diff --git a/Common/include/CConfig.hpp b/Common/include/CConfig.hpp index d3e6e3f1aa6..ab69490ee4f 100644 --- a/Common/include/CConfig.hpp +++ b/Common/include/CConfig.hpp @@ -2827,6 +2827,7 @@ class CConfig { * \return Total number of boundary markers. */ unsigned short GetnMarker_NearFieldBound(void) const { return nMarker_NearFieldBound; } + /*! * \brief Get the total number of deformable markers at the boundary. * \return Total number of deformable markers at the boundary. @@ -3351,7 +3352,7 @@ class CConfig { * \param[in] val_marker - Index of the marker in which we are interested. * \param[in] val_interface - 0 or 1 depending if the the marker is or not a DEFORM_MESH marker. */ - void SetMarker_All_Deform_Mesh(unsigned short val_marker, unsigned short val_interface) { Marker_All_Deform_Mesh[val_marker] = val_interface; } + void SetMarker_All_Deform_Mesh(unsigned short val_marker, unsigned short val_deform) { Marker_All_Deform_Mesh[val_marker] = val_deform; } /*! * \brief Set if a in marker val_marker the flow load will be computed/employed. @@ -6015,116 +6016,116 @@ class CConfig { * \note When we read the config file, it stores the markers in a particular vector. * \return Index in the config information of the marker val_marker. */ - unsigned short GetMarker_CfgFile_TagBound(string val_marker); + unsigned short GetMarker_CfgFile_TagBound(string val_marker) const; /*! * \brief Get the name in the config information of the marker number val_marker. * \note When we read the config file, it stores the markers in a particular vector. * \return Name of the marker in the config information of the marker val_marker. */ - string GetMarker_CfgFile_TagBound(unsigned short val_marker); + string GetMarker_CfgFile_TagBound(unsigned short val_marker) const; /*! * \brief Get the boundary information (kind of boundary) in the config information of the marker val_marker. * \return Kind of boundary in the config information of the marker val_marker. */ - unsigned short GetMarker_CfgFile_KindBC(string val_marker); + unsigned short GetMarker_CfgFile_KindBC(string val_marker) const; /*! * \brief Get the monitoring information from the config definition for the marker val_marker. * \return Monitoring information of the boundary in the config information for the marker val_marker. */ - unsigned short GetMarker_CfgFile_Monitoring(string val_marker); + unsigned short GetMarker_CfgFile_Monitoring(string val_marker) const; /*! * \brief Get the monitoring information from the config definition for the marker val_marker. * \return Monitoring information of the boundary in the config information for the marker val_marker. */ - unsigned short GetMarker_CfgFile_GeoEval(string val_marker); + unsigned short GetMarker_CfgFile_GeoEval(string val_marker) const; /*! * \brief Get the monitoring information from the config definition for the marker val_marker. * \return Monitoring information of the boundary in the config information for the marker val_marker. */ - unsigned short GetMarker_CfgFile_Designing(string val_marker); + unsigned short GetMarker_CfgFile_Designing(string val_marker) const; /*! * \brief Get the plotting information from the config definition for the marker val_marker. * \return Plotting information of the boundary in the config information for the marker val_marker. */ - unsigned short GetMarker_CfgFile_Plotting(string val_marker); + unsigned short GetMarker_CfgFile_Plotting(string val_marker) const; /*! * \brief Get the plotting information from the config definition for the marker val_marker. * \return Plotting information of the boundary in the config information for the marker val_marker. */ - unsigned short GetMarker_CfgFile_Analyze(string val_marker); + unsigned short GetMarker_CfgFile_Analyze(string val_marker) const; /*! - * \brief Get the FSI interface information from the config definition for the marker val_marker. + * \brief Get the multi-physics interface information from the config definition for the marker val_marker. * \return Plotting information of the boundary in the config information for the marker val_marker. */ - unsigned short GetMarker_CfgFile_ZoneInterface(string val_marker); + unsigned short GetMarker_CfgFile_ZoneInterface(string val_marker) const; /*! * \brief Get the TurboPerformance information from the config definition for the marker val_marker. * \return TurboPerformance information of the boundary in the config information for the marker val_marker. */ - unsigned short GetMarker_CfgFile_Turbomachinery(string val_marker); + unsigned short GetMarker_CfgFile_Turbomachinery(string val_marker) const; /*! * \brief Get the TurboPerformance flag information from the config definition for the marker val_marker. * \return TurboPerformance flag information of the boundary in the config information for the marker val_marker. */ - unsigned short GetMarker_CfgFile_TurbomachineryFlag(string val_marker); + unsigned short GetMarker_CfgFile_TurbomachineryFlag(string val_marker) const; /*! * \brief Get the MixingPlane interface information from the config definition for the marker val_marker. * \return Plotting information of the boundary in the config information for the marker val_marker. */ - unsigned short GetMarker_CfgFile_MixingPlaneInterface(string val_marker); + unsigned short GetMarker_CfgFile_MixingPlaneInterface(string val_marker) const; /*! * \brief Get the DV information from the config definition for the marker val_marker. * \return DV information of the boundary in the config information for the marker val_marker. */ - unsigned short GetMarker_CfgFile_DV(string val_marker); + unsigned short GetMarker_CfgFile_DV(string val_marker) const; /*! * \brief Get the motion information from the config definition for the marker val_marker. * \return Motion information of the boundary in the config information for the marker val_marker. */ - unsigned short GetMarker_CfgFile_Moving(string val_marker); + unsigned short GetMarker_CfgFile_Moving(string val_marker) const; /*! * \brief Get the DEFORM_MESH information from the config definition for the marker val_marker. * \return DEFORM_MESH information of the boundary in the config information for the marker val_marker. */ - unsigned short GetMarker_CfgFile_Deform_Mesh(string val_marker); + unsigned short GetMarker_CfgFile_Deform_Mesh(string val_marker) const; /*! * \brief Get the Fluid_Load information from the config definition for the marker val_marker. * \return Fluid_Load information of the boundary in the config information for the marker val_marker. */ - unsigned short GetMarker_CfgFile_Fluid_Load(string val_marker); + unsigned short GetMarker_CfgFile_Fluid_Load(string val_marker) const; /*! * \brief Get the Python customization information from the config definition for the marker val_marker. * \return Python customization information of the boundary in the config information for the marker val_marker. */ - unsigned short GetMarker_CfgFile_PyCustom(string val_marker); + unsigned short GetMarker_CfgFile_PyCustom(string val_marker) const; /*! * \brief Get the periodic information from the config definition of the marker val_marker. * \return Periodic information of the boundary in the config information of the marker val_marker. */ - unsigned short GetMarker_CfgFile_PerBound(string val_marker); + unsigned short GetMarker_CfgFile_PerBound(string val_marker) const; /*! * \brief Get the name of the marker val_marker. * \return The interface which owns that marker val_marker. */ - int GetMarker_ZoneInterface(string val_marker); + unsigned short GetMarker_ZoneInterface(string val_marker) const; /*! * \brief Get the name of the marker val_iMarker. @@ -6138,7 +6139,6 @@ class CConfig { */ unsigned short GetnMarker_ZoneInterface(void) const { return nMarker_ZoneInterface; } - /*! * \brief Determines whether a marker with index iMarker is a solid boundary. * \param iMarker @@ -9364,4 +9364,11 @@ class CConfig { */ unsigned long GetEdgeColoringGroupSize(void) const { return edgeColorGroupSize; } + /*! + * \brief Find the marker index (if any) that is part of a given interface pair. + * \param[in] iInterface - Number of the interface pair being tested, starting at 0. + * \return -1 if (on this mpi rank) the zone defined by config is not part of the interface. + */ + short FindInterfaceMarker(unsigned short iInterface) const; + }; diff --git a/Common/include/interface_interpolation/CInterpolator.hpp b/Common/include/interface_interpolation/CInterpolator.hpp index d1aa737958d..3616b1d7531 100644 --- a/Common/include/interface_interpolation/CInterpolator.hpp +++ b/Common/include/interface_interpolation/CInterpolator.hpp @@ -109,13 +109,6 @@ class CInterpolator { */ virtual void PrintStatistics(void) const { } - /*! - * \brief Find the index of the interface marker shared by that zone - * \param[in] config - Definition of the particular problem. - * \param[in] val_marker_interface - Interface tag. - */ - static int FindInterfaceMarker(const CConfig *config, unsigned short val_marker_interface); - /*! * \brief Check whether an interface should be processed or not, i.e. if it is part of the zones. * \param[in] val_markDonor - Marker tag from donor zone. diff --git a/Common/include/mpi_structure.hpp b/Common/include/mpi_structure.hpp index 594278ee25e..0c28bde6a78 100644 --- a/Common/include/mpi_structure.hpp +++ b/Common/include/mpi_structure.hpp @@ -332,6 +332,7 @@ class CMediMPIWrapper: public CBaseMPIWrapper { #define MPI_MAX 10 #define MPI_INT 11 #define MPI_PROD 12 +#define MPI_STATUS_IGNORE nullptr class CBaseMPIWrapper { public: @@ -448,7 +449,6 @@ class CBaseMPIWrapper { }; typedef int SU2_Comm; typedef CBaseMPIWrapper SU2_MPI; -extern CBaseMPIWrapper::Status* MPI_STATUS_IGNORE; #endif diff --git a/Common/src/CConfig.cpp b/Common/src/CConfig.cpp index b1d0e74c5fb..cab372fecb9 100644 --- a/Common/src/CConfig.cpp +++ b/Common/src/CConfig.cpp @@ -5289,18 +5289,16 @@ void CConfig::SetMarkers(unsigned short val_software) { Marker_CfgFile_Analyze[iMarker_CfgFile] = YES; } - /*--- Identification of Fluid-Structure interface markers ---*/ + /*--- Identification of multi-physics interface markers ---*/ for (iMarker_CfgFile = 0; iMarker_CfgFile < nMarker_CfgFile; iMarker_CfgFile++) { - unsigned short indexMarker = 0; Marker_CfgFile_ZoneInterface[iMarker_CfgFile] = NO; for (iMarker_ZoneInterface = 0; iMarker_ZoneInterface < nMarker_ZoneInterface; iMarker_ZoneInterface++) if (Marker_CfgFile_TagBound[iMarker_CfgFile] == Marker_ZoneInterface[iMarker_ZoneInterface]) - indexMarker = (int)(iMarker_ZoneInterface/2+1); - Marker_CfgFile_ZoneInterface[iMarker_CfgFile] = indexMarker; + Marker_CfgFile_ZoneInterface[iMarker_CfgFile] = YES; } -/*--- Identification of Turbomachinery markers and flag them---*/ + /*--- Identification of Turbomachinery markers and flag them---*/ for (iMarker_CfgFile = 0; iMarker_CfgFile < nMarker_CfgFile; iMarker_CfgFile++) { unsigned short indexMarker=0; @@ -7054,7 +7052,7 @@ bool CConfig::TokenizeString(string & str, string & option_name, return true; } -unsigned short CConfig::GetMarker_CfgFile_TagBound(string val_marker) { +unsigned short CConfig::GetMarker_CfgFile_TagBound(string val_marker) const { unsigned short iMarker_CfgFile; @@ -7066,157 +7064,145 @@ unsigned short CConfig::GetMarker_CfgFile_TagBound(string val_marker) { return 0; } -string CConfig::GetMarker_CfgFile_TagBound(unsigned short val_marker) { +string CConfig::GetMarker_CfgFile_TagBound(unsigned short val_marker) const { return Marker_CfgFile_TagBound[val_marker]; } -unsigned short CConfig::GetMarker_CfgFile_KindBC(string val_marker) { +unsigned short CConfig::GetMarker_CfgFile_KindBC(string val_marker) const { unsigned short iMarker_CfgFile; for (iMarker_CfgFile = 0; iMarker_CfgFile < nMarker_CfgFile; iMarker_CfgFile++) if (Marker_CfgFile_TagBound[iMarker_CfgFile] == val_marker) break; return Marker_CfgFile_KindBC[iMarker_CfgFile]; } -unsigned short CConfig::GetMarker_CfgFile_Monitoring(string val_marker) { +unsigned short CConfig::GetMarker_CfgFile_Monitoring(string val_marker) const { unsigned short iMarker_CfgFile; for (iMarker_CfgFile = 0; iMarker_CfgFile < nMarker_CfgFile; iMarker_CfgFile++) if (Marker_CfgFile_TagBound[iMarker_CfgFile] == val_marker) break; return Marker_CfgFile_Monitoring[iMarker_CfgFile]; } -unsigned short CConfig::GetMarker_CfgFile_GeoEval(string val_marker) { +unsigned short CConfig::GetMarker_CfgFile_GeoEval(string val_marker) const { unsigned short iMarker_CfgFile; for (iMarker_CfgFile = 0; iMarker_CfgFile < nMarker_CfgFile; iMarker_CfgFile++) if (Marker_CfgFile_TagBound[iMarker_CfgFile] == val_marker) break; return Marker_CfgFile_GeoEval[iMarker_CfgFile]; } -unsigned short CConfig::GetMarker_CfgFile_Designing(string val_marker) { +unsigned short CConfig::GetMarker_CfgFile_Designing(string val_marker) const { unsigned short iMarker_CfgFile; for (iMarker_CfgFile = 0; iMarker_CfgFile < nMarker_CfgFile; iMarker_CfgFile++) if (Marker_CfgFile_TagBound[iMarker_CfgFile] == val_marker) break; return Marker_CfgFile_Designing[iMarker_CfgFile]; } -unsigned short CConfig::GetMarker_CfgFile_Plotting(string val_marker) { +unsigned short CConfig::GetMarker_CfgFile_Plotting(string val_marker) const { unsigned short iMarker_CfgFile; for (iMarker_CfgFile = 0; iMarker_CfgFile < nMarker_CfgFile; iMarker_CfgFile++) if (Marker_CfgFile_TagBound[iMarker_CfgFile] == val_marker) break; return Marker_CfgFile_Plotting[iMarker_CfgFile]; } -unsigned short CConfig::GetMarker_CfgFile_Analyze(string val_marker) { +unsigned short CConfig::GetMarker_CfgFile_Analyze(string val_marker) const { unsigned short iMarker_CfgFile; for (iMarker_CfgFile = 0; iMarker_CfgFile < nMarker_CfgFile; iMarker_CfgFile++) if (Marker_CfgFile_TagBound[iMarker_CfgFile] == val_marker) break; return Marker_CfgFile_Analyze[iMarker_CfgFile]; } - -unsigned short CConfig::GetMarker_CfgFile_ZoneInterface(string val_marker) { +unsigned short CConfig::GetMarker_CfgFile_ZoneInterface(string val_marker) const { unsigned short iMarker_CfgFile; for (iMarker_CfgFile = 0; iMarker_CfgFile < nMarker_CfgFile; iMarker_CfgFile++) if (Marker_CfgFile_TagBound[iMarker_CfgFile] == val_marker) break; return Marker_CfgFile_ZoneInterface[iMarker_CfgFile]; } -unsigned short CConfig::GetMarker_CfgFile_Turbomachinery(string val_marker) { +unsigned short CConfig::GetMarker_CfgFile_Turbomachinery(string val_marker) const { unsigned short iMarker_CfgFile; for (iMarker_CfgFile = 0; iMarker_CfgFile < nMarker_CfgFile; iMarker_CfgFile++) if (Marker_CfgFile_TagBound[iMarker_CfgFile] == val_marker) break; return Marker_CfgFile_Turbomachinery[iMarker_CfgFile]; } -unsigned short CConfig::GetMarker_CfgFile_TurbomachineryFlag(string val_marker) { +unsigned short CConfig::GetMarker_CfgFile_TurbomachineryFlag(string val_marker) const { unsigned short iMarker_CfgFile; for (iMarker_CfgFile = 0; iMarker_CfgFile < nMarker_CfgFile; iMarker_CfgFile++) if (Marker_CfgFile_TagBound[iMarker_CfgFile] == val_marker) break; return Marker_CfgFile_TurbomachineryFlag[iMarker_CfgFile]; } -unsigned short CConfig::GetMarker_CfgFile_MixingPlaneInterface(string val_marker) { +unsigned short CConfig::GetMarker_CfgFile_MixingPlaneInterface(string val_marker) const { unsigned short iMarker_CfgFile; for (iMarker_CfgFile = 0; iMarker_CfgFile < nMarker_CfgFile; iMarker_CfgFile++) if (Marker_CfgFile_TagBound[iMarker_CfgFile] == val_marker) break; return Marker_CfgFile_MixingPlaneInterface[iMarker_CfgFile]; } -unsigned short CConfig::GetMarker_CfgFile_DV(string val_marker) { +unsigned short CConfig::GetMarker_CfgFile_DV(string val_marker) const { unsigned short iMarker_CfgFile; for (iMarker_CfgFile = 0; iMarker_CfgFile < nMarker_CfgFile; iMarker_CfgFile++) if (Marker_CfgFile_TagBound[iMarker_CfgFile] == val_marker) break; return Marker_CfgFile_DV[iMarker_CfgFile]; } -unsigned short CConfig::GetMarker_CfgFile_Moving(string val_marker) { +unsigned short CConfig::GetMarker_CfgFile_Moving(string val_marker) const { unsigned short iMarker_CfgFile; for (iMarker_CfgFile = 0; iMarker_CfgFile < nMarker_CfgFile; iMarker_CfgFile++) if (Marker_CfgFile_TagBound[iMarker_CfgFile] == val_marker) break; return Marker_CfgFile_Moving[iMarker_CfgFile]; } -unsigned short CConfig::GetMarker_CfgFile_Deform_Mesh(string val_marker) { +unsigned short CConfig::GetMarker_CfgFile_Deform_Mesh(string val_marker) const { unsigned short iMarker_CfgFile; for (iMarker_CfgFile = 0; iMarker_CfgFile < nMarker_CfgFile; iMarker_CfgFile++) if (Marker_CfgFile_TagBound[iMarker_CfgFile] == val_marker) break; return Marker_CfgFile_Deform_Mesh[iMarker_CfgFile]; } -unsigned short CConfig::GetMarker_CfgFile_Fluid_Load(string val_marker) { +unsigned short CConfig::GetMarker_CfgFile_Fluid_Load(string val_marker) const { unsigned short iMarker_CfgFile; for (iMarker_CfgFile = 0; iMarker_CfgFile < nMarker_CfgFile; iMarker_CfgFile++) if (Marker_CfgFile_TagBound[iMarker_CfgFile] == val_marker) break; return Marker_CfgFile_Fluid_Load[iMarker_CfgFile]; } -unsigned short CConfig::GetMarker_CfgFile_PyCustom(string val_marker){ +unsigned short CConfig::GetMarker_CfgFile_PyCustom(string val_marker) const { unsigned short iMarker_CfgFile; for (iMarker_CfgFile=0; iMarker_CfgFile < nMarker_CfgFile; iMarker_CfgFile++) if (Marker_CfgFile_TagBound[iMarker_CfgFile] == val_marker) break; return Marker_CfgFile_PyCustom[iMarker_CfgFile]; } -unsigned short CConfig::GetMarker_CfgFile_PerBound(string val_marker) { +unsigned short CConfig::GetMarker_CfgFile_PerBound(string val_marker) const { unsigned short iMarker_CfgFile; for (iMarker_CfgFile = 0; iMarker_CfgFile < nMarker_CfgFile; iMarker_CfgFile++) if (Marker_CfgFile_TagBound[iMarker_CfgFile] == val_marker) break; return Marker_CfgFile_PerBound[iMarker_CfgFile]; } -int CConfig::GetMarker_ZoneInterface(string val_marker) { - unsigned short iMarker_CfgFile; - for (iMarker_CfgFile = 0; iMarker_CfgFile < nMarker_CfgFile; iMarker_CfgFile++) - - if (Marker_CfgFile_TagBound[iMarker_CfgFile] == val_marker) - return Marker_CfgFile_ZoneInterface[iMarker_CfgFile]; - return 0; +unsigned short CConfig::GetMarker_ZoneInterface(string val_marker) const { + unsigned short iMarker_CfgFile; + for (iMarker_CfgFile = 0; iMarker_CfgFile < nMarker_CfgFile; iMarker_CfgFile++) + if (Marker_CfgFile_TagBound[iMarker_CfgFile] == val_marker) break; + return Marker_CfgFile_ZoneInterface[iMarker_CfgFile]; } +bool CConfig::GetSolid_Wall(unsigned short iMarker) const { -bool CConfig::GetSolid_Wall(unsigned short iMarker) const{ - - if (Marker_All_KindBC[iMarker] == HEAT_FLUX || - Marker_All_KindBC[iMarker] == ISOTHERMAL || - Marker_All_KindBC[iMarker] == CHT_WALL_INTERFACE || - Marker_All_KindBC[iMarker] == EULER_WALL){ - return true; - } - - return false; + return (Marker_All_KindBC[iMarker] == HEAT_FLUX || + Marker_All_KindBC[iMarker] == ISOTHERMAL || + Marker_All_KindBC[iMarker] == CHT_WALL_INTERFACE || + Marker_All_KindBC[iMarker] == EULER_WALL); } -bool CConfig::GetViscous_Wall(unsigned short iMarker) const{ +bool CConfig::GetViscous_Wall(unsigned short iMarker) const { - if (Marker_All_KindBC[iMarker] == HEAT_FLUX || - Marker_All_KindBC[iMarker] == ISOTHERMAL || - Marker_All_KindBC[iMarker] == CHT_WALL_INTERFACE){ - return true; - } - - return false; + return (Marker_All_KindBC[iMarker] == HEAT_FLUX || + Marker_All_KindBC[iMarker] == ISOTHERMAL || + Marker_All_KindBC[iMarker] == CHT_WALL_INTERFACE); } -void CConfig::SetSurface_Movement(unsigned short iMarker, unsigned short kind_movement){ +void CConfig::SetSurface_Movement(unsigned short iMarker, unsigned short kind_movement) { unsigned short* new_surface_movement = new unsigned short[nMarker_Moving + 1]; string* new_marker_moving = new string[nMarker_Moving+1]; @@ -9065,7 +9051,6 @@ su2double CConfig::GetWall_Emissivity(string val_marker) const { return Wall_Emissivity[iMarker_Emissivity]; } - su2double CConfig::GetFlowLoad_Value(string val_marker) const { unsigned short iMarker_FlowLoad; for (iMarker_FlowLoad = 0; iMarker_FlowLoad < nMarker_FlowLoad; iMarker_FlowLoad++) @@ -9073,6 +9058,20 @@ su2double CConfig::GetFlowLoad_Value(string val_marker) const { return FlowLoad_Value[iMarker_FlowLoad]; } +short CConfig::FindInterfaceMarker(unsigned short iInterface) const { + + /*--- The names of the two markers that form the interface. ---*/ + const auto& sideA = Marker_ZoneInterface[2*iInterface]; + const auto& sideB = Marker_ZoneInterface[2*iInterface+1]; + + for (unsigned short iMarker = 0; iMarker < nMarker_All; iMarker++) { + /*--- If the marker is sideA or sideB of the interface (order does not matter). ---*/ + const auto& tag = Marker_All_TagBound[iMarker]; + if ((tag == sideA) || (tag == sideB)) return iMarker; + } + return -1; +} + void CConfig::SetSpline(vector &x, vector &y, unsigned long n, su2double yp1, su2double ypn, vector &y2) { unsigned long i, k; su2double p, qn, sig, un, *u; diff --git a/Common/src/geometry/CPhysicalGeometry.cpp b/Common/src/geometry/CPhysicalGeometry.cpp index ed149c7fda3..f74dd906879 100644 --- a/Common/src/geometry/CPhysicalGeometry.cpp +++ b/Common/src/geometry/CPhysicalGeometry.cpp @@ -5438,9 +5438,7 @@ void CPhysicalGeometry::SetRCM_Ordering(CConfig *config) { config->GetMarker_All_KindBC(iMarker) != PERIODIC_BOUNDARY) node[InvResult[iPoint]]->SetPhysicalBoundary(true); - if (config->GetMarker_All_KindBC(iMarker) == EULER_WALL || - config->GetMarker_All_KindBC(iMarker) == HEAT_FLUX || - config->GetMarker_All_KindBC(iMarker) == ISOTHERMAL) + if (config->GetSolid_Wall(iMarker)) node[InvResult[iPoint]]->SetSolidBoundary(true); if (config->GetMarker_All_KindBC(iMarker) == PERIODIC_BOUNDARY) diff --git a/Common/src/grid_movement_structure.cpp b/Common/src/grid_movement_structure.cpp index 8c99ae1db49..892e56f80ec 100644 --- a/Common/src/grid_movement_structure.cpp +++ b/Common/src/grid_movement_structure.cpp @@ -1728,7 +1728,7 @@ void CVolumetricMovement::SetBoundaryDisplacements(CGeometry *geometry, CConfig /*--- Move the FSI interfaces ---*/ for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { - if ((config->GetMarker_All_ZoneInterface(iMarker) != 0) && (Kind_SU2 == SU2_CFD)) { + if ((config->GetMarker_All_ZoneInterface(iMarker) == YES) && (Kind_SU2 == SU2_CFD)) { for (iVertex = 0; iVertex < geometry->nVertex[iMarker]; iVertex++) { iPoint = geometry->vertex[iMarker][iVertex]->GetNode(); VarCoord = geometry->vertex[iMarker][iVertex]->GetVarCoord(); diff --git a/Common/src/interface_interpolation/CInterpolator.cpp b/Common/src/interface_interpolation/CInterpolator.cpp index 977fe378a62..245a0a141d8 100644 --- a/Common/src/interface_interpolation/CInterpolator.cpp +++ b/Common/src/interface_interpolation/CInterpolator.cpp @@ -41,15 +41,6 @@ CInterpolator::CInterpolator(CGeometry ****geometry_container, const CConfig* co target_geometry(geometry_container[jZone][INST_0][MESH_0]) { } -int CInterpolator::FindInterfaceMarker(const CConfig *config, unsigned short val_marker_interface) { - - for (unsigned short iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { - /*--- If the tag GetMarker_All_ZoneInterface(iMarker) equals the interface we are looking for. ---*/ - if (config->GetMarker_All_ZoneInterface(iMarker) == val_marker_interface) return iMarker; - } - return -1; -} - bool CInterpolator::CheckInterfaceBoundary(int markDonor, int markTarget) { /*--- Determine whether the boundary is not on the rank because of @@ -63,8 +54,8 @@ bool CInterpolator::CheckInterfaceBoundary(int markDonor, int markTarget) { bool CInterpolator::CheckZonesInterface(const CConfig* donor, const CConfig* target) { /*--- Loop over all interface markers to find if the 2 zones share any interface boundary. ---*/ - for (auto iInter = 1u; iInter <= (donor->GetMarker_n_ZoneInterface()/2); iInter++) { - if (CheckInterfaceBoundary(FindInterfaceMarker(donor, iInter), FindInterfaceMarker(target, iInter))) + for (auto iInter = 0; iInter < (donor->GetMarker_n_ZoneInterface()/2); iInter++) { + if (CheckInterfaceBoundary(donor->FindInterfaceMarker(iInter), target->FindInterfaceMarker(iInter))) return true; } return false; diff --git a/Common/src/interface_interpolation/CIsoparametric.cpp b/Common/src/interface_interpolation/CIsoparametric.cpp index 807849ae669..b130e58e0ca 100644 --- a/Common/src/interface_interpolation/CIsoparametric.cpp +++ b/Common/src/interface_interpolation/CIsoparametric.cpp @@ -73,7 +73,7 @@ void CIsoparametric::SetTransferCoeff(const CConfig* const* config) { /*--- Cycle over nMarkersInt interface to determine communication pattern. ---*/ - for (unsigned short iMarkerInt = 1; iMarkerInt <= nMarkerInt; iMarkerInt++) { + for (unsigned short iMarkerInt = 0; iMarkerInt < nMarkerInt; iMarkerInt++) { /* High level procedure: * - Loop through vertices of the target grid; @@ -82,10 +82,10 @@ void CIsoparametric::SetTransferCoeff(const CConfig* const* config) { */ /*--- On the donor side: find the tag of the boundary sharing the interface. ---*/ - const auto markDonor = FindInterfaceMarker(config[donorZone], iMarkerInt); + const auto markDonor = config[donorZone]->FindInterfaceMarker(iMarkerInt); /*--- On the target side: find the tag of the boundary sharing the interface. ---*/ - const auto markTarget = FindInterfaceMarker(config[targetZone], iMarkerInt); + const auto markTarget = config[targetZone]->FindInterfaceMarker(iMarkerInt); /*--- Checks if the zone contains the interface, if not continue to the next step. ---*/ if (!CheckInterfaceBoundary(markDonor, markTarget)) continue; diff --git a/Common/src/interface_interpolation/CMirror.cpp b/Common/src/interface_interpolation/CMirror.cpp index 4748d2c6965..0e1d9e8d578 100644 --- a/Common/src/interface_interpolation/CMirror.cpp +++ b/Common/src/interface_interpolation/CMirror.cpp @@ -53,7 +53,7 @@ void CMirror::SetTransferCoeff(const CConfig* const* config) { const auto nMarkerInt = (config[targetZone]->GetMarker_n_ZoneInterface())/2; /*--- For the number of markers on the interface... ---*/ - for (unsigned short iMarkerInt = 1; iMarkerInt <= nMarkerInt; iMarkerInt++) { + for (unsigned short iMarkerInt = 0; iMarkerInt < nMarkerInt; iMarkerInt++) { /* High level procedure: * - Gather the interpolation matrix of the donor geometry; @@ -61,10 +61,10 @@ void CMirror::SetTransferCoeff(const CConfig* const* config) { */ /*--- On the donor side: find the tag of the boundary sharing the interface ---*/ - const auto markDonor = FindInterfaceMarker(config[donorZone], iMarkerInt); + const auto markDonor = config[donorZone]->FindInterfaceMarker(iMarkerInt); /*--- On the target side: find the tag of the boundary sharing the interface ---*/ - const auto markTarget = FindInterfaceMarker(config[targetZone], iMarkerInt); + const auto markTarget = config[targetZone]->FindInterfaceMarker(iMarkerInt); /*--- Checks if the zone contains the interface, if not continue to the next step ---*/ if (!CheckInterfaceBoundary(markDonor, markTarget)) continue; diff --git a/Common/src/interface_interpolation/CNearestNeighbor.cpp b/Common/src/interface_interpolation/CNearestNeighbor.cpp index aeb42bf1135..70d42932279 100644 --- a/Common/src/interface_interpolation/CNearestNeighbor.cpp +++ b/Common/src/interface_interpolation/CNearestNeighbor.cpp @@ -71,13 +71,13 @@ void CNearestNeighbor::SetTransferCoeff(const CConfig* const* config) { AvgDistance = MaxDistance = 0.0; unsigned long totalTargetPoints = 0; - for (unsigned short iMarkerInt = 1; iMarkerInt <= nMarkerInt; iMarkerInt++) { + for (unsigned short iMarkerInt = 0; iMarkerInt < nMarkerInt; iMarkerInt++) { /*--- On the donor side: find the tag of the boundary sharing the interface. ---*/ - const auto markDonor = FindInterfaceMarker(config[donorZone], iMarkerInt); + const auto markDonor = config[donorZone]->FindInterfaceMarker(iMarkerInt); /*--- On the target side: find the tag of the boundary sharing the interface. ---*/ - const auto markTarget = FindInterfaceMarker(config[targetZone], iMarkerInt); + const auto markTarget = config[targetZone]->FindInterfaceMarker(iMarkerInt); /*--- Checks if the zone contains the interface, if not continue to the next step. ---*/ if (!CheckInterfaceBoundary(markDonor, markTarget)) continue; diff --git a/Common/src/interface_interpolation/CRadialBasisFunction.cpp b/Common/src/interface_interpolation/CRadialBasisFunction.cpp index 909f852eb53..c4958a9b6cd 100644 --- a/Common/src/interface_interpolation/CRadialBasisFunction.cpp +++ b/Common/src/interface_interpolation/CRadialBasisFunction.cpp @@ -121,10 +121,10 @@ void CRadialBasisFunction::SetTransferCoeff(const CConfig* const* config) { for (unsigned short iMarkerInt = 0; iMarkerInt < nMarkerInt; ++iMarkerInt) { /*--- On the donor side: find the tag of the boundary sharing the interface. ---*/ - const auto markDonor = FindInterfaceMarker(config[donorZone], iMarkerInt+1); + const auto markDonor = config[donorZone]->FindInterfaceMarker(iMarkerInt); /*--- On the target side: find the tag of the boundary sharing the interface. ---*/ - const auto markTarget = FindInterfaceMarker(config[targetZone], iMarkerInt+1); + const auto markTarget = config[targetZone]->FindInterfaceMarker(iMarkerInt); /*--- If the zone does not contain the interface continue to the next pair of markers. ---*/ if (!CheckInterfaceBoundary(markDonor,markTarget)) continue; @@ -230,7 +230,7 @@ void CRadialBasisFunction::SetTransferCoeff(const CConfig* const* config) { if (iProcessor < 0) continue; /*--- Setup target information. ---*/ - const int markTarget = FindInterfaceMarker(config[targetZone], iMarkerInt+1); + const auto markTarget = config[targetZone]->FindInterfaceMarker(iMarkerInt); unsigned long nVertexTarget = 0; if (markTarget != -1) nVertexTarget = target_geometry->GetnVertex(markTarget); diff --git a/Common/src/interface_interpolation/CSlidingMesh.cpp b/Common/src/interface_interpolation/CSlidingMesh.cpp index 979d3df45e7..38ca3c7b076 100644 --- a/Common/src/interface_interpolation/CSlidingMesh.cpp +++ b/Common/src/interface_interpolation/CSlidingMesh.cpp @@ -117,16 +117,16 @@ void CSlidingMesh::SetTransferCoeff(const CConfig* const* config) { /* 2 - Find boundary tag between touching grids */ /*--- Number of markers on the FSI interface ---*/ - nMarkerInt = (int)( config[ donorZone ]->GetMarker_n_ZoneInterface() ) / 2; + nMarkerInt = (int)( config[ donorZone ]->GetMarker_n_ZoneInterface() ) / 2; /*--- For the number of markers on the interface... ---*/ - for ( iMarkerInt = 1; iMarkerInt <= nMarkerInt; iMarkerInt++ ){ + for ( iMarkerInt = 0; iMarkerInt < nMarkerInt; iMarkerInt++ ){ /*--- On the donor side: find the tag of the boundary sharing the interface ---*/ - markDonor = FindInterfaceMarker(config[donorZone], iMarkerInt); + markDonor = config[donorZone]->FindInterfaceMarker(iMarkerInt); /*--- On the target side: find the tag of the boundary sharing the interface ---*/ - markTarget = FindInterfaceMarker(config[targetZone], iMarkerInt); + markTarget = config[targetZone]->FindInterfaceMarker(iMarkerInt); /*--- Checks if the zone contains the interface, if not continue to the next step ---*/ if(!CheckInterfaceBoundary(markDonor, markTarget)) continue; diff --git a/SU2_CFD/src/drivers/CDriver.cpp b/SU2_CFD/src/drivers/CDriver.cpp index 1db6317a415..74d8f06f12f 100644 --- a/SU2_CFD/src/drivers/CDriver.cpp +++ b/SU2_CFD/src/drivers/CDriver.cpp @@ -2526,9 +2526,9 @@ void CDriver::Interface_Preprocessing(CConfig **config, CSolver***** solver, CGe } if (rank == MASTER_NODE) cout << "fluid " << (conservative? "forces." : "tractions.") << endl; } - else if (structural_donor && fluid_target) { + else if (structural_donor && (fluid_target || heat_target)) { if (solver_container[target][INST_0][MESH_0][MESH_SOL] == nullptr) { - SU2_MPI::Error("Mesh deformation was not correctly specified for the fluid zone.\n" + SU2_MPI::Error("Mesh deformation was not correctly specified for the fluid/heat zone.\n" "Use DEFORM_MESH=YES, and setup MARKER_DEFORM_MESH=(...)", CURRENT_FUNCTION); } interface_type = BOUNDARY_DISPLACEMENTS; @@ -2559,6 +2559,9 @@ void CDriver::Interface_Preprocessing(CConfig **config, CSolver***** solver, CGe interface[donor][target] = new CConjugateHeatInterface(nVar, 0, config[donor]); if (rank == MASTER_NODE) cout << "conjugate heat variables." << endl; } + else { + if (rank == MASTER_NODE) cout << "NO heat variables." << endl; + } } else { if (solver[donor][INST_0][MESH_0][FLOW_SOL] == nullptr) diff --git a/SU2_CFD/src/interfaces/CInterface.cpp b/SU2_CFD/src/interfaces/CInterface.cpp index b871cb8a4c1..5e81f49ade0 100644 --- a/SU2_CFD/src/interfaces/CInterface.cpp +++ b/SU2_CFD/src/interfaces/CInterface.cpp @@ -91,12 +91,12 @@ void CInterface::BroadcastData(CSolver *donor_solution, CSolver *target_solution /*--- Outer loop over the markers on the FSI interface: compute one by one ---*/ /*--- The tags are always an integer greater than 1: loop from 1 to nMarkerFSI ---*/ - for (unsigned short iMarkerInt = 1; iMarkerInt <= nMarkerInt; iMarkerInt++) { + for (unsigned short iMarkerInt = 0; iMarkerInt < nMarkerInt; iMarkerInt++) { /*--- Check if this interface connects the two zones, if not continue. ---*/ - Marker_Donor = CInterpolator::FindInterfaceMarker(donor_config, iMarkerInt); - Marker_Target = CInterpolator::FindInterfaceMarker(target_config, iMarkerInt); + Marker_Donor = donor_config->FindInterfaceMarker(iMarkerInt); + Marker_Target = target_config->FindInterfaceMarker(iMarkerInt); if(!CInterpolator::CheckInterfaceBoundary(Marker_Donor, Marker_Target)) continue; diff --git a/SU2_CFD/src/iteration_structure.cpp b/SU2_CFD/src/iteration_structure.cpp index 2cfd3fedba8..729573b2ee7 100644 --- a/SU2_CFD/src/iteration_structure.cpp +++ b/SU2_CFD/src/iteration_structure.cpp @@ -1118,11 +1118,6 @@ void CHeatIteration::Solve(COutput *output, StartTime = SU2_MPI::Wtime(); - /*--- Preprocess the solver ---*/ - - Preprocess(output, integration, geometry, solver, numerics, config, - surface_movement, grid_movement, FFDBox, val_iZone, INST_0); - /*--- For steady-state flow simulations, we need to loop over ExtIter for the number of time steps ---*/ /*--- However, ExtIter is the number of FSI iterations, so nIntIter is used in this case ---*/ diff --git a/SU2_CFD/src/solvers/CFEASolver.cpp b/SU2_CFD/src/solvers/CFEASolver.cpp index 962a748acb0..37171fed739 100644 --- a/SU2_CFD/src/solvers/CFEASolver.cpp +++ b/SU2_CFD/src/solvers/CFEASolver.cpp @@ -2244,21 +2244,17 @@ void CFEASolver::Integrate_FSI_Loads(CGeometry *geometry, const CConfig *config) /*--- The conservative approach transfers forces directly, no integration needed. ---*/ if (config->GetConservativeInterpolation()) return; - const auto nMarker = config->GetnMarker_All(); - const auto nMarkerInt = config->GetMarker_n_ZoneInterface()/2u; - unordered_map vertexArea; + unordered_set processedMarkers({-1}); /*--- Compute current area associated with each vertex. ---*/ - for (auto iMarkerInt = 1u; iMarkerInt <= nMarkerInt; ++iMarkerInt) { + for (auto iMarkerInt = 0; iMarkerInt < config->GetMarker_n_ZoneInterface()/2; ++iMarkerInt) { /*--- Find the marker index associated with the pair. ---*/ - unsigned short iMarker; - for (iMarker = 0; iMarker < nMarker; ++iMarker) - if (config->GetMarker_All_ZoneInterface(iMarker) == iMarkerInt) - break; - /*--- The current mpi rank may not have this marker. ---*/ - if (iMarker == nMarker) continue; + const auto iMarker = config->FindInterfaceMarker(iMarkerInt); + /*--- The current mpi rank may not have this marker, or it may have been processed already. ---*/ + if (processedMarkers.count(iMarker) > 0) continue; + processedMarkers.insert(iMarker); for (auto iElem = 0u; iElem < geometry->GetnElem_Bound(iMarker); ++iElem) { /*--- Define the boundary element. ---*/