SU2
option_structure.hpp
Go to the documentation of this file.
1 
38 #pragma once
39 
40 #include "./mpi_structure.hpp"
41 
42 #include <iostream>
43 #include <sstream>
44 #include <string>
45 #include <vector>
46 #include <map>
47 #include <cstdlib>
48 #include <algorithm>
49 
50 using namespace std;
51 
64 template <typename T, typename U>
65 class CCreateMap {
66 private:
67  std::map<T, U> m_map;
68 public:
69  CCreateMap(const T& key, const U& val) {
70  m_map[key] = val;
71  }
72  CCreateMap<T, U>& operator()(const T& key, const U& val) {
73  m_map[key] = val;
74  return *this;
75  }
76  operator std::map<T, U>() {
77  return m_map;
78  }
79 };
80 
85 inline void StringToUpperCase(string & str) {
86  std::transform(str.begin(), str.end(), str.begin(), ::toupper);
87 }
88 
94 inline string StringToUpperCase(const string & str) {
95  string upp_str(str);
96  std::transform(upp_str.begin(), upp_str.end(), upp_str.begin(), ::toupper);
97  return upp_str;
98 }
99 
104  SU2_CFD = 1,
105  SU2_DEF = 2,
106  SU2_DOT = 3,
107  SU2_MSH = 4,
108  SU2_GEO = 5,
109  SU2_SOL = 6
110 };
111 
112 const unsigned int EXIT_DIVERGENCE = 2;
114 const unsigned int BUFSIZE = 3000000;
115 const unsigned int MAX_PARAMETERS = 10;
116 const unsigned int MAX_NUMBER_PERIODIC = 10;
117 const unsigned int MAX_STRING_SIZE = 200;
118 const unsigned int MAX_NUMBER_FFD = 10;
119 const unsigned int MAX_SOLS = 6;
120 const unsigned int MAX_TERMS = 6;
121 const unsigned int MAX_ZONES = 3;
122 const unsigned int MAX_FE_KINDS = 4;
123 const unsigned int NO_RK_ITER = 0;
125 const unsigned int OVERHEAD = 4;
127 const unsigned int MESH_0 = 0;
128 const unsigned int MESH_1 = 1;
129 const unsigned int ZONE_0 = 0;
130 const unsigned int ZONE_1 = 1;
132 const su2double STANDART_GRAVITY = 9.80665;
134 const su2double EPS = 1.0E-16;
135 const su2double TURB_EPS = 1.0E-16;
137 const su2double ONE2 = 0.5;
138 const su2double TWO3 = 2.0 / 3.0;
139 const su2double FOUR3 = 4.0 / 3.0;
141 const su2double PI_NUMBER = 4.0 * atan(1.0);
143 const int MASTER_NODE = 0;
144 const int SINGLE_NODE = 1;
145 const int SINGLE_ZONE = 1;
147 const unsigned short N_ELEM_TYPES = 7;
148 const unsigned short N_POINTS_LINE = 2;
149 const unsigned short N_POINTS_TRIANGLE = 3;
150 const unsigned short N_POINTS_QUADRILATERAL = 4;
151 const unsigned short N_POINTS_TETRAHEDRON = 4;
152 const unsigned short N_POINTS_HEXAHEDRON = 8;
153 const unsigned short N_POINTS_PYRAMID = 5;
154 const unsigned short N_POINTS_PRISM = 6;
159 enum ANSWER {
160  NONE = 0,
161  NO = 0,
162  YES = 1
163 };
164 
169  VERB_NONE = 0,
172 };
173 static const map<string, VERB_LEVEL> Verb_Map = CCreateMap<string, VERB_LEVEL>
174 ("NONE", VERB_NONE)
175 ("MEDIUM", VERB_MEDIUM)
176 ("HIGH", VERB_HIGH);
177 
182  NO_SOLVER = 0,
183  EULER = 1,
185  RANS = 3,
191  ADJ_EULER = 18,
193  ADJ_RANS = 20,
195  DISC_ADJ_EULER = 35,
196  DISC_ADJ_RANS = 36,
197  DISC_ADJ_NAVIER_STOKES = 37
198 };
199 /* BEGIN_CONFIG_ENUMS */
200 static const map<string, ENUM_SOLVER> Solver_Map = CCreateMap<string, ENUM_SOLVER>
201 ("NONE", NO_SOLVER)
202 ("EULER", EULER)
203 ("NAVIER_STOKES", NAVIER_STOKES)
204 ("RANS", RANS)
205 ("POISSON_EQUATION", POISSON_EQUATION)
206 ("ADJ_EULER", ADJ_EULER)
207 ("ADJ_NAVIER_STOKES", ADJ_NAVIER_STOKES)
208 ("ADJ_RANS", ADJ_RANS )
209 ("WAVE_EQUATION", WAVE_EQUATION)
210 ("HEAT_EQUATION", HEAT_EQUATION)
211 ("FEM_ELASTICITY", FEM_ELASTICITY)
212 ("DISC_ADJ_EULER", DISC_ADJ_EULER)
213 ("DISC_ADJ_RANS", DISC_ADJ_RANS)
214 ("DISC_ADJ_NAVIERSTOKES", DISC_ADJ_EULER)
215 ("FLUID_STRUCTURE_INTERACTION", FLUID_STRUCTURE_INTERACTION)
216 
217 ("TEMPLATE_SOLVER", TEMPLATE_SOLVER);
218 
219 
228 };
229 static const map<string, ENUM_FSI_FLUID_PROBLEM> FSI_Fluid_Solver_Map = CCreateMap<string, ENUM_FSI_FLUID_PROBLEM>
230 ("NONE", NO_SOLVER_FFSI)
231 ("EULER", EULER_FFSI)
232 ("NAVIER_STOKES", NAVIER_STOKES_FFSI)
233 ("RANS", RANS_FFSI);
234 
241 };
242 static const map<string, ENUM_FSI_STRUC_PROBLEM> FSI_Struc_Solver_Map = CCreateMap<string, ENUM_FSI_STRUC_PROBLEM>
243 ("NONE", NO_SOLVER_SFSI)
244 ("FEM_ELASTICITY", FEM_ELASTICITY_SFSI);
245 
252 };
253 static const map<string, ENUM_STRUCT_SOLVER> Struct_Map = CCreateMap<string, ENUM_STRUCT_SOLVER>
254 ("SMALL_DEFORMATIONS", SMALL_DEFORMATIONS)
255 ("LARGE_DEFORMATIONS", LARGE_DEFORMATIONS);
256 
257 
264 };
265 static const map<string, ENUM_MATERIAL_MODEL> Material_Map = CCreateMap<string, ENUM_MATERIAL_MODEL>
266 ("LINEAR_ELASTIC", LINEAR_ELASTIC)
267 ("NEO_HOOKEAN", NEO_HOOKEAN);
268 
275 };
276 static const map<string, ENUM_MAT_COMPRESS> MatComp_Map = CCreateMap<string, ENUM_MAT_COMPRESS>
277 ("COMPRESSIBLE", COMPRESSIBLE_MAT)
278 ("INCOMPRESSIBLE", INCOMPRESSIBLE_MAT);
279 
280 
281 
289 };
290 
291 static const map<string, ENUM_INTERPOLATOR> Interpolator_Map = CCreateMap<string, ENUM_INTERPOLATOR>
292 ("NEAREST_NEIGHBOR", NEAREST_NEIGHBOR)
293 ("ISOPARAMETRIC", ISOPARAMETRIC)
294 ("CONSISTCONSERVE", CONSISTCONSERVE);
295 
296 
303 };
304 static const map<string, ENUM_REGIME> Regime_Map = CCreateMap<string, ENUM_REGIME>
305 ("COMPRESSIBLE", COMPRESSIBLE)
306 ("INCOMPRESSIBLE", INCOMPRESSIBLE);
315 };
316 static const map<string, ENUM_KIND_NONDIM> NonDim_Map = CCreateMap<string, ENUM_KIND_NONDIM>
317 ("DIMENSIONAL", DIMENSIONAL)
318 ("FREESTREAM_PRESS_EQ_ONE", FREESTREAM_PRESS_EQ_ONE)
319 ("FREESTREAM_VEL_EQ_MACH", FREESTREAM_VEL_EQ_MACH)
320 ("FREESTREAM_VEL_EQ_ONE", FREESTREAM_VEL_EQ_ONE);
321 
326  SI = 0,
327  US = 1
328 };
329 static const map<string, ENUM_MEASUREMENTS> Measurements_Map = CCreateMap<string, ENUM_MEASUREMENTS>
330 ("SI", SI)
331 ("US", US);
332 
348 };
349 
350 const int FLOW_SOL = 0;
351 const int ADJFLOW_SOL = 1;
353 const int TURB_SOL = 2;
354 const int ADJTURB_SOL = 3;
356 const int TRANS_SOL = 4;
357 const int POISSON_SOL = 2;
358 const int WAVE_SOL = 1;
359 const int HEAT_SOL = 2;
360 const int FEA_SOL = 1;
362 const int TEMPLATE_SOL = 0;
364 const int CONV_TERM = 0;
365 const int VISC_TERM = 1;
366 const int SOURCE_FIRST_TERM = 2;
367 const int SOURCE_SECOND_TERM = 3;
368 const int CONV_BOUND_TERM = 4;
369 const int VISC_BOUND_TERM = 5;
371 const int FEA_TERM = 0;
378 const int EL_TRIA = 0;
379 const int EL_QUAD = 1;
381 const int EL_TETRA = 0;
382 const int EL_HEXA = 1;
389  DIRECT = 0,
391  DISCRETE_ADJOINT = 2 /*< \brief AD-based discrete adjoint problem. */
392 };
393 static const map<string, ENUM_MATH_PROBLEM> Math_Problem_Map = CCreateMap<string, ENUM_MATH_PROBLEM>
394 ("DIRECT", DIRECT)
395 ("CONTINUOUS_ADJOINT", CONTINUOUS_ADJOINT)
396 ("DISCRETE_ADJOINT", DISCRETE_ADJOINT);
397 
405 };
406 static const map<string, ENUM_SPACE> Space_Map = CCreateMap<string, ENUM_SPACE>
407 ("NONE", NO_CONVECTIVE)
408 ("SPACE_CENTERED", SPACE_CENTERED)
409 ("SPACE_UPWIND", SPACE_UPWIND);
410 
415  STANDARD_AIR = 0,
416  IDEAL_GAS = 1,
417  VW_GAS = 2,
418  PR_GAS = 3
419 };
420 
421 static const map<string, ENUM_FLUIDMODEL> FluidModel_Map = CCreateMap<string, ENUM_FLUIDMODEL>
422 ("STANDARD_AIR", STANDARD_AIR)
423 ("IDEAL_GAS", IDEAL_GAS)
424 ("VW_GAS", VW_GAS)
425 ("PR_GAS", PR_GAS);
426 
432  REYNOLDS = 0,
433  TD_CONDITIONS = 1
434 
435 };
436 
437 static const map<string, ENUM_INIT_OPTION> InitOption_Map = CCreateMap<string, ENUM_INIT_OPTION>
438 ("REYNOLDS", REYNOLDS)
439 ("TD_CONDITIONS", TD_CONDITIONS);
440 
447  DENSITY_FS = 1
448 
449 };
450 
451 static const map<string, ENUM_FREESTREAM_OPTION> FreeStreamOption_Map = CCreateMap<string, ENUM_FREESTREAM_OPTION>
452 ("TEMPERATURE_FS", TEMPERATURE_FS)
453 ("DENSITY_FS", DENSITY_FS);
454 
460  SUTHERLAND = 1
461 };
462 
463 static const map<string, ENUM_VISCOSITYMODEL> ViscosityModel_Map = CCreateMap<string, ENUM_VISCOSITYMODEL>
464 ("CONSTANT_VISCOSITY", CONSTANT_VISCOSITY)
465 ("SUTHERLAND", SUTHERLAND);
466 
472  CONSTANT_PRANDTL = 1
473 };
474 
475 static const map<string, ENUM_CONDUCTIVITYMODEL> ConductivityModel_Map = CCreateMap<string, ENUM_CONDUCTIVITYMODEL>
476 ("CONSTANT_CONDUCTIVITY", CONSTANT_CONDUCTIVITY)
477 ("CONSTANT_PRANDTL", CONSTANT_PRANDTL);
478 
484  DEFORMING = 1,
487  EXTERNAL = 4,
495  GUST = 12,
498 };
499 
500 static const map<string, ENUM_GRIDMOVEMENT> GridMovement_Map = CCreateMap<string, ENUM_GRIDMOVEMENT>
501 ("NONE", NO_MOVEMENT)
502 ("DEFORMING", DEFORMING)
503 ("RIGID_MOTION", RIGID_MOTION)
504 ("FLUID_STRUCTURE", FLUID_STRUCTURE)
505 ("EXTERNAL", EXTERNAL)
506 ("EXTERNAL_ROTATION", EXTERNAL_ROTATION)
507 ("AEROELASTIC", AEROELASTIC)
508 ("ROTATING_FRAME", ROTATING_FRAME)
509 ("ELASTICITY", ELASTICITY)
510 ("MOVING_WALL", MOVING_WALL)
511 ("MOVING_HTP", MOVING_HTP)
512 ("AEROELASTIC_RIGID_MOTION", AEROELASTIC_RIGID_MOTION)
513 ("STEADY_TRANSLATION", STEADY_TRANSLATION)
514 ("GUST", GUST);
515 
520  NO_GUST = 0,
521  TOP_HAT = 1,
522  SINE = 2,
524  VORTEX = 4,
525  EOG = 5
526 };
527 static const map<string, ENUM_GUST_TYPE> Gust_Type_Map = CCreateMap<string, ENUM_GUST_TYPE>
528 ("NONE", NO_GUST)
529 ("TOP_HAT", TOP_HAT)
530 ("SINE", SINE)
531 ("ONE_M_COSINE", ONE_M_COSINE)
532 ("VORTEX", VORTEX)
533 ("EOG", EOG);
534 
539  X_DIR = 0,
540  Y_DIR = 1
541 };
542 static const map<string, ENUM_GUST_DIR> Gust_Dir_Map = CCreateMap<string, ENUM_GUST_DIR>
543 ("X_DIR", X_DIR)
544 ("Y_DIR", Y_DIR);
545 
546 // If you add to ENUM_CENTERED, you must also add the option to ENUM_CONVECTIVE
552  JST = 1,
553  LAX = 2,
554  JST_KE = 4
555 };
556 static const map<string, ENUM_CENTERED> Centered_Map = CCreateMap<string, ENUM_CENTERED>
557 ("NONE", NO_CENTERED)
558 ("JST", JST)
559 ("JST_KE", JST_KE)
560 ("LAX-FRIEDRICH", LAX);
561 
562 
563 // If you add to ENUM_UPWIND, you must also add the option to ENUM_CONVECTIVE
568  NO_UPWIND = 0,
569  ROE = 1,
571  AUSM = 3,
572  HLLC = 4,
573  SW = 5,
574  MSW = 6,
575  TURKEL = 7,
577  CUSP = 9,
579 };
580 static const map<string, ENUM_UPWIND> Upwind_Map = CCreateMap<string, ENUM_UPWIND>
581 ("NONE", NO_UPWIND)
582 ("ROE", ROE)
583 ("TURKEL_PREC", TURKEL)
584 ("AUSM", AUSM)
585 ("AUSMPW+", AUSMPWPLUS)
586 ("HLLC", HLLC)
587 ("SW", SW)
588 ("MSW", MSW)
589 ("CUSP", CUSP)
590 ("SCALAR_UPWIND", SCALAR_UPWIND)
591 ("CONVECTIVE_TEMPLATE", CONVECTIVE_TEMPLATE);
592 
600 };
601 static const map<string, ENUM_SPATIAL_ORDER> SpatialOrder_Map = CCreateMap<string, ENUM_SPATIAL_ORDER>
602 ("1ST_ORDER", FIRST_ORDER)
603 ("2ND_ORDER", SECOND_ORDER)
604 ("2ND_ORDER_LIMITER", SECOND_ORDER_LIMITER);
605 
614 };
615 static const map<string, ENUM_LIMITER> Limiter_Map = CCreateMap<string, ENUM_LIMITER>
616 ("VENKATAKRISHNAN", VENKATAKRISHNAN)
617 ("BARTH_JESPERSEN", BARTH_JESPERSEN)
618 ("SHARP_EDGES", SHARP_EDGES)
619 ("WALL_DISTANCE", SOLID_WALL_DISTANCE);
620 
626  SA = 1,
627  SA_NEG = 2,
628  SST = 3,
629 };
630 static const map<string, ENUM_TURB_MODEL> Turb_Model_Map = CCreateMap<string, ENUM_TURB_MODEL>
631 ("NONE", NO_TURB_MODEL)
632 ("SA", SA)
633 ("SA_NEG", SA_NEG)
634 ("SST", SST);
635 
641  LM = 1,
642  BC = 2
643 };
644 static const map<string, ENUM_TRANS_MODEL> Trans_Model_Map = CCreateMap<string, ENUM_TRANS_MODEL>
645 ("NONE", NO_TRANS_MODEL)
646 ("LM", LM)
647 ("BC", BC); //BAS-CAKMAKCIOGLU
648 
656 };
657 static const map<string, ENUM_TIME_INT> Time_Int_Map = CCreateMap<string, ENUM_TIME_INT>
658 ("RUNGE-KUTTA_EXPLICIT", RUNGE_KUTTA_EXPLICIT)
659 ("EULER_EXPLICIT", EULER_EXPLICIT)
660 ("EULER_IMPLICIT", EULER_IMPLICIT);
661 
669 };
670 static const map<string, ENUM_TIME_INT_FEA> Time_Int_Map_FEA = CCreateMap<string, ENUM_TIME_INT_FEA>
671 ("CD_EXPLICIT", CD_EXPLICIT)
672 ("NEWMARK_IMPLICIT", NEWMARK_IMPLICIT)
673 ("GENERALIZED_ALPHA", GENERALIZED_ALPHA);
674 
681 };
682 static const map<string, ENUM_SPACE_ITE_FEA> Space_Ite_Map_FEA = CCreateMap<string, ENUM_SPACE_ITE_FEA>
683 ("NEWTON_RAPHSON", NEWTON_RAPHSON)
684 ("MODIFIED_NEWTON_RAPHSON", MODIFIED_NEWTON_RAPHSON);
685 
694 };
695 static const map<string, ENUM_TRANSFER_METHOD> Transfer_Method_Map = CCreateMap<string, ENUM_TRANSFER_METHOD>
696 ("BROADCAST_DATA", BROADCAST_DATA)
697 ("SCATTER_DATA", SCATTER_DATA)
698 ("ALLGATHER_DATA", ALLGATHER_DATA)
699 ("LEGACY_METHOD", LEGACY_METHOD);
700 
707 };
708 static const map<string, ENUM_FLOW_GRADIENT> Gradient_Map = CCreateMap<string, ENUM_FLOW_GRADIENT>
709 ("GREEN_GAUSS", GREEN_GAUSS)
710 ("WEIGHTED_LEAST_SQUARES", WEIGHTED_LEAST_SQUARES);
711 
716  ALLOCATE = 0,
717  UPDATE = 1
718 };
719 
724  FUNCTION = 0,
725  GRADIENT = 1
726 };
727 static const map<string, GEOMETRY_MODE> GeometryMode_Map = CCreateMap<string, GEOMETRY_MODE>
728 ("FUNCTION", FUNCTION)
729 ("GRADIENT", GRADIENT);
730 
734 enum BC_TYPE {
736  FAR_FIELD = 2,
746  DIRICHLET = 12,
747  NEUMANN = 13,
756  ISOTHERMAL = 25,
757  HEAT_FLUX = 26,
768 };
769 
770 
777 };
778 static const map<string, ENUM_2DFORM> ElasForm_2D = CCreateMap<string, ENUM_2DFORM>
779 ("PLANE_STRESS", PLANE_STRESS)
780 ("PLANE_STRAIN", PLANE_STRAIN);
781 
782 
790 };
791 static const map<string, ENUM_AITKEN> AitkenForm_Map = CCreateMap<string, ENUM_AITKEN>
792 ("NONE", NO_RELAXATION)
793 ("FIXED_PARAMETER", FIXED_PARAMETER)
794 ("AITKEN_DYNAMIC", AITKEN_DYNAMIC);
795 
796 
797 
808  MIXING_IN = 7,
810 };
811 
812 static const map<string, RIEMANN_TYPE> Riemann_Map = CCreateMap<string, RIEMANN_TYPE>
813 ("TOTAL_CONDITIONS_PT", TOTAL_CONDITIONS_PT)
814 ("DENSITY_VELOCITY", DENSITY_VELOCITY)
815 ("STATIC_PRESSURE", STATIC_PRESSURE)
816 ("TOTAL_SUPERSONIC_INFLOW", TOTAL_SUPERSONIC_INFLOW)
817 ("STATIC_SUPERSONIC_INFLOW_PT", STATIC_SUPERSONIC_INFLOW_PT)
818 ("STATIC_SUPERSONIC_INFLOW_PD", STATIC_SUPERSONIC_INFLOW_PD)
819 ("MIXING_IN", MIXING_IN)
820 ("MIXING_OUT", MIXING_OUT);
821 
822 
823 static const map<string, RIEMANN_TYPE> NRBC_Map = CCreateMap<string, RIEMANN_TYPE>
824 ("TOTAL_CONDITIONS_PT", TOTAL_CONDITIONS_PT)
825 ("DENSITY_VELOCITY", DENSITY_VELOCITY)
826 ("STATIC_PRESSURE", STATIC_PRESSURE)
827 ("TOTAL_SUPERSONIC_INFLOW", TOTAL_SUPERSONIC_INFLOW)
828 ("STATIC_SUPERSONIC_INFLOW_PT", STATIC_SUPERSONIC_INFLOW_PT)
829 ("STATIC_SUPERSONIC_INFLOW_PD", STATIC_SUPERSONIC_INFLOW_PD)
830 ("MIXING_IN", MIXING_IN)
831 ("MIXING_OUT", MIXING_OUT);
832 
833 
841 };
842 
843 static const map<string, MIXINGPROCESS_TYPE> MixingProcess_Map = CCreateMap<string, MIXINGPROCESS_TYPE>
844 ("ALGEBRAIC_AVERAGE", ALGEBRAIC_AVERAGE)
845 ("AREA_AVERAGE", AREA_AVERAGE)
846 ("MIXEDOUT_AVERAGE", MIXEDOUT_AVERAGE);
847 
852  BLADE = 1,
853  STAGE = 2,
854  TURBINE = 3
855 };
856 
857 static const map<string, TURBO_PERFORMANCE_TYPE> TurboPerformance_Map = CCreateMap<string, TURBO_PERFORMANCE_TYPE>
858 ("BLADE", BLADE)
859 ("STAGE", STAGE)
860 ("TURBINE", TURBINE);
861 
867  MASS_FLOW = 2,
869 };
870 static const map<string, INLET_TYPE> Inlet_Map = CCreateMap<string, INLET_TYPE>
871 ("TOTAL_CONDITIONS", TOTAL_CONDITIONS)
872 ("MASS_FLOW", MASS_FLOW)
873 ("INPUT_FILE", INPUT_FILE);
874 
882 };
883 static const map<string, ENGINE_INFLOW_TYPE> Engine_Inflow_Map = CCreateMap<string, ENGINE_INFLOW_TYPE>
884 ("FAN_FACE_MACH", FAN_FACE_MACH)
885 ("FAN_FACE_MDOT", FAN_FACE_MDOT)
886 ("FAN_FACE_PRESSURE", FAN_FACE_PRESSURE);
887 
893  BC_THRUST = 2,
896  MASSFLOW = 5,
897  POWER = 6
898 };
899 static const map<string, ACTDISK_TYPE> ActDisk_Map = CCreateMap<string, ACTDISK_TYPE>
900 ("VARIABLES_JUMP", VARIABLES_JUMP)
901 ("BC_THRUST", BC_THRUST)
902 ("NET_THRUST", NET_THRUST)
903 ("DRAG_MINUS_THRUST", DRAG_MINUS_THRUST)
904 ("MASSFLOW", MASSFLOW)
905 ("POWER", POWER);
906 
910 enum GEO_TYPE {
911  VERTEX = 1,
912  LINE = 3,
913  TRIANGLE = 5,
915  TETRAHEDRON = 10,
916  HEXAHEDRON = 12,
917  PRISM = 13,
918  PYRAMID = 14
919 };
920 
958 };
959 
960 static const map<string, ENUM_OBJECTIVE> Objective_Map = CCreateMap<string, ENUM_OBJECTIVE>
961 ("DRAG", DRAG_COEFFICIENT)
962 ("LIFT", LIFT_COEFFICIENT)
963 ("SIDEFORCE", SIDEFORCE_COEFFICIENT)
964 ("EFFICIENCY", EFFICIENCY)
965 ("INVERSE_DESIGN_PRESSURE", INVERSE_DESIGN_PRESSURE)
966 ("INVERSE_DESIGN_HEATFLUX", INVERSE_DESIGN_HEATFLUX)
967 ("MOMENT_X", MOMENT_X_COEFFICIENT)
968 ("MOMENT_Y", MOMENT_Y_COEFFICIENT)
969 ("MOMENT_Z", MOMENT_Z_COEFFICIENT)
970 ("EQUIVALENT_AREA", EQUIVALENT_AREA)
971 ("NEARFIELD_PRESSURE", NEARFIELD_PRESSURE)
972 ("FORCE_X", FORCE_X_COEFFICIENT)
973 ("FORCE_Y", FORCE_Y_COEFFICIENT)
974 ("FORCE_Z", FORCE_Z_COEFFICIENT)
975 ("THRUST", THRUST_COEFFICIENT)
976 ("TORQUE", TORQUE_COEFFICIENT)
977 ("TOTAL_HEATFLUX", TOTAL_HEATFLUX)
978 ("MAXIMUM_HEATFLUX", MAXIMUM_HEATFLUX)
979 ("FIGURE_OF_MERIT", FIGURE_OF_MERIT)
980 ("MAX_THICKNESS", MAX_THICKNESS)
981 ("MIN_THICKNESS", MIN_THICKNESS)
982 ("MAX_THICK_SEC1", MAX_THICK_SEC1)
983 ("MAX_THICK_SEC2", MAX_THICK_SEC2)
984 ("MAX_THICK_SEC3", MAX_THICK_SEC3)
985 ("MAX_THICK_SEC4", MAX_THICK_SEC4)
986 ("MAX_THICK_SEC5", MAX_THICK_SEC5)
987 ("AVG_TOTAL_PRESSURE", AVG_TOTAL_PRESSURE)
988 ("AVG_OUTLET_PRESSURE", AVG_OUTLET_PRESSURE)
989 ("MASS_FLOW_RATE", MASS_FLOW_RATE)
990 ("OUTFLOW_GENERALIZED", OUTFLOW_GENERALIZED)
991 ("AERO_DRAG", AERO_DRAG_COEFFICIENT)
992 ("RADIAL_DISTORTION", RADIAL_DISTORTION)
993 ("CIRCUMFERENTIAL_DISTORTION", CIRCUMFERENTIAL_DISTORTION);
994 
1002 };
1003 
1004 static const map<string, ENUM_RESIDUAL> Residual_Map = CCreateMap<string, ENUM_RESIDUAL>
1005 ("RHO", RHO_RESIDUAL)
1006 ("RHO_ENERGY", RHO_ENERGY_RESIDUAL);
1007 
1014  SENS_AOA = 3,
1016 };
1017 static const map<string, ENUM_SENS> Sens_Map = CCreateMap<string, ENUM_SENS>
1018 ("SENS_GEOMETRY", SENS_GEOMETRY)
1019 ("SENS_MACH", SENS_MACH)
1020 ("SENS_AOA", SENS_AOA)
1021 ("SENS_AOS", SENS_AOS);
1022 
1027  NO_ADAPT = 0,
1028  FULL = 1,
1035  REMAINING = 10,
1036  WAKE = 12,
1037  SMOOTHING = 14,
1039  PERIODIC = 17
1040 };
1041 static const map<string, ENUM_ADAPT> Adapt_Map = CCreateMap<string, ENUM_ADAPT>
1042 ("NONE", NO_ADAPT)
1043 ("FULL", FULL)
1044 ("FULL_FLOW", FULL_FLOW)
1045 ("FULL_ADJOINT", FULL_ADJOINT)
1046 ("GRAD_FLOW", GRAD_FLOW)
1047 ("GRAD_ADJOINT", GRAD_ADJOINT)
1048 ("GRAD_FLOW_ADJ", GRAD_FLOW_ADJ)
1049 ("COMPUTABLE", COMPUTABLE)
1050 ("REMAINING", REMAINING)
1051 ("WAKE", WAKE)
1052 ("SMOOTHING", SMOOTHING)
1053 ("SUPERSONIC_SHOCK", SUPERSONIC_SHOCK)
1054 ("PERIODIC", PERIODIC);
1055 
1060  SU2 = 1,
1061  CGNS = 2
1062 };
1063 static const map<string, ENUM_INPUT> Input_Map = CCreateMap<string, ENUM_INPUT>
1064 ("SU2", SU2)
1065 ("CGNS", CGNS);
1066 
1067 const int CGNS_STRING_SIZE = 33;
1073  TECPLOT = 1,
1077  CSV = 5,
1078  CGNS_SOL = 6,
1080 };
1081 static const map<string, ENUM_OUTPUT> Output_Map = CCreateMap<string, ENUM_OUTPUT>
1082 ("TECPLOT", TECPLOT)
1083 ("TECPLOT_BINARY", TECPLOT_BINARY)
1084 ("FIELDVIEW", FIELDVIEW)
1085 ("FIELDVIEW_BINARY", FIELDVIEW_BINARY)
1086 ("CSV", CSV)
1087 ("CGNS", CGNS_SOL)
1088 ("PARAVIEW", PARAVIEW);
1089 
1095  RATIO = 2
1096 };
1097 static const map<string, JUMP_DEFINITION> Jump_Map = CCreateMap<string, JUMP_DEFINITION>
1098 ("DIFFERENCE", DIFFERENCE)
1099 ("RATIO", RATIO);
1100 
1104 enum MG_CYCLE {
1105  V_CYCLE = 0,
1106  W_CYCLE = 1,
1108 };
1109 static const map<string, MG_CYCLE> MG_Cycle_Map = CCreateMap<string, MG_CYCLE>
1110 ("V_CYCLE", V_CYCLE)
1111 ("W_CYCLE", W_CYCLE)
1112 ("FULLMG_CYCLE", FULLMG_CYCLE);
1113 
1118  DENSITY = 1,
1119  VEL_X = 2,
1120  VEL_Y = 3,
1121  VEL_Z = 4,
1122  PRESSURE = 5,
1123  MACH = 6,
1125  LAM_VISC = 8,
1127 };
1128 static const map<string, ENUM_OUTPUT_VARS> Output_Vars_Map = CCreateMap<string, ENUM_OUTPUT_VARS>
1129 ("DENSITY", DENSITY)
1130 ("VEL_X", VEL_X)
1131 ("VEL_Y", VEL_Y)
1132 ("VEL_Z", VEL_Z)
1133 ("PRESSURE", PRESSURE)
1134 ("MACH", MACH)
1135 ("TEMPERATURE", TEMPERATURE)
1136 ("LAM_VISC", LAM_VISC)
1137 ("EDDY_VISC", EDDY_VISC);
1138 
1144  ROTATION = 1,
1145  SCALE = 2,
1149  FFD_GULL = 6,
1161  PARABOLIC = 18,
1163  AIRFOIL = 20,
1164  CST = 21,
1167  CUSTOM = 24,
1171 };
1172 static const map<string, ENUM_PARAM> Param_Map = CCreateMap<string, ENUM_PARAM>
1173 ("FFD_SETTING", FFD_SETTING)
1174 ("FFD_CONTROL_POINT_2D", FFD_CONTROL_POINT_2D)
1175 ("FFD_TWIST_2D", FFD_TWIST_2D)
1176 ("FFD_ANGLE_OF_ATTACK", FFD_ANGLE_OF_ATTACK)
1177 ("FFD_CAMBER_2D", FFD_CAMBER_2D)
1178 ("FFD_THICKNESS_2D", FFD_THICKNESS_2D)
1179 ("HICKS_HENNE", HICKS_HENNE)
1180 ("SURFACE_BUMP", SURFACE_BUMP)
1181 ("ANGLE_OF_ATTACK", ANGLE_OF_ATTACK)
1182 ("NACA_4DIGITS", NACA_4DIGITS)
1183 ("TRANSLATION", TRANSLATION)
1184 ("ROTATION", ROTATION)
1185 ("SCALE", SCALE)
1186 ("FFD_CONTROL_POINT", FFD_CONTROL_POINT)
1187 ("FFD_DIHEDRAL_ANGLE", FFD_DIHEDRAL_ANGLE)
1188 ("FFD_ROTATION", FFD_ROTATION)
1189 ("FFD_CONTROL_SURFACE", FFD_CONTROL_SURFACE)
1190 ("FFD_NACELLE", FFD_NACELLE)
1191 ("FFD_GULL", FFD_GULL)
1192 ("FFD_TWIST", FFD_TWIST)
1193 ("FFD_CAMBER", FFD_CAMBER)
1194 ("FFD_THICKNESS", FFD_THICKNESS)
1195 ("PARABOLIC", PARABOLIC)
1196 ("AIRFOIL", AIRFOIL)
1197 ("SURFACE_FILE", SURFACE_FILE)
1198 ("CUSTOM", CUSTOM)
1199 ("NO_DEFORMATION", NO_DEFORMATION)
1200 ("CST", CST);
1201 
1202 
1207  BSPLINE_UNIFORM = 0,
1208  BEZIER = 1,
1209 };
1210 static const map<string, ENUM_FFD_BLENDING> Blending_Map = CCreateMap<string, ENUM_FFD_BLENDING>
1211 ("BSPLINE_UNIFORM", BSPLINE_UNIFORM)
1212 ("BEZIER", BEZIER);
1213 
1219  NEWTON = 2,
1222  FGMRES = 5,
1223  BCGSTAB = 6,
1229 };
1230 static const map<string, ENUM_LINEAR_SOLVER> Linear_Solver_Map = CCreateMap<string, ENUM_LINEAR_SOLVER>
1231 ("STEEPEST_DESCENT", STEEPEST_DESCENT)
1232 ("NEWTON", NEWTON)
1233 ("QUASI_NEWTON", QUASI_NEWTON)
1234 ("CONJUGATE_GRADIENT", CONJUGATE_GRADIENT)
1235 ("BCGSTAB", BCGSTAB)
1236 ("FGMRES", FGMRES)
1237 ("RESTARTED_FGMRES", RESTARTED_FGMRES)
1238 ("SMOOTHER_LUSGS", SMOOTHER_LUSGS)
1239 ("SMOOTHER_JACOBI", SMOOTHER_JACOBI)
1240 ("SMOOTHER_LINELET", SMOOTHER_LINELET)
1241 ("SMOOTHER_ILU0", SMOOTHER_ILU);
1242 
1251 };
1252 static const map<string, ENUM_FFD_CONTINUITY> Continuity_Map = CCreateMap<string, ENUM_FFD_CONTINUITY>
1253 ("NO_DERIVATIVE", DERIVATIVE_NONE)
1254 ("1ST_DERIVATIVE", DERIVATIVE_1ST)
1255 ("2ND_DERIVATIVE", DERIVATIVE_2ND)
1256 ("USER_INPUT", USER_INPUT);
1257 
1262  CARTESIAN = 0,
1263  CYLINDRICAL = 1,
1264  SPHERICAL = 2
1265 };
1266 static const map<string, ENUM_FFD_COORD_SYSTEM> CoordSystem_Map = CCreateMap<string, ENUM_FFD_COORD_SYSTEM>
1267 ("CARTESIAN", CARTESIAN)
1268 ("CYLINDRICAL", CYLINDRICAL)
1269 ("SPHERICAL", SPHERICAL);
1270 
1276  SOBOLEV = 1,
1277  BIGRID = 2
1278 };
1279 static const map<string, ENUM_SENS_SMOOTHING> Sens_Smoothing_Map = CCreateMap<string, ENUM_SENS_SMOOTHING>
1280 ("NONE", NO_SMOOTH)
1281 ("SOBOLEV", SOBOLEV)
1282 ("BIGRID", BIGRID);
1283 
1288  JACOBI = 1,
1289  LU_SGS = 2,
1290  LINELET = 3,
1291  ILU = 4
1292 };
1293 static const map<string, ENUM_LINEAR_SOLVER_PREC> Linear_Solver_Prec_Map = CCreateMap<string, ENUM_LINEAR_SOLVER_PREC>
1294 ("JACOBI", JACOBI)
1295 ("LU_SGS", LU_SGS)
1296 ("LINELET", LINELET)
1297 ("ILU0", ILU);
1298 
1306  CYLINDER = 3,
1308 };
1309 static const map<string, ENUM_GEO_ANALYTIC> Geo_Analytic_Map = CCreateMap<string, ENUM_GEO_ANALYTIC>
1310 ("NONE", NO_GEO_ANALYTIC)
1311 ("NACA0012_AIRFOIL", NACA0012_AIRFOIL)
1312 ("NACA4412_AIRFOIL", NACA4412_AIRFOIL)
1313 ("CYLINDER", CYLINDER)
1314 ("BIPARABOLIC", BIPARABOLIC);
1315 
1320  X_AXIS = 0,
1321  Y_AXIS = 1,
1322  Z_AXIS = 2
1323 };
1324 static const map<string, ENUM_AXIS_ORIENTATION> Axis_Stations_Map = CCreateMap<string, ENUM_AXIS_ORIENTATION>
1325 ("X_AXIS", X_AXIS)
1326 ("Y_AXIS", Y_AXIS)
1327 ("Z_AXIS", Z_AXIS);
1328 
1333  STEADY = 0,
1340 };
1341 static const map<string, ENUM_UNSTEADY> Unsteady_Map = CCreateMap<string, ENUM_UNSTEADY>
1342 ("NO", STEADY)
1343 ("TIME_STEPPING", TIME_STEPPING)
1344 ("DUAL_TIME_STEPPING-1ST_ORDER", DT_STEPPING_1ST)
1345 ("DUAL_TIME_STEPPING-2ND_ORDER", DT_STEPPING_2ND)
1346 ("HARMONIC_BALANCE", HARMONIC_BALANCE)
1347 ("ROTATIONAL_FRAME", ROTATIONAL_FRAME);
1348 
1353  CAUCHY = 1,
1355 };
1356 static const map<string, ENUM_CONVERGE_CRIT> Converge_Crit_Map = CCreateMap<string, ENUM_CONVERGE_CRIT>
1357 ("CAUCHY", CAUCHY)
1358 ("RESIDUAL", RESIDUAL);
1359 
1367 };
1368 static const map<string, ENUM_DEFORM_STIFFNESS> Deform_Stiffness_Map = CCreateMap<string, ENUM_DEFORM_STIFFNESS>
1369 ("CONSTANT_STIFFNESS", CONSTANT_STIFFNESS)
1370 ("INVERSE_VOLUME", INVERSE_VOLUME)
1371 ("WALL_DISTANCE", WALL_DISTANCE);
1372 
1377  NO_DERIVATIVE = 0,
1378  D_MACH = 1,
1379  D_AOA = 2,
1382  D_DENSITY = 5,
1383  D_TURB2LAM = 6,
1384  D_SIDESLIP = 7,
1385  D_VISCOSITY = 8,
1386  D_REYNOLDS = 9,
1387  D_DESIGN = 10
1388 };
1389 static const map<string, ENUM_DIRECTDIFF_VAR> DirectDiff_Var_Map = CCreateMap<string, ENUM_DIRECTDIFF_VAR>
1390 ("NONE", NO_DERIVATIVE)
1391 ("MACH", D_MACH)
1392 ("AOA", D_AOA)
1393 ("PRESSURE", D_PRESSURE)
1394 ("TEMPERATURE", D_TEMPERATURE)
1395 ("DENSITY", D_DENSITY)
1396 ("TURB2LAM", D_TURB2LAM)
1397 ("SIDESLIP", D_SIDESLIP)
1398 ("VISCOSITY", D_VISCOSITY)
1399 ("REYNOLDS", D_REYNOLDS)
1400 ("DESIGN_VARIABLES", D_DESIGN);
1401 
1406  STATIC = 0,
1407  DYNAMIC = 1
1408 };
1409 static const map<string, ENUM_DYNAMIC> Dynamic_Map = CCreateMap<string, ENUM_DYNAMIC>
1410 ("NO", STATIC)
1411 ("YES", DYNAMIC);
1412 
1413 /* END_CONFIG_ENUMS */
1414 
1416 private:
1417 public:
1418  COptionBase() {};
1419  virtual ~COptionBase() = 0;
1420  // virtual string SetValue(string) {SU2MPI::PrintAndFinalize("shouldn't be here"); return "";};
1421  virtual string SetValue(vector<string>) = 0;
1422  virtual void SetDefault() = 0;
1423 
1424  string optionCheckMultipleValues(vector<string> & option_value, string type_id, string option_name) {
1425  if (option_value.size() != 1) {
1426  string newString;
1427  newString.append(option_name);
1428  newString.append(": multiple values for type ");
1429  newString.append(type_id);
1430  return newString;
1431  }
1432  return "";
1433  }
1434 
1435  string badValue(vector<string> & option_value, string type_id, string option_name) {
1436  string newString;
1437  newString.append(option_name);
1438  newString.append(": improper option value for type ");
1439  newString.append(type_id);
1440  return newString;
1441  }
1442 };
1443 
1444 inline COptionBase::~COptionBase() {}
1445 
1446 
1447 template <class Tenum>
1448 class COptionEnum : public COptionBase {
1449 
1450  map<string, Tenum> m;
1451  unsigned short & field; // Reference to the feildname
1452  Tenum def; // Default value
1453  string name; // identifier for the option
1454 
1455 public:
1456  COptionEnum(string option_field_name, const map<string, Tenum> m, unsigned short & option_field, Tenum default_value) : field(option_field) {
1457  this->m = m;
1458  this->def = default_value;
1459  this->name = option_field_name;
1460  }
1461 
1462  ~COptionEnum() {};
1463  string SetValue(vector<string> option_value) {
1464  // Check if there is more than one string
1465  string out = optionCheckMultipleValues(option_value, "enum", this->name);
1466  if (out.compare("") != 0) {
1467  return out;
1468  }
1469 
1470  // Check to see if the enum value is in the map
1471  if (this->m.find(option_value[0]) == m.end()) {
1472  string str;
1473  str.append(this->name);
1474  str.append(": invalid option value ");
1475  str.append(option_value[0]);
1476  str.append(". Check current SU2 options in config_template.cfg.");
1477  return str;
1478  }
1479  // If it is there, set the option value
1480  Tenum val = this->m[option_value[0]];
1481  this->field = val;
1482  return "";
1483  }
1484 
1485  void SetDefault() {
1486  this->field = this->def;
1487  }
1488 };
1489 
1490 class COptionDouble : public COptionBase {
1491  su2double & field; // Reference to the fieldname
1492  su2double def; // Default value
1493  string name; // identifier for the option
1494 
1495 public:
1496  COptionDouble(string option_field_name, su2double & option_field, su2double default_value) : field(option_field) {
1497  this->def = default_value;
1498  this->name = option_field_name;
1499  }
1500 
1501  ~COptionDouble() {};
1502  string SetValue(vector<string> option_value) {
1503  // check if there is more than one value
1504  string out = optionCheckMultipleValues(option_value, "su2double", this->name);
1505  if (out.compare("") != 0) {
1506  return out;
1507  }
1508  istringstream is(option_value[0]);
1509  su2double val;
1510  if (is >> val) {
1511  this->field = val;
1512  return "";
1513  }
1514  return badValue(option_value, "su2double", this->name);
1515  }
1516  void SetDefault() {
1517  this->field = this->def;
1518  }
1519 };
1520 
1521 class COptionString : public COptionBase {
1522  string & field; // Reference to the fieldname
1523  string def; // Default value
1524  string name; // identifier for the option
1525 
1526 public:
1527  COptionString(string option_field_name, string & option_field, string default_value) : field(option_field) {
1528  this->def = default_value;
1529  this->name = option_field_name;
1530  }
1531 
1532  ~COptionString() {};
1533  string SetValue(vector<string> option_value) {
1534  // check if there is more than one value
1535  string out = optionCheckMultipleValues(option_value, "su2double", this->name);
1536  if (out.compare("") != 0) {
1537  return out;
1538  }
1539  this->field.assign(option_value[0]);
1540  return "";
1541  }
1542  void SetDefault() {
1543  this->field = this->def;
1544  }
1545 };
1546 
1547 class COptionInt : public COptionBase {
1548  int & field; // Reference to the feildname
1549  int def; // Default value
1550  string name; // identifier for the option
1551 
1552 public:
1553  COptionInt(string option_field_name, int & option_field, int default_value) : field(option_field) {
1554  this->def = default_value;
1555  this->name = option_field_name;
1556  }
1557 
1558  ~COptionInt() {};
1559  string SetValue(vector<string> option_value) {
1560  string out = optionCheckMultipleValues(option_value, "int", this->name);
1561  if (out.compare("") != 0) {
1562  return out;
1563  }
1564  istringstream is(option_value[0]);
1565  int val;
1566  if (is >> val) {
1567  this->field = val;
1568  return "";
1569  }
1570  return badValue(option_value, "int", this->name);
1571  }
1572  void SetDefault() {
1573  this->field = this->def;
1574  }
1575 };
1576 
1577 class COptionULong : public COptionBase {
1578  unsigned long & field; // Reference to the feildname
1579  unsigned long def; // Default value
1580  string name; // identifier for the option
1581 
1582 public:
1583  COptionULong(string option_field_name, unsigned long & option_field, unsigned long default_value) : field(option_field) {
1584  this->def = default_value;
1585  this->name = option_field_name;
1586  }
1587 
1588  ~COptionULong() {};
1589  string SetValue(vector<string> option_value) {
1590  string out = optionCheckMultipleValues(option_value, "unsigned long", this->name);
1591  if (out.compare("") != 0) {
1592  return out;
1593  }
1594  istringstream is(option_value[0]);
1595  unsigned long val;
1596  if (is >> val) {
1597  this->field = val;
1598  return "";
1599  }
1600  return badValue(option_value, "unsigned long", this->name);
1601  }
1602  void SetDefault() {
1603  this->field = this->def;
1604  }
1605 };
1606 
1607 class COptionUShort : public COptionBase {
1608  unsigned short & field; // Reference to the feildname
1609  unsigned short def; // Default value
1610  string name; // identifier for the option
1611 
1612 public:
1613  COptionUShort(string option_field_name, unsigned short & option_field, unsigned short default_value) : field(option_field) {
1614  this->def = default_value;
1615  this->name = option_field_name;
1616  }
1617 
1618  ~COptionUShort() {};
1619  string SetValue(vector<string> option_value) {
1620  string out = optionCheckMultipleValues(option_value, "unsigned short", this->name);
1621  if (out.compare("") != 0) {
1622  return out;
1623  }
1624  istringstream is(option_value[0]);
1625  unsigned short val;
1626  if (is >> val) {
1627  this->field = val;
1628  return "";
1629  }
1630  return badValue(option_value, "unsigned short", this->name);
1631  }
1632  void SetDefault() {
1633  this->field = this->def;
1634  }
1635 };
1636 
1637 class COptionLong : public COptionBase {
1638  long & field; // Reference to the feildname
1639  long def; // Default value
1640  string name; // identifier for the option
1641 
1642 public:
1643  COptionLong(string option_field_name, long & option_field, long default_value) : field(option_field) {
1644  this->def = default_value;
1645  this->name = option_field_name;
1646  }
1647 
1648  ~COptionLong() {};
1649  string SetValue(vector<string> option_value) {
1650  string out = optionCheckMultipleValues(option_value, "long", this->name);
1651  if (out.compare("") != 0) {
1652  return out;
1653  }
1654  istringstream is(option_value[0]);
1655  long val;
1656  if (is >> val) {
1657  this->field = val;
1658  return "";
1659  }
1660  return badValue(option_value, "long", this->name);
1661  }
1662  void SetDefault() {
1663  this->field = this->def;
1664  }
1665 };
1666 
1667 
1668 class COptionBool : public COptionBase {
1669  bool & field; // Reference to the feildname
1670  bool def; // Default value
1671  string name; // identifier for the option
1672 
1673 public:
1674  COptionBool(string option_field_name, bool & option_field, bool default_value) : field(option_field) {
1675  this->def = default_value;
1676  this->name = option_field_name;
1677  }
1678 
1679  ~COptionBool() {};
1680  string SetValue(vector<string> option_value) {
1681  // check if there is more than one value
1682  string out = optionCheckMultipleValues(option_value, "bool", this->name);
1683  if (out.compare("") != 0) {
1684  return out;
1685  }
1686  if (option_value[0].compare("YES") == 0) {
1687  this->field = true;
1688  return "";
1689  }
1690  if (option_value[0].compare("NO") == 0) {
1691  this->field = false;
1692  return "";
1693  }
1694  return badValue(option_value, "bool", this->name);
1695  }
1696  void SetDefault() {
1697  this->field = this->def;
1698  }
1699 };
1700 
1701 template <class Tenum>
1703 
1704  map<string, Tenum> m;
1705  unsigned short * & field; // Reference to the feildname
1706  string name; // identifier for the option
1707  unsigned short & size;
1708 
1709 public:
1710  COptionEnumList(string option_field_name, const map<string, Tenum> m, unsigned short * & option_field, unsigned short & list_size) : field(option_field) , size(list_size) {
1711  this->m = m;
1712  this->name = option_field_name;
1713  }
1714 
1715  ~COptionEnumList() {};
1716  string SetValue(vector<string> option_value) {
1717  if (option_value.size() == 1 && option_value[0].compare("NONE") == 0) {
1718  this->size = 0;
1719  return "";
1720  }
1721  // size is the length of the option list
1722  this->size = option_value.size();
1723  unsigned short * enums = new unsigned short[size];
1724  for (int i = 0; i < this->size; i++) {
1725  // Check to see if the enum value is in the map
1726  if (this->m.find(option_value[i]) == m.end()) {
1727  string str;
1728  str.append(this->name);
1729  str.append(": invalid option value ");
1730  str.append(option_value[i]);
1731  str.append(". Check current SU2 options in config_template.cfg.");
1732  return str;
1733  }
1734  // If it is there, set the option value
1735  enums[i] = this->m[option_value[i]];
1736  }
1737  this->field = enums;
1738  return "";
1739  }
1740 
1741  void SetDefault() {
1742  // No default to set
1743  size = 0;
1744  }
1745 };
1746 
1748  su2double * & field; // Reference to the feildname
1749  string name; // identifier for the option
1750  const int size;
1751  su2double * def;
1752  su2double * vals;
1753  su2double * default_value;
1754 
1755 public:
1756  COptionDoubleArray(string option_field_name, const int list_size, su2double * & option_field, su2double * default_value) : field(option_field), size(list_size) {
1757  this->name = option_field_name;
1758  this->default_value = default_value;
1759  def = NULL;
1760  vals = NULL;
1761  }
1762 
1763  ~COptionDoubleArray() {
1764  if(def != NULL) delete [] def;
1765  if(vals != NULL) delete [] vals;
1766  };
1767  string SetValue(vector<string> option_value) {
1768  // Check that the size is correct
1769  if (option_value.size() != (unsigned long)this->size) {
1770  string newstring;
1771  newstring.append(this->name);
1772  newstring.append(": wrong number of arguments: ");
1773  stringstream ss;
1774  ss << this->size;
1775  newstring.append(ss.str());
1776  newstring.append(" expected, ");
1777  stringstream ss2;
1778  ss2 << option_value.size();
1779  newstring.append(ss2.str());
1780  newstring.append(" found");
1781  return newstring;
1782  }
1783  vals = new su2double[this->size];
1784  for (int i = 0; i < this->size; i++) {
1785  istringstream is(option_value[i]);
1786  su2double val;
1787  if (!(is >> val)) {
1788  delete [] vals;
1789  return badValue(option_value, "su2double array", this->name);
1790  }
1791  vals[i] = val;
1792  }
1793  this->field = vals;
1794  return "";
1795  }
1796 
1797  void SetDefault() {
1798  def = new su2double [size];
1799  for (int i = 0; i < size; i++) {
1800  def[i] = default_value[i];
1801  }
1802  this->field = def;
1803  }
1804 };
1805 
1807  su2double * & field; // Reference to the feildname
1808  string name; // identifier for the option
1809  unsigned short & size;
1810 
1811 public:
1812  COptionDoubleList(string option_field_name, unsigned short & list_size, su2double * & option_field) : field(option_field), size(list_size) {
1813  this->name = option_field_name;
1814  }
1815 
1816  ~COptionDoubleList() {};
1817  string SetValue(vector<string> option_value) {
1818  // The size is the length of option_value
1819  unsigned short option_size = option_value.size();
1820  if (option_size == 1 && option_value[0].compare("NONE") == 0) {
1821  // No options
1822  this->size = 0;
1823  return "";
1824  }
1825 
1826  this->size = option_size;
1827 
1828  // Parse all of the options
1829  su2double * vals = new su2double[option_size];
1830  for (unsigned long i = 0; i < option_size; i++) {
1831  istringstream is(option_value[i]);
1832  su2double val;
1833  if (!(is >> val)) {
1834  delete [] vals;
1835  return badValue(option_value, "su2double list", this->name);
1836  }
1837  vals[i] = val;
1838  }
1839  this->field = vals;
1840  return "";
1841  }
1842 
1843  void SetDefault() {
1844  this->size = 0; // There is no default value for list
1845  }
1846 };
1847 
1849  short * & field; // Reference to the feildname
1850  string name; // identifier for the option
1851  unsigned short & size;
1852 
1853 public:
1854  COptionShortList(string option_field_name, unsigned short & list_size, short * & option_field) : field(option_field), size(list_size) {
1855  this->name = option_field_name;
1856  }
1857 
1858  ~COptionShortList() {};
1859  string SetValue(vector<string> option_value) {
1860  // The size is the length of option_value
1861  unsigned short option_size = option_value.size();
1862  if (option_size == 1 && option_value[0].compare("NONE") == 0) {
1863  // No options
1864  this->size = 0;
1865  return "";
1866  }
1867  this->size = option_size;
1868 
1869  // Parse all of the options
1870  short * vals = new short[option_size];
1871  for (unsigned long i = 0; i < option_size; i++) {
1872  istringstream is(option_value[i]);
1873  unsigned short val;
1874  if (!(is >> val)) {
1875  delete [] vals;
1876  return badValue(option_value, "short", this->name);
1877  }
1878  vals[i] = val;
1879  }
1880  this->field = vals;
1881  return "";
1882  }
1883 
1884  void SetDefault() {
1885  this->size = 0; // There is no default value for list
1886  }
1887 };
1888 
1890  unsigned short * & field; // Reference to the feildname
1891  string name; // identifier for the option
1892  unsigned short & size;
1893 
1894 public:
1895  COptionUShortList(string option_field_name, unsigned short & list_size, unsigned short * & option_field) : field(option_field), size(list_size) {
1896  this->name = option_field_name;
1897  }
1898 
1899  ~COptionUShortList() {};
1900  string SetValue(vector<string> option_value) {
1901  // The size is the length of option_value
1902  unsigned short option_size = option_value.size();
1903  if (option_size == 1 && option_value[0].compare("NONE") == 0) {
1904  // No options
1905  this->size = 0;
1906  return "";
1907  }
1908  this->size = option_size;
1909 
1910  // Parse all of the options
1911  unsigned short * vals = new unsigned short[option_size];
1912  for (unsigned long i = 0; i < option_size; i++) {
1913  istringstream is(option_value[i]);
1914  unsigned short val;
1915  if (!(is >> val)) {
1916  delete [] vals;
1917  return badValue(option_value, "unsigned short", this->name);
1918  }
1919  vals[i] = val;
1920  }
1921  this->field = vals;
1922  return "";
1923  }
1924 
1925  void SetDefault() {
1926  this->size = 0; // There is no default value for list
1927  }
1928 };
1929 
1931  string * & field; // Reference to the feildname
1932  string name; // identifier for the option
1933  unsigned short & size;
1934 
1935 public:
1936  COptionStringList(string option_field_name, unsigned short & list_size, string * & option_field) : field(option_field), size(list_size) {
1937  this->name = option_field_name;
1938  }
1939 
1940  ~COptionStringList() {};
1941  string SetValue(vector<string> option_value) {
1942  // The size is the length of option_value
1943  unsigned short option_size = option_value.size();
1944  if (option_size == 1 && option_value[0].compare("NONE") == 0) {
1945  this->size = 0;
1946  return "";
1947  }
1948  this->size = option_size;
1949 
1950  // Parse all of the options
1951  string * vals = new string[option_size];
1952  for (unsigned long i = 0; i < option_size; i++) {
1953  vals[i].assign(option_value[i]);
1954  }
1955  this->field = vals;
1956  return "";
1957  }
1958 
1959  void SetDefault() {
1960  this->size = 0; // There is no default value for list
1961  }
1962 };
1963 
1964 class COptionConvect : public COptionBase {
1965  string name; // identifier for the option
1966  unsigned short & space;
1967  unsigned short & centered;
1968  unsigned short & upwind;
1969 
1970 public:
1971  COptionConvect(string option_field_name, unsigned short & space_field, unsigned short & centered_field, unsigned short & upwind_field) : space(space_field), centered(centered_field), upwind(upwind_field) {
1972  this->name = option_field_name;
1973  }
1974 
1975  ~COptionConvect() {};
1976  string SetValue(vector<string> option_value) {
1977 
1978  string out = optionCheckMultipleValues(option_value, "unsigned short", this->name);
1979  if (out.compare("") != 0) {
1980  return out;
1981  }
1982 
1983  if (Centered_Map.count(option_value[0])) {
1984  this->space = Space_Map.find("SPACE_CENTERED")->second;
1985  this->centered = Centered_Map.find(option_value[0])->second;
1986  this->upwind = NO_UPWIND;
1987  return "";
1988  }
1989  if (Upwind_Map.count(option_value[0])) {
1990  this->space = Space_Map.find("SPACE_UPWIND")->second;
1991  this->upwind = Upwind_Map.find(option_value[0])->second;
1992  this->centered = NO_CENTERED;
1993  return "";
1994  }
1995  // Make them defined in case something weird happens
1996  this->centered = NO_CENTERED;
1997  this->upwind = NO_UPWIND;
1998  this->space = SPACE_CENTERED;
1999  return badValue(option_value, "convect", this->name);
2000 
2001  }
2002 
2003  void SetDefault() {
2004  this->centered = NO_CENTERED;
2005  this->upwind = NO_UPWIND;
2006  this->space = SPACE_CENTERED;
2007  }
2008 };
2009 
2011  string name; // identifier for the option
2012  bool & cont_adjoint;
2013  bool cont_adjoint_def;
2014  bool & disc_adjoint;
2015  bool disc_adjoint_def;
2016  bool & restart;
2017  bool restart_def;
2018 
2019 public:
2020  COptionMathProblem(string option_field_name, bool & cont_adjoint_field, bool cont_adjoint_default, bool & disc_adjoint_field, bool disc_adjoint_default, bool & restart_field, bool restart_default) : cont_adjoint(cont_adjoint_field), disc_adjoint(disc_adjoint_field), restart(restart_field) {
2021  this->name = option_field_name;
2022  this->cont_adjoint_def = cont_adjoint_default;
2023  this->disc_adjoint_def = disc_adjoint_default;
2024  this->restart_def = restart_default;
2025  }
2026 
2027  ~COptionMathProblem() {};
2028  string SetValue(vector<string> option_value) {
2029  string out = optionCheckMultipleValues(option_value, "unsigned short", this->name);
2030  if (out.compare("") != 0) {
2031  return out;
2032  }
2033  if (option_value[0] == "ADJOINT") {
2034  return badValue(option_value, "math problem (try CONTINUOUS_ADJOINT)", this->name);
2035  }
2036  if (Math_Problem_Map.find(option_value[0]) == Math_Problem_Map.end()) {
2037  return badValue(option_value, "math problem", this->name);
2038  }
2039  if (option_value[0] == "DIRECT") {
2040  this->cont_adjoint = false;
2041  this->disc_adjoint = false;
2042  this->restart = false;
2043  return "";
2044  }
2045  if (option_value[0] == "CONTINUOUS_ADJOINT") {
2046  this->cont_adjoint= true;
2047  this->disc_adjoint = false;
2048  this->restart= true;
2049  return "";
2050  }
2051  if (option_value[0] == "DISCRETE_ADJOINT") {
2052  this->disc_adjoint = true;
2053  this->cont_adjoint= false;
2054  this->restart = true;
2055  return "";
2056  }
2057  return "option in math problem map not considered in constructor";
2058  }
2059 
2060  void SetDefault() {
2061  this->cont_adjoint = this->cont_adjoint_def;
2062  this->disc_adjoint = this->disc_adjoint_def;
2063  this->restart = this->restart_def;
2064  }
2065 
2066 };
2067 
2068 class COptionDVParam : public COptionBase {
2069  string name; // identifier for the option
2070  unsigned short & nDV;
2071  su2double ** & paramDV;
2072  string * & FFDTag;
2073  unsigned short* & design_variable;
2074 
2075 public:
2076  COptionDVParam(string option_field_name, unsigned short & nDV_field, su2double** & paramDV_field, string* & FFDTag_field, unsigned short * & design_variable_field) : nDV(nDV_field), paramDV(paramDV_field), FFDTag(FFDTag_field), design_variable(design_variable_field) {
2077  this->name = option_field_name;
2078  }
2079 
2080  ~COptionDVParam() {};
2081 
2082  string SetValue(vector<string> option_value) {
2083  if ((option_value.size() == 1) && (option_value[0].compare("NONE") == 0)) {
2084  this->nDV = 0;
2085  return "";
2086  }
2087 
2088  // Cannot have ; at the beginning or the end
2089  if (option_value[0].compare(";") == 0) {
2090  string newstring;
2091  newstring.append(this->name);
2092  newstring.append(": may not have beginning semicolon");
2093  return newstring;
2094  }
2095  if (option_value[option_value.size()-1].compare(";") == 0) {
2096  string newstring;
2097  newstring.append(this->name);
2098  newstring.append(": may not have ending semicolon");
2099  return newstring;
2100  }
2101 
2102 
2103  // use the ";" token to determine the number of design variables
2104  // This works because semicolon is not one of the delimiters in tokenize string
2105  this->nDV = 0;
2106  //unsigned int num_semi = 0;
2107  for (unsigned int i = 0; i < static_cast<unsigned int>(option_value.size()); i++) {
2108  if (option_value[i].compare(";") == 0) {
2109  this->nDV++;
2110  // num_semi++;
2111  }
2112  }
2113 
2114  // One more design variable than semicolon
2115  this->nDV++;
2116 
2117  if ( (this->nDV > 0) && (this->design_variable == NULL) ) {
2118  string newstring;
2119  newstring.append(this->name);
2120  newstring.append(": Design_Variable array has not been allocated. Check that DV_KIND appears before DV_PARAM in configuration file.");
2121  return newstring;
2122  }
2123 
2124  this->paramDV = new su2double*[this->nDV];
2125  for (unsigned short iDV = 0; iDV < this->nDV; iDV++) {
2126  this->paramDV[iDV] = new su2double[MAX_PARAMETERS];
2127  }
2128 
2129  this->FFDTag = new string[this->nDV];
2130 
2131  unsigned short nParamDV = 0;
2132  stringstream ss;
2133  unsigned int i = 0;
2134  for (unsigned short iDV = 0; iDV < this->nDV; iDV++) {
2135  switch (this->design_variable[iDV]) {
2136  case NO_DEFORMATION: nParamDV = 0; break;
2137  case FFD_SETTING: nParamDV = 0; break;
2138  case FFD_CONTROL_POINT_2D: nParamDV = 5; break;
2139  case FFD_CAMBER_2D: nParamDV = 2; break;
2140  case FFD_THICKNESS_2D: nParamDV = 2; break;
2141  case FFD_TWIST_2D: nParamDV = 3; break;
2142  case HICKS_HENNE: nParamDV = 2; break;
2143  case SURFACE_BUMP: nParamDV = 3; break;
2144  case CST: nParamDV = 3; break;
2145  case ANGLE_OF_ATTACK: nParamDV = 1; break;
2146  case SCALE: nParamDV = 0; break;
2147  case TRANSLATION: nParamDV = 3; break;
2148  case ROTATION: nParamDV = 6; break;
2149  case NACA_4DIGITS: nParamDV = 3; break;
2150  case PARABOLIC: nParamDV = 2; break;
2151  case AIRFOIL: nParamDV = 2; break;
2152  case FFD_CONTROL_POINT: nParamDV = 7; break;
2153  case FFD_NACELLE: nParamDV = 6; break;
2154  case FFD_GULL: nParamDV = 2; break;
2155  case FFD_TWIST: nParamDV = 8; break;
2156  case FFD_ROTATION: nParamDV = 7; break;
2157  case FFD_CONTROL_SURFACE: nParamDV = 7; break;
2158  case FFD_CAMBER: nParamDV = 3; break;
2159  case FFD_THICKNESS: nParamDV = 3; break;
2160  case FFD_ANGLE_OF_ATTACK: nParamDV = 2; break;
2161  case SURFACE_FILE: nParamDV = 0; break;
2162  case CUSTOM: nParamDV = 1; break;
2163  default : {
2164  string newstring;
2165  newstring.append(this->name);
2166  newstring.append(": undefined design variable type found in configuration file.");
2167  return newstring;
2168  }
2169  }
2170 
2171  for (unsigned short iParamDV = 0; iParamDV < nParamDV; iParamDV++) {
2172 
2173  ss << option_value[i] << " ";
2174 
2175  if ((iParamDV == 0) &&
2176  ((this->design_variable[iDV] == NO_DEFORMATION) ||
2177  (this->design_variable[iDV] == FFD_SETTING) ||
2178  (this->design_variable[iDV] == FFD_ANGLE_OF_ATTACK)||
2179  (this->design_variable[iDV] == FFD_CONTROL_POINT_2D) ||
2180  (this->design_variable[iDV] == FFD_CAMBER_2D) ||
2181  (this->design_variable[iDV] == FFD_TWIST_2D) ||
2182  (this->design_variable[iDV] == FFD_THICKNESS_2D) ||
2183  (this->design_variable[iDV] == FFD_CONTROL_POINT) ||
2184  (this->design_variable[iDV] == FFD_NACELLE) ||
2185  (this->design_variable[iDV] == FFD_GULL) ||
2186  (this->design_variable[iDV] == FFD_TWIST) ||
2187  (this->design_variable[iDV] == FFD_ROTATION) ||
2188  (this->design_variable[iDV] == FFD_CONTROL_SURFACE) ||
2189  (this->design_variable[iDV] == FFD_CAMBER) ||
2190  (this->design_variable[iDV] == FFD_THICKNESS))) {
2191  ss >> this->FFDTag[iDV];
2192  this->paramDV[iDV][iParamDV] = 0;
2193  }
2194  else
2195  ss >> this->paramDV[iDV][iParamDV];
2196 
2197  i++;
2198  }
2199  if (iDV < (this->nDV-1)) {
2200  if (option_value[i].compare(";") != 0) {
2201  string newstring;
2202  newstring.append(this->name);
2203  newstring.append(": a design variable in the configuration file has the wrong number of parameters");
2204  return newstring;
2205  }
2206  i++;
2207  }
2208  }
2209 
2210  // Need to return something...
2211  return "";
2212  }
2213 
2214  void SetDefault() {
2215  this->nDV = 0;
2216  this->paramDV = NULL;
2217  this->FFDTag = NULL;
2218  // Don't mess with the Design_Variable because it's an input, not modified
2219  }
2220 };
2221 
2222 class COptionDVValue : public COptionBase {
2223  string name; // identifier for the option
2224  unsigned short* & nDV_Value;
2225  su2double ** & valueDV;
2226  unsigned short & nDV;
2227  su2double ** & paramDV;
2228  unsigned short* & design_variable;
2229 
2230 public:
2231  COptionDVValue(string option_field_name, unsigned short* & nDVValue_field, su2double** & valueDV_field, unsigned short & nDV_field, su2double** & paramDV_field, unsigned short * & design_variable_field) : nDV_Value(nDVValue_field), valueDV(valueDV_field), nDV(nDV_field), paramDV(paramDV_field), design_variable(design_variable_field) {
2232  this->name = option_field_name;
2233  }
2234 
2235  ~COptionDVValue() {};
2236 
2237  string SetValue(vector<string> option_value) {
2238  if ((option_value.size() == 1) && (option_value[0].compare("NONE") == 0)) {
2239  this->nDV_Value = NULL;
2240  return "";
2241  }
2242 
2243  if ( (this->nDV > 0) && (this->design_variable == NULL) ) {
2244  string newstring;
2245  newstring.append(this->name);
2246  newstring.append(": Design_Variable array has not been allocated. Check that DV_KIND appears before DV_VALUE in configuration file.");
2247  return newstring;
2248  }
2249  if ( (this->nDV > 0) && (this->paramDV == NULL) ) {
2250  string newstring;
2251  newstring.append(this->name);
2252  newstring.append(": Design_Parameter array has not been allocated. Check that DV_PARAM appears before DV_VALUE in configuration file.");
2253  return newstring;
2254  }
2255 
2256  this->valueDV = new su2double*[this->nDV];
2257  this->nDV_Value = new unsigned short[this->nDV];
2258 
2259  for (unsigned short iDV = 0; iDV < this->nDV; iDV++) {
2260  this->valueDV[iDV] = new su2double[3];
2261  }
2262 
2263  unsigned short nValueDV = 0;
2264  unsigned short totalnValueDV = 0;
2265  stringstream ss;
2266  unsigned int i = 0;
2267  for (unsigned short iDV = 0; iDV < this->nDV; iDV++) {
2268  switch (this->design_variable[iDV]) {
2269  case FFD_CONTROL_POINT:
2270  if((this->paramDV[iDV][4] == 0) &&
2271  (this->paramDV[iDV][5] == 0) &&
2272  (this->paramDV[iDV][6] == 0)) {
2273  nValueDV = 3;
2274  } else {
2275  nValueDV = 1;
2276  }
2277  break;
2278  case FFD_CONTROL_POINT_2D:
2279  if((this->paramDV[iDV][3] == 0) &&
2280  (this->paramDV[iDV][4] == 0)) {
2281  nValueDV = 2;
2282  } else {
2283  nValueDV = 1;
2284  }
2285  break;
2286  default :
2287  nValueDV = 1;
2288  }
2289 
2290  this->nDV_Value[iDV] = nValueDV;
2291 
2292  totalnValueDV += nValueDV;
2293 
2294  for (unsigned short iValueDV = 0; iValueDV < nValueDV; iValueDV++) {
2295 
2296  ss << option_value[i] << " ";
2297 
2298  ss >> this->valueDV[iDV][iValueDV];
2299 
2300  i++;
2301  }
2302  }
2303 
2304  if (i != totalnValueDV) {
2305  string newstring;
2306  newstring.append(this->name);
2307  newstring.append(": a design variable in the configuration file has the wrong number of values");
2308  return newstring;
2309  }
2310 
2311  // Need to return something...
2312  return "";
2313  }
2314 
2315  void SetDefault() {
2316  this->nDV_Value = 0;
2317  this->valueDV = NULL;
2318  // Don't mess with the Design_Variable because it's an input, not modified
2319  }
2320 };
2321 
2322 class COptionFFDDef : public COptionBase {
2323  string name;
2324  unsigned short & nFFD;
2325  su2double ** & CoordFFD;
2326  string * & FFDTag;
2327 
2328 public:
2329  COptionFFDDef(string option_field_name, unsigned short & nFFD_field, su2double** & coordFFD_field, string* & FFDTag_field) : nFFD(nFFD_field), CoordFFD(coordFFD_field), FFDTag(FFDTag_field) {
2330  this->name = option_field_name;
2331  }
2332 
2333  ~COptionFFDDef() {};
2334 
2335  string SetValue(vector<string> option_value) {
2336  if ((option_value.size() == 1) && (option_value[0].compare("NONE") == 0)) {
2337  this->nFFD = 0;
2338  return "";
2339  }
2340 
2341  // Cannot have ; at the beginning or the end
2342  if (option_value[0].compare(";") == 0) {
2343  string newstring;
2344  newstring.append(this->name);
2345  newstring.append(": may not have beginning semicolon");
2346  return newstring;
2347  }
2348  if (option_value[option_value.size()-1].compare(";") == 0) {
2349  string newstring;
2350  newstring.append(this->name);
2351  newstring.append(": may not have ending semicolon");
2352  return newstring;
2353  }
2354 
2355 
2356  // use the ";" token to determine the number of design variables
2357  // This works because semicolon is not one of the delimiters in tokenize string
2358  this->nFFD = 0;
2359  for (unsigned int i = 0; i < static_cast<unsigned int>(option_value.size()); i++) {
2360  if (option_value[i].compare(";") == 0) {
2361  this->nFFD++;
2362  }
2363  }
2364 
2365  // One more design variable than semicolon
2366  this->nFFD++;
2367 
2368  this->CoordFFD = new su2double*[this->nFFD];
2369  for (unsigned short iFFD = 0; iFFD < this->nFFD; iFFD++) {
2370  this->CoordFFD[iFFD] = new su2double[25];
2371  }
2372 
2373  this->FFDTag = new string[this->nFFD];
2374 
2375  unsigned short nCoordFFD = 0;
2376  stringstream ss;
2377  unsigned int i = 0;
2378 
2379  for (unsigned short iFFD = 0; iFFD < this->nFFD; iFFD++) {
2380 
2381  nCoordFFD = 25;
2382 
2383  for (unsigned short iCoordFFD = 0; iCoordFFD < nCoordFFD; iCoordFFD++) {
2384 
2385  ss << option_value[i] << " ";
2386 
2387  if (iCoordFFD == 0) ss >> this->FFDTag[iFFD];
2388  else ss >> this->CoordFFD[iFFD][iCoordFFD-1];
2389 
2390  i++;
2391  }
2392 
2393  if (iFFD < (this->nFFD-1)) {
2394  if (option_value[i].compare(";") != 0) {
2395  string newstring;
2396  newstring.append(this->name);
2397  newstring.append(": a FFD box in the configuration file has the wrong number of parameters");
2398  return newstring;
2399  }
2400  i++;
2401  }
2402 
2403  }
2404 
2405  // Need to return something...
2406  return "";
2407  }
2408 
2409  void SetDefault() {
2410  this->nFFD = 0;
2411  this->CoordFFD = NULL;
2412  this->FFDTag = NULL;
2413  }
2414 
2415 };
2416 
2418  string name;
2419  unsigned short & nFFD;
2420  unsigned short ** & DegreeFFD;
2421 
2422 public:
2423  COptionFFDDegree(string option_field_name, unsigned short & nFFD_field, unsigned short** & degreeFFD_field) : nFFD(nFFD_field), DegreeFFD(degreeFFD_field) {
2424  this->name = option_field_name;
2425  }
2426 
2427  ~COptionFFDDegree() {};
2428 
2429  string SetValue(vector<string> option_value) {
2430  if ((option_value.size() == 1) && (option_value[0].compare("NONE") == 0)) {
2431  this->nFFD = 0;
2432  return "";
2433  }
2434 
2435  // Cannot have ; at the beginning or the end
2436  if (option_value[0].compare(";") == 0) {
2437  string newstring;
2438  newstring.append(this->name);
2439  newstring.append(": may not have beginning semicolon");
2440  return newstring;
2441  }
2442  if (option_value[option_value.size()-1].compare(";") == 0) {
2443  string newstring;
2444  newstring.append(this->name);
2445  newstring.append(": may not have ending semicolon");
2446  return newstring;
2447  }
2448 
2449 
2450  // use the ";" token to determine the number of design variables
2451  // This works because semicolon is not one of the delimiters in tokenize string
2452  this->nFFD = 0;
2453  for (unsigned int i = 0; i < static_cast<unsigned int>(option_value.size()); i++) {
2454  if (option_value[i].compare(";") == 0) {
2455  this->nFFD++;
2456  }
2457  }
2458 
2459  // One more design variable than semicolon
2460  this->nFFD++;
2461 
2462  this->DegreeFFD = new unsigned short*[this->nFFD];
2463  for (unsigned short iFFD = 0; iFFD < this->nFFD; iFFD++) {
2464  this->DegreeFFD[iFFD] = new unsigned short[3];
2465  }
2466 
2467  unsigned short nDegreeFFD = 0;
2468  stringstream ss;
2469  unsigned int i = 0;
2470 
2471  for (unsigned short iFFD = 0; iFFD < this->nFFD; iFFD++) {
2472 
2473  nDegreeFFD = 3;
2474 
2475  for (unsigned short iDegreeFFD = 0; iDegreeFFD < nDegreeFFD; iDegreeFFD++) {
2476  ss << option_value[i] << " ";
2477  ss >> this->DegreeFFD[iFFD][iDegreeFFD];
2478  i++;
2479  }
2480 
2481  if (iFFD < (this->nFFD-1)) {
2482  if (option_value[i].compare(";") != 0) {
2483  string newstring;
2484  newstring.append(this->name);
2485  newstring.append(": a FFD degree in the configuration file has the wrong number of parameters");
2486  return newstring;
2487  }
2488  i++;
2489  }
2490 
2491  }
2492 
2493  // Need to return something...
2494  return "";
2495  }
2496 
2497  void SetDefault() {
2498  this->nFFD = 0;
2499  this->DegreeFFD = NULL;
2500  }
2501 
2502 };
2503 
2504 // Class where the option is represented by (String, su2double, string, su2double, ...)
2506  string name; // identifier for the option
2507  unsigned short & size; // how many strings are there (same as number of su2doubles)
2508 
2509  string * & s_f; // Reference to the string fields
2510  su2double* & d_f; // reference to the su2double fields
2511 
2512 public:
2513  COptionStringDoubleList(string option_field_name, unsigned short & list_size, string * & string_field, su2double* & double_field) : size(list_size), s_f(string_field), d_f(double_field) {
2514  this->name = option_field_name;
2515  }
2516 
2518  string SetValue(vector<string> option_value) {
2519  // There must be an even number of entries (same number of strings and doubles
2520  unsigned short totalVals = option_value.size();
2521  if ((totalVals % 2) != 0) {
2522  if ((totalVals == 1) && (option_value[0].compare("NONE") == 0)) {
2523  // It's okay to say its NONE
2524  this->size = 0;
2525  return "";
2526  }
2527  string newstring;
2528  newstring.append(this->name);
2529  newstring.append(": must have an even number of entries");
2530  return newstring;
2531  }
2532  unsigned short nVals = totalVals / 2;
2533  this->size = nVals;
2534  this->s_f = new string[nVals];
2535  this->d_f = new su2double[nVals];
2536 
2537  for (unsigned long i = 0; i < nVals; i++) {
2538  this->s_f[i].assign(option_value[2*i]); // 2 because have su2double and string
2539  istringstream is(option_value[2*i + 1]);
2540  su2double val;
2541  if (!(is >> val)) {
2542  return badValue(option_value, "string su2double", this->name);
2543  }
2544  this->d_f[i] = val;
2545  }
2546  // Need to return something...
2547  return "";
2548  }
2549 
2550  void SetDefault() {
2551  this->size = 0; // There is no default value for list
2552  }
2553 };
2554 
2555 class COptionInlet : public COptionBase {
2556  string name; // identifier for the option
2557  unsigned short & size;
2558  string * & marker;
2559  su2double * & ttotal;
2560  su2double * & ptotal;
2561  su2double ** & flowdir;
2562 
2563 public:
2564  COptionInlet(string option_field_name, unsigned short & nMarker_Inlet, string* & Marker_Inlet, su2double* & Ttotal, su2double* & Ptotal, su2double** & FlowDir) : size(nMarker_Inlet), marker(Marker_Inlet), ttotal(Ttotal), ptotal(Ptotal), flowdir(FlowDir) {
2565  this->name = option_field_name;
2566  }
2567 
2568  ~COptionInlet() {};
2569  string SetValue(vector<string> option_value) {
2570 
2571  unsigned short totalVals = option_value.size();
2572  if ((totalVals == 1) && (option_value[0].compare("NONE") == 0)) {
2573  this->size = 0;
2574  this->marker = NULL;
2575  this->ttotal = NULL;
2576  this->ptotal = NULL;
2577  this->flowdir = NULL;
2578  return "";
2579  }
2580 
2581  if (totalVals % 6 != 0) {
2582  string newstring;
2583  newstring.append(this->name);
2584  newstring.append(": must have a number of entries divisible by 6");
2585  this->size = 0;
2586  this->marker = NULL;
2587  this->ttotal = NULL;
2588  this->ptotal = NULL;
2589  this->flowdir = NULL;
2590  return newstring;
2591  }
2592 
2593  unsigned short nVals = totalVals / 6;
2594  this->size = nVals;
2595  this->marker = new string[nVals];
2596  this->ttotal = new su2double[nVals];
2597  this->ptotal = new su2double[nVals];
2598  this->flowdir = new su2double*[nVals];
2599  for (unsigned long i = 0; i < nVals; i++) {
2600  this->flowdir[i] = new su2double[3];
2601  }
2602 
2603  for (unsigned long i = 0; i < nVals; i++) {
2604  this->marker[i].assign(option_value[6*i]);
2605  istringstream ss_1st(option_value[6*i + 1]);
2606  if (!(ss_1st >> this->ttotal[i])) {
2607  return badValue(option_value, "inlet", this->name);
2608  }
2609  istringstream ss_2nd(option_value[6*i + 2]);
2610  if (!(ss_2nd >> this->ptotal[i])) {
2611  return badValue(option_value, "inlet", this->name);
2612  }
2613  istringstream ss_3rd(option_value[6*i + 3]);
2614  if (!(ss_3rd >> this->flowdir[i][0])) {
2615  return badValue(option_value, "inlet", this->name);
2616  }
2617  istringstream ss_4th(option_value[6*i + 4]);
2618  if (!(ss_4th >> this->flowdir[i][1])) {
2619  return badValue(option_value, "inlet", this->name);
2620  }
2621  istringstream ss_5th(option_value[6*i + 5]);
2622  if (!(ss_5th >> this->flowdir[i][2])) {
2623  return badValue(option_value, "inlet", this->name);
2624  }
2625  }
2626 
2627  return "";
2628  }
2629 
2630  void SetDefault() {
2631  this->marker = NULL;
2632  this->ttotal = NULL;
2633  this->ptotal = NULL;
2634  this->flowdir = NULL;
2635  this->size = 0; // There is no default value for list
2636  }
2637 };
2638 
2639 template <class Tenum>
2640 class COptionRiemann : public COptionBase {
2641 
2642 protected:
2643  map<string, Tenum> m;
2644  string name; // identifier for the option
2645  unsigned short & size;
2646  string * & marker;
2647  unsigned short* & field; // Reference to the field name
2648  su2double * & var1;
2649  su2double * & var2;
2650  su2double ** & flowdir;
2651 
2652 public:
2653  COptionRiemann(string option_field_name, unsigned short & nMarker_Riemann, string* & Marker_Riemann, unsigned short* & option_field, const map<string, Tenum> m, su2double* & var1, su2double* & var2, su2double** & FlowDir) : size(nMarker_Riemann),
2654  marker(Marker_Riemann), field(option_field), var1(var1), var2(var2), flowdir(FlowDir) {
2655  this->name = option_field_name;
2656  this->m = m;
2657  }
2658  ~COptionRiemann() {};
2659 
2660  string SetValue(vector<string> option_value) {
2661 
2662  unsigned short totalVals = option_value.size();
2663  if ((totalVals == 1) && (option_value[0].compare("NONE") == 0)) {
2664  this->size = 0;
2665  this->marker = NULL;
2666  this->field = 0;
2667  this->var1 = NULL;
2668  this->var2 = NULL;
2669  this->flowdir = NULL;
2670  return "";
2671  }
2672 
2673  if (totalVals % 7 != 0) {
2674  string newstring;
2675  newstring.append(this->name);
2676  newstring.append(": must have a number of entries divisible by 7");
2677  this->size = 0;
2678  this->marker = NULL;
2679  this->var1 = NULL;
2680  this->var2 = NULL;
2681  this->flowdir = NULL;
2682  this->field = NULL;
2683  return newstring;
2684  }
2685 
2686  unsigned short nVals = totalVals / 7;
2687  this->size = nVals;
2688  this->marker = new string[nVals];
2689  this->var1 = new su2double[nVals];
2690  this->var2 = new su2double[nVals];
2691  this->flowdir = new su2double*[nVals];
2692  this->field = new unsigned short[nVals];
2693 
2694  for (unsigned long i = 0; i < nVals; i++) {
2695  this->flowdir[i] = new su2double[3];
2696  }
2697 
2698  for (unsigned long i = 0; i < nVals; i++) {
2699  this->marker[i].assign(option_value[7*i]);
2700  // Check to see if the enum value is in the map
2701  if (this->m.find(option_value[7*i + 1]) == m.end()) {
2702  string str;
2703  str.append(this->name);
2704  str.append(": invalid option value ");
2705  str.append(option_value[0]);
2706  str.append(". Check current SU2 options in config_template.cfg.");
2707  return str;
2708  }
2709  Tenum val = this->m[option_value[7*i + 1]];
2710  this->field[i] = val;
2711 
2712  istringstream ss_1st(option_value[7*i + 2]);
2713  if (!(ss_1st >> this->var1[i])) {
2714  return badValue(option_value, "Riemann", this->name);
2715  }
2716  istringstream ss_2nd(option_value[7*i + 3]);
2717  if (!(ss_2nd >> this->var2[i])) {
2718  return badValue(option_value, "Riemann", this->name);
2719  }
2720  istringstream ss_3rd(option_value[7*i + 4]);
2721  if (!(ss_3rd >> this->flowdir[i][0])) {
2722  return badValue(option_value, "Riemann", this->name);
2723  }
2724  istringstream ss_4th(option_value[7*i + 5]);
2725  if (!(ss_4th >> this->flowdir[i][1])) {
2726  return badValue(option_value, "Riemann", this->name);
2727  }
2728  istringstream ss_5th(option_value[7*i + 6]);
2729  if (!(ss_5th >> this->flowdir[i][2])) {
2730  return badValue(option_value, "Riemann", this->name);
2731  }
2732  }
2733 
2734  return "";
2735  }
2736 
2737  void SetDefault() {
2738  this->marker = NULL;
2739  this->var1 = NULL;
2740  this->var2 = NULL;
2741  this->flowdir = NULL;
2742  this->size = 0; // There is no default value for list
2743  }
2744 };
2745 
2746 template <class Tenum>
2747 class COptionNRBC : public COptionRiemann<Tenum> {
2748 
2749 public:
2750  COptionNRBC(string option_field_name, unsigned short & nMarker_NRBC, string* & Marker_NRBC, unsigned short* & option_field,
2751  const map<string, Tenum> m, su2double* & var1, su2double* & var2, su2double** & FlowDir): COptionRiemann<Tenum>(option_field_name, nMarker_NRBC, Marker_NRBC, option_field,
2752  m, var1, var2,FlowDir) {}
2753  ~COptionNRBC() {};
2754 
2755 };
2756 //template <class Tenum>
2757 //class COptionNRBC : public COptionBase {
2758 //
2759 // map<string, Tenum> m;
2760 // unsigned short* & field; // Reference to the fieldname
2761 // string name; // identifier for the option
2762 // unsigned short & size;
2763 // string * & marker;
2764 // su2double * & var1;
2765 // su2double * & var2;
2766 // su2double ** & flowdir;
2767 //
2768 //public:
2769 // COptionNRBC(string option_field_name, unsigned short & nMarker_NRBC, string* & Marker_NRBC, unsigned short* & option_field, const map<string, Tenum> m, su2double* & var1, su2double* & var2, su2double** & FlowDir) : size(nMarker_NRBC),
2770 // marker(Marker_NRBC), field(option_field), var1(var1), var2(var2), flowdir(FlowDir) {
2771 // this->name = option_field_name;
2772 // this->m = m;
2773 // }
2774 // ~COptionNRBC() {};
2775 //
2776 // string SetValue(vector<string> option_value) {
2777 //
2778 // unsigned long totalVals = option_value.size();
2779 // if ((totalVals == 1) && (option_value[0].compare("NONE") == 0)) {
2780 // this->size = 0;
2781 // this->marker = NULL;
2782 // this->field = 0;
2783 // this->var1 = NULL;
2784 // this->var2 = NULL;
2785 // this->flowdir = NULL;
2786 // return "";
2787 // }
2788 //
2789 // if (totalVals % 7 != 0) {
2790 // string newstring;
2791 // newstring.append(this->name);
2792 // newstring.append(": must have a number of entries divisible by 7");
2793 // this->size = 0;
2794 // this->marker = NULL;
2795 // this->var1 = NULL;
2796 // this->var2 = NULL;
2797 // this->flowdir = NULL;
2798 // this->field = NULL;
2799 // return newstring;
2800 // }
2801 //
2802 // unsigned long nVals = totalVals / 7;
2803 // this->size = nVals;
2804 // this->marker = new string[nVals];
2805 // this->var1 = new su2double[nVals];
2806 // this->var2 = new su2double[nVals];
2807 // this->flowdir = new su2double*[nVals];
2808 // this->field = new unsigned short[nVals];
2809 //
2810 // for (int i = 0; i < nVals; i++) {
2811 // this->flowdir[i] = new su2double[3];
2812 // }
2813 //
2814 // for (int i = 0; i < nVals; i++) {
2815 // this->marker[i].assign(option_value[7*i]);
2816 // // Check to see if the enum value is in the map
2817 // if (this->m.find(option_value[7*i + 1]) == m.end()) {
2818 // string str;
2819 // str.append(this->name);
2820 // str.append(": invalid option value ");
2821 // str.append(option_value[0]);
2822 // str.append(". Check current SU2 options in config_template.cfg.");
2823 // return str;
2824 // }
2825 // Tenum val = this->m[option_value[7*i + 1]];
2826 // this->field[i] = val;
2827 //
2828 // istringstream ss_1st(option_value[7*i + 2]);
2829 // if (!(ss_1st >> this->var1[i])) {
2830 // return badValue(option_value, "NRBC", this->name);
2831 // }
2832 // istringstream ss_2nd(option_value[7*i + 3]);
2833 // if (!(ss_2nd >> this->var2[i])) {
2834 // return badValue(option_value, "NRBC", this->name);
2835 // }
2836 // istringstream ss_3rd(option_value[7*i + 4]);
2837 // if (!(ss_3rd >> this->flowdir[i][0])) {
2838 // return badValue(option_value, "NRBC", this->name);
2839 // }
2840 // istringstream ss_4th(option_value[7*i + 5]);
2841 // if (!(ss_4th >> this->flowdir[i][1])) {
2842 // return badValue(option_value, "NRBC", this->name);
2843 // }
2844 // istringstream ss_5th(option_value[7*i + 6]);
2845 // if (!(ss_5th >> this->flowdir[i][2])) {
2846 // return badValue(option_value, "NRBC", this->name);
2847 // }
2848 // }
2849 //
2850 // return "";
2851 // }
2852 //
2853 // void SetDefault() {
2854 // this->marker = NULL;
2855 // this->var1 = NULL;
2856 // this->var2 = NULL;
2857 // this->flowdir = NULL;
2858 // this->size = 0; // There is no default value for list
2859 // }
2860 //};
2861 
2862 
2863 
2864 
2865 
2866 
2867 //Inlet condition where the input direction is assumed
2868 class COptionExhaust : public COptionBase {
2869  string name; // identifier for the option
2870  unsigned short & size;
2871  string * & marker;
2872  su2double * & ttotal;
2873  su2double * & ptotal;
2874 
2875 public:
2876  COptionExhaust(string option_field_name, unsigned short & nMarker_Exhaust, string* & Marker_Exhaust, su2double* & Ttotal, su2double* & Ptotal) : size(nMarker_Exhaust), marker(Marker_Exhaust), ttotal(Ttotal), ptotal(Ptotal) {
2877  this->name = option_field_name;
2878  }
2879 
2880  ~COptionExhaust() {};
2881 
2882  string SetValue(vector<string> option_value) {
2883 
2884  unsigned short totalVals = option_value.size();
2885  if ((totalVals == 1) && (option_value[0].compare("NONE") == 0)) {
2886  this->size = 0;
2887  this->marker = NULL;
2888  this->ttotal = NULL;
2889  this->ptotal = NULL;
2890  return "";
2891  }
2892 
2893  if (totalVals % 3 != 0) {
2894  string newstring;
2895  newstring.append(this->name);
2896  newstring.append(": must have a number of entries divisible by 3");
2897  this->size = 0;
2898  this->marker = NULL;
2899  this->ttotal = NULL;
2900  this->ptotal = NULL;
2901  return newstring;
2902  }
2903 
2904  unsigned short nVals = totalVals / 3;
2905  this->size = nVals;
2906  this->marker = new string[nVals];
2907  this->ttotal = new su2double[nVals];
2908  this->ptotal = new su2double[nVals];
2909 
2910  for (unsigned long i = 0; i < nVals; i++) {
2911  this->marker[i].assign(option_value[3*i]);
2912  istringstream ss_1st(option_value[3*i + 1]);
2913  if (!(ss_1st >> this->ttotal[i]))
2914  return badValue(option_value, "exhaust fixed", this->name);
2915  istringstream ss_2nd(option_value[3*i + 2]);
2916  if (!(ss_2nd >> this->ptotal[i]))
2917  return badValue(option_value, "exhaust fixed", this->name);
2918  }
2919 
2920  return "";
2921  }
2922 
2923  void SetDefault() {
2924  this->marker = NULL;
2925  this->ttotal = NULL;
2926  this->ptotal = NULL;
2927  this->size = 0; // There is no default value for list
2928  }
2929 
2930 };
2931 
2933  string name; // identifier for the option
2934  unsigned short & size;
2935  string * & marker_bound;
2936  string * & marker_donor;
2937  su2double ** & rot_center;
2938  su2double ** & rot_angles;
2939  su2double ** & translation;
2940 
2941 public:
2942  COptionPeriodic(const string option_field_name, unsigned short & nMarker_PerBound,
2943  string* & Marker_PerBound, string* & Marker_PerDonor,
2944  su2double** & RotCenter, su2double** & RotAngles, su2double** & Translation) : size(nMarker_PerBound), marker_bound(Marker_PerBound), marker_donor(Marker_PerDonor), rot_center(RotCenter), rot_angles(RotAngles), translation(Translation) {
2945  this->name = option_field_name;
2946  }
2947 
2948  ~COptionPeriodic() {};
2949  string SetValue(vector<string> option_value) {
2950 
2951  const int mod_num = 11;
2952 
2953  unsigned short totalVals = option_value.size();
2954  if ((totalVals == 1) && (option_value[0].compare("NONE") == 0)) {
2955  this->size = 0;
2956  this->marker_bound = NULL;
2957  this->marker_donor = NULL;
2958  this->rot_center = NULL;
2959  this->rot_angles = NULL;
2960  this->translation = NULL;
2961  return "";
2962  }
2963 
2964  if (totalVals % mod_num != 0) {
2965  string newstring;
2966  newstring.append(this->name);
2967  newstring.append(": must have a number of entries divisible by 11");
2968  this->size = 0;
2969  this->marker_bound = NULL;
2970  this->marker_donor = NULL;
2971  this->rot_center = NULL;
2972  this->rot_angles = NULL;
2973  this->translation = NULL;
2974  return newstring;
2975  }
2976 
2977  unsigned short nVals = 2 * (totalVals / mod_num); // To account for periodic and donor
2978  this->size = nVals;
2979  this->marker_bound = new string[nVals];
2980  this->marker_donor = new string[nVals];
2981  this->rot_center = new su2double*[nVals];
2982  this->rot_angles = new su2double*[nVals];
2983  this->translation = new su2double*[nVals];
2984  for (unsigned long i = 0; i < nVals; i++) {
2985  this->rot_center[i] = new su2double[3];
2986  this->rot_angles[i] = new su2double[3];
2987  this->translation[i] = new su2double[3];
2988  }
2989 
2990  su2double deg2rad = PI_NUMBER/180.0;
2991 
2992  for (unsigned long i = 0; i < (nVals/2); i++) {
2993  this->marker_bound[i].assign(option_value[mod_num*i]);
2994  this->marker_donor[i].assign(option_value[mod_num*i+1]);
2995  istringstream ss_1st(option_value[mod_num*i + 2]);
2996  if (!(ss_1st >> this->rot_center[i][0])) {
2997  return badValue(option_value, "periodic", this->name);
2998  }
2999  istringstream ss_2nd(option_value[mod_num*i + 3]);
3000  if (!(ss_2nd >> this->rot_center[i][1])) {
3001  return badValue(option_value, "periodic", this->name);
3002  }
3003  istringstream ss_3rd(option_value[mod_num*i + 4]);
3004  if (!(ss_3rd >> this->rot_center[i][2])) {
3005  return badValue(option_value, "periodic", this->name);
3006  }
3007  istringstream ss_4th(option_value[mod_num*i + 5]);
3008  if (!(ss_4th >> this->rot_angles[i][0])) {
3009  return badValue(option_value, "periodic", this->name);
3010  }
3011  istringstream ss_5th(option_value[mod_num*i + 6]);
3012  if (!(ss_5th >> this->rot_angles[i][1])) {
3013  return badValue(option_value, "periodic", this->name);
3014  }
3015  istringstream ss_6th(option_value[mod_num*i + 7]);
3016  if (!(ss_6th >> this->rot_angles[i][2])) {
3017  return badValue(option_value, "periodic", this->name);
3018  }
3019  istringstream ss_7th(option_value[mod_num*i + 8]);
3020  if (!(ss_7th >> this->translation[i][0])) {
3021  return badValue(option_value, "periodic", this->name);
3022  }
3023  istringstream ss_8th(option_value[mod_num*i + 9]);
3024  if (!(ss_8th >> this->translation[i][1])) {
3025  return badValue(option_value, "periodic", this->name);
3026  }
3027  istringstream ss_9th(option_value[mod_num*i + 10]);
3028  if (!(ss_9th >> this->translation[i][2])) {
3029  return badValue(option_value, "periodic", this->name);
3030  }
3031  this->rot_angles[i][0] *= deg2rad;
3032  this->rot_angles[i][1] *= deg2rad;
3033  this->rot_angles[i][2] *= deg2rad;
3034  }
3035 
3036  for (unsigned long i = (nVals/2); i < nVals; i++) {
3037  this->marker_bound[i].assign(option_value[mod_num*(i-nVals/2)+1]);
3038  this->marker_donor[i].assign(option_value[mod_num*(i-nVals/2)]);
3039  istringstream ss_1st(option_value[mod_num*(i-nVals/2) + 2]);
3040  if (!(ss_1st >> this->rot_center[i][0])) {
3041  return badValue(option_value, "periodic", this->name);
3042  }
3043  istringstream ss_2nd(option_value[mod_num*(i-nVals/2) + 3]);
3044  if (!(ss_2nd >> this->rot_center[i][1])) {
3045  return badValue(option_value, "periodic", this->name);
3046  }
3047  istringstream ss_3rd(option_value[mod_num*(i-nVals/2) + 4]);
3048  if (!(ss_3rd >> this->rot_center[i][2])) {
3049  return badValue(option_value, "periodic", this->name);
3050  }
3051  istringstream ss_4th(option_value[mod_num*(i-nVals/2) + 5]);
3052  if (!(ss_4th >> this->rot_angles[i][0])) {
3053  return badValue(option_value, "periodic", this->name);
3054  }
3055  istringstream ss_5th(option_value[mod_num*(i-nVals/2) + 6]);
3056  if (!(ss_5th >> this->rot_angles[i][1])) {
3057  return badValue(option_value, "periodic", this->name);
3058  }
3059  istringstream ss_6th(option_value[mod_num*(i-nVals/2) + 7]);
3060  if (!(ss_6th >> this->rot_angles[i][2])) {
3061  return badValue(option_value, "periodic", this->name);
3062  }
3063  istringstream ss_7th(option_value[mod_num*(i-nVals/2) + 8]);
3064  if (!(ss_7th >> this->translation[i][0])) {
3065  return badValue(option_value, "periodic", this->name);
3066  }
3067  istringstream ss_8th(option_value[mod_num*(i-nVals/2) + 9]);
3068  if (!(ss_8th >> this->translation[i][1])) {
3069  return badValue(option_value, "periodic", this->name);
3070  }
3071  istringstream ss_9th(option_value[mod_num*(i-nVals/2) + 10]);
3072  if (!(ss_9th >> this->translation[i][2])) {
3073  return badValue(option_value, "periodic", this->name);
3074  }
3075  /*--- Mirror the rotational angles and translation vector (rotational
3076  center does not need to move) ---*/
3077  this->rot_center[i][0] *= 1.0;
3078  this->rot_center[i][1] *= 1.0;
3079  this->rot_center[i][2] *= 1.0;
3080  this->rot_angles[i][0] *= -deg2rad;
3081  this->rot_angles[i][1] *= -deg2rad;
3082  this->rot_angles[i][2] *= -deg2rad;
3083  this->translation[i][0] *= -1.0;
3084  this->translation[i][1] *= -1.0;
3085  this->translation[i][2] *= -1.0;
3086  }
3087 
3088  return "";
3089  }
3090 
3091  void SetDefault() {
3092  this->size = 0;
3093  this->marker_bound = NULL;
3094  this->marker_donor = NULL;
3095  this->rot_center = NULL;
3096  this->rot_angles = NULL;
3097  this->translation = NULL;
3098  }
3099 };
3100 
3101 
3103  string name; // identifier for the option
3104  unsigned short & size;
3105  string * & marker_bound;
3106  string * & marker_donor;
3107 
3108 public:
3109  COptionMixingPlane(const string option_field_name, unsigned short & nMarker_MixBound,
3110  string* & Marker_MixBound, string* & Marker_MixDonor) : size(nMarker_MixBound), marker_bound(Marker_MixBound), marker_donor(Marker_MixDonor) {
3111  this->name = option_field_name;
3112  }
3113 
3114  ~COptionMixingPlane() {};
3115  string SetValue(vector<string> option_value) {
3116 
3117  const int mod_num = 2;
3118 
3119  unsigned long totalVals = option_value.size();
3120  if ((totalVals == 1) && (option_value[0].compare("NONE") == 0)) {
3121  this->size = 0;
3122  this->marker_bound = NULL;
3123  this->marker_donor = NULL;
3124  return "";
3125  }
3126 
3127  if (totalVals % mod_num != 0) {
3128  string newstring;
3129  newstring.append(this->name);
3130  newstring.append(": must have a number of entries divisible by 11");
3131  this->size = 0;
3132  this->marker_bound = NULL;
3133  this->marker_donor = NULL;
3134  return newstring;
3135  }
3136 
3137  unsigned long nVals = 2 * (totalVals / mod_num); // To account for periodic and donor
3138  this->size = nVals;
3139  this->marker_bound = new string[nVals];
3140  this->marker_donor = new string[nVals];
3141 
3142 
3143  for (unsigned short i = 0; i < (nVals/2); i++) {
3144  this->marker_bound[i].assign(option_value[mod_num*i]);
3145  this->marker_donor[i].assign(option_value[mod_num*i+1]);
3146  }
3147 
3148  for (unsigned long i = (nVals/2); i < nVals; i++) {
3149  this->marker_bound[i].assign(option_value[mod_num*(i-nVals/2)+1]);
3150  this->marker_donor[i].assign(option_value[mod_num*(i-nVals/2)]);
3151  }
3152 
3153 
3154 
3155  return "";
3156  }
3157 
3158  void SetDefault() {
3159  this->size = 0;
3160  this->marker_bound = NULL;
3161  this->marker_donor = NULL;
3162  }
3163 };
3164 
3165 template <class Tenum>
3167  string name; // identifier for the option
3168  unsigned short & size;
3169  string * & marker_turboIn;
3170  string * & marker_turboOut;
3171  map<string, Tenum> m;
3172  unsigned short* & field; // Reference to the fieldname
3173 
3174 public:
3175  COptionTurboPerformance(const string option_field_name, unsigned short & nMarker_TurboPerf,
3176  string* & Marker_TurboBoundIn, string* & Marker_TurboBoundOut, unsigned short* & option_field, const map<string, Tenum> m) : size(nMarker_TurboPerf), marker_turboIn(Marker_TurboBoundIn), marker_turboOut(Marker_TurboBoundOut), field(option_field) {
3177  this->name = option_field_name;
3178  this->m = m;
3179  }
3180 
3182  string SetValue(vector<string> option_value) {
3183 
3184  const int mod_num = 3;
3185 
3186  unsigned long totalVals = option_value.size();
3187  if ((totalVals == 1) && (option_value[0].compare("NONE") == 0)) {
3188  this->size = 0;
3189  this->marker_turboIn= NULL;
3190  this->marker_turboOut = NULL;
3191  this->field = NULL;
3192  return "";
3193  }
3194 
3195  if (totalVals % mod_num != 0) {
3196  string newstring;
3197  newstring.append(this->name);
3198  newstring.append(": must have a number of entries divisible by 11");
3199  this->size = 0;
3200  this->marker_turboIn= NULL;
3201  this->marker_turboOut = NULL;;
3202  this->field = NULL;
3203  return newstring;
3204  }
3205 
3206  unsigned long nVals = totalVals / mod_num;
3207  this->size = nVals;
3208  this->marker_turboIn = new string[nVals];
3209  this->marker_turboOut = new string[nVals];
3210  this->field = new unsigned short[nVals];
3211  for (unsigned long i = 0; i < nVals; i++)
3212  if (this->m.find(option_value[mod_num*i + 2]) == m.end()) {
3213  string str;
3214  str.append(this->name);
3215  str.append(": invalid option value ");
3216  str.append(option_value[0]);
3217  str.append(". Check current SU2 options in config_template.cfg.");
3218  return str;
3219  }
3220  for (unsigned long i = 0; i < nVals; i++) {
3221  this->marker_turboIn[i].assign(option_value[mod_num*i]);
3222  this->marker_turboOut[i].assign(option_value[mod_num*i+1]);
3223  Tenum val = this->m[option_value[mod_num*i + 2]];
3224  this->field[i] = val;
3225  }
3226 
3227 
3228  return "";
3229  }
3230 
3231  void SetDefault() {
3232  this->size = 0;
3233  this->marker_turboIn= NULL;
3234  this->marker_turboOut = NULL;
3235  this->field = NULL;
3236  }
3237 };
3238 
3239 
3240 class COptionPython : public COptionBase {
3241  string name;
3242 public:
3243  COptionPython(const string name) {
3244  this->name = name;
3245  }
3246  ~COptionPython() {};
3247  // No checking happens with python options
3248  string SetValue(vector<string>) {
3249  return "";
3250  }
3251  // No defaults with python options
3252  void SetDefault() {
3253  return;
3254  };
3255 };
3256 
3257 
3258 
3259 class COptionActDisk : public COptionBase {
3260  string name; // identifier for the option
3261  unsigned short & inlet_size;
3262  unsigned short & outlet_size;
3263  string * & marker_inlet;
3264  string * & marker_outlet;
3265  su2double ** & press_jump;
3266  su2double ** & temp_jump;
3267  su2double ** & omega;
3268 
3269 public:
3270  COptionActDisk(const string name,
3271  unsigned short & nMarker_ActDiskInlet, unsigned short & nMarker_ActDiskOutlet, string * & Marker_ActDiskInlet, string * & Marker_ActDiskOutlet,
3272  su2double ** & ActDisk_PressJump, su2double ** & ActDisk_TempJump, su2double ** & ActDisk_Omega) :
3273  inlet_size(nMarker_ActDiskInlet), outlet_size(nMarker_ActDiskOutlet), marker_inlet(Marker_ActDiskInlet), marker_outlet(Marker_ActDiskOutlet),
3274  press_jump(ActDisk_PressJump), temp_jump(ActDisk_TempJump), omega(ActDisk_Omega) {
3275  this->name = name;
3276  }
3277 
3278  ~COptionActDisk() {};
3279  string SetValue(vector<string> option_value) {
3280  const int mod_num = 8;
3281  unsigned short totalVals = option_value.size();
3282  if ((totalVals == 1) && (option_value[0].compare("NONE") == 0)) {
3283  this->SetDefault();
3284  return "";
3285  }
3286 
3287  if (totalVals % mod_num != 0) {
3288  string newstring;
3289  newstring.append(this->name);
3290  newstring.append(": must have a number of entries divisible by 8");
3291  this->SetDefault();
3292  return newstring;
3293  }
3294 
3295  unsigned short nVals = totalVals / mod_num;
3296  this->inlet_size = nVals;
3297  this->outlet_size = nVals;
3298  this->marker_inlet = new string[this->inlet_size];
3299  this->marker_outlet = new string[this->outlet_size];
3300 
3301  this->press_jump = new su2double*[this->inlet_size];
3302  this->temp_jump = new su2double*[this->inlet_size];
3303  this->omega = new su2double*[this->inlet_size];
3304  for (int i = 0; i < this->inlet_size; i++) {
3305  this->press_jump[i] = new su2double[2];
3306  this->temp_jump[i] = new su2double[2];
3307  this->omega[i] = new su2double[2];
3308  }
3309 
3310  string tname = "actuator disk";
3311 
3312  for (int i = 0; i < this->inlet_size; i++) {
3313  this->marker_inlet[i].assign(option_value[mod_num*i]);
3314  this->marker_outlet[i].assign(option_value[mod_num*i+1]);
3315  istringstream ss_1st(option_value[mod_num*i + 2]);
3316  if (!(ss_1st >> this->press_jump[i][0])) {
3317  return badValue(option_value, tname, this->name);
3318  }
3319  istringstream ss_2nd(option_value[mod_num*i + 3]);
3320  if (!(ss_2nd >> this->temp_jump[i][0])) {
3321  return badValue(option_value, tname, this->name);
3322  }
3323  istringstream ss_3rd(option_value[mod_num*i + 4]);
3324  if (!(ss_3rd >> this->omega[i][0])) {
3325  return badValue(option_value, tname, this->name);
3326  }
3327  istringstream ss_4th(option_value[mod_num*i + 5]);
3328  if (!(ss_4th >> this->press_jump[i][1])) {
3329  return badValue(option_value, tname, this->name);
3330  }
3331  istringstream ss_5th(option_value[mod_num*i + 6]);
3332  if (!(ss_5th >> this->temp_jump[i][1])) {
3333  return badValue(option_value, tname, this->name);
3334  }
3335  istringstream ss_6th(option_value[mod_num*i + 7]);
3336  if (!(ss_6th >> this->omega[i][1])) {
3337  return badValue(option_value, tname, this->name);
3338  }
3339  }
3340  return "";
3341  }
3342  void SetDefault() {
3343  this->inlet_size = 0;
3344  this->outlet_size = 0;
3345  this->marker_inlet = NULL;
3346  this->marker_outlet = NULL;
3347  this->press_jump = NULL;
3348  this->temp_jump = NULL;
3349  this->omega = NULL;
3350  }
3351 };
Definition: option_structure.hpp:1747
User specifies density and velocity (mass flow).
Definition: option_structure.hpp:867
Surface movement as design variable.
Definition: option_structure.hpp:1143
ILU(0) preconditioner.
Definition: option_structure.hpp:1291
ENUM_TRANSFER_METHOD
types of transfer methods
Definition: option_structure.hpp:689
ENUM_SENS_SMOOTHING
types of sensitivity smoothing
Definition: option_structure.hpp:1274
Direct problem.
Definition: option_structure.hpp:389
const int VISC_TERM
Position of the viscous terms in the numerics container array.
Definition: option_structure.hpp:365
ENUM_ADAPT
types of grid adaptation/refinement
Definition: option_structure.hpp:1026
const unsigned short N_POINTS_LINE
General output & CGNS defines.
Definition: option_structure.hpp:148
Geometrical analysis and gradient using finite differences.
Definition: option_structure.hpp:725
Flexible Generalized Minimal Residual method with restart.
Definition: option_structure.hpp:1224
Second order.
Definition: option_structure.hpp:598
const int HEAT_SOL
Position of the heat equation in the solution solver array.
Definition: option_structure.hpp:359
An extreme operating gust.
Definition: option_structure.hpp:525
Explicit Euler time integration definition.
Definition: option_structure.hpp:654
Maximum thickness in section 3.
Definition: option_structure.hpp:948
Hicks-Henne bump function for airfoil deformation.
Definition: option_structure.hpp:1160
Running the SU2_DEF software.
Definition: option_structure.hpp:105
Non-dimensional simulation.
Definition: option_structure.hpp:314
Definition of no solver.
Definition: option_structure.hpp:239
const unsigned int MAX_ZONES
Maximum number of zones.
Definition: option_structure.hpp:121
ENUM_DYNAMIC
types of schemes for dynamic structural computations
Definition: option_structure.hpp:1405
Parabolic airfoil definition as design variables.
Definition: option_structure.hpp:1161
Dipoisson boundary definition.
Definition: option_structure.hpp:743
ENUM_REGIME
different regime modes
Definition: option_structure.hpp:300
Definition: option_structure.hpp:2505
ENUM_FREESTREAM_OPTION
types of initialization option
Definition: option_structure.hpp:445
Tecplot binary format for the solution output.
Definition: option_structure.hpp:1074
ENUM_INTERPOLATOR
types of interpolators
Definition: option_structure.hpp:285
Surface rotation as design variable.
Definition: option_structure.hpp:1145
Steger-Warming method.
Definition: option_structure.hpp:573
ENUM_MAT_COMPRESS
Material compressibility.
Definition: option_structure.hpp:272
Definition of a FSI solver.
Definition: option_structure.hpp:189
Fluid structure defromation.
Definition: option_structure.hpp:486
High level of verbosity.
Definition: option_structure.hpp:171
Free form deformation for 3D design (change a control point).
Definition: option_structure.hpp:1149
Arbitrary grid motion specified by external files at each time step.
Definition: option_structure.hpp:487
const int FEA_TERM
Position of the finite element analysis terms in the numerics container array.
Definition: option_structure.hpp:371
Domain interface boundary definition.
Definition: option_structure.hpp:745
Equivalent area objective function definition.
Definition: option_structure.hpp:936
ENUM_FLOW_GRADIENT
types of schemes to compute the flow gradient
Definition: option_structure.hpp:704
Definition: option_structure.hpp:1415
VTK nomenclature for defining a vertex element.
Definition: option_structure.hpp:911
RANS equations for the FSI problem.
Definition: option_structure.hpp:227
Definition of compressible solver.
Definition: option_structure.hpp:301
ENUM_TIME_INT
type of time integration schemes
Definition: option_structure.hpp:652
VTK nomenclature for defining a tetrahedron element.
Definition: option_structure.hpp:915
Free form deformation for 3D design (change the twist angle of a section).
Definition: option_structure.hpp:1151
ENUM_OUTPUT
type of solution output file formats
Definition: option_structure.hpp:1072
Definition of a FEM solver.
Definition: option_structure.hpp:190
Running the SU2_MSH software.
Definition: option_structure.hpp:107
One-physics case, the code is solving the poissonal potential equation.
Definition: option_structure.hpp:339
ENUM_FSI_FLUID_PROBLEM
types of fluid solvers
Definition: option_structure.hpp:223
Surface rotation as design variable.
Definition: option_structure.hpp:1144
ENUM_FFD_CONTINUITY
types surface continuity at the intersection with the FFD
Definition: option_structure.hpp:1246
ACTDISK_TYPE
types actuator disk boundary treatments
Definition: option_structure.hpp:891
Update geometry structure (grid moving, adaptation, etc.).
Definition: option_structure.hpp:717
Pressure objective function definition (inverse design).
Definition: option_structure.hpp:929
Definition: option_structure.hpp:1637
FieldView binary format for the solution output.
Definition: option_structure.hpp:1076
VERB_LEVEL
Verbosity level.
Definition: option_structure.hpp:168
One-physics case, the code is solving the adjoint turbulence model.
Definition: option_structure.hpp:342
ENUM_TRANS_MODEL
types of transition models
Definition: option_structure.hpp:639
const unsigned int MAX_FE_KINDS
Maximum number of Finite Elements.
Definition: option_structure.hpp:122
Temperature.
Definition: option_structure.hpp:1124
Definition of the continuous adjoint Reynolds-averaged Navier-Stokes&#39; (RANS) solver.
Definition: option_structure.hpp:193
User specifies the BC thrust.
Definition: option_structure.hpp:893
const int EL_TETRA
Elements of four nodes (3D).
Definition: option_structure.hpp:381
void SetValue(su2double &data, const double &val)
Set the (primitive) value of the datatype (needs to be implemented for each new type).
Definition: codi_forward_structure.inl:36
User specifies fan face mach number.
Definition: option_structure.hpp:879
A gust made from vortices.
Definition: option_structure.hpp:524
const int TURB_SOL
Position of the turbulence model solution in the solver container array.
Definition: option_structure.hpp:353
Boundary Load definition.
Definition: option_structure.hpp:762
CGNS format for the solution output.
Definition: option_structure.hpp:1078
User specifies total pressure, total temperature and Velocity components.
Definition: option_structure.hpp:805
Residual criteria to establish the convergence of the code.
Definition: option_structure.hpp:1354
Eddy viscosity.
Definition: option_structure.hpp:1126
ANSWER
Boolean answers.
Definition: option_structure.hpp:159
Definition of incompressible material.
Definition: option_structure.hpp:274
Definition: option_structure.hpp:2747
Continuous adjoint problem.
Definition: option_structure.hpp:390
Simulation in a rotating frame.
Definition: option_structure.hpp:491
Support for implementing another implicit method.
Definition: option_structure.hpp:668
Do a gradient based grid adaptation of the flow and adjoint grid.
Definition: option_structure.hpp:1033
const int FLOW_SOL
Position of the mean flow solution in the solver container array.
Definition: option_structure.hpp:350
Free form deformation for 3D design (camber change).
Definition: option_structure.hpp:1150
const unsigned int MAX_NUMBER_PERIODIC
Maximum number of periodic boundary conditions.
Definition: option_structure.hpp:116
const unsigned short N_POINTS_TRIANGLE
General output & CGNS defines.
Definition: option_structure.hpp:149
Static pressure.
Definition: option_structure.hpp:1122
Maximum thickness in section 5.
Definition: option_structure.hpp:950
const int EL_HEXA
Elements of eight nodes (3D).
Definition: option_structure.hpp:382
One-physics case, the code is solving the flow equations(Euler and Navier-Stokes).
Definition: option_structure.hpp:337
Definition of the Navier-Stokes&#39; solver.
Definition: option_structure.hpp:184
_______.
Definition: option_structure.hpp:520
Boundary Neumann definition.
Definition: option_structure.hpp:747
One-physics case, the code is solving the adjoint potential flow equation.
Definition: option_structure.hpp:340
Preconditionated conjugate gradient method for grid deformation.
Definition: option_structure.hpp:1221
Definition of linear elastic material.
Definition: option_structure.hpp:250
Angle of attack for airfoils.
Definition: option_structure.hpp:1169
Definition of linear elastic material.
Definition: option_structure.hpp:262
Boundary outlet flow definition.
Definition: option_structure.hpp:739
Gather data on one processor and scatter it into the one that needs it.
Definition: option_structure.hpp:691
No slip isothermal wall boundary condition.
Definition: option_structure.hpp:756
Free form deformation for 3D design (rotation around a line).
Definition: option_structure.hpp:1154
Definition: option_structure.hpp:1166
ENUM_RESIDUAL
types of residual criteria equations
Definition: option_structure.hpp:999
Paraview format for the solution output.
Definition: option_structure.hpp:1079
BCGSTAB - Biconjugate Gradient Stabilized Method (main solver).
Definition: option_structure.hpp:1223
ENUM_CONDUCTIVITYMODEL
types of thermal conductivity model
Definition: option_structure.hpp:470
No smoothing.
Definition: option_structure.hpp:1275
Tecplot format for the solution output.
Definition: option_structure.hpp:1073
Simulation with moving walls (translation/rotation).
Definition: option_structure.hpp:490
ENUM_MEASUREMENTS
different system of measurements
Definition: option_structure.hpp:325
GEO_TYPE
types of geometric entities based on VTK nomenclature
Definition: option_structure.hpp:910
User input.
Definition: option_structure.hpp:1250
ENUM_TURB_MODEL
types of turbulent models
Definition: option_structure.hpp:624
AUSMPW+ numerical method.
Definition: option_structure.hpp:576
Boundary Load definition.
Definition: option_structure.hpp:750
Airfoil definition as design variables.
Definition: option_structure.hpp:1163
const su2double TWO3
Two divided by three.
Definition: option_structure.hpp:138
Simulation in a steadily translating frame.
Definition: option_structure.hpp:494
Kind of Turbulence model (Menter SST).
Definition: option_structure.hpp:628
Boundary supersonic inlet definition.
Definition: option_structure.hpp:752
Scalar upwind numerical method.
Definition: option_structure.hpp:570
const int CONV_BOUND_TERM
Position of the convective boundary terms in the numerics container array.
Definition: option_structure.hpp:368
Jacobi preconditioner.
Definition: option_structure.hpp:1288
VTK nomenclature for defining a line element.
Definition: option_structure.hpp:912
Electrode boundary definition.
Definition: option_structure.hpp:742
Definition of Neo-Hookean material.
Definition: option_structure.hpp:251
Flexible Generalized Minimal Residual method.
Definition: option_structure.hpp:1222
Drag objective function definition.
Definition: option_structure.hpp:925
Roe-Turkel&#39;s upwind numerical method.
Definition: option_structure.hpp:575
const int SINGLE_NODE
There is only a node in the MPI parallelization.
Definition: option_structure.hpp:144
Maximum thickness in section 1.
Definition: option_structure.hpp:946
_____.
Definition: option_structure.hpp:416
Kind of Turbulent model (Spalart-Allmaras).
Definition: option_structure.hpp:626
ILU smoother.
Definition: option_structure.hpp:1227
No verbosity.
Definition: option_structure.hpp:169
Y-component of velocity.
Definition: option_structure.hpp:1120
Free form deformation for 3D design (control surface).
Definition: option_structure.hpp:1159
No turbulence model.
Definition: option_structure.hpp:625
Definition of the poisson potential solver.
Definition: option_structure.hpp:186
Derivative with respect to the freestream temperature.
Definition: option_structure.hpp:1381
Simulation on a static mesh with a gust.
Definition: option_structure.hpp:495
Definition: option_structure.hpp:2222
ENUM_2DFORM
different regime modes
Definition: option_structure.hpp:774
No centered scheme is used.
Definition: option_structure.hpp:551
Definition: option_structure.hpp:1547
Definition: option_structure.hpp:2640
Full Newton-Rapshon method.
Definition: option_structure.hpp:679
ENUM_VISCOSITYMODEL
types of viscosity model
Definition: option_structure.hpp:458
Sobolev gradient smoothing.
Definition: option_structure.hpp:1276
No derivative continuity.
Definition: option_structure.hpp:1247
const su2double TURB_EPS
Turbulent Error scale.
Definition: option_structure.hpp:135
Free form deformation for 3D design (thickness change).
Definition: option_structure.hpp:1157
ENUM_LIMITER
types of slope limiters
Definition: option_structure.hpp:609
Definition: option_structure.hpp:1702
Use the analytical definition of the NACA0012 for doing the grid adaptation.
Definition: option_structure.hpp:1304
User specifies static pressure, static temperature, and Mach components.
Definition: option_structure.hpp:806
Derivative with respect to the freestream pressure.
Definition: option_structure.hpp:1380
Headers of the mpi interface for generalized datatypes. The subroutines and functions are in the mpi_...
Boundary Euler wall definition.
Definition: option_structure.hpp:746
Clamped Boundary definition.
Definition: option_structure.hpp:761
NS equations for the FSI problem.
Definition: option_structure.hpp:226
User specifies the variables jump.
Definition: option_structure.hpp:892
Surfacebump function for flat surfaces deformation.
Definition: option_structure.hpp:1165
const int WAVE_SOL
Position of the wave equation in the solution solver array.
Definition: option_structure.hpp:358
Gradients computation using Weighted Least Squares.
Definition: option_structure.hpp:706
Pitching moment objective function definition.
Definition: option_structure.hpp:933
Definition: SU2_CFD.py:1
ENUM_UNSTEADY
types of schemes for unsteady computations
Definition: option_structure.hpp:1332
Add the periodic halo cells.
Definition: option_structure.hpp:1039
Definition: option_structure.hpp:1930
Simulation with aeroelastic motion.
Definition: option_structure.hpp:489
Definition: option_structure.hpp:1490
_____.
Definition: option_structure.hpp:471
User specifies static pressure, static temperature, and Mach components.
Definition: option_structure.hpp:807
Definition: option_structure.hpp:3240
Riemann Boundary definition.
Definition: option_structure.hpp:755
const int SOURCE_SECOND_TERM
Position of the second source term in the numerics container array.
Definition: option_structure.hpp:367
SU2_COMPONENT
different software components of SU2
Definition: option_structure.hpp:103
Lift objective function definition.
Definition: option_structure.hpp:926
BC_TYPE
types of boundary conditions
Definition: option_structure.hpp:734
ENUM_MATH_PROBLEM
types of mathematical problem to solve
Definition: option_structure.hpp:388
Jameson-Smith-Turkel centered numerical method.
Definition: option_structure.hpp:552
Use the analytical definition of the NACA4412 for doing the grid adaptation.
Definition: option_structure.hpp:1305
Use a dual time stepping strategy for unsteady computations (2nd order).
Definition: option_structure.hpp:1336
const unsigned int MAX_PARAMETERS
Maximum number of parameters for a design variable definition.
Definition: option_structure.hpp:115
Definition: option_structure.hpp:2068
Angle of attack sensitivity.
Definition: option_structure.hpp:1014
MIXINGPROCESS_TYPE
types of mixing process for averaging quantities at the boundaries.
Definition: option_structure.hpp:837
Lax-Friedrich centered numerical method.
Definition: option_structure.hpp:553
Linelet smoother.
Definition: option_structure.hpp:1228
User specifies the Net thrust.
Definition: option_structure.hpp:894
Definition: option_structure.hpp:3102
Domain interface definition.
Definition: option_structure.hpp:766
Slope limiter using Barth-Jespersen method.
Definition: option_structure.hpp:611
creates a map from a list by overloading operator()
Definition: option_structure.hpp:65
ENUM_GUST_TYPE
type of wind gusts
Definition: option_structure.hpp:519
LU SGS preconditioner.
Definition: option_structure.hpp:1289
Do a complete grid refinement of all the computational grids.
Definition: option_structure.hpp:1028
Arbitrary grid motion specified by external files at each time step with rigid rotation.
Definition: option_structure.hpp:488
ENGINE_INFLOW_TYPE
types engine inflow boundary treatments
Definition: option_structure.hpp:878
Modified Newton-Raphson method.
Definition: option_structure.hpp:680
FieldView format for the solution output.
Definition: option_structure.hpp:1075
an area average is computed at the boundary of interest.
Definition: option_structure.hpp:839
Sine-waveBoundary Load definition.
Definition: option_structure.hpp:763
Do a grid smoothing of the geometry.
Definition: option_structure.hpp:1037
Boundary send-receive definition.
Definition: option_structure.hpp:767
const unsigned int MESH_0
Definition of the finest grid level.
Definition: option_structure.hpp:127
User does not specify anything information are retrieved from the other domain.
Definition: option_structure.hpp:808
Free form deformation for 3D design (thickness change).
Definition: option_structure.hpp:1152
Definition: option_structure.hpp:1848
GEOMETRY_MODE
types of action to perform when doing the geometry evaluation
Definition: option_structure.hpp:723
Definition: option_structure.hpp:2868
Non-dimensional simulation.
Definition: option_structure.hpp:313
Slope limiter using Venkatakrisnan method.
Definition: option_structure.hpp:610
Do a complete grid refinement of the flow grid.
Definition: option_structure.hpp:1029
Use the analytical definition of a cylinder for doing the grid adaptation.
Definition: option_structure.hpp:1306
Definition of plane stress solver.
Definition: option_structure.hpp:775
Definition: option_structure.hpp:1889
Dimensional simulation.
Definition: option_structure.hpp:311
No upwind scheme is used.
Definition: option_structure.hpp:568
Top-hat function shaped gust.
Definition: option_structure.hpp:521
One-physics case, the code is solving the adjoint equations is being solved (Euler and Navier-Stokes)...
Definition: option_structure.hpp:341
Apply a computable error grid adaptation.
Definition: option_structure.hpp:1034
const unsigned int MESH_1
Definition of the finest grid level.
Definition: option_structure.hpp:128
Turbomachinery blade performances.
Definition: option_structure.hpp:852
Y-direction force objective function definition.
Definition: option_structure.hpp:939
ENUM_LINEAR_SOLVER
types of solvers for solving linear systems
Definition: option_structure.hpp:1217
VTK nomenclature for defining a hexahedron element.
Definition: option_structure.hpp:916
Do a gradient based grid adaptation of the flow grid.
Definition: option_structure.hpp:1031
No transition model.
Definition: option_structure.hpp:640
Second order with limiter.
Definition: option_structure.hpp:599
Impose a stiffness for each element that is inversely proportional to cell volume.
Definition: option_structure.hpp:1365
const unsigned int MAX_STRING_SIZE
Maximum number of domains.
Definition: option_structure.hpp:117
Definition of incompressible solver.
Definition: option_structure.hpp:302
Turbomachinery blade stage performances.
Definition: option_structure.hpp:853
Boundary symmetry plane definition.
Definition: option_structure.hpp:737
const unsigned short N_POINTS_TETRAHEDRON
General output & CGNS defines.
Definition: option_structure.hpp:151
One-physics case, the code is solving the heat equation.
Definition: option_structure.hpp:346
User does not specify anything information are retrieved from the other domain.
Definition: option_structure.hpp:809
const su2double ONE2
One divided by two.
Definition: option_structure.hpp:137
Y axis orientation.
Definition: option_structure.hpp:1321
Isoparametric interpolation.
Definition: option_structure.hpp:287
const su2double PI_NUMBER
Pi number.
Definition: option_structure.hpp:141
User specifies static pressure.
Definition: option_structure.hpp:804
Rotor Figure of Merit objective function definition.
Definition: option_structure.hpp:943
const unsigned short N_ELEM_TYPES
General output & CGNS defines.
Definition: option_structure.hpp:147
No surface deformation.
Definition: option_structure.hpp:1146
const int SOURCE_FIRST_TERM
Position of the first source term in the numerics container array.
Definition: option_structure.hpp:366
_______.
Definition: option_structure.hpp:539
Boundary displacement definition.
Definition: option_structure.hpp:748
ENUM_INIT_OPTION
types of initialization option
Definition: option_structure.hpp:431
Definition of the wave solver.
Definition: option_structure.hpp:187
ENUM_SOLVER
different solver types for the CFD component
Definition: option_structure.hpp:181
Slope limiter using sharp edges.
Definition: option_structure.hpp:612
First order.
Definition: option_structure.hpp:597
One-physics case, the code is solving the FEA equation.
Definition: option_structure.hpp:345
VTK nomenclature for defining a quadrilateral element.
Definition: option_structure.hpp:914
const int CGNS_STRING_SIZE
Length of strings used in the CGNS format.
Definition: option_structure.hpp:1067
Nearest Neigbhor interpolation.
Definition: option_structure.hpp:286
Z-direction force objective function definition.
Definition: option_structure.hpp:940
Radial Distortion objective function definition.
Definition: option_structure.hpp:956
Definition of the Reynolds-averaged Navier-Stokes&#39; (RANS) solver.
Definition: option_structure.hpp:185
Periodic boundary definition.
Definition: option_structure.hpp:740
GEOMETRY_ACTION
types of action to take on a geometry structure
Definition: option_structure.hpp:715
const unsigned int MAX_TERMS
Maximum number of terms in the numerical equations (dimension of solver container array)...
Definition: option_structure.hpp:120
const unsigned short N_POINTS_HEXAHEDRON
General output & CGNS defines.
Definition: option_structure.hpp:152
Actuator disk outlet boundary definition.
Definition: option_structure.hpp:760
Definition: option_structure.hpp:2322
Definition: option_structure.hpp:1668
Simulation with moving HTP (rotation).
Definition: option_structure.hpp:496
ACDC computes the right thrust.
Definition: option_structure.hpp:895
Impose a constant stiffness for each element (steel).
Definition: option_structure.hpp:1364
Newton method for point inversion algorithm (Free-Form).
Definition: option_structure.hpp:1219
Heat flux objective function definition (inverse design).
Definition: option_structure.hpp:930
Torque objective function definition.
Definition: option_structure.hpp:942
Angle of attack for FFD problem.
Definition: option_structure.hpp:1170
ENUM_GRIDMOVEMENT
types of unsteady mesh motion
Definition: option_structure.hpp:482
Mach number.
Definition: option_structure.hpp:1123
Free form deformation for 3D design (camber change).
Definition: option_structure.hpp:1158
Derivative with respect to the angle of attack.
Definition: option_structure.hpp:1379
No Deformation.
Definition: option_structure.hpp:1168
Linear Elasticity.
Definition: option_structure.hpp:492
Thrust objective function definition.
Definition: option_structure.hpp:941
Side force objective function definition.
Definition: option_structure.hpp:927
Consistent & Conservative interpolation (S.A. Brown 1997). Utilizes Isoparametric interpolation...
Definition: option_structure.hpp:288
Support for implementing an explicit method.
Definition: option_structure.hpp:666
Allocate geometry structure.
Definition: option_structure.hpp:716
No analytic definition of the geometry.
Definition: option_structure.hpp:1303
ENUM_KIND_NONDIM
different non-dimensional modes
Definition: option_structure.hpp:310
All processors gather data (this will be useful for operations over a group of data - averaging) ...
Definition: option_structure.hpp:692
Definition: option_structure.hpp:1964
ENUM_SPACE
types of spatial discretizations
Definition: option_structure.hpp:401
Objective function defined via chain rule on primitive variable gradients.
Definition: option_structure.hpp:954
Gather data on one processor and broadcast it into all of them, relating to global nodes...
Definition: option_structure.hpp:690
User specifies density and velocity, and flow direction.
Definition: option_structure.hpp:803
const unsigned int OVERHEAD
Overhead space above nMarker when allocating space for boundary elems (MPI + periodic).
Definition: option_structure.hpp:125
ENUM_INPUT
types of input file formats
Definition: option_structure.hpp:1059
ENUM_CONVERGE_CRIT
types of criteria to determine when the solution is converged
Definition: option_structure.hpp:1352
Medium level of verbosity.
Definition: option_structure.hpp:170
const su2double STANDART_GRAVITY
Acceleration due to gravity at surface of earth.
Definition: option_structure.hpp:132
const int FEA_SOL
Position of the FEA equation in the solution solver array.
Definition: option_structure.hpp:360
an algebraic average is computed at the boundary of interest.
Definition: option_structure.hpp:838
Non-dimensional simulation.
Definition: option_structure.hpp:312
NRBC Boundary definition.
Definition: option_structure.hpp:764
X-direction force objective function definition.
Definition: option_structure.hpp:938
RhoE equation residual criteria equation.
Definition: option_structure.hpp:1001
Free form deformation for 2D design (change a control point).
Definition: option_structure.hpp:1155
Simulation with dynamically deforming meshes (plunging/pitching/rotation).
Definition: option_structure.hpp:484
Boolean definition of yes.
Definition: option_structure.hpp:162
Definition: option_structure.hpp:1167
Boundary nacelle exhaust.
Definition: option_structure.hpp:754
The four digits NACA airfoil family as design variables.
Definition: option_structure.hpp:1162
an mixed-out average is computed at the boundary of interest.
Definition: option_structure.hpp:840
Static Pressure objective function definition.
Definition: option_structure.hpp:952
Impose a stiffness for each element that is proportional to the distance from the deforming surface...
Definition: option_structure.hpp:1366
Boundary Load definition.
Definition: option_structure.hpp:749
Efficiency objective function definition.
Definition: option_structure.hpp:928
ENUM_GUST_DIR
type of wind direction
Definition: option_structure.hpp:538
Upwind convective numerical method.
Definition: option_structure.hpp:404
Definition: option_structure.hpp:2555
const unsigned int EXIT_DIVERGENCE
Exit code (divergence).
Definition: option_structure.hpp:112
const int CONV_TERM
Position of the convective terms in the numerics container array.
Definition: option_structure.hpp:364
Maximum thickness in section 4.
Definition: option_structure.hpp:949
const int ADJFLOW_SOL
Position of the continuous adjoint flow solution in the solver container array.
Definition: option_structure.hpp:351
Pressure boundary condition.
Definition: option_structure.hpp:758
const unsigned int BUFSIZE
MPI buffer.
Definition: option_structure.hpp:114
ENUM_FFD_BLENDING
types of FFD Blending function
Definition: option_structure.hpp:1206
Definition: option_structure.hpp:1577
Sine shaped gust.
Definition: option_structure.hpp:522
Definition: option_structure.hpp:1607
Boundary Euler wall definition.
Definition: option_structure.hpp:735
Slope limiter using wall distance.
Definition: option_structure.hpp:613
Jump given by a difference in values.
Definition: option_structure.hpp:1094
const int TEMPLATE_SOL
Position of the template solution.
Definition: option_structure.hpp:362
Definition: option_structure.hpp:3259
TURBO_PERFORMANCE_TYPE
types of Turbomachinery performance indicators.
Definition: option_structure.hpp:851
void StringToUpperCase(string &str)
utility function for converting strings to uppercase
Definition: option_structure.hpp:85
Rolling moment objective function definition.
Definition: option_structure.hpp:934
One-physics case, the code is solving the turbulence model.
Definition: option_structure.hpp:347
Running the SU2_GEO software.
Definition: option_structure.hpp:108
ENUM_AXIS_ORIENTATION
types of axis orientation
Definition: option_structure.hpp:1319
Density.
Definition: option_structure.hpp:1118
custom boundary definition.
Definition: option_structure.hpp:744
Explicit Runge-Kutta time integration definition.
Definition: option_structure.hpp:653
const unsigned int ZONE_0
Definition of the first grid domain.
Definition: option_structure.hpp:129
const int ADJTURB_SOL
Position of the continuous adjoint turbulence solution in the solver container array.
Definition: option_structure.hpp:354
Simulation on a static mesh.
Definition: option_structure.hpp:483
const unsigned int MAX_SOLS
Maximum number of solutions at the same time (dimension of solution container array).
Definition: option_structure.hpp:119
ENUM_AITKEN
different regime modes
Definition: option_structure.hpp:786
INLET_TYPE
types inlet boundary treatments
Definition: option_structure.hpp:865
1-cosine shaped gust
Definition: option_structure.hpp:523
Definition: option_structure.hpp:2010
Roe&#39;s upwind numerical method.
Definition: option_structure.hpp:569
Line implicit preconditioner.
Definition: option_structure.hpp:1290
ENUM_DEFORM_STIFFNESS
types of element stiffnesses imposed for FEA mesh deformation
Definition: option_structure.hpp:1363
const int EL_QUAD
Elements of four nodes (2D).
Definition: option_structure.hpp:379
Definition of Neo-Hookean material.
Definition: option_structure.hpp:263
Geometrical analysis.
Definition: option_structure.hpp:724
ENUM_TIME_INT_FEA
type of time integration schemes
Definition: option_structure.hpp:665
MG_CYCLE
type of multigrid cycle
Definition: option_structure.hpp:1104
Second derivative continuity.
Definition: option_structure.hpp:1249
ENUM_GEO_ANALYTIC
types of analytic definitions for various geometries
Definition: option_structure.hpp:1302
Simulation with rigid mesh motion (plunging/pitching/rotation).
Definition: option_structure.hpp:485
Use a rotational source term.
Definition: option_structure.hpp:1337
Definition of compressible solver.
Definition: option_structure.hpp:326
No convective scheme is used.
Definition: option_structure.hpp:402
V cycle.
Definition: option_structure.hpp:1105
ENUM_UPWIND
types of upwind spatial discretizations
Definition: option_structure.hpp:567
RIEMANN_TYPE
types Riemann boundary treatments
Definition: option_structure.hpp:801
ENUM_FLUIDMODEL
types of fluid model
Definition: option_structure.hpp:414
User specifies Static pressure.
Definition: option_structure.hpp:881
Definition: option_structure.hpp:1806
Maximum thickness.
Definition: option_structure.hpp:944
Simulation with rotation and aeroelastic motion.
Definition: option_structure.hpp:493
Rho equation residual criteria equation.
Definition: option_structure.hpp:1000
Near-Field boundary definition.
Definition: option_structure.hpp:741
One-physics case, the code is solving the wave equation.
Definition: option_structure.hpp:343
const unsigned short N_POINTS_PYRAMID
General output & CGNS defines.
Definition: option_structure.hpp:153
X-component of velocity.
Definition: option_structure.hpp:1119
ENUM_LINEAR_SOLVER_PREC
types of preconditioners for the linear solver
Definition: option_structure.hpp:1287
Definition: __init__.py:1
User specifies the Net thrust.
Definition: option_structure.hpp:897
Boundary far-field definition.
Definition: option_structure.hpp:736
Definition of the continuous adjoint Navier-Stokes&#39; solver.
Definition: option_structure.hpp:192
const int SINGLE_ZONE
There is only a zone.
Definition: option_structure.hpp:145
Original transfer method, maintained to check .
Definition: option_structure.hpp:693
const unsigned int NO_RK_ITER
No Runge-Kutta iteration.
Definition: option_structure.hpp:123
One-physics case, the code is solving the turbulence model.
Definition: option_structure.hpp:338
Geometrical sensitivity.
Definition: option_structure.hpp:1012
Space centered convective numerical method.
Definition: option_structure.hpp:403
Actuator disk inlet boundary definition.
Definition: option_structure.hpp:759
_____.
Definition: option_structure.hpp:432
Use a time stepping strategy for unsteady computations.
Definition: option_structure.hpp:1334
Nonlinear elasticity equations for the FSI problem.
Definition: option_structure.hpp:240
ENUM_STRUCT_SOLVER
Material geometric conditions.
Definition: option_structure.hpp:249
User specifies total pressure, total temperature, and flow direction.
Definition: option_structure.hpp:866
Running the SU2_SOL software.
Definition: option_structure.hpp:109
VTK nomenclature for defining a pyramid element.
Definition: option_structure.hpp:918
Aero Drag objective function definition.
Definition: option_structure.hpp:955
CST method with Kulfan parameters for airfoil deformation.
Definition: option_structure.hpp:1164
Quasi Newton method for point inversion algorithm (Free-Form).
Definition: option_structure.hpp:1220
No slip constant heat flux wall boundary condition.
Definition: option_structure.hpp:757
Apply a remaining error grid adaptation.
Definition: option_structure.hpp:1035
Definition of the continuous adjoint Euler&#39;s solver.
Definition: option_structure.hpp:191
User specifies an input file.
Definition: option_structure.hpp:868
Cauchy criteria to establish the convergence of the code.
Definition: option_structure.hpp:1353
Kind of transition model (LM for Spalart-Allmaras).
Definition: option_structure.hpp:641
Use a harmonic balance source term.
Definition: option_structure.hpp:1338
Use the analytical definition of a biparabolic airfoil for doing the grid adaptation.
Definition: option_structure.hpp:1307
Boolean definition of no.
Definition: option_structure.hpp:161
CGNS input format for the computational grid.
Definition: option_structure.hpp:1061
No relaxation in the strongly coupled approach.
Definition: option_structure.hpp:787
X axis orientation.
Definition: option_structure.hpp:1320
Boundary inlet flow definition.
Definition: option_structure.hpp:738
ACDC computes the right thrust.
Definition: option_structure.hpp:896
HLLC numerical method.
Definition: option_structure.hpp:572
ENUM_CENTERED
types of centered spatial discretizations
Definition: option_structure.hpp:550
Kinetic Energy preserving Jameson-Smith-Turkel centered numerical method.
Definition: option_structure.hpp:554
Use a time stepping strategy for dynamic computations.
Definition: option_structure.hpp:1407
ENUM_MATERIAL_MODEL
Material model.
Definition: option_structure.hpp:261
A steady computation.
Definition: option_structure.hpp:1333
Convective upwind and split pressure numerical method.
Definition: option_structure.hpp:577
Free form deformation for 3D design (change the dihedral angle).
Definition: option_structure.hpp:1153
ENUM_FSI_STRUC_PROBLEM
types of structural solvers
Definition: option_structure.hpp:238
NearField Pressure objective function definition.
Definition: option_structure.hpp:937
Free form deformation for 3D design (change a control point).
Definition: option_structure.hpp:1147
LU_SGS smoother.
Definition: option_structure.hpp:1225
ENUM_SENS
types of sensitivities to compute
Definition: option_structure.hpp:1011
User specifies Static pressure.
Definition: option_structure.hpp:880
Mass Flow Rate objective function definition.
Definition: option_structure.hpp:953
const su2double FOUR3
Four divided by three.
Definition: option_structure.hpp:139
ENUM_FFD_COORD_SYSTEM
types of coordinates systems for the FFD
Definition: option_structure.hpp:1261
Kind of Turbulent model (Spalart-Allmaras).
Definition: option_structure.hpp:627
const unsigned int ZONE_1
Definition of the first grid domain.
Definition: option_structure.hpp:130
JUMP_DEFINITION
type of jump definition
Definition: option_structure.hpp:1093
Boundary supersonic inlet definition.
Definition: option_structure.hpp:751
Full Approximation Storage Multigrid system of equations.
Definition: option_structure.hpp:344
Maximum thickness in section 2.
Definition: option_structure.hpp:947
ENUM_SPATIAL_ORDER
Spatial numerical order integration.
Definition: option_structure.hpp:596
const int VISC_BOUND_TERM
Position of the viscous boundary terms in the numerics container array.
Definition: option_structure.hpp:369
Turbomachinery turbine performances.
Definition: option_structure.hpp:854
Template for new numerical method .
Definition: option_structure.hpp:578
Definition of the Euler&#39;s solver.
Definition: option_structure.hpp:183
Definition of plane strain solver.
Definition: option_structure.hpp:776
Do a gradient based grid adaptation of the adjoint grid.
Definition: option_structure.hpp:1032
Minimum thickness.
Definition: option_structure.hpp:945
Laminar viscosity.
Definition: option_structure.hpp:1125
No grid adaptation.
Definition: option_structure.hpp:1027
Internal Boundary definition.
Definition: option_structure.hpp:765
const unsigned short N_POINTS_QUADRILATERAL
General output & CGNS defines.
Definition: option_structure.hpp:150
Definition of no solver.
Definition: option_structure.hpp:224
Use a dual time stepping strategy for unsteady computations (1st order).
Definition: option_structure.hpp:1335
User specifies total pressure, total temperature, and flow direction.
Definition: option_structure.hpp:802
ENUM_OBJECTIVE
types of objective functions
Definition: option_structure.hpp:924
const int MASTER_NODE
Master node for MPI parallelization.
Definition: option_structure.hpp:143
Steepest descent method for point inversion algoritm (Free-Form).
Definition: option_structure.hpp:1218
Modified Steger-Warming method.
Definition: option_structure.hpp:574
Total Pressure objective function definition.
Definition: option_structure.hpp:951
VTK nomenclature for defining a triangle element.
Definition: option_structure.hpp:913
Derivative with respect to the mach number.
Definition: option_structure.hpp:1378
Do a grid refinement on the wake.
Definition: option_structure.hpp:1036
Comma-separated values format for the solution output.
Definition: option_structure.hpp:1077
A static structural computation.
Definition: option_structure.hpp:1406
Definition of template solver.
Definition: option_structure.hpp:194
Bi-grid technique smoothing.
Definition: option_structure.hpp:1277
_______.
Definition: option_structure.hpp:540
const int TRANS_SOL
Position of the transition model solution in the solver container array.
Definition: option_structure.hpp:356
Gradients computation using Green Gauss theorem.
Definition: option_structure.hpp:705
_____.
Definition: option_structure.hpp:446
Mach number sensitivity.
Definition: option_structure.hpp:1013
RUNTIME_TYPE
different types of systems
Definition: option_structure.hpp:336
Implicit Euler time integration definition.
Definition: option_structure.hpp:655
ENUM_DIRECTDIFF_VAR
The direct differentation variables.
Definition: option_structure.hpp:1376
FullMG cycle.
Definition: option_structure.hpp:1107
Euler equations for the FSI problem.
Definition: option_structure.hpp:225
const su2double EPS
Error scale.
Definition: option_structure.hpp:134
Relaxation with a fixed parameter.
Definition: option_structure.hpp:788
const unsigned short N_POINTS_PRISM
General output & CGNS defines.
Definition: option_structure.hpp:154
Definition: option_structure.hpp:1521
Implicit Newmark integration definition.
Definition: option_structure.hpp:667
Free form deformation for 3D design (change a control point).
Definition: option_structure.hpp:1148
Definition: option_structure.hpp:1448
Definition: option_structure.hpp:3166
Circumferential Distortion objective function definition.
Definition: option_structure.hpp:957
ENUM_SPACE_ITE_FEA
type of time integration schemes
Definition: option_structure.hpp:678
const int EL_TRIA
types of finite elements (in 2D or 3D)
Definition: option_structure.hpp:378
Jump given by a ratio.
Definition: option_structure.hpp:1095
ENUM_PARAM
types of design parameterizations
Definition: option_structure.hpp:1142
Do a complete grid refinement of the adjoint grid.
Definition: option_structure.hpp:1030
VTK nomenclature for defining a prism element.
Definition: option_structure.hpp:917
Definition: option_structure.hpp:2417
Free form deformation for 3D design (camber change).
Definition: option_structure.hpp:1156
Yawing objective function definition.
Definition: option_structure.hpp:935
_____.
Definition: option_structure.hpp:459
Definition: option_structure.hpp:2932
Definition of the heat solver.
Definition: option_structure.hpp:188
const int POISSON_SOL
Position of the electronic potential solution in the solver container array.
Definition: option_structure.hpp:357
Angle of Sideslip sensitivity.
Definition: option_structure.hpp:1015
Definition of incompressible solver.
Definition: option_structure.hpp:327
Do a grid smoothing.
Definition: option_structure.hpp:1038
Running the SU2_DOT software.
Definition: option_structure.hpp:106
Maximum heat flux.
Definition: option_structure.hpp:932
Total heat flux.
Definition: option_structure.hpp:931
AUSM numerical method.
Definition: option_structure.hpp:571
Boundary nacelle inflow.
Definition: option_structure.hpp:753
W cycle.
Definition: option_structure.hpp:1106
Kind of transition model (BAS-CAKMAKCIOGLU (BC) for Spalart-Allmaras).
Definition: option_structure.hpp:642
Relaxation using Aitken&#39;s dynamic parameter.
Definition: option_structure.hpp:789
Z-component of velocity.
Definition: option_structure.hpp:1121
First derivative continuity.
Definition: option_structure.hpp:1248
Definition of no solver.
Definition: option_structure.hpp:182
const unsigned int MAX_NUMBER_FFD
Maximum number of FFDBoxes for the FFD.
Definition: option_structure.hpp:118
Z axis orientation.
Definition: option_structure.hpp:1322
Jacobi smoother.
Definition: option_structure.hpp:1226
ENUM_OUTPUT_VARS
type of solution output variables
Definition: option_structure.hpp:1117
SU2 input format.
Definition: option_structure.hpp:1060
Definition of compressible material.
Definition: option_structure.hpp:273