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. ---*/