diff --git a/.github/workflows/regression.yml b/.github/workflows/regression.yml index 3b670469fa65..442d2124f36b 100644 --- a/.github/workflows/regression.yml +++ b/.github/workflows/regression.yml @@ -60,12 +60,14 @@ jobs: strategy: fail-fast: false matrix: - testscript: ['tutorials.py', 'parallel_regression.py', 'parallel_regression_AD.py', 'serial_regression.py', 'serial_regression_AD.py', 'hybrid_regression.py', 'hybrid_regression_AD.py'] + testscript: ['tutorials.py', 'parallel_regression.py', 'flamelet_regression.py', 'parallel_regression_AD.py', 'serial_regression.py', 'serial_regression_AD.py', 'hybrid_regression.py'] include: - testscript: 'tutorials.py' tag: MPI - testscript: 'parallel_regression.py' tag: MPI + - testscript: 'flamelet_regression.py' + tag: MPI - testscript: 'parallel_regression_AD.py' tag: MPI - testscript: 'serial_regression.py' @@ -90,7 +92,7 @@ jobs: uses: docker://su2code/test-su2:20200303 with: # -t -c - args: -b ${{github.ref}} -t develop -c develop -s ${{matrix.testscript}} + args: -b ${{github.ref}} -t develop -c feature_flamelet -s ${{matrix.testscript}} unit_tests: runs-on: ubuntu-latest name: Unit Tests diff --git a/.gitignore b/.gitignore index 484e0b6e38e1..17b39dd31e1f 100644 --- a/.gitignore +++ b/.gitignore @@ -95,5 +95,10 @@ build/ # ninja binary (build system) ninja +<<<<<<< HEAD +# vscode config files +.vscode/* +======= # Ignore vscode folder .vscode/ +>>>>>>> develop diff --git a/Common/include/CConfig.hpp b/Common/include/CConfig.hpp index 2e4345c7e33c..b13bb57aaa06 100644 --- a/Common/include/CConfig.hpp +++ b/Common/include/CConfig.hpp @@ -199,6 +199,7 @@ class CConfig { nMarker_Inlet, /*!< \brief Number of inlet flow markers. */ nMarker_Riemann, /*!< \brief Number of Riemann flow markers. */ nMarker_Giles, /*!< \brief Number of Giles flow markers. */ + nMarker_Inlet_Scalar, /*!< \brief Number of inlet scalar markers. */ nRelaxFactor_Giles, /*!< \brief Number of relaxation factors for Giles markers. */ nMarker_Supersonic_Inlet, /*!< \brief Number of supersonic inlet flow markers. */ nMarker_Supersonic_Outlet, /*!< \brief Number of supersonic outlet flow markers. */ @@ -248,6 +249,7 @@ class CConfig { *Marker_Inlet, /*!< \brief Inlet flow markers. */ *Marker_Riemann, /*!< \brief Riemann markers. */ *Marker_Giles, /*!< \brief Giles markers. */ + *Marker_Inlet_Scalar, /*!< \brief Inlet Scalar markers. */ *Marker_Shroud, /*!< \brief Shroud markers. */ *Marker_Supersonic_Inlet, /*!< \brief Supersonic inlet flow markers. */ *Marker_Supersonic_Outlet, /*!< \brief Supersonic outlet flow markers. */ @@ -279,6 +281,7 @@ class CConfig { *RelaxFactorAverage, *RelaxFactorFourier; /*!< \brief Specified values for Giles BC. */ su2double **Giles_FlowDir; /*!< \brief Specified flow direction vector (unit vector) for Giles BC. */ su2double *Inlet_Ptotal; /*!< \brief Specified total pressures for inlet boundaries. */ + su2double **Inlet_ScalarVal; /*!< \brief Specified scalar vector for inlet boundaries. */ su2double **Inlet_FlowDir; /*!< \brief Specified flow direction vector (unit vector) for inlet boundaries. */ su2double *Inlet_Temperature; /*!< \brief Specified temperatures for a supersonic inlet boundaries. */ su2double *Inlet_Pressure; /*!< \brief Specified static pressures for supersonic inlet boundaries. */ @@ -373,6 +376,9 @@ class CConfig { su2double *Surface_MomentumDistortion; /*!< \brief Integral measure of the streamwise uniformity (relative to plug flow) at the boundaries (non-dim). */ su2double *Surface_TotalTemperature; /*!< \brief Total temperature at the boundaries. */ su2double *Surface_TotalPressure; /*!< \brief Total pressure at the boundaries. */ + su2double *Surface_CO; /*!< \brief Mass fraction of CO at the boundaries. */ + su2double *Surface_NOx; /*!< \brief Mass fraction of NO at the boundaries. */ + //su2double **Surface_Scalar; su2double *Surface_PressureDrop; /*!< \brief Pressure drop between boundaries. */ su2double *Surface_DC60; /*!< \brief Specified surface DC60 for nacelle boundaries. */ su2double *Surface_IDC; /*!< \brief Specified IDC for nacelle boundaries. */ @@ -430,7 +436,8 @@ class CConfig { CFLRedCoeff_AdjTurb, /*!< \brief CFL reduction coefficient for the adjoint turbulent problem. */ CFLFineGrid, /*!< \brief CFL of the finest grid. */ Max_DeltaTime, /*!< \brief Max delta time. */ - Unst_CFL; /*!< \brief Unsteady CFL number. */ + Unst_CFL, /*!< \brief Unsteady CFL number. */ + CFLRedCoeff_Scalar; /*!< \brief CFL reduction coefficient for the scalar transport equations. */ bool ReorientElements; /*!< \brief Flag for enabling element reorientation. */ bool AddIndNeighbor; /*!< \brief Include indirect neighbor in the agglomeration process. */ @@ -470,6 +477,7 @@ class CConfig { CHT_COUPLING Kind_CHT_Coupling; /*!< \brief Kind of coupling method used at CHT interfaces. */ VISCOSITYMODEL Kind_ViscosityModel; /*!< \brief Kind of the Viscosity Model*/ CONDUCTIVITYMODEL Kind_ConductivityModel; /*!< \brief Kind of the Thermal Conductivity Model */ + DIFFUSIVITYMODEL Kind_DiffusivityModel; /*!< \brief Kind of the mass diffusivity Model */ CONDUCTIVITYMODEL_TURB Kind_ConductivityModel_Turb; /*!< \brief Kind of the Turbulent Thermal Conductivity Model */ FREESTREAM_OPTION Kind_FreeStreamOption; /*!< \brief Kind of free stream option to choose if initializing with density or temperature */ unsigned short Kind_Solver, /*!< \brief Kind of solver Euler, NS, Continuous adjoint, etc. */ @@ -495,12 +503,14 @@ class CConfig { Kind_SlopeLimit_AdjFlow, /*!< \brief Slope limiter for the adjoint equation.*/ Kind_TimeNumScheme, /*!< \brief Global explicit or implicit time integration. */ Kind_TimeIntScheme_Flow, /*!< \brief Time integration for the flow equations. */ + Kind_SlopeLimit_Scalar, /*!< \brief Slope limiter for the scalar transport equations.*/ Kind_TimeIntScheme_FEM_Flow, /*!< \brief Time integration for the flow equations. */ Kind_ADER_Predictor, /*!< \brief Predictor step of the ADER-DG time integration scheme. */ Kind_TimeIntScheme_AdjFlow, /*!< \brief Time integration for the adjoint flow equations. */ Kind_TimeIntScheme_Turb, /*!< \brief Time integration for the turbulence model. */ Kind_TimeIntScheme_AdjTurb, /*!< \brief Time integration for the adjoint turbulence model. */ Kind_TimeIntScheme_Heat, /*!< \brief Time integration for the wave equations. */ + Kind_TimeIntScheme_Scalar, /*!< \brief Time integration for the scalar transport model. */ Kind_TimeStep_Heat; /*!< \brief Time stepping method for the (fvm) heat equation. */ STRUCT_TIME_INT Kind_TimeIntScheme_FEA; /*!< \brief Time integration for the FEA equations. */ STRUCT_SPACE_ITE Kind_SpaceIteScheme_FEA; /*!< \brief Iterative scheme for nonlinear structural analysis. */ @@ -514,18 +524,21 @@ class CConfig { Kind_ConvNumScheme_Turb, /*!< \brief Centered or upwind scheme for the turbulence model. */ Kind_ConvNumScheme_AdjTurb, /*!< \brief Centered or upwind scheme for the adjoint turbulence model. */ Kind_ConvNumScheme_Template, /*!< \brief Centered or upwind scheme for the level set equation. */ + Kind_ConvNumScheme_Scalar, /*!< \brief Centered or upwind scheme for the scalar transport equations. */ Kind_Centered, /*!< \brief Centered scheme. */ Kind_Centered_Flow, /*!< \brief Centered scheme for the flow equations. */ Kind_Centered_AdjFlow, /*!< \brief Centered scheme for the adjoint flow equations. */ Kind_Centered_Turb, /*!< \brief Centered scheme for the turbulence model. */ Kind_Centered_AdjTurb, /*!< \brief Centered scheme for the adjoint turbulence model. */ Kind_Centered_Template, /*!< \brief Centered scheme for the template model. */ + Kind_Centered_Scalar, /*!< \brief Centered scheme for the scalar transport equations. */ Kind_Upwind, /*!< \brief Upwind scheme. */ Kind_Upwind_Flow, /*!< \brief Upwind scheme for the flow equations. */ Kind_Upwind_AdjFlow, /*!< \brief Upwind scheme for the adjoint flow equations. */ Kind_Upwind_Turb, /*!< \brief Upwind scheme for the turbulence model. */ Kind_Upwind_AdjTurb, /*!< \brief Upwind scheme for the adjoint turbulence model. */ Kind_Upwind_Template, /*!< \brief Upwind scheme for the template model. */ + Kind_Upwind_Scalar, /*!< \brief Upwind scheme for the scalar transport equations. */ Kind_FEM, /*!< \brief Finite element scheme for the flow equations. */ Kind_FEM_Flow, /*!< \brief Finite element scheme for the flow equations. */ Kind_FEM_DG_Shock, /*!< \brief Shock capturing method for the FEM DG solver. */ @@ -541,6 +554,7 @@ class CConfig { MUSCL_Heat, /*!< \brief MUSCL scheme for the (fvm) heat equation.*/ MUSCL_AdjFlow, /*!< \brief MUSCL scheme for the adj flow equations.*/ MUSCL_AdjTurb, /*!< \brief MUSCL scheme for the adj turbulence equations.*/ + MUSCL_Scalar, /*!< \brief MUSCL scheme for the scalar transport equations.*/ Use_Accurate_Jacobians; /*!< \brief Use numerically computed Jacobians for AUSM+up(2) and SLAU(2). */ bool EulerPersson; /*!< \brief Boolean to determine whether this is an Euler simulation with Persson shock capturing. */ bool FSI_Problem = false,/*!< \brief Boolean to determine whether the simulation is FSI or not. */ @@ -554,7 +568,8 @@ class CConfig { STRUCT_DEFORMATION Kind_Struct_Solver; /*!< \brief Determines the geometric condition (small or large deformations) for structural analysis. */ unsigned short Kind_DV_FEA; /*!< \brief Kind of Design Variable for FEA problems.*/ - TURB_MODEL Kind_Turb_Model; /*!< \brief Turbulent model definition. */ + TURB_MODEL Kind_Turb_Model; /*!< \brief Turbulent model definition. */ + unsigned short Kind_Scalar_Model; /*!< \brief Scalar transport model definition. */ unsigned short Kind_SGS_Model; /*!< \brief LES SGS model definition. */ unsigned short Kind_Trans_Model, /*!< \brief Transition model definition. */ Kind_ActDisk, Kind_Engine_Inflow, @@ -581,6 +596,8 @@ class CConfig { su2double SemiSpan; /*!< \brief Wing Semi span. */ su2double Roe_Kappa; /*!< \brief Relaxation of the Roe scheme. */ su2double Relaxation_Factor_Adjoint; /*!< \brief Relaxation coefficient for variable updates of adjoint solvers. */ + su2double Relaxation_Factor_Scalar; /*!< \brief Relaxation coefficient of the linear solver for scalar transport equations. */ + su2double Relaxation_Factor_AdjFlow; /*!< \brief Relaxation coefficient of the linear solver adjoint mean flow. */ su2double Relaxation_Factor_CHT; /*!< \brief Relaxation coefficient for the update of conjugate heat variables. */ su2double AdjTurb_Linear_Error; /*!< \brief Min error of the turbulent adjoint linear solver for the implicit formulation. */ su2double EntropyFix_Coeff; /*!< \brief Entropy fix coefficient. */ @@ -653,6 +670,7 @@ class CConfig { unsigned short Res_FEM_CRIT; /*!< \brief Criteria to apply to the FEM convergence (absolute/relative). */ unsigned long StartConv_Iter; /*!< \brief Start convergence criteria at iteration. */ su2double Cauchy_Eps; /*!< \brief Epsilon used for the convergence. */ + bool Wrt_Sol_Overwrite; /*!< \brief overwrite solution and visualization files or not */ bool Restart, /*!< \brief Restart solution (for direct, adjoint, and linearized problems).*/ Read_Binary_Restart, /*!< \brief Read binary SU2 native restart files.*/ Restart_Flow; /*!< \brief Restart flow solution for adjoint and linearized problems. */ @@ -739,6 +757,7 @@ class CConfig { nRefOriginMoment_X, /*!< \brief Number of X-coordinate moment computation origins. */ nRefOriginMoment_Y, /*!< \brief Number of Y-coordinate moment computation origins. */ nRefOriginMoment_Z; /*!< \brief Number of Z-coordinate moment computation origins. */ + string file_name_lut; /*!< \brief file name of the look up table. */ unsigned short nMesh_Box_Size; short *Mesh_Box_Size; /*!< \brief Array containing the number of grid points in the x-, y-, and z-directions for the analytic RECTANGLE and BOX grid formats. */ string Mesh_FileName, /*!< \brief Mesh input file. */ @@ -795,6 +814,7 @@ class CConfig { Mu_ConstantND, /*!< \brief Non-dimensional constant viscosity for ConstantViscosity model. */ Thermal_Conductivity_Constant, /*!< \brief Constant thermal conductivity for ConstantConductivity model. */ Thermal_Conductivity_ConstantND, /*!< \brief Non-dimensional constant thermal conductivity for ConstantConductivity model. */ + *Scalar_Init, /*!< \brief Initial uniform value for scalar transport. */ Mu_Ref, /*!< \brief Reference viscosity for Sutherland model. */ Mu_RefND, /*!< \brief Non-dimensional reference viscosity for Sutherland model. */ Mu_Temperature_Ref, /*!< \brief Reference temperature for Sutherland model. */ @@ -804,7 +824,16 @@ class CConfig { array CpPolyCoefficientsND{{0.0}}; /*!< \brief Definition of the non-dimensional temperature polynomial coefficients for specific heat Cp. */ array MuPolyCoefficientsND{{0.0}}; /*!< \brief Definition of the non-dimensional temperature polynomial coefficients for viscosity. */ array KtPolyCoefficientsND{{0.0}}; /*!< \brief Definition of the non-dimensional temperature polynomial coefficients for thermal conductivity. */ - su2double Energy_FreeStream, /*!< \brief Free-stream total energy of the fluid. */ + su2double Thermal_Conductivity_Solid; /*!< \brief Thermal conductivity in solids. */ + su2double Diffusivity_Constant; /*!< \brief Constant mass diffusivity for scalar transport. */ + su2double Diffusivity_ConstantND; /*!< \brief Non-dim. constant mass diffusivity for scalar transport. */ + su2double Diffusivity_Ref; /*!< \brief Reference mass diffusion for species equations. */ + su2double Schmidt_Lam; /*!< \brief Laminar Schmidt number for mass diffusion. */ + su2double Schmidt_Turb, /*!< \brief Turbulent Schmidt number for mass diffusion. */ + Thermal_Diffusivity_Solid, /*!< \brief Thermal diffusivity in solids. */ + Temperature_Freestream_Solid, /*!< \brief Temperature in solids at freestream conditions. */ + Density_Solid, /*!< \brief Total density in solids. */ + Energy_FreeStream, /*!< \brief Free-stream total energy of the fluid. */ ModVel_FreeStream, /*!< \brief Magnitude of the free-stream velocity of the fluid. */ ModVel_FreeStreamND, /*!< \brief Non-dimensional magnitude of the free-stream velocity of the fluid. */ Density_FreeStream, /*!< \brief Free-stream density of the fluid. */ @@ -1036,6 +1065,18 @@ class CConfig { su2double *Wall_Emissivity; /*!< \brief Emissivity of the wall. */ bool Radiation; /*!< \brief Determines if a radiation model is incorporated. */ su2double CFL_Rad; /*!< \brief CFL Number for the radiation solver. */ + bool Scalar_Clipping; /*!< \brief Boolean that activates clipping for scalar transport. */ + su2double *Scalar_Clipping_Max; /*!< \brief Maximum value of clipping for scalar transport. */ + su2double *Scalar_Clipping_Min; /*!< \brief Minimum value of clipping for scalar transport. */ + unsigned short nScalar_Clipping_Max,nScalar_Clipping_Min; /* nijso: this should be the same as nScalar (or nVar for the scalar)*/ + unsigned short nScalar_Init; + bool enable_remeshing; + bool use_weak_scalar_bc; + su2double flame_thickness; + su2double burnt_thickness; + su2double ffd_bounds[6]; + su2double flame_offset[3]; + su2double flame_normal[3]; array default_cfl_adapt; /*!< \brief Default CFL adapt param array for the COption class. */ su2double vel_init[3], /*!< \brief initial velocity array for the COption class. */ @@ -1106,6 +1147,14 @@ class CConfig { unsigned short nScreenOutput, /*!< \brief Number of screen output variables (max: 6). */ nHistoryOutput, nVolumeOutput; /*!< \brief Number of variables printed to the history file. */ bool Multizone_Residual; /*!< \brief Determines if memory should be allocated for the multizone residual. */ + + unsigned short n_scalars; + unsigned short n_lookups; + unsigned short n_table_sources; /* the number of transported scalars for combustion */ + + vector table_scalar_names; /*!< \brief vector to store names of scalar variables. */ + vector table_source_names; /*!< \brief vector to store names of scalar source variables. */ + string* table_lookup_names; /*!< \brief vector to store names of look up variables. */ bool using_uq; /*!< \brief Using uncertainty quantification with SST model */ su2double uq_delta_b; /*!< \brief Parameter used to perturb eigenvalues of Reynolds Stress Matrix */ @@ -1244,6 +1293,9 @@ class CConfig { void addInletOption(const string name, unsigned short & nMarker_Inlet, string * & Marker_Inlet, su2double* & Ttotal, su2double* & Ptotal, su2double** & FlowDir); + void addInletScalarOption(const string name, unsigned short & nMarker_Inlet_Scalar, string * & Marker_Inlet_Scalar, + su2double** & inlet_scalar_val); + template void addRiemannOption(const string name, unsigned short & nMarker_Riemann, string * & Marker_Riemann, unsigned short* & option_field, const map & enum_map, su2double* & var1, su2double* & var2, su2double** & FlowDir); @@ -2010,6 +2062,44 @@ class CConfig { * \return Initial temperature for incompressible flows. */ su2double GetInc_Temperature_Init(void) const { return Inc_Temperature_Init; } + + /*! + * \brief Get the flag for activating scalar transport clipping + * \return Flag for scalar clipping + */ + bool GetScalar_Clipping(void) { return Scalar_Clipping; } + + bool GetEnableRemeshing(void) { return enable_remeshing; } + + bool GetUseWeakScalarBC(void) { return use_weak_scalar_bc; } + + + + su2double *GetFFDBounds(void) { return ffd_bounds; } + + /*! + * \brief Get the flame offset for flamelet model initialization + * \return flame offset for flamelet model initialization + */ + su2double *GetFlameOffset(void) { return flame_offset; } + + /*! + * \brief Get the flame normal for flamelet model initialization + * \return flame offset for flamelet model initialization + */ + su2double *GetFlameNormal(void) { return flame_normal; } + + /*! + * \brief Get the flame thickness for flamelet model initialization + * \return flame thickness for flamelet model initialization + */ + su2double GetFlameThickness(void) { return flame_thickness; } + + /*! + * \brief Get the burnt region thickness for flamelet mdoel initialization + * \return flame thickness for flamelet mdoel initialization + */ + su2double GetBurntThickness(void) { return burnt_thickness; } /*! * \brief Get the Young's modulus of elasticity. @@ -2111,6 +2201,12 @@ class CConfig { */ bool GetPrestretch(void) const { return Prestretch; } + /*! + * \brief Get the file name of the look up table + * \return File name of the look up table + */ + string GetFileNameLUT(void){ return file_name_lut; }; + /*! * \brief Get the name of the file with the element properties for structural problems. * \return Name of the file with the element properties of the structural problem. @@ -3725,6 +3821,12 @@ class CConfig { */ CONDUCTIVITYMODEL_TURB GetKind_ConductivityModel_Turb() const { return Kind_ConductivityModel_Turb; } + /*! + * \brief Get the value of the mass diffusivity model. + * \return Mass diffusivity model. + */ + DIFFUSIVITYMODEL GetKind_DiffusivityModel(void) const { return Kind_DiffusivityModel; } + /*! * \brief Get the value of the constant viscosity. * \return Constant viscosity. @@ -3750,6 +3852,30 @@ class CConfig { su2double GetThermal_Conductivity_ConstantND(void) const { return Thermal_Conductivity_ConstantND; } + /*! + * \brief Get the value of the constant mass diffusivity for scalar transport. + * \return Constant mass diffusivity. + */ + su2double GetDiffusivity_Constant(void) const { return Diffusivity_Constant; } + + /*! + * \brief Get the value of the non-dimensional constant mass diffusivity. + * \return Non-dimensional constant mass diffusivity. + */ + su2double GetDiffusivity_ConstantND(void) const { return Diffusivity_ConstantND; } + + /*! + * \brief Get the value of the laminar Schmidt number for scalar transport. + * \return Laminar Schmidt number for scalar transport. + */ + su2double GetSchmidt_Lam(void) const { return Schmidt_Lam; } + + /*! + * \brief Get the value of the turbulent Schmidt number for scalar transport. + * \return Turbulent Schmidt number for scalar transport. + */ + su2double GetSchmidt_Turb(void) const { return Schmidt_Turb; } + /*! * \brief Get the value of the reference viscosity for Sutherland model. * \return The reference viscosity. @@ -3856,6 +3982,16 @@ class CConfig { */ void SetThermal_Conductivity_ConstantND(su2double therm_cond_const) { Thermal_Conductivity_ConstantND = therm_cond_const; } + /*! + * \brief Set the value of the non-dimensional constant mass diffusivity. + */ + void SetDiffusivity_ConstantND(su2double diffusivity_const) { Diffusivity_ConstantND = diffusivity_const; } + + /*! + * \brief Set the value of the reference mass diffusivity. + */ + void SetDiffusivity_Ref(su2double diffusivity_ref); + /*! * \brief Set the value of the non-dimensional reference viscosity for Sutherland model. */ @@ -3994,6 +4130,12 @@ class CConfig { */ su2double GetRelaxation_Factor_Adjoint(void) const { return Relaxation_Factor_Adjoint; } + /*! + * \brief Get the relaxation coefficient of the linear solver for the implicit formulation. + * \return relaxation coefficient of the linear solver for the implicit formulation. + */ + su2double GetRelaxation_Factor_Scalar(void) { return Relaxation_Factor_Scalar; } + /*! * \brief Get the relaxation coefficient of the CHT coupling. * \return relaxation coefficient of the CHT coupling. @@ -4197,6 +4339,13 @@ class CConfig { */ unsigned short GetKind_SGS_Model(void) const { return Kind_SGS_Model; } + /*! + * \brief Get the kind of the scalar transport model. + * \return Kind of the scalar transport model. + */ + unsigned short GetKind_Scalar_Model(void) const { return Kind_Scalar_Model; }; + + /*! * \brief Get the kind of time integration method. * \note This is the information that the code will use, the method will @@ -4278,6 +4427,15 @@ class CConfig { */ bool GetMUSCL_AdjFlow(void) const { return MUSCL_AdjFlow; } + /*! + * \brief Get if the upwind scheme used MUSCL or not. + * \note This is the information that the code will use, the method will + * change in runtime depending of the specific equation (direct, adjoint, + * linearized) that is being solved. + * \return MUSCL scheme. + */ + bool GetMUSCL_Scalar(void) { return MUSCL_Scalar; } + /*! * \brief Get if the upwind scheme used MUSCL or not. * \note This is the information that the code will use, the method will @@ -4456,6 +4614,12 @@ class CConfig { */ unsigned short GetKind_SlopeLimit_Turb(void) const { return Kind_SlopeLimit_Turb; } + /*! + * \brief Get the method for limiting the spatial gradients. + * \return Method for limiting the spatial gradients solving the scalar transport equations. + */ + unsigned short GetKind_SlopeLimit_Scalar(void) { return Kind_SlopeLimit_Scalar; } + /*! * \brief Get the method for limiting the spatial gradients. * \return Method for limiting the spatial gradients solving the adjoint turbulent equation. @@ -4563,6 +4727,39 @@ class CConfig { */ su2double GetKappa_1st_AdjFlow(void) const { return Kappa_1st_AdjFlow; } + /*! + * \brief Get the kind of integration scheme (implicit) + * for the scalar transport equations. + * \note This value is obtained from the config file, and it is constant + * during the computation. + * \return Kind of integration scheme for the scalar transport equations. + */ + unsigned short GetKind_TimeIntScheme_Scalar(void) const { return Kind_TimeIntScheme_Scalar; } + + /*! + * \brief Get the kind of convective numerical scheme for the scalar transport equations (upwind). + * \note This value is obtained from the config file, and it is constant + * during the computation. + * \return Kind of convective numerical scheme for the scalar transport equations. + */ + unsigned short GetKind_ConvNumScheme_Scalar(void) const { return Kind_ConvNumScheme_Scalar; } + + /*! + * \brief Get the kind of center convective numerical scheme for the scalar transport equations. + * \note This value is obtained from the config file, and it is constant + * during the computation. + * \return Kind of center convective numerical scheme for the scalar transport equations. + */ + unsigned short GetKind_Centered_Scalar(void) const { return Kind_Centered_Scalar; } + + /*! + * \brief Get the kind of upwind convective numerical scheme for the scalar transport equations. + * \note This value is obtained from the config file, and it is constant + * during the computation. + * \return Kind of upwind convective numerical scheme for the scalar transport equations. + */ + unsigned short GetKind_Upwind_Scalar(void) const { return Kind_Upwind_Scalar; } + /*! * \brief Get the kind of integration scheme (implicit) * for the turbulence equations. @@ -5102,6 +5299,12 @@ class CConfig { */ bool GetRead_Binary_Restart(void) const { return Read_Binary_Restart; } + /*! + * \brief Flag for whether solution and visualization files are overwritten. + * \return Flag for overwriting. If Flag=false, iteration nr is appended to filename + */ + bool GetWrt_Sol_Overwrite(void) const { return Wrt_Sol_Overwrite; } + /*! * \brief Provides the number of varaibles. * \return Number of variables. @@ -6395,6 +6598,14 @@ class CConfig { */ su2double GetInlet_Ttotal(string val_index) const; + /*! + * \brief Get the scalar values at an inlet boundary + * \param[in] val_index - Index corresponding to the inlet boundary. + * \return The inlet scalar values. + */ + // nijso: TODO we do not need inlet enthalpy, it is computed from temperature! + su2double* GetInlet_ScalarVal(string val_index) const; + /*! * \brief Get the temperature at a supersonic inlet boundary. * \param[in] val_index - Index corresponding to the inlet boundary. @@ -6445,11 +6656,17 @@ class CConfig { su2double GetExhaust_Pressure_Target(string val_index) const; /*! - * \brief Value of the CFL reduction in LevelSet problems. - * \return Value of the CFL reduction in LevelSet problems. + * \brief Value of the CFL reduction in turbulence problems. + * \return Value of the CFL reduction in turbulence problems. */ su2double GetCFLRedCoeff_Turb(void) const { return CFLRedCoeff_Turb; } + /*! + * \brief Value of the CFL reduction for scalar transport equations. + * \return Value of the CFL reduction for scalar transport equations. + */ + su2double GetCFLRedCoeff_Scalar(void) { return CFLRedCoeff_Scalar; } + /*! * \brief Get the flow direction unit vector at an inlet boundary. * \param[in] val_index - Index corresponding to the inlet boundary. @@ -7420,6 +7637,27 @@ class CConfig { */ void SetSurface_TotalPressure(unsigned short val_marker, su2double val_surface_totalpressure) { Surface_TotalPressure[val_marker] = val_surface_totalpressure; } + /*! + * \brief Set the CO mass fraction at the surface. + * \param[in] val_imarker - Index corresponding to the outlet boundary. + * \param[in] val_surface_co - Value of the CO mass fraction. + */ + void SetSurface_CO(unsigned short val_imarker, su2double val_surface_co){ Surface_CO[val_imarker] = val_surface_co; }; + + /*! + * \brief Set the NOx mass fraction at the surface. + * \param[in] val_imarker - Index corresponding to the outlet boundary. + * \param[in] val_surface_no - Value of the NOx mass fraction. + */ + //void SetSurface_Scalar(unsigned short val_imarker, su2double val_surface_scalar, unsigned short val_i_scalar){ Surface_Scalar[val_imarker][val_i_scalar] = val_surface_scalar; }; + + /*! + * \brief Set the NO mass fraction at the surface. + * \param[in] val_imarker - Index corresponding to the outlet boundary. + * \param[in] val_surface_no - Value of the NO mass fraction. + */ + void SetSurface_NOx(unsigned short val_imarker, su2double val_surface_nox){ Surface_NOx[val_imarker] = val_surface_nox; }; + /*! * \brief Set the pressure drop between two surfaces. * \param[in] val_marker - Index corresponding to the outlet boundary. @@ -7686,6 +7924,27 @@ class CConfig { */ su2double GetSurface_TotalPressure(unsigned short val_marker) const { return Surface_TotalPressure[val_marker]; } + /*! + * \brief Get the CO mass fraction at an outlet boundary. + * \param[in] val_index - Index corresponding to the outlet boundary. + * \return The CO mass fraction. + */ + su2double GetSurface_CO(unsigned short val_imarker) const { return Surface_CO[val_imarker]; } + + /*! + * \brief Get the scalar mass fraction at an outlet boundary. + * \param[in] val_index - Index corresponding to the outlet boundary. + * \return The scalar mass fraction. + */ + //su2double GetSurface_Scalar(unsigned short val_imarker, unsigned short val_i_scalar) const { return Surface_Scalar[val_imarker][val_i_scalar]; } + + /*! + * \brief Get the NOx mass fraction at an outlet boundary. + * \param[in] val_index - Index corresponding to the outlet boundary. + * \return The NOx mass fraction. + */ + su2double GetSurface_NOx(unsigned short val_imarker) const { return Surface_NOx[val_imarker]; }; + /*! * \brief Get the pressure drop between two surfaces. * \param[in] val_index - Index corresponding to the outlet boundary. @@ -9137,11 +9396,86 @@ class CConfig { */ unsigned short GetnVolumeOutput(void) const { return nVolumeOutput; } + void SetNScalars(unsigned short n_scalars) { this->n_scalars = n_scalars; } + + /*! + * \brief Get the number of transported scalars for combustion + */ + unsigned short GetNScalars(void) const { return n_scalars; } + + /*! + * \brief Get the number of transported scalars for combustion + */ + unsigned short GetNLookups(void) const { return n_lookups; } + + void SetNTableSources(unsigned short n_table_sources) { this->n_table_sources = n_table_sources; } + + /*! + * \brief Get the number of transported scalars source terms for combustion + */ + unsigned short GetNTableSources(void) const { return n_table_sources; } + /*! * \brief Get the history output field iField */ string GetVolumeOutput_Field(unsigned short iField) const { return VolumeOutput[iField]; } + /*! + * \brief Store the names of scalar variables that are being solved + * \param[out] stores the names in vector table_scalar_names + */ + inline void SetScalarNames(vector &table_scalar_names) {this->table_scalar_names = table_scalar_names;} + + /*! + * \brief Get the scalar name i_scalar + */ + string GetScalarName(unsigned short i_scalar) const { return table_scalar_names.at(i_scalar); } + + /*! + * \brief Get the look up variable name i_lookup + */ + string GetLookupName(unsigned short i_lookup) const { return table_lookup_names[i_lookup]; } + + /*! + * \brief Store the names of scalar source term variables + * \param[out] stores the names in vector table_source_names + */ + inline void SetTableSourceNames(vector &table_source_names) {this->table_source_names = table_source_names;} + + /*! + * \brief Get the scalar source term name i_source + */ + string GetTableSourceName(unsigned short i_source) const { return table_source_names.at(i_source); } + + /*! + * \brief Get the maximum bound for scalar transport clipping + * \return Maximum value for scalar clipping + */ + su2double *GetScalar_Clipping_Max(void) { return Scalar_Clipping_Max; } + + /*! + * \brief Get the minimum bound for scalar transport clipping + * \return Minimum value for scalar clipping + */ + su2double *GetScalar_Clipping_Min(void) { return Scalar_Clipping_Min; } + /*! + * \brief Get the maximum bound for scalar transport clipping + * \return Maximum value for scalar clipping + */ + su2double GetScalar_Clipping_Max(unsigned short iVal) { return Scalar_Clipping_Max[iVal]; } + + /*! + * \brief Get the minimum bound for scalar transport clipping + * \return Minimum value for scalar clipping + */ + su2double GetScalar_Clipping_Min(unsigned short iVal) { return Scalar_Clipping_Min[iVal]; } + + /*! + * \brief Get the minimum bound for scalar transport clipping + * \return Minimum value for scalar clipping + */ + su2double GetScalar_Init(unsigned short ival) { return Scalar_Init[ival]; } + /*! * \brief Get the convergence fields for monitoring * \param[in] iField - Index of the field diff --git a/Common/include/grid_movement/CSurfaceMovement.hpp b/Common/include/grid_movement/CSurfaceMovement.hpp index 96a66881b8ba..7f249ec3728b 100644 --- a/Common/include/grid_movement/CSurfaceMovement.hpp +++ b/Common/include/grid_movement/CSurfaceMovement.hpp @@ -242,6 +242,15 @@ class CSurfaceMovement : public CGridMovement { */ void CheckFFDDimension(CGeometry *geometry, CConfig *config, CFreeFormDefBox *FFDBox, unsigned short iFFDBox); + /*! + * \brief Check the geometrical constraints of the FFD + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] config - Definition of the particular problem. + * \param[in] FFDBox - Array with all the free forms FFDBoxes of the computation. + * \param[in] iFFDBox - Index of FFD box. + */ + void CheckGeomConstr(CGeometry *geometry, CConfig *config, CFreeFormDefBox *FFDBox, unsigned short iFFDBox); + /*! * \brief Set the Parametric coordinates. * \param[in] geometry - Geometrical definition of the problem. diff --git a/Common/include/linear_algebra/CSysVector.hpp b/Common/include/linear_algebra/CSysVector.hpp index 7f5f547a157b..563ecf6d361f 100644 --- a/Common/include/linear_algebra/CSysVector.hpp +++ b/Common/include/linear_algebra/CSysVector.hpp @@ -359,6 +359,15 @@ class CSysVector : public VecExpr::CVecExpr, ScalarType> for (auto iVar = 0ul; iVar < nVar; iVar++) vec_val[iPoint * nVar + iVar] = 0.0; } + /*! + * \brief Set the value of one variable to zero for one block. + * \param[in] iPoint - Index of the block being set to zero. + * \param[in] iVar - Index of the variable being set to zero. + */ + inline void SetBlock_Zero(unsigned long iPoint, unsigned long iVar) { + vec_val[iPoint * nVar + iVar] = 0.0; + } + /*! * \brief Set "block" to the vector. * \note Template param Overwrite can be set to false to update existing values. diff --git a/Common/include/option_structure.hpp b/Common/include/option_structure.hpp index 425c0c890628..71bbc9131ec1 100644 --- a/Common/include/option_structure.hpp +++ b/Common/include/option_structure.hpp @@ -76,7 +76,7 @@ const unsigned int MAX_PARAMETERS = 10; /*!< \brief Maximum number of para const unsigned int MAX_NUMBER_PERIODIC = 10; /*!< \brief Maximum number of periodic boundary conditions. */ const unsigned int MAX_STRING_SIZE = 200; /*!< \brief Maximum number of domains. */ const unsigned int MAX_NUMBER_FFD = 15; /*!< \brief Maximum number of FFDBoxes for the FFD. */ -enum: unsigned int{MAX_SOLS = 12}; /*!< \brief Maximum number of solutions at the same time (dimension of solution container array). */ +enum: unsigned int{MAX_SOLS = 13}; /*!< \brief Maximum number of solutions at the same time (dimension of solution container array). */ const unsigned int MAX_TERMS = 6; /*!< \brief Maximum number of terms in the numerical equations (dimension of solver container array). */ const unsigned int MAX_ZONES = 3; /*!< \brief Maximum number of zones. */ const unsigned int MAX_FE_KINDS = 4; /*!< \brief Maximum number of Finite Elements. */ @@ -481,6 +481,8 @@ enum RUNTIME_TYPE { RUNTIME_TRANS_SYS = 22, /*!< \brief One-physics case, the code is solving the turbulence model. */ RUNTIME_RADIATION_SYS = 23, /*!< \brief One-physics case, the code is solving the radiation model. */ RUNTIME_ADJRAD_SYS = 24, /*!< \brief One-physics case, the code is solving the adjoint radiation model. */ + RUNTIME_SCALAR_SYS = 25, /*!< \brief One-physics case, the code is solving the scalar model. */ + RUNTIME_ADJSCALAR_SYS = 26, /*!< \brief One-physics case, the code is solving the adjoint scalar model. */ }; const int FLOW_SOL = 0; /*!< \brief Position of the mean flow solution in the solver container array. */ @@ -498,6 +500,9 @@ const int ADJRAD_SOL = 8; /*!< \brief Position of the continuous adjoint turbu const int MESH_SOL = 9; /*!< \brief Position of the mesh solver. */ const int ADJMESH_SOL = 10; /*!< \brief Position of the adjoint of the mesh solver. */ +const int SCALAR_SOL = 11; /*!< \brief Position of the scalar transport solution in the solver container array. */ +const int ADJSCALAR_SOL = 12; /*!< \brief Position of the adjoint scalar transport solution in the solver container array. */ + const int FEA_SOL = 0; /*!< \brief Position of the FEA equation in the solution solver array. */ const int ADJFEA_SOL = 1; /*!< \brief Position of the FEA adjoint equation in the solution solver array. */ @@ -549,15 +554,16 @@ static const MapType Space_Map = { * \brief Types of fluid model */ enum ENUM_FLUIDMODEL { - STANDARD_AIR = 0, /*!< \brief Standard air gas model. */ - IDEAL_GAS = 1, /*!< \brief Ideal gas model. */ - VW_GAS = 2, /*!< \brief Van Der Waals gas model. */ - PR_GAS = 3, /*!< \brief Perfect Real gas model. */ - CONSTANT_DENSITY = 4, /*!< \brief Constant density gas model. */ - INC_IDEAL_GAS = 5, /*!< \brief Incompressible ideal gas model. */ - INC_IDEAL_GAS_POLY = 6, /*!< \brief Inc. ideal gas, polynomial gas model. */ - MUTATIONPP = 7, /*!< \brief Mutation++ gas model for nonequilibrium flow. */ - SU2_NONEQ = 8 /*!< \brief User defined gas model for nonequilibrium flow. */ + STANDARD_AIR = 0, /*!< \brief Standard air gas model. */ + IDEAL_GAS = 1, /*!< \brief Ideal gas model. */ + VW_GAS = 2, /*!< \brief Van Der Waals gas model. */ + PR_GAS = 3, /*!< \brief Perfect Real gas model. */ + CONSTANT_DENSITY = 4, /*!< \brief Constant density gas model. */ + INC_IDEAL_GAS = 5, /*!< \brief Incompressible ideal gas model. */ + INC_IDEAL_GAS_POLY = 6, /*!< \brief Inc. ideal gas, polynomial gas model. */ + MUTATIONPP = 7, /*!< \brief Mutation++ gas model for nonequilibrium flow. */ + SU2_NONEQ = 8, /*!< \brief User defined gas model for nonequilibrium flow. */ + FLAMELET_FLUID_MODEL = 9, /*!, \brief Flamelet model */ }; static const MapType FluidModel_Map = { MakePair("STANDARD_AIR", STANDARD_AIR) @@ -568,6 +574,7 @@ static const MapType FluidModel_Map = { MakePair("INC_IDEAL_GAS", INC_IDEAL_GAS) MakePair("INC_IDEAL_GAS_POLY", INC_IDEAL_GAS_POLY) MakePair("MUTATIONPP", MUTATIONPP) + MakePair("FLAMELET_FLUID_MODEL", FLAMELET_FLUID_MODEL) MakePair("SU2_NONEQ", SU2_NONEQ) }; @@ -652,34 +659,43 @@ static const MapType FreeStreamOption_Map = { /*! * \brief Types of viscosity model */ + enum class VISCOSITYMODEL { CONSTANT, /*!< \brief Constant viscosity. */ SUTHERLAND, /*!< \brief Sutherlands Law viscosity. */ POLYNOMIAL, /*!< \brief Polynomial viscosity. */ + FLAMELET, /*!< \brief flamelet combustion model */ }; static const MapType ViscosityModel_Map = { MakePair("CONSTANT_VISCOSITY", VISCOSITYMODEL::CONSTANT) MakePair("SUTHERLAND", VISCOSITYMODEL::SUTHERLAND) MakePair("POLYNOMIAL_VISCOSITY", VISCOSITYMODEL::POLYNOMIAL) + MakePair("FLAMELET", VISCOSITYMODEL::FLAMELET) + }; /*! * \brief Types of thermal conductivity model */ + enum class CONDUCTIVITYMODEL { CONSTANT, /*!< \brief Constant thermal conductivity. */ CONSTANT_PRANDTL, /*!< \brief Constant Prandtl number. */ POLYNOMIAL, /*!< \brief Polynomial thermal conductivity. */ + FLAMELET, /*!< \brief flamelet combustion model */ }; static const MapType ConductivityModel_Map = { MakePair("CONSTANT_CONDUCTIVITY", CONDUCTIVITYMODEL::CONSTANT) MakePair("CONSTANT_PRANDTL", CONDUCTIVITYMODEL::CONSTANT_PRANDTL) MakePair("POLYNOMIAL_CONDUCTIVITY", CONDUCTIVITYMODEL::POLYNOMIAL) + MakePair("FLAMELET", CONDUCTIVITYMODEL::FLAMELET) + }; /*! * \brief Types of turbulent thermal conductivity model */ + enum class CONDUCTIVITYMODEL_TURB { NONE, /*!< \brief No turbulent contribution to the effective thermal conductivity for RANS. */ CONSTANT_PRANDTL, /*!< \brief Include contribution to effective conductivity using constant turbulent Prandtl number for RANS. */ @@ -690,7 +706,22 @@ static const MapType TurbConductivityModel_ }; /*! - * \brief Types of unsteady mesh motion + * \brief types of mass diffusivity models + */ +enum class DIFFUSIVITYMODEL { + CONSTANT_DIFFUSIVITY, /*!< \brief Constant mass diffusivity for scalar transport. */ + CONSTANT_SCHMIDT, /*!< \brief Constant Schmidt number for mass diffusion in scalar transport. */ + FLAMELET, /*!< \brief flamelet model */ +}; + +static const MapType DiffusivityModel_Map = { + MakePair("CONSTANT_DIFFUSIVITY", DIFFUSIVITYMODEL::CONSTANT_DIFFUSIVITY) + MakePair("CONSTANT_SCHMIDT", DIFFUSIVITYMODEL::CONSTANT_SCHMIDT) + MakePair("FLAMELET", DIFFUSIVITYMODEL::FLAMELET) +}; + +/*! + * \brief types of unsteady mesh motion */ enum ENUM_GRIDMOVEMENT { NO_MOVEMENT = 0, /*!< \brief Simulation on a static mesh. */ @@ -737,7 +768,7 @@ enum ENUM_GUST_TYPE { SINE = 2, /*!< \brief Sine shaped gust */ ONE_M_COSINE = 3, /*!< \brief 1-cosine shaped gust */ VORTEX = 4, /*!< \brief A gust made from vortices */ - EOG = 5 /*!< \brief An extreme operating gust */ + EOG = 5, /*!< \brief An extreme operating gust */ }; static const MapType Gust_Type_Map = { MakePair("NONE", NO_GUST) @@ -924,7 +955,23 @@ static const MapType Trans_Model_Map = { }; /*! - * \brief Types of subgrid scale models + * \brief types of scalar transport models + */ +enum ENUM_SCALAR_MODEL { + NO_SCALAR_MODEL = 0, /*!< \brief No scalar transport model. */ + PASSIVE_SCALAR = 1, /*!< \brief Passive scalar transport model. */ + PROGRESS_VARIABLE = 2, /*!< \brief Progress variable combustion model. */ + CUSTOM_SCALAR = 3, /*!< \brief Custom scalar transport model. */ +}; +static const MapType Scalar_Model_Map = { + MakePair("NONE", NO_SCALAR_MODEL) + MakePair("PASSIVE_SCALAR", PASSIVE_SCALAR) + MakePair("PROGRESS_VARIABLE", PROGRESS_VARIABLE) + MakePair("CUSTOM_SCALAR", CUSTOM_SCALAR) +}; + +/*! + * \brief types of subgrid scale models */ enum ENUM_SGS_MODEL { NO_SGS_MODEL = 0, /*!< \brief No subgrid scale model. */ @@ -1523,7 +1570,11 @@ enum ENUM_OBJECTIVE { TOPOL_DISCRETENESS = 63, /*!< \brief Measure of the discreteness of the current topology. */ TOPOL_COMPLIANCE = 64, /*!< \brief Measure of the discreteness of the current topology. */ STRESS_PENALTY = 65, /*!< \brief Penalty function of VM stresses above a maximum value. */ + SURFACE_CO = 80, + SURFACE_NOX = 81, + SURFACE_TEMP = 82, }; + static const MapType Objective_Map = { MakePair("DRAG", DRAG_COEFFICIENT) MakePair("LIFT", LIFT_COEFFICIENT) @@ -1575,6 +1626,9 @@ static const MapType Objective_Map = { MakePair("TOPOL_DISCRETENESS", TOPOL_DISCRETENESS) MakePair("TOPOL_COMPLIANCE", TOPOL_COMPLIANCE) MakePair("STRESS_PENALTY", STRESS_PENALTY) + MakePair("AVG_CO", SURFACE_CO) + MakePair("AVG_NOX", SURFACE_NOX) + MakePair("AVG_TEMP", SURFACE_TEMP) }; /*! @@ -2249,6 +2303,20 @@ static const MapType Verification_Solu MakePair("USER_DEFINED_SOLUTION", USER_DEFINED_SOLUTION) }; + /* the order matters: */ + /* enthalpy and progress variable are the first and second entry in the lookup table */ + enum FLAMELET_SCALAR_VARIABLES { + I_PROG_VAR, + I_ENTHALPY, + I_CO, + I_NOX, + }; + + enum FLAMELET_SCALAR_SOURCES { + I_SRC_TOT_PROG_VAR, + I_SRC_TOT_CO, + I_SRC_TOT_NOX, + }; /*! * \brief Types of streamwise periodicity. */ diff --git a/Common/include/option_structure.inl b/Common/include/option_structure.inl index a3a68c7667dd..b216b66fbb8c 100644 --- a/Common/include/option_structure.inl +++ b/Common/include/option_structure.inl @@ -1101,6 +1101,78 @@ public: } }; +class COptionInletScalar : public COptionBase { + string name; // identifier for the option + unsigned short & size; + string * & marker; + su2double ** & inletscalarval; + +public: + COptionInletScalar(string option_field_name, unsigned short & nMarker_Inlet_Scalar, string* & Marker_Inlet_Scalar, su2double** & option_field) : size(nMarker_Inlet_Scalar), marker(Marker_Inlet_Scalar), inletscalarval(option_field) { + this->name = option_field_name; + } + + ~COptionInletScalar() {}; + + string SetValue(vector option_value) { + COptionBase::SetValue(option_value); + unsigned short option_size = option_value.size(); + if ((option_size == 1) && (option_value[0].compare("NONE") == 0)) { + this->size = 0; + this->marker = NULL; + this->inletscalarval = NULL; + return ""; + } + + // at this point we need to know how many inlets we have. We count the number of strings + // in the list. We assume that the name of the inlet does not start with a number + unsigned short nVals=0; + unsigned short nScalars=0; + for (unsigned long i = 0; i < option_size; i++) { + // get the next entry in the inlet list + if (isalpha(option_value[i][0])) { + nVals++; + } else { + nScalars++; + } + + } + + + nScalars = nScalars/nVals; + + + // nVals is the number of inlets + this->size = nVals; + this->marker = new string[nVals]; + this->inletscalarval = new su2double*[nVals]; + for (unsigned long i = 0; i < nVals; i++) { + + this->inletscalarval[i] = new su2double[nScalars]; + } + + for (unsigned long i = 0; i < nVals; i++) { + this->marker[i].assign(option_value[(1+nScalars)*i]); + + for (unsigned long j=0;j> this->inletscalarval[i][j])) { + return badValue(option_value, "inlet", this->name); + } + } + + } + + return ""; + } + + void SetDefault() { + this->marker = NULL; + this->inletscalarval = NULL; + this->size = 0; // There is no default value for list + } +}; + template class COptionRiemann : public COptionBase { diff --git a/Common/src/CConfig.cpp b/Common/src/CConfig.cpp index 70dfc0837737..6acdc54fd4f1 100644 --- a/Common/src/CConfig.cpp +++ b/Common/src/CConfig.cpp @@ -476,6 +476,14 @@ void CConfig::addInletOption(const string name, unsigned short & nMarker_Inlet, option_map.insert(pair(name, val)); } +void CConfig::addInletScalarOption(const string name, unsigned short & nMarker_Inlet_Scalar, string * & Marker_Inlet_Scalar, + su2double** & inlet_scalar_val) { + assert(option_map.find(name) == option_map.end()); + all_options.insert(pair(name, true)); + COptionBase* val = new COptionInletScalar(name, nMarker_Inlet_Scalar, Marker_Inlet_Scalar, inlet_scalar_val); + option_map.insert(pair(name, val)); + } + template void CConfig::addRiemannOption(const string name, unsigned short & nMarker_Riemann, string * & Marker_Riemann, unsigned short* & option_field, const map & enum_map, su2double* & var1, su2double* & var2, su2double** & FlowDir) { @@ -805,10 +813,10 @@ void CConfig::SetPointersNull(void) { Marker_CfgFile_PyCustom = nullptr; Marker_All_PyCustom = nullptr; - Marker_DV = nullptr; Marker_Moving = nullptr; Marker_Monitoring = nullptr; - Marker_Designing = nullptr; Marker_GeoEval = nullptr; Marker_Plotting = nullptr; - Marker_Analyze = nullptr; Marker_PyCustom = nullptr; Marker_WallFunctions = nullptr; - Marker_CfgFile_KindBC = nullptr; Marker_All_KindBC = nullptr; + Marker_DV = nullptr; Marker_Moving = nullptr; Marker_Monitoring = nullptr; + Marker_Designing = nullptr; Marker_GeoEval = nullptr; Marker_Plotting = nullptr; + Marker_Analyze = nullptr; Marker_PyCustom = nullptr; Marker_WallFunctions = nullptr; + Marker_CfgFile_KindBC = nullptr; Marker_All_KindBC = nullptr; Marker_Inlet_Scalar = nullptr; Kind_WallFunctions = nullptr; IntInfo_WallFunctions = nullptr; @@ -893,14 +901,16 @@ void CConfig::SetPointersNull(void) { ActDiskOutlet_Power = nullptr; ActDiskOutlet_Temperature = nullptr; ActDiskOutlet_TotalTemperature = nullptr; ActDiskOutlet_MassFlow = nullptr; - ActDisk_DeltaPress = nullptr; ActDisk_DeltaTemp = nullptr; - ActDisk_TotalPressRatio = nullptr; ActDisk_TotalTempRatio = nullptr; ActDisk_StaticPressRatio = nullptr; - ActDisk_StaticTempRatio = nullptr; ActDisk_NetThrust = nullptr; ActDisk_GrossThrust = nullptr; - ActDisk_Power = nullptr; ActDisk_MassFlow = nullptr; ActDisk_Area = nullptr; - ActDisk_ReverseMassFlow = nullptr; Surface_MassFlow = nullptr; Surface_Mach = nullptr; - Surface_Temperature = nullptr; Surface_Pressure = nullptr; Surface_Density = nullptr; Surface_Enthalpy = nullptr; - Surface_NormalVelocity = nullptr; Surface_TotalTemperature = nullptr; Surface_TotalPressure = nullptr; Surface_PressureDrop = nullptr; - Surface_DC60 = nullptr; Surface_IDC = nullptr; + ActDisk_DeltaPress = nullptr; ActDisk_DeltaTemp = nullptr; + ActDisk_TotalPressRatio = nullptr; ActDisk_TotalTempRatio = nullptr; ActDisk_StaticPressRatio = nullptr; + ActDisk_StaticTempRatio = nullptr; ActDisk_NetThrust = nullptr; ActDisk_GrossThrust = nullptr; + ActDisk_Power = nullptr; ActDisk_MassFlow = nullptr; ActDisk_Area = nullptr; + ActDisk_ReverseMassFlow = nullptr; Surface_MassFlow = nullptr; Surface_Mach = nullptr; + Surface_Temperature = nullptr; Surface_Pressure = nullptr; Surface_Density = nullptr; Surface_Enthalpy = nullptr; + Surface_NormalVelocity = nullptr; Surface_TotalTemperature = nullptr; Surface_TotalPressure = nullptr; Surface_PressureDrop = nullptr; + Surface_DC60 = nullptr; Surface_IDC = nullptr; + Surface_CO = nullptr; Surface_NOx = nullptr; + //Surface_Scalar = nullptr; Outlet_MassFlow = nullptr; Outlet_Density = nullptr; Outlet_Area = nullptr; @@ -1003,6 +1013,10 @@ void CConfig::SetPointersNull(void) { VolumeOutputFiles = nullptr; ConvField = nullptr; + Scalar_Init = nullptr; + Scalar_Clipping_Min = nullptr; + Scalar_Clipping_Max = nullptr; + /*--- Variable initialization ---*/ TimeIter = 0; @@ -1079,6 +1093,10 @@ void CConfig::SetConfig_Options() { addEnumOption("KIND_TURB_MODEL", Kind_Turb_Model, Turb_Model_Map, TURB_MODEL::NONE); /*!\brief KIND_TRANS_MODEL \n DESCRIPTION: Specify transition model OPTIONS: see \link Trans_Model_Map \endlink \n DEFAULT: NO_TRANS_MODEL \ingroup Config*/ addEnumOption("KIND_TRANS_MODEL", Kind_Trans_Model, Trans_Model_Map, NO_TRANS_MODEL); + /*!\brief KIND_SCALAR_MODEL \n DESCRIPTION: Specify scalar transport model \n Options: see \link Scalar_Model_Map \endlink \n DEFAULT: NO_SCALAR_MODEL \ingroup Config*/ + addEnumOption("KIND_SCALAR_MODEL", Kind_Scalar_Model, Scalar_Model_Map, NO_SCALAR_MODEL); + /*!\brief KIND_TRANS_MODEL \n DESCRIPTION: Specify transition model OPTIONS: see \link Trans_Model_Map \endlink \n DEFAULT: NO_TRANS_MODEL \ingroup Config*/ + /*!\brief HEAT_EQUATION \n DESCRIPTION: Enable heat equation for incompressible flows. \ingroup Config*/ /*!\brief KIND_SGS_MODEL \n DESCRIPTION: Specify subgrid scale model OPTIONS: see \link SGS_Model_Map \endlink \n DEFAULT: NO_SGS_MODEL \ingroup Config*/ addEnumOption("KIND_SGS_MODEL", Kind_SGS_Model, SGS_Model_Map, NO_SGS_MODEL); @@ -1120,6 +1138,8 @@ void CConfig::SetConfig_Options() { addBoolOption("RESTART_SOL", Restart, false); /*!\brief BINARY_RESTART \n DESCRIPTION: Read binary SU2 native restart files. \n Options: YES, NO \ingroup Config */ addBoolOption("READ_BINARY_RESTART", Read_Binary_Restart, true); + /*!\brief BINARY_RESTART \n DESCRIPTION: Read / overwrite solution and visualisation files. \n Options: YES, NO \ingroup Config */ + addBoolOption("WRT_SOL_OVERWRITE", Wrt_Sol_Overwrite, true); /*!\brief SYSTEM_MEASUREMENTS \n DESCRIPTION: System of measurements \n OPTIONS: see \link Measurements_Map \endlink \n DEFAULT: SI \ingroup Config*/ addEnumOption("SYSTEM_MEASUREMENTS", SystemMeasurements, Measurements_Map, SI); @@ -1215,6 +1235,16 @@ void CConfig::SetConfig_Options() { /* DESCRIPTION: Definition of the temperature polynomial coefficients for specific heat Cp. */ addDoubleArrayOption("KT_POLYCOEFFS", N_POLY_COEFFS, kt_polycoeffs.data()); + /*--- Options related to mass diffusivity ---*/ + + addEnumOption("DIFFUSIVITY_MODEL", Kind_DiffusivityModel, DiffusivityModel_Map, DIFFUSIVITYMODEL::CONSTANT_DIFFUSIVITY); + /* DESCRIPTION: default value for AIR */ + addDoubleOption("DIFFUSIVITY_CONSTANT", Diffusivity_Constant , 0.001); + /*!\brief SCHMIDT_LAM \n DESCRIPTION: Laminar Schmidt number of mass diffusion \ingroup Config*/ + addDoubleOption("SCHMIDT_LAM", Schmidt_Lam, 1.0); + /*!\brief SCHMIDT_TURB \n DESCRIPTION: Turbulent Schmidt number of mass diffusion \n DEFAULT 0.90 \ingroup Config*/ + addDoubleOption("SCHMIDT_TURB", Schmidt_Turb, 0.7); + /*!\brief REYNOLDS_NUMBER \n DESCRIPTION: Reynolds number (non-dimensional, based on the free-stream values). Needed for viscous solvers. For incompressible solvers the Reynolds length will always be 1.0 \n DEFAULT: 0.0 \ingroup Config */ addDoubleOption("REYNOLDS_NUMBER", Reynolds, 0.0); /*!\brief REYNOLDS_LENGTH \n DESCRIPTION: Reynolds length (1 m by default). Used for compressible solver: incompressible solver will use 1.0. \ingroup Config */ @@ -1280,6 +1310,50 @@ void CConfig::SetConfig_Options() { addEnumOption("INC_NONDIM", Ref_Inc_NonDim, NonDim_Map, INITIAL_VALUES); /*!\brief INC_INLET_USENORMAL \n DESCRIPTION: Use the local boundary normal for the flow direction with the incompressible pressure inlet. \ingroup Config*/ addBoolOption("INC_INLET_USENORMAL", Inc_Inlet_UseNormal, false); + + /*!\brief SCALAR_INIT \n DESCRIPTION: Initial value for scalar transport \ingroup Config*/ + //addDoubleOption("SCALAR_INIT", Scalar_Init, 0.0); + + addDoubleListOption("SCALAR_INIT", nScalar_Init, Scalar_Init); + + /*!\brief SCALAR_CLIPPING \n DESCRIPTION: Activate clipping for scalar transport equations \ingroup Config*/ + addBoolOption("SCALAR_CLIPPING", Scalar_Clipping, false); + + addBoolOption("ENABLE_REMESHING", enable_remeshing, false); + + addBoolOption("USE_WEAK_SCALAR_BC", use_weak_scalar_bc, false); + + /*!\brief SCALAR_CLIPPING_MAX \n DESCRIPTION: Maximum value for scalar clipping \ingroup Config*/ + addDoubleListOption("SCALAR_CLIPPING_MAX", nScalar_Clipping_Max, Scalar_Clipping_Max); + + /*!\brief SCALAR_CLIPPING_MIN \n DESCRIPTION: Minimum value for scalar clipping \ingroup Config*/ + addDoubleListOption("SCALAR_CLIPPING_MIN", nScalar_Clipping_Min, Scalar_Clipping_Min); + + ffd_bounds[0] = -1e99; + ffd_bounds[1] = -1e99; + ffd_bounds[2] = -1e99; + ffd_bounds[3] = +1e99; + ffd_bounds[4] = +1e99; + ffd_bounds[5] = +1e99; + addDoubleArrayOption("FFD_BOUNDS", 6, ffd_bounds); + + /*!\brief FLAME_OFFSET \n DESCRIPTION: Offset for flame initialization using the flamelet model \ingroup Config*/ + flame_offset[0] = 0.0; + flame_offset[1] = 0.0; + flame_offset[2] = 0.0; + addDoubleArrayOption("FLAME_OFFSET", 3,flame_offset); + + /*!\brief FLAME_THICKNESS \n DESCRIPTION: Thickness for flame initialization using the flamelet model \ingroup Config*/ + addDoubleOption("FLAME_THICKNESS", flame_thickness, 0.5e-3); + + /*!\brief FLAME_NORMAL \n DESCRIPTION: Normal for flame initialization using the flamelet model \ingroup Config*/ + flame_normal[0] = 1.0; + flame_normal[1] = 0.0; + flame_normal[2] = 0.0; + addDoubleArrayOption("FLAME_NORMAL", 3, flame_normal); + + addDoubleOption("BURNT_THICKNESS", burnt_thickness, 1); + /*!\brief INC_INLET_DAMPING \n DESCRIPTION: Damping factor applied to the iterative updates to the velocity at a pressure inlet in incompressible flow (0.1 by default). \ingroup Config*/ addDoubleOption("INC_INLET_DAMPING", Inc_Inlet_Damping, 0.1); /*!\brief INC_OUTLET_DAMPING \n DESCRIPTION: Damping factor applied to the iterative updates to the pressure at a mass flow outlet in incompressible flow (0.1 by default). \ingroup Config*/ @@ -1448,7 +1522,9 @@ void CConfig::SetConfig_Options() { flow_direction_y, flow_direction_z, ... ) where flow_direction is a unit vector. \ingroup Config*/ addInletOption("MARKER_INLET", nMarker_Inlet, Marker_Inlet, Inlet_Ttotal, Inlet_Ptotal, Inlet_FlowDir); - + /*!\brief MARKER_Inlet_Scalar \n DESCRIPTION: Inlet Scalar boundary marker(s) with the following format + Inlet Scalar: (inlet_marker, progress variable, enthalpy, CO, NOx) */ + addInletScalarOption("MARKER_INLET_SCALAR",nMarker_Inlet_Scalar, Marker_Inlet_Scalar, Inlet_ScalarVal); /*!\brief MARKER_RIEMANN \n DESCRIPTION: Riemann boundary marker(s) with the following formats, a unit vector. * \n OPTIONS: See \link Riemann_Map \endlink. The variables indicated by the option and the flow direction unit vector must be specified. \ingroup Config*/ addRiemannOption("MARKER_RIEMANN", nMarker_Riemann, Marker_Riemann, Kind_Data_Riemann, Riemann_Map, Riemann_Var1, Riemann_Var2, Riemann_FlowDir); @@ -1638,6 +1714,8 @@ void CConfig::SetConfig_Options() { addDoubleOption("CFL_REDUCTION_TURB", CFLRedCoeff_Turb, 1.0); /* DESCRIPTION: Reduction factor of the CFL coefficient in the turbulent adjoint problem */ addDoubleOption("CFL_REDUCTION_ADJTURB", CFLRedCoeff_AdjTurb, 1.0); + /* DESCRIPTION: Reduction factor of the CFL coefficient in the scalar transport problem */ + addDoubleOption("CFL_REDUCTION_SCALAR", CFLRedCoeff_Scalar, 1.0); /* DESCRIPTION: External iteration offset due to restart */ addUnsignedLongOption("EXT_ITER_OFFSET", ExtIter_OffSet, 0); // these options share nRKStep as their size, which is not a good idea in general @@ -1668,6 +1746,8 @@ void CConfig::SetConfig_Options() { /* DESCRIPTION: Time discretization */ addEnumOption("TIME_DISCRE_ADJFLOW", Kind_TimeIntScheme_AdjFlow, Time_Int_Map, EULER_IMPLICIT); /* DESCRIPTION: Time discretization */ + addEnumOption("TIME_DISCRE_SCALAR", Kind_TimeIntScheme_Scalar, Time_Int_Map, EULER_IMPLICIT); + /* DESCRIPTION: Time discretization */ addEnumOption("TIME_DISCRE_TURB", Kind_TimeIntScheme_Turb, Time_Int_Map, EULER_IMPLICIT); /* DESCRIPTION: Time discretization */ addEnumOption("TIME_DISCRE_ADJTURB", Kind_TimeIntScheme_AdjTurb, Time_Int_Map, EULER_IMPLICIT); @@ -1703,6 +1783,10 @@ void CConfig::SetConfig_Options() { addUnsignedLongOption("LINEAR_SOLVER_PREC_THREADS", Linear_Solver_Prec_Threads, 0); /* DESCRIPTION: Relaxation factor for updates of adjoint variables. */ addDoubleOption("RELAXATION_FACTOR_ADJOINT", Relaxation_Factor_Adjoint, 1.0); + /* DESCRIPTION: Relaxation of the scalar transport equations solver for the implicit formulation */ + addDoubleOption("RELAXATION_FACTOR_SCALAR", Relaxation_Factor_Scalar, 0.9); + /* DESCRIPTION: Relaxation of the adjoint flow equations solver for the implicit formulation */ + addDoubleOption("RELAXATION_FACTOR_ADJFLOW", Relaxation_Factor_AdjFlow, 1.0); /* DESCRIPTION: Relaxation of the CHT coupling */ addDoubleOption("RELAXATION_FACTOR_CHT", Relaxation_Factor_CHT, 1.0); /* DESCRIPTION: Roe coefficient */ @@ -1849,6 +1933,15 @@ void CConfig::SetConfig_Options() { * \n DESCRIPTION: Convective numerical method \ingroup Config*/ addConvectOption("CONV_NUM_METHOD_TURB", Kind_ConvNumScheme_Turb, Kind_Centered_Turb, Kind_Upwind_Turb); + /*!\brief MUSCL_FLOW \n DESCRIPTION: Check if the MUSCL scheme should be used \ingroup Config*/ + addBoolOption("MUSCL_SCALAR", MUSCL_Scalar, false); + /*!\brief SLOPE_LIMITER_SCALAR + * \n DESCRIPTION: Slope limiter \n OPTIONS: See \link Limiter_Map \endlink \n DEFAULT VENKATAKRISHNAN \ingroup Config*/ + addEnumOption("SLOPE_LIMITER_SCALAR", Kind_SlopeLimit_Scalar, Limiter_Map, VENKATAKRISHNAN); + /*!\brief CONV_NUM_METHOD_SCALAR + * \n DESCRIPTION: Convective numerical method \ingroup Config*/ + addConvectOption("CONV_NUM_METHOD_SCALAR", Kind_ConvNumScheme_Scalar, Kind_Centered_Scalar, Kind_Upwind_Scalar); + /*!\brief MUSCL_FLOW \n DESCRIPTION: Check if the MUSCL scheme should be used \ingroup Config*/ addBoolOption("MUSCL_ADJTURB", MUSCL_AdjTurb, false); /*!\brief SLOPE_LIMITER_ADJTURB @@ -1969,6 +2062,9 @@ void CConfig::SetConfig_Options() { /* DESCRIPTION: Determine if we need to allocate memory to store the multizone residual. \n DEFAULT: true (temporarily) */ addBoolOption("MULTIZONE_RESIDUAL", Multizone_Residual, false); + /*!\brief File name of the look up table.*/ + addStringOption("FILENAME_LUT", file_name_lut, string("LUT")); + /*!\brief CONV_FILENAME \n DESCRIPTION: Output file convergence history (w/o extension) \n DEFAULT: history \ingroup Config*/ addStringOption("CONV_FILENAME", Conv_FileName, string("history")); /*!\brief BREAKDOWN_FILENAME \n DESCRIPTION: Output file forces breakdown \ingroup Config*/ @@ -2735,6 +2831,9 @@ void CConfig::SetConfig_Options() { /* DESCRIPTION: Type of output printed to the volume solution file */ addStringListOption("VOLUME_OUTPUT", nVolumeOutput, VolumeOutput); + /* DESCRIPTION: Names of the passive lookup variables for combustions */ + addStringListOption("LOOKUP_NAMES", n_lookups, table_lookup_names); + /* DESCRIPTION: History writing frequency (INNER_ITER) */ addUnsignedLongOption("HISTORY_WRT_FREQ_INNER", HistoryWrtFreq[2], 1); /* DESCRIPTION: History writing frequency (OUTER_ITER) */ @@ -3211,6 +3310,7 @@ void CConfig::SetnZone(){ } + void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_izone, unsigned short val_nDim) { unsigned short iCFL, iMarker; @@ -3218,12 +3318,20 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i (Kind_FluidModel == IDEAL_GAS) || (Kind_FluidModel == INC_IDEAL_GAS) || (Kind_FluidModel == INC_IDEAL_GAS_POLY) || - (Kind_FluidModel == CONSTANT_DENSITY)); + (Kind_FluidModel == CONSTANT_DENSITY) || + (Kind_FluidModel == FLAMELET_FLUID_MODEL)); bool noneq_gas = ((Kind_FluidModel == MUTATIONPP) || (Kind_FluidModel == SU2_NONEQ)); bool standard_air = ((Kind_FluidModel == STANDARD_AIR)); bool nemo = GetNEMOProblem(); + if (Kind_FluidModel == FLAMELET_FLUID_MODEL){ + Kind_Scalar_Model = PROGRESS_VARIABLE; + Kind_ViscosityModel = VISCOSITYMODEL::FLAMELET; + Kind_ConductivityModel = CONDUCTIVITYMODEL::FLAMELET; + Kind_DiffusivityModel = DIFFUSIVITYMODEL::FLAMELET; + } + if (nZone > 1){ Multizone_Problem = YES; } @@ -3473,6 +3581,8 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i case SURFACE_MOM_DISTORTION: case SURFACE_SECOND_OVER_UNIFORM: case SURFACE_PRESSURE_DROP: +// case SURFACE_CO: +// case SURFACE_NOX: case CUSTOM_OBJFUNC: if (Kind_ObjFunc[iObj] != Obj_0) { SU2_MPI::Error(string("The following objectives can only be used for the first surface in a multi-objective \n")+ @@ -4283,7 +4393,7 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i integration schemes other than ADER. */ if (Kind_TimeIntScheme_FEM_Flow != ADER_DG && nLevels_TimeAccurateLTS != 1) { - if (rank==MASTER_NODE) { + if (rank == MASTER_NODE) { cout << endl << "WARNING: " << nLevels_TimeAccurateLTS << " levels specified for time accurate local time stepping." << endl << "Time accurate local time stepping is only possible for ADER, hence this option is not used." << endl @@ -4596,7 +4706,7 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i } if (Kind_DensityModel == INC_DENSITYMODEL::VARIABLE) { - if (Kind_FluidModel != INC_IDEAL_GAS && Kind_FluidModel != INC_IDEAL_GAS_POLY) { + if (Kind_FluidModel != INC_IDEAL_GAS && Kind_FluidModel != INC_IDEAL_GAS_POLY && Kind_FluidModel != FLAMELET_FLUID_MODEL) { SU2_MPI::Error("Variable density incompressible solver limited to ideal gases.\n Check the fluid model options (use INC_IDEAL_GAS, INC_IDEAL_GAS_POLY).", CURRENT_FUNCTION); } } @@ -4609,8 +4719,8 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i if (Kind_Solver == INC_NAVIER_STOKES || Kind_Solver == INC_RANS) { if (Kind_ViscosityModel == VISCOSITYMODEL::SUTHERLAND) { - if ((Kind_FluidModel != INC_IDEAL_GAS) && (Kind_FluidModel != INC_IDEAL_GAS_POLY)) { - SU2_MPI::Error("Sutherland's law only valid for ideal gases in incompressible flows.\n Must use VISCOSITY_MODEL=CONSTANT_VISCOSITY and set viscosity with\n MU_CONSTANT, or use DENSITY_MODEL= VARIABLE with FLUID_MODEL= INC_IDEAL_GAS or INC_IDEAL_GAS_POLY for VISCOSITY_MODEL=SUTHERLAND.\n NOTE: FREESTREAM_VISCOSITY is no longer used for incompressible flows!", CURRENT_FUNCTION); + if ((Kind_FluidModel != INC_IDEAL_GAS) && (Kind_FluidModel != INC_IDEAL_GAS_POLY) && (Kind_FluidModel != FLAMELET_FLUID_MODEL)) { + SU2_MPI::Error("Sutherland's law only valid for ideal gases in incompressible flows.\n Must use VISCOSITY_MODEL=CONSTANT_VISCOSITY and set viscosity with\n MU_CONSTANT, or use DENSITY_MODEL= VARIABLE with FLUID_MODEL= INC_IDEAL_GAS or INC_IDEAL_GAS_POLY, or FLAMELET_FLUID_MODEL for VISCOSITY_MODEL=SUTHERLAND.\n NOTE: FREESTREAM_VISCOSITY is no longer used for incompressible flows!", CURRENT_FUNCTION); } } } @@ -4698,8 +4808,16 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i SU2_MPI::Error("Must list two markers for the pressure drop objective function.\n Expected format: MARKER_ANALYZE= (outlet_name, inlet_name).", CURRENT_FUNCTION); } } - - /*--- Check feassbility for Streamwise Periodic flow ---*/ + + /*--- Disable any scalar model until they are implemented. ---*/ + + if ((Kind_Scalar_Model != NO_SCALAR_MODEL) && + (Kind_Scalar_Model != PASSIVE_SCALAR) && + (Kind_Scalar_Model != PROGRESS_VARIABLE)) { + SU2_MPI::Error(string("Selected scalar model not yet implemented.") , CURRENT_FUNCTION); + } + + /*--- Check feasibility for Streamwise Periodic flow ---*/ if (Kind_Streamwise_Periodic != ENUM_STREAMWISE_PERIODIC::NONE) { if (Kind_Regime != ENUM_REGIME::INCOMPRESSIBLE) SU2_MPI::Error("Streamwise Periodic Flow currently only implemented for incompressible flow.", CURRENT_FUNCTION); @@ -5091,6 +5209,7 @@ void CConfig::SetMarkers(SU2_COMPONENT val_software) { iMarker_Smoluchowski_Maxwell, iMarker_Isothermal,iMarker_HeatFlux,iMarker_HeatTansfer, iMarker_EngineInflow, iMarker_EngineExhaust, iMarker_Damper, + //iMarker_Inlet_Scalar, nijso iMarker_Displacement, iMarker_Load, iMarker_FlowLoad, iMarker_Internal, iMarker_Monitoring, iMarker_Designing, iMarker_GeoEval, iMarker_Plotting, iMarker_Analyze, iMarker_DV, iMarker_Moving, iMarker_PyCustom, iMarker_Supersonic_Inlet, iMarker_Supersonic_Outlet, @@ -5175,24 +5294,30 @@ void CConfig::SetMarkers(SU2_COMPONENT val_software) { /*--- Allocate memory to store surface information (Analyze BC) ---*/ - Surface_MassFlow = new su2double[nMarker_Analyze] (); - Surface_Mach = new su2double[nMarker_Analyze] (); - Surface_Temperature = new su2double[nMarker_Analyze] (); - Surface_Pressure = new su2double[nMarker_Analyze] (); - Surface_Density = new su2double[nMarker_Analyze] (); - Surface_Enthalpy = new su2double[nMarker_Analyze] (); - Surface_NormalVelocity = new su2double[nMarker_Analyze] (); - Surface_Uniformity = new su2double[nMarker_Analyze] (); - Surface_SecondaryStrength = new su2double[nMarker_Analyze] (); - Surface_SecondOverUniform = new su2double[nMarker_Analyze] (); - Surface_MomentumDistortion = new su2double[nMarker_Analyze] (); - Surface_TotalTemperature = new su2double[nMarker_Analyze] (); - Surface_TotalPressure = new su2double[nMarker_Analyze] (); - Surface_PressureDrop = new su2double[nMarker_Analyze] (); - Surface_DC60 = new su2double[nMarker_Analyze] (); - Surface_IDC = new su2double[nMarker_Analyze] (); - Surface_IDC_Mach = new su2double[nMarker_Analyze] (); - Surface_IDR = new su2double[nMarker_Analyze] (); + Surface_MassFlow = new su2double [nMarker_Analyze] (); + Surface_Mach = new su2double [nMarker_Analyze] (); + Surface_Temperature = new su2double [nMarker_Analyze] (); + Surface_Pressure = new su2double [nMarker_Analyze] (); + Surface_Density = new su2double [nMarker_Analyze] (); + Surface_Enthalpy = new su2double [nMarker_Analyze] (); + Surface_NormalVelocity = new su2double [nMarker_Analyze] (); + Surface_Uniformity = new su2double [nMarker_Analyze] (); + Surface_SecondaryStrength = new su2double [nMarker_Analyze] (); + Surface_SecondOverUniform = new su2double [nMarker_Analyze] (); + Surface_MomentumDistortion = new su2double [nMarker_Analyze] (); + Surface_TotalTemperature = new su2double [nMarker_Analyze] (); + Surface_TotalPressure = new su2double [nMarker_Analyze] (); + Surface_PressureDrop = new su2double [nMarker_Analyze] (); + Surface_DC60 = new su2double [nMarker_Analyze] (); + Surface_IDC = new su2double [nMarker_Analyze] (); + Surface_IDC_Mach = new su2double [nMarker_Analyze] (); + Surface_IDR = new su2double [nMarker_Analyze] (); + Surface_CO = new su2double [nMarker_Analyze] (); + Surface_NOx = new su2double [nMarker_Analyze] (); + + //Surface_Scalar = new su2double*[nMarker_Analyze] (); + //for (int i_scalar=0; i_scalar < nMarker_Analyze; ++i_scalar) + // Surface_Scalar[i_scalar] = new su2double[nScalarNames] (); /*--- Populate the marker information in the config file (all domains) ---*/ @@ -5604,6 +5729,7 @@ void CConfig::SetOutput(SU2_COMPONENT val_software, unsigned short val_izone) { iMarker_ZoneInterface, iMarker_PyCustom, iMarker_Load_Dir, iMarker_Disp_Dir, iMarker_Load_Sine, iMarker_Clamped, iMarker_Moving, iMarker_Supersonic_Inlet, iMarker_Supersonic_Outlet, iMarker_ActDiskInlet, iMarker_Emissivity, + //iMarker_Inlet_Scalar, //nijso: not needed? iMarker_ActDiskOutlet, iMarker_MixingPlaneInterface; bool fea = ((Kind_Solver == FEM_ELASTICITY) || (Kind_Solver == DISC_ADJ_FEM)); @@ -6130,6 +6256,9 @@ void CConfig::SetOutput(SU2_COMPONENT val_software, unsigned short val_izone) { case TOPOL_DISCRETENESS: cout << "Topology discreteness objective function." << endl; break; case TOPOL_COMPLIANCE: cout << "Topology compliance objective function." << endl; break; case STRESS_PENALTY: cout << "Stress penalty objective function." << endl; break; + case SURFACE_CO: cout << "Y_CO objective function." << endl; break; + case SURFACE_NOX: cout << "Y_NOx objective function." << endl; break; + case SURFACE_TEMP: cout << "Temperature objective function." << endl; break; } } else { @@ -7581,6 +7710,7 @@ CConfig::~CConfig(void) { delete[] Marker_CHTInterface; delete [] Marker_PyCustom; delete[] Marker_All_SendRecv; + delete[] Marker_Inlet_Scalar; delete[] Kind_Inc_Inlet; delete[] Kind_Inc_Outlet; @@ -7719,6 +7849,9 @@ CConfig::~CConfig(void) { delete[] Surface_IDC; delete[] Surface_IDC_Mach; delete[] Surface_IDR; + delete[] Surface_CO; + delete[] Surface_NOx; + //delete[] Surface_Scalar; delete[] Inlet_Ttotal; delete[] Inlet_Ptotal; @@ -7889,6 +8022,9 @@ CConfig::~CConfig(void) { delete [] VolumeOutputFiles; delete [] ConvField; + delete [] Scalar_Clipping_Min; + delete [] Scalar_Clipping_Max; + delete [] Scalar_Init; } @@ -8067,6 +8203,9 @@ string CConfig::GetObjFunc_Extension(string val_filename) const { case TOPOL_DISCRETENESS: AdjExt = "_topdisc"; break; case TOPOL_COMPLIANCE: AdjExt = "_topcomp"; break; case STRESS_PENALTY: AdjExt = "_stress"; break; + case SURFACE_CO: AdjExt = "_yco"; break; + case SURFACE_NOX: AdjExt = "_ynox"; break; + case SURFACE_TEMP: AdjExt = "_avgtemp"; break; } } else{ @@ -8088,10 +8227,12 @@ unsigned short CConfig::GetContainerPosition(unsigned short val_eqsystem) { case RUNTIME_FLOW_SYS: return FLOW_SOL; case RUNTIME_TURB_SYS: return TURB_SOL; case RUNTIME_TRANS_SYS: return TRANS_SOL; + case RUNTIME_SCALAR_SYS: return SCALAR_SOL; case RUNTIME_HEAT_SYS: return HEAT_SOL; case RUNTIME_FEA_SYS: return FEA_SOL; case RUNTIME_ADJFLOW_SYS: return ADJFLOW_SOL; case RUNTIME_ADJTURB_SYS: return ADJTURB_SOL; + case RUNTIME_ADJSCALAR_SYS: return ADJSCALAR_SOL; //nijso: this was commented? TODO case RUNTIME_ADJFEA_SYS: return ADJFEA_SOL; case RUNTIME_RADIATION_SYS: return RAD_SOL; case RUNTIME_MULTIGRID_SYS: return 0; @@ -8131,6 +8272,12 @@ void CConfig::SetGlobalParam(unsigned short val_solver, MUSCL_Flow, NONE); SetKind_TimeIntScheme(Kind_TimeIntScheme_Flow); } + if (val_system == RUNTIME_SCALAR_SYS) { + SetKind_ConvNumScheme(Kind_ConvNumScheme_Scalar, Kind_Centered_Scalar, + Kind_Upwind_Scalar, Kind_SlopeLimit_Scalar, + MUSCL_Scalar, NONE); + SetKind_TimeIntScheme(Kind_TimeIntScheme_Scalar); + } break; case NAVIER_STOKES: case INC_NAVIER_STOKES: case NEMO_NAVIER_STOKES: if (val_system == RUNTIME_FLOW_SYS) { @@ -8139,6 +8286,12 @@ void CConfig::SetGlobalParam(unsigned short val_solver, MUSCL_Flow, NONE); SetKind_TimeIntScheme(Kind_TimeIntScheme_Flow); } + if (val_system == RUNTIME_SCALAR_SYS) { + SetKind_ConvNumScheme(Kind_ConvNumScheme_Scalar, Kind_Centered_Scalar, + Kind_Upwind_Scalar, Kind_SlopeLimit_Scalar, + MUSCL_Scalar, NONE); + SetKind_TimeIntScheme(Kind_TimeIntScheme_Scalar); + } if (val_system == RUNTIME_HEAT_SYS) { SetKind_ConvNumScheme(Kind_ConvNumScheme_Heat, NONE, NONE, NONE, NONE, NONE); SetKind_TimeIntScheme(Kind_TimeIntScheme_Heat); @@ -8163,6 +8316,12 @@ void CConfig::SetGlobalParam(unsigned short val_solver, MUSCL_Turb, NONE); SetKind_TimeIntScheme(Kind_TimeIntScheme_Turb); } + if (val_system == RUNTIME_SCALAR_SYS) { + SetKind_ConvNumScheme(Kind_ConvNumScheme_Scalar, Kind_Centered_Scalar, + Kind_Upwind_Scalar, Kind_SlopeLimit_Scalar, + MUSCL_Scalar, NONE); + SetKind_TimeIntScheme(Kind_TimeIntScheme_Scalar); + } if (val_system == RUNTIME_HEAT_SYS) { SetKind_ConvNumScheme(Kind_ConvNumScheme_Heat, NONE, NONE, NONE, NONE, NONE); SetKind_TimeIntScheme(Kind_TimeIntScheme_Heat); @@ -8580,6 +8739,13 @@ su2double CConfig::GetInlet_Ttotal(string val_marker) const { return Inlet_Ttotal[iMarker_Inlet]; } +su2double* CConfig::GetInlet_ScalarVal(string val_marker) const { + unsigned short iMarker_Inlet_Scalar; + for (iMarker_Inlet_Scalar = 0; iMarker_Inlet_Scalar < nMarker_Inlet_Scalar; iMarker_Inlet_Scalar++) + if (Marker_Inlet_Scalar[iMarker_Inlet_Scalar] == val_marker) break; + return Inlet_ScalarVal[iMarker_Inlet_Scalar]; +} + su2double CConfig::GetInlet_Ptotal(string val_marker) const { unsigned short iMarker_Inlet; for (iMarker_Inlet = 0; iMarker_Inlet < nMarker_Inlet; iMarker_Inlet++) diff --git a/Common/src/grid_movement/CSurfaceMovement.cpp b/Common/src/grid_movement/CSurfaceMovement.cpp index 1c8cfa0dcdd4..be3efef7b099 100644 --- a/Common/src/grid_movement/CSurfaceMovement.cpp +++ b/Common/src/grid_movement/CSurfaceMovement.cpp @@ -322,6 +322,13 @@ vector > CSurfaceMovement::SetSurface_Deformation(CGeometry *g } + /*--- Check if new coordinates exceed geometrical constraint ---*/ + + // FIXME Dan: This is still buggy! + //CheckGeomConstr(geometry, config, FFDBox[iFFDBox], iFFDBox); + + //MaxDiff = SetCartesianCoord(geometry, config, FFDBox[iFFDBox], iFFDBox, false); + /*--- Set total deformation values in config ---*/ if (config->GetKind_SU2() == SU2_COMPONENT::SU2_DEF) { @@ -683,6 +690,58 @@ vector > CSurfaceMovement::SetSurface_Deformation(CGeometry *g } +void CSurfaceMovement::CheckGeomConstr(CGeometry *geometry, CConfig *config, CFreeFormDefBox *FFDBox, unsigned short iFFDBox){ + + su2double *next_coords_def, *next_coords_orig; + su2double new_coords[2]; + su2double *ffd_bounds = config->GetFFDBounds(); + su2double ffd_bounds_x[2] = {ffd_bounds[0], ffd_bounds[3]}; + su2double ffd_bounds_y[2] = {ffd_bounds[1], ffd_bounds[4]}; + su2double dx, dy, dx_proj, dy_proj; + + for (int i_dv = 0; i_dv < FFDBox->lOrder; ++i_dv) { + for (int j_dv = 0; j_dv < FFDBox->mOrder; ++j_dv) { + for (int k_dv = 0; k_dv < FFDBox->nOrder; ++k_dv) { + + next_coords_def = FFDBox->Coord_Control_Points[i_dv][j_dv][k_dv]; + next_coords_orig = FFDBox->Coord_Control_Points_Copy[i_dv][j_dv][k_dv]; + + dx = dx_proj = next_coords_def[0] - next_coords_orig[0]; + dy = dy_proj = next_coords_def[1] - next_coords_orig[1]; + + /*--- if out of x bounds but within y bounds ---*/ + if ( ((next_coords_def[0] < ffd_bounds_x[0]) || (next_coords_def[0] > ffd_bounds_x[1])) && + ((next_coords_def[1] >= ffd_bounds_y[0]) && (next_coords_def[1] <= ffd_bounds_y[1])) ){ + } + + /*--- if out of y+ bounds but within x bounds ---*/ + if ( (next_coords_def[1] > ffd_bounds_y[1]) && + ((next_coords_def[0] >= ffd_bounds_x[0]) && (next_coords_def[0] <= ffd_bounds_x[1])) ){ + + dy_proj = ffd_bounds_y[1] - next_coords_orig[1]; + dx_proj = dx/dy * dy_proj; + + } + + /*--- if out of y+ bounds but within x bounds ---*/ + if ( (next_coords_def[1] < ffd_bounds_y[0]) && + ((next_coords_def[0] >= ffd_bounds_x[0]) && (next_coords_def[0] <= ffd_bounds_x[1])) ){ + + dy_proj = ffd_bounds_y[0] - next_coords_orig[1]; + dx_proj = dx/dy * dy_proj; + + } + + new_coords[0] = next_coords_orig[0] + dx_proj; + new_coords[1] = next_coords_orig[1] + dy_proj; + + FFDBox->SetCoordControlPoints(new_coords, i_dv, j_dv, k_dv); + + } + } + } +} + void CSurfaceMovement::SetSurface_Derivative(CGeometry *geometry, CConfig *config) { su2double DV_Value = 0.0; diff --git a/SU2_CFD/include/fluid/CConstantDensity.hpp b/SU2_CFD/include/fluid/CConstantDensity.hpp index e0594e1360c0..e9a278e9ba40 100644 --- a/SU2_CFD/include/fluid/CConstantDensity.hpp +++ b/SU2_CFD/include/fluid/CConstantDensity.hpp @@ -49,12 +49,13 @@ class CConstantDensity final : public CFluidModel { * \brief Set the Dimensionless State using Temperature. * \param[in] t - Temperature value at the point. */ - void SetTDState_T(su2double t) override { + unsigned long SetTDState_T(su2double t, su2double *val_scalars = nullptr) override { /* Density is constant and thermodynamic pressure is not required for incompressible, constant density flows, but the energy equation can still be computed as a decoupled equation. Hence, we update the value. Note Cp = Cv, (gamma = 1).*/ Temperature = t; + return 0; } }; diff --git a/SU2_CFD/include/fluid/CConstantDiffusivity.hpp b/SU2_CFD/include/fluid/CConstantDiffusivity.hpp new file mode 100644 index 000000000000..221b284771eb --- /dev/null +++ b/SU2_CFD/include/fluid/CConstantDiffusivity.hpp @@ -0,0 +1,57 @@ +/*! + * \file CConstantDiffusivity.hpp + * \brief Defines constant mass diffusivity. + * \author S. Vitale, M. Pini, G. Gori, A. Guardone, P. Colonna, T. Economon + * \version 7.0.6 "Blackbird" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2020, SU2 Contributors (cf. AUTHORS.md) + * + * SU2 is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * SU2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with SU2. If not, see . + */ + +#pragma once + +#include "CDiffusivityModel.hpp" + +/*! + * \class CConstantDiffusivity + * \brief Defines a constant mass diffusivity model for species equations. + * \author T. Economon + */ +class CConstantDiffusivity final : public CDiffusivityModel { +public: + /*! + * \brief Constructor of the class. + */ + CConstantDiffusivity(su2double diff_const) : diff_(diff_const){} + + su2double GetDiffusivity() const override {return diff_;} + + /*! + * \brief Set diffusivity. + */ + void SetDiffusivity(su2double T, + su2double rho, + su2double mu_lam, + su2double mu_turb, + su2double cp) override { } + + private: + su2double diff_{0.0}; +}; diff --git a/SU2_CFD/include/fluid/CConstantSchmidt.hpp b/SU2_CFD/include/fluid/CConstantSchmidt.hpp new file mode 100644 index 000000000000..fc5b07d7ad2d --- /dev/null +++ b/SU2_CFD/include/fluid/CConstantSchmidt.hpp @@ -0,0 +1,72 @@ +/*! + * \file CConstantSchmidt.hpp + * \brief Defines a mass diffusivity model with constant Schmidt numbers. + * \author S. Vitale, M. Pini, G. Gori, A. Guardone, P. Colonna, T. Economon + * \version 7.0.6 "Blackbird" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2020, SU2 Contributors (cf. AUTHORS.md) + * + * SU2 is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * SU2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with SU2. If not, see . + */ + +#pragma once + +#include "CDiffusivityModel.hpp" + +/*! + * \class CDiffusivityModel + * \brief Defines a mass diffusivity model for species equations based on Schmidt number. + * \author T. Economon + */ +class CConstantSchmidt final: public CDiffusivityModel { + +protected: + //su2double Schmidt_const; /*!< \brief Constant Schmidt number. */ + +public: + + /*! + * \brief Constructor of the class. + */ + CConstantSchmidt() {} + + /*! + * \brief Constructor of the class. + */ + //CConstantSchmidt(su2double sc_const) : CDiffusivityModel() { Schmidt_const = sc_const; } + CConstantSchmidt(su2double sc_lam) : sc_lam_(sc_lam){} + + su2double GetDiffusivity() const override{return diff_;} + + /*! + * \brief Destructor of the class. + */ + ~CConstantSchmidt() {} + + /*! + * \brief Set diffusivity. + */ + void SetDiffusivity(su2double T, su2double rho, su2double mu_lam, su2double mu_turb, su2double cp) override { + diff_ = mu_lam / (rho*sc_lam_); + } + + private: + su2double diff_{0.0}; + su2double sc_lam_{0.0}; +}; diff --git a/SU2_CFD/include/fluid/CConstantSchmidtRANS.hpp b/SU2_CFD/include/fluid/CConstantSchmidtRANS.hpp new file mode 100644 index 000000000000..1383fd61ec8e --- /dev/null +++ b/SU2_CFD/include/fluid/CConstantSchmidtRANS.hpp @@ -0,0 +1,73 @@ +/*! + * \file CConstantSchmidtRANS.hpp + * \brief Defines a mass diffusivity model with constant Schmidt numbers for RANS. + * \author S. Vitale, M. Pini, G. Gori, A. Guardone, P. Colonna, T. Economon + * \version 7.0.6 "Blackbird" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2020, SU2 Contributors (cf. AUTHORS.md) + * + * SU2 is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * SU2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with SU2. If not, see . + */ + +#pragma once + +#include "CDiffusivityModel.hpp" + +/*! + * \class CDiffusivityModelRANS + * \brief Defines a mass diffusivity model for species equations based on Schmidt numbers for RANS. + * \author T. Economon + */ +class CConstantSchmidtRANS : public CDiffusivityModel { + +protected: + //su2double Schmidt_Lam; /*!< \brief Laminar Schmidt number. */ + //su2double Schmidt_Turb; /*!< \brief Laminar Schmidt number. */ + +public: + + /*! + * \brief Constructor of the class. + */ + //CConstantSchmidtRANS() {} + + /*! + * \brief Constructor of the class. + */ + CConstantSchmidtRANS(su2double diff_lam_const, su2double sc_turb) : diff_lam_const_(diff_lam_const),sc_turb_(sc_turb){} + + su2double GetDiffusivity() const override {return diff_;} + + /*! + * \brief Set mass diffusivity. + */ + void SetDiffusivity(su2double t, su2double rho, su2double mu_lam, su2double mu_turb, su2double cp) override { + diff_ = diff_lam_const_ + mu_turb/(rho*sc_turb_); + } + + /*! + * \brief Destructor of the class. + */ + //~CConstantSchmidtRANS() {} + + private: + su2double diff_{0.0}; + su2double diff_lam_const_{0.0}; + su2double sc_turb_{0.0}; +}; diff --git a/SU2_CFD/include/fluid/CDiffusivityModel.hpp b/SU2_CFD/include/fluid/CDiffusivityModel.hpp new file mode 100644 index 000000000000..d1e1523874a3 --- /dev/null +++ b/SU2_CFD/include/fluid/CDiffusivityModel.hpp @@ -0,0 +1,51 @@ +/*! + * \file CDiffusivityModel.hpp + * \brief Interface class for defining mass diffusivity models. + * \author S. Vitale, M. Pini, G. Gori, A. Guardone, P. Colonna, T. Economon + * \version 7.0.6 "Blackbird" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2020, SU2 Contributors (cf. AUTHORS.md) + * + * SU2 is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * SU2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with SU2. If not, see . + */ + +#pragma once + +#include "../../../Common/include/basic_types/datatype_structure.hpp" + +/*! + * \class CDiffusivityModel + * \brief Defines a mass diffusivity model for species equations. + * \author T. Economon + */ +class CDiffusivityModel { +public: + CDiffusivityModel() = default; + CDiffusivityModel(const CDiffusivityModel&) = delete; + void operator=(const CDiffusivityModel&) = delete; + virtual ~CDiffusivityModel() {} + + + virtual su2double GetDiffusivity(void) const = 0; /* new added virtual*/ + +/*! + * \brief Set mass diffusivity + */ + virtual void SetDiffusivity(su2double T, su2double rho, su2double mu_lam, su2double mu_turb, su2double cp) = 0; +}; diff --git a/SU2_CFD/include/fluid/CFluidFlamelet.hpp b/SU2_CFD/include/fluid/CFluidFlamelet.hpp new file mode 100644 index 000000000000..51511227e96b --- /dev/null +++ b/SU2_CFD/include/fluid/CFluidFlamelet.hpp @@ -0,0 +1,75 @@ +#pragma once + +#include "../include/numerics/CLookUpTable.hpp" +#include "../include/fluid/CFluidModel.hpp" + + +class CFluidFlamelet : public CFluidModel { + +protected: + + int rank; + + unsigned short n_scalars; + unsigned short n_lookups; + unsigned short n_table_sources; + + vector table_scalar_names; /*!< \brief vector to store names of scalar variables. */ + vector table_source_names; /*!< \brief vector to store names of scalar source variables. */ + vector table_lookup_names; /*!< \brief vector to store names of look up variables. */ + + su2double mass_diffusivity; + su2double source_energy; + su2double dDensitydPV; + su2double dSourcePVdPV; + su2double dDensitydEnth; + + vector source_scalar; + vector lookup_scalar; + + CLookUpTable *look_up_table; + + public: + CFluidFlamelet(CConfig *config, su2double value_pressure_operating); + + ~CFluidFlamelet(); + + unsigned long SetTDState_T(su2double val_temperature, su2double *val_scalars); + + unsigned long SetScalarSources(su2double *val_scalars); + + unsigned long SetScalarLookups(su2double *val_scalars); + + void SetTDState_prog_enth(su2double val_prog, su2double val_enth); + + unsigned long GetEnthFromTemp(su2double *enthalpy, su2double val_prog, su2double val_temp); + + inline CLookUpTable* GetLookUpTable() {return look_up_table; } + + inline su2double GetSourceEnergy() { return source_energy; } + + inline su2double GetMassDiffusivity() { return mass_diffusivity; } + + inline su2double GetThermalConductivity() { return Kt; } + + inline su2double GetLaminarViscosity() { return Mu; } + + inline pair GetTableLimitsEnth() { return look_up_table->GetTableLimitsEnth(); } + + inline pair GetTableLimitsProg() { return look_up_table->GetTableLimitsProg(); } + + inline su2double GetdDensitydPV() { return dDensitydPV; } + + inline su2double GetdSourcePVdPV() { return dSourcePVdPV; } + + inline su2double GetdDensitydEnth() { return dDensitydEnth; } + + inline su2double GetScalarSources(int i_scalar) { return source_scalar.at(i_scalar); } + + inline su2double *GetScalarSources(){ return &source_scalar[0]; } + + inline unsigned short GetNScalars() { return n_scalars; } + + inline su2double GetScalarLookups(int i_scalar) { return lookup_scalar.at(i_scalar); } + +}; diff --git a/SU2_CFD/include/fluid/CFluidModel.hpp b/SU2_CFD/include/fluid/CFluidModel.hpp index 307ecc18bf7b..f440eeec28ae 100644 --- a/SU2_CFD/include/fluid/CFluidModel.hpp +++ b/SU2_CFD/include/fluid/CFluidModel.hpp @@ -34,6 +34,8 @@ #include "../../../Common/include/basic_types/datatype_structure.hpp" #include "CConductivityModel.hpp" #include "CViscosityModel.hpp" +#include "CDiffusivityModel.hpp" +#include "../numerics/CLookUpTable.hpp" using namespace std; @@ -67,9 +69,13 @@ class CFluidModel { su2double Kt{0.0}; /*!< \brief Thermal conductivity. */ su2double dktdrho_T{0.0}; /*!< \brief Partial derivative of conductivity w.r.t. density. */ su2double dktdT_rho{0.0}; /*!< \brief Partial derivative of conductivity w.r.t. temperature. */ + su2double mass_diffusivity{0.0}; - unique_ptr LaminarViscosity; /*!< \brief Laminar Viscosity Model */ - unique_ptr ThermalConductivity; /*!< \brief Thermal Conductivity Model */ + unique_ptr LaminarViscosity; /*!< \brief Laminar Viscosity Model */ + unique_ptr ThermalConductivity; /*!< \brief Thermal Conductivity Model */ + unique_ptr MassDiffusivity; /*!< \brief Mass Diffusivity Model */ + + CLookUpTable* look_up_table; public: virtual ~CFluidModel() {} @@ -119,10 +125,45 @@ class CFluidModel { */ su2double GetCv() const { return Cv; } + /*! + * \brief Get the source term of the transported scalar + */ + virtual inline su2double* GetScalarSources(){ return nullptr; } + + /*! + * \brief Get the source term of the transported scalar + * \param[in] val_ix - Index of the scalar. + */ + virtual inline su2double GetScalarSources(int val_ix){ return 37; } + + /*! + * \brief Get the number of transported scalars + */ + virtual inline unsigned short GetNScalars() {return 73; } + + /*! + * \brief Get the looked up scalar field for combustion + */ + virtual inline su2double GetScalarLookups(int){ return 37; } + + + virtual CLookUpTable* GetLookUpTable() {return look_up_table; } + + virtual inline unsigned long GetEnthFromTemp(su2double *enthalpy, + su2double val_prog, + su2double val_temp) { return 73; } + + virtual inline pair GetTableLimitsEnth() { return make_pair(73,37); } + virtual inline pair GetTableLimitsProg() { return make_pair(73,37); } + + virtual inline su2double GetdDensitydPV() { return 0.0; } + virtual inline su2double GetdSourcePVdPV() { return 0.0; } + virtual inline su2double GetdDensitydEnth() { return 0.0; } + /*! * \brief Get fluid dynamic viscosity. */ - su2double GetLaminarViscosity() { + virtual inline su2double GetLaminarViscosity() { LaminarViscosity->SetViscosity(Temperature, Density); Mu = LaminarViscosity->GetViscosity(); LaminarViscosity->SetDerViscosity(Temperature, Density); @@ -134,8 +175,7 @@ class CFluidModel { /*! * \brief Get fluid thermal conductivity. */ - - su2double GetThermalConductivity() { + virtual inline su2double GetThermalConductivity() { ThermalConductivity->SetConductivity(Temperature, Density, Mu, Mu_Turb, Cp); Kt = ThermalConductivity->GetConductivity(); ThermalConductivity->SetDerConductivity(Temperature, Density, dmudrho_T, dmudT_rho, Cp); @@ -144,6 +184,18 @@ class CFluidModel { return Kt; } +/*! + * \brief Get fluid mass diffusivity. + */ + virtual inline su2double GetMassDiffusivity() { + MassDiffusivity->SetDiffusivity(Temperature, Density, Mu, Mu_Turb, Cp); + mass_diffusivity = MassDiffusivity->GetDiffusivity(); + //ThermalConductivity->SetDerConductivity(Temperature, Density, dmudrho_T, dmudT_rho, Cp); + //dktdrho_T = ThermalConductivity->Getdktdrho_T(); + //dktdT_rho = ThermalConductivity->GetdktdT_rho(); + return mass_diffusivity; + } + /*! * \brief Get fluid pressure partial derivative. */ @@ -219,6 +271,24 @@ class CFluidModel { */ void SetThermalConductivityModel(const CConfig* config); + /*! + * \brief Set mass diffusivity model. + */ + void SetMassDiffusivityModel(const CConfig* config); + + /*! + * \brief Set the state needed for the mass diffusivity model. + */ + /* nijso: why do we need this? put in constructor or delete */ + void SetDiffusivityState(su2double val_temperature, su2double val_Density, + su2double val_Mu, su2double val_Mu_Turb, su2double val_Cp) { + Temperature = val_temperature; + Density = val_Density; + Mu = val_Mu; + Mu_Turb = val_Mu_Turb; + Cp = val_Cp; +} + /*! * \brief virtual member that would be different for each gas model implemented * \param[in] InputSpec - Input pair for FLP calls ("e, rho"). @@ -291,7 +361,11 @@ class CFluidModel { * \brief Virtual member. * \param[in] T - Temperature value at the point. */ - virtual void SetTDState_T(su2double val_Temperature) {} + virtual unsigned long SetTDState_T(su2double val_Temperature, su2double *val_scalars = nullptr) {return 0;} + + virtual unsigned long SetScalarSources(su2double *val_scalars) {return 0;} + + virtual unsigned long SetScalarLookups(su2double *val_scalars) {return 0;} /*! * \brief Set fluid eddy viscosity provided by a turbulence model needed for computing effective thermal conductivity. diff --git a/SU2_CFD/include/fluid/CIncIdealGas.hpp b/SU2_CFD/include/fluid/CIncIdealGas.hpp index dbd070df1d55..20367f4be87c 100644 --- a/SU2_CFD/include/fluid/CIncIdealGas.hpp +++ b/SU2_CFD/include/fluid/CIncIdealGas.hpp @@ -54,10 +54,11 @@ class CIncIdealGas final : public CFluidModel { * \brief Set the Dimensionless State using Temperature. * \param[in] t - Temperature value at the point. */ - void SetTDState_T(su2double t) override { + unsigned long SetTDState_T(su2double t, su2double *val_scalars = nullptr) override { /*--- The EoS only depends upon temperature. ---*/ Temperature = t; Density = Pressure / (Temperature * Gas_Constant); + return 0; } private: diff --git a/SU2_CFD/include/fluid/CIncIdealGasPolynomial.hpp b/SU2_CFD/include/fluid/CIncIdealGasPolynomial.hpp index c9853bd18d41..76607ce79186 100644 --- a/SU2_CFD/include/fluid/CIncIdealGasPolynomial.hpp +++ b/SU2_CFD/include/fluid/CIncIdealGasPolynomial.hpp @@ -67,7 +67,7 @@ class CIncIdealGasPolynomial final : public CFluidModel { * \brief Set the Dimensionless State using Temperature. * \param[in] t - Temperature value at the point. */ - void SetTDState_T(su2double t) override { + unsigned long SetTDState_T(su2double t, su2double *val_scalars = nullptr) override { /* The EoS only depends upon temperature. */ Temperature = t; Density = Pressure / (Temperature * Gas_Constant); @@ -80,6 +80,7 @@ class CIncIdealGasPolynomial final : public CFluidModel { Cp += coeffs_[i] * t_i; } Cv = Cp / Gamma; + return 0; } private: diff --git a/SU2_CFD/include/gradients/computeGradientsLeastSquares.hpp b/SU2_CFD/include/gradients/computeGradientsLeastSquares.hpp index 466b16d3a95a..b65885b503f1 100644 --- a/SU2_CFD/include/gradients/computeGradientsLeastSquares.hpp +++ b/SU2_CFD/include/gradients/computeGradientsLeastSquares.hpp @@ -238,7 +238,7 @@ void computeGradientsLeastSquares(CSolver* solver, su2double weight = 1.0; if(weighted) weight = GeometryToolbox::SquaredNorm(nDim, dist_ij); - /*--- Sumations for entries of upper triangular matrix R. ---*/ + /*--- Summations for entries of upper triangular matrix R. ---*/ if (weight > 0.0) { diff --git a/SU2_CFD/include/iteration/CDiscAdjFluidIteration.hpp b/SU2_CFD/include/iteration/CDiscAdjFluidIteration.hpp index e82f068cfe2c..475b6fe80f3c 100644 --- a/SU2_CFD/include/iteration/CDiscAdjFluidIteration.hpp +++ b/SU2_CFD/include/iteration/CDiscAdjFluidIteration.hpp @@ -40,6 +40,7 @@ class CFluidIteration; class CDiscAdjFluidIteration final : public CIteration { private: const bool turbulent; /*!< \brief Stores the turbulent flag. */ + const bool scalar; /*! * \brief load unsteady solution for unsteady problems @@ -59,7 +60,8 @@ class CDiscAdjFluidIteration final : public CIteration { * \param[in] config - Definition of the particular problem. */ explicit CDiscAdjFluidIteration(const CConfig *config) : CIteration(config), - turbulent(config->GetKind_Solver() == DISC_ADJ_RANS || config->GetKind_Solver() == DISC_ADJ_INC_RANS) {} + turbulent(config->GetKind_Solver() == DISC_ADJ_RANS || config->GetKind_Solver() == DISC_ADJ_INC_RANS), + scalar(config->GetKind_Scalar_Model() !=NO_SCALAR_MODEL) {} /*! * \brief Preprocessing to prepare for an iteration of the physics. diff --git a/SU2_CFD/include/numerics/CFileReaderLUT.hpp b/SU2_CFD/include/numerics/CFileReaderLUT.hpp new file mode 100644 index 000000000000..ffe98f7a1b6b --- /dev/null +++ b/SU2_CFD/include/numerics/CFileReaderLUT.hpp @@ -0,0 +1,87 @@ +#pragma once + +#include +#include +#include +#include "../../Common/include/parallelization/mpi_structure.hpp" +/*#include "../../Common/include/datatypes/primitive_structure.hpp"*/ + +using namespace std; + +class CFileReaderLUT { + + protected: + + int rank; + + string type_lut; + string version_lut; + string version_reader; + unsigned long n_points; + unsigned long n_triangles; + unsigned long n_hull_points; + unsigned long n_variables; + + /* !brief + * Holds the variable names stored in the table file. Order is in sync with + * tableFlamelet. + */ + vector< string > names_var; + + /* !brief + * Holds all data stored in the table. First index addresses the variable + * while second index addresses the point. + */ + vector< vector< su2double > > table_data; + + vector< vector< unsigned long > > triangles; + + vector< unsigned long > hull; + + string SkipToFlag(ifstream *file_stream, string flag); + + inline void SetTypeLUT(string value) { type_lut = value; } + inline void SetVersionLUT(string value) { version_lut = value; } + inline void SetNPoints(unsigned long value) { n_points = value; } + inline void SetNTriangles(unsigned long value) { n_triangles = value; } + inline void SetNHullPoints(unsigned long value) { n_hull_points = value; } + inline void SetNVariables(unsigned long value) { n_variables = value; } + + inline void PushNameVar(string value) { names_var.push_back(value); } + inline void PopNameVar() { names_var.pop_back(); } + + inline void AllocMemData() { + table_data.resize(GetNVariables(), vector< su2double >(GetNPoints())); + } + + inline void AllocMemTriangles() { + triangles.resize(GetNTriangles(), vector< unsigned long >(3)); + } + + inline void AllocMemHull() { + hull.resize(GetNHullPoints()); + } + + public: + + CFileReaderLUT(); + + inline string GetTypeLUT() { return type_lut; } + inline string GetVersionLUT() { return version_lut; } + inline string GetVersionReader() { return version_reader; } + inline unsigned long GetNPoints() { return n_points; } + inline unsigned long GetNTriangles() { return n_triangles; } + inline unsigned long GetNHullPoints() { return n_hull_points; } + inline unsigned long GetNVariables() { return n_variables; } + + inline const vector< string > &GetNamesVar() const { return names_var; } + + inline const vector< vector< su2double > > &GetTableData() const { return table_data; } + + inline const vector< vector< unsigned long > > &GetTriangles() const { return triangles; }; + + inline const vector< unsigned long > &GetHull() const { return hull; }; + + void ReadRawDRG(string file_name); + +}; diff --git a/SU2_CFD/include/numerics/CLookUpTable.hpp b/SU2_CFD/include/numerics/CLookUpTable.hpp new file mode 100644 index 000000000000..ed9253bb64f9 --- /dev/null +++ b/SU2_CFD/include/numerics/CLookUpTable.hpp @@ -0,0 +1,148 @@ +#pragma once + +#include "../../Common/include/option_structure.hpp" +#include "CFileReaderLUT.hpp" +#include "CTrapezoidalMap.hpp" + +#include +#include +#include +#include +#include + +using namespace std; + +class CLookUpTable{ + +protected: + + int rank; /*!< \brief MPI Rank. */ + + string file_name_lut; + string type_lut; + string version_lut; + string version_reader; + unsigned long n_points; + unsigned long n_triangles; + unsigned long n_variables; + unsigned long n_hull_points; + + su2double limits_table_enth[2]; + su2double limits_table_prog[2]; + + /* !brief + * Holds the variable names stored in the table file. + * Order is in sync with data + */ + vector< string > names_var; + + /* !brief + * Holds all data stored in the table. First index addresses the variable + * while second index addresses the point. + */ + vector< vector< su2double > > table_data; + + vector< vector< unsigned long > > triangles; + vector< vector< unsigned long > > edges; + vector< vector< unsigned long > > edge_to_triangle; + + vector< unsigned long > hull; + + CTrapezoidalMap trap_map_prog_enth; + + vector< vector< unsigned long > > interp_points; + + vector< vector< vector< su2double > > > interp_mat_inv_prog_enth; + + inline int GetIndexOfVar(string nameVar) { + int index; + int endoflist; + // FIXME dan: there should be an error handling when nameVar is not found in names_var + index = (int)(find(names_var.begin(), names_var.end(), nameVar) - names_var.begin()); + endoflist = names_var.size(); + if (index == endoflist){ + index = -1; + string error_msg = "Variable '"; + error_msg.append(nameVar); + error_msg.append("' is not in the lookup table."); + SU2_MPI::Error(error_msg, CURRENT_FUNCTION); + } + return index; + } + + inline const vector &GetData(string name_var) { + int ix_var = GetIndexOfVar(name_var); + return table_data.at(ix_var); + } + + inline const vector< vector< unsigned long > > &GetEdges() const { + return edges; + } + + inline const vector< vector< unsigned long > > &GetEdgeToTriangle() const { + return edge_to_triangle; + } + + void FindTableLimits(string name_prog, string name_enth); + + void IdentifyUniqueEdges(); + + void LoadTableRaw(string file_name_lut); + + void ComputeInterpCoeffs(string name_prog, string name_enth); + + void GetInterpMatInv(const vector &vec_x, + const vector &vec_y, + vector &point_ids, + vector< vector< su2double > > &interp_mat_inv); + + void GetInterpCoeffs(su2double val_x, + su2double val_y, + vector< vector< su2double > > &interp_mat_inv, + vector &interp_coeffs); + + void GaussianInverse(vector > &mat, + vector > &mat_inv); + + su2double Interpolate(const vector &val_samples, + vector &val_triangle, + vector &val_interp_coeffs); + + unsigned long FindNearestNeighborOnHull(su2double val_enth, + su2double val_prog, string name_prog,string name_enth); + + bool IsInTriangle(su2double val_x, su2double val_y, unsigned long val_id_triangle, string name_prog,string name_enth); + + inline su2double TriArea(su2double x1, su2double y1, su2double x2, su2double y2, su2double x3, su2double y3) { + return abs((x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) * 0.5); + } + + public: + CLookUpTable(string file_name_lut, string name_prog, string name_enth); + + void PrintTableInfo(); + + unsigned long LookUp_ProgEnth(string val_name_var, + su2double *val_var, + su2double val_prog, + su2double val_enth, string name_prog, string name_enth); + + unsigned long LookUp_ProgEnth(vector &val_names_var, + vector &val_vars, + su2double val_prog, + su2double val_enth, string name_prog, string name_enth); + + unsigned long LookUp_ProgEnth(vector &val_names_var, + vector &val_vars, + su2double val_prog, + su2double val_enth, string name_prog, string name_enth); + + inline pair GetTableLimitsEnth() { + return make_pair(limits_table_enth[0], limits_table_enth[1]); +} + +inline pair GetTableLimitsProg() { + return make_pair(limits_table_prog[0], limits_table_prog[1]); +} + +}; diff --git a/SU2_CFD/include/numerics/CNumerics.hpp b/SU2_CFD/include/numerics/CNumerics.hpp index 20dbffa5e8cb..de42882ed9a2 100644 --- a/SU2_CFD/include/numerics/CNumerics.hpp +++ b/SU2_CFD/include/numerics/CNumerics.hpp @@ -356,6 +356,14 @@ class CNumerics { ScalarVar_j = val_scalarvar_j; } + /*! + * \brief Set the values of the volumetric scalar sources. + * \param[in] val_scalar_sources - Values of the scalar sources. + */ + virtual void SetScalarSources(su2double *val_scalar_sources) {/* empty */} + + virtual void SetSourcePV(su2double val_sourcepv) {} + /*! * \brief Set the value of the turbulent variable. * \param[in] val_transvar_i - Value of the turbulent variable at point i. diff --git a/SU2_CFD/include/numerics/CTrapezoidalMap.hpp b/SU2_CFD/include/numerics/CTrapezoidalMap.hpp new file mode 100644 index 000000000000..95a2aa7a0fa8 --- /dev/null +++ b/SU2_CFD/include/numerics/CTrapezoidalMap.hpp @@ -0,0 +1,60 @@ +#pragma once + +#include +#include +#include +#include + +using namespace std; + +class CTrapezoidalMap { +protected: + + /* The unique values of x which exist in the data */ + vector< su2double > unique_bands_x; + + vector< vector< su2double > > edge_limits_x; + vector< vector< su2double > > edge_limits_y; + + + vector< vector< unsigned long > > edge_to_triangle; + + /* The value that each edge which intersects the band takes within that + * same band. Used to sort the edges */ + vector< vector< pair< su2double, unsigned long > > > y_edge_at_band_mid; + + +public: + CTrapezoidalMap(); + + CTrapezoidalMap(const vector< su2double > &samples_x, + const vector< su2double > &samples_y, + const vector< vector< unsigned long > > &edges, + const vector< vector< unsigned long > > &edge_to_triangle); + + ~CTrapezoidalMap(void); + + /* nijso: todo testing of writing the trapezoidal map to file */ + //void writeVec1file(string path, vector& myVector); + //void readVec1file(string path, vector& myVector); + //void writeVec2file(string path, vector >& myVector); + //void readVec2file(string path, vector >& myVector); + //void writeVec3file(string path, vector >& myVector); + //void readVec3file(string path, vector > & myVector); + //void writeVec4file(string path, vector > >& myVector); + //void readVec4file(string path, vector > >& myVector); + //void writeVec(void); + //void readVec(void); + + void Search_Band_For_Edge(su2double val_x, su2double val_y); + + unsigned long GetTriangle(su2double val_x, su2double val_y); + + pair GetBand(su2double val_x); + pair GetEdges(pair val_band, + su2double val_x, su2double val_y); + + inline bool IsInsideHullX(su2double val_x) { + return ( val_x >= unique_bands_x.front() ) && ( val_x <= unique_bands_x.back() ); + } +}; diff --git a/SU2_CFD/include/numerics/flamelet/scalarLegacy_convection.hpp b/SU2_CFD/include/numerics/flamelet/scalarLegacy_convection.hpp new file mode 100644 index 000000000000..577203e6c600 --- /dev/null +++ b/SU2_CFD/include/numerics/flamelet/scalarLegacy_convection.hpp @@ -0,0 +1,122 @@ +/*! + * \file scalarLegacy_convection.hpp + * \brief Delarations of numerics classes for discretization of + * convective fluxes in turbulence problems. + * \author F. Palacios, T. Economon + * \version 7.1.1 "Blackbird" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2020, SU2 Contributors (cf. AUTHORS.md) + * + * SU2 is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * SU2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with SU2. If not, see . + */ + +#pragma once + +#include "../CNumerics.hpp" + +/*! + * \class CUpwScalar + * \brief Template class for scalar upwind fluxes between nodes i and j. + * \details This class serves as a template for the scalar upwinding residual + * classes. The general structure of a scalar upwinding calculation is the + * same for many different models, which leads to a lot of repeated code. + * By using the template design pattern, these sections of repeated code are + * moved to this shared base class, and the specifics of each model + * are implemented by derived classes. In order to add a new residual + * calculation for a convection residual, extend this class and implement + * the pure virtual functions with model-specific behavior. + * \ingroup ConvDiscr + * \author C. Pederson, A. Bueno., and A. Campos. + */ +class CUpwtransportedScalar : public CNumerics { +protected: + su2double + q_ij = 0.0, /*!< \brief Projected velocity at the face. */ + a0 = 0.0, /*!< \brief The maximum of the face-normal velocity and 0 */ + a1 = 0.0, /*!< \brief The minimum of the face-normal velocity and 0 */ + *Flux = nullptr, /*!< \brief Final result, diffusive flux/residual. */ + **Jacobian_i = nullptr, /*!< \brief Flux Jacobian w.r.t. node i. */ + **Jacobian_j = nullptr; /*!< \brief Flux Jacobian w.r.t. node j. */ + + const bool implicit = false, incompressible = false, dynamic_grid = false; + + /*! + * \brief A pure virtual function; Adds any extra variables to AD + */ + virtual void ExtraADPreaccIn() = 0; + + /*! + * \brief Model-specific steps in the ComputeResidual method, derived classes + * compute the Flux and its Jacobians via this method. + * \param[in] config - Definition of the particular problem. + */ + virtual void FinishResidualCalc(const CConfig* config) = 0; + +public: + /*! + * \brief Constructor of the class. + * \param[in] val_nDim - Number of dimensions of the problem. + * \param[in] val_nVar - Number of variables of the problem. + * \param[in] config - Definition of the particular problem. + */ + CUpwtransportedScalar(unsigned short val_nDim, unsigned short val_nVar, const CConfig* config); + + /*! + * \brief Destructor of the class. + */ + ~CUpwtransportedScalar(void) override; + + /*! + * \brief Compute the scalar upwind flux between two nodes i and j. + * \param[in] config - Definition of the particular problem. + * \return A lightweight const-view (read-only) of the residual/flux and Jacobians. + */ + ResidualType<> ComputeResidual(const CConfig* config) override; + +}; + +/*! + * \class CUpwSca_transportedScalar_general + * \brief Class for doing a scalar upwind solver for the Menter SST turbulence model equations. + * \ingroup ConvDiscr + * \author A. Campos. + */ +class CUpwSca_transportedScalar_general final : public CUpwtransportedScalar { +private: + /*! + * \brief Adds any extra variables to AD + */ + void ExtraADPreaccIn() override; + + /*! + * \brief SST specific steps in the ComputeResidual method + * \param[in] config - Definition of the particular problem. + */ + void FinishResidualCalc(const CConfig* config) override; + +public: + /*! + * \brief Constructor of the class. + * \param[in] val_nDim - Number of dimensions of the problem. + * \param[in] val_nVar - Number of variables of the problem. + * \param[in] config - Definition of the particular problem. + */ + CUpwSca_transportedScalar_general(unsigned short val_nDim, unsigned short val_nVar, const CConfig* config); + +}; diff --git a/SU2_CFD/include/numerics/flamelet/scalarLegacy_diffusion.hpp b/SU2_CFD/include/numerics/flamelet/scalarLegacy_diffusion.hpp new file mode 100644 index 000000000000..3c60e43153c7 --- /dev/null +++ b/SU2_CFD/include/numerics/flamelet/scalarLegacy_diffusion.hpp @@ -0,0 +1,134 @@ +/*! + * \file scalarLegacy_diffusion.hpp + * \brief Declarations of numerics classes for discretization of + * viscous fluxes in turbulence problems. + * \author F. Palacios, T. Economon + * \version 7.1.1 "Blackbird" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2020, SU2 Contributors (cf. AUTHORS.md) + * + * SU2 is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * SU2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with SU2. If not, see . + */ + +#pragma once + +#include "../CNumerics.hpp" + +/*! + * \class CAvgGrad_Scalar + * \brief Template class for computing viscous residual of scalar values + * \details This class serves as a template for the scalar viscous residual + * classes. The general structure of a viscous residual calculation is the + * same for many different models, which leads to a lot of repeated code. + * By using the template design pattern, these sections of repeated code are + * moved to a shared base class, and the specifics of each model + * are implemented by derived classes. In order to add a new residual + * calculation for a viscous residual, extend this class and implement + * the pure virtual functions with model-specific behavior. + * \ingroup ViscDiscr + * \author C. Pederson, A. Bueno, and F. Palacios + */ +class CAvgGrad_transportedScalar : public CNumerics { +protected: + su2double + Edge_Vector[MAXNDIM] = {0.0}, /*!< \brief Vector from node i to node j. */ + *Proj_Mean_GradScalarVar_Normal = nullptr, /*!< \brief Mean_gradScalarVar DOT normal. */ + *Proj_Mean_GradScalarVar_Edge = nullptr, /*!< \brief Mean_gradScalarVar DOT Edge_Vector. */ + *Proj_Mean_GradScalarVar = nullptr, /*!< \brief Mean_gradScalarVar DOT normal, corrected if required. */ + dist_ij_2 = 0.0, /*!< \brief |Edge_Vector|^2 */ + proj_vector_ij = 0.0, /*!< \brief (Edge_Vector DOT normal)/|Edge_Vector|^2 */ + *Flux = nullptr, /*!< \brief Final result, diffusive flux/residual. */ + **Jacobian_i = nullptr, /*!< \brief Flux Jacobian w.r.t. node i. */ + **Jacobian_j = nullptr; /*!< \brief Flux Jacobian w.r.t. node j. */ + + const bool correct_gradient = false, implicit = false, incompressible = false; + + /*! + * \brief A pure virtual function; Adds any extra variables to AD + */ + virtual void ExtraADPreaccIn() = 0; + + /*! + * \brief Model-specific steps in the ComputeResidual method, derived classes + * should compute the Flux and Jacobians (i/j) inside this method. + * \param[in] config - Definition of the particular problem. + */ + virtual void FinishResidualCalc(const CConfig* config) = 0; + +public: + /*! + * \brief Constructor of the class. + * \param[in] val_nDim - Number of dimensions of the problem. + * \param[in] val_nVar - Number of variables of the problem. + * \param[in] correct_gradient - Whether to correct gradient for skewness. + * \param[in] config - Definition of the particular problem. + */ + CAvgGrad_transportedScalar(unsigned short val_nDim, unsigned short val_nVar, + bool correct_gradient, const CConfig* config); + + /*! + * \brief Destructor of the class. + */ + ~CAvgGrad_transportedScalar(void) override; + + /*! + * \brief Compute the viscous residual using an average of gradients without correction. + * \param[in] config - Definition of the particular problem. + * \return A lightweight const-view (read-only) of the residual/flux and Jacobians. + */ + ResidualType<> ComputeResidual(const CConfig* config) override; + +}; + +/*! + * \class CAvgGrad_transportedScalar_general + * \brief Class for computing viscous term using average of gradient with correction (Menter SST turbulence model). + * \ingroup ViscDiscr + * \author A. Bueno. + */ +class CAvgGrad_transportedScalar_general final : public CAvgGrad_transportedScalar { +private: + const su2double + sigma = 0.0; /*!< \brief Constants for the viscous terms */ + + /*! + * \brief Adds any extra variables to AD + */ + void ExtraADPreaccIn(void) override; + + /*! + * \brief SST specific steps in the ComputeResidual method + * \param[in] config - Definition of the particular problem. + */ + void FinishResidualCalc(const CConfig* config) override; + +public: + /*! + * \brief Constructor of the class. + * \param[in] val_nDim - Number of dimensions of the problem. + * \param[in] val_nVar - Number of variables of the problem. + * \param[in] constants - Constants of the model. + * \param[in] correct_grad - Whether to correct gradient for skewness. + * \param[in] config - Definition of the particular problem. + */ + CAvgGrad_transportedScalar_general(unsigned short val_nDim, unsigned short val_nVar, + bool correct_grad, const CConfig* config); + + +}; diff --git a/SU2_CFD/include/numerics/flamelet/scalarLegacy_sources.hpp b/SU2_CFD/include/numerics/flamelet/scalarLegacy_sources.hpp new file mode 100644 index 000000000000..8235a16aa1e0 --- /dev/null +++ b/SU2_CFD/include/numerics/flamelet/scalarLegacy_sources.hpp @@ -0,0 +1,163 @@ +/*! + * \file scalarLegacy_sources.hpp + * \brief Delarations of numerics classes for integration of source + * terms in scalar problems. + * \author T. Economon, N. Beishuizen + * \version 7.1.1 "Blackbird" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2020, SU2 Contributors (cf. AUTHORS.md) + * + * SU2 is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * SU2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with SU2. If not, see . + */ + +#pragma once + +#include "../CNumerics.hpp" +#include "../../solvers/CScalarLegacySolver.hpp" + +/*! + * \class CSourcePieceWise_transportedScalar_general + * \brief Class for integrating the source terms of the transported scalar turbulence model equations. + * \ingroup SourceDiscr + * \author N. Beishuizen + */ +class CSourcePieceWise_transportedScalar_general final : public CNumerics { + +private: + su2double *Residual = nullptr; + su2double **Jacobian_i = nullptr; + bool flame; + su2double *scalar_sources = nullptr; + + su2double Sc_t; + + su2double source_pv; + + bool incompressible; + bool viscous; + bool axisymmetric; + bool implicit; + bool inc_rans; + + /*! + * \brief Add contribution due to axisymmetric formulation to 2D residual + */ + inline void ResidualAxisymmetric(void){ + su2double yinv,Density_i,Velocity_i[3]; + if (Coord_i[1] > EPS) { + + AD::SetPreaccIn(Coord_i[1]); + + yinv = 1.0/Coord_i[1]; + + /*--- the incompressible density. Note that this is different for compressible flows ---*/ + + Density_i = V_i[nDim+2]; + + /*--- Set primitive variables at points iPoint. ---*/ + + for (auto iDim = 0u; iDim < nDim; iDim++) + Velocity_i[iDim] = V_i[iDim+1]; + + /*--- Inviscid component of the source term. ---*/ + + for (auto iVar=0u; iVar < nVar; iVar++) + Residual[iVar] -= yinv*Volume*Density_i*ScalarVar_i[iVar]*Velocity_i[1]; + + if (implicit) { + for (auto iVar=0u; iVar < nVar; iVar++) { + Jacobian_i[iVar][iVar] -= yinv*Volume*Velocity_i[1]; + } + } + + /*--- Add the viscous terms if necessary. ---*/ + + if (viscous) { + Laminar_Viscosity_i = V_i[nDim+4]; + Eddy_Viscosity_i = V_i[nDim+5]; + Thermal_Conductivity_i = V_i[nDim+6]; + + su2double Mass_Diffusivity_Tur = 0.0; + if (inc_rans) + Mass_Diffusivity_Tur = Eddy_Viscosity_i/Sc_t; + + // In case of flamelet, diffusion_coeff is actually rho*D + // remember (rho*cp*D) = k when Le=1 + // and in case of transported scalar, diffusion_coeff is binary diffusion coefficient + for (auto iVar=0u; iVar < nVar; iVar++){ + if (flame) + Residual[iVar] += yinv*Volume*(Diffusion_Coeff_i[iVar]+Mass_Diffusivity_Tur)*ScalarVar_Grad_i[iVar][1]; + else + Residual[iVar] += yinv*Volume*(Density_i*Diffusion_Coeff_i[iVar]+Mass_Diffusivity_Tur)*ScalarVar_Grad_i[iVar][1]; + } + } + + } else { + + for (auto iVar=0u; iVar < nVar; iVar++) + Residual[iVar] = 0.0; + + if (implicit) { + for (auto iVar=0u; iVar < nVar; iVar++) { + for (auto jVar=0u; jVar < nVar; jVar++) + Jacobian_i[iVar][jVar] = 0.0; + } + } + + } + + } + +public: + /*! + * \brief Constructor of the class. + * \param[in] val_nDim - Number of dimensions of the problem. + * \param[in] val_nVar - Number of variables of the problem. + * \param[in] config - Definition of the particular problem. + */ + CSourcePieceWise_transportedScalar_general(unsigned short val_nDim, unsigned short val_nVar, const CConfig* config); + + /*! + * \brief Residual for source term integration. + * \param[in] config - Definition of the particular problem. + * \return A lightweight const-view (read-only) of the residual/flux and Jacobians. + */ + ResidualType<> ComputeResidual(const CConfig* config) override; + + /*! + * \brief Set the value of the progress variable source term for the flamelet model. + * \param[in] val_sourcepv_i - Value of the source term at point i. + * \param[in] val_sourcepv_j - Value of the source term at point j. + */ + inline void SetScalarSources(su2double *val_scalar_sources) override { + for (auto i_var=0u; i_var < nVar; i_var++) + scalar_sources[i_var] = val_scalar_sources[i_var]; + } + + inline void SetSourcePV(su2double val_sourcepv) override { + source_pv = val_sourcepv; + } + + /*! + * \brief Destructor of the class. + */ + ~CSourcePieceWise_transportedScalar_general(void) override; + + +}; diff --git a/SU2_CFD/include/numerics/flow/convection/fds.hpp b/SU2_CFD/include/numerics/flow/convection/fds.hpp index 7db6a101ea7c..c6a8d64002e7 100644 --- a/SU2_CFD/include/numerics/flow/convection/fds.hpp +++ b/SU2_CFD/include/numerics/flow/convection/fds.hpp @@ -41,6 +41,7 @@ class CUpwFDSInc_Flow final : public CNumerics { bool implicit, /*!< \brief Implicit calculation. */ dynamic_grid, /*!< \brief Modification for grid movement. */ variable_density, /*!< \brief Variable density incompressible flows. */ + flame, /*!< \brief reacting incompressible flows. */ energy; /*!< \brief computation with the energy equation. */ su2double *Diff_V; su2double *Velocity_i, *Velocity_j, *MeanVelocity; diff --git a/SU2_CFD/include/numerics/flow/flow_diffusion.hpp b/SU2_CFD/include/numerics/flow/flow_diffusion.hpp index 398f9a834e18..fa4db07b6e6b 100644 --- a/SU2_CFD/include/numerics/flow/flow_diffusion.hpp +++ b/SU2_CFD/include/numerics/flow/flow_diffusion.hpp @@ -288,7 +288,7 @@ class CAvgGradInc_Flow final : public CAvgGrad_Base { private: su2double Mean_Thermal_Conductivity; /*!< \brief Mean value of the effective thermal conductivity. */ bool energy; /*!< \brief computation with the energy equation. */ - + bool flame; /*!< \brief computation when combustion is active */ /*! * \brief Compute the projection of the viscous fluxes into a direction * diff --git a/SU2_CFD/include/numerics/flow/flow_sources.hpp b/SU2_CFD/include/numerics/flow/flow_sources.hpp index 1387c6da6f91..0a5b990b409f 100644 --- a/SU2_CFD/include/numerics/flow/flow_sources.hpp +++ b/SU2_CFD/include/numerics/flow/flow_sources.hpp @@ -126,6 +126,7 @@ class CSourceGeneralAxisymmetric_Flow final : public CSourceAxisymmetric_Flow { class CSourceIncAxisymmetric_Flow final : public CSourceBase_Flow { bool implicit, /*!< \brief Implicit calculation. */ viscous, /*!< \brief Viscous incompressible flows. */ + flame, /*!< \brief computation if combustion is present */ energy; /*!< \brief computation with the energy equation. */ public: diff --git a/SU2_CFD/include/output/CAdjFlowIncOutput.hpp b/SU2_CFD/include/output/CAdjFlowIncOutput.hpp index e4fd092d994f..0c4e405179c5 100644 --- a/SU2_CFD/include/output/CAdjFlowIncOutput.hpp +++ b/SU2_CFD/include/output/CAdjFlowIncOutput.hpp @@ -43,6 +43,7 @@ class CAdjFlowIncOutput final: public COutput { bool weakly_coupled_heat; /*!< \brief Boolean indicating whether have a weakly coupled heat equation*/ bool cont_adj; /*!< \brief Boolean indicating whether we run a cont. adjoint problem */ bool frozen_visc; /*!< \brief Boolean indicating whether frozen viscosity/turbulence is used. */ + unsigned short scalar_model; /*!< \brief The kind of scalar model*/ public: diff --git a/SU2_CFD/include/output/CFlowCompOutput.hpp b/SU2_CFD/include/output/CFlowCompOutput.hpp index 48133e7c1d6a..64cdcdee534d 100644 --- a/SU2_CFD/include/output/CFlowCompOutput.hpp +++ b/SU2_CFD/include/output/CFlowCompOutput.hpp @@ -40,6 +40,7 @@ class CFlowCompOutput final: public CFlowOutput { private: TURB_MODEL turb_model; //!< Kind of turbulence model + unsigned short scalar_model; /*!< \brief The kind of scalar transport model*/ public: diff --git a/SU2_CFD/include/output/CFlowIncOutput.hpp b/SU2_CFD/include/output/CFlowIncOutput.hpp index c746c0a16274..f773f25075d6 100644 --- a/SU2_CFD/include/output/CFlowIncOutput.hpp +++ b/SU2_CFD/include/output/CFlowIncOutput.hpp @@ -39,6 +39,7 @@ class CVariable; class CFlowIncOutput final: public CFlowOutput { private: + unsigned short scalar_model; /*!< \brief The kind of scalar transport model*/ TURB_MODEL turb_model; /*!< \brief The kind of turbulence model*/ bool heat; /*!< \brief Boolean indicating whether have a heat problem*/ bool weakly_coupled_heat; /*!< \brief Boolean indicating whether have a weakly coupled heat equation*/ diff --git a/SU2_CFD/include/output/CFlowOutput.hpp b/SU2_CFD/include/output/CFlowOutput.hpp index 25b87c2160e4..9947ef0bd3a3 100644 --- a/SU2_CFD/include/output/CFlowOutput.hpp +++ b/SU2_CFD/include/output/CFlowOutput.hpp @@ -53,7 +53,7 @@ class CFlowOutput : public CFVMOutput{ * \param[in,out] config - Definition of the particular problem. * \param[in] output - Boolean indicating whether information should be written to screen */ - void SetAnalyzeSurface(const CSolver *solver, const CGeometry *geometry, CConfig *config, bool output); + void SetAnalyzeSurface(CSolver **solver, const CGeometry *geometry, CConfig *config, bool output); /*! * \brief Add aerodynamic coefficients as output fields diff --git a/SU2_CFD/include/solvers/CFlameletSolver.hpp b/SU2_CFD/include/solvers/CFlameletSolver.hpp new file mode 100644 index 000000000000..8b4053a14ec7 --- /dev/null +++ b/SU2_CFD/include/solvers/CFlameletSolver.hpp @@ -0,0 +1,247 @@ +/*! + * \file CFlameletSolver.hpp + * \brief Declaration and inlines for the flamelet solver class. + * \author D. Mayer, T. Economon + * \version 7.1.1 "Blackbird" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2021, SU2 Contributors (cf. AUTHORS.md) + * + * SU2 is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * SU2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with SU2. If not, see . + */ + +#pragma once + +#include "CScalarLegacySolver.hpp" + +/*! + * \class CFlameletSolver + * \brief Main class for defining the flamelet solver. + * \ingroup Scalar_Model + * \author D. Mayer, T. Economon + */ +class CFlameletSolver: public CScalarLegacySolver { +private: + CFluidModel *FluidModel; /*!< \brief Fluid model for the scalar transport problem. */ + //vector scalar_clipping_max; + //vector scalar_clipping_min; + unsigned long n_table_misses; /*!< \brief number of times we failed to do a lookup from the table */ + vector conjugate_var; /*!< \brief CHT variables for each boundary and vertex. */ + +public: + /*! + * \brief Constructor of the class. + */ + CFlameletSolver(void); + + /*! + * \overload + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] config - Definition of the particular problem. + * \param[in] iMesh - Index of the mesh in multigrid computations. + */ + CFlameletSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh); + + /*! + * \brief Destructor of the class. + */ + ~CFlameletSolver(void); + + /*! + * \brief Restart residual and compute gradients. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] config - Definition of the particular problem. + * \param[in] iMesh - Index of the mesh in multigrid computations. + * \param[in] iRKStep - Current step of the Runge-Kutta iteration. + * \param[in] RunTime_EqSystem - System of equations which is going to be solved. + * \param[in] Output - boolean to determine whether to print output. + */ + void Preprocessing(CGeometry *geometry, + CSolver **solver_container, + CConfig *config, + unsigned short iMesh, + unsigned short iRKStep, + unsigned short RunTime_EqSystem, + bool Output); + + /*! + * \brief Post-processing routine for the passive scalar model. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] config - Definition of the particular problem. + * \param[in] iMesh - Index of the mesh in multigrid computations. + */ + void Postprocessing(CGeometry *geometry, + CSolver **solver_container, + CConfig *config, + unsigned short iMesh); + + /*! + * \brief Compute the primitive variables (diffusivities) + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] config - Definition of the particular problem. + * \param[in] Output - boolean to determine whether to print output. + * \return - The number of non-physical points. + */ + unsigned long SetPrimitive_Variables(CSolver **solver_container, CConfig *config, bool Output); + + /*! + * \brief Set the initial condition for the scalar transport problem. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container with all the solutions. + * \param[in] config - Definition of the particular problem. + * \param[in] ExtIter - External iteration. + */ + void SetInitialCondition(CGeometry **geometry, CSolver ***solver_container, + CConfig *config, unsigned long ExtIter); + + /*! + * \brief Compute the preconditioner for low-Mach flows. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] config - Definition of the particular problem. + */ + void SetPreconditioner(CGeometry *geometry, CSolver **solver_container, CConfig *config); + + /*! + * \brief Source term computation. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] numerics - Description of the numerical method. + * \param[in] config - Definition of the particular problem. + * \param[in] iMesh - Index of the mesh in multigrid computations. + */ + void Source_Residual(CGeometry *geometry, + CSolver **solver_container, + CNumerics **numerics_container, + CConfig *config, + unsigned short iMesh) override; + + /*! + * \brief Impose the Navier-Stokes wall boundary condition. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] conv_numerics - Description of the numerical method. + * \param[in] visc_numerics - Description of the numerical method. + * \param[in] config - Definition of the particular problem. + * \param[in] val_marker - Surface marker where the boundary condition is applied. + */ + void BC_HeatFlux_Wall(CGeometry *geometry, + CSolver **solver_container, + CNumerics *conv_numerics, + CNumerics *visc_numerics, + CConfig *config, + unsigned short val_marker); + + /*! + * \brief Impose the Navier-Stokes wall boundary condition. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] conv_numerics - Description of the numerical method. + * \param[in] visc_numerics - Description of the numerical method. + * \param[in] config - Definition of the particular problem. + * \param[in] val_marker - Surface marker where the boundary condition is applied. + */ + void BC_Isothermal_Wall(CGeometry *geometry, + CSolver **solver_container, + CNumerics *conv_numerics, + CNumerics *visc_numerics, + CConfig *config, + unsigned short val_marker) override; + + /*! + * \brief Impose the inlet boundary condition. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] conv_numerics - Description of the numerical method. + * \param[in] visc_numerics - Description of the numerical method. + * \param[in] config - Definition of the particular problem. + * \param[in] val_marker - Surface marker where the boundary condition is applied. + */ + void BC_Inlet(CGeometry *geometry, + CSolver **solver_container, + CNumerics *conv_numerics, + CNumerics *visc_numerics, + CConfig *config, + unsigned short val_marker); + + /*! + * \brief Impose the outlet boundary condition. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] conv_numerics - Description of the numerical method. + * \param[in] visc_numerics - Description of the numerical method. + * \param[in] config - Definition of the particular problem. + * \param[in] val_marker - Surface marker where the boundary condition is applied. + */ + void BC_Outlet(CGeometry *geometry, + CSolver **solver_container, + CNumerics *conv_numerics, + CNumerics *visc_numerics, + CConfig *config, + unsigned short val_marker); + + inline void SetNTableMisses(unsigned short val_n_table_misses) override { n_table_misses = val_n_table_misses; } + + inline unsigned long GetNTableMisses() override { return n_table_misses; } + + /*! + * \brief Impose the (received) conjugate heat variables. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] numerics - Description of the numerical method. + * \param[in] config - Definition of the particular problem. + * \param[in] val_marker - Surface marker where the boundary condition is applied. + */ + void BC_ConjugateHeat_Interface(CGeometry *geometry, + CSolver **solver_container, + CNumerics *numerics, + CConfig *config, + unsigned short val_marker) override; + + + /*! + * \brief Set the conjugate heat variables. + * \param[in] val_marker - marker index + * \param[in] val_vertex - vertex index + * \param[in] pos_var - variable position (in vector of all conjugate heat variables) + */ + inline su2double GetConjugateHeatVariable(unsigned short val_marker, + unsigned long val_vertex, + unsigned short pos_var) const override { + return conjugate_var[val_marker][val_vertex][pos_var]; + } + + /*! + * \brief Set the conjugate heat variables. + * \param[in] val_marker - marker index + * \param[in] val_vertex - vertex index + * \param[in] pos_var - variable position (in vector of all conjugate heat variables) + * \param[in] relaxation factor - relaxation factor for the change of the variables + * \param[in] val_var - value of the variable + */ + inline void SetConjugateHeatVariable(unsigned short val_marker, + unsigned long val_vertex, + unsigned short pos_var, + su2double relaxation_factor, + su2double val_var) override { + conjugate_var[val_marker][val_vertex][pos_var] = relaxation_factor*val_var + (1.0-relaxation_factor)*conjugate_var[val_marker][val_vertex][pos_var]; + } + +}; diff --git a/SU2_CFD/include/solvers/CIncEulerSolver.hpp b/SU2_CFD/include/solvers/CIncEulerSolver.hpp index 6e9ef1e6ab4a..46cb9b6b7272 100644 --- a/SU2_CFD/include/solvers/CIncEulerSolver.hpp +++ b/SU2_CFD/include/solvers/CIncEulerSolver.hpp @@ -40,6 +40,7 @@ class CIncEulerSolver : public CFVMFlowSolverBase FluidModel; /*!< \brief fluid model used in the solver. */ StreamwisePeriodicValues SPvals; + su2double Total_CEquivArea = 0.0; /*!< \brief Total Equivalent Area coefficient for all the boundaries. */ /*! * \brief Preprocessing actions common to the Euler and NS solvers. @@ -244,9 +245,7 @@ class CIncEulerSolver : public CFVMFlowSolverBase. + */ + +#pragma once + +#include "CScalarLegacySolver.hpp" + +/*! + * \class CPassiveScalarSolver + * \brief Main class for defining the passive scalar solver. + * \ingroup Scalar_Model + * \author T. Economon + */ +class CPassiveScalarSolver: public CScalarLegacySolver { +private: + CFluidModel *FluidModel; /*!< \brief Fluid model for the scalar transport problem. */ + +public: + /*! + * \brief Constructor of the class. + */ + CPassiveScalarSolver(void); + + /*! + * \overload + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] config - Definition of the particular problem. + * \param[in] iMesh - Index of the mesh in multigrid computations. + */ + CPassiveScalarSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh); + + /*! + * \brief Destructor of the class. + */ + ~CPassiveScalarSolver(void); + + /*! + * \brief Restart residual and compute gradients. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] config - Definition of the particular problem. + * \param[in] iMesh - Index of the mesh in multigrid computations. + * \param[in] iRKStep - Current step of the Runge-Kutta iteration. + * \param[in] RunTime_EqSystem - System of equations which is going to be solved. + * \param[in] Output - boolean to determine whether to print output. + */ + void Preprocessing(CGeometry *geometry, + CSolver **solver_container, + CConfig *config, + unsigned short iMesh, + unsigned short iRKStep, + unsigned short RunTime_EqSystem, + bool Output); + + /*! + * \brief Post-processing routine for the passive scalar model. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] config - Definition of the particular problem. + * \param[in] iMesh - Index of the mesh in multigrid computations. + */ + void Postprocessing(CGeometry *geometry, + CSolver **solver_container, + CConfig *config, + unsigned short iMesh); + + + /*! + * \brief Set the initial condition for the scalar transport problem. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container with all the solutions. + * \param[in] config - Definition of the particular problem. + * \param[in] ExtIter - External iteration. + */ + void SetInitialCondition(CGeometry **geometry, CSolver ***solver_container, + CConfig *config, unsigned long ExtIter); + + /*! + * \brief Compute the preconditioner for low-Mach flows. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] config - Definition of the particular problem. + */ + void SetPreconditioner(CGeometry *geometry, CSolver **solver_container, CConfig *config); + + /*! + * \brief Source term computation. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] numerics - Description of the numerical method. + * \param[in] config - Definition of the particular problem. + * \param[in] iMesh - Index of the mesh in multigrid computations. + */ + void Source_Residual(CGeometry *geometry, + CSolver **solver_container, + CNumerics **numerics_container, + CConfig *config, + unsigned short iMesh) override; + + /*! + * \brief Impose the Navier-Stokes wall boundary condition. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] conv_numerics - Description of the numerical method. + * \param[in] visc_numerics - Description of the numerical method. + * \param[in] config - Definition of the particular problem. + * \param[in] val_marker - Surface marker where the boundary condition is applied. + */ + void BC_HeatFlux_Wall(CGeometry *geometry, + CSolver **solver_container, + CNumerics *conv_numerics, + CNumerics *visc_numerics, + CConfig *config, + unsigned short val_marker); + + /*! + * \brief Impose the Navier-Stokes wall boundary condition. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] conv_numerics - Description of the numerical method. + * \param[in] visc_numerics - Description of the numerical method. + * \param[in] config - Definition of the particular problem. + * \param[in] val_marker - Surface marker where the boundary condition is applied. + */ + void BC_Isothermal_Wall(CGeometry *geometry, + CSolver **solver_container, + CNumerics *conv_numerics, + CNumerics *visc_numerics, + CConfig *config, + unsigned short val_marker); + + /*! + * \brief Impose the inlet boundary condition. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] conv_numerics - Description of the numerical method. + * \param[in] visc_numerics - Description of the numerical method. + * \param[in] config - Definition of the particular problem. + * \param[in] val_marker - Surface marker where the boundary condition is applied. + */ + void BC_Inlet(CGeometry *geometry, + CSolver **solver_container, + CNumerics *conv_numerics, + CNumerics *visc_numerics, + CConfig *config, + unsigned short val_marker); + + /*! + * \brief Impose the outlet boundary condition. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] conv_numerics - Description of the numerical method. + * \param[in] visc_numerics - Description of the numerical method. + * \param[in] config - Definition of the particular problem. + * \param[in] val_marker - Surface marker where the boundary condition is applied. + */ + void BC_Outlet(CGeometry *geometry, + CSolver **solver_container, + CNumerics *conv_numerics, + CNumerics *visc_numerics, + CConfig *config, + unsigned short val_marker); + +}; diff --git a/SU2_CFD/include/solvers/CScalarLegacySolver.hpp b/SU2_CFD/include/solvers/CScalarLegacySolver.hpp new file mode 100644 index 000000000000..6db660b37edb --- /dev/null +++ b/SU2_CFD/include/solvers/CScalarLegacySolver.hpp @@ -0,0 +1,353 @@ +/*! + * \file CScalarLegacySolver.hpp + * \brief Main subroutines for the transported scalar model. + * \author D. Mayer, T. Economon + * \version 7.1.1 "Blackbird" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2020, SU2 Contributors (cf. AUTHORS.md) + * + * SU2 is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * SU2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with SU2. If not, see . + */ + +#pragma once + +#include "CSolver.hpp" +#include "../variables/CScalarLegacyVariable.hpp" +#include "../../../Common/include/parallelization/omp_structure.hpp" + +/*! + * \class CScalaLegacySolver + * \brief Main class for defining the solver for scalar transport eqns. + * \ingroup Scalar_Model + * \author T. Economon + */ +class CScalarLegacySolver : public CSolver { +protected: + enum : size_t {MAXNDIM = 3}; /*!< \brief Max number of space dimensions, used in some static arrays. */ + // nijso: pv,enthalpy, Y1, Y2, Y3, Y4, Y5, Y6 + enum : size_t {MAXNVAR = 8}; /*!< \brief Max number of transported variables, used in some static arrays. */ + enum : size_t {MAXNVARFLOW = 12}; /*!< \brief Max number of flow variables, used in some static arrays. */ + + enum : size_t {OMP_MAX_SIZE = 512}; /*!< \brief Max chunk size for light point loops. */ + enum : size_t {OMP_MIN_SIZE = 32}; /*!< \brief Min chunk size for edge loops (max is color group size). */ + + unsigned long omp_chunk_size; /*!< \brief Chunk size used in light point loops. */ + + su2double + *lowerlimit, /*!< \brief contains lower limits for turbulence variables. */ + *upperlimit; /*!< \brief contains upper limits for turbulence variables. */ + + unsigned short Inlet_Position; /*!< \brief Column index for scalar variables in inlet files. */ + su2double *Scalar_Inf, /*!< \brief Array of far-field values for the scalar variables. */ + Gamma, /*!< \brief Fluid's Gamma constant (ratio of specific heats). */ + Gamma_Minus_One; /*!< \brief Fluids's Gamma - 1.0 . */ + vector Inlet_ScalarVars; /*!< \brief scalar variables at inlet profiles */ + /*--- Sliding meshes variables. ---*/ + + vector > SlidingState; // vector of matrix of pointers... inner dim alloc'd elsewhere (welcome, to the twilight zone) + vector > SlidingStateNodes; + + /*--- Shallow copy of grid coloring for OpenMP parallelization. ---*/ + +#ifdef HAVE_OMP + vector > EdgeColoring; /*!< \brief Edge colors. */ + bool ReducerStrategy = false; /*!< \brief If the reducer strategy is in use. */ +#else + array,1> EdgeColoring; + /*--- Never use the reducer strategy if compiling for MPI-only. ---*/ + static constexpr bool ReducerStrategy = false; +#endif + + /*--- Edge fluxes for reducer strategy (see the notes in CEulerSolver.hpp). ---*/ + CSysVector EdgeFluxes; /*!< \brief Flux across each edge. */ + + /*! + * \brief The highest level in the variable hierarchy this solver can safely use. + */ + CScalarLegacyVariable* nodes = nullptr; + + /*! + * \brief Return nodes to allow CSolver::base_nodes to be set. + */ + inline CVariable* GetBaseClassPointerToNodes() final { return nodes; } + +private: + + /*! + * \brief Compute the viscous flux for the turbulent equation at a particular edge. + * \param[in] iEdge - Edge for which we want to compute the flux + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] numerics - Description of the numerical method. + * \param[in] config - Definition of the particular problem. + */ + void Viscous_Residual(unsigned long iEdge, + CGeometry *geometry, + CSolver **solver_container, + CNumerics *numerics, + CConfig *config); + using CSolver::Viscous_Residual; /*--- Silence warning ---*/ + + /*! + * \brief Sum the edge fluxes for each cell to populate the residual vector, only used on coarse grids. + * \param[in] geometry - Geometrical definition of the problem. + */ + void SumEdgeFluxes(CGeometry* geometry); + + /*! + * \brief Compute a suitable under-relaxation parameter to limit the change in the solution variables over + * a nonlinear iteration for stability. + * \param[in] config - Definition of the particular problem. + */ + void ComputeUnderRelaxationFactor(const CConfig *config); + +public: + + /*! + * \brief Constructor of the class. + */ + CScalarLegacySolver(void); + + /*! + * \brief Destructor of the class. + */ + ~CScalarLegacySolver(void) override; + + /*! + * \brief Constructor of the class. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] config - Definition of the particular problem. + */ + CScalarLegacySolver(CGeometry* geometry, CConfig *config); + + /*! + * \brief Compute the spatial integration using a upwind scheme. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] numerics_container - Description of the numerical method. + * \param[in] config - Definition of the particular problem. + * \param[in] iMesh - Index of the mesh in multigrid computations. + */ + void Upwind_Residual(CGeometry *geometry, + CSolver **solver_container, + CNumerics **numerics_container, + CConfig *config, + unsigned short iMesh) override; + + /*! + * \brief Impose the Symmetry Plane boundary condition. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] conv_numerics - Description of the numerical method. + * \param[in] visc_numerics - Description of the numerical method. + * \param[in] config - Definition of the particular problem. + * \param[in] val_marker - Surface marker where the boundary condition is applied. + */ + void BC_Sym_Plane(CGeometry *geometry, + CSolver **solver_container, + CNumerics *conv_numerics, + CNumerics *visc_numerics, + CConfig *config, + unsigned short val_marker) override; + + /*! + * \brief Impose via the residual the Euler wall boundary condition. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] conv_numerics - Description of the numerical method. + * \param[in] visc_numerics - Description of the numerical method. + * \param[in] config - Definition of the particular problem. + * \param[in] val_marker - Surface marker where the boundary condition is applied. + */ + void BC_Euler_Wall(CGeometry *geometry, + CSolver **solver_container, + CNumerics *conv_numerics, + CNumerics *visc_numerics, + CConfig *config, + unsigned short val_marker) override; + + /*! + * \brief Impose a periodic boundary condition by summing contributions from the complete control volume. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] numerics - Description of the numerical method. + * \param[in] config - Definition of the particular problem. + */ + void BC_Periodic(CGeometry *geometry, CSolver **solver_container, + CNumerics *numerics, CConfig *config) override; + + + /*! + * \brief Impose the Navier-Stokes wall boundary condition. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] conv_numerics - Description of the numerical method. + * \param[in] visc_numerics - Description of the numerical method. + * \param[in] config - Definition of the particular problem. + * \param[in] val_marker - Surface marker where the boundary condition is applied. + */ + void BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_container, + CNumerics *conv_numerics, CNumerics *visc_numerics, + CConfig *config, unsigned short val_marker) override; + + /*! + * \brief Impose the Far Field boundary condition. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] conv_numerics - Description of the numerical method. + * \param[in] visc_numerics - Description of the numerical method. + * \param[in] config - Definition of the particular problem. + * \param[in] val_marker - Surface marker where the boundary condition is applied. + */ + void BC_Far_Field(CGeometry *geometry, + CSolver **solver_container, + CNumerics *conv_numerics, + CNumerics *visc_numerics, + CConfig *config, + unsigned short val_marker) override; + + + /*! + * \brief Prepare an implicit iteration. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] config - Definition of the particular problem. + */ + void PrepareImplicitIteration(CGeometry *geometry, CSolver** solver_container, CConfig *config) final; + + /*! + * \brief Complete an implicit iteration. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] config - Definition of the particular problem. + */ + void CompleteImplicitIteration(CGeometry *geometry, CSolver** solver_container, CConfig *config) final; + + /*! + * \brief Update the solution using an implicit solver. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] config - Definition of the particular problem. + */ + void ImplicitEuler_Iteration(CGeometry *geometry, + CSolver **solver_container, + CConfig *config) override; + + /*! + * \brief Set the total residual adding the term that comes from the Dual Time-Stepping Strategy. + * \param[in] geometry - Geometric definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] config - Definition of the particular problem. + * \param[in] iRKStep - Current step of the Runge-Kutta iteration. + * \param[in] iMesh - Index of the mesh in multigrid computations. + * \param[in] RunTime_EqSystem - System of equations which is going to be solved. + */ + void SetResidual_DualTime(CGeometry *geometry, + CSolver **solver_container, + CConfig *config, + unsigned short iRKStep, + unsigned short iMesh, + unsigned short RunTime_EqSystem) final; + + /*! + * \brief Load a solution from a restart file. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver - Container vector with all of the solvers. + * \param[in] config - Definition of the particular problem. + * \param[in] val_iter - Current external iteration number. + * \param[in] val_update_geo - Flag for updating coords and grid velocity. + */ + void LoadRestart(CGeometry **geometry, + CSolver ***solver, + CConfig *config, + int val_iter, + bool val_update_geo) override; + + /*! + * \brief Set the solution using the Freestream values. + * \param[in] config - Definition of the particular problem. + */ + inline void SetFreeStream_Solution(const CConfig *config) override { + for (unsigned long iPoint = 0; iPoint < nPoint; iPoint++) + for (unsigned short iVar = 0; iVar < nVar; iVar++) + nodes->SetSolution(iPoint, iVar, Scalar_Inf[iVar]); + } + + /*! + * \brief Store of a set of provided inlet profile values at a vertex. + * \param[in] val_inlet - vector containing the inlet values for the current vertex. + * \param[in] iMarker - Surface marker where the coefficient is computed. + * \param[in] iVertex - Vertex of the marker iMarker where the inlet is being set. + */ + void SetInletAtVertex(const su2double *val_inlet, + unsigned short iMarker, + unsigned long iVertex) override; + + /*! + * \brief Get the set of values imposed at an inlet. + * \param[in] val_inlet - vector returning the inlet values for the current vertex. + * \param[in] val_inlet_point - Node index where the inlet is being set. + * \param[in] val_kind_marker - Enumerated type for the particular inlet type. + * \param[in] geometry - Geometrical definition of the problem. + * \param config - Definition of the particular problem. + * \return Value of the face area at the vertex. + */ + su2double GetInletAtVertex(su2double *val_inlet, + unsigned long val_inlet_point, + unsigned short val_kind_marker, + string val_marker, + const CGeometry *geometry, + const CConfig *config) const override; + + /*! + * \brief Set a uniform inlet profile + * + * The values at the inlet are set to match the values specified for + * inlets in the configuration file. + * + * \param[in] config - Definition of the particular problem. + * \param[in] iMarker - Surface marker where the coefficient is computed. + */ + void SetUniformInlet(const CConfig *config, unsigned short iMarker) override; + + /*! + * \brief Get the value of the scalar variables at the far-field. + * \return Value of the scalar variables at the far-field. + */ + inline su2double GetScalar_Inf(unsigned short val_ivar) { return Scalar_Inf[val_ivar]; } + + + /*! + * \brief Set custom scalar variables at the vertex of an inlet. + * \param[in] iMarker - Marker identifier. + * \param[in] iVertex - Vertex identifier. + * \param[in] iDim - Index of the scalar variable + * \param[in] val_turb_var - Value of the turbulence variable to be used. + */ + void SetInlet_ScalarVar(unsigned short val_marker, + unsigned long val_vertex, + unsigned short val_dim, + su2double val_scalar_var); + + /*! + * \brief SA and SST support OpenMP+MPI. + */ + inline bool GetHasHybridParallel() const override { return true; } + +}; diff --git a/SU2_CFD/include/solvers/CSolver.hpp b/SU2_CFD/include/solvers/CSolver.hpp index eaf8082053a7..e5074608ee3d 100644 --- a/SU2_CFD/include/solvers/CSolver.hpp +++ b/SU2_CFD/include/solvers/CSolver.hpp @@ -125,6 +125,8 @@ class CSolver { **Jacobian_ij, /*!< \brief Auxiliary matrices for storing point to point Jacobians. */ **Jacobian_ji, /*!< \brief Auxiliary matrices for storing point to point Jacobians. */ **Jacobian_jj; /*!< \brief Auxiliary matrices for storing point to point Jacobians. */ + su2double **Smatrix; /*!< \brief Auxiliary structure for computing gradients by least-squares */ + su2double **Cvector; /*!< \brief Auxiliary structure for computing gradients by least-squares */ /*--- End variables that need to go. ---*/ @@ -457,6 +459,18 @@ class CSolver { */ inline su2double GetRes_RMS(unsigned short val_var) const { return Residual_RMS[val_var]; } + /*! + * \brief Set the number of table look up misses. + * \param[in] val_n_table_miss - Number of table look up misses. + */ + inline virtual void SetNTableMisses(unsigned short val_n_table_miss) { } + + /*! + * \brief Get the number of table look up misses. + * \return Number of table look up misses. + */ + inline virtual unsigned long GetNTableMisses() { return 0; } + /*! * \brief Adds the maximal residual, this is useful for the convergence history (overload). * \param[in] val_var - Index of the variable. @@ -1582,6 +1596,14 @@ class CSolver { const CConfig *config, bool reconstruction = false) { } + /*! + * \brief A virtual member. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] config - Definition of the particular problem. + */ + inline virtual void SetPreconditioner(CGeometry *geometry, CSolver **solver_container, CConfig *config) { } + /*! * \brief A virtual member. * \param[in] geometry - Geometrical definition of the problem. diff --git a/SU2_CFD/include/solvers/CSolverFactory.hpp b/SU2_CFD/include/solvers/CSolverFactory.hpp index a8a8171ed0bd..476ed569874c 100644 --- a/SU2_CFD/include/solvers/CSolverFactory.hpp +++ b/SU2_CFD/include/solvers/CSolverFactory.hpp @@ -44,6 +44,7 @@ enum class SUB_SOLVER_TYPE { DISC_ADJ_FLOW, /*!< \brief Discrete adjoint flow solver */ DISC_ADJ_TURB, /*!< \brief Discrete adjoint turbulence solver */ DISC_ADJ_HEAT, /*!< \brief Discrete adjoint heat solver */ + DISC_ADJ_SCALAR, /*!< \brief Discrete adjoint scalar solver */ EULER, /*!< \brief Compressible Euler solver */ NAVIER_STOKES, /*!< \brief Compressible Navier-Stokes solver */ NEMO_EULER, /*!< \brief NEMO Euler solver */ @@ -54,6 +55,7 @@ enum class SUB_SOLVER_TYPE { DG_EULER, /*!< \brief Higher-order DG Euler solver*/ DG_NAVIER_STOKES, /*!< \brief Higher-order DG Navier-Stokes solver*/ HEAT, /*!< \brief Heat solver */ + SCALAR, /*!< \brief Scalar solver */ TRANSITION, /*!< \brief Transition model solver*/ TURB_SA, /*!< \brief SA turbulence model solver */ TURB_SST, /*!< \brief SST turbulence model solver */ @@ -112,6 +114,17 @@ class CSolverFactory { */ static CSolver* CreateHeatSolver(CSolver **solver, CGeometry *geometry, CConfig *config, int iMGLevel, bool adjoint); + /*! + * \brief Create a scalar solver + * \param[in] solver - The solver container + * \param[in] geometry - The geometry definition + * \param[in] config - The configuration + * \param[in] iMGLevel - The multigrid level + * \param[in] adjoint - Boolean indicating whether a primal or adjoint solver should be allocated + * \return - A pointer to the allocated heat solver + */ + static CSolver* CreateScalarSolver(CSolver **solver, CGeometry *geometry, CConfig *config, int iMGLevel, bool adjoint); + /*! * \brief Create a mesh solver * \param[in] solver - The solver container diff --git a/SU2_CFD/include/variables/CFlameletVariable.hpp b/SU2_CFD/include/variables/CFlameletVariable.hpp new file mode 100644 index 000000000000..196044bd4a6f --- /dev/null +++ b/SU2_CFD/include/variables/CFlameletVariable.hpp @@ -0,0 +1,126 @@ +/*! + * \file CFlameletVariable.hpp + * \brief Definition of the variable fields for the flamelet class. + * \author D. Mayer, T. Economon + * \version 7.1.0 "Blackbird" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2020, SU2 Contributors (cf. AUTHORS.md) + * + * SU2 is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * SU2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with SU2. If not, see . + */ + +#pragma once + +#include "CScalarLegacyVariable.hpp" + +/*! + * \class CFlameletVariable + * \brief Main class for defining the variables of the flamelet model. + * \author D. Mayer, T. Economon + */ +class CFlameletVariable final : public CScalarLegacyVariable { +protected: + //MatrixType source_prog; /*!< \brief Vector of the source terms from the lookup table for each scalar equation */ + MatrixType source_scalar; /*!< \brief Vector of the source terms from the lookup table for each scalar equation */ + MatrixType lookup_scalar; /*!< \brief Vector of the source terms from the lookup table for each scalar equation */ + //MatrixType source_scalar_rescaled; /*!< \brief Vector of the source terms from the lookup table for each scalar equation */ + //MatrixType scalar_table_paraview; /*!< \brief Vector of the values of the scalar from the lookup table for visualization */ + +public: + /*! + * \brief Constructor of the class. + * \param[in] val_scalar_inf - Scalar variable value (initialization value). + * \param[in] npoint - Number of points/nodes/vertices in the domain. + * \param[in] ndim - Number of dimensions of the problem. + * \param[in] nvar - Number of variables of the problem. + * \param[in] config - Definition of the particular problem. + */ + CFlameletVariable(su2double *val_scalar_inf, + unsigned long npoint, + unsigned long ndim, + unsigned long nvar, + CConfig *config); + + /*! + * \brief Destructor of the class. + */ + ~CFlameletVariable() = default; + + + /*! + * \brief Set the value of the transported scalar source term + * \param[in] val_- the . + * \param[in] val_ivar - eqn. index to the . + */ + inline void SetSourceScalar(unsigned long iPoint, + su2double val_source_scalar, + unsigned short val_ivar) override { + source_scalar(iPoint,val_ivar) = val_source_scalar; + } + + /*! + * \brief Set the value of the transported scalar source term + * \param[in] val_- the . + * \param[in] val_ivar - eqn. index to the . + */ + inline void SetLookupScalar(unsigned long iPoint, + su2double val_lookup_scalar, + unsigned short val_ivar) override { + lookup_scalar(iPoint,val_ivar) = val_lookup_scalar; + } + + /*! + * \brief Get the value of the transported scalar source term + * \param[in] val_ivar - eqn. index to the transported scalar source term + * \return Value of the progress variable source term + */ + inline su2double GetScalarSources(unsigned long iPoint, + unsigned short val_ivar) override { + return source_scalar(iPoint,val_ivar); + } + + /*! + * \brief Get the value of the looked up scalar field + * \param[in] val_ivar - eqn. index to the looked up scalar field + * \return Value of the looked up scalar field + */ + inline su2double GetScalarLookups(unsigned long iPoint, + unsigned short val_ivar) override { + return lookup_scalar(iPoint,val_ivar); + } + + + /*! + * \brief Get the value of the transported scalars source term + * \return Pointer to the transported scalars source term + */ + inline su2double *GetScalarSources(unsigned long iPoint) override { + return source_scalar[iPoint]; + } + + /*! + * \brief Get the value of the looked up table based on the transported scalar + * \return Pointer to the transported scalars source term + */ + inline su2double *GetScalarLookups(unsigned long iPoint) override { + return lookup_scalar[iPoint]; + } + + +}; diff --git a/SU2_CFD/include/variables/CIncNSVariable.hpp b/SU2_CFD/include/variables/CIncNSVariable.hpp index 395be3412472..3f7103140a20 100644 --- a/SU2_CFD/include/variables/CIncNSVariable.hpp +++ b/SU2_CFD/include/variables/CIncNSVariable.hpp @@ -98,7 +98,7 @@ class CIncNSVariable final : public CIncEulerVariable { /*! * \brief Set all the primitive variables for incompressible flows */ - bool SetPrimVar(unsigned long iPoint, su2double eddy_visc, su2double turb_ke, CFluidModel *FluidModel) override; + bool SetPrimVar(unsigned long iPoint, su2double eddy_visc, su2double turb_ke, CFluidModel *FluidModel, su2double *scalar = nullptr) override; using CVariable::SetPrimVar; /*! diff --git a/SU2_CFD/include/variables/CNSVariable.hpp b/SU2_CFD/include/variables/CNSVariable.hpp index 9450a07916be..64255ef4ab8f 100644 --- a/SU2_CFD/include/variables/CNSVariable.hpp +++ b/SU2_CFD/include/variables/CNSVariable.hpp @@ -147,7 +147,7 @@ class CNSVariable final : public CEulerVariable { /*! * \brief Set all the primitive variables for compressible flows */ - bool SetPrimVar(unsigned long iPoint, su2double eddy_visc, su2double turb_ke, CFluidModel *FluidModel) override; + bool SetPrimVar(unsigned long iPoint, su2double eddy_visc, su2double turb_ke, CFluidModel *FluidModel, su2double *scalar = nullptr) override; using CVariable::SetPrimVar; /*! diff --git a/SU2_CFD/include/variables/CPassiveScalarVariable.hpp b/SU2_CFD/include/variables/CPassiveScalarVariable.hpp new file mode 100644 index 000000000000..deafa6b13ce5 --- /dev/null +++ b/SU2_CFD/include/variables/CPassiveScalarVariable.hpp @@ -0,0 +1,59 @@ +/*! + * \file CPassiveScalarVariable.cpp + * \brief Declaration of the variables of the passive scalar model. + * \author D. Mayer, T. Economon, N. Beishuizen + * \version 7.1.0 "Blackbird" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2020, SU2 Contributors (cf. AUTHORS.md) + * + * SU2 is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * SU2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with SU2. If not, see . + */ + +#pragma once + +#include "CScalarLegacyVariable.hpp" + +/*! + * \class CPassiveScalarVariable + * \brief Main class for defining the variables of the passive scalar model. + * \author T. Economon + */ + +class CPassiveScalarVariable final : public CScalarLegacyVariable { + +private: + +public: + /*! + * \brief Constructor of the class. + * \param[in] val_scalar_inf - Scalar variable value (initialization value). + * \param[in] npoint - Number of points/nodes/vertices in the domain. + * \param[in] ndim - Number of dimensions of the problem. + * \param[in] nvar - Number of variables of the problem. + * \param[in] constants - + * \param[in] config - Definition of the particular problem. + */ + CPassiveScalarVariable(su2double *val_scalar_inf,unsigned long npoint, unsigned long ndim, unsigned long nvar, CConfig *config); + + /*! + * \brief Destructor of the class. + */ + ~CPassiveScalarVariable() = default; + +}; diff --git a/SU2_CFD/include/variables/CScalarLegacyVariable.hpp b/SU2_CFD/include/variables/CScalarLegacyVariable.hpp new file mode 100644 index 000000000000..3d2c9047fac3 --- /dev/null +++ b/SU2_CFD/include/variables/CScalarLegacyVariable.hpp @@ -0,0 +1,124 @@ +/*! + * \file CScalarLegacyVariable.hpp + * \brief Main subroutines defining the variables for the transported scalar model. + * \author D. Mayer, T. Economon + * \version 7.1.1 "Blackbird" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2020, SU2 Contributors (cf. AUTHORS.md) + * + * SU2 is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * SU2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with SU2. If not, see . + */ + +#pragma once + +#include "CVariable.hpp" + +/*! + * \class CScalarLegacyVariable + * \brief Main class for defining the variables of scalar transport eqns. + * \ingroup Scalar_Equations + * \author T. Economon + */ +class CScalarLegacyVariable : public CVariable { +protected: + MatrixType Diffusivity; /*!< \brief Vector of mass diffusivities for scalar transport. */ + + CVectorOfMatrix& Gradient_Reconstruction; /*!< \brief Reference to the gradient of the primitive variables for MUSCL reconstruction for the convective term */ + CVectorOfMatrix Gradient_Aux; /*!< \brief Auxiliary structure to store a second gradient for reconstruction, if required. */ + +public: + /*! + * \brief Constructor of the class. + * \param[in] npoint - Number of points/nodes/vertices in the domain. + * \param[in] ndim - Number of dimensions of the problem. + * \param[in] nvar - Number of variables of the problem. + * \param[in] config - Definition of the particular problem. + */ + CScalarLegacyVariable(unsigned long npoint, unsigned long ndim, unsigned long nvar, CConfig *config); + + /*! + * \brief Destructor of the class. + */ + virtual ~CScalarLegacyVariable() = default; + + /*! + * \brief Set the value of the mass diffusivity + * \param[in] val_diffusivity - the mass diffusivity. + * \param[in] val_ivar - eqn. index to the mass diffusivity. + */ + inline void SetDiffusivity(unsigned long iPoint, + su2double val_diffusivity, + unsigned short val_ivar) { + Diffusivity(iPoint,val_ivar) = val_diffusivity; + } + + /*! + * \brief Get the value of the mass diffusivity + * \param[in] val_ivar - eqn. index to the mass diffusivity. + * \return Value of the mass diffusivity + */ + inline su2double GetDiffusivity(unsigned long iPoint, + unsigned short val_ivar) { + return Diffusivity(iPoint,val_ivar); + } + + /*! + * \brief Get the value of the mass diffusivities + * \return Pointer to the mass diffusivities + */ + inline su2double* GetDiffusivity(unsigned long iPoint) { + return Diffusivity[iPoint]; + } + + /*! + * \brief Get the value of the reconstruction variables gradient at a node. + * \param[in] iPoint - Index of the current node. + * \param[in] iVar - Index of the variable. + * \param[in] iDim - Index of the dimension. + * \return Value of the reconstruction variables gradient at a node. + */ + //inline su2double GetGradient_Reconstruction(unsigned long iPoint, unsigned long iVar, unsigned long iDim) const { + // return Gradient_Reconstruction(iPoint,iVar,iDim); + //} + + /*! + * \brief Get the value of the reconstruction variables gradient at a node. + * \param[in] iPoint - Index of the current node. + * \param[in] iVar - Index of the variable. + * \param[in] iDim - Index of the dimension. + * \param[in] value - Value of the reconstruction gradient component. + */ + //inline void SetGradient_Reconstruction(unsigned long iPoint, unsigned long iVar, unsigned long iDim, su2double value) { + // Gradient_Reconstruction(iPoint,iVar,iDim) = value; + //} + + /*! + * \brief Get the array of the reconstruction variables gradient at a node. + * \param[in] iPoint - Index of the current node. + * \return Array of the reconstruction variables gradient at a node. + */ + inline CMatrixView GetGradient_Reconstruction(unsigned long iPoint) final { return Gradient_Reconstruction[iPoint]; } + + /*! + * \brief Get the reconstruction gradient for primitive variable at all points. + * \return Reference to variable reconstruction gradient. + */ + inline CVectorOfMatrix& GetGradient_Reconstruction(void) final { return Gradient_Reconstruction; } + +}; diff --git a/SU2_CFD/include/variables/CVariable.hpp b/SU2_CFD/include/variables/CVariable.hpp index 0ef4b858a676..60f89f8c52b5 100644 --- a/SU2_CFD/include/variables/CVariable.hpp +++ b/SU2_CFD/include/variables/CVariable.hpp @@ -1203,8 +1203,13 @@ class CVariable { /*! * \brief A virtual member. */ - inline virtual bool SetPrimVar(unsigned long iPoint, su2double eddy_visc, su2double turb_ke, CFluidModel *FluidModel) { return true; } + //inline virtual bool SetPrimVar(unsigned long iPoint, su2double eddy_visc, su2double turb_ke, CFluidModel *FluidModel) { return true; } + /*! + * \brief A virtual member. + */ + inline virtual bool SetPrimVar(unsigned long iPoint, su2double eddy_visc, su2double turb_ke, CFluidModel *FluidModel, su2double *scalar = nullptr) { return true; } + /*! * \brief A virtual member. */ @@ -2168,6 +2173,17 @@ class CVariable { inline virtual su2double GetVortex_Tilting(unsigned long iPoint) const { return 0.0; } + inline virtual su2double GetDiffusivity(unsigned long iPoint, unsigned short val_ivar) { return 0.0; } + inline virtual su2double* GetDiffusivity(unsigned long iPoint) { return NULL; } + + inline virtual void SetSourceScalar(unsigned long iPoint, su2double val_source_scalar, unsigned short val_ivar) { } + inline virtual void SetLookupScalar(unsigned long iPoint, su2double val_lookup_scalar, unsigned short val_ivar) { } + + inline virtual su2double GetScalarSources(unsigned long iPoint, unsigned short val_ivar) { return 0.0; } + inline virtual su2double GetScalarLookups(unsigned long iPoint, unsigned short val_ivar) { return 0.0; } + + inline virtual su2double *GetScalarSources(unsigned long iPoint) { return nullptr; } + inline virtual su2double *GetScalarLookups(unsigned long iPoint) { return nullptr; } /*! * \brief A virtual member: Set the recovered pressure for streamwise periodic flow. * \param[in] iPoint - Point index. diff --git a/SU2_CFD/obj/Makefile.am b/SU2_CFD/obj/Makefile.am index dc03ae41bff7..fb9dd97a5e2a 100644 --- a/SU2_CFD/obj/Makefile.am +++ b/SU2_CFD/obj/Makefile.am @@ -56,6 +56,10 @@ libSU2Core_sources = ../src/definition_structure.cpp \ ../src/fluid/CNEMOGas.cpp \ ../src/fluid/CSU2TCLib.cpp \ ../src/fluid/CMutationTCLib.cpp \ + ../src/CFluidFlamelet.cpp \ + ../src/CLookUpTable.cpp \ + ../src/CFileReaderLUT.cpp \ + ../src/CTrapezoidalMap.cpp \ ../src/integration/CIntegration.cpp \ ../src/integration/CSingleGridIntegration.cpp \ ../src/integration/CMultiGridIntegration.cpp \ @@ -84,6 +88,7 @@ libSU2Core_sources = ../src/definition_structure.cpp \ ../src/numerics/template.cpp \ ../src/numerics/transition.cpp \ ../src/numerics/heat.cpp \ + ../src/numerics/scalar.cpp \ ../src/numerics/radiation.cpp \ ../src/numerics/flow/convection/roe.cpp \ ../src/numerics/flow/convection/fds.cpp \ @@ -112,6 +117,10 @@ libSU2Core_sources = ../src/definition_structure.cpp \ ../src/numerics/turbulent/turb_convection.cpp \ ../src/numerics/turbulent/turb_diffusion.cpp \ ../src/numerics/turbulent/turb_sources.cpp \ + ../src/numerics/flamelet/scalarLegacy_convection.cpp \ + ../src/numerics/flamelet/scalarLegacy_diffusion.cpp \ + ../src/numerics/flamelet/scalarLegacy_sources.cpp \ + ../src/numerics_direct_scalar.cpp \ ../src/numerics/elasticity/CFEAElasticity.cpp \ ../src/numerics/elasticity/CFEALinearElasticity.cpp \ ../src/numerics/elasticity/CFEANonlinearElasticity.cpp \ @@ -185,6 +194,9 @@ libSU2Core_sources = ../src/definition_structure.cpp \ ../src/solvers/CTurbSSTSolver.cpp \ ../src/solvers/CSolverFactory.cpp \ ../src/limiters/CLimiterDetails.cpp \ + ../src/solvers/CFlameletSolver.cpp \ + ../src/solvers/CScalarLegacySolver.cpp \ + ../src/solvers/CPassiveScalarSolver.cpp \ ../src/CMarkerProfileReaderFVM.cpp \ ../src/interfaces/CInterface.cpp \ ../src/interfaces/cfd/CConservativeVarsInterface.cpp \ @@ -211,6 +223,9 @@ libSU2Core_sources = ../src/definition_structure.cpp \ ../src/variables/CIncEulerVariable.cpp \ ../src/variables/CScalarVariable.cpp \ ../src/variables/CTurbVariable.cpp \ + ../src/variables/CScalarLegacyVariable.cpp \ + ../src/variables/CPassiveScalarVariable.cpp \ + ../src/variables/CFlameletVariable.cpp \ ../src/variables/CNSVariable.cpp \ ../src/variables/CNEMOEulerVariable.cpp \ ../src/variables/CNEMONSVariable.cpp \ diff --git a/SU2_CFD/src/drivers/CDriver.cpp b/SU2_CFD/src/drivers/CDriver.cpp index a496ab7a171f..a823a17ad823 100644 --- a/SU2_CFD/src/drivers/CDriver.cpp +++ b/SU2_CFD/src/drivers/CDriver.cpp @@ -81,6 +81,10 @@ #include "../../include/numerics/turbulent/turb_convection.hpp" #include "../../include/numerics/turbulent/turb_diffusion.hpp" #include "../../include/numerics/turbulent/turb_sources.hpp" +#include "../../include/numerics/flamelet/scalarLegacy_convection.hpp" +#include "../../include/numerics/flamelet/scalarLegacy_diffusion.hpp" +#include "../../include/numerics/flamelet/scalarLegacy_sources.hpp" + #include "../../include/numerics/elasticity/CFEAElasticity.hpp" #include "../../include/numerics/elasticity/CFEALinearElasticity.hpp" #include "../../include/numerics/elasticity/CFEANonlinearElasticity.hpp" @@ -1076,6 +1080,9 @@ void CDriver::Inlet_Preprocessing(CSolver ***solver, CGeometry **geometry, if (solver[MESH_0][TURB_SOL]) { solver[MESH_0][TURB_SOL]->LoadInletProfile(geometry, solver, config, val_iter, TURB_SOL, INLET_FLOW); } + if (solver[MESH_0][SCALAR_SOL]) { + solver[MESH_0][SCALAR_SOL]->LoadInletProfile(geometry, solver, config, val_iter, SCALAR_SOL, INLET_FLOW); + } /*--- Exit if profiles were requested for a solver that is not available. ---*/ @@ -1090,7 +1097,7 @@ void CDriver::Inlet_Preprocessing(CSolver ***solver, CGeometry **geometry, /*--- Uniform inlets or python-customized inlets ---*/ /* --- Initialize quantities for inlet boundary - * This routine does not check if they python wrapper is being used to + * This routine does not check if the python wrapper is being used to * set custom boundary conditions. This is intentional; the * default values for python custom BCs are initialized with the default * values specified in the config (avoiding non physical values) --- */ @@ -1099,6 +1106,7 @@ void CDriver::Inlet_Preprocessing(CSolver ***solver, CGeometry **geometry, for(unsigned short iMarker=0; iMarker < config->GetnMarker_All(); iMarker++) { if (solver[iMesh][FLOW_SOL]) solver[iMesh][FLOW_SOL]->SetUniformInlet(config, iMarker); if (solver[iMesh][TURB_SOL]) solver[iMesh][TURB_SOL]->SetUniformInlet(config, iMarker); + if (solver[iMesh][SCALAR_SOL]) solver[iMesh][SCALAR_SOL]->SetUniformInlet(config, iMarker); } } @@ -1211,6 +1219,7 @@ void CDriver::Numerics_Preprocessing(CConfig *config, CGeometry **geometry, CSol nPrimVarGrad_NEMO = 0, nVar_Trans = 0, nVar_Turb = 0, + nVar_Scalar = 0, nVar_Adj_Flow = 0, nVar_Adj_Turb = 0, nVar_FEM = 0, @@ -1226,6 +1235,8 @@ void CDriver::Numerics_Preprocessing(CConfig *config, CGeometry **geometry, CSol bool incompressible = false; bool ideal_gas = (config->GetKind_FluidModel() == STANDARD_AIR) || (config->GetKind_FluidModel() == IDEAL_GAS); bool roe_low_dissipation = (config->GetKind_RoeLowDiss() != NO_ROELOWDISS); + bool is_scalar_model, passive_scalar, progress_variable; + /*--- Initialize some useful booleans ---*/ bool euler, ns, NEMO_euler, NEMO_ns, turbulent, adj_euler, adj_ns, adj_turb, fem_euler, fem_ns, fem_turbulent; @@ -1235,6 +1246,7 @@ void CDriver::Numerics_Preprocessing(CConfig *config, CGeometry **geometry, CSol euler = ns = NEMO_euler = NEMO_ns = turbulent = adj_euler = adj_ns = adj_turb = fem_euler = fem_ns = fem_turbulent = false; spalart_allmaras = neg_spalart_allmaras = e_spalart_allmaras = comp_spalart_allmaras = e_comp_spalart_allmaras = menter_sst = false; fem = heat = transition = template_solver = false; + is_scalar_model = passive_scalar = progress_variable = false; /*--- Assign booleans ---*/ switch (config->GetKind_Solver()) { @@ -1247,7 +1259,8 @@ void CDriver::Numerics_Preprocessing(CConfig *config, CGeometry **geometry, CSol case NAVIER_STOKES: case DISC_ADJ_NAVIER_STOKES: - ns = compressible = true; break; + ns = compressible = true; + is_scalar_model = (config->GetKind_Scalar_Model() != NONE); break; case NEMO_EULER: NEMO_euler = compressible = true; break; @@ -1258,7 +1271,8 @@ void CDriver::Numerics_Preprocessing(CConfig *config, CGeometry **geometry, CSol case RANS: case DISC_ADJ_RANS: ns = compressible = turbulent = true; - transition = (config->GetKind_Trans_Model() == LM); break; + transition = (config->GetKind_Trans_Model() == LM); + is_scalar_model = (config->GetKind_Scalar_Model() != NONE); break; case INC_EULER: case DISC_ADJ_INC_EULER: @@ -1267,13 +1281,15 @@ void CDriver::Numerics_Preprocessing(CConfig *config, CGeometry **geometry, CSol case INC_NAVIER_STOKES: case DISC_ADJ_INC_NAVIER_STOKES: ns = incompressible = true; - heat = config->GetWeakly_Coupled_Heat(); break; + heat = config->GetWeakly_Coupled_Heat(); + is_scalar_model = (config->GetKind_Scalar_Model() != NONE); break; case INC_RANS: case DISC_ADJ_INC_RANS: ns = incompressible = turbulent = true; heat = config->GetWeakly_Coupled_Heat(); - transition = (config->GetKind_Trans_Model() == LM); break; + transition = (config->GetKind_Trans_Model() == LM); + is_scalar_model = (config->GetKind_Scalar_Model() != NONE); break; case FEM_EULER: case DISC_ADJ_FEM_EULER: @@ -1335,7 +1351,17 @@ void CDriver::Numerics_Preprocessing(CConfig *config, CGeometry **geometry, CSol kine_Inf = solver[MESH_0][TURB_SOL]->GetTke_Inf(); omega_Inf = solver[MESH_0][TURB_SOL]->GetOmega_Inf(); } - + + /*--- Assign scalar transport model booleans. ---*/ + + if (is_scalar_model) { + switch (config->GetKind_Scalar_Model()) { + case PASSIVE_SCALAR: passive_scalar = true; break; + case PROGRESS_VARIABLE: progress_variable = true; break; + default: SU2_MPI::Error("Specified scalar transport model unavailable.", CURRENT_FUNCTION); break; + } + } + /*--- Number of variables for the template ---*/ if (template_solver) nVar_Flow = solver[MESH_0][FLOW_SOL]->GetnVar(); @@ -1348,6 +1374,7 @@ void CDriver::Numerics_Preprocessing(CConfig *config, CGeometry **geometry, CSol if (NEMO_ns) nVar_NEMO = solver[MESH_0][FLOW_SOL]->GetnVar(); if (turbulent) nVar_Turb = solver[MESH_0][TURB_SOL]->GetnVar(); if (transition) nVar_Trans = solver[MESH_0][TRANS_SOL]->GetnVar(); + if (is_scalar_model) nVar_Scalar = solver[MESH_0][SCALAR_SOL]->GetnVar(); if (fem_euler) nVar_Flow = solver[MESH_0][FLOW_SOL]->GetnVar(); if (fem_ns) nVar_Flow = solver[MESH_0][FLOW_SOL]->GetnVar(); @@ -1927,6 +1954,55 @@ void CDriver::Numerics_Preprocessing(CConfig *config, CGeometry **geometry, CSol numerics[iMGlevel][TRANS_SOL][conv_bound_term] = new CUpwLin_TransLM(nDim, nVar_Trans, config); } } + + /*--- Solver definition for the scalar transport model problem ---*/ + + if (is_scalar_model) { + + /*--- Definition of the convective scheme for each equation and mesh level ---*/ + + switch (config->GetKind_ConvNumScheme_Scalar()) { + case NONE : + break; + case SPACE_UPWIND : + for (iMGlevel = 0; iMGlevel <= config->GetnMGLevels(); iMGlevel++) { + if (passive_scalar || progress_variable) { + numerics[iMGlevel][SCALAR_SOL][CONV_TERM] = new CUpwSca_transportedScalar_general(nDim, nVar_Scalar, config); + } + } + break; + default : + SU2_MPI::Error("Convective scheme not implemented (scalar transport).", CURRENT_FUNCTION); + break; + } + + /*--- Definition of the viscous scheme for each equation and mesh level ---*/ + + for (iMGlevel = 0; iMGlevel <= config->GetnMGLevels(); iMGlevel++) { + if (passive_scalar || progress_variable){ + if (iMGlevel == MESH_0) numerics[iMGlevel][SCALAR_SOL][VISC_TERM] = new CAvgGrad_transportedScalar_general(nDim, nVar_Scalar, true, config); + else numerics[iMGlevel][SCALAR_SOL][VISC_TERM] = new CAvgGrad_transportedScalar_general(nDim, nVar_Scalar, false, config); + } + } + + /*--- Definition of the source term integration scheme for each equation and mesh level ---*/ + + for (iMGlevel = 0; iMGlevel <= config->GetnMGLevels(); iMGlevel++) { + if (passive_scalar || progress_variable) { + numerics[iMGlevel][SCALAR_SOL][source_first_term] = new CSourcePieceWise_transportedScalar_general(nDim, nVar_Scalar, config); + numerics[iMGlevel][SCALAR_SOL][source_second_term] = new CSourceNothing(nDim, nVar_Scalar, config); + } + } + + /*--- Definition of the boundary condition method ---*/ + + for (iMGlevel = 0; iMGlevel <= config->GetnMGLevels(); iMGlevel++) { + if (passive_scalar || progress_variable) { + numerics[iMGlevel][SCALAR_SOL][CONV_BOUND_TERM] = new CUpwSca_transportedScalar_general(nDim, nVar_Scalar, config); + numerics[iMGlevel][SCALAR_SOL][VISC_BOUND_TERM] = new CAvgGrad_transportedScalar_general(nDim, nVar_Scalar, false, config); + } + } + } /*--- Solver definition of the finite volume heat solver ---*/ if (heat) { @@ -2706,6 +2782,15 @@ void CDriver::Print_DirectResidual(RECORDING kind_recording) { } } + if (configs->GetKind_Scalar_Model() != NONE) { + for (unsigned short iVar = 0; iVar < solvers[SCALAR_SOL]->GetnVar(); iVar++) { + if (!addVals) + RMSTable.AddColumn("rms_Scal" + iVar_iZone2string(iVar, iZone), fieldWidth); + else + RMSTable << log10(solvers[SCALAR_SOL]->GetRes_RMS(iVar)); + } + } + if (!multizone && configs->GetWeakly_Coupled_Heat()){ if (!addVals) RMSTable.AddColumn("rms_Heat" + iVar_iZone2string(0, iZone), fieldWidth); else RMSTable << log10(solvers[HEAT_SOL]->GetRes_RMS(0)); @@ -2845,8 +2930,11 @@ void CFluidDriver::Preprocess(unsigned long Iter) { if(!fsi) { for (iZone = 0; iZone < nZone; iZone++) { if (config_container[iZone]->GetFluidProblem()) { - for (iInst = 0; iInst < nInst[iZone]; iInst++) + for (iInst = 0; iInst < nInst[iZone]; iInst++){ solver_container[iZone][iInst][MESH_0][FLOW_SOL]->SetInitialCondition(geometry_container[iZone][INST_0], solver_container[iZone][iInst], config_container[iZone], Iter); + if (config_container[iZone]->GetKind_Scalar_Model() != NO_SCALAR_MODEL) + solver_container[iZone][iInst][MESH_0][SCALAR_SOL]->SetInitialCondition(geometry_container[iZone][INST_0], solver_container[iZone][iInst], config_container[iZone], Iter); + } } } } diff --git a/SU2_CFD/src/drivers/CMultizoneDriver.cpp b/SU2_CFD/src/drivers/CMultizoneDriver.cpp index 5f38af9880f1..5863743bec41 100644 --- a/SU2_CFD/src/drivers/CMultizoneDriver.cpp +++ b/SU2_CFD/src/drivers/CMultizoneDriver.cpp @@ -247,6 +247,12 @@ void CMultizoneDriver::Preprocess(unsigned long TimeIter) { solver_container[iZone][INST_0], config_container[iZone], TimeIter); } + + if (config_container[iZone]->GetKind_Scalar_Model() != NO_SCALAR_MODEL) + solver_container[iZone][INST_0][MESH_0][SCALAR_SOL]->SetInitialCondition(geometry_container[ZONE_0][INST_0], + solver_container[ZONE_0][INST_0], + config_container[ZONE_0], TimeIter); + } SU2_MPI::Barrier(SU2_MPI::GetComm()); @@ -577,7 +583,11 @@ bool CMultizoneDriver::Transfer_Data(unsigned short donorZone, unsigned short ta case CONJUGATE_HEAT_SF: { donorSolver = HEAT_SOL; - targetSolver = FLOW_SOL; + if ( config_container[FLOW_SOL]->GetKind_Scalar_Model() == PROGRESS_VARIABLE ) + targetSolver = SCALAR_SOL; + else + targetSolver = FLOW_SOL; + break; } case CONJUGATE_HEAT_WEAKLY_SF: diff --git a/SU2_CFD/src/drivers/CSinglezoneDriver.cpp b/SU2_CFD/src/drivers/CSinglezoneDriver.cpp index 1391d91df9e8..1b693e4b44fd 100644 --- a/SU2_CFD/src/drivers/CSinglezoneDriver.cpp +++ b/SU2_CFD/src/drivers/CSinglezoneDriver.cpp @@ -134,6 +134,10 @@ void CSinglezoneDriver::Preprocess(unsigned long TimeIter) { solver_container[ZONE_0][INST_0][MESH_0][FLOW_SOL]->SetInitialCondition(geometry_container[ZONE_0][INST_0], solver_container[ZONE_0][INST_0], config_container[ZONE_0], TimeIter); + if (config_container[ZONE_0]->GetKind_Scalar_Model() != NO_SCALAR_MODEL) + solver_container[ZONE_0][INST_0][MESH_0][SCALAR_SOL]->SetInitialCondition(geometry_container[ZONE_0][INST_0], + solver_container[ZONE_0][INST_0], + config_container[ZONE_0], TimeIter); } else if (config_container[ZONE_0]->GetHeatProblem()) { /*--- Set the initial condition for HEAT equation ---------------------------------------------*/ diff --git a/SU2_CFD/src/fluid/CFluidFlamelet.cpp b/SU2_CFD/src/fluid/CFluidFlamelet.cpp new file mode 100644 index 000000000000..66d533ae24a0 --- /dev/null +++ b/SU2_CFD/src/fluid/CFluidFlamelet.cpp @@ -0,0 +1,193 @@ + +#include "../include/fluid/CFluidFlamelet.hpp" +#include "../include/numerics/CLookUpTable.hpp" + +CFluidFlamelet::CFluidFlamelet(CConfig *config, su2double value_pressure_operating) : CFluidModel() { + +#ifdef HAVE_MPI + MPI_Comm_rank(MPI_COMM_WORLD, &rank); +#endif + + n_scalars = 4; + config->SetNScalars(n_scalars); + + table_scalar_names.resize(n_scalars); + table_scalar_names.at(I_ENTHALPY) = "Enthalpy"; + table_scalar_names.at(I_PROG_VAR) = "ProgVar"; + table_scalar_names.at(I_CO) = "Y-CO"; + table_scalar_names.at(I_NOX) = "Y-NOx"; + + config->SetScalarNames(table_scalar_names); + + n_table_sources = 3; + config->SetNTableSources(n_table_sources); + + table_source_names.resize(n_table_sources); + table_source_names.at(I_SRC_TOT_PROG_VAR) = "ProdRateTot-PV"; + table_source_names.at(I_SRC_TOT_CO) = "ProdRateTot-CO"; + table_source_names.at(I_SRC_TOT_NOX) = "ProdRateTot-NOx"; + + + config->SetTableSourceNames(table_source_names); + + look_up_table = new CLookUpTable(config->GetFileNameLUT(),table_scalar_names.at(I_PROG_VAR),table_scalar_names.at(I_ENTHALPY)); + + n_lookups = config->GetNLookups(); + table_lookup_names.resize(n_lookups); + for (int i_lookup=0; i_lookup < n_lookups; ++i_lookup) { + table_lookup_names.at(i_lookup) = config->GetLookupName(i_lookup); + } + + source_scalar.resize(n_scalars); + lookup_scalar.resize(n_lookups); + + Pressure = value_pressure_operating; +} + +CFluidFlamelet::~CFluidFlamelet() { + + if (look_up_table!=NULL) delete look_up_table; +} + +unsigned long CFluidFlamelet::SetScalarLookups(su2double *val_scalars){ + + su2double enth = val_scalars[I_ENTHALPY]; + su2double prog = val_scalars[I_PROG_VAR]; + + string name_enth = table_scalar_names.at(I_ENTHALPY); + string name_prog = table_scalar_names.at(I_PROG_VAR); + + /* perform table look ups */ + unsigned long exit_code = look_up_table->LookUp_ProgEnth(table_lookup_names, lookup_scalar, prog, enth, name_prog, name_enth); + + return exit_code; +} + +unsigned long CFluidFlamelet::SetScalarSources(su2double *val_scalars){ + + su2double* table_sources = new su2double[n_table_sources]; + vector look_up_tags; + vector look_up_data; + + su2double enth = val_scalars[I_ENTHALPY]; + su2double prog = val_scalars[I_PROG_VAR]; + + string name_enth = table_scalar_names.at(I_ENTHALPY); + string name_prog = table_scalar_names.at(I_PROG_VAR); + + for (int i_source=0; i_source < n_table_sources; ++i_source) { + look_up_tags.push_back(table_source_names.at(i_source)); + look_up_data.push_back(&table_sources[i_source]); + } + + /* perform table look ups */ + unsigned long exit_code = look_up_table->LookUp_ProgEnth(look_up_tags, look_up_data, prog, enth, name_prog, name_enth); + + source_scalar.at(I_ENTHALPY) = 0; + source_scalar.at(I_PROG_VAR) = table_sources[I_SRC_TOT_PROG_VAR]; + source_scalar.at(I_CO) = table_sources[I_SRC_TOT_CO]; + source_scalar.at(I_NOX) = table_sources[I_SRC_TOT_NOX]; + + + /*--- we clip at a small positive value --- */ + if (source_scalar.at(I_PROG_VAR)<1.0e-6){ + // cout << "source term < 0!! (c,h)= "< look_up_tags; + vector look_up_data; + + unsigned long exit_code; + + /* add all quantities and their address to the look up vectors */ + // nijso TODO: check if these exist in the lookup table + look_up_tags.push_back("Temperature"); + look_up_data.push_back(&Temperature); + look_up_tags.push_back("Density"); + look_up_data.push_back(&Density); + look_up_tags.push_back("Cp"); + look_up_data.push_back(&Cp); + look_up_tags.push_back("ViscosityDyn"); + look_up_data.push_back(&Mu); + look_up_tags.push_back("Conductivity"); + look_up_data.push_back(&Kt); + look_up_tags.push_back("Diffusivity"); + look_up_data.push_back(&mass_diffusivity); + look_up_tags.push_back("HeatRelease"); + look_up_data.push_back(&source_energy); + + /* perform table look ups */ + exit_code = look_up_table->LookUp_ProgEnth(look_up_tags,look_up_data, val_prog, val_enth,name_prog,name_enth); + + // nijso: is Cv used somewhere? + // we could check for the existence of molar_weight_mix in the lookup table, and else we just use gamma + // default value is 1.4 + Cv = Cp/1.4; + //Cv = Cp - UNIVERSAL_GAS_CONSTANT / (molar_weight_mix / 1000.); + return exit_code; +} + +unsigned long CFluidFlamelet::GetEnthFromTemp(su2double *val_enth, su2double val_prog, su2double val_temp){ + + su2double delta_temp_final = 0.01 ; /* convergence criterion for temperature in [K] */ + su2double enth_iter = 0. ; /* in CH4/Air flames, 0 is usually a good initial value for the iteration */ + su2double delta_enth; + su2double delta_temp_iter = 1e10; + unsigned long exit_code = 0; + vector look_up_tags; + vector look_up_data; + int counter_limit = 50 ; + string name_prog = table_scalar_names.at(I_PROG_VAR); + string name_enth = table_scalar_names.at(I_ENTHALPY); + + /* set up look up vectors */ + su2double temp_iter; + look_up_tags.push_back("Temperature"); + look_up_data.push_back(&temp_iter); + + su2double cp_iter; + look_up_tags.push_back("Cp"); + look_up_data.push_back(&cp_iter); + + int counter = 0; + while ( (abs(delta_temp_iter) > delta_temp_final) && (counter++ < counter_limit) ){ + + /* look up temperature and heat capacity */ + look_up_table->LookUp_ProgEnth(look_up_tags, look_up_data, val_prog, enth_iter, name_prog, name_enth); + + /* calculate delta_temperature */ + delta_temp_iter = val_temp - temp_iter; + + /* calculate delta_enthalpy following dh = cp * dT */ + delta_enth = cp_iter * delta_temp_iter; + + /* update enthalpy */ + enth_iter += delta_enth; + } + + /* set enthalpy value */ + *val_enth = enth_iter; + + if (counter >= counter_limit) { + exit_code = 1; + + } + + return exit_code; +} diff --git a/SU2_CFD/src/fluid/CFluidModel.cpp b/SU2_CFD/src/fluid/CFluidModel.cpp index bba0cfe72828..7b4f64dcf84d 100644 --- a/SU2_CFD/src/fluid/CFluidModel.cpp +++ b/SU2_CFD/src/fluid/CFluidModel.cpp @@ -37,6 +37,9 @@ #include "../../include/fluid/CPolynomialConductivityRANS.hpp" #include "../../include/fluid/CPolynomialViscosity.hpp" #include "../../include/fluid/CSutherland.hpp" +#include "../../include/fluid/CConstantDiffusivity.hpp" +#include "../../include/fluid/CConstantSchmidtRANS.hpp" +#include "../../include/fluid/CConstantSchmidt.hpp" void CFluidModel::SetLaminarViscosityModel(const CConfig* config) { switch (config->GetKind_ViscosityModel()) { @@ -51,6 +54,12 @@ void CFluidModel::SetLaminarViscosityModel(const CConfig* config) { LaminarViscosity = unique_ptr>( new CPolynomialViscosity(config->GetMu_PolyCoeffND())); break; + case VISCOSITYMODEL::FLAMELET: + /* do nothing. Viscosity is obtained from the table and set in setTDState_T */ + break; + default: + SU2_MPI::Error("Viscosity model not available.", CURRENT_FUNCTION); + break; } } @@ -81,8 +90,33 @@ void CFluidModel::SetThermalConductivityModel(const CConfig* config) { new CPolynomialConductivity(config->GetKt_PolyCoeffND())); } break; + case CONDUCTIVITYMODEL::FLAMELET: + /* do nothing. Conductivity is obtained from the table and set in setTDState_T */ + break; default: SU2_MPI::Error("Conductivity model not available.", CURRENT_FUNCTION); break; } } + +void CFluidModel::SetMassDiffusivityModel (const CConfig* config) { + switch (config->GetKind_DiffusivityModel()) { + case DIFFUSIVITYMODEL::CONSTANT_DIFFUSIVITY: + MassDiffusivity = unique_ptr(new CConstantDiffusivity(config->GetDiffusivity_ConstantND())); + break; + case DIFFUSIVITYMODEL::CONSTANT_SCHMIDT: + if ((config->GetKind_Solver() == RANS) || (config->GetKind_Solver() == DISC_ADJ_RANS)) { + MassDiffusivity = unique_ptr(new CConstantSchmidtRANS(config->GetSchmidt_Lam(),config->GetSchmidt_Turb())); + } else { + MassDiffusivity = unique_ptr(new CConstantSchmidt(config->GetSchmidt_Lam())); + } + break; + case DIFFUSIVITYMODEL::FLAMELET: + /* do nothing. Diffusivity is obtained from the table and set in setTDState_T */ + break; + default: + SU2_MPI::Error("Diffusivity model not available.", CURRENT_FUNCTION); + break; + } + +} diff --git a/SU2_CFD/src/integration/CIntegration.cpp b/SU2_CFD/src/integration/CIntegration.cpp index 3cd69862aca4..bc2b79b4d77c 100644 --- a/SU2_CFD/src/integration/CIntegration.cpp +++ b/SU2_CFD/src/integration/CIntegration.cpp @@ -164,7 +164,7 @@ void CIntegration::Space_Integration(CGeometry *geometry, solver_container[MainSolver]->BC_Custom(geometry, solver_container, conv_bound_numerics, visc_bound_numerics, config, iMarker); break; case CHT_WALL_INTERFACE: - if ((MainSolver == HEAT_SOL) || ((MainSolver == FLOW_SOL) && ((config->GetKind_Regime() == ENUM_REGIME::COMPRESSIBLE) || config->GetEnergy_Equation()))) { + if ((MainSolver == SCALAR_SOL) || (MainSolver == HEAT_SOL) || ((MainSolver == FLOW_SOL) && ((config->GetKind_Regime() == ENUM_REGIME::COMPRESSIBLE) || config->GetEnergy_Equation()))) { solver_container[MainSolver]->BC_ConjugateHeat_Interface(geometry, solver_container, conv_bound_numerics, config, iMarker); } else { diff --git a/SU2_CFD/src/interfaces/cht/CConjugateHeatInterface.cpp b/SU2_CFD/src/interfaces/cht/CConjugateHeatInterface.cpp index 22ecd6ed1143..edb9a3f70deb 100644 --- a/SU2_CFD/src/interfaces/cht/CConjugateHeatInterface.cpp +++ b/SU2_CFD/src/interfaces/cht/CConjugateHeatInterface.cpp @@ -104,6 +104,7 @@ void CConjugateHeatInterface::GetDonor_Variable(CSolver *donor_solution, CGeomet switch (donor_config->GetKind_ConductivityModel()) { case CONDUCTIVITYMODEL::CONSTANT: + case CONDUCTIVITYMODEL::FLAMELET: thermal_conductivity = thermal_conductivityND*donor_config->GetThermal_Conductivity_Ref(); break; diff --git a/SU2_CFD/src/iteration/CDiscAdjFluidIteration.cpp b/SU2_CFD/src/iteration/CDiscAdjFluidIteration.cpp index 98dd20510933..d65358a0be62 100644 --- a/SU2_CFD/src/iteration/CDiscAdjFluidIteration.cpp +++ b/SU2_CFD/src/iteration/CDiscAdjFluidIteration.cpp @@ -40,6 +40,7 @@ void CDiscAdjFluidIteration::Preprocess(COutput* output, CIntegration**** integr const bool dual_time = (dual_time_1st || dual_time_2nd); const bool grid_IsMoving = config[iZone]->GetGrid_Movement(); const bool heat = config[iZone]->GetWeakly_Coupled_Heat(); + bool scalar = (config[iZone]->GetKind_Scalar_Model() != NO_SCALAR_MODEL); auto solvers0 = solver[iZone][iInst][MESH_0]; auto geometries = geometry[iZone][iInst]; @@ -67,6 +68,10 @@ void CDiscAdjFluidIteration::Preprocess(COutput* output, CIntegration**** integr solvers[TURB_SOL]->GetNodes()->Set_Solution_time_n(); solvers[TURB_SOL]->GetNodes()->Set_Solution_time_n1(); } + if (scalar) { + solvers[SCALAR_SOL]->GetNodes()->Set_Solution_time_n(); + solvers[SCALAR_SOL]->GetNodes()->Set_Solution_time_n1(); + } if (heat) { solvers[HEAT_SOL]->GetNodes()->Set_Solution_time_n(); solvers[HEAT_SOL]->GetNodes()->Set_Solution_time_n1(); @@ -94,6 +99,9 @@ void CDiscAdjFluidIteration::Preprocess(COutput* output, CIntegration**** integr if (turbulent) { solvers[TURB_SOL]->GetNodes()->Set_Solution_time_n(); } + if (scalar) { + solvers[SCALAR_SOL]->GetNodes()->Set_Solution_time_n(); + } if (heat) { solvers[HEAT_SOL]->GetNodes()->Set_Solution_time_n(); } @@ -173,6 +181,9 @@ void CDiscAdjFluidIteration::Preprocess(COutput* output, CIntegration**** integr if (turbulent) { solvers[TURB_SOL]->Set_OldSolution(); } + if (scalar) { + solvers[SCALAR_SOL]->Set_OldSolution(); + } if (heat) { solvers[HEAT_SOL]->Set_OldSolution(); } @@ -195,6 +206,10 @@ void CDiscAdjFluidIteration::Preprocess(COutput* output, CIntegration**** integr if (turbulent) { solvers[TURB_SOL]->GetNodes()->SetSolution(iPoint, solvers[TURB_SOL]->GetNodes()->GetSolution_time_n(iPoint)); } + if (scalar) { + solvers[SCALAR_SOL]->GetNodes()->SetSolution( + iPoint, solvers[SCALAR_SOL]->GetNodes()->GetSolution_time_n(iPoint)); + } if (heat) { solvers[HEAT_SOL]->GetNodes()->SetSolution(iPoint, solvers[HEAT_SOL]->GetNodes()->GetSolution_time_n(iPoint)); } @@ -216,6 +231,10 @@ void CDiscAdjFluidIteration::Preprocess(COutput* output, CIntegration**** integr solvers[TURB_SOL]->GetNodes()->Set_Solution_time_n( iPoint, solvers[TURB_SOL]->GetNodes()->GetSolution_Old(iPoint)); } + if (scalar) { + solvers[SCALAR_SOL]->GetNodes()->Set_Solution_time_n( + iPoint, solvers[SCALAR_SOL]->GetNodes()->GetSolution_Old(iPoint)); + } if (heat) { solvers[HEAT_SOL]->GetNodes()->Set_Solution_time_n( iPoint, solvers[HEAT_SOL]->GetNodes()->GetSolution_Old(iPoint)); @@ -239,6 +258,10 @@ void CDiscAdjFluidIteration::Preprocess(COutput* output, CIntegration**** integr solvers[TURB_SOL]->GetNodes()->Set_Solution_time_n( iPoint, solvers[TURB_SOL]->GetNodes()->GetSolution_time_n1(iPoint)); } + if (scalar) { + solvers[SCALAR_SOL]->GetNodes()->Set_Solution_time_n( + iPoint, solvers[SCALAR_SOL]->GetNodes()->GetSolution_time_n1(iPoint)); + } if (heat) { solvers[HEAT_SOL]->GetNodes()->Set_Solution_time_n( iPoint, solvers[HEAT_SOL]->GetNodes()->GetSolution_time_n1(iPoint)); @@ -260,6 +283,10 @@ void CDiscAdjFluidIteration::Preprocess(COutput* output, CIntegration**** integr solvers[TURB_SOL]->GetNodes()->Set_Solution_time_n1( iPoint, solvers[TURB_SOL]->GetNodes()->GetSolution_Old(iPoint)); } + if (scalar) { + solvers[SCALAR_SOL]->GetNodes()->Set_Solution_time_n1( + iPoint, solvers[SCALAR_SOL]->GetNodes()->GetSolution_Old(iPoint)); + } if (heat) { solvers[HEAT_SOL]->GetNodes()->Set_Solution_time_n1( iPoint, solvers[HEAT_SOL]->GetNodes()->GetSolution_Old(iPoint)); @@ -301,6 +328,13 @@ void CDiscAdjFluidIteration::Preprocess(COutput* output, CIntegration**** integr solvers0[ADJHEAT_SOL]->GetNodes()->SetSolution_Direct(iPoint, solvers0[HEAT_SOL]->GetNodes()->GetSolution(iPoint)); END_SU2_OMP_FOR } + if (scalar) { + SU2_OMP_FOR_STAT(1024) + for (auto iPoint = 0ul; iPoint < geometries[MESH_0]->GetnPoint(); iPoint++) { + solvers0[ADJSCALAR_SOL]->GetNodes()->SetSolution_Direct(iPoint, solvers0[SCALAR_SOL]->GetNodes()->GetSolution(iPoint)); + END_SU2_OMP_FOR + } + } if (config[iZone]->AddRadiation()) { SU2_OMP_FOR_STAT(1024) for (auto iPoint = 0ul; iPoint < geometries[MESH_0]->GetnPoint(); iPoint++) @@ -320,6 +354,10 @@ void CDiscAdjFluidIteration::Preprocess(COutput* output, CIntegration**** integr solvers0[ADJHEAT_SOL]->Preprocessing(geometries[MESH_0], solvers0, config[iZone], MESH_0, 0, RUNTIME_ADJHEAT_SYS, false); } + if (scalar) { + solvers0[ADJSCALAR_SOL]->Preprocessing(geometries[MESH_0], solvers0, config[iZone], + MESH_0, 0, RUNTIME_ADJSCALAR_SYS, false); + } if (config[iZone]->AddRadiation()) { solvers0[ADJRAD_SOL]->Preprocessing(geometries[MESH_0], solvers0, config[iZone], MESH_0, 0, RUNTIME_ADJRAD_SYS, false); @@ -343,6 +381,9 @@ void CDiscAdjFluidIteration::LoadUnsteady_Solution(CGeometry**** geometry, CSolv if (turbulent) { solvers[MESH_0][TURB_SOL]->LoadRestart(geometry[iZone][iInst], solvers, config[iZone], DirectIter, false); } + if (scalar) { + solvers[MESH_0][SCALAR_SOL]->LoadRestart(geometry[iZone][iInst], solvers, config[iZone], DirectIter, false); + } if (config[iZone]->GetWeakly_Coupled_Heat()) { solvers[MESH_0][HEAT_SOL]->LoadRestart(geometry[iZone][iInst], solvers, config[iZone], DirectIter, false); } @@ -359,6 +400,10 @@ void CDiscAdjFluidIteration::LoadUnsteady_Solution(CGeometry**** geometry, CSolv solvers[iMesh][TURB_SOL]->SetFreeStream_Solution(config[iZone]); solvers[iMesh][TURB_SOL]->Postprocessing(geometry[iZone][iInst][iMesh], solvers[iMesh], config[iZone], iMesh); } + if (scalar) { + solvers[iMesh][SCALAR_SOL]->SetFreeStream_Solution(config[iZone]); + solvers[iMesh][SCALAR_SOL]->Postprocessing(geometry[iZone][iInst][iMesh], solvers[iMesh], config[iZone], iMesh); + } if (config[iZone]->GetWeakly_Coupled_Heat()) { solvers[iMesh][HEAT_SOL]->SetFreeStream_Solution(config[iZone]); solvers[iMesh][HEAT_SOL]->Postprocessing(geometry[iZone][iInst][iMesh], solvers[iMesh], config[iZone], iMesh); @@ -372,6 +417,8 @@ void CDiscAdjFluidIteration::IterateDiscAdj(CGeometry**** geometry, CSolver***** SU2_OMP_PARALLEL_(if(solver[iZone][iInst][MESH_0][ADJFLOW_SOL]->GetHasHybridParallel())) { + bool scalar = (config[iZone]->GetKind_Scalar_Model() != NO_SCALAR_MODEL); + /*--- Extract the adjoints of the conservative input variables and store them for the next iteration ---*/ if (config[iZone]->GetFluidProblem()) { @@ -390,6 +437,9 @@ void CDiscAdjFluidIteration::IterateDiscAdj(CGeometry**** geometry, CSolver***** solver[iZone][iInst][MESH_0][ADJRAD_SOL]->ExtractAdjoint_Variables(geometry[iZone][iInst][MESH_0], config[iZone]); } + if (scalar) { + solver[iZone][iInst][MESH_0][ADJSCALAR_SOL]->ExtractAdjoint_Solution(geometry[iZone][iInst][MESH_0], config[iZone], CrossTerm); + } } END_SU2_OMP_PARALLEL @@ -400,6 +450,8 @@ void CDiscAdjFluidIteration::InitializeAdjoint(CSolver***** solver, CGeometry*** SU2_OMP_PARALLEL_(if(solver[iZone][iInst][MESH_0][ADJFLOW_SOL]->GetHasHybridParallel())) { + const bool scalar = (config[iZone]->GetKind_Scalar_Model() != NO_SCALAR_MODEL); + /*--- Initialize the adjoints the conservative variables ---*/ if (config[iZone]->GetFluidProblem()) { @@ -414,6 +466,10 @@ void CDiscAdjFluidIteration::InitializeAdjoint(CSolver***** solver, CGeometry*** solver[iZone][iInst][MESH_0][ADJHEAT_SOL]->SetAdjoint_Output(geometry[iZone][iInst][MESH_0], config[iZone]); } + if (scalar) { + solver[iZone][iInst][MESH_0][ADJSCALAR_SOL]->SetAdjoint_Output(geometry[iZone][iInst][MESH_0], config[iZone]); + } + if (config[iZone]->AddRadiation()) { solver[iZone][iInst][MESH_0][ADJRAD_SOL]->SetAdjoint_Output(geometry[iZone][iInst][MESH_0], config[iZone]); } @@ -431,7 +487,10 @@ void CDiscAdjFluidIteration::RegisterInput(CSolver***** solver, CGeometry**** ge SU2_OMP_PARALLEL_(if(solver[iZone][iInst][MESH_0][ADJFLOW_SOL]->GetHasHybridParallel())) { + const bool scalar = (config[iZone]->GetKind_Scalar_Model() != NO_SCALAR_MODEL); + if (kind_recording == RECORDING::SOLUTION_VARIABLES || kind_recording == RECORDING::SOLUTION_AND_MESH) { + /*--- Register flow and turbulent variables as input ---*/ if (config[iZone]->GetFluidProblem()) { @@ -446,6 +505,9 @@ void CDiscAdjFluidIteration::RegisterInput(CSolver***** solver, CGeometry**** ge if (config[iZone]->GetWeakly_Coupled_Heat()) { solver[iZone][iInst][MESH_0][ADJHEAT_SOL]->RegisterSolution(geometry[iZone][iInst][MESH_0], config[iZone]); } + if (scalar) { + solver[iZone][iInst][MESH_0][ADJSCALAR_SOL]->RegisterSolution(geometry[iZone][iInst][MESH_0], config[iZone]); + } if (config[iZone]->AddRadiation()) { solver[iZone][iInst][MESH_0][ADJRAD_SOL]->RegisterSolution(geometry[iZone][iInst][MESH_0], config[iZone]); @@ -474,6 +536,8 @@ void CDiscAdjFluidIteration::SetDependencies(CSolver***** solver, CGeometry**** CConfig** config, unsigned short iZone, unsigned short iInst, RECORDING kind_recording) { + const bool scalar = (config[iZone]->GetKind_Scalar_Model() != NO_SCALAR_MODEL); + if ((kind_recording == RECORDING::MESH_COORDS) || (kind_recording == RECORDING::CLEAR_INDICES) || (kind_recording == RECORDING::SOLUTION_AND_MESH)) { @@ -511,6 +575,16 @@ void CDiscAdjFluidIteration::SetDependencies(CSolver***** solver, CGeometry**** solver[iZone][iInst][MESH_0][HEAT_SOL]->InitiateComms(geometry[iZone][iInst][MESH_0], config[iZone], SOLUTION); solver[iZone][iInst][MESH_0][HEAT_SOL]->CompleteComms(geometry[iZone][iInst][MESH_0], config[iZone], SOLUTION); } + + if (scalar) { + solver[iZone][iInst][MESH_0][SCALAR_SOL]->Preprocessing(geometry[iZone][iInst][MESH_0], solver[iZone][iInst][MESH_0], + config[iZone], MESH_0, NO_RK_ITER, RUNTIME_SCALAR_SYS, true); + solver[iZone][iInst][MESH_0][SCALAR_SOL]->Postprocessing(geometry[iZone][iInst][MESH_0], solver[iZone][iInst][MESH_0], + config[iZone], MESH_0); + solver[iZone][iInst][MESH_0][SCALAR_SOL]->InitiateComms(geometry[iZone][iInst][MESH_0], config[iZone], SOLUTION); + solver[iZone][iInst][MESH_0][SCALAR_SOL]->CompleteComms(geometry[iZone][iInst][MESH_0], config[iZone], SOLUTION); + } + if (config[iZone]->AddRadiation()) { solver[iZone][iInst][MESH_0][RAD_SOL]->Postprocessing(geometry[iZone][iInst][MESH_0], solver[iZone][iInst][MESH_0], config[iZone], MESH_0); @@ -524,6 +598,8 @@ void CDiscAdjFluidIteration::RegisterOutput(CSolver***** solver, CGeometry**** g SU2_OMP_PARALLEL_(if(solver[iZone][iInst][MESH_0][ADJFLOW_SOL]->GetHasHybridParallel())) { + const bool scalar = (config[iZone]->GetKind_Scalar_Model() != NO_SCALAR_MODEL); + /*--- Register conservative variables as output of the iteration ---*/ if (config[iZone]->GetFluidProblem()) { @@ -535,6 +611,9 @@ void CDiscAdjFluidIteration::RegisterOutput(CSolver***** solver, CGeometry**** g if (config[iZone]->GetWeakly_Coupled_Heat()) { solver[iZone][iInst][MESH_0][ADJHEAT_SOL]->RegisterOutput(geometry[iZone][iInst][MESH_0], config[iZone]); } + if (scalar) { + solver[iZone][iInst][MESH_0][ADJSCALAR_SOL]->RegisterOutput(geometry[iZone][iInst][MESH_0], config[iZone]); + } if (config[iZone]->AddRadiation()) { solver[iZone][iInst][MESH_0][ADJRAD_SOL]->RegisterOutput(geometry[iZone][iInst][MESH_0], config[iZone]); } diff --git a/SU2_CFD/src/iteration/CFluidIteration.cpp b/SU2_CFD/src/iteration/CFluidIteration.cpp index 8ee1c5c18d23..7970e7c7e0d7 100644 --- a/SU2_CFD/src/iteration/CFluidIteration.cpp +++ b/SU2_CFD/src/iteration/CFluidIteration.cpp @@ -122,6 +122,21 @@ void CFluidIteration::Iterate(COutput* output, CIntegration**** integration, CGe } } + if (config[val_iZone]->GetKind_Scalar_Model() != NO_SCALAR_MODEL){ + config[val_iZone]->SetGlobalParam(RANS, RUNTIME_SCALAR_SYS); + integration[val_iZone][val_iInst][SCALAR_SOL]->MultiGrid_Iteration(geometry, solver, numerics, config, + RUNTIME_SCALAR_SYS, val_iZone, val_iInst); + + // In case of turbulence, the Turb-Post computes the correct eddy viscosity based on mixture-density and + // mixture lam-visc. In order to get the correct mixture properties, based on the just updated mass-fractions, the + // Flow-Pre has to be called upfront. The updated eddy-visc are copied into the flow-solver Primitive in another + // Flow-Pre call which is done at the start of the next iteration. + if(config[val_iZone]->GetKind_Turb_Model() != TURB_MODEL::NONE) { + solver[val_iZone][val_iInst][MESH_0][FLOW_SOL]->Preprocessing(geometry[val_iZone][val_iInst][MESH_0], solver[val_iZone][val_iInst][MESH_0], config[val_iZone], MESH_0, NO_RK_ITER, RUNTIME_FLOW_SYS, true); + solver[val_iZone][val_iInst][MESH_0][TURB_SOL]->Postprocessing(geometry[val_iZone][val_iInst][MESH_0], solver[val_iZone][val_iInst][MESH_0], config[val_iZone], MESH_0); + } + } + if (config[val_iZone]->GetWeakly_Coupled_Heat()) { config[val_iZone]->SetGlobalParam(RANS, RUNTIME_HEAT_SYS); integration[val_iZone][val_iInst][HEAT_SOL]->SingleGrid_Iteration(geometry, solver, numerics, config, diff --git a/SU2_CFD/src/meson.build b/SU2_CFD/src/meson.build index c9ace58e3d66..ce9883e63515 100644 --- a/SU2_CFD/src/meson.build +++ b/SU2_CFD/src/meson.build @@ -9,7 +9,8 @@ su2_cfd_src += files(['fluid/CFluidModel.cpp', 'fluid/CVanDerWaalsGas.cpp', 'fluid/CNEMOGas.cpp', 'fluid/CMutationTCLib.cpp', - 'fluid/CSU2TCLib.cpp']) + 'fluid/CSU2TCLib.cpp', + 'fluid/CFluidFlamelet.cpp']) su2_cfd_src += files(['output/COutputFactory.cpp', 'output/CAdjElasticityOutput.cpp', @@ -47,7 +48,7 @@ su2_cfd_src += files(['output/COutputFactory.cpp', 'output/filewriter/CParaviewXMLFileWriter.cpp', 'output/filewriter/CParaviewVTMFileWriter.cpp', 'output/filewriter/CSU2MeshFileWriter.cpp', - 'output/filewriter/CCGNSFileWriter.cpp', + 'output/filewriter/CCGNSFileWriter.cpp', 'output/tools/CWindowingTools.cpp']) su2_cfd_src += files(['variables/CIncNSVariable.cpp', @@ -77,7 +78,10 @@ su2_cfd_src += files(['variables/CIncNSVariable.cpp', 'variables/CIncEulerVariable.cpp', 'variables/CEulerVariable.cpp', 'variables/CNEMOEulerVariable.cpp', - 'variables/CNEMONSVariable.cpp']) + 'variables/CNEMONSVariable.cpp', + 'variables/CScalarLegacyVariable.cpp', + 'variables/CPassiveScalarVariable.cpp', + 'variables/CFlameletVariable.cpp']) su2_cfd_src += files(['solvers/CSolverFactory.cpp', 'solvers/CAdjEulerSolver.cpp', @@ -106,7 +110,10 @@ su2_cfd_src += files(['solvers/CSolverFactory.cpp', 'solvers/CTransLMSolver.cpp', 'solvers/CTurbSolver.cpp', 'solvers/CTurbSASolver.cpp', - 'solvers/CTurbSSTSolver.cpp']) + 'solvers/CTurbSSTSolver.cpp', + 'solvers/CScalarLegacySolver.cpp', + 'solvers/CPassiveScalarSolver.cpp', + 'solvers/CFlameletSolver.cpp']) su2_cfd_src += files(['numerics/CNumerics.cpp', 'numerics/template.cpp', @@ -140,10 +147,16 @@ su2_cfd_src += files(['numerics/CNumerics.cpp', 'numerics/turbulent/turb_convection.cpp', 'numerics/turbulent/turb_diffusion.cpp', 'numerics/turbulent/turb_sources.cpp', + 'numerics/flamelet/scalarLegacy_convection.cpp', + 'numerics/flamelet/scalarLegacy_diffusion.cpp', + 'numerics/flamelet/scalarLegacy_sources.cpp', 'numerics/elasticity/CFEAElasticity.cpp', 'numerics/elasticity/CFEALinearElasticity.cpp', 'numerics/elasticity/CFEANonlinearElasticity.cpp', - 'numerics/elasticity/nonlinear_models.cpp']) + 'numerics/elasticity/nonlinear_models.cpp', + 'numerics/CLookUpTable.cpp', + 'numerics/CFileReaderLUT.cpp', + 'numerics/CTrapezoidalMap.cpp']) su2_cfd_src += files(['../include/numerics_simd/CNumericsSIMD.cpp']) diff --git a/SU2_CFD/src/numerics/CFileReaderLUT.cpp b/SU2_CFD/src/numerics/CFileReaderLUT.cpp new file mode 100644 index 000000000000..0bae1c9cdeea --- /dev/null +++ b/SU2_CFD/src/numerics/CFileReaderLUT.cpp @@ -0,0 +1,251 @@ +#include "../include/numerics/CFileReaderLUT.hpp" +#include "../../Common/include/parallelization/mpi_structure.hpp" +#include "../../Common/include/option_structure.hpp" +#include +#include +#include + +using namespace std; + +CFileReaderLUT::CFileReaderLUT() {} + +void CFileReaderLUT::ReadRawDRG(string file_name) { + + version_reader = "1.0.0"; + + /*--- Store MPI rank. ---*/ + + rank = SU2_MPI::GetRank(); + + string line; + string word; + + istringstream stream_names_var; + + ifstream file_stream; + + int ixColon; + + bool eoHeader = false; + bool eoData = false; + bool eoConnectivity = false; + bool eoHull = false; + + file_stream.open(file_name.c_str(), ifstream::in); + + if (!file_stream.is_open()) { + SU2_MPI::Error(string("There is no look-up-table file file called ") + file_name, + CURRENT_FUNCTION); + } + + /* Read header */ + line = SkipToFlag(&file_stream, "
"); + + while (getline(file_stream, line) && !eoHeader) { + /* number of points in LUT */ + if (line.compare("[version]") == 0) { + getline(file_stream, line); + SetVersionLUT(line); + } + + /* number of points in LUT */ + if (line.compare("[number of points]") == 0) { + getline(file_stream, line); + SetNPoints(stoi(line)); + } + + /* number of triangles in LUT */ + if (line.compare("[number of triangles]") == 0) { + getline(file_stream, line); + SetNTriangles(stoi(line)); + } + + /* number of points on the hull */ + if (line.compare("[number of hull points]") == 0) { + getline(file_stream, line); + SetNHullPoints(stoi(line)); + } + + /* number of variables in LUT */ + if (line.compare("[number of variables]") == 0) { + getline(file_stream, line); + SetNVariables(stoi(line)); + } + + /* variable names */ + if (line.compare("[variable names]") == 0) { + + getline(file_stream, line); + stream_names_var.str(line); + while (stream_names_var) { + stream_names_var >> word; + ixColon = (int)word.find(":"); + + PushNameVar(word.substr(ixColon + 1, word.size() - 1)); + } + PopNameVar(); // removes last redundant element + } + + // check if end of header is reached + if (line.compare("
") == 0) eoHeader = true; + } + + // check version_lut + if (version_lut.compare(version_reader) != 0) + SU2_MPI::Error( + "Version conflict between Dragon reader and Dragon library file.", + CURRENT_FUNCTION); + + // check header quantities + if (n_points == 0 || n_triangles == 0 || n_variables == 0 || n_hull_points == 0) + SU2_MPI::Error( + "Number of points, triangles, hull points, or variables in Dragon " + "library header is zero.", CURRENT_FUNCTION); + + // check if number of variables is consistent + if (n_variables != names_var.size()) + SU2_MPI::Error( + "Number of read variables does not match number of " + "variables specified in Dragon " + "library header.", + CURRENT_FUNCTION); + + /* now that n_variables, n_points, n_hull_points and n_variables is available, + * allocate memory */ + if (rank == MASTER_NODE) + cout << "allocating memory for the data" << endl; + AllocMemData(); + + if (rank == MASTER_NODE) + cout << "allocating memory for the triangles" << endl; + AllocMemTriangles(); + + if (rank == MASTER_NODE) + cout << "allocating memory for the hull points" << endl; + AllocMemHull(); + + /* flush any cout */ + if (rank == MASTER_NODE) + cout << endl; + + // read data block + if (rank == MASTER_NODE) + cout << "loading data block" << endl; + + line = SkipToFlag(&file_stream, ""); + + unsigned long pointCounter = 0; + while (getline(file_stream, line) && !eoData) { + // check if end of data is reached + if (line.compare("") == 0) eoData = true; + + if (!eoData) { + + // one line contains values for one point for all variables + istringstream streamDataLine(line); + + // add next line to table array + for (unsigned long iVar = 0; iVar < n_variables; iVar++) { + streamDataLine >> word; + passivedouble tmp = stod(word); + table_data.at(iVar).at(pointCounter) = (su2double) tmp; + } + } + pointCounter++; + } + + if (n_points != pointCounter - 1) + SU2_MPI::Error( + "Number of read points does not match number of points " + "specified in Dragon library header.", CURRENT_FUNCTION); + + // read connectivity + if (rank == MASTER_NODE) + cout << "loading connectivity block" << endl; + + line = SkipToFlag(&file_stream, ""); + + unsigned long triCounter = 0; + while (getline(file_stream, line) && !eoConnectivity) { + // check if end of data is reached + if (line.compare("") == 0) eoConnectivity = true; + + if (!eoConnectivity) { + + // if (rank == MASTER_NODE) + // cout << "\r Reading triangle " << setw(8) << triCounter + 1 << " / " + // << GetNTriangles() << flush; + + // one line contains values for one triangle (3 points) + istringstream streamTriLine(line); + + // add next line to triangles + for (int iPoint = 0; iPoint < 3; iPoint++) { + streamTriLine >> word; + // Dragon table index starts with 1, convert to c++ indexing starting + // with 0: + triangles.at(triCounter).at(iPoint) = stol(word) - 1; + } + } + triCounter++; + } + + if (n_triangles != triCounter - 1) + SU2_MPI::Error( + "Number of read triangles does not match number of points " + "specified in Dragon library header.", + CURRENT_FUNCTION); + + // read hull points + if (rank == MASTER_NODE) + cout << "loading hull block" << endl; + + line = SkipToFlag(&file_stream, ""); + + unsigned long hullCounter = 0; + while (getline(file_stream, line) && !eoHull) { + // check if end of data is reached + if (line.compare("") == 0) eoHull = true; + + if (!eoHull) { + // one line contains one point ID for one point on the hull + istringstream streamHullLine(line); + + streamHullLine >> word; + + // Dragon table indices start with 1, convert to c++ indexing starting + // with 0: + hull.at(hullCounter) = stol(word) - 1; + } + hullCounter++; + } + + if (n_hull_points != hullCounter - 1) + SU2_MPI::Error( + "Number of read hull points does not match number of points " + "specified in Dragon library header.", + CURRENT_FUNCTION); + + // if (rank == MASTER_NODE) + // cout << " done. " << flush << endl; + + file_stream.close(); + + type_lut = "DRG"; + +} + +string CFileReaderLUT::SkipToFlag(ifstream *file_stream, string flag) { + string line; + getline(*file_stream, line); + + while (line.compare(flag) != 0 && !(*file_stream).eof()) { + getline(*file_stream, line); + } + + if ((*file_stream).eof()) + SU2_MPI::Error("Flag not found in file", CURRENT_FUNCTION); + + return line; +} + diff --git a/SU2_CFD/src/numerics/CLookUpTable.cpp b/SU2_CFD/src/numerics/CLookUpTable.cpp new file mode 100644 index 000000000000..45d970e87550 --- /dev/null +++ b/SU2_CFD/src/numerics/CLookUpTable.cpp @@ -0,0 +1,669 @@ +#include "../include/numerics/CLookUpTable.hpp" + +CLookUpTable::CLookUpTable(string var_file_name_lut, string name_prog, string name_enth) { + + file_name_lut = var_file_name_lut; + + rank = SU2_MPI::GetRank(); + + LoadTableRaw(var_file_name_lut); + + FindTableLimits(name_prog,name_enth); + + if (rank == MASTER_NODE) + cout << "Detecting all unique edges and setting edge to triangle connectivity " + "..." << endl; + + IdentifyUniqueEdges(); + + if (rank == MASTER_NODE) cout << " done." << endl; + + PrintTableInfo(); + + if (rank == MASTER_NODE) + cout << "Building a trapezoidal map for the (progress variable, enthalpy) " + "space ..." << endl; + + + //cout << "expecting progress variable at table column " << GetIndexOfVar(name_prog)< > neighborElemsOfPoint; + neighborElemsOfPoint.resize(n_points); + for (unsigned long iElem = 0; iElem < n_triangles; iElem++) { + + /* loop over 3 points per triangle */ + for (unsigned long iPoint = 0; iPoint < N_POINTS_TRIANGLE; iPoint++) { + + /* get the global ID of the current point */ + const unsigned long GlobalIndex = triangles.at(iElem).at(iPoint); + + /* add the current element ID to the neighbor list for this point */ + neighborElemsOfPoint[GlobalIndex].push_back(iElem); + } + } + + /* remove duplicates from the neighboring element lists*/ + vector::iterator vecIt; + for (unsigned long iPoint = 0; iPoint < n_points; iPoint++) { + + /* sort neighboring elements for each point */ + sort(neighborElemsOfPoint[iPoint].begin(), neighborElemsOfPoint[iPoint].end()); + + /* uniquify list of neighboring elements */ + vecIt = unique(neighborElemsOfPoint[iPoint].begin(), neighborElemsOfPoint[iPoint].end()); + + /* adjust size of vector */ + neighborElemsOfPoint[iPoint].resize(vecIt - neighborElemsOfPoint[iPoint].begin()); + } + + /* loop through all neighboring elements of each point and store + the point IDs that are neighboring points */ + vector > neighborPointsOfPoint; + neighborPointsOfPoint.resize(n_points); + for (unsigned long iPoint = 0; iPoint < n_points; iPoint++) { + for (unsigned long iElem = 0; iElem < neighborElemsOfPoint[iPoint].size(); iElem++) { + + /* loop over element points */ + for (unsigned long jPoint = 0; jPoint < N_POINTS_TRIANGLE; jPoint++) { + + /* get the global ID of the current point */ + const unsigned long GlobalIndex = triangles.at(neighborElemsOfPoint[iPoint][iElem]).at(jPoint); + + /* add the current element ID to the neighbor list for this point */ + if (GlobalIndex != iPoint) + neighborPointsOfPoint[iPoint].push_back(GlobalIndex); + + } + } + } + + /* remove duplicates from the neighboring points lists */ + for (unsigned long iPoint = 0; iPoint < n_points; iPoint++) { + + /* sort neighboring points for each point */ + sort(neighborPointsOfPoint[iPoint].begin(), neighborPointsOfPoint[iPoint].end()); + + /* uniquify list of neighboring elements */ + vecIt = unique(neighborPointsOfPoint[iPoint].begin(), neighborPointsOfPoint[iPoint].end()); + + /* adjust size of vector */ + neighborPointsOfPoint[iPoint].resize(vecIt - neighborPointsOfPoint[iPoint].begin()); + } + + /* loop through our point neighbors and fill the vector of the unique + point pairs making up each edge in the grid. We impose a requirement + that the smaller global index is in the first position and the larger + is in the second to make for a unique set, so there's no need to + remove duplicates. */ + for (unsigned long iPoint = 0; iPoint < n_points; iPoint++) { + for (unsigned long jPoint = 0; jPoint < neighborPointsOfPoint[iPoint].size(); jPoint++) { + + /* Store the neighbor index more clearly. */ + const unsigned long GlobalIndex = neighborPointsOfPoint[iPoint][jPoint]; + + /* Store the edge so that the lower index of the pair is always first. */ + if (iPoint < GlobalIndex) { + vector edge(2); + edge[0] = iPoint; + edge[1] = GlobalIndex; + edges.push_back(edge); + } + + } + } + + /* Loop over our edges data structure. For the first point in each + pair, loop through the neighboring elements and store the two + elements that contain the second point in the edge. */ + edge_to_triangle.resize(edges.size()); + for (unsigned long iEdge = 0; iEdge < edges.size(); iEdge++) { + + /* Store the two points of the edge more clearly. */ + const unsigned long iPoint = edges[iEdge][0]; + const unsigned long jPoint = edges[iEdge][1]; + + /* Loop over all neighobring elements to iPoint. */ + for (unsigned long iElem = 0; iElem < neighborElemsOfPoint[iPoint].size(); iElem++) { + + /* loop over 3 points per triangle */ + for (unsigned long kPoint = 0; kPoint < N_POINTS_TRIANGLE; kPoint++) { + + /* Get the global ID of the current point. */ + const unsigned long GlobalIndex = triangles.at(neighborElemsOfPoint[iPoint][iElem]).at(kPoint); + + /* Add the current element ID to the neighbor list for this point. */ + if (GlobalIndex == jPoint) + edge_to_triangle[iEdge].push_back(neighborElemsOfPoint[iPoint][iElem]); + + } + } + } + +} + +void CLookUpTable::ComputeInterpCoeffs(string name_prog, string name_enth) { + + /* build KD tree for enthalpy, progress variable space */ + vector< unsigned long > points(n_points); + vector< su2double > weights(2, 0); + + vector< su2double > prog_enth_pairs(2 * n_points); + + vector< unsigned long > next_triangle; + + const vector &prog = GetData(name_prog); + const vector &enth = GetData(name_enth); + + vector< unsigned long > result_ids; + vector< int > result_ranks; + vector< su2double > best_dist; + + for (unsigned long i_point = 0; i_point < n_points; i_point++) { + + points.push_back(i_point); + + prog_enth_pairs.push_back(prog.at(i_point)); + prog_enth_pairs.push_back(enth.at(i_point)); + } + + /* calculate weights for each triangle (basically a distance function) and + * build inverse interpolation matrices */ + for (unsigned long i_triangle = 0; i_triangle < n_triangles; i_triangle++) { + + next_triangle = triangles.at(i_triangle); + + /* the query point is the weighted average of the vertexes of the triangle */ + weights.at(0) = 0; + weights.at(1) = 0; + + /* enthalpy */ + weights.at(0) += enth.at(next_triangle.at(0)); + weights.at(0) += enth.at(next_triangle.at(1)); + weights.at(0) += enth.at(next_triangle.at(2)); + weights.at(0) /= 3; + + /* progress variable */ + weights.at(1) += prog.at(next_triangle.at(0)); + weights.at(1) += prog.at(next_triangle.at(1)); + weights.at(1) += prog.at(next_triangle.at(2)); + weights.at(1) /= 3; + + interp_points.push_back(next_triangle); + + // Now use the nearest 16 points to construct an interpolation function + // for each search pair option + vector< vector< su2double > > prog_interp_mat_inv(3, vector< su2double >(3,0)); + GetInterpMatInv(prog, enth, next_triangle, prog_interp_mat_inv); + interp_mat_inv_prog_enth.push_back(prog_interp_mat_inv); + + } +} + +void CLookUpTable::GetInterpMatInv(const vector &vec_x, + const vector &vec_y, + vector &point_ids, + vector< vector< su2double > > &interp_mat_inv) { + + vector > interp_mat(3, vector(3, 0)); + + /* setup LHM matrix for the interpolation */ + for (int i_point = 0; i_point < 3; i_point++) { + + su2double x = vec_x.at(point_ids.at(i_point)); + su2double y = vec_y.at(point_ids.at(i_point)); + + interp_mat.at(i_point).at(0) = 1; + interp_mat.at(i_point).at(1) = x; + interp_mat.at(i_point).at(2) = y; + } + + /* invert the Interpolation matrix using Gaussian elimination with pivoting */ + GaussianInverse(interp_mat, interp_mat_inv); + + /* transpose the inverse */ + su2double swap_helper; + for (int i = 0; i < 2; i++) { + for (int j = i + 1; j < 3; j++) { + swap_helper = interp_mat_inv.at(i).at(j); + interp_mat_inv.at(i).at(j) = interp_mat_inv.at(j).at(i); + interp_mat_inv.at(j).at(i) = swap_helper; + } + } + +} + +void CLookUpTable::GaussianInverse(vector< vector< su2double > > &mat, + vector< vector< su2double > > &mat_inv) { + + /* temp provides memory to invert mat */ + vector< vector< su2double > > temp; + + /* number of dimensions of mat */ + int n_dim = (int)mat.size(); + + temp.resize(n_dim, vector< su2double >(2 * n_dim, 0)); + + /* copy original matrix into inverse */ + for (int i = 0; i < n_dim; i++) { + for (int j = 0; j < n_dim; j++) { + temp.at(i).at(j) = mat.at(i).at(j); + temp.at(i).at(n_dim + j) = 0; + } + temp.at(i).at(n_dim + i) = 1; + } + + su2double max_val; + int max_idx; + /* pivot each column such that the largest number possible divides the other + * rows The goal is to avoid zeros or small numbers in division. */ + for (int k = 0; k < n_dim - 1; k++) { + max_idx = k; + max_val = abs(temp.at(k).at(k)); + + /* find largest value (pivot) in column */ + for (int j = k; j < n_dim; j++) { + if (abs(temp.at(j).at(k)) > max_val) { + max_idx = j; + max_val = abs(temp.at(j).at(k)); + } + } + + /* move row with the highest value up */ + for (int j = 0; j < (n_dim * 2); j++) { + su2double d = temp.at(k).at(j); + temp.at(k).at(j) = temp.at(max_idx).at(j); + temp.at(max_idx).at(j) = d; + } + + /* subtract the moved row from all other rows */ + for (int i = k + 1; i < n_dim; i++) { + su2double c = temp.at(i).at(k) / temp.at(k).at(k); + for (int j = 0; j < (n_dim * 2); j++) { + temp.at(i).at(j) = temp.at(i).at(j) - temp.at(k).at(j) * c; + } + } + } + + /* perform back-substitution */ + for (int k = n_dim - 1; k > 0; k--) { + if (temp.at(k).at(k) != 0) { + for (int i = k - 1; i > -1; i--) { + su2double c = temp.at(i).at(k) / temp.at(k).at(k); + for (int j = 0; j < (n_dim * 2); j++) { + temp.at(i).at(j) = temp.at(i).at(j) - temp.at(k).at(j) * c; + } + } + } + } + + /* normalize the inverse */ + for (int i = 0; i < n_dim; i++) { + su2double c = temp.at(i).at(i); + for (int j = 0; j < n_dim; j++) { + temp.at(i).at(j + n_dim) = temp.at(i).at(j + n_dim) / c; + } + } + + /* copy inverse part into mat_inv */ + for (int i = 0; i < n_dim; i++) { + for (int j = 0; j < n_dim; j++) { + mat_inv.at(i).at(j) = temp.at(i).at(j + n_dim); + } + } +} + +unsigned long CLookUpTable::LookUp_ProgEnth(string val_name_var, + su2double *val_var, + su2double val_prog, + su2double val_enth, string name_prog, string name_enth){ + + unsigned long exit_code=0; + + if (val_name_var.compare("NULL") == 0) { + //cout << "variable is null, returning nothing" << endl; + *val_var = 0.0; + exit_code = 0; + return exit_code; + } + + /* check if progress variable and enthalpy value is in table range */ + if ( val_prog >= limits_table_prog[0] && val_prog <= limits_table_prog[1]){ + //&& + //val_enth >= limits_table_enth[0] && val_enth <= limits_table_enth[1] ){ + + /* find the triangle that holds the (prog, enth) point */ + unsigned long id_triangle = trap_map_prog_enth.GetTriangle(val_prog, val_enth); + + if (IsInTriangle(val_prog, val_enth,id_triangle, name_prog, name_enth)) { + + /* get interpolation coefficients for point on triangle */ + vector interp_coeffs(3); + GetInterpCoeffs(val_prog, val_enth, interp_mat_inv_prog_enth.at(id_triangle), interp_coeffs); + + /* DEBUG: */ + vector corner_prog(3, 0); + vector corner_enth(3, 0); + for (int iPoint = 0; iPoint < N_POINTS_TRIANGLE; ++iPoint) { + corner_prog.at(iPoint) = + GetData(name_prog).at(triangles.at(id_triangle).at(iPoint)); + corner_enth.at(iPoint) = + GetData(name_enth).at(triangles.at(id_triangle).at(iPoint)); + } + + *val_var = Interpolate(GetData(val_name_var), (triangles.at(id_triangle)), + interp_coeffs); + exit_code = 0; + } else { + //cout << "lookupprogenth: in bounding box but outside of table!, (c,h)="< &val_names_var, + vector &val_vars, + su2double val_prog, + su2double val_enth, string name_prog,string name_enth) { + + vector look_up_data; + + for (long unsigned int i_var=0; i_var < val_vars.size(); ++i_var) { + look_up_data.push_back(&val_vars[i_var]); + } + + unsigned long exit_code = LookUp_ProgEnth(val_names_var, look_up_data, val_prog, val_enth, name_prog, name_enth); + + return exit_code; +} + +unsigned long CLookUpTable::LookUp_ProgEnth(vector &val_names_var, + vector &val_vars, + su2double val_prog, + su2double val_enth, string name_prog,string name_enth) { + unsigned long exit_code=0; + unsigned long id_triangle; + unsigned long nearest_neighbor; + vector interp_coeffs(3); + + /* check if progress variable value is in progress variable table range + * and if enthalpy is in enthalpy table range */ + if ( val_prog >= limits_table_prog[0] && val_prog <= limits_table_prog[1] && + val_enth >= limits_table_enth[0] && val_enth <= limits_table_enth[1] ){ + + /* if so, try to find the triangle that holds the (prog, enth) point */ + id_triangle = trap_map_prog_enth.GetTriangle(val_prog, val_enth); + + /* check if point is inside a triangle (if table domain is non-rectangular, + * the previous range check might be true but the point is still outside of the domain) */ + if (IsInTriangle(val_prog, val_enth, id_triangle, name_prog, name_enth)) { + + /* if so, get interpolation coefficients for point in the triangle */ + GetInterpCoeffs(val_prog, val_enth, interp_mat_inv_prog_enth.at(id_triangle), interp_coeffs); + + /* exit_code 0 means point was in triangle */ + exit_code = 0; + + } else { + //cout << "lookup_progenth: outside table range, c,h = "<< val_prog<< " "< > &interp_mat_inv, + vector &interp_coeffs) { + + vector query_vector; + query_vector.push_back(1); + query_vector.push_back(val_x); + query_vector.push_back(val_y); + + su2double d; + for (int i = 0; i < 3; i++) { + d = 0; + for (int j = 0; j < 3; j++) { + d = d + interp_mat_inv.at(i).at(j) * query_vector.at(j); + } + interp_coeffs.at(i) = d; + } + +} + +su2double CLookUpTable::Interpolate(const vector &val_samples, + vector &val_triangle, + vector &val_interp_coeffs) { + + su2double result = 0; + su2double z = 0; + + for (int i_point = 0; i_point < N_POINTS_TRIANGLE; i_point++) { + z = val_samples.at(val_triangle.at(i_point)); + result += val_interp_coeffs.at(i_point) * z; + } + + return result; + +} + +unsigned long CLookUpTable::FindNearestNeighborOnHull(su2double val_prog, + su2double val_enth, string name_prog, string name_enth){ + + su2double min_distance = 1.e99; + su2double next_distance = 1.e99; + su2double next_prog_norm; + su2double next_enth_norm; + unsigned long neighbor_id = 0; + + const vector &prog_table = GetData(name_prog); + const vector &enth_table = GetData(name_enth); + + su2double norm_coeff_prog = 1. / (limits_table_prog[1] - limits_table_prog[0]); + su2double norm_coeff_enth = 1. / (limits_table_enth[1] - limits_table_enth[0]); + su2double val_prog_norm = val_prog / (limits_table_prog[1] - limits_table_prog[0]); + su2double val_enth_norm = val_enth / (limits_table_enth[1] - limits_table_enth[0]); + + for (unsigned long i_point = 0; i_point < n_hull_points; ++i_point){ + + next_prog_norm = prog_table.at(hull.at(i_point)) * norm_coeff_prog; + next_enth_norm = enth_table.at(hull.at(i_point)) * norm_coeff_enth; + + next_distance = sqrt( pow(val_prog_norm - next_prog_norm, 2) + + pow(val_enth_norm - next_enth_norm, 2)); + + if (next_distance < min_distance){ + min_distance = next_distance; + neighbor_id = hull.at(i_point); + } + } + return neighbor_id; +} + +bool CLookUpTable::IsInTriangle(su2double val_prog, su2double val_enth, unsigned long val_id_triangle, string name_prog, string name_enth){ + + su2double tri_prog_0 = GetData(name_prog).at(triangles.at(val_id_triangle).at(0)); + su2double tri_enth_0 = GetData(name_enth).at(triangles.at(val_id_triangle).at(0)); + su2double tri_prog_1 = GetData(name_prog).at(triangles.at(val_id_triangle).at(1)); + su2double tri_enth_1 = GetData(name_enth).at(triangles.at(val_id_triangle).at(1)); + su2double tri_prog_2 = GetData(name_prog).at(triangles.at(val_id_triangle).at(2)); + su2double tri_enth_2 = GetData(name_enth).at(triangles.at(val_id_triangle).at(2)); + + su2double area_tri = TriArea(tri_prog_0, tri_enth_0, tri_prog_1, tri_enth_1, tri_prog_2, tri_enth_2); + su2double area_0 = TriArea(val_prog, val_enth, tri_prog_1, tri_enth_1, tri_prog_2, tri_enth_2); + su2double area_1 = TriArea(tri_prog_0, tri_enth_0, val_prog, val_enth, tri_prog_2, tri_enth_2); + su2double area_2 = TriArea(tri_prog_0, tri_enth_0, tri_prog_1, tri_enth_1, val_prog, val_enth ); + + //if ( abs(area_tri - (area_0 + area_1 + area_2)) >= area_tri * 1e-10 ){ + // cout << "id triangle = "< const &samples_x, + vector< su2double > const &samples_y, + vector< vector< unsigned long > > const &edges, + vector< vector< unsigned long > > const &val_edge_to_triangle){ + + int rank = SU2_MPI::GetRank(); + //bool loadmap=false; /* load the trapezoidal map from file */ + clock_t build_start = clock(); + + + //ifstream edgetrianglefile("edge_to_triangle.bin"); + //ifstream edgelimitsxfile("edge_limits_x.bin"); + //ifstream edgelimitsyfile("edge_limits_x.bin"); + //ifstream uniquebandsfile("unique_bands.bin"); + //if (edgetrianglefile){ + // cout << "edge_to_triangle.bin file exists"< > (val_edge_to_triangle); + + unique_bands_x = vector< su2double >(samples_x); + + /* sort x_bands and make them unique */ + sort(unique_bands_x.begin(), unique_bands_x.end()); + + vector< su2double >::iterator iter; + iter = unique(unique_bands_x.begin(), unique_bands_x.end()); + + unique_bands_x.resize(distance(unique_bands_x.begin(), iter)); + + edge_limits_x.resize(edges.size(), vector< su2double >(2, 0)); + edge_limits_y.resize(edges.size(), vector< su2double >(2, 0)); + + /* store x and y values of each edge in a vector for a slight speed up + * as it prevents some uncoalesced accesses */ + for (unsigned long j = 0; j < edges.size(); j++) { + edge_limits_x[j][0] = samples_x[edges[j][0]]; + edge_limits_x[j][1] = samples_x[edges[j][1]]; + edge_limits_y[j][0] = samples_y[edges[j][0]]; + edge_limits_y[j][1] = samples_y[edges[j][1]]; + } + + /* number of bands */ + unsigned long n_bands_x = unique_bands_x.size() - 1; + /* band index */ + unsigned long i_band = 0; + /* number of edges */ + unsigned long n_edges = edges.size(); + /* edge index */ + unsigned long i_edge = 0; + /* counter for edges intersects */ + unsigned long n_intersects = 0; + /* lower and upper x value of each band */ + su2double band_lower_x = 0; + su2double band_upper_x = 0; + + su2double x_0; + su2double y_0; + su2double dy_edge; + su2double dx_edge; + su2double x_band_mid; + + //cout << "y_edge_at_band_mid start, number of x-bands = "<< n_bands_x << endl; + + /* y values of all intersecting edges for every band */ + y_edge_at_band_mid.resize(unique_bands_x.size() - 1); + + /* loop over bands */ + while (i_band < n_bands_x) { + band_lower_x = unique_bands_x[i_band]; + band_upper_x = unique_bands_x[i_band + 1]; + i_edge = 0; + n_intersects = 0; + + /* loop over edges and determine which edges appear in current band */ + while (i_edge < n_edges) { + + /* check if edge intersects the band + * (vertical edges are automatically discarded) */ + if (((edge_limits_x[i_edge][0] <= band_lower_x) and + (edge_limits_x[i_edge][1] >= band_upper_x)) or + ((edge_limits_x[i_edge][1] <= band_lower_x) and + (edge_limits_x[i_edge][0] >= band_upper_x))) { + + y_edge_at_band_mid[i_band].push_back( + make_pair(0.0, 0)); + + x_0 = edge_limits_x[i_edge][0]; + y_0 = edge_limits_y[i_edge][0]; + + dy_edge = edge_limits_y[i_edge][1] - edge_limits_y[i_edge][0]; + dx_edge = edge_limits_x[i_edge][1] - edge_limits_x[i_edge][0]; + x_band_mid = (band_lower_x + band_upper_x) / 2.0; + + y_edge_at_band_mid[i_band][n_intersects].first = + y_0 + dy_edge / dx_edge * (x_band_mid - x_0); + + /* save edge index so it can later be recalled when searching */ + y_edge_at_band_mid[i_band][n_intersects].second = + i_edge; + + n_intersects++; + } + i_edge++; + } + + /* sort edges by their y values. + * note that these y values are unique (i.e. edges cannot + * intersect in a band) */ + sort(y_edge_at_band_mid[i_band].begin(), + y_edge_at_band_mid[i_band].end()); + + i_band++; + } + + su2double duration = ((su2double)clock() - (su2double)build_start) / + ((su2double)CLOCKS_PER_SEC); + + if (rank == MASTER_NODE) + cout << "Construction of trapezoidal map took " << duration << " seconds\n" << endl; + + } + + CTrapezoidalMap::CTrapezoidalMap() { + } + + CTrapezoidalMap::~CTrapezoidalMap(void) {} + +/* +void CTrapezoidalMap::writeVec(void) +{ + const string trapfilename="trapmap.bin"; + + int i,j; + unsigned int size1; + su2double x; + unsigned long y; + cout<<"writing trapezoidal map to file"< >& myVector) +{ + ofstream FILE(path, std::ios::out | std::ofstream::binary); + + // Store size of the outer vector + int s1 = myVector.size(); + FILE.write(reinterpret_cast(&s1), sizeof(s1)); + + // Now write each vector one by one + for (auto& v : myVector) { + // Store its size + int size = v.size(); + FILE.write(reinterpret_cast(&size), sizeof(size)); + + // Store its contents + FILE.write(reinterpret_cast(&v[0]), v.size()*sizeof(su2double)); + } + FILE.close(); +} +*/ + +/* +void CTrapezoidalMap::writeVec3file(string path, vector >& myVector) +{ + ofstream FILE(path, std::ios::out | std::ofstream::binary); + + int s1 = myVector.size(); + FILE.write(reinterpret_cast(&s1), sizeof(s1)); + for (auto& v : myVector) { + int size = v.size(); + FILE.write(reinterpret_cast(&size), sizeof(size)); + FILE.write(reinterpret_cast(&v[0]), v.size()*sizeof(unsigned long)); + } + FILE.close(); +} +*/ + +/* +void CTrapezoidalMap::writeVec1file(string path, vector& myVector) +{ + ofstream FILE(path, std::ios::out | std::ofstream::binary); + + int s1 = myVector.size(); + FILE.write(reinterpret_cast(&s1), sizeof(s1)); + for (auto& v : myVector) { + // Store its contents + FILE.write(reinterpret_cast(&v), sizeof(su2double)); + } + FILE.close(); +} +*/ + +/* +void CTrapezoidalMap::readVec2file(string path, vector >& myVector) +{ + ifstream FILE(path, std::ios::in | std::ifstream::binary); + + int size = 0; + FILE.read(reinterpret_cast(&size), sizeof(size)); + myVector.resize(size); + for (int n = 0; n < size; ++n) { + int size2 = 0; + FILE.read(reinterpret_cast(&size2), sizeof(size2)); + //su2double f; + float f; + for ( int k = 0; k < size2; ++k ) { + FILE.read(reinterpret_cast(&f), sizeof(f)); + myVector[n].push_back(f); + } + } +} +*/ + +/* +void CTrapezoidalMap::readVec3file(string path, vector >& myVector) +{ + ifstream FILE(path, std::ios::in | std::ifstream::binary); + + int size = 0; + FILE.read(reinterpret_cast(&size), sizeof(size)); + myVector.resize(size); + for (int n = 0; n < size; ++n) { + int size2 = 0; + FILE.read(reinterpret_cast(&size2), sizeof(size2)); + //su2double f; + unsigned long f; + for ( int k = 0; k < size2; ++k ) { + FILE.read(reinterpret_cast(&f), sizeof(f)); + myVector[n].push_back(f); + } + } +} +*/ + +/* +void CTrapezoidalMap::readVec4file(string path, vector > >& myVector) +{ + +} +*/ + + +/* +//void CTrapezoidalMap::writeVec4file(string path, vector > >& myVector) +//{ +void writeVec4(std::string filename, std::vector>> dataset){ + // Make a CSV file with one or more columns of integer values + // Each column of data is represented by the pair + // as std::pair> + // The dataset is represented as a vector of these columns + // Note that all columns should be the same size + + // Create an output filestream object + std::ofstream myFile(filename); + + // Send column names to the stream + for(int j = 0; j < dataset.size(); ++j) + { + myFile << dataset.at(j).first; + if(j != dataset.size() - 1) myFile << ","; // No comma at end of line + } + myFile << "\n"; + + // Send data to the stream + for(int i = 0; i < dataset.at(0).second.size(); ++i) + { + for(int j = 0; j < dataset.size(); ++j) + { + myFile << dataset.at(j).second.at(i); + if(j != dataset.size() - 1) myFile << ","; // No comma at end of line + } + myFile << "\n"; + } + + // Close the file + myFile.close(); +} +*/ + +/* +void CTrapezoidalMap::readVec1file(string path, vector& myVector) +{ + ifstream FILE(path, std::ios::in | std::ifstream::binary); + + int size = 0; + FILE.read(reinterpret_cast(&size), sizeof(size)); + //myVector.resize(size); + for (int n = 0; n < size; ++n) { + //int size2 = 0; + //FILE.read(reinterpret_cast(&size2), sizeof(size2)); + su2double f; + //for ( int k = 0; k < size2; ++k ) { + FILE.read(reinterpret_cast(&f), sizeof(f)); + myVector.push_back(f); + } +} +*/ + + unsigned long CTrapezoidalMap::GetTriangle(su2double val_x, su2double val_y) { + + /* find x band in which val_x sits */ + pair band = GetBand(val_x); + + /* within that band, find edges which enclose the (val_x, val_y) point */ + pair edges = GetEdges(band, val_x, val_y); + + /* identify the triangle using the two edges */ + //vector triangles_edge_low = edge_to_triangle->at(edges.first); + //vector triangles_edge_up = edge_to_triangle->at(edges.second); + vector triangles_edge_low = edge_to_triangle.at(edges.first); + vector triangles_edge_up = edge_to_triangle.at(edges.second); + + sort(triangles_edge_low.begin(), triangles_edge_low.end()); + + sort(triangles_edge_up.begin(), triangles_edge_up.end()); + + // The intersection of the faces to which upper or lower belongs is + // the face that both belong to. + vector triangle(1); + set_intersection(triangles_edge_up.begin(), triangles_edge_up.end(), + triangles_edge_low.begin(), triangles_edge_low.end(), + triangle.begin()); + + return triangle.at(0); + } + + pair CTrapezoidalMap::GetBand(su2double val_x) { + su2double x_low; + su2double x_mid; + su2double x_up; + + unsigned long i_low = 0; + unsigned long i_mid = 0; + unsigned long i_up = 0; + + /* start search at table limits */ + i_up = unique_bands_x.size() - 1; + i_low = 0; + + /* check if val_x is in bounds of the table */ + // if (val_x < unique_bands_x.front() or val_x > unique_bands_x.back()) + // SU2_MPI::Error("Table-look-up is out of bounds.", CURRENT_FUNCTION); + + if ( val_x < unique_bands_x.front() ) val_x = unique_bands_x.front(); + if ( val_x > unique_bands_x.back() ) val_x = unique_bands_x.back(); + + /* the next loop implements a binary search and computes i_low and i_up + * which are the band indices that include val_x */ + do { + + i_mid = (i_up + i_low) / 2; + + x_mid = unique_bands_x.at(i_mid); + x_low = unique_bands_x.at(i_low); + x_up = unique_bands_x.at(i_up); + + /* check and restart the search on the low end */ + if ( (val_x < x_low) and (i_low > 0) ) { + + i_up = i_low; + i_low = i_low / 2; + + /* check and restart the search on the upper end */ + } else if ( (val_x > x_up) and (i_up < (unique_bands_x.size() - 1)) ) { + + i_low = i_up; + i_up = (i_up + (unique_bands_x.size() - 1)) / 2; + + /* continue with regular binary search */ + } else if (val_x < x_mid) { + i_up = i_mid; + + } else if (val_x > x_mid) { + i_low = i_mid; + + } else if (x_mid == val_x) { + i_low = i_mid; + i_up = i_low + 1; + break; + } + + } while (i_up - i_low > 1); + + return make_pair(i_low, i_up); +} + +pair< unsigned long, unsigned long > CTrapezoidalMap::GetEdges(pair< unsigned long, unsigned long > val_band, su2double val_x, su2double val_y) { + + su2double next_y; + su2double y_edge_low; + su2double y_edge_up; + su2double x_edge_low; + su2double x_edge_up; + + unsigned long i_band_low = val_band.first; + + unsigned long next_edge; + + unsigned long j_low = 0; + unsigned long j_mid = 0; + unsigned long j_up = 0; + + j_up = y_edge_at_band_mid.at(i_band_low).size() - 1; + j_low = 0; + + while (j_up - j_low > 1) { + + j_mid = (j_up + j_low) / 2; + + // Select the edge associated with the x band (i_band_low) + // Search for the RunEdge in the y direction (second value is index of + // edge) + next_edge = y_edge_at_band_mid.at(i_band_low).at(j_mid).second; + + y_edge_low = edge_limits_y.at(next_edge).at(0); + y_edge_up = edge_limits_y.at(next_edge).at(1); + x_edge_low = edge_limits_x.at(next_edge).at(0); + x_edge_up = edge_limits_x.at(next_edge).at(1); + + // The search variable in j should be interpolated in i as well + next_y = y_edge_low + (y_edge_up - y_edge_low) / (x_edge_up - x_edge_low) * (val_x - x_edge_low); + + if (next_y > val_y) { + j_up = j_mid; + + } else if (next_y < val_y) { + j_low = j_mid; + + } else if (next_y == val_y) { + j_low = j_mid; + j_up = j_low + 1; + break; + } + } + + unsigned long edge_low = y_edge_at_band_mid.at(i_band_low).at(j_low).second; + unsigned long edge_up = y_edge_at_band_mid.at(i_band_low).at(j_up).second; + + return make_pair(edge_low, edge_up); +} diff --git a/SU2_CFD/src/numerics/flamelet/scalarLegacy_convection.cpp b/SU2_CFD/src/numerics/flamelet/scalarLegacy_convection.cpp new file mode 100644 index 000000000000..04e554dc51e4 --- /dev/null +++ b/SU2_CFD/src/numerics/flamelet/scalarLegacy_convection.cpp @@ -0,0 +1,140 @@ +/*! + * \file scalarLegacy_convection.cpp + * \brief Implementation of numerics classes to compute convective + * fluxes in turbulence problems. + * \author F. Palacios, T. Economon + * \version 7.1.1 "Blackbird" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2021, SU2 Contributors (cf. AUTHORS.md) + * + * SU2 is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * SU2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with SU2. If not, see . + */ + +#include "../../../include/numerics/flamelet/scalarLegacy_convection.hpp" +#include "../../../../Common/include/toolboxes/geometry_toolbox.hpp" + +CUpwtransportedScalar::CUpwtransportedScalar(unsigned short val_nDim, + unsigned short val_nVar, + const CConfig* config) : + CNumerics(val_nDim, val_nVar, config), + implicit(config->GetKind_TimeIntScheme_Scalar() == EULER_IMPLICIT), + incompressible(config->GetKind_Regime() == ENUM_REGIME::INCOMPRESSIBLE), + dynamic_grid(config->GetDynamic_Grid()) +{ + Flux = new su2double [nVar]; + Jacobian_i = new su2double* [nVar]; + Jacobian_j = new su2double* [nVar]; + for (unsigned short iVar = 0; iVar < nVar; iVar++) { + Jacobian_i[iVar] = new su2double [nVar]; + Jacobian_j[iVar] = new su2double [nVar]; + } +} + +CUpwtransportedScalar::~CUpwtransportedScalar(void) { + + delete [] Flux; + if (Jacobian_i != nullptr) { + for (unsigned short iVar = 0; iVar < nVar; iVar++) { + delete [] Jacobian_i[iVar]; + delete [] Jacobian_j[iVar]; + } + delete [] Jacobian_i; + delete [] Jacobian_j; + } +} + +CNumerics::ResidualType<> CUpwtransportedScalar::ComputeResidual(const CConfig* config) { + + unsigned short iDim; + + AD::StartPreacc(); + AD::SetPreaccIn(Normal, nDim); + AD::SetPreaccIn(ScalarVar_i, nVar); + AD::SetPreaccIn(ScalarVar_j, nVar); + + if (dynamic_grid) { + AD::SetPreaccIn(GridVel_i, nDim); + AD::SetPreaccIn(GridVel_j, nDim); + } + + ExtraADPreaccIn(); + + Density_i = V_i[nDim+2]; + Density_j = V_j[nDim+2]; + + q_ij = 0.0; + if (dynamic_grid) { + for (iDim = 0; iDim < nDim; iDim++) { + su2double Velocity_i = V_i[iDim+1] - GridVel_i[iDim]; + su2double Velocity_j = V_j[iDim+1] - GridVel_j[iDim]; + q_ij += 0.5*(Velocity_i+Velocity_j)*Normal[iDim]; + } + } + else { + for (iDim = 0; iDim < nDim; iDim++) { + q_ij += 0.5*(V_i[iDim+1]+V_j[iDim+1])*Normal[iDim]; + } + } + + a0 = 0.5*(q_ij+fabs(q_ij)); + a1 = 0.5*(q_ij-fabs(q_ij)); + + FinishResidualCalc(config); + + AD::SetPreaccOut(Flux, nVar); + AD::EndPreacc(); + + return ResidualType<>(Flux, Jacobian_i, Jacobian_j); + +} + +CUpwSca_transportedScalar_general::CUpwSca_transportedScalar_general(unsigned short val_nDim, + unsigned short val_nVar, + const CConfig* config) : + CUpwtransportedScalar(val_nDim, val_nVar, config) { } + +void CUpwSca_transportedScalar_general::ExtraADPreaccIn() { + AD::SetPreaccIn(V_i, nDim+3); + AD::SetPreaccIn(V_j, nDim+3); +} + +void CUpwSca_transportedScalar_general::FinishResidualCalc(const CConfig* config) { + + for (auto iVar = 0u; iVar < nVar; iVar++) { + Flux[iVar] = a0*Density_i*ScalarVar_i[iVar]+a1*Density_j*ScalarVar_j[iVar]; + + if (implicit) { + for (auto jVar = 0u; jVar < nVar; jVar++) { + if (iVar == jVar) { + // note that for transported scalar we multiply by density + Jacobian_i[iVar][jVar] = a0; + Jacobian_j[iVar][jVar] = a1; + } else { + Jacobian_i[iVar][jVar] = 0.0; + Jacobian_j[iVar][jVar] = 0.0; + } + } + } + //Jacobian_i[0][0] = a0; Jacobian_i[0][1] = 0.0; + //Jacobian_i[1][0] = 0.0; Jacobian_i[1][1] = a0; + //Jacobian_j[0][0] = a1; Jacobian_j[0][1] = 0.0; + //Jacobian_j[1][0] = 0.0; Jacobian_j[1][1] = a1; + } + +} diff --git a/SU2_CFD/src/numerics/flamelet/scalarLegacy_diffusion.cpp b/SU2_CFD/src/numerics/flamelet/scalarLegacy_diffusion.cpp new file mode 100644 index 000000000000..6428e88706da --- /dev/null +++ b/SU2_CFD/src/numerics/flamelet/scalarLegacy_diffusion.cpp @@ -0,0 +1,206 @@ +/*! + * \file scalarLegacy_diffusion.cpp + * \brief Implementation of numerics classes to compute viscous + * fluxes in turbulence problems. + * \author F. Palacios, T. Economon + * \version 7.1.1 "Blackbird" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2020, SU2 Contributors (cf. AUTHORS.md) + * + * SU2 is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * SU2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with SU2. If not, see . + */ + +#include "../../../include/numerics/flamelet/scalarLegacy_diffusion.hpp" + +CAvgGrad_transportedScalar::CAvgGrad_transportedScalar(unsigned short val_nDim, + unsigned short val_nVar, + bool correct_grad, + const CConfig* config) : + CNumerics(val_nDim, val_nVar, config), + correct_gradient(correct_grad), + implicit(config->GetKind_TimeIntScheme_Scalar() == EULER_IMPLICIT), + incompressible(config->GetKind_Regime() == ENUM_REGIME::INCOMPRESSIBLE) +{ + Proj_Mean_GradScalarVar_Normal = new su2double [nVar] (); + Proj_Mean_GradScalarVar_Edge = new su2double [nVar] (); + Proj_Mean_GradScalarVar = new su2double [nVar] (); + + Flux = new su2double [nVar] (); + Jacobian_i = new su2double* [nVar]; + Jacobian_j = new su2double* [nVar]; + for (unsigned short iVar = 0; iVar < nVar; iVar++) { + Jacobian_i[iVar] = new su2double [nVar] (); + Jacobian_j[iVar] = new su2double [nVar] (); + } +} + +CAvgGrad_transportedScalar::~CAvgGrad_transportedScalar(void) { + + delete [] Proj_Mean_GradScalarVar_Normal; + delete [] Proj_Mean_GradScalarVar_Edge; + delete [] Proj_Mean_GradScalarVar; + + delete [] Flux; + if (Jacobian_i != nullptr) { + for (unsigned short iVar = 0; iVar < nVar; iVar++) { + delete [] Jacobian_i[iVar]; + delete [] Jacobian_j[iVar]; + } + delete [] Jacobian_i; + delete [] Jacobian_j; + } +} + +CNumerics::ResidualType<> CAvgGrad_transportedScalar::ComputeResidual(const CConfig* config) { + + const bool inc_rans = (config->GetKind_Solver() == INC_RANS) || (config->GetKind_Solver() == DISC_ADJ_INC_RANS); + + unsigned short iVar, iDim; + + AD::StartPreacc(); + AD::SetPreaccIn(Coord_i, nDim); + AD::SetPreaccIn(Coord_j, nDim); + AD::SetPreaccIn(Normal, nDim); + AD::SetPreaccIn(ScalarVar_Grad_i, nVar, nDim); + AD::SetPreaccIn(ScalarVar_Grad_j, nVar, nDim); + AD::SetPreaccIn(Diffusion_Coeff_i, nVar); + AD::SetPreaccIn(Diffusion_Coeff_j, nVar); + + if (correct_gradient) { + AD::SetPreaccIn(ScalarVar_i, nVar); + AD::SetPreaccIn(ScalarVar_j ,nVar); + } + ExtraADPreaccIn(); + + if (incompressible) { + AD::SetPreaccIn(V_i, nDim+6); AD::SetPreaccIn(V_j, nDim+6); + + Density_i = V_i[nDim+2]; Density_j = V_j[nDim+2]; + Laminar_Viscosity_i = V_i[nDim+4]; Laminar_Viscosity_j = V_j[nDim+4]; + if (inc_rans) {Eddy_Viscosity_i = V_i[nDim+5]; Eddy_Viscosity_j = V_j[nDim+5];} + } + else { + AD::SetPreaccIn(V_i, nDim+7); AD::SetPreaccIn(V_j, nDim+7); + + Density_i = V_i[nDim+2]; Density_j = V_j[nDim+2]; + Laminar_Viscosity_i = V_i[nDim+5]; Laminar_Viscosity_j = V_j[nDim+5]; + if (inc_rans) {Eddy_Viscosity_i = V_i[nDim+6]; Eddy_Viscosity_j = V_j[nDim+6];} + } + + /*--- Compute vector going from iPoint to jPoint ---*/ + + dist_ij_2 = 0; proj_vector_ij = 0; + for (iDim = 0; iDim < nDim; iDim++) { + Edge_Vector[iDim] = Coord_j[iDim]-Coord_i[iDim]; + dist_ij_2 += Edge_Vector[iDim]*Edge_Vector[iDim]; + proj_vector_ij += Edge_Vector[iDim]*Normal[iDim]; + } + if (dist_ij_2 == 0.0) proj_vector_ij = 0.0; + else proj_vector_ij = proj_vector_ij/dist_ij_2; + + /*--- Mean gradient approximation ---*/ + for (iVar = 0; iVar < nVar; iVar++) { + Proj_Mean_GradScalarVar_Normal[iVar] = 0.0; + Proj_Mean_GradScalarVar_Edge[iVar] = 0.0; + for (iDim = 0; iDim < nDim; iDim++) { + su2double Mean_GradScalarVar = 0.5*(ScalarVar_Grad_i[iVar][iDim] + + ScalarVar_Grad_j[iVar][iDim]); + + Proj_Mean_GradScalarVar_Normal[iVar] += Mean_GradScalarVar * Normal[iDim]; + + if (correct_gradient) + Proj_Mean_GradScalarVar_Edge[iVar] += Mean_GradScalarVar * Edge_Vector[iDim]; + } + Proj_Mean_GradScalarVar[iVar] = Proj_Mean_GradScalarVar_Normal[iVar]; + if (correct_gradient) { + Proj_Mean_GradScalarVar[iVar] -= Proj_Mean_GradScalarVar_Edge[iVar]*proj_vector_ij - + (ScalarVar_j[iVar]-ScalarVar_i[iVar])*proj_vector_ij; + } + } + + FinishResidualCalc(config); + + AD::SetPreaccOut(Flux, nVar); + AD::EndPreacc(); + + return ResidualType<>(Flux, Jacobian_i, Jacobian_j); + +} + +CAvgGrad_transportedScalar_general::CAvgGrad_transportedScalar_general(unsigned short val_nDim, + unsigned short val_nVar, + bool correct_grad, + const CConfig* config) : + CAvgGrad_transportedScalar(val_nDim, val_nVar, correct_grad, config){ } + + +void CAvgGrad_transportedScalar_general::ExtraADPreaccIn() { + //AD::SetPreaccIn(F1_i); AD::SetPreaccIn(F1_j); +} + +void CAvgGrad_transportedScalar_general::FinishResidualCalc(const CConfig* config) { + + const su2double Sc_t = config->GetSchmidt_Turb(); + const bool inc_rans = (config->GetKind_Solver() == INC_RANS) || (config->GetKind_Solver() == DISC_ADJ_INC_RANS); + const bool flame = (config->GetKind_Scalar_Model() == PROGRESS_VARIABLE); + su2double Mass_Diffusivity_Lam; + + for (auto iVar = 0u; iVar < nVar; iVar++) { + + /*--- Compute the viscous residual. ---*/ + + /* the general diffusion term for species transport is given by: + (rho * D_{i,m} + mu_t/Sc_t ) * grad(Y_i)) + with D_{i,m} the mass diffusion coefficient of species i into the mixture m + */ + + if (flame) + /* --- in case of combustion, Diffusion_Coeff from the lookup table is actually the complete diffusivity rho*D--- */ + Mass_Diffusivity_Lam = 0.5 * (Diffusion_Coeff_i[iVar] + Diffusion_Coeff_j[iVar]); + else + /* --- in case of species transport, Diffusion_Coeff is the binary diffusion coefficient --- */ + Mass_Diffusivity_Lam = 0.5 * (Density_i * Diffusion_Coeff_i[iVar] + Density_j * Diffusion_Coeff_j[iVar]); + + su2double Mass_Diffusivity_Tur = 0.0; + if (inc_rans) + Mass_Diffusivity_Tur = 0.5 * (Eddy_Viscosity_i/Sc_t + Eddy_Viscosity_j/Sc_t); + + su2double Mass_Diffusivity = Mass_Diffusivity_Lam + Mass_Diffusivity_Tur; + + Flux[iVar] = Mass_Diffusivity *Proj_Mean_GradScalarVar[iVar]; + + /*--- Use TSL approx. to compute derivatives of the gradients. ---*/ + + if (implicit) { + for (auto jVar = 0u; jVar < nVar; jVar++) { + if (iVar == jVar) { + su2double proj_on_rho = proj_vector_ij/Density_i; + Jacobian_i[iVar][jVar] = -Mass_Diffusivity*proj_on_rho; + proj_on_rho = proj_vector_ij/Density_j; + Jacobian_j[iVar][jVar] = Mass_Diffusivity*proj_on_rho; + } else { + Jacobian_i[iVar][jVar] = 0.0; + Jacobian_j[iVar][jVar] = 0.0; + } + } + } + } + + +} diff --git a/SU2_CFD/src/numerics/flamelet/scalarLegacy_sources.cpp b/SU2_CFD/src/numerics/flamelet/scalarLegacy_sources.cpp new file mode 100644 index 000000000000..5fc257c3dba1 --- /dev/null +++ b/SU2_CFD/src/numerics/flamelet/scalarLegacy_sources.cpp @@ -0,0 +1,125 @@ +/*! + * \file scalarLegacy_sources.cpp + * \brief Implementation of numerics classes for integration of + * turbulence source-terms. + * \author F. Palacios, T. Economon + * \version 7.1.1 "Blackbird" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2020, SU2 Contributors (cf. AUTHORS.md) + * + * SU2 is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * SU2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with SU2. If not, see . + */ + +#include "../../../include/numerics/flamelet/scalarLegacy_sources.hpp" + +CSourcePieceWise_transportedScalar_general::CSourcePieceWise_transportedScalar_general(unsigned short val_nDim, + unsigned short val_nVar, + const CConfig* config) : + CNumerics(val_nDim, val_nVar, config) { + + incompressible = (config->GetKind_Regime() == ENUM_REGIME::INCOMPRESSIBLE); + axisymmetric = config->GetAxisymmetric(); + viscous = config->GetViscous(); + implicit = (config->GetKind_TimeIntScheme_Scalar() == EULER_IMPLICIT); + flame = (config->GetKind_Scalar_Model() == PROGRESS_VARIABLE); + inc_rans = (config->GetKind_Solver() == INC_RANS) || (config->GetKind_Solver() == DISC_ADJ_INC_RANS); + + Sc_t = config->GetSchmidt_Turb(); + + Residual = new su2double [nVar]; + scalar_sources = new su2double [nVar]; + Jacobian_i = new su2double* [nVar]; + + for (unsigned short iVar = 0; iVar < nVar; iVar++) { + Jacobian_i[iVar] = new su2double [nVar] (); + } +} + +CSourcePieceWise_transportedScalar_general::~CSourcePieceWise_transportedScalar_general(void){ + delete [] Residual; + if (Jacobian_i != nullptr) { + for (unsigned short iVar = 0; iVar < nVar; iVar++) { + delete [] Jacobian_i[iVar]; + } + delete [] Jacobian_i; + } +} + +CNumerics::ResidualType<> CSourcePieceWise_transportedScalar_general::ComputeResidual(const CConfig* config) { + + AD::StartPreacc(); + AD::SetPreaccIn(ScalarVar_i, nVar); + AD::SetPreaccIn(scalar_sources, nVar); + AD::SetPreaccIn(Volume); + + // FIXME dan: the next two lines crashes when I run SU2_CFD_AD on the asym probe case + // AD::SetPreaccIn(ScalarVar_Grad_i, nVar, nDim); + // AD::SetPreaccIn(PrimVar_Grad_i, nDim+1, nDim); + + //if (config->GetKind_Scalar_Model() == PROGRESS_VARIABLE) + // AD::SetPreaccIn(sourcepv_i); + + //unsigned short iDim; + + if (incompressible) { + AD::SetPreaccIn(V_i, nDim+6); + + //Density_i = V_i[nDim+2]; + //Laminar_Viscosity_i = V_i[nDim+4]; + // we do not know if this exists + //Eddy_Viscosity_i = V_i[nDim+5]; + } + else { + AD::SetPreaccIn(V_i, nDim+7); + + //Density_i = V_i[nDim+2]; + //Laminar_Viscosity_i = V_i[nDim+5]; + // we do not know if this exists + //Eddy_Viscosity_i = V_i[nDim+6]; + } + + /*--- Implicit part for production term (to do). ---*/ + for (auto i_var = 0; i_var < nVar; i_var++) { + Residual[i_var] = scalar_sources[i_var] * Volume; + for (auto j_var = 0; j_var < nVar; j_var++) { + Jacobian_i[i_var][j_var] = 0.0; + } + } + // FIXME dan: add source term derivatives to jacobian + //Jacobian[i][j] = dSource_i / dScalar_j + + /*--- Add the production terms to the residuals. ---*/ + + /*--- Contribution due to 2D axisymmetric formulation ---*/ + + if (axisymmetric) ResidualAxisymmetric(); + + /*--- Implicit part ---*/ + + //Jacobian_i[0][0] =0.0;// -beta_star*ScalarVar_i[1]*Volume; + //Jacobian_i[0][1] = 0.0;//-beta_star*ScalarVar_i[0]*Volume; + //Jacobian_i[1][0] = 0.0; + //Jacobian_i[1][1] = 0.0;//-2.0*beta_blended*ScalarVar_i[1]*Volume; + + AD::SetPreaccOut(Residual, nVar); + AD::EndPreacc(); + + return ResidualType<>(Residual, Jacobian_i, nullptr); + +} diff --git a/SU2_CFD/src/numerics/flow/convection/centered.cpp b/SU2_CFD/src/numerics/flow/convection/centered.cpp index 447a27f1a694..993fb2d0b0bb 100644 --- a/SU2_CFD/src/numerics/flow/convection/centered.cpp +++ b/SU2_CFD/src/numerics/flow/convection/centered.cpp @@ -31,6 +31,7 @@ CCentLaxInc_Flow::CCentLaxInc_Flow(unsigned short val_nDim, unsigned short val_nVar, const CConfig* config) : CNumerics(val_nDim, val_nVar, config) { implicit = (config->GetKind_TimeIntScheme_Flow() == EULER_IMPLICIT); + energy = config->GetEnergy_Equation(); variable_density = (config->GetKind_DensityModel() == INC_DENSITYMODEL::VARIABLE); /* A grid is defined as dynamic if there's rigid grid movement or grid deformation AND the problem is time domain */ dynamic_grid = config->GetDynamic_Grid(); diff --git a/SU2_CFD/src/numerics/flow/convection/fds.cpp b/SU2_CFD/src/numerics/flow/convection/fds.cpp index 12c1e7b44c3c..166e81b85f11 100644 --- a/SU2_CFD/src/numerics/flow/convection/fds.cpp +++ b/SU2_CFD/src/numerics/flow/convection/fds.cpp @@ -33,6 +33,7 @@ CUpwFDSInc_Flow::CUpwFDSInc_Flow(unsigned short val_nDim, unsigned short val_nVa implicit = (config->GetKind_TimeIntScheme_Flow() == EULER_IMPLICIT); variable_density = (config->GetKind_DensityModel() == INC_DENSITYMODEL::VARIABLE); energy = config->GetEnergy_Equation(); + flame = (config->GetKind_Scalar_Model() == PROGRESS_VARIABLE); /* A grid is defined as dynamic if there's rigid grid movement or grid deformation AND the problem is time domain */ dynamic_grid = config->GetDynamic_Grid(); @@ -264,7 +265,7 @@ CNumerics::ResidualType<> CUpwFDSInc_Flow::ComputeResidual(const CConfig *config } } - if (!energy) { + if (!energy || flame) { Flux[nDim+1] = 0.0; if (implicit) { for (iVar = 0; iVar < nVar; iVar++) { diff --git a/SU2_CFD/src/numerics/flow/flow_diffusion.cpp b/SU2_CFD/src/numerics/flow/flow_diffusion.cpp index 153f9069562d..9f0a0e0a9f09 100644 --- a/SU2_CFD/src/numerics/flow/flow_diffusion.cpp +++ b/SU2_CFD/src/numerics/flow/flow_diffusion.cpp @@ -537,7 +537,7 @@ CAvgGradInc_Flow::CAvgGradInc_Flow(unsigned short val_nDim, : CAvgGrad_Base(val_nDim, val_nVar, val_nDim+3, val_correct_grad, config) { energy = config->GetEnergy_Equation(); - + flame = (config->GetKind_Scalar_Model() == PROGRESS_VARIABLE); } CNumerics::ResidualType<> CAvgGradInc_Flow::ComputeResidual(const CConfig* config) { @@ -654,7 +654,9 @@ CNumerics::ResidualType<> CAvgGradInc_Flow::ComputeResidual(const CConfig* confi } - if (!energy) { + /*--- in case of combustion we currently overwrite the temperature */ + + if (!energy || flame) { Proj_Flux_Tensor[nDim+1] = 0.0; if (implicit) { for (iVar = 0; iVar < nVar; iVar++) { diff --git a/SU2_CFD/src/numerics/flow/flow_sources.cpp b/SU2_CFD/src/numerics/flow/flow_sources.cpp index 47a48c1e8c22..a287d9713db8 100644 --- a/SU2_CFD/src/numerics/flow/flow_sources.cpp +++ b/SU2_CFD/src/numerics/flow/flow_sources.cpp @@ -245,6 +245,7 @@ CSourceIncAxisymmetric_Flow::CSourceIncAxisymmetric_Flow(unsigned short val_nDim implicit = (config->GetKind_TimeIntScheme_Flow() == EULER_IMPLICIT); energy = config->GetEnergy_Equation(); viscous = config->GetViscous(); + flame = (config->GetKind_Scalar_Model() == PROGRESS_VARIABLE); } @@ -344,7 +345,7 @@ CNumerics::ResidualType<> CSourceIncAxisymmetric_Flow::ComputeResidual(const CCo } - if (!energy) { + if (!energy || flame) { residual[nDim+1] = 0.0; if (implicit) { for (iVar = 0; iVar < nVar; iVar++) { @@ -381,7 +382,7 @@ CNumerics::ResidualType<> CSourceBodyForce::ComputeResidual(const CConfig* confi for (iDim = 0; iDim < nDim; iDim++) residual[iDim+1] = -Volume * U_i[0] * Body_Force_Vector[iDim] / Force_Ref; - /*--- Energy contribution ---*/ + /*--- Body Force contribution ---*/ residual[nDim+1] = 0.0; for (iDim = 0; iDim < nDim; iDim++) diff --git a/SU2_CFD/src/output/CAdjFlowIncOutput.cpp b/SU2_CFD/src/output/CAdjFlowIncOutput.cpp index 3442dcd45981..255181c6a472 100644 --- a/SU2_CFD/src/output/CAdjFlowIncOutput.cpp +++ b/SU2_CFD/src/output/CAdjFlowIncOutput.cpp @@ -34,6 +34,7 @@ CAdjFlowIncOutput::CAdjFlowIncOutput(CConfig *config, unsigned short nDim) : COutput(config, nDim, false) { turb_model = config->GetKind_Turb_Model(); + scalar_model = config->GetKind_Scalar_Model(); heat = config->GetEnergy_Equation(); @@ -137,6 +138,24 @@ void CAdjFlowIncOutput::SetHistoryOutputFields(CConfig *config){ /// DESCRIPTION: Root-mean square residual of the adjoint radiative energy tilde. AddHistoryOutput("RMS_ADJ_RAD_ENERGY", "rms[A_P1]", ScreenOutputFormat::FIXED, "RMS_RES", "Root-mean square residual of the P1 radiative energy.",HistoryFieldType::RESIDUAL); } + + switch (scalar_model) { + case PASSIVE_SCALAR: + AddHistoryOutput("RMS_ADJ_PASSIVE_SCALAR", "rms[A_c]", ScreenOutputFormat::FIXED, "RMS_RES", "Root-mean squared residual of the adjoint passive scalar equation.", HistoryFieldType::RESIDUAL); + break; + case PROGRESS_VARIABLE: + // DESCRIPTION: Root-mean square residual of the adjoint progress variable. + AddHistoryOutput("RMS_ADJ_PROGRESS_VARIABLE", "rms[A_prog]", ScreenOutputFormat::FIXED, "RMS_RES", "Root-mean square residual of the adjoint progress variable.", HistoryFieldType::RESIDUAL); + // DESCRIPTION: Root-mean square residual of the adjoint enthalpy. + AddHistoryOutput("RMS_ADJ_ENTHALPY", "rms[A_enth]", ScreenOutputFormat::FIXED, "RMS_RES", "Root-mean square residual of the adjoint enthalpy.", HistoryFieldType::RESIDUAL); + // DESCRIPTION: Root-mean square residual of the adjoint CO mass fraction. + AddHistoryOutput("RMS_ADJ_CO", "rms[A_CO]", ScreenOutputFormat::FIXED, "RMS_RES", "Root-mean square residual of the adjoint CO.", HistoryFieldType::RESIDUAL); + // DESCRIPTION: Root-mean square residual of the adjoint NOx mass fraction. + AddHistoryOutput("RMS_ADJ_NOX", "rms[A_NOX]", ScreenOutputFormat::FIXED, "RMS_RES", "Root-mean square residual of the adjoint NOx.", HistoryFieldType::RESIDUAL); + break; + case NO_SCALAR_MODEL: + break; + } /// END_GROUP /// BEGIN_GROUP: MAX_RES, DESCRIPTION: The maximum residuals of the SOLUTION variables. @@ -234,6 +253,7 @@ void CAdjFlowIncOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CS CSolver* adjheat_solver = solver[ADJHEAT_SOL]; CSolver* adjrad_solver = solver[ADJRAD_SOL]; CSolver* mesh_solver = solver[MESH_SOL]; + CSolver* adjscalar_solver = solver[ADJSCALAR_SOL]; SetHistoryOutputValue("RMS_ADJ_PRESSURE", log10(adjflow_solver->GetRes_RMS(0))); SetHistoryOutputValue("RMS_ADJ_VELOCITY-X", log10(adjflow_solver->GetRes_RMS(1))); @@ -263,6 +283,25 @@ void CAdjFlowIncOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CS if (config->AddRadiation()){ SetHistoryOutputValue("RMS_ADJ_RAD_ENERGY", log10(adjrad_solver->GetRes_RMS(0))); } + + switch (scalar_model) { + case PASSIVE_SCALAR: + SetHistoryOutputValue("RMS_ADJ_PASSIVE_SCALAR", log10(adjscalar_solver->GetRes_RMS(0))); + break; + case PROGRESS_VARIABLE: + // DESCRIPTION: Root-mean square residual of the adjoint progress variable. + SetHistoryOutputValue("RMS_ADJ_PROGRESS_VARIABLE", log10(adjscalar_solver->GetRes_RMS(I_PROG_VAR))); + // DESCRIPTION: Root-mean square residual of the adjoint enthalpy. + SetHistoryOutputValue("RMS_ADJ_ENTHALPY", log10(adjscalar_solver->GetRes_RMS(I_ENTHALPY))); + // DESCRIPTION: Root-mean square residual of the adjoint CO mass fraction. + SetHistoryOutputValue("RMS_ADJ_CO", log10(adjscalar_solver->GetRes_RMS(I_CO))); + // DESCRIPTION: Root-mean square residual of the adjoint NOx mass fraction. + SetHistoryOutputValue("RMS_ADJ_NOX", log10(adjscalar_solver->GetRes_RMS(I_NOX))); + break; + case NO_SCALAR_MODEL: + break; + } + SetHistoryOutputValue("MAX_ADJ_PRESSURE", log10(adjflow_solver->GetRes_Max(0))); SetHistoryOutputValue("MAX_ADJ_VELOCITY-X", log10(adjflow_solver->GetRes_Max(1))); SetHistoryOutputValue("MAX_ADJ_VELOCITY-Y", log10(adjflow_solver->GetRes_Max(2))); @@ -385,6 +424,25 @@ void CAdjFlowIncOutput::SetVolumeOutputFields(CConfig *config){ } /// END_GROUP + // Scalars + switch (scalar_model) { + case PASSIVE_SCALAR: + AddVolumeOutput("ADJ_PASSIVE_SCALAR", "Adjoint_Scalar", "SOLUTION", "Adjoint scalar"); + break; + case PROGRESS_VARIABLE: + // DESCRIPTION: Adjoint progress variable. + AddVolumeOutput("ADJ_PROGRESS_VARIABLE", "Adjoint_Progress_Variable", "SOLUTION", "Adjoint progress variable"); + // DESCRIPTION: Adjoint enthalpy. + AddVolumeOutput("ADJ_ENTHALPY", "Adjoint_Enthalpy", "SOLUTION", "Adjoint enthalpy"); + // DESCRIPTION: Adjoint CO mass fraction. + AddVolumeOutput("ADJ_CO", "Adjoint_CO", "SOLUTION", "Adjoint CO"); + // DESCRIPTION: Adjoint NOx mass fraction. + AddVolumeOutput("ADJ_NOX", "Adjoint_NOx", "SOLUTION", "Adjoint NOx"); + break; + case NO_SCALAR_MODEL: + break; + } + // Grid velocity if (config->GetDynamic_Grid()){ AddVolumeOutput("GRID_VELOCITY-X", "Grid_Velocity_x", "GRID_VELOCITY", "x-component of the grid velocity vector"); @@ -425,6 +483,25 @@ void CAdjFlowIncOutput::SetVolumeOutputFields(CConfig *config){ } /// END_GROUP + // Scalars + switch (scalar_model) { + case PASSIVE_SCALAR: + AddVolumeOutput("RES_ADJ_PASSIVE_SCALAR", "Residual_Adjoint_Scalar", "RESIDUAL", "Residual of adjoint scalar"); + break; + case PROGRESS_VARIABLE: + // DESCRIPTION: Adjoint progress variable. + AddVolumeOutput("RES_ADJ_PROGRESS_VARIABLE", "Residual_Adjoint_Progress_Variable", "RESIDUAL", "Residual of adjoint progress variable"); + // DESCRIPTION: Adjoint enthalpy. + AddVolumeOutput("RES_ADJ_ENTHALPY", "Residual_djoint_Enthalpy", "RESIDUAL", "Residual of adjoint enthalpy"); + // DESCRIPTION: Adjoint CO mass fraction. + AddVolumeOutput("RES_ADJ_CO", "Residual_Adjoint_CO", "RESIDUAL", "Residual of adjoint CO"); + // DESCRIPTION: Adjoint NOx mass fraction. + AddVolumeOutput("RES_ADJ_NOX", "Residual_Adjoint_NOx", "RESIDUAL", "Residual of adjoint NOx"); + break; + case NO_SCALAR_MODEL: + break; + } + /// BEGIN_GROUP: SENSITIVITY, DESCRIPTION: Geometrical sensitivities of the current objective function. /// DESCRIPTION: Sensitivity x-component. AddVolumeOutput("SENSITIVITY-X", "Sensitivity_x", "SENSITIVITY", "x-component of the sensitivity vector"); @@ -445,6 +522,7 @@ void CAdjFlowIncOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, CSo CVariable* Node_AdjHeat = nullptr; CVariable* Node_AdjTurb = nullptr; CVariable* Node_AdjRad = nullptr; + CVariable* Node_AdjScalar = nullptr; CPoint* Node_Geo = geometry->nodes; if ((turb_model != TURB_MODEL::NONE) && !frozen_visc){ @@ -457,6 +535,18 @@ void CAdjFlowIncOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, CSo Node_AdjRad = solver[ADJRAD_SOL]->GetNodes(); } + // Scalars + switch (scalar_model) { + case PASSIVE_SCALAR: + Node_AdjScalar = solver[ADJSCALAR_SOL]->GetNodes(); + break; + case PROGRESS_VARIABLE: + Node_AdjScalar = solver[ADJSCALAR_SOL]->GetNodes(); + break; + case NO_SCALAR_MODEL: + break; + } + SetVolumeOutputValue("COORD-X", iPoint, Node_Geo->GetCoord(iPoint, 0)); SetVolumeOutputValue("COORD-Y", iPoint, Node_Geo->GetCoord(iPoint, 1)); if (nDim == 3) @@ -495,6 +585,26 @@ void CAdjFlowIncOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, CSo SetVolumeOutputValue("ADJ_P1_ENERGY", iPoint, Node_AdjRad->GetSolution(iPoint, 0)); } + // Scalars + switch (scalar_model) { + case PASSIVE_SCALAR: + /// DESCRIPTION: Adjoint transported scalar + SetVolumeOutputValue("ADJ_PASSIVE_SCALAR", iPoint, Node_AdjScalar->GetSolution(iPoint, 0)); + break; + case PROGRESS_VARIABLE: + /// DESCRIPTION: Adjoint progress variable. + SetVolumeOutputValue("ADJ_PROGRESS_VARIABLE", iPoint, Node_AdjScalar->GetSolution(iPoint, I_PROG_VAR)); + /// DESCRIPTION: Adjoint enthalpy. + SetVolumeOutputValue("ADJ_ENTHALPY", iPoint, Node_AdjScalar->GetSolution(iPoint, I_ENTHALPY)); + /// DESCRIPTION: Adjoint CO mass fraction. + SetVolumeOutputValue("ADJ_CO", iPoint, Node_AdjScalar->GetSolution(iPoint, I_CO)); + /// DESCRIPTION: Adjoint NO mass fraction. + SetVolumeOutputValue("ADJ_NOX", iPoint, Node_AdjScalar->GetSolution(iPoint, I_NOX)); + break; + case NO_SCALAR_MODEL: + break; + } + // Residuals SetVolumeOutputValue("RES_ADJ_PRESSURE", iPoint, Node_AdjFlow->GetSolution(iPoint, 0) - Node_AdjFlow->GetSolution_Old(iPoint, 0)); SetVolumeOutputValue("RES_ADJ_VELOCITY-X", iPoint, Node_AdjFlow->GetSolution(iPoint, 1) - Node_AdjFlow->GetSolution_Old(iPoint, 1)); @@ -522,6 +632,26 @@ void CAdjFlowIncOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, CSo SetVolumeOutputValue("RES_P1_ENERGY", iPoint, Node_AdjRad->GetSolution(iPoint, 0) - Node_AdjRad->GetSolution_Old(iPoint, 0)); } + // Scalars + switch (scalar_model) { + case PASSIVE_SCALAR: + /// DESCRIPTION: Adjoint transported scalar + SetVolumeOutputValue("RES_ADJ_PASSIVE_SCALAR", iPoint, Node_AdjScalar->GetSolution(iPoint, 0)- Node_AdjScalar->GetSolution_Old(iPoint, 0)); + break; + case PROGRESS_VARIABLE: + /// DESCRIPTION: Adjoint progress variable. + SetVolumeOutputValue("RES_ADJ_PROGRESS_VARIABLE", iPoint, Node_AdjScalar->GetSolution(iPoint, I_PROG_VAR) - Node_AdjScalar->GetSolution_Old(iPoint, I_PROG_VAR)); + /// DESCRIPTION: Adjoint enthalpy. + SetVolumeOutputValue("RES_ADJ_ENTHALPY", iPoint, Node_AdjScalar->GetSolution(iPoint, I_ENTHALPY)- Node_AdjScalar->GetSolution_Old(iPoint, I_ENTHALPY)); + /// DESCRIPTION: Adjoint CO mass fraction. + SetVolumeOutputValue("RES_ADJ_CO", iPoint, Node_AdjScalar->GetSolution(iPoint, I_CO)- Node_AdjScalar->GetSolution_Old(iPoint, I_CO)); + /// DESCRIPTION: Adjoint NO mass fraction. + SetVolumeOutputValue("RES_ADJ_NOX", iPoint, Node_AdjScalar->GetSolution(iPoint, I_NOX)- Node_AdjScalar->GetSolution_Old(iPoint, I_NOX)); + break; + case NO_SCALAR_MODEL: + break; + } + SetVolumeOutputValue("SENSITIVITY-X", iPoint, Node_AdjFlow->GetSensitivity(iPoint, 0)); SetVolumeOutputValue("SENSITIVITY-Y", iPoint, Node_AdjFlow->GetSensitivity(iPoint, 1)); if (nDim == 3) diff --git a/SU2_CFD/src/output/CFlowCompFEMOutput.cpp b/SU2_CFD/src/output/CFlowCompFEMOutput.cpp index 7a55e42f33f0..0c90d95ac164 100644 --- a/SU2_CFD/src/output/CFlowCompFEMOutput.cpp +++ b/SU2_CFD/src/output/CFlowCompFEMOutput.cpp @@ -262,7 +262,7 @@ void CFlowCompFEMOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, C /*--- Set the analyse surface history values --- */ - SetAnalyzeSurface(flow_solver, geometry, config, false); + SetAnalyzeSurface(solver, geometry, config, false); /*--- Set aeroydnamic coefficients --- */ diff --git a/SU2_CFD/src/output/CFlowCompOutput.cpp b/SU2_CFD/src/output/CFlowCompOutput.cpp index 6ccf9c70fbb0..70e81b7bfef4 100644 --- a/SU2_CFD/src/output/CFlowCompOutput.cpp +++ b/SU2_CFD/src/output/CFlowCompOutput.cpp @@ -33,6 +33,7 @@ CFlowCompOutput::CFlowCompOutput(const CConfig *config, unsigned short nDim) : CFlowOutput(config, nDim, false) { turb_model = config->GetKind_Turb_Model(); + scalar_model = config->GetKind_Scalar_Model(); /*--- Set the default history fields if nothing is set in the config file ---*/ @@ -130,6 +131,13 @@ void CFlowCompOutput::SetHistoryOutputFields(CConfig *config){ break; case TURB_MODEL::NONE: break; } + + switch(scalar_model){ + case PASSIVE_SCALAR: + AddHistoryOutput("RMS_PASSIVE_SCALAR", "rms[c]", ScreenOutputFormat::FIXED, "RMS_RES", "Root-mean squared residual of the passive scalar equation.", HistoryFieldType::RESIDUAL); + break; + default: break; + } /// END_GROUP /// BEGIN_GROUP: MAX_RES, DESCRIPTION: The maximum residuals of the SOLUTION variables. @@ -157,6 +165,13 @@ void CFlowCompOutput::SetHistoryOutputFields(CConfig *config){ break; case TURB_MODEL::NONE: break; } + + switch(scalar_model){ + case PASSIVE_SCALAR: + AddHistoryOutput("MAX_PASSIVE_SCALAR", "max[c]", ScreenOutputFormat::FIXED, "MAX_RES", "Maximum residual of the passive scalar equation.", HistoryFieldType::RESIDUAL); + break; + default: break; + } /// END_GROUP /// BEGIN_GROUP: BGS_RES, DESCRIPTION: The block Gauss Seidel residuals of the SOLUTION variables. @@ -184,6 +199,13 @@ void CFlowCompOutput::SetHistoryOutputFields(CConfig *config){ break; case TURB_MODEL::NONE: break; } + + switch(scalar_model){ + case PASSIVE_SCALAR: + AddHistoryOutput("BGS_PASSIVE_SCALAR", "bgs[c]", ScreenOutputFormat::FIXED, "BGS_RES", "BGS residual of the passive scalar equation.", HistoryFieldType::RESIDUAL); + break; + default: break; + } /// END_GROUP vector Marker_Monitoring; @@ -313,7 +335,15 @@ void CFlowCompOutput::SetVolumeOutputFields(CConfig *config){ case TURB_MODEL::NONE: break; } - + + switch(scalar_model){ + case PASSIVE_SCALAR: + AddVolumeOutput("PASSIVE_SCALAR", "Passive_Scalar", "SOLUTION", "Passive scalar solution"); + break; + case NO_SCALAR_MODEL: + break; + } + // Grid velocity if (gridMovement){ AddVolumeOutput("GRID_VELOCITY-X", "Grid_Velocity_x", "GRID_VELOCITY", "x-component of the grid velocity vector"); @@ -369,6 +399,14 @@ void CFlowCompOutput::SetVolumeOutputFields(CConfig *config){ case TURB_MODEL::NONE: break; } + + switch(scalar_model){ + case PASSIVE_SCALAR: + AddVolumeOutput("RES_PASSIVE_SCALAR", "Residual_Passive_Scalar", "RESIDUAL", "Residual of passive scalar equation"); + break; + case NO_SCALAR_MODEL: + break; + } if (config->GetKind_SlopeLimit_Flow() != NO_LIMITER && config->GetKind_SlopeLimit_Flow() != VAN_ALBADA_EDGE) { AddVolumeOutput("LIMITER_VELOCITY-X", "Limiter_Velocity_x", "LIMITER", "Limiter value of the x-velocity"); @@ -396,6 +434,14 @@ void CFlowCompOutput::SetVolumeOutputFields(CConfig *config){ } } + switch(scalar_model){ + case PASSIVE_SCALAR: + AddVolumeOutput("LIMITER_PASSIVE_SCALAR", "Limiter_Passive_Scalar", "LIMITER", "Limiter value for the passive scalar"); + break; + case NO_SCALAR_MODEL: + break; + } + // Hybrid RANS-LES if (config->GetKind_HybridRANSLES() != NO_HYBRIDRANSLES){ AddVolumeOutput("DES_LENGTHSCALE", "DES_LengthScale", "DDES", "DES length scale value"); @@ -429,12 +475,16 @@ void CFlowCompOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, CSolv CVariable* Node_Flow = solver[FLOW_SOL]->GetNodes(); CVariable* Node_Turb = nullptr; + CVariable* Node_Scalar = nullptr; const auto Node_Geo = geometry->nodes; if (config->GetKind_Turb_Model() != TURB_MODEL::NONE){ Node_Turb = solver[TURB_SOL]->GetNodes(); } + if (config->GetKind_Scalar_Model() != NONE){ + Node_Scalar = solver[SCALAR_SOL]->GetNodes(); + } LoadCoordinates(Node_Geo->GetCoord(iPoint), iPoint); SetVolumeOutputValue("DENSITY", iPoint, Node_Flow->GetSolution(iPoint, 0)); @@ -460,6 +510,14 @@ void CFlowCompOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, CSolv case TURB_MODEL::NONE: break; } + + switch(scalar_model){ + case PASSIVE_SCALAR: + SetVolumeOutputValue("PASSIVE_SCALAR", iPoint, Node_Scalar->GetSolution(iPoint, 0)); + break; + case NO_SCALAR_MODEL: + break; + } if (gridMovement){ SetVolumeOutputValue("GRID_VELOCITY-X", iPoint, Node_Geo->GetGridVel(iPoint)[0]); @@ -513,6 +571,14 @@ void CFlowCompOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, CSolv case TURB_MODEL::NONE: break; } + + switch(scalar_model){ + case PASSIVE_SCALAR: + SetVolumeOutputValue("RES_PASSIVE_SCALAR", iPoint, solver[SCALAR_SOL]->LinSysRes(iPoint, 0)); + break; + case NO_SCALAR_MODEL: + break; + } if (config->GetKind_SlopeLimit_Flow() != NO_LIMITER && config->GetKind_SlopeLimit_Flow() != VAN_ALBADA_EDGE) { SetVolumeOutputValue("LIMITER_VELOCITY-X", iPoint, Node_Flow->GetLimiter_Primitive(iPoint, 1)); @@ -539,7 +605,15 @@ void CFlowCompOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, CSolv break; } } - + + switch(scalar_model){ + case PASSIVE_SCALAR: + SetVolumeOutputValue("LIMITER_PASSIVE_SCALAR", iPoint, Node_Scalar->GetLimiter(iPoint, 0)); + break; + case NO_SCALAR_MODEL: + break; + } + if (config->GetKind_HybridRANSLES() != NO_HYBRIDRANSLES){ SetVolumeOutputValue("DES_LENGTHSCALE", iPoint, Node_Flow->GetDES_LengthScale(iPoint)); SetVolumeOutputValue("WALL_DISTANCE", iPoint, Node_Geo->GetWall_Distance(iPoint)); @@ -585,6 +659,7 @@ void CFlowCompOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CSol CSolver* flow_solver = solver[FLOW_SOL]; CSolver* turb_solver = solver[TURB_SOL]; CSolver* mesh_solver = solver[MESH_SOL]; + CSolver* scalar_solver = solver[SCALAR_SOL]; SetHistoryOutputValue("RMS_DENSITY", log10(flow_solver->GetRes_RMS(0))); SetHistoryOutputValue("RMS_MOMENTUM-X", log10(flow_solver->GetRes_RMS(1))); @@ -606,7 +681,13 @@ void CFlowCompOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CSol break; case TURB_MODEL::NONE: break; } - + + switch(scalar_model){ + case PASSIVE_SCALAR: + SetHistoryOutputValue("RMS_PASSIVE_SCALAR", log10(scalar_solver->GetRes_RMS(0))); + break; + } + SetHistoryOutputValue("MAX_DENSITY", log10(flow_solver->GetRes_Max(0))); SetHistoryOutputValue("MAX_MOMENTUM-X", log10(flow_solver->GetRes_Max(1))); SetHistoryOutputValue("MAX_MOMENTUM-Y", log10(flow_solver->GetRes_Max(2))); @@ -627,7 +708,13 @@ void CFlowCompOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CSol break; case TURB_MODEL::NONE: break; } - + + switch(scalar_model){ + case PASSIVE_SCALAR: + SetHistoryOutputValue("MAX_PASSIVE_SCALAR", log10(scalar_solver->GetRes_Max(0))); + break; + } + if (multiZone){ SetHistoryOutputValue("BGS_DENSITY", log10(flow_solver->GetRes_BGS(0))); SetHistoryOutputValue("BGS_MOMENTUM-X", log10(flow_solver->GetRes_BGS(1))); @@ -650,6 +737,12 @@ void CFlowCompOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CSol break; case TURB_MODEL::NONE: break; } + + switch(scalar_model){ + case PASSIVE_SCALAR: + SetHistoryOutputValue("BGS_PASSIVE_SCALAR", log10(scalar_solver->GetRes_BGS(0))); + break; + } } SetHistoryOutputValue("TOTAL_HEATFLUX", flow_solver->GetTotal_HeatFlux()); @@ -686,7 +779,7 @@ void CFlowCompOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CSol /*--- Set the analyse surface history values --- */ - SetAnalyzeSurface(flow_solver, geometry, config, false); + SetAnalyzeSurface(solver, geometry, config, false); /*--- Set aeroydnamic coefficients --- */ diff --git a/SU2_CFD/src/output/CFlowIncOutput.cpp b/SU2_CFD/src/output/CFlowIncOutput.cpp index 1063bea7ab4b..185617e12a7b 100644 --- a/SU2_CFD/src/output/CFlowIncOutput.cpp +++ b/SU2_CFD/src/output/CFlowIncOutput.cpp @@ -34,7 +34,7 @@ CFlowIncOutput::CFlowIncOutput(CConfig *config, unsigned short nDim) : CFlowOutput(config, nDim, false) { turb_model = config->GetKind_Turb_Model(); - + scalar_model = config->GetKind_Scalar_Model(); heat = config->GetEnergy_Equation(); weakly_coupled_heat = config->GetWeakly_Coupled_Heat(); @@ -128,6 +128,20 @@ void CFlowIncOutput::SetHistoryOutputFields(CConfig *config){ break; case TURB_MODEL::NONE: break; } + + switch(scalar_model){ + case PASSIVE_SCALAR: + AddHistoryOutput("RMS_PASSIVE_SCALAR", "rms[c]", ScreenOutputFormat::FIXED, "RMS_RES", "Root-mean squared residual of the passive scalar equation.", HistoryFieldType::RESIDUAL); + break; + case PROGRESS_VARIABLE: + AddHistoryOutput("RMS_PROGRESS_VARIABLE", "rms[PV]" , ScreenOutputFormat::FIXED , "RMS_RES", "Root-mean squared residual of the progress variable equation.", HistoryFieldType::RESIDUAL); + AddHistoryOutput("RMS_ENTHALPY" , "rms[Enth]" , ScreenOutputFormat::FIXED , "RMS_RES", "Root-mean squared residual of the enthalpy equation." , HistoryFieldType::RESIDUAL); + AddHistoryOutput("RMS_Y_CO" , "rms[Y_CO]" , ScreenOutputFormat::FIXED , "RMS_RES", "Root-mean squared residual of the CO mass fraction equation." , HistoryFieldType::RESIDUAL); + AddHistoryOutput("RMS_Y_NOX" , "rms[Y_NOx]" , ScreenOutputFormat::FIXED , "RMS_RES", "Root-mean squared residual of the NOx mass fraction equation.", HistoryFieldType::RESIDUAL); + AddHistoryOutput("N_TABLE_MISSES" , "# table misses", ScreenOutputFormat::INTEGER, "RMS_RES", "number of table misses" , HistoryFieldType::RESIDUAL); + break; + default: break; + } /// END_GROUP /// BEGIN_GROUP: MAX_RES, DESCRIPTION: The maximum residuals of the SOLUTION variables. @@ -157,6 +171,19 @@ void CFlowIncOutput::SetHistoryOutputFields(CConfig *config){ break; case TURB_MODEL::NONE: break; } + + switch(scalar_model){ + case PASSIVE_SCALAR: + AddHistoryOutput("MAX_PASSIVE_SCALAR", "max[c]", ScreenOutputFormat::FIXED, "MAX_RES", "Maximum residual of the passive scalar equation.", HistoryFieldType::RESIDUAL); + break; + case PROGRESS_VARIABLE: + AddHistoryOutput("MAX_PROGRESS_VARIABLE" , "max[PV]" , ScreenOutputFormat::FIXED , "MAX_RES", "Maximum residual of the progress variable equation." , HistoryFieldType::RESIDUAL); + AddHistoryOutput("MAX_ENTHALPY" , "max[Enth]" , ScreenOutputFormat::FIXED , "MAX_RES", "Maximum residual of the enthalpy equation." , HistoryFieldType::RESIDUAL); + AddHistoryOutput("MAX_Y_CO" , "max[Y_CO]" , ScreenOutputFormat::FIXED , "MAX_RES", "Maximum residual of the CO mass fraction equation." , HistoryFieldType::RESIDUAL); + AddHistoryOutput("MAX_Y_NOX" , "max[Y_NOx]" , ScreenOutputFormat::FIXED , "MAX_RES", "Maximum residual of the NOx mass fraction equation." , HistoryFieldType::RESIDUAL); + break; + default: break; + } /// END_GROUP /// BEGIN_GROUP: BGS_RES, DESCRIPTION: The block-gauss seidel residuals of the SOLUTION variables. @@ -188,6 +215,23 @@ void CFlowIncOutput::SetHistoryOutputFields(CConfig *config){ break; case TURB_MODEL::NONE: break; } + + switch(scalar_model){ + case PASSIVE_SCALAR: + AddHistoryOutput("BGS_PASSIVE_SCALAR", "bgs[c]", ScreenOutputFormat::FIXED, "BGS_RES", "BGS residual of the passive scalar equation.", HistoryFieldType::RESIDUAL); + AddHistoryOutput("LINSOL_ITER_SCALAR", "LinSolIter[c]", ScreenOutputFormat::INTEGER, "LINSOL", "Number of iterations of the linear scalar solver."); + AddHistoryOutput("LINSOL_RESIDUAL_SCALAR", "LinSolRes[c]", ScreenOutputFormat::FIXED, "LINSOL", "Residual of the linear scalar solver."); + break; + case PROGRESS_VARIABLE: + AddHistoryOutput("BGS_PROGRESS_VARIABLE" , "bgs[PV]" , ScreenOutputFormat::FIXED , "BGS_RES", "BGS residual of the progress variable equation." , HistoryFieldType::RESIDUAL); + AddHistoryOutput("BGS_ENTHALPY" , "bgs[Enth]" , ScreenOutputFormat::FIXED , "BGS_RES", "BGS residual of the enthalpy equation." , HistoryFieldType::RESIDUAL); + AddHistoryOutput("BGS_Y_CO" , "bgs[Y_CO]" , ScreenOutputFormat::FIXED , "BGS_RES", "BGS residual of the CO mass fraction equation." , HistoryFieldType::RESIDUAL); + AddHistoryOutput("BGS_Y_NOX" , "bgs[Y_NOx]" , ScreenOutputFormat::FIXED , "BGS_RES", "BGS residual of the NOx mass fraction equation." , HistoryFieldType::RESIDUAL); + AddHistoryOutput("LINSOL_ITER_SCALAR", "LinSolIter[c]", ScreenOutputFormat::INTEGER, "LINSOL", "Number of iterations of the linear scalar solver."); + AddHistoryOutput("LINSOL_RESIDUAL_SCALAR", "LinSolRes[c]", ScreenOutputFormat::FIXED, "LINSOL", "Residual of the linear scalar solver."); + break; + default: break; + } /// END_GROUP /// BEGIN_GROUP: ROTATING_FRAME, DESCRIPTION: Coefficients related to a rotating frame of reference. @@ -255,6 +299,7 @@ void CFlowIncOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CSolv CSolver* heat_solver = solver[HEAT_SOL]; CSolver* rad_solver = solver[RAD_SOL]; CSolver* mesh_solver = solver[MESH_SOL]; + CSolver* scalar_solver = solver[SCALAR_SOL]; SetHistoryOutputValue("RMS_PRESSURE", log10(flow_solver->GetRes_RMS(0))); SetHistoryOutputValue("RMS_VELOCITY-X", log10(flow_solver->GetRes_RMS(1))); @@ -276,6 +321,23 @@ void CFlowIncOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CSolv SetHistoryOutputValue("RMS_RAD_ENERGY", log10(rad_solver->GetRes_RMS(0))); + + switch(scalar_model){ + case PASSIVE_SCALAR: + SetHistoryOutputValue("RMS_PASSIVE_SCALAR", log10(scalar_solver->GetRes_RMS(0))); + SetHistoryOutputValue("LINSOL_ITER_SCALAR", scalar_solver->GetIterLinSolver()); + SetHistoryOutputValue("LINSOL_RESIDUAL_SCALAR", log10(scalar_solver->GetResLinSolver())); break; + case PROGRESS_VARIABLE: + SetHistoryOutputValue("RMS_PROGRESS_VARIABLE", log10(scalar_solver->GetRes_RMS(I_PROG_VAR))); + SetHistoryOutputValue("RMS_ENTHALPY" , log10(scalar_solver->GetRes_RMS(I_ENTHALPY))); + SetHistoryOutputValue("RMS_Y_CO" , log10(scalar_solver->GetRes_RMS(I_CO) )); + SetHistoryOutputValue("RMS_Y_NOX" , log10(scalar_solver->GetRes_RMS(I_NOX) )); + SetHistoryOutputValue("N_TABLE_MISSES" , scalar_solver->GetNTableMisses()); + SetHistoryOutputValue("LINSOL_ITER_SCALAR", scalar_solver->GetIterLinSolver()); + SetHistoryOutputValue("LINSOL_RESIDUAL_SCALAR", log10(scalar_solver->GetResLinSolver())); break; + break; + } + SetHistoryOutputValue("MAX_PRESSURE", log10(flow_solver->GetRes_Max(0))); SetHistoryOutputValue("MAX_VELOCITY-X", log10(flow_solver->GetRes_Max(1))); SetHistoryOutputValue("MAX_VELOCITY-Y", log10(flow_solver->GetRes_Max(2))); @@ -291,7 +353,19 @@ void CFlowIncOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CSolv break; case TURB_MODEL::NONE: break; } - + + switch(scalar_model){ + case PASSIVE_SCALAR: + SetHistoryOutputValue("MAX_PASSIVE_SCALAR", log10(scalar_solver->GetRes_Max(0))); + break; + case PROGRESS_VARIABLE: + SetHistoryOutputValue("MAX_PROGRESS_VARIABLE", log10(scalar_solver->GetRes_Max(I_PROG_VAR))); + SetHistoryOutputValue("MAX_ENTHALPY" , log10(scalar_solver->GetRes_Max(I_ENTHALPY))); + SetHistoryOutputValue("MAX_Y_CO" , log10(scalar_solver->GetRes_Max(I_CO) )); + SetHistoryOutputValue("MAX_Y_NOX" , log10(scalar_solver->GetRes_Max(I_NOX) )); + break; + } + if (multiZone){ SetHistoryOutputValue("BGS_PRESSURE", log10(flow_solver->GetRes_BGS(0))); SetHistoryOutputValue("BGS_VELOCITY-X", log10(flow_solver->GetRes_BGS(1))); @@ -312,6 +386,18 @@ void CFlowIncOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CSolv if (config->AddRadiation()) SetHistoryOutputValue("BGS_RAD_ENERGY", log10(rad_solver->GetRes_BGS(0))); + + switch(scalar_model){ + case PASSIVE_SCALAR: + SetHistoryOutputValue("BGS_PASSIVE_SCALAR", log10(scalar_solver->GetRes_BGS(0))); + break; + case PROGRESS_VARIABLE: + SetHistoryOutputValue("BGS_PROGRESS_VARIABLE", log10(scalar_solver->GetRes_BGS(I_PROG_VAR))); + SetHistoryOutputValue("BGS_ENTHALPY" , log10(scalar_solver->GetRes_BGS(I_ENTHALPY))); + SetHistoryOutputValue("BGS_Y_CO" , log10(scalar_solver->GetRes_BGS(I_CO) )); + SetHistoryOutputValue("BGS_Y_NOX" , log10(scalar_solver->GetRes_BGS(I_NOX) )); + break; + } } if (weakly_coupled_heat){ @@ -367,7 +453,7 @@ void CFlowIncOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CSolv /*--- Set the analyse surface history values --- */ - SetAnalyzeSurface(flow_solver, geometry, config, false); + SetAnalyzeSurface(solver, geometry, config, false); /*--- Set aeroydnamic coefficients --- */ @@ -406,6 +492,43 @@ void CFlowIncOutput::SetVolumeOutputFields(CConfig *config){ case TURB_MODEL::NONE: break; } + + switch(scalar_model){ + case PASSIVE_SCALAR: + AddVolumeOutput("PASSIVE_SCALAR", "Passive_Scalar", "SOLUTION", "Passive scalar solution"); + break; + case PROGRESS_VARIABLE: + AddVolumeOutput("PROGRESS_VARIABLE", "Progress_Variable", "SOLUTION", "Progress variable solution"); + AddVolumeOutput("ENTHALPY" , "Enthalpy" , "SOLUTION", "Enthalpy solution" ); + AddVolumeOutput("Y_CO" , "Y_CO" , "SOLUTION", "CO Mass fraction solution" ); + AddVolumeOutput("Y_NOX" , "Y_NOx" , "SOLUTION", "NOx Mass fraction solution"); + AddVolumeOutput("DIFFUSIVITY_PV" , "Diffusivity_PV" , "SOLUTION", "Diffusivity of the progress variable"); + AddVolumeOutput("DIFFUSIVITY_ENTH" , "Diffusivity_Enth" , "SOLUTION", "Diffusivity of the enthalpy"); + for (int i_lookup = 0; i_lookup < config->GetNLookups(); ++i_lookup) + if (config->GetLookupName(i_lookup)!="NULL"){ + string strname1="lookup_"+config->GetLookupName(i_lookup); + AddVolumeOutput(config->GetLookupName(i_lookup),strname1,"LOOKUP",config->GetLookupName(i_lookup)); + } + AddVolumeOutput("TABLE_MISSES" , "Table_misses" , "SOLUTION", "Lookup table misses"); + + + break; + case NO_SCALAR_MODEL: + break; + } + + // Sources + switch (scalar_model) { + case PASSIVE_SCALAR: + break; + case PROGRESS_VARIABLE: + AddVolumeOutput("SOURCE_PROGRESS_VARIABLE", "Source_Progress_Variable", "SOURCE", "Source Progress Variable"); + AddVolumeOutput("SOURCE_ENTHALPY" , "Source_Enthalpy" , "SOURCE", "Source Enthalpy" ); + AddVolumeOutput("SOURCE_Y_CO" , "Source_Y_CO" , "SOURCE", "Source Y_CO" ); + AddVolumeOutput("SOURCE_Y_NOX" , "Source_Y_NOx" , "SOURCE", "Source Y_NOx" ); + case NO_SCALAR_MODEL: + break; + } // Radiation variables if (config->AddRadiation()) @@ -465,7 +588,22 @@ void CFlowIncOutput::SetVolumeOutputFields(CConfig *config){ case TURB_MODEL::NONE: break; } + + switch(scalar_model){ + case PASSIVE_SCALAR: + AddVolumeOutput("RES_PASSIVE_SCALAR", "Residual_Passive_Scalar", "RESIDUAL", "Residual of passive scalar equation"); + break; + case PROGRESS_VARIABLE: + AddVolumeOutput("RES_PROGRESS_VARIABLE", "Residual_Progress_Variable", "RESIDUAL", "Residual of the Progress Variable equation"); + AddVolumeOutput("RES_ENTHALPY" , "Residual_Enthalpy" , "RESIDUAL", "Residual of the Enthalpy equation" ); + AddVolumeOutput("RES_Y_CO" , "Residual_Y_CO" , "RESIDUAL", "Residual of the Y_CO equation" ); + AddVolumeOutput("RES_Y_NOX" , "Residual_Y_NOx" , "RESIDUAL", "Residual of the Y_NOx equation" ); + break; + case NO_SCALAR_MODEL: + break; + } + if (config->GetKind_SlopeLimit_Flow() != NO_LIMITER && config->GetKind_SlopeLimit_Flow() != VAN_ALBADA_EDGE) { AddVolumeOutput("LIMITER_PRESSURE", "Limiter_Pressure", "LIMITER", "Limiter value of the pressure"); AddVolumeOutput("LIMITER_VELOCITY-X", "Limiter_Velocity_x", "LIMITER", "Limiter value of the x-velocity"); @@ -490,7 +628,21 @@ void CFlowIncOutput::SetVolumeOutputFields(CConfig *config){ break; } } - + + switch(scalar_model){ + case PASSIVE_SCALAR: + AddVolumeOutput("LIMITER_PASSIVE_SCALAR", "Limiter_Passive_Scalar", "LIMITER", "Limiter value for the passive scalar"); + break; + case PROGRESS_VARIABLE: + AddVolumeOutput("LIMITER_PROGRESS_VARIABLE", "Limiter_Progress_Variable", "LIMITER", "Limiter value for the Progress Variable equation"); + AddVolumeOutput("LIMITER_ENTHALPY" , "Limiter_Enthalpy" , "LIMITER", "Limiter value for the Enthalpy equation" ); + AddVolumeOutput("LIMITER_Y_CO" , "Limiter_Y_CO" , "LIMITER", "Limiter value for the Y_CO equation" ); + AddVolumeOutput("LIMITER_Y_NOX" , "Limiter_Y_NOx" , "LIMITER", "Limiter value for the Y_NOx equation" ); + break; + case NO_SCALAR_MODEL: + break; + } + // Hybrid RANS-LES if (config->GetKind_HybridRANSLES() != NO_HYBRIDRANSLES){ AddVolumeOutput("DES_LENGTHSCALE", "DES_LengthScale", "DDES", "DES length scale value"); @@ -513,6 +665,15 @@ void CFlowIncOutput::SetVolumeOutputFields(CConfig *config){ AddVolumeOutput("Q_CRITERION", "Q_Criterion", "VORTEX_IDENTIFICATION", "Value of the Q-Criterion"); } + if(config->GetKind_TimeIntScheme_Flow()==EULER_IMPLICIT){ + AddVolumeOutput("TIMESTEP", "timestep", "TIMESTEP", "local timestep"); + } + + // Mesh quality metrics, computed in CPhysicalGeometry::ComputeMeshQualityStatistics. + AddVolumeOutput("ORTHOGONALITY", "Orthogonality", "MESH_QUALITY", "Orthogonality Angle (deg.)"); + AddVolumeOutput("ASPECT_RATIO", "Aspect_Ratio", "MESH_QUALITY", "CV Face Area Aspect Ratio"); + AddVolumeOutput("VOLUME_RATIO", "Volume_Ratio", "MESH_QUALITY", "CV Sub-Volume Ratio"); + // Streamwise Periodicity if(streamwisePeriodic) { AddVolumeOutput("RECOVERED_PRESSURE", "Recovered_Pressure", "SOLUTION", "Recovered physical pressure"); @@ -530,6 +691,7 @@ void CFlowIncOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, CSolve CVariable* Node_Turb = nullptr; CVariable* Node_Rad = nullptr; const auto Node_Geo = geometry->nodes; + CVariable* Node_Scalar = nullptr; if (config->GetKind_Turb_Model() != TURB_MODEL::NONE){ Node_Turb = solver[TURB_SOL]->GetNodes(); @@ -537,6 +699,9 @@ void CFlowIncOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, CSolve if (weakly_coupled_heat){ Node_Heat = solver[HEAT_SOL]->GetNodes(); } + if (config->GetKind_Scalar_Model() != NONE){ + Node_Scalar = solver[SCALAR_SOL]->GetNodes(); + } LoadCoordinates(Node_Geo->GetCoord(iPoint), iPoint); @@ -561,6 +726,51 @@ void CFlowIncOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, CSolve case TURB_MODEL::NONE: break; } + + // Solution data + su2double *scalars; + unsigned long table_misses; + switch(scalar_model){ + case PASSIVE_SCALAR: + SetVolumeOutputValue("PASSIVE_SCALAR", iPoint, Node_Scalar->GetSolution(iPoint, 0)); + break; + case PROGRESS_VARIABLE: + SetVolumeOutputValue("PROGRESS_VARIABLE", iPoint, Node_Scalar->GetSolution(iPoint, I_PROG_VAR)); + SetVolumeOutputValue("ENTHALPY" , iPoint, Node_Scalar->GetSolution(iPoint, I_ENTHALPY)); + SetVolumeOutputValue("Y_CO" , iPoint, Node_Scalar->GetSolution(iPoint, I_CO )); + SetVolumeOutputValue("Y_NOX" , iPoint, Node_Scalar->GetSolution(iPoint, I_NOX )); + SetVolumeOutputValue("DIFFUSIVITY_PV" , iPoint, Node_Scalar->GetDiffusivity(iPoint, I_PROG_VAR)); + SetVolumeOutputValue("DIFFUSIVITY_ENTH" , iPoint, Node_Scalar->GetDiffusivity(iPoint, I_ENTHALPY)); + + // update lookup + scalars = Node_Scalar->GetSolution(iPoint); + table_misses = solver[FLOW_SOL]->GetFluidModel()->SetScalarLookups(scalars); + for (int i_lookup = 0; i_lookup < config->GetNLookups(); ++i_lookup){ + if (config->GetLookupName(i_lookup)!="NULL") + SetVolumeOutputValue(config->GetLookupName(i_lookup), iPoint, solver[FLOW_SOL]->GetFluidModel()->GetScalarLookups(i_lookup)); + } + SetVolumeOutputValue("TABLE_MISSES" , iPoint, (su2double)table_misses); + + break; + case NO_SCALAR_MODEL: + break; + } + + // Sources + switch(scalar_model){ + case PASSIVE_SCALAR: + break; + case PROGRESS_VARIABLE: + scalars = Node_Scalar->GetSolution(iPoint); + table_misses = solver[FLOW_SOL]->GetFluidModel()->SetScalarSources(scalars); + SetVolumeOutputValue("SOURCE_PROGRESS_VARIABLE", iPoint, solver[FLOW_SOL]->GetFluidModel()->GetScalarSources(I_PROG_VAR)); + SetVolumeOutputValue("SOURCE_ENTHALPY" , iPoint, solver[FLOW_SOL]->GetFluidModel()->GetScalarSources(I_ENTHALPY)); + SetVolumeOutputValue("SOURCE_Y_CO" , iPoint, solver[FLOW_SOL]->GetFluidModel()->GetScalarSources(I_CO )); + SetVolumeOutputValue("SOURCE_Y_NOX" , iPoint, solver[FLOW_SOL]->GetFluidModel()->GetScalarSources(I_NOX )); + break; + case NO_SCALAR_MODEL: + break; + } // Radiation solver if (config->AddRadiation()){ @@ -615,6 +825,20 @@ void CFlowIncOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, CSolve case TURB_MODEL::NONE: break; } + switch(scalar_model){ + case PASSIVE_SCALAR: + SetVolumeOutputValue("RES_PASSIVE_SCALAR", iPoint, solver[SCALAR_SOL]->LinSysRes(iPoint, 0)); + break; + case PROGRESS_VARIABLE: + SetVolumeOutputValue("RES_PROGRESS_VARIABLE", iPoint, solver[SCALAR_SOL]->LinSysRes(iPoint, I_PROG_VAR)); + SetVolumeOutputValue("RES_ENTHALPY" , iPoint, solver[SCALAR_SOL]->LinSysRes(iPoint, I_ENTHALPY)); + SetVolumeOutputValue("RES_Y_CO" , iPoint, solver[SCALAR_SOL]->LinSysRes(iPoint, I_CO )); + SetVolumeOutputValue("RES_Y_NOX" , iPoint, solver[SCALAR_SOL]->LinSysRes(iPoint, I_NOX )); + break; + case NO_SCALAR_MODEL: + break; + } + if (config->GetKind_SlopeLimit_Flow() != NO_LIMITER && config->GetKind_SlopeLimit_Flow() != VAN_ALBADA_EDGE) { SetVolumeOutputValue("LIMITER_PRESSURE", iPoint, Node_Flow->GetLimiter_Primitive(iPoint, 0)); @@ -641,7 +865,21 @@ void CFlowIncOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, CSolve break; } } - + + switch(scalar_model){ + case PASSIVE_SCALAR: + SetVolumeOutputValue("LIMITER_PASSIVE_SCALAR", iPoint, Node_Scalar->GetLimiter(iPoint, 0)); + break; + case PROGRESS_VARIABLE: + SetVolumeOutputValue("LIMITER_PROGRESS_VARIABLE", iPoint, Node_Scalar->GetLimiter(iPoint, I_PROG_VAR)); + SetVolumeOutputValue("LIMITER_ENTHALPY" , iPoint, Node_Scalar->GetLimiter(iPoint, I_ENTHALPY)); + SetVolumeOutputValue("LIMITER_Y_CO" , iPoint, Node_Scalar->GetLimiter(iPoint, I_CO )); + SetVolumeOutputValue("LIMITER_Y_NOX" , iPoint, Node_Scalar->GetLimiter(iPoint, I_NOX )); + break; + case NO_SCALAR_MODEL: + break; + } + if (config->GetKind_HybridRANSLES() != NO_HYBRIDRANSLES){ SetVolumeOutputValue("DES_LENGTHSCALE", iPoint, Node_Flow->GetDES_LengthScale(iPoint)); SetVolumeOutputValue("WALL_DISTANCE", iPoint, Node_Geo->GetWall_Distance(iPoint)); @@ -662,6 +900,10 @@ void CFlowIncOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, CSolve SetVolumeOutputValue("Q_CRITERION", iPoint, GetQ_Criterion(Node_Flow->GetGradient_Primitive(iPoint,1))); } + if(config->GetKind_TimeIntScheme_Flow()==EULER_IMPLICIT){ + SetVolumeOutputValue("TIMESTEP", iPoint, Node_Flow->GetDelta_Time(iPoint)); + } + // Streamwise Periodicity if(streamwisePeriodic) { SetVolumeOutputValue("RECOVERED_PRESSURE", iPoint, Node_Flow->GetStreamwise_Periodic_RecoveredPressure(iPoint)); diff --git a/SU2_CFD/src/output/CFlowOutput.cpp b/SU2_CFD/src/output/CFlowOutput.cpp index 1d66afac8fb0..b9b653e7c983 100644 --- a/SU2_CFD/src/output/CFlowOutput.cpp +++ b/SU2_CFD/src/output/CFlowOutput.cpp @@ -69,6 +69,10 @@ void CFlowOutput::AddAnalyzeSurfaceOutput(const CConfig *config){ } else if (rank == MASTER_NODE) { cout << "\nWARNING: SURFACE_PRESSURE_DROP can only be computed for 2 surfaces (outlet, inlet)\n" << endl; } + /// DESCRIPTION: Average mass fraction of CO + AddHistoryOutput("AVG_CO", "Avg_CO", ScreenOutputFormat::SCIENTIFIC, "SPECIES_COEFF", "Total average mass fraction of CO on all markers set in MARKER_ANALYZE", HistoryFieldType::COEFFICIENT); + /// DESCRIPTION: Average mass fraction of NO + AddHistoryOutput("AVG_NOX", "Avg_NOx", ScreenOutputFormat::SCIENTIFIC, "SPECIES_COEFF", "Total average mass fraction of NO on all markers set in MARKER_ANALYZE", HistoryFieldType::COEFFICIENT); /// END_GROUP /// BEGIN_GROUP: AERO_COEFF_SURF, DESCRIPTION: Surface values on non-solid markers. @@ -103,11 +107,15 @@ void CFlowOutput::AddAnalyzeSurfaceOutput(const CConfig *config){ AddHistoryOutputPerSurface("SURFACE_TOTAL_TEMPERATURE","Avg_TotalTemp", ScreenOutputFormat::SCIENTIFIC, "FLOW_COEFF_SURF", Marker_Analyze, HistoryFieldType::COEFFICIENT); /// DESCRIPTION: Average total pressure AddHistoryOutputPerSurface("SURFACE_TOTAL_PRESSURE", "Avg_TotalPress", ScreenOutputFormat::SCIENTIFIC, "FLOW_COEFF_SURF", Marker_Analyze, HistoryFieldType::COEFFICIENT); + /// DESCRIPTION: Average mass fraction of CO + AddHistoryOutputPerSurface("AVG_CO", "Avg_CO", ScreenOutputFormat::SCIENTIFIC, "FLOW_COEFF_SURF", Marker_Analyze, HistoryFieldType::COEFFICIENT); + /// DESCRIPTION: Average mass fraction of NO + AddHistoryOutputPerSurface("AVG_NOX", "Avg_NOx", ScreenOutputFormat::SCIENTIFIC, "FLOW_COEFF_SURF", Marker_Analyze, HistoryFieldType::COEFFICIENT); /// END_GROUP } -void CFlowOutput::SetAnalyzeSurface(const CSolver *solver, const CGeometry *geometry, CConfig *config, bool output){ +void CFlowOutput::SetAnalyzeSurface(CSolver **solver, const CGeometry *geometry, CConfig *config, bool output){ unsigned short iDim, iMarker, iMarker_Analyze; unsigned long iVertex, iPoint; @@ -124,11 +132,15 @@ void CFlowOutput::SetAnalyzeSurface(const CSolver *solver, const CGeometry *geom const bool compressible = config->GetKind_Regime() == ENUM_REGIME::COMPRESSIBLE; const bool incompressible = config->GetKind_Regime() == ENUM_REGIME::INCOMPRESSIBLE; const bool energy = config->GetEnergy_Equation(); + const bool flamelet_model = config->GetKind_Scalar_Model() == PROGRESS_VARIABLE; const bool streamwisePeriodic = (config->GetKind_Streamwise_Periodic() != ENUM_STREAMWISE_PERIODIC::NONE); const bool axisymmetric = config->GetAxisymmetric(); const unsigned short nMarker_Analyze = config->GetnMarker_Analyze(); + CSolver* flow_solver = solver[FLOW_SOL]; + CSolver* scalar_solver = solver[SCALAR_SOL]; + vector Surface_MassFlow (nMarker,0.0); vector Surface_Mach (nMarker,0.0); vector Surface_Temperature (nMarker,0.0); @@ -143,6 +155,8 @@ void CFlowOutput::SetAnalyzeSurface(const CSolver *solver, const CGeometry *geom vector Surface_VelocityIdeal (nMarker,0.0); vector Surface_Area (nMarker,0.0); vector Surface_MassFlow_Abs (nMarker,0.0); + vector Surface_CO (nMarker,0.0); + vector Surface_NOx (nMarker,0.0); su2double Tot_Surface_MassFlow = 0.0; su2double Tot_Surface_Mach = 0.0; @@ -157,6 +171,12 @@ void CFlowOutput::SetAnalyzeSurface(const CSolver *solver, const CGeometry *geom su2double Tot_Surface_TotalPressure = 0.0; su2double Tot_Momentum_Distortion = 0.0; su2double Tot_SecondOverUniformity = 0.0; + su2double Tot_Surface_CO = 0.0; + su2double Tot_Surface_NOx = 0.0; + //su2double Tot_Surface_Scalar[n_scalars]; + //for (int i_scalar = 0; i_scalar < n_scalars; ++i_scalar) + // Tot_Surface_Scalar[i_scalar] = 0.0; + /*--- Compute the numerical fan face Mach number, and the total area of the inflow ---*/ @@ -190,12 +210,12 @@ void CFlowOutput::SetAnalyzeSurface(const CSolver *solver, const CGeometry *geom AxiFactor = 1.0; } - Density = solver->GetNodes()->GetDensity(iPoint); + Density = flow_solver->GetNodes()->GetDensity(iPoint); Velocity2 = 0.0; Area = 0.0; MassFlow = 0.0; Vn = 0.0; Vtang2 = 0.0; for (iDim = 0; iDim < nDim; iDim++) { Area += (Vector[iDim] * AxiFactor) * (Vector[iDim] * AxiFactor); - Velocity[iDim] = solver->GetNodes()->GetVelocity(iPoint,iDim); + Velocity[iDim] = flow_solver->GetNodes()->GetVelocity(iPoint,iDim); Velocity2 += Velocity[iDim] * Velocity[iDim]; Vn += Velocity[iDim] * Vector[iDim] * AxiFactor; MassFlow += Vector[iDim] * AxiFactor * Density * Velocity[iDim]; @@ -204,10 +224,11 @@ void CFlowOutput::SetAnalyzeSurface(const CSolver *solver, const CGeometry *geom Area = sqrt (Area); if (AxiFactor == 0.0) Vn = 0.0; else Vn /= Area; Vn2 = Vn * Vn; - Pressure = solver->GetNodes()->GetPressure(iPoint); + + Pressure = flow_solver->GetNodes()->GetPressure(iPoint); /*--- Use recovered pressure here as pressure difference between in and outlet is zero otherwise ---*/ - if(streamwisePeriodic) Pressure = solver->GetNodes()->GetStreamwise_Periodic_RecoveredPressure(iPoint); - SoundSpeed = solver->GetNodes()->GetSoundSpeed(iPoint); + if(streamwisePeriodic) Pressure = flow_solver->GetNodes()->GetStreamwise_Periodic_RecoveredPressure(iPoint); + SoundSpeed = flow_solver->GetNodes()->GetSoundSpeed(iPoint); for (iDim = 0; iDim < nDim; iDim++) { TangVel[iDim] = Velocity[iDim] - Vn*Vector[iDim]*AxiFactor/Area; @@ -216,21 +237,21 @@ void CFlowOutput::SetAnalyzeSurface(const CSolver *solver, const CGeometry *geom if (incompressible){ if (config->GetKind_DensityModel() == INC_DENSITYMODEL::VARIABLE) { - Mach = sqrt(solver->GetNodes()->GetVelocity2(iPoint))/ - sqrt(solver->GetNodes()->GetSpecificHeatCp(iPoint)*config->GetPressure_ThermodynamicND()/(solver->GetNodes()->GetSpecificHeatCv(iPoint)*solver->GetNodes()->GetDensity(iPoint))); + Mach = sqrt(flow_solver->GetNodes()->GetVelocity2(iPoint))/ + sqrt(flow_solver->GetNodes()->GetSpecificHeatCp(iPoint)*config->GetPressure_ThermodynamicND()/(flow_solver->GetNodes()->GetSpecificHeatCv(iPoint)*flow_solver->GetNodes()->GetDensity(iPoint))); } else { - Mach = sqrt(solver->GetNodes()->GetVelocity2(iPoint))/ - sqrt(config->GetBulk_Modulus()/(solver->GetNodes()->GetDensity(iPoint))); + Mach = sqrt(flow_solver->GetNodes()->GetVelocity2(iPoint))/ + sqrt(config->GetBulk_Modulus()/(flow_solver->GetNodes()->GetDensity(iPoint))); } - Temperature = solver->GetNodes()->GetTemperature(iPoint); - Enthalpy = solver->GetNodes()->GetSpecificHeatCp(iPoint)*Temperature; - TotalTemperature = Temperature + 0.5*Velocity2/solver->GetNodes()->GetSpecificHeatCp(iPoint); + Temperature = flow_solver->GetNodes()->GetTemperature(iPoint); + Enthalpy = flow_solver->GetNodes()->GetSpecificHeatCp(iPoint)*Temperature; + TotalTemperature = Temperature + 0.5*Velocity2/flow_solver->GetNodes()->GetSpecificHeatCp(iPoint); TotalPressure = Pressure + 0.5*Density*Velocity2; } else{ Mach = sqrt(Velocity2)/SoundSpeed; Temperature = Pressure / (Gas_Constant * Density); - Enthalpy = solver->GetNodes()->GetEnthalpy(iPoint); + Enthalpy = flow_solver->GetNodes()->GetEnthalpy(iPoint); TotalTemperature = Temperature * (1.0 + Mach * Mach * 0.5 * (Gamma - 1.0)); TotalPressure = Pressure * pow( 1.0 + Mach * Mach * 0.5 * (Gamma - 1.0), Gamma / (Gamma - 1.0)); } @@ -253,6 +274,10 @@ void CFlowOutput::SetAnalyzeSurface(const CSolver *solver, const CGeometry *geom Surface_Pressure[iMarker] += Pressure*Weight; Surface_TotalTemperature[iMarker] += TotalTemperature*Weight; Surface_TotalPressure[iMarker] += TotalPressure*Weight; + if (flamelet_model){ + Surface_CO[iMarker] += scalar_solver->GetNodes()->GetSolution(iPoint, I_CO) * Weight; + Surface_NOx[iMarker] += scalar_solver->GetNodes()->GetSolution(iPoint, I_NOX) * Weight; + } /*--- For now, always used the area to weight the uniformities. ---*/ @@ -281,7 +306,9 @@ void CFlowOutput::SetAnalyzeSurface(const CSolver *solver, const CGeometry *geom vector Surface_TotalPressure_Local (nMarker_Analyze,0.0); vector Surface_Area_Local (nMarker_Analyze,0.0); vector Surface_MassFlow_Abs_Local (nMarker_Analyze,0.0); - + vector Surface_CO_Local (nMarker_Analyze,0.0); + vector Surface_NOx_Local (nMarker_Analyze,0.0); + vector Surface_MassFlow_Total (nMarker_Analyze,0.0); vector Surface_Mach_Total (nMarker_Analyze,0.0); vector Surface_Temperature_Total (nMarker_Analyze,0.0); @@ -295,6 +322,8 @@ void CFlowOutput::SetAnalyzeSurface(const CSolver *solver, const CGeometry *geom vector Surface_TotalPressure_Total (nMarker_Analyze,0.0); vector Surface_Area_Total (nMarker_Analyze,0.0); vector Surface_MassFlow_Abs_Total (nMarker_Analyze,0.0); + vector Surface_CO_Total (nMarker_Analyze,0.0); + vector Surface_NOx_Total (nMarker_Analyze,0.0); vector Surface_MomentumDistortion_Total (nMarker_Analyze,0.0); @@ -322,6 +351,8 @@ void CFlowOutput::SetAnalyzeSurface(const CSolver *solver, const CGeometry *geom Surface_TotalPressure_Local[iMarker_Analyze] += Surface_TotalPressure[iMarker]; Surface_Area_Local[iMarker_Analyze] += Surface_Area[iMarker]; Surface_MassFlow_Abs_Local[iMarker_Analyze] += Surface_MassFlow_Abs[iMarker]; + Surface_CO_Local[iMarker_Analyze] += Surface_CO[iMarker]; + Surface_NOx_Local[iMarker_Analyze] += Surface_NOx[iMarker]; } } @@ -347,7 +378,8 @@ void CFlowOutput::SetAnalyzeSurface(const CSolver *solver, const CGeometry *geom Allreduce(Surface_TotalPressure_Local, Surface_TotalPressure_Total); Allreduce(Surface_Area_Local, Surface_Area_Total); Allreduce(Surface_MassFlow_Abs_Local, Surface_MassFlow_Abs_Total); - + Allreduce(Surface_CO_Local, Surface_CO_Total); + Allreduce(Surface_NOx_Local,Surface_NOx_Total); /*--- Compute the value of Surface_Area_Total, and Surface_Pressure_Total, and set the value in the config structure for future use ---*/ @@ -366,6 +398,8 @@ void CFlowOutput::SetAnalyzeSurface(const CSolver *solver, const CGeometry *geom Surface_Pressure_Total[iMarker_Analyze] /= Weight; Surface_TotalTemperature_Total[iMarker_Analyze] /= Weight; Surface_TotalPressure_Total[iMarker_Analyze] /= Weight; + Surface_CO_Total[iMarker_Analyze] /= Weight; + Surface_NOx_Total[iMarker_Analyze] /= Weight; } else { Surface_Mach_Total[iMarker_Analyze] = 0.0; @@ -376,6 +410,8 @@ void CFlowOutput::SetAnalyzeSurface(const CSolver *solver, const CGeometry *geom Surface_Pressure_Total[iMarker_Analyze] = 0.0; Surface_TotalTemperature_Total[iMarker_Analyze] = 0.0; Surface_TotalPressure_Total[iMarker_Analyze] = 0.0; + Surface_CO_Total[iMarker_Analyze] = 0.0; + Surface_NOx_Total[iMarker_Analyze] = 0.0; } /*--- Compute flow uniformity parameters separately (always area for now). ---*/ @@ -466,6 +502,15 @@ void CFlowOutput::SetAnalyzeSurface(const CSolver *solver, const CGeometry *geom Tot_Surface_TotalPressure += TotalPressure; config->SetSurface_TotalPressure(iMarker_Analyze, TotalPressure); + su2double y_CO = Surface_CO_Total[iMarker_Analyze]; + SetHistoryOutputPerSurfaceValue("AVG_CO", y_CO, iMarker_Analyze); + Tot_Surface_CO += y_CO; + config->SetSurface_CO(iMarker_Analyze, y_CO); + + su2double y_NOx = Surface_NOx_Total[iMarker_Analyze]; + SetHistoryOutputPerSurfaceValue("AVG_NOX", y_NOx, iMarker_Analyze); + Tot_Surface_NOx += y_NOx; + config->SetSurface_NOx(iMarker_Analyze, y_NOx); } /*--- Compute the average static pressure drop between two surfaces. Note @@ -495,6 +540,8 @@ void CFlowOutput::SetAnalyzeSurface(const CSolver *solver, const CGeometry *geom SetHistoryOutputValue("SURFACE_SECOND_OVER_UNIFORM", Tot_SecondOverUniformity); SetHistoryOutputValue("SURFACE_TOTAL_TEMPERATURE", Tot_Surface_TotalTemperature); SetHistoryOutputValue("SURFACE_TOTAL_PRESSURE", Tot_Surface_TotalPressure); + SetHistoryOutputValue("AVG_CO", Tot_Surface_CO); + SetHistoryOutputValue("AVG_NOX", Tot_Surface_NOx); if ((rank == MASTER_NODE) && !config->GetDiscrete_Adjoint() && output) { @@ -571,7 +618,6 @@ void CFlowOutput::SetAnalyzeSurface(const CSolver *solver, const CGeometry *geom cout << endl; } - } cout.unsetf(ios_base::floatfield); @@ -603,6 +649,8 @@ void CFlowOutput::AddAerodynamicCoefficients(CConfig *config){ AddHistoryOutput("FORCE_Z", "CFz", ScreenOutputFormat::FIXED, "AERO_COEFF", "Total force z-component on all surfaces set with MARKER_MONITORING", HistoryFieldType::COEFFICIENT); /// DESCRIPTION: Lift-to-drag ratio AddHistoryOutput("EFFICIENCY", "CEff", ScreenOutputFormat::FIXED, "AERO_COEFF", "Total lift-to-drag ratio on all surfaces set with MARKER_MONITORING", HistoryFieldType::COEFFICIENT); + /// DESCRIPTION: Custom objective + AddHistoryOutput("CUSTOM_OBJFUNC", "Custom_ObjFunc", ScreenOutputFormat::FIXED, "CUSTOM", "Custom objective function on all surfaces set with MARKER_MONITORING", HistoryFieldType::COEFFICIENT); /// END_GROUP /// BEGIN_GROUP: AERO_COEFF_SURF, DESCRIPTION: Aerodynamic coefficients and forces per surface. @@ -654,6 +702,7 @@ void CFlowOutput::SetAerodynamicCoefficients(CConfig *config, CSolver *flow_solv if (nDim == 3) SetHistoryOutputValue("FORCE_Z", flow_solver->GetTotal_CFz()); SetHistoryOutputValue("EFFICIENCY", flow_solver->GetTotal_CEff()); + SetHistoryOutputValue("CUSTOM_OBJFUNC", flow_solver->GetTotal_Custom_ObjFunc()); for (unsigned short iMarker_Monitoring = 0; iMarker_Monitoring < config->GetnMarker_Monitoring(); iMarker_Monitoring++) { SetHistoryOutputPerSurfaceValue("DRAG_ON_SURFACE", flow_solver->GetSurface_CD(iMarker_Monitoring), iMarker_Monitoring); @@ -2008,6 +2057,9 @@ void CFlowOutput::WriteForcesBreakdown(const CConfig* config, const CSolver* flo } file << ").\n"; break; + + case VISCOSITYMODEL::FLAMELET: + break; } if (energy) { @@ -2038,6 +2090,9 @@ void CFlowOutput::WriteForcesBreakdown(const CConfig* config, const CSolver* flo } file << ").\n"; break; + + case CONDUCTIVITYMODEL::FLAMELET: + break; } if (turbulent) { diff --git a/SU2_CFD/src/output/CNEMOCompOutput.cpp b/SU2_CFD/src/output/CNEMOCompOutput.cpp index 15553be3558b..2fabad27e616 100644 --- a/SU2_CFD/src/output/CNEMOCompOutput.cpp +++ b/SU2_CFD/src/output/CNEMOCompOutput.cpp @@ -676,7 +676,9 @@ void CNEMOCompOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CSol /*--- Set the analyse surface history values --- */ - SetAnalyzeSurface(NEMO_solver, geometry, config, false); + + //SetAnalyzeSurface(NEMO_solver, geometry, config, false); + SetAnalyzeSurface(solver, geometry, config, false); /*--- Set aeroydnamic coefficients --- */ diff --git a/SU2_CFD/src/output/COutput.cpp b/SU2_CFD/src/output/COutput.cpp index b581dc6ee727..654de8a8558b 100644 --- a/SU2_CFD/src/output/COutput.cpp +++ b/SU2_CFD/src/output/COutput.cpp @@ -46,6 +46,9 @@ #include "../../include/output/filewriter/CSU2BinaryFileWriter.hpp" #include "../../include/output/filewriter/CSU2MeshFileWriter.hpp" +#include +#include +#include COutput::COutput(const CConfig *config, unsigned short ndim, bool fem_output): rank(SU2_MPI::GetRank()), @@ -312,6 +315,12 @@ void COutput::WriteToFile(CConfig *config, CGeometry *geometry, unsigned short f unsigned short lastindex = fileName.find_last_of("."); fileName = fileName.substr(0, lastindex); + std::stringstream inner_iter_ss; + inner_iter_ss << "_" << std::setw(8) << std::setfill('0') << curInnerIter; + + std::stringstream outer_iter_ss; + outer_iter_ss << "_" << std::setw(8) << std::setfill('0') << curOuterIter; + /*--- Write files depending on the format --- */ switch (format) { @@ -418,8 +427,15 @@ void COutput::WriteToFile(CConfig *config, CGeometry *geometry, unsigned short f case PARAVIEW_XML: - if (fileName.empty()) + if (fileName.empty()){ fileName = config->GetFilename(volumeFilename, "", curTimeIter); + if (!config->GetWrt_Sol_Overwrite()){ + if (config->GetMultizone_Problem()) + fileName.append(outer_iter_ss.str()); + else + fileName.append(inner_iter_ss.str()); + } + } /*--- Load and sort the output data and connectivity. ---*/ @@ -548,8 +564,12 @@ void COutput::WriteToFile(CConfig *config, CGeometry *geometry, unsigned short f case PARAVIEW: - if (fileName.empty()) + if (fileName.empty()){ fileName = config->GetFilename(volumeFilename, "", curTimeIter); + if (!config->GetWrt_Sol_Overwrite()){ + fileName.append(inner_iter_ss.str()); + } + } /*--- Load and sort the output data and connectivity. ---*/ @@ -566,8 +586,12 @@ void COutput::WriteToFile(CConfig *config, CGeometry *geometry, unsigned short f case SURFACE_PARAVIEW: - if (fileName.empty()) + if (fileName.empty()){ fileName = config->GetFilename(surfaceFilename, "", curTimeIter); + if (!config->GetWrt_Sol_Overwrite()){ + fileName.append(inner_iter_ss.str()); + } + } /*--- Load and sort the output data and connectivity. ---*/ diff --git a/SU2_CFD/src/output/output_structure_legacy.cpp b/SU2_CFD/src/output/output_structure_legacy.cpp index 22f91366005c..771d9b493e92 100644 --- a/SU2_CFD/src/output/output_structure_legacy.cpp +++ b/SU2_CFD/src/output/output_structure_legacy.cpp @@ -340,7 +340,7 @@ COutputLegacy::~COutputLegacy(void) { } void COutputLegacy::SetConvHistory_Header(ofstream *ConvHist_file, CConfig *config, unsigned short val_iZone, unsigned short val_iInst) { - char cstr[200], turb_resid[1000], adj_turb_resid[1000]; + char cstr[200], turb_resid[1000], adj_turb_resid[1000], scalar_resid[1000]; unsigned short iMarker_Monitoring; string Monitoring_Tag, monitoring_coeff, aeroelastic_coeff, turbo_coeff; @@ -353,6 +353,7 @@ void COutputLegacy::SetConvHistory_Header(ofstream *ConvHist_file, CConfig *conf bool turbulent = ((config->GetKind_Solver() == RANS) || (config->GetKind_Solver() == ADJ_RANS) || (config->GetKind_Solver() == DISC_ADJ_RANS) || (config->GetKind_Solver() == DISC_ADJ_INC_RANS) || (config->GetKind_Solver() == INC_RANS)); + bool scalar = (config->GetKind_Scalar_Model() != NO_SCALAR_MODEL); bool cont_adj = config->GetContinuous_Adjoint(); bool disc_adj = config->GetDiscrete_Adjoint(); bool frozen_visc = (cont_adj && config->GetFrozen_Visc_Cont()) ||( disc_adj && config->GetFrozen_Visc_Disc()); @@ -484,6 +485,11 @@ void COutputLegacy::SetConvHistory_Header(ofstream *ConvHist_file, CConfig *conf break; default: break; } + switch (config->GetKind_Scalar_Model()) { + case PASSIVE_SCALAR: case PROGRESS_VARIABLE: + SPRINTF (scalar_resid, ",\"Res_Scalar[0]\""); + break; + } switch (config->GetKind_Turb_Model()) { case TURB_MODEL::SA:case TURB_MODEL::SA_NEG:case TURB_MODEL::SA_E: case TURB_MODEL::SA_COMP: case TURB_MODEL::SA_E_COMP: SPRINTF (adj_turb_resid, ",\"Res_AdjTurb[0]\""); @@ -530,6 +536,7 @@ void COutputLegacy::SetConvHistory_Header(ofstream *ConvHist_file, CConfig *conf ConvHist_file[0] << flow_resid; if (turbulent) ConvHist_file[0] << turb_resid; + if (scalar) ConvHist_file[0] << scalar_resid; if (weakly_coupled_heat) ConvHist_file[0] << heat_resid; if (radiation) ConvHist_file[0] << rad_resid; if (aeroelastic) ConvHist_file[0] << aeroelastic_coeff; @@ -720,8 +727,7 @@ void COutputLegacy::SetConvHistory_Body(ofstream *ConvHist_file, adjoint_coeff[1000], flow_resid[1000], adj_flow_resid[1000], turb_resid[1000], trans_resid[1000], adj_turb_resid[1000], rad_resid[1000], begin_fem[1000], fem_coeff[1000], heat_resid[1000], combo_obj[1000], - fem_resid[1000], end[1000], end_fem[1000], surface_outputs[1000], d_surface_outputs[1000], d_direct_coeff[1000], turbo_coeff[10000]; - + fem_resid[1000], end[1000], end_fem[1000], surface_outputs[1000], d_surface_outputs[1000], d_direct_coeff[1000], turbo_coeff[10000], scalar_resid[1000]; su2double dummy = 0.0; const su2double *Coord = nullptr; @@ -745,6 +751,7 @@ void COutputLegacy::SetConvHistory_Body(ofstream *ConvHist_file, bool turbulent = ((config[val_iZone]->GetKind_Solver() == RANS) || (config[val_iZone]->GetKind_Solver() == ADJ_RANS) || (config[val_iZone]->GetKind_Solver() == DISC_ADJ_RANS) || config[val_iZone]->GetKind_Solver() == INC_RANS || config[val_iZone]->GetKind_Solver() == DISC_ADJ_INC_RANS); + bool scalar = (config[val_iZone]->GetKind_Scalar_Model() != NO_SCALAR_MODEL); bool adjoint = cont_adj || disc_adj; bool frozen_visc = (cont_adj && config[val_iZone]->GetFrozen_Visc_Cont()) ||( disc_adj && config[val_iZone]->GetFrozen_Visc_Disc()); bool heat = ((config[val_iZone]->GetKind_Solver() == HEAT_EQUATION) || (config[val_iZone]->GetWeakly_Coupled_Heat())); @@ -821,16 +828,17 @@ void COutputLegacy::SetConvHistory_Body(ofstream *ConvHist_file, D_Surface_Uniformity = 0.0, D_Surface_SecondaryStrength = 0.0, D_Surface_MomentumDistortion = 0.0, D_Surface_SecondOverUniform = 0.0, D_Surface_PressureDrop = 0.0; /*--- Residual arrays ---*/ - su2double *residual_flow = nullptr, - *residual_turbulent = nullptr, - *residual_transition = nullptr; - su2double *residual_adjflow = nullptr, - *residual_adjturbulent = nullptr, - *residual_adjheat = nullptr; + su2double *residual_flow = nullptr; + su2double *residual_turbulent = nullptr; + su2double *residual_transition = nullptr; + su2double *residual_adjflow = nullptr; + su2double *residual_adjturbulent = nullptr; + su2double *residual_adjheat = nullptr; su2double *residual_fea = nullptr; su2double *residual_fem = nullptr; su2double *residual_heat = nullptr; su2double *residual_rad = nullptr; + su2double *residual_scalar = nullptr; /*--- Coefficients Monitored arrays ---*/ su2double *aeroelastic_plunge = nullptr, @@ -848,7 +856,8 @@ void COutputLegacy::SetConvHistory_Body(ofstream *ConvHist_file, *Surface_Buffet_Metric = nullptr; /*--- Initialize number of variables ---*/ - unsigned short nVar_Flow = 0, nVar_Turb = 0, + + unsigned short nVar_Flow = 0, nVar_Turb = 0, nVar_Scalar = 0, nVar_Trans = 0, nVar_Heat = 0, nVar_AdjFlow = 0, nVar_AdjTurb = 0, nVar_AdjHeat = 0, nVar_FEM = 0, nVar_Rad = 0; @@ -862,6 +871,11 @@ void COutputLegacy::SetConvHistory_Body(ofstream *ConvHist_file, default: break; } } + if (scalar) { + switch (config[val_iZone]->GetKind_Scalar_Model()) { + case PASSIVE_SCALAR: case PROGRESS_VARIABLE: nVar_Scalar = 1; break; + } + } if (transition) nVar_Trans = 2; if (heat) nVar_Heat = 1; @@ -889,6 +903,7 @@ void COutputLegacy::SetConvHistory_Body(ofstream *ConvHist_file, /*--- Allocate memory for the residual ---*/ residual_flow = new su2double[nVar_Flow]; residual_turbulent = new su2double[nVar_Turb]; + residual_scalar = new su2double[nVar_Scalar]; residual_transition = new su2double[nVar_Trans]; residual_heat = new su2double[nVar_Heat]; residual_fem = new su2double[nVar_FEM]; @@ -1092,6 +1107,13 @@ void COutputLegacy::SetConvHistory_Body(ofstream *ConvHist_file, residual_turbulent[iVar] = solver_container[val_iZone][val_iInst][FinestMesh][TURB_SOL]->GetRes_RMS(iVar); } + /*--- Scalar residual ---*/ + + if (scalar) { + for (iVar = 0; iVar < nVar_Scalar; iVar++) + residual_scalar[iVar] = solver_container[val_iZone][val_iInst][FinestMesh][SCALAR_SOL]->GetRes_RMS(iVar); + } + if (weakly_coupled_heat) { for (iVar = 0; iVar < nVar_Heat; iVar++) { residual_heat[iVar] = solver_container[val_iZone][val_iInst][FinestMesh][HEAT_SOL]->GetRes_RMS(iVar); @@ -1441,7 +1463,14 @@ void COutputLegacy::SetConvHistory_Body(ofstream *ConvHist_file, case 2: SPRINTF (turb_resid, ", %12.10f, %12.10f", log10(residual_turbulent[0]), log10(residual_turbulent[1])); break; } } - + + /*--- Scalar residual ---*/ + if (scalar) { + switch(nVar_Scalar) { + case 1: SPRINTF (scalar_resid, ", %12.10f", log10 (residual_scalar[0])); break; + } + } + /*---- Averaged stagnation pressure at an exit ----*/ if (output_surface) { @@ -1703,8 +1732,10 @@ void COutputLegacy::SetConvHistory_Body(ofstream *ConvHist_file, // if (!fluid_structure) { if (incompressible && !weakly_coupled_heat) { - if (energy) {cout << " Res[Press]" << " Res[Temp]" << " CLift(Total)" << " CDrag(Total)" << endl;} - else {cout << " Res[Press]" << " Res[Velx]" << " CLift(Total)" << " CDrag(Total)" << endl;} + if (energy) { cout << " Res[Press]" << " Res[Temp]";} + else {cout << " Res[Press]" << " Res[Velx]";} + if (scalar) cout << " Res[Scalar]" << " CLift(Total)" << " CDrag(Total)" << endl; + else cout << " CLift(Total)" << " CDrag(Total)" << endl; } else if (incompressible && weakly_coupled_heat) cout << " Res[Press]" << " Res[Heat]" << " HFlux(Total)"; else if (rotating_frame && nDim == 3 && !turbo) cout << " Res[Rho]" << " Res[RhoE]" << " CThrust(Total)" << " CTorque(Total)" << endl; @@ -2029,9 +2060,11 @@ void COutputLegacy::SetConvHistory_Body(ofstream *ConvHist_file, ConvHist_file[0] << begin << turbo_coeff << flow_resid; } + if (scalar) ConvHist_file[0] << scalar_resid; if (aeroelastic) ConvHist_file[0] << aeroelastic_coeff; if (output_per_surface) ConvHist_file[0] << monitoring_coeff; if (output_surface) ConvHist_file[0] << surface_outputs; + if (direct_diff != NO_DERIVATIVE) { ConvHist_file[0] << d_direct_coeff; if (output_surface) ConvHist_file[0] << d_surface_outputs; @@ -2055,9 +2088,9 @@ void COutputLegacy::SetConvHistory_Body(ofstream *ConvHist_file, if (incompressible && !weakly_coupled_heat) { if (energy) {cout.width(14); cout << log10(residual_flow[nDim+1]);} else {cout.width(14); cout << log10(residual_flow[1]);} + if (scalar) {cout.width(14); cout << log10(residual_scalar[0]);} } if (incompressible && weakly_coupled_heat) { cout.width(14); cout << log10(residual_heat[0]);} - } if (rotating_frame && nDim == 3 && !turbo ) { @@ -2124,10 +2157,12 @@ void COutputLegacy::SetConvHistory_Body(ofstream *ConvHist_file, else { ConvHist_file[0] << begin << turbo_coeff << flow_resid << turb_resid; } - + + if (scalar) ConvHist_file[0] << scalar_resid; if (aeroelastic) ConvHist_file[0] << aeroelastic_coeff; if (output_per_surface) ConvHist_file[0] << monitoring_coeff; if (output_surface) ConvHist_file[0] << surface_outputs; + if (direct_diff != NO_DERIVATIVE) { ConvHist_file[0] << d_direct_coeff; if (output_surface) ConvHist_file[0] << d_surface_outputs; @@ -2152,7 +2187,6 @@ void COutputLegacy::SetConvHistory_Body(ofstream *ConvHist_file, case 2: cout.width(14); cout << log10(residual_turbulent[0]); cout.width(15); cout << log10(residual_turbulent[1]); break; } - if (weakly_coupled_heat) { cout.width(14); cout << log10(residual_heat[0]); } @@ -2397,6 +2431,7 @@ void COutputLegacy::SetConvHistory_Body(ofstream *ConvHist_file, delete [] residual_flow; delete [] residual_turbulent; + delete [] residual_scalar; delete [] residual_transition; delete [] residual_fea; delete [] residual_fem; @@ -3343,6 +3378,8 @@ void COutputLegacy::SpecialOutput_ForcesBreakdown(CSolver *****solver, CGeometry Breakdown_file << ")." << endl; break; + case VISCOSITYMODEL::FLAMELET: + break; } if (energy) { @@ -3375,6 +3412,8 @@ void COutputLegacy::SpecialOutput_ForcesBreakdown(CSolver *****solver, CGeometry Breakdown_file << ")." << endl; break; + case CONDUCTIVITYMODEL::FLAMELET: + break; } if ((Kind_Solver == RANS) || (Kind_Solver == ADJ_RANS) || (Kind_Solver == DISC_ADJ_RANS)) { diff --git a/SU2_CFD/src/solvers/CDiscAdjSolver.cpp b/SU2_CFD/src/solvers/CDiscAdjSolver.cpp index cf6f657497ef..077e134d33a1 100644 --- a/SU2_CFD/src/solvers/CDiscAdjSolver.cpp +++ b/SU2_CFD/src/solvers/CDiscAdjSolver.cpp @@ -96,6 +96,10 @@ CDiscAdjSolver::CDiscAdjSolver(CGeometry *geometry, CConfig *config, CSolver *di case RUNTIME_TURB_SYS: SolverName = "ADJ.TURB"; break; + //nijso: do we really need this? + //case RUNTIME_SCALAR_SYS: + // SolverName = "ADJ.SCALAR"; + // break; case RUNTIME_RADIATION_SYS: SolverName = "ADJ.RAD"; break; @@ -618,6 +622,8 @@ void CDiscAdjSolver::LoadRestart(CGeometry **geometry, CSolver ***solver, CConfi /*--- Skip coordinates ---*/ unsigned short skipVars = geometry[MESH_0]->GetnDim(); + // nijso: daniel, we have to add progvar here? + /*--- Skip flow adjoint variables ---*/ if (KindDirect_Solver== RUNTIME_TURB_SYS) { skipVars += nDim + 2; @@ -629,6 +635,12 @@ void CDiscAdjSolver::LoadRestart(CGeometry **geometry, CSolver ***solver, CConfi if (rans) skipVars += solver[MESH_0][TURB_SOL]->GetnVar(); } + if (KindDirect_Solver== RUNTIME_SCALAR_SYS) { + // x,y,u,v,p,t + skipVars = 2*nDim+2 ; + if (rans) skipVars += solver[MESH_0][TURB_SOL]->GetnVar(); + } + BasicLoadRestart(geometry[MESH_0], config, restart_filename, skipVars); /*--- Interpolate solution on coarse grids ---*/ diff --git a/SU2_CFD/src/solvers/CEulerSolver.cpp b/SU2_CFD/src/solvers/CEulerSolver.cpp index 88b12a0a4e26..cbdb53f84766 100644 --- a/SU2_CFD/src/solvers/CEulerSolver.cpp +++ b/SU2_CFD/src/solvers/CEulerSolver.cpp @@ -1088,6 +1088,7 @@ void CEulerSolver::SetNondimensionalization(CConfig *config, unsigned short iMes if (viscous) { GetFluidModel()->SetLaminarViscosityModel(config); GetFluidModel()->SetThermalConductivityModel(config); + GetFluidModel()->SetMassDiffusivityModel(config); } } @@ -4257,6 +4258,18 @@ void CEulerSolver::Evaluate_ObjFunc(const CConfig *config) { case SURFACE_MACH: Total_ComboObj+=Weight_ObjFunc*config->GetSurface_Mach(0); break; + case SURFACE_CO: + Total_ComboObj+=Weight_ObjFunc*config->GetSurface_CO(0); + break; + case SURFACE_NOX: + Total_ComboObj+=Weight_ObjFunc*config->GetSurface_NOx(0); + break; + case SURFACE_TEMP: + Total_ComboObj+=Weight_ObjFunc*config->GetSurface_Temperature(0); + break; + case AVG_TEMPERATURE: + Total_ComboObj+=Weight_ObjFunc*config->GetSurface_Temperature(0); + break; default: break; } diff --git a/SU2_CFD/src/solvers/CFEM_DG_EulerSolver.cpp b/SU2_CFD/src/solvers/CFEM_DG_EulerSolver.cpp index cc001376962b..a709b874cfcd 100644 --- a/SU2_CFD/src/solvers/CFEM_DG_EulerSolver.cpp +++ b/SU2_CFD/src/solvers/CFEM_DG_EulerSolver.cpp @@ -1084,6 +1084,7 @@ void CFEM_DG_EulerSolver::SetNondimensionalization(CConfig *config, FluidModel->SetLaminarViscosityModel(config); FluidModel->SetThermalConductivityModel(config); + FluidModel->SetMassDiffusivityModel(config); } diff --git a/SU2_CFD/src/solvers/CFlameletSolver.cpp b/SU2_CFD/src/solvers/CFlameletSolver.cpp new file mode 100644 index 000000000000..737b8de1a621 --- /dev/null +++ b/SU2_CFD/src/solvers/CFlameletSolver.cpp @@ -0,0 +1,788 @@ +/*! + * \file CFlameletSolver.cpp + * \brief Main subroutines for solving transported scalar class + * \author T. Economon, N. Beishuizen, D. Mayer + * \version 7.1.1 "Blackbird" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2020, SU2 Contributors (cf. AUTHORS.md) + * + * SU2 is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * SU2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with SU2. If not, see . + */ + +#include "../../include/solvers/CFlameletSolver.hpp" +#include "../../include/variables/CFlameletVariable.hpp" +#include "../../include/fluid/CFluidFlamelet.hpp" +#include "../../../Common/include/parallelization/omp_structure.hpp" +#include "../../../Common/include/toolboxes/geometry_toolbox.hpp" + +CFlameletSolver::CFlameletSolver(void) : CScalarLegacySolver() {} + +CFlameletSolver::CFlameletSolver(CGeometry *geometry, + CConfig *config, + unsigned short iMesh) +: CScalarLegacySolver(geometry, config) { + unsigned short nLineLets; + const bool turbulent = ((config->GetKind_Solver() == RANS) || + (config->GetKind_Solver() == DISC_ADJ_RANS)); + const bool turb_SST = ((turbulent) && (config->GetKind_Turb_Model() == TURB_MODEL::SST)); + const bool turb_SA = ((turbulent) && (config->GetKind_Turb_Model() == TURB_MODEL::SA)); + const bool multizone = config->GetMultizone_Problem(); + + /*--- Dimension of the problem --> passive scalar will only ever + have a single equation. Other child classes of CScalarLegacySolver + will have variable numbers of equations. ---*/ + + nVar = config->GetNScalars(); + nPrimVar = config->GetNScalars(); + + nPoint = geometry->GetnPoint(); + nPointDomain = geometry->GetnPointDomain(); + + /*--- Initialize nVarGrad for deallocation ---*/ + + nVarGrad = nVar; + + /*--- Define geometry constants in the solver structure ---*/ + + nDim = geometry->GetnDim(); + + /*--- Fluid model pointer initialization ---*/ + + FluidModel = nullptr; + + /*--- Single grid simulation ---*/ + + /*--- Define some auxiliary vector related with the solution ---*/ + Solution = new su2double[nVar]; + Solution_i = new su2double[nVar]; + Solution_j = new su2double[nVar]; + + /*--- Allocates a 3D array with variable "middle" sizes and init to 0. ---*/ + + auto Alloc3D = [](unsigned long M, const vector& N, unsigned long P, vector& X) { + X.resize(M); + for (unsigned long i = 0; i < M; ++i) X[i].resize(N[i], P) = su2double(0.0); + }; + + /*--- Store the values of the temperature and the heat flux density at the boundaries, + used for coupling with a solid donor cell ---*/ + constexpr auto n_conjugate_var = 4u; + + Alloc3D(nMarker, nVertex, n_conjugate_var, conjugate_var); + for (auto& x : conjugate_var) x = config->GetTemperature_FreeStreamND(); + + /*--- do not see a reason to use only single grid ---*/ + //if (iMesh == MESH_0) { + + /*--- Define some auxiliary vector related with the residual ---*/ + + Residual_RMS.resize(nVar,0.0); + Residual_Max.resize(nVar,0.0); + Point_Max.resize(nVar,0); + Point_Max_Coord.resize(nVar,nDim) = su2double(0.0); + + /*--- Initialization of the structure of the whole Jacobian ---*/ + + if (rank == MASTER_NODE) cout << "Initialize Jacobian structure (Flamelet model)." << endl; + Jacobian.Initialize(nPoint, nPointDomain, nVar, nVar, true, geometry, config, ReducerStrategy); + + if (config->GetKind_Linear_Solver_Prec() == LINELET) { + nLineLets = Jacobian.BuildLineletPreconditioner(geometry, config); + if (rank == MASTER_NODE) cout << "Compute linelet structure. " << nLineLets << " elements in each line (average)." << endl; + } + + LinSysSol.Initialize(nPoint, nPointDomain, nVar, 0.0); + LinSysRes.Initialize(nPoint, nPointDomain, nVar, 0.0); + System.SetxIsZero(true); + + if (ReducerStrategy) + EdgeFluxes.Initialize(geometry->GetnEdge(), geometry->GetnEdge(), nVar, nullptr); + + /*--- Initialize the BGS residuals in multizone problems. ---*/ + if (multizone){ + Residual_BGS.resize(nVar,0.0); + Residual_Max_BGS.resize(nVar,0.0); + Point_Max_BGS.resize(nVar,0); + Point_Max_Coord_BGS.resize(nVar,nDim) = su2double(0.0); + } + + //} //iMESH_0 + + /*--- Initialize lower and upper limits---*/ + + lowerlimit = new su2double[nVar]; + upperlimit = new su2double[nVar]; + if (config->GetScalar_Clipping()){ + for (auto iVar=0u;iVarGetScalar_Clipping_Min(iVar); + upperlimit[iVar] = config->GetScalar_Clipping_Max(iVar); + } + } + else { + for (auto iVar=0u;iVarGetDensity_FreeStreamND(); + //Viscosity_Inf = config->GetViscosity_FreeStreamND(); + + /*--- Set up fluid model for the diffusivity ---*/ + + su2double Diffusivity_Ref = 1.0; + su2double DiffusivityND = config->GetDiffusivity_Constant()/Diffusivity_Ref; + config->SetDiffusivity_ConstantND(DiffusivityND); + + //nijso: we probably do not need this for cflamelet + //FluidModel = new CFluidModel(); + //FluidModel->SetMassDiffusivityModel(config); + + /*--- Scalar variable state at the far-field. ---*/ + + Scalar_Inf = new su2double[nVar]; + for (auto iVar = 0u; iVar < nVar; iVar++){ + Scalar_Inf[iVar] = config->GetScalar_Init(iVar); + } + + /*--- Initialize the solution to the far-field state everywhere. ---*/ + + nodes = new CFlameletVariable(Scalar_Inf, nPoint, nDim, nVar, config); + + + //nijso: we probably do not need this for flamelet model + /*--- initialize the mass diffusivity ---*/ + // for (auto iVar = 0u; iVar < nVar; iVar++){ + // auto mass_diff = FluidModel->GetMassDiffusivity(); // returns a su2double, note that for more species this should be a vector + // // loop over all points and set diffusivity + // // why construct the entire diffusivity matrix? + // for (unsigned long iPoint = 0; iPoint < nPoint; iPoint++) + // nodes->SetDiffusivity(iPoint, mass_diff, iVar); + // } + + SetBaseClassPointerToNodes(); + + /*--- MPI solution ---*/ + + InitiateComms(geometry, config, SOLUTION); + CompleteComms(geometry, config, SOLUTION); + + /*--- Initialize quantities for SlidingMesh Interface ---*/ + + SlidingState.resize(nMarker); + SlidingStateNodes.resize(nMarker); + + for (unsigned long iMarker = 0; iMarker < nMarker; iMarker++) { + if (config->GetMarker_All_KindBC(iMarker) == FLUID_INTERFACE) { + SlidingState[iMarker].resize(nVertex[iMarker], nPrimVar+1) = nullptr; + SlidingStateNodes[iMarker].resize(nVertex[iMarker],0); + } + } + + + /*-- Allocation of inlets has to happen in derived classes + (not CScalarLegacySolver), due to arbitrary number of scalar variables. + First, we also set the column index for any inlet profiles. ---*/ + // [x,y],T,[U,V], + Inlet_Position = nDim*2+2; + if (turbulent) { + if (turb_SA) Inlet_Position += 1; + else if (turb_SST) Inlet_Position += 2; + } + + Inlet_ScalarVars.resize(nMarker); + for (unsigned long iMarker = 0; iMarker < nMarker; iMarker++){ + Inlet_ScalarVars[iMarker].resize(nVertex[iMarker],nVar); + for (unsigned long iVertex = 0; iVertex < nVertex[iMarker]; ++iVertex) { + for (unsigned short iVar = 0; iVar < nVar; iVar++){ + Inlet_ScalarVars[iMarker](iVertex,iVar) = Scalar_Inf[iVar]; + } + } + } + + /*--- The turbulence models are always solved implicitly, so set the + implicit flag in case we have periodic BCs. ---*/ + + SetImplicitPeriodic(true); + + /*--- Store the initial CFL number for all grid points. ---*/ + + const su2double CFL = config->GetCFL(MGLevel)*config->GetCFLRedCoeff_Scalar(); + for (auto i_point = 0u; i_point < nPoint; i_point++) { + nodes->SetLocalCFL(i_point, CFL); + } + Min_CFL_Local = CFL; + Max_CFL_Local = CFL; + Avg_CFL_Local = CFL; + + /*--- Add the solver name (max 8 characters) ---*/ + SolverName = "FLAMELET"; + +} + +CFlameletSolver::~CFlameletSolver(void) { + if (FluidModel != nullptr) delete FluidModel; +} + + +void CFlameletSolver::Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, + unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output) { + + unsigned long n_not_in_domain = 0; + unsigned long global_table_misses = 0; + + const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); + const bool muscl = config->GetMUSCL_Scalar(); + const bool limiter = (config->GetKind_SlopeLimit_Scalar() != NO_LIMITER) && + (config->GetInnerIter() <= config->GetLimiterIter()); + + for (auto i_point = 0u; i_point < nPoint; i_point++) { + + CFluidModel * fluid_model_local = solver_container[FLOW_SOL]->GetFluidModel(); + su2double * scalars = nodes->GetSolution(i_point); + + n_not_in_domain += fluid_model_local->SetTDState_T(0,scalars); /*--- first argument (temperature) is not used ---*/ + + for(auto i_scalar = 0u; i_scalar < config->GetNScalars(); ++i_scalar){ + nodes->SetDiffusivity(i_point, fluid_model_local->GetMassDiffusivity(), i_scalar); + } + + if (!Output) LinSysRes.SetBlock_Zero(i_point); + + } + + if (config->GetComm_Level() == COMM_FULL) { + SU2_MPI::Reduce(&n_not_in_domain, &global_table_misses, 1, MPI_UNSIGNED_LONG, MPI_SUM, MASTER_NODE, SU2_MPI::GetComm()); + if (rank == MASTER_NODE) { + SetNTableMisses(global_table_misses); + } + } + + /*--- Clear residual and system matrix, not needed for + * reducer strategy as we write over the entire matrix. ---*/ + if (!ReducerStrategy && !Output) { + LinSysRes.SetValZero(); + if (implicit) Jacobian.SetValZero(); + else {SU2_OMP_BARRIER} + } + + /*--- Upwind second order reconstruction and gradients ---*/ + + if (config->GetReconstructionGradientRequired()) { + if (config->GetKind_Gradient_Method_Recon() == GREEN_GAUSS) + SetSolution_Gradient_GG(geometry, config, true); + if (config->GetKind_Gradient_Method_Recon() == LEAST_SQUARES) + SetSolution_Gradient_LS(geometry, config, true); + if (config->GetKind_Gradient_Method_Recon() == WEIGHTED_LEAST_SQUARES) + SetSolution_Gradient_LS(geometry, config, true); + } + + if (config->GetKind_Gradient_Method() == GREEN_GAUSS) + SetSolution_Gradient_GG(geometry, config); + + if (config->GetKind_Gradient_Method() == WEIGHTED_LEAST_SQUARES) + SetSolution_Gradient_LS(geometry, config); + + if (limiter && muscl) SetSolution_Limiter(geometry, config); +} + +void CFlameletSolver::Postprocessing(CGeometry *geometry, CSolver **solver_container, + CConfig *config, unsigned short iMesh) { + +/*--- your postprocessing goes here ---*/ + +} + +void CFlameletSolver::SetInitialCondition(CGeometry **geometry, + CSolver ***solver_container, + CConfig *config, + unsigned long ExtIter) { + bool Restart = (config->GetRestart() || config->GetRestart_Flow()); + + + if ((!Restart) && ExtIter == 0) { + if (rank == MASTER_NODE){ + cout << "Initializing progress variable and temperature (initial condition)." << endl; + } + + su2double *scalar_init = new su2double[nVar]; + su2double *flame_offset = config->GetFlameOffset(); + su2double *flame_normal = config->GetFlameNormal(); + + su2double prog_burnt; + su2double prog_unburnt = 0.0; + su2double flame_thickness = config->GetFlameThickness(); + su2double burnt_thickness = config->GetBurntThickness(); + su2double flamenorm = sqrt( flame_normal[0]*flame_normal[0] + +flame_normal[1]*flame_normal[1] + +flame_normal[2]*flame_normal[2]); + + + su2double temp_inlet = config->GetInc_Temperature_Init(); // should do reverse lookup of enthalpy + su2double prog_inlet = config->GetScalar_Init(I_PROG_VAR); + if (rank == MASTER_NODE){ + cout << "initial condition: T = "< 0) + cout << " !!! Initial condition: Number of points in which enthalpy could not be iterated: " << n_not_iterated << " !!!" << endl; + + if (rank == MASTER_NODE && (n_not_in_domain > 0 || n_not_iterated > 0)) + cout << endl; + } +} + +void CFlameletSolver::SetPreconditioner(CGeometry *geometry, CSolver **solver_container, CConfig *config) { + + unsigned short iVar; + unsigned long iPoint, total_index; + + su2double BetaInc2, Density, dRhodT, dRhodC, Temperature, Delta; + + bool variable_density = (config->GetKind_DensityModel() == INC_DENSITYMODEL::VARIABLE); + bool implicit = (config->GetKind_TimeIntScheme_Flow() == EULER_IMPLICIT); + + for (iPoint = 0; iPoint < nPointDomain; iPoint++) { + + /*--- Access the primitive variables at this node. ---*/ + + Density = solver_container[FLOW_SOL]->GetNodes()->GetDensity(iPoint); + BetaInc2 = solver_container[FLOW_SOL]->GetNodes()->GetBetaInc2(iPoint); + Temperature = solver_container[FLOW_SOL]->GetNodes()->GetTemperature(iPoint); + + unsigned short nVar_Flow = solver_container[FLOW_SOL]->GetnVar(); + + su2double SolP = solver_container[FLOW_SOL]->LinSysSol[iPoint*nVar_Flow+0]; + su2double SolT = solver_container[FLOW_SOL]->LinSysSol[iPoint*nVar_Flow+nDim+1]; + + /*--- We need the derivative of the equation of state to build the + preconditioning matrix. For now, the only option is the ideal gas + law, but in the future, dRhodT should be in the fluid model. ---*/ + + if (variable_density) { + dRhodT = -Density/Temperature; + } else { + dRhodT = 0.0; + } + + /*--- Passive scalars have no impact on the density. ---*/ + + dRhodC = 0.0; + + /*--- Modify matrix diagonal with term including volume and time step. ---*/ + + su2double Vol = geometry->nodes->GetVolume(iPoint); + Delta = Vol / (config->GetCFLRedCoeff_Scalar()* + solver_container[FLOW_SOL]->GetNodes()->GetDelta_Time(iPoint)); + + /*--- Calculating the inverse of the preconditioning matrix + that multiplies the time derivative during time integration. ---*/ + + if (implicit) { + // nijso: do we need to wipe the entire jacobian for preconditioning? + //for (int i_var = 0; i_var < nVar; i_var++) { + // for (int j_var = 0; j_var < nVar; j_var++) { + // Jacobian_i[i_var][j_var] = 0.0; + // } + //} + + for (iVar = 0; iVar < nVar; iVar++) { + + total_index = iPoint*nVar+iVar; + + su2double scalar = nodes->GetSolution(iPoint,iVar); + + /*--- Compute the lag terms for the decoupled linear system from + the mean flow equations and add to the residual for the scalar. + In short, we are effectively making these terms explicit. ---*/ + + su2double artcompc1 = SolP * scalar/(Density*BetaInc2); + su2double artcompc2 = SolT * dRhodT * scalar/(Density); + + LinSysRes[total_index] += artcompc1 + artcompc2; + + /*--- Add the extra Jacobian term to the scalar system. ---*/ + + su2double Jaccomp = scalar * dRhodC + Density; //This is Gamma + su2double JacTerm = Jaccomp*Delta; + + Jacobian.AddVal2Diag(iPoint, JacTerm); + + } + + } + + } + +} + +void CFlameletSolver::Source_Residual(CGeometry *geometry, + CSolver **solver_container, + CNumerics **numerics_container, + CConfig *config, + unsigned short iMesh) { + + bool implicit = (config->GetKind_TimeIntScheme_Flow() == EULER_IMPLICIT); + bool axisymmetric = config->GetAxisymmetric(); + + CNumerics *first_numerics = numerics_container[SOURCE_FIRST_TERM + omp_get_thread_num()*MAX_TERMS]; + + CFluidModel *fluid_model_local = solver_container[FLOW_SOL]->GetFluidModel(); + + SU2_OMP_FOR_DYN(omp_chunk_size) + for (auto i_point = 0u; i_point < nPointDomain; i_point++) { + + /*--- Set primitive variables w/o reconstruction ---*/ + + first_numerics->SetPrimitive(solver_container[FLOW_SOL]->GetNodes()->GetPrimitive(i_point), nullptr); + + /*--- Set scalar variables w/o reconstruction ---*/ + + first_numerics->SetScalarVar(nodes->GetSolution(i_point), nullptr); + + first_numerics->SetDiffusionCoeff(nodes->GetDiffusivity(i_point), nodes->GetDiffusivity(i_point)); + + /*--- Set volume of the dual cell. ---*/ + + first_numerics->SetVolume(geometry->nodes->GetVolume(i_point)); + + /*--- Update scalar sources in the fluidmodel ---*/ + + /*--- Axisymmetry source term for the scalar equation. ---*/ + if (axisymmetric){ + /*--- Set y coordinate ---*/ + first_numerics->SetCoord(geometry->nodes->GetCoord(i_point), geometry->nodes->GetCoord(i_point)); + /*-- gradients necessary for axisymmetric flows only? ---*/ + first_numerics->SetScalarVarGradient(nodes->GetGradient(i_point), nullptr); + } + + fluid_model_local->SetScalarSources(nodes->GetSolution(i_point)); + + /*--- Retrieve scalar sources from fluidmodel and update numerics class data. ---*/ + //first_numerics->SetSourcePV(fluid_model_local->GetScalarSources()[0]); + first_numerics->SetScalarSources(fluid_model_local->GetScalarSources()); + //first_numerics->SetScalarSources(zero_sources); + + auto residual = first_numerics->ComputeResidual(config); + + /*--- Add Residual ---*/ + + LinSysRes.SubtractBlock(i_point, residual); + + /*--- Implicit part ---*/ + + if (implicit) Jacobian.SubtractBlock2Diag(i_point, residual.jacobian_i); + + } + END_SU2_OMP_FOR +} + +void CFlameletSolver::BC_Inlet(CGeometry *geometry, + CSolver **solver_container, + CNumerics *conv_numerics, + CNumerics *visc_numerics, + CConfig *config, + unsigned short val_marker) { + + unsigned short iVar; + unsigned long iVertex, iPoint, total_index; + su2double enth_inlet; + + string Marker_Tag = config->GetMarker_All_TagBound(val_marker); + su2double temp_inlet = config->GetInlet_Ttotal (Marker_Tag); + su2double *inlet_scalar = config->GetInlet_ScalarVal (Marker_Tag); + + CFluidModel *fluid_model_local = solver_container[FLOW_SOL]->GetFluidModel(); + + fluid_model_local->GetEnthFromTemp(&enth_inlet, inlet_scalar[I_PROG_VAR], temp_inlet); + inlet_scalar[I_ENTHALPY] = enth_inlet; + + /*--- Loop over all the vertices on this boundary marker ---*/ + + for (iVertex = 0; iVertex < geometry->nVertex[val_marker]; iVertex++) { + + /* Dirichlet boundary condition at the inlet for scalars */ + + iPoint = geometry->vertex[val_marker][iVertex]->GetNode(); + + /*--- Check if the node belongs to the domain (i.e., not a halo node) ---*/ + + if (geometry->nodes->GetDomain(iPoint)) { + + nodes->SetSolution_Old(iPoint, inlet_scalar); + + LinSysRes.SetBlock_Zero(iPoint); + + for (iVar = 0; iVar < nVar; iVar++) { + nodes->SetVal_ResTruncError_Zero(iPoint, iVar); + } + + /*--- Includes 1 in the diagonal ---*/ + for (iVar = 0; iVar < nVar; iVar++) { + total_index = iPoint*nVar+iVar; + Jacobian.DeleteValsRowi(total_index); + } + } + } + +} + +void CFlameletSolver::BC_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, + CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + + /*--- Loop over all the vertices on this boundary marker ---*/ + + SU2_OMP_FOR_STAT(OMP_MIN_SIZE) + for (auto iVertex = 0u; iVertex < geometry->nVertex[val_marker]; iVertex++) { + + /* strong zero flux Neumann boundary condition at the outlet */ + const auto iPoint = geometry->vertex[val_marker][iVertex]->GetNode(); + + /*--- Check if the node belongs to the domain (i.e., not a halo node) ---*/ + + if (geometry->nodes->GetDomain(iPoint)) { + + /*--- Allocate the value at the outlet ---*/ + auto Point_Normal = geometry->vertex[val_marker][iVertex]->GetNormal_Neighbor(); + + for (auto iVar = 0u; iVar < nVar; iVar++) + Solution[iVar] = nodes->GetSolution(Point_Normal, iVar); + nodes->SetSolution_Old(iPoint, Solution); + + LinSysRes.SetBlock_Zero(iPoint); + + for (auto iVar = 0u; iVar < nVar; iVar++){ + nodes->SetVal_ResTruncError_Zero(iPoint, iVar); + } + + /*--- Includes 1 in the diagonal ---*/ + for (auto iVar = 0u; iVar < nVar; iVar++) { + auto total_index = iPoint*nVar+iVar; + Jacobian.DeleteValsRowi(total_index); + } + } + } + END_SU2_OMP_FOR + +} + +void CFlameletSolver::BC_HeatFlux_Wall(CGeometry *geometry, + CSolver **solver_container, + CNumerics *conv_numerics, + CNumerics *visc_numerics, + CConfig *config, + unsigned short val_marker) { +} + +void CFlameletSolver::BC_Isothermal_Wall(CGeometry *geometry, + CSolver **solver_container, + CNumerics *conv_numerics, + CNumerics *visc_numerics, + CConfig *config, + unsigned short val_marker) { + + unsigned long iVertex, iPoint, total_index; + + bool implicit = config->GetKind_TimeIntScheme_Flow() == EULER_IMPLICIT; + string Marker_Tag = config->GetMarker_All_TagBound(val_marker); + su2double temp_wall = config->GetIsothermal_Temperature(Marker_Tag); + CFluidModel *fluid_model_local = solver_container[FLOW_SOL]->GetFluidModel(); + su2double enth_wall, prog_wall; + unsigned long n_not_iterated = 0; + + /*--- Loop over all the vertices on this boundary marker ---*/ + + for (iVertex = 0; iVertex < geometry->nVertex[val_marker]; iVertex++) { + + iPoint = geometry->vertex[val_marker][iVertex]->GetNode(); + + /*--- Check if the node belongs to the domain (i.e., not a halo node) ---*/ + + if (geometry->nodes->GetDomain(iPoint)) { + /*--- Set enthalpy on the wall ---*/ + + prog_wall = solver_container[SCALAR_SOL]->GetNodes()->GetSolution(iPoint)[I_PROG_VAR]; + n_not_iterated += fluid_model_local->GetEnthFromTemp(&enth_wall, prog_wall, temp_wall); + + /*--- Impose the value of the enthalpy as a strong boundary + condition (Dirichlet) and remove any + contribution to the residual at this node. ---*/ + + nodes->SetSolution(iPoint, I_ENTHALPY, enth_wall); + nodes->SetSolution_Old(iPoint, I_ENTHALPY, enth_wall); + + //LinSysRes(iPoint, I_ENTHALPY) = 0.0; + LinSysRes.SetBlock_Zero(iPoint, I_ENTHALPY); + + nodes->SetVal_ResTruncError_Zero(iPoint, I_ENTHALPY); + + if (implicit) { + total_index = iPoint * nVar + I_ENTHALPY; + + Jacobian.DeleteValsRowi(total_index); + } + } + } + if (rank == MASTER_NODE && n_not_iterated > 0){ + cout << " !!! Isothermal wall bc (" << Marker_Tag << "): Number of points in which enthalpy could not be iterated: " << n_not_iterated << " !!!" << endl; + } + +} + +void CFlameletSolver::BC_ConjugateHeat_Interface(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, + CConfig *config, unsigned short val_marker) { + + unsigned long iVertex, iPoint, total_index; + + bool implicit = config->GetKind_TimeIntScheme_Flow() == EULER_IMPLICIT; + string Marker_Tag = config->GetMarker_All_TagBound(val_marker); + su2double temp_wall = config->GetIsothermal_Temperature(Marker_Tag); + CFluidModel *fluid_model_local = solver_container[FLOW_SOL]->GetFluidModel(); + su2double enth_wall, prog_wall; + unsigned long n_not_iterated = 0; + + /*--- Loop over all the vertices on this boundary marker ---*/ + + for (iVertex = 0; iVertex < geometry->nVertex[val_marker]; iVertex++) { + + iPoint = geometry->vertex[val_marker][iVertex]->GetNode(); + + + temp_wall = GetConjugateHeatVariable(val_marker, iVertex, 0); + + /*--- Check if the node belongs to the domain (i.e., not a halo node) ---*/ + + if (geometry->nodes->GetDomain(iPoint)) { + /*--- Set enthalpy on the wall ---*/ + + prog_wall = solver_container[SCALAR_SOL]->GetNodes()->GetSolution(iPoint)[I_PROG_VAR]; + n_not_iterated += fluid_model_local->GetEnthFromTemp(&enth_wall, prog_wall, temp_wall); + + /*--- Impose the value of the enthalpy as a strong boundary + condition (Dirichlet) and remove any + contribution to the residual at this node. ---*/ + + nodes->SetSolution(iPoint, I_ENTHALPY, enth_wall); + nodes->SetSolution_Old(iPoint, I_ENTHALPY, enth_wall); + + LinSysRes.SetBlock_Zero(iPoint, I_ENTHALPY); + + nodes->SetVal_ResTruncError_Zero(iPoint, I_ENTHALPY); + + if (implicit) { + total_index = iPoint * nVar + I_ENTHALPY; + + Jacobian.DeleteValsRowi(total_index); + } + } + } + if (rank == MASTER_NODE && n_not_iterated > 0){ + cout << " !!! CHT interface (" << Marker_Tag << "): Number of points in which enthalpy could not be iterated: " << n_not_iterated << " !!!" << endl; + } +} + diff --git a/SU2_CFD/src/solvers/CIncEulerSolver.cpp b/SU2_CFD/src/solvers/CIncEulerSolver.cpp index bc1a74d1efbb..014ca789b8a3 100644 --- a/SU2_CFD/src/solvers/CIncEulerSolver.cpp +++ b/SU2_CFD/src/solvers/CIncEulerSolver.cpp @@ -31,6 +31,7 @@ #include "../../include/fluid/CIncIdealGas.hpp" #include "../../include/fluid/CIncIdealGasPolynomial.hpp" #include "../../include/variables/CIncNSVariable.hpp" +#include "../include/fluid/CFluidFlamelet.hpp" #include "../../include/limiters/CLimiterDetails.hpp" #include "../../../Common/include/toolboxes/geometry_toolbox.hpp" @@ -264,6 +265,8 @@ void CIncEulerSolver::SetNondimensionalization(CConfig *config, unsigned short i /*--- Depending on the density model chosen, select a fluid model. ---*/ + su2double *dummy_scalar; + unsigned short n_scalars; CFluidModel* auxFluidModel = nullptr; switch (config->GetKind_FluidModel()) { @@ -300,6 +303,17 @@ void CIncEulerSolver::SetNondimensionalization(CConfig *config, unsigned short i config->SetPressure_Thermodynamic(Pressure_Thermodynamic); break; + case FLAMELET_FLUID_MODEL: + + config->SetGas_Constant(UNIVERSAL_GAS_CONSTANT/(config->GetMolecular_Weight()/1000.0)); + Pressure_Thermodynamic = Density_FreeStream*Temperature_FreeStream*config->GetGas_Constant(); + auxFluidModel = new CFluidFlamelet(config,Pressure_Thermodynamic); + n_scalars = auxFluidModel->GetNScalars(); + dummy_scalar = new su2double[n_scalars](); + auxFluidModel->SetTDState_T(Temperature_FreeStream, dummy_scalar); + config->SetPressure_Thermodynamic(Pressure_Thermodynamic); + break; + default: SU2_MPI::Error("Fluid model not implemented for incompressible solver.", CURRENT_FUNCTION); @@ -446,10 +460,12 @@ void CIncEulerSolver::SetNondimensionalization(CConfig *config, unsigned short i case CONSTANT_DENSITY: fluidModel = new CConstantDensity(Density_FreeStreamND, Specific_Heat_CpND); + fluidModel->SetTDState_T(Temperature_FreeStreamND); break; case INC_IDEAL_GAS: fluidModel = new CIncIdealGas(Specific_Heat_CpND, Gas_ConstantND, Pressure_ThermodynamicND); + fluidModel->SetTDState_T(Temperature_FreeStreamND); break; case INC_IDEAL_GAS_POLY: @@ -461,9 +477,16 @@ void CIncEulerSolver::SetNondimensionalization(CConfig *config, unsigned short i config->SetCp_PolyCoeffND(config->GetCp_PolyCoeff(iVar)*pow(Temperature_Ref,iVar)/Gas_Constant_Ref, iVar); fluidModel->SetCpModel(config); } - break; - /// TODO: Why is this outside? fluidModel->SetTDState_T(Temperature_FreeStreamND); + break; + + case FLAMELET_FLUID_MODEL: + fluidModel = new CFluidFlamelet(config,Pressure_Thermodynamic); + n_scalars = fluidModel->GetNScalars(); + dummy_scalar = new su2double[n_scalars](); + fluidModel->SetTDState_T(Temperature_FreeStream,dummy_scalar); + delete[] dummy_scalar; + break; } if (viscous) { @@ -498,7 +521,7 @@ void CIncEulerSolver::SetNondimensionalization(CConfig *config, unsigned short i fluidModel->SetLaminarViscosityModel(config); fluidModel->SetThermalConductivityModel(config); - + fluidModel->SetMassDiffusivityModel(config); } } @@ -641,6 +664,9 @@ void CIncEulerSolver::SetNondimensionalization(CConfig *config, unsigned short i Unit.str(""); NonDimTable.PrintFooter(); break; + + case VISCOSITYMODEL::FLAMELET: + break; } switch(config->GetKind_ConductivityModel()){ @@ -672,6 +698,9 @@ void CIncEulerSolver::SetNondimensionalization(CConfig *config, unsigned short i Unit.str(""); NonDimTable.PrintFooter(); break; + + case CONDUCTIVITYMODEL::FLAMELET: + break; } } else { ModelTable << "-" << "-"; @@ -1124,6 +1153,8 @@ void CIncEulerSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_cont const bool muscl = (config->GetMUSCL_Flow() && (iMesh == MESH_0)); const bool limiter = (config->GetKind_SlopeLimit_Flow() != NO_LIMITER); const bool van_albada = (config->GetKind_SlopeLimit_Flow() == VAN_ALBADA_EDGE); + const bool energy = config->GetEnergy_Equation(); + const bool flame = (config->GetKind_Scalar_Model() == PROGRESS_VARIABLE); /*--- For hybrid parallel AD, pause preaccumulation if there is shared reading of * variables, otherwise switch to the faster adjoint evaluation mode. ---*/ @@ -1209,7 +1240,7 @@ void CIncEulerSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_cont incompressible flow, only the temperature and density need to be checked. Pressure is the dynamic pressure (can be negative). ---*/ - if (config->GetEnergy_Equation()) { + if (energy && !flame) { bool neg_temperature_i = (Primitive_i[nDim+1] < 0.0); bool neg_temperature_j = (Primitive_j[nDim+1] < 0.0); @@ -1879,21 +1910,23 @@ void CIncEulerSolver::SetPreconditioner(const CConfig *config, unsigned long iPo unsigned short iDim, jDim, iVar, jVar; - su2double BetaInc2, Density, dRhodT, Temperature, oneOverCp, Cp; - su2double Velocity[MAXNDIM] = {0.0}; + //su2double BetaInc2, Density, dRhodT, Temperature, oneOverCp, Cp; + //su2double Velocity[MAXNDIM] = {0.0}; bool variable_density = (config->GetKind_DensityModel() == INC_DENSITYMODEL::VARIABLE); bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); bool energy = config->GetEnergy_Equation(); + const bool flame = (config->GetKind_Scalar_Model() == PROGRESS_VARIABLE); /*--- Access the primitive variables at this node. ---*/ - Density = nodes->GetDensity(iPoint); - BetaInc2 = nodes->GetBetaInc2(iPoint); - Cp = nodes->GetSpecificHeatCp(iPoint); - oneOverCp = 1.0/Cp; - Temperature = nodes->GetTemperature(iPoint); + su2double Density = nodes->GetDensity(iPoint); + su2double BetaInc2 = nodes->GetBetaInc2(iPoint); + su2double Cp = nodes->GetSpecificHeatCp(iPoint); + su2double oneOverCp = 1.0/Cp; + su2double Temperature = nodes->GetTemperature(iPoint); + su2double Velocity[MAXNDIM] = {0.0}; for (iDim = 0; iDim < nDim; iDim++) Velocity[iDim] = nodes->GetVelocity(iPoint,iDim); @@ -1901,6 +1934,7 @@ void CIncEulerSolver::SetPreconditioner(const CConfig *config, unsigned long iPo preconditioning matrix. For now, the only option is the ideal gas law, but in the future, dRhodT should be in the fluid model. ---*/ + su2double dRhodT; if (variable_density) { dRhodT = -Density/Temperature; } else { @@ -1919,7 +1953,7 @@ void CIncEulerSolver::SetPreconditioner(const CConfig *config, unsigned long iPo for (iDim = 0; iDim < nDim; iDim++) Preconditioner[iDim+1][0] = Velocity[iDim]/BetaInc2; - if (energy) Preconditioner[nDim+1][0] = Cp*Temperature/BetaInc2; + if (energy && !flame) Preconditioner[nDim+1][0] = Cp*Temperature/BetaInc2; else Preconditioner[nDim+1][0] = 0.0; for (jDim = 0; jDim < nDim; jDim++) { @@ -1935,7 +1969,7 @@ void CIncEulerSolver::SetPreconditioner(const CConfig *config, unsigned long iPo for (iDim = 0; iDim < nDim; iDim++) Preconditioner[iDim+1][nDim+1] = Velocity[iDim]*dRhodT; - if (energy) Preconditioner[nDim+1][nDim+1] = Cp*(dRhodT*Temperature + Density); + if (energy && !flame) Preconditioner[nDim+1][nDim+1] = Cp*(dRhodT*Temperature + Density); else Preconditioner[nDim+1][nDim+1] = 1.0; for (iVar = 0; iVar < nVar; iVar ++ ) @@ -1953,7 +1987,7 @@ void CIncEulerSolver::SetPreconditioner(const CConfig *config, unsigned long iPo for (iDim = 0; iDim < nDim; iDim ++) Preconditioner[iDim+1][0] = -1.0*Velocity[iDim]/Density; - if (energy) Preconditioner[nDim+1][0] = -1.0*Temperature/Density; + if (energy && !flame) Preconditioner[nDim+1][0] = -1.0*Temperature/Density; else Preconditioner[nDim+1][0] = 0.0; @@ -1970,13 +2004,82 @@ void CIncEulerSolver::SetPreconditioner(const CConfig *config, unsigned long iPo for (iDim = 0; iDim < nDim; iDim ++) Preconditioner[iDim+1][nDim+1] = 0.0; - if (energy) Preconditioner[nDim+1][nDim+1] = oneOverCp/Density; + if (energy && !flame) Preconditioner[nDim+1][nDim+1] = oneOverCp/Density; else Preconditioner[nDim+1][nDim+1] = 0.0; } } +void CIncEulerSolver::Evaluate_ObjFunc(const CConfig *config) { + + unsigned short iMarker_Monitoring, Kind_ObjFunc; + su2double Weight_ObjFunc; + + Total_ComboObj = EvaluateCommonObjFunc(*config); + + /*--- Loop over all monitored markers, add to the 'combo' objective ---*/ + + for (iMarker_Monitoring = 0; iMarker_Monitoring < config->GetnMarker_Monitoring(); iMarker_Monitoring++) { + + Weight_ObjFunc = config->GetWeight_ObjFunc(iMarker_Monitoring); + Kind_ObjFunc = config->GetKind_ObjFunc(iMarker_Monitoring); + + switch(Kind_ObjFunc) { + case DRAG_COEFFICIENT: + if (config->GetFixed_CL_Mode()) Total_ComboObj -= Weight_ObjFunc*config->GetdCD_dCL()*(SurfaceCoeff.CL[iMarker_Monitoring]); + if (config->GetFixed_CM_Mode()) Total_ComboObj -= Weight_ObjFunc*config->GetdCD_dCMy()*(SurfaceCoeff.CMy[iMarker_Monitoring]); + break; + case MOMENT_X_COEFFICIENT: + if (config->GetFixed_CL_Mode()) Total_ComboObj -= Weight_ObjFunc*config->GetdCMx_dCL()*(SurfaceCoeff.CL[iMarker_Monitoring]); + break; + case MOMENT_Y_COEFFICIENT: + if (config->GetFixed_CL_Mode()) Total_ComboObj -= Weight_ObjFunc*config->GetdCMy_dCL()*(SurfaceCoeff.CL[iMarker_Monitoring]); + break; + case MOMENT_Z_COEFFICIENT: + if (config->GetFixed_CL_Mode()) Total_ComboObj -= Weight_ObjFunc*config->GetdCMz_dCL()*(SurfaceCoeff.CL[iMarker_Monitoring]); + break; + default: + break; + } + } + + /*--- The following are not per-surface, and so to avoid that they are + double-counted when multiple surfaces are specified, they have been + placed outside of the loop above. In addition, multi-objective mode is + also disabled for these objective functions (error thrown at start). ---*/ + + Weight_ObjFunc = config->GetWeight_ObjFunc(0); + Kind_ObjFunc = config->GetKind_ObjFunc(0); + + switch(Kind_ObjFunc) { + case EQUIVALENT_AREA: + Total_ComboObj+=Weight_ObjFunc*Total_CEquivArea; + break; + case NEARFIELD_PRESSURE: + Total_ComboObj+=Weight_ObjFunc*Total_CNearFieldOF; + break; + case SURFACE_MACH: + Total_ComboObj+=Weight_ObjFunc*config->GetSurface_Mach(0); + break; + case SURFACE_CO: + Total_ComboObj+=Weight_ObjFunc*config->GetSurface_CO(0); + break; + case SURFACE_NOX: + Total_ComboObj+=Weight_ObjFunc*config->GetSurface_NOx(0); + break; + case SURFACE_TEMP: + Total_ComboObj+=Weight_ObjFunc*config->GetSurface_Temperature(0); + break; + case AVG_TEMPERATURE: + Total_ComboObj+=Weight_ObjFunc*config->GetSurface_Temperature(0); + break; + default: + break; + } +} + + void CIncEulerSolver::BC_Far_Field(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { @@ -2568,6 +2671,8 @@ void CIncEulerSolver::SetResidual_DualTime(CGeometry *geometry, CSolver **solver const bool first_order = (config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_1ST); const bool second_order = (config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_2ND); const bool energy = config->GetEnergy_Equation(); + const bool flame = (config->GetKind_Scalar_Model() == PROGRESS_VARIABLE); + const short flagEnergy = (!energy || flame); const int ndim = nDim; auto V2U = [ndim](su2double Density, su2double Cp, const su2double* V, su2double* U) { @@ -2619,7 +2724,7 @@ void CIncEulerSolver::SetResidual_DualTime(CGeometry *geometry, CSolver **solver /*--- Compute the dual time-stepping source term based on the chosen time discretization scheme (1st- or 2nd-order).---*/ - for (iVar = 0; iVar < nVar-!energy; iVar++) { + for (iVar = 0; iVar < nVar-flagEnergy; iVar++) { if (first_order) LinSysRes(iPoint,iVar) += (U_time_nP1[iVar] - U_time_n[iVar])*Volume_nP1 / TimeStep; if (second_order) @@ -2635,7 +2740,7 @@ void CIncEulerSolver::SetResidual_DualTime(CGeometry *geometry, CSolver **solver for (iDim = 0; iDim < nDim; iDim++) Jacobian.AddVal2Diag(iPoint, iDim+1, delta); - if (energy) delta *= Cp; + if (energy && !flame) delta *= Cp; Jacobian.AddVal2Diag(iPoint, nDim+1, delta); } } @@ -2681,7 +2786,7 @@ void CIncEulerSolver::SetResidual_DualTime(CGeometry *geometry, CSolver **solver for (iDim = 0; iDim < nDim; iDim++) Residual_GCL += dir*(GridVel_i[iDim]+GridVel_j[iDim])*Normal[iDim]; - for (iVar = 0; iVar < nVar-!energy; iVar++) + for (iVar = 0; iVar < nVar-flagEnergy; iVar++) LinSysRes(iPoint,iVar) += U_time_n[iVar]*Residual_GCL; } } @@ -2720,7 +2825,7 @@ void CIncEulerSolver::SetResidual_DualTime(CGeometry *geometry, CSolver **solver Cp = nodes->GetSpecificHeatCp(iPoint); V2U(Density, Cp, V_time_n, U_time_n); - for (iVar = 0; iVar < nVar-!energy; iVar++) + for (iVar = 0; iVar < nVar-flagEnergy; iVar++) LinSysRes(iPoint,iVar) += U_time_n[iVar]*Residual_GCL; } END_SU2_OMP_FOR @@ -2766,7 +2871,7 @@ void CIncEulerSolver::SetResidual_DualTime(CGeometry *geometry, CSolver **solver introduction of the GCL term above, the remainder of the source residual due to the time discretization has a new form.---*/ - for (iVar = 0; iVar < nVar-!energy; iVar++) { + for (iVar = 0; iVar < nVar-flagEnergy; iVar++) { if (first_order) LinSysRes(iPoint,iVar) += (U_time_nP1[iVar] - U_time_n[iVar])*(Volume_nP1/TimeStep); if (second_order) @@ -2782,7 +2887,7 @@ void CIncEulerSolver::SetResidual_DualTime(CGeometry *geometry, CSolver **solver for (iDim = 0; iDim < nDim; iDim++) Jacobian.AddVal2Diag(iPoint, iDim+1, delta); - if (energy) delta *= Cp; + if (energy && !flame) delta *= Cp; Jacobian.AddVal2Diag(iPoint, nDim+1, delta); } } @@ -2965,10 +3070,13 @@ void CIncEulerSolver::GetOutlet_Properties(CGeometry *geometry, CConfig *config, cout <<"Length (m): " << config->GetOutlet_Area(Outlet_TagBound) << "." << endl; } - cout << setprecision(5) << "Outlet Avg. Density (kg/m^3): " << config->GetOutlet_Density(Outlet_TagBound) * config->GetDensity_Ref() << endl; + cout << setprecision(5) << "Outlet Avg. Density (kg/m^3): " << config->GetOutlet_Density(Outlet_TagBound) * config->GetDensity_Ref() << endl; su2double Outlet_mDot = fabs(config->GetOutlet_MassFlow(Outlet_TagBound)) * config->GetDensity_Ref() * config->GetVelocity_Ref(); - cout << "Outlet mass flow (kg/s): "; cout << setprecision(5) << Outlet_mDot; - + su2double Outlet_mDot_Target = fabs(config->GetOutlet_Pressure(Outlet_TagBound)) / (config->GetDensity_Ref() * config->GetVelocity_Ref()); + cout << "Outlet mass flow (kg/s): "; cout << setprecision(5) << Outlet_mDot << endl; + cout << "target mass flow (kg/s): "; cout << setprecision(5) << Outlet_mDot_Target << endl; + su2double goal = 100.0*Outlet_mDot/Outlet_mDot_Target; + cout << "Target achieved:" << setprecision(5) << goal << " % "<< endl; } } diff --git a/SU2_CFD/src/solvers/CIncNSSolver.cpp b/SU2_CFD/src/solvers/CIncNSSolver.cpp index 089fb881f0b3..a193d56b94f5 100644 --- a/SU2_CFD/src/solvers/CIncNSSolver.cpp +++ b/SU2_CFD/src/solvers/CIncNSSolver.cpp @@ -322,8 +322,9 @@ void CIncNSSolver::Viscous_Residual(unsigned long iEdge, CGeometry *geometry, CS unsigned long CIncNSSolver::SetPrimitive_Variables(CSolver **solver_container, const CConfig *config) { unsigned long iPoint, nonPhysicalPoints = 0; - su2double eddy_visc = 0.0, turb_ke = 0.0, DES_LengthScale = 0.0; + su2double eddy_visc = 0.0, turb_ke = 0.0, DES_LengthScale = 0.0, *scalar = nullptr; const TURB_MODEL turb_model = config->GetKind_Turb_Model(); + bool scalar_model = (config->GetKind_Scalar_Model() != NO_SCALAR_MODEL); bool tkeNeeded = ((turb_model == TURB_MODEL::SST) || (turb_model == TURB_MODEL::SST_SUST)); @@ -343,9 +344,14 @@ unsigned long CIncNSSolver::SetPrimitive_Variables(CSolver **solver_container, c } } + /*--- Retrieve scalar values (if needed) ---*/ + if (scalar_model) { + scalar = solver_container[SCALAR_SOL]->GetNodes()->GetSolution(iPoint); + } + /*--- Incompressible flow, primitive variables --- */ - bool physical = static_cast(nodes)->SetPrimVar(iPoint,eddy_visc, turb_ke, GetFluidModel()); + bool physical = static_cast(nodes)->SetPrimVar(iPoint,eddy_visc, turb_ke, GetFluidModel(), scalar); /* Check for non-realizable states for reporting. */ @@ -369,6 +375,7 @@ void CIncNSSolver::BC_Wall_Generic(const CGeometry *geometry, const CConfig *con const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); const bool energy = config->GetEnergy_Equation(); + const bool flame = (config->GetKind_Scalar_Model() == PROGRESS_VARIABLE); /*--- Variables for streamwise periodicity ---*/ const bool streamwise_periodic = (config->GetKind_Streamwise_Periodic() != ENUM_STREAMWISE_PERIODIC::NONE); @@ -447,7 +454,7 @@ void CIncNSSolver::BC_Wall_Generic(const CGeometry *geometry, const CConfig *con Jacobian.DeleteValsRowi(iPoint*nVar+iVar); } - if (!energy) continue; + if (!energy || flame) continue; switch(kind_boundary) { case HEAT_FLUX: diff --git a/SU2_CFD/src/solvers/CPassiveScalarSolver.cpp b/SU2_CFD/src/solvers/CPassiveScalarSolver.cpp new file mode 100644 index 000000000000..390e922ad905 --- /dev/null +++ b/SU2_CFD/src/solvers/CPassiveScalarSolver.cpp @@ -0,0 +1,574 @@ +/*! + * \file CPassiveScalarSolver.cpp + * \brief Main subroutines for solving transported scalar class + * \author T. Economon, N. Beishuizen + * \version 7.1.1 "Blackbird" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2020, SU2 Contributors (cf. AUTHORS.md) + * + * SU2 is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * SU2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with SU2. If not, see . + */ + + +#include "../../include/solvers/CPassiveScalarSolver.hpp" +#include "../../include/variables/CPassiveScalarVariable.hpp" +#include "../../../Common/include/parallelization/omp_structure.hpp" +#include "../../../Common/include/toolboxes/geometry_toolbox.hpp" + +CPassiveScalarSolver::CPassiveScalarSolver(void) : CScalarLegacySolver() {} + +CPassiveScalarSolver::CPassiveScalarSolver(CGeometry *geometry, + CConfig *config, + unsigned short iMesh) +: CScalarLegacySolver(geometry, config) { + unsigned short nLineLets; + + const bool turbulent = ((config->GetKind_Solver() == RANS) || + (config->GetKind_Solver() == DISC_ADJ_RANS)); + const bool turb_SST = ((turbulent) && (config->GetKind_Turb_Model() == TURB_MODEL::SST)); + const bool turb_SA = ((turbulent) && (config->GetKind_Turb_Model() == TURB_MODEL::SA)); + bool multizone = config->GetMultizone_Problem(); + + /*--- Dimension of the problem --> passive scalar will only ever + have a single equation. Other child classes of CScalarLegacySolver + can have variable numbers of equations. ---*/ + + nVar = 1; + nPrimVar = 1; + + nPoint = geometry->GetnPoint(); + nPointDomain = geometry->GetnPointDomain(); + + /*--- Initialize nVarGrad for deallocation ---*/ + + nVarGrad = nVar; + + /*--- Define geometry constants in the solver structure ---*/ + + nDim = geometry->GetnDim(); + + /*--- Fluid model pointer initialization ---*/ + + FluidModel = nullptr; + + + /*--- Single grid simulation ---*/ + + /*--- Define some auxiliary vector related with the solution ---*/ + Solution = new su2double[nVar]; + Solution_i = new su2double[nVar]; Solution_j = new su2double[nVar]; + + /*--- do not see a reason to use only single grid ---*/ + //if (iMesh == MESH_0) { + + /*--- Define some auxiliary vector related with the residual ---*/ + + Residual_RMS.resize(nVar,0.0); + Residual_Max.resize(nVar,0.0); + Point_Max.resize(nVar,0); + Point_Max_Coord.resize(nVar,nDim) = su2double(0.0); + + /*--- Initialization of the structure of the whole Jacobian ---*/ + + if (rank == MASTER_NODE) cout << "Initialize Jacobian structure (passive scalar model)." << endl; + Jacobian.Initialize(nPoint, nPointDomain, nVar, nVar, true, geometry, config, ReducerStrategy); + + if (config->GetKind_Linear_Solver_Prec() == LINELET) { + nLineLets = Jacobian.BuildLineletPreconditioner(geometry, config); + if (rank == MASTER_NODE) cout << "Compute linelet structure. " << nLineLets << " elements in each line (average)." << endl; + } + + LinSysSol.Initialize(nPoint, nPointDomain, nVar, 0.0); + LinSysRes.Initialize(nPoint, nPointDomain, nVar, 0.0); + System.SetxIsZero(true); + + if (ReducerStrategy) + EdgeFluxes.Initialize(geometry->GetnEdge(), geometry->GetnEdge(), nVar, nullptr); + + /*--- Initialize the BGS residuals in multizone problems. ---*/ + if (multizone){ + Residual_BGS.resize(nVar,0.0); + Residual_Max_BGS.resize(nVar,0.0); + Point_Max_BGS.resize(nVar,0); + Point_Max_Coord_BGS.resize(nVar,nDim) = su2double(0.0); + } + + //} //iMESH_0 + + /*--- Initialize lower and upper limits---*/ + + lowerlimit = new su2double[nVar]; + upperlimit = new su2double[nVar]; + if (config->GetScalar_Clipping()){ + for (auto iVar=0u;iVarGetScalar_Clipping_Min(iVar); + upperlimit[iVar] = config->GetScalar_Clipping_Max(iVar); + } + } + else { + for (auto iVar=0u;iVarGetDensity_FreeStreamND(); + //Viscosity_Inf = config->GetViscosity_FreeStreamND(); + + /*--- Set up fluid model for the diffusivity ---*/ + + su2double Diffusivity_Ref = 1.0; + su2double DiffusivityND = config->GetDiffusivity_Constant()/Diffusivity_Ref; + config->SetDiffusivity_ConstantND(DiffusivityND); + + FluidModel = new CFluidModel(); + FluidModel->SetMassDiffusivityModel(config); + + /*--- Scalar variable state at the far-field. ---*/ + + Scalar_Inf = new su2double[nVar]; + for (auto iVar = 0u; iVar < nVar; iVar++){ + Scalar_Inf[iVar] = config->GetScalar_Init(iVar); + } + + /*--- Initialize the solution to the far-field state everywhere. ---*/ + + nodes = new CPassiveScalarVariable(Scalar_Inf, nPoint, nDim, nVar, config); + + + /*--- initialize the mass diffusivity ---*/ + for (auto iVar = 0u; iVar < nVar; iVar++){ + auto M = FluidModel->GetMassDiffusivity(); // returns a su2double, note that for more species this should be a vector + // loop over all points and set diffusivity + // why construct the entire diffusivity matrix? + for (unsigned long iPoint = 0; iPoint < nPoint; iPoint++) + nodes->SetDiffusivity(iPoint, M, iVar); + } + + SetBaseClassPointerToNodes(); + + /*--- MPI solution ---*/ + + InitiateComms(geometry, config, SOLUTION); + CompleteComms(geometry, config, SOLUTION); + + /*--- Initialize quantities for SlidingMesh Interface ---*/ + + SlidingState.resize(nMarker); + SlidingStateNodes.resize(nMarker); + + for (unsigned long iMarker = 0; iMarker < nMarker; iMarker++) { + if (config->GetMarker_All_KindBC(iMarker) == FLUID_INTERFACE) { + SlidingState[iMarker].resize(nVertex[iMarker], nPrimVar+1) = nullptr; + SlidingStateNodes[iMarker].resize(nVertex[iMarker],0); + } + } + + + /*-- Allocation of inlets has to happen in derived classes + (not CScalarLegacySolver), due to arbitrary number of scalar variables. + First, we also set the column index for any inlet profiles. ---*/ + + Inlet_Position = nDim*2+2; + if (turbulent) { + if (turb_SA) Inlet_Position += 1; + else if (turb_SST) Inlet_Position += 2; + } + + /*-- Allocation of inlets has to happen in derived classes + (not CScalarLegacySolver), due to arbitrary number of scalar variables. + First, we also set the column index for any inlet profiles. ---*/ + /*-- Allocation of inlets has to happen in derived classes (not CTurbSolver), + * due to arbitrary number of turbulence variables ---*/ + + Inlet_ScalarVars.resize(nMarker); + for (unsigned long iMarker = 0; iMarker < nMarker; iMarker++){ + Inlet_ScalarVars[iMarker].resize(nVertex[iMarker],nVar); + for (unsigned long iVertex = 0; iVertex < nVertex[iMarker]; ++iVertex) { + for (unsigned short iVar = 0; iVar < nVar; iVar++){ + Inlet_ScalarVars[iMarker](iVertex,iVar) = Scalar_Inf[iVar]; + } + } + } + + /*--- The turbulence models are always solved implicitly, so set the + implicit flag in case we have periodic BCs. ---*/ + + SetImplicitPeriodic(true); + + /*--- Store the initial CFL number for all grid points. ---*/ + + const su2double CFL = config->GetCFL(MGLevel)*config->GetCFLRedCoeff_Scalar(); + for (auto iPoint = 0u; iPoint < nPoint; iPoint++) { + nodes->SetLocalCFL(iPoint, CFL); + } + Min_CFL_Local = CFL; + Max_CFL_Local = CFL; + Avg_CFL_Local = CFL; + + /*--- Add the solver name (max 8 characters) ---*/ + SolverName = "SCALAR"; + +} + +CPassiveScalarSolver::~CPassiveScalarSolver(void) { + if (FluidModel != nullptr) delete FluidModel; +} + + +void CPassiveScalarSolver::Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, + unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output) { + + const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); + const bool muscl = config->GetMUSCL_Scalar(); + const bool limiter = (config->GetKind_SlopeLimit_Scalar() != NO_LIMITER) && + (config->GetInnerIter() <= config->GetLimiterIter()); + + /*--- Clear residual and system matrix, not needed for + * reducer strategy as we write over the entire matrix. ---*/ + if (!ReducerStrategy && !Output) { + LinSysRes.SetValZero(); + if (implicit) Jacobian.SetValZero(); + else {SU2_OMP_BARRIER} + } + + /*--- Upwind second order reconstruction and gradients ---*/ + + if (config->GetReconstructionGradientRequired()) { + if (config->GetKind_Gradient_Method_Recon() == GREEN_GAUSS) + SetSolution_Gradient_GG(geometry, config, true); + if (config->GetKind_Gradient_Method_Recon() == LEAST_SQUARES) + SetSolution_Gradient_LS(geometry, config, true); + if (config->GetKind_Gradient_Method_Recon() == WEIGHTED_LEAST_SQUARES) + SetSolution_Gradient_LS(geometry, config, true); + } + + if (config->GetKind_Gradient_Method() == GREEN_GAUSS) + SetSolution_Gradient_GG(geometry, config); + + if (config->GetKind_Gradient_Method() == WEIGHTED_LEAST_SQUARES) + SetSolution_Gradient_LS(geometry, config); + + if (limiter && muscl) SetSolution_Limiter(geometry, config); + +} + +void CPassiveScalarSolver::Postprocessing(CGeometry *geometry, CSolver **solver_container, + CConfig *config, unsigned short iMesh) { + +/*--- your postprocessing goes here ---*/ + +} + +void CPassiveScalarSolver::SetInitialCondition(CGeometry **geometry, + CSolver ***solver_container, + CConfig *config, + unsigned long ExtIter) { + bool Restart = (config->GetRestart() || config->GetRestart_Flow()); + + + if ((!Restart) && ExtIter == 0) { + if (rank == MASTER_NODE){ + cout << "Initializing passive scalar (initial condition)." << endl; + cout << "initialization = " << nVar << " " << config->GetScalar_Init(0)<GetnMGLevels(); i_mesh++) { + + for (unsigned long i_point = 0; i_point < geometry[i_mesh]->GetnPoint(); i_point++) { + + for (unsigned long i_var = 0; i_var < nVar; i_var++) + Solution[i_var] = 0.0; + + for(int i_scalar = 0;i_scalar < nVar;i_scalar++){ + scalar_init[i_scalar] = config->GetScalar_Init(i_scalar); + } + + solver_container[i_mesh][SCALAR_SOL]->GetNodes()->SetSolution(i_point, scalar_init); + + } + + solver_container[i_mesh][SCALAR_SOL]->InitiateComms(geometry[i_mesh], config, SOLUTION); + solver_container[i_mesh][SCALAR_SOL]->CompleteComms(geometry[i_mesh], config, SOLUTION); + + solver_container[i_mesh][FLOW_SOL]->InitiateComms(geometry[i_mesh], config, SOLUTION); + solver_container[i_mesh][FLOW_SOL]->CompleteComms(geometry[i_mesh], config, SOLUTION); + + solver_container[i_mesh][FLOW_SOL]->Preprocessing( geometry[i_mesh], solver_container[i_mesh], config, i_mesh, NO_RK_ITER, RUNTIME_FLOW_SYS, false); + + } + + + delete[] scalar_init; + } + + +} + + +void CPassiveScalarSolver::SetPreconditioner(CGeometry *geometry, CSolver **solver_container, CConfig *config) { + + unsigned short iVar; + unsigned long iPoint, total_index; + + su2double BetaInc2, Density, dRhodT, dRhodC, Temperature, Delta; + + bool variable_density = (config->GetKind_DensityModel() == INC_DENSITYMODEL::VARIABLE); + bool implicit = (config->GetKind_TimeIntScheme_Flow() == EULER_IMPLICIT); + + for (iPoint = 0; iPoint < nPointDomain; iPoint++) { + + /*--- Access the primitive variables at this node. ---*/ + + Density = solver_container[FLOW_SOL]->GetNodes()->GetDensity(iPoint); + BetaInc2 = solver_container[FLOW_SOL]->GetNodes()->GetBetaInc2(iPoint); + Temperature = solver_container[FLOW_SOL]->GetNodes()->GetTemperature(iPoint); + + unsigned short nVar_Flow = solver_container[FLOW_SOL]->GetnVar(); + + su2double SolP = solver_container[FLOW_SOL]->LinSysSol[iPoint*nVar_Flow+0]; + su2double SolT = solver_container[FLOW_SOL]->LinSysSol[iPoint*nVar_Flow+nDim+1]; + + /*--- We need the derivative of the equation of state to build the + preconditioning matrix. For now, the only option is the ideal gas + law, but in the future, dRhodT should be in the fluid model. ---*/ + + if (variable_density) { + dRhodT = -Density/Temperature; + } else { + dRhodT = 0.0; + } + + /*--- Passive scalars have no impact on the density. ---*/ + + dRhodC = 0.0; + + /*--- Modify matrix diagonal with term including volume and time step. ---*/ + + su2double Vol = geometry->nodes->GetVolume(iPoint); + Delta = Vol / (config->GetCFLRedCoeff_Scalar()* + solver_container[FLOW_SOL]->GetNodes()->GetDelta_Time(iPoint)); + + /*--- Calculating the inverse of the preconditioning matrix + that multiplies the time derivative during time integration. ---*/ + + if (implicit) { + // nijso: do we need to wipe the entire jacobian for preconditioning? + //for (int i_var = 0; i_var < nVar; i_var++) { + // for (int j_var = 0; j_var < nVar; j_var++) { + // Jacobian_i[i_var][j_var] = 0.0; + // } + //} + + for (iVar = 0; iVar < nVar; iVar++) { + + total_index = iPoint*nVar+iVar; + + su2double c = nodes->GetSolution(iPoint,iVar); + + /*--- Compute the lag terms for the decoupled linear system from + the mean flow equations and add to the residual for the scalar. + In short, we are effectively making these terms explicit. ---*/ + + su2double artcompc1 = SolP * c/(Density*BetaInc2); + su2double artcompc2 = SolT * dRhodT * c/(Density); + + LinSysRes[total_index] += artcompc1 + artcompc2; + + /*--- Add the extra Jacobian term to the scalar system. ---*/ + + su2double Jaccomp = c * dRhodC + Density; //This is Gamma + su2double JacTerm = Jaccomp*Delta; + + Jacobian.AddVal2Diag(iPoint, JacTerm); + + } + + } + + } + +} + +void CPassiveScalarSolver::Source_Residual(CGeometry *geometry, CSolver **solver_container, + CNumerics **numerics_container, CConfig *config, unsigned short iMesh) { + + bool axisymmetric = config->GetAxisymmetric(); + + const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); + + vector zero_sources(nVar,0.); + + CVariable* flowNodes = solver_container[FLOW_SOL]->GetNodes(); + + /*--- Pick one numerics object per thread. ---*/ + CNumerics* numerics = numerics_container[SOURCE_FIRST_TERM + omp_get_thread_num()*MAX_TERMS]; + + /*--- Set scalar sources to zero ---*/ + numerics->SetScalarSources(&zero_sources[0]); + + /*--- Loop over all points. ---*/ + + SU2_OMP_FOR_DYN(omp_chunk_size) + for (unsigned long iPoint = 0; iPoint < nPointDomain; iPoint++) { + + /*--- Conservative variables w/o reconstruction ---*/ + + numerics->SetPrimitive(flowNodes->GetPrimitive(iPoint), nullptr); + + /*--- Gradient of the primitive and conservative variables ---*/ + + numerics->SetPrimVarGradient(flowNodes->GetGradient_Primitive(iPoint), nullptr); + + /*--- Scalar variables w/o reconstruction, and its gradient ---*/ + + numerics->SetScalarVar(nodes->GetSolution(iPoint), nullptr); + numerics->SetScalarVarGradient(nodes->GetGradient(iPoint), nullptr); + + /*--- Mass diffusivity coefficients. ---*/ + su2double *M; + M = nodes->GetDiffusivity(iPoint); + /*--- for multiple species, we need an array---*/ + numerics->SetDiffusionCoeff(M, M); + + /*--- Set volume ---*/ + + numerics->SetVolume(geometry->nodes->GetVolume(iPoint)); + + /*--- Axisymmetry source term for the scalar equation. ---*/ + + if (axisymmetric){ + /*--- Set y coordinate ---*/ + numerics->SetCoord(geometry->nodes->GetCoord(iPoint), geometry->nodes->GetCoord(iPoint)); + } + + /*--- Compute the source term ---*/ + + auto residual = numerics->ComputeResidual(config); + + /*--- Subtract residual and the Jacobian ---*/ + + LinSysRes.SubtractBlock(iPoint, residual); + if (implicit) Jacobian.SubtractBlock2Diag(iPoint, residual.jacobian_i); + + } + END_SU2_OMP_FOR +} + +void CPassiveScalarSolver::BC_Inlet(CGeometry *geometry, + CSolver **solver_container, + CNumerics *conv_numerics, + CNumerics *visc_numerics, + CConfig *config, + unsigned short val_marker) { + + su2double *inlet_scalar = new su2double[nVar]{}; + + //bool grid_movement = config->GetGrid_Movement(); + string Marker_Tag = config->GetMarker_All_TagBound(val_marker); + //su2double temp_inlet = config->GetInlet_Ttotal (Marker_Tag); + inlet_scalar = config->GetInlet_ScalarVal (Marker_Tag); + + /*--- Loop over all the vertices on this boundary marker ---*/ + + SU2_OMP_FOR_STAT(OMP_MIN_SIZE) + for (auto iVertex = 0u; iVertex < geometry->nVertex[val_marker]; iVertex++) { + + auto iPoint = geometry->vertex[val_marker][iVertex]->GetNode(); + + /*--- Check if the node belongs to the domain (i.e., not a halo node) ---*/ + + if (geometry->nodes->GetDomain(iPoint)) { + + nodes->SetSolution_Old(iPoint, inlet_scalar); + + LinSysRes.SetBlock_Zero(iPoint); + + for (auto iVar = 0u; iVar < nVar; iVar++) { + nodes->SetVal_ResTruncError_Zero(iPoint, iVar); + } + + /*--- Includes 1 in the diagonal ---*/ + for (auto iVar = 0u; iVar < nVar; iVar++) { + auto total_index = iPoint*nVar+iVar; + Jacobian.DeleteValsRowi(total_index); + } + } + } + END_SU2_OMP_FOR + +} + +void CPassiveScalarSolver::BC_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, + CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + + /*--- Loop over all the vertices on this boundary marker ---*/ + + SU2_OMP_FOR_STAT(OMP_MIN_SIZE) + for (auto iVertex = 0u; iVertex < geometry->nVertex[val_marker]; iVertex++) { + + /* strong zero flux Neumann boundary condition at the outlet */ + const auto iPoint = geometry->vertex[val_marker][iVertex]->GetNode(); + + /*--- Check if the node belongs to the domain (i.e., not a halo node) ---*/ + + if (geometry->nodes->GetDomain(iPoint)) { + + /*--- Allocate the value at the outlet ---*/ + auto Point_Normal = geometry->vertex[val_marker][iVertex]->GetNormal_Neighbor(); + + for (auto iVar = 0u; iVar < nVar; iVar++) + Solution[iVar] = nodes->GetSolution(Point_Normal, iVar); + nodes->SetSolution_Old(iPoint, Solution); + + LinSysRes.SetBlock_Zero(iPoint); + + for (auto iVar = 0u; iVar < nVar; iVar++){ + nodes->SetVal_ResTruncError_Zero(iPoint, iVar); + } + + /*--- Includes 1 in the diagonal ---*/ + for (auto iVar = 0u; iVar < nVar; iVar++) { + auto total_index = iPoint*nVar+iVar; + Jacobian.DeleteValsRowi(total_index); + } + } + } + END_SU2_OMP_FOR + +} + +void CPassiveScalarSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, + CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + + + +} + +void CPassiveScalarSolver::BC_Isothermal_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, + CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + + BC_HeatFlux_Wall(geometry, solver_container, conv_numerics, visc_numerics, config, val_marker); + +} + + diff --git a/SU2_CFD/src/solvers/CScalarLegacySolver.cpp b/SU2_CFD/src/solvers/CScalarLegacySolver.cpp new file mode 100644 index 000000000000..0df7333086ea --- /dev/null +++ b/SU2_CFD/src/solvers/CScalarLegacySolver.cpp @@ -0,0 +1,1115 @@ +/*! + * \file CScalarLegacySolver.cpp + * \brief Main subroutines for the transported scalar model. + * \author D. Mayer, T. Economon + * \version 7.1.1 "Blackbird" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2020, SU2 Contributors (cf. AUTHORS.md) + * + * SU2 is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * SU2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with SU2. If not, see . + */ + +#include "../../include/solvers/CScalarLegacySolver.hpp" +#include "../../../Common/include/parallelization/omp_structure.hpp" +#include "../../../Common/include/toolboxes/geometry_toolbox.hpp" + + +CScalarLegacySolver::CScalarLegacySolver(void) : CSolver() { + + lowerlimit = nullptr; + upperlimit = nullptr; + //Scalar_Inf = NULL; +} + +CScalarLegacySolver::CScalarLegacySolver(CGeometry* geometry, CConfig *config) : CSolver() { + + + lowerlimit = nullptr; + upperlimit = nullptr; + //Scalar_Inf = NULL; + Gamma = config->GetGamma(); + Gamma_Minus_One = Gamma - 1.0; + + nMarker = config->GetnMarker_All(); + + /*--- Store the number of vertices on each marker for deallocation later ---*/ + nVertex.resize(nMarker); + for (unsigned long iMarker = 0; iMarker < nMarker; iMarker++) + nVertex[iMarker] = geometry->nVertex[iMarker]; + + /* A grid is defined as dynamic if there's rigid grid movement or grid deformation AND the problem is time domain */ + dynamic_grid = config->GetDynamic_Grid(); + +#ifdef HAVE_OMP + /*--- Get the edge coloring, see notes in CEulerSolver's constructor. ---*/ + su2double parallelEff = 1.0; + const auto& coloring = geometry->GetEdgeColoring(¶llelEff); + + ReducerStrategy = parallelEff < COLORING_EFF_THRESH; + + if (ReducerStrategy && (coloring.getOuterSize()>1)) + geometry->SetNaturalEdgeColoring(); + + if (!coloring.empty()) { + auto groupSize = ReducerStrategy? 1ul : geometry->GetEdgeColorGroupSize(); + auto nColor = coloring.getOuterSize(); + EdgeColoring.reserve(nColor); + + for(auto iColor = 0ul; iColor < nColor; ++iColor) + EdgeColoring.emplace_back(coloring.innerIdx(iColor), coloring.getNumNonZeros(iColor), groupSize); + } + + nPoint = geometry->GetnPoint(); + omp_chunk_size = computeStaticChunkSize(nPoint, omp_get_max_threads(), OMP_MAX_SIZE); +#else + EdgeColoring[0] = DummyGridColor<>(geometry->GetnEdge()); +#endif +} + +CScalarLegacySolver::~CScalarLegacySolver(void) { + + if (lowerlimit != nullptr) delete [] lowerlimit; + if (upperlimit != nullptr) delete [] upperlimit; + + //if (Scalar_Inf != NULL) delete [] Scalar_Inf; + + for (auto& mat : SlidingState) { + for (auto ptr : mat) delete [] ptr; + } + + delete nodes; +} + +void CScalarLegacySolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_container, + CNumerics **numerics_container, CConfig *config, unsigned short iMesh) { + + const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); + const bool muscl = config->GetMUSCL_Scalar(); + const bool limiter = (config->GetKind_SlopeLimit_Scalar() != NO_LIMITER); + + /*--- Only reconstruct flow variables if MUSCL is on for flow (requires upwind) and scalar. ---*/ + const bool musclFlow = config->GetMUSCL_Flow() && muscl && + (config->GetKind_ConvNumScheme_Flow() == SPACE_UPWIND); + /*--- Only consider flow limiters for cell-based limiters, edge-based would need to be recomputed. ---*/ + const bool limiterFlow = (config->GetKind_SlopeLimit_Flow() != NO_LIMITER) && + (config->GetKind_SlopeLimit_Flow() != VAN_ALBADA_EDGE); + + CVariable* flowNodes = solver_container[FLOW_SOL]->GetNodes(); + + /*--- Pick one numerics object per thread. ---*/ + CNumerics* numerics = numerics_container[CONV_TERM + omp_get_thread_num()*MAX_TERMS]; + + /*--- Static arrays of MUSCL-reconstructed flow primitives and turbulence variables (thread safety). ---*/ + su2double solution_i[MAXNVAR] = {0.0}, flowPrimVar_i[MAXNVARFLOW] = {0.0}; + su2double solution_j[MAXNVAR] = {0.0}, flowPrimVar_j[MAXNVARFLOW] = {0.0}; + + /*--- Loop over edge colors. ---*/ + for (auto color : EdgeColoring) + { + /*--- Chunk size is at least OMP_MIN_SIZE and a multiple of the color group size. ---*/ + SU2_OMP_FOR_DYN(nextMultiple(OMP_MIN_SIZE, color.groupSize)) + for(auto k = 0ul; k < color.size; ++k) { + + auto iEdge = color.indices[k]; + + unsigned short iDim, iVar; + + /*--- Points in edge and normal vectors ---*/ + + auto iPoint = geometry->edges->GetNode(iEdge,0); + auto jPoint = geometry->edges->GetNode(iEdge,1); + + numerics->SetNormal(geometry->edges->GetNormal(iEdge)); + + /*--- Primitive variables w/o reconstruction ---*/ + + const auto V_i = flowNodes->GetPrimitive(iPoint); + const auto V_j = flowNodes->GetPrimitive(jPoint); + numerics->SetPrimitive(V_i, V_j); + + /*--- Scalar variables w/o reconstruction ---*/ + + const auto Scalar_i = nodes->GetSolution(iPoint); + const auto Scalar_j = nodes->GetSolution(jPoint); + numerics->SetScalarVar(Scalar_i, Scalar_j); + + /*--- Grid Movement ---*/ + + if (dynamic_grid) + numerics->SetGridVel(geometry->nodes->GetGridVel(iPoint), + geometry->nodes->GetGridVel(jPoint)); + + if (muscl || musclFlow) { + const su2double *Limiter_i = nullptr, *Limiter_j = nullptr; + + const auto Coord_i = geometry->nodes->GetCoord(iPoint); + const auto Coord_j = geometry->nodes->GetCoord(jPoint); + + su2double Vector_ij[MAXNDIM] = {0.0}; + for (iDim = 0; iDim < nDim; iDim++) { + Vector_ij[iDim] = 0.5*(Coord_j[iDim] - Coord_i[iDim]); + } + + if (musclFlow) { + /*--- Reconstruct mean flow primitive variables. ---*/ + + auto Gradient_i = flowNodes->GetGradient_Reconstruction(iPoint); + auto Gradient_j = flowNodes->GetGradient_Reconstruction(jPoint); + + if (limiterFlow) { + Limiter_i = flowNodes->GetLimiter_Primitive(iPoint); + Limiter_j = flowNodes->GetLimiter_Primitive(jPoint); + } + + for (iVar = 0; iVar < solver_container[FLOW_SOL]->GetnPrimVarGrad(); iVar++) { + su2double Project_Grad_i = 0.0, Project_Grad_j = 0.0; + for (iDim = 0; iDim < nDim; iDim++) { + Project_Grad_i += Vector_ij[iDim]*Gradient_i[iVar][iDim]; + Project_Grad_j -= Vector_ij[iDim]*Gradient_j[iVar][iDim]; + } + if (limiterFlow) { + Project_Grad_i *= Limiter_i[iVar]; + Project_Grad_j *= Limiter_j[iVar]; + } + flowPrimVar_i[iVar] = V_i[iVar] + Project_Grad_i; + flowPrimVar_j[iVar] = V_j[iVar] + Project_Grad_j; + } + + numerics->SetPrimitive(flowPrimVar_i, flowPrimVar_j); + } + + if (muscl) { + /*--- Reconstruct turbulence variables. ---*/ + + auto Gradient_i = nodes->GetGradient_Reconstruction(iPoint); + auto Gradient_j = nodes->GetGradient_Reconstruction(jPoint); + + if (limiter) { + Limiter_i = nodes->GetLimiter(iPoint); + Limiter_j = nodes->GetLimiter(jPoint); + } + + for (iVar = 0; iVar < nVar; iVar++) { + su2double Project_Grad_i = 0.0, Project_Grad_j = 0.0; + for (iDim = 0; iDim < nDim; iDim++) { + Project_Grad_i += Vector_ij[iDim]*Gradient_i[iVar][iDim]; + Project_Grad_j -= Vector_ij[iDim]*Gradient_j[iVar][iDim]; + } + if (limiter) { + Project_Grad_i *= Limiter_i[iVar]; + Project_Grad_j *= Limiter_j[iVar]; + } + solution_i[iVar] = Scalar_i[iVar] + Project_Grad_i; + solution_j[iVar] = Scalar_j[iVar] + Project_Grad_j; + } + + numerics->SetScalarVar(solution_i, solution_j); + } + } + + /*--- Update convective residual value ---*/ + + auto residual = numerics->ComputeResidual(config); + + if (ReducerStrategy) { + EdgeFluxes.SetBlock(iEdge, residual); + if (implicit) Jacobian.SetBlocks(iEdge, residual.jacobian_i, residual.jacobian_j); + } + else { + LinSysRes.AddBlock(iPoint, residual); + LinSysRes.SubtractBlock(jPoint, residual); + if (implicit) Jacobian.UpdateBlocks(iEdge, iPoint, jPoint, residual.jacobian_i, residual.jacobian_j); + } + + /*--- Viscous contribution. ---*/ + + Viscous_Residual(iEdge, geometry, solver_container, + numerics_container[VISC_TERM + omp_get_thread_num()*MAX_TERMS], config); + } + } // end color loop + END_SU2_OMP_FOR + + if (ReducerStrategy) { + SumEdgeFluxes(geometry); + if (implicit) Jacobian.SetDiagonalAsColumnSum(); + } +} + +void CScalarLegacySolver::Viscous_Residual(unsigned long iEdge, CGeometry *geometry, CSolver **solver_container, + CNumerics *numerics, CConfig *config) { + + const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); + CVariable* flowNodes = solver_container[FLOW_SOL]->GetNodes(); + + /*--- Points in edge ---*/ + + auto iPoint = geometry->edges->GetNode(iEdge,0); + auto jPoint = geometry->edges->GetNode(iEdge,1); + + /*--- Points coordinates, and normal vector ---*/ + + numerics->SetCoord(geometry->nodes->GetCoord(iPoint), + geometry->nodes->GetCoord(jPoint)); + numerics->SetNormal(geometry->edges->GetNormal(iEdge)); + + /*--- Conservative variables w/o reconstruction ---*/ + + numerics->SetPrimitive(flowNodes->GetPrimitive(iPoint), + flowNodes->GetPrimitive(jPoint)); + + /*--- Scalar variables w/o reconstruction, and its gradients ---*/ + + numerics->SetScalarVar(nodes->GetSolution(iPoint), + nodes->GetSolution(jPoint)); + numerics->SetScalarVarGradient(nodes->GetGradient(iPoint), + nodes->GetGradient(jPoint)); + + /*--- Mass diffusivity coefficients. ---*/ + + numerics->SetDiffusionCoeff(nodes->GetDiffusivity(iPoint), + nodes->GetDiffusivity(jPoint)); + + /*--- Compute residual, and Jacobians ---*/ + + auto residual = numerics->ComputeResidual(config); + + if (ReducerStrategy) { + EdgeFluxes.SubtractBlock(iEdge, residual); + if (implicit) Jacobian.UpdateBlocksSub(iEdge, residual.jacobian_i, residual.jacobian_j); + } + else { + LinSysRes.SubtractBlock(iPoint, residual); + LinSysRes.AddBlock(jPoint, residual); + if (implicit) Jacobian.UpdateBlocksSub(iEdge, iPoint, jPoint, residual.jacobian_i, residual.jacobian_j); + } +} + +void CScalarLegacySolver::SumEdgeFluxes(CGeometry* geometry) { + + SU2_OMP_FOR_STAT(omp_chunk_size) + for (unsigned long iPoint = 0; iPoint < nPoint; ++iPoint) { + + LinSysRes.SetBlock_Zero(iPoint); + + for (auto iEdge : geometry->nodes->GetEdges(iPoint)) { + if (iPoint == geometry->edges->GetNode(iEdge,0)) + LinSysRes.AddBlock(iPoint, EdgeFluxes.GetBlock(iEdge)); + else + LinSysRes.SubtractBlock(iPoint, EdgeFluxes.GetBlock(iEdge)); + } + } + END_SU2_OMP_FOR + +} + +void CScalarLegacySolver::BC_Sym_Plane(CGeometry *geometry, + CSolver **solver_container, + CNumerics *conv_numerics, + CNumerics *visc_numerics, + CConfig *config, + unsigned short val_marker) { + + /*--- Convective and viscous fluxes across symmetry plane are equal to zero. ---*/ + +} + +void CScalarLegacySolver::BC_Euler_Wall(CGeometry *geometry, + CSolver **solver_container, + CNumerics *conv_numerics, + CNumerics *visc_numerics, + CConfig *config, + unsigned short val_marker) { + + /*--- Convective fluxes across euler wall are equal to zero. ---*/ + +} + +void CScalarLegacySolver::BC_Periodic(CGeometry *geometry, CSolver **solver_container, + CNumerics *numerics, CConfig *config) { + + /*--- Complete residuals for periodic boundary conditions. We loop over + the periodic BCs in matching pairs so that, in the event that there are + adjacent periodic markers, the repeated points will have their residuals + accumulated corectly during the communications. For implicit calculations + the Jacobians and linear system are also correctly adjusted here. ---*/ + + for (unsigned short iPeriodic = 1; iPeriodic <= config->GetnMarker_Periodic()/2; iPeriodic++) { + InitiatePeriodicComms(geometry, config, iPeriodic, PERIODIC_RESIDUAL); + CompletePeriodicComms(geometry, config, iPeriodic, PERIODIC_RESIDUAL); + } + +} + +void CScalarLegacySolver::PrepareImplicitIteration(CGeometry *geometry, CSolver** solver_container, CConfig *config) { + + const auto flowNodes = solver_container[FLOW_SOL]->GetNodes(); + + + /*--- Set shared residual variables to 0 and declare + * local ones for current thread to work on. ---*/ + + SetResToZero(); + + su2double resMax[MAXNVAR] = {0.0}, resRMS[MAXNVAR] = {0.0}; + const su2double* coordMax[MAXNVAR] = {nullptr}; + unsigned long idxMax[MAXNVAR] = {0}; + + /*--- Build implicit system ---*/ + + SU2_OMP(for schedule(static,omp_chunk_size) nowait) + for (unsigned long iPoint = 0; iPoint < nPointDomain; iPoint++) { + + /// TODO: This could be the SetTime_Step of this solver. + // nijso: we use a global cfl scaling factor + //Delta = Vol / (config->GetCFLRedCoeff_Scalar()*solver_container[FLOW_SOL]->GetNodes()->GetDelta_Time(iPoint)); + //su2double dt = nodes->GetLocalCFL(iPoint) / flowNodes->GetLocalCFL(iPoint) * flowNodes->GetDelta_Time(iPoint); + su2double dt = config->GetCFLRedCoeff_Scalar() * flowNodes->GetDelta_Time(iPoint); + nodes->SetDelta_Time(iPoint, dt); + + /*--- Modify matrix diagonal to improve diagonal dominance. ---*/ + + if (dt != 0.0) { + su2double Vol = geometry->nodes->GetVolume(iPoint) + geometry->nodes->GetPeriodicVolume(iPoint); + Jacobian.AddVal2Diag(iPoint, Vol / dt); + } + else { + Jacobian.SetVal2Diag(iPoint, 1.0); + LinSysRes.SetBlock_Zero(iPoint); + } + + /*--- Right hand side of the system (-Residual) and initial guess (x = 0) ---*/ + + for (unsigned short iVar = 0; iVar < nVar; iVar++) { + unsigned long total_index = iPoint*nVar + iVar; + LinSysRes[total_index] = -LinSysRes[total_index]; + LinSysSol[total_index] = 0.0; + + su2double Res = fabs(LinSysRes[total_index]); + resRMS[iVar] += Res*Res; + if (Res > resMax[iVar]) { + resMax[iVar] = Res; + idxMax[iVar] = iPoint; + coordMax[iVar] = geometry->nodes->GetCoord(iPoint); + } + } + } + + //SetPreconditioner() + + + SU2_OMP_CRITICAL + for (unsigned short iVar = 0; iVar < nVar; iVar++) { + Residual_RMS[iVar] += resRMS[iVar]; + AddRes_Max(iVar, resMax[iVar], geometry->nodes->GetGlobalIndex(idxMax[iVar]), coordMax[iVar]); + } + END_SU2_OMP_CRITICAL + SU2_OMP_BARRIER + + /*--- Compute the root mean square residual ---*/ + SU2_OMP_MASTER + SetResidual_RMS(geometry, config); + END_SU2_OMP_MASTER + SU2_OMP_BARRIER +} + +void CScalarLegacySolver::CompleteImplicitIteration(CGeometry *geometry, CSolver **solver_container, CConfig *config) { + + const auto flowNodes = solver_container[FLOW_SOL]->GetNodes(); + + // nijso: TODO: we also still have an underrelaxation factor as config option + ComputeUnderRelaxationFactor(config); + + /*--- Update solution (system written in terms of increments) ---*/ + + if (!adjoint) { + + /*--- Update the scalar solution. ---*/ + + SU2_OMP_FOR_STAT(omp_chunk_size) + for (unsigned long iPoint = 0; iPoint < nPointDomain; iPoint++) { + + const su2double density = flowNodes->GetDensity(iPoint); + + // nijso: check difference between conservative and regular solution + // nijso: conservative solution is for transport of rho*Y, + // nijso: check underrelaxation + for (unsigned short iVar = 0u; iVar < nVar; iVar++) { + // FIXME dan: Underrelaxation is turned off here beacuse problems. + //nodes->GetUnderRelaxation(iPoint)*LinSysSol(iPoint,iVar), + nodes->AddClippedSolution(iPoint, iVar, LinSysSol(iPoint,iVar), lowerlimit[iVar], upperlimit[iVar], density, density); + } + } + END_SU2_OMP_FOR + } + + + for (unsigned short iPeriodic = 1; iPeriodic <= config->GetnMarker_Periodic()/2; iPeriodic++) { + InitiatePeriodicComms(geometry, config, iPeriodic, PERIODIC_IMPLICIT); + CompletePeriodicComms(geometry, config, iPeriodic, PERIODIC_IMPLICIT); + } + + InitiateComms(geometry, config, SOLUTION_EDDY); + CompleteComms(geometry, config, SOLUTION_EDDY); + +} + +void CScalarLegacySolver::ImplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config) { + + PrepareImplicitIteration(geometry, solver_container, config); + + /*--- Solve or smooth the linear system. ---*/ + + SU2_OMP(for schedule(static,OMP_MIN_SIZE) nowait) + for (unsigned long iPoint = nPointDomain; iPoint < nPoint; iPoint++) { + LinSysRes.SetBlock_Zero(iPoint); + LinSysSol.SetBlock_Zero(iPoint); + } + + auto iter = System.Solve(Jacobian, LinSysRes, LinSysSol, geometry, config); + + SU2_OMP_MASTER { + SetIterLinSolver(iter); + SetResLinSolver(System.GetResidual()); + } + END_SU2_OMP_MASTER + SU2_OMP_BARRIER + + CompleteImplicitIteration(geometry, solver_container, config); + +} + +void CScalarLegacySolver::ComputeUnderRelaxationFactor(const CConfig *config) { + + + /* Loop over the solution update given by relaxing the linear + system for this nonlinear iteration. */ + + su2double localUnderRelaxation = 1.00; + + /*--- We could use the relaxationfactor from the config file and use it, as an allowableratio ---*/ + //const su2double allowableRatio = 1.0 - config->GetRelaxation_Factor_Scalar(); + + const su2double allowableRatio = 0.90; + + SU2_OMP_FOR_STAT(omp_chunk_size) + for (unsigned long iPoint = 0; iPoint < nPointDomain; iPoint++) { + + localUnderRelaxation = 1.0; + //if (sa_model) { + for (unsigned short iVar = 0; iVar < nVar; iVar++) { + + /* We impose a limit on the maximum percentage that the + scalar variables can change over a nonlinear iteration. */ + + const unsigned long index = iPoint * nVar + iVar; + su2double ratio = fabs(LinSysSol[index]) / (fabs(nodes->GetSolution(iPoint, iVar)) + EPS); + if (ratio > allowableRatio) { + localUnderRelaxation = min(allowableRatio / ratio, localUnderRelaxation); + } + + } + //} + + /* Threshold the relaxation factor in the event that there is + a very small value. This helps avoid catastrophic crashes due + to non-realizable states by canceling the update. */ + + if (localUnderRelaxation < 1e-10) localUnderRelaxation = 0.0; + + /* Store the under-relaxation factor for this point. */ + + nodes->SetUnderRelaxation(iPoint, localUnderRelaxation); + + } + END_SU2_OMP_FOR + +} + +void CScalarLegacySolver::SetResidual_DualTime(CGeometry *geometry, CSolver **solver_container, CConfig *config, + unsigned short iRKStep, unsigned short iMesh, unsigned short RunTime_EqSystem) { + + const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); + const bool first_order = (config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_1ST); + const bool second_order = (config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_2ND); + const bool incompressible = (config->GetKind_Regime() == ENUM_REGIME::INCOMPRESSIBLE); + + /*--- Flow solution, needed to get density. ---*/ + + CVariable* flowNodes = solver_container[FLOW_SOL]->GetNodes(); + + /*--- Store the physical time step ---*/ + + const su2double TimeStep = config->GetDelta_UnstTimeND(); + + /*--- Local variables ---*/ + + unsigned short iVar, iMarker, iDim, iNeigh; + unsigned long iPoint, jPoint, iVertex, iEdge; + + const su2double *U_time_nM1 = nullptr, *U_time_n = nullptr, *U_time_nP1 = nullptr; + su2double Volume_nM1, Volume_nP1; + su2double Density_nM1, Density_n, Density_nP1; + const su2double *Normal = nullptr, *GridVel_i = nullptr, *GridVel_j = nullptr; + su2double Residual_GCL; + + /*--- Compute the dual time-stepping source term for static meshes ---*/ + + if (!dynamic_grid) { + + /*--- Loop over all nodes (excluding halos) ---*/ + + SU2_OMP_FOR_STAT(omp_chunk_size) + for (iPoint = 0; iPoint < nPointDomain; iPoint++) { + + /*--- Retrieve the solution at time levels n-1, n, and n+1. Note that + we are currently iterating on U^n+1 and that U^n & U^n-1 are fixed, + previous solutions that are stored in memory. ---*/ + + U_time_nM1 = nodes->GetSolution_time_n1(iPoint); + U_time_n = nodes->GetSolution_time_n(iPoint); + U_time_nP1 = nodes->GetSolution(iPoint); + + /*--- CV volume at time n+1. As we are on a static mesh, the volume + of the CV will remained fixed for all time steps. ---*/ + + Volume_nP1 = geometry->nodes->GetVolume(iPoint); + + /*--- Compute the dual time-stepping source term based on the chosen + time discretization scheme (1st- or 2nd-order).---*/ + + /*--- If this is the SST model, we need to multiply by the density + in order to get the conservative variables. + This is also the case in general for our transported scalars: + we transport rho*Y ---*/ + + if (incompressible){ + /*--- This is temporary and only valid for constant-density problems: + density could also be temperature dependent, but as it is not a part + of the solution vector it's neither stored for previous time steps + nor updated with the solution at the end of each iteration. */ + Density_nM1 = flowNodes->GetDensity(iPoint); + Density_n = flowNodes->GetDensity(iPoint); + Density_nP1 = flowNodes->GetDensity(iPoint); + } + else{ + Density_nM1 = flowNodes->GetSolution_time_n1(iPoint)[0]; + Density_n = flowNodes->GetSolution_time_n(iPoint,0); + Density_nP1 = flowNodes->GetSolution(iPoint,0); + } + + for (iVar = 0; iVar < nVar; iVar++) { + if (first_order) + LinSysRes(iPoint,iVar) += ( Density_nP1*U_time_nP1[iVar] - Density_n*U_time_n[iVar])*Volume_nP1 / TimeStep; + if (second_order) + LinSysRes(iPoint,iVar) += ( 3.0*Density_nP1*U_time_nP1[iVar] - 4.0*Density_n*U_time_n[iVar] + +1.0*Density_nM1*U_time_nM1[iVar] ) * Volume_nP1/(2.0*TimeStep); + } + + + /*--- Compute the Jacobian contribution due to the dual time source term. ---*/ + if (implicit) { + if (first_order) Jacobian.AddVal2Diag(iPoint, Volume_nP1/TimeStep); + if (second_order) Jacobian.AddVal2Diag(iPoint, (Volume_nP1*3.0)/(2.0*TimeStep)); + } + + } + END_SU2_OMP_FOR + + } else { + + /*--- For unsteady flows on dynamic meshes (rigidly transforming or + dynamically deforming), the Geometric Conservation Law (GCL) should be + satisfied in conjunction with the ALE formulation of the governing + equations. The GCL prevents accuracy issues caused by grid motion, i.e. + a uniform free-stream should be preserved through a moving grid. First, + we will loop over the edges and boundaries to compute the GCL component + of the dual time source term that depends on grid velocities. ---*/ + + SU2_OMP_FOR_STAT(omp_chunk_size) + for (iPoint = 0; iPoint < nPointDomain; ++iPoint) { + + GridVel_i = geometry->nodes->GetGridVel(iPoint); + U_time_n = nodes->GetSolution_time_n(iPoint); + Density_n = 1.0; + + //if (sst_model) { + if (incompressible) + Density_n = flowNodes->GetDensity(iPoint); // Temporary fix + // else + // Density_n = flowNodes->GetSolution_time_n(iPoint,0); + //} + + for (iNeigh = 0; iNeigh < geometry->nodes->GetnPoint(iPoint); iNeigh++) { + + iEdge = geometry->nodes->GetEdge(iPoint, iNeigh); + Normal = geometry->edges->GetNormal(iEdge); + + jPoint = geometry->nodes->GetPoint(iPoint, iNeigh); + GridVel_j = geometry->nodes->GetGridVel(jPoint); + + /*--- Determine whether to consider the normal outward or inward. ---*/ + su2double dir = (iPoint < jPoint)? 0.5 : -0.5; + + Residual_GCL = 0.0; + for (iDim = 0; iDim < nDim; iDim++) + Residual_GCL += dir*(GridVel_i[iDim]+GridVel_j[iDim])*Normal[iDim]; + + Residual_GCL *= Density_n; + + for (iVar = 0; iVar < nVar; iVar++) + LinSysRes(iPoint,iVar) += U_time_n[iVar]*Residual_GCL; + } + } + END_SU2_OMP_FOR + + /*--- Loop over the boundary edges ---*/ + + for (iMarker = 0; iMarker < geometry->GetnMarker(); iMarker++) { + if ((config->GetMarker_All_KindBC(iMarker) != INTERNAL_BOUNDARY) && + (config->GetMarker_All_KindBC(iMarker) != PERIODIC_BOUNDARY)) { + + SU2_OMP_FOR_STAT(OMP_MIN_SIZE) + for (iVertex = 0; iVertex < geometry->GetnVertex(iMarker); iVertex++) { + + /*--- Get the index for node i plus the boundary face normal ---*/ + + iPoint = geometry->vertex[iMarker][iVertex]->GetNode(); + Normal = geometry->vertex[iMarker][iVertex]->GetNormal(); + + /*--- Grid velocities stored at boundary node i ---*/ + + GridVel_i = geometry->nodes->GetGridVel(iPoint); + + /*--- Compute the GCL term by dotting the grid velocity with the face + normal. The normal is negated to match the boundary convention. ---*/ + + Residual_GCL = 0.0; + for (iDim = 0; iDim < nDim; iDim++) + Residual_GCL -= 0.5*(GridVel_i[iDim]+GridVel_i[iDim])*Normal[iDim]; + + /*--- Compute the GCL component of the source term for node i ---*/ + + U_time_n = nodes->GetSolution_time_n(iPoint); + + /*--- Multiply by density at node i for the SST model ---*/ + + //if (sst_model) { + if (incompressible) + Density_n = flowNodes->GetDensity(iPoint); // Temporary fix + else + Density_n = flowNodes->GetSolution_time_n(iPoint,0); + + for (iVar = 0; iVar < nVar; iVar++) + LinSysRes(iPoint,iVar) += Density_n*U_time_n[iVar]*Residual_GCL; + //} + //else { + // for (iVar = 0; iVar < nVar; iVar++) + // LinSysRes(iPoint,iVar) += U_time_n[iVar]*Residual_GCL; + //} + + } + END_SU2_OMP_FOR + } + } + + /*--- Loop over all nodes (excluding halos) to compute the remainder + of the dual time-stepping source term. ---*/ + + SU2_OMP_FOR_STAT(omp_chunk_size) + for (iPoint = 0; iPoint < nPointDomain; iPoint++) { + + /*--- Retrieve the solution at time levels n-1, n, and n+1. Note that + we are currently iterating on U^n+1 and that U^n & U^n-1 are fixed, + previous solutions that are stored in memory. ---*/ + + U_time_nM1 = nodes->GetSolution_time_n1(iPoint); + U_time_n = nodes->GetSolution_time_n(iPoint); + U_time_nP1 = nodes->GetSolution(iPoint); + + /*--- CV volume at time n-1 and n+1. In the case of dynamically deforming + grids, the volumes will change. On rigidly transforming grids, the + volumes will remain constant. ---*/ + + Volume_nM1 = geometry->nodes->GetVolume_nM1(iPoint); + Volume_nP1 = geometry->nodes->GetVolume(iPoint); + + /*--- Compute the dual time-stepping source residual. Due to the + introduction of the GCL term above, the remainder of the source residual + due to the time discretization has a new form.---*/ + + //if (sst_model) { + + /*--- If this is the SST model, we need to multiply by the density + in order to get the conservative variables ---*/ + if (incompressible) { + /*--- This is temporary and only valid for constant-density problems: + density could also be temperature dependent, but as it is not a part + of the solution vector it's neither stored for previous time steps + nor updated with the solution at the end of each iteration. */ + Density_nM1 = flowNodes->GetDensity(iPoint); + Density_n = flowNodes->GetDensity(iPoint); + Density_nP1 = flowNodes->GetDensity(iPoint); + } + else { + Density_nM1 = flowNodes->GetSolution_time_n1(iPoint)[0]; + Density_n = flowNodes->GetSolution_time_n(iPoint,0); + Density_nP1 = flowNodes->GetSolution(iPoint,0); + } + + for (iVar = 0; iVar < nVar; iVar++) { + if (first_order) + LinSysRes(iPoint,iVar) += (Density_nP1*U_time_nP1[iVar] - Density_n*U_time_n[iVar])*(Volume_nP1/TimeStep); + if (second_order) + LinSysRes(iPoint,iVar) += (Density_nP1*U_time_nP1[iVar] - Density_n*U_time_n[iVar])*(3.0*Volume_nP1/(2.0*TimeStep)) + + (Density_nM1*U_time_nM1[iVar] - Density_n*U_time_n[iVar])*(Volume_nM1/(2.0*TimeStep)); + } + + //} else { + // + // for (iVar = 0; iVar < nVar; iVar++) { + // if (first_order) + // LinSysRes(iPoint,iVar) += (U_time_nP1[iVar] - U_time_n[iVar])*(Volume_nP1/TimeStep); + // if (second_order) + // LinSysRes(iPoint,iVar) += (U_time_nP1[iVar] - U_time_n[iVar])*(3.0*Volume_nP1/(2.0*TimeStep)) + // + (U_time_nM1[iVar] - U_time_n[iVar])*(Volume_nM1/(2.0*TimeStep)); + // } + //} + + /*--- Compute the Jacobian contribution due to the dual time source term. ---*/ + if (implicit) { + if (first_order) Jacobian.AddVal2Diag(iPoint, Volume_nP1/TimeStep); + if (second_order) Jacobian.AddVal2Diag(iPoint, (Volume_nP1*3.0)/(2.0*TimeStep)); + } + } + END_SU2_OMP_FOR + } // end dynamic grid + +} + + +void CScalarLegacySolver::LoadRestart(CGeometry **geometry, CSolver ***solver, CConfig *config, int val_iter, bool val_update_geo) { + + /*--- Restart the solution from file information ---*/ + + unsigned short iVar, iMesh; + unsigned long iPoint, index, iChildren, Point_Fine; + su2double Area_Children, Area_Parent; + const su2double *Solution_Fine = nullptr; + //bool dual_time = ((config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_1ST) || + // (config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_2ND)); + //bool time_stepping = (config->GetTime_Marching() == TIME_STEPPING); + //unsigned short iZone = config->GetiZone(); + //unsigned short nZone = config->GetnZone(); + + //string UnstExt, text_line; + //ifstream restart_file; + + string restart_filename = config->GetFilename(config->GetSolution_FileName(), "", val_iter); + + bool turbulent = ((config->GetKind_Solver() == RANS) || + (config->GetKind_Solver() == INC_RANS) || + (config->GetKind_Solver() == DISC_ADJ_INC_RANS) || + (config->GetKind_Solver() == DISC_ADJ_RANS)); + + unsigned short turbSkip = 0; + if (turbulent) turbSkip = solver[MESH_0][TURB_SOL]->GetnVar(); + + /*--- To make this routine safe to call in parallel most of it can only be executed by one thread. ---*/ + SU2_OMP_MASTER + { + + /*--- Read the restart data from either an ASCII or binary SU2 file. ---*/ + + if (config->GetRead_Binary_Restart()) { + Read_SU2_Restart_Binary(geometry[MESH_0], config, restart_filename); + } else { + Read_SU2_Restart_ASCII(geometry[MESH_0], config, restart_filename); + } + + /*--- Skip flow variables ---*/ + + unsigned short skipVars = 0; + + if (nDim == 2) skipVars += 6; + if (nDim == 3) skipVars += 8; + + /*--- Skip turbulent variables if necessary variables ---*/ + + if (turbulent) skipVars += turbSkip; + + /*--- Adjust the number of solution variables in the incompressible + restart. We always carry a space in nVar for the energy equation in the + mean flow solver, but we only write it to the restart if it is active. + Therefore, we must reduce skipVars here if energy is inactive so that + the turbulent variables are read correctly. ---*/ + + bool incompressible = (config->GetKind_Regime() == ENUM_REGIME::INCOMPRESSIBLE); + bool energy = config->GetEnergy_Equation(); + bool weakly_coupled_heat = config->GetWeakly_Coupled_Heat(); + + if (incompressible && ((!energy) && (!weakly_coupled_heat))) skipVars--; + + /*--- Load data from the restart into correct containers. ---*/ + + unsigned long counter = 0, iPoint_Global = 0; + for (; iPoint_Global < geometry[MESH_0]->GetGlobal_nPointDomain(); iPoint_Global++) { + + + /*--- Retrieve local index. If this node from the restart file lives + on the current processor, we will load and instantiate the vars. ---*/ + + auto iPoint_Local = geometry[MESH_0]->GetGlobal_to_Local_Point(iPoint_Global); + + if (iPoint_Local > -1) { + + /*--- We need to store this point's data, so jump to the correct + offset in the buffer of data from the restart file and load it. ---*/ + + index = counter*Restart_Vars[1] + skipVars; + for (iVar = 0; iVar < nVar; ++iVar) + nodes->SetSolution(iPoint_Local, iVar, Restart_Data[index+iVar]); + + /*--- Increment the overall counter for how many points have been loaded. ---*/ + counter++; + } + + } + + /*--- Detect a wrong solution file ---*/ + + if (counter != nPointDomain) { + SU2_MPI::Error(string("The solution file ") + restart_filename + string(" doesn't match with the mesh file!\n") + + string("It could be empty lines at the end of the file."), CURRENT_FUNCTION); + } + + } + END_SU2_OMP_MASTER + SU2_OMP_BARRIER + + /*--- MPI solution and compute the scalars ---*/ + + solver[MESH_0][SCALAR_SOL]->InitiateComms(geometry[MESH_0], config, SOLUTION); + solver[MESH_0][SCALAR_SOL]->CompleteComms(geometry[MESH_0], config, SOLUTION); + + // Flow-Pre computes/sets mixture properties + solver[MESH_0][FLOW_SOL]->Preprocessing(geometry[MESH_0], solver[MESH_0], config, MESH_0, NO_RK_ITER, RUNTIME_FLOW_SYS, false); + // Update eddy-visc which needs correct mixture density and mixture lam-visc. Note that after this, another Flow-Pre + // at the start of the Iteration sets the updated eddy-visc into the Flow-Solvers Primitives. + if(config->GetKind_Turb_Model() != TURB_MODEL::NONE) solver[MESH_0][TURB_SOL]->Postprocessing(geometry[MESH_0], solver[MESH_0], config, MESH_0); + // For feature_multicomp this Scalar-Pre only computes the laminar contribution to mass diffusivity + solver[MESH_0][SCALAR_SOL]->Preprocessing(geometry[MESH_0], solver[MESH_0], config, MESH_0, NO_RK_ITER, RUNTIME_FLOW_SYS, false); + + /*--- Interpolate the solution down to the coarse multigrid levels ---*/ + + for (iMesh = 1; iMesh <= config->GetnMGLevels(); iMesh++) { + SU2_OMP_FOR_STAT(omp_chunk_size) + for (iPoint = 0; iPoint < geometry[iMesh]->GetnPoint(); iPoint++) { + Area_Parent = geometry[iMesh]->nodes->GetVolume(iPoint); + su2double Solution_Coarse[MAXNVAR] = {0.0}; + for (iChildren = 0; iChildren < geometry[iMesh]->nodes->GetnChildren_CV(iPoint); iChildren++) { + Point_Fine = geometry[iMesh]->nodes->GetChildren_CV(iPoint, iChildren); + Area_Children = geometry[iMesh-1]->nodes->GetVolume(Point_Fine); + Solution_Fine = solver[iMesh-1][SCALAR_SOL]->GetNodes()->GetSolution(Point_Fine); + for (iVar = 0; iVar < nVar; iVar++) { + Solution_Coarse[iVar] += Solution_Fine[iVar]*Area_Children/Area_Parent; + } + } + solver[iMesh][SCALAR_SOL]->GetNodes()->SetSolution(iPoint,Solution_Coarse); + } + END_SU2_OMP_FOR + solver[iMesh][SCALAR_SOL]->InitiateComms(geometry[iMesh], config, SOLUTION); + solver[iMesh][SCALAR_SOL]->CompleteComms(geometry[iMesh], config, SOLUTION); + solver[iMesh][FLOW_SOL]->Preprocessing(geometry[iMesh], solver[iMesh], config, iMesh, NO_RK_ITER, RUNTIME_FLOW_SYS, false); + solver[iMesh][SCALAR_SOL]->Postprocessing(geometry[iMesh], solver[iMesh], config, iMesh); + } + + /*--- Go back to single threaded execution. ---*/ + SU2_OMP_MASTER + { + /*--- Delete the class memory that is used to load the restart. ---*/ + + delete [] Restart_Vars; Restart_Vars = nullptr; + delete [] Restart_Data; Restart_Data = nullptr; + + } + END_SU2_OMP_MASTER + SU2_OMP_BARRIER + +} + +void CScalarLegacySolver::BC_HeatFlux_Wall(CGeometry *geometry, + CSolver **solver_container, + CNumerics *conv_numerics, + CNumerics *visc_numerics, CConfig *config, + unsigned short val_marker) { + /*--- Convective fluxes across viscous walls are equal to zero. ---*/ + +} + +void CScalarLegacySolver::BC_Far_Field(CGeometry *geometry, + CSolver **solver_container, + CNumerics *conv_numerics, + CNumerics *visc_numerics, CConfig *config, + unsigned short val_marker) { + unsigned long iPoint, iVertex; + unsigned short iVar, iDim; + su2double *Normal, *V_infty, *V_domain; + + bool grid_movement = config->GetGrid_Movement(); + + Normal = new su2double[nDim]; + + for (iVertex = 0; iVertex < geometry->nVertex[val_marker]; iVertex++) { + + iPoint = geometry->vertex[val_marker][iVertex]->GetNode(); + + /*--- Check if the node belongs to the domain (i.e, not a halo node) ---*/ + + if (geometry->nodes->GetDomain(iPoint)) { + + /*--- Allocate the value at the infinity ---*/ + + V_infty = solver_container[FLOW_SOL]->GetCharacPrimVar(val_marker, iVertex); + + /*--- Retrieve solution at the farfield boundary node ---*/ + + V_domain = solver_container[FLOW_SOL]->GetNodes()->GetPrimitive(iPoint); + + /*--- Grid Movement ---*/ + + if (grid_movement) + conv_numerics->SetGridVel(geometry->nodes->GetGridVel(iPoint), + geometry->nodes->GetGridVel(iPoint)); + + conv_numerics->SetPrimitive(V_domain, V_infty); + + /*--- Set scalar variable at the wall, and at infinity ---*/ + + for (iVar = 0; iVar < nVar; iVar++) { + Solution_i[iVar] = nodes->GetSolution(iPoint,iVar); + Solution_j[iVar] = Scalar_Inf[iVar]; + } + conv_numerics->SetScalarVar(Solution_i, Solution_j); + + /*--- Set Normal (it is necessary to change the sign) ---*/ + + geometry->vertex[val_marker][iVertex]->GetNormal(Normal); + for (iDim = 0; iDim < nDim; iDim++) + Normal[iDim] = -Normal[iDim]; + conv_numerics->SetNormal(Normal); + + /*--- Compute residuals and Jacobians ---*/ + + conv_numerics->ComputeResidual(Residual, Jacobian_i, Jacobian_j, config); + + /*--- Add residuals and Jacobians ---*/ + + LinSysRes.AddBlock(iPoint, Residual); + Jacobian.AddBlock(iPoint, iPoint, Jacobian_i); + + } + } + + delete [] Normal; + +} + + + +void CScalarLegacySolver::SetInletAtVertex(const su2double *val_inlet, + unsigned short iMarker, + unsigned long iVertex) { + unsigned short iVar; + + for (iVar = 0; iVar < nVar; iVar++) { + Inlet_ScalarVars[iMarker][iVertex][iVar] = val_inlet[Inlet_Position+iVar]; + } + +} + +su2double CScalarLegacySolver::GetInletAtVertex(su2double *val_inlet, + unsigned long val_inlet_point, + unsigned short val_kind_marker, + string val_marker, + const CGeometry *geometry, + const CConfig *config) const { + + /*--- Local variables ---*/ + + unsigned short iMarker, iDim, iVar; + unsigned long iPoint, iVertex; + su2double Area = 0.0; + su2double Normal[3] = {0.0,0.0,0.0}; + + /*--- Alias positions within inlet file for readability ---*/ + + if (val_kind_marker == INLET_FLOW) { + + for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { + if ((config->GetMarker_All_KindBC(iMarker) == INLET_FLOW) && + (config->GetMarker_All_TagBound(iMarker) == val_marker)) { + + for (iVertex = 0; iVertex < nVertex[iMarker]; iVertex++){ + + iPoint = geometry->vertex[iMarker][iVertex]->GetNode(); + + if (iPoint == val_inlet_point) { + + /*-- Compute boundary face area for this vertex. ---*/ + + geometry->vertex[iMarker][iVertex]->GetNormal(Normal); + Area = 0.0; + for (iDim = 0; iDim < nDim; iDim++) + Area += Normal[iDim]*Normal[iDim]; + Area = sqrt(Area); + + /*--- Access and store the inlet variables for this vertex. ---*/ + + for (iVar = 0; iVar < nVar; iVar++) + val_inlet[Inlet_Position+iVar] = Inlet_ScalarVars[iMarker][iVertex][iVar]; + + /*--- Exit once we find the point. ---*/ + + return Area; + + } + } + } + } + + } + + /*--- If we don't find a match, then the child point is not on the + current inlet boundary marker. Return zero area so this point does + not contribute to the restriction operator and continue. ---*/ + + return Area; + +} + +void CScalarLegacySolver::SetUniformInlet(const CConfig* config, unsigned short iMarker) { + + for(unsigned long iVertex=0; iVertex < nVertex[iMarker]; iVertex++){ + for (unsigned short iVar = 0; iVar < nVar; iVar++) + Inlet_ScalarVars[iMarker][iVertex][iVar] = Scalar_Inf[iVar]; + } + +} + + diff --git a/SU2_CFD/src/solvers/CSolver.cpp b/SU2_CFD/src/solvers/CSolver.cpp index e5e9b8bb3fec..a34282a1ed5d 100644 --- a/SU2_CFD/src/solvers/CSolver.cpp +++ b/SU2_CFD/src/solvers/CSolver.cpp @@ -3529,6 +3529,9 @@ void CSolver::LoadInletProfile(CGeometry **geometry, unsigned short nVar_Turb = 0; if (config->GetKind_Turb_Model() != TURB_MODEL::NONE) nVar_Turb = solver[MESH_0][TURB_SOL]->GetnVar(); + unsigned short nVar_Scalar = 0; + if (config->GetKind_Scalar_Model() != NO_SCALAR_MODEL) nVar_Scalar = solver[MESH_0][SCALAR_SOL]->GetnVar(); + /*--- names of the columns in the profile ---*/ vector columnNames; vector columnValues; @@ -3540,7 +3543,7 @@ void CSolver::LoadInletProfile(CGeometry **geometry, necessary in case we are writing a template profile file or for Inlet Interpolation purposes. ---*/ - const unsigned short nCol_InletFile = 2 + nDim + nVar_Turb; + const unsigned short nCol_InletFile = 2 + nDim + nVar_Turb + nVar_Scalar; /*--- for incompressible flow, we can switch the energy equation off ---*/ /*--- for now, we write the temperature even if we are not using it ---*/ @@ -3621,12 +3624,32 @@ void CSolver::LoadInletProfile(CGeometry **geometry, break; case TURB_MODEL::SST: case TURB_MODEL::SST_SUST: /*--- 2-equation turbulence model (SST) ---*/ - columnName << "TKE " << setw(24) << "DISSIPATION"; + columnName << "TKE " << setw(24) << "DISSIPATION" << setw(24); columnValue << config->GetTke_FreeStream() << "\t" << config->GetOmega_FreeStream() <<"\t"; break; } - columnNames.push_back(columnName.str()); + switch(config->GetKind_Scalar_Model()){ + case NO_SCALAR_MODEL: + break; + case PASSIVE_SCALAR: + for (unsigned int iVar=0; iVarGetInlet_ScalarVal(Marker_Tag)[iVar] <<"\t"; + } + break; + case PROGRESS_VARIABLE: + columnName << "PROGVAR " << setw(24) << "ENTHALPY " << setw(24) << "CO " << setw(24) << "NO "; + columnValue << config->GetInlet_ScalarVal(Marker_Tag)[I_PROG_VAR] <<"\t"; + columnValue << config->GetInlet_ScalarVal(Marker_Tag)[I_ENTHALPY] <<"\t"; + columnValue << config->GetInlet_ScalarVal(Marker_Tag)[I_CO] <<"\t"; + columnValue << config->GetInlet_ScalarVal(Marker_Tag)[I_NOX] <<"\t"; + + break; + + } + + columnNames.push_back(columnName.str()); columnValues.push_back(columnValue.str()); } diff --git a/SU2_CFD/src/solvers/CSolverFactory.cpp b/SU2_CFD/src/solvers/CSolverFactory.cpp index 6b09b457481a..f1e0fbade298 100644 --- a/SU2_CFD/src/solvers/CSolverFactory.cpp +++ b/SU2_CFD/src/solvers/CSolverFactory.cpp @@ -51,6 +51,8 @@ #include "../../include/solvers/CBaselineSolver.hpp" #include "../../include/solvers/CBaselineSolver_FEM.hpp" #include "../../include/solvers/CRadP1Solver.hpp" +#include "../../include/solvers/CFlameletSolver.hpp" +#include "../../include/solvers/CPassiveScalarSolver.hpp" map CSolverFactory::allocatedSolvers; @@ -78,6 +80,7 @@ CSolver** CSolverFactory::CreateSolverContainer(ENUM_MAIN_SOLVER kindMainSolver, solver[FLOW_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::INC_NAVIER_STOKES, solver, geometry, config, iMGLevel); solver[HEAT_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::HEAT, solver, geometry, config, iMGLevel); solver[RAD_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::RADIATION, solver, geometry, config, iMGLevel); + solver[SCALAR_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::SCALAR, solver, geometry, config, iMGLevel); break; case NAVIER_STOKES: solver[FLOW_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::NAVIER_STOKES, solver, geometry, config, iMGLevel); @@ -92,6 +95,7 @@ CSolver** CSolverFactory::CreateSolverContainer(ENUM_MAIN_SOLVER kindMainSolver, case INC_RANS: solver[FLOW_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::INC_NAVIER_STOKES, solver, geometry, config, iMGLevel); solver[HEAT_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::HEAT, solver, geometry, config, iMGLevel); + solver[SCALAR_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::SCALAR, solver, geometry, config, iMGLevel); solver[TURB_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::TURB, solver, geometry, config, iMGLevel); solver[RAD_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::RADIATION, solver, geometry, config, iMGLevel); break; @@ -123,6 +127,8 @@ CSolver** CSolverFactory::CreateSolverContainer(ENUM_MAIN_SOLVER kindMainSolver, case DISC_ADJ_RANS: solver[FLOW_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::NAVIER_STOKES, solver, geometry, config, iMGLevel); solver[ADJFLOW_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::DISC_ADJ_FLOW, solver, geometry, config, iMGLevel); + solver[SCALAR_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::SCALAR, solver, geometry, config, iMGLevel); + solver[ADJSCALAR_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::DISC_ADJ_SCALAR, solver, geometry, config, iMGLevel); solver[TURB_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::TURB, solver, geometry, config, iMGLevel); solver[ADJTURB_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::DISC_ADJ_TURB, solver, geometry, config, iMGLevel); break; @@ -139,12 +145,16 @@ CSolver** CSolverFactory::CreateSolverContainer(ENUM_MAIN_SOLVER kindMainSolver, solver[ADJHEAT_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::DISC_ADJ_HEAT, solver, geometry, config, iMGLevel); solver[RAD_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::RADIATION, solver, geometry, config, iMGLevel); solver[ADJRAD_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::DISC_ADJ_RADIATION, solver, geometry, config, iMGLevel); + solver[SCALAR_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::SCALAR, solver, geometry, config, iMGLevel); + solver[ADJSCALAR_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::DISC_ADJ_SCALAR, solver, geometry, config, iMGLevel); break; case DISC_ADJ_INC_RANS: solver[FLOW_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::INC_NAVIER_STOKES, solver, geometry, config, iMGLevel); solver[ADJFLOW_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::DISC_ADJ_FLOW, solver, geometry, config, iMGLevel); solver[HEAT_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::HEAT, solver, geometry, config, iMGLevel); solver[ADJHEAT_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::DISC_ADJ_HEAT, solver, geometry, config, iMGLevel); + solver[SCALAR_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::SCALAR, solver, geometry, config, iMGLevel); + solver[ADJSCALAR_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::DISC_ADJ_SCALAR, solver, geometry, config, iMGLevel); solver[TURB_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::TURB, solver, geometry, config, iMGLevel); solver[ADJTURB_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::DISC_ADJ_TURB, solver, geometry, config, iMGLevel); solver[RAD_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::RADIATION, solver, geometry, config, iMGLevel); @@ -272,6 +282,14 @@ CSolver* CSolverFactory::CreateSubSolver(SUB_SOLVER_TYPE kindSolver, CSolver **s genericSolver = CreateHeatSolver(solver, geometry, config, iMGLevel, true); metaData.integrationType = INTEGRATION_TYPE::DEFAULT; break; + case SUB_SOLVER_TYPE::SCALAR: + genericSolver = CreateScalarSolver(solver, geometry, config, iMGLevel, false); + metaData.integrationType = INTEGRATION_TYPE::MULTIGRID; + break; + case SUB_SOLVER_TYPE::DISC_ADJ_SCALAR: + genericSolver = CreateScalarSolver(solver, geometry, config, iMGLevel, true); + metaData.integrationType = INTEGRATION_TYPE::DEFAULT; + break; case SUB_SOLVER_TYPE::TRANSITION: genericSolver = new CTransLMSolver(geometry, config, iMGLevel); metaData.integrationType = INTEGRATION_TYPE::SINGLEGRID; @@ -369,6 +387,31 @@ CSolver* CSolverFactory::CreateHeatSolver(CSolver **solver, CGeometry *geometry, } +CSolver* CSolverFactory::CreateScalarSolver(CSolver **solver, CGeometry *geometry, CConfig *config, int iMGLevel, bool adjoint){ + + CSolver *scalarSolver = nullptr; + + switch (config->GetKind_Scalar_Model()){ + + case PROGRESS_VARIABLE: + if (adjoint){ + scalarSolver = new CDiscAdjSolver(geometry, config, solver[SCALAR_SOL], RUNTIME_SCALAR_SYS, iMGLevel); + } else { + scalarSolver = new CFlameletSolver(geometry, config, iMGLevel); + } + break; + + case PASSIVE_SCALAR: + if (adjoint){ + scalarSolver = new CDiscAdjSolver(geometry, config, solver[SCALAR_SOL], RUNTIME_SCALAR_SYS, iMGLevel); + } else { + scalarSolver = new CPassiveScalarSolver(geometry, config, iMGLevel); + } + break; + } + return scalarSolver; +} + CSolver* CSolverFactory::CreateMeshSolver(CSolver **solver, CGeometry *geometry, CConfig *config, int iMGLevel, bool adjoint){ CSolver *meshSolver = nullptr; diff --git a/SU2_CFD/src/solvers/CTurbSSTSolver.cpp b/SU2_CFD/src/solvers/CTurbSSTSolver.cpp index 995348fed5f1..712c8cd3b6be 100644 --- a/SU2_CFD/src/solvers/CTurbSSTSolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSSTSolver.cpp @@ -145,7 +145,7 @@ CTurbSSTSolver::CTurbSSTSolver(CGeometry *geometry, CConfig *config, unsigned sh InitiateComms(geometry, config, SOLUTION_EDDY); CompleteComms(geometry, config, SOLUTION_EDDY); - /*--- Initializate quantities for SlidingMesh Interface ---*/ + /*--- Initialize quantities for SlidingMesh Interface ---*/ SlidingState.resize(nMarker); SlidingStateNodes.resize(nMarker); diff --git a/SU2_CFD/src/variables/CFlameletVariable.cpp b/SU2_CFD/src/variables/CFlameletVariable.cpp new file mode 100644 index 000000000000..df081b0587d2 --- /dev/null +++ b/SU2_CFD/src/variables/CFlameletVariable.cpp @@ -0,0 +1,61 @@ +/*! + * \file CFlameletVariable.cpp + * \brief Definition of the variable fields for the flamelet class. + * \author D. Mayer, T. Economon + * \version 7.1.0 "Blackbird" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2020, SU2 Contributors (cf. AUTHORS.md) + * + * SU2 is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * SU2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with SU2. If not, see . + */ + +#include "../../include/variables/CFlameletVariable.hpp" + +CFlameletVariable::CFlameletVariable(su2double *val_scalar_inf, + unsigned long npoint, + unsigned long ndim, + unsigned long nvar, + CConfig *config) +: CScalarLegacyVariable(npoint, ndim, nvar, config) { + + for (unsigned long iPoint=0; iPointGetTime_Marching() == TIME_MARCHING::DT_STEPPING_1ST) || + (config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_2ND)); + + if (dual_time) { + Solution_time_n = Solution; + Solution_time_n1 = Solution; + } + + /* Allocate space for the source and scalars for visualization */ + + + source_scalar.resize(nPoint, config->GetNScalars()) = su2double(0.0); + lookup_scalar.resize(nPoint, config->GetNLookups()) = su2double(0.0); + + +} diff --git a/SU2_CFD/src/variables/CIncNSVariable.cpp b/SU2_CFD/src/variables/CIncNSVariable.cpp index 0fed2816f112..714355c303ca 100644 --- a/SU2_CFD/src/variables/CIncNSVariable.cpp +++ b/SU2_CFD/src/variables/CIncNSVariable.cpp @@ -49,7 +49,7 @@ CIncNSVariable::CIncNSVariable(su2double pressure, const su2double *velocity, su } } -bool CIncNSVariable::SetPrimVar(unsigned long iPoint, su2double eddy_visc, su2double turb_ke, CFluidModel *FluidModel) { +bool CIncNSVariable::SetPrimVar(unsigned long iPoint, su2double eddy_visc, su2double turb_ke, CFluidModel *FluidModel, su2double *scalar) { unsigned short iVar; bool check_dens = false, check_temp = false, physical = true; @@ -68,8 +68,12 @@ bool CIncNSVariable::SetPrimVar(unsigned long iPoint, su2double eddy_visc, su2do from the dynamic pressure being iterated. ---*/ /*--- Use the fluid model to compute the new value of density. ---*/ + + FluidModel->SetTDState_T(Temperature,scalar); - FluidModel->SetTDState_T(Temperature); + Solution(iPoint,nDim+1) = FluidModel->GetTemperature(); + Temperature = Solution(iPoint,nDim+1); + check_temp = SetTemperature(iPoint, Temperature); /*--- Set the value of the density ---*/ @@ -88,7 +92,7 @@ bool CIncNSVariable::SetPrimVar(unsigned long iPoint, su2double eddy_visc, su2do Temperature = Solution(iPoint,nDim+1); SetTemperature(iPoint, Temperature); - FluidModel->SetTDState_T(Temperature); + FluidModel->SetTDState_T(Temperature, scalar); SetDensity(iPoint, FluidModel->GetDensity()); /*--- Flag this point as non-physical. ---*/ diff --git a/SU2_CFD/src/variables/CNSVariable.cpp b/SU2_CFD/src/variables/CNSVariable.cpp index 4243431ce2b5..3751773c4da7 100644 --- a/SU2_CFD/src/variables/CNSVariable.cpp +++ b/SU2_CFD/src/variables/CNSVariable.cpp @@ -133,7 +133,7 @@ void CNSVariable::SetRoe_Dissipation_FD(unsigned long iPoint, su2double val_wall AD::EndPreacc(); } -bool CNSVariable::SetPrimVar(unsigned long iPoint, su2double eddy_visc, su2double turb_ke, CFluidModel *FluidModel) { +bool CNSVariable::SetPrimVar(unsigned long iPoint, su2double eddy_visc, su2double turb_ke, CFluidModel *FluidModel, su2double *scalar) { bool RightVol = true; diff --git a/SU2_CFD/src/variables/CPassiveScalarVariable.cpp b/SU2_CFD/src/variables/CPassiveScalarVariable.cpp new file mode 100644 index 000000000000..9c1e4b07d3aa --- /dev/null +++ b/SU2_CFD/src/variables/CPassiveScalarVariable.cpp @@ -0,0 +1,52 @@ +/*! + * \file CPassiveScalarVariable.cpp + * \brief Definition of the variable fields for the passive scalar class. + * \author D. Mayer, T. Economon + * \version 7.1.1 "Blackbird" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2020, SU2 Contributors (cf. AUTHORS.md) + * + * SU2 is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * SU2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with SU2. If not, see . + */ + + +#include "../../include/variables/CPassiveScalarVariable.hpp" + +CPassiveScalarVariable::CPassiveScalarVariable(su2double *val_scalar_inf, unsigned long npoint, unsigned long ndim, unsigned long nvar, + CConfig *config) : CScalarLegacyVariable(npoint, ndim, nvar, config) { + + for(unsigned long iPoint=0; iPointGetTime_Marching() == TIME_MARCHING::DT_STEPPING_1ST) || + (config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_2ND)); + + if (dual_time) { + Solution_time_n = Solution; + Solution_time_n1 = Solution; + } + +} diff --git a/SU2_CFD/src/variables/CScalarLegacyVariable.cpp b/SU2_CFD/src/variables/CScalarLegacyVariable.cpp new file mode 100644 index 000000000000..ecc465aa0937 --- /dev/null +++ b/SU2_CFD/src/variables/CScalarLegacyVariable.cpp @@ -0,0 +1,76 @@ +/*! + * \file CScalarLegacyVariable.cpp + * \brief Definition of the scalar equation variables at each vertex. + * \author D. Mayer, T. Economon + * \version 7.1.1 "Blackbird" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2020, SU2 Contributors (cf. AUTHORS.md) + * + * SU2 is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * SU2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with SU2. If not, see . + */ + + +#include "../../include/variables/CScalarLegacyVariable.hpp" + +CScalarLegacyVariable::CScalarLegacyVariable(unsigned long npoint, unsigned long ndim, unsigned long nvar, CConfig *config) + : CVariable(npoint, ndim, nvar, config), Gradient_Reconstruction(config->GetReconstructionGradientRequired() ? Gradient_Aux : Gradient) { + + /*--- Allocate space for the diffusivity model ---*/ + + + Diffusivity.resize(nPoint,nVar) = su2double(0.0); + + + /*--- Gradient related fields ---*/ + + Gradient.resize(nPoint,nVar,nDim,0.0); + + if (config->GetReconstructionGradientRequired()) { + Gradient_Aux.resize(nPoint,nVar,nDim,0.0); + } + + if (config->GetLeastSquaresRequired()) { + Rmatrix.resize(nPoint,nDim,nDim,0.0); + } + + /*--- Always allocate the slope limiter, and the auxiliar + variables (check the logic - JST with 2nd order Turb model) ---*/ + + Limiter.resize(nPoint,nVar) = su2double(0.0); + Solution_Max.resize(nPoint,nVar) = su2double(0.0); + Solution_Min.resize(nPoint,nVar) = su2double(0.0); + + Delta_Time.resize(nPoint) = su2double(0.0); + + /*--- Allocate residual structures ---*/ + + Res_TruncError.resize(nPoint,nVar) = su2double(0.0); + + /*--- If axisymmetric and viscous, we need an auxiliary gradient. ---*/ + + if (config->GetAxisymmetric() && config->GetViscous()) { + AuxVar.resize(nPoint,nVar)=su2double(0.0); + Grad_AuxVar.resize(nPoint,nVar,nDim); + } + + /* Under-relaxation parameter. */ + UnderRelaxation.resize(nPoint) = su2double(1.0); + LocalCFL.resize(nPoint) = su2double(0.0); + +} diff --git a/SU2_IDE/Xcode/SU2_CFD.xcodeproj/project.pbxproj.orig b/SU2_IDE/Xcode/SU2_CFD.xcodeproj/project.pbxproj.orig new file mode 100644 index 000000000000..bfd40d4c1d52 --- /dev/null +++ b/SU2_IDE/Xcode/SU2_CFD.xcodeproj/project.pbxproj.orig @@ -0,0 +1,3732 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ +<<<<<<< HEAD + 05E6DB9517EB61E600FA1F7E /* grid_adaptation_structure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05E6DB8C17EB61E600FA1F7E /* grid_adaptation_structure.cpp */; }; + 05E6DB9617EB61E600FA1F7E /* grid_movement_structure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05E6DB8D17EB61E600FA1F7E /* grid_movement_structure.cpp */; }; + 05E6DC0117EB62A100FA1F7E /* definition_structure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05E6DBBC17EB62A000FA1F7E /* definition_structure.cpp */; }; + 05E6DC0517EB62A100FA1F7E /* iteration_structure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05E6DBC017EB62A100FA1F7E /* iteration_structure.cpp */; }; + 05E6DC3117EB62A100FA1F7E /* SU2_CFD.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05E6DBEC17EB62A100FA1F7E /* SU2_CFD.cpp */; }; + 05F1089A1978D2AE00F2F288 /* fluid_model_pig.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05F108961978D2AE00F2F288 /* fluid_model_pig.cpp */; }; + 05F1089B1978D2AE00F2F288 /* fluid_model_ppr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05F108971978D2AE00F2F288 /* fluid_model_ppr.cpp */; }; + 05F1089C1978D2AE00F2F288 /* fluid_model_pvdw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05F108981978D2AE00F2F288 /* fluid_model_pvdw.cpp */; }; + 05F1089D1978D2AE00F2F288 /* fluid_model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05F108991978D2AE00F2F288 /* fluid_model.cpp */; }; + 05F108A41978D2F200F2F288 /* transport_model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05F108A31978D2F200F2F288 /* transport_model.cpp */; }; + 05F8F2682008A1C8000FEA01 /* python_wrapper_structure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05F8F2672008A1C7000FEA01 /* python_wrapper_structure.cpp */; }; + 356E2E152399979F0039E9B5 /* CFEANonlinearElasticity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 356E2E0D2399979F0039E9B5 /* CFEANonlinearElasticity.cpp */; }; + 356E2E162399979F0039E9B5 /* CFEALinearElasticity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 356E2E0E2399979F0039E9B5 /* CFEALinearElasticity.cpp */; }; + 356E2E182399979F0039E9B5 /* CFEAElasticity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 356E2E102399979F0039E9B5 /* CFEAElasticity.cpp */; }; + 356E2E2123999AEA0039E9B5 /* CGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 356E2E1D23999AEA0039E9B5 /* CGeometry.cpp */; }; + 356E2E2223999AEA0039E9B5 /* CPhysicalGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 356E2E1E23999AEA0039E9B5 /* CPhysicalGeometry.cpp */; }; + 356E2E2323999AEA0039E9B5 /* CDummyGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 356E2E1F23999AEA0039E9B5 /* CDummyGeometry.cpp */; }; + 356E2E2423999AEA0039E9B5 /* CMultiGridGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 356E2E2023999AEA0039E9B5 /* CMultiGridGeometry.cpp */; }; + 356E2E2D23999B140039E9B5 /* CElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 356E2E2623999B140039E9B5 /* CElement.cpp */; }; + 356E2E2E23999B140039E9B5 /* CTRIA1.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 356E2E2723999B140039E9B5 /* CTRIA1.cpp */; }; + 356E2E2F23999B140039E9B5 /* CQUAD4.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 356E2E2823999B140039E9B5 /* CQUAD4.cpp */; }; + 356E2E3023999B140039E9B5 /* CHEXA8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 356E2E2923999B140039E9B5 /* CHEXA8.cpp */; }; + 356E2E3123999B140039E9B5 /* CTETRA1.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 356E2E2A23999B140039E9B5 /* CTETRA1.cpp */; }; + 356E2E3223999B140039E9B5 /* CPRISM6.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 356E2E2B23999B140039E9B5 /* CPRISM6.cpp */; }; + 356E2E3323999B140039E9B5 /* CPYRAM5.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 356E2E2C23999B140039E9B5 /* CPYRAM5.cpp */; }; + 3599C5D32121FAC9003AAF05 /* wall_model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3599C5D12121FAC9003AAF05 /* wall_model.cpp */; }; + 400CEC2E21FA81A10019B790 /* printing_toolbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 400CEC2D21FA81A10019B790 /* printing_toolbox.cpp */; }; + 40303E46246A05EC00CD7789 /* CHeatSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303E2E246A05EB00CD7789 /* CHeatSolver.cpp */; }; + 40303E47246A05EC00CD7789 /* CAdjEulerSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303E2F246A05EB00CD7789 /* CAdjEulerSolver.cpp */; }; + 40303E48246A05EC00CD7789 /* CIncNSSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303E30246A05EB00CD7789 /* CIncNSSolver.cpp */; }; + 40303E49246A05EC00CD7789 /* CDiscAdjFEASolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303E31246A05EB00CD7789 /* CDiscAdjFEASolver.cpp */; }; + 40303E4A246A05EC00CD7789 /* CNSSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303E32246A05EB00CD7789 /* CNSSolver.cpp */; }; + 40303E4B246A05EC00CD7789 /* CTemplateSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303E33246A05EC00CD7789 /* CTemplateSolver.cpp */; }; + 40303E4C246A05EC00CD7789 /* CDiscAdjSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303E34246A05EC00CD7789 /* CDiscAdjSolver.cpp */; }; + 40303E4D246A05EC00CD7789 /* CAdjTurbSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303E35246A05EC00CD7789 /* CAdjTurbSolver.cpp */; }; + 40303E4E246A05EC00CD7789 /* CTransLMSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303E36246A05EC00CD7789 /* CTransLMSolver.cpp */; }; + 40303E4F246A05EC00CD7789 /* CTurbSASolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303E37246A05EC00CD7789 /* CTurbSASolver.cpp */; }; + 40303E50246A05EC00CD7789 /* CTurbSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303E38246A05EC00CD7789 /* CTurbSolver.cpp */; }; + 40303E51246A05EC00CD7789 /* CIncEulerSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303E39246A05EC00CD7789 /* CIncEulerSolver.cpp */; }; + 40303E52246A05EC00CD7789 /* CRadP1Solver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303E3A246A05EC00CD7789 /* CRadP1Solver.cpp */; }; + 40303E53246A05EC00CD7789 /* CBaselineSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303E3B246A05EC00CD7789 /* CBaselineSolver.cpp */; }; + 40303E54246A05EC00CD7789 /* CRadSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303E3C246A05EC00CD7789 /* CRadSolver.cpp */; }; + 40303E55246A05EC00CD7789 /* CEulerSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303E3D246A05EC00CD7789 /* CEulerSolver.cpp */; }; + 40303E56246A05EC00CD7789 /* CBaselineSolver_FEM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303E3E246A05EC00CD7789 /* CBaselineSolver_FEM.cpp */; }; + 40303E57246A05EC00CD7789 /* CAdjNSSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303E3F246A05EC00CD7789 /* CAdjNSSolver.cpp */; }; + 40303E58246A05EC00CD7789 /* CTurbSSTSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303E40246A05EC00CD7789 /* CTurbSSTSolver.cpp */; }; + 40303E59246A05EC00CD7789 /* CFEASolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303E41246A05EC00CD7789 /* CFEASolver.cpp */; }; + 40303E5A246A05EC00CD7789 /* CFEM_DG_NSSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303E42246A05EC00CD7789 /* CFEM_DG_NSSolver.cpp */; }; + 40303E5B246A05EC00CD7789 /* CFEM_DG_EulerSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303E43246A05EC00CD7789 /* CFEM_DG_EulerSolver.cpp */; }; + 40303E5C246A05EC00CD7789 /* CSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303E44246A05EC00CD7789 /* CSolver.cpp */; }; + 40303E5D246A05EC00CD7789 /* CSolverFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303E45246A05EC00CD7789 /* CSolverFactory.cpp */; }; + 40303E61246A064900CD7789 /* CHeatVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303E5E246A064900CD7789 /* CHeatVariable.cpp */; }; + 40303E62246A064900CD7789 /* CRadP1Variable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303E5F246A064900CD7789 /* CRadP1Variable.cpp */; }; + 40303E63246A064900CD7789 /* CRadVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303E60246A064900CD7789 /* CRadVariable.cpp */; }; + 40303EB0246A5CC000CD7789 /* CConfig.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303EAF246A5CC000CD7789 /* CConfig.cpp */; }; + 40303EB9246A5D2700CD7789 /* C1DInterpolation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303EB7246A5D2700CD7789 /* C1DInterpolation.cpp */; }; + 40303EBA246A5D2700CD7789 /* CSymmetricMatrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303EB8246A5D2700CD7789 /* CSymmetricMatrix.cpp */; }; + 40303EBC246A5D4800CD7789 /* CPastixWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303EBB246A5D4800CD7789 /* CPastixWrapper.cpp */; }; + 40303EC5246A5D9300CD7789 /* CInterpolator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303EBE246A5D9200CD7789 /* CInterpolator.cpp */; }; + 40303EC6246A5D9300CD7789 /* CNearestNeighbor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303EBF246A5D9200CD7789 /* CNearestNeighbor.cpp */; }; + 40303EC7246A5D9300CD7789 /* CMirror.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303EC0246A5D9300CD7789 /* CMirror.cpp */; }; + 40303EC8246A5D9300CD7789 /* CIsoparametric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303EC1246A5D9300CD7789 /* CIsoparametric.cpp */; }; + 40303EC9246A5D9300CD7789 /* CSlidingMesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303EC2246A5D9300CD7789 /* CSlidingMesh.cpp */; }; + 40303ECA246A5D9300CD7789 /* CRadialBasisFunction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303EC3246A5D9300CD7789 /* CRadialBasisFunction.cpp */; }; + 40303ECB246A5D9300CD7789 /* CInterpolatorFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40303EC4246A5D9300CD7789 /* CInterpolatorFactory.cpp */; }; + 403426C2235F83B2005B5215 /* CAdjFlowIncOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 403426B2235F83B1005B5215 /* CAdjFlowIncOutput.cpp */; }; + 403426C3235F83B2005B5215 /* CFlowOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 403426B3235F83B1005B5215 /* CFlowOutput.cpp */; }; + 403426C4235F83B2005B5215 /* CFlowIncOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 403426B4235F83B1005B5215 /* CFlowIncOutput.cpp */; }; + 403426C5235F83B2005B5215 /* CHeatOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 403426B5235F83B1005B5215 /* CHeatOutput.cpp */; }; + 403426C6235F83B2005B5215 /* CMultizoneOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 403426B6235F83B1005B5215 /* CMultizoneOutput.cpp */; }; + 403426C7235F83B2005B5215 /* CMeshOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 403426B7235F83B1005B5215 /* CMeshOutput.cpp */; }; + 403426C8235F83B2005B5215 /* CAdjElasticityOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 403426B8235F83B1005B5215 /* CAdjElasticityOutput.cpp */; }; + 403426C9235F83B2005B5215 /* CElasticityOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 403426B9235F83B1005B5215 /* CElasticityOutput.cpp */; }; + 403426CA235F83B2005B5215 /* CFlowCompOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 403426BA235F83B1005B5215 /* CFlowCompOutput.cpp */; }; + 403426CB235F83B2005B5215 /* output_structure_legacy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 403426BB235F83B1005B5215 /* output_structure_legacy.cpp */; }; + 403426CC235F83B2005B5215 /* CFlowCompFEMOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 403426BC235F83B1005B5215 /* CFlowCompFEMOutput.cpp */; }; + 403426CD235F83B2005B5215 /* CAdjFlowCompOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 403426BD235F83B1005B5215 /* CAdjFlowCompOutput.cpp */; }; + 403426CE235F83B2005B5215 /* COutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 403426BE235F83B1005B5215 /* COutput.cpp */; }; + 403426CF235F83B2005B5215 /* output_physics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 403426BF235F83B2005B5215 /* output_physics.cpp */; }; + 403426D0235F83B2005B5215 /* CAdjHeatOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 403426C0235F83B2005B5215 /* CAdjHeatOutput.cpp */; }; + 403426D1235F83B2005B5215 /* CBaselineOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 403426C1235F83B2005B5215 /* CBaselineOutput.cpp */; }; + 403426ED235F8E29005B5215 /* CDiscAdjMultizoneDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 403426EC235F8E29005B5215 /* CDiscAdjMultizoneDriver.cpp */; }; + 4040B25F235FBEFD00843C83 /* CDisplacementsInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4040B255235FBEFD00843C83 /* CDisplacementsInterface.cpp */; }; + 4040B260235FBEFD00843C83 /* CFlowTractionInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4040B256235FBEFD00843C83 /* CFlowTractionInterface.cpp */; }; + 4040B261235FBEFD00843C83 /* CDiscAdjFlowTractionInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4040B257235FBEFD00843C83 /* CDiscAdjFlowTractionInterface.cpp */; }; + 4040B262235FBEFD00843C83 /* CMixingPlaneInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4040B258235FBEFD00843C83 /* CMixingPlaneInterface.cpp */; }; + 4040B264235FBEFD00843C83 /* CConjugateHeatInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4040B25A235FBEFD00843C83 /* CConjugateHeatInterface.cpp */; }; + 4040B265235FBEFD00843C83 /* CSlidingInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4040B25B235FBEFD00843C83 /* CSlidingInterface.cpp */; }; + 4040B266235FBEFD00843C83 /* CConservativeVarsInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4040B25C235FBEFD00843C83 /* CConservativeVarsInterface.cpp */; }; + 4040B267235FBEFD00843C83 /* CInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4040B25D235FBEFD00843C83 /* CInterface.cpp */; }; + 4040B278235FBFF200843C83 /* CCSVFileWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4040B26A235FBFF200843C83 /* CCSVFileWriter.cpp */; }; + 4040B279235FBFF200843C83 /* CSurfaceFVMDataSorter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4040B26B235FBFF200843C83 /* CSurfaceFVMDataSorter.cpp */; }; + 4040B27A235FBFF200843C83 /* CParallelFileWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4040B26C235FBFF200843C83 /* CParallelFileWriter.cpp */; }; + 4040B27B235FBFF200843C83 /* CParallelDataSorter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4040B26D235FBFF200843C83 /* CParallelDataSorter.cpp */; }; + 4040B27C235FBFF200843C83 /* CParaviewBinaryFileWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4040B26E235FBFF200843C83 /* CParaviewBinaryFileWriter.cpp */; }; + 4040B27D235FBFF200843C83 /* CFEMDataSorter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4040B26F235FBFF200843C83 /* CFEMDataSorter.cpp */; }; + 4040B27E235FBFF200843C83 /* CSU2BinaryFileWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4040B270235FBFF200843C83 /* CSU2BinaryFileWriter.cpp */; }; + 4040B27F235FBFF200843C83 /* CTecplotBinaryFileWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4040B271235FBFF200843C83 /* CTecplotBinaryFileWriter.cpp */; }; + 4040B280235FBFF200843C83 /* CSU2FileWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4040B272235FBFF200843C83 /* CSU2FileWriter.cpp */; }; + 4040B281235FBFF200843C83 /* CFVMDataSorter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4040B273235FBFF200843C83 /* CFVMDataSorter.cpp */; }; + 4040B282235FBFF200843C83 /* CParaviewFileWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4040B274235FBFF200843C83 /* CParaviewFileWriter.cpp */; }; + 4040B283235FBFF200843C83 /* CSurfaceFEMDataSorter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4040B275235FBFF200843C83 /* CSurfaceFEMDataSorter.cpp */; }; + 4040B284235FBFF200843C83 /* CTecplotFileWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4040B276235FBFF200843C83 /* CTecplotFileWriter.cpp */; }; + 4040B285235FBFF200843C83 /* CSU2MeshFileWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4040B277235FBFF200843C83 /* CSU2MeshFileWriter.cpp */; }; + 405220B4246A626400D9AB4D /* CTurboVertex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 405220AF246A626300D9AB4D /* CTurboVertex.cpp */; }; + 405220B5246A626400D9AB4D /* CVertex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 405220B0246A626300D9AB4D /* CVertex.cpp */; }; + 405220B6246A626400D9AB4D /* CDualGrid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 405220B1246A626300D9AB4D /* CDualGrid.cpp */; }; + 405220B7246A626400D9AB4D /* CPoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 405220B2246A626400D9AB4D /* CPoint.cpp */; }; + 405220B8246A626400D9AB4D /* CEdge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 405220B3246A626400D9AB4D /* CEdge.cpp */; }; + 405220BE246A628000D9AB4D /* CCGNSMeshReaderFVM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 405220B9246A628000D9AB4D /* CCGNSMeshReaderFVM.cpp */; }; + 405220BF246A628000D9AB4D /* CRectangularMeshReaderFVM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 405220BA246A628000D9AB4D /* CRectangularMeshReaderFVM.cpp */; }; + 405220C0246A628000D9AB4D /* CMeshReaderFVM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 405220BB246A628000D9AB4D /* CMeshReaderFVM.cpp */; }; + 405220C1246A628000D9AB4D /* CBoxMeshReaderFVM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 405220BC246A628000D9AB4D /* CBoxMeshReaderFVM.cpp */; }; + 405220C2246A628000D9AB4D /* CSU2ASCIIMeshReaderFVM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 405220BD246A628000D9AB4D /* CSU2ASCIIMeshReaderFVM.cpp */; }; + 405220CE246A629100D9AB4D /* CPyramid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 405220C3246A629000D9AB4D /* CPyramid.cpp */; }; + 405220CF246A629100D9AB4D /* CTriangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 405220C4246A629100D9AB4D /* CTriangle.cpp */; }; + 405220D0246A629100D9AB4D /* CHexahedron.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 405220C5246A629100D9AB4D /* CHexahedron.cpp */; }; + 405220D1246A629100D9AB4D /* CPrimalGridFEM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 405220C6246A629100D9AB4D /* CPrimalGridFEM.cpp */; }; + 405220D2246A629100D9AB4D /* CVertexMPI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 405220C7246A629100D9AB4D /* CVertexMPI.cpp */; }; + 405220D3246A629100D9AB4D /* CPrimalGrid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 405220C8246A629100D9AB4D /* CPrimalGrid.cpp */; }; + 405220D4246A629100D9AB4D /* CTetrahedron.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 405220C9246A629100D9AB4D /* CTetrahedron.cpp */; }; + 405220D5246A629100D9AB4D /* CPrism.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 405220CA246A629100D9AB4D /* CPrism.cpp */; }; + 405220D6246A629100D9AB4D /* CQuadrilateral.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 405220CB246A629100D9AB4D /* CQuadrilateral.cpp */; }; + 405220D7246A629100D9AB4D /* CPrimalGridBoundFEM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 405220CC246A629100D9AB4D /* CPrimalGridBoundFEM.cpp */; }; + 405220D8246A629100D9AB4D /* CLine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 405220CD246A629100D9AB4D /* CLine.cpp */; }; + 4063F8182469E40B00DE870E /* CMultiGridIntegration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F8122469E40A00DE870E /* CMultiGridIntegration.cpp */; }; + 4063F8192469E40B00DE870E /* CSingleGridIntegration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F8132469E40A00DE870E /* CSingleGridIntegration.cpp */; }; + 4063F81A2469E40B00DE870E /* CStructuralIntegration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F8142469E40A00DE870E /* CStructuralIntegration.cpp */; }; + 4063F81B2469E40B00DE870E /* CIntegrationFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F8152469E40A00DE870E /* CIntegrationFactory.cpp */; }; + 4063F81C2469E40B00DE870E /* CIntegration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F8162469E40A00DE870E /* CIntegration.cpp */; }; + 4063F81D2469E40B00DE870E /* CFEM_DG_Integration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F8172469E40A00DE870E /* CFEM_DG_Integration.cpp */; }; + 4063F824246A03AE00DE870E /* CLimiterDetails.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F823246A03AE00DE870E /* CLimiterDetails.cpp */; }; + 4063F83A246A03F800DE870E /* transition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F825246A03F700DE870E /* transition.cpp */; }; + 4063F83B246A03F800DE870E /* turb_convection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F826246A03F700DE870E /* turb_convection.cpp */; }; + 4063F83C246A03F800DE870E /* adj_diffusion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F827246A03F700DE870E /* adj_diffusion.cpp */; }; + 4063F83D246A03F800DE870E /* fvs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F828246A03F700DE870E /* fvs.cpp */; }; + 4063F83E246A03F800DE870E /* heat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F829246A03F700DE870E /* heat.cpp */; }; + 4063F83F246A03F800DE870E /* adj_convection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F82A246A03F700DE870E /* adj_convection.cpp */; }; + 4063F840246A03F800DE870E /* hllc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F82B246A03F700DE870E /* hllc.cpp */; }; + 4063F841246A03F800DE870E /* turb_diffusion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F82C246A03F700DE870E /* turb_diffusion.cpp */; }; + 4063F842246A03F800DE870E /* flow_diffusion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F82D246A03F700DE870E /* flow_diffusion.cpp */; }; + 4063F843246A03F800DE870E /* CNumerics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F82E246A03F700DE870E /* CNumerics.cpp */; }; + 4063F844246A03F800DE870E /* fds.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F82F246A03F700DE870E /* fds.cpp */; }; + 4063F845246A03F800DE870E /* turb_sources.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F830246A03F700DE870E /* turb_sources.cpp */; }; + 4063F846246A03F800DE870E /* template.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F831246A03F700DE870E /* template.cpp */; }; + 4063F847246A03F800DE870E /* nonlinear_models.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F832246A03F700DE870E /* nonlinear_models.cpp */; }; + 4063F848246A03F800DE870E /* cusp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F833246A03F700DE870E /* cusp.cpp */; }; + 4063F849246A03F800DE870E /* radiation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F834246A03F700DE870E /* radiation.cpp */; }; + 4063F84A246A03F800DE870E /* centered.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F835246A03F700DE870E /* centered.cpp */; }; + 4063F84B246A03F800DE870E /* adj_sources.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F836246A03F700DE870E /* adj_sources.cpp */; }; + 4063F84C246A03F800DE870E /* flow_sources.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F837246A03F800DE870E /* flow_sources.cpp */; }; + 4063F84D246A03F800DE870E /* roe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F838246A03F800DE870E /* roe.cpp */; }; + 4063F84E246A03F800DE870E /* ausm_slau.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F839246A03F800DE870E /* ausm_slau.cpp */; }; + 4063F857246A053400DE870E /* CParaviewXMLFileWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F852246A053400DE870E /* CParaviewXMLFileWriter.cpp */; }; + 4063F858246A053400DE870E /* CSTLFileWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F853246A053400DE870E /* CSTLFileWriter.cpp */; }; + 4063F859246A053400DE870E /* COutputFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F854246A053400DE870E /* COutputFactory.cpp */; }; + 4063F85A246A053400DE870E /* CParaviewVTMFileWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F855246A053400DE870E /* CParaviewVTMFileWriter.cpp */; }; + 4063F85B246A053400DE870E /* CWindowingTools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4063F856246A053400DE870E /* CWindowingTools.cpp */; }; + E90B4FD822DFDF94000ED392 /* CMMSIncNSSolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FCB22DFDF92000ED392 /* CMMSIncNSSolution.cpp */; }; + E90B4FD922DFDF94000ED392 /* CMMSNSUnitQuadSolutionWallBC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FCC22DFDF93000ED392 /* CMMSNSUnitQuadSolutionWallBC.cpp */; }; + E90B4FDA22DFDF94000ED392 /* CNSUnitQuadSolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FCD22DFDF93000ED392 /* CNSUnitQuadSolution.cpp */; }; + E90B4FDB22DFDF94000ED392 /* CTGVSolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FCE22DFDF93000ED392 /* CTGVSolution.cpp */; }; + E90B4FDC22DFDF94000ED392 /* CIncTGVSolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FCF22DFDF93000ED392 /* CIncTGVSolution.cpp */; }; + E90B4FDD22DFDF94000ED392 /* CUserDefinedSolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FD022DFDF93000ED392 /* CUserDefinedSolution.cpp */; }; + E90B4FDE22DFDF94000ED392 /* CMMSNSTwoHalfSpheresSolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FD122DFDF93000ED392 /* CMMSNSTwoHalfSpheresSolution.cpp */; }; + E90B4FDF22DFDF94000ED392 /* CInviscidVortexSolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FD222DFDF93000ED392 /* CInviscidVortexSolution.cpp */; }; + E90B4FE022DFDF94000ED392 /* CMMSNSUnitQuadSolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FD322DFDF93000ED392 /* CMMSNSUnitQuadSolution.cpp */; }; + E90B4FE122DFDF94000ED392 /* CMMSIncEulerSolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FD422DFDF93000ED392 /* CMMSIncEulerSolution.cpp */; }; + E90B4FE222DFDF94000ED392 /* CMMSNSTwoHalfCirclesSolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FD522DFDF93000ED392 /* CMMSNSTwoHalfCirclesSolution.cpp */; }; + E90B4FE322DFDF94000ED392 /* CRinglebSolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FD622DFDF93000ED392 /* CRinglebSolution.cpp */; }; + E90B4FE422DFDF94000ED392 /* CVerificationSolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FD722DFDF94000ED392 /* CVerificationSolution.cpp */; }; + E90B4FF822DFDFE4000ED392 /* CVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FE622DFDFE2000ED392 /* CVariable.cpp */; }; + E90B4FF922DFDFE4000ED392 /* CIncEulerVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FE722DFDFE2000ED392 /* CIncEulerVariable.cpp */; }; + E90B4FFA22DFDFE4000ED392 /* CAdjTurbVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FE822DFDFE2000ED392 /* CAdjTurbVariable.cpp */; }; + E90B4FFB22DFDFE4000ED392 /* CAdjNSVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FE922DFDFE2000ED392 /* CAdjNSVariable.cpp */; }; + E90B4FFC22DFDFE4000ED392 /* CDiscAdjVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FEA22DFDFE2000ED392 /* CDiscAdjVariable.cpp */; }; + E90B4FFD22DFDFE4000ED392 /* CDiscAdjFEAVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FEB22DFDFE2000ED392 /* CDiscAdjFEAVariable.cpp */; }; + E90B4FFE22DFDFE4000ED392 /* CAdjEulerVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FEC22DFDFE3000ED392 /* CAdjEulerVariable.cpp */; }; + E90B4FFF22DFDFE4000ED392 /* CIncNSVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FED22DFDFE3000ED392 /* CIncNSVariable.cpp */; }; + E90B500122DFDFE4000ED392 /* CEulerVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FEF22DFDFE3000ED392 /* CEulerVariable.cpp */; }; + E90B500222DFDFE4000ED392 /* CTurbSSTVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FF022DFDFE3000ED392 /* CTurbSSTVariable.cpp */; }; + E90B500322DFDFE4000ED392 /* CBaselineVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FF122DFDFE3000ED392 /* CBaselineVariable.cpp */; }; + E90B500422DFDFE4000ED392 /* CTurbVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FF222DFDFE3000ED392 /* CTurbVariable.cpp */; }; + E90B500522DFDFE4000ED392 /* CTransLMVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FF322DFDFE3000ED392 /* CTransLMVariable.cpp */; }; + E90B500622DFDFE4000ED392 /* CFEAVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FF422DFDFE4000ED392 /* CFEAVariable.cpp */; }; + E90B500722DFDFE4000ED392 /* CNSVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FF522DFDFE4000ED392 /* CNSVariable.cpp */; }; + E90B500822DFDFE4000ED392 /* CFEABoundVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FF622DFDFE4000ED392 /* CFEABoundVariable.cpp */; }; + E90B500922DFDFE4000ED392 /* CTurbSAVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B4FF722DFDFE4000ED392 /* CTurbSAVariable.cpp */; }; + E90B500F22DFE043000ED392 /* CSysVector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B500B22DFE042000ED392 /* CSysVector.cpp */; }; + E90B501022DFE043000ED392 /* CSysMatrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B500C22DFE042000ED392 /* CSysMatrix.cpp */; }; + E90B501122DFE043000ED392 /* CSysSolve_b.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B500D22DFE043000ED392 /* CSysSolve_b.cpp */; }; + E90B501222DFE043000ED392 /* CSysSolve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90B500E22DFE043000ED392 /* CSysSolve.cpp */; }; + E90D35F7203F9C5800A3290D /* fluid_model_inc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E90D35F6203F9C5800A3290D /* fluid_model_inc.cpp */; }; + E941BB941B71D124005C6C06 /* mpi_structure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E941BB911B71D124005C6C06 /* mpi_structure.cpp */; }; + E96766A4237B31E0009FBEE1 /* numerics_direct_scalar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E96766A3237B31E0009FBEE1 /* numerics_direct_scalar.cpp */; }; + E96766A6237B3230009FBEE1 /* CScalarVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E96766A5237B322F009FBEE1 /* CScalarVariable.cpp */; }; + E96766A9237B4EE9009FBEE1 /* CPassiveScalarVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E96766A8237B4EE9009FBEE1 /* CPassiveScalarVariable.cpp */; }; + E96766AD237BB889009FBEE1 /* CScalarSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E96766AB237BB888009FBEE1 /* CScalarSolver.cpp */; }; + E96766AE237BB889009FBEE1 /* CPassiveScalarSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E96766AC237BB889009FBEE1 /* CPassiveScalarSolver.cpp */; }; + E96766BB2380FC45009FBEE1 /* CFlameletVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E96766BA2380FC45009FBEE1 /* CFlameletVariable.cpp */; }; + E96766BD2380FC5D009FBEE1 /* CFlameletSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E96766BC2380FC5D009FBEE1 /* CFlameletSolver.cpp */; }; + E967669F237365CA009FBEE1 /* CMarkerProfileReaderFVM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E967669E237365CA009FBEE1 /* CMarkerProfileReaderFVM.cpp */; }; + E96FAF102189FE9C0046BF5D /* blas_structure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E96FAF0F2189FE9C0046BF5D /* blas_structure.cpp */; }; + E96FAF142189FECA0046BF5D /* graph_coloring_structure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E96FAF112189FECA0046BF5D /* graph_coloring_structure.cpp */; }; + E96FAF152189FECA0046BF5D /* fem_gauss_jacobi_quadrature.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E96FAF122189FECA0046BF5D /* fem_gauss_jacobi_quadrature.cpp */; }; + E96FAF162189FECA0046BF5D /* fem_cgns_elements.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E96FAF132189FECA0046BF5D /* fem_cgns_elements.cpp */; }; + E97C63A6238131D2003336A6 /* CFluidFlamelet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E97C63A5238131D1003336A6 /* CFluidFlamelet.cpp */; }; + E9C8307F2061E60E004417A9 /* fem_geometry_structure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E9C830752061E60E004417A9 /* fem_geometry_structure.cpp */; }; + E9C830802061E60E004417A9 /* fem_integration_rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E9C830762061E60E004417A9 /* fem_integration_rules.cpp */; }; + E9C830812061E60E004417A9 /* fem_standard_element.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E9C830772061E60E004417A9 /* fem_standard_element.cpp */; }; + E9C830822061E60E004417A9 /* fem_wall_distance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E9C830782061E60E004417A9 /* fem_wall_distance.cpp */; }; + E9C830832061E60E004417A9 /* fem_work_estimate_metis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E9C830792061E60E004417A9 /* fem_work_estimate_metis.cpp */; }; + E9C830852061E60E004417A9 /* geometry_structure_fem_part.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E9C8307B2061E60E004417A9 /* geometry_structure_fem_part.cpp */; }; +======= + 354901D12537E0050095B597 /* CMirror.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901672537E0050095B597 /* CMirror.cpp */; }; + 354901D22537E0050095B597 /* CInterpolatorFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901682537E0050095B597 /* CInterpolatorFactory.cpp */; }; + 354901D32537E0050095B597 /* CSlidingMesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901692537E0050095B597 /* CSlidingMesh.cpp */; }; + 354901D42537E0050095B597 /* CIsoparametric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549016B2537E0050095B597 /* CIsoparametric.cpp */; }; + 354901D52537E0050095B597 /* CRadialBasisFunction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549016C2537E0050095B597 /* CRadialBasisFunction.cpp */; }; + 354901D62537E0050095B597 /* CNearestNeighbor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549016D2537E0050095B597 /* CNearestNeighbor.cpp */; }; + 354901D72537E0050095B597 /* CInterpolator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549016E2537E0050095B597 /* CInterpolator.cpp */; }; + 354901D82537E0050095B597 /* CSymmetricMatrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901702537E0050095B597 /* CSymmetricMatrix.cpp */; }; + 354901D92537E0050095B597 /* CInviscidVortexSolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901732537E0050095B597 /* CInviscidVortexSolution.cpp */; }; + 354901DA2537E0050095B597 /* CMMSIncNSSolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901742537E0050095B597 /* CMMSIncNSSolution.cpp */; }; + 354901DB2537E0050095B597 /* CMMSIncEulerSolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901752537E0050095B597 /* CMMSIncEulerSolution.cpp */; }; + 354901DD2537E0050095B597 /* CTGVSolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549017E2537E0050095B597 /* CTGVSolution.cpp */; }; + 354901DE2537E0050095B597 /* CMMSNSTwoHalfSpheresSolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549017F2537E0050095B597 /* CMMSNSTwoHalfSpheresSolution.cpp */; }; + 354901E02537E0050095B597 /* CNSUnitQuadSolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901822537E0050095B597 /* CNSUnitQuadSolution.cpp */; }; + 354901E12537E0050095B597 /* CRinglebSolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901832537E0050095B597 /* CRinglebSolution.cpp */; }; + 354901E22537E0050095B597 /* CIncTGVSolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901842537E0050095B597 /* CIncTGVSolution.cpp */; }; + 354901E32537E0050095B597 /* CMMSNSUnitQuadSolutionWallBC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901852537E0050095B597 /* CMMSNSUnitQuadSolutionWallBC.cpp */; }; + 354901E42537E0050095B597 /* CVerificationSolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901862537E0050095B597 /* CVerificationSolution.cpp */; }; + 354901E52537E0050095B597 /* CMMSNSUnitQuadSolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901872537E0050095B597 /* CMMSNSUnitQuadSolution.cpp */; }; + 354901E62537E0050095B597 /* CMMSNSTwoHalfCirclesSolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901882537E0050095B597 /* CMMSNSTwoHalfCirclesSolution.cpp */; }; + 354901E72537E0050095B597 /* CUserDefinedSolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901892537E0050095B597 /* CUserDefinedSolution.cpp */; }; + 354901E82537E0050095B597 /* CLinearPartitioner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549018A2537E0050095B597 /* CLinearPartitioner.cpp */; }; + 354901E92537E0050095B597 /* C1DInterpolation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549018B2537E0050095B597 /* C1DInterpolation.cpp */; }; + 354901EA2537E0050095B597 /* printing_toolbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549018C2537E0050095B597 /* printing_toolbox.cpp */; }; + 354901EC2537E0050095B597 /* graph_coloring_structure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549018E2537E0050095B597 /* graph_coloring_structure.cpp */; }; + 354901F32537E0050095B597 /* wall_model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901962537E0050095B597 /* wall_model.cpp */; }; + 354901F42537E0050095B597 /* CPrism.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901992537E0050095B597 /* CPrism.cpp */; }; + 354901F52537E0050095B597 /* CTriangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549019A2537E0050095B597 /* CTriangle.cpp */; }; + 354901F62537E0050095B597 /* CPyramid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549019B2537E0050095B597 /* CPyramid.cpp */; }; + 354901F72537E0050095B597 /* CHexahedron.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549019C2537E0050095B597 /* CHexahedron.cpp */; }; + 354901F82537E0050095B597 /* CQuadrilateral.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549019D2537E0050095B597 /* CQuadrilateral.cpp */; }; + 354901F92537E0050095B597 /* CPrimalGrid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549019E2537E0050095B597 /* CPrimalGrid.cpp */; }; + 354901FA2537E0050095B597 /* CTetrahedron.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549019F2537E0050095B597 /* CTetrahedron.cpp */; }; + 354901FB2537E0050095B597 /* CPrimalGridBoundFEM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901A12537E0050095B597 /* CPrimalGridBoundFEM.cpp */; }; + 354901FC2537E0050095B597 /* CLine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901A22537E0050095B597 /* CLine.cpp */; }; + 354901FD2537E0050095B597 /* CPrimalGridFEM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901A32537E0050095B597 /* CPrimalGridFEM.cpp */; }; + 354901FE2537E0050095B597 /* CVertexMPI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901A42537E0050095B597 /* CVertexMPI.cpp */; }; + 354901FF2537E0050095B597 /* CMultiGridGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901A52537E0050095B597 /* CMultiGridGeometry.cpp */; }; + 354902002537E0050095B597 /* CEdge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901A72537E0050095B597 /* CEdge.cpp */; }; + 354902012537E0050095B597 /* CDualGrid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901A82537E0050095B597 /* CDualGrid.cpp */; }; + 354902022537E0050095B597 /* CVertex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901AA2537E0050095B597 /* CVertex.cpp */; }; + 354902032537E0050095B597 /* CPoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901AB2537E0050095B597 /* CPoint.cpp */; }; + 354902042537E0050095B597 /* CTurboVertex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901AC2537E0050095B597 /* CTurboVertex.cpp */; }; + 354902052537E0050095B597 /* CSU2ASCIIMeshReaderFVM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901AE2537E0050095B597 /* CSU2ASCIIMeshReaderFVM.cpp */; }; + 354902062537E0050095B597 /* CRectangularMeshReaderFVM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901AF2537E0050095B597 /* CRectangularMeshReaderFVM.cpp */; }; + 354902072537E0050095B597 /* CBoxMeshReaderFVM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901B02537E0050095B597 /* CBoxMeshReaderFVM.cpp */; }; + 354902082537E0050095B597 /* CCGNSMeshReaderFVM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901B22537E0050095B597 /* CCGNSMeshReaderFVM.cpp */; }; + 354902092537E0050095B597 /* CMeshReaderFVM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901B32537E0050095B597 /* CMeshReaderFVM.cpp */; }; + 3549020A2537E0050095B597 /* CPhysicalGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901B42537E0050095B597 /* CPhysicalGeometry.cpp */; }; + 3549020B2537E0050095B597 /* CTETRA1.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901B72537E0050095B597 /* CTETRA1.cpp */; }; + 3549020C2537E0050095B597 /* CQUAD4.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901B82537E0050095B597 /* CQUAD4.cpp */; }; + 3549020D2537E0050095B597 /* CPRISM6.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901B92537E0050095B597 /* CPRISM6.cpp */; }; + 3549020E2537E0050095B597 /* CTRIA1.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901BA2537E0050095B597 /* CTRIA1.cpp */; }; + 3549020F2537E0050095B597 /* CPYRAM5.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901BB2537E0050095B597 /* CPYRAM5.cpp */; }; + 354902102537E0050095B597 /* CHEXA8.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901BD2537E0050095B597 /* CHEXA8.cpp */; }; + 354902112537E0050095B597 /* CElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901BE2537E0050095B597 /* CElement.cpp */; }; + 354902122537E0050095B597 /* CDummyGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901BF2537E0050095B597 /* CDummyGeometry.cpp */; }; + 354902132537E0050095B597 /* CGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901C02537E0050095B597 /* CGeometry.cpp */; }; + 354902142537E0050095B597 /* CSysSolve_b.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901C22537E0050095B597 /* CSysSolve_b.cpp */; }; + 354902152537E0050095B597 /* CSysMatrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901C32537E0050095B597 /* CSysMatrix.cpp */; }; + 354902162537E0050095B597 /* CSysVector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901C42537E0050095B597 /* CSysVector.cpp */; }; + 354902172537E0050095B597 /* CSysSolve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901C62537E0050095B597 /* CSysSolve.cpp */; }; + 354902182537E0050095B597 /* CPastixWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901C72537E0050095B597 /* CPastixWrapper.cpp */; }; + 354902192537E0050095B597 /* CConfig.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354901C82537E0050095B597 /* CConfig.cpp */; }; + 3549036A2537E0280095B597 /* CMarkerProfileReaderFVM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902C92537E0280095B597 /* CMarkerProfileReaderFVM.cpp */; }; + 3549036B2537E0280095B597 /* python_wrapper_structure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902CA2537E0280095B597 /* python_wrapper_structure.cpp */; }; + 3549036F2537E0280095B597 /* CSinglezoneDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902CF2537E0280095B597 /* CSinglezoneDriver.cpp */; }; + 354903702537E0280095B597 /* CDiscAdjSinglezoneDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902D02537E0280095B597 /* CDiscAdjSinglezoneDriver.cpp */; }; + 354903712537E0280095B597 /* CDiscAdjMultizoneDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902D12537E0280095B597 /* CDiscAdjMultizoneDriver.cpp */; }; + 354903722537E0280095B597 /* CDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902D22537E0280095B597 /* CDriver.cpp */; }; + 354903732537E0280095B597 /* CDummyDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902D32537E0280095B597 /* CDummyDriver.cpp */; }; + 354903742537E0280095B597 /* CMultizoneDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902D42537E0280095B597 /* CMultizoneDriver.cpp */; }; + 354903762537E0280095B597 /* CLimiterDetails.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902D72537E0280095B597 /* CLimiterDetails.cpp */; }; + 354903772537E0280095B597 /* CFEM_DG_Integration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902D92537E0280095B597 /* CFEM_DG_Integration.cpp */; }; + 354903782537E0280095B597 /* CIntegration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902DA2537E0280095B597 /* CIntegration.cpp */; }; + 354903792537E0280095B597 /* CStructuralIntegration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902DB2537E0280095B597 /* CStructuralIntegration.cpp */; }; + 3549037A2537E0280095B597 /* CSingleGridIntegration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902DC2537E0280095B597 /* CSingleGridIntegration.cpp */; }; + 3549037B2537E0280095B597 /* CMultiGridIntegration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902DD2537E0280095B597 /* CMultiGridIntegration.cpp */; }; + 3549037C2537E0280095B597 /* CIntegrationFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902DE2537E0280095B597 /* CIntegrationFactory.cpp */; }; + 3549037F2537E0280095B597 /* COutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902E22537E0280095B597 /* COutput.cpp */; }; + 354903802537E0280095B597 /* COutputFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902E32537E0280095B597 /* COutputFactory.cpp */; }; + 354903812537E0280095B597 /* CWindowingTools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902E52537E0280095B597 /* CWindowingTools.cpp */; }; + 354903822537E0280095B597 /* CAdjElasticityOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902E62537E0280095B597 /* CAdjElasticityOutput.cpp */; }; + 354903832537E0280095B597 /* CElasticityOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902E72537E0280095B597 /* CElasticityOutput.cpp */; }; + 354903842537E0280095B597 /* CMeshOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902E82537E0280095B597 /* CMeshOutput.cpp */; }; + 354903852537E0280095B597 /* CMultizoneOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902E92537E0280095B597 /* CMultizoneOutput.cpp */; }; + 354903862537E0280095B597 /* CFlowOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902EA2537E0280095B597 /* CFlowOutput.cpp */; }; + 354903872537E0280095B597 /* output_structure_legacy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902EB2537E0280095B597 /* output_structure_legacy.cpp */; }; + 354903882537E0280095B597 /* CCSVFileWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902ED2537E0280095B597 /* CCSVFileWriter.cpp */; }; + 354903892537E0290095B597 /* CSurfaceFVMDataSorter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902EE2537E0280095B597 /* CSurfaceFVMDataSorter.cpp */; }; + 3549038A2537E0290095B597 /* CParallelFileWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902EF2537E0280095B597 /* CParallelFileWriter.cpp */; }; + 3549038B2537E0290095B597 /* CSTLFileWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902F02537E0280095B597 /* CSTLFileWriter.cpp */; }; + 3549038C2537E0290095B597 /* CParallelDataSorter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902F12537E0280095B597 /* CParallelDataSorter.cpp */; }; + 3549038D2537E0290095B597 /* CParaviewBinaryFileWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902F22537E0280095B597 /* CParaviewBinaryFileWriter.cpp */; }; + 3549038E2537E0290095B597 /* CFEMDataSorter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902F32537E0280095B597 /* CFEMDataSorter.cpp */; }; + 3549038F2537E0290095B597 /* CParaviewXMLFileWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902F42537E0280095B597 /* CParaviewXMLFileWriter.cpp */; }; + 354903902537E0290095B597 /* CParaviewVTMFileWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902F52537E0280095B597 /* CParaviewVTMFileWriter.cpp */; }; + 354903912537E0290095B597 /* CSU2BinaryFileWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902F62537E0280095B597 /* CSU2BinaryFileWriter.cpp */; }; + 354903922537E0290095B597 /* CTecplotBinaryFileWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902F72537E0280095B597 /* CTecplotBinaryFileWriter.cpp */; }; + 354903932537E0290095B597 /* CSU2FileWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902F82537E0280095B597 /* CSU2FileWriter.cpp */; }; + 354903942537E0290095B597 /* CFVMDataSorter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902F92537E0280095B597 /* CFVMDataSorter.cpp */; }; + 354903952537E0290095B597 /* CParaviewFileWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902FA2537E0280095B597 /* CParaviewFileWriter.cpp */; }; + 354903962537E0290095B597 /* CSurfaceFEMDataSorter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902FB2537E0280095B597 /* CSurfaceFEMDataSorter.cpp */; }; + 354903972537E0290095B597 /* CTecplotFileWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902FC2537E0280095B597 /* CTecplotFileWriter.cpp */; }; + 354903982537E0290095B597 /* CSU2MeshFileWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902FD2537E0280095B597 /* CSU2MeshFileWriter.cpp */; }; + 354903992537E0290095B597 /* CAdjFlowIncOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902FE2537E0280095B597 /* CAdjFlowIncOutput.cpp */; }; + 3549039A2537E0290095B597 /* CFlowCompOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354902FF2537E0280095B597 /* CFlowCompOutput.cpp */; }; + 3549039B2537E0290095B597 /* CBaselineOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903002537E0280095B597 /* CBaselineOutput.cpp */; }; + 3549039C2537E0290095B597 /* output_physics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903012537E0280095B597 /* output_physics.cpp */; }; + 3549039D2537E0290095B597 /* CFlowIncOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903022537E0280095B597 /* CFlowIncOutput.cpp */; }; + 3549039E2537E0290095B597 /* CAdjHeatOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903032537E0280095B597 /* CAdjHeatOutput.cpp */; }; + 3549039F2537E0290095B597 /* CFlowCompFEMOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903042537E0280095B597 /* CFlowCompFEMOutput.cpp */; }; + 354903A02537E0290095B597 /* CAdjFlowCompOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903052537E0280095B597 /* CAdjFlowCompOutput.cpp */; }; + 354903A12537E0290095B597 /* CHeatOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903062537E0280095B597 /* CHeatOutput.cpp */; }; + 354903A22537E0290095B597 /* CIncEulerSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903082537E0280095B597 /* CIncEulerSolver.cpp */; }; + 354903A32537E0290095B597 /* CTurbSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903092537E0280095B597 /* CTurbSolver.cpp */; }; + 354903A42537E0290095B597 /* CAdjEulerSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549030A2537E0280095B597 /* CAdjEulerSolver.cpp */; }; + 354903A52537E0290095B597 /* CTurbSSTSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549030B2537E0280095B597 /* CTurbSSTSolver.cpp */; }; + 354903A62537E0290095B597 /* CDiscAdjFEASolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549030C2537E0280095B597 /* CDiscAdjFEASolver.cpp */; }; + 354903A72537E0290095B597 /* CRadP1Solver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549030D2537E0280095B597 /* CRadP1Solver.cpp */; }; + 354903A82537E0290095B597 /* CFEASolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549030E2537E0280095B597 /* CFEASolver.cpp */; }; + 354903A92537E0290095B597 /* CHeatSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549030F2537E0280095B597 /* CHeatSolver.cpp */; }; + 354903AA2537E0290095B597 /* CTemplateSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903102537E0280095B597 /* CTemplateSolver.cpp */; }; + 354903AB2537E0290095B597 /* CTransLMSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903112537E0280095B597 /* CTransLMSolver.cpp */; }; + 354903AC2537E0290095B597 /* CAdjTurbSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903122537E0280095B597 /* CAdjTurbSolver.cpp */; }; + 354903AD2537E0290095B597 /* CIncNSSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903132537E0280095B597 /* CIncNSSolver.cpp */; }; + 354903AE2537E0290095B597 /* CSolverFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903142537E0280095B597 /* CSolverFactory.cpp */; }; + 354903AF2537E0290095B597 /* CBaselineSolver_FEM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903152537E0280095B597 /* CBaselineSolver_FEM.cpp */; }; + 354903B02537E0290095B597 /* CSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903162537E0280095B597 /* CSolver.cpp */; }; + 354903B12537E0290095B597 /* CMeshSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903172537E0280095B597 /* CMeshSolver.cpp */; }; + 354903B22537E0290095B597 /* CDiscAdjMeshSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903182537E0280095B597 /* CDiscAdjMeshSolver.cpp */; }; + 354903B32537E0290095B597 /* CTurbSASolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903192537E0280095B597 /* CTurbSASolver.cpp */; }; + 354903B42537E0290095B597 /* CAdjNSSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549031A2537E0280095B597 /* CAdjNSSolver.cpp */; }; + 354903B52537E0290095B597 /* CNSSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549031B2537E0280095B597 /* CNSSolver.cpp */; }; + 354903B62537E0290095B597 /* CDiscAdjSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549031C2537E0280095B597 /* CDiscAdjSolver.cpp */; }; + 354903B72537E0290095B597 /* CEulerSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549031D2537E0280095B597 /* CEulerSolver.cpp */; }; + 354903B82537E0290095B597 /* CFEM_DG_EulerSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549031E2537E0280095B597 /* CFEM_DG_EulerSolver.cpp */; }; + 354903B92537E0290095B597 /* CFEM_DG_NSSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549031F2537E0280095B597 /* CFEM_DG_NSSolver.cpp */; }; + 354903BA2537E0290095B597 /* CBaselineSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903202537E0280095B597 /* CBaselineSolver.cpp */; }; + 354903BB2537E0290095B597 /* CRadSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903212537E0280095B597 /* CRadSolver.cpp */; }; + 354903BC2537E0290095B597 /* SU2_CFD.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903222537E0280095B597 /* SU2_CFD.cpp */; }; + 354903BD2537E0290095B597 /* template.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903252537E0280095B597 /* template.cpp */; }; + 354903BE2537E0290095B597 /* CFEANonlinearElasticity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903272537E0280095B597 /* CFEANonlinearElasticity.cpp */; }; + 354903BF2537E0290095B597 /* CFEALinearElasticity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903282537E0280095B597 /* CFEALinearElasticity.cpp */; }; + 354903C02537E0290095B597 /* CFEAElasticity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903292537E0280095B597 /* CFEAElasticity.cpp */; }; + 354903C12537E0290095B597 /* nonlinear_models.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549032A2537E0280095B597 /* nonlinear_models.cpp */; }; + 354903C22537E0290095B597 /* transition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549032B2537E0280095B597 /* transition.cpp */; }; + 354903C32537E0290095B597 /* radiation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549032C2537E0280095B597 /* radiation.cpp */; }; + 354903C42537E0290095B597 /* turb_convection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549032E2537E0280095B597 /* turb_convection.cpp */; }; + 354903C52537E0290095B597 /* turb_sources.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549032F2537E0280095B597 /* turb_sources.cpp */; }; + 354903C62537E0290095B597 /* turb_diffusion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903302537E0280095B597 /* turb_diffusion.cpp */; }; + 354903C72537E0290095B597 /* heat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903312537E0280095B597 /* heat.cpp */; }; + 354903C82537E0290095B597 /* adj_diffusion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903332537E0280095B597 /* adj_diffusion.cpp */; }; + 354903C92537E0290095B597 /* adj_sources.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903342537E0280095B597 /* adj_sources.cpp */; }; + 354903CA2537E0290095B597 /* adj_convection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903352537E0280095B597 /* adj_convection.cpp */; }; + 354903CB2537E0290095B597 /* CNumerics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903362537E0280095B597 /* CNumerics.cpp */; }; + 354903CC2537E0290095B597 /* flow_diffusion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903382537E0280095B597 /* flow_diffusion.cpp */; }; + 354903CD2537E0290095B597 /* ausm_slau.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549033A2537E0280095B597 /* ausm_slau.cpp */; }; + 354903CE2537E0290095B597 /* cusp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549033B2537E0280095B597 /* cusp.cpp */; }; + 354903CF2537E0290095B597 /* centered.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549033C2537E0280095B597 /* centered.cpp */; }; + 354903D02537E0290095B597 /* roe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549033D2537E0280095B597 /* roe.cpp */; }; + 354903D12537E0290095B597 /* fds.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549033E2537E0280095B597 /* fds.cpp */; }; + 354903D22537E0290095B597 /* fvs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549033F2537E0280095B597 /* fvs.cpp */; }; + 354903D32537E0290095B597 /* hllc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903402537E0280095B597 /* hllc.cpp */; }; + 354903D42537E0290095B597 /* flow_sources.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903412537E0280095B597 /* flow_sources.cpp */; }; + 354903D52537E0290095B597 /* CTurbSSTVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903432537E0280095B597 /* CTurbSSTVariable.cpp */; }; + 354903D62537E0290095B597 /* CMeshElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903442537E0280095B597 /* CMeshElement.cpp */; }; + 354903D72537E0290095B597 /* CDiscAdjVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903452537E0280095B597 /* CDiscAdjVariable.cpp */; }; + 354903D82537E0290095B597 /* CIncEulerVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903462537E0280095B597 /* CIncEulerVariable.cpp */; }; + 354903D92537E0290095B597 /* CVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903472537E0280095B597 /* CVariable.cpp */; }; + 354903DA2537E0290095B597 /* CMeshBoundVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903482537E0280095B597 /* CMeshBoundVariable.cpp */; }; + 354903DB2537E0290095B597 /* CDiscAdjFEABoundVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903492537E0280095B597 /* CDiscAdjFEABoundVariable.cpp */; }; + 354903DD2537E0290095B597 /* CBaselineVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549034B2537E0280095B597 /* CBaselineVariable.cpp */; }; + 354903DE2537E0290095B597 /* CAdjTurbVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549034C2537E0280095B597 /* CAdjTurbVariable.cpp */; }; + 354903DF2537E0290095B597 /* CAdjEulerVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549034D2537E0280095B597 /* CAdjEulerVariable.cpp */; }; + 354903E02537E0290095B597 /* CEulerVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549034E2537E0280095B597 /* CEulerVariable.cpp */; }; + 354903E12537E0290095B597 /* CMeshVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549034F2537E0280095B597 /* CMeshVariable.cpp */; }; + 354903E22537E0290095B597 /* CDiscAdjMeshBoundVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903502537E0280095B597 /* CDiscAdjMeshBoundVariable.cpp */; }; + 354903E32537E0290095B597 /* CIncNSVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903512537E0280095B597 /* CIncNSVariable.cpp */; }; + 354903E42537E0290095B597 /* CTurbVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903522537E0280095B597 /* CTurbVariable.cpp */; }; + 354903E52537E0290095B597 /* CAdjNSVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903532537E0280095B597 /* CAdjNSVariable.cpp */; }; + 354903E62537E0290095B597 /* CTransLMVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903542537E0280095B597 /* CTransLMVariable.cpp */; }; + 354903E72537E0290095B597 /* CFEABoundVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903552537E0280095B597 /* CFEABoundVariable.cpp */; }; + 354903E82537E0290095B597 /* CNSVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903562537E0280095B597 /* CNSVariable.cpp */; }; + 354903E92537E0290095B597 /* CHeatVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903572537E0280095B597 /* CHeatVariable.cpp */; }; + 354903EA2537E0290095B597 /* CTurbSAVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903582537E0280095B597 /* CTurbSAVariable.cpp */; }; + 354903EB2537E0290095B597 /* CRadP1Variable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903592537E0280095B597 /* CRadP1Variable.cpp */; }; + 354903EC2537E0290095B597 /* CRadVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549035A2537E0280095B597 /* CRadVariable.cpp */; }; + 354903ED2537E0290095B597 /* CFEAVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549035B2537E0280095B597 /* CFEAVariable.cpp */; }; + 354903EE2537E0290095B597 /* definition_structure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3549035C2537E0280095B597 /* definition_structure.cpp */; }; + 354903F02537E0290095B597 /* CConjugateHeatInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903602537E0280095B597 /* CConjugateHeatInterface.cpp */; }; + 354903F12537E0290095B597 /* CInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903612537E0280095B597 /* CInterface.cpp */; }; + 354903F22537E0290095B597 /* CConservativeVarsInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903632537E0280095B597 /* CConservativeVarsInterface.cpp */; }; + 354903F32537E0290095B597 /* CSlidingInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903642537E0280095B597 /* CSlidingInterface.cpp */; }; + 354903F42537E0290095B597 /* CMixingPlaneInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903652537E0280095B597 /* CMixingPlaneInterface.cpp */; }; + 354903F52537E0290095B597 /* CDisplacementsInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903672537E0280095B597 /* CDisplacementsInterface.cpp */; }; + 354903F62537E0290095B597 /* CDiscAdjFlowTractionInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903682537E0280095B597 /* CDiscAdjFlowTractionInterface.cpp */; }; + 354903F72537E0290095B597 /* CFlowTractionInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 354903692537E0280095B597 /* CFlowTractionInterface.cpp */; }; + 357BEE48256D589B00423D14 /* CNEMOEulerSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEE46256D589B00423D14 /* CNEMOEulerSolver.cpp */; }; + 357BEE49256D589B00423D14 /* CNEMONSSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEE47256D589B00423D14 /* CNEMONSSolver.cpp */; }; + 357BEE53256D592C00423D14 /* CPengRobinson.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEE4C256D592C00423D14 /* CPengRobinson.cpp */; }; + 357BEE54256D592C00423D14 /* CSU2TCLib.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEE4D256D592C00423D14 /* CSU2TCLib.cpp */; }; + 357BEE55256D592C00423D14 /* CIdealGas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEE4E256D592C00423D14 /* CIdealGas.cpp */; }; + 357BEE56256D592C00423D14 /* CFluidModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEE4F256D592C00423D14 /* CFluidModel.cpp */; }; + 357BEE57256D592C00423D14 /* CNEMOGas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEE50256D592C00423D14 /* CNEMOGas.cpp */; }; + 357BEE58256D592C00423D14 /* CVanDerWaalsGas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEE51256D592C00423D14 /* CVanDerWaalsGas.cpp */; }; + 357BEE59256D592C00423D14 /* CMutationTCLib.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEE52256D592C00423D14 /* CMutationTCLib.cpp */; }; + 357BEE6B256D59AA00423D14 /* CADTElemClass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEE5B256D59AA00423D14 /* CADTElemClass.cpp */; }; + 357BEE6C256D59AA00423D14 /* CADTPointsOnlyClass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEE5D256D59AA00423D14 /* CADTPointsOnlyClass.cpp */; }; + 357BEE6D256D59AA00423D14 /* CADTBaseClass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEE5E256D59AA00423D14 /* CADTBaseClass.cpp */; }; + 357BEE6E256D59AA00423D14 /* ad_structure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEE60256D59AA00423D14 /* ad_structure.cpp */; }; + 357BEE6F256D59AA00423D14 /* fem_standard_element.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEE62256D59AA00423D14 /* fem_standard_element.cpp */; }; + 357BEE70256D59AA00423D14 /* geometry_structure_fem_part.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEE63256D59AA00423D14 /* geometry_structure_fem_part.cpp */; }; + 357BEE71256D59AA00423D14 /* fem_gauss_jacobi_quadrature.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEE64256D59AA00423D14 /* fem_gauss_jacobi_quadrature.cpp */; }; + 357BEE72256D59AA00423D14 /* fem_work_estimate_metis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEE65256D59AA00423D14 /* fem_work_estimate_metis.cpp */; }; + 357BEE73256D59AA00423D14 /* fem_integration_rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEE66256D59AA00423D14 /* fem_integration_rules.cpp */; }; + 357BEE74256D59AA00423D14 /* fem_geometry_structure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEE68256D59AA00423D14 /* fem_geometry_structure.cpp */; }; + 357BEE75256D59AA00423D14 /* fem_cgns_elements.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEE69256D59AA00423D14 /* fem_cgns_elements.cpp */; }; + 357BEE76256D59AA00423D14 /* fem_wall_distance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEE6A256D59AA00423D14 /* fem_wall_distance.cpp */; }; + 357BEEC8256D70B900423D14 /* CNumericsSIMD.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEEBC256D70B900423D14 /* CNumericsSIMD.cpp */; }; + 357BEED6256D711C00423D14 /* CAdjFluidIteration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEECB256D711C00423D14 /* CAdjFluidIteration.cpp */; }; + 357BEED7256D711C00423D14 /* CIterationFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEECC256D711C00423D14 /* CIterationFactory.cpp */; }; + 357BEED8256D711C00423D14 /* CHeatIteration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEECD256D711C00423D14 /* CHeatIteration.cpp */; }; + 357BEED9256D711C00423D14 /* CTurboIteration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEECE256D711C00423D14 /* CTurboIteration.cpp */; }; + 357BEEDA256D711C00423D14 /* CDiscAdjFluidIteration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEECF256D711C00423D14 /* CDiscAdjFluidIteration.cpp */; }; + 357BEEDB256D711C00423D14 /* CFEMFluidIteration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEED0256D711C00423D14 /* CFEMFluidIteration.cpp */; }; + 357BEEDC256D711C00423D14 /* CFluidIteration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEED1256D711C00423D14 /* CFluidIteration.cpp */; }; + 357BEEDD256D711C00423D14 /* CDiscAdjHeatIteration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEED2256D711C00423D14 /* CDiscAdjHeatIteration.cpp */; }; + 357BEEDE256D711C00423D14 /* CIteration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEED3256D711C00423D14 /* CIteration.cpp */; }; + 357BEEDF256D711C00423D14 /* CDiscAdjFEAIteration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEED4256D711C00423D14 /* CDiscAdjFEAIteration.cpp */; }; + 357BEEE0256D711C00423D14 /* CFEAIteration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEED5256D711C00423D14 /* CFEAIteration.cpp */; }; + 357BEEE2256D712600423D14 /* CNEMOCompOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEEE1256D712600423D14 /* CNEMOCompOutput.cpp */; }; + 357BEEE5256D716400423D14 /* CNEMOEulerVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEEE3256D716400423D14 /* CNEMOEulerVariable.cpp */; }; + 357BEEE6256D716400423D14 /* CNEMONSVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEEE4256D716400423D14 /* CNEMONSVariable.cpp */; }; + 357BEEF4256D71E100423D14 /* lax.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEEEB256D71E100423D14 /* lax.cpp */; }; + 357BEEF5256D71E100423D14 /* ausmpwplus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEEEC256D71E100423D14 /* ausmpwplus.cpp */; }; + 357BEEF6256D71E100423D14 /* roe.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEEED256D71E100423D14 /* roe.cpp */; }; + 357BEEF7256D71E100423D14 /* ausmplusup2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEEEE256D71E100423D14 /* ausmplusup2.cpp */; }; + 357BEEF8256D71E100423D14 /* ausm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEEEF256D71E100423D14 /* ausm.cpp */; }; + 357BEEF9256D71E100423D14 /* msw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEEF0256D71E100423D14 /* msw.cpp */; }; + 357BEEFA256D71E100423D14 /* NEMO_sources.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEEF1256D71E100423D14 /* NEMO_sources.cpp */; }; + 357BEEFB256D71E100423D14 /* NEMO_diffusion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEEF2256D71E100423D14 /* NEMO_diffusion.cpp */; }; + 357BEEFC256D71E100423D14 /* CNEMONumerics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEEF3256D71E100423D14 /* CNEMONumerics.cpp */; }; + 357BEF11256D722500423D14 /* CSurfaceMovement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEF09256D722500423D14 /* CSurfaceMovement.cpp */; }; + 357BEF12256D722500423D14 /* CVolumetricMovement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEF0A256D722500423D14 /* CVolumetricMovement.cpp */; }; + 357BEF13256D722500423D14 /* CFreeFormDefBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEF0B256D722500423D14 /* CFreeFormDefBox.cpp */; }; + 357BEF14256D722500423D14 /* CBezierBlending.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEF0C256D722500423D14 /* CBezierBlending.cpp */; }; + 357BEF15256D722500423D14 /* CFreeFormBlending.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEF0E256D722500423D14 /* CFreeFormBlending.cpp */; }; + 357BEF16256D722500423D14 /* CGridMovement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEF0F256D722500423D14 /* CGridMovement.cpp */; }; + 357BEF17256D722500423D14 /* CBSplineBlending.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 357BEF10256D722500423D14 /* CBSplineBlending.cpp */; }; + 35D6300525998751008DF28B /* CMultiGridQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 35D6300425998751008DF28B /* CMultiGridQueue.cpp */; }; + 35D63007259987B8008DF28B /* blas_structure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 35D63006259987B7008DF28B /* blas_structure.cpp */; }; + 35D6301625998877008DF28B /* mpi_structure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 35D6301325998877008DF28B /* mpi_structure.cpp */; }; + 35D6301825999185008DF28B /* CSquareMatrixCM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 35D6301725999185008DF28B /* CSquareMatrixCM.cpp */; }; +<<<<<<< HEAD +>>>>>>> a2a10c663267396b0b044cbc31ce877b8d71df85 +======= + 40C6D17D271F8053009B5531 /* CScalarVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40C6D17B271F8053009B5531 /* CScalarVariable.cpp */; }; + 40C6D17E271F8053009B5531 /* CFlowVariable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40C6D17C271F8053009B5531 /* CFlowVariable.cpp */; }; + 40C6D183271F80CC009B5531 /* omp_structure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40C6D182271F80CC009B5531 /* omp_structure.cpp */; }; + 40C6D18B271F818F009B5531 /* CFVMOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40C6D18A271F818F009B5531 /* CFVMOutput.cpp */; }; + 40C6D18D271F81AD009B5531 /* CNewtonIntegration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40C6D18C271F81AD009B5531 /* CNewtonIntegration.cpp */; }; + 40C6D193271F822F009B5531 /* CCGNSFileWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40C6D192271F822E009B5531 /* CCGNSFileWriter.cpp */; }; + 40C6D19D271F840E009B5531 /* scalar_sources.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40C6D19A271F840E009B5531 /* scalar_sources.cpp */; }; + 40C6D19E271F840E009B5531 /* scalar_diffusion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40C6D19B271F840E009B5531 /* scalar_diffusion.cpp */; }; + 40C6D19F271F840E009B5531 /* scalar_convection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40C6D19C271F840E009B5531 /* scalar_convection.cpp */; }; +>>>>>>> origin/develop + E9D6EE572316522800618E36 /* (null) in Sources */ = {isa = PBXBuildFile; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 8DD76F690486A84900D96B5E /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 1; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0541ABEE1370F5A6002D668B /* SU2_CFD */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = SU2_CFD; sourceTree = BUILT_PRODUCTS_DIR; }; +<<<<<<< HEAD + 05E6DAA217EB603F00FA1F7E /* grid_adaptation_structure.inl */ = {isa = PBXFileReference; lastKnownFileType = text; lineEnding = 0; name = grid_adaptation_structure.inl; path = ../../Common/include/grid_adaptation_structure.inl; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + 05E6DAA317EB603F00FA1F7E /* grid_movement_structure.inl */ = {isa = PBXFileReference; lastKnownFileType = text; lineEnding = 0; name = grid_movement_structure.inl; path = ../../Common/include/grid_movement_structure.inl; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + 05E6DAC817EB608000FA1F7E /* grid_adaptation_structure.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = grid_adaptation_structure.hpp; path = ../../Common/include/grid_adaptation_structure.hpp; sourceTree = ""; }; + 05E6DAC917EB608000FA1F7E /* grid_movement_structure.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = grid_movement_structure.hpp; path = ../../Common/include/grid_movement_structure.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + 05E6DACC17EB608000FA1F7E /* option_structure.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = option_structure.hpp; path = ../../Common/include/option_structure.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + 05E6DB8C17EB61E600FA1F7E /* grid_adaptation_structure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = grid_adaptation_structure.cpp; path = ../../Common/src/grid_adaptation_structure.cpp; sourceTree = ""; }; + 05E6DB8D17EB61E600FA1F7E /* grid_movement_structure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = grid_movement_structure.cpp; path = ../../Common/src/grid_movement_structure.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + 05E6DBB417EB627400FA1F7E /* definition_structure.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = definition_structure.hpp; path = ../../SU2_CFD/include/definition_structure.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + 05E6DBB617EB627400FA1F7E /* iteration_structure.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = iteration_structure.hpp; path = ../../SU2_CFD/include/iteration_structure.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + 05E6DBBA17EB627400FA1F7E /* SU2_CFD.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = SU2_CFD.hpp; path = ../../SU2_CFD/include/SU2_CFD.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + 05E6DBBC17EB62A000FA1F7E /* definition_structure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = definition_structure.cpp; path = ../../SU2_CFD/src/definition_structure.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + 05E6DBC017EB62A100FA1F7E /* iteration_structure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = iteration_structure.cpp; path = ../../SU2_CFD/src/iteration_structure.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + 05E6DBEC17EB62A100FA1F7E /* SU2_CFD.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = SU2_CFD.cpp; path = ../../SU2_CFD/src/SU2_CFD.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + 05F108961978D2AE00F2F288 /* fluid_model_pig.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = fluid_model_pig.cpp; path = ../../SU2_CFD/src/fluid_model_pig.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + 05F108971978D2AE00F2F288 /* fluid_model_ppr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = fluid_model_ppr.cpp; path = ../../SU2_CFD/src/fluid_model_ppr.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + 05F108981978D2AE00F2F288 /* fluid_model_pvdw.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = fluid_model_pvdw.cpp; path = ../../SU2_CFD/src/fluid_model_pvdw.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + 05F108991978D2AE00F2F288 /* fluid_model.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = fluid_model.cpp; path = ../../SU2_CFD/src/fluid_model.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + 05F1089E1978D2CE00F2F288 /* fluid_model.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = fluid_model.hpp; path = ../../SU2_CFD/include/fluid_model.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + 05F1089F1978D2CE00F2F288 /* transport_model.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = transport_model.hpp; path = ../../SU2_CFD/include/transport_model.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + 05F108A01978D2D700F2F288 /* fluid_model.inl */ = {isa = PBXFileReference; lastKnownFileType = text; lineEnding = 0; name = fluid_model.inl; path = ../../SU2_CFD/include/fluid_model.inl; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + 05F108A11978D2D700F2F288 /* transport_model.inl */ = {isa = PBXFileReference; lastKnownFileType = text; lineEnding = 0; name = transport_model.inl; path = ../../SU2_CFD/include/transport_model.inl; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + 05F108A31978D2F200F2F288 /* transport_model.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = transport_model.cpp; path = ../../SU2_CFD/src/transport_model.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + 05F8F2672008A1C7000FEA01 /* python_wrapper_structure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = python_wrapper_structure.cpp; path = ../../SU2_CFD/src/python_wrapper_structure.cpp; sourceTree = ""; }; + 355D2C9D2172BDE100C10535 /* sgs_model.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = sgs_model.inl; path = ../../SU2_CFD/include/sgs_model.inl; sourceTree = ""; }; + 355D2C9E2172BDE100C10535 /* sgs_model.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = sgs_model.hpp; path = ../../SU2_CFD/include/sgs_model.hpp; sourceTree = ""; }; + 356E2E0D2399979F0039E9B5 /* CFEANonlinearElasticity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CFEANonlinearElasticity.cpp; path = ../../SU2_CFD/src/numerics/elasticity/CFEANonlinearElasticity.cpp; sourceTree = ""; }; + 356E2E0E2399979F0039E9B5 /* CFEALinearElasticity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CFEALinearElasticity.cpp; path = ../../SU2_CFD/src/numerics/elasticity/CFEALinearElasticity.cpp; sourceTree = ""; }; + 356E2E102399979F0039E9B5 /* CFEAElasticity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CFEAElasticity.cpp; path = ../../SU2_CFD/src/numerics/elasticity/CFEAElasticity.cpp; sourceTree = ""; }; + 356E2E1D23999AEA0039E9B5 /* CGeometry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CGeometry.cpp; path = ../../Common/src/geometry/CGeometry.cpp; sourceTree = ""; }; + 356E2E1E23999AEA0039E9B5 /* CPhysicalGeometry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CPhysicalGeometry.cpp; path = ../../Common/src/geometry/CPhysicalGeometry.cpp; sourceTree = ""; }; + 356E2E1F23999AEA0039E9B5 /* CDummyGeometry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CDummyGeometry.cpp; path = ../../Common/src/geometry/CDummyGeometry.cpp; sourceTree = ""; }; + 356E2E2023999AEA0039E9B5 /* CMultiGridGeometry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CMultiGridGeometry.cpp; path = ../../Common/src/geometry/CMultiGridGeometry.cpp; sourceTree = ""; }; + 356E2E2623999B140039E9B5 /* CElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CElement.cpp; path = ../../Common/src/geometry/elements/CElement.cpp; sourceTree = ""; }; + 356E2E2723999B140039E9B5 /* CTRIA1.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CTRIA1.cpp; path = ../../Common/src/geometry/elements/CTRIA1.cpp; sourceTree = ""; }; + 356E2E2823999B140039E9B5 /* CQUAD4.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CQUAD4.cpp; path = ../../Common/src/geometry/elements/CQUAD4.cpp; sourceTree = ""; }; + 356E2E2923999B140039E9B5 /* CHEXA8.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CHEXA8.cpp; path = ../../Common/src/geometry/elements/CHEXA8.cpp; sourceTree = ""; }; + 356E2E2A23999B140039E9B5 /* CTETRA1.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CTETRA1.cpp; path = ../../Common/src/geometry/elements/CTETRA1.cpp; sourceTree = ""; }; + 356E2E2B23999B140039E9B5 /* CPRISM6.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CPRISM6.cpp; path = ../../Common/src/geometry/elements/CPRISM6.cpp; sourceTree = ""; }; + 356E2E2C23999B140039E9B5 /* CPYRAM5.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CPYRAM5.cpp; path = ../../Common/src/geometry/elements/CPYRAM5.cpp; sourceTree = ""; }; + 3599C5D12121FAC9003AAF05 /* wall_model.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = wall_model.cpp; path = ../../Common/src/wall_model.cpp; sourceTree = ""; }; + 3599C5D52121FAF4003AAF05 /* wall_model.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = wall_model.hpp; path = ../../Common/include/wall_model.hpp; sourceTree = ""; }; + 3599C5D62121FAF4003AAF05 /* wall_model.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = wall_model.inl; path = ../../Common/include/wall_model.inl; sourceTree = ""; }; + 400CEC2D21FA81A10019B790 /* printing_toolbox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = printing_toolbox.cpp; path = ../../Common/src/toolboxes/printing_toolbox.cpp; sourceTree = ""; }; + 400CEC2F21FA81B60019B790 /* printing_toolbox.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = printing_toolbox.hpp; path = ../../Common/include/toolboxes/printing_toolbox.hpp; sourceTree = ""; }; + 40303E2E246A05EB00CD7789 /* CHeatSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CHeatSolver.cpp; path = ../../SU2_CFD/src/solvers/CHeatSolver.cpp; sourceTree = ""; }; + 40303E2F246A05EB00CD7789 /* CAdjEulerSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CAdjEulerSolver.cpp; path = ../../SU2_CFD/src/solvers/CAdjEulerSolver.cpp; sourceTree = ""; }; + 40303E30246A05EB00CD7789 /* CIncNSSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIncNSSolver.cpp; path = ../../SU2_CFD/src/solvers/CIncNSSolver.cpp; sourceTree = ""; }; + 40303E31246A05EB00CD7789 /* CDiscAdjFEASolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CDiscAdjFEASolver.cpp; path = ../../SU2_CFD/src/solvers/CDiscAdjFEASolver.cpp; sourceTree = ""; }; + 40303E32246A05EB00CD7789 /* CNSSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CNSSolver.cpp; path = ../../SU2_CFD/src/solvers/CNSSolver.cpp; sourceTree = ""; }; + 40303E33246A05EC00CD7789 /* CTemplateSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CTemplateSolver.cpp; path = ../../SU2_CFD/src/solvers/CTemplateSolver.cpp; sourceTree = ""; }; + 40303E34246A05EC00CD7789 /* CDiscAdjSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CDiscAdjSolver.cpp; path = ../../SU2_CFD/src/solvers/CDiscAdjSolver.cpp; sourceTree = ""; }; + 40303E35246A05EC00CD7789 /* CAdjTurbSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CAdjTurbSolver.cpp; path = ../../SU2_CFD/src/solvers/CAdjTurbSolver.cpp; sourceTree = ""; }; + 40303E36246A05EC00CD7789 /* CTransLMSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CTransLMSolver.cpp; path = ../../SU2_CFD/src/solvers/CTransLMSolver.cpp; sourceTree = ""; }; + 40303E37246A05EC00CD7789 /* CTurbSASolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CTurbSASolver.cpp; path = ../../SU2_CFD/src/solvers/CTurbSASolver.cpp; sourceTree = ""; }; + 40303E38246A05EC00CD7789 /* CTurbSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CTurbSolver.cpp; path = ../../SU2_CFD/src/solvers/CTurbSolver.cpp; sourceTree = ""; }; + 40303E39246A05EC00CD7789 /* CIncEulerSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIncEulerSolver.cpp; path = ../../SU2_CFD/src/solvers/CIncEulerSolver.cpp; sourceTree = ""; }; + 40303E3A246A05EC00CD7789 /* CRadP1Solver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CRadP1Solver.cpp; path = ../../SU2_CFD/src/solvers/CRadP1Solver.cpp; sourceTree = ""; }; + 40303E3B246A05EC00CD7789 /* CBaselineSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CBaselineSolver.cpp; path = ../../SU2_CFD/src/solvers/CBaselineSolver.cpp; sourceTree = ""; }; + 40303E3C246A05EC00CD7789 /* CRadSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CRadSolver.cpp; path = ../../SU2_CFD/src/solvers/CRadSolver.cpp; sourceTree = ""; }; + 40303E3D246A05EC00CD7789 /* CEulerSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CEulerSolver.cpp; path = ../../SU2_CFD/src/solvers/CEulerSolver.cpp; sourceTree = ""; }; + 40303E3E246A05EC00CD7789 /* CBaselineSolver_FEM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CBaselineSolver_FEM.cpp; path = ../../SU2_CFD/src/solvers/CBaselineSolver_FEM.cpp; sourceTree = ""; }; + 40303E3F246A05EC00CD7789 /* CAdjNSSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CAdjNSSolver.cpp; path = ../../SU2_CFD/src/solvers/CAdjNSSolver.cpp; sourceTree = ""; }; + 40303E40246A05EC00CD7789 /* CTurbSSTSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CTurbSSTSolver.cpp; path = ../../SU2_CFD/src/solvers/CTurbSSTSolver.cpp; sourceTree = ""; }; + 40303E41246A05EC00CD7789 /* CFEASolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CFEASolver.cpp; path = ../../SU2_CFD/src/solvers/CFEASolver.cpp; sourceTree = ""; }; + 40303E42246A05EC00CD7789 /* CFEM_DG_NSSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CFEM_DG_NSSolver.cpp; path = ../../SU2_CFD/src/solvers/CFEM_DG_NSSolver.cpp; sourceTree = ""; }; + 40303E43246A05EC00CD7789 /* CFEM_DG_EulerSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CFEM_DG_EulerSolver.cpp; path = ../../SU2_CFD/src/solvers/CFEM_DG_EulerSolver.cpp; sourceTree = ""; }; + 40303E44246A05EC00CD7789 /* CSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CSolver.cpp; path = ../../SU2_CFD/src/solvers/CSolver.cpp; sourceTree = ""; }; + 40303E45246A05EC00CD7789 /* CSolverFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CSolverFactory.cpp; path = ../../SU2_CFD/src/solvers/CSolverFactory.cpp; sourceTree = ""; }; + 40303E5E246A064900CD7789 /* CHeatVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CHeatVariable.cpp; path = ../../SU2_CFD/src/variables/CHeatVariable.cpp; sourceTree = ""; }; + 40303E5F246A064900CD7789 /* CRadP1Variable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CRadP1Variable.cpp; path = ../../SU2_CFD/src/variables/CRadP1Variable.cpp; sourceTree = ""; }; + 40303E60246A064900CD7789 /* CRadVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CRadVariable.cpp; path = ../../SU2_CFD/src/variables/CRadVariable.cpp; sourceTree = ""; }; + 40303E65246A079A00CD7789 /* computeGradientsGreenGauss.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = computeGradientsGreenGauss.hpp; path = ../../SU2_CFD/include/gradients/computeGradientsGreenGauss.hpp; sourceTree = ""; }; + 40303E66246A079A00CD7789 /* computeGradientsLeastSquares.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = computeGradientsLeastSquares.hpp; path = ../../SU2_CFD/include/gradients/computeGradientsLeastSquares.hpp; sourceTree = ""; }; + 40303E68246A07D300CD7789 /* CIntegrationFactory.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CIntegrationFactory.hpp; path = ../../SU2_CFD/include/integration/CIntegrationFactory.hpp; sourceTree = ""; }; + 40303E69246A07D300CD7789 /* CMultiGridIntegration.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CMultiGridIntegration.hpp; path = ../../SU2_CFD/include/integration/CMultiGridIntegration.hpp; sourceTree = ""; }; + 40303E6A246A07D300CD7789 /* CSingleGridIntegration.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CSingleGridIntegration.hpp; path = ../../SU2_CFD/include/integration/CSingleGridIntegration.hpp; sourceTree = ""; }; + 40303E6B246A07D300CD7789 /* CStructuralIntegration.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CStructuralIntegration.hpp; path = ../../SU2_CFD/include/integration/CStructuralIntegration.hpp; sourceTree = ""; }; + 40303E6C246A07D300CD7789 /* CIntegration.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CIntegration.hpp; path = ../../SU2_CFD/include/integration/CIntegration.hpp; sourceTree = ""; }; + 40303E6D246A07D300CD7789 /* CFEM_DG_Integration.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CFEM_DG_Integration.hpp; path = ../../SU2_CFD/include/integration/CFEM_DG_Integration.hpp; sourceTree = ""; }; + 40303E6E246A580700CD7789 /* CLimiterDetails.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CLimiterDetails.hpp; path = ../../SU2_CFD/include/limiters/CLimiterDetails.hpp; sourceTree = ""; }; + 40303E6F246A580700CD7789 /* computeLimiters_impl.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = computeLimiters_impl.hpp; path = ../../SU2_CFD/include/limiters/computeLimiters_impl.hpp; sourceTree = ""; }; + 40303E70246A580700CD7789 /* computeLimiters.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = computeLimiters.hpp; path = ../../SU2_CFD/include/limiters/computeLimiters.hpp; sourceTree = ""; }; + 40303E76246A589B00CD7789 /* heat.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = heat.hpp; path = ../../SU2_CFD/include/numerics/heat.hpp; sourceTree = ""; }; + 40303E77246A589B00CD7789 /* fds.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = fds.hpp; path = ../../SU2_CFD/include/numerics/flow/convection/fds.hpp; sourceTree = ""; }; + 40303E78246A589B00CD7789 /* hllc.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = hllc.hpp; path = ../../SU2_CFD/include/numerics/flow/convection/hllc.hpp; sourceTree = ""; }; + 40303E79246A589B00CD7789 /* roe.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = roe.hpp; path = ../../SU2_CFD/include/numerics/flow/convection/roe.hpp; sourceTree = ""; }; + 40303E7A246A589B00CD7789 /* template.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = template.hpp; path = ../../SU2_CFD/include/numerics/template.hpp; sourceTree = ""; }; + 40303E7B246A589B00CD7789 /* turb_sources.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = turb_sources.hpp; path = ../../SU2_CFD/include/numerics/turbulent/turb_sources.hpp; sourceTree = ""; }; + 40303E7C246A589B00CD7789 /* adj_sources.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = adj_sources.hpp; path = ../../SU2_CFD/include/numerics/continuous_adjoint/adj_sources.hpp; sourceTree = ""; }; + 40303E7D246A589B00CD7789 /* nonlinear_models.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = nonlinear_models.hpp; path = ../../SU2_CFD/include/numerics/elasticity/nonlinear_models.hpp; sourceTree = ""; }; + 40303E7E246A589B00CD7789 /* turb_convection.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = turb_convection.hpp; path = ../../SU2_CFD/include/numerics/turbulent/turb_convection.hpp; sourceTree = ""; }; + 40303E7F246A589C00CD7789 /* centered.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = centered.hpp; path = ../../SU2_CFD/include/numerics/flow/convection/centered.hpp; sourceTree = ""; }; + 40303E80246A589C00CD7789 /* adj_diffusion.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = adj_diffusion.hpp; path = ../../SU2_CFD/include/numerics/continuous_adjoint/adj_diffusion.hpp; sourceTree = ""; }; + 40303E81246A589C00CD7789 /* transition.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = transition.hpp; path = ../../SU2_CFD/include/numerics/transition.hpp; sourceTree = ""; }; + 40303E82246A589C00CD7789 /* CNumerics.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CNumerics.hpp; path = ../../SU2_CFD/include/numerics/CNumerics.hpp; sourceTree = ""; }; + 40303E83246A589C00CD7789 /* flow_diffusion.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = flow_diffusion.hpp; path = ../../SU2_CFD/include/numerics/flow/flow_diffusion.hpp; sourceTree = ""; }; + 40303E84246A589C00CD7789 /* cusp.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = cusp.hpp; path = ../../SU2_CFD/include/numerics/flow/convection/cusp.hpp; sourceTree = ""; }; + 40303E85246A589C00CD7789 /* radiation.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = radiation.hpp; path = ../../SU2_CFD/include/numerics/radiation.hpp; sourceTree = ""; }; + 40303E86246A589C00CD7789 /* flow_sources.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = flow_sources.hpp; path = ../../SU2_CFD/include/numerics/flow/flow_sources.hpp; sourceTree = ""; }; + 40303E87246A589C00CD7789 /* CFEANonlinearElasticity.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CFEANonlinearElasticity.hpp; path = ../../SU2_CFD/include/numerics/elasticity/CFEANonlinearElasticity.hpp; sourceTree = ""; }; + 40303E88246A589C00CD7789 /* CFEALinearElasticity.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CFEALinearElasticity.hpp; path = ../../SU2_CFD/include/numerics/elasticity/CFEALinearElasticity.hpp; sourceTree = ""; }; + 40303E89246A589C00CD7789 /* turb_diffusion.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = turb_diffusion.hpp; path = ../../SU2_CFD/include/numerics/turbulent/turb_diffusion.hpp; sourceTree = ""; }; + 40303E8A246A589C00CD7789 /* CFEAElasticity.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CFEAElasticity.hpp; path = ../../SU2_CFD/include/numerics/elasticity/CFEAElasticity.hpp; sourceTree = ""; }; + 40303E8B246A589C00CD7789 /* adj_convection.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = adj_convection.hpp; path = ../../SU2_CFD/include/numerics/continuous_adjoint/adj_convection.hpp; sourceTree = ""; }; + 40303E8C246A589C00CD7789 /* ausm_slau.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ausm_slau.hpp; path = ../../SU2_CFD/include/numerics/flow/convection/ausm_slau.hpp; sourceTree = ""; }; + 40303E8D246A589C00CD7789 /* fvs.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = fvs.hpp; path = ../../SU2_CFD/include/numerics/flow/convection/fvs.hpp; sourceTree = ""; }; + 40303E8E246A5A4900CD7789 /* CParaviewVTMFileWriter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CParaviewVTMFileWriter.hpp; sourceTree = ""; }; + 40303E8F246A5A4900CD7789 /* CSTLFileWriter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSTLFileWriter.hpp; sourceTree = ""; }; + 40303E90246A5A4900CD7789 /* COutputFactory.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = COutputFactory.hpp; path = ../../SU2_CFD/include/output/COutputFactory.hpp; sourceTree = ""; }; + 40303E91246A5A4900CD7789 /* CParaviewXMLFileWriter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CParaviewXMLFileWriter.hpp; sourceTree = ""; }; + 40303E92246A5A4900CD7789 /* CWindowingTools.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CWindowingTools.hpp; path = ../../SU2_CFD/include/output/tools/CWindowingTools.hpp; sourceTree = ""; }; + 40303E94246A5BA700CD7789 /* CTurbSSTSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CTurbSSTSolver.hpp; path = ../../SU2_CFD/include/solvers/CTurbSSTSolver.hpp; sourceTree = ""; }; + 40303E95246A5BA700CD7789 /* CDiscAdjSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CDiscAdjSolver.hpp; path = ../../SU2_CFD/include/solvers/CDiscAdjSolver.hpp; sourceTree = ""; }; + 40303E96246A5BA700CD7789 /* CRadP1Solver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CRadP1Solver.hpp; path = ../../SU2_CFD/include/solvers/CRadP1Solver.hpp; sourceTree = ""; }; + 40303E97246A5BA700CD7789 /* CSolverFactory.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CSolverFactory.hpp; path = ../../SU2_CFD/include/solvers/CSolverFactory.hpp; sourceTree = ""; }; + 40303E98246A5BA700CD7789 /* CTransLMSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CTransLMSolver.hpp; path = ../../SU2_CFD/include/solvers/CTransLMSolver.hpp; sourceTree = ""; }; + 40303E99246A5BA700CD7789 /* CBaselineSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CBaselineSolver.hpp; path = ../../SU2_CFD/include/solvers/CBaselineSolver.hpp; sourceTree = ""; }; + 40303E9A246A5BA700CD7789 /* CTurbSASolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CTurbSASolver.hpp; path = ../../SU2_CFD/include/solvers/CTurbSASolver.hpp; sourceTree = ""; }; + 40303E9B246A5BA700CD7789 /* CEulerSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CEulerSolver.hpp; path = ../../SU2_CFD/include/solvers/CEulerSolver.hpp; sourceTree = ""; }; + 40303E9C246A5BA700CD7789 /* CFEM_DG_NSSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CFEM_DG_NSSolver.hpp; path = ../../SU2_CFD/include/solvers/CFEM_DG_NSSolver.hpp; sourceTree = ""; }; + 40303E9D246A5BA700CD7789 /* CAdjEulerSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CAdjEulerSolver.hpp; path = ../../SU2_CFD/include/solvers/CAdjEulerSolver.hpp; sourceTree = ""; }; + 40303E9E246A5BA700CD7789 /* CFEASolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CFEASolver.hpp; path = ../../SU2_CFD/include/solvers/CFEASolver.hpp; sourceTree = ""; }; + 40303E9F246A5BA700CD7789 /* CHeatSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CHeatSolver.hpp; path = ../../SU2_CFD/include/solvers/CHeatSolver.hpp; sourceTree = ""; }; + 40303EA0246A5BA700CD7789 /* CSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CSolver.hpp; path = ../../SU2_CFD/include/solvers/CSolver.hpp; sourceTree = ""; }; + 40303EA1246A5BA700CD7789 /* CRadSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CRadSolver.hpp; path = ../../SU2_CFD/include/solvers/CRadSolver.hpp; sourceTree = ""; }; + 40303EA2246A5BA700CD7789 /* CFEM_DG_EulerSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CFEM_DG_EulerSolver.hpp; path = ../../SU2_CFD/include/solvers/CFEM_DG_EulerSolver.hpp; sourceTree = ""; }; + 40303EA3246A5BA700CD7789 /* CBaselineSolver_FEM.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CBaselineSolver_FEM.hpp; path = ../../SU2_CFD/include/solvers/CBaselineSolver_FEM.hpp; sourceTree = ""; }; + 40303EA4246A5BA700CD7789 /* CTurbSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CTurbSolver.hpp; path = ../../SU2_CFD/include/solvers/CTurbSolver.hpp; sourceTree = ""; }; + 40303EA5246A5BA700CD7789 /* CAdjTurbSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CAdjTurbSolver.hpp; path = ../../SU2_CFD/include/solvers/CAdjTurbSolver.hpp; sourceTree = ""; }; + 40303EA6246A5BA700CD7789 /* CIncEulerSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CIncEulerSolver.hpp; path = ../../SU2_CFD/include/solvers/CIncEulerSolver.hpp; sourceTree = ""; }; + 40303EA7246A5BA700CD7789 /* CAdjNSSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CAdjNSSolver.hpp; path = ../../SU2_CFD/include/solvers/CAdjNSSolver.hpp; sourceTree = ""; }; + 40303EA8246A5BA700CD7789 /* CIncNSSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CIncNSSolver.hpp; path = ../../SU2_CFD/include/solvers/CIncNSSolver.hpp; sourceTree = ""; }; + 40303EA9246A5BA700CD7789 /* CDiscAdjFEASolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CDiscAdjFEASolver.hpp; path = ../../SU2_CFD/include/solvers/CDiscAdjFEASolver.hpp; sourceTree = ""; }; + 40303EAA246A5BA700CD7789 /* CTemplateSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CTemplateSolver.hpp; path = ../../SU2_CFD/include/solvers/CTemplateSolver.hpp; sourceTree = ""; }; + 40303EAB246A5BA700CD7789 /* CNSSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CNSSolver.hpp; path = ../../SU2_CFD/include/solvers/CNSSolver.hpp; sourceTree = ""; }; + 40303EAC246A5BFC00CD7789 /* CRadP1Variable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CRadP1Variable.hpp; path = ../../SU2_CFD/include/variables/CRadP1Variable.hpp; sourceTree = ""; }; + 40303EAD246A5BFC00CD7789 /* CRadVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CRadVariable.hpp; path = ../../SU2_CFD/include/variables/CRadVariable.hpp; sourceTree = ""; }; + 40303EAE246A5BFC00CD7789 /* CHeatVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CHeatVariable.hpp; path = ../../SU2_CFD/include/variables/CHeatVariable.hpp; sourceTree = ""; }; + 40303EAF246A5CC000CD7789 /* CConfig.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CConfig.cpp; path = ../../Common/src/CConfig.cpp; sourceTree = ""; }; + 40303EB1246A5CEC00CD7789 /* CMMSNSTwoHalfCirclesSolution.mw */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = CMMSNSTwoHalfCirclesSolution.mw; path = ../../Common/src/toolboxes/MMS/CreateMMSSourceTerms/CMMSNSTwoHalfCirclesSolution.mw; sourceTree = ""; }; + 40303EB2246A5CEC00CD7789 /* CMMSNSTwoHalfSpheresSolution.mw */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = CMMSNSTwoHalfSpheresSolution.mw; path = ../../Common/src/toolboxes/MMS/CreateMMSSourceTerms/CMMSNSTwoHalfSpheresSolution.mw; sourceTree = ""; }; + 40303EB3246A5CEC00CD7789 /* CMMSIncEulerSolution.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; name = CMMSIncEulerSolution.py; path = ../../Common/src/toolboxes/MMS/CreateMMSSourceTerms/CMMSIncEulerSolution.py; sourceTree = ""; }; + 40303EB4246A5CEC00CD7789 /* CMMSNSUnitQuadSolution.mw */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = CMMSNSUnitQuadSolution.mw; path = ../../Common/src/toolboxes/MMS/CreateMMSSourceTerms/CMMSNSUnitQuadSolution.mw; sourceTree = ""; }; + 40303EB5246A5CEC00CD7789 /* CMMSIncNSSolution.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; name = CMMSIncNSSolution.py; path = ../../Common/src/toolboxes/MMS/CreateMMSSourceTerms/CMMSIncNSSolution.py; sourceTree = ""; }; + 40303EB6246A5CEC00CD7789 /* CMMSNSUnitQuadSolutionWallBC.mw */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = CMMSNSUnitQuadSolutionWallBC.mw; path = ../../Common/src/toolboxes/MMS/CreateMMSSourceTerms/CMMSNSUnitQuadSolutionWallBC.mw; sourceTree = ""; }; + 40303EB7246A5D2700CD7789 /* C1DInterpolation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = C1DInterpolation.cpp; path = ../../Common/src/toolboxes/C1DInterpolation.cpp; sourceTree = ""; }; + 40303EB8246A5D2700CD7789 /* CSymmetricMatrix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CSymmetricMatrix.cpp; path = ../../Common/src/toolboxes/CSymmetricMatrix.cpp; sourceTree = ""; }; + 40303EBB246A5D4800CD7789 /* CPastixWrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CPastixWrapper.cpp; path = ../../Common/src/linear_algebra/CPastixWrapper.cpp; sourceTree = ""; }; + 40303EBE246A5D9200CD7789 /* CInterpolator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CInterpolator.cpp; path = ../../Common/src/interface_interpolation/CInterpolator.cpp; sourceTree = ""; }; + 40303EBF246A5D9200CD7789 /* CNearestNeighbor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CNearestNeighbor.cpp; path = ../../Common/src/interface_interpolation/CNearestNeighbor.cpp; sourceTree = ""; }; + 40303EC0246A5D9300CD7789 /* CMirror.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CMirror.cpp; path = ../../Common/src/interface_interpolation/CMirror.cpp; sourceTree = ""; }; + 40303EC1246A5D9300CD7789 /* CIsoparametric.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIsoparametric.cpp; path = ../../Common/src/interface_interpolation/CIsoparametric.cpp; sourceTree = ""; }; + 40303EC2246A5D9300CD7789 /* CSlidingMesh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CSlidingMesh.cpp; path = ../../Common/src/interface_interpolation/CSlidingMesh.cpp; sourceTree = ""; }; + 40303EC3246A5D9300CD7789 /* CRadialBasisFunction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CRadialBasisFunction.cpp; path = ../../Common/src/interface_interpolation/CRadialBasisFunction.cpp; sourceTree = ""; }; + 40303EC4246A5D9300CD7789 /* CInterpolatorFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CInterpolatorFactory.cpp; path = ../../Common/src/interface_interpolation/CInterpolatorFactory.cpp; sourceTree = ""; }; + 40303ECC246A5DBF00CD7789 /* omp_structure.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = omp_structure.hpp; path = ../../Common/include/omp_structure.hpp; sourceTree = ""; }; + 40303ECD246A5DBF00CD7789 /* CConfig.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CConfig.hpp; path = ../../Common/include/CConfig.hpp; sourceTree = ""; }; + 40303ECE246A5DBF00CD7789 /* option_structure.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = option_structure.inl; path = ../../Common/include/option_structure.inl; sourceTree = ""; }; + 40303ECF246A5DBF00CD7789 /* geometry_structure_fem_part.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = geometry_structure_fem_part.hpp; path = ../../Common/include/geometry_structure_fem_part.hpp; sourceTree = ""; }; + 40303ED1246A5E5500CD7789 /* CNearestNeighbor.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CNearestNeighbor.hpp; path = ../../Common/include/interface_interpolation/CNearestNeighbor.hpp; sourceTree = ""; }; + 40303ED2246A5E5500CD7789 /* CInterpolator.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CInterpolator.hpp; path = ../../Common/include/interface_interpolation/CInterpolator.hpp; sourceTree = ""; }; + 40303ED3246A5E5500CD7789 /* CRadialBasisFunction.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CRadialBasisFunction.hpp; path = ../../Common/include/interface_interpolation/CRadialBasisFunction.hpp; sourceTree = ""; }; + 40303ED4246A5E5500CD7789 /* CIsoparametric.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CIsoparametric.hpp; path = ../../Common/include/interface_interpolation/CIsoparametric.hpp; sourceTree = ""; }; + 40303ED5246A5E5500CD7789 /* CMirror.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CMirror.hpp; path = ../../Common/include/interface_interpolation/CMirror.hpp; sourceTree = ""; }; + 40303ED6246A5E5500CD7789 /* CSlidingMesh.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CSlidingMesh.hpp; path = ../../Common/include/interface_interpolation/CSlidingMesh.hpp; sourceTree = ""; }; + 40303ED7246A5E5500CD7789 /* CInterpolatorFactory.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CInterpolatorFactory.hpp; path = ../../Common/include/interface_interpolation/CInterpolatorFactory.hpp; sourceTree = ""; }; + 40303ED8246A5E6400CD7789 /* CPastixWrapper.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CPastixWrapper.hpp; path = ../../Common/include/linear_algebra/CPastixWrapper.hpp; sourceTree = ""; }; + 40303EDB246A5F6700CD7789 /* geometry_toolbox.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = geometry_toolbox.hpp; path = ../../Common/include/toolboxes/geometry_toolbox.hpp; sourceTree = ""; }; + 40303EDC246A5F6700CD7789 /* graph_toolbox.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = graph_toolbox.hpp; path = ../../Common/include/toolboxes/graph_toolbox.hpp; sourceTree = ""; }; + 40303EEB246A5F6700CD7789 /* CFastFindAndEraseQueue.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CFastFindAndEraseQueue.hpp; path = ../../Common/include/toolboxes/CFastFindAndEraseQueue.hpp; sourceTree = ""; }; + 40303EEC246A5F6800CD7789 /* CSymmetricMatrix.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CSymmetricMatrix.hpp; path = ../../Common/include/toolboxes/CSymmetricMatrix.hpp; sourceTree = ""; }; + 40303EED246A5F6800CD7789 /* C1DInterpolation.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = C1DInterpolation.hpp; path = ../../Common/include/toolboxes/C1DInterpolation.hpp; sourceTree = ""; }; + 40303EEE246A5F6800CD7789 /* CVertexMap.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CVertexMap.hpp; path = ../../Common/include/toolboxes/CVertexMap.hpp; sourceTree = ""; }; + 40303EEF246A5F6800CD7789 /* C2DContainer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = C2DContainer.hpp; path = ../../Common/include/toolboxes/C2DContainer.hpp; sourceTree = ""; }; + 40303EF0246A5F6800CD7789 /* allocation_toolbox.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = allocation_toolbox.hpp; path = ../../Common/include/toolboxes/allocation_toolbox.hpp; sourceTree = ""; }; + 40303EF1246A5FF400CD7789 /* CMultiGridGeometry.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CMultiGridGeometry.hpp; path = ../../Common/include/geometry/CMultiGridGeometry.hpp; sourceTree = ""; }; + 40303EF2246A5FF400CD7789 /* CGeometry.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CGeometry.hpp; path = ../../Common/include/geometry/CGeometry.hpp; sourceTree = ""; }; + 40303EF3246A5FF400CD7789 /* CPhysicalGeometry.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CPhysicalGeometry.hpp; path = ../../Common/include/geometry/CPhysicalGeometry.hpp; sourceTree = ""; }; + 40303EF4246A5FF400CD7789 /* CDummyGeometry.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CDummyGeometry.hpp; path = ../../Common/include/geometry/CDummyGeometry.hpp; sourceTree = ""; }; + 40303EFA246A609B00CD7789 /* CVertex.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CVertex.hpp; path = ../../Common/include/geometry/dual_grid/CVertex.hpp; sourceTree = ""; }; + 40303EFB246A609B00CD7789 /* CTurboVertex.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CTurboVertex.hpp; path = ../../Common/include/geometry/dual_grid/CTurboVertex.hpp; sourceTree = ""; }; + 40303EFC246A609B00CD7789 /* CPoint.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CPoint.hpp; path = ../../Common/include/geometry/dual_grid/CPoint.hpp; sourceTree = ""; }; + 40303EFD246A609B00CD7789 /* CEdge.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CEdge.hpp; path = ../../Common/include/geometry/dual_grid/CEdge.hpp; sourceTree = ""; }; + 40303EFE246A609B00CD7789 /* CDualGrid.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CDualGrid.hpp; path = ../../Common/include/geometry/dual_grid/CDualGrid.hpp; sourceTree = ""; }; + 40303EFF246A60A900CD7789 /* CElementProperty.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CElementProperty.hpp; path = ../../Common/include/geometry/elements/CElementProperty.hpp; sourceTree = ""; }; + 40303F00246A60A900CD7789 /* CElement.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CElement.hpp; path = ../../Common/include/geometry/elements/CElement.hpp; sourceTree = ""; }; + 40303F01246A60A900CD7789 /* CGaussVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CGaussVariable.hpp; path = ../../Common/include/geometry/elements/CGaussVariable.hpp; sourceTree = ""; }; + 40303F02246A60B700CD7789 /* CMeshReaderFVM.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CMeshReaderFVM.hpp; path = ../../Common/include/geometry/meshreader/CMeshReaderFVM.hpp; sourceTree = ""; }; + 40303F03246A60B700CD7789 /* CCGNSMeshReaderFVM.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CCGNSMeshReaderFVM.hpp; path = ../../Common/include/geometry/meshreader/CCGNSMeshReaderFVM.hpp; sourceTree = ""; }; + 40303F04246A60B700CD7789 /* CSU2ASCIIMeshReaderFVM.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CSU2ASCIIMeshReaderFVM.hpp; path = ../../Common/include/geometry/meshreader/CSU2ASCIIMeshReaderFVM.hpp; sourceTree = ""; }; + 40303F05246A60B700CD7789 /* CBoxMeshReaderFVM.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CBoxMeshReaderFVM.hpp; path = ../../Common/include/geometry/meshreader/CBoxMeshReaderFVM.hpp; sourceTree = ""; }; + 40303F06246A60B700CD7789 /* CRectangularMeshReaderFVM.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CRectangularMeshReaderFVM.hpp; path = ../../Common/include/geometry/meshreader/CRectangularMeshReaderFVM.hpp; sourceTree = ""; }; + 40303F07246A60C300CD7789 /* CLine.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CLine.hpp; path = ../../Common/include/geometry/primal_grid/CLine.hpp; sourceTree = ""; }; + 40303F08246A60C300CD7789 /* CTetrahedron.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CTetrahedron.hpp; path = ../../Common/include/geometry/primal_grid/CTetrahedron.hpp; sourceTree = ""; }; + 40303F09246A60C300CD7789 /* CTriangle.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CTriangle.hpp; path = ../../Common/include/geometry/primal_grid/CTriangle.hpp; sourceTree = ""; }; + 40303F0A246A60C300CD7789 /* CQuadrilateral.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CQuadrilateral.hpp; path = ../../Common/include/geometry/primal_grid/CQuadrilateral.hpp; sourceTree = ""; }; + 40303F0B246A60C300CD7789 /* CPrimalGrid.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CPrimalGrid.hpp; path = ../../Common/include/geometry/primal_grid/CPrimalGrid.hpp; sourceTree = ""; }; + 40303F0C246A60C300CD7789 /* CPrimalGridBoundFEM.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CPrimalGridBoundFEM.hpp; path = ../../Common/include/geometry/primal_grid/CPrimalGridBoundFEM.hpp; sourceTree = ""; }; + 40303F0D246A60C300CD7789 /* CPrimalGridFEM.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CPrimalGridFEM.hpp; path = ../../Common/include/geometry/primal_grid/CPrimalGridFEM.hpp; sourceTree = ""; }; + 40303F0E246A60C300CD7789 /* CVertexMPI.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CVertexMPI.hpp; path = ../../Common/include/geometry/primal_grid/CVertexMPI.hpp; sourceTree = ""; }; + 40303F0F246A60C300CD7789 /* CHexahedron.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CHexahedron.hpp; path = ../../Common/include/geometry/primal_grid/CHexahedron.hpp; sourceTree = ""; }; + 40303F10246A60C300CD7789 /* CPrism.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CPrism.hpp; path = ../../Common/include/geometry/primal_grid/CPrism.hpp; sourceTree = ""; }; + 40303F11246A60C300CD7789 /* CPyramid.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CPyramid.hpp; path = ../../Common/include/geometry/primal_grid/CPyramid.hpp; sourceTree = ""; }; + 403426B2235F83B1005B5215 /* CAdjFlowIncOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CAdjFlowIncOutput.cpp; path = ../../SU2_CFD/src/output/CAdjFlowIncOutput.cpp; sourceTree = ""; }; + 403426B3235F83B1005B5215 /* CFlowOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CFlowOutput.cpp; path = ../../SU2_CFD/src/output/CFlowOutput.cpp; sourceTree = ""; }; + 403426B4235F83B1005B5215 /* CFlowIncOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CFlowIncOutput.cpp; path = ../../SU2_CFD/src/output/CFlowIncOutput.cpp; sourceTree = ""; }; + 403426B5235F83B1005B5215 /* CHeatOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CHeatOutput.cpp; path = ../../SU2_CFD/src/output/CHeatOutput.cpp; sourceTree = ""; }; + 403426B6235F83B1005B5215 /* CMultizoneOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CMultizoneOutput.cpp; path = ../../SU2_CFD/src/output/CMultizoneOutput.cpp; sourceTree = ""; }; + 403426B7235F83B1005B5215 /* CMeshOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CMeshOutput.cpp; path = ../../SU2_CFD/src/output/CMeshOutput.cpp; sourceTree = ""; }; + 403426B8235F83B1005B5215 /* CAdjElasticityOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CAdjElasticityOutput.cpp; path = ../../SU2_CFD/src/output/CAdjElasticityOutput.cpp; sourceTree = ""; }; + 403426B9235F83B1005B5215 /* CElasticityOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CElasticityOutput.cpp; path = ../../SU2_CFD/src/output/CElasticityOutput.cpp; sourceTree = ""; }; + 403426BA235F83B1005B5215 /* CFlowCompOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CFlowCompOutput.cpp; path = ../../SU2_CFD/src/output/CFlowCompOutput.cpp; sourceTree = ""; }; + 403426BB235F83B1005B5215 /* output_structure_legacy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = output_structure_legacy.cpp; path = ../../SU2_CFD/src/output/output_structure_legacy.cpp; sourceTree = ""; }; + 403426BC235F83B1005B5215 /* CFlowCompFEMOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CFlowCompFEMOutput.cpp; path = ../../SU2_CFD/src/output/CFlowCompFEMOutput.cpp; sourceTree = ""; }; + 403426BD235F83B1005B5215 /* CAdjFlowCompOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CAdjFlowCompOutput.cpp; path = ../../SU2_CFD/src/output/CAdjFlowCompOutput.cpp; sourceTree = ""; }; + 403426BE235F83B1005B5215 /* COutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = COutput.cpp; path = ../../SU2_CFD/src/output/COutput.cpp; sourceTree = ""; }; + 403426BF235F83B2005B5215 /* output_physics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = output_physics.cpp; path = ../../SU2_CFD/src/output/output_physics.cpp; sourceTree = ""; }; + 403426C0235F83B2005B5215 /* CAdjHeatOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CAdjHeatOutput.cpp; path = ../../SU2_CFD/src/output/CAdjHeatOutput.cpp; sourceTree = ""; }; + 403426C1235F83B2005B5215 /* CBaselineOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CBaselineOutput.cpp; path = ../../SU2_CFD/src/output/CBaselineOutput.cpp; sourceTree = ""; }; + 403426D4235F85D5005B5215 /* CMeshOutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CMeshOutput.hpp; path = ../../SU2_CFD/include/output/CMeshOutput.hpp; sourceTree = ""; }; + 403426D5235F85D5005B5215 /* CFlowIncOutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CFlowIncOutput.hpp; path = ../../SU2_CFD/include/output/CFlowIncOutput.hpp; sourceTree = ""; }; + 403426D6235F85D5005B5215 /* CMultizoneOutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CMultizoneOutput.hpp; path = ../../SU2_CFD/include/output/CMultizoneOutput.hpp; sourceTree = ""; }; + 403426D7235F85D5005B5215 /* COutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = COutput.hpp; path = ../../SU2_CFD/include/output/COutput.hpp; sourceTree = ""; }; + 403426D8235F85D5005B5215 /* COutputLegacy.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = COutputLegacy.hpp; path = ../../SU2_CFD/include/output/COutputLegacy.hpp; sourceTree = ""; }; + 403426DA235F85D5005B5215 /* CFlowOutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CFlowOutput.hpp; path = ../../SU2_CFD/include/output/CFlowOutput.hpp; sourceTree = ""; }; + 403426DB235F85D5005B5215 /* CHeatOutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CHeatOutput.hpp; path = ../../SU2_CFD/include/output/CHeatOutput.hpp; sourceTree = ""; }; + 403426DC235F85D5005B5215 /* CFlowCompFEMOutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CFlowCompFEMOutput.hpp; path = ../../SU2_CFD/include/output/CFlowCompFEMOutput.hpp; sourceTree = ""; }; + 403426DD235F85D6005B5215 /* CAdjElasticityOutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CAdjElasticityOutput.hpp; path = ../../SU2_CFD/include/output/CAdjElasticityOutput.hpp; sourceTree = ""; }; + 403426DE235F85D6005B5215 /* CAdjHeatOutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CAdjHeatOutput.hpp; path = ../../SU2_CFD/include/output/CAdjHeatOutput.hpp; sourceTree = ""; }; + 403426DF235F85D6005B5215 /* CBaselineOutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CBaselineOutput.hpp; path = ../../SU2_CFD/include/output/CBaselineOutput.hpp; sourceTree = ""; }; + 403426E0235F85D6005B5215 /* CElasticityOutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CElasticityOutput.hpp; path = ../../SU2_CFD/include/output/CElasticityOutput.hpp; sourceTree = ""; }; + 403426E1235F85D6005B5215 /* CFlowCompOutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CFlowCompOutput.hpp; path = ../../SU2_CFD/include/output/CFlowCompOutput.hpp; sourceTree = ""; }; + 403426E2235F85D6005B5215 /* output_structure_legacy.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = output_structure_legacy.inl; path = ../../SU2_CFD/include/output/output_structure_legacy.inl; sourceTree = ""; }; + 403426E3235F85D6005B5215 /* CAdjFlowOutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CAdjFlowOutput.hpp; path = ../../SU2_CFD/include/output/CAdjFlowOutput.hpp; sourceTree = ""; }; + 403426E4235F85D7005B5215 /* CAdjFlowIncOutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CAdjFlowIncOutput.hpp; path = ../../SU2_CFD/include/output/CAdjFlowIncOutput.hpp; sourceTree = ""; }; + 403426E6235F88ED005B5215 /* CDiscAdjMultizoneDriver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CDiscAdjMultizoneDriver.hpp; path = ../../SU2_CFD/include/drivers/CDiscAdjMultizoneDriver.hpp; sourceTree = ""; }; + 403426EC235F8E29005B5215 /* CDiscAdjMultizoneDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CDiscAdjMultizoneDriver.cpp; path = ../../SU2_CFD/src/drivers/CDiscAdjMultizoneDriver.cpp; sourceTree = ""; }; + 4040B24A235FBEC300843C83 /* CDiscAdjFlowTractionInterface.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CDiscAdjFlowTractionInterface.hpp; path = ../../SU2_CFD/include/interfaces/fsi/CDiscAdjFlowTractionInterface.hpp; sourceTree = ""; }; + 4040B24B235FBEC300843C83 /* CMixingPlaneInterface.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CMixingPlaneInterface.hpp; path = ../../SU2_CFD/include/interfaces/cfd/CMixingPlaneInterface.hpp; sourceTree = ""; }; + 4040B24C235FBEC300843C83 /* CConservativeVarsInterface.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CConservativeVarsInterface.hpp; path = ../../SU2_CFD/include/interfaces/cfd/CConservativeVarsInterface.hpp; sourceTree = ""; }; + 4040B24D235FBEC300843C83 /* CSlidingInterface.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CSlidingInterface.hpp; path = ../../SU2_CFD/include/interfaces/cfd/CSlidingInterface.hpp; sourceTree = ""; }; + 4040B24E235FBEC300843C83 /* CDisplacementsInterfaceLegacy.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CDisplacementsInterfaceLegacy.hpp; path = ../../SU2_CFD/include/interfaces/fsi/CDisplacementsInterfaceLegacy.hpp; sourceTree = ""; }; + 4040B24F235FBEC300843C83 /* CConjugateHeatInterface.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CConjugateHeatInterface.hpp; path = ../../SU2_CFD/include/interfaces/cht/CConjugateHeatInterface.hpp; sourceTree = ""; }; + 4040B250235FBEC300843C83 /* CDiscAdjDisplacementsInterfaceLegacy.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CDiscAdjDisplacementsInterfaceLegacy.hpp; path = ../../SU2_CFD/include/interfaces/fsi/CDiscAdjDisplacementsInterfaceLegacy.hpp; sourceTree = ""; }; + 4040B251235FBEC300843C83 /* CFlowTractionInterface.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CFlowTractionInterface.hpp; path = ../../SU2_CFD/include/interfaces/fsi/CFlowTractionInterface.hpp; sourceTree = ""; }; + 4040B252235FBEC300843C83 /* CInterface.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CInterface.hpp; path = ../../SU2_CFD/include/interfaces/CInterface.hpp; sourceTree = ""; }; + 4040B253235FBEC300843C83 /* CDisplacementsInterface.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CDisplacementsInterface.hpp; path = ../../SU2_CFD/include/interfaces/fsi/CDisplacementsInterface.hpp; sourceTree = ""; }; + 4040B255235FBEFD00843C83 /* CDisplacementsInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CDisplacementsInterface.cpp; path = ../../SU2_CFD/src/interfaces/fsi/CDisplacementsInterface.cpp; sourceTree = ""; }; + 4040B256235FBEFD00843C83 /* CFlowTractionInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CFlowTractionInterface.cpp; path = ../../SU2_CFD/src/interfaces/fsi/CFlowTractionInterface.cpp; sourceTree = ""; }; + 4040B257235FBEFD00843C83 /* CDiscAdjFlowTractionInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CDiscAdjFlowTractionInterface.cpp; path = ../../SU2_CFD/src/interfaces/fsi/CDiscAdjFlowTractionInterface.cpp; sourceTree = ""; }; + 4040B258235FBEFD00843C83 /* CMixingPlaneInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CMixingPlaneInterface.cpp; path = ../../SU2_CFD/src/interfaces/cfd/CMixingPlaneInterface.cpp; sourceTree = ""; }; + 4040B25A235FBEFD00843C83 /* CConjugateHeatInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CConjugateHeatInterface.cpp; path = ../../SU2_CFD/src/interfaces/cht/CConjugateHeatInterface.cpp; sourceTree = ""; }; + 4040B25B235FBEFD00843C83 /* CSlidingInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CSlidingInterface.cpp; path = ../../SU2_CFD/src/interfaces/cfd/CSlidingInterface.cpp; sourceTree = ""; }; + 4040B25C235FBEFD00843C83 /* CConservativeVarsInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CConservativeVarsInterface.cpp; path = ../../SU2_CFD/src/interfaces/cfd/CConservativeVarsInterface.cpp; sourceTree = ""; }; + 4040B25D235FBEFD00843C83 /* CInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CInterface.cpp; path = ../../SU2_CFD/src/interfaces/CInterface.cpp; sourceTree = ""; }; + 4040B26A235FBFF200843C83 /* CCSVFileWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CCSVFileWriter.cpp; sourceTree = ""; }; + 4040B26B235FBFF200843C83 /* CSurfaceFVMDataSorter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSurfaceFVMDataSorter.cpp; sourceTree = ""; }; + 4040B26C235FBFF200843C83 /* CParallelFileWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CParallelFileWriter.cpp; sourceTree = ""; }; + 4040B26D235FBFF200843C83 /* CParallelDataSorter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CParallelDataSorter.cpp; sourceTree = ""; }; + 4040B26E235FBFF200843C83 /* CParaviewBinaryFileWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CParaviewBinaryFileWriter.cpp; sourceTree = ""; }; + 4040B26F235FBFF200843C83 /* CFEMDataSorter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CFEMDataSorter.cpp; sourceTree = ""; }; + 4040B270235FBFF200843C83 /* CSU2BinaryFileWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSU2BinaryFileWriter.cpp; sourceTree = ""; }; + 4040B271235FBFF200843C83 /* CTecplotBinaryFileWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CTecplotBinaryFileWriter.cpp; sourceTree = ""; }; + 4040B272235FBFF200843C83 /* CSU2FileWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSU2FileWriter.cpp; sourceTree = ""; }; + 4040B273235FBFF200843C83 /* CFVMDataSorter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CFVMDataSorter.cpp; sourceTree = ""; }; + 4040B274235FBFF200843C83 /* CParaviewFileWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CParaviewFileWriter.cpp; sourceTree = ""; }; + 4040B275235FBFF200843C83 /* CSurfaceFEMDataSorter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSurfaceFEMDataSorter.cpp; sourceTree = ""; }; + 4040B276235FBFF200843C83 /* CTecplotFileWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CTecplotFileWriter.cpp; sourceTree = ""; }; + 4040B277235FBFF200843C83 /* CSU2MeshFileWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSU2MeshFileWriter.cpp; sourceTree = ""; }; + 4040B287235FC03700843C83 /* CParaviewFileWriter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CParaviewFileWriter.hpp; sourceTree = ""; }; + 4040B288235FC03700843C83 /* CTecplotFileWriter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CTecplotFileWriter.hpp; sourceTree = ""; }; + 4040B289235FC03700843C83 /* CSurfaceFEMDataSorter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSurfaceFEMDataSorter.hpp; sourceTree = ""; }; + 4040B28A235FC03700843C83 /* CSU2MeshFileWriter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSU2MeshFileWriter.hpp; sourceTree = ""; }; + 4040B28B235FC03700843C83 /* CTecplotBinaryFileWriter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CTecplotBinaryFileWriter.hpp; sourceTree = ""; }; + 4040B28C235FC03700843C83 /* CSU2FileWriter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSU2FileWriter.hpp; sourceTree = ""; }; + 4040B28D235FC03700843C83 /* CFVMDataSorter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFVMDataSorter.hpp; sourceTree = ""; }; + 4040B28E235FC03700843C83 /* CParallelDataSorter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CParallelDataSorter.hpp; sourceTree = ""; }; + 4040B28F235FC03700843C83 /* CFEMDataSorter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFEMDataSorter.hpp; sourceTree = ""; }; + 4040B290235FC03700843C83 /* CParaviewBinaryFileWriter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CParaviewBinaryFileWriter.hpp; sourceTree = ""; }; + 4040B291235FC03700843C83 /* CSU2BinaryFileWriter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSU2BinaryFileWriter.hpp; sourceTree = ""; }; + 4040B292235FC03700843C83 /* CFileWriter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFileWriter.hpp; sourceTree = ""; }; + 4040B293235FC03700843C83 /* CCSVFileWriter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CCSVFileWriter.hpp; sourceTree = ""; }; + 4040B294235FC03700843C83 /* CSurfaceFVMDataSorter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSurfaceFVMDataSorter.hpp; sourceTree = ""; }; + 405220AF246A626300D9AB4D /* CTurboVertex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CTurboVertex.cpp; path = ../../Common/src/geometry/dual_grid/CTurboVertex.cpp; sourceTree = ""; }; + 405220B0246A626300D9AB4D /* CVertex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CVertex.cpp; path = ../../Common/src/geometry/dual_grid/CVertex.cpp; sourceTree = ""; }; + 405220B1246A626300D9AB4D /* CDualGrid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CDualGrid.cpp; path = ../../Common/src/geometry/dual_grid/CDualGrid.cpp; sourceTree = ""; }; + 405220B2246A626400D9AB4D /* CPoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CPoint.cpp; path = ../../Common/src/geometry/dual_grid/CPoint.cpp; sourceTree = ""; }; + 405220B3246A626400D9AB4D /* CEdge.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CEdge.cpp; path = ../../Common/src/geometry/dual_grid/CEdge.cpp; sourceTree = ""; }; + 405220B9246A628000D9AB4D /* CCGNSMeshReaderFVM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CCGNSMeshReaderFVM.cpp; path = ../../Common/src/geometry/meshreader/CCGNSMeshReaderFVM.cpp; sourceTree = ""; }; + 405220BA246A628000D9AB4D /* CRectangularMeshReaderFVM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CRectangularMeshReaderFVM.cpp; path = ../../Common/src/geometry/meshreader/CRectangularMeshReaderFVM.cpp; sourceTree = ""; }; + 405220BB246A628000D9AB4D /* CMeshReaderFVM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CMeshReaderFVM.cpp; path = ../../Common/src/geometry/meshreader/CMeshReaderFVM.cpp; sourceTree = ""; }; + 405220BC246A628000D9AB4D /* CBoxMeshReaderFVM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CBoxMeshReaderFVM.cpp; path = ../../Common/src/geometry/meshreader/CBoxMeshReaderFVM.cpp; sourceTree = ""; }; + 405220BD246A628000D9AB4D /* CSU2ASCIIMeshReaderFVM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CSU2ASCIIMeshReaderFVM.cpp; path = ../../Common/src/geometry/meshreader/CSU2ASCIIMeshReaderFVM.cpp; sourceTree = ""; }; + 405220C3246A629000D9AB4D /* CPyramid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CPyramid.cpp; path = ../../Common/src/geometry/primal_grid/CPyramid.cpp; sourceTree = ""; }; + 405220C4246A629100D9AB4D /* CTriangle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CTriangle.cpp; path = ../../Common/src/geometry/primal_grid/CTriangle.cpp; sourceTree = ""; }; + 405220C5246A629100D9AB4D /* CHexahedron.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CHexahedron.cpp; path = ../../Common/src/geometry/primal_grid/CHexahedron.cpp; sourceTree = ""; }; + 405220C6246A629100D9AB4D /* CPrimalGridFEM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CPrimalGridFEM.cpp; path = ../../Common/src/geometry/primal_grid/CPrimalGridFEM.cpp; sourceTree = ""; }; + 405220C7246A629100D9AB4D /* CVertexMPI.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CVertexMPI.cpp; path = ../../Common/src/geometry/primal_grid/CVertexMPI.cpp; sourceTree = ""; }; + 405220C8246A629100D9AB4D /* CPrimalGrid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CPrimalGrid.cpp; path = ../../Common/src/geometry/primal_grid/CPrimalGrid.cpp; sourceTree = ""; }; + 405220C9246A629100D9AB4D /* CTetrahedron.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CTetrahedron.cpp; path = ../../Common/src/geometry/primal_grid/CTetrahedron.cpp; sourceTree = ""; }; + 405220CA246A629100D9AB4D /* CPrism.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CPrism.cpp; path = ../../Common/src/geometry/primal_grid/CPrism.cpp; sourceTree = ""; }; + 405220CB246A629100D9AB4D /* CQuadrilateral.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CQuadrilateral.cpp; path = ../../Common/src/geometry/primal_grid/CQuadrilateral.cpp; sourceTree = ""; }; + 405220CC246A629100D9AB4D /* CPrimalGridBoundFEM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CPrimalGridBoundFEM.cpp; path = ../../Common/src/geometry/primal_grid/CPrimalGridBoundFEM.cpp; sourceTree = ""; }; + 405220CD246A629100D9AB4D /* CLine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CLine.cpp; path = ../../Common/src/geometry/primal_grid/CLine.cpp; sourceTree = ""; }; + 4063F8122469E40A00DE870E /* CMultiGridIntegration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CMultiGridIntegration.cpp; path = ../../SU2_CFD/src/integration/CMultiGridIntegration.cpp; sourceTree = ""; }; + 4063F8132469E40A00DE870E /* CSingleGridIntegration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CSingleGridIntegration.cpp; path = ../../SU2_CFD/src/integration/CSingleGridIntegration.cpp; sourceTree = ""; }; + 4063F8142469E40A00DE870E /* CStructuralIntegration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CStructuralIntegration.cpp; path = ../../SU2_CFD/src/integration/CStructuralIntegration.cpp; sourceTree = ""; }; + 4063F8152469E40A00DE870E /* CIntegrationFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIntegrationFactory.cpp; path = ../../SU2_CFD/src/integration/CIntegrationFactory.cpp; sourceTree = ""; }; + 4063F8162469E40A00DE870E /* CIntegration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIntegration.cpp; path = ../../SU2_CFD/src/integration/CIntegration.cpp; sourceTree = ""; }; + 4063F8172469E40A00DE870E /* CFEM_DG_Integration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CFEM_DG_Integration.cpp; path = ../../SU2_CFD/src/integration/CFEM_DG_Integration.cpp; sourceTree = ""; }; + 4063F823246A03AE00DE870E /* CLimiterDetails.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CLimiterDetails.cpp; path = ../../SU2_CFD/src/limiters/CLimiterDetails.cpp; sourceTree = ""; }; + 4063F825246A03F700DE870E /* transition.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = transition.cpp; path = ../../SU2_CFD/src/numerics/transition.cpp; sourceTree = ""; }; + 4063F826246A03F700DE870E /* turb_convection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = turb_convection.cpp; path = ../../SU2_CFD/src/numerics/turbulent/turb_convection.cpp; sourceTree = ""; }; + 4063F827246A03F700DE870E /* adj_diffusion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = adj_diffusion.cpp; path = ../../SU2_CFD/src/numerics/continuous_adjoint/adj_diffusion.cpp; sourceTree = ""; }; + 4063F828246A03F700DE870E /* fvs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fvs.cpp; path = ../../SU2_CFD/src/numerics/flow/convection/fvs.cpp; sourceTree = ""; }; + 4063F829246A03F700DE870E /* heat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = heat.cpp; path = ../../SU2_CFD/src/numerics/heat.cpp; sourceTree = ""; }; + 4063F82A246A03F700DE870E /* adj_convection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = adj_convection.cpp; path = ../../SU2_CFD/src/numerics/continuous_adjoint/adj_convection.cpp; sourceTree = ""; }; + 4063F82B246A03F700DE870E /* hllc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = hllc.cpp; path = ../../SU2_CFD/src/numerics/flow/convection/hllc.cpp; sourceTree = ""; }; + 4063F82C246A03F700DE870E /* turb_diffusion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = turb_diffusion.cpp; path = ../../SU2_CFD/src/numerics/turbulent/turb_diffusion.cpp; sourceTree = ""; }; + 4063F82D246A03F700DE870E /* flow_diffusion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = flow_diffusion.cpp; path = ../../SU2_CFD/src/numerics/flow/flow_diffusion.cpp; sourceTree = ""; }; + 4063F82E246A03F700DE870E /* CNumerics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CNumerics.cpp; path = ../../SU2_CFD/src/numerics/CNumerics.cpp; sourceTree = ""; }; + 4063F82F246A03F700DE870E /* fds.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fds.cpp; path = ../../SU2_CFD/src/numerics/flow/convection/fds.cpp; sourceTree = ""; }; + 4063F830246A03F700DE870E /* turb_sources.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = turb_sources.cpp; path = ../../SU2_CFD/src/numerics/turbulent/turb_sources.cpp; sourceTree = ""; }; + 4063F831246A03F700DE870E /* template.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = template.cpp; path = ../../SU2_CFD/src/numerics/template.cpp; sourceTree = ""; }; + 4063F832246A03F700DE870E /* nonlinear_models.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = nonlinear_models.cpp; path = ../../SU2_CFD/src/numerics/elasticity/nonlinear_models.cpp; sourceTree = ""; }; + 4063F833246A03F700DE870E /* cusp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cusp.cpp; path = ../../SU2_CFD/src/numerics/flow/convection/cusp.cpp; sourceTree = ""; }; + 4063F834246A03F700DE870E /* radiation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = radiation.cpp; path = ../../SU2_CFD/src/numerics/radiation.cpp; sourceTree = ""; }; + 4063F835246A03F700DE870E /* centered.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = centered.cpp; path = ../../SU2_CFD/src/numerics/flow/convection/centered.cpp; sourceTree = ""; }; + 4063F836246A03F700DE870E /* adj_sources.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = adj_sources.cpp; path = ../../SU2_CFD/src/numerics/continuous_adjoint/adj_sources.cpp; sourceTree = ""; }; + 4063F837246A03F800DE870E /* flow_sources.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = flow_sources.cpp; path = ../../SU2_CFD/src/numerics/flow/flow_sources.cpp; sourceTree = ""; }; + 4063F838246A03F800DE870E /* roe.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = roe.cpp; path = ../../SU2_CFD/src/numerics/flow/convection/roe.cpp; sourceTree = ""; }; + 4063F839246A03F800DE870E /* ausm_slau.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ausm_slau.cpp; path = ../../SU2_CFD/src/numerics/flow/convection/ausm_slau.cpp; sourceTree = ""; }; + 4063F852246A053400DE870E /* CParaviewXMLFileWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CParaviewXMLFileWriter.cpp; sourceTree = ""; }; + 4063F853246A053400DE870E /* CSTLFileWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSTLFileWriter.cpp; sourceTree = ""; }; + 4063F854246A053400DE870E /* COutputFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = COutputFactory.cpp; path = ../../SU2_CFD/src/output/COutputFactory.cpp; sourceTree = ""; }; + 4063F855246A053400DE870E /* CParaviewVTMFileWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CParaviewVTMFileWriter.cpp; sourceTree = ""; }; + 4063F856246A053400DE870E /* CWindowingTools.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CWindowingTools.cpp; path = ../../SU2_CFD/src/output/tools/CWindowingTools.cpp; sourceTree = ""; }; + E90B4FCB22DFDF92000ED392 /* CMMSIncNSSolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CMMSIncNSSolution.cpp; path = ../../Common/src/toolboxes/MMS/CMMSIncNSSolution.cpp; sourceTree = ""; }; + E90B4FCC22DFDF93000ED392 /* CMMSNSUnitQuadSolutionWallBC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CMMSNSUnitQuadSolutionWallBC.cpp; path = ../../Common/src/toolboxes/MMS/CMMSNSUnitQuadSolutionWallBC.cpp; sourceTree = ""; }; + E90B4FCD22DFDF93000ED392 /* CNSUnitQuadSolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CNSUnitQuadSolution.cpp; path = ../../Common/src/toolboxes/MMS/CNSUnitQuadSolution.cpp; sourceTree = ""; }; + E90B4FCE22DFDF93000ED392 /* CTGVSolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CTGVSolution.cpp; path = ../../Common/src/toolboxes/MMS/CTGVSolution.cpp; sourceTree = ""; }; + E90B4FCF22DFDF93000ED392 /* CIncTGVSolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIncTGVSolution.cpp; path = ../../Common/src/toolboxes/MMS/CIncTGVSolution.cpp; sourceTree = ""; }; + E90B4FD022DFDF93000ED392 /* CUserDefinedSolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CUserDefinedSolution.cpp; path = ../../Common/src/toolboxes/MMS/CUserDefinedSolution.cpp; sourceTree = ""; }; + E90B4FD122DFDF93000ED392 /* CMMSNSTwoHalfSpheresSolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CMMSNSTwoHalfSpheresSolution.cpp; path = ../../Common/src/toolboxes/MMS/CMMSNSTwoHalfSpheresSolution.cpp; sourceTree = ""; }; + E90B4FD222DFDF93000ED392 /* CInviscidVortexSolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CInviscidVortexSolution.cpp; path = ../../Common/src/toolboxes/MMS/CInviscidVortexSolution.cpp; sourceTree = ""; }; + E90B4FD322DFDF93000ED392 /* CMMSNSUnitQuadSolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CMMSNSUnitQuadSolution.cpp; path = ../../Common/src/toolboxes/MMS/CMMSNSUnitQuadSolution.cpp; sourceTree = ""; }; + E90B4FD422DFDF93000ED392 /* CMMSIncEulerSolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CMMSIncEulerSolution.cpp; path = ../../Common/src/toolboxes/MMS/CMMSIncEulerSolution.cpp; sourceTree = ""; }; + E90B4FD522DFDF93000ED392 /* CMMSNSTwoHalfCirclesSolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CMMSNSTwoHalfCirclesSolution.cpp; path = ../../Common/src/toolboxes/MMS/CMMSNSTwoHalfCirclesSolution.cpp; sourceTree = ""; }; + E90B4FD622DFDF93000ED392 /* CRinglebSolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CRinglebSolution.cpp; path = ../../Common/src/toolboxes/MMS/CRinglebSolution.cpp; sourceTree = ""; }; + E90B4FD722DFDF94000ED392 /* CVerificationSolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CVerificationSolution.cpp; path = ../../Common/src/toolboxes/MMS/CVerificationSolution.cpp; sourceTree = ""; }; + E90B4FE622DFDFE2000ED392 /* CVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CVariable.cpp; path = ../../SU2_CFD/src/variables/CVariable.cpp; sourceTree = ""; }; + E90B4FE722DFDFE2000ED392 /* CIncEulerVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIncEulerVariable.cpp; path = ../../SU2_CFD/src/variables/CIncEulerVariable.cpp; sourceTree = ""; }; + E90B4FE822DFDFE2000ED392 /* CAdjTurbVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CAdjTurbVariable.cpp; path = ../../SU2_CFD/src/variables/CAdjTurbVariable.cpp; sourceTree = ""; }; + E90B4FE922DFDFE2000ED392 /* CAdjNSVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CAdjNSVariable.cpp; path = ../../SU2_CFD/src/variables/CAdjNSVariable.cpp; sourceTree = ""; }; + E90B4FEA22DFDFE2000ED392 /* CDiscAdjVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CDiscAdjVariable.cpp; path = ../../SU2_CFD/src/variables/CDiscAdjVariable.cpp; sourceTree = ""; }; + E90B4FEB22DFDFE2000ED392 /* CDiscAdjFEAVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CDiscAdjFEAVariable.cpp; path = ../../SU2_CFD/src/variables/CDiscAdjFEAVariable.cpp; sourceTree = ""; }; + E90B4FEC22DFDFE3000ED392 /* CAdjEulerVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CAdjEulerVariable.cpp; path = ../../SU2_CFD/src/variables/CAdjEulerVariable.cpp; sourceTree = ""; }; + E90B4FED22DFDFE3000ED392 /* CIncNSVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CIncNSVariable.cpp; path = ../../SU2_CFD/src/variables/CIncNSVariable.cpp; sourceTree = ""; }; + E90B4FEF22DFDFE3000ED392 /* CEulerVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CEulerVariable.cpp; path = ../../SU2_CFD/src/variables/CEulerVariable.cpp; sourceTree = ""; }; + E90B4FF022DFDFE3000ED392 /* CTurbSSTVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CTurbSSTVariable.cpp; path = ../../SU2_CFD/src/variables/CTurbSSTVariable.cpp; sourceTree = ""; }; + E90B4FF122DFDFE3000ED392 /* CBaselineVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CBaselineVariable.cpp; path = ../../SU2_CFD/src/variables/CBaselineVariable.cpp; sourceTree = ""; }; + E90B4FF222DFDFE3000ED392 /* CTurbVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CTurbVariable.cpp; path = ../../SU2_CFD/src/variables/CTurbVariable.cpp; sourceTree = ""; }; + E90B4FF322DFDFE3000ED392 /* CTransLMVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CTransLMVariable.cpp; path = ../../SU2_CFD/src/variables/CTransLMVariable.cpp; sourceTree = ""; }; + E90B4FF422DFDFE4000ED392 /* CFEAVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CFEAVariable.cpp; path = ../../SU2_CFD/src/variables/CFEAVariable.cpp; sourceTree = ""; }; + E90B4FF522DFDFE4000ED392 /* CNSVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CNSVariable.cpp; path = ../../SU2_CFD/src/variables/CNSVariable.cpp; sourceTree = ""; }; + E90B4FF622DFDFE4000ED392 /* CFEABoundVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CFEABoundVariable.cpp; path = ../../SU2_CFD/src/variables/CFEABoundVariable.cpp; sourceTree = ""; }; + E90B4FF722DFDFE4000ED392 /* CTurbSAVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CTurbSAVariable.cpp; path = ../../SU2_CFD/src/variables/CTurbSAVariable.cpp; sourceTree = ""; }; + E90B500B22DFE042000ED392 /* CSysVector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CSysVector.cpp; path = ../../Common/src/linear_algebra/CSysVector.cpp; sourceTree = ""; }; + E90B500C22DFE042000ED392 /* CSysMatrix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CSysMatrix.cpp; path = ../../Common/src/linear_algebra/CSysMatrix.cpp; sourceTree = ""; }; + E90B500D22DFE043000ED392 /* CSysSolve_b.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CSysSolve_b.cpp; path = ../../Common/src/linear_algebra/CSysSolve_b.cpp; sourceTree = ""; }; + E90B500E22DFE043000ED392 /* CSysSolve.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CSysSolve.cpp; path = ../../Common/src/linear_algebra/CSysSolve.cpp; sourceTree = ""; }; + E90B501422DFE0CB000ED392 /* task_definition.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = task_definition.hpp; path = ../../SU2_CFD/include/task_definition.hpp; sourceTree = ""; }; + E90B501522DFE0CC000ED392 /* task_definition.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = task_definition.inl; path = ../../SU2_CFD/include/task_definition.inl; sourceTree = ""; }; + E90B503C22DFE4B6000ED392 /* CAdjTurbVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CAdjTurbVariable.hpp; path = ../../SU2_CFD/include/variables/CAdjTurbVariable.hpp; sourceTree = ""; }; + E90B503D22DFE4B7000ED392 /* CTurbSSTVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CTurbSSTVariable.hpp; path = ../../SU2_CFD/include/variables/CTurbSSTVariable.hpp; sourceTree = ""; }; + E90B503E22DFE4B7000ED392 /* CDiscAdjFEAVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CDiscAdjFEAVariable.hpp; path = ../../SU2_CFD/include/variables/CDiscAdjFEAVariable.hpp; sourceTree = ""; }; + E90B503F22DFE4B7000ED392 /* CTurbSAVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CTurbSAVariable.hpp; path = ../../SU2_CFD/include/variables/CTurbSAVariable.hpp; sourceTree = ""; }; + E90B504022DFE4B7000ED392 /* CVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CVariable.hpp; path = ../../SU2_CFD/include/variables/CVariable.hpp; sourceTree = ""; }; + E90B504122DFE4B7000ED392 /* CNSVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CNSVariable.hpp; path = ../../SU2_CFD/include/variables/CNSVariable.hpp; sourceTree = ""; }; + E90B504222DFE4B7000ED392 /* CIncEulerVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CIncEulerVariable.hpp; path = ../../SU2_CFD/include/variables/CIncEulerVariable.hpp; sourceTree = ""; }; + E90B504322DFE4B7000ED392 /* CFEABoundVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CFEABoundVariable.hpp; path = ../../SU2_CFD/include/variables/CFEABoundVariable.hpp; sourceTree = ""; }; + E90B504422DFE4B7000ED392 /* CDiscAdjVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CDiscAdjVariable.hpp; path = ../../SU2_CFD/include/variables/CDiscAdjVariable.hpp; sourceTree = ""; }; + E90B504522DFE4B8000ED392 /* CEulerVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CEulerVariable.hpp; path = ../../SU2_CFD/include/variables/CEulerVariable.hpp; sourceTree = ""; }; + E90B504622DFE4B8000ED392 /* CTurbVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CTurbVariable.hpp; path = ../../SU2_CFD/include/variables/CTurbVariable.hpp; sourceTree = ""; }; + E90B504722DFE4B8000ED392 /* CIncNSVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CIncNSVariable.hpp; path = ../../SU2_CFD/include/variables/CIncNSVariable.hpp; sourceTree = ""; }; + E90B504922DFE4B8000ED392 /* CBaselineVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CBaselineVariable.hpp; path = ../../SU2_CFD/include/variables/CBaselineVariable.hpp; sourceTree = ""; }; + E90B504A22DFE4B8000ED392 /* CFEAVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CFEAVariable.hpp; path = ../../SU2_CFD/include/variables/CFEAVariable.hpp; sourceTree = ""; }; + E90B504B22DFE4B8000ED392 /* CAdjEulerVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CAdjEulerVariable.hpp; path = ../../SU2_CFD/include/variables/CAdjEulerVariable.hpp; sourceTree = ""; }; + E90B504C22DFE4B9000ED392 /* CAdjNSVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CAdjNSVariable.hpp; path = ../../SU2_CFD/include/variables/CAdjNSVariable.hpp; sourceTree = ""; }; + E90B504D22DFE4B9000ED392 /* CTransLMVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CTransLMVariable.hpp; path = ../../SU2_CFD/include/variables/CTransLMVariable.hpp; sourceTree = ""; }; + E90B504F22DFE541000ED392 /* CSysMatrix.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = CSysMatrix.inl; path = ../../Common/include/linear_algebra/CSysMatrix.inl; sourceTree = ""; }; + E90B505022DFE541000ED392 /* CSysSolve_b.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CSysSolve_b.hpp; path = ../../Common/include/linear_algebra/CSysSolve_b.hpp; sourceTree = ""; }; + E90B505122DFE541000ED392 /* CSysMatrix.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CSysMatrix.hpp; path = ../../Common/include/linear_algebra/CSysMatrix.hpp; sourceTree = ""; }; + E90B505222DFE541000ED392 /* CSysSolve.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CSysSolve.hpp; path = ../../Common/include/linear_algebra/CSysSolve.hpp; sourceTree = ""; }; + E90B505322DFE541000ED392 /* CPreconditioner.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CPreconditioner.hpp; path = ../../Common/include/linear_algebra/CPreconditioner.hpp; sourceTree = ""; }; + E90B505422DFE541000ED392 /* CMatrixVectorProduct.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CMatrixVectorProduct.hpp; path = ../../Common/include/linear_algebra/CMatrixVectorProduct.hpp; sourceTree = ""; }; + E90B505522DFE541000ED392 /* CSysVector.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CSysVector.hpp; path = ../../Common/include/linear_algebra/CSysVector.hpp; sourceTree = ""; }; + E90D35F6203F9C5800A3290D /* fluid_model_inc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fluid_model_inc.cpp; path = ../../SU2_CFD/src/fluid_model_inc.cpp; sourceTree = ""; }; + E91CAD081B8C117A00EE3FCC /* inv_NACA0012.cfg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = inv_NACA0012.cfg; sourceTree = ""; }; + E91CAD091B8C117A00EE3FCC /* mesh_NACA0012_inv.su2 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mesh_NACA0012_inv.su2; sourceTree = ""; }; + E941BB911B71D124005C6C06 /* mpi_structure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = mpi_structure.cpp; path = ../../Common/src/mpi_structure.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + E941BB951B71D1AB005C6C06 /* datatype_structure.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = datatype_structure.hpp; path = ../../Common/include/datatype_structure.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + E941BB961B71D1AB005C6C06 /* datatype_structure.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; lineEnding = 0; name = datatype_structure.inl; path = ../../Common/include/datatype_structure.inl; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + E941BB9C1B71D1AB005C6C06 /* codi_forward_structure.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = codi_forward_structure.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + E941BB9D1B71D1AB005C6C06 /* codi_forward_structure.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; lineEnding = 0; path = codi_forward_structure.inl; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + E941BB9E1B71D1AB005C6C06 /* codi_reverse_structure.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = codi_reverse_structure.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + E941BB9F1B71D1AB005C6C06 /* codi_reverse_structure.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; lineEnding = 0; path = codi_reverse_structure.inl; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + E941BBA21B71D1AB005C6C06 /* primitive_structure.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = primitive_structure.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + E941BBA31B71D1AB005C6C06 /* primitive_structure.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; lineEnding = 0; path = primitive_structure.inl; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + E941BBA51B71D1AB005C6C06 /* mpi_structure.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = mpi_structure.hpp; path = ../../Common/include/mpi_structure.hpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + E941BBA61B71D1AB005C6C06 /* mpi_structure.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; lineEnding = 0; name = mpi_structure.inl; path = ../../Common/include/mpi_structure.inl; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + E96766A3237B31E0009FBEE1 /* numerics_direct_scalar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = numerics_direct_scalar.cpp; path = ../../SU2_CFD/src/numerics_direct_scalar.cpp; sourceTree = ""; }; + E96766A5237B322F009FBEE1 /* CScalarVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CScalarVariable.cpp; path = ../../SU2_CFD/src/variables/CScalarVariable.cpp; sourceTree = ""; }; + E96766A7237B3286009FBEE1 /* CScalarVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CScalarVariable.hpp; path = ../../SU2_CFD/include/variables/CScalarVariable.hpp; sourceTree = ""; }; + E96766A8237B4EE9009FBEE1 /* CPassiveScalarVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CPassiveScalarVariable.cpp; path = ../../SU2_CFD/src/variables/CPassiveScalarVariable.cpp; sourceTree = ""; }; + E96766AA237B4F28009FBEE1 /* CPassiveScalarVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CPassiveScalarVariable.hpp; path = ../../SU2_CFD/include/variables/CPassiveScalarVariable.hpp; sourceTree = ""; }; + E96766AB237BB888009FBEE1 /* CScalarSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CScalarSolver.cpp; path = ../../SU2_CFD/src/solvers/CScalarSolver.cpp; sourceTree = ""; }; + E96766AC237BB889009FBEE1 /* CPassiveScalarSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CPassiveScalarSolver.cpp; path = ../../SU2_CFD/src/solvers/CPassiveScalarSolver.cpp; sourceTree = ""; }; + E96766AF237BB917009FBEE1 /* CPassiveScalarSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CPassiveScalarSolver.hpp; path = ../../SU2_CFD/include/solvers/CPassiveScalarSolver.hpp; sourceTree = ""; }; + E96766B0237BB918009FBEE1 /* CScalarSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CScalarSolver.hpp; path = ../../SU2_CFD/include/solvers/CScalarSolver.hpp; sourceTree = ""; }; + E96766B2237F8D5C009FBEE1 /* CFluidFlamelet.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CFluidFlamelet.hpp; path = ../../SU2_CFD/include/CFluidFlamelet.hpp; sourceTree = ""; }; + E96766B3237F8D5C009FBEE1 /* CLookUpTable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CLookUpTable.hpp; path = ../../SU2_CFD/include/CLookUpTable.hpp; sourceTree = ""; }; + E96766B4237F8D5D009FBEE1 /* CFileReaderLUT.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CFileReaderLUT.hpp; path = ../../SU2_CFD/include/CFileReaderLUT.hpp; sourceTree = ""; }; + E96766B82380FC06009FBEE1 /* CFlameletSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CFlameletSolver.hpp; path = ../../SU2_CFD/include/solvers/CFlameletSolver.hpp; sourceTree = ""; }; + E96766B92380FC14009FBEE1 /* CFlameletVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CFlameletVariable.hpp; path = ../../SU2_CFD/include/variables/CFlameletVariable.hpp; sourceTree = ""; }; + E96766BA2380FC45009FBEE1 /* CFlameletVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CFlameletVariable.cpp; path = ../../SU2_CFD/src/variables/CFlameletVariable.cpp; sourceTree = ""; }; + E96766BC2380FC5D009FBEE1 /* CFlameletSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CFlameletSolver.cpp; path = ../../SU2_CFD/src/solvers/CFlameletSolver.cpp; sourceTree = ""; }; + E967669E237365CA009FBEE1 /* CMarkerProfileReaderFVM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CMarkerProfileReaderFVM.cpp; path = ../../SU2_CFD/src/CMarkerProfileReaderFVM.cpp; sourceTree = ""; }; + E96766A0237365E1009FBEE1 /* CMarkerProfileReaderFVM.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CMarkerProfileReaderFVM.hpp; path = ../../SU2_CFD/include/CMarkerProfileReaderFVM.hpp; sourceTree = ""; }; + E96FAF0F2189FE9C0046BF5D /* blas_structure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = blas_structure.cpp; path = ../../Common/src/blas_structure.cpp; sourceTree = ""; }; + E96FAF112189FECA0046BF5D /* graph_coloring_structure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = graph_coloring_structure.cpp; path = ../../Common/src/graph_coloring_structure.cpp; sourceTree = ""; }; + E96FAF122189FECA0046BF5D /* fem_gauss_jacobi_quadrature.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fem_gauss_jacobi_quadrature.cpp; path = ../../Common/src/fem_gauss_jacobi_quadrature.cpp; sourceTree = ""; }; + E96FAF132189FECA0046BF5D /* fem_cgns_elements.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fem_cgns_elements.cpp; path = ../../Common/src/fem_cgns_elements.cpp; sourceTree = ""; }; + E96FAF192189FF620046BF5D /* graph_coloring_structure.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = graph_coloring_structure.hpp; path = ../../Common/include/graph_coloring_structure.hpp; sourceTree = ""; }; + E96FAF1A2189FF620046BF5D /* blas_structure.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = blas_structure.hpp; path = ../../Common/include/blas_structure.hpp; sourceTree = ""; }; + E96FAF1B2189FF620046BF5D /* fem_gauss_jacobi_quadrature.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = fem_gauss_jacobi_quadrature.inl; path = ../../Common/include/fem_gauss_jacobi_quadrature.inl; sourceTree = ""; }; + E96FAF1C2189FF620046BF5D /* fem_cgns_elements.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = fem_cgns_elements.hpp; path = ../../Common/include/fem_cgns_elements.hpp; sourceTree = ""; }; + E96FAF1D2189FF620046BF5D /* fem_gauss_jacobi_quadrature.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = fem_gauss_jacobi_quadrature.hpp; path = ../../Common/include/fem_gauss_jacobi_quadrature.hpp; sourceTree = ""; }; + E97B6C8117F941800008255B /* config_template.cfg */ = {isa = PBXFileReference; lastKnownFileType = text; name = config_template.cfg; path = ../../config_template.cfg; sourceTree = ""; }; + E97C63A5238131D1003336A6 /* CFluidFlamelet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CFluidFlamelet.cpp; path = ../../SU2_CFD/src/CFluidFlamelet.cpp; sourceTree = ""; }; + E9C2835022A701B5007B4E59 /* CMMSNSTwoHalfSpheresSolution.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CMMSNSTwoHalfSpheresSolution.hpp; path = ../../Common/include/toolboxes/MMS/CMMSNSTwoHalfSpheresSolution.hpp; sourceTree = ""; }; + E9C2835122A701B5007B4E59 /* CMMSNSTwoHalfCirclesSolution.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CMMSNSTwoHalfCirclesSolution.hpp; path = ../../Common/include/toolboxes/MMS/CMMSNSTwoHalfCirclesSolution.hpp; sourceTree = ""; }; + E9C2835222A701B5007B4E59 /* CMMSIncEulerSolution.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CMMSIncEulerSolution.hpp; path = ../../Common/include/toolboxes/MMS/CMMSIncEulerSolution.hpp; sourceTree = ""; }; + E9C2835322A701B5007B4E59 /* CMMSNSUnitQuadSolution.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CMMSNSUnitQuadSolution.hpp; path = ../../Common/include/toolboxes/MMS/CMMSNSUnitQuadSolution.hpp; sourceTree = ""; }; + E9C2835422A701B5007B4E59 /* CUserDefinedSolution.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CUserDefinedSolution.hpp; path = ../../Common/include/toolboxes/MMS/CUserDefinedSolution.hpp; sourceTree = ""; }; + E9C2835522A701B5007B4E59 /* CVerificationSolution.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CVerificationSolution.hpp; path = ../../Common/include/toolboxes/MMS/CVerificationSolution.hpp; sourceTree = ""; }; + E9C2835622A701B5007B4E59 /* CNSUnitQuadSolution.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CNSUnitQuadSolution.hpp; path = ../../Common/include/toolboxes/MMS/CNSUnitQuadSolution.hpp; sourceTree = ""; }; + E9C2835722A701B5007B4E59 /* CInviscidVortexSolution.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CInviscidVortexSolution.hpp; path = ../../Common/include/toolboxes/MMS/CInviscidVortexSolution.hpp; sourceTree = ""; }; + E9C2835822A701B5007B4E59 /* CRinglebSolution.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CRinglebSolution.hpp; path = ../../Common/include/toolboxes/MMS/CRinglebSolution.hpp; sourceTree = ""; }; + E9C2835922A701B5007B4E59 /* CTGVSolution.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CTGVSolution.hpp; path = ../../Common/include/toolboxes/MMS/CTGVSolution.hpp; sourceTree = ""; }; + E9C2835A22A701B6007B4E59 /* CIncTGVSolution.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CIncTGVSolution.hpp; path = ../../Common/include/toolboxes/MMS/CIncTGVSolution.hpp; sourceTree = ""; }; + E9C2835C22A701B6007B4E59 /* CMMSIncNSSolution.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CMMSIncNSSolution.hpp; path = ../../Common/include/toolboxes/MMS/CMMSIncNSSolution.hpp; sourceTree = ""; }; + E9C2835D22A701B6007B4E59 /* CMMSNSUnitQuadSolutionWallBC.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CMMSNSUnitQuadSolutionWallBC.hpp; path = ../../Common/include/toolboxes/MMS/CMMSNSUnitQuadSolutionWallBC.hpp; sourceTree = ""; }; + E9C830752061E60E004417A9 /* fem_geometry_structure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fem_geometry_structure.cpp; path = ../../Common/src/fem_geometry_structure.cpp; sourceTree = ""; }; + E9C830762061E60E004417A9 /* fem_integration_rules.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fem_integration_rules.cpp; path = ../../Common/src/fem_integration_rules.cpp; sourceTree = ""; }; + E9C830772061E60E004417A9 /* fem_standard_element.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fem_standard_element.cpp; path = ../../Common/src/fem_standard_element.cpp; sourceTree = ""; }; + E9C830782061E60E004417A9 /* fem_wall_distance.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fem_wall_distance.cpp; path = ../../Common/src/fem_wall_distance.cpp; sourceTree = ""; }; + E9C830792061E60E004417A9 /* fem_work_estimate_metis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fem_work_estimate_metis.cpp; path = ../../Common/src/fem_work_estimate_metis.cpp; sourceTree = ""; }; + E9C8307B2061E60E004417A9 /* geometry_structure_fem_part.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = geometry_structure_fem_part.cpp; path = ../../Common/src/geometry_structure_fem_part.cpp; sourceTree = ""; }; + E9C8308B2061E6B6004417A9 /* fem_geometry_structure.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = fem_geometry_structure.hpp; path = ../../Common/include/fem_geometry_structure.hpp; sourceTree = ""; }; + E9C8308C2061E6B6004417A9 /* fem_geometry_structure.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = fem_geometry_structure.inl; path = ../../Common/include/fem_geometry_structure.inl; sourceTree = ""; }; + E9C8308D2061E6B6004417A9 /* fem_standard_element.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = fem_standard_element.hpp; path = ../../Common/include/fem_standard_element.hpp; sourceTree = ""; }; + E9C8308E2061E6B6004417A9 /* fem_standard_element.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = fem_standard_element.inl; path = ../../Common/include/fem_standard_element.inl; sourceTree = ""; }; + E9D6EE5923165FD300618E36 /* CDummyDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CDummyDriver.cpp; path = ../../SU2_CFD/src/drivers/CDummyDriver.cpp; sourceTree = ""; }; + E9D6EE5B23165FE400618E36 /* CDummyDriver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CDummyDriver.hpp; path = ../../SU2_CFD/include/drivers/CDummyDriver.hpp; sourceTree = ""; }; + E9D6EE652317B80500618E36 /* CMeshSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CMeshSolver.cpp; path = ../../SU2_CFD/src/solvers/CMeshSolver.cpp; sourceTree = ""; }; + E9D6EE662317B80600618E36 /* CDiscAdjMeshSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CDiscAdjMeshSolver.cpp; path = ../../SU2_CFD/src/solvers/CDiscAdjMeshSolver.cpp; sourceTree = ""; }; + E9D6EE6B2317B88F00618E36 /* CDiscAdjMeshBoundVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CDiscAdjMeshBoundVariable.cpp; path = ../../SU2_CFD/src/variables/CDiscAdjMeshBoundVariable.cpp; sourceTree = ""; }; + E9D6EE6E2317B88F00618E36 /* CDiscAdjFEABoundVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CDiscAdjFEABoundVariable.cpp; path = ../../SU2_CFD/src/variables/CDiscAdjFEABoundVariable.cpp; sourceTree = ""; }; + E9D6EE6F2317B88F00618E36 /* CMeshElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CMeshElement.cpp; path = ../../SU2_CFD/src/variables/CMeshElement.cpp; sourceTree = ""; }; + E9D6EE702317B88F00618E36 /* CMeshBoundVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CMeshBoundVariable.cpp; path = ../../SU2_CFD/src/variables/CMeshBoundVariable.cpp; sourceTree = ""; }; + E9D6EE712317B88F00618E36 /* CMeshVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CMeshVariable.cpp; path = ../../SU2_CFD/src/variables/CMeshVariable.cpp; sourceTree = ""; }; + E9D6EE7A2317B8B000618E36 /* CDiscAdjMeshSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CDiscAdjMeshSolver.hpp; path = ../../SU2_CFD/include/solvers/CDiscAdjMeshSolver.hpp; sourceTree = ""; }; + E9D6EE7B2317B8B000618E36 /* CMeshSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CMeshSolver.hpp; path = ../../SU2_CFD/include/solvers/CMeshSolver.hpp; sourceTree = ""; }; + E9D6EE7C2317B8CC00618E36 /* CMeshElement.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CMeshElement.hpp; path = ../../SU2_CFD/include/variables/CMeshElement.hpp; sourceTree = ""; }; + E9D6EE7E2317B8CC00618E36 /* CDiscAdjFEABoundVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CDiscAdjFEABoundVariable.hpp; path = ../../SU2_CFD/include/variables/CDiscAdjFEABoundVariable.hpp; sourceTree = ""; }; + E9D6EE7F2317B8CC00618E36 /* CMeshVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CMeshVariable.hpp; path = ../../SU2_CFD/include/variables/CMeshVariable.hpp; sourceTree = ""; }; + E9D6EE802317B8CC00618E36 /* CDiscAdjMeshBoundVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CDiscAdjMeshBoundVariable.hpp; path = ../../SU2_CFD/include/variables/CDiscAdjMeshBoundVariable.hpp; sourceTree = ""; }; + E9D6EE822317B8CC00618E36 /* CMeshBoundVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CMeshBoundVariable.hpp; path = ../../SU2_CFD/include/variables/CMeshBoundVariable.hpp; sourceTree = ""; }; + E9D85B4B1C3F1B9E0077122F /* ad_structure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = ad_structure.cpp; path = ../../Common/src/ad_structure.cpp; sourceTree = ""; }; + E9D85B4D1C3F1BE00077122F /* ad_structure.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = ad_structure.hpp; path = ../../Common/include/ad_structure.hpp; sourceTree = ""; }; + E9D85B4E1C3F1BE00077122F /* ad_structure.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; lineEnding = 0; name = ad_structure.inl; path = ../../Common/include/ad_structure.inl; sourceTree = ""; }; + E9E51AD522FA313800773E0C /* CLinearPartitioner.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CLinearPartitioner.cpp; path = ../../Common/src/toolboxes/CLinearPartitioner.cpp; sourceTree = ""; }; + E9E51AD722FA314F00773E0C /* CLinearPartitioner.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CLinearPartitioner.hpp; path = ../../Common/include/toolboxes/CLinearPartitioner.hpp; sourceTree = ""; }; + E9E674332302A2E3009B6A25 /* CMultiGridQueue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CMultiGridQueue.cpp; path = ../../Common/src/CMultiGridQueue.cpp; sourceTree = ""; }; + E9E674352302A327009B6A25 /* CMultiGridQueue.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CMultiGridQueue.hpp; path = ../../Common/include/CMultiGridQueue.hpp; sourceTree = ""; }; + E9FDF6E91D2DD0560066E49C /* adt_structure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; name = adt_structure.cpp; path = ../../Common/src/adt_structure.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + E9FDF6EC1D2DD0860066E49C /* adt_structure.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = adt_structure.hpp; path = ../../Common/include/adt_structure.hpp; sourceTree = ""; }; + EB14FF9422F790500045FB27 /* CSinglezoneDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CSinglezoneDriver.cpp; path = ../../SU2_CFD/src/drivers/CSinglezoneDriver.cpp; sourceTree = ""; }; + EB14FF9522F790500045FB27 /* CDiscAdjSinglezoneDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CDiscAdjSinglezoneDriver.cpp; path = ../../SU2_CFD/src/drivers/CDiscAdjSinglezoneDriver.cpp; sourceTree = ""; }; + EB14FF9622F790500045FB27 /* CDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CDriver.cpp; path = ../../SU2_CFD/src/drivers/CDriver.cpp; sourceTree = ""; }; + EB14FF9722F790500045FB27 /* CMultizoneDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CMultizoneDriver.cpp; path = ../../SU2_CFD/src/drivers/CMultizoneDriver.cpp; sourceTree = ""; }; + EB14FF9C22F790720045FB27 /* CDiscAdjSinglezoneDriver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CDiscAdjSinglezoneDriver.hpp; path = ../../SU2_CFD/include/drivers/CDiscAdjSinglezoneDriver.hpp; sourceTree = ""; }; + EB14FF9D22F790720045FB27 /* CDriver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CDriver.hpp; path = ../../SU2_CFD/include/drivers/CDriver.hpp; sourceTree = ""; }; + EB14FF9E22F790720045FB27 /* CSinglezoneDriver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CSinglezoneDriver.hpp; path = ../../SU2_CFD/include/drivers/CSinglezoneDriver.hpp; sourceTree = ""; }; + EB14FF9F22F790720045FB27 /* CMultizoneDriver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CMultizoneDriver.hpp; path = ../../SU2_CFD/include/drivers/CMultizoneDriver.hpp; sourceTree = ""; }; +======= + 354900EA2537E0050095B597 /* wall_model.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = wall_model.hpp; sourceTree = ""; }; + 354900EE2537E0050095B597 /* CConfig.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CConfig.hpp; sourceTree = ""; }; + 354900FC2537E0050095B597 /* CNearestNeighbor.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CNearestNeighbor.hpp; sourceTree = ""; }; + 354900FD2537E0050095B597 /* CRadialBasisFunction.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CRadialBasisFunction.hpp; sourceTree = ""; }; + 354900FE2537E0050095B597 /* CInterpolator.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CInterpolator.hpp; sourceTree = ""; }; + 354900FF2537E0050095B597 /* CIsoparametric.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CIsoparametric.hpp; sourceTree = ""; }; + 354901002537E0050095B597 /* CSlidingMesh.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSlidingMesh.hpp; sourceTree = ""; }; + 354901012537E0050095B597 /* CMirror.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CMirror.hpp; sourceTree = ""; }; + 354901022537E0050095B597 /* CInterpolatorFactory.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CInterpolatorFactory.hpp; sourceTree = ""; }; + 354901042537E0050095B597 /* CLinearPartitioner.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CLinearPartitioner.hpp; sourceTree = ""; }; + 354901052537E0050095B597 /* C1DInterpolation.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = C1DInterpolation.hpp; sourceTree = ""; }; + 354901062537E0050095B597 /* printing_toolbox.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = printing_toolbox.hpp; sourceTree = ""; }; + 354901092537E0050095B597 /* CMMSNSUnitQuadSolution.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CMMSNSUnitQuadSolution.hpp; sourceTree = ""; }; + 3549010A2537E0050095B597 /* CMMSNSTwoHalfCirclesSolution.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CMMSNSTwoHalfCirclesSolution.hpp; sourceTree = ""; }; + 3549010B2537E0050095B597 /* CUserDefinedSolution.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CUserDefinedSolution.hpp; sourceTree = ""; }; + 3549010C2537E0050095B597 /* CInviscidShockVortexSolution.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CInviscidShockVortexSolution.hpp; sourceTree = ""; }; + 3549010D2537E0050095B597 /* CNSUnitQuadSolution.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CNSUnitQuadSolution.hpp; sourceTree = ""; }; + 3549010E2537E0050095B597 /* CRinglebSolution.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CRinglebSolution.hpp; sourceTree = ""; }; + 3549010F2537E0050095B597 /* CVerificationSolution.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CVerificationSolution.hpp; sourceTree = ""; }; + 354901102537E0050095B597 /* CIncTGVSolution.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CIncTGVSolution.hpp; sourceTree = ""; }; + 354901112537E0050095B597 /* CMMSNSUnitQuadSolutionWallBC.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CMMSNSUnitQuadSolutionWallBC.hpp; sourceTree = ""; }; + 354901122537E0050095B597 /* CTurbChannelSolution.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CTurbChannelSolution.hpp; sourceTree = ""; }; + 354901132537E0050095B597 /* CTGVSolution.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CTGVSolution.hpp; sourceTree = ""; }; + 354901142537E0050095B597 /* CMMSNSTwoHalfSpheresSolution.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CMMSNSTwoHalfSpheresSolution.hpp; sourceTree = ""; }; + 354901152537E0050095B597 /* CInviscidVortexSolution.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CInviscidVortexSolution.hpp; sourceTree = ""; }; + 354901162537E0050095B597 /* CMMSIncNSSolution.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CMMSIncNSSolution.hpp; sourceTree = ""; }; + 354901172537E0050095B597 /* CMMSIncEulerSolution.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CMMSIncEulerSolution.hpp; sourceTree = ""; }; + 354901182537E0050095B597 /* CSymmetricMatrix.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSymmetricMatrix.hpp; sourceTree = ""; }; + 354901192537E0050095B597 /* geometry_toolbox.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = geometry_toolbox.hpp; sourceTree = ""; }; + 3549011A2537E0050095B597 /* allocation_toolbox.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = allocation_toolbox.hpp; sourceTree = ""; }; + 3549011C2537E0050095B597 /* graph_toolbox.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = graph_toolbox.hpp; sourceTree = ""; }; + 354901202537E0050095B597 /* option_structure.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = option_structure.hpp; sourceTree = ""; }; + 354901232537E0050095B597 /* graph_coloring_structure.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = graph_coloring_structure.hpp; sourceTree = ""; }; + 3549012C2537E0050095B597 /* CPrimalGridFEM.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CPrimalGridFEM.hpp; sourceTree = ""; }; + 3549012D2537E0050095B597 /* CVertexMPI.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CVertexMPI.hpp; sourceTree = ""; }; + 3549012E2537E0050095B597 /* CLine.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CLine.hpp; sourceTree = ""; }; + 3549012F2537E0050095B597 /* CPrimalGridBoundFEM.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CPrimalGridBoundFEM.hpp; sourceTree = ""; }; + 354901312537E0050095B597 /* CHexahedron.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CHexahedron.hpp; sourceTree = ""; }; + 354901322537E0050095B597 /* CQuadrilateral.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CQuadrilateral.hpp; sourceTree = ""; }; + 354901332537E0050095B597 /* CPrimalGrid.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CPrimalGrid.hpp; sourceTree = ""; }; + 354901342537E0050095B597 /* CTetrahedron.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CTetrahedron.hpp; sourceTree = ""; }; + 354901352537E0050095B597 /* CPrism.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CPrism.hpp; sourceTree = ""; }; + 354901362537E0050095B597 /* CTriangle.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CTriangle.hpp; sourceTree = ""; }; + 354901372537E0050095B597 /* CPyramid.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CPyramid.hpp; sourceTree = ""; }; + 354901392537E0050095B597 /* CTurboVertex.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CTurboVertex.hpp; sourceTree = ""; }; + 3549013A2537E0050095B597 /* CVertex.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CVertex.hpp; sourceTree = ""; }; + 3549013B2537E0050095B597 /* CPoint.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CPoint.hpp; sourceTree = ""; }; + 3549013C2537E0050095B597 /* CEdge.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CEdge.hpp; sourceTree = ""; }; + 3549013D2537E0050095B597 /* CDualGrid.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CDualGrid.hpp; sourceTree = ""; }; + 3549013F2537E0050095B597 /* CCGNSMeshReaderFVM.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CCGNSMeshReaderFVM.hpp; sourceTree = ""; }; + 354901402537E0050095B597 /* CMeshReaderFVM.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CMeshReaderFVM.hpp; sourceTree = ""; }; + 354901412537E0050095B597 /* CRectangularMeshReaderFVM.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CRectangularMeshReaderFVM.hpp; sourceTree = ""; }; + 354901422537E0050095B597 /* CBoxMeshReaderFVM.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CBoxMeshReaderFVM.hpp; sourceTree = ""; }; + 354901432537E0050095B597 /* CSU2ASCIIMeshReaderFVM.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSU2ASCIIMeshReaderFVM.hpp; sourceTree = ""; }; + 354901452537E0050095B597 /* CElement.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CElement.hpp; sourceTree = ""; }; + 354901462537E0050095B597 /* CElementProperty.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CElementProperty.hpp; sourceTree = ""; }; + 354901472537E0050095B597 /* CGaussVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CGaussVariable.hpp; sourceTree = ""; }; + 354901482537E0050095B597 /* option_structure.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = option_structure.inl; sourceTree = ""; }; + 3549014A2537E0050095B597 /* CMatrixVectorProduct.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CMatrixVectorProduct.hpp; sourceTree = ""; }; + 3549014B2537E0050095B597 /* CSysSolve.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSysSolve.hpp; sourceTree = ""; }; + 3549014C2537E0050095B597 /* CPastixWrapper.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CPastixWrapper.hpp; sourceTree = ""; }; + 3549014D2537E0050095B597 /* CSysMatrix.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSysMatrix.hpp; sourceTree = ""; }; + 3549014E2537E0050095B597 /* CSysVector.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSysVector.hpp; sourceTree = ""; }; + 3549014F2537E0050095B597 /* CPreconditioner.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CPreconditioner.hpp; sourceTree = ""; }; + 354901502537E0050095B597 /* CSysMatrix.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CSysMatrix.inl; sourceTree = ""; }; + 354901512537E0050095B597 /* CSysSolve_b.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSysSolve_b.hpp; sourceTree = ""; }; + 354901672537E0050095B597 /* CMirror.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CMirror.cpp; sourceTree = ""; }; + 354901682537E0050095B597 /* CInterpolatorFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CInterpolatorFactory.cpp; sourceTree = ""; }; + 354901692537E0050095B597 /* CSlidingMesh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSlidingMesh.cpp; sourceTree = ""; }; + 3549016A2537E0050095B597 /* meson.build */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = meson.build; sourceTree = ""; }; + 3549016B2537E0050095B597 /* CIsoparametric.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CIsoparametric.cpp; sourceTree = ""; }; + 3549016C2537E0050095B597 /* CRadialBasisFunction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CRadialBasisFunction.cpp; sourceTree = ""; }; + 3549016D2537E0050095B597 /* CNearestNeighbor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CNearestNeighbor.cpp; sourceTree = ""; }; + 3549016E2537E0050095B597 /* CInterpolator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CInterpolator.cpp; sourceTree = ""; }; + 354901702537E0050095B597 /* CSymmetricMatrix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSymmetricMatrix.cpp; sourceTree = ""; }; + 354901712537E0050095B597 /* meson.build */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = meson.build; sourceTree = ""; }; + 354901732537E0050095B597 /* CInviscidVortexSolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CInviscidVortexSolution.cpp; sourceTree = ""; }; + 354901742537E0050095B597 /* CMMSIncNSSolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CMMSIncNSSolution.cpp; sourceTree = ""; }; + 354901752537E0050095B597 /* CMMSIncEulerSolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CMMSIncEulerSolution.cpp; sourceTree = ""; }; + 354901782537E0050095B597 /* CMMSNSTwoHalfCirclesSolution.mw */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = CMMSNSTwoHalfCirclesSolution.mw; sourceTree = ""; }; + 354901792537E0050095B597 /* CMMSIncEulerSolution.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = CMMSIncEulerSolution.py; sourceTree = ""; }; + 3549017A2537E0050095B597 /* CMMSNSUnitQuadSolution.mw */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = CMMSNSUnitQuadSolution.mw; sourceTree = ""; }; + 3549017B2537E0050095B597 /* CMMSNSTwoHalfSpheresSolution.mw */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = CMMSNSTwoHalfSpheresSolution.mw; sourceTree = ""; }; + 3549017C2537E0050095B597 /* CMMSNSUnitQuadSolutionWallBC.mw */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = CMMSNSUnitQuadSolutionWallBC.mw; sourceTree = ""; }; + 3549017D2537E0050095B597 /* CMMSIncNSSolution.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = CMMSIncNSSolution.py; sourceTree = ""; }; + 3549017E2537E0050095B597 /* CTGVSolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CTGVSolution.cpp; sourceTree = ""; }; + 3549017F2537E0050095B597 /* CMMSNSTwoHalfSpheresSolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CMMSNSTwoHalfSpheresSolution.cpp; sourceTree = ""; }; + 354901802537E0050095B597 /* meson.build */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = meson.build; sourceTree = ""; }; + 354901822537E0050095B597 /* CNSUnitQuadSolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CNSUnitQuadSolution.cpp; sourceTree = ""; }; + 354901832537E0050095B597 /* CRinglebSolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CRinglebSolution.cpp; sourceTree = ""; }; + 354901842537E0050095B597 /* CIncTGVSolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CIncTGVSolution.cpp; sourceTree = ""; }; + 354901852537E0050095B597 /* CMMSNSUnitQuadSolutionWallBC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CMMSNSUnitQuadSolutionWallBC.cpp; sourceTree = ""; }; + 354901862537E0050095B597 /* CVerificationSolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CVerificationSolution.cpp; sourceTree = ""; }; + 354901872537E0050095B597 /* CMMSNSUnitQuadSolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CMMSNSUnitQuadSolution.cpp; sourceTree = ""; }; + 354901882537E0050095B597 /* CMMSNSTwoHalfCirclesSolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CMMSNSTwoHalfCirclesSolution.cpp; sourceTree = ""; }; + 354901892537E0050095B597 /* CUserDefinedSolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CUserDefinedSolution.cpp; sourceTree = ""; }; + 3549018A2537E0050095B597 /* CLinearPartitioner.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CLinearPartitioner.cpp; sourceTree = ""; }; + 3549018B2537E0050095B597 /* C1DInterpolation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = C1DInterpolation.cpp; sourceTree = ""; }; + 3549018C2537E0050095B597 /* printing_toolbox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = printing_toolbox.cpp; sourceTree = ""; }; + 3549018E2537E0050095B597 /* graph_coloring_structure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = graph_coloring_structure.cpp; sourceTree = ""; }; + 3549018F2537E0050095B597 /* meson.build */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = meson.build; sourceTree = ""; }; + 354901962537E0050095B597 /* wall_model.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wall_model.cpp; sourceTree = ""; }; + 354901992537E0050095B597 /* CPrism.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CPrism.cpp; sourceTree = ""; }; + 3549019A2537E0050095B597 /* CTriangle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CTriangle.cpp; sourceTree = ""; }; + 3549019B2537E0050095B597 /* CPyramid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CPyramid.cpp; sourceTree = ""; }; + 3549019C2537E0050095B597 /* CHexahedron.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CHexahedron.cpp; sourceTree = ""; }; + 3549019D2537E0050095B597 /* CQuadrilateral.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CQuadrilateral.cpp; sourceTree = ""; }; + 3549019E2537E0050095B597 /* CPrimalGrid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CPrimalGrid.cpp; sourceTree = ""; }; + 3549019F2537E0050095B597 /* CTetrahedron.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CTetrahedron.cpp; sourceTree = ""; }; + 354901A02537E0050095B597 /* meson.build */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = meson.build; sourceTree = ""; }; + 354901A12537E0050095B597 /* CPrimalGridBoundFEM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CPrimalGridBoundFEM.cpp; sourceTree = ""; }; + 354901A22537E0050095B597 /* CLine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CLine.cpp; sourceTree = ""; }; + 354901A32537E0050095B597 /* CPrimalGridFEM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CPrimalGridFEM.cpp; sourceTree = ""; }; + 354901A42537E0050095B597 /* CVertexMPI.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CVertexMPI.cpp; sourceTree = ""; }; + 354901A52537E0050095B597 /* CMultiGridGeometry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CMultiGridGeometry.cpp; sourceTree = ""; }; + 354901A72537E0050095B597 /* CEdge.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CEdge.cpp; sourceTree = ""; }; + 354901A82537E0050095B597 /* CDualGrid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CDualGrid.cpp; sourceTree = ""; }; + 354901A92537E0050095B597 /* meson.build */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = meson.build; sourceTree = ""; }; + 354901AA2537E0050095B597 /* CVertex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CVertex.cpp; sourceTree = ""; }; + 354901AB2537E0050095B597 /* CPoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CPoint.cpp; sourceTree = ""; }; + 354901AC2537E0050095B597 /* CTurboVertex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CTurboVertex.cpp; sourceTree = ""; }; + 354901AE2537E0050095B597 /* CSU2ASCIIMeshReaderFVM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSU2ASCIIMeshReaderFVM.cpp; sourceTree = ""; }; + 354901AF2537E0050095B597 /* CRectangularMeshReaderFVM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CRectangularMeshReaderFVM.cpp; sourceTree = ""; }; + 354901B02537E0050095B597 /* CBoxMeshReaderFVM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CBoxMeshReaderFVM.cpp; sourceTree = ""; }; + 354901B12537E0050095B597 /* meson.build */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = meson.build; sourceTree = ""; }; + 354901B22537E0050095B597 /* CCGNSMeshReaderFVM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CCGNSMeshReaderFVM.cpp; sourceTree = ""; }; + 354901B32537E0050095B597 /* CMeshReaderFVM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CMeshReaderFVM.cpp; sourceTree = ""; }; + 354901B42537E0050095B597 /* CPhysicalGeometry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CPhysicalGeometry.cpp; sourceTree = ""; }; + 354901B52537E0050095B597 /* meson.build */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = meson.build; sourceTree = ""; }; + 354901B72537E0050095B597 /* CTETRA1.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CTETRA1.cpp; sourceTree = ""; }; + 354901B82537E0050095B597 /* CQUAD4.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CQUAD4.cpp; sourceTree = ""; }; + 354901B92537E0050095B597 /* CPRISM6.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CPRISM6.cpp; sourceTree = ""; }; + 354901BA2537E0050095B597 /* CTRIA1.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CTRIA1.cpp; sourceTree = ""; }; + 354901BB2537E0050095B597 /* CPYRAM5.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CPYRAM5.cpp; sourceTree = ""; }; + 354901BC2537E0050095B597 /* meson.build */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = meson.build; sourceTree = ""; }; + 354901BD2537E0050095B597 /* CHEXA8.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CHEXA8.cpp; sourceTree = ""; }; + 354901BE2537E0050095B597 /* CElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CElement.cpp; sourceTree = ""; }; + 354901BF2537E0050095B597 /* CDummyGeometry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CDummyGeometry.cpp; sourceTree = ""; }; + 354901C02537E0050095B597 /* CGeometry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CGeometry.cpp; sourceTree = ""; }; + 354901C22537E0050095B597 /* CSysSolve_b.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSysSolve_b.cpp; sourceTree = ""; }; + 354901C32537E0050095B597 /* CSysMatrix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSysMatrix.cpp; sourceTree = ""; }; + 354901C42537E0050095B597 /* CSysVector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSysVector.cpp; sourceTree = ""; }; + 354901C52537E0050095B597 /* meson.build */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = meson.build; sourceTree = ""; }; + 354901C62537E0050095B597 /* CSysSolve.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSysSolve.cpp; sourceTree = ""; }; + 354901C72537E0050095B597 /* CPastixWrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CPastixWrapper.cpp; sourceTree = ""; }; + 354901C82537E0050095B597 /* CConfig.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CConfig.cpp; sourceTree = ""; }; + 354902222537E0280095B597 /* definition_structure.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = definition_structure.hpp; sourceTree = ""; }; + 354902232537E0280095B597 /* sgs_model.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = sgs_model.inl; sourceTree = ""; }; + 354902252537E0280095B597 /* CDiscAdjMultizoneDriver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CDiscAdjMultizoneDriver.hpp; sourceTree = ""; }; + 354902262537E0280095B597 /* CDriver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CDriver.hpp; sourceTree = ""; }; + 354902272537E0280095B597 /* CDummyDriver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CDummyDriver.hpp; sourceTree = ""; }; + 354902282537E0280095B597 /* CMultizoneDriver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CMultizoneDriver.hpp; sourceTree = ""; }; + 354902292537E0280095B597 /* CDiscAdjSinglezoneDriver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CDiscAdjSinglezoneDriver.hpp; sourceTree = ""; }; + 3549022A2537E0280095B597 /* CSinglezoneDriver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSinglezoneDriver.hpp; sourceTree = ""; }; + 3549022C2537E0280095B597 /* computeLimiters.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = computeLimiters.hpp; sourceTree = ""; }; + 3549022D2537E0280095B597 /* CLimiterDetails.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CLimiterDetails.hpp; sourceTree = ""; }; + 3549022E2537E0280095B597 /* computeLimiters_impl.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = computeLimiters_impl.hpp; sourceTree = ""; }; + 354902302537E0280095B597 /* CSingleGridIntegration.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSingleGridIntegration.hpp; sourceTree = ""; }; + 354902312537E0280095B597 /* CMultiGridIntegration.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CMultiGridIntegration.hpp; sourceTree = ""; }; + 354902322537E0280095B597 /* CIntegrationFactory.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CIntegrationFactory.hpp; sourceTree = ""; }; + 354902332537E0280095B597 /* CStructuralIntegration.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CStructuralIntegration.hpp; sourceTree = ""; }; + 354902342537E0280095B597 /* CFEM_DG_Integration.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFEM_DG_Integration.hpp; sourceTree = ""; }; + 354902352537E0280095B597 /* CIntegration.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CIntegration.hpp; sourceTree = ""; }; + 354902372537E0280095B597 /* CFlowCompFEMOutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFlowCompFEMOutput.hpp; sourceTree = ""; }; + 354902382537E0280095B597 /* CHeatOutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CHeatOutput.hpp; sourceTree = ""; }; + 3549023A2537E0280095B597 /* CWindowingTools.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CWindowingTools.hpp; sourceTree = ""; }; + 3549023B2537E0280095B597 /* COutputLegacy.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = COutputLegacy.hpp; sourceTree = ""; }; + 3549023C2537E0280095B597 /* CFlowIncOutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFlowIncOutput.hpp; sourceTree = ""; }; + 3549023D2537E0280095B597 /* CAdjHeatOutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CAdjHeatOutput.hpp; sourceTree = ""; }; + 3549023F2537E0280095B597 /* CParaviewFileWriter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CParaviewFileWriter.hpp; sourceTree = ""; }; + 354902402537E0280095B597 /* CTecplotFileWriter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CTecplotFileWriter.hpp; sourceTree = ""; }; + 354902412537E0280095B597 /* CSurfaceFEMDataSorter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSurfaceFEMDataSorter.hpp; sourceTree = ""; }; + 354902422537E0280095B597 /* CSU2MeshFileWriter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSU2MeshFileWriter.hpp; sourceTree = ""; }; + 354902432537E0280095B597 /* CTecplotBinaryFileWriter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CTecplotBinaryFileWriter.hpp; sourceTree = ""; }; + 354902442537E0280095B597 /* CSU2FileWriter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSU2FileWriter.hpp; sourceTree = ""; }; + 354902452537E0280095B597 /* CFVMDataSorter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFVMDataSorter.hpp; sourceTree = ""; }; + 354902462537E0280095B597 /* CSTLFileWriter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSTLFileWriter.hpp; sourceTree = ""; }; + 354902472537E0280095B597 /* CParallelDataSorter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CParallelDataSorter.hpp; sourceTree = ""; }; + 354902482537E0280095B597 /* CFEMDataSorter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFEMDataSorter.hpp; sourceTree = ""; }; + 354902492537E0280095B597 /* CParaviewBinaryFileWriter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CParaviewBinaryFileWriter.hpp; sourceTree = ""; }; + 3549024A2537E0280095B597 /* CParaviewXMLFileWriter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CParaviewXMLFileWriter.hpp; sourceTree = ""; }; + 3549024B2537E0280095B597 /* CParaviewVTMFileWriter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CParaviewVTMFileWriter.hpp; sourceTree = ""; }; + 3549024C2537E0280095B597 /* CSU2BinaryFileWriter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSU2BinaryFileWriter.hpp; sourceTree = ""; }; + 3549024D2537E0280095B597 /* CFileWriter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFileWriter.hpp; sourceTree = ""; }; + 3549024E2537E0280095B597 /* CCSVFileWriter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CCSVFileWriter.hpp; sourceTree = ""; }; + 3549024F2537E0280095B597 /* CSurfaceFVMDataSorter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSurfaceFVMDataSorter.hpp; sourceTree = ""; }; + 354902502537E0280095B597 /* CFlowOutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFlowOutput.hpp; sourceTree = ""; }; + 354902512537E0280095B597 /* CAdjFlowIncOutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CAdjFlowIncOutput.hpp; sourceTree = ""; }; + 354902522537E0280095B597 /* CFlowCompOutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFlowCompOutput.hpp; sourceTree = ""; }; + 354902532537E0280095B597 /* CBaselineOutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CBaselineOutput.hpp; sourceTree = ""; }; + 354902542537E0280095B597 /* COutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = COutput.hpp; sourceTree = ""; }; + 354902552537E0280095B597 /* COutputFactory.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = COutputFactory.hpp; sourceTree = ""; }; + 354902562537E0280095B597 /* CAdjElasticityOutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CAdjElasticityOutput.hpp; sourceTree = ""; }; + 354902572537E0280095B597 /* CMeshOutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CMeshOutput.hpp; sourceTree = ""; }; + 354902582537E0280095B597 /* CElasticityOutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CElasticityOutput.hpp; sourceTree = ""; }; + 3549025A2537E0280095B597 /* CMultizoneOutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CMultizoneOutput.hpp; sourceTree = ""; }; + 3549025D2537E0280095B597 /* CNSSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CNSSolver.hpp; sourceTree = ""; }; + 3549025E2537E0280095B597 /* CDiscAdjSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CDiscAdjSolver.hpp; sourceTree = ""; }; + 3549025F2537E0280095B597 /* CEulerSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CEulerSolver.hpp; sourceTree = ""; }; + 354902602537E0280095B597 /* CFEM_DG_EulerSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFEM_DG_EulerSolver.hpp; sourceTree = ""; }; + 354902612537E0280095B597 /* CFEM_DG_NSSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFEM_DG_NSSolver.hpp; sourceTree = ""; }; + 354902622537E0280095B597 /* CBaselineSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CBaselineSolver.hpp; sourceTree = ""; }; + 354902632537E0280095B597 /* CRadSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CRadSolver.hpp; sourceTree = ""; }; + 354902642537E0280095B597 /* CBaselineSolver_FEM.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CBaselineSolver_FEM.hpp; sourceTree = ""; }; + 354902652537E0280095B597 /* CSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSolver.hpp; sourceTree = ""; }; + 354902662537E0280095B597 /* CMeshSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CMeshSolver.hpp; sourceTree = ""; }; + 354902672537E0280095B597 /* CDiscAdjMeshSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CDiscAdjMeshSolver.hpp; sourceTree = ""; }; + 354902682537E0280095B597 /* CTurbSASolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CTurbSASolver.hpp; sourceTree = ""; }; + 354902692537E0280095B597 /* CAdjNSSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CAdjNSSolver.hpp; sourceTree = ""; }; + 3549026A2537E0280095B597 /* CRadP1Solver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CRadP1Solver.hpp; sourceTree = ""; }; + 3549026B2537E0280095B597 /* CFEASolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFEASolver.hpp; sourceTree = ""; }; + 3549026C2537E0280095B597 /* CTemplateSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CTemplateSolver.hpp; sourceTree = ""; }; + 3549026D2537E0280095B597 /* CHeatSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CHeatSolver.hpp; sourceTree = ""; }; + 3549026E2537E0280095B597 /* CTransLMSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CTransLMSolver.hpp; sourceTree = ""; }; + 3549026F2537E0280095B597 /* CAdjTurbSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CAdjTurbSolver.hpp; sourceTree = ""; }; + 354902702537E0280095B597 /* CSolverFactory.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSolverFactory.hpp; sourceTree = ""; }; + 354902712537E0280095B597 /* CIncNSSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CIncNSSolver.hpp; sourceTree = ""; }; + 354902722537E0280095B597 /* CIncEulerSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CIncEulerSolver.hpp; sourceTree = ""; }; + 354902732537E0280095B597 /* CTurbSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CTurbSolver.hpp; sourceTree = ""; }; + 354902742537E0280095B597 /* CAdjEulerSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CAdjEulerSolver.hpp; sourceTree = ""; }; + 354902752537E0280095B597 /* CTurbSSTSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CTurbSSTSolver.hpp; sourceTree = ""; }; + 354902762537E0280095B597 /* CDiscAdjFEASolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CDiscAdjFEASolver.hpp; sourceTree = ""; }; + 354902772537E0280095B597 /* sgs_model.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = sgs_model.hpp; sourceTree = ""; }; + 3549027A2537E0280095B597 /* nonlinear_models.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = nonlinear_models.hpp; sourceTree = ""; }; + 3549027B2537E0280095B597 /* CFEAElasticity.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFEAElasticity.hpp; sourceTree = ""; }; + 3549027C2537E0280095B597 /* CFEANonlinearElasticity.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFEANonlinearElasticity.hpp; sourceTree = ""; }; + 3549027D2537E0280095B597 /* CFEALinearElasticity.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFEALinearElasticity.hpp; sourceTree = ""; }; + 3549027F2537E0280095B597 /* turb_diffusion.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = turb_diffusion.hpp; sourceTree = ""; }; + 354902802537E0280095B597 /* turb_convection.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = turb_convection.hpp; sourceTree = ""; }; + 354902812537E0280095B597 /* turb_sources.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = turb_sources.hpp; sourceTree = ""; }; + 354902832537E0280095B597 /* adj_convection.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = adj_convection.hpp; sourceTree = ""; }; + 354902842537E0280095B597 /* adj_diffusion.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = adj_diffusion.hpp; sourceTree = ""; }; + 354902852537E0280095B597 /* adj_sources.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = adj_sources.hpp; sourceTree = ""; }; + 354902862537E0280095B597 /* CNumerics.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CNumerics.hpp; sourceTree = ""; }; + 354902872537E0280095B597 /* heat.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = heat.hpp; sourceTree = ""; }; + 354902882537E0280095B597 /* template.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = template.hpp; sourceTree = ""; }; + 354902892537E0280095B597 /* transition.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = transition.hpp; sourceTree = ""; }; + 3549028A2537E0280095B597 /* radiation.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = radiation.hpp; sourceTree = ""; }; + 3549028C2537E0280095B597 /* flow_sources.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = flow_sources.hpp; sourceTree = ""; }; + 3549028E2537E0280095B597 /* fvs.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = fvs.hpp; sourceTree = ""; }; + 3549028F2537E0280095B597 /* hllc.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = hllc.hpp; sourceTree = ""; }; + 354902902537E0280095B597 /* fds.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = fds.hpp; sourceTree = ""; }; + 354902912537E0280095B597 /* cusp.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = cusp.hpp; sourceTree = ""; }; + 354902922537E0280095B597 /* centered.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = centered.hpp; sourceTree = ""; }; + 354902932537E0280095B597 /* roe.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = roe.hpp; sourceTree = ""; }; + 354902942537E0280095B597 /* ausm_slau.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ausm_slau.hpp; sourceTree = ""; }; + 354902952537E0280095B597 /* flow_diffusion.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = flow_diffusion.hpp; sourceTree = ""; }; + 354902972537E0280095B597 /* task_definition.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = task_definition.hpp; sourceTree = ""; }; + 354902992537E0280095B597 /* CFEABoundVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFEABoundVariable.hpp; sourceTree = ""; }; + 3549029A2537E0280095B597 /* CNSVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CNSVariable.hpp; sourceTree = ""; }; + 3549029B2537E0280095B597 /* CTurbSAVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CTurbSAVariable.hpp; sourceTree = ""; }; + 3549029C2537E0280095B597 /* CHeatVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CHeatVariable.hpp; sourceTree = ""; }; + 3549029D2537E0280095B597 /* CRadP1Variable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CRadP1Variable.hpp; sourceTree = ""; }; + 3549029E2537E0280095B597 /* CRadVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CRadVariable.hpp; sourceTree = ""; }; + 3549029F2537E0280095B597 /* CFEAVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFEAVariable.hpp; sourceTree = ""; }; + 354902A02537E0280095B597 /* CEulerVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CEulerVariable.hpp; sourceTree = ""; }; + 354902A12537E0280095B597 /* CMeshVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CMeshVariable.hpp; sourceTree = ""; }; + 354902A22537E0280095B597 /* CDiscAdjMeshBoundVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CDiscAdjMeshBoundVariable.hpp; sourceTree = ""; }; + 354902A32537E0280095B597 /* CIncNSVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CIncNSVariable.hpp; sourceTree = ""; }; + 354902A42537E0280095B597 /* CTurbVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CTurbVariable.hpp; sourceTree = ""; }; + 354902A52537E0280095B597 /* CAdjNSVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CAdjNSVariable.hpp; sourceTree = ""; }; + 354902A62537E0280095B597 /* CTransLMVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CTransLMVariable.hpp; sourceTree = ""; }; + 354902A72537E0280095B597 /* CVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CVariable.hpp; sourceTree = ""; }; + 354902A82537E0280095B597 /* CDiscAdjFEABoundVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CDiscAdjFEABoundVariable.hpp; sourceTree = ""; }; + 354902A92537E0280095B597 /* CMeshBoundVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CMeshBoundVariable.hpp; sourceTree = ""; }; + 354902AB2537E0280095B597 /* CBaselineVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CBaselineVariable.hpp; sourceTree = ""; }; + 354902AC2537E0280095B597 /* CAdjTurbVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CAdjTurbVariable.hpp; sourceTree = ""; }; + 354902AD2537E0280095B597 /* CAdjEulerVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CAdjEulerVariable.hpp; sourceTree = ""; }; + 354902AE2537E0280095B597 /* CTurbSSTVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CTurbSSTVariable.hpp; sourceTree = ""; }; + 354902AF2537E0280095B597 /* CMeshElement.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CMeshElement.hpp; sourceTree = ""; }; + 354902B02537E0280095B597 /* CDiscAdjVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CDiscAdjVariable.hpp; sourceTree = ""; }; + 354902B12537E0280095B597 /* CIncEulerVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CIncEulerVariable.hpp; sourceTree = ""; }; + 354902B22537E0280095B597 /* SU2_CFD.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = SU2_CFD.hpp; sourceTree = ""; }; + 354902B42537E0280095B597 /* CMarkerProfileReaderFVM.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CMarkerProfileReaderFVM.hpp; sourceTree = ""; }; + 354902B52537E0280095B597 /* task_definition.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = task_definition.inl; sourceTree = ""; }; + 354902B82537E0280095B597 /* computeGradientsLeastSquares.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = computeGradientsLeastSquares.hpp; sourceTree = ""; }; + 354902B92537E0280095B597 /* computeGradientsGreenGauss.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = computeGradientsGreenGauss.hpp; sourceTree = ""; }; + 354902BD2537E0280095B597 /* CConjugateHeatInterface.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CConjugateHeatInterface.hpp; sourceTree = ""; }; + 354902BE2537E0280095B597 /* CInterface.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CInterface.hpp; sourceTree = ""; }; + 354902C02537E0280095B597 /* CMixingPlaneInterface.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CMixingPlaneInterface.hpp; sourceTree = ""; }; + 354902C12537E0280095B597 /* CSlidingInterface.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSlidingInterface.hpp; sourceTree = ""; }; + 354902C22537E0280095B597 /* CConservativeVarsInterface.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CConservativeVarsInterface.hpp; sourceTree = ""; }; + 354902C42537E0280095B597 /* CFlowTractionInterface.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFlowTractionInterface.hpp; sourceTree = ""; }; + 354902C52537E0280095B597 /* CDisplacementsInterface.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CDisplacementsInterface.hpp; sourceTree = ""; }; + 354902C62537E0280095B597 /* CDiscAdjFlowTractionInterface.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CDiscAdjFlowTractionInterface.hpp; sourceTree = ""; }; + 354902C92537E0280095B597 /* CMarkerProfileReaderFVM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CMarkerProfileReaderFVM.cpp; sourceTree = ""; }; + 354902CA2537E0280095B597 /* python_wrapper_structure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = python_wrapper_structure.cpp; sourceTree = ""; }; + 354902CF2537E0280095B597 /* CSinglezoneDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSinglezoneDriver.cpp; sourceTree = ""; }; + 354902D02537E0280095B597 /* CDiscAdjSinglezoneDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CDiscAdjSinglezoneDriver.cpp; sourceTree = ""; }; + 354902D12537E0280095B597 /* CDiscAdjMultizoneDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CDiscAdjMultizoneDriver.cpp; sourceTree = ""; }; + 354902D22537E0280095B597 /* CDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CDriver.cpp; sourceTree = ""; }; + 354902D32537E0280095B597 /* CDummyDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CDummyDriver.cpp; sourceTree = ""; }; + 354902D42537E0280095B597 /* CMultizoneDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CMultizoneDriver.cpp; sourceTree = ""; }; + 354902D72537E0280095B597 /* CLimiterDetails.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CLimiterDetails.cpp; sourceTree = ""; }; + 354902D92537E0280095B597 /* CFEM_DG_Integration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CFEM_DG_Integration.cpp; sourceTree = ""; }; + 354902DA2537E0280095B597 /* CIntegration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CIntegration.cpp; sourceTree = ""; }; + 354902DB2537E0280095B597 /* CStructuralIntegration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CStructuralIntegration.cpp; sourceTree = ""; }; + 354902DC2537E0280095B597 /* CSingleGridIntegration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSingleGridIntegration.cpp; sourceTree = ""; }; + 354902DD2537E0280095B597 /* CMultiGridIntegration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CMultiGridIntegration.cpp; sourceTree = ""; }; + 354902DE2537E0280095B597 /* CIntegrationFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CIntegrationFactory.cpp; sourceTree = ""; }; + 354902E22537E0280095B597 /* COutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = COutput.cpp; sourceTree = ""; }; + 354902E32537E0280095B597 /* COutputFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = COutputFactory.cpp; sourceTree = ""; }; + 354902E52537E0280095B597 /* CWindowingTools.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CWindowingTools.cpp; sourceTree = ""; }; + 354902E62537E0280095B597 /* CAdjElasticityOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAdjElasticityOutput.cpp; sourceTree = ""; }; + 354902E72537E0280095B597 /* CElasticityOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CElasticityOutput.cpp; sourceTree = ""; }; + 354902E82537E0280095B597 /* CMeshOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CMeshOutput.cpp; sourceTree = ""; }; + 354902E92537E0280095B597 /* CMultizoneOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CMultizoneOutput.cpp; sourceTree = ""; }; + 354902EA2537E0280095B597 /* CFlowOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CFlowOutput.cpp; sourceTree = ""; }; + 354902EB2537E0280095B597 /* output_structure_legacy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = output_structure_legacy.cpp; sourceTree = ""; }; + 354902ED2537E0280095B597 /* CCSVFileWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CCSVFileWriter.cpp; sourceTree = ""; }; + 354902EE2537E0280095B597 /* CSurfaceFVMDataSorter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSurfaceFVMDataSorter.cpp; sourceTree = ""; }; + 354902EF2537E0280095B597 /* CParallelFileWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CParallelFileWriter.cpp; sourceTree = ""; }; + 354902F02537E0280095B597 /* CSTLFileWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSTLFileWriter.cpp; sourceTree = ""; }; + 354902F12537E0280095B597 /* CParallelDataSorter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CParallelDataSorter.cpp; sourceTree = ""; }; + 354902F22537E0280095B597 /* CParaviewBinaryFileWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CParaviewBinaryFileWriter.cpp; sourceTree = ""; }; + 354902F32537E0280095B597 /* CFEMDataSorter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CFEMDataSorter.cpp; sourceTree = ""; }; + 354902F42537E0280095B597 /* CParaviewXMLFileWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CParaviewXMLFileWriter.cpp; sourceTree = ""; }; + 354902F52537E0280095B597 /* CParaviewVTMFileWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CParaviewVTMFileWriter.cpp; sourceTree = ""; }; + 354902F62537E0280095B597 /* CSU2BinaryFileWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSU2BinaryFileWriter.cpp; sourceTree = ""; }; + 354902F72537E0280095B597 /* CTecplotBinaryFileWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CTecplotBinaryFileWriter.cpp; sourceTree = ""; }; + 354902F82537E0280095B597 /* CSU2FileWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSU2FileWriter.cpp; sourceTree = ""; }; + 354902F92537E0280095B597 /* CFVMDataSorter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CFVMDataSorter.cpp; sourceTree = ""; }; + 354902FA2537E0280095B597 /* CParaviewFileWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CParaviewFileWriter.cpp; sourceTree = ""; }; + 354902FB2537E0280095B597 /* CSurfaceFEMDataSorter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSurfaceFEMDataSorter.cpp; sourceTree = ""; }; + 354902FC2537E0280095B597 /* CTecplotFileWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CTecplotFileWriter.cpp; sourceTree = ""; }; + 354902FD2537E0280095B597 /* CSU2MeshFileWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSU2MeshFileWriter.cpp; sourceTree = ""; }; + 354902FE2537E0280095B597 /* CAdjFlowIncOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAdjFlowIncOutput.cpp; sourceTree = ""; }; + 354902FF2537E0280095B597 /* CFlowCompOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CFlowCompOutput.cpp; sourceTree = ""; }; + 354903002537E0280095B597 /* CBaselineOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CBaselineOutput.cpp; sourceTree = ""; }; + 354903012537E0280095B597 /* output_physics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = output_physics.cpp; sourceTree = ""; }; + 354903022537E0280095B597 /* CFlowIncOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CFlowIncOutput.cpp; sourceTree = ""; }; + 354903032537E0280095B597 /* CAdjHeatOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAdjHeatOutput.cpp; sourceTree = ""; }; + 354903042537E0280095B597 /* CFlowCompFEMOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CFlowCompFEMOutput.cpp; sourceTree = ""; }; + 354903052537E0280095B597 /* CAdjFlowCompOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAdjFlowCompOutput.cpp; sourceTree = ""; }; + 354903062537E0280095B597 /* CHeatOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CHeatOutput.cpp; sourceTree = ""; }; + 354903082537E0280095B597 /* CIncEulerSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CIncEulerSolver.cpp; sourceTree = ""; }; + 354903092537E0280095B597 /* CTurbSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CTurbSolver.cpp; sourceTree = ""; }; + 3549030A2537E0280095B597 /* CAdjEulerSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAdjEulerSolver.cpp; sourceTree = ""; }; + 3549030B2537E0280095B597 /* CTurbSSTSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CTurbSSTSolver.cpp; sourceTree = ""; }; + 3549030C2537E0280095B597 /* CDiscAdjFEASolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CDiscAdjFEASolver.cpp; sourceTree = ""; }; + 3549030D2537E0280095B597 /* CRadP1Solver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CRadP1Solver.cpp; sourceTree = ""; }; + 3549030E2537E0280095B597 /* CFEASolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CFEASolver.cpp; sourceTree = ""; }; + 3549030F2537E0280095B597 /* CHeatSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CHeatSolver.cpp; sourceTree = ""; }; + 354903102537E0280095B597 /* CTemplateSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CTemplateSolver.cpp; sourceTree = ""; }; + 354903112537E0280095B597 /* CTransLMSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CTransLMSolver.cpp; sourceTree = ""; }; + 354903122537E0280095B597 /* CAdjTurbSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAdjTurbSolver.cpp; sourceTree = ""; }; + 354903132537E0280095B597 /* CIncNSSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CIncNSSolver.cpp; sourceTree = ""; }; + 354903142537E0280095B597 /* CSolverFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSolverFactory.cpp; sourceTree = ""; }; + 354903152537E0280095B597 /* CBaselineSolver_FEM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CBaselineSolver_FEM.cpp; sourceTree = ""; }; + 354903162537E0280095B597 /* CSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSolver.cpp; sourceTree = ""; }; + 354903172537E0280095B597 /* CMeshSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CMeshSolver.cpp; sourceTree = ""; }; + 354903182537E0280095B597 /* CDiscAdjMeshSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CDiscAdjMeshSolver.cpp; sourceTree = ""; }; + 354903192537E0280095B597 /* CTurbSASolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CTurbSASolver.cpp; sourceTree = ""; }; + 3549031A2537E0280095B597 /* CAdjNSSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAdjNSSolver.cpp; sourceTree = ""; }; + 3549031B2537E0280095B597 /* CNSSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CNSSolver.cpp; sourceTree = ""; }; + 3549031C2537E0280095B597 /* CDiscAdjSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CDiscAdjSolver.cpp; sourceTree = ""; }; + 3549031D2537E0280095B597 /* CEulerSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CEulerSolver.cpp; sourceTree = ""; }; + 3549031E2537E0280095B597 /* CFEM_DG_EulerSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CFEM_DG_EulerSolver.cpp; sourceTree = ""; }; + 3549031F2537E0280095B597 /* CFEM_DG_NSSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CFEM_DG_NSSolver.cpp; sourceTree = ""; }; + 354903202537E0280095B597 /* CBaselineSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CBaselineSolver.cpp; sourceTree = ""; }; + 354903212537E0280095B597 /* CRadSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CRadSolver.cpp; sourceTree = ""; }; + 354903222537E0280095B597 /* SU2_CFD.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SU2_CFD.cpp; sourceTree = ""; }; + 354903232537E0280095B597 /* meson.build */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = meson.build; sourceTree = ""; }; + 354903252537E0280095B597 /* template.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = template.cpp; sourceTree = ""; }; + 354903272537E0280095B597 /* CFEANonlinearElasticity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CFEANonlinearElasticity.cpp; sourceTree = ""; }; + 354903282537E0280095B597 /* CFEALinearElasticity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CFEALinearElasticity.cpp; sourceTree = ""; }; + 354903292537E0280095B597 /* CFEAElasticity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CFEAElasticity.cpp; sourceTree = ""; }; + 3549032A2537E0280095B597 /* nonlinear_models.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = nonlinear_models.cpp; sourceTree = ""; }; + 3549032B2537E0280095B597 /* transition.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = transition.cpp; sourceTree = ""; }; + 3549032C2537E0280095B597 /* radiation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = radiation.cpp; sourceTree = ""; }; + 3549032E2537E0280095B597 /* turb_convection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = turb_convection.cpp; sourceTree = ""; }; + 3549032F2537E0280095B597 /* turb_sources.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = turb_sources.cpp; sourceTree = ""; }; + 354903302537E0280095B597 /* turb_diffusion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = turb_diffusion.cpp; sourceTree = ""; }; + 354903312537E0280095B597 /* heat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = heat.cpp; sourceTree = ""; }; + 354903332537E0280095B597 /* adj_diffusion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = adj_diffusion.cpp; sourceTree = ""; }; + 354903342537E0280095B597 /* adj_sources.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = adj_sources.cpp; sourceTree = ""; }; + 354903352537E0280095B597 /* adj_convection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = adj_convection.cpp; sourceTree = ""; }; + 354903362537E0280095B597 /* CNumerics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CNumerics.cpp; sourceTree = ""; }; + 354903382537E0280095B597 /* flow_diffusion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = flow_diffusion.cpp; sourceTree = ""; }; + 3549033A2537E0280095B597 /* ausm_slau.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ausm_slau.cpp; sourceTree = ""; }; + 3549033B2537E0280095B597 /* cusp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cusp.cpp; sourceTree = ""; }; + 3549033C2537E0280095B597 /* centered.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = centered.cpp; sourceTree = ""; }; + 3549033D2537E0280095B597 /* roe.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = roe.cpp; sourceTree = ""; }; + 3549033E2537E0280095B597 /* fds.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fds.cpp; sourceTree = ""; }; + 3549033F2537E0280095B597 /* fvs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fvs.cpp; sourceTree = ""; }; + 354903402537E0280095B597 /* hllc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hllc.cpp; sourceTree = ""; }; + 354903412537E0280095B597 /* flow_sources.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = flow_sources.cpp; sourceTree = ""; }; + 354903432537E0280095B597 /* CTurbSSTVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CTurbSSTVariable.cpp; sourceTree = ""; }; + 354903442537E0280095B597 /* CMeshElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CMeshElement.cpp; sourceTree = ""; }; + 354903452537E0280095B597 /* CDiscAdjVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CDiscAdjVariable.cpp; sourceTree = ""; }; + 354903462537E0280095B597 /* CIncEulerVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CIncEulerVariable.cpp; sourceTree = ""; }; + 354903472537E0280095B597 /* CVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CVariable.cpp; sourceTree = ""; }; + 354903482537E0280095B597 /* CMeshBoundVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CMeshBoundVariable.cpp; sourceTree = ""; }; + 354903492537E0280095B597 /* CDiscAdjFEABoundVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CDiscAdjFEABoundVariable.cpp; sourceTree = ""; }; + 3549034B2537E0280095B597 /* CBaselineVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CBaselineVariable.cpp; sourceTree = ""; }; + 3549034C2537E0280095B597 /* CAdjTurbVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAdjTurbVariable.cpp; sourceTree = ""; }; + 3549034D2537E0280095B597 /* CAdjEulerVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAdjEulerVariable.cpp; sourceTree = ""; }; + 3549034E2537E0280095B597 /* CEulerVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CEulerVariable.cpp; sourceTree = ""; }; + 3549034F2537E0280095B597 /* CMeshVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CMeshVariable.cpp; sourceTree = ""; }; + 354903502537E0280095B597 /* CDiscAdjMeshBoundVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CDiscAdjMeshBoundVariable.cpp; sourceTree = ""; }; + 354903512537E0280095B597 /* CIncNSVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CIncNSVariable.cpp; sourceTree = ""; }; + 354903522537E0280095B597 /* CTurbVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CTurbVariable.cpp; sourceTree = ""; }; + 354903532537E0280095B597 /* CAdjNSVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAdjNSVariable.cpp; sourceTree = ""; }; + 354903542537E0280095B597 /* CTransLMVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CTransLMVariable.cpp; sourceTree = ""; }; + 354903552537E0280095B597 /* CFEABoundVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CFEABoundVariable.cpp; sourceTree = ""; }; + 354903562537E0280095B597 /* CNSVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CNSVariable.cpp; sourceTree = ""; }; + 354903572537E0280095B597 /* CHeatVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CHeatVariable.cpp; sourceTree = ""; }; + 354903582537E0280095B597 /* CTurbSAVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CTurbSAVariable.cpp; sourceTree = ""; }; + 354903592537E0280095B597 /* CRadP1Variable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CRadP1Variable.cpp; sourceTree = ""; }; + 3549035A2537E0280095B597 /* CRadVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CRadVariable.cpp; sourceTree = ""; }; + 3549035B2537E0280095B597 /* CFEAVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CFEAVariable.cpp; sourceTree = ""; }; + 3549035C2537E0280095B597 /* definition_structure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = definition_structure.cpp; sourceTree = ""; }; + 354903602537E0280095B597 /* CConjugateHeatInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CConjugateHeatInterface.cpp; sourceTree = ""; }; + 354903612537E0280095B597 /* CInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CInterface.cpp; sourceTree = ""; }; + 354903632537E0280095B597 /* CConservativeVarsInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CConservativeVarsInterface.cpp; sourceTree = ""; }; + 354903642537E0280095B597 /* CSlidingInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSlidingInterface.cpp; sourceTree = ""; }; + 354903652537E0280095B597 /* CMixingPlaneInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CMixingPlaneInterface.cpp; sourceTree = ""; }; + 354903672537E0280095B597 /* CDisplacementsInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CDisplacementsInterface.cpp; sourceTree = ""; }; + 354903682537E0280095B597 /* CDiscAdjFlowTractionInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CDiscAdjFlowTractionInterface.cpp; sourceTree = ""; }; + 354903692537E0280095B597 /* CFlowTractionInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CFlowTractionInterface.cpp; sourceTree = ""; }; + 354903F82537E2C50095B597 /* CMultiGridGeometry.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CMultiGridGeometry.hpp; sourceTree = ""; }; + 354903F92537E2C50095B597 /* CGeometry.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CGeometry.hpp; sourceTree = ""; }; + 354903FA2537E2C50095B597 /* CPhysicalGeometry.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CPhysicalGeometry.hpp; sourceTree = ""; }; + 354903FB2537E2C50095B597 /* CDummyGeometry.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CDummyGeometry.hpp; sourceTree = ""; }; + 3569BC6525819526004B4612 /* config_template.cfg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = config_template.cfg; path = ../../config_template.cfg; sourceTree = ""; }; + 357BEE46256D589B00423D14 /* CNEMOEulerSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CNEMOEulerSolver.cpp; sourceTree = ""; }; + 357BEE47256D589B00423D14 /* CNEMONSSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CNEMONSSolver.cpp; sourceTree = ""; }; + 357BEE4C256D592C00423D14 /* CPengRobinson.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CPengRobinson.cpp; sourceTree = ""; }; + 357BEE4D256D592C00423D14 /* CSU2TCLib.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSU2TCLib.cpp; sourceTree = ""; }; + 357BEE4E256D592C00423D14 /* CIdealGas.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CIdealGas.cpp; sourceTree = ""; }; + 357BEE4F256D592C00423D14 /* CFluidModel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CFluidModel.cpp; sourceTree = ""; }; + 357BEE50256D592C00423D14 /* CNEMOGas.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CNEMOGas.cpp; sourceTree = ""; }; + 357BEE51256D592C00423D14 /* CVanDerWaalsGas.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CVanDerWaalsGas.cpp; sourceTree = ""; }; + 357BEE52256D592C00423D14 /* CMutationTCLib.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CMutationTCLib.cpp; sourceTree = ""; }; + 357BEE5B256D59AA00423D14 /* CADTElemClass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CADTElemClass.cpp; sourceTree = ""; }; + 357BEE5C256D59AA00423D14 /* meson.build */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = meson.build; sourceTree = ""; }; + 357BEE5D256D59AA00423D14 /* CADTPointsOnlyClass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CADTPointsOnlyClass.cpp; sourceTree = ""; }; + 357BEE5E256D59AA00423D14 /* CADTBaseClass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CADTBaseClass.cpp; sourceTree = ""; }; + 357BEE60256D59AA00423D14 /* ad_structure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ad_structure.cpp; sourceTree = ""; }; + 357BEE62256D59AA00423D14 /* fem_standard_element.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fem_standard_element.cpp; sourceTree = ""; }; + 357BEE63256D59AA00423D14 /* geometry_structure_fem_part.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = geometry_structure_fem_part.cpp; sourceTree = ""; }; + 357BEE64256D59AA00423D14 /* fem_gauss_jacobi_quadrature.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fem_gauss_jacobi_quadrature.cpp; sourceTree = ""; }; + 357BEE65256D59AA00423D14 /* fem_work_estimate_metis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fem_work_estimate_metis.cpp; sourceTree = ""; }; + 357BEE66256D59AA00423D14 /* fem_integration_rules.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fem_integration_rules.cpp; sourceTree = ""; }; + 357BEE67256D59AA00423D14 /* meson.build */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = meson.build; sourceTree = ""; }; + 357BEE68256D59AA00423D14 /* fem_geometry_structure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fem_geometry_structure.cpp; sourceTree = ""; }; + 357BEE69256D59AA00423D14 /* fem_cgns_elements.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fem_cgns_elements.cpp; sourceTree = ""; }; + 357BEE6A256D59AA00423D14 /* fem_wall_distance.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fem_wall_distance.cpp; sourceTree = ""; }; + 357BEE78256D6F7500423D14 /* ad_structure.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ad_structure.hpp; sourceTree = ""; }; + 357BEE79256D6F7500423D14 /* datatype_structure.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = datatype_structure.hpp; sourceTree = ""; }; + 357BEE7B256D6F7500423D14 /* fem_cgns_elements.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = fem_cgns_elements.hpp; sourceTree = ""; }; + 357BEE7C256D6F7500423D14 /* fem_geometry_structure.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = fem_geometry_structure.hpp; sourceTree = ""; }; + 357BEE7D256D6F7500423D14 /* fem_standard_element.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = fem_standard_element.hpp; sourceTree = ""; }; + 357BEE7E256D6F7500423D14 /* geometry_structure_fem_part.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = geometry_structure_fem_part.hpp; sourceTree = ""; }; + 357BEE7F256D6F7500423D14 /* fem_gauss_jacobi_quadrature.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = fem_gauss_jacobi_quadrature.hpp; sourceTree = ""; }; + 357BEE81256D6F7500423D14 /* CADTPointsOnlyClass.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CADTPointsOnlyClass.hpp; sourceTree = ""; }; + 357BEE82256D6F7500423D14 /* CADTBaseClass.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CADTBaseClass.hpp; sourceTree = ""; }; + 357BEE83256D6F7500423D14 /* CBBoxTargetClass.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CBBoxTargetClass.hpp; sourceTree = ""; }; + 357BEE84256D6F7500423D14 /* CADTNodeClass.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CADTNodeClass.hpp; sourceTree = ""; }; + 357BEE85256D6F7500423D14 /* CADTElemClass.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CADTElemClass.hpp; sourceTree = ""; }; + 357BEE86256D6F7500423D14 /* CADTComparePointClass.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CADTComparePointClass.hpp; sourceTree = ""; }; + 357BEE88256D6F7500423D14 /* CVertexMap.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CVertexMap.hpp; sourceTree = ""; }; + 357BEE89256D6F7500423D14 /* container_decorators.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = container_decorators.hpp; sourceTree = ""; }; + 357BEE8A256D6F7500423D14 /* CFastFindAndEraseQueue.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFastFindAndEraseQueue.hpp; sourceTree = ""; }; + 357BEE8B256D6F7500423D14 /* C2DContainer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = C2DContainer.hpp; sourceTree = ""; }; + 357BEE8D256D6F7500423D14 /* CBSplineBlending.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CBSplineBlending.hpp; sourceTree = ""; }; + 357BEE8E256D6F7500423D14 /* CFreeFormBlending.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFreeFormBlending.hpp; sourceTree = ""; }; + 357BEE8F256D6F7500423D14 /* CGridMovement.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CGridMovement.hpp; sourceTree = ""; }; + 357BEE90256D6F7500423D14 /* CBezierBlending.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CBezierBlending.hpp; sourceTree = ""; }; + 357BEE91256D6F7500423D14 /* CSurfaceMovement.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSurfaceMovement.hpp; sourceTree = ""; }; + 357BEE92256D6F7500423D14 /* CVolumetricMovement.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CVolumetricMovement.hpp; sourceTree = ""; }; + 357BEE93256D6F7500423D14 /* CFreeFormDefBox.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFreeFormDefBox.hpp; sourceTree = ""; }; + 357BEE94256D6F8900423D14 /* vector_expressions.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = vector_expressions.hpp; sourceTree = ""; }; + 357BEE95256D6FB700423D14 /* CNEMOEulerSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CNEMOEulerSolver.hpp; sourceTree = ""; }; + 357BEE96256D6FB700423D14 /* CFVMFlowSolverBase.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CFVMFlowSolverBase.inl; sourceTree = ""; }; + 357BEE97256D6FB700423D14 /* CFVMFlowSolverBase.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFVMFlowSolverBase.hpp; sourceTree = ""; }; + 357BEE98256D6FB700423D14 /* CNEMONSSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CNEMONSSolver.hpp; sourceTree = ""; }; + 357BEE9A256D706900423D14 /* CIncIdealGasPolynomial.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CIncIdealGasPolynomial.hpp; sourceTree = ""; }; + 357BEE9B256D706900423D14 /* CConductivityModel.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CConductivityModel.hpp; sourceTree = ""; }; + 357BEE9C256D706900423D14 /* CIncIdealGas.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CIncIdealGas.hpp; sourceTree = ""; }; + 357BEE9D256D706900423D14 /* CConstantViscosity.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CConstantViscosity.hpp; sourceTree = ""; }; + 357BEE9E256D706900423D14 /* CConstantConductivityRANS.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CConstantConductivityRANS.hpp; sourceTree = ""; }; + 357BEE9F256D706900423D14 /* CMutationTCLib.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CMutationTCLib.hpp; sourceTree = ""; }; + 357BEEA0256D706900423D14 /* CConstantPrandtl.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CConstantPrandtl.hpp; sourceTree = ""; }; + 357BEEA1256D706900423D14 /* CSutherland.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSutherland.hpp; sourceTree = ""; }; + 357BEEA2256D706900423D14 /* CConstantDensity.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CConstantDensity.hpp; sourceTree = ""; }; + 357BEEA3256D706900423D14 /* CNEMOGas.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CNEMOGas.hpp; sourceTree = ""; }; + 357BEEA4256D706900423D14 /* CConstantConductivity.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CConstantConductivity.hpp; sourceTree = ""; }; + 357BEEA5256D706900423D14 /* CPolynomialConductivity.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CPolynomialConductivity.hpp; sourceTree = ""; }; + 357BEEA6256D706900423D14 /* CVanDerWaalsGas.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CVanDerWaalsGas.hpp; sourceTree = ""; }; + 357BEEA7256D706900423D14 /* CViscosityModel.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CViscosityModel.hpp; sourceTree = ""; }; + 357BEEA8256D706900423D14 /* CSU2TCLib.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSU2TCLib.hpp; sourceTree = ""; }; + 357BEEA9256D706900423D14 /* CPolynomialConductivityRANS.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CPolynomialConductivityRANS.hpp; sourceTree = ""; }; + 357BEEAA256D706900423D14 /* CIdealGas.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CIdealGas.hpp; sourceTree = ""; }; + 357BEEAB256D706900423D14 /* CConstantPrandtlRANS.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CConstantPrandtlRANS.hpp; sourceTree = ""; }; + 357BEEAC256D706900423D14 /* CFluidModel.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFluidModel.hpp; sourceTree = ""; }; + 357BEEAD256D706900423D14 /* CPengRobinson.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CPengRobinson.hpp; sourceTree = ""; }; + 357BEEAE256D706900423D14 /* CPolynomialViscosity.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CPolynomialViscosity.hpp; sourceTree = ""; }; + 357BEEB0256D708200423D14 /* CIteration.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CIteration.hpp; sourceTree = ""; }; + 357BEEB1256D708200423D14 /* CDiscAdjFEAIteration.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CDiscAdjFEAIteration.hpp; sourceTree = ""; }; + 357BEEB2256D708200423D14 /* CFEAIteration.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFEAIteration.hpp; sourceTree = ""; }; + 357BEEB3256D708200423D14 /* CFEMFluidIteration.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFEMFluidIteration.hpp; sourceTree = ""; }; + 357BEEB4256D708200423D14 /* CFluidIteration.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFluidIteration.hpp; sourceTree = ""; }; + 357BEEB5256D708200423D14 /* CDiscAdjHeatIteration.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CDiscAdjHeatIteration.hpp; sourceTree = ""; }; + 357BEEB6256D708200423D14 /* CIterationFactory.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CIterationFactory.hpp; sourceTree = ""; }; + 357BEEB7256D708200423D14 /* CHeatIteration.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CHeatIteration.hpp; sourceTree = ""; }; + 357BEEB8256D708200423D14 /* CTurboIteration.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CTurboIteration.hpp; sourceTree = ""; }; + 357BEEB9256D708200423D14 /* CDiscAdjFluidIteration.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CDiscAdjFluidIteration.hpp; sourceTree = ""; }; + 357BEEBA256D708200423D14 /* CAdjFluidIteration.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CAdjFluidIteration.hpp; sourceTree = ""; }; + 357BEEBC256D70B900423D14 /* CNumericsSIMD.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CNumericsSIMD.cpp; sourceTree = ""; }; + 357BEEBD256D70B900423D14 /* CNumericsSIMD.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CNumericsSIMD.hpp; sourceTree = ""; }; + 357BEEBE256D70B900423D14 /* util.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = util.hpp; sourceTree = ""; }; + 357BEEC1256D70B900423D14 /* viscous_fluxes.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = viscous_fluxes.hpp; sourceTree = ""; }; + 357BEEC2256D70B900423D14 /* common.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = common.hpp; sourceTree = ""; }; + 357BEEC3256D70B900423D14 /* variables.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = variables.hpp; sourceTree = ""; }; + 357BEEC5256D70B900423D14 /* centered.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = centered.hpp; sourceTree = ""; }; + 357BEEC6256D70B900423D14 /* roe.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = roe.hpp; sourceTree = ""; }; + 357BEEC7256D70B900423D14 /* common.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = common.hpp; sourceTree = ""; }; + 357BEEC9256D70DC00423D14 /* CNEMOCompOutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CNEMOCompOutput.hpp; sourceTree = ""; }; + 357BEECB256D711C00423D14 /* CAdjFluidIteration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAdjFluidIteration.cpp; sourceTree = ""; }; + 357BEECC256D711C00423D14 /* CIterationFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CIterationFactory.cpp; sourceTree = ""; }; + 357BEECD256D711C00423D14 /* CHeatIteration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CHeatIteration.cpp; sourceTree = ""; }; + 357BEECE256D711C00423D14 /* CTurboIteration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CTurboIteration.cpp; sourceTree = ""; }; + 357BEECF256D711C00423D14 /* CDiscAdjFluidIteration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CDiscAdjFluidIteration.cpp; sourceTree = ""; }; + 357BEED0256D711C00423D14 /* CFEMFluidIteration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CFEMFluidIteration.cpp; sourceTree = ""; }; + 357BEED1256D711C00423D14 /* CFluidIteration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CFluidIteration.cpp; sourceTree = ""; }; + 357BEED2256D711C00423D14 /* CDiscAdjHeatIteration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CDiscAdjHeatIteration.cpp; sourceTree = ""; }; + 357BEED3256D711C00423D14 /* CIteration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CIteration.cpp; sourceTree = ""; }; + 357BEED4256D711C00423D14 /* CDiscAdjFEAIteration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CDiscAdjFEAIteration.cpp; sourceTree = ""; }; + 357BEED5256D711C00423D14 /* CFEAIteration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CFEAIteration.cpp; sourceTree = ""; }; + 357BEEE1256D712600423D14 /* CNEMOCompOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CNEMOCompOutput.cpp; sourceTree = ""; }; + 357BEEE3256D716400423D14 /* CNEMOEulerVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CNEMOEulerVariable.cpp; sourceTree = ""; }; + 357BEEE4256D716400423D14 /* CNEMONSVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CNEMONSVariable.cpp; sourceTree = ""; }; + 357BEEE7256D717900423D14 /* CNEMOEulerVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CNEMOEulerVariable.hpp; sourceTree = ""; }; + 357BEEE8256D717900423D14 /* CNEMONSVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CNEMONSVariable.hpp; sourceTree = ""; }; + 357BEEEB256D71E100423D14 /* lax.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lax.cpp; sourceTree = ""; }; + 357BEEEC256D71E100423D14 /* ausmpwplus.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ausmpwplus.cpp; sourceTree = ""; }; + 357BEEED256D71E100423D14 /* roe.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = roe.cpp; sourceTree = ""; }; + 357BEEEE256D71E100423D14 /* ausmplusup2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ausmplusup2.cpp; sourceTree = ""; }; + 357BEEEF256D71E100423D14 /* ausm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ausm.cpp; sourceTree = ""; }; + 357BEEF0256D71E100423D14 /* msw.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = msw.cpp; sourceTree = ""; }; + 357BEEF1256D71E100423D14 /* NEMO_sources.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NEMO_sources.cpp; sourceTree = ""; }; + 357BEEF2256D71E100423D14 /* NEMO_diffusion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NEMO_diffusion.cpp; sourceTree = ""; }; + 357BEEF3256D71E100423D14 /* CNEMONumerics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CNEMONumerics.cpp; sourceTree = ""; }; + 357BEEFE256D71ED00423D14 /* NEMO_sources.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = NEMO_sources.hpp; sourceTree = ""; }; + 357BEEFF256D71ED00423D14 /* NEMO_diffusion.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = NEMO_diffusion.hpp; sourceTree = ""; }; + 357BEF00256D71ED00423D14 /* CNEMONumerics.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CNEMONumerics.hpp; sourceTree = ""; }; + 357BEF02256D71ED00423D14 /* msw.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = msw.hpp; sourceTree = ""; }; + 357BEF03256D71ED00423D14 /* ausm.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ausm.hpp; sourceTree = ""; }; + 357BEF04256D71ED00423D14 /* roe.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = roe.hpp; sourceTree = ""; }; + 357BEF05256D71ED00423D14 /* ausmplusup2.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ausmplusup2.hpp; sourceTree = ""; }; + 357BEF06256D71ED00423D14 /* ausmpwplus.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ausmpwplus.hpp; sourceTree = ""; }; + 357BEF07256D71ED00423D14 /* lax.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = lax.hpp; sourceTree = ""; }; + 357BEF09256D722500423D14 /* CSurfaceMovement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSurfaceMovement.cpp; sourceTree = ""; }; + 357BEF0A256D722500423D14 /* CVolumetricMovement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CVolumetricMovement.cpp; sourceTree = ""; }; + 357BEF0B256D722500423D14 /* CFreeFormDefBox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CFreeFormDefBox.cpp; sourceTree = ""; }; + 357BEF0C256D722500423D14 /* CBezierBlending.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CBezierBlending.cpp; sourceTree = ""; }; + 357BEF0D256D722500423D14 /* meson.build */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = meson.build; sourceTree = ""; }; + 357BEF0E256D722500423D14 /* CFreeFormBlending.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CFreeFormBlending.cpp; sourceTree = ""; }; + 357BEF0F256D722500423D14 /* CGridMovement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CGridMovement.cpp; sourceTree = ""; }; + 357BEF10256D722500423D14 /* CBSplineBlending.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CBSplineBlending.cpp; sourceTree = ""; }; + 35D6300425998751008DF28B /* CMultiGridQueue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CMultiGridQueue.cpp; sourceTree = ""; }; + 35D63006259987B7008DF28B /* blas_structure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = blas_structure.cpp; sourceTree = ""; }; + 35D6301125998877008DF28B /* mpi_structure.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = mpi_structure.hpp; sourceTree = ""; }; + 35D6301225998877008DF28B /* special_vectorization.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = special_vectorization.hpp; sourceTree = ""; }; + 35D6301325998877008DF28B /* mpi_structure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mpi_structure.cpp; sourceTree = ""; }; + 35D6301425998877008DF28B /* vectorization.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = vectorization.hpp; sourceTree = ""; }; + 35D6301525998877008DF28B /* omp_structure.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = omp_structure.hpp; sourceTree = ""; }; + 35D6301725999185008DF28B /* CSquareMatrixCM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSquareMatrixCM.cpp; sourceTree = ""; }; +<<<<<<< HEAD +>>>>>>> a2a10c663267396b0b044cbc31ce877b8d71df85 +======= + 40C6D17B271F8053009B5531 /* CScalarVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CScalarVariable.cpp; sourceTree = ""; }; + 40C6D17C271F8053009B5531 /* CFlowVariable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CFlowVariable.cpp; sourceTree = ""; }; + 40C6D17F271F806D009B5531 /* CScalarVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CScalarVariable.hpp; sourceTree = ""; }; + 40C6D180271F806D009B5531 /* CFlowVariable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFlowVariable.hpp; sourceTree = ""; }; + 40C6D181271F80BB009B5531 /* code_config.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = code_config.hpp; sourceTree = ""; }; + 40C6D182271F80CC009B5531 /* omp_structure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = omp_structure.cpp; sourceTree = ""; }; + 40C6D184271F80FD009B5531 /* blas_structure.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = blas_structure.hpp; sourceTree = ""; }; + 40C6D185271F8120009B5531 /* ndflattener.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ndflattener.hpp; sourceTree = ""; }; + 40C6D186271F8120009B5531 /* CQuasiNewtonInvLeastSquares.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CQuasiNewtonInvLeastSquares.hpp; sourceTree = ""; }; + 40C6D187271F8120009B5531 /* CSquareMatrixCM.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSquareMatrixCM.hpp; sourceTree = ""; }; + 40C6D188271F817C009B5531 /* CFVMOutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CFVMOutput.hpp; sourceTree = ""; }; + 40C6D189271F817C009B5531 /* CAdjFlowCompOutput.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CAdjFlowCompOutput.hpp; sourceTree = ""; }; + 40C6D18A271F818F009B5531 /* CFVMOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CFVMOutput.cpp; sourceTree = ""; }; + 40C6D18C271F81AD009B5531 /* CNewtonIntegration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CNewtonIntegration.cpp; sourceTree = ""; }; + 40C6D18E271F81B9009B5531 /* CNewtonIntegration.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CNewtonIntegration.hpp; sourceTree = ""; }; + 40C6D18F271F81D9009B5531 /* CScalarSolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CScalarSolver.hpp; sourceTree = ""; }; + 40C6D190271F81D9009B5531 /* CScalarSolver.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CScalarSolver.inl; sourceTree = ""; }; + 40C6D191271F8221009B5531 /* CCGNSFileWriter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CCGNSFileWriter.hpp; sourceTree = ""; }; + 40C6D192271F822E009B5531 /* CCGNSFileWriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CCGNSFileWriter.cpp; sourceTree = ""; }; + 40C6D196271F83CC009B5531 /* scalar_sources.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = scalar_sources.hpp; sourceTree = ""; }; + 40C6D197271F83CC009B5531 /* scalar_diffusion.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = scalar_diffusion.hpp; sourceTree = ""; }; + 40C6D198271F83CC009B5531 /* scalar_convection.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = scalar_convection.hpp; sourceTree = ""; }; + 40C6D19A271F840E009B5531 /* scalar_sources.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scalar_sources.cpp; sourceTree = ""; }; + 40C6D19B271F840E009B5531 /* scalar_diffusion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scalar_diffusion.cpp; sourceTree = ""; }; + 40C6D19C271F840E009B5531 /* scalar_convection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scalar_convection.cpp; sourceTree = ""; }; +>>>>>>> origin/develop +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8DD76F660486A84900D96B5E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 08FB7794FE84155DC02AAC07 /* SU2_CFD */ = { + isa = PBXGroup; + children = ( + 3569BC6525819526004B4612 /* config_template.cfg */, + 354900E82537E0050095B597 /* Common */, + 3549021A2537E0280095B597 /* SU2_CFD */, + 1AB674ADFE9D54B511CA2CBB /* Products */, + ); + name = SU2_CFD; + sourceTree = ""; + }; + 1AB674ADFE9D54B511CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 0541ABEE1370F5A6002D668B /* SU2_CFD */, + ); + name = Products; + sourceTree = ""; + }; + 354900E82537E0050095B597 /* Common */ = { + isa = PBXGroup; + children = ( + 354900E92537E0050095B597 /* include */, + 3549015D2537E0050095B597 /* src */, + ); + name = Common; + path = ../../Common; + sourceTree = ""; + }; + 354900E92537E0050095B597 /* include */ = { + isa = PBXGroup; + children = ( +<<<<<<< HEAD +<<<<<<< HEAD + E97C63A5238131D1003336A6 /* CFluidFlamelet.cpp */, + E90D35F6203F9C5800A3290D /* fluid_model_inc.cpp */, + 05F108961978D2AE00F2F288 /* fluid_model_pig.cpp */, + 05F108971978D2AE00F2F288 /* fluid_model_ppr.cpp */, + 05F108981978D2AE00F2F288 /* fluid_model_pvdw.cpp */, + 05F108991978D2AE00F2F288 /* fluid_model.cpp */, +======= +======= + 40C6D181271F80BB009B5531 /* code_config.hpp */, +>>>>>>> origin/develop + 35D6301025998877008DF28B /* parallelization */, + 357BEE80256D6F7500423D14 /* adt */, + 357BEE77256D6F7500423D14 /* basic_types */, + 357BEE87256D6F7500423D14 /* containers */, + 357BEE7A256D6F7500423D14 /* fem */, + 357BEE8C256D6F7500423D14 /* grid_movement */, + 354900EA2537E0050095B597 /* wall_model.hpp */, + 354900EE2537E0050095B597 /* CConfig.hpp */, + 354900FB2537E0050095B597 /* interface_interpolation */, + 354901032537E0050095B597 /* toolboxes */, + 354901202537E0050095B597 /* option_structure.hpp */, + 354901232537E0050095B597 /* graph_coloring_structure.hpp */, + 3549012A2537E0050095B597 /* geometry */, + 354901482537E0050095B597 /* option_structure.inl */, + 354901492537E0050095B597 /* linear_algebra */, +>>>>>>> a2a10c663267396b0b044cbc31ce877b8d71df85 + ); + path = include; + sourceTree = ""; + }; + 354900FB2537E0050095B597 /* interface_interpolation */ = { + isa = PBXGroup; + children = ( + 354900FC2537E0050095B597 /* CNearestNeighbor.hpp */, + 354900FD2537E0050095B597 /* CRadialBasisFunction.hpp */, + 354900FE2537E0050095B597 /* CInterpolator.hpp */, + 354900FF2537E0050095B597 /* CIsoparametric.hpp */, + 354901002537E0050095B597 /* CSlidingMesh.hpp */, + 354901012537E0050095B597 /* CMirror.hpp */, + 354901022537E0050095B597 /* CInterpolatorFactory.hpp */, + ); + path = interface_interpolation; + sourceTree = ""; + }; + 354901032537E0050095B597 /* toolboxes */ = { + isa = PBXGroup; + children = ( + 354901042537E0050095B597 /* CLinearPartitioner.hpp */, + 40C6D186271F8120009B5531 /* CQuasiNewtonInvLeastSquares.hpp */, + 40C6D187271F8120009B5531 /* CSquareMatrixCM.hpp */, + 40C6D185271F8120009B5531 /* ndflattener.hpp */, + 354901052537E0050095B597 /* C1DInterpolation.hpp */, + 354901062537E0050095B597 /* printing_toolbox.hpp */, + 354901082537E0050095B597 /* MMS */, + 354901182537E0050095B597 /* CSymmetricMatrix.hpp */, + 354901192537E0050095B597 /* geometry_toolbox.hpp */, + 3549011A2537E0050095B597 /* allocation_toolbox.hpp */, + 3549011C2537E0050095B597 /* graph_toolbox.hpp */, + ); + path = toolboxes; + sourceTree = ""; + }; + 354901082537E0050095B597 /* MMS */ = { + isa = PBXGroup; + children = ( + 354901092537E0050095B597 /* CMMSNSUnitQuadSolution.hpp */, + 3549010A2537E0050095B597 /* CMMSNSTwoHalfCirclesSolution.hpp */, + 3549010B2537E0050095B597 /* CUserDefinedSolution.hpp */, + 3549010C2537E0050095B597 /* CInviscidShockVortexSolution.hpp */, + 3549010D2537E0050095B597 /* CNSUnitQuadSolution.hpp */, + 3549010E2537E0050095B597 /* CRinglebSolution.hpp */, + 3549010F2537E0050095B597 /* CVerificationSolution.hpp */, + 354901102537E0050095B597 /* CIncTGVSolution.hpp */, + 354901112537E0050095B597 /* CMMSNSUnitQuadSolutionWallBC.hpp */, + 354901122537E0050095B597 /* CTurbChannelSolution.hpp */, + 354901132537E0050095B597 /* CTGVSolution.hpp */, + 354901142537E0050095B597 /* CMMSNSTwoHalfSpheresSolution.hpp */, + 354901152537E0050095B597 /* CInviscidVortexSolution.hpp */, + 354901162537E0050095B597 /* CMMSIncNSSolution.hpp */, + 354901172537E0050095B597 /* CMMSIncEulerSolution.hpp */, + ); + path = MMS; + sourceTree = ""; + }; + 3549012A2537E0050095B597 /* geometry */ = { + isa = PBXGroup; + children = ( + 354903FB2537E2C50095B597 /* CDummyGeometry.hpp */, + 354903F92537E2C50095B597 /* CGeometry.hpp */, + 354903F82537E2C50095B597 /* CMultiGridGeometry.hpp */, + 354903FA2537E2C50095B597 /* CPhysicalGeometry.hpp */, + 3549012B2537E0050095B597 /* primal_grid */, + 354901382537E0050095B597 /* dual_grid */, + 3549013E2537E0050095B597 /* meshreader */, + 354901442537E0050095B597 /* elements */, + ); + path = geometry; + sourceTree = ""; + }; + 3549012B2537E0050095B597 /* primal_grid */ = { + isa = PBXGroup; + children = ( + 3549012C2537E0050095B597 /* CPrimalGridFEM.hpp */, + 3549012D2537E0050095B597 /* CVertexMPI.hpp */, + 3549012E2537E0050095B597 /* CLine.hpp */, + 3549012F2537E0050095B597 /* CPrimalGridBoundFEM.hpp */, + 354901312537E0050095B597 /* CHexahedron.hpp */, + 354901322537E0050095B597 /* CQuadrilateral.hpp */, + 354901332537E0050095B597 /* CPrimalGrid.hpp */, + 354901342537E0050095B597 /* CTetrahedron.hpp */, + 354901352537E0050095B597 /* CPrism.hpp */, + 354901362537E0050095B597 /* CTriangle.hpp */, + 354901372537E0050095B597 /* CPyramid.hpp */, + ); + path = primal_grid; + sourceTree = ""; + }; + 354901382537E0050095B597 /* dual_grid */ = { + isa = PBXGroup; + children = ( + 354901392537E0050095B597 /* CTurboVertex.hpp */, + 3549013A2537E0050095B597 /* CVertex.hpp */, + 3549013B2537E0050095B597 /* CPoint.hpp */, + 3549013C2537E0050095B597 /* CEdge.hpp */, + 3549013D2537E0050095B597 /* CDualGrid.hpp */, + ); + path = dual_grid; + sourceTree = ""; + }; + 3549013E2537E0050095B597 /* meshreader */ = { + isa = PBXGroup; + children = ( + 3549013F2537E0050095B597 /* CCGNSMeshReaderFVM.hpp */, + 354901402537E0050095B597 /* CMeshReaderFVM.hpp */, + 354901412537E0050095B597 /* CRectangularMeshReaderFVM.hpp */, + 354901422537E0050095B597 /* CBoxMeshReaderFVM.hpp */, + 354901432537E0050095B597 /* CSU2ASCIIMeshReaderFVM.hpp */, + ); + path = meshreader; + sourceTree = ""; + }; + 354901442537E0050095B597 /* elements */ = { + isa = PBXGroup; + children = ( + 354901452537E0050095B597 /* CElement.hpp */, + 354901462537E0050095B597 /* CElementProperty.hpp */, + 354901472537E0050095B597 /* CGaussVariable.hpp */, + ); + path = elements; + sourceTree = ""; + }; + 354901492537E0050095B597 /* linear_algebra */ = { + isa = PBXGroup; + children = ( + 40C6D184271F80FD009B5531 /* blas_structure.hpp */, + 357BEE94256D6F8900423D14 /* vector_expressions.hpp */, + 3549014A2537E0050095B597 /* CMatrixVectorProduct.hpp */, + 3549014B2537E0050095B597 /* CSysSolve.hpp */, + 3549014C2537E0050095B597 /* CPastixWrapper.hpp */, + 3549014D2537E0050095B597 /* CSysMatrix.hpp */, + 3549014E2537E0050095B597 /* CSysVector.hpp */, + 3549014F2537E0050095B597 /* CPreconditioner.hpp */, + 354901502537E0050095B597 /* CSysMatrix.inl */, + 354901512537E0050095B597 /* CSysSolve_b.hpp */, + ); + path = linear_algebra; + sourceTree = ""; + }; + 3549015D2537E0050095B597 /* src */ = { + isa = PBXGroup; + children = ( + 357BEF08256D722500423D14 /* grid_movement */, + 357BEE5A256D59AA00423D14 /* adt */, + 357BEE5F256D59AA00423D14 /* basic_types */, + 357BEE61256D59AA00423D14 /* fem */, + 354901662537E0050095B597 /* interface_interpolation */, + 3549016F2537E0050095B597 /* toolboxes */, + 3549018E2537E0050095B597 /* graph_coloring_structure.cpp */, + 3549018F2537E0050095B597 /* meson.build */, + 354901962537E0050095B597 /* wall_model.cpp */, + 354901972537E0050095B597 /* geometry */, + 354901C12537E0050095B597 /* linear_algebra */, + 354901C82537E0050095B597 /* CConfig.cpp */, + ); + path = src; + sourceTree = ""; + }; + 354901662537E0050095B597 /* interface_interpolation */ = { + isa = PBXGroup; + children = ( + 354901672537E0050095B597 /* CMirror.cpp */, + 354901682537E0050095B597 /* CInterpolatorFactory.cpp */, + 354901692537E0050095B597 /* CSlidingMesh.cpp */, + 3549016A2537E0050095B597 /* meson.build */, + 3549016B2537E0050095B597 /* CIsoparametric.cpp */, + 3549016C2537E0050095B597 /* CRadialBasisFunction.cpp */, + 3549016D2537E0050095B597 /* CNearestNeighbor.cpp */, + 3549016E2537E0050095B597 /* CInterpolator.cpp */, + ); + path = interface_interpolation; + sourceTree = ""; + }; + 3549016F2537E0050095B597 /* toolboxes */ = { + isa = PBXGroup; + children = ( + 354901702537E0050095B597 /* CSymmetricMatrix.cpp */, + 35D6301725999185008DF28B /* CSquareMatrixCM.cpp */, + 354901712537E0050095B597 /* meson.build */, + 354901722537E0050095B597 /* MMS */, + 3549018A2537E0050095B597 /* CLinearPartitioner.cpp */, + 3549018B2537E0050095B597 /* C1DInterpolation.cpp */, + 3549018C2537E0050095B597 /* printing_toolbox.cpp */, + ); + path = toolboxes; + sourceTree = ""; + }; + 354901722537E0050095B597 /* MMS */ = { + isa = PBXGroup; + children = ( + 354901732537E0050095B597 /* CInviscidVortexSolution.cpp */, + 354901742537E0050095B597 /* CMMSIncNSSolution.cpp */, + 354901752537E0050095B597 /* CMMSIncEulerSolution.cpp */, + 354901772537E0050095B597 /* CreateMMSSourceTerms */, + 3549017E2537E0050095B597 /* CTGVSolution.cpp */, + 3549017F2537E0050095B597 /* CMMSNSTwoHalfSpheresSolution.cpp */, + 354901802537E0050095B597 /* meson.build */, + 354901822537E0050095B597 /* CNSUnitQuadSolution.cpp */, + 354901832537E0050095B597 /* CRinglebSolution.cpp */, + 354901842537E0050095B597 /* CIncTGVSolution.cpp */, + 354901852537E0050095B597 /* CMMSNSUnitQuadSolutionWallBC.cpp */, + 354901862537E0050095B597 /* CVerificationSolution.cpp */, + 354901872537E0050095B597 /* CMMSNSUnitQuadSolution.cpp */, + 354901882537E0050095B597 /* CMMSNSTwoHalfCirclesSolution.cpp */, + 354901892537E0050095B597 /* CUserDefinedSolution.cpp */, + ); + path = MMS; + sourceTree = ""; + }; + 354901772537E0050095B597 /* CreateMMSSourceTerms */ = { + isa = PBXGroup; + children = ( + 354901782537E0050095B597 /* CMMSNSTwoHalfCirclesSolution.mw */, + 354901792537E0050095B597 /* CMMSIncEulerSolution.py */, + 3549017A2537E0050095B597 /* CMMSNSUnitQuadSolution.mw */, + 3549017B2537E0050095B597 /* CMMSNSTwoHalfSpheresSolution.mw */, + 3549017C2537E0050095B597 /* CMMSNSUnitQuadSolutionWallBC.mw */, + 3549017D2537E0050095B597 /* CMMSIncNSSolution.py */, + ); + path = CreateMMSSourceTerms; + sourceTree = ""; + }; + 354901972537E0050095B597 /* geometry */ = { + isa = PBXGroup; + children = ( + 354901982537E0050095B597 /* primal_grid */, + 354901A52537E0050095B597 /* CMultiGridGeometry.cpp */, + 35D6300425998751008DF28B /* CMultiGridQueue.cpp */, + 354901A62537E0050095B597 /* dual_grid */, + 354901AD2537E0050095B597 /* meshreader */, + 354901B42537E0050095B597 /* CPhysicalGeometry.cpp */, + 354901B52537E0050095B597 /* meson.build */, + 354901B62537E0050095B597 /* elements */, + 354901BF2537E0050095B597 /* CDummyGeometry.cpp */, + 354901C02537E0050095B597 /* CGeometry.cpp */, + ); + path = geometry; + sourceTree = ""; + }; + 354901982537E0050095B597 /* primal_grid */ = { + isa = PBXGroup; + children = ( + 354901992537E0050095B597 /* CPrism.cpp */, + 3549019A2537E0050095B597 /* CTriangle.cpp */, + 3549019B2537E0050095B597 /* CPyramid.cpp */, + 3549019C2537E0050095B597 /* CHexahedron.cpp */, + 3549019D2537E0050095B597 /* CQuadrilateral.cpp */, + 3549019E2537E0050095B597 /* CPrimalGrid.cpp */, + 3549019F2537E0050095B597 /* CTetrahedron.cpp */, + 354901A02537E0050095B597 /* meson.build */, + 354901A12537E0050095B597 /* CPrimalGridBoundFEM.cpp */, + 354901A22537E0050095B597 /* CLine.cpp */, + 354901A32537E0050095B597 /* CPrimalGridFEM.cpp */, + 354901A42537E0050095B597 /* CVertexMPI.cpp */, + ); + path = primal_grid; + sourceTree = ""; + }; + 354901A62537E0050095B597 /* dual_grid */ = { + isa = PBXGroup; + children = ( + 354901A72537E0050095B597 /* CEdge.cpp */, + 354901A82537E0050095B597 /* CDualGrid.cpp */, + 354901A92537E0050095B597 /* meson.build */, + 354901AA2537E0050095B597 /* CVertex.cpp */, + 354901AB2537E0050095B597 /* CPoint.cpp */, + 354901AC2537E0050095B597 /* CTurboVertex.cpp */, + ); + path = dual_grid; + sourceTree = ""; + }; + 354901AD2537E0050095B597 /* meshreader */ = { + isa = PBXGroup; + children = ( + 354901AE2537E0050095B597 /* CSU2ASCIIMeshReaderFVM.cpp */, + 354901AF2537E0050095B597 /* CRectangularMeshReaderFVM.cpp */, + 354901B02537E0050095B597 /* CBoxMeshReaderFVM.cpp */, + 354901B12537E0050095B597 /* meson.build */, + 354901B22537E0050095B597 /* CCGNSMeshReaderFVM.cpp */, + 354901B32537E0050095B597 /* CMeshReaderFVM.cpp */, + ); + path = meshreader; + sourceTree = ""; + }; + 354901B62537E0050095B597 /* elements */ = { + isa = PBXGroup; + children = ( + 354901B72537E0050095B597 /* CTETRA1.cpp */, + 354901B82537E0050095B597 /* CQUAD4.cpp */, + 354901B92537E0050095B597 /* CPRISM6.cpp */, + 354901BA2537E0050095B597 /* CTRIA1.cpp */, + 354901BB2537E0050095B597 /* CPYRAM5.cpp */, + 354901BC2537E0050095B597 /* meson.build */, + 354901BD2537E0050095B597 /* CHEXA8.cpp */, + 354901BE2537E0050095B597 /* CElement.cpp */, + ); + path = elements; + sourceTree = ""; + }; + 354901C12537E0050095B597 /* linear_algebra */ = { + isa = PBXGroup; + children = ( + 35D63006259987B7008DF28B /* blas_structure.cpp */, + 354901C22537E0050095B597 /* CSysSolve_b.cpp */, + 354901C32537E0050095B597 /* CSysMatrix.cpp */, + 354901C42537E0050095B597 /* CSysVector.cpp */, + 354901C52537E0050095B597 /* meson.build */, + 354901C62537E0050095B597 /* CSysSolve.cpp */, + 354901C72537E0050095B597 /* CPastixWrapper.cpp */, + ); + path = linear_algebra; + sourceTree = ""; + }; + 3549021A2537E0280095B597 /* SU2_CFD */ = { + isa = PBXGroup; + children = ( + 354902212537E0280095B597 /* include */, + 354902C82537E0280095B597 /* src */, + ); + name = SU2_CFD; + path = ../../SU2_CFD; + sourceTree = ""; + }; +<<<<<<< HEAD + 08FB7795FE84155DC02AAC07 /* Source */ = { + isa = PBXGroup; + children = ( + E9D85B4B1C3F1B9E0077122F /* ad_structure.cpp */, + E9FDF6E91D2DD0560066E49C /* adt_structure.cpp */, + E96FAF0F2189FE9C0046BF5D /* blas_structure.cpp */, + 40303EB7246A5D2700CD7789 /* C1DInterpolation.cpp */, + 40303EAF246A5CC000CD7789 /* CConfig.cpp */, + 4063F823246A03AE00DE870E /* CLimiterDetails.cpp */, + E9E51AD522FA313800773E0C /* CLinearPartitioner.cpp */, + 40303EB8246A5D2700CD7789 /* CSymmetricMatrix.cpp */, + 05E6DBBC17EB62A000FA1F7E /* definition_structure.cpp */, + EB14FF9322F790320045FB27 /* Driver */, + 05F108951978D28F00F2F288 /* FluidModel */, + 0530E57317FDF97F00733CE8 /* Geometry */, + 052D51AA17A22E15003BE8B2 /* Integration */, + 4040B249235FB87300843C83 /* Interfaces */, + 05E6DBC017EB62A100FA1F7E /* iteration_structure.cpp */, + 4040B249235FB87300843C83 /* Interfaces */, + 40303EBD246A5D5B00CD7789 /* InterfaceInterpolation */, + E90B501322DFE060000ED392 /* LinearSolver */, + E90B4FE522DFDF9C000ED392 /* MMS */, + E941BB911B71D124005C6C06 /* mpi_structure.cpp */, + 05D28619178BCA1200DD76AE /* Numerics */, + 052D51AB17A22E24003BE8B2 /* Output */, + 400CEC2D21FA81A10019B790 /* printing_toolbox.cpp */, + 05F8F2662008A1AA000FEA01 /* Python */, + 052D517F17A21FAC003BE8B2 /* Solver */, + 05E6DBEC17EB62A100FA1F7E /* SU2_CFD.cpp */, + 05F108A21978D2E500F2F288 /* TransportModel */, + E90B500A22DFDFED000ED392 /* Variable */, + 3599C5D12121FAC9003AAF05 /* wall_model.cpp */, + ); + name = Source; +======= + 354902212537E0280095B597 /* include */ = { + isa = PBXGroup; + children = ( + 354902242537E0280095B597 /* drivers */, + 357BEE99256D706900423D14 /* fluid */, + 354902B72537E0280095B597 /* gradients */, + 3549022F2537E0280095B597 /* integration */, + 354902BB2537E0280095B597 /* interfaces */, + 357BEEAF256D708200423D14 /* iteration */, + 3549022B2537E0280095B597 /* limiters */, + 354902782537E0280095B597 /* numerics */, + 357BEEBB256D70B900423D14 /* numerics_simd */, + 354902362537E0280095B597 /* output */, + 3549025C2537E0280095B597 /* solvers */, + 354902982537E0280095B597 /* variables */, + 354902B42537E0280095B597 /* CMarkerProfileReaderFVM.hpp */, + 354902222537E0280095B597 /* definition_structure.hpp */, + 354902772537E0280095B597 /* sgs_model.hpp */, + 354902232537E0280095B597 /* sgs_model.inl */, + 354902B22537E0280095B597 /* SU2_CFD.hpp */, + 354902972537E0280095B597 /* task_definition.hpp */, + 354902B52537E0280095B597 /* task_definition.inl */, + ); + path = include; +>>>>>>> a2a10c663267396b0b044cbc31ce877b8d71df85 + sourceTree = ""; + }; + 354902242537E0280095B597 /* drivers */ = { + isa = PBXGroup; + children = ( + 354902252537E0280095B597 /* CDiscAdjMultizoneDriver.hpp */, + 354902292537E0280095B597 /* CDiscAdjSinglezoneDriver.hpp */, + 354902262537E0280095B597 /* CDriver.hpp */, + 354902272537E0280095B597 /* CDummyDriver.hpp */, + 354902282537E0280095B597 /* CMultizoneDriver.hpp */, + 3549022A2537E0280095B597 /* CSinglezoneDriver.hpp */, + ); + path = drivers; + sourceTree = ""; + }; + 3549022B2537E0280095B597 /* limiters */ = { + isa = PBXGroup; + children = ( + 3549022D2537E0280095B597 /* CLimiterDetails.hpp */, + 3549022E2537E0280095B597 /* computeLimiters_impl.hpp */, + 3549022C2537E0280095B597 /* computeLimiters.hpp */, + ); + path = limiters; + sourceTree = ""; + }; + 3549022F2537E0280095B597 /* integration */ = { + isa = PBXGroup; + children = ( + 354902342537E0280095B597 /* CFEM_DG_Integration.hpp */, + 354902352537E0280095B597 /* CIntegration.hpp */, + 354902322537E0280095B597 /* CIntegrationFactory.hpp */, + 354902312537E0280095B597 /* CMultiGridIntegration.hpp */, + 40C6D18E271F81B9009B5531 /* CNewtonIntegration.hpp */, + 354902302537E0280095B597 /* CSingleGridIntegration.hpp */, + 354902332537E0280095B597 /* CStructuralIntegration.hpp */, + ); + path = integration; + sourceTree = ""; + }; + 354902362537E0280095B597 /* output */ = { + isa = PBXGroup; + children = ( + 3549023E2537E0280095B597 /* filewriter */, + 354902392537E0280095B597 /* tools */, + 354902562537E0280095B597 /* CAdjElasticityOutput.hpp */, + 40C6D189271F817C009B5531 /* CAdjFlowCompOutput.hpp */, + 354902512537E0280095B597 /* CAdjFlowIncOutput.hpp */, + 3549023D2537E0280095B597 /* CAdjHeatOutput.hpp */, + 354902532537E0280095B597 /* CBaselineOutput.hpp */, + 354902582537E0280095B597 /* CElasticityOutput.hpp */, + 354902372537E0280095B597 /* CFlowCompFEMOutput.hpp */, + 354902522537E0280095B597 /* CFlowCompOutput.hpp */, + 3549023C2537E0280095B597 /* CFlowIncOutput.hpp */, + 354902502537E0280095B597 /* CFlowOutput.hpp */, + 40C6D188271F817C009B5531 /* CFVMOutput.hpp */, + 354902382537E0280095B597 /* CHeatOutput.hpp */, + 354902572537E0280095B597 /* CMeshOutput.hpp */, + 3549025A2537E0280095B597 /* CMultizoneOutput.hpp */, + 357BEEC9256D70DC00423D14 /* CNEMOCompOutput.hpp */, + 354902542537E0280095B597 /* COutput.hpp */, + 354902552537E0280095B597 /* COutputFactory.hpp */, + 3549023B2537E0280095B597 /* COutputLegacy.hpp */, + ); + path = output; + sourceTree = ""; + }; + 354902392537E0280095B597 /* tools */ = { + isa = PBXGroup; + children = ( + 3549023A2537E0280095B597 /* CWindowingTools.hpp */, + ); + path = tools; + sourceTree = ""; + }; + 3549023E2537E0280095B597 /* filewriter */ = { + isa = PBXGroup; + children = ( + 40C6D191271F8221009B5531 /* CCGNSFileWriter.hpp */, + 3549023F2537E0280095B597 /* CParaviewFileWriter.hpp */, + 354902402537E0280095B597 /* CTecplotFileWriter.hpp */, + 354902412537E0280095B597 /* CSurfaceFEMDataSorter.hpp */, + 354902422537E0280095B597 /* CSU2MeshFileWriter.hpp */, + 354902432537E0280095B597 /* CTecplotBinaryFileWriter.hpp */, + 354902442537E0280095B597 /* CSU2FileWriter.hpp */, + 354902452537E0280095B597 /* CFVMDataSorter.hpp */, + 354902462537E0280095B597 /* CSTLFileWriter.hpp */, + 354902472537E0280095B597 /* CParallelDataSorter.hpp */, + 354902482537E0280095B597 /* CFEMDataSorter.hpp */, + 354902492537E0280095B597 /* CParaviewBinaryFileWriter.hpp */, + 3549024A2537E0280095B597 /* CParaviewXMLFileWriter.hpp */, + 3549024B2537E0280095B597 /* CParaviewVTMFileWriter.hpp */, + 3549024C2537E0280095B597 /* CSU2BinaryFileWriter.hpp */, + 3549024D2537E0280095B597 /* CFileWriter.hpp */, + 3549024E2537E0280095B597 /* CCSVFileWriter.hpp */, + 3549024F2537E0280095B597 /* CSurfaceFVMDataSorter.hpp */, + ); + path = filewriter; + sourceTree = ""; + }; + 3549025C2537E0280095B597 /* solvers */ = { + isa = PBXGroup; + children = ( + 354902742537E0280095B597 /* CAdjEulerSolver.hpp */, + 354902692537E0280095B597 /* CAdjNSSolver.hpp */, + 3549026F2537E0280095B597 /* CAdjTurbSolver.hpp */, + 354902642537E0280095B597 /* CBaselineSolver_FEM.hpp */, + 354902622537E0280095B597 /* CBaselineSolver.hpp */, + 354902762537E0280095B597 /* CDiscAdjFEASolver.hpp */, + 354902672537E0280095B597 /* CDiscAdjMeshSolver.hpp */, + 3549025E2537E0280095B597 /* CDiscAdjSolver.hpp */, + 3549025F2537E0280095B597 /* CEulerSolver.hpp */, + 3549026B2537E0280095B597 /* CFEASolver.hpp */, + 354902602537E0280095B597 /* CFEM_DG_EulerSolver.hpp */, + 354902612537E0280095B597 /* CFEM_DG_NSSolver.hpp */, + 357BEE97256D6FB700423D14 /* CFVMFlowSolverBase.hpp */, + 357BEE96256D6FB700423D14 /* CFVMFlowSolverBase.inl */, + 3549026D2537E0280095B597 /* CHeatSolver.hpp */, + 354902722537E0280095B597 /* CIncEulerSolver.hpp */, + 354902712537E0280095B597 /* CIncNSSolver.hpp */, + 354902662537E0280095B597 /* CMeshSolver.hpp */, + 357BEE95256D6FB700423D14 /* CNEMOEulerSolver.hpp */, + 357BEE98256D6FB700423D14 /* CNEMONSSolver.hpp */, + 3549025D2537E0280095B597 /* CNSSolver.hpp */, + 3549026A2537E0280095B597 /* CRadP1Solver.hpp */, + 354902632537E0280095B597 /* CRadSolver.hpp */, + 40C6D18F271F81D9009B5531 /* CScalarSolver.hpp */, + 40C6D190271F81D9009B5531 /* CScalarSolver.inl */, + 354902652537E0280095B597 /* CSolver.hpp */, + 354902702537E0280095B597 /* CSolverFactory.hpp */, + 3549026C2537E0280095B597 /* CTemplateSolver.hpp */, + 3549026E2537E0280095B597 /* CTransLMSolver.hpp */, + 354902682537E0280095B597 /* CTurbSASolver.hpp */, + 354902732537E0280095B597 /* CTurbSolver.hpp */, + 354902752537E0280095B597 /* CTurbSSTSolver.hpp */, + ); + path = solvers; + sourceTree = ""; + }; + 354902782537E0280095B597 /* numerics */ = { + isa = PBXGroup; + children = ( + 354902822537E0280095B597 /* continuous_adjoint */, + 354902792537E0280095B597 /* elasticity */, + 3549028B2537E0280095B597 /* flow */, + 357BEEFD256D71ED00423D14 /* NEMO */, + 40C6D195271F83CC009B5531 /* scalar */, + 3549027E2537E0280095B597 /* turbulent */, + 354902862537E0280095B597 /* CNumerics.hpp */, + 354902872537E0280095B597 /* heat.hpp */, + 354902882537E0280095B597 /* template.hpp */, + 354902892537E0280095B597 /* transition.hpp */, + 3549028A2537E0280095B597 /* radiation.hpp */, + ); + path = numerics; + sourceTree = ""; + }; + 354902792537E0280095B597 /* elasticity */ = { + isa = PBXGroup; + children = ( + 3549027A2537E0280095B597 /* nonlinear_models.hpp */, + 3549027B2537E0280095B597 /* CFEAElasticity.hpp */, + 3549027C2537E0280095B597 /* CFEANonlinearElasticity.hpp */, + 3549027D2537E0280095B597 /* CFEALinearElasticity.hpp */, + ); + path = elasticity; + sourceTree = ""; + }; + 3549027E2537E0280095B597 /* turbulent */ = { + isa = PBXGroup; + children = ( + 3549027F2537E0280095B597 /* turb_diffusion.hpp */, + 354902802537E0280095B597 /* turb_convection.hpp */, + 354902812537E0280095B597 /* turb_sources.hpp */, + ); + path = turbulent; + sourceTree = ""; + }; + 354902822537E0280095B597 /* continuous_adjoint */ = { + isa = PBXGroup; + children = ( + 354902832537E0280095B597 /* adj_convection.hpp */, + 354902842537E0280095B597 /* adj_diffusion.hpp */, + 354902852537E0280095B597 /* adj_sources.hpp */, + ); + path = continuous_adjoint; + sourceTree = ""; + }; + 3549028B2537E0280095B597 /* flow */ = { + isa = PBXGroup; + children = ( + 3549028C2537E0280095B597 /* flow_sources.hpp */, + 3549028D2537E0280095B597 /* convection */, + 354902952537E0280095B597 /* flow_diffusion.hpp */, + ); + path = flow; + sourceTree = ""; + }; + 3549028D2537E0280095B597 /* convection */ = { + isa = PBXGroup; + children = ( + 3549028E2537E0280095B597 /* fvs.hpp */, + 3549028F2537E0280095B597 /* hllc.hpp */, + 354902902537E0280095B597 /* fds.hpp */, + 354902912537E0280095B597 /* cusp.hpp */, + 354902922537E0280095B597 /* centered.hpp */, + 354902932537E0280095B597 /* roe.hpp */, + 354902942537E0280095B597 /* ausm_slau.hpp */, + ); + path = convection; + sourceTree = ""; + }; + 354902982537E0280095B597 /* variables */ = { + isa = PBXGroup; + children = ( + 354902AD2537E0280095B597 /* CAdjEulerVariable.hpp */, + 354902A52537E0280095B597 /* CAdjNSVariable.hpp */, + 354902AC2537E0280095B597 /* CAdjTurbVariable.hpp */, + 354902AB2537E0280095B597 /* CBaselineVariable.hpp */, + 354902A82537E0280095B597 /* CDiscAdjFEABoundVariable.hpp */, + 354902A22537E0280095B597 /* CDiscAdjMeshBoundVariable.hpp */, + 354902B02537E0280095B597 /* CDiscAdjVariable.hpp */, + 354902A02537E0280095B597 /* CEulerVariable.hpp */, + 354902992537E0280095B597 /* CFEABoundVariable.hpp */, + 3549029F2537E0280095B597 /* CFEAVariable.hpp */, + 40C6D180271F806D009B5531 /* CFlowVariable.hpp */, + 3549029C2537E0280095B597 /* CHeatVariable.hpp */, + 354902B12537E0280095B597 /* CIncEulerVariable.hpp */, + 354902A32537E0280095B597 /* CIncNSVariable.hpp */, + 354902A92537E0280095B597 /* CMeshBoundVariable.hpp */, + 354902AF2537E0280095B597 /* CMeshElement.hpp */, + 354902A12537E0280095B597 /* CMeshVariable.hpp */, + 357BEEE7256D717900423D14 /* CNEMOEulerVariable.hpp */, + 357BEEE8256D717900423D14 /* CNEMONSVariable.hpp */, + 3549029A2537E0280095B597 /* CNSVariable.hpp */, + 3549029D2537E0280095B597 /* CRadP1Variable.hpp */, + 3549029E2537E0280095B597 /* CRadVariable.hpp */, + 40C6D17F271F806D009B5531 /* CScalarVariable.hpp */, + 354902A62537E0280095B597 /* CTransLMVariable.hpp */, + 3549029B2537E0280095B597 /* CTurbSAVariable.hpp */, + 354902AE2537E0280095B597 /* CTurbSSTVariable.hpp */, + 354902A42537E0280095B597 /* CTurbVariable.hpp */, + 354902A72537E0280095B597 /* CVariable.hpp */, + ); + path = variables; + sourceTree = ""; + }; + 354902B72537E0280095B597 /* gradients */ = { + isa = PBXGroup; + children = ( + 354902B82537E0280095B597 /* computeGradientsLeastSquares.hpp */, + 354902B92537E0280095B597 /* computeGradientsGreenGauss.hpp */, + ); + path = gradients; + sourceTree = ""; + }; + 354902BB2537E0280095B597 /* interfaces */ = { + isa = PBXGroup; + children = ( + 354902BC2537E0280095B597 /* cht */, + 354902BE2537E0280095B597 /* CInterface.hpp */, + 354902BF2537E0280095B597 /* cfd */, + 354902C32537E0280095B597 /* fsi */, + ); + path = interfaces; + sourceTree = ""; + }; + 354902BC2537E0280095B597 /* cht */ = { + isa = PBXGroup; + children = ( + 354902BD2537E0280095B597 /* CConjugateHeatInterface.hpp */, + ); + path = cht; + sourceTree = ""; + }; + 354902BF2537E0280095B597 /* cfd */ = { + isa = PBXGroup; + children = ( + 354902C02537E0280095B597 /* CMixingPlaneInterface.hpp */, + 354902C12537E0280095B597 /* CSlidingInterface.hpp */, + 354902C22537E0280095B597 /* CConservativeVarsInterface.hpp */, + ); + path = cfd; + sourceTree = ""; + }; + 354902C32537E0280095B597 /* fsi */ = { + isa = PBXGroup; + children = ( + 354902C42537E0280095B597 /* CFlowTractionInterface.hpp */, + 354902C52537E0280095B597 /* CDisplacementsInterface.hpp */, + 354902C62537E0280095B597 /* CDiscAdjFlowTractionInterface.hpp */, + ); + path = fsi; + sourceTree = ""; + }; + 354902C82537E0280095B597 /* src */ = { + isa = PBXGroup; + children = ( + 354902CE2537E0280095B597 /* drivers */, + 357BEE4B256D592C00423D14 /* fluid */, + 354902D82537E0280095B597 /* integration */, + 3549035E2537E0280095B597 /* interfaces */, + 357BEECA256D711C00423D14 /* iteration */, + 354902D62537E0280095B597 /* limiters */, + 354903242537E0280095B597 /* numerics */, + 354902E12537E0280095B597 /* output */, + 354903072537E0280095B597 /* solvers */, + 354903422537E0280095B597 /* variables */, + 354902C92537E0280095B597 /* CMarkerProfileReaderFVM.cpp */, + 3549035C2537E0280095B597 /* definition_structure.cpp */, + 354903232537E0280095B597 /* meson.build */, + 354902CA2537E0280095B597 /* python_wrapper_structure.cpp */, + 354903222537E0280095B597 /* SU2_CFD.cpp */, + ); + path = src; + sourceTree = ""; + }; + 354902CE2537E0280095B597 /* drivers */ = { + isa = PBXGroup; + children = ( + 354902D12537E0280095B597 /* CDiscAdjMultizoneDriver.cpp */, + 354902D02537E0280095B597 /* CDiscAdjSinglezoneDriver.cpp */, + 354902D22537E0280095B597 /* CDriver.cpp */, + 354902D32537E0280095B597 /* CDummyDriver.cpp */, + 354902D42537E0280095B597 /* CMultizoneDriver.cpp */, + 354902CF2537E0280095B597 /* CSinglezoneDriver.cpp */, + ); + path = drivers; + sourceTree = ""; + }; + 354902D62537E0280095B597 /* limiters */ = { + isa = PBXGroup; + children = ( + 354902D72537E0280095B597 /* CLimiterDetails.cpp */, + ); + path = limiters; + sourceTree = ""; + }; + 354902D82537E0280095B597 /* integration */ = { + isa = PBXGroup; + children = ( + 354902D92537E0280095B597 /* CFEM_DG_Integration.cpp */, + 354902DA2537E0280095B597 /* CIntegration.cpp */, + 354902DE2537E0280095B597 /* CIntegrationFactory.cpp */, + 354902DD2537E0280095B597 /* CMultiGridIntegration.cpp */, + 40C6D18C271F81AD009B5531 /* CNewtonIntegration.cpp */, + 354902DC2537E0280095B597 /* CSingleGridIntegration.cpp */, + 354902DB2537E0280095B597 /* CStructuralIntegration.cpp */, + ); + path = integration; + sourceTree = ""; + }; + 354902E12537E0280095B597 /* output */ = { + isa = PBXGroup; + children = ( + 354902E62537E0280095B597 /* CAdjElasticityOutput.cpp */, + 354903052537E0280095B597 /* CAdjFlowCompOutput.cpp */, + 354902FE2537E0280095B597 /* CAdjFlowIncOutput.cpp */, + 354903032537E0280095B597 /* CAdjHeatOutput.cpp */, + 354903002537E0280095B597 /* CBaselineOutput.cpp */, + 354902E72537E0280095B597 /* CElasticityOutput.cpp */, + 354903042537E0280095B597 /* CFlowCompFEMOutput.cpp */, + 354902FF2537E0280095B597 /* CFlowCompOutput.cpp */, + 354903022537E0280095B597 /* CFlowIncOutput.cpp */, + 354902EA2537E0280095B597 /* CFlowOutput.cpp */, + 40C6D18A271F818F009B5531 /* CFVMOutput.cpp */, + 354903062537E0280095B597 /* CHeatOutput.cpp */, + 354902E82537E0280095B597 /* CMeshOutput.cpp */, + 354902E92537E0280095B597 /* CMultizoneOutput.cpp */, + 357BEEE1256D712600423D14 /* CNEMOCompOutput.cpp */, + 354902E22537E0280095B597 /* COutput.cpp */, + 354902E32537E0280095B597 /* COutputFactory.cpp */, + 354903012537E0280095B597 /* output_physics.cpp */, + 354902EB2537E0280095B597 /* output_structure_legacy.cpp */, + 354902E42537E0280095B597 /* tools */, + 354902EC2537E0280095B597 /* filewriter */, + ); + path = output; + sourceTree = ""; + }; + 354902E42537E0280095B597 /* tools */ = { + isa = PBXGroup; + children = ( + 354902E52537E0280095B597 /* CWindowingTools.cpp */, + ); + path = tools; + sourceTree = ""; + }; + 354902EC2537E0280095B597 /* filewriter */ = { + isa = PBXGroup; + children = ( + 40C6D192271F822E009B5531 /* CCGNSFileWriter.cpp */, + 354902ED2537E0280095B597 /* CCSVFileWriter.cpp */, + 354902EE2537E0280095B597 /* CSurfaceFVMDataSorter.cpp */, + 354902EF2537E0280095B597 /* CParallelFileWriter.cpp */, + 354902F02537E0280095B597 /* CSTLFileWriter.cpp */, + 354902F12537E0280095B597 /* CParallelDataSorter.cpp */, + 354902F22537E0280095B597 /* CParaviewBinaryFileWriter.cpp */, + 354902F32537E0280095B597 /* CFEMDataSorter.cpp */, + 354902F42537E0280095B597 /* CParaviewXMLFileWriter.cpp */, + 354902F52537E0280095B597 /* CParaviewVTMFileWriter.cpp */, + 354902F62537E0280095B597 /* CSU2BinaryFileWriter.cpp */, + 354902F72537E0280095B597 /* CTecplotBinaryFileWriter.cpp */, + 354902F82537E0280095B597 /* CSU2FileWriter.cpp */, + 354902F92537E0280095B597 /* CFVMDataSorter.cpp */, + 354902FA2537E0280095B597 /* CParaviewFileWriter.cpp */, + 354902FB2537E0280095B597 /* CSurfaceFEMDataSorter.cpp */, + 354902FC2537E0280095B597 /* CTecplotFileWriter.cpp */, + 354902FD2537E0280095B597 /* CSU2MeshFileWriter.cpp */, + ); + path = filewriter; + sourceTree = ""; + }; + 354903072537E0280095B597 /* solvers */ = { + isa = PBXGroup; + children = ( + 3549030A2537E0280095B597 /* CAdjEulerSolver.cpp */, + 3549031A2537E0280095B597 /* CAdjNSSolver.cpp */, + 354903122537E0280095B597 /* CAdjTurbSolver.cpp */, + 354903152537E0280095B597 /* CBaselineSolver_FEM.cpp */, + 354903202537E0280095B597 /* CBaselineSolver.cpp */, + 3549030C2537E0280095B597 /* CDiscAdjFEASolver.cpp */, + 354903182537E0280095B597 /* CDiscAdjMeshSolver.cpp */, + 3549031C2537E0280095B597 /* CDiscAdjSolver.cpp */, + 3549031D2537E0280095B597 /* CEulerSolver.cpp */, + 3549030E2537E0280095B597 /* CFEASolver.cpp */, + 3549031E2537E0280095B597 /* CFEM_DG_EulerSolver.cpp */, + 3549031F2537E0280095B597 /* CFEM_DG_NSSolver.cpp */, + 3549030F2537E0280095B597 /* CHeatSolver.cpp */, + 354903082537E0280095B597 /* CIncEulerSolver.cpp */, + 354903132537E0280095B597 /* CIncNSSolver.cpp */, + 354903172537E0280095B597 /* CMeshSolver.cpp */, + 357BEE46256D589B00423D14 /* CNEMOEulerSolver.cpp */, + 357BEE47256D589B00423D14 /* CNEMONSSolver.cpp */, + 3549031B2537E0280095B597 /* CNSSolver.cpp */, + 3549030D2537E0280095B597 /* CRadP1Solver.cpp */, + 354903212537E0280095B597 /* CRadSolver.cpp */, + 354903162537E0280095B597 /* CSolver.cpp */, + 354903142537E0280095B597 /* CSolverFactory.cpp */, + 354903102537E0280095B597 /* CTemplateSolver.cpp */, + 354903112537E0280095B597 /* CTransLMSolver.cpp */, + 354903192537E0280095B597 /* CTurbSASolver.cpp */, + 354903092537E0280095B597 /* CTurbSolver.cpp */, + 3549030B2537E0280095B597 /* CTurbSSTSolver.cpp */, + ); + path = solvers; + sourceTree = ""; + }; + 354903242537E0280095B597 /* numerics */ = { + isa = PBXGroup; + children = ( + 354903322537E0280095B597 /* continuous_adjoint */, + 354903262537E0280095B597 /* elasticity */, + 354903372537E0280095B597 /* flow */, + 357BEEE9256D71E100423D14 /* NEMO */, + 40C6D199271F840E009B5531 /* scalar */, + 3549032D2537E0280095B597 /* turbulent */, + 354903362537E0280095B597 /* CNumerics.cpp */, + 354903312537E0280095B597 /* heat.cpp */, + 3549032C2537E0280095B597 /* radiation.cpp */, + 354903252537E0280095B597 /* template.cpp */, + 3549032B2537E0280095B597 /* transition.cpp */, + ); + path = numerics; + sourceTree = ""; + }; + 354903262537E0280095B597 /* elasticity */ = { + isa = PBXGroup; + children = ( + 354903272537E0280095B597 /* CFEANonlinearElasticity.cpp */, + 354903282537E0280095B597 /* CFEALinearElasticity.cpp */, + 354903292537E0280095B597 /* CFEAElasticity.cpp */, + 3549032A2537E0280095B597 /* nonlinear_models.cpp */, + ); + path = elasticity; + sourceTree = ""; + }; + 3549032D2537E0280095B597 /* turbulent */ = { + isa = PBXGroup; + children = ( + 3549032E2537E0280095B597 /* turb_convection.cpp */, + 3549032F2537E0280095B597 /* turb_sources.cpp */, + 354903302537E0280095B597 /* turb_diffusion.cpp */, + ); + path = turbulent; + sourceTree = ""; + }; + 354903322537E0280095B597 /* continuous_adjoint */ = { + isa = PBXGroup; + children = ( + 354903332537E0280095B597 /* adj_diffusion.cpp */, + 354903342537E0280095B597 /* adj_sources.cpp */, + 354903352537E0280095B597 /* adj_convection.cpp */, + ); + path = continuous_adjoint; + sourceTree = ""; + }; + 354903372537E0280095B597 /* flow */ = { + isa = PBXGroup; + children = ( + 354903382537E0280095B597 /* flow_diffusion.cpp */, + 354903392537E0280095B597 /* convection */, + 354903412537E0280095B597 /* flow_sources.cpp */, + ); + path = flow; + sourceTree = ""; + }; + 354903392537E0280095B597 /* convection */ = { + isa = PBXGroup; + children = ( + 3549033A2537E0280095B597 /* ausm_slau.cpp */, + 3549033B2537E0280095B597 /* cusp.cpp */, + 3549033C2537E0280095B597 /* centered.cpp */, + 3549033D2537E0280095B597 /* roe.cpp */, + 3549033E2537E0280095B597 /* fds.cpp */, + 3549033F2537E0280095B597 /* fvs.cpp */, + 354903402537E0280095B597 /* hllc.cpp */, + ); + path = convection; + sourceTree = ""; + }; + 354903422537E0280095B597 /* variables */ = { + isa = PBXGroup; + children = ( + 3549034D2537E0280095B597 /* CAdjEulerVariable.cpp */, + 354903532537E0280095B597 /* CAdjNSVariable.cpp */, + 3549034C2537E0280095B597 /* CAdjTurbVariable.cpp */, + 3549034B2537E0280095B597 /* CBaselineVariable.cpp */, + 354903492537E0280095B597 /* CDiscAdjFEABoundVariable.cpp */, + 354903502537E0280095B597 /* CDiscAdjMeshBoundVariable.cpp */, + 354903452537E0280095B597 /* CDiscAdjVariable.cpp */, + 3549034E2537E0280095B597 /* CEulerVariable.cpp */, + 354903552537E0280095B597 /* CFEABoundVariable.cpp */, + 3549035B2537E0280095B597 /* CFEAVariable.cpp */, + 40C6D17C271F8053009B5531 /* CFlowVariable.cpp */, + 354903572537E0280095B597 /* CHeatVariable.cpp */, + 354903462537E0280095B597 /* CIncEulerVariable.cpp */, + 354903512537E0280095B597 /* CIncNSVariable.cpp */, + 354903482537E0280095B597 /* CMeshBoundVariable.cpp */, + 354903442537E0280095B597 /* CMeshElement.cpp */, + 3549034F2537E0280095B597 /* CMeshVariable.cpp */, + 357BEEE3256D716400423D14 /* CNEMOEulerVariable.cpp */, + 357BEEE4256D716400423D14 /* CNEMONSVariable.cpp */, + 354903562537E0280095B597 /* CNSVariable.cpp */, + 354903592537E0280095B597 /* CRadP1Variable.cpp */, + 3549035A2537E0280095B597 /* CRadVariable.cpp */, + 40C6D17B271F8053009B5531 /* CScalarVariable.cpp */, + 354903542537E0280095B597 /* CTransLMVariable.cpp */, + 354903582537E0280095B597 /* CTurbSAVariable.cpp */, + 354903432537E0280095B597 /* CTurbSSTVariable.cpp */, + 354903522537E0280095B597 /* CTurbVariable.cpp */, + 354903472537E0280095B597 /* CVariable.cpp */, + ); + path = variables; + sourceTree = ""; + }; + 3549035E2537E0280095B597 /* interfaces */ = { + isa = PBXGroup; + children = ( + 3549035F2537E0280095B597 /* cht */, + 354903612537E0280095B597 /* CInterface.cpp */, + 354903622537E0280095B597 /* cfd */, + 354903662537E0280095B597 /* fsi */, + ); + path = interfaces; + sourceTree = ""; + }; + 3549035F2537E0280095B597 /* cht */ = { + isa = PBXGroup; + children = ( + 354903602537E0280095B597 /* CConjugateHeatInterface.cpp */, + ); + path = cht; + sourceTree = ""; + }; + 354903622537E0280095B597 /* cfd */ = { + isa = PBXGroup; + children = ( + 354903632537E0280095B597 /* CConservativeVarsInterface.cpp */, + 354903642537E0280095B597 /* CSlidingInterface.cpp */, + 354903652537E0280095B597 /* CMixingPlaneInterface.cpp */, + ); + path = cfd; + sourceTree = ""; + }; + 354903662537E0280095B597 /* fsi */ = { + isa = PBXGroup; + children = ( + 354903672537E0280095B597 /* CDisplacementsInterface.cpp */, + 354903682537E0280095B597 /* CDiscAdjFlowTractionInterface.cpp */, + 354903692537E0280095B597 /* CFlowTractionInterface.cpp */, + ); + path = fsi; + sourceTree = ""; + }; + 357BEE4B256D592C00423D14 /* fluid */ = { + isa = PBXGroup; + children = ( + 357BEE4F256D592C00423D14 /* CFluidModel.cpp */, + 357BEE4E256D592C00423D14 /* CIdealGas.cpp */, + 357BEE52256D592C00423D14 /* CMutationTCLib.cpp */, + 357BEE50256D592C00423D14 /* CNEMOGas.cpp */, + 357BEE4C256D592C00423D14 /* CPengRobinson.cpp */, + 357BEE4D256D592C00423D14 /* CSU2TCLib.cpp */, + 357BEE51256D592C00423D14 /* CVanDerWaalsGas.cpp */, + ); + path = fluid; + sourceTree = ""; + }; + 357BEE5A256D59AA00423D14 /* adt */ = { + isa = PBXGroup; + children = ( + 357BEE5B256D59AA00423D14 /* CADTElemClass.cpp */, + 357BEE5C256D59AA00423D14 /* meson.build */, + 357BEE5D256D59AA00423D14 /* CADTPointsOnlyClass.cpp */, + 357BEE5E256D59AA00423D14 /* CADTBaseClass.cpp */, + ); + path = adt; + sourceTree = ""; + }; + 357BEE5F256D59AA00423D14 /* basic_types */ = { + isa = PBXGroup; + children = ( + 357BEE60256D59AA00423D14 /* ad_structure.cpp */, + ); + path = basic_types; + sourceTree = ""; + }; + 357BEE61256D59AA00423D14 /* fem */ = { + isa = PBXGroup; + children = ( + 357BEE62256D59AA00423D14 /* fem_standard_element.cpp */, + 357BEE63256D59AA00423D14 /* geometry_structure_fem_part.cpp */, + 357BEE64256D59AA00423D14 /* fem_gauss_jacobi_quadrature.cpp */, + 357BEE65256D59AA00423D14 /* fem_work_estimate_metis.cpp */, + 357BEE66256D59AA00423D14 /* fem_integration_rules.cpp */, + 357BEE67256D59AA00423D14 /* meson.build */, + 357BEE68256D59AA00423D14 /* fem_geometry_structure.cpp */, + 357BEE69256D59AA00423D14 /* fem_cgns_elements.cpp */, + 357BEE6A256D59AA00423D14 /* fem_wall_distance.cpp */, + ); + path = fem; + sourceTree = ""; + }; + 357BEE77256D6F7500423D14 /* basic_types */ = { + isa = PBXGroup; + children = ( + 357BEE78256D6F7500423D14 /* ad_structure.hpp */, + 357BEE79256D6F7500423D14 /* datatype_structure.hpp */, + ); + path = basic_types; + sourceTree = ""; + }; + 357BEE7A256D6F7500423D14 /* fem */ = { + isa = PBXGroup; + children = ( + 357BEE7B256D6F7500423D14 /* fem_cgns_elements.hpp */, + 357BEE7C256D6F7500423D14 /* fem_geometry_structure.hpp */, + 357BEE7D256D6F7500423D14 /* fem_standard_element.hpp */, + 357BEE7E256D6F7500423D14 /* geometry_structure_fem_part.hpp */, + 357BEE7F256D6F7500423D14 /* fem_gauss_jacobi_quadrature.hpp */, + ); + path = fem; + sourceTree = ""; + }; + 357BEE80256D6F7500423D14 /* adt */ = { + isa = PBXGroup; + children = ( + 357BEE81256D6F7500423D14 /* CADTPointsOnlyClass.hpp */, + 357BEE82256D6F7500423D14 /* CADTBaseClass.hpp */, + 357BEE83256D6F7500423D14 /* CBBoxTargetClass.hpp */, + 357BEE84256D6F7500423D14 /* CADTNodeClass.hpp */, + 357BEE85256D6F7500423D14 /* CADTElemClass.hpp */, + 357BEE86256D6F7500423D14 /* CADTComparePointClass.hpp */, + ); + path = adt; + sourceTree = ""; + }; + 357BEE87256D6F7500423D14 /* containers */ = { + isa = PBXGroup; + children = ( + 357BEE88256D6F7500423D14 /* CVertexMap.hpp */, + 357BEE89256D6F7500423D14 /* container_decorators.hpp */, + 357BEE8A256D6F7500423D14 /* CFastFindAndEraseQueue.hpp */, + 357BEE8B256D6F7500423D14 /* C2DContainer.hpp */, + ); + path = containers; + sourceTree = ""; + }; + 357BEE8C256D6F7500423D14 /* grid_movement */ = { + isa = PBXGroup; + children = ( + 357BEE8D256D6F7500423D14 /* CBSplineBlending.hpp */, + 357BEE8E256D6F7500423D14 /* CFreeFormBlending.hpp */, + 357BEE8F256D6F7500423D14 /* CGridMovement.hpp */, + 357BEE90256D6F7500423D14 /* CBezierBlending.hpp */, + 357BEE91256D6F7500423D14 /* CSurfaceMovement.hpp */, + 357BEE92256D6F7500423D14 /* CVolumetricMovement.hpp */, + 357BEE93256D6F7500423D14 /* CFreeFormDefBox.hpp */, + ); + path = grid_movement; + sourceTree = ""; + }; + 357BEE99256D706900423D14 /* fluid */ = { + isa = PBXGroup; + children = ( + 357BEE9B256D706900423D14 /* CConductivityModel.hpp */, + 357BEEA4256D706900423D14 /* CConstantConductivity.hpp */, + 357BEE9E256D706900423D14 /* CConstantConductivityRANS.hpp */, + 357BEEA2256D706900423D14 /* CConstantDensity.hpp */, + 357BEEA0256D706900423D14 /* CConstantPrandtl.hpp */, + 357BEEAB256D706900423D14 /* CConstantPrandtlRANS.hpp */, + 357BEE9D256D706900423D14 /* CConstantViscosity.hpp */, + 357BEEAC256D706900423D14 /* CFluidModel.hpp */, + 357BEEAA256D706900423D14 /* CIdealGas.hpp */, + 357BEE9C256D706900423D14 /* CIncIdealGas.hpp */, + 357BEE9A256D706900423D14 /* CIncIdealGasPolynomial.hpp */, + 357BEE9F256D706900423D14 /* CMutationTCLib.hpp */, + 357BEEA3256D706900423D14 /* CNEMOGas.hpp */, + 357BEEAD256D706900423D14 /* CPengRobinson.hpp */, + 357BEEA5256D706900423D14 /* CPolynomialConductivity.hpp */, + 357BEEA9256D706900423D14 /* CPolynomialConductivityRANS.hpp */, + 357BEEAE256D706900423D14 /* CPolynomialViscosity.hpp */, + 357BEEA8256D706900423D14 /* CSU2TCLib.hpp */, + 357BEEA1256D706900423D14 /* CSutherland.hpp */, + 357BEEA6256D706900423D14 /* CVanDerWaalsGas.hpp */, + 357BEEA7256D706900423D14 /* CViscosityModel.hpp */, + ); + path = fluid; + sourceTree = ""; + }; + 357BEEAF256D708200423D14 /* iteration */ = { + isa = PBXGroup; + children = ( + 357BEEBA256D708200423D14 /* CAdjFluidIteration.hpp */, + 357BEEB1256D708200423D14 /* CDiscAdjFEAIteration.hpp */, + 357BEEB9256D708200423D14 /* CDiscAdjFluidIteration.hpp */, + 357BEEB5256D708200423D14 /* CDiscAdjHeatIteration.hpp */, + 357BEEB2256D708200423D14 /* CFEAIteration.hpp */, + 357BEEB3256D708200423D14 /* CFEMFluidIteration.hpp */, + 357BEEB4256D708200423D14 /* CFluidIteration.hpp */, + 357BEEB7256D708200423D14 /* CHeatIteration.hpp */, + 357BEEB0256D708200423D14 /* CIteration.hpp */, + 357BEEB6256D708200423D14 /* CIterationFactory.hpp */, + 357BEEB8256D708200423D14 /* CTurboIteration.hpp */, + ); + path = iteration; + sourceTree = ""; + }; + 357BEEBB256D70B900423D14 /* numerics_simd */ = { + isa = PBXGroup; + children = ( + 357BEEBF256D70B900423D14 /* flow */, + 357BEEBC256D70B900423D14 /* CNumericsSIMD.cpp */, + 357BEEBD256D70B900423D14 /* CNumericsSIMD.hpp */, + 357BEEBE256D70B900423D14 /* util.hpp */, + ); + path = numerics_simd; + sourceTree = ""; + }; + 357BEEBF256D70B900423D14 /* flow */ = { + isa = PBXGroup; + children = ( + 357BEEC4256D70B900423D14 /* convection */, + 357BEEC0256D70B900423D14 /* diffusion */, + 357BEEC3256D70B900423D14 /* variables.hpp */, + ); + path = flow; + sourceTree = ""; + }; + 357BEEC0256D70B900423D14 /* diffusion */ = { + isa = PBXGroup; + children = ( + 357BEEC1256D70B900423D14 /* viscous_fluxes.hpp */, + 357BEEC2256D70B900423D14 /* common.hpp */, + ); + path = diffusion; + sourceTree = ""; + }; + 357BEEC4256D70B900423D14 /* convection */ = { + isa = PBXGroup; + children = ( + 357BEEC5256D70B900423D14 /* centered.hpp */, + 357BEEC6256D70B900423D14 /* roe.hpp */, + 357BEEC7256D70B900423D14 /* common.hpp */, + ); + path = convection; + sourceTree = ""; + }; + 357BEECA256D711C00423D14 /* iteration */ = { + isa = PBXGroup; + children = ( + 357BEECB256D711C00423D14 /* CAdjFluidIteration.cpp */, + 357BEED4256D711C00423D14 /* CDiscAdjFEAIteration.cpp */, + 357BEECF256D711C00423D14 /* CDiscAdjFluidIteration.cpp */, + 357BEED2256D711C00423D14 /* CDiscAdjHeatIteration.cpp */, + 357BEED5256D711C00423D14 /* CFEAIteration.cpp */, + 357BEED0256D711C00423D14 /* CFEMFluidIteration.cpp */, + 357BEED1256D711C00423D14 /* CFluidIteration.cpp */, + 357BEECD256D711C00423D14 /* CHeatIteration.cpp */, + 357BEED3256D711C00423D14 /* CIteration.cpp */, + 357BEECC256D711C00423D14 /* CIterationFactory.cpp */, + 357BEECE256D711C00423D14 /* CTurboIteration.cpp */, + ); + path = iteration; + sourceTree = ""; + }; + 357BEEE9256D71E100423D14 /* NEMO */ = { + isa = PBXGroup; + children = ( + 357BEEEA256D71E100423D14 /* convection */, + 357BEEF1256D71E100423D14 /* NEMO_sources.cpp */, + 357BEEF2256D71E100423D14 /* NEMO_diffusion.cpp */, + 357BEEF3256D71E100423D14 /* CNEMONumerics.cpp */, + ); + path = NEMO; + sourceTree = ""; + }; + 357BEEEA256D71E100423D14 /* convection */ = { + isa = PBXGroup; + children = ( + 357BEEEB256D71E100423D14 /* lax.cpp */, + 357BEEEC256D71E100423D14 /* ausmpwplus.cpp */, + 357BEEED256D71E100423D14 /* roe.cpp */, + 357BEEEE256D71E100423D14 /* ausmplusup2.cpp */, + 357BEEEF256D71E100423D14 /* ausm.cpp */, + 357BEEF0256D71E100423D14 /* msw.cpp */, + ); + path = convection; + sourceTree = ""; + }; + 357BEEFD256D71ED00423D14 /* NEMO */ = { + isa = PBXGroup; + children = ( + 357BEEFE256D71ED00423D14 /* NEMO_sources.hpp */, + 357BEEFF256D71ED00423D14 /* NEMO_diffusion.hpp */, + 357BEF00256D71ED00423D14 /* CNEMONumerics.hpp */, + 357BEF01256D71ED00423D14 /* convection */, + ); + path = NEMO; + sourceTree = ""; + }; + 357BEF01256D71ED00423D14 /* convection */ = { + isa = PBXGroup; + children = ( + 357BEF02256D71ED00423D14 /* msw.hpp */, + 357BEF03256D71ED00423D14 /* ausm.hpp */, + 357BEF04256D71ED00423D14 /* roe.hpp */, + 357BEF05256D71ED00423D14 /* ausmplusup2.hpp */, + 357BEF06256D71ED00423D14 /* ausmpwplus.hpp */, + 357BEF07256D71ED00423D14 /* lax.hpp */, + ); + path = convection; + sourceTree = ""; + }; + 357BEF08256D722500423D14 /* grid_movement */ = { + isa = PBXGroup; + children = ( + 357BEF09256D722500423D14 /* CSurfaceMovement.cpp */, + 357BEF0A256D722500423D14 /* CVolumetricMovement.cpp */, + 357BEF0B256D722500423D14 /* CFreeFormDefBox.cpp */, + 357BEF0C256D722500423D14 /* CBezierBlending.cpp */, + 357BEF0D256D722500423D14 /* meson.build */, + 357BEF0E256D722500423D14 /* CFreeFormBlending.cpp */, + 357BEF0F256D722500423D14 /* CGridMovement.cpp */, + 357BEF10256D722500423D14 /* CBSplineBlending.cpp */, + ); + path = grid_movement; + sourceTree = ""; + }; + 35D6301025998877008DF28B /* parallelization */ = { + isa = PBXGroup; + children = ( + 40C6D182271F80CC009B5531 /* omp_structure.cpp */, + 35D6301125998877008DF28B /* mpi_structure.hpp */, + 35D6301225998877008DF28B /* special_vectorization.hpp */, + 35D6301325998877008DF28B /* mpi_structure.cpp */, + 35D6301425998877008DF28B /* vectorization.hpp */, + 35D6301525998877008DF28B /* omp_structure.hpp */, + ); + path = parallelization; + sourceTree = ""; + }; + 40C6D195271F83CC009B5531 /* scalar */ = { + isa = PBXGroup; + children = ( + 40C6D196271F83CC009B5531 /* scalar_sources.hpp */, + 40C6D197271F83CC009B5531 /* scalar_diffusion.hpp */, + 40C6D198271F83CC009B5531 /* scalar_convection.hpp */, + ); + path = scalar; + sourceTree = ""; + }; + 40C6D199271F840E009B5531 /* scalar */ = { + isa = PBXGroup; + children = ( + 40C6D19A271F840E009B5531 /* scalar_sources.cpp */, + 40C6D19B271F840E009B5531 /* scalar_diffusion.cpp */, + 40C6D19C271F840E009B5531 /* scalar_convection.cpp */, + ); + path = scalar; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8DD76F620486A84900D96B5E /* SU2_CFD */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "SU2_CFD" */; + buildPhases = ( + 8DD76F640486A84900D96B5E /* Sources */, + 8DD76F660486A84900D96B5E /* Frameworks */, + 8DD76F690486A84900D96B5E /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SU2_CFD; + productInstallPath = "$(HOME)/bin"; + productName = SU2_CFD; + productReference = 0541ABEE1370F5A6002D668B /* SU2_CFD */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 08FB7793FE84155DC02AAC07 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0910; + }; + buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "SU2_CFD" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + English, + Japanese, + French, + German, + ); + mainGroup = 08FB7794FE84155DC02AAC07 /* SU2_CFD */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8DD76F620486A84900D96B5E /* SU2_CFD */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 8DD76F640486A84900D96B5E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( +<<<<<<< HEAD + 40303EBC246A5D4800CD7789 /* CPastixWrapper.cpp in Sources */, + 4063F85A246A053400DE870E /* CParaviewVTMFileWriter.cpp in Sources */, + 40303E50246A05EC00CD7789 /* CTurbSolver.cpp in Sources */, + 4063F842246A03F800DE870E /* flow_diffusion.cpp in Sources */, + 4063F81D2469E40B00DE870E /* CFEM_DG_Integration.cpp in Sources */, + 4063F858246A053400DE870E /* CSTLFileWriter.cpp in Sources */, + EB14FF9A22F790500045FB27 /* CDriver.cpp in Sources */, + 356E2E3323999B140039E9B5 /* CPYRAM5.cpp in Sources */, + 40303ECB246A5D9300CD7789 /* CInterpolatorFactory.cpp in Sources */, + E90B4FE222DFDF94000ED392 /* CMMSNSTwoHalfCirclesSolution.cpp in Sources */, + E90B500722DFDFE4000ED392 /* CNSVariable.cpp in Sources */, + 356E2E182399979F0039E9B5 /* CFEAElasticity.cpp in Sources */, + E97C63A6238131D2003336A6 /* CFluidFlamelet.cpp in Sources */, + E96FAF142189FECA0046BF5D /* graph_coloring_structure.cpp in Sources */, + E96766A9237B4EE9009FBEE1 /* CPassiveScalarVariable.cpp in Sources */, + 4040B27F235FBFF200843C83 /* CTecplotBinaryFileWriter.cpp in Sources */, + 40303E56246A05EC00CD7789 /* CBaselineSolver_FEM.cpp in Sources */, + E96FAF152189FECA0046BF5D /* fem_gauss_jacobi_quadrature.cpp in Sources */, + 4040B261235FBEFD00843C83 /* CDiscAdjFlowTractionInterface.cpp in Sources */, + 405220D1246A629100D9AB4D /* CPrimalGridFEM.cpp in Sources */, + 356E2E2E23999B140039E9B5 /* CTRIA1.cpp in Sources */, + E90B4FFE22DFDFE4000ED392 /* CAdjEulerVariable.cpp in Sources */, + 4040B260235FBEFD00843C83 /* CFlowTractionInterface.cpp in Sources */, + E90B500522DFDFE4000ED392 /* CTransLMVariable.cpp in Sources */, + 4063F84B246A03F800DE870E /* adj_sources.cpp in Sources */, + 05E6DB9517EB61E600FA1F7E /* grid_adaptation_structure.cpp in Sources */, + 405220C2246A628000D9AB4D /* CSU2ASCIIMeshReaderFVM.cpp in Sources */, + 40303ECA246A5D9300CD7789 /* CRadialBasisFunction.cpp in Sources */, + E9E674342302A2E4009B6A25 /* CMultiGridQueue.cpp in Sources */, + E90B500322DFDFE4000ED392 /* CBaselineVariable.cpp in Sources */, + 4040B27B235FBFF200843C83 /* CParallelDataSorter.cpp in Sources */, + 4040B27C235FBFF200843C83 /* CParaviewBinaryFileWriter.cpp in Sources */, + 05E6DB9617EB61E600FA1F7E /* grid_movement_structure.cpp in Sources */, + 403426CF235F83B2005B5215 /* output_physics.cpp in Sources */, + 40303E55246A05EC00CD7789 /* CEulerSolver.cpp in Sources */, + 356E2E3223999B140039E9B5 /* CPRISM6.cpp in Sources */, + E90B4FDF22DFDF94000ED392 /* CInviscidVortexSolution.cpp in Sources */, + E96766BD2380FC5D009FBEE1 /* CFlameletSolver.cpp in Sources */, + 4040B280235FBFF200843C83 /* CSU2FileWriter.cpp in Sources */, + 4063F84A246A03F800DE870E /* centered.cpp in Sources */, + 405220C1246A628000D9AB4D /* CBoxMeshReaderFVM.cpp in Sources */, + E90B4FDC22DFDF94000ED392 /* CIncTGVSolution.cpp in Sources */, + E92D8D7D2301DF8F00130878 /* CLookUpTable.cpp in Sources */, + E90B500622DFDFE4000ED392 /* CFEAVariable.cpp in Sources */, + 05F8F2682008A1C8000FEA01 /* python_wrapper_structure.cpp in Sources */, + E90B4FE422DFDF94000ED392 /* CVerificationSolution.cpp in Sources */, + E90B4FE022DFDF94000ED392 /* CMMSNSUnitQuadSolution.cpp in Sources */, + 40303E5D246A05EC00CD7789 /* CSolverFactory.cpp in Sources */, + E9E51AD622FA313900773E0C /* CLinearPartitioner.cpp in Sources */, + 4040B281235FBFF200843C83 /* CFVMDataSorter.cpp in Sources */, + 05E6DC0117EB62A100FA1F7E /* definition_structure.cpp in Sources */, + 4063F843246A03F800DE870E /* CNumerics.cpp in Sources */, + E9D6EE782317B88F00618E36 /* CMeshVariable.cpp in Sources */, + 403426CA235F83B2005B5215 /* CFlowCompOutput.cpp in Sources */, + 40303E58246A05EC00CD7789 /* CTurbSSTSolver.cpp in Sources */, + 40303E4E246A05EC00CD7789 /* CTransLMSolver.cpp in Sources */, + 4063F840246A03F800DE870E /* hllc.cpp in Sources */, + 40303E51246A05EC00CD7789 /* CIncEulerSolver.cpp in Sources */, + EB14FF9822F790500045FB27 /* CSinglezoneDriver.cpp in Sources */, + E90B4FE322DFDF94000ED392 /* CRinglebSolution.cpp in Sources */, + 356E2E2423999AEA0039E9B5 /* CMultiGridGeometry.cpp in Sources */, + 405220B7246A626400D9AB4D /* CPoint.cpp in Sources */, + 4040B25F235FBEFD00843C83 /* CDisplacementsInterface.cpp in Sources */, + 40303E59246A05EC00CD7789 /* CFEASolver.cpp in Sources */, + 356E2E2D23999B140039E9B5 /* CElement.cpp in Sources */, + 4063F847246A03F800DE870E /* nonlinear_models.cpp in Sources */, + E9D6EE572316522800618E36 /* (null) in Sources */, + 05F1089B1978D2AE00F2F288 /* fluid_model_ppr.cpp in Sources */, + 405220D5246A629100D9AB4D /* CPrism.cpp in Sources */, + 05E6DC0517EB62A100FA1F7E /* iteration_structure.cpp in Sources */, + 403426CC235F83B2005B5215 /* CFlowCompFEMOutput.cpp in Sources */, + 405220D6246A629100D9AB4D /* CQuadrilateral.cpp in Sources */, + 40303E63246A064900CD7789 /* CRadVariable.cpp in Sources */, + 403426CB235F83B2005B5215 /* output_structure_legacy.cpp in Sources */, + 40303E4B246A05EC00CD7789 /* CTemplateSolver.cpp in Sources */, + E90B500922DFDFE4000ED392 /* CTurbSAVariable.cpp in Sources */, + 05F108A41978D2F200F2F288 /* transport_model.cpp in Sources */, + 40303E5C246A05EC00CD7789 /* CSolver.cpp in Sources */, + E9D6EE682317B80600618E36 /* CDiscAdjMeshSolver.cpp in Sources */, + 4040B282235FBFF200843C83 /* CParaviewFileWriter.cpp in Sources */, + 40303E46246A05EC00CD7789 /* CHeatSolver.cpp in Sources */, + E967669F237365CA009FBEE1 /* CMarkerProfileReaderFVM.cpp in Sources */, + 405220B6246A626400D9AB4D /* CDualGrid.cpp in Sources */, + E9FDF6EA1D2DD0560066E49C /* adt_structure.cpp in Sources */, + 4063F8192469E40B00DE870E /* CSingleGridIntegration.cpp in Sources */, + 356E2E2223999AEA0039E9B5 /* CPhysicalGeometry.cpp in Sources */, + E90B500422DFDFE4000ED392 /* CTurbVariable.cpp in Sources */, + E90D35F7203F9C5800A3290D /* fluid_model_inc.cpp in Sources */, + 05F1089A1978D2AE00F2F288 /* fluid_model_pig.cpp in Sources */, + 4040B27A235FBFF200843C83 /* CParallelFileWriter.cpp in Sources */, + E9D85B4C1C3F1B9E0077122F /* ad_structure.cpp in Sources */, + E90B4FDD22DFDF94000ED392 /* CUserDefinedSolution.cpp in Sources */, + 403426C6235F83B2005B5215 /* CMultizoneOutput.cpp in Sources */, + 4063F841246A03F800DE870E /* turb_diffusion.cpp in Sources */, + 05F1089D1978D2AE00F2F288 /* fluid_model.cpp in Sources */, + 4040B264235FBEFD00843C83 /* CConjugateHeatInterface.cpp in Sources */, + 356E2E162399979F0039E9B5 /* CFEALinearElasticity.cpp in Sources */, + 4063F857246A053400DE870E /* CParaviewXMLFileWriter.cpp in Sources */, + 4040B285235FBFF200843C83 /* CSU2MeshFileWriter.cpp in Sources */, + 403426C8235F83B2005B5215 /* CAdjElasticityOutput.cpp in Sources */, + 4040B265235FBEFD00843C83 /* CSlidingInterface.cpp in Sources */, + E90B4FD922DFDF94000ED392 /* CMMSNSUnitQuadSolutionWallBC.cpp in Sources */, + 405220BE246A628000D9AB4D /* CCGNSMeshReaderFVM.cpp in Sources */, + 40303EC6246A5D9300CD7789 /* CNearestNeighbor.cpp in Sources */, + 40303E52246A05EC00CD7789 /* CRadP1Solver.cpp in Sources */, + E9D6EE762317B88F00618E36 /* CMeshElement.cpp in Sources */, + E90B4FFA22DFDFE4000ED392 /* CAdjTurbVariable.cpp in Sources */, + 356E2E3023999B140039E9B5 /* CHEXA8.cpp in Sources */, + E90B4FD822DFDF94000ED392 /* CMMSIncNSSolution.cpp in Sources */, + 4040B267235FBEFD00843C83 /* CInterface.cpp in Sources */, + E96766BB2380FC45009FBEE1 /* CFlameletVariable.cpp in Sources */, + E9D6EE752317B88F00618E36 /* CDiscAdjFEABoundVariable.cpp in Sources */, + 405220D4246A629100D9AB4D /* CTetrahedron.cpp in Sources */, + 40303E49246A05EC00CD7789 /* CDiscAdjFEASolver.cpp in Sources */, + 4040B284235FBFF200843C83 /* CTecplotFileWriter.cpp in Sources */, + 403426C9235F83B2005B5215 /* CElasticityOutput.cpp in Sources */, + 40303E61246A064900CD7789 /* CHeatVariable.cpp in Sources */, + 405220BF246A628000D9AB4D /* CRectangularMeshReaderFVM.cpp in Sources */, + 40303EB9246A5D2700CD7789 /* C1DInterpolation.cpp in Sources */, + E9C830812061E60E004417A9 /* fem_standard_element.cpp in Sources */, + 4063F81A2469E40B00DE870E /* CStructuralIntegration.cpp in Sources */, + 403426ED235F8E29005B5215 /* CDiscAdjMultizoneDriver.cpp in Sources */, + E96FAF102189FE9C0046BF5D /* blas_structure.cpp in Sources */, + E92D8D7B2301DF8F00130878 /* CFileReaderLUT.cpp in Sources */, + E90B4FFC22DFDFE4000ED392 /* CDiscAdjVariable.cpp in Sources */, + 4063F8182469E40B00DE870E /* CMultiGridIntegration.cpp in Sources */, + 405220B4246A626400D9AB4D /* CTurboVertex.cpp in Sources */, + E9C830822061E60E004417A9 /* fem_wall_distance.cpp in Sources */, + 405220B8246A626400D9AB4D /* CEdge.cpp in Sources */, + 40303E53246A05EC00CD7789 /* CBaselineSolver.cpp in Sources */, + E90B4FF922DFDFE4000ED392 /* CIncEulerVariable.cpp in Sources */, + 40303E4A246A05EC00CD7789 /* CNSSolver.cpp in Sources */, + 4063F83B246A03F800DE870E /* turb_convection.cpp in Sources */, + 4063F848246A03F800DE870E /* cusp.cpp in Sources */, + 405220C0246A628000D9AB4D /* CMeshReaderFVM.cpp in Sources */, + 40303E47246A05EC00CD7789 /* CAdjEulerSolver.cpp in Sources */, + 4063F81B2469E40B00DE870E /* CIntegrationFactory.cpp in Sources */, + E90B500122DFDFE4000ED392 /* CEulerVariable.cpp in Sources */, + E90B501022DFE043000ED392 /* CSysMatrix.cpp in Sources */, + 405220D8246A629100D9AB4D /* CLine.cpp in Sources */, + E9C8307F2061E60E004417A9 /* fem_geometry_structure.cpp in Sources */, + E96FAF162189FECA0046BF5D /* fem_cgns_elements.cpp in Sources */, + 4063F83C246A03F800DE870E /* adj_diffusion.cpp in Sources */, + E90B4FFF22DFDFE4000ED392 /* CIncNSVariable.cpp in Sources */, + 4040B283235FBFF200843C83 /* CSurfaceFEMDataSorter.cpp in Sources */, + 3599C5D32121FAC9003AAF05 /* wall_model.cpp in Sources */, + 4040B278235FBFF200843C83 /* CCSVFileWriter.cpp in Sources */, + 405220D2246A629100D9AB4D /* CVertexMPI.cpp in Sources */, + 05F1089C1978D2AE00F2F288 /* fluid_model_pvdw.cpp in Sources */, + 40303E5B246A05EC00CD7789 /* CFEM_DG_EulerSolver.cpp in Sources */, + 4063F83E246A03F800DE870E /* heat.cpp in Sources */, + 40303EBA246A5D2700CD7789 /* CSymmetricMatrix.cpp in Sources */, + E90B4FDB22DFDF94000ED392 /* CTGVSolution.cpp in Sources */, + E90B500822DFDFE4000ED392 /* CFEABoundVariable.cpp in Sources */, + 403426CD235F83B2005B5215 /* CAdjFlowCompOutput.cpp in Sources */, + 40303E4C246A05EC00CD7789 /* CDiscAdjSolver.cpp in Sources */, + 403426D0235F83B2005B5215 /* CAdjHeatOutput.cpp in Sources */, + 403426C2235F83B2005B5215 /* CAdjFlowIncOutput.cpp in Sources */, + 40303EC7246A5D9300CD7789 /* CMirror.cpp in Sources */, + 405220D7246A629100D9AB4D /* CPrimalGridBoundFEM.cpp in Sources */, + 403426C3235F83B2005B5215 /* CFlowOutput.cpp in Sources */, + 4063F83F246A03F800DE870E /* adj_convection.cpp in Sources */, + 40303E57246A05EC00CD7789 /* CAdjNSSolver.cpp in Sources */, + 356E2E2323999AEA0039E9B5 /* CDummyGeometry.cpp in Sources */, + 4063F824246A03AE00DE870E /* CLimiterDetails.cpp in Sources */, + 40303E54246A05EC00CD7789 /* CRadSolver.cpp in Sources */, + 403426CE235F83B2005B5215 /* COutput.cpp in Sources */, + 4063F84C246A03F800DE870E /* flow_sources.cpp in Sources */, + 4063F845246A03F800DE870E /* turb_sources.cpp in Sources */, + 4040B27D235FBFF200843C83 /* CFEMDataSorter.cpp in Sources */, + 405220CF246A629100D9AB4D /* CTriangle.cpp in Sources */, + 4063F846246A03F800DE870E /* template.cpp in Sources */, + 4040B27E235FBFF200843C83 /* CSU2BinaryFileWriter.cpp in Sources */, + E90B4FDE22DFDF94000ED392 /* CMMSNSTwoHalfSpheresSolution.cpp in Sources */, + 356E2E152399979F0039E9B5 /* CFEANonlinearElasticity.cpp in Sources */, + 4040B266235FBEFD00843C83 /* CConservativeVarsInterface.cpp in Sources */, + E90B4FFD22DFDFE4000ED392 /* CDiscAdjFEAVariable.cpp in Sources */, + 40303E4F246A05EC00CD7789 /* CTurbSASolver.cpp in Sources */, + 40303E4D246A05EC00CD7789 /* CAdjTurbSolver.cpp in Sources */, + E90B4FF822DFDFE4000ED392 /* CVariable.cpp in Sources */, + 405220D3246A629100D9AB4D /* CPrimalGrid.cpp in Sources */, + 4063F859246A053400DE870E /* COutputFactory.cpp in Sources */, + 4040B262235FBEFD00843C83 /* CMixingPlaneInterface.cpp in Sources */, + 356E2E3123999B140039E9B5 /* CTETRA1.cpp in Sources */, + E90B4FE122DFDF94000ED392 /* CMMSIncEulerSolution.cpp in Sources */, + 4063F84E246A03F800DE870E /* ausm_slau.cpp in Sources */, + 405220B5246A626400D9AB4D /* CVertex.cpp in Sources */, + E9C830852061E60E004417A9 /* geometry_structure_fem_part.cpp in Sources */, + E9D6EE672317B80600618E36 /* CMeshSolver.cpp in Sources */, + 40303E62246A064900CD7789 /* CRadP1Variable.cpp in Sources */, + 4063F844246A03F800DE870E /* fds.cpp in Sources */, + 40303EC5246A5D9300CD7789 /* CInterpolator.cpp in Sources */, + E90B500222DFDFE4000ED392 /* CTurbSSTVariable.cpp in Sources */, + EB14FF9922F790500045FB27 /* CDiscAdjSinglezoneDriver.cpp in Sources */, + 403426C4235F83B2005B5215 /* CFlowIncOutput.cpp in Sources */, + 405220CE246A629100D9AB4D /* CPyramid.cpp in Sources */, + E941BB941B71D124005C6C06 /* mpi_structure.cpp in Sources */, + 40303EB0246A5CC000CD7789 /* CConfig.cpp in Sources */, + 403426C5235F83B2005B5215 /* CHeatOutput.cpp in Sources */, + 4063F81C2469E40B00DE870E /* CIntegration.cpp in Sources */, + 4063F84D246A03F800DE870E /* roe.cpp in Sources */, + E9D6EE5A23165FD300618E36 /* CDummyDriver.cpp in Sources */, + EB14FF9B22F790500045FB27 /* CMultizoneDriver.cpp in Sources */, + 356E2E2123999AEA0039E9B5 /* CGeometry.cpp in Sources */, + 05E6DC3117EB62A100FA1F7E /* SU2_CFD.cpp in Sources */, + 405220D0246A629100D9AB4D /* CHexahedron.cpp in Sources */, + 40303E48246A05EC00CD7789 /* CIncNSSolver.cpp in Sources */, + 356E2E2F23999B140039E9B5 /* CQUAD4.cpp in Sources */, + 4040B279235FBFF200843C83 /* CSurfaceFVMDataSorter.cpp in Sources */, + 400CEC2E21FA81A10019B790 /* printing_toolbox.cpp in Sources */, + 4063F83A246A03F800DE870E /* transition.cpp in Sources */, + 40303E5A246A05EC00CD7789 /* CFEM_DG_NSSolver.cpp in Sources */, + E90B501122DFE043000ED392 /* CSysSolve_b.cpp in Sources */, + 4063F849246A03F800DE870E /* radiation.cpp in Sources */, + E9D6EE772317B88F00618E36 /* CMeshBoundVariable.cpp in Sources */, + 4063F85B246A053400DE870E /* CWindowingTools.cpp in Sources */, + E9C830832061E60E004417A9 /* fem_work_estimate_metis.cpp in Sources */, + 4063F83D246A03F800DE870E /* fvs.cpp in Sources */, + E9D6EE722317B88F00618E36 /* CDiscAdjMeshBoundVariable.cpp in Sources */, + E90B4FFB22DFDFE4000ED392 /* CAdjNSVariable.cpp in Sources */, + 40303EC8246A5D9300CD7789 /* CIsoparametric.cpp in Sources */, + 403426C7235F83B2005B5215 /* CMeshOutput.cpp in Sources */, + E90B500F22DFE043000ED392 /* CSysVector.cpp in Sources */, + 40303EC9246A5D9300CD7789 /* CSlidingMesh.cpp in Sources */, + E90B4FDA22DFDF94000ED392 /* CNSUnitQuadSolution.cpp in Sources */, + E9C830802061E60E004417A9 /* fem_integration_rules.cpp in Sources */, + E90B501222DFE043000ED392 /* CSysSolve.cpp in Sources */, + 403426D1235F83B2005B5215 /* CBaselineOutput.cpp in Sources */, +======= + 357BEE48256D589B00423D14 /* CNEMOEulerSolver.cpp in Sources */, + 357BEEDA256D711C00423D14 /* CDiscAdjFluidIteration.cpp in Sources */, + 354903722537E0280095B597 /* CDriver.cpp in Sources */, + 3549039F2537E0290095B597 /* CFlowCompFEMOutput.cpp in Sources */, + 354901E02537E0050095B597 /* CNSUnitQuadSolution.cpp in Sources */, + 3549038E2537E0290095B597 /* CFEMDataSorter.cpp in Sources */, + 354903712537E0280095B597 /* CDiscAdjMultizoneDriver.cpp in Sources */, + 354903B22537E0290095B597 /* CDiscAdjMeshSolver.cpp in Sources */, + 40C6D183271F80CC009B5531 /* omp_structure.cpp in Sources */, + 354903732537E0280095B597 /* CDummyDriver.cpp in Sources */, + 3549039E2537E0290095B597 /* CAdjHeatOutput.cpp in Sources */, + 354901E62537E0050095B597 /* CMMSNSTwoHalfCirclesSolution.cpp in Sources */, + 354903F52537E0290095B597 /* CDisplacementsInterface.cpp in Sources */, + 354902182537E0050095B597 /* CPastixWrapper.cpp in Sources */, + 3549036A2537E0280095B597 /* CMarkerProfileReaderFVM.cpp in Sources */, + 354902062537E0050095B597 /* CRectangularMeshReaderFVM.cpp in Sources */, + 354903802537E0280095B597 /* COutputFactory.cpp in Sources */, + 354903F22537E0290095B597 /* CConservativeVarsInterface.cpp in Sources */, + 354903782537E0280095B597 /* CIntegration.cpp in Sources */, + 357BEEE2256D712600423D14 /* CNEMOCompOutput.cpp in Sources */, + 3549037B2537E0280095B597 /* CMultiGridIntegration.cpp in Sources */, + 354903CC2537E0290095B597 /* flow_diffusion.cpp in Sources */, + 354903C32537E0290095B597 /* radiation.cpp in Sources */, + 354903C92537E0290095B597 /* adj_sources.cpp in Sources */, + 357BEEFA256D71E100423D14 /* NEMO_sources.cpp in Sources */, + 357BEE6D256D59AA00423D14 /* CADTBaseClass.cpp in Sources */, + 354903E62537E0290095B597 /* CTransLMVariable.cpp in Sources */, + 354901E82537E0050095B597 /* CLinearPartitioner.cpp in Sources */, + 354903B82537E0290095B597 /* CFEM_DG_EulerSolver.cpp in Sources */, + 3549038D2537E0290095B597 /* CParaviewBinaryFileWriter.cpp in Sources */, + 354903B52537E0290095B597 /* CNSSolver.cpp in Sources */, + 354903CD2537E0290095B597 /* ausm_slau.cpp in Sources */, + 357BEEDE256D711C00423D14 /* CIteration.cpp in Sources */, + 35D6301625998877008DF28B /* mpi_structure.cpp in Sources */, + 354903EB2537E0290095B597 /* CRadP1Variable.cpp in Sources */, + 357BEE70256D59AA00423D14 /* geometry_structure_fem_part.cpp in Sources */, + 357BEED9256D711C00423D14 /* CTurboIteration.cpp in Sources */, + 354902052537E0050095B597 /* CSU2ASCIIMeshReaderFVM.cpp in Sources */, + 3549039D2537E0290095B597 /* CFlowIncOutput.cpp in Sources */, + 357BEE54256D592C00423D14 /* CSU2TCLib.cpp in Sources */, + 354902012537E0050095B597 /* CDualGrid.cpp in Sources */, + 354903CF2537E0290095B597 /* centered.cpp in Sources */, + 354903932537E0290095B597 /* CSU2FileWriter.cpp in Sources */, + 354903E42537E0290095B597 /* CTurbVariable.cpp in Sources */, + 40C6D19D271F840E009B5531 /* scalar_sources.cpp in Sources */, + 354903E82537E0290095B597 /* CNSVariable.cpp in Sources */, + 3549039A2537E0290095B597 /* CFlowCompOutput.cpp in Sources */, + 354903B72537E0290095B597 /* CEulerSolver.cpp in Sources */, + 354903A92537E0290095B597 /* CHeatSolver.cpp in Sources */, + 357BEE6B256D59AA00423D14 /* CADTElemClass.cpp in Sources */, + 35D6300525998751008DF28B /* CMultiGridQueue.cpp in Sources */, + 354903BE2537E0290095B597 /* CFEANonlinearElasticity.cpp in Sources */, + 354903762537E0280095B597 /* CLimiterDetails.cpp in Sources */, + 354903C02537E0290095B597 /* CFEAElasticity.cpp in Sources */, + 354903822537E0280095B597 /* CAdjElasticityOutput.cpp in Sources */, + 354903702537E0280095B597 /* CDiscAdjSinglezoneDriver.cpp in Sources */, + 357BEED8256D711C00423D14 /* CHeatIteration.cpp in Sources */, + 357BEE73256D59AA00423D14 /* fem_integration_rules.cpp in Sources */, + 354903BA2537E0290095B597 /* CBaselineSolver.cpp in Sources */, + 354903982537E0290095B597 /* CSU2MeshFileWriter.cpp in Sources */, + 354903DF2537E0290095B597 /* CAdjEulerVariable.cpp in Sources */, + 354901FA2537E0050095B597 /* CTetrahedron.cpp in Sources */, + 354903D92537E0290095B597 /* CVariable.cpp in Sources */, + 35D6301825999185008DF28B /* CSquareMatrixCM.cpp in Sources */, + 354903C62537E0290095B597 /* turb_diffusion.cpp in Sources */, + 354903E72537E0290095B597 /* CFEABoundVariable.cpp in Sources */, + 354903C72537E0290095B597 /* heat.cpp in Sources */, + 354902092537E0050095B597 /* CMeshReaderFVM.cpp in Sources */, + 354901FE2537E0050095B597 /* CVertexMPI.cpp in Sources */, + 40C6D17D271F8053009B5531 /* CScalarVariable.cpp in Sources */, + 357BEEF8256D71E100423D14 /* ausm.cpp in Sources */, + 354901E22537E0050095B597 /* CIncTGVSolution.cpp in Sources */, + 354903902537E0290095B597 /* CParaviewVTMFileWriter.cpp in Sources */, + 354901F42537E0050095B597 /* CPrism.cpp in Sources */, + 354903DD2537E0290095B597 /* CBaselineVariable.cpp in Sources */, + 3549036F2537E0280095B597 /* CSinglezoneDriver.cpp in Sources */, + 357BEE71256D59AA00423D14 /* fem_gauss_jacobi_quadrature.cpp in Sources */, + 354903CB2537E0290095B597 /* CNumerics.cpp in Sources */, + 357BEE58256D592C00423D14 /* CVanDerWaalsGas.cpp in Sources */, + 354903A72537E0290095B597 /* CRadP1Solver.cpp in Sources */, + 354903D02537E0290095B597 /* roe.cpp in Sources */, + 354903972537E0290095B597 /* CTecplotFileWriter.cpp in Sources */, + 3549038B2537E0290095B597 /* CSTLFileWriter.cpp in Sources */, + 354903CA2537E0290095B597 /* adj_convection.cpp in Sources */, + 354903952537E0290095B597 /* CParaviewFileWriter.cpp in Sources */, + 3549037C2537E0280095B597 /* CIntegrationFactory.cpp in Sources */, + 354901FC2537E0050095B597 /* CLine.cpp in Sources */, + 354903BD2537E0290095B597 /* template.cpp in Sources */, + 354903E32537E0290095B597 /* CIncNSVariable.cpp in Sources */, + 357BEF14256D722500423D14 /* CBezierBlending.cpp in Sources */, + 354903792537E0280095B597 /* CStructuralIntegration.cpp in Sources */, + 354903872537E0280095B597 /* output_structure_legacy.cpp in Sources */, + 354901D92537E0050095B597 /* CInviscidVortexSolution.cpp in Sources */, + 357BEEDC256D711C00423D14 /* CFluidIteration.cpp in Sources */, + 3549020E2537E0050095B597 /* CTRIA1.cpp in Sources */, + 354903EC2537E0290095B597 /* CRadVariable.cpp in Sources */, + 357BEF16256D722500423D14 /* CGridMovement.cpp in Sources */, + 354903A62537E0290095B597 /* CDiscAdjFEASolver.cpp in Sources */, + 354903B92537E0290095B597 /* CFEM_DG_NSSolver.cpp in Sources */, + 354901F62537E0050095B597 /* CPyramid.cpp in Sources */, + 354902132537E0050095B597 /* CGeometry.cpp in Sources */, + 3549039B2537E0290095B597 /* CBaselineOutput.cpp in Sources */, + 354902162537E0050095B597 /* CSysVector.cpp in Sources */, + 354902082537E0050095B597 /* CCGNSMeshReaderFVM.cpp in Sources */, + 354901F32537E0050095B597 /* wall_model.cpp in Sources */, + 354903D32537E0290095B597 /* hllc.cpp in Sources */, + 3549036B2537E0280095B597 /* python_wrapper_structure.cpp in Sources */, + 357BEEF5256D71E100423D14 /* ausmpwplus.cpp in Sources */, + 354903862537E0280095B597 /* CFlowOutput.cpp in Sources */, + 354903EA2537E0290095B597 /* CTurbSAVariable.cpp in Sources */, + 354902022537E0050095B597 /* CVertex.cpp in Sources */, + 3549037F2537E0280095B597 /* COutput.cpp in Sources */, + 357BEEF7256D71E100423D14 /* ausmplusup2.cpp in Sources */, + 354903C42537E0290095B597 /* turb_convection.cpp in Sources */, + 354903A42537E0290095B597 /* CAdjEulerSolver.cpp in Sources */, + 354903B32537E0290095B597 /* CTurbSASolver.cpp in Sources */, + 357BEE53256D592C00423D14 /* CPengRobinson.cpp in Sources */, + 354903E02537E0290095B597 /* CEulerVariable.cpp in Sources */, + 40C6D18D271F81AD009B5531 /* CNewtonIntegration.cpp in Sources */, + 354903812537E0280095B597 /* CWindowingTools.cpp in Sources */, + 354903942537E0290095B597 /* CFVMDataSorter.cpp in Sources */, + 357BEE59256D592C00423D14 /* CMutationTCLib.cpp in Sources */, + 354902122537E0050095B597 /* CDummyGeometry.cpp in Sources */, + 357BEE57256D592C00423D14 /* CNEMOGas.cpp in Sources */, + 354901E32537E0050095B597 /* CMMSNSUnitQuadSolutionWallBC.cpp in Sources */, + 354902192537E0050095B597 /* CConfig.cpp in Sources */, + 354903842537E0280095B597 /* CMeshOutput.cpp in Sources */, + 354903AD2537E0290095B597 /* CIncNSSolver.cpp in Sources */, + 357BEEC8256D70B900423D14 /* CNumericsSIMD.cpp in Sources */, + 357BEEFC256D71E100423D14 /* CNEMONumerics.cpp in Sources */, + 354901D42537E0050095B597 /* CIsoparametric.cpp in Sources */, + 354903D62537E0290095B597 /* CMeshElement.cpp in Sources */, + 354903E52537E0290095B597 /* CAdjNSVariable.cpp in Sources */, + 354901DE2537E0050095B597 /* CMMSNSTwoHalfSpheresSolution.cpp in Sources */, + 354901E12537E0050095B597 /* CRinglebSolution.cpp in Sources */, + 40C6D18B271F818F009B5531 /* CFVMOutput.cpp in Sources */, + 354903AE2537E0290095B597 /* CSolverFactory.cpp in Sources */, + 3549037A2537E0280095B597 /* CSingleGridIntegration.cpp in Sources */, + 354901D72537E0050095B597 /* CInterpolator.cpp in Sources */, + 357BEEF9256D71E100423D14 /* msw.cpp in Sources */, + 354903772537E0280095B597 /* CFEM_DG_Integration.cpp in Sources */, + 3549020D2537E0050095B597 /* CPRISM6.cpp in Sources */, + 354903B62537E0290095B597 /* CDiscAdjSolver.cpp in Sources */, + 354903EE2537E0290095B597 /* definition_structure.cpp in Sources */, + 354901F72537E0050095B597 /* CHexahedron.cpp in Sources */, + 3549020F2537E0050095B597 /* CPYRAM5.cpp in Sources */, + 354902172537E0050095B597 /* CSysSolve.cpp in Sources */, + 354903F02537E0290095B597 /* CConjugateHeatInterface.cpp in Sources */, + 354903922537E0290095B597 /* CTecplotBinaryFileWriter.cpp in Sources */, + 354903E92537E0290095B597 /* CHeatVariable.cpp in Sources */, + 357BEF15256D722500423D14 /* CFreeFormBlending.cpp in Sources */, + 357BEED7256D711C00423D14 /* CIterationFactory.cpp in Sources */, + 357BEE74256D59AA00423D14 /* fem_geometry_structure.cpp in Sources */, + 354901D22537E0050095B597 /* CInterpolatorFactory.cpp in Sources */, + 357BEEDB256D711C00423D14 /* CFEMFluidIteration.cpp in Sources */, + 354903D12537E0290095B597 /* fds.cpp in Sources */, + 354901FD2537E0050095B597 /* CPrimalGridFEM.cpp in Sources */, + 354903ED2537E0290095B597 /* CFEAVariable.cpp in Sources */, + 357BEE56256D592C00423D14 /* CFluidModel.cpp in Sources */, + 357BEE72256D59AA00423D14 /* fem_work_estimate_metis.cpp in Sources */, + 354901DA2537E0050095B597 /* CMMSIncNSSolution.cpp in Sources */, + 354901D82537E0050095B597 /* CSymmetricMatrix.cpp in Sources */, + 354903A32537E0290095B597 /* CTurbSolver.cpp in Sources */, + 354903C52537E0290095B597 /* turb_sources.cpp in Sources */, + 354903D52537E0290095B597 /* CTurbSSTVariable.cpp in Sources */, + 3549020B2537E0050095B597 /* CTETRA1.cpp in Sources */, + 354903C82537E0290095B597 /* adj_diffusion.cpp in Sources */, + 354902142537E0050095B597 /* CSysSolve_b.cpp in Sources */, + 354901EA2537E0050095B597 /* printing_toolbox.cpp in Sources */, + 354902002537E0050095B597 /* CEdge.cpp in Sources */, + 354902102537E0050095B597 /* CHEXA8.cpp in Sources */, + 354903D72537E0290095B597 /* CDiscAdjVariable.cpp in Sources */, + 357BEEDD256D711C00423D14 /* CDiscAdjHeatIteration.cpp in Sources */, + 354903F32537E0290095B597 /* CSlidingInterface.cpp in Sources */, + 354903AB2537E0290095B597 /* CTransLMSolver.cpp in Sources */, + 354903742537E0280095B597 /* CMultizoneDriver.cpp in Sources */, + 354903992537E0290095B597 /* CAdjFlowIncOutput.cpp in Sources */, + 354901DB2537E0050095B597 /* CMMSIncEulerSolution.cpp in Sources */, + 354901F92537E0050095B597 /* CPrimalGrid.cpp in Sources */, + 40C6D17E271F8053009B5531 /* CFlowVariable.cpp in Sources */, + 354902032537E0050095B597 /* CPoint.cpp in Sources */, + 354903852537E0280095B597 /* CMultizoneOutput.cpp in Sources */, + 357BEEF6256D71E100423D14 /* roe.cpp in Sources */, + 354901E52537E0050095B597 /* CMMSNSUnitQuadSolution.cpp in Sources */, + 357BEE6C256D59AA00423D14 /* CADTPointsOnlyClass.cpp in Sources */, + 357BEEE0256D711C00423D14 /* CFEAIteration.cpp in Sources */, + 354903BF2537E0290095B597 /* CFEALinearElasticity.cpp in Sources */, + 357BEF17256D722500423D14 /* CBSplineBlending.cpp in Sources */, + 354903CE2537E0290095B597 /* cusp.cpp in Sources */, + 354903AC2537E0290095B597 /* CAdjTurbSolver.cpp in Sources */, + 354903832537E0280095B597 /* CElasticityOutput.cpp in Sources */, + 354901FF2537E0050095B597 /* CMultiGridGeometry.cpp in Sources */, + 354901E72537E0050095B597 /* CUserDefinedSolution.cpp in Sources */, + 354903A52537E0290095B597 /* CTurbSSTSolver.cpp in Sources */, + 357BEE6E256D59AA00423D14 /* ad_structure.cpp in Sources */, + 354903A22537E0290095B597 /* CIncEulerSolver.cpp in Sources */, + 357BEEDF256D711C00423D14 /* CDiscAdjFEAIteration.cpp in Sources */, + 354901D12537E0050095B597 /* CMirror.cpp in Sources */, + 354903912537E0290095B597 /* CSU2BinaryFileWriter.cpp in Sources */, + 354902112537E0050095B597 /* CElement.cpp in Sources */, + 357BEE76256D59AA00423D14 /* fem_wall_distance.cpp in Sources */, + 354903E22537E0290095B597 /* CDiscAdjMeshBoundVariable.cpp in Sources */, + 357BEF13256D722500423D14 /* CFreeFormDefBox.cpp in Sources */, + 357BEEE6256D716400423D14 /* CNEMONSVariable.cpp in Sources */, + 354902042537E0050095B597 /* CTurboVertex.cpp in Sources */, + 40C6D19E271F840E009B5531 /* scalar_diffusion.cpp in Sources */, + 357BEF11256D722500423D14 /* CSurfaceMovement.cpp in Sources */, + 357BEE55256D592C00423D14 /* CIdealGas.cpp in Sources */, + 354903892537E0290095B597 /* CSurfaceFVMDataSorter.cpp in Sources */, + 357BEEF4256D71E100423D14 /* lax.cpp in Sources */, + 354903B02537E0290095B597 /* CSolver.cpp in Sources */, + 40C6D19F271F840E009B5531 /* scalar_convection.cpp in Sources */, + 354901D52537E0050095B597 /* CRadialBasisFunction.cpp in Sources */, + 357BEE75256D59AA00423D14 /* fem_cgns_elements.cpp in Sources */, + E9D6EE572316522800618E36 /* (null) in Sources */, + 357BEE6F256D59AA00423D14 /* fem_standard_element.cpp in Sources */, + 354903F12537E0290095B597 /* CInterface.cpp in Sources */, + 354903DA2537E0290095B597 /* CMeshBoundVariable.cpp in Sources */, + 3549020C2537E0050095B597 /* CQUAD4.cpp in Sources */, + 3549038C2537E0290095B597 /* CParallelDataSorter.cpp in Sources */, + 354903D42537E0290095B597 /* flow_sources.cpp in Sources */, + 354903A12537E0290095B597 /* CHeatOutput.cpp in Sources */, + 354901D32537E0050095B597 /* CSlidingMesh.cpp in Sources */, + 357BEEFB256D71E100423D14 /* NEMO_diffusion.cpp in Sources */, + 354902152537E0050095B597 /* CSysMatrix.cpp in Sources */, + 354903BC2537E0290095B597 /* SU2_CFD.cpp in Sources */, + 357BEE49256D589B00423D14 /* CNEMONSSolver.cpp in Sources */, + 40C6D193271F822F009B5531 /* CCGNSFileWriter.cpp in Sources */, + 354903BB2537E0290095B597 /* CRadSolver.cpp in Sources */, + 3549020A2537E0050095B597 /* CPhysicalGeometry.cpp in Sources */, + 354903C22537E0290095B597 /* transition.cpp in Sources */, + 354903A02537E0290095B597 /* CAdjFlowCompOutput.cpp in Sources */, + 354903C12537E0290095B597 /* nonlinear_models.cpp in Sources */, + 354903D22537E0290095B597 /* fvs.cpp in Sources */, + 354903DE2537E0290095B597 /* CAdjTurbVariable.cpp in Sources */, + 3549039C2537E0290095B597 /* output_physics.cpp in Sources */, + 3549038A2537E0290095B597 /* CParallelFileWriter.cpp in Sources */, + 354903AA2537E0290095B597 /* CTemplateSolver.cpp in Sources */, + 357BEF12256D722500423D14 /* CVolumetricMovement.cpp in Sources */, + 354903AF2537E0290095B597 /* CBaselineSolver_FEM.cpp in Sources */, + 354903D82537E0290095B597 /* CIncEulerVariable.cpp in Sources */, + 354903962537E0290095B597 /* CSurfaceFEMDataSorter.cpp in Sources */, + 354901EC2537E0050095B597 /* graph_coloring_structure.cpp in Sources */, + 354901E42537E0050095B597 /* CVerificationSolution.cpp in Sources */, + 354901E92537E0050095B597 /* C1DInterpolation.cpp in Sources */, + 354903B12537E0290095B597 /* CMeshSolver.cpp in Sources */, + 354901F82537E0050095B597 /* CQuadrilateral.cpp in Sources */, + 354902072537E0050095B597 /* CBoxMeshReaderFVM.cpp in Sources */, + 354903882537E0280095B597 /* CCSVFileWriter.cpp in Sources */, + 354903DB2537E0290095B597 /* CDiscAdjFEABoundVariable.cpp in Sources */, + 354903F62537E0290095B597 /* CDiscAdjFlowTractionInterface.cpp in Sources */, + 354903B42537E0290095B597 /* CAdjNSSolver.cpp in Sources */, + 3549038F2537E0290095B597 /* CParaviewXMLFileWriter.cpp in Sources */, + 354903E12537E0290095B597 /* CMeshVariable.cpp in Sources */, + 354901DD2537E0050095B597 /* CTGVSolution.cpp in Sources */, + 354903F42537E0290095B597 /* CMixingPlaneInterface.cpp in Sources */, + 354903F72537E0290095B597 /* CFlowTractionInterface.cpp in Sources */, + 354901D62537E0050095B597 /* CNearestNeighbor.cpp in Sources */, + 357BEED6256D711C00423D14 /* CAdjFluidIteration.cpp in Sources */, + 357BEEE5256D716400423D14 /* CNEMOEulerVariable.cpp in Sources */, + 354903A82537E0290095B597 /* CFEASolver.cpp in Sources */, + 354901FB2537E0050095B597 /* CPrimalGridBoundFEM.cpp in Sources */, + 354901F52537E0050095B597 /* CTriangle.cpp in Sources */, + 35D63007259987B8008DF28B /* blas_structure.cpp in Sources */, +>>>>>>> a2a10c663267396b0b044cbc31ce877b8d71df85 + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1DEB923208733DC60010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "compiler-default"; + CLANG_ENABLE_MODULES = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_IMPLICIT_SIGN_CONVERSION = NO; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = NO; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 6.2.0; + GCC_DYNAMIC_NO_PIC = NO; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ""; + "GCC_PREPROCESSOR_DEFINITIONS[arch=*]" = ""; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = NO; + GCC_TREAT_INCOMPATIBLE_POINTER_TYPE_WARNINGS_AS_ERRORS = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; + GCC_WARN_ABOUT_MISSING_NEWLINE = NO; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = NO; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNKNOWN_PRAGMAS = NO; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_PARAMETER = NO; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INSTALL_PATH = /usr/local/bin; + MACOSX_DEPLOYMENT_TARGET = 10.13; + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-Wno-inconsistent-missing-override", + ); + PRODUCT_NAME = SU2_CFD; + WARNING_CFLAGS = ( + "-Wall", + "-Wextra", + "-Wunused", + "-Wno-unused-parameter", + ); + }; + name = Debug; + }; + 1DEB923308733DC60010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "compiler-default"; + CLANG_ENABLE_MODULES = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_IMPLICIT_SIGN_CONVERSION = NO; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = NO; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CURRENT_PROJECT_VERSION = 6.2.0; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_MODEL_TUNING = G5; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = NO; + GCC_TREAT_INCOMPATIBLE_POINTER_TYPE_WARNINGS_AS_ERRORS = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = NO; + GCC_WARN_ABOUT_MISSING_NEWLINE = NO; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO; + GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = NO; + GCC_WARN_SHADOW = NO; + GCC_WARN_SIGN_COMPARE = NO; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNKNOWN_PRAGMAS = NO; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_LABEL = NO; + GCC_WARN_UNUSED_PARAMETER = NO; + GCC_WARN_UNUSED_VALUE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INSTALL_PATH = /usr/local/bin; + MACOSX_DEPLOYMENT_TARGET = 10.13; + OTHER_CPLUSPLUSFLAGS = ( + "$(OTHER_CFLAGS)", + "-Wno-inconsistent-missing-override", + ); + PRODUCT_NAME = SU2_CFD; + WARNING_CFLAGS = ( + "-Wall", + "-Wextra", + "-Wunused", + "-Wno-unused-parameter", + ); + }; + name = Release; + }; + 1DEB923608733DC60010E9CD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_NULLABLE_TO_NONNULL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ""; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_SHADOW = YES; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_LABEL = YES; + GCC_WARN_UNUSED_PARAMETER = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ../../externals/CLI11; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + 1DEB923708733DC60010E9CD /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_NULLABLE_TO_NONNULL_CONVERSION = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_SHADOW = YES; + GCC_WARN_SIGN_COMPARE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_LABEL = YES; + GCC_WARN_UNUSED_PARAMETER = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ../../externals/CLI11; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1DEB923108733DC60010E9CD /* Build configuration list for PBXNativeTarget "SU2_CFD" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB923208733DC60010E9CD /* Debug */, + 1DEB923308733DC60010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "SU2_CFD" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1DEB923608733DC60010E9CD /* Debug */, + 1DEB923708733DC60010E9CD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; +} diff --git a/SU2_PY/SU2/eval/design.py b/SU2_PY/SU2/eval/design.py index 60e06a3ddd1f..e94d4150daaa 100644 --- a/SU2_PY/SU2/eval/design.py +++ b/SU2_PY/SU2/eval/design.py @@ -73,7 +73,7 @@ class Design(object): con_cieq(dvs) - inequality constraints : list con_dcieq(dvs) - inequality constraint gradients : list[list] - Fucntional Interface + Functional Interface The following methods take an objective function name for input. func(func_name) - function of specified name grad(func_name,method='CONTINUOUS_ADJOINT') - gradient of specified name @@ -237,7 +237,6 @@ def obj_f(dvs,config,state=None): scale = def_objs[this_obj]['SCALE'] global_factor = float(config['OPT_GRADIENT_FACTOR']) sign = su2io.get_objectiveSign(this_obj) - # Evaluate Objective Function scaling and sign # If default evaluate as normal, if def_objs[this_obj]['OBJTYPE']=='DEFAULT': diff --git a/SU2_PY/SU2/eval/functions.py b/SU2_PY/SU2/eval/functions.py index b1ab4dbcfe5c..f2c755131ed2 100644 --- a/SU2_PY/SU2/eval/functions.py +++ b/SU2_PY/SU2/eval/functions.py @@ -265,6 +265,10 @@ def aerodynamics( config, state=None ): 'TARGET_HEATFLUX' in files ) : pull.append( files['TARGET_HEATFLUX'] ) + # files: look up table + if ( 'FLAMELET_FLUID_MODEL' in special_cases and + 'LOOK_UP_TABLE' in files ) : + pull.append( files['LOOK_UP_TABLE'] ) # output redirection with redirect_folder( 'DIRECT', pull, link ) as push: @@ -395,6 +399,11 @@ def stability( config, state=None, step=1e-2 ): 'TARGET_HEATFLUX' in files ) : pull.append( files['TARGET_HEATFLUX'] ) + # files: look up table + if ( 'FLAMELET_FLUID_MODEL' in special_cases and + 'LOOK_UP_TABLE' in files ) : + pull.append( files['LOOK_UP_TABLE'] ) + # pull needed files, start folder with redirect_folder( folder, pull, link ) as push: with redirect_output(log_direct): @@ -578,6 +587,11 @@ def multipoint( config, state=None, step=1e-2 ): 'TARGET_HEATFLUX' in files ) : pull.append( files['TARGET_HEATFLUX'] ) + # files: look up table + if ( 'FLAMELET_FLUID_MODEL' in special_cases and + 'LOOK_UP_TABLE' in files ) : + pull.append( files['LOOK_UP_TABLE'] ) + # pull needed files, start folder_0 with redirect_folder( folder[0], pull, link ) as push: with redirect_output(log_direct): @@ -900,12 +914,24 @@ def update_mesh(config,state=None): # redundancy check deform_set = config['DV_KIND'] == config['DEFINITION_DV']['KIND'] deform_todo = not config['DV_VALUE_NEW'] == config['DV_VALUE_OLD'] + + try: + do_remesh = config['ENABLE_REMESHING'] == 'YES' + except: + do_remesh = False + if deform_set and deform_todo: # files to pull pull = [] link = config['MESH_FILENAME'] link = su2io.expand_part(link,config) + + # add pointwise re-meshing glyph + if do_remesh: + pull.append('../../pointwise_remesh.glf') + pull.append('../../pointwise_defaults.pw') + pull.extend(config.get('CONFIG_LIST',[])) diff --git a/SU2_PY/SU2/eval/gradients.py b/SU2_PY/SU2/eval/gradients.py index 886993f9cbb9..0fd56a414f3f 100644 --- a/SU2_PY/SU2/eval/gradients.py +++ b/SU2_PY/SU2/eval/gradients.py @@ -289,6 +289,10 @@ def adjoint( func_name, config, state=None ): config['OUTPUT_FILES'].append('SURFACE_CSV') + # files: look up table + if 'FLAMELET_FLUID_MODEL' in special_cases: + pull.append(files['LOOK_UP_TABLE']) + # output redirection with redirect_folder( ADJ_NAME, pull, link ) as push: with redirect_output(log_adjoint): @@ -863,6 +867,9 @@ def findiff( config, state=None ): if 'INV_DESIGN_HEATFLUX' in special_cases and 'TARGET_HEATFLUX' in files: pull.append(files['TARGET_HEATFLUX']) + # files: target heat flux distribution + if 'FLAMELET_FLUID_MODEL' in special_cases and 'LOOK_UP_TABLE' in files: + pull.append(files['LOOK_UP_TABLE']) # output redirection with redirect_folder('FINDIFF',pull,link) as push: @@ -1151,6 +1158,10 @@ def directdiff( config, state=None ): if 'INV_DESIGN_HEATFLUX' in special_cases and 'TARGET_HEATFLUX' in files: pull.append(files['TARGET_HEATFLUX']) + # files: target heat flux distribution + if 'FLAMELET_FLUID_MODEL' in special_cases and 'LOOK_UP_TABLE' in files: + pull.append(files['LOOK_UP_TABLE']) + # output redirection with redirect_folder('DIRECTDIFF',pull,link) as push: with redirect_output(log_directdiff): diff --git a/SU2_PY/SU2/io/historyMap.py b/SU2_PY/SU2/io/historyMap.py index 88f8980b664b..89b1c1d3d962 100644 --- a/SU2_PY/SU2/io/historyMap.py +++ b/SU2_PY/SU2/io/historyMap.py @@ -1,15 +1,12 @@ -history_header_map = {'ADJOINT_DISP_X': {'DESCRIPTION': 'Root-mean square residual of the adjoint ' - 'of the X displacements.', +history_header_map = {'ADJOINT_DISP_X': {'DESCRIPTION': 'Root-mean square residual of the adjoint of the X displacements.', 'GROUP': 'RMS_RES', 'HEADER': 'rms[Ux_adj]', 'TYPE': 'RESIDUAL'}, - 'ADJOINT_DISP_Y': {'DESCRIPTION': 'Root-mean square residual of the adjoint ' - 'of the Y displacements.', + 'ADJOINT_DISP_Y': {'DESCRIPTION': 'Root-mean square residual of the adjoint of the Y displacements.', 'GROUP': 'RMS_RES', 'HEADER': 'rms[Uy_adj]', 'TYPE': 'RESIDUAL'}, - 'ADJOINT_DISP_Z': {'DESCRIPTION': 'Root-mean square residual of the adjoint ' - 'of the Z displacements.', + 'ADJOINT_DISP_Z': {'DESCRIPTION': 'Root-mean square residual of the adjoint of the Z displacements.', 'GROUP': 'RMS_RES', 'HEADER': 'rms[Uz_adj]', 'TYPE': 'RESIDUAL'}, @@ -25,23 +22,31 @@ 'GROUP': 'CFL_NUMBER', 'HEADER': 'Avg CFL', 'TYPE': 'DEFAULT'}, - 'AVG_DENSITY': {'DESCRIPTION': 'Total average density on all markers set in ' - 'MARKER_ANALYZE', + 'AVG_CO': {'DESCRIPTION': 'Total average mass fraction of CO on all markers set in MARKER_ANALYZE', + 'GROUP': 'SPECIES_COEFF', + 'HEADER': 'Avg_CO', + 'TYPE': 'COEFFICIENT'}, + 'AVG_DENSITY': {'DESCRIPTION': 'Total average density on all markers set in MARKER_ANALYZE', 'GROUP': 'FLOW_COEFF', 'HEADER': 'Avg_Density', 'TYPE': 'COEFFICIENT'}, - 'AVG_ENTHALPY': {'DESCRIPTION': 'Total average enthalpy on all markers set in ' - 'MARKER_ANALYZE', + 'AVG_ENTHALPY': {'DESCRIPTION': 'Total average enthalpy on all markers set in MARKER_ANALYZE', 'GROUP': 'FLOW_COEFF', 'HEADER': 'Avg_Enthalpy', 'TYPE': 'COEFFICIENT'}, - 'AVG_NORMALVEL': {'DESCRIPTION': 'Total average normal velocity on all ' - 'markers set in MARKER_ANALYZE', + 'AVG_NORMALVEL': {'DESCRIPTION': 'Total average normal velocity on all markers set in MARKER_ANALYZE', 'GROUP': 'FLOW_COEFF', 'HEADER': 'Avg_NormalVel', 'TYPE': 'COEFFICIENT'}, - 'AVG_TEMPERATURE': {'DESCRIPTION': 'Total average temperature on all surfaces ' - 'defined in MARKER_MONITORING', + 'AVG_NOX': {'DESCRIPTION': 'Total average mass fraction of NO on all markers set in MARKER_ANALYZE', + 'GROUP': 'SPECIES_COEFF', + 'HEADER': 'Avg_NOx', + 'TYPE': 'COEFFICIENT'}, + 'AVG_TEMP': {'DESCRIPTION': 'Total average temperature on all markers set in MARKER_ANALYZE', + 'GROUP': 'FLOW_COEFF', + 'HEADER': 'Avg_Temp', + 'TYPE': 'COEFFICIENT'}, + 'AVG_TEMPERATURE': {'DESCRIPTION': 'Total average temperature on all surfaces defined in MARKER_MONITORING', 'GROUP': 'HEAT', 'HEADER': 'AvgTemp', 'TYPE': 'COEFFICIENT'}, @@ -49,23 +54,19 @@ 'GROUP': 'BGS_RES', 'HEADER': 'bgs[A_Rho]', 'TYPE': 'RESIDUAL'}, - 'BGS_ADJ_DISP_X': {'DESCRIPTION': 'BGS residual of the adjoint X ' - 'displacement.', + 'BGS_ADJ_DISP_X': {'DESCRIPTION': 'BGS residual of the adjoint X displacement.', 'GROUP': 'BGS_RES', 'HEADER': 'bgs[A_Ux]', 'TYPE': 'RESIDUAL'}, - 'BGS_ADJ_DISP_Y': {'DESCRIPTION': 'BGS residual of the adjoint Y ' - 'displacement.', + 'BGS_ADJ_DISP_Y': {'DESCRIPTION': 'BGS residual of the adjoint Y displacement.', 'GROUP': 'BGS_RES', 'HEADER': 'bgs[A_Uy]', 'TYPE': 'RESIDUAL'}, - 'BGS_ADJ_DISP_Z': {'DESCRIPTION': 'BGS residual of the adjoint Z ' - 'displacement.', + 'BGS_ADJ_DISP_Z': {'DESCRIPTION': 'BGS residual of the adjoint Z displacement.', 'GROUP': 'BGS_RES', 'HEADER': 'bgs[A_Uz]', 'TYPE': 'RESIDUAL'}, - 'BGS_ADJ_DISSIPATION': {'DESCRIPTION': 'BGS residual of the adjoint ' - 'dissipation.', + 'BGS_ADJ_DISSIPATION': {'DESCRIPTION': 'BGS residual of the adjoint dissipation.', 'GROUP': 'BGS_RES', 'HEADER': 'bgs[A_w]', 'TYPE': 'RESIDUAL'}, @@ -73,18 +74,15 @@ 'GROUP': 'BGS_RES', 'HEADER': 'bgs[A_E]', 'TYPE': 'RESIDUAL'}, - 'BGS_ADJ_MOMENTUM-X': {'DESCRIPTION': 'BGS residual of the adjoint momentum ' - 'x-component', + 'BGS_ADJ_MOMENTUM-X': {'DESCRIPTION': 'BGS residual of the adjoint momentum x-component', 'GROUP': 'BGS_RES', 'HEADER': 'bgs[A_RhoU]', 'TYPE': 'RESIDUAL'}, - 'BGS_ADJ_MOMENTUM-Y': {'DESCRIPTION': 'BGS residual of the adjoint momentum ' - 'y-component', + 'BGS_ADJ_MOMENTUM-Y': {'DESCRIPTION': 'BGS residual of the adjoint momentum y-component', 'GROUP': 'BGS_RES', 'HEADER': 'bgs[A_RhoV]', 'TYPE': 'RESIDUAL'}, - 'BGS_ADJ_MOMENTUM-Z': {'DESCRIPTION': 'BGS residual of the adjoint momentum ' - 'z-component', + 'BGS_ADJ_MOMENTUM-Z': {'DESCRIPTION': 'BGS residual of the adjoint momentum z-component', 'GROUP': 'BGS_RES', 'HEADER': 'bgs[A_RhoW]', 'TYPE': 'RESIDUAL'}, @@ -96,13 +94,11 @@ 'GROUP': 'BGS_RES', 'HEADER': 'bgs[A_Rho]', 'TYPE': 'RESIDUAL'}, - 'BGS_ADJ_RAD_ENERGY': {'DESCRIPTION': 'BGS residual of the P1 radiative ' - 'energy.', + 'BGS_ADJ_RAD_ENERGY': {'DESCRIPTION': 'BGS residual of the P1 radiative energy.', 'GROUP': 'BGS_RES', 'HEADER': 'bgs[A_P1]', 'TYPE': 'RESIDUAL'}, - 'BGS_ADJ_TEMPERATURE': {'DESCRIPTION': 'BGS residual of the adjoint ' - 'temperature.', + 'BGS_ADJ_TEMPERATURE': {'DESCRIPTION': 'BGS residual of the adjoint temperature.', 'GROUP': 'BGS_RES', 'HEADER': 'bgs[A_T]', 'TYPE': 'RESIDUAL'}, @@ -110,18 +106,15 @@ 'GROUP': 'BGS_RES', 'HEADER': 'bgs[A_k]', 'TYPE': 'RESIDUAL'}, - 'BGS_ADJ_VELOCITY-X': {'DESCRIPTION': 'BGS residual of the adjoint Velocity ' - 'x-component', + 'BGS_ADJ_VELOCITY-X': {'DESCRIPTION': 'BGS residual of the adjoint Velocity x-component', 'GROUP': 'BGS_RES', 'HEADER': 'bgs[A_RhoU]', 'TYPE': 'RESIDUAL'}, - 'BGS_ADJ_VELOCITY-Y': {'DESCRIPTION': 'BGS residual of the adjoint Velocity ' - 'y-component', + 'BGS_ADJ_VELOCITY-Y': {'DESCRIPTION': 'BGS residual of the adjoint Velocity y-component', 'GROUP': 'BGS_RES', 'HEADER': 'bgs[A_RhoV]', 'TYPE': 'RESIDUAL'}, - 'BGS_ADJ_VELOCITY-Z': {'DESCRIPTION': 'BGS residual of the adjoint Velocity ' - 'z-component', + 'BGS_ADJ_VELOCITY-Z': {'DESCRIPTION': 'BGS residual of the adjoint Velocity z-component', 'GROUP': 'BGS_RES', 'HEADER': 'bgs[A_RhoW]', 'TYPE': 'RESIDUAL'}, @@ -149,6 +142,10 @@ 'GROUP': 'BGS_RES', 'HEADER': 'bgs[RhoE]', 'TYPE': 'RESIDUAL'}, + 'BGS_ENTHALPY': {'DESCRIPTION': 'BGS residual of the enthalpy equation.', + 'GROUP': 'BGS_RES', + 'HEADER': 'bgs[Enth]', + 'TYPE': 'RESIDUAL'}, 'BGS_MOMENTUM-X': {'DESCRIPTION': 'BGS residual of the momentum x-component.', 'GROUP': 'BGS_RES', 'HEADER': 'bgs[RhoU]', @@ -161,12 +158,19 @@ 'GROUP': 'BGS_RES', 'HEADER': 'bgs[nu]', 'TYPE': 'RESIDUAL'}, + 'BGS_PASSIVE_SCALAR': {'DESCRIPTION': 'BGS residual of the passive scalar equation.', + 'GROUP': 'BGS_RES', + 'HEADER': 'bgs[c]', + 'TYPE': 'RESIDUAL'}, 'BGS_PRESSURE': {'DESCRIPTION': 'BGS residual of the pressure.', 'GROUP': 'BGS_RES', 'HEADER': 'bgs[P]', 'TYPE': 'RESIDUAL'}, - 'BGS_TEMPERATURE': {'DESCRIPTION': 'Block-Gauss-Seidel residual of the ' - 'temperature', + 'BGS_PROGRESS_VARIABLE': {'DESCRIPTION': 'BGS residual of the progress variable equation.', + 'GROUP': 'BGS_RES', + 'HEADER': 'bgs[PV]', + 'TYPE': 'RESIDUAL'}, + 'BGS_TEMPERATURE': {'DESCRIPTION': 'Block-Gauss-Seidel residual of the temperature', 'GROUP': 'BGS_RES', 'HEADER': 'bgs[T]', 'TYPE': 'RESIDUAL'}, @@ -186,6 +190,14 @@ 'GROUP': 'BGS_RES', 'HEADER': 'bgs[W]', 'TYPE': 'RESIDUAL'}, + 'BGS_Y_CO': {'DESCRIPTION': 'BGS residual of the CO mass fraction equation.', + 'GROUP': 'BGS_RES', + 'HEADER': 'bgs[Y_CO]', + 'TYPE': 'RESIDUAL'}, + 'BGS_Y_NOX': {'DESCRIPTION': 'BGS residual of the NOx mass fraction equation.', + 'GROUP': 'BGS_RES', + 'HEADER': 'bgs[Y_NOx]', + 'TYPE': 'RESIDUAL'}, 'BUFFET': {'DESCRIPTION': 'Buffet sensor', 'GROUP': 'AERO_COEFF', 'HEADER': 'Buffet', @@ -194,8 +206,7 @@ 'GROUP': 'CFL_NUMBER', 'HEADER': 'CFL number', 'TYPE': 'DEFAULT'}, - 'CHANGE_IN_AOA': {'DESCRIPTION': 'Last change in Angle of Attack by Fixed CL ' - 'Driver', + 'CHANGE_IN_AOA': {'DESCRIPTION': 'Last change in Angle of Attack by Fixed CL Driver', 'GROUP': 'FIXED_CL', 'HEADER': 'Change_in_AOA', 'TYPE': 'RESIDUAL'}, @@ -211,8 +222,11 @@ 'GROUP': 'COMBO', 'HEADER': 'ComboObj', 'TYPE': 'COEFFICIENT'}, - 'DEFORM_ITER': {'DESCRIPTION': 'Linear solver iterations for the mesh ' - 'deformation', + 'CUSTOM_OBJFUNC': {'DESCRIPTION': 'Custom objective function on all surfaces set with MARKER_MONITORING', + 'GROUP': 'CUSTOM', + 'HEADER': 'Custom_ObjFunc', + 'TYPE': 'COEFFICIENT'}, + 'DEFORM_ITER': {'DESCRIPTION': 'Linear solver iterations for the mesh deformation', 'GROUP': 'DEFORM', 'HEADER': 'DeformIter', 'TYPE': 'DEFAULT'}, @@ -224,8 +238,7 @@ 'GROUP': 'DEFORM', 'HEADER': 'MinVolume', 'TYPE': 'DEFAULT'}, - 'DEFORM_RESIDUAL': {'DESCRIPTION': 'Residual of the linear solver for the ' - 'mesh deformation', + 'DEFORM_RESIDUAL': {'DESCRIPTION': 'Residual of the linear solver for the mesh deformation', 'GROUP': 'DEFORM', 'HEADER': 'DeformRes', 'TYPE': 'DEFAULT'}, @@ -233,8 +246,7 @@ 'GROUP': 'FIXED_CL', 'HEADER': 'Delta_CL', 'TYPE': 'COEFFICIENT'}, - 'DRAG': {'DESCRIPTION': 'Total drag coefficient on all surfaces set with ' - 'MARKER_MONITORING', + 'DRAG': {'DESCRIPTION': 'Total drag coefficient on all surfaces set with MARKER_MONITORING', 'GROUP': 'AERO_COEFF', 'HEADER': 'CD', 'TYPE': 'COEFFICIENT'}, @@ -242,6 +254,10 @@ 'GROUP': 'D_ENGINE_OUTPUT', 'HEADER': 'd[AeroCDrag]', 'TYPE': 'D_COEFFICIENT'}, + 'D_AVG_CO': {'DESCRIPTION': 'Derivative value', + 'GROUP': 'D_SPECIES_COEFF', + 'HEADER': 'd[Avg_CO]', + 'TYPE': 'D_COEFFICIENT'}, 'D_AVG_DENSITY': {'DESCRIPTION': 'Derivative value', 'GROUP': 'D_FLOW_COEFF', 'HEADER': 'd[Avg_Density]', @@ -254,6 +270,14 @@ 'GROUP': 'D_FLOW_COEFF', 'HEADER': 'd[Avg_NormalVel]', 'TYPE': 'D_COEFFICIENT'}, + 'D_AVG_NOX': {'DESCRIPTION': 'Derivative value', + 'GROUP': 'D_SPECIES_COEFF', + 'HEADER': 'd[Avg_NOx]', + 'TYPE': 'D_COEFFICIENT'}, + 'D_AVG_TEMP': {'DESCRIPTION': 'Derivative value', + 'GROUP': 'D_FLOW_COEFF', + 'HEADER': 'd[Avg_Temp]', + 'TYPE': 'D_COEFFICIENT'}, 'D_AVG_TEMPERATURE': {'DESCRIPTION': 'Derivative value', 'GROUP': 'D_HEAT', 'HEADER': 'd[AvgTemp]', @@ -270,6 +294,10 @@ 'GROUP': 'D_COMBO', 'HEADER': 'd[ComboObj]', 'TYPE': 'D_COEFFICIENT'}, + 'D_CUSTOM_OBJFUNC': {'DESCRIPTION': 'Derivative value', + 'GROUP': 'D_CUSTOM', + 'HEADER': 'd[Custom_ObjFunc]', + 'TYPE': 'D_COEFFICIENT'}, 'D_DELTA_CL': {'DESCRIPTION': 'Derivative value', 'GROUP': 'D_FIXED_CL', 'HEADER': 'd[Delta_CL]', @@ -446,8 +474,7 @@ 'GROUP': 'D_STRUCT_COEFF', 'HEADER': 'd[VolFrac]', 'TYPE': 'D_COEFFICIENT'}, - 'EFFICIENCY': {'DESCRIPTION': 'Total lift-to-drag ratio on all surfaces set ' - 'with MARKER_MONITORING', + 'EFFICIENCY': {'DESCRIPTION': 'Total lift-to-drag ratio on all surfaces set with MARKER_MONITORING', 'GROUP': 'AERO_COEFF', 'HEADER': 'CEff', 'TYPE': 'COEFFICIENT'}, @@ -459,18 +486,15 @@ 'GROUP': 'ROTATING_FRAME', 'HEADER': 'CMerit', 'TYPE': 'COEFFICIENT'}, - 'FORCE_X': {'DESCRIPTION': 'Total force x-component on all surfaces set with ' - 'MARKER_MONITORING', + 'FORCE_X': {'DESCRIPTION': 'Total force x-component on all surfaces set with MARKER_MONITORING', 'GROUP': 'AERO_COEFF', 'HEADER': 'CFx', 'TYPE': 'COEFFICIENT'}, - 'FORCE_Y': {'DESCRIPTION': 'Total force y-component on all surfaces set with ' - 'MARKER_MONITORING', + 'FORCE_Y': {'DESCRIPTION': 'Total force y-component on all surfaces set with MARKER_MONITORING', 'GROUP': 'AERO_COEFF', 'HEADER': 'CFy', 'TYPE': 'COEFFICIENT'}, - 'FORCE_Z': {'DESCRIPTION': 'Total force z-component on all surfaces set with ' - 'MARKER_MONITORING', + 'FORCE_Z': {'DESCRIPTION': 'Total force z-component on all surfaces set with MARKER_MONITORING', 'GROUP': 'AERO_COEFF', 'HEADER': 'CFz', 'TYPE': 'COEFFICIENT'}, @@ -478,8 +502,7 @@ 'GROUP': 'CP_DIFF', 'HEADER': 'Cp_Diff', 'TYPE': 'DEFAULT'}, - 'LIFT': {'DESCRIPTION': 'Total lift coefficient on all surfaces set with ' - 'MARKER_MONITORING', + 'LIFT': {'DESCRIPTION': 'Total lift coefficient on all surfaces set with MARKER_MONITORING', 'GROUP': 'AERO_COEFF', 'HEADER': 'CL', 'TYPE': 'COEFFICIENT'}, @@ -487,10 +510,18 @@ 'GROUP': 'LINSOL', 'HEADER': 'LinSolIter', 'TYPE': 'DEFAULT'}, + 'LINSOL_ITER_SCALAR': {'DESCRIPTION': 'Number of iterations of the linear scalar solver.', + 'GROUP': 'LINSOL', + 'HEADER': 'LinSolIter[c]', + 'TYPE': 'DEFAULT'}, 'LINSOL_RESIDUAL': {'DESCRIPTION': 'Residual of the linear solver.', 'GROUP': 'LINSOL', 'HEADER': 'LinSolRes', 'TYPE': 'DEFAULT'}, + 'LINSOL_RESIDUAL_SCALAR': {'DESCRIPTION': 'Residual of the linear scalar solver.', + 'GROUP': 'LINSOL', + 'HEADER': 'LinSolRes[c]', + 'TYPE': 'DEFAULT'}, 'LOAD_INCREMENT': {'DESCRIPTION': 'LOAD_INCREMENT', 'GROUP': '', 'HEADER': 'Load[%]', @@ -499,8 +530,7 @@ 'GROUP': '', 'HEADER': 'Load_Ramp', 'TYPE': 'DEFAULT'}, - 'MAXIMUM_HEATFLUX': {'DESCRIPTION': 'Total maximal heatflux on all surfaces ' - 'defined in MARKER_MONITORING', + 'MAXIMUM_HEATFLUX': {'DESCRIPTION': 'Total maximal heatflux on all surfaces defined in MARKER_MONITORING', 'GROUP': 'HEAT', 'HEADER': 'MaxHF', 'TYPE': 'COEFFICIENT'}, @@ -508,8 +538,7 @@ 'GROUP': 'MAX_RES', 'HEADER': 'max[A_Rho]', 'TYPE': 'RESIDUAL'}, - 'MAX_ADJ_DISSIPATION': {'DESCRIPTION': 'Maximum residual of the adjoint ' - 'dissipation.', + 'MAX_ADJ_DISSIPATION': {'DESCRIPTION': 'Maximum residual of the adjoint dissipation.', 'GROUP': 'MAX_RES', 'HEADER': 'max[A_w]', 'TYPE': 'RESIDUAL'}, @@ -517,28 +546,23 @@ 'GROUP': 'MAX_RES', 'HEADER': 'max[A_E]', 'TYPE': 'RESIDUAL'}, - 'MAX_ADJ_MOMENTUM-X': {'DESCRIPTION': 'Maximum residual of the adjoint ' - 'momentum x-component', + 'MAX_ADJ_MOMENTUM-X': {'DESCRIPTION': 'Maximum residual of the adjoint momentum x-component', 'GROUP': 'MAX_RES', 'HEADER': 'max[A_RhoU]', 'TYPE': 'RESIDUAL'}, - 'MAX_ADJ_MOMENTUM-Y': {'DESCRIPTION': 'Maximum residual of the adjoint ' - 'momentum y-component', + 'MAX_ADJ_MOMENTUM-Y': {'DESCRIPTION': 'Maximum residual of the adjoint momentum y-component', 'GROUP': 'MAX_RES', 'HEADER': 'max[A_RhoV]', 'TYPE': 'RESIDUAL'}, - 'MAX_ADJ_MOMENTUM-Z': {'DESCRIPTION': 'Maximum residual of the adjoint ' - 'momentum z-component', + 'MAX_ADJ_MOMENTUM-Z': {'DESCRIPTION': 'Maximum residual of the adjoint momentum z-component', 'GROUP': 'MAX_RES', 'HEADER': 'max[A_RhoW]', 'TYPE': 'RESIDUAL'}, - 'MAX_ADJ_NU_TILDE': {'DESCRIPTION': 'Maximum residual of the adjoint nu ' - 'tilde.', + 'MAX_ADJ_NU_TILDE': {'DESCRIPTION': 'Maximum residual of the adjoint nu tilde.', 'GROUP': 'MAX_RES', 'HEADER': 'max[A_nu]', 'TYPE': 'RESIDUAL'}, - 'MAX_ADJ_PRESSURE': {'DESCRIPTION': 'Maximum residual of the adjoint ' - 'Pressure.', + 'MAX_ADJ_PRESSURE': {'DESCRIPTION': 'Maximum residual of the adjoint Pressure.', 'GROUP': 'MAX_RES', 'HEADER': 'max[A_Rho]', 'TYPE': 'RESIDUAL'}, @@ -546,23 +570,19 @@ 'GROUP': 'MAX_RES', 'HEADER': 'max[A_T]', 'TYPE': 'RESIDUAL'}, - 'MAX_ADJ_TKE': {'DESCRIPTION': 'Maximum residual of the adjoint kinetic ' - 'energy.', + 'MAX_ADJ_TKE': {'DESCRIPTION': 'Maximum residual of the adjoint kinetic energy.', 'GROUP': 'MAX_RES', 'HEADER': 'max[A_k]', 'TYPE': 'RESIDUAL'}, - 'MAX_ADJ_VELOCITY-X': {'DESCRIPTION': 'Maximum residual of the adjoint ' - 'Velocity x-component', + 'MAX_ADJ_VELOCITY-X': {'DESCRIPTION': 'Maximum residual of the adjoint Velocity x-component', 'GROUP': 'MAX_RES', 'HEADER': 'max[A_RhoU]', 'TYPE': 'RESIDUAL'}, - 'MAX_ADJ_VELOCITY-Y': {'DESCRIPTION': 'Maximum residual of the adjoint ' - 'Velocity y-component', + 'MAX_ADJ_VELOCITY-Y': {'DESCRIPTION': 'Maximum residual of the adjoint Velocity y-component', 'GROUP': 'MAX_RES', 'HEADER': 'max[A_RhoV]', 'TYPE': 'RESIDUAL'}, - 'MAX_ADJ_VELOCITY-Z': {'DESCRIPTION': 'Maximum residual of the adjoint ' - 'Velocity z-component', + 'MAX_ADJ_VELOCITY-Z': {'DESCRIPTION': 'Maximum residual of the adjoint Velocity z-component', 'GROUP': 'MAX_RES', 'HEADER': 'max[A_RhoW]', 'TYPE': 'RESIDUAL'}, @@ -578,8 +598,7 @@ 'GROUP': 'MAX_RES', 'HEADER': 'max[Rho]', 'TYPE': 'RESIDUAL'}, - 'MAX_DISSIPATION': {'DESCRIPTION': 'Maximum residual of dissipation (SST ' - 'model).', + 'MAX_DISSIPATION': {'DESCRIPTION': 'Maximum residual of dissipation (SST model).', 'GROUP': 'MAX_RES', 'HEADER': 'max[w]', 'TYPE': 'RESIDUAL'}, @@ -587,13 +606,15 @@ 'GROUP': 'MAX_RES', 'HEADER': 'max[RhoE]', 'TYPE': 'RESIDUAL'}, - 'MAX_MOMENTUM-X': {'DESCRIPTION': 'Maximum square residual of the momentum ' - 'x-component.', + 'MAX_ENTHALPY': {'DESCRIPTION': 'Maximum residual of the enthalpy equation.', + 'GROUP': 'MAX_RES', + 'HEADER': 'max[Enth]', + 'TYPE': 'RESIDUAL'}, + 'MAX_MOMENTUM-X': {'DESCRIPTION': 'Maximum square residual of the momentum x-component.', 'GROUP': 'MAX_RES', 'HEADER': 'max[RhoU]', 'TYPE': 'RESIDUAL'}, - 'MAX_MOMENTUM-Y': {'DESCRIPTION': 'Maximum square residual of the momentum ' - 'y-component.', + 'MAX_MOMENTUM-Y': {'DESCRIPTION': 'Maximum square residual of the momentum y-component.', 'GROUP': 'MAX_RES', 'HEADER': 'max[RhoV]', 'TYPE': 'RESIDUAL'}, @@ -601,10 +622,18 @@ 'GROUP': 'MAX_RES', 'HEADER': 'max[nu]', 'TYPE': 'RESIDUAL'}, + 'MAX_PASSIVE_SCALAR': {'DESCRIPTION': 'Maximum residual of the passive scalar equation.', + 'GROUP': 'MAX_RES', + 'HEADER': 'max[c]', + 'TYPE': 'RESIDUAL'}, 'MAX_PRESSURE': {'DESCRIPTION': 'Maximum residual of the pressure.', 'GROUP': 'MAX_RES', 'HEADER': 'max[P]', 'TYPE': 'RESIDUAL'}, + 'MAX_PROGRESS_VARIABLE': {'DESCRIPTION': 'Maximum residual of the progress variable equation.', + 'GROUP': 'MAX_RES', + 'HEADER': 'max[PV]', + 'TYPE': 'RESIDUAL'}, 'MAX_TEMPERATURE': {'DESCRIPTION': 'Maximum residual of the temperature', 'GROUP': 'MAX_RES', 'HEADER': 'max[T]', @@ -613,21 +642,26 @@ 'GROUP': 'MAX_RES', 'HEADER': 'max[k]', 'TYPE': 'RESIDUAL'}, - 'MAX_VELOCITY-X': {'DESCRIPTION': 'Maximum residual of the velocity ' - 'x-component.', + 'MAX_VELOCITY-X': {'DESCRIPTION': 'Maximum residual of the velocity x-component.', 'GROUP': 'MAX_RES', 'HEADER': 'max[U]', 'TYPE': 'RESIDUAL'}, - 'MAX_VELOCITY-Y': {'DESCRIPTION': 'Maximum residual of the velocity ' - 'y-component.', + 'MAX_VELOCITY-Y': {'DESCRIPTION': 'Maximum residual of the velocity y-component.', 'GROUP': 'MAX_RES', 'HEADER': 'max[V]', 'TYPE': 'RESIDUAL'}, - 'MAX_VELOCITY-Z': {'DESCRIPTION': 'Maximum residual of the velocity ' - 'z-component.', + 'MAX_VELOCITY-Z': {'DESCRIPTION': 'Maximum residual of the velocity z-component.', 'GROUP': 'MAX_RES', 'HEADER': 'max[W]', 'TYPE': 'RESIDUAL'}, + 'MAX_Y_CO': {'DESCRIPTION': 'Maximum residual of the CO mass fraction equation.', + 'GROUP': 'MAX_RES', + 'HEADER': 'max[Y_CO]', + 'TYPE': 'RESIDUAL'}, + 'MAX_Y_NOX': {'DESCRIPTION': 'Maximum residual of the NOx mass fraction equation.', + 'GROUP': 'MAX_RES', + 'HEADER': 'max[Y_NOx]', + 'TYPE': 'RESIDUAL'}, 'MIN_CFL': {'DESCRIPTION': 'Current minimum of the local CFL numbers', 'GROUP': 'CFL_NUMBER', 'HEADER': 'Min CFL', @@ -636,18 +670,15 @@ 'GROUP': 'CFL_NUMBER', 'HEADER': 'Min DT', 'TYPE': 'DEFAULT'}, - 'MOMENT_X': {'DESCRIPTION': 'Total momentum x-component on all surfaces set ' - 'with MARKER_MONITORING', + 'MOMENT_X': {'DESCRIPTION': 'Total momentum x-component on all surfaces set with MARKER_MONITORING', 'GROUP': 'AERO_COEFF', 'HEADER': 'CMx', 'TYPE': 'COEFFICIENT'}, - 'MOMENT_Y': {'DESCRIPTION': 'Total momentum y-component on all surfaces set ' - 'with MARKER_MONITORING', + 'MOMENT_Y': {'DESCRIPTION': 'Total momentum y-component on all surfaces set with MARKER_MONITORING', 'GROUP': 'AERO_COEFF', 'HEADER': 'CMy', 'TYPE': 'COEFFICIENT'}, - 'MOMENT_Z': {'DESCRIPTION': 'Total momentum z-component on all surfaces set ' - 'with MARKER_MONITORING', + 'MOMENT_Z': {'DESCRIPTION': 'Total momentum z-component on all surfaces set with MARKER_MONITORING', 'GROUP': 'AERO_COEFF', 'HEADER': 'CMz', 'TYPE': 'COEFFICIENT'}, @@ -655,8 +686,11 @@ 'GROUP': 'EQUIVALENT_AREA', 'HEADER': 'CNearFieldOF', 'TYPE': 'COEFFICIENT'}, - 'PREV_AOA': {'DESCRIPTION': 'Angle of Attack at the previous iteration of the ' - 'Fixed CL driver', + 'N_TABLE_MISSES': {'DESCRIPTION': 'number of table misses', + 'GROUP': 'RMS_RES', + 'HEADER': '# table misses', + 'TYPE': 'RESIDUAL'}, + 'PREV_AOA': {'DESCRIPTION': 'Angle of Attack at the previous iteration of the Fixed CL driver', 'GROUP': 'FIXED_CL', 'HEADER': 'Previous_AOA', 'TYPE': 'DEFAULT'}, @@ -672,73 +706,79 @@ 'GROUP': 'STRUCT_COEFF', 'HEADER': 'RefNode', 'TYPE': 'COEFFICIENT'}, - 'RMS_ADJ_DENSITY': {'DESCRIPTION': 'Root-mean square residual of the adjoint ' - 'density.', + 'RMS_ADJ_CO': {'DESCRIPTION': 'Root-mean square residual of the adjoint CO.', + 'GROUP': 'RMS_RES', + 'HEADER': 'rms[A_CO]', + 'TYPE': 'RESIDUAL'}, + 'RMS_ADJ_DENSITY': {'DESCRIPTION': 'Root-mean square residual of the adjoint density.', 'GROUP': 'RMS_RES', 'HEADER': 'rms[A_Rho]', 'TYPE': 'RESIDUAL'}, - 'RMS_ADJ_DISSIPATION': {'DESCRIPTION': 'Root-mean square residual of the ' - 'adjoint dissipation.', + 'RMS_ADJ_DISSIPATION': {'DESCRIPTION': 'Root-mean square residual of the adjoint dissipation.', 'GROUP': 'RMS_RES', 'HEADER': 'rms[A_w]', 'TYPE': 'RESIDUAL'}, - 'RMS_ADJ_ENERGY': {'DESCRIPTION': 'Root-mean square residual of the adjoint ' - 'energy.', + 'RMS_ADJ_ENERGY': {'DESCRIPTION': 'Root-mean square residual of the adjoint energy.', 'GROUP': 'RMS_RES', 'HEADER': 'rms[A_E]', 'TYPE': 'RESIDUAL'}, - 'RMS_ADJ_MOMENTUM-X': {'DESCRIPTION': 'Root-mean square residual of the ' - 'adjoint momentum x-component.', + 'RMS_ADJ_ENTHALPY': {'DESCRIPTION': 'Root-mean square residual of the adjoint enthalpy.', + 'GROUP': 'RMS_RES', + 'HEADER': 'rms[A_enth]', + 'TYPE': 'RESIDUAL'}, + 'RMS_ADJ_MOMENTUM-X': {'DESCRIPTION': 'Root-mean square residual of the adjoint momentum x-component.', 'GROUP': 'RMS_RES', 'HEADER': 'rms[A_RhoU]', 'TYPE': 'RESIDUAL'}, - 'RMS_ADJ_MOMENTUM-Y': {'DESCRIPTION': 'Root-mean square residual of the ' - 'adjoint momentum y-component.', + 'RMS_ADJ_MOMENTUM-Y': {'DESCRIPTION': 'Root-mean square residual of the adjoint momentum y-component.', 'GROUP': 'RMS_RES', 'HEADER': 'rms[A_RhoV]', 'TYPE': 'RESIDUAL'}, - 'RMS_ADJ_MOMENTUM-Z': {'DESCRIPTION': 'Root-mean square residual of the ' - 'adjoint momentum z-component.', + 'RMS_ADJ_MOMENTUM-Z': {'DESCRIPTION': 'Root-mean square residual of the adjoint momentum z-component.', 'GROUP': 'RMS_RES', 'HEADER': 'rms[A_RhoW]', 'TYPE': 'RESIDUAL'}, - 'RMS_ADJ_NU_TILDE': {'DESCRIPTION': 'Root-mean square residual of the adjoint ' - 'nu tilde.', + 'RMS_ADJ_NOX': {'DESCRIPTION': 'Root-mean square residual of the adjoint NOx.', + 'GROUP': 'RMS_RES', + 'HEADER': 'rms[A_NOX]', + 'TYPE': 'RESIDUAL'}, + 'RMS_ADJ_NU_TILDE': {'DESCRIPTION': 'Root-mean square residual of the adjoint nu tilde.', 'GROUP': 'RMS_RES', 'HEADER': 'rms[A_nu]', 'TYPE': 'RESIDUAL'}, - 'RMS_ADJ_PRESSURE': {'DESCRIPTION': 'Root-mean square residual of the adjoint ' - 'Pressure.', + 'RMS_ADJ_PASSIVE_SCALAR': {'DESCRIPTION': 'Root-mean squared residual of the adjoint passive scalar equation.', + 'GROUP': 'RMS_RES', + 'HEADER': 'rms[A_c]', + 'TYPE': 'RESIDUAL'}, + 'RMS_ADJ_PRESSURE': {'DESCRIPTION': 'Root-mean square residual of the adjoint Pressure.', 'GROUP': 'RMS_RES', 'HEADER': 'rms[A_P]', 'TYPE': 'RESIDUAL'}, - 'RMS_ADJ_RAD_ENERGY': {'DESCRIPTION': 'Root-mean square residual of the P1 ' - 'radiative energy.', + 'RMS_ADJ_PROGRESS_VARIABLE': {'DESCRIPTION': 'Root-mean square residual of the adjoint progress variable.', + 'GROUP': 'RMS_RES', + 'HEADER': 'rms[A_prog]', + 'TYPE': 'RESIDUAL'}, + 'RMS_ADJ_RAD_ENERGY': {'DESCRIPTION': 'Root-mean square residual of the P1 radiative energy.', 'GROUP': 'RMS_RES', 'HEADER': 'rms[A_P1]', 'TYPE': 'RESIDUAL'}, - 'RMS_ADJ_TEMPERATURE': {'DESCRIPTION': 'Root-mean square residual of the ' - 'adjoint temperature.', + 'RMS_ADJ_TEMPERATURE': {'DESCRIPTION': 'Root-mean square residual of the adjoint temperature.', 'GROUP': 'RMS_RES', 'HEADER': 'rms[A_T]', 'TYPE': 'RESIDUAL'}, - 'RMS_ADJ_TKE': {'DESCRIPTION': 'Root-mean square residual of the adjoint ' - 'kinetic energy.', + 'RMS_ADJ_TKE': {'DESCRIPTION': 'Root-mean square residual of the adjoint kinetic energy.', 'GROUP': 'RMS_RES', 'HEADER': 'rms[A_k]', 'TYPE': 'RESIDUAL'}, - 'RMS_ADJ_VELOCITY-X': {'DESCRIPTION': 'Root-mean square residual of the ' - 'adjoint Velocity x-component.', + 'RMS_ADJ_VELOCITY-X': {'DESCRIPTION': 'Root-mean square residual of the adjoint Velocity x-component.', 'GROUP': 'RMS_RES', 'HEADER': 'rms[A_U]', 'TYPE': 'RESIDUAL'}, - 'RMS_ADJ_VELOCITY-Y': {'DESCRIPTION': 'Root-mean square residual of the ' - 'adjoint Velocity y-component.', + 'RMS_ADJ_VELOCITY-Y': {'DESCRIPTION': 'Root-mean square residual of the adjoint Velocity y-component.', 'GROUP': 'RMS_RES', 'HEADER': 'rms[A_V]', 'TYPE': 'RESIDUAL'}, - 'RMS_ADJ_VELOCITY-Z': {'DESCRIPTION': 'Root-mean square residual of the ' - 'adjoint Velocity z-component.', + 'RMS_ADJ_VELOCITY-Z': {'DESCRIPTION': 'Root-mean square residual of the adjoint Velocity z-component.', 'GROUP': 'RMS_RES', 'HEADER': 'rms[A_W]', 'TYPE': 'RESIDUAL'}, @@ -758,8 +798,7 @@ 'GROUP': 'RMS_RES', 'HEADER': 'rms[DispZ]', 'TYPE': 'RESIDUAL'}, - 'RMS_DISSIPATION': {'DESCRIPTION': 'Root-mean square residual of dissipation ' - '(SST model).', + 'RMS_DISSIPATION': {'DESCRIPTION': 'Root-mean square residual of dissipation (SST model).', 'GROUP': 'RMS_RES', 'HEADER': 'rms[w]', 'TYPE': 'RESIDUAL'}, @@ -767,40 +806,47 @@ 'GROUP': 'RMS_RES', 'HEADER': 'rms[RhoE]', 'TYPE': 'RESIDUAL'}, + 'RMS_ENTHALPY': {'DESCRIPTION': 'Root-mean squared residual of the enthalpy equation.', + 'GROUP': 'RMS_RES', + 'HEADER': 'rms[Enth]', + 'TYPE': 'RESIDUAL'}, 'RMS_ETOL': {'DESCRIPTION': '', 'GROUP': 'RMS_RES', 'HEADER': 'rms[E]', 'TYPE': 'RESIDUAL'}, - 'RMS_MOMENTUM-X': {'DESCRIPTION': 'Root-mean square residual of the momentum ' - 'x-component.', + 'RMS_MOMENTUM-X': {'DESCRIPTION': 'Root-mean square residual of the momentum x-component.', 'GROUP': 'RMS_RES', 'HEADER': 'rms[RhoU]', 'TYPE': 'RESIDUAL'}, - 'RMS_MOMENTUM-Y': {'DESCRIPTION': 'Root-mean square residual of the momentum ' - 'y-component.', + 'RMS_MOMENTUM-Y': {'DESCRIPTION': 'Root-mean square residual of the momentum y-component.', 'GROUP': 'RMS_RES', 'HEADER': 'rms[RhoV]', 'TYPE': 'RESIDUAL'}, - 'RMS_NU_TILDE': {'DESCRIPTION': 'Root-mean square residual of nu tilde (SA ' - 'model).', + 'RMS_NU_TILDE': {'DESCRIPTION': 'Root-mean square residual of nu tilde (SA model).', 'GROUP': 'RMS_RES', 'HEADER': 'rms[nu]', 'TYPE': 'RESIDUAL'}, + 'RMS_PASSIVE_SCALAR': {'DESCRIPTION': 'Root-mean squared residual of the passive scalar equation.', + 'GROUP': 'RMS_RES', + 'HEADER': 'rms[c]', + 'TYPE': 'RESIDUAL'}, 'RMS_PRESSURE': {'DESCRIPTION': 'Root-mean square residual of the pressure.', 'GROUP': 'RMS_RES', 'HEADER': 'rms[P]', 'TYPE': 'RESIDUAL'}, + 'RMS_PROGRESS_VARIABLE': {'DESCRIPTION': 'Root-mean squared residual of the progress variable equation.', + 'GROUP': 'RMS_RES', + 'HEADER': 'rms[PV]', + 'TYPE': 'RESIDUAL'}, 'RMS_RTOL': {'DESCRIPTION': '', 'GROUP': 'RMS_RES', 'HEADER': 'rms[R]', 'TYPE': 'RESIDUAL'}, - 'RMS_TEMPERATURE': {'DESCRIPTION': 'Root mean square residual of the ' - 'temperature', + 'RMS_TEMPERATURE': {'DESCRIPTION': 'Root mean square residual of the temperature', 'GROUP': 'RMS_RES', 'HEADER': 'rms[T]', 'TYPE': 'RESIDUAL'}, - 'RMS_TKE': {'DESCRIPTION': 'Root-mean square residual of kinetic energy (SST ' - 'model).', + 'RMS_TKE': {'DESCRIPTION': 'Root-mean square residual of kinetic energy (SST model).', 'GROUP': 'RMS_RES', 'HEADER': 'rms[k]', 'TYPE': 'RESIDUAL'}, @@ -808,19 +854,23 @@ 'GROUP': 'RMS_RES', 'HEADER': 'rms[U]', 'TYPE': 'RESIDUAL'}, - 'RMS_VELOCITY-X': {'DESCRIPTION': 'Root-mean square residual of the velocity ' - 'x-component.', + 'RMS_VELOCITY-X': {'DESCRIPTION': 'Root-mean square residual of the velocity x-component.', 'GROUP': 'RMS_RES', 'HEADER': 'rms[U]', 'TYPE': 'RESIDUAL'}, - 'RMS_VELOCITY-Y': {'DESCRIPTION': 'Root-mean square residual of the velocity ' - 'y-component.', + 'RMS_VELOCITY-Y': {'DESCRIPTION': 'Root-mean square residual of the velocity y-component.', 'GROUP': 'RMS_RES', 'HEADER': 'rms[V]', 'TYPE': 'RESIDUAL'}, - 'SENS_AOA': {'DESCRIPTION': 'Sensitivity of the objective function with ' - 'respect to the angle of attack (only for ' - 'compressible solver).', + 'RMS_Y_CO': {'DESCRIPTION': 'Root-mean squared residual of the CO mass fraction equation.', + 'GROUP': 'RMS_RES', + 'HEADER': 'rms[Y_CO]', + 'TYPE': 'RESIDUAL'}, + 'RMS_Y_NOX': {'DESCRIPTION': 'Root-mean squared residual of the NOx mass fraction equation.', + 'GROUP': 'RMS_RES', + 'HEADER': 'rms[Y_NOx]', + 'TYPE': 'RESIDUAL'}, + 'SENS_AOA': {'DESCRIPTION': 'Sensitivity of the objective function with respect to the angle of attack (only for compressible solver).', 'GROUP': 'SENSITIVITY', 'HEADER': 'Sens_AoA', 'TYPE': 'COEFFICIENT'}, @@ -828,14 +878,11 @@ 'GROUP': 'SENSITIVITY', 'HEADER': 'Sens[E]', 'TYPE': 'DEFAULT'}, - 'SENS_GEO': {'DESCRIPTION': 'Sum of the geometrical sensitivities on all ' - 'markers set in MARKER_MONITORING.', + 'SENS_GEO': {'DESCRIPTION': 'Sum of the geometrical sensitivities on all markers set in MARKER_MONITORING.', 'GROUP': 'SENSITIVITY', 'HEADER': 'Sens_Geo', 'TYPE': 'COEFFICIENT'}, - 'SENS_MACH': {'DESCRIPTION': 'Sensitivity of the objective function with ' - 'respect to the Mach number (only of ' - 'compressible solver).', + 'SENS_MACH': {'DESCRIPTION': 'Sensitivity of the objective function with respect to the Mach number (only of compressible solver).', 'GROUP': 'SENSITIVITY', 'HEADER': 'Sens_Mach', 'TYPE': 'COEFFICIENT'}, @@ -843,28 +890,23 @@ 'GROUP': 'SENSITIVITY', 'HEADER': 'Sens[Nu]', 'TYPE': 'DEFAULT'}, - 'SENS_PRESS': {'DESCRIPTION': 'Sensitivity of the objective function with ' - 'respect to the far-field pressure.', + 'SENS_PRESS': {'DESCRIPTION': 'Sensitivity of the objective function with respect to the far-field pressure.', 'GROUP': 'SENSITIVITY', 'HEADER': 'Sens_Press', 'TYPE': 'COEFFICIENT'}, - 'SENS_PRESS_OUT': {'DESCRIPTION': 'Sensitivity of the objective function with ' - 'respect to the outlet pressure.', + 'SENS_PRESS_OUT': {'DESCRIPTION': 'Sensitivity of the objective function with respect to the outlet pressure.', 'GROUP': 'SENSITIVITY', 'HEADER': 'Sens_Pout', 'TYPE': 'COEFFICIENT'}, - 'SENS_TEMP': {'DESCRIPTION': 'Sensitivity of the objective function with ' - 'respect to the far-field temperature.', + 'SENS_TEMP': {'DESCRIPTION': 'Sensitivity of the objective function with respect to the far-field temperature.', 'GROUP': 'SENSITIVITY', 'HEADER': 'Sens_Temp', 'TYPE': 'COEFFICIENT'}, - 'SENS_VEL_IN': {'DESCRIPTION': 'Sensitivity of the objective function with ' - 'respect to the inlet velocity.', + 'SENS_VEL_IN': {'DESCRIPTION': 'Sensitivity of the objective function with respect to the inlet velocity.', 'GROUP': 'SENSITIVITY', 'HEADER': 'Sens_Vin', 'TYPE': 'COEFFICIENT'}, - 'SIDEFORCE': {'DESCRIPTION': 'Total sideforce coefficient on all surfaces set ' - 'with MARKER_MONITORING', + 'SIDEFORCE': {'DESCRIPTION': 'Total sideforce coefficient on all surfaces set with MARKER_MONITORING', 'GROUP': 'AERO_COEFF', 'HEADER': 'CSF', 'TYPE': 'COEFFICIENT'}, @@ -876,8 +918,7 @@ 'GROUP': 'STREAMWISE_PERIODIC', 'HEADER': 'SWDeltaP', 'TYPE': 'DEFAULT'}, - 'STREAMWISE_HEAT': {'DESCRIPTION': 'Integrated heat for streamwise periodic ' - 'flow', + 'STREAMWISE_HEAT': {'DESCRIPTION': 'Integrated heat for streamwise periodic flow', 'GROUP': 'STREAMWISE_PERIODIC', 'HEADER': 'SWHeat', 'TYPE': 'DEFAULT'}, @@ -889,61 +930,47 @@ 'GROUP': 'STRUCT_COEFF', 'HEADER': 'StressPen', 'TYPE': 'COEFFICIENT'}, - 'SURFACE_MACH': {'DESCRIPTION': 'Total average mach number on all markers set ' - 'in MARKER_ANALYZE', + 'SURFACE_MACH': {'DESCRIPTION': 'Total average mach number on all markers set in MARKER_ANALYZE', 'GROUP': 'FLOW_COEFF', 'HEADER': 'Avg_Mach', 'TYPE': 'COEFFICIENT'}, - 'SURFACE_MASSFLOW': {'DESCRIPTION': 'Total average mass flow on all markers ' - 'set in MARKER_ANALYZE', + 'SURFACE_MASSFLOW': {'DESCRIPTION': 'Total average mass flow on all markers set in MARKER_ANALYZE', 'GROUP': 'FLOW_COEFF', 'HEADER': 'Avg_Massflow', 'TYPE': 'COEFFICIENT'}, - 'SURFACE_MOM_DISTORTION': {'DESCRIPTION': 'Total momentum distortion on all ' - 'markers set in MARKER_ANALYZE', + 'SURFACE_MOM_DISTORTION': {'DESCRIPTION': 'Total momentum distortion on all markers set in MARKER_ANALYZE', 'GROUP': 'FLOW_COEFF', 'HEADER': 'Momentum_Distortion', 'TYPE': 'COEFFICIENT'}, - 'SURFACE_PRESSURE_DROP': {'DESCRIPTION': 'Total pressure drop on all markers ' - 'set in MARKER_ANALYZE', + 'SURFACE_PRESSURE_DROP': {'DESCRIPTION': 'Total pressure drop on all markers set in MARKER_ANALYZE', 'GROUP': 'FLOW_COEFF', 'HEADER': 'Pressure_Drop', 'TYPE': 'COEFFICIENT'}, - 'SURFACE_SECONDARY': {'DESCRIPTION': 'Total secondary strength on all markers ' - 'set in MARKER_ANALYZE', + 'SURFACE_SECONDARY': {'DESCRIPTION': 'Total secondary strength on all markers set in MARKER_ANALYZE', 'GROUP': 'FLOW_COEFF', 'HEADER': 'Secondary_Strength', 'TYPE': 'COEFFICIENT'}, - 'SURFACE_SECOND_OVER_UNIFORM': {'DESCRIPTION': 'Total secondary over ' - 'uniformity on all markers set ' - 'in MARKER_ANALYZE', + 'SURFACE_SECOND_OVER_UNIFORM': {'DESCRIPTION': 'Total secondary over uniformity on all markers set in MARKER_ANALYZE', 'GROUP': 'FLOW_COEFF', 'HEADER': 'Secondary_Over_Uniformity', 'TYPE': 'COEFFICIENT'}, - 'SURFACE_STATIC_PRESSURE': {'DESCRIPTION': 'Total average pressure on all ' - 'markers set in MARKER_ANALYZE', + 'SURFACE_STATIC_PRESSURE': {'DESCRIPTION': 'Total average pressure on all markers set in MARKER_ANALYZE', 'GROUP': 'FLOW_COEFF', 'HEADER': 'Avg_Press', 'TYPE': 'COEFFICIENT'}, - 'SURFACE_STATIC_TEMPERATURE': {'DESCRIPTION': 'Total average temperature on ' - 'all markers set in ' - 'MARKER_ANALYZE', + 'SURFACE_STATIC_TEMPERATURE': {'DESCRIPTION': 'Total average temperature on all markers set in MARKER_ANALYZE', 'GROUP': 'FLOW_COEFF', 'HEADER': 'Avg_Temp', 'TYPE': 'COEFFICIENT'}, - 'SURFACE_TOTAL_PRESSURE': {'DESCRIPTION': 'Total average total pressure on ' - 'all markers set in MARKER_ANALYZE', + 'SURFACE_TOTAL_PRESSURE': {'DESCRIPTION': 'Total average total pressure on all markers set in MARKER_ANALYZE', 'GROUP': 'FLOW_COEFF', 'HEADER': 'Avg_TotalPress', 'TYPE': 'COEFFICIENT'}, - 'SURFACE_TOTAL_TEMPERATURE': {'DESCRIPTION': 'Total average total temperature ' - 'all markers set in ' - 'MARKER_ANALYZE', + 'SURFACE_TOTAL_TEMPERATURE': {'DESCRIPTION': 'Total average total temperature all markers set in MARKER_ANALYZE', 'GROUP': 'FLOW_COEFF', 'HEADER': 'Avg_TotalTemp', 'TYPE': 'COEFFICIENT'}, - 'SURFACE_UNIFORMITY': {'DESCRIPTION': 'Total flow uniformity on all markers ' - 'set in MARKER_ANALYZE', + 'SURFACE_UNIFORMITY': {'DESCRIPTION': 'Total flow uniformity on all markers set in MARKER_ANALYZE', 'GROUP': 'FLOW_COEFF', 'HEADER': 'Uniformity', 'TYPE': 'COEFFICIENT'}, @@ -951,6 +978,10 @@ 'GROUP': 'TAVG_ENGINE_OUTPUT', 'HEADER': 'tavg[AeroCDrag]', 'TYPE': 'TAVG_COEFFICIENT'}, + 'TAVG_AVG_CO': {'DESCRIPTION': 'weighted time average value', + 'GROUP': 'TAVG_SPECIES_COEFF', + 'HEADER': 'tavg[Avg_CO]', + 'TYPE': 'TAVG_COEFFICIENT'}, 'TAVG_AVG_DENSITY': {'DESCRIPTION': 'weighted time average value', 'GROUP': 'TAVG_FLOW_COEFF', 'HEADER': 'tavg[Avg_Density]', @@ -963,6 +994,14 @@ 'GROUP': 'TAVG_FLOW_COEFF', 'HEADER': 'tavg[Avg_NormalVel]', 'TYPE': 'TAVG_COEFFICIENT'}, + 'TAVG_AVG_NOX': {'DESCRIPTION': 'weighted time average value', + 'GROUP': 'TAVG_SPECIES_COEFF', + 'HEADER': 'tavg[Avg_NOx]', + 'TYPE': 'TAVG_COEFFICIENT'}, + 'TAVG_AVG_TEMP': {'DESCRIPTION': 'weighted time average value', + 'GROUP': 'TAVG_FLOW_COEFF', + 'HEADER': 'tavg[Avg_Temp]', + 'TYPE': 'TAVG_COEFFICIENT'}, 'TAVG_AVG_TEMPERATURE': {'DESCRIPTION': 'weighted time average value', 'GROUP': 'TAVG_HEAT', 'HEADER': 'tavg[AvgTemp]', @@ -971,8 +1010,7 @@ 'GROUP': 'TAVG_AERO_COEFF', 'HEADER': 'tavg[Buffet]', 'TYPE': 'TAVG_COEFFICIENT'}, - 'TAVG_CIRCUMFERENTIAL_DISTORTION': {'DESCRIPTION': 'weighted time average ' - 'value', + 'TAVG_CIRCUMFERENTIAL_DISTORTION': {'DESCRIPTION': 'weighted time average value', 'GROUP': 'TAVG_ENGINE_OUTPUT', 'HEADER': 'tavg[Circumferential_Distortion]', 'TYPE': 'TAVG_COEFFICIENT'}, @@ -980,6 +1018,10 @@ 'GROUP': 'TAVG_COMBO', 'HEADER': 'tavg[ComboObj]', 'TYPE': 'TAVG_COEFFICIENT'}, + 'TAVG_CUSTOM_OBJFUNC': {'DESCRIPTION': 'weighted time average value', + 'GROUP': 'TAVG_CUSTOM', + 'HEADER': 'tavg[Custom_ObjFunc]', + 'TYPE': 'TAVG_COEFFICIENT'}, 'TAVG_DELTA_CL': {'DESCRIPTION': 'weighted time average value', 'GROUP': 'TAVG_FIXED_CL', 'HEADER': 'tavg[Delta_CL]', @@ -992,22 +1034,31 @@ 'GROUP': 'TAVG_D_ENGINE_OUTPUT', 'HEADER': 'dtavg[AeroCDrag]', 'TYPE': 'TAVG_D_COEFFICIENT'}, + 'TAVG_D_AVG_CO': {'DESCRIPTION': 'weighted time average derivative value', + 'GROUP': 'TAVG_D_SPECIES_COEFF', + 'HEADER': 'dtavg[Avg_CO]', + 'TYPE': 'TAVG_D_COEFFICIENT'}, 'TAVG_D_AVG_DENSITY': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_FLOW_COEFF', 'HEADER': 'dtavg[Avg_Density]', 'TYPE': 'TAVG_D_COEFFICIENT'}, - 'TAVG_D_AVG_ENTHALPY': {'DESCRIPTION': 'weighted time average derivative ' - 'value', + 'TAVG_D_AVG_ENTHALPY': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_FLOW_COEFF', 'HEADER': 'dtavg[Avg_Enthalpy]', 'TYPE': 'TAVG_D_COEFFICIENT'}, - 'TAVG_D_AVG_NORMALVEL': {'DESCRIPTION': 'weighted time average derivative ' - 'value', + 'TAVG_D_AVG_NORMALVEL': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_FLOW_COEFF', 'HEADER': 'dtavg[Avg_NormalVel]', 'TYPE': 'TAVG_D_COEFFICIENT'}, - 'TAVG_D_AVG_TEMPERATURE': {'DESCRIPTION': 'weighted time average derivative ' - 'value', + 'TAVG_D_AVG_NOX': {'DESCRIPTION': 'weighted time average derivative value', + 'GROUP': 'TAVG_D_SPECIES_COEFF', + 'HEADER': 'dtavg[Avg_NOx]', + 'TYPE': 'TAVG_D_COEFFICIENT'}, + 'TAVG_D_AVG_TEMP': {'DESCRIPTION': 'weighted time average derivative value', + 'GROUP': 'TAVG_D_FLOW_COEFF', + 'HEADER': 'dtavg[Avg_Temp]', + 'TYPE': 'TAVG_D_COEFFICIENT'}, + 'TAVG_D_AVG_TEMPERATURE': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_HEAT', 'HEADER': 'dtavg[AvgTemp]', 'TYPE': 'TAVG_D_COEFFICIENT'}, @@ -1015,8 +1066,7 @@ 'GROUP': 'TAVG_D_AERO_COEFF', 'HEADER': 'dtavg[Buffet]', 'TYPE': 'TAVG_D_COEFFICIENT'}, - 'TAVG_D_CIRCUMFERENTIAL_DISTORTION': {'DESCRIPTION': 'weighted time average ' - 'derivative value', + 'TAVG_D_CIRCUMFERENTIAL_DISTORTION': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_ENGINE_OUTPUT', 'HEADER': 'dtavg[Circumferential_Distortion]', 'TYPE': 'TAVG_D_COEFFICIENT'}, @@ -1024,6 +1074,10 @@ 'GROUP': 'TAVG_D_COMBO', 'HEADER': 'dtavg[ComboObj]', 'TYPE': 'TAVG_D_COEFFICIENT'}, + 'TAVG_D_CUSTOM_OBJFUNC': {'DESCRIPTION': 'weighted time average derivative value', + 'GROUP': 'TAVG_D_CUSTOM', + 'HEADER': 'dtavg[Custom_ObjFunc]', + 'TYPE': 'TAVG_D_COEFFICIENT'}, 'TAVG_D_DELTA_CL': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_FIXED_CL', 'HEADER': 'dtavg[Delta_CL]', @@ -1036,13 +1090,11 @@ 'GROUP': 'TAVG_D_AERO_COEFF', 'HEADER': 'dtavg[CEff]', 'TYPE': 'TAVG_D_COEFFICIENT'}, - 'TAVG_D_EQUIVALENT_AREA': {'DESCRIPTION': 'weighted time average derivative ' - 'value', + 'TAVG_D_EQUIVALENT_AREA': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_EQUIVALENT_AREA', 'HEADER': 'dtavg[CEquiv_Area]', 'TYPE': 'TAVG_D_COEFFICIENT'}, - 'TAVG_D_FIGURE_OF_MERIT': {'DESCRIPTION': 'weighted time average derivative ' - 'value', + 'TAVG_D_FIGURE_OF_MERIT': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_ROTATING_FRAME', 'HEADER': 'dtavg[CMerit]', 'TYPE': 'TAVG_D_COEFFICIENT'}, @@ -1062,8 +1114,7 @@ 'GROUP': 'TAVG_D_AERO_COEFF', 'HEADER': 'dtavg[CL]', 'TYPE': 'TAVG_D_COEFFICIENT'}, - 'TAVG_D_MAXIMUM_HEATFLUX': {'DESCRIPTION': 'weighted time average derivative ' - 'value', + 'TAVG_D_MAXIMUM_HEATFLUX': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_HEAT', 'HEADER': 'dtavg[MaxHF]', 'TYPE': 'TAVG_D_COEFFICIENT'}, @@ -1079,23 +1130,19 @@ 'GROUP': 'TAVG_D_AERO_COEFF', 'HEADER': 'dtavg[CMz]', 'TYPE': 'TAVG_D_COEFFICIENT'}, - 'TAVG_D_NEARFIELD_OF': {'DESCRIPTION': 'weighted time average derivative ' - 'value', + 'TAVG_D_NEARFIELD_OF': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_EQUIVALENT_AREA', 'HEADER': 'dtavg[CNearFieldOF]', 'TYPE': 'TAVG_D_COEFFICIENT'}, - 'TAVG_D_RADIAL_DISTORTION': {'DESCRIPTION': 'weighted time average derivative ' - 'value', + 'TAVG_D_RADIAL_DISTORTION': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_ENGINE_OUTPUT', 'HEADER': 'dtavg[Radial_Distortion]', 'TYPE': 'TAVG_D_COEFFICIENT'}, - 'TAVG_D_REFERENCE_GEOMETRY': {'DESCRIPTION': 'weighted time average ' - 'derivative value', + 'TAVG_D_REFERENCE_GEOMETRY': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_STRUCT_COEFF', 'HEADER': 'dtavg[RefGeom]', 'TYPE': 'TAVG_D_COEFFICIENT'}, - 'TAVG_D_REFERENCE_NODE': {'DESCRIPTION': 'weighted time average derivative ' - 'value', + 'TAVG_D_REFERENCE_NODE': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_STRUCT_COEFF', 'HEADER': 'dtavg[RefNode]', 'TYPE': 'TAVG_D_COEFFICIENT'}, @@ -1115,8 +1162,7 @@ 'GROUP': 'TAVG_D_SENSITIVITY', 'HEADER': 'dtavg[Sens_Press]', 'TYPE': 'TAVG_D_COEFFICIENT'}, - 'TAVG_D_SENS_PRESS_OUT': {'DESCRIPTION': 'weighted time average derivative ' - 'value', + 'TAVG_D_SENS_PRESS_OUT': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_SENSITIVITY', 'HEADER': 'dtavg[Sens_Pout]', 'TYPE': 'TAVG_D_COEFFICIENT'}, @@ -1136,63 +1182,51 @@ 'GROUP': 'TAVG_D_ENGINE_OUTPUT', 'HEADER': 'dtavg[SolidCDrag]', 'TYPE': 'TAVG_D_COEFFICIENT'}, - 'TAVG_D_STRESS_PENALTY': {'DESCRIPTION': 'weighted time average derivative ' - 'value', + 'TAVG_D_STRESS_PENALTY': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_STRUCT_COEFF', 'HEADER': 'dtavg[StressPen]', 'TYPE': 'TAVG_D_COEFFICIENT'}, - 'TAVG_D_SURFACE_MACH': {'DESCRIPTION': 'weighted time average derivative ' - 'value', + 'TAVG_D_SURFACE_MACH': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_FLOW_COEFF', 'HEADER': 'dtavg[Avg_Mach]', 'TYPE': 'TAVG_D_COEFFICIENT'}, - 'TAVG_D_SURFACE_MASSFLOW': {'DESCRIPTION': 'weighted time average derivative ' - 'value', + 'TAVG_D_SURFACE_MASSFLOW': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_FLOW_COEFF', 'HEADER': 'dtavg[Avg_Massflow]', 'TYPE': 'TAVG_D_COEFFICIENT'}, - 'TAVG_D_SURFACE_MOM_DISTORTION': {'DESCRIPTION': 'weighted time average ' - 'derivative value', + 'TAVG_D_SURFACE_MOM_DISTORTION': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_FLOW_COEFF', 'HEADER': 'dtavg[Momentum_Distortion]', 'TYPE': 'TAVG_D_COEFFICIENT'}, - 'TAVG_D_SURFACE_PRESSURE_DROP': {'DESCRIPTION': 'weighted time average ' - 'derivative value', + 'TAVG_D_SURFACE_PRESSURE_DROP': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_FLOW_COEFF', 'HEADER': 'dtavg[Pressure_Drop]', 'TYPE': 'TAVG_D_COEFFICIENT'}, - 'TAVG_D_SURFACE_SECONDARY': {'DESCRIPTION': 'weighted time average derivative ' - 'value', + 'TAVG_D_SURFACE_SECONDARY': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_FLOW_COEFF', 'HEADER': 'dtavg[Secondary_Strength]', 'TYPE': 'TAVG_D_COEFFICIENT'}, - 'TAVG_D_SURFACE_SECOND_OVER_UNIFORM': {'DESCRIPTION': 'weighted time average ' - 'derivative value', + 'TAVG_D_SURFACE_SECOND_OVER_UNIFORM': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_FLOW_COEFF', 'HEADER': 'dtavg[Secondary_Over_Uniformity]', 'TYPE': 'TAVG_D_COEFFICIENT'}, - 'TAVG_D_SURFACE_STATIC_PRESSURE': {'DESCRIPTION': 'weighted time average ' - 'derivative value', + 'TAVG_D_SURFACE_STATIC_PRESSURE': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_FLOW_COEFF', 'HEADER': 'dtavg[Avg_Press]', 'TYPE': 'TAVG_D_COEFFICIENT'}, - 'TAVG_D_SURFACE_STATIC_TEMPERATURE': {'DESCRIPTION': 'weighted time average ' - 'derivative value', + 'TAVG_D_SURFACE_STATIC_TEMPERATURE': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_FLOW_COEFF', 'HEADER': 'dtavg[Avg_Temp]', 'TYPE': 'TAVG_D_COEFFICIENT'}, - 'TAVG_D_SURFACE_TOTAL_PRESSURE': {'DESCRIPTION': 'weighted time average ' - 'derivative value', + 'TAVG_D_SURFACE_TOTAL_PRESSURE': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_FLOW_COEFF', 'HEADER': 'dtavg[Avg_TotalPress]', 'TYPE': 'TAVG_D_COEFFICIENT'}, - 'TAVG_D_SURFACE_TOTAL_TEMPERATURE': {'DESCRIPTION': 'weighted time average ' - 'derivative value', + 'TAVG_D_SURFACE_TOTAL_TEMPERATURE': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_FLOW_COEFF', 'HEADER': 'dtavg[Avg_TotalTemp]', 'TYPE': 'TAVG_D_COEFFICIENT'}, - 'TAVG_D_SURFACE_UNIFORMITY': {'DESCRIPTION': 'weighted time average ' - 'derivative value', + 'TAVG_D_SURFACE_UNIFORMITY': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_FLOW_COEFF', 'HEADER': 'dtavg[Uniformity]', 'TYPE': 'TAVG_D_COEFFICIENT'}, @@ -1200,13 +1234,11 @@ 'GROUP': 'TAVG_D_ROTATING_FRAME', 'HEADER': 'dtavg[CT]', 'TYPE': 'TAVG_D_COEFFICIENT'}, - 'TAVG_D_TOPOL_COMPLIANCE': {'DESCRIPTION': 'weighted time average derivative ' - 'value', + 'TAVG_D_TOPOL_COMPLIANCE': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_STRUCT_COEFF', 'HEADER': 'dtavg[TopComp]', 'TYPE': 'TAVG_D_COEFFICIENT'}, - 'TAVG_D_TOPOL_DISCRETENESS': {'DESCRIPTION': 'weighted time average ' - 'derivative value', + 'TAVG_D_TOPOL_DISCRETENESS': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_STRUCT_COEFF', 'HEADER': 'dtavg[TopDisc]', 'TYPE': 'TAVG_D_COEFFICIENT'}, @@ -1214,13 +1246,11 @@ 'GROUP': 'TAVG_D_ROTATING_FRAME', 'HEADER': 'dtavg[CQ]', 'TYPE': 'TAVG_D_COEFFICIENT'}, - 'TAVG_D_TOTAL_HEATFLUX': {'DESCRIPTION': 'weighted time average derivative ' - 'value', + 'TAVG_D_TOTAL_HEATFLUX': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_HEAT', 'HEADER': 'dtavg[HF]', 'TYPE': 'TAVG_D_COEFFICIENT'}, - 'TAVG_D_VOLUME_FRACTION': {'DESCRIPTION': 'weighted time average derivative ' - 'value', + 'TAVG_D_VOLUME_FRACTION': {'DESCRIPTION': 'weighted time average derivative value', 'GROUP': 'TAVG_D_STRUCT_COEFF', 'HEADER': 'dtavg[VolFrac]', 'TYPE': 'TAVG_D_COEFFICIENT'}, @@ -1344,8 +1374,7 @@ 'GROUP': 'TAVG_FLOW_COEFF', 'HEADER': 'tavg[Secondary_Strength]', 'TYPE': 'TAVG_COEFFICIENT'}, - 'TAVG_SURFACE_SECOND_OVER_UNIFORM': {'DESCRIPTION': 'weighted time average ' - 'value', + 'TAVG_SURFACE_SECOND_OVER_UNIFORM': {'DESCRIPTION': 'weighted time average value', 'GROUP': 'TAVG_FLOW_COEFF', 'HEADER': 'tavg[Secondary_Over_Uniformity]', 'TYPE': 'TAVG_COEFFICIENT'}, @@ -1353,8 +1382,7 @@ 'GROUP': 'TAVG_FLOW_COEFF', 'HEADER': 'tavg[Avg_Press]', 'TYPE': 'TAVG_COEFFICIENT'}, - 'TAVG_SURFACE_STATIC_TEMPERATURE': {'DESCRIPTION': 'weighted time average ' - 'value', + 'TAVG_SURFACE_STATIC_TEMPERATURE': {'DESCRIPTION': 'weighted time average value', 'GROUP': 'TAVG_FLOW_COEFF', 'HEADER': 'tavg[Avg_Temp]', 'TYPE': 'TAVG_COEFFICIENT'}, @@ -1362,8 +1390,7 @@ 'GROUP': 'TAVG_FLOW_COEFF', 'HEADER': 'tavg[Avg_TotalPress]', 'TYPE': 'TAVG_COEFFICIENT'}, - 'TAVG_SURFACE_TOTAL_TEMPERATURE': {'DESCRIPTION': 'weighted time average ' - 'value', + 'TAVG_SURFACE_TOTAL_TEMPERATURE': {'DESCRIPTION': 'weighted time average value', 'GROUP': 'TAVG_FLOW_COEFF', 'HEADER': 'tavg[Avg_TotalTemp]', 'TYPE': 'TAVG_COEFFICIENT'}, @@ -1411,8 +1438,7 @@ 'GROUP': 'ROTATING_FRAME', 'HEADER': 'CQ', 'TYPE': 'COEFFICIENT'}, - 'TOTAL_HEATFLUX': {'DESCRIPTION': 'Total heatflux on all surfaces defined in ' - 'MARKER_MONITORING', + 'TOTAL_HEATFLUX': {'DESCRIPTION': 'Total heatflux on all surfaces defined in MARKER_MONITORING', 'GROUP': 'HEAT', 'HEADER': 'HF', 'TYPE': 'COEFFICIENT'}, diff --git a/SU2_PY/SU2/io/state.py b/SU2_PY/SU2/io/state.py index 477f87bd80ec..72282a7daa1e 100644 --- a/SU2_PY/SU2/io/state.py +++ b/SU2_PY/SU2/io/state.py @@ -259,9 +259,12 @@ def find_files(self,config): targetcp_name = 'TargetCp.dat' targetheatflux_name = 'TargetHeatFlux.dat' + special_cases = get_specialCases(config) + if 'FLAMELET_FLUID_MODEL' in special_cases: + lookuptable_name = config.FILENAME_LUT + adj_map = get_adjointSuffix() restart = config.RESTART_SOL == 'YES' - special_cases = get_specialCases(config) if config.get('OPT_OBJECTIVE'): def_objs = config['OPT_OBJECTIVE'] @@ -366,6 +369,10 @@ def register_file(label,filename): if 'INV_DESIGN_HEATFLUX' in special_cases: register_file('TARGET_HEATFLUX',targetheatflux_name) + # look up table + if 'FLAMELET_FLUID_MODEL' in special_cases: + register_file('LOOK_UP_TABLE',lookuptable_name) + return def __setitem__(self,k,v): diff --git a/SU2_PY/SU2/io/tools.py b/SU2_PY/SU2/io/tools.py index 9fbe29cd255d..a8e53290b0f5 100755 --- a/SU2_PY/SU2/io/tools.py +++ b/SU2_PY/SU2/io/tools.py @@ -450,6 +450,9 @@ def get_adjointSuffix(objective_function=None): "SURFACE_MOM_DISTORTION" : "distort" , "SURFACE_SECOND_OVER_UNIFORM" : "sou" , "SURFACE_PRESSURE_DROP" : "dp" , + "AVG_CO" : "yco" , + "AVG_NOX" : "ynox" , + "AVG_TEMP" : "avgtemp" , "CUSTOM_OBJFUNC" : "custom" , "KINETIC_ENERGY_LOSS" : "ke" , "TOTAL_PRESSURE_LOSS" : "pl" , @@ -726,8 +729,8 @@ def get_optFileFormat(plot_format,special_cases=None, nZones = 1): else: raise Exception('output plot format not recognized') # start header - header_list.extend(["Iteration","CL","CD","CSF","CMx","CMy","CMz","CFx","CFy","CFz","CL/CD","Custom_ObjFunc","HeatFlux_Total","HeatFlux_Maximum","Temperature_Total"]) - write_format.append(r'%4d, %.10f, %.10f, %.10f, %.10f, %.10f, %.10f, %.10f, %.10f, %.10f, %.10f, %.10f, %.10f, %.10f, %.10f') + header_list.extend(["Iteration","CL","CD","CSF","CMx","CMy","CMz","CFx","CFy","CFz","CL/CD","Custom_ObjFunc","Surface_CO","Surface_NOx","Surface_Temperature","HeatFlux_Total","HeatFlux_Maximum","Temperature_Total"]) + write_format.append(r'%4d, %.10f, %.10f, %.10f, %.10f, %.10f, %.10f, %.10f, %.10f, %.10f, %.10f, %.10f, %.10f, %.10f, %.10f, %.10f, %.10f, %.10f') # special cases for key in special_cases: @@ -802,6 +805,7 @@ def get_specialCases(config): '1D_OUTPUT' , 'INV_DESIGN_CP' , 'INV_DESIGN_HEATFLUX' ] + special_cases = [] for key in all_special_cases: @@ -825,7 +829,11 @@ def get_specialCases(config): # Special case for rotating frame if 'GRID_MOVEMENT_KIND' in config and config['GRID_MOVEMENT_KIND'] == 'ROTATING_FRAME': special_cases.append('ROTATING_FRAME') - + + # Special case for look up table + if 'FLUID_MODEL' in config and config['FLUID_MODEL'] == 'FLAMELET_FLUID_MODEL': + special_cases.append('FLAMELET_FLUID_MODEL') + return special_cases #: def get_specialCases() diff --git a/SU2_PY/SU2/opt/project.py b/SU2_PY/SU2/opt/project.py index 01964ffb7216..1d0a9d5ba0e3 100644 --- a/SU2_PY/SU2/opt/project.py +++ b/SU2_PY/SU2/opt/project.py @@ -160,10 +160,11 @@ def __init__( self, config, state=None , # look for existing designs folders = glob.glob(self._design_folder) if len(folders)>0: - sys.stdout.write('Removing old designs in 10s.') - sys.stdout.flush() - if warn: time.sleep(10) - sys.stdout.write(' Done!\n\n') + for countdown in range(10, 0, -1): + sys.stdout.write('Removing old designs in %is. \r' % countdown) + sys.stdout.flush() + if warn: time.sleep(1) + sys.stdout.write('\n Done!\n\n') for f in folders: shutil.rmtree(f) #: if existing designs diff --git a/SU2_PY/SU2/run/deform.py b/SU2_PY/SU2/run/deform.py index d8a2704e6438..91e7125aa1f4 100644 --- a/SU2_PY/SU2/run/deform.py +++ b/SU2_PY/SU2/run/deform.py @@ -33,6 +33,7 @@ from .. import io as su2io from .interface import DEF as SU2_DEF +from .interface import REMSH as REMSH # ---------------------------------------------------------------------- @@ -84,13 +85,63 @@ def deform ( config, dv_new=None, dv_old=None ): return info # setup mesh name - suffix = 'deform' + suffix = 'deform' # NOTE TK::was changed to 'deformed' by Daniel mesh_name = konfig['MESH_FILENAME'] - meshname_suffixed = su2io.add_suffix( mesh_name , suffix ) - konfig['MESH_OUT_FILENAME'] = meshname_suffixed + mesh_name_suffixed = su2io.add_suffix( mesh_name , suffix ) + konfig['MESH_OUT_FILENAME'] = mesh_name_suffixed # Run Deformation SU2_DEF(konfig) + + # run re-meshing + # check if re-meshing is enabled in config file + try: + if konfig['ENABLE_REMESHING'] == 'YES': + + # setup mesh name + mesh_name = konfig['MESH_OUT_FILENAME'] + suffix = 'remeshed' + + # FIXME dan: for now, overwrite the deformed mesh in case remeshing is skipped + # and there is no suffixed mesh available + #mesh_name_suffixed = su2io.add_suffix( mesh_name , suffix ) + #konfig['MESH_OUT_FILENAME'] = mesh_name_suffixed + konfig['MESH_OUT_FILENAME'] = mesh_name + + REMSH(konfig) + + # run deformation again to generate deformation boxes (removed during re-meshing step) + mesh_name = konfig['MESH_OUT_FILENAME'] + suffix = 'ffd' + konfig['MESH_FILENAME'] = mesh_name + + # FIXME dan: for now, overwrite the deformed mesh in case remeshing was skipped + # and there is no suffixed mesh available + #mesh_name_suffixed = su2io.add_suffix( mesh_name , suffix ) + #konfig['MESH_OUT_FILENAME'] = mesh_name_suffixed + konfig['MESH_OUT_FILENAME'] = mesh_name + + # setup pseudo DV_* flags for adding deformation boxes to mesh file + dv_kind_before = konfig['DV_KIND'] + dv_param_before = konfig['DV_PARAM'] + dv_value_before = konfig['DV_VALUE'] + dv_value_new_before = konfig['DV_VALUE_NEW'] + + konfig['DV_KIND'] = 'FFD_SETTING' + konfig['DV_PARAM'] = {'FFDTAG': ['1'], 'PARAM': [[0.0, 0.5]], 'SIZE': [1]} + konfig['DV_VALUE'] = '0.0' + konfig['DV_VALUE_NEW'] = '0.0' + + # run pseudo deformation to add deformation boxes to mesh file + SU2_DEF(konfig) + + # set DV_* flags back + konfig['DV_KIND'] = dv_kind_before + konfig['DV_PARAM'] = dv_param_before + konfig['DV_VALUE'] = dv_value_before + konfig['DV_VALUE_NEW'] = dv_value_new_before + except: + pass # update super config config.update({ 'MESH_FILENAME' : konfig['MESH_OUT_FILENAME'] , @@ -103,7 +154,7 @@ def deform ( config, dv_new=None, dv_old=None ): # info out info = su2io.State() - info.FILES.MESH = meshname_suffixed + info.FILES.MESH = mesh_name_suffixed info.VARIABLES.DV_VALUE_NEW = konfig.DV_VALUE_NEW return info diff --git a/SU2_PY/SU2/run/direct.py b/SU2_PY/SU2/run/direct.py index d06297d7a734..ea245146724e 100644 --- a/SU2_PY/SU2/run/direct.py +++ b/SU2_PY/SU2/run/direct.py @@ -123,6 +123,8 @@ def direct ( config ): info.FILES.TARGET_CP = 'TargetCp.dat' if 'INV_DESIGN_HEATFLUX' in special_cases: info.FILES.TARGET_HEATFLUX = 'TargetHeatFlux.dat' + if 'FLAMELET_FLUID_MODEL' in special_cases: + info.FILES.LOOK_UP_TABLE = konfig['FILENAME_LUT'] info.HISTORY.DIRECT = history '''If WINDOW_CAUCHY_CRIT is activated and the time marching converged before the final time has been reached, diff --git a/SU2_PY/SU2/run/interface.py b/SU2_PY/SU2/run/interface.py index 2ce781903a62..e6d2160a158a 100644 --- a/SU2_PY/SU2/run/interface.py +++ b/SU2_PY/SU2/run/interface.py @@ -231,6 +231,26 @@ def SOL_FSI(config): return +def REMSH(config): + """ run re-meshing app (pointwise) + partitions set by config.NUMBER_PART + forced to run in serial, expects merged mesh input + """ + konfig = copy.deepcopy(config) + + tempname = 'config_REMSH.cfg' + konfig.dump(tempname) + + # must run with rank 1 + processes = konfig['NUMBER_PART'] + + # get file name from config + mesh_name = konfig['MESH_OUT_FILENAME'] + + the_Command = 'pointwise -b pointwise_remesh.glf ' + mesh_name + run_command( the_Command ) + + return # ------------------------------------------------------------ # Helper functions diff --git a/TestCases/flamelet/1Folder/README.md b/TestCases/flamelet/1Folder/README.md new file mode 100644 index 000000000000..562392d16fa9 --- /dev/null +++ b/TestCases/flamelet/1Folder/README.md @@ -0,0 +1,6 @@ +# Case Name + +A somewhat detailed explanation of the case and especially what features it is supposed to cover! + +Document expected results or other useful information here + diff --git a/TestCases/flamelet/2Folder/README.md b/TestCases/flamelet/2Folder/README.md new file mode 100644 index 000000000000..562392d16fa9 --- /dev/null +++ b/TestCases/flamelet/2Folder/README.md @@ -0,0 +1,6 @@ +# Case Name + +A somewhat detailed explanation of the case and especially what features it is supposed to cover! + +Document expected results or other useful information here + diff --git a/TestCases/flamelet/README.md b/TestCases/flamelet/README.md new file mode 100644 index 000000000000..7f635c3515c0 --- /dev/null +++ b/TestCases/flamelet/README.md @@ -0,0 +1,16 @@ +# Flamelet regression cases + +## 1Folder + +Just a very! brief explanation + +## 2Folder + +Again + +... + +## laminar_premixed_flame + +A laminar premixed flame stabilized on a isothermal burner with a fixed wall temperature +using a small lookup table for all thermo-chemical quantities diff --git a/TestCases/flamelet_regression.py b/TestCases/flamelet_regression.py new file mode 100644 index 000000000000..168c1e8d4b89 --- /dev/null +++ b/TestCases/flamelet_regression.py @@ -0,0 +1,97 @@ +#!/usr/bin/env python + +## \file parallel_regression.py +# \brief Python script for automated regression testing of SU2 examples +# \author A. Aranake, A. Campos, T. Economon, T. Lukaczyk, S. Padron +# \version 7.1.1 "Blackbird" +# +# SU2 Project Website: https://su2code.github.io +# +# The SU2 Project is maintained by the SU2 Foundation +# (http://su2foundation.org) +# +# Copyright 2012-2021, SU2 Contributors (cf. AUTHORS.md) +# +# SU2 is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# SU2 is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with SU2. If not, see . + +# make print(*args) function available in PY2.6+, does'nt work on PY < 2.6 +from __future__ import print_function + +import sys +from TestCase import TestCase + +def main(): + '''This program runs SU2 and ensures that the output matches specified values. + This will be used to do checks when code is pushed to github + to make sure nothing is broken. ''' + + test_list = [] + + ###################################### + ### FLAMELET BRANCH ### + ###################################### + + # insert tests here + + ###################################### + ### NOT FLAMELET ### + ###################################### + + # 2D laminar premixed flame with FGM table + flamelet_laminar_premixed = TestCase('flamelet_laminar_premixed') + flamelet_laminar_premixed.cfg_dir = "flamelet/laminar_premixed_flame" + flamelet_laminar_premixed.cfg_file = "premixed_burner.cfg" + flamelet_laminar_premixed.test_iter = 10 + flamelet_laminar_premixed.test_vals = [-0.716925, -8.784123, -12.251280, 2317.000000] + flamelet_laminar_premixed.su2_exec = "parallel_computation.py -f" + flamelet_laminar_premixed.timeout = 1600 + flamelet_laminar_premixed.tol = 0.00001 + test_list.append(flamelet_laminar_premixed) + + # 2D CHT case streamwise periodicity + sp_pinArray_cht_2d_dp_hf = TestCase('sp_pinArray_cht_2d_dp_hf') + sp_pinArray_cht_2d_dp_hf.cfg_dir = "incomp_navierstokes/streamwise_periodic/chtPinArray_2d" + sp_pinArray_cht_2d_dp_hf.cfg_file = "configMaster.cfg" + sp_pinArray_cht_2d_dp_hf.test_iter = 100 + sp_pinArray_cht_2d_dp_hf.test_vals = [0.247026, -0.811632, -0.982066, -0.753312, 208.023676, 350.180000] #last 7 lines + sp_pinArray_cht_2d_dp_hf.su2_exec = "mpirun -n 2 SU2_CFD" + sp_pinArray_cht_2d_dp_hf.timeout = 1600 + sp_pinArray_cht_2d_dp_hf.tol = 0.00001 + sp_pinArray_cht_2d_dp_hf.multizone = True + test_list.append(sp_pinArray_cht_2d_dp_hf) + + ###################################### + ### RUN TESTS ### + ###################################### + + pass_list = [ test.run_test() for test in test_list ] + + # Tests summary + print('==================================================================') + print('Summary of the parallel tests') + print('python version:', sys.version) + for i, test in enumerate(test_list): + if (pass_list[i]): + print(' passed - %s'%test.tag) + else: + print('* FAILED - %s'%test.tag) + + if all(pass_list): + sys.exit(0) + else: + sys.exit(1) + # done + +if __name__ == '__main__': + main() diff --git a/config_template.cfg b/config_template.cfg index 48a836851c57..b5de2817185e 100644 --- a/config_template.cfg +++ b/config_template.cfg @@ -1461,7 +1461,7 @@ FFD_DEGREE= (10, 10, 1) FFD_CONTINUITY= 2ND_DERIVATIVE % % Definition of the FFD planes to be frozen in the FFD (x,y,z). -% Value from 0 FFD degree in that direction. Pick a value larger than degree if you don't want to fix any plane. +% Value from 0 FFD degree in that direction. Pick a value larger than degree if you do not want to fix any plane. FFD_FIX_I= (0,2,3) FFD_FIX_J= (0,2,3) FFD_FIX_K= (0,2,3) diff --git a/configure.ac b/configure.ac index 56139d8cef5b..231e7938f40d 100644 --- a/configure.ac +++ b/configure.ac @@ -40,6 +40,7 @@ AC_INIT([SU2], [6.2.0], [su2code-dev@lists.stanford.edu], AC_PREREQ([2.59]) AC_CONFIG_MACRO_DIR([m4]) AC_CANONICAL_TARGET +AC_CANONICAL_HOST AM_INIT_AUTOMAKE([foreign]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES(yes)]) @@ -114,6 +115,9 @@ AC_ARG_ENABLE(GEO, AC_ARG_ENABLE(PY_WRAPPER, AS_HELP_STRING([--enable-PY_WRAPPER], [wrap the SU2 code with Python (default = no)]), [build_PY_WRAPPER="yes"], [build_PY_WRAPPER="no"]) +AC_ARG_ENABLE(MKL, + AS_HELP_STRING([--disable-MKL], [use Intel MKL if available (default = yes)]), + [with_MKL=$enableval], [with_MKL="yes"]) # Check for data types @@ -255,14 +259,25 @@ AC_SUBST([MUTATIONPP_LD]) # Check if MKL is available, enable if 2019.0 or newer. have_MKL="no" + if test "${MKLROOT+set}" = set; then FOUND_MKL_VERSION=$(grep -F "INTEL_MKL_VERSION" ${MKLROOT}/include/mkl_version.h | tr -dc '0-9') REQUIRED_MKL_VERSION=20190000 if [[ "$FOUND_MKL_VERSION" -ge "$REQUIRED_MKL_VERSION" ]]; then - CPPFLAGS="-DHAVE_MKL -DMKL_DIRECT_CALL_SEQ $CPPFLAGS" - CXXFLAGS="-I${MKLROOT}/include $CXXFLAGS" - LIBS="-Wl,--start-group ${MKLROOT}/lib/intel64/libmkl_intel_lp64.a ${MKLROOT}/lib/intel64/libmkl_sequential.a ${MKLROOT}/lib/intel64/libmkl_core.a -Wl,--end-group -lpthread -lm -ldl $LIBS" have_MKL="yes" + if test "$with_MKL" == "yes" + then + CPPFLAGS="-DHAVE_MKL -DMKL_DIRECT_CALL_SEQ $CPPFLAGS" + CXXFLAGS="-I${MKLROOT}/include $CXXFLAGS" + case "${host_os}" in + linux*) + LIBS="-Wl,--start-group ${MKLROOT}/lib/intel64/libmkl_intel_lp64.a ${MKLROOT}/lib/intel64/libmkl_sequential.a ${MKLROOT}/lib/intel64/libmkl_core.a -Wl,--end-group -lpthread -lm -ldl $LIBS" + ;; + darwin*) + LIBS="${MKLROOT}/lib/libmkl_intel_lp64.a ${MKLROOT}/lib/libmkl_sequential.a ${MKLROOT}/lib/libmkl_core.a -lpthread -lm -ldl $LIBS" + ;; + esac + fi fi fi @@ -316,6 +331,7 @@ AM_CONDITIONAL([BUILD_SOL],[test $build_SOL != "no"]) AM_CONDITIONAL([BUILD_GEO],[test $build_GEO != "no"]) AM_CONDITIONAL([BUILD_PY],[test $build_PY != "no"]) AM_CONDITIONAL([BUILD_PY_WRAPPER], [test $build_PY_WRAPPER != "no"]) +AM_CONDITIONAL([with_MKL],[test $with_MKL != "no"]) ########################### @@ -391,14 +407,15 @@ Build Configuration Summary: CGNS support: $enablecgns Mutation++ support: $have_MPP MKL support: $have_MKL + With MKL (if supported): $with_MKL Datatype support: - double $build_NORMAL - codi_reverse $build_CODI_REVERSE - codi_forward $build_CODI_FORWARD + double $build_NORMAL + codi_reverse $build_CODI_REVERSE + codi_forward $build_CODI_FORWARD - External includes: $su2_externals_INCLUDES - External libs: $su2_externals_LIBS - External libpthreads: $su2_externals_LIBPTHREAD + External includes: $su2_externals_INCLUDES + External libs: $su2_externals_LIBS + External libpthreads: $su2_externals_LIBPTHREAD Build SU2_CFD: $build_CFD Build SU2_DOT: $build_DOT diff --git a/preconfigure.py b/preconfigure.py index 26bab4d8ac30..7bd3830b8f4e 100755 --- a/preconfigure.py +++ b/preconfigure.py @@ -276,7 +276,7 @@ def replace_all(text, dic): return text def find_all(text, dic): - for i,j in dic.iteritems(): + for i,j in dic.items(): if not text.find(i) == -1: return True return False