@@ -513,6 +513,16 @@ void CConfig::addRiemannOption(const string name, unsigned short & nMarker_Riema
513513 option_map.insert (pair<string, COptionBase *>(name, val));
514514}
515515
516+ template <class Tenum >
517+ void CConfig::addWallSpeciesOption (const string name, unsigned short & nMarker_Wall_Species, string * & Marker_Wall_Species,
518+ WALL_SPECIES_TYPE** & option_field, const map<string, Tenum> & enum_map,
519+ su2double** & value, unsigned short & nSpecies_per_Wall) {
520+ assert (option_map.find (name) == option_map.end ());
521+ all_options.insert (pair<string, bool >(name, true ));
522+ COptionBase* val = new COptionWallSpecies<Tenum>(name, nMarker_Wall_Species, Marker_Wall_Species, option_field, enum_map, value, nSpecies_per_Wall);
523+ option_map.insert (pair<string, COptionBase *>(name, val));
524+ }
525+
516526template <class Tenum >
517527void CConfig::addGilesOption (const string name, unsigned short & nMarker_Giles, string * & Marker_Giles, unsigned short * & option_field, const map<string, Tenum> & enum_map,
518528 su2double* & var1, su2double* & var2, su2double** & FlowDir, su2double* & relaxfactor1, su2double* & relaxfactor2) {
@@ -1621,6 +1631,11 @@ void CConfig::SetConfig_Options() {
16211631 /* !\brief MARKER_RIEMANN \n DESCRIPTION: Riemann boundary marker(s) with the following formats, a unit vector.
16221632 * \n OPTIONS: See \link Riemann_Map \endlink. The variables indicated by the option and the flow direction unit vector must be specified. \ingroup Config*/
16231633 addRiemannOption (" MARKER_RIEMANN" , nMarker_Riemann, Marker_Riemann, Kind_Data_Riemann, Riemann_Map, Riemann_Var1, Riemann_Var2, Riemann_FlowDir);
1634+ /* !\brief MARKER_WALL_SPECIES \n DESCRIPTION: Wall species boundary marker(s) with the following format:
1635+ * (marker_name, BC_TYPE, value, BC_TYPE, value, ...) where BC_TYPE is either FLUX (Neumann) or VALUE (Dirichlet).
1636+ * Each marker must specify the same number of species (N species per marker).
1637+ * \n OPTIONS: See \link Wall_Map \endlink. \ingroup Config*/
1638+ addWallSpeciesOption (" MARKER_WALL_SPECIES" , nMarker_Wall_Species, Marker_Wall_Species, Kind_Wall_Species, Wall_Map, Wall_SpeciesVal, nSpecies_per_Wall);
16241639 /* !\brief MARKER_GILES \n DESCRIPTION: Giles boundary marker(s) with the following formats, a unit vector. */
16251640 /* \n OPTIONS: See \link Giles_Map \endlink. The variables indicated by the option and the flow direction unit vector must be specified. \ingroup Config*/
16261641 addGilesOption (" MARKER_GILES" , nMarker_Giles, Marker_Giles, Kind_Data_Giles, Giles_Map, Giles_Var1, Giles_Var2, Giles_FlowDir, RelaxFactorAverage, RelaxFactorFourier);
@@ -5702,7 +5717,7 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i
57025717 /* --- Helper function that checks scalar variable bounds. ---*/
57035718 auto checkScalarBounds = [&](su2double scalar, const string& name, su2double lowerBound, su2double upperBound) {
57045719 if (scalar < lowerBound || scalar > upperBound)
5705- SU2_MPI::Error ( string ( " Variable : " ) + name + string ( " , is out of bounds. " ), CURRENT_FUNCTION) ;
5720+ cout << " Value : " << scalar << " for " << name << " is out of bounds [ " << lowerBound << " , " << upperBound << " ]. " << endl ;
57065721 };
57075722
57085723 /* --- Some options have to provide as many entries as there are additional species equations. ---*/
@@ -5713,6 +5728,8 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i
57135728 nSpecies_options.insert (nSpecies_options.end (), {nSpecies_Clipping_Min, nSpecies_Clipping_Max});
57145729 if (nMarker_Inlet_Species > 0 )
57155730 nSpecies_options.push_back (nSpecies_per_Inlet);
5731+ if (nMarker_Wall_Species > 0 )
5732+ nSpecies_options.push_back (nSpecies_per_Wall);
57165733 // Add more options for size check here.
57175734
57185735 /* --- nSpecies_Init is the master, but it simply checks for consistency. ---*/
@@ -9250,6 +9267,28 @@ const su2double* CConfig::GetInlet_SpeciesVal(const string& val_marker) const {
92509267 return Inlet_SpeciesVal[iMarker_Inlet_Species];
92519268}
92529269
9270+ su2double CConfig::GetWall_SpeciesVal (const string& val_marker, unsigned short iSpecies) const {
9271+ /* --- Search for the marker in the wall species list ---*/
9272+ for (unsigned short iMarker_Wall_Species = 0 ; iMarker_Wall_Species < nMarker_Wall_Species; iMarker_Wall_Species++) {
9273+ if (Marker_Wall_Species[iMarker_Wall_Species] == val_marker) {
9274+ return Wall_SpeciesVal[iMarker_Wall_Species][iSpecies];
9275+ }
9276+ }
9277+ /* --- If marker not found (MARKER_WALL_SPECIES=NONE), return zero flux ---*/
9278+ return 0.0 ;
9279+ }
9280+
9281+ WALL_SPECIES_TYPE CConfig::GetWall_SpeciesType (const string& val_marker, unsigned short iSpecies) const {
9282+ /* --- Search for the marker in the wall species list ---*/
9283+ for (unsigned short iMarker_Wall_Species = 0 ; iMarker_Wall_Species < nMarker_Wall_Species; iMarker_Wall_Species++) {
9284+ if (Marker_Wall_Species[iMarker_Wall_Species] == val_marker) {
9285+ return Kind_Wall_Species[iMarker_Wall_Species][iSpecies];
9286+ }
9287+ }
9288+ /* --- If marker not found (MARKER_WALL_SPECIES=NONE), return FLUX type (zero flux BC) ---*/
9289+ return WALL_SPECIES_TYPE::FLUX;
9290+ }
9291+
92539292const su2double* CConfig::GetInlet_TurbVal (const string& val_marker) const {
92549293 /* --- If Turbulent Inlet is not provided for the marker, return free stream values. ---*/
92559294 for (auto iMarker = 0u ; iMarker < nMarker_Inlet_Turb; iMarker++) {
0 commit comments