diff --git a/Common/include/config_structure.hpp b/Common/include/config_structure.hpp
index d25ee162ae88..027f553fdac2 100644
--- a/Common/include/config_structure.hpp
+++ b/Common/include/config_structure.hpp
@@ -72,6 +72,7 @@ class CConfig {
private:
SU2_MPI::Comm SU2_Communicator; /*!< \brief MPI communicator of SU2.*/
int rank, size;
+ bool base_config;
unsigned short Kind_SU2; /*!< \brief Kind of SU2 software component.*/
unsigned short Ref_NonDim; /*!< \brief Kind of non dimensionalization.*/
unsigned short Ref_Inc_NonDim; /*!< \brief Kind of non dimensionalization.*/
@@ -125,7 +126,6 @@ class CConfig {
Engine, /*!< \brief Flag to know if the code is going to compute a problem with engine. */
InvDesign_Cp, /*!< \brief Flag to know if the code is going to compute and plot the inverse design. */
InvDesign_HeatFlux, /*!< \brief Flag to know if the code is going to compute and plot the inverse design. */
- Grid_Movement, /*!< \brief Flag to know if there is grid movement. */
Wind_Gust, /*!< \brief Flag to know if there is a wind gust. */
Aeroelastic_Simulation, /*!< \brief Flag to know if there is an aeroelastic simulation. */
Weakly_Coupled_Heat, /*!< \brief Flag to know if a heat equation should be weakly coupled to the incompressible solver. */
@@ -203,7 +203,6 @@ class CConfig {
nMarker_Shroud,/*!< \brief Number of shroud markers to set grid velocity to 0.*/
nMarker_NearFieldBound, /*!< \brief Number of near field boundary markers. */
nMarker_ActDiskInlet, nMarker_ActDiskOutlet,
- nMarker_InterfaceBound, /*!< \brief Number of interface boundary markers. */
nMarker_Fluid_InterfaceBound, /*!< \brief Number of fluid interface markers. */
nMarker_CHTInterface, /*!< \brief Number of conjugate heat transfer interface markers. */
nMarker_Dirichlet, /*!< \brief Number of interface boundary markers. */
@@ -246,7 +245,6 @@ class CConfig {
*Marker_TurboBoundIn, /*!< \brief Turbomachinery performance boundary markers. */
*Marker_TurboBoundOut, /*!< \brief Turbomachinery performance boundary donor markers. */
*Marker_NearFieldBound, /*!< \brief Near Field boundaries markers. */
- *Marker_InterfaceBound, /*!< \brief Interface boundaries markers. */
*Marker_Fluid_InterfaceBound, /*!< \brief Fluid interface markers. */
*Marker_CHTInterface, /*!< \brief Conjugate heat transfer interface markers. */
*Marker_ActDiskInlet,
@@ -430,7 +428,6 @@ class CConfig {
nObj, nObjW; /*! \brief Number of objective functions. */
unsigned short* nDV_Value; /*!< \brief Number of values for each design variable (might be different than 1 if we allow arbitrary movement). */
unsigned short nFFDBox; /*!< \brief Number of ffd boxes. */
- unsigned short nGridMovement; /*!< \brief Number of grid movement types specified. */
unsigned short nTurboMachineryKind; /*!< \brief Number turbomachinery types specified. */
unsigned short nParamDV; /*!< \brief Number of parameters of the design variable. */
string DV_Filename; /*!< \brief Filename for providing surface positions from an external parameterization. */
@@ -466,7 +463,9 @@ class CConfig {
Kind_InitOption, /*!< \brief Kind of Init option to choose if initializing with Reynolds number or with thermodynamic conditions */
Kind_GasModel, /*!< \brief Kind of the Gas Model. */
Kind_DensityModel, /*!< \brief Kind of the density model for incompressible flows. */
- *Kind_GridMovement, /*!< \brief Kind of the unsteady mesh movement. */
+ Kind_GridMovement, /*!< \brief Kind of the static mesh movement. */
+ *Kind_SurfaceMovement, /*!< \brief Kind of the static mesh movement. */
+ nKind_SurfaceMovement, /*!< \brief Kind of the dynamic mesh movement. */
Kind_Gradient_Method, /*!< \brief Numerical method for computation of spatial gradients. */
Kind_Deform_Linear_Solver, /*!< Numerical method to deform the grid */
Kind_Deform_Linear_Solver_Prec, /*!< \brief Preconditioner of the linear solver. */
@@ -886,55 +885,34 @@ class CConfig {
su2double Cyclic_Pitch, /*!< \brief Cyclic pitch for rotorcraft simulations. */
Collective_Pitch; /*!< \brief Collective pitch for rotorcraft simulations. */
su2double Mach_Motion; /*!< \brief Mach number based on mesh velocity and freestream quantities. */
- su2double *Motion_Origin_X, /*!< \brief X-coordinate of the mesh motion origin. */
- *Motion_Origin_Y, /*!< \brief Y-coordinate of the mesh motion origin. */
- *Motion_Origin_Z, /*!< \brief Z-coordinate of the mesh motion origin. */
- *Translation_Rate_X, /*!< \brief Translational velocity of the mesh in the x-direction. */
- *Translation_Rate_Y, /*!< \brief Translational velocity of the mesh in the y-direction. */
- *Translation_Rate_Z, /*!< \brief Translational velocity of the mesh in the z-direction. */
- *Rotation_Rate_X, /*!< \brief Angular velocity of the mesh about the x-axis. */
- *Rotation_Rate_Y, /*!< \brief Angular velocity of the mesh about the y-axis. */
- *Rotation_Rate_Z, /*!< \brief Angular velocity of the mesh about the z-axis. */
- *Pitching_Omega_X, /*!< \brief Angular frequency of the mesh pitching about the x-axis. */
- *Pitching_Omega_Y, /*!< \brief Angular frequency of the mesh pitching about the y-axis. */
- *Pitching_Omega_Z, /*!< \brief Angular frequency of the mesh pitching about the z-axis. */
- *Pitching_Ampl_X, /*!< \brief Pitching amplitude about the x-axis. */
- *Pitching_Ampl_Y, /*!< \brief Pitching amplitude about the y-axis. */
- *Pitching_Ampl_Z, /*!< \brief Pitching amplitude about the z-axis. */
- *Pitching_Phase_X, /*!< \brief Pitching phase offset about the x-axis. */
- *Pitching_Phase_Y, /*!< \brief Pitching phase offset about the y-axis. */
- *Pitching_Phase_Z, /*!< \brief Pitching phase offset about the z-axis. */
- *Plunging_Omega_X, /*!< \brief Angular frequency of the mesh plunging in the x-direction. */
- *Plunging_Omega_Y, /*!< \brief Angular frequency of the mesh plunging in the y-direction. */
- *Plunging_Omega_Z, /*!< \brief Angular frequency of the mesh plunging in the z-direction. */
- *Plunging_Ampl_X, /*!< \brief Plunging amplitude in the x-direction. */
- *Plunging_Ampl_Y, /*!< \brief Plunging amplitude in the y-direction. */
- *Plunging_Ampl_Z, /*!< \brief Plunging amplitude in the z-direction. */
- *Omega_HB; /*!< \brief Frequency for Harmonic Balance Operator (in rad/s). */
- unsigned short nMotion_Origin_X, /*!< \brief Number of X-coordinate mesh motion origins. */
- nMotion_Origin_Y, /*!< \brief Number of Y-coordinate mesh motion origins. */
- nMotion_Origin_Z, /*!< \brief Number of Z-coordinate mesh motion origins. */
- nTranslation_Rate_X, /*!< \brief Number of Translational x-velocities for mesh motion. */
- nTranslation_Rate_Y, /*!< \brief Number of Translational y-velocities for mesh motion. */
- nTranslation_Rate_Z, /*!< \brief Number of Translational z-velocities for mesh motion. */
- nRotation_Rate_X, /*!< \brief Number of Angular velocities about the x-axis for mesh motion. */
- nRotation_Rate_Y, /*!< \brief Number of Angular velocities about the y-axis for mesh motion. */
- nRotation_Rate_Z, /*!< \brief Number of Angular velocities about the z-axis for mesh motion. */
- nPitching_Omega_X, /*!< \brief Number of Angular frequencies about the x-axis for pitching. */
- nPitching_Omega_Y, /*!< \brief Number of Angular frequencies about the y-axis for pitching. */
- nPitching_Omega_Z, /*!< \brief Number of Angular frequencies about the z-axis for pitching. */
- nPitching_Ampl_X, /*!< \brief Number of Pitching amplitudes about the x-axis. */
- nPitching_Ampl_Y, /*!< \brief Number of Pitching amplitudes about the y-axis. */
- nPitching_Ampl_Z, /*!< \brief Number of Pitching amplitudes about the z-axis. */
- nPitching_Phase_X, /*!< \brief Number of Pitching phase offsets about the x-axis. */
- nPitching_Phase_Y, /*!< \brief Number of Pitching phase offsets about the y-axis. */
- nPitching_Phase_Z, /*!< \brief Number of Pitching phase offsets about the z-axis. */
- nPlunging_Omega_X, /*!< \brief Number of Angular frequencies in the x-direction for plunging. */
- nPlunging_Omega_Y, /*!< \brief Number of Angular frequencies in the y-direction for plunging. */
- nPlunging_Omega_Z, /*!< \brief Number of Angular frequencies in the z-direction for plunging. */
- nPlunging_Ampl_X, /*!< \brief Number of Plunging amplitudes in the x-direction. */
- nPlunging_Ampl_Y, /*!< \brief Number of Plunging amplitudes in the y-direction. */
- nPlunging_Ampl_Z, /*!< \brief Number of Plunging amplitudes in the z-direction. */
+
+ su2double *Motion_Origin, /*!< \brief Mesh motion origin. */
+ *Translation_Rate, /*!< \brief Translational velocity of the mesh. */
+ *Rotation_Rate, /*!< \brief Angular velocity of the mesh . */
+ *Pitching_Omega, /*!< \brief Angular frequency of the mesh pitching. */
+ *Pitching_Ampl, /*!< \brief Pitching amplitude. */
+ *Pitching_Phase, /*!< \brief Pitching phase offset. */
+ *Plunging_Omega, /*!< \brief Angular frequency of the mesh plunging. */
+ *Plunging_Ampl; /*!< \brief Plunging amplitude. */
+ su2double *MarkerMotion_Origin, /*!< \brief Mesh motion origin of marker. */
+ *MarkerTranslation_Rate, /*!< \brief Translational velocity of marker. */
+ *MarkerRotation_Rate, /*!< \brief Angular velocity of marker. */
+ *MarkerPitching_Omega, /*!< \brief Angular frequency of marker. */
+ *MarkerPitching_Ampl, /*!< \brief Pitching amplitude of marker. */
+ *MarkerPitching_Phase, /*!< \brief Pitching phase offset of marker. */
+ *MarkerPlunging_Omega, /*!< \brief Angular frequency of marker.. */
+ *MarkerPlunging_Ampl; /*!< \brief Plunging amplitude of marker. */
+
+ unsigned short nMarkerMotion_Origin, /*!< \brief Number of values provided for mesh motion origin of marker. */
+ nMarkerTranslation, /*!< \brief Number of values provided for translational velocity of marker. */
+ nMarkerRotation_Rate, /*!< \brief Number of values provided for angular velocity of marker. */
+ nMarkerPitching_Omega, /*!< \brief Number of values provided for angular frequency of marker. */
+ nMarkerPitching_Ampl, /*!< \brief Number of values provided for pitching amplitude of marker. */
+ nMarkerPitching_Phase, /*!< \brief Number of values provided for pitching phase offset of marker. */
+ nMarkerPlunging_Omega, /*!< \brief Number of values provided for angular frequency of marker. */
+ nMarkerPlunging_Ampl; /*!< \brief Number of values provided for plunging amplitude of marker. */
+ su2double *Omega_HB; /*!< \brief Frequency for Harmonic Balance Operator (in rad/s). */
+ unsigned short
nOmega_HB, /*!< \brief Number of frequencies in Harmonic Balance Operator. */
nMoveMotion_Origin, /*!< \brief Number of motion origins. */
*MoveMotion_Origin; /*!< \brief Keeps track if we should move moment origin. */
@@ -1043,7 +1021,7 @@ class CConfig {
su2double *RampRotatingFrame_Coeff; /*!< \brief coefficient for Rotating frame ramp */
su2double *RampOutletPressure_Coeff; /*!< \brief coefficient for outlet pressure ramp */
su2double AverageMachLimit; /*!< \brief option for turbulent mixingplane */
- su2double *FinalRotation_Rate_Z; /*!< \brief Final rotation rate Z if Ramp rotating frame is activated. */
+ su2double FinalRotation_Rate_Z; /*!< \brief Final rotation rate Z if Ramp rotating frame is activated. */
su2double FinalOutletPressure; /*!< \brief Final outlet pressure if Ramp outlet pressure is activated. */
su2double MonitorOutletPressure; /*!< \brief Monitor outlet pressure if Ramp outlet pressure is activated. */
su2double *default_body_force; /*!< \brief Default body force vector for the COption class. */
@@ -1105,6 +1083,18 @@ class CConfig {
su2double uq_urlx; /*!< \brief Under-relaxation factor */
bool uq_permute; /*!< \brief Permutation of eigenvectors */
+
+ /*!
+ * \brief Set the default values of config options not set in the config file using another config object.
+ * \param config - Config object to use the default values from.
+ */
+ void SetDefaultFromConfig(CConfig *config);
+
+ /*!
+ * \brief Set default values for all options not yet set.
+ */
+ void SetDefault();
+
/*--- all_options is a map containing all of the options. This is used during config file parsing
to track the options which have not been set (so the default values can be used). Without this map
there would be no list of all the config file options. ---*/
@@ -1404,7 +1394,12 @@ class CConfig {
/*!
* \brief Constructor of the class which reads the input file.
*/
- CConfig(char case_filename[MAX_STRING_SIZE], unsigned short val_software, unsigned short val_iZone, unsigned short val_nZone, unsigned short val_nDim, bool verb_high);
+ CConfig(char case_filename[MAX_STRING_SIZE], unsigned short val_software, unsigned short val_nZone, bool verb_high);
+
+ /*!
+ * \brief Constructor of the class which reads the input file and uses default options from another config.
+ */
+ CConfig(CConfig * config, char case_filename[MAX_STRING_SIZE], unsigned short val_software, unsigned short val_iZone, unsigned short val_nZone, bool verb_high);
/*!
* \brief Constructor of the class which reads the input file.
@@ -1421,6 +1416,11 @@ class CConfig {
*/
~CConfig(void);
+ void SetnZone();
+
+ void SetnDim();
+
+ void SetHeader(unsigned short val_software);
/*!
* \brief Get the MPI communicator of SU2.
* \return MPI communicator of SU2.
@@ -1437,10 +1437,9 @@ class CConfig {
* \brief Gets the number of zones in the mesh file.
* \param[in] val_mesh_filename - Name of the file with the grid information.
* \param[in] val_format - Format of the file with the grid information.
- * \param[in] config - Definition of the particular problem.
* \return Total number of zones in the grid file.
*/
- static unsigned short GetnZone(string val_mesh_filename, unsigned short val_format, CConfig *config);
+ static unsigned short GetnZone(string val_mesh_filename, unsigned short val_format);
/*!
* \brief Gets the number of dimensions in the mesh file
@@ -2939,12 +2938,6 @@ class CConfig {
*/
unsigned short GetnMarker_NearFieldBound(void);
- /*!
- * \brief Get the total number of boundary markers.
- * \return Total number of boundary markers.
- */
- unsigned short GetnMarker_InterfaceBound(void);
-
/*!
* \brief Get the total number of boundary markers.
* \return Total number of boundary markers.
@@ -5693,233 +5686,206 @@ class CConfig {
bool GetGrid_Movement(void);
/*!
- * \brief Get the type of dynamic mesh motion.
- * \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \return Type of dynamic mesh motion.
+ * \brief Get information about the volumetric movement.
+ * \return TRUE if there is a volumetric movement is required; otherwise FALSE.
*/
- unsigned short GetKind_GridMovement(unsigned short val_iZone);
+ bool GetVolumetric_Movement(void);
/*!
- * \brief Get the type of dynamic mesh motion. Each zone gets a config file.
- * \return Type of dynamic mesh motion.
+ * \brief Get information about deforming markers.
+ * \param[in] kind_movement - Kind of surface movement.
+ * \return TRUE at least one surface of kind_movement moving; otherwise FALSE.
*/
- unsigned short GetKind_GridMovement();
+ bool GetSurface_Movement(unsigned short kind_movement);
/*!
- * \brief Set the type of dynamic mesh motion.
- * \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \param[in] motion_Type - Specify motion type.
+ * \brief Set a surface movement marker.
+ * \param[in] iMarker - Moving marker.
+ * \param[in] kind_movement - Kind of surface movement.
+ * \return TRUE at least one surface of kind_movement moving; otherwise FALSE.
*/
- void SetKind_GridMovement(unsigned short val_iZone, unsigned short motion_Type);
+ void SetSurface_Movement(unsigned short iMarker, unsigned short kind_movement);
/*!
- * \brief Get the mach number based on the mesh velocity and freestream quantities.
- * \return Mach number based on the mesh velocity and freestream quantities.
- */
- su2double GetMach_Motion(void);
-
- /*!
- * \brief Get x-coordinate of the mesh motion origin.
- * \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \return X-coordinate of the mesh motion origin.
- */
- su2double GetMotion_Origin_X(unsigned short val_iZone);
-
- /*!
- * \brief Get y-coordinate of the mesh motion origin
- * \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \return Y-coordinate of the mesh motion origin.
- */
- su2double GetMotion_Origin_Y(unsigned short val_iZone);
-
- /*!
- * \brief Get z-coordinate of the mesh motion origin
- * \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \return Z-coordinate of the mesh motion origin.
+ * \brief Get the type of dynamic mesh motion. Each zone gets a config file.
+ * \return Type of dynamic mesh motion.
*/
- su2double GetMotion_Origin_Z(unsigned short val_iZone);
+ unsigned short GetKind_GridMovement();
/*!
- * \brief Set x-coordinate of the mesh motion origin.
+ * \brief Set the type of dynamic mesh motion.
* \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \param[in] val_origin - New x-coordinate of the mesh motion origin.
+ * \param[in] motion_Type - Specify motion type.
*/
- void SetMotion_Origin_X(unsigned short val_iZone, su2double val_origin);
+ void SetKind_GridMovement(unsigned short motion_Type);
/*!
- * \brief Set y-coordinate of the mesh motion origin
- * \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \param[in] val_origin - New y-coordinate of the mesh motion origin.
+ * \brief Get the type of surface motion.
+ * \param[in] iMarkerMoving - Index of the moving marker (as specified in Marker_Moving).
+ * \return Type of surface motion.
*/
- void SetMotion_Origin_Y(unsigned short val_iZone, su2double val_origin);
+ unsigned short GetKind_SurfaceMovement(unsigned short iMarkerMoving);
/*!
- * \brief Set z-coordinate of the mesh motion origin
- * \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \param[in] val_origin - New y-coordinate of the mesh motion origin.
+ * \brief Get the mach number based on the mesh velocity and freestream quantities.
+ * \return Mach number based on the mesh velocity and freestream quantities.
*/
- void SetMotion_Origin_Z(unsigned short val_iZone, su2double val_origin);
+ su2double GetMach_Motion(void);
/*!
- * \brief Get the translational velocity of the mesh in the x-direction.
- * \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \return Translational velocity of the mesh in the x-direction.
+ * \brief Get the mesh motion origin.
+ * \param[in] iDim - spatial component
+ * \return The mesh motion origin.
*/
- su2double GetTranslation_Rate_X(unsigned short val_iZone);
+ su2double GetMotion_Origin(unsigned short iDim);
/*!
- * \brief Get the translational velocity of the mesh in the y-direction.
- * \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \return Translational velocity of the mesh in the y-direction.
+ * \brief Set the mesh motion origin.
+ * \param[in] val - new value of the origin
+ * \return The mesh motion origin.
*/
- su2double GetTranslation_Rate_Y(unsigned short val_iZone);
+ void SetMotion_Origin(su2double* val);
/*!
- * \brief Get the translational velocity of the mesh in the z-direction.
- * \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \return Translational velocity of the mesh in the z-direction.
+ * \brief Get the mesh motion origin.
+ * \param[in] iMarkerMoving - Index of the moving marker (as specified in Marker_Moving)
+ * \param[in] iDim - spatial component
+ * \return The motion origin of the marker.
*/
- su2double GetTranslation_Rate_Z(unsigned short val_iZone);
+ su2double GetMarkerMotion_Origin(unsigned short iMarkerMoving, unsigned short iDim);
/*!
- * \brief Get the angular velocity of the mesh about the x-axis.
- * \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \return Angular velocity of the mesh about the x-axis.
+ * \brief Set the mesh motion origin.
+ * \param[in] val - new value of the origin
+ * \param[in] iMarkerMoving - Index of the moving marker (as specified in Marker_Moving)
*/
- su2double GetRotation_Rate_X(unsigned short val_iZone);
+ void SetMarkerMotion_Origin (su2double* val, unsigned short iMarkerMoving);
/*!
- * \brief Get the angular velocity of the mesh about the y-axis.
- * \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \return Angular velocity of the mesh about the y-axis.
+ * \brief Get the translational velocity of the mesh.
+ * \param[in] iDim - spatial component
+ * \return Translational velocity of the mesh.
*/
- su2double GetRotation_Rate_Y(unsigned short val_iZone);
+ su2double GetTranslation_Rate(unsigned short iDim);
/*!
- * \brief Get the angular velocity of the mesh about the z-axis.
- * \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \return Angular velocity of the mesh about the z-axis.
+ * \brief Get the translational velocity of the marker.
+ * \param[in] iMarkerMoving - Index of the moving marker (as specified in Marker_Moving)
+ * \param[in] iDim - spatial component
+ * \return Translational velocity of the marker.
*/
- su2double GetRotation_Rate_Z(unsigned short val_iZone);
+ su2double GetMarkerTranslationRate(unsigned short iMarkerMoving, unsigned short iDim);
/*!
- * \brief Get the angular velocity of the mesh about the z-axis.
- * \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \return Angular velocity of the mesh about the z-axis.
- */
- su2double GetFinalRotation_Rate_Z(unsigned short val_iZone);
-
- /*!
- * \brief Set the angular velocity of the mesh about the z-axis.
- * \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \param[in] newRotation_Rate_Z - new rotation rate after computing the ramp value.
+ * \brief Get the rotation rate of the mesh.
+ * \param[in] iDim - spatial component
+ * \return Translational velocity of the mesh.
*/
- void SetRotation_Rate_Z(su2double newRotation_Rate_Z, unsigned short val_iZone);
-
- /*!
- * \brief Get the angular frequency of a mesh pitching about the x-axis.
- * \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \return Angular frequency of a mesh pitching about the x-axis.
- */
- su2double GetPitching_Omega_X(unsigned short val_iZone);
+ su2double GetRotation_Rate(unsigned short iDim);
/*!
- * \brief Get the angular frequency of a mesh pitching about the y-axis.
- * \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \return Angular frequency of a mesh pitching about the y-axis.
+ * \brief Get the rotation rate of the mesh.
+ * \param[in] iDim - spatial component
+ * \param[in] val - new value of the rotation rate.
+ * \return Translational velocity of the mesh.
*/
- su2double GetPitching_Omega_Y(unsigned short val_iZone);
+ void SetRotation_Rate(unsigned short iDim, su2double val);
/*!
- * \brief Get the angular frequency of a mesh pitching about the z-axis.
- * \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \return Angular frequency of a mesh pitching about the z-axis.
+ * \brief Get the rotation rate of the marker.
+ * \param[in] iMarkerMoving - Index of the moving marker (as specified in Marker_Moving)
+ * \param[in] iDim - spatial component
+ * \return Rotation velocity of the marker.
*/
- su2double GetPitching_Omega_Z(unsigned short val_iZone);
+ su2double GetMarkerRotationRate(unsigned short iMarkerMoving, unsigned short iDim);
/*!
- * \brief Get the pitching amplitude about the x-axis.
- * \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \return Pitching amplitude about the x-axis.
+ * \brief Get the pitching rate of the mesh.
+ * \param[in] iDim - spatial component
+ * \return Angular frequency of the mesh pitching.
*/
- su2double GetPitching_Ampl_X(unsigned short val_iZone);
+ su2double GetPitching_Omega(unsigned short iDim);
/*!
- * \brief Get the pitching amplitude about the y-axis.
- * \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \return Pitching amplitude about the y-axis.
+ * \brief Get pitching rate of the marker.
+ * \param[in] iMarkerMoving - Index of the moving marker (as specified in Marker_Moving)
+ * \param[in] iDim - spatial component
+ * \return Angular frequency of the marker pitching.
*/
- su2double GetPitching_Ampl_Y(unsigned short val_iZone);
+ su2double GetMarkerPitching_Omega(unsigned short iMarkerMoving, unsigned short iDim);
/*!
- * \brief Get the pitching amplitude about the z-axis.
- * \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \return Pitching amplitude about the z-axis.
+ * \brief Get the pitching amplitude of the mesh.
+ * \param[in] iDim - spatial component
+ * \return pitching amplitude of the mesh.
*/
- su2double GetPitching_Ampl_Z(unsigned short val_iZone);
-
+ su2double GetPitching_Ampl(unsigned short iDim);
+
/*!
- * \brief Get the pitching phase offset about the x-axis.
- * \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \return Pitching phase offset about the x-axis.
+ * \brief Get pitching amplitude of the marker.
+ * \param[in] iMarkerMoving - Index of the moving marker (as specified in Marker_Moving)
+ * \param[in] iDim - spatial component
+ * \return pitching amplitude of the marker.
*/
- su2double GetPitching_Phase_X(unsigned short val_iZone);
-
+ su2double GetMarkerPitching_Ampl(unsigned short iMarkerMoving, unsigned short iDim);
+
/*!
- * \brief Get the pitching phase offset about the y-axis.
+ * \brief Get the pitching phase of the mesh.
* \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \return Pitching phase offset about the y-axis.
+ * \return pitching phase of the mesh.
*/
- su2double GetPitching_Phase_Y(unsigned short val_iZone);
+ su2double GetPitching_Phase(unsigned short iDim);
/*!
- * \brief Get the pitching phase offset about the z-axis.
- * \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \return Pitching phase offset about the z-axis.
+ * \brief Get pitching phase of the marker.
+ * \param[in] iMarkerMoving - Index of the moving marker (as specified in Marker_Moving) \
+ * \param[in] iDim - spatial component
+ * \return pitching phase of the marker.
*/
- su2double GetPitching_Phase_Z(unsigned short val_iZone);
+ su2double GetMarkerPitching_Phase(unsigned short iMarkerMoving, unsigned short iDim);
/*!
- * \brief Get the angular frequency of a mesh plunging in the x-direction.
- * \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \return Angular frequency of a mesh plunging in the x-direction.
+ * \brief Get the plunging rate of the mesh.
+ * \param[in] iDim - spatial component
+ * \return Angular frequency of the mesh plunging.
*/
- su2double GetPlunging_Omega_X(unsigned short val_iZone);
+ su2double GetPlunging_Omega(unsigned short iDim);
/*!
- * \brief Get the angular frequency of a mesh plunging in the y-direction.
- * \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \return Angular frequency of a mesh plunging in the y-direction.
+ * \brief Get plunging rate of the marker.
+ * \param[in] iMarkerMoving - Index of the moving marker (as specified in Marker_Moving)
+ * \param[in] iDim - spatial component
+ * \return Angular frequency of the marker plunging.
*/
- su2double GetPlunging_Omega_Y(unsigned short val_iZone);
+ su2double GetMarkerPlunging_Omega(unsigned short iMarkerMoving, unsigned short iDim);
/*!
- * \brief Get the angular frequency of a mesh plunging in the z-direction.
+ * \brief Get the plunging amplitude of the mesh.
* \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \return Angular frequency of a mesh plunging in the z-direction.
+ * \param[in] iDim - spatial component
+ * \return Plunging amplitude of the mesh.
*/
- su2double GetPlunging_Omega_Z(unsigned short val_iZone);
+ su2double GetPlunging_Ampl(unsigned short iDim);
/*!
- * \brief Get the plunging amplitude in the x-direction.
- * \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \return Plunging amplitude in the x-direction.
+ * \brief Get plunging amplitude of the marker.
+ * \param[in] iMarkerMoving - Index of the moving marker (as specified in Marker_Moving)
+ * \param[in] iDim - spatial component
+ * \return Plunging amplitude of the marker.
*/
- su2double GetPlunging_Ampl_X(unsigned short val_iZone);
+ su2double GetMarkerPlunging_Ampl(unsigned short iMarkerMoving, unsigned short iDim);
/*!
- * \brief Get the plunging amplitude in the y-direction.
- * \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \return Plunging amplitude in the y-direction.
+ * \brief Get the angular velocity of the mesh about the z-axis.
+ * \return Angular velocity of the mesh about the z-axis.
*/
- su2double GetPlunging_Ampl_Y(unsigned short val_iZone);
+ su2double GetFinalRotation_Rate_Z();
/*!
- * \brief Get the plunging amplitude in the z-direction.
- * \param[in] val_iZone - Number for the current zone in the mesh (each zone has independent motion).
- * \return Plunging amplitude in the z-direction.
+ * \brief Set the angular velocity of the mesh about the z-axis.
+ * \param[in] newRotation_Rate_Z - new rotation rate after computing the ramp value.
*/
- su2double GetPlunging_Ampl_Z(unsigned short val_iZone);
+ void SetRotation_Rate_Z(su2double newRotation_Rate_Z);
/*!
* \brief Get the Harmonic Balance frequency pointer.
@@ -6189,6 +6155,21 @@ class CConfig {
*/
unsigned short GetnMarker_ZoneInterface(void);
+
+ /*!
+ * \brief Determines whether a marker with index iMarker is a solid boundary.
+ * \param iMarker
+ * \return it marker with index iMarker is a solid boundary.
+ */
+ bool GetSolid_Wall(unsigned short iMarker);
+
+ /*!
+ * \brief Determines whether a marker with index iMarker is a viscous no-slip boundary.
+ * \param iMarker
+ * \return it marker with index iMarker is a viscous no-slip boundary.
+ */
+ bool GetViscous_Wall(unsigned short iMarker);
+
/*!
* \brief Determines if problem is adjoint
* \return true if Adjoint
@@ -8053,7 +8034,7 @@ class CConfig {
/*!
* \brief Set the config options.
*/
- void SetConfig_Options(unsigned short val_iZone, unsigned short val_nZone);
+ void SetConfig_Options();
/*!
* \brief Set the config options.
diff --git a/Common/include/config_structure.inl b/Common/include/config_structure.inl
index 08c21294fe9f..d80b42e832dd 100644
--- a/Common/include/config_structure.inl
+++ b/Common/include/config_structure.inl
@@ -937,71 +937,59 @@ inline void CConfig::SetMu_PolyCoeffND(su2double val_coeff, unsigned short val_i
inline void CConfig::SetKt_PolyCoeffND(su2double val_coeff, unsigned short val_index) { KtPolyCoefficientsND[val_index] = val_coeff; }
-inline unsigned short CConfig::GetKind_GridMovement(unsigned short val_iZone) { return Kind_GridMovement[val_iZone]; }
+inline unsigned short CConfig::GetKind_GridMovement() { return Kind_GridMovement; }
-inline unsigned short CConfig::GetKind_GridMovement(void) { return Kind_GridMovement[0]; }
+inline void CConfig::SetKind_GridMovement(unsigned short motion_Type) { Kind_GridMovement = motion_Type; }
-inline void CConfig::SetKind_GridMovement(unsigned short val_iZone, unsigned short motion_Type) { Kind_GridMovement[val_iZone] = motion_Type; }
+inline su2double CConfig::GetMotion_Origin(unsigned short iDim){return Motion_Origin[iDim];}
-inline su2double CConfig::GetMach_Motion(void) { return Mach_Motion; }
-
-inline su2double CConfig::GetMotion_Origin_X(unsigned short val_iZone) { return Motion_Origin_X[val_iZone]; }
-
-inline su2double CConfig::GetMotion_Origin_Y(unsigned short val_iZone) { return Motion_Origin_Y[val_iZone]; }
-
-inline su2double CConfig::GetMotion_Origin_Z(unsigned short val_iZone) { return Motion_Origin_Z[val_iZone]; }
-
-inline void CConfig::SetMotion_Origin_X(unsigned short val_iZone, su2double val_origin) { Motion_Origin_X[val_iZone] = val_origin; }
-
-inline void CConfig::SetMotion_Origin_Y(unsigned short val_iZone, su2double val_origin) { Motion_Origin_Y[val_iZone] = val_origin; }
-
-inline void CConfig::SetMotion_Origin_Z(unsigned short val_iZone, su2double val_origin) { Motion_Origin_Z[val_iZone] = val_origin; }
-
-inline su2double CConfig::GetTranslation_Rate_X(unsigned short val_iZone) { return Translation_Rate_X[val_iZone]; }
+inline su2double CConfig::GetMarkerMotion_Origin(unsigned short iMarkerMoving, unsigned short iDim){return MarkerMotion_Origin[3*iMarkerMoving + iDim];}
-inline su2double CConfig::GetTranslation_Rate_Y(unsigned short val_iZone) { return Translation_Rate_Y[val_iZone]; }
-
-inline su2double CConfig::GetTranslation_Rate_Z(unsigned short val_iZone) { return Translation_Rate_Z[val_iZone]; }
-
-inline su2double CConfig::GetRotation_Rate_X(unsigned short val_iZone) { return Rotation_Rate_X[val_iZone]; }
-
-inline su2double CConfig::GetRotation_Rate_Y(unsigned short val_iZone) { return Rotation_Rate_Y[val_iZone]; }
+inline void CConfig::SetMarkerMotion_Origin(su2double* val, unsigned short iMarkerMoving){
+ for (unsigned short iDim = 0; iDim < 3; iDim++){
+ MarkerMotion_Origin[3*iMarkerMoving + iDim] = val[iDim];
+ }
+}
-inline su2double CConfig::GetRotation_Rate_Z(unsigned short val_iZone) { return Rotation_Rate_Z[val_iZone]; }
+inline void CConfig::SetMotion_Origin(su2double* val){
+ for (unsigned short iDim = 0; iDim < 3; iDim++){
+ Motion_Origin[iDim] = val[iDim];
+ }
+}
-inline su2double CConfig::GetFinalRotation_Rate_Z(unsigned short val_iZone) { return FinalRotation_Rate_Z[val_iZone]; }
+inline su2double CConfig::GetTranslation_Rate(unsigned short iDim){return Translation_Rate[iDim];}
-inline void CConfig::SetRotation_Rate_Z(su2double newRotation_Rate_Z, unsigned short val_iZone) { Rotation_Rate_Z[val_iZone] = newRotation_Rate_Z; }
+inline su2double CConfig::GetMarkerTranslationRate(unsigned short iMarkerMoving, unsigned short iDim){return MarkerTranslation_Rate[3*iMarkerMoving + iDim];}
-inline su2double CConfig::GetPitching_Omega_X(unsigned short val_iZone) { return Pitching_Omega_X[val_iZone]; }
+inline su2double CConfig::GetRotation_Rate(unsigned short iDim){return Rotation_Rate[iDim];}
-inline su2double CConfig::GetPitching_Omega_Y(unsigned short val_iZone) { return Pitching_Omega_Y[val_iZone]; }
+inline void CConfig::SetRotation_Rate(unsigned short iDim, su2double val){Rotation_Rate[iDim] = val;}
-inline su2double CConfig::GetPitching_Omega_Z(unsigned short val_iZone) { return Pitching_Omega_Z[val_iZone]; }
+inline su2double CConfig::GetFinalRotation_Rate_Z(){return FinalRotation_Rate_Z;}
-inline su2double CConfig::GetPitching_Ampl_X(unsigned short val_iZone) { return Pitching_Ampl_X[val_iZone]; }
+inline su2double CConfig::GetMarkerRotationRate(unsigned short iMarkerMoving, unsigned short iDim){return MarkerRotation_Rate[3*iMarkerMoving + iDim];}
-inline su2double CConfig::GetPitching_Ampl_Y(unsigned short val_iZone) { return Pitching_Ampl_Y[val_iZone]; }
+inline su2double CConfig::GetPitching_Omega(unsigned short iDim){return Pitching_Omega[iDim];}
-inline su2double CConfig::GetPitching_Ampl_Z(unsigned short val_iZone) { return Pitching_Ampl_Z[val_iZone]; }
+inline su2double CConfig::GetMarkerPitching_Omega(unsigned short iMarkerMoving, unsigned short iDim){return MarkerPitching_Omega[3*iMarkerMoving + iDim];}
-inline su2double CConfig::GetPitching_Phase_X(unsigned short val_iZone) { return Pitching_Phase_X[val_iZone]; }
+inline su2double CConfig::GetPitching_Ampl(unsigned short iDim){return Pitching_Ampl[iDim];}
-inline su2double CConfig::GetPitching_Phase_Y(unsigned short val_iZone) { return Pitching_Phase_Y[val_iZone]; }
+inline su2double CConfig::GetMarkerPitching_Ampl(unsigned short iMarkerMoving, unsigned short iDim){return MarkerPitching_Ampl[3*iMarkerMoving + iDim];}
-inline su2double CConfig::GetPitching_Phase_Z(unsigned short val_iZone) { return Pitching_Phase_Z[val_iZone]; }
+inline su2double CConfig::GetPitching_Phase(unsigned short iDim){return Pitching_Phase[iDim];}
-inline su2double CConfig::GetPlunging_Omega_X(unsigned short val_iZone) { return Plunging_Omega_X[val_iZone]; }
+inline su2double CConfig::GetMarkerPitching_Phase(unsigned short iMarkerMoving, unsigned short iDim){return MarkerPitching_Phase[3*iMarkerMoving + iDim];}
-inline su2double CConfig::GetPlunging_Omega_Y(unsigned short val_iZone) { return Plunging_Omega_Y[val_iZone]; }
+inline su2double CConfig::GetPlunging_Omega(unsigned short iDim){return Plunging_Omega[iDim];}
-inline su2double CConfig::GetPlunging_Omega_Z(unsigned short val_iZone) { return Plunging_Omega_Z[val_iZone]; }
+inline su2double CConfig::GetMarkerPlunging_Omega(unsigned short iMarkerMoving, unsigned short iDim){return MarkerPlunging_Omega[3*iMarkerMoving + iDim];}
-inline su2double CConfig::GetPlunging_Ampl_X(unsigned short val_iZone) { return Plunging_Ampl_X[val_iZone]; }
+inline su2double CConfig::GetPlunging_Ampl(unsigned short iDim){return Plunging_Ampl[iDim];}
-inline su2double CConfig::GetPlunging_Ampl_Y(unsigned short val_iZone) { return Plunging_Ampl_Y[val_iZone]; }
+inline su2double CConfig::GetMarkerPlunging_Ampl(unsigned short iMarkerMoving, unsigned short iDim){return MarkerPlunging_Ampl[3*iMarkerMoving + iDim];}
-inline su2double CConfig::GetPlunging_Ampl_Z(unsigned short val_iZone) { return Plunging_Ampl_Z[val_iZone]; }
+inline su2double CConfig::GetMach_Motion(void) { return Mach_Motion; }
inline su2double* CConfig::GetOmega_HB(void) { return Omega_HB; }
@@ -1438,8 +1426,6 @@ inline unsigned short CConfig::GetnMarker_EngineInflow(void) { return nMarker_En
inline unsigned short CConfig::GetnMarker_EngineExhaust(void) { return nMarker_EngineExhaust; }
-inline unsigned short CConfig::GetnMarker_InterfaceBound(void) { return nMarker_InterfaceBound; }
-
inline unsigned short CConfig::GetnMarker_Fluid_InterfaceBound(void) { return nMarker_Fluid_InterfaceBound; }
inline unsigned short CConfig::GetnMarker_Monitoring(void) { return nMarker_Monitoring; }
@@ -1614,7 +1600,9 @@ inline su2double CConfig::GetFixAzimuthalLine(void) { return FixAzimuthalLine; }
inline su2double CConfig::GetCFLRedCoeff_Turb(void) { return CFLRedCoeff_Turb; }
-inline bool CConfig::GetGrid_Movement(void) { return Grid_Movement; }
+inline bool CConfig::GetGrid_Movement(void) { return (Kind_GridMovement != NO_MOVEMENT) || ((nKind_SurfaceMovement > 0) && !GetSurface_Movement(FLUID_STRUCTURE_STATIC)); }
+
+inline unsigned short CConfig::GetKind_SurfaceMovement(unsigned short iMarkerMoving){return Kind_SurfaceMovement[iMarkerMoving];}
inline bool CConfig::GetRotating_Frame(void) { return Rotating_Frame; }
diff --git a/Common/include/geometry_structure.hpp b/Common/include/geometry_structure.hpp
index f7732060e9a6..3d6ecb49e01f 100644
--- a/Common/include/geometry_structure.hpp
+++ b/Common/include/geometry_structure.hpp
@@ -2085,12 +2085,6 @@ void UpdateTurboVertex(CConfig *config,unsigned short val_iZone, unsigned short
* \param[in] config - Definition of the particular problem.
*/
void MatchActuator_Disk(CConfig *config);
-
- /*!
- * \brief Mach the interface boundary condition.
- * \param[in] config - Definition of the particular problem.
- */
- void MatchInterface(CConfig *config);
/*!
* \brief Mach the periodic boundary conditions.
diff --git a/Common/include/grid_movement_structure.hpp b/Common/include/grid_movement_structure.hpp
index ed1c564324b9..907a44632adb 100644
--- a/Common/include/grid_movement_structure.hpp
+++ b/Common/include/grid_movement_structure.hpp
@@ -1158,8 +1158,9 @@ class CVolumetricMovement : public CGridMovement {
/*!
* \brief Check for negative volumes (all elements) after performing grid deformation.
* \param[in] geometry - Geometrical definition of the problem.
+ * \param[in] Screen_Output - determines if text is written to screen
*/
- void ComputeDeforming_Element_Volume(CGeometry *geometry, su2double &MinVolume, su2double &MaxVolume);
+ void ComputeDeforming_Element_Volume(CGeometry *geometry, su2double &MinVolume, su2double &MaxVolume, bool Screen_Output);
/*!
* \brief Compute the minimum distance to the nearest solid surface.
@@ -1258,7 +1259,7 @@ class CVolumetricMovement : public CGridMovement {
* \param[in] UpdateGeo - Update geometry.
* \param[in] Derivative - Compute the derivative (disabled by default). Does not actually deform the grid if enabled.
*/
- virtual void SetVolume_Deformation_Elas(CGeometry *geometry, CConfig *config, bool UpdateGeo, bool Derivative = false);
+ virtual void SetVolume_Deformation_Elas(CGeometry *geometry, CConfig *config, bool UpdateGeo, bool screen_output, bool Derivative = false);
/*!
* \brief Set the derivatives of the boundary nodes.
@@ -1383,7 +1384,7 @@ class CElasticityMovement : public CVolumetricMovement {
* \param[in] UpdateGeo - Update geometry.
* \param[in] Derivative - Compute the derivative (disabled by default). Does not actually deform the grid if enabled.
*/
- void SetVolume_Deformation_Elas(CGeometry *geometry, CConfig *config, bool UpdateGeo, bool Derivative = false);
+ void SetVolume_Deformation_Elas(CGeometry *geometry, CConfig *config, bool UpdateGeo, bool screen_output, bool Derivative = false);
/*!
* \brief Update the value of the coordinates after the grid movement.
diff --git a/Common/include/grid_movement_structure.inl b/Common/include/grid_movement_structure.inl
index 14034c1a3583..3575cb94cbf7 100644
--- a/Common/include/grid_movement_structure.inl
+++ b/Common/include/grid_movement_structure.inl
@@ -222,7 +222,7 @@ inline void CVolumetricMovement::Set_nIterMesh(unsigned long val_nIterMesh) { nI
inline unsigned long CVolumetricMovement::Get_nIterMesh() { return nIterMesh; }
-inline void CVolumetricMovement::SetVolume_Deformation_Elas(CGeometry *geometry, CConfig *config, bool UpdateGeo, bool Derivative) { }
+inline void CVolumetricMovement::SetVolume_Deformation_Elas(CGeometry *geometry, CConfig *config, bool UpdateGeo, bool screen_output, bool Derivative) { }
inline void CVolumetricMovement::Boundary_Dependencies(CGeometry **geometry, CConfig *config) { }
diff --git a/Common/include/linear_algebra/CSysMatrix.hpp b/Common/include/linear_algebra/CSysMatrix.hpp
index 748fa56c9bcd..271b6b8eb4f1 100644
--- a/Common/include/linear_algebra/CSysMatrix.hpp
+++ b/Common/include/linear_algebra/CSysMatrix.hpp
@@ -437,7 +437,7 @@ class CSysMatrix {
template
inline void SetBlock(unsigned long block_i, unsigned long block_j, OtherType *val_block) {
- unsigned long iVar, jVar, index;
+ unsigned long iVar, index;
for (index = row_ptr[block_i]; index < row_ptr[block_i+1]; index++) {
if (col_ind[index] == block_j) {
diff --git a/Common/include/option_structure.hpp b/Common/include/option_structure.hpp
index 0037469be6e5..b0a54b8fb3f6 100644
--- a/Common/include/option_structure.hpp
+++ b/Common/include/option_structure.hpp
@@ -1,4 +1,4 @@
-/*!
+/*!
* \file option_structure.hpp
* \brief Defines classes for referencing options for easy input in CConfig
* \author J. Hicken, B. Tracey
@@ -213,7 +213,7 @@ enum ENUM_SOLVER {
FEM_NAVIER_STOKES = 51, /*!< \brief Definition of the finite element Navier-Stokes' solver. */
FEM_RANS = 52, /*!< \brief Definition of the finite element Reynolds-averaged Navier-Stokes' (RANS) solver. */
FEM_LES = 53, /*!< \brief Definition of the finite element Large Eddy Simulation Navier-Stokes' (LES) solver. */
- MULTIZONE = 99
+ MULTIPHYSICS = 99
};
/* BEGIN_CONFIG_ENUMS */
static const map Solver_Map = CCreateMap
@@ -241,7 +241,7 @@ static const map Solver_Map = CCreateMap TurbConductivityModel_Map
*/
enum ENUM_GRIDMOVEMENT {
NO_MOVEMENT = 0, /*!< \brief Simulation on a static mesh. */
- DEFORMING = 1, /*!< \brief Simulation with dynamically deforming meshes (plunging/pitching/rotation). */
RIGID_MOTION = 2, /*!< \brief Simulation with rigid mesh motion (plunging/pitching/rotation). */
- FLUID_STRUCTURE = 3, /*!< \brief Fluid structure deformation. */
- EXTERNAL = 4, /*!< \brief Arbitrary grid motion specified by external files at each time step. */
- EXTERNAL_ROTATION = 5, /*!< \brief Arbitrary grid motion specified by external files at each time step with rigid rotation. */
- AEROELASTIC = 6, /*!< \brief Simulation with aeroelastic motion. */
- MOVING_WALL = 7, /*!< \brief Simulation with moving walls (translation/rotation). */
ROTATING_FRAME = 8, /*!< \brief Simulation in a rotating frame. */
ELASTICITY = 9, /*!< \brief Linear Elasticity. */
- AEROELASTIC_RIGID_MOTION = 10, /*!< \brief Simulation with rotation and aeroelastic motion. */
STEADY_TRANSLATION = 11, /*!< \brief Simulation in a steadily translating frame. */
GUST = 12, /*!< \brief Simulation on a static mesh with a gust. */
MOVING_HTP = 13, /*!< \brief Simulation with moving HTP (rotation). */
- FLUID_STRUCTURE_STATIC = 14 /*!< \brief Fluid structure deformation with no grid velocity. */
+
};
static const map GridMovement_Map = CCreateMap
("NONE", NO_MOVEMENT)
-("DEFORMING", DEFORMING)
("RIGID_MOTION", RIGID_MOTION)
-("FLUID_STRUCTURE", FLUID_STRUCTURE)
-("EXTERNAL", EXTERNAL)
-("EXTERNAL_ROTATION", EXTERNAL_ROTATION)
-("AEROELASTIC", AEROELASTIC)
("ROTATING_FRAME", ROTATING_FRAME)
("ELASTICITY", ELASTICITY)
-("MOVING_WALL", MOVING_WALL)
("MOVING_HTP", MOVING_HTP)
-("AEROELASTIC_RIGID_MOTION", AEROELASTIC_RIGID_MOTION)
("STEADY_TRANSLATION", STEADY_TRANSLATION)
-("GUST", GUST)
-("FLUID_STRUCTURE_STATIC", FLUID_STRUCTURE_STATIC);
+("GUST", GUST);
+
+
+
+enum ENUM_SURFACEMOVEMENT {
+ DEFORMING = 1,
+ MOVING_WALL = 2,
+ AEROELASTIC = 3, /*!< \brief Simulation with aeroelastic motion. */
+ AEROELASTIC_RIGID_MOTION = 4, /*!< \brief Simulation with rotation and aeroelastic motion. */
+ FLUID_STRUCTURE = 5, /*!< \brief Fluid structure deformation. */
+ EXTERNAL = 6,
+ EXTERNAL_ROTATION = 7,
+ FLUID_STRUCTURE_STATIC = 8 /*!< \brief Fluid structure deformation with no grid velocity. */
+
+};
+
+static const map SurfaceMovement_Map = CCreateMap
+("DEFORMING", DEFORMING)
+("MOVING_WALL", MOVING_WALL)
+("AEROELASTIC_RIGID_MOTION", AEROELASTIC_RIGID_MOTION)
+("AEROELASTIC", AEROELASTIC)
+("FLUID_STRUCTURE_STATIC", FLUID_STRUCTURE_STATIC)
+("FLUID_STRUCTURE", FLUID_STRUCTURE)
+("EXTERNAL", EXTERNAL)
+("EXTERNAL_ROTATION", EXTERNAL_ROTATION);
+
/*!
* \brief type of wind gusts
@@ -2053,11 +2063,13 @@ static const map Verification_Solution_Map
class COptionBase {
private:
+ vector value;
public:
COptionBase() {};
virtual ~COptionBase() = 0;
- // virtual string SetValue(string) {SU2MPI::PrintAndFinalize("shouldn't be here"); return "";};
- virtual string SetValue(vector) = 0;
+
+ virtual string SetValue(vector value){this->value = value; return "";}
+ vector GetValue() {return value;}
virtual void SetDefault() = 0;
string optionCheckMultipleValues(vector & option_value, string type_id, string option_name) {
@@ -2100,6 +2112,7 @@ class COptionEnum : public COptionBase {
~COptionEnum() {};
string SetValue(vector option_value) {
+ COptionBase::SetValue(option_value);
// Check if there is more than one string
string out = optionCheckMultipleValues(option_value, "enum", this->name);
if (out.compare("") != 0) {
@@ -2139,6 +2152,7 @@ class COptionDouble : public COptionBase {
~COptionDouble() {};
string SetValue(vector option_value) {
+ COptionBase::SetValue(option_value);
// check if there is more than one value
string out = optionCheckMultipleValues(option_value, "su2double", this->name);
if (out.compare("") != 0) {
@@ -2170,6 +2184,7 @@ class COptionString : public COptionBase {
~COptionString() {};
string SetValue(vector option_value) {
+ COptionBase::SetValue(option_value);
// check if there is more than one value
string out = optionCheckMultipleValues(option_value, "su2double", this->name);
if (out.compare("") != 0) {
@@ -2196,6 +2211,7 @@ class COptionInt : public COptionBase {
~COptionInt() {};
string SetValue(vector option_value) {
+ COptionBase::SetValue(option_value);
string out = optionCheckMultipleValues(option_value, "int", this->name);
if (out.compare("") != 0) {
return out;
@@ -2226,6 +2242,7 @@ class COptionULong : public COptionBase {
~COptionULong() {};
string SetValue(vector option_value) {
+ COptionBase::SetValue(option_value);
string out = optionCheckMultipleValues(option_value, "unsigned long", this->name);
if (out.compare("") != 0) {
return out;
@@ -2256,6 +2273,7 @@ class COptionUShort : public COptionBase {
~COptionUShort() {};
string SetValue(vector option_value) {
+ COptionBase::SetValue(option_value);
string out = optionCheckMultipleValues(option_value, "unsigned short", this->name);
if (out.compare("") != 0) {
return out;
@@ -2286,6 +2304,7 @@ class COptionLong : public COptionBase {
~COptionLong() {};
string SetValue(vector option_value) {
+ COptionBase::SetValue(option_value);
string out = optionCheckMultipleValues(option_value, "long", this->name);
if (out.compare("") != 0) {
return out;
@@ -2317,6 +2336,7 @@ class COptionBool : public COptionBase {
~COptionBool() {};
string SetValue(vector option_value) {
+ COptionBase::SetValue(option_value);
// check if there is more than one value
string out = optionCheckMultipleValues(option_value, "bool", this->name);
if (out.compare("") != 0) {
@@ -2353,6 +2373,7 @@ class COptionEnumList : public COptionBase {
~COptionEnumList() {};
string SetValue(vector option_value) {
+ COptionBase::SetValue(option_value);
if (option_value.size() == 1 && option_value[0].compare("NONE") == 0) {
this->size = 0;
return "";
@@ -2404,6 +2425,7 @@ class COptionDoubleArray : public COptionBase {
if(vals != NULL) delete [] vals;
};
string SetValue(vector option_value) {
+ COptionBase::SetValue(option_value);
// Check that the size is correct
if (option_value.size() != (unsigned long)this->size) {
string newstring;
@@ -2454,6 +2476,7 @@ class COptionDoubleList : public COptionBase {
~COptionDoubleList() {};
string SetValue(vector option_value) {
+ COptionBase::SetValue(option_value);
// The size is the length of option_value
unsigned short option_size = option_value.size();
if (option_size == 1 && option_value[0].compare("NONE") == 0) {
@@ -2496,6 +2519,7 @@ class COptionShortList : public COptionBase {
~COptionShortList() {};
string SetValue(vector option_value) {
+ COptionBase::SetValue(option_value);
// The size is the length of option_value
unsigned short option_size = option_value.size();
if (option_size == 1 && option_value[0].compare("NONE") == 0) {
@@ -2537,6 +2561,7 @@ class COptionUShortList : public COptionBase {
~COptionUShortList() {};
string SetValue(vector option_value) {
+ COptionBase::SetValue(option_value);
// The size is the length of option_value
unsigned short option_size = option_value.size();
if (option_size == 1 && option_value[0].compare("NONE") == 0) {
@@ -2578,6 +2603,7 @@ class COptionStringList : public COptionBase {
~COptionStringList() {};
string SetValue(vector option_value) {
+ COptionBase::SetValue(option_value);
// The size is the length of option_value
unsigned short option_size = option_value.size();
if (option_size == 1 && option_value[0].compare("NONE") == 0) {
@@ -2613,6 +2639,7 @@ class COptionConvect : public COptionBase {
~COptionConvect() {};
string SetValue(vector option_value) {
+ COptionBase::SetValue(option_value);
string out = optionCheckMultipleValues(option_value, "unsigned short", this->name);
if (out.compare("") != 0) {
@@ -2658,6 +2685,7 @@ class COptionFEMConvect : public COptionBase{
~COptionFEMConvect() {};
string SetValue(vector option_value) {
+ COptionBase::SetValue(option_value);
string out = optionCheckMultipleValues(option_value, "unsigned short", this->name);
if (out.compare("") != 0) {
@@ -2700,6 +2728,7 @@ class COptionMathProblem : public COptionBase {
~COptionMathProblem() {};
string SetValue(vector option_value) {
+ COptionBase::SetValue(option_value);
string out = optionCheckMultipleValues(option_value, "unsigned short", this->name);
if (out.compare("") != 0) {
return out;
@@ -2754,6 +2783,7 @@ class COptionDVParam : public COptionBase {
~COptionDVParam() {};
string SetValue(vector option_value) {
+ COptionBase::SetValue(option_value);
if ((option_value.size() == 1) && (option_value[0].compare("NONE") == 0)) {
this->nDV = 0;
return "";
@@ -2916,6 +2946,7 @@ class COptionDVValue : public COptionBase {
~COptionDVValue() {};
string SetValue(vector option_value) {
+ COptionBase::SetValue(option_value);
if ((option_value.size() == 1) && (option_value[0].compare("NONE") == 0)) {
this->nDV_Value = NULL;
return "";
@@ -3021,6 +3052,7 @@ class COptionFFDDef : public COptionBase {
~COptionFFDDef() {};
string SetValue(vector option_value) {
+ COptionBase::SetValue(option_value);
if ((option_value.size() == 1) && (option_value[0].compare("NONE") == 0)) {
this->nFFD = 0;
return "";
@@ -3115,6 +3147,7 @@ class COptionFFDDegree : public COptionBase {
~COptionFFDDegree() {};
string SetValue(vector option_value) {
+ COptionBase::SetValue(option_value);
if ((option_value.size() == 1) && (option_value[0].compare("NONE") == 0)) {
this->nFFD = 0;
return "";
@@ -3204,6 +3237,7 @@ class COptionStringDoubleList : public COptionBase {
~COptionStringDoubleList() {};
string SetValue(vector option_value) {
+ COptionBase::SetValue(option_value);
// There must be an even number of entries (same number of strings and doubles
unsigned short totalVals = option_value.size();
if ((totalVals % 2) != 0) {
@@ -3255,7 +3289,7 @@ class COptionInlet : public COptionBase {
~COptionInlet() {};
string SetValue(vector option_value) {
-
+ COptionBase::SetValue(option_value);
unsigned short totalVals = option_value.size();
if ((totalVals == 1) && (option_value[0].compare("NONE") == 0)) {
this->size = 0;
@@ -3346,7 +3380,7 @@ class COptionRiemann : public COptionBase {
~COptionRiemann() {};
string SetValue(vector option_value) {
-
+ COptionBase::SetValue(option_value);
unsigned short totalVals = option_value.size();
if ((totalVals == 1) && (option_value[0].compare("NONE") == 0)) {
this->size = 0;
@@ -3454,7 +3488,7 @@ class COptionGiles : public COptionBase{
~COptionGiles() {};
string SetValue(vector option_value) {
-
+ COptionBase::SetValue(option_value);
unsigned long totalVals = option_value.size();
if ((totalVals == 1) && (option_value[0].compare("NONE") == 0)) {
this->size = 0;
@@ -3576,7 +3610,7 @@ class COptionExhaust : public COptionBase {
~COptionExhaust() {};
string SetValue(vector option_value) {
-
+ COptionBase::SetValue(option_value);
unsigned short totalVals = option_value.size();
if ((totalVals == 1) && (option_value[0].compare("NONE") == 0)) {
this->size = 0;
@@ -3643,7 +3677,7 @@ class COptionPeriodic : public COptionBase {
~COptionPeriodic() {};
string SetValue(vector option_value) {
-
+ COptionBase::SetValue(option_value);
const int mod_num = 11;
unsigned short totalVals = option_value.size();
@@ -3808,7 +3842,7 @@ class COptionTurboPerformance : public COptionBase {
~COptionTurboPerformance() {};
string SetValue(vector option_value) {
-
+ COptionBase::SetValue(option_value);
const int mod_num = 2;
unsigned long totalVals = option_value.size();
@@ -3858,7 +3892,8 @@ class COptionPython : public COptionBase {
}
~COptionPython() {};
// No checking happens with python options
- string SetValue(vector) {
+ string SetValue(vector option_value) {
+ COptionBase::SetValue(option_value);
return "";
}
// No defaults with python options
@@ -3890,6 +3925,7 @@ class COptionActDisk : public COptionBase {
~COptionActDisk() {};
string SetValue(vector option_value) {
+ COptionBase::SetValue(option_value);
const int mod_num = 8;
unsigned short totalVals = option_value.size();
if ((totalVals == 1) && (option_value[0].compare("NONE") == 0)) {
@@ -3984,7 +4020,7 @@ class COptionWallFunction : public COptionBase {
~COptionWallFunction(){}
string SetValue(vector option_value) {
-
+ COptionBase::SetValue(option_value);
/*--- First check if NONE is specified. ---*/
unsigned short totalSize = option_value.size();
if ((totalSize == 1) && (option_value[0].compare("NONE") == 0)) {
diff --git a/Common/src/config_structure.cpp b/Common/src/config_structure.cpp
index 15066b7ba2d2..a30427de3f32 100644
--- a/Common/src/config_structure.cpp
+++ b/Common/src/config_structure.cpp
@@ -1,4 +1,4 @@
-/*!
+/*!
* \file config_structure.cpp
* \brief Main file for managing the config file
* \author F. Palacios, T. Economon, B. Tracey, H. Kline
@@ -63,24 +63,86 @@ vector GEMM_Profile_MaxTime; /*!< \brief Maximum time spent for thi
#include "../include/ad_structure.hpp"
#include "../include/toolboxes/printing_toolbox.hpp"
-CConfig::CConfig(char case_filename[MAX_STRING_SIZE], unsigned short val_software, unsigned short val_iZone, unsigned short val_nZone, unsigned short val_nDim, bool verb_high) {
+CConfig::CConfig(char case_filename[MAX_STRING_SIZE], unsigned short val_software, unsigned short val_nZone, bool verb_high) {
+
+ base_config = true;
+
+ /*--- Store MPI rank and size ---*/
+
+ rank = SU2_MPI::GetRank();
+ size = SU2_MPI::GetSize();
+
+ iZone = val_nZone;
+ nZone = val_nZone;
+
+ /*--- Initialize pointers to Null---*/
+
+ SetPointersNull();
+
+ /*--- Reading config options ---*/
+
+ SetConfig_Options();
+
+ /*--- Parsing the config file ---*/
+
+ SetConfig_Parsing(case_filename);
+
+ /*--- Set the default values for all of the options that weren't set ---*/
+
+ SetDefault();
+
+ /*--- Configuration file postprocessing ---*/
+
+ SetPostprocessing(val_software, iZone, 0);
+
+ /*--- Configuration file boundaries/markers setting ---*/
+
+ SetMarkers(val_software);
+
+ /*--- Configuration file output ---*/
+
+ if ((rank == MASTER_NODE) && verb_high)
+ SetOutput(val_software, iZone);
+
+}
+
+CConfig::CConfig(CConfig* config, char case_filename[MAX_STRING_SIZE], unsigned short val_software, unsigned short val_iZone, unsigned short val_nZone, bool verb_high) {
+
+ unsigned short val_nDim;
+
+ base_config = false;
/*--- Store MPI rank and size ---*/
rank = SU2_MPI::GetRank();
size = SU2_MPI::GetSize();
+ iZone = val_iZone;
+ nZone = val_nZone;
+
/*--- Initialize pointers to Null---*/
SetPointersNull();
/*--- Reading config options ---*/
- SetConfig_Options(val_iZone, val_nZone);
+ SetConfig_Options();
/*--- Parsing the config file ---*/
SetConfig_Parsing(case_filename);
+
+ /*--- Set default options from base config ---*/
+
+ SetDefaultFromConfig(config);
+
+ /*--- Set the default values for all of the options that weren't set ---*/
+
+ SetDefault();
+
+ /*--- Get the dimension --- */
+
+ val_nDim = GetnDim(Mesh_FileName, Mesh_FileFormat);
/*--- Configuration file postprocessing ---*/
@@ -92,13 +154,18 @@ CConfig::CConfig(char case_filename[MAX_STRING_SIZE], unsigned short val_softwar
/*--- Configuration file output ---*/
- if ((rank == MASTER_NODE) && verb_high && (val_iZone == 0))
+ if ((rank == MASTER_NODE) && verb_high)
SetOutput(val_software, val_iZone);
}
CConfig::CConfig(char case_filename[MAX_STRING_SIZE], unsigned short val_software) {
+ base_config = true;
+
+ nZone = 1;
+ iZone = 0;
+
/*--- Store MPI rank and size ---*/
rank = SU2_MPI::GetRank();
@@ -110,11 +177,19 @@ CConfig::CConfig(char case_filename[MAX_STRING_SIZE], unsigned short val_softwar
/*--- Reading config options ---*/
- SetConfig_Options(0, 1);
+ SetConfig_Options();
/*--- Parsing the config file ---*/
SetConfig_Parsing(case_filename);
+
+ /*--- Set the default values for all of the options that weren't set ---*/
+
+ SetDefault();
+
+ /*--- Set number of zones --- */
+
+ SetnZone();
/*--- Configuration file postprocessing ---*/
@@ -124,10 +199,16 @@ CConfig::CConfig(char case_filename[MAX_STRING_SIZE], unsigned short val_softwar
SetMarkers(val_software);
+ /*--- Print the header --- */
+
+ SetHeader(val_software);
+
}
CConfig::CConfig(char case_filename[MAX_STRING_SIZE], CConfig *config) {
+ base_config = true;
+
/*--- Store MPI rank and size ---*/
rank = SU2_MPI::GetRank();
@@ -147,6 +228,10 @@ CConfig::CConfig(char case_filename[MAX_STRING_SIZE], CConfig *config) {
runtime_file = SetRunTime_Parsing(case_filename);
+ /*--- Set the default values for all of the options that weren't set ---*/
+
+ SetDefault();
+
/*--- Update original config file ---*/
if (runtime_file) {
@@ -167,7 +252,7 @@ void CConfig::SetMPICommunicator(SU2_MPI::Comm Communicator) {
}
-unsigned short CConfig::GetnZone(string val_mesh_filename, unsigned short val_format, CConfig *config) {
+unsigned short CConfig::GetnZone(string val_mesh_filename, unsigned short val_format) {
int nZone = 1; /* Default value if nothing is specified. */
@@ -382,7 +467,7 @@ void CConfig::SetPointersNull(void) {
Marker_Euler = NULL; Marker_FarField = NULL; Marker_Custom = NULL;
Marker_SymWall = NULL; Marker_PerBound = NULL;
- Marker_PerDonor = NULL; Marker_NearFieldBound = NULL; Marker_InterfaceBound = NULL;
+ Marker_PerDonor = NULL; Marker_NearFieldBound = NULL;
Marker_Dirichlet = NULL; Marker_Inlet = NULL;
Marker_Supersonic_Inlet = NULL; Marker_Outlet = NULL;
Marker_Isothermal = NULL; Marker_HeatFlux = NULL; Marker_EngineInflow = NULL;
@@ -512,16 +597,25 @@ void CConfig::SetPointersNull(void) {
Weight_ObjFunc = NULL;
/*--- Moving mesh pointers ---*/
-
- Kind_GridMovement = NULL; LocationStations = NULL;
- Motion_Origin_X = NULL; Motion_Origin_Y = NULL; Motion_Origin_Z = NULL;
- Translation_Rate_X = NULL; Translation_Rate_Y = NULL; Translation_Rate_Z = NULL;
- Rotation_Rate_X = NULL; Rotation_Rate_Y = NULL; Rotation_Rate_Z = NULL;
- Pitching_Omega_X = NULL; Pitching_Omega_Y = NULL; Pitching_Omega_Z = NULL;
- Pitching_Ampl_X = NULL; Pitching_Ampl_Y = NULL; Pitching_Ampl_Z = NULL;
- Pitching_Phase_X = NULL; Pitching_Phase_Y = NULL; Pitching_Phase_Z = NULL;
- Plunging_Omega_X = NULL; Plunging_Omega_Y = NULL; Plunging_Omega_Z = NULL;
- Plunging_Ampl_X = NULL; Plunging_Ampl_Y = NULL; Plunging_Ampl_Z = NULL;
+
+ nKind_SurfaceMovement = 0;
+ LocationStations = NULL;
+ Motion_Origin = NULL;
+ Translation_Rate = NULL;
+ Rotation_Rate = NULL;
+ Pitching_Omega = NULL;
+ Pitching_Ampl = NULL;
+ Pitching_Phase = NULL;
+ Plunging_Omega = NULL;
+ Plunging_Ampl = NULL;
+ MarkerMotion_Origin = NULL;
+ MarkerTranslation_Rate = NULL;
+ MarkerRotation_Rate = NULL;
+ MarkerPitching_Omega = NULL;
+ MarkerPitching_Ampl = NULL;
+ MarkerPitching_Phase = NULL;
+ MarkerPlunging_Omega = NULL;
+ MarkerPlunging_Ampl = NULL;
RefOriginMoment_X = NULL; RefOriginMoment_Y = NULL; RefOriginMoment_Z = NULL;
MoveMotion_Origin = NULL;
@@ -584,7 +678,6 @@ void CConfig::SetPointersNull(void) {
RelaxFactorAverage = NULL;
RelaxFactorFourier = NULL;
nSpan_iZones = NULL;
- FinalRotation_Rate_Z = NULL;
ExtraRelFacGiles = NULL;
Mixedout_Coeff = NULL;
RampRotatingFrame_Coeff = NULL;
@@ -620,7 +713,6 @@ void CConfig::SetPointersNull(void) {
nMarker_PerBound = 0;
nPeriodic_Index = 0;
- Grid_Movement = false;
Aeroelastic_Simulation = false;
ZoneSpecific_Problem = false;
@@ -638,10 +730,8 @@ void CConfig::SetRunTime_Options(void) {
}
-void CConfig::SetConfig_Options(unsigned short val_iZone, unsigned short val_nZone) {
+void CConfig::SetConfig_Options() {
- nZone = val_nZone;
- iZone = val_iZone;
/*--- Allocate some default arrays needed for lists of doubles. ---*/
@@ -703,9 +793,10 @@ void CConfig::SetConfig_Options(unsigned short val_iZone, unsigned short val_nZo
/*!\brief REGIME_TYPE \n DESCRIPTION: Regime type \n OPTIONS: see \link Regime_Map \endlink \ingroup Config*/
addEnumOption("REGIME_TYPE", Kind_Regime, Regime_Map, COMPRESSIBLE);
-
/*!\brief PHYSICAL_PROBLEM \n DESCRIPTION: Physical governing equations \n Options: see \link Solver_Map \endlink \n DEFAULT: NO_SOLVER \ingroup Config*/
addEnumOption("PHYSICAL_PROBLEM", Kind_Solver, Solver_Map, NO_SOLVER);
+ /*!\brief MULTIZONE \n DESCRIPTION: Enable multizone mode \ingroup Config*/
+ addBoolOption("MULTIZONE", Multizone_Problem, NO);
/*!\brief PHYSICAL_PROBLEM_ZONEWISE \n DESCRIPTION: Physical governing equations for each zone \n Options: see \link Solver_Map \endlink \n DEFAULT: NO_SOLVER \ingroup Config*/
addEnumListOption("PHYSICAL_PROBLEM_ZONEWISE", nZoneSpecified, Kind_Solver_PerZone, Solver_Map);
/*!\brief PHYSICAL_PROBLEM \n DESCRIPTION: Physical governing equations \n Options: see \link Solver_Map \endlink \n DEFAULT: NO_SOLVER \ingroup Config*/
@@ -989,8 +1080,6 @@ void CConfig::SetConfig_Options(unsigned short val_iZone, unsigned short val_nZo
addStringListOption("MARKER_NEARFIELD", nMarker_NearFieldBound, Marker_NearFieldBound);
/*!\brief MARKER_FLUID_INTERFACE\n DESCRIPTION: Fluid interface boundary marker(s) \ingroup Config*/
addStringListOption("MARKER_FLUID_INTERFACE", nMarker_Fluid_InterfaceBound, Marker_Fluid_InterfaceBound);
- /*!\brief MARKER_INTERFACE\n DESCRIPTION: Zone interface boundary marker(s) \ingroup Config*/
- addStringListOption("MARKER_INTERFACE", nMarker_InterfaceBound, Marker_InterfaceBound);
/*!\brief MARKER_FSI_INTERFACE \n DESCRIPTION: ZONE interface boundary marker(s) \ingroup Config*/
addStringListOption("MARKER_ZONE_INTERFACE", nMarker_ZoneInterface, Marker_ZoneInterface);
/*!\brief MARKER_CHT_INTERFACE \n DESCRIPTION: CHT interface boundary marker(s) \ingroup Config*/
@@ -1697,62 +1786,47 @@ void CConfig::SetConfig_Options(unsigned short val_iZone, unsigned short val_nZo
/*!\par CONFIG_CATEGORY: Dynamic mesh definition \ingroup Config*/
/*--- Options related to dynamic meshes ---*/
- /* DESCRIPTION: Mesh motion for unsteady simulations */
- addBoolOption("GRID_MOVEMENT", Grid_Movement, false);
/* DESCRIPTION: Type of mesh motion */
- addEnumListOption("GRID_MOVEMENT_KIND", nGridMovement, Kind_GridMovement, GridMovement_Map);
+ addEnumOption("GRID_MOVEMENT", Kind_GridMovement, GridMovement_Map, NO_MOVEMENT);
+ /* DESCRIPTION: Type of surface motion */
+ addEnumListOption("SURFACE_MOVEMENT",nKind_SurfaceMovement, Kind_SurfaceMovement, SurfaceMovement_Map);
/* DESCRIPTION: Marker(s) of moving surfaces (MOVING_WALL or DEFORMING grid motion). */
addStringListOption("MARKER_MOVING", nMarker_Moving, Marker_Moving);
/* DESCRIPTION: Mach number (non-dimensional, based on the mesh velocity and freestream vals.) */
addDoubleOption("MACH_MOTION", Mach_Motion, 0.0);
+ default_vel_inf[0] = 0.0; default_vel_inf[1] = 0.0; default_vel_inf[2] = 0.0;
/* DESCRIPTION: Coordinates of the rigid motion origin */
- addDoubleListOption("MOTION_ORIGIN_X", nMotion_Origin_X, Motion_Origin_X);
- /* DESCRIPTION: Coordinates of the rigid motion origin */
- addDoubleListOption("MOTION_ORIGIN_Y", nMotion_Origin_Y, Motion_Origin_Y);
- /* DESCRIPTION: Coordinates of the rigid motion origin */
- addDoubleListOption("MOTION_ORIGIN_Z", nMotion_Origin_Z, Motion_Origin_Z);
- /* DESCRIPTION: Translational velocity vector (m/s) in the x, y, & z directions (RIGID_MOTION only) */
- addDoubleListOption("TRANSLATION_RATE_X", nTranslation_Rate_X, Translation_Rate_X);
- /* DESCRIPTION: Translational velocity vector (m/s) in the x, y, & z directions (RIGID_MOTION only) */
- addDoubleListOption("TRANSLATION_RATE_Y", nTranslation_Rate_Y, Translation_Rate_Y);
+ addDoubleArrayOption("MOTION_ORIGIN", 3, Motion_Origin, default_vel_inf);
/* DESCRIPTION: Translational velocity vector (m/s) in the x, y, & z directions (RIGID_MOTION only) */
- addDoubleListOption("TRANSLATION_RATE_Z", nTranslation_Rate_Z, Translation_Rate_Z);
+ addDoubleArrayOption("TRANSLATION_RATE", 3, Translation_Rate, default_vel_inf);
/* DESCRIPTION: Angular velocity vector (rad/s) about x, y, & z axes (RIGID_MOTION only) */
- addDoubleListOption("ROTATION_RATE_X", nRotation_Rate_X, Rotation_Rate_X);
- /* DESCRIPTION: Angular velocity vector (rad/s) about x, y, & z axes (RIGID_MOTION only) */
- addDoubleListOption("ROTATION_RATE_Y", nRotation_Rate_Y, Rotation_Rate_Y);
- /* DESCRIPTION: Angular velocity vector (rad/s) about x, y, & z axes (RIGID_MOTION only) */
- addDoubleListOption("ROTATION_RATE_Z", nRotation_Rate_Z, Rotation_Rate_Z);
- /* DESCRIPTION: Pitching angular freq. (rad/s) about x, y, & z axes (RIGID_MOTION only) */
- addDoubleListOption("PITCHING_OMEGA_X", nPitching_Omega_X, Pitching_Omega_X);
+ addDoubleArrayOption("ROTATION_RATE", 3, Rotation_Rate, default_vel_inf);
/* DESCRIPTION: Pitching angular freq. (rad/s) about x, y, & z axes (RIGID_MOTION only) */
- addDoubleListOption("PITCHING_OMEGA_Y", nPitching_Omega_Y, Pitching_Omega_Y);
- /* DESCRIPTION: Pitching angular freq. (rad/s) about x, y, & z axes (RIGID_MOTION only) */
- addDoubleListOption("PITCHING_OMEGA_Z", nPitching_Omega_Z, Pitching_Omega_Z);
- /* DESCRIPTION: Pitching amplitude (degrees) about x, y, & z axes (RIGID_MOTION only) */
- addDoubleListOption("PITCHING_AMPL_X", nPitching_Ampl_X, Pitching_Ampl_X);
- /* DESCRIPTION: Pitching amplitude (degrees) about x, y, & z axes (RIGID_MOTION only) */
- addDoubleListOption("PITCHING_AMPL_Y", nPitching_Ampl_Y, Pitching_Ampl_Y);
+ addDoubleArrayOption("PITCHING_OMEGA", 3, Pitching_Omega, default_vel_inf);
/* DESCRIPTION: Pitching amplitude (degrees) about x, y, & z axes (RIGID_MOTION only) */
- addDoubleListOption("PITCHING_AMPL_Z", nPitching_Ampl_Z, Pitching_Ampl_Z);
+ addDoubleArrayOption("PITCHING_AMPL", 3, Pitching_Ampl, default_vel_inf);
/* DESCRIPTION: Pitching phase offset (degrees) about x, y, & z axes (RIGID_MOTION only) */
- addDoubleListOption("PITCHING_PHASE_X", nPitching_Phase_X, Pitching_Phase_X);
- /* DESCRIPTION: Pitching phase offset (degrees) about x, y, & z axes (RIGID_MOTION only) */
- addDoubleListOption("PITCHING_PHASE_Y", nPitching_Phase_Y, Pitching_Phase_Y);
- /* DESCRIPTION: Pitching phase offset (degrees) about x, y, & z axes (RIGID_MOTION only) */
- addDoubleListOption("PITCHING_PHASE_Z", nPitching_Phase_Z, Pitching_Phase_Z);
- /* DESCRIPTION: Plunging angular freq. (rad/s) in x, y, & z directions (RIGID_MOTION only) */
- addDoubleListOption("PLUNGING_OMEGA_X", nPlunging_Omega_X, Plunging_Omega_X);
+ addDoubleArrayOption("PITCHING_PHASE", 3, Pitching_Phase, default_vel_inf);
/* DESCRIPTION: Plunging angular freq. (rad/s) in x, y, & z directions (RIGID_MOTION only) */
- addDoubleListOption("PLUNGING_OMEGA_Y", nPlunging_Omega_Y, Plunging_Omega_Y);
- /* DESCRIPTION: Plunging angular freq. (rad/s) in x, y, & z directions (RIGID_MOTION only) */
- addDoubleListOption("PLUNGING_OMEGA_Z", nPlunging_Omega_Z, Plunging_Omega_Z);
- /* DESCRIPTION: Plunging amplitude (m) in x, y, & z directions (RIGID_MOTION only) */
- addDoubleListOption("PLUNGING_AMPL_X", nPlunging_Ampl_X, Plunging_Ampl_X);
- /* DESCRIPTION: Plunging amplitude (m) in x, y, & z directions (RIGID_MOTION only) */
- addDoubleListOption("PLUNGING_AMPL_Y", nPlunging_Ampl_Y, Plunging_Ampl_Y);
+ addDoubleArrayOption("PLUNGING_OMEGA", 3, Plunging_Omega, default_vel_inf);
/* DESCRIPTION: Plunging amplitude (m) in x, y, & z directions (RIGID_MOTION only) */
- addDoubleListOption("PLUNGING_AMPL_Z", nPlunging_Ampl_Z, Plunging_Ampl_Z);
+ addDoubleArrayOption("PLUNGING_AMPL", 3, Plunging_Ampl, default_vel_inf);
+ /* DESCRIPTION: Coordinates of the rigid motion origin */
+ addDoubleListOption("SURFACE_MOTION_ORIGIN", nMarkerMotion_Origin, MarkerMotion_Origin);
+ /* DESCRIPTION: Translational velocity vector (m/s) in the x, y, & z directions (DEFORMING only) */
+ addDoubleListOption("SURFACE_TRANSLATION_RATE", nMarkerTranslation, MarkerTranslation_Rate);
+ /* DESCRIPTION: Angular velocity vector (rad/s) about x, y, & z axes (DEFORMING only) */
+ addDoubleListOption("SURFACE_ROTATION_RATE", nMarkerRotation_Rate, MarkerRotation_Rate);
+ /* DESCRIPTION: Pitching angular freq. (rad/s) about x, y, & z axes (DEFORMING only) */
+ addDoubleListOption("SURFACE_PITCHING_OMEGA", nMarkerPitching_Omega, MarkerPitching_Omega);
+ /* DESCRIPTION: Pitching amplitude (degrees) about x, y, & z axes (DEFORMING only) */
+ addDoubleListOption("SURFACE_PITCHING_AMPL", nMarkerPitching_Ampl, MarkerPitching_Ampl);
+ /* DESCRIPTION: Pitching phase offset (degrees) about x, y, & z axes (DEFORMING only) */
+ addDoubleListOption("SURFACE_PITCHING_PHASE", nMarkerPitching_Phase, MarkerPitching_Phase);
+ /* DESCRIPTION: Plunging angular freq. (rad/s) in x, y, & z directions (DEFORMING only) */
+ addDoubleListOption("SURFACE_PLUNGING_OMEGA", nMarkerPlunging_Omega, MarkerPlunging_Omega);
+ /* DESCRIPTION: Plunging amplitude (m) in x, y, & z directions (DEFORMING only) */
+ addDoubleListOption("SURFACE_PLUNGING_AMPL", nMarkerPlunging_Ampl, MarkerPlunging_Ampl);
/* DESCRIPTION: Value to move motion origins (1 or 0) */
addUShortListOption("MOVE_MOTION_ORIGIN", nMoveMotion_Origin, MoveMotion_Origin);
@@ -2473,14 +2547,35 @@ void CConfig::SetConfig_Parsing(char case_filename[MAX_STRING_SIZE]) {
SU2_MPI::Error(errorString, CURRENT_FUNCTION);
}
+ case_file.close();
+
+}
+
+void CConfig::SetDefaultFromConfig(CConfig *config){
+
+ map noInheritance = CCreateMap
+ ("SCREEN_OUTPUT", true)
+ ("HISTORY_OUTPUT", true);
+
+ map::iterator iter = all_options.begin(), curr_iter;
+
+ while (iter != all_options.end()){
+ curr_iter = iter++;
+ if (config->option_map[curr_iter->first]->GetValue().size() > 0 && !noInheritance[curr_iter->first]){
+ option_map[curr_iter->first]->SetValue(config->option_map[curr_iter->first]->GetValue());
+ all_options.erase(curr_iter);
+ }
+ }
+}
+
+void CConfig::SetDefault(){
+
/*--- Set the default values for all of the options that weren't set ---*/
for (map::iterator iter = all_options.begin(); iter != all_options.end(); ++iter) {
+ if (option_map[iter->first]->GetValue().size() == 0)
option_map[iter->first]->SetDefault();
}
-
- case_file.close();
-
}
bool CConfig::SetRunTime_Parsing(char case_filename[MAX_STRING_SIZE]) {
@@ -2556,6 +2651,12 @@ bool CConfig::SetRunTime_Parsing(char case_filename[MAX_STRING_SIZE]) {
}
}
+ /*--- Set the default values for all of the options that weren't set ---*/
+
+ for (map::iterator iter = all_options.begin(); iter != all_options.end(); ++iter) {
+ option_map[iter->first]->SetDefault();
+ }
+
/*--- See if there were any errors parsing the runtime file ---*/
if (errorString.size() != 0) {
@@ -2568,9 +2669,135 @@ bool CConfig::SetRunTime_Parsing(char case_filename[MAX_STRING_SIZE]) {
}
+void CConfig::SetHeader(unsigned short val_software){
+ /*--- WARNING: when compiling on Windows, ctime() is not available. Comment out
+ the two lines below that use the dt variable. ---*/
+ //time_t now = time(0);
+ //string dt = ctime(&now); dt[24] = '.';
+ if ((iZone == 0) && (rank == MASTER_NODE)){
+ cout << endl << "-------------------------------------------------------------------------" << endl;
+ cout << "| ___ _ _ ___ |" << endl;
+ cout << "| / __| | | |_ ) Release 6.2.0 \"Falcon\" |" << endl;
+ cout << "| \\__ \\ |_| |/ / |" << endl;
+ switch (val_software) {
+ case SU2_CFD: cout << "| |___/\\___//___| Suite (Computational Fluid Dynamics Code) |" << endl; break;
+ case SU2_DEF: cout << "| |___/\\___//___| Suite (Mesh Deformation Code) |" << endl; break;
+ case SU2_DOT: cout << "| |___/\\___//___| Suite (Gradient Projection Code) |" << endl; break;
+ case SU2_MSH: cout << "| |___/\\___//___| Suite (Mesh Adaptation Code) |" << endl; break;
+ case SU2_GEO: cout << "| |___/\\___//___| Suite (Geometry Definition Code) |" << endl; break;
+ case SU2_SOL: cout << "| |___/\\___//___| Suite (Solution Exporting Code) |" << endl; break;
+ }
+
+ cout << "| |" << endl;
+ //cout << "| Local date and time: " << dt << " |" << endl;
+ cout <<"-------------------------------------------------------------------------" << endl;
+ cout << "| The current SU2 release has been coordinated by the |" << endl;
+ cout << "| SU2 International Developers Society |" << endl;
+ cout << "| with selected contributions from the open-source community. |" << endl;
+ cout <<"-------------------------------------------------------------------------" << endl;
+ cout << "| The main research teams contributing to the current release are: |" << endl;
+ cout << "| - Prof. Juan J. Alonso's group at Stanford University. |" << endl;
+ cout << "| - Prof. Piero Colonna's group at Delft University of Technology. |" << endl;
+ cout << "| - Prof. Nicolas R. Gauger's group at Kaiserslautern U. of Technology. |" << endl;
+ cout << "| - Prof. Alberto Guardone's group at Polytechnic University of Milan. |" << endl;
+ cout << "| - Prof. Rafael Palacios' group at Imperial College London. |" << endl;
+ cout << "| - Prof. Vincent Terrapon's group at the University of Liege. |" << endl;
+ cout << "| - Prof. Edwin van der Weide's group at the University of Twente. |" << endl;
+ cout << "| - Lab. of New Concepts in Aeronautics at Tech. Inst. of Aeronautics. |" << endl;
+ cout <<"-------------------------------------------------------------------------" << endl;
+ cout << "| Copyright 2012-2019, Francisco D. Palacios, Thomas D. Economon, |" << endl;
+ cout << "| Tim Albring, and the SU2 contributors. |" << endl;
+ cout << "| |" << endl;
+ cout << "| SU2 is free software; you can redistribute it and/or |" << endl;
+ cout << "| modify it under the terms of the GNU Lesser General Public |" << endl;
+ cout << "| License as published by the Free Software Foundation; either |" << endl;
+ cout << "| version 2.1 of the License, or (at your option) any later version. |" << endl;
+ cout << "| |" << endl;
+ cout << "| SU2 is distributed in the hope that it will be useful, |" << endl;
+ cout << "| but WITHOUT ANY WARRANTY; without even the implied warranty of |" << endl;
+ cout << "| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |" << endl;
+ cout << "| Lesser General Public License for more details. |" << endl;
+ cout << "| |" << endl;
+ cout << "| You should have received a copy of the GNU Lesser General Public |" << endl;
+ cout << "| License along with SU2. If not, see . |" << endl;
+ cout <<"-------------------------------------------------------------------------" << endl;
+ }
+
+}
+
+void CConfig::SetnZone(){
+
+ /*--- Just as a clarification --- */
+
+ if (Multizone_Problem == NO && Kind_Solver != MULTIPHYSICS){
+ nZone = 1;
+ }
+
+ if (Kind_Solver == MULTIPHYSICS){
+ Multizone_Problem = YES;
+ if (nConfig_Files == 0){
+ SU2_MPI::Error("CONFIG_LIST must be provided if PHYSICAL_PROBLEM=MULTIPHYSICS", CURRENT_FUNCTION);
+ }
+ }
+
+ if (Multizone_Problem == YES){
+
+ /*--- Some basic multizone checks ---*/
+
+ if (nMarker_ZoneInterface % 2 != 0){
+ SU2_MPI::Error("Number of markers in MARKER_ZONE_INTERFACE must be a multiple of 2", CURRENT_FUNCTION);
+ }
+
+ SinglezoneDriver = NO;
+
+ if (Multizone_Mesh){
+
+ /*--- Get the number of zones from the mesh file --- */
+
+ nZone = GetnZone(Mesh_FileName, Mesh_FileFormat);
+
+ /*--- If config list is set, make sure number matches number of zones in mesh file --- */
+
+ if (nConfig_Files != 0 && (nZone != nConfig_Files)){
+ SU2_MPI::Error("Number of CONFIG_LIST must match number of zones in mesh file.", CURRENT_FUNCTION);
+ }
+ } else {
+
+ /*--- Number of zones is determined from the number of config files provided --- */
+
+ if (nConfig_Files == 0){
+ SU2_MPI::Error("If MULTIZONE_MESH is set to YES, you must provide a list of config files using CONFIG_LIST option", CURRENT_FUNCTION);
+ }
+ nZone = nConfig_Files;
+
+ }
+
+ /*--- Check if subconfig files exist --- */
+
+ if (nConfig_Files != 0){
+ for (unsigned short iConfig = 0; iConfig < nConfig_Files; iConfig++){
+ ifstream f(Config_Filenames[iConfig].c_str());
+ if (!f.good()){
+ SU2_MPI::Error("Config file " + Config_Filenames[iConfig] + " defined in CONFIG_FILES does not exist", CURRENT_FUNCTION);
+ }
+ }
+ }
+
+ }
+
+ /*--- Temporary fix until Multizone Disc. Adj. solver is ready ---- */
+
+ if (Kind_Solver == FLUID_STRUCTURE_INTERACTION){
+
+ nZone = GetnZone(Mesh_FileName, Mesh_FileFormat);
+
+ }
+
+}
+
void CConfig::SetPostprocessing(unsigned short val_software, unsigned short val_izone, unsigned short val_nDim) {
- unsigned short iZone, iCFL, iMarker;
+ unsigned short iCFL, iMarker;
bool ideal_gas = ((Kind_FluidModel == STANDARD_AIR) ||
(Kind_FluidModel == IDEAL_GAS) ||
(Kind_FluidModel == INC_IDEAL_GAS) ||
@@ -2578,6 +2805,10 @@ void CConfig::SetPostprocessing(unsigned short val_software, unsigned short val_
(Kind_FluidModel == CONSTANT_DENSITY));
bool standard_air = ((Kind_FluidModel == STANDARD_AIR));
+ if (nZone > 1){
+ Multizone_Problem = YES;
+ }
+
#ifndef HAVE_TECIO
if (Output_FileFormat == TECPLOT_BINARY) {
cout << "Tecplot binary file requested but SU2 was built without TecIO support." << "\n";
@@ -2605,10 +2836,7 @@ void CConfig::SetPostprocessing(unsigned short val_software, unsigned short val_
/*--- Fixed CM mode requires a static movement of the grid ---*/
if (Fixed_CM_Mode) {
- Grid_Movement= true;
- nGridMovement = 1;
- Kind_GridMovement = new unsigned short[nGridMovement];
- Kind_GridMovement[0] = MOVING_HTP;
+ Kind_GridMovement = MOVING_HTP;
}
/*--- Initialize the AoA and Sideslip variables for the incompressible
@@ -2800,13 +3028,6 @@ void CConfig::SetPostprocessing(unsigned short val_software, unsigned short val_
}
else { FSI_Problem = false; }
- if (Kind_Solver == MULTIZONE) {
- Multizone_Problem = true;
- }
- else{
- Multizone_Problem = false;
- }
-
if ((Kind_Solver == HEAT_EQUATION_FVM) || (Kind_Solver == DISC_ADJ_HEAT)) {
Linear_Solver_Iter = Linear_Solver_Iter_Heat;
@@ -2951,98 +3172,34 @@ void CConfig::SetPostprocessing(unsigned short val_software, unsigned short val_
}
}
- /*--- Force number of span-wise section to 1 if 2D case ---*/
- if(val_nDim ==2){
- nSpanWiseSections_User=1;
- Kind_SpanWise= EQUISPACED;
- }
-
- /*--- Set number of TurboPerformance markers ---*/
- if(nMarker_Turbomachinery > 0){
- if(nMarker_Turbomachinery > 1){
- nMarker_TurboPerformance = nMarker_Turbomachinery + SU2_TYPE::Int(nMarker_Turbomachinery/2) + 1;
- }else{
- nMarker_TurboPerformance = nMarker_Turbomachinery;
- }
- } else {
- nMarker_TurboPerformance = 0;
- nSpanWiseSections =1;
- }
-
- /*--- Set number of TurboPerformance markers ---*/
- if(nMarker_Turbomachinery != 0){
- nSpan_iZones = new unsigned short[nZone];
- }
-
- /*--- Set number of TurboPerformance markers ---*/
- if(RampRotatingFrame && !DiscreteAdjoint){
- FinalRotation_Rate_Z = new su2double[nZone];
- for(iZone=0; iZone 0.0){
- Rotation_Rate_Z[iZone] = RampRotatingFrame_Coeff[0];
- }
- }
- }
-
- if(RampOutletPressure && !DiscreteAdjoint){
- for (iMarker = 0; iMarker < nMarker_Giles; iMarker++){
- if (Kind_Data_Giles[iMarker] == STATIC_PRESSURE || Kind_Data_Giles[iMarker] == STATIC_PRESSURE_1D || Kind_Data_Giles[iMarker] == RADIAL_EQUILIBRIUM ){
- FinalOutletPressure = Giles_Var1[iMarker];
- Giles_Var1[iMarker] = RampOutletPressure_Coeff[0];
- }
- }
- for (iMarker = 0; iMarker < nMarker_Riemann; iMarker++){
- if (Kind_Data_Riemann[iMarker] == STATIC_PRESSURE || Kind_Data_Riemann[iMarker] == RADIAL_EQUILIBRIUM){
- FinalOutletPressure = Riemann_Var1[iMarker];
- Riemann_Var1[iMarker] = RampOutletPressure_Coeff[0];
- }
- }
- }
-
- /*--- Check on extra Relaxation factor for Giles---*/
- if(ExtraRelFacGiles[1] > 0.5){
- ExtraRelFacGiles[1] = 0.5;
+ if (nKind_SurfaceMovement > 1 && (GetSurface_Movement(FLUID_STRUCTURE) || GetSurface_Movement(FLUID_STRUCTURE_STATIC))){
+ SU2_MPI::Error("FSI in combination with moving surfaces is currently not supported.", CURRENT_FUNCTION);
}
-
- /*--- Set grid movement kind to NO_MOVEMENT if not specified, which means
- that we also set the Grid_Movement flag to false. We initialize to the
- number of zones here, because we are guaranteed to at least have one. ---*/
-
- if (Kind_GridMovement == NULL) {
- Kind_GridMovement = new unsigned short[nZone];
- for (unsigned short iZone = 0; iZone < nZone; iZone++ )
- Kind_GridMovement[iZone] = NO_MOVEMENT;
- if (Grid_Movement == true) {
- SU2_MPI::Error("GRID_MOVEMENT = YES but no type provided in GRID_MOVEMENT_KIND!!", CURRENT_FUNCTION);
- }
- }
-
- /*--- If only one Grid_Movement kind is specified, it is assumed it's the same for all zones. ---*/
- /*--- TODO: Kind_Grid_Movement should not be an array but rather only one short. ---*/
- /*--- The distinction comes as each zone has one config container. ---*/
- if (nGridMovement != nZone){
- for (unsigned short iZone = 0; iZone < nZone; iZone++ )
- Kind_GridMovement[iZone] = Kind_GridMovement[ZONE_0];
+ if (nKind_SurfaceMovement != nMarker_Moving && !(GetSurface_Movement(FLUID_STRUCTURE) || GetSurface_Movement(FLUID_STRUCTURE_STATIC))){
+ SU2_MPI::Error("Number of KIND_SURFACE_MOVEMENT must match number of MARKER_MOVING", CURRENT_FUNCTION);
}
/*--- If we're solving a purely steady problem with no prescribed grid
movement (both rotating frame and moving walls can be steady), make sure that
there is no grid motion ---*/
- if ((Kind_SU2 == SU2_CFD || Kind_SU2 == SU2_SOL) &&
- (Unsteady_Simulation == STEADY) &&
- ((Kind_GridMovement[ZONE_0] != MOVING_WALL) &&
- (Kind_GridMovement[ZONE_0] != ROTATING_FRAME) &&
- (Kind_GridMovement[ZONE_0] != STEADY_TRANSLATION) &&
- (Kind_GridMovement[ZONE_0] != FLUID_STRUCTURE)))
- Grid_Movement = false;
-
- if ((Kind_SU2 == SU2_CFD || Kind_SU2 == SU2_SOL) &&
- (Unsteady_Simulation == STEADY) &&
- ((Kind_GridMovement[ZONE_0] == MOVING_HTP)))
- Grid_Movement = true;
+ if (GetGrid_Movement()){
+ if ((Kind_SU2 == SU2_CFD || Kind_SU2 == SU2_SOL) &&
+ (Unsteady_Simulation == STEADY && !Time_Domain)){
+
+ if((Kind_GridMovement != ROTATING_FRAME) &&
+ (Kind_GridMovement != STEADY_TRANSLATION) &&
+ (Kind_GridMovement != NONE)){
+ SU2_MPI::Error("Unsupported kind of grid movement for steady state problems.", CURRENT_FUNCTION);
+ }
+ for (iMarker = 0; iMarker < nMarker_Moving; iMarker++){
+ if (Kind_SurfaceMovement[iMarker] != MOVING_WALL){
+ SU2_MPI::Error("Unsupported kind of surface movement for steady state problems.", CURRENT_FUNCTION);
+ }
+ }
+ }
+ }
/*--- The Line Search should be applied only in the deformation stage. ---*/
@@ -3053,324 +3210,215 @@ void CConfig::SetPostprocessing(unsigned short val_software, unsigned short val_
/*--- If it is not specified, set the mesh motion mach number
equal to the freestream value. ---*/
- if (Grid_Movement && Mach_Motion == 0.0)
+ if (GetGrid_Movement() && Mach_Motion == 0.0)
Mach_Motion = Mach;
/*--- Set the boolean flag if we are in a rotating frame (source term). ---*/
- if (Grid_Movement && Kind_GridMovement[ZONE_0] == ROTATING_FRAME)
+ if (Kind_GridMovement == ROTATING_FRAME)
Rotating_Frame = true;
else
Rotating_Frame = false;
- /*--- Check the number of moving markers against the number of grid movement
- types provided (should be equal, except that rigid motion and rotating frame
- do not depend on surface specification). ---*/
-
- if (Grid_Movement &&
- (Kind_GridMovement[ZONE_0] != RIGID_MOTION) &&
- (Kind_GridMovement[ZONE_0] != ROTATING_FRAME) &&
- (Kind_GridMovement[ZONE_0] != MOVING_HTP) &&
- (Kind_GridMovement[ZONE_0] != STEADY_TRANSLATION) &&
- (Kind_GridMovement[ZONE_0] != FLUID_STRUCTURE) &&
- (Kind_GridMovement[ZONE_0] != GUST) &&
- (nGridMovement != nMarker_Moving)) {
- SU2_MPI::Error("Number of GRID_MOVEMENT_KIND must match number of MARKER_MOVING!!", CURRENT_FUNCTION);
+ /*--- THIS IS A TEMPORARY WORKAROUND to run the new multizone driver without adapting the config file.
+ * Will be removed soon. ---*/
+ if (Multizone_Problem){
+ if (Unsteady_Simulation != STEADY || Time_Domain == YES){
+ if (Delta_UnstTime != 0){
+ Time_Domain = YES;
+ Time_Iter = nExtIter;
+ Outer_Iter = Unst_nIntIter;
+ Inner_Iter = 1;
+ Time_Step = Delta_UnstTime;
+ }
+ }
}
/*--- In case the grid movement parameters have not been declared in the
config file, set them equal to zero for safety. Also check to make sure
that for each option, a value has been declared for each moving marker. ---*/
- unsigned short nMoving;
- if (nGridMovement > nZone) nMoving = nGridMovement;
- else nMoving = nZone;
-
- /*--- Motion Origin: ---*/
-
- if (Motion_Origin_X == NULL) {
- Motion_Origin_X = new su2double[nMoving];
- for (iZone = 0; iZone < nMoving; iZone++ )
- Motion_Origin_X[iZone] = 0.0;
- } else {
- if (Grid_Movement && (nMotion_Origin_X != nGridMovement)) {
- SU2_MPI::Error("Length of MOTION_ORIGIN_X must match GRID_MOVEMENT_KIND!!", CURRENT_FUNCTION);
+ if (nMarker_Moving > 0){
+ unsigned short iDim;
+ if (nMarkerMotion_Origin == 0){
+ nMarkerMotion_Origin = 3*nMarker_Moving;
+ MarkerMotion_Origin = new su2double[nMarkerMotion_Origin];
+ for (iMarker = 0; iMarker < nMarker_Moving; iMarker++){
+ for (iDim = 0; iDim < 3; iDim++){
+ MarkerMotion_Origin[3*iMarker+iDim] = 0.0;
}
}
-
- if (Motion_Origin_Y == NULL) {
- Motion_Origin_Y = new su2double[nMoving];
- for (iZone = 0; iZone < nMoving; iZone++ )
- Motion_Origin_Y[iZone] = 0.0;
- } else {
- if (Grid_Movement && (nMotion_Origin_Y != nGridMovement)) {
- SU2_MPI::Error("Length of MOTION_ORIGIN_Y must match GRID_MOVEMENT_KIND!!", CURRENT_FUNCTION);
}
+ if (nMarkerMotion_Origin/3 != nMarker_Moving){
+ SU2_MPI::Error("Number of SURFACE_MOTION_ORIGIN must be three times the number of MARKER_MOVING, (x,y,z) per marker.", CURRENT_FUNCTION);
}
-
- if (Motion_Origin_Z == NULL) {
- Motion_Origin_Z = new su2double[nMoving];
- for (iZone = 0; iZone < nMoving; iZone++ )
- Motion_Origin_Z[iZone] = 0.0;
- } else {
- if (Grid_Movement && (nMotion_Origin_Z != nGridMovement)) {
- SU2_MPI::Error("Length of MOTION_ORIGIN_Z must match GRID_MOVEMENT_KIND!!", CURRENT_FUNCTION);
+ if (nMarkerTranslation == 0){
+ nMarkerTranslation = 3*nMarker_Moving;
+ MarkerTranslation_Rate = new su2double[nMarkerTranslation];
+ for (iMarker = 0; iMarker < nMarker_Moving; iMarker++){
+ for (iDim = 0; iDim < 3; iDim++){
+ MarkerTranslation_Rate[3*iMarker+iDim] = 0.0;
}
}
-
- if (MoveMotion_Origin == NULL) {
- MoveMotion_Origin = new unsigned short[nMoving];
- for (iZone = 0; iZone < nMoving; iZone++ )
- MoveMotion_Origin[iZone] = 0;
- } else {
- if (Grid_Movement && (nMoveMotion_Origin != nGridMovement)) {
- SU2_MPI::Error("Length of MOVE_MOTION_ORIGIN must match GRID_MOVEMENT_KIND!!", CURRENT_FUNCTION);
}
+ if (nMarkerTranslation/3 != nMarker_Moving){
+ SU2_MPI::Error("Number of SURFACE_TRANSLATION_RATE must be three times the number of MARKER_MOVING, (x,y,z) per marker.", CURRENT_FUNCTION);
}
-
- /*--- Translation: ---*/
-
- if (Translation_Rate_X == NULL) {
- Translation_Rate_X = new su2double[nMoving];
- for (iZone = 0; iZone < nMoving; iZone++ )
- Translation_Rate_X[iZone] = 0.0;
- } else {
- if (Grid_Movement && (nTranslation_Rate_X != nGridMovement)) {
- SU2_MPI::Error("Length of TRANSLATION_RATE_X must match GRID_MOVEMENT_KIND!!", CURRENT_FUNCTION);
+ if (nMarkerRotation_Rate == 0){
+ nMarkerRotation_Rate = 3*nMarker_Moving;
+ MarkerRotation_Rate = new su2double[nMarkerRotation_Rate];
+ for (iMarker = 0; iMarker < nMarker_Moving; iMarker++){
+ for (iDim = 0; iDim < 3; iDim++){
+ MarkerRotation_Rate[3*iMarker+iDim] = 0.0;
}
}
-
- if (Translation_Rate_Y == NULL) {
- Translation_Rate_Y = new su2double[nMoving];
- for (iZone = 0; iZone < nMoving; iZone++ )
- Translation_Rate_Y[iZone] = 0.0;
- } else {
- if (Grid_Movement && (nTranslation_Rate_Y != nGridMovement)) {
- SU2_MPI::Error("Length of TRANSLATION_RATE_Y must match GRID_MOVEMENT_KIND!!", CURRENT_FUNCTION);
}
+ if (nMarkerRotation_Rate/3 != nMarker_Moving){
+ SU2_MPI::Error("Number of SURFACE_ROTATION_RATE must be three times the number of MARKER_MOVING, (x,y,z) per marker.", CURRENT_FUNCTION);
}
-
- if (Translation_Rate_Z == NULL) {
- Translation_Rate_Z = new su2double[nMoving];
- for (iZone = 0; iZone < nMoving; iZone++ )
- Translation_Rate_Z[iZone] = 0.0;
- } else {
- if (Grid_Movement && (nTranslation_Rate_Z != nGridMovement)) {
- SU2_MPI::Error("Length of TRANSLATION_RATE_Z must match GRID_MOVEMENT_KIND!!", CURRENT_FUNCTION);
+ if (nMarkerPlunging_Ampl == 0){
+ nMarkerPlunging_Ampl = 3*nMarker_Moving;
+ MarkerPlunging_Ampl = new su2double[nMarkerPlunging_Ampl];
+ for (iMarker = 0; iMarker < nMarker_Moving; iMarker++){
+ for (iDim = 0; iDim < 3; iDim++){
+ MarkerPlunging_Ampl[3*iMarker+iDim] = 0.0;
}
}
-
- /*--- Rotation: ---*/
-
- if (Rotation_Rate_X == NULL) {
- Rotation_Rate_X = new su2double[nMoving];
- for (iZone = 0; iZone < nMoving; iZone++ )
- Rotation_Rate_X[iZone] = 0.0;
- } else {
- if (Grid_Movement && (nRotation_Rate_X != nGridMovement)) {
- SU2_MPI::Error("Length of ROTATION_RATE_X must match GRID_MOVEMENT_KIND!!", CURRENT_FUNCTION);
}
+ if (nMarkerPlunging_Ampl/3 != nMarker_Moving){
+ SU2_MPI::Error("Number of SURFACE_PLUNGING_AMPL must be three times the number of MARKER_MOVING, (x,y,z) per marker.", CURRENT_FUNCTION);
}
-
- if (Rotation_Rate_Y == NULL) {
- Rotation_Rate_Y = new su2double[nMoving];
- for (iZone = 0; iZone < nMoving; iZone++ )
- Rotation_Rate_Y[iZone] = 0.0;
- } else {
- if (Grid_Movement && (nRotation_Rate_Y != nGridMovement)) {
- SU2_MPI::Error("Length of ROTATION_RATE_Y must match GRID_MOVEMENT_KIND!!", CURRENT_FUNCTION);
+ if (nMarkerPlunging_Omega == 0){
+ nMarkerPlunging_Omega = 3*nMarker_Moving;
+ MarkerPlunging_Omega = new su2double[nMarkerPlunging_Omega];
+ for (iMarker = 0; iMarker < nMarker_Moving; iMarker++){
+ for (iDim = 0; iDim < 3; iDim++){
+ MarkerPlunging_Omega[3*iMarker+iDim] = 0.0;
}
}
-
- if (Rotation_Rate_Z == NULL) {
- Rotation_Rate_Z = new su2double[nMoving];
- for (iZone = 0; iZone < nMoving; iZone++ )
- Rotation_Rate_Z[iZone] = 0.0;
- } else {
- if (Grid_Movement && (nRotation_Rate_Z != nGridMovement)) {
- SU2_MPI::Error("Length of ROTATION_RATE_Z must match GRID_MOVEMENT_KIND!!", CURRENT_FUNCTION);
}
+ if (nMarkerPlunging_Omega/3 != nMarker_Moving){
+ SU2_MPI::Error("Number of SURFACE_PLUNGING_OMEGA must be three times the number of MARKER_MOVING, (x,y,z) per marker.", CURRENT_FUNCTION);
}
-
- /*--- Pitching: ---*/
-
- if (Pitching_Omega_X == NULL) {
- Pitching_Omega_X = new su2double[nMoving];
- for (iZone = 0; iZone < nMoving; iZone++ )
- Pitching_Omega_X[iZone] = 0.0;
- } else {
- if (Grid_Movement && (nPitching_Omega_X != nGridMovement)) {
- SU2_MPI::Error("Length of PITCHING_OMEGA_X must match GRID_MOVEMENT_KIND!!", CURRENT_FUNCTION);
+ if (nMarkerPitching_Ampl == 0){
+ nMarkerPitching_Ampl = 3*nMarker_Moving;
+ MarkerPitching_Ampl = new su2double[nMarkerPitching_Ampl];
+ for (iMarker = 0; iMarker < nMarker_Moving; iMarker++){
+ for (iDim = 0; iDim < 3; iDim++){
+ MarkerPitching_Ampl[3*iMarker+iDim] = 0.0;
}
}
-
- if (Pitching_Omega_Y == NULL) {
- Pitching_Omega_Y = new su2double[nMoving];
- for (iZone = 0; iZone < nMoving; iZone++ )
- Pitching_Omega_Y[iZone] = 0.0;
- } else {
- if (Grid_Movement && (nPitching_Omega_Y != nGridMovement)) {
- SU2_MPI::Error("Length of PITCHING_OMEGA_Y must match GRID_MOVEMENT_KIND!!", CURRENT_FUNCTION);
}
+ if (nMarkerPitching_Ampl/3 != nMarker_Moving){
+ SU2_MPI::Error("Number of SURFACE_PITCHING_AMPL must be three times the number of MARKER_MOVING, (x,y,z) per marker.", CURRENT_FUNCTION);
}
-
- if (Pitching_Omega_Z == NULL) {
- Pitching_Omega_Z = new su2double[nMoving];
- for (iZone = 0; iZone < nMoving; iZone++ )
- Pitching_Omega_Z[iZone] = 0.0;
- } else {
- if (Grid_Movement && (nPitching_Omega_Z != nGridMovement)) {
- SU2_MPI::Error("Length of PITCHING_OMEGA_Z must match GRID_MOVEMENT_KIND!!", CURRENT_FUNCTION);
+ if (nMarkerPitching_Omega == 0){
+ nMarkerPitching_Omega = 3*nMarker_Moving;
+ MarkerPitching_Omega = new su2double[nMarkerPitching_Omega];
+ for (iMarker = 0; iMarker < nMarker_Moving; iMarker++){
+ for (iDim = 0; iDim < 3; iDim++){
+ MarkerPitching_Omega[3*iMarker+iDim] = 0.0;
}
}
-
- /*--- Pitching Amplitude: ---*/
-
- if (Pitching_Ampl_X == NULL) {
- Pitching_Ampl_X = new su2double[nMoving];
- for (iZone = 0; iZone < nMoving; iZone++ )
- Pitching_Ampl_X[iZone] = 0.0;
- } else {
- if (Grid_Movement && (nPitching_Ampl_X != nGridMovement)) {
- SU2_MPI::Error("Length of PITCHING_AMPL_X must match GRID_MOVEMENT_KIND!!", CURRENT_FUNCTION);
}
+ if (nMarkerPitching_Omega/3 != nMarker_Moving){
+ SU2_MPI::Error("Number of SURFACE_PITCHING_OMEGA must be three times the number of MARKER_MOVING, (x,y,z) per marker.", CURRENT_FUNCTION);
}
-
- if (Pitching_Ampl_Y == NULL) {
- Pitching_Ampl_Y = new su2double[nMoving];
- for (iZone = 0; iZone < nMoving; iZone++ )
- Pitching_Ampl_Y[iZone] = 0.0;
- } else {
- if (Grid_Movement && (nPitching_Ampl_Y != nGridMovement)) {
- SU2_MPI::Error("Length of PITCHING_AMPL_Y must match GRID_MOVEMENT_KIND!!", CURRENT_FUNCTION);
+ if (nMarkerPitching_Phase == 0){
+ nMarkerPitching_Phase = 3*nMarker_Moving;
+ MarkerPitching_Phase = new su2double[nMarkerPitching_Phase];
+ for (iMarker = 0; iMarker < nMarker_Moving; iMarker++){
+ for (iDim = 0; iDim < 3; iDim++){
+ MarkerPitching_Phase[3*iMarker+iDim] = 0.0;
}
}
-
- if (Pitching_Ampl_Z == NULL) {
- Pitching_Ampl_Z = new su2double[nMoving];
- for (iZone = 0; iZone < nMoving; iZone++ )
- Pitching_Ampl_Z[iZone] = 0.0;
- } else {
- if (Grid_Movement && (nPitching_Ampl_Z != nGridMovement)) {
- SU2_MPI::Error("Length of PITCHING_AMPL_Z must match GRID_MOVEMENT_KIND!!", CURRENT_FUNCTION);
}
+ if (nMarkerPitching_Phase/3 != nMarker_Moving){
+ SU2_MPI::Error("Number of SURFACE_PITCHING_PHASE must be three times the number of MARKER_MOVING, (x,y,z) per marker.", CURRENT_FUNCTION);
}
- /*--- Pitching Phase: ---*/
-
- if (Pitching_Phase_X == NULL) {
- Pitching_Phase_X = new su2double[nMoving];
- for (iZone = 0; iZone < nMoving; iZone++ )
- Pitching_Phase_X[iZone] = 0.0;
- } else {
- if (Grid_Movement && (nPitching_Phase_X != nGridMovement)) {
- SU2_MPI::Error("Length of PITCHING_PHASE_X must match GRID_MOVEMENT_KIND!!", CURRENT_FUNCTION);
+ if (nMoveMotion_Origin == 0){
+ nMoveMotion_Origin = nMarker_Moving;
+ MoveMotion_Origin = new unsigned short[nMoveMotion_Origin];
+ for (iMarker = 0; iMarker < nMarker_Moving; iMarker++){
+ MoveMotion_Origin[iMarker] = NO;
}
}
-
- if (Pitching_Phase_Y == NULL) {
- Pitching_Phase_Y = new su2double[nMoving];
- for (iZone = 0; iZone < nMoving; iZone++ )
- Pitching_Phase_Y[iZone] = 0.0;
- } else {
- if (Grid_Movement && (nPitching_Phase_Y != nGridMovement)) {
- SU2_MPI::Error("Length of PITCHING_PHASE_Y must match GRID_MOVEMENT_KIND!!", CURRENT_FUNCTION);
+ if (nMoveMotion_Origin != nMarker_Moving){
+ SU2_MPI::Error("Number of MOVE_MOTION_ORIGIN must match number of MARKER_MOVING.", CURRENT_FUNCTION);
}
}
- if (Pitching_Phase_Z == NULL) {
- Pitching_Phase_Z = new su2double[nMoving];
- for (iZone = 0; iZone < nMoving; iZone++ )
- Pitching_Phase_Z[iZone] = 0.0;
+ /*-- Setting Harmonic Balance period from the config file */
+
+ if (Unsteady_Simulation == HARMONIC_BALANCE) {
+ HarmonicBalance_Period = GetHarmonicBalance_Period();
+ if (HarmonicBalance_Period < 0) {
+ SU2_MPI::Error("Not a valid value for time period!!", CURRENT_FUNCTION);
+ }
+ /* Initialize the Harmonic balance Frequency pointer */
+ if (Omega_HB == NULL) {
+ Omega_HB = new su2double[nOmega_HB];
+ for (unsigned short iZone = 0; iZone < nOmega_HB; iZone++ )
+ Omega_HB[iZone] = 0.0;
} else {
- if (Grid_Movement && (nPitching_Phase_Z != nGridMovement)) {
- SU2_MPI::Error("Length of PITCHING_PHASE_Z must match GRID_MOVEMENT_KIND!!", CURRENT_FUNCTION);
+ if (nOmega_HB != nTimeInstances) {
+ SU2_MPI::Error("Length of omega_HB must match the number TIME_INSTANCES!!" , CURRENT_FUNCTION);
+ }
}
}
- /*--- Plunging: ---*/
-
- if (Plunging_Omega_X == NULL) {
- Plunging_Omega_X = new su2double[nMoving];
- for (iZone = 0; iZone < nMoving; iZone++ )
- Plunging_Omega_X[iZone] = 0.0;
- } else {
- if (Grid_Movement && (nPlunging_Omega_X != nGridMovement)) {
- SU2_MPI::Error("Length of PLUNGING_PHASE_X must match GRID_MOVEMENT_KIND!!", CURRENT_FUNCTION);
- }
+ /*--- Force number of span-wise section to 1 if 2D case ---*/
+ if(val_nDim ==2){
+ nSpanWiseSections_User=1;
+ Kind_SpanWise= EQUISPACED;
}
- if (Plunging_Omega_Y == NULL) {
- Plunging_Omega_Y = new su2double[nMoving];
- for (iZone = 0; iZone < nMoving; iZone++ )
- Plunging_Omega_Y[iZone] = 0.0;
+ /*--- Set number of TurboPerformance markers ---*/
+ if(nMarker_Turbomachinery > 0){
+ if(nMarker_Turbomachinery > 1){
+ nMarker_TurboPerformance = nMarker_Turbomachinery + SU2_TYPE::Int(nMarker_Turbomachinery/2) + 1;
} else {
- if (Grid_Movement && (nPlunging_Omega_Y != nGridMovement)) {
- SU2_MPI::Error("Length of PLUNGING_PHASE_Y must match GRID_MOVEMENT_KIND!!", CURRENT_FUNCTION);
+ nMarker_TurboPerformance = nMarker_Turbomachinery;
}
- }
-
- if (Plunging_Omega_Z == NULL) {
- Plunging_Omega_Z = new su2double[nMoving];
- for (iZone = 0; iZone < nMoving; iZone++ )
- Plunging_Omega_Z[iZone] = 0.0;
} else {
- if (Grid_Movement && (nPlunging_Omega_Z != nGridMovement)) {
- SU2_MPI::Error("Length of PLUNGING_PHASE_Z must match GRID_MOVEMENT_KIND!!", CURRENT_FUNCTION);
- }
+ nMarker_TurboPerformance = 0;
+ nSpanWiseSections =1;
}
- /*--- Plunging Amplitude: ---*/
+ /*--- Set number of TurboPerformance markers ---*/
+ if(nMarker_Turbomachinery != 0){
+ nSpan_iZones = new unsigned short[nZone];
+ }
- if (Plunging_Ampl_X == NULL) {
- Plunging_Ampl_X = new su2double[nMoving];
- for (iZone = 0; iZone < nMoving; iZone++ )
- Plunging_Ampl_X[iZone] = 0.0;
- } else {
- if (Grid_Movement && (nPlunging_Ampl_X != nGridMovement)) {
- SU2_MPI::Error("Length of PLUNGING_AMPL_X must match GRID_MOVEMENT_KIND!!", CURRENT_FUNCTION);
- }
+ /*--- Set number of TurboPerformance markers ---*/
+ if(GetGrid_Movement() && RampRotatingFrame && !DiscreteAdjoint){
+ FinalRotation_Rate_Z = Rotation_Rate[2];
+ if(abs(FinalRotation_Rate_Z) > 0.0){
+ Rotation_Rate[2] = RampRotatingFrame_Coeff[0];
}
- if (Plunging_Ampl_Y == NULL) {
- Plunging_Ampl_Y = new su2double[nMoving];
- for (iZone = 0; iZone < nMoving; iZone++ )
- Plunging_Ampl_Y[iZone] = 0.0;
- } else {
- if (Grid_Movement && (nPlunging_Ampl_Y != nGridMovement)) {
- SU2_MPI::Error("Length of PLUNGING_AMPL_Y must match GRID_MOVEMENT_KIND!!", CURRENT_FUNCTION);
- }
}
- if (Plunging_Ampl_Z == NULL) {
- Plunging_Ampl_Z = new su2double[nMoving];
- for (iZone = 0; iZone < nMoving; iZone++ )
- Plunging_Ampl_Z[iZone] = 0.0;
- } else {
- if (Grid_Movement && (nPlunging_Ampl_Z != nGridMovement)) {
- SU2_MPI::Error("Length of PLUNGING_AMPL_Z must match GRID_MOVEMENT_KIND!!", CURRENT_FUNCTION);
+ if(RampOutletPressure && !DiscreteAdjoint){
+ for (iMarker = 0; iMarker < nMarker_Giles; iMarker++){
+ if (Kind_Data_Giles[iMarker] == STATIC_PRESSURE || Kind_Data_Giles[iMarker] == STATIC_PRESSURE_1D || Kind_Data_Giles[iMarker] == RADIAL_EQUILIBRIUM ){
+ FinalOutletPressure = Giles_Var1[iMarker];
+ Giles_Var1[iMarker] = RampOutletPressure_Coeff[0];
}
}
-
- /*-- Setting Harmonic Balance period from the config file */
-
- if (Unsteady_Simulation == HARMONIC_BALANCE) {
- HarmonicBalance_Period = GetHarmonicBalance_Period();
- if (HarmonicBalance_Period < 0) {
- SU2_MPI::Error("Not a valid value for time period!!", CURRENT_FUNCTION);
+ for (iMarker = 0; iMarker < nMarker_Riemann; iMarker++){
+ if (Kind_Data_Riemann[iMarker] == STATIC_PRESSURE || Kind_Data_Riemann[iMarker] == RADIAL_EQUILIBRIUM){
+ FinalOutletPressure = Riemann_Var1[iMarker];
+ Riemann_Var1[iMarker] = RampOutletPressure_Coeff[0];
}
- /* Initialize the Harmonic balance Frequency pointer */
- if (Omega_HB == NULL) {
- Omega_HB = new su2double[nOmega_HB];
- for (iZone = 0; iZone < nOmega_HB; iZone++ )
- Omega_HB[iZone] = 0.0;
- }else {
- if (nOmega_HB != nTimeInstances) {
- SU2_MPI::Error("Length of omega_HB must match the number TIME_INSTANCES!!" , CURRENT_FUNCTION);
}
}
- }
+ /*--- Check on extra Relaxation factor for Giles---*/
+ if(ExtraRelFacGiles[1] > 0.5){
+ ExtraRelFacGiles[1] = 0.5;
+ }
/*--- Use the various rigid-motion input frequencies to determine the period to be used with harmonic balance cases.
There are THREE types of motion to consider, namely: rotation, pitching, and plunging.
The largest period of motion is the one to be used for harmonic balance calculations. ---*/
@@ -3506,13 +3554,13 @@ void CConfig::SetPostprocessing(unsigned short val_software, unsigned short val_
/*--- Set the boolean flag if we are carrying out an aeroelastic simulation. ---*/
- if (Grid_Movement && (Kind_GridMovement[ZONE_0] == AEROELASTIC || Kind_GridMovement[ZONE_0] == AEROELASTIC_RIGID_MOTION)) Aeroelastic_Simulation = true;
+ if (GetGrid_Movement() && (GetSurface_Movement(AEROELASTIC) || GetSurface_Movement(AEROELASTIC_RIGID_MOTION))) Aeroelastic_Simulation = true;
else Aeroelastic_Simulation = false;
/*--- Initializing the size for the solutions of the Aeroelastic problem. ---*/
- if (Grid_Movement && Aeroelastic_Simulation) {
+ if (GetGrid_Movement() && Aeroelastic_Simulation) {
Aeroelastic_np1.resize(nMarker_Monitoring);
Aeroelastic_n.resize(nMarker_Monitoring);
Aeroelastic_n1.resize(nMarker_Monitoring);
@@ -3535,7 +3583,7 @@ void CConfig::SetPostprocessing(unsigned short val_software, unsigned short val_
/*--- Allocate memory for the plunge and pitch and initialized them to zero ---*/
- if (Grid_Movement && Aeroelastic_Simulation) {
+ if (GetGrid_Movement() && Aeroelastic_Simulation) {
Aeroelastic_pitch = new su2double[nMarker_Monitoring];
Aeroelastic_plunge = new su2double[nMarker_Monitoring];
for (iMarker = 0; iMarker < nMarker_Monitoring; iMarker++ ) {
@@ -3544,19 +3592,6 @@ void CConfig::SetPostprocessing(unsigned short val_software, unsigned short val_
}
}
- /*--- Fluid-Structure Interaction problems ---*/
-
- if (FSI_Problem) {
- if ((Dynamic_Analysis == STATIC) && (Unsteady_Simulation == STEADY)) {
- Kind_GridMovement[val_izone] = FLUID_STRUCTURE_STATIC;
- Grid_Movement = false;
- }
- else{
- Kind_GridMovement[val_izone] = FLUID_STRUCTURE;
- Grid_Movement = true;
- }
- }
-
if (MGCycle == FULLMG_CYCLE) FinestMesh = nMGLevels;
else FinestMesh = MESH_0;
@@ -3900,10 +3935,10 @@ void CConfig::SetPostprocessing(unsigned short val_software, unsigned short val_
RefOriginMoment_Z[iMarker] = RefOriginMoment_Z[iMarker]/12.0;
}
- for (iMarker = 0; iMarker < nGridMovement; iMarker++) {
- Motion_Origin_X[iMarker] = Motion_Origin_X[iMarker]/12.0;
- Motion_Origin_Y[iMarker] = Motion_Origin_Y[iMarker]/12.0;
- Motion_Origin_Z[iMarker] = Motion_Origin_Z[iMarker]/12.0;
+ for (iMarker = 0; iMarker < nMarker_Moving; iMarker++){
+ for (unsigned short iDim = 0; iDim < 3; iDim++){
+ MarkerMotion_Origin[3*iMarker+iDim] /= 12.0;
+ }
}
RefLength = RefLength/12.0;
@@ -4006,7 +4041,7 @@ void CConfig::SetPostprocessing(unsigned short val_software, unsigned short val_
Restart_Flow = false;
- if (Grid_Movement) {
+ if (GetGrid_Movement()) {
SU2_MPI::Error("Dynamic mesh movement currently not supported for the discrete adjoint solver.", CURRENT_FUNCTION);
}
@@ -4228,7 +4263,7 @@ void CConfig::SetPostprocessing(unsigned short val_software, unsigned short val_
/*--- Grid motion is not yet supported with the incompressible solver. ---*/
- if ((Kind_Regime == INCOMPRESSIBLE) && (Grid_Movement)) {
+ if ((Kind_Regime == INCOMPRESSIBLE) && (GetGrid_Movement())) {
SU2_MPI::Error("Support for grid movement not yet implemented for incompressible flows.", CURRENT_FUNCTION);
}
@@ -4343,7 +4378,7 @@ void CConfig::SetMarkers(unsigned short val_software) {
unsigned short iMarker_All, iMarker_CfgFile, iMarker_Euler, iMarker_Custom,
iMarker_FarField, iMarker_SymWall, iMarker_PerBound,
- iMarker_NearFieldBound, iMarker_InterfaceBound, iMarker_Fluid_InterfaceBound, iMarker_Dirichlet,
+ iMarker_NearFieldBound, iMarker_Fluid_InterfaceBound, iMarker_Dirichlet,
iMarker_Inlet, iMarker_Riemann, iMarker_Giles, iMarker_Outlet, iMarker_Isothermal,
iMarker_HeatFlux, iMarker_EngineInflow, iMarker_EngineExhaust, iMarker_Damper,
iMarker_Displacement, iMarker_Load, iMarker_FlowLoad, iMarker_Neumann, iMarker_Internal,
@@ -4363,14 +4398,13 @@ void CConfig::SetMarkers(unsigned short val_software) {
/*--- Compute the total number of markers in the config file ---*/
nMarker_CfgFile = nMarker_Euler + nMarker_FarField + nMarker_SymWall +
- nMarker_PerBound + nMarker_NearFieldBound + nMarker_Fluid_InterfaceBound +
- nMarker_InterfaceBound + nMarker_CHTInterface + nMarker_Dirichlet + nMarker_Neumann + nMarker_Inlet + nMarker_Riemann +
+ nMarker_PerBound + nMarker_NearFieldBound + nMarker_Fluid_InterfaceBound + nMarker_CHTInterface + nMarker_Dirichlet + nMarker_Neumann + nMarker_Inlet + nMarker_Riemann +
nMarker_Giles + nMarker_Outlet + nMarker_Isothermal + nMarker_HeatFlux +
nMarker_EngineInflow + nMarker_EngineExhaust + nMarker_Internal +
nMarker_Supersonic_Inlet + nMarker_Supersonic_Outlet + nMarker_Displacement + nMarker_Load +
nMarker_FlowLoad + nMarker_Custom + nMarker_Damper +
nMarker_Clamped + nMarker_Load_Sine + nMarker_Load_Dir + nMarker_Disp_Dir +
- nMarker_ActDiskInlet + nMarker_ActDiskOutlet;
+ nMarker_ActDiskInlet + nMarker_ActDiskOutlet + nMarker_ZoneInterface;
/*--- Add the possible send/receive domains ---*/
@@ -4622,11 +4656,6 @@ void CConfig::SetMarkers(unsigned short val_software) {
iMarker_CfgFile++;
}
- for (iMarker_InterfaceBound = 0; iMarker_InterfaceBound < nMarker_InterfaceBound; iMarker_InterfaceBound++) {
- Marker_CfgFile_TagBound[iMarker_CfgFile] = Marker_InterfaceBound[iMarker_InterfaceBound];
- Marker_CfgFile_KindBC[iMarker_CfgFile] = INTERFACE_BOUNDARY;
- iMarker_CfgFile++;
- }
for (iMarker_Fluid_InterfaceBound = 0; iMarker_Fluid_InterfaceBound < nMarker_Fluid_InterfaceBound; iMarker_Fluid_InterfaceBound++) {
Marker_CfgFile_TagBound[iMarker_CfgFile] = Marker_Fluid_InterfaceBound[iMarker_Fluid_InterfaceBound];
@@ -4945,7 +4974,7 @@ void CConfig::SetOutput(unsigned short val_software, unsigned short val_izone) {
unsigned short iMarker_Euler, iMarker_Custom, iMarker_FarField,
iMarker_SymWall, iMarker_PerBound, iMarker_NearFieldBound,
- iMarker_InterfaceBound, iMarker_Fluid_InterfaceBound, iMarker_Dirichlet, iMarker_Inlet, iMarker_Riemann,
+ iMarker_Fluid_InterfaceBound, iMarker_Dirichlet, iMarker_Inlet, iMarker_Riemann,
iMarker_Giles, iMarker_Outlet, iMarker_Isothermal, iMarker_HeatFlux,
iMarker_EngineInflow, iMarker_EngineExhaust, iMarker_Displacement, iMarker_Damper,
iMarker_Load, iMarker_FlowLoad, iMarker_Neumann, iMarker_Internal, iMarker_Monitoring,
@@ -4956,72 +4985,11 @@ void CConfig::SetOutput(unsigned short val_software, unsigned short val_izone) {
bool fea = ((Kind_Solver == FEM_ELASTICITY) || (Kind_Solver == DISC_ADJ_FEM));
- /*--- WARNING: when compiling on Windows, ctime() is not available. Comment out
- the two lines below that use the dt variable. ---*/
- //time_t now = time(0);
- //string dt = ctime(&now); dt[24] = '.';
- cout << endl << "-------------------------------------------------------------------------" << endl;
- cout << "| ___ _ _ ___ |" << endl;
- cout << "| / __| | | |_ ) Release 6.2.0 \"Falcon\" |" << endl;
- cout << "| \\__ \\ |_| |/ / |" << endl;
- switch (val_software) {
- case SU2_CFD: cout << "| |___/\\___//___| Suite (Computational Fluid Dynamics Code) |" << endl; break;
- case SU2_DEF: cout << "| |___/\\___//___| Suite (Mesh Deformation Code) |" << endl; break;
- case SU2_DOT: cout << "| |___/\\___//___| Suite (Gradient Projection Code) |" << endl; break;
- case SU2_MSH: cout << "| |___/\\___//___| Suite (Mesh Adaptation Code) |" << endl; break;
- case SU2_GEO: cout << "| |___/\\___//___| Suite (Geometry Definition Code) |" << endl; break;
- case SU2_SOL: cout << "| |___/\\___//___| Suite (Solution Exporting Code) |" << endl; break;
- }
-
- cout << "| |" << endl;
- //cout << "| Local date and time: " << dt << " |" << endl;
- cout <<"-------------------------------------------------------------------------" << endl;
- cout << "| The current SU2 release has been coordinated by the |" << endl;
- cout << "| SU2 International Developers Society |" << endl;
- cout << "| with selected contributions from the open-source community. |" << endl;
- cout <<"-------------------------------------------------------------------------" << endl;
- cout << "| The main research teams contributing to the current release are: |" << endl;
- cout << "| - Prof. Juan J. Alonso's group at Stanford University. |" << endl;
- cout << "| - Prof. Piero Colonna's group at Delft University of Technology. |" << endl;
- cout << "| - Prof. Nicolas R. Gauger's group at Kaiserslautern U. of Technology. |" << endl;
- cout << "| - Prof. Alberto Guardone's group at Polytechnic University of Milan. |" << endl;
- cout << "| - Prof. Rafael Palacios' group at Imperial College London. |" << endl;
- cout << "| - Prof. Vincent Terrapon's group at the University of Liege. |" << endl;
- cout << "| - Prof. Edwin van der Weide's group at the University of Twente. |" << endl;
- cout << "| - Lab. of New Concepts in Aeronautics at Tech. Inst. of Aeronautics. |" << endl;
- cout <<"-------------------------------------------------------------------------" << endl;
- cout << "| Copyright 2012-2019, Francisco D. Palacios, Thomas D. Economon, |" << endl;
- cout << "| Tim Albring, and the SU2 contributors. |" << endl;
- cout << "| |" << endl;
- cout << "| SU2 is free software; you can redistribute it and/or |" << endl;
- cout << "| modify it under the terms of the GNU Lesser General Public |" << endl;
- cout << "| License as published by the Free Software Foundation; either |" << endl;
- cout << "| version 2.1 of the License, or (at your option) any later version. |" << endl;
- cout << "| |" << endl;
- cout << "| SU2 is distributed in the hope that it will be useful, |" << endl;
- cout << "| but WITHOUT ANY WARRANTY; without even the implied warranty of |" << endl;
- cout << "| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |" << endl;
- cout << "| Lesser General Public License for more details. |" << endl;
- cout << "| |" << endl;
- cout << "| You should have received a copy of the GNU Lesser General Public |" << endl;
- cout << "| License along with SU2. If not, see . |" << endl;
- cout <<"-------------------------------------------------------------------------" << endl;
-
- cout << endl <<"------------------------ Physical Case Definition -----------------------" << endl;
+ cout << endl <<"----------------- Physical Case Definition ( Zone " << iZone << " ) -------------------" << endl;
if (val_software == SU2_CFD) {
if (FSI_Problem) {
cout << "Fluid-Structure Interaction." << endl;
- }
-
- if (nConfig_Files != 0) {
- cout << "List of config files: ";
- for (unsigned short iConfig = 0; iConfig < nConfig_Files; iConfig++) {
- cout << Config_Filenames[iConfig];
- if (iConfig < nConfig_Files-1) cout << ", ";
- else cout <<".";
- }
- cout<< endl;
}
if (DiscreteAdjoint) {
@@ -5123,19 +5091,15 @@ void CConfig::SetOutput(unsigned short val_software, unsigned short val_izone) {
cout <<"The near-field is situated at "< 1) || (nRefOriginMoment_Y > 1) || (nRefOriginMoment_Z > 1)) {
cout << "Surface(s) where the force coefficients are evaluated and \n";
cout << "their reference origin for moment computation: \n";
@@ -5207,6 +5172,7 @@ void CConfig::SetOutput(unsigned short val_software, unsigned short val_izone) {
cout<< endl;
}
}
+ }
if (nMarker_Designing != 0) {
cout << "Surface(s) where the objective function is evaluated: ";
@@ -5268,7 +5234,7 @@ void CConfig::SetOutput(unsigned short val_software, unsigned short val_izone) {
cout<< endl;
}
- if ((Kind_GridMovement[ZONE_0] == DEFORMING) || (Kind_GridMovement[ZONE_0] == MOVING_WALL) || (Kind_GridMovement[ZONE_0] == FLUID_STRUCTURE)) {
+ if (nMarker_Moving != 0) {
cout << "Surface(s) in motion: ";
for (iMarker_Moving = 0; iMarker_Moving < nMarker_Moving; iMarker_Moving++) {
cout << Marker_Moving[iMarker_Moving];
@@ -5320,14 +5286,14 @@ void CConfig::SetOutput(unsigned short val_software, unsigned short val_izone) {
}
if (val_software == SU2_DEF) {
- cout << endl <<"---------------------- Grid deformation parameters ----------------------" << endl;
+ cout << endl <<"---------------- Grid deformation parameters ( Zone " << iZone << " ) ----------------" << endl;
cout << "Grid deformation using a linear elasticity method." << endl;
if (Hold_GridFixed == YES) cout << "Hold some regions of the mesh fixed (hardcode implementation)." << endl;
}
if (val_software == SU2_DOT) {
- cout << endl <<"-------------------- Surface deformation parameters ---------------------" << endl;
+ cout << endl <<"-------------- Surface deformation parameters ( Zone " << iZone << " ) ----------------" << endl;
}
if (((val_software == SU2_DEF) || (val_software == SU2_DOT)) && (Design_Variable[0] != NO_DEFORMATION)) {
@@ -5492,7 +5458,7 @@ void CConfig::SetOutput(unsigned short val_software, unsigned short val_izone) {
if (((val_software == SU2_CFD) && ( ContinuousAdjoint || DiscreteAdjoint)) || (val_software == SU2_DOT)) {
- cout << endl <<"----------------------- Design problem definition -----------------------" << endl;
+ cout << endl <<"---------------- Design problem definition ( Zone " << iZone << " ) ------------------" << endl;
if (nObj==1) {
switch (Kind_ObjFunc[0]) {
case DRAG_COEFFICIENT: cout << "CD objective function";
@@ -5545,7 +5511,7 @@ void CConfig::SetOutput(unsigned short val_software, unsigned short val_izone) {
}
if (val_software == SU2_CFD) {
- cout << endl <<"---------------------- Space Numerical Integration ----------------------" << endl;
+ cout << endl <<"--------------- Space Numerical Integration ( Zone " << iZone << " ) ------------------" << endl;
if (SmoothNumGrid) cout << "There are some smoothing iterations on the grid coordinates." << endl;
@@ -5812,7 +5778,7 @@ void CConfig::SetOutput(unsigned short val_software, unsigned short val_izone) {
cout << "Padded matrix size for optimal performance: " << sizeMatMulPadding << endl;
}
- cout << endl <<"---------------------- Time Numerical Integration -----------------------" << endl;
+ cout << endl <<"--------------- Time Numerical Integration ( Zone " << iZone << " ) ------------------" << endl;
if (!fea) {
switch (Unsteady_Simulation) {
@@ -6055,7 +6021,7 @@ void CConfig::SetOutput(unsigned short val_software, unsigned short val_izone) {
if (val_software == SU2_CFD) {
- cout << endl <<"------------------------- Convergence Criteria --------------------------" << endl;
+ cout << endl <<"------------------ Convergence Criteria ( Zone " << iZone << " ) ---------------------" << endl;
if (SinglezoneDriver){
cout << "Maximum number of solver subiterations: " << Iter <<"."<< endl;
@@ -6129,7 +6095,7 @@ void CConfig::SetOutput(unsigned short val_software, unsigned short val_izone) {
}
if (val_software == SU2_MSH) {
- cout << endl <<"----------------------- Grid adaptation strategy ------------------------" << endl;
+ cout << endl <<"----------------- Grid adaptation strategy ( Zone " << iZone << " ) -------------------" << endl;
switch (Kind_Adaptation) {
case NONE: break;
@@ -6159,7 +6125,7 @@ void CConfig::SetOutput(unsigned short val_software, unsigned short val_izone) {
}
- cout << endl <<"-------------------------- Output Information ---------------------------" << endl;
+ cout << endl <<"-------------------- Output Information ( Zone " << iZone << " ) ----------------------" << endl;
if (val_software == SU2_CFD) {
@@ -6275,11 +6241,11 @@ void CConfig::SetOutput(unsigned short val_software, unsigned short val_izone) {
}
}
- cout << endl <<"------------------- Config File Boundary Information --------------------" << endl;
+ cout << endl <<"------------- Config File Boundary Information ( Zone " << iZone << " ) ---------------" << endl;
PrintingToolbox::CTablePrinter BoundaryTable(&std::cout);
- BoundaryTable.AddColumn("Marker Type", 20);
- BoundaryTable.AddColumn("Marker Name", 20);
+ BoundaryTable.AddColumn("Marker Type", 35);
+ BoundaryTable.AddColumn("Marker Name", 35);
BoundaryTable.PrintHeader();
@@ -6328,15 +6294,6 @@ void CConfig::SetOutput(unsigned short val_software, unsigned short val_izone) {
BoundaryTable.PrintFooter();
}
- if (nMarker_InterfaceBound != 0) {
- BoundaryTable << "Interface boundary";
- for (iMarker_InterfaceBound = 0; iMarker_InterfaceBound < nMarker_InterfaceBound; iMarker_InterfaceBound++) {
- BoundaryTable << Marker_InterfaceBound[iMarker_InterfaceBound];
- if (iMarker_InterfaceBound < nMarker_InterfaceBound-1) BoundaryTable << " ";
- }
- BoundaryTable.PrintFooter();
- }
-
if (nMarker_Fluid_InterfaceBound != 0) {
BoundaryTable << "Fluid interface boundary";
for (iMarker_Fluid_InterfaceBound = 0; iMarker_Fluid_InterfaceBound < nMarker_Fluid_InterfaceBound; iMarker_Fluid_InterfaceBound++) {
@@ -6851,6 +6808,54 @@ int CConfig::GetMarker_ZoneInterface(string val_marker) {
}
+bool CConfig::GetSolid_Wall(unsigned short iMarker){
+
+ 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;
+}
+
+bool CConfig::GetViscous_Wall(unsigned short iMarker){
+
+ if (Marker_All_KindBC[iMarker] == HEAT_FLUX ||
+ Marker_All_KindBC[iMarker] == ISOTHERMAL ||
+ Marker_All_KindBC[iMarker] == CHT_WALL_INTERFACE){
+ return true;
+ }
+
+ return false;
+}
+
+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];
+
+ for (unsigned short iMarker_Moving = 0; iMarker_Moving < nMarker_Moving; iMarker_Moving++){
+ new_surface_movement[iMarker_Moving] = Kind_SurfaceMovement[iMarker_Moving];
+ new_marker_moving[iMarker_Moving] = Marker_Moving[iMarker_Moving];
+ }
+
+ if (nKind_SurfaceMovement > 0){
+ delete [] Marker_Moving;
+ delete [] Kind_SurfaceMovement;
+ }
+
+ Kind_SurfaceMovement = new_surface_movement;
+ Marker_Moving = new_marker_moving;
+
+ Kind_SurfaceMovement[nMarker_Moving] = kind_movement;
+ Marker_Moving[nMarker_Moving] = Marker_All_TagBound[iMarker];
+
+ nMarker_Moving++;
+ nKind_SurfaceMovement++;
+
+}
CConfig::~CConfig(void) {
unsigned long iDV, iMarker, iPeriodic, iFFD;
@@ -6870,67 +6875,48 @@ CConfig::~CConfig(void) {
/*--- Free memory for Aeroelastic problems. ---*/
- if (Grid_Movement && Aeroelastic_Simulation) {
+ if (GetGrid_Movement() && Aeroelastic_Simulation) {
if (Aeroelastic_pitch != NULL) delete[] Aeroelastic_pitch;
if (Aeroelastic_plunge != NULL) delete[] Aeroelastic_plunge;
}
-
- /*--- Free memory for unspecified grid motion parameters ---*/
-
- if (Kind_GridMovement != NULL) delete [] Kind_GridMovement;
-
+
/*--- Free memory for airfoil sections ---*/
if (LocationStations != NULL) delete [] LocationStations;
/*--- motion origin: ---*/
- if (Motion_Origin_X != NULL) delete [] Motion_Origin_X;
- if (Motion_Origin_Y != NULL) delete [] Motion_Origin_Y;
- if (Motion_Origin_Z != NULL) delete [] Motion_Origin_Z;
+ if (MarkerMotion_Origin != NULL) delete [] MarkerMotion_Origin;
+
if (MoveMotion_Origin != NULL) delete [] MoveMotion_Origin;
/*--- translation: ---*/
- if (Translation_Rate_X != NULL) delete [] Translation_Rate_X;
- if (Translation_Rate_Y != NULL) delete [] Translation_Rate_Y;
- if (Translation_Rate_Z != NULL) delete [] Translation_Rate_Z;
+ if (MarkerTranslation_Rate != NULL) delete [] MarkerTranslation_Rate;
/*--- rotation: ---*/
- if (Rotation_Rate_X != NULL) delete [] Rotation_Rate_X;
- if (Rotation_Rate_Y != NULL) delete [] Rotation_Rate_Y;
- if (Rotation_Rate_Z != NULL) delete [] Rotation_Rate_Z;
+ if (MarkerRotation_Rate != NULL) delete [] MarkerRotation_Rate;
/*--- pitching: ---*/
- if (Pitching_Omega_X != NULL) delete [] Pitching_Omega_X;
- if (Pitching_Omega_Y != NULL) delete [] Pitching_Omega_Y;
- if (Pitching_Omega_Z != NULL) delete [] Pitching_Omega_Z;
+ if (MarkerPitching_Omega != NULL) delete [] MarkerPitching_Omega;
/*--- pitching amplitude: ---*/
- if (Pitching_Ampl_X != NULL) delete [] Pitching_Ampl_X;
- if (Pitching_Ampl_Y != NULL) delete [] Pitching_Ampl_Y;
- if (Pitching_Ampl_Z != NULL) delete [] Pitching_Ampl_Z;
+ if (MarkerPitching_Ampl != NULL) delete [] MarkerPitching_Ampl;
/*--- pitching phase: ---*/
- if (Pitching_Phase_X != NULL) delete [] Pitching_Phase_X;
- if (Pitching_Phase_Y != NULL) delete [] Pitching_Phase_Y;
- if (Pitching_Phase_Z != NULL) delete [] Pitching_Phase_Z;
+ if (MarkerPitching_Phase != NULL) delete [] MarkerPitching_Phase;
/*--- plunging: ---*/
- if (Plunging_Omega_X != NULL) delete [] Plunging_Omega_X;
- if (Plunging_Omega_Y != NULL) delete [] Plunging_Omega_Y;
- if (Plunging_Omega_Z != NULL) delete [] Plunging_Omega_Z;
+ if (MarkerPlunging_Omega != NULL) delete [] MarkerPlunging_Omega;
/*--- plunging amplitude: ---*/
- if (Plunging_Ampl_X != NULL) delete [] Plunging_Ampl_X;
- if (Plunging_Ampl_Y != NULL) delete [] Plunging_Ampl_Y;
- if (Plunging_Ampl_Z != NULL) delete [] Plunging_Ampl_Z;
+ if (MarkerPlunging_Ampl != NULL) delete [] MarkerPlunging_Ampl;
/*--- reference origin for moments ---*/
@@ -7227,7 +7213,6 @@ CConfig::~CConfig(void) {
if (Marker_PerBound != NULL ) delete[] Marker_PerBound;
if (Marker_PerDonor != NULL ) delete[] Marker_PerDonor;
if (Marker_NearFieldBound != NULL ) delete[] Marker_NearFieldBound;
- if (Marker_InterfaceBound != NULL ) delete[] Marker_InterfaceBound;
if (Marker_Fluid_InterfaceBound != NULL ) delete[] Marker_Fluid_InterfaceBound;
if (Marker_Dirichlet != NULL ) delete[] Marker_Dirichlet;
if (Marker_Inlet != NULL ) delete[] Marker_Inlet;
@@ -7304,7 +7289,6 @@ CConfig::~CConfig(void) {
if (RelaxFactorAverage != NULL) delete [] RelaxFactorAverage;
if (RelaxFactorFourier != NULL) delete [] RelaxFactorFourier;
if (nSpan_iZones != NULL) delete [] nSpan_iZones;
- if (FinalRotation_Rate_Z != NULL) delete [] FinalRotation_Rate_Z;
if (Kind_TurboMachinery != NULL) delete [] Kind_TurboMachinery;
if (Marker_MixingPlaneInterface !=NULL) delete [] Marker_MixingPlaneInterface;
@@ -7865,6 +7849,35 @@ unsigned short CConfig::GetMarker_CfgFile_EngineExhaust(string val_marker) {
return kMarker_All;
}
+bool CConfig::GetVolumetric_Movement(){
+ bool volumetric_movement = false;
+
+ if (GetSurface_Movement(AEROELASTIC) ||
+ GetSurface_Movement(DEFORMING) ||
+ GetSurface_Movement(AEROELASTIC_RIGID_MOTION)||
+ GetSurface_Movement(FLUID_STRUCTURE) ||
+ GetSurface_Movement(FLUID_STRUCTURE_STATIC) ||
+ GetSurface_Movement(EXTERNAL) ||
+ GetSurface_Movement(EXTERNAL_ROTATION)){
+ volumetric_movement = true;
+ }
+
+ if (Kind_SU2 == SU2_DEF ||
+ Kind_SU2 == SU2_DOT ||
+ DirectDiff)
+ { volumetric_movement = true;}
+ return volumetric_movement;
+}
+
+bool CConfig::GetSurface_Movement(unsigned short kind_movement){
+ for (unsigned short iMarkerMoving = 0; iMarkerMoving < nKind_SurfaceMovement; iMarkerMoving++){
+ if (Kind_SurfaceMovement[iMarkerMoving] == kind_movement){
+ return true;
+ }
+ }
+ return false;
+}
+
unsigned short CConfig::GetMarker_Moving(string val_marker) {
unsigned short iMarker_Moving;
diff --git a/Common/src/fem_geometry_structure.cpp b/Common/src/fem_geometry_structure.cpp
index 936c6f9b221c..66e065ed8d8b 100644
--- a/Common/src/fem_geometry_structure.cpp
+++ b/Common/src/fem_geometry_structure.cpp
@@ -6663,83 +6663,17 @@ void CMeshFEM_DG::InitStaticMeshMovement(CConfig *config,
/*--- Make a distinction between the possibilities. ---*/
switch( Kind_Grid_Movement ) {
- case MOVING_WALL: {
-
- /*--- Loop over the physical boundaries. Skip the periodic boundaries. ---*/
- for(unsigned short i=0; iGetMarker_All_Moving(i) == YES) {
-
- /* Determine the prescribed translation velocity, rotation rate
- and rotation center. */
- const unsigned short jMarker = config->GetMarker_Moving(boundaries[i].markerTag);
- const su2double Center[] = {config->GetMotion_Origin_X(jMarker),
- config->GetMotion_Origin_Y(jMarker),
- config->GetMotion_Origin_Z(jMarker)};
- const su2double Omega[] = {config->GetRotation_Rate_X(jMarker)/Omega_Ref,
- config->GetRotation_Rate_Y(jMarker)/Omega_Ref,
- config->GetRotation_Rate_Z(jMarker)/Omega_Ref};
- const su2double vTrans[] = {config->GetTranslation_Rate_X(jMarker)/Vel_Ref,
- config->GetTranslation_Rate_Y(jMarker)/Vel_Ref,
- config->GetTranslation_Rate_Z(jMarker)/Vel_Ref};
-
- /* Easier storage of the surface elements and loop over them. */
- vector &surfElem = boundaries[i].surfElem;
-
- for(unsigned long l=0; lGetMotion_Origin_X(iZone),
- config->GetMotion_Origin_Y(iZone),
- config->GetMotion_Origin_Z(iZone)};
- const su2double Omega[] = {config->GetRotation_Rate_X(iZone)/Omega_Ref,
- config->GetRotation_Rate_Y(iZone)/Omega_Ref,
- config->GetRotation_Rate_Z(iZone)/Omega_Ref};
+ const su2double Center[] = {config->GetMotion_Origin(0),
+ config->GetMotion_Origin(1),
+ config->GetMotion_Origin(2)};
+ const su2double Omega[] = {config->GetRotation_Rate(0)/Omega_Ref,
+ config->GetRotation_Rate(1)/Omega_Ref,
+ config->GetRotation_Rate(2)/Omega_Ref};
/* Array used to store the distance to the rotation center. */
su2double dist[] = {0.0, 0.0, 0.0};
@@ -6855,9 +6789,9 @@ void CMeshFEM_DG::InitStaticMeshMovement(CConfig *config,
case STEADY_TRANSLATION: {
/* Get the translation velocity from config. */
- su2double vTrans[] = {config->GetTranslation_Rate_X(iZone)/Vel_Ref,
- config->GetTranslation_Rate_Y(iZone)/Vel_Ref,
- config->GetTranslation_Rate_Z(iZone)/Vel_Ref};
+ const su2double vTrans[] = {config->GetTranslation_Rate(0)/Vel_Ref,
+ config->GetTranslation_Rate(1)/Vel_Ref,
+ config->GetTranslation_Rate(2)/Vel_Ref};
/* Loop over the owned volume elements. */
for(unsigned long l=0; lGetSurface_Movement(MOVING_WALL)){
+ /*--- Loop over the physical boundaries. Skip the periodic boundaries. ---*/
+ for(unsigned short i=0; iGetMarker_All_Moving(i) == YES) {
+
+ /* Determine the prescribed translation velocity, rotation rate
+ and rotation center. */
+ const su2double Center[] = {config->GetMotion_Origin(0),
+ config->GetMotion_Origin(1),
+ config->GetMotion_Origin(2)};
+ const su2double Omega[] = {config->GetRotation_Rate(0)/Omega_Ref,
+ config->GetRotation_Rate(1)/Omega_Ref,
+ config->GetRotation_Rate(2)/Omega_Ref};
+ const su2double vTrans[] = {config->GetTranslation_Rate(0)/Vel_Ref,
+ config->GetTranslation_Rate(1)/Vel_Ref,
+ config->GetTranslation_Rate(2)/Vel_Ref};
+
+ /* Easier storage of the surface elements and loop over them. */
+ vector &surfElem = boundaries[i].surfElem;
+
+ for(unsigned long l=0; lGetiZone() << " ) ------------------" << endl;
if( fem_solver ) {
switch (val_format) {
@@ -7191,7 +7193,8 @@ void CPhysicalGeometry::SetBoundaries(CConfig *config) {
for (iMarker = 0; iMarker < nMarker; iMarker++) {
nElem_Bound[iMarker] = nElem_Bound_Copy[iMarker];
}
- for (iMarker = nMarker_Physical; iMarker < nMarker; iMarker++) {
+
+ for (iMarker = nMarker_Physical; iMarker < nMarker; iMarker++) {
Marker_All_SendRecv[iMarker] = Marker_All_SendRecv_Copy[iMarker];
config->SetMarker_All_SendRecv(iMarker, Marker_All_SendRecv[iMarker]);
config->SetMarker_All_TagBound(iMarker, "SEND_RECEIVE");
@@ -7265,9 +7268,7 @@ void CPhysicalGeometry::SetBoundaries(CConfig *config) {
config->GetMarker_All_KindBC(iMarker) != PERIODIC_BOUNDARY)
node[Point_Surface]->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[Point_Surface]->SetSolidBoundary(true);
if (config->GetMarker_All_KindBC(iMarker) == PERIODIC_BOUNDARY)
@@ -9026,7 +9027,7 @@ void CPhysicalGeometry::Read_SU2_Format_Parallel(CConfig *config, string val_mes
iMarker=0;
PrintingToolbox::CTablePrinter BoundaryTable(&std::cout);
BoundaryTable.AddColumn("Index", 6);
- BoundaryTable.AddColumn("Marker", 14);
+ BoundaryTable.AddColumn("Marker", 35);
BoundaryTable.AddColumn("Elements", 14);
if (rank == MASTER_NODE){
BoundaryTable.PrintHeader();
@@ -11278,9 +11279,7 @@ void CPhysicalGeometry::ComputeWall_Distance(CConfig *config) {
/* Check for a viscous wall. */
- if( (config->GetMarker_All_KindBC(iMarker) == HEAT_FLUX) ||
- (config->GetMarker_All_KindBC(iMarker) == ISOTHERMAL) ||
- (config->GetMarker_All_KindBC(iMarker) == CHT_WALL_INTERFACE)) {
+ if( config->GetViscous_Wall(iMarker)) {
/* Loop over the surface elements of this marker. */
for(unsigned long iElem=0; iElem < nElem_Bound[iMarker]; iElem++) {
@@ -13760,205 +13759,6 @@ void CPhysicalGeometry::SetMaxLength(CConfig* config) {
}
-void CPhysicalGeometry::MatchInterface(CConfig *config) {
-
- su2double epsilon = 1e-1;
-
- unsigned short nMarker_InterfaceBound = config->GetnMarker_InterfaceBound();
-
- if (nMarker_InterfaceBound != 0) {
-
- unsigned short iMarker, iDim, jMarker, pMarker = 0;
- unsigned long iVertex, iPoint, pVertex = 0, pPoint = 0, jVertex, jPoint, iPointGlobal, jPointGlobal, jVertex_, pPointGlobal = 0;
- su2double *Coord_i, Coord_j[3], dist = 0.0, mindist, maxdist_local, maxdist_global;
- int iProcessor, pProcessor = 0;
- unsigned long nLocalVertex_Interface = 0, MaxLocalVertex_Interface = 0;
- int nProcessor = size;
-
- unsigned long *Buffer_Send_nVertex = new unsigned long [1];
- unsigned long *Buffer_Receive_nVertex = new unsigned long [nProcessor];
-
- if (rank == MASTER_NODE) cout << "Set Interface boundary conditions (if any)." << endl;
-
- /*--- Compute the number of vertex that have interfase boundary condition
- without including the ghost nodes ---*/
-
- nLocalVertex_Interface = 0;
- for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++)
- if (config->GetMarker_All_KindBC(iMarker) == INTERFACE_BOUNDARY)
- for (iVertex = 0; iVertex < GetnVertex(iMarker); iVertex++) {
- iPoint = vertex[iMarker][iVertex]->GetNode();
- if (node[iPoint]->GetDomain()) nLocalVertex_Interface ++;
- }
-
- Buffer_Send_nVertex[0] = nLocalVertex_Interface;
-
- /*--- Send Interface vertex information --*/
-
-#ifndef HAVE_MPI
- MaxLocalVertex_Interface = nLocalVertex_Interface;
- Buffer_Receive_nVertex[0] = Buffer_Send_nVertex[0];
-#else
- SU2_MPI::Allreduce(&nLocalVertex_Interface, &MaxLocalVertex_Interface, 1, MPI_UNSIGNED_LONG, MPI_MAX, MPI_COMM_WORLD);
- SU2_MPI::Allgather(Buffer_Send_nVertex, 1, MPI_UNSIGNED_LONG, Buffer_Receive_nVertex, 1, MPI_UNSIGNED_LONG, MPI_COMM_WORLD);
-#endif
-
- su2double *Buffer_Send_Coord = new su2double [MaxLocalVertex_Interface*nDim];
- unsigned long *Buffer_Send_Point = new unsigned long [MaxLocalVertex_Interface];
- unsigned long *Buffer_Send_GlobalIndex = new unsigned long [MaxLocalVertex_Interface];
- unsigned long *Buffer_Send_Vertex = new unsigned long [MaxLocalVertex_Interface];
- unsigned long *Buffer_Send_Marker = new unsigned long [MaxLocalVertex_Interface];
-
- su2double *Buffer_Receive_Coord = new su2double [nProcessor*MaxLocalVertex_Interface*nDim];
- unsigned long *Buffer_Receive_Point = new unsigned long [nProcessor*MaxLocalVertex_Interface];
- unsigned long *Buffer_Receive_GlobalIndex = new unsigned long [nProcessor*MaxLocalVertex_Interface];
- unsigned long *Buffer_Receive_Vertex = new unsigned long [nProcessor*MaxLocalVertex_Interface];
- unsigned long *Buffer_Receive_Marker = new unsigned long [nProcessor*MaxLocalVertex_Interface];
-
- unsigned long nBuffer_Coord = MaxLocalVertex_Interface*nDim;
- unsigned long nBuffer_Point = MaxLocalVertex_Interface;
- unsigned long nBuffer_GlobalIndex = MaxLocalVertex_Interface;
- unsigned long nBuffer_Vertex = MaxLocalVertex_Interface;
- unsigned long nBuffer_Marker = MaxLocalVertex_Interface;
-
- for (iVertex = 0; iVertex < MaxLocalVertex_Interface; iVertex++) {
- Buffer_Send_Point[iVertex] = 0;
- Buffer_Send_GlobalIndex[iVertex] = 0;
- Buffer_Send_Vertex[iVertex] = 0;
- Buffer_Send_Marker[iVertex] = 0;
- for (iDim = 0; iDim < nDim; iDim++)
- Buffer_Send_Coord[iVertex*nDim+iDim] = 0.0;
- }
-
- /*--- Copy coordinates and point to the auxiliar vector --*/
-
- nLocalVertex_Interface = 0;
- for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++)
- if (config->GetMarker_All_KindBC(iMarker) == INTERFACE_BOUNDARY)
- for (iVertex = 0; iVertex < GetnVertex(iMarker); iVertex++) {
- iPoint = vertex[iMarker][iVertex]->GetNode();
- iPointGlobal = node[iPoint]->GetGlobalIndex();
- if (node[iPoint]->GetDomain()) {
- Buffer_Send_Point[nLocalVertex_Interface] = iPoint;
- Buffer_Send_GlobalIndex[nLocalVertex_Interface] = iPointGlobal;
- Buffer_Send_Vertex[nLocalVertex_Interface] = iVertex;
- Buffer_Send_Marker[nLocalVertex_Interface] = iMarker;
- for (iDim = 0; iDim < nDim; iDim++)
- Buffer_Send_Coord[nLocalVertex_Interface*nDim+iDim] = node[iPoint]->GetCoord(iDim);
- nLocalVertex_Interface++;
- }
- }
-
-#ifndef HAVE_MPI
- for (unsigned long iBuffer_Coord = 0; iBuffer_Coord < nBuffer_Coord; iBuffer_Coord++)
- Buffer_Receive_Coord[iBuffer_Coord] = Buffer_Send_Coord[iBuffer_Coord];
- for (unsigned long iBuffer_Point = 0; iBuffer_Point < nBuffer_Point; iBuffer_Point++)
- Buffer_Receive_Point[iBuffer_Point] = Buffer_Send_Point[iBuffer_Point];
- for (unsigned long iBuffer_GlobalIndex = 0; iBuffer_GlobalIndex < nBuffer_GlobalIndex; iBuffer_GlobalIndex++)
- Buffer_Receive_GlobalIndex[iBuffer_GlobalIndex] = Buffer_Send_GlobalIndex[iBuffer_GlobalIndex];
- for (unsigned long iBuffer_Vertex = 0; iBuffer_Vertex < nBuffer_Vertex; iBuffer_Vertex++)
- Buffer_Receive_Vertex[iBuffer_Vertex] = Buffer_Send_Vertex[iBuffer_Vertex];
- for (unsigned long iBuffer_Marker = 0; iBuffer_Marker < nBuffer_Marker; iBuffer_Marker++)
- Buffer_Receive_Marker[iBuffer_Marker] = Buffer_Send_Marker[iBuffer_Marker];
-#else
- SU2_MPI::Allgather(Buffer_Send_Coord, nBuffer_Coord, MPI_DOUBLE, Buffer_Receive_Coord, nBuffer_Coord, MPI_DOUBLE, MPI_COMM_WORLD);
- SU2_MPI::Allgather(Buffer_Send_Point, nBuffer_Point, MPI_UNSIGNED_LONG, Buffer_Receive_Point, nBuffer_Point, MPI_UNSIGNED_LONG, MPI_COMM_WORLD);
- SU2_MPI::Allgather(Buffer_Send_GlobalIndex, nBuffer_GlobalIndex, MPI_UNSIGNED_LONG, Buffer_Receive_GlobalIndex, nBuffer_GlobalIndex, MPI_UNSIGNED_LONG, MPI_COMM_WORLD);
- SU2_MPI::Allgather(Buffer_Send_Vertex, nBuffer_Vertex, MPI_UNSIGNED_LONG, Buffer_Receive_Vertex, nBuffer_Vertex, MPI_UNSIGNED_LONG, MPI_COMM_WORLD);
- SU2_MPI::Allgather(Buffer_Send_Marker, nBuffer_Marker, MPI_UNSIGNED_LONG, Buffer_Receive_Marker, nBuffer_Marker, MPI_UNSIGNED_LONG, MPI_COMM_WORLD);
-#endif
-
-
- /*--- Compute the closest point to a Near-Field boundary point ---*/
-
- maxdist_local = 0.0;
- for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) {
- if (config->GetMarker_All_KindBC(iMarker) == INTERFACE_BOUNDARY) {
-
- for (iVertex = 0; iVertex < nVertex[iMarker]; iVertex++) {
- iPoint = vertex[iMarker][iVertex]->GetNode();
- iPointGlobal = node[iPoint]->GetGlobalIndex();
-
- if (node[iPoint]->GetDomain()) {
-
- /*--- Coordinates of the boundary point ---*/
-
- Coord_i = node[iPoint]->GetCoord(); mindist = 1E6; pProcessor = 0; pPoint = 0;
-
- /*--- Loop over all the boundaries to find the pair ---*/
- for (iProcessor = 0; iProcessor < nProcessor; iProcessor++)
- for (jVertex = 0; jVertex < Buffer_Receive_nVertex[iProcessor]; jVertex++) {
- jPoint = Buffer_Receive_Point[iProcessor*MaxLocalVertex_Interface+jVertex];
- jPointGlobal = Buffer_Receive_GlobalIndex[iProcessor*MaxLocalVertex_Interface+jVertex];
- jVertex_ = Buffer_Receive_Vertex[iProcessor*MaxLocalVertex_Interface+jVertex];
- jMarker = Buffer_Receive_Marker[iProcessor*MaxLocalVertex_Interface+jVertex];
-
- if (jPointGlobal != iPointGlobal) {
-
- /*--- Compute the distance ---*/
-
- dist = 0.0; for (iDim = 0; iDim < nDim; iDim++) {
- Coord_j[iDim] = Buffer_Receive_Coord[(iProcessor*MaxLocalVertex_Interface+jVertex)*nDim+iDim];
- dist += pow(Coord_j[iDim]-Coord_i[iDim],2.0);
- } dist = sqrt(dist);
-
- if (((dist < mindist) && (iProcessor != rank)) ||
- ((dist < mindist) && (iProcessor == rank) && (jPoint != iPoint))) {
- mindist = dist; pProcessor = iProcessor; pPoint = jPoint; pPointGlobal = jPointGlobal;
- pVertex = jVertex_; pMarker = jMarker;
- if (dist == 0.0) break;
- }
- }
- }
-
- /*--- Store the value of the pair ---*/
-
- maxdist_local = max(maxdist_local, mindist);
- vertex[iMarker][iVertex]->SetDonorPoint(pPoint, pPointGlobal, pVertex, pMarker, pProcessor);
-
- if (mindist > epsilon) {
- cout.precision(10);
- cout << endl;
- cout << " Bad match for point " << iPoint << ".\tNearest";
- cout << " donor distance: " << scientific << mindist << ".";
- vertex[iMarker][iVertex]->SetDonorPoint(iPoint, iPointGlobal, pVertex, pMarker, pProcessor);
- maxdist_local = min(maxdist_local, 0.0);
- }
-
- }
- }
- }
- }
-
-#ifndef HAVE_MPI
- maxdist_global = maxdist_local;
-#else
- SU2_MPI::Reduce(&maxdist_local, &maxdist_global, 1, MPI_DOUBLE, MPI_MAX, MASTER_NODE, MPI_COMM_WORLD);
-#endif
-
- if (rank == MASTER_NODE) cout <<"The max distance between points is: " << maxdist_global <<"."<< endl;
-
- delete[] Buffer_Send_Coord;
- delete[] Buffer_Send_Point;
-
- delete[] Buffer_Receive_Coord;
- delete[] Buffer_Receive_Point;
-
- delete[] Buffer_Send_nVertex;
- delete[] Buffer_Receive_nVertex;
-
- delete [] Buffer_Send_GlobalIndex;
- delete [] Buffer_Send_Vertex;
- delete [] Buffer_Send_Marker;
-
- delete [] Buffer_Receive_GlobalIndex;
- delete [] Buffer_Receive_Vertex;
- delete [] Buffer_Receive_Marker;
-
- }
-
-}
-
void CPhysicalGeometry::MatchNearField(CConfig *config) {
su2double epsilon = 1e-1;
@@ -15796,15 +15596,15 @@ void CPhysicalGeometry::SetRotationalVelocity(CConfig *config, unsigned short va
unsigned long iPoint;
su2double RotVel[3], Distance[3], *Coord, Center[3], Omega[3], L_Ref;
+ unsigned short iDim;
/*--- Center of rotation & angular velocity vector from config ---*/
- Center[0] = config->GetMotion_Origin_X(val_iZone);
- Center[1] = config->GetMotion_Origin_Y(val_iZone);
- Center[2] = config->GetMotion_Origin_Z(val_iZone);
- Omega[0] = config->GetRotation_Rate_X(val_iZone)/config->GetOmega_Ref();
- Omega[1] = config->GetRotation_Rate_Y(val_iZone)/config->GetOmega_Ref();
- Omega[2] = config->GetRotation_Rate_Z(val_iZone)/config->GetOmega_Ref();
+ for (iDim = 0; iDim < 3; iDim++){
+ Center[iDim] = config->GetMotion_Origin(iDim);
+ Omega[iDim] = config->GetRotation_Rate(iDim)/config->GetOmega_Ref();
+ }
+
L_Ref = config->GetLength_Ref();
/*--- Print some information to the console ---*/
@@ -15878,11 +15678,9 @@ void CPhysicalGeometry::SetTranslationalVelocity(CConfig *config, unsigned short
su2double xDot[3] = {0.0,0.0,0.0};
/*--- Get the translational velocity vector from config ---*/
-
- xDot[0] = config->GetTranslation_Rate_X(val_iZone)/config->GetVelocity_Ref();
- xDot[1] = config->GetTranslation_Rate_Y(val_iZone)/config->GetVelocity_Ref();
- xDot[2] = config->GetTranslation_Rate_Z(val_iZone)/config->GetVelocity_Ref();
-
+ for (iDim = 0; iDim < 3; iDim++){
+ xDot[iDim] = config->GetTranslation_Rate(iDim)/config->GetVelocity_Ref();
+ }
/*--- Print some information to the console ---*/
if (rank == MASTER_NODE && print) {
@@ -19648,15 +19446,15 @@ void CMultiGridGeometry::SetRotationalVelocity(CConfig *config, unsigned short v
su2double *RotVel, Distance[3] = {0.0,0.0,0.0}, *Coord;
su2double Center[3] = {0.0,0.0,0.0}, Omega[3] = {0.0,0.0,0.0}, L_Ref;
RotVel = new su2double [3];
+ unsigned short iDim;
/*--- Center of rotation & angular velocity vector from config. ---*/
- Center[0] = config->GetMotion_Origin_X(val_iZone);
- Center[1] = config->GetMotion_Origin_Y(val_iZone);
- Center[2] = config->GetMotion_Origin_Z(val_iZone);
- Omega[0] = config->GetRotation_Rate_X(val_iZone)/config->GetOmega_Ref();
- Omega[1] = config->GetRotation_Rate_Y(val_iZone)/config->GetOmega_Ref();
- Omega[2] = config->GetRotation_Rate_Z(val_iZone)/config->GetOmega_Ref();
+ for (iDim = 0; iDim < 3; iDim++){
+ Center[iDim] = config->GetMotion_Origin(iDim);
+ Omega[iDim] = config->GetRotation_Rate(iDim)/config->GetOmega_Ref();
+ }
+
L_Ref = config->GetLength_Ref();
/*--- Loop over all nodes and set the rotational velocity. ---*/
@@ -19720,9 +19518,9 @@ void CMultiGridGeometry::SetTranslationalVelocity(CConfig *config, unsigned shor
/*--- Get the translational velocity vector from config ---*/
- xDot[0] = config->GetTranslation_Rate_X(val_iZone)/config->GetVelocity_Ref();
- xDot[1] = config->GetTranslation_Rate_Y(val_iZone)/config->GetVelocity_Ref();
- xDot[2] = config->GetTranslation_Rate_Z(val_iZone)/config->GetVelocity_Ref();
+ for (iDim = 0; iDim < 3; iDim++){
+ xDot[iDim] = config->GetTranslation_Rate(iDim)/config->GetVelocity_Ref();
+ }
/*--- Loop over all nodes and set the translational velocity ---*/
diff --git a/Common/src/grid_movement_structure.cpp b/Common/src/grid_movement_structure.cpp
index 2734055c89c4..e3e807630597 100644
--- a/Common/src/grid_movement_structure.cpp
+++ b/Common/src/grid_movement_structure.cpp
@@ -67,11 +67,11 @@ CVolumetricMovement::CVolumetricMovement(CGeometry *geometry, CConfig *config) :
nIterMesh = 0;
/*--- Initialize matrix, solution, and r.h.s. structures for the linear solver. ---*/
-
- LinSysSol.Initialize(nPoint, nPointDomain, nVar, 0.0);
- LinSysRes.Initialize(nPoint, nPointDomain, nVar, 0.0);
- StiffMatrix.Initialize(nPoint, nPointDomain, nVar, nVar, false, geometry, config);
-
+ if (config->GetVolumetric_Movement()){
+ LinSysSol.Initialize(nPoint, nPointDomain, nVar, 0.0);
+ LinSysRes.Initialize(nPoint, nPointDomain, nVar, 0.0);
+ StiffMatrix.Initialize(nPoint, nPointDomain, nVar, nVar, false, geometry, config);
+ }
}
CVolumetricMovement::~CVolumetricMovement(void) { }
@@ -326,13 +326,13 @@ void CVolumetricMovement::SetVolume_Deformation(CGeometry *geometry, CConfig *co
/*--- Check for failed deformation (negative volumes). ---*/
- ComputeDeforming_Element_Volume(geometry, MinVolume, MaxVolume);
+ ComputeDeforming_Element_Volume(geometry, MinVolume, MaxVolume, Screen_Output);
/*--- Set number of iterations in the mesh update. ---*/
Set_nIterMesh(Tot_Iter);
- if (rank == MASTER_NODE) {
+ if (rank == MASTER_NODE && Screen_Output) {
cout << "Non-linear iter.: " << iNonlinear_Iter+1 << "/" << Nonlinear_Iter << ". Linear iter.: " << Tot_Iter << ". ";
if (nDim == 2) cout << "Min. area: " << MinVolume << ". Error: " << Residual << "." << endl;
else cout << "Min. volume: " << MinVolume << ". Error: " << Residual << "." << endl;
@@ -343,14 +343,14 @@ void CVolumetricMovement::SetVolume_Deformation(CGeometry *geometry, CConfig *co
}
-void CVolumetricMovement::ComputeDeforming_Element_Volume(CGeometry *geometry, su2double &MinVolume, su2double &MaxVolume) {
+void CVolumetricMovement::ComputeDeforming_Element_Volume(CGeometry *geometry, su2double &MinVolume, su2double &MaxVolume, bool Screen_Output) {
unsigned long iElem, ElemCounter = 0, PointCorners[8];
su2double Volume = 0.0, CoordCorners[8][3];
unsigned short nNodes = 0, iNodes, iDim;
bool RightVol = true;
- if (rank == MASTER_NODE)
+ if (rank == MASTER_NODE && Screen_Output)
cout << "Computing volumes of the grid elements." << endl;
MaxVolume = -1E22; MinVolume = 1E22;
@@ -416,7 +416,7 @@ void CVolumetricMovement::ComputeDeforming_Element_Volume(CGeometry *geometry, s
geometry->elem[iElem]->SetVolume(Volume);
}
- if ((ElemCounter != 0) && (rank == MASTER_NODE))
+ if ((ElemCounter != 0) && (rank == MASTER_NODE) && (Screen_Output))
cout <<"There are " << ElemCounter << " elements with negative volume.\n" << endl;
}
@@ -528,6 +528,8 @@ su2double CVolumetricMovement::SetFEAMethodContributions_Elem(CGeometry *geometr
su2double **StiffMatrix_Elem = NULL, CoordCorners[8][3];
su2double MinVolume = 0.0, MaxVolume = 0.0, MinDistance = 0.0, MaxDistance = 0.0, ElemVolume = 0.0, ElemDistance = 0.0;
+ bool Screen_Output = config->GetDeform_Output();
+
/*--- Allocate maximum size (quadrilateral and hexahedron) ---*/
if (nDim == 2) StiffMatrix_nElem = 8;
@@ -539,8 +541,8 @@ su2double CVolumetricMovement::SetFEAMethodContributions_Elem(CGeometry *geometr
/*--- Compute min volume in the entire mesh. ---*/
- ComputeDeforming_Element_Volume(geometry, MinVolume, MaxVolume);
- if (rank == MASTER_NODE) cout <<"Min. volume: "<< MinVolume <<", max. volume: "<< MaxVolume <<"." << endl;
+ ComputeDeforming_Element_Volume(geometry, MinVolume, MaxVolume, Screen_Output);
+ if (rank == MASTER_NODE && Screen_Output) cout <<"Min. volume: "<< MinVolume <<", max. volume: "<< MaxVolume <<"." << endl;
/*--- Compute the distance to the nearest surface if needed
as part of the stiffness calculation.. ---*/
@@ -548,7 +550,7 @@ su2double CVolumetricMovement::SetFEAMethodContributions_Elem(CGeometry *geometr
if ((config->GetDeform_Stiffness_Type() == SOLID_WALL_DISTANCE) ||
(config->GetDeform_Limit() < 1E6)) {
ComputeSolid_Wall_Distance(geometry, config, MinDistance, MaxDistance);
- if (rank == MASTER_NODE) cout <<"Min. distance: "<< MinDistance <<", max. distance: "<< MaxDistance <<"." << endl;
+ if (rank == MASTER_NODE && Screen_Output) cout <<"Min. distance: "<< MinDistance <<", max. distance: "<< MaxDistance <<"." << endl;
}
/*--- Compute contributions from each element by forming the stiffness matrix (FEA) ---*/
@@ -1910,11 +1912,6 @@ void CVolumetricMovement::Rigid_Rotation(CGeometry *geometry, CConfig *config,
dt = config->GetDelta_UnstTimeND();
Lref = config->GetLength_Ref();
- /*--- For harmonic balance, motion is the same in each zone (at each instance).
- * This is used for calls to the config container ---*/
- if (harmonic_balance)
- iZone = ZONE_0;
-
/*--- For the unsteady adjoint, use reverse time ---*/
if (adjoint) {
/*--- Set the first adjoint mesh position to the final direct one ---*/
@@ -1928,12 +1925,10 @@ void CVolumetricMovement::Rigid_Rotation(CGeometry *geometry, CConfig *config,
/*--- Center of rotation & angular velocity vector from config ---*/
- Center[0] = config->GetMotion_Origin_X(iZone);
- Center[1] = config->GetMotion_Origin_Y(iZone);
- Center[2] = config->GetMotion_Origin_Z(iZone);
- Omega[0] = (config->GetRotation_Rate_X(iZone)/config->GetOmega_Ref());
- Omega[1] = (config->GetRotation_Rate_Y(iZone)/config->GetOmega_Ref());
- Omega[2] = (config->GetRotation_Rate_Z(iZone)/config->GetOmega_Ref());
+ for (iDim = 0; iDim < 3; iDim++){
+ Center[iDim] = config->GetMotion_Origin(iDim);
+ Omega[iDim] = config->GetRotation_Rate(iDim)/config->GetOmega_Ref();
+ }
/*-- Set dt for harmonic balance cases ---*/
if (harmonic_balance) {
@@ -2005,7 +2000,7 @@ void CVolumetricMovement::Rigid_Rotation(CGeometry *geometry, CConfig *config,
newGridVel[0] = GridVel[0] + Omega[1]*rotCoord[2] - Omega[2]*rotCoord[1];
newGridVel[1] = GridVel[1] + Omega[2]*rotCoord[0] - Omega[0]*rotCoord[2];
- newGridVel[2] = GridVel[2] + Omega[0]*rotCoord[1] - Omega[1]*rotCoord[0];
+ if (nDim == 3) newGridVel[2] = GridVel[2] + Omega[0]*rotCoord[1] - Omega[1]*rotCoord[0];
/*--- Store new node location & grid velocity. Add center.
Do not store the grid velocity if this is an adjoint calculation.---*/
@@ -2079,24 +2074,15 @@ void CVolumetricMovement::Rigid_Pitching(CGeometry *geometry, CConfig *config, u
deltaT = config->GetDelta_UnstTimeND();
Lref = config->GetLength_Ref();
- /*--- For harmonic balance, motion is the same in each zone (at each instance). ---*/
- if (harmonic_balance) {
- iZone = ZONE_0;
- }
-
- /*--- Pitching origin, frequency, and amplitude from config. ---*/
- Center[0] = config->GetMotion_Origin_X(iZone);
- Center[1] = config->GetMotion_Origin_Y(iZone);
- Center[2] = config->GetMotion_Origin_Z(iZone);
- Omega[0] = (config->GetPitching_Omega_X(iZone)/config->GetOmega_Ref());
- Omega[1] = (config->GetPitching_Omega_Y(iZone)/config->GetOmega_Ref());
- Omega[2] = (config->GetPitching_Omega_Z(iZone)/config->GetOmega_Ref());
- Ampl[0] = config->GetPitching_Ampl_X(iZone)*DEG2RAD;
- Ampl[1] = config->GetPitching_Ampl_Y(iZone)*DEG2RAD;
- Ampl[2] = config->GetPitching_Ampl_Z(iZone)*DEG2RAD;
- Phase[0] = config->GetPitching_Phase_X(iZone)*DEG2RAD;
- Phase[1] = config->GetPitching_Phase_Y(iZone)*DEG2RAD;
- Phase[2] = config->GetPitching_Phase_Z(iZone)*DEG2RAD;
+ /*--- Pitching origin, frequency, and amplitude from config. ---*/
+
+ for (iDim = 0; iDim < 3; iDim++){
+ Center[iDim] = config->GetMotion_Origin(iDim);
+ Omega[iDim] = config->GetPitching_Omega(iDim)/config->GetOmega_Ref();
+ Ampl[iDim] = config->GetPitching_Ampl(iDim)*DEG2RAD;
+ Phase[iDim] = config->GetPitching_Phase(iDim)*DEG2RAD;
+ }
+
if (harmonic_balance) {
/*--- period of oscillation & compute time interval using nTimeInstances ---*/
@@ -2200,7 +2186,7 @@ void CVolumetricMovement::Rigid_Pitching(CGeometry *geometry, CConfig *config, u
newGridVel[0] = GridVel[0] + alphaDot[1]*rotCoord[2] - alphaDot[2]*rotCoord[1];
newGridVel[1] = GridVel[1] + alphaDot[2]*rotCoord[0] - alphaDot[0]*rotCoord[2];
- newGridVel[2] = GridVel[2] + alphaDot[0]*rotCoord[1] - alphaDot[1]*rotCoord[0];
+ if (nDim == 3) newGridVel[2] = GridVel[2] + alphaDot[0]*rotCoord[1] - alphaDot[1]*rotCoord[0];
/*--- Store new node location & grid velocity. Add center location.
Do not store the grid velocity if this is an adjoint calculation.---*/
@@ -2223,7 +2209,7 @@ void CVolumetricMovement::Rigid_Plunging(CGeometry *geometry, CConfig *config, u
/*--- Local variables ---*/
su2double deltaX[3], newCoord[3], Center[3], *Coord, Omega[3], Ampl[3], Lref;
- su2double *GridVel, newGridVel[3], xDot[3];
+ su2double *GridVel, newGridVel[3] = {0.0, 0.0, 0.0}, xDot[3];
su2double deltaT, time_new, time_old;
unsigned short iDim, nDim = geometry->GetnDim();
unsigned long iPoint;
@@ -2235,21 +2221,13 @@ void CVolumetricMovement::Rigid_Plunging(CGeometry *geometry, CConfig *config, u
deltaT = config->GetDelta_UnstTimeND();
Lref = config->GetLength_Ref();
- /*--- For harmonic balance, motion is the same in each zone (at each instance). ---*/
- if (harmonic_balance) {
- iZone = ZONE_0;
+ for (iDim = 0; iDim < 3; iDim++){
+ Center[iDim] = config->GetMotion_Origin(iDim);
+ Omega[iDim] = config->GetPlunging_Omega(iDim)/config->GetOmega_Ref();
+ Ampl[iDim] = config->GetPlunging_Ampl(iDim)/Lref;
}
/*--- Plunging frequency and amplitude from config. ---*/
- Center[0] = config->GetMotion_Origin_X(iZone);
- Center[1] = config->GetMotion_Origin_Y(iZone);
- Center[2] = config->GetMotion_Origin_Z(iZone);
- Omega[0] = (config->GetPlunging_Omega_X(iZone)/config->GetOmega_Ref());
- Omega[1] = (config->GetPlunging_Omega_Y(iZone)/config->GetOmega_Ref());
- Omega[2] = (config->GetPlunging_Omega_Z(iZone)/config->GetOmega_Ref());
- Ampl[0] = config->GetPlunging_Ampl_X(iZone)/Lref;
- Ampl[1] = config->GetPlunging_Ampl_Y(iZone)/Lref;
- Ampl[2] = config->GetPlunging_Ampl_Z(iZone)/Lref;
if (harmonic_balance) {
/*--- period of oscillation & time interval using nTimeInstances ---*/
@@ -2313,7 +2291,7 @@ void CVolumetricMovement::Rigid_Plunging(CGeometry *geometry, CConfig *config, u
newGridVel[0] = GridVel[0] + xDot[0];
newGridVel[1] = GridVel[1] + xDot[1];
- newGridVel[2] = GridVel[2] + xDot[2];
+ if (nDim == 3) newGridVel[2] = GridVel[2] + xDot[2];
/*--- Store new node location & grid velocity. Do not store the grid
velocity if this is an adjoint calculation. ---*/
@@ -2328,9 +2306,10 @@ void CVolumetricMovement::Rigid_Plunging(CGeometry *geometry, CConfig *config, u
incrementing the position with the rigid translation. This
new location will be used for subsequent pitching/rotation.---*/
- config->SetMotion_Origin_X(iZone, Center[0]+deltaX[0]);
- config->SetMotion_Origin_Y(iZone, Center[1]+deltaX[1]);
- config->SetMotion_Origin_Z(iZone, Center[2]+deltaX[2]);
+ for (iDim = 0; iDim < 3; iDim++){
+ Center[iDim] = config->GetMotion_Origin(iDim) + deltaX[iDim];
+ }
+ config->SetMotion_Origin(Center);
/*--- As the body origin may have moved, print it to the console ---*/
@@ -2373,18 +2352,12 @@ void CVolumetricMovement::Rigid_Translation(CGeometry *geometry, CConfig *config
/*--- Retrieve values from the config file ---*/
deltaT = config->GetDelta_UnstTimeND();
- /*--- For harmonic balance, motion is the same in each zone (at each instance). ---*/
- if (harmonic_balance) {
- iZone = ZONE_0;
- }
-
/*--- Get motion center and translation rates from config ---*/
- Center[0] = config->GetMotion_Origin_X(iZone);
- Center[1] = config->GetMotion_Origin_Y(iZone);
- Center[2] = config->GetMotion_Origin_Z(iZone);
- xDot[0] = config->GetTranslation_Rate_X(iZone);
- xDot[1] = config->GetTranslation_Rate_Y(iZone);
- xDot[2] = config->GetTranslation_Rate_Z(iZone);
+
+ for (iDim = 0; iDim < 3; iDim++){
+ Center[iDim] = config->GetMotion_Origin(iDim);
+ xDot[iDim] = config->GetTranslation_Rate(iDim);
+ }
if (harmonic_balance) {
/*--- period of oscillation & time interval using nTimeInstances ---*/
@@ -2452,9 +2425,11 @@ void CVolumetricMovement::Rigid_Translation(CGeometry *geometry, CConfig *config
incrementing the position with the rigid translation. This
new location will be used for subsequent pitching/rotation.---*/
- config->SetMotion_Origin_X(iZone, Center[0]+deltaX[0]);
- config->SetMotion_Origin_Y(iZone, Center[1]+deltaX[1]);
- config->SetMotion_Origin_Z(iZone, Center[2]+deltaX[2]);
+ for (iDim = 0; iDim < 3; iDim++){
+ Center[iDim] = config->GetMotion_Origin(iDim) + deltaX[iDim];
+ }
+ config->SetMotion_Origin(Center);
+
/*--- Set the moment computation center to the new location after
incrementing the position with the translation. ---*/
@@ -5656,15 +5631,12 @@ void CSurfaceMovement::Moving_Walls(CGeometry *geometry, CConfig *config,
/*--- Get prescribed wall speed from config for this marker ---*/
- Center[0] = config->GetMotion_Origin_X(jMarker);
- Center[1] = config->GetMotion_Origin_Y(jMarker);
- Center[2] = config->GetMotion_Origin_Z(jMarker);
- Omega[0] = config->GetRotation_Rate_X(jMarker)/Omega_Ref;
- Omega[1] = config->GetRotation_Rate_Y(jMarker)/Omega_Ref;
- Omega[2] = config->GetRotation_Rate_Z(jMarker)/Omega_Ref;
- xDot[0] = config->GetTranslation_Rate_X(jMarker)/Vel_Ref;
- xDot[1] = config->GetTranslation_Rate_Y(jMarker)/Vel_Ref;
- xDot[2] = config->GetTranslation_Rate_Z(jMarker)/Vel_Ref;
+ for (iDim = 0; iDim < 3; iDim++){
+ Center[iDim] = config->GetMarkerMotion_Origin(jMarker, iDim);
+ Omega[iDim] = config->GetMarkerRotationRate(jMarker, iDim)/Omega_Ref;
+ xDot[iDim] = config->GetMarkerTranslationRate(jMarker, iDim)/Vel_Ref;
+ }
+
if (rank == MASTER_NODE && iter == 0) {
cout << " Storing grid velocity for marker: ";
@@ -5717,6 +5689,7 @@ void CSurfaceMovement::Surface_Translating(CGeometry *geometry, CConfig *config,
unsigned short iMarker, jMarker, Moving;
unsigned long iVertex;
string Marker_Tag, Moving_Tag;
+ unsigned short iDim;
/*--- Initialize the delta variation in coordinates ---*/
VarCoord[0] = 0.0; VarCoord[1] = 0.0; VarCoord[2] = 0.0;
@@ -5744,13 +5717,12 @@ void CSurfaceMovement::Surface_Translating(CGeometry *geometry, CConfig *config,
Moving_Tag = config->GetMarker_Moving_TagBound(jMarker);
Marker_Tag = config->GetMarker_All_TagBound(iMarker);
- if (Marker_Tag == Moving_Tag) {
+ if (Marker_Tag == Moving_Tag && (config->GetKind_SurfaceMovement(jMarker) == DEFORMING)) {
- /*--- Translation velocity from config. ---*/
-
- xDot[0] = config->GetTranslation_Rate_X(jMarker);
- xDot[1] = config->GetTranslation_Rate_Y(jMarker);
- xDot[2] = config->GetTranslation_Rate_Z(jMarker);
+ for (iDim = 0; iDim < 3; iDim++){
+ xDot[iDim] = config->GetMarkerTranslationRate(jMarker, iDim);
+ Center[iDim] = config->GetMarkerMotion_Origin(jMarker, iDim);
+ }
/*--- Print some information to the console. Be verbose at the first
iteration only (mostly for debugging purposes). ---*/
@@ -5796,12 +5768,10 @@ void CSurfaceMovement::Surface_Translating(CGeometry *geometry, CConfig *config,
/*-- Check if we want to update the motion origin for the given marker ---*/
if (config->GetMoveMotion_Origin(jMarker) == YES) {
- Center[0] = config->GetMotion_Origin_X(jMarker) + VarCoord[0];
- Center[1] = config->GetMotion_Origin_Y(jMarker) + VarCoord[1];
- Center[2] = config->GetMotion_Origin_Z(jMarker) + VarCoord[2];
- config->SetMotion_Origin_X(jMarker, Center[0]);
- config->SetMotion_Origin_Y(jMarker, Center[1]);
- config->SetMotion_Origin_Z(jMarker, Center[2]);
+ for (iDim = 0; iDim < 3; iDim++){
+ Center[iDim] += VarCoord[iDim];
+ }
+ config->SetMarkerMotion_Origin(Center, jMarker);
}
}
@@ -5822,11 +5792,12 @@ void CSurfaceMovement::Surface_Plunging(CGeometry *geometry, CConfig *config,
unsigned long iter, unsigned short iZone) {
su2double deltaT, time_new, time_old, Lref;
- su2double Center[3], VarCoord[3], Omega[3], Ampl[3];
+ su2double Center[3] = {0.0, 0.0, 0.0}, VarCoord[3], Omega[3], Ampl[3];
su2double DEG2RAD = PI_NUMBER/180.0;
unsigned short iMarker, jMarker, Moving;
unsigned long iVertex;
string Marker_Tag, Moving_Tag;
+ unsigned short iDim;
/*--- Initialize the delta variation in coordinates ---*/
VarCoord[0] = 0.0; VarCoord[1] = 0.0; VarCoord[2] = 0.0;
@@ -5855,17 +5826,15 @@ void CSurfaceMovement::Surface_Plunging(CGeometry *geometry, CConfig *config,
Moving_Tag = config->GetMarker_Moving_TagBound(jMarker);
Marker_Tag = config->GetMarker_All_TagBound(iMarker);
- if (Marker_Tag == Moving_Tag) {
+ if (Marker_Tag == Moving_Tag && (config->GetKind_SurfaceMovement(jMarker) == DEFORMING)) {
/*--- Plunging frequency and amplitude from config. ---*/
- Omega[0] = config->GetPlunging_Omega_X(jMarker)/config->GetOmega_Ref();
- Omega[1] = config->GetPlunging_Omega_Y(jMarker)/config->GetOmega_Ref();
- Omega[2] = config->GetPlunging_Omega_Z(jMarker)/config->GetOmega_Ref();
- Ampl[0] = config->GetPlunging_Ampl_X(jMarker)/Lref;
- Ampl[1] = config->GetPlunging_Ampl_Y(jMarker)/Lref;
- Ampl[2] = config->GetPlunging_Ampl_Z(jMarker)/Lref;
-
+ for (iDim = 0; iDim < 3; iDim++){
+ Ampl[iDim] = config->GetMarkerPlunging_Ampl(jMarker, iDim)/Lref;
+ Omega[iDim] = config->GetMarkerPlunging_Omega(jMarker, iDim)/config->GetOmega_Ref();
+ Center[iDim] = config->GetMarkerMotion_Origin(jMarker, iDim);
+ }
/*--- Print some information to the console. Be verbose at the first
iteration only (mostly for debugging purposes). ---*/
// Note that the MASTER_NODE might not contain all the markers being moved.
@@ -5911,12 +5880,10 @@ void CSurfaceMovement::Surface_Plunging(CGeometry *geometry, CConfig *config,
/*-- Check if we want to update the motion origin for the given marker ---*/
if (config->GetMoveMotion_Origin(jMarker) == YES) {
- Center[0] = config->GetMotion_Origin_X(jMarker) + VarCoord[0];
- Center[1] = config->GetMotion_Origin_Y(jMarker) + VarCoord[1];
- Center[2] = config->GetMotion_Origin_Z(jMarker) + VarCoord[2];
- config->SetMotion_Origin_X(jMarker, Center[0]);
- config->SetMotion_Origin_Y(jMarker, Center[1]);
- config->SetMotion_Origin_Z(jMarker, Center[2]);
+ for (iDim = 0; iDim < 3; iDim++){
+ Center[iDim] += VarCoord[iDim];
+ }
+ config->SetMarkerMotion_Origin(Center, jMarker);
}
}
@@ -5974,23 +5941,16 @@ void CSurfaceMovement::Surface_Pitching(CGeometry *geometry, CConfig *config,
Moving_Tag = config->GetMarker_Moving_TagBound(jMarker);
Marker_Tag = config->GetMarker_All_TagBound(iMarker);
- if (Marker_Tag == Moving_Tag) {
+ if (Marker_Tag == Moving_Tag && (config->GetKind_SurfaceMovement(jMarker) == DEFORMING)) {
/*--- Pitching origin, frequency, and amplitude from config. ---*/
- Center[0] = config->GetMotion_Origin_X(jMarker);
- Center[1] = config->GetMotion_Origin_Y(jMarker);
- Center[2] = config->GetMotion_Origin_Z(jMarker);
- Omega[0] = config->GetPitching_Omega_X(jMarker)/config->GetOmega_Ref();
- Omega[1] = config->GetPitching_Omega_Y(jMarker)/config->GetOmega_Ref();
- Omega[2] = config->GetPitching_Omega_Z(jMarker)/config->GetOmega_Ref();
- Ampl[0] = config->GetPitching_Ampl_X(jMarker)*DEG2RAD;
- Ampl[1] = config->GetPitching_Ampl_Y(jMarker)*DEG2RAD;
- Ampl[2] = config->GetPitching_Ampl_Z(jMarker)*DEG2RAD;
- Phase[0] = config->GetPitching_Phase_X(jMarker)*DEG2RAD;
- Phase[1] = config->GetPitching_Phase_Y(jMarker)*DEG2RAD;
- Phase[2] = config->GetPitching_Phase_Z(jMarker)*DEG2RAD;
-
+ for (iDim = 0; iDim < 3; iDim++){
+ Ampl[iDim] = config->GetMarkerPitching_Ampl(jMarker, iDim)*DEG2RAD;
+ Omega[iDim] = config->GetMarkerPitching_Omega(jMarker, iDim)/config->GetOmega_Ref();
+ Phase[iDim] = config->GetMarkerPitching_Phase(jMarker, iDim)*DEG2RAD;
+ Center[iDim] = config->GetMarkerMotion_Origin(jMarker, iDim);
+ }
/*--- Print some information to the console. Be verbose at the first
iteration only (mostly for debugging purposes). ---*/
// Note that the MASTER_NODE might not contain all the markers being moved.
@@ -6123,17 +6083,14 @@ void CSurfaceMovement::Surface_Rotating(CGeometry *geometry, CConfig *config,
Moving_Tag = config->GetMarker_Moving_TagBound(jMarker);
Marker_Tag = config->GetMarker_All_TagBound(iMarker);
- if (Marker_Tag == Moving_Tag) {
+ if (Marker_Tag == Moving_Tag && (config->GetKind_SurfaceMovement(jMarker) == DEFORMING)) {
/*--- Rotation origin and angular velocity from config. ---*/
- Center[0] = config->GetMotion_Origin_X(jMarker);
- Center[1] = config->GetMotion_Origin_Y(jMarker);
- Center[2] = config->GetMotion_Origin_Z(jMarker);
- Omega[0] = config->GetRotation_Rate_X(jMarker)/config->GetOmega_Ref();
- Omega[1] = config->GetRotation_Rate_Y(jMarker)/config->GetOmega_Ref();
- Omega[2] = config->GetRotation_Rate_Z(jMarker)/config->GetOmega_Ref();
-
+ for (iDim = 0; iDim < 3; iDim++){
+ Omega[iDim] = config->GetMarkerRotationRate(jMarker, iDim)/config->GetOmega_Ref();
+ Center[iDim] = config->GetMarkerMotion_Origin(jMarker, iDim);
+ }
/*--- Print some information to the console. Be verbose at the first
iteration only (mostly for debugging purposes). ---*/
// Note that the MASTER_NODE might not contain all the markers being moved.
@@ -6228,9 +6185,9 @@ void CSurfaceMovement::Surface_Rotating(CGeometry *geometry, CConfig *config,
if (config->GetMoveMotion_Origin(jMarker) == YES) {
- Center_Aux[0] = config->GetMotion_Origin_X(jMarker);
- Center_Aux[1] = config->GetMotion_Origin_Y(jMarker);
- Center_Aux[2] = config->GetMotion_Origin_Z(jMarker);
+ for (iDim = 0; iDim < 3; iDim++){
+ Center_Aux[iDim] = config->GetMarkerMotion_Origin(jMarker, iDim);
+ }
/*--- Calculate non-dim. position from rotation center ---*/
@@ -6256,9 +6213,11 @@ void CSurfaceMovement::Surface_Rotating(CGeometry *geometry, CConfig *config,
for (iDim = 0; iDim < nDim; iDim++)
VarCoord[iDim] = (rotCoord[iDim]-Center_Aux[iDim])/Lref;
if (nDim == 2) VarCoord[nDim] = 0.0;
- config->SetMotion_Origin_X(jMarker, Center_Aux[0]+VarCoord[0]);
- config->SetMotion_Origin_Y(jMarker, Center_Aux[1]+VarCoord[1]);
- config->SetMotion_Origin_Z(jMarker, Center_Aux[2]+VarCoord[2]);
+
+ for (iDim = 0; iDim < 3; iDim++){
+ Center_Aux[iDim] += VarCoord[iDim];
+ }
+ config->SetMarkerMotion_Origin(Center_Aux, jMarker);
}
}
@@ -6318,10 +6277,10 @@ void CSurfaceMovement::AeroelasticDeform(CGeometry *geometry, CConfig *config, u
string Monitoring_Tag = config->GetMarker_Monitoring_TagBound(iMarker_Monitoring);
/*--- Calculate the plunge displacement for the Typical Section Wing Model taking into account rotation ---*/
- if (config->GetKind_GridMovement(ZONE_0) == AEROELASTIC_RIGID_MOTION) {
+ if (config->GetKind_GridMovement() == AEROELASTIC_RIGID_MOTION) {
su2double Omega, dt, psi;
dt = config->GetDelta_UnstTimeND();
- Omega = (config->GetRotation_Rate_Z(ZONE_0)/config->GetOmega_Ref());
+ Omega = (config->GetRotation_Rate(3)/config->GetOmega_Ref());
psi = Omega*(dt*ExtIter);
/*--- Correct for the airfoil starting position (This is hardcoded in here) ---*/
@@ -6389,6 +6348,7 @@ void CSurfaceMovement::SetBoundary_Flutter3D(CGeometry *geometry, CConfig *confi
su2double Omega[3], Ampl[3];
su2double DEG2RAD = PI_NUMBER/180.0;
bool adjoint = config->GetContinuous_Adjoint();
+ unsigned short iDim = 0;
/*--- Retrieve values from the config file ---*/
@@ -6396,12 +6356,10 @@ void CSurfaceMovement::SetBoundary_Flutter3D(CGeometry *geometry, CConfig *confi
/*--- Pitching origin, frequency, and amplitude from config. ---*/
- Omega[0] = (config->GetPitching_Omega_X(iZone)/config->GetOmega_Ref());
- Omega[1] = (config->GetPitching_Omega_Y(iZone)/config->GetOmega_Ref());
- Omega[2] = (config->GetPitching_Omega_Z(iZone)/config->GetOmega_Ref());
- Ampl[0] = config->GetPitching_Ampl_X(iZone)*DEG2RAD;
- Ampl[1] = config->GetPitching_Ampl_Y(iZone)*DEG2RAD;
- Ampl[2] = config->GetPitching_Ampl_Z(iZone)*DEG2RAD;
+ for (iDim = 0; iDim < 3; iDim++){
+ Omega[iDim] = config->GetPitching_Omega(iDim)/config->GetOmega_Ref();
+ Ampl[iDim] = config->GetPitching_Ampl(iDim)*DEG2RAD;
+ }
/*--- Compute delta time based on physical time step ---*/
@@ -6562,8 +6520,7 @@ void CSurfaceMovement::SetExternal_Deformation(CGeometry *geometry, CConfig *con
/*--- If rotating as well, prepare the rotation matrix ---*/
- if (config->GetGrid_Movement() &&
- config->GetKind_GridMovement(iZone) == EXTERNAL_ROTATION) {
+ if (config->GetKind_GridMovement() == EXTERNAL_ROTATION) {
/*--- Variables needed only for rotation ---*/
@@ -6572,16 +6529,16 @@ void CSurfaceMovement::SetExternal_Deformation(CGeometry *geometry, CConfig *con
su2double cosPhi, sinPhi, cosPsi, sinPsi;
/*--- Center of rotation & angular velocity vector from config ---*/
- Center[0] = config->GetMotion_Origin_X(iZone);
- Center[1] = config->GetMotion_Origin_Y(iZone);
- Center[2] = config->GetMotion_Origin_Z(iZone);
+ Center[0] = config->GetMotion_Origin(0);
+ Center[1] = config->GetMotion_Origin(1);
+ Center[2] = config->GetMotion_Origin(2);
/*--- Angular velocity vector from config ---*/
dt = static_cast(iter)*config->GetDelta_UnstTimeND();
- Omega[0] = config->GetRotation_Rate_X(iZone);
- Omega[1] = config->GetRotation_Rate_Y(iZone);
- Omega[2] = config->GetRotation_Rate_Z(iZone);
+ Omega[0] = config->GetRotation_Rate(0);
+ Omega[1] = config->GetRotation_Rate(1);
+ Omega[2] = config->GetRotation_Rate(2);
/*--- For the unsteady adjoint, use reverse time ---*/
if (adjoint) {
@@ -6642,8 +6599,7 @@ void CSurfaceMovement::SetExternal_Deformation(CGeometry *geometry, CConfig *con
rotation matrix. It is assumed that the coordinates in
Coord_Old have already been rotated using SetRigid_Rotation(). ---*/
- if (config->GetGrid_Movement() &&
- config->GetKind_GridMovement(iZone) == EXTERNAL_ROTATION) {
+ if (config->GetKind_GridMovement() == EXTERNAL_ROTATION) {
/*--- Calculate non-dim. position from rotation center ---*/
@@ -8469,7 +8425,7 @@ void CFreeFormDefBox::SetCGNS(CGeometry *geometry, unsigned short iFFDBox, bool
char zonename[33];
int FFDBox_cgns_file;
int cell_dim, phys_dim;
- int cgns_base, cgns_family, cgns_zone, cgns_err, dummy;
+ int cgns_base=0, cgns_family, cgns_zone, cgns_err, dummy;
const char * basename;
/*--- FFD output is always 3D (even in 2D problems),
@@ -9149,6 +9105,9 @@ su2double CFreeFormDefBox::GetDerivative5(su2double *uvw, unsigned short dim, un
CElasticityMovement::CElasticityMovement(CGeometry *geometry, CConfig *config) : CVolumetricMovement(), System(true) {
+
+ size = SU2_MPI::GetSize();
+ rank = SU2_MPI::GetRank();
/*--- Initialize the number of spatial dimensions, length of the state
vector (same as spatial dimensions for grid deformation), and grid nodes. ---*/
@@ -9321,7 +9280,7 @@ CElasticityMovement::~CElasticityMovement(void) {
}
-void CElasticityMovement::SetVolume_Deformation_Elas(CGeometry *geometry, CConfig *config, bool UpdateGeo, bool Derivative){
+void CElasticityMovement::SetVolume_Deformation_Elas(CGeometry *geometry, CConfig *config, bool UpdateGeo, bool screen_output, bool Derivative){
unsigned long iNonlinear_Iter, Nonlinear_Iter = 0;
@@ -9340,10 +9299,13 @@ void CElasticityMovement::SetVolume_Deformation_Elas(CGeometry *geometry, CConfi
LinSysSol.SetValZero();
LinSysRes.SetValZero();
StiffMatrix.SetValZero();
+
+ if ((rank == MASTER_NODE) && (!discrete_adjoint) && screen_output)
+ cout << "Computing volumes of the grid elements." << endl;
/*--- Compute the minimum and maximum area/volume for the mesh. ---*/
SetMinMaxVolume(geometry, config);
- if ((rank == MASTER_NODE) && (!discrete_adjoint)) {
+ if ((rank == MASTER_NODE) && (!discrete_adjoint) && screen_output) {
if (nDim == 2) cout << scientific << "Min. area: "<< MinVolume <<", max. area: " << MaxVolume <<"." << endl;
else cout << scientific << "Min. volume: "<< MinVolume <<", max. volume: " << MaxVolume <<"." << endl;
}
@@ -9386,7 +9348,7 @@ void CElasticityMovement::SetVolume_Deformation_Elas(CGeometry *geometry, CConfi
/*--- In order to do this, we recompute the minimum and maximum area/volume for the mesh. ---*/
SetMinMaxVolume(geometry, config);
- if ((rank == MASTER_NODE) && (!discrete_adjoint)) {
+ if ((rank == MASTER_NODE) && (!discrete_adjoint) && screen_output) {
cout << scientific << "Non-linear iter.: " << iNonlinear_Iter+1 << "/" << Nonlinear_Iter << ". Linear iter.: " << nIterMesh << ". ";
if (nDim == 2) cout << "Min. area: " << MinVolume << ". Error: " << valResidual << "." << endl;
else cout << "Min. volume: " << MinVolume << ". Error: " << valResidual << "." << endl;
@@ -9472,7 +9434,9 @@ void CElasticityMovement::SetBoundaryDisplacements(CGeometry *geometry, CConfig
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) != 0 ||
+ config->GetMarker_All_Moving(iMarker))
+ && (Kind_SU2 == SU2_CFD)) {
for (iVertex = 0; iVertex < geometry->nVertex[iMarker]; iVertex++) {
@@ -9497,7 +9461,9 @@ void CElasticityMovement::SetBoundaryDisplacements(CGeometry *geometry, CConfig
/*--- Apply displacement boundary conditions to 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) != 0 ||
+ config->GetMarker_All_Moving(iMarker))
+ && (Kind_SU2 == SU2_CFD)) {
SetMoving_Boundary(geometry, config, iMarker);
}
}
@@ -9511,7 +9477,8 @@ void CElasticityMovement::SetBoundaryDisplacements(CGeometry *geometry, CConfig
for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) {
if (((config->GetMarker_All_KindBC(iMarker) != SYMMETRY_PLANE) &&
(config->GetMarker_All_KindBC(iMarker) != SEND_RECEIVE) &&
- (config->GetMarker_All_KindBC(iMarker) != PERIODIC_BOUNDARY))) {
+ (config->GetMarker_All_KindBC(iMarker) != PERIODIC_BOUNDARY))
+ && !config->GetMarker_All_Moving(iMarker)) {
/*--- We must note that the FSI surfaces are not clamped ---*/
if (config->GetMarker_All_ZoneInterface(iMarker) == 0){
@@ -9570,15 +9537,10 @@ void CElasticityMovement::SetMinMaxVolume(CGeometry *geometry, CConfig *config)
su2double val_Coord;
int EL_KIND = 0;
- bool discrete_adjoint = config->GetDiscrete_Adjoint();
-
bool RightVol = true;
su2double ElemVolume;
- if ((rank == MASTER_NODE) && (!discrete_adjoint))
- cout << "Computing volumes of the grid elements." << endl;
-
MaxVolume = -1E22; MinVolume = 1E22;
/*--- Loops over all the elements ---*/
diff --git a/Common/src/interpolation_structure.cpp b/Common/src/interpolation_structure.cpp
index a0798673959b..1c11a09a1250 100644
--- a/Common/src/interpolation_structure.cpp
+++ b/Common/src/interpolation_structure.cpp
@@ -970,7 +970,7 @@ void CIsoparametric::Set_TransferCoeff(CConfig **config) {
nNodes = (unsigned int)Buffer_Receive_FaceIndex[iProcessor*MaxFace_Donor+iFace+1] -
(unsigned int)Buffer_Receive_FaceIndex[iProcessor*MaxFace_Donor+iFace];
- su2double *X = new su2double[nNodes*nDim];
+ su2double *X = new su2double[nNodes*(nDim+1)];
faceindex = Buffer_Receive_FaceIndex[iProcessor*MaxFace_Donor+iFace]; // first index of this face
for (iDonor=0; iDonorGetKind_Solver() == MULTIZONE)
- nZone = config->GetnConfigFiles();
- else
- nZone = CConfig::GetnZone(config->GetMesh_FileName(), config->GetMesh_FileFormat(), config);
- nDim = CConfig::GetnDim(config->GetMesh_FileName(), config->GetMesh_FileFormat());
+ nZone = config->GetnZone();
fsi = config->GetFSI_Simulation();
turbo = config->GetBoolTurbomachinery();
zone_specific = config->GetBoolZoneSpecific();
@@ -101,7 +97,10 @@ int main(int argc, char *argv[]) {
/*--- First, given the basic information about the number of zones and the
solver types from the config, instantiate the appropriate driver for the problem
and perform all the preprocessing. ---*/
- if (config->GetSinglezone_Driver() || (nZone == 1 && config->GetDiscrete_Adjoint())) {
+
+ if (((config->GetSinglezone_Driver() || (nZone == 1 && config->GetDiscrete_Adjoint()))
+ && config->GetUnsteady_Simulation() != HARMONIC_BALANCE && (!turbo)) || (turbo && config->GetDiscrete_Adjoint())) {
+
/*--- Single zone problem: instantiate the single zone driver class. ---*/
@@ -109,22 +108,22 @@ int main(int argc, char *argv[]) {
SU2_MPI::Error("The required solver doesn't support multizone simulations", CURRENT_FUNCTION);
}
if (config->GetDiscrete_Adjoint())
- driver = new CDiscAdjSinglezoneDriver(config_file_name, nZone, nDim, MPICommunicator);
+ driver = new CDiscAdjSinglezoneDriver(config_file_name, nZone, MPICommunicator);
else
- driver = new CSinglezoneDriver(config_file_name, nZone, nDim, MPICommunicator);
+ driver = new CSinglezoneDriver(config_file_name, nZone, MPICommunicator);
}
- else if (config->GetKind_Solver() == MULTIZONE) {
+ else if (config->GetMultizone_Problem() && !turbo && !fsi) {
/*--- Multizone Driver. ---*/
- driver = new CMultizoneDriver(config_file_name, nZone, nDim, MPICommunicator);
+ driver = new CMultizoneDriver(config_file_name, nZone, MPICommunicator);
} else if (config->GetUnsteady_Simulation() == HARMONIC_BALANCE) {
/*--- Harmonic balance problem: instantiate the Harmonic Balance driver class. ---*/
- driver = new CHBDriver(config_file_name, nZone, nDim, MPICommunicator);
+ driver = new CHBDriver(config_file_name, nZone, MPICommunicator);
} else if ((nZone == 2) && fsi) {
@@ -134,7 +133,7 @@ int main(int argc, char *argv[]) {
/*--- If the problem is a discrete adjoint FSI problem ---*/
if (disc_adj_fsi) {
if (stat_fsi) {
- driver = new CDiscAdjFSIDriver(config_file_name, nZone, nDim, MPICommunicator);
+ driver = new CDiscAdjFSIDriver(config_file_name, nZone, MPICommunicator);
}
else {
SU2_MPI::Error("WARNING: There is no discrete adjoint implementation for dynamic FSI. ", CURRENT_FUNCTION);
@@ -142,11 +141,11 @@ int main(int argc, char *argv[]) {
}
/*--- If the problem is a direct FSI problem ---*/
else{
- driver = new CFSIDriver(config_file_name, nZone, nDim, MPICommunicator);
+ driver = new CFSIDriver(config_file_name, nZone, MPICommunicator);
}
} else if (zone_specific) {
- driver = new CMultiphysicsZonalDriver(config_file_name, nZone, nDim, MPICommunicator);
+ driver = new CMultiphysicsZonalDriver(config_file_name, nZone, MPICommunicator);
} else {
/*--- Multi-zone problem: instantiate the multi-zone driver class by default
@@ -154,13 +153,13 @@ int main(int argc, char *argv[]) {
if (turbo) {
- driver = new CTurbomachineryDriver(config_file_name, nZone, nDim, MPICommunicator);
+ driver = new CTurbomachineryDriver(config_file_name, nZone, MPICommunicator);
} else {
/*--- Instantiate the class for external aerodynamics ---*/
- driver = new CFluidDriver(config_file_name, nZone, nDim, MPICommunicator);
+ driver = new CFluidDriver(config_file_name, nZone, MPICommunicator);
}
diff --git a/SU2_CFD/src/driver_adjoint_singlezone.cpp b/SU2_CFD/src/driver_adjoint_singlezone.cpp
index 7c6aebfe4b4d..c093a9871d96 100644
--- a/SU2_CFD/src/driver_adjoint_singlezone.cpp
+++ b/SU2_CFD/src/driver_adjoint_singlezone.cpp
@@ -41,10 +41,8 @@
CDiscAdjSinglezoneDriver::CDiscAdjSinglezoneDriver(char* confFile,
unsigned short val_nZone,
- unsigned short val_nDim,
SU2_Comm MPICommunicator) : CSinglezoneDriver(confFile,
val_nZone,
- val_nDim,
MPICommunicator) {
diff --git a/SU2_CFD/src/driver_direct_multizone.cpp b/SU2_CFD/src/driver_direct_multizone.cpp
index cc2e68fb30b3..c7d803295f93 100644
--- a/SU2_CFD/src/driver_direct_multizone.cpp
+++ b/SU2_CFD/src/driver_direct_multizone.cpp
@@ -41,10 +41,8 @@
CMultizoneDriver::CMultizoneDriver(char* confFile,
unsigned short val_nZone,
- unsigned short val_nDim,
SU2_Comm MPICommunicator) : CDriver(confFile,
val_nZone,
- val_nDim,
MPICommunicator) {
/*--- Initialize the counter for TimeIter ---*/
@@ -112,16 +110,20 @@ CMultizoneDriver::CMultizoneDriver(char* confFile,
prefixed_motion = new bool[nZone];
for (iZone = 0; iZone < nZone; iZone++){
switch (config_container[iZone]->GetKind_GridMovement()){
- case RIGID_MOTION: case DEFORMING:
- case EXTERNAL: case EXTERNAL_ROTATION:
- case AEROELASTIC: case AEROELASTIC_RIGID_MOTION:
+ case RIGID_MOTION:
case ELASTICITY:
prefixed_motion[iZone] = true; break;
- case FLUID_STRUCTURE: case FLUID_STRUCTURE_STATIC:
- case STEADY_TRANSLATION: case MOVING_WALL: case ROTATING_FRAME:
+ case STEADY_TRANSLATION: case ROTATING_FRAME:
case NO_MOVEMENT: case GUST: default:
prefixed_motion[iZone] = false; break;
}
+ if (config_container[iZone]->GetSurface_Movement(AEROELASTIC) ||
+ config_container[iZone]->GetSurface_Movement(AEROELASTIC_RIGID_MOTION) ||
+ config_container[iZone]->GetSurface_Movement(DEFORMING) ||
+ config_container[iZone]->GetSurface_Movement(EXTERNAL) ||
+ config_container[iZone]->GetSurface_Movement(EXTERNAL_ROTATION)){
+ prefixed_motion[iZone] = true;
+ }
}
}
diff --git a/SU2_CFD/src/driver_direct_singlezone.cpp b/SU2_CFD/src/driver_direct_singlezone.cpp
index 25973f2f4cd3..f6a12c5cfac8 100644
--- a/SU2_CFD/src/driver_direct_singlezone.cpp
+++ b/SU2_CFD/src/driver_direct_singlezone.cpp
@@ -41,10 +41,8 @@
CSinglezoneDriver::CSinglezoneDriver(char* confFile,
unsigned short val_nZone,
- unsigned short val_nDim,
SU2_Comm MPICommunicator) : CDriver(confFile,
val_nZone,
- val_nDim,
MPICommunicator) {
/*--- Initialize the counter for TimeIter ---*/
@@ -121,7 +119,7 @@ void CSinglezoneDriver::Preprocess(unsigned long TimeIter) {
general once the drivers are more stable. ---*/
if (config_container[ZONE_0]->GetUnsteady_Simulation())
- config_container[ZONE_0]->SetPhysicalTime(static_cast(TimeIter)*config_container[iZone]->GetDelta_UnstTimeND());
+ config_container[ZONE_0]->SetPhysicalTime(static_cast(TimeIter)*config_container[ZONE_0]->GetDelta_UnstTimeND());
else
config_container[ZONE_0]->SetPhysicalTime(0.0);
diff --git a/SU2_CFD/src/driver_structure.cpp b/SU2_CFD/src/driver_structure.cpp
index 274fa7301370..663bcfd1e842 100644
--- a/SU2_CFD/src/driver_structure.cpp
+++ b/SU2_CFD/src/driver_structure.cpp
@@ -44,8 +44,7 @@
CDriver::CDriver(char* confFile,
unsigned short val_nZone,
- unsigned short val_nDim,
- SU2_Comm MPICommunicator):config_file_name(confFile), StartTime(0.0), StopTime(0.0), UsedTime(0.0), ExtIter(0), nZone(val_nZone), nDim(val_nDim), StopCalc(false), fsi(false), fem_solver(false) {
+ SU2_Comm MPICommunicator):config_file_name(confFile), StartTime(0.0), StopTime(0.0), UsedTime(0.0), ExtIter(0), nZone(val_nZone), StopCalc(false), fsi(false), fem_solver(false) {
unsigned short jZone, iSol;
@@ -182,7 +181,6 @@ CDriver::CDriver(char* confFile,
for (iMesh = 0; iMesh <= config_container[iZone]->GetnMGLevels(); iMesh++) {
geometry_container[iZone][iInst][iMesh]->MatchNearField(config_container[iZone]);
- geometry_container[iZone][iInst][iMesh]->MatchInterface(config_container[iZone]);
geometry_container[iZone][iInst][iMesh]->MatchActuator_Disk(config_container[iZone]);
}
@@ -213,6 +211,8 @@ CDriver::CDriver(char* confFile,
}
+ nDim = geometry_container[ZONE_0][INST_0][MESH_0]->GetnDim();
+
/*--- If activated by the compile directive, perform a partition analysis. ---*/
#if PARTITION
if( fem_solver ) Partition_Analysis_FEM(geometry_container[ZONE_0][INST_0][MESH_0], config_container[ZONE_0]);
@@ -402,7 +402,7 @@ CDriver::CDriver(char* confFile,
grid_movement[iZone][iInst] = NULL;
if (!fem_solver && (config_container[iZone]->GetGrid_Movement() ||
- (config_container[iZone]->GetDirectDiff() == D_DESIGN))) {
+ (config_container[iZone]->GetDirectDiff() == D_DESIGN)) && !config_container[iZone]->GetSurface_Movement(FLUID_STRUCTURE_STATIC)) {
if (rank == MASTER_NODE)
cout << "Setting dynamic mesh structure for zone "<< iZone + 1<<"." << endl;
for (iInst = 0; iInst < nInst[iZone]; iInst++){
@@ -446,9 +446,9 @@ CDriver::CDriver(char* confFile,
}
}
- if (config_container[iZone]->GetKind_GridMovement(iZone) == FLUID_STRUCTURE_STATIC){
+ if (config_container[iZone]->GetSurface_Movement(FLUID_STRUCTURE_STATIC)){
if (rank == MASTER_NODE)
- cout << "Setting moving mesh structure for static FSI problems." << endl;
+ cout << "Setting moving mesh structure for FSI problems." << endl;
/*--- Instantiate the container for the grid movement structure ---*/
for (iInst = 0; iInst < nInst[iZone]; iInst++)
grid_movement[iZone][iInst] = new CElasticityMovement(geometry_container[iZone][iInst][MESH_0], config_container[iZone]);
@@ -472,9 +472,14 @@ CDriver::CDriver(char* confFile,
Not for the FEM solver, because this is handled later, because
the integration points must be known. ---*/
if( !fem_solver ) {
- Kind_Grid_Movement = config_container[ZONE_0]->GetKind_GridMovement(ZONE_0);
- initStaticMovement = (config_container[ZONE_0]->GetGrid_Movement() && (Kind_Grid_Movement == MOVING_WALL
+
+ initStaticMovement = false;
+
+ for (iZone = 0; iZone < nZone; iZone ++){
+ Kind_Grid_Movement = config_container[iZone]->GetKind_GridMovement();
+ initStaticMovement = (config_container[iZone]->GetGrid_Movement() && (config_container[iZone]->GetSurface_Movement(MOVING_WALL)
|| Kind_Grid_Movement == ROTATING_FRAME || Kind_Grid_Movement == STEADY_TRANSLATION));
+ }
if(initStaticMovement){
@@ -810,7 +815,7 @@ void CDriver::Input_Preprocessing(SU2_Comm MPICommunicator) {
/*--- Initialize the configuration of the driver ---*/
- driver_config = new CConfig(config_file_name, SU2_CFD, ZONE_0, nZone, nDim, false);
+ driver_config = new CConfig(config_file_name, SU2_CFD, nZone, false);
/*--- Loop over all zones to initialize the various classes. In most
cases, nZone is equal to one. This represents the solution of a partial
@@ -822,12 +827,15 @@ void CDriver::Input_Preprocessing(SU2_Comm MPICommunicator) {
constructor, the input configuration file is parsed and all options are
read and stored. ---*/
- if (driver_config->GetKind_Solver() == MULTIZONE){
+ if (driver_config->GetnConfigFiles() > 0){
+ if (rank == MASTER_NODE){
+ cout << endl << "Parsing sub-config file for zone " << iZone << endl;
+ }
strcpy(zone_file_name, driver_config->GetConfigFilename(iZone).c_str());
- config_container[iZone] = new CConfig(zone_file_name, SU2_CFD, iZone, nZone, nDim, true);
+ config_container[iZone] = new CConfig(driver_config, zone_file_name, SU2_CFD, iZone, nZone, true);
}
else{
- config_container[iZone] = new CConfig(config_file_name, SU2_CFD, iZone, nZone, nDim, true);
+ config_container[iZone] = new CConfig(driver_config, config_file_name, SU2_CFD, iZone, nZone, true);
}
/*--- Set the MPI communicator ---*/
@@ -837,13 +845,16 @@ void CDriver::Input_Preprocessing(SU2_Comm MPICommunicator) {
}
/*--- Set the multizone part of the problem. ---*/
- if (driver_config->GetKind_Solver() == MULTIZONE){
+ if (driver_config->GetMultizone_Problem()){
for (iZone = 0; iZone < nZone; iZone++) {
/*--- Set the interface markers for multizone ---*/
config_container[iZone]->SetMultizone(driver_config, config_container);
}
}
+ /*--- Definition of the geometry class to store the primal grid in the
+ partitioning process. ---*/
+
for (iZone = 0; iZone < nZone; iZone++) {
/*--- Determine whether or not the FEM solver is used, which decides the
@@ -870,6 +881,14 @@ void CDriver::Input_Preprocessing(SU2_Comm MPICommunicator) {
partitioning process. ---*/
CGeometry *geometry_aux = NULL;
+
+ /*--- All ranks process the grid and call ParMETIS for partitioning ---*/
+
+ geometry_aux = new CPhysicalGeometry(config_container[iZone], iZone, nZone);
+
+ /*--- Set the dimension ---*/
+
+ nDim = geometry_aux->GetnDim();
/*--- For the FEM solver with time-accurate local time-stepping, use
a dummy solver class to retrieve the initial flow state. ---*/
@@ -877,10 +896,6 @@ void CDriver::Input_Preprocessing(SU2_Comm MPICommunicator) {
CSolver *solver_aux = NULL;
if (fem_solver) solver_aux = new CFEM_DG_EulerSolver(config_container[iZone], nDim, MESH_0);
- /*--- All ranks process the grid and call ParMETIS for partitioning ---*/
-
- geometry_aux = new CPhysicalGeometry(config_container[iZone], iZone, nZone);
-
/*--- Color the initial grid and set the send-receive domains (ParMETIS) ---*/
if ( fem_solver ) geometry_aux->SetColorFEMGrid_Parallel(config_container[iZone]);
@@ -1181,7 +1196,7 @@ void CDriver::Geometrical_Preprocessing_DGFEM() {
DGMesh->CoordinatesSolDOFs();
/*--- Initialize the static mesh movement, if necessary. ---*/
- const unsigned short Kind_Grid_Movement = config_container[iZone]->GetKind_GridMovement(iZone);
+ const unsigned short Kind_Grid_Movement = config_container[iZone]->GetKind_GridMovement();
const bool initStaticMovement = (config_container[iZone]->GetGrid_Movement() &&
(Kind_Grid_Movement == MOVING_WALL ||
Kind_Grid_Movement == ROTATING_FRAME ||
@@ -3604,73 +3619,77 @@ void CDriver::Interface_Preprocessing() {
}
void CDriver::InitStaticMeshMovement(){
-
+
unsigned short iMGlevel;
unsigned short Kind_Grid_Movement;
-
+
for (iZone = 0; iZone < nZone; iZone++) {
- Kind_Grid_Movement = config_container[iZone]->GetKind_GridMovement(iZone);
-
+ Kind_Grid_Movement = config_container[iZone]->GetKind_GridMovement();
+
switch (Kind_Grid_Movement) {
-
- case MOVING_WALL:
-
- /*--- Fixed wall velocities: set the grid velocities only one time
+
+ case ROTATING_FRAME:
+
+ /*--- Steadily rotating frame: set the grid velocities just once
before the first iteration flow solver. ---*/
+
+ if (rank == MASTER_NODE) {
+ cout << endl << " Setting rotating frame grid velocities";
+ cout << " for zone " << iZone << "." << endl;
+ }
+
+ /*--- Set the grid velocities on all multigrid levels for a steadily
+ rotating reference frame. ---*/
+
+ for (iMGlevel = 0; iMGlevel <= config_container[ZONE_0]->GetnMGLevels(); iMGlevel++){
+ geometry_container[iZone][INST_0][iMGlevel]->SetRotationalVelocity(config_container[iZone], iZone, true);
+ geometry_container[iZone][INST_0][iMGlevel]->SetShroudVelocity(config_container[iZone]);
+ }
+
+ break;
+
+ case STEADY_TRANSLATION:
+
+ /*--- Set the translational velocity and hold the grid fixed during
+ the calculation (similar to rotating frame, but there is no extra
+ source term for translation). ---*/
+
+ if (rank == MASTER_NODE)
+ cout << endl << " Setting translational grid velocities." << endl;
+
+ /*--- Set the translational velocity on all grid levels. ---*/
+
+ for (iMGlevel = 0; iMGlevel <= config_container[ZONE_0]->GetnMGLevels(); iMGlevel++)
+ geometry_container[iZone][INST_0][iMGlevel]->SetTranslationalVelocity(config_container[iZone], iZone, true);
+
+
+
+ break;
+
+ default:
+ break;
+ }
+
+ if (config_container[iZone]->GetnMarker_Moving() > 0){
+
+ /*--- Fixed wall velocities: set the grid velocities only one time
+ before the first iteration flow solver. ---*/
if (rank == MASTER_NODE)
cout << endl << " Setting the moving wall velocities." << endl;
-
+
surface_movement[iZone]->Moving_Walls(geometry_container[iZone][INST_0][MESH_0],
- config_container[iZone], iZone, 0);
-
+ config_container[iZone], iZone, 0);
+
/*--- Update the grid velocities on the coarser multigrid levels after
- setting the moving wall velocities for the finest mesh. ---*/
+ setting the moving wall velocities for the finest mesh. ---*/
for (iInst = 0; iInst < nInst[iZone]; iInst++)
grid_movement[iZone][iInst]->UpdateMultiGrid(geometry_container[iZone][iInst], config_container[iZone]);
- break;
-
-
- case ROTATING_FRAME:
-
- /*--- Steadily rotating frame: set the grid velocities just once
- before the first iteration flow solver. ---*/
-
- if (rank == MASTER_NODE) {
- cout << endl << " Setting rotating frame grid velocities";
- cout << " for zone " << iZone << "." << endl;
- }
-
- /*--- Set the grid velocities on all multigrid levels for a steadily
- rotating reference frame. ---*/
-
- for (iMGlevel = 0; iMGlevel <= config_container[ZONE_0]->GetnMGLevels(); iMGlevel++){
- geometry_container[iZone][INST_0][iMGlevel]->SetRotationalVelocity(config_container[iZone], iZone, true);
- geometry_container[iZone][INST_0][iMGlevel]->SetShroudVelocity(config_container[iZone]);
- }
-
- break;
-
- case STEADY_TRANSLATION:
-
- /*--- Set the translational velocity and hold the grid fixed during
- the calculation (similar to rotating frame, but there is no extra
- source term for translation). ---*/
-
- if (rank == MASTER_NODE)
- cout << endl << " Setting translational grid velocities." << endl;
-
- /*--- Set the translational velocity on all grid levels. ---*/
-
- for (iMGlevel = 0; iMGlevel <= config_container[ZONE_0]->GetnMGLevels(); iMGlevel++)
- geometry_container[iZone][INST_0][iMGlevel]->SetTranslationalVelocity(config_container[iZone], iZone, true);
-
-
-
- break;
+
}
}
}
+
void CDriver::TurbomachineryPreprocessing(){
unsigned short donorZone,targetZone, nMarkerInt, iMarkerInt;
@@ -4078,7 +4097,7 @@ void CDriver::Output(unsigned long ExtIter) {
CDriver::~CDriver(void) {}
-CFluidDriver::CFluidDriver(char* confFile, unsigned short val_nZone, unsigned short val_nDim, SU2_Comm MPICommunicator) : CDriver(confFile, val_nZone, val_nDim, MPICommunicator) { }
+CFluidDriver::CFluidDriver(char* confFile, unsigned short val_nZone, SU2_Comm MPICommunicator) : CDriver(confFile, val_nZone, MPICommunicator) { }
CFluidDriver::~CFluidDriver(void) { }
@@ -4182,8 +4201,8 @@ void CFluidDriver::DynamicMeshUpdate(unsigned long ExtIter) {
}
CTurbomachineryDriver::CTurbomachineryDriver(char* confFile, unsigned short val_nZone,
- unsigned short val_nDim, SU2_Comm MPICommunicator):
- CFluidDriver(confFile, val_nZone, val_nDim, MPICommunicator) { }
+ SU2_Comm MPICommunicator):
+ CFluidDriver(confFile, val_nZone, MPICommunicator) { }
CTurbomachineryDriver::~CTurbomachineryDriver(void) { }
@@ -4323,10 +4342,10 @@ bool CTurbomachineryDriver::Monitor(unsigned long ExtIter) {
if(ExtIter % rampFreq == 0 && ExtIter <= finalRamp_Iter){
for (iZone = 0; iZone < nZone; iZone++) {
- rot_z_final = config_container[iZone]->GetFinalRotation_Rate_Z(iZone);
+ rot_z_final = config_container[iZone]->GetFinalRotation_Rate_Z();
if(abs(rot_z_final) > 0.0){
rot_z = rot_z_ini + ExtIter*( rot_z_final - rot_z_ini)/finalRamp_Iter;
- config_container[iZone]->SetRotation_Rate_Z(rot_z, iZone);
+ config_container[iZone]->SetRotation_Rate(2, rot_z);
if(rank == MASTER_NODE && print && ExtIter > 0) {
cout << endl << " Updated rotating frame grid velocities";
cout << " for zone " << iZone << "." << endl;
@@ -4404,10 +4423,8 @@ bool CTurbomachineryDriver::Monitor(unsigned long ExtIter) {
CHBDriver::CHBDriver(char* confFile,
unsigned short val_nZone,
- unsigned short val_nDim,
SU2_Comm MPICommunicator) : CDriver(confFile,
val_nZone,
- val_nDim,
MPICommunicator) {
unsigned short kInst;
@@ -4956,10 +4973,8 @@ void CHBDriver::ComputeHB_Operator() {
CFSIDriver::CFSIDriver(char* confFile,
unsigned short val_nZone,
- unsigned short val_nDim,
SU2_Comm MPICommunicator) : CDriver(confFile,
val_nZone,
- val_nDim,
MPICommunicator) {
unsigned short iVar;
unsigned short nVar_Flow = 0, nVar_Struct = 0;
@@ -5452,10 +5467,8 @@ void CFSIDriver::DynamicMeshUpdate(unsigned long ExtIter){
CDiscAdjFSIDriver::CDiscAdjFSIDriver(char* confFile,
unsigned short val_nZone,
- unsigned short val_nDim,
SU2_Comm MPICommunicator) : CDriver(confFile,
val_nZone,
- val_nDim,
MPICommunicator) {
unsigned short iVar;
@@ -7018,10 +7031,8 @@ void CDiscAdjFSIDriver::Transfer_Tractions(unsigned short donorZone, unsigned sh
CMultiphysicsZonalDriver::CMultiphysicsZonalDriver(char* confFile,
unsigned short val_nZone,
- unsigned short val_nDim,
SU2_Comm MPICommunicator) : CDriver(confFile,
val_nZone,
- val_nDim,
MPICommunicator) { }
CMultiphysicsZonalDriver::~CMultiphysicsZonalDriver(void) { }
diff --git a/SU2_CFD/src/iteration_structure.cpp b/SU2_CFD/src/iteration_structure.cpp
index 9c026fe7b354..9ec54a398690 100644
--- a/SU2_CFD/src/iteration_structure.cpp
+++ b/SU2_CFD/src/iteration_structure.cpp
@@ -63,7 +63,7 @@ void CIteration::SetGrid_Movement(CGeometry ****geometry_container,
unsigned long ExtIter) {
unsigned short iDim;
- unsigned short Kind_Grid_Movement = config_container[val_iZone]->GetKind_GridMovement(val_iZone);
+ unsigned short Kind_Grid_Movement = config_container[val_iZone]->GetKind_GridMovement();
unsigned long nIterMesh;
unsigned long iPoint;
bool stat_mesh = true;
@@ -71,11 +71,14 @@ void CIteration::SetGrid_Movement(CGeometry ****geometry_container,
bool harmonic_balance = (config_container[val_iZone]->GetUnsteady_Simulation() == HARMONIC_BALANCE);
bool discrete_adjoint = config_container[val_iZone]->GetDiscrete_Adjoint();
+ /*--- Only write to screen if this option is enabled ---*/
+ bool Screen_Output = config_container[val_iZone]->GetDeform_Output();
+
/*--- For a harmonic balance case, set "iteration number" to the zone number,
so that the meshes are positioned correctly for each instance. ---*/
if (harmonic_balance) {
ExtIter = val_iInst;
- Kind_Grid_Movement = config_container[val_iZone]->GetKind_GridMovement(ZONE_0);
+ Kind_Grid_Movement = config_container[val_iZone]->GetKind_GridMovement();
}
/*--- Perform mesh movement depending on specified type ---*/
@@ -107,8 +110,36 @@ void CIteration::SetGrid_Movement(CGeometry ****geometry_container,
break;
- case DEFORMING:
+ case ELASTICITY:
+
+ if (ExtIter != 0) {
+
+ if (rank == MASTER_NODE)
+ cout << " Deforming the grid using the Linear Elasticity solution." << endl;
+
+ /*--- Update the coordinates of the grid using the linear elasticity solution. ---*/
+ for (iPoint = 0; iPoint < geometry_container[val_iZone][val_iInst][MESH_0]->GetnPoint(); iPoint++) {
+
+ su2double *U_time_nM1 = solver_container[val_iZone][val_iInst][MESH_0][FEA_SOL]->node[iPoint]->GetSolution_time_n1();
+ su2double *U_time_n = solver_container[val_iZone][val_iInst][MESH_0][FEA_SOL]->node[iPoint]->GetSolution_time_n();
+
+ for (iDim = 0; iDim < geometry_container[val_iZone][val_iInst][MESH_0]->GetnDim(); iDim++)
+ geometry_container[val_iZone][val_iInst][MESH_0]->node[iPoint]->AddCoord(iDim, U_time_n[iDim] - U_time_nM1[iDim]);
+
+ }
+
+ }
+
+ break;
+
+ /*--- Already initialized in the static mesh movement routine at driver level. ---*/
+ case STEADY_TRANSLATION: case ROTATING_FRAME:
+ break;
+
+ }
+
+ if (config_container[val_iZone]->GetSurface_Movement(DEFORMING)){
if (rank == MASTER_NODE)
cout << endl << " Updating surface positions." << endl;
@@ -178,50 +209,10 @@ void CIteration::SetGrid_Movement(CGeometry ****geometry_container,
grid_movement[val_iZone][val_iInst]->UpdateMultiGrid(geometry_container[val_iZone][val_iInst], config_container[val_iZone]);
- break;
-
- case EXTERNAL: case EXTERNAL_ROTATION:
-
- /*--- Apply rigid rotation to entire grid first, if necessary ---*/
-
- if (Kind_Grid_Movement == EXTERNAL_ROTATION) {
- if (rank == MASTER_NODE)
- cout << " Updating node locations by rigid rotation." << endl;
- grid_movement[val_iZone][val_iInst]->Rigid_Rotation(geometry_container[val_iZone][val_iInst][MESH_0],
- config_container[val_iZone], val_iZone, ExtIter);
- }
-
- /*--- Load new surface node locations from external files ---*/
-
- if (rank == MASTER_NODE)
- cout << " Updating surface locations from file." << endl;
- surface_movement[val_iZone]->SetExternal_Deformation(geometry_container[val_iZone][val_iInst][MESH_0],
- config_container[val_iZone], val_iZone, ExtIter);
-
- /*--- Deform the volume grid around the new boundary locations ---*/
-
- if (rank == MASTER_NODE)
- cout << " Deforming the volume grid." << endl;
- grid_movement[val_iZone][val_iInst]->SetVolume_Deformation(geometry_container[val_iZone][val_iInst][MESH_0],
- config_container[val_iZone], true);
-
- /*--- Update the grid velocities on the fine mesh using finite
- differencing based on node coordinates at previous times. ---*/
-
- if (!adjoint) {
- if (rank == MASTER_NODE)
- cout << " Computing grid velocities by finite differencing." << endl;
- geometry_container[val_iZone][val_iInst][MESH_0]->SetGridVelocity(config_container[val_iZone], ExtIter);
}
- /*--- Update the multigrid structure after moving the finest grid,
- including computing the grid velocities on the coarser levels. ---*/
-
- grid_movement[val_iZone][val_iInst]->UpdateMultiGrid(geometry_container[val_iZone][val_iInst], config_container[val_iZone]);
-
- break;
-
- case AEROELASTIC: case AEROELASTIC_RIGID_MOTION:
+ if (config_container[val_iZone]->GetSurface_Movement(AEROELASTIC)
+ || config_container[val_iZone]->GetSurface_Movement(AEROELASTIC_RIGID_MOTION)){
/*--- Apply rigid mesh transformation to entire grid first, if necessary ---*/
if (IntIter == 0) {
@@ -281,53 +272,28 @@ void CIteration::SetGrid_Movement(CGeometry ****geometry_container,
grid_movement[val_iZone][val_iInst]->UpdateMultiGrid(geometry_container[val_iZone][val_iInst], config_container[val_iZone]);
}
-
- break;
-
- case ELASTICITY:
-
- if (ExtIter != 0) {
-
- if (rank == MASTER_NODE)
- cout << " Deforming the grid using the Linear Elasticity solution." << endl;
-
- /*--- Update the coordinates of the grid using the linear elasticity solution. ---*/
- for (iPoint = 0; iPoint < geometry_container[val_iZone][val_iInst][MESH_0]->GetnPoint(); iPoint++) {
-
- su2double *U_time_nM1 = solver_container[val_iZone][val_iInst][MESH_0][FEA_SOL]->node[iPoint]->GetSolution_time_n1();
- su2double *U_time_n = solver_container[val_iZone][val_iInst][MESH_0][FEA_SOL]->node[iPoint]->GetSolution_time_n();
-
- for (iDim = 0; iDim < geometry_container[val_iZone][val_iInst][MESH_0]->GetnDim(); iDim++)
- geometry_container[val_iZone][val_iInst][MESH_0]->node[iPoint]->AddCoord(iDim, U_time_n[iDim] - U_time_nM1[iDim]);
-
}
-
- }
-
- break;
-
- case FLUID_STRUCTURE:
-
- if (rank == MASTER_NODE)
+ if (config_container[val_iZone]->GetSurface_Movement(FLUID_STRUCTURE)){
+ if (rank == MASTER_NODE && Screen_Output)
cout << endl << "Deforming the grid for Fluid-Structure Interaction applications." << endl;
/*--- Deform the volume grid around the new boundary locations ---*/
- if (rank == MASTER_NODE)
+ if (rank == MASTER_NODE && Screen_Output)
cout << "Deforming the volume grid." << endl;
grid_movement[val_iZone][val_iInst]->SetVolume_Deformation(geometry_container[val_iZone][val_iInst][MESH_0],
- config_container[val_iZone], true);
+ config_container[val_iZone], true, false);
nIterMesh = grid_movement[val_iZone][val_iInst]->Get_nIterMesh();
stat_mesh = (nIterMesh == 0);
if (!adjoint && !stat_mesh) {
- if (rank == MASTER_NODE)
+ if (rank == MASTER_NODE && Screen_Output)
cout << "Computing grid velocities by finite differencing." << endl;
geometry_container[val_iZone][val_iInst][MESH_0]->SetGridVelocity(config_container[val_iZone], ExtIter);
}
else if (stat_mesh) {
- if (rank == MASTER_NODE)
+ if (rank == MASTER_NODE && Screen_Output)
cout << "The mesh is up-to-date. Using previously stored grid velocities." << endl;
}
@@ -336,25 +302,21 @@ void CIteration::SetGrid_Movement(CGeometry ****geometry_container,
grid_movement[val_iZone][val_iInst]->UpdateMultiGrid(geometry_container[val_iZone][val_iInst], config_container[val_iZone]);
- break;
- /*--- Already initialized in the static mesh movement routine at driver level. ---*/
- case STEADY_TRANSLATION: case MOVING_WALL: case ROTATING_FRAME:
- break;
-
- case FLUID_STRUCTURE_STATIC:
+ }
+ if (config_container[val_iZone]->GetSurface_Movement(FLUID_STRUCTURE_STATIC)){
- if ((rank == MASTER_NODE) && (!discrete_adjoint))
+ if ((rank == MASTER_NODE) && (!discrete_adjoint) && Screen_Output)
cout << endl << "Deforming the grid for static Fluid-Structure Interaction applications." << endl;
/*--- Deform the volume grid around the new boundary locations ---*/
- if ((rank == MASTER_NODE) && (!discrete_adjoint))
+ if ((rank == MASTER_NODE) && (!discrete_adjoint)&& Screen_Output)
cout << "Deforming the volume grid." << endl;
grid_movement[val_iZone][val_iInst]->SetVolume_Deformation_Elas(geometry_container[val_iZone][val_iInst][MESH_0],
- config_container[val_iZone], true, false);
+ config_container[val_iZone], true, false);
- if ((rank == MASTER_NODE) && (!discrete_adjoint))
+ if ((rank == MASTER_NODE) && (!discrete_adjoint)&& Screen_Output)
cout << "There is no grid velocity." << endl;
/*--- Update the multigrid structure after moving the finest grid,
@@ -362,17 +324,46 @@ void CIteration::SetGrid_Movement(CGeometry ****geometry_container,
grid_movement[val_iZone][val_iInst]->UpdateMultiGrid(geometry_container[val_iZone][val_iInst], config_container[val_iZone]);
- break;
+ }
+ if (config_container[val_iZone]->GetSurface_Movement(EXTERNAL) || config_container[val_iZone]->GetSurface_Movement(EXTERNAL_ROTATION)){
+ /*--- Apply rigid rotation to entire grid first, if necessary ---*/
- case NO_MOVEMENT: case GUST: default:
+ if (Kind_Grid_Movement == EXTERNAL_ROTATION) {
+ if (rank == MASTER_NODE)
+ cout << " Updating node locations by rigid rotation." << endl;
+ grid_movement[val_iZone][val_iInst]->Rigid_Rotation(geometry_container[val_iZone][val_iInst][MESH_0],
+ config_container[val_iZone], val_iZone, ExtIter);
+ }
- /*--- There is no mesh motion specified for this zone. ---*/
+ /*--- Load new surface node locations from external files ---*/
+
if (rank == MASTER_NODE)
- cout << "No mesh motion specified." << endl;
+ cout << " Updating surface locations from file." << endl;
+ surface_movement[val_iZone]->SetExternal_Deformation(geometry_container[val_iZone][val_iInst][MESH_0],
+ config_container[val_iZone], val_iZone, ExtIter);
- break;
+ /*--- Deform the volume grid around the new boundary locations ---*/
+
+ if (rank == MASTER_NODE)
+ cout << " Deforming the volume grid." << endl;
+ grid_movement[val_iZone][val_iInst]->SetVolume_Deformation(geometry_container[val_iZone][val_iInst][MESH_0],
+ config_container[val_iZone], true);
+
+ /*--- Update the grid velocities on the fine mesh using finite
+ differencing based on node coordinates at previous times. ---*/
+
+ if (!adjoint) {
+ if (rank == MASTER_NODE)
+ cout << " Computing grid velocities by finite differencing." << endl;
+ geometry_container[val_iZone][val_iInst][MESH_0]->SetGridVelocity(config_container[val_iZone], ExtIter);
}
+ /*--- Update the multigrid structure after moving the finest grid,
+ including computing the grid velocities on the coarser levels. ---*/
+
+ grid_movement[val_iZone][val_iInst]->UpdateMultiGrid(geometry_container[val_iZone][val_iInst], config_container[val_iZone]);
+
+ }
}
void CIteration::Preprocess(COutput *output,
@@ -913,7 +904,7 @@ void CFluidIteration::SetWind_GustField(CConfig *config_container, CGeometry **g
unsigned short GustDir = config_container->GetGust_Dir(); // Gust direction
/*--- Variables needed to compute the gust ---*/
- unsigned short Kind_Grid_Movement = config_container->GetKind_GridMovement(ZONE_0);
+ unsigned short Kind_Grid_Movement = config_container->GetKind_GridMovement();
unsigned long iPoint;
unsigned short iMGlevel, nMGlevel = config_container->GetnMGLevels();
diff --git a/SU2_CFD/src/numerics_adjoint_mean.cpp b/SU2_CFD/src/numerics_adjoint_mean.cpp
index 8860e22595e3..7be4d4eea5b2 100644
--- a/SU2_CFD/src/numerics_adjoint_mean.cpp
+++ b/SU2_CFD/src/numerics_adjoint_mean.cpp
@@ -1514,9 +1514,9 @@ void CSourceRotatingFrame_AdjFlow::ComputeResidual(su2double *val_residual, su2d
/*--- Retrieve the angular velocity vector from config. ---*/
- Omega[0] = config->GetRotation_Rate_X(ZONE_0)/config->GetOmega_Ref();
- Omega[1] = config->GetRotation_Rate_Y(ZONE_0)/config->GetOmega_Ref();
- Omega[2] = config->GetRotation_Rate_Z(ZONE_0)/config->GetOmega_Ref();
+ for (iDim = 0; iDim < 3; iDim++){
+ Omega[iDim] = config->GetRotation_Rate(iDim)/config->GetOmega_Ref();
+ }
/*--- Get the adjoint velocity vector at the current node. ---*/
diff --git a/SU2_CFD/src/numerics_direct_mean.cpp b/SU2_CFD/src/numerics_direct_mean.cpp
index e5f213687b6b..f63104115dcf 100644
--- a/SU2_CFD/src/numerics_direct_mean.cpp
+++ b/SU2_CFD/src/numerics_direct_mean.cpp
@@ -5017,9 +5017,9 @@ void CSourceRotatingFrame_Flow::ComputeResidual(su2double *val_residual, su2doub
/*--- Retrieve the angular velocity vector from config. ---*/
- Omega[0] = config->GetRotation_Rate_X(config->GetiZone())/config->GetOmega_Ref();
- Omega[1] = config->GetRotation_Rate_Y(config->GetiZone())/config->GetOmega_Ref();
- Omega[2] = config->GetRotation_Rate_Z(config->GetiZone())/config->GetOmega_Ref();
+ for (iDim = 0; iDim < 3; iDim++){
+ Omega[iDim] = config->GetRotation_Rate(iDim)/config->GetOmega_Ref();
+ }
/*--- Get the momentum vector at the current node. ---*/
diff --git a/SU2_CFD/src/output_structure.cpp b/SU2_CFD/src/output_structure.cpp
index a61bd79215e3..ba2623996f79 100644
--- a/SU2_CFD/src/output_structure.cpp
+++ b/SU2_CFD/src/output_structure.cpp
@@ -6013,8 +6013,9 @@ void COutput::SetConvHistory_Body(ofstream *ConvHist_file,
}
if (extra_heat_output) { cout.width(15); cout << Extra_Heat_Residual; cout.width(15); cout << Extra_Total_Heat; }
+ cout << endl;
+
}
- cout << endl;
}
break;
diff --git a/SU2_CFD/src/solver_adjoint_mean.cpp b/SU2_CFD/src/solver_adjoint_mean.cpp
index 78d556926c56..e3c398e68465 100644
--- a/SU2_CFD/src/solver_adjoint_mean.cpp
+++ b/SU2_CFD/src/solver_adjoint_mean.cpp
@@ -1045,315 +1045,6 @@ void CAdjEulerSolver::Set_MPI_Nearfield(CGeometry *geometry, CConfig *config) {
}
-void CAdjEulerSolver::Set_MPI_Interface(CGeometry *geometry, CConfig *config) {
-
- unsigned long iter, iPoint, iVertex, jVertex, iPointTotal,
- Buffer_Send_nPointTotal = 0, iGlobalIndex, iGlobal;
- unsigned short iVar, iMarker, jMarker;
- long nDomain = 0, iDomain, jDomain;
-
-#ifdef HAVE_MPI
-
- /*--- MPI status and request arrays for non-blocking communications ---*/
-
- SU2_MPI::Status status, status_;
-
-
-#endif
-
- /*--- Define buffer vector interior domain ---*/
-
- su2double *Buffer_Send_AdjVar = NULL;
- su2double *iAdjVar = new su2double [nVar];
-
- unsigned long *nPointTotal_s = new unsigned long[size];
- unsigned long *nPointTotal_r = new unsigned long[size];
-
- unsigned long Buffer_Size_AdjVar = 0;
- unsigned long PointTotal_Counter = 0;
-
- /*--- Allocate the memory that we only need if we have MPI support ---*/
-
- su2double *Buffer_Receive_AdjVar = NULL;
-
- /*--- Basic dimensionalization ---*/
-
- nDomain = size;
-
- /*--- This loop gets the array sizes of points for each
- rank to send to each other rank. ---*/
-
- for (iDomain = 0; iDomain < nDomain; iDomain++) {
-
- /*--- Loop over the markers to perform the dimensionalizaton
- of the domain variables ---*/
-
- Buffer_Send_nPointTotal = 0;
-
- /*--- Loop over all of the markers and count the number of each
- type of point and element that needs to be sent. ---*/
-
- for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) {
- if (config->GetMarker_All_KindBC(iMarker) == INTERFACE_BOUNDARY) {
- for (iVertex = 0; iVertex < geometry->nVertex[iMarker]; iVertex++) {
- iPoint = geometry->vertex[iMarker][iVertex]->GetNode();
- jDomain = geometry->vertex[iMarker][iVertex]->GetDonorProcessor();
- if ((iDomain == jDomain) && (geometry->node[iPoint]->GetDomain())) {
- Buffer_Send_nPointTotal++;
- }
- }
- }
- }
-
- /*--- Store the counts on a partition by partition basis. ---*/
-
- nPointTotal_s[iDomain] = Buffer_Send_nPointTotal;
-
- /*--- Total counts for allocating send buffers below ---*/
-
- Buffer_Size_AdjVar += nPointTotal_s[iDomain]*(nVar+3);
-
- }
-
- /*--- Allocate the buffer vectors in the appropiate domain (master, iDomain) ---*/
-
- Buffer_Send_AdjVar = new su2double[Buffer_Size_AdjVar];
-
- /*--- Now that we know the sizes of the point, we can
- allocate and send the information in large chunks to all processors. ---*/
-
- for (iDomain = 0; iDomain < nDomain; iDomain++) {
-
- /*--- A rank does not communicate with itself through MPI ---*/
-
- if (rank != iDomain) {
-
-#ifdef HAVE_MPI
-
- /*--- Communicate the counts to iDomain with non-blocking sends ---*/
-
- SU2_MPI::Bsend(&nPointTotal_s[iDomain], 1, MPI_UNSIGNED_LONG, iDomain, iDomain, MPI_COMM_WORLD);
-
-#endif
-
- } else {
-
- /*--- If iDomain = rank, we simply copy values into place in memory ---*/
-
- nPointTotal_r[iDomain] = nPointTotal_s[iDomain];
-
- }
-
- /*--- Receive the counts. All processors are sending their counters to
- iDomain up above, so only iDomain needs to perform the recv here from
- all other ranks. ---*/
-
- if (rank == iDomain) {
-
- for (jDomain = 0; jDomain < size; jDomain++) {
-
- /*--- A rank does not communicate with itself through MPI ---*/
-
- if (rank != jDomain) {
-
-#ifdef HAVE_MPI
-
- /*--- Recv the data by probing for the current sender, jDomain,
- first and then receiving the values from it. ---*/
-
- SU2_MPI::Probe(jDomain, rank, MPI_COMM_WORLD, &status);
- SU2_MPI::Recv(&nPointTotal_r[jDomain], 1, MPI_UNSIGNED_LONG, jDomain, rank, MPI_COMM_WORLD, &status);
-
-#endif
-
- }
- }
-
- }
- }
-
- /*--- Wait for the non-blocking sends to complete. ---*/
-
-#ifdef HAVE_MPI
-
- SU2_MPI::Barrier(MPI_COMM_WORLD);
-
-#endif
-
- /*--- Initialize the counters for the larger send buffers (by domain) ---*/
-
- PointTotal_Counter = 0;
-
- for (iDomain = 0; iDomain < nDomain; iDomain++) {
-
- /*--- Set the value of the interior geometry. Initialize counters. ---*/
-
- iPointTotal = 0;
-
- /*--- Load up the actual values into the buffers for sending. ---*/
-
- for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) {
-
- if (config->GetMarker_All_KindBC(iMarker) == INTERFACE_BOUNDARY) {
-
- for (iVertex = 0; iVertex < geometry->nVertex[iMarker]; iVertex++) {
- iPoint = geometry->vertex[iMarker][iVertex]->GetNode();
- jDomain = geometry->vertex[iMarker][iVertex]->GetDonorProcessor();
- if ((iDomain == jDomain) && (geometry->node[iPoint]->GetDomain())) {
-
- iGlobalIndex = geometry->node[iPoint]->GetGlobalIndex();
- jVertex = geometry->vertex[iMarker][iVertex]->GetDonorVertex();
- jMarker = geometry->vertex[iMarker][iVertex]->GetDonorMarker();
-
- for (iVar = 0; iVar < nVar; iVar++) {
- Buffer_Send_AdjVar[(nVar+3)*(PointTotal_Counter+iPointTotal)+iVar] = node[iPoint]->GetSolution(iVar);
- }
- Buffer_Send_AdjVar[(nVar+3)*(PointTotal_Counter+iPointTotal)+(nVar+0)] = su2double(iGlobalIndex);
- Buffer_Send_AdjVar[(nVar+3)*(PointTotal_Counter+iPointTotal)+(nVar+1)] = su2double(jVertex);
- Buffer_Send_AdjVar[(nVar+3)*(PointTotal_Counter+iPointTotal)+(nVar+2)] = su2double(jMarker);
-
- iPointTotal++;
-
- }
-
- }
-
- }
-
- }
-
- /*--- Send the buffers with the geometrical information ---*/
-
- if (iDomain != rank) {
-
-#ifdef HAVE_MPI
-
- /*--- Communicate the coordinates, global index, colors, and element
- date to iDomain with non-blocking sends. ---*/
-
- SU2_MPI::Bsend(&Buffer_Send_AdjVar[PointTotal_Counter*(nVar+3)],
- nPointTotal_s[iDomain]*(nVar+3), MPI_DOUBLE, iDomain,
- iDomain, MPI_COMM_WORLD);
-
-#endif
-
- }
-
- else {
-
- /*--- Allocate local memory for the local recv of the elements ---*/
-
- Buffer_Receive_AdjVar = new su2double[nPointTotal_s[iDomain]*(nVar+3)];
-
- for (iter = 0; iter < nPointTotal_s[iDomain]*(nVar+3); iter++)
- Buffer_Receive_AdjVar[iter] = Buffer_Send_AdjVar[PointTotal_Counter*(nVar+3)+iter];
-
- /*--- Recv the point data from ourselves (same procedure as above) ---*/
-
- for (iPoint = 0; iPoint < nPointTotal_r[iDomain]; iPoint++) {
-
- iGlobal = SU2_TYPE::Int(Buffer_Receive_AdjVar[iPoint*(nVar+3)+(nVar+0)]);
- iVertex = SU2_TYPE::Int(Buffer_Receive_AdjVar[iPoint*(nVar+3)+(nVar+1)]);
- iMarker = SU2_TYPE::Int(Buffer_Receive_AdjVar[iPoint*(nVar+3)+(nVar+2)]);
- for (iVar = 0; iVar < nVar; iVar++)
- iAdjVar[iVar] = Buffer_Receive_AdjVar[iPoint*(nVar+3)+iVar];
-
- for (iVar = 0; iVar < nVar; iVar++)
- SetDonorAdjVar(iMarker, iVertex, iVar, iAdjVar[iVar]);
-
- SetDonorGlobalIndex(iMarker, iVertex, iGlobal);
-
- }
-
- /*--- Delete memory for recv the point stuff ---*/
-
- delete [] Buffer_Receive_AdjVar;
-
- }
-
- /*--- Increment the counters for the send buffers (iDomain loop) ---*/
-
- PointTotal_Counter += iPointTotal;
-
- }
-
- /*--- Wait for the non-blocking sends to complete. ---*/
-
-#ifdef HAVE_MPI
-
- SU2_MPI::Barrier(MPI_COMM_WORLD);
-
-#endif
-
- /*--- The next section begins the recv of all data for the interior
- points/elements in the mesh. First, create the domain structures for
- the points on this rank. First, we recv all of the point data ---*/
-
- for (iDomain = 0; iDomain < size; iDomain++) {
-
- if (rank != iDomain) {
-
-#ifdef HAVE_MPI
-
- /*--- Allocate the receive buffer vector. Send the colors so that we
- know whether what we recv is an owned or halo node. ---*/
-
- Buffer_Receive_AdjVar = new su2double [nPointTotal_r[iDomain]*(nVar+3)];
-
- /*--- Receive the buffers with the coords, global index, and colors ---*/
-
- SU2_MPI::Recv(Buffer_Receive_AdjVar, nPointTotal_r[iDomain]*(nVar+3) , MPI_DOUBLE,
- iDomain, rank, MPI_COMM_WORLD, &status_);
-
-
- /*--- Loop over all of the points that we have recv'd and store the
- coords, global index vertex and markers ---*/
-
- for (iPoint = 0; iPoint < nPointTotal_r[iDomain]; iPoint++) {
-
- iGlobal = SU2_TYPE::Int(Buffer_Receive_AdjVar[iPoint*(nVar+3)+(nVar+0)]);
- iVertex = SU2_TYPE::Int(Buffer_Receive_AdjVar[iPoint*(nVar+3)+(nVar+1)]);
- iMarker = SU2_TYPE::Int(Buffer_Receive_AdjVar[iPoint*(nVar+3)+(nVar+2)]);
- for (iVar = 0; iVar < nVar; iVar++)
- iAdjVar[iVar] = Buffer_Receive_AdjVar[iPoint*(nVar+3)+iVar];
-
- for (iVar = 0; iVar < nVar; iVar++)
- SetDonorAdjVar(iMarker, iVertex, iVar, iAdjVar[iVar]);
-
- SetDonorGlobalIndex(iMarker, iVertex, iGlobal);
-
- }
-
- /*--- Delete memory for recv the point stuff ---*/
-
- delete [] Buffer_Receive_AdjVar;
-
-#endif
-
- }
-
- }
-
- /*--- Wait for the non-blocking sends to complete. ---*/
-
-#ifdef HAVE_MPI
-
- SU2_MPI::Barrier(MPI_COMM_WORLD);
-
-#endif
-
- /*--- Free all of the memory used for communicating points and elements ---*/
-
- delete[] Buffer_Send_AdjVar;
-
- /*--- Release all of the temporary memory ---*/
-
- delete [] nPointTotal_s;
- delete [] nPointTotal_r;
- delete [] iAdjVar;
-
-}
-
void CAdjEulerSolver::SetForceProj_Vector(CGeometry *geometry, CSolver **solver_container, CConfig *config) {
su2double *ForceProj_Vector, x = 0.0, y = 0.0, z = 0.0, *Normal, CD, CL, Cp, CpTarget,
@@ -6006,9 +5697,9 @@ void CAdjNSSolver::Viscous_Sensitivity(CGeometry *geometry, CSolver **solver_con
source_v_1 = 0.0;
if (rotating_frame) {
- Omega[0] = (config->GetRotation_Rate_X(ZONE_0)/config->GetOmega_Ref());
- Omega[1] = (config->GetRotation_Rate_Y(ZONE_0)/config->GetOmega_Ref());
- Omega[2] = (config->GetRotation_Rate_Z(ZONE_0)/config->GetOmega_Ref());
+ for (iDim = 0; iDim < 3; iDim++){
+ Omega[iDim] = config->GetRotation_Rate(iDim)/config->GetOmega_Ref();
+ }
/*--- Calculate momentum source terms as: rho * ( Omega X V ) ---*/
diff --git a/SU2_CFD/src/solver_direct_mean.cpp b/SU2_CFD/src/solver_direct_mean.cpp
index 9ceb6b6f83d0..0bf1abc05f1b 100644
--- a/SU2_CFD/src/solver_direct_mean.cpp
+++ b/SU2_CFD/src/solver_direct_mean.cpp
@@ -2202,322 +2202,6 @@ void CEulerSolver::Set_MPI_Nearfield(CGeometry *geometry, CConfig *config) {
}
-void CEulerSolver::Set_MPI_Interface(CGeometry *geometry, CConfig *config) {
-
- unsigned long iter, iPoint, iVertex, jVertex, iPointTotal,
- Buffer_Send_nPointTotal = 0, iGlobalIndex, iGlobal;
- unsigned short iVar, iMarker, jMarker;
- long nDomain = 0, iDomain, jDomain;
-
-#ifdef HAVE_MPI
-
- /*--- MPI status and request arrays for non-blocking communications ---*/
-
- SU2_MPI::Status status, status_;
-
-
-#endif
-
- /*--- Define buffer vector interior domain ---*/
-
- su2double *Buffer_Send_PrimVar = NULL;
- su2double *iPrimVar = new su2double [nPrimVar];
-
- unsigned long *nPointTotal_s = new unsigned long[size];
- unsigned long *nPointTotal_r = new unsigned long[size];
-
- unsigned long Buffer_Size_PrimVar = 0;
- unsigned long PointTotal_Counter = 0;
-
- /*--- Allocate the memory that we only need if we have MPI support ---*/
-
- su2double *Buffer_Receive_PrimVar = NULL;
-
- /*--- Basic dimensionalization ---*/
-
- nDomain = size;
-
- /*--- This loop gets the array sizes of points for each
- rank to send to each other rank. ---*/
-
- for (iDomain = 0; iDomain < nDomain; iDomain++) {
-
- /*--- Loop over the markers to perform the dimensionalizaton
- of the domain variables ---*/
-
- Buffer_Send_nPointTotal = 0;
-
- /*--- Loop over all of the markers and count the number of each
- type of point and element that needs to be sent. ---*/
-
- for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) {
- if (config->GetMarker_All_KindBC(iMarker) == INTERFACE_BOUNDARY) {
- for (iVertex = 0; iVertex < geometry->nVertex[iMarker]; iVertex++) {
- iPoint = geometry->vertex[iMarker][iVertex]->GetNode();
- jDomain = geometry->vertex[iMarker][iVertex]->GetDonorProcessor();
- if ((iDomain == jDomain) && (geometry->node[iPoint]->GetDomain())) {
- Buffer_Send_nPointTotal++;
- }
- }
- }
- }
-
- /*--- Store the counts on a partition by partition basis. ---*/
-
- nPointTotal_s[iDomain] = Buffer_Send_nPointTotal;
-
- /*--- Total counts for allocating send buffers below ---*/
-
- Buffer_Size_PrimVar += nPointTotal_s[iDomain]*(nPrimVar+3);
-
- }
-
- /*--- Allocate the buffer vectors in the appropiate domain (master, iDomain) ---*/
-
- Buffer_Send_PrimVar = new su2double[Buffer_Size_PrimVar];
-
- /*--- Now that we know the sizes of the point, we can
- allocate and send the information in large chunks to all processors. ---*/
-
- for (iDomain = 0; iDomain < nDomain; iDomain++) {
-
- /*--- A rank does not communicate with itself through MPI ---*/
-
- if (rank != iDomain) {
-
-#ifdef HAVE_MPI
-
- /*--- Communicate the counts to iDomain with non-blocking sends ---*/
-
- SU2_MPI::Bsend(&nPointTotal_s[iDomain], 1, MPI_UNSIGNED_LONG, iDomain, iDomain, MPI_COMM_WORLD);
-
-#endif
-
- } else {
-
- /*--- If iDomain = rank, we simply copy values into place in memory ---*/
-
- nPointTotal_r[iDomain] = nPointTotal_s[iDomain];
-
- }
-
- /*--- Receive the counts. All processors are sending their counters to
- iDomain up above, so only iDomain needs to perform the recv here from
- all other ranks. ---*/
-
- if (rank == iDomain) {
-
- for (jDomain = 0; jDomain < size; jDomain++) {
-
- /*--- A rank does not communicate with itself through MPI ---*/
-
- if (rank != jDomain) {
-
-#ifdef HAVE_MPI
-
- /*--- Recv the data by probing for the current sender, jDomain,
- first and then receiving the values from it. ---*/
-
- SU2_MPI::Recv(&nPointTotal_r[jDomain], 1, MPI_UNSIGNED_LONG, jDomain, rank, MPI_COMM_WORLD, &status);
-
-#endif
-
- }
- }
-
- }
- }
-
- /*--- Wait for the non-blocking sends to complete. ---*/
-
-#ifdef HAVE_MPI
-
- SU2_MPI::Barrier(MPI_COMM_WORLD);
-
-#endif
-
- /*--- Initialize the counters for the larger send buffers (by domain) ---*/
-
- PointTotal_Counter = 0;
-
- for (iDomain = 0; iDomain < nDomain; iDomain++) {
-
- /*--- Set the value of the interior geometry. Initialize counters. ---*/
-
- iPointTotal = 0;
-
- /*--- Load up the actual values into the buffers for sending. ---*/
-
- for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) {
-
- if (config->GetMarker_All_KindBC(iMarker) == INTERFACE_BOUNDARY) {
-
- for (iVertex = 0; iVertex < geometry->nVertex[iMarker]; iVertex++) {
-
- iPoint = geometry->vertex[iMarker][iVertex]->GetNode();
- jDomain = geometry->vertex[iMarker][iVertex]->GetDonorProcessor();
-
- if ((iDomain == jDomain) && (geometry->node[iPoint]->GetDomain())) {
-
- iGlobalIndex = geometry->node[iPoint]->GetGlobalIndex();
- jVertex = geometry->vertex[iMarker][iVertex]->GetDonorVertex();
- jMarker = geometry->vertex[iMarker][iVertex]->GetDonorMarker();
-
- for (iVar = 0; iVar < nPrimVar; iVar++) {
- Buffer_Send_PrimVar[(nPrimVar+3)*(PointTotal_Counter+iPointTotal)+iVar] = node[iPoint]->GetPrimitive(iVar);
- }
- Buffer_Send_PrimVar[(nPrimVar+3)*(PointTotal_Counter+iPointTotal)+(nPrimVar+0)] = su2double(iGlobalIndex);
- Buffer_Send_PrimVar[(nPrimVar+3)*(PointTotal_Counter+iPointTotal)+(nPrimVar+1)] = su2double(jVertex);
- Buffer_Send_PrimVar[(nPrimVar+3)*(PointTotal_Counter+iPointTotal)+(nPrimVar+2)] = su2double(jMarker);
-
- iPointTotal++;
-
- }
-
- }
-
- }
-
- }
-
- /*--- Send the buffers with the geometrical information ---*/
-
- if (iDomain != rank) {
-
-#ifdef HAVE_MPI
-
- /*--- Communicate the coordinates, global index, colors, and element
- date to iDomain with non-blocking sends. ---*/
-
- SU2_MPI::Bsend(&Buffer_Send_PrimVar[PointTotal_Counter*(nPrimVar+3)],
- nPointTotal_s[iDomain]*(nPrimVar+3), MPI_DOUBLE, iDomain,
- iDomain, MPI_COMM_WORLD);
-
-#endif
-
- }
-
- else {
-
- /*--- Allocate local memory for the local recv of the elements ---*/
-
- Buffer_Receive_PrimVar = new su2double[nPointTotal_s[iDomain]*(nPrimVar+3)];
-
- for (iter = 0; iter < nPointTotal_s[iDomain]*(nPrimVar+3); iter++)
- Buffer_Receive_PrimVar[iter] = Buffer_Send_PrimVar[PointTotal_Counter*(nPrimVar+3)+iter];
-
- /*--- Recv the point data from ourselves (same procedure as above) ---*/
-
- for (iPoint = 0; iPoint < nPointTotal_r[iDomain]; iPoint++) {
-
- iGlobal = SU2_TYPE::Int(Buffer_Receive_PrimVar[iPoint*(nPrimVar+3)+(nPrimVar+0)]);
- iVertex = SU2_TYPE::Int(Buffer_Receive_PrimVar[iPoint*(nPrimVar+3)+(nPrimVar+1)]);
- iMarker = SU2_TYPE::Int(Buffer_Receive_PrimVar[iPoint*(nPrimVar+3)+(nPrimVar+2)]);
- for (iVar = 0; iVar < nPrimVar; iVar++)
- iPrimVar[iVar] = Buffer_Receive_PrimVar[iPoint*(nPrimVar+3)+iVar];
-
- if (iVertex < 0.0) cout <<" Negative iVertex (receive)" << endl;
- if (iMarker < 0.0) cout <<" Negative iMarker (receive)" << endl;
-
- for (iVar = 0; iVar < nPrimVar; iVar++)
- SetDonorPrimVar(iMarker, iVertex, iVar, iPrimVar[iVar]);
-
- SetDonorGlobalIndex(iMarker, iVertex, iGlobal);
-
- }
-
- /*--- Delete memory for recv the point stuff ---*/
-
- delete [] Buffer_Receive_PrimVar;
-
- }
-
- /*--- Increment the counters for the send buffers (iDomain loop) ---*/
-
- PointTotal_Counter += iPointTotal;
-
- }
-
- /*--- Wait for the non-blocking sends to complete. ---*/
-
-#ifdef HAVE_MPI
- SU2_MPI::Barrier(MPI_COMM_WORLD);
-#endif
-
- /*--- The next section begins the recv of all data for the interior
- points/elements in the mesh. First, create the domain structures for
- the points on this rank. First, we recv all of the point data ---*/
-
- for (iDomain = 0; iDomain < size; iDomain++) {
-
- if (rank != iDomain) {
-
-#ifdef HAVE_MPI
-
- /*--- Allocate the receive buffer vector. Send the colors so that we
- know whether what we recv is an owned or halo node. ---*/
-
- Buffer_Receive_PrimVar = new su2double [nPointTotal_r[iDomain]*(nPrimVar+3)];
-
- /*--- Receive the buffers with the coords, global index, and colors ---*/
-
- SU2_MPI::Recv(Buffer_Receive_PrimVar, nPointTotal_r[iDomain]*(nPrimVar+3) , MPI_DOUBLE,
- iDomain, rank, MPI_COMM_WORLD, &status_);
-
- /*--- Loop over all of the points that we have recv'd and store the
- coords, global index vertex and markers ---*/
-
- for (iPoint = 0; iPoint < nPointTotal_r[iDomain]; iPoint++) {
-
- iGlobal = SU2_TYPE::Int(Buffer_Receive_PrimVar[iPoint*(nPrimVar+3)+(nPrimVar+0)]);
- iVertex = SU2_TYPE::Int(Buffer_Receive_PrimVar[iPoint*(nPrimVar+3)+(nPrimVar+1)]);
- iMarker = SU2_TYPE::Int(Buffer_Receive_PrimVar[iPoint*(nPrimVar+3)+(nPrimVar+2)]);
- for (iVar = 0; iVar < nPrimVar; iVar++)
- iPrimVar[iVar] = Buffer_Receive_PrimVar[iPoint*(nPrimVar+3)+iVar];
-
- if (iVertex < 0.0) cout <<" Negative iVertex (receive)" << endl;
- if (iMarker < 0.0) cout <<" Negative iMarker (receive)" << endl;
-
- if (iMarker > nMarker) cout << "ERROR" << endl;
- if (iVertex > geometry->nVertex[iMarker]) cout << "ERROR" << endl;
-
- for (iVar = 0; iVar < nPrimVar; iVar++)
- SetDonorPrimVar(iMarker, iVertex, iVar, iPrimVar[iVar]);
-
- SetDonorGlobalIndex(iMarker, iVertex, iGlobal);
-
- }
-
- /*--- Delete memory for recv the point stuff ---*/
-
- delete [] Buffer_Receive_PrimVar;
-
-#endif
-
- }
-
- }
-
- /*--- Wait for the non-blocking sends to complete. ---*/
-
-#ifdef HAVE_MPI
-
- SU2_MPI::Barrier(MPI_COMM_WORLD);
-
-#endif
-
- /*--- Free all of the memory used for communicating points and elements ---*/
-
- delete[] Buffer_Send_PrimVar;
-
- /*--- Release all of the temporary memory ---*/
-
- delete [] nPointTotal_s;
- delete [] nPointTotal_r;
- delete [] iPrimVar;
-
-}
-
void CEulerSolver::SetNondimensionalization(CConfig *config, unsigned short iMesh) {
su2double Temperature_FreeStream = 0.0, Mach2Vel_FreeStream = 0.0, ModVel_FreeStream = 0.0,
@@ -2531,7 +2215,7 @@ void CEulerSolver::SetNondimensionalization(CConfig *config, unsigned short iMes
Temperature_FreeStreamND = 0.0, Gas_ConstantND = 0.0,
Velocity_FreeStreamND[3] = {0.0, 0.0, 0.0}, Viscosity_FreeStreamND = 0.0,
Tke_FreeStreamND = 0.0, Energy_FreeStreamND = 0.0,
- Total_UnstTimeND = 0.0, Delta_UnstTimeND = 0.0, TgammaR = 0.0;
+ Total_UnstTimeND = 0.0, Delta_UnstTimeND = 0.0, TgammaR = 0.0, Heat_Flux_Ref = 0.0;
unsigned short iDim;
@@ -2766,6 +2450,7 @@ void CEulerSolver::SetNondimensionalization(CConfig *config, unsigned short iMes
Time_Ref = Length_Ref/Velocity_Ref; config->SetTime_Ref(Time_Ref);
Omega_Ref = Velocity_Ref/Length_Ref; config->SetOmega_Ref(Omega_Ref);
Force_Ref = config->GetDensity_Ref()*Velocity_Ref*Velocity_Ref*Length_Ref*Length_Ref; config->SetForce_Ref(Force_Ref);
+ Heat_Flux_Ref = Density_Ref*Velocity_Ref*Velocity_Ref*Velocity_Ref; config->SetHeat_Flux_Ref(Heat_Flux_Ref);
Gas_Constant_Ref = Velocity_Ref*Velocity_Ref/config->GetTemperature_Ref(); config->SetGas_Constant_Ref(Gas_Constant_Ref);
Viscosity_Ref = config->GetDensity_Ref()*Velocity_Ref*Length_Ref; config->SetViscosity_Ref(Viscosity_Ref);
Conductivity_Ref = Viscosity_Ref*Gas_Constant_Ref; config->SetConductivity_Ref(Conductivity_Ref);
@@ -3057,8 +2742,8 @@ void CEulerSolver::SetNondimensionalization(CConfig *config, unsigned short iMes
ModelTable.PrintFooter();
if (unsteady){
+ NonDimTableOut << "-- Unsteady conditions" << endl;
NonDimTable.PrintHeader();
- NonDimTableOut << "-- Unsteady conditions" << endl;
NonDimTable << "Total Time" << config->GetTotal_UnstTime() << config->GetTime_Ref() << "s" << config->GetTotal_UnstTimeND();
Unit.str("");
NonDimTable << "Time Step" << config->GetDelta_UnstTime() << config->GetTime_Ref() << "s" << config->GetDelta_UnstTimeND();
@@ -3300,7 +2985,6 @@ void CEulerSolver::Preprocessing(CGeometry *geometry, CSolver **solver_container
bool engine = ((config->GetnMarker_EngineInflow() != 0) || (config->GetnMarker_EngineExhaust() != 0));
bool actuator_disk = ((config->GetnMarker_ActDiskInlet() != 0) || (config->GetnMarker_ActDiskOutlet() != 0));
bool nearfield = (config->GetnMarker_NearFieldBound() != 0);
- bool interface = (config->GetnMarker_InterfaceBound() != 0);
bool fixed_cl = config->GetFixed_CL_Mode();
bool van_albada = config->GetKind_SlopeLimit_Flow() == VAN_ALBADA_EDGE;
unsigned short kind_row_dissipation = config->GetKind_RoeLowDiss();
@@ -3329,10 +3013,6 @@ void CEulerSolver::Preprocessing(CGeometry *geometry, CSolver **solver_container
SetActDisk_BCThrust(geometry, solver_container, config, iMesh, Output);
}
- /*--- Compute Interface MPI ---*/
-
- if (interface) { Set_MPI_Interface(geometry, config); }
-
/*--- Compute NearField MPI ---*/
if (nearfield) { Set_MPI_Nearfield(geometry, config); }
@@ -15396,7 +15076,6 @@ void CNSSolver::Preprocessing(CGeometry *geometry, CSolver **solver_container, C
bool engine = ((config->GetnMarker_EngineInflow() != 0) || (config->GetnMarker_EngineExhaust() != 0));
bool actuator_disk = ((config->GetnMarker_ActDiskInlet() != 0) || (config->GetnMarker_ActDiskOutlet() != 0));
bool nearfield = (config->GetnMarker_NearFieldBound() != 0);
- bool interface = (config->GetnMarker_InterfaceBound() != 0);
bool van_albada = config->GetKind_SlopeLimit_Flow() == VAN_ALBADA_EDGE;
unsigned short kind_row_dissipation = config->GetKind_RoeLowDiss();
bool roe_low_dissipation = (kind_row_dissipation != NO_ROELOWDISS) &&
@@ -15424,10 +15103,6 @@ void CNSSolver::Preprocessing(CGeometry *geometry, CSolver **solver_container, C
SetActDisk_BCThrust(geometry, solver_container, config, iMesh, Output);
}
- /*--- Compute Interface MPI ---*/
-
- if (interface) { Set_MPI_Interface(geometry, config); }
-
/*--- Compute NearField MPI ---*/
if (nearfield) { Set_MPI_Nearfield(geometry, config); }
@@ -16479,7 +16154,7 @@ void CNSSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_container
/*--- Get the specified wall heat flux from config as well as the
wall function treatment.---*/
- Wall_HeatFlux = config->GetWall_HeatFlux(Marker_Tag);
+ Wall_HeatFlux = config->GetWall_HeatFlux(Marker_Tag)/config->GetHeat_Flux_Ref();
// Wall_Function = config->GetWallFunction_Treatment(Marker_Tag);
// if (Wall_Function != NO_WALL_FUNCTION) {
diff --git a/SU2_CFD/src/solver_direct_mean_fem.cpp b/SU2_CFD/src/solver_direct_mean_fem.cpp
index a6bf663b93f5..0a1b82629504 100644
--- a/SU2_CFD/src/solver_direct_mean_fem.cpp
+++ b/SU2_CFD/src/solver_direct_mean_fem.cpp
@@ -3259,9 +3259,8 @@ void CFEM_DG_EulerSolver::Preprocessing(CGeometry *geometry, CSolver **solver_co
if(config->GetGrid_Movement() && !harmonic_balance) {
/*--- Determine the type of grid motion. ---*/
- switch( config->GetKind_GridMovement(0) ) {
+ switch( config->GetKind_GridMovement() ) {
- case MOVING_WALL:
case ROTATING_FRAME:
case STEADY_TRANSLATION: {
diff --git a/SU2_CFD/src/solver_structure.cpp b/SU2_CFD/src/solver_structure.cpp
index cdc752f65884..7986db62575c 100644
--- a/SU2_CFD/src/solver_structure.cpp
+++ b/SU2_CFD/src/solver_structure.cpp
@@ -3652,10 +3652,10 @@ void CSolver::Aeroelastic(CSurfaceMovement *surface_movement, CGeometry *geometr
/*--- Note that the calculation of the forces and the subsequent displacements ...
is only correct for the airfoil that starts at the 0 degree position ---*/
- if (config->GetKind_GridMovement(ZONE_0) == AEROELASTIC_RIGID_MOTION) {
+ if (config->GetKind_GridMovement() == AEROELASTIC_RIGID_MOTION) {
su2double Omega, dt, psi;
dt = config->GetDelta_UnstTimeND();
- Omega = (config->GetRotation_Rate_Z(ZONE_0)/config->GetOmega_Ref());
+ Omega = (config->GetRotation_Rate(2)/config->GetOmega_Ref());
psi = Omega*(dt*ExtIter);
/*--- Correct for the airfoil starting position (This is hardcoded in here) ---*/
diff --git a/SU2_DEF/src/SU2_DEF.cpp b/SU2_DEF/src/SU2_DEF.cpp
index d257a9a43d7e..33caa9d1bc3d 100644
--- a/SU2_DEF/src/SU2_DEF.cpp
+++ b/SU2_DEF/src/SU2_DEF.cpp
@@ -66,6 +66,7 @@ int main(int argc, char *argv[]) {
CSurfaceMovement **surface_movement = NULL;
CVolumetricMovement **grid_movement = NULL;
COutput *output = NULL;
+ CConfig *driver_config = NULL;
/*--- Load in the number of zones and spatial dimensions in the mesh file
(if no config file is specified, default.cfg is used) ---*/
@@ -80,7 +81,7 @@ int main(int argc, char *argv[]) {
CConfig *config = NULL;
config = new CConfig(config_file_name, SU2_DEF);
- nZone = CConfig::GetnZone(config->GetMesh_FileName(), config->GetMesh_FileFormat(), config);
+ nZone = config->GetnZone();
/*--- Definition of the containers per zones ---*/
@@ -88,6 +89,8 @@ int main(int argc, char *argv[]) {
geometry_container = new CGeometry*[nZone];
surface_movement = new CSurfaceMovement*[nZone];
grid_movement = new CVolumetricMovement*[nZone];
+
+ driver_config = NULL;
for (iZone = 0; iZone < nZone; iZone++) {
config_container[iZone] = NULL;
@@ -96,6 +99,12 @@ int main(int argc, char *argv[]) {
grid_movement[iZone] = NULL;
}
+ /*--- Initialize the configuration of the driver ---*/
+ driver_config = new CConfig(config_file_name, SU2_DEF, nZone, false);
+
+ /*--- Initialize a char to store the zone filename ---*/
+ char zone_file_name[MAX_STRING_SIZE];
+
/*--- Loop over all zones to initialize the various classes. In most
cases, nZone is equal to one. This represents the solution of a partial
differential equation on a single block, unstructured mesh. ---*/
@@ -106,8 +115,25 @@ int main(int argc, char *argv[]) {
constructor, the input configuration file is parsed and all options are
read and stored. ---*/
- config_container[iZone] = new CConfig(config_file_name, SU2_DEF, iZone, nZone, 0, true);
+ if (driver_config->GetnConfigFiles() > 0){
+ strcpy(zone_file_name, driver_config->GetConfigFilename(iZone).c_str());
+ config_container[iZone] = new CConfig(driver_config, zone_file_name, SU2_DEF, iZone, nZone, true);
+ }
+ else{
+ config_container[iZone] = new CConfig(driver_config, config_file_name, SU2_DEF, iZone, nZone, true);
+ }
config_container[iZone]->SetMPICommunicator(MPICommunicator);
+ }
+
+ /*--- Set the multizone part of the problem. ---*/
+ if (driver_config->GetMultizone_Problem()){
+ for (iZone = 0; iZone < nZone; iZone++) {
+ /*--- Set the interface markers for multizone ---*/
+ config_container[iZone]->SetMultizone(driver_config, config_container);
+ }
+ }
+
+ for (iZone = 0; iZone < nZone; iZone++) {
/*--- Definition of the geometry class to store the primal grid in the partitioning process. ---*/
diff --git a/SU2_DOT/src/SU2_DOT.cpp b/SU2_DOT/src/SU2_DOT.cpp
index 2237b257f7a6..3f5e17b2abc6 100644
--- a/SU2_DOT/src/SU2_DOT.cpp
+++ b/SU2_DOT/src/SU2_DOT.cpp
@@ -46,7 +46,6 @@ int main(int argc, char *argv[]) {
char config_file_name[MAX_STRING_SIZE], *cstr = NULL;
ofstream Gradient_file;
bool fem_solver = false;
- bool multizone = false;
su2double** Gradient;
unsigned short iDV, iDV_Value;
@@ -87,7 +86,7 @@ int main(int argc, char *argv[]) {
CConfig *config = NULL;
config = new CConfig(config_file_name, SU2_DOT);
- nZone = CConfig::GetnZone(config->GetMesh_FileName(), config->GetMesh_FileFormat(), config);
+ nZone = config->GetnZone();
/*--- Definition of the containers per zones ---*/
@@ -107,14 +106,11 @@ int main(int argc, char *argv[]) {
}
/*--- Initialize the configuration of the driver ---*/
- driver_config = new CConfig(config_file_name, SU2_DOT, ZONE_0, nZone, 0, false);
+ driver_config = new CConfig(config_file_name, SU2_DOT, nZone, false);
/*--- Initialize a char to store the zone filename ---*/
char zone_file_name[MAX_STRING_SIZE];
- /*--- Store a boolean for multizone problems ---*/
- multizone = (driver_config->GetKind_Solver() == MULTIZONE);
-
/*--- Loop over all zones to initialize the various classes. In most
cases, nZone is equal to one. This represents the solution of a partial
differential equation on a single block, unstructured mesh. ---*/
@@ -125,15 +121,31 @@ int main(int argc, char *argv[]) {
constructor, the input configuration file is parsed and all options are
read and stored. ---*/
- if (multizone){
+ if (driver_config->GetnConfigFiles() > 0){
strcpy(zone_file_name, driver_config->GetConfigFilename(iZone).c_str());
- config_container[iZone] = new CConfig(zone_file_name, SU2_DOT, iZone, nZone, 0, true);
+ config_container[iZone] = new CConfig(driver_config, zone_file_name, SU2_DOT, iZone, nZone, true);
}
else{
- config_container[iZone] = new CConfig(config_file_name, SU2_DOT, iZone, nZone, 0, true);
+ config_container[iZone] = new CConfig(driver_config, config_file_name, SU2_DOT, iZone, nZone, true);
}
config_container[iZone]->SetMPICommunicator(MPICommunicator);
+ }
+
+ /*--- Set the multizone part of the problem. ---*/
+ if (driver_config->GetMultizone_Problem()){
+ for (iZone = 0; iZone < nZone; iZone++) {
+ /*--- Set the interface markers for multizone ---*/
+ config_container[iZone]->SetMultizone(driver_config, config_container);
+ }
+ }
+
+ /*--- Loop over all zones to initialize the various classes. In most
+ cases, nZone is equal to one. This represents the solution of a partial
+ differential equation on a single block, unstructured mesh. ---*/
+
+ for (iZone = 0; iZone < nZone; iZone++) {
+
/*--- Determine whether or not the FEM solver is used, which decides the
type of geometry classes that are instantiated. ---*/
fem_solver = ((config_container[iZone]->GetKind_Solver() == FEM_EULER) ||
diff --git a/SU2_GEO/src/SU2_GEO.cpp b/SU2_GEO/src/SU2_GEO.cpp
index 94ba3882ef8c..78e00c57482f 100644
--- a/SU2_GEO/src/SU2_GEO.cpp
+++ b/SU2_GEO/src/SU2_GEO.cpp
@@ -98,7 +98,7 @@ int main(int argc, char *argv[]) {
CConfig *config = NULL;
config = new CConfig(config_file_name, SU2_GEO);
- nZone = CConfig::GetnZone(config->GetMesh_FileName(), config->GetMesh_FileFormat(), config);
+ nZone = config->GetnZone();
/*--- Definition of the containers per zones ---*/
@@ -120,7 +120,7 @@ int main(int argc, char *argv[]) {
constructor, the input configuration file is parsed and all options are
read and stored. ---*/
- config_container[iZone] = new CConfig(config_file_name, SU2_GEO, iZone, nZone, 0, true);
+ config_container[iZone] = new CConfig(config_file_name, SU2_GEO, nZone, true);
config_container[iZone]->SetMPICommunicator(MPICommunicator);
/*--- Definition of the geometry class to store the primal grid in the partitioning process. ---*/
diff --git a/SU2_MSH/src/SU2_MSH.cpp b/SU2_MSH/src/SU2_MSH.cpp
index ada81281dcc6..18ed10d9a7d9 100644
--- a/SU2_MSH/src/SU2_MSH.cpp
+++ b/SU2_MSH/src/SU2_MSH.cpp
@@ -79,7 +79,7 @@ int main(int argc, char *argv[]) {
CConfig *config = NULL;
config = new CConfig(config_file_name, SU2_MSH);
- nZone = CConfig::GetnZone(config->GetMesh_FileName(), config->GetMesh_FileFormat(), config);
+ nZone = config->GetnZone();
/*--- Definition of the containers per zones ---*/
@@ -101,7 +101,7 @@ int main(int argc, char *argv[]) {
constructor, the input configuration file is parsed and all options are
read and stored. ---*/
- config_container[iZone] = new CConfig(config_file_name, SU2_MSH, iZone, nZone, 0, true);
+ config_container[iZone] = new CConfig(config_file_name, SU2_MSH, nZone, true);
config_container[iZone]->SetMPICommunicator(MPICommunicator);
/*--- Definition of the geometry class to store the primal grid in the partitioning process. ---*/
diff --git a/SU2_PY/SU2_CFD.py b/SU2_PY/SU2_CFD.py
index a109833f2b45..8590a9f83cbd 100755
--- a/SU2_PY/SU2_CFD.py
+++ b/SU2_PY/SU2_CFD.py
@@ -91,13 +91,13 @@ def main():
# Initialize the corresponding driver of SU2, this includes solver preprocessing
try:
if (options.nZone == 1) and ( options.fem or options.poisson_equation or options.wave_equation or options.heat_equation ):
- SU2Driver = pysu2.CSinglezoneDriver(options.filename, options.nZone, options.nDim, comm);
+ SU2Driver = pysu2.CSinglezoneDriver(options.filename, options.nZone, comm);
elif options.harmonic_balance:
- SU2Driver = pysu2.CHBDriver(options.filename, options.nZone, options.nDim, comm);
+ SU2Driver = pysu2.CHBDriver(options.filename, options.nZone, comm);
elif (options.nZone == 2) and (options.fsi):
- SU2Driver = pysu2.CMultizoneDriver(options.filename, options.nZone, options.nDim, comm);
+ SU2Driver = pysu2.CMultizoneDriver(options.filename, options.nZone, comm);
else:
- SU2Driver = pysu2.CFluidDriver(options.filename, options.nZone, options.nDim, comm);
+ SU2Driver = pysu2.CFluidDriver(options.filename, options.nZone, comm);
except TypeError as exception:
print('A TypeError occured in pysu2.CDriver : ',exception)
if options.with_MPI == True:
diff --git a/SU2_SOL/src/SU2_SOL.cpp b/SU2_SOL/src/SU2_SOL.cpp
index ab0d7c700dc3..78280dc6a2ca 100644
--- a/SU2_SOL/src/SU2_SOL.cpp
+++ b/SU2_SOL/src/SU2_SOL.cpp
@@ -80,8 +80,7 @@ int main(int argc, char *argv[]) {
CConfig *config = NULL;
config = new CConfig(config_file_name, SU2_SOL);
- if (config->GetKind_Solver() == MULTIZONE) nZone = config->GetnConfigFiles();
- else nZone = CConfig::GetnZone(config->GetMesh_FileName(), config->GetMesh_FileFormat(), config);
+ nZone = config->GetnZone();
/*--- Definition of the containers per zones ---*/
@@ -99,13 +98,13 @@ int main(int argc, char *argv[]) {
}
/*--- Initialize the configuration of the driver ---*/
- driver_config = new CConfig(config_file_name, SU2_SOL, ZONE_0, nZone, 0, false);
+ driver_config = new CConfig(config_file_name, SU2_SOL, nZone, false);
/*--- Initialize a char to store the zone filename ---*/
char zone_file_name[MAX_STRING_SIZE];
/*--- Store a boolean for multizone problems ---*/
- multizone = (driver_config->GetKind_Solver() == MULTIZONE);
+ multizone = (config->GetMultizone_Problem());
/*--- Loop over all zones to initialize the various classes. In most
cases, nZone is equal to one. This represents the solution of a partial
@@ -117,12 +116,12 @@ int main(int argc, char *argv[]) {
constructor, the input configuration file is parsed and all options are
read and stored. ---*/
- if (multizone){
+ if (driver_config->GetnConfigFiles() > 0){
strcpy(zone_file_name, driver_config->GetConfigFilename(iZone).c_str());
- config_container[iZone] = new CConfig(zone_file_name, SU2_SOL, iZone, nZone, 0, true);
+ config_container[iZone] = new CConfig(driver_config, zone_file_name, SU2_SOL, iZone, nZone, true);
}
else{
- config_container[iZone] = new CConfig(config_file_name, SU2_SOL, iZone, nZone, 0, true);
+ config_container[iZone] = new CConfig(driver_config, config_file_name, SU2_SOL, iZone, nZone, true);
}
config_container[iZone]->SetMPICommunicator(MPICommunicator);
@@ -130,7 +129,7 @@ int main(int argc, char *argv[]) {
}
/*--- Set the multizone part of the problem. ---*/
- if (driver_config->GetKind_Solver() == MULTIZONE){
+ if (config->GetMultizone_Problem()){
for (iZone = 0; iZone < nZone; iZone++) {
/*--- Set the interface markers for multizone ---*/
config_container[iZone]->SetMultizone(driver_config, config_container);
diff --git a/TestCases/aeroelastic/aeroelastic_NACA64A010.cfg b/TestCases/aeroelastic/aeroelastic_NACA64A010.cfg
index 0e9763908888..5feb61792eb2 100644
--- a/TestCases/aeroelastic/aeroelastic_NACA64A010.cfg
+++ b/TestCases/aeroelastic/aeroelastic_NACA64A010.cfg
@@ -75,14 +75,7 @@ UNST_TIME= 50.0
UNST_INT_ITER= 100
% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
-%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= YES
-%
-% Type of dynamic mesh (NONE, RIGID_MOTION, DEFORMING, ROTATING_FRAME,
-% MOVING_WALL, FLUID_STRUCTURE, AEROELASTIC, ELASTICITY,
-% EXTERNAL, AEROELASTIC_RIGID_MOTION, GUST)
-GRID_MOVEMENT_KIND= AEROELASTIC
+SURFACE_MOVEMENT= AEROELASTIC
%
% Motion mach number (non-dimensional). Used for initializing a viscous flow
% with the Reynolds number and for computing force coeffs. with dynamic meshes.
diff --git a/TestCases/coupled_cht/incompressible/config.cfg b/TestCases/coupled_cht/incompressible/config.cfg
index a39d6d04b5eb..4973ca891963 100644
--- a/TestCases/coupled_cht/incompressible/config.cfg
+++ b/TestCases/coupled_cht/incompressible/config.cfg
@@ -8,8 +8,7 @@
% File Version 6.0.1 "Falcon" %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-PHYSICAL_PROBLEM= MULTIZONE
+PHYSICAL_PROBLEM= MULTIPHYSICS
CONFIG_LIST = (configFlow.cfg, configSolid.cfg)
diff --git a/TestCases/disc_adj_euler/arina2k/Arina2KRS.cfg b/TestCases/disc_adj_euler/arina2k/Arina2KRS.cfg
index 75a1d7222629..181b3bc0ffa5 100644
--- a/TestCases/disc_adj_euler/arina2k/Arina2KRS.cfg
+++ b/TestCases/disc_adj_euler/arina2k/Arina2KRS.cfg
@@ -117,75 +117,6 @@ CRITICAL_PRESSURE= 4599200.0
% Acentric factor (0.035 (air))
ACENTRIC_FACTOR= 0.01142
%
-% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
-%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= NO
-%
-% Type of dynamic mesh (NONE, RIGID_MOTION, DEFORMING, ROTATING_FRAME,
-% MOVING_WALL, STEADY_TRANSLATION, FLUID_STRUCTURE,
-% AEROELASTIC, ELASTICITY, EXTERNAL,
-% AEROELASTIC_RIGID_MOTION, GUST)
-GRID_MOVEMENT_KIND= DEFORMING
-%
-% Motion mach number (non-dimensional). Used for initializing a viscous flow
-% with the Reynolds number and for computing force coeffs. with dynamic meshes.
-MACH_MOTION= 0.8
-%
-% Moving wall boundary marker(s) (NONE = no marker, ignored for RIGID_MOTION)
-MARKER_MOVING= ( NONE )
-%
-% Coordinates of the motion origin
-MOTION_ORIGIN_X= 0.25
-MOTION_ORIGIN_Y= 0.0
-MOTION_ORIGIN_Z= 0.0
-%
-% Angular velocity vector (rad/s) about the motion origin
-ROTATION_RATE_X = 0.0
-ROTATION_RATE_Y = 0.0
-ROTATION_RATE_Z = 0.0
-%
-% Pitching angular freq. (rad/s) about the motion origin
-PITCHING_OMEGA_X= 0.0
-PITCHING_OMEGA_Y= 0.0
-PITCHING_OMEGA_Z= 106.69842
-%
-% Pitching amplitude (degrees) about the motion origin
-PITCHING_AMPL_X= 0.0
-PITCHING_AMPL_Y= 0.0
-PITCHING_AMPL_Z= 1.01
-%
-% Pitching phase offset (degrees) about the motion origin
-PITCHING_PHASE_X= 0.0
-PITCHING_PHASE_Y= 0.0
-PITCHING_PHASE_Z= 0.0
-%
-% Translational velocity (m/s or ft/s) in the x, y, & z directions
-TRANSLATION_RATE_X = 0.0
-TRANSLATION_RATE_Y = 0.0
-TRANSLATION_RATE_Z = 0.0
-%
-% Plunging angular freq. (rad/s) in x, y, & z directions
-PLUNGING_OMEGA_X= 0.0
-PLUNGING_OMEGA_Y= 0.0
-PLUNGING_OMEGA_Z= 0.0
-%
-% Plunging amplitude (m or ft) in x, y, & z directions
-PLUNGING_AMPL_X= 0.0
-PLUNGING_AMPL_Y= 0.0
-PLUNGING_AMPL_Z= 0.0
-%
-% Move Motion Origin for marker moving (1 or 0)
-MOVE_MOTION_ORIGIN = 0
-
-WIND_GUST = NO
-GUST_TYPE = NONE
-GUST_DIR = Y_DIR
-GUST_WAVELENGTH= 10.0
-GUST_PERIODS= 1.0
-GUST_AMPL= 10.0
-GUST_BEGIN_TIME= 0.0
-GUST_BEGIN_LOC= 0.0
% ------------------------ SUPERSONIC SIMULATION ------------------------------%
% Evaluate equivalent area on the Near-Field (NO, YES)
@@ -211,9 +142,6 @@ MARKER_INTERNAL= ( NONE )
% Near-Field boundary marker(s) (NONE = no marker)
MARKER_NEARFIELD= ( NONE )
%
-% Zone interface boundary marker(s) (NONE = no marker)
-MARKER_INTERFACE= ( NONE )
-%
% Inlet boundary type (TOTAL_CONDITIONS, MASS_FLOW)
INLET_TYPE= TOTAL_CONDITIONS
%
diff --git a/TestCases/disc_adj_fsi/Airfoil_2d/config.cfg b/TestCases/disc_adj_fsi/Airfoil_2d/config.cfg
index f49c81e89555..a5a721634e71 100755
--- a/TestCases/disc_adj_fsi/Airfoil_2d/config.cfg
+++ b/TestCases/disc_adj_fsi/Airfoil_2d/config.cfg
@@ -2,6 +2,7 @@
PHYSICAL_PROBLEM= FLUID_STRUCTURE_INTERACTION
MATH_PROBLEM= DISCRETE_ADJOINT
%
+SURFACE_MOVEMENT= FLUID_STRUCTURE_STATIC
FSI_FLUID_PROBLEM= EULER
KIND_TURB_MODEL= NONE
FSI_STRUCTURAL_PROBLEM= ELASTICITY
diff --git a/TestCases/disc_adj_fsi/configAD_fsi.cfg b/TestCases/disc_adj_fsi/configAD_fsi.cfg
index b0e12dae8e09..59de7a94cd0d 100644
--- a/TestCases/disc_adj_fsi/configAD_fsi.cfg
+++ b/TestCases/disc_adj_fsi/configAD_fsi.cfg
@@ -25,6 +25,8 @@ ELECTRIC_FIELD_MOD = 20E5
OBJECTIVE_FUNCTION = REFERENCE_GEOMETRY
+
+SURFACE_MOVEMENT= FLUID_STRUCTURE_STATIC
REFERENCE_GEOMETRY = YES
REFERENCE_GEOMETRY_FILENAME = reference_geometry.dat
REFERENCE_GEOMETRY_FORMAT = SU2
@@ -129,7 +131,6 @@ DEFORM_LINEAR_SOLVER = CONJUGATE_GRADIENT
DEFORM_LINEAR_SOLVER_PREC = JACOBI
DEFORM_LINEAR_SOLVER_ERROR = 1E-5
DEFORM_LINEAR_SOLVER_ITER = 5000
-DEFORM_CONSOLE_OUTPUT = NO
NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES
CFL_NUMBER= 1.0
diff --git a/TestCases/disc_adj_rans/cylinder/cylinder.cfg b/TestCases/disc_adj_rans/cylinder/cylinder.cfg
index b6dc5acff552..8514900b0b28 100644
--- a/TestCases/disc_adj_rans/cylinder/cylinder.cfg
+++ b/TestCases/disc_adj_rans/cylinder/cylinder.cfg
@@ -332,7 +332,6 @@ DEFORM_NONLINEAR_ITER= 1
DEFORM_LINEAR_SOLVER_ERROR= 1E-14
DEFORM_STIFFNESS_TYPE= INVERSE_VOLUME
% Print the residuals during mesh deformation to the console (YES, NO)
-MARKER_MOVING=(Cylinder)
DEFORM_CONSOLE_OUTPUT= YES
% --------------------- OPTIMAL SHAPE DESIGN DEFINITION -----------------------%
%
diff --git a/TestCases/disc_adj_rans/cylinder_DT_1ST/cylinder.cfg b/TestCases/disc_adj_rans/cylinder_DT_1ST/cylinder.cfg
index 5b9d06f74b0f..950ca2a783bd 100644
--- a/TestCases/disc_adj_rans/cylinder_DT_1ST/cylinder.cfg
+++ b/TestCases/disc_adj_rans/cylinder_DT_1ST/cylinder.cfg
@@ -338,7 +338,6 @@ DEFORM_NONLINEAR_ITER= 1
DEFORM_LINEAR_SOLVER_ERROR= 1E-14
DEFORM_STIFFNESS_TYPE= INVERSE_VOLUME
% Print the residuals during mesh deformation to the console (YES, NO)
-MARKER_MOVING=(Cylinder)
DEFORM_CONSOLE_OUTPUT= YES
% --------------------- OPTIMAL SHAPE DESIGN DEFINITION -----------------------%
%
diff --git a/TestCases/fea_fsi/Airfoil_RBF/config.cfg b/TestCases/fea_fsi/Airfoil_RBF/config.cfg
index 302d628890d3..68e2ac540be6 100755
--- a/TestCases/fea_fsi/Airfoil_RBF/config.cfg
+++ b/TestCases/fea_fsi/Airfoil_RBF/config.cfg
@@ -8,7 +8,7 @@
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-PHYSICAL_PROBLEM= MULTIZONE
+PHYSICAL_PROBLEM= MULTIPHYSICS
CONFIG_LIST = (configFlow.cfg, configFEA.cfg)
diff --git a/TestCases/fea_fsi/Airfoil_RBF/configFlow.cfg b/TestCases/fea_fsi/Airfoil_RBF/configFlow.cfg
index 782388026e41..35376c619b2a 100644
--- a/TestCases/fea_fsi/Airfoil_RBF/configFlow.cfg
+++ b/TestCases/fea_fsi/Airfoil_RBF/configFlow.cfg
@@ -21,8 +21,6 @@ PHYSICAL_PROBLEM= EULER
MATH_PROBLEM= DIRECT
KIND_TURB_MODEL= NONE
-GRID_MOVEMENT = YES
-GRID_MOVEMENT_KIND = FLUID_STRUCTURE_STATIC
MULTIZONE_MESH = NO
INNER_ITER= 60
%
diff --git a/TestCases/fea_fsi/WallChannel_2d/configFSI.cfg b/TestCases/fea_fsi/WallChannel_2d/configFSI.cfg
index 7bbf47c3c182..4b038fc8e757 100644
--- a/TestCases/fea_fsi/WallChannel_2d/configFSI.cfg
+++ b/TestCases/fea_fsi/WallChannel_2d/configFSI.cfg
@@ -5,7 +5,7 @@
% Institution: Imperial College London %
% Date: 2016.02.01 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-PHYSICAL_PROBLEM= MULTIZONE
+PHYSICAL_PROBLEM= MULTIPHYSICS
CONFIG_LIST = (configFlow.cfg, configFEA.cfg)
diff --git a/TestCases/fea_fsi/WallChannel_2d/configFSI_2D.cfg b/TestCases/fea_fsi/WallChannel_2d/configFSI_2D.cfg
index 06a4958a4362..4284eed9cdca 100644
--- a/TestCases/fea_fsi/WallChannel_2d/configFSI_2D.cfg
+++ b/TestCases/fea_fsi/WallChannel_2d/configFSI_2D.cfg
@@ -5,6 +5,8 @@
% Institution: Imperial College London %
% Date: 2016.02.01 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+MULTIZONE=YES
+SURFACE_MOVEMENT=FLUID_STRUCTURE
PHYSICAL_PROBLEM= FLUID_STRUCTURE_INTERACTION
FSI_FLUID_PROBLEM = NAVIER_STOKES
FSI_STRUCTURAL_PROBLEM = ELASTICITY
diff --git a/TestCases/fea_fsi/WallChannel_2d/configFlow.cfg b/TestCases/fea_fsi/WallChannel_2d/configFlow.cfg
index 1e76daae45da..842a2f34d9f7 100644
--- a/TestCases/fea_fsi/WallChannel_2d/configFlow.cfg
+++ b/TestCases/fea_fsi/WallChannel_2d/configFlow.cfg
@@ -7,9 +7,8 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
PHYSICAL_PROBLEM= NAVIER_STOKES
-GRID_MOVEMENT = YES
-GRID_MOVEMENT_KIND = FLUID_STRUCTURE
-
+SURFACE_MOVEMENT = FLUID_STRUCTURE
+MARKER_MOVING=(wallUpwF, wallDownF, wallUpperF)
UNST_INT_ITER= 50
INNER_ITER=50
diff --git a/TestCases/gust/inv_gust_NACA0012.cfg b/TestCases/gust/inv_gust_NACA0012.cfg
index 8ffe172b5c85..5dc0c92ba1a7 100644
--- a/TestCases/gust/inv_gust_NACA0012.cfg
+++ b/TestCases/gust/inv_gust_NACA0012.cfg
@@ -73,20 +73,14 @@ UNST_INT_ITER= 100
% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= YES
-%
% Type of dynamic mesh (NONE, RIGID_MOTION, DEFORMING, ROTATING_FRAME,
% MOVING_WALL, FLUID_STRUCTURE, AEROELASTIC, ELASTICITY,
% EXTERNAL, AEROELASTIC_RIGID_MOTION)
-GRID_MOVEMENT_KIND= GUST
+GRID_MOVEMENT= GUST
%
% Motion mach number (non-dimensional). Used for initializing a viscous flow
% with the Reynolds number and for computing force coeffs. with dynamic meshes.
MACH_MOTION= 0.2
-%
-% Moving wall boundary marker(s) (NONE = no marker, ignored for RIGID_MOTION)
-MARKER_MOVING= ( NONE )
% --------------------------- GUST SIMULATION ---------------------------------%
%
diff --git a/TestCases/harmonic_balance/HB.cfg b/TestCases/harmonic_balance/HB.cfg
index 06143a558d08..e6cea04ffb00 100644
--- a/TestCases/harmonic_balance/HB.cfg
+++ b/TestCases/harmonic_balance/HB.cfg
@@ -51,24 +51,14 @@ OMEGA_HB = [0,106.69842,-106.69842]
% Number of internal iterations (dual time method)
%UNST_INT_ITER= 100
%
-% Mesh motion for unsteady simulations (NO, YES)
-GRID_MOVEMENT= YES
-%
% Type of mesh motion (NONE, FLUTTER, RIGID_ROTATION, RIGID_PITCHING)
-GRID_MOVEMENT_KIND= RIGID_MOTION
+GRID_MOVEMENT= RIGID_MOTION
%
-MOTION_ORIGIN_X= ( 0.248 )
-MOTION_ORIGIN_Y= ( 0.0 )
-MOTION_ORIGIN_Z= ( 0.0 )
-
-PITCHING_OMEGA_X= ( 0.0 )
-PITCHING_OMEGA_Y= ( 0.0 )
-PITCHING_OMEGA_Z= ( 106.69842 )
+MOTION_ORIGIN= ( 0.248 0.0 0.0 )
-PITCHING_AMPL_X= ( 0.0 )
-PITCHING_AMPL_Y= ( 0.0 )
-PITCHING_AMPL_Z= ( 1.01 )
+PITCHING_OMEGA= ( 0.0 0.0 106.69842)
+PITCHING_AMPL= ( 0.0 0.0 1.01 )
% ----------- COMPRESSIBLE AND INCOMPRESSIBLE FREE-STREAM DEFINITION ----------%
%
diff --git a/TestCases/harmonic_balance/hb_rans_preconditioning/davis.cfg b/TestCases/harmonic_balance/hb_rans_preconditioning/davis.cfg
index 0c9d3f18cec3..e4ff14bc2e9f 100644
--- a/TestCases/harmonic_balance/hb_rans_preconditioning/davis.cfg
+++ b/TestCases/harmonic_balance/hb_rans_preconditioning/davis.cfg
@@ -42,23 +42,15 @@ HB_PERIOD= 0.057465
% List of frequencies to be resolved for harmonic balance method
OMEGA_HB = [0,109.339, 218.678, 328.017,-109.339, -218.678, -328.017]
%
-% Mesh motion for unsteady simulations (NO, YES)
-GRID_MOVEMENT= YES
%
% Type of mesh motion (NONE, FLUTTER, RIGID_ROTATION, RIGID_PITCHING)
-GRID_MOVEMENT_KIND= RIGID_MOTION
+GRID_MOVEMENT= RIGID_MOTION
%
-MOTION_ORIGIN_X= ( 0.25 )
-MOTION_ORIGIN_Y= ( 0.0 )
-MOTION_ORIGIN_Z= ( 0.0 )
+MOTION_ORIGIN= ( 0.25 0.0 0.0)
-PITCHING_OMEGA_X= ( 0.0 )
-PITCHING_OMEGA_Y= ( 0.0 )
-PITCHING_OMEGA_Z= ( 109.933 )
+PITCHING_OMEGA= ( 0.0 0.0 109.933 )
-PITCHING_AMPL_X= ( 0.0 )
-PITCHING_AMPL_Y= ( 0.0 )
-PITCHING_AMPL_Z= ( 1.01 )
+PITCHING_AMPL= ( 0.0 0.0 1.01 )
% ----------- COMPRESSIBLE AND INCOMPRESSIBLE FREE-STREAM DEFINITION ----------%
diff --git a/TestCases/moving_wall/cavity/lam_cavity.cfg b/TestCases/moving_wall/cavity/lam_cavity.cfg
index e17130f229fe..cb09da2cd3e1 100644
--- a/TestCases/moving_wall/cavity/lam_cavity.cfg
+++ b/TestCases/moving_wall/cavity/lam_cavity.cfg
@@ -47,13 +47,10 @@ REYNOLDS_LENGTH= 1.0
% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= YES
-%
% Type of dynamic mesh (NONE, RIGID_MOTION, DEFORMING, ROTATING_FRAME,
% MOVING_WALL, FLUID_STRUCTURE, AEROELASTIC, ELASTICITY,
% EXTERNAL)
-GRID_MOVEMENT_KIND= MOVING_WALL
+SURFACE_MOVEMENT= MOVING_WALL
%
% Motion mach number (non-dimensional). Used for initializing a viscous flow
% with the Reynolds number and for computing force coeffs. with dynamic meshes.
@@ -63,9 +60,7 @@ MACH_MOTION= 0.1
MARKER_MOVING= ( upper )
%
% Translational velocity (m/s) in the x, y, & z directions
-TRANSLATION_RATE_X= 33.179
-TRANSLATION_RATE_Y= 0.0
-TRANSLATION_RATE_Z= 0.0
+SURFACE_TRANSLATION_RATE= 33.179 0.0 0.0
% ---------------------- REFERENCE VALUE DEFINITION ---------------------------%
%
diff --git a/TestCases/moving_wall/spinning_cylinder/spinning_cylinder.cfg b/TestCases/moving_wall/spinning_cylinder/spinning_cylinder.cfg
index 14c007e09743..ebd3b0c9dc4a 100644
--- a/TestCases/moving_wall/spinning_cylinder/spinning_cylinder.cfg
+++ b/TestCases/moving_wall/spinning_cylinder/spinning_cylinder.cfg
@@ -62,12 +62,9 @@ UNST_INT_ITER= 200
% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= YES
-%
% Type of dynamic mesh (NONE, RIGID_MOTION, DEFORMING, ROTATING_FRAME,
% MOVING_WALL, FLUID_STRUCTURE, AEROELASTIC, EXTERNAL)
-GRID_MOVEMENT_KIND= MOVING_WALL
+SURFACE_MOVEMENT= MOVING_WALL
%
% Motion mach number (non-dimensional). Used for intitializing a viscous flow
% with the Reynolds number and for computing force coeffs. with dynamic meshes.
@@ -77,20 +74,10 @@ MACH_MOTION= 0.1
MARKER_MOVING= ( cylinder )
%
% Coordinates of the motion origin
-MOTION_ORIGIN_X= 0.5
-MOTION_ORIGIN_Y= 0.0
-MOTION_ORIGIN_Z= 0.0
+SURFACE_MOTION_ORIGIN= 0.5 0.0 0.0
%
% Angular velocity vector (rad/s) about the motion origin
-ROTATION_RATE_X = 0.0
-ROTATION_RATE_Y = 0.0
-ROTATION_RATE_Z = -199.0738
-%
-% Translational velocity (m/s) in the x, y, & z directions
-TRANSLATION_RATE_X = 0.0
-TRANSLATION_RATE_Y = 0.0
-TRANSLATION_RATE_Z = 0.0
-
+SURFACE_ROTATION_RATE = 0.0 0.0 -199.0738
% ---------------------- REFERENCE VALUE DEFINITION ---------------------------%
%
% Reference origin for moment computation
diff --git a/TestCases/optimization_rans/pitching_naca64a010/turb_NACA64A010.cfg b/TestCases/optimization_rans/pitching_naca64a010/turb_NACA64A010.cfg
index 052c3a7f14bc..cf289b972fb9 100644
--- a/TestCases/optimization_rans/pitching_naca64a010/turb_NACA64A010.cfg
+++ b/TestCases/optimization_rans/pitching_naca64a010/turb_NACA64A010.cfg
@@ -47,29 +47,20 @@ UNST_INT_ITER= 2000
% Direct iteration number at which to begin unsteady adjoint
UNST_ADJOINT_ITER= 251
%
-% Mesh motion for unsteady simulations (NO, YES)
-GRID_MOVEMENT= YES
-%
% Type of mesh motion (NONE, FLUTTER, RIGID_MOTION, FLUID_STRUCTURE)
-GRID_MOVEMENT_KIND= RIGID_MOTION
+GRID_MOVEMENT= RIGID_MOTION
%
% Mach number (non-dimensional, based on the mesh velocity and freestream vals.)
MACH_MOTION= 0.796
%
% Coordinates of the rigid motion origin
-MOTION_ORIGIN_X= 0.248
-MOTION_ORIGIN_Y= 0.0
-MOTION_ORIGIN_Z= 0.0
+MOTION_ORIGIN= 0.248 0.0 0.0
%
% Pitching angular freq. (rad/s) about x, y, & z axes (RIGID_MOTION only)
-PITCHING_OMEGA_X= 0.0
-PITCHING_OMEGA_Y= 0.0
-PITCHING_OMEGA_Z= 106.69842
+PITCHING_OMEGA= 0.0 0.0 106.69842
%
% Pitching amplitude (degrees) about x, y, & z axes (RIGID_MOTION only)
-PITCHING_AMPL_X= 0.0
-PITCHING_AMPL_Y= 0.0
-PITCHING_AMPL_Z= 1.01
+PITCHING_AMPL= 0.0 0.0 1.01
%
% ----------- COMPRESSIBLE AND INCOMPRESSIBLE FREE-STREAM DEFINITION ----------%
diff --git a/TestCases/optimization_rans/pitching_oneram6/turb_ONERAM6.cfg b/TestCases/optimization_rans/pitching_oneram6/turb_ONERAM6.cfg
index 827eb15d229a..79fa0755557e 100644
--- a/TestCases/optimization_rans/pitching_oneram6/turb_ONERAM6.cfg
+++ b/TestCases/optimization_rans/pitching_oneram6/turb_ONERAM6.cfg
@@ -67,32 +67,22 @@ UNST_INT_ITER= 350
UNST_ADJOINT_ITER= 176
% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
-%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= YES
-%
% Type of dynamic mesh (NONE, RIGID_MOTION, DEFORMING, ROTATING_FRAME,
% MOVING_WALL, FLUID_STRUCTURE, AEROELASTIC, EXTERNAL)
-GRID_MOVEMENT_KIND= RIGID_MOTION
+GRID_MOVEMENT= RIGID_MOTION
%
% Motion mach number (non-dimensional). Used for intitializing a viscous flow
% with the Reynolds number and for computing force coeffs. with dynamic meshes.
MACH_MOTION= 0.8395
%
% Coordinates of the motion origin
-MOTION_ORIGIN_X= 0.201475
-MOTION_ORIGIN_Y= 0.0
-MOTION_ORIGIN_Z= 0.0
+MOTION_ORIGIN= 0.201475 0.0 0.0
%
% Pitching angular freq. (rad/s) about x, y, & z axes
-PITCHING_OMEGA_X= 0.0
-PITCHING_OMEGA_Y= 116.26733689
-PITCHING_OMEGA_Z= 0.0
+PITCHING_OMEGA= 0.0 116.26733689 0.0
%
% Pitching amplitude (degrees) about x, y, & z axes
-PITCHING_AMPL_X= 0.0
-PITCHING_AMPL_Y= 2.5
-PITCHING_AMPL_Z= 0.0
+PITCHING_AMPL= 0.0 2.5 0.0
% ---------------------- REFERENCE VALUE DEFINITION ---------------------------%
%
diff --git a/TestCases/py_wrapper/flatPlate_rigidMotion/flatPlate_rigidMotion_Conf.cfg b/TestCases/py_wrapper/flatPlate_rigidMotion/flatPlate_rigidMotion_Conf.cfg
index b3f01df5408d..964eed56a684 100644
--- a/TestCases/py_wrapper/flatPlate_rigidMotion/flatPlate_rigidMotion_Conf.cfg
+++ b/TestCases/py_wrapper/flatPlate_rigidMotion/flatPlate_rigidMotion_Conf.cfg
@@ -179,15 +179,11 @@ UNST_INT_ITER= 10
UNST_RESTART_ITER= 0
% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
-%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= YES
-%
% Type of dynamic mesh (NONE, RIGID_MOTION, DEFORMING, ROTATING_FRAME,
% MOVING_WALL, STEADY_TRANSLATION, FLUID_STRUCTURE,
% AEROELASTIC, ELASTICITY, EXTERNAL,
% AEROELASTIC_RIGID_MOTION, GUST)
-GRID_MOVEMENT_KIND= FLUID_STRUCTURE
+SURFACE_MOVEMENT= FLUID_STRUCTURE
%
% Motion mach number (non-dimensional). Used for initializing a viscous flow
% with the Reynolds number and for computing force coeffs. with dynamic meshes.
@@ -197,44 +193,7 @@ MACH_MOTION= 0.03059
MARKER_MOVING= ( plate )
%
% Coordinates of the motion origin
-MOTION_ORIGIN_X= -0.0028
-MOTION_ORIGIN_Y= 0.0
-MOTION_ORIGIN_Z= 0.0
-%
-% Angular velocity vector (rad/s) about the motion origin
-ROTATION_RATE_X = 0.0
-ROTATION_RATE_Y = 0.0
-ROTATION_RATE_Z = 0.0
-%
-% Pitching angular freq. (rad/s) about the motion origin
-PITCHING_OMEGA_X= 0.0
-PITCHING_OMEGA_Y= 0.0
-PITCHING_OMEGA_Z= 0.0
-%
-% Pitching amplitude (degrees) about the motion origin
-PITCHING_AMPL_X= 0.0
-PITCHING_AMPL_Y= 0.0
-PITCHING_AMPL_Z= 0.0
-%
-% Pitching phase offset (degrees) about the motion origin
-PITCHING_PHASE_X= 0.0
-PITCHING_PHASE_Y= 0.0
-PITCHING_PHASE_Z= 0.0
-%
-% Translational velocity (m/s) in the x, y, & z directions
-TRANSLATION_RATE_X = 0.0
-TRANSLATION_RATE_Y = 0.0
-TRANSLATION_RATE_Z = 0.0
-%
-% Plunging angular freq. (rad/s) in x, y, & z directions
-PLUNGING_OMEGA_X= 0.0
-PLUNGING_OMEGA_Y= 0.0
-PLUNGING_OMEGA_Z= 0.0
-%
-% Plunging amplitude (m) in x, y, & z directions
-PLUNGING_AMPL_X= 0.0
-PLUNGING_AMPL_Y= 0.0
-PLUNGING_AMPL_Z= 0.0
+SURFACE_MOTION_ORIGIN= -0.0028 0.0 0.0
%
% Move Motion Origin for marker moving (1 or 0)
MOVE_MOTION_ORIGIN = 1
@@ -498,6 +457,7 @@ VISUALIZE_VOLUME_DEF= NO
% Number of total iterations
EXT_ITER= 999999
%
+ITER= 10
% Convergence criteria (CAUCHY, RESIDUAL)
%
CONV_CRITERIA= CAUCHY
diff --git a/TestCases/py_wrapper/flatPlate_rigidMotion/launch_flatPlate_rigidMotion.py b/TestCases/py_wrapper/flatPlate_rigidMotion/launch_flatPlate_rigidMotion.py
index bd9cf18389c2..11bde132c027 100755
--- a/TestCases/py_wrapper/flatPlate_rigidMotion/launch_flatPlate_rigidMotion.py
+++ b/TestCases/py_wrapper/flatPlate_rigidMotion/launch_flatPlate_rigidMotion.py
@@ -99,13 +99,13 @@ def main():
# Initialize the corresponding driver of SU2, this includes solver preprocessing
try:
if (options.nZone == 1) and ( options.fem or options.poisson_equation or options.wave_equation or options.heat_equation ):
- SU2Driver = pysu2.CGeneralDriver(options.filename, options.nZone, options.nDim, comm);
+ SU2Driver = pysu2.CSinglezoneDriver(options.filename, options.nZone, comm);
elif options.harmonic_balance:
- SU2Driver = pysu2.CHBDriver(options.filename, options.nZone, options.nDim, comm);
+ SU2Driver = pysu2.CHBDriver(options.filename, options.nZone, comm);
elif (options.nZone == 2) and (options.fsi):
- SU2Driver = pysu2.CFSIDriver(options.filename, options.nZone, options.nDim, comm);
+ SU2Driver = pysu2.CFSIDriver(options.filename, options.nZone, comm);
else:
- SU2Driver = pysu2.CFluidDriver(options.filename, options.nZone, options.nDim, comm);
+ SU2Driver = pysu2.CSinglezoneDriver(options.filename, options.nZone, comm);
except TypeError as exception:
print('A TypeError occured in pysu2.CDriver : ',exception)
if options.with_MPI == True:
diff --git a/TestCases/py_wrapper/flatPlate_unsteady_CHT/launch_unsteady_CHT_FlatPlate.py b/TestCases/py_wrapper/flatPlate_unsteady_CHT/launch_unsteady_CHT_FlatPlate.py
index 5e52fd140f19..4fa5ac0d0a11 100755
--- a/TestCases/py_wrapper/flatPlate_unsteady_CHT/launch_unsteady_CHT_FlatPlate.py
+++ b/TestCases/py_wrapper/flatPlate_unsteady_CHT/launch_unsteady_CHT_FlatPlate.py
@@ -98,13 +98,13 @@ def main():
# Initialize the corresponding driver of SU2, this includes solver preprocessing
try:
if (options.nZone == 1) and ( options.fem or options.poisson_equation or options.wave_equation or options.heat_equation ):
- SU2Driver = pysu2.CGeneralDriver(options.filename, options.nZone, options.nDim, comm);
+ SU2Driver = pysu2.CGeneralDriver(options.filename, options.nZone, comm);
elif options.harmonic_balance:
- SU2Driver = pysu2.CHBDriver(options.filename, options.nZone, options.nDim, comm);
+ SU2Driver = pysu2.CHBDriver(options.filename, options.nZone, comm);
elif (options.nZone == 2) and (options.fsi):
- SU2Driver = pysu2.CFSIDriver(options.filename, options.nZone, options.nDim, comm);
+ SU2Driver = pysu2.CFSIDriver(options.filename, options.nZone, comm);
else:
- SU2Driver = pysu2.CFluidDriver(options.filename, options.nZone, options.nDim, comm);
+ SU2Driver = pysu2.CFluidDriver(options.filename, options.nZone, comm);
except TypeError as exception:
print('A TypeError occured in pysu2.CDriver : ',exception)
if options.with_MPI == True:
diff --git a/TestCases/py_wrapper/flatPlate_unsteady_CHT/unsteady_CHT_FlatPlate_Conf.cfg b/TestCases/py_wrapper/flatPlate_unsteady_CHT/unsteady_CHT_FlatPlate_Conf.cfg
index 353cd6c785a7..a128455c95c2 100644
--- a/TestCases/py_wrapper/flatPlate_unsteady_CHT/unsteady_CHT_FlatPlate_Conf.cfg
+++ b/TestCases/py_wrapper/flatPlate_unsteady_CHT/unsteady_CHT_FlatPlate_Conf.cfg
@@ -176,68 +176,6 @@ UNST_CFL_NUMBER= 0.0
UNST_INT_ITER= 10
%
% Iteration number to begin unsteady restarts
-UNST_RESTART_ITER= 0
-
-% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
-%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= NO
-%
-% Type of dynamic mesh (NONE, RIGID_MOTION, DEFORMING, ROTATING_FRAME,
-% MOVING_WALL, STEADY_TRANSLATION, FLUID_STRUCTURE,
-% AEROELASTIC, ELASTICITY, EXTERNAL,
-% AEROELASTIC_RIGID_MOTION, GUST)
-GRID_MOVEMENT_KIND= FLUID_STRUCTURE
-%
-% Motion mach number (non-dimensional). Used for initializing a viscous flow
-% with the Reynolds number and for computing force coeffs. with dynamic meshes.
-MACH_MOTION= 0.03059
-%
-% Moving wall boundary marker(s) (NONE = no marker, ignored for RIGID_MOTION)
-MARKER_MOVING= ( plate )
-%
-% Coordinates of the motion origin
-MOTION_ORIGIN_X= -0.0028
-MOTION_ORIGIN_Y= 0.0
-MOTION_ORIGIN_Z= 0.0
-%
-% Angular velocity vector (rad/s) about the motion origin
-ROTATION_RATE_X = 0.0
-ROTATION_RATE_Y = 0.0
-ROTATION_RATE_Z = 0.0
-%
-% Pitching angular freq. (rad/s) about the motion origin
-PITCHING_OMEGA_X= 0.0
-PITCHING_OMEGA_Y= 0.0
-PITCHING_OMEGA_Z= 0.0
-%
-% Pitching amplitude (degrees) about the motion origin
-PITCHING_AMPL_X= 0.0
-PITCHING_AMPL_Y= 0.0
-PITCHING_AMPL_Z= 0.0
-%
-% Pitching phase offset (degrees) about the motion origin
-PITCHING_PHASE_X= 0.0
-PITCHING_PHASE_Y= 0.0
-PITCHING_PHASE_Z= 0.0
-%
-% Translational velocity (m/s) in the x, y, & z directions
-TRANSLATION_RATE_X = 0.0
-TRANSLATION_RATE_Y = 0.0
-TRANSLATION_RATE_Z = 0.0
-%
-% Plunging angular freq. (rad/s) in x, y, & z directions
-PLUNGING_OMEGA_X= 0.0
-PLUNGING_OMEGA_Y= 0.0
-PLUNGING_OMEGA_Z= 0.0
-%
-% Plunging amplitude (m) in x, y, & z directions
-PLUNGING_AMPL_X= 0.0
-PLUNGING_AMPL_Y= 0.0
-PLUNGING_AMPL_Z= 0.0
-%
-% Move Motion Origin for marker moving (1 or 0)
-MOVE_MOTION_ORIGIN = 1
% ----------------------- BODY FORCE DEFINITION -------------------------------%
%
diff --git a/TestCases/rotating/caradonna_tung/rot_caradonna_tung.cfg b/TestCases/rotating/caradonna_tung/rot_caradonna_tung.cfg
index 39ea47be8ac2..50b003182b0d 100644
--- a/TestCases/rotating/caradonna_tung/rot_caradonna_tung.cfg
+++ b/TestCases/rotating/caradonna_tung/rot_caradonna_tung.cfg
@@ -54,26 +54,19 @@ REF_AREA= 1.0
% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= YES
-%
% Type of dynamic mesh (NONE, RIGID_MOTION, DEFORMING, ROTATING_FRAME,
% MOVING_WALL, FLUID_STRUCTURE, AEROELASTIC, EXTERNAL)
-GRID_MOVEMENT_KIND= ROTATING_FRAME
+GRID_MOVEMENT= ROTATING_FRAME
%
% Motion mach number (non-dimensional). Used for intitializing a viscous flow
% with the Reynolds number and for computing force coeffs. with dynamic meshes.
MACH_MOTION= 0.877
%
% Coordinates of the motion origin
-MOTION_ORIGIN_X= 0.0
-MOTION_ORIGIN_Y= 0.0
-MOTION_ORIGIN_Z= 0.0
+MOTION_ORIGIN= 0.0 0.0 0.0
%
% Angular velocity vector (rad/s) about the motion origin
-ROTATION_RATE_X = 261.79938779914943
-ROTATION_RATE_Y = 0.0
-ROTATION_RATE_Z = 0.0
+ROTATION_RATE = 261.79938779914943 0.0 0.0
% 1250 RPM -> 130.89969389957471
% 2500 RPM -> 261.79938779914943
diff --git a/TestCases/rotating/naca0012/rot_NACA0012.cfg b/TestCases/rotating/naca0012/rot_NACA0012.cfg
index 442255e17a53..079cb123913f 100644
--- a/TestCases/rotating/naca0012/rot_NACA0012.cfg
+++ b/TestCases/rotating/naca0012/rot_NACA0012.cfg
@@ -54,26 +54,19 @@ REF_AREA= 1.0
% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= YES
-%
% Type of dynamic mesh (NONE, RIGID_MOTION, DEFORMING, ROTATING_FRAME,
% MOVING_WALL, FLUID_STRUCTURE, AEROELASTIC, EXTERNAL)
-GRID_MOVEMENT_KIND= ROTATING_FRAME
+GRID_MOVEMENT= ROTATING_FRAME
%
% Motion mach number (non-dimensional). Used for intitializing a viscous flow
% with the Reynolds number and for computing force coeffs. with dynamic meshes.
MACH_MOTION= 0.7958
%
% Coordinates of the motion origin
-MOTION_ORIGIN_X= 0.5
-MOTION_ORIGIN_Y= -32.0
-MOTION_ORIGIN_Z= 0.0
+MOTION_ORIGIN= 0.5 -32.0 0.0
%
% Angular velocity vector (rad/s) about the motion origin
-ROTATION_RATE_X = 0.0
-ROTATION_RATE_Y = 0.0
-ROTATION_RATE_Z = 8.25
+ROTATION_RATE = 0.0 0.0 8.25
% ----------------------- BOUNDARY CONDITION DEFINITION -----------------------%
%
diff --git a/TestCases/sliding_interface/bars_SST_2D/bars.cfg b/TestCases/sliding_interface/bars_SST_2D/bars.cfg
index 524b37b73836..09fdb5d3a090 100644
--- a/TestCases/sliding_interface/bars_SST_2D/bars.cfg
+++ b/TestCases/sliding_interface/bars_SST_2D/bars.cfg
@@ -8,7 +8,7 @@
% File Version 6.2.0 "Falcon" %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
+MULTIZONE=YES
% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------%
%
% Physical governing equations (EULER, NAVIER_STOKES,
@@ -155,11 +155,6 @@ MARKER_PERIODIC= ( periodic1_bars, periodic2_bars, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
MARKER_PLOTTING= ( wall1_bars )
MARKER_MONITORING= ( wall1_bars )
-% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
-%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= NO
-%
% ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------%
%
% Numerical method for spatial gradients (GREEN_GAUSS, WEIGHTED_LEAST_SQUARES)
@@ -177,7 +172,7 @@ CFL_ADAPT= NO
CFL_ADAPT_PARAM= ( 1.5, 0.5, 0.3,20.0 )
%
% Number of total iterations
-EXT_ITER= 100
+OUTER_ITER= 14
%EXT_ITER= 1
%
% Linear solver for the implicit formulation (BCGSTAB, FGMRES)
diff --git a/TestCases/sliding_interface/bars_SST_2D/zone_1.cfg b/TestCases/sliding_interface/bars_SST_2D/zone_1.cfg
new file mode 100644
index 000000000000..4ef6a98a2991
--- /dev/null
+++ b/TestCases/sliding_interface/bars_SST_2D/zone_1.cfg
@@ -0,0 +1,24 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% SU2 configuration file %
+% Case description: bars in a 2D channel with interface %
+% Author: A. Rubino %
+% Institution: Delft University of Technology %
+% Date: Feb 27th, 2017 %
+% File Version 6.2.0 "Falcon" %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
+% Type of dynamic mesh (NONE, ROTATING_FRAME)
+GRID_MOVEMENT= RIGID_MOTION
+%
+% Motion mach number (non-dimensional). Used for intitializing a viscous flow
+% with the Reynolds number and for computing force coeffs. with dynamic meshes.
+MACH_MOTION= 0.35
+%
+% Origin of the motion
+MOTION_ORIGIN= 0.0 0.0 0.0
+%
+% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
+ROTATION_RATE= 0.0 0.0 0.0
diff --git a/TestCases/sliding_interface/bars_SST_2D/zone_2.cfg b/TestCases/sliding_interface/bars_SST_2D/zone_2.cfg
new file mode 100644
index 000000000000..f8299635858a
--- /dev/null
+++ b/TestCases/sliding_interface/bars_SST_2D/zone_2.cfg
@@ -0,0 +1,25 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% SU2 configuration file %
+% Case description: bars in a 2D channel with interface %
+% Author: A. Rubino %
+% Institution: Delft University of Technology %
+% Date: Feb 27th, 2017 %
+% File Version 6.2.0 "Falcon" %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
+%
+% Type of dynamic mesh (NONE, ROTATING_FRAME)
+GRID_MOVEMENT= RIGID_MOTION
+%
+% Motion mach number (non-dimensional). Used for intitializing a viscous flow
+% with the Reynolds number and for computing force coeffs. with dynamic meshes.
+MACH_MOTION= 0.35
+%
+% Origin of the motion
+MOTION_ORIGIN= 0.0 0.0 0.0
+%
+% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
+ROTATION_RATE = 0.0 0.0 0.1
diff --git a/TestCases/sliding_interface/bars_SST_2D/zone_3.cfg b/TestCases/sliding_interface/bars_SST_2D/zone_3.cfg
new file mode 100644
index 000000000000..155e1c219553
--- /dev/null
+++ b/TestCases/sliding_interface/bars_SST_2D/zone_3.cfg
@@ -0,0 +1,24 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% SU2 configuration file %
+% Case description: bars in a 2D channel with interface %
+% Author: A. Rubino %
+% Institution: Delft University of Technology %
+% Date: Feb 27th, 2017 %
+% File Version 6.2.0 "Falcon" %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
+% Type of dynamic mesh (NONE, ROTATING_FRAME)
+GRID_MOVEMENT= RIGID_MOTION
+%
+% Motion mach number (non-dimensional). Used for intitializing a viscous flow
+% with the Reynolds number and for computing force coeffs. with dynamic meshes.
+MACH_MOTION= 0.35
+%
+% Origin of the motion
+MOTION_ORIGIN= 0.0 0.0 0.0
+%
+% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
+ROTATION_RATE= 0.0 0.0 -0.1
diff --git a/TestCases/sliding_interface/channel_2D/channel_2D_NN.cfg b/TestCases/sliding_interface/channel_2D/channel_2D_NN.cfg
index 26a5376b353b..164422364e45 100644
--- a/TestCases/sliding_interface/channel_2D/channel_2D_NN.cfg
+++ b/TestCases/sliding_interface/channel_2D/channel_2D_NN.cfg
@@ -10,7 +10,11 @@
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
+% Enable multizone mode
+MULTIZONE = YES
%
+% List of sub config files to specify zone specific options
+CONFIG_LIST= (zone_1.cfg, zone_2.cfg, zone_3.cfg)
%
% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------%
%
@@ -82,28 +86,6 @@ MARKER_FLUID_INTERFACE= ( internal_interface, inner_interface, domain_interface,
%
%
-% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
-%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= YES
-%
-% Type of dynamic mesh (NONE, ROTATING_FRAME)
-GRID_MOVEMENT_KIND= RIGID_MOTION RIGID_MOTION RIGID_MOTION
-%
-% Motion mach number (non-dimensional). Used for intitializing a viscous flow
-% with the Reynolds number and for computing force coeffs. with dynamic meshes.
-MACH_MOTION= 0.35
-%
-
-MOTION_ORIGIN_X= 0.0 0.0 0.0
-MOTION_ORIGIN_Y= 0.0 0.0 0.0
-MOTION_ORIGIN_Z= 0.0 0.0 0.0
-
-% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
-ROTATION_RATE_X = 0.0 0.0 0.0
-ROTATION_RATE_Y = 0.0 0.0 0.0
-ROTATION_RATE_Z = 0.0 0.1 -0.1
-%
%
% ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------%
%
diff --git a/TestCases/sliding_interface/channel_2D/channel_2D_WA.cfg b/TestCases/sliding_interface/channel_2D/channel_2D_WA.cfg
index 53a0488edcaf..d2e1ef8dceb2 100644
--- a/TestCases/sliding_interface/channel_2D/channel_2D_WA.cfg
+++ b/TestCases/sliding_interface/channel_2D/channel_2D_WA.cfg
@@ -10,7 +10,13 @@
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
+% Enable multizone mode
+MULTIZONE = YES
%
+MULTIZONE_SOLVER= BLOCK_JACOBI
+%
+% List of sub config files to specify zone specific options
+CONFIG_LIST= (zone_1.cfg, zone_2.cfg, zone_3.cfg)
%
% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------%
%
@@ -83,29 +89,6 @@ MARKER_FLUID_INTERFACE= ( internal_interface, inner_interface, domain_interface,
KIND_INTERPOLATION= WEIGHTED_AVERAGE
%
%
-% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
-%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= YES
-%
-% Type of dynamic mesh (NONE, ROTATING_FRAME)
-GRID_MOVEMENT_KIND= RIGID_MOTION RIGID_MOTION RIGID_MOTION
-%
-% Motion mach number (non-dimensional). Used for intitializing a viscous flow
-% with the Reynolds number and for computing force coeffs. with dynamic meshes.
-MACH_MOTION= 0.35
-%
-
-MOTION_ORIGIN_X= 0.0 0.0 0.0
-MOTION_ORIGIN_Y= 0.0 0.0 0.0
-MOTION_ORIGIN_Z= 0.0 0.0 0.0
-
-% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
-ROTATION_RATE_X = 0.0 0.0 0.0
-ROTATION_RATE_Y = 0.0 0.0 0.0
-ROTATION_RATE_Z = 0.0 0.1 -0.1
-%
-%
% ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------%
%
% Numerical method for spatial gradients (GREEN_GAUSS, WEIGHTED_LEAST_SQUARES)
diff --git a/TestCases/sliding_interface/channel_2D/zone_1.cfg b/TestCases/sliding_interface/channel_2D/zone_1.cfg
new file mode 100644
index 000000000000..c6f8a353a15e
--- /dev/null
+++ b/TestCases/sliding_interface/channel_2D/zone_1.cfg
@@ -0,0 +1,15 @@
+% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
+%
+% Type of dynamic mesh (NONE, ROTATING_FRAME)
+GRID_MOVEMENT= RIGID_MOTION
+%
+% Motion mach number (non-dimensional). Used for intitializing a viscous flow
+% with the Reynolds number and for computing force coeffs. with dynamic meshes.
+MACH_MOTION= 0.35
+%
+
+MOTION_ORIGIN= 0.0 0.0 0.0
+
+% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
+ROTATION_RATE = 0.0 0.0 0.0
+
diff --git a/TestCases/sliding_interface/channel_2D/zone_2.cfg b/TestCases/sliding_interface/channel_2D/zone_2.cfg
new file mode 100644
index 000000000000..08ca4f7db548
--- /dev/null
+++ b/TestCases/sliding_interface/channel_2D/zone_2.cfg
@@ -0,0 +1,16 @@
+
+% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
+%
+% Type of dynamic mesh (NONE, ROTATING_FRAME)
+GRID_MOVEMENT= RIGID_MOTION
+%
+% Motion mach number (non-dimensional). Used for intitializing a viscous flow
+% with the Reynolds number and for computing force coeffs. with dynamic meshes.
+MACH_MOTION= 0.35
+%
+
+MOTION_ORIGIN= 0.0 0.0 0.0
+
+% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
+ROTATION_RATE = 0.0 0.0 0.1
+
diff --git a/TestCases/sliding_interface/channel_2D/zone_3.cfg b/TestCases/sliding_interface/channel_2D/zone_3.cfg
new file mode 100644
index 000000000000..f3b8e38812a0
--- /dev/null
+++ b/TestCases/sliding_interface/channel_2D/zone_3.cfg
@@ -0,0 +1,15 @@
+% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
+%
+% Type of dynamic mesh (NONE, ROTATING_FRAME)
+GRID_MOVEMENT= RIGID_MOTION
+%
+% Motion mach number (non-dimensional). Used for intitializing a viscous flow
+% with the Reynolds number and for computing force coeffs. with dynamic meshes.
+MACH_MOTION= 0.35
+%
+
+MOTION_ORIGIN= 0.0 0.0 0.0
+
+% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
+ROTATION_RATE = 0.0 0.0 -0.1
+
diff --git a/TestCases/sliding_interface/channel_3D/channel_3D_NN.cfg b/TestCases/sliding_interface/channel_3D/channel_3D_NN.cfg
index 8cbfcb5d7a1a..10f9ed972ace 100644
--- a/TestCases/sliding_interface/channel_3D/channel_3D_NN.cfg
+++ b/TestCases/sliding_interface/channel_3D/channel_3D_NN.cfg
@@ -10,7 +10,11 @@
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
+% Enable Multizone mode
+MULTIZONE= YES
%
+% List of config files to specify zone options
+CONFIG_LIST= (zone_1.cfg, zone_2.cfg, zone_3.cfg)
%
% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------%
%
@@ -83,28 +87,7 @@ MARKER_FLUID_INTERFACE= ( internal_interface, inner_interface, domain_interface,
%KIND_INTERPOLATION= ISOPARAMETRIC
%
%
-%
-% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
-%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= YES
-%
-% Type of dynamic mesh (NONE, ROTATING_FRAME)
-GRID_MOVEMENT_KIND= RIGID_MOTION RIGID_MOTION RIGID_MOTION
-%
-% Motion mach number (non-dimensional). Used for intitializing a viscous flow
-% with the Reynolds number and for computing force coeffs. with dynamic meshes.
-MACH_MOTION= 0.35
-%
-
-MOTION_ORIGIN_X= 0.0 0.0 0.0
-MOTION_ORIGIN_Y= 0.0 0.0 0.0
-MOTION_ORIGIN_Z= 0.0 0.0 0.0
-% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
-ROTATION_RATE_X = 0.0 0.0 0.1
-ROTATION_RATE_Y = 0.0 0.0 0.0
-ROTATION_RATE_Z = 0.0 0.1 0.0
%
%
% ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------%
diff --git a/TestCases/sliding_interface/channel_3D/channel_3D_WA.cfg b/TestCases/sliding_interface/channel_3D/channel_3D_WA.cfg
index b092b9f002d0..c796ba2df450 100644
--- a/TestCases/sliding_interface/channel_3D/channel_3D_WA.cfg
+++ b/TestCases/sliding_interface/channel_3D/channel_3D_WA.cfg
@@ -10,7 +10,13 @@
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
+% Enable Multizone mode
+MULTIZONE= YES
%
+MULTIZONE_SOLVER= BLOCK_JACOBI
+%
+% List of config files to specify zone options
+CONFIG_LIST= (zone_1.cfg, zone_2.cfg, zone_3.cfg)
%
% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------%
%
@@ -85,29 +91,6 @@ KIND_INTERPOLATION= WEIGHTED_AVERAGE
%
%
%
-% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
-%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= YES
-%
-% Type of dynamic mesh (NONE, ROTATING_FRAME)
-GRID_MOVEMENT_KIND= RIGID_MOTION RIGID_MOTION RIGID_MOTION
-%
-% Motion mach number (non-dimensional). Used for intitializing a viscous flow
-% with the Reynolds number and for computing force coeffs. with dynamic meshes.
-MACH_MOTION= 0.35
-%
-
-MOTION_ORIGIN_X= 0.0 0.0 0.0
-MOTION_ORIGIN_Y= 0.0 0.0 0.0
-MOTION_ORIGIN_Z= 0.0 0.0 0.0
-
-% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
-ROTATION_RATE_X = 0.0 0.0 0.1
-ROTATION_RATE_Y = 0.0 0.0 0.0
-ROTATION_RATE_Z = 0.0 0.1 0.0
-%
-%
% ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------%
%
% Numerical method for spatial gradients (GREEN_GAUSS, WEIGHTED_LEAST_SQUARES)
diff --git a/TestCases/sliding_interface/channel_3D/zone_1.cfg b/TestCases/sliding_interface/channel_3D/zone_1.cfg
new file mode 100644
index 000000000000..ce58b4fac226
--- /dev/null
+++ b/TestCases/sliding_interface/channel_3D/zone_1.cfg
@@ -0,0 +1,24 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% SU2 configuration file %
+% Case description: 3D, inviscid flow inside a channel with a partially %
+% moving grid, nearest neighbour approach holds at interface %
+% Author: G. Gori %
+% Institution: Politecnico di Milano %
+% Date: Oct 5th, 2016 %
+% File Version 4.3.0 "cardinal" %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
+% Type of dynamic mesh (NONE, ROTATING_FRAME)
+GRID_MOVEMENT= RIGID_MOTION
+%
+% Motion mach number (non-dimensional). Used for intitializing a viscous flow
+% with the Reynolds number and for computing force coeffs. with dynamic meshes.
+MACH_MOTION= 0.35
+%
+
+MOTION_ORIGIN= 0.0 0.0 0.0
+
+% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
+ROTATION_RATE= 0.0 0.0 0.0
diff --git a/TestCases/sliding_interface/channel_3D/zone_2.cfg b/TestCases/sliding_interface/channel_3D/zone_2.cfg
new file mode 100644
index 000000000000..ec1aa76bc155
--- /dev/null
+++ b/TestCases/sliding_interface/channel_3D/zone_2.cfg
@@ -0,0 +1,25 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% SU2 configuration file %
+% Case description: 3D, inviscid flow inside a channel with a partially %
+% moving grid, nearest neighbour approach holds at interface %
+% Author: G. Gori %
+% Institution: Politecnico di Milano %
+% Date: Oct 5th, 2016 %
+% File Version 4.3.0 "cardinal" %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
+
+% Type of dynamic mesh (NONE, ROTATING_FRAME)
+GRID_MOVEMENT= RIGID_MOTION
+%
+% Motion mach number (non-dimensional). Used for intitializing a viscous flow
+% with the Reynolds number and for computing force coeffs. with dynamic meshes.
+MACH_MOTION= 0.35
+%
+
+MOTION_ORIGIN= 0.0 0.0 0.0
+
+% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
+ROTATION_RATE= 0.0 0.0 0.1
diff --git a/TestCases/sliding_interface/channel_3D/zone_3.cfg b/TestCases/sliding_interface/channel_3D/zone_3.cfg
new file mode 100644
index 000000000000..59c20711a6d1
--- /dev/null
+++ b/TestCases/sliding_interface/channel_3D/zone_3.cfg
@@ -0,0 +1,24 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% SU2 configuration file %
+% Case description: 3D, inviscid flow inside a channel with a partially %
+% moving grid, nearest neighbour approach holds at interface %
+% Author: G. Gori %
+% Institution: Politecnico di Milano %
+% Date: Oct 5th, 2016 %
+% File Version 4.3.0 "cardinal" %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
+% Type of dynamic mesh (NONE, ROTATING_FRAME)
+GRID_MOVEMENT= RIGID_MOTION
+%
+% Motion mach number (non-dimensional). Used for intitializing a viscous flow
+% with the Reynolds number and for computing force coeffs. with dynamic meshes.
+MACH_MOTION= 0.35
+%
+
+MOTION_ORIGIN= 0.0 0.0 0.0
+
+% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
+ROTATION_RATE= 0.1 0.0 0.0
diff --git a/TestCases/sliding_interface/incompressible_steady/config.cfg b/TestCases/sliding_interface/incompressible_steady/config.cfg
index 9a0792a3e61e..fb604b060eb8 100644
--- a/TestCases/sliding_interface/incompressible_steady/config.cfg
+++ b/TestCases/sliding_interface/incompressible_steady/config.cfg
@@ -9,13 +9,13 @@
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-PHYSICAL_PROBLEM= MULTIZONE
+PHYSICAL_PROBLEM= MULTIPHYSICS
CONFIG_LIST = (configOut.cfg, configCircle.cfg)
MARKER_ZONE_INTERFACE= (circleOut, circleIn)
-MESH_FILENAME= meshCircle.su2
+MULTIZONE_MESH= NO
TIME_DOMAIN = NO
diff --git a/TestCases/sliding_interface/incompressible_unsteady/config.cfg b/TestCases/sliding_interface/incompressible_unsteady/config.cfg
index de42431bdf0d..574298720b1f 100644
--- a/TestCases/sliding_interface/incompressible_unsteady/config.cfg
+++ b/TestCases/sliding_interface/incompressible_unsteady/config.cfg
@@ -9,13 +9,13 @@
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-PHYSICAL_PROBLEM= MULTIZONE
+PHYSICAL_PROBLEM= MULTIPHYSICS
CONFIG_LIST = (configOut.cfg, configCircle.cfg)
MARKER_ZONE_INTERFACE= (circleOut, circleIn)
-MESH_FILENAME= meshCircle.su2
+MULTIZONE_MESH=NO
TIME_DOMAIN = YES
TIME_ITER = 1
diff --git a/TestCases/sliding_interface/pipe/pipe_NN.cfg b/TestCases/sliding_interface/pipe/pipe_NN.cfg
index 52c5a1b82821..adc82a3f4ed7 100644
--- a/TestCases/sliding_interface/pipe/pipe_NN.cfg
+++ b/TestCases/sliding_interface/pipe/pipe_NN.cfg
@@ -10,7 +10,13 @@
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
+% Enable multizone mode
+MULTIZONE= YES
%
+MULTIZONE_SOLVER= BLOCK_JACOBI
+%
+% List of config files for zone specific options
+CONFIG_LIST= (zone_1.cfg, zone_2.cfg, zone_3.cfg, zone_4.cfg, zone_5.cfg)
%
% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------%
%
@@ -77,7 +83,7 @@ MARKER_EULER= ( intake_sidewall, component_sidewall_1, component_sidewall_2, com
MARKER_RIEMANN= (intake_upper_inlet, STATIC_SUPERSONIC_INFLOW_PT, 95750, 288.15, 3.0, 0.0, 0.0, intake_lower_inlet, STATIC_SUPERSONIC_INFLOW_PT, 95750, 288.15, 1.5, 0.0, 0.0, outlet_interface_4 STATIC_PRESSURE, 95750.0, 0.0, 0.0, 0.0, 0.0 )
%
% Zone interaction boundary definition
-MARKER_ZONE_INTERFACE= ( intake_interface, inlet_interface_1, outlet_interface_1, inlet_interface_2, outlet_interface_2, inlet_interface_3, outlet_interface_3, inlet_interface_4, outlet_interface_4 )
+MARKER_ZONE_INTERFACE= ( intake_interface, inlet_interface_1, outlet_interface_1, inlet_interface_2, outlet_interface_2, inlet_interface_3, outlet_interface_3, inlet_interface_4 )
%
MARKER_FLUID_INTERFACE= ( intake_interface, inlet_interface_1, outlet_interface_1, inlet_interface_2, outlet_interface_2, inlet_interface_3, outlet_interface_3, inlet_interface_4 )
@@ -85,29 +91,7 @@ MARKER_FLUID_INTERFACE= ( intake_interface, inlet_interface_1, outlet_interface_
%KIND_INTERPOLATION= ISOPARAMETRIC
%
%
-% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
-%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= YES
-%
-% Type of dynamic mesh (NONE, ROTATING_FRAME)
-GRID_MOVEMENT_KIND= RIGID_MOTION RIGID_MOTION RIGID_MOTION RIGID_MOTION RIGID_MOTION
-%
-% Motion mach number (non-dimensional). Used for intitializing a viscous flow
-% with the Reynolds number and for computing force coeffs. with dynamic meshes.
-MACH_MOTION= 0.35
-%
-
-MOTION_ORIGIN_X= 0.0 0.0 0.0 0.0 0.0
-MOTION_ORIGIN_Y= 0.0 0.0 0.0 0.0 0.0
-MOTION_ORIGIN_Z= 0.0 0.0 0.0 0.0 0.0
-% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
-ROTATION_RATE_X = 0.0 0.1 0.2 -0.1 0.1
-ROTATION_RATE_Y = 0.0 0.0 0.0 0.0 0.0
-ROTATION_RATE_Z = 0.0 0.0 0.0 0.0 0.0
-%
-%
%
% ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------%
%
diff --git a/TestCases/sliding_interface/pipe/pipe_WA.cfg b/TestCases/sliding_interface/pipe/pipe_WA.cfg
index 6572068cb2b5..c57d8e47ec2c 100644
--- a/TestCases/sliding_interface/pipe/pipe_WA.cfg
+++ b/TestCases/sliding_interface/pipe/pipe_WA.cfg
@@ -10,7 +10,11 @@
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
+% Enable multizone mode
+MULTIZONE= YES
%
+% List of config files for zone specific options
+CONFIG_LIST= (zone_1.cfg, zone_2.cfg, zone_3.cfg, zone_4.cfg, zone_5.cfg)
%
% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------%
%
@@ -86,28 +90,6 @@ MARKER_FLUID_INTERFACE= ( intake_interface, inlet_interface_1, outlet_interface_
KIND_INTERPOLATION= WEIGHTED_AVERAGE
%
%
-% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
-%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= YES
-%
-% Type of dynamic mesh (NONE, ROTATING_FRAME)
-GRID_MOVEMENT_KIND= RIGID_MOTION RIGID_MOTION RIGID_MOTION RIGID_MOTION RIGID_MOTION
-%
-% Motion mach number (non-dimensional). Used for intitializing a viscous flow
-% with the Reynolds number and for computing force coeffs. with dynamic meshes.
-MACH_MOTION= 0.35
-%
-
-MOTION_ORIGIN_X= 0.0 0.0 0.0 0.0 0.0
-MOTION_ORIGIN_Y= 0.0 0.0 0.0 0.0 0.0
-MOTION_ORIGIN_Z= 0.0 0.0 0.0 0.0 0.0
-
-% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
-ROTATION_RATE_X = 0.0 0.1 0.2 -0.1 0.1
-ROTATION_RATE_Y = 0.0 0.0 0.0 0.0 0.0
-ROTATION_RATE_Z = 0.0 0.0 0.0 0.0 0.0
-%
%
%
% ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------%
diff --git a/TestCases/sliding_interface/pipe/zone_1.cfg b/TestCases/sliding_interface/pipe/zone_1.cfg
new file mode 100644
index 000000000000..d10d68687212
--- /dev/null
+++ b/TestCases/sliding_interface/pipe/zone_1.cfg
@@ -0,0 +1,32 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% SU2 configuration file %
+% Case description: 3D, inviscid flow inside a pipe with rotating sections %
+% nearest neighbour approach holds at sliding interface %
+% Author: G. Gori %
+% Institution: Politecnico di Milano %
+% Date: Oct 5th, 2016 %
+% File Version 4.3.0 "cardinal" %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
+
+%
+% Type of dynamic mesh (NONE, ROTATING_FRAME)
+GRID_MOVEMENT= RIGID_MOTION
+%
+% Motion mach number (non-dimensional). Used for intitializing a viscous flow
+% with the Reynolds number and for computing force coeffs. with dynamic meshes.
+MACH_MOTION= 0.35
+%
+
+MOTION_ORIGIN= 0.0 0.0 0.0
+
+% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
+ROTATION_RATE = 0.0 0.0 0.0
+%
+%
+
+
+
diff --git a/TestCases/sliding_interface/pipe/zone_2.cfg b/TestCases/sliding_interface/pipe/zone_2.cfg
new file mode 100644
index 000000000000..356ae57f46e2
--- /dev/null
+++ b/TestCases/sliding_interface/pipe/zone_2.cfg
@@ -0,0 +1,29 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% SU2 configuration file %
+% Case description: 3D, inviscid flow inside a pipe with rotating sections %
+% nearest neighbour approach holds at sliding interface %
+% Author: G. Gori %
+% Institution: Politecnico di Milano %
+% Date: Oct 5th, 2016 %
+% File Version 4.3.0 "cardinal" %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
+
+%
+% Type of dynamic mesh (NONE, ROTATING_FRAME)
+GRID_MOVEMENT= RIGID_MOTION
+%
+% Motion mach number (non-dimensional). Used for intitializing a viscous flow
+% with the Reynolds number and for computing force coeffs. with dynamic meshes.
+MACH_MOTION= 0.35
+%
+
+MOTION_ORIGIN= 0.0 0.0 0.0
+
+% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
+ROTATION_RATE = 0.1 0.0 0.0
+%
+%
diff --git a/TestCases/sliding_interface/pipe/zone_3.cfg b/TestCases/sliding_interface/pipe/zone_3.cfg
new file mode 100644
index 000000000000..b500431b81fe
--- /dev/null
+++ b/TestCases/sliding_interface/pipe/zone_3.cfg
@@ -0,0 +1,32 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% SU2 configuration file %
+% Case description: 3D, inviscid flow inside a pipe with rotating sections %
+% nearest neighbour approach holds at sliding interface %
+% Author: G. Gori %
+% Institution: Politecnico di Milano %
+% Date: Oct 5th, 2016 %
+% File Version 4.3.0 "cardinal" %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
+
+%
+% Type of dynamic mesh (NONE, ROTATING_FRAME)
+GRID_MOVEMENT= RIGID_MOTION
+%
+% Motion mach number (non-dimensional). Used for intitializing a viscous flow
+% with the Reynolds number and for computing force coeffs. with dynamic meshes.
+MACH_MOTION= 0.35
+%
+
+MOTION_ORIGIN= 0.0 0.0 0.0
+
+% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
+ROTATION_RATE = 0.2 0.0 0.0
+%
+%
+
+
+
diff --git a/TestCases/sliding_interface/pipe/zone_4.cfg b/TestCases/sliding_interface/pipe/zone_4.cfg
new file mode 100644
index 000000000000..2604ae779f5e
--- /dev/null
+++ b/TestCases/sliding_interface/pipe/zone_4.cfg
@@ -0,0 +1,30 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% SU2 configuration file %
+% Case description: 3D, inviscid flow inside a pipe with rotating sections %
+% nearest neighbour approach holds at sliding interface %
+% Author: G. Gori %
+% Institution: Politecnico di Milano %
+% Date: Oct 5th, 2016 %
+% File Version 4.3.0 "cardinal" %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
+
+%
+% Type of dynamic mesh (NONE, ROTATING_FRAME)
+GRID_MOVEMENT= RIGID_MOTION
+%
+% Motion mach number (non-dimensional). Used for intitializing a viscous flow
+% with the Reynolds number and for computing force coeffs. with dynamic meshes.
+MACH_MOTION= 0.35
+%
+
+MOTION_ORIGIN= 0.0 0.0 0.0
+
+% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
+ROTATION_RATE = -0.1 0.0 0.0
+%
+%
+
diff --git a/TestCases/sliding_interface/pipe/zone_5.cfg b/TestCases/sliding_interface/pipe/zone_5.cfg
new file mode 100644
index 000000000000..be99c6a8d1e4
--- /dev/null
+++ b/TestCases/sliding_interface/pipe/zone_5.cfg
@@ -0,0 +1,30 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% SU2 configuration file %
+% Case description: 3D, inviscid flow inside a pipe with rotating sections %
+% nearest neighbour approach holds at sliding interface %
+% Author: G. Gori %
+% Institution: Politecnico di Milano %
+% Date: Oct 5th, 2016 %
+% File Version 4.3.0 "cardinal" %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
+
+%
+% Type of dynamic mesh (NONE, ROTATING_FRAME)
+GRID_MOVEMENT= RIGID_MOTION
+%
+% Motion mach number (non-dimensional). Used for intitializing a viscous flow
+% with the Reynolds number and for computing force coeffs. with dynamic meshes.
+MACH_MOTION= 0.35
+%
+
+MOTION_ORIGIN= 0.0 0.0 0.0
+
+% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
+ROTATION_RATE = 0.1 0.0 0.0
+%
+%
+
diff --git a/TestCases/sliding_interface/rotating_cylinders/rot_cylinders_NN.cfg b/TestCases/sliding_interface/rotating_cylinders/rot_cylinders_NN.cfg
index bb8f6e2d769b..ba65c6c1482e 100644
--- a/TestCases/sliding_interface/rotating_cylinders/rot_cylinders_NN.cfg
+++ b/TestCases/sliding_interface/rotating_cylinders/rot_cylinders_NN.cfg
@@ -9,7 +9,11 @@
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
+% Enable multizone mode
+MULTIZONE= YES
%
+% Config list for zone specific options
+CONFIG_LIST = (zone_1.cfg, zone_2.cfg, zone_3.cfg)
%
% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------%
%
@@ -87,29 +91,6 @@ MARKER_FLUID_INTERFACE= ( domain_interface, external_interface, internal_interfa
MARKER_SYM= ( up, down )
%
%
-% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
-%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= YES
-%
-% Type of dynamic mesh (NONE, ROTATING_FRAME)
-GRID_MOVEMENT_KIND= RIGID_MOTION RIGID_MOTION RIGID_MOTION
-%
-% Motion mach number (non-dimensional). Used for intitializing a viscous flow
-% with the Reynolds number and for computing force coeffs. with dynamic meshes.
-MACH_MOTION= 0.35
-%
-
-MOTION_ORIGIN_X= 0.0 0.0 0.0
-MOTION_ORIGIN_Y= 0.0 0.0 0.0
-MOTION_ORIGIN_Z= 0.0 0.0 0.0
-
-% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
-ROTATION_RATE_X = 0.0 0.0 0.0
-ROTATION_RATE_Y = 0.0 0.0 0.0
-ROTATION_RATE_Z = 0.0 0.1 -0.1
-%
-%
%
% ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------%
%
diff --git a/TestCases/sliding_interface/rotating_cylinders/rot_cylinders_WA.cfg b/TestCases/sliding_interface/rotating_cylinders/rot_cylinders_WA.cfg
index 4e9811441731..b8f0529e9527 100644
--- a/TestCases/sliding_interface/rotating_cylinders/rot_cylinders_WA.cfg
+++ b/TestCases/sliding_interface/rotating_cylinders/rot_cylinders_WA.cfg
@@ -10,6 +10,14 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
+% Enable multizone mode
+MULTIZONE= YES
+%
+MULTIZONE_SOLVER= BLOCK_JACOBI
+%
+% Config list for zone specific options
+CONFIG_LIST = (zone_1.cfg, zone_2.cfg, zone_3.cfg)
+%
%
% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------%
%
@@ -88,29 +96,6 @@ KIND_INTERPOLATION= WEIGHTED_AVERAGE
MARKER_SYM= ( up, down )
%
%
-% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
-%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= YES
-%
-% Type of dynamic mesh (NONE, ROTATING_FRAME)
-GRID_MOVEMENT_KIND= RIGID_MOTION RIGID_MOTION RIGID_MOTION
-%
-% Motion mach number (non-dimensional). Used for intitializing a viscous flow
-% with the Reynolds number and for computing force coeffs. with dynamic meshes.
-MACH_MOTION= 0.35
-%
-
-MOTION_ORIGIN_X= 0.0 0.0 0.0
-MOTION_ORIGIN_Y= 0.0 0.0 0.0
-MOTION_ORIGIN_Z= 0.0 0.0 0.0
-
-% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
-ROTATION_RATE_X = 0.0 0.0 0.0
-ROTATION_RATE_Y = 0.0 0.0 0.0
-ROTATION_RATE_Z = 0.0 0.1 -0.1
-%
-%
%
% ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------%
%
diff --git a/TestCases/sliding_interface/rotating_cylinders/zone_1.cfg b/TestCases/sliding_interface/rotating_cylinders/zone_1.cfg
new file mode 100644
index 000000000000..c6f8a353a15e
--- /dev/null
+++ b/TestCases/sliding_interface/rotating_cylinders/zone_1.cfg
@@ -0,0 +1,15 @@
+% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
+%
+% Type of dynamic mesh (NONE, ROTATING_FRAME)
+GRID_MOVEMENT= RIGID_MOTION
+%
+% Motion mach number (non-dimensional). Used for intitializing a viscous flow
+% with the Reynolds number and for computing force coeffs. with dynamic meshes.
+MACH_MOTION= 0.35
+%
+
+MOTION_ORIGIN= 0.0 0.0 0.0
+
+% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
+ROTATION_RATE = 0.0 0.0 0.0
+
diff --git a/TestCases/sliding_interface/rotating_cylinders/zone_2.cfg b/TestCases/sliding_interface/rotating_cylinders/zone_2.cfg
new file mode 100644
index 000000000000..08ca4f7db548
--- /dev/null
+++ b/TestCases/sliding_interface/rotating_cylinders/zone_2.cfg
@@ -0,0 +1,16 @@
+
+% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
+%
+% Type of dynamic mesh (NONE, ROTATING_FRAME)
+GRID_MOVEMENT= RIGID_MOTION
+%
+% Motion mach number (non-dimensional). Used for intitializing a viscous flow
+% with the Reynolds number and for computing force coeffs. with dynamic meshes.
+MACH_MOTION= 0.35
+%
+
+MOTION_ORIGIN= 0.0 0.0 0.0
+
+% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
+ROTATION_RATE = 0.0 0.0 0.1
+
diff --git a/TestCases/sliding_interface/rotating_cylinders/zone_3.cfg b/TestCases/sliding_interface/rotating_cylinders/zone_3.cfg
new file mode 100644
index 000000000000..f3b8e38812a0
--- /dev/null
+++ b/TestCases/sliding_interface/rotating_cylinders/zone_3.cfg
@@ -0,0 +1,15 @@
+% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
+%
+% Type of dynamic mesh (NONE, ROTATING_FRAME)
+GRID_MOVEMENT= RIGID_MOTION
+%
+% Motion mach number (non-dimensional). Used for intitializing a viscous flow
+% with the Reynolds number and for computing force coeffs. with dynamic meshes.
+MACH_MOTION= 0.35
+%
+
+MOTION_ORIGIN= 0.0 0.0 0.0
+
+% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
+ROTATION_RATE = 0.0 0.0 -0.1
+
diff --git a/TestCases/sliding_interface/single_stage/single_stage_NN.cfg b/TestCases/sliding_interface/single_stage/single_stage_NN.cfg
index ddf2c3864fd8..0b68bb19e296 100644
--- a/TestCases/sliding_interface/single_stage/single_stage_NN.cfg
+++ b/TestCases/sliding_interface/single_stage/single_stage_NN.cfg
@@ -10,8 +10,11 @@
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
+% Enable multizone mode
+MULTIZONE= YES
%
-%
+% List of config files to set zone specific options
+CONFIG_LIST= (zone_1.cfg, zone_2.cfg)
%
% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------%
%
@@ -97,29 +100,7 @@ KIND_INTERPOLATION= ISOPARAMETRIC
%KIND_INTERPOLATION= SLIDING_MESH
%
%
-%
-% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
-%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= YES
-%
-% Type of dynamic mesh (NONE, ROTATING_FRAME)
-GRID_MOVEMENT_KIND= RIGID_MOTION RIGID_MOTION
-%
-% Motion mach number (non-dimensional). Used for intitializing a viscous flow
-% with the Reynolds number and for computing force coeffs. with dynamic meshes.
-MACH_MOTION= 0.35
-%
-MOTION_ORIGIN_X= 0.0 0.0
-MOTION_ORIGIN_Y= 0.0 0.0
-MOTION_ORIGIN_Z= 0.0 0.0
-
-% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
-ROTATION_RATE_X = 0.0 0.1
-ROTATION_RATE_Y = 0.0 0.0
-ROTATION_RATE_Z = 0.0 0.0
-%
%
%
%
diff --git a/TestCases/sliding_interface/single_stage/single_stage_WA.cfg b/TestCases/sliding_interface/single_stage/single_stage_WA.cfg
index f8df591d109a..8f9c236708cf 100644
--- a/TestCases/sliding_interface/single_stage/single_stage_WA.cfg
+++ b/TestCases/sliding_interface/single_stage/single_stage_WA.cfg
@@ -11,6 +11,11 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
+% Enable multizone mode
+MULTIZONE= YES
+%
+% List of config files to set zone specific options
+CONFIG_LIST= (zone_1.cfg, zone_2.cfg)
%
%
% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------%
@@ -98,31 +103,6 @@ KIND_INTERPOLATION= WEIGHTED_AVERAGE
%
%
%
-% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
-%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= YES
-%
-% Type of dynamic mesh (NONE, ROTATING_FRAME)
-GRID_MOVEMENT_KIND= RIGID_MOTION RIGID_MOTION
-%
-% Motion mach number (non-dimensional). Used for intitializing a viscous flow
-% with the Reynolds number and for computing force coeffs. with dynamic meshes.
-MACH_MOTION= 0.35
-%
-
-MOTION_ORIGIN_X= 0.0 0.0
-MOTION_ORIGIN_Y= 0.0 0.0
-MOTION_ORIGIN_Z= 0.0 0.0
-
-% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
-ROTATION_RATE_X = 0.0 0.1
-ROTATION_RATE_Y = 0.0 0.0
-ROTATION_RATE_Z = 0.0 0.0
-%
-%
-%
-%
% ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------%
%
% Numerical method for spatial gradients (GREEN_GAUSS, WEIGHTED_LEAST_SQUARES)
diff --git a/TestCases/sliding_interface/single_stage/zone_1.cfg b/TestCases/sliding_interface/single_stage/zone_1.cfg
new file mode 100644
index 000000000000..9e2f232e2b3c
--- /dev/null
+++ b/TestCases/sliding_interface/single_stage/zone_1.cfg
@@ -0,0 +1,28 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% SU2 configuration file %
+% Case description: 3D, inviscid flow inside a pipe with rotating sections %
+% nearest neighbour approach holds at sliding interface %
+% Author: G. Gori %
+% Institution: Politecnico di Milano %
+% Date: Oct 5th, 2016 %
+% File Version 4.3.0 "cardinal" %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%
+% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
+%
+% Type of dynamic mesh (NONE, ROTATING_FRAME)
+GRID_MOVEMENT= RIGID_MOTION
+%
+% Motion mach number (non-dimensional). Used for intitializing a viscous flow
+% with the Reynolds number and for computing force coeffs. with dynamic meshes.
+MACH_MOTION= 0.35
+%
+
+MOTION_ORIGIN= 0.0 0.0 0.0
+
+% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
+ROTATION_RATE = 0.0 0.0 0.0
+
diff --git a/TestCases/sliding_interface/single_stage/zone_2.cfg b/TestCases/sliding_interface/single_stage/zone_2.cfg
new file mode 100644
index 000000000000..136ffadfaffa
--- /dev/null
+++ b/TestCases/sliding_interface/single_stage/zone_2.cfg
@@ -0,0 +1,28 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% SU2 configuration file %
+% Case description: 3D, inviscid flow inside a pipe with rotating sections %
+% nearest neighbour approach holds at sliding interface %
+% Author: G. Gori %
+% Institution: Politecnico di Milano %
+% Date: Oct 5th, 2016 %
+% File Version 4.3.0 "cardinal" %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%
+% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
+%
+% Type of dynamic mesh (NONE, ROTATING_FRAME)
+GRID_MOVEMENT= RIGID_MOTION
+%
+% Motion mach number (non-dimensional). Used for intitializing a viscous flow
+% with the Reynolds number and for computing force coeffs. with dynamic meshes.
+MACH_MOTION= 0.35
+%
+
+MOTION_ORIGIN= 0.0 0.0 0.0
+
+% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
+ROTATION_RATE = 0.1 0.0 0.0
+
diff --git a/TestCases/sliding_interface/supersonic_vortex_shedding/sup_vor_shed_NN.cfg b/TestCases/sliding_interface/supersonic_vortex_shedding/sup_vor_shed_NN.cfg
index 63851b2170f6..c03012f36d12 100644
--- a/TestCases/sliding_interface/supersonic_vortex_shedding/sup_vor_shed_NN.cfg
+++ b/TestCases/sliding_interface/supersonic_vortex_shedding/sup_vor_shed_NN.cfg
@@ -11,7 +11,11 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
+% Enable Multizone mode
+MULTIZONE= YES
%
+% List of config files to specify zone options
+CONFIG_LIST= (zone_1.cfg, zone_2.cfg)
% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------%
%
% Physical governing equations (EULER, NAVIER_STOKES)
@@ -88,28 +92,7 @@ MARKER_FLUID_INTERFACE= ( external_interface, internal_interface)
MARKER_SYM= ( up, down )
%
%
-% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
-%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= YES
-%
-% Type of dynamic mesh (NONE, ROTATING_FRAME)
-GRID_MOVEMENT_KIND= RIGID_MOTION RIGID_MOTION
-%
-% Motion mach number (non-dimensional). Used for intitializing a viscous flow
-% with the Reynolds number and for computing force coeffs. with dynamic meshes.
-MACH_MOTION= 0.35
-%
-
-MOTION_ORIGIN_X= 0.0 0.4
-MOTION_ORIGIN_Y= 0.0 0.0
-MOTION_ORIGIN_Z= 0.0 0.0
-% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
-ROTATION_RATE_X = 0.0 0.0
-ROTATION_RATE_Y = 0.0 0.0
-ROTATION_RATE_Z = 0.0 0.1
-%
%
%
% ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------%
diff --git a/TestCases/sliding_interface/supersonic_vortex_shedding/sup_vor_shed_WA.cfg b/TestCases/sliding_interface/supersonic_vortex_shedding/sup_vor_shed_WA.cfg
index b978a254bcf5..51272d9d9580 100644
--- a/TestCases/sliding_interface/supersonic_vortex_shedding/sup_vor_shed_WA.cfg
+++ b/TestCases/sliding_interface/supersonic_vortex_shedding/sup_vor_shed_WA.cfg
@@ -11,7 +11,13 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
+% Enable Multizone mode
+MULTIZONE= YES
%
+MULTIZONE_SOLVER=BLOCK_JACOBI
+%
+% List of config files to specify zone options
+CONFIG_LIST= (zone_1.cfg, zone_2.cfg)
% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------%
%
% Physical governing equations (EULER, NAVIER_STOKES)
@@ -89,30 +95,6 @@ KIND_INTERPOLATION= WEIGHTED_AVERAGE
MARKER_SYM= ( up, down )
%
%
-% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
-%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= YES
-%
-% Type of dynamic mesh (NONE, ROTATING_FRAME)
-GRID_MOVEMENT_KIND= RIGID_MOTION RIGID_MOTION
-%
-% Motion mach number (non-dimensional). Used for intitializing a viscous flow
-% with the Reynolds number and for computing force coeffs. with dynamic meshes.
-MACH_MOTION= 0.35
-%
-
-MOTION_ORIGIN_X= 0.0 0.4
-MOTION_ORIGIN_Y= 0.0 0.0
-MOTION_ORIGIN_Z= 0.0 0.0
-
-% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
-ROTATION_RATE_X = 0.0 0.0
-ROTATION_RATE_Y = 0.0 0.0
-ROTATION_RATE_Z = 0.0 0.1
-%
-%
-%
% ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------%
%
% Numerical method for spatial gradients (GREEN_GAUSS, WEIGHTED_LEAST_SQUARES)
diff --git a/TestCases/sliding_interface/supersonic_vortex_shedding/zone_1.cfg b/TestCases/sliding_interface/supersonic_vortex_shedding/zone_1.cfg
new file mode 100644
index 000000000000..b362d5479e2f
--- /dev/null
+++ b/TestCases/sliding_interface/supersonic_vortex_shedding/zone_1.cfg
@@ -0,0 +1,24 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% SU2 configuration file %
+% Case description: 2D inviscid, this test case reproduces vortex shedding %
+% after a cylindrical body in a supersonic upstream flow %
+% Author: G. Gori %
+% Institution: Politecnico di Milano %
+% Date: Oct 5th, 2016 %
+% File Version 4.3.0 "cardinal" %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
+% Type of dynamic mesh (NONE, ROTATING_FRAME)
+GRID_MOVEMENT= RIGID_MOTION
+%
+% Motion mach number (non-dimensional). Used for intitializing a viscous flow
+% with the Reynolds number and for computing force coeffs. with dynamic meshes.
+MACH_MOTION= 0.35
+%
+
+MOTION_ORIGIN= 0.0 0.0 0.0
+
+% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
+ROTATION_RATE = 0.0 0.0 0.0
diff --git a/TestCases/sliding_interface/supersonic_vortex_shedding/zone_2.cfg b/TestCases/sliding_interface/supersonic_vortex_shedding/zone_2.cfg
new file mode 100644
index 000000000000..d14c032f9e6c
--- /dev/null
+++ b/TestCases/sliding_interface/supersonic_vortex_shedding/zone_2.cfg
@@ -0,0 +1,24 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% SU2 configuration file %
+% Case description: 2D inviscid, this test case reproduces vortex shedding %
+% after a cylindrical body in a supersonic upstream flow %
+% Author: G. Gori %
+% Institution: Politecnico di Milano %
+% Date: Oct 5th, 2016 %
+% File Version 4.3.0 "cardinal" %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
+% Type of dynamic mesh (NONE, ROTATING_FRAME)
+GRID_MOVEMENT= RIGID_MOTION
+%
+% Motion mach number (non-dimensional). Used for intitializing a viscous flow
+% with the Reynolds number and for computing force coeffs. with dynamic meshes.
+MACH_MOTION= 0.35
+%
+
+MOTION_ORIGIN= 0.4 0.0 0.0
+
+% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
+ROTATION_RATE = 0.0 0.0 0.1
diff --git a/TestCases/sliding_interface/uniform_flow/uniform_NN.cfg b/TestCases/sliding_interface/uniform_flow/uniform_NN.cfg
index 172b67d5e424..e46314ae8bd9 100644
--- a/TestCases/sliding_interface/uniform_flow/uniform_NN.cfg
+++ b/TestCases/sliding_interface/uniform_flow/uniform_NN.cfg
@@ -10,7 +10,15 @@
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
+% Enable Multizone mode
+MULTIZONE= YES
%
+MULTIZONE_SOLVER= BLOCK_JACOBI
+%
+TIME_DOMAIN=YES
+%
+% List of config files to specify zone options
+CONFIG_LIST= (zone_1.cfg, zone_2.cfg)
%
% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------%
%
@@ -89,27 +97,7 @@ MARKER_FLUID_INTERFACE= ( external_interface, internal_interface)
MARKER_SYM= ( up, down )
%
%
-% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
-%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= YES
-%
-% Type of dynamic mesh (NONE, ROTATING_FRAME)
-GRID_MOVEMENT_KIND= RIGID_MOTION RIGID_MOTION
-%
-% Motion mach number (non-dimensional). Used for intitializing a viscous flow
-% with the Reynolds number and for computing force coeffs. with dynamic meshes.
-MACH_MOTION= 0.35
-%
-
-MOTION_ORIGIN_X= 0.0 0.3
-MOTION_ORIGIN_Y= 0.0 0.0
-MOTION_ORIGIN_Z= 0.0 0.0
-% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
-ROTATION_RATE_X = 0.0 0.0
-ROTATION_RATE_Y = 0.0 0.0
-ROTATION_RATE_Z = 0.0 160.0
%
%
% ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------%
diff --git a/TestCases/sliding_interface/uniform_flow/uniform_WA.cfg b/TestCases/sliding_interface/uniform_flow/uniform_WA.cfg
index 4f2504686d1c..3823a32bf4f0 100644
--- a/TestCases/sliding_interface/uniform_flow/uniform_WA.cfg
+++ b/TestCases/sliding_interface/uniform_flow/uniform_WA.cfg
@@ -10,7 +10,11 @@
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
+% Enable Multizone mode
+MULTIZONE= YES
%
+% List of config files to specify zone options
+CONFIG_LIST= (zone_1.cfg, zone_2.cfg)
%
% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------%
%
@@ -90,29 +94,6 @@ KIND_INTERPOLATION= WEIGHTED_AVERAGE
MARKER_SYM= ( up, down )
%
%
-% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
-%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= YES
-%
-% Type of dynamic mesh (NONE, ROTATING_FRAME)
-GRID_MOVEMENT_KIND= RIGID_MOTION RIGID_MOTION
-%
-% Motion mach number (non-dimensional). Used for intitializing a viscous flow
-% with the Reynolds number and for computing force coeffs. with dynamic meshes.
-MACH_MOTION= 0.35
-%
-
-MOTION_ORIGIN_X= 0.0 0.3
-MOTION_ORIGIN_Y= 0.0 0.0
-MOTION_ORIGIN_Z= 0.0 0.0
-
-% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
-ROTATION_RATE_X = 0.0 0.0
-ROTATION_RATE_Y = 0.0 0.0
-ROTATION_RATE_Z = 0.0 160.0
-%
-%
% ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------%
%
% Numerical method for spatial gradients (GREEN_GAUSS, WEIGHTED_LEAST_SQUARES)
diff --git a/TestCases/sliding_interface/uniform_flow/zone_1.cfg b/TestCases/sliding_interface/uniform_flow/zone_1.cfg
new file mode 100644
index 000000000000..05721da54b95
--- /dev/null
+++ b/TestCases/sliding_interface/uniform_flow/zone_1.cfg
@@ -0,0 +1,25 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% SU2 configuration file %
+% Case description: 2D, inviscid flow, this test case is used for debugging %
+% purposes, part of the grid is moving %
+% Author: G. Gori %
+% Institution: Politecnico di Milano %
+% Date: Oct 5th, 2016 %
+% File Version 4.3.0 "cardinal" %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
+%
+% Type of dynamic mesh (NONE, ROTATING_FRAME)
+GRID_MOVEMENT= RIGID_MOTION
+%
+% Motion mach number (non-dimensional). Used for intitializing a viscous flow
+% with the Reynolds number and for computing force coeffs. with dynamic meshes.
+MACH_MOTION= 0.35
+%
+
+MOTION_ORIGIN= 0.3 0.0 0.0
+
+% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
+ROTATION_RATE = 0.0 0.0 0.0
diff --git a/TestCases/sliding_interface/uniform_flow/zone_2.cfg b/TestCases/sliding_interface/uniform_flow/zone_2.cfg
new file mode 100644
index 000000000000..ddd50c65a42e
--- /dev/null
+++ b/TestCases/sliding_interface/uniform_flow/zone_2.cfg
@@ -0,0 +1,25 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% SU2 configuration file %
+% Case description: 2D, inviscid flow, this test case is used for debugging %
+% purposes, part of the grid is moving %
+% Author: G. Gori %
+% Institution: Politecnico di Milano %
+% Date: Oct 5th, 2016 %
+% File Version 4.3.0 "cardinal" %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
+%
+% Type of dynamic mesh (NONE, ROTATING_FRAME)
+GRID_MOVEMENT= RIGID_MOTION
+%
+% Motion mach number (non-dimensional). Used for intitializing a viscous flow
+% with the Reynolds number and for computing force coeffs. with dynamic meshes.
+MACH_MOTION= 0.35
+%
+
+MOTION_ORIGIN= 0.3 0.0 0.0
+
+% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
+ROTATION_RATE = 0.0 0.0 160.0
diff --git a/TestCases/turbomachinery/APU_turbocharger/Jones.cfg b/TestCases/turbomachinery/APU_turbocharger/Jones.cfg
index 2d882b487afc..4bc051f2c8d5 100755
--- a/TestCases/turbomachinery/APU_turbocharger/Jones.cfg
+++ b/TestCases/turbomachinery/APU_turbocharger/Jones.cfg
@@ -9,6 +9,11 @@
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
+% Enable multizone feature
+MULTIZONE= YES
+%
+% List of config files for zone-specific options
+CONFIG_LIST=(stator.cfg, rotor.cfg)
%
% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------%
%
@@ -154,11 +159,6 @@ RAMP_OUTLET_PRESSURE= NO
% Parameters of the outlet pressure ramp (starting outlet pressure, updating-iteration-frequency, total number of iteration for the ramp)
RAMP_OUTLET_PRESSURE_COEFF= (400000.0, 10.0, 500)
%
-% Specify ramp option fr rotating frame (YES, NO) default NO
-RAMP_ROTATING_FRAME= YES
-%
-% Parameters of the rotating frame ramp (starting rotational speed, updating-iteration-frequency, total number of iteration for the ramp)
-RAMP_ROTATING_FRAME_COEFF= (0.0, 39.0, 500)
%
% Specify Kind of average process for linearizing the Navier-Stokes equation at inflow and outflow BC included mixing-plane
% (ALGEBRAIC, AREA, MASSSFLUX, MIXEDOUT) default AREA
@@ -180,20 +180,6 @@ AVERAGE_MACH_LIMIT= 0.05
% Marker(s) of the surface in the surface flow solution file
MARKER_PLOTTING= (BLADE1, BLADE2)
%
-% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
-%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= YES
-%
-% Type of dynamic mesh (NONE, ROTATING_FRAME)
-GRID_MOVEMENT_KIND= ROTATING_FRAME ROTATING_FRAME
-%
-% Motion mach number (non-dimensional). Used for intitializing a viscous flow
-% with the Reynolds number and for computing force coeffs. with dynamic meshes.
-MACH_MOTION= 0.35
-%
-% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
-ROTATION_RATE_Z = 0.0 7508.3
%
%
% ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------%
diff --git a/TestCases/turbomachinery/APU_turbocharger/Jones_rst.cfg b/TestCases/turbomachinery/APU_turbocharger/Jones_rst.cfg
index f9f075dc6ad2..d624c5f4d6e9 100755
--- a/TestCases/turbomachinery/APU_turbocharger/Jones_rst.cfg
+++ b/TestCases/turbomachinery/APU_turbocharger/Jones_rst.cfg
@@ -9,6 +9,11 @@
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
+% Enable multizone feature
+MULTIZONE= YES
+%
+% List of config files for zone-specific options
+CONFIG_LIST=(stator.cfg, rotor_rst.cfg)
%
% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------%
%
@@ -158,11 +163,6 @@ RAMP_OUTLET_PRESSURE= NO
% Parameters of the outlet pressure ramp (starting outlet pressure, updating-iteration-frequency, total number of iteration for the ramp)
RAMP_OUTLET_PRESSURE_COEFF= (400000.0, 10.0, 500)
%
-% Specify ramp option fr rotating frame (YES, NO) default NO
-RAMP_ROTATING_FRAME= NO
-%
-% Parameters of the rotating frame ramp (starting rotational speed, updating-iteration-frequency, total number of iteration for the ramp)
-RAMP_ROTATING_FRAME_COEFF= (0.0, 39.0, 500)
%
% Specify Kind of average process for linearizing the Navier-Stokes equation at inflow and outflow BC included mixing-plane
% (ALGEBRAIC, AREA, MASSSFLUX, MIXEDOUT) default AREA
@@ -185,20 +185,6 @@ AVERAGE_MACH_LIMIT= 0.05
MARKER_PLOTTING= (BLADE1, BLADE2)
%
%
-% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
-%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= YES
-%
-% Type of dynamic mesh (NONE, ROTATING_FRAME)
-GRID_MOVEMENT_KIND= ROTATING_FRAME ROTATING_FRAME
-%
-% Motion mach number (non-dimensional). Used for intitializing a viscous flow
-% with the Reynolds number and for computing force coeffs. with dynamic meshes.
-MACH_MOTION= 0.35
-%
-% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
-ROTATION_RATE_Z = 0.0 7508.3
%
%
% ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------%
diff --git a/TestCases/turbomachinery/APU_turbocharger/rotor.cfg b/TestCases/turbomachinery/APU_turbocharger/rotor.cfg
new file mode 100644
index 000000000000..fa77fa7de249
--- /dev/null
+++ b/TestCases/turbomachinery/APU_turbocharger/rotor.cfg
@@ -0,0 +1,18 @@
+% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
+%
+%
+% Type of dynamic mesh (NONE, ROTATING_FRAME)
+GRID_MOVEMENT= ROTATING_FRAME
+%
+% Motion mach number (non-dimensional). Used for intitializing a viscous flow
+% with the Reynolds number and for computing force coeffs. with dynamic meshes.
+MACH_MOTION= 0.35
+%
+% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
+ROTATION_RATE= 0.0 0.0 7508.3
+
+% Specify ramp option fr rotating frame (YES, NO) default NO
+RAMP_ROTATING_FRAME= YES
+%
+% Parameters of the rotating frame ramp (starting rotational speed, updating-iteration-frequency, total number of iteration for the ramp)
+RAMP_ROTATING_FRAME_COEFF= (0.0, 39.0, 500)
diff --git a/TestCases/turbomachinery/APU_turbocharger/rotor_rst.cfg b/TestCases/turbomachinery/APU_turbocharger/rotor_rst.cfg
new file mode 100644
index 000000000000..18ca1a4e4cb2
--- /dev/null
+++ b/TestCases/turbomachinery/APU_turbocharger/rotor_rst.cfg
@@ -0,0 +1,18 @@
+% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
+%
+%
+% Type of dynamic mesh (NONE, ROTATING_FRAME)
+GRID_MOVEMENT= ROTATING_FRAME
+%
+% Motion mach number (non-dimensional). Used for intitializing a viscous flow
+% with the Reynolds number and for computing force coeffs. with dynamic meshes.
+MACH_MOTION= 0.35
+%
+% Angular velocity vector (rad/s) about the motion origi. Example 1250 RPM -> 130.89969389957471 rad/s
+ROTATION_RATE= 0.0 0.0 7508.3
+
+% Specify ramp option fr rotating frame (YES, NO) default NO
+RAMP_ROTATING_FRAME= NO
+%
+% Parameters of the rotating frame ramp (starting rotational speed, updating-iteration-frequency, total number of iteration for the ramp)
+RAMP_ROTATING_FRAME_COEFF= (0.0, 39.0, 500)
diff --git a/TestCases/turbomachinery/APU_turbocharger/stator.cfg b/TestCases/turbomachinery/APU_turbocharger/stator.cfg
new file mode 100644
index 000000000000..3fcbeda15ea7
--- /dev/null
+++ b/TestCases/turbomachinery/APU_turbocharger/stator.cfg
@@ -0,0 +1,7 @@
+% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
+%
+%
+% Type of dynamic mesh (NONE, ROTATING_FRAME)
+GRID_MOVEMENT= ROTATING_FRAME
+%
+
diff --git a/TestCases/turbomachinery/axial_stage_2D/Axial_stage2D.cfg b/TestCases/turbomachinery/axial_stage_2D/Axial_stage2D.cfg
index 091091220e91..7aedba8bd9b7 100755
--- a/TestCases/turbomachinery/axial_stage_2D/Axial_stage2D.cfg
+++ b/TestCases/turbomachinery/axial_stage_2D/Axial_stage2D.cfg
@@ -9,6 +9,11 @@
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
+% Enable multizone mode
+MULTIZONE= YES
+%
+% List of config files
+CONFIG_LIST= (zone_1.cfg, zone_2.cfg)
%
% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------%
%
@@ -185,21 +190,6 @@ CFL_ADAPT= NO
% Parameters of the adaptive CFL number (factor down, factor up, CFL min value, CFL max value )
CFL_ADAPT_PARAM= ( 1.3, 1.2, 1.0, 10.0)
%
-%
-% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
-%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= YES
-%
-% Type of dynamic mesh (NONE, ROTATING_FRAME)
-GRID_MOVEMENT_KIND= STEADY_TRANSLATION STEADY_TRANSLATION
-%
-% Motion mach number (non-dimensional). Used for intitializing a viscous flow
-% with the Reynolds number and for computing force coeffs. with dynamic meshes.
-MACH_MOTION= 0.35
-%
-%Steady transaltion rate
-TRANSLATION_RATE_Y= 0.0 -150.0
% ------------------------ LINEAR SOLVER DEFINITION ---------------------------%
%
diff --git a/TestCases/turbomachinery/axial_stage_2D/zone_1.cfg b/TestCases/turbomachinery/axial_stage_2D/zone_1.cfg
new file mode 100644
index 000000000000..3ddcc043834a
--- /dev/null
+++ b/TestCases/turbomachinery/axial_stage_2D/zone_1.cfg
@@ -0,0 +1,17 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% SU2 configuration file %
+% Case description: 2D Axial stage %
+% Author: S. Vitale %
+% Institution: Delft University of Technology %
+% Date: Feb 28th, 2017 %
+% File Version 5.0.0"cardinal" %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
+%
+% Type of dynamic mesh (NONE, ROTATING_FRAME)
+GRID_MOVEMENT= NONE
+%
+
diff --git a/TestCases/turbomachinery/axial_stage_2D/zone_2.cfg b/TestCases/turbomachinery/axial_stage_2D/zone_2.cfg
new file mode 100644
index 000000000000..02acc04d9384
--- /dev/null
+++ b/TestCases/turbomachinery/axial_stage_2D/zone_2.cfg
@@ -0,0 +1,22 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% SU2 configuration file %
+% Case description: 2D Axial stage %
+% Author: S. Vitale %
+% Institution: Delft University of Technology %
+% Date: Feb 28th, 2017 %
+% File Version 5.0.0"cardinal" %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
+%
+% Type of dynamic mesh (NONE, ROTATING_FRAME)
+GRID_MOVEMENT= STEADY_TRANSLATION
+%
+% Motion mach number (non-dimensional). Used for intitializing a viscous flow
+% with the Reynolds number and for computing force coeffs. with dynamic meshes.
+MACH_MOTION= 0.35
+%
+%Steady transaltion rate
+TRANSLATION_RATE= 0.0 -150.0 0.0
diff --git a/TestCases/unsteady/pitching_naca64a010_euler/pitching_NACA64A010.cfg b/TestCases/unsteady/pitching_naca64a010_euler/pitching_NACA64A010.cfg
index d58fc60c3d5b..fac28232c1f6 100644
--- a/TestCases/unsteady/pitching_naca64a010_euler/pitching_NACA64A010.cfg
+++ b/TestCases/unsteady/pitching_naca64a010_euler/pitching_NACA64A010.cfg
@@ -47,32 +47,24 @@ UNST_INT_ITER= 110
UNST_ADJOINT_ITER= 251
% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
-%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= YES
-%
% Type of mesh motion (NONE, FLUTTER, RIGID_MOTION, FLUID_STRUCTURE)
-GRID_MOVEMENT_KIND= RIGID_MOTION
+%GRID_MOVEMENT= RIGID_MOTION
%
+SURFACE_MOVEMENT= DEFORMING
+
+MARKER_MOVING= airfoil
% Motion mach number (non-dimensional). Used for initializing a viscous flow
% with the Reynolds number and for computing force coeffs. with dynamic meshes.
MACH_MOTION= 0.796
%
% Coordinates of the rigid motion origin
-MOTION_ORIGIN_X= 0.248
-MOTION_ORIGIN_Y= 0.0
-MOTION_ORIGIN_Z= 0.0
+SURFACE_MOTION_ORIGIN= 0.248 0.0 0.0
%
% Pitching angular freq. (rad/s) about x, y, & z axes (RIGID_MOTION only)
-PITCHING_OMEGA_X= 0.0
-PITCHING_OMEGA_Y= 0.0
-PITCHING_OMEGA_Z= 106.69842
+SURFACE_PITCHING_OMEGA= 0.0 0.0 106.69842
%
% Pitching amplitude (degrees) about x, y, & z axes (RIGID_MOTION only)
-PITCHING_AMPL_X= 0.0
-PITCHING_AMPL_Y= 0.0
-PITCHING_AMPL_Z= 1.01
-
+SURFACE_PITCHING_AMPL= 0.0 0.0 1.01
% ----------- COMPRESSIBLE AND INCOMPRESSIBLE FREE-STREAM DEFINITION ----------%
%
% Mach number (non-dimensional, based on the free-stream values)
diff --git a/TestCases/unsteady/pitching_naca64a010_rans/turb_NACA64A010.cfg b/TestCases/unsteady/pitching_naca64a010_rans/turb_NACA64A010.cfg
index f768fcb5af0c..40a6fbcb69cb 100644
--- a/TestCases/unsteady/pitching_naca64a010_rans/turb_NACA64A010.cfg
+++ b/TestCases/unsteady/pitching_naca64a010_rans/turb_NACA64A010.cfg
@@ -47,29 +47,20 @@ UNST_INT_ITER= 2000
% Direct iteration number at which to begin unsteady adjoint
UNST_ADJOINT_ITER= 251
%
-% Mesh motion for unsteady simulations (NO, YES)
-GRID_MOVEMENT= YES
-%
% Type of mesh motion (NONE, FLUTTER, RIGID_MOTION, FLUID_STRUCTURE)
-GRID_MOVEMENT_KIND= RIGID_MOTION
+GRID_MOVEMENT= RIGID_MOTION
%
% Mach number (non-dimensional, based on the mesh velocity and freestream vals.)
MACH_MOTION= 0.796
%
% Coordinates of the rigid motion origin
-MOTION_ORIGIN_X= 0.248
-MOTION_ORIGIN_Y= 0.0
-MOTION_ORIGIN_Z= 0.0
+MOTION_ORIGIN= 0.248 0.0 0.0
%
% Pitching angular freq. (rad/s) about x, y, & z axes (RIGID_MOTION only)
-PITCHING_OMEGA_X= 0.0
-PITCHING_OMEGA_Y= 0.0
-PITCHING_OMEGA_Z= 106.69842
+PITCHING_OMEGA= 0.0 0.0 106.69842
%
% Pitching amplitude (degrees) about x, y, & z axes (RIGID_MOTION only)
-PITCHING_AMPL_X= 0.0
-PITCHING_AMPL_Y= 0.0
-PITCHING_AMPL_Z= 1.01
+PITCHING_AMPL= 0.0 0.0 1.01
%
% ----------- COMPRESSIBLE AND INCOMPRESSIBLE FREE-STREAM DEFINITION ----------%
diff --git a/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg b/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg
index b19ba63d59cd..d6f784e5c188 100644
--- a/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg
+++ b/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg
@@ -45,27 +45,17 @@ UNST_INT_ITER= 1000
% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
%
-% Mesh motion for unsteady simulations (NO, YES)
-GRID_MOVEMENT= YES
-%
% Type of mesh motion (NONE, FLUTTER, RIGID_ROTATION, RIGID_PITCHING)
-GRID_MOVEMENT_KIND= RIGID_MOTION
+GRID_MOVEMENT= RIGID_MOTION
%
% Coordinates of the motion origin
-MOTION_ORIGIN_X= 0.25
-MOTION_ORIGIN_Y= 0.0
-MOTION_ORIGIN_Z= 0.0
+MOTION_ORIGIN= 0.25 0.0 0.0
%
% Plunging angular freq. (rad/s) in x, y, & z directions
-PLUNGING_OMEGA_X= 0.0
-PLUNGING_OMEGA_Y= 106.69842
-PLUNGING_OMEGA_Z= 0.0
+PLUNGING_OMEGA= 0.0 106.69842 0.0
%
% Plunging amplitude (m) in x, y, & z directions
-PLUNGING_AMPL_X= 0.0
-PLUNGING_AMPL_Y= 1.01
-PLUNGING_AMPL_Z= 0.0
-
+PLUNGING_AMPL= 0.0 1.01 0.0
% -------------------- COMPRESSIBLE FREE-STREAM DEFINITION --------------------%
%
% Mach number (non-dimensional, based on the free-stream values)
diff --git a/config_template.cfg b/config_template.cfg
index a68070df38bd..14578550bc4f 100644
--- a/config_template.cfg
+++ b/config_template.cfg
@@ -302,66 +302,75 @@ UNST_RESTART_ITER= 0
% ----------------------- DYNAMIC MESH DEFINITION -----------------------------%
%
-% Dynamic mesh simulation (NO, YES)
-GRID_MOVEMENT= NO
-%
-% Type of dynamic mesh (NONE, RIGID_MOTION, DEFORMING, ROTATING_FRAME,
-% MOVING_WALL, STEADY_TRANSLATION, FLUID_STRUCTURE,
-% AEROELASTIC, ELASTICITY, EXTERNAL,
-% AEROELASTIC_RIGID_MOTION, GUST)
-GRID_MOVEMENT_KIND= DEFORMING
+% Type of dynamic mesh (NONE, RIGID_MOTION, ROTATING_FRAME,
+% STEADY_TRANSLATION,
+% ELASTICITY, GUST)
+GRID_MOVEMENT= DEFORMING
%
% Motion mach number (non-dimensional). Used for initializing a viscous flow
% with the Reynolds number and for computing force coeffs. with dynamic meshes.
MACH_MOTION= 0.8
%
+% Coordinates of the motion origin
+MOTION_ORIGIN= 0.25
+%
+% Angular velocity vector (rad/s) about the motion origin
+ROTATION_RATE = 0.0 0.0 0.0
+%
+% Pitching angular freq. (rad/s) about the motion origin
+PITCHING_OMEGA= 0.0 0.0 0.0
+%
+% Pitching amplitude (degrees) about the motion origin
+PITCHING_AMPL= 0.0 0.0 0.0
+%
+% Pitching phase offset (degrees) about the motion origin
+PITCHING_PHASE_= 0.0 0.0 0.0
+%
+% Translational velocity (m/s or ft/s) in the x, y, & z directions
+TRANSLATION_RATE = 0.0 0.0 0.0
+%
+% Plunging angular freq. (rad/s) in x, y, & z directions
+PLUNGING_OMEGA= 0.0 0.0 0.0
+%
+% Plunging amplitude (m or ft) in x, y, & z directions
+PLUNGING_AMPL= 0.0 0.0 0.0
+%
+% Type of dynamic surface movement (NONE, DEFORMING,
+% MOVING_WALL, FLUID_STRUCTURE, FLUID_STRUCTURE_STATIC,
+% AEROELASTIC, EXTERNAL, EXTERNAL_ROTATION,
+% AEROELASTIC_RIGID_MOTION)
+SURFACE_MOVEMENT= NONE
+%
% Moving wall boundary marker(s) (NONE = no marker, ignored for RIGID_MOTION)
MARKER_MOVING= ( NONE )
%
% Coordinates of the motion origin
-MOTION_ORIGIN_X= 0.25
-MOTION_ORIGIN_Y= 0.0
-MOTION_ORIGIN_Z= 0.0
+SURFACE_MOTION_ORIGIN= 0.25
%
% Angular velocity vector (rad/s) about the motion origin
-ROTATION_RATE_X = 0.0
-ROTATION_RATE_Y = 0.0
-ROTATION_RATE_Z = 0.0
+SURFACE_ROTATION_RATE = 0.0 0.0 0.0
%
% Pitching angular freq. (rad/s) about the motion origin
-PITCHING_OMEGA_X= 0.0
-PITCHING_OMEGA_Y= 0.0
-PITCHING_OMEGA_Z= 106.69842
+SURFACE_PITCHING_OMEGA= 0.0 0.0 0.0
%
% Pitching amplitude (degrees) about the motion origin
-PITCHING_AMPL_X= 0.0
-PITCHING_AMPL_Y= 0.0
-PITCHING_AMPL_Z= 1.01
+SURFACE_PITCHING_AMPL= 0.0 0.0 0.0
%
% Pitching phase offset (degrees) about the motion origin
-PITCHING_PHASE_X= 0.0
-PITCHING_PHASE_Y= 0.0
-PITCHING_PHASE_Z= 0.0
+SURFACE_PITCHING_PHASE_= 0.0 0.0 0.0
%
% Translational velocity (m/s or ft/s) in the x, y, & z directions
-TRANSLATION_RATE_X = 0.0
-TRANSLATION_RATE_Y = 0.0
-TRANSLATION_RATE_Z = 0.0
+SURFACE_TRANSLATION_RATE = 0.0 0.0 0.0
%
% Plunging angular freq. (rad/s) in x, y, & z directions
-PLUNGING_OMEGA_X= 0.0
-PLUNGING_OMEGA_Y= 0.0
-PLUNGING_OMEGA_Z= 0.0
+SURFACE_PLUNGING_OMEGA= 0.0 0.0 0.0
%
% Plunging amplitude (m or ft) in x, y, & z directions
-PLUNGING_AMPL_X= 0.0
-PLUNGING_AMPL_Y= 0.0
-PLUNGING_AMPL_Z= 0.0
+SURFACE_PLUNGING_AMPL= 0.0 0.0 0.0
%
% Move Motion Origin for marker moving (1 or 0)
MOVE_MOTION_ORIGIN = 0
-
-
+%
% ------------------------- BUFFET SENSOR DEFINITION --------------------------%
%
% Compute the Kenway-Martins separation sensor for buffet-onset detection