@@ -2436,6 +2436,8 @@ void CGeometry::UpdateGeometry(CGeometry **geometry_container, CConfig *config)
24362436
24372437 }
24382438
2439+ /* --- Compute the global surface areas for all markers. ---*/
2440+ geometry_container[MESH_0]->ComputeSurfaceAreaCfgFile (config);
24392441}
24402442
24412443void CGeometry::SetCustomBoundary (CConfig *config) {
@@ -2503,6 +2505,57 @@ void CGeometry::UpdateCustomBoundaryConditions(CGeometry **geometry_container, C
25032505 }
25042506}
25052507
2508+ void CGeometry::ComputeSurfaceAreaCfgFile (const CConfig *config) {
2509+ const auto nMarker_Global = config->GetnMarker_CfgFile ();
2510+ SurfaceAreaCfgFile.resize (nMarker_Global);
2511+ vector<su2double> LocalSurfaceArea (nMarker_Global, 0.0 );
2512+
2513+ /* --- Loop over all local markers ---*/
2514+ for (unsigned short iMarker = 0 ; iMarker < nMarker; iMarker++) {
2515+
2516+ const auto Local_TagBound = config->GetMarker_All_TagBound (iMarker);
2517+
2518+ /* --- Loop over all global markers, and find the local-global pair via
2519+ matching unique string tags. ---*/
2520+ for (unsigned short iMarker_Global = 0 ; iMarker_Global < nMarker_Global; iMarker_Global++) {
2521+
2522+ const auto Global_TagBound = config->GetMarker_CfgFile_TagBound (iMarker_Global);
2523+ if (Local_TagBound == Global_TagBound) {
2524+
2525+ for (auto iVertex = 0ul ; iVertex < nVertex[iMarker]; iVertex++ ) {
2526+
2527+ const auto iPoint = vertex[iMarker][iVertex]->GetNode ();
2528+
2529+ if (!nodes->GetDomain (iPoint)) continue ;
2530+
2531+ const auto AreaNormal = vertex[iMarker][iVertex]->GetNormal ();
2532+ const auto Area = GeometryToolbox::Norm (nDim, AreaNormal);
2533+
2534+ LocalSurfaceArea[iMarker_Global] += Area;
2535+ }// for iVertex
2536+ }// if Local == Global
2537+ }// for iMarker_Global
2538+ }// for iMarker
2539+
2540+ SU2_MPI::Allreduce (LocalSurfaceArea.data (), SurfaceAreaCfgFile.data (), SurfaceAreaCfgFile.size (), MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm ());
2541+ }
2542+
2543+ su2double CGeometry::GetSurfaceArea (const CConfig *config, unsigned short val_marker) const {
2544+ /* ---Find the precomputed marker surface area by local-global string-matching. ---*/
2545+ const auto Marker_Tag = config->GetMarker_All_TagBound (val_marker);
2546+
2547+ for (unsigned short iMarker_Global = 0 ; iMarker_Global < config->GetnMarker_CfgFile (); iMarker_Global++) {
2548+
2549+ const auto Global_TagBound = config->GetMarker_CfgFile_TagBound (iMarker_Global);
2550+
2551+ if (Marker_Tag == Global_TagBound)
2552+ return SurfaceAreaCfgFile[iMarker_Global];
2553+
2554+ }
2555+
2556+ SU2_MPI::Error (" Unable to match local-marker with cfg-marker for Surface Area." , CURRENT_FUNCTION);
2557+ return 0.0 ;
2558+ }
25062559
25072560void CGeometry::ComputeSurf_Straightness (CConfig *config,
25082561 bool print_on_screen) {
0 commit comments