@@ -98,6 +98,7 @@ CHeatSolver::CHeatSolver(CGeometry *geometry, CConfig *config, unsigned short iM
9898
9999 HeatFlux_per_Marker.resize (nMarker, 0.0 );
100100 AverageT_per_Marker.resize (nMarker, 0.0 );
101+ Surface_Areas.resize (config->GetnMarker_HeatFlux (), 0.0 );
101102
102103 Set_Heatflux_Areas (geometry, config);
103104
@@ -518,8 +519,14 @@ void CHeatSolver::Viscous_Residual(CGeometry *geometry, CSolver **solver_contain
518519
519520void CHeatSolver::Set_Heatflux_Areas (CGeometry *geometry, CConfig *config) {
520521
521- su2double Local_HeatFlux_Areas_Monitor, Area, *Normal ;
522+ string HeatFlux_Tag, Marker_Tag ;
522523
524+ su2double *Local_Surface_Areas, Local_HeatFlux_Areas_Monitor, Area, *Normal;
525+ Local_Surface_Areas = new su2double[config->GetnMarker_HeatFlux ()];
526+
527+ for (auto iMarker_HeatFlux = 0u ; iMarker_HeatFlux < config->GetnMarker_HeatFlux (); iMarker_HeatFlux++ ) {
528+ Local_Surface_Areas[iMarker_HeatFlux] = 0.0 ;
529+ }
523530 Local_HeatFlux_Areas_Monitor = 0.0 ;
524531
525532 for (auto iMarker = 0u ; iMarker < nMarker; iMarker++) {
@@ -528,11 +535,13 @@ void CHeatSolver::Set_Heatflux_Areas(CGeometry *geometry, CConfig *config) {
528535
529536 for (auto iMarker_HeatFlux = 0u ; iMarker_HeatFlux < config->GetnMarker_HeatFlux (); iMarker_HeatFlux++ ) {
530537
531- const auto HeatFlux_Tag = config->GetMarker_HeatFlux_TagBound (iMarker_HeatFlux);
532- const auto Marker_Tag = config->GetMarker_All_TagBound (iMarker);
538+ HeatFlux_Tag = config->GetMarker_HeatFlux_TagBound (iMarker_HeatFlux);
539+ Marker_Tag = config->GetMarker_All_TagBound (iMarker);
533540
534541 if (Marker_Tag == HeatFlux_Tag) {
535542
543+ Local_Surface_Areas[iMarker_HeatFlux] = 0.0 ;
544+
536545 for (auto iVertex = 0ul ; iVertex < geometry->nVertex [iMarker]; iVertex++ ) {
537546
538547 const auto iPoint = geometry->vertex [iMarker][iVertex]->GetNode ();
@@ -542,6 +551,8 @@ void CHeatSolver::Set_Heatflux_Areas(CGeometry *geometry, CConfig *config) {
542551 Normal = geometry->vertex [iMarker][iVertex]->GetNormal ();
543552 Area = GeometryToolbox::Norm (nDim, Normal);
544553
554+ Local_Surface_Areas[iMarker_HeatFlux] += Area;
555+
545556 if (Monitoring == YES)
546557 Local_HeatFlux_Areas_Monitor += Area;
547558
@@ -550,12 +561,15 @@ void CHeatSolver::Set_Heatflux_Areas(CGeometry *geometry, CConfig *config) {
550561 }
551562 }
552563
564+ SU2_MPI::Allreduce (Local_Surface_Areas, Surface_Areas.data (), Surface_Areas.size (), MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm ());
553565 SU2_MPI::Allreduce (&Local_HeatFlux_Areas_Monitor, &Total_HeatFlux_Areas_Monitor, 1 , MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm ());
554566
555567 Total_HeatFlux_Areas = 0.0 ;
556568 for (auto iMarker_HeatFlux = 0u ; iMarker_HeatFlux < config->GetnMarker_HeatFlux (); iMarker_HeatFlux++ ) {
557569 Total_HeatFlux_Areas += Surface_Areas[iMarker_HeatFlux];
558570 }
571+
572+ delete[] Local_Surface_Areas;
559573}
560574
561575void CHeatSolver::BC_Isothermal_Wall (CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
0 commit comments