diff --git a/.github/workflows/regression.yml b/.github/workflows/regression.yml index 2502204b64c4..cef9d68216ed 100644 --- a/.github/workflows/regression.yml +++ b/.github/workflows/regression.yml @@ -30,7 +30,7 @@ jobs: - config_set: ReverseMPI flags: '-Denable-autodiff=true -Denable-normal=false -Denable-pywrapper=true -Denable-tests=true --warnlevel=3 --werror' - config_set: ForwardMPI - flags: '-Denable-directdiff=true -Denable-normal=false -Denable-tests=true --warnlevel=3 --werror' + flags: '-Denable-directdiff=true -Denable-normal=false -Denable-tests=true -Denable-mlpcpp=true --warnlevel=3 --werror' - config_set: BaseNoMPI flags: '-Denable-pywrapper=true -Denable-openblas=true -Dwith-mpi=disabled -Denable-mlpcpp=true -Denable-tests=true --warnlevel=3 --werror' - config_set: ReverseNoMPI diff --git a/.gitmodules b/.gitmodules index 2c655cb36da3..4c6d8a819f89 100644 --- a/.gitmodules +++ b/.gitmodules @@ -27,3 +27,6 @@ [submodule "subprojects/MLPCpp"] path = subprojects/MLPCpp url = https://github.com/EvertBunschoten/MLPCpp.git +[submodule "externals/FADO"] + path = externals/FADO + url = https://github.com/pcarruscag/FADO.git diff --git a/AUTHORS.md b/AUTHORS.md index 511ebcf4b332..48b2140480aa 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -136,6 +136,7 @@ Thomas D. Economon Tim Albring TobiKattmann Trent Lukaczyk +Vikram Bharadwaj Vinzenz Götz VivaanKhatri Wally Maier diff --git a/Common/include/CConfig.hpp b/Common/include/CConfig.hpp index b14ffd6f2de1..af7aa99033b5 100644 --- a/Common/include/CConfig.hpp +++ b/Common/include/CConfig.hpp @@ -3,14 +3,14 @@ * \brief All the information about the definition of the physical problem. * The subroutines and functions are in the CConfig.cpp file. * \author F. Palacios, T. Economon, B. Tracey - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -108,7 +108,6 @@ class CConfig { su2double Opt_RelaxFactor; /*!< \brief Scale factor for the line search. */ su2double Opt_LineSearch_Bound; /*!< \brief Bounds for the line search. */ su2double StartTime; - unsigned short SmoothNumGrid; /*!< \brief Smooth the numerical grid. */ bool ContinuousAdjoint, /*!< \brief Flag to know if the code is solving an adjoint problem. */ Viscous, /*!< \brief Flag to know if the code is solving a viscous problem. */ EquivArea, /*!< \brief Flag to know if the code is going to compute and plot the equivalent area. */ @@ -536,9 +535,8 @@ class CConfig { Kind_TimeIntScheme_Heat, /*!< \brief Time integration for the wave equations. */ Kind_TimeStep_Heat, /*!< \brief Time stepping method for the (fvm) heat equation. */ n_Datadriven_files; - ENUM_DATADRIVEN_METHOD Kind_DataDriven_Method; /*!< \brief Method used for datset regression in data-driven fluid models. */ - su2double DataDriven_Relaxation_Factor; /*!< \brief Relaxation factor for Newton solvers in data-driven fluid models. */ + DataDrivenFluid_ParsedOptions datadriven_ParsedOptions; /*!< \brief Options for data-driven fluid analysis. */ 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. */ @@ -700,6 +698,7 @@ class CConfig { unsigned long StartConv_Iter; /*!< \brief Start convergence criteria at iteration. */ su2double Cauchy_Eps; /*!< \brief Epsilon used for the convergence. */ bool Restart, /*!< \brief Restart solution (for direct, adjoint, and linearized problems).*/ + Wrt_Restart_Compact, /*!< \brief Write compact restart files with minimum nr. of variables. */ Read_Binary_Restart, /*!< \brief Read binary SU2 native restart files.*/ Wrt_Restart_Overwrite, /*!< \brief Overwrite restart files or append iteration number.*/ Wrt_Surface_Overwrite, /*!< \brief Overwrite surface output files or append iteration number.*/ @@ -804,6 +803,7 @@ class CConfig { nRefOriginMoment_Z; /*!< \brief Number of Z-coordinate moment computation origins. */ 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. */ + unsigned short Mesh_Box_PSolFEM; /*!< \brief FEM polynomial degree of the solution for the RECTANGLE and BOX grid formats. */ string Mesh_FileName, /*!< \brief Mesh input file. */ Mesh_Out_FileName, /*!< \brief Mesh output file. */ Solution_FileName, /*!< \brief Flow solution input file. */ @@ -820,8 +820,7 @@ class CConfig { SurfAdjCoeff_FileName, /*!< \brief Output file with the adjoint variables on the surface. */ SurfSens_FileName, /*!< \brief Output file for the sensitivity on the surface (discrete adjoint). */ VolSens_FileName, /*!< \brief Output file for the sensitivity in the volume (discrete adjoint). */ - ObjFunc_Hess_FileName, /*!< \brief Hessian approximation obtained by the Sobolev smoothing solver. */ - *DataDriven_Method_FileNames; /*!< \brief Dataset information for data-driven fluid models. */ + ObjFunc_Hess_FileName; /*!< \brief Hessian approximation obtained by the Sobolev smoothing solver. */ bool Wrt_Performance, /*!< \brief Write the performance summary at the end of a calculation. */ @@ -1004,7 +1003,7 @@ class CConfig { bool ExtraOutput; /*!< \brief Check if extra output need. */ bool Wall_Functions; /*!< \brief Use wall functions with the turbulence model */ long ExtraHeatOutputZone; /*!< \brief Heat solver zone with extra screen output */ - bool DeadLoad; /*!< \brief Application of dead loads to the FE analysis */ + bool CentrifugalForce; /*!< \brief Application of centrifugal forces to the FE analysis */ bool PseudoStatic; /*!< \brief Application of dead loads to the FE analysis */ bool SteadyRestart; /*!< \brief Restart from a steady state for FSI problems. */ su2double Newmark_beta, /*!< \brief Parameter alpha for Newmark method. */ @@ -1013,10 +1012,13 @@ class CConfig { su2double *Int_Coeffs; /*!< \brief Time integration coefficients for structural method. */ unsigned short nElasticityMod, /*!< \brief Number of different values for the elasticity modulus. */ nPoissonRatio, /*!< \brief Number of different values for the Poisson ratio modulus. */ - nMaterialDensity; /*!< \brief Number of different values for the Material density. */ + nMaterialDensity, /*!< \brief Number of different values for the Material density. */ + nMaterialThermalExpansion; /*!< \brief Number of different values for thermal expansion coefficient. */ su2double *ElasticityMod, /*!< \brief Value of the elasticity moduli. */ *PoissonRatio, /*!< \brief Value of the Poisson ratios. */ - *MaterialDensity; /*!< \brief Value of the Material densities. */ + *MaterialDensity, /*!< \brief Value of the Material densities. */ + *MaterialThermalExpansion, /*!< \brief Value of the thermal expansion coefficients. */ + MaterialReferenceTemperature; /*!< \brief Value of the reference temperature for thermal expansion. */ unsigned short nElectric_Field, /*!< \brief Number of different values for the electric field in the membrane. */ nDim_Electric_Field; /*!< \brief Dimensionality of the problem. */ unsigned short nDim_RefNode; /*!< \brief Dimensionality of the vector . */ @@ -1109,7 +1111,7 @@ class CConfig { bool Radiation; /*!< \brief Determines if a radiation model is incorporated. */ su2double CFL_Rad; /*!< \brief CFL Number for the radiation solver. */ - array default_cfl_adapt; /*!< \brief Default CFL adapt param array for the COption class. */ + 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. */ vel_inf[3], /*!< \brief freestream velocity array for the COption class. */ eng_cyl[7], /*!< \brief engine box array for the COption class. */ @@ -1235,28 +1237,7 @@ class CConfig { unsigned short nSpecies_Init; /*!< \brief Number of entries of SPECIES_INIT */ /*--- Additional flamelet solver options ---*/ - ///TODO: Add python wrapper initialization option - FLAMELET_INIT_TYPE flame_init_type = FLAMELET_INIT_TYPE::NONE; /*!< \brief Method for solution ignition for flamelet problems. */ - std::array flame_init; /*!< \brief Flame front initialization parameters. */ - std::array spark_init; /*!< \brief Spark ignition initialization parameters. */ - su2double* spark_reaction_rates; /*!< \brief Source terms for flamelet spark ignition option. */ - unsigned short nspark; /*!< \brief Number of source terms for spark initialization. */ - bool preferential_diffusion = false; /*!< \brief Preferential diffusion physics for flamelet solver.*/ - - /*--- lookup table ---*/ - unsigned short n_scalars = 0; /*!< \brief Number of transported scalars for flamelet LUT approach. */ - unsigned short n_lookups = 0; /*!< \brief Number of lookup variables, for visualization only. */ - unsigned short n_table_sources = 0; /*!< \brief Number of transported scalar source terms for LUT. */ - unsigned short n_user_scalars = 0; /*!< \brief Number of user defined (auxiliary) scalar transport equations. */ - unsigned short n_user_sources = 0; /*!< \brief Number of source terms for user defined (auxiliary) scalar transport equations. */ - unsigned short n_control_vars = 0; /*!< \brief Number of controlling variables (independent variables) for the LUT. */ - - string* controlling_variable_names; - string* cv_source_names; - vector table_scalar_names; /*!< \brief Names of transported scalar variables. */ - string* lookup_names; /*!< \brief Names of passive look-up variables. */ - string* user_scalar_names; /*!< \brief Names of the user defined (auxiliary) transported scalars .*/ - string* user_source_names; /*!< \brief Names of the source terms for the user defined transported scalars. */ + FluidFlamelet_ParsedOptions flamelet_ParsedOptions; /*!< \brief Additional flamelet solver options */ /*! * \brief Set the default values of config options not set in the config file using another config object. @@ -2165,106 +2146,6 @@ class CConfig { */ bool GetSpecies_StrongBC() const { return Species_StrongBC; } - /*! - * \brief Get the flame initialization. - * (x1,x2,x3) = flame offset/spark center location. - * (x4,x5,x6) = flame normal, separating unburnt from burnt or - * spark radius, spark start iteration, spark duration. - * (x7) = flame thickness, the length from unburnt to burnt conditions. - * (x8) = flame burnt thickness, the length to stay at burnt conditions. - * \return Ignition initialization parameters for the flamelet model. - */ - const su2double* GetFlameInit() const { - switch (flame_init_type) - { - case FLAMELET_INIT_TYPE::FLAME_FRONT: - return flame_init.data(); - break; - case FLAMELET_INIT_TYPE::SPARK: - return spark_init.data(); - break; - default: - return nullptr; - break; - } - } - - /*! - * \brief Get species net reaction rates applied during spark ignition. - */ - const su2double* GetSpark() const { - return spark_reaction_rates; - } - - /*! - * \brief Preferential diffusion combustion problem. - */ - bool GetPreferentialDiffusion() const { return preferential_diffusion; } - - /*! - * \brief Define preferential diffusion combustion problem. - */ - inline void SetPreferentialDiffusion(bool input) { preferential_diffusion = input; } - - /*! - * \brief Get the number of control variables for flamelet model. - */ - unsigned short GetNControlVars() const { return n_control_vars; } - - /*! - * \brief Get the number of total transported scalars for flamelet model. - */ - unsigned short GetNScalars() const { return n_scalars; } - - /*! - * \brief Get the number of user scalars for flamelet model. - */ - unsigned short GetNUserScalars() const { return n_user_scalars; } - - /*! - * \brief Get the name of a specific controlling variable. - */ - const string& GetControllingVariableName(unsigned short i_cv) const { - return controlling_variable_names[i_cv]; - } - - /*! - * \brief Get the name of the source term variable for a specific controlling variable. - */ - const string& GetControllingVariableSourceName(unsigned short i_cv) const { - return cv_source_names[i_cv]; - } - /*! - * \brief Get the name of the user scalar. - */ - const string& GetUserScalarName(unsigned short i_user_scalar) const { - static const std::string none = "NONE"; - if (n_user_scalars > 0) return user_scalar_names[i_user_scalar]; else return none; - } - - /*! - * \brief Get the name of the user scalar source term. - */ - const string& GetUserSourceName(unsigned short i_user_source) const { - static const std::string none = "NONE"; - if (n_user_sources > 0) return user_source_names[i_user_source]; else return none; - } - - /*! - * \brief Get the ignition method used for combustion problems. - */ - FLAMELET_INIT_TYPE GetFlameletInitType() const { return flame_init_type; } - - /*! - * \brief Get the number of transported scalars for combustion. - */ - unsigned short GetNLookups() const { return n_lookups; } - - /*! - * \brief Get the name of the variable that we want to retrieve from the lookup table. - */ - const string& GetLookupName(unsigned short i_lookup) const { return lookup_names[i_lookup]; } - /*! * \brief Get the Young's modulus of elasticity. * \return Value of the Young's modulus of elasticity. @@ -2389,6 +2270,16 @@ class CConfig { */ su2double GetMaterialDensity(unsigned short id_val) const { return MaterialDensity[id_val]; } + /*! + * \brief Get the thermal expansion coefficient. + */ + su2double GetMaterialThermalExpansion(unsigned short id_val) const { return MaterialThermalExpansion[id_val]; } + + /*! + * \brief Temperature at which there is no stress from thermal expansion. + */ + su2double GetMaterialReferenceTemperature() const { return MaterialReferenceTemperature; } + /*! * \brief Compressibility/incompressibility of the solids analysed using the structural solver. * \return Compressible or incompressible. @@ -3956,29 +3847,6 @@ class CConfig { */ unsigned short GetKind_FluidModel(void) const { return Kind_FluidModel; } - /*! - * \brief Datadriven method for EoS evaluation. - */ - ENUM_DATADRIVEN_METHOD GetKind_DataDriven_Method(void) const { return Kind_DataDriven_Method; } - - /*! - * \brief Get name of the input file for the data-driven fluid model interpolation method. - * \return Name of the input file for the interpolation method. - */ - const string* GetDataDriven_FileNames(void) const { return DataDriven_Method_FileNames; } - - /*! - * \brief Get number of listed look-up table or multi-layer perceptron input files. - * \return Number of listed data-driven method input files. - */ - unsigned short GetNDataDriven_Files(void) const { return n_Datadriven_files; } - - /*! - * \brief Get Newton solver relaxation factor for data-driven fluid models. - * \return Newton solver relaxation factor. - */ - su2double GetRelaxation_DataDriven(void) const { return DataDriven_Relaxation_Factor; } - /*! * \brief Returns the name of the fluid we are using in CoolProp. */ @@ -5490,6 +5358,12 @@ class CConfig { */ bool GetRead_Binary_Restart(void) const { return Read_Binary_Restart; } + /*! + * \brief Flag for whether restart files contain only necessary variables. + * \return Flag TRUE then the code will write compact restart files. + */ + bool GetWrt_Restart_Compact(void) const { return Wrt_Restart_Compact; } + /*! * \brief Flag for whether restart solution files are overwritten. * \return Flag for overwriting. If Flag=false, iteration nr is appended to filename @@ -6318,12 +6192,6 @@ class CConfig { */ bool GetAxisymmetric(void) const { return Axisymmetric; } - /*! - * \brief Get information about there is a smoothing of the grid coordinates. - * \return TRUE if there is smoothing of the grid coordinates; otherwise FALSE. - */ - unsigned short GetSmoothNumGrid(void) const { return SmoothNumGrid; } - /*! * \brief Subtract one to the index of the finest grid (full multigrid strategy). * \return Change the index of the finest grid. @@ -8929,10 +8797,9 @@ class CConfig { su2double GetAitkenDynMinInit(void) const { return AitkenDynMinInit; } /*! - * \brief Decide whether to apply dead loads to the model. - * \return TRUE if the dead loads are to be applied, FALSE otherwise. + * \brief Decide whether to apply centrifugal forces to the model. */ - bool GetDeadLoad(void) const { return DeadLoad; } + bool GetCentrifugalForce(void) const { return CentrifugalForce; } /*! * \brief Identifies if the mesh is matching or not (temporary, while implementing interpolation procedures). @@ -9594,6 +9461,12 @@ class CConfig { */ su2double GetMeshBoxOffset(unsigned short val_iDim) const { return mesh_box_offset[val_iDim]; } + /*! + * \brief Get the polynomial degree of the FEM solution for the analytic RECTANGLE or BOX. + * \return The polynomial degree of the FEM solution. + */ + unsigned short GetMeshBoxPSolFEM(void) const { return Mesh_Box_PSolFEM; } + /*! * \brief Get the number of screen output variables requested (maximum 6) */ @@ -9920,4 +9793,17 @@ class CConfig { */ LM_ParsedOptions GetLMParsedOptions() const { return lmParsedOptions; } + + /*! + * \brief Get parsed option data structure for data-driven fluid model. + * \return option data structure for data-driven fluid model. + */ + const DataDrivenFluid_ParsedOptions& GetDataDrivenParsedOptions() const { return datadriven_ParsedOptions; } + + /*! + * \brief Get parsed option data structure for the flamelet fluid model. + * \return option data structure for the flamelet fluid model. + */ + const FluidFlamelet_ParsedOptions& GetFlameletParsedOptions() const { return flamelet_ParsedOptions; } + }; diff --git a/Common/include/adt/CADTBaseClass.hpp b/Common/include/adt/CADTBaseClass.hpp index bed3b53cc1c2..4e38a5daa890 100644 --- a/Common/include/adt/CADTBaseClass.hpp +++ b/Common/include/adt/CADTBaseClass.hpp @@ -2,14 +2,14 @@ * \file CADTBaseClass.hpp * \brief Base class for storing an ADT in an arbitrary number of dimensions. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/adt/CADTComparePointClass.hpp b/Common/include/adt/CADTComparePointClass.hpp index 6e3e06878f6f..21d139341a97 100644 --- a/Common/include/adt/CADTComparePointClass.hpp +++ b/Common/include/adt/CADTComparePointClass.hpp @@ -2,14 +2,14 @@ * \file CADTComparePointClass.hpp * \brief subroutines for comparing two points in an alternating digital tree (ADT). * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/adt/CADTElemClass.hpp b/Common/include/adt/CADTElemClass.hpp index a85744c7fa7e..05295c30fbcc 100644 --- a/Common/include/adt/CADTElemClass.hpp +++ b/Common/include/adt/CADTElemClass.hpp @@ -2,14 +2,14 @@ * \file CADTElemClass.hpp * \brief Class for storing an ADT of (linear) elements in an arbitrary number of dimensions. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -36,7 +36,7 @@ * \ingroup ADT * \brief Class for storing an ADT of (linear) elements in an arbitrary number of dimensions. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CADTElemClass : public CADTBaseClass { private: diff --git a/Common/include/adt/CADTNodeClass.hpp b/Common/include/adt/CADTNodeClass.hpp index 9e8a252d2b28..e82c180ce759 100644 --- a/Common/include/adt/CADTNodeClass.hpp +++ b/Common/include/adt/CADTNodeClass.hpp @@ -2,14 +2,14 @@ * \file CADTNodeClass.hpp * \brief Class for storing the information needed in a node of an ADT. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/adt/CADTPointsOnlyClass.hpp b/Common/include/adt/CADTPointsOnlyClass.hpp index fabec0d4b8cc..e3da91d448e0 100644 --- a/Common/include/adt/CADTPointsOnlyClass.hpp +++ b/Common/include/adt/CADTPointsOnlyClass.hpp @@ -2,14 +2,14 @@ * \file CADTPointsOnlyClass.hpp * \brief Class for storing an ADT of only points in an arbitrary number of dimensions. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/adt/CBBoxTargetClass.hpp b/Common/include/adt/CBBoxTargetClass.hpp index 9f78a2529b56..8dc5d5980aa3 100644 --- a/Common/include/adt/CBBoxTargetClass.hpp +++ b/Common/include/adt/CBBoxTargetClass.hpp @@ -3,14 +3,14 @@ * \brief Class for storing the information of a possible bounding box candidate during a minimum distance search. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -35,7 +35,7 @@ * \brief Class for storing the information of a possible bounding box candidate during a minimum distance search. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ struct CBBoxTargetClass { unsigned long boundingBoxID; /*!< \brief Corresponding bounding box ID. */ diff --git a/Common/include/basic_types/ad_structure.hpp b/Common/include/basic_types/ad_structure.hpp index de902141e89a..0bd979b9663a 100644 --- a/Common/include/basic_types/ad_structure.hpp +++ b/Common/include/basic_types/ad_structure.hpp @@ -2,14 +2,14 @@ * \file ad_structure.hpp * \brief Main routines for the algorithmic differentiation (AD) structure. * \author T. Albring, J. Blühdorn - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/basic_types/datatype_structure.hpp b/Common/include/basic_types/datatype_structure.hpp index 1698cea3f43e..e16c223e8a69 100644 --- a/Common/include/basic_types/datatype_structure.hpp +++ b/Common/include/basic_types/datatype_structure.hpp @@ -2,14 +2,14 @@ * \file datatype_structure.hpp * \brief Headers for generalized datatypes, defines an interface for AD types. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/code_config.hpp b/Common/include/code_config.hpp index cbbf2c531535..48625f20bf44 100644 --- a/Common/include/code_config.hpp +++ b/Common/include/code_config.hpp @@ -2,14 +2,14 @@ * \file code_config.hpp * \brief Header file for collecting common macros, definitions and type configurations. * \author T. Albring, P. Gomes, J. Blühdorn - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/containers/C2DContainer.hpp b/Common/include/containers/C2DContainer.hpp index 8eb62eb01e12..ced9af94d940 100644 --- a/Common/include/containers/C2DContainer.hpp +++ b/Common/include/containers/C2DContainer.hpp @@ -2,14 +2,14 @@ * \file C2DContainer.hpp * \brief A templated vector/matrix object. * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/containers/CFastFindAndEraseQueue.hpp b/Common/include/containers/CFastFindAndEraseQueue.hpp index d41713ca0d7b..69daaa0090df 100644 --- a/Common/include/containers/CFastFindAndEraseQueue.hpp +++ b/Common/include/containers/CFastFindAndEraseQueue.hpp @@ -3,14 +3,14 @@ * \brief A queue-type container (push back, pop front), but with * fast deletion of arbitrary items (possibly in the middle). * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/containers/CFileReaderLUT.hpp b/Common/include/containers/CFileReaderLUT.hpp index 3a92543318d6..edbf38941f9a 100644 --- a/Common/include/containers/CFileReaderLUT.hpp +++ b/Common/include/containers/CFileReaderLUT.hpp @@ -2,14 +2,14 @@ * \file CFileReaderLUT.hpp * \brief reading lookup table for tabulated fluid properties * \author D. Mayer, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/containers/CLookUpTable.hpp b/Common/include/containers/CLookUpTable.hpp index 37052044530c..a66236bb42f8 100644 --- a/Common/include/containers/CLookUpTable.hpp +++ b/Common/include/containers/CLookUpTable.hpp @@ -2,14 +2,14 @@ * \file CLookupTable.hpp * \brief tabulation of fluid properties * \author D. Mayer, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/containers/CPyWrapperMatrixView.hpp b/Common/include/containers/CPyWrapperMatrixView.hpp index bd02adaf747e..9a39ef3badf9 100644 --- a/Common/include/containers/CPyWrapperMatrixView.hpp +++ b/Common/include/containers/CPyWrapperMatrixView.hpp @@ -2,14 +2,14 @@ * \file CPyWrapperMatrixView.hpp * \brief Simple matrix views to use with the python wrapper. * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/containers/CTrapezoidalMap.hpp b/Common/include/containers/CTrapezoidalMap.hpp index 98bc41b0caad..5a00ec29b720 100644 --- a/Common/include/containers/CTrapezoidalMap.hpp +++ b/Common/include/containers/CTrapezoidalMap.hpp @@ -2,14 +2,14 @@ * \file CTrapezoidalMap.hpp * \brief Implementation of the trapezoidal map for tabulation and lookup of fluid properties * \author D. Mayer, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -38,7 +38,7 @@ * \ingroup LookUpInterp * \brief Construction of trapezoidal map for tabulated lookup * \author: D. Mayer, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CTrapezoidalMap { protected: diff --git a/Common/include/containers/CVertexMap.hpp b/Common/include/containers/CVertexMap.hpp index fd25c090f309..1e2e66d57e85 100644 --- a/Common/include/containers/CVertexMap.hpp +++ b/Common/include/containers/CVertexMap.hpp @@ -2,14 +2,14 @@ * \file CVertexMap.hpp * \brief An index to index lookup vector. * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/containers/container_decorators.hpp b/Common/include/containers/container_decorators.hpp index 593a18cd2c39..0c2eae1c296d 100644 --- a/Common/include/containers/container_decorators.hpp +++ b/Common/include/containers/container_decorators.hpp @@ -3,14 +3,14 @@ * \brief Collection of small classes that decorate C2DContainer to * augment its functionality, e.g. give it extra dimensions. * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/fem/fem_cgns_elements.hpp b/Common/include/fem/fem_cgns_elements.hpp deleted file mode 100644 index f3debaeb0ea3..000000000000 --- a/Common/include/fem/fem_cgns_elements.hpp +++ /dev/null @@ -1,198 +0,0 @@ -/*! - * \file fem_cgns_elements.hpp - * \brief Headers of the classes and functions for reading CGNS files - * with high order elements. - * The functions are in the cgns_elements.cpp file. - * \author E. van der Weide - * \version 8.1.0 "Harrier" - * - * SU2 Project Website: https://su2code.github.io - * - * The SU2 Project is maintained by the SU2 Foundation - * (http://su2foundation.org) - * - * Copyright 2012-2024, 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 "../parallelization/mpi_structure.hpp" - -#ifdef HAVE_CGNS -#include "cgnslib.h" -#endif - -#include "../geometry/primal_grid/CPrimalGridFEM.hpp" - -/* Forward declaration of CBoundaryFace to avoid problems. */ -class CBoundaryFace; - -#ifdef HAVE_CGNS -#if CGNS_VERSION >= 3300 - -/*! - * \class CCGNSElementType - * \brief Class which stores the CGNS element type info for a connectivity section. - */ - -class CCGNSElementType { - public: - int connID; /*!< \brief CGNS connectivity ID of this connectivity. */ - ElementType_t elemType; /*!< \brief Element type according to the CGNS convention, - possibly MIXED. */ - cgsize_t indBeg; /*!< \brief Index of the first element in the CGNS connectivity. */ - cgsize_t indEnd; /*!< \brief Index of the last element in the CGNS connectivity. */ - cgsize_t nElem; /*!< \brief Number of elements present for this element type. */ - - std::string connName; /*!< \brief Name of this connectivity. */ - - bool volumeConn; /*!< \brief Whether or not this is a volume connectivity. */ - bool surfaceConn; /*!< \brief Whether or not this is a surface connectivity. */ - - /* Standard constructor, nothing to be done. */ - CCGNSElementType() {} - - /* Destructor, nothing to be done. */ - ~CCGNSElementType() {} - - /*--- Member function, which determines the meta data for this element type. ---*/ - void DetermineMetaData(const unsigned short nDim, const int fn, const int iBase, const int iZone, const int iConn); - - /*--- Member function, which reads the required boundary connectivity range. ---*/ - void ReadBoundaryConnectivityRange(const int fn, const int iBase, const int iZone, const unsigned long offsetRank, - const unsigned long nBoundElemRank, const unsigned long startingBoundElemIDRank, - unsigned long& locBoundElemCount, std::vector& boundElems); - - /*--- Member function, which reads the required connectivity range. ---*/ - void ReadConnectivityRange(const int fn, const int iBase, const int iZone, const unsigned long offsetRank, - const unsigned long nElemRank, const unsigned long startingElemIDRank, CPrimalGrid**& elem, - unsigned long& locElemCount, unsigned long& nDOFsLoc); - - private: - /*--- Member function, which creates the required data for the given - element type. ---*/ - void CreateDataElementType(const ElementType_t typeElem, unsigned short& VTK_Type, unsigned short& nPoly, - unsigned short& nDOFs, std::vector& SU2ToCGNS); - - /*--- Member function, which determines the element dimension, i.e. the - number of parametric coordinates. ---*/ - unsigned short DetermineElementDimension(const int fn, const int iBase, const int iZone); - - /*--- Member function, which determines the element dimension when the - connectivity is mixed. ---*/ - unsigned short DetermineElementDimensionMixed(const int fn, const int iBase, const int iZone); - - /*--- Member function, which determines the corresponding index of the - given element in the stored types. If not present, a new index - is created. ---*/ - unsigned short IndexInStoredTypes(const ElementType_t typeElem, std::vector& CGNS_Type, - std::vector& VTK_Type, std::vector& nPoly, - std::vector& nDOFs, - std::vector >& SU2ToCGNS); - - /*--- Functions to create the conversion data from CGNS format to SU2 format - for all the supported CGNS elements. ---*/ - void CreateDataNODE(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); - - void CreateDataBAR_2(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); - - void CreateDataBAR_3(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); - - void CreateDataBAR_4(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); - - void CreateDataBAR_5(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); - - void CreateDataTRI_3(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); - - void CreateDataTRI_6(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); - - void CreateDataTRI_10(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); - - void CreateDataTRI_15(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); - - void CreateDataQUAD_4(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); - - void CreateDataQUAD_9(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); - - void CreateDataQUAD_16(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); - - void CreateDataQUAD_25(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); - - void CreateDataTETRA_4(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); - - void CreateDataTETRA_10(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); - - void CreateDataTETRA_20(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); - - void CreateDataTETRA_35(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); - - void CreateDataPYRA_5(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); - - void CreateDataPYRA_14(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); - - void CreateDataPYRA_30(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); - - void CreateDataPYRA_55(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); - - void CreateDataPENTA_6(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); - - void CreateDataPENTA_18(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); - - void CreateDataPENTA_40(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); - - void CreateDataPENTA_75(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); - - void CreateDataHEXA_8(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); - - void CreateDataHEXA_27(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); - - void CreateDataHEXA_64(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); - - void CreateDataHEXA_125(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, - std::vector& SU2ToCGNS); -}; -#endif -#endif - -using namespace std; diff --git a/Common/include/fem/fem_gauss_jacobi_quadrature.hpp b/Common/include/fem/fem_gauss_jacobi_quadrature.hpp index 2b20d9ed8609..927ed016f311 100644 --- a/Common/include/fem/fem_gauss_jacobi_quadrature.hpp +++ b/Common/include/fem/fem_gauss_jacobi_quadrature.hpp @@ -6,14 +6,14 @@ All the functions in this class are based on the program JACOBI_RULE of John Burkardt. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -95,7 +95,7 @@ using namespace std; * \brief Class used to determine the quadrature points of the Gauss Jacobi integration rules. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CGaussJacobiQuadrature { public: diff --git a/Common/include/fem/fem_geometry_structure.hpp b/Common/include/fem/fem_geometry_structure.hpp index 4d3e9cc367d0..71813f96a5bc 100644 --- a/Common/include/fem/fem_geometry_structure.hpp +++ b/Common/include/fem/fem_geometry_structure.hpp @@ -3,14 +3,14 @@ * \brief Headers of the main subroutines for creating the geometrical structure for the FEM solver. * The subroutines and functions are in the fem_geometry_structure.cpp file. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -30,162 +30,17 @@ #include "../geometry/CGeometry.hpp" #include "fem_standard_element.hpp" -#ifdef HAVE_CGNS -#include "fem_cgns_elements.hpp" -#endif #include "../wall_model.hpp" #include "../linear_algebra/blas_structure.hpp" +#include "../toolboxes/fem/CFaceOfElement.hpp" using namespace std; -/*! - * \class CLong3T - * \brief Help class used to store three longs as one entity. - * \version 8.1.0 "Harrier" - */ -struct CLong3T { - long long0 = 0; /*!< \brief First long to store in this class. */ - long long1 = 0; /*!< \brief Second long to store in this class. */ - long long2 = 0; /*!< \brief Third long to store in this class. */ - - CLong3T() = default; - - CLong3T(const long a, const long b, const long c) { - long0 = a; - long1 = b; - long2 = c; - } - - bool operator<(const CLong3T& other) const; -}; - -/*! - * \class CReorderElements - * \brief Class, used to reorder the owned elements after the partitioning. - * \author E. van der Weide - * \version 8.1.0 "Harrier" - */ -class CReorderElements { - private: - unsigned long globalElemID; /*!< \brief Global element ID of the element. */ - unsigned short timeLevel; /*!< \brief Time level of the element. Only relevant - for time accurate local time stepping. */ - bool commSolution; /*!< \brief Whether or not the solution must be - communicated to other ranks. */ - unsigned short elemType; /*!< \brief Short hand for the element type, Which - stored info of the VTK_Type, polynomial - degree of the solution and whether or - not the Jacobian is constant. */ - public: - /*! - * \brief Constructor of the class, set the member variables to the arguments. - */ - CReorderElements(const unsigned long val_GlobalElemID, const unsigned short val_TimeLevel, - const bool val_CommSolution, const unsigned short val_VTK_Type, const unsigned short val_nPolySol, - const bool val_JacConstant); - - /*! - * \brief Default constructor of the class. Disabled. - */ - CReorderElements(void) = delete; - - /*! - * \brief Less than operator of the class. Needed for the sorting. - */ - bool operator<(const CReorderElements& other) const; - - /*! - * \brief Function to make available the variable commSolution. - * \return Whether or not the solution of the element must be communicated. - */ - inline bool GetCommSolution(void) const { return commSolution; } - - /*! - * \brief Function to make available the element type of the element. - * \return The value of elemType, which stores the VTK type, polynomial degree - and whether or not the Jacobian is constant. - */ - inline unsigned short GetElemType(void) const { return elemType; } - - /*! - * \brief Function to make available the global element ID. - * \return The global element ID of the element. - */ - inline unsigned long GetGlobalElemID(void) const { return globalElemID; } - - /*! - * \brief Function to make available the time level. - * \return The time level of the element. - */ - inline unsigned short GetTimeLevel(void) const { return timeLevel; } - - /*! - * \brief Function, which sets the value of commSolution. - * \param[in] val_CommSolution - value to which commSolution must be set. - */ - inline void SetCommSolution(const bool val_CommSolution) { commSolution = val_CommSolution; } -}; - -/*! - * \class CSortFaces - * \brief Functor, used for a different sorting of the faces than the < operator - * of CFaceOfElement. - * \author E. van der Weide - * \version 8.1.0 "Harrier" - */ -class CVolumeElementFEM; // Forward declaration to avoid problems. -class CSortFaces { - private: - unsigned long nVolElemOwned; /*!< \brief Number of locally owned volume elements. */ - unsigned long nVolElemTot; /*!< \brief Total number of local volume elements . */ - - const CVolumeElementFEM* volElem; /*!< \brief The locally stored volume elements. */ - - public: - /*! - * \brief Constructor of the class. Set the values of the member variables. - */ - CSortFaces(unsigned long val_nVolElemOwned, unsigned long val_nVolElemTot, const CVolumeElementFEM* val_volElem) { - nVolElemOwned = val_nVolElemOwned; - nVolElemTot = val_nVolElemTot; - volElem = val_volElem; - } - - /*! - * \brief Default constructor of the class. Disabled. - */ - CSortFaces(void) = delete; - - /*! - * \brief Operator used for the comparison. - * \param[in] f0 - First face in the comparison. - * \param[in] f1 - Second face in the comparison. - */ - bool operator()(const CFaceOfElement& f0, const CFaceOfElement& f1); -}; - -/*! - * \class CSortBoundaryFaces - * \brief Functor, used for a different sorting of the faces than the < operator - * of CSurfaceElementFEM. - * \author E. van der Weide - * \version 8.1.0 "Harrier" - */ -struct CSurfaceElementFEM; // Forward declaration to avoid problems. -struct CSortBoundaryFaces { - /*! - * \brief Operator used for the comparison. - * \param[in] f0 - First boundary face in the comparison. - * \param[in] f1 - Second boundary face in the comparison. - */ - bool operator()(const CSurfaceElementFEM& f0, const CSurfaceElementFEM& f1); -}; - /*! * \class CVolumeElementFEM * \brief Class to store a volume element for the FEM solver. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CVolumeElementFEM { public: @@ -274,9 +129,9 @@ class CVolumeElementFEM { /*! * \class CPointFEM - * \brief Class to a point for the FEM solver. + * \brief Class to store a point for the FEM solver. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ struct CPointFEM { unsigned long globalID; /*!< \brief The global ID of this point in the grid. */ @@ -300,7 +155,7 @@ struct CPointFEM { * \class CInternalFaceElementFEM * \brief Class to store an internal face for the FEM solver. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ struct CInternalFaceElementFEM { unsigned short VTK_Type; /*!< \brief Element type using the VTK convention. */ @@ -344,7 +199,7 @@ struct CInternalFaceElementFEM { * \class CSurfaceElementFEM * \brief Class to store a surface element for the FEM solver. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ struct CSurfaceElementFEM { unsigned short VTK_Type; /*!< \brief Element type using the VTK convention. */ @@ -405,7 +260,7 @@ struct CSurfaceElementFEM { * \class CBoundaryFEM * \brief Class to store a boundary for the FEM solver. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ struct CBoundaryFEM { string markerTag; /*!< \brief Marker tag of this boundary. */ @@ -428,7 +283,7 @@ struct CBoundaryFEM { * \class CMeshFEM * \brief Base class for the FEM solver. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CMeshFEM : public CGeometry { protected: @@ -693,7 +548,7 @@ class CMeshFEM : public CGeometry { * \class CMeshFEM_DG * \brief Class which contains all the variables for the DG FEM solver. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CMeshFEM_DG : public CMeshFEM { protected: diff --git a/Common/include/fem/fem_standard_element.hpp b/Common/include/fem/fem_standard_element.hpp index b074dac7d0b0..5e0d5075394d 100644 --- a/Common/include/fem/fem_standard_element.hpp +++ b/Common/include/fem/fem_standard_element.hpp @@ -3,14 +3,14 @@ * \brief Headers of the main functions for the FEM standard elements. * The functions are in the fem_standard_element.cpp file. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -40,7 +40,7 @@ using namespace std; * \class CFEMStandardElementBase * \brief Base class for a FEM standard element. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CFEMStandardElementBase { protected: @@ -668,7 +668,7 @@ class CFEMStandardElementBase { * \class CFEMStandardElement * \brief Class to define a FEM standard element. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CFEMStandardElement : public CFEMStandardElementBase { private: @@ -990,7 +990,7 @@ class CFEMStandardElement : public CFEMStandardElementBase { type. This information is used to determine a well balanced partition. * \param[in] config - Object, which contains the input parameters. */ - su2double WorkEstimateMetis(CConfig* config); + passivedouble WorkEstimateMetis(CConfig* config); private: /*! @@ -1101,7 +1101,7 @@ class CFEMStandardElement : public CFEMStandardElementBase { * \class CFEMStandardInternalFace * \brief Class to define a FEM standard internal face. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CFEMStandardInternalFace : public CFEMStandardElementBase { private: @@ -1420,7 +1420,7 @@ class CFEMStandardInternalFace : public CFEMStandardElementBase { type. This information is used to determine a well balanced partition. * \param[in] config - Object, which contains the input parameters. */ - su2double WorkEstimateMetis(CConfig* config); + passivedouble WorkEstimateMetis(CConfig* config); private: /*! @@ -1434,7 +1434,7 @@ class CFEMStandardInternalFace : public CFEMStandardElementBase { * \class CFEMStandardBoundaryFace * \brief Class to define a FEM standard boundary face. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CFEMStandardBoundaryFace : public CFEMStandardElementBase { private: @@ -1636,7 +1636,7 @@ class CFEMStandardBoundaryFace : public CFEMStandardElementBase { type. This information is used to determine a well balanced partition. * \param[in] config - Object, which contains the input parameters. */ - su2double WorkEstimateMetis(CConfig* config); + passivedouble WorkEstimateMetis(CConfig* config); /*! * \brief Function, which estimates the additional amount of work for an element @@ -1645,7 +1645,7 @@ class CFEMStandardBoundaryFace : public CFEMStandardElementBase { * \param[in] config - Object, which contains the input parameters. * \param[in] nPointsWF - Number of points to discretize the wall model. */ - su2double WorkEstimateMetisWallFunctions(CConfig* config, const unsigned short nPointsWF); + passivedouble WorkEstimateMetisWallFunctions(CConfig* config, const unsigned short nPointsWF); private: /*! diff --git a/Common/include/geometry/CDummyGeometry.hpp b/Common/include/geometry/CDummyGeometry.hpp index 0a50819d6c8c..50ad921999dd 100644 --- a/Common/include/geometry/CDummyGeometry.hpp +++ b/Common/include/geometry/CDummyGeometry.hpp @@ -2,14 +2,14 @@ * \file CDummyGeometry.hpp * \brief Headers of the dummy geometry class used in "dry run" mode. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/geometry/CGeometry.hpp b/Common/include/geometry/CGeometry.hpp index 738618ba2cd0..a345f72c046f 100644 --- a/Common/include/geometry/CGeometry.hpp +++ b/Common/include/geometry/CGeometry.hpp @@ -3,14 +3,14 @@ * \brief Headers of the main subroutines for creating the geometrical structure. * The subroutines and functions are in the CGeometry.cpp file. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -60,7 +60,6 @@ extern "C" { #include "dual_grid/CTurboVertex.hpp" #include "../CConfig.hpp" -#include "../fem/geometry_structure_fem_part.hpp" #include "../toolboxes/graph_toolbox.hpp" #include "../adt/CADTElemClass.hpp" @@ -244,6 +243,8 @@ class CGeometry { /*!< \brief Corrected normals on nodes with shared symmetry markers. */ vector>> symmetryNormals; + /*!< \brief Bool if boundary-marker is straight(2D)/plane(3D) for each local marker. */ + vector boundIsStraight; vector SurfaceAreaCfgFile; /*!< \brief Total Surface area for all markers. */ /*--- Partitioning-specific variables ---*/ @@ -913,14 +914,6 @@ class CGeometry { */ inline virtual void SetMultiGridWallTemperature(const CGeometry* fine_grid, unsigned short val_marker) {} - /*! - * \brief A virtual member. - * \param[in] val_nSmooth - Number of smoothing iterations. - * \param[in] val_smooth_coeff - Relaxation factor. - * \param[in] config - Definition of the particular problem. - */ - inline virtual void SetCoord_Smoothing(unsigned short val_nSmooth, su2double val_smooth_coeff, CConfig* config) {} - /*! * \brief A virtual member. * \param[in] fine_grid - Geometrical definition of the child grid (for multigrid). @@ -1014,6 +1007,15 @@ class CGeometry { */ su2double GetSurfaceArea(const CConfig* config, unsigned short val_marker) const; + /*! + * \brief Check if a boundary is straight(2D) / plane(3D) for EULER_WALL and SYMMETRY_PLANE + * only and store the information in boundIsStraight. For all other boundary types + * this will return false and could therfore be wrong. Used ultimately for BC_Slip_Wall. + * \param[in] config - Definition of the particular problem. + * \param[in] print_on_screen - Boolean whether to print result on screen. + */ + void ComputeSurfStraightness(const CConfig* config, bool print_on_screen); + /*! * \brief Find and store all vertices on a sharp corner in the geometry. * \param[in] config - Definition of the particular problem. diff --git a/Common/include/geometry/CMultiGridGeometry.hpp b/Common/include/geometry/CMultiGridGeometry.hpp index c3e897f7f311..3fd34a6fd4ff 100644 --- a/Common/include/geometry/CMultiGridGeometry.hpp +++ b/Common/include/geometry/CMultiGridGeometry.hpp @@ -2,14 +2,14 @@ * \file CMultiGridGeometry.hpp * \brief Headers of the multigrid geometry class. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -123,7 +123,7 @@ class CMultiGridGeometry final : public CGeometry { void SetRestricted_GridVelocity(const CGeometry* fine_grid) override; /*! - * \brief Find and store the closest neighbor to a vertex. + * \brief Find and store the closest, most normal, neighbor to a vertex. * \param[in] config - Definition of the particular problem. */ void FindNormal_Neighbor(const CConfig* config) override; diff --git a/Common/include/geometry/CMultiGridQueue.hpp b/Common/include/geometry/CMultiGridQueue.hpp index 0e48f9385179..79c0deeb0a00 100644 --- a/Common/include/geometry/CMultiGridQueue.hpp +++ b/Common/include/geometry/CMultiGridQueue.hpp @@ -3,14 +3,14 @@ * \brief Header of the multigrid queue class for the FVM solver. * The subroutines and functions are in the CMultiGridQueue.cpp file. * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/geometry/CPhysicalGeometry.hpp b/Common/include/geometry/CPhysicalGeometry.hpp index 8214e4ea7f0d..1148471f1c3e 100644 --- a/Common/include/geometry/CPhysicalGeometry.hpp +++ b/Common/include/geometry/CPhysicalGeometry.hpp @@ -2,14 +2,14 @@ * \file CPhysicalGeometry.hpp * \brief Headers of the physical geometry class used to read meshes from file. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -28,8 +28,10 @@ #pragma once #include "CGeometry.hpp" -#include "meshreader/CMeshReaderFVM.hpp" +#include "meshreader/CMeshReaderBase.hpp" #include "../containers/C2DContainer.hpp" +#include "../toolboxes/classes_multiple_integers.hpp" +#include "../toolboxes/fem/CFaceOfElement.hpp" /*! * \class CPhysicalGeometry @@ -285,51 +287,49 @@ class CPhysicalGeometry final : public CGeometry { * \param[in] val_iZone - Domain to be read from the grid file. * \param[in] val_nZone - Total number of domains in the grid file. */ - void Read_Mesh_FVM(CConfig* config, const string& val_mesh_filename, unsigned short val_iZone, - unsigned short val_nZone); + void Read_Mesh(CConfig* config, const string& val_mesh_filename, unsigned short val_iZone, unsigned short val_nZone); /*! - * \brief Reads for the FEM solver the geometry of the grid and adjust the boundary - * conditions with the configuration file in parallel (for parmetis). - * \param[in] config - Definition of the particular problem. - * \param[in] val_mesh_filename - Name of the file with the grid information. - * \param[in] val_iZone - Domain to be read from the grid file. - * \param[in] val_nZone - Total number of domains in the grid file. - */ - void Read_SU2_Format_Parallel_FEM(CConfig* config, const string& val_mesh_filename, unsigned short val_iZone, - unsigned short val_nZone); - - /*! - * \brief Reads for the FEM solver the geometry of the grid and adjust the boundary - * conditions with the configuration file in parallel (for parmetis). - * \param[in] config - Definition of the particular problem. - * \param[in] val_mesh_filename - Name of the file with the grid information. - * \param[in] val_iZone - Domain to be read from the grid file. - * \param[in] val_nZone - Total number of domains in the grid file. + * \brief Routine to load the CGNS grid points from a single zone into the proper SU2 data structures. + * \param[in] config - definition of the particular problem. + * \param[in] mesh - mesh reader object containing the current zone data. */ - void Read_CGNS_Format_Parallel_FEM(CConfig* config, const string& val_mesh_filename, unsigned short val_iZone, - unsigned short val_nZone); + void LoadLinearlyPartitionedPoints(CConfig* config, CMeshReaderBase* mesh); /*! - * \brief Routine to load the CGNS grid points from a single zone into the proper SU2 data structures. + * \brief Routine to load the grid points from a single zone into the proper SU2 data structures for the FEM solver. * \param[in] config - definition of the particular problem. * \param[in] mesh - mesh reader object containing the current zone data. */ - void LoadLinearlyPartitionedPoints(CConfig* config, CMeshReaderFVM* mesh); + void LoadLinearlyPartitionedPointsFEM(CConfig* config, CMeshReaderBase* mesh); /*! * \brief Loads the interior volume elements from the mesh reader object into the primal element data structures. * \param[in] config - definition of the particular problem. * \param[in] mesh - mesh reader object containing the current zone data. */ - void LoadLinearlyPartitionedVolumeElements(CConfig* config, CMeshReaderFVM* mesh); + void LoadLinearlyPartitionedVolumeElements(CConfig* config, CMeshReaderBase* mesh); + + /*! + * \brief Loads the interior volume elements from the mesh reader object into the primal element data structures for + * the FEM solver. \param[in] config - definition of the particular problem. \param[in] mesh - mesh reader object + * containing the current zone data. + */ + void LoadLinearlyPartitionedVolumeElementsFEM(CConfig* config, CMeshReaderBase* mesh); /*! * \brief Loads the boundary elements (markers) from the mesh reader object into the primal element data structures. * \param[in] config - definition of the particular problem. * \param[in] mesh - mesh reader object containing the current zone data. */ - void LoadUnpartitionedSurfaceElements(CConfig* config, CMeshReaderFVM* mesh); + void LoadUnpartitionedSurfaceElements(CConfig* config, CMeshReaderBase* mesh); + + /*! + * \brief Loads the boundary elements (markers) from the mesh reader object into the primal element data structures + * for the FEM solver. \param[in] config - definition of the particular problem. \param[in] mesh - mesh reader + * object containing the current zone data. + */ + void LoadLinearlyPartitionedSurfaceElementsFEM(CConfig* config, CMeshReaderBase* mesh); /*! * \brief Prepares the grid point adjacency based on a linearly partitioned mesh object needed by ParMETIS for graph @@ -499,6 +499,34 @@ class CPhysicalGeometry final : public CGeometry { */ void SetColorFEMGrid_Parallel(CConfig* config) override; + /*! + * \brief Determine the donor elements for the boundary elements on viscous + wall boundaries when wall functions are used. + * \param[in] config - Definition of the particular problem. + */ + void DetermineDonorElementsWallFunctions(CConfig* config); + +#ifdef HAVE_MPI +#ifdef HAVE_PARMETIS + /*! + * \brief Function, which converts the input the format for ParMETIS and calls + * ParMETIS to determine the actual colors of the elements. + * \param[in] adjacency - Adjacency information of the elements. + * \param[in] vwgt - Weights of the vertices of the graph, which are the elements. + * \param[in] adjwgt - Weights of the adjacencies of the graph. + */ + void DetermineFEMColorsViaParMETIS(vector >& adjacency, vector& vwgt, + vector >& adjwgt); +#endif +#endif + + /*! + * \brief Determine whether or not the Jacobians of the elements and faces + are constant and a length scale of the elements. + * \param[in] config - Definition of the particular problem. + */ + void DetermineFEMConstantJacobiansAndLenScale(CConfig* config); + /*! * \brief Compute the weights of the FEM graph for ParMETIS. * \param[in] config - Definition of the particular problem. @@ -509,24 +537,44 @@ class CPhysicalGeometry final : public CGeometry { * \param[out] vwgt - Weights of the vertices of the graph, i.e. the elements. * \param[out] adjwgt - Weights of the edges of the graph. */ - void ComputeFEMGraphWeights(CConfig* config, const vector& localFaces, - const vector >& adjacency, - const map& mapExternalElemIDToTimeLevel, - vector& vwgt, vector >& adjwgt); + void DetermineFEMGraphWeights(CConfig* config, const vector& localFaces, + const vector >& adjacency, + const map& mapExternalElemIDToTimeLevel, + vector& vwgt, vector >& adjwgt); /*! - * \brief Determine the donor elements for the boundary elements on viscous - wall boundaries when wall functions are used. - * \param[in] config - Definition of the particular problem. + * \brief Function, which determines the adjacency information of the graph + * representation of the grid. + * \param[in] localFaces - Vector containing the local matching faces of the FEM grid. + * \param[out] adjacency - Vector of vectors to store the adjacency. */ - void DetermineDonorElementsWallFunctions(CConfig* config); + void DetermineGraphAdjacency(const vector& localFaces, vector >& adjacency); /*! - * \brief Determine whether or not the Jacobians of the elements and faces - are constant and a length scale of the elements. - * \param[in] config - Definition of the particular problem. + * \brief Function, which determines the matching faces of a FEM grid. + * \param[in] config - Definition of the particular problem. + * \param[out] localFaces - Vector containing the local faces of the FEM grid. + * On output the matching faces are stored as one face. */ - void DetermineFEMConstantJacobiansAndLenScale(CConfig* config); + void DetermineMatchingFacesFEMGrid(const CConfig* config, vector& localFaces); + + /*! + * \brief Function, which determines the non-matching faces of a FEM grid. + * \param[in] config - Definition of the particular problem. + * \param[in,out] localMatchingFaces - Vector containing the local faces of the FEM grid. + * On output the non-matching faces are removed. + */ + void DetermineNonMatchingFacesFEMGrid(const CConfig* config, vector& localMatchingFaces); + + /*! + * \brief Function, which determines the owner of the internal faces, i.e. which element + * is responsible for computing the fluxes through the face. + * \param[in] localFaces - Vector, which contains the element faces of this rank. + * \param[out] mapExternalElemIDToTimeLevel - Map from the external element ID's to their time level and number of + * DOFs. + */ + void DetermineOwnershipInternalFaces(vector& localFaces, + map& mapExternalElemIDToTimeLevel); /*! * \brief Determine the neighboring information for periodic faces of a FEM grid. @@ -546,12 +594,11 @@ class CPhysicalGeometry final : public CGeometry { map& mapExternalElemIDToTimeLevel); /*! - * \brief Do an implicit smoothing of the grid coordinates. - * \param[in] val_nSmooth - Number of smoothing iterations. - * \param[in] val_smooth_coeff - Relaxation factor. - * \param[in] config - Definition of the particular problem. + * \brief Function, which stores the information of the local matching faces in the + * data structures of the local elements. + * \param[in] localFaces - Vector, which contains the internal matching faces of this rank. */ - void SetCoord_Smoothing(unsigned short val_nSmooth, su2double val_smooth_coeff, CConfig* config) override; + void StoreFaceInfoInLocalElements(const vector& localFaces); /*! * \brief Compute 3 grid quality metrics: orthogonality angle, dual cell aspect ratio, and dual cell volume ratio. @@ -560,7 +607,7 @@ class CPhysicalGeometry final : public CGeometry { void ComputeMeshQualityStatistics(const CConfig* config) override; /*! - * \brief Find and store the closest neighbor to a vertex. + * \brief Find and store the closest, most normal, neighbor to a vertex. * \param[in] config - Definition of the particular problem. */ void FindNormal_Neighbor(const CConfig* config) override; diff --git a/Common/include/geometry/dual_grid/CDualGrid.hpp b/Common/include/geometry/dual_grid/CDualGrid.hpp index cee0b4f68780..7a8c4d41f0a1 100644 --- a/Common/include/geometry/dual_grid/CDualGrid.hpp +++ b/Common/include/geometry/dual_grid/CDualGrid.hpp @@ -3,14 +3,14 @@ * \brief Headers of the main subroutines for doing the complete dual grid structure. * The subroutines and functions are in the CDualGrid.cpp file. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/geometry/dual_grid/CEdge.hpp b/Common/include/geometry/dual_grid/CEdge.hpp index d6b38d59cd3b..a29d0f993d7d 100644 --- a/Common/include/geometry/dual_grid/CEdge.hpp +++ b/Common/include/geometry/dual_grid/CEdge.hpp @@ -2,14 +2,14 @@ * \file CEdge.hpp * \brief Declaration of the edge class CEdge.cpp file. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/geometry/dual_grid/CPoint.hpp b/Common/include/geometry/dual_grid/CPoint.hpp index 17d540a2a7b7..f3912aa2a2de 100644 --- a/Common/include/geometry/dual_grid/CPoint.hpp +++ b/Common/include/geometry/dual_grid/CPoint.hpp @@ -3,14 +3,14 @@ * \brief Declaration of the point class that stores geometric and adjacency * information for dual control volumes. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -771,14 +771,14 @@ class CPoint { } /*! - * \brief Get the value of the old coordinates for implicit smoothing. + * \brief Get the value of the old coordinates. * \param[in] iPoint - Index of the point. * \return Old coordinates at a point. */ inline su2double* GetCoord_Old(unsigned long iPoint) { return Coord_Old[iPoint]; } /*! - * \brief Set the value of the vector Coord_Old for implicit smoothing. + * \brief Set the value of the vector Coord_Old. * \param[in] iPoint - Index of the point. * \param[in] coord_old - Value of the coordinates. */ @@ -791,27 +791,6 @@ class CPoint { */ void SetCoord_Old(); - /*! - * \brief Get the value of the summed coordinates for implicit smoothing. - * \param[in] iPoint - Index of the point. - * \return Sum of coordinates at a point. - */ - inline su2double* GetCoord_Sum(unsigned long iPoint) { return Coord_Sum[iPoint]; } - - /*! - * \brief Add the value of the coordinates to the Coord_Sum vector for implicit smoothing. - * \param[in] iPoint - Index of the point. - * \param[in] coord_sum - Value of the coordinates to add. - */ - inline void AddCoord_Sum(unsigned long iPoint, const su2double* coord_sum) { - for (unsigned long iDim = 0; iDim < nDim; iDim++) Coord_Sum(iPoint, iDim) += coord_sum[iDim]; - } - - /*! - * \brief Initialize the vector Coord_Sum. - */ - void SetCoord_SumZero(); - /*! * \brief Get the value of the grid velocity at the point. * \param[in] iPoint - Index of the point. diff --git a/Common/include/geometry/dual_grid/CTurboVertex.hpp b/Common/include/geometry/dual_grid/CTurboVertex.hpp index 605d7d0ca42e..1013441813c0 100644 --- a/Common/include/geometry/dual_grid/CTurboVertex.hpp +++ b/Common/include/geometry/dual_grid/CTurboVertex.hpp @@ -3,14 +3,14 @@ * \brief Headers of the main subroutines for doing the complete dual grid structure. * The subroutines and functions are in the CTurboVertex.cpp file. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/geometry/dual_grid/CVertex.hpp b/Common/include/geometry/dual_grid/CVertex.hpp index 56c195c6e3fe..aaf64b8df2ce 100644 --- a/Common/include/geometry/dual_grid/CVertex.hpp +++ b/Common/include/geometry/dual_grid/CVertex.hpp @@ -3,14 +3,14 @@ * \brief Headers of the main subroutines for doing the complete dual grid structure. * The subroutines and functions are in the CVertex.cpp file. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -45,7 +45,8 @@ class CVertex : public CDualGrid { long PeriodicPoint[5] = {-1}; /*!< \brief Store the periodic point of a boundary (iProcessor, iPoint) */ bool ActDisk_Perimeter = false; /*!< \brief Identify nodes at the perimeter of the actuator disk */ short Rotation_Type; /*!< \brief Type of rotation associated with the vertex (MPI and periodic) */ - unsigned long Normal_Neighbor; /*!< \brief Index of the closest neighbor. */ + unsigned long Normal_Neighbor; /*!< \brief Index of the closest, most normal, neighbor. */ + su2double NearestNeighborDist = 0.0; /*!< \brief Distance to nearest internal neighbor that is not a wall. */ su2double Basis_Function[3] = {0.0}; /*!< \brief Basis function values for interpolation across zones. */ public: @@ -98,7 +99,7 @@ class CVertex : public CDualGrid { * \brief Get the normal to a face of the control volume asociated with a vertex. * \return Dimensional normal vector, the modulus is the area of the face. */ - inline su2double* GetNormal(void) override { return Normal; } + inline su2double* GetNormal() override { return Normal; } /*! * \brief Get the ith component of the normal. @@ -108,7 +109,7 @@ class CVertex : public CDualGrid { /*! * \brief Initialize normal vector. */ - inline void SetZeroValues(void) override { + inline void SetZeroValues() override { for (unsigned short iDim = 0; iDim < nDim; iDim++) Normal[iDim] = 0.0; } @@ -122,7 +123,7 @@ class CVertex : public CDualGrid { * \brief Get the value of an auxiliary variable for gradient computation. * \return Value of the auxiliar variable. */ - inline su2double GetAuxVar(void) const { return Aux_Var; } + inline su2double GetAuxVar() const { return Aux_Var; } /*! * \brief Add the value of an auxiliary variable for gradient computation. @@ -167,7 +168,7 @@ class CVertex : public CDualGrid { * \brief Get the value of the coordinate variation due to a surface modification. * \return Variation of the coordinate. */ - inline su2double* GetVarCoord(void) { return VarCoord; } + inline su2double* GetVarCoord() { return VarCoord; } /*! * \brief Set the value of the cartesian coordinate for the vertex. @@ -181,7 +182,7 @@ class CVertex : public CDualGrid { * \brief Get the value of the cartesian coordinate for the vertex. * \return Value of the cartesian coordinate of the vertex. */ - inline su2double* GetCoord(void) override { return CartCoord; } + inline su2double* GetCoord() override { return CartCoord; } /*! * \brief Get the value of the cartesian coordinate for the vertex. @@ -200,7 +201,7 @@ class CVertex : public CDualGrid { * \brief Get the type of rotation associated to the vertex. * \return Value of the rotation that must be applied to the solution of the vertex */ - inline short GetRotation_Type(void) const { return Rotation_Type; } + inline short GetRotation_Type() const { return Rotation_Type; } /*! * \overload @@ -250,49 +251,49 @@ class CVertex : public CDualGrid { * \brief Get the value of the periodic point of a vertex. * \return Value of the periodic point of a vertex. */ - inline long GetDonorPoint(void) const { return PeriodicPoint[0]; } + inline long GetDonorPoint() const { return PeriodicPoint[0]; } /*! * \brief Get the value of the periodic point of a vertex. * \return Value of the periodic point of a vertex. */ - inline long GetDonorMarker(void) const { return PeriodicPoint[4]; } + inline long GetDonorMarker() const { return PeriodicPoint[4]; } /*! * \brief Get the value of the periodic point of a vertex. * \return Value of the periodic point of a vertex. */ - inline long GetDonorVertex(void) const { return PeriodicPoint[3]; } + inline long GetDonorVertex() const { return PeriodicPoint[3]; } /*! * \brief Get the value of the periodic point of a vertex. * \return Value of the periodic point of a vertex. */ - inline long GetDonorGlobalIndex(void) const { return PeriodicPoint[2]; } + inline long GetDonorGlobalIndex() const { return PeriodicPoint[2]; } /*! * \brief Get the value of the periodic point of a vertex. * \return Value of the periodic point of a vertex. */ - inline long GetGlobalDonorPoint(void) const { return PeriodicPoint[2]; } + inline long GetGlobalDonorPoint() const { return PeriodicPoint[2]; } /*! * \brief Get the value of the periodic point of a vertex. * \return Value of the periodic point of a vertex. */ - inline long GetDonorProcessor(void) const { return PeriodicPoint[1]; } + inline long GetDonorProcessor() const { return PeriodicPoint[1]; } /*! * \brief Get the value of the periodic point of a vertex, and its somain * \return Value of the periodic point of a vertex, and the domain. */ - inline long* GetPeriodicPointDomain(void) { return PeriodicPoint; } + inline long* GetPeriodicPointDomain() { return PeriodicPoint; } /*! * \brief Get the value of the periodic point of a vertex, and its somain * \return Value of the periodic point of a vertex, and the domain. */ - inline bool GetActDisk_Perimeter(void) const { return ActDisk_Perimeter; } + inline bool GetActDisk_Perimeter() const { return ActDisk_Perimeter; } /*! * \brief Set the finite element basis functions needed for interpolation. @@ -318,5 +319,15 @@ class CVertex : public CDualGrid { * \brief Get the value of the closest neighbor. * \return Index of the closest neighbor. */ - inline unsigned long GetNormal_Neighbor(void) const { return Normal_Neighbor; } + inline unsigned long GetNormal_Neighbor() const { return Normal_Neighbor; } + + /*! + * \brief Set the distance of the nearest internal neighbor that is not a wall. + */ + inline void SetNearestNeighborDistance(const su2double& val) { NearestNeighborDist = val; } + + /*! + * \brief Get the distance to the nearest internal neighbor that is not a wall. + */ + inline const su2double& GetNearestNeighborDistance() const { return NearestNeighborDist; } }; diff --git a/Common/include/geometry/elements/CElement.hpp b/Common/include/geometry/elements/CElement.hpp index 535323ec0c02..d29372828bb2 100644 --- a/Common/include/geometry/elements/CElement.hpp +++ b/Common/include/geometry/elements/CElement.hpp @@ -3,14 +3,14 @@ * \brief Main header of the Finite Element structure declaring the abstract * interface and the available finite element types. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -67,6 +67,8 @@ class CElement { su2activematrix NodalExtrap; /*!< \brief Coordinates of the nodal points for Gaussian extrapolation. */ su2activematrix NodalStress; /*!< \brief Stress at the nodes. */ + su2activevector NodalTemperature; /*!< \brief Temperature at the nodes. */ + /*--- Stiffness and load matrices. ---*/ std::vector Kab; /*!< \brief Structure for the constitutive component of the tangent matrix. */ su2activematrix Mab; /*!< \brief Structure for the nodal components of the mass matrix. */ @@ -151,7 +153,7 @@ class CElement { * \param[in] iDim - Dimension. * \param[in] val_CoordRef - Value of the coordinate. */ - inline void SetRef_Coord(unsigned short iNode, unsigned short iDim, su2double val_CoordRef) { + inline void SetRef_Coord(unsigned short iNode, unsigned short iDim, const su2double& val_CoordRef) { RefCoord(iNode, iDim) = val_CoordRef; } @@ -161,10 +163,22 @@ class CElement { * \param[in] iDim - Dimension. * \param[in] val_CoordRef - Value of the coordinate. */ - inline void SetCurr_Coord(unsigned short iNode, unsigned short iDim, su2double val_CoordCurr) { + inline void SetCurr_Coord(unsigned short iNode, unsigned short iDim, const su2double& val_CoordCurr) { CurrentCoord(iNode, iDim) = val_CoordCurr; } + /*! + * \brief Set the value of the temperature of a node. + */ + inline void SetTemperature(unsigned short iNode, const su2double& val_Temperature) { + NodalTemperature[iNode] = val_Temperature; + } + + /*! + * \brief Set the value of the temperature of all nodes. + */ + inline void SetTemperature(const su2double& val_Temperature) { NodalTemperature = val_Temperature; } + /*! * \brief Get the value of the coordinate of the nodes in the reference configuration. * \param[in] iNode - Index of node. @@ -181,6 +195,17 @@ class CElement { */ inline su2double GetCurr_Coord(unsigned short iNode, unsigned short iDim) const { return CurrentCoord(iNode, iDim); } + /*! + * \brief Get the value of the temperature at a Gaussian integration point. + */ + inline su2double GetTemperature(unsigned short iGauss) const { + su2double Temperature = 0; + for (auto iNode = 0u; iNode < nNodes; ++iNode) { + Temperature += GetNi(iNode, iGauss) * NodalTemperature[iNode]; + } + return Temperature; + } + /*! * \brief Get the weight of the corresponding Gaussian Point. * \param[in] iGauss - index of the Gaussian point. @@ -214,7 +239,9 @@ class CElement { * \param[in] nodeB - index of Node b. * \param[in] val_Ks_ab - value of the term that will constitute the diagonal of the stress contribution. */ - inline void Add_Mab(unsigned short nodeA, unsigned short nodeB, su2double val_Mab) { Mab(nodeA, nodeB) += val_Mab; } + inline void Add_Mab(unsigned short nodeA, unsigned short nodeB, const su2double& val_Mab) { + Mab(nodeA, nodeB) += val_Mab; + } /*! * \brief Add the value of a submatrix K relating nodes a and b, for the constitutive term. @@ -243,7 +270,7 @@ class CElement { * \param[in] nodeB - index of Node b. * \param[in] val_Ks_ab - value of the term that will constitute the diagonal of the stress contribution. */ - inline void Add_Ks_ab(unsigned short nodeA, unsigned short nodeB, su2double val_Ks_ab) { + inline void Add_Ks_ab(unsigned short nodeA, unsigned short nodeB, const su2double& val_Ks_ab) { Ks_ab(nodeA, nodeB) += val_Ks_ab; } @@ -354,7 +381,7 @@ class CElement { * \param[in] iVar - Variable index. * \param[in] val_Stress - Value of the stress added. */ - inline void Add_NodalStress(unsigned short iNode, unsigned short iVar, su2double val_Stress) { + inline void Add_NodalStress(unsigned short iNode, unsigned short iVar, const su2double& val_Stress) { NodalStress(iNode, iVar) += val_Stress; } @@ -789,7 +816,7 @@ class CQUAD4 final : public CElementWithKnownSizes<4, 4, 2> { /*! * \brief Shape functions (Ni) evaluated at point Xi,Eta. */ - inline static void ShapeFunctions(su2double Xi, su2double Eta, su2double* Ni) { + inline static void ShapeFunctions(const su2double& Xi, const su2double& Eta, su2double* Ni) { Ni[0] = 0.25 * (1.0 - Xi) * (1.0 - Eta); Ni[1] = 0.25 * (1.0 + Xi) * (1.0 - Eta); Ni[2] = 0.25 * (1.0 + Xi) * (1.0 + Eta); @@ -799,7 +826,7 @@ class CQUAD4 final : public CElementWithKnownSizes<4, 4, 2> { /*! * \brief Shape function Jacobian (dNi) evaluated at point Xi,Eta. */ - inline static void ShapeFunctionJacobian(su2double Xi, su2double Eta, su2double dNi[][2]) { + inline static void ShapeFunctionJacobian(const su2double& Xi, const su2double& Eta, su2double dNi[][2]) { dNi[0][0] = -0.25 * (1.0 - Eta); dNi[0][1] = -0.25 * (1.0 - Xi); dNi[1][0] = 0.25 * (1.0 - Eta); @@ -900,7 +927,7 @@ class CPYRAM5 final : public CElementWithKnownSizes<5, 5, 3> { * \ingroup FemAlgos * \brief Prism element with 6 Gauss Points * \author R. Sanchez, F. Palacios, A. Bueno, T. Economon, S. Padron. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CPRISM6 final : public CElementWithKnownSizes<6, 6, 3> { private: diff --git a/Common/include/geometry/elements/CElementProperty.hpp b/Common/include/geometry/elements/CElementProperty.hpp index 6414af96a250..6f90f1ef422e 100644 --- a/Common/include/geometry/elements/CElementProperty.hpp +++ b/Common/include/geometry/elements/CElementProperty.hpp @@ -2,14 +2,14 @@ * \file CElementProperty.hpp * \brief Light classes to define finite element properties. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -32,7 +32,7 @@ * \ingroup Elasticity_Equations * \brief Base class for defining element properties. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CProperty { protected: @@ -106,7 +106,7 @@ class CProperty { * \ingroup Elasticity_Equations * \brief Class for defining element properties for the structural solver. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CElementProperty final : public CProperty { private: diff --git a/Common/include/geometry/elements/CGaussVariable.hpp b/Common/include/geometry/elements/CGaussVariable.hpp index cbbf0106d63e..37b10a5b8d84 100644 --- a/Common/include/geometry/elements/CGaussVariable.hpp +++ b/Common/include/geometry/elements/CGaussVariable.hpp @@ -2,14 +2,14 @@ * \file CGaussVariable.hpp * \brief Light-weight class to store Gaussian point information. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -33,7 +33,7 @@ * \class CGaussVariable * \ingroup FemAlgos * \brief Main class for defining the gaussian points. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CGaussVariable { protected: diff --git a/Common/include/geometry/meshreader/CBoxMeshReaderFEM.hpp b/Common/include/geometry/meshreader/CBoxMeshReaderFEM.hpp new file mode 100644 index 000000000000..821fe96919cb --- /dev/null +++ b/Common/include/geometry/meshreader/CBoxMeshReaderFEM.hpp @@ -0,0 +1,82 @@ +/*! + * \file CBoxMeshReaderFEM.hpp + * \brief Header file for the class CBoxMeshReaderFEM. + * The implementations are in the CBoxMeshReaderFEM.cpp file. + * \author T. Economon + * \version 8.2.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2025, 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 "CMeshReaderBase.hpp" + +/*! + * \class CBoxMeshReaderFEM + * \brief Reads a 3D box grid into linear partitions for the finite element solver (FEM). + * \author: T. Economon, E. van der Weide + */ +class CBoxMeshReaderFEM final : public CMeshReaderBase { + private: + unsigned long nNode; /*!< \brief Number of grid nodes in the x-direction. */ + unsigned long mNode; /*!< \brief Number of grid nodes in the y-direction. */ + unsigned long pNode; /*!< \brief Number of grid nodes in the z-direction. */ + + su2double Lx; /*!< \brief Length of the domain in the x-direction. */ + su2double Ly; /*!< \brief Length of the domain in the y-direction. */ + su2double Lz; /*!< \brief Length of the domain in the z-direction. */ + + su2double Ox; /*!< \brief Offset of the domain from 0.0 in the x-direction. */ + su2double Oy; /*!< \brief Offset of the domain from 0.0 in the y-direction. */ + su2double Oz; /*!< \brief Offset of the domain from 0.0 in the z-direction. */ + + unsigned short KindElem; /*!< \brief VTK identifier of the interior elements. */ + unsigned short KindBound; /*!< \brief VTK identifier of the surface elements. */ + + unsigned short nPolySol; /*!< \brief Polynomial degree of the solution. */ + + /*! + * \brief Computes and stores the grid points based on an analytic definition of a box grid. + */ + void ComputeBoxPointCoordinates(); + + /*! + * \brief Computes and stores the volume element connectivity based on an analytic definition of a box grid. + */ + void ComputeBoxVolumeConnectivity(); + + /*! + * \brief Computes and stores the surface element connectivity based on an analytic definition of a box grid. + */ + void ComputeBoxSurfaceConnectivity(); + + public: + /*! + * \brief Constructor of the CBoxMeshReaderFEM class. + */ + CBoxMeshReaderFEM(const CConfig* val_config, unsigned short val_iZone, unsigned short val_nZone); + + /*! + * \brief Destructor of the CBoxMeshReaderFEM class. + */ + ~CBoxMeshReaderFEM(void) override; +}; diff --git a/Common/include/geometry/meshreader/CBoxMeshReaderFVM.hpp b/Common/include/geometry/meshreader/CBoxMeshReaderFVM.hpp index 4c97369ec35e..6bd5a69ad97f 100644 --- a/Common/include/geometry/meshreader/CBoxMeshReaderFVM.hpp +++ b/Common/include/geometry/meshreader/CBoxMeshReaderFVM.hpp @@ -3,14 +3,14 @@ * \brief Header file for the class CBoxMeshReaderFVM. * The implementations are in the CBoxMeshReaderFVM.cpp file. * \author T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -28,14 +28,14 @@ #pragma once -#include "CMeshReaderFVM.hpp" +#include "CMeshReaderBase.hpp" /*! * \class CBoxMeshReaderFVM * \brief Reads a 3D box grid into linear partitions for the finite volume solver (FVM). * \author: T. Economon */ -class CBoxMeshReaderFVM : public CMeshReaderFVM { +class CBoxMeshReaderFVM : public CMeshReaderBase { private: unsigned long nNode; /*!< \brief Number of grid nodes in the x-direction. */ unsigned long mNode; /*!< \brief Number of grid nodes in the y-direction. */ @@ -71,7 +71,7 @@ class CBoxMeshReaderFVM : public CMeshReaderFVM { /*! * \brief Constructor of the CBoxMeshReaderFVM class. */ - CBoxMeshReaderFVM(CConfig* val_config, unsigned short val_iZone, unsigned short val_nZone); + CBoxMeshReaderFVM(const CConfig* val_config, unsigned short val_iZone, unsigned short val_nZone); /*! * \brief Destructor of the CBoxMeshReaderFVM class. diff --git a/Common/include/geometry/meshreader/CCGNSElementType.hpp b/Common/include/geometry/meshreader/CCGNSElementType.hpp new file mode 100644 index 000000000000..73530f127bfe --- /dev/null +++ b/Common/include/geometry/meshreader/CCGNSElementType.hpp @@ -0,0 +1,362 @@ +/*! + * \file CCGNSElementType.hpp + * \brief Header file for the class CCGNSElementType. + * The implementations are in the CCGNSElementType.cpp file. + * \author E. van der Weide + * \version 8.2.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2025, 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 + +#ifdef HAVE_CGNS +#include "cgnslib.h" +#endif + +#ifdef HAVE_CGNS + +using namespace std; + +/*! + * \class CCGNSElementType + * \brief Class used to convert the CGNS format to SU2 format for high order elements. + * \author: E. van der Weide + */ +class CCGNSElementType { + private: + vector CGNSTypeStored; /*!< \brief CGNS element types for which the data is stored. */ + vector VTKTypeStored; /*!< \brief VTK type of the element. */ + vector nPolyStored; /*!< \brief Polynomial degree of the element. */ + vector nDOFsStored; /*!< \brief Number of DOFs of the element. */ + vector > SU2ToCGNSStored; /*!< \brief Double vector, which stores the conversion + from SU2 to CGNS for the type in local numbering. */ + public: + /*--- Standard constructor, nothing to be done. ---*/ + CCGNSElementType() = default; + + /*--- Destructor, nothing to be done. ---*/ + ~CCGNSElementType() = default; + + /*! + * \brief Converts the connectivity information from CGNS to SU2 format. + * \param[in] val_elemType - CGNS elements type to be converted. + * \param[in] val_globalID - Global ID of this element. + * \param[in] connCGNS - Array with the connectivity of the element in CGNS format. + * \param[out] connSU2 - Vector with the connectivity and meta data in SU2 format. + */ + void CGNSToSU2(const ElementType_t val_elemType, const unsigned long val_globalID, const cgsize_t* connCGNS, + std::vector& connSU2); + + private: + /*! + * \brief Converts the connectivity from CGNS to SU2 for a node. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataNODE(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); + + /*! + * \brief Converts the connectivity from CGNS to SU2 for a Bar2 element. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataBAR_2(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); + + /*! + * \brief Converts the connectivity from CGNS to SU2 for a Bar3 element. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataBAR_3(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); + + /*! + * \brief Converts the connectivity from CGNS to SU2 for a Bar4 element. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataBAR_4(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); + + /*! + * \brief Converts the connectivity from CGNS to SU2 for a Bar5 element. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataBAR_5(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); + + /*! + * \brief Converts the connectivity from CGNS to SU2 for a Tri3 element. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataTRI_3(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); + + /*! + * \brief Converts the connectivity from CGNS to SU2 for a Tri6 element. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataTRI_6(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); + + /*! + * \brief Converts the connectivity from CGNS to SU2 for a Tri10 element. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataTRI_10(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); + + /*! + * \brief Converts the connectivity from CGNS to SU2 for a Tri15 element. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataTRI_15(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); + + /*! + * \brief Converts the connectivity from CGNS to SU2 for a Quad4 element. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataQUAD_4(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); + + /*! + * \brief Converts the connectivity from CGNS to SU2 for a Quad9 element. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataQUAD_9(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); + + /*! + * \brief Converts the connectivity from CGNS to SU2 for a Quad16 element. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataQUAD_16(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); + + /*! + * \brief Converts the connectivity from CGNS to SU2 for a Quad25 element. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataQUAD_25(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); + + /*! + * \brief Converts the connectivity from CGNS to SU2 for a Tetra4 element. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataTETRA_4(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); + + /*! + * \brief Converts the connectivity from CGNS to SU2 for a Tetra10 element. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataTETRA_10(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); + + /*! + * \brief Converts the connectivity from CGNS to SU2 for a Tetra20 element. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataTETRA_20(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); + + /*! + * \brief Converts the connectivity from CGNS to SU2 for a Tetra35 element. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataTETRA_35(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); + + /*! + * \brief Converts the connectivity from CGNS to SU2 for a Pyra5 element. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataPYRA_5(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); + + /*! + * \brief Converts the connectivity from CGNS to SU2 for a Pyra14 element. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataPYRA_14(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); + + /*! + * \brief Converts the connectivity from CGNS to SU2 for a Pyra30 element. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataPYRA_30(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); + + /*! + * \brief Converts the connectivity from CGNS to SU2 for a Pyra55 element. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataPYRA_55(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); + + /*! + * \brief Converts the connectivity from CGNS to SU2 for a Penta6 element. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataPENTA_6(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); + + /*! + * \brief Converts the connectivity from CGNS to SU2 for a Penta18 element. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataPENTA_18(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); + + /*! + * \brief Converts the connectivity from CGNS to SU2 for a Penta40 element. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataPENTA_40(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); + + /*! + * \brief Converts the connectivity from CGNS to SU2 for a Penta75 element. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataPENTA_75(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); + + /*! + * \brief Converts the connectivity from CGNS to SU2 for a Hexa8 element. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataHEXA_8(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); + + /*! + * \brief Converts the connectivity from CGNS to SU2 for a Hexa27 element. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataHEXA_27(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); + + /*! + * \brief Converts the connectivity from CGNS to SU2 for a Hexa64 element. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataHEXA_64(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); + + /*! + * \brief Converts the connectivity from CGNS to SU2 for a Hexa125 element. + * \param[out] VTK_Type - Corresponding VTK type + * \param[out] nPoly - Polynomial degree + * \param[out] nDOFs - Number of DOFs of the element. + * \param[out] SU2ToCGNS - Vector containing the mapping from SU2 to CGNS. + */ + void CreateDataHEXA_125(unsigned short& VTK_Type, unsigned short& nPoly, unsigned short& nDOFs, + vector& SU2ToCGNS); +}; +#endif diff --git a/Common/include/geometry/meshreader/CCGNSMeshReaderBase.hpp b/Common/include/geometry/meshreader/CCGNSMeshReaderBase.hpp new file mode 100644 index 000000000000..10236a277265 --- /dev/null +++ b/Common/include/geometry/meshreader/CCGNSMeshReaderBase.hpp @@ -0,0 +1,108 @@ +/*! + * \file CCGNSMeshReaderBase.hpp + * \brief Header file for the class CCGNSMeshReaderBase. + * The implementations are in the CCGNSMeshReaderBase.cpp file. + * \author T. Economon + * \version 8.2.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2025, 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 + +#ifdef HAVE_CGNS +#include "cgnslib.h" +#endif + +#include "CMeshReaderBase.hpp" + +/*! + * \class CCGNSMeshReaderBase + * \brief Base class for the reading of a CGNS zone. + * \author: T. Economon + */ +class CCGNSMeshReaderBase : public CMeshReaderBase { + protected: +#ifdef HAVE_CGNS + int cgnsFileID; /*!< \brief CGNS file identifier. */ + const int cgnsBase = 1; /*!< \brief CGNS database index (the CGNS reader currently assumes a single database). */ + const int cgnsZone = 1; /*!< \brief CGNS zone index (and 1 zone in that database). */ + + int nSections; /*!< \brief Total number of sections in the CGNS file. */ + + vector isInterior; /*!< \brief Vector of booleans to store whether each section in the CGNS file is an interior + or boundary section. */ + vector + nElems; /*!< \brief Vector containing the local number of elements found within each CGNS section. */ + vector elemOffset; /*!< \brief Global ID offset for each interior section (i.e., the total number of + global elements that came before it). */ + vector > connElems; /*!< \brief Vector containing the local element connectivity found within each + CGNS section. First index is the section, second contains the connectivity in + format [globalID VTK n1 n2 n3 n4 n5 n6 n7 n8] for each element. */ + vector > sectionNames; /*!< \brief Vector for storing the names of each boundary section (marker). */ + + /*! + * \brief Open the CGNS file and checks for errors. + * \param[in] val_filename - string name of the CGNS file to be read. + */ + void OpenCGNSFile(const string& val_filename); + + /*! + * \brief Reads all CGNS database metadata and checks for errors. + */ + void ReadCGNSDatabaseMetadata(); + + /*! + * \brief Reads all CGNS zone metadata and checks for errors. + */ + void ReadCGNSZoneMetadata(); + + /*! + * \brief Reads the grid points from a CGNS zone into linear partitions across all ranks. + */ + void ReadCGNSPointCoordinates(); + + /*! + * \brief Reads the metadata for each CGNS section in a zone and collect information, including the size and whether + * it is an interior or boundary section. + */ + void ReadCGNSSectionMetadata(); + + /*! + * \brief Get the VTK type and string name for a CGNS element type. + * \param[in] val_elem_type - CGNS element type. + * \param[out] val_vtk_type - VTK type identifier index. + * \returns String containing the name of the element type. + */ + string GetCGNSElementType(ElementType_t val_elem_type, int& val_vtk_type); +#endif + + public: + /*! + * \brief Constructor of the CCGNSMeshReaderBase class. + */ + CCGNSMeshReaderBase(const CConfig* val_config, unsigned short val_iZone, unsigned short val_nZone); + + /*! + * \brief Destructor of the CCGNSMeshReaderBase class. + */ + virtual ~CCGNSMeshReaderBase(void) override; +}; diff --git a/Common/include/geometry/meshreader/CCGNSMeshReaderFEM.hpp b/Common/include/geometry/meshreader/CCGNSMeshReaderFEM.hpp new file mode 100644 index 000000000000..25e84bc123db --- /dev/null +++ b/Common/include/geometry/meshreader/CCGNSMeshReaderFEM.hpp @@ -0,0 +1,92 @@ +/*! + * \file CCGNSMeshReaderFEM.hpp + * \brief Header file for the class CCGNSMeshReaderFEM. + * The implementations are in the CCGNSMeshReaderFEM.cpp file. + * \author T. Economon + * \version 8.2.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2025, 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 "CCGNSMeshReaderBase.hpp" + +/*! + * \class CCGNSMeshReaderFEM + * \brief Reads a CGNS zone into linear partitions for the finite element solver (FEM). + * \author: T. Economon + */ +class CCGNSMeshReaderFEM final : public CCGNSMeshReaderBase { + private: + /*! + * \brief Communicates the grid points to the MPI rank where they are needed. + */ + void CommPointCoordinates(); + +#ifdef HAVE_CGNS + + /*! + * \brief Reads the connectivity range from a CGNS section and convert it to the internal format. + * \param[in] val_section - CGNS section index. + * \param[in] val_firstIndex - Global index of the first element to be stored on this rank. + * \param[in] val_lastIndex - Global index of the last element (not included) to be stored on this rank. + * \param[inout] elemCount - Counter, which keeps track how many global elements are stored. + * \param[inout] localElemCount - Counter, which keeps track how many local elements are stored. + * \param[inout] localConn - Vector where the connectivity must be stored. + */ + void ReadCGNSConnectivityRangeSection(const int val_section, const unsigned long val_firstIndex, + const unsigned long val_lastIndex, unsigned long& elemCount, + unsigned long& localElemCount, vector& localConn); + + /*! + * \brief Reads the interior volume elements from one section of a CGNS zone into linear partitions across all ranks. + */ + void ReadCGNSVolumeElementConnectivity(); + + /*! + * \brief Reads the surface (boundary) elements from one section of a CGNS zone into linear partitions across all + * ranks. + */ + void ReadCGNSSurfaceElementConnectivity(); + + /*! + * \brief Reads the connectivity from a CGNS surface section and select the relevant faces. + * \param[in] val_section - CGNS section index. + * \param[in] localFaces - The faces of the locally stored volume elements. + * \param[out] nSurfElem - Number of local surface elements stored for this surface section. + * \param[out] surfConn - Vector to store the connectivity of the surface elements to be stored. + */ + void ReadCGNSSurfaceSection(const int val_section, const vector& localFaces, unsigned long& nSurfElem, + vector& surfConn); +#endif + + public: + /*! + * \brief Constructor of the CCGNSMeshReaderFEM class. + */ + CCGNSMeshReaderFEM(const CConfig* val_config, unsigned short val_iZone, unsigned short val_nZone); + + /*! + * \brief Destructor of the CCGNSMeshReaderFEM class. + */ + ~CCGNSMeshReaderFEM(void) override; +}; diff --git a/Common/include/geometry/meshreader/CCGNSMeshReaderFVM.hpp b/Common/include/geometry/meshreader/CCGNSMeshReaderFVM.hpp index 6199cb540d5a..4b4cbb13f8e8 100644 --- a/Common/include/geometry/meshreader/CCGNSMeshReaderFVM.hpp +++ b/Common/include/geometry/meshreader/CCGNSMeshReaderFVM.hpp @@ -3,14 +3,14 @@ * \brief Header file for the class CCGNSMeshReaderFVM. * The implementations are in the CCGNSMeshReaderFVM.cpp file. * \author T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -28,64 +28,16 @@ #pragma once -#ifdef HAVE_CGNS -#include "cgnslib.h" -#endif - -#include "CMeshReaderFVM.hpp" +#include "CCGNSMeshReaderBase.hpp" /*! * \class CCGNSMeshReaderFVM * \brief Reads a CGNS zone into linear partitions for the finite volume solver (FVM). * \author: T. Economon */ -class CCGNSMeshReaderFVM : public CMeshReaderFVM { +class CCGNSMeshReaderFVM final : public CCGNSMeshReaderBase { private: #ifdef HAVE_CGNS - int cgnsFileID; /*!< \brief CGNS file identifier. */ - const int cgnsBase = 1; /*!< \brief CGNS database index (the CGNS reader currently assumes a single database). */ - const int cgnsZone = 1; /*!< \brief CGNS zone index (and 1 zone in that database). */ - - int nSections; /*!< \brief Total number of sections in the CGNS file. */ - - vector isInterior; /*!< \brief Vector of booleans to store whether each section in the CGNS file is an interior - or boundary section. */ - vector - nElems; /*!< \brief Vector containing the local number of elements found within each CGNS section. */ - vector elemOffset; /*!< \brief Global ID offset for each interior section (i.e., the total number of - global elements that came before it). */ - vector > connElems; /*!< \brief Vector containing the local element connectivity found within each - CGNS section. First index is the section, second contains the connectivity in - format [globalID VTK n1 n2 n3 n4 n5 n6 n7 n8] for each element. */ - vector > sectionNames; /*!< \brief Vector for storing the names of each boundary section (marker). */ - - /*! - * \brief Open the CGNS file and checks for errors. - * \param[in] val_filename - string name of the CGNS file to be read. - */ - void OpenCGNSFile(const string& val_filename); - - /*! - * \brief Reads all CGNS database metadata and checks for errors. - */ - void ReadCGNSDatabaseMetadata(); - - /*! - * \brief Reads all CGNS zone metadata and checks for errors. - */ - void ReadCGNSZoneMetadata(); - - /*! - * \brief Reads the grid points from a CGNS zone into linear partitions across all ranks. - */ - void ReadCGNSPointCoordinates(); - - /*! - * \brief Reads the metadata for each CGNS section in a zone and collect information, including the size and whether - * it is an interior or boundary section. - */ - void ReadCGNSSectionMetadata(); - /*! * \brief Reads the interior volume elements from one section of a CGNS zone into linear partitions across all ranks. * \param[in] val_section - CGNS section index. @@ -108,13 +60,6 @@ class CCGNSMeshReaderFVM : public CMeshReaderFVM { */ void ReformatCGNSSurfaceConnectivity(); - /*! - * \brief Get the VTK type and string name for a CGNS element type. - * \param[in] val_elem_type - CGNS element type. - * \param[out] val_vtk_type - VTK type identifier index. - * \returns String containing the name of the element type. - */ - string GetCGNSElementType(ElementType_t val_elem_type, int& val_vtk_type); #endif /*! @@ -146,7 +91,7 @@ class CCGNSMeshReaderFVM : public CMeshReaderFVM { /*! * \brief Constructor of the CCGNSMeshReaderFVM class. */ - CCGNSMeshReaderFVM(CConfig* val_config, unsigned short val_iZone, unsigned short val_nZone); + CCGNSMeshReaderFVM(const CConfig* val_config, unsigned short val_iZone, unsigned short val_nZone); /*! * \brief Destructor of the CCGNSMeshReaderFVM class. diff --git a/Common/include/geometry/meshreader/CMeshReaderFVM.hpp b/Common/include/geometry/meshreader/CMeshReaderBase.hpp similarity index 70% rename from Common/include/geometry/meshreader/CMeshReaderFVM.hpp rename to Common/include/geometry/meshreader/CMeshReaderBase.hpp index 7980acf39fd6..420012f873c5 100644 --- a/Common/include/geometry/meshreader/CMeshReaderFVM.hpp +++ b/Common/include/geometry/meshreader/CMeshReaderBase.hpp @@ -1,17 +1,17 @@ /*! - * \file CMeshReaderFVM.hpp - * \brief Header file for the class CMeshReaderFVM. - * The implementations are in the CMeshReaderFVM.cpp file. + * \file CMeshReaderBase.hpp + * \brief Header file for the class CMeshReaderBase. + * The implementations are in the CMeshReaderBase.cpp file. * \author T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -31,15 +31,17 @@ #include +#include "../primal_grid/CPrimalGridFEM.hpp" +#include "../../toolboxes/fem/CFaceOfElement.hpp" #include "../../parallelization/mpi_structure.hpp" #include "../../CConfig.hpp" /*! - * \class CMeshReaderFVM - * \brief Base class for the mesh zone readers of the finite volume solver (FVM). + * \class CMeshReaderBase + * \brief Base class for the mesh zone readers. * \author T. Economon */ -class CMeshReaderFVM { +class CMeshReaderBase { protected: const int rank; /*!< \brief MPI Rank. */ const int size; /*!< \brief MPI Size. */ @@ -54,6 +56,7 @@ class CMeshReaderFVM { vector > localPointCoordinates; /*!< \brief Vector holding the coordinates from the mesh file for the local grid points. First index is dimension, second is point index. */ + vector globalPointIDs; /*!< \brief Vector holding the global IDs of the local grid points. */ unsigned long numberOfLocalElements = 0; /*!< \brief Number of local elements within the linear partition on this rank. */ @@ -63,20 +66,39 @@ class CMeshReaderFVM { unsigned long numberOfMarkers = 0; /*!< \brief Total number of markers contained within the mesh file. */ vector markerNames; /*!< \brief String names for all markers in the mesh file. */ + vector + numberOfLocalSurfaceElements; /*!< \brief Vector containing the number of local surface elements. */ vector > surfaceElementConnectivity; /*!< \brief Vector containing the surface element connectivity from the mesh file on a - per-marker basis. Only the master node reads and stores this connectivity. */ + per-marker basis. For FVM, only the master node reads and stores this connectivity. + */ + + /*! + * \brief Function, which determines the faces of the local volume elements. + * \param[out] localFaces - The faces of the locally stored volume elements. + */ + void DetermineFacesVolumeElements(vector& localFaces); + + /*! + * \brief Get all the corner points of all the faces of the given element. It must + * \param[in] elemInfo - Array, which contains the info of the given element. + * \param[out] nFaces - Number of faces of the element. + * \param[out] nPointsPerFace - Number of corner points for each of the faces. + * \param[out] faceConn - Global IDs of the corner points of the faces. + */ + void GetCornerPointsAllFaces(const unsigned long* elemInfo, unsigned short& numFaces, unsigned short nPointsPerFace[], + unsigned long faceConn[6][4]); public: /*! - * \brief Constructor of the CMeshReaderFVM class. + * \brief Constructor of the CMeshReaderBase class. * \param[in] val_config - config object for the current zone. * \param[in] val_iZone - Current zone index. * \param[in] val_nZone - Total number of zones. */ - CMeshReaderFVM(const CConfig* val_config, unsigned short val_iZone, unsigned short val_nZone); + CMeshReaderBase(const CConfig* val_config, unsigned short val_iZone, unsigned short val_nZone); - virtual ~CMeshReaderFVM() = default; + virtual ~CMeshReaderBase() = default; /*! * \brief Get the physical dimension of the problem (2 or 3). @@ -84,6 +106,12 @@ class CMeshReaderFVM { */ inline unsigned short GetDimension() const { return dimension; } + /*! + * \brief Get the global IDs of the local points. + * \returns Reference to the vector containing the global points IDs. + */ + inline const vector& GetGlobalPointIDs() const { return globalPointIDs; } + /*! * \brief Get the local point coordinates (linearly partitioned). * \returns Local point coordinates (linear partitioned). @@ -99,6 +127,14 @@ class CMeshReaderFVM { return surfaceElementConnectivity[val_iMarker]; } + /*! + * \brief Get the number surface elements for all markers. + * \returns Reference to the vector containing the number of surface elements for all markers. + */ + inline const vector& GetNumberOfSurfaceElementsAllMarkers() const { + return numberOfLocalSurfaceElements; + } + /*! * \brief Get the number surface elements for the specified marker. * \param[in] val_iMarker - current marker index. diff --git a/Common/include/geometry/meshreader/CRectangularMeshReaderFEM.hpp b/Common/include/geometry/meshreader/CRectangularMeshReaderFEM.hpp new file mode 100644 index 000000000000..f52db11007cf --- /dev/null +++ b/Common/include/geometry/meshreader/CRectangularMeshReaderFEM.hpp @@ -0,0 +1,79 @@ +/*! + * \file CRectangularMeshReaderFEM.hpp + * \brief Header file for the class CRectangularMeshReaderFEM. + * The implementations are in the CRectangularMeshReaderFEM.cpp file. + * \author T. Economon + * \version 8.2.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2025, 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 "CMeshReaderBase.hpp" + +/*! + * \class CRectangularMeshReaderFEM + * \brief Reads a 2D rectangular grid into linear partitions for the finite element solver (FEM). + * \author: T. Economon, E. van der Weide + */ +class CRectangularMeshReaderFEM : public CMeshReaderBase { + private: + unsigned long nNode; /*!< \brief Number of grid nodes in the x-direction. */ + unsigned long mNode; /*!< \brief Number of grid nodes in the y-direction. */ + + su2double Lx; /*!< \brief Length of the domain in the x-direction. */ + su2double Ly; /*!< \brief Length of the domain in the y-direction. */ + + su2double Ox; /*!< \brief Offset of the domain from 0.0 in the x-direction. */ + su2double Oy; /*!< \brief Offset of the domain from 0.0 in the y-direction. */ + + unsigned short KindElem; /*!< \brief VTK identifier of the interior elements. */ + unsigned short KindBound; /*!< \brief VTK identifier of the surface elements. */ + + unsigned short nPolySol; /*!< \brief Polynomial degree of the solution. */ + + /*! + * \brief Computes and stores the grid points based on an analytic definition of a rectangular grid. + */ + void ComputeRectangularPointCoordinates(); + + /*! + * \brief Computes and stores the volume element connectivity based on an analytic definition of a rectangular grid. + */ + void ComputeRectangularVolumeConnectivity(); + + /*! + * \brief Computes and stores the surface element connectivity based on an analytic definition of a rectangular grid. + */ + void ComputeRectangularSurfaceConnectivity(); + + public: + /*! + * \brief Constructor of the CRectangularMeshReaderFEM class. + */ + CRectangularMeshReaderFEM(const CConfig* val_config, unsigned short val_iZone, unsigned short val_nZone); + + /*! + * \brief Destructor of the CRectangularMeshReaderFEM class. + */ + ~CRectangularMeshReaderFEM(void) override; +}; diff --git a/Common/include/geometry/meshreader/CRectangularMeshReaderFVM.hpp b/Common/include/geometry/meshreader/CRectangularMeshReaderFVM.hpp index 54f393b88d8e..fdb8541db670 100644 --- a/Common/include/geometry/meshreader/CRectangularMeshReaderFVM.hpp +++ b/Common/include/geometry/meshreader/CRectangularMeshReaderFVM.hpp @@ -3,14 +3,14 @@ * \brief Header file for the class CRectangularMeshReaderFVM. * The implementations are in the CRectangularMeshReaderFVM.cpp file. * \author T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -28,14 +28,14 @@ #pragma once -#include "CMeshReaderFVM.hpp" +#include "CMeshReaderBase.hpp" /*! * \class CRectangularMeshReaderFVM * \brief Reads a 2D rectangular grid into linear partitions for the finite volume solver (FVM). * \author: T. Economon */ -class CRectangularMeshReaderFVM : public CMeshReaderFVM { +class CRectangularMeshReaderFVM : public CMeshReaderBase { private: unsigned long nNode; /*!< \brief Number of grid nodes in the x-direction. */ unsigned long mNode; /*!< \brief Number of grid nodes in the y-direction. */ @@ -69,4 +69,9 @@ class CRectangularMeshReaderFVM : public CMeshReaderFVM { * \brief Constructor of the CRectangularMeshReaderFVM class. */ CRectangularMeshReaderFVM(const CConfig* val_config, unsigned short val_iZone, unsigned short val_nZone); + + /*! + * \brief Destructor of the CRectangularMeshReaderFVM class. + */ + ~CRectangularMeshReaderFVM(void) override; }; diff --git a/Common/include/geometry/meshreader/CSU2ASCIIMeshReaderBase.hpp b/Common/include/geometry/meshreader/CSU2ASCIIMeshReaderBase.hpp new file mode 100644 index 000000000000..99800d026266 --- /dev/null +++ b/Common/include/geometry/meshreader/CSU2ASCIIMeshReaderBase.hpp @@ -0,0 +1,116 @@ +/*! + * \file CSU2ASCIIMeshReaderBase.hpp + * \brief Header file for the class CSU2ASCIIMeshReaderBase. + * The implementations are in the CSU2ASCIIMeshReaderBase.cpp file. + * \author T. Economon + * \version 8.2.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2025, 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 + +#include "CMeshReaderBase.hpp" + +/*! + * \class CSU2ASCIIMeshReaderBase + * \brief Base class for the reading of a native SU2 ASCII grid. + * \author T. Economon + */ +class CSU2ASCIIMeshReaderBase : public CMeshReaderBase { + protected: + enum class FileSection { POINTS, ELEMENTS, MARKERS }; /*!< \brief Different sections of the file. */ + std::array SectionOrder{}; /*!< \brief Order of the sections in the file. */ + + const unsigned short myZone; /*!< \brief Current SU2 zone index. */ + const unsigned short nZones; /*!< \brief Total number of zones in the SU2 file. */ + + const string meshFilename; /*!< \brief Name of the SU2 ASCII mesh file being read. */ + ifstream mesh_file; /*!< \brief File object for the SU2 ASCII mesh file. */ + + bool actuator_disk; /*!< \brief Boolean for whether we have an actuator disk to split. */ + + unsigned long ActDiskNewPoints = + 0; /*!< \brief Total number of new grid points to add due to actuator disk splitting. */ + + su2double Xloc = 0.0; /*!< \brief X-coordinate of the CG of the actuator disk surface. */ + su2double Yloc = 0.0; /*!< \brief X-coordinate of the CG of the actuator disk surface. */ + su2double Zloc = 0.0; /*!< \brief X-coordinate of the CG of the actuator disk surface. */ + + vector ActDisk_Bool; /*!< \brief Flag to identify the grid points on the actuator disk. */ + + vector ActDiskPoint_Back; /*!< \brief Vector containing the global index for the new grid points added + to the back of the actuator disk. */ + vector VolumePoint_Inv; /*!< \brief Vector containing the inverse mapping from the global index to the + added point index for the actuator disk. */ + + vector CoordXActDisk; /*!< \brief X-coordinates of the new grid points added by splitting the actuator disk + (size = ActDiskNewPoints). */ + vector CoordYActDisk; /*!< \brief Y-coordinates of the new grid points added by splitting the actuator disk + (size = ActDiskNewPoints). */ + vector CoordZActDisk; /*!< \brief Z-coordinates of the new grid points added by splitting the actuator disk + (size = ActDiskNewPoints). */ + + vector CoordXVolumePoint; /*!< \brief X-coordinates of the volume elements touching the actuator disk. */ + vector CoordYVolumePoint; /*!< \brief Y-coordinates of the volume elements touching the actuator disk. */ + vector CoordZVolumePoint; /*!< \brief Z-coordinates of the volume elements touching the actuator disk. */ + + /*! + * \brief Reads all SU2 ASCII mesh metadata and checks for errors. + * \param[in] single_pass - Try to read the contents together with the metadata if the order allows (points before + * elements). \param[in,out] config - Problem configuration where some metadata is updated (e.g. AoA). \returns True + * if single_pass was successful. + */ + bool ReadMetadata(const bool single_pass, CConfig* config); + + /*! + * \brief Reads the grid points from an SU2 zone into linear partitions across all ranks. + */ + virtual void ReadPointCoordinates(const bool single_pass = false); + + /*! + * \brief Reads the interior volume elements from one section of an SU2 zone into linear partitions across all ranks. + */ + virtual void ReadVolumeElementConnectivity(const bool single_pass = false); + + /*! + * \brief Reads the surface (boundary) elements from the SU2 zone. + */ + virtual void ReadSurfaceElementConnectivity(const bool single_pass = false); + + /*! + * \brief Helper function to find the current zone in an SU2 ASCII mesh object. + */ + void FastForwardToMyZone(); + + public: + /*! + * \brief Constructor of the CSU2ASCIIMeshReaderBase class. + */ + CSU2ASCIIMeshReaderBase(CConfig* val_config, unsigned short val_iZone, unsigned short val_nZone); + + /*! + * \brief Destructor of the CSU2ASCIIMeshReaderBase class. + */ + virtual ~CSU2ASCIIMeshReaderBase(void) override; +}; diff --git a/Common/include/geometry/meshreader/CSU2ASCIIMeshReaderFEM.hpp b/Common/include/geometry/meshreader/CSU2ASCIIMeshReaderFEM.hpp new file mode 100644 index 000000000000..ff9af0b61741 --- /dev/null +++ b/Common/include/geometry/meshreader/CSU2ASCIIMeshReaderFEM.hpp @@ -0,0 +1,68 @@ +/*! + * \file CSU2ASCIIMeshReaderFEM.hpp + * \brief Header file for the class CSU2ASCIIMeshReaderFEM. + * The implementations are in the CSU2ASCIIMeshReaderFEM.cpp file. + * \author T. Economon, E. van der Weide + * \version 8.2.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2025, 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 + +#include "CSU2ASCIIMeshReaderBase.hpp" + +/*! + * \class CSU2ASCIIMeshReaderFEM + * \brief Reads a native SU2 ASCII grid into linear partitions for the finite element solver (FEM). + * \author T. Economon, E. van der Weide + */ +class CSU2ASCIIMeshReaderFEM : public CSU2ASCIIMeshReaderBase { + private: + /*! + * \brief Reads the grid points from an SU2 zone into linear partitions across all ranks. + */ + void ReadPointCoordinates(); + + /*! + * \brief Reads the interior volume elements from one section of an SU2 zone into linear partitions across all ranks. + */ + void ReadVolumeElementConnectivity(); + + /*! + * \brief Reads the surface (boundary) elements from one section of an SU2 zone into linear partitions across all + * ranks. + */ + void ReadSurfaceElementConnectivity(); + + public: + /*! + * \brief Constructor of the CSU2ASCIIMeshReaderFEM class. + */ + CSU2ASCIIMeshReaderFEM(CConfig* val_config, unsigned short val_iZone, unsigned short val_nZone); + + /*! + * \brief Destructor of the CSU2ASCIIMeshReaderFEM class. + */ + ~CSU2ASCIIMeshReaderFEM(void) override; +}; diff --git a/Common/include/geometry/meshreader/CSU2ASCIIMeshReaderFVM.hpp b/Common/include/geometry/meshreader/CSU2ASCIIMeshReaderFVM.hpp index 1be0177b4357..6c66d894af15 100644 --- a/Common/include/geometry/meshreader/CSU2ASCIIMeshReaderFVM.hpp +++ b/Common/include/geometry/meshreader/CSU2ASCIIMeshReaderFVM.hpp @@ -3,14 +3,14 @@ * \brief Header file for the class CSU2ASCIIMeshReaderFVM. * The implementations are in the CSU2ASCIIMeshReaderFVM.cpp file. * \author T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -30,87 +30,28 @@ #include -#include "CMeshReaderFVM.hpp" +#include "CSU2ASCIIMeshReaderBase.hpp" /*! * \class CSU2ASCIIMeshReaderFVM * \brief Reads a native SU2 ASCII grid into linear partitions for the finite volume solver (FVM). * \author T. Economon */ -class CSU2ASCIIMeshReaderFVM : public CMeshReaderFVM { +class CSU2ASCIIMeshReaderFVM : public CSU2ASCIIMeshReaderBase { private: - enum class FileSection { POINTS, ELEMENTS, MARKERS }; /*!< \brief Different sections of the file. */ - std::array SectionOrder{}; /*!< \brief Order of the sections in the file. */ - - const unsigned short myZone; /*!< \brief Current SU2 zone index. */ - const unsigned short nZones; /*!< \brief Total number of zones in the SU2 file. */ - - const string meshFilename; /*!< \brief Name of the SU2 ASCII mesh file being read. */ - ifstream mesh_file; /*!< \brief File object for the SU2 ASCII mesh file. */ - - bool actuator_disk; /*!< \brief Boolean for whether we have an actuator disk to split. */ - - unsigned long ActDiskNewPoints = - 0; /*!< \brief Total number of new grid points to add due to actuator disk splitting. */ - - su2double Xloc = 0.0; /*!< \brief X-coordinate of the CG of the actuator disk surface. */ - su2double Yloc = 0.0; /*!< \brief X-coordinate of the CG of the actuator disk surface. */ - su2double Zloc = 0.0; /*!< \brief X-coordinate of the CG of the actuator disk surface. */ - - vector ActDisk_Bool; /*!< \brief Flag to identify the grid points on the actuator disk. */ - - vector ActDiskPoint_Back; /*!< \brief Vector containing the global index for the new grid points added - to the back of the actuator disk. */ - vector VolumePoint_Inv; /*!< \brief Vector containing the inverse mapping from the global index to the - added point index for the actuator disk. */ - - vector CoordXActDisk; /*!< \brief X-coordinates of the new grid points added by splitting the actuator disk - (size = ActDiskNewPoints). */ - vector CoordYActDisk; /*!< \brief Y-coordinates of the new grid points added by splitting the actuator disk - (size = ActDiskNewPoints). */ - vector CoordZActDisk; /*!< \brief Z-coordinates of the new grid points added by splitting the actuator disk - (size = ActDiskNewPoints). */ - - vector CoordXVolumePoint; /*!< \brief X-coordinates of the volume elements touching the actuator disk. */ - vector CoordYVolumePoint; /*!< \brief Y-coordinates of the volume elements touching the actuator disk. */ - vector CoordZVolumePoint; /*!< \brief Z-coordinates of the volume elements touching the actuator disk. */ - - /*! - * \brief Reads all SU2 ASCII mesh metadata and checks for errors. - * \param[in] single_pass - Try to read the contents together with the metadata if the order allows (points before - * elements). \param[in,out] config - Problem configuration where some metadata is updated (e.g. AoA). \returns True - * if single_pass was successful. - */ - bool ReadMetadata(const bool single_pass, CConfig* config); - /*! * \brief Splits a single surface actuator disk boundary into two separate markers (repeated points). */ void SplitActuatorDiskSurface(); - /*! - * \brief Reads the grid points from an SU2 zone into linear partitions across all ranks. - */ - void ReadPointCoordinates(const bool single_pass = false); - - /*! - * \brief Reads the interior volume elements from one section of an SU2 zone into linear partitions across all ranks. - */ - void ReadVolumeElementConnectivity(const bool single_pass = false); - - /*! - * \brief Reads the surface (boundary) elements from the SU2 zone. - */ - void ReadSurfaceElementConnectivity(const bool single_pass = false); - - /*! - * \brief Helper function to find the current zone in an SU2 ASCII mesh object. - */ - void FastForwardToMyZone(); - public: /*! * \brief Constructor of the CSU2ASCIIMeshReaderFVM class. */ CSU2ASCIIMeshReaderFVM(CConfig* val_config, unsigned short val_iZone, unsigned short val_nZone); + + /*! + * \brief Destructor of the CSU2ASCIIMeshReaderFVM class. + */ + ~CSU2ASCIIMeshReaderFVM(void) override; }; diff --git a/Common/include/geometry/primal_grid/CHexahedron.hpp b/Common/include/geometry/primal_grid/CHexahedron.hpp index edb4f6ca94f1..26754e606cc8 100644 --- a/Common/include/geometry/primal_grid/CHexahedron.hpp +++ b/Common/include/geometry/primal_grid/CHexahedron.hpp @@ -3,14 +3,14 @@ * \brief Headers of the main subroutines for storing the primal grid structure. * The subroutines and functions are in the CHexahedron.cpp file. * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/geometry/primal_grid/CLine.hpp b/Common/include/geometry/primal_grid/CLine.hpp index 9720184d85bd..7864bb167ed6 100644 --- a/Common/include/geometry/primal_grid/CLine.hpp +++ b/Common/include/geometry/primal_grid/CLine.hpp @@ -3,14 +3,14 @@ * \brief Headers of the main subroutines for storing the primal grid structure. * The subroutines and functions are in the CLine.cpp file. * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/geometry/primal_grid/CPrimalGrid.hpp b/Common/include/geometry/primal_grid/CPrimalGrid.hpp index b27332b04175..380cce819f6a 100644 --- a/Common/include/geometry/primal_grid/CPrimalGrid.hpp +++ b/Common/include/geometry/primal_grid/CPrimalGrid.hpp @@ -3,14 +3,14 @@ * \brief Headers of the main subroutines for storing the primal grid structure. * The subroutines and functions are in the primal_grid_structure.cpp file. * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/geometry/primal_grid/CPrimalGridBoundFEM.hpp b/Common/include/geometry/primal_grid/CPrimalGridBoundFEM.hpp index fd7db594f6f6..bb743ccb7d52 100644 --- a/Common/include/geometry/primal_grid/CPrimalGridBoundFEM.hpp +++ b/Common/include/geometry/primal_grid/CPrimalGridBoundFEM.hpp @@ -3,14 +3,14 @@ * \brief Headers of the main subroutines for storing the primal grid structure. * The subroutines and functions are in the CPrimalGridBoundFEM.cpp file. * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -33,7 +33,7 @@ /*! * \class CPrimalGridBoundFEM * \brief Class to define primal grid boundary element for the FEM solver. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CPrimalGridBoundFEM final : public CPrimalGrid { private: @@ -51,16 +51,9 @@ class CPrimalGridBoundFEM final : public CPrimalGrid { public: /*! * \brief Constructor using data to initialize the boundary element. - * \param[in] val_elemGlobalID - Global boundary element ID of this element. - * \param[in] val_domainElementID - Global ID of the corresponding domain element. - * \param[in] val_VTK_Type - VTK type to indicate the element type - * \param[in] val_nPolyGrid - Polynomial degree to describe the geometry of the element. - * \param[in] val_nDOFsGrid - Number of DOFs used to describe the geometry of the element. - * \param[in] val_nodes - Vector, which contains the global node IDs of the element. - */ - CPrimalGridBoundFEM(unsigned long val_elemGlobalID, unsigned long val_domainElementID, unsigned short val_VTK_Type, - unsigned short val_nPolyGrid, unsigned short val_nDOFsGrid, - std::vector& val_nodes); + * \param[in] dataElem - Meta and connectivity data for this element. + */ + CPrimalGridBoundFEM(const unsigned long* dataElem); /*! * \brief Get the number of nodes that composes a face of an element. diff --git a/Common/include/geometry/primal_grid/CPrimalGridFEM.hpp b/Common/include/geometry/primal_grid/CPrimalGridFEM.hpp index 81c214c78ff6..7927762881f6 100644 --- a/Common/include/geometry/primal_grid/CPrimalGridFEM.hpp +++ b/Common/include/geometry/primal_grid/CPrimalGridFEM.hpp @@ -3,14 +3,14 @@ * \brief Headers of the main subroutines for storing the primal grid structure. * The subroutines and functions are in the CPrimalGridFEM.cpp file. * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -34,7 +34,7 @@ /*! * \class CPrimalGridFEM * \brief Class to define primal grid element for the FEM solver. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CPrimalGridFEM final : public CPrimalGrid { private: @@ -55,33 +55,10 @@ class CPrimalGridFEM final : public CPrimalGrid { public: /*! * \brief Constructor using data to initialize the element. - * \param[in] val_elemGlobalID - Global element ID of this element. - * \param[in] val_VTK_Type - VTK type to indicate the element type - * \param[in] val_nPolyGrid - Polynomial degree to describe the geometry of the element. - * \param[in] val_nPolySol - Polynomial degree to describe the solution of the element. - * \param[in] val_nDOFsGrid - Number of DOFs used to describe the geometry of the element. - * \param[in] val_nDOFsSol - Number of DOFs used to describe the solution of the element. - * \param[in] val_offDOfsSol - Global offset of the solution DOFs of the element. - * \param[in] elem_line - istringstream, which contains the grid node numbers of the element. + * \param[in] dataElem - Meta and connectivity data for this element. + * \param[in,out] offsetDOFs - The offset of the solution DOFs for this element. */ - CPrimalGridFEM(unsigned long val_elemGlobalID, unsigned short val_VTK_Type, unsigned short val_nPolyGrid, - unsigned short val_nPolySol, unsigned short val_nDOFsGrid, unsigned short val_nDOFsSol, - unsigned long val_offDOfsSol, std::istringstream& elem_line); - - /*! - * \brief Constructor using data to initialize the element. - * \param[in] val_elemGlobalID - Global element ID of this element. - * \param[in] val_VTK_Type - VTK type to indicate the element type - * \param[in] val_nPolyGrid - Polynomial degree to describe the geometry of the element. - * \param[in] val_nPolySol - Polynomial degree to describe the solution of the element. - * \param[in] val_nDOFsGrid - Number of DOFs used to describe the geometry of the element. - * \param[in] val_nDOFsSol - Number of DOFs used to describe the solution of the element. - * \param[in] val_offDOfsSol - Global offset of the solution DOFs of the element. - * \param[in] connGrid - Array, which contains the grid node numbers of the element. - */ - CPrimalGridFEM(unsigned long val_elemGlobalID, unsigned short val_VTK_Type, unsigned short val_nPolyGrid, - unsigned short val_nPolySol, unsigned short val_nDOFsGrid, unsigned short val_nDOFsSol, - unsigned long val_offDOfsSol, const unsigned long* connGrid); + CPrimalGridFEM(const unsigned long* dataElem, unsigned long& offsetSolDOFs); /*! * \brief Get the number of nodes that composes a face of an element. diff --git a/Common/include/geometry/primal_grid/CPrism.hpp b/Common/include/geometry/primal_grid/CPrism.hpp index 08b2b05bebcf..efdbca08f6fd 100644 --- a/Common/include/geometry/primal_grid/CPrism.hpp +++ b/Common/include/geometry/primal_grid/CPrism.hpp @@ -3,14 +3,14 @@ * \brief Headers of the main subroutines for storing the primal grid structure. * The subroutines and functions are in the CPrism.cpp file. * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/geometry/primal_grid/CPyramid.hpp b/Common/include/geometry/primal_grid/CPyramid.hpp index 11184b5d0e0a..9481b0d951a0 100644 --- a/Common/include/geometry/primal_grid/CPyramid.hpp +++ b/Common/include/geometry/primal_grid/CPyramid.hpp @@ -3,14 +3,14 @@ * \brief Headers of the main subroutines for storing the primal grid structure. * The subroutines and functions are in the CPyramid.cpp file. * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/geometry/primal_grid/CQuadrilateral.hpp b/Common/include/geometry/primal_grid/CQuadrilateral.hpp index 50d0c253b4af..3671b3f4e81a 100644 --- a/Common/include/geometry/primal_grid/CQuadrilateral.hpp +++ b/Common/include/geometry/primal_grid/CQuadrilateral.hpp @@ -3,14 +3,14 @@ * \brief Headers of the main subroutines for storing the primal grid structure. * The subroutines and functions are in the CQuadrilateral.cpp file. * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/geometry/primal_grid/CTetrahedron.hpp b/Common/include/geometry/primal_grid/CTetrahedron.hpp index 833cd26bbc69..8f208d1e5170 100644 --- a/Common/include/geometry/primal_grid/CTetrahedron.hpp +++ b/Common/include/geometry/primal_grid/CTetrahedron.hpp @@ -3,14 +3,14 @@ * \brief Headers of the main subroutines for storing the primal grid structure. * The subroutines and functions are in the CTetrahedron.cpp file. * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/geometry/primal_grid/CTriangle.hpp b/Common/include/geometry/primal_grid/CTriangle.hpp index a64257646946..7531a66f197b 100644 --- a/Common/include/geometry/primal_grid/CTriangle.hpp +++ b/Common/include/geometry/primal_grid/CTriangle.hpp @@ -3,14 +3,14 @@ * \brief Headers of the main subroutines for storing the primal grid structure. * The subroutines and functions are in the CTriangle.cpp file. * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/geometry/primal_grid/CVertexMPI.hpp b/Common/include/geometry/primal_grid/CVertexMPI.hpp index 66b7dc2a2d51..d28dc39374ce 100644 --- a/Common/include/geometry/primal_grid/CVertexMPI.hpp +++ b/Common/include/geometry/primal_grid/CVertexMPI.hpp @@ -3,14 +3,14 @@ * \brief Headers of the main subroutines for storing the primal grid structure. * The subroutines and functions are in the primal_grid_structure.cpp file. * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/graph_coloring_structure.hpp b/Common/include/graph_coloring_structure.hpp index c42c5f99048b..a47ccce62628 100644 --- a/Common/include/graph_coloring_structure.hpp +++ b/Common/include/graph_coloring_structure.hpp @@ -4,14 +4,14 @@ * coloring of a given graph. The functions are in the * graph_coloring_structure.cpp file. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -41,7 +41,7 @@ using namespace std; * \ingroup Graph * \brief Class, which provides distributed graph coloring algorithms. * \author: E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CGraphColoringStructure { public: diff --git a/Common/include/grid_movement/CBSplineBlending.hpp b/Common/include/grid_movement/CBSplineBlending.hpp index fd8d9065a73b..0fdf126f6f34 100644 --- a/Common/include/grid_movement/CBSplineBlending.hpp +++ b/Common/include/grid_movement/CBSplineBlending.hpp @@ -3,14 +3,14 @@ * \brief Headers of the CBSplineBlending class. * Defines blending using uniform BSplines * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/grid_movement/CBezierBlending.hpp b/Common/include/grid_movement/CBezierBlending.hpp index 3f0e4be1cc73..5edb44126fb5 100644 --- a/Common/include/grid_movement/CBezierBlending.hpp +++ b/Common/include/grid_movement/CBezierBlending.hpp @@ -3,14 +3,14 @@ * \brief Headers of the CBezierBlending class. * Defines blending using Bernsteinpolynomials (Bezier Curves) * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/grid_movement/CFreeFormBlending.hpp b/Common/include/grid_movement/CFreeFormBlending.hpp index 6d9c6057cee0..ef69f421eed7 100644 --- a/Common/include/grid_movement/CFreeFormBlending.hpp +++ b/Common/include/grid_movement/CFreeFormBlending.hpp @@ -3,14 +3,14 @@ * \brief Headers of the CFreeFormBlending class. * It is the parent class for the FFD blending function * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/grid_movement/CFreeFormDefBox.hpp b/Common/include/grid_movement/CFreeFormDefBox.hpp index 42a4b3eddfc4..12c5d7f940b7 100644 --- a/Common/include/grid_movement/CFreeFormDefBox.hpp +++ b/Common/include/grid_movement/CFreeFormDefBox.hpp @@ -2,14 +2,14 @@ * \file CFreeFormDefBox.hpp * \brief Headers of the CFreeFormDefBox class. * \author F. Palacios & A. Galdran. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/grid_movement/CGridMovement.hpp b/Common/include/grid_movement/CGridMovement.hpp index f241c7216377..dad8aace1422 100644 --- a/Common/include/grid_movement/CGridMovement.hpp +++ b/Common/include/grid_movement/CGridMovement.hpp @@ -2,14 +2,14 @@ * \file CGridMovement.hpp * \brief Headers of the CGridMovement class * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/grid_movement/CSurfaceMovement.hpp b/Common/include/grid_movement/CSurfaceMovement.hpp index 9d5eacbba342..b39f9698f1d2 100644 --- a/Common/include/grid_movement/CSurfaceMovement.hpp +++ b/Common/include/grid_movement/CSurfaceMovement.hpp @@ -2,14 +2,14 @@ * \file CSurfaceMovement.hpp * \brief Headers of the CSurfaceMovement class. * \author F. Palacios, T. Economon. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/grid_movement/CVolumetricMovement.hpp b/Common/include/grid_movement/CVolumetricMovement.hpp index ce4a90f748f5..9bd9bb1085bb 100644 --- a/Common/include/grid_movement/CVolumetricMovement.hpp +++ b/Common/include/grid_movement/CVolumetricMovement.hpp @@ -2,14 +2,14 @@ * \file CVolumetricMovement.hpp * \brief Headers of the CVolumetricMovement class. * \author F. Palacios, A. Bueno, T. Economon, S. Padron. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/interface_interpolation/CInterpolator.hpp b/Common/include/interface_interpolation/CInterpolator.hpp index 354e5fdb17d8..933867c42f9f 100644 --- a/Common/include/interface_interpolation/CInterpolator.hpp +++ b/Common/include/interface_interpolation/CInterpolator.hpp @@ -2,14 +2,14 @@ * \file CInterpolator.hpp * \brief Base class for multiphysics interpolation. * \author H. Kline - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/interface_interpolation/CInterpolatorFactory.hpp b/Common/include/interface_interpolation/CInterpolatorFactory.hpp index 4419e00ffc81..170c5aa381bb 100644 --- a/Common/include/interface_interpolation/CInterpolatorFactory.hpp +++ b/Common/include/interface_interpolation/CInterpolatorFactory.hpp @@ -1,14 +1,14 @@ /*! * \file CInterpolatorFactory.hpp * \brief Factory to generate interpolator objects. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/interface_interpolation/CIsoparametric.hpp b/Common/include/interface_interpolation/CIsoparametric.hpp index fe4a19b1ebd9..b282d2d2a80e 100644 --- a/Common/include/interface_interpolation/CIsoparametric.hpp +++ b/Common/include/interface_interpolation/CIsoparametric.hpp @@ -2,14 +2,14 @@ * \file CIsoparametric.hpp * \brief Isoparametric interpolation using FE shape functions. * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/interface_interpolation/CMirror.hpp b/Common/include/interface_interpolation/CMirror.hpp index da545292ab7a..d34286035f24 100644 --- a/Common/include/interface_interpolation/CMirror.hpp +++ b/Common/include/interface_interpolation/CMirror.hpp @@ -2,14 +2,14 @@ * \file CMirror.hpp * \brief Mirror interpolation for the conservative (work-wise) approach in FSI problems. * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/interface_interpolation/CNearestNeighbor.hpp b/Common/include/interface_interpolation/CNearestNeighbor.hpp index 7744fdbf1041..83f51eb72945 100644 --- a/Common/include/interface_interpolation/CNearestNeighbor.hpp +++ b/Common/include/interface_interpolation/CNearestNeighbor.hpp @@ -2,14 +2,14 @@ * \file CNearestNeighbor.hpp * \brief Nearest Neighbor interpolation class. * \author H. Kline - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/interface_interpolation/CRadialBasisFunction.hpp b/Common/include/interface_interpolation/CRadialBasisFunction.hpp index 0ba29551e233..31a118c83d64 100644 --- a/Common/include/interface_interpolation/CRadialBasisFunction.hpp +++ b/Common/include/interface_interpolation/CRadialBasisFunction.hpp @@ -2,14 +2,14 @@ * \file CRadialBasisFunction.hpp * \brief Radial basis function interpolation. * \author Joel Ho, P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/interface_interpolation/CSlidingMesh.hpp b/Common/include/interface_interpolation/CSlidingMesh.hpp index 76aca29dfb18..1289c33f58bf 100644 --- a/Common/include/interface_interpolation/CSlidingMesh.hpp +++ b/Common/include/interface_interpolation/CSlidingMesh.hpp @@ -2,14 +2,14 @@ * \file CSlidingMesh.hpp * \brief Sliding mesh interpolation. * \author H. Kline - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/linear_algebra/CMatrixVectorProduct.hpp b/Common/include/linear_algebra/CMatrixVectorProduct.hpp index 3a2078edd03a..586e8abe410b 100644 --- a/Common/include/linear_algebra/CMatrixVectorProduct.hpp +++ b/Common/include/linear_algebra/CMatrixVectorProduct.hpp @@ -3,14 +3,14 @@ * \brief Headers for the classes related to sparse matrix-vector product wrappers. * The actual operations are currently implemented mostly by CSysMatrix. * \author F. Palacios, J. Hicken, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/linear_algebra/CPastixWrapper.hpp b/Common/include/linear_algebra/CPastixWrapper.hpp index d98e22d33205..83461b957a7b 100644 --- a/Common/include/linear_algebra/CPastixWrapper.hpp +++ b/Common/include/linear_algebra/CPastixWrapper.hpp @@ -3,14 +3,14 @@ * \brief An interface to the INRIA solver PaStiX * (http://pastix.gforge.inria.fr/files/README-txt.html) * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/linear_algebra/CPreconditioner.hpp b/Common/include/linear_algebra/CPreconditioner.hpp index c0f0255c0ab4..9310225179cc 100644 --- a/Common/include/linear_algebra/CPreconditioner.hpp +++ b/Common/include/linear_algebra/CPreconditioner.hpp @@ -3,14 +3,14 @@ * \brief Classes related to linear preconditioner wrappers. * The actual operations are currently implemented mostly by CSysMatrix. * \author F. Palacios, J. Hicken, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/linear_algebra/CSysMatrix.hpp b/Common/include/linear_algebra/CSysMatrix.hpp index 815d52e0708c..b026165e9e60 100644 --- a/Common/include/linear_algebra/CSysMatrix.hpp +++ b/Common/include/linear_algebra/CSysMatrix.hpp @@ -3,14 +3,14 @@ * \brief Declaration of the block-sparse matrix class. * The implemtation is in CSysMatrix.cpp. * \author F. Palacios, A. Bueno, T. Economon, P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -805,10 +805,10 @@ class CSysMatrix { void EnforceSolutionAtNode(unsigned long node_i, const OtherType* x_i, CSysVector& b); /*! - * \brief Version of EnforceSolutionAtNode for a single degree of freedom. + * \brief Similar to EnforceSolutionAtNode, but for 0 projection in a given direction. */ template - void EnforceSolutionAtDOF(unsigned long node_i, unsigned long iVar, OtherType x_i, CSysVector& b); + void EnforceZeroProjection(unsigned long node_i, const OtherType* n, CSysVector& b); /*! * \brief Sets the diagonal entries of the matrix as the sum of the blocks in the corresponding column. diff --git a/Common/include/linear_algebra/CSysMatrix.inl b/Common/include/linear_algebra/CSysMatrix.inl index 1247d5ba51e8..34c5d134f3a6 100644 --- a/Common/include/linear_algebra/CSysMatrix.inl +++ b/Common/include/linear_algebra/CSysMatrix.inl @@ -5,14 +5,14 @@ * of the .cpp file and so they are hidden to avoid triggering * recompilation of other units when changes are made here. * \author F. Palacios, A. Bueno, T. Economon, P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/linear_algebra/CSysSolve.hpp b/Common/include/linear_algebra/CSysSolve.hpp index 2fa23b363176..2715e81754a4 100644 --- a/Common/include/linear_algebra/CSysSolve.hpp +++ b/Common/include/linear_algebra/CSysSolve.hpp @@ -3,14 +3,14 @@ * \brief Headers for the classes related to linear solvers (CG, FGMRES, etc) * The subroutines and functions are in the CSysSolve.cpp file. * \author J. Hicken, F. Palacios, T. Economon, P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/linear_algebra/CSysSolve_b.hpp b/Common/include/linear_algebra/CSysSolve_b.hpp index 2986eace8d00..be9eef6d270e 100644 --- a/Common/include/linear_algebra/CSysSolve_b.hpp +++ b/Common/include/linear_algebra/CSysSolve_b.hpp @@ -2,14 +2,14 @@ * \file CSysSolve_b.hpp * \brief Routines for the linear solver used in the reverse sweep of AD. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/linear_algebra/CSysVector.hpp b/Common/include/linear_algebra/CSysVector.hpp index 42b249b11ca5..7b0248b28b6b 100644 --- a/Common/include/linear_algebra/CSysVector.hpp +++ b/Common/include/linear_algebra/CSysVector.hpp @@ -3,14 +3,14 @@ * \brief Declararion and inlines of the vector class used in the * solution of large, distributed, sparse linear systems. * \author P. Gomes, F. Palacios, J. Hicken, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/linear_algebra/blas_structure.hpp b/Common/include/linear_algebra/blas_structure.hpp index cf4ec42ef2ae..69fbd1501fa7 100644 --- a/Common/include/linear_algebra/blas_structure.hpp +++ b/Common/include/linear_algebra/blas_structure.hpp @@ -4,14 +4,14 @@ operations, which are typically found in the BLAS libraries. The functions are in the blass_structure.cpp file. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -29,11 +29,6 @@ #pragma once -/* LIBXSMM include files, if supported. */ -#ifdef HAVE_LIBXSMM -#include "libxsmm.h" -#endif - class CConfig; /*! @@ -41,7 +36,7 @@ class CConfig; * \ingroup BLAS * \brief Class, which serves as an interface to the BLAS functionalities needed. * \author: E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CBlasStructure { public: @@ -494,8 +489,7 @@ class CBlasStructure { } private: -#if !(defined(HAVE_LIBXSMM) || defined(HAVE_BLAS) || defined(HAVE_MKL)) || \ - (defined(CODI_REVERSE_TYPE) || defined(CODI_FORWARD_TYPE)) +#if !(defined(HAVE_BLAS) || defined(HAVE_MKL)) || (defined(CODI_REVERSE_TYPE) || defined(CODI_FORWARD_TYPE)) /* Blocking parameters for the outer kernel. We multiply mc x kc blocks of the matrix A with kc x nc panels of the matrix B (this approach is referred to as `gebp` in the literature). */ diff --git a/Common/include/linear_algebra/vector_expressions.hpp b/Common/include/linear_algebra/vector_expressions.hpp index cfa06f652964..3c4fa4bd4207 100644 --- a/Common/include/linear_algebra/vector_expressions.hpp +++ b/Common/include/linear_algebra/vector_expressions.hpp @@ -2,14 +2,14 @@ * \file vector_expressions.hpp * \brief Expression templates for vector types with coefficient-wise operations. * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/option_structure.hpp b/Common/include/option_structure.hpp index ddf570ab6978..223a53da742b 100644 --- a/Common/include/option_structure.hpp +++ b/Common/include/option_structure.hpp @@ -2,14 +2,14 @@ * \file option_structure.hpp * \brief Defines classes for referencing options for easy input in CConfig * \author J. Hicken, B. Tracey - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -1324,6 +1325,20 @@ inline LM_ParsedOptions ParseLMOptions(const LM_OPTIONS *LM_Options, unsigned sh return LMParsedOptions; } +/*! + * \brief Structure containing parsed options for data-driven fluid model. + */ +struct DataDrivenFluid_ParsedOptions { + su2double rho_init_custom = -1; /*!< \brief Optional initial guess for density in inverse look-up operations. */ + su2double e_init_custom = -1; /*!< \brief Optional initial guess for static energy in inverse look-up operations.*/ + su2double Newton_relaxation = 1.0; /*!< \brief Relaxation factor for Newton solvers in data-driven fluid models. */ + bool use_PINN = false; /*!< \brief Use physics-informed method for data-driven fluid modeling. */ + ENUM_DATADRIVEN_METHOD interp_algorithm_type = ENUM_DATADRIVEN_METHOD::MLP; /*!< \brief Interpolation algorithm used for data-driven fluid model. */ + unsigned short n_filenames = 1; /*!< \brief Number of datasets. */ + std::string *datadriven_filenames; /*!< \brief Dataset information for data-driven fluid models. */ +}; + + /*! * \brief types of species transport models */ @@ -1391,6 +1406,34 @@ static const MapType Flamelet_Init_Map = { MakePair("SPARK", FLAMELET_INIT_TYPE::SPARK) }; +/*! + * \brief Structure containing parsed options for flamelet fluid model. + */ +struct FluidFlamelet_ParsedOptions { + ///TODO: Add python wrapper initialization option + FLAMELET_INIT_TYPE ignition_method = FLAMELET_INIT_TYPE::NONE; /*!< \brief Method for solution ignition for flamelet problems. */ + unsigned short n_scalars = 0; /*!< \brief Number of transported scalars for flamelet LUT approach. */ + unsigned short n_lookups = 0; /*!< \brief Number of lookup variables, for visualization only. */ + unsigned short n_table_sources = 0; /*!< \brief Number of transported scalar source terms for LUT. */ + unsigned short n_user_scalars = 0; /*!< \brief Number of user defined (auxiliary) scalar transport equations. */ + unsigned short n_user_sources = 0; /*!< \brief Number of source terms for user defined (auxiliary) scalar transport equations. */ + unsigned short n_control_vars = 0; /*!< \brief Number of controlling variables (independent variables) for the LUT. */ + + std::string *controlling_variable_names; /*!< \brief Names of the independent, transported scalars. */ + std::string* cv_source_names; /*!< \brief Names of the source terms of the independent, transported scalars. */ + std::string* lookup_names; /*!< \brief Names of the passive look-up terms. */ + std::string* user_scalar_names; /*!< \brief Names of the passive transported scalars. */ + std::string* user_source_names; /*!< \brief Names of the source terms of the passive transported scalars. */ + + std::array flame_init{{0,0,0, /* flame offset (x,y,z) */ + 1,0,0, /* flame normal (nx, ny, nz) */ + 5e-3,1}}; /*!< \brief Flame front initialization parameters. */ + std::array spark_init{{0,0,0,0,0,0}}; /*!< \brief Spark ignition initialization parameters. */ + su2double* spark_reaction_rates; /*!< \brief Source terms for flamelet spark ignition option. */ + unsigned short nspark; /*!< \brief Number of source terms for spark initialization. */ + bool preferential_diffusion = false; /*!< \brief Preferential diffusion physics for flamelet solver.*/ +}; + /*! * \brief Types of subgrid scale models */ @@ -1886,6 +1929,20 @@ enum TURBO_MARKER_TYPE{ OUTFLOW = 2 /*!< \brief flag for outflow marker for compute turboperformance. */ }; +enum class RAMP_TYPE{ + GRID, /*!< \brief flag for rotational/translational ramps */ + BOUNDARY /*!< \brief flag for pressure/mass flow ramps*/ +}; + +/*! + * \brief Coefficients of the ramp specified in the config, ordered by index in the config + */ +enum RAMP_COEFF{ + INITIAL_VALUE = 0, /*!< \brief intial value of the ramp */ + UPDATE_FREQ = 1, /*mpi_structure.cpp file. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/parallelization/omp_structure.cpp b/Common/include/parallelization/omp_structure.cpp index 3cb3ceef67b1..19bfec87a9c7 100644 --- a/Common/include/parallelization/omp_structure.cpp +++ b/Common/include/parallelization/omp_structure.cpp @@ -3,14 +3,14 @@ * \brief Source file counterpart for omp_structure.hpp. * \note Contains OpDiLib initialization, finalization and includes the OpDiLib source file. * \author J. Blühdorn - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/parallelization/omp_structure.hpp b/Common/include/parallelization/omp_structure.hpp index 13baa854d74c..a98826de0a37 100644 --- a/Common/include/parallelization/omp_structure.hpp +++ b/Common/include/parallelization/omp_structure.hpp @@ -13,14 +13,14 @@ * defined here with suitable fallback versions to limit the spread of * compiler tricks in other areas of the code. * \author P. Gomes, J. Blühdorn - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/parallelization/special_vectorization.hpp b/Common/include/parallelization/special_vectorization.hpp index d0a99e68eb9a..c8a67dcf7182 100644 --- a/Common/include/parallelization/special_vectorization.hpp +++ b/Common/include/parallelization/special_vectorization.hpp @@ -2,14 +2,14 @@ * \file special_vectorization.hpp * \brief Code generator header to create specializations of simd::Array. * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/parallelization/vectorization.hpp b/Common/include/parallelization/vectorization.hpp index 50316359fc84..f08017a9bee9 100644 --- a/Common/include/parallelization/vectorization.hpp +++ b/Common/include/parallelization/vectorization.hpp @@ -2,14 +2,14 @@ * \file vectorization.hpp * \brief Implementation of a portable SIMD type. * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/toolboxes/C1DInterpolation.hpp b/Common/include/toolboxes/C1DInterpolation.hpp index d00915043cf4..8c6c71d3be4a 100644 --- a/Common/include/toolboxes/C1DInterpolation.hpp +++ b/Common/include/toolboxes/C1DInterpolation.hpp @@ -2,14 +2,14 @@ * \file C1DInterpolation.hpp * \brief Classes for 1D interpolation. * \author Aman Baig, P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/toolboxes/CLinearPartitioner.hpp b/Common/include/toolboxes/CLinearPartitioner.hpp index 54380012f62d..bd48ede66b31 100644 --- a/Common/include/toolboxes/CLinearPartitioner.hpp +++ b/Common/include/toolboxes/CLinearPartitioner.hpp @@ -3,14 +3,14 @@ * \brief Header file for the class CLinearPartitioner. * The implementations are in the CLinearPartitioner.cpp file. * \author T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/toolboxes/CQuasiNewtonInvLeastSquares.hpp b/Common/include/toolboxes/CQuasiNewtonInvLeastSquares.hpp index 8e76fc611b11..24becf2ce0bc 100644 --- a/Common/include/toolboxes/CQuasiNewtonInvLeastSquares.hpp +++ b/Common/include/toolboxes/CQuasiNewtonInvLeastSquares.hpp @@ -7,14 +7,14 @@ * \note Based on the IQN-ILS method, see DOI 10.1007/s11831-013-9085-5 and * references therein. * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/toolboxes/CSquareMatrixCM.hpp b/Common/include/toolboxes/CSquareMatrixCM.hpp index c162fa78e776..b0836f17341f 100644 --- a/Common/include/toolboxes/CSquareMatrixCM.hpp +++ b/Common/include/toolboxes/CSquareMatrixCM.hpp @@ -3,14 +3,14 @@ * \brief Dense general square matrix, used for example in DG standard elements * in Column Major order storage. * \author Edwin van der Weide, Pedro Gomes. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/toolboxes/CSymmetricMatrix.hpp b/Common/include/toolboxes/CSymmetricMatrix.hpp index cc361c8128cd..1abc03e17682 100644 --- a/Common/include/toolboxes/CSymmetricMatrix.hpp +++ b/Common/include/toolboxes/CSymmetricMatrix.hpp @@ -2,14 +2,14 @@ * \file CSymmetricMatrix.hpp * \brief Dense symmetric matrix, used for example in RBF interpolation. * \author Joel Ho, P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/toolboxes/MMS/CIncTGVSolution.hpp b/Common/include/toolboxes/MMS/CIncTGVSolution.hpp index f5fc18476bcc..f20118a30551 100644 --- a/Common/include/toolboxes/MMS/CIncTGVSolution.hpp +++ b/Common/include/toolboxes/MMS/CIncTGVSolution.hpp @@ -3,14 +3,14 @@ * \brief Header file for the class CIncTGVSolution. * The implementations are in the CIncTGVSolution.cpp file. * \author T. Economon, E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/toolboxes/MMS/CInviscidVortexSolution.hpp b/Common/include/toolboxes/MMS/CInviscidVortexSolution.hpp index 903da8081f23..ed11d80ff689 100644 --- a/Common/include/toolboxes/MMS/CInviscidVortexSolution.hpp +++ b/Common/include/toolboxes/MMS/CInviscidVortexSolution.hpp @@ -3,14 +3,14 @@ * \brief Header file for the class CInviscidVortexSolution. * The implementations are in the CInviscidVortexSolution.cpp file. * \author T. Economon, E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/toolboxes/MMS/CMMSIncEulerSolution.hpp b/Common/include/toolboxes/MMS/CMMSIncEulerSolution.hpp index 6a524cf139bc..4ab2abf87533 100644 --- a/Common/include/toolboxes/MMS/CMMSIncEulerSolution.hpp +++ b/Common/include/toolboxes/MMS/CMMSIncEulerSolution.hpp @@ -3,14 +3,14 @@ * \brief Header file for the class CMMSIncEulerSolution. * The implementations are in the CMMSIncEulerSolution.cpp file. * \author T. Economon, E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/toolboxes/MMS/CMMSIncNSSolution.hpp b/Common/include/toolboxes/MMS/CMMSIncNSSolution.hpp index 243e853e9a9c..ded358cd01e6 100644 --- a/Common/include/toolboxes/MMS/CMMSIncNSSolution.hpp +++ b/Common/include/toolboxes/MMS/CMMSIncNSSolution.hpp @@ -3,14 +3,14 @@ * \brief Header file for the class CMMSIncNSSolution. * The implementations are in the CMMSIncNSSolution.cpp file. * \author T. Economon, E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/toolboxes/MMS/CMMSNSTwoHalfCirclesSolution.hpp b/Common/include/toolboxes/MMS/CMMSNSTwoHalfCirclesSolution.hpp index 8fb3cd1db8e7..a1db8b1087d2 100644 --- a/Common/include/toolboxes/MMS/CMMSNSTwoHalfCirclesSolution.hpp +++ b/Common/include/toolboxes/MMS/CMMSNSTwoHalfCirclesSolution.hpp @@ -3,14 +3,14 @@ * \brief Header file for the class CMMSNSTwoHalfCirclesSolution. * The implementations are in the CMMSNSTwoHalfCirclesSolution.cpp file. * \author T. Economon, E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/toolboxes/MMS/CMMSNSTwoHalfSpheresSolution.hpp b/Common/include/toolboxes/MMS/CMMSNSTwoHalfSpheresSolution.hpp index 296e9206a140..da6d9cf4f60d 100644 --- a/Common/include/toolboxes/MMS/CMMSNSTwoHalfSpheresSolution.hpp +++ b/Common/include/toolboxes/MMS/CMMSNSTwoHalfSpheresSolution.hpp @@ -3,14 +3,14 @@ * \brief Header file for the class CMMSNSTwoHalfSpheresSolution. * The implementations are in the CMMSNSTwoHalfSpheresSolution.cpp file. * \author T. Economon, E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/toolboxes/MMS/CMMSNSUnitQuadSolution.hpp b/Common/include/toolboxes/MMS/CMMSNSUnitQuadSolution.hpp index d563aaf3376d..e2ac7eb7b3e7 100644 --- a/Common/include/toolboxes/MMS/CMMSNSUnitQuadSolution.hpp +++ b/Common/include/toolboxes/MMS/CMMSNSUnitQuadSolution.hpp @@ -3,14 +3,14 @@ * \brief Header file for the class CMMSNSUnitQuadSolution. * The implementations are in the CMMSNSUnitQuadSolution.cpp file. * \author T. Economon, E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/toolboxes/MMS/CMMSNSUnitQuadSolutionWallBC.hpp b/Common/include/toolboxes/MMS/CMMSNSUnitQuadSolutionWallBC.hpp index 51ecfca646a1..a18066a0c571 100644 --- a/Common/include/toolboxes/MMS/CMMSNSUnitQuadSolutionWallBC.hpp +++ b/Common/include/toolboxes/MMS/CMMSNSUnitQuadSolutionWallBC.hpp @@ -3,14 +3,14 @@ * \brief Header file for the class CMMSNSUnitQuadSolutionWallBC. * The implementations are in the CMMSNSUnitQuadSolutionWallBC.cpp file. * \author T. Economon, E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/toolboxes/MMS/CNSUnitQuadSolution.hpp b/Common/include/toolboxes/MMS/CNSUnitQuadSolution.hpp index c70f9c22574c..5c4f473e35e2 100644 --- a/Common/include/toolboxes/MMS/CNSUnitQuadSolution.hpp +++ b/Common/include/toolboxes/MMS/CNSUnitQuadSolution.hpp @@ -3,14 +3,14 @@ * \brief Header file for the class CNSUnitQuadSolution.hpp. * The implementations are in the CNSUnitQuadSolution.cpp file. * \author T. Economon, E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/toolboxes/MMS/CRinglebSolution.hpp b/Common/include/toolboxes/MMS/CRinglebSolution.hpp index 0a1ba2627fee..d8e59a1ef146 100644 --- a/Common/include/toolboxes/MMS/CRinglebSolution.hpp +++ b/Common/include/toolboxes/MMS/CRinglebSolution.hpp @@ -3,14 +3,14 @@ * \brief Header file for the class CRinglebSolution.hpp. * The implementations are in the CRinglebSolution.cpp file. * \author T. Economon, E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/toolboxes/MMS/CTGVSolution.hpp b/Common/include/toolboxes/MMS/CTGVSolution.hpp index 2e7961318a01..0c18d8b13526 100644 --- a/Common/include/toolboxes/MMS/CTGVSolution.hpp +++ b/Common/include/toolboxes/MMS/CTGVSolution.hpp @@ -3,14 +3,14 @@ * \brief Header file for the class CTGVSolution. * The implementations are in the CTGVSolution.cpp file. * \author T. Economon, E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/toolboxes/MMS/CUserDefinedSolution.hpp b/Common/include/toolboxes/MMS/CUserDefinedSolution.hpp index c4efb5c4324c..48550d89009b 100644 --- a/Common/include/toolboxes/MMS/CUserDefinedSolution.hpp +++ b/Common/include/toolboxes/MMS/CUserDefinedSolution.hpp @@ -3,14 +3,14 @@ * \brief Header file for the class CUserDefinedSolution. * The implementations are in the CUserDefinedSolution.cpp file. * \author T. Economon, E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/toolboxes/MMS/CVerificationSolution.hpp b/Common/include/toolboxes/MMS/CVerificationSolution.hpp index 0e70f3e276f8..054f82e2fcca 100644 --- a/Common/include/toolboxes/MMS/CVerificationSolution.hpp +++ b/Common/include/toolboxes/MMS/CVerificationSolution.hpp @@ -3,14 +3,14 @@ * \brief Header file for the base class CVerificationSolution. * The implementations are in the CVerificationSolution.cpp file. * \author T. Economon, E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/toolboxes/allocation_toolbox.hpp b/Common/include/toolboxes/allocation_toolbox.hpp index b34769501791..9caafbe151ec 100644 --- a/Common/include/toolboxes/allocation_toolbox.hpp +++ b/Common/include/toolboxes/allocation_toolbox.hpp @@ -5,14 +5,14 @@ * \note These are "kernel" functions, only to be used with good reason, * always try to use higher level container classes. * \author P. Gomes, D. Kavolis - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/toolboxes/classes_multiple_integers.hpp b/Common/include/toolboxes/classes_multiple_integers.hpp new file mode 100644 index 000000000000..e29d1ae6a277 --- /dev/null +++ b/Common/include/toolboxes/classes_multiple_integers.hpp @@ -0,0 +1,97 @@ +/*! + * \file classes_multiple_integers.hpp + * \brief Header file for the classes that consists of multiple integer types. + * \author E. van der Weide + * \version 8.2.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2025, 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 + +/*! + * \struct CUnsignedLong2T + * \brief Helper struct used to store two integral types as one entity. + */ +struct CUnsignedLong2T { + unsigned long long0; /*!< \brief First integer to store in this class. */ + unsigned long long1; /*!< \brief Second integer to store in this class. */ + + CUnsignedLong2T(unsigned long a = 0, unsigned long b = 0) : long0(a), long1(b) {} + + inline bool operator<(const CUnsignedLong2T& other) const { + if (long0 != other.long0) return (long0 < other.long0); + return (long1 < other.long1); + } + + inline bool operator==(const CUnsignedLong2T& other) const { + return (long0 == other.long0) && (long1 == other.long1); + } +}; + +/*! + * \struct CUnsignedShort2T + * \brief Help struct used to store two integral types as one entity. + */ +struct CUnsignedShort2T { + unsigned short short0; /*!< \brief First integer to store in this class. */ + unsigned short short1; /*!< \brief Second integer to store in this class. */ + + CUnsignedShort2T(unsigned short a = 0, unsigned short b = 0) : short0(a), short1(b) {} + + inline bool operator<(const CUnsignedShort2T& other) const { + if (short0 != other.short0) return (short0 < other.short0); + return (short1 < other.short1); + } + + inline bool operator==(const CUnsignedShort2T& other) const { + return (short0 == other.short0) && (short1 == other.short1); + } +}; + +/*! + * \class CLong3T + * \brief Help class used to store three longs as one entity. + * \version 8.2.0 "Harrier" + */ +struct CLong3T { + long long0 = 0; /*!< \brief First long to store in this class. */ + long long1 = 0; /*!< \brief Second long to store in this class. */ + long long2 = 0; /*!< \brief Third long to store in this class. */ + + CLong3T() = default; + + CLong3T(const long a, const long b, const long c) { + long0 = a; + long1 = b; + long2 = c; + } + + bool operator<(const CLong3T& other) const { + if (long0 != other.long0) return (long0 < other.long0); + if (long1 != other.long1) return (long1 < other.long1); + if (long2 != other.long2) return (long2 < other.long2); + + return false; + } +}; diff --git a/Common/include/fem/geometry_structure_fem_part.hpp b/Common/include/toolboxes/fem/CFaceOfElement.hpp similarity index 51% rename from Common/include/fem/geometry_structure_fem_part.hpp rename to Common/include/toolboxes/fem/CFaceOfElement.hpp index 4cf2ab12d1f2..47f39d5f3423 100644 --- a/Common/include/fem/geometry_structure_fem_part.hpp +++ b/Common/include/toolboxes/fem/CFaceOfElement.hpp @@ -1,15 +1,16 @@ /*! - * \file geometry_structure_fem_part.hpp - * \brief Helper classes for the Fluid FEM solver. + * \file CFaceOfElement.hpp + * \brief Header file for the class CFaceOfElement. + * The implementations are in the CFaceOfElement.cpp file. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -27,50 +28,11 @@ #pragma once -#include "../basic_types/datatype_structure.hpp" - -#include +#include "../../code_config.hpp" +#include "../../option_structure.hpp" +#include #include - -/*! - * \struct CUnsignedLong2T - * \brief Helper struct used to store two integral types as one entity. - */ -struct CUnsignedLong2T { - unsigned long long0; /*!< \brief First integer to store in this class. */ - unsigned long long1; /*!< \brief Second integer to store in this class. */ - - CUnsignedLong2T(unsigned long a = 0, unsigned long b = 0) : long0(a), long1(b) {} - - inline bool operator<(const CUnsignedLong2T& other) const { - if (long0 != other.long0) return (long0 < other.long0); - return (long1 < other.long1); - } - - inline bool operator==(const CUnsignedLong2T& other) const { - return (long0 == other.long0) && (long1 == other.long1); - } -}; - -/*! - * \struct CUnsignedShort2T - * \brief Help struct used to store two integral types as one entity. - */ -struct CUnsignedShort2T { - unsigned short short0; /*!< \brief First integer to store in this class. */ - unsigned short short1; /*!< \brief Second integer to store in this class. */ - - CUnsignedShort2T(unsigned short a = 0, unsigned short b = 0) : short0(a), short1(b) {} - - inline bool operator<(const CUnsignedShort2T& other) const { - if (short0 != other.short0) return (short0 < other.short0); - return (short1 < other.short1); - } - - inline bool operator==(const CUnsignedShort2T& other) const { - return (short0 == other.short0) && (short1 == other.short1); - } -}; +#include /*! * \class CFaceOfElement @@ -104,9 +66,8 @@ class CFaceOfElement { bool elem0IsOwner; /*!< \brief Whether or not the neighboring element 0 is the owner of the face. If false, element 1 is the owner. */ - /* Standard constructor and destructor. */ + /* Constructor. Initialize the member variables. */ CFaceOfElement(); - ~CFaceOfElement() {} /* Alternative constructor to set the corner points. */ CFaceOfElement(const unsigned short VTK_Type, const unsigned short nPoly, const unsigned long* Nodes); @@ -127,84 +88,13 @@ class CFaceOfElement { /*--- Member function, which creates a unique numbering for the corner points. A sort in increasing order is OK for this purpose. ---*/ - inline void CreateUniqueNumbering(void) { std::sort(cornerPoints, cornerPoints + nCornerPoints); } + inline void CreateUniqueNumbering() { std::sort(cornerPoints, cornerPoints + nCornerPoints); } /*--- Member function, which creates a unique numbering for the corner points while the orientation is taken into account. ---*/ - void CreateUniqueNumberingWithOrientation(void); + void CreateUniqueNumberingWithOrientation(); private: /*--- Copy function, which copies the data of the given object into the current object. ---*/ void Copy(const CFaceOfElement& other); }; - -/*! - * \class CBoundaryFace - * \brief Help class used in the partitioning of the FEM grid. - It stores a boundary element. - */ -class CBoundaryFace { - public: - unsigned short VTK_Type, nPolyGrid, nDOFsGrid; - unsigned long globalBoundElemID, domainElementID; - std::vector Nodes; - - /* Standard constructor and destructor. Nothing to be done. */ - CBoundaryFace() {} - ~CBoundaryFace() {} - - /* Copy constructor and assignment operator. */ - inline CBoundaryFace(const CBoundaryFace& other) { Copy(other); } - - inline CBoundaryFace& operator=(const CBoundaryFace& other) { - Copy(other); - return (*this); - } - - /* Less than operator. Needed for the sorting. */ - inline bool operator<(const CBoundaryFace& other) const { return (globalBoundElemID < other.globalBoundElemID); } - - private: - /*--- Copy function, which copies the data of the given object into the current object. ---*/ - void Copy(const CBoundaryFace& other); -}; - -/*! - * \class CMatchingFace - * \brief Help class used to determine whether or not (periodic) faces match. - */ -class CMatchingFace { - public: - unsigned short nCornerPoints; /*!< \brief Number of corner points of the face. */ - unsigned short nDim; /*!< \brief Number of spatial dimensions. */ - unsigned short nPoly; /*!< \brief Polynomial degree of the face. */ - unsigned short nDOFsElem; /*!< \brief Number of DOFs of the relevant adjacent element. */ - unsigned short elemType; /*!< \brief Type of the adjacent element. */ - unsigned long elemID; /*!< \brief The relevant adjacent element ID. */ - su2double cornerCoor[4][3]; /*!< \brief Coordinates of the corner points of the face. */ - su2double tolForMatching; /*!< \brief Tolerance for this face for matching points. */ - - /* Standard constructor. */ - CMatchingFace(); - - /* Destructor, nothing to be done. */ - ~CMatchingFace() {} - - /* Copy constructor and assignment operator. */ - inline CMatchingFace(const CMatchingFace& other) { Copy(other); } - - inline CMatchingFace& operator=(const CMatchingFace& other) { - Copy(other); - return (*this); - } - - /* Less than operator. Needed for the sorting and searching. */ - bool operator<(const CMatchingFace& other) const; - - /*--- Member function, which sorts the coordinates of the face. ---*/ - void SortFaceCoordinates(void); - - private: - /*--- Copy function, which copies the data of the given object into the current object. ---*/ - void Copy(const CMatchingFace& other); -}; diff --git a/Common/include/toolboxes/fem/CMatchingFace.hpp b/Common/include/toolboxes/fem/CMatchingFace.hpp new file mode 100644 index 000000000000..a91cd5356a50 --- /dev/null +++ b/Common/include/toolboxes/fem/CMatchingFace.hpp @@ -0,0 +1,73 @@ +/*! + * \file CMatchingFace.hpp + * \brief Header file for the class CMatchingFace. + * The implementations are in the CMatchingFace.cpp file. + * \author E. van der Weide + * \version 8.2.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2025, 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 "../../code_config.hpp" +#include +#include +#include + +using namespace std; + +/*! + * \class CMatchingFace + * \brief Help class used to determine whether or not (periodic) faces match. + */ +class CMatchingFace { + public: + unsigned short nCornerPoints; /*!< \brief Number of corner points of the face. */ + unsigned short nDim; /*!< \brief Number of spatial dimensions. */ + unsigned short nPoly; /*!< \brief Polynomial degree of the face. */ + unsigned short nDOFsElem; /*!< \brief Number of DOFs of the relevant adjacent element. */ + unsigned short elemType; /*!< \brief Type of the adjacent element. */ + unsigned long elemID; /*!< \brief The relevant adjacent element ID. */ + su2double cornerCoor[4][3]; /*!< \brief Coordinates of the corner points of the face. */ + su2double tolForMatching; /*!< \brief Tolerance for this face for matching points. */ + + /* Constructor. Initialize the member variables to zero. */ + CMatchingFace(); + + /* Copy constructor and assignment operator. */ + inline CMatchingFace(const CMatchingFace& other) { Copy(other); } + + inline CMatchingFace& operator=(const CMatchingFace& other) { + Copy(other); + return (*this); + } + + /* Less than operator. Needed for the sorting and searching. */ + bool operator<(const CMatchingFace& other) const; + + /*--- Member function, which sorts the coordinates of the face. ---*/ + void SortFaceCoordinates(); + + private: + /*--- Copy function, which copies the data of the given object into the current object. ---*/ + void Copy(const CMatchingFace& other); +}; diff --git a/Common/include/toolboxes/fem/CReorderElements.hpp b/Common/include/toolboxes/fem/CReorderElements.hpp new file mode 100644 index 000000000000..df0f2d3086bd --- /dev/null +++ b/Common/include/toolboxes/fem/CReorderElements.hpp @@ -0,0 +1,100 @@ +/*! + * \file CReorderElements.hpp + * \brief Header file for the class CReorderElements. + * The implementations are in the CReorderElements.cpp file. + * \author E. van der Weide + * \version 8.2.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2025, 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 + +using namespace std; + +/*! + * \class CReorderElements + * \brief Class, used to reorder the owned elements after the partitioning. + * \author E. van der Weide + * \version 8.2.0 "Harrier" + */ +class CReorderElements { + private: + unsigned long globalElemID; /*!< \brief Global element ID of the element. */ + unsigned short timeLevel; /*!< \brief Time level of the element. Only relevant + for time accurate local time stepping. */ + bool commSolution; /*!< \brief Whether or not the solution must be + communicated to other ranks. */ + unsigned short elemType; /*!< \brief Short hand for the element type, Which + stored info of the VTK_Type, polynomial + degree of the solution and whether or + not the Jacobian is constant. */ + public: + /*! + * \brief Constructor of the class, set the member variables to the arguments. + */ + CReorderElements(const unsigned long val_GlobalElemID, const unsigned short val_TimeLevel, + const bool val_CommSolution, const unsigned short val_VTK_Type, const unsigned short val_nPolySol, + const bool val_JacConstant); + + /*! + * \brief Default constructor of the class. Disabled. + */ + CReorderElements() = delete; + + /*! + * \brief Less than operator of the class. Needed for the sorting. + */ + bool operator<(const CReorderElements& other) const; + + /*! + * \brief Function to make available the variable commSolution. + * \return Whether or not the solution of the element must be communicated. + */ + inline bool GetCommSolution() const { return commSolution; } + + /*! + * \brief Function to make available the element type of the element. + * \return The value of elemType, which stores the VTK type, polynomial degree + and whether or not the Jacobian is constant. + */ + inline unsigned short GetElemType() const { return elemType; } + + /*! + * \brief Function to make available the global element ID. + * \return The global element ID of the element. + */ + inline unsigned long GetGlobalElemID() const { return globalElemID; } + + /*! + * \brief Function to make available the time level. + * \return The time level of the element. + */ + inline unsigned short GetTimeLevel() const { return timeLevel; } + + /*! + * \brief Function, which sets the value of commSolution. + * \param[in] val_CommSolution - value to which commSolution must be set. + */ + inline void SetCommSolution(const bool val_CommSolution) { commSolution = val_CommSolution; } +}; diff --git a/Common/include/toolboxes/fem/CSortFaces.hpp b/Common/include/toolboxes/fem/CSortFaces.hpp new file mode 100644 index 000000000000..d1b6ecd53fad --- /dev/null +++ b/Common/include/toolboxes/fem/CSortFaces.hpp @@ -0,0 +1,71 @@ +/*! + * \file CSortFaces.hpp + * \brief Header file for the class CSortFaces. + * The implementations are in the CSortFaces.cpp file. + * \author E. van der Weide + * \version 8.2.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2025, 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 "CFaceOfElement.hpp" + +using namespace std; + +/*! + * \class CSortFaces + * \brief Functor, used for a different sorting of the faces than the < operator + * of CFaceOfElement. + * \author E. van der Weide + * \version 8.2.0 "Harrier" + */ +class CVolumeElementFEM; // Forward declaration to avoid problems. +class CSortFaces { + private: + unsigned long nVolElemOwned; /*!< \brief Number of locally owned volume elements. */ + unsigned long nVolElemTot; /*!< \brief Total number of local volume elements . */ + + const CVolumeElementFEM* volElem; /*!< \brief The locally stored volume elements. */ + + public: + /*! + * \brief Constructor of the class. Set the values of the member variables. + */ + CSortFaces(unsigned long val_nVolElemOwned, unsigned long val_nVolElemTot, const CVolumeElementFEM* val_volElem) { + nVolElemOwned = val_nVolElemOwned; + nVolElemTot = val_nVolElemTot; + volElem = val_volElem; + } + + /*! + * \brief Default constructor of the class. Disabled. + */ + CSortFaces() = delete; + + /*! + * \brief Operator used for the comparison. + * \param[in] f0 - First face in the comparison. + * \param[in] f1 - Second face in the comparison. + */ + bool operator()(const CFaceOfElement& f0, const CFaceOfElement& f1); +}; diff --git a/Common/include/toolboxes/geometry_toolbox.hpp b/Common/include/toolboxes/geometry_toolbox.hpp index 773f1d553dc2..57894ad21a0c 100644 --- a/Common/include/toolboxes/geometry_toolbox.hpp +++ b/Common/include/toolboxes/geometry_toolbox.hpp @@ -1,14 +1,14 @@ /*! * \file geometry_toolbox.hpp * \brief Collection of common lightweight geometry-oriented methods. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -79,6 +79,14 @@ inline T Norm(Int nDim, const T* a) { return sqrt(SquaredNorm(nDim, a)); } +/*! \brief dn = max(abs(n.(a-b)), 0.05 * ||a-b|| */ +template +inline T NormalDistance(Int nDim, const T* n, const T* a, const T* b) { + T d[3] = {0}; + Distance(nDim, a, b, d); + return fmax(fabs(DotProduct(nDim, n, d)), 0.05 * Norm(nDim, d)); +} + /*! \brief c = a x b */ template inline void CrossProduct(const T* a, const T* b, T* c) { diff --git a/Common/include/toolboxes/graph_toolbox.hpp b/Common/include/toolboxes/graph_toolbox.hpp index 27779d7f2f8f..ac3f612b4989 100644 --- a/Common/include/toolboxes/graph_toolbox.hpp +++ b/Common/include/toolboxes/graph_toolbox.hpp @@ -2,14 +2,14 @@ * \file graph_toolbox.hpp * \brief Functions and classes to build/represent sparse graphs or sparse patterns. * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/toolboxes/ndflattener.hpp b/Common/include/toolboxes/ndflattener.hpp index 5c21dcd10732..b68cdaec124f 100644 --- a/Common/include/toolboxes/ndflattener.hpp +++ b/Common/include/toolboxes/ndflattener.hpp @@ -2,14 +2,14 @@ * \file ndflattener.hpp * \brief Flatten pointer-to-pointer-... arrays for MPI communication * \author M. Aehle - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/toolboxes/printing_toolbox.hpp b/Common/include/toolboxes/printing_toolbox.hpp index 6b4466f44086..079ad4c93ca6 100644 --- a/Common/include/toolboxes/printing_toolbox.hpp +++ b/Common/include/toolboxes/printing_toolbox.hpp @@ -2,14 +2,14 @@ * \file printing_toolbox.hpp * \brief Header file for the printing toolbox. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/include/wall_model.hpp b/Common/include/wall_model.hpp index 9edb7ded85a2..8c001c3ce3df 100644 --- a/Common/include/wall_model.hpp +++ b/Common/include/wall_model.hpp @@ -2,14 +2,14 @@ * \file wall_model.hpp * \brief Headers for the wall model functions for large eddy simulations. * \author E. van der Weide, T. Economon, P. Urbanczyk - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -42,7 +42,7 @@ class CFluidModel; * \class CWallModel * \brief Base class for defining the LES wall model. * \author: E. van der Weide, T. Economon, P. Urbanczyk - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CWallModel { public: diff --git a/Common/src/CConfig.cpp b/Common/src/CConfig.cpp index 4777616f550b..5fb7220e94e4 100644 --- a/Common/src/CConfig.cpp +++ b/Common/src/CConfig.cpp @@ -2,14 +2,14 @@ * \file CConfig.cpp * \brief Main file for managing the config file * \author F. Palacios, T. Economon, B. Tracey, H. Kline - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -27,12 +27,13 @@ #define ENABLE_MAPS #include +#include #include "../include/CConfig.hpp" #undef ENABLE_MAPS #include "../include/fem/fem_gauss_jacobi_quadrature.hpp" -#include "../include/fem/fem_geometry_structure.hpp" +#include "../include/toolboxes/classes_multiple_integers.hpp" #include "../include/basic_types/ad_structure.hpp" #include "../include/toolboxes/printing_toolbox.hpp" @@ -914,7 +915,10 @@ void CConfig::SetPointersNull() { Inlet_Velocity = nullptr; Inflow_Mach = nullptr; Inflow_Pressure = nullptr; Outlet_Pressure = nullptr; Isothermal_Temperature = nullptr; - ElasticityMod = nullptr; PoissonRatio = nullptr; MaterialDensity = nullptr; + ElasticityMod = nullptr; + PoissonRatio = nullptr; + MaterialDensity = nullptr; + MaterialThermalExpansion = nullptr; Load_Dir = nullptr; Load_Dir_Value = nullptr; Load_Dir_Multiplier = nullptr; Disp_Dir = nullptr; Disp_Dir_Value = nullptr; Disp_Dir_Multiplier = nullptr; @@ -987,7 +991,6 @@ void CConfig::SetPointersNull() { Species_Init = nullptr; Species_Clipping_Min = nullptr; Species_Clipping_Max = nullptr; - spark_reaction_rates = nullptr; /*--- Moving mesh pointers ---*/ @@ -1169,6 +1172,8 @@ void CConfig::SetConfig_Options() { /*!\brief RESTART_SOL \n DESCRIPTION: Restart solution from native solution file \n Options: NO, YES \ingroup Config */ addBoolOption("RESTART_SOL", Restart, false); + /*!\brief WRT_RESTART_COMPACT \n DESCRIPTION: Minimize the size of restart files \n Options: NO, YES \ingroup Config */ + addBoolOption("WRT_RESTART_COMPACT", Wrt_Restart_Compact, true); /*!\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 WRT_RESTART_OVERWRITE \n DESCRIPTION: overwrite restart files or append iteration number. \n Options: YES, NO \ingroup Config */ @@ -1188,11 +1193,17 @@ void CConfig::SetConfig_Options() { /*!\par CONFIG_CATEGORY: Data-driven fluid model parameters \ingroup Config*/ /*!\brief INTERPOLATION_METHOD \n DESCRIPTION: Interpolation method used to determine the thermodynamic state of the fluid. \n OPTIONS: See \link DataDrivenMethod_Map \endlink DEFAULT: MLP \ingroup Config*/ - addEnumOption("INTERPOLATION_METHOD",Kind_DataDriven_Method, DataDrivenMethod_Map, ENUM_DATADRIVEN_METHOD::LUT); + addEnumOption("INTERPOLATION_METHOD",datadriven_ParsedOptions.interp_algorithm_type, DataDrivenMethod_Map, ENUM_DATADRIVEN_METHOD::LUT); /*!\brief FILENAME_INTERPOLATOR \n DESCRIPTION: Input file for the interpolation method. \n \ingroup Config*/ - addStringListOption("FILENAMES_INTERPOLATOR", n_Datadriven_files, DataDriven_Method_FileNames); + addStringListOption("FILENAMES_INTERPOLATOR", datadriven_ParsedOptions.n_filenames, datadriven_ParsedOptions.datadriven_filenames); /*!\brief DATADRIVEN_NEWTON_RELAXATION \n DESCRIPTION: Relaxation factor for Newton solvers in data-driven fluid model. \n \ingroup Config*/ - addDoubleOption("DATADRIVEN_NEWTON_RELAXATION", DataDriven_Relaxation_Factor, 0.05); + addDoubleOption("DATADRIVEN_NEWTON_RELAXATION", datadriven_ParsedOptions.Newton_relaxation, 1.0); + /*!\brief DATADRIVEN_INITIAL_DENSITY \n DESCRIPTION: Optional initial value for fluid density used for the Newton solver processes in the data-driven fluid model. */ + addDoubleOption("DATADRIVEN_INITIAL_DENSITY", datadriven_ParsedOptions.rho_init_custom, -1.0); + /*!\brief DATADRIVEN_INITIAL_ENERGY \n DESCRIPTION: Optional initial value for fluid static energy used for the Newton solver processes in the data-driven fluid model. */ + addDoubleOption("DATADRIVEN_INITIAL_ENERGY", datadriven_ParsedOptions.e_init_custom, -1.0); + /*!\biref USE_PINN \n DESCRIPTION: Use physics-informed approach for the entropy-based fluid model. \n \ingroup Config*/ + addBoolOption("USE_PINN",datadriven_ParsedOptions.use_PINN, false); /*!\brief CONFINEMENT_PARAM \n DESCRIPTION: Input Confinement Parameter for Vorticity Confinement*/ addDoubleOption("CONFINEMENT_PARAM", Confinement_Param, 0.0); @@ -1379,22 +1390,15 @@ void CConfig::SetConfig_Options() { addDoubleListOption("SPECIES_CLIPPING_MIN", nSpecies_Clipping_Min, Species_Clipping_Min); /*!\brief FLAME_INIT_METHOD \n DESCRIPTION: Ignition method for flamelet solver \n DEFAULT: no ignition; cold flow only. */ - addEnumOption("FLAME_INIT_METHOD", flame_init_type, Flamelet_Init_Map, FLAMELET_INIT_TYPE::NONE); + addEnumOption("FLAME_INIT_METHOD", flamelet_ParsedOptions.ignition_method, Flamelet_Init_Map, FLAMELET_INIT_TYPE::NONE); /*!\brief FLAME_INIT \n DESCRIPTION: flame front initialization using the flamelet model \ingroup Config*/ - /*--- flame offset (x,y,z) ---*/ - flame_init[0] = 0.0; flame_init[1] = 0.0; flame_init[2] = 0.0; - /*--- flame normal (nx, ny, nz) ---*/ - flame_init[3] = 1.0; flame_init[4] = 0.0; flame_init[5] = 0.0; - /*--- flame thickness (x) and flame burnt thickness (after this thickness, we have unburnt conditions again) ---*/ - flame_init[6] = 0.5e-3; flame_init[7] = 1.0; - addDoubleArrayOption("FLAME_INIT", 8,flame_init.begin()); + addDoubleArrayOption("FLAME_INIT", flamelet_ParsedOptions.flame_init.size(),flamelet_ParsedOptions.flame_init.begin()); /*!\brief SPARK_INIT \n DESCRIPTION: spark initialization using the flamelet model \ingroup Config*/ - for (auto iSpark=0u; iSpark<6; ++iSpark) spark_init[iSpark]=0; - addDoubleArrayOption("SPARK_INIT", 6, spark_init.begin()); + addDoubleArrayOption("SPARK_INIT", flamelet_ParsedOptions.spark_init.size(), flamelet_ParsedOptions.spark_init.begin()); /*!\brief SPARK_REACTION_RATES \n DESCRIPTION: Net source term values applied to species within spark area during spark ignition. \ingroup Config*/ - addDoubleListOption("SPARK_REACTION_RATES", nspark, spark_reaction_rates); + addDoubleListOption("SPARK_REACTION_RATES", flamelet_ParsedOptions.nspark, flamelet_ParsedOptions.spark_reaction_rates); /*--- Options related to mass diffusivity and thereby the species solver. ---*/ @@ -1777,11 +1781,16 @@ void CConfig::SetConfig_Options() { /* DESCRIPTION: Activate The adaptive CFL number. */ addBoolOption("CFL_ADAPT", CFL_Adapt, false); /* !\brief CFL_ADAPT_PARAM - * DESCRIPTION: Parameters of the adaptive CFL number (factor down, factor up, CFL limit (min and max), acceptable linear residual ) + * DESCRIPTION: Parameters of the adaptive CFL number (factor down, factor up, CFL limit (min and max)[, acceptable linear residual][, starting iteration]). + * Parameters in square brackets are optional, parameter "starting iteration" only valid with parameter "acceptable linear residual". * Factor down generally <1.0, factor up generally > 1.0 to cause the CFL to increase when the under-relaxation parameter is 1.0 * and to decrease when the under-relaxation parameter is less than 0.1. Factor is multiplicative. \ingroup Config*/ - default_cfl_adapt[0] = 1.0; default_cfl_adapt[1] = 1.0; default_cfl_adapt[2] = 10.0; default_cfl_adapt[3] = 100.0; + default_cfl_adapt[0] = 0.1; + default_cfl_adapt[1] = 1.2; + default_cfl_adapt[2] = 10.0; + default_cfl_adapt[3] = 100.0; default_cfl_adapt[4] = 0.001; + default_cfl_adapt[5] = 0.0; addDoubleListOption("CFL_ADAPT_PARAM", nCFL_AdaptParam, CFL_AdaptParam); /* DESCRIPTION: Reduction factor of the CFL coefficient in the adjoint problem */ addDoubleOption("CFL_REDUCTION_ADJFLOW", CFLRedCoeff_AdjFlow, 0.8); @@ -2135,28 +2144,31 @@ void CConfig::SetConfig_Options() { mesh_box_offset[0] = 0.0; mesh_box_offset[1] = 0.0; mesh_box_offset[2] = 0.0; addDoubleArrayOption("MESH_BOX_OFFSET", 3, mesh_box_offset); + /* DESCRIPTION: Polynomial degree of the FEM solution for the RECTANGLE or BOX grid. (default: 1). */ + addUnsignedShortOption("MESH_BOX_POLY_SOL_FEM", Mesh_Box_PSolFEM, 1); + /* DESCRIPTION: Determine if the mesh file supports multizone. \n DEFAULT: true (temporarily) */ addBoolOption("MULTIZONE_MESH", Multizone_Mesh, true); /* DESCRIPTION: Determine if we need to allocate memory to store the multizone residual. \n DEFAULT: false (temporarily) */ addBoolOption("MULTIZONE_RESIDUAL", Multizone_Residual, false); /* !\brief CONTROLLING_VARIABLE_NAMES \n DESCRIPTION: Names of the variables used as inputs for the data regression method in flamelet or data-driven fluid models. */ - addStringListOption("CONTROLLING_VARIABLE_NAMES", n_control_vars, controlling_variable_names); + addStringListOption("CONTROLLING_VARIABLE_NAMES", flamelet_ParsedOptions.n_control_vars, flamelet_ParsedOptions.controlling_variable_names); /* !\brief CONTROLLING_VARIABLE_SOURCE_NAMES \n DESCRIPTION: Names of the variables in the flamelet manifold corresponding to the source terms of the controlling variables. */ - addStringListOption("CONTROLLING_VARIABLE_SOURCE_NAMES", n_control_vars, cv_source_names); + addStringListOption("CONTROLLING_VARIABLE_SOURCE_NAMES", flamelet_ParsedOptions.n_control_vars, flamelet_ParsedOptions.cv_source_names); /* DESCRIPTION: Names of the passive lookup variables for flamelet LUT */ - addStringListOption("LOOKUP_NAMES", n_lookups, lookup_names); + addStringListOption("LOOKUP_NAMES", flamelet_ParsedOptions.n_lookups, flamelet_ParsedOptions.lookup_names); /* DESCRIPTION: Names of the user transport equations solved in the flamelet problem. */ - addStringListOption("USER_SCALAR_NAMES", n_user_scalars, user_scalar_names); + addStringListOption("USER_SCALAR_NAMES", flamelet_ParsedOptions.n_user_scalars, flamelet_ParsedOptions.user_scalar_names); /* DESCRIPTION: Names of the user scalar source terms. */ - addStringListOption("USER_SOURCE_NAMES", n_user_sources, user_source_names); + addStringListOption("USER_SOURCE_NAMES", flamelet_ParsedOptions.n_user_sources, flamelet_ParsedOptions.user_source_names); /* DESCRIPTION: Enable preferential diffusion for FGM simulations. \n DEFAULT: false */ - addBoolOption("PREFERENTIAL_DIFFUSION", preferential_diffusion, false); + addBoolOption("PREFERENTIAL_DIFFUSION", flamelet_ParsedOptions.preferential_diffusion, false); /*!\brief CONV_FILENAME \n DESCRIPTION: Output file convergence history (w/o extension) \n DEFAULT: history \ingroup Config*/ addStringOption("CONV_FILENAME", Conv_FileName, string("history")); @@ -2254,9 +2266,6 @@ void CConfig::SetConfig_Options() { /* DESCRIPTION: Value to move motion origins (1 or 0) */ addUShortListOption("MOVE_MOTION_ORIGIN", nMoveMotion_Origin, MoveMotion_Origin); - /* DESCRIPTION: Before each computation, implicitly smooth the nodal coordinates */ - addUnsignedShortOption("SMOOTH_GEOMETRY", SmoothNumGrid, 0); - /*!\par CONFIG_CATEGORY: Aeroelastic Simulation (Typical Section Model) \ingroup Config*/ /*--- Options related to aeroelastic simulations using the Typical Section Model) ---*/ /* DESCRIPTION: The flutter speed index (modifies the freestream condition) */ @@ -2435,6 +2444,10 @@ void CConfig::SetConfig_Options() { addDoubleListOption("POISSON_RATIO", nPoissonRatio, PoissonRatio); /* DESCRIPTION: Material density */ addDoubleListOption("MATERIAL_DENSITY", nMaterialDensity, MaterialDensity); + /* DESCRIPTION: Material thermal expansion coefficient */ + addDoubleListOption("MATERIAL_THERMAL_EXPANSION_COEFF", nMaterialThermalExpansion, MaterialThermalExpansion); + /* DESCRIPTION: Temperature at which there is no stress from thermal expansion */ + addDoubleOption("MATERIAL_REFERENCE_TEMPERATURE", MaterialReferenceTemperature, 288.15); /* DESCRIPTION: Knowles B constant */ addDoubleOption("KNOWLES_B", Knowles_B, 1.0); /* DESCRIPTION: Knowles N constant */ @@ -2495,11 +2508,11 @@ void CConfig::SetConfig_Options() { addEnumOption("NONLINEAR_FEM_SOLUTION_METHOD", Kind_SpaceIteScheme_FEA, Space_Ite_Map_FEA, STRUCT_SPACE_ITE::NEWTON); /* DESCRIPTION: Formulation for bidimensional elasticity solver */ addEnumOption("FORMULATION_ELASTICITY_2D", Kind_2DElasForm, ElasForm_2D, STRUCT_2DFORM::PLANE_STRAIN); - /* DESCRIPTION: Apply dead loads - * Options: NO, YES \ingroup Config */ - addBoolOption("DEAD_LOAD", DeadLoad, false); + /* DESCRIPTION: Apply centrifugal forces + * Options: NO, YES \ingroup Config */ + addBoolOption("CENTRIFUGAL_FORCE", CentrifugalForce, false); /* DESCRIPTION: Temporary: pseudo static analysis (no density in dynamic analysis) - * Options: NO, YES \ingroup Config */ + * Options: NO, YES \ingroup Config */ addBoolOption("PSEUDO_STATIC", PseudoStatic, false); /* DESCRIPTION: Parameter alpha for Newmark scheme (s) */ addDoubleOption("NEWMARK_BETA", Newmark_beta, 0.25); @@ -3058,6 +3071,8 @@ void CConfig::SetConfig_Parsing(istream& config_buffer){ newString.append("DYNAMIC_ANALYSIS is deprecated. Use TIME_DOMAIN instead.\n\n"); else if (!option_name.compare("SPECIES_USE_STRONG_BC")) newString.append("SPECIES_USE_STRONG_BC is deprecated. Use MARKER_SPECIES_STRONG_BC= (marker1, ...) instead.\n\n"); + else if (!option_name.compare("DEAD_LOAD")) + newString.append("DEAD_LOAD is deprecated. Use GRAVITY_FORCE or BODY_FORCE instead.\n\n"); else { /*--- Find the most likely candidate for the unrecognized option, based on the length of start and end character sequences shared by candidates and the option. ---*/ @@ -3266,7 +3281,7 @@ void CConfig::SetHeader(SU2_COMPONENT val_software) const{ cout << "\n"; cout << "-------------------------------------------------------------------------\n"; cout << "| ___ _ _ ___ |\n"; - cout << "| / __| | | |_ ) Release 8.1.0 \"Harrier\" |\n"; + cout << "| / __| | | |_ ) Release 8.2.0 \"Harrier\" |\n"; cout << "| \\__ \\ |_| |/ / |\n"; switch (val_software) { case SU2_COMPONENT::SU2_CFD: cout << "| |___/\\___//___| Suite (Computational Fluid Dynamics Code) |\n"; break; @@ -3282,7 +3297,7 @@ void CConfig::SetHeader(SU2_COMPONENT val_software) const{ cout << "| The SU2 Project is maintained by the SU2 Foundation |\n"; cout << "| (http://su2foundation.org) |\n"; cout << "-------------------------------------------------------------------------\n"; - cout << "| Copyright 2012-2024, SU2 Contributors |\n"; + cout << "| Copyright 2012-2025, SU2 Contributors |\n"; cout << "| |\n"; cout << "| SU2 is free software; you can redistribute it and/or |\n"; cout << "| modify it under the terms of the GNU Lesser General Public |\n"; @@ -3476,6 +3491,22 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i if (Kind_Solver == MAIN_SOLVER::INC_RANS && Kind_Turb_Model == TURB_MODEL::NONE){ SU2_MPI::Error("A turbulence model must be specified with KIND_TURB_MODEL if SOLVER= INC_RANS", CURRENT_FUNCTION); } + if (Kind_Turb_Model == TURB_MODEL::NONE && Kind_Trans_Model != TURB_TRANS_MODEL::NONE) { + SU2_MPI::Error("KIND_TURB_MODEL cannot be NONE to use a transition model", CURRENT_FUNCTION); + } + switch (Kind_Solver) { + case MAIN_SOLVER::EULER: + case MAIN_SOLVER::INC_EULER: + case MAIN_SOLVER::FEM_EULER: + case MAIN_SOLVER::NEMO_EULER: + if (nMarker_HeatFlux + nMarker_Isothermal + nMarker_HeatTransfer + + nMarker_Smoluchowski_Maxwell + nMarker_CHTInterface > 0) { + SU2_MPI::Error("Euler solvers are only compatible with slip walls (MARKER_EULER)", CURRENT_FUNCTION); + } + break; + default: + break; + } /*--- Postprocess SST_OPTIONS into structure. ---*/ if (Kind_Turb_Model == TURB_MODEL::SST) { @@ -4813,9 +4844,15 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i MaterialDensity = new su2double[1]; MaterialDensity[0] = 7854; } - if (nElasticityMod != nPoissonRatio || nElasticityMod != nMaterialDensity) { - SU2_MPI::Error("ELASTICITY_MODULUS, POISSON_RATIO, and MATERIAL_DENSITY need to have the same number " - "of entries (the number of materials).", CURRENT_FUNCTION); + if (nMaterialThermalExpansion == 0) { + nMaterialThermalExpansion = 1; + MaterialThermalExpansion = new su2double[1](); + } + + if (nElasticityMod != nPoissonRatio || nElasticityMod != nMaterialDensity || + nElasticityMod != nMaterialThermalExpansion) { + SU2_MPI::Error("ELASTICITY_MODULUS, POISSON_RATIO, MATERIAL_DENSITY, and THERMAL_EXPANSION_COEFF need " + "to have the same number of entries (the number of materials).", CURRENT_FUNCTION); } if (nElectric_Constant == 0) { @@ -5589,16 +5626,16 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i /*--- Define some variables for flamelet model. ---*/ if (Kind_Species_Model == SPECIES_MODEL::FLAMELET) { /*--- The controlling variables are progress variable, total enthalpy, and optionally mixture fraction ---*/ - //n_control_vars = nSpecies - n_user_scalars; - if (n_control_vars != (nSpecies - n_user_scalars)) - SU2_MPI::Error("Number of initial species incompatbile with number of controlling variables and user scalars.", CURRENT_FUNCTION); + if (flamelet_ParsedOptions.n_control_vars != (nSpecies - flamelet_ParsedOptions.n_user_scalars)) + SU2_MPI::Error("Number of initial species incompatible with number of controlling variables and user scalars.", CURRENT_FUNCTION); /*--- We can have additional user defined transported scalars ---*/ - n_scalars = n_control_vars + n_user_scalars; + flamelet_ParsedOptions.n_scalars = flamelet_ParsedOptions.n_control_vars + flamelet_ParsedOptions.n_user_scalars; } if (Kind_Regime == ENUM_REGIME::COMPRESSIBLE && GetBounded_Scalar()) { SU2_MPI::Error("BOUNDED_SCALAR discretization can only be used for incompressible problems.", CURRENT_FUNCTION); } + } void CConfig::SetMarkers(SU2_COMPONENT val_software) { @@ -6839,8 +6876,6 @@ void CConfig::SetOutput(SU2_COMPONENT val_software, unsigned short val_izone) { cout << endl <<"--------------- Space Numerical Integration ( Zone " << iZone << " ) ------------------" << endl; - if (SmoothNumGrid) cout << "There are some smoothing iterations on the grid coordinates." << endl; - if ((Kind_Solver == MAIN_SOLVER::EULER) || (Kind_Solver == MAIN_SOLVER::NAVIER_STOKES) || (Kind_Solver == MAIN_SOLVER::RANS) || (Kind_Solver == MAIN_SOLVER::INC_EULER) || (Kind_Solver == MAIN_SOLVER::INC_NAVIER_STOKES) || (Kind_Solver == MAIN_SOLVER::INC_RANS) || (Kind_Solver == MAIN_SOLVER::NEMO_EULER) || (Kind_Solver == MAIN_SOLVER::NEMO_NAVIER_STOKES) || @@ -7230,7 +7265,8 @@ void CConfig::SetOutput(SU2_COMPONENT val_software, unsigned short val_izone) { if (!CFL_Adapt) cout << "No CFL adaptation." << endl; else cout << "CFL adaptation. Factor down: "<< CFL_AdaptParam[0] <<", factor up: "<< CFL_AdaptParam[1] <<",\n lower limit: "<< CFL_AdaptParam[2] <<", upper limit: " << CFL_AdaptParam[3] - <<",\n acceptable linear residual: "<< CFL_AdaptParam[4] << "." << endl; + <<",\n acceptable linear residual: "<< CFL_AdaptParam[4] + <<"'\n starting iteration: "<< CFL_AdaptParam[5] << "." << endl; if (nMGLevels !=0) { PrintingToolbox::CTablePrinter MGTable(&std::cout); diff --git a/Common/src/adt/CADTBaseClass.cpp b/Common/src/adt/CADTBaseClass.cpp index dcbbf67c3227..f308f8b5e023 100644 --- a/Common/src/adt/CADTBaseClass.cpp +++ b/Common/src/adt/CADTBaseClass.cpp @@ -2,14 +2,14 @@ * \file CADTBaseClass.cpp * \brief Base class for storing an ADT in an arbitrary number of dimensions. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/adt/CADTElemClass.cpp b/Common/src/adt/CADTElemClass.cpp index 6d8b0cfcb50b..d11204b79c0e 100644 --- a/Common/src/adt/CADTElemClass.cpp +++ b/Common/src/adt/CADTElemClass.cpp @@ -2,14 +2,14 @@ * \file CADTElemClass.cpp * \brief Class for storing an ADT of (linear) elements in an arbitrary number of dimensions. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/adt/CADTPointsOnlyClass.cpp b/Common/src/adt/CADTPointsOnlyClass.cpp index 82835a86cf4d..48f2339f2c2b 100644 --- a/Common/src/adt/CADTPointsOnlyClass.cpp +++ b/Common/src/adt/CADTPointsOnlyClass.cpp @@ -2,14 +2,14 @@ * \file CADTPointsOnlyClass.cpp * \brief Class for storing an ADT of only points in an arbitrary number of dimensions. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/basic_types/ad_structure.cpp b/Common/src/basic_types/ad_structure.cpp index 62e75a84397d..489a47e400f6 100644 --- a/Common/src/basic_types/ad_structure.cpp +++ b/Common/src/basic_types/ad_structure.cpp @@ -2,14 +2,14 @@ * \file ad_structure.cpp * \brief Main subroutines for the algorithmic differentiation (AD) structure. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/containers/CFileReaderLUT.cpp b/Common/src/containers/CFileReaderLUT.cpp index 93bceaaca8af..5093d3b78c96 100644 --- a/Common/src/containers/CFileReaderLUT.cpp +++ b/Common/src/containers/CFileReaderLUT.cpp @@ -2,14 +2,14 @@ * \file CFileReaderLUT.cpp * \brief reading lookup table for tabulated fluid properties * \author D. Mayer, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/containers/CLookUpTable.cpp b/Common/src/containers/CLookUpTable.cpp index b96fcddaa55d..9a3a8b5c8acb 100644 --- a/Common/src/containers/CLookUpTable.cpp +++ b/Common/src/containers/CLookUpTable.cpp @@ -2,14 +2,14 @@ * \file CLookupTable.cpp * \brief tabulation of fluid properties * \author D. Mayer, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/containers/CTrapezoidalMap.cpp b/Common/src/containers/CTrapezoidalMap.cpp index 17b7e329a9ee..95758a1929f9 100644 --- a/Common/src/containers/CTrapezoidalMap.cpp +++ b/Common/src/containers/CTrapezoidalMap.cpp @@ -2,14 +2,14 @@ * \file CTrapezoidalMap.cpp * \brief Implementation of the trapezoidal map for tabulation and lookup of fluid properties * \author D. Mayer, T. Economon, N. Beishuizen - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/fem/fem_gauss_jacobi_quadrature.cpp b/Common/src/fem/fem_gauss_jacobi_quadrature.cpp index 0731d763e4f1..caeba706dac1 100644 --- a/Common/src/fem/fem_gauss_jacobi_quadrature.cpp +++ b/Common/src/fem/fem_gauss_jacobi_quadrature.cpp @@ -4,14 +4,14 @@ quadrature rules. All the functions in this file are based on the program JACOBI_RULE of John Burkardt. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/fem/fem_geometry_structure.cpp b/Common/src/fem/fem_geometry_structure.cpp index e671a2d02652..322c0a4b09d0 100644 --- a/Common/src/fem/fem_geometry_structure.cpp +++ b/Common/src/fem/fem_geometry_structure.cpp @@ -2,14 +2,14 @@ * \file fem_geometry_structure.cpp * \brief Functions for creating the primal grid for the FEM solver. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -25,6 +25,10 @@ * License along with SU2. If not, see . */ +#include "../../include/toolboxes/CLinearPartitioner.hpp" +#include "../../include/toolboxes/classes_multiple_integers.hpp" +#include "../../include/toolboxes/fem/CReorderElements.hpp" +#include "../../include/toolboxes/fem/CSortFaces.hpp" #include "../../include/fem/fem_geometry_structure.hpp" #include "../../include/geometry/primal_grid/CPrimalGridFEM.hpp" #include "../../include/geometry/primal_grid/CPrimalGridBoundFEM.hpp" @@ -37,140 +41,6 @@ extern "C" void dpotrf_(char*, int*, passivedouble*, int*, int*); extern "C" void dpotri_(char*, int*, passivedouble*, int*, int*); #endif -bool CLong3T::operator<(const CLong3T& other) const { - if (long0 != other.long0) return (long0 < other.long0); - if (long1 != other.long1) return (long1 < other.long1); - if (long2 != other.long2) return (long2 < other.long2); - - return false; -} - -CReorderElements::CReorderElements(const unsigned long val_GlobalElemID, const unsigned short val_TimeLevel, - const bool val_CommSolution, const unsigned short val_VTK_Type, - const unsigned short val_nPolySol, const bool val_JacConstant) { - /* Copy the global elment ID, time level and whether or not this element - must be communicated. */ - globalElemID = val_GlobalElemID; - timeLevel = val_TimeLevel; - commSolution = val_CommSolution; - - /* Create the element type used in this class, which stores information of - the VTK type, the polynomial degree of the solution and whether or not the - Jacobian of the transformation is constant. As it is possible that the - polynomial degree of the solution is zero, this convention is different - from the convention used in the SU2 grid file. */ - elemType = val_VTK_Type + 100 * val_nPolySol; - if (!val_JacConstant) elemType += 50; -} - -bool CReorderElements::operator<(const CReorderElements& other) const { - /* Elements with the lowest time level are stored first. */ - if (timeLevel != other.timeLevel) return timeLevel < other.timeLevel; - - /* Next comparison is whether or not the element must communicate its - solution data to other ranks. Elements which do not need to do this - are stored first. */ - if (commSolution != other.commSolution) return other.commSolution; - - /* Elements of the same element type must be stored as contiguously as - possible to allow for the simultaneous treatment of elements in the - matrix multiplications. */ - if (elemType != other.elemType) return elemType < other.elemType; - - /* The final comparison is based on the global element ID. */ - return globalElemID < other.globalElemID; -} - -bool CSortFaces::operator()(const CFaceOfElement& f0, const CFaceOfElement& f1) { - /*--- Comparison in case both faces are boundary faces. ---*/ - if (f0.faceIndicator >= 0 && f1.faceIndicator >= 0) { - /* Both faces are boundary faces. The first comparison is the boundary - marker, which is stored in faceIndicator. */ - if (f0.faceIndicator != f1.faceIndicator) return f0.faceIndicator < f1.faceIndicator; - - /* Both faces belong to the same boundary marker. The second comparison is - based on the on the local volume ID's of the adjacent elements. As the - volumes are sorted according to the time levels for time accurate - local stepping, there is no need to do this check seperately here. */ - unsigned long ind0 = f0.elemID0 < nVolElemTot ? f0.elemID0 : f0.elemID1; - unsigned long ind1 = f1.elemID0 < nVolElemTot ? f1.elemID0 : f1.elemID1; - - return ind0 < ind1; - } - - /*--- Comparison in case both faces are internal faces. ---*/ - if (f0.faceIndicator == -1 && f1.faceIndicator == -1) { - /* Both faces are internal faces. First determine the minimum and maximum - ID of its adjacent elements. */ - unsigned long elemIDMin0 = min(f0.elemID0, f0.elemID1); - unsigned long elemIDMax0 = max(f0.elemID0, f0.elemID1); - - unsigned long elemIDMin1 = min(f1.elemID0, f1.elemID1); - unsigned long elemIDMax1 = max(f1.elemID0, f1.elemID1); - - /* Determine the situation. */ - if (elemIDMax0 < nVolElemTot && elemIDMax1 < nVolElemTot) { - /* Both faces are matching internal faces. Determine whether or not these - faces are local faces, i.e. faces between locally owned elements. */ - const bool face0IsLocal = elemIDMax0 < nVolElemOwned; - const bool face1IsLocal = elemIDMax1 < nVolElemOwned; - - /* Check if both faces have the same status, i.e. either local or - not local. */ - if (face0IsLocal == face1IsLocal) { - /* Both faces are either local or not local. Determine the time level - of the faces, which is the minimum value of the adjacent volume - elements. */ - const unsigned short timeLevel0 = min(volElem[elemIDMin0].timeLevel, volElem[elemIDMax0].timeLevel); - const unsigned short timeLevel1 = min(volElem[elemIDMin1].timeLevel, volElem[elemIDMax1].timeLevel); - - /* Internal faces with the same status are first sorted according to - their time level. Faces with the smallest time level are numbered - first. Note this is only relevant for time accurate local time - stepping. */ - if (timeLevel0 != timeLevel1) return timeLevel0 < timeLevel1; - - /* The faces belong to the same time level. They are sorted according - to their element ID's in order to increase cache performance. */ - if (elemIDMin0 != elemIDMin1) return elemIDMin0 < elemIDMin1; - return elemIDMax0 < elemIDMax1; - } /* One face is a local face and the other is not. Make sure that - the local faces are numbered first. */ - return face0IsLocal; - - } else if (elemIDMax0 >= nVolElemTot && elemIDMax1 >= nVolElemTot) { - /* Both faces are non-matching internal faces. Sort them according to - their relevant element ID. The time level is not taken into account - yet, because non-matching faces are not possible at the moment with - time accurate local time stepping. */ - return elemIDMin0 < elemIDMin1; - } else { - /* One face is a matching internal face and the other face is a - non-matching internal face. Make sure that the non-matching face - is numbered after the matching face. This is accomplished by comparing - the maximum element ID's. */ - return elemIDMax0 < elemIDMax1; - } - } - - /*--- One face is a boundary face and the other face is an internal face. - Make sure that the boundary face is numbered first. This can be - accomplished by using the > operator for faceIndicator. ---*/ - return f0.faceIndicator > f1.faceIndicator; -} - -bool CSortBoundaryFaces::operator()(const CSurfaceElementFEM& f0, const CSurfaceElementFEM& f1) { - /* First sorting criterion is the index of the standard element. The - boundary faces should be sorted per standard element. Note that the - time level is not taken into account here, because it is assumed that - the surface elements to be sorted belong to one time level. */ - if (f0.indStandardElement != f1.indStandardElement) return f0.indStandardElement < f1.indStandardElement; - - /* The standard elements are the same. The second criterion is the - corresponding volume IDs of the surface elements. */ - return f0.volElemID < f1.volElemID; -} - bool CPointFEM::operator<(const CPointFEM& other) const { if (periodIndexToDonor != other.periodIndexToDonor) return periodIndexToDonor < other.periodIndexToDonor; return globalID < other.globalID; @@ -221,6 +91,10 @@ CMeshFEM::CMeshFEM(CGeometry* geometry, CConfig* config) { /*--- Allocate the memory for blasFunctions. ---*/ blasFunctions = new CBlasStructure; + /*--- Define the linear partitioning of the elements. ---*/ + Global_nElem = geometry->GetGlobal_nElem(); + CLinearPartitioner elemPartitioner(Global_nElem, 0); + /*--- The new FEM mesh class has the same problem dimension/zone. ---*/ nDim = geometry->GetnDim(); nZone = geometry->GetnZone(); @@ -262,14 +136,14 @@ CMeshFEM::CMeshFEM(CGeometry* geometry, CConfig* config) { map rankToIndCommBuf; for (int i = 0; i < size; ++i) { if (sendToRank[i]) { - int ind = (int)rankToIndCommBuf.size(); + int ind = static_cast(rankToIndCommBuf.size()); rankToIndCommBuf[i] = ind; } } /*--- Definition of the communication buffers, used to send the element data to the correct ranks. ---*/ - int nRankSend = (int)rankToIndCommBuf.size(); + int nRankSend = static_cast(rankToIndCommBuf.size()); vector > shortSendBuf(nRankSend, vector(0)); vector > longSendBuf(nRankSend, vector(0)); vector > doubleSendBuf(nRankSend, vector(0)); @@ -289,7 +163,7 @@ CMeshFEM::CMeshFEM(CGeometry* geometry, CConfig* config) { /*--- Loop over the local elements to fill the communication buffers with element data. ---*/ for (unsigned long i = 0; i < geometry->GetnElem(); ++i) { - int ind = (int)geometry->elem[i]->GetColor(); + int ind = static_cast(geometry->elem[i]->GetColor()); map::const_iterator MI = rankToIndCommBuf.find(ind); ind = MI->second; @@ -374,13 +248,14 @@ CMeshFEM::CMeshFEM(CGeometry* geometry, CConfig* config) { /* Loop over the local boundary elements in geometry for this marker. */ for (unsigned long i = 0; i < geometry->GetnElem_Bound(iMarker); ++i) { /* Determine the local ID of the corresponding domain element. */ - unsigned long elemID = geometry->bound[iMarker][i]->GetDomainElement() - geometry->beg_node[rank]; + unsigned long elemID = + geometry->bound[iMarker][i]->GetDomainElement() - elemPartitioner.GetFirstIndexOnRank(rank); /* Determine to which rank this boundary element must be sent. That is the same as its corresponding domain element. Update the corresponding index in longSendBuf. */ - int ind = (int)geometry->elem[elemID]->GetColor(); - map::const_iterator MI = rankToIndCommBuf.find(ind); + int ind = static_cast(geometry->elem[elemID]->GetColor()); + const auto MI = rankToIndCommBuf.find(ind); ind = MI->second; ++longSendBuf[ind][indLongBuf[ind]]; @@ -560,8 +435,10 @@ CMeshFEM::CMeshFEM(CGeometry* geometry, CConfig* config) { the elements with constant and non-constant Jacobians are considered the same. */ if (JacConstant) { - const auto orderExactStraight = (unsigned short)ceil(nPolySol * config->GetQuadrature_Factor_Straight()); - const auto orderExactCurved = (unsigned short)ceil(nPolySol * config->GetQuadrature_Factor_Curved()); + const auto orderExactStraight = + static_cast(ceil(nPolySol * config->GetQuadrature_Factor_Straight())); + const auto orderExactCurved = + static_cast(ceil(nPolySol * config->GetQuadrature_Factor_Curved())); if (orderExactStraight == orderExactCurved) JacConstant = false; } @@ -666,9 +543,7 @@ CMeshFEM::CMeshFEM(CGeometry* geometry, CConfig* config) { /* Determine the number of elements per rank of the originally partitioned grid stored in cumulative storage format. */ vector nElemPerRankOr(size + 1); - - for (int i = 0; i < size; ++i) nElemPerRankOr[i] = geometry->beg_node[i]; - nElemPerRankOr[size] = geometry->end_node[size - 1]; + for (int i = 0; i <= size; ++i) nElemPerRankOr[i] = elemPartitioner.GetCumulativeSizeBeforeRank(i); /* Determine to which ranks I have to send messages to find out the information of the halos stored on this rank. */ @@ -687,14 +562,14 @@ CMeshFEM::CMeshFEM(CGeometry* geometry, CConfig* config) { rankToIndCommBuf.clear(); for (int i = 0; i < size; ++i) { if (sendToRank[i]) { - int ind = (int)rankToIndCommBuf.size(); + int ind = static_cast(rankToIndCommBuf.size()); rankToIndCommBuf[i] = ind; } } /* Resize the first index of the long send buffers for the communication of the halo data. */ - nRankSend = (int)rankToIndCommBuf.size(); + nRankSend = static_cast(rankToIndCommBuf.size()); longSendBuf.resize(nRankSend); /* Determine the number of ranks, from which this rank will receive elements. */ @@ -713,7 +588,7 @@ CMeshFEM::CMeshFEM(CGeometry* geometry, CConfig* config) { if (*low > haloElements[i].long0) --ind; /* Convert this rank to the index in the send buffer. */ - MI = rankToIndCommBuf.find((int)ind); + MI = rankToIndCommBuf.find(static_cast(ind)); ind = MI->second; /* Store the global element ID and the periodic index in the long buffer. @@ -803,11 +678,10 @@ CMeshFEM::CMeshFEM(CGeometry* geometry, CConfig* config) { /* Determine the local index of the element in the original partitioning. Check if the index is valid. */ - const long localID = globalID - geometry->beg_node[rank]; - if (localID < 0 || localID >= (long)geometry->nPointLinear[rank]) { + const long localID = globalID - elemPartitioner.GetFirstIndexOnRank(rank); + if (elemPartitioner.GetRankContainingIndex(globalID) != static_cast(rank)) { ostringstream message; - message << localID << " " << geometry->nPointLinear[rank] << endl; - message << "Invalid local element ID"; + message << "Invalid local element ID: " << localID; SU2_MPI::Error(message.str(), CURRENT_FUNCTION); } @@ -908,12 +782,12 @@ CMeshFEM::CMeshFEM(CGeometry* geometry, CConfig* config) { for (int i = 0; i < size; ++i) { if (nHaloElemPerRank[i + 1] > nHaloElemPerRank[i]) { sendToRank[i] = 1; - int ind = (int)rankToIndCommBuf.size(); + int ind = static_cast(rankToIndCommBuf.size()); rankToIndCommBuf[i] = ind; } } - nRankSend = (int)rankToIndCommBuf.size(); + nRankSend = static_cast(rankToIndCommBuf.size()); /* Store the value of nRankSend for later use. */ const int nRankSendHaloInfo = nRankSend; @@ -1176,7 +1050,7 @@ CMeshFEM::CMeshFEM(CGeometry* geometry, CConfig* config) { /*--- Create the graph of local elements. The halo elements are ignored. ---*/ vector > neighElem(nVolElemOwned, vector(0)); - nRankRecv = (int)longRecvBuf.size(); + nRankRecv = static_cast(longRecvBuf.size()); for (int i = 0; i < nRankRecv; ++i) { unsigned long indL = 1, indS = 0; for (long j = 0; j < longRecvBuf[i][0]; ++j) { @@ -1449,7 +1323,7 @@ CMeshFEM::CMeshFEM(CGeometry* geometry, CConfig* config) { /*--- Resize the first index of the send buffers to nRankRecv, because this number of messages must be sent back to the sending ranks with halo information. ---*/ - nRankRecv = (int)longSecondRecvBuf.size(); + nRankRecv = static_cast(longSecondRecvBuf.size()); shortSendBuf.resize(nRankRecv); longSendBuf.resize(nRankRecv); doubleSendBuf.resize(nRankRecv); @@ -2452,12 +2326,16 @@ void CMeshFEM_DG::CreateFaces(CConfig* config) { is set to false. Hence it is only needed to carry out this check for faces with a constant Jacobian. This is done to reduce the number of standard elements. */ if (thisFace.JacFaceIsConsideredConstant) { - auto orderExactStraight = (unsigned short)ceil(thisFace.nPolyGrid0 * config->GetQuadrature_Factor_Straight()); - auto orderExactCurved = (unsigned short)ceil(thisFace.nPolyGrid0 * config->GetQuadrature_Factor_Curved()); + auto orderExactStraight = + static_cast(ceil(thisFace.nPolyGrid0 * config->GetQuadrature_Factor_Straight())); + auto orderExactCurved = + static_cast(ceil(thisFace.nPolyGrid0 * config->GetQuadrature_Factor_Curved())); if (orderExactStraight == orderExactCurved) { - orderExactStraight = (unsigned short)ceil(thisFace.nPolySol0 * config->GetQuadrature_Factor_Straight()); - orderExactCurved = (unsigned short)ceil(thisFace.nPolySol0 * config->GetQuadrature_Factor_Curved()); + orderExactStraight = + static_cast(ceil(thisFace.nPolySol0 * config->GetQuadrature_Factor_Straight())); + orderExactCurved = + static_cast(ceil(thisFace.nPolySol0 * config->GetQuadrature_Factor_Curved())); if (orderExactStraight == orderExactCurved) thisFace.JacFaceIsConsideredConstant = false; } } @@ -3095,7 +2973,18 @@ void CMeshFEM_DG::CreateFaces(CConfig* config) { each time level. */ for (unsigned short i = 0; i < nTimeLevels; ++i) sort(surfElem.begin() + boundaries[iMarker].nSurfElem[i], - surfElem.begin() + boundaries[iMarker].nSurfElem[i + 1], CSortBoundaryFaces()); + surfElem.begin() + boundaries[iMarker].nSurfElem[i + 1], + [](const CSurfaceElementFEM& f0, const CSurfaceElementFEM& f1) { + /* First sorting criterion is the index of the standard element. The + boundary faces should be sorted per standard element. Note that the + time level is not taken into account here, because it is assumed that + the surface elements to be sorted belong to one time level. */ + if (f0.indStandardElement != f1.indStandardElement) return f0.indStandardElement < f1.indStandardElement; + + /* The standard elements are the same. The second criterion is the + corresponding volume IDs of the surface elements. */ + return f0.volElemID < f1.volElemID; + }); } } } @@ -3156,7 +3045,7 @@ void CMeshFEM_DG::SetSendReceive(const CConfig* config) { map rankToIndRecvBuf; for (int i = 0; i < size; ++i) { if (recvFromRank[i]) { - int ind = (int)rankToIndRecvBuf.size(); + int ind = static_cast(rankToIndRecvBuf.size()); rankToIndRecvBuf[i] = ind; } } diff --git a/Common/src/fem/fem_integration_rules.cpp b/Common/src/fem/fem_integration_rules.cpp index 79ccc4dc2ff5..a3b40e7f63e5 100644 --- a/Common/src/fem/fem_integration_rules.cpp +++ b/Common/src/fem/fem_integration_rules.cpp @@ -2,14 +2,14 @@ * \file fem_integration_rules.cpp * \brief FEM integration rules for the standard elements. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/fem/fem_standard_element.cpp b/Common/src/fem/fem_standard_element.cpp index b24c7cacfaff..76339d579969 100644 --- a/Common/src/fem/fem_standard_element.cpp +++ b/Common/src/fem/fem_standard_element.cpp @@ -2,14 +2,14 @@ * \file fem_standard_element.cpp * \brief Functions for the FEM standard elements. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -186,9 +186,9 @@ CFEMStandardElementBase::CFEMStandardElementBase(unsigned short val_VTK_Type, un orderExact = val_orderExact; } else { if (constJacobian) - orderExact = (unsigned short)ceil(val_nPoly * config->GetQuadrature_Factor_Straight()); + orderExact = static_cast(ceil(val_nPoly * config->GetQuadrature_Factor_Straight())); else - orderExact = (unsigned short)ceil(val_nPoly * config->GetQuadrature_Factor_Curved()); + orderExact = static_cast(ceil(val_nPoly * config->GetQuadrature_Factor_Curved())); } /*--- Determine the integration points. This depends on the element type. ---*/ @@ -903,7 +903,7 @@ void CFEMStandardElementBase::SubConnForPlottingLine(const unsigned short nPoly, /*--- Determine the local subconnectivity of the line element used for plotting purposes. This is rather trivial, because the line element is subdivided into nPoly linear line elements. ---*/ - unsigned short nnPoly = max(nPoly, (unsigned short)1); + unsigned short nnPoly = max(nPoly, static_cast(1)); for (unsigned short i = 0; i < nnPoly; ++i) { subConn.push_back(i); subConn.push_back(i + 1); @@ -916,7 +916,7 @@ void CFEMStandardElementBase::SubConnForPlottingQuadrilateral(const unsigned sho plotting purposes. Note that the connectivity of the linear subelements obey the VTK connectivity rule of a quadrilateral, which is different from the connectivity for the high order quadrilateral. ---*/ - unsigned short nnPoly = max(nPoly, (unsigned short)1); + unsigned short nnPoly = max(nPoly, static_cast(1)); for (unsigned short j = 0; j < nnPoly; ++j) { unsigned short jj = j * (nnPoly + 1); for (unsigned short i = 0; i < nnPoly; ++i) { diff --git a/Common/src/fem/fem_wall_distance.cpp b/Common/src/fem/fem_wall_distance.cpp index e87a708d2c25..77956ef786a8 100644 --- a/Common/src/fem/fem_wall_distance.cpp +++ b/Common/src/fem/fem_wall_distance.cpp @@ -2,14 +2,14 @@ * \file fem_wall_distance.cpp * \brief Main subroutines for computing the wall distance for the FEM solver. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/fem/fem_work_estimate_metis.cpp b/Common/src/fem/fem_work_estimate_metis.cpp index 02841cc459a4..d646e812507f 100644 --- a/Common/src/fem/fem_work_estimate_metis.cpp +++ b/Common/src/fem/fem_work_estimate_metis.cpp @@ -3,14 +3,14 @@ * \brief This file contains the implementation of the member functions WorkEstimateMetis for the FEM standard elements. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -28,22 +28,23 @@ #include "../../include/fem/fem_standard_element.hpp" -su2double CFEMStandardElement::WorkEstimateMetis(CConfig* config) { +passivedouble CFEMStandardElement::WorkEstimateMetis(CConfig* config) { /* TEMPORARY IMPLEMENTATION. */ return nIntegration + 0.1 * nDOFs; } -su2double CFEMStandardInternalFace::WorkEstimateMetis(CConfig* config) { +passivedouble CFEMStandardInternalFace::WorkEstimateMetis(CConfig* config) { /* TEMPORARY IMPLEMENTATION. */ return 2.0 * nIntegration + 0.05 * (nDOFsFaceSide0 + nDOFsFaceSide1); } -su2double CFEMStandardBoundaryFace::WorkEstimateMetis(CConfig* config) { +passivedouble CFEMStandardBoundaryFace::WorkEstimateMetis(CConfig* config) { /* TEMPORARY IMPLEMENTATION. */ return nIntegration + 0.05 * nDOFsFace; } -su2double CFEMStandardBoundaryFace::WorkEstimateMetisWallFunctions(CConfig* config, const unsigned short nPointsWF) { +passivedouble CFEMStandardBoundaryFace::WorkEstimateMetisWallFunctions(CConfig* config, + const unsigned short nPointsWF) { /* TEMPORARY IMPLEMENTATION. */ return 0.25 * nIntegration * nPointsWF; } diff --git a/Common/src/fem/meson.build b/Common/src/fem/meson.build index 028f179d6e43..414483d5108a 100644 --- a/Common/src/fem/meson.build +++ b/Common/src/fem/meson.build @@ -1,8 +1,6 @@ -common_src += files(['geometry_structure_fem_part.cpp', - 'fem_geometry_structure.cpp', +common_src += files(['fem_geometry_structure.cpp', 'fem_integration_rules.cpp', 'fem_work_estimate_metis.cpp', 'fem_standard_element.cpp', 'fem_wall_distance.cpp', - 'fem_gauss_jacobi_quadrature.cpp', - 'fem_cgns_elements.cpp']) + 'fem_gauss_jacobi_quadrature.cpp']) diff --git a/Common/src/geometry/CDummyGeometry.cpp b/Common/src/geometry/CDummyGeometry.cpp index f77e5961b5b7..601d719dedc6 100644 --- a/Common/src/geometry/CDummyGeometry.cpp +++ b/Common/src/geometry/CDummyGeometry.cpp @@ -2,14 +2,14 @@ * \file CDummyGeometry.hpp * \brief Implementation of the dummy geometry class used in "dry run" mode. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/geometry/CGeometry.cpp b/Common/src/geometry/CGeometry.cpp index cf1a6948c5f5..742bf4be65ae 100644 --- a/Common/src/geometry/CGeometry.cpp +++ b/Common/src/geometry/CGeometry.cpp @@ -2,14 +2,14 @@ * \file CGeometry.cpp * \brief Implementation of the base geometry class. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -183,8 +183,8 @@ void CGeometry::PreprocessP2PComms(CGeometry* geometry, CConfig* config) { /*--- If we have not visited this element yet, increment our number of elements that must be sent to a particular proc. ---*/ - if ((nPoint_Flag[iRank] != (int)iMarker)) { - nPoint_Flag[iRank] = (int)iMarker; + if ((nPoint_Flag[iRank] != static_cast(iMarker))) { + nPoint_Flag[iRank] = static_cast(iMarker); nPoint_Send_All[iRank + 1] += nVertexS; } } @@ -819,13 +819,13 @@ void CGeometry::PreprocessPeriodicComms(CGeometry* geometry, CConfig* config) { /*--- Get the rank that holds the matching periodic point on the other marker in the periodic pair. ---*/ - iRank = (int)geometry->vertex[iMarker][iVertex]->GetDonorProcessor(); + iRank = static_cast(geometry->vertex[iMarker][iVertex]->GetDonorProcessor()); /*--- If we have not visited this point last, increment our number of points that must be sent to a particular proc. ---*/ - if ((nPoint_Flag[iRank] != (int)iPoint)) { - nPoint_Flag[iRank] = (int)iPoint; + if ((nPoint_Flag[iRank] != static_cast(iPoint))) { + nPoint_Flag[iRank] = static_cast(iPoint); nPoint_Send_All[iRank + 1] += 1; } } @@ -962,7 +962,7 @@ void CGeometry::PreprocessPeriodicComms(CGeometry* geometry, CConfig* config) { /*--- Get the rank that holds the matching periodic point on the other marker in the periodic pair. ---*/ - iRank = (int)geometry->vertex[iMarker][iVertex]->GetDonorProcessor(); + iRank = static_cast(geometry->vertex[iMarker][iVertex]->GetDonorProcessor()); /*--- If the rank for the current periodic point matches the rank of the current send message, then store the local point @@ -971,11 +971,11 @@ void CGeometry::PreprocessPeriodicComms(CGeometry* geometry, CConfig* config) { if (iRank == Neighbors_PeriodicSend[iSend]) { Local_Point_PeriodicSend[ii] = iPoint; - Local_Marker_PeriodicSend[ii] = (unsigned long)iMarker; + Local_Marker_PeriodicSend[ii] = static_cast(iMarker); jj = ii * nPackets; idSend[jj] = geometry->vertex[iMarker][iVertex]->GetDonorPoint(); jj++; - idSend[jj] = (unsigned long)iPeriodic; + idSend[jj] = static_cast(iPeriodic); ii++; } } @@ -2456,16 +2456,66 @@ su2double CGeometry::GetSurfaceArea(const CConfig* config, unsigned short val_ma void CGeometry::ComputeModifiedSymmetryNormals(const CConfig* config) { /* Check how many symmetry planes there are and use the first (lowest ID) as the basis to orthogonalize against. * All nodes that are shared by multiple symmetries have to get a corrected normal. */ + + /*--- Compute if markers are straight lines or planes. ---*/ + ComputeSurfStraightness(config, false); + + symmetryNormals.clear(); symmetryNormals.resize(nMarker); - std::vector symMarkers; + std::vector symMarkers, curvedSymMarkers; + /*--- Check which markers are symmetry or Euler wall and store in a list. ---*/ for (auto iMarker = 0u; iMarker < nMarker; ++iMarker) { if ((config->GetMarker_All_KindBC(iMarker) == SYMMETRY_PLANE) || (config->GetMarker_All_KindBC(iMarker) == EULER_WALL)) { symMarkers.push_back(iMarker); + if (!boundIsStraight[iMarker]) curvedSymMarkers.push_back(iMarker); + } + } + + /*--- Merge the normals of curved markers to be independent of how surfaces are divided. ---*/ + + std::unordered_map> mergedNormals; + + for (const auto iMarker : curvedSymMarkers) { + for (auto iVertex = 0ul; iVertex < nVertex[iMarker]; iVertex++) { + const auto iPoint = vertex[iMarker][iVertex]->GetNode(); + + /*--- Determine if this point is shared with other curved symmetries. ---*/ + int count = 0; + for (const auto jMarker : curvedSymMarkers) { + count += static_cast(nodes->GetVertex(iPoint, jMarker) >= 0); + } + if (count < 2) continue; + + std::array normal = {}; + vertex[iMarker][iVertex]->GetNormal(normal.data()); + + auto result = mergedNormals.emplace(iPoint, normal); + const auto inserted = result.second; + auto it = result.first; + if (!inserted) { + for (auto iDim = 0ul; iDim < MAXNDIM; ++iDim) { + it->second[iDim] += normal[iDim]; + } + } } } + for (const auto& item : mergedNormals) { + const auto iPoint = item.first; + auto normal = item.second; + const su2double area = GeometryToolbox::Norm(int(MAXNDIM), normal.data()); + for (auto iDim = 0ul; iDim < MAXNDIM; ++iDim) normal[iDim] /= area; + + for (const auto iMarker : curvedSymMarkers) { + const auto iVertex = nodes->GetVertex(iPoint, iMarker); + if (iVertex >= 0) symmetryNormals[iMarker][iVertex] = normal; + } + } + + /*--- Now do Gramm-Schmidt Process for symmetries that are not both curved lines or planes. ---*/ + /*--- Loop over all markers and find nodes on symmetry planes that are shared with other symmetries. ---*/ /*--- The first symmetry does not need a corrected normal vector, hence start at 1. ---*/ for (size_t i = 1; i < symMarkers.size(); ++i) { @@ -2477,49 +2527,166 @@ void CGeometry::ComputeModifiedSymmetryNormals(const CConfig* config) { /*--- Halo points do not need to be considered. ---*/ if (!nodes->GetDomain(iPoint)) continue; - /*--- Get the vertex normal on the current symmetry. ---*/ + /*--- Get the vertex normal on the current symmetry, which may be a merged normal. ---*/ + auto GetNormal = [&](unsigned long iMarker, unsigned long iVertex, std::array& normal) { + const auto it = symmetryNormals[iMarker].find(iVertex); + if (it != symmetryNormals[iMarker].end()) { + normal = it->second; + } else { + vertex[iMarker][iVertex]->GetNormal(normal.data()); + const su2double jarea = GeometryToolbox::Norm(int(MAXNDIM), normal.data()); + for (auto iDim = 0ul; iDim < MAXNDIM; ++iDim) normal[iDim] /= jarea; + } + }; std::array iNormal = {}; - vertex[iMarker][iVertex]->GetNormal(iNormal.data()); + GetNormal(iMarker, iVertex, iNormal); - /*--- Loop over previous symmetries and if this point shares them, make this normal orthogonal to them. ---*/ - bool isShared = false; + /*--- Loop over previous symmetries and if this point shares them, make this normal orthogonal to them. + * It's ok if we normalize merged normals against themselves, we get 0 area and this becomes a no-op. ---*/ for (size_t j = 0; j < i; ++j) { const auto jMarker = symMarkers[j]; const auto jVertex = nodes->GetVertex(iPoint, jMarker); if (jVertex < 0) continue; - isShared = true; - std::array jNormal = {}; - const auto it = symmetryNormals[jMarker].find(jVertex); - - if (it != symmetryNormals[jMarker].end()) { - jNormal = it->second; - } else { - vertex[jMarker][jVertex]->GetNormal(jNormal.data()); - const su2double area = GeometryToolbox::Norm(nDim, jNormal.data()); - for (auto iDim = 0u; iDim < nDim; iDim++) jNormal[iDim] /= area; - } + GetNormal(jMarker, jVertex, jNormal); - const auto proj = GeometryToolbox::DotProduct(nDim, jNormal.data(), iNormal.data()); - for (auto iDim = 0u; iDim < nDim; iDim++) iNormal[iDim] -= proj * jNormal[iDim]; + const su2double proj = GeometryToolbox::DotProduct(int(MAXNDIM), jNormal.data(), iNormal.data()); + for (auto iDim = 0ul; iDim < MAXNDIM; ++iDim) iNormal[iDim] -= proj * jNormal[iDim]; } - if (!isShared) continue; - /*--- Normalize. If the norm is close to zero it means the normal is a linear combination of previous * normals, in this case we don't need to store the corrected normal, using the original in the gradient * correction will have no effect since previous corrections will remove components in this direction). ---*/ - const su2double area = GeometryToolbox::Norm(nDim, iNormal.data()); - if (area > EPS) { - for (auto iDim = 0u; iDim < nDim; iDim++) iNormal[iDim] /= area; + const su2double area = GeometryToolbox::Norm(int(MAXNDIM), iNormal.data()); + if (area > 1e-12) { + for (auto iDim = 0ul; iDim < MAXNDIM; ++iDim) iNormal[iDim] /= area; symmetryNormals[iMarker][iVertex] = iNormal; } } } } +void CGeometry::ComputeSurfStraightness(const CConfig* config, bool print_on_screen) { + bool RefUnitNormal_defined; + unsigned short iDim, iMarker, iMarker_Global, nMarker_Global = config->GetnMarker_CfgFile(); + unsigned long iVertex; + constexpr passivedouble epsilon = 1.0e-6; + su2double Area; + string Local_TagBound, Global_TagBound; + + vector Normal(nDim), UnitNormal(nDim), RefUnitNormal(nDim); + + /*--- Assume now that this boundary marker is straight. As soon as one + AreaElement is found that is not aligend with a Reference then it is + certain that the boundary marker is not straight and one can stop + searching. Another possibility is that this process doesn't own + any nodes of that boundary, in that case we also have to assume the + boundary is straight. + Any boundary type other than SYMMETRY_PLANE or EULER_WALL gets + the value false (or see cases specified in the conditional below) + which could be wrong. ---*/ + boundIsStraight.resize(nMarker); + fill(boundIsStraight.begin(), boundIsStraight.end(), true); + + /*--- Loop over all local markers ---*/ + for (iMarker = 0; iMarker < nMarker; iMarker++) { + Local_TagBound = config->GetMarker_All_TagBound(iMarker); + + /*--- Marker has to be Symmetry or Euler. Additionally marker can't be a + moving surface and Grid Movement Elasticity is forbidden as well. All + other GridMovements are rigid. ---*/ + if ((config->GetMarker_All_KindBC(iMarker) == SYMMETRY_PLANE || + config->GetMarker_All_KindBC(iMarker) == EULER_WALL) && + !config->GetMarker_Moving_Bool(Local_TagBound) && !config->GetMarker_Deform_Mesh_Bool(Local_TagBound)) { + /*--- Loop over all global markers, and find the local-global pair via + matching unique string tags. ---*/ + for (iMarker_Global = 0; iMarker_Global < nMarker_Global; iMarker_Global++) { + Global_TagBound = config->GetMarker_CfgFile_TagBound(iMarker_Global); + if (Local_TagBound == Global_TagBound) { + RefUnitNormal_defined = false; + iVertex = 0; + + while (boundIsStraight[iMarker] && iVertex < nVertex[iMarker]) { + vertex[iMarker][iVertex]->GetNormal(Normal.data()); + UnitNormal = Normal; + + /*--- Compute unit normal. ---*/ + Area = 0.0; + for (iDim = 0; iDim < nDim; iDim++) Area += Normal[iDim] * Normal[iDim]; + Area = sqrt(Area); + + /*--- Negate for outward convention. ---*/ + for (iDim = 0; iDim < nDim; iDim++) UnitNormal[iDim] /= -Area; + + /*--- Check if unit normal is within tolerance of the Reference unit normal. + Reference unit normal = first unit normal found. ---*/ + if (RefUnitNormal_defined) { + for (iDim = 0; iDim < nDim; iDim++) { + if (abs(RefUnitNormal[iDim] - UnitNormal[iDim]) > epsilon) { + boundIsStraight[iMarker] = false; + break; + } + } + } else { + RefUnitNormal = UnitNormal; // deep copy of values + RefUnitNormal_defined = true; + } + + iVertex++; + } // while iVertex + } // if Local == Global + } // for iMarker_Global + } else { + /*--- Enforce default value: false ---*/ + boundIsStraight[iMarker] = false; + } // if sym or euler ... + } // for iMarker + + /*--- Communicate results and print on screen. ---*/ + if (print_on_screen) { + /*--- Additional vector which can later be MPI::Allreduce(d) to pring the results + on screen as nMarker (local) can vary across ranks. Default 'true' as it can + happen that a local rank does not contain an element of each surface marker. ---*/ + vector boundIsStraightGlobal(nMarker_Global, true); + /*--- Match local with global tag bound and fill a Global Marker vector. ---*/ + for (iMarker = 0; iMarker < nMarker; iMarker++) { + Local_TagBound = config->GetMarker_All_TagBound(iMarker); + for (iMarker_Global = 0; iMarker_Global < nMarker_Global; iMarker_Global++) { + Global_TagBound = config->GetMarker_CfgFile_TagBound(iMarker_Global); + + if (Local_TagBound == Global_TagBound) boundIsStraightGlobal[iMarker_Global] = boundIsStraight[iMarker]; + + } // for iMarker_Global + } // for iMarker + + vector Buff_Send_isStraight(nMarker_Global), Buff_Recv_isStraight(nMarker_Global); + + /*--- Cast to int as std::vector can be a special construct. MPI handling using + is more straight-forward. ---*/ + for (iMarker_Global = 0; iMarker_Global < nMarker_Global; iMarker_Global++) + Buff_Send_isStraight[iMarker_Global] = static_cast(boundIsStraightGlobal[iMarker_Global]); + + /*--- Product of type (bool) is equivalnt to a 'logical and' ---*/ + SU2_MPI::Allreduce(Buff_Send_isStraight.data(), Buff_Recv_isStraight.data(), nMarker_Global, MPI_INT, MPI_PROD, + SU2_MPI::GetComm()); + + /*--- Print results on screen. ---*/ + if (rank == MASTER_NODE) { + for (iMarker_Global = 0; iMarker_Global < nMarker_Global; iMarker_Global++) { + if (config->GetMarker_CfgFile_KindBC(config->GetMarker_CfgFile_TagBound(iMarker_Global)) == SYMMETRY_PLANE || + config->GetMarker_CfgFile_KindBC(config->GetMarker_CfgFile_TagBound(iMarker_Global)) == EULER_WALL) { + cout << "Boundary marker " << config->GetMarker_CfgFile_TagBound(iMarker_Global) << " is"; + if (!static_cast(Buff_Recv_isStraight[iMarker_Global])) cout << " NOT"; + if (nDim == 2) cout << " a single straight." << endl; + if (nDim == 3) cout << " a single plane." << endl; + } // if sym or euler + } // for iMarker_Global + } // if rank==MASTER + } // if print_on_scren +} + void CGeometry::ComputeSurf_Curvature(CConfig* config) { unsigned short iMarker, iNeigh_Point, iDim, iNode, iNeighbor_Nodes, Neighbor_Node; unsigned long Neighbor_Point, iVertex, iPoint, jPoint, iElem_Bound, iEdge, nLocalVertex, MaxLocalVertex, @@ -3902,6 +4069,37 @@ const CGeometry::CLineletInfo& CGeometry::GetLineletInfo(const CConfig* config) return li; } +namespace { +su2double NearestNeighborDistance(CGeometry* geometry, const CConfig* config, const unsigned long iPoint) { + const su2double max = std::numeric_limits::max(); + su2double distance = max; + for (const auto jPoint : geometry->nodes->GetPoints(iPoint)) { + const su2double dist = + geometry->nodes->GetViscousBoundary(jPoint) ? 0.0 : geometry->nodes->GetWall_Distance(jPoint); + if (dist > EPS) distance = fmin(distance, dist); + } + if (distance > 0 && distance < max) return distance; + + /*--- The point only has wall neighbors, which all have 0 wall distance. + * Compute an alternative distance based on volume and wall area. ---*/ + + const auto nDim = geometry->GetnDim(); + su2double Normal[3] = {}; + for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { + if (!config->GetViscous_Wall(iMarker)) continue; + + const auto iVertex = geometry->nodes->GetVertex(iPoint, iMarker); + if (iVertex < 0) continue; + + for (auto iDim = 0u; iDim < nDim; iDim++) { + Normal[iDim] += geometry->vertex[iMarker][iVertex]->GetNormal(iDim); + } + } + const su2double Vol = geometry->nodes->GetVolume(iPoint) + geometry->nodes->GetPeriodicVolume(iPoint); + return 2 * Vol / GeometryToolbox::Norm(nDim, Normal); +} +} // namespace + void CGeometry::ComputeWallDistance(const CConfig* const* config_container, CGeometry**** geometry_container) { int nZone = config_container[ZONE_0]->GetnZone(); bool allEmpty = true; @@ -3946,27 +4144,53 @@ void CGeometry::ComputeWallDistance(const CConfig* const* config_container, CGeo CGeometry* geometry = geometry_container[iZone][iInst][MESH_0]; geometry->SetWallDistance(0.0); } + continue; } - /*--- Otherwise, set wall roughnesses. ---*/ - if (!allEmpty) { - /*--- Store all wall roughnesses in a common data structure. ---*/ - // [iZone][iMarker] -> roughness, for this rank - auto roughness_f = make_pair(nZone, [config_container, geometry_container, iInst](unsigned long iZone) { - const CConfig* config = config_container[iZone]; - const auto nMarker = geometry_container[iZone][iInst][MESH_0]->GetnMarker(); - return make_pair(nMarker, [config](unsigned long iMarker) { - return config->GetWallRoughnessProperties(config->GetMarker_All_TagBound(iMarker)).second; - }); + /*--- Otherwise, set wall roughnesses, storing them in a common data structure. ---*/ + // [iZone][iMarker] -> roughness, for this rank + auto roughness_f = make_pair(nZone, [config_container, geometry_container, iInst](unsigned long iZone) { + const CConfig* config = config_container[iZone]; + const auto nMarker = geometry_container[iZone][iInst][MESH_0]->GetnMarker(); + + return make_pair(nMarker, [config](unsigned long iMarker) { + return config->GetWallRoughnessProperties(config->GetMarker_All_TagBound(iMarker)).second; }); - NdFlattener<2> roughness_local(roughness_f); - // [rank][iZone][iMarker] -> roughness - NdFlattener<3> roughness_global(Nd_MPI_Environment(), roughness_local); - // use it to update roughnesses - for (int jZone = 0; jZone < nZone; jZone++) { - if (wallDistanceNeeded[jZone] && config_container[jZone]->GetnRoughWall() > 0) { - geometry_container[jZone][iInst][MESH_0]->nodes->SetWallRoughness(roughness_global); + }); + NdFlattener<2> roughness_local(roughness_f); + // [rank][iZone][iMarker] -> roughness + NdFlattener<3> roughness_global(Nd_MPI_Environment(), roughness_local); + // use it to update roughnesses + for (int jZone = 0; jZone < nZone; jZone++) { + if (wallDistanceNeeded[jZone] && config_container[jZone]->GetnRoughWall() > 0) { + geometry_container[jZone][iInst][MESH_0]->nodes->SetWallRoughness(roughness_global); + } + } + + for (int iZone = 0; iZone < nZone; iZone++) { + /*--- For the FEM solver, we use a different mesh structure ---*/ + MAIN_SOLVER kindSolver = config_container[iZone]->GetKind_Solver(); + if (!wallDistanceNeeded[iZone] || kindSolver == MAIN_SOLVER::FEM_LES || kindSolver == MAIN_SOLVER::FEM_RANS) { + continue; + } + const auto* config = config_container[iZone]; + auto* geometry = geometry_container[iZone][iInst][MESH_0]; + + for (unsigned short iMarker = 0; iMarker < config->GetnMarker_All(); ++iMarker) { + const auto viscous = config->GetViscous_Wall(iMarker); + + SU2_OMP_FOR_STAT(OMP_MIN_SIZE) + for (auto iVertex = 0u; iVertex < geometry->nVertex[iMarker]; iVertex++) { + const auto iPoint = geometry->vertex[iMarker][iVertex]->GetNode(); + su2double dist = 0; + if (viscous && geometry->nodes->GetDomain(iPoint)) { + dist = NearestNeighborDistance(geometry, config, iPoint); + } else { + dist = geometry->nodes->GetWall_Distance(iPoint); + } + geometry->vertex[iMarker][iVertex]->SetNearestNeighborDistance(dist); } + END_SU2_OMP_FOR } } } diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index 8c5bfddf39ec..39cf03258334 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -2,14 +2,14 @@ * \file CMultiGridGeometry.cpp * \brief Implementation of the multigrid geometry class. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -36,8 +36,8 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Create a queue system to do the agglomeration 1st) More than two markers ---> Vertices (never agglomerate) 2nd) Two markers ---> Edges (agglomerate if same BC, never agglomerate if different BC) - 3rd) One marker ---> Surface (always agglomarate) - 4th) No marker ---> Internal Volume (always agglomarate) ---*/ + 3rd) One marker ---> Surface (always agglomerate) + 4th) No marker ---> Internal Volume (always agglomerate) ---*/ /*--- Set a marker to indicate indirect agglomeration, for quads and hexs, i.e. consider up to neighbors of neighbors of neighbors. diff --git a/Common/src/geometry/CMultiGridQueue.cpp b/Common/src/geometry/CMultiGridQueue.cpp index bc77395b94a3..96920df1a772 100644 --- a/Common/src/geometry/CMultiGridQueue.cpp +++ b/Common/src/geometry/CMultiGridQueue.cpp @@ -2,14 +2,14 @@ * \file CMultiGridQueue.cpp * \brief Implementation of the multigrid queue class for the FVM solver. * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/geometry/CPhysicalGeometry.cpp b/Common/src/geometry/CPhysicalGeometry.cpp index 6e34e715be59..c97d2453541e 100644 --- a/Common/src/geometry/CPhysicalGeometry.cpp +++ b/Common/src/geometry/CPhysicalGeometry.cpp @@ -2,14 +2,14 @@ * \file CPhysicalGeometry.cpp * \brief Implementation of the physical geometry class. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -31,9 +31,13 @@ #include "../../include/toolboxes/CLinearPartitioner.hpp" #include "../../include/toolboxes/C1DInterpolation.hpp" #include "../../include/toolboxes/geometry_toolbox.hpp" +#include "../../include/geometry/meshreader/CSU2ASCIIMeshReaderFEM.hpp" #include "../../include/geometry/meshreader/CSU2ASCIIMeshReaderFVM.hpp" #include "../../include/geometry/meshreader/CCGNSMeshReaderFVM.hpp" +#include "../../include/geometry/meshreader/CCGNSMeshReaderFEM.hpp" +#include "../../include/geometry/meshreader/CRectangularMeshReaderFEM.hpp" #include "../../include/geometry/meshreader/CRectangularMeshReaderFVM.hpp" +#include "../../include/geometry/meshreader/CBoxMeshReaderFEM.hpp" #include "../../include/geometry/meshreader/CBoxMeshReaderFVM.hpp" #include "../../include/geometry/primal_grid/CPrimalGrid.hpp" @@ -72,38 +76,18 @@ CPhysicalGeometry::CPhysicalGeometry(CConfig* config, unsigned short val_iZone, string val_mesh_filename = config->GetMesh_FileName(); unsigned short val_format = config->GetMesh_FileFormat(); - /*--- Determine whether or not a FEM discretization is used ---*/ + /*--- Check for a valid mesh format ---*/ - const bool fem_solver = config->GetFEMSolver(); - - /*--- Initialize counters for local/global points & elements ---*/ - - if (fem_solver) { - switch (val_format) { - case SU2: - Read_SU2_Format_Parallel_FEM(config, val_mesh_filename, val_iZone, val_nZone); - break; - - case CGNS_GRID: - Read_CGNS_Format_Parallel_FEM(config, val_mesh_filename, val_iZone, val_nZone); - break; - - default: - SU2_MPI::Error("Unrecognized mesh format specified for the FEM solver!", CURRENT_FUNCTION); - break; - } - } else { - switch (val_format) { - case SU2: - case CGNS_GRID: - case RECTANGLE: - case BOX: - Read_Mesh_FVM(config, val_mesh_filename, val_iZone, val_nZone); - break; - default: - SU2_MPI::Error("Unrecognized mesh format specified!", CURRENT_FUNCTION); - break; - } + switch (val_format) { + case SU2: + case CGNS_GRID: + case RECTANGLE: + case BOX: + Read_Mesh(config, val_mesh_filename, val_iZone, val_nZone); + break; + default: + SU2_MPI::Error("Unrecognized mesh format specified!", CURRENT_FUNCTION); + break; } /*--- After reading the mesh, assert that the dimension is equal to 2 or 3. ---*/ @@ -563,8 +547,8 @@ void CPhysicalGeometry::DistributeColoring(const CConfig* config, CGeometry* geo /*--- If we have not visited this node yet, increment our number of points that must be sent to a particular proc. ---*/ - if (nPoint_Flag[iProcessor] != (int)iPoint) { - nPoint_Flag[iProcessor] = (int)iPoint; + if (nPoint_Flag[iProcessor] != static_cast(iPoint)) { + nPoint_Flag[iProcessor] = static_cast(iPoint); nPoint_Send[iProcessor + 1]++; } } @@ -623,8 +607,8 @@ void CPhysicalGeometry::DistributeColoring(const CConfig* config, CGeometry* geo /*--- If we have not visited this node yet, increment our counters and load up the global ID and color. ---*/ - if (nPoint_Flag[iProcessor] != (int)iPoint) { - nPoint_Flag[iProcessor] = (int)iPoint; + if (nPoint_Flag[iProcessor] != static_cast(iPoint)) { + nPoint_Flag[iProcessor] = static_cast(iPoint); unsigned long nn = index[iProcessor]; /*--- Load the data values. ---*/ @@ -796,8 +780,8 @@ void CPhysicalGeometry::DistributeVolumeConnectivity(const CConfig* config, CGeo /*--- If we have not visited this element yet, increment our number of elements that must be sent to a particular proc. ---*/ - if ((nElem_Flag[iProcessor] != (int)iElem)) { - nElem_Flag[iProcessor] = (int)iElem; + if ((nElem_Flag[iProcessor] != static_cast(iElem))) { + nElem_Flag[iProcessor] = static_cast(iElem); nElem_Send[iProcessor + 1]++; } } @@ -863,8 +847,8 @@ void CPhysicalGeometry::DistributeVolumeConnectivity(const CConfig* config, CGeo /*--- Load connectivity and IDs into the buffer for sending ---*/ - if (nElem_Flag[iProcessor] != (int)iElem) { - nElem_Flag[iProcessor] = (int)iElem; + if (nElem_Flag[iProcessor] != static_cast(iElem)) { + nElem_Flag[iProcessor] = static_cast(iElem); unsigned long nn = index[iProcessor]; unsigned long mm = idIndex[iProcessor]; @@ -1087,8 +1071,8 @@ void CPhysicalGeometry::DistributePoints(const CConfig* config, CGeometry* geome /*--- If we have not visited this node yet, increment our number of points that must be sent to a particular proc. ---*/ - if (nPoint_Flag[iProcessor] != (int)iPoint) { - nPoint_Flag[iProcessor] = (int)iPoint; + if (nPoint_Flag[iProcessor] != static_cast(iPoint)) { + nPoint_Flag[iProcessor] = static_cast(iPoint); nPoint_Send[iProcessor + 1]++; } } @@ -1156,8 +1140,8 @@ void CPhysicalGeometry::DistributePoints(const CConfig* config, CGeometry* geome /*--- If we have not visited this node yet, increment our counters and load up the colors, ids, and coords. ---*/ - if (nPoint_Flag[iProcessor] != (int)iPoint) { - nPoint_Flag[iProcessor] = (int)iPoint; + if (nPoint_Flag[iProcessor] != static_cast(iPoint)) { + nPoint_Flag[iProcessor] = static_cast(iPoint); unsigned long nn = index[iProcessor]; /*--- Load the global ID, color, and coordinate values. ---*/ @@ -1264,7 +1248,7 @@ void CPhysicalGeometry::DistributePoints(const CConfig* config, CGeometry* geome Local_Points[iRecv] = idRecv[iRecv]; Local_Colors[iRecv] = colorRecv[iRecv]; for (iDim = 0; iDim < nDim; iDim++) Local_Coords[iRecv * nDim + iDim] = coordRecv[iRecv * nDim + iDim]; - if (Local_Colors[iRecv] == (unsigned long)rank) + if (Local_Colors[iRecv] == static_cast(rank)) nLocal_PointDomain++; else nLocal_PointGhost++; @@ -1375,8 +1359,8 @@ void CPhysicalGeometry::PartitionSurfaceConnectivity(CConfig* config, CGeometry* /*--- If we have not visited this element yet, increment our number of elements that must be sent to a particular proc. ---*/ - if ((nElem_Flag[iProcessor] != (int)iElem)) { - nElem_Flag[iProcessor] = (int)iElem; + if ((nElem_Flag[iProcessor] != static_cast(iElem))) { + nElem_Flag[iProcessor] = static_cast(iElem); nElem_Send[iProcessor + 1]++; } } @@ -1456,8 +1440,8 @@ void CPhysicalGeometry::PartitionSurfaceConnectivity(CConfig* config, CGeometry* /*--- Load connectivity into the buffer for sending ---*/ - if ((nElem_Flag[iProcessor] != (int)iElem)) { - nElem_Flag[iProcessor] = (int)iElem; + if ((nElem_Flag[iProcessor] != static_cast(iElem))) { + nElem_Flag[iProcessor] = static_cast(iElem); unsigned long nn = index[iProcessor]; unsigned long mm = markerIndex[iProcessor]; @@ -1728,8 +1712,8 @@ void CPhysicalGeometry::DistributeSurfaceConnectivity(CConfig* config, CGeometry /*--- If we have not visited this element yet, increment our number of elements that must be sent to a particular proc. ---*/ - if ((nElem_Flag[iProcessor] != (int)iElem)) { - nElem_Flag[iProcessor] = (int)iElem; + if ((nElem_Flag[iProcessor] != static_cast(iElem))) { + nElem_Flag[iProcessor] = static_cast(iElem); nElem_Send[iProcessor + 1]++; } } @@ -1797,8 +1781,8 @@ void CPhysicalGeometry::DistributeSurfaceConnectivity(CConfig* config, CGeometry /*--- If we have not visited this element yet, load up the data for sending. ---*/ - if (nElem_Flag[iProcessor] != (int)iElem) { - nElem_Flag[iProcessor] = (int)iElem; + if (nElem_Flag[iProcessor] != static_cast(iElem)) { + nElem_Flag[iProcessor] = static_cast(iElem); unsigned long nn = index[iProcessor]; unsigned long mm = markerIndex[iProcessor]; @@ -2006,7 +1990,8 @@ void CPhysicalGeometry::DistributeMarkerTags(CConfig* config, CGeometry* geometr /*--- Broadcast the string names of the variables. ---*/ - SU2_MPI::Bcast(mpi_str_buf, (int)nMarker_Global * MAX_STRING_SIZE, MPI_CHAR, MASTER_NODE, SU2_MPI::GetComm()); + SU2_MPI::Bcast(mpi_str_buf, static_cast(nMarker_Global) * MAX_STRING_SIZE, MPI_CHAR, MASTER_NODE, + SU2_MPI::GetComm()); /*--- Now parse the string names and load into our marker tag vector. We also need to set the values of all markers into the config. ---*/ @@ -2058,7 +2043,7 @@ void CPhysicalGeometry::LoadPoints(CConfig* config, CGeometry* geometry) { for (iPoint = 0; iPoint < nPoint; iPoint++) { /*--- Set the starting point to the correct counter for this point. ---*/ - if (Local_Colors[iPoint] == (unsigned long)rank) { + if (Local_Colors[iPoint] == static_cast(rank)) { if (Local_Points[iPoint] < geometry->GetGlobal_nPointDomain()) jPoint = iOwned; else @@ -2082,7 +2067,7 @@ void CPhysicalGeometry::LoadPoints(CConfig* config, CGeometry* geometry) { /*--- Increment the correct counter before moving to the next point. ---*/ - if (Local_Colors[iPoint] == (unsigned long)rank) { + if (Local_Colors[iPoint] == static_cast(rank)) { if (Local_Points[iPoint] < geometry->GetGlobal_nPointDomain()) iOwned++; else @@ -2891,7 +2876,7 @@ unsigned long CPhysicalGeometry::GetLinearPartition(unsigned long val_global_ind /*--- Guard against going over size. ---*/ - if (iProcessor >= (unsigned long)size) iProcessor = (unsigned long)size - 1; + if (iProcessor >= static_cast(size)) iProcessor = static_cast(size) - 1; /*--- Move up or down until we find the processor. ---*/ @@ -3006,7 +2991,7 @@ void CPhysicalGeometry::SetSendReceive(const CConfig* config) { iPoint = elem[iElem]->GetNode(iNode); iDomain = nodes->GetColor(iPoint); - if (iDomain == (unsigned long)rank) { + if (iDomain == static_cast(rank)) { for (jNode = 0; jNode < elem[iElem]->GetnNodes(); jNode++) { jPoint = elem[iElem]->GetNode(jNode); jDomain = nodes->GetColor(jPoint); @@ -3433,8 +3418,8 @@ void CPhysicalGeometry::SetBoundaries(CConfig* config) { delete[] nElem_Bound_Copy; } -void CPhysicalGeometry::Read_Mesh_FVM(CConfig* config, const string& val_mesh_filename, unsigned short val_iZone, - unsigned short val_nZone) { +void CPhysicalGeometry::Read_Mesh(CConfig* config, const string& val_mesh_filename, unsigned short val_iZone, + unsigned short val_nZone) { /*--- Initialize counters for local/global points & elements ---*/ Global_nPoint = 0; @@ -3463,20 +3448,33 @@ void CPhysicalGeometry::Read_Mesh_FVM(CConfig* config, const string& val_mesh_fi /*--- Create a mesh reader to read a CGNS grid into linear partitions. ---*/ unsigned short val_format = config->GetMesh_FileFormat(); + const bool fem_solver = config->GetFEMSolver(); - CMeshReaderFVM* MeshFVM = nullptr; + CMeshReaderBase* Mesh = nullptr; switch (val_format) { case SU2: - MeshFVM = new CSU2ASCIIMeshReaderFVM(config, val_iZone, val_nZone); + if (fem_solver) + Mesh = new CSU2ASCIIMeshReaderFEM(config, val_iZone, val_nZone); + else + Mesh = new CSU2ASCIIMeshReaderFVM(config, val_iZone, val_nZone); break; case CGNS_GRID: - MeshFVM = new CCGNSMeshReaderFVM(config, val_iZone, val_nZone); + if (fem_solver) + Mesh = new CCGNSMeshReaderFEM(config, val_iZone, val_nZone); + else + Mesh = new CCGNSMeshReaderFVM(config, val_iZone, val_nZone); break; case RECTANGLE: - MeshFVM = new CRectangularMeshReaderFVM(config, val_iZone, val_nZone); + if (fem_solver) + Mesh = new CRectangularMeshReaderFEM(config, val_iZone, val_nZone); + else + Mesh = new CRectangularMeshReaderFVM(config, val_iZone, val_nZone); break; case BOX: - MeshFVM = new CBoxMeshReaderFVM(config, val_iZone, val_nZone); + if (fem_solver) + Mesh = new CBoxMeshReaderFEM(config, val_iZone, val_nZone); + else + Mesh = new CBoxMeshReaderFVM(config, val_iZone, val_nZone); break; default: SU2_MPI::Error("Unrecognized mesh format specified!", CURRENT_FUNCTION); @@ -3485,7 +3483,7 @@ void CPhysicalGeometry::Read_Mesh_FVM(CConfig* config, const string& val_mesh_fi /*--- Store the dimension of the problem ---*/ - nDim = MeshFVM->GetDimension(); + nDim = Mesh->GetDimension(); if (rank == MASTER_NODE) { if (nDim == 2) cout << "Two dimensional problem." << endl; if (nDim == 3) cout << "Three dimensional problem." << endl; @@ -3493,10 +3491,10 @@ void CPhysicalGeometry::Read_Mesh_FVM(CConfig* config, const string& val_mesh_fi /*--- Store the local and global number of nodes for this rank. ---*/ - nPoint = MeshFVM->GetNumberOfLocalPoints(); - nPointDomain = MeshFVM->GetNumberOfLocalPoints(); - Global_nPoint = MeshFVM->GetNumberOfGlobalPoints(); - Global_nPointDomain = MeshFVM->GetNumberOfGlobalPoints(); + nPoint = Mesh->GetNumberOfLocalPoints(); + nPointDomain = Mesh->GetNumberOfLocalPoints(); + Global_nPoint = Mesh->GetNumberOfGlobalPoints(); + Global_nPointDomain = Mesh->GetNumberOfGlobalPoints(); if ((rank == MASTER_NODE) && (size > SINGLE_NODE)) { cout << Global_nPoint << " grid points before partitioning." << endl; @@ -3506,9 +3504,9 @@ void CPhysicalGeometry::Read_Mesh_FVM(CConfig* config, const string& val_mesh_fi /*--- Store the local and global number of interior elements. ---*/ - nElem = MeshFVM->GetNumberOfLocalElements(); - Global_nElem = MeshFVM->GetNumberOfGlobalElements(); - Global_nElemDomain = MeshFVM->GetNumberOfGlobalElements(); + nElem = Mesh->GetNumberOfLocalElements(); + Global_nElem = Mesh->GetNumberOfGlobalElements(); + Global_nElemDomain = Mesh->GetNumberOfGlobalElements(); if ((rank == MASTER_NODE) && (size > SINGLE_NODE)) { cout << Global_nElem << " volume elements before partitioning." << endl; @@ -3516,24 +3514,35 @@ void CPhysicalGeometry::Read_Mesh_FVM(CConfig* config, const string& val_mesh_fi cout << Global_nElem << " volume elements." << endl; } - /*--- Load the grid points, volume elements, and surface elements - from the mesh object into the proper SU2 data structures. ---*/ + /*--- Make a distinction between the FVM solver and FEM solver how to load + the grid data in the member variables of CPhysicalGeometry. ---*/ + if (fem_solver) { + /*--- Load the grid points, volume elements, and surface elements + from the mesh object into the proper SU2 data structures. ---*/ + + LoadLinearlyPartitionedPointsFEM(config, Mesh); + LoadLinearlyPartitionedVolumeElementsFEM(config, Mesh); + LoadLinearlyPartitionedSurfaceElementsFEM(config, Mesh); + } else { + /*--- Load the grid points, volume elements, and surface elements + from the mesh object into the proper SU2 data structures. ---*/ - LoadLinearlyPartitionedPoints(config, MeshFVM); - LoadLinearlyPartitionedVolumeElements(config, MeshFVM); - LoadUnpartitionedSurfaceElements(config, MeshFVM); + LoadLinearlyPartitionedPoints(config, Mesh); + LoadLinearlyPartitionedVolumeElements(config, Mesh); + LoadUnpartitionedSurfaceElements(config, Mesh); - /*--- Prepare the nodal adjacency structures for ParMETIS. ---*/ + /*--- Prepare the nodal adjacency structures for ParMETIS. ---*/ - PrepareAdjacency(config); + PrepareAdjacency(config); + } /*--- Now that we have loaded all information from the mesh, delete the mesh reader object. ---*/ - delete MeshFVM; + delete Mesh; } -void CPhysicalGeometry::LoadLinearlyPartitionedPoints(CConfig* config, CMeshReaderFVM* mesh) { +void CPhysicalGeometry::LoadLinearlyPartitionedPoints(CConfig* config, CMeshReaderBase* mesh) { /*--- Get the linearly partitioned coordinates from the mesh object. ---*/ const auto& gridCoords = mesh->GetLocalPointCoordinates(); @@ -3556,7 +3565,7 @@ void CPhysicalGeometry::LoadLinearlyPartitionedPoints(CConfig* config, CMeshRead } } -void CPhysicalGeometry::LoadLinearlyPartitionedVolumeElements(CConfig* config, CMeshReaderFVM* mesh) { +void CPhysicalGeometry::LoadLinearlyPartitionedVolumeElements(CConfig* config, CMeshReaderBase* mesh) { /*--- Reset the global to local element mapping. ---*/ Global_to_Local_Elem.clear(); @@ -3643,7 +3652,7 @@ void CPhysicalGeometry::LoadLinearlyPartitionedVolumeElements(CConfig* config, C reduce(nelem_pyramid, Global_nelem_pyramid); } -void CPhysicalGeometry::LoadUnpartitionedSurfaceElements(CConfig* config, CMeshReaderFVM* mesh) { +void CPhysicalGeometry::LoadUnpartitionedSurfaceElements(CConfig* config, CMeshReaderBase* mesh) { /*--- The master node takes care of loading all markers and surface elements from the file. This information is later put into linear partitions to make its redistribution easier @@ -3709,11 +3718,11 @@ void CPhysicalGeometry::LoadUnpartitionedSurfaceElements(CConfig* config, CMeshR /*--- Not a mixed section. We already know the element type, which is stored ---*/ - vtk_type = (int)connElems[jElem * SU2_CONN_SIZE + 1]; + vtk_type = static_cast(connElems[jElem * SU2_CONN_SIZE + 1]); /*--- Store the loop size more easily. ---*/ - npe = (int)(SU2_CONN_SIZE - SU2_CONN_SKIP); + npe = static_cast(SU2_CONN_SIZE - SU2_CONN_SKIP); /*--- Store the nodes for this element more clearly. ---*/ @@ -5089,7 +5098,7 @@ void CPhysicalGeometry::SetTurboVertex(CConfig* config, unsigned short val_iZone if (config->GetMarker_All_TurbomachineryFlag(iMarker) == marker_flag) { /*--- compute the amount of vertexes for each span-wise section to initialize the CTurboVertex pointers and * auxiliary pointers ---*/ - for (iVertex = 0; (unsigned long)iVertex < nVertex[iMarker]; iVertex++) { + for (iVertex = 0; static_cast(iVertex) < nVertex[iMarker]; iVertex++) { iPoint = vertex[iMarker][iVertex]->GetNode(); if (nDim == 3) { dist = 10E+06; @@ -5189,7 +5198,7 @@ void CPhysicalGeometry::SetTurboVertex(CConfig* config, unsigned short val_iZone } /*--- store the vertexes in a ordered manner in span-wise directions but not yet ordered pitch-wise ---*/ - for (iVertex = 0; (unsigned long)iVertex < nVertex[iMarker]; iVertex++) { + for (iVertex = 0; static_cast(iVertex) < nVertex[iMarker]; iVertex++) { iPoint = vertex[iMarker][iVertex]->GetNode(); if (nDim == 3) { dist = 10E+06; @@ -5515,7 +5524,7 @@ void CPhysicalGeometry::SetTurboVertex(CConfig* config, unsigned short val_iZone SetnVertexSpanMax(marker_flag, nVert); } /*--- for all the processor should be known the amount of total turbovertex per span ---*/ - nTotVertex_gb[iSpan] = (int)nVert; + nTotVertex_gb[iSpan] = static_cast(nVert); for (iMarker = 0; iMarker < nMarker; iMarker++) { for (iMarkerTP = 1; iMarkerTP < config->GetnMarker_Turbomachinery() + 1; iMarkerTP++) { @@ -7417,70 +7426,6 @@ void CPhysicalGeometry::VisualizeControlVolume(const CConfig* config) const { } } -void CPhysicalGeometry::SetCoord_Smoothing(unsigned short val_nSmooth, su2double val_smooth_coeff, CConfig* config) { - unsigned short iSmooth, nneigh, iMarker; - su2double *Coord_Old, *Coord_Sum, *Coord, *Coord_i, *Coord_j, Position_Plane = 0.0; - unsigned long iEdge, iPoint, jPoint, iVertex; - su2double eps = 1E-6; - bool NearField = false; - - Coord = new su2double[nDim]; - - nodes->SetCoord_Old(); - - /*--- Jacobi iterations ---*/ - for (iSmooth = 0; iSmooth < val_nSmooth; iSmooth++) { - nodes->SetCoord_SumZero(); - - /*--- Loop over Interior edges ---*/ - for (iEdge = 0; iEdge < nEdge; iEdge++) { - iPoint = edges->GetNode(iEdge, 0); - Coord_i = nodes->GetCoord(iPoint); - - jPoint = edges->GetNode(iEdge, 1); - Coord_j = nodes->GetCoord(jPoint); - - /*--- Accumulate nearest neighbor Coord to Res_sum for each variable ---*/ - nodes->AddCoord_Sum(iPoint, Coord_j); - nodes->AddCoord_Sum(jPoint, Coord_i); - } - - /*--- Loop over all mesh points (Update Coords with averaged sum) ---*/ - for (iPoint = 0; iPoint < nPoint; iPoint++) { - nneigh = nodes->GetnPoint(iPoint); - Coord_Sum = nodes->GetCoord_Sum(iPoint); - Coord_Old = nodes->GetCoord_Old(iPoint); - - if (nDim == 2) { - Coord[0] = (Coord_Old[0] + val_smooth_coeff * Coord_Sum[0]) / (1.0 + val_smooth_coeff * su2double(nneigh)); - Coord[1] = (Coord_Old[1] + val_smooth_coeff * Coord_Sum[1]) / (1.0 + val_smooth_coeff * su2double(nneigh)); - if ((NearField) && ((Coord_Old[1] > Position_Plane - eps) && (Coord_Old[1] < Position_Plane + eps))) - Coord[1] = Coord_Old[1]; - } - - if (nDim == 3) { - Coord[0] = (Coord_Old[0] + val_smooth_coeff * Coord_Sum[0]) / (1.0 + val_smooth_coeff * su2double(nneigh)); - Coord[1] = (Coord_Old[1] + val_smooth_coeff * Coord_Sum[1]) / (1.0 + val_smooth_coeff * su2double(nneigh)); - Coord[2] = (Coord_Old[2] + val_smooth_coeff * Coord_Sum[2]) / (1.0 + val_smooth_coeff * su2double(nneigh)); - if ((NearField) && ((Coord_Old[2] > Position_Plane - eps) && (Coord_Old[2] < Position_Plane + eps))) - Coord[2] = Coord_Old[2]; - } - - nodes->SetCoord(iPoint, Coord); - } - - /*--- Copy boundary values ---*/ - for (iMarker = 0; iMarker < nMarker; iMarker++) - for (iVertex = 0; iVertex < nVertex[iMarker]; iVertex++) { - iPoint = vertex[iMarker][iVertex]->GetNode(); - Coord_Old = nodes->GetCoord_Old(iPoint); - nodes->SetCoord(iPoint, Coord_Old); - } - } - - delete[] Coord; -} - bool CPhysicalGeometry::FindFace(unsigned long first_elem, unsigned long second_elem, unsigned short& face_first_elem, unsigned short& face_second_elem) { if (first_elem == second_elem) return false; @@ -8331,7 +8276,7 @@ void CPhysicalGeometry::SetSensitivity(CConfig* config) { /*--- First, read the number of variables and points. ---*/ ret = fread(Restart_Vars, sizeof(int), nRestart_Vars, fhw); - if (ret != (unsigned long)nRestart_Vars) { + if (ret != static_cast(nRestart_Vars)) { SU2_MPI::Error("Error reading restart file.", CURRENT_FUNCTION); } @@ -8358,7 +8303,7 @@ void CPhysicalGeometry::SetSensitivity(CConfig* config) { config->fields.push_back("Point_ID"); for (iVar = 0; iVar < nFields; iVar++) { ret = fread(str_buf, sizeof(char), CGNS_STRING_SIZE, fhw); - if (ret != (unsigned long)CGNS_STRING_SIZE) { + if (ret != static_cast(CGNS_STRING_SIZE)) { SU2_MPI::Error("Error reading restart file.", CURRENT_FUNCTION); } config->fields.push_back(str_buf); @@ -8371,7 +8316,7 @@ void CPhysicalGeometry::SetSensitivity(CConfig* config) { /*--- Read in the data for the restart at all local points. ---*/ ret = fread(Restart_Data, sizeof(passivedouble), nFields * GetnPointDomain(), fhw); - if (ret != (unsigned long)nFields * GetnPointDomain()) { + if (ret != static_cast(nFields) * GetnPointDomain()) { SU2_MPI::Error("Error reading restart file.", CURRENT_FUNCTION); } @@ -8466,7 +8411,7 @@ void CPhysicalGeometry::SetSensitivity(CConfig* config) { config->fields.emplace_back("Point_ID"); for (iVar = 0; iVar < nFields; iVar++) { index = iVar * CGNS_STRING_SIZE; - for (iChar = 0; iChar < (unsigned long)CGNS_STRING_SIZE; iChar++) { + for (iChar = 0; iChar < static_cast(CGNS_STRING_SIZE); iChar++) { str_buf[iChar] = mpi_str_buf[index + iChar]; } field_buf.append(str_buf); diff --git a/Common/src/fem/geometry_structure_fem_part.cpp b/Common/src/geometry/CPhysicalGeometryFEM.cpp similarity index 59% rename from Common/src/fem/geometry_structure_fem_part.cpp rename to Common/src/geometry/CPhysicalGeometryFEM.cpp index d9536a679037..f56dbdaf019e 100644 --- a/Common/src/fem/geometry_structure_fem_part.cpp +++ b/Common/src/geometry/CPhysicalGeometryFEM.cpp @@ -1,15 +1,15 @@ /*! - * \file geometry_structure_fem_part.cpp - * \brief Main subroutines for distributin the grid for the Fluid FEM solver. + * \file CPhysicalGeometryFEM.cpp + * \brief Implementation of the FEM related functions of CPhysicalGeometry. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -25,1850 +25,388 @@ * License along with SU2. If not, see . */ +#include "../../include/toolboxes/CLinearPartitioner.hpp" +#include "../../include/toolboxes/classes_multiple_integers.hpp" +#include "../../include/toolboxes/fem/CFaceOfElement.hpp" +#include "../../include/toolboxes/fem/CMatchingFace.hpp" #include "../../include/geometry/CPhysicalGeometry.hpp" #include "../../include/fem/fem_standard_element.hpp" #include "../../include/geometry/primal_grid/CPrimalGridFEM.hpp" #include "../../include/geometry/primal_grid/CPrimalGridBoundFEM.hpp" -#ifdef HAVE_CGNS -#include "../../include/fem/fem_cgns_elements.hpp" -#endif #include "../../include/adt/CADTElemClass.hpp" #include "../../include/linear_algebra/blas_structure.hpp" #include #include #include -/*--- Epsilon definition ---*/ - -CFaceOfElement::CFaceOfElement() { - nCornerPoints = 0; - cornerPoints[0] = cornerPoints[1] = cornerPoints[2] = cornerPoints[3] = ULONG_MAX; - elemID0 = elemID1 = ULONG_MAX; - nPolyGrid0 = nPolyGrid1 = 0; - nPolySol0 = nPolySol1 = 0; - nDOFsElem0 = nDOFsElem1 = 0; - elemType0 = elemType1 = 0; - faceID0 = faceID1 = 0; - periodicIndex = periodicIndexDonor = 0; - faceIndicator = 0; - - JacFaceIsConsideredConstant = false; - elem0IsOwner = false; -} -CFaceOfElement::CFaceOfElement(const unsigned short VTK_Type, const unsigned short nPoly, const unsigned long* Nodes) { - /* Set the default values of the member variables. */ - nCornerPoints = 0; - cornerPoints[0] = cornerPoints[1] = cornerPoints[2] = cornerPoints[3] = ULONG_MAX; - elemID0 = elemID1 = ULONG_MAX; - nPolyGrid0 = nPolyGrid1 = 0; - nPolySol0 = nPolySol1 = 0; - nDOFsElem0 = nDOFsElem1 = 0; - elemType0 = elemType1 = 0; - faceID0 = faceID1 = 0; - periodicIndex = periodicIndexDonor = 0; - faceIndicator = 0; - - JacFaceIsConsideredConstant = false; - elem0IsOwner = false; - - /* Determine the face element type and set the corner points accordingly. */ - switch (VTK_Type) { - case LINE: { - nCornerPoints = 2; - cornerPoints[0] = Nodes[0]; - cornerPoints[1] = Nodes[nPoly]; - break; - } +void CPhysicalGeometry::LoadLinearlyPartitionedPointsFEM(CConfig* config, CMeshReaderBase* mesh) { + /*--- Get the partitioned coordinates and their global IDs from the mesh object. ---*/ + const auto& gridCoords = mesh->GetLocalPointCoordinates(); + const auto& globalPointIDs = mesh->GetGlobalPointIDs(); - case TRIANGLE: { - const unsigned short ind2 = (nPoly + 1) * (nPoly + 2) / 2 - 1; - nCornerPoints = 3; - cornerPoints[0] = Nodes[0]; - cornerPoints[1] = Nodes[nPoly]; - cornerPoints[2] = Nodes[ind2]; - break; - } + /*--- Initialize point counts and the grid node data structure. ---*/ - case QUADRILATERAL: { - const unsigned short ind2 = nPoly * (nPoly + 1); - const unsigned short ind3 = (nPoly + 1) * (nPoly + 1) - 1; - nCornerPoints = 4; - cornerPoints[0] = Nodes[0]; - cornerPoints[1] = Nodes[nPoly]; - cornerPoints[2] = Nodes[ind2]; - cornerPoints[3] = Nodes[ind3]; - break; - } + nodes = new CPoint(nPoint, nDim); - default: { - ostringstream message; - message << "Unknown VTK surface element type, " << VTK_Type; - SU2_MPI::Error(message.str(), CURRENT_FUNCTION); - } + /*--- Loop over the points and set the coordinates and global index. ---*/ + for (unsigned long iPoint = 0; iPoint < nPoint; iPoint++) { + for (unsigned short iDim = 0; iDim < nDim; ++iDim) nodes->SetCoord(iPoint, iDim, gridCoords[iDim][iPoint]); + nodes->SetGlobalIndex(iPoint, globalPointIDs[iPoint]); } } -bool CFaceOfElement::operator<(const CFaceOfElement& other) const { - if (nCornerPoints != other.nCornerPoints) return nCornerPoints < other.nCornerPoints; - - for (unsigned short i = 0; i < nCornerPoints; ++i) - if (cornerPoints[i] != other.cornerPoints[i]) return cornerPoints[i] < other.cornerPoints[i]; +void CPhysicalGeometry::LoadLinearlyPartitionedVolumeElementsFEM(CConfig* config, CMeshReaderBase* mesh) { + /*--- Reset the global to local element mapping. ---*/ + Global_to_Local_Elem.clear(); - return false; -} - -bool CFaceOfElement::operator==(const CFaceOfElement& other) const { - if (nCornerPoints != other.nCornerPoints) return false; - for (unsigned short i = 0; i < nCornerPoints; ++i) - if (cornerPoints[i] != other.cornerPoints[i]) return false; + /*--- Get the volume connectivity from the mesh object. ---*/ + const auto& dataElems = mesh->GetLocalVolumeElementConnectivity(); - return true; -} + /*--- Allocate space for the interior elements in our SU2 data + structure. Note that we only instantiate our rank's local set. ---*/ + elem = new CPrimalGrid*[nElem](); -void CFaceOfElement::Copy(const CFaceOfElement& other) { - nCornerPoints = other.nCornerPoints; - for (unsigned short i = 0; i < nCornerPoints; ++i) cornerPoints[i] = other.cornerPoints[i]; - for (unsigned short i = nCornerPoints; i < 4; ++i) cornerPoints[i] = ULONG_MAX; + /*--- Loop over all of the internal, local volumetric elements. ---*/ + unsigned long ind = 0; + unsigned long offsetSolDOFs = 0; + for (unsigned long jElem = 0; jElem < nElem; ++jElem) { + /*--- Create a FEM element from the data dataElems. ---*/ + const auto* dataElem = dataElems.data() + ind; + elem[jElem] = new CPrimalGridFEM(dataElem, offsetSolDOFs); - elemID0 = other.elemID0; - elemID1 = other.elemID1; + /*--- Store the global to local mapping in Global_to_Local_Elem. ---*/ + Global_to_Local_Elem[dataElem[4]] = jElem; - nPolyGrid0 = other.nPolyGrid0; - nPolyGrid1 = other.nPolyGrid1; - nPolySol0 = other.nPolySol0; - nPolySol1 = other.nPolySol1; + /*--- Update ind for the next element. ---*/ + ind += dataElem[3] + 5; + } - nDOFsElem0 = other.nDOFsElem0; - nDOFsElem1 = other.nDOFsElem1; - elemType0 = other.elemType0; - elemType1 = other.elemType1; - faceID0 = other.faceID0; - faceID1 = other.faceID1; +#ifdef HAVE_MPI + /* The global offset of the solution DOFs must be corrected when running in + parallel. Therefore gather the number of DOFs of all the ranks. */ + vector nSolDOFsPerRank(size); + SU2_MPI::Allgather(&offsetSolDOFs, 1, MPI_UNSIGNED_LONG, nSolDOFsPerRank.data(), 1, MPI_UNSIGNED_LONG, + SU2_MPI::GetComm()); - periodicIndex = other.periodicIndex; - periodicIndexDonor = other.periodicIndexDonor; - faceIndicator = other.faceIndicator; + /* Determine the offset for the DOFs on this rank. */ + unsigned long offsetRank = 0; + for (int i = 0; i < rank; ++i) offsetRank += nSolDOFsPerRank[i]; - JacFaceIsConsideredConstant = other.JacFaceIsConsideredConstant; - elem0IsOwner = other.elem0IsOwner; + /* Loop over the local elements to correct the global offset of the DOFs. */ + for (unsigned long jElem = 0; jElem < nElem; ++jElem) elem[jElem]->AddOffsetGlobalDOFs(offsetRank); +#endif } -void CFaceOfElement::CreateUniqueNumberingWithOrientation() { - /*--- Determine the element type and create the unique numbering accordingly. ---*/ - bool swapElements = false; - switch (nCornerPoints) { - case 2: { - /* Element is a line. Check if the node numbering must be swapped. If so - also the element information must be swapped, because element 0 is to - the left of the face and element 1 to the right. */ - if (cornerPoints[1] < cornerPoints[0]) { - swap(cornerPoints[0], cornerPoints[1]); - swapElements = true; - } - break; - } - - case 3: { - /* Element is a triangle. The vertices are sorted in increasing order. - If the sequence of the new numbering is opposite to the current - numbering, the element information must be exchanged, because - element 0 is to the left of the face and element 1 to the right. */ - unsigned long nn[] = {cornerPoints[0], cornerPoints[1], cornerPoints[2]}; - unsigned short ind = 0; - if (nn[1] < nn[ind]) ind = 1; - if (nn[2] < nn[ind]) ind = 2; - - unsigned short indm1 = ind == 0 ? 2 : ind - 1; // Next lower index. - unsigned short indp1 = ind == 2 ? 0 : ind + 1; // Next upper index. - - if (nn[indp1] < nn[indm1]) { - /* The orientation of the triangle remains the same. - Store the new sorted node numbering. */ - cornerPoints[0] = nn[ind]; - cornerPoints[1] = nn[indp1]; - cornerPoints[2] = nn[indm1]; - } else { - /* The orientation of the triangle changes. Store the new - sorted node numbering and set swapElements to true. */ - cornerPoints[0] = nn[ind]; - cornerPoints[1] = nn[indm1]; - cornerPoints[2] = nn[indp1]; - swapElements = true; - } +void CPhysicalGeometry::LoadLinearlyPartitionedSurfaceElementsFEM(CConfig* config, CMeshReaderBase* mesh) { + /*--- Store the number of markers and print to the screen. ---*/ + nMarker = mesh->GetNumberOfMarkers(); + config->SetnMarker_All(nMarker); + if (rank == MASTER_NODE) cout << nMarker << " surface markers." << endl; - break; - } + /*--- Create the data structure for boundary elements. ---*/ + bound = new CPrimalGrid**[nMarker]; + nElem_Bound = new unsigned long[nMarker]; + Tag_to_Marker = new string[config->GetnMarker_Max()]; + + /*--- Retrieve the name of the surface markers as well as + the number of surface elements for every marker. ---*/ + const auto& sectionNames = mesh->GetMarkerNames(); + const auto& nSurfElemPerMarker = mesh->GetNumberOfSurfaceElementsAllMarkers(); + + /*--- Loop over all sections that we extracted from the grid file + that were identified as boundary element sections so that we can + store those elements into our SU2 data structures. ---*/ + for (int iMarker = 0; iMarker < nMarker; ++iMarker) { + /*--- Get the string name and set the number of surface elements + for this marker. ---*/ + string Marker_Tag = sectionNames[iMarker]; + nElem_Bound[iMarker] = nSurfElemPerMarker[iMarker]; + + /*--- Allocate the memory of the pointers for the surface + elements for this marker. ---*/ + bound[iMarker] = new CPrimalGrid*[nElem_Bound[iMarker]]; - case 4: { - /* Element is a quadrilateral. The vertices are sorted in increasing order - under the condition neighboring vertices remain neighbors. If the - sequence of the new numbering is opposite to the current - numbering, the element information must be exchanged, because - element 0 is to the left of the face and element 1 to the right. */ - unsigned long nn[] = {cornerPoints[0], cornerPoints[1], cornerPoints[2], cornerPoints[3]}; - unsigned short ind = 0; - if (nn[1] < nn[ind]) ind = 1; - if (nn[2] < nn[ind]) ind = 2; - if (nn[3] < nn[ind]) ind = 3; - - unsigned short indm1 = ind == 0 ? 3 : ind - 1; // Next lower index. - unsigned short indp1 = ind == 3 ? 0 : ind + 1; // Next upper index. - unsigned short indp2 = ind >= 2 ? ind - 2 : ind + 2; // Opposite index. - - if (nn[indp1] < nn[indm1]) { - /* The orientation of the quadrilateral remains the same. - Store the new sorted node numbering. */ - cornerPoints[0] = nn[ind]; - cornerPoints[1] = nn[indp1]; - cornerPoints[2] = nn[indp2]; - cornerPoints[3] = nn[indm1]; - } else { - /* The orientation of the quadrilateral changes. Store the new - sorted node numbering and set swapElements to true. */ - cornerPoints[0] = nn[ind]; - cornerPoints[1] = nn[indm1]; - cornerPoints[2] = nn[indp2]; - cornerPoints[3] = nn[indp1]; - swapElements = true; - } + /*--- Retrieve the boundary element data for this marker. ---*/ + const auto& dataElems = mesh->GetSurfaceElementConnectivityForMarker(iMarker); - break; - } + /*--- Loop over the number of boundary elements for this marker. ---*/ + unsigned long ind = 0; + for (unsigned long jElem = 0; jElem < nElem_Bound[iMarker]; ++jElem) { + /*--- Create a boundary FEM element from the data dataElems. ---*/ + const auto* dataElem = dataElems.data() + ind; + bound[iMarker][jElem] = new CPrimalGridBoundFEM(dataElem); - default: { - ostringstream message; - message << "Unknown surface element type with " << nCornerPoints << " corners." << endl; - SU2_MPI::Error(message.str(), CURRENT_FUNCTION); + /*--- Update ind for the next element. ---*/ + ind += dataElem[2] + 5; } - } - /* Swap the element information, if needed. */ - if (swapElements) { - swap(elemID0, elemID1); - swap(nPolyGrid0, nPolyGrid1); - swap(nPolySol0, nPolySol1); - swap(nDOFsElem0, nDOFsElem1); - swap(elemType0, elemType1); - swap(faceID0, faceID1); + /*--- Update config file lists in order to store the boundary + information for this marker in the correct place. ---*/ + Tag_to_Marker[config->GetMarker_CfgFile_TagBound(Marker_Tag)] = Marker_Tag; + config->SetMarker_All_TagBound(iMarker, Marker_Tag); + config->SetMarker_All_KindBC(iMarker, config->GetMarker_CfgFile_KindBC(Marker_Tag)); + config->SetMarker_All_Monitoring(iMarker, config->GetMarker_CfgFile_Monitoring(Marker_Tag)); + config->SetMarker_All_GeoEval(iMarker, config->GetMarker_CfgFile_GeoEval(Marker_Tag)); + config->SetMarker_All_Designing(iMarker, config->GetMarker_CfgFile_Designing(Marker_Tag)); + config->SetMarker_All_Plotting(iMarker, config->GetMarker_CfgFile_Plotting(Marker_Tag)); + config->SetMarker_All_Analyze(iMarker, config->GetMarker_CfgFile_Analyze(Marker_Tag)); + config->SetMarker_All_ZoneInterface(iMarker, config->GetMarker_CfgFile_ZoneInterface(Marker_Tag)); + config->SetMarker_All_DV(iMarker, config->GetMarker_CfgFile_DV(Marker_Tag)); + config->SetMarker_All_Moving(iMarker, config->GetMarker_CfgFile_Moving(Marker_Tag)); + config->SetMarker_All_Deform_Mesh(iMarker, config->GetMarker_CfgFile_Deform_Mesh(Marker_Tag)); + config->SetMarker_All_Fluid_Load(iMarker, config->GetMarker_CfgFile_Fluid_Load(Marker_Tag)); + config->SetMarker_All_PyCustom(iMarker, config->GetMarker_CfgFile_PyCustom(Marker_Tag)); + config->SetMarker_All_PerBound(iMarker, config->GetMarker_CfgFile_PerBound(Marker_Tag)); + config->SetMarker_All_SendRecv(iMarker, NONE); + config->SetMarker_All_Turbomachinery(iMarker, config->GetMarker_CfgFile_Turbomachinery(Marker_Tag)); + config->SetMarker_All_TurbomachineryFlag(iMarker, config->GetMarker_CfgFile_TurbomachineryFlag(Marker_Tag)); + config->SetMarker_All_MixingPlaneInterface(iMarker, config->GetMarker_CfgFile_MixingPlaneInterface(Marker_Tag)); } } -void CBoundaryFace::Copy(const CBoundaryFace& other) { - VTK_Type = other.VTK_Type; - nPolyGrid = other.nPolyGrid; - nDOFsGrid = other.nDOFsGrid; - globalBoundElemID = other.globalBoundElemID; - domainElementID = other.domainElementID; - Nodes = other.Nodes; -} +void CPhysicalGeometry::SetColorFEMGrid_Parallel(CConfig* config) { + /*--- Initialize the color vector of the elements. ---*/ + for (unsigned long i = 0; i < nElem; ++i) elem[i]->SetColor(0); -CMatchingFace::CMatchingFace() { - nCornerPoints = 0; - nDim = 0; - nPoly = 0; - nDOFsElem = 0; - elemType = 0; - elemID = 0; + /*--- Determine the matching faces of the local elements. ---*/ + vector localFaces; + DetermineMatchingFacesFEMGrid(config, localFaces); - cornerCoor[0][0] = cornerCoor[0][1] = cornerCoor[0][2] = 0.0; - cornerCoor[1][0] = cornerCoor[1][1] = cornerCoor[1][2] = 0.0; - cornerCoor[2][0] = cornerCoor[2][1] = cornerCoor[2][2] = 0.0; - cornerCoor[3][0] = cornerCoor[3][1] = cornerCoor[3][2] = 0.0; + /*--- In the procedure above the periodic boundaries are not found. + A different treatment must be used in order to find these. ---*/ + DeterminePeriodicFacesFEMGrid(config, localFaces); - tolForMatching = 0.0; -} + /*--- So far only the matching faces have been found. Now find the + non-matching faces of the local elements. ---*/ + DetermineNonMatchingFacesFEMGrid(config, localFaces); -bool CMatchingFace::operator<(const CMatchingFace& other) const { - /* First compare the number of corner points. ---*/ - if (nCornerPoints != other.nCornerPoints) return nCornerPoints < other.nCornerPoints; + /*--- Determine whether or not the Jacobians of the elements and faces + can be considered constant. ---*/ + DetermineFEMConstantJacobiansAndLenScale(config); - /*--- Determine the tolerance for comparing both objects. ---*/ - const su2double tol = min(tolForMatching, other.tolForMatching); + /*--- Determine the donor elements for the wall function treatment. ---*/ + DetermineDonorElementsWallFunctions(config); - /*--- Loop over the number of corner points and dimensions and compare the - coordinates. If considered different, return true if the current face - is considered smaller and false otherwise. ---*/ - for (unsigned short k = 0; k < nCornerPoints; ++k) { - for (unsigned short l = 0; l < nDim; ++l) { - if (fabs(cornerCoor[k][l] - other.cornerCoor[k][l]) > tol) return cornerCoor[k][l] < other.cornerCoor[k][l]; - } - } + /*--- Determine the time levels of the elements. This is only relevant + when time accurate local time stepping is employed. ---*/ + map mapExternalElemIDToTimeLevel; + DetermineTimeLevelElements(config, localFaces, mapExternalElemIDToTimeLevel); - /*--- Both objects are considered the same. Return false. ---*/ - return false; -} + /*--- Determine the ownership of the internal faces, i.e. which adjacent + element is responsible for computing the fluxes through the face. ---*/ + DetermineOwnershipInternalFaces(localFaces, mapExternalElemIDToTimeLevel); -void CMatchingFace::SortFaceCoordinates() { - /*--- Determine the tolerance for a matching point for this face. This is - accomplished by computing the minimum distance between the points of - the face, multiplied by a relative tolerance. ---*/ - for (unsigned short k = 0; k < nCornerPoints; ++k) { - for (unsigned short j = (k + 1); j < nCornerPoints; ++j) { - su2double dist = 0.0; - for (unsigned short l = 0; l < nDim; ++l) { - su2double ds = cornerCoor[k][l] - cornerCoor[j][l]; - dist += ds * ds; - } - dist = sqrt(dist); + /*--- All the matching face information is known now, including periodic + faces. Store the information of the neighbors in the data structure + for the local elements. ---*/ + StoreFaceInfoInLocalElements(localFaces); - if (k == 0 && j == 1) - tolForMatching = dist; - else - tolForMatching = min(tolForMatching, dist); - } - } + /*--- Create the vector of vectors that describe the connectivity + of the graph. ---*/ + vector > adjacency; + DetermineGraphAdjacency(localFaces, adjacency); - tolForMatching *= 1.e-6; - - /*--- Sort the points in increasing order based on the coordinates. - An insertion sort algorithm is used, which is quite efficient - for at most four corner points. ---*/ - for (unsigned short k = 1; k < nCornerPoints; ++k) { - for (unsigned short j = k; j > 0; --j) { - /* Check if cornerCoor[j] is considered less than cornerCoor[j-1]. */ - bool lessThan = false; - for (unsigned short l = 0; l < nDim; ++l) { - if (fabs(cornerCoor[j][l] - cornerCoor[j - 1][l]) > tolForMatching) { - lessThan = cornerCoor[j][l] < cornerCoor[j - 1][l]; - break; - } - } + /* Determine the weigts of the graph. */ + vector vwgt; + vector > adjwgt; + DetermineFEMGraphWeights(config, localFaces, adjacency, mapExternalElemIDToTimeLevel, vwgt, adjwgt); - /* If cornerCoor[j] is less than cornerCoor[j-1] they must be swapped. - Otherwise an exit can be made from the j-loop. */ - if (lessThan) { - for (unsigned short l = 0; l < nDim; ++l) swap(cornerCoor[j][l], cornerCoor[j - 1][l]); - } else - break; - } - } -} + /*--- The remainder of this function should only be called if we have parallel + support with MPI. ---*/ +#ifdef HAVE_MPI -void CMatchingFace::Copy(const CMatchingFace& other) { - nCornerPoints = other.nCornerPoints; - nDim = other.nDim; - nPoly = other.nPoly; - nDOFsElem = other.nDOFsElem; - elemType = other.elemType; - elemID = other.elemID; - - for (unsigned short k = 0; k < nCornerPoints; ++k) { - for (unsigned l = 0; l < nDim; ++l) { - cornerCoor[k][l] = other.cornerCoor[k][l]; + /*--- If the ParMETIS library is compiled and linked, the colors + or determined via ParMETIS. Otherwise a linear distribution + is used, which is usually inefficient. ---*/ +#ifdef HAVE_PARMETIS + DetermineFEMColorsViaParMETIS(adjacency, vwgt, adjwgt); +#else + if (size > SINGLE_NODE) { + if (rank == MASTER_NODE) { + cout << endl; + cout << "--------------------- WARNING -------------------------------" << endl; + cout << "SU2 compiled without PARMETIS. A linear distribution is used." << endl; + cout << "This is very inefficient" << endl; + cout << "-------------------------------------------------------------" << endl; + cout << endl; } - } - - tolForMatching = other.tolForMatching; -} -void CPhysicalGeometry::Read_SU2_Format_Parallel_FEM(CConfig* config, const string& val_mesh_filename, - unsigned short val_iZone, unsigned short val_nZone) { - string text_line, Marker_Tag; - ifstream mesh_file; - string::size_type position; - unsigned long nDOFsGrid_Local = 0, loc_element_count = 0; - bool domain_flag = false; - bool time_spectral = config->GetTime_Marching() == TIME_MARCHING::HARMONIC_BALANCE; - unsigned short nMarker_Max = config->GetnMarker_Max(); - nZone = val_nZone; - - /*--- Initialize counters for local/global points & elements ---*/ - Global_nPoint = 0; - Global_nPointDomain = 0; - Global_nElem = 0; - nelem_edge = 0; - Global_nelem_edge = 0; - nelem_triangle = 0; - Global_nelem_triangle = 0; - nelem_quad = 0; - Global_nelem_quad = 0; - nelem_tetra = 0; - Global_nelem_tetra = 0; - nelem_hexa = 0; - Global_nelem_hexa = 0; - nelem_prism = 0; - Global_nelem_prism = 0; - nelem_pyramid = 0; - Global_nelem_pyramid = 0; - - /*--- Allocate memory for the linear partition of the elements of the mesh. - These arrays are the size of the number of ranks. ---*/ - - beg_node = new unsigned long[size]; - end_node = new unsigned long[size]; - nPointLinear = new unsigned long[size]; - - /*--- Open grid file ---*/ - - mesh_file.open(val_mesh_filename.c_str(), ios::in); - - /*--- Check the grid ---*/ - - if (mesh_file.fail()) - SU2_MPI::Error(string("There is no mesh file (CPhysicalGeometry)!! ") + val_mesh_filename, CURRENT_FUNCTION); - - /*--- If more than one, find the zone in the mesh file ---*/ - - if (val_nZone > 1 || time_spectral) { - if (time_spectral) { - if (rank == MASTER_NODE) cout << "Reading time spectral instance " << val_iZone + 1 << ":" << endl; - } else { - while (getline(mesh_file, text_line)) { - /*--- Search for the current domain ---*/ - position = text_line.find("IZONE=", 0); - if (position != string::npos) { - text_line.erase(0, 6); - unsigned short jDomain = atoi(text_line.c_str()); - if (jDomain == val_iZone + 1) { - if (rank == MASTER_NODE) cout << "Reading zone " << val_iZone + 1 << " points:" << endl; - break; - } - } - } - } + /* Set the color to the current rank. */ + for (unsigned long i = 0; i < nElem; ++i) elem[i]->SetColor(rank); } +#endif /* HAVE_PARMETIS */ +#endif /* HAVE_MPI */ +} - /*--- Read grid file with format SU2 ---*/ - - while (getline(mesh_file, text_line)) { - /*--- Read the dimension of the problem ---*/ - - position = text_line.find("NDIME=", 0); - if (position != string::npos) { - if (!domain_flag) { - text_line.erase(0, 6); - nDim = atoi(text_line.c_str()); - if (rank == MASTER_NODE) { - if (nDim == 2) cout << "Two dimensional problem." << endl; - if (nDim == 3) cout << "Three dimensional problem." << endl; - } - domain_flag = true; - } else { - break; - } - } - - /*--- Read the information about inner elements ---*/ - - position = text_line.find("NELEM=", 0); - if (position != string::npos) { - text_line.erase(0, 6); - stringstream stream_line(text_line); - stream_line >> Global_nElem; - - if ((rank == MASTER_NODE) && (size > SINGLE_NODE)) - cout << Global_nElem << " interior elements before parallel partitioning." << endl; - - /*--- Check if the number of cores used is larger than the number of - elements. Terminate if this is the case, because it does not make - sense to do this. ---*/ - unsigned long nCores = size; // Correct for the number of cores per rank. - if (nCores > Global_nElem) { - ostringstream message; - message << "The number of cores, " << nCores; - message << ", is larger than the number of elements, " << Global_nElem << "." << endl; - message << "This is not an efficient use of the resources and therefore " - << "SU2 will terminate."; - - SU2_MPI::Error(message.str(), CURRENT_FUNCTION); - } - - /*--- Compute the number of elements that will be on each processor. - This is a linear partitioning with the addition of a simple load - balancing for any remainder elements. ---*/ - unsigned long total_elem_accounted = 0; - for (unsigned long i = 0; i < (unsigned long)size; i++) { - nPointLinear[i] = Global_nElem / size; - total_elem_accounted = total_elem_accounted + nPointLinear[i]; - } - - /*--- Get the number of remainder elements after the even division ---*/ - unsigned long rem_elem = Global_nElem - total_elem_accounted; - for (unsigned long i = 0; i < rem_elem; i++) { - ++nPointLinear[i]; - } - - /*--- Store the local number of elements and the beginning/end index ---*/ - nElem = nPointLinear[rank]; - beg_node[0] = 0; - end_node[0] = beg_node[0] + nPointLinear[0]; - for (unsigned long i = 1; i < (unsigned long)size; i++) { - beg_node[i] = end_node[i - 1]; - end_node[i] = beg_node[i] + nPointLinear[i]; - } - - /*--- Allocate space for elements ---*/ - elem = new CPrimalGrid*[nElem](); - - /*--- Loop over all the elements and store the elements to be stored on - this rank. Furthermore, determine the total amount of DOFs for - the solution (which may differ from the number of DOFS for the - grid). ---*/ - unsigned long nDOFs_tot = 0; - for (unsigned long i = 0; i < Global_nElem; i++) { - getline(mesh_file, text_line); - istringstream elem_line(text_line); - - /*--- Read the value that defines the element type, the polynomial - degree of the geometry and the polynomial degree of the - solution. Extract this info as well. ---*/ - unsigned long typeRead; - elem_line >> typeRead; - unsigned long typeReadErrorMessage = typeRead; - unsigned short nPolySol, nPolyGrid; - if (typeRead > 10000) { - nPolySol = typeRead / 10000 - 1; - typeRead = typeRead % 10000; - nPolyGrid = typeRead / 100 + 1; - } else { - nPolyGrid = typeRead / 100 + 1; - nPolySol = nPolyGrid; - } - - unsigned short VTK_Type = typeRead % 100; +void CPhysicalGeometry::DetermineGraphAdjacency(const vector& localFaces, + vector >& adjacency) { + /*--- Define the linear partitioning of the elements. ---*/ + CLinearPartitioner elemPartitioner(Global_nElem, 0); - unsigned short nDOFsGrid = CFEMStandardElementBase::GetNDOFsStatic(VTK_Type, nPolyGrid, typeReadErrorMessage); - unsigned short nDOFsSol = CFEMStandardElementBase::GetNDOFsStatic(VTK_Type, nPolySol, typeReadErrorMessage); + /*--- Allocate the memory for the first index of adjacency. ---*/ + adjacency.resize(nElem); - /*--- Allocate the memory for a new primary grid FEM element if - this element must be stored on this rank. ---*/ - if ((i >= beg_node[rank]) && (i < end_node[rank])) { - elem[loc_element_count] = - new CPrimalGridFEM(i, VTK_Type, nPolyGrid, nPolySol, nDOFsGrid, nDOFsSol, nDOFs_tot, elem_line); - nDOFsGrid_Local += nDOFsGrid; - loc_element_count++; - } + /*--- Loop over the matching faces to create the adjacency coming from internal faces. ---*/ + for (auto FI = localFaces.begin(); FI != localFaces.end(); ++FI) { + /*--- Determine the local index of elem0, which is always stored locally, + and add elemID1 to the adjacency list. ---*/ + const unsigned long elem0 = FI->elemID0 - elemPartitioner.GetFirstIndexOnRank(rank); + adjacency[elem0].push_back(FI->elemID1); - /*--- Update the total value of the number of DOFs. ---*/ - nDOFs_tot += nDOFsSol; + /*--- Check if this is not a periodic face and if the second element is + also a local element. If so, add elemID0 to the adjacency list ---*/ + if (FI->periodicIndex == 0) { + if (elemPartitioner.GetRankContainingIndex(FI->elemID1) == static_cast(rank)) { + const unsigned long elem1 = FI->elemID1 - elemPartitioner.GetFirstIndexOnRank(rank); + adjacency[elem1].push_back(FI->elemID0); } - - /*--- Break from the loop to find the element information. ---*/ - break; } } - mesh_file.close(); - - /*--- Create a vector, which contains the global node IDs of the local elements. ---*/ - vector nodeIDsElemLoc; - nodeIDsElemLoc.reserve(nDOFsGrid_Local); - for (unsigned long i = 0; i < loc_element_count; i++) { - unsigned short nDOFsElem = elem[i]->GetnNodes(); - for (unsigned short j = 0; j < nDOFsElem; ++j) nodeIDsElemLoc.push_back(elem[i]->GetNode(j)); + /*--- It is possible that some neighbors appear multiple times due to e.g. + periodic boundary conditions. ParMETIS is not able to deal with this + situation, hence these multiple entries must be removed. ---*/ + for (unsigned long i = 0; i < nElem; ++i) { + sort(adjacency[i].begin(), adjacency[i].end()); + auto lastEntry = unique(adjacency[i].begin(), adjacency[i].end()); + adjacency[i].erase(lastEntry, adjacency[i].end()); } - sort(nodeIDsElemLoc.begin(), nodeIDsElemLoc.end()); - vector::iterator lastNode; - lastNode = unique(nodeIDsElemLoc.begin(), nodeIDsElemLoc.end()); - nodeIDsElemLoc.erase(lastNode, nodeIDsElemLoc.end()); - - /*--- Allocate the memory for the coordinates to be stored on this rank. ---*/ - nPoint = nodeIDsElemLoc.size(); - nodes = new CPoint(nPoint, nDim); - - /*--- Open the grid file again and go to the position where - the correct zone is stored. ---*/ - mesh_file.open(val_mesh_filename.c_str(), ios::in); - - if (val_nZone > 1 && !time_spectral) { - while (getline(mesh_file, text_line)) { - position = text_line.find("IZONE=", 0); - if (position != string::npos) { - text_line.erase(0, 6); - unsigned short jDomain = atoi(text_line.c_str()); - if (jDomain == val_iZone + 1) break; - } - } - } + /*--- Due to periodic boundary conditions it is also possible that self entries + are present. ParMETIS is not able to deal with self entries, hence + they must be removed as well. ---*/ + for (unsigned long i = 0; i < nElem; ++i) { + const unsigned long globalElemID = i + elemPartitioner.GetFirstIndexOnRank(rank); + unsigned long nEntriesNew = adjacency[i].size(); - /*--- While loop to read the point information. ---*/ - while (getline(mesh_file, text_line)) { - position = text_line.find("NPOIN=", 0); - if (position != string::npos) { - text_line.erase(0, 6); - stringstream stream_line(text_line); - stream_line >> Global_nPoint; - - /*--- Loop over the global number of points and store the - ones that are needed on this processor. ---*/ - unsigned long ii = 0; - for (unsigned long i = 0; i < Global_nPoint; ++i) { - getline(mesh_file, text_line); - - if (binary_search(nodeIDsElemLoc.begin(), nodeIDsElemLoc.end(), i)) { - istringstream point_line(text_line); - su2double Coord[3] = {0.0}; - point_line >> Coord[0]; - point_line >> Coord[1]; - if (nDim == 3) point_line >> Coord[2]; - nodes->SetCoord(ii, Coord); - nodes->SetGlobalIndex(ii, i); - ++ii; - } + for (auto& adj : adjacency[i]) { + if (adj == globalElemID) { + adj = ULONG_MAX; + --nEntriesNew; } - - break; - } - } - - mesh_file.close(); - - /*--- Determine the faces of the local elements. --- */ - vector localFaces; - for (unsigned long k = 0; k < loc_element_count; k++) { - /*--- Get the global IDs of the corner points of all the faces of this elements. ---*/ - unsigned short nFaces; - unsigned short nPointsPerFace[6]; - unsigned long faceConn[6][4]; - - elem[k]->GetCornerPointsAllFaces(nFaces, nPointsPerFace, faceConn); - - /*--- Loop over the faces and add them to localFaces. ---*/ - for (unsigned short i = 0; i < nFaces; ++i) { - CFaceOfElement thisFace; - thisFace.nCornerPoints = nPointsPerFace[i]; - for (unsigned short j = 0; j < nPointsPerFace[i]; ++j) thisFace.cornerPoints[j] = faceConn[i][j]; - thisFace.elemID0 = k + beg_node[rank]; - - thisFace.CreateUniqueNumbering(); - localFaces.push_back(thisFace); } - } - /*--- Sort localFaces in increasing order and remove the double entities, - such that the binary search later on is a bit more efficient. ---*/ - sort(localFaces.begin(), localFaces.end()); - vector::iterator lastFace; - lastFace = unique(localFaces.begin(), localFaces.end()); - localFaces.erase(lastFace, localFaces.end()); - - /*--- Open the grid file again and go to the position where - the correct zone is stored. ---*/ - mesh_file.open(val_mesh_filename.c_str(), ios::in); - - if (val_nZone > 1 && !time_spectral) { - while (getline(mesh_file, text_line)) { - position = text_line.find("IZONE=", 0); - if (position != string::npos) { - text_line.erase(0, 6); - unsigned short jDomain = atoi(text_line.c_str()); - if (jDomain == val_iZone + 1) break; - } - } + sort(adjacency[i].begin(), adjacency[i].end()); + adjacency[i].resize(nEntriesNew); } - /*--- While loop to read the boundary information. ---*/ - while (getline(mesh_file, text_line)) { - /*--- Read number of markers ---*/ - position = text_line.find("NMARK=", 0); - if (position != string::npos) { - text_line.erase(0, 6); - istringstream stream_line(text_line); - stream_line >> nMarker; - - if (rank == MASTER_NODE) cout << nMarker << " surface markers." << endl; - config->SetnMarker_All(nMarker); - bound = new CPrimalGrid**[nMarker]; - nElem_Bound = new unsigned long[nMarker]; - Tag_to_Marker = new string[nMarker_Max]; - - for (unsigned short iMarker = 0; iMarker < nMarker; iMarker++) { - getline(mesh_file, text_line); - text_line.erase(0, 11); - text_line.erase(remove(text_line.begin(), text_line.end(), ' '), text_line.end()); - text_line.erase(remove(text_line.begin(), text_line.end(), '\r'), text_line.end()); - text_line.erase(remove(text_line.begin(), text_line.end(), '\n'), text_line.end()); - - Marker_Tag = text_line; - - /*--- Read the number of elements for this marker. ---*/ - getline(mesh_file, text_line); - text_line.erase(0, 13); - istringstream nmark_line(text_line); - unsigned long nElem_Bound_Global; - nmark_line >> nElem_Bound_Global; - if (rank == MASTER_NODE) - cout << nElem_Bound_Global << " boundary elements in index " << iMarker << " (Marker = " << Marker_Tag << ")." - << endl; - - /*--- Define a vector of FEM boundary elements to store the local boundary faces. ---*/ - vector boundElems; - - /*--- Loop over the global boundary faces. ---*/ - for (unsigned long i = 0; i < nElem_Bound_Global; ++i) { - getline(mesh_file, text_line); - istringstream bound_line(text_line); - - /*--- Determine the element type, its number of DOFs and read - its node IDs. ---*/ - unsigned long typeRead; - bound_line >> typeRead; - unsigned short nPolyGrid = typeRead / 100 + 1; - unsigned short VTK_Type = typeRead % 100; - unsigned short nDOFEdgeGrid = nPolyGrid + 1; - - unsigned short nDOFsGrid = 0; - CFaceOfElement thisFace; - thisFace.cornerPoints[0] = 0; - thisFace.cornerPoints[1] = nPolyGrid; - switch (VTK_Type) { - case LINE: - nDOFsGrid = nDOFEdgeGrid; - thisFace.nCornerPoints = 2; - break; + /*--- Possibly add the connectivities in the graph from the wall function + treatment. As these connectivities are one-sided, they must be stored + and communicated later. ---*/ + vector additionalExternalEntriesGraph; - case TRIANGLE: - nDOFsGrid = nDOFEdgeGrid * (nDOFEdgeGrid + 1) / 2; - thisFace.nCornerPoints = 3; - thisFace.cornerPoints[2] = nDOFsGrid - 1; - break; + for (unsigned short iMarker = 0; iMarker < nMarker; ++iMarker) { + for (unsigned long l = 0; l < nElem_Bound[iMarker]; ++l) { + /* Get the global and local element ID adjacent to this boundary face. */ + const unsigned long globalElemID = bound[iMarker][l]->GetDomainElement(); + const unsigned long elemID = globalElemID - elemPartitioner.GetFirstIndexOnRank(rank); - case QUADRILATERAL: - nDOFsGrid = nDOFEdgeGrid * nDOFEdgeGrid; - thisFace.nCornerPoints = 4; - thisFace.cornerPoints[2] = nPolyGrid * nDOFEdgeGrid; - thisFace.cornerPoints[3] = nDOFsGrid - 1; - break; + /* Get the number of donor elements for the wall function treatment + and the pointer to the array which stores this info. */ + const unsigned short nDonors = bound[iMarker][l]->GetNDonorsWallFunctions(); + const unsigned long* donors = bound[iMarker][l]->GetDonorsWallFunctions(); - default: - ostringstream message; - message << "Unknown FEM boundary element value, " << typeRead << ", in " << val_mesh_filename; - SU2_MPI::Error(message.str(), CURRENT_FUNCTION); - } + /* Loop over the number of donors and add the entry in the graph, + if not already present. */ + for (unsigned short i = 0; i < nDonors; ++i) { + if (donors[i] != globalElemID) { + if (!binary_search(adjacency[elemID].begin(), adjacency[elemID].end(), donors[i])) { + /* Donor not present in the graph for elemID. Add it and sort it + afterwards, such that a binary search can be applied later. */ + adjacency[elemID].push_back(donors[i]); + sort(adjacency[elemID].begin(), adjacency[elemID].end()); - vector nodeIDs(nDOFsGrid); - for (unsigned short j = 0; j < nDOFsGrid; ++j) bound_line >> nodeIDs[j]; - - /*--- Convert the local numbering of thisFace to global numbering - and create a unique numbering of these nodes. ---*/ - for (unsigned short j = 0; j < thisFace.nCornerPoints; ++j) - thisFace.cornerPoints[j] = nodeIDs[thisFace.cornerPoints[j]]; - thisFace.CreateUniqueNumbering(); - - /*--- Check if this boundary face must be stored on this rank. - If so, create an object of CBoundaryFace and add it - to boundElems. ---*/ - vector::iterator low; - low = lower_bound(localFaces.begin(), localFaces.end(), thisFace); - if (low != localFaces.end()) { - if (!(thisFace < *low)) { - CBoundaryFace thisBoundFace; - thisBoundFace.VTK_Type = VTK_Type; - thisBoundFace.nPolyGrid = nPolyGrid; - thisBoundFace.nDOFsGrid = nDOFsGrid; - thisBoundFace.globalBoundElemID = i; - thisBoundFace.domainElementID = low->elemID0; - thisBoundFace.Nodes = nodeIDs; - - boundElems.push_back(thisBoundFace); + /* Check if the donor element is stored locally. */ + if (elemPartitioner.GetRankContainingIndex(donors[i]) == static_cast(rank)) { + /* Donor is stored locally. Add the entry to the graph + and sort it afterwards. */ + const unsigned long localDonorID = donors[i] - elemPartitioner.GetFirstIndexOnRank(rank); + adjacency[localDonorID].push_back(globalElemID); + sort(adjacency[localDonorID].begin(), adjacency[localDonorID].end()); + } else { + /* Donor is stored externally. Store the graph entry in + additionalExternalEntriesGraph. */ + additionalExternalEntriesGraph.push_back(donors[i]); + additionalExternalEntriesGraph.push_back(globalElemID); } } } - - /*--- Allocate space for the boundary elements and store the ones - whose parent element is stored on this rank. ---*/ - nElem_Bound[iMarker] = boundElems.size(); - bound[iMarker] = new CPrimalGrid*[nElem_Bound[iMarker]]; - - for (unsigned long i = 0; i < nElem_Bound[iMarker]; ++i) - bound[iMarker][i] = new CPrimalGridBoundFEM(boundElems[i].globalBoundElemID, boundElems[i].domainElementID, - boundElems[i].VTK_Type, boundElems[i].nPolyGrid, - boundElems[i].nDOFsGrid, boundElems[i].Nodes); - - /*--- Update config information storing the boundary information in the right place ---*/ - Tag_to_Marker[config->GetMarker_CfgFile_TagBound(Marker_Tag)] = Marker_Tag; - config->SetMarker_All_TagBound(iMarker, Marker_Tag); - config->SetMarker_All_KindBC(iMarker, config->GetMarker_CfgFile_KindBC(Marker_Tag)); - config->SetMarker_All_Monitoring(iMarker, config->GetMarker_CfgFile_Monitoring(Marker_Tag)); - config->SetMarker_All_GeoEval(iMarker, config->GetMarker_CfgFile_GeoEval(Marker_Tag)); - config->SetMarker_All_Designing(iMarker, config->GetMarker_CfgFile_Designing(Marker_Tag)); - config->SetMarker_All_Plotting(iMarker, config->GetMarker_CfgFile_Plotting(Marker_Tag)); - config->SetMarker_All_Analyze(iMarker, config->GetMarker_CfgFile_Analyze(Marker_Tag)); - config->SetMarker_All_ZoneInterface(iMarker, config->GetMarker_CfgFile_ZoneInterface(Marker_Tag)); - config->SetMarker_All_DV(iMarker, config->GetMarker_CfgFile_DV(Marker_Tag)); - config->SetMarker_All_Moving(iMarker, config->GetMarker_CfgFile_Moving(Marker_Tag)); - config->SetMarker_All_SobolevBC(iMarker, config->GetMarker_CfgFile_SobolevBC(Marker_Tag)); - config->SetMarker_All_PerBound(iMarker, config->GetMarker_CfgFile_PerBound(Marker_Tag)); - config->SetMarker_All_SendRecv(iMarker, NONE); } - - break; } } - mesh_file.close(); -} - -void CPhysicalGeometry::Read_CGNS_Format_Parallel_FEM(CConfig* config, const string& val_mesh_filename, - unsigned short val_iZone, unsigned short val_nZone) { -#ifdef HAVE_CGNS - - /*--- For proper support of the high order elements, at least version 3.3 - of CGNS must be used. Check this. ---*/ -#if CGNS_VERSION >= 3300 - - /*--- Check whether the supplied file is truly a CGNS file. ---*/ - int file_type; - if (cg_is_cgns(val_mesh_filename.c_str(), &file_type) != CG_OK) - SU2_MPI::Error(val_mesh_filename + string(" is not a CGNS file that can be read."), CURRENT_FUNCTION); - - /*--- Initialize counters for local/global points & elements ---*/ - Global_nPoint = 0; - Global_nPointDomain = 0; - Global_nElem = 0; - nelem_edge = 0; - Global_nelem_edge = 0; - nelem_triangle = 0; - Global_nelem_triangle = 0; - nelem_quad = 0; - Global_nelem_quad = 0; - nelem_tetra = 0; - Global_nelem_tetra = 0; - nelem_hexa = 0; - Global_nelem_hexa = 0; - nelem_prism = 0; - Global_nelem_prism = 0; - nelem_pyramid = 0; - Global_nelem_pyramid = 0; +#ifdef HAVE_MPI + /*--- Create the send buffers with the additional graph data and determine + to which ranks data is sent. ---*/ + vector > sendBufsGraphData(size, vector(0)); + vector sendToRank(size, 0); - /*--------------------------------------------------------------------------*/ - /*--- Checking of the file, determine the dimensions, etc. ---*/ - /*--------------------------------------------------------------------------*/ + for (unsigned long i = 0; i < additionalExternalEntriesGraph.size(); i += 2) { + /*--- Determine the rank where this external is stored and update + the corresponding communication buffers accordingly. ---*/ + const unsigned long rankElem = elemPartitioner.GetRankContainingIndex(additionalExternalEntriesGraph[i]); - /*--- Allocate memory for the linear partition of the elements of the mesh. - These arrays are the size of the number of ranks. ---*/ - beg_node = new unsigned long[size]; - end_node = new unsigned long[size]; - nPointLinear = new unsigned long[size]; - - /* Open the CGNS file for reading and check if it went OK. */ - int fn; - if (cg_open(val_mesh_filename.c_str(), CG_MODE_READ, &fn) != CG_OK) cg_error_exit(); - if (rank == MASTER_NODE) { - cout << "Reading the CGNS file: " << val_mesh_filename << "." << endl; + sendBufsGraphData[rankElem].push_back(additionalExternalEntriesGraph[i]); + sendBufsGraphData[rankElem].push_back(additionalExternalEntriesGraph[i + 1]); + sendToRank[rankElem] = 1; } - /* Get the number of databases. This is the highest node in the CGNS heirarchy. - The current implementation assumes that there is only one database. */ - int nbases; - if (cg_nbases(fn, &nbases) != CG_OK) cg_error_exit(); - if (nbases > 1) { - ostringstream message; - message << "CGNS file contains " << nbases << " databases." << endl; - message << "CGNS reader can handle only 1 at the moment." << endl; - - SU2_MPI::Error(message.str(), CURRENT_FUNCTION); + /*-- Determine to how many ranks this rank will send data and from how + many ranks it will receive data. ---*/ + int nRankSend = 0; + for (int i = 0; i < size; ++i) { + if (sendToRank[i]) ++nRankSend; } - /* Read the information of the base, especially the number of dimensions. */ - char cgnsname[CGNS_STRING_SIZE]; - int cellDim, physDim; - const int iBase = 1; - if (cg_base_read(fn, iBase, cgnsname, &cellDim, &physDim)) cg_error_exit(); - nDim = physDim; - - if (cellDim != physDim) { - ostringstream message; - message << "The element dimension, " << cellDim << ", differs from the physical dimension, " << physDim << "." - << endl; - message << "These should be the same for the DG-FEM solver." << endl; - - SU2_MPI::Error(message.str(), CURRENT_FUNCTION); - } + int nRankRecv; + vector sizeSend(size, 1); + SU2_MPI::Reduce_scatter(sendToRank.data(), &nRankRecv, sizeSend.data(), MPI_INT, MPI_SUM, SU2_MPI::GetComm()); - /* Write the info about the number of dimensions. */ - if (rank == MASTER_NODE) { - if (nDim == 2) cout << "Two dimensional problem." << endl; - if (nDim == 3) cout << "Three dimensional problem." << endl; + /* Send the data using non-blocking sends. */ + vector sendReqs(nRankSend); + nRankSend = 0; + for (int i = 0; i < size; ++i) { + if (sendToRank[i]) + SU2_MPI::Isend(sendBufsGraphData[i].data(), sendBufsGraphData[i].size(), MPI_UNSIGNED_LONG, i, i, + SU2_MPI::GetComm(), &sendReqs[nRankSend++]); } - /* Set the zone ID for CGNS, CGNS indices starts at 1, and check - if the requested zone ID is a valid one. */ - const int iZone = val_iZone + 1; - - int nzones; - if (cg_nzones(fn, iBase, &nzones) != CG_OK) cg_error_exit(); - if (iZone < 1 || iZone > nzones) { - ostringstream message; - message << "Zone " << iZone << " requested for reading, but there are only " << nzones - << " zones present in the CGNS file." << endl; - - SU2_MPI::Error(message.str(), CURRENT_FUNCTION); - } + /* Loop over the number of ranks from which this rank receives data. */ + for (int i = 0; i < nRankRecv; ++i) { + /* Block until a message with unsigned longs arrives from any processor. + Determine the source and the size of the message. */ + SU2_MPI::Status status; + SU2_MPI::Probe(MPI_ANY_SOURCE, rank, SU2_MPI::GetComm(), &status); + int source = status.MPI_SOURCE; - /* Determine the zone type for the requested zone and check if it is - unstructured. */ - ZoneType_t zoneType; - if (cg_zone_type(fn, iBase, iZone, &zoneType) != CG_OK) cg_error_exit(); - if (zoneType != Unstructured) - SU2_MPI::Error("Structured CGNS zone found while unstructured expected.", CURRENT_FUNCTION); + int sizeMess; + SU2_MPI::Get_count(&status, MPI_UNSIGNED_LONG, &sizeMess); - /* Determine the number of sections for the connectivities in this zone. */ - int nsections; - if (cg_nsections(fn, iBase, iZone, &nsections) != CG_OK) cg_error_exit(); - - /*--------------------------------------------------------------------------*/ - /*--- Reading and distributing the volume elements. ---*/ - /*--------------------------------------------------------------------------*/ - - /* Loop over the sections to store the meta data in CGNSElemTypes - and to determine the number of volume elements. - Note that the indices start at 1 in CGNS. */ - vector CGNSElemTypes(nsections); - - for (int iConn = 1; iConn <= nsections; ++iConn) { - CGNSElemTypes[iConn - 1].DetermineMetaData(nDim, fn, iBase, iZone, iConn); - if (CGNSElemTypes[iConn - 1].volumeConn) Global_nElem += CGNSElemTypes[iConn - 1].nElem; - } - - if ((rank == MASTER_NODE) && (size > SINGLE_NODE)) - cout << Global_nElem << " interior elements before parallel partitioning." << endl; - - /*--- Check if the number of cores used is larger than the number of - elements. Terminate if this is the case, because it does not make - sense to do this. ---*/ - unsigned long nCores = size; // Correct for the number of cores per rank. - if (nCores > Global_nElem) { - ostringstream message; - message << "The number of cores, " << nCores; - message << ", is larger than the number of elements, " << Global_nElem << "." << endl; - message << "This is not an efficient use of the resources and therefore " - << "SU2 will terminate."; - - SU2_MPI::Error(message.str(), CURRENT_FUNCTION); - } - - /*--- Compute the number of elements that will be stored on each rank. - This is a linear partitioning with the addition of a simple load - balancing for any remainder elements. ---*/ - unsigned long total_elem_accounted = 0; - for (unsigned long i = 0; i < (unsigned long)size; i++) { - nPointLinear[i] = Global_nElem / size; - total_elem_accounted = total_elem_accounted + nPointLinear[i]; - } - - /*--- Get the number of remainder elements after the even division ---*/ - const unsigned long rem_elem = Global_nElem - total_elem_accounted; - for (unsigned long i = 0; i < rem_elem; i++) { - ++nPointLinear[i]; - } - - /*--- Store the local number of elements and the beginning/end index ---*/ - nElem = nPointLinear[rank]; - beg_node[0] = 0; - end_node[0] = beg_node[0] + nPointLinear[0]; - for (int i = 1; i < size; i++) { - beg_node[i] = end_node[i - 1]; - end_node[i] = beg_node[i] + nPointLinear[i]; - } - - /*--- Allocate space for elements ---*/ - elem = new CPrimalGrid*[nElem](); - - /*--- Loop over over the connectivities and read the elements to be stored on - this rank. Furthermore, determine the local amount of DOFs for the - solution (which may differ from the number of DOFS for the grid). ---*/ - unsigned long nDOFsLoc = 0, elemCount = 0, locElemCount = 0; - - for (int iConn = 0; iConn < nsections; ++iConn) { - if (CGNSElemTypes[iConn].volumeConn) { - /* Determine the global volume element range for this connectivity. */ - const unsigned long elemCountOld = elemCount; - elemCount += CGNSElemTypes[iConn].nElem; - - /* Check for overlap with the element range this rank is responsible for. */ - const unsigned long indBegOverlap = max(elemCountOld, beg_node[rank]); - const unsigned long indEndOverlap = min(elemCount, end_node[rank]); - - if (indEndOverlap > indBegOverlap) { - /* This rank must read element data from this connectivity section. - Determine the offset relative to the start of this section and the - number of elements to be read by this rank. */ - const unsigned long offsetRank = indBegOverlap - elemCountOld; - const unsigned long nElemRank = indEndOverlap - indBegOverlap; - - /* Read the connectivity range determined above. */ - CGNSElemTypes[iConn].ReadConnectivityRange(fn, iBase, iZone, offsetRank, nElemRank, beg_node[rank], elem, - locElemCount, nDOFsLoc); - } - } - } - -#ifdef HAVE_MPI - /* The global offset of the DOFs must be corrected when running in - parallel. Therefore gather the number of DOFs of all the ranks. */ - vector nDOFsPerRank(size); - SU2_MPI::Allgather(&nDOFsLoc, 1, MPI_UNSIGNED_LONG, nDOFsPerRank.data(), 1, MPI_UNSIGNED_LONG, SU2_MPI::GetComm()); - - /* Determine the offset for the DOFs on this rank. */ - unsigned long offsetRank = 0; - for (int i = 0; i < rank; ++i) offsetRank += nDOFsPerRank[i]; - - /* Loop over the local elements to correct the global offset of the DOFs. */ - for (unsigned long i = 0; i < nElem; ++i) elem[i]->AddOffsetGlobalDOFs(offsetRank); -#endif - - /*--------------------------------------------------------------------------*/ - /*--- Reading and distributing the coordinates. ---*/ - /*--------------------------------------------------------------------------*/ - - /* Determine the global number of vertices in the requested zone. - The other size information is not used. */ - cgsize_t sizes[3]; - if (cg_zone_read(fn, iBase, iZone, cgnsname, sizes) != CG_OK) cg_error_exit(); - Global_nPoint = sizes[0]; - - /*--- Determine the number of points per rank in cumulative storage format. - This is done to avoid that every rank reads all the coordinates. - The required coordinates for each rank are later obtained via - communication. ---*/ - unsigned long totalPointsAccounted = 0; - vector nPointsPerRank(size + 1); - for (int i = 1; i <= size; ++i) { - nPointsPerRank[i] = Global_nPoint / size; - totalPointsAccounted += nPointsPerRank[i]; - } - - const unsigned long nPointsRem = Global_nPoint - totalPointsAccounted; - for (unsigned long i = 1; i <= nPointsRem; ++i) ++nPointsPerRank[i]; - - nPointsPerRank[0] = 0; - for (int i = 0; i < size; ++i) nPointsPerRank[i + 1] += nPointsPerRank[i]; - - /* Determine the number of points that must be read by this rank and - allocate the memory for the coordinate buffers. */ - const cgsize_t nPointsRead = nPointsPerRank[rank + 1] - nPointsPerRank[rank]; - vector > coorBuf(nDim, vector(nPointsRead)); - - /* Loop over the number of dimensions to read the coordinates. Note that - the loop starts at 1 and ends at nDim because CGNS requires this. */ - for (unsigned short iDim = 1; iDim <= nDim; ++iDim) { - /* Determine the data type and name of the coordinate. Copy the name - of the coordinate in a string for easier comparison. */ - DataType_t datatype; - if (cg_coord_info(fn, iBase, iZone, iDim, &datatype, cgnsname) != CG_OK) cg_error_exit(); - string coorname = cgnsname; - - /* Check the name of the coordinate and determine the index in coorBuf - where to store this coordinate. Normally this should be iDim-1. */ - unsigned short indC = 0; - if (coorname == "CoordinateX") - indC = 0; - else if (coorname == "CoordinateY") - indC = 1; - else if (coorname == "CoordinateZ") - indC = 2; - else - SU2_MPI::Error(string("Unknown coordinate name, ") + coorname + string(", encountered in the CGNS file."), - CURRENT_FUNCTION); - - /* Easier storage of the range in the CGNS file. */ - cgsize_t range_min = nPointsPerRank[rank] + 1; - cgsize_t range_max = nPointsPerRank[rank + 1]; - - /*--- Read the coordinate with the required precision and copy - this data to the correct index in coorBuf. ---*/ - switch (datatype) { - case RealSingle: { - /* Single precision used. */ - vector buf(nPointsRead); - if (cg_coord_read(fn, iBase, iZone, cgnsname, datatype, &range_min, &range_max, buf.data()) != CG_OK) - cg_error_exit(); - - for (cgsize_t i = 0; i < nPointsRead; ++i) coorBuf[indC][i] = buf[i]; - break; - } - - case RealDouble: { - /* Double precision used. */ - vector buf(nPointsRead); - if (cg_coord_read(fn, iBase, iZone, cgnsname, datatype, &range_min, &range_max, buf.data()) != CG_OK) - cg_error_exit(); - - for (cgsize_t i = 0; i < nPointsRead; ++i) coorBuf[indC][i] = buf[i]; - break; - } - - default: { - ostringstream message; - message << "Datatype for coordinates must be RealSingle or RealDouble, " - << "not " << datatype << endl; - SU2_MPI::Error(message.str(), CURRENT_FUNCTION); - } - } - } - - /* Make a distinction between sequential and parallel mode. */ -#ifdef HAVE_MPI - /*--- Parallel mode. Create a vector, which contains the global - node IDs of the local elements. ---*/ - vector nodeIDsElemLoc; - nodeIDsElemLoc.reserve(nDOFsLoc); - for (unsigned long i = 0; i < locElemCount; ++i) { - unsigned short nDOFsElem = elem[i]->GetnNodes(); - for (unsigned short j = 0; j < nDOFsElem; ++j) nodeIDsElemLoc.push_back(elem[i]->GetNode(j)); - } - - sort(nodeIDsElemLoc.begin(), nodeIDsElemLoc.end()); - vector::iterator lastNode; - lastNode = unique(nodeIDsElemLoc.begin(), nodeIDsElemLoc.end()); - nodeIDsElemLoc.erase(lastNode, nodeIDsElemLoc.end()); - - /*--- Allocate the memory for the coordinates to be stored on this rank. ---*/ - nPoint = nodeIDsElemLoc.size(); - nodes = new CPoint(nPoint, nDim); - - /*--- Store the global ID's of the nodes in such a way that they can - be sent to the rank that actually stores the coordinates.. ---*/ - vector > nodeBuf(size, vector(0)); - for (unsigned long i = 0; i < nodeIDsElemLoc.size(); ++i) { - const cgsize_t nodeID = nodeIDsElemLoc[i]; - vector::iterator low; - low = lower_bound(nPointsPerRank.begin(), nPointsPerRank.end(), nodeID); - cgsize_t rankNode = low - nPointsPerRank.begin(); - if (*low > nodeID) --rankNode; - - nodeBuf[rankNode].push_back(nodeIDsElemLoc[i]); - } - - /*--- Determine the total number of ranks to which this rank will send - a message and also determine the number of ranks from which this - rank will receive a message. Furthermore, determine the starting - indices where data from the different ranks should be stored in - node. ---*/ - int nRankSend = 0; - vector sendToRank(size, 0); - vector startingIndRanksInNode(size + 1); - startingIndRanksInNode[0] = 0; - - for (int i = 0; i < size; ++i) { - startingIndRanksInNode[i + 1] = startingIndRanksInNode[i] + nodeBuf[i].size(); - - if (!nodeBuf[i].empty()) { - ++nRankSend; - sendToRank[i] = 1; - } - } - - int nRankRecv; - vector sizeRecv(size, 1); - SU2_MPI::Reduce_scatter(sendToRank.data(), &nRankRecv, sizeRecv.data(), MPI_INT, MPI_SUM, SU2_MPI::GetComm()); - - /*--- Send out the messages with the global node numbers. Use nonblocking - sends to avoid deadlock. ---*/ - vector sendReqs(nRankSend); - nRankSend = 0; - for (int i = 0; i < size; ++i) { - if (!nodeBuf[i].empty()) { - SU2_MPI::Isend(nodeBuf[i].data(), nodeBuf[i].size(), MPI_UNSIGNED_LONG, i, i, SU2_MPI::GetComm(), - &sendReqs[nRankSend]); - ++nRankSend; - } - } - - /* Define the communication buffer for the coordinates and the vector - for the return communication requests. */ - vector returnReqs(nRankRecv); - vector > coorReturnBuf(nRankRecv, vector(0)); - - /*--- Loop over the number of ranks from which this rank receives global - point numbers that should be stored on this rank. ---*/ - for (int i = 0; i < nRankRecv; ++i) { - /* Block until a message arrives. Determine the source and size - of the message. */ - SU2_MPI::Status status; - SU2_MPI::Probe(MPI_ANY_SOURCE, rank, SU2_MPI::GetComm(), &status); - int source = status.MPI_SOURCE; - - int sizeMess; - SU2_MPI::Get_count(&status, MPI_UNSIGNED_LONG, &sizeMess); - - /* Allocate the memory for a buffer to receive this message and also - for the buffer to return to coordinates. */ - vector nodeRecvBuf(sizeMess); - coorReturnBuf[i].resize(nDim * sizeMess); - - /* Receive the message using a blocking receive. */ - SU2_MPI::Recv(nodeRecvBuf.data(), sizeMess, MPI_UNSIGNED_LONG, source, rank, SU2_MPI::GetComm(), &status); - - /*--- Loop over the nodes just received and fill the return communication - buffer with the coordinates of the requested nodes. ---*/ - for (int j = 0; j < sizeMess; ++j) { - const int jj = nDim * j; - const long kk = nodeRecvBuf[j] - nPointsPerRank[rank]; - if (kk < 0 || kk >= nPointsRead) - SU2_MPI::Error("Invalid point requested. This should not happen.", CURRENT_FUNCTION); - - for (unsigned short k = 0; k < nDim; ++k) coorReturnBuf[i][jj + k] = coorBuf[k][kk]; - } - - /* Send the buffer just filled back to the requesting rank. - Use a non-blocking send to avoid deadlock. */ - SU2_MPI::Isend(coorReturnBuf[i].data(), coorReturnBuf[i].size(), MPI_DOUBLE, source, source + 1, SU2_MPI::GetComm(), - &returnReqs[i]); - } - - /* Loop over the ranks from which this rank has requested coordinates. */ - for (int i = 0; i < nRankSend; ++i) { - /* Block until a message arrives. Determine the source of the message. */ - SU2_MPI::Status status; - SU2_MPI::Probe(MPI_ANY_SOURCE, rank + 1, SU2_MPI::GetComm(), &status); - int source = status.MPI_SOURCE; - - /* Allocate the memory for the coordinate receive buffer. */ - vector coorRecvBuf(nDim * nodeBuf[source].size()); - - /* Receive the message using a blocking receive. */ - SU2_MPI::Recv(coorRecvBuf.data(), coorRecvBuf.size(), MPI_DOUBLE, source, rank + 1, SU2_MPI::GetComm(), &status); - - /*--- Make a distinction between 2D and 3D to store the data of the nodes. - This data is created by taking the offset of the source rank into - account. In this way the nodes are numbered with increading - global node ID. ---*/ - for (unsigned long j = 0; j < nodeBuf[source].size(); ++j) { - const unsigned long jj = nDim * j; - const unsigned long kk = startingIndRanksInNode[source] + j; - - nodes->SetCoord(kk, &coorRecvBuf[jj]); - nodes->SetGlobalIndex(kk, nodeBuf[source][j]); - } - } - - /* Complete the non-blocking sends of both rounds. */ - SU2_MPI::Waitall(sendReqs.size(), sendReqs.data(), MPI_STATUSES_IGNORE); - SU2_MPI::Waitall(returnReqs.size(), returnReqs.data(), MPI_STATUSES_IGNORE); - - /* Wild cards have been used in the communication, - so synchronize the ranks to avoid problems. */ - SU2_MPI::Barrier(SU2_MPI::GetComm()); - -#else - /*--- Sequential mode. Create the data for the points. The global - number of points equals the local number of points. ---*/ - nPoint = Global_nPoint; - nodes = new CPoint(nPoint, nDim); - - for (unsigned long i = 0; i < nPoint; ++i) { - for (unsigned short iDim = 0; iDim < nDim; ++iDim) nodes->SetCoord(i, iDim, coorBuf[iDim][i]); - nodes->SetGlobalIndex(i, i); - } - -#endif - - /*--------------------------------------------------------------------------*/ - /*--- Determine and distribute the single faces of the elements. These ---*/ - /*--- faces are distributed over the ranks such that later the boundary ---*/ - /*--- can retrieve the info on which rank they must be stored without ---*/ - /*--- each rank having to read the entire connectivity data. ---*/ - /*--------------------------------------------------------------------------*/ - - /*--- Determine the faces of the local elements. --- */ - vector localFaces; - for (unsigned long k = 0; k < nElem; ++k) { - /*--- Get the global IDs of the corner points of all the faces of this elements. ---*/ - unsigned short nFaces; - unsigned short nPointsPerFace[6]; - unsigned long faceConn[6][4]; - - elem[k]->GetCornerPointsAllFaces(nFaces, nPointsPerFace, faceConn); - - /*--- Loop over the faces and add them to localFaces. For consistency - between sequential and parallel mode the rank is stored at the - position for the second element ID. ---*/ - for (unsigned short i = 0; i < nFaces; ++i) { - CFaceOfElement thisFace; - thisFace.nCornerPoints = nPointsPerFace[i]; - for (unsigned short j = 0; j < nPointsPerFace[i]; ++j) thisFace.cornerPoints[j] = faceConn[i][j]; - thisFace.elemID0 = k + beg_node[rank]; - thisFace.elemID1 = rank; - - thisFace.CreateUniqueNumbering(); - localFaces.push_back(thisFace); - } - } - - /*--- Sort localFaces in increasing order and remove the double entities, - such that unnecessary data is not communicated later on. ---*/ - sort(localFaces.begin(), localFaces.end()); - vector::iterator lastFace; - lastFace = unique(localFaces.begin(), localFaces.end()); - localFaces.erase(lastFace, localFaces.end()); - -#ifdef HAVE_MPI - - /*--- In parallel mode these faces must be distributed over the ranks. - A face is stored on the rank where its first node ID is located - based on nPointsPerRank. Define the communication buffers and - determine their contents. ---*/ - vector > faceBuf(size, vector(0)); - for (unsigned long i = 0; i < localFaces.size(); ++i) { - const cgsize_t nodeID = localFaces[i].cornerPoints[0]; - vector::iterator low; - low = lower_bound(nPointsPerRank.begin(), nPointsPerRank.end(), nodeID); - cgsize_t rankNode = low - nPointsPerRank.begin(); - if (*low > nodeID) --rankNode; - - faceBuf[rankNode].push_back(localFaces[i].nCornerPoints); - for (unsigned short j = 0; j < localFaces[i].nCornerPoints; ++j) - faceBuf[rankNode].push_back(localFaces[i].cornerPoints[j]); - faceBuf[rankNode].push_back(localFaces[i].elemID0); - } - - /* Delete the memory of localFaces again, because its contents will be - build from the messages that this rank will receive. */ - localFaces.clear(); - - /*--- Determine the number of messages this rank will send and receive. ---*/ - nRankSend = 0; - for (int i = 0; i < size; ++i) { - if (!faceBuf[i].empty()) { - ++nRankSend; - sendToRank[i] = 1; - } else { - sendToRank[i] = 0; - } - } - - SU2_MPI::Reduce_scatter(sendToRank.data(), &nRankRecv, sizeRecv.data(), MPI_INT, MPI_SUM, SU2_MPI::GetComm()); - - /*--- Send the messages using non-blocking sends to avoid deadlock. ---*/ - sendReqs.resize(nRankSend); - nRankSend = 0; - for (int i = 0; i < size; ++i) { - if (!faceBuf[i].empty()) { - SU2_MPI::Isend(faceBuf[i].data(), faceBuf[i].size(), MPI_UNSIGNED_LONG, i, i + 4, SU2_MPI::GetComm(), - &sendReqs[nRankSend]); - ++nRankSend; - } - } - - /* Loop over the number of ranks from which this rank will receive data. */ - for (int i = 0; i < nRankRecv; ++i) { - /* Block until a message arrives and determine the source and size - of the message. */ - SU2_MPI::Status status; - SU2_MPI::Probe(MPI_ANY_SOURCE, rank + 4, SU2_MPI::GetComm(), &status); - int source = status.MPI_SOURCE; - - int sizeMess; - SU2_MPI::Get_count(&status, MPI_UNSIGNED_LONG, &sizeMess); - - /* Allocate the memory for the receive buffer and receive the - message using a non-blocking receive. */ - vector faceRecvBuf(sizeMess); - SU2_MPI::Recv(faceRecvBuf.data(), faceRecvBuf.size(), MPI_UNSIGNED_LONG, source, rank + 4, SU2_MPI::GetComm(), - &status); - - /* Loop to extract the data from the receive buffer. */ - int ii = 0; - while (ii < sizeMess) { - /* Store the data for this face in localFaces. The rank where the - corresponding element is physically present is stored in the - second element ID. Note that it is not necessary to create a unique - numbering anymore, because this has already been done before the - communication buffer was created. */ - CFaceOfElement thisFace; - thisFace.nCornerPoints = (unsigned short)faceRecvBuf[ii++]; - for (unsigned short j = 0; j < thisFace.nCornerPoints; ++j, ++ii) thisFace.cornerPoints[j] = faceRecvBuf[ii]; - thisFace.elemID0 = faceRecvBuf[ii++]; - - thisFace.elemID1 = source; - localFaces.push_back(thisFace); - } - } - - /*--- Sort localFaces in increasing order and remove the double entities, - such that searching is a bit more efficient later on. ---*/ - sort(localFaces.begin(), localFaces.end()); - lastFace = unique(localFaces.begin(), localFaces.end()); - localFaces.erase(lastFace, localFaces.end()); - - /* Complete the non-blocking sends. Afterwards, synchronize the ranks, - because wild cards have been used. */ - SU2_MPI::Waitall(sendReqs.size(), sendReqs.data(), MPI_STATUSES_IGNORE); - SU2_MPI::Barrier(SU2_MPI::GetComm()); - -#endif - - /*--------------------------------------------------------------------------*/ - /*--- Reading and distributing the surface elements. ---*/ - /*--------------------------------------------------------------------------*/ - - /* Determine the number of families in this base and read their names. - Note that when multiple zones are present, this step is repeated for - every zone. */ - int nFamilies; - if (cg_nfamilies(fn, iBase, &nFamilies) != CG_OK) cg_error_exit(); - - vector familyNames(nFamilies); - for (int i = 1; i <= nFamilies; ++i) { - int nFamBC, nGeo; - if (cg_family_read(fn, iBase, i, cgnsname, &nFamBC, &nGeo) != CG_OK) cg_error_exit(); - familyNames[i - 1] = cgnsname; - } - - /* Determine the number of boundary conditions for this zone. */ - int nBCs; - if (cg_nbocos(fn, iBase, iZone, &nBCs) != CG_OK) cg_error_exit(); - - /* Read the names of the boundary conditions and determine their family names. - If not family name is specified for a boundary condition, the family name - is set to the name of the boundary condition. */ - vector BCNames(nBCs), BCFamilyNames(nBCs); - for (int i = 1; i <= nBCs; ++i) { - /* Read the info for this boundary condition. */ - BCType_t BCType; - PointSetType_t ptsetType; - cgsize_t npnts, NormalListSize; - int NormalIndex, nDataSet; - DataType_t NormalDataType; - if (cg_boco_info(fn, iBase, iZone, i, cgnsname, &BCType, &ptsetType, &npnts, &NormalIndex, &NormalListSize, - &NormalDataType, &nDataSet) != CG_OK) - cg_error_exit(); - BCNames[i - 1] = cgnsname; - - /* Read the possibly family name and set it. If not present, it is - equal to BCName. */ - if (cg_goto(fn, iBase, "Zone_t", iZone, "ZoneBC_t", 1, "BC_t", i, "end") != CG_OK) cg_error_exit(); - - int ierr = cg_famname_read(cgnsname); - if (ierr == CG_ERROR) - cg_error_exit(); - else if (ierr == CG_OK) - BCFamilyNames[i - 1] = cgnsname; - else - BCFamilyNames[i - 1] = BCNames[i - 1]; - } - - /*--- Determine the number of different surface connectivities. It is - possible to specify a family name for a surface connectivity. If that - family name is the same for multiple surface connectivities, these - connectivities are merged together for the boundary condition - treatment in the DG-FEM solver. ---*/ - vector surfaceNames; - vector > surfaceConnIDs; - - for (int i = 0; i < nsections; ++i) { - if (CGNSElemTypes[i].surfaceConn) { - /*--- Determine the surface name to use for this connectivity. - This name is determined as follows (in terms of importance). - 1) Family name specified for this connectivity. - 2) Family name of the corresponding boundary condition, - if present. - 3) Name of the connectivity. ---*/ - string thisSurfaceName; - const int connID = CGNSElemTypes[i].connID; - - /* First try to read the family name for the connectivity. */ - if (cg_goto(fn, iBase, "Zone_t", iZone, "Elements_t", connID, "end") != CG_OK) cg_error_exit(); - int ierr = cg_famname_read(cgnsname); - if (ierr == CG_ERROR) - cg_error_exit(); - else if (ierr == CG_OK) - thisSurfaceName = cgnsname; - else { - /* No family name. Check the boundary conditions. It is assumed that - the boundary conditions have the same name as the connectivities. */ - int j; - for (j = 0; j < nBCs; ++j) { - if (BCNames[j] == CGNSElemTypes[i].connName) { - thisSurfaceName = BCFamilyNames[j]; - break; - } - } - - /* If the name is not found in the boundary conditions, set the name - of this surface connectivity to the name of this connectivity. */ - if (j == nBCs) thisSurfaceName = CGNSElemTypes[i].connName; - } - - /* Loop over the previously stored surface names and check if this - surface name is already present. */ - unsigned long j; - for (j = 0; j < surfaceNames.size(); ++j) { - if (thisSurfaceName == surfaceNames[j]) { - surfaceConnIDs[j].push_back(i); - } - } - - /* If the surface name is not stored yet, create new entries in - surfaceNames and surfaceConnIDs. */ - if (j == surfaceNames.size()) { - surfaceNames.push_back(thisSurfaceName); - vector thisSurfaceConn(1, i); - surfaceConnIDs.push_back(thisSurfaceConn); - } - } - } - - /* Write a message about the number of surface markers and allocate the - memory for the data structures to store the required information. */ - nMarker = surfaceNames.size(); - if (rank == MASTER_NODE) cout << nMarker << " surface markers." << endl; - config->SetnMarker_All(nMarker); - - unsigned short nMarker_Max = config->GetnMarker_Max(); - - bound = new CPrimalGrid**[nMarker]; - nElem_Bound = new unsigned long[nMarker]; - Tag_to_Marker = new string[nMarker_Max]; - - /* Loop over the number of markers to read and distribute the connectivities. */ - for (unsigned short iMarker = 0; iMarker < nMarker; ++iMarker) { - /* Easier storage of the entries in CGNSElemTypes that contribute - to this boundary marker. */ - const int nEntries = surfaceConnIDs[iMarker].size(); - const int* entries = surfaceConnIDs[iMarker].data(); - - /* Determine the global number of elements for this boundary marker. */ - cgsize_t nElem_Bound_Global = 0; - for (int iConn = 0; iConn < nEntries; ++iConn) nElem_Bound_Global += CGNSElemTypes[entries[iConn]].nElem; - - /* Write a message about the global number of surface elements - present in this marker. */ - string Marker_Tag = surfaceNames[iMarker]; - if (rank == MASTER_NODE) - cout << nElem_Bound_Global << " boundary elements in index " << iMarker << " (Marker = " << Marker_Tag << ")." - << endl; - - /* Determine the number of surface elements per rank in cumulative storage - format. This is done to avoid that every rank reads all the elements. - This is to avoid that every rank reads all the elements. The correct - rank for storage is determined later via communication. */ - unsigned long totalBoundElemAccounted = 0; - vector nBoundElemPerRank(size + 1); - for (int i = 1; i <= size; ++i) { - nBoundElemPerRank[i] = nElem_Bound_Global / size; - totalBoundElemAccounted += nBoundElemPerRank[i]; - } - - const unsigned long nBoundElemRem = nElem_Bound_Global - totalBoundElemAccounted; - for (unsigned long i = 1; i <= nBoundElemRem; ++i) ++nBoundElemPerRank[i]; - - nBoundElemPerRank[0] = 0; - for (int i = 0; i < size; ++i) nBoundElemPerRank[i + 1] += nBoundElemPerRank[i]; - - /* Define a vector of FEM boundary elements to store the local - boundary faces to be read. */ - vector boundElems; - - /* Loop over the connectivity sections that contribute. */ - elemCount = locElemCount = 0; - for (int iConn = 0; iConn < nEntries; ++iConn) { - /* Determine the global range for this connectivity. */ - const unsigned long elemCountOld = elemCount; - elemCount += CGNSElemTypes[entries[iConn]].nElem; - - /* Check for overlap with the element range this rank is responsible for. */ - const unsigned long indBegOverlap = max(elemCountOld, nBoundElemPerRank[rank]); - const unsigned long indEndOverlap = min(elemCount, nBoundElemPerRank[rank + 1]); - - if (indEndOverlap > indBegOverlap) { - /* This rank must read boundary element data from this connectivity - section. Determine the offset relative to the start of this section - and the number of elements to be read by this rank. */ - const unsigned long offsetRank = indBegOverlap - elemCountOld; - const unsigned long nElemRank = indEndOverlap - indBegOverlap; - - /* Read the connectivity range determined above. */ - CGNSElemTypes[entries[iConn]].ReadBoundaryConnectivityRange(fn, iBase, iZone, offsetRank, nElemRank, - nBoundElemPerRank[rank], locElemCount, boundElems); - } - } - - /* Make a distinction between sequential and parallel mode. */ -#ifdef HAVE_MPI - /*--- Parallel mode. The information stored in boundElems must be - communicated to find out where it must be stored. First clear the - contents of the faceBuf, such that it can be used again to send - data to the appropiate rank. ---*/ - for (int i = 0; i < size; ++i) faceBuf[i].clear(); - - /*-- Loop over the locally read boundary elements and store its contents - in the appropiate location in faceBuf. ---*/ - for (unsigned long i = 0; i < boundElems.size(); ++i) { - /* Create an object of the class CFaceOfElement to determine the - node number that determines on which rank the corresponding face - in localFaces is stored. */ - CFaceOfElement thisFace(boundElems[i].VTK_Type, boundElems[i].nPolyGrid, boundElems[i].Nodes.data()); - thisFace.CreateUniqueNumbering(); - - /* Determine the rank to which this face must be sent to. */ - const cgsize_t nodeID = thisFace.cornerPoints[0]; - vector::iterator low; - low = lower_bound(nPointsPerRank.begin(), nPointsPerRank.end(), nodeID); - cgsize_t rankNode = low - nPointsPerRank.begin(); - if (*low > nodeID) --rankNode; - - /*--- Copy the relevant data of this boundary element into faceBuf. ---*/ - faceBuf[rankNode].push_back(boundElems[i].VTK_Type); - faceBuf[rankNode].push_back(boundElems[i].nPolyGrid); - faceBuf[rankNode].push_back(boundElems[i].nDOFsGrid); - faceBuf[rankNode].push_back(boundElems[i].globalBoundElemID); - faceBuf[rankNode].insert(faceBuf[rankNode].end(), boundElems[i].Nodes.begin(), boundElems[i].Nodes.end()); - } - - /* The contents of boundElems is copied into faceBuf, so it can - be released. */ - boundElems.clear(); - - /*--- Determine the number of messages this rank will send and receive. ---*/ - nRankSend = 0; - for (int i = 0; i < size; ++i) { - if (!faceBuf[i].empty()) { - ++nRankSend; - sendToRank[i] = 1; - } else { - sendToRank[i] = 0; - } - } - - SU2_MPI::Reduce_scatter(sendToRank.data(), &nRankRecv, sizeRecv.data(), MPI_INT, MPI_SUM, SU2_MPI::GetComm()); - - /*--- Send the messages using non-blocking sends to avoid deadlock. ---*/ - sendReqs.resize(nRankSend); - nRankSend = 0; - for (int i = 0; i < size; ++i) { - if (!faceBuf[i].empty()) { - SU2_MPI::Isend(faceBuf[i].data(), faceBuf[i].size(), MPI_UNSIGNED_LONG, i, i + 5, SU2_MPI::GetComm(), - &sendReqs[nRankSend]); - ++nRankSend; - } - } - - /* Use nodeBuf as storage for the sending of the surface element data - to the correct rank. First clear its contents. */ - for (int i = 0; i < size; ++i) nodeBuf[i].clear(); - - /*--- Loop over the number of ranks from which this rank receives - surface elements to be processed. ---*/ - for (int i = 0; i < nRankRecv; ++i) { - /* Block until a message arrives. Determine the source and size - of the message. */ - SU2_MPI::Status status; - SU2_MPI::Probe(MPI_ANY_SOURCE, rank + 5, SU2_MPI::GetComm(), &status); - int source = status.MPI_SOURCE; - - int sizeMess; - SU2_MPI::Get_count(&status, MPI_UNSIGNED_LONG, &sizeMess); - - /* Allocate the memory for the receive buffer and receive the message - using a blocking send. */ - vector boundElemRecvBuf(sizeMess); - SU2_MPI::Recv(boundElemRecvBuf.data(), sizeMess, MPI_UNSIGNED_LONG, source, rank + 5, SU2_MPI::GetComm(), - &status); - - /* Loop to extract the data from the receive buffer. */ - int ii = 0; - while (ii < sizeMess) { - /* Store the data for this boundary element. */ - const auto VTK_Type = (unsigned short)boundElemRecvBuf[ii++]; - const auto nPolyGrid = (unsigned short)boundElemRecvBuf[ii++]; - const auto nDOFsGrid = (unsigned short)boundElemRecvBuf[ii++]; - - const unsigned long globalBoundElemID = boundElemRecvBuf[ii++]; - const unsigned long* Nodes = boundElemRecvBuf.data() + ii; - ii += nDOFsGrid; - - /* Determine the corner nodes and store them in an object of - the class CFaceOfElement to carry out the search in localFaces. */ - CFaceOfElement thisFace(VTK_Type, nPolyGrid, Nodes); - - /* Check if the face is actually present. If not, print an error message - and exit. */ - thisFace.CreateUniqueNumbering(); - vector::iterator low; - low = lower_bound(localFaces.begin(), localFaces.end(), thisFace); - - bool thisFaceFound = false; - if (low != localFaces.end()) { - if (!(thisFace < *low)) thisFaceFound = true; - } - - if (!thisFaceFound) - SU2_MPI::Error("Boundary element not found in list of faces. This is a bug.", CURRENT_FUNCTION); - - /* Determine the domain element and the rank where - this boundary element should be sent to.. */ - const unsigned long domainElementID = low->elemID0; - const int rankBoundElem = (int)low->elemID1; - - /*--- Store the data for this element in the communication buffer - for rankBoundElem. ---*/ - nodeBuf[rankBoundElem].push_back(VTK_Type); - nodeBuf[rankBoundElem].push_back(nPolyGrid); - nodeBuf[rankBoundElem].push_back(nDOFsGrid); - nodeBuf[rankBoundElem].push_back(globalBoundElemID); - nodeBuf[rankBoundElem].push_back(domainElementID); - - for (unsigned short j = 0; j < nDOFsGrid; ++j) nodeBuf[rankBoundElem].push_back(Nodes[j]); - } - } - - /* Complete the non-blocking sends. */ - SU2_MPI::Waitall(sendReqs.size(), sendReqs.data(), MPI_STATUSES_IGNORE); - - /*--- Determine the number of messages this rank will send and receive. ---*/ - nRankSend = 0; - for (int i = 0; i < size; ++i) { - if (!nodeBuf[i].empty()) { - ++nRankSend; - sendToRank[i] = 1; - } else { - sendToRank[i] = 0; - } - } - - SU2_MPI::Reduce_scatter(sendToRank.data(), &nRankRecv, sizeRecv.data(), MPI_INT, MPI_SUM, SU2_MPI::GetComm()); - - /*--- Send the messages using non-blocking sends to avoid deadlock. ---*/ - sendReqs.resize(nRankSend); - nRankSend = 0; - for (int i = 0; i < size; ++i) { - if (!nodeBuf[i].empty()) { - SU2_MPI::Isend(nodeBuf[i].data(), nodeBuf[i].size(), MPI_UNSIGNED_LONG, i, i + 6, SU2_MPI::GetComm(), - &sendReqs[nRankSend]); - ++nRankSend; - } - } - - /*--- Loop over the number of ranks from which this rank receives - surface elements to be stored on this rank. ---*/ - for (int i = 0; i < nRankRecv; ++i) { - /* Block until a message arrives. Determine the source and size - of the message. */ - SU2_MPI::Status status; - SU2_MPI::Probe(MPI_ANY_SOURCE, rank + 6, SU2_MPI::GetComm(), &status); - int source = status.MPI_SOURCE; - - int sizeMess; - SU2_MPI::Get_count(&status, MPI_UNSIGNED_LONG, &sizeMess); - - /* Allocate the memory for the receive buffer and receive the message - using a blocking send. */ - vector boundElemRecvBuf(sizeMess); - SU2_MPI::Recv(boundElemRecvBuf.data(), sizeMess, MPI_UNSIGNED_LONG, source, rank + 6, SU2_MPI::GetComm(), - &status); - - /* Loop to extract the data from the receive buffer. */ - int ii = 0; - while (ii < sizeMess) { - /* Store the data for this boundary element. */ - const auto VTK_Type = (unsigned short)boundElemRecvBuf[ii++]; - const auto nPolyGrid = (unsigned short)boundElemRecvBuf[ii++]; - const auto nDOFsGrid = (unsigned short)boundElemRecvBuf[ii++]; - - const unsigned long globalBoundElemID = boundElemRecvBuf[ii++]; - const unsigned long domainElementID = boundElemRecvBuf[ii++]; - const unsigned long* Nodes = boundElemRecvBuf.data() + ii; - ii += nDOFsGrid; - - /* Create an object of CBoundaryFace and store it in boundElems. */ - CBoundaryFace thisBoundFace; - thisBoundFace.VTK_Type = VTK_Type; - thisBoundFace.nPolyGrid = nPolyGrid; - thisBoundFace.nDOFsGrid = nDOFsGrid; - thisBoundFace.globalBoundElemID = globalBoundElemID; - thisBoundFace.domainElementID = domainElementID; - - thisBoundFace.Nodes.resize(nDOFsGrid); - for (unsigned short j = 0; j < nDOFsGrid; ++j) thisBoundFace.Nodes[j] = Nodes[j]; - - boundElems.push_back(thisBoundFace); - } - } - - /* Sort boundElems in increasing order, where the less than operator - is a comparison between the globalBoundElemID's. */ - sort(boundElems.begin(), boundElems.end()); - - /* Complete the non-blocking sends and synchronize the processors, - because wild cards have been used. */ - SU2_MPI::Waitall(sendReqs.size(), sendReqs.data(), MPI_STATUSES_IGNORE); - - SU2_MPI::Barrier(SU2_MPI::GetComm()); - -#else - /*--- Sequential mode. All boundary elements read must be stored on this - rank. The only information missing is the global ID of the domain - element of the boundary elements. This is created below. ---*/ - for (unsigned long i = 0; i < boundElems.size(); ++i) { - /* Determine the corner nodes and store them in an object of - the class CFaceOfElement to carry out the search in localFaces. */ - CFaceOfElement thisFace(boundElems[i].VTK_Type, boundElems[i].nPolyGrid, boundElems[i].Nodes.data()); - - /* Check if the face is actually present. If not, print an error message - and exit. */ - thisFace.CreateUniqueNumbering(); - vector::iterator low; - low = lower_bound(localFaces.begin(), localFaces.end(), thisFace); - - bool thisFaceFound = false; - if (low != localFaces.end()) { - if (!(thisFace < *low)) thisFaceFound = true; - } - - if (!thisFaceFound) - SU2_MPI::Error("Boundary element not found in list of faces. This is a bug.", CURRENT_FUNCTION); - - /* Set the domain element. */ - boundElems[i].domainElementID = low->elemID0; - } -#endif - - /*--- Allocate space for the local boundary elements and copy the data - from boundElems into bound. ---*/ - nElem_Bound[iMarker] = boundElems.size(); - bound[iMarker] = new CPrimalGrid*[nElem_Bound[iMarker]]; - - for (unsigned long i = 0; i < nElem_Bound[iMarker]; ++i) - bound[iMarker][i] = new CPrimalGridBoundFEM(boundElems[i].globalBoundElemID, boundElems[i].domainElementID, - boundElems[i].VTK_Type, boundElems[i].nPolyGrid, - boundElems[i].nDOFsGrid, boundElems[i].Nodes); - - /*--- Update config information storing the boundary information in the right place ---*/ - Tag_to_Marker[config->GetMarker_CfgFile_TagBound(Marker_Tag)] = Marker_Tag; - config->SetMarker_All_TagBound(iMarker, Marker_Tag); - config->SetMarker_All_KindBC(iMarker, config->GetMarker_CfgFile_KindBC(Marker_Tag)); - config->SetMarker_All_Monitoring(iMarker, config->GetMarker_CfgFile_Monitoring(Marker_Tag)); - config->SetMarker_All_GeoEval(iMarker, config->GetMarker_CfgFile_GeoEval(Marker_Tag)); - config->SetMarker_All_Designing(iMarker, config->GetMarker_CfgFile_Designing(Marker_Tag)); - config->SetMarker_All_Plotting(iMarker, config->GetMarker_CfgFile_Plotting(Marker_Tag)); - config->SetMarker_All_Analyze(iMarker, config->GetMarker_CfgFile_Analyze(Marker_Tag)); - config->SetMarker_All_ZoneInterface(iMarker, config->GetMarker_CfgFile_ZoneInterface(Marker_Tag)); - config->SetMarker_All_DV(iMarker, config->GetMarker_CfgFile_DV(Marker_Tag)); - config->SetMarker_All_Moving(iMarker, config->GetMarker_CfgFile_Moving(Marker_Tag)); - config->SetMarker_All_SobolevBC(iMarker, config->GetMarker_CfgFile_SobolevBC(Marker_Tag)); - config->SetMarker_All_PerBound(iMarker, config->GetMarker_CfgFile_PerBound(Marker_Tag)); - config->SetMarker_All_SendRecv(iMarker, NONE); - } - - /* Close the CGNS file again. */ - if (cg_close(fn) != CG_OK) cg_error_exit(); - if (rank == MASTER_NODE) cout << "Successfully closed the CGNS file." << endl; - -#else /* CGNS_VERSION >= 3300 */ - - SU2_MPI::Error("CGNS version 3.3 or higher is necessary for the DG FEM solver", CURRENT_FUNCTION); - -#endif /* CGNS_VERSION >= 3300 */ - -#else /* HAVE_CGNS. */ + /* Allocate the memory for the receive buffer and receive the message + using a blocking receive. */ + vector recvBuf(sizeMess); + SU2_MPI::Recv(recvBuf.data(), sizeMess, MPI_UNSIGNED_LONG, source, rank, SU2_MPI::GetComm(), &status); - SU2_MPI::Error("SU2 built without CGNS support!!\nTo use CGNS, build SU2 accordingly.", CURRENT_FUNCTION); + /* Loop over the contents of the receive buffer and update the + graph accordingly. */ + for (int j = 0; j < sizeMess; j += 2) { + const unsigned long elemID = recvBuf[j] - elemPartitioner.GetFirstIndexOnRank(rank); + adjacency[elemID].push_back(recvBuf[j + 1]); + sort(adjacency[elemID].begin(), adjacency[elemID].end()); + } + } -#endif /* HAVE_CGNS. */ + /* Complete the non-blocking sends and synchronize the ranks, because + wild cards have been used in the above communication. */ + SU2_MPI::Waitall(nRankSend, sendReqs.data(), MPI_STATUSES_IGNORE); + SU2_MPI::Barrier(SU2_MPI::GetComm()); +#endif } -void CPhysicalGeometry::SetColorFEMGrid_Parallel(CConfig* config) { - /*--- Initialize the color vector of the elements. ---*/ - for (unsigned long i = 0; i < nElem; ++i) elem[i]->SetColor(0); - - /*--- Determine the faces of the elements. ---*/ - vector localFaces; +void CPhysicalGeometry::DetermineMatchingFacesFEMGrid(const CConfig* config, vector& localFaces) { + /*--- Loop over all elements to determine the faces of the elements. ---*/ for (unsigned long k = 0; k < nElem; k++) { /*--- Get the global IDs of the corner points of all the faces of this element. ---*/ unsigned short nFaces; @@ -1882,7 +420,7 @@ void CPhysicalGeometry::SetColorFEMGrid_Parallel(CConfig* config) { CFaceOfElement thisFace; thisFace.nCornerPoints = nPointsPerFace[i]; for (unsigned short j = 0; j < nPointsPerFace[i]; ++j) thisFace.cornerPoints[j] = faceConn[i][j]; - thisFace.elemID0 = beg_node[rank] + k; + thisFace.elemID0 = elem[k]->GetGlobalElemID(); thisFace.nPolySol0 = elem[k]->GetNPolySol(); thisFace.nDOFsElem0 = elem[k]->GetNDOFsSol(); thisFace.elemType0 = elem[k]->GetVTK_Type(); @@ -1913,8 +451,7 @@ void CPhysicalGeometry::SetColorFEMGrid_Parallel(CConfig* config) { for (unsigned short j = 0; j < nPointsPerFace[0]; ++j) thisFace.cornerPoints[j] = faceConn[0][j]; thisFace.CreateUniqueNumbering(); - vector::iterator low; - low = lower_bound(localFaces.begin(), localFaces.end(), thisFace); + auto low = lower_bound(localFaces.begin(), localFaces.end(), thisFace); /*--- Store the corresponding element ID for the boundary element and invalidate the face by setting the element ID to an invalid value. ---*/ @@ -1986,7 +523,7 @@ void CPhysicalGeometry::SetColorFEMGrid_Parallel(CConfig* config) { the points that occur in the faces of localFacesComm. ---*/ vector facePointsProc(size + 1, 0); unsigned long total_point_accounted = 0; - for (unsigned long i = 1; i <= (unsigned long)size; ++i) { + for (unsigned long i = 1; i <= static_cast(size); ++i) { facePointsProc[i] = maxPointID / size; total_point_accounted += facePointsProc[i]; } @@ -1994,15 +531,14 @@ void CPhysicalGeometry::SetColorFEMGrid_Parallel(CConfig* config) { unsigned long rem_point = maxPointID - total_point_accounted; for (unsigned long i = 1; i <= rem_point; ++i) ++facePointsProc[i]; - for (unsigned long i = 0; i < (unsigned long)size; ++i) facePointsProc[i + 1] += facePointsProc[i]; + for (unsigned long i = 0; i < static_cast(size); ++i) facePointsProc[i + 1] += facePointsProc[i]; /*--- Determine the number of faces that has to be sent to each rank. Note that the rank is stored in elemID1, such that the search does not have to be repeated below. ---*/ vector nFacesComm(size, 0); for (unsigned long i = 0; i < nFacesLocComm; ++i) { - vector::iterator low; - low = lower_bound(facePointsProc.begin(), facePointsProc.end(), localFacesComm[i].cornerPoints[0]); + auto low = lower_bound(facePointsProc.begin(), facePointsProc.end(), localFacesComm[i].cornerPoints[0]); unsigned long rankFace = low - facePointsProc.begin(); if (*low > localFacesComm[i].cornerPoints[0]) --rankFace; @@ -2014,7 +550,8 @@ void CPhysicalGeometry::SetColorFEMGrid_Parallel(CConfig* config) { vector sendBufFace(9 * nFacesLocComm); vector counter(size); counter[0] = 0; - for (unsigned long i = 1; i < (unsigned long)size; ++i) counter[i] = counter[i - 1] + 9 * nFacesComm[i - 1]; + for (unsigned long i = 1; i < static_cast(size); ++i) + counter[i] = counter[i - 1] + 9 * nFacesComm[i - 1]; for (unsigned long i = 0; i < nFacesLocComm; ++i) { unsigned long rankFace = localFacesComm[i].elemID1; @@ -2034,7 +571,7 @@ void CPhysicalGeometry::SetColorFEMGrid_Parallel(CConfig* config) { /*--- Determine the number of ranks from which I receive a message. */ unsigned long nMessSend = 0; - for (unsigned long i = 0; i < (unsigned long)size; ++i) { + for (unsigned long i = 0; i < static_cast(size); ++i) { if (nFacesComm[i]) { counter[i] = 1; ++nMessSend; @@ -2051,7 +588,7 @@ void CPhysicalGeometry::SetColorFEMGrid_Parallel(CConfig* config) { nMessSend = 0; unsigned long indSend = 0; - for (unsigned long i = 0; i < (unsigned long)size; ++i) { + for (unsigned long i = 0; i < static_cast(size); ++i) { if (nFacesComm[i]) { unsigned long count = 9 * nFacesComm[i]; SU2_MPI::Isend(&sendBufFace[indSend], count, MPI_UNSIGNED_LONG, i, i, SU2_MPI::GetComm(), &commReqs[nMessSend]); @@ -2134,8 +671,7 @@ void CPhysicalGeometry::SetColorFEMGrid_Parallel(CConfig* config) { sendBufFace[ii + 3] = facesRecv[j].cornerPoints[2]; sendBufFace[ii + 4] = facesRecv[j].cornerPoints[3]; - vector::iterator low; - low = lower_bound(localFacesComm.begin(), localFacesComm.end(), facesRecv[j]); + auto low = lower_bound(localFacesComm.begin(), localFacesComm.end(), facesRecv[j]); if (facesRecv[j].elemID0 == low->elemID0) { sendBufFace[ii + 5] = low->elemID1; sendBufFace[ii + 6] = low->nPolySol1; @@ -2159,440 +695,138 @@ void CPhysicalGeometry::SetColorFEMGrid_Parallel(CConfig* config) { The return data contains information about the neighboring element. ---*/ for (unsigned long i = 0; i < nMessSend; ++i) { SU2_MPI::Status status; - SU2_MPI::Probe(MPI_ANY_SOURCE, rank + 1, SU2_MPI::GetComm(), &status); - int sizeMess; - SU2_MPI::Get_count(&status, MPI_UNSIGNED_LONG, &sizeMess); - - vector recvBuf(sizeMess); - SU2_MPI::Recv(recvBuf.data(), sizeMess, MPI_UNSIGNED_LONG, status.MPI_SOURCE, rank + 1, SU2_MPI::GetComm(), - &status); - - sizeMess /= 9; - unsigned long jj = 0; - for (unsigned long j = 0; j < (unsigned long)sizeMess; ++j, jj += 9) { - CFaceOfElement thisFace; - thisFace.nCornerPoints = recvBuf[jj]; - thisFace.cornerPoints[0] = recvBuf[jj + 1]; - thisFace.cornerPoints[1] = recvBuf[jj + 2]; - thisFace.cornerPoints[2] = recvBuf[jj + 3]; - thisFace.cornerPoints[3] = recvBuf[jj + 4]; - - vector::iterator low; - low = lower_bound(localFaces.begin(), localFaces.end(), thisFace); - low->elemID1 = recvBuf[jj + 5]; - low->nPolySol1 = recvBuf[jj + 6]; - low->nDOFsElem1 = recvBuf[jj + 7]; - low->elemType1 = recvBuf[jj + 8]; - } - } - - /*--- Complete the second round of non-blocking sends. ---*/ - SU2_MPI::Waitall(nMessRecv, commReqs.data(), MPI_STATUSES_IGNORE); - - /*--- Wild cards have been used in the communication, so - synchronize the ranks to avoid problems. ---*/ - SU2_MPI::Barrier(SU2_MPI::GetComm()); - -#endif - - /*--- In the procedure above the periodic boundaries are not found. - A different treatment must be used in order to find these. ---*/ - DeterminePeriodicFacesFEMGrid(config, localFaces); - - /*--- Determine the total number of non-matching faces in the grid. ---*/ - nFacesLoc = localFaces.size(); - nFacesLocOr = nFacesLoc; - for (unsigned long i = 0; i < nFacesLocOr; ++i) { - if (localFaces[i].elemID1 > Global_nElem) { - localFaces[i].nCornerPoints = 4; - localFaces[i].cornerPoints[0] = Global_nPoint; - localFaces[i].cornerPoints[1] = Global_nPoint; - localFaces[i].cornerPoints[2] = Global_nPoint; - localFaces[i].cornerPoints[3] = Global_nPoint; - --nFacesLoc; - } - } - - nFacesLocOr -= nFacesLoc; - if (nFacesLocOr) { - sort(localFaces.begin(), localFaces.end()); - localFaces.resize(nFacesLoc); - } - - unsigned long nNonMatchingFaces = nFacesLocOr; - -#ifdef HAVE_MPI - SU2_MPI::Reduce(&nFacesLocOr, &nNonMatchingFaces, 1, MPI_UNSIGNED_LONG, MPI_SUM, MASTER_NODE, SU2_MPI::GetComm()); -#endif - if (rank == MASTER_NODE && nNonMatchingFaces) { - cout << "There are " << nNonMatchingFaces << " non-matching faces in the grid. " - << "These are ignored in the partitioning." << endl; - } - - /*--- Determine whether or not the Jacobians of the elements and faces - can be considered constant. ---*/ - DetermineFEMConstantJacobiansAndLenScale(config); - - /*--- Determine the donor elements for the wall function treatment. ---*/ - DetermineDonorElementsWallFunctions(config); - - /*--- Determine the time levels of the elements. This is only relevant - when time accurate local time stepping is employed. ---*/ - map mapExternalElemIDToTimeLevel; - DetermineTimeLevelElements(config, localFaces, mapExternalElemIDToTimeLevel); - - /*--- Determine the ownership of the internal faces, i.e. which adjacent - element is responsible for computing the fluxes through the face. ---*/ - for (unsigned long i = 0; i < nFacesLoc; ++i) { - /* Check for a matching face. */ - if (localFaces[i].elemID1 < Global_nElem) { - /* Determine the time level for both elements. Elem0 is always owned, while - elem1 is either owned or external. The data for external elements is - stored in mapExternalElemIDToTimeLevel. */ - unsigned long elemID0 = localFaces[i].elemID0 - beg_node[rank]; - unsigned short timeLevel0 = elem[elemID0]->GetTimeLevel(); - - unsigned short timeLevel1; - if (localFaces[i].elemID1 >= beg_node[rank] && localFaces[i].elemID1 < beg_node[rank] + nElem) { - unsigned long elemID1 = localFaces[i].elemID1 - beg_node[rank]; - timeLevel1 = elem[elemID1]->GetTimeLevel(); - } else { - map::const_iterator MI; - MI = mapExternalElemIDToTimeLevel.find(localFaces[i].elemID1); - if (MI == mapExternalElemIDToTimeLevel.end()) - SU2_MPI::Error("Entry not found in mapExternalElemIDToTimeLevel", CURRENT_FUNCTION); - timeLevel1 = MI->second.short0; - } - - /* Check if both elements have the same time level. */ - if (timeLevel0 == timeLevel1) { - /* Same time level, hence both elements can own the face. First check whether - elemID0 == elemID1 (which happens for periodic problems with only one - element in the periodic direction), because this is a special case. */ - if (localFaces[i].elemID0 == localFaces[i].elemID1) { - /* This face occurs twice, but should be owned only once. Base this - decision on the periodic index. */ - localFaces[i].elem0IsOwner = localFaces[i].periodicIndex < localFaces[i].periodicIndexDonor; - } else { - /* Different elements on both sides of the face. The ownership decision - below makes an attempt to spread the workload evenly. */ - const unsigned long sumElemID = localFaces[i].elemID0 + localFaces[i].elemID1; - if (sumElemID % 2) - localFaces[i].elem0IsOwner = localFaces[i].elemID0 < localFaces[i].elemID1; - else - localFaces[i].elem0IsOwner = localFaces[i].elemID0 > localFaces[i].elemID1; - } - } else { - /* The time level of both elements differ. The element with the smallest - time level must be the owner of the element. */ - localFaces[i].elem0IsOwner = timeLevel0 < timeLevel1; - } - } else { - /* Non-matching face. Give the ownership to element 0. */ - localFaces[i].elem0IsOwner = true; - } - } - - /*--- All the matching face information is known now, including periodic - faces. Store the information of the neighbors in the data structure - for the local elements. ---*/ - for (unsigned long k = 0; k < nElem; ++k) { - unsigned short nFaces; - unsigned short nPointsPerFace[6]; - unsigned long faceConn[6][4]; - - elem[k]->GetCornerPointsAllFaces(nFaces, nPointsPerFace, faceConn); - elem[k]->InitializeNeighbors(nFaces); - - for (unsigned short i = 0; i < nFaces; ++i) { - CFaceOfElement thisFace; - thisFace.nCornerPoints = nPointsPerFace[i]; - for (unsigned short j = 0; j < nPointsPerFace[i]; ++j) thisFace.cornerPoints[j] = faceConn[i][j]; - thisFace.elemID0 = beg_node[rank] + k; - thisFace.nPolySol0 = elem[k]->GetNPolySol(); - thisFace.nDOFsElem0 = elem[k]->GetNDOFsSol(); - - thisFace.CreateUniqueNumbering(); - - vector::iterator low; - low = lower_bound(localFaces.begin(), localFaces.end(), thisFace); - - if (low != localFaces.end()) { - if (!(thisFace < *low)) { - if (low->elemID0 == thisFace.elemID0) { - elem[k]->SetNeighbor_Elements(low->elemID1, i); - elem[k]->SetOwnerFace(low->elem0IsOwner, i); - } else { - elem[k]->SetNeighbor_Elements(low->elemID0, i); - elem[k]->SetOwnerFace(!(low->elem0IsOwner), i); - } - - if (low->periodicIndex > 0) elem[k]->SetPeriodicIndex(low->periodicIndex - 1, i); - } - } - } - } - - /*--- Create the vector of vectors that describe the connectivity - of the graph. First the faces. ---*/ - vector > adjacency(nElem, vector(0)); - for (unsigned long i = 0; i < nFacesLoc; ++i) { - long ii = localFaces[i].elemID0 - beg_node[rank]; - adjacency[ii].push_back(localFaces[i].elemID1); - - if (localFaces[i].periodicIndex == 0) { - ii = localFaces[i].elemID1 - beg_node[rank]; - if (ii >= 0 && ii < (long)nElem) adjacency[ii].push_back(localFaces[i].elemID0); - } - } - - /* It is possible that some neighbors appear multiple times due to e.g. - periodic boundary conditions. ParMETIS is not able to deal with this - situation, hence these multiple entries must be removed. */ - for (unsigned long i = 0; i < nElem; ++i) { - sort(adjacency[i].begin(), adjacency[i].end()); - vector::iterator lastEntry; - lastEntry = unique(adjacency[i].begin(), adjacency[i].end()); - adjacency[i].erase(lastEntry, adjacency[i].end()); - } - - /* Due to periodic boundary conditions it is also possible that self entries - are present. ParMETIS is not able to deal with self entries, hence - they must be removed as well. */ - for (unsigned long i = 0; i < nElem; ++i) { - const unsigned long globalElemID = i + beg_node[rank]; - unsigned long nEntriesNew = adjacency[i].size(); - - for (unsigned long j = 0; j < adjacency[i].size(); ++j) { - if (adjacency[i][j] == globalElemID) { - adjacency[i][j] = ULONG_MAX; - --nEntriesNew; - } - } - - sort(adjacency[i].begin(), adjacency[i].end()); - adjacency[i].resize(nEntriesNew); - } - - /*--- Possibly add the connectivities in the graph from the wall function - treatment. As these connectivities are one-sided, they must be stored - and communicated later. ---*/ - vector additionalExternalEntriesGraph; - - for (unsigned short iMarker = 0; iMarker < nMarker; ++iMarker) { - for (unsigned long l = 0; l < nElem_Bound[iMarker]; ++l) { - /* Get the global and local element ID adjacent to this boundary face. */ - const unsigned long globalElemID = bound[iMarker][l]->GetDomainElement(); - const unsigned long elemID = globalElemID - beg_node[rank]; - - /* Get the number of donor elements for the wall function treatment - and the pointer to the array which stores this info. */ - const unsigned short nDonors = bound[iMarker][l]->GetNDonorsWallFunctions(); - const unsigned long* donors = bound[iMarker][l]->GetDonorsWallFunctions(); - - /* Loop over the number of donors and add the entry in the graph, - if not already present. */ - for (unsigned short i = 0; i < nDonors; ++i) { - if (donors[i] != globalElemID) { - if (!binary_search(adjacency[elemID].begin(), adjacency[elemID].end(), donors[i])) { - /* Donor not present in the graph for elemID. Add it and sort it - afterwards, such that a binary search can be applied later. */ - adjacency[elemID].push_back(donors[i]); - sort(adjacency[elemID].begin(), adjacency[elemID].end()); - - /* Check if the donor element is stored locally. */ - if (donors[i] >= beg_node[rank] && donors[i] < beg_node[rank] + nElem) { - /* Donor is stored locally. Add the entry to the graph - and sort it afterwards. */ - const unsigned long localDonorID = donors[i] - beg_node[rank]; - adjacency[localDonorID].push_back(globalElemID); - sort(adjacency[localDonorID].begin(), adjacency[localDonorID].end()); - } else { - /* Donor is stored externally. Store the graph entry in - additionalExternalEntriesGraph. */ - additionalExternalEntriesGraph.push_back(donors[i]); - additionalExternalEntriesGraph.push_back(globalElemID); - } - } - } - } - } - } - -#ifdef HAVE_MPI - /*--- Create the send buffers with the additional graph data and determine - to which ranks data is sent. ---*/ - vector > sendBufsGraphData(size, vector(0)); - vector sendToRank(size, 0); - - for (unsigned long i = 0; i < additionalExternalEntriesGraph.size(); i += 2) { - /* Determine the rank where this external is stored. */ - const unsigned long elemID = additionalExternalEntriesGraph[i]; - int rankElem; - if (elemID >= beg_node[size - 1]) - rankElem = size - 1; - else { - const unsigned long* low; - low = lower_bound(beg_node, beg_node + size, elemID); - - rankElem = low - beg_node; - if (*low > elemID) --rankElem; - } - - sendBufsGraphData[rankElem].push_back(additionalExternalEntriesGraph[i]); - sendBufsGraphData[rankElem].push_back(additionalExternalEntriesGraph[i + 1]); - sendToRank[rankElem] = 1; - } - - /*-- Determine to how many ranks this rank will send data and from how - many ranks it will receive data. ---*/ - int nRankSend = 0; - for (int i = 0; i < size; ++i) { - if (sendToRank[i]) ++nRankSend; - } - - int nRankRecv; - vector sizeSend(size, 1); - SU2_MPI::Reduce_scatter(sendToRank.data(), &nRankRecv, sizeSend.data(), MPI_INT, MPI_SUM, SU2_MPI::GetComm()); - - /* Send the data using non-blocking sends. */ - vector sendReqs(nRankSend); - nRankSend = 0; - for (int i = 0; i < size; ++i) { - if (sendToRank[i]) - SU2_MPI::Isend(sendBufsGraphData[i].data(), sendBufsGraphData[i].size(), MPI_UNSIGNED_LONG, i, i, - SU2_MPI::GetComm(), &sendReqs[nRankSend++]); - } - - /* Loop over the number of ranks from which this rank receives data. */ - for (int i = 0; i < nRankRecv; ++i) { - /* Block until a message with unsigned longs arrives from any processor. - Determine the source and the size of the message. */ - SU2_MPI::Status status; - SU2_MPI::Probe(MPI_ANY_SOURCE, rank, SU2_MPI::GetComm(), &status); - int source = status.MPI_SOURCE; - + SU2_MPI::Probe(MPI_ANY_SOURCE, rank + 1, SU2_MPI::GetComm(), &status); int sizeMess; SU2_MPI::Get_count(&status, MPI_UNSIGNED_LONG, &sizeMess); - /* Allocate the memory for the receive buffer and receive the message - using a blocking receive. */ vector recvBuf(sizeMess); - SU2_MPI::Recv(recvBuf.data(), sizeMess, MPI_UNSIGNED_LONG, source, rank, SU2_MPI::GetComm(), &status); + SU2_MPI::Recv(recvBuf.data(), sizeMess, MPI_UNSIGNED_LONG, status.MPI_SOURCE, rank + 1, SU2_MPI::GetComm(), + &status); - /* Loop over the contents of the receive buffer and update the - graph accordingly. */ - for (int j = 0; j < sizeMess; j += 2) { - const unsigned long elemID = recvBuf[j] - beg_node[rank]; - adjacency[elemID].push_back(recvBuf[j + 1]); - sort(adjacency[elemID].begin(), adjacency[elemID].end()); + sizeMess /= 9; + unsigned long jj = 0; + for (unsigned long j = 0; j < static_cast(sizeMess); ++j, jj += 9) { + CFaceOfElement thisFace; + thisFace.nCornerPoints = recvBuf[jj]; + thisFace.cornerPoints[0] = recvBuf[jj + 1]; + thisFace.cornerPoints[1] = recvBuf[jj + 2]; + thisFace.cornerPoints[2] = recvBuf[jj + 3]; + thisFace.cornerPoints[3] = recvBuf[jj + 4]; + + auto low = lower_bound(localFaces.begin(), localFaces.end(), thisFace); + low->elemID1 = recvBuf[jj + 5]; + low->nPolySol1 = recvBuf[jj + 6]; + low->nDOFsElem1 = recvBuf[jj + 7]; + low->elemType1 = recvBuf[jj + 8]; } } - /* Complete the non-blocking sends amd synchronize the ranks, because - wild cards have been used in the above communication. */ - SU2_MPI::Waitall(nRankSend, sendReqs.data(), MPI_STATUSES_IGNORE); + /*--- Complete the second round of non-blocking sends. ---*/ + SU2_MPI::Waitall(nMessRecv, commReqs.data(), MPI_STATUSES_IGNORE); + + /*--- Wild cards have been used in the communication, so + synchronize the ranks to avoid problems. ---*/ SU2_MPI::Barrier(SU2_MPI::GetComm()); #endif +} - /* Allocate the memory to store the weights of the graph. */ - vector vwgt(2 * nElem); - vector > adjwgt(nElem, vector(0)); +void CPhysicalGeometry::DetermineNonMatchingFacesFEMGrid(const CConfig* config, + vector& localMatchingFaces) { + /*--- If there are single faces still present in localMatchingFaces, these are + non-matching faces. Store these faces in singleFaces and remove them + from localMatchingFaces. ---*/ + vector singleFaces; - for (unsigned long i = 0; i < nElem; ++i) adjwgt[i].resize(adjacency[i].size()); + /*--- Determine the total number of non-matching faces in the grid. ---*/ + unsigned long nFacesLoc = localMatchingFaces.size(); + for (unsigned long i = 0; i < localMatchingFaces.size(); ++i) { + if (localMatchingFaces[i].elemID1 > Global_nElem) { + singleFaces.push_back(localMatchingFaces[i]); + + localMatchingFaces[i].nCornerPoints = 4; + localMatchingFaces[i].cornerPoints[0] = Global_nPoint; + localMatchingFaces[i].cornerPoints[1] = Global_nPoint; + localMatchingFaces[i].cornerPoints[2] = Global_nPoint; + localMatchingFaces[i].cornerPoints[3] = Global_nPoint; + --nFacesLoc; + } + } - /* Compute the weigts of the graph. */ - ComputeFEMGraphWeights(config, localFaces, adjacency, mapExternalElemIDToTimeLevel, vwgt, adjwgt); + if (singleFaces.size()) { + sort(localMatchingFaces.begin(), localMatchingFaces.end()); + localMatchingFaces.resize(nFacesLoc); + } - /*--- The remainder of this function should only be called if we have parallel - support with MPI and have the ParMETIS library compiled and linked. ---*/ + /*--- Determine the global number of non-matching faces. ---*/ + nFacesLoc = singleFaces.size(); + unsigned long nNonMatchingFaces = nFacesLoc; #ifdef HAVE_MPI -#ifdef HAVE_PARMETIS - - /*--- Only call ParMETIS if we have more than one rank to avoid errors ---*/ - if (size > SINGLE_NODE) { - /*--- The scalar variables and the options array for the call to ParMETIS. ---*/ - idx_t wgtflag = 3; // Weights on both the vertices and edges. - idx_t numflag = 0; // C-numbering. - idx_t ncon = 2; // Number of constraints. - real_t ubvec[] = {1.05, 1.05}; // Tolerances for the vertex weights, recommended value is 1.05. - auto nparts = (idx_t)size; // Number of subdomains. Must be number of MPI ranks. - idx_t options[METIS_NOPTIONS]; // Just use the default options. - METIS_SetDefaultOptions(options); - options[1] = 0; - - /*--- Determine the array, which stores the distribution of the graph nodes - over the ranks. ---*/ - vector vtxdist(size + 1); - vtxdist[0] = 0; - for (int i = 0; i < size; ++i) vtxdist[i + 1] = (idx_t)end_node[i]; - - /* Create the array xadjPar, which contains the number of edges for each - vertex of the graph in ParMETIS format. */ - vector xadjPar(nElem + 1); - xadjPar[0] = 0; - for (unsigned long i = 0; i < nElem; ++i) xadjPar[i + 1] = xadjPar[i] + (idx_t)adjacency[i].size(); - - /* Create the adjacency information in ParMETIS format. */ - vector adjacencyPar(xadjPar[nElem]); - unsigned long ii = 0; - for (unsigned long i = 0; i < nElem; ++i) { - for (unsigned long j = 0; j < adjacency[i].size(); ++j, ++ii) adjacencyPar[ii] = adjacency[i][j]; - } - - /* Create the vertex weights in ParMETIS format. */ - vector vwgtPar(nElem * ncon); - for (unsigned long i = 0; i < nElem * ncon; ++i) vwgtPar[i] = (idx_t)ceil(vwgt[i]); - - /* Create the adjacency weight in ParMETIS format. */ - vector adjwgtPar(xadjPar[nElem]); - ii = 0; - for (unsigned long i = 0; i < nElem; ++i) { - for (unsigned long j = 0; j < adjwgt[i].size(); ++j, ++ii) adjwgtPar[ii] = (idx_t)ceil(adjwgt[i][j]); - } + SU2_MPI::Allreduce(&nFacesLoc, &nNonMatchingFaces, 1, MPI_UNSIGNED_LONG, MPI_SUM, SU2_MPI::GetComm()); +#endif - /* Make sure that an equal distribution is obtained. */ - vector tpwgts(size * ncon, 1.0 / ((real_t)size)); + /*--- If there are no non-matching faces, return, such that in the rest of this + function it can be assumed that non-matching faces are present. ---*/ + if (nNonMatchingFaces == 0) return; - /*--- Calling ParMETIS ---*/ - vector part(nElem); - if (rank == MASTER_NODE) cout << "Calling ParMETIS..."; + SU2_MPI::Error(string("Handling of non-matching faces not implemented yet"), CURRENT_FUNCTION); +} - idx_t edgecut; - MPI_Comm comm = SU2_MPI::GetComm(); - ParMETIS_V3_PartKway(vtxdist.data(), xadjPar.data(), adjacencyPar.data(), vwgtPar.data(), adjwgtPar.data(), - &wgtflag, &numflag, &ncon, &nparts, tpwgts.data(), ubvec, options, &edgecut, part.data(), - &comm); - if (rank == MASTER_NODE) { - cout << " graph partitioning complete ("; - cout << edgecut << " edge cuts)." << endl; - } +void CPhysicalGeometry::DetermineOwnershipInternalFaces( + vector& localFaces, map& mapExternalElemIDToTimeLevel) { + /*--- Define the linear partitioning of the elements. ---*/ + CLinearPartitioner elemPartitioner(Global_nElem, 0); - /*--- Set the color of the elements to the outcome of ParMETIS. ---*/ - for (unsigned long i = 0; i < nElem; ++i) elem[i]->SetColor(part[i]); - } + /*--- Loop over the locally stored faces. ---*/ + for (auto FI = localFaces.begin(); FI != localFaces.end(); ++FI) { + /* Check for a matching face. */ + if (FI->elemID1 < Global_nElem) { + /*--- Determine the time level of Elem0, which is always owned. ---*/ + const unsigned long elemID0 = FI->elemID0 - elemPartitioner.GetFirstIndexOnRank(rank); + const unsigned short timeLevel0 = elem[elemID0]->GetTimeLevel(); -#else /* HAVE_PARMETIS */ + /*--- Determine the time level of Elem1, which is either owned or + external. Hence a distinction must be made. ---*/ + unsigned short timeLevel1; + if (elemPartitioner.GetRankContainingIndex(FI->elemID1) == static_cast(rank)) { + const unsigned long elemID1 = FI->elemID1 - elemPartitioner.GetFirstIndexOnRank(rank); + timeLevel1 = elem[elemID1]->GetTimeLevel(); + } else { + const auto MI = mapExternalElemIDToTimeLevel.find(FI->elemID1); + if (MI == mapExternalElemIDToTimeLevel.end()) + SU2_MPI::Error("Entry not found in mapExternalElemIDToTimeLevel", CURRENT_FUNCTION); + timeLevel1 = MI->second.short0; + } - if (size > SINGLE_NODE) { - if (rank == MASTER_NODE) { - cout << endl; - cout << "--------------------- WARNING -------------------------------" << endl; - cout << "SU2 compiled without PARMETIS. A linear distribution is used." << endl; - cout << "This is very inefficient" << endl; - cout << "-------------------------------------------------------------" << endl; - cout << endl; + /* Check if both elements have the same time level. */ + if (timeLevel0 == timeLevel1) { + /* Same time level, hence both elements can own the face. First check whether + elemID0 == elemID1 (which happens for periodic problems with only one + element in the periodic direction), because this is a special case. */ + if (FI->elemID0 == FI->elemID1) { + /* This face occurs twice, but should be owned only once. Base this + decision on the periodic index. */ + FI->elem0IsOwner = FI->periodicIndex < FI->periodicIndexDonor; + } else { + /* Different elements on both sides of the face. The ownership decision + below makes an attempt to spread the workload evenly. */ + const unsigned long sumElemID = FI->elemID0 + FI->elemID1; + if (sumElemID % 2) + FI->elem0IsOwner = FI->elemID0 < FI->elemID1; + else + FI->elem0IsOwner = FI->elemID0 > FI->elemID1; + } + } else { + /* The time level of both elements differ. The element with the smallest + time level must be the owner of the element. */ + FI->elem0IsOwner = timeLevel0 < timeLevel1; + } + } else { + /* Non-matching face. Give the ownership to element 0. */ + FI->elem0IsOwner = true; } - - /* Set the color to the current rank. */ - for (unsigned long i = 0; i < nElem; ++i) elem[i]->SetColor(rank); } - -#endif /* HAVE_PARMETIS */ - -#endif /* HAVE_MPI */ } void CPhysicalGeometry::DeterminePeriodicFacesFEMGrid(CConfig* config, vector& localFaces) { @@ -2665,8 +899,7 @@ void CPhysicalGeometry::DeterminePeriodicFacesFEMGrid(CConfig* config, vector::iterator low; - low = lower_bound(localFaces.begin(), localFaces.end(), thisFace); + auto low = lower_bound(localFaces.begin(), localFaces.end(), thisFace); /*--- Store the relevant data in facesDonor. ---*/ facesDonor[k].nDim = nDim; @@ -2677,8 +910,7 @@ void CPhysicalGeometry::DeterminePeriodicFacesFEMGrid(CConfig* config, vectorelemType0; for (unsigned short j = 0; j < nPointsPerFace[0]; ++j) { - map::const_iterator MI; - MI = globalPointIDToLocalInd.find(faceConn[0][j]); + const auto MI = globalPointIDToLocalInd.find(faceConn[0][j]); unsigned long ind = MI->second; for (unsigned l = 0; l < nDim; ++l) facesDonor[k].cornerCoor[j][l] = nodes->GetCoord(ind, l); @@ -2721,7 +953,7 @@ void CPhysicalGeometry::DeterminePeriodicFacesFEMGrid(CConfig* config, vector doubleLocBuf(13 * sizeLocal); unsigned long cS = 0, cL = 0, cD = 0; - for (vector::const_iterator fIt = facesDonor.begin(); fIt != facesDonor.end(); ++fIt) { + for (auto fIt = facesDonor.begin(); fIt != facesDonor.end(); ++fIt) { shortLocBuf[cS++] = fIt->nCornerPoints; shortLocBuf[cS++] = fIt->nDim; shortLocBuf[cS++] = fIt->nPoly; @@ -2835,8 +1067,7 @@ void CPhysicalGeometry::DeterminePeriodicFacesFEMGrid(CConfig* config, vector::iterator low; - low = lower_bound(localFaces.begin(), localFaces.end(), thisFace); + auto low = lower_bound(localFaces.begin(), localFaces.end(), thisFace); /*--- Indicate that this face is a periodic face. This is accomplished by setting periodicIndex to iMarker + 1. ---*/ @@ -2854,8 +1085,7 @@ void CPhysicalGeometry::DeterminePeriodicFacesFEMGrid(CConfig* config, vectorelemType0; for (unsigned short j = 0; j < nPointsPerFace[0]; ++j) { - map::const_iterator MI; - MI = globalPointIDToLocalInd.find(faceConn[0][j]); + const auto MI = globalPointIDToLocalInd.find(faceConn[0][j]); unsigned long ind = MI->second; const su2double* coor = nodes->GetCoord(ind); @@ -2876,8 +1106,7 @@ void CPhysicalGeometry::DeterminePeriodicFacesFEMGrid(CConfig* config, vector::const_iterator donorLow; - donorLow = lower_bound(facesDonor.begin(), facesDonor.end(), thisMatchingFace); + const auto donorLow = lower_bound(facesDonor.begin(), facesDonor.end(), thisMatchingFace); if (donorLow != facesDonor.end()) { if (!(thisMatchingFace < *donorLow)) { @@ -2893,6 +1122,79 @@ void CPhysicalGeometry::DeterminePeriodicFacesFEMGrid(CConfig* config, vector >& adjacency, + vector& vwgt, + vector >& adjwgt) { + /*--- Only call ParMETIS if we have more than one rank to avoid errors ---*/ + if (size > SINGLE_NODE) { + /*--- Define the linear partitioning of the elements. ---*/ + CLinearPartitioner elemPartitioner(Global_nElem, 0); + + /*--- The scalar variables and the options array for the call to ParMETIS. ---*/ + idx_t wgtflag = 3; // Weights on both the vertices and edges. + idx_t numflag = 0; // C-numbering. + idx_t ncon = 2; // Number of constraints. + real_t ubvec[] = {1.05, 1.05}; // Tolerances for the vertex weights, recommended value is 1.05. + auto nparts = (idx_t)size; // Number of subdomains. Must be number of MPI ranks. + idx_t options[METIS_NOPTIONS]; // Just use the default options. + METIS_SetDefaultOptions(options); + options[1] = 0; + + /*--- Determine the array, which stores the distribution of the graph nodes + over the ranks. ---*/ + vector vtxdist(size + 1); + for (int i = 0; i <= size; ++i) vtxdist[i] = static_cast(elemPartitioner.GetCumulativeSizeBeforeRank(i)); + + /* Create the array xadjPar, which contains the number of edges for each + vertex of the graph in ParMETIS format. */ + vector xadjPar(nElem + 1); + xadjPar[0] = 0; + for (unsigned long i = 0; i < nElem; ++i) xadjPar[i + 1] = xadjPar[i] + (idx_t)adjacency[i].size(); + + /* Create the adjacency information in ParMETIS format. */ + vector adjacencyPar(xadjPar[nElem]); + unsigned long ii = 0; + for (unsigned long i = 0; i < nElem; ++i) { + for (unsigned long j = 0; j < adjacency[i].size(); ++j, ++ii) adjacencyPar[ii] = adjacency[i][j]; + } + + /* Create the vertex weights in ParMETIS format. */ + vector vwgtPar(nElem * ncon); + for (unsigned long i = 0; i < nElem * ncon; ++i) vwgtPar[i] = static_cast(ceil(vwgt[i])); + + /* Create the adjacency weight in ParMETIS format. */ + vector adjwgtPar(xadjPar[nElem]); + ii = 0; + for (unsigned long i = 0; i < nElem; ++i) { + for (unsigned long j = 0; j < adjwgt[i].size(); ++j, ++ii) adjwgtPar[ii] = static_cast(ceil(adjwgt[i][j])); + } + + /* Make sure that an equal distribution is obtained. */ + vector tpwgts(size * ncon, 1.0 / ((real_t)size)); + + /*--- Calling ParMETIS ---*/ + vector part(nElem); + if (rank == MASTER_NODE) cout << "Calling ParMETIS..."; + + idx_t edgecut; + MPI_Comm comm = SU2_MPI::GetComm(); + ParMETIS_V3_PartKway(vtxdist.data(), xadjPar.data(), adjacencyPar.data(), vwgtPar.data(), adjwgtPar.data(), + &wgtflag, &numflag, &ncon, &nparts, tpwgts.data(), ubvec, options, &edgecut, part.data(), + &comm); + if (rank == MASTER_NODE) { + cout << " graph partitioning complete ("; + cout << edgecut << " edge cuts)." << endl; + } + + /*--- Set the color of the elements to the outcome of ParMETIS. ---*/ + for (unsigned long i = 0; i < nElem; ++i) elem[i]->SetColor(part[i]); + } +} +#endif +#endif + void CPhysicalGeometry::DetermineFEMConstantJacobiansAndLenScale(CConfig* config) { /* Definition of the object that is used to carry out the BLAS calls. */ CBlasStructure blasFunctions; @@ -2946,7 +1248,7 @@ void CPhysicalGeometry::DetermineFEMConstantJacobiansAndLenScale(CConfig* config for (unsigned short j = 0; j < nDOFs; ++j) { unsigned long nodeID = elem[i]->GetNode(j); - map::const_iterator MI = globalPointIDToLocalInd.find(nodeID); + const auto MI = globalPointIDToLocalInd.find(nodeID); unsigned long ind = MI->second; for (unsigned short k = 0; k < nDim; ++k, ++jj) vecRHS[jj] = nodes->GetCoord(ind, k); } @@ -3295,8 +1597,7 @@ void CPhysicalGeometry::DetermineDonorElementsWallFunctions(CConfig* config) { for (unsigned short k = 0; k < nDOFsPerSubElem[i]; ++k, ++kk) { unsigned long nodeID = elem[l]->GetNode(connSubElems[i][kk]); - map::const_iterator MI; - MI = globalPointIDToLocalInd.find(nodeID); + const auto MI = globalPointIDToLocalInd.find(nodeID); elemConn.push_back(MI->second); } @@ -3329,6 +1630,9 @@ void CPhysicalGeometry::DetermineDonorElementsWallFunctions(CConfig* config) { /*--- the local elements. ---*/ /*--------------------------------------------------------------------------*/ + /*--- Define the linear partitioning of the elements. ---*/ + CLinearPartitioner elemPartitioner(Global_nElem, 0); + /* Define the vectors, which store the boundary marker, boundary element ID and exchange coordinates for the integration points for which no donor element was found in the locally stored volume elements. */ @@ -3356,7 +1660,8 @@ void CPhysicalGeometry::DetermineDonorElementsWallFunctions(CConfig* config) { /* Easier storage of the element type, the corresponding volume element and the polynomial degree for the solution and grid. */ const unsigned short VTK_Type = bound[iMarker][l]->GetVTK_Type(); - const unsigned long elemID = bound[iMarker][l]->GetDomainElement() - beg_node[rank]; + const unsigned long elemID = + bound[iMarker][l]->GetDomainElement() - elemPartitioner.GetFirstIndexOnRank(rank); const unsigned short nPolyGrid = bound[iMarker][l]->GetNPolyGrid(); const unsigned short nPolySol = elem[elemID]->GetNPolySol(); const unsigned short VTK_Elem = elem[elemID]->GetVTK_Type(); @@ -3448,8 +1753,7 @@ void CPhysicalGeometry::DetermineDonorElementsWallFunctions(CConfig* config) { ii = 0; for (unsigned short j = 0; j < nDOFs; ++j) { unsigned long nodeID = bound[iMarker][l]->GetNode(j); - map::const_iterator MI; - MI = globalPointIDToLocalInd.find(nodeID); + const auto MI = globalPointIDToLocalInd.find(nodeID); nodeID = MI->second; for (unsigned short k = 0; k < nDim; ++k, ++ii) coorBoundFace[ii] = nodes->GetCoord(nodeID, k); } @@ -3579,8 +1883,7 @@ void CPhysicalGeometry::DetermineDonorElementsWallFunctions(CConfig* config) { /* Sort donorElementsFace in increasing order and remove the the double entities. */ sort(donorElementsFace.begin(), donorElementsFace.end()); - vector::iterator lastEntry; - lastEntry = unique(donorElementsFace.begin(), donorElementsFace.end()); + auto lastEntry = unique(donorElementsFace.begin(), donorElementsFace.end()); donorElementsFace.erase(lastEntry, donorElementsFace.end()); /* Store the donor elements in the data structure for @@ -3615,7 +1918,7 @@ void CPhysicalGeometry::DetermineDonorElementsWallFunctions(CConfig* config) { carried out for each rank and store them in such a way that the info can be used directly in Allgatherv. */ vector recvCounts(size), displs(size); - int nLocalSearchPoints = (int)markerIDGlobalSearch.size(); + int nLocalSearchPoints = static_cast(markerIDGlobalSearch.size()); SU2_MPI::Allgather(&nLocalSearchPoints, 1, MPI_INT, recvCounts.data(), 1, MPI_INT, SU2_MPI::GetComm()); displs[0] = 0; @@ -3787,6 +2090,9 @@ void CPhysicalGeometry::DetermineDonorElementsWallFunctions(CConfig* config) { void CPhysicalGeometry::DetermineTimeLevelElements(CConfig* config, const vector& localFaces, map& mapExternalElemIDToTimeLevel) { + /*--- Define the linear partitioning of the elements. ---*/ + CLinearPartitioner elemPartitioner(Global_nElem, 0); + /*--------------------------------------------------------------------------*/ /*--- Step 1: Initialize the map mapExternalElemIDToTimeLevel. ---*/ /*--------------------------------------------------------------------------*/ @@ -3796,11 +2102,13 @@ void CPhysicalGeometry::DetermineTimeLevelElements(CConfig* config, const vector for (auto FI = localFaces.begin(); FI != localFaces.end(); ++FI) { if (FI->elemID1 < Global_nElem) { // Safeguard against non-matching faces. - if (FI->elemID1 < beg_node[rank] || FI->elemID1 >= beg_node[rank] + nElem) { + /*--- Check for external element. This is done by checking the + local elements and if it is not found, it is an external. ---*/ + const auto UMI = Global_to_Local_Elem.find(FI->elemID1); + if (UMI == Global_to_Local_Elem.end()) { /* This element is an external element. Store it in the map mapExternalElemIDToTimeLevel if not already done so. */ - map::iterator MI; - MI = mapExternalElemIDToTimeLevel.find(FI->elemID1); + auto MI = mapExternalElemIDToTimeLevel.find(FI->elemID1); if (MI == mapExternalElemIDToTimeLevel.end()) mapExternalElemIDToTimeLevel[FI->elemID1] = CUnsignedShort2T(0, 0); } @@ -3823,30 +2131,22 @@ void CPhysicalGeometry::DetermineTimeLevelElements(CConfig* config, const vector const unsigned short nDonors = bound[iMarker][l]->GetNDonorsWallFunctions(); const unsigned long* donors = bound[iMarker][l]->GetDonorsWallFunctions(); - /* Loop over the number of donors and add the externals to - mapExternalElemIDToTimeLevel, if not already present. */ + /*--- Loop over the number of donors for this boundary element. ---*/ for (unsigned short i = 0; i < nDonors; ++i) { - if (donors[i] < beg_node[rank] || donors[i] >= beg_node[rank] + nElem) { - map::iterator MI; - MI = mapExternalElemIDToTimeLevel.find(donors[i]); + /*--- Check if the donor element is an external element. ---*/ + const auto UMI = Global_to_Local_Elem.find(donors[i]); + if (UMI == Global_to_Local_Elem.end()) { + /*--- Check if element is not already present in + mapExternalElemIDToTimeLevel. If not, add it. ---*/ + const auto MI = mapExternalElemIDToTimeLevel.find(donors[i]); if (MI == mapExternalElemIDToTimeLevel.end()) { - /* Element not present in external. Add it. */ mapExternalElemIDToTimeLevel[donors[i]] = CUnsignedShort2T(0, 0); } - /* The reverse connection may not be present either. Store the global - ID of this element in the send buffers for the additional - externals. */ - int rankDonor; - if (donors[i] >= beg_node[size - 1]) - rankDonor = size - 1; - else { - const unsigned long* low; - low = lower_bound(beg_node, beg_node + size, donors[i]); - - rankDonor = (int)(low - beg_node); - if (*low > donors[i]) --rankDonor; - } + /*--- The reverse connection may not be present either. Store the global + ID of this element in the send buffers for the additional + externals. ---*/ + const unsigned long rankDonor = elemPartitioner.GetRankContainingIndex(donors[i]); sendBufAddExternals[rankDonor].push_back(bound[iMarker][l]->GetDomainElement()); recvFromRank[rankDonor] = 1; @@ -3899,8 +2199,7 @@ void CPhysicalGeometry::DetermineTimeLevelElements(CConfig* config, const vector /* Loop over the entries of recvBuf and add them to mapExternalElemIDToTimeLevel, if not present already. */ for (int j = 0; j < sizeMess; ++j) { - map::iterator MI; - MI = mapExternalElemIDToTimeLevel.find(recvBuf[j]); + auto MI = mapExternalElemIDToTimeLevel.find(recvBuf[j]); if (MI == mapExternalElemIDToTimeLevel.end()) mapExternalElemIDToTimeLevel[recvBuf[j]] = CUnsignedShort2T(0, 0); } } @@ -3998,28 +2297,16 @@ void CPhysicalGeometry::DetermineTimeLevelElements(CConfig* config, const vector /*--- of the external element data. ---*/ /*--------------------------------------------------------------------------*/ - map::iterator MI; #ifdef HAVE_MPI /*--- Determine the ranks from which I receive element data during the actual exchange. ---*/ recvFromRank.assign(size, 0); - for (MI = mapExternalElemIDToTimeLevel.begin(); MI != mapExternalElemIDToTimeLevel.end(); ++MI) { - /* Determine the rank where this external is stored. */ - const unsigned long elemID = MI->first; - int rankElem; - if (elemID >= beg_node[size - 1]) - rankElem = size - 1; - else { - const unsigned long* low; - low = lower_bound(beg_node, beg_node + size, elemID); - - rankElem = low - beg_node; - if (*low > elemID) --rankElem; - } - - /* Set the corresponding index of recvFromRank to 1. */ + for (auto MI = mapExternalElemIDToTimeLevel.begin(); MI != mapExternalElemIDToTimeLevel.end(); ++MI) { + /*--- Determine the rank where this external is stored and set + the corresponding index of recvFromRank to 1. ---*/ + const unsigned long rankElem = elemPartitioner.GetRankContainingIndex(MI->first); recvFromRank[rankElem] = 1; } @@ -4040,20 +2327,11 @@ void CPhysicalGeometry::DetermineTimeLevelElements(CConfig* config, const vector will be received from other ranks. ---*/ vector > recvElem(nRankRecv, vector(0)); - for (MI = mapExternalElemIDToTimeLevel.begin(); MI != mapExternalElemIDToTimeLevel.end(); ++MI) { + for (auto MI = mapExternalElemIDToTimeLevel.begin(); MI != mapExternalElemIDToTimeLevel.end(); ++MI) { const unsigned long elemID = MI->first; - int rankElem; - if (elemID >= beg_node[size - 1]) - rankElem = size - 1; - else { - const unsigned long* low; - low = lower_bound(beg_node, beg_node + size, elemID); - - rankElem = low - beg_node; - if (*low > elemID) --rankElem; - } + const unsigned long rankElem = elemPartitioner.GetRankContainingIndex(elemID); - map::const_iterator MRI = mapRankToIndRecv.find(rankElem); + const auto MRI = mapRankToIndRecv.find(rankElem); recvElem[MRI->second].push_back(elemID); } @@ -4061,7 +2339,7 @@ void CPhysicalGeometry::DetermineTimeLevelElements(CConfig* config, const vector exchange and send over the global element ID's. In order to avoid unnecessary communication, multiple entries are filtered out. ---*/ sendReqs.resize(nRankRecv); - map::const_iterator MRI = mapRankToIndRecv.begin(); + auto MRI = mapRankToIndRecv.begin(); for (int i = 0; i < nRankRecv; ++i, ++MRI) { sort(recvElem[i].begin(), recvElem[i].end()); @@ -4089,7 +2367,7 @@ void CPhysicalGeometry::DetermineTimeLevelElements(CConfig* config, const vector SU2_MPI::Recv(sendElem[i].data(), sizeMess, MPI_UNSIGNED_LONG, sendRank[i], rank, SU2_MPI::GetComm(), &status); - for (int j = 0; j < sizeMess; ++j) sendElem[i][j] -= beg_node[rank]; + for (int j = 0; j < sizeMess; ++j) sendElem[i][j] -= elemPartitioner.GetFirstIndexOnRank(rank); } /* Complete the non-blocking sends. Synchronize the processors afterwards, @@ -4139,7 +2417,7 @@ void CPhysicalGeometry::DetermineTimeLevelElements(CConfig* config, const vector &status); for (unsigned long j = 0; j < recvElem[i].size(); ++j) { - MI = mapExternalElemIDToTimeLevel.find(recvElem[i][j]); + auto MI = mapExternalElemIDToTimeLevel.find(recvElem[i][j]); if (MI == mapExternalElemIDToTimeLevel.end()) SU2_MPI::Error("Entry not found in mapExternalElemIDToTimeLevel", CURRENT_FUNCTION); MI->second.short0 = returnBuf[i][2 * j]; @@ -4180,7 +2458,8 @@ void CPhysicalGeometry::DetermineTimeLevelElements(CConfig* config, const vector for (unsigned short iMarker = 0; iMarker < nMarker; ++iMarker) { for (unsigned long l = 0; l < nElem_Bound[iMarker]; ++l) { /* Determine the ID of the adjacent element. */ - const unsigned long elemID = bound[iMarker][l]->GetDomainElement() - beg_node[rank]; + const unsigned long elemID = + bound[iMarker][l]->GetDomainElement() - elemPartitioner.GetFirstIndexOnRank(rank); /* Get the number of donor elements for the wall function treatment and the pointer to the array which stores this info. */ @@ -4190,10 +2469,10 @@ void CPhysicalGeometry::DetermineTimeLevelElements(CConfig* config, const vector /* Loop over the number of donors and check the time levels. */ for (unsigned short i = 0; i < nDonors; ++i) { /* Determine the status of the donor element. */ - if (donors[i] >= beg_node[rank] && donors[i] < beg_node[rank] + nElem) { + if (elemPartitioner.GetRankContainingIndex(donors[i]) == static_cast(rank)) { /* Donor is stored locally. Determine its local ID and get the time levels of both elements. */ - const unsigned long donorID = donors[i] - beg_node[rank]; + const unsigned long donorID = donors[i] - elemPartitioner.GetFirstIndexOnRank(rank); const unsigned short timeLevelB = elem[elemID]->GetTimeLevel(); const unsigned short timeLevelD = elem[donorID]->GetTimeLevel(); const unsigned short timeLevel = min(timeLevelB, timeLevelD); @@ -4215,7 +2494,7 @@ void CPhysicalGeometry::DetermineTimeLevelElements(CConfig* config, const vector Retrieve its time level from mapExternalElemIDToTimeLevel and determine the minimum time level. */ const unsigned short timeLevelB = elem[elemID]->GetTimeLevel(); - MI = mapExternalElemIDToTimeLevel.find(donors[i]); + auto MI = mapExternalElemIDToTimeLevel.find(donors[i]); if (MI == mapExternalElemIDToTimeLevel.end()) SU2_MPI::Error("Entry not found in mapExternalElemIDToTimeLevel", CURRENT_FUNCTION); const unsigned short timeLevel = min(timeLevelB, MI->second.short0); @@ -4244,15 +2523,15 @@ void CPhysicalGeometry::DetermineTimeLevelElements(CConfig* config, const vector if (FI->elemID1 < Global_nElem) { /* Local element ID of the first element. Per definition this is always a locally stored element. Also store its time level. */ - const unsigned long elemID0 = FI->elemID0 - beg_node[rank]; + const unsigned long elemID0 = FI->elemID0 - elemPartitioner.GetFirstIndexOnRank(rank); const unsigned short timeLevel0 = elem[elemID0]->GetTimeLevel(); /* Determine the status of the second element. */ - if (FI->elemID1 >= beg_node[rank] && FI->elemID1 < beg_node[rank] + nElem) { + if (elemPartitioner.GetRankContainingIndex(FI->elemID1) == static_cast(rank)) { /* Both elements are stored locally. Determine the local element of the second element and determine the minimum time level. */ - const unsigned long elemID1 = FI->elemID1 - beg_node[rank]; + const unsigned long elemID1 = FI->elemID1 - elemPartitioner.GetFirstIndexOnRank(rank); const unsigned short timeLevel1 = elem[elemID1]->GetTimeLevel(); const unsigned short timeLevel = min(timeLevel0, timeLevel1); @@ -4272,7 +2551,7 @@ void CPhysicalGeometry::DetermineTimeLevelElements(CConfig* config, const vector /* The second element is stored on a different processor. Retrieve its time level from mapExternalElemIDToTimeLevel and determine the minimum time level. */ - MI = mapExternalElemIDToTimeLevel.find(FI->elemID1); + auto MI = mapExternalElemIDToTimeLevel.find(FI->elemID1); if (MI == mapExternalElemIDToTimeLevel.end()) SU2_MPI::Error("Entry not found in mapExternalElemIDToTimeLevel", CURRENT_FUNCTION); const unsigned short timeLevel = min(timeLevel0, MI->second.short0); @@ -4333,7 +2612,7 @@ void CPhysicalGeometry::DetermineTimeLevelElements(CConfig* config, const vector &status); for (unsigned long j = 0; j < recvElem[i].size(); ++j) { - MI = mapExternalElemIDToTimeLevel.find(recvElem[i][j]); + auto MI = mapExternalElemIDToTimeLevel.find(recvElem[i][j]); if (MI == mapExternalElemIDToTimeLevel.end()) SU2_MPI::Error("Entry not found in mapExternalElemIDToTimeLevel", CURRENT_FUNCTION); MI->second.short0 = min(returnBuf[i][j], MI->second.short0); @@ -4396,10 +2675,61 @@ void CPhysicalGeometry::DetermineTimeLevelElements(CConfig* config, const vector } } -void CPhysicalGeometry::ComputeFEMGraphWeights(CConfig* config, const vector& localFaces, - const vector >& adjacency, - const map& mapExternalElemIDToTimeLevel, - vector& vwgt, vector >& adjwgt) { +void CPhysicalGeometry::StoreFaceInfoInLocalElements(const vector& localFaces) { + /*--- Define the linear partitioning of the elements. ---*/ + CLinearPartitioner elemPartitioner(Global_nElem, 0); + + /*--- Loop over the locally stored elements. ---*/ + for (unsigned long k = 0; k < nElem; ++k) { + /*--- Get the number of faces and the corner points of these + faces of this element. ---*/ + unsigned short nFaces; + unsigned short nPointsPerFace[6]; + unsigned long faceConn[6][4]; + elem[k]->GetCornerPointsAllFaces(nFaces, nPointsPerFace, faceConn); + + /*--- Initialize the data structures for the neighbors. ---*/ + elem[k]->InitializeNeighbors(nFaces); + + /*--- Loop over the faces of the element. ---*/ + for (unsigned short i = 0; i < nFaces; ++i) { + /*--- Create an object of the class CFaceOfElement for this face. ---*/ + CFaceOfElement thisFace; + thisFace.nCornerPoints = nPointsPerFace[i]; + for (unsigned short j = 0; j < nPointsPerFace[i]; ++j) thisFace.cornerPoints[j] = faceConn[i][j]; + thisFace.elemID0 = k + elemPartitioner.GetFirstIndexOnRank(rank); + thisFace.nPolySol0 = elem[k]->GetNPolySol(); + thisFace.nDOFsElem0 = elem[k]->GetNDOFsSol(); + + thisFace.CreateUniqueNumbering(); + + /*--- Search for this face in localFaces. Store the neighboring element and + the ownership of this face. Store the periodic index for a periodic face. ---*/ + auto low = lower_bound(localFaces.begin(), localFaces.end(), thisFace); + if (low != localFaces.end()) { + if (!(thisFace < *low)) { + if (low->elemID0 == thisFace.elemID0) { + elem[k]->SetNeighbor_Elements(low->elemID1, i); + elem[k]->SetOwnerFace(low->elem0IsOwner, i); + } else { + elem[k]->SetNeighbor_Elements(low->elemID0, i); + elem[k]->SetOwnerFace(!(low->elem0IsOwner), i); + } + + if (low->periodicIndex > 0) elem[k]->SetPeriodicIndex(low->periodicIndex - 1, i); + } + } + } + } +} + +void CPhysicalGeometry::DetermineFEMGraphWeights( + CConfig* config, const vector& localFaces, const vector >& adjacency, + const map& mapExternalElemIDToTimeLevel, vector& vwgt, + vector >& adjwgt) { + /*--- Define the linear partitioning of the elements. ---*/ + CLinearPartitioner elemPartitioner(Global_nElem, 0); + /*--- Determine the maximum time level that occurs in the grid. ---*/ unsigned short maxTimeLevel = 0; for (unsigned long i = 0; i < nElem; ++i) maxTimeLevel = max(maxTimeLevel, elem[i]->GetTimeLevel()); @@ -4409,6 +2739,12 @@ void CPhysicalGeometry::ComputeFEMGraphWeights(CConfig* config, const vector::const_iterator low; - low = lower_bound(localFaces.begin(), localFaces.end(), thisFace); + auto low = lower_bound(localFaces.begin(), localFaces.end(), thisFace); bool thisFaceFound = false; if (low != localFaces.end()) { @@ -4580,7 +2915,8 @@ void CPhysicalGeometry::ComputeFEMGraphWeights(CConfig* config, const vectorGetVTK_Type(); - const unsigned long elemID = bound[iMarker][l]->GetDomainElement() - beg_node[rank]; + const unsigned long elemID = + bound[iMarker][l]->GetDomainElement() - elemPartitioner.GetFirstIndexOnRank(rank); const unsigned short nPolySol = elem[elemID]->GetNPolySol(); const unsigned short VTK_Type_Elem = elem[elemID]->GetVTK_Type(); const bool JacIsConstant = bound[iMarker][l]->GetJacobianConsideredConstant(); @@ -4624,12 +2960,13 @@ void CPhysicalGeometry::ComputeFEMGraphWeights(CConfig* config, const vector= beg_node[rank] && adjacency[i][j] < beg_node[rank] + nElem) { + if (elemPartitioner.GetRankContainingIndex(adjacency[i][j]) == static_cast(rank)) { /* Locally stored element. Determine its local ID and set the time level and number of solution DOFs. */ - unsigned long elemID1 = adjacency[i][j] - beg_node[rank]; + unsigned long elemID1 = adjacency[i][j] - elemPartitioner.GetFirstIndexOnRank(rank); timeLevel1 = elem[elemID1]->GetTimeLevel(); nDOFs1 = elem[elemID1]->GetNDOFsSol(); } else { /* The neighbor is an external element. Find it in mapExternalElemIDToTimeLevel and set the time level and number of solution DOFs accordingly. */ - map::const_iterator MI; - MI = mapExternalElemIDToTimeLevel.find(adjacency[i][j]); + const auto MI = mapExternalElemIDToTimeLevel.find(adjacency[i][j]); if (MI == mapExternalElemIDToTimeLevel.end()) SU2_MPI::Error("Entry not found in mapExternalElemIDToTimeLevel", CURRENT_FUNCTION); timeLevel1 = MI->second.short0; diff --git a/Common/src/geometry/dual_grid/CDualGrid.cpp b/Common/src/geometry/dual_grid/CDualGrid.cpp index 3d3bab552adf..bf2a20720fff 100644 --- a/Common/src/geometry/dual_grid/CDualGrid.cpp +++ b/Common/src/geometry/dual_grid/CDualGrid.cpp @@ -2,14 +2,14 @@ * \file CDualGrid.cpp * \brief Main classes for defining the dual grid * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/geometry/dual_grid/CEdge.cpp b/Common/src/geometry/dual_grid/CEdge.cpp index 8e166575b7f2..bec8bd85b24c 100644 --- a/Common/src/geometry/dual_grid/CEdge.cpp +++ b/Common/src/geometry/dual_grid/CEdge.cpp @@ -2,14 +2,14 @@ * \file CEdge.cpp * \brief Implementation of the edge class. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/geometry/dual_grid/CPoint.cpp b/Common/src/geometry/dual_grid/CPoint.cpp index 35c45a826b4b..675fa232ab84 100644 --- a/Common/src/geometry/dual_grid/CPoint.cpp +++ b/Common/src/geometry/dual_grid/CPoint.cpp @@ -2,14 +2,14 @@ * \file CPoint.cpp * \brief Main classes for defining the points of the dual grid * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -94,12 +94,6 @@ void CPoint::FullAllocation(unsigned short imesh, const CConfig* config) { Vertex.resize(npoint); - /*--- For smoothing the numerical grid coordinates ---*/ - if (config->GetSmoothNumGrid()) { - Coord_Old.resize(npoint, nDim) = su2double(0.0); - Coord_Sum.resize(npoint, nDim) = su2double(0.0); - } - /*--- Storage of grid velocities for dynamic meshes. ---*/ if (config->GetDynamic_Grid()) { @@ -190,5 +184,3 @@ void CPoint::SetCoord_Old() { assert(Coord_Old.size() == Coord.size()); parallelCopy(Coord.size(), Coord.data(), Coord_Old.data()); } - -void CPoint::SetCoord_SumZero() { parallelSet(Coord_Sum.size(), 0.0, Coord_Sum.data()); } diff --git a/Common/src/geometry/dual_grid/CTurboVertex.cpp b/Common/src/geometry/dual_grid/CTurboVertex.cpp index bc07e827ee0f..87a66e0ff023 100644 --- a/Common/src/geometry/dual_grid/CTurboVertex.cpp +++ b/Common/src/geometry/dual_grid/CTurboVertex.cpp @@ -2,14 +2,14 @@ * \file CTurboVertex.cpp * \brief Main classes for defining the turbo vertices of the dual grid * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/geometry/dual_grid/CVertex.cpp b/Common/src/geometry/dual_grid/CVertex.cpp index a3e2b58aef49..780cc510f6fe 100644 --- a/Common/src/geometry/dual_grid/CVertex.cpp +++ b/Common/src/geometry/dual_grid/CVertex.cpp @@ -2,14 +2,14 @@ * \file CVertex.cpp * \brief Main classes for defining the vertices of the dual grid * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/geometry/elements/CElement.cpp b/Common/src/geometry/elements/CElement.cpp index c42a37075622..2f01bb5323c2 100644 --- a/Common/src/geometry/elements/CElement.cpp +++ b/Common/src/geometry/elements/CElement.cpp @@ -2,14 +2,14 @@ * \file CElement.cpp * \brief Definition of the Finite Element structure (elements) * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -47,6 +47,8 @@ CElement::CElement(unsigned short ngauss, unsigned short nnodes, unsigned short NodalStress.resize(nNodes, 6) = su2double(0.0); + NodalTemperature.resize(nNodes) = su2double(0.0); + Mab.resize(nNodes, nNodes); Ks_ab.resize(nNodes, nNodes); Kab.resize(nNodes); diff --git a/Common/src/geometry/elements/CHEXA8.cpp b/Common/src/geometry/elements/CHEXA8.cpp index d7066e3a7bed..c0141e7c38d7 100644 --- a/Common/src/geometry/elements/CHEXA8.cpp +++ b/Common/src/geometry/elements/CHEXA8.cpp @@ -2,14 +2,14 @@ * \file CHEXA8.cpp * \brief Definition of 8-node hexa element with 8 Gauss points. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/geometry/elements/CLINE.cpp b/Common/src/geometry/elements/CLINE.cpp index b4030a55d1fc..c2438886b43f 100644 --- a/Common/src/geometry/elements/CLINE.cpp +++ b/Common/src/geometry/elements/CLINE.cpp @@ -2,14 +2,14 @@ * \file CLINE.cpp * \brief Definition of the 2-node line element with two Gauss points. * \author T. Dick - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/geometry/elements/CPRISM6.cpp b/Common/src/geometry/elements/CPRISM6.cpp index d4e12dd8fd73..5619301af931 100644 --- a/Common/src/geometry/elements/CPRISM6.cpp +++ b/Common/src/geometry/elements/CPRISM6.cpp @@ -2,14 +2,14 @@ * \file CPRISM6.cpp * \brief Definition of the 6-node triangular prism element with 6 Gauss points. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/geometry/elements/CPYRAM5.cpp b/Common/src/geometry/elements/CPYRAM5.cpp index ea6981adb923..1a959480f549 100644 --- a/Common/src/geometry/elements/CPYRAM5.cpp +++ b/Common/src/geometry/elements/CPYRAM5.cpp @@ -2,14 +2,14 @@ * \file CPYRAM5.cpp * \brief Definition of 5-node pyramid element with 5 Gauss points. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/geometry/elements/CPYRAM6.cpp b/Common/src/geometry/elements/CPYRAM6.cpp index c0a4a72a8484..2e3f3fc9d1c7 100644 --- a/Common/src/geometry/elements/CPYRAM6.cpp +++ b/Common/src/geometry/elements/CPYRAM6.cpp @@ -2,14 +2,14 @@ * \file CPYRAM6.cpp * \brief Definition of 5-node pyramid element with 6 Gauss points. * \author T.Dick - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/geometry/elements/CQUAD4.cpp b/Common/src/geometry/elements/CQUAD4.cpp index 07725a3af195..4a32ea7a3867 100644 --- a/Common/src/geometry/elements/CQUAD4.cpp +++ b/Common/src/geometry/elements/CQUAD4.cpp @@ -2,14 +2,14 @@ * \file CQUAD4.cpp * \brief Definition of the 4-node quadrilateral element with 4 Gauss points. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -67,7 +67,6 @@ CQUAD4::CQUAD4() : CElementWithKnownSizes() { /*--- Store the extrapolation functions (used to compute nodal stresses) ---*/ su2double ExtrapCoord[4][2], sqrt3 = 1.732050807568877; - ; ExtrapCoord[0][0] = -sqrt3; ExtrapCoord[0][1] = -sqrt3; diff --git a/Common/src/geometry/elements/CTETRA1.cpp b/Common/src/geometry/elements/CTETRA1.cpp index 320cb53ca069..206283bfee0d 100644 --- a/Common/src/geometry/elements/CTETRA1.cpp +++ b/Common/src/geometry/elements/CTETRA1.cpp @@ -2,14 +2,14 @@ * \file CTETRA1.cpp * \brief Definition of 4-node tetra element with 1 Gauss point. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/geometry/elements/CTETRA4.cpp b/Common/src/geometry/elements/CTETRA4.cpp index 7a1126db0245..dc6285225482 100644 --- a/Common/src/geometry/elements/CTETRA4.cpp +++ b/Common/src/geometry/elements/CTETRA4.cpp @@ -2,14 +2,14 @@ * \file CTETRA4.cpp * \brief Definition of 4-node tetrahedral element with 4 Gauss point. * \author T. Dick - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/geometry/elements/CTRIA1.cpp b/Common/src/geometry/elements/CTRIA1.cpp index bbfbc70d8412..3fbeebf12bd1 100644 --- a/Common/src/geometry/elements/CTRIA1.cpp +++ b/Common/src/geometry/elements/CTRIA1.cpp @@ -2,14 +2,14 @@ * \file CTRIA1.cpp * \brief Definition of the 3-node triangular element with one Gauss point. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/geometry/elements/CTRIA3.cpp b/Common/src/geometry/elements/CTRIA3.cpp index 64db08bc07f8..03f4d8514cd5 100644 --- a/Common/src/geometry/elements/CTRIA3.cpp +++ b/Common/src/geometry/elements/CTRIA3.cpp @@ -2,14 +2,14 @@ * \file CTRIA3.cpp * \brief Definition of the 3-node triangular element with three Gauss points. * \author T. Dick - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/geometry/meshreader/CBoxMeshReaderFEM.cpp b/Common/src/geometry/meshreader/CBoxMeshReaderFEM.cpp new file mode 100644 index 000000000000..6a77d00d6cfe --- /dev/null +++ b/Common/src/geometry/meshreader/CBoxMeshReaderFEM.cpp @@ -0,0 +1,348 @@ +/*! + * \file CBoxMeshReaderFEM.cpp + * \brief Reads a 3D box grid into linear partitions for the + * finite element solver (FEM). + * \author T. Economon, E. van der Weide + * \version 8.2.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2025, 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/toolboxes/CLinearPartitioner.hpp" +#include "../../../include/geometry/meshreader/CBoxMeshReaderFEM.hpp" + +CBoxMeshReaderFEM::CBoxMeshReaderFEM(const CConfig* val_config, unsigned short val_iZone, unsigned short val_nZone) + : CMeshReaderBase(val_config, val_iZone, val_nZone) { + /* The box mesh is always 3D. */ + dimension = 3; + + /* Set the VTK type for the interior elements and the boundary elements. */ + KindElem = HEXAHEDRON; + KindBound = QUADRILATERAL; + + /* The number of grid nodes in the i, j and k directions. */ + nNode = config->GetMeshBoxSize(0); + mNode = config->GetMeshBoxSize(1); + pNode = config->GetMeshBoxSize(2); + + /* Lengths for non-square domains. */ + Lx = config->GetMeshBoxLength(0); + Ly = config->GetMeshBoxLength(1); + Lz = config->GetMeshBoxLength(2); + + /* Offsets in x, y and z directions from 0.0. */ + Ox = config->GetMeshBoxOffset(0); + Oy = config->GetMeshBoxOffset(1); + Oz = config->GetMeshBoxOffset(2); + + /* Polynomial degree of the solution. */ + nPolySol = config->GetMeshBoxPSolFEM(); + + /*--- Compute and store the interior elements, points, and surface elements + for this rank, for which simple analytic formulae can be used. ---*/ + ComputeBoxVolumeConnectivity(); + ComputeBoxPointCoordinates(); + ComputeBoxSurfaceConnectivity(); +} + +CBoxMeshReaderFEM::~CBoxMeshReaderFEM() = default; + +void CBoxMeshReaderFEM::ComputeBoxPointCoordinates() { + /*--- Set the global count of points based on the grid dimensions. ---*/ + numberOfGlobalPoints = nNode * mNode * pNode; + + /*--- Loop over the local elements to determine the global + point IDs to be stored on this rank. --*/ + unsigned long ind = 0; + for (unsigned long i = 0; i < numberOfLocalElements; ++i) { + /*--- Store the number of grid DOFs for this element and + skip the meta data for this element (5 entries). ---*/ + const unsigned long nDOFsGrid = localVolumeElementConnectivity[ind + 3]; + ind += 5; + + /*--- Copy the connectivity to globalPointIDs. ---*/ + unsigned long* conn = localVolumeElementConnectivity.data() + ind; + ind += nDOFsGrid; + globalPointIDs.insert(globalPointIDs.end(), conn, conn + nDOFsGrid); + } + + /*--- Sort the globalPointIDs and remove the duplicate entries. ---*/ + sort(globalPointIDs.begin(), globalPointIDs.end()); + vector::iterator lastNode; + lastNode = unique(globalPointIDs.begin(), globalPointIDs.end()); + globalPointIDs.erase(lastNode, globalPointIDs.end()); + + /*--- Determine the number of locally stored points. ---*/ + numberOfLocalPoints = globalPointIDs.size(); + + /*--- Allocate the memory for the locally stored points. ---*/ + localPointCoordinates.resize(dimension); + for (int k = 0; k < dimension; k++) localPointCoordinates[k].resize(numberOfLocalPoints); + + /*--- Loop over the locally stored points. ---*/ + const unsigned long nPointIJ = nNode * mNode; + for (unsigned long i = 0; i < numberOfLocalPoints; ++i) { + /*--- Convert the global index to i,j,k indices. ---*/ + const unsigned long kNode = globalPointIDs[i] / nPointIJ; + const unsigned long rem = globalPointIDs[i] - kNode * nPointIJ; + const unsigned long jNode = rem / nNode; + const unsigned long iNode = rem - jNode * nNode; + + /*--- Store the coordinates of the point. ---*/ + localPointCoordinates[0][i] = SU2_TYPE::GetValue(Lx * ((su2double)iNode) / ((su2double)(nNode - 1)) + Ox); + localPointCoordinates[1][i] = SU2_TYPE::GetValue(Ly * ((su2double)jNode) / ((su2double)(mNode - 1)) + Oy); + localPointCoordinates[2][i] = SU2_TYPE::GetValue(Lz * ((su2double)kNode) / ((su2double)(pNode - 1)) + Oz); + } +} + +void CBoxMeshReaderFEM::ComputeBoxVolumeConnectivity() { + /*--- Set the global count of elements based on the grid dimensions. ---*/ + const unsigned long nElemI = nNode - 1; + const unsigned long nElemIJ = nElemI * (mNode - 1); + numberOfGlobalElements = nElemIJ * (pNode - 1); + + /*--- Get a partitioner to help with linear partitioning. ---*/ + CLinearPartitioner elemPartitioner(numberOfGlobalElements, 0); + + /*--- Determine the index of the first and last element to be stored + on this rank and the number of local elements. ---*/ + const unsigned long firstIndex = elemPartitioner.GetFirstIndexOnRank(rank); + const unsigned long lastIndex = elemPartitioner.GetLastIndexOnRank(rank); + numberOfLocalElements = elemPartitioner.GetSizeOnRank(rank); + + /*--- Loop over the owned element range. ---*/ + for (unsigned long elem = firstIndex; elem < lastIndex; ++elem) { + /*--- Retrieve the i,j,k indices of this element, which are the indices + of the lower, left, back point of the element. --*/ + const unsigned long kNode = elem / nElemIJ; + const unsigned long rem = elem - kNode * nElemIJ; + const unsigned long jNode = rem / nElemI; + const unsigned long iNode = rem - jNode * nElemI; + + /*--- Store the meta data of this element. ---*/ + localVolumeElementConnectivity.push_back(KindElem); + localVolumeElementConnectivity.push_back(1); // Pol. degree grid. + localVolumeElementConnectivity.push_back(nPolySol); + localVolumeElementConnectivity.push_back(8); // Number of grid DOFs. + localVolumeElementConnectivity.push_back(elem); // Global elem ID. + + /*--- Store the volume connectivity in the format used + by the FEM solver. ---*/ + localVolumeElementConnectivity.push_back(kNode * mNode * nNode + jNode * nNode + iNode); + localVolumeElementConnectivity.push_back(kNode * mNode * nNode + jNode * nNode + iNode + 1); + localVolumeElementConnectivity.push_back(kNode * mNode * nNode + (jNode + 1) * nNode + iNode); + localVolumeElementConnectivity.push_back(kNode * mNode * nNode + (jNode + 1) * nNode + iNode + 1); + localVolumeElementConnectivity.push_back((kNode + 1) * mNode * nNode + jNode * nNode + iNode); + localVolumeElementConnectivity.push_back((kNode + 1) * mNode * nNode + jNode * nNode + iNode + 1); + localVolumeElementConnectivity.push_back((kNode + 1) * mNode * nNode + (jNode + 1) * nNode + iNode); + localVolumeElementConnectivity.push_back((kNode + 1) * mNode * nNode + (jNode + 1) * nNode + iNode + 1); + } +} + +void CBoxMeshReaderFEM::ComputeBoxSurfaceConnectivity() { + /*--- Determine the number of elements in i-direction and the + number of elements on a k-face. ---*/ + const unsigned long nElemI = nNode - 1; + const unsigned long nElemIJ = nElemI * (mNode - 1); + + /*--- Get a partitioner to help with linear partitioning. ---*/ + CLinearPartitioner elemPartitioner(numberOfGlobalElements, 0); + + /*--- The box always has 6 markers. Allocate the required memory. ---*/ + numberOfMarkers = 6; + numberOfLocalSurfaceElements.resize(numberOfMarkers, 0); + surfaceElementConnectivity.resize(numberOfMarkers); + markerNames.resize(numberOfMarkers); + + /*--- Loop over all faces on the xMin (= iMin) boundary. ---*/ + markerNames[0] = "x_minus"; + + unsigned long ind = 0; + for (unsigned long kNode = 0; kNode < pNode - 1; ++kNode) { + for (unsigned long jNode = 0; jNode < mNode - 1; ++jNode, ++ind) { + /*--- Determine the corresponding global element ID and check + if it is stored on this rank. ---*/ + const unsigned long globalElemID = kNode * nElemIJ + jNode * nElemI; + if (elemPartitioner.GetRankContainingIndex(globalElemID) == static_cast(rank)) { + /*--- The corresponding volume element is stored on this rank, + hence store the surface element as well. ---*/ + surfaceElementConnectivity[0].push_back(KindBound); // VTK type. + surfaceElementConnectivity[0].push_back(1); // Poly degree grid. + surfaceElementConnectivity[0].push_back(4); // Number of grid DOFs. + surfaceElementConnectivity[0].push_back(ind); // Global surface element ID. + surfaceElementConnectivity[0].push_back(globalElemID); // Global volume element ID. + + surfaceElementConnectivity[0].push_back(kNode * mNode * nNode + jNode * nNode); + surfaceElementConnectivity[0].push_back((kNode + 1) * mNode * nNode + jNode * nNode); + surfaceElementConnectivity[0].push_back(kNode * mNode * nNode + (jNode + 1) * nNode); + surfaceElementConnectivity[0].push_back((kNode + 1) * mNode * nNode + (jNode + 1) * nNode); + + /*--- Update the number of surface elements for this marker. ---*/ + ++numberOfLocalSurfaceElements[0]; + } + } + } + + /*--- Loop over all faces on the xMax (= iMax) boundary. ---*/ + markerNames[1] = "x_plus"; + + ind = 0; + for (unsigned long kNode = 0; kNode < pNode - 1; ++kNode) { + for (unsigned long jNode = 0; jNode < mNode - 1; ++jNode, ++ind) { + /*--- Determine the corresponding global element ID and check + if it is stored on this rank. ---*/ + const unsigned long globalElemID = kNode * nElemIJ + jNode * nElemI + nElemI - 1; + if (elemPartitioner.GetRankContainingIndex(globalElemID) == static_cast(rank)) { + /*--- The corresponding volume element is stored on this rank, + hence store the surface element as well. ---*/ + surfaceElementConnectivity[1].push_back(KindBound); // VTK type. + surfaceElementConnectivity[1].push_back(1); // Poly degree grid. + surfaceElementConnectivity[1].push_back(4); // Number of grid DOFs. + surfaceElementConnectivity[1].push_back(ind); // Global surface element ID. + surfaceElementConnectivity[1].push_back(globalElemID); // Global volume element ID. + + surfaceElementConnectivity[1].push_back(kNode * mNode * nNode + jNode * nNode + (nNode - 1)); + surfaceElementConnectivity[1].push_back(kNode * mNode * nNode + (jNode + 1) * nNode + (nNode - 1)); + surfaceElementConnectivity[1].push_back((kNode + 1) * mNode * nNode + jNode * nNode + (nNode - 1)); + surfaceElementConnectivity[1].push_back((kNode + 1) * mNode * nNode + (jNode + 1) * nNode + (nNode - 1)); + + /*--- Update the number of surface elements for this marker. ---*/ + ++numberOfLocalSurfaceElements[1]; + } + } + } + + /*--- Loop over all faces on the yMin (= jMin) boundary. ---*/ + markerNames[2] = "y_minus"; + + ind = 0; + for (unsigned long kNode = 0; kNode < pNode - 1; ++kNode) { + for (unsigned long iNode = 0; iNode < nNode - 1; ++iNode, ++ind) { + /*--- Determine the corresponding global element ID and check + if it is stored on this rank. ---*/ + const unsigned long globalElemID = kNode * nElemIJ + iNode; + if (elemPartitioner.GetRankContainingIndex(globalElemID) == static_cast(rank)) { + /*--- The corresponding volume element is stored on this rank, + hence store the surface element as well. ---*/ + surfaceElementConnectivity[2].push_back(KindBound); // VTK type. + surfaceElementConnectivity[2].push_back(1); // Poly degree grid. + surfaceElementConnectivity[2].push_back(4); // Number of grid DOFs. + surfaceElementConnectivity[2].push_back(ind); // Global surface element ID. + surfaceElementConnectivity[2].push_back(globalElemID); // Global volume element ID. + + surfaceElementConnectivity[2].push_back(kNode * mNode * nNode + iNode); + surfaceElementConnectivity[2].push_back(kNode * mNode * nNode + iNode + 1); + surfaceElementConnectivity[2].push_back((kNode + 1) * mNode * nNode + iNode); + surfaceElementConnectivity[2].push_back((kNode + 1) * mNode * nNode + iNode + 1); + + /*--- Update the number of surface elements for this marker. ---*/ + ++numberOfLocalSurfaceElements[2]; + } + } + } + + /*--- Loop over all faces on the yMax (= jMax) boundary. ---*/ + markerNames[3] = "y_plus"; + + ind = 0; + for (unsigned long kNode = 0; kNode < pNode - 1; ++kNode) { + for (unsigned long iNode = 0; iNode < nNode - 1; ++iNode, ++ind) { + /*--- Determine the corresponding global element ID and check + if it is stored on this rank. ---*/ + const unsigned long globalElemID = kNode * nElemIJ + (mNode - 2) * nElemI + iNode; + if (elemPartitioner.GetRankContainingIndex(globalElemID) == static_cast(rank)) { + /*--- The corresponding volume element is stored on this rank, + hence store the surface element as well. ---*/ + surfaceElementConnectivity[3].push_back(KindBound); // VTK type. + surfaceElementConnectivity[3].push_back(1); // Poly degree grid. + surfaceElementConnectivity[3].push_back(4); // Number of grid DOFs. + surfaceElementConnectivity[3].push_back(ind); // Global surface element ID. + surfaceElementConnectivity[3].push_back(globalElemID); // Global volume element ID. + + surfaceElementConnectivity[3].push_back(kNode * mNode * nNode + (mNode - 1) * nNode + iNode); + surfaceElementConnectivity[3].push_back(kNode * mNode * nNode + (mNode - 1) * nNode + iNode + 1); + surfaceElementConnectivity[3].push_back((kNode + 1) * mNode * nNode + (mNode - 1) * nNode + iNode); + surfaceElementConnectivity[3].push_back((kNode + 1) * mNode * nNode + (mNode - 1) * nNode + iNode + 1); + + /*--- Update the number of surface elements for this marker. ---*/ + ++numberOfLocalSurfaceElements[3]; + } + } + } + + /*--- Loop over all faces on the zMin (= kMin) boundary. ---*/ + markerNames[4] = "z_minus"; + + ind = 0; + for (unsigned long jNode = 0; jNode < mNode - 1; ++jNode) { + for (unsigned long iNode = 0; iNode < nNode - 1; ++iNode, ++ind) { + /*--- Determine the corresponding global element ID and check + if it is stored on this rank. ---*/ + const unsigned long globalElemID = jNode * nElemI + iNode; + if (elemPartitioner.GetRankContainingIndex(globalElemID) == static_cast(rank)) { + /*--- The corresponding volume element is stored on this rank, + hence store the surface element as well. ---*/ + surfaceElementConnectivity[4].push_back(KindBound); // VTK type. + surfaceElementConnectivity[4].push_back(1); // Poly degree grid. + surfaceElementConnectivity[4].push_back(4); // Number of grid DOFs. + surfaceElementConnectivity[4].push_back(ind); // Global surface element ID. + surfaceElementConnectivity[4].push_back(globalElemID); // Global volume element ID. + + surfaceElementConnectivity[4].push_back(jNode * nNode + iNode); + surfaceElementConnectivity[4].push_back(jNode * nNode + iNode + 1); + surfaceElementConnectivity[4].push_back((jNode + 1) * nNode + iNode); + surfaceElementConnectivity[4].push_back((jNode + 1) * nNode + iNode + 1); + + /*--- Update the number of surface elements for this marker. ---*/ + ++numberOfLocalSurfaceElements[4]; + } + } + } + + /*--- Loop over all faces on the zMax (= kMax) boundary. ---*/ + markerNames[5] = "z_plus"; + + ind = 0; + for (unsigned long jNode = 0; jNode < mNode - 1; ++jNode) { + for (unsigned long iNode = 0; iNode < nNode - 1; ++iNode, ++ind) { + /*--- Determine the corresponding global element ID and check + if it is stored on this rank. ---*/ + const unsigned long globalElemID = (pNode - 2) * nElemIJ + jNode * nElemI + iNode; + if (elemPartitioner.GetRankContainingIndex(globalElemID) == static_cast(rank)) { + /*--- The corresponding volume element is stored on this rank, + hence store the surface element as well. ---*/ + surfaceElementConnectivity[5].push_back(KindBound); // VTK type. + surfaceElementConnectivity[5].push_back(1); // Poly degree grid. + surfaceElementConnectivity[5].push_back(4); // Number of grid DOFs. + surfaceElementConnectivity[5].push_back(ind); // Global surface element ID. + surfaceElementConnectivity[5].push_back(globalElemID); // Global volume element ID. + + surfaceElementConnectivity[5].push_back((pNode - 1) * mNode * nNode + jNode * nNode + iNode); + surfaceElementConnectivity[5].push_back((pNode - 1) * mNode * nNode + jNode * nNode + iNode + 1); + surfaceElementConnectivity[5].push_back((pNode - 1) * mNode * nNode + (jNode + 1) * nNode + iNode); + surfaceElementConnectivity[5].push_back((pNode - 1) * mNode * nNode + (jNode + 1) * nNode + iNode + 1); + + /*--- Update the number of surface elements for this marker. ---*/ + ++numberOfLocalSurfaceElements[5]; + } + } + } +} diff --git a/Common/src/geometry/meshreader/CBoxMeshReaderFVM.cpp b/Common/src/geometry/meshreader/CBoxMeshReaderFVM.cpp index e4ee811eaec8..b361959d32fe 100644 --- a/Common/src/geometry/meshreader/CBoxMeshReaderFVM.cpp +++ b/Common/src/geometry/meshreader/CBoxMeshReaderFVM.cpp @@ -3,14 +3,14 @@ * \brief Reads a 3D box grid into linear partitions for the * finite volume solver (FVM). * \author T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -29,8 +29,8 @@ #include "../../../include/toolboxes/CLinearPartitioner.hpp" #include "../../../include/geometry/meshreader/CBoxMeshReaderFVM.hpp" -CBoxMeshReaderFVM::CBoxMeshReaderFVM(CConfig* val_config, unsigned short val_iZone, unsigned short val_nZone) - : CMeshReaderFVM(val_config, val_iZone, val_nZone) { +CBoxMeshReaderFVM::CBoxMeshReaderFVM(const CConfig* val_config, unsigned short val_iZone, unsigned short val_nZone) + : CMeshReaderBase(val_config, val_iZone, val_nZone) { /* The box mesh is always 3D. */ dimension = 3; @@ -74,7 +74,7 @@ void CBoxMeshReaderFVM::ComputeBoxPointCoordinates() { /* Determine number of local points */ for (unsigned long globalIndex = 0; globalIndex < numberOfGlobalPoints; globalIndex++) { - if ((int)pointPartitioner.GetRankContainingIndex(globalIndex) == rank) { + if (static_cast(pointPartitioner.GetRankContainingIndex(globalIndex)) == rank) { numberOfLocalPoints++; } } @@ -88,7 +88,7 @@ void CBoxMeshReaderFVM::ComputeBoxPointCoordinates() { for (unsigned long kNode = 0; kNode < pNode; kNode++) { for (unsigned long jNode = 0; jNode < mNode; jNode++) { for (unsigned long iNode = 0; iNode < nNode; iNode++) { - if ((int)pointPartitioner.GetRankContainingIndex(globalIndex) == rank) { + if (static_cast(pointPartitioner.GetRankContainingIndex(globalIndex)) == rank) { /* Store the coordinates more clearly. */ const passivedouble x = SU2_TYPE::GetValue(Lx * ((su2double)iNode) / ((su2double)(nNode - 1)) + Ox); const passivedouble y = SU2_TYPE::GetValue(Ly * ((su2double)jNode) / ((su2double)(mNode - 1)) + Oy); @@ -133,7 +133,7 @@ void CBoxMeshReaderFVM::ComputeBoxVolumeConnectivity() { /* Check whether any of the points is in our linear partition. */ bool isOwned = false; for (unsigned short i = 0; i < N_POINTS_HEXAHEDRON; i++) { - if ((int)pointPartitioner.GetRankContainingIndex(connectivity[i]) == rank) { + if (static_cast(pointPartitioner.GetRankContainingIndex(connectivity[i])) == rank) { isOwned = true; } } diff --git a/Common/src/fem/fem_cgns_elements.cpp b/Common/src/geometry/meshreader/CCGNSElementType.cpp similarity index 68% rename from Common/src/fem/fem_cgns_elements.cpp rename to Common/src/geometry/meshreader/CCGNSElementType.cpp index e4df7f0393bd..73a9d1e2913f 100644 --- a/Common/src/fem/fem_cgns_elements.cpp +++ b/Common/src/geometry/meshreader/CCGNSElementType.cpp @@ -1,15 +1,15 @@ /*! - * \file fem_cgns_elements.cpp - * \brief CGNS element definitions and conversions to the SU2 standard. + * \file CCGNSElementType.cpp + * \brief Class that converts the CGNS element definitions to the SU2 standard. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -26,9 +26,8 @@ */ #ifdef HAVE_CGNS -#include "../../include/fem/fem_cgns_elements.hpp" -#include "../../include/fem/geometry_structure_fem_part.hpp" -#include "../../include/parallelization/mpi_structure.hpp" +#include "../../../include/geometry/meshreader/CCGNSElementType.hpp" +#include "../../../include/option_structure.hpp" #include #include @@ -36,434 +35,139 @@ using namespace std; -#if CGNS_VERSION >= 3300 - -void CCGNSElementType::DetermineMetaData(const unsigned short nDim, const int fn, const int iBase, const int iZone, - const int iConn) { - /* Store the connectivity ID. */ - connID = iConn; - - /* Read the element type and range from the CGNS file. */ - char cgnsname[CGNS_STRING_SIZE]; - int nBndry, parentFlag; - if (cg_section_read(fn, iBase, iZone, iConn, cgnsname, &elemType, &indBeg, &indEnd, &nBndry, &parentFlag) != CG_OK) - cg_error_exit(); - - /* Store the name of this connectivity. */ - connName = cgnsname; - - /* Determine the number of elements present in this connectivity section. */ - nElem = indEnd - indBeg + 1; - - /* Determine the dimension of this element type, i.e. the number of - parametric coordinates and conclude whether or not this is a volume or - surface connectivity. Note that it is possible that it is neither of these, - e.g. line elements for 3D. This information is not needed for the DG - flow solver and is therefore ignored. */ - const unsigned short nDimElem = DetermineElementDimension(fn, iBase, iZone); - volumeConn = (nDimElem == nDim); - surfaceConn = (nDimElem == nDim - 1); -} - -void CCGNSElementType::ReadBoundaryConnectivityRange(const int fn, const int iBase, const int iZone, - const unsigned long offsetRank, const unsigned long nBoundElemRank, - const unsigned long startingBoundElemIDRank, - unsigned long& locBoundElemCount, - vector& boundElems) { - /* Determine the index range to be read for this rank. */ - const cgsize_t iBeg = indBeg + offsetRank; - const cgsize_t iEnd = iBeg + nBoundElemRank - 1; - - /* Determine the size of the vector needed to read the connectivity - data from the CGNS file. */ - cgsize_t sizeNeeded; - if (cg_ElementPartialSize(fn, iBase, iZone, connID, iBeg, iEnd, &sizeNeeded) != CG_OK) cg_error_exit(); - - /* Allocate the memory for the connectivity and read the data. */ - vector connCGNSVec(sizeNeeded); - if (elemType == MIXED) { - vector connCGNSOffsetVec(iEnd - iBeg + 2); - if (cg_poly_elements_partial_read(fn, iBase, iZone, connID, iBeg, iEnd, connCGNSVec.data(), - connCGNSOffsetVec.data(), nullptr) != CG_OK) - cg_error_exit(); - } else { - if (cg_elements_partial_read(fn, iBase, iZone, connID, iBeg, iEnd, connCGNSVec.data(), nullptr) != CG_OK) - cg_error_exit(); - } - - /* Define the variables needed to convert the connectivities from CGNS to - SU2 format. Note that the vectors are needed to support a connectivity - section with mixed element types. */ - vector CGNS_Type; - vector VTK_Type; - vector nPoly; - vector nDOFs; - - vector > SU2ToCGNS; - - /* Definition of variables used in the loop below. */ - cgsize_t* connCGNS = connCGNSVec.data(); - ElementType_t typeElem = elemType; - vector connSU2; - - /* Loop over the elements just read. */ - for (unsigned long i = 0; i < nBoundElemRank; ++i, ++locBoundElemCount) { - /* Determine the element type for this element if this is a mixed - connectivity and set the pointer to the actual connectivity data. */ - if (elemType == MIXED) { - typeElem = (ElementType_t)connCGNS[0]; - ++connCGNS; +void CCGNSElementType::CGNSToSU2(const ElementType_t val_elemType, const unsigned long val_globalID, + const cgsize_t* connCGNS, std::vector& connSU2) { + /*--- Clear the contents of connSU2. ---*/ + connSU2.clear(); + + /*--- Search in the stored elements if the current element type is present. ---*/ + unsigned long ind; + for (ind = 0; ind < CGNSTypeStored.size(); ++ind) + if (val_elemType == CGNSTypeStored[ind]) break; + + /*--- If the element type is not present in the stored element types, + create the data. ---*/ + if (ind == CGNSTypeStored.size()) { + /*--- Call the appropriate routine to determine the actual data. ---*/ + unsigned short VTK_Type, nPoly, nDOFs; + vector SU2ToCGNS; + + switch (val_elemType) { + case NODE: + CreateDataNODE(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + case BAR_2: + CreateDataBAR_2(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + case BAR_3: + CreateDataBAR_3(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + case BAR_4: + CreateDataBAR_4(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + case BAR_5: + CreateDataBAR_5(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + case TRI_3: + CreateDataTRI_3(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + case TRI_6: + CreateDataTRI_6(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + case TRI_10: + CreateDataTRI_10(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + case TRI_15: + CreateDataTRI_15(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + case QUAD_4: + CreateDataQUAD_4(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + case QUAD_9: + CreateDataQUAD_9(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + case QUAD_16: + CreateDataQUAD_16(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + case QUAD_25: + CreateDataQUAD_25(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + case TETRA_4: + CreateDataTETRA_4(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + case TETRA_10: + CreateDataTETRA_10(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + case TETRA_20: + CreateDataTETRA_20(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + case TETRA_35: + CreateDataTETRA_35(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + case PYRA_5: + CreateDataPYRA_5(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + case PYRA_14: + CreateDataPYRA_14(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + case PYRA_30: + CreateDataPYRA_30(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + case PYRA_55: + CreateDataPYRA_55(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + case PENTA_6: + CreateDataPENTA_6(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + case PENTA_18: + CreateDataPENTA_18(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + case PENTA_40: + CreateDataPENTA_40(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + case PENTA_75: + CreateDataPENTA_75(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + case HEXA_8: + CreateDataHEXA_8(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + case HEXA_27: + CreateDataHEXA_27(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + case HEXA_64: + CreateDataHEXA_64(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + case HEXA_125: + CreateDataHEXA_125(VTK_Type, nPoly, nDOFs, SU2ToCGNS); + break; + + default: + ostringstream message; + message << "CGNS element type " << val_elemType << " not supported."; + SU2_MPI::Error(message.str(), CURRENT_FUNCTION); } - /* Determine the index in the stored vectors (CGNS_Type, VTK_Type, etc), - which corresponds to this element. If the type is not stored yet, - a new entry in these vectors will be created. */ - const unsigned short ind = IndexInStoredTypes(typeElem, CGNS_Type, VTK_Type, nPoly, nDOFs, SU2ToCGNS); - - /* Resize the connSU2 vector to the appropriate size. */ - connSU2.resize(nDOFs[ind]); - - /* Create the connectivity used in SU2 by carrying out the renumbering. - Note that in CGNS the numbering starts at 1, while in SU2 it starts - at 0. This explains the addition of -1. */ - for (unsigned short j = 0; j < nDOFs[ind]; ++j) connSU2[j] = connCGNS[SU2ToCGNS[ind][j]] - 1; - - /* Set the pointer for connCGNS for the data of the next element. */ - connCGNS += nDOFs[ind]; - - /* Determine the global boundary element ID of this element. */ - const unsigned long globBoundElemID = startingBoundElemIDRank + locBoundElemCount; - - /* Create an object of CBoundaryFace and store it in boundElems. - Note that the corresponding domain element is not known yet and - is therefore set to ULONG_MAX. */ - CBoundaryFace thisBoundFace; - thisBoundFace.VTK_Type = VTK_Type[ind]; - thisBoundFace.nPolyGrid = nPoly[ind]; - thisBoundFace.nDOFsGrid = nDOFs[ind]; - thisBoundFace.globalBoundElemID = globBoundElemID; - thisBoundFace.domainElementID = ULONG_MAX; - thisBoundFace.Nodes = connSU2; - - boundElems.push_back(thisBoundFace); - } -} - -void CCGNSElementType::ReadConnectivityRange(const int fn, const int iBase, const int iZone, - const unsigned long offsetRank, const unsigned long nElemRank, - const unsigned long startingElemIDRank, CPrimalGrid**& elem, - unsigned long& locElemCount, unsigned long& nDOFsLoc) { - /* Determine the index range to be read for this rank. */ - const cgsize_t iBeg = indBeg + offsetRank; - const cgsize_t iEnd = iBeg + nElemRank - 1; - - /* Determine the size of the vector needed to read the connectivity - data from the CGNS file. */ - cgsize_t sizeNeeded; - if (cg_ElementPartialSize(fn, iBase, iZone, connID, iBeg, iEnd, &sizeNeeded) != CG_OK) cg_error_exit(); - - /* Allocate the memory for the connectivity and read the data. */ - vector connCGNSVec(sizeNeeded); - if (elemType == MIXED) { - vector connCGNSOffsetVec(iEnd - iBeg + 2); - if (cg_poly_elements_partial_read(fn, iBase, iZone, connID, iBeg, iEnd, connCGNSVec.data(), - connCGNSOffsetVec.data(), nullptr) != CG_OK) - cg_error_exit(); - - } else { - if (cg_elements_partial_read(fn, iBase, iZone, connID, iBeg, iEnd, connCGNSVec.data(), nullptr) != CG_OK) - cg_error_exit(); + /*--- Store the data just created at the end of the corresponding vectors. ---*/ + CGNSTypeStored.push_back(val_elemType); + VTKTypeStored.push_back(VTK_Type); + nPolyStored.push_back(nPoly); + nDOFsStored.push_back(nDOFs); + SU2ToCGNSStored.push_back(SU2ToCGNS); } - /* Define the variables needed to convert the connectivities from CGNS to - SU2 format. Note that the vectors are needed to support a connectivity - section with mixed element types. */ - vector CGNS_Type; - vector VTK_Type; - vector nPoly; - vector nDOFs; - - vector > SU2ToCGNS; - - /* Definition of variables used in the loop below. */ - cgsize_t* connCGNS = connCGNSVec.data(); - ElementType_t typeElem = elemType; - vector connSU2; - - /* Loop over the elements just read. */ - for (unsigned long i = 0; i < nElemRank; ++i, ++locElemCount) { - /* Determine the element type for this element if this is a mixed - connectivity and set the pointer to the actual connectivity data. */ - if (elemType == MIXED) { - typeElem = (ElementType_t)connCGNS[0]; - ++connCGNS; - } + /*--- Allocate the memory for connSU2 and store the meta data. ---*/ + connSU2.resize(nDOFsStored[ind] + 5); - /* Determine the index in the stored vectors (CGNS_Type, VTK_Type, etc), - which corresponds to this element. If the type is not stored yet, - a new entry in these vectors will be created. */ - const unsigned short ind = IndexInStoredTypes(typeElem, CGNS_Type, VTK_Type, nPoly, nDOFs, SU2ToCGNS); + connSU2[0] = VTKTypeStored[ind]; + connSU2[1] = nPolyStored[ind]; + connSU2[2] = nPolyStored[ind]; + connSU2[3] = nDOFsStored[ind]; + connSU2[4] = val_globalID; - /* Resize the connSU2 vector to the appropriate size. */ - connSU2.resize(nDOFs[ind]); - - /* Create the connectivity used in SU2 by carrying out the renumbering. - Note that in CGNS the numbering starts at 1, while in SU2 it starts - at 0. This explains the addition of -1. */ - for (unsigned short j = 0; j < nDOFs[ind]; ++j) connSU2[j] = connCGNS[SU2ToCGNS[ind][j]] - 1; - - /* Set the pointer for connCGNS for the data of the next element. */ - connCGNS += nDOFs[ind]; - - /* Determine the global element ID of this element. */ - const unsigned long globElemID = startingElemIDRank + locElemCount; - - /* Create a new FEM primal grid element, which stores the required - information. Note that the second to last argument contains the local - offset of the DOFs. This will be corrected to the global offset - afterwards in CPhysicalGeometry::Read_CGNS_Format_Parallel_FEM. - Also note that in CGNS it is not possible (at least at the moment) - to specify a different polynomial degree for the grid and solution. */ - elem[locElemCount] = new CPrimalGridFEM(globElemID, VTK_Type[ind], nPoly[ind], nPoly[ind], nDOFs[ind], nDOFs[ind], - nDOFsLoc, connSU2.data()); - - /* Update the counter nDOFsLoc. */ - nDOFsLoc += nDOFs[ind]; - } -} - -unsigned short CCGNSElementType::DetermineElementDimension(const int fn, const int iBase, const int iZone) { - /*--- Determine the element type and return the appropriate element - dimension, i.e. the number of parametric coordinates needed to - describe the element. ---*/ - switch (elemType) { - case NODE: - return 0; - - case BAR_2: - case BAR_3: - case BAR_4: - case BAR_5: - return 1; - - case TRI_3: - case TRI_6: - case TRI_9: - case TRI_10: - case TRI_12: - case TRI_15: - case QUAD_4: - case QUAD_8: - case QUAD_9: - case QUAD_12: - case QUAD_16: - case QUAD_P4_16: - case QUAD_25: - return 2; - - case TETRA_4: - case TETRA_10: - case TETRA_16: - case TETRA_20: - case TETRA_22: - case TETRA_34: - case TETRA_35: - case PYRA_5: - case PYRA_14: - case PYRA_13: - case PYRA_21: - case PYRA_29: - case PYRA_30: - case PYRA_P4_29: - case PYRA_50: - case PYRA_55: - case PENTA_6: - case PENTA_15: - case PENTA_18: - case PENTA_24: - case PENTA_38: - case PENTA_40: - case PENTA_33: - case PENTA_66: - case PENTA_75: - case HEXA_8: - case HEXA_20: - case HEXA_27: - case HEXA_32: - case HEXA_56: - case HEXA_64: - case HEXA_44: - case HEXA_98: - case HEXA_125: - return 3; - - case MIXED: - return DetermineElementDimensionMixed(fn, iBase, iZone); - - default: - ostringstream message; - message << "Unsupported CGNS element type, " << elemType << ", encountered."; - SU2_MPI::Error(message.str(), CURRENT_FUNCTION); - } - - /* Just return a value to avoid a compiler warning. The program should - never reach this position. */ - return 0; -} - -unsigned short CCGNSElementType::DetermineElementDimensionMixed(const int fn, const int iBase, const int iZone) { - /* Determine the required size of the vector to read the - data of the first element of this connectivity. */ - cgsize_t sizeNeeded; - if (cg_ElementPartialSize(fn, iBase, iZone, connID, indBeg, indBeg, &sizeNeeded) != CG_OK) cg_error_exit(); - - /* Read the data of the first element in this section. */ - vector buf(sizeNeeded); - vector buf_offset(2, 0); - if (cg_poly_elements_partial_read(fn, iBase, iZone, connID, indBeg, indBeg, buf.data(), buf_offset.data(), nullptr) != - CG_OK) - cg_error_exit(); - - /* The first entry of buf contains the element type. Copy this value - temporarily into the member variable elemType and determine the - element dimension of this element. */ - elemType = (ElementType_t)buf[0]; - - unsigned short nDimElem = DetermineElementDimension(fn, iBase, iZone); - - /* Reset the element type to MIXED and return the element dimension. */ - elemType = MIXED; - return nDimElem; -} - -unsigned short CCGNSElementType::IndexInStoredTypes(const ElementType_t typeElem, vector& CGNS_Type, - vector& VTK_Type, vector& nPoly, - vector& nDOFs, - vector >& SU2ToCGNS) { - /* Loop over the available types and check if the current type is present. - If so, break the loop, such that the correct index is stored. */ - unsigned short ind; - for (ind = 0; ind < CGNS_Type.size(); ++ind) - if (typeElem == CGNS_Type[ind]) break; - - /* If the current element type is not present yet, the data for this - type must be created. */ - if (ind == CGNS_Type.size()) { - unsigned short VTKElem, nPolyElem, nDOFsElem; - vector SU2ToCGNSElem; - CreateDataElementType(typeElem, VTKElem, nPolyElem, nDOFsElem, SU2ToCGNSElem); - - CGNS_Type.push_back(typeElem); - VTK_Type.push_back(VTKElem); - nPoly.push_back(nPolyElem); - nDOFs.push_back(nDOFsElem); - SU2ToCGNS.push_back(SU2ToCGNSElem); - } - - /* Return the index. */ - return ind; -} - -void CCGNSElementType::CreateDataElementType(const ElementType_t typeElem, unsigned short& VTK_Type, - unsigned short& nPoly, unsigned short& nDOFs, - vector& SU2ToCGNS) { - /*--- Determine the element type and call the corresponding function - to determine the actual data. ---*/ - switch (typeElem) { - case NODE: - CreateDataNODE(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - case BAR_2: - CreateDataBAR_2(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - case BAR_3: - CreateDataBAR_3(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - case BAR_4: - CreateDataBAR_4(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - case BAR_5: - CreateDataBAR_5(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - case TRI_3: - CreateDataTRI_3(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - case TRI_6: - CreateDataTRI_6(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - case TRI_10: - CreateDataTRI_10(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - case TRI_15: - CreateDataTRI_15(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - case QUAD_4: - CreateDataQUAD_4(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - case QUAD_9: - CreateDataQUAD_9(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - case QUAD_16: - CreateDataQUAD_16(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - case QUAD_25: - CreateDataQUAD_25(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - case TETRA_4: - CreateDataTETRA_4(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - case TETRA_10: - CreateDataTETRA_10(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - case TETRA_20: - CreateDataTETRA_20(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - case TETRA_35: - CreateDataTETRA_35(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - case PYRA_5: - CreateDataPYRA_5(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - case PYRA_14: - CreateDataPYRA_14(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - case PYRA_30: - CreateDataPYRA_30(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - case PYRA_55: - CreateDataPYRA_55(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - case PENTA_6: - CreateDataPENTA_6(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - case PENTA_18: - CreateDataPENTA_18(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - case PENTA_40: - CreateDataPENTA_40(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - case PENTA_75: - CreateDataPENTA_75(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - case HEXA_8: - CreateDataHEXA_8(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - case HEXA_27: - CreateDataHEXA_27(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - case HEXA_64: - CreateDataHEXA_64(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - case HEXA_125: - CreateDataHEXA_125(VTK_Type, nPoly, nDOFs, SU2ToCGNS); - break; - - default: - /* Print an error message that this element type is not supported and exit. */ - ostringstream message; - message << "CGNS element type " << typeElem << " not supported."; - SU2_MPI::Error(message.str(), CURRENT_FUNCTION); - } + /*--- Loop over the DOFs and convert the connectivity from CGNS to SU2 + format. Keep in mind that CGNS start the numbering at 1 while + SU2 starts at 0. ---*/ + for (unsigned short i = 0; i < nDOFsStored[ind]; ++i) connSU2[i + 5] = connCGNS[SU2ToCGNSStored[ind][i]] - 1; } /*------------------------------------------------------------------------*/ @@ -976,9 +680,9 @@ void CCGNSElementType::CreateDataPYRA_30(unsigned short& VTK_Type, unsigned shor SU2ToCGNS[10] = 23; SU2ToCGNS[11] = 8; SU2ToCGNS[12] = 3; - SU2ToCGNS[13] = 20; + SU2ToCGNS[13] = 10; SU2ToCGNS[14] = 9; - SU2ToCGNS[15] = 3; + SU2ToCGNS[15] = 2; SU2ToCGNS[16] = 13; SU2ToCGNS[17] = 25; SU2ToCGNS[18] = 15; @@ -1575,4 +1279,3 @@ void CCGNSElementType::CreateDataHEXA_125(unsigned short& VTK_Type, unsigned sho } #endif -#endif diff --git a/Common/src/geometry/meshreader/CCGNSMeshReaderBase.cpp b/Common/src/geometry/meshreader/CCGNSMeshReaderBase.cpp new file mode 100644 index 000000000000..9fa198f23d0e --- /dev/null +++ b/Common/src/geometry/meshreader/CCGNSMeshReaderBase.cpp @@ -0,0 +1,473 @@ +/*! + * \file CCGNSMeshReaderBase.cpp + * \brief Helper class for the reading of a CGNS grid file. + * linear partitions across all ranks. + * \author T. Economon + * \version 8.2.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2025, 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/toolboxes/CLinearPartitioner.hpp" +#include "../../../include/geometry/meshreader/CCGNSMeshReaderBase.hpp" + +CCGNSMeshReaderBase::CCGNSMeshReaderBase(const CConfig* val_config, unsigned short val_iZone, unsigned short val_nZone) + : CMeshReaderBase(val_config, val_iZone, val_nZone) { +#ifdef HAVE_CGNS + /*--- Leave the option to do something in the future here. ---*/ +#else + SU2_MPI::Error(string(" SU2 built without CGNS support. \n") + string(" To use CGNS, build SU2 accordingly."), + CURRENT_FUNCTION); +#endif +} + +CCGNSMeshReaderBase::~CCGNSMeshReaderBase() = default; + +#ifdef HAVE_CGNS +void CCGNSMeshReaderBase::OpenCGNSFile(const string& val_filename) { + /*--- Check whether the supplied file is truly a CGNS file. ---*/ + + int file_type; + float file_version; + if (cg_is_cgns(val_filename.c_str(), &file_type) != CG_OK) { + SU2_MPI::Error(val_filename + string(" was not found or is not a properly formatted") + + string(" CGNS file.\nNote that SU2 expects unstructured") + + string(" CGNS files in ADF data format."), + CURRENT_FUNCTION); + } + + /*--- Open the CGNS file for reading. The value of cgnsFileID returned + is the specific index number for this file and will be + repeatedly used in the function calls. ---*/ + + if (cg_open(val_filename.c_str(), CG_MODE_READ, &cgnsFileID)) cg_error_exit(); + if (rank == MASTER_NODE) { + cout << "Reading the CGNS file: "; + cout << val_filename.c_str() << "." << endl; + } + if (cg_version(cgnsFileID, &file_version)) cg_error_exit(); + if (rank == MASTER_NODE) { + if (file_version < 4.0) { + cout + << "WARNING: The CGNS file version (" << file_version + << ") is old and may cause high memory usage issues, consider updating the file with the cgnsupdate tool.\n"; + } + } +} + +void CCGNSMeshReaderBase::ReadCGNSDatabaseMetadata() { + /*--- Get the number of databases. This is the highest node + in the CGNS heirarchy. ---*/ + + int nbases; + if (cg_nbases(cgnsFileID, &nbases)) cg_error_exit(); + if (rank == MASTER_NODE) cout << "CGNS file contains " << nbases << " database(s)." << endl; + + /*--- Check if there is more than one database. Throw an + error if there is because this reader can currently + only handle one database. ---*/ + + if (nbases > 1) { + SU2_MPI::Error("CGNS reader currently can only handle 1 database.", CURRENT_FUNCTION); + } + + /*--- Read the database. Note that the CGNS indexing starts at 1. ---*/ + + int cell_dim, phys_dim; + char basename[CGNS_STRING_SIZE]; + if (cg_base_read(cgnsFileID, cgnsBase, basename, &cell_dim, &phys_dim)) cg_error_exit(); + if (rank == MASTER_NODE) { + cout << "Database " << cgnsBase << ", " << basename << ": "; + cout << " cell dimension of " << cell_dim << ", physical "; + cout << "dimension of " << phys_dim << "." << endl; + } + + /*--- Set the number of dimensions baed on cell_dim. ---*/ + + dimension = static_cast(cell_dim); +} + +void CCGNSMeshReaderBase::ReadCGNSZoneMetadata() { + /*--- First, check all sections to find the element types and to + classify them as either surface or volume elements. We will also + perform some error checks here to avoid partitioning issues. ---*/ + + /*--- Get the number of zones for this base. ---*/ + + int nzones; + if (cg_nzones(cgnsFileID, cgnsBase, &nzones)) cg_error_exit(); + if (rank == MASTER_NODE) { + cout << nzones << " total zone(s)." << endl; + } + + /*--- Check if there is more than one zone. Until we enable it, we + will require a single zone CGNS file. Multizone problems can still + be run with CGNS by using separate CGNS files for each zone. ---*/ + + if (nzones > 1) { + SU2_MPI::Error(string("CGNS reader currently expects only 1 zone per CGNS file.") + + string("Multizone problems can be run with separate CGNS files for each zone."), + CURRENT_FUNCTION); + } + + /*--- Read the basic information for this zone, including + the name and the number of vertices, cells, and + boundary cells which are stored in the cgsize variable. ---*/ + + vector cgsize(3); + ZoneType_t zonetype; + char zonename[CGNS_STRING_SIZE]; + if (cg_zone_read(cgnsFileID, cgnsBase, cgnsZone, zonename, cgsize.data())) cg_error_exit(); + + /*--- Rename the zone size information for clarity. + NOTE: The number of cells here may be only the number of + interior elements or it may be the total. This needs to + be counted explicitly later. ---*/ + + numberOfGlobalPoints = cgsize[0]; + int nElemCGNS = cgsize[1]; + + /*--- Get some additional information about the current zone. ---*/ + + if (cg_zone_type(cgnsFileID, cgnsBase, cgnsZone, &zonetype)) cg_error_exit(); + + /*--- Check for an unstructured mesh. Throw an error if not found. ---*/ + + if (zonetype != Unstructured) + SU2_MPI::Error("Structured CGNS zone found while unstructured expected.", CURRENT_FUNCTION); + + /*--- Print current zone info to the console. ---*/ + + if (rank == MASTER_NODE) { + cout << "Zone " << cgnsZone << ", " << zonename << ": "; + cout << numberOfGlobalPoints << " total vertices, "; + cout << nElemCGNS << " total elements." << endl; + } + + /*--- Retrieve the number of grids in this zone. For now, we know + this is one, but to be more general, this will need to check and + allow for a loop over all grids. ---*/ + + int ngrids; + if (cg_ngrids(cgnsFileID, cgnsBase, cgnsZone, &ngrids)) cg_error_exit(); + if (ngrids > 1) { + SU2_MPI::Error("CGNS reader currently handles only 1 grid per zone.", CURRENT_FUNCTION); + } +} + +void CCGNSMeshReaderBase::ReadCGNSPointCoordinates() { + /*--- Compute the number of points that will be on each processor. + This is a linear partitioning with the addition of a simple load + balancing for any remainder points. ---*/ + + CLinearPartitioner pointPartitioner(numberOfGlobalPoints, 0); + + /*--- Store the local number of nodes for this rank. ---*/ + + numberOfLocalPoints = pointPartitioner.GetSizeOnRank(rank); + + /*--- Create buffer to hold the grid coordinates for our rank. ---*/ + + localPointCoordinates.resize(dimension); + for (int k = 0; k < dimension; k++) localPointCoordinates[k].resize(numberOfLocalPoints, 0.0); + + /*--- Set the value of range_max to the total number of nodes in + the unstructured mesh. Also allocate memory for the temporary array + that will hold the grid coordinates as they are extracted. Note the + +1 for CGNS convention. ---*/ + + cgsize_t range_min = (cgsize_t)pointPartitioner.GetFirstIndexOnRank(rank) + 1; + auto range_max = (cgsize_t)pointPartitioner.GetLastIndexOnRank(rank); + + /*--- Loop over each set of coordinates. ---*/ + + for (int k = 0; k < dimension; k++) { + /*--- Read the coordinate info. This will retrieve the + data type (either RealSingle or RealDouble) as + well as the coordname which will specify the + type of data that it is based in the SIDS convention. + This might be "CoordinateX," for instance. ---*/ + + char coordname[CGNS_STRING_SIZE]; + DataType_t datatype; + if (cg_coord_info(cgnsFileID, cgnsBase, cgnsZone, k + 1, &datatype, coordname)) cg_error_exit(); + if (rank == MASTER_NODE) { + cout << "Loading " << coordname; + if (size > SINGLE_NODE) { + cout << " values into linear partitions." << endl; + } else { + cout << " values." << endl; + } + } + + /*--- Check the coordinate name to decide the index for storage. ---*/ + + unsigned short indC = 0; + if (string(coordname) == "CoordinateX") + indC = 0; + else if (string(coordname) == "CoordinateY") + indC = 1; + else if (string(coordname) == "CoordinateZ") + indC = 2; + else + SU2_MPI::Error(string("Unknown coordinate name, ") + coordname + string(", in the CGNS file."), CURRENT_FUNCTION); + + /*--- Now read our rank's chunk of coordinates from the file. + Ask for datatype RealDouble and let CGNS library do the translation + when RealSingle is found. ---*/ + + if (cg_coord_read(cgnsFileID, cgnsBase, cgnsZone, coordname, RealDouble, &range_min, &range_max, + localPointCoordinates[indC].data())) + cg_error_exit(); + } +} + +void CCGNSMeshReaderBase::ReadCGNSSectionMetadata() { + /*--- Begin section for retrieving the connectivity info. ---*/ + + if ((rank == MASTER_NODE) && (size > SINGLE_NODE)) cout << "Distributing connectivity across all ranks." << endl; + + /*--- First check the number of sections. ---*/ + + if (cg_nsections(cgnsFileID, cgnsBase, cgnsZone, &nSections)) cg_error_exit(); + if (rank == MASTER_NODE) { + cout << "Number of connectivity sections is "; + cout << nSections << "." << endl; + } + + /*--- Prepare several data structures to hold the various + pieces of information describing each section. ---*/ + + isInterior.resize(nSections); + nElems.resize(nSections, 0); + elemOffset.resize(nSections + 1, 0); + elemOffset[0] = 0; + connElems.resize(nSections); + sectionNames.resize(nSections, vector(CGNS_STRING_SIZE)); + numberOfGlobalElements = 0; + + for (int s = 0; s < nSections; s++) { + /*--- Read the connectivity details for this section. ---*/ + + int nbndry, parent_flag, vtk_type; + cgsize_t startE, endE, sizeNeeded; + ElementType_t elemType; + if (cg_section_read(cgnsFileID, cgnsBase, cgnsZone, s + 1, sectionNames[s].data(), &elemType, &startE, &endE, + &nbndry, &parent_flag)) + cg_error_exit(); + + /*--- Compute the total element count in this section (global). ---*/ + + unsigned long element_count = (endE - startE + 1); + + /* Get the details for the CGNS element type in this section. */ + + string elem_name = GetCGNSElementType(elemType, vtk_type); + + /* We assume that each section contains interior elements by default. + If we find 1D elements in a 2D problem or 2D elements in a 3D + problem, then we know the section must contain boundary elements. + We assume that each section is composed of either entirely interior + or entirely boundary elements. */ + + isInterior[s] = true; + + if (elemType == MIXED) { + /* For a mixed section, we check the type of the first element + so that we can correctly label this section as an interior or + boundary element section. Here, we also assume that a section + can not hold both interior and boundary elements. First, get + the size required to read a single element from the section. */ + + if (cg_ElementPartialSize(cgnsFileID, cgnsBase, cgnsZone, s + 1, startE, startE, &sizeNeeded) != CG_OK) + cg_error_exit(); + + /* A couple of auxiliary vectors for mixed element sections. */ + + vector connElemCGNS(sizeNeeded); + vector connOffsetCGNS(2, 0); + + /* Retrieve the connectivity information for the first element. */ + + if (cg_poly_elements_partial_read(cgnsFileID, cgnsBase, cgnsZone, s + 1, startE, startE, connElemCGNS.data(), + connOffsetCGNS.data(), nullptr) != CG_OK) + cg_error_exit(); + + /* The element type is in the first position of the connectivity + information that we retrieved from the CGNS file. */ + + elemType = ElementType_t(connElemCGNS[0]); + } + + /* Check for 1D elements in 2D problems, or for 2D elements in + 3D problems. If found, mark the section as a boundary section. */ + + if (dimension == 2) { + switch (elemType) { + case BAR_2: + case BAR_3: + case BAR_4: + case BAR_5: + isInterior[s] = false; + break; + default: // To avoid a compiler warning. + break; + } + } else { + switch (elemType) { + case TRI_3: + case TRI_6: + case TRI_9: + case TRI_10: + case TRI_12: + case TRI_15: + case QUAD_4: + case QUAD_8: + case QUAD_9: + case QUAD_12: + case QUAD_16: + case QUAD_P4_16: + case QUAD_25: + isInterior[s] = false; + break; + default: // To avoid a compiler warning. + break; + } + } + + /*--- Increment the global element offset for each section + based on whether or not this is a surface or volume section. + We also keep a running count of the total elements globally. ---*/ + + elemOffset[s + 1] = elemOffset[s]; + if (!isInterior[s]) + elemOffset[s + 1] += element_count; + else + numberOfGlobalElements += element_count; + + /*--- Print some information to the console. ---*/ + + if (rank == MASTER_NODE) { + cout << "Section " << string(sectionNames[s].data()); + cout << " contains " << element_count << " elements"; + cout << " of type " << elem_name << "." << endl; + } + } +} + +string CCGNSMeshReaderBase::GetCGNSElementType(ElementType_t val_elem_type, int& val_vtk_type) { + /* Check the CGNS element type and return the string name + for the element and the associated VTK type index. */ + + string elem_name; + switch (val_elem_type) { + case NODE: + elem_name = "Vertex"; + val_vtk_type = 1; + SU2_MPI::Error("Vertex elements detected. Please remove.", CURRENT_FUNCTION); + break; + case BAR_2: + case BAR_3: + case BAR_4: + case BAR_5: + elem_name = "Line"; + val_vtk_type = 3; + if (dimension == 3) SU2_MPI::Error("Line elements detected in a 3D mesh. Please remove.", CURRENT_FUNCTION); + break; + case TRI_3: + case TRI_6: + case TRI_9: + case TRI_10: + case TRI_12: + case TRI_15: + elem_name = "Triangle"; + val_vtk_type = 5; + break; + case QUAD_4: + case QUAD_8: + case QUAD_9: + case QUAD_12: + case QUAD_16: + case QUAD_P4_16: + case QUAD_25: + elem_name = "Quadrilateral"; + val_vtk_type = 9; + break; + case TETRA_4: + case TETRA_10: + case TETRA_16: + case TETRA_20: + case TETRA_22: + case TETRA_34: + case TETRA_35: + elem_name = "Tetrahedron"; + val_vtk_type = 10; + break; + case HEXA_8: + case HEXA_20: + case HEXA_27: + case HEXA_32: + case HEXA_56: + case HEXA_64: + case HEXA_44: + case HEXA_98: + case HEXA_125: + elem_name = "Hexahedron"; + val_vtk_type = 12; + break; + case PENTA_6: + case PENTA_15: + case PENTA_18: + case PENTA_24: + case PENTA_38: + case PENTA_40: + case PENTA_33: + case PENTA_66: + case PENTA_75: + elem_name = "Prism"; + val_vtk_type = 13; + break; + case PYRA_5: + case PYRA_14: + case PYRA_13: + case PYRA_21: + case PYRA_29: + case PYRA_30: + case PYRA_P4_29: + case PYRA_50: + case PYRA_55: + elem_name = "Pyramid"; + val_vtk_type = 14; + break; + case MIXED: + elem_name = "Mixed"; + val_vtk_type = -1; + break; + default: + char buf[100]; + SPRINTF(buf, "Unsupported or unknown CGNS element type: (type %d)\n", val_elem_type); + SU2_MPI::Error(string(buf), CURRENT_FUNCTION); + break; + } + + return elem_name; +} +#endif diff --git a/Common/src/geometry/meshreader/CCGNSMeshReaderFEM.cpp b/Common/src/geometry/meshreader/CCGNSMeshReaderFEM.cpp new file mode 100644 index 000000000000..824cbc256465 --- /dev/null +++ b/Common/src/geometry/meshreader/CCGNSMeshReaderFEM.cpp @@ -0,0 +1,519 @@ +/*! + * \file CCGNSMeshReaderFEM.cpp + * \brief Class that reads a single zone of a CGNS mesh file from disk into + * linear partitions across all ranks. + * \author T. Economon + * \version 8.2.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2025, 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/toolboxes/CLinearPartitioner.hpp" +#include "../../../include/geometry/meshreader/CCGNSMeshReaderFEM.hpp" +#include "../../../include/geometry/meshreader/CCGNSElementType.hpp" + +CCGNSMeshReaderFEM::CCGNSMeshReaderFEM(const CConfig* val_config, unsigned short val_iZone, unsigned short val_nZone) + : CCGNSMeshReaderBase(val_config, val_iZone, val_nZone) { +#ifdef HAVE_CGNS + OpenCGNSFile(config->GetMesh_FileName()); + + /*--- Read the basic information about the database and zone(s). ---*/ + ReadCGNSDatabaseMetadata(); + ReadCGNSZoneMetadata(); + + /*--- Read the basic information about the sections. ---*/ + ReadCGNSSectionMetadata(); + + /*--- Read the volume connectivity and distribute it + linearly over the MPI ranks. ---*/ + ReadCGNSVolumeElementConnectivity(); + + /*--- Read the coordinates of the points and communicate the ones that + are needed on this MPI rank. ---*/ + ReadCGNSPointCoordinates(); + CommPointCoordinates(); + + /*--- Read the surface connectivity and store the surface elements whose + corresponding volume element is stored on this MPI rank. ---*/ + ReadCGNSSurfaceElementConnectivity(); + + /*--- We have extracted all CGNS data. Close the CGNS file. ---*/ + if (cg_close(cgnsFileID)) cg_error_exit(); + +#else + SU2_MPI::Error(string(" SU2 built without CGNS support. \n") + string(" To use CGNS, build SU2 accordingly."), + CURRENT_FUNCTION); +#endif +} + +CCGNSMeshReaderFEM::~CCGNSMeshReaderFEM() = default; + +#ifdef HAVE_CGNS +void CCGNSMeshReaderFEM::ReadCGNSConnectivityRangeSection(const int val_section, const unsigned long val_firstIndex, + const unsigned long val_lastIndex, unsigned long& elemCount, + unsigned long& localElemCount, + vector& localConn) { + /*--- Read the connectivity details for this section. ---*/ + int nbndry, parent_flag; + cgsize_t startE, endE; + ElementType_t elemType; + char sectionName[CGNS_STRING_SIZE]; + + if (cg_section_read(cgnsFileID, cgnsBase, cgnsZone, val_section + 1, sectionName, &elemType, &startE, &endE, &nbndry, + &parent_flag)) + cg_error_exit(); + + /*--- Determine the number of elements in this section and update + the element counters accordingly. ---*/ + const unsigned long nElemSection = (endE - startE + 1); + const unsigned long elemCountOld = elemCount; + elemCount += nElemSection; + + /*--- Check for overlap with the element range this rank is responsible for. ---*/ + const unsigned long indBegOverlap = max(elemCountOld, val_firstIndex); + const unsigned long indEndOverlap = min(elemCount, val_lastIndex); + + if (indEndOverlap > indBegOverlap) { + /*--- This rank must read element data from this connectivity section. + Determine the offset relative to the start of this section and + the number of elements to be read by this rank. ---*/ + const unsigned long offsetRank = indBegOverlap - elemCountOld; + const unsigned long nElemRank = indEndOverlap - indBegOverlap; + nElems[val_section] = nElemRank; + + /*--- Determine the index range to be read for this rank. ---*/ + const cgsize_t iBeg = startE + offsetRank; + const cgsize_t iEnd = iBeg + nElemRank - 1; + + /*--- Determine the size of the vector needed to read + the connectivity data from the CGNS file. ---*/ + cgsize_t sizeNeeded; + if (cg_ElementPartialSize(cgnsFileID, cgnsBase, cgnsZone, val_section + 1, iBeg, iEnd, &sizeNeeded) != CG_OK) + cg_error_exit(); + + /*--- Allocate the memory for the connectivity and read the data. ---*/ + vector connCGNSVec(sizeNeeded); + if (elemType == MIXED) { + vector connCGNSOffsetVec(iEnd - iBeg + 2); + if (cg_poly_elements_partial_read(cgnsFileID, cgnsBase, cgnsZone, val_section + 1, iBeg, iEnd, connCGNSVec.data(), + connCGNSOffsetVec.data(), NULL) != CG_OK) + cg_error_exit(); + + } else { + if (cg_elements_partial_read(cgnsFileID, cgnsBase, cgnsZone, val_section + 1, iBeg, iEnd, connCGNSVec.data(), + NULL) != CG_OK) + cg_error_exit(); + } + + /*--- Define the variables needed for the conversion of the CGNS + format to the SU2 internal format. ---*/ + CCGNSElementType CGNSElem; + std::vector connSU2; + ElementType_t typeElem = elemType; + const cgsize_t* connCGNS = connCGNSVec.data(); + + /*--- Loop over the elements just read. ---*/ + for (unsigned long i = 0; i < nElemRank; ++i, ++localElemCount) { + /*--- Determine the element type for this element if this is a mixed + connectivity and set the pointer to the actual connectivity data. ---*/ + if (elemType == MIXED) { + typeElem = (ElementType_t)connCGNS[0]; + ++connCGNS; + } + + /*--- Convert the CGNS connectivity to SU2 connectivity. ---*/ + const unsigned long globalID = val_firstIndex + localElemCount; + CGNSElem.CGNSToSU2(typeElem, globalID, connCGNS, connSU2); + + /*--- Update the pointer for the connectivity for the next + element and store the SU2 connectivity in localConn. ---*/ + connCGNS += connSU2[3]; + + localConn.insert(localConn.end(), connSU2.begin(), connSU2.end()); + } + } +} + +void CCGNSMeshReaderFEM::ReadCGNSVolumeElementConnectivity(void) { + /*--- Write a message that the volume elements are loaded. ---*/ + if (rank == MASTER_NODE) { + if (size > SINGLE_NODE) + cout << "Loading volume elements into linear partitions." << endl; + else + cout << "Loading volume elements." << endl; + } + + /*--- Get a partitioner to help with linear partitioning. ---*/ + CLinearPartitioner elemPartitioner(numberOfGlobalElements, 0); + + /*--- Determine the index of the first and last element to be stored + on this rank and the number of local elements. ---*/ + const unsigned long firstIndex = elemPartitioner.GetFirstIndexOnRank(rank); + const unsigned long lastIndex = elemPartitioner.GetLastIndexOnRank(rank); + numberOfLocalElements = elemPartitioner.GetSizeOnRank(rank); + + /*--- Loop over the section and check for a section with volume elements. ---*/ + unsigned long elemCount = 0, localElemCount = 0; + for (int s = 0; s < nSections; ++s) { + if (isInterior[s]) { + /*--- Read the connectivity of this section and store the + data in localVolumeElementConnectivity. ---*/ + ReadCGNSConnectivityRangeSection(s, firstIndex, lastIndex, elemCount, localElemCount, + localVolumeElementConnectivity); + } + } +} + +void CCGNSMeshReaderFEM::ReadCGNSSurfaceElementConnectivity(void) { + /*--- Write a message that the surface elements are loaded. ---*/ + if (rank == MASTER_NODE) cout << "Loading surface elements." << endl; + + /*--- Determine the vector to hold the faces of the local elements. ---*/ + vector localFaces; + DetermineFacesVolumeElements(localFaces); + + /*--- Determine the number of markers. ---*/ + numberOfMarkers = 0; + for (int s = 0; s < nSections; s++) + if (!isInterior[s]) ++numberOfMarkers; + + /*--- Allocate the memory for the number of markers and local surface elements. + Also allocate the first index of surfaceElementConnectivity. ---*/ + markerNames.resize(numberOfMarkers); + numberOfLocalSurfaceElements.resize(numberOfMarkers); + surfaceElementConnectivity.resize(numberOfMarkers); + + /*--- Loop over the number of sections and check for a surface. ---*/ + int markerCount = 0; + for (int s = 0; s < nSections; ++s) { + if (!isInterior[s]) { + /*--- Create the marker name. ---*/ + string Marker_Tag = string(sectionNames[s].data()); + Marker_Tag.erase(remove(Marker_Tag.begin(), Marker_Tag.end(), ' '), Marker_Tag.end()); + markerNames[markerCount] = Marker_Tag; + + /*--- Call the function ReadCGNSSurfaceSection to carry out + the actual reading and storing of the required faces. ---*/ + ReadCGNSSurfaceSection(s, localFaces, numberOfLocalSurfaceElements[markerCount], + surfaceElementConnectivity[markerCount]); + + /*--- Update the marker counter. ---*/ + ++markerCount; + } + } +} + +void CCGNSMeshReaderFEM::ReadCGNSSurfaceSection(const int val_section, const vector& localFaces, + unsigned long& nSurfElem, vector& surfConn) { + /*--- Initialize nSurfElem to zero. ---*/ + nSurfElem = 0; + + /*--- Read the connectivity details for this section and determine the number + of elements present in this section. ---*/ + int nbndry, parent_flag; + cgsize_t startE, endE; + ElementType_t elemType; + char sectionName[CGNS_STRING_SIZE]; + + if (cg_section_read(cgnsFileID, cgnsBase, cgnsZone, val_section + 1, sectionName, &elemType, &startE, &endE, &nbndry, + &parent_flag)) + cg_error_exit(); + + const unsigned long nElemSection = (endE - startE + 1); + + /*--- Determine the number of chunks used for the reading of the surface + elements. This is done to avoid a memory bottleneck for extremely + big cases. For reasonably sized grids this connectivity can be + read in a single call. ---*/ + unsigned long nChunks = nElemSection / localFaces.size(); + if (nChunks * localFaces.size() != nElemSection) ++nChunks; + const unsigned long nElemChunk = nElemSection / nChunks; + + /*--- Loop over the number of chunks. ---*/ + for (unsigned long iChunk = 0; iChunk < nChunks; ++iChunk) { + /*--- Determine the start and end index for this chunk. ---*/ + const cgsize_t iBeg = startE + iChunk * nElemChunk; + const cgsize_t iEnd = (iChunk == (nChunks - 1)) ? endE : iBeg + nElemChunk - 1; + + /*--- Determine the size of the vector needed to read + the connectivity data from the CGNS file. ---*/ + cgsize_t sizeNeeded; + if (cg_ElementPartialSize(cgnsFileID, cgnsBase, cgnsZone, val_section + 1, iBeg, iEnd, &sizeNeeded) != CG_OK) + cg_error_exit(); + + /*--- Allocate the memory for the connectivity and read the data. ---*/ + vector connCGNSVec(sizeNeeded); + if (elemType == MIXED) { + vector connCGNSOffsetVec(iEnd - iBeg + 2); + if (cg_poly_elements_partial_read(cgnsFileID, cgnsBase, cgnsZone, val_section + 1, iBeg, iEnd, connCGNSVec.data(), + connCGNSOffsetVec.data(), NULL) != CG_OK) + cg_error_exit(); + + } else { + if (cg_elements_partial_read(cgnsFileID, cgnsBase, cgnsZone, val_section + 1, iBeg, iEnd, connCGNSVec.data(), + NULL) != CG_OK) + cg_error_exit(); + } + + /*--- Define the variables needed for the conversion of the CGNS + format to the SU2 internal format. ---*/ + CCGNSElementType CGNSElem; + std::vector connSU2; + ElementType_t typeElem = elemType; + const cgsize_t* connCGNS = connCGNSVec.data(); + + /*--- Loop over the elements just read. ---*/ + for (cgsize_t i = iBeg; i <= iEnd; ++i) { + /*--- Determine the element type for this element if this is a mixed + connectivity and set the pointer to the actual connectivity data. ---*/ + if (elemType == MIXED) { + typeElem = (ElementType_t)connCGNS[0]; + ++connCGNS; + } + + /*--- Convert the CGNS connectivity to SU2 connectivity and update + the pointer for the next surface element. ---*/ + const unsigned long globalID = i - 1; + CGNSElem.CGNSToSU2(typeElem, globalID, connCGNS, connSU2); + connCGNS += connSU2[3]; + + /*--- Easier storage of the VTK type, polynomial degree + and number of DOFs of the surface element. ---*/ + const unsigned short VTK_Type = static_cast(connSU2[0]); + const unsigned short nPolyGrid = static_cast(connSU2[1]); + const unsigned short nDOFsGrid = static_cast(connSU2[3]); + + /*--- Make a distinction between the possible element surface types and + determine the corner points in local numbering of the element. ---*/ + const unsigned short nDOFEdgeGrid = nPolyGrid + 1; + + CFaceOfElement thisFace; + thisFace.cornerPoints[0] = 0; + thisFace.cornerPoints[1] = nPolyGrid; + + switch (VTK_Type) { + case LINE: + thisFace.nCornerPoints = 2; + break; + + case TRIANGLE: + thisFace.nCornerPoints = 3; + thisFace.cornerPoints[2] = nDOFsGrid - 1; + break; + + case QUADRILATERAL: + thisFace.nCornerPoints = 4; + thisFace.cornerPoints[2] = static_cast(nPolyGrid) * nDOFEdgeGrid; + thisFace.cornerPoints[3] = nDOFsGrid - 1; + break; + + default: + ostringstream message; + message << "Unsupported FEM boundary element value, " << typeElem << ", in surface section " << sectionName; + SU2_MPI::Error(message.str(), CURRENT_FUNCTION); + } + + /*--- Convert the local numbering of thisFace to global numbering + and create a unique numbering of corner points. ---*/ + for (unsigned short j = 0; j < thisFace.nCornerPoints; ++j) + thisFace.cornerPoints[j] = connSU2[thisFace.cornerPoints[j] + 5]; + thisFace.CreateUniqueNumbering(); + + /*--- Check if this boundary face must be stored on this rank. ---*/ + vector::const_iterator low; + low = lower_bound(localFaces.begin(), localFaces.end(), thisFace); + if (low != localFaces.end()) { + if (!(thisFace < *low)) { + /*--- Update the number of local surface elements. ---*/ + ++nSurfElem; + + /*--- Store the meta data in the first 5 locations of connSU2. ---*/ + connSU2[0] = VTK_Type; + connSU2[1] = nPolyGrid; + connSU2[2] = nDOFsGrid; + connSU2[3] = globalID; // Global surface elem ID. + connSU2[4] = low->elemID0; // Global volume elem ID. + + /*--- Store the connectivity data in surfConn. ---*/ + surfConn.insert(surfConn.end(), connSU2.begin(), connSU2.end()); + } + } + } + } +} +#endif + +void CCGNSMeshReaderFEM::CommPointCoordinates(void) { + /*--- Determine the linear partitioning of the points. ---*/ + CLinearPartitioner pointPartitioner(numberOfGlobalPoints, 0); + + /*--- Loop over the local elements to determine the global + point IDs to be stored on this rank. --*/ + unsigned long ind = 0; + for (unsigned long i = 0; i < numberOfLocalElements; ++i) { + /*--- Store the number of grid DOFs for this element and + skip the meta data for this element (5 entries). ---*/ + const unsigned long nDOFsGrid = localVolumeElementConnectivity[ind + 3]; + ind += 5; + + /*--- Copy the connectivity to globalPointIDs. ---*/ + unsigned long* conn = localVolumeElementConnectivity.data() + ind; + ind += nDOFsGrid; + globalPointIDs.insert(globalPointIDs.end(), conn, conn + nDOFsGrid); + } + + /*--- Sort the globalPointIDs and remove the duplicate entries. ---*/ + sort(globalPointIDs.begin(), globalPointIDs.end()); + vector::iterator lastNode; + lastNode = unique(globalPointIDs.begin(), globalPointIDs.end()); + globalPointIDs.erase(lastNode, globalPointIDs.end()); + + /*--- Determine the number of locally stored points. ---*/ + numberOfLocalPoints = globalPointIDs.size(); + + /*--- This rest of this function only needs to done when MPI is used. ---*/ +#ifdef HAVE_MPI + + /*--- Store the global ID's of the points in such a way that they can + be sent to the rank that actually stores the coordinates.. ---*/ + vector > pointBuf(size, vector(0)); + + for (unsigned long i = 0; i < globalPointIDs.size(); ++i) + pointBuf[pointPartitioner.GetRankContainingIndex(globalPointIDs[i])].push_back(globalPointIDs[i]); + + /*--- Determine the total number of ranks to which this rank will send + a message and also determine the number of ranks from which this + rank will receive a message. Furthermore, determine the starting + indices where data from the different ranks should be stored in + localPointCoordinates. ---*/ + int nRankSend = 0; + vector sendToRank(size, 0); + vector startingIndRanksInPoint(size + 1); + startingIndRanksInPoint[0] = 0; + + for (int i = 0; i < size; ++i) { + startingIndRanksInPoint[i + 1] = startingIndRanksInPoint[i] + pointBuf[i].size(); + + if (pointBuf[i].size()) { + ++nRankSend; + sendToRank[i] = 1; + } + } + + int nRankRecv; + vector sizeRecv(size, 1); + SU2_MPI::Reduce_scatter(sendToRank.data(), &nRankRecv, sizeRecv.data(), MPI_INT, MPI_SUM, SU2_MPI::GetComm()); + + /*--- Send out the messages with the global point numbers. Use nonblocking + sends to avoid deadlock. ---*/ + vector sendReqs(nRankSend); + nRankSend = 0; + for (int i = 0; i < size; ++i) { + if (pointBuf[i].size()) { + SU2_MPI::Isend(pointBuf[i].data(), pointBuf[i].size(), MPI_UNSIGNED_LONG, i, i, SU2_MPI::GetComm(), + &sendReqs[nRankSend]); + ++nRankSend; + } + } + + /*--- Define the communication buffer for the coordinates and the vector + for the return communication requests. */ + vector returnReqs(nRankRecv); + vector > coorReturnBuf(nRankRecv, vector(0)); + + /*--- Get the first index of the points as well as the number of points + currently stored on this rank. ---*/ + const unsigned long firstIndex = pointPartitioner.GetFirstIndexOnRank(rank); + const unsigned long nPointsRead = pointPartitioner.GetSizeOnRank(rank); + + /*--- Loop over the number of ranks from which this rank receives global + point numbers that should be stored on this rank. ---*/ + for (int i = 0; i < nRankRecv; ++i) { + /* Block until a message arrives. Determine the source and size + of the message. */ + SU2_MPI::Status status; + SU2_MPI::Probe(MPI_ANY_SOURCE, rank, SU2_MPI::GetComm(), &status); + int source = status.MPI_SOURCE; + + int sizeMess; + SU2_MPI::Get_count(&status, MPI_UNSIGNED_LONG, &sizeMess); + + /*--- Allocate the memory for a buffer to receive this message and also + for the buffer to return to coordinates. ---*/ + vector pointRecvBuf(sizeMess); + coorReturnBuf[i].resize(static_cast(dimension) * sizeMess); + + /* Receive the message using a blocking receive. */ + SU2_MPI::Recv(pointRecvBuf.data(), sizeMess, MPI_UNSIGNED_LONG, source, rank, SU2_MPI::GetComm(), &status); + + /*--- Loop over the nodes just received and fill the return communication + buffer with the coordinates of the requested nodes. ---*/ + for (int j = 0; j < sizeMess; ++j) { + const int jj = dimension * j; + const long kk = pointRecvBuf[j] - firstIndex; + if (kk < 0 || kk >= static_cast(nPointsRead)) + SU2_MPI::Error("Invalid point requested. This should not happen.", CURRENT_FUNCTION); + + for (int k = 0; k < dimension; ++k) coorReturnBuf[i][jj + k] = localPointCoordinates[k][kk]; + } + + /* Send the buffer just filled back to the requesting rank. + Use a non-blocking send to avoid deadlock. */ + SU2_MPI::Isend(coorReturnBuf[i].data(), coorReturnBuf[i].size(), MPI_DOUBLE, source, source + 1, SU2_MPI::GetComm(), + &returnReqs[i]); + } + + /*--- Resize the second indices of localPointCoordinates. ---*/ + for (int k = 0; k < dimension; ++k) localPointCoordinates[k].resize(numberOfLocalPoints); + + /*--- Loop over the ranks from which this rank has requested coordinates. ---*/ + for (int i = 0; i < nRankSend; ++i) { + /* Block until a message arrives. Determine the source of the message. */ + SU2_MPI::Status status; + SU2_MPI::Probe(MPI_ANY_SOURCE, rank + 1, SU2_MPI::GetComm(), &status); + int source = status.MPI_SOURCE; + + /* Allocate the memory for the coordinate receive buffer. */ + vector coorRecvBuf(dimension * pointBuf[source].size()); + + /* Receive the message using a blocking receive. */ + SU2_MPI::Recv(coorRecvBuf.data(), coorRecvBuf.size(), MPI_DOUBLE, source, rank + 1, SU2_MPI::GetComm(), &status); + + /*--- Loop over the points just received. ---*/ + for (unsigned long j = 0; j < pointBuf[source].size(); ++j) { + /*--- Copy the data into the correct location of localPointCoordinates. ---*/ + const unsigned long jj = dimension * j; + const unsigned long kk = startingIndRanksInPoint[source] + j; + + for (int k = 0; k < dimension; ++k) localPointCoordinates[k][kk] = SU2_TYPE::GetValue(coorRecvBuf[jj + k]); + } + } + + /* Complete the non-blocking sends of both rounds. */ + SU2_MPI::Waitall(sendReqs.size(), sendReqs.data(), MPI_STATUSES_IGNORE); + SU2_MPI::Waitall(returnReqs.size(), returnReqs.data(), MPI_STATUSES_IGNORE); + + /*--- Wild cards have been used in the communication, + so synchronize the ranks to avoid problems. ---*/ + SU2_MPI::Barrier(SU2_MPI::GetComm()); + +#endif +} diff --git a/Common/src/geometry/meshreader/CCGNSMeshReaderFVM.cpp b/Common/src/geometry/meshreader/CCGNSMeshReaderFVM.cpp index cdd06c285d6a..ba8f920e396e 100644 --- a/Common/src/geometry/meshreader/CCGNSMeshReaderFVM.cpp +++ b/Common/src/geometry/meshreader/CCGNSMeshReaderFVM.cpp @@ -3,14 +3,14 @@ * \brief Class that reads a single zone of a CGNS mesh file from disk into * linear partitions across all ranks. * \author T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -29,8 +29,8 @@ #include "../../../include/toolboxes/CLinearPartitioner.hpp" #include "../../../include/geometry/meshreader/CCGNSMeshReaderFVM.hpp" -CCGNSMeshReaderFVM::CCGNSMeshReaderFVM(CConfig* val_config, unsigned short val_iZone, unsigned short val_nZone) - : CMeshReaderFVM(val_config, val_iZone, val_nZone) { +CCGNSMeshReaderFVM::CCGNSMeshReaderFVM(const CConfig* val_config, unsigned short val_iZone, unsigned short val_nZone) + : CCGNSMeshReaderBase(val_config, val_iZone, val_nZone) { #ifdef HAVE_CGNS OpenCGNSFile(config->GetMesh_FileName()); @@ -74,307 +74,6 @@ CCGNSMeshReaderFVM::CCGNSMeshReaderFVM(CConfig* val_config, unsigned short val_i CCGNSMeshReaderFVM::~CCGNSMeshReaderFVM() = default; #ifdef HAVE_CGNS -void CCGNSMeshReaderFVM::OpenCGNSFile(const string& val_filename) { - /*--- Check whether the supplied file is truly a CGNS file. ---*/ - - int file_type; - float file_version; - if (cg_is_cgns(val_filename.c_str(), &file_type) != CG_OK) { - SU2_MPI::Error(val_filename + string(" was not found or is not a properly formatted") + - string(" CGNS file.\nNote that SU2 expects unstructured") + - string(" CGNS files in ADF data format."), - CURRENT_FUNCTION); - } - - /*--- Open the CGNS file for reading. The value of cgnsFileID returned - is the specific index number for this file and will be - repeatedly used in the function calls. ---*/ - - if (cg_open(val_filename.c_str(), CG_MODE_READ, &cgnsFileID)) cg_error_exit(); - if (rank == MASTER_NODE) { - cout << "Reading the CGNS file: "; - cout << val_filename.c_str() << "." << endl; - } - if (cg_version(cgnsFileID, &file_version)) cg_error_exit(); - if (rank == MASTER_NODE) { - if (file_version < 4.0) { - cout - << "WARNING: The CGNS file version (" << file_version - << ") is old and may cause high memory usage issues, consider updating the file with the cgnsupdate tool.\n"; - } - } -} - -void CCGNSMeshReaderFVM::ReadCGNSDatabaseMetadata() { - /*--- Get the number of databases. This is the highest node - in the CGNS heirarchy. ---*/ - - int nbases; - if (cg_nbases(cgnsFileID, &nbases)) cg_error_exit(); - if (rank == MASTER_NODE) cout << "CGNS file contains " << nbases << " database(s)." << endl; - - /*--- Check if there is more than one database. Throw an - error if there is because this reader can currently - only handle one database. ---*/ - - if (nbases > 1) { - SU2_MPI::Error("CGNS reader currently can only handle 1 database.", CURRENT_FUNCTION); - } - - /*--- Read the database. Note that the CGNS indexing starts at 1. ---*/ - - int cell_dim, phys_dim; - char basename[CGNS_STRING_SIZE]; - if (cg_base_read(cgnsFileID, cgnsBase, basename, &cell_dim, &phys_dim)) cg_error_exit(); - if (rank == MASTER_NODE) { - cout << "Database " << cgnsBase << ", " << basename << ": "; - cout << " cell dimension of " << cell_dim << ", physical "; - cout << "dimension of " << phys_dim << "." << endl; - } - - /*--- Set the number of dimensions baed on cell_dim. ---*/ - - dimension = (unsigned short)cell_dim; -} - -void CCGNSMeshReaderFVM::ReadCGNSZoneMetadata() { - /*--- First, check all sections to find the element types and to - classify them as either surface or volume elements. We will also - perform some error checks here to avoid partitioning issues. ---*/ - - /*--- Get the number of zones for this base. ---*/ - - int nzones; - if (cg_nzones(cgnsFileID, cgnsBase, &nzones)) cg_error_exit(); - if (rank == MASTER_NODE) { - cout << nzones << " total zone(s)." << endl; - } - - /*--- Check if there is more than one zone. Until we enable it, we - will require a single zone CGNS file. Multizone problems can still - be run with CGNS by using separate CGNS files for each zone. ---*/ - - if (nzones > 1) { - SU2_MPI::Error(string("CGNS reader currently expects only 1 zone per CGNS file.") + - string("Multizone problems can be run with separate CGNS files for each zone."), - CURRENT_FUNCTION); - } - - /*--- Read the basic information for this zone, including - the name and the number of vertices, cells, and - boundary cells which are stored in the cgsize variable. ---*/ - - vector cgsize(3); - ZoneType_t zonetype; - char zonename[CGNS_STRING_SIZE]; - if (cg_zone_read(cgnsFileID, cgnsBase, cgnsZone, zonename, cgsize.data())) cg_error_exit(); - - /*--- Rename the zone size information for clarity. - NOTE: The number of cells here may be only the number of - interior elements or it may be the total. This needs to - be counted explicitly later. ---*/ - - numberOfGlobalPoints = cgsize[0]; - int nElemCGNS = cgsize[1]; - - /*--- Get some additional information about the current zone. ---*/ - - if (cg_zone_type(cgnsFileID, cgnsBase, cgnsZone, &zonetype)) cg_error_exit(); - - /*--- Check for an unstructured mesh. Throw an error if not found. ---*/ - - if (zonetype != Unstructured) - SU2_MPI::Error("Structured CGNS zone found while unstructured expected.", CURRENT_FUNCTION); - - /*--- Print current zone info to the console. ---*/ - - if (rank == MASTER_NODE) { - cout << "Zone " << cgnsZone << ", " << zonename << ": "; - cout << numberOfGlobalPoints << " total vertices, "; - cout << nElemCGNS << " total elements." << endl; - } - - /*--- Retrieve the number of grids in this zone. For now, we know - this is one, but to be more general, this will need to check and - allow for a loop over all grids. ---*/ - - int ngrids; - if (cg_ngrids(cgnsFileID, cgnsBase, cgnsZone, &ngrids)) cg_error_exit(); - if (ngrids > 1) { - SU2_MPI::Error("CGNS reader currently handles only 1 grid per zone.", CURRENT_FUNCTION); - } -} - -void CCGNSMeshReaderFVM::ReadCGNSPointCoordinates() { - /*--- Compute the number of points that will be on each processor. - This is a linear partitioning with the addition of a simple load - balancing for any remainder points. ---*/ - - CLinearPartitioner pointPartitioner(numberOfGlobalPoints, 0); - - /*--- Store the local number of nodes for this rank. ---*/ - - numberOfLocalPoints = pointPartitioner.GetSizeOnRank(rank); - - /*--- Create buffer to hold the grid coordinates for our rank. ---*/ - - localPointCoordinates.resize(dimension); - for (int k = 0; k < dimension; k++) localPointCoordinates[k].resize(numberOfLocalPoints, 0.0); - - /*--- Set the value of range_max to the total number of nodes in - the unstructured mesh. Also allocate memory for the temporary array - that will hold the grid coordinates as they are extracted. Note the - +1 for CGNS convention. ---*/ - - cgsize_t range_min = (cgsize_t)pointPartitioner.GetFirstIndexOnRank(rank) + 1; - auto range_max = (cgsize_t)pointPartitioner.GetLastIndexOnRank(rank); - - /*--- Loop over each set of coordinates. ---*/ - - for (int k = 0; k < dimension; k++) { - /*--- Read the coordinate info. This will retrieve the - data type (either RealSingle or RealDouble) as - well as the coordname which will specify the - type of data that it is based in the SIDS convention. - This might be "CoordinateX," for instance. ---*/ - - char coordname[CGNS_STRING_SIZE]; - DataType_t datatype; - if (cg_coord_info(cgnsFileID, cgnsBase, cgnsZone, k + 1, &datatype, coordname)) cg_error_exit(); - if (rank == MASTER_NODE) { - cout << "Loading " << coordname; - if (size > SINGLE_NODE) { - cout << " values into linear partitions." << endl; - } else { - cout << " values." << endl; - } - } - - /*--- Check the coordinate name to decide the index for storage. ---*/ - - unsigned short indC = 0; - if (string(coordname) == "CoordinateX") - indC = 0; - else if (string(coordname) == "CoordinateY") - indC = 1; - else if (string(coordname) == "CoordinateZ") - indC = 2; - else - SU2_MPI::Error(string("Unknown coordinate name, ") + coordname + string(", in the CGNS file."), CURRENT_FUNCTION); - - /*--- Now read our rank's chunk of coordinates from the file. - Ask for datatype RealDouble and let CGNS library do the translation - when RealSingle is found. ---*/ - - if (cg_coord_read(cgnsFileID, cgnsBase, cgnsZone, coordname, RealDouble, &range_min, &range_max, - localPointCoordinates[indC].data())) - cg_error_exit(); - } -} - -void CCGNSMeshReaderFVM::ReadCGNSSectionMetadata() { - /*--- Begin section for retrieving the connectivity info. ---*/ - - if ((rank == MASTER_NODE) && (size > SINGLE_NODE)) cout << "Distributing connectivity across all ranks." << endl; - - /*--- First check the number of sections. ---*/ - - if (cg_nsections(cgnsFileID, cgnsBase, cgnsZone, &nSections)) cg_error_exit(); - if (rank == MASTER_NODE) { - cout << "Number of connectivity sections is "; - cout << nSections << "." << endl; - } - - /*--- Prepare several data structures to hold the various - pieces of information describing each section. ---*/ - - isInterior.resize(nSections); - nElems.resize(nSections, 0); - elemOffset.resize(nSections + 1, 0); - elemOffset[0] = 0; - connElems.resize(nSections); - sectionNames.resize(nSections, vector(CGNS_STRING_SIZE)); - numberOfGlobalElements = 0; - - for (int s = 0; s < nSections; s++) { - /*--- Read the connectivity details for this section. ---*/ - - int nbndry, parent_flag, vtk_type; - cgsize_t startE, endE, sizeNeeded; - ElementType_t elemType; - if (cg_section_read(cgnsFileID, cgnsBase, cgnsZone, s + 1, sectionNames[s].data(), &elemType, &startE, &endE, - &nbndry, &parent_flag)) - cg_error_exit(); - - /*--- Compute the total element count in this section (global). ---*/ - - unsigned long element_count = (endE - startE + 1); - - /* Get the details for the CGNS element type in this section. */ - - string elem_name = GetCGNSElementType(elemType, vtk_type); - - /* We assume that each section contains interior elements by default. - If we find 1D elements in a 2D problem or 2D elements in a 3D - problem, then we know the section must contain boundary elements. - We assume that each section is composed of either entirely interior - or entirely boundary elements. */ - - isInterior[s] = true; - - if (elemType == MIXED) { - /* For a mixed section, we check the type of the first element - so that we can correctly label this section as an interior or - boundary element section. Here, we also assume that a section - can not hold both interior and boundary elements. First, get - the size required to read a single element from the section. */ - - if (cg_ElementPartialSize(cgnsFileID, cgnsBase, cgnsZone, s + 1, startE, startE, &sizeNeeded) != CG_OK) - cg_error_exit(); - - /* A couple of auxiliary vectors for mixed element sections. */ - - vector connElemCGNS(sizeNeeded); - vector connOffsetCGNS(2, 0); - - /* Retrieve the connectivity information for the first element. */ - - if (cg_poly_elements_partial_read(cgnsFileID, cgnsBase, cgnsZone, s + 1, startE, startE, connElemCGNS.data(), - connOffsetCGNS.data(), nullptr) != CG_OK) - cg_error_exit(); - - /* The element type is in the first position of the connectivity - information that we retrieved from the CGNS file. */ - - elemType = ElementType_t(connElemCGNS[0]); - } - - /* Check for 1D elements in 2D problems, or for 2D elements in - 3D problems. If found, mark the section as a boundary section. */ - - if ((dimension == 2) && (elemType == BAR_2 || elemType == BAR_3)) isInterior[s] = false; - if ((dimension == 3) && (elemType == TRI_3 || elemType == QUAD_4)) isInterior[s] = false; - - /*--- Increment the global element offset for each section - based on whether or not this is a surface or volume section. - We also keep a running count of the total elements globally. ---*/ - - elemOffset[s + 1] = elemOffset[s]; - if (!isInterior[s]) - elemOffset[s + 1] += element_count; - else - numberOfGlobalElements += element_count; - - /*--- Print some information to the console. ---*/ - - if (rank == MASTER_NODE) { - cout << "Section " << string(sectionNames[s].data()); - cout << " contains " << element_count << " elements"; - cout << " of type " << elem_name << "." << endl; - } - } -} - void CCGNSMeshReaderFVM::ReadCGNSVolumeSection(int val_section) { /*--- In this routine, each rank will read a chunk of the element connectivity for a single specified section of the CGNS mesh file. @@ -545,7 +244,7 @@ void CCGNSMeshReaderFVM::ReadCGNSVolumeSection(int val_section) { entry if this is a mixed element section. ---*/ if (isMixed) counterCGNS++; - for (iNode = 0; iNode < (unsigned long)nPoinPerElem[iElem]; iNode++) { + for (iNode = 0; iNode < static_cast(nPoinPerElem[iElem]); iNode++) { connElemTemp[nn] = connElemCGNS[counterCGNS + iNode] - 1; nn++; } @@ -582,7 +281,7 @@ void CCGNSMeshReaderFVM::ReadCGNSVolumeSection(int val_section) { CLinearPartitioner pointPartitioner(numberOfGlobalPoints, 0); for (iElem = 0; iElem < nElems[val_section]; iElem++) { - for (iNode = 0; iNode < (unsigned long)nPoinPerElem[iElem]; iNode++) { + for (iNode = 0; iNode < static_cast(nPoinPerElem[iElem]); iNode++) { /*--- Get the index of the current point. ---*/ iPoint = connElemTemp[iElem * SU2_CONN_SIZE + SU2_CONN_SKIP + iNode]; @@ -594,7 +293,7 @@ void CCGNSMeshReaderFVM::ReadCGNSVolumeSection(int val_section) { /*--- If we have not visited this element yet, increment our number of elements that must be sent to a particular proc. ---*/ - if ((nElem_Flag[iProcessor] != (int)iElem)) { + if ((nElem_Flag[iProcessor] != static_cast(iElem))) { nElem_Flag[iProcessor] = iElem; nElem_Send[iProcessor + 1]++; } @@ -630,7 +329,7 @@ void CCGNSMeshReaderFVM::ReadCGNSVolumeSection(int val_section) { + 2 extra values for the ID and VTK. ---*/ unsigned long *connSend = nullptr, iSend = 0; - unsigned long sendSize = (unsigned long)SU2_CONN_SIZE * nElem_Send[size]; + unsigned long sendSize = static_cast(SU2_CONN_SIZE) * nElem_Send[size]; connSend = new unsigned long[sendSize]; for (iSend = 0; iSend < sendSize; iSend++) connSend[iSend] = 0; @@ -643,8 +342,8 @@ void CCGNSMeshReaderFVM::ReadCGNSVolumeSection(int val_section) { /*--- Loop through our elements and load the elems and their additional data that we will send to the other procs. ---*/ - for (iElem = 0; iElem < (unsigned long)nElems[val_section]; iElem++) { - for (iNode = 0; iNode < (unsigned long)nPoinPerElem[iElem]; iNode++) { + for (iElem = 0; iElem < static_cast(nElems[val_section]); iElem++) { + for (iNode = 0; iNode < static_cast(nPoinPerElem[iElem]); iNode++) { /*--- Get the index of the current point. ---*/ iPoint = connElemTemp[iElem * SU2_CONN_SIZE + SU2_CONN_SKIP + iNode]; @@ -655,7 +354,7 @@ void CCGNSMeshReaderFVM::ReadCGNSVolumeSection(int val_section) { /*--- Load connectivity into the buffer for sending ---*/ - if (nElem_Flag[iProcessor] != (int)iElem) { + if (nElem_Flag[iProcessor] != static_cast(iElem)) { nElem_Flag[iProcessor] = iElem; unsigned long nn = index[iProcessor]; @@ -689,7 +388,7 @@ void CCGNSMeshReaderFVM::ReadCGNSVolumeSection(int val_section) { directly copy our own data later. ---*/ unsigned long *connRecv = nullptr, iRecv = 0; - unsigned long recvSize = (unsigned long)SU2_CONN_SIZE * nElem_Recv[size]; + unsigned long recvSize = static_cast(SU2_CONN_SIZE) * nElem_Recv[size]; connRecv = new unsigned long[recvSize]; for (iRecv = 0; iRecv < recvSize; iRecv++) connRecv[iRecv] = 0; @@ -731,7 +430,7 @@ void CCGNSMeshReaderFVM::ReadCGNSVolumeSection(int val_section) { if (nElem_Recv[size] > 0) { connElems[val_section].resize(nElem_Recv[size] * SU2_CONN_SIZE, 0); unsigned long count = 0; - for (iElem = 0; iElem < (unsigned long)nElem_Recv[size]; iElem++) { + for (iElem = 0; iElem < static_cast(nElem_Recv[size]); iElem++) { for (iNode = 0; iNode < SU2_CONN_SIZE; iNode++) { unsigned long nn = iElem * SU2_CONN_SIZE + iNode; connElems[val_section][count] = (cgsize_t)connRecv[nn]; @@ -874,7 +573,7 @@ void CCGNSMeshReaderFVM::ReadCGNSSurfaceSection(int val_section) { connElems[val_section][iElem * SU2_CONN_SIZE + 0] = 0; connElems[val_section][iElem * SU2_CONN_SIZE + 1] = vtk_type; - for (iNode = 0; iNode < (unsigned long)npe; iNode++) { + for (iNode = 0; iNode < static_cast(npe); iNode++) { unsigned long nn = iElem * SU2_CONN_SIZE + SU2_CONN_SKIP + iNode; connElems[val_section][nn] = connElemTemp[counterCGNS] - 1; counterCGNS++; @@ -907,7 +606,7 @@ void CCGNSMeshReaderFVM::ReformatCGNSVolumeConnectivity() { for (unsigned long iElem = 0; iElem < nElems[s]; iElem++) { for (unsigned long iNode = 0; iNode < SU2_CONN_SIZE; iNode++) { unsigned long nn = iElem * SU2_CONN_SIZE + iNode; - localVolumeElementConnectivity[count] = (unsigned long)connElems[s][nn]; + localVolumeElementConnectivity[count] = static_cast(connElems[s][nn]); count++; } } @@ -941,7 +640,7 @@ void CCGNSMeshReaderFVM::ReformatCGNSSurfaceConnectivity() { for (unsigned long iElem = 0; iElem < nElems[s]; iElem++) { for (unsigned long iNode = 0; iNode < SU2_CONN_SIZE; iNode++) { unsigned long nn = iElem * SU2_CONN_SIZE + iNode; - surfaceElementConnectivity[markerCount][elementCount] = (unsigned long)connElems[s][nn]; + surfaceElementConnectivity[markerCount][elementCount] = static_cast(connElems[s][nn]); elementCount++; } } @@ -951,65 +650,6 @@ void CCGNSMeshReaderFVM::ReformatCGNSSurfaceConnectivity() { } } } - -string CCGNSMeshReaderFVM::GetCGNSElementType(ElementType_t val_elem_type, int& val_vtk_type) { - /* Check the CGNS element type and return the string name - for the element and the associated VTK type index. */ - - string elem_name; - switch (val_elem_type) { - case NODE: - elem_name = "Vertex"; - val_vtk_type = 1; - SU2_MPI::Error("Vertex elements detected. Please remove.", CURRENT_FUNCTION); - break; - case BAR_2: - elem_name = "Line"; - val_vtk_type = 3; - if (dimension == 3) SU2_MPI::Error("Line elements detected in a 3D mesh. Please remove.", CURRENT_FUNCTION); - break; - case BAR_3: - elem_name = "Line"; - val_vtk_type = 3; - if (dimension == 3) SU2_MPI::Error("Line elements detected in a 3D mesh. Please remove.", CURRENT_FUNCTION); - break; - case TRI_3: - elem_name = "Triangle"; - val_vtk_type = 5; - break; - case QUAD_4: - elem_name = "Quadrilateral"; - val_vtk_type = 9; - break; - case TETRA_4: - elem_name = "Tetrahedron"; - val_vtk_type = 10; - break; - case HEXA_8: - elem_name = "Hexahedron"; - val_vtk_type = 12; - break; - case PENTA_6: - elem_name = "Prism"; - val_vtk_type = 13; - break; - case PYRA_5: - elem_name = "Pyramid"; - val_vtk_type = 14; - break; - case MIXED: - elem_name = "Mixed"; - val_vtk_type = -1; - break; - default: - char buf[100]; - SPRINTF(buf, "Unsupported or unknown CGNS element type: (type %d)\n", val_elem_type); - SU2_MPI::Error(string(buf), CURRENT_FUNCTION); - break; - } - - return elem_name; -} #endif void CCGNSMeshReaderFVM::InitiateCommsAll(void* bufSend, const int* nElemSend, SU2_MPI::Request* sendReq, void* bufRecv, diff --git a/Common/src/geometry/meshreader/CMeshReaderBase.cpp b/Common/src/geometry/meshreader/CMeshReaderBase.cpp new file mode 100644 index 000000000000..831fcaf279d0 --- /dev/null +++ b/Common/src/geometry/meshreader/CMeshReaderBase.cpp @@ -0,0 +1,95 @@ +/*! + * \file CMeshReaderBase.cpp + * \brief Helper class that provides the counts for each rank in a linear + * partitioning given the global count as input. + * \author T. Economon + * \version 8.2.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2025, 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/geometry/meshreader/CMeshReaderBase.hpp" + +CMeshReaderBase::CMeshReaderBase(const CConfig* val_config, unsigned short val_iZone, unsigned short val_nZone) + : rank(SU2_MPI::GetRank()), size(SU2_MPI::GetSize()), config(val_config) {} + +void CMeshReaderBase::DetermineFacesVolumeElements(vector& localFaces) { + /*--- Loop over the locally stored volume elements. ---*/ + unsigned long ind = 0; + for (unsigned long k = 0; k < numberOfLocalElements; ++k) { + /*--- Set the pointer where the information of this element + is stored and determine the number of faces as well + as the corner points of these faces. Note that 6 faces + is the maximum for the elements considered. ---*/ + unsigned short nFaces; + unsigned short nPointsPerFace[6]; + unsigned long faceConn[6][4]; + + const unsigned long* elemInfo = localVolumeElementConnectivity.data() + ind; + + GetCornerPointsAllFaces(elemInfo, nFaces, nPointsPerFace, faceConn); + + /*--- Loop over the faces and add them to localFaces. ---*/ + for (unsigned short i = 0; i < nFaces; ++i) { + CFaceOfElement thisFace; + thisFace.nCornerPoints = nPointsPerFace[i]; + for (unsigned short j = 0; j < nPointsPerFace[i]; ++j) thisFace.cornerPoints[j] = faceConn[i][j]; + thisFace.elemID0 = elemInfo[4]; + + thisFace.CreateUniqueNumbering(); + localFaces.push_back(thisFace); + } + + /*--- Update the index for the next element. ---*/ + const unsigned long nDOFsGrid = localVolumeElementConnectivity[ind + 3]; + ind += nDOFsGrid + 5; + } + + /*--- Sort localFaces in increasing order and remove the double entities, + such that the binary search later on is a bit more efficient. ---*/ + sort(localFaces.begin(), localFaces.end()); + vector::iterator lastFace; + lastFace = unique(localFaces.begin(), localFaces.end()); + localFaces.erase(lastFace, localFaces.end()); +} + +void CMeshReaderBase::GetCornerPointsAllFaces(const unsigned long* elemInfo, unsigned short& numFaces, + unsigned short nPointsPerFace[], unsigned long faceConn[6][4]) { + /*--- Retrieve the element type, polynomial degree of the grid and + number of DOFs for this element and set the pointer for the + connectivity information. ---*/ + const unsigned short VTK_Type = (const unsigned short)elemInfo[0]; + const unsigned short nPolyGrid = (const unsigned short)elemInfo[1]; + const unsigned short nDOFsGrid = (const unsigned short)elemInfo[3]; + const unsigned long* conn = elemInfo + 5; + + /*--- Call the static function GetLocalCornerPointsAllFaces of CPrimalGridFEM + to determine the local numbering of the corner points of the faces. ---*/ + CPrimalGridFEM::GetLocalCornerPointsAllFaces(VTK_Type, nPolyGrid, nDOFsGrid, numFaces, nPointsPerFace, faceConn); + + /*--- Convert the local values of faceConn to global values. ---*/ + for (unsigned short i = 0; i < numFaces; ++i) { + for (unsigned short j = 0; j < nPointsPerFace[i]; ++j) { + unsigned long nn = faceConn[i][j]; + faceConn[i][j] = conn[nn]; + } + } +} diff --git a/Common/src/geometry/meshreader/CMeshReaderFVM.cpp b/Common/src/geometry/meshreader/CMeshReaderFVM.cpp deleted file mode 100644 index 17069bf7b25e..000000000000 --- a/Common/src/geometry/meshreader/CMeshReaderFVM.cpp +++ /dev/null @@ -1,32 +0,0 @@ -/*! - * \file CMeshReaderFVM.cpp - * \brief Helper class that provides the counts for each rank in a linear - * partitioning given the global count as input. - * \author T. Economon - * \version 8.1.0 "Harrier" - * - * SU2 Project Website: https://su2code.github.io - * - * The SU2 Project is maintained by the SU2 Foundation - * (http://su2foundation.org) - * - * Copyright 2012-2024, 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/geometry/meshreader/CMeshReaderFVM.hpp" - -CMeshReaderFVM::CMeshReaderFVM(const CConfig* val_config, unsigned short val_iZone, unsigned short val_nZone) - : rank(SU2_MPI::GetRank()), size(SU2_MPI::GetSize()), config(val_config) {} diff --git a/Common/src/geometry/meshreader/CRectangularMeshReaderFEM.cpp b/Common/src/geometry/meshreader/CRectangularMeshReaderFEM.cpp new file mode 100644 index 000000000000..0a01e65a92f5 --- /dev/null +++ b/Common/src/geometry/meshreader/CRectangularMeshReaderFEM.cpp @@ -0,0 +1,255 @@ +/*! + * \file CRectangularMeshReaderFEM.cpp + * \brief Reads a 2D rectangular grid into linear partitions for the + * finite element solver (FEM). + * \author T. Economon, E. van der Weide + * \version 8.2.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2025, 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/toolboxes/CLinearPartitioner.hpp" +#include "../../../include/geometry/meshreader/CRectangularMeshReaderFEM.hpp" + +CRectangularMeshReaderFEM::CRectangularMeshReaderFEM(const CConfig* val_config, unsigned short val_iZone, + unsigned short val_nZone) + : CMeshReaderBase(val_config, val_iZone, val_nZone) { + /* The rectangular mesh is always 2D. */ + dimension = 2; + + /* Set the VTK type for the interior elements and the boundary elements. */ + KindElem = QUADRILATERAL; + KindBound = LINE; + + /* The number of nodes in the i and j directions. */ + nNode = config->GetMeshBoxSize(0); + mNode = config->GetMeshBoxSize(1); + + /* Lengths for non-square domains. */ + Lx = config->GetMeshBoxLength(0); + Ly = config->GetMeshBoxLength(1); + + /* Offsets in x and y directions from 0.0. */ + Ox = config->GetMeshBoxOffset(0); + Oy = config->GetMeshBoxOffset(1); + + /* Polynomial degree of the solution. */ + nPolySol = config->GetMeshBoxPSolFEM(); + + /*--- Compute and store the interior elements, points, and surface elements + for this rank, for which simple analytic formulae can be used. ---*/ + ComputeRectangularVolumeConnectivity(); + ComputeRectangularPointCoordinates(); + ComputeRectangularSurfaceConnectivity(); +} + +CRectangularMeshReaderFEM::~CRectangularMeshReaderFEM() = default; + +void CRectangularMeshReaderFEM::ComputeRectangularPointCoordinates() { + /*--- Set the global count of points based on the grid dimensions. ---*/ + numberOfGlobalPoints = nNode * mNode; + + /*--- Loop over the local elements to determine the global + point IDs to be stored on this rank. --*/ + unsigned long ind = 0; + for (unsigned long i = 0; i < numberOfLocalElements; ++i) { + /*--- Store the number of grid DOFs for this element and + skip the meta data for this element (5 entries). ---*/ + const unsigned long nDOFsGrid = localVolumeElementConnectivity[ind + 3]; + ind += 5; + + /*--- Copy the connectivity to globalPointIDs. ---*/ + unsigned long* conn = localVolumeElementConnectivity.data() + ind; + ind += nDOFsGrid; + globalPointIDs.insert(globalPointIDs.end(), conn, conn + nDOFsGrid); + } + + /*--- Sort the globalPointIDs and remove the duplicate entries. ---*/ + sort(globalPointIDs.begin(), globalPointIDs.end()); + vector::iterator lastNode; + lastNode = unique(globalPointIDs.begin(), globalPointIDs.end()); + globalPointIDs.erase(lastNode, globalPointIDs.end()); + + /*--- Determine the number of locally stored points. ---*/ + numberOfLocalPoints = globalPointIDs.size(); + + /*--- Allocate the memory for the locally stored points. ---*/ + localPointCoordinates.resize(dimension); + for (int k = 0; k < dimension; k++) localPointCoordinates[k].resize(numberOfLocalPoints); + + /*--- Loop over the locally stored points. ---*/ + for (unsigned long i = 0; i < numberOfLocalPoints; ++i) { + /*--- Convert the global index to i,j indices. ---*/ + const unsigned long jNode = globalPointIDs[i] / nNode; + const unsigned long iNode = globalPointIDs[i] - jNode * nNode; + + /*--- Store the coordinates of the point. ---*/ + localPointCoordinates[0][i] = SU2_TYPE::GetValue(Lx * ((su2double)iNode) / ((su2double)(nNode - 1)) + Ox); + localPointCoordinates[1][i] = SU2_TYPE::GetValue(Ly * ((su2double)jNode) / ((su2double)(mNode - 1)) + Oy); + } +} + +void CRectangularMeshReaderFEM::ComputeRectangularVolumeConnectivity() { + /*--- Set the global count of elements based on the grid dimensions. ---*/ + const unsigned long nElemI = nNode - 1; + numberOfGlobalElements = nElemI * (mNode - 1); + + /*--- Get a partitioner to help with linear partitioning. ---*/ + CLinearPartitioner elemPartitioner(numberOfGlobalElements, 0); + + /*--- Determine the index of the first and last element to be stored + on this rank and the number of local elements. ---*/ + const unsigned long firstIndex = elemPartitioner.GetFirstIndexOnRank(rank); + const unsigned long lastIndex = elemPartitioner.GetLastIndexOnRank(rank); + numberOfLocalElements = elemPartitioner.GetSizeOnRank(rank); + + /*--- Loop over the owned element range. ---*/ + for (unsigned long elem = firstIndex; elem < lastIndex; ++elem) { + /*--- Retrieve the i,j indices of this element, which are the indices + of the lower, left point of the element. --*/ + const unsigned long jNode = elem / nElemI; + const unsigned long iNode = elem - jNode * nElemI; + + /*--- Store the meta data of this element. ---*/ + localVolumeElementConnectivity.push_back(KindElem); + localVolumeElementConnectivity.push_back(1); // Pol. degree grid. + localVolumeElementConnectivity.push_back(nPolySol); + localVolumeElementConnectivity.push_back(4); // Number of grid DOFs. + localVolumeElementConnectivity.push_back(elem); // Global elem ID. + + /*--- Store the volume connectivity in the format used + by the FEM solver. ---*/ + localVolumeElementConnectivity.push_back(jNode * nNode + iNode); + localVolumeElementConnectivity.push_back(jNode * nNode + iNode + 1); + localVolumeElementConnectivity.push_back((jNode + 1) * nNode + iNode); + localVolumeElementConnectivity.push_back((jNode + 1) * nNode + iNode + 1); + } +} + +void CRectangularMeshReaderFEM::ComputeRectangularSurfaceConnectivity() { + /*--- Determine the number of elements in i-direction. ---*/ + const unsigned long nElemI = nNode - 1; + + /*--- Get a partitioner to help with linear partitioning. ---*/ + CLinearPartitioner elemPartitioner(numberOfGlobalElements, 0); + + /*--- The rectangle always has 4 markers. Allocate the required memory. ---*/ + numberOfMarkers = 4; + numberOfLocalSurfaceElements.resize(numberOfMarkers, 0); + surfaceElementConnectivity.resize(numberOfMarkers); + markerNames.resize(numberOfMarkers); + + /*--- Loop over all faces on the yMin (= jMin) boundary. ---*/ + markerNames[0] = "y_minus"; + + for (unsigned long iNode = 0; iNode < nNode - 1; ++iNode) { + /*--- Determine the corresponding global element ID and check + if it is stored on this rank. ---*/ + const unsigned long globalElemID = iNode; + if (elemPartitioner.GetRankContainingIndex(globalElemID) == static_cast(rank)) { + /*--- The corresponding volume element is stored on this rank, + hence store the surface element as well. ---*/ + surfaceElementConnectivity[0].push_back(KindBound); // VTK type. + surfaceElementConnectivity[0].push_back(1); // Poly degree grid. + surfaceElementConnectivity[0].push_back(2); // Number of grid DOFs. + surfaceElementConnectivity[0].push_back(iNode); // Global surface element ID. + surfaceElementConnectivity[0].push_back(globalElemID); // Global volume element ID. + + surfaceElementConnectivity[0].push_back(iNode); + surfaceElementConnectivity[0].push_back(iNode + 1); + + /*--- Update the number of surface elements for this marker. ---*/ + ++numberOfLocalSurfaceElements[0]; + } + } + + /*--- Loop over all faces on the xMax (= iMax) boundary. ---*/ + markerNames[1] = "x_plus"; + + for (unsigned long jNode = 0; jNode < mNode - 1; ++jNode) { + /*--- Determine the corresponding global element ID and check + if it is stored on this rank. ---*/ + const unsigned long globalElemID = jNode * nElemI + nElemI - 1; + if (elemPartitioner.GetRankContainingIndex(globalElemID) == static_cast(rank)) { + /*--- The corresponding volume element is stored on this rank, + hence store the surface element as well. ---*/ + surfaceElementConnectivity[1].push_back(KindBound); // VTK type. + surfaceElementConnectivity[1].push_back(1); // Poly degree grid. + surfaceElementConnectivity[1].push_back(2); // Number of grid DOFs. + surfaceElementConnectivity[1].push_back(jNode); // Global surface element ID. + surfaceElementConnectivity[1].push_back(globalElemID); // Global volume element ID. + + surfaceElementConnectivity[1].push_back(jNode * nNode + (nNode - 1)); + surfaceElementConnectivity[1].push_back((jNode + 1) * nNode + (nNode - 1)); + + /*--- Update the number of surface elements for this marker. ---*/ + ++numberOfLocalSurfaceElements[1]; + } + } + + /*--- Loop over all faces on the yMax (= jMax) boundary. ---*/ + markerNames[2] = "y_plus"; + + for (unsigned long iNode = 0; iNode < nNode - 1; ++iNode) { + /*--- Determine the corresponding global element ID and check + if it is stored on this rank. ---*/ + const unsigned long globalElemID = (mNode - 2) * nElemI + iNode; + if (elemPartitioner.GetRankContainingIndex(globalElemID) == static_cast(rank)) { + /*--- The corresponding volume element is stored on this rank, + hence store the surface element as well. ---*/ + surfaceElementConnectivity[2].push_back(KindBound); // VTK type. + surfaceElementConnectivity[2].push_back(1); // Poly degree grid. + surfaceElementConnectivity[2].push_back(2); // Number of grid DOFs. + surfaceElementConnectivity[2].push_back(iNode); // Global surface element ID. + surfaceElementConnectivity[2].push_back(globalElemID); // Global volume element ID. + + surfaceElementConnectivity[2].push_back((mNode - 1) * nNode + iNode + 1); + surfaceElementConnectivity[2].push_back((mNode - 1) * nNode + iNode); + + /*--- Update the number of surface elements for this marker. ---*/ + ++numberOfLocalSurfaceElements[2]; + } + } + + /*--- Loop over all faces on the xMin (= iMin) boundary. ---*/ + markerNames[3] = "x_minus"; + + for (unsigned long jNode = 0; jNode < mNode - 1; ++jNode) { + /*--- Determine the corresponding global element ID and check + if it is stored on this rank. ---*/ + const unsigned long globalElemID = jNode * nElemI; + if (elemPartitioner.GetRankContainingIndex(globalElemID) == static_cast(rank)) { + /*--- The corresponding volume element is stored on this rank, + hence store the surface element as well. ---*/ + surfaceElementConnectivity[3].push_back(KindBound); // VTK type. + surfaceElementConnectivity[3].push_back(1); // Poly degree grid. + surfaceElementConnectivity[3].push_back(2); // Number of grid DOFs. + surfaceElementConnectivity[3].push_back(jNode); // Global surface element ID. + surfaceElementConnectivity[3].push_back(globalElemID); // Global volume element ID. + + surfaceElementConnectivity[3].push_back((jNode + 1) * nNode); + surfaceElementConnectivity[3].push_back(jNode * nNode); + + /*--- Update the number of surface elements for this marker. ---*/ + ++numberOfLocalSurfaceElements[3]; + } + } +} diff --git a/Common/src/geometry/meshreader/CRectangularMeshReaderFVM.cpp b/Common/src/geometry/meshreader/CRectangularMeshReaderFVM.cpp index 5b89744bf2ae..e17a7fb70f60 100644 --- a/Common/src/geometry/meshreader/CRectangularMeshReaderFVM.cpp +++ b/Common/src/geometry/meshreader/CRectangularMeshReaderFVM.cpp @@ -3,14 +3,14 @@ * \brief Reads a 2D rectangular grid into linear partitions for the * finite volume solver (FVM). * \author T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -31,7 +31,7 @@ CRectangularMeshReaderFVM::CRectangularMeshReaderFVM(const CConfig* val_config, unsigned short val_iZone, unsigned short val_nZone) - : CMeshReaderFVM(val_config, val_iZone, val_nZone) { + : CMeshReaderBase(val_config, val_iZone, val_nZone) { /* The rectangular mesh is always 2D. */ dimension = 2; @@ -61,6 +61,8 @@ CRectangularMeshReaderFVM::CRectangularMeshReaderFVM(const CConfig* val_config, ComputeRectangularSurfaceConnectivity(); } +CRectangularMeshReaderFVM::~CRectangularMeshReaderFVM() = default; + void CRectangularMeshReaderFVM::ComputeRectangularPointCoordinates() { /* Set the global count of points based on the grid dimensions. */ numberOfGlobalPoints = (nNode) * (mNode); @@ -70,7 +72,7 @@ void CRectangularMeshReaderFVM::ComputeRectangularPointCoordinates() { /* Determine number of local points */ for (unsigned long globalIndex = 0; globalIndex < numberOfGlobalPoints; globalIndex++) { - if ((int)pointPartitioner.GetRankContainingIndex(globalIndex) == rank) { + if (static_cast(pointPartitioner.GetRankContainingIndex(globalIndex)) == rank) { numberOfLocalPoints++; } } @@ -82,7 +84,7 @@ void CRectangularMeshReaderFVM::ComputeRectangularPointCoordinates() { unsigned long globalIndex = 0; for (unsigned long jNode = 0; jNode < mNode; jNode++) { for (unsigned long iNode = 0; iNode < nNode; iNode++) { - if ((int)pointPartitioner.GetRankContainingIndex(globalIndex) == rank) { + if (static_cast(pointPartitioner.GetRankContainingIndex(globalIndex)) == rank) { /* Store the coordinates more clearly. */ const passivedouble x = SU2_TYPE::GetValue(Lx * ((su2double)iNode) / ((su2double)(nNode - 1)) + Ox); const passivedouble y = SU2_TYPE::GetValue(Ly * ((su2double)jNode) / ((su2double)(mNode - 1)) + Oy); @@ -119,7 +121,7 @@ void CRectangularMeshReaderFVM::ComputeRectangularVolumeConnectivity() { /* Check whether any of the points is in our linear partition. */ bool isOwned = false; for (unsigned short i = 0; i < N_POINTS_QUADRILATERAL; i++) { - if ((int)pointPartitioner.GetRankContainingIndex(connectivity[i]) == rank) { + if (static_cast(pointPartitioner.GetRankContainingIndex(connectivity[i])) == rank) { isOwned = true; } } diff --git a/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderBase.cpp b/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderBase.cpp new file mode 100644 index 000000000000..c3aa0480d848 --- /dev/null +++ b/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderBase.cpp @@ -0,0 +1,519 @@ +/*! + * \file CSU2ASCIIMeshReaderBase.cpp + * \brief Helper class for the reading of a native SU2 ASCII grid file. + * \author T. Economon + * \version 8.2.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2025, 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/toolboxes/CLinearPartitioner.hpp" +#include "../../../include/geometry/meshreader/CSU2ASCIIMeshReaderBase.hpp" + +CSU2ASCIIMeshReaderBase::CSU2ASCIIMeshReaderBase(CConfig* val_config, unsigned short val_iZone, + unsigned short val_nZone) + : CMeshReaderBase(val_config, val_iZone, val_nZone), + myZone(val_iZone), + nZones(val_nZone), + meshFilename(config->GetMesh_FileName()) {} + +CSU2ASCIIMeshReaderBase::~CSU2ASCIIMeshReaderBase(void) = default; + +bool CSU2ASCIIMeshReaderBase::ReadMetadata(const bool single_pass, CConfig* config) { + const bool harmonic_balance = config->GetTime_Marching() == TIME_MARCHING::HARMONIC_BALANCE; + const bool multizone_file = config->GetMultizone_Mesh(); + + /*--- Open grid file ---*/ + + mesh_file.open(meshFilename); + if (mesh_file.fail()) { + SU2_MPI::Error( + "Error opening SU2 ASCII grid.\n" + "Check that the file exists.", + CURRENT_FUNCTION); + } + + /*--- If more than one, find the curent zone in the mesh file. ---*/ + + string text_line; + if ((nZones > 1 && multizone_file) || harmonic_balance) { + if (harmonic_balance) { + if (rank == MASTER_NODE) cout << "Reading time instance " << config->GetiInst() + 1 << "." << endl; + } else { + bool foundZone = false; + while (getline(mesh_file, text_line)) { + /*--- Search for the current domain ---*/ + if (text_line.find("IZONE=", 0) != string::npos) { + text_line.erase(0, 6); + unsigned short jZone = atoi(text_line.c_str()); + if (jZone == myZone + 1) { + if (rank == MASTER_NODE) cout << "Reading zone " << myZone << " from native SU2 ASCII mesh." << endl; + foundZone = true; + break; + } + } + } + if (!foundZone) { + SU2_MPI::Error( + "Could not find the IZONE= keyword or the zone contents.\n" + "Check the SU2 ASCII file format.", + CURRENT_FUNCTION); + } + } + } + + /*--- Read the metadata: problem dimension, offsets for angle + of attack and angle of sideslip, global points, global elements, + and number of markers. Perform error checks as we go. ---*/ + + bool foundNDIME = false, foundNPOIN = false; + bool foundNELEM = false, foundNMARK = false; + + int current_section_idx = 0; + bool single_pass_active = false; + + while (getline(mesh_file, text_line)) { + /*--- Read the dimension of the problem ---*/ + + if (!foundNDIME && text_line.find("NDIME=", 0) != string::npos) { + text_line.erase(0, 6); + dimension = atoi(text_line.c_str()); + foundNDIME = true; + continue; + } + + /*--- The AoA and AoS offset values are optional. ---*/ + + if (text_line.find("AOA_OFFSET=", 0) != string::npos) { + text_line.erase(0, 11); + su2double AoA_Offset = atof(text_line.c_str()); + + /*--- The offset is in deg ---*/ + const su2double AoA_Current = config->GetAoA() + AoA_Offset; + config->SetAoA_Offset(AoA_Offset); + config->SetAoA(AoA_Current); + + if (AoA_Offset != 0.0) { + if (!config->GetDiscard_InFiles()) { + cout << "WARNING: AoA in the config file (" << config->GetAoA() << " deg.) +\n"; + cout << " AoA offset in mesh file (" << AoA_Offset << " deg.) = " << AoA_Current << " deg." << endl; + } else { + cout << "WARNING: Discarding the AoA offset in the mesh file." << endl; + } + } + continue; + } + + if (text_line.find("AOS_OFFSET=", 0) != string::npos) { + text_line.erase(0, 11); + su2double AoS_Offset = atof(text_line.c_str()); + + /*--- The offset is in deg ---*/ + const su2double AoS_Current = config->GetAoS() + AoS_Offset; + config->SetAoS_Offset(AoS_Offset); + config->SetAoS(AoS_Current); + + if (AoS_Offset != 0.0) { + if (!config->GetDiscard_InFiles()) { + cout << "WARNING: AoS in the config file (" << config->GetAoS() << " deg.) +\n"; + cout << " AoS offset in mesh file (" << AoS_Offset << " deg.) = " << AoS_Current << " deg." << endl; + } else { + cout << "WARNING: Discarding the AoS offset in the mesh file." << endl; + } + } + continue; + } + + if (!foundNPOIN && text_line.find("NPOIN=", 0) != string::npos) { + text_line.erase(0, 6); + numberOfGlobalPoints = atoi(text_line.c_str()); + + /* If the points were found first, read them, otherwise just consume the lines. */ + if (single_pass && foundNDIME && current_section_idx == 0) { + single_pass_active = true; + ReadPointCoordinates(true); + } else { + for (auto iPoint = 0ul; iPoint < numberOfGlobalPoints; iPoint++) getline(mesh_file, text_line); + } + SectionOrder[current_section_idx++] = FileSection::POINTS; + foundNPOIN = true; + continue; + } + + if (!foundNELEM && text_line.find("NELEM=", 0) != string::npos) { + text_line.erase(0, 6); + numberOfGlobalElements = atoi(text_line.c_str()); + + if (single_pass_active) { + ReadVolumeElementConnectivity(true); + } else { + for (auto iElem = 0ul; iElem < numberOfGlobalElements; iElem++) getline(mesh_file, text_line); + } + SectionOrder[current_section_idx++] = FileSection::ELEMENTS; + foundNELEM = true; + continue; + } + + if (!foundNMARK && text_line.find("NMARK=", 0) != string::npos) { + text_line.erase(0, 6); + numberOfMarkers = atoi(text_line.c_str()); + + if (current_section_idx != 2) { + SU2_MPI::Error("Markers must be listed after points and elements in the SU2 mesh file.", CURRENT_FUNCTION); + } + + if (single_pass_active) ReadSurfaceElementConnectivity(true); + + SectionOrder[current_section_idx++] = FileSection::MARKERS; + foundNMARK = true; + continue; + } + + /* Stop before we reach the next zone then check for errors below. */ + if (text_line.find("IZONE=", 0) != string::npos) { + break; + } + } + + mesh_file.close(); + + /* Throw an error if any of the keywords was not found. */ + if (!foundNDIME) { + SU2_MPI::Error( + "Could not find the keyword \"NDIME=\".\n" + "Check the SU2 ASCII file format.", + CURRENT_FUNCTION); + } + if (!foundNPOIN) { + SU2_MPI::Error( + "Could not find the keyword \"NPOIN=\".\n" + "Check the SU2 ASCII file format.", + CURRENT_FUNCTION); + } + if (!foundNELEM) { + SU2_MPI::Error( + "Could not find the keyword \"NELEM=\".\n" + "Check the SU2 ASCII file format.", + CURRENT_FUNCTION); + } + if (!foundNMARK) { + SU2_MPI::Error( + "Could not find the keyword \"NMARK=\".\n" + "Check the SU2 ASCII file format.", + CURRENT_FUNCTION); + } + + return single_pass_active; +} + +void CSU2ASCIIMeshReaderBase::ReadPointCoordinates(const bool single_pass) { + /* Get a partitioner to help with linear partitioning. */ + CLinearPartitioner pointPartitioner(numberOfGlobalPoints, 0); + + /* Determine number of local points */ + numberOfLocalPoints = pointPartitioner.GetSizeOnRank(rank); + + /* Prepare our data structure for the point coordinates. */ + localPointCoordinates.resize(dimension); + for (int k = 0; k < dimension; k++) localPointCoordinates[k].reserve(numberOfLocalPoints); + + /*--- Read the point coordinates into our data structure. ---*/ + + while (true) { + string text_line; + if (!single_pass) { + getline(mesh_file, text_line); + if (text_line.find("NPOIN=", 0) == string::npos) continue; + } + + for (unsigned long GlobalIndex = 0; GlobalIndex < numberOfGlobalPoints; ++GlobalIndex) { + if (!actuator_disk) { + getline(mesh_file, text_line); + } else { + if (GlobalIndex < numberOfGlobalPoints - ActDiskNewPoints) { + getline(mesh_file, text_line); + } else { + /* This is a new actuator disk point, so we must construct a + string with the new point's coordinates. */ + ostringstream strsX, strsY, strsZ; + unsigned long BackActDisk_Index = GlobalIndex; + unsigned long LocalIndex = BackActDisk_Index - (numberOfGlobalPoints - ActDiskNewPoints); + strsX.precision(20); + strsY.precision(20); + strsZ.precision(20); + su2double CoordX = CoordXActDisk[LocalIndex]; + strsX << scientific << CoordX; + su2double CoordY = CoordYActDisk[LocalIndex]; + strsY << scientific << CoordY; + su2double CoordZ = CoordZActDisk[LocalIndex]; + strsZ << scientific << CoordZ; + text_line = strsX.str() + "\t" + strsY.str() + "\t" + strsZ.str(); + } + } + + /*--- We only read information for this node if it is owned by this + rank based upon our initial linear partitioning. ---*/ + + passivedouble Coords[3] = {0.0, 0.0, 0.0}; + if (pointPartitioner.IndexBelongsToRank(GlobalIndex, rank)) { + istringstream point_line(text_line); + + /* Store the coordinates more clearly. */ + point_line >> Coords[0]; + point_line >> Coords[1]; + if (dimension == 3) { + point_line >> Coords[2]; + } + + /* Load into the coordinate class data structure. */ + for (unsigned short iDim = 0; iDim < dimension; iDim++) { + localPointCoordinates[iDim].push_back(Coords[iDim]); + } + } + } + break; + } +} + +void CSU2ASCIIMeshReaderBase::ReadVolumeElementConnectivity(const bool single_pass) { + /* Get a partitioner to help with linear partitioning. */ + CLinearPartitioner pointPartitioner(numberOfGlobalPoints, 0); + + /* Loop over our analytically defined of elements and store only those + that contain a node within our linear partition of points. */ + numberOfLocalElements = 0; + array connectivity{}; + + while (true) { + string text_line; + if (!single_pass) { + if (!getline(mesh_file, text_line)) break; + if (text_line.find("NELEM=", 0) == string::npos) continue; + } + + /*--- Loop over all the volumetric elements and store any element that + contains at least one of an owned node for this rank (i.e., there will + be element redundancy, since multiple ranks will store the same elems + on the boundaries of the initial linear partitioning. ---*/ + + numberOfLocalElements = 0; + + for (unsigned long GlobalIndex = 0; GlobalIndex < numberOfGlobalElements; ++GlobalIndex) { + getline(mesh_file, text_line); + istringstream elem_line(text_line); + + /*--- Decide whether this rank needs each element. ---*/ + + unsigned short VTK_Type; + elem_line >> VTK_Type; + + const auto nPointsElem = nPointsOfElementType(VTK_Type); + + for (unsigned short i = 0; i < nPointsElem; i++) { + elem_line >> connectivity[i]; + } + + if (actuator_disk) { + for (unsigned short i = 0; i < nPointsElem; i++) { + if (ActDisk_Bool[connectivity[i]]) { + su2double Xcg = 0.0; + unsigned long Counter = 0; + for (unsigned short j = 0; j < nPointsElem; j++) { + if (connectivity[j] < numberOfGlobalPoints - ActDiskNewPoints) { + Xcg += CoordXVolumePoint[VolumePoint_Inv[connectivity[j]]]; + Counter++; + } + } + Xcg = Xcg / su2double(Counter); + + if (Counter != 0 && Xcg > Xloc) { + connectivity[i] = ActDiskPoint_Back[connectivity[i]]; + } + } + } + } + + /* Check whether any of the points reside in our linear partition. */ + bool isOwned = false; + for (unsigned short i = 0; i < nPointsElem; i++) { + if (pointPartitioner.IndexBelongsToRank(connectivity[i], rank)) { + isOwned = true; + break; + } + } + + /* If element is owned, we need to store it locally. */ + if (isOwned) { + localVolumeElementConnectivity.push_back(GlobalIndex); + localVolumeElementConnectivity.push_back(VTK_Type); + /// TODO: Use a compressed format. + for (unsigned short i = 0; i < N_POINTS_HEXAHEDRON; i++) { + localVolumeElementConnectivity.push_back(connectivity[i]); + } + numberOfLocalElements++; + } + } + break; + } +} + +void CSU2ASCIIMeshReaderBase::ReadSurfaceElementConnectivity(const bool single_pass) { + /* We already read in the number of markers with the metadata. */ + surfaceElementConnectivity.resize(numberOfMarkers); + markerNames.resize(numberOfMarkers); + + array connectivity{}; + + /*--- In this routine, the boundary info is read by all ranks, + however, the surface connectivity is still handled by the + master node (and eventually distributed by the master as well). ---*/ + + while (true) { + string text_line; + if (!single_pass) { + if (!getline(mesh_file, text_line)) break; + if (text_line.find("NMARK=", 0) == string::npos) continue; + } + + for (unsigned long iMarker = 0; iMarker < numberOfMarkers; ++iMarker) { + getline(mesh_file, text_line); + text_line.erase(0, 11); + string::size_type position; + + for (unsigned short iChar = 0; iChar < 20; iChar++) { + position = text_line.find(' ', 0); + if (position != string::npos) text_line.erase(position, 1); + position = text_line.find('\r', 0); + if (position != string::npos) text_line.erase(position, 1); + position = text_line.find('\n', 0); + if (position != string::npos) text_line.erase(position, 1); + } + markerNames[iMarker] = text_line; + + bool duplicate = false; + if ((actuator_disk) && (markerNames[iMarker] == config->GetMarker_ActDiskInlet_TagBound(0))) { + duplicate = true; + markerNames[iMarker + 1] = config->GetMarker_ActDiskOutlet_TagBound(0); + } + + /*--- Physical boundaries definition ---*/ + + if (markerNames[iMarker] == "SEND_RECEIVE") { + /*--- Throw an error if we find deprecated references to SEND_RECEIVE + boundaries in the mesh. ---*/ + SU2_MPI::Error( + "Mesh file contains deprecated SEND_RECEIVE marker!\n" + "Please remove any SEND_RECEIVE markers from the SU2 ASCII mesh.", + CURRENT_FUNCTION); + } + + getline(mesh_file, text_line); + text_line.erase(0, 13); + unsigned long nElem_Bound = atoi(text_line.c_str()); + + /*--- Allocate space for elements ---*/ + + for (unsigned long iElem_Bound = 0; iElem_Bound < nElem_Bound; iElem_Bound++) { + getline(mesh_file, text_line); + istringstream bound_line(text_line); + + unsigned short VTK_Type; + bound_line >> VTK_Type; + + const auto nPointsElem = nPointsOfElementType(VTK_Type); + + if (dimension == 3 && VTK_Type == LINE) { + SU2_MPI::Error( + "Line boundary conditions are not possible for 3D calculations.\n" + "Please check the SU2 ASCII mesh file.", + CURRENT_FUNCTION); + } + + for (unsigned short i = 0; i < nPointsElem; i++) { + bound_line >> connectivity[i]; + } + + surfaceElementConnectivity[iMarker].push_back(0); + surfaceElementConnectivity[iMarker].push_back(VTK_Type); + for (unsigned short i = 0; i < N_POINTS_HEXAHEDRON; i++) { + surfaceElementConnectivity[iMarker].push_back(connectivity[i]); + } + + if (duplicate) { + for (unsigned short i = 0; i < nPointsElem; i++) { + if (ActDisk_Bool[connectivity[i]]) { + connectivity[i] = ActDiskPoint_Back[connectivity[i]]; + } + } + surfaceElementConnectivity[iMarker + 1].push_back(0); + surfaceElementConnectivity[iMarker + 1].push_back(VTK_Type); + for (unsigned short i = 0; i < N_POINTS_HEXAHEDRON; i++) { + surfaceElementConnectivity[iMarker + 1].push_back(connectivity[i]); + } + } + } + /*--- Increment the counter an extra time if we stored a duplicate. ---*/ + iMarker += duplicate; + } + break; + } + + if (rank != MASTER_NODE) return; + + /*--- Final error check for deprecated periodic BC format. ---*/ + + string text_line; + while (getline(mesh_file, text_line)) { + /*--- Find any periodic transformation information. ---*/ + + if (text_line.find("NPERIODIC=", 0) != string::npos) { + /*--- Read and store the number of transformations. ---*/ + text_line.erase(0, 10); + unsigned short nPeriodic = atoi(text_line.c_str()); + if (nPeriodic - 1 != 0) { + SU2_MPI::Error( + "Mesh file contains deprecated periodic format!\n\n" + "For SU2 v7.0.0 and later, preprocessing of periodic grids by SU2_MSH\n" + "is no longer necessary. Please use the original mesh file (prior to SU2_MSH)\n" + "with the same MARKER_PERIODIC definition in the configuration file.", + CURRENT_FUNCTION); + } + } + + /*--- Stop before we reach the next zone. ---*/ + if (text_line.find("IZONE=", 0) != string::npos) break; + } +} + +void CSU2ASCIIMeshReaderBase::FastForwardToMyZone() { + /*--- If more than one, fast-forward to my zone in the mesh file. ---*/ + + if (nZones == 1 || !config->GetMultizone_Mesh()) return; + + string text_line; + while (getline(mesh_file, text_line)) { + /*--- Search for the current domain ---*/ + if (text_line.find("IZONE=", 0) == string::npos) continue; + text_line.erase(0, 6); + unsigned short jZone = atoi(text_line.c_str()); + if (jZone == myZone + 1) break; + } +} diff --git a/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderFEM.cpp b/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderFEM.cpp new file mode 100644 index 000000000000..b833fa6d8d80 --- /dev/null +++ b/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderFEM.cpp @@ -0,0 +1,360 @@ +/*! + * \file CSU2ASCIIMeshReaderFEM.cpp + * \brief Reads a native SU2 ASCII grid into linear partitions for the + * finite element solver (FEM). + * \author T. Economon, E. van der Weide + * \version 8.2.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2025, 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/toolboxes/CLinearPartitioner.hpp" +#include "../../../include/geometry/meshreader/CSU2ASCIIMeshReaderFEM.hpp" +#include "../../../include/fem/fem_standard_element.hpp" + +CSU2ASCIIMeshReaderFEM::CSU2ASCIIMeshReaderFEM(CConfig* val_config, unsigned short val_iZone, unsigned short val_nZone) + : CSU2ASCIIMeshReaderBase(val_config, val_iZone, val_nZone) { + /* Read the basic metadata and perform some basic error checks. */ + ReadMetadata(true, val_config); + + /*--- Read the volume connectivity and distribute it + linearly over the MPI ranks. ---*/ + ReadVolumeElementConnectivity(); + + /*--- Read the coordinates of the points that are needed + on this MPI rank. ---*/ + ReadPointCoordinates(); + + /*--- Read the surface connectivity and store the surface elements whose + corresponding volume element is stored on this MPI rank. ---*/ + ReadSurfaceElementConnectivity(); +} + +CSU2ASCIIMeshReaderFEM::~CSU2ASCIIMeshReaderFEM() = default; + +void CSU2ASCIIMeshReaderFEM::ReadPointCoordinates() { + /*--- Loop over the local elements to determine the global + point IDs to be stored on this rank. --*/ + unsigned long ind = 0; + for (unsigned long i = 0; i < numberOfLocalElements; ++i) { + /*--- Store the number of grid DOFs for this element and + skip the meta data for this element (5 entries). ---*/ + const unsigned long nDOFsGrid = localVolumeElementConnectivity[ind + 3]; + ind += 5; + + /*--- Copy the connectivity to globalPointIDs. ---*/ + unsigned long* conn = localVolumeElementConnectivity.data() + ind; + ind += nDOFsGrid; + globalPointIDs.insert(globalPointIDs.end(), conn, conn + nDOFsGrid); + } + + /*--- Sort the globalPointIDs and remove the duplicate entries. ---*/ + sort(globalPointIDs.begin(), globalPointIDs.end()); + vector::iterator lastNode; + lastNode = unique(globalPointIDs.begin(), globalPointIDs.end()); + globalPointIDs.erase(lastNode, globalPointIDs.end()); + + /*--- Determine the number of locally stored points. ---*/ + numberOfLocalPoints = globalPointIDs.size(); + + /*--- Prepare our data structure for the point coordinates. ---*/ + localPointCoordinates.resize(dimension); + for (int k = 0; k < dimension; ++k) localPointCoordinates[k].reserve(numberOfLocalPoints); + + /*--- Open the mesh file and jump to our zone. ---*/ + mesh_file.open(meshFilename, ios::in); + FastForwardToMyZone(); + + /*--- Find the section containing the coordinates. ---*/ + string text_line; + while (getline(mesh_file, text_line)) { + string::size_type position = text_line.find("NPOIN=", 0); + if (position != string::npos) break; + } + + /*--- Loop over the global number of points in the grid. ---*/ + for (unsigned long i = 0; i < numberOfGlobalPoints; ++i) { + /*--- Read the line in the grid file. This line must always + be read, even if the point is not stored on this rank. ---*/ + getline(mesh_file, text_line); + + /*--- Determine whether this point must be stored on this rank. ---*/ + if (binary_search(globalPointIDs.begin(), globalPointIDs.end(), i)) { + /*--- Read the coordinates from the string and store them + in localPointCoordinates. ---*/ + istringstream point_line(text_line); + for (unsigned short iDim = 0; iDim < dimension; ++iDim) { + passivedouble Coord; + point_line >> Coord; + localPointCoordinates[iDim].push_back(Coord); + } + } + } + + /*--- Close the mesh file again. ---*/ + mesh_file.close(); +} + +void CSU2ASCIIMeshReaderFEM::ReadVolumeElementConnectivity() { + /* Get a partitioner to help with linear partitioning. */ + CLinearPartitioner elemPartitioner(numberOfGlobalElements, 0); + + /*--- Open the mesh file and jump to our zone. ---*/ + mesh_file.open(meshFilename, ios::in); + FastForwardToMyZone(); + + /*--- Find the section containing the interior elements. ---*/ + string text_line; + while (getline(mesh_file, text_line)) { + string::size_type position = text_line.find("NELEM=", 0); + if (position != string::npos) break; + } + + /*--- Skip the elements, which are read by ranks lower than my rank. ---*/ + const unsigned long firstIndex = elemPartitioner.GetFirstIndexOnRank(rank); + for (unsigned long i = 0; i < firstIndex; ++i) getline(mesh_file, text_line); + + /*--- Determine the number of local elements. ---*/ + numberOfLocalElements = elemPartitioner.GetSizeOnRank(rank); + + /*--- Loop over the elements that must be stored on this rank. ---*/ + for (unsigned long i = 0; i < numberOfLocalElements; ++i) { + /*--- Read the line for this element and couple it to an istringstream + to enable the actual reading of the data. ---*/ + getline(mesh_file, text_line); + istringstream elem_line(text_line); + + /*--- Read the value that defines the element type and the polynomial degree + of the geometry and the solution. Extract this info as well. ---*/ + unsigned long typeRead; + elem_line >> typeRead; + unsigned long typeReadErrorMessage = typeRead; + + unsigned short nPolySol, nPolyGrid; + if (typeRead > 10000) { + nPolySol = typeRead / 10000 - 1; + typeRead = typeRead % 10000; + nPolyGrid = typeRead / 100 + 1; + } else { + nPolyGrid = typeRead / 100 + 1; + nPolySol = nPolyGrid; + } + + unsigned short VTK_Type = typeRead % 100; + + /*--- Determine the number of grid DOFs for this element. ---*/ + unsigned short nDOFsGrid = CFEMStandardElementBase::GetNDOFsStatic(VTK_Type, nPolyGrid); + if (nDOFsGrid == 0) { + ostringstream message; + message << "Unknown FEM element type, " << typeReadErrorMessage << ", encountered."; + SU2_MPI::Error(message.str(), CURRENT_FUNCTION); + } + + /*--- Store the data just created in localVolumeElementConnectivity. ---*/ + localVolumeElementConnectivity.push_back(VTK_Type); + localVolumeElementConnectivity.push_back(nPolyGrid); + localVolumeElementConnectivity.push_back(nPolySol); + localVolumeElementConnectivity.push_back(nDOFsGrid); + localVolumeElementConnectivity.push_back(firstIndex + i); // Global elem ID. + + /*--- Store the current index, as this is needed when the + connectivity of linear elements is swapped. ---*/ + const unsigned long ind = localVolumeElementConnectivity.size(); + + /*--- Read the connectivity from elem_line and store it in + localVolumeElementConnectivity. ---*/ + for (unsigned short j = 0; j < nDOFsGrid; ++j) { + unsigned long nodeID; + elem_line >> nodeID; + localVolumeElementConnectivity.push_back(nodeID); + } + + /*--- If a linear element is used, the node numbering for non-simplices + must be adapted. The reason is that compatability with the original + SU2 format is maintained for linear elements, but for the FEM solver + the nodes of the elements are stored row-wise. ---*/ + if (nPolyGrid == 1) { + switch (VTK_Type) { + case QUADRILATERAL: + swap(localVolumeElementConnectivity[ind + 2], localVolumeElementConnectivity[ind + 3]); + break; + + case HEXAHEDRON: + swap(localVolumeElementConnectivity[ind + 2], localVolumeElementConnectivity[ind + 3]); + swap(localVolumeElementConnectivity[ind + 6], localVolumeElementConnectivity[ind + 7]); + break; + + case PYRAMID: + swap(localVolumeElementConnectivity[ind + 2], localVolumeElementConnectivity[ind + 3]); + break; + } + } + } + + /*--- Close the mesh file again. ---*/ + mesh_file.close(); +} + +void CSU2ASCIIMeshReaderFEM::ReadSurfaceElementConnectivity() { + /*--- Determine the vector to hold the faces of the local elements. ---*/ + vector localFaces; + DetermineFacesVolumeElements(localFaces); + + /*--- We already read in the number of markers with the metadata. + Allocate the memory for the marker names, number of local surface + elements and the first index of the surface element connectivity. ---*/ + surfaceElementConnectivity.resize(numberOfMarkers); + markerNames.resize(numberOfMarkers); + numberOfLocalSurfaceElements.resize(numberOfMarkers, 0); + + /*--- Open the mesh file and jump to our zone. ---*/ + mesh_file.open(meshFilename, ios::in); + FastForwardToMyZone(); + + /*--- Find the section containing the markers. ---*/ + string text_line; + while (getline(mesh_file, text_line)) { + string::size_type position = text_line.find("NMARK=", 0); + if (position != string::npos) break; + } + + /*--- Loop over the number of boundary markers. ---*/ + for (unsigned long iMarker = 0; iMarker < numberOfMarkers; ++iMarker) { + /*--- Find the section containing the marker name. ---*/ + while (getline(mesh_file, text_line)) { + string::size_type position = text_line.find("MARKER_TAG=", 0); + if (position != string::npos) break; + } + + /*--- Extract the marker name. Remove spaces returns and tabs + and store the name in markerNames. ---*/ + text_line.erase(0, 11); + + for (unsigned short iChar = 0; iChar < 20; iChar++) { + auto position = text_line.find(" ", 0); + if (position != string::npos) text_line.erase(position, 1); + position = text_line.find("\r", 0); + if (position != string::npos) text_line.erase(position, 1); + position = text_line.find("\n", 0); + if (position != string::npos) text_line.erase(position, 1); + } + markerNames[iMarker] = text_line.c_str(); + + /*--- Find the section containing the number of surface elements + for this marker and determine this number. ---*/ + while (getline(mesh_file, text_line)) { + auto position = text_line.find("MARKER_ELEMS=", 0); + if (position != string::npos) break; + } + + text_line.erase(0, 13); + unsigned long nElem_Bound = atoi(text_line.c_str()); + + /*--- Loop over the surface elements for this marker. ---*/ + for (unsigned long i = 0; i < nElem_Bound; ++i) { + /*--- Read the line for this element and couple it to an istringstream + to enable the actual reading of the data. ---*/ + getline(mesh_file, text_line); + istringstream bound_line(text_line); + + /*--- Determine the element type and polynomial degree. ---*/ + unsigned long typeRead; + bound_line >> typeRead; + + const unsigned short nPolyGrid = typeRead / 100 + 1; + const unsigned short VTK_Type = typeRead % 100; + + /*--- Make a distinction between the possible element surface types and + determine the corner points in local numbering of the element. ---*/ + const unsigned short nDOFEdgeGrid = nPolyGrid + 1; + + unsigned short nDOFsGrid = 0; + CFaceOfElement thisFace; + thisFace.cornerPoints[0] = 0; + thisFace.cornerPoints[1] = nPolyGrid; + + switch (VTK_Type) { + case LINE: + nDOFsGrid = nDOFEdgeGrid; + thisFace.nCornerPoints = 2; + break; + + case TRIANGLE: + nDOFsGrid = nDOFEdgeGrid * (nDOFEdgeGrid + 1) / 2; + thisFace.nCornerPoints = 3; + thisFace.cornerPoints[2] = nDOFsGrid - 1; + break; + + case QUADRILATERAL: + nDOFsGrid = nDOFEdgeGrid * nDOFEdgeGrid; + thisFace.nCornerPoints = 4; + thisFace.cornerPoints[2] = static_cast(nPolyGrid) * nDOFEdgeGrid; + thisFace.cornerPoints[3] = nDOFsGrid - 1; + break; + + default: + ostringstream message; + message << "Unknown FEM boundary element value, " << typeRead << ", in " << meshFilename; + SU2_MPI::Error(message.str(), CURRENT_FUNCTION); + } + + /*--- Read the connectivity information. ---*/ + vector connFace(nDOFsGrid); + for (unsigned short j = 0; j < nDOFsGrid; ++j) bound_line >> connFace[j]; + + /*--- If a linear quadrilateral is used, the node numbering must be adapted. + The reason is that compatability with the original SU2 format is + maintained for linear elements, but for the FEM solver the nodes + of the elements are stored row-wise. ---*/ + if ((nPolyGrid == 1) && (VTK_Type == QUADRILATERAL)) swap(connFace[2], connFace[3]); + + /*--- Convert the local numbering of thisFace to global numbering + and create a unique numbering of corner points. ---*/ + for (unsigned short j = 0; j < thisFace.nCornerPoints; ++j) + thisFace.cornerPoints[j] = connFace[thisFace.cornerPoints[j]]; + thisFace.CreateUniqueNumbering(); + + /*--- Check if this boundary face must be stored on this rank. ---*/ + vector::iterator low; + low = lower_bound(localFaces.begin(), localFaces.end(), thisFace); + if (low != localFaces.end()) { + if (!(thisFace < *low)) { + /*--- Update the counter for this boundary marker and store + the meta data in surfaceElementConnectivity. ---*/ + ++numberOfLocalSurfaceElements[iMarker]; + + surfaceElementConnectivity[iMarker].push_back(VTK_Type); + surfaceElementConnectivity[iMarker].push_back(nPolyGrid); + surfaceElementConnectivity[iMarker].push_back(nDOFsGrid); + surfaceElementConnectivity[iMarker].push_back(i); // Global surface elem ID. + surfaceElementConnectivity[iMarker].push_back(low->elemID0); // Global volume elem ID. + + /*--- Copy the connectivity to surfaceElementConnectivity. ---*/ + surfaceElementConnectivity[iMarker].insert(surfaceElementConnectivity[iMarker].end(), connFace.begin(), + connFace.end()); + } + } + } + } + + /*--- Close the mesh file again. ---*/ + mesh_file.close(); +} diff --git a/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderFVM.cpp b/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderFVM.cpp index e0ebfcc5acbc..f0f984f2732e 100644 --- a/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderFVM.cpp +++ b/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderFVM.cpp @@ -3,14 +3,14 @@ * \brief Reads a native SU2 ASCII grid into linear partitions for the * finite volume solver (FVM). * \author T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -26,14 +26,10 @@ * License along with SU2. If not, see . */ -#include "../../../include/toolboxes/CLinearPartitioner.hpp" #include "../../../include/geometry/meshreader/CSU2ASCIIMeshReaderFVM.hpp" CSU2ASCIIMeshReaderFVM::CSU2ASCIIMeshReaderFVM(CConfig* val_config, unsigned short val_iZone, unsigned short val_nZone) - : CMeshReaderFVM(val_config, val_iZone, val_nZone), - myZone(val_iZone), - nZones(val_nZone), - meshFilename(config->GetMesh_FileName()) { + : CSU2ASCIIMeshReaderBase(val_config, val_iZone, val_nZone) { actuator_disk = (((config->GetnMarker_ActDiskInlet() != 0) || (config->GetnMarker_ActDiskOutlet() != 0)) && ((config->GetKind_SU2() == SU2_COMPONENT::SU2_CFD) || ((config->GetKind_SU2() == SU2_COMPONENT::SU2_DEF) && (config->GetActDisk_SU2_DEF())))); @@ -75,192 +71,7 @@ CSU2ASCIIMeshReaderFVM::CSU2ASCIIMeshReaderFVM(CConfig* val_config, unsigned sho mesh_file.close(); } -bool CSU2ASCIIMeshReaderFVM::ReadMetadata(const bool single_pass, CConfig* config) { - const bool harmonic_balance = config->GetTime_Marching() == TIME_MARCHING::HARMONIC_BALANCE; - const bool multizone_file = config->GetMultizone_Mesh(); - - /*--- Open grid file ---*/ - - mesh_file.open(meshFilename); - if (mesh_file.fail()) { - SU2_MPI::Error( - "Error opening SU2 ASCII grid.\n" - "Check that the file exists.", - CURRENT_FUNCTION); - } - - /*--- If more than one, find the curent zone in the mesh file. ---*/ - - string text_line; - if ((nZones > 1 && multizone_file) || harmonic_balance) { - if (harmonic_balance) { - if (rank == MASTER_NODE) cout << "Reading time instance " << config->GetiInst() + 1 << "." << endl; - } else { - bool foundZone = false; - while (getline(mesh_file, text_line)) { - /*--- Search for the current domain ---*/ - if (text_line.find("IZONE=", 0) != string::npos) { - text_line.erase(0, 6); - unsigned short jZone = atoi(text_line.c_str()); - if (jZone == myZone + 1) { - if (rank == MASTER_NODE) cout << "Reading zone " << myZone << " from native SU2 ASCII mesh." << endl; - foundZone = true; - break; - } - } - } - if (!foundZone) { - SU2_MPI::Error( - "Could not find the IZONE= keyword or the zone contents.\n" - "Check the SU2 ASCII file format.", - CURRENT_FUNCTION); - } - } - } - - /*--- Read the metadata: problem dimension, offsets for angle - of attack and angle of sideslip, global points, global elements, - and number of markers. Perform error checks as we go. ---*/ - - bool foundNDIME = false, foundNPOIN = false; - bool foundNELEM = false, foundNMARK = false; - - int current_section_idx = 0; - bool single_pass_active = false; - - while (getline(mesh_file, text_line)) { - /*--- Read the dimension of the problem ---*/ - - if (!foundNDIME && text_line.find("NDIME=", 0) != string::npos) { - text_line.erase(0, 6); - dimension = atoi(text_line.c_str()); - foundNDIME = true; - continue; - } - - /*--- The AoA and AoS offset values are optional. ---*/ - - if (text_line.find("AOA_OFFSET=", 0) != string::npos) { - text_line.erase(0, 11); - su2double AoA_Offset = atof(text_line.c_str()); - - /*--- The offset is in deg ---*/ - const su2double AoA_Current = config->GetAoA() + AoA_Offset; - config->SetAoA_Offset(AoA_Offset); - config->SetAoA(AoA_Current); - - if (AoA_Offset != 0.0) { - if (!config->GetDiscard_InFiles()) { - cout << "WARNING: AoA in the config file (" << config->GetAoA() << " deg.) +\n"; - cout << " AoA offset in mesh file (" << AoA_Offset << " deg.) = " << AoA_Current << " deg." << endl; - } else { - cout << "WARNING: Discarding the AoA offset in the mesh file." << endl; - } - } - continue; - } - - if (text_line.find("AOS_OFFSET=", 0) != string::npos) { - text_line.erase(0, 11); - su2double AoS_Offset = atof(text_line.c_str()); - - /*--- The offset is in deg ---*/ - const su2double AoS_Current = config->GetAoS() + AoS_Offset; - config->SetAoS_Offset(AoS_Offset); - config->SetAoS(AoS_Current); - - if (AoS_Offset != 0.0) { - if (!config->GetDiscard_InFiles()) { - cout << "WARNING: AoS in the config file (" << config->GetAoS() << " deg.) +\n"; - cout << " AoS offset in mesh file (" << AoS_Offset << " deg.) = " << AoS_Current << " deg." << endl; - } else { - cout << "WARNING: Discarding the AoS offset in the mesh file." << endl; - } - } - continue; - } - - if (!foundNPOIN && text_line.find("NPOIN=", 0) != string::npos) { - text_line.erase(0, 6); - numberOfGlobalPoints = atoi(text_line.c_str()); - - /* If the points were found first, read them, otherwise just consume the lines. */ - if (single_pass && foundNDIME && current_section_idx == 0) { - single_pass_active = true; - ReadPointCoordinates(true); - } else { - for (auto iPoint = 0ul; iPoint < numberOfGlobalPoints; iPoint++) getline(mesh_file, text_line); - } - SectionOrder[current_section_idx++] = FileSection::POINTS; - foundNPOIN = true; - continue; - } - - if (!foundNELEM && text_line.find("NELEM=", 0) != string::npos) { - text_line.erase(0, 6); - numberOfGlobalElements = atoi(text_line.c_str()); - - if (single_pass_active) { - ReadVolumeElementConnectivity(true); - } else { - for (auto iElem = 0ul; iElem < numberOfGlobalElements; iElem++) getline(mesh_file, text_line); - } - SectionOrder[current_section_idx++] = FileSection::ELEMENTS; - foundNELEM = true; - continue; - } - - if (!foundNMARK && text_line.find("NMARK=", 0) != string::npos) { - text_line.erase(0, 6); - numberOfMarkers = atoi(text_line.c_str()); - - if (current_section_idx != 2) { - SU2_MPI::Error("Markers must be listed after points and elements in the SU2 mesh file.", CURRENT_FUNCTION); - } - - if (single_pass_active) ReadSurfaceElementConnectivity(true); - - SectionOrder[current_section_idx++] = FileSection::MARKERS; - foundNMARK = true; - continue; - } - - /* Stop before we reach the next zone then check for errors below. */ - if (text_line.find("IZONE=", 0) != string::npos) { - break; - } - } - - mesh_file.close(); - - /* Throw an error if any of the keywords was not found. */ - if (!foundNDIME) { - SU2_MPI::Error( - "Could not find the keyword \"NDIME=\".\n" - "Check the SU2 ASCII file format.", - CURRENT_FUNCTION); - } - if (!foundNPOIN) { - SU2_MPI::Error( - "Could not find the keyword \"NPOIN=\".\n" - "Check the SU2 ASCII file format.", - CURRENT_FUNCTION); - } - if (!foundNELEM) { - SU2_MPI::Error( - "Could not find the keyword \"NELEM=\".\n" - "Check the SU2 ASCII file format.", - CURRENT_FUNCTION); - } - if (!foundNMARK) { - SU2_MPI::Error( - "Could not find the keyword \"NMARK=\".\n" - "Check the SU2 ASCII file format.", - CURRENT_FUNCTION); - } - - return single_pass_active; -} +CSU2ASCIIMeshReaderFVM::~CSU2ASCIIMeshReaderFVM() = default; void CSU2ASCIIMeshReaderFVM::SplitActuatorDiskSurface() { /*--- Actuator disk preprocesing ---*/ @@ -594,14 +405,14 @@ void CSU2ASCIIMeshReaderFVM::SplitActuatorDiskSurface() { elem_line >> connectivity[1]; elem_line >> connectivity[2]; InElem = false; - for (unsigned long i = 0; i < (unsigned long)N_POINTS_TRIANGLE; i++) { + for (unsigned long i = 0; i < static_cast(N_POINTS_TRIANGLE); i++) { if (ActDisk_Bool[connectivity[i]]) { InElem = true; break; } } if (InElem) { - for (unsigned long i = 0; i < (unsigned long)N_POINTS_TRIANGLE; i++) { + for (unsigned long i = 0; i < static_cast(N_POINTS_TRIANGLE); i++) { VolumePoint.push_back(connectivity[i]); } } @@ -612,14 +423,14 @@ void CSU2ASCIIMeshReaderFVM::SplitActuatorDiskSurface() { elem_line >> connectivity[2]; elem_line >> connectivity[3]; InElem = false; - for (unsigned long i = 0; i < (unsigned long)N_POINTS_QUADRILATERAL; i++) { + for (unsigned long i = 0; i < static_cast(N_POINTS_QUADRILATERAL); i++) { if (ActDisk_Bool[connectivity[i]]) { InElem = true; break; } } if (InElem) { - for (unsigned long i = 0; i < (unsigned long)N_POINTS_QUADRILATERAL; i++) { + for (unsigned long i = 0; i < static_cast(N_POINTS_QUADRILATERAL); i++) { VolumePoint.push_back(connectivity[i]); } } @@ -630,14 +441,14 @@ void CSU2ASCIIMeshReaderFVM::SplitActuatorDiskSurface() { elem_line >> connectivity[2]; elem_line >> connectivity[3]; InElem = false; - for (unsigned long i = 0; i < (unsigned long)N_POINTS_TETRAHEDRON; i++) { + for (unsigned long i = 0; i < static_cast(N_POINTS_TETRAHEDRON); i++) { if (ActDisk_Bool[connectivity[i]]) { InElem = true; break; } } if (InElem) { - for (unsigned long i = 0; i < (unsigned long)N_POINTS_TETRAHEDRON; i++) { + for (unsigned long i = 0; i < static_cast(N_POINTS_TETRAHEDRON); i++) { VolumePoint.push_back(connectivity[i]); } } @@ -652,14 +463,14 @@ void CSU2ASCIIMeshReaderFVM::SplitActuatorDiskSurface() { elem_line >> connectivity[6]; elem_line >> connectivity[7]; InElem = false; - for (unsigned long i = 0; i < (unsigned long)N_POINTS_HEXAHEDRON; i++) { + for (unsigned long i = 0; i < static_cast(N_POINTS_HEXAHEDRON); i++) { if (ActDisk_Bool[connectivity[i]]) { InElem = true; break; } } if (InElem) { - for (unsigned long i = 0; i < (unsigned long)N_POINTS_HEXAHEDRON; i++) { + for (unsigned long i = 0; i < static_cast(N_POINTS_HEXAHEDRON); i++) { VolumePoint.push_back(connectivity[i]); } } @@ -672,14 +483,14 @@ void CSU2ASCIIMeshReaderFVM::SplitActuatorDiskSurface() { elem_line >> connectivity[4]; elem_line >> connectivity[5]; InElem = false; - for (unsigned long i = 0; i < (unsigned long)N_POINTS_PRISM; i++) { + for (unsigned long i = 0; i < static_cast(N_POINTS_PRISM); i++) { if (ActDisk_Bool[connectivity[i]]) { InElem = true; break; } } if (InElem) { - for (unsigned long i = 0; i < (unsigned long)N_POINTS_PRISM; i++) { + for (unsigned long i = 0; i < static_cast(N_POINTS_PRISM); i++) { VolumePoint.push_back(connectivity[i]); } } @@ -691,14 +502,14 @@ void CSU2ASCIIMeshReaderFVM::SplitActuatorDiskSurface() { elem_line >> connectivity[3]; elem_line >> connectivity[4]; InElem = false; - for (unsigned long i = 0; i < (unsigned long)N_POINTS_PYRAMID; i++) { + for (unsigned long i = 0; i < static_cast(N_POINTS_PYRAMID); i++) { if (ActDisk_Bool[connectivity[i]]) { InElem = true; break; } } if (InElem) { - for (unsigned long i = 0; i < (unsigned long)N_POINTS_PYRAMID; i++) { + for (unsigned long i = 0; i < static_cast(N_POINTS_PYRAMID); i++) { VolumePoint.push_back(connectivity[i]); } } @@ -783,297 +594,3 @@ void CSU2ASCIIMeshReaderFVM::SplitActuatorDiskSurface() { mesh_file.close(); } - -void CSU2ASCIIMeshReaderFVM::ReadPointCoordinates(const bool single_pass) { - /* Get a partitioner to help with linear partitioning. */ - CLinearPartitioner pointPartitioner(numberOfGlobalPoints, 0); - - /* Determine number of local points */ - numberOfLocalPoints = pointPartitioner.GetSizeOnRank(rank); - - /* Prepare our data structure for the point coordinates. */ - localPointCoordinates.resize(dimension); - for (int k = 0; k < dimension; k++) localPointCoordinates[k].reserve(numberOfLocalPoints); - - /*--- Read the point coordinates into our data structure. ---*/ - - while (true) { - string text_line; - if (!single_pass) { - getline(mesh_file, text_line); - if (text_line.find("NPOIN=", 0) == string::npos) continue; - } - - for (unsigned long GlobalIndex = 0; GlobalIndex < numberOfGlobalPoints; ++GlobalIndex) { - if (!actuator_disk) { - getline(mesh_file, text_line); - } else { - if (GlobalIndex < numberOfGlobalPoints - ActDiskNewPoints) { - getline(mesh_file, text_line); - } else { - /* This is a new actuator disk point, so we must construct a - string with the new point's coordinates. */ - ostringstream strsX, strsY, strsZ; - unsigned long BackActDisk_Index = GlobalIndex; - unsigned long LocalIndex = BackActDisk_Index - (numberOfGlobalPoints - ActDiskNewPoints); - strsX.precision(20); - strsY.precision(20); - strsZ.precision(20); - su2double CoordX = CoordXActDisk[LocalIndex]; - strsX << scientific << CoordX; - su2double CoordY = CoordYActDisk[LocalIndex]; - strsY << scientific << CoordY; - su2double CoordZ = CoordZActDisk[LocalIndex]; - strsZ << scientific << CoordZ; - text_line = strsX.str() + "\t" + strsY.str() + "\t" + strsZ.str(); - } - } - - /*--- We only read information for this node if it is owned by this - rank based upon our initial linear partitioning. ---*/ - - passivedouble Coords[3] = {0.0, 0.0, 0.0}; - if (pointPartitioner.IndexBelongsToRank(GlobalIndex, rank)) { - istringstream point_line(text_line); - - /* Store the coordinates more clearly. */ - point_line >> Coords[0]; - point_line >> Coords[1]; - if (dimension == 3) { - point_line >> Coords[2]; - } - - /* Load into the coordinate class data structure. */ - for (unsigned short iDim = 0; iDim < dimension; iDim++) { - localPointCoordinates[iDim].push_back(Coords[iDim]); - } - } - } - break; - } -} - -void CSU2ASCIIMeshReaderFVM::ReadVolumeElementConnectivity(const bool single_pass) { - /* Get a partitioner to help with linear partitioning. */ - CLinearPartitioner pointPartitioner(numberOfGlobalPoints, 0); - - /* Loop over our analytically defined of elements and store only those - that contain a node within our linear partition of points. */ - numberOfLocalElements = 0; - array connectivity{}; - - while (true) { - string text_line; - if (!single_pass) { - if (!getline(mesh_file, text_line)) break; - if (text_line.find("NELEM=", 0) == string::npos) continue; - } - - /*--- Loop over all the volumetric elements and store any element that - contains at least one of an owned node for this rank (i.e., there will - be element redundancy, since multiple ranks will store the same elems - on the boundaries of the initial linear partitioning. ---*/ - - numberOfLocalElements = 0; - - for (unsigned long GlobalIndex = 0; GlobalIndex < numberOfGlobalElements; ++GlobalIndex) { - getline(mesh_file, text_line); - istringstream elem_line(text_line); - - /*--- Decide whether this rank needs each element. ---*/ - - unsigned short VTK_Type; - elem_line >> VTK_Type; - - const auto nPointsElem = nPointsOfElementType(VTK_Type); - - for (unsigned short i = 0; i < nPointsElem; i++) { - elem_line >> connectivity[i]; - } - - if (actuator_disk) { - for (unsigned short i = 0; i < nPointsElem; i++) { - if (ActDisk_Bool[connectivity[i]]) { - su2double Xcg = 0.0; - unsigned long Counter = 0; - for (unsigned short j = 0; j < nPointsElem; j++) { - if (connectivity[j] < numberOfGlobalPoints - ActDiskNewPoints) { - Xcg += CoordXVolumePoint[VolumePoint_Inv[connectivity[j]]]; - Counter++; - } - } - Xcg = Xcg / su2double(Counter); - - if (Counter != 0 && Xcg > Xloc) { - connectivity[i] = ActDiskPoint_Back[connectivity[i]]; - } - } - } - } - - /* Check whether any of the points reside in our linear partition. */ - bool isOwned = false; - for (unsigned short i = 0; i < nPointsElem; i++) { - if (pointPartitioner.IndexBelongsToRank(connectivity[i], rank)) { - isOwned = true; - break; - } - } - - /* If element is owned, we need to store it locally. */ - if (isOwned) { - localVolumeElementConnectivity.push_back(GlobalIndex); - localVolumeElementConnectivity.push_back(VTK_Type); - /// TODO: Use a compressed format. - for (unsigned short i = 0; i < N_POINTS_HEXAHEDRON; i++) { - localVolumeElementConnectivity.push_back(connectivity[i]); - } - numberOfLocalElements++; - } - } - break; - } -} - -void CSU2ASCIIMeshReaderFVM::ReadSurfaceElementConnectivity(const bool single_pass) { - /* We already read in the number of markers with the metadata. */ - surfaceElementConnectivity.resize(numberOfMarkers); - markerNames.resize(numberOfMarkers); - - array connectivity{}; - - /*--- In this routine, the boundary info is read by all ranks, - however, the surface connectivity is still handled by the - master node (and eventually distributed by the master as well). ---*/ - - while (true) { - string text_line; - if (!single_pass) { - if (!getline(mesh_file, text_line)) break; - if (text_line.find("NMARK=", 0) == string::npos) continue; - } - - for (unsigned short iMarker = 0; iMarker < numberOfMarkers; ++iMarker) { - getline(mesh_file, text_line); - text_line.erase(0, 11); - string::size_type position; - - for (unsigned short iChar = 0; iChar < 20; iChar++) { - position = text_line.find(' ', 0); - if (position != string::npos) text_line.erase(position, 1); - position = text_line.find('\r', 0); - if (position != string::npos) text_line.erase(position, 1); - position = text_line.find('\n', 0); - if (position != string::npos) text_line.erase(position, 1); - } - markerNames[iMarker] = text_line; - - bool duplicate = false; - if ((actuator_disk) && (markerNames[iMarker] == config->GetMarker_ActDiskInlet_TagBound(0))) { - duplicate = true; - markerNames[iMarker + 1] = config->GetMarker_ActDiskOutlet_TagBound(0); - } - - /*--- Physical boundaries definition ---*/ - - if (markerNames[iMarker] == "SEND_RECEIVE") { - /*--- Throw an error if we find deprecated references to SEND_RECEIVE - boundaries in the mesh. ---*/ - SU2_MPI::Error( - "Mesh file contains deprecated SEND_RECEIVE marker!\n" - "Please remove any SEND_RECEIVE markers from the SU2 ASCII mesh.", - CURRENT_FUNCTION); - } - - getline(mesh_file, text_line); - text_line.erase(0, 13); - unsigned long nElem_Bound = atoi(text_line.c_str()); - - /*--- Allocate space for elements ---*/ - - for (unsigned long iElem_Bound = 0; iElem_Bound < nElem_Bound; iElem_Bound++) { - getline(mesh_file, text_line); - istringstream bound_line(text_line); - - unsigned short VTK_Type; - bound_line >> VTK_Type; - - const auto nPointsElem = nPointsOfElementType(VTK_Type); - - if (dimension == 3 && VTK_Type == LINE) { - SU2_MPI::Error( - "Line boundary conditions are not possible for 3D calculations.\n" - "Please check the SU2 ASCII mesh file.", - CURRENT_FUNCTION); - } - - for (unsigned short i = 0; i < nPointsElem; i++) { - bound_line >> connectivity[i]; - } - - surfaceElementConnectivity[iMarker].push_back(0); - surfaceElementConnectivity[iMarker].push_back(VTK_Type); - for (unsigned short i = 0; i < N_POINTS_HEXAHEDRON; i++) { - surfaceElementConnectivity[iMarker].push_back(connectivity[i]); - } - - if (duplicate) { - for (unsigned short i = 0; i < nPointsElem; i++) { - if (ActDisk_Bool[connectivity[i]]) { - connectivity[i] = ActDiskPoint_Back[connectivity[i]]; - } - } - surfaceElementConnectivity[iMarker + 1].push_back(0); - surfaceElementConnectivity[iMarker + 1].push_back(VTK_Type); - for (unsigned short i = 0; i < N_POINTS_HEXAHEDRON; i++) { - surfaceElementConnectivity[iMarker + 1].push_back(connectivity[i]); - } - } - } - /*--- Increment the counter an extra time if we stored a duplicate. ---*/ - iMarker += duplicate; - } - break; - } - - if (rank != MASTER_NODE) return; - - /*--- Final error check for deprecated periodic BC format. ---*/ - - string text_line; - while (getline(mesh_file, text_line)) { - /*--- Find any periodic transformation information. ---*/ - - if (text_line.find("NPERIODIC=", 0) != string::npos) { - /*--- Read and store the number of transformations. ---*/ - text_line.erase(0, 10); - unsigned short nPeriodic = atoi(text_line.c_str()); - if (nPeriodic - 1 != 0) { - SU2_MPI::Error( - "Mesh file contains deprecated periodic format!\n\n" - "For SU2 v7.0.0 and later, preprocessing of periodic grids by SU2_MSH\n" - "is no longer necessary. Please use the original mesh file (prior to SU2_MSH)\n" - "with the same MARKER_PERIODIC definition in the configuration file.", - CURRENT_FUNCTION); - } - } - - /*--- Stop before we reach the next zone. ---*/ - if (text_line.find("IZONE=", 0) != string::npos) break; - } -} - -void CSU2ASCIIMeshReaderFVM::FastForwardToMyZone() { - /*--- If more than one, fast-forward to my zone in the mesh file. ---*/ - - if (nZones == 1 || !config->GetMultizone_Mesh()) return; - - string text_line; - while (getline(mesh_file, text_line)) { - /*--- Search for the current domain ---*/ - if (text_line.find("IZONE=", 0) == string::npos) continue; - text_line.erase(0, 6); - unsigned short jZone = atoi(text_line.c_str()); - if (jZone == myZone + 1) break; - } -} diff --git a/Common/src/geometry/meshreader/meson.build b/Common/src/geometry/meshreader/meson.build index 3f1e12595de8..543bdfcf97a7 100644 --- a/Common/src/geometry/meshreader/meson.build +++ b/Common/src/geometry/meshreader/meson.build @@ -1,5 +1,12 @@ -common_src += files(['CBoxMeshReaderFVM.cpp', +common_src += files(['CBoxMeshReaderFEM.cpp', + 'CBoxMeshReaderFVM.cpp', + 'CCGNSElementType.cpp', + 'CCGNSMeshReaderBase.cpp', + 'CCGNSMeshReaderFEM.cpp', 'CCGNSMeshReaderFVM.cpp', - 'CMeshReaderFVM.cpp', + 'CMeshReaderBase.cpp', + 'CRectangularMeshReaderFEM.cpp', 'CRectangularMeshReaderFVM.cpp', + 'CSU2ASCIIMeshReaderBase.cpp', + 'CSU2ASCIIMeshReaderFEM.cpp', 'CSU2ASCIIMeshReaderFVM.cpp']) diff --git a/Common/src/geometry/meson.build b/Common/src/geometry/meson.build index b67e2b986587..aeaabdb1a269 100644 --- a/Common/src/geometry/meson.build +++ b/Common/src/geometry/meson.build @@ -1,5 +1,6 @@ common_src += files(['CGeometry.cpp', 'CPhysicalGeometry.cpp', + 'CPhysicalGeometryFEM.cpp', 'CMultiGridGeometry.cpp', 'CDummyGeometry.cpp', 'CMultiGridQueue.cpp']) diff --git a/Common/src/geometry/primal_grid/CHexahedron.cpp b/Common/src/geometry/primal_grid/CHexahedron.cpp index 024da3dac1b8..7b4e3a306e22 100644 --- a/Common/src/geometry/primal_grid/CHexahedron.cpp +++ b/Common/src/geometry/primal_grid/CHexahedron.cpp @@ -2,14 +2,14 @@ * \file CHexahedron.cpp * \brief Main classes for defining the primal grid elements * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/geometry/primal_grid/CLine.cpp b/Common/src/geometry/primal_grid/CLine.cpp index 50d265dbbd81..4dd1fc036a7c 100644 --- a/Common/src/geometry/primal_grid/CLine.cpp +++ b/Common/src/geometry/primal_grid/CLine.cpp @@ -2,14 +2,14 @@ * \file CLine.cpp * \brief Main classes for defining the primal grid elements * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/geometry/primal_grid/CPrimalGrid.cpp b/Common/src/geometry/primal_grid/CPrimalGrid.cpp index f2eea19db9d0..5185a929e528 100644 --- a/Common/src/geometry/primal_grid/CPrimalGrid.cpp +++ b/Common/src/geometry/primal_grid/CPrimalGrid.cpp @@ -2,14 +2,14 @@ * \file CPrimalGrid.cpp * \brief Main classes for defining the primal grid elements * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/geometry/primal_grid/CPrimalGridBoundFEM.cpp b/Common/src/geometry/primal_grid/CPrimalGridBoundFEM.cpp index cebb3aa2ebf4..2da738048f5d 100644 --- a/Common/src/geometry/primal_grid/CPrimalGridBoundFEM.cpp +++ b/Common/src/geometry/primal_grid/CPrimalGridBoundFEM.cpp @@ -2,14 +2,14 @@ * \file CPrimalGridBoundFEM.cpp * \brief Main classes for defining the primal grid elements * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -27,27 +27,17 @@ #include "../../../include/geometry/primal_grid/CPrimalGridBoundFEM.hpp" -CPrimalGridBoundFEM::CPrimalGridBoundFEM(unsigned long val_elemGlobalID, unsigned long val_domainElementID, - unsigned short val_VTK_Type, unsigned short val_nPolyGrid, - unsigned short val_nDOFsGrid, std::vector& val_nodes) - : CPrimalGrid(true, val_nDOFsGrid, 1) { - /*--- Store the integer data in the member variables of this object. ---*/ - VTK_Type = val_VTK_Type; - - nPolyGrid = val_nPolyGrid; - nDOFsGrid = val_nDOFsGrid; - - boundElemIDGlobal = val_elemGlobalID; - GlobalIndex_DomainElement = val_domainElementID; - - /*--- Copy face structure of the element from val_nodes. ---*/ - - for (unsigned short i = 0; i < nDOFsGrid; i++) Nodes[i] = val_nodes[i]; - - /*--- For a linear quadrilateral the two last node numbers must be swapped, - such that the element numbering is consistent with the FEM solver. ---*/ - - if (nPolyGrid == 1 && VTK_Type == QUADRILATERAL) std::swap(Nodes[2], Nodes[3]); +CPrimalGridBoundFEM::CPrimalGridBoundFEM(const unsigned long* dataElem) : CPrimalGrid(true, dataElem[2], 1) { + /*--- Store the meta data for this element. ---*/ + VTK_Type = static_cast(dataElem[0]); + nPolyGrid = static_cast(dataElem[1]); + nDOFsGrid = static_cast(dataElem[2]); + boundElemIDGlobal = dataElem[3]; + GlobalIndex_DomainElement = dataElem[4]; + + /*--- Allocate the memory for the global nodes of the element to define + the geometry and copy them from val_nodes. ---*/ + for (unsigned short i = 0; i < nDOFsGrid; i++) Nodes[i] = dataElem[i + 5]; } void CPrimalGridBoundFEM::GetLocalCornerPointsFace(unsigned short elementType, unsigned short nPoly, diff --git a/Common/src/geometry/primal_grid/CPrimalGridFEM.cpp b/Common/src/geometry/primal_grid/CPrimalGridFEM.cpp index 1d1405ddbb83..ab184456dfa4 100644 --- a/Common/src/geometry/primal_grid/CPrimalGridFEM.cpp +++ b/Common/src/geometry/primal_grid/CPrimalGridFEM.cpp @@ -2,14 +2,14 @@ * \file CPrimalGridFEM.cpp * \brief Main classes for defining the primal grid elements * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -26,67 +26,27 @@ */ #include "../../../include/geometry/primal_grid/CPrimalGridFEM.hpp" +#include "../../../include/fem/fem_standard_element.hpp" -CPrimalGridFEM::CPrimalGridFEM(unsigned long val_elemGlobalID, unsigned short val_VTK_Type, - unsigned short val_nPolyGrid, unsigned short val_nPolySol, unsigned short val_nDOFsGrid, - unsigned short val_nDOFsSol, unsigned long val_offDOfsSol, std::istringstream& elem_line) - : CPrimalGrid(true, val_nDOFsGrid, nFacesOfElementType(val_VTK_Type)) { - /*--- Store the integer data in the member variables of this object. ---*/ - VTK_Type = val_VTK_Type; - nFaces = nFacesOfElementType(VTK_Type); - - nPolyGrid = val_nPolyGrid; - nPolySol = val_nPolySol; - nDOFsGrid = val_nDOFsGrid; - nDOFsSol = val_nDOFsSol; - - elemIDGlobal = val_elemGlobalID; - offsetDOFsSolGlobal = val_offDOfsSol; - - /*--- Read face structure of the element from elem_line. ---*/ - - for (unsigned short i = 0; i < nDOFsGrid; i++) elem_line >> Nodes[i]; - - /*--- If a linear element is used, the node numbering for non-simplices - must be adapted. The reason is that compatability with the original - SU2 format is maintained for linear elements, but for the FEM solver - the nodes of the elements are stored row-wise. ---*/ - if (nPolyGrid == 1) { - switch (VTK_Type) { - case QUADRILATERAL: - std::swap(Nodes[2], Nodes[3]); - break; +CPrimalGridFEM::CPrimalGridFEM(const unsigned long* dataElem, unsigned long& offsetSolDOFs) + : CPrimalGrid(true, dataElem[3], nFacesOfElementType(dataElem[0])) { + /*--- Store the meta data for this element. ---*/ + VTK_Type = static_cast(dataElem[0]); + nPolyGrid = static_cast(dataElem[1]); + nPolySol = static_cast(dataElem[2]); + nDOFsGrid = static_cast(dataElem[3]); + nDOFsSol = CFEMStandardElementBase::GetNDOFsStatic(VTK_Type, nPolySol); + elemIDGlobal = dataElem[4]; - case HEXAHEDRON: - std::swap(Nodes[2], Nodes[3]); - std::swap(Nodes[6], Nodes[7]); - break; + offsetDOFsSolGlobal = offsetSolDOFs; + offsetSolDOFs += nDOFsSol; - case PYRAMID: - std::swap(Nodes[2], Nodes[3]); - break; - } - } -} - -CPrimalGridFEM::CPrimalGridFEM(unsigned long val_elemGlobalID, unsigned short val_VTK_Type, - unsigned short val_nPolyGrid, unsigned short val_nPolySol, unsigned short val_nDOFsGrid, - unsigned short val_nDOFsSol, unsigned long val_offDOfsSol, const unsigned long* connGrid) - : CPrimalGrid(true, val_nDOFsGrid, nFacesOfElementType(val_VTK_Type)) { - /*--- Store the integer data in the member variables of this object. ---*/ - VTK_Type = val_VTK_Type; nFaces = nFacesOfElementType(VTK_Type); - nPolyGrid = val_nPolyGrid; - nPolySol = val_nPolySol; - nDOFsGrid = val_nDOFsGrid; - nDOFsSol = val_nDOFsSol; - - elemIDGlobal = val_elemGlobalID; - offsetDOFsSolGlobal = val_offDOfsSol; + /*--- Allocate the memory for the global nodes of the element to define + the geometry and copy the data from dataElem. ---*/ - /*--- Copy face structure of the element from connGrid. ---*/ - for (unsigned short i = 0; i < nDOFsGrid; i++) Nodes[i] = connGrid[i]; + for (unsigned short i = 0; i < nDOFsGrid; ++i) Nodes[i] = dataElem[i + 5]; } void CPrimalGridFEM::GetLocalCornerPointsAllFaces(unsigned short elementType, unsigned short nPoly, diff --git a/Common/src/geometry/primal_grid/CPrism.cpp b/Common/src/geometry/primal_grid/CPrism.cpp index 4480ad042275..fc714112bab9 100644 --- a/Common/src/geometry/primal_grid/CPrism.cpp +++ b/Common/src/geometry/primal_grid/CPrism.cpp @@ -2,14 +2,14 @@ * \file CPrism.cpp * \brief Main classes for defining the primal grid elements * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/geometry/primal_grid/CPyramid.cpp b/Common/src/geometry/primal_grid/CPyramid.cpp index 56bb3c03ec2b..869d282f059b 100644 --- a/Common/src/geometry/primal_grid/CPyramid.cpp +++ b/Common/src/geometry/primal_grid/CPyramid.cpp @@ -2,14 +2,14 @@ * \file CPyramid.cpp * \brief Main classes for defining the primal grid elements * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/geometry/primal_grid/CQuadrilateral.cpp b/Common/src/geometry/primal_grid/CQuadrilateral.cpp index 40a4eaa17775..4ca1ca712a9f 100644 --- a/Common/src/geometry/primal_grid/CQuadrilateral.cpp +++ b/Common/src/geometry/primal_grid/CQuadrilateral.cpp @@ -2,14 +2,14 @@ * \file CQuadrilateral.cpp * \brief Main classes for defining the primal grid elements * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/geometry/primal_grid/CTetrahedron.cpp b/Common/src/geometry/primal_grid/CTetrahedron.cpp index 5e7ca71f484d..63e2ddc34f23 100644 --- a/Common/src/geometry/primal_grid/CTetrahedron.cpp +++ b/Common/src/geometry/primal_grid/CTetrahedron.cpp @@ -2,14 +2,14 @@ * \file CTetrahedron.cpp * \brief Main classes for defining the primal grid elements * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/geometry/primal_grid/CTriangle.cpp b/Common/src/geometry/primal_grid/CTriangle.cpp index 585ba1a2e9d5..af29a3292757 100644 --- a/Common/src/geometry/primal_grid/CTriangle.cpp +++ b/Common/src/geometry/primal_grid/CTriangle.cpp @@ -2,14 +2,14 @@ * \file CTriangle.cpp * \brief Main classes for defining the primal grid elements * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/geometry/primal_grid/CVertexMPI.cpp b/Common/src/geometry/primal_grid/CVertexMPI.cpp index 37b66e400fd5..96d171956f68 100644 --- a/Common/src/geometry/primal_grid/CVertexMPI.cpp +++ b/Common/src/geometry/primal_grid/CVertexMPI.cpp @@ -2,14 +2,14 @@ * \file CVertexMPI.cpp * \brief Main classes for defining the primal grid elements * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/graph_coloring_structure.cpp b/Common/src/graph_coloring_structure.cpp index 2e8b88a9c909..b44ff1947a13 100644 --- a/Common/src/graph_coloring_structure.cpp +++ b/Common/src/graph_coloring_structure.cpp @@ -2,14 +2,14 @@ * \file graph_coloring_structure.cpp * \brief Functions used to carry out the coloring of a given graph. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/grid_movement/CBSplineBlending.cpp b/Common/src/grid_movement/CBSplineBlending.cpp index f86d757ae10b..ad4e8d60f3e7 100644 --- a/Common/src/grid_movement/CBSplineBlending.cpp +++ b/Common/src/grid_movement/CBSplineBlending.cpp @@ -2,14 +2,14 @@ * \file CBSplineBlending.cpp * \brief Subroutines for B-Spline blening for FFDs * \author F. Palacios, T. Economon, S. Padron - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/grid_movement/CBezierBlending.cpp b/Common/src/grid_movement/CBezierBlending.cpp index c4bca57fc197..63a6ec3e4241 100644 --- a/Common/src/grid_movement/CBezierBlending.cpp +++ b/Common/src/grid_movement/CBezierBlending.cpp @@ -2,14 +2,14 @@ * \file CBezierBlending.cpp * \brief Subroutines for Bezier blending for FFDs * \author F. Palacios, T. Economon, S. Padron - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/grid_movement/CFreeFormBlending.cpp b/Common/src/grid_movement/CFreeFormBlending.cpp index bb678e0bc7ec..ac3d2a8b8a81 100644 --- a/Common/src/grid_movement/CFreeFormBlending.cpp +++ b/Common/src/grid_movement/CFreeFormBlending.cpp @@ -2,14 +2,14 @@ * \file CFreeFormBlending.cpp * \brief Parent class for FFD Blending functions * \author F. Palacios, T. Economon, S. Padron - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/grid_movement/CFreeFormDefBox.cpp b/Common/src/grid_movement/CFreeFormDefBox.cpp index 8f9cad34bce5..2befb7429aa0 100644 --- a/Common/src/grid_movement/CFreeFormDefBox.cpp +++ b/Common/src/grid_movement/CFreeFormDefBox.cpp @@ -2,14 +2,14 @@ * \file CFreeFormDefBox.cpp * \brief Subroutines for handling Free-Form Deformation Boxes * \author F. Palacios, T. Economon, S. Padron - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/grid_movement/CGridMovement.cpp b/Common/src/grid_movement/CGridMovement.cpp index 76dedec7abf9..375678cc3fe6 100644 --- a/Common/src/grid_movement/CGridMovement.cpp +++ b/Common/src/grid_movement/CGridMovement.cpp @@ -2,14 +2,14 @@ * \file CGridMovement.cpp * \brief Parent class for grid movement classes * \author F. Palacios, T. Economon, S. Padron - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/grid_movement/CSurfaceMovement.cpp b/Common/src/grid_movement/CSurfaceMovement.cpp index a349c6f103d6..05dce01fce9e 100644 --- a/Common/src/grid_movement/CSurfaceMovement.cpp +++ b/Common/src/grid_movement/CSurfaceMovement.cpp @@ -2,14 +2,14 @@ * \file CSurfaceMovement.cpp * \brief Subroutines for moving mesh surface elements * \author F. Palacios, T. Economon, S. Padron - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/grid_movement/CVolumetricMovement.cpp b/Common/src/grid_movement/CVolumetricMovement.cpp index 7a60d2f81ec8..bcf4a25aa244 100644 --- a/Common/src/grid_movement/CVolumetricMovement.cpp +++ b/Common/src/grid_movement/CVolumetricMovement.cpp @@ -2,14 +2,14 @@ * \file CVolumetricMovement.cpp * \brief Subroutines for moving mesh volume elements * \author F. Palacios, T. Economon, S. Padron - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/interface_interpolation/CInterpolator.cpp b/Common/src/interface_interpolation/CInterpolator.cpp index f8eb835b6b90..64feb50ab7d1 100644 --- a/Common/src/interface_interpolation/CInterpolator.cpp +++ b/Common/src/interface_interpolation/CInterpolator.cpp @@ -2,14 +2,14 @@ * \file CInterpolator.cpp * \brief Definition of the base class for interface interpolation. * \author H. Kline - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/interface_interpolation/CInterpolatorFactory.cpp b/Common/src/interface_interpolation/CInterpolatorFactory.cpp index 186ed038baed..0141631c8ea1 100644 --- a/Common/src/interface_interpolation/CInterpolatorFactory.cpp +++ b/Common/src/interface_interpolation/CInterpolatorFactory.cpp @@ -1,14 +1,14 @@ /*! * \file CInterpolatorFactory.cpp * \brief Factory to generate interpolator objects. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/interface_interpolation/CIsoparametric.cpp b/Common/src/interface_interpolation/CIsoparametric.cpp index f1d15deb00c0..aa69c68e713f 100644 --- a/Common/src/interface_interpolation/CIsoparametric.cpp +++ b/Common/src/interface_interpolation/CIsoparametric.cpp @@ -2,14 +2,14 @@ * \file CIsoparametric.cpp * \brief Implementation isoparametric interpolation (using FE shape functions). * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/interface_interpolation/CMirror.cpp b/Common/src/interface_interpolation/CMirror.cpp index 007a657c5a9d..2cd96e45739d 100644 --- a/Common/src/interface_interpolation/CMirror.cpp +++ b/Common/src/interface_interpolation/CMirror.cpp @@ -2,14 +2,14 @@ * \file CMirror.cpp * \brief Implementation of mirror interpolation (conservative approach in FSI problems). * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/interface_interpolation/CNearestNeighbor.cpp b/Common/src/interface_interpolation/CNearestNeighbor.cpp index 1f9ac4af72e4..3e4d2c116d85 100644 --- a/Common/src/interface_interpolation/CNearestNeighbor.cpp +++ b/Common/src/interface_interpolation/CNearestNeighbor.cpp @@ -2,14 +2,14 @@ * \file CNearestNeighbor.cpp * \brief Implementation of nearest neighbor interpolation. * \author H. Kline - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/interface_interpolation/CRadialBasisFunction.cpp b/Common/src/interface_interpolation/CRadialBasisFunction.cpp index 84348fda30a4..9056cf406535 100644 --- a/Common/src/interface_interpolation/CRadialBasisFunction.cpp +++ b/Common/src/interface_interpolation/CRadialBasisFunction.cpp @@ -2,14 +2,14 @@ * \file CRadialBasisFunction.cpp * \brief Implementation of RBF interpolation. * \author Joel Ho, P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/interface_interpolation/CSlidingMesh.cpp b/Common/src/interface_interpolation/CSlidingMesh.cpp index 01d4d156fa9f..d98c50da3349 100644 --- a/Common/src/interface_interpolation/CSlidingMesh.cpp +++ b/Common/src/interface_interpolation/CSlidingMesh.cpp @@ -2,14 +2,14 @@ * \file CSlidingMesh.cpp * \brief Implementation of sliding mesh interpolation. * \author H. Kline - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/linear_algebra/CPastixWrapper.cpp b/Common/src/linear_algebra/CPastixWrapper.cpp index a2a65d11d6e0..7f527fc6bad7 100644 --- a/Common/src/linear_algebra/CPastixWrapper.cpp +++ b/Common/src/linear_algebra/CPastixWrapper.cpp @@ -3,14 +3,14 @@ * \brief An interface to the INRIA solver PaStiX * (http://pastix.gforge.inria.fr/files/README-txt.html) * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/linear_algebra/CSysMatrix.cpp b/Common/src/linear_algebra/CSysMatrix.cpp index 4196f638678c..92de9e3d704b 100644 --- a/Common/src/linear_algebra/CSysMatrix.cpp +++ b/Common/src/linear_algebra/CSysMatrix.cpp @@ -2,14 +2,14 @@ * \file CSysMatrix.cpp * \brief Implementation of the sparse matrix class. * \author F. Palacios, A. Bueno, T. Economon, P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -1027,36 +1027,59 @@ void CSysMatrix::EnforceSolutionAtNode(const unsigned long node_i, c template template -void CSysMatrix::EnforceSolutionAtDOF(unsigned long node_i, unsigned long iVar, OtherType x_i, - CSysVector& b) { +void CSysMatrix::EnforceZeroProjection(unsigned long node_i, const OtherType* n, CSysVector& b) { for (auto index = row_ptr[node_i]; index < row_ptr[node_i + 1]; ++index) { const auto node_j = col_ind[index]; - /*--- Delete row iVar of block j on row i (bij) and ATTEMPT - * to delete column iVar block i on row j (bji). ---*/ + /*--- Remove product components of block j on row i (bij) and ATTEMPT + * to remove solution components of block i on row j (bji). + * This is identical to symmetry correction applied to gradients + * but extended to the entire matrix. ---*/ auto bij = &matrix[index * nVar * nVar]; auto bji = GetBlock(node_j, node_i); - /*--- The "attempt" part. ---*/ + /*--- Attempt to remove solution components. ---*/ + ScalarType nbn{}; if (bji != nullptr) { - for (auto jVar = 0ul; jVar < nVar; ++jVar) { - /*--- Column product. ---*/ - b[node_j * nVar + jVar] -= bji[jVar * nVar + iVar] * x_i; - /*--- Delete entries. ---*/ - bji[jVar * nVar + iVar] = 0.0; + for (auto iVar = 0ul; iVar < nVar; ++iVar) { + ScalarType proj{}; + for (auto jVar = 0ul; jVar < nVar; ++jVar) { + proj += bji[iVar * nVar + jVar] * PassiveAssign(n[jVar]); + } + for (auto jVar = 0ul; jVar < nVar; ++jVar) { + bji[iVar * nVar + jVar] -= proj * PassiveAssign(n[jVar]); + } + nbn += proj * PassiveAssign(n[iVar]); } } - /*--- Delete row. ---*/ - for (auto jVar = 0ul; jVar < nVar; ++jVar) bij[iVar * nVar + jVar] = 0.0; + /*--- Product components. ---*/ + for (auto jVar = 0ul; jVar < nVar; ++jVar) { + ScalarType proj{}; + for (auto iVar = 0ul; iVar < nVar; ++iVar) { + proj += bij[iVar * nVar + jVar] * PassiveAssign(n[iVar]); + } + for (auto iVar = 0ul; iVar < nVar; ++iVar) { + bij[iVar * nVar + jVar] -= proj * PassiveAssign(n[iVar]); + } + } - /*--- Set the diagonal entry of the block to 1. ---*/ - if (node_j == node_i) bij[iVar * (nVar + 1)] = 1.0; + /*--- This part doesn't have the "*2" factor because the product components + * were removed from the result of removing the solution components + * instead of from the original block (bji == bij). ---*/ + if (node_i == node_j) { + for (auto iVar = 0ul; iVar < nVar; ++iVar) { + for (auto jVar = 0ul; jVar < nVar; ++jVar) { + bij[iVar * nVar + jVar] += PassiveAssign(n[iVar]) * nbn * PassiveAssign(n[jVar]); + } + } + } } - /*--- Set known solution in rhs vector. ---*/ - b(node_i, iVar) = x_i; + OtherType proj{}; + for (auto iVar = 0ul; iVar < nVar; ++iVar) proj += b(node_i, iVar) * n[iVar]; + for (auto iVar = 0ul; iVar < nVar; ++iVar) b(node_i, iVar) -= proj * n[iVar]; } template @@ -1203,8 +1226,7 @@ void CSysMatrix::ComputePastixPreconditioner(const CSysVector; \ template void CSysMatrix::EnforceSolutionAtNode(unsigned long, const su2double*, CSysVector&); \ - template void CSysMatrix::EnforceSolutionAtDOF(unsigned long, unsigned long, su2double, \ - CSysVector&); \ + template void CSysMatrix::EnforceZeroProjection(unsigned long, const su2double*, CSysVector&); \ INSTANTIATE_COMMS(TYPE) #ifdef CODI_FORWARD_TYPE diff --git a/Common/src/linear_algebra/CSysSolve.cpp b/Common/src/linear_algebra/CSysSolve.cpp index be5307f2b0e3..329c2514e69e 100644 --- a/Common/src/linear_algebra/CSysSolve.cpp +++ b/Common/src/linear_algebra/CSysSolve.cpp @@ -2,14 +2,14 @@ * \file CSysSolve.cpp * \brief Main classes required for solving linear systems of equations * \author J. Hicken, F. Palacios, T. Economon, P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/linear_algebra/CSysSolve_b.cpp b/Common/src/linear_algebra/CSysSolve_b.cpp index 7b63e06a9533..75649c23218c 100644 --- a/Common/src/linear_algebra/CSysSolve_b.cpp +++ b/Common/src/linear_algebra/CSysSolve_b.cpp @@ -2,14 +2,14 @@ * \file CSysSolve_b.cpp * \brief Routines for the linear solver used in the reverse sweep of AD. * \author T. Albring, J. Blühdorn - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/linear_algebra/CSysVector.cpp b/Common/src/linear_algebra/CSysVector.cpp index ac5687869076..a2853a23cd6f 100644 --- a/Common/src/linear_algebra/CSysVector.cpp +++ b/Common/src/linear_algebra/CSysVector.cpp @@ -2,14 +2,14 @@ * \file CSysVector.cpp * \brief Implementation and explicit instantiations of CSysVector. * \author P. Gomes, F. Palacios, J. Hicken, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/linear_algebra/blas_structure.cpp b/Common/src/linear_algebra/blas_structure.cpp index 6548888bba96..2a5daf930142 100644 --- a/Common/src/linear_algebra/blas_structure.cpp +++ b/Common/src/linear_algebra/blas_structure.cpp @@ -3,14 +3,14 @@ * \brief Implementation of the functions that either simulate BLAS functionality or interface to an actual BLAS implementation. * \author E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -43,8 +43,7 @@ extern "C" void dgemv_(char*, const int*, const int*, const passivedouble*, cons /* Constructor. Initialize the const member variables, if needed. */ CBlasStructure::CBlasStructure() -#if !(defined(HAVE_LIBXSMM) || defined(HAVE_BLAS) || defined(HAVE_MKL)) || \ - (defined(CODI_REVERSE_TYPE) || defined(CODI_FORWARD_TYPE)) +#if !(defined(HAVE_BLAS) || defined(HAVE_MKL)) || (defined(CODI_REVERSE_TYPE) || defined(CODI_FORWARD_TYPE)) : mc(256), kc(128), nc(128) @@ -61,38 +60,25 @@ void CBlasStructure::gemm(const int M, const int N, const int K, const su2double if (config) config->GEMM_Tick(&timeGemm); #endif -#if (defined(CODI_REVERSE_TYPE) || defined(CODI_FORWARD_TYPE)) || \ - !(defined(HAVE_LIBXSMM) || defined(HAVE_MKL) || defined(HAVE_BLAS)) +#if (defined(CODI_REVERSE_TYPE) || defined(CODI_FORWARD_TYPE)) || !(defined(HAVE_MKL) || defined(HAVE_BLAS)) /* Native implementation of the matrix product. This optimized implementation assumes that the matrices are in column major order. This can be accomplished by swapping N and M and A and B. This implementation is based on https://github.com/flame/how-to-optimize-gemm. */ gemm_imp(N, M, K, B, A, C); -#else -#ifdef HAVE_LIBXSMM - - /* The gemm function of libxsmm is used to carry out the multiplication. - Note that libxsmm_gemm expects the matrices in column major order. That's - why the in the calling sequence A and B and M and N are reversed. */ - su2double alpha = 1.0; - su2double beta = 0.0; - char trans = 'N'; - - libxsmm_dgemm(&trans, &trans, &N, &M, &K, &alpha, B, &N, A, &K, &beta, C, &N); - #else // MKL and BLAS /* The standard blas routine dgemm is used for the multiplication. Call dgemm without transposing the matrices. In that case dgemm expects - the matrices in column major order, see the comments for libxsmm. */ + the matrices in column major order. That's why the in the calling + sequence A and B and M and N are reversed. */ su2double alpha = 1.0; su2double beta = 0.0; char trans = 'N'; dgemm_(&trans, &trans, &N, &M, &K, &alpha, B, &N, A, &K, &beta, C, &N); -#endif #endif /* Store the profiling information, if needed. */ @@ -131,8 +117,7 @@ void CBlasStructure::gemv(const int M, const int N, const su2double* A, const su #endif } -#if !(defined(HAVE_LIBXSMM) || defined(HAVE_BLAS) || defined(HAVE_MKL)) || \ - (defined(CODI_REVERSE_TYPE) || defined(CODI_FORWARD_TYPE)) +#if !(defined(HAVE_BLAS) || defined(HAVE_MKL)) || (defined(CODI_REVERSE_TYPE) || defined(CODI_FORWARD_TYPE)) /* Macros for accessing submatrices of a matmul using the leading dimension. */ #define A(i, j) a[(j)*lda + (i)] diff --git a/Common/src/toolboxes/C1DInterpolation.cpp b/Common/src/toolboxes/C1DInterpolation.cpp index 0282f6287914..be4106e47daf 100644 --- a/Common/src/toolboxes/C1DInterpolation.cpp +++ b/Common/src/toolboxes/C1DInterpolation.cpp @@ -2,14 +2,14 @@ * \file C1DInterpolation.cpp * \brief Classes for 1D interpolation. * \author Aman Baig, P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/toolboxes/CLinearPartitioner.cpp b/Common/src/toolboxes/CLinearPartitioner.cpp index f663e3e5ef53..dab197b37b41 100644 --- a/Common/src/toolboxes/CLinearPartitioner.cpp +++ b/Common/src/toolboxes/CLinearPartitioner.cpp @@ -3,14 +3,14 @@ * \brief Helper class that provides the counts for each rank in a linear * partitioning given the global count as input. * \author T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/toolboxes/CSquareMatrixCM.cpp b/Common/src/toolboxes/CSquareMatrixCM.cpp index aa9384c9a6b1..66920a3550e4 100644 --- a/Common/src/toolboxes/CSquareMatrixCM.cpp +++ b/Common/src/toolboxes/CSquareMatrixCM.cpp @@ -2,14 +2,14 @@ * \file CSquareMatrixCM.cpp * \brief Implementation of dense matrix helper class in Column Major order (see hpp). * \author Edwin van der Weide, Pedro Gomes. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/toolboxes/CSymmetricMatrix.cpp b/Common/src/toolboxes/CSymmetricMatrix.cpp index a75773001092..2f1107a0665a 100644 --- a/Common/src/toolboxes/CSymmetricMatrix.cpp +++ b/Common/src/toolboxes/CSymmetricMatrix.cpp @@ -2,14 +2,14 @@ * \file CSymmetricMatrix.cpp * \brief Implementation of dense symmetric matrix helper class (see hpp). * \author Joel Ho, P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/toolboxes/MMS/CIncTGVSolution.cpp b/Common/src/toolboxes/MMS/CIncTGVSolution.cpp index 04304ed8df59..bbc9a0ee90f3 100644 --- a/Common/src/toolboxes/MMS/CIncTGVSolution.cpp +++ b/Common/src/toolboxes/MMS/CIncTGVSolution.cpp @@ -2,14 +2,14 @@ * \file CIncTGVSolution.cpp * \brief Implementations of the member functions of CIncTGVSolution. * \author T. Economon, E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/toolboxes/MMS/CInviscidVortexSolution.cpp b/Common/src/toolboxes/MMS/CInviscidVortexSolution.cpp index bd746837b0f9..bfffb7a44fd9 100644 --- a/Common/src/toolboxes/MMS/CInviscidVortexSolution.cpp +++ b/Common/src/toolboxes/MMS/CInviscidVortexSolution.cpp @@ -2,14 +2,14 @@ * \file CInviscidVortexSolution.cpp * \brief Implementations of the member functions of CInviscidVortexSolution. * \author T. Economon, E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/toolboxes/MMS/CMMSIncEulerSolution.cpp b/Common/src/toolboxes/MMS/CMMSIncEulerSolution.cpp index 18081082d0ae..1bf088669dfe 100644 --- a/Common/src/toolboxes/MMS/CMMSIncEulerSolution.cpp +++ b/Common/src/toolboxes/MMS/CMMSIncEulerSolution.cpp @@ -2,14 +2,14 @@ * \file CMMSIncEulerSolution.cpp * \brief Implementations of the member functions of CMMSIncEulerSolution. * \author T. Economon, E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/toolboxes/MMS/CMMSIncNSSolution.cpp b/Common/src/toolboxes/MMS/CMMSIncNSSolution.cpp index 171afbc52d2e..67707189fc73 100644 --- a/Common/src/toolboxes/MMS/CMMSIncNSSolution.cpp +++ b/Common/src/toolboxes/MMS/CMMSIncNSSolution.cpp @@ -2,14 +2,14 @@ * \file CMMSIncNSSolution.cpp * \brief Implementations of the member functions of CMMSIncNSSolution. * \author T. Economon, E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/toolboxes/MMS/CMMSNSTwoHalfCirclesSolution.cpp b/Common/src/toolboxes/MMS/CMMSNSTwoHalfCirclesSolution.cpp index 9bb4611dcfb3..f36fe2f570c5 100644 --- a/Common/src/toolboxes/MMS/CMMSNSTwoHalfCirclesSolution.cpp +++ b/Common/src/toolboxes/MMS/CMMSNSTwoHalfCirclesSolution.cpp @@ -2,14 +2,14 @@ * \file CMMSNSTwoHalfCirclesSolution.cpp * \brief Implementations of the member functions of CMMSNSTwoHalfCirclesSolution. * \author T. Economon, E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/toolboxes/MMS/CMMSNSTwoHalfSpheresSolution.cpp b/Common/src/toolboxes/MMS/CMMSNSTwoHalfSpheresSolution.cpp index aa534eb36002..6461f79639ed 100644 --- a/Common/src/toolboxes/MMS/CMMSNSTwoHalfSpheresSolution.cpp +++ b/Common/src/toolboxes/MMS/CMMSNSTwoHalfSpheresSolution.cpp @@ -2,14 +2,14 @@ * \file CMMSNSTwoHalfSpheresSolution.cpp * \brief Implementations of the member functions of CMMSNSTwoHalfSpheresSolution. * \author T. Economon, E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/toolboxes/MMS/CMMSNSUnitQuadSolution.cpp b/Common/src/toolboxes/MMS/CMMSNSUnitQuadSolution.cpp index fd9e8722ce80..f8ffad99b1f6 100644 --- a/Common/src/toolboxes/MMS/CMMSNSUnitQuadSolution.cpp +++ b/Common/src/toolboxes/MMS/CMMSNSUnitQuadSolution.cpp @@ -2,14 +2,14 @@ * \file CMMSNSUnitQuadSolution.cpp * \brief Implementations of the member functions of CMMSNSUnitQuadSolution. * \author T. Economon, E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/toolboxes/MMS/CMMSNSUnitQuadSolutionWallBC.cpp b/Common/src/toolboxes/MMS/CMMSNSUnitQuadSolutionWallBC.cpp index f57b238ba21a..d4a0e563120f 100644 --- a/Common/src/toolboxes/MMS/CMMSNSUnitQuadSolutionWallBC.cpp +++ b/Common/src/toolboxes/MMS/CMMSNSUnitQuadSolutionWallBC.cpp @@ -2,14 +2,14 @@ * \file CMMSNSUnitQuadSolutionWallBC.cpp * \brief Implementations of the member functions of CMMSNSUnitQuadSolutionWallBC. * \author T. Economon, E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/toolboxes/MMS/CNSUnitQuadSolution.cpp b/Common/src/toolboxes/MMS/CNSUnitQuadSolution.cpp index f65a0cbac443..a317bee5270b 100644 --- a/Common/src/toolboxes/MMS/CNSUnitQuadSolution.cpp +++ b/Common/src/toolboxes/MMS/CNSUnitQuadSolution.cpp @@ -2,14 +2,14 @@ * \file CNSUnitQuadSolution.cpp * \brief Implementations of the member functions of CNSUnitQuadSolution. * \author T. Economon, E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/toolboxes/MMS/CRinglebSolution.cpp b/Common/src/toolboxes/MMS/CRinglebSolution.cpp index f42ac0a3cd1e..c21012813c83 100644 --- a/Common/src/toolboxes/MMS/CRinglebSolution.cpp +++ b/Common/src/toolboxes/MMS/CRinglebSolution.cpp @@ -2,14 +2,14 @@ * \file CRinglebSolution.cpp * \brief Implementations of the member functions of CRinglebSolution. * \author T. Economon, E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/toolboxes/MMS/CTGVSolution.cpp b/Common/src/toolboxes/MMS/CTGVSolution.cpp index 830a6dd998d2..6ecda581e2ad 100644 --- a/Common/src/toolboxes/MMS/CTGVSolution.cpp +++ b/Common/src/toolboxes/MMS/CTGVSolution.cpp @@ -2,14 +2,14 @@ * \file CTGVSolution.cpp * \brief Implementations of the member functions of CTGVSolution. * \author T. Economon, E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/toolboxes/MMS/CUserDefinedSolution.cpp b/Common/src/toolboxes/MMS/CUserDefinedSolution.cpp index a113de21da75..0fe17b4e0b0d 100644 --- a/Common/src/toolboxes/MMS/CUserDefinedSolution.cpp +++ b/Common/src/toolboxes/MMS/CUserDefinedSolution.cpp @@ -2,14 +2,14 @@ * \file CUserDefinedSolution.cpp * \brief Implementations of the member functions of CUserDefinedSolution. * \author T. Economon, E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/toolboxes/MMS/CVerificationSolution.cpp b/Common/src/toolboxes/MMS/CVerificationSolution.cpp index 617160e8e558..6fe58dfa52df 100644 --- a/Common/src/toolboxes/MMS/CVerificationSolution.cpp +++ b/Common/src/toolboxes/MMS/CVerificationSolution.cpp @@ -2,14 +2,14 @@ * \file CVerificationSolution.cpp * \brief Implementations of the member functions of CVerificationSolution. * \author T. Economon, E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/toolboxes/MMS/CreateMMSSourceTerms/CMMSIncEulerSolution.py b/Common/src/toolboxes/MMS/CreateMMSSourceTerms/CMMSIncEulerSolution.py index 0750bf901d0a..0c70fae24f97 100755 --- a/Common/src/toolboxes/MMS/CreateMMSSourceTerms/CMMSIncEulerSolution.py +++ b/Common/src/toolboxes/MMS/CreateMMSSourceTerms/CMMSIncEulerSolution.py @@ -4,14 +4,14 @@ # \brief Python script that generates the source terms for a # manufactured solution for the incompressible Euler eqns. # \author T. Economon -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/Common/src/toolboxes/MMS/CreateMMSSourceTerms/CMMSIncNSSolution.py b/Common/src/toolboxes/MMS/CreateMMSSourceTerms/CMMSIncNSSolution.py index 39d42a639347..06ba74bd3458 100755 --- a/Common/src/toolboxes/MMS/CreateMMSSourceTerms/CMMSIncNSSolution.py +++ b/Common/src/toolboxes/MMS/CreateMMSSourceTerms/CMMSIncNSSolution.py @@ -4,14 +4,14 @@ # \brief Python script that generates the source terms for a # manufactured solution for the incompressible Navier-Stokes eqns. # \author T. Economon -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/Common/src/toolboxes/fem/CFaceOfElement.cpp b/Common/src/toolboxes/fem/CFaceOfElement.cpp new file mode 100644 index 000000000000..f84fb9a967fc --- /dev/null +++ b/Common/src/toolboxes/fem/CFaceOfElement.cpp @@ -0,0 +1,243 @@ +/*! + * \file CFaceOfElement.cpp + * \brief Helper class used in distributing the surface elements and + * creating the surface elements for the DG solver. + * \author E. van der Weide + * \version 8.2.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2025, 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/toolboxes/fem/CFaceOfElement.hpp" + +CFaceOfElement::CFaceOfElement() { + nCornerPoints = 0; + cornerPoints[0] = cornerPoints[1] = cornerPoints[2] = cornerPoints[3] = ULONG_MAX; + elemID0 = elemID1 = ULONG_MAX; + nPolyGrid0 = nPolyGrid1 = 0; + nPolySol0 = nPolySol1 = 0; + nDOFsElem0 = nDOFsElem1 = 0; + elemType0 = elemType1 = 0; + faceID0 = faceID1 = 0; + periodicIndex = periodicIndexDonor = 0; + faceIndicator = 0; + + JacFaceIsConsideredConstant = false; + elem0IsOwner = false; +} + +CFaceOfElement::CFaceOfElement(const unsigned short VTK_Type, const unsigned short nPoly, const unsigned long* Nodes) { + /* Set the default values of the member variables. */ + nCornerPoints = 0; + cornerPoints[0] = cornerPoints[1] = cornerPoints[2] = cornerPoints[3] = ULONG_MAX; + elemID0 = elemID1 = ULONG_MAX; + nPolyGrid0 = nPolyGrid1 = 0; + nPolySol0 = nPolySol1 = 0; + nDOFsElem0 = nDOFsElem1 = 0; + elemType0 = elemType1 = 0; + faceID0 = faceID1 = 0; + periodicIndex = periodicIndexDonor = 0; + faceIndicator = 0; + + JacFaceIsConsideredConstant = false; + elem0IsOwner = false; + + /* Determine the face element type and set the corner points accordingly. */ + switch (VTK_Type) { + case LINE: { + nCornerPoints = 2; + cornerPoints[0] = Nodes[0]; + cornerPoints[1] = Nodes[nPoly]; + break; + } + + case TRIANGLE: { + const unsigned short ind2 = (nPoly + 1) * (nPoly + 2) / 2 - 1; + nCornerPoints = 3; + cornerPoints[0] = Nodes[0]; + cornerPoints[1] = Nodes[nPoly]; + cornerPoints[2] = Nodes[ind2]; + break; + } + + case QUADRILATERAL: { + const unsigned short ind2 = nPoly * (nPoly + 1); + const unsigned short ind3 = (nPoly + 1) * (nPoly + 1) - 1; + nCornerPoints = 4; + cornerPoints[0] = Nodes[0]; + cornerPoints[1] = Nodes[nPoly]; + cornerPoints[2] = Nodes[ind2]; + cornerPoints[3] = Nodes[ind3]; + break; + } + + default: { + std::ostringstream message; + message << "Unknown VTK surface element type, " << VTK_Type; + SU2_MPI::Error(message.str(), CURRENT_FUNCTION); + } + } +} + +bool CFaceOfElement::operator<(const CFaceOfElement& other) const { + if (nCornerPoints != other.nCornerPoints) return nCornerPoints < other.nCornerPoints; + + for (unsigned short i = 0; i < nCornerPoints; ++i) + if (cornerPoints[i] != other.cornerPoints[i]) return cornerPoints[i] < other.cornerPoints[i]; + + return false; +} + +bool CFaceOfElement::operator==(const CFaceOfElement& other) const { + if (nCornerPoints != other.nCornerPoints) return false; + for (unsigned short i = 0; i < nCornerPoints; ++i) + if (cornerPoints[i] != other.cornerPoints[i]) return false; + + return true; +} + +void CFaceOfElement::Copy(const CFaceOfElement& other) { + nCornerPoints = other.nCornerPoints; + for (unsigned short i = 0; i < nCornerPoints; ++i) cornerPoints[i] = other.cornerPoints[i]; + for (unsigned short i = nCornerPoints; i < 4; ++i) cornerPoints[i] = ULONG_MAX; + + elemID0 = other.elemID0; + elemID1 = other.elemID1; + + nPolyGrid0 = other.nPolyGrid0; + nPolyGrid1 = other.nPolyGrid1; + nPolySol0 = other.nPolySol0; + nPolySol1 = other.nPolySol1; + + nDOFsElem0 = other.nDOFsElem0; + nDOFsElem1 = other.nDOFsElem1; + elemType0 = other.elemType0; + elemType1 = other.elemType1; + faceID0 = other.faceID0; + faceID1 = other.faceID1; + + periodicIndex = other.periodicIndex; + periodicIndexDonor = other.periodicIndexDonor; + faceIndicator = other.faceIndicator; + + JacFaceIsConsideredConstant = other.JacFaceIsConsideredConstant; + elem0IsOwner = other.elem0IsOwner; +} + +void CFaceOfElement::CreateUniqueNumberingWithOrientation() { + /*--- Determine the element type and create the unique numbering accordingly. ---*/ + bool swapElements = false; + switch (nCornerPoints) { + case 2: { + /* Element is a line. Check if the node numbering must be swapped. If so + also the element information must be swapped, because element 0 is to + the left of the face and element 1 to the right. */ + if (cornerPoints[1] < cornerPoints[0]) { + std::swap(cornerPoints[0], cornerPoints[1]); + swapElements = true; + } + break; + } + + case 3: { + /* Element is a triangle. The vertices are sorted in increasing order. + If the sequence of the new numbering is opposite to the current + numbering, the element information must be exchanged, because + element 0 is to the left of the face and element 1 to the right. */ + unsigned long nn[] = {cornerPoints[0], cornerPoints[1], cornerPoints[2]}; + unsigned short ind = 0; + if (nn[1] < nn[ind]) ind = 1; + if (nn[2] < nn[ind]) ind = 2; + + unsigned short indm1 = ind == 0 ? 2 : ind - 1; // Next lower index. + unsigned short indp1 = ind == 2 ? 0 : ind + 1; // Next upper index. + + if (nn[indp1] < nn[indm1]) { + /* The orientation of the triangle remains the same. + Store the new sorted node numbering. */ + cornerPoints[0] = nn[ind]; + cornerPoints[1] = nn[indp1]; + cornerPoints[2] = nn[indm1]; + } else { + /* The orientation of the triangle changes. Store the new + sorted node numbering and set swapElements to true. */ + cornerPoints[0] = nn[ind]; + cornerPoints[1] = nn[indm1]; + cornerPoints[2] = nn[indp1]; + swapElements = true; + } + + break; + } + + case 4: { + /* Element is a quadrilateral. The vertices are sorted in increasing order + under the condition neighboring vertices remain neighbors. If the + sequence of the new numbering is opposite to the current + numbering, the element information must be exchanged, because + element 0 is to the left of the face and element 1 to the right. */ + unsigned long nn[] = {cornerPoints[0], cornerPoints[1], cornerPoints[2], cornerPoints[3]}; + unsigned short ind = 0; + if (nn[1] < nn[ind]) ind = 1; + if (nn[2] < nn[ind]) ind = 2; + if (nn[3] < nn[ind]) ind = 3; + + unsigned short indm1 = ind == 0 ? 3 : ind - 1; // Next lower index. + unsigned short indp1 = ind == 3 ? 0 : ind + 1; // Next upper index. + unsigned short indp2 = ind >= 2 ? ind - 2 : ind + 2; // Opposite index. + + if (nn[indp1] < nn[indm1]) { + /* The orientation of the quadrilateral remains the same. + Store the new sorted node numbering. */ + cornerPoints[0] = nn[ind]; + cornerPoints[1] = nn[indp1]; + cornerPoints[2] = nn[indp2]; + cornerPoints[3] = nn[indm1]; + } else { + /* The orientation of the quadrilateral changes. Store the new + sorted node numbering and set swapElements to true. */ + cornerPoints[0] = nn[ind]; + cornerPoints[1] = nn[indm1]; + cornerPoints[2] = nn[indp2]; + cornerPoints[3] = nn[indp1]; + swapElements = true; + } + + break; + } + + default: { + std::ostringstream message; + message << "Unknown surface element type with " << nCornerPoints << " corners." << std::endl; + SU2_MPI::Error(message.str(), CURRENT_FUNCTION); + } + } + + /* Swap the element information, if needed. */ + if (swapElements) { + std::swap(elemID0, elemID1); + std::swap(nPolyGrid0, nPolyGrid1); + std::swap(nPolySol0, nPolySol1); + std::swap(nDOFsElem0, nDOFsElem1); + std::swap(elemType0, elemType1); + std::swap(faceID0, faceID1); + } +} diff --git a/Common/src/toolboxes/fem/CMatchingFace.cpp b/Common/src/toolboxes/fem/CMatchingFace.cpp new file mode 100644 index 000000000000..fa77809892b2 --- /dev/null +++ b/Common/src/toolboxes/fem/CMatchingFace.cpp @@ -0,0 +1,128 @@ +/*! + * \file CMatchingFace.cpp + * \brief Helper class used to determine whether or not faces of + * surface elements for the DG solver are matching faces. + * \author E. van der Weide + * \version 8.2.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2025, 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/toolboxes/fem/CMatchingFace.hpp" + +CMatchingFace::CMatchingFace() { + nCornerPoints = 0; + nDim = 0; + nPoly = 0; + nDOFsElem = 0; + elemType = 0; + elemID = 0; + + cornerCoor[0][0] = cornerCoor[0][1] = cornerCoor[0][2] = 0.0; + cornerCoor[1][0] = cornerCoor[1][1] = cornerCoor[1][2] = 0.0; + cornerCoor[2][0] = cornerCoor[2][1] = cornerCoor[2][2] = 0.0; + cornerCoor[3][0] = cornerCoor[3][1] = cornerCoor[3][2] = 0.0; + + tolForMatching = 0.0; +} + +bool CMatchingFace::operator<(const CMatchingFace& other) const { + /* First compare the number of corner points. ---*/ + if (nCornerPoints != other.nCornerPoints) return nCornerPoints < other.nCornerPoints; + + /*--- Determine the tolerance for comparing both objects. ---*/ + const su2double tol = min(tolForMatching, other.tolForMatching); + + /*--- Loop over the number of corner points and dimensions and compare the + coordinates. If considered different, return true if the current face + is considered smaller and false otherwise. ---*/ + for (unsigned short k = 0; k < nCornerPoints; ++k) { + for (unsigned short l = 0; l < nDim; ++l) { + if (fabs(cornerCoor[k][l] - other.cornerCoor[k][l]) > tol) return cornerCoor[k][l] < other.cornerCoor[k][l]; + } + } + + /*--- Both objects are considered the same. Return false. ---*/ + return false; +} + +void CMatchingFace::SortFaceCoordinates() { + /*--- Determine the tolerance for a matching point for this face. This is + accomplished by computing the minimum distance between the points of + the face, multiplied by a relative tolerance. ---*/ + for (unsigned short k = 0; k < nCornerPoints; ++k) { + for (unsigned short j = (k + 1); j < nCornerPoints; ++j) { + su2double dist = 0.0; + for (unsigned short l = 0; l < nDim; ++l) { + su2double ds = cornerCoor[k][l] - cornerCoor[j][l]; + dist += ds * ds; + } + dist = sqrt(dist); + + if (k == 0 && j == 1) + tolForMatching = dist; + else + tolForMatching = min(tolForMatching, dist); + } + } + + tolForMatching *= 1.e-6; + + /*--- Sort the points in increasing order based on the coordinates. + An insertion sort algorithm is used, which is quite efficient + for at most four corner points. ---*/ + for (unsigned short k = 1; k < nCornerPoints; ++k) { + for (unsigned short j = k; j > 0; --j) { + /* Check if cornerCoor[j] is considered less than cornerCoor[j-1]. */ + bool lessThan = false; + for (unsigned short l = 0; l < nDim; ++l) { + if (fabs(cornerCoor[j][l] - cornerCoor[j - 1][l]) > tolForMatching) { + lessThan = cornerCoor[j][l] < cornerCoor[j - 1][l]; + break; + } + } + + /* If cornerCoor[j] is less than cornerCoor[j-1] they must be swapped. + Otherwise an exit can be made from the j-loop. */ + if (lessThan) { + for (unsigned short l = 0; l < nDim; ++l) swap(cornerCoor[j][l], cornerCoor[j - 1][l]); + } else + break; + } + } +} + +void CMatchingFace::Copy(const CMatchingFace& other) { + nCornerPoints = other.nCornerPoints; + nDim = other.nDim; + nPoly = other.nPoly; + nDOFsElem = other.nDOFsElem; + elemType = other.elemType; + elemID = other.elemID; + + for (unsigned short k = 0; k < nCornerPoints; ++k) { + for (unsigned l = 0; l < nDim; ++l) { + cornerCoor[k][l] = other.cornerCoor[k][l]; + } + } + + tolForMatching = other.tolForMatching; +} diff --git a/Common/src/toolboxes/fem/CReorderElements.cpp b/Common/src/toolboxes/fem/CReorderElements.cpp new file mode 100644 index 000000000000..6813e579b962 --- /dev/null +++ b/Common/src/toolboxes/fem/CReorderElements.cpp @@ -0,0 +1,65 @@ +/*! + * \file CReorderElements.cpp + * \brief Helper class used to reorder the owned elements + * after the partitioning + * \author E. van der Weide + * \version 8.2.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2025, 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/toolboxes/fem/CReorderElements.hpp" + +CReorderElements::CReorderElements(const unsigned long val_GlobalElemID, const unsigned short val_TimeLevel, + const bool val_CommSolution, const unsigned short val_VTK_Type, + const unsigned short val_nPolySol, const bool val_JacConstant) { + /* Copy the global elment ID, time level and whether or not this element + must be communicated. */ + globalElemID = val_GlobalElemID; + timeLevel = val_TimeLevel; + commSolution = val_CommSolution; + + /* Create the element type used in this class, which stores information of + the VTK type, the polynomial degree of the solution and whether or not the + Jacobian of the transformation is constant. As it is possible that the + polynomial degree of the solution is zero, this convention is different + from the convention used in the SU2 grid file. */ + elemType = val_VTK_Type + 100 * val_nPolySol; + if (!val_JacConstant) elemType += 50; +} + +bool CReorderElements::operator<(const CReorderElements& other) const { + /* Elements with the lowest time level are stored first. */ + if (timeLevel != other.timeLevel) return timeLevel < other.timeLevel; + + /* Next comparison is whether or not the element must communicate its + solution data to other ranks. Elements which do not need to do this + are stored first. */ + if (commSolution != other.commSolution) return other.commSolution; + + /* Elements of the same element type must be stored as contiguously as + possible to allow for the simultaneous treatment of elements in the + matrix multiplications. */ + if (elemType != other.elemType) return elemType < other.elemType; + + /* The final comparison is based on the global element ID. */ + return globalElemID < other.globalElemID; +} diff --git a/Common/src/toolboxes/fem/CSortFaces.cpp b/Common/src/toolboxes/fem/CSortFaces.cpp new file mode 100644 index 000000000000..4a6eab7fd3ad --- /dev/null +++ b/Common/src/toolboxes/fem/CSortFaces.cpp @@ -0,0 +1,108 @@ +/*! + * \file CSortFaces.cpp + * \brief Functor, used for a different sorting of the surface elements + * than the < operator of CFaceOfElement. + * \author E. van der Weide + * \version 8.2.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2025, 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/toolboxes/fem/CSortFaces.hpp" +#include "../../../include/fem/fem_geometry_structure.hpp" + +bool CSortFaces::operator()(const CFaceOfElement& f0, const CFaceOfElement& f1) { + /*--- Comparison in case both faces are boundary faces. ---*/ + if (f0.faceIndicator >= 0 && f1.faceIndicator >= 0) { + /* Both faces are boundary faces. The first comparison is the boundary + marker, which is stored in faceIndicator. */ + if (f0.faceIndicator != f1.faceIndicator) return f0.faceIndicator < f1.faceIndicator; + + /* Both faces belong to the same boundary marker. The second comparison is + based on the on the local volume ID's of the adjacent elements. As the + volumes are sorted according to the time levels for time accurate + local stepping, there is no need to do this check seperately here. */ + unsigned long ind0 = f0.elemID0 < nVolElemTot ? f0.elemID0 : f0.elemID1; + unsigned long ind1 = f1.elemID0 < nVolElemTot ? f1.elemID0 : f1.elemID1; + + return ind0 < ind1; + } + + /*--- Comparison in case both faces are internal faces. ---*/ + if (f0.faceIndicator == -1 && f1.faceIndicator == -1) { + /* Both faces are internal faces. First determine the minimum and maximum + ID of its adjacent elements. */ + unsigned long elemIDMin0 = min(f0.elemID0, f0.elemID1); + unsigned long elemIDMax0 = max(f0.elemID0, f0.elemID1); + + unsigned long elemIDMin1 = min(f1.elemID0, f1.elemID1); + unsigned long elemIDMax1 = max(f1.elemID0, f1.elemID1); + + /* Determine the situation. */ + if (elemIDMax0 < nVolElemTot && elemIDMax1 < nVolElemTot) { + /* Both faces are matching internal faces. Determine whether or not these + faces are local faces, i.e. faces between locally owned elements. */ + const bool face0IsLocal = elemIDMax0 < nVolElemOwned; + const bool face1IsLocal = elemIDMax1 < nVolElemOwned; + + /* Check if both faces have the same status, i.e. either local or + not local. */ + if (face0IsLocal == face1IsLocal) { + /* Both faces are either local or not local. Determine the time level + of the faces, which is the minimum value of the adjacent volume + elements. */ + const unsigned short timeLevel0 = min(volElem[elemIDMin0].timeLevel, volElem[elemIDMax0].timeLevel); + const unsigned short timeLevel1 = min(volElem[elemIDMin1].timeLevel, volElem[elemIDMax1].timeLevel); + + /* Internal faces with the same status are first sorted according to + their time level. Faces with the smallest time level are numbered + first. Note this is only relevant for time accurate local time + stepping. */ + if (timeLevel0 != timeLevel1) return timeLevel0 < timeLevel1; + + /* The faces belong to the same time level. They are sorted according + to their element ID's in order to increase cache performance. */ + if (elemIDMin0 != elemIDMin1) return elemIDMin0 < elemIDMin1; + return elemIDMax0 < elemIDMax1; + } /* One face is a local face and the other is not. Make sure that + the local faces are numbered first. */ + return face0IsLocal; + + } else if (elemIDMax0 >= nVolElemTot && elemIDMax1 >= nVolElemTot) { + /* Both faces are non-matching internal faces. Sort them according to + their relevant element ID. The time level is not taken into account + yet, because non-matching faces are not possible at the moment with + time accurate local time stepping. */ + return elemIDMin0 < elemIDMin1; + } else { + /* One face is a matching internal face and the other face is a + non-matching internal face. Make sure that the non-matching face + is numbered after the matching face. This is accomplished by comparing + the maximum element ID's. */ + return elemIDMax0 < elemIDMax1; + } + } + + /*--- One face is a boundary face and the other face is an internal face. + Make sure that the boundary face is numbered first. This can be + accomplished by using the > operator for faceIndicator. ---*/ + return f0.faceIndicator > f1.faceIndicator; +} diff --git a/Common/src/toolboxes/fem/meson.build b/Common/src/toolboxes/fem/meson.build new file mode 100644 index 000000000000..3193907b6692 --- /dev/null +++ b/Common/src/toolboxes/fem/meson.build @@ -0,0 +1,4 @@ +common_src += files(['CFaceOfElement.cpp', + 'CMatchingFace.cpp', + 'CReorderElements.cpp', + 'CSortFaces.cpp']) diff --git a/Common/src/toolboxes/meson.build b/Common/src/toolboxes/meson.build index d95ffad59924..fa5e3b234c34 100644 --- a/Common/src/toolboxes/meson.build +++ b/Common/src/toolboxes/meson.build @@ -5,3 +5,4 @@ common_src += files(['CLinearPartitioner.cpp', 'CSymmetricMatrix.cpp']) subdir('MMS') +subdir('fem') diff --git a/Common/src/toolboxes/printing_toolbox.cpp b/Common/src/toolboxes/printing_toolbox.cpp index c9375032f784..cebfd06bf4c4 100644 --- a/Common/src/toolboxes/printing_toolbox.cpp +++ b/Common/src/toolboxes/printing_toolbox.cpp @@ -2,14 +2,14 @@ * \file printing_toolbox.cpp * \brief Printing tools * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Common/src/wall_model.cpp b/Common/src/wall_model.cpp index b483887810f3..39e41255e27e 100644 --- a/Common/src/wall_model.cpp +++ b/Common/src/wall_model.cpp @@ -3,14 +3,14 @@ * \brief File, which contains the implementation for the wall model functions * for large eddy simulations. * \author E. van der Weide, T. Economon, P. Urbanczyk - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/Docs/docmain.hpp b/Docs/docmain.hpp index ca1eded8d225..8a5bbc437899 100644 --- a/Docs/docmain.hpp +++ b/Docs/docmain.hpp @@ -2,14 +2,14 @@ * \file docmain.hpp * \brief This file contains documentation for Doxygen and does not have any significance with respect to C++. * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -26,7 +26,7 @@ */ /*! - * \mainpage SU2 version 8.1.0 "Harrier" + * \mainpage SU2 version 8.2.0 "Harrier" * SU2 suite is an open-source collection of C++ based software tools * to perform PDE analysis and PDE constrained optimization. The toolset is designed with * computational fluid dynamics and aerodynamic shape optimization in mind, but is extensible to diff --git a/QuickStart/inv_NACA0012.cfg b/QuickStart/inv_NACA0012.cfg index 1d2616746f04..cfa27105b95c 100644 --- a/QuickStart/inv_NACA0012.cfg +++ b/QuickStart/inv_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/README.md b/README.md index 7a40a9c081e3..44c15962569a 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@

-# SU2 (ver. 8.1.0 "Harrier"): The Open-Source CFD Code +# SU2 (ver. 8.2.0 "Harrier"): The Open-Source CFD Code Computational analysis tools have revolutionized the way we design engineering systems, but most established codes are proprietary, unavailable, or prohibitively expensive for many users. The SU2 team is changing this, making multiphysics analysis and design optimization freely available as open-source software and involving everyone in its creation and development. diff --git a/SU2_CFD/include/CMarkerProfileReaderFVM.hpp b/SU2_CFD/include/CMarkerProfileReaderFVM.hpp index 69f3ed9ecc6d..18a6e47e336a 100644 --- a/SU2_CFD/include/CMarkerProfileReaderFVM.hpp +++ b/SU2_CFD/include/CMarkerProfileReaderFVM.hpp @@ -3,14 +3,14 @@ * \brief Header file for the class CMarkerProfileReaderFVM. * The implementations are in the CMarkerProfileReaderFVM.cpp file. * \author T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/SU2_CFD.hpp b/SU2_CFD/include/SU2_CFD.hpp index 4d97180d9289..511bf6415225 100644 --- a/SU2_CFD/include/SU2_CFD.hpp +++ b/SU2_CFD/include/SU2_CFD.hpp @@ -3,14 +3,14 @@ * \brief Headers of the main subroutines of the code SU2_CFD. * The subroutines and functions are in the SU2_CFD.cpp file. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/definition_structure.hpp b/SU2_CFD/include/definition_structure.hpp index b4d437f1f9cd..c2f085e66b32 100644 --- a/SU2_CFD/include/definition_structure.hpp +++ b/SU2_CFD/include/definition_structure.hpp @@ -3,14 +3,14 @@ * \brief Headers of the main subroutines used by SU2_CFD. * The subroutines and functions are in the definition_structure.cpp file. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/drivers/CDiscAdjMultizoneDriver.hpp b/SU2_CFD/include/drivers/CDiscAdjMultizoneDriver.hpp index 7022220fc07c..dde873162087 100644 --- a/SU2_CFD/include/drivers/CDiscAdjMultizoneDriver.hpp +++ b/SU2_CFD/include/drivers/CDiscAdjMultizoneDriver.hpp @@ -2,14 +2,14 @@ * \class CDiscAdjMultizoneDriver.hpp * \brief Class for driving adjoint multi-zone problems. * \author O. Burghardt, P. Gomes, T. Albring, R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/drivers/CDiscAdjSinglezoneDriver.hpp b/SU2_CFD/include/drivers/CDiscAdjSinglezoneDriver.hpp index d1c28c63beb6..1892ad8cb7db 100644 --- a/SU2_CFD/include/drivers/CDiscAdjSinglezoneDriver.hpp +++ b/SU2_CFD/include/drivers/CDiscAdjSinglezoneDriver.hpp @@ -3,14 +3,14 @@ * \brief Headers of the main subroutines for driving single or multi-zone problems. * The subroutines and functions are in the driver_structure.cpp file. * \author T. Economon, H. Kline, R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -34,7 +34,7 @@ * \ingroup DiscAdj * \brief Class for driving single-zone adjoint solvers. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CDiscAdjSinglezoneDriver : public CSinglezoneDriver { protected: diff --git a/SU2_CFD/include/drivers/CDriver.hpp b/SU2_CFD/include/drivers/CDriver.hpp index 2f79be415b3d..93166413b3e5 100644 --- a/SU2_CFD/include/drivers/CDriver.hpp +++ b/SU2_CFD/include/drivers/CDriver.hpp @@ -3,14 +3,14 @@ * \brief Headers of the main subroutines for driving single or multi-zone problems. * The subroutines and functions are in the driver_structure.cpp file. * \author T. Economon, H. Kline, R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/drivers/CDriverBase.hpp b/SU2_CFD/include/drivers/CDriverBase.hpp index eaa6857c9119..d9b2515aff5b 100644 --- a/SU2_CFD/include/drivers/CDriverBase.hpp +++ b/SU2_CFD/include/drivers/CDriverBase.hpp @@ -2,14 +2,14 @@ * \file CDriverBase.hpp * \brief Base class for all drivers. * \author H. Patel, A. Gastaldi - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/drivers/CDummyDriver.hpp b/SU2_CFD/include/drivers/CDummyDriver.hpp index 7f95cd1ee3bf..09dd64bf63b4 100644 --- a/SU2_CFD/include/drivers/CDummyDriver.hpp +++ b/SU2_CFD/include/drivers/CDummyDriver.hpp @@ -3,14 +3,14 @@ * \brief Headers of the main subroutines for driving single or multi-zone problems. * The subroutines and functions are in the driver_structure.cpp file. * \author T. Economon, H. Kline, R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/drivers/CMultizoneDriver.hpp b/SU2_CFD/include/drivers/CMultizoneDriver.hpp index 89dcef1eae9e..c5f72f98ce04 100644 --- a/SU2_CFD/include/drivers/CMultizoneDriver.hpp +++ b/SU2_CFD/include/drivers/CMultizoneDriver.hpp @@ -3,14 +3,14 @@ * \brief Headers of the main subroutines for driving single or multi-zone problems. * The subroutines and functions are in the driver_structure.cpp file. * \author T. Economon, H. Kline, R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -35,7 +35,7 @@ * \ingroup Drivers * \brief Class for driving zone-specific iterations. * \author R. Sanchez, O. Burghardt - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CMultizoneDriver : public CDriver { protected: diff --git a/SU2_CFD/include/drivers/CSinglezoneDriver.hpp b/SU2_CFD/include/drivers/CSinglezoneDriver.hpp index 558956173465..68fe837d14d7 100644 --- a/SU2_CFD/include/drivers/CSinglezoneDriver.hpp +++ b/SU2_CFD/include/drivers/CSinglezoneDriver.hpp @@ -3,14 +3,14 @@ * \brief Headers of the main subroutines for driving single or multi-zone problems. * The subroutines and functions are in the driver_structure.cpp file. * \author T. Economon, H. Kline, R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -34,7 +34,7 @@ * \ingroup Drivers * \brief Class for driving single-zone solvers. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CSinglezoneDriver : public CDriver { protected: diff --git a/SU2_CFD/include/fluid/CConductivityModel.hpp b/SU2_CFD/include/fluid/CConductivityModel.hpp index 7ffd6fb6a3c9..9b129766898d 100644 --- a/SU2_CFD/include/fluid/CConductivityModel.hpp +++ b/SU2_CFD/include/fluid/CConductivityModel.hpp @@ -2,14 +2,14 @@ * \file CConductivityModel.hpp * \brief Defines an interface class for thermal conductivity models. * \author S. Vitale, M. Pini, G. Gori, A. Guardone, P. Colonna, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/fluid/CConstantConductivity.hpp b/SU2_CFD/include/fluid/CConstantConductivity.hpp index 2e4b17836d89..d98604475f3e 100644 --- a/SU2_CFD/include/fluid/CConstantConductivity.hpp +++ b/SU2_CFD/include/fluid/CConstantConductivity.hpp @@ -2,14 +2,14 @@ * \file CConstantConductivity.hpp * \brief Defines a constant laminar thermal conductivity model. * \author S. Vitale, M. Pini, G. Gori, A. Guardone, P. Colonna, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/fluid/CConstantConductivityRANS.hpp b/SU2_CFD/include/fluid/CConstantConductivityRANS.hpp index 1ccc94145452..012c36afda78 100644 --- a/SU2_CFD/include/fluid/CConstantConductivityRANS.hpp +++ b/SU2_CFD/include/fluid/CConstantConductivityRANS.hpp @@ -2,14 +2,14 @@ * \file CConstantConductivityRANS.hpp * \brief Defines a constant conductivity model for RANS problems. * \author T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/fluid/CConstantDensity.hpp b/SU2_CFD/include/fluid/CConstantDensity.hpp index edda854daab8..6dace83315a5 100644 --- a/SU2_CFD/include/fluid/CConstantDensity.hpp +++ b/SU2_CFD/include/fluid/CConstantDensity.hpp @@ -2,14 +2,14 @@ * \file CConstantDensity.hpp * \brief Defines the incompressible constant density model. * \author T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/fluid/CConstantDiffusivity.hpp b/SU2_CFD/include/fluid/CConstantDiffusivity.hpp index 4d0253855adb..497c603992ec 100644 --- a/SU2_CFD/include/fluid/CConstantDiffusivity.hpp +++ b/SU2_CFD/include/fluid/CConstantDiffusivity.hpp @@ -2,14 +2,14 @@ * \file CConstantDiffusivity.hpp * \brief Defines constant mass diffusivity. * \author T. Economon, Cristopher Morales Ubal - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/fluid/CConstantLewisDiffusivity.hpp b/SU2_CFD/include/fluid/CConstantLewisDiffusivity.hpp index b17932685d0b..a85ec2c4b778 100644 --- a/SU2_CFD/include/fluid/CConstantLewisDiffusivity.hpp +++ b/SU2_CFD/include/fluid/CConstantLewisDiffusivity.hpp @@ -2,14 +2,14 @@ * \file CConstantLewisDiffusivity.hpp * \brief Defines Constant Lewis mass diffusivity. * \author M.Heimgartner, C.Morales - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/fluid/CConstantPrandtl.hpp b/SU2_CFD/include/fluid/CConstantPrandtl.hpp index 148b0462f38e..d694b9def641 100644 --- a/SU2_CFD/include/fluid/CConstantPrandtl.hpp +++ b/SU2_CFD/include/fluid/CConstantPrandtl.hpp @@ -2,14 +2,14 @@ * \file CConstantPrandtl.hpp * \brief Defines a non-constant laminar Prandtl number thermal conductivity model. * \author S. Vitale, M. Pini, G. Gori, A. Guardone, P. Colonna, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/fluid/CConstantPrandtlRANS.hpp b/SU2_CFD/include/fluid/CConstantPrandtlRANS.hpp index 879cf5abe389..977bb317e1ea 100644 --- a/SU2_CFD/include/fluid/CConstantPrandtlRANS.hpp +++ b/SU2_CFD/include/fluid/CConstantPrandtlRANS.hpp @@ -2,14 +2,14 @@ * \file CConstantPrandtlRANS.hpp * \brief Defines a non-constant effective thermal conductivity for RANS problems using Prandtl numbers. * \author S. Vitale, M. Pini, G. Gori, A. Guardone, P. Colonna, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/fluid/CConstantSchmidt.hpp b/SU2_CFD/include/fluid/CConstantSchmidt.hpp index 5867ea934ec1..1ba7942166bb 100644 --- a/SU2_CFD/include/fluid/CConstantSchmidt.hpp +++ b/SU2_CFD/include/fluid/CConstantSchmidt.hpp @@ -2,14 +2,14 @@ * \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 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/fluid/CConstantViscosity.hpp b/SU2_CFD/include/fluid/CConstantViscosity.hpp index 2f39f389cbb7..da771de653d6 100644 --- a/SU2_CFD/include/fluid/CConstantViscosity.hpp +++ b/SU2_CFD/include/fluid/CConstantViscosity.hpp @@ -2,14 +2,14 @@ * \file CConstantViscosity.hpp * \brief Defines a constant laminar viscosity model. * \author S. Vitale, M. Pini, G. Gori, A. Guardone, P. Colonna, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/fluid/CCoolProp.hpp b/SU2_CFD/include/fluid/CCoolProp.hpp index b7e05367781f..b5c8c4786a33 100644 --- a/SU2_CFD/include/fluid/CCoolProp.hpp +++ b/SU2_CFD/include/fluid/CCoolProp.hpp @@ -2,14 +2,14 @@ * \file CCoolProp.hpp * \brief Defines the state-of-the-art fluid model from CoolProp library. * \author P. Yan, G. Gori, A. Guardone - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/fluid/CCoolPropConductivity.hpp b/SU2_CFD/include/fluid/CCoolPropConductivity.hpp index 4b0fc4013746..1d267f2cb4a4 100644 --- a/SU2_CFD/include/fluid/CCoolPropConductivity.hpp +++ b/SU2_CFD/include/fluid/CCoolPropConductivity.hpp @@ -2,14 +2,14 @@ * \file CCoolPropConductivity.hpp * \brief Defines laminar thermal conductivity model from CoolProp. * \author P.YAn, G. Gori, A. Guardone - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/fluid/CCoolPropViscosity.hpp b/SU2_CFD/include/fluid/CCoolPropViscosity.hpp index 88726f40451d..96fcb055b6de 100644 --- a/SU2_CFD/include/fluid/CCoolPropViscosity.hpp +++ b/SU2_CFD/include/fluid/CCoolPropViscosity.hpp @@ -2,14 +2,14 @@ * \file CCoolPropViscosity.hpp * \brief Defines CoolPropviscosity model. * \author P.Yan, G. Gori, A. Guardone, - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/fluid/CDataDrivenFluid.hpp b/SU2_CFD/include/fluid/CDataDrivenFluid.hpp index 57a68ea8d71f..f8f6ad500cae 100644 --- a/SU2_CFD/include/fluid/CDataDrivenFluid.hpp +++ b/SU2_CFD/include/fluid/CDataDrivenFluid.hpp @@ -3,14 +3,14 @@ * \brief Defines a template fluid model class using multilayer perceptrons * for theromodynamic state definition * \author E.C.Bunschoten - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -62,6 +62,13 @@ class CDataDrivenFluid final : public CFluidModel { rho_min, rho_max, /*!< \brief Minimum and maximum density values in data set. */ e_min, e_max; /*!< \brief Minimum and maximum energy values in data set. */ + bool custom_init_rho{false}, + custom_init_e{false}; + su2double val_custom_init_rho, + val_custom_init_e, + rho_median, + e_median; + unsigned long MaxIter_Newton; /*!< \brief Maximum number of iterations for Newton solvers. */ su2double dsde_rho, /*!< \brief Entropy derivative w.r.t. density. */ @@ -87,6 +94,11 @@ class CDataDrivenFluid final : public CFluidModel { vector outputs_rhoe; /*!< \brief Pointers to output variables. */ + vector> dsdrhoe; /*!< \brief Entropy Jacobian terms. */ + vector>> d2sdrhoe2; /*!< \brief Entropy Hessian terms. */ + + bool use_MLP_derivatives; /*!< \brief Use physics-informed model. */ + /*--- Class variables for the multi-layer perceptron method ---*/ #ifdef USE_MLPCPP MLPToolbox::CLookUp_ANN* lookup_mlp; /*!< \brief Multi-layer perceptron collection. */ @@ -145,8 +157,8 @@ class CDataDrivenFluid final : public CFluidModel { * \param[in] dY2drho - Pointer to the partial derivative of quantity 2 w.r.t. density at constant energy. * \param[in] dY2de - Pointer to the partial derivative of quantity 2 w.r.t. energy at constant density. */ - void Run_Newton_Solver(su2double Y1_target, su2double Y2_target, su2double* Y1, su2double* Y2, su2double* dY1drho, - su2double* dY1de, su2double* dY2drho, su2double* dY2de); + void Run_Newton_Solver(const su2double Y1_target, const su2double Y2_target, const su2double & Y1, const su2double & Y2, const su2double & dY1drho, + const su2double & dY1de, const su2double & dY2drho, const su2double & dY2de); /*! * \brief 1D Newton solver for computing the density or energy corresponding to Y_target. @@ -155,9 +167,10 @@ class CDataDrivenFluid final : public CFluidModel { * \param[in] X - Pointer to controlling variable (density or energy). * \param[in] dYdX - Pointer to the partial derivative of target quantity w.r.t. controlling variable. */ - void Run_Newton_Solver(su2double Y_target, su2double* Y, su2double* X, su2double* dYdX); + void Run_Newton_Solver(const su2double Y_target, const su2double & Y, su2double & X, const su2double & dYdX); void ComputeIdealGasQuantities(); + public: /*! * \brief Constructor of the class. @@ -213,6 +226,15 @@ class CDataDrivenFluid final : public CFluidModel { */ void SetTDState_Ps(su2double P, su2double s) override; + /*! + * \brief compute some derivatives of enthalpy and entropy needed for subsonic inflow BC + * \param[in] InputSpec - Input pair for FLP calls ("Pv"). + * \param[in] th1 - first thermodynamic variable (P). + * \param[in] th2 - second thermodynamic variable (v). + * + */ + void ComputeDerivativeNRBC_Prho(su2double P, su2double rho) override; + /*! * \brief Get fluid model extrapolation instance. * \return Query point lies outside fluid model data range. diff --git a/SU2_CFD/include/fluid/CDiffusivityModel.hpp b/SU2_CFD/include/fluid/CDiffusivityModel.hpp index 34c45252e597..0692e54b3bad 100644 --- a/SU2_CFD/include/fluid/CDiffusivityModel.hpp +++ b/SU2_CFD/include/fluid/CDiffusivityModel.hpp @@ -2,14 +2,14 @@ * \file CDiffusivityModel.hpp * \brief Interface class for defining mass diffusivity models. * \author T. Economon, C. Morales - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/fluid/CFluidFlamelet.hpp b/SU2_CFD/include/fluid/CFluidFlamelet.hpp index f95072f30ce1..8be880180aac 100644 --- a/SU2_CFD/include/fluid/CFluidFlamelet.hpp +++ b/SU2_CFD/include/fluid/CFluidFlamelet.hpp @@ -2,14 +2,14 @@ * \file CFluidFlamelet.hpp * \brief Defines the flamelet fluid model * \author D. Mayer, T. Economon, N. Beishuizen, E. Bunschoten - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -37,6 +37,9 @@ class CFluidFlamelet final : public CFluidModel { private: + DataDrivenFluid_ParsedOptions datadriven_fluid_options; + FluidFlamelet_ParsedOptions flamelet_options; + ENUM_DATADRIVEN_METHOD Kind_DataDriven_Method = ENUM_DATADRIVEN_METHOD::LUT; /*!< \brief Interpolation method for data set evaluation. */ diff --git a/SU2_CFD/include/fluid/CFluidModel.hpp b/SU2_CFD/include/fluid/CFluidModel.hpp index 30766e7b5431..e629c9a7c0a3 100644 --- a/SU2_CFD/include/fluid/CFluidModel.hpp +++ b/SU2_CFD/include/fluid/CFluidModel.hpp @@ -2,14 +2,14 @@ * \file CFluidModel.hpp * \brief Defines the main fluid model class for thermophysical properties. * \author S. Vitale, G. Gori, M. Pini, A. Guardone, P. Colonna, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/fluid/CFluidScalar.hpp b/SU2_CFD/include/fluid/CFluidScalar.hpp index 206de692ae08..d07c00451389 100644 --- a/SU2_CFD/include/fluid/CFluidScalar.hpp +++ b/SU2_CFD/include/fluid/CFluidScalar.hpp @@ -2,14 +2,14 @@ * \file CFluidScalar.hpp * \brief Defines the multicomponent incompressible Ideal Gas model for mixtures. * \author T. Economon, Mark Heimgartner, Cristopher Morales Ubal - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/fluid/CIdealGas.hpp b/SU2_CFD/include/fluid/CIdealGas.hpp index 9355b242913a..d895099c39a7 100644 --- a/SU2_CFD/include/fluid/CIdealGas.hpp +++ b/SU2_CFD/include/fluid/CIdealGas.hpp @@ -2,14 +2,14 @@ * \file CIdealGas.hpp * \brief Defines the ideal gas model. * \author S. Vitale, G. Gori, M. Pini, A. Guardone, P. Colonna - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/fluid/CIncIdealGas.hpp b/SU2_CFD/include/fluid/CIncIdealGas.hpp index 42d6138f6d2e..ca81fbe77d54 100644 --- a/SU2_CFD/include/fluid/CIncIdealGas.hpp +++ b/SU2_CFD/include/fluid/CIncIdealGas.hpp @@ -2,14 +2,14 @@ * \file CIncIdealGas.hpp * \brief Defines the incompressible Ideal Gas model. * \author T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/fluid/CIncIdealGasPolynomial.hpp b/SU2_CFD/include/fluid/CIncIdealGasPolynomial.hpp index dbbca6a9af89..61954089b3b8 100644 --- a/SU2_CFD/include/fluid/CIncIdealGasPolynomial.hpp +++ b/SU2_CFD/include/fluid/CIncIdealGasPolynomial.hpp @@ -2,14 +2,14 @@ * \file CIncIdealGasPolynomial.hpp * \brief Defines the incompressible Ideal Gas model with polynomial Cp. * \author T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/fluid/CMutationTCLib.hpp b/SU2_CFD/include/fluid/CMutationTCLib.hpp index f41314d1b9d7..2ad020b2926b 100644 --- a/SU2_CFD/include/fluid/CMutationTCLib.hpp +++ b/SU2_CFD/include/fluid/CMutationTCLib.hpp @@ -2,14 +2,14 @@ * \file CMutationTCLib.hpp * \brief Defines the class for the link to Mutation++ ThermoChemistry library. * \author C. Garbacz - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/fluid/CNEMOGas.hpp b/SU2_CFD/include/fluid/CNEMOGas.hpp index cedf8c08fde3..27667b5ef0cc 100644 --- a/SU2_CFD/include/fluid/CNEMOGas.hpp +++ b/SU2_CFD/include/fluid/CNEMOGas.hpp @@ -2,14 +2,14 @@ * \file CNEMOGas.hpp * \brief Defines the nonequilibrium gas model. * \author C. Garbacz, W. Maier, S. R. Copeland - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/fluid/CPengRobinson.hpp b/SU2_CFD/include/fluid/CPengRobinson.hpp index 89391d05cb55..76e87b6152ae 100644 --- a/SU2_CFD/include/fluid/CPengRobinson.hpp +++ b/SU2_CFD/include/fluid/CPengRobinson.hpp @@ -2,14 +2,14 @@ * \file CPengRobinson.hpp * \brief Defines the Peng-Robinson model. * \author S. Vitale, G. Gori, M. Pini, A. Guardone, P. Colonna - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/fluid/CPolynomialConductivity.hpp b/SU2_CFD/include/fluid/CPolynomialConductivity.hpp index 993d376b73de..0f226eef0988 100644 --- a/SU2_CFD/include/fluid/CPolynomialConductivity.hpp +++ b/SU2_CFD/include/fluid/CPolynomialConductivity.hpp @@ -2,14 +2,14 @@ * \file CPolynomialConductivity.hpp * \brief Defines a non-constant laminar thermal conductivity using a polynomial function of temperature. * \author T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/fluid/CPolynomialConductivityRANS.hpp b/SU2_CFD/include/fluid/CPolynomialConductivityRANS.hpp index 2788f75b2d24..a5cdcf5fc625 100644 --- a/SU2_CFD/include/fluid/CPolynomialConductivityRANS.hpp +++ b/SU2_CFD/include/fluid/CPolynomialConductivityRANS.hpp @@ -3,14 +3,14 @@ * \brief Defines a non-constant thermal conductivity using a polynomial function of temperature * for RANS problems with the addition of a turbulent component based on a turbulent Prandtl number. * \author T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/fluid/CPolynomialViscosity.hpp b/SU2_CFD/include/fluid/CPolynomialViscosity.hpp index 576a845fa7e3..07b92dfb82b3 100644 --- a/SU2_CFD/include/fluid/CPolynomialViscosity.hpp +++ b/SU2_CFD/include/fluid/CPolynomialViscosity.hpp @@ -2,14 +2,14 @@ * \file CPolynomialViscosity.hpp * \brief Defines a laminar viscosity model as a polynomial function of temperature. * \author T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/fluid/CSU2TCLib.hpp b/SU2_CFD/include/fluid/CSU2TCLib.hpp index ed65af868e32..626dd1df863a 100644 --- a/SU2_CFD/include/fluid/CSU2TCLib.hpp +++ b/SU2_CFD/include/fluid/CSU2TCLib.hpp @@ -2,14 +2,14 @@ * \file CSU2TCLib.hpp * \brief Defines the classes for different user defined ThermoChemistry libraries. * \author C. Garbacz, W. Maier, S. R. Copeland - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/fluid/CSutherland.hpp b/SU2_CFD/include/fluid/CSutherland.hpp index 5db3dc2d5b8b..f75ecd0bcf16 100644 --- a/SU2_CFD/include/fluid/CSutherland.hpp +++ b/SU2_CFD/include/fluid/CSutherland.hpp @@ -2,14 +2,14 @@ * \file CSutherland.hpp * \brief Defines Sutherland's Law for laminar viscosity. * \author S. Vitale, M. Pini, G. Gori, A. Guardone, P. Colonna, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/fluid/CVanDerWaalsGas.hpp b/SU2_CFD/include/fluid/CVanDerWaalsGas.hpp index bc94b1e9d429..38b3e5900173 100644 --- a/SU2_CFD/include/fluid/CVanDerWaalsGas.hpp +++ b/SU2_CFD/include/fluid/CVanDerWaalsGas.hpp @@ -2,14 +2,14 @@ * \file CVanDerWaalsGas.hpp * \brief Declaration of the Polytropic Van der Waals model. * \author S. Vitale, G. Gori, M. Pini, A. Guardone, P. Colonna - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/fluid/CViscosityModel.hpp b/SU2_CFD/include/fluid/CViscosityModel.hpp index 1d3a36354d3c..f84a75f4ae39 100644 --- a/SU2_CFD/include/fluid/CViscosityModel.hpp +++ b/SU2_CFD/include/fluid/CViscosityModel.hpp @@ -2,14 +2,14 @@ * \file CViscosityModel.hpp * \brief Interface class for defining laminar viscosity models. * \author S. Vitale, M. Pini, G. Gori, A. Guardone, P. Colonna, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/gradients/computeGradientsGreenGauss.hpp b/SU2_CFD/include/gradients/computeGradientsGreenGauss.hpp index b330197bec1c..0907e1b31a41 100644 --- a/SU2_CFD/include/gradients/computeGradientsGreenGauss.hpp +++ b/SU2_CFD/include/gradients/computeGradientsGreenGauss.hpp @@ -4,14 +4,14 @@ * \note This allows the same implementation to be used for conservative * and primitive variables of any solver. * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/gradients/computeGradientsLeastSquares.hpp b/SU2_CFD/include/gradients/computeGradientsLeastSquares.hpp index 278e7493a06f..0fb8fc96c211 100644 --- a/SU2_CFD/include/gradients/computeGradientsLeastSquares.hpp +++ b/SU2_CFD/include/gradients/computeGradientsLeastSquares.hpp @@ -3,14 +3,14 @@ * \brief Generic implementation of Least-Squares gradient computation. * \note This allows the same implementation to be used for conservative * and primitive variables of any solver. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/gradients/correctGradientsSymmetry.hpp b/SU2_CFD/include/gradients/correctGradientsSymmetry.hpp index e42346ed5f3d..40a11c8f1cc5 100644 --- a/SU2_CFD/include/gradients/correctGradientsSymmetry.hpp +++ b/SU2_CFD/include/gradients/correctGradientsSymmetry.hpp @@ -2,14 +2,14 @@ * \file correctGradientsSymmetry.hpp * \brief Implements the symmetry boundary conditions for the gradient computations. * \author N. Beishuizen - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/integration/CFEM_DG_Integration.hpp b/SU2_CFD/include/integration/CFEM_DG_Integration.hpp index 388710147b2e..24ca9cbc6be7 100644 --- a/SU2_CFD/include/integration/CFEM_DG_Integration.hpp +++ b/SU2_CFD/include/integration/CFEM_DG_Integration.hpp @@ -2,14 +2,14 @@ * \file CFEM_DG_Integration.hpp * \brief Declaration of class for integration with the FEM DG solver. * \author E. van der Weide, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -32,7 +32,7 @@ * \ingroup Drivers * \brief Class for integration with the FEM DG solver. * \author E. van der Weide, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CFEM_DG_Integration final : public CIntegration { public: diff --git a/SU2_CFD/include/integration/CIntegration.hpp b/SU2_CFD/include/integration/CIntegration.hpp index 5d83b7a38d2b..ab9070c8b725 100644 --- a/SU2_CFD/include/integration/CIntegration.hpp +++ b/SU2_CFD/include/integration/CIntegration.hpp @@ -2,14 +2,14 @@ * \file CIntegration.hpp * \brief Declaration of the main routines to orchestrate space and time integration. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/integration/CIntegrationFactory.hpp b/SU2_CFD/include/integration/CIntegrationFactory.hpp index 19bdcb573252..29943c9347b3 100644 --- a/SU2_CFD/include/integration/CIntegrationFactory.hpp +++ b/SU2_CFD/include/integration/CIntegrationFactory.hpp @@ -2,14 +2,14 @@ * \file CIntegrationFactory.hpp * \brief Headers of the CIntegrationFactory class * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/integration/CMultiGridIntegration.hpp b/SU2_CFD/include/integration/CMultiGridIntegration.hpp index e3da86dd1d5a..a29dc8f2c06c 100644 --- a/SU2_CFD/include/integration/CMultiGridIntegration.hpp +++ b/SU2_CFD/include/integration/CMultiGridIntegration.hpp @@ -2,14 +2,14 @@ * \file CMultiGridIntegration.hpp * \brief Declaration of class for time integration using a multigrid method. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/integration/CNewtonIntegration.hpp b/SU2_CFD/include/integration/CNewtonIntegration.hpp index 28e7a0394ce3..bb6c58c2f7fe 100644 --- a/SU2_CFD/include/integration/CNewtonIntegration.hpp +++ b/SU2_CFD/include/integration/CNewtonIntegration.hpp @@ -2,14 +2,14 @@ * \file CNewtonIntegration.hpp * \brief Newton-Krylov integration. * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/integration/CSingleGridIntegration.hpp b/SU2_CFD/include/integration/CSingleGridIntegration.hpp index 12e6efc1473b..a87b7f99ad22 100644 --- a/SU2_CFD/include/integration/CSingleGridIntegration.hpp +++ b/SU2_CFD/include/integration/CSingleGridIntegration.hpp @@ -2,14 +2,14 @@ * \file CSingleGridIntegration.hpp * \brief Declaration of class for numerical integration of fine grid-only problems. * \author A. Bueno. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/integration/CStructuralIntegration.hpp b/SU2_CFD/include/integration/CStructuralIntegration.hpp index edfdce9b70ce..0e789beeee4e 100644 --- a/SU2_CFD/include/integration/CStructuralIntegration.hpp +++ b/SU2_CFD/include/integration/CStructuralIntegration.hpp @@ -2,14 +2,14 @@ * \file CStructuralIntegration.hpp * \brief Declaration of class for numerical integration of structural problems. * \author R. Sanchez. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/interfaces/CInterface.hpp b/SU2_CFD/include/interfaces/CInterface.hpp index d8c1f5c03eae..3d911f0dd010 100644 --- a/SU2_CFD/include/interfaces/CInterface.hpp +++ b/SU2_CFD/include/interfaces/CInterface.hpp @@ -3,14 +3,14 @@ * \brief Declarations and inlines of the transfer structure. * The subroutines and functions are in the physics folders. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -51,7 +51,7 @@ using namespace std; * \ingroup Interfaces * \brief Main class for defining the physical transfer of information. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CInterface { diff --git a/SU2_CFD/include/interfaces/cfd/CConservativeVarsInterface.hpp b/SU2_CFD/include/interfaces/cfd/CConservativeVarsInterface.hpp index de031558f812..35afdd6b4668 100644 --- a/SU2_CFD/include/interfaces/cfd/CConservativeVarsInterface.hpp +++ b/SU2_CFD/include/interfaces/cfd/CConservativeVarsInterface.hpp @@ -3,14 +3,14 @@ * \brief Declaration and inlines of the class to transfer conservative variables * from a generic zone into another one. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/interfaces/cfd/CMixingPlaneInterface.hpp b/SU2_CFD/include/interfaces/cfd/CMixingPlaneInterface.hpp index 3a363764a266..4f97427e7b7e 100644 --- a/SU2_CFD/include/interfaces/cfd/CMixingPlaneInterface.hpp +++ b/SU2_CFD/include/interfaces/cfd/CMixingPlaneInterface.hpp @@ -3,14 +3,14 @@ * \brief Declaration and inlines of the class to transfer average variables * needed for MixingPlane computation from a generic zone into another one. * \author S. Vitale - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/interfaces/cfd/CSlidingInterface.hpp b/SU2_CFD/include/interfaces/cfd/CSlidingInterface.hpp index 4c784440ca54..1ec951d85a2d 100644 --- a/SU2_CFD/include/interfaces/cfd/CSlidingInterface.hpp +++ b/SU2_CFD/include/interfaces/cfd/CSlidingInterface.hpp @@ -3,14 +3,14 @@ * \brief Declaration and inlines of the class to transfer conservative variables * from a generic zone into another * \author G. Gori Politecnico di Milano - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/interfaces/cht/CConjugateHeatInterface.hpp b/SU2_CFD/include/interfaces/cht/CConjugateHeatInterface.hpp index 044f568854fb..8b4126b8065c 100644 --- a/SU2_CFD/include/interfaces/cht/CConjugateHeatInterface.hpp +++ b/SU2_CFD/include/interfaces/cht/CConjugateHeatInterface.hpp @@ -3,14 +3,14 @@ * \brief Declaration and inlines of the class to transfer temperature and heatflux * density for conjugate heat interfaces between structure and fluid zones. * \author O. Burghardt - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/interfaces/fsi/CDiscAdjFlowTractionInterface.hpp b/SU2_CFD/include/interfaces/fsi/CDiscAdjFlowTractionInterface.hpp index e60b9044d5b1..21c43a907bd8 100644 --- a/SU2_CFD/include/interfaces/fsi/CDiscAdjFlowTractionInterface.hpp +++ b/SU2_CFD/include/interfaces/fsi/CDiscAdjFlowTractionInterface.hpp @@ -3,14 +3,14 @@ * \brief Declaration and inlines of the class to transfer flow tractions * from a fluid zone into a structural zone in a discrete adjoint simulation. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/interfaces/fsi/CDisplacementsInterface.hpp b/SU2_CFD/include/interfaces/fsi/CDisplacementsInterface.hpp index 42cb9c18f7d7..f9b3381b5120 100644 --- a/SU2_CFD/include/interfaces/fsi/CDisplacementsInterface.hpp +++ b/SU2_CFD/include/interfaces/fsi/CDisplacementsInterface.hpp @@ -3,14 +3,14 @@ * \brief Declaration and inlines of the class to transfer boundary displacements * from a structural zone into a fluid zone. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/interfaces/fsi/CFlowTractionInterface.hpp b/SU2_CFD/include/interfaces/fsi/CFlowTractionInterface.hpp index 08d2958a2435..3eefc4465688 100644 --- a/SU2_CFD/include/interfaces/fsi/CFlowTractionInterface.hpp +++ b/SU2_CFD/include/interfaces/fsi/CFlowTractionInterface.hpp @@ -3,14 +3,14 @@ * \brief Declaration and inlines of the class to transfer flow tractions * from a fluid zone into a structural zone. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/iteration/CAdjFluidIteration.hpp b/SU2_CFD/include/iteration/CAdjFluidIteration.hpp index 75829093c71c..d16add1ad67f 100644 --- a/SU2_CFD/include/iteration/CAdjFluidIteration.hpp +++ b/SU2_CFD/include/iteration/CAdjFluidIteration.hpp @@ -3,14 +3,14 @@ * \brief Headers of the iteration classes used by SU2_CFD. * Each CIteration class represents an available physics package. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/iteration/CDiscAdjFEAIteration.hpp b/SU2_CFD/include/iteration/CDiscAdjFEAIteration.hpp index 357b9b094919..ace9bbe5c56f 100644 --- a/SU2_CFD/include/iteration/CDiscAdjFEAIteration.hpp +++ b/SU2_CFD/include/iteration/CDiscAdjFEAIteration.hpp @@ -3,14 +3,14 @@ * \brief Headers of the iteration classes used by SU2_CFD. * Each CIteration class represents an available physics package. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/iteration/CDiscAdjFluidIteration.hpp b/SU2_CFD/include/iteration/CDiscAdjFluidIteration.hpp index e9046e5a2875..630a06fe9daa 100644 --- a/SU2_CFD/include/iteration/CDiscAdjFluidIteration.hpp +++ b/SU2_CFD/include/iteration/CDiscAdjFluidIteration.hpp @@ -3,14 +3,14 @@ * \brief Headers of the iteration classes used by SU2_CFD. * Each CIteration class represents an available physics package. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/iteration/CDiscAdjHeatIteration.hpp b/SU2_CFD/include/iteration/CDiscAdjHeatIteration.hpp index 7c04b683816e..0fe0d1a7d0a2 100644 --- a/SU2_CFD/include/iteration/CDiscAdjHeatIteration.hpp +++ b/SU2_CFD/include/iteration/CDiscAdjHeatIteration.hpp @@ -3,14 +3,14 @@ * \brief Headers of the iteration classes used by SU2_CFD. * Each CIteration class represents an available physics package. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/iteration/CFEAIteration.hpp b/SU2_CFD/include/iteration/CFEAIteration.hpp index 94814f6dea21..1dad0f2cfa19 100644 --- a/SU2_CFD/include/iteration/CFEAIteration.hpp +++ b/SU2_CFD/include/iteration/CFEAIteration.hpp @@ -3,14 +3,14 @@ * \brief Headers of the iteration classes used by SU2_CFD. * Each CIteration class represents an available physics package. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -35,7 +35,7 @@ * \ingroup Drivers * \brief Class for driving an iteration of structural analysis. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CFEAIteration : public CIteration { public: diff --git a/SU2_CFD/include/iteration/CFEMFluidIteration.hpp b/SU2_CFD/include/iteration/CFEMFluidIteration.hpp index f90718385f67..3d92fed36890 100644 --- a/SU2_CFD/include/iteration/CFEMFluidIteration.hpp +++ b/SU2_CFD/include/iteration/CFEMFluidIteration.hpp @@ -3,14 +3,14 @@ * \brief Headers of the iteration classes used by SU2_CFD. * Each CIteration class represents an available physics package. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -35,7 +35,7 @@ * \ingroup Drivers * \brief Class for driving an iteration of the finite element flow system. * \author T. Economon, E. van der Weide - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CFEMFluidIteration : public CFluidIteration { public: diff --git a/SU2_CFD/include/iteration/CFluidIteration.hpp b/SU2_CFD/include/iteration/CFluidIteration.hpp index 346f763581cf..61484ac9ce80 100644 --- a/SU2_CFD/include/iteration/CFluidIteration.hpp +++ b/SU2_CFD/include/iteration/CFluidIteration.hpp @@ -3,14 +3,14 @@ * \brief Headers of the iteration classes used by SU2_CFD. * Each CIteration class represents an available physics package. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/iteration/CHeatIteration.hpp b/SU2_CFD/include/iteration/CHeatIteration.hpp index 5b61be204e5d..cfe9d9ccc3f9 100644 --- a/SU2_CFD/include/iteration/CHeatIteration.hpp +++ b/SU2_CFD/include/iteration/CHeatIteration.hpp @@ -3,14 +3,14 @@ * \brief Headers of the iteration classes used by SU2_CFD. * Each CIteration class represents an available physics package. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/iteration/CIteration.hpp b/SU2_CFD/include/iteration/CIteration.hpp index bd8df8ef50e6..a6b8ff6bbf73 100644 --- a/SU2_CFD/include/iteration/CIteration.hpp +++ b/SU2_CFD/include/iteration/CIteration.hpp @@ -3,14 +3,14 @@ * \brief Headers of the iteration classes used by SU2_CFD. * Each CIteration class represents an available physics package. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/iteration/CIterationFactory.hpp b/SU2_CFD/include/iteration/CIterationFactory.hpp index ea1214a7883c..ea60ae280224 100644 --- a/SU2_CFD/include/iteration/CIterationFactory.hpp +++ b/SU2_CFD/include/iteration/CIterationFactory.hpp @@ -3,14 +3,14 @@ * \brief Headers of the iteration classes used by SU2_CFD. * Each CIteration class represents an available physics package. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/iteration/CTurboIteration.hpp b/SU2_CFD/include/iteration/CTurboIteration.hpp index 876be3e755a9..40df0e55b739 100644 --- a/SU2_CFD/include/iteration/CTurboIteration.hpp +++ b/SU2_CFD/include/iteration/CTurboIteration.hpp @@ -3,14 +3,14 @@ * \brief Headers of the iteration classes used by SU2_CFD. * Each CIteration class represents an available physics package. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/limiters/CLimiterDetails.hpp b/SU2_CFD/include/limiters/CLimiterDetails.hpp index 7651c51425ab..10724bb9d964 100644 --- a/SU2_CFD/include/limiters/CLimiterDetails.hpp +++ b/SU2_CFD/include/limiters/CLimiterDetails.hpp @@ -3,14 +3,14 @@ * \brief A class template that allows defining limiters via * specialization of particular details. * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/limiters/computeLimiters.hpp b/SU2_CFD/include/limiters/computeLimiters.hpp index e9bc261d30fc..981fed30d9b4 100644 --- a/SU2_CFD/include/limiters/computeLimiters.hpp +++ b/SU2_CFD/include/limiters/computeLimiters.hpp @@ -2,14 +2,14 @@ * \file computeLimiters.hpp * \brief Compute limiters wrapper function. * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/limiters/computeLimiters_impl.hpp b/SU2_CFD/include/limiters/computeLimiters_impl.hpp index 0c9fc51b79c0..a00809db0958 100644 --- a/SU2_CFD/include/limiters/computeLimiters_impl.hpp +++ b/SU2_CFD/include/limiters/computeLimiters_impl.hpp @@ -4,14 +4,14 @@ * \note Common methods are derived by defining small details * via specialization of CLimiterDetails. * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics/CGradSmoothing.hpp b/SU2_CFD/include/numerics/CGradSmoothing.hpp index 7ebe74b326d6..392610331acd 100644 --- a/SU2_CFD/include/numerics/CGradSmoothing.hpp +++ b/SU2_CFD/include/numerics/CGradSmoothing.hpp @@ -2,14 +2,14 @@ * \file CGradSmoothing.hpp * \brief Declarations and inlines of the numerics class for gradient smoothing. * \author T.Dick - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics/CNumerics.hpp b/SU2_CFD/include/numerics/CNumerics.hpp index 535335947caf..2ad25b65f1b6 100644 --- a/SU2_CFD/include/numerics/CNumerics.hpp +++ b/SU2_CFD/include/numerics/CNumerics.hpp @@ -3,14 +3,14 @@ * \brief Declaration of the base numerics class, the * implementation is in the CNumerics.cpp file. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -1483,10 +1483,10 @@ class CNumerics { inline virtual void Compute_Mass_Matrix(CElement *element_container, const CConfig* config) { } /*! - * \brief A virtual member to compute the residual component due to dead loads + * \brief A virtual member to compute the residual component due to body forces. * \param[in] element_container - Element structure for the particular element integrated. */ - inline virtual void Compute_Dead_Load(CElement *element_container, const CConfig* config) { } + inline virtual void Compute_Body_Forces(CElement *element_container, const CConfig* config) { } /*! * \brief A virtual member to compute the averaged nodal stresses diff --git a/SU2_CFD/include/numerics/NEMO/CNEMONumerics.hpp b/SU2_CFD/include/numerics/NEMO/CNEMONumerics.hpp index cf243f31bc5c..d728a2390ccb 100644 --- a/SU2_CFD/include/numerics/NEMO/CNEMONumerics.hpp +++ b/SU2_CFD/include/numerics/NEMO/CNEMONumerics.hpp @@ -2,14 +2,14 @@ * \file CNEMONumerics.hpp * \brief Base class template NEMO numerics. * \author C. Garbacz, W. Maier, S. R. Copeland - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics/NEMO/NEMO_diffusion.hpp b/SU2_CFD/include/numerics/NEMO/NEMO_diffusion.hpp index 334e64f3d392..e8efaca32eaf 100644 --- a/SU2_CFD/include/numerics/NEMO/NEMO_diffusion.hpp +++ b/SU2_CFD/include/numerics/NEMO/NEMO_diffusion.hpp @@ -2,14 +2,14 @@ * \file NEMO_diffusion.hpp * \brief Declarations of numerics classes for viscous flux computation. * \author S.R. Copeland, W. Maier, C. Garbacz. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -34,7 +34,7 @@ * \brief Class for computing viscous term using the average of gradients. * \ingroup ViscDiscr * \author S.R. Copeland, W. Maier, C. Garbacz - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CAvgGrad_NEMO : public CNEMONumerics { private: @@ -90,7 +90,7 @@ class CAvgGrad_NEMO : public CNEMONumerics { * \brief Class for computing viscous term using the average of gradients. * \ingroup ViscDiscr * \author C. Garbacz, W. Maier, S.R. Copeland. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CAvgGradCorrected_NEMO : public CNEMONumerics { private: diff --git a/SU2_CFD/include/numerics/NEMO/NEMO_sources.hpp b/SU2_CFD/include/numerics/NEMO/NEMO_sources.hpp index 08209418ad5d..781936acdcc5 100644 --- a/SU2_CFD/include/numerics/NEMO/NEMO_sources.hpp +++ b/SU2_CFD/include/numerics/NEMO/NEMO_sources.hpp @@ -2,14 +2,14 @@ * \file NEMO_sources.hpp * \brief Declarations of numerics classes for source-term integration. * \author C. Garbacz, W. Maier, S. Copeland. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -34,7 +34,7 @@ * \brief Class for two-temperature model source terms. * \ingroup SourceDiscr * \author C. Garbacz, W. Maier, S. Copeland. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CSource_NEMO : public CNEMONumerics { private: diff --git a/SU2_CFD/include/numerics/NEMO/convection/ausm_slau.hpp b/SU2_CFD/include/numerics/NEMO/convection/ausm_slau.hpp index 4b6b4000a18a..d8d1c60654be 100644 --- a/SU2_CFD/include/numerics/NEMO/convection/ausm_slau.hpp +++ b/SU2_CFD/include/numerics/NEMO/convection/ausm_slau.hpp @@ -2,14 +2,14 @@ * \file ausm_slau.hpp * \brief Declaration of numerics classes for the AUSM and SLAU family of schemes in NEMO. * \author F. Palacios, S.R. Copeland, W. Maier, C. Garbacz - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics/NEMO/convection/lax.hpp b/SU2_CFD/include/numerics/NEMO/convection/lax.hpp index 3414a92911b2..2d49ec7dfaf8 100644 --- a/SU2_CFD/include/numerics/NEMO/convection/lax.hpp +++ b/SU2_CFD/include/numerics/NEMO/convection/lax.hpp @@ -2,14 +2,14 @@ * \file lax.hpp * \brief Declaration of numerics classes for Lax centered scheme. * \author F. Palacios, S.R. Copeland, W. Maier, C. Garbacz - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics/NEMO/convection/msw.hpp b/SU2_CFD/include/numerics/NEMO/convection/msw.hpp index 62354bc1705d..9208b48024a4 100644 --- a/SU2_CFD/include/numerics/NEMO/convection/msw.hpp +++ b/SU2_CFD/include/numerics/NEMO/convection/msw.hpp @@ -2,14 +2,14 @@ * \file msw.hpp * \brief Declaration of numerics classes for modified Steger-Warming scheme. * \author ADL Stanford, S.R. Copeland, W. Maier, C. Garbacz - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -34,7 +34,7 @@ * \brief Class for solving a flux-vector splitting method by Steger & Warming, modified version. * \ingroup ConvDiscr * \author ADL Stanford, S.R. Copeland, W. Maier, C. Garbacz - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CUpwMSW_NEMO : public CNEMONumerics { private: diff --git a/SU2_CFD/include/numerics/NEMO/convection/roe.hpp b/SU2_CFD/include/numerics/NEMO/convection/roe.hpp index e91e828eb450..efb3b93c0137 100644 --- a/SU2_CFD/include/numerics/NEMO/convection/roe.hpp +++ b/SU2_CFD/include/numerics/NEMO/convection/roe.hpp @@ -2,14 +2,14 @@ * \file roe.hpp * \brief Declarations of numerics classes for Roe-type schemes in NEMO. * \author S.R. Copeland, W. Maier, C. Garbacz - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -34,7 +34,7 @@ * \brief Class for evaluating the Riemann problem using Roe's scheme for a two-temperature model. * \ingroup ConvDiscr * \author S. R. Copeland, W. Maier, C. Garbacz - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CUpwRoe_NEMO : public CNEMONumerics { private: diff --git a/SU2_CFD/include/numerics/continuous_adjoint/adj_convection.hpp b/SU2_CFD/include/numerics/continuous_adjoint/adj_convection.hpp index 6ee5075b42a4..5a5648cee4e4 100644 --- a/SU2_CFD/include/numerics/continuous_adjoint/adj_convection.hpp +++ b/SU2_CFD/include/numerics/continuous_adjoint/adj_convection.hpp @@ -3,14 +3,14 @@ * \brief Declarations of numerics classes for continuous adjoint * convective discretization. Implemented in adj_convection.cpp. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics/continuous_adjoint/adj_diffusion.hpp b/SU2_CFD/include/numerics/continuous_adjoint/adj_diffusion.hpp index ae79e2911785..f29df75d260b 100644 --- a/SU2_CFD/include/numerics/continuous_adjoint/adj_diffusion.hpp +++ b/SU2_CFD/include/numerics/continuous_adjoint/adj_diffusion.hpp @@ -3,14 +3,14 @@ * \brief Declarations of numerics classes for continuous adjoint * diffusion discretization. Implemented in adj_diffusion.cpp. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics/continuous_adjoint/adj_sources.hpp b/SU2_CFD/include/numerics/continuous_adjoint/adj_sources.hpp index 789ff7b57d2b..a7a6e3f2eb9a 100644 --- a/SU2_CFD/include/numerics/continuous_adjoint/adj_sources.hpp +++ b/SU2_CFD/include/numerics/continuous_adjoint/adj_sources.hpp @@ -3,14 +3,14 @@ * \brief Declarations of numerics classes for continuous adjoint * source term integration. Implemented in adj_sources.cpp. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics/elasticity/CFEAElasticity.hpp b/SU2_CFD/include/numerics/elasticity/CFEAElasticity.hpp index 11470fd0fba6..a277416cc9c4 100644 --- a/SU2_CFD/include/numerics/elasticity/CFEAElasticity.hpp +++ b/SU2_CFD/include/numerics/elasticity/CFEAElasticity.hpp @@ -2,14 +2,14 @@ * \file CFEAElasticity.hpp * \brief Declaration and inlines of the base class for elasticity problems. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -38,7 +38,7 @@ * The methods we override in this class with an empty implementation are here just to better * document the public interface of this class hierarchy. * \author R.Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CFEAElasticity : public CNumerics { @@ -54,15 +54,20 @@ class CFEAElasticity : public CNumerics { su2double Nu = 0.0; /*!< \brief Aux. variable, Poisson's ratio. */ su2double Rho_s = 0.0; /*!< \brief Aux. variable, Structural density. */ su2double Rho_s_DL = 0.0; /*!< \brief Aux. variable, Structural density (for dead loads). */ + su2double Alpha = 0.0; /*!< \brief Aux. variable, thermal expansion coefficient. */ su2double Mu = 0.0; /*!< \brief Aux. variable, Lame's coeficient. */ su2double Lambda = 0.0; /*!< \brief Aux. variable, Lame's coeficient. */ su2double Kappa = 0.0; /*!< \brief Aux. variable, Compressibility constant. */ + su2double ThermalStressTerm = 0.0; /*!< \brief Aux. variable, Relationship between stress and delta T. */ su2double *E_i = nullptr; /*!< \brief Young's modulus of elasticity. */ su2double *Nu_i = nullptr; /*!< \brief Poisson's ratio. */ su2double *Rho_s_i = nullptr; /*!< \brief Structural density. */ su2double *Rho_s_DL_i = nullptr; /*!< \brief Structural density (for dead loads). */ + su2double *Alpha_i = nullptr; /*!< \brief Thermal expansion coefficient. */ + + su2double ReferenceTemperature = 0.0; /*!< \brief Reference temperature for thermal expansion. */ su2double **Ba_Mat = nullptr; /*!< \brief Matrix B for node a - Auxiliary. */ su2double **Bb_Mat = nullptr; /*!< \brief Matrix B for node b - Auxiliary. */ @@ -72,8 +77,6 @@ class CFEAElasticity : public CNumerics { su2double **GradNi_Ref_Mat = nullptr; /*!< \brief Gradients of Ni - Auxiliary. */ su2double **GradNi_Curr_Mat = nullptr; /*!< \brief Gradients of Ni - Auxiliary. */ - su2double *FAux_Dead_Load = nullptr; /*!< \brief Auxiliar vector for the dead loads */ - su2double *DV_Val = nullptr; /*!< \brief For optimization cases, value of the design variables. */ unsigned short n_DV = 0; /*!< \brief For optimization cases, number of design variables. */ @@ -156,11 +159,11 @@ class CFEAElasticity : public CNumerics { void Compute_Mass_Matrix(CElement *element_container, const CConfig *config) final; /*! - * \brief Compute the nodal gravity loads for an element. - * \param[in,out] element_container - The element for which the dead loads are computed. + * \brief Compute the nodal inertial loads for an element. + * \param[in,out] element_container - The element for which the inertial loads are computed. * \param[in] config - Definition of the problem. */ - void Compute_Dead_Load(CElement *element_container, const CConfig *config) final; + void Compute_Body_Forces(CElement *element_container, const CConfig *config) final; /*! * \brief Build the tangent stiffness matrix of an element. @@ -230,6 +233,8 @@ class CFEAElasticity : public CNumerics { Mu = E / (2.0*(1.0 + Nu)); Lambda = Nu*E/((1.0+Nu)*(1.0-2.0*Nu)); Kappa = Lambda + (2/3)*Mu; + /*--- https://solidmechanics.org/Text/Chapter3_2/Chapter3_2.php ---*/ + ThermalStressTerm = -Alpha * E / (1 - (plane_stress ? 1 : 2) * Nu); } /*! @@ -238,8 +243,8 @@ class CFEAElasticity : public CNumerics { * \param[in] jVar - Index j. * \return 1 if i=j, 0 otherwise. */ - inline static su2double deltaij(unsigned short iVar, unsigned short jVar) { - return su2double(iVar==jVar); + inline static passivedouble deltaij(unsigned short iVar, unsigned short jVar) { + return static_cast(iVar == jVar); } }; diff --git a/SU2_CFD/include/numerics/elasticity/CFEALinearElasticity.hpp b/SU2_CFD/include/numerics/elasticity/CFEALinearElasticity.hpp index 6d836702ce91..538cea6bba2b 100644 --- a/SU2_CFD/include/numerics/elasticity/CFEALinearElasticity.hpp +++ b/SU2_CFD/include/numerics/elasticity/CFEALinearElasticity.hpp @@ -2,14 +2,14 @@ * \file CFEALinearElasticity.hpp * \brief Declaration and inlines of the linear elasticity FE numerics class. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -35,7 +35,7 @@ * \brief Class for computing the stiffness matrix of a linear, elastic problem. * \ingroup Elasticity_Equations * \author R.Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CFEALinearElasticity : public CFEAElasticity { protected: @@ -90,7 +90,7 @@ class CFEALinearElasticity : public CFEAElasticity { * \brief Particular case of linear elasticity used for mesh deformation. * \ingroup Elasticity_Equations * \author R.Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CFEAMeshElasticity final : public CFEALinearElasticity { diff --git a/SU2_CFD/include/numerics/elasticity/CFEANonlinearElasticity.hpp b/SU2_CFD/include/numerics/elasticity/CFEANonlinearElasticity.hpp index 0e57f54e5297..4e477f829290 100644 --- a/SU2_CFD/include/numerics/elasticity/CFEANonlinearElasticity.hpp +++ b/SU2_CFD/include/numerics/elasticity/CFEANonlinearElasticity.hpp @@ -2,14 +2,14 @@ * \file CFEANonlinearElasticity.hpp * \brief Declaration and inlines of the nonlinear elasticity FE numerics class. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -37,7 +37,7 @@ * Compute_Plane_Stress_Term and Compute_Stress_Tensor. * \ingroup Elasticity_Equations * \author R.Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CFEANonlinearElasticity : public CFEAElasticity { @@ -141,8 +141,9 @@ class CFEANonlinearElasticity : public CFEAElasticity { * \brief Compute the stress tensor. * \param[in,out] element_container - The finite element. * \param[in] config - Definition of the problem. + * \param[in] iGauss - Index of Gaussian integration point. */ - virtual void Compute_Stress_Tensor(CElement *element_container, const CConfig *config) = 0; + virtual void Compute_Stress_Tensor(CElement *element_container, const CConfig *config, unsigned short iGauss) = 0; /*! * \brief Update an element with Maxwell's stress. diff --git a/SU2_CFD/include/numerics/elasticity/nonlinear_models.hpp b/SU2_CFD/include/numerics/elasticity/nonlinear_models.hpp index a36eee0a67d3..4463b738120d 100644 --- a/SU2_CFD/include/numerics/elasticity/nonlinear_models.hpp +++ b/SU2_CFD/include/numerics/elasticity/nonlinear_models.hpp @@ -2,14 +2,14 @@ * \file nonlinear_models.hpp * \brief Declarations of nonlinear constitutive models. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -35,7 +35,7 @@ * \brief Class for computing the constitutive and stress tensors for a neo-Hookean material model, compressible. * \ingroup Elasticity_Equations * \author R.Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CFEM_NeoHookean_Comp final : public CFEANonlinearElasticity { @@ -73,7 +73,7 @@ class CFEM_NeoHookean_Comp final : public CFEANonlinearElasticity { * \param[in,out] element_container - The finite element. * \param[in] config - Definition of the problem. */ - void Compute_Stress_Tensor(CElement *element_container, const CConfig *config) override; + void Compute_Stress_Tensor(CElement *element_container, const CConfig *config, unsigned short iGauss) override; }; @@ -83,7 +83,7 @@ class CFEM_NeoHookean_Comp final : public CFEANonlinearElasticity { * \brief Constitutive and stress tensors for a Knowles stored-energy function, nearly incompressible. * \ingroup Elasticity_Equations * \author R.Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CFEM_Knowles_NearInc final : public CFEANonlinearElasticity { @@ -124,7 +124,7 @@ class CFEM_Knowles_NearInc final : public CFEANonlinearElasticity { * \param[in,out] element_container - The finite element. * \param[in] config - Definition of the problem. */ - void Compute_Stress_Tensor(CElement *element_container, const CConfig *config) override; + void Compute_Stress_Tensor(CElement *element_container, const CConfig *config, unsigned short iGauss) override; }; @@ -134,7 +134,7 @@ class CFEM_Knowles_NearInc final : public CFEANonlinearElasticity { * \brief Class for computing the constitutive and stress tensors for a dielectric elastomer. * \ingroup Elasticity_Equations * \author R.Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CFEM_DielectricElastomer final : public CFEANonlinearElasticity { @@ -172,7 +172,7 @@ class CFEM_DielectricElastomer final : public CFEANonlinearElasticity { * \param[in,out] element_container - The finite element. * \param[in] config - Definition of the problem. */ - void Compute_Stress_Tensor(CElement *element_container, const CConfig *config) override; + void Compute_Stress_Tensor(CElement *element_container, const CConfig *config, unsigned short iGauss) override; }; @@ -182,7 +182,7 @@ class CFEM_DielectricElastomer final : public CFEANonlinearElasticity { * \brief Class for computing the constitutive and stress tensors for a nearly-incompressible ideal DE. * \ingroup Elasticity_Equations * \author R.Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CFEM_IdealDE final : public CFEANonlinearElasticity { @@ -222,6 +222,6 @@ class CFEM_IdealDE final : public CFEANonlinearElasticity { * \param[in,out] element_container - The finite element. * \param[in] config - Definition of the problem. */ - void Compute_Stress_Tensor(CElement *element_container, const CConfig *config) override; + void Compute_Stress_Tensor(CElement *element_container, const CConfig *config, unsigned short iGauss) override; }; diff --git a/SU2_CFD/include/numerics/flow/convection/ausm_slau.hpp b/SU2_CFD/include/numerics/flow/convection/ausm_slau.hpp index b328f961f244..c681d96fb93f 100644 --- a/SU2_CFD/include/numerics/flow/convection/ausm_slau.hpp +++ b/SU2_CFD/include/numerics/flow/convection/ausm_slau.hpp @@ -3,14 +3,14 @@ * \brief Declaration of numerics classes for the AUSM family of schemes, * including SLAU. The implementation is in ausm.cpp. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics/flow/convection/centered.hpp b/SU2_CFD/include/numerics/flow/convection/centered.hpp index 3898698f1662..6e7d3190733a 100644 --- a/SU2_CFD/include/numerics/flow/convection/centered.hpp +++ b/SU2_CFD/include/numerics/flow/convection/centered.hpp @@ -3,14 +3,14 @@ * \brief Declaration of numerics classes for centered schemes, * the implementation is in centered.cpp. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics/flow/convection/fds.hpp b/SU2_CFD/include/numerics/flow/convection/fds.hpp index e72db06db6a3..6e93b06ea8d8 100644 --- a/SU2_CFD/include/numerics/flow/convection/fds.hpp +++ b/SU2_CFD/include/numerics/flow/convection/fds.hpp @@ -3,14 +3,14 @@ * \brief Declarations of classes for Flux-Difference-Spliting schemes, * the implementations are in fds.cpp * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics/flow/convection/fvs.hpp b/SU2_CFD/include/numerics/flow/convection/fvs.hpp index 241712b5c6e9..1f7180d43999 100644 --- a/SU2_CFD/include/numerics/flow/convection/fvs.hpp +++ b/SU2_CFD/include/numerics/flow/convection/fvs.hpp @@ -3,14 +3,14 @@ * \brief Declarations of classes for Flux-Vector-Spliting schemes, * the implementations are in fvs.cpp. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics/flow/convection/hllc.hpp b/SU2_CFD/include/numerics/flow/convection/hllc.hpp index d1634a88bf20..8e8db14bae26 100644 --- a/SU2_CFD/include/numerics/flow/convection/hllc.hpp +++ b/SU2_CFD/include/numerics/flow/convection/hllc.hpp @@ -2,14 +2,14 @@ * \file hllc.hpp * \brief Declaration of HLLC numerics classes, implemented in hllc.cpp. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -34,7 +34,7 @@ * \brief Class for solving an approximate Riemann HLLC. * \ingroup ConvDiscr * \author G. Gori, Politecnico di Milano - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CUpwHLLC_Flow final : public CNumerics { private: @@ -86,7 +86,7 @@ class CUpwHLLC_Flow final : public CNumerics { * \brief Class for solving an approximate Riemann HLLC. * \ingroup ConvDiscr * \author G. Gori, Politecnico di Milano - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CUpwGeneralHLLC_Flow final : public CNumerics { private: diff --git a/SU2_CFD/include/numerics/flow/convection/roe.hpp b/SU2_CFD/include/numerics/flow/convection/roe.hpp index d3a137f6dc17..72c897cc6988 100644 --- a/SU2_CFD/include/numerics/flow/convection/roe.hpp +++ b/SU2_CFD/include/numerics/flow/convection/roe.hpp @@ -3,14 +3,14 @@ * \brief Declarations of numerics classes for Roe-type schemes, * implemented in roe.cpp. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -119,7 +119,7 @@ class CUpwRoe_Flow final : public CUpwRoeBase_Flow { * \brief Class for solving an approximate Riemann solver of L2Roe for the flow equations. * \ingroup ConvDiscr * \author E. Molina, A. Bueno, F. Palacios, P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CUpwL2Roe_Flow final : public CUpwRoeBase_Flow { private: @@ -149,7 +149,7 @@ class CUpwL2Roe_Flow final : public CUpwRoeBase_Flow { * \brief Class for solving an approximate Riemann solver of LMRoe for the flow equations. * \ingroup ConvDiscr * \author E. Molina, A. Bueno, F. Palacios, P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CUpwLMRoe_Flow final : public CUpwRoeBase_Flow { private: diff --git a/SU2_CFD/include/numerics/flow/flow_diffusion.hpp b/SU2_CFD/include/numerics/flow/flow_diffusion.hpp index 654bc91e6ac7..4702b0b9186d 100644 --- a/SU2_CFD/include/numerics/flow/flow_diffusion.hpp +++ b/SU2_CFD/include/numerics/flow/flow_diffusion.hpp @@ -2,14 +2,14 @@ * \file flow_diffusion.hpp * \brief Declarations of numerics classes for viscous flux computation. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics/flow/flow_sources.hpp b/SU2_CFD/include/numerics/flow/flow_sources.hpp index e4cb64e4b54e..8bea6004f30e 100644 --- a/SU2_CFD/include/numerics/flow/flow_sources.hpp +++ b/SU2_CFD/include/numerics/flow/flow_sources.hpp @@ -2,14 +2,14 @@ * \file flow_sources.hpp * \brief Declarations of numerics classes for source-term integration. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -177,7 +177,7 @@ class CSourceBodyForce final : public CSourceBase_Flow { * \brief Class for the source term integration of a body force in the incompressible solver. * \ingroup SourceDiscr * \author T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CSourceIncBodyForce final : public CSourceBase_Flow { su2double Body_Force_Vector[3]; @@ -204,7 +204,7 @@ class CSourceIncBodyForce final : public CSourceBase_Flow { * \brief Class for the source term integration of the Boussinesq approximation for incompressible flow. * \ingroup SourceDiscr * \author T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CSourceBoussinesq final : public CSourceBase_Flow { su2double Gravity_Vector[3]; diff --git a/SU2_CFD/include/numerics/heat.hpp b/SU2_CFD/include/numerics/heat.hpp index cfea4441d538..70900a371ef9 100644 --- a/SU2_CFD/include/numerics/heat.hpp +++ b/SU2_CFD/include/numerics/heat.hpp @@ -2,14 +2,14 @@ * \file heat.hpp * \brief Declarations of numerics classes for heat transfer problems. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -36,7 +36,7 @@ * \brief Class for doing a scalar upwind solver for the heat convection equation. * \ingroup ConvDiscr * \author O. Burghardt. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CUpwSca_Heat final : public CUpwScalar> { public: @@ -70,7 +70,7 @@ class CUpwSca_Heat final : public CUpwScalar { public: diff --git a/SU2_CFD/include/numerics/radiation.hpp b/SU2_CFD/include/numerics/radiation.hpp index 6a926be2f2b2..438a030e3c39 100644 --- a/SU2_CFD/include/numerics/radiation.hpp +++ b/SU2_CFD/include/numerics/radiation.hpp @@ -3,14 +3,14 @@ * \brief Declaration and inlines of the classes used to compute * residual terms in radiation problems. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics/scalar/scalar_convection.hpp b/SU2_CFD/include/numerics/scalar/scalar_convection.hpp index 3e44479ac173..f6cf9d0f1103 100644 --- a/SU2_CFD/include/numerics/scalar/scalar_convection.hpp +++ b/SU2_CFD/include/numerics/scalar/scalar_convection.hpp @@ -3,14 +3,14 @@ * \brief Declarations of numerics classes for discretization of * convective fluxes in scalar problems. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics/scalar/scalar_diffusion.hpp b/SU2_CFD/include/numerics/scalar/scalar_diffusion.hpp index 4e588c59d6c1..0e434362821b 100644 --- a/SU2_CFD/include/numerics/scalar/scalar_diffusion.hpp +++ b/SU2_CFD/include/numerics/scalar/scalar_diffusion.hpp @@ -3,14 +3,14 @@ * \brief Declarations of numerics classes for discretization of * viscous fluxes in scalar problems. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics/scalar/scalar_sources.hpp b/SU2_CFD/include/numerics/scalar/scalar_sources.hpp index 08453f59f63a..f379dd9624e6 100644 --- a/SU2_CFD/include/numerics/scalar/scalar_sources.hpp +++ b/SU2_CFD/include/numerics/scalar/scalar_sources.hpp @@ -1,14 +1,14 @@ /*! * \file scalar_sources.hpp * \brief Declarations of numerics classes for integration of source terms in scalar problems. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics/species/species_convection.hpp b/SU2_CFD/include/numerics/species/species_convection.hpp index d3384f293673..5521d8892ed3 100644 --- a/SU2_CFD/include/numerics/species/species_convection.hpp +++ b/SU2_CFD/include/numerics/species/species_convection.hpp @@ -3,14 +3,14 @@ * \brief Declarations of numerics classes for discretization of * convective fluxes in species problems. * \author T. Kattmann - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics/species/species_diffusion.hpp b/SU2_CFD/include/numerics/species/species_diffusion.hpp index 5a914dfc528f..5a29cde4b82b 100644 --- a/SU2_CFD/include/numerics/species/species_diffusion.hpp +++ b/SU2_CFD/include/numerics/species/species_diffusion.hpp @@ -3,14 +3,14 @@ * \brief Declarations of numerics classes for discretization of * viscous fluxes in species problems. * \author T. Kattmann - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics/species/species_sources.hpp b/SU2_CFD/include/numerics/species/species_sources.hpp index fb95e4146990..85f58832e955 100644 --- a/SU2_CFD/include/numerics/species/species_sources.hpp +++ b/SU2_CFD/include/numerics/species/species_sources.hpp @@ -3,14 +3,14 @@ * \brief Declarations of numerics classes for integration of source * terms in species problems. * \author T. Kattmann - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics/template.hpp b/SU2_CFD/include/numerics/template.hpp index 6bce5fbe9874..430534bb5028 100644 --- a/SU2_CFD/include/numerics/template.hpp +++ b/SU2_CFD/include/numerics/template.hpp @@ -5,14 +5,14 @@ * new schemes in SU2, in practice you should look for a similar * scheme and try to re-use functionality (not by copy-paste). * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics/turbulent/transition/trans_convection.hpp b/SU2_CFD/include/numerics/turbulent/transition/trans_convection.hpp index 82912d00c74e..bacf7ac276a0 100644 --- a/SU2_CFD/include/numerics/turbulent/transition/trans_convection.hpp +++ b/SU2_CFD/include/numerics/turbulent/transition/trans_convection.hpp @@ -3,14 +3,14 @@ * \brief Delarations of numerics classes for discretization of * convective fluxes in transition problems. * \author S. Kang - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics/turbulent/transition/trans_correlations.hpp b/SU2_CFD/include/numerics/turbulent/transition/trans_correlations.hpp index 617258174c93..f6c002653f5c 100644 --- a/SU2_CFD/include/numerics/turbulent/transition/trans_correlations.hpp +++ b/SU2_CFD/include/numerics/turbulent/transition/trans_correlations.hpp @@ -1,14 +1,14 @@ /*! * \file trans_correlations.hpp * \brief Numerics class for the LM model's correlation functions. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics/turbulent/transition/trans_diffusion.hpp b/SU2_CFD/include/numerics/turbulent/transition/trans_diffusion.hpp index 372d89b253c5..d94e61e0d0b5 100644 --- a/SU2_CFD/include/numerics/turbulent/transition/trans_diffusion.hpp +++ b/SU2_CFD/include/numerics/turbulent/transition/trans_diffusion.hpp @@ -3,14 +3,14 @@ * \brief Declarations of numerics classes for discretization of * viscous fluxes in transition problems. * \author S. Kang - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics/turbulent/transition/trans_sources.hpp b/SU2_CFD/include/numerics/turbulent/transition/trans_sources.hpp index 4030e35bab9c..72e7cef929f0 100644 --- a/SU2_CFD/include/numerics/turbulent/transition/trans_sources.hpp +++ b/SU2_CFD/include/numerics/turbulent/transition/trans_sources.hpp @@ -1,14 +1,14 @@ /*! * \file trans_sources.hpp * \brief Numerics classes for integration of source terms in transition problems. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics/turbulent/turb_convection.hpp b/SU2_CFD/include/numerics/turbulent/turb_convection.hpp index 96b3bc3c703c..ec8c83b8c996 100644 --- a/SU2_CFD/include/numerics/turbulent/turb_convection.hpp +++ b/SU2_CFD/include/numerics/turbulent/turb_convection.hpp @@ -3,14 +3,14 @@ * \brief Declarations of numerics classes for discretization of * convective fluxes in turbulence problems. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics/turbulent/turb_diffusion.hpp b/SU2_CFD/include/numerics/turbulent/turb_diffusion.hpp index d4f53c0606de..b8edcd9007a7 100644 --- a/SU2_CFD/include/numerics/turbulent/turb_diffusion.hpp +++ b/SU2_CFD/include/numerics/turbulent/turb_diffusion.hpp @@ -3,14 +3,14 @@ * \brief Declarations of numerics classes for discretization of * viscous fluxes in turbulence problems. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics/turbulent/turb_sources.hpp b/SU2_CFD/include/numerics/turbulent/turb_sources.hpp index c9464b1dfc32..4fa9080e1ad5 100644 --- a/SU2_CFD/include/numerics/turbulent/turb_sources.hpp +++ b/SU2_CFD/include/numerics/turbulent/turb_sources.hpp @@ -1,14 +1,14 @@ /*! * \file turb_sources.hpp * \brief Numerics classes for integration of source terms in turbulence problems. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -345,18 +345,19 @@ struct Bsl { /*--- Limiting of \hat{S} based on "Modifications and Clarifications for the Implementation of the Spalart-Allmaras Turbulence Model" * Note 1 option c in https://turbmodels.larc.nasa.gov/spalart.html ---*/ + const su2double d_Sbar = (var.fv2 + nue * var.d_fv2) * var.inv_k2_d2; if (Sbar >= - c2 * var.Omega) { var.Shat = var.Omega + Sbar; + var.d_Shat = d_Sbar; } else { const su2double Num = var.Omega * (c2 * c2 * var.Omega + c3 * Sbar); const su2double Den = (c3 - 2 * c2) * var.Omega - Sbar; var.Shat = var.Omega + Num / Den; + var.d_Shat = d_Sbar * (c3 * var.Omega + Num / Den) / Den; } if (var.Shat <= 1e-10) { var.Shat = 1e-10; var.d_Shat = 0.0; - } else { - var.d_Shat = (var.fv2 + nue * var.d_fv2) * var.inv_k2_d2; } } }; diff --git a/SU2_CFD/include/numerics_simd/CNumericsSIMD.cpp b/SU2_CFD/include/numerics_simd/CNumericsSIMD.cpp index 8e9c22224af3..91fbfc7abffa 100644 --- a/SU2_CFD/include/numerics_simd/CNumericsSIMD.cpp +++ b/SU2_CFD/include/numerics_simd/CNumericsSIMD.cpp @@ -4,14 +4,14 @@ * \note This should be the only cpp for this family of classes * (which are all templates). All compilation takes place here. * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics_simd/CNumericsSIMD.hpp b/SU2_CFD/include/numerics_simd/CNumericsSIMD.hpp index ad838437d5f1..69e9bbaf532e 100644 --- a/SU2_CFD/include/numerics_simd/CNumericsSIMD.hpp +++ b/SU2_CFD/include/numerics_simd/CNumericsSIMD.hpp @@ -2,14 +2,14 @@ * \file CNumericsSIMD.hpp * \brief Vectorized (SIMD) numerics classes. * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics_simd/flow/convection/centered.hpp b/SU2_CFD/include/numerics_simd/flow/convection/centered.hpp index 4e73ab5b7529..be608d395625 100644 --- a/SU2_CFD/include/numerics_simd/flow/convection/centered.hpp +++ b/SU2_CFD/include/numerics_simd/flow/convection/centered.hpp @@ -2,14 +2,14 @@ * \file centered.hpp * \brief Centered convective schemes. * \author P. Gomes, F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics_simd/flow/convection/common.hpp b/SU2_CFD/include/numerics_simd/flow/convection/common.hpp index 6cd97b1bdf41..8352a772c59e 100644 --- a/SU2_CFD/include/numerics_simd/flow/convection/common.hpp +++ b/SU2_CFD/include/numerics_simd/flow/convection/common.hpp @@ -2,14 +2,14 @@ * \file common.hpp * \brief Common convection-related methods. * \author P. Gomes, F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -35,14 +35,15 @@ /*! * \brief Unlimited reconstruction. */ -template +template FORCEINLINE void musclUnlimited(Int iPoint, const VectorDbl& vector_ij, Double scale, const Gradient_t& gradient, VectorDbl& vars) { - auto grad = gatherVariables(iPoint, gradient); - for (size_t iVar = 0; iVar < nVar; ++iVar) { + constexpr auto nVarGrad = nVarGrad_ > 0 ? nVarGrad_ : nVar; + auto grad = gatherVariables(iPoint, gradient); + for (size_t iVar = 0; iVar < nVarGrad; ++iVar) { vars(iVar) += scale * dot(grad[iVar], vector_ij); } } @@ -50,16 +51,17 @@ FORCEINLINE void musclUnlimited(Int iPoint, /*! * \brief Limited reconstruction with point-based limiter. */ -template +template FORCEINLINE void musclPointLimited(Int iPoint, const VectorDbl& vector_ij, Double scale, const Limiter_t& limiter, const Gradient_t& gradient, VectorDbl& vars) { - auto lim = gatherVariables(iPoint, limiter); - auto grad = gatherVariables(iPoint, gradient); - for (size_t iVar = 0; iVar < nVar; ++iVar) { + constexpr auto nVarGrad = nVarGrad_ > 0 ? nVarGrad_ : nVar; + auto lim = gatherVariables(iPoint, limiter); + auto grad = gatherVariables(iPoint, gradient); + for (size_t iVar = 0; iVar < nVarGrad; ++iVar) { vars(iVar) += lim(iVar) * scale * dot(grad[iVar], vector_ij); } } @@ -67,18 +69,18 @@ FORCEINLINE void musclPointLimited(Int iPoint, /*! * \brief Limited reconstruction with edge-based limiter. */ -template +template FORCEINLINE void musclEdgeLimited(Int iPoint, Int jPoint, const VectorDbl& vector_ij, const Gradient_t& gradient, CPair& V) { - constexpr size_t nVar = VarType::nVar; + constexpr auto nVarGrad = nVarGrad_ > 0 ? nVarGrad_ : VarType::nVar; - auto grad_i = gatherVariables(iPoint, gradient); - auto grad_j = gatherVariables(jPoint, gradient); + auto grad_i = gatherVariables(iPoint, gradient); + auto grad_j = gatherVariables(jPoint, gradient); - for (size_t iVar = 0; iVar < nVar; ++iVar) { + for (size_t iVar = 0; iVar < nVarGrad; ++iVar) { const Double proj_i = dot(grad_i[iVar], vector_ij); const Double proj_j = dot(grad_j[iVar], vector_ij); const Double delta_ij = V.j.all(iVar) - V.i.all(iVar); @@ -93,8 +95,12 @@ FORCEINLINE void musclEdgeLimited(Int iPoint, /*! * \brief Retrieve primitive variables for points i/j, reconstructing them if needed. + * \note Density and enthalpy are recomputed from ideal gas EOS. * \param[in] iEdge, iPoint, jPoint - Edge and its nodes. + * \param[in] gamma - Heat capacity ratio. + * \param[in] gasConst - Specific gas constant. * \param[in] muscl - If true, reconstruct, else simply fetch. + * \param[in] limiterType - Type of flux limiter. * \param[in] V1st - Pair of compressible flow primitives for nodes i,j. * \param[in] vector_ij - Distance vector from i to j. * \param[in] solution - Entire solution container (a derived CVariable). @@ -102,6 +108,8 @@ FORCEINLINE void musclEdgeLimited(Int iPoint, */ template FORCEINLINE CPair reconstructPrimitives(Int iEdge, Int iPoint, Int jPoint, + const su2double& gamma, + const su2double& gasConst, bool muscl, LIMITER limiterType, const CPair& V1st, const VectorDbl& vector_ij, @@ -119,19 +127,29 @@ FORCEINLINE CPair reconstructPrimitives(Int iEdge, Int iPoint, Int } if (muscl) { + /*--- Recompute density and enthalpy instead of reconstructing. ---*/ + constexpr auto nVarGrad = ReconVarType::nVar - 2; + switch (limiterType) { case LIMITER::NONE: - musclUnlimited(iPoint, vector_ij, 0.5, gradients, V.i.all); - musclUnlimited(jPoint, vector_ij,-0.5, gradients, V.j.all); + musclUnlimited(iPoint, vector_ij, 0.5, gradients, V.i.all); + musclUnlimited(jPoint, vector_ij,-0.5, gradients, V.j.all); break; case LIMITER::VAN_ALBADA_EDGE: - musclEdgeLimited(iPoint, jPoint, vector_ij, gradients, V); + musclEdgeLimited(iPoint, jPoint, vector_ij, gradients, V); break; default: - musclPointLimited(iPoint, vector_ij, 0.5, limiters, gradients, V.i.all); - musclPointLimited(jPoint, vector_ij,-0.5, limiters, gradients, V.j.all); + musclPointLimited(iPoint, vector_ij, 0.5, limiters, gradients, V.i.all); + musclPointLimited(jPoint, vector_ij,-0.5, limiters, gradients, V.j.all); break; } + V.i.density() = V.i.pressure() / (gasConst * V.i.temperature()); + V.j.density() = V.j.pressure() / (gasConst * V.j.temperature()); + + const su2double cp = gasConst * gamma / (gamma - 1); + V.i.enthalpy() = cp * V.i.temperature() + 0.5 * squaredNorm(V.i.velocity()); + V.j.enthalpy() = cp * V.j.temperature() + 0.5 * squaredNorm(V.j.velocity()); + /*--- Detect a non-physical reconstruction based on negative pressure or density. ---*/ const Double neg_p_or_rho = fmax(fmin(V.i.pressure(), V.j.pressure()) < 0.0, fmin(V.i.density(), V.j.density()) < 0.0); diff --git a/SU2_CFD/include/numerics_simd/flow/convection/roe.hpp b/SU2_CFD/include/numerics_simd/flow/convection/roe.hpp index e1fb98434120..c8642d199039 100644 --- a/SU2_CFD/include/numerics_simd/flow/convection/roe.hpp +++ b/SU2_CFD/include/numerics_simd/flow/convection/roe.hpp @@ -2,14 +2,14 @@ * \file roe.hpp * \brief Roe-family of convective schemes. * \author P. Gomes, A. Bueno, F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -56,6 +56,7 @@ class CRoeBase : public Base { const su2double kappa; const su2double gamma; + const su2double gasConst; const su2double entropyFix; const bool finestGrid; const bool dynamicGrid; @@ -69,6 +70,7 @@ class CRoeBase : public Base { CRoeBase(const CConfig& config, unsigned iMesh, Ts&... args) : Base(config, iMesh, args...), kappa(config.GetRoe_Kappa()), gamma(config.GetGamma()), + gasConst(config.GetGas_ConstantND()), entropyFix(config.GetEntropyFix_Coeff()), finestGrid(iMesh == MESH_0), dynamicGrid(config.GetDynamic_Grid()), @@ -117,7 +119,7 @@ class CRoeBase : public Base { V1st.j.all = gatherVariables(jPoint, solution.GetPrimitive()); auto V = reconstructPrimitives >( - iEdge, iPoint, jPoint, muscl, typeLimiter, V1st, vector_ij, solution); + iEdge, iPoint, jPoint, gamma, gasConst, muscl, typeLimiter, V1st, vector_ij, solution); /*--- Compute conservative variables. ---*/ diff --git a/SU2_CFD/include/numerics_simd/flow/diffusion/common.hpp b/SU2_CFD/include/numerics_simd/flow/diffusion/common.hpp index 279a623c0c72..acaf26182ff5 100644 --- a/SU2_CFD/include/numerics_simd/flow/diffusion/common.hpp +++ b/SU2_CFD/include/numerics_simd/flow/diffusion/common.hpp @@ -2,14 +2,14 @@ * \file common.hpp * \brief Helper functions for viscous methods. * \author P. Gomes, C. Pederson, A. Bueno, F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics_simd/flow/diffusion/viscous_fluxes.hpp b/SU2_CFD/include/numerics_simd/flow/diffusion/viscous_fluxes.hpp index 73bfaac15376..793a8b03c956 100644 --- a/SU2_CFD/include/numerics_simd/flow/diffusion/viscous_fluxes.hpp +++ b/SU2_CFD/include/numerics_simd/flow/diffusion/viscous_fluxes.hpp @@ -2,14 +2,14 @@ * \file viscous_fluxes.hpp * \brief Decorator classes for computation of viscous fluxes. * \author P. Gomes, C. Pederson, A. Bueno, F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics_simd/flow/variables.hpp b/SU2_CFD/include/numerics_simd/flow/variables.hpp index 086adbf27dc4..281502a4ba7b 100644 --- a/SU2_CFD/include/numerics_simd/flow/variables.hpp +++ b/SU2_CFD/include/numerics_simd/flow/variables.hpp @@ -2,14 +2,14 @@ * \file variables.hpp * \brief Collection of types to store physical variables. * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/numerics_simd/util.hpp b/SU2_CFD/include/numerics_simd/util.hpp index 3af8c1d5e985..e950d6c48b66 100644 --- a/SU2_CFD/include/numerics_simd/util.hpp +++ b/SU2_CFD/include/numerics_simd/util.hpp @@ -2,14 +2,14 @@ * \file util.hpp * \brief Generic auxiliary functions. * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/CAdjElasticityOutput.hpp b/SU2_CFD/include/output/CAdjElasticityOutput.hpp index fe4509849cfd..2f9991a5fc26 100644 --- a/SU2_CFD/include/output/CAdjElasticityOutput.hpp +++ b/SU2_CFD/include/output/CAdjElasticityOutput.hpp @@ -2,14 +2,14 @@ * \file CAdjElasticityOutput.hpp * \brief Headers of the adjoint elasticity output class. * \author T. Albring, R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/CAdjFlowCompOutput.hpp b/SU2_CFD/include/output/CAdjFlowCompOutput.hpp index 9ab730cf2bdf..9e4753c0d19b 100644 --- a/SU2_CFD/include/output/CAdjFlowCompOutput.hpp +++ b/SU2_CFD/include/output/CAdjFlowCompOutput.hpp @@ -2,14 +2,14 @@ * \file CAdjFlowCompOutput.hpp * \brief Headers of the adjoint compressible flow output. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/CAdjFlowIncOutput.hpp b/SU2_CFD/include/output/CAdjFlowIncOutput.hpp index c64b95f8b690..2aee3d236ee9 100644 --- a/SU2_CFD/include/output/CAdjFlowIncOutput.hpp +++ b/SU2_CFD/include/output/CAdjFlowIncOutput.hpp @@ -2,14 +2,14 @@ * \file CAdjFlowIncOutput.hpp * \brief Headers of the adjoint incompressible flow output. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/CAdjFlowOutput.hpp b/SU2_CFD/include/output/CAdjFlowOutput.hpp index f6d6201276dc..464a931f489e 100644 --- a/SU2_CFD/include/output/CAdjFlowOutput.hpp +++ b/SU2_CFD/include/output/CAdjFlowOutput.hpp @@ -2,14 +2,14 @@ * \file CAdjFlowOutput.hpp * \brief Headers of the adjoint flow output. * \author T. Kattmann - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/CAdjHeatOutput.hpp b/SU2_CFD/include/output/CAdjHeatOutput.hpp index cd451c91c717..a1ef818a9b27 100644 --- a/SU2_CFD/include/output/CAdjHeatOutput.hpp +++ b/SU2_CFD/include/output/CAdjHeatOutput.hpp @@ -2,14 +2,14 @@ * \file CAdjHeatOutput.hpp * \brief Headers of the adjoint heat output. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/CBaselineOutput.hpp b/SU2_CFD/include/output/CBaselineOutput.hpp index 3550ab95fa3c..d7e41159e03d 100644 --- a/SU2_CFD/include/output/CBaselineOutput.hpp +++ b/SU2_CFD/include/output/CBaselineOutput.hpp @@ -2,14 +2,14 @@ * \file CBaselineOutput.hpp * \brief Headers of the baseline output. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/CElasticityOutput.hpp b/SU2_CFD/include/output/CElasticityOutput.hpp index ca65cab7a9c2..182200b2c5d0 100644 --- a/SU2_CFD/include/output/CElasticityOutput.hpp +++ b/SU2_CFD/include/output/CElasticityOutput.hpp @@ -2,14 +2,14 @@ * \file CElasticityOutput.hpp * \brief Headers of the elasticity output. * \author F. Palacios, T. Economon, M. Colonno - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -40,6 +40,7 @@ class CElasticityOutput final: public COutput { unsigned short nVar_FEM; //!< Number of FEM variables bool linear_analysis, //!< Boolean indicating a linear analysis nonlinear_analysis, //!< Boolean indicating a nonlinear analysis + coupled_heat, //!< Boolean indicating a thermoelastic analysis dynamic; //!< Boolean indicating a dynamic analysis public: @@ -82,6 +83,11 @@ class CElasticityOutput final: public COutput { * \param[in] config - Definition of the particular problem. * \return if the residuals should be initialized. */ - bool SetInitResiduals(const CConfig *config) override ; + bool SetInitResiduals(const CConfig *config) override; + /*! + * \brief LoadSurfaceData + */ + void LoadSurfaceData(CConfig *config, CGeometry *geometry, CSolver **solver, unsigned long iPoint, + unsigned short iMarker, unsigned long iVertex) override; }; diff --git a/SU2_CFD/include/output/CFVMOutput.hpp b/SU2_CFD/include/output/CFVMOutput.hpp index 8cebc03c652b..81f05e8917b5 100644 --- a/SU2_CFD/include/output/CFVMOutput.hpp +++ b/SU2_CFD/include/output/CFVMOutput.hpp @@ -2,14 +2,14 @@ * \file CFVMOutput.hpp * \brief Headers of the Finite Volume Method output. * \author T. Kattmann - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/CFlowCompFEMOutput.hpp b/SU2_CFD/include/output/CFlowCompFEMOutput.hpp index 9e7ecba4ed83..d442e0d6dec1 100644 --- a/SU2_CFD/include/output/CFlowCompFEMOutput.hpp +++ b/SU2_CFD/include/output/CFlowCompFEMOutput.hpp @@ -2,14 +2,14 @@ * \file CFlowCompFEMOutput.hpp * \brief Headers of the compressible FEM flow output. * \author R. Sanchez, T. Albring. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/CFlowCompOutput.hpp b/SU2_CFD/include/output/CFlowCompOutput.hpp index c7644a37f277..8d650a5ab831 100644 --- a/SU2_CFD/include/output/CFlowCompOutput.hpp +++ b/SU2_CFD/include/output/CFlowCompOutput.hpp @@ -2,14 +2,14 @@ * \file CFlowCompOutput.hpp * \brief Headers of the compressible flow output. * \author R. Sanchez, T. Albring. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/CFlowIncOutput.hpp b/SU2_CFD/include/output/CFlowIncOutput.hpp index fe7d78744274..930bd4e9a1d2 100644 --- a/SU2_CFD/include/output/CFlowIncOutput.hpp +++ b/SU2_CFD/include/output/CFlowIncOutput.hpp @@ -2,14 +2,14 @@ * \file CFlowIncOutput.hpp * \brief Headers of the incompressible flow output. * \author T. Albring, R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/CFlowOutput.hpp b/SU2_CFD/include/output/CFlowOutput.hpp index 9a2160723524..98b1e9e369c2 100644 --- a/SU2_CFD/include/output/CFlowOutput.hpp +++ b/SU2_CFD/include/output/CFlowOutput.hpp @@ -2,14 +2,14 @@ * \file CFlowOutput.hpp * \brief Headers of the flow output. * \author F. Palacios, T. Economon, M. Colonno - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/CHeatOutput.hpp b/SU2_CFD/include/output/CHeatOutput.hpp index 04babb1b7c33..4a033c3b86f3 100644 --- a/SU2_CFD/include/output/CHeatOutput.hpp +++ b/SU2_CFD/include/output/CHeatOutput.hpp @@ -2,14 +2,14 @@ * \file CHeatOutput.hpp * \brief Headers of the heat output. * \author R. Sanchez, T. Albring. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -50,12 +50,22 @@ class CHeatOutput final: public CFVMOutput { */ void SetHistoryOutputFields(CConfig *config) override; + /*! + * \brief Set the available history output fields in another output instance. + */ + static void SetHistoryOutputFieldsImpl(CConfig *config, COutput* output); + /*! * \brief Load the history output field values * \param[in] config - Definition of the particular problem. */ void LoadHistoryData(CConfig *config, CGeometry *geometry, CSolver **solver) override; + /*! + * \brief Set the history output field values in another output instance. + */ + static void LoadHistoryDataImpl(CConfig *config, CGeometry *geometry, CSolver **solver, COutput* output); + /*! * \brief Set the available volume output fields * \param[in] config - Definition of the particular problem. diff --git a/SU2_CFD/include/output/CMeshOutput.hpp b/SU2_CFD/include/output/CMeshOutput.hpp index 4ca9ca049997..f0a250d6fb8f 100644 --- a/SU2_CFD/include/output/CMeshOutput.hpp +++ b/SU2_CFD/include/output/CMeshOutput.hpp @@ -2,14 +2,14 @@ * \file CMeshOutput.hpp * \brief Headers of the mesh output. * \author R. Sanchez, T. Albring. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/CMultizoneOutput.hpp b/SU2_CFD/include/output/CMultizoneOutput.hpp index a56eb09b1c8f..93a1623562fa 100644 --- a/SU2_CFD/include/output/CMultizoneOutput.hpp +++ b/SU2_CFD/include/output/CMultizoneOutput.hpp @@ -2,14 +2,14 @@ * \file CMultizoneOutput.hpp * \brief Headers of the main subroutines for screen and history output in multizone problems. * \author R. Sanchez, T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/CNEMOCompOutput.hpp b/SU2_CFD/include/output/CNEMOCompOutput.hpp index 6f22adb312ed..8ed68595183e 100644 --- a/SU2_CFD/include/output/CNEMOCompOutput.hpp +++ b/SU2_CFD/include/output/CNEMOCompOutput.hpp @@ -2,14 +2,14 @@ * \file CNEMOCompOutput.hpp * \brief Headers of the compressible flow output. * \author R. Sanchez, W. Maier. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/COutput.hpp b/SU2_CFD/include/output/COutput.hpp index a549a6c55417..81d4f77cb461 100644 --- a/SU2_CFD/include/output/COutput.hpp +++ b/SU2_CFD/include/output/COutput.hpp @@ -2,14 +2,14 @@ * \file COutput.hpp * \brief Headers of the output class. * \author T.Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -55,6 +55,7 @@ class CSolver; class CFileWriter; class CParallelDataSorter; class CConfig; +class CHeatOutput; using namespace std; @@ -65,6 +66,7 @@ using namespace std; */ class COutput { protected: + friend class CHeatOutput; /*----------------------------- General ----------------------------*/ @@ -241,15 +243,16 @@ class COutput { /*----------------------------- Volume output ----------------------------*/ - CParallelDataSorter* volumeDataSorter; //!< Volume data sorter - CParallelDataSorter* surfaceDataSorter; //!< Surface data sorter + CParallelDataSorter* volumeDataSorter; //!< Volume data sorter. + CParallelDataSorter* volumeDataSorterCompact; //!< Volume data sorter for compact files. + CParallelDataSorter* surfaceDataSorter; //!< Surface data sorter. - vector volumeFieldNames; //!< Vector containing the volume field names - unsigned short nVolumeFields; //!< Number of fields in the volume output + vector volumeFieldNames; //!< Vector containing the volume field names. + vector requiredVolumeFieldNames; //!< Vector containing the minimum required volume field names. - string volumeFilename, //!< Volume output filename - surfaceFilename, //!< Surface output filename - restartFilename; //!< Restart output filename + string volumeFilename, //!< Volume output filename. + surfaceFilename, //!< Surface output filename. + restartFilename; //!< Restart output filename. /** \brief Structure to store information for a volume output field. * @@ -259,40 +262,48 @@ class COutput { /*! \brief The name of the field, i.e. the name that is printed in the file header.*/ string fieldName; /*! \brief This value identifies the position of the values of this field at each node in the ::Local_Data array. */ - short offset; + short offset = -1; + /*! \brief This offset is used for the compact formulation. */ + short offsetCompact = -1; /*! \brief The group this field belongs to. */ string outputGroup; - /*! \brief String containing the description of the field */ + /*! \brief String containing the description of the field. */ string description; /*! \brief Default constructor. */ - VolumeOutputField () {} + VolumeOutputField() = default; /*! \brief Constructor to initialize all members. */ - VolumeOutputField(string fieldName_, int offset_, string volumeOutputGroup_, string description_): - fieldName(std::move(fieldName_)), offset(std::move(offset_)), - outputGroup(std::move(volumeOutputGroup_)), description(std::move(description_)){} + VolumeOutputField(string fieldName_, string volumeOutputGroup_, string description_): + fieldName(std::move(fieldName_)), + outputGroup(std::move(volumeOutputGroup_)), + description(std::move(description_)) {} }; /*! \brief Associative map to access data stored in the volume output fields by a string identifier. */ - std::map volumeOutput_Map; + std::map volumeOutput_Map; /*! \brief Vector that contains the keys of the ::volumeOutput_Map in the order of their insertion. */ - std::vector volumeOutput_List; - - /*! \brief Vector to cache the positions of the field in the data array */ - std::vector fieldIndexCache; - /*! \brief Current value of the cache index */ - unsigned short cachePosition; - /*! \brief Boolean to store whether the field index cache should be build. */ - bool buildFieldIndexCache; - /*! \brief Vector to cache the positions of the field in the data array */ - std::vector fieldGetIndexCache; - /*! \brief Current value of the cache index */ - unsigned short curGetFieldIndex; + std::vector volumeOutput_List; + + /*! \brief Whether the field index caches should be build. */ + bool buildFieldIndexCache; + + /*! \brief Vectors to cache the positions of the fields in the data array. */ + std::vector fieldIndexCache, fieldIndexCacheCompact; + /*! \brief Current value of the cache indices. */ + unsigned short cachePosition; + + /*! \brief Vector to cache the positions of the field in the data array. */ + std::vector fieldGetIndexCache; + /*! \brief Current value of the cache index. */ + unsigned short curGetFieldIndex; /*! \brief Requested volume field names in the config file. */ std::vector requestedVolumeFields; /*! \brief Number of requested volume field names in the config file. */ unsigned short nRequestedVolumeFields; + /*! \brief Minimum required volume fields for restart file. */ + const std::vector restartVolumeFields = {"COORDINATES", "SOLUTION", "SENSITIVITY", "GRID_VELOCITY"}; + /*----------------------------- Convergence monitoring ----------------------------*/ su2double cauchyValue, /*!< \brief Summed value of the convergence indicator. */ @@ -736,8 +747,9 @@ class COutput { * \param[in] groupname - The name of the group this field belongs to. * \param[in] description - Description of the volume field. */ - inline void AddVolumeOutput(string name, string field_name, string groupname, string description){ - volumeOutput_Map[name] = VolumeOutputField(field_name, -1, groupname, description); + inline void AddVolumeOutput(const string& name, const string& field_name, + const string& group_name, const string& description) { + volumeOutput_Map[name] = VolumeOutputField(field_name, group_name, description); volumeOutput_List.push_back(name); } @@ -959,14 +971,14 @@ class COutput { /*! * \brief Sets the turboperformance screen output - * \param[in] TurboPerf - Turboperformance class + * \param[in] TurboPerf - Turboperformance class * \param[in] config - Definition of the particular problem * \param[in] TimeIter - Index of the current time-step * \param[in] OuterIter - Index of current outer iteration * \param[in] InnerIter - Index of current inner iteration */ inline virtual void SetTurboPerformance_Output(std::shared_ptr TurboPerf, CConfig *config, unsigned long TimeIter, unsigned long OuterIter, unsigned long InnerIter) {} - + /*! * \brief Sets the multizone turboperformacne screen output * \param[in] TurboStagePerf - Stage turboperformance class @@ -982,7 +994,7 @@ class COutput { * \param[in] config - Definition of the particular problem */ inline virtual void LoadTurboHistoryData(std::shared_ptr TurboStagePerf, std::shared_ptr TurboPerf, CConfig *config) {} - + /*! * \brief Write the kinematic and thermodynamic variables at each spanwise division * \param[in] solver - The container hold all solution data diff --git a/SU2_CFD/include/output/COutputFactory.hpp b/SU2_CFD/include/output/COutputFactory.hpp index 28b81040f144..c4fbac5f9f12 100644 --- a/SU2_CFD/include/output/COutputFactory.hpp +++ b/SU2_CFD/include/output/COutputFactory.hpp @@ -2,14 +2,14 @@ * \file COutputFactory.hpp * \brief Headers of the output class. * \author T.Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/CTurboOutput.hpp b/SU2_CFD/include/output/CTurboOutput.hpp index 5a1741530cdb..4fe06e709878 100644 --- a/SU2_CFD/include/output/CTurboOutput.hpp +++ b/SU2_CFD/include/output/CTurboOutput.hpp @@ -9,7 +9,7 @@ * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/filewriter/CCGNSFileWriter.hpp b/SU2_CFD/include/output/filewriter/CCGNSFileWriter.hpp index 696a211c1332..5f325fc4b42c 100644 --- a/SU2_CFD/include/output/filewriter/CCGNSFileWriter.hpp +++ b/SU2_CFD/include/output/filewriter/CCGNSFileWriter.hpp @@ -2,14 +2,14 @@ * \file CCGNSFileWriter.hpp * \brief Headers for CGNS file writer class. * \author G. Baldan - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/filewriter/CCSVFileWriter.hpp b/SU2_CFD/include/output/filewriter/CCSVFileWriter.hpp index b14a03bfb7ba..81b65ac54c5a 100644 --- a/SU2_CFD/include/output/filewriter/CCSVFileWriter.hpp +++ b/SU2_CFD/include/output/filewriter/CCSVFileWriter.hpp @@ -2,14 +2,14 @@ * \file CCSVFileWriter.hpp * \brief Headers fo the CSV file writer class. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/filewriter/CFEMDataSorter.hpp b/SU2_CFD/include/output/filewriter/CFEMDataSorter.hpp index 2f1168f04ddb..1a4a62bdf4cc 100644 --- a/SU2_CFD/include/output/filewriter/CFEMDataSorter.hpp +++ b/SU2_CFD/include/output/filewriter/CFEMDataSorter.hpp @@ -2,14 +2,14 @@ * \file CFEMDataSorter.hpp * \brief Headers fo the FEM data sorter class. * \author T. Albring, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/filewriter/CFVMDataSorter.hpp b/SU2_CFD/include/output/filewriter/CFVMDataSorter.hpp index b0abc84b2121..3ac961c6640f 100644 --- a/SU2_CFD/include/output/filewriter/CFVMDataSorter.hpp +++ b/SU2_CFD/include/output/filewriter/CFVMDataSorter.hpp @@ -2,14 +2,14 @@ * \file CFVMDataSorter.hpp * \brief Headers fo the FVM data sorter class. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/filewriter/CFileWriter.hpp b/SU2_CFD/include/output/filewriter/CFileWriter.hpp index bc8aa3ee85b9..cf7f010b3d21 100644 --- a/SU2_CFD/include/output/filewriter/CFileWriter.hpp +++ b/SU2_CFD/include/output/filewriter/CFileWriter.hpp @@ -2,14 +2,14 @@ * \file CFileWriter.hpp * \brief Headers fo the file writer class. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/filewriter/CParallelDataSorter.hpp b/SU2_CFD/include/output/filewriter/CParallelDataSorter.hpp index da2f6a1f3bfb..3c297caf79be 100644 --- a/SU2_CFD/include/output/filewriter/CParallelDataSorter.hpp +++ b/SU2_CFD/include/output/filewriter/CParallelDataSorter.hpp @@ -2,14 +2,14 @@ * \file CParallelDataSorter.hpp * \brief Headers fo the data sorter class. * \author T. Albring, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -108,7 +108,8 @@ class CParallelDataSorter{ int nSends, //!< Number of sends nRecvs; //!< Number of receives - vector fieldNames; //!< Vector with names of the output fields + vector fieldNames; //!< Vector with names of all the output fields + vector requiredFieldNames; //!< Vector with names of the required output fields that we write to file unsigned short nDim; //!< Spatial dimension of the data @@ -340,6 +341,22 @@ class CParallelDataSorter{ return fieldNames; } + /*! + * \brief Get the vector containing the names of the required output fields + * \return Vector of strings containing the required field names + */ + const vector& GetRequiredFieldNames() const{ + return requiredFieldNames; + } + + /*! + * \brief Set the vector of required output fields. + * \return None. + */ + void SetRequiredFieldNames(const vector& req_field_names) { + requiredFieldNames = req_field_names; + } + /*! * \brief Get the spatial dimension * \return The spatial dimension diff --git a/SU2_CFD/include/output/filewriter/CParaviewBinaryFileWriter.hpp b/SU2_CFD/include/output/filewriter/CParaviewBinaryFileWriter.hpp index a3b6d111a27f..dd6e9e70bef0 100644 --- a/SU2_CFD/include/output/filewriter/CParaviewBinaryFileWriter.hpp +++ b/SU2_CFD/include/output/filewriter/CParaviewBinaryFileWriter.hpp @@ -2,14 +2,14 @@ * \file CParaviewBinaryFileWriter.hpp * \brief Headers fo paraview binary file writer class. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/filewriter/CParaviewFileWriter.hpp b/SU2_CFD/include/output/filewriter/CParaviewFileWriter.hpp index 66a6710f54c5..a5f9f1dc2b63 100644 --- a/SU2_CFD/include/output/filewriter/CParaviewFileWriter.hpp +++ b/SU2_CFD/include/output/filewriter/CParaviewFileWriter.hpp @@ -2,14 +2,14 @@ * \file CParaviewFileWriter.hpp * \brief Headers fo the paraview file writer class. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/filewriter/CParaviewVTMFileWriter.hpp b/SU2_CFD/include/output/filewriter/CParaviewVTMFileWriter.hpp index ce2e047d3bf2..3eab0034934a 100644 --- a/SU2_CFD/include/output/filewriter/CParaviewVTMFileWriter.hpp +++ b/SU2_CFD/include/output/filewriter/CParaviewVTMFileWriter.hpp @@ -2,14 +2,14 @@ * \file CParaviewVTMFileWriter.hpp * \brief Headers fo paraview binary file writer class. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/filewriter/CParaviewXMLFileWriter.hpp b/SU2_CFD/include/output/filewriter/CParaviewXMLFileWriter.hpp index 1a551a8c4fa4..f7677abd1707 100644 --- a/SU2_CFD/include/output/filewriter/CParaviewXMLFileWriter.hpp +++ b/SU2_CFD/include/output/filewriter/CParaviewXMLFileWriter.hpp @@ -2,14 +2,14 @@ * \file CParaviewXMLFileWriter.hpp * \brief Headers fo paraview binary file writer class. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/filewriter/CSTLFileWriter.hpp b/SU2_CFD/include/output/filewriter/CSTLFileWriter.hpp index ccfe151f77ac..db9099c5c383 100644 --- a/SU2_CFD/include/output/filewriter/CSTLFileWriter.hpp +++ b/SU2_CFD/include/output/filewriter/CSTLFileWriter.hpp @@ -2,14 +2,14 @@ * \file CSTLFileWriter.hpp * \brief Headers fo the STL file writer class. * \author T. Kattmann, T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -33,7 +33,7 @@ * \class CSTLFileWriter * \brief Class for writing STL output files. * \author T. Kattmann, T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CSTLFileWriter final : public CFileWriter{ private: diff --git a/SU2_CFD/include/output/filewriter/CSU2BinaryFileWriter.hpp b/SU2_CFD/include/output/filewriter/CSU2BinaryFileWriter.hpp index 43f4d52cfb26..3fc066cc673c 100644 --- a/SU2_CFD/include/output/filewriter/CSU2BinaryFileWriter.hpp +++ b/SU2_CFD/include/output/filewriter/CSU2BinaryFileWriter.hpp @@ -2,14 +2,14 @@ * \file CSU2BinaryFileWriter.hpp * \brief Headers fo the SU2 binary file writer class. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/filewriter/CSU2FileWriter.hpp b/SU2_CFD/include/output/filewriter/CSU2FileWriter.hpp index aae32d383641..364d4f65bc4f 100644 --- a/SU2_CFD/include/output/filewriter/CSU2FileWriter.hpp +++ b/SU2_CFD/include/output/filewriter/CSU2FileWriter.hpp @@ -2,14 +2,14 @@ * \file CSU2FileWriter.hpp * \brief Headers fo the CSV file writer class. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/filewriter/CSU2MeshFileWriter.hpp b/SU2_CFD/include/output/filewriter/CSU2MeshFileWriter.hpp index 71719a1e83be..454012576a0d 100644 --- a/SU2_CFD/include/output/filewriter/CSU2MeshFileWriter.hpp +++ b/SU2_CFD/include/output/filewriter/CSU2MeshFileWriter.hpp @@ -2,14 +2,14 @@ * \file CSU2MeshFileWriter.hpp * \brief Headers fo the CSV file writer class. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/filewriter/CSurfaceFEMDataSorter.hpp b/SU2_CFD/include/output/filewriter/CSurfaceFEMDataSorter.hpp index 109d978e59c8..25337628469b 100644 --- a/SU2_CFD/include/output/filewriter/CSurfaceFEMDataSorter.hpp +++ b/SU2_CFD/include/output/filewriter/CSurfaceFEMDataSorter.hpp @@ -2,14 +2,14 @@ * \file CSurfaceFEMDataSorter.hpp * \brief Headers fo the surface FEM data sorter class. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/filewriter/CSurfaceFVMDataSorter.hpp b/SU2_CFD/include/output/filewriter/CSurfaceFVMDataSorter.hpp index 8d73e0509761..3cbbcf4d434b 100644 --- a/SU2_CFD/include/output/filewriter/CSurfaceFVMDataSorter.hpp +++ b/SU2_CFD/include/output/filewriter/CSurfaceFVMDataSorter.hpp @@ -2,14 +2,14 @@ * \file CSurfaceFVMDataSorter.hpp * \brief Headers for the surface FVM data sorter class. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/filewriter/CTecplotBinaryFileWriter.hpp b/SU2_CFD/include/output/filewriter/CTecplotBinaryFileWriter.hpp index bdd155cb9b84..7a8b9a5be66e 100644 --- a/SU2_CFD/include/output/filewriter/CTecplotBinaryFileWriter.hpp +++ b/SU2_CFD/include/output/filewriter/CTecplotBinaryFileWriter.hpp @@ -2,14 +2,14 @@ * \file CTecplotBinaryFileWriter.hpp * \brief Headers fo the tecplot binary writer class. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/filewriter/CTecplotFileWriter.hpp b/SU2_CFD/include/output/filewriter/CTecplotFileWriter.hpp index 365253ce7760..6aa53b14d23d 100644 --- a/SU2_CFD/include/output/filewriter/CTecplotFileWriter.hpp +++ b/SU2_CFD/include/output/filewriter/CTecplotFileWriter.hpp @@ -2,14 +2,14 @@ * \file CTecplotFileWriter.hpp * \brief Headers fo the tecplot ASCII writer class. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/output/tools/CWindowingTools.hpp b/SU2_CFD/include/output/tools/CWindowingTools.hpp index d9add3fb9d48..4d63217cbefa 100644 --- a/SU2_CFD/include/output/tools/CWindowingTools.hpp +++ b/SU2_CFD/include/output/tools/CWindowingTools.hpp @@ -2,14 +2,14 @@ * \file signal_processing_toolbox.hpp * \brief Header file for the signal processing toolbox. * \author S. Schotthöfer - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/sgs_model.hpp b/SU2_CFD/include/sgs_model.hpp index 16d82e5d815d..9f540eee1d9b 100644 --- a/SU2_CFD/include/sgs_model.hpp +++ b/SU2_CFD/include/sgs_model.hpp @@ -2,14 +2,14 @@ * \file sgs_model.hpp * \brief Headers of the LES subgrid scale models of the SU2 solvers. * \author E. van der Weide, T. Economon, P. Urbanczyk - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -38,7 +38,7 @@ using namespace std; * \class CSGSModel * \brief Base class for defining the LES subgrid scale model. * \author: E. van der Weide, T. Economon, P. Urbanczyk - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CSGSModel { @@ -224,7 +224,7 @@ class CSGSModel { * \class CSmagorinskyModel * \brief Derived class for defining the Smagorinsky SGS model. * \author: E. van der Weide, T. Economon, P. Urbanczyk - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CSmagorinskyModel : public CSGSModel { @@ -413,7 +413,7 @@ class CSmagorinskyModel : public CSGSModel { * \class CWALEModel * \brief Derived class for defining the WALE SGS model. * \author: E. van der Weide, T. Economon, P. Urbanczyk - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CWALEModel : public CSGSModel { @@ -601,7 +601,7 @@ class CWALEModel : public CSGSModel { * \class CVremanModel * \brief Derived class for defining the WALE SGS model. * \author: E. van der Weide, T. Economon, P. Urbanczyk, E. Molina - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CVremanModel : public CSGSModel { diff --git a/SU2_CFD/include/sgs_model.inl b/SU2_CFD/include/sgs_model.inl index 507afc4b3e9a..3d2474a543b8 100644 --- a/SU2_CFD/include/sgs_model.inl +++ b/SU2_CFD/include/sgs_model.inl @@ -2,14 +2,14 @@ * \file sgs_model.inl * \brief In-Line subroutines of the sgs_model.hpp file. * \author E. van der Weide, T. Economon, P. Urbanczyk - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/solvers/CAdjEulerSolver.hpp b/SU2_CFD/include/solvers/CAdjEulerSolver.hpp index 04f3bcd23e81..44f38be27b7b 100644 --- a/SU2_CFD/include/solvers/CAdjEulerSolver.hpp +++ b/SU2_CFD/include/solvers/CAdjEulerSolver.hpp @@ -2,14 +2,14 @@ * \file CAdjEulerSolver.hpp * \brief Headers of the CAdjEulerSolver class * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/solvers/CAdjNSSolver.hpp b/SU2_CFD/include/solvers/CAdjNSSolver.hpp index 94e1798db109..d3c73bacd904 100644 --- a/SU2_CFD/include/solvers/CAdjNSSolver.hpp +++ b/SU2_CFD/include/solvers/CAdjNSSolver.hpp @@ -2,14 +2,14 @@ * \file CAdjNSSolver.hpp * \brief Headers of the CAdjNSSolver class * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/solvers/CAdjTurbSolver.hpp b/SU2_CFD/include/solvers/CAdjTurbSolver.hpp index cb9485fb1f7b..fffebb542e08 100644 --- a/SU2_CFD/include/solvers/CAdjTurbSolver.hpp +++ b/SU2_CFD/include/solvers/CAdjTurbSolver.hpp @@ -2,14 +2,14 @@ * \file CAdjTurbSolver.hpp * \brief Headers of the CAdjTurbSolver class * \author F. Palacios, A. Bueno. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/solvers/CBaselineSolver.hpp b/SU2_CFD/include/solvers/CBaselineSolver.hpp index 808ab322d1ae..114838bf614f 100644 --- a/SU2_CFD/include/solvers/CBaselineSolver.hpp +++ b/SU2_CFD/include/solvers/CBaselineSolver.hpp @@ -2,14 +2,14 @@ * \file CBaslineSolver.hpp * \brief Headers of the CBaselineSolver class * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/solvers/CBaselineSolver_FEM.hpp b/SU2_CFD/include/solvers/CBaselineSolver_FEM.hpp index 428d77bb615f..67cbb2d82845 100644 --- a/SU2_CFD/include/solvers/CBaselineSolver_FEM.hpp +++ b/SU2_CFD/include/solvers/CBaselineSolver_FEM.hpp @@ -2,14 +2,14 @@ * \file CBaslineSolver_FEM.hpp * \brief Headers of the CBaselineSolver class * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -31,7 +31,7 @@ * \class CBaselineSolver_FEM * \brief Main class for defining a baseline solution from a restart file for the DG-FEM solver output. * \author T. Economon. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CBaselineSolver_FEM final : public CSolver { protected: diff --git a/SU2_CFD/include/solvers/CDiscAdjFEASolver.hpp b/SU2_CFD/include/solvers/CDiscAdjFEASolver.hpp index 09a443cef17d..75a08a79a212 100644 --- a/SU2_CFD/include/solvers/CDiscAdjFEASolver.hpp +++ b/SU2_CFD/include/solvers/CDiscAdjFEASolver.hpp @@ -2,14 +2,14 @@ * \file CDiscAdjFEASolver.hpp * \brief Headers of the CDiscAdjFEASolver class * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/solvers/CDiscAdjMeshSolver.hpp b/SU2_CFD/include/solvers/CDiscAdjMeshSolver.hpp index c7ce146f472a..c2b4259ff46d 100644 --- a/SU2_CFD/include/solvers/CDiscAdjMeshSolver.hpp +++ b/SU2_CFD/include/solvers/CDiscAdjMeshSolver.hpp @@ -3,14 +3,14 @@ * \brief Declaration and inlines of the class to compute the * the discrete adjoint of the linear-elastic mesh solver. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/solvers/CDiscAdjSolver.hpp b/SU2_CFD/include/solvers/CDiscAdjSolver.hpp index 84af2e4a7556..7071c31750f9 100644 --- a/SU2_CFD/include/solvers/CDiscAdjSolver.hpp +++ b/SU2_CFD/include/solvers/CDiscAdjSolver.hpp @@ -2,14 +2,14 @@ * \file CDiscAdjSolver.hpp * \brief Headers of the CDiscAdjSolver class * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/solvers/CEulerSolver.hpp b/SU2_CFD/include/solvers/CEulerSolver.hpp index 83c4cbe18e6a..56e8282bf5d8 100644 --- a/SU2_CFD/include/solvers/CEulerSolver.hpp +++ b/SU2_CFD/include/solvers/CEulerSolver.hpp @@ -2,14 +2,14 @@ * \file CEulerSolver.hpp * \brief Headers of the CEulerSolver class * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/solvers/CFEASolver.hpp b/SU2_CFD/include/solvers/CFEASolver.hpp index 4d8bf74be8e7..a26a8a966806 100644 --- a/SU2_CFD/include/solvers/CFEASolver.hpp +++ b/SU2_CFD/include/solvers/CFEASolver.hpp @@ -2,14 +2,14 @@ * \file CFEASolver.hpp * \brief Finite element solver for elasticity problems. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -98,6 +98,12 @@ class CFEASolver : public CFEASolverBase { bool element_based; /*!< \brief Bool to determine if an element-based file is used. */ bool topol_filter_applied; /*!< \brief True if density filtering has been performed. */ bool initial_calc = true; /*!< \brief Becomes false after first call to Preprocessing. */ + bool body_forces = false; /*!< \brief Whether any body force is active. */ + + /*! + * \brief Pointer to the heat solver nodes to access temperature for coupled simulations. + */ + const CVariable* heat_nodes = nullptr; /*! * \brief The highest level in the variable hierarchy this solver can safely use, @@ -335,14 +341,14 @@ class CFEASolver : public CFEASolverBase { const CConfig *config); /*! - * \brief Compute the dead loads. + * \brief Compute the inertial loads. * \param[in] geometry - Geometrical definition of the problem. * \param[in] numerics - Description of the numerical method. * \param[in] config - Definition of the particular problem. */ - void Compute_DeadLoad(CGeometry *geometry, - CNumerics **numerics, - const CConfig *config) final; + void Compute_BodyForces(CGeometry *geometry, + CNumerics **numerics, + const CConfig *config) final; /*! * \brief Clamped boundary conditions. diff --git a/SU2_CFD/include/solvers/CFEASolverBase.hpp b/SU2_CFD/include/solvers/CFEASolverBase.hpp index aea19629221a..3d7766ddee4f 100644 --- a/SU2_CFD/include/solvers/CFEASolverBase.hpp +++ b/SU2_CFD/include/solvers/CFEASolverBase.hpp @@ -2,14 +2,14 @@ * \file CFEASolver.hpp * \brief Base class template for all FEA solvers using the SU2 internal finite elements. * \author T. Dick - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/solvers/CFEM_DG_EulerSolver.hpp b/SU2_CFD/include/solvers/CFEM_DG_EulerSolver.hpp index ecb25504b579..081efb92d378 100644 --- a/SU2_CFD/include/solvers/CFEM_DG_EulerSolver.hpp +++ b/SU2_CFD/include/solvers/CFEM_DG_EulerSolver.hpp @@ -2,14 +2,14 @@ * \file CFEM_DG_EulerSolver.hpp * \brief Headers of the CFEM_DG_EulerSolver class * \author E. van der Weide, T. Economon, J. Alonso - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -35,7 +35,7 @@ * \brief Main class for defining the Euler Discontinuous Galerkin finite element flow solver. * \ingroup Euler_Equations * \author E. van der Weide, T. Economon, J. Alonso - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CFEM_DG_EulerSolver : public CSolver { protected: diff --git a/SU2_CFD/include/solvers/CFEM_DG_NSSolver.hpp b/SU2_CFD/include/solvers/CFEM_DG_NSSolver.hpp index 4ad477801cc9..96fc24477d05 100644 --- a/SU2_CFD/include/solvers/CFEM_DG_NSSolver.hpp +++ b/SU2_CFD/include/solvers/CFEM_DG_NSSolver.hpp @@ -2,14 +2,14 @@ * \file CFEM_DG_NSSolver.hpp * \brief Headers of the CFEM_DG_NSSolver class * \author E. van der Weide, T. Economon, J. Alonso - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -35,7 +35,7 @@ * \brief Main class for defining the Navier-Stokes Discontinuous Galerkin finite element flow solver. * \ingroup Navier_Stokes_Equations * \author E. van der Weide, T. Economon, J. Alonso - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CFEM_DG_NSSolver final : public CFEM_DG_EulerSolver { private: diff --git a/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp b/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp index 2aa31880baea..95e5306f6aa4 100644 --- a/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp +++ b/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp @@ -1,14 +1,14 @@ /*! * \file CFVMFlowSolverBase.hpp * \brief Base class template for all FVM flow solvers. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl b/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl index b54622a15257..d3673e1b763a 100644 --- a/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl +++ b/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl @@ -1,14 +1,14 @@ /*! * \file CFVMFlowSolverBase.inl * \brief Base class template for all FVM flow solvers. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -1141,41 +1141,54 @@ void CFVMFlowSolverBase::BC_Sym_Plane(CGeometry* geometry, CSolve for (auto iDim = 0u; iDim < nDim; iDim++) UnitNormal[iDim] = Normal[iDim] / Area; } - su2double* V_reflected = GetCharacPrimVar(val_marker, iVertex); + /*--- Energy terms due to grid movement (aka work of pressure forces). ---*/ + if (dynamic_grid) { + su2double* V_reflected = GetCharacPrimVar(val_marker, iVertex); - /*--- Grid movement ---*/ - if (dynamic_grid) - conv_numerics->SetGridVel(geometry->nodes->GetGridVel(iPoint), geometry->nodes->GetGridVel(iPoint)); + conv_numerics->SetGridVel(geometry->nodes->GetGridVel(iPoint), + geometry->nodes->GetGridVel(iPoint)); - /*--- Normal vector for this vertex (negate for outward convention). ---*/ - for (auto iDim = 0u; iDim < nDim; iDim++) Normal[iDim] = -Normal[iDim]; - conv_numerics->SetNormal(Normal); + /*--- Normal vector for this vertex (negate for outward convention). ---*/ + for (auto iDim = 0u; iDim < nDim; iDim++) Normal[iDim] = -Normal[iDim]; + conv_numerics->SetNormal(Normal); - for (auto iVar = 0u; iVar < nPrimVar; iVar++) - V_reflected[iVar] = nodes->GetPrimitive(iPoint, iVar); + for (auto iVar = 0u; iVar < nPrimVar; iVar++) + V_reflected[iVar] = nodes->GetPrimitive(iPoint, iVar); - su2double ProjVelocity_i = nodes->GetProjVel(iPoint, UnitNormal); - /*--- Adjustment to v.n due to grid movement. ---*/ - if (dynamic_grid) + su2double ProjVelocity_i = nodes->GetProjVel(iPoint, UnitNormal); + /*--- Adjustment to v.n due to grid movement. ---*/ ProjVelocity_i -= GeometryToolbox::DotProduct(nDim, geometry->nodes->GetGridVel(iPoint), UnitNormal); - for (auto iDim = 0u; iDim < nDim; iDim++) - V_reflected[iDim + iVel] = nodes->GetVelocity(iPoint, iDim) - ProjVelocity_i * UnitNormal[iDim]; + for (auto iDim = 0u; iDim < nDim; iDim++) + V_reflected[iDim + iVel] = nodes->GetVelocity(iPoint, iDim) - ProjVelocity_i * UnitNormal[iDim]; - /*--- Get current solution at this boundary node ---*/ - const su2double* V_domain = nodes->GetPrimitive(iPoint); + /*--- Get current solution at this boundary node. ---*/ + const su2double* V_domain = nodes->GetPrimitive(iPoint); - /*--- Set Primitive and Secondary for numerics class. ---*/ - conv_numerics->SetPrimitive(V_domain, V_reflected); - conv_numerics->SetSecondary(nodes->GetSecondary(iPoint), nodes->GetSecondary(iPoint)); + /*--- Set Primitive and Secondary for numerics class. ---*/ + conv_numerics->SetPrimitive(V_domain, V_reflected); + conv_numerics->SetSecondary(nodes->GetSecondary(iPoint), nodes->GetSecondary(iPoint)); - /*--- Compute the residual using an upwind scheme. ---*/ - auto residual = conv_numerics->ComputeResidual(config); + /*--- Compute the residual using an upwind scheme. ---*/ + auto residual = conv_numerics->ComputeResidual(config); - /*--- We include an update of the continuity and energy here, this is important for stability since - * these fluxes include numerical diffusion. ---*/ - for (auto iVar = 0u; iVar < nVar; iVar++) { - if (iVar < iVel || iVar >= iVel + nDim) LinSysRes(iPoint, iVar) += residual.residual[iVar]; + /*--- Use just the energy fluxes to update the residual, adding the others would + * increase numerical diffusion which we wish to avoid if possible. ---*/ + for (auto iVar = iVel + nDim; iVar < nVar; iVar++) { + LinSysRes(iPoint, iVar) += residual.residual[iVar]; + } + if (implicit) { + auto* block = Jacobian.GetBlock(iPoint, iPoint); + /*--- But in the Jacobian we also include the mass flux, this allows some cases with + * motion to use larger CFL, for example pywrapper_translating_naca0012. ---*/ + for (auto iVar = 0u; iVar < nVar; iVar++) { + if (iVar < iVel || iVar >= iVel + nDim) { + for (auto jVar = 0u; jVar < nVar; jVar++) { + block[iVar * nVar + jVar] += SU2_TYPE::GetValue(residual.jacobian_i[iVar][jVar]); + } + } + } + } } /*--- Explicitly set the velocity components normal to the symmetry plane to zero. @@ -1184,7 +1197,7 @@ void CFVMFlowSolverBase::BC_Sym_Plane(CGeometry* geometry, CSolve su2double* solutionOld = nodes->GetSolution_Old(iPoint); - su2double gridVel[MAXNVAR] = {}; + su2double gridVel[MAXNDIM] = {}; if (dynamic_grid) { for (auto iDim = 0u; iDim < nDim; iDim++) { gridVel[iDim] = geometry->nodes->GetGridVel(iPoint)[iDim]; @@ -1215,7 +1228,30 @@ void CFVMFlowSolverBase::BC_Sym_Plane(CGeometry* geometry, CSolve /*--- Jacobian contribution for implicit integration. ---*/ if (implicit) { - Jacobian.AddBlock2Diag(iPoint, residual.jacobian_i); + /*--- Modify the Jacobians according to the modification of the residual + * J_new = (I - n * n^T) * J where n = {0, nx, ny, nz, 0, ...} ---*/ + su2double mat[MAXNVAR * MAXNVAR] = {}; + + for (auto iVar = 0u; iVar < nVar; iVar++) + mat[iVar * nVar + iVar] = 1; + for (auto iDim = 0u; iDim < nDim; iDim++) + for (auto jDim = 0u; jDim < nDim; jDim++) + mat[(iDim + iVel) * nVar + jDim + iVel] -= UnitNormal[iDim] * UnitNormal[jDim]; + + auto ModifyJacobian = [&](const unsigned long jPoint) { + su2double jac[MAXNVAR * MAXNVAR], newJac[MAXNVAR * MAXNVAR]; + auto* block = Jacobian.GetBlock(iPoint, jPoint); + for (auto iVar = 0u; iVar < nVar * nVar; iVar++) jac[iVar] = block[iVar]; + + CBlasStructure().gemm(nVar, nVar, nVar, mat, jac, newJac, config); + + for (auto iVar = 0u; iVar < nVar * nVar; iVar++) + block[iVar] = SU2_TYPE::GetValue(newJac[iVar]); + }; + ModifyJacobian(iPoint); + for (size_t iNeigh = 0; iNeigh < geometry->nodes->GetnPoint(iPoint); ++iNeigh) { + ModifyJacobian(geometry->nodes->GetPoint(iPoint, iNeigh)); + } } /*--- Correction for multigrid. ---*/ @@ -1485,6 +1521,11 @@ void CFVMFlowSolverBase::EdgeFluxResidual(const CGeometry *geometry, "by the SIMD length (2, 4, or 8).", CURRENT_FUNCTION); } InstantiateEdgeNumerics(solvers, config); + + /*--- The SIMD numerics do not use gradients of density and enthalpy. ---*/ + if (!config->GetContinuous_Adjoint()) { + SU2_OMP_SAFE_GLOBAL_ACCESS(nPrimVarGrad = std::min(nDim + 2, nPrimVarGrad);) + } } /*--- Non-physical counter. ---*/ @@ -2345,19 +2386,18 @@ void CFVMFlowSolverBase::Friction_Forces(const CGeometry* geometr unsigned long iVertex, iPoint, iPointNormal; unsigned short iMarker, iMarker_Monitoring, iDim, jDim; - su2double Viscosity = 0.0, Area, Density = 0.0, WallDistMod, FrictionVel, + su2double Viscosity = 0.0, Area, Density = 0.0, FrictionVel, UnitNormal[3] = {0.0}, TauElem[3] = {0.0}, Tau[3][3] = {{0.0}}, Cp, thermal_conductivity, MaxNorm = 8.0, Grad_Vel[3][3] = {{0.0}}, Grad_Temp[3] = {0.0}, Grad_Temp_ve[3] = {0.0}, AxiFactor; const su2double *Coord = nullptr, *Coord_Normal = nullptr, *Normal = nullptr; const su2double minYPlus = config->GetwallModel_MinYPlus(); - string Marker_Tag, Monitoring_Tag; - const su2double Alpha = config->GetAoA() * PI_NUMBER / 180.0; const su2double Beta = config->GetAoS() * PI_NUMBER / 180.0; const su2double RefLength = config->GetRefLength(); const su2double RefHeatFlux = config->GetHeat_Flux_Ref(); + const su2double RefTemperature = config->GetTemperature_Ref(); const su2double Gas_Constant = config->GetGas_ConstantND(); auto Origin = config->GetRefOriginMoment(0); @@ -2388,15 +2428,17 @@ void CFVMFlowSolverBase::Friction_Forces(const CGeometry* geometr for (iMarker = 0; iMarker < nMarker; iMarker++) { - Marker_Tag = config->GetMarker_All_TagBound(iMarker); if (!config->GetViscous_Wall(iMarker)) continue; + const auto Marker_Tag = config->GetMarker_All_TagBound(iMarker); + + const bool py_custom = config->GetMarker_All_PyCustom(iMarker); /*--- Obtain the origin for the moment computation for a particular marker ---*/ const auto Monitoring = config->GetMarker_All_Monitoring(iMarker); if (Monitoring == YES) { for (iMarker_Monitoring = 0; iMarker_Monitoring < config->GetnMarker_Monitoring(); iMarker_Monitoring++) { - Monitoring_Tag = config->GetMarker_Monitoring_TagBound(iMarker_Monitoring); + const auto Monitoring_Tag = config->GetMarker_Monitoring_TagBound(iMarker_Monitoring); if (Marker_Tag == Monitoring_Tag) Origin = config->GetRefOriginMoment(iMarker_Monitoring); } } @@ -2491,36 +2533,55 @@ void CFVMFlowSolverBase::Friction_Forces(const CGeometry* geometr FrictionVel = sqrt(fabs(WallShearStress[iMarker][iVertex]) / Density); - if (!wallfunctions && (MGLevel == MESH_0 || geometry->nodes->GetDomain(iPoint))) { - // for CMultiGridGeometry, the normal neighbor of halo nodes in not set - iPointNormal = geometry->vertex[iMarker][iVertex]->GetNormal_Neighbor(); - Coord_Normal = geometry->nodes->GetCoord(iPointNormal); - WallDistMod = GeometryToolbox::Distance(nDim, Coord, Coord_Normal); + if (!wallfunctions && MGLevel == MESH_0 && geometry->nodes->GetDomain(iPoint)) { + // for CMultiGridGeometry and halos, the nearest neighbor distance is not set + const su2double WallDistMod = geometry->vertex[iMarker][iVertex]->GetNearestNeighborDistance(); YPlus[iMarker][iVertex] = WallDistMod * FrictionVel / (Viscosity / Density); } /*--- Compute total and maximum heat flux on the wall ---*/ - su2double dTdn = -GeometryToolbox::DotProduct(nDim, Grad_Temp, UnitNormal); - - if (!nemo){ - + if (!nemo) { if (FlowRegime == ENUM_REGIME::COMPRESSIBLE) { - Cp = (Gamma / Gamma_Minus_One) * Gas_Constant; thermal_conductivity = Cp * Viscosity / Prandtl_Lam; } if (FlowRegime == ENUM_REGIME::INCOMPRESSIBLE) { - if (!energy) dTdn = 0.0; thermal_conductivity = nodes->GetThermalConductivity(iPoint); } - HeatFlux[iMarker][iVertex] = -thermal_conductivity * dTdn * RefHeatFlux; + if (config->GetMarker_All_KindBC(iMarker) == BC_TYPE::HEAT_FLUX) { + if (py_custom) { + HeatFlux[iMarker][iVertex] = -geometry->GetCustomBoundaryHeatFlux(iMarker, iVertex); + } else { + HeatFlux[iMarker][iVertex] = -config->GetWall_HeatFlux(Marker_Tag); + if (config->GetIntegrated_HeatFlux()) { + HeatFlux[iMarker][iVertex] /= geometry->GetSurfaceArea(config, iMarker); + } + } + } else if (config->GetMarker_All_KindBC(iMarker) == BC_TYPE::ISOTHERMAL) { + su2double Twall = 0.0; + if (py_custom) { + Twall = geometry->GetCustomBoundaryTemperature(iMarker, iVertex) / RefTemperature; + } else { + Twall = config->GetIsothermal_Temperature(Marker_Tag) / RefTemperature; + } + iPointNormal = geometry->vertex[iMarker][iVertex]->GetNormal_Neighbor(); + Coord_Normal = geometry->nodes->GetCoord(iPointNormal); + const su2double dist_ij = GeometryToolbox::NormalDistance(nDim, UnitNormal, Coord, Coord_Normal); + const su2double There = nodes->GetTemperature(iPointNormal); + HeatFlux[iMarker][iVertex] = thermal_conductivity * (There - Twall) / dist_ij * RefHeatFlux; + } else { + su2double dTdn = GeometryToolbox::DotProduct(nDim, Grad_Temp, UnitNormal); + if (FlowRegime == ENUM_REGIME::INCOMPRESSIBLE && !energy) dTdn = 0.0; + HeatFlux[iMarker][iVertex] = thermal_conductivity * dTdn * RefHeatFlux; + } } else { const auto& thermal_conductivity_tr = nodes->GetThermalConductivity(iPoint); const auto& thermal_conductivity_ve = nodes->GetThermalConductivity_ve(iPoint); + const su2double dTdn = -GeometryToolbox::DotProduct(nDim, Grad_Temp, UnitNormal); const su2double dTvedn = -GeometryToolbox::DotProduct(nDim, Grad_Temp_ve, UnitNormal); /*--- Surface energy balance: trans-rot heat flux, vib-el heat flux ---*/ @@ -2648,8 +2709,7 @@ void CFVMFlowSolverBase::Friction_Forces(const CGeometry* geometr /*--- Compute the coefficients per surface ---*/ for (iMarker_Monitoring = 0; iMarker_Monitoring < config->GetnMarker_Monitoring(); iMarker_Monitoring++) { - Monitoring_Tag = config->GetMarker_Monitoring_TagBound(iMarker_Monitoring); - Marker_Tag = config->GetMarker_All_TagBound(iMarker); + const auto Monitoring_Tag = config->GetMarker_Monitoring_TagBound(iMarker_Monitoring); if (Marker_Tag == Monitoring_Tag) { SurfaceViscCoeff.CL[iMarker_Monitoring] += ViscCoeff.CL[iMarker]; SurfaceViscCoeff.CD[iMarker_Monitoring] += ViscCoeff.CD[iMarker]; diff --git a/SU2_CFD/include/solvers/CGradientSmoothingSolver.hpp b/SU2_CFD/include/solvers/CGradientSmoothingSolver.hpp index eb34f5589cca..4687a08e8eb3 100644 --- a/SU2_CFD/include/solvers/CGradientSmoothingSolver.hpp +++ b/SU2_CFD/include/solvers/CGradientSmoothingSolver.hpp @@ -2,14 +2,14 @@ * \file CGradientSmoothingSolver.hpp * \brief SOlver class for Sobolev smoothing of sensitivities. * \author T. Dick - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/solvers/CHeatSolver.hpp b/SU2_CFD/include/solvers/CHeatSolver.hpp index 61a750ebc422..1a8f4e7e1d29 100644 --- a/SU2_CFD/include/solvers/CHeatSolver.hpp +++ b/SU2_CFD/include/solvers/CHeatSolver.hpp @@ -2,14 +2,14 @@ * \file CHeatSolver.hpp * \brief Headers of the CHeatSolver class * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -34,7 +34,7 @@ * \class CHeatSolver * \brief Main class for defining the finite-volume heat solver. * \author O. Burghardt - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CHeatSolver final : public CScalarSolver { protected: @@ -42,7 +42,6 @@ class CHeatSolver final : public CScalarSolver { static constexpr size_t MAXNVAR = 1; /*!< \brief Max number of variables, for static arrays. */ const bool flow; /*!< \brief Use solver as a scalar transport equation of Temperature for the inc solver. */ - const bool heat_equation; /*!< \brief use solver for heat conduction in solids. */ su2double Global_Delta_Time = 0.0, Global_Delta_UnstTimeND = 0.0; diff --git a/SU2_CFD/include/solvers/CIncEulerSolver.hpp b/SU2_CFD/include/solvers/CIncEulerSolver.hpp index 990c9b7095d5..f567d5cd3434 100644 --- a/SU2_CFD/include/solvers/CIncEulerSolver.hpp +++ b/SU2_CFD/include/solvers/CIncEulerSolver.hpp @@ -2,14 +2,14 @@ * \file CIncEulerSolver.hpp * \brief Headers of the CIncEulerSolver class * \author F. Palacios, T. Economon, T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/solvers/CIncNSSolver.hpp b/SU2_CFD/include/solvers/CIncNSSolver.hpp index b41ae738a7fb..684ea4625466 100644 --- a/SU2_CFD/include/solvers/CIncNSSolver.hpp +++ b/SU2_CFD/include/solvers/CIncNSSolver.hpp @@ -2,14 +2,14 @@ * \file CIncNSSolver.hpp * \brief Headers of the CIncNSSolver class * \author F. Palacios, T. Economon, T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/solvers/CMeshSolver.hpp b/SU2_CFD/include/solvers/CMeshSolver.hpp index af0fd6aaf5a2..f57178e6911e 100644 --- a/SU2_CFD/include/solvers/CMeshSolver.hpp +++ b/SU2_CFD/include/solvers/CMeshSolver.hpp @@ -3,14 +3,14 @@ * \brief Declaration and inlines of the class to compute the deformation of * the volumetric numerical grid using the linear elasticity solver. * \author Ruben Sanchez, based on CVolumetricMovement developments (F. Palacios, A. Bueno, T. Economon, S. Padron) - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/solvers/CNEMOEulerSolver.hpp b/SU2_CFD/include/solvers/CNEMOEulerSolver.hpp index 325ccd371f78..6f7a9c4db10a 100644 --- a/SU2_CFD/include/solvers/CNEMOEulerSolver.hpp +++ b/SU2_CFD/include/solvers/CNEMOEulerSolver.hpp @@ -2,14 +2,14 @@ * \file CNEMOEulerSolver.hpp * \brief Headers of the CNEMOEulerSolver class * \author S. R. Copeland, F. Palacios, W. Maier. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -36,7 +36,7 @@ * \brief Main class for defining the NEMO Euler's flow solver. * \ingroup Euler_Equations * \author S. R. Copeland, F. Palacios, W. Maier. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CNEMOEulerSolver : public CFVMFlowSolverBase { protected: diff --git a/SU2_CFD/include/solvers/CNEMONSSolver.hpp b/SU2_CFD/include/solvers/CNEMONSSolver.hpp index 09ae0eb37e9a..db6218de050f 100644 --- a/SU2_CFD/include/solvers/CNEMONSSolver.hpp +++ b/SU2_CFD/include/solvers/CNEMONSSolver.hpp @@ -2,14 +2,14 @@ * \file CNEMONSSolver.hpp * \brief Headers of the CNEMONSSolver class * \author S. R. Copeland, F. Palacios, W. Maier. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/solvers/CNSSolver.hpp b/SU2_CFD/include/solvers/CNSSolver.hpp index 070ee7a81bba..9ac8c1d44ec4 100644 --- a/SU2_CFD/include/solvers/CNSSolver.hpp +++ b/SU2_CFD/include/solvers/CNSSolver.hpp @@ -2,14 +2,14 @@ * \file CNSSolver.hpp * \brief Headers of the CNSSolver class * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/solvers/CRadP1Solver.hpp b/SU2_CFD/include/solvers/CRadP1Solver.hpp index c9b1e4ccb3d1..3ff863fabc00 100644 --- a/SU2_CFD/include/solvers/CRadP1Solver.hpp +++ b/SU2_CFD/include/solvers/CRadP1Solver.hpp @@ -2,14 +2,14 @@ * \file CRadP1Solver.hpp * \brief Declaration and inlines of the class to compute a P1 radiation problem. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/solvers/CRadSolver.hpp b/SU2_CFD/include/solvers/CRadSolver.hpp index 38e4ad48e20c..7e7fde26582f 100644 --- a/SU2_CFD/include/solvers/CRadSolver.hpp +++ b/SU2_CFD/include/solvers/CRadSolver.hpp @@ -2,14 +2,14 @@ * \file CRadSolver.hpp * \brief Declaration and inlines of the class to compute a generic radiation solver. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/solvers/CScalarSolver.hpp b/SU2_CFD/include/solvers/CScalarSolver.hpp index 12bc885887ce..0fc61aa7ab25 100644 --- a/SU2_CFD/include/solvers/CScalarSolver.hpp +++ b/SU2_CFD/include/solvers/CScalarSolver.hpp @@ -1,14 +1,14 @@ /*! * \file CScalarSolver.hpp * \brief Headers of the CScalarSolver class - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/solvers/CScalarSolver.inl b/SU2_CFD/include/solvers/CScalarSolver.inl index 1411de2ca787..314354116ff1 100644 --- a/SU2_CFD/include/solvers/CScalarSolver.inl +++ b/SU2_CFD/include/solvers/CScalarSolver.inl @@ -1,14 +1,14 @@ /*! * \file CScalarSolver.inl * \brief Main subroutines of CScalarSolver class - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -490,8 +490,6 @@ void CScalarSolver::PrepareImplicitIteration(CGeometry* geometry, template void CScalarSolver::CompleteImplicitIteration(CGeometry* geometry, CSolver** solver_container, CConfig* config) { - const bool compressible = (config->GetKind_Regime() == ENUM_REGIME::COMPRESSIBLE); - ComputeUnderRelaxationFactor(config); /*--- Update solution (system written in terms of increments) ---*/ @@ -505,12 +503,13 @@ void CScalarSolver::CompleteImplicitIteration(CGeometry* geometry, SU2_OMP_FOR_STAT(omp_chunk_size) for (unsigned long iPoint = 0; iPoint < nPointDomain; iPoint++) { /*--- Multiply the Solution var with density to get the conservative transported quantity, if necessary. ---*/ + /* Note that for consistency with residual and jacobian calaulcations, use of current density for conservative variables + * of the old solution is used. see pull request https://github.com/su2code/SU2/pull/2458*/ const su2double density = flowNodes->GetDensity(iPoint); - const su2double density_old = compressible ? flowNodes->GetSolution_Old(iPoint, 0) : density; for (unsigned short iVar = 0; iVar < nVar; iVar++) { nodes->AddClippedSolution(iPoint, iVar, nodes->GetUnderRelaxation(iPoint) * LinSysSol(iPoint, iVar), - lowerlimit[iVar], upperlimit[iVar], density, density_old); + lowerlimit[iVar], upperlimit[iVar], density, density); } } END_SU2_OMP_FOR diff --git a/SU2_CFD/include/solvers/CSolver.hpp b/SU2_CFD/include/solvers/CSolver.hpp index b6c0d45d2198..417e57d08178 100644 --- a/SU2_CFD/include/solvers/CSolver.hpp +++ b/SU2_CFD/include/solvers/CSolver.hpp @@ -2,14 +2,14 @@ * \file CSolver.hpp * \brief Headers of the CSolver class which is inherited by all of the other solvers * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -3645,9 +3645,9 @@ class CSolver { * \param[in] numerics - Description of the numerical method. * \param[in] config - Definition of the particular problem. */ - inline virtual void Compute_DeadLoad(CGeometry *geometry, - CNumerics **numerics, - const CConfig *config) { } + inline virtual void Compute_BodyForces(CGeometry *geometry, + CNumerics **numerics, + const CConfig *config) { } /*! * \brief A virtual member. Set the volumetric heat source diff --git a/SU2_CFD/include/solvers/CSolverFactory.hpp b/SU2_CFD/include/solvers/CSolverFactory.hpp index 7c454511ab48..77afcd3bf7c8 100644 --- a/SU2_CFD/include/solvers/CSolverFactory.hpp +++ b/SU2_CFD/include/solvers/CSolverFactory.hpp @@ -2,14 +2,14 @@ * \file CSolverFactory.hpp * \brief Headers of the CSolverFactory class * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/solvers/CSpeciesFlameletSolver.hpp b/SU2_CFD/include/solvers/CSpeciesFlameletSolver.hpp index cf336b7f4584..93b966fc64a0 100644 --- a/SU2_CFD/include/solvers/CSpeciesFlameletSolver.hpp +++ b/SU2_CFD/include/solvers/CSpeciesFlameletSolver.hpp @@ -2,14 +2,14 @@ * \file CSpeciesFlameletSolver.hpp * \brief Headers of the CSpeciesFlameletSolver class * \author D. Mayer, N. Beishuizen, T. Economon, E. Bunschoten - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -37,6 +37,7 @@ */ class CSpeciesFlameletSolver final : public CSpeciesSolver { private: + FluidFlamelet_ParsedOptions flamelet_config_options; bool include_mixture_fraction = false; /*!< \brief include mixture fraction as a controlling variable. */ /*! * \brief Compute the preconditioner for low-Mach flows. @@ -87,24 +88,22 @@ class CSpeciesFlameletSolver final : public CSpeciesSolver { /*! * \brief Retrieve passive look-up data from manifold. - * \param[in] config - definition of particular problem. * \param[in] fluid_model_local - pointer to flamelet fluid model. * \param[in] iPoint - node ID. * \param[in] scalars - local scalar solution. * \return - within manifold bounds (0) or outside manifold bounds (1). */ - unsigned long SetScalarLookUps(const CConfig* config, CFluidModel* fluid_model_local, unsigned long iPoint, + unsigned long SetScalarLookUps(CFluidModel* fluid_model_local, unsigned long iPoint, const vector& scalars); /*! * \brief Retrieve the preferential diffusion scalar values from manifold. - * \param[in] config - definition of particular problem. * \param[in] fluid_model_local - pointer to flamelet fluid model. * \param[in] iPoint - node ID. * \param[in] scalars - local scalar solution. * \return - within manifold bounds (0) or outside manifold bounds (1). */ - unsigned long SetPreferentialDiffusionScalars(const CConfig* config, CFluidModel* fluid_model_local, + unsigned long SetPreferentialDiffusionScalars(CFluidModel* fluid_model_local, unsigned long iPoint, const vector& scalars); public: diff --git a/SU2_CFD/include/solvers/CSpeciesSolver.hpp b/SU2_CFD/include/solvers/CSpeciesSolver.hpp index 7236989afd46..fd9556d44111 100644 --- a/SU2_CFD/include/solvers/CSpeciesSolver.hpp +++ b/SU2_CFD/include/solvers/CSpeciesSolver.hpp @@ -2,14 +2,14 @@ * \file CSpeciesSolver.hpp * \brief Headers of the CSpeciesSolver class * \author T. Kattmann. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/solvers/CTemplateSolver.hpp b/SU2_CFD/include/solvers/CTemplateSolver.hpp index cced6a60476e..93f9f06b68e0 100644 --- a/SU2_CFD/include/solvers/CTemplateSolver.hpp +++ b/SU2_CFD/include/solvers/CTemplateSolver.hpp @@ -2,14 +2,14 @@ * \file CTemplateSolver.hpp * \brief Headers of the CTemplateSolver class * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/solvers/CTransLMSolver.hpp b/SU2_CFD/include/solvers/CTransLMSolver.hpp index 7e47fc813959..611b07a87d56 100644 --- a/SU2_CFD/include/solvers/CTransLMSolver.hpp +++ b/SU2_CFD/include/solvers/CTransLMSolver.hpp @@ -2,14 +2,14 @@ * \file CTransLMSolver.hpp * \brief Headers of the CTransLMSolver class * \author A. Aranake - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/solvers/CTurbSASolver.hpp b/SU2_CFD/include/solvers/CTurbSASolver.hpp index ac9ca5f9b050..7a4681653d09 100644 --- a/SU2_CFD/include/solvers/CTurbSASolver.hpp +++ b/SU2_CFD/include/solvers/CTurbSASolver.hpp @@ -2,14 +2,14 @@ * \file CTurbSASolver.hpp * \brief Headers of the CTurbSASolver class * \author A. Bueno. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/solvers/CTurbSSTSolver.hpp b/SU2_CFD/include/solvers/CTurbSSTSolver.hpp index 78aa77200950..5bdc3549aed3 100644 --- a/SU2_CFD/include/solvers/CTurbSSTSolver.hpp +++ b/SU2_CFD/include/solvers/CTurbSSTSolver.hpp @@ -2,14 +2,14 @@ * \file CTurbSSTSolver.hpp * \brief Headers of the CTurbSSTSolver class * \author A. Campos, F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -53,7 +53,6 @@ class CTurbSSTSolver final : public CTurbSolver { CSolver **solver_container, const CConfig *config, unsigned short val_marker); - public: /*! * \brief Constructor. @@ -302,5 +301,4 @@ class CTurbSSTSolver final : public CTurbSolver { */ inline su2double GetOmega_Inf(void) const override { return Solution_Inf[1]; } - }; diff --git a/SU2_CFD/include/solvers/CTurbSolver.hpp b/SU2_CFD/include/solvers/CTurbSolver.hpp index 8040e53ad17f..e35f2168ee0b 100644 --- a/SU2_CFD/include/solvers/CTurbSolver.hpp +++ b/SU2_CFD/include/solvers/CTurbSolver.hpp @@ -2,14 +2,14 @@ * \file CTurbSolver.hpp * \brief Headers of the CTurbSolver class * \author A. Bueno. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -140,4 +140,11 @@ class CTurbSolver : public CScalarSolver { Inlet_TurbVars[val_marker][val_vertex][val_dim] = val_turb_var; } + /*! + * \brief Register additional In- or Outputs for RANS. + * \param[in] input - Boolean whether In- or Output should be registered. + * \param[in] config - The particular config. + * \returns The number of extra variables. + */ + unsigned long RegisterSolutionExtra(bool input, const CConfig* config) final; }; diff --git a/SU2_CFD/include/task_definition.hpp b/SU2_CFD/include/task_definition.hpp index afb117580f67..5cefda31f72b 100644 --- a/SU2_CFD/include/task_definition.hpp +++ b/SU2_CFD/include/task_definition.hpp @@ -2,14 +2,14 @@ * \file task_definition.hpp * \brief Header of the task definition class for the SU2 solvers. * \author E. van der Weide, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -37,7 +37,7 @@ using namespace std; * \class CTaskDefinition * \brief Class for defining a task to be carried out * \author: E. van der Weide, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CTaskDefinition { diff --git a/SU2_CFD/include/task_definition.inl b/SU2_CFD/include/task_definition.inl index d65f56c49e58..5ce864d5ea5f 100644 --- a/SU2_CFD/include/task_definition.inl +++ b/SU2_CFD/include/task_definition.inl @@ -2,14 +2,14 @@ * \file task_definition.inl * \brief In-Line subroutines of the task_definition.hpp file. * \author E. van der Weide, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/variables/CAdjEulerVariable.hpp b/SU2_CFD/include/variables/CAdjEulerVariable.hpp index defe6020c43c..da907a8dd759 100644 --- a/SU2_CFD/include/variables/CAdjEulerVariable.hpp +++ b/SU2_CFD/include/variables/CAdjEulerVariable.hpp @@ -2,14 +2,14 @@ * \file CAdjEulerVariable.hpp * \brief Main class for defining the variables of the adjoint Euler solver. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/variables/CAdjNSVariable.hpp b/SU2_CFD/include/variables/CAdjNSVariable.hpp index c44eed9314a9..7f37094d1b2a 100644 --- a/SU2_CFD/include/variables/CAdjNSVariable.hpp +++ b/SU2_CFD/include/variables/CAdjNSVariable.hpp @@ -2,14 +2,14 @@ * \file CAdjNSVariable.hpp * \brief Main class for defining the variables of the adjoint Navier-Stokes solver. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/variables/CAdjTurbVariable.hpp b/SU2_CFD/include/variables/CAdjTurbVariable.hpp index 0f67d10ffe27..cce00f8c7560 100644 --- a/SU2_CFD/include/variables/CAdjTurbVariable.hpp +++ b/SU2_CFD/include/variables/CAdjTurbVariable.hpp @@ -2,14 +2,14 @@ * \file CAdjTurbVariable.hpp * \brief Main class for defining the variables of the adjoint turbulence model. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/variables/CBaselineVariable.hpp b/SU2_CFD/include/variables/CBaselineVariable.hpp index 30d3da2423a6..9a566f02bf0c 100644 --- a/SU2_CFD/include/variables/CBaselineVariable.hpp +++ b/SU2_CFD/include/variables/CBaselineVariable.hpp @@ -2,14 +2,14 @@ * \file CBaselineVariable.hpp * \brief Main class for defining the variables of a baseline solution from a restart file (for output). * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/variables/CDiscAdjFEABoundVariable.hpp b/SU2_CFD/include/variables/CDiscAdjFEABoundVariable.hpp index 3e50639c02a6..f2b1102bbe73 100644 --- a/SU2_CFD/include/variables/CDiscAdjFEABoundVariable.hpp +++ b/SU2_CFD/include/variables/CDiscAdjFEABoundVariable.hpp @@ -2,14 +2,14 @@ * \file CDiscAdjFEABoundVariable.hpp * \brief Main class for defining the variables of the adjoint FEA solver at the boundary. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -35,7 +35,7 @@ * \ingroup DiscAdj * \brief Main class for defining the variables on the FEA boundaries for adjoint applications. * \author R. Sanchez. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CDiscAdjFEABoundVariable final : public CDiscAdjVariable { private: diff --git a/SU2_CFD/include/variables/CDiscAdjMeshBoundVariable.hpp b/SU2_CFD/include/variables/CDiscAdjMeshBoundVariable.hpp index ce5ae4c47a43..d68342269942 100644 --- a/SU2_CFD/include/variables/CDiscAdjMeshBoundVariable.hpp +++ b/SU2_CFD/include/variables/CDiscAdjMeshBoundVariable.hpp @@ -3,14 +3,14 @@ * \brief Declaration and inlines of the class * to define the adjoint variables of the mesh movement. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/variables/CDiscAdjVariable.hpp b/SU2_CFD/include/variables/CDiscAdjVariable.hpp index d35282aa7337..fdd5a3f79ae5 100644 --- a/SU2_CFD/include/variables/CDiscAdjVariable.hpp +++ b/SU2_CFD/include/variables/CDiscAdjVariable.hpp @@ -2,14 +2,14 @@ * \file CDiscAdjVariable.hpp * \brief Main class for defining the variables of the adjoint solver. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/variables/CEulerVariable.hpp b/SU2_CFD/include/variables/CEulerVariable.hpp index 68c9587a2372..6c8e630b0607 100644 --- a/SU2_CFD/include/variables/CEulerVariable.hpp +++ b/SU2_CFD/include/variables/CEulerVariable.hpp @@ -2,14 +2,14 @@ * \file CEulerVariable.hpp * \brief Class for defining the variables of the compressible Euler solver. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -116,10 +116,8 @@ class CEulerVariable : public CFlowVariable { */ bool SetSoundSpeed(unsigned long iPoint, su2double soundspeed2) final { if (soundspeed2 < 0.0) return true; - else { - Primitive(iPoint,nDim+4) = sqrt(soundspeed2); - return false; - } + Primitive(iPoint,nDim+4) = sqrt(soundspeed2); + return false; } /*! diff --git a/SU2_CFD/include/variables/CFEABoundVariable.hpp b/SU2_CFD/include/variables/CFEABoundVariable.hpp index 9fa1e27e45f2..fabc1d4cbd68 100644 --- a/SU2_CFD/include/variables/CFEABoundVariable.hpp +++ b/SU2_CFD/include/variables/CFEABoundVariable.hpp @@ -2,14 +2,14 @@ * \file CFEABoundVariable.hpp * \brief Class for defining the variables on the FEA boundaries for FSI applications. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -37,7 +37,7 @@ * A map is constructed so that variables can be referenced by iPoint instead of iVertex. * \ingroup Structural Finite Element Analysis Variables * \author R. Sanchez. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CFEABoundVariable final : public CFEAVariable { protected: diff --git a/SU2_CFD/include/variables/CFEAVariable.hpp b/SU2_CFD/include/variables/CFEAVariable.hpp index f3ea6364c258..2f248099d48d 100644 --- a/SU2_CFD/include/variables/CFEAVariable.hpp +++ b/SU2_CFD/include/variables/CFEAVariable.hpp @@ -2,14 +2,14 @@ * \file CFEAVariable.hpp * \brief Class for defining the variables of the FEM structural problem. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -34,7 +34,7 @@ * \brief Class for defining the variables of the FEM structural problem. * \ingroup Structural Finite Element Analysis Variables * \author F. Palacios, R. Sanchez. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CFEAVariable : public CVariable { protected: diff --git a/SU2_CFD/include/variables/CFlowVariable.hpp b/SU2_CFD/include/variables/CFlowVariable.hpp index 95d59c083ad3..0e630ba0aba2 100644 --- a/SU2_CFD/include/variables/CFlowVariable.hpp +++ b/SU2_CFD/include/variables/CFlowVariable.hpp @@ -1,14 +1,14 @@ /*! * \file CFlowVariable.hpp * \brief Class for defining the common variables of flow solvers. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -260,7 +260,7 @@ class CFlowVariable : public CVariable { * \param[in] iPoint - Point index. * \return Value of magnitude. */ - inline su2double GetStrainMag(unsigned long iPoint) const final { return StrainMag(iPoint); } + inline su2double GetStrainMag(unsigned long iPoint) const { return StrainMag(iPoint); } /*! * \brief Get the entire vector of the rate of strain magnitude. diff --git a/SU2_CFD/include/variables/CHeatVariable.hpp b/SU2_CFD/include/variables/CHeatVariable.hpp index d6d4795db64a..0bb84e729087 100644 --- a/SU2_CFD/include/variables/CHeatVariable.hpp +++ b/SU2_CFD/include/variables/CHeatVariable.hpp @@ -2,14 +2,14 @@ * \file CHeatVariable.hpp * \brief Class for defining the variables of the finite-volume heat equation solver. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -33,7 +33,7 @@ * \class CHeatVariable * \brief Class for defining the variables of the finite-volume heat equation solver. * \author O. Burghardt - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" */ class CHeatVariable final : public CScalarVariable { public: diff --git a/SU2_CFD/include/variables/CIncEulerVariable.hpp b/SU2_CFD/include/variables/CIncEulerVariable.hpp index 7f398351f04f..5792d795f1f8 100644 --- a/SU2_CFD/include/variables/CIncEulerVariable.hpp +++ b/SU2_CFD/include/variables/CIncEulerVariable.hpp @@ -2,14 +2,14 @@ * \file CIncEulerVariable.hpp * \brief Class for defining the variables of the incompressible Euler solver. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/variables/CIncNSVariable.hpp b/SU2_CFD/include/variables/CIncNSVariable.hpp index 138026140b5e..60e397c5c5aa 100644 --- a/SU2_CFD/include/variables/CIncNSVariable.hpp +++ b/SU2_CFD/include/variables/CIncNSVariable.hpp @@ -3,14 +3,14 @@ * \brief Class for defining the variables of the incompressible Navier-Stokes solver. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/variables/CMeshBoundVariable.hpp b/SU2_CFD/include/variables/CMeshBoundVariable.hpp index deebf41eb8e2..db4d5c7bea12 100644 --- a/SU2_CFD/include/variables/CMeshBoundVariable.hpp +++ b/SU2_CFD/include/variables/CMeshBoundVariable.hpp @@ -3,14 +3,14 @@ * \brief Declaration and inlines of the class * to define the variables of the mesh movement at the moving boundaries. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/variables/CMeshElement.hpp b/SU2_CFD/include/variables/CMeshElement.hpp index bec06d079447..993346e7cacb 100644 --- a/SU2_CFD/include/variables/CMeshElement.hpp +++ b/SU2_CFD/include/variables/CMeshElement.hpp @@ -3,14 +3,14 @@ * \brief Declaration and inlines of the class * to define the variables of the mesh movement. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/variables/CMeshVariable.hpp b/SU2_CFD/include/variables/CMeshVariable.hpp index fc153cd6da62..5dc98b9fb9e0 100644 --- a/SU2_CFD/include/variables/CMeshVariable.hpp +++ b/SU2_CFD/include/variables/CMeshVariable.hpp @@ -3,14 +3,14 @@ * \brief Declaration and inlines of the class * to define the variables of the mesh movement. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/variables/CNEMOEulerVariable.hpp b/SU2_CFD/include/variables/CNEMOEulerVariable.hpp index e29df07dc6b0..387bc22fe130 100644 --- a/SU2_CFD/include/variables/CNEMOEulerVariable.hpp +++ b/SU2_CFD/include/variables/CNEMOEulerVariable.hpp @@ -2,14 +2,14 @@ * \file CNEMOEulerVariable.hpp * \brief Class for defining the variables of the compressible NEMO Euler solver. * \author C. Garbacz, W. Maier, S.R. Copeland - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/variables/CNEMONSVariable.hpp b/SU2_CFD/include/variables/CNEMONSVariable.hpp index c7a550ea0d55..e4252a1b4f05 100644 --- a/SU2_CFD/include/variables/CNEMONSVariable.hpp +++ b/SU2_CFD/include/variables/CNEMONSVariable.hpp @@ -2,14 +2,14 @@ * \file CNEMONSVariable.hpp * \brief Class for defining the variables of the compressible NEMO Navier-Stokes solver. * \author C. Garbacz, W. Maier, S.R. Copeland. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/variables/CNSVariable.hpp b/SU2_CFD/include/variables/CNSVariable.hpp index c3a8f6aba2ca..88ca13b49d9d 100644 --- a/SU2_CFD/include/variables/CNSVariable.hpp +++ b/SU2_CFD/include/variables/CNSVariable.hpp @@ -2,14 +2,14 @@ * \file CNSVariable.hpp * \brief Class for defining the variables of the compressible Navier-Stokes solver. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/variables/CPrimitiveIndices.hpp b/SU2_CFD/include/variables/CPrimitiveIndices.hpp index 866b7a15f89b..a5b63de2584f 100644 --- a/SU2_CFD/include/variables/CPrimitiveIndices.hpp +++ b/SU2_CFD/include/variables/CPrimitiveIndices.hpp @@ -1,14 +1,14 @@ /*! * \file CPrimitiveIndices.hpp * \brief Abstract representation of flow primitive variable indices that tries to be efficient. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/variables/CRadP1Variable.hpp b/SU2_CFD/include/variables/CRadP1Variable.hpp index 8eb562a7c507..51a148df7b9d 100644 --- a/SU2_CFD/include/variables/CRadP1Variable.hpp +++ b/SU2_CFD/include/variables/CRadP1Variable.hpp @@ -2,14 +2,14 @@ * \file CRadP1Variable.hpp * \brief Class for defining the variables of the P1 radiation model. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/variables/CRadVariable.hpp b/SU2_CFD/include/variables/CRadVariable.hpp index 9b1a70213244..1cdc790905a5 100644 --- a/SU2_CFD/include/variables/CRadVariable.hpp +++ b/SU2_CFD/include/variables/CRadVariable.hpp @@ -2,14 +2,14 @@ * \file CRadVariable.hpp * \brief Class for defining the variables of the radiation solver. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/variables/CScalarVariable.hpp b/SU2_CFD/include/variables/CScalarVariable.hpp index ad27f09518ef..09d1f2a24acd 100644 --- a/SU2_CFD/include/variables/CScalarVariable.hpp +++ b/SU2_CFD/include/variables/CScalarVariable.hpp @@ -2,14 +2,14 @@ * \file CScalarVariable.hpp * \brief Base class for defining the shared variables of scalar solvers. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/variables/CSobolevSmoothingVariable.hpp b/SU2_CFD/include/variables/CSobolevSmoothingVariable.hpp index 6366d250d07e..78423ebfbbe8 100644 --- a/SU2_CFD/include/variables/CSobolevSmoothingVariable.hpp +++ b/SU2_CFD/include/variables/CSobolevSmoothingVariable.hpp @@ -2,14 +2,14 @@ * \file CSobolevSmoothingVariable.hpp * \brief Class for defining the variables of the gradient smoothing. * \author T.Dick - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/variables/CSpeciesFlameletVariable.hpp b/SU2_CFD/include/variables/CSpeciesFlameletVariable.hpp index a1eac80ae48e..9055ccf3eef9 100644 --- a/SU2_CFD/include/variables/CSpeciesFlameletVariable.hpp +++ b/SU2_CFD/include/variables/CSpeciesFlameletVariable.hpp @@ -2,14 +2,14 @@ * \file CSpeciesFlameletVariable.hpp * \brief Base class for defining the variables of the flamelet transport model. * \author D. Mayer, T. Economon, N. Beishuizen - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/variables/CSpeciesVariable.hpp b/SU2_CFD/include/variables/CSpeciesVariable.hpp index faeca8fa7194..b82871a9e03c 100644 --- a/SU2_CFD/include/variables/CSpeciesVariable.hpp +++ b/SU2_CFD/include/variables/CSpeciesVariable.hpp @@ -2,14 +2,14 @@ * \file CSpeciesVariable.hpp * \brief Base class for defining the variables of the species transport model. * \author T. Kattmann - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/variables/CTransLMVariable.hpp b/SU2_CFD/include/variables/CTransLMVariable.hpp index 94b8b8016137..c4518451484a 100644 --- a/SU2_CFD/include/variables/CTransLMVariable.hpp +++ b/SU2_CFD/include/variables/CTransLMVariable.hpp @@ -2,14 +2,14 @@ * \file CTransLMVariable.hpp * \brief Declaration of the variables of the transition model. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/variables/CTurbSAVariable.hpp b/SU2_CFD/include/variables/CTurbSAVariable.hpp index f0e5ac2957a0..b6008db3a9eb 100644 --- a/SU2_CFD/include/variables/CTurbSAVariable.hpp +++ b/SU2_CFD/include/variables/CTurbSAVariable.hpp @@ -2,14 +2,14 @@ * \file CTurbSAVariable.hpp * \brief Declaration of the variables of the SA turbulence model. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/variables/CTurbSSTVariable.hpp b/SU2_CFD/include/variables/CTurbSSTVariable.hpp index dcc4772100e1..fadbebc7f56f 100644 --- a/SU2_CFD/include/variables/CTurbSSTVariable.hpp +++ b/SU2_CFD/include/variables/CTurbSSTVariable.hpp @@ -2,14 +2,14 @@ * \file CTurbSSTVariable.hpp * \brief Declaration of the variables of the SST turbulence model. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/include/variables/CTurbVariable.hpp b/SU2_CFD/include/variables/CTurbVariable.hpp index 48f2087b2bf4..2e9de32fbb24 100644 --- a/SU2_CFD/include/variables/CTurbVariable.hpp +++ b/SU2_CFD/include/variables/CTurbVariable.hpp @@ -2,14 +2,14 @@ * \file CTurbVariable.hpp * \brief Base class for defining the variables of the turbulence model. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -100,5 +100,9 @@ class CTurbVariable : public CScalarVariable { */ inline void SetIntermittency(unsigned long iPoint, su2double val_intermittency) final { intermittency(iPoint) = val_intermittency; } + /*! + * \brief Register eddy viscosity (muT) as Input or Output of an AD recording. + * \param[in] input - Boolean whether In- or Output should be registered. + */ + void RegisterEddyViscosity(bool input); }; - diff --git a/SU2_CFD/include/variables/CVariable.hpp b/SU2_CFD/include/variables/CVariable.hpp index bc855bc5dca5..7088d2ea5a6e 100644 --- a/SU2_CFD/include/variables/CVariable.hpp +++ b/SU2_CFD/include/variables/CVariable.hpp @@ -4,14 +4,14 @@ variables, function definitions in file CVariable.cpp. All variables are children of at least this class. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -137,6 +137,20 @@ class CVariable { RegisterContainer(input, variable, &ad_index); } + void RegisterContainer(bool input, su2activevector& variable, su2vector* ad_index = nullptr) { + const auto nPoint = variable.rows(); + SU2_OMP_FOR_STAT(roundUpDiv(nPoint,omp_get_num_threads())) + for (unsigned long iPoint = 0; iPoint < nPoint; ++iPoint) { + + if (input) AD::RegisterInput(variable(iPoint)); + else AD::RegisterOutput(variable(iPoint)); + + if (ad_index) AD::SetIndex((*ad_index)(iPoint), variable(iPoint)); + + } + END_SU2_OMP_FOR + } + public: /*--- Disable copy and assignment. ---*/ CVariable(const CVariable&) = delete; @@ -1147,13 +1161,6 @@ class CVariable { inline virtual su2double *GetVorticity(unsigned long iPoint) { return nullptr; } inline virtual const su2double *GetVorticity(unsigned long iPoint) const { return nullptr; } - /*! - * \brief A virtual member. - * \param[in] iPoint - Point index. - * \return Value of the rate of strain magnitude. - */ - inline virtual su2double GetStrainMag(unsigned long iPoint) const { return 0.0; } - /*! * \brief A virtual member. * \param[in] iPoint - Point index. diff --git a/SU2_CFD/src/CMarkerProfileReaderFVM.cpp b/SU2_CFD/src/CMarkerProfileReaderFVM.cpp index 6b77ff3b9052..acca63b54236 100644 --- a/SU2_CFD/src/CMarkerProfileReaderFVM.cpp +++ b/SU2_CFD/src/CMarkerProfileReaderFVM.cpp @@ -2,14 +2,14 @@ * \file CMarkerProfileReaderFVM.cpp * \brief Class that handles the reading of marker profile files. * \author T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/SU2_CFD.cpp b/SU2_CFD/src/SU2_CFD.cpp index 33bb1a93d15e..4d226c128422 100644 --- a/SU2_CFD/src/SU2_CFD.cpp +++ b/SU2_CFD/src/SU2_CFD.cpp @@ -2,14 +2,14 @@ * \file SU2_CFD.cpp * \brief Main file of the SU2 Computational Fluid Dynamics code * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -27,11 +27,6 @@ #include "../include/SU2_CFD.hpp" -/* LIBXSMM include files, if supported. */ -#ifdef HAVE_LIBXSMM -#include "libxsmm.h" -#endif - /* Include file, needed for the runtime NaN catching. You also have to include feenableexcept(...) below. */ //#include @@ -47,7 +42,7 @@ int main(int argc, char *argv[]) { /*--- Command line parsing ---*/ - CLI::App app{"SU2 v8.1.0 \"Harrier\", The Open-Source CFD Code"}; + CLI::App app{"SU2 v8.2.0 \"Harrier\", The Open-Source CFD Code"}; app.add_flag("-d,--dryrun", dry_run, "Enable dry run mode.\n" "Only execute preprocessing steps using a dummy geometry."); app.add_option("-t,--threads", num_threads, "Number of OpenMP threads per MPI rank."); @@ -77,11 +72,6 @@ int main(int argc, char *argv[]) { /*--- Uncomment the following line if runtime NaN catching is desired. ---*/ // feenableexcept(FE_INVALID | FE_OVERFLOW | FE_DIVBYZERO ); - /*--- Initialize libxsmm, if supported. ---*/ -#ifdef HAVE_LIBXSMM - libxsmm_init(); -#endif - /*--- Create a pointer to the main SU2 Driver ---*/ CDriver* driver = nullptr; @@ -154,11 +144,6 @@ int main(int argc, char *argv[]) { delete driver; - /*---Finalize libxsmm, if supported. ---*/ -#ifdef HAVE_LIBXSMM - libxsmm_finalize(); -#endif - /*--- Finalize AD. ---*/ AD::Finalize(); diff --git a/SU2_CFD/src/definition_structure.cpp b/SU2_CFD/src/definition_structure.cpp index a34e3fe269da..0034820bcf51 100644 --- a/SU2_CFD/src/definition_structure.cpp +++ b/SU2_CFD/src/definition_structure.cpp @@ -2,14 +2,14 @@ * \file definition_structure.cpp * \brief Main subroutines used by SU2_CFD * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/drivers/CDiscAdjMultizoneDriver.cpp b/SU2_CFD/src/drivers/CDiscAdjMultizoneDriver.cpp index 6e5519a63f2e..c8dd0b1e98c3 100644 --- a/SU2_CFD/src/drivers/CDiscAdjMultizoneDriver.cpp +++ b/SU2_CFD/src/drivers/CDiscAdjMultizoneDriver.cpp @@ -2,14 +2,14 @@ * \file CDiscAdjMultizoneDriver.cpp * \brief The main subroutines for driving adjoint multi-zone problems * \author O. Burghardt, P. Gomes, T. Albring, R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/drivers/CDiscAdjSinglezoneDriver.cpp b/SU2_CFD/src/drivers/CDiscAdjSinglezoneDriver.cpp index de39415300ce..688ba8fbfba0 100644 --- a/SU2_CFD/src/drivers/CDiscAdjSinglezoneDriver.cpp +++ b/SU2_CFD/src/drivers/CDiscAdjSinglezoneDriver.cpp @@ -2,14 +2,14 @@ * \file driver_adjoint_singlezone.cpp * \brief The main subroutines for driving adjoint single-zone problems. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/drivers/CDriver.cpp b/SU2_CFD/src/drivers/CDriver.cpp index 015e808b6269..0feaa21d06af 100644 --- a/SU2_CFD/src/drivers/CDriver.cpp +++ b/SU2_CFD/src/drivers/CDriver.cpp @@ -2,14 +2,14 @@ * \file CDriver.cpp * \brief The main subroutines for driving single or multi-zone problems. * \author T. Economon, H. Kline, R. Sanchez, F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -833,7 +833,7 @@ void CDriver::InitializeGeometryFVM(CConfig *config, CGeometry **&geometry) { geometry[iMGlevel]->SetBoundControlVolume(geometry[iMGlevel-1], config, ALLOCATE); geometry[iMGlevel]->SetCoord(geometry[iMGlevel-1]); - /*--- Find closest neighbor to a surface point ---*/ + /*--- Find closest, most normal, neighbor to a surface point ---*/ geometry[iMGlevel]->FindNormal_Neighbor(config); @@ -1527,7 +1527,9 @@ void CDriver::InitializeNumerics(CConfig *config, CGeometry **geometry, CSolver case MAIN_SOLVER::FEM_ELASTICITY: case MAIN_SOLVER::DISC_ADJ_FEM: - fem = true; break; + fem = true; + heat = config->GetWeakly_Coupled_Heat(); + break; case MAIN_SOLVER::ADJ_EULER: adj_euler = euler = compressible = true; break; @@ -2517,7 +2519,7 @@ void CDriver::InitializeInterface(CConfig **config, CSolver***** solver, CGeomet else interface_type = NO_TRANSFER; } - + if (interface_type != NO_TRANSFER) { auto nVar = 4; interface[donor][target] = new CConjugateHeatInterface(nVar, 0); diff --git a/SU2_CFD/src/drivers/CDriverBase.cpp b/SU2_CFD/src/drivers/CDriverBase.cpp index 53483856b5da..fcf9162e0729 100644 --- a/SU2_CFD/src/drivers/CDriverBase.cpp +++ b/SU2_CFD/src/drivers/CDriverBase.cpp @@ -2,14 +2,14 @@ * \file CDriverBase.hpp * \brief Base class template for all drivers. * \author H. Patel, A. Gastaldi - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/drivers/CDummyDriver.cpp b/SU2_CFD/src/drivers/CDummyDriver.cpp index bf040979f070..890b85a15921 100644 --- a/SU2_CFD/src/drivers/CDummyDriver.cpp +++ b/SU2_CFD/src/drivers/CDummyDriver.cpp @@ -2,14 +2,14 @@ * \file CDummyDriver.cpp * \brief Dummy driver class for running the preprocessing without geometry preprocessing. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/drivers/CMultizoneDriver.cpp b/SU2_CFD/src/drivers/CMultizoneDriver.cpp index d5e2fbbafbbb..ea84c96a64bb 100644 --- a/SU2_CFD/src/drivers/CMultizoneDriver.cpp +++ b/SU2_CFD/src/drivers/CMultizoneDriver.cpp @@ -2,14 +2,14 @@ * \file driver_structure.cpp * \brief The main subroutines for driving multi-zone problems. * \author R. Sanchez, O. Burghardt - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/drivers/CSinglezoneDriver.cpp b/SU2_CFD/src/drivers/CSinglezoneDriver.cpp index ed4d46f370e1..565f8e8bb523 100644 --- a/SU2_CFD/src/drivers/CSinglezoneDriver.cpp +++ b/SU2_CFD/src/drivers/CSinglezoneDriver.cpp @@ -2,14 +2,14 @@ * \file driver_direct_singlezone.cpp * \brief The main subroutines for driving single-zone problems. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/fluid/CCoolProp.cpp b/SU2_CFD/src/fluid/CCoolProp.cpp index 85dd490e2644..7b2071bb281c 100644 --- a/SU2_CFD/src/fluid/CCoolProp.cpp +++ b/SU2_CFD/src/fluid/CCoolProp.cpp @@ -2,14 +2,14 @@ * \file CCoolProp.cpp * \brief Source of the fluid model from CoolProp. * \author P. Yan, G. Gori, A. Guardone - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/fluid/CDataDrivenFluid.cpp b/SU2_CFD/src/fluid/CDataDrivenFluid.cpp index f4c81091df0c..2e3205fafeb1 100644 --- a/SU2_CFD/src/fluid/CDataDrivenFluid.cpp +++ b/SU2_CFD/src/fluid/CDataDrivenFluid.cpp @@ -2,14 +2,14 @@ * \file CDataDrivenFluid.cpp * \brief Source of the data-driven fluid model class * \author E.C.Bunschoten M.Mayer A.Capiello - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -33,30 +33,45 @@ CDataDrivenFluid::CDataDrivenFluid(const CConfig* config, bool display) : CFluidModel() { rank = SU2_MPI::GetRank(); - Kind_DataDriven_Method = config->GetKind_DataDriven_Method(); + DataDrivenFluid_ParsedOptions datadriven_fluid_options = config->GetDataDrivenParsedOptions(); + + Kind_DataDriven_Method = datadriven_fluid_options.interp_algorithm_type; varname_rho = "Density"; varname_e = "Energy"; + /*--- Use physics-informed approach ---*/ + use_MLP_derivatives = datadriven_fluid_options.use_PINN; + + /*--- Retrieve initial density and static energy values from config ---*/ + val_custom_init_e = datadriven_fluid_options.rho_init_custom; + val_custom_init_rho = datadriven_fluid_options.e_init_custom; + custom_init_e = (val_custom_init_e != -1.0); + custom_init_rho = (val_custom_init_rho != -1.0); + + /*--- Set up interpolation algorithm according to data-driven method. Currently only MLP's are supported. ---*/ switch (Kind_DataDriven_Method) { case ENUM_DATADRIVEN_METHOD::MLP: #ifdef USE_MLPCPP - lookup_mlp = new MLPToolbox::CLookUp_ANN(config->GetNDataDriven_Files(), config->GetDataDriven_FileNames()); + lookup_mlp = new MLPToolbox::CLookUp_ANN(datadriven_fluid_options.n_filenames, datadriven_fluid_options.datadriven_filenames); if ((rank == MASTER_NODE) && display) lookup_mlp->DisplayNetworkInfo(); #else SU2_MPI::Error("SU2 was not compiled with MLPCpp enabled (-Denable-mlpcpp=true).", CURRENT_FUNCTION); #endif break; case ENUM_DATADRIVEN_METHOD::LUT: - lookup_table = new CLookUpTable(config->GetDataDriven_FileNames()[0], varname_rho, varname_e); + if (use_MLP_derivatives && (rank == MASTER_NODE) && display) + cout << "Physics-informed approach currently only works with MLP-based tabulation." << endl; + + lookup_table = new CLookUpTable(datadriven_fluid_options.datadriven_filenames[0], varname_rho, varname_e); break; default: break; } /*--- Relaxation factor and tolerance for Newton solvers. ---*/ - Newton_Relaxation = config->GetRelaxation_DataDriven(); + Newton_Relaxation = datadriven_fluid_options.Newton_relaxation; Newton_Tolerance = 1e-10; MaxIter_Newton = 50; @@ -92,23 +107,50 @@ void CDataDrivenFluid::MapInputs_to_Outputs() { /*--- Required outputs for the interpolation method are entropy and its partial derivatives with respect to energy and * density. ---*/ - size_t n_outputs = 6; - size_t idx_s = 0, idx_dsde_rho = 1, idx_dsdrho_e = 2, idx_d2sde2 = 3, idx_d2sdedrho = 4, idx_d2sdrho2 = 5; - - outputs_rhoe.resize(n_outputs); - output_names_rhoe.resize(n_outputs); - output_names_rhoe[idx_s] = "s"; - outputs_rhoe[idx_s] = &Entropy; - output_names_rhoe[idx_dsde_rho] = "dsde_rho"; - outputs_rhoe[idx_dsde_rho] = &dsde_rho; - output_names_rhoe[idx_dsdrho_e] = "dsdrho_e"; - outputs_rhoe[idx_dsdrho_e] = &dsdrho_e; - output_names_rhoe[idx_d2sde2] = "d2sde2"; - outputs_rhoe[idx_d2sde2] = &d2sde2; - output_names_rhoe[idx_d2sdedrho] = "d2sdedrho"; - outputs_rhoe[idx_d2sdedrho] = &d2sdedrho; - output_names_rhoe[idx_d2sdrho2] = "d2sdrho2"; - outputs_rhoe[idx_d2sdrho2] = &d2sdrho2; + size_t n_outputs, idx_s,idx_dsde_rho = 1, idx_dsdrho_e = 2, idx_d2sde2 = 3, idx_d2sdedrho = 4, idx_d2sdrho2 = 5; + if (use_MLP_derivatives) { + n_outputs = 1; + idx_s = 0; + + outputs_rhoe.resize(n_outputs); + output_names_rhoe.resize(n_outputs); + output_names_rhoe[idx_s] = "s"; + outputs_rhoe[idx_s] = &Entropy; + + dsdrhoe.resize(n_outputs); + d2sdrhoe2.resize(n_outputs); + dsdrhoe[0].resize(2); + dsdrhoe[0][idx_rho] = &dsdrho_e; + dsdrhoe[0][idx_e] = &dsde_rho; + + d2sdrhoe2[0].resize(2); + d2sdrhoe2[0][idx_rho].resize(2); + d2sdrhoe2[0][idx_e].resize(2); + d2sdrhoe2[0][idx_rho][idx_rho] = &d2sdrho2; + d2sdrhoe2[0][idx_rho][idx_e] = &d2sdedrho; + d2sdrhoe2[0][idx_e][idx_rho] = &d2sdedrho; + d2sdrhoe2[0][idx_e][idx_e] = &d2sde2; + } else { + n_outputs = 6; + idx_s = 0; + idx_dsde_rho = 1, idx_dsdrho_e = 2, idx_d2sde2 = 3, idx_d2sdedrho = 4, idx_d2sdrho2 = 5; + + outputs_rhoe.resize(n_outputs); + output_names_rhoe.resize(n_outputs); + output_names_rhoe[idx_s] = "s"; + outputs_rhoe[idx_s] = &Entropy; + output_names_rhoe[idx_dsde_rho] = "dsde_rho"; + outputs_rhoe[idx_dsde_rho] = &dsde_rho; + output_names_rhoe[idx_dsdrho_e] = "dsdrho_e"; + outputs_rhoe[idx_dsdrho_e] = &dsdrho_e; + output_names_rhoe[idx_d2sde2] = "d2sde2"; + outputs_rhoe[idx_d2sde2] = &d2sde2; + output_names_rhoe[idx_d2sdedrho] = "d2sdedrho"; + outputs_rhoe[idx_d2sdedrho] = &d2sdedrho; + output_names_rhoe[idx_d2sdrho2] = "d2sdrho2"; + outputs_rhoe[idx_d2sdrho2] = &d2sdrho2; + } + /*--- Further preprocessing of input and output variables. ---*/ if (Kind_DataDriven_Method == ENUM_DATADRIVEN_METHOD::MLP) { @@ -137,44 +179,67 @@ void CDataDrivenFluid::MapInputs_to_Outputs() { } void CDataDrivenFluid::SetTDState_rhoe(su2double rho, su2double e) { - /*--- Compute thermodynamic state based on density and energy. ---*/ - Density = rho; - StaticEnergy = e; - /*--- Clip density and energy values to prevent extrapolation. ---*/ - Density = min(rho_max, max(rho_min, Density)); - StaticEnergy = min(e_max, max(e_min, StaticEnergy)); + Density = max(min(rho, rho_max), rho_min); + StaticEnergy = max(min(e, e_max), e_min); - Evaluate_Dataset(Density, StaticEnergy); + AD::StartPreacc(); + AD::SetPreaccIn(Density); + AD::SetPreaccIn(StaticEnergy); - /*--- Compute speed of sound. ---*/ - auto blue_term = (dsdrho_e * (2 - rho * pow(dsde_rho, -1) * d2sdedrho) + rho * d2sdrho2); - auto green_term = (-pow(dsde_rho, -1) * d2sde2 * dsdrho_e + d2sdedrho); + /*--- Compute thermodynamic state based on density and energy. ---*/ + + Density = max(min(rho, rho_max), rho_min); + StaticEnergy = max(min(e, e_max), e_min); - SoundSpeed2 = -rho * pow(dsde_rho, -1) * (blue_term - rho * green_term * (dsdrho_e / dsde_rho)); + Evaluate_Dataset(Density, StaticEnergy); + const su2double rho_2 = Density * Density; /*--- Compute primary flow variables. ---*/ - Temperature = 1.0 / dsde_rho; - Pressure = -pow(rho, 2) * Temperature * dsdrho_e; - Density = rho; - StaticEnergy = e; - Enthalpy = e + Pressure / rho; + Temperature = pow(dsde_rho, -1); + Pressure = -rho_2 * Temperature * dsdrho_e; + Enthalpy = StaticEnergy + Pressure / Density; /*--- Compute secondary flow variables ---*/ - dTde_rho = -pow(dsde_rho, -2) * d2sde2; - dTdrho_e = -pow(dsde_rho, -2) * d2sdedrho; + dTde_rho = -Temperature * Temperature * d2sde2; + dTdrho_e = -Temperature * Temperature * d2sdedrho; - dPde_rho = -pow(rho, 2) * (dTde_rho * dsdrho_e + Temperature * d2sdedrho); - dPdrho_e = -2 * rho * Temperature * dsdrho_e - pow(rho, 2) * (dTdrho_e * dsdrho_e + Temperature * d2sdrho2); + /*--- Compute speed of sound. ---*/ + const su2double blue_term = (dsdrho_e * (2 - Density * Temperature * d2sdedrho) + Density * d2sdrho2); + const su2double green_term = (-Temperature * d2sde2 * dsdrho_e + d2sdedrho); + + SoundSpeed2 = -Density * Temperature * (blue_term - Density * green_term * (dsdrho_e / dsde_rho)); + + dPde_rho = -rho_2 * Temperature * (-Temperature * (d2sde2 * dsdrho_e) + d2sdedrho); + dPdrho_e = - Density * Temperature * (dsdrho_e * (2 - Density * Temperature * d2sdedrho) + Density * d2sdrho2); /*--- Compute enthalpy and entropy derivatives required for Giles boundary conditions. ---*/ - dhdrho_e = -Pressure * pow(rho, -2) + dPdrho_e / rho; - dhde_rho = 1 + dPde_rho / rho; + dhdrho_e = -Pressure * (1 / rho_2) + dPdrho_e / Density; + dhde_rho = 1 + dPde_rho / Density; + /*--- Compute specific heat at constant volume and specific heat at constant pressure. ---*/ + Cv = 1 / dTde_rho; dhdrho_P = dhdrho_e - dhde_rho * (1 / dPde_rho) * dPdrho_e; dhdP_rho = dhde_rho * (1 / dPde_rho); dsdrho_P = dsdrho_e - dPdrho_e * (1 / dPde_rho) * dsde_rho; dsdP_rho = dsde_rho / dPde_rho; + + const su2double drhode_p = -dPde_rho/dPdrho_e; + const su2double dTde_p = dTde_rho + dTdrho_e*drhode_p; + const su2double dhde_p = dhde_rho + drhode_p*dhdrho_e; + Cp = dhde_p / dTde_p; + + AD::SetPreaccOut(Temperature); + AD::SetPreaccOut(SoundSpeed2); + AD::SetPreaccOut(dPde_rho); + AD::SetPreaccOut(dPdrho_e); + AD::SetPreaccOut(dTde_rho); + AD::SetPreaccOut(dTdrho_e); + AD::SetPreaccOut(Pressure); + AD::SetPreaccOut(Entropy); + AD::SetPreaccOut(Cp); + AD::SetPreaccOut(Cv); + AD::EndPreacc(); } void CDataDrivenFluid::SetTDState_PT(su2double P, su2double T) { @@ -184,7 +249,7 @@ void CDataDrivenFluid::SetTDState_PT(su2double P, su2double T) { e_start = Cv_idealgas * T; /*--- Run 2D Newton solver for pressure and temperature ---*/ - Run_Newton_Solver(P, T, &Pressure, &Temperature, &dPdrho_e, &dPde_rho, &dTdrho_e, &dTde_rho); + Run_Newton_Solver(P, T, Pressure, Temperature, dPdrho_e, dPde_rho, dTdrho_e, dTde_rho); } void CDataDrivenFluid::SetTDState_Prho(su2double P, su2double rho) { @@ -197,10 +262,9 @@ void CDataDrivenFluid::SetEnergy_Prho(su2double P, su2double rho) { Density = rho; /*--- Approximate static energy through ideal gas law. ---*/ - su2double e_idealgas = Cv_idealgas * (P / (R_idealgas * rho)); - StaticEnergy = min(e_max, max(e_idealgas, e_min)); + StaticEnergy = Cv_idealgas * (P / (R_idealgas * rho)); - Run_Newton_Solver(P, &Pressure, &StaticEnergy, &dPde_rho); + Run_Newton_Solver(P, Pressure, StaticEnergy, dPde_rho); } void CDataDrivenFluid::SetTDState_rhoT(su2double rho, su2double T) { @@ -210,40 +274,49 @@ void CDataDrivenFluid::SetTDState_rhoT(su2double rho, su2double T) { /*--- Approximate static energy through ideal gas law. ---*/ StaticEnergy = Cv_idealgas * T; - Run_Newton_Solver(T, &Temperature, &StaticEnergy, &dTde_rho); + Run_Newton_Solver(T, Temperature, StaticEnergy, dTde_rho); } void CDataDrivenFluid::SetTDState_hs(su2double h, su2double s) { /*--- Run 2D Newton solver for enthalpy and entropy. ---*/ - /*--- Approximate density and static energy through ideal gas law under isentropic assumption. ---*/ - su2double T_init = h / Cp_idealgas; - su2double P_init = P_middle * pow(T_init / T_middle, gamma_idealgas/(gamma_idealgas - 1)); - - e_start = h * Cv_idealgas / Cp_idealgas; - rho_start = P_init / (R_idealgas * T_init); - Run_Newton_Solver(h, s, &Enthalpy, &Entropy, &dhdrho_e, &dhde_rho, &dsdrho_e, &dsde_rho); + e_start = StaticEnergy; + rho_start = Density; + Run_Newton_Solver(h, s, Enthalpy, Entropy, dhdrho_e, dhde_rho, dsdrho_e, dsde_rho); } void CDataDrivenFluid::SetTDState_Ps(su2double P, su2double s) { /*--- Run 2D Newton solver for pressure and entropy ---*/ - /*--- Approximate initial state through isentropic assumption and ideal gas law. ---*/ - su2double T_init = T_middle * pow(P / P_middle, (gamma_idealgas - 1)/gamma_idealgas); - e_start = Cv_idealgas * T_init; - rho_start = P / (R_idealgas * T_init); + e_start = StaticEnergy; + rho_start = Density; + Run_Newton_Solver(P, s, Pressure, Entropy, dPdrho_e, dPde_rho, dsdrho_e, dsde_rho); +} + + +void CDataDrivenFluid::ComputeDerivativeNRBC_Prho(su2double P, su2double rho) { + SetTDState_Prho(P, rho); - Run_Newton_Solver(P, s, &Pressure, &Entropy, &dPdrho_e, &dPde_rho, &dsdrho_e, &dsde_rho); + dhdrho_P = dhdrho_e - dhde_rho * (1 / dPde_rho) * dPdrho_e; + dhdP_rho = dhde_rho * (1 / dPde_rho); + dsdrho_P = dsdrho_e - dPdrho_e * (1 / dPde_rho) * dsde_rho; + dsdP_rho = dsde_rho / dPde_rho; } + unsigned long CDataDrivenFluid::Predict_MLP(su2double rho, su2double e) { unsigned long exit_code = 0; /*--- Evaluate MLP collection for the given values for density and energy. ---*/ #ifdef USE_MLPCPP MLP_inputs[idx_rho] = rho; MLP_inputs[idx_e] = e; - exit_code = lookup_mlp->PredictANN(iomap_rhoe, MLP_inputs, outputs_rhoe); + if (use_MLP_derivatives){ + exit_code = lookup_mlp->PredictANN(iomap_rhoe, MLP_inputs, outputs_rhoe, &dsdrhoe, &d2sdrhoe2); + } else { + exit_code = lookup_mlp->PredictANN(iomap_rhoe, MLP_inputs, outputs_rhoe); + } #endif + return exit_code; } @@ -268,37 +341,37 @@ void CDataDrivenFluid::Evaluate_Dataset(su2double rho, su2double e) { } } -void CDataDrivenFluid::Run_Newton_Solver(su2double Y1_target, su2double Y2_target, su2double* Y1, su2double* Y2, - su2double* dY1drho, su2double* dY1de, su2double* dY2drho, su2double* dY2de) { +void CDataDrivenFluid::Run_Newton_Solver(const su2double Y1_target, const su2double Y2_target, const su2double & Y1, const su2double & Y2, const su2double & dY1drho, + const su2double & dY1de, const su2double & dY2drho, const su2double & dY2de) { /*--- 2D Newton solver, computing the density and internal energy values corresponding to Y1_target and Y2_target. * ---*/ + AD::StartPreacc(); + AD::SetPreaccIn(Y1_target); + AD::SetPreaccIn(Y2_target); /*--- Setting initial values for density and energy. ---*/ su2double rho = rho_start, e = e_start; bool converged = false; unsigned long Iter = 0; - su2double delta_Y1, delta_Y2, delta_rho, delta_e, determinant; - /*--- Initiating Newton solver ---*/ while (!converged && (Iter < MaxIter_Newton)) { /*--- Determine thermodynamic state based on current density and energy. ---*/ SetTDState_rhoe(rho, e); /*--- Determine residuals. ---*/ - delta_Y1 = *Y1 - Y1_target; - delta_Y2 = *Y2 - Y2_target; + const su2double delta_Y1 = Y1 - Y1_target; + const su2double delta_Y2 = Y2 - Y2_target; /*--- Continue iterative process if residuals are outside tolerances. ---*/ - if ((abs(delta_Y1 / *Y1) < Newton_Tolerance) && (abs(delta_Y2 / *Y2) < Newton_Tolerance)) { + if ((abs(delta_Y1 / Y1) < Newton_Tolerance) && (abs(delta_Y2 / Y2) < Newton_Tolerance)) { converged = true; } else { /*--- Compute step size for density and energy. ---*/ - determinant = (*dY1drho) * (*dY2de) - (*dY1de) * (*dY2drho); - - delta_rho = (*dY2de * delta_Y1 - *dY1de * delta_Y2) / determinant; - delta_e = (-*dY2drho * delta_Y1 + *dY1drho * delta_Y2) / determinant; + const su2double determinant = (dY1drho) * (dY2de) - (dY1de) * (dY2drho); + const su2double delta_rho = (dY2de * delta_Y1 - dY1de * delta_Y2) / determinant; + const su2double delta_e = (-dY2drho * delta_Y1 + dY1drho * delta_Y2) / determinant; /*--- Update density and energy values. ---*/ rho -= Newton_Relaxation * delta_rho; @@ -307,38 +380,44 @@ void CDataDrivenFluid::Run_Newton_Solver(su2double Y1_target, su2double Y2_targe Iter++; } nIter_Newton = Iter; - + AD::SetPreaccOut(Density); + AD::SetPreaccOut(StaticEnergy); + AD::EndPreacc(); /*--- Evaluation of final state. ---*/ - SetTDState_rhoe(rho, e); + SetTDState_rhoe(Density, StaticEnergy); } -void CDataDrivenFluid::Run_Newton_Solver(su2double Y_target, su2double* Y, su2double* X, su2double* dYdX) { +void CDataDrivenFluid::Run_Newton_Solver(const su2double Y_target, const su2double & Y, su2double & X, const su2double & dYdX) { /*--- 1D Newton solver, computing the density or internal energy value corresponding to Y_target. ---*/ bool converged = false; unsigned long Iter = 0; - su2double delta_Y, delta_X; - + AD::StartPreacc(); + AD::SetPreaccIn(Y_target); + AD::SetPreaccIn(X); /*--- Initiating Newton solver. ---*/ while (!converged && (Iter < MaxIter_Newton)) { /*--- Determine thermodynamic state based on current density and energy. ---*/ SetTDState_rhoe(Density, StaticEnergy); /*--- Determine residual ---*/ - delta_Y = Y_target - *Y; + const su2double delta_Y = Y_target - Y; /*--- Continue iterative process if residuals are outside tolerances. ---*/ - if (abs(delta_Y / *Y) < Newton_Tolerance) { + if (abs(delta_Y / Y) < Newton_Tolerance) { converged = true; } else { - delta_X = delta_Y / *dYdX; + const su2double delta_X = delta_Y / dYdX; /*--- Update energy value ---*/ - *X += Newton_Relaxation * delta_X; + X += Newton_Relaxation * delta_X; } Iter++; } + AD::SetPreaccOut(Density); + AD::SetPreaccOut(StaticEnergy); + AD::EndPreacc(); /*--- Calculate thermodynamic state based on converged values for density and energy. ---*/ SetTDState_rhoe(Density, StaticEnergy); @@ -367,21 +446,27 @@ void CDataDrivenFluid::ComputeIdealGasQuantities() { e_min = lookup_mlp->GetInputNorm(iomap_rhoe, idx_e).first; rho_max = lookup_mlp->GetInputNorm(iomap_rhoe, idx_rho).second; e_max = lookup_mlp->GetInputNorm(iomap_rhoe, idx_e).second; - rho_average = 0.5*(lookup_mlp->GetInputNorm(iomap_rhoe, idx_rho).first + lookup_mlp->GetInputNorm(iomap_rhoe, idx_rho).second); - e_average = 0.5*(lookup_mlp->GetInputNorm(iomap_rhoe, idx_e).first + lookup_mlp->GetInputNorm(iomap_rhoe, idx_e).second); + rho_average = lookup_mlp->GetInputOffset(iomap_rhoe, idx_rho); + e_average = lookup_mlp->GetInputOffset(iomap_rhoe, idx_e); #endif break; default: break; } - /*--- Compute thermodynamic state from middle of data set. ---*/ - SetTDState_rhoe(rho_average, e_average); + + su2double rho_init = custom_init_rho ? val_custom_init_rho : rho_average; + su2double e_init = custom_init_e ? val_custom_init_e : e_average; + + SetTDState_rhoe(rho_init, e_init); + rho_median = rho_init; + e_median = e_init; P_middle = Pressure; T_middle = Temperature; - R_idealgas = P_middle / (rho_average * T_middle); - Cv_idealgas = e_average / T_middle; - Cp_idealgas = Enthalpy / T_middle; + R_idealgas = P_middle / (rho_init * T_middle); + Cv_idealgas = Cv; + Cp_idealgas = Cp; + gamma_idealgas = (R_idealgas / Cv_idealgas) + 1; } \ No newline at end of file diff --git a/SU2_CFD/src/fluid/CFluidFlamelet.cpp b/SU2_CFD/src/fluid/CFluidFlamelet.cpp index a458a3fd97c1..de14b501dd96 100644 --- a/SU2_CFD/src/fluid/CFluidFlamelet.cpp +++ b/SU2_CFD/src/fluid/CFluidFlamelet.cpp @@ -2,14 +2,14 @@ * \file CfluidFlamelet.cpp * \brief Main subroutines of CFluidFlamelet class * \author D. Mayer, T. Economon, N. Beishuizen, E. Bunschoten - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -36,13 +36,16 @@ CFluidFlamelet::CFluidFlamelet(CConfig* config, su2double value_pressure_operating) : CFluidModel() { rank = SU2_MPI::GetRank(); - Kind_DataDriven_Method = config->GetKind_DataDriven_Method(); + datadriven_fluid_options = config->GetDataDrivenParsedOptions(); + flamelet_options = config->GetFlameletParsedOptions(); + + Kind_DataDriven_Method = datadriven_fluid_options.interp_algorithm_type; /* -- number of auxiliary species transport equations, e.g. 1=CO, 2=NOx --- */ - n_user_scalars = config->GetNUserScalars(); - n_control_vars = config->GetNControlVars(); + n_user_scalars = flamelet_options.n_user_scalars; + n_control_vars = flamelet_options.n_control_vars; include_mixture_fraction = (n_control_vars == 3); - n_scalars = config->GetNScalars(); + n_scalars = flamelet_options.n_scalars; if (rank == MASTER_NODE) { cout << "Number of scalars: " << n_scalars << endl; @@ -52,19 +55,19 @@ CFluidFlamelet::CFluidFlamelet(CConfig* config, su2double value_pressure_operati scalars_vector.resize(n_scalars); table_scalar_names.resize(n_scalars); - for (auto iCV = 0u; iCV < n_control_vars; iCV++) table_scalar_names[iCV] = config->GetControllingVariableName(iCV); + for (auto iCV = 0u; iCV < n_control_vars; iCV++) table_scalar_names[iCV] = flamelet_options.controlling_variable_names[iCV]; /*--- auxiliary species transport equations---*/ for (auto i_aux = 0u; i_aux < n_user_scalars; i_aux++) { - table_scalar_names[n_control_vars + i_aux] = config->GetUserScalarName(i_aux); + table_scalar_names[n_control_vars + i_aux] = flamelet_options.user_scalar_names[i_aux]; } controlling_variable_names.resize(n_control_vars); for (auto iCV = 0u; iCV < n_control_vars; iCV++) - controlling_variable_names[iCV] = config->GetControllingVariableName(iCV); + controlling_variable_names[iCV] =flamelet_options.controlling_variable_names[iCV]; passive_specie_names.resize(n_user_scalars); - for (auto i_aux = 0u; i_aux < n_user_scalars; i_aux++) passive_specie_names[i_aux] = config->GetUserScalarName(i_aux); + for (auto i_aux = 0u; i_aux < n_user_scalars; i_aux++) passive_specie_names[i_aux] = flamelet_options.user_scalar_names[i_aux]; switch (Kind_DataDriven_Method) { case ENUM_DATADRIVEN_METHOD::LUT: @@ -73,7 +76,7 @@ CFluidFlamelet::CFluidFlamelet(CConfig* config, su2double value_pressure_operati cout << "*** initializing the lookup table ***" << endl; cout << "*****************************************" << endl; } - look_up_table = new CLookUpTable(config->GetDataDriven_FileNames()[0], table_scalar_names[I_PROGVAR], + look_up_table = new CLookUpTable(datadriven_fluid_options.datadriven_filenames[0], table_scalar_names[I_PROGVAR], table_scalar_names[I_ENTH]); break; default: @@ -83,7 +86,7 @@ CFluidFlamelet::CFluidFlamelet(CConfig* config, su2double value_pressure_operati cout << "***********************************************" << endl; } #ifdef USE_MLPCPP - lookup_mlp = new MLPToolbox::CLookUp_ANN(config->GetNDataDriven_Files(), config->GetDataDriven_FileNames()); + lookup_mlp = new MLPToolbox::CLookUp_ANN(datadriven_fluid_options.n_filenames, datadriven_fluid_options.datadriven_filenames); if ((rank == MASTER_NODE)) lookup_mlp->DisplayNetworkInfo(); #else SU2_MPI::Error("SU2 was not compiled with MLPCpp enabled (-Denable-mlpcpp=true).", CURRENT_FUNCTION); @@ -170,7 +173,7 @@ void CFluidFlamelet::PreprocessLookUp(CConfig* config) { varnames_Sources.resize(n_sources); val_vars_Sources.resize(n_sources); for (auto iCV = 0u; iCV < n_control_vars; iCV++) - varnames_Sources[iCV] = config->GetControllingVariableSourceName(iCV); + varnames_Sources[iCV] = flamelet_options.cv_source_names[iCV]; /*--- No source term for enthalpy ---*/ /*--- For the auxiliary equations, we use a positive (production) and a negative (consumption) term: @@ -178,12 +181,12 @@ void CFluidFlamelet::PreprocessLookUp(CConfig* config) { for (size_t i_aux = 0; i_aux < n_user_scalars; i_aux++) { /*--- Order of the source terms: S_prod_1, S_cons_1, S_prod_2, S_cons_2, ...---*/ - varnames_Sources[n_control_vars + 2 * i_aux] = config->GetUserSourceName(2 * i_aux); - varnames_Sources[n_control_vars + 2 * i_aux + 1] = config->GetUserSourceName(2 * i_aux + 1); + varnames_Sources[n_control_vars + 2 * i_aux] = flamelet_options.user_source_names[2 * i_aux]; + varnames_Sources[n_control_vars + 2 * i_aux + 1] = flamelet_options.user_source_names[2 * i_aux + 1]; } /*--- Passive look-up terms ---*/ - size_t n_lookups = config->GetNLookups(); + size_t n_lookups = flamelet_options.n_lookups; if (n_lookups == 0) { varnames_LookUp.resize(1); val_vars_LookUp.resize(1); @@ -191,7 +194,7 @@ void CFluidFlamelet::PreprocessLookUp(CConfig* config) { } else { varnames_LookUp.resize(n_lookups); val_vars_LookUp.resize(n_lookups); - for (auto iLookup = 0u; iLookup < n_lookups; iLookup++) varnames_LookUp[iLookup] = config->GetLookupName(iLookup); + for (auto iLookup = 0u; iLookup < n_lookups; iLookup++) varnames_LookUp[iLookup] = flamelet_options.lookup_names[iLookup]; } /*--- Preferential diffusion scalars ---*/ @@ -208,7 +211,7 @@ void CFluidFlamelet::PreprocessLookUp(CConfig* config) { val_vars_PD[FLAMELET_PREF_DIFF_SCALARS::I_BETA_ENTH] = beta_enth; val_vars_PD[FLAMELET_PREF_DIFF_SCALARS::I_BETA_MIXFRAC] = beta_mixfrac; - preferential_diffusion = config->GetPreferentialDiffusion(); + preferential_diffusion = flamelet_options.preferential_diffusion; switch (Kind_DataDriven_Method) { case ENUM_DATADRIVEN_METHOD::LUT: preferential_diffusion = look_up_table->CheckForVariables(varnames_PD); @@ -216,7 +219,7 @@ void CFluidFlamelet::PreprocessLookUp(CConfig* config) { case ENUM_DATADRIVEN_METHOD::MLP: #ifdef USE_MLPCPP n_betas = 0; - for (auto iMLP = 0u; iMLP < config->GetNDataDriven_Files(); iMLP++) { + for (auto iMLP = 0u; iMLP < datadriven_fluid_options.n_filenames; iMLP++) { auto outputMap = lookup_mlp->FindVariableIndices(iMLP, varnames_PD, false); n_betas += outputMap.size(); } @@ -227,7 +230,7 @@ void CFluidFlamelet::PreprocessLookUp(CConfig* config) { break; } - if (!preferential_diffusion && config->GetPreferentialDiffusion()) + if (!preferential_diffusion && flamelet_options.preferential_diffusion) SU2_MPI::Error("Preferential diffusion scalars not included in flamelet manifold.", CURRENT_FUNCTION); if (Kind_DataDriven_Method == ENUM_DATADRIVEN_METHOD::MLP) { diff --git a/SU2_CFD/src/fluid/CFluidModel.cpp b/SU2_CFD/src/fluid/CFluidModel.cpp index ed561279989c..81ed83406a21 100644 --- a/SU2_CFD/src/fluid/CFluidModel.cpp +++ b/SU2_CFD/src/fluid/CFluidModel.cpp @@ -2,14 +2,14 @@ * \file CFluidModel.cpp * \brief Source of the fluid model base class containing thermo-physical subroutines. * \author S.Vitale, M.Pini, G.Gori, A.Guardone, P.Colonna, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/fluid/CFluidScalar.cpp b/SU2_CFD/src/fluid/CFluidScalar.cpp index a57ddc7797ef..1b5befd9f423 100644 --- a/SU2_CFD/src/fluid/CFluidScalar.cpp +++ b/SU2_CFD/src/fluid/CFluidScalar.cpp @@ -2,14 +2,14 @@ * \file CFluidScalar.cpp * \brief Defines the multicomponent incompressible Ideal Gas model for mixtures. * \author T. Economon, Mark Heimgartner, Cristopher Morales Ubal - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/fluid/CIdealGas.cpp b/SU2_CFD/src/fluid/CIdealGas.cpp index 6dad90cf55b6..04d998e2d01f 100644 --- a/SU2_CFD/src/fluid/CIdealGas.cpp +++ b/SU2_CFD/src/fluid/CIdealGas.cpp @@ -2,14 +2,14 @@ * \file CIdealGas.cpp * \brief Source of the ideal gas model. * \author S. Vitale, G. Gori, M. Pini, A. Guardone, P. Colonna - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/fluid/CMutationTCLib.cpp b/SU2_CFD/src/fluid/CMutationTCLib.cpp index 113c0de4ba15..6497db7b3241 100644 --- a/SU2_CFD/src/fluid/CMutationTCLib.cpp +++ b/SU2_CFD/src/fluid/CMutationTCLib.cpp @@ -2,14 +2,14 @@ * \file CMutationTCLib.cpp * \brief Source of the Mutation++ 2T nonequilibrium gas model. * \author C. Garbacz - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/fluid/CNEMOGas.cpp b/SU2_CFD/src/fluid/CNEMOGas.cpp index befe1c870280..29afd01c729c 100644 --- a/SU2_CFD/src/fluid/CNEMOGas.cpp +++ b/SU2_CFD/src/fluid/CNEMOGas.cpp @@ -2,14 +2,14 @@ * \file CNEMOGas.cpp * \brief Source of the nonequilibrium gas model. * \author C. Garbacz, W. Maier, S. R. Copeland - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/fluid/CPengRobinson.cpp b/SU2_CFD/src/fluid/CPengRobinson.cpp index 65fcd4066fc8..e666528cdedd 100644 --- a/SU2_CFD/src/fluid/CPengRobinson.cpp +++ b/SU2_CFD/src/fluid/CPengRobinson.cpp @@ -2,14 +2,14 @@ * \file CPengRobinson.cpp * \brief Source of the Peng-Robinson model. * \author S. Vitale, G. Gori, M. Pini, A. Guardone, P. Colonna - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/fluid/CSU2TCLib.cpp b/SU2_CFD/src/fluid/CSU2TCLib.cpp index 158db0107155..cca890d40dfe 100644 --- a/SU2_CFD/src/fluid/CSU2TCLib.cpp +++ b/SU2_CFD/src/fluid/CSU2TCLib.cpp @@ -2,14 +2,14 @@ * \file CSU2TCLib.cpp * \brief Source of user defined 2T nonequilibrium gas model. * \author C. Garbacz, W. Maier, S. R. Copeland, J. Needels - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/fluid/CVanDerWaalsGas.cpp b/SU2_CFD/src/fluid/CVanDerWaalsGas.cpp index 9b8b80759f0b..2085af33423f 100644 --- a/SU2_CFD/src/fluid/CVanDerWaalsGas.cpp +++ b/SU2_CFD/src/fluid/CVanDerWaalsGas.cpp @@ -2,14 +2,14 @@ * \file CVanDerWaalsGas.cpp * \brief Source of the Polytropic Van der Waals model. * \author S. Vitale, G. Gori, M. Pini, A. Guardone, P. Colonna - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/integration/CFEM_DG_Integration.cpp b/SU2_CFD/src/integration/CFEM_DG_Integration.cpp index 9ba7930a34cb..a1411d401293 100644 --- a/SU2_CFD/src/integration/CFEM_DG_Integration.cpp +++ b/SU2_CFD/src/integration/CFEM_DG_Integration.cpp @@ -2,14 +2,14 @@ * \file CFEM_DG_Integration.cpp * \brief Definition of time and space integration for the DG solver. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/integration/CIntegration.cpp b/SU2_CFD/src/integration/CIntegration.cpp index a3af58d572bf..a751ff01cdb7 100644 --- a/SU2_CFD/src/integration/CIntegration.cpp +++ b/SU2_CFD/src/integration/CIntegration.cpp @@ -2,14 +2,14 @@ * \file CIntegration.cpp * \brief Implementation of the base class for space and time integration. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/integration/CIntegrationFactory.cpp b/SU2_CFD/src/integration/CIntegrationFactory.cpp index eb6f76350bf8..4a5dbbb09b67 100644 --- a/SU2_CFD/src/integration/CIntegrationFactory.cpp +++ b/SU2_CFD/src/integration/CIntegrationFactory.cpp @@ -2,14 +2,14 @@ * \file CIntegrationFactory.cpp * \brief Main subroutines for CIntegrationFactory . * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index f2585a57f0ee..7f07b4447e37 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -2,14 +2,14 @@ * \file CMultiGridIntegration.cpp * \brief Implementation of the multigrid integration class. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/integration/CNewtonIntegration.cpp b/SU2_CFD/src/integration/CNewtonIntegration.cpp index e65b95d4fc71..b5076df4e2a5 100644 --- a/SU2_CFD/src/integration/CNewtonIntegration.cpp +++ b/SU2_CFD/src/integration/CNewtonIntegration.cpp @@ -2,14 +2,14 @@ * \file CNewtonIntegration.cpp * \brief Newton-Krylov integration. * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/integration/CSingleGridIntegration.cpp b/SU2_CFD/src/integration/CSingleGridIntegration.cpp index 22f7e9203d3a..887b2c86b410 100644 --- a/SU2_CFD/src/integration/CSingleGridIntegration.cpp +++ b/SU2_CFD/src/integration/CSingleGridIntegration.cpp @@ -2,14 +2,14 @@ * \file CSingleGridIntegration.cpp * \brief Single (fine) grid integration class implementation. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/integration/CStructuralIntegration.cpp b/SU2_CFD/src/integration/CStructuralIntegration.cpp index ee688dd2075c..9cd1da2b0935 100644 --- a/SU2_CFD/src/integration/CStructuralIntegration.cpp +++ b/SU2_CFD/src/integration/CStructuralIntegration.cpp @@ -2,14 +2,14 @@ * \file CStructuralIntegration.cpp * \brief Space and time integration for structural problems. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/interfaces/CInterface.cpp b/SU2_CFD/src/interfaces/CInterface.cpp index 783d4180292a..969730850b06 100644 --- a/SU2_CFD/src/interfaces/CInterface.cpp +++ b/SU2_CFD/src/interfaces/CInterface.cpp @@ -2,14 +2,14 @@ * \file CInterface.cpp * \brief Main subroutines for MPI transfer of information between zones * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/interfaces/cfd/CConservativeVarsInterface.cpp b/SU2_CFD/src/interfaces/cfd/CConservativeVarsInterface.cpp index 445ff7b13c8f..8784b5220b70 100644 --- a/SU2_CFD/src/interfaces/cfd/CConservativeVarsInterface.cpp +++ b/SU2_CFD/src/interfaces/cfd/CConservativeVarsInterface.cpp @@ -3,14 +3,14 @@ * \brief Declaration and inlines of the class to transfer conservative variables * from a generic zone into another one. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/interfaces/cfd/CMixingPlaneInterface.cpp b/SU2_CFD/src/interfaces/cfd/CMixingPlaneInterface.cpp index 63dfe96db5cb..5b4528bf1d12 100644 --- a/SU2_CFD/src/interfaces/cfd/CMixingPlaneInterface.cpp +++ b/SU2_CFD/src/interfaces/cfd/CMixingPlaneInterface.cpp @@ -3,14 +3,14 @@ * \brief Declaration and inlines of the class to transfer average variables * needed for MixingPlane computation from a generic zone into another one. * \author S. Vitale - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/interfaces/cfd/CSlidingInterface.cpp b/SU2_CFD/src/interfaces/cfd/CSlidingInterface.cpp index 66dc3555fea3..359ce02a7d66 100644 --- a/SU2_CFD/src/interfaces/cfd/CSlidingInterface.cpp +++ b/SU2_CFD/src/interfaces/cfd/CSlidingInterface.cpp @@ -3,14 +3,14 @@ * \brief Declaration and inlines of the class to transfer conservative variables * from a generic zone into another * \author G. Gori Politecnico di Milano - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/interfaces/cht/CConjugateHeatInterface.cpp b/SU2_CFD/src/interfaces/cht/CConjugateHeatInterface.cpp index 207cb9b602c7..15b10fcfdf2b 100644 --- a/SU2_CFD/src/interfaces/cht/CConjugateHeatInterface.cpp +++ b/SU2_CFD/src/interfaces/cht/CConjugateHeatInterface.cpp @@ -3,14 +3,14 @@ * \brief Declaration and inlines of the class to transfer temperature and heatflux * density for conjugate heat interfaces between structure and fluid zones. * \author O. Burghardt - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/interfaces/fsi/CDiscAdjFlowTractionInterface.cpp b/SU2_CFD/src/interfaces/fsi/CDiscAdjFlowTractionInterface.cpp index ecca5a93de29..9d0203e4bb5c 100644 --- a/SU2_CFD/src/interfaces/fsi/CDiscAdjFlowTractionInterface.cpp +++ b/SU2_CFD/src/interfaces/fsi/CDiscAdjFlowTractionInterface.cpp @@ -3,14 +3,14 @@ * \brief Declaration and inlines of the class to transfer flow tractions * from a fluid zone into a structural zone in a discrete adjoint simulation. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/interfaces/fsi/CDisplacementsInterface.cpp b/SU2_CFD/src/interfaces/fsi/CDisplacementsInterface.cpp index a9f32d3126ff..18108746a19c 100644 --- a/SU2_CFD/src/interfaces/fsi/CDisplacementsInterface.cpp +++ b/SU2_CFD/src/interfaces/fsi/CDisplacementsInterface.cpp @@ -2,14 +2,14 @@ * \file CDisplacementsInterface.cpp * \brief Main subroutines for transferring boundary displacements. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/interfaces/fsi/CFlowTractionInterface.cpp b/SU2_CFD/src/interfaces/fsi/CFlowTractionInterface.cpp index cc35fdc9cbcd..0f37f0c6e9aa 100644 --- a/SU2_CFD/src/interfaces/fsi/CFlowTractionInterface.cpp +++ b/SU2_CFD/src/interfaces/fsi/CFlowTractionInterface.cpp @@ -3,14 +3,14 @@ * \brief Declaration and inlines of the class to transfer flow tractions * from a fluid zone into a structural zone. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/iteration/CAdjFluidIteration.cpp b/SU2_CFD/src/iteration/CAdjFluidIteration.cpp index ce251ad75cbc..9c200512bf53 100644 --- a/SU2_CFD/src/iteration/CAdjFluidIteration.cpp +++ b/SU2_CFD/src/iteration/CAdjFluidIteration.cpp @@ -2,14 +2,14 @@ * \file CAdjFluidIteration.cpp * \brief Main subroutines used by SU2_CFD * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/iteration/CDiscAdjFEAIteration.cpp b/SU2_CFD/src/iteration/CDiscAdjFEAIteration.cpp index 2f62b6ddce62..e2da512fd159 100644 --- a/SU2_CFD/src/iteration/CDiscAdjFEAIteration.cpp +++ b/SU2_CFD/src/iteration/CDiscAdjFEAIteration.cpp @@ -2,14 +2,14 @@ * \file CDiscAdjFEAIteration.cpp * \brief Main subroutines used by SU2_CFD * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/iteration/CDiscAdjFluidIteration.cpp b/SU2_CFD/src/iteration/CDiscAdjFluidIteration.cpp index d25e4a18ecbe..7e51ff89c4b7 100644 --- a/SU2_CFD/src/iteration/CDiscAdjFluidIteration.cpp +++ b/SU2_CFD/src/iteration/CDiscAdjFluidIteration.cpp @@ -2,14 +2,14 @@ * \file CDiscAdjFluidIteration.cpp * \brief Main subroutines used by SU2_CFD * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/iteration/CDiscAdjHeatIteration.cpp b/SU2_CFD/src/iteration/CDiscAdjHeatIteration.cpp index 010483fcb993..7dae6e9d43c0 100644 --- a/SU2_CFD/src/iteration/CDiscAdjHeatIteration.cpp +++ b/SU2_CFD/src/iteration/CDiscAdjHeatIteration.cpp @@ -2,14 +2,14 @@ * \file CDiscAdjHeatIteration.cpp * \brief Main subroutines used by SU2_CFD * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/iteration/CFEAIteration.cpp b/SU2_CFD/src/iteration/CFEAIteration.cpp index 2aa19d27de9d..61692db2fe64 100644 --- a/SU2_CFD/src/iteration/CFEAIteration.cpp +++ b/SU2_CFD/src/iteration/CFEAIteration.cpp @@ -2,14 +2,14 @@ * \file CFEAIteration.cpp * \brief Main subroutines used by SU2_CFD * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -48,6 +48,13 @@ void CFEAIteration::Iterate(COutput* output, CIntegration**** integration, CGeom CIntegration* feaIntegration = integration[val_iZone][val_iInst][FEA_SOL]; CSolver* feaSolver = solver[val_iZone][val_iInst][MESH_0][FEA_SOL]; + /*--- Add heat solver integration step. ---*/ + if (config[val_iZone]->GetWeakly_Coupled_Heat()) { + config[val_iZone]->SetGlobalParam(MAIN_SOLVER::HEAT_EQUATION, RUNTIME_HEAT_SYS); + integration[val_iZone][val_iInst][HEAT_SOL]->SingleGrid_Iteration(geometry, solver, numerics, config, + RUNTIME_HEAT_SYS, val_iZone, val_iInst); + } + /*--- FEA equations ---*/ config[val_iZone]->SetGlobalParam(MAIN_SOLVER::FEM_ELASTICITY, RUNTIME_FEA_SYS); diff --git a/SU2_CFD/src/iteration/CFEMFluidIteration.cpp b/SU2_CFD/src/iteration/CFEMFluidIteration.cpp index 88c2b638a3b1..fcf59369b62f 100644 --- a/SU2_CFD/src/iteration/CFEMFluidIteration.cpp +++ b/SU2_CFD/src/iteration/CFEMFluidIteration.cpp @@ -2,14 +2,14 @@ * \file CFEMFluidIteration.cpp * \brief Main subroutines used by SU2_CFD * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/iteration/CFluidIteration.cpp b/SU2_CFD/src/iteration/CFluidIteration.cpp index 4ca6c45a1724..6bd9c714f01d 100644 --- a/SU2_CFD/src/iteration/CFluidIteration.cpp +++ b/SU2_CFD/src/iteration/CFluidIteration.cpp @@ -2,14 +2,14 @@ * \file CFluidIteration.cpp * \brief Main subroutines used by SU2_CFD * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/iteration/CHeatIteration.cpp b/SU2_CFD/src/iteration/CHeatIteration.cpp index 4ea5d732daf4..69ac3bc512ad 100644 --- a/SU2_CFD/src/iteration/CHeatIteration.cpp +++ b/SU2_CFD/src/iteration/CHeatIteration.cpp @@ -2,14 +2,14 @@ * \file CHeatIteration.cpp * \brief Main subroutines used by SU2_CFD * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/iteration/CIteration.cpp b/SU2_CFD/src/iteration/CIteration.cpp index 54fe1e00998a..e5eda42a6092 100644 --- a/SU2_CFD/src/iteration/CIteration.cpp +++ b/SU2_CFD/src/iteration/CIteration.cpp @@ -2,14 +2,14 @@ * \file iteration_structure.cpp * \brief Main subroutines used by SU2_CFD * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/iteration/CIterationFactory.cpp b/SU2_CFD/src/iteration/CIterationFactory.cpp index 6b008776a265..2b8f1012559e 100644 --- a/SU2_CFD/src/iteration/CIterationFactory.cpp +++ b/SU2_CFD/src/iteration/CIterationFactory.cpp @@ -2,14 +2,14 @@ * \file CAdjFluidIteration.cpp * \brief Main subroutines used by SU2_CFD * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/iteration/CTurboIteration.cpp b/SU2_CFD/src/iteration/CTurboIteration.cpp index b56ba3e1a3cb..61b77989b85a 100644 --- a/SU2_CFD/src/iteration/CTurboIteration.cpp +++ b/SU2_CFD/src/iteration/CTurboIteration.cpp @@ -2,14 +2,14 @@ * \file CTurboIteration.cpp * \brief Main subroutines used by SU2_CFD * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/limiters/CLimiterDetails.cpp b/SU2_CFD/src/limiters/CLimiterDetails.cpp index b20a550cae12..9bb12880490b 100644 --- a/SU2_CFD/src/limiters/CLimiterDetails.cpp +++ b/SU2_CFD/src/limiters/CLimiterDetails.cpp @@ -3,14 +3,14 @@ * \brief A class template that allows defining limiters via * specialization of particular details. * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/numerics/CGradSmoothing.cpp b/SU2_CFD/src/numerics/CGradSmoothing.cpp index 4462541af822..9bd0bfcb6593 100644 --- a/SU2_CFD/src/numerics/CGradSmoothing.cpp +++ b/SU2_CFD/src/numerics/CGradSmoothing.cpp @@ -2,14 +2,14 @@ * \file CGradSmoothing.cpp * \brief Numerics for gradient smoothing problems. * \author T.Dick - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/numerics/CNumerics.cpp b/SU2_CFD/src/numerics/CNumerics.cpp index 2c36556f8089..2633e79827bd 100644 --- a/SU2_CFD/src/numerics/CNumerics.cpp +++ b/SU2_CFD/src/numerics/CNumerics.cpp @@ -4,14 +4,14 @@ * Contains methods for common tasks, e.g. compute flux * Jacobians. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/numerics/NEMO/CNEMONumerics.cpp b/SU2_CFD/src/numerics/NEMO/CNEMONumerics.cpp index d32e46bf353d..efd2f8f34889 100644 --- a/SU2_CFD/src/numerics/NEMO/CNEMONumerics.cpp +++ b/SU2_CFD/src/numerics/NEMO/CNEMONumerics.cpp @@ -4,14 +4,14 @@ * Contains methods for common tasks, e.g. compute flux * Jacobians. * \author S.R. Copeland, W. Maier, C. Garbacz - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/numerics/NEMO/NEMO_diffusion.cpp b/SU2_CFD/src/numerics/NEMO/NEMO_diffusion.cpp index 5a5f8340be84..deeef5948cf2 100644 --- a/SU2_CFD/src/numerics/NEMO/NEMO_diffusion.cpp +++ b/SU2_CFD/src/numerics/NEMO/NEMO_diffusion.cpp @@ -3,14 +3,14 @@ * \brief Implementation of numerics classes for discretization * of viscous fluxes in fluid flow NEMO problems. * \author S.R. Copeland, W. Maier, C. Garbacz - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/numerics/NEMO/NEMO_sources.cpp b/SU2_CFD/src/numerics/NEMO/NEMO_sources.cpp index 149a7c287e00..35d5ca3411c0 100644 --- a/SU2_CFD/src/numerics/NEMO/NEMO_sources.cpp +++ b/SU2_CFD/src/numerics/NEMO/NEMO_sources.cpp @@ -3,14 +3,14 @@ * \brief Implementation of numerics classes for integration * of source terms in fluid flow NEMO problems. * \author C. Garbacz, W. Maier, S. Copeland. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/numerics/NEMO/convection/ausm_slau.cpp b/SU2_CFD/src/numerics/NEMO/convection/ausm_slau.cpp index 0e5a6726cb1e..1f778216fcff 100644 --- a/SU2_CFD/src/numerics/NEMO/convection/ausm_slau.cpp +++ b/SU2_CFD/src/numerics/NEMO/convection/ausm_slau.cpp @@ -2,14 +2,14 @@ * \file ausm_slau.cpp * \brief Implementations of the AUSM-family of schemes in NEMO. * \author F. Palacios, S.R. Copeland, W. Maier, C. Garbacz - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/numerics/NEMO/convection/lax.cpp b/SU2_CFD/src/numerics/NEMO/convection/lax.cpp index a49e6d70cc52..dfa785a3beeb 100644 --- a/SU2_CFD/src/numerics/NEMO/convection/lax.cpp +++ b/SU2_CFD/src/numerics/NEMO/convection/lax.cpp @@ -2,14 +2,14 @@ * \file lax.cpp * \brief Implementations of Lax centered scheme. * \author F. Palacios, S.R. Copeland, W. Maier, C. Garbacz - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/numerics/NEMO/convection/msw.cpp b/SU2_CFD/src/numerics/NEMO/convection/msw.cpp index af2d7b7541c7..762ad07282c1 100644 --- a/SU2_CFD/src/numerics/NEMO/convection/msw.cpp +++ b/SU2_CFD/src/numerics/NEMO/convection/msw.cpp @@ -2,14 +2,14 @@ * \file msw.cpp * \brief Implementations of the modified Steger-Warming scheme. * \author ADL Stanford, S.R. Copeland, W. Maier, C. Garbacz - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/numerics/NEMO/convection/roe.cpp b/SU2_CFD/src/numerics/NEMO/convection/roe.cpp index c084773e071c..2bcf144590a0 100644 --- a/SU2_CFD/src/numerics/NEMO/convection/roe.cpp +++ b/SU2_CFD/src/numerics/NEMO/convection/roe.cpp @@ -2,14 +2,14 @@ * \file roe.cpp * \brief Implementations of Roe-type schemes in NEMO. * \author S. R. Copeland, W. Maier, C. Garbacz - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/numerics/continuous_adjoint/adj_convection.cpp b/SU2_CFD/src/numerics/continuous_adjoint/adj_convection.cpp index bcbfc96aa014..48ad6d2676d2 100644 --- a/SU2_CFD/src/numerics/continuous_adjoint/adj_convection.cpp +++ b/SU2_CFD/src/numerics/continuous_adjoint/adj_convection.cpp @@ -2,14 +2,14 @@ * \file adj_convection.cpp * \brief Implementation of adjoint convection numerics classes. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/numerics/continuous_adjoint/adj_diffusion.cpp b/SU2_CFD/src/numerics/continuous_adjoint/adj_diffusion.cpp index 3cd5b7435596..ab02add95881 100644 --- a/SU2_CFD/src/numerics/continuous_adjoint/adj_diffusion.cpp +++ b/SU2_CFD/src/numerics/continuous_adjoint/adj_diffusion.cpp @@ -2,14 +2,14 @@ * \file adj_diffusion.cpp * \brief Implementation of adjoint diffusion numerics classes. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/numerics/continuous_adjoint/adj_sources.cpp b/SU2_CFD/src/numerics/continuous_adjoint/adj_sources.cpp index cd8d327336dd..2c15b371cefc 100644 --- a/SU2_CFD/src/numerics/continuous_adjoint/adj_sources.cpp +++ b/SU2_CFD/src/numerics/continuous_adjoint/adj_sources.cpp @@ -2,14 +2,14 @@ * \file adj_sources.cpp * \brief Implementation of adjoint source numerics classes. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/numerics/elasticity/CFEAElasticity.cpp b/SU2_CFD/src/numerics/elasticity/CFEAElasticity.cpp index 44014591204d..97124b833369 100644 --- a/SU2_CFD/src/numerics/elasticity/CFEAElasticity.cpp +++ b/SU2_CFD/src/numerics/elasticity/CFEAElasticity.cpp @@ -2,14 +2,14 @@ * \file CFEAElasticity.cpp * \brief Base class for all elasticity problems. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -27,6 +27,7 @@ #include "../../../include/numerics/elasticity/CFEAElasticity.hpp" #include "../../../../Common/include/parallelization/omp_structure.hpp" +#include "../../../../Common/include/toolboxes/geometry_toolbox.hpp" CFEAElasticity::CFEAElasticity(unsigned short val_nDim, unsigned short val_nVar, @@ -35,7 +36,6 @@ CFEAElasticity::CFEAElasticity(unsigned short val_nDim, unsigned short val_nVar, nDim = val_nDim; nVar = val_nVar; - bool body_forces = config->GetDeadLoad(); // Body forces (dead loads). bool pseudo_static = config->GetPseudoStatic(); unsigned short iVar; @@ -44,19 +44,16 @@ CFEAElasticity::CFEAElasticity(unsigned short val_nDim, unsigned short val_nVar, const auto nProp = config->GetnElasticityMat(); E_i = new su2double[nProp]; - for (iVar = 0; iVar < nProp; iVar++) - E_i[iVar] = config->GetElasticyMod(iVar); - Nu_i = new su2double[nProp]; - for (iVar = 0; iVar < nProp; iVar++) - Nu_i[iVar] = config->GetPoissonRatio(iVar); - Rho_s_i = new su2double[nProp]; // For inertial effects Rho_s_DL_i = new su2double[nProp]; // For dead loads - + Alpha_i = new su2double[nProp]; for (iVar = 0; iVar < nProp; iVar++) { + E_i[iVar] = config->GetElasticyMod(iVar); + Nu_i[iVar] = config->GetPoissonRatio(iVar); Rho_s_DL_i[iVar] = config->GetMaterialDensity(iVar); Rho_s_i[iVar] = pseudo_static ? 0.0 : config->GetMaterialDensity(iVar); + Alpha_i[iVar] = config->GetMaterialThermalExpansion(iVar); } // Initialization @@ -64,14 +61,12 @@ CFEAElasticity::CFEAElasticity(unsigned short val_nDim, unsigned short val_nVar, Nu = Nu_i[0]; Rho_s = Rho_s_i[0]; Rho_s_DL = Rho_s_DL_i[0]; + Alpha = Alpha_i[0]; + ReferenceTemperature = config->GetMaterialReferenceTemperature(); Compute_Lame_Parameters(); - // Auxiliary vector for body forces (dead load) - FAux_Dead_Load = nullptr; - if (body_forces) FAux_Dead_Load = new su2double [nDim]; - - plane_stress = (config->GetElas2D_Formulation() == STRUCT_2DFORM::PLANE_STRESS); + plane_stress = (nDim == 2) && (config->GetElas2D_Formulation() == STRUCT_2DFORM::PLANE_STRESS); KAux_ab = new su2double* [nDim]; for (iVar = 0; iVar < nDim; iVar++) { @@ -164,12 +159,11 @@ CFEAElasticity::~CFEAElasticity() { delete[] DV_Val; - delete [] FAux_Dead_Load; - delete [] E_i; delete [] Nu_i; delete [] Rho_s_i; delete [] Rho_s_DL_i; + delete [] Alpha_i; delete [] Ni_Vec; } @@ -233,7 +227,11 @@ void CFEAElasticity::Compute_Mass_Matrix(CElement *element, const CConfig *confi } -void CFEAElasticity::Compute_Dead_Load(CElement *element, const CConfig *config) { +void CFEAElasticity::Compute_Body_Forces(CElement *element, const CConfig *config) { + + const bool gravity = config->GetGravityForce(); + const bool body_force = config->GetBody_Force(); + const bool centrifugal = config->GetCentrifugalForce(); /*--- Initialize values for the material model considered ---*/ SetElement_Properties(element, config); @@ -244,45 +242,56 @@ void CFEAElasticity::Compute_Dead_Load(CElement *element, const CConfig *config) AD::SetPreaccIn(Rho_s_DL); element->SetPreaccIn_Coords(false); - unsigned short iGauss, nGauss; - unsigned short iNode, iDim, nNode; - - su2double Weight, Jac_X; - - /* -- Gravity directionality: - * -- For 2D problems, we assume the direction for gravity is -y - * -- For 3D problems, we assume the direction for gravity is -z - */ - su2double g_force[3] = {0.0,0.0,0.0}; - - if (nDim == 2) g_force[1] = -1*STANDARD_GRAVITY; - else if (nDim == 3) g_force[2] = -1*STANDARD_GRAVITY; + std::array acceleration{}; + if (gravity) { + /*--- For 2D problems, we assume gravity is in the -y direction, + * and for 3D problems in the -z direction. ---*/ + acceleration[nDim - 1] = -STANDARD_GRAVITY; + } else if (body_force) { + for (auto iDim = 0u; iDim < nDim; iDim++) { + acceleration[iDim] = config->GetBody_Force_Vector()[iDim]; + } + } + std::array center{}, omega{}; + if (centrifugal) { + for (auto iDim = 0u; iDim < nDim; iDim++) { + center[iDim] = config->GetMotion_Origin(iDim); + omega[iDim] = config->GetRotation_Rate(iDim); + } + } element->ClearElement(); /*--- Restart the element to avoid adding over previous results. --*/ element->ComputeGrad_Linear(); /*--- Need to compute the gradients to obtain the Jacobian. ---*/ - nNode = element->GetnNodes(); - nGauss = element->GetnGaussPoints(); - - for (iGauss = 0; iGauss < nGauss; iGauss++) { + const auto nNode = element->GetnNodes(); + const auto nGauss = element->GetnGaussPoints(); - Weight = element->GetWeight(iGauss); - Jac_X = element->GetJ_X(iGauss); /*--- The dead load is computed in the reference configuration ---*/ + for (auto iGauss = 0u; iGauss < nGauss; iGauss++) { - /*--- Retrieve the values of the shape functions for each node ---*/ - /*--- This avoids repeated operations ---*/ - for (iNode = 0; iNode < nNode; iNode++) { - Ni_Vec[iNode] = element->GetNi(iNode,iGauss); - } + const auto Weight = element->GetWeight(iGauss); + /*--- The dead load is computed in the reference configuration ---*/ + const auto Jac_X = element->GetJ_X(iGauss); - for (iNode = 0; iNode < nNode; iNode++) { + for (auto iNode = 0u; iNode < nNode; iNode++) { + const auto Ni = element->GetNi(iNode,iGauss); - for (iDim = 0; iDim < nDim; iDim++) { - FAux_Dead_Load[iDim] = Weight * Ni_Vec[iNode] * Jac_X * Rho_s_DL * g_force[iDim]; + auto total_accel = acceleration; + if (centrifugal) { + /*--- For nonlinear this should probably use the current (deformed) + * coordinates, but it should not make a big difference. ---*/ + std::array r{}, wr{}, w2r{}; + for (auto iDim = 0u; iDim < nDim; iDim++) { + r[iDim] = element->GetRef_Coord(iNode, iDim) - center[iDim]; + } + GeometryToolbox::CrossProduct(omega.data(), r.data(), wr.data()); + GeometryToolbox::CrossProduct(omega.data(), wr.data(), w2r.data()); + for (auto iDim = 0; iDim < 3; ++iDim) total_accel[iDim] -= w2r[iDim]; } - - element->Add_FDL_a(iNode, FAux_Dead_Load); - + std::array force{}; + for (auto iDim = 0u; iDim < nDim; iDim++) { + force[iDim] = Weight * Ni * Jac_X * Rho_s_DL * total_accel[iDim]; + } + element->Add_FDL_a(iNode, force.data()); } } @@ -302,6 +311,7 @@ void CFEAElasticity::SetElement_Properties(const CElement *element, const CConfi Nu = Nu_i[element->Get_iProp()]; Rho_s = Rho_s_i[element->Get_iProp()]; Rho_s_DL = Rho_s_DL_i[element->Get_iProp()]; + Alpha = Alpha_i[element->Get_iProp()]; switch (config->GetDV_FEA()) { case YOUNG_MODULUS: diff --git a/SU2_CFD/src/numerics/elasticity/CFEALinearElasticity.cpp b/SU2_CFD/src/numerics/elasticity/CFEALinearElasticity.cpp index a6763bed0b84..696d7d43edec 100644 --- a/SU2_CFD/src/numerics/elasticity/CFEALinearElasticity.cpp +++ b/SU2_CFD/src/numerics/elasticity/CFEALinearElasticity.cpp @@ -2,14 +2,14 @@ * \file CFEALinearElasticity.cpp * \brief Classes for linear elasticity problems. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -97,8 +97,16 @@ void CFEALinearElasticity::Compute_Tangent_Matrix(CElement *element, const CConf } } + const su2double thermalStress = ThermalStressTerm * (element->GetTemperature(iGauss) - ReferenceTemperature); + for (iNode = 0; iNode < nNode; iNode++) { + su2double KAux_t_a[3] = {0.0}; + for (iVar = 0; iVar < nDim; iVar++) { + KAux_t_a[iVar] += Weight * thermalStress * GradNi_Ref_Mat[iNode][iVar] * Jac_X; + } + element->Add_Kt_a(iNode, KAux_t_a); + if (nDim == 2) { Ba_Mat[0][0] = GradNi_Ref_Mat[iNode][0]; Ba_Mat[1][1] = GradNi_Ref_Mat[iNode][1]; @@ -314,14 +322,17 @@ su2double CFEALinearElasticity::Compute_Averaged_NodalStress(CElement *element, } - /*--- Compute the Stress Vector as D*epsilon ---*/ + /*--- Compute the Stress Vector as D*epsilon + thermal stress ---*/ su2double Stress[DIM_STRAIN_3D] = {0.0}; + const su2double thermalStress = ThermalStressTerm * (element->GetTemperature(iGauss) - ReferenceTemperature); + for (iVar = 0; iVar < bDim; iVar++) { for (jVar = 0; jVar < bDim; jVar++) { Stress[iVar] += D_Mat[iVar][jVar]*Strain[jVar]; } + if (iVar < nDim) Stress[iVar] += thermalStress; avgStress[iVar] += Stress[iVar] / nGauss; } @@ -363,10 +374,10 @@ CFEAMeshElasticity::CFEAMeshElasticity(unsigned short val_nDim, unsigned short v unsigned long val_nElem, const CConfig *config) : CFEALinearElasticity() { DV_Val = nullptr; - FAux_Dead_Load = nullptr; Rho_s_i = nullptr; Rho_s_DL_i = nullptr; Nu_i = nullptr; + Alpha_i = nullptr; nDim = val_nDim; nVar = val_nVar; diff --git a/SU2_CFD/src/numerics/elasticity/CFEANonlinearElasticity.cpp b/SU2_CFD/src/numerics/elasticity/CFEANonlinearElasticity.cpp index 0b8ed7cb855c..232419c12e6e 100644 --- a/SU2_CFD/src/numerics/elasticity/CFEANonlinearElasticity.cpp +++ b/SU2_CFD/src/numerics/elasticity/CFEANonlinearElasticity.cpp @@ -3,14 +3,14 @@ * \brief This file contains the routines for setting the tangent matrix and * residual of a FEM nonlinear elastic structural problem. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -349,7 +349,7 @@ void CFEANonlinearElasticity::Compute_Tangent_Matrix(CElement *element, const CC /*--- Compute the constitutive matrix ---*/ - Compute_Stress_Tensor(element, config); + Compute_Stress_Tensor(element, config, iGauss); // if (maxwell_stress) Add_MaxwellStress(element, config); Compute_Constitutive_Matrix(element, config); @@ -571,7 +571,7 @@ void CFEANonlinearElasticity::Compute_NodalStress_Term(CElement *element, const /*--- Compute the stress tensor ---*/ - Compute_Stress_Tensor(element, config); + Compute_Stress_Tensor(element, config, iGauss); // if (maxwell_stress) Add_MaxwellStress(element, config); for (iNode = 0; iNode < nNode; iNode++) { @@ -850,7 +850,7 @@ su2double CFEANonlinearElasticity::Compute_Averaged_NodalStress(CElement *elemen /*--- Compute the stress tensor ---*/ - Compute_Stress_Tensor(element, config); + Compute_Stress_Tensor(element, config, iGauss); if (maxwell_stress) Add_MaxwellStress(element, config); avgStress[0] += Stress_Tensor[0][0] / nGauss; diff --git a/SU2_CFD/src/numerics/elasticity/nonlinear_models.cpp b/SU2_CFD/src/numerics/elasticity/nonlinear_models.cpp index d21fc2283008..8d498ffef58e 100644 --- a/SU2_CFD/src/numerics/elasticity/nonlinear_models.cpp +++ b/SU2_CFD/src/numerics/elasticity/nonlinear_models.cpp @@ -2,14 +2,14 @@ * \file nonlinear_models.cpp * \brief Definition of nonlinear constitutive models. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -98,7 +98,7 @@ void CFEM_NeoHookean_Comp::Compute_Constitutive_Matrix(CElement *element, const } -void CFEM_NeoHookean_Comp::Compute_Stress_Tensor(CElement *element, const CConfig *config) { +void CFEM_NeoHookean_Comp::Compute_Stress_Tensor(CElement *element, const CConfig *config, unsigned short iGauss) { unsigned short iVar,jVar; su2double Mu_J = 0.0, Lambda_J = 0.0; @@ -109,10 +109,12 @@ void CFEM_NeoHookean_Comp::Compute_Stress_Tensor(CElement *element, const CConfi Lambda_J = Lambda/J_F; } + const su2double thermalStress = ThermalStressTerm * (element->GetTemperature(iGauss) - ReferenceTemperature); + for (iVar = 0; iVar < 3; iVar++) { for (jVar = 0; jVar < 3; jVar++) { su2double dij = deltaij(iVar,jVar); - Stress_Tensor[iVar][jVar] = Mu_J * (b_Mat[iVar][jVar] - dij) + Lambda_J * log(J_F) * dij; + Stress_Tensor[iVar][jVar] = Mu_J * (b_Mat[iVar][jVar] - dij) + (Lambda_J * log(J_F) + thermalStress) * dij; } } @@ -182,7 +184,7 @@ void CFEM_Knowles_NearInc::Compute_Constitutive_Matrix(CElement *element, const } -void CFEM_Knowles_NearInc::Compute_Stress_Tensor(CElement *element, const CConfig *config) { +void CFEM_Knowles_NearInc::Compute_Stress_Tensor(CElement *element, const CConfig *config, unsigned short iGauss) { /* -- Suchocki (2011) (full reference in class constructor). ---*/ @@ -199,10 +201,12 @@ void CFEM_Knowles_NearInc::Compute_Stress_Tensor(CElement *element, const CConfi Ek = Kappa * (2.0 * J_F - 1.0); Pr = Kappa * (J_F - 1.0); + const su2double thermalStress = ThermalStressTerm * (element->GetTemperature(iGauss) - ReferenceTemperature); + for (iVar = 0; iVar < 3; iVar++){ for (jVar = 0; jVar < 3; jVar++){ Stress_Tensor[iVar][jVar] = term1 * (b_Mat_Iso[iVar][jVar] - deltaij(iVar,jVar)*trbbar) + - deltaij(iVar,jVar) * Pr; + deltaij(iVar,jVar) * (Pr + thermalStress); } } @@ -234,7 +238,7 @@ void CFEM_DielectricElastomer::Compute_Constitutive_Matrix(CElement *element, co } -void CFEM_DielectricElastomer::Compute_Stress_Tensor(CElement *element, const CConfig *config) { +void CFEM_DielectricElastomer::Compute_Stress_Tensor(CElement *element, const CConfig *config, unsigned short iGauss) { unsigned short iDim, jDim; @@ -315,12 +319,11 @@ void CFEM_IdealDE::Compute_Constitutive_Matrix(CElement *element, const CConfig } -void CFEM_IdealDE::Compute_Stress_Tensor(CElement *element, const CConfig *config) { +void CFEM_IdealDE::Compute_Stress_Tensor(CElement *element, const CConfig *config, unsigned short iGauss) { /* -- Zhao, X. and Suo, Z. (2008) (full reference in class constructor). ---*/ unsigned short iVar, jVar; - su2double dij = 0.0; /*--- Compute the isochoric deformation gradient Fbar and left Cauchy-Green tensor bbar ---*/ Compute_Isochoric_F_b(); @@ -333,13 +336,12 @@ void CFEM_IdealDE::Compute_Stress_Tensor(CElement *element, const CConfig *confi Pr = Kappa * (J_F - 1.0); Eg23 = 2.0 * Eg / 3.0; - // Stress tensor + const su2double thermalStress = ThermalStressTerm * (element->GetTemperature(iGauss) - ReferenceTemperature); for (iVar = 0; iVar < 3; iVar++){ - for (jVar = 0; jVar < 3; jVar++){ - if (iVar == jVar) dij = 1.0; - else if (iVar != jVar) dij = 0.0; - Stress_Tensor[iVar][jVar] = Eg * ( b_Mat_Iso[iVar][jVar] - dij * trbbar) + dij * Pr ; + for (jVar = 0; jVar < 3; jVar++) { + const su2double dij = deltaij(iVar, jVar); + Stress_Tensor[iVar][jVar] = Eg * ( b_Mat_Iso[iVar][jVar] - dij * trbbar) + dij * (Pr + thermalStress); } } diff --git a/SU2_CFD/src/numerics/flow/convection/ausm_slau.cpp b/SU2_CFD/src/numerics/flow/convection/ausm_slau.cpp index 561076629120..e3faf298586e 100644 --- a/SU2_CFD/src/numerics/flow/convection/ausm_slau.cpp +++ b/SU2_CFD/src/numerics/flow/convection/ausm_slau.cpp @@ -2,14 +2,14 @@ * \file ausm_slau.cpp * \brief Implementations of the AUSM-family of schemes. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/numerics/flow/convection/centered.cpp b/SU2_CFD/src/numerics/flow/convection/centered.cpp index dab777872cf5..5e15f35983fb 100644 --- a/SU2_CFD/src/numerics/flow/convection/centered.cpp +++ b/SU2_CFD/src/numerics/flow/convection/centered.cpp @@ -2,14 +2,14 @@ * \file centered.cpp * \brief Implementations of centered schemes. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/numerics/flow/convection/fds.cpp b/SU2_CFD/src/numerics/flow/convection/fds.cpp index ae48e59f3365..96f2cd5a2cc7 100644 --- a/SU2_CFD/src/numerics/flow/convection/fds.cpp +++ b/SU2_CFD/src/numerics/flow/convection/fds.cpp @@ -2,14 +2,14 @@ * \file fds.cpp * \brief Implementation of Flux-Difference-Splitting schemes. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/numerics/flow/convection/fvs.cpp b/SU2_CFD/src/numerics/flow/convection/fvs.cpp index 933010d130f4..30ee9c979c8a 100644 --- a/SU2_CFD/src/numerics/flow/convection/fvs.cpp +++ b/SU2_CFD/src/numerics/flow/convection/fvs.cpp @@ -2,14 +2,14 @@ * \file fvs.cpp * \brief Implementations of Flux-Vector-Splitting schemes. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/numerics/flow/convection/hllc.cpp b/SU2_CFD/src/numerics/flow/convection/hllc.cpp index 57a04d74bcba..65ac38c837a7 100644 --- a/SU2_CFD/src/numerics/flow/convection/hllc.cpp +++ b/SU2_CFD/src/numerics/flow/convection/hllc.cpp @@ -2,14 +2,14 @@ * \file hllc.cpp * \brief Implementations of HLLC schemes. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/numerics/flow/convection/roe.cpp b/SU2_CFD/src/numerics/flow/convection/roe.cpp index c259c5e78820..12e0cefb20f2 100644 --- a/SU2_CFD/src/numerics/flow/convection/roe.cpp +++ b/SU2_CFD/src/numerics/flow/convection/roe.cpp @@ -2,14 +2,14 @@ * \file roe.cpp * \brief Implementations of Roe-type schemes. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/numerics/flow/flow_diffusion.cpp b/SU2_CFD/src/numerics/flow/flow_diffusion.cpp index a2cdb8935339..b5f2ca33002e 100644 --- a/SU2_CFD/src/numerics/flow/flow_diffusion.cpp +++ b/SU2_CFD/src/numerics/flow/flow_diffusion.cpp @@ -3,14 +3,14 @@ * \brief Implementation of numerics classes for discretization * of viscous fluxes in fluid flow problems. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/numerics/flow/flow_sources.cpp b/SU2_CFD/src/numerics/flow/flow_sources.cpp index 6f8359a5f582..9535b834b14e 100644 --- a/SU2_CFD/src/numerics/flow/flow_sources.cpp +++ b/SU2_CFD/src/numerics/flow/flow_sources.cpp @@ -3,14 +3,14 @@ * \brief Implementation of numerics classes for integration * of source terms in fluid flow problems. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/numerics/radiation.cpp b/SU2_CFD/src/numerics/radiation.cpp index 86a0793053e8..fb87401c222d 100644 --- a/SU2_CFD/src/numerics/radiation.cpp +++ b/SU2_CFD/src/numerics/radiation.cpp @@ -3,14 +3,14 @@ * \brief This file contains the implementation of the numerical * methods for radiation. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/numerics/scalar/scalar_sources.cpp b/SU2_CFD/src/numerics/scalar/scalar_sources.cpp index 3c549935d8d0..16e6c6b4d7f2 100644 --- a/SU2_CFD/src/numerics/scalar/scalar_sources.cpp +++ b/SU2_CFD/src/numerics/scalar/scalar_sources.cpp @@ -1,14 +1,14 @@ /*! * \file scalar_sources.cpp * \brief Implementation of numerics classes for integration of scalar source-terms. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/numerics/species/species_sources.cpp b/SU2_CFD/src/numerics/species/species_sources.cpp index 04018580eb1a..72b505037bf3 100644 --- a/SU2_CFD/src/numerics/species/species_sources.cpp +++ b/SU2_CFD/src/numerics/species/species_sources.cpp @@ -3,14 +3,14 @@ * \brief Implementation of numerics classes for integration of * species transport source-terms. * \author T. Kattmann - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/numerics/template.cpp b/SU2_CFD/src/numerics/template.cpp index 75875e403524..2308908d0190 100644 --- a/SU2_CFD/src/numerics/template.cpp +++ b/SU2_CFD/src/numerics/template.cpp @@ -2,14 +2,14 @@ * \file template.cpp * \brief Empty implementation of numerics templates, see .hpp file. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/output/CAdjElasticityOutput.cpp b/SU2_CFD/src/output/CAdjElasticityOutput.cpp index 7466b506d60d..825872f0fc71 100644 --- a/SU2_CFD/src/output/CAdjElasticityOutput.cpp +++ b/SU2_CFD/src/output/CAdjElasticityOutput.cpp @@ -2,14 +2,14 @@ * \file CAdjElasticityOutput.cpp * \brief Main subroutines for elasticity discrete adjoint output * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -113,7 +113,7 @@ void CAdjElasticityOutput::SetHistoryOutputFields(CConfig *config){ if (config->GetTime_Domain() && !config->GetPseudoStatic()) { AddHistoryOutput("SENS_RHO_" + iVarS, "Sens[Rho" + iVarS + ']', ScreenOutputFormat::SCIENTIFIC, "SENSITIVITY", "d Objective / d Material density"); } - if (config->GetDeadLoad()) { + if (config->GetGravityForce() || config->GetBody_Force() || config->GetCentrifugalForce()) { AddHistoryOutput("SENS_RHO_DL_" + iVarS, "Sens[RhoDL" + iVarS + ']', ScreenOutputFormat::SCIENTIFIC, "SENSITIVITY", "d Objective / d Dead load density"); } } @@ -151,7 +151,7 @@ inline void CAdjElasticityOutput::LoadHistoryData(CConfig *config, CGeometry *ge if (config->GetTime_Domain() && !config->GetPseudoStatic()) { SetHistoryOutputValue("SENS_RHO_" + iVarS, solver[ADJFEA_SOL]->GetTotal_Sens_Rho(iVar)); } - if (config->GetDeadLoad()) { + if (config->GetGravityForce() || config->GetBody_Force() || config->GetCentrifugalForce()) { SetHistoryOutputValue("SENS_RHO_DL_" + iVarS, solver[ADJFEA_SOL]->GetTotal_Sens_Rho_DL(iVar)); } } diff --git a/SU2_CFD/src/output/CAdjFlowCompOutput.cpp b/SU2_CFD/src/output/CAdjFlowCompOutput.cpp index 108856156e78..8e0bff6bc1e1 100644 --- a/SU2_CFD/src/output/CAdjFlowCompOutput.cpp +++ b/SU2_CFD/src/output/CAdjFlowCompOutput.cpp @@ -2,14 +2,14 @@ * \file CAdjFlowCompOutput.cpp * \brief Main subroutines for flow discrete adjoint output * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -61,7 +61,7 @@ CAdjFlowCompOutput::CAdjFlowCompOutput(CConfig *config, unsigned short nDim) : C if (find(requestedVolumeFields.begin(), requestedVolumeFields.end(), string("SENSITIVITY")) == requestedVolumeFields.end()) { requestedVolumeFields.emplace_back("SENSITIVITY"); - nRequestedVolumeFields ++; + nRequestedVolumeFields++; } stringstream ss; diff --git a/SU2_CFD/src/output/CAdjFlowIncOutput.cpp b/SU2_CFD/src/output/CAdjFlowIncOutput.cpp index be86c12a4948..140ab6d7bdd7 100644 --- a/SU2_CFD/src/output/CAdjFlowIncOutput.cpp +++ b/SU2_CFD/src/output/CAdjFlowIncOutput.cpp @@ -2,14 +2,14 @@ * \file CAdjFlowIncOutput.cpp * \brief Main subroutines for flow discrete adjoint output * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -67,7 +67,7 @@ CAdjFlowIncOutput::CAdjFlowIncOutput(CConfig *config, unsigned short nDim) : CAd if (find(requestedVolumeFields.begin(), requestedVolumeFields.end(), string("SENSITIVITY")) == requestedVolumeFields.end()) { requestedVolumeFields.emplace_back("SENSITIVITY"); - nRequestedVolumeFields ++; + nRequestedVolumeFields++; } stringstream ss; diff --git a/SU2_CFD/src/output/CAdjFlowOutput.cpp b/SU2_CFD/src/output/CAdjFlowOutput.cpp index 481b63f6fb49..1bda3f6d022e 100644 --- a/SU2_CFD/src/output/CAdjFlowOutput.cpp +++ b/SU2_CFD/src/output/CAdjFlowOutput.cpp @@ -2,14 +2,14 @@ * \file CAdjFlowOutput.cpp * \brief Main subroutines for flow discrete adjoint output * \author T. Kattmann - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -62,12 +62,13 @@ void CAdjFlowOutput::AddHistoryOutputFields_AdjScalarRMS_RES(const CConfig* conf } if (config->GetKind_Species_Model() == SPECIES_MODEL::FLAMELET) { - for (auto iCV=0u; iCV < config->GetNControlVars(); iCV++) { - const auto& cv_name = config->GetControllingVariableName(iCV); + const auto& flamelet_config_options = config->GetFlameletParsedOptions(); + for (auto iCV=0u; iCV < flamelet_config_options.n_control_vars; iCV++) { + const auto& cv_name = flamelet_config_options.controlling_variable_names[iCV]; AddHistoryOutput("RMS_ADJ_"+cv_name, "rms[" + cv_name + "]", ScreenOutputFormat::FIXED, "RMS_RES", "Root-mean square residual of the adjoint " + cv_name, HistoryFieldType::RESIDUAL); } - for (unsigned short i_scalar = 0; i_scalar < config->GetNUserScalars(); i_scalar++) { - const auto& scalar_name = config->GetUserScalarName(i_scalar); + for (unsigned short i_scalar = 0; i_scalar < flamelet_config_options.n_user_scalars; i_scalar++) { + const auto& scalar_name = flamelet_config_options.user_scalar_names[i_scalar]; AddHistoryOutput("RMS_ADJ_" + scalar_name, "rms[" + scalar_name + "]", ScreenOutputFormat::FIXED, "RMS_RES", "Root-mean square residual of the adjoint of " + scalar_name + " .", HistoryFieldType::RESIDUAL); } } @@ -98,12 +99,13 @@ void CAdjFlowOutput::AddHistoryOutputFields_AdjScalarMAX_RES(const CConfig* conf } if (config->GetKind_Species_Model() == SPECIES_MODEL::FLAMELET) { - for (auto iCV=0u; iCV < config->GetNControlVars(); iCV++) { - const auto& cv_name = config->GetControllingVariableName(iCV); + const auto& flamelet_config_options = config->GetFlameletParsedOptions(); + for (auto iCV=0u; iCV < flamelet_config_options.n_control_vars; iCV++) { + const auto& cv_name = flamelet_config_options.controlling_variable_names[iCV]; AddHistoryOutput("MAX_ADJ_" + cv_name, "max["+cv_name +"]", ScreenOutputFormat::FIXED, "MAX_RES", "Maximum residual of the adjoint " + cv_name, HistoryFieldType::RESIDUAL); } - for (unsigned short i_scalar = 0; i_scalar < config->GetNUserScalars(); i_scalar++) { - const auto& scalar_name = config->GetUserScalarName(i_scalar); + for (unsigned short i_scalar = 0; i_scalar < flamelet_config_options.n_user_scalars; i_scalar++) { + const auto& scalar_name = flamelet_config_options.user_scalar_names[i_scalar]; AddHistoryOutput("MAX_ADJ_" + scalar_name, "max[scalar_" + scalar_name + "]",ScreenOutputFormat::FIXED, "MAX_RES", "Maximum residual of the adjoint of " + scalar_name + " .", HistoryFieldType::RESIDUAL); } } @@ -136,13 +138,14 @@ void CAdjFlowOutput::AddHistoryOutputFields_AdjScalarBGS_RES(const CConfig* conf } if (config->GetKind_Species_Model() == SPECIES_MODEL::FLAMELET) { - for (auto iCV=0u; iCV < config->GetNControlVars(); iCV++) { - const auto& cv_name = config->GetControllingVariableName(iCV); + const auto& flamelet_config_options = config->GetFlameletParsedOptions(); + for (auto iCV=0u; iCV < flamelet_config_options.n_control_vars; iCV++) { + const auto& cv_name = flamelet_config_options.controlling_variable_names[iCV]; AddHistoryOutput("BGS_ADJ_" + cv_name, "bgs[" + cv_name + "]", ScreenOutputFormat::FIXED, "BGS_RES", "BGS residual of the adjoint " + cv_name, HistoryFieldType::RESIDUAL); } - for (unsigned short i_scalar = 0; i_scalar < config->GetNUserScalars(); i_scalar++) { - const auto& scalar_name = config->GetUserScalarName(i_scalar); + for (unsigned short i_scalar = 0; i_scalar < flamelet_config_options.n_user_scalars; i_scalar++) { + const auto& scalar_name = flamelet_config_options.user_scalar_names[i_scalar]; AddHistoryOutput("BGS_ADJ_" + scalar_name, "bgs[" + scalar_name + "]", ScreenOutputFormat::FIXED, "BGS_RES", "BGS residual of the adjoint of " + scalar_name + " .", HistoryFieldType::RESIDUAL); } } @@ -213,16 +216,17 @@ void CAdjFlowOutput::LoadHistoryDataAdjScalar(const CConfig* config, const CSolv } if (config->GetKind_Species_Model() == SPECIES_MODEL::FLAMELET) { - for (auto iCV=0u; iCV < config->GetNControlVars(); iCV++) { - const auto& cv_name = config->GetControllingVariableName(iCV); - SetHistoryOutputValue("RMS_ADJ_"+cv_name, log10(adjspecies_solver->GetRes_RMS(iCV))); - SetHistoryOutputValue("MAX_ADJ_"+cv_name, log10(adjspecies_solver->GetRes_Max(iCV))); - if (multiZone) - SetHistoryOutputValue("BGS_ADJ_" + cv_name, log10(adjspecies_solver->GetRes_BGS(iCV))); - } + const auto& flamelet_config_options = config->GetFlameletParsedOptions(); + for (auto iCV=0u; iCV < flamelet_config_options.n_control_vars; iCV++) { + const auto& cv_name = flamelet_config_options.controlling_variable_names[iCV]; + SetHistoryOutputValue("RMS_ADJ_"+cv_name, log10(adjspecies_solver->GetRes_RMS(iCV))); + SetHistoryOutputValue("MAX_ADJ_"+cv_name, log10(adjspecies_solver->GetRes_Max(iCV))); + if (multiZone) + SetHistoryOutputValue("BGS_ADJ_" + cv_name, log10(adjspecies_solver->GetRes_BGS(iCV))); + } - for (unsigned short i_scalar = 0; i_scalar < config->GetNUserScalars(); i_scalar++) { - const auto& scalar_name = config->GetUserScalarName(i_scalar); + for (unsigned short i_scalar = 0; i_scalar < flamelet_config_options.n_user_scalars; i_scalar++) { + const auto& scalar_name = flamelet_config_options.user_scalar_names[i_scalar]; SetHistoryOutputValue("RMS_ADJ_" + scalar_name, log10(adjspecies_solver->GetRes_RMS(2 + i_scalar))); SetHistoryOutputValue("MAX_ADJ_" + scalar_name, log10(adjspecies_solver->GetRes_Max(2 + i_scalar))); if (multiZone) { @@ -263,13 +267,14 @@ void CAdjFlowOutput::SetVolumeOutputFieldsAdjScalarSolution(const CConfig* confi } if (config->GetKind_Species_Model() == SPECIES_MODEL::FLAMELET) { - for (auto iCV=0u; iCV < config->GetNControlVars(); iCV++) { - const auto& cv_name = config->GetControllingVariableName(iCV); + const auto& flamelet_config_options = config->GetFlameletParsedOptions(); + for (auto iCV=0u; iCV < flamelet_config_options.n_control_vars; iCV++) { + const auto& cv_name = flamelet_config_options.controlling_variable_names[iCV]; AddVolumeOutput("ADJ_" + cv_name, "Adjoint_" + cv_name, "SOLUTION", "Adjoint of the " + cv_name + " controlling variable."); } - for (unsigned short i_scalar = 0; i_scalar < config->GetNUserScalars(); i_scalar++) { - const auto& scalar_name = config->GetUserScalarName(i_scalar); + for (unsigned short i_scalar = 0; i_scalar < flamelet_config_options.n_user_scalars; i_scalar++) { + const auto& scalar_name = flamelet_config_options.user_scalar_names[i_scalar]; AddVolumeOutput("ADJ_" + scalar_name, "Adjoint_" + scalar_name, "SOLUTION", "Adjoint of " + scalar_name); } } @@ -304,12 +309,13 @@ void CAdjFlowOutput::SetVolumeOutputFieldsAdjScalarResidual(const CConfig* confi } if (config->GetKind_Species_Model() == SPECIES_MODEL::FLAMELET) { - for(auto iCV=0u; iCV < config->GetNControlVars(); iCV++) { - const auto& cv_name = config->GetControllingVariableName(iCV); + const auto& flamelet_config_options = config->GetFlameletParsedOptions(); + for(auto iCV=0u; iCV < flamelet_config_options.n_control_vars; iCV++) { + const auto& cv_name = flamelet_config_options.controlling_variable_names[iCV]; AddVolumeOutput("RES_ADJ_" + cv_name, "Residual_Adjoint_" + cv_name, "RESIDUAL", "Residual of the adjoint of " + cv_name); } - for (unsigned short i_scalar = 0; i_scalar < config->GetNUserScalars(); i_scalar++) { - const auto& scalar_name = config->GetUserScalarName(i_scalar); + for (unsigned short i_scalar = 0; i_scalar < flamelet_config_options.n_user_scalars; i_scalar++) { + const auto& scalar_name = flamelet_config_options.user_scalar_names[i_scalar]; AddVolumeOutput("RES_ADJ_" + scalar_name, "Residual_Adjoint_" + scalar_name, "RESIDUAL", "Residual of the adjoint of " + scalar_name); } } @@ -351,16 +357,16 @@ void CAdjFlowOutput::LoadVolumeDataAdjScalar(const CConfig* config, const CSolve } if (config->GetKind_Species_Model() == SPECIES_MODEL::FLAMELET) { - - for (auto iCV=0u; iCV < config->GetNControlVars(); iCV++) { - const auto& cv_name = config->GetControllingVariableName(iCV); + const auto& flamelet_config_options = config->GetFlameletParsedOptions(); + for (auto iCV=0u; iCV < flamelet_config_options.n_control_vars; iCV++) { + const auto& cv_name = flamelet_config_options.controlling_variable_names[iCV]; SetVolumeOutputValue("ADJ_" + cv_name, iPoint, Node_AdjSpecies->GetSolution(iPoint, iCV)); SetVolumeOutputValue("RES_ADJ_" + cv_name, iPoint, Node_AdjSpecies->GetSolution(iPoint, iCV) - Node_AdjSpecies->GetSolution_Old(iPoint, iCV)); } - for (unsigned short i_scalar = 0; i_scalar < config->GetNUserScalars(); i_scalar++) { - const auto& scalar_name = config->GetUserScalarName(i_scalar); - SetVolumeOutputValue("ADJ_" + scalar_name, iPoint, Node_AdjSpecies->GetSolution(iPoint, config->GetNControlVars() + i_scalar)); - SetVolumeOutputValue("RES_ADJ_" + scalar_name, iPoint, Node_AdjSpecies->GetSolution(iPoint, config->GetNControlVars() + i_scalar) - Node_AdjSpecies->GetSolution_Old(iPoint, config->GetNControlVars() + i_scalar)); + for (unsigned short i_scalar = 0; i_scalar < flamelet_config_options.n_user_scalars; i_scalar++) { + const auto& scalar_name = flamelet_config_options.user_scalar_names[i_scalar]; + SetVolumeOutputValue("ADJ_" + scalar_name, iPoint, Node_AdjSpecies->GetSolution(iPoint, flamelet_config_options.n_control_vars + i_scalar)); + SetVolumeOutputValue("RES_ADJ_" + scalar_name, iPoint, Node_AdjSpecies->GetSolution(iPoint, flamelet_config_options.n_control_vars + i_scalar) - Node_AdjSpecies->GetSolution_Old(iPoint, flamelet_config_options.n_control_vars + i_scalar)); } } diff --git a/SU2_CFD/src/output/CAdjHeatOutput.cpp b/SU2_CFD/src/output/CAdjHeatOutput.cpp index 578175fccad1..ed423ffeedca 100644 --- a/SU2_CFD/src/output/CAdjHeatOutput.cpp +++ b/SU2_CFD/src/output/CAdjHeatOutput.cpp @@ -2,14 +2,14 @@ * \file CAdjHeatOutput.cpp * \brief Main subroutines for flow discrete adjoint output * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -58,7 +58,7 @@ CAdjHeatOutput::CAdjHeatOutput(CConfig *config, unsigned short nDim) : COutput(c if (find(requestedVolumeFields.begin(), requestedVolumeFields.end(), string("SENSITIVITY")) == requestedVolumeFields.end()) { requestedVolumeFields.emplace_back("SENSITIVITY"); - nRequestedVolumeFields ++; + nRequestedVolumeFields++; } stringstream ss; diff --git a/SU2_CFD/src/output/CBaselineOutput.cpp b/SU2_CFD/src/output/CBaselineOutput.cpp index 50b13bd6825f..193b8784bc29 100644 --- a/SU2_CFD/src/output/CBaselineOutput.cpp +++ b/SU2_CFD/src/output/CBaselineOutput.cpp @@ -2,14 +2,14 @@ * \file CBaselineOutput.cpp * \brief Main subroutines for flow discrete adjoint output * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/output/CElasticityOutput.cpp b/SU2_CFD/src/output/CElasticityOutput.cpp index ba285fde4252..fe6617a11bfc 100644 --- a/SU2_CFD/src/output/CElasticityOutput.cpp +++ b/SU2_CFD/src/output/CElasticityOutput.cpp @@ -2,14 +2,14 @@ * \file CElasticityOutput.cpp * \brief Main subroutines for FEA output * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -24,18 +24,18 @@ * You should have received a copy of the GNU Lesser General Public * License along with SU2. If not, see . */ - - #include "../../include/output/CElasticityOutput.hpp" +#include "../../include/output/CHeatOutput.hpp" #include "../../../Common/include/geometry/CGeometry.hpp" #include "../../include/solvers/CSolver.hpp" CElasticityOutput::CElasticityOutput(CConfig *config, unsigned short nDim) : COutput(config, nDim, false) { - linear_analysis = (config->GetGeometricConditions() == STRUCT_DEFORMATION::SMALL); - nonlinear_analysis = (config->GetGeometricConditions() == STRUCT_DEFORMATION::LARGE); - dynamic = (config->GetTime_Domain()); + linear_analysis = config->GetGeometricConditions() == STRUCT_DEFORMATION::SMALL; + nonlinear_analysis = config->GetGeometricConditions() == STRUCT_DEFORMATION::LARGE; + coupled_heat = config->GetWeakly_Coupled_Heat(); + dynamic = config->GetTime_Domain(); /*--- Initialize number of variables ---*/ if (linear_analysis) nVar_FEM = nDim; @@ -48,20 +48,21 @@ CElasticityOutput::CElasticityOutput(CConfig *config, unsigned short nDim) : COu } /*--- Default fields for screen output ---*/ - if (nRequestedScreenFields == 0){ + if (nRequestedScreenFields == 0) { if (dynamic) requestedScreenFields.emplace_back("TIME_ITER"); if (multiZone) requestedScreenFields.emplace_back("OUTER_ITER"); requestedScreenFields.emplace_back("INNER_ITER"); - if(linear_analysis){ + if (linear_analysis) { requestedScreenFields.emplace_back("RMS_DISP_X"); requestedScreenFields.emplace_back("RMS_DISP_Y"); requestedScreenFields.emplace_back("RMS_DISP_Z"); } - if(nonlinear_analysis){ + if (nonlinear_analysis) { requestedScreenFields.emplace_back("RMS_UTOL"); requestedScreenFields.emplace_back("RMS_RTOL"); requestedScreenFields.emplace_back("RMS_ETOL"); } + if (coupled_heat) requestedScreenFields.emplace_back("RMS_TEMPERATURE"); requestedScreenFields.emplace_back("VMS"); nRequestedScreenFields = requestedScreenFields.size(); } @@ -71,11 +72,8 @@ CElasticityOutput::CElasticityOutput(CConfig *config, unsigned short nDim) : COu requestedVolumeFields.emplace_back("COORDINATES"); requestedVolumeFields.emplace_back("SOLUTION"); requestedVolumeFields.emplace_back("STRESS"); - if (dynamic) { - requestedVolumeFields.emplace_back("VELOCITY"); - requestedVolumeFields.emplace_back("ACCELERATION"); - } if (config->GetTopology_Optimization()) requestedVolumeFields.emplace_back("TOPOLOGY"); + if (coupled_heat) requestedVolumeFields.emplace_back("PRIMITIVE"); nRequestedVolumeFields = requestedVolumeFields.size(); } @@ -106,12 +104,12 @@ CElasticityOutput::CElasticityOutput(CConfig *config, unsigned short nDim) : COu void CElasticityOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CSolver **solver) { CSolver* fea_solver = solver[FEA_SOL]; + CSolver* heat_solver = solver[HEAT_SOL]; /*--- Residuals: ---*/ /*--- Linear analysis: RMS of the displacements in the nDim coordinates ---*/ /*--- Nonlinear analysis: UTOL, RTOL and DTOL (defined in the Postprocessing function) ---*/ - if (linear_analysis){ SetHistoryOutputValue("RMS_DISP_X", log10(fea_solver->GetRes_RMS(0))); SetHistoryOutputValue("RMS_DISP_Y", log10(fea_solver->GetRes_RMS(1))); @@ -148,6 +146,13 @@ void CElasticityOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CS SetHistoryOutputValue("TOPOL_DISCRETENESS", fea_solver->GetTotal_OFDiscreteness()); } + /*--- Add heat solver data if available. ---*/ + if (coupled_heat) { + CHeatOutput::LoadHistoryDataImpl(config, geometry, solver, this); + SetHistoryOutputValue("LINSOL_ITER_HEAT", heat_solver->GetIterLinSolver()); + SetHistoryOutputValue("LINSOL_RESIDUAL_HEAT", log10(heat_solver->GetResLinSolver())); + } + ComputeSimpleCustomOutputs(config); /*--- Keep this as last, since it uses the history values that were set. ---*/ @@ -190,6 +195,11 @@ void CElasticityOutput::SetHistoryOutputFields(CConfig *config) { } AddHistoryOutput("COMBO", "ComboObj", ScreenOutputFormat::SCIENTIFIC, "COMBO", "Combined obj. function value.", HistoryFieldType::COEFFICIENT); + if (coupled_heat) { + CHeatOutput::SetHistoryOutputFieldsImpl(config, this); + AddHistoryOutput("LINSOL_ITER_HEAT", "LinSolIterHeat", ScreenOutputFormat::INTEGER, "LINSOL", "Number of iterations of the linear solver."); + AddHistoryOutput("LINSOL_RESIDUAL_HEAT", "LinSolResHeat", ScreenOutputFormat::FIXED, "LINSOL", "Residual of the linear solver."); + } } void CElasticityOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, CSolver **solver, unsigned long iPoint){ @@ -215,6 +225,10 @@ void CElasticityOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, CSo SetVolumeOutputValue("ACCELERATION-Y", iPoint, Node_Struc->GetSolution_Accel(iPoint, 1)); if (nDim == 3) SetVolumeOutputValue("ACCELERATION-Z", iPoint, Node_Struc->GetSolution_Accel(iPoint, 2)); } + if (coupled_heat) { + CVariable* Node_Heat = solver[HEAT_SOL]->GetNodes(); + SetVolumeOutputValue("TEMPERATURE", iPoint, Node_Heat->GetSolution(iPoint, 0)); + } SetVolumeOutputValue("STRESS-XX", iPoint, Node_Struc->GetStress_FEM(iPoint)[0]); SetVolumeOutputValue("STRESS-YY", iPoint, Node_Struc->GetStress_FEM(iPoint)[1]); @@ -229,6 +243,14 @@ void CElasticityOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, CSo if (config->GetTopology_Optimization()) { SetVolumeOutputValue("TOPOL_DENSITY", iPoint, Node_Struc->GetAuxVar(iPoint)); } + + CSolver* heat_solver = solver[HEAT_SOL]; + if (heat_solver) { + const auto Node_Heat = heat_solver->GetNodes(); + SetVolumeOutputValue("TEMPERATURE", iPoint, Node_Heat->GetSolution(iPoint, 0)); + SetVolumeOutputValue("RES_TEMPERATURE", iPoint, heat_solver->LinSysRes(iPoint, 0)); + } + } void CElasticityOutput::SetVolumeOutputFields(CConfig *config){ @@ -236,21 +258,24 @@ void CElasticityOutput::SetVolumeOutputFields(CConfig *config){ // Grid coordinates AddVolumeOutput("COORD-X", "x", "COORDINATES", "x-component of the coordinate vector"); AddVolumeOutput("COORD-Y", "y", "COORDINATES", "y-component of the coordinate vector"); - if (nDim == 3) - AddVolumeOutput("COORD-Z", "z", "COORDINATES", "z-component of the coordinate vector"); + if (nDim == 3) AddVolumeOutput("COORD-Z", "z", "COORDINATES", "z-component of the coordinate vector"); AddVolumeOutput("DISPLACEMENT-X", "Displacement_x", "SOLUTION", "x-component of the displacement vector"); AddVolumeOutput("DISPLACEMENT-Y", "Displacement_y", "SOLUTION", "y-component of the displacement vector"); if (nDim == 3) AddVolumeOutput("DISPLACEMENT-Z", "Displacement_z", "SOLUTION", "z-component of the displacement vector"); - if(dynamic){ - AddVolumeOutput("VELOCITY-X", "Velocity_x", "VELOCITY", "x-component of the velocity vector"); - AddVolumeOutput("VELOCITY-Y", "Velocity_y", "VELOCITY", "y-component of the velocity vector"); - if (nDim == 3) AddVolumeOutput("VELOCITY-Z", "Velocity_z", "VELOCITY", "z-component of the velocity vector"); + if (dynamic) { + AddVolumeOutput("VELOCITY-X", "Velocity_x", "SOLUTION", "x-component of the velocity vector"); + AddVolumeOutput("VELOCITY-Y", "Velocity_y", "SOLUTION", "y-component of the velocity vector"); + if (nDim == 3) AddVolumeOutput("VELOCITY-Z", "Velocity_z", "SOLUTION", "z-component of the velocity vector"); + + AddVolumeOutput("ACCELERATION-X", "Acceleration_x", "SOLUTION", "x-component of the acceleration vector"); + AddVolumeOutput("ACCELERATION-Y", "Acceleration_y", "SOLUTION", "y-component of the acceleration vector"); + if (nDim == 3) AddVolumeOutput("ACCELERATION-Z", "Acceleration_z", "SOLUTION", "z-component of the acceleration vector"); + } - AddVolumeOutput("ACCELERATION-X", "Acceleration_x", "ACCELERATION", "x-component of the acceleration vector"); - AddVolumeOutput("ACCELERATION-Y", "Acceleration_y", "ACCELERATION", "y-component of the acceleration vector"); - if (nDim == 3) AddVolumeOutput("ACCELERATION-Z", "Acceleration_z", "ACCELERATION", "z-component of the acceleration vector"); + if (coupled_heat) { + AddVolumeOutput("TEMPERATURE", "Temperature", "SOLUTION", "Temperature"); } AddVolumeOutput("STRESS-XX", "Sxx", "STRESS", "x-component of the normal stress vector"); @@ -268,6 +293,12 @@ void CElasticityOutput::SetVolumeOutputFields(CConfig *config){ if (config->GetTopology_Optimization()) { AddVolumeOutput("TOPOL_DENSITY", "Topology_Density", "TOPOLOGY", "filtered topology density"); } + + if (coupled_heat) { + AddVolumeOutput("HEAT_FLUX", "Heat_Flux", "PRIMITIVE", "Heatflux"); + AddVolumeOutput("RES_TEMPERATURE", "Residual_Temperature", "RESIDUAL", "Residual of the temperature"); + } + } bool CElasticityOutput::SetInitResiduals(const CConfig *config){ @@ -275,3 +306,12 @@ bool CElasticityOutput::SetInitResiduals(const CConfig *config){ return (config->GetTime_Domain() == NO && (curInnerIter == 0)); } + +void CElasticityOutput::LoadSurfaceData(CConfig *config, CGeometry *geometry, CSolver **solver, unsigned long iPoint, + unsigned short iMarker, unsigned long iVertex) { + if (!coupled_heat || !config->GetViscous_Wall(iMarker)) return; + + /* Heat flux value at each surface grid node. */ + SetVolumeOutputValue("HEAT_FLUX", iPoint, solver[HEAT_SOL]->GetHeatFlux(iMarker, iVertex)); + +} diff --git a/SU2_CFD/src/output/CFVMOutput.cpp b/SU2_CFD/src/output/CFVMOutput.cpp index 77964a7d3a2a..01dde1f9731a 100644 --- a/SU2_CFD/src/output/CFVMOutput.cpp +++ b/SU2_CFD/src/output/CFVMOutput.cpp @@ -2,14 +2,14 @@ * \file CFVMOutput.cpp * \brief Main subroutines for Finite Volume Method output * \author T. Kattmann - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/output/CFlowCompFEMOutput.cpp b/SU2_CFD/src/output/CFlowCompFEMOutput.cpp index 4516678bba61..15e9b086f0ea 100644 --- a/SU2_CFD/src/output/CFlowCompFEMOutput.cpp +++ b/SU2_CFD/src/output/CFlowCompFEMOutput.cpp @@ -2,14 +2,14 @@ * \file CFlowCompFEMOutput.cpp * \brief Main subroutines for compressible flow output * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/output/CFlowCompOutput.cpp b/SU2_CFD/src/output/CFlowCompOutput.cpp index e460109c8b52..2318db1423bc 100644 --- a/SU2_CFD/src/output/CFlowCompOutput.cpp +++ b/SU2_CFD/src/output/CFlowCompOutput.cpp @@ -2,14 +2,14 @@ * \file CFlowCompOutput.cpp * \brief Main subroutines for compressible flow output * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -61,7 +61,7 @@ CFlowCompOutput::CFlowCompOutput(const CConfig *config, unsigned short nDim) : C auto notFound = requestedVolumeFields.end(); if (find(requestedVolumeFields.begin(), notFound, string("GRID_VELOCITY")) == notFound) { requestedVolumeFields.emplace_back("GRID_VELOCITY"); - nRequestedVolumeFields ++; + nRequestedVolumeFields++; } } @@ -219,7 +219,7 @@ void CFlowCompOutput::SetVolumeOutputFields(CConfig *config){ AddVolumeOutput("DENSITY", "Density", "SOLUTION", "Density"); AddVolumeOutput("MOMENTUM-X", "Momentum_x", "SOLUTION", "x-component of the momentum vector"); AddVolumeOutput("MOMENTUM-Y", "Momentum_y", "SOLUTION", "y-component of the momentum vector"); - + if (nDim == 3) AddVolumeOutput("MOMENTUM-Z", "Momentum_z", "SOLUTION", "z-component of the momentum vector"); AddVolumeOutput("ENERGY", "Energy", "SOLUTION", "Energy"); @@ -241,7 +241,7 @@ void CFlowCompOutput::SetVolumeOutputFields(CConfig *config){ AddVolumeOutput("PRESSURE_COEFF", "Pressure_Coefficient", "PRIMITIVE", "Pressure coefficient"); AddVolumeOutput("VELOCITY-X", "Velocity_x", "PRIMITIVE", "x-component of the velocity vector"); AddVolumeOutput("VELOCITY-Y", "Velocity_y", "PRIMITIVE", "y-component of the velocity vector"); - + if (nDim == 3) AddVolumeOutput("VELOCITY-Z", "Velocity_z", "PRIMITIVE", "z-component of the velocity vector"); @@ -525,7 +525,7 @@ void CFlowCompOutput::SetTurboPerformance_Output(std::shared_ptr T for (unsigned short iZone = 0; iZone <= config->GetnZone()-1; iZone++) { auto nSpan = config->GetnSpan_iZones(iZone); - const auto& BladePerf = BladePerformance.at(iZone).at(nSpan); + const auto& BladePerf = BladePerformance.at(iZone).at(nSpan); TurboInOut<<" BLADE ROW INDEX "<GetInletState().GetVelocity()[iDim]*config[ZONE_0]->GetVelocity_Ref(); } file.width(30); file << BladePerf->GetInletState().GetVelocityValue()*config[ZONE_0]->GetVelocity_Ref(); - // This captures NaNs + // This captures NaNs if(isnan(BladePerf->GetInletState().GetAbsFlowAngle())){ file.width(30); file << "0.0000"; } @@ -792,11 +792,11 @@ void CFlowCompOutput::WriteTurboSpanwisePerformance(std::shared_ptr 1) { - spanwise_performance_filename.append("_" + std::to_string(val_iZone) + ".dat"); - } else { - spanwise_performance_filename.append(".dat"); - } + if (nZone > 1) { + spanwise_performance_filename.append("_" + std::to_string(val_iZone) + ".dat"); + } else { + spanwise_performance_filename.append(".dat"); + } file.open (spanwise_performance_filename.data(), ios::out | ios::trunc); file.setf(ios::scientific); file.precision(12); diff --git a/SU2_CFD/src/output/CFlowIncOutput.cpp b/SU2_CFD/src/output/CFlowIncOutput.cpp index eeffb6a3486c..7d75d879de04 100644 --- a/SU2_CFD/src/output/CFlowIncOutput.cpp +++ b/SU2_CFD/src/output/CFlowIncOutput.cpp @@ -2,14 +2,14 @@ * \file CFlowIncOutput.cpp * \brief Main subroutines for incompressible flow output * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -70,7 +70,7 @@ CFlowIncOutput::CFlowIncOutput(CConfig *config, unsigned short nDim) : CFlowOutp auto notFound = requestedVolumeFields.end(); if (find(requestedVolumeFields.begin(), notFound, string("GRID_VELOCITY")) == notFound) { requestedVolumeFields.emplace_back("GRID_VELOCITY"); - nRequestedVolumeFields ++; + nRequestedVolumeFields++; } } @@ -211,7 +211,7 @@ void CFlowIncOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CSolv 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))); - if (nDim == 3) SetHistoryOutputValue("RMS_VELOCITY-Z", log10(flow_solver->GetRes_Max(3))); + if (nDim == 3) SetHistoryOutputValue("MAX_VELOCITY-Z", log10(flow_solver->GetRes_Max(3))); if (multiZone){ SetHistoryOutputValue("BGS_PRESSURE", log10(flow_solver->GetRes_BGS(0))); diff --git a/SU2_CFD/src/output/CFlowOutput.cpp b/SU2_CFD/src/output/CFlowOutput.cpp index 3c651269b02e..e9f70fee2768 100644 --- a/SU2_CFD/src/output/CFlowOutput.cpp +++ b/SU2_CFD/src/output/CFlowOutput.cpp @@ -2,14 +2,14 @@ * \file CFlowOutput.cpp * \brief Common functions for flow output. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -995,15 +995,16 @@ void CFlowOutput::AddHistoryOutputFields_ScalarRMS_RES(const CConfig* config) { break; } case SPECIES_MODEL::FLAMELET: { + const auto& flamelet_config_options = config->GetFlameletParsedOptions(); /*--- Controlling variable transport. ---*/ - for (auto iCV = 0u; iCV < config->GetNControlVars(); iCV++){ - const auto& CV_name = config->GetControllingVariableName(iCV); + for (auto iCV = 0u; iCV < flamelet_config_options.n_control_vars; iCV++){ + const auto& CV_name = flamelet_config_options.controlling_variable_names[iCV]; AddHistoryOutput("RMS_"+CV_name, "rms["+CV_name+"]",ScreenOutputFormat::FIXED, "RMS_RES", "Root-mean squared residual of " + CV_name + " controlling variable equation.", HistoryFieldType::RESIDUAL); } /*--- auxiliary species transport ---*/ - for (auto i_scalar = 0u; i_scalar < config->GetNUserScalars(); i_scalar++){ - const auto& scalar_name = config->GetUserScalarName(i_scalar); + for (auto i_scalar = 0u; i_scalar < flamelet_config_options.n_user_scalars; i_scalar++){ + const auto& scalar_name = flamelet_config_options.user_scalar_names[i_scalar]; AddHistoryOutput("RMS_"+scalar_name, "rms["+scalar_name+"]", ScreenOutputFormat::FIXED , "RMS_RES", "Root-mean squared residual of the "+scalar_name+" mass fraction equation." , HistoryFieldType::RESIDUAL); } break; @@ -1052,15 +1053,16 @@ void CFlowOutput::AddHistoryOutputFields_ScalarMAX_RES(const CConfig* config) { break; } case SPECIES_MODEL::FLAMELET: { + const auto& flamelet_config_options = config->GetFlameletParsedOptions(); /*--- Controlling variable transport. ---*/ - for (auto iCV=0u; iCV < config->GetNControlVars(); iCV++){ - const auto& cv_name = config->GetControllingVariableName(iCV); + for (auto iCV=0u; iCV < flamelet_config_options.n_control_vars; iCV++){ + const auto& cv_name = flamelet_config_options.controlling_variable_names[iCV]; AddHistoryOutput("MAX_" + cv_name, "max[" + cv_name + "]", ScreenOutputFormat::FIXED, "MAX_RES", "Maximum residual of the " + cv_name + " equation.", HistoryFieldType::RESIDUAL); } /*--- auxiliary species transport ---*/ - for (auto i_scalar = 0u; i_scalar < config->GetNUserScalars(); i_scalar++){ - const auto& scalar_name = config->GetUserScalarName(i_scalar); + for (auto i_scalar = 0u; i_scalar < flamelet_config_options.n_user_scalars; i_scalar++){ + const auto& scalar_name = flamelet_config_options.user_scalar_names[i_scalar]; AddHistoryOutput("MAX_" + scalar_name, "max[" + scalar_name + "]", ScreenOutputFormat::FIXED , "MAX_RES", "Maximum residual of the " + scalar_name + " mass fraction equation." , HistoryFieldType::RESIDUAL); } break; @@ -1107,15 +1109,16 @@ void CFlowOutput::AddHistoryOutputFields_ScalarBGS_RES(const CConfig* config) { break; } case SPECIES_MODEL::FLAMELET: { + const auto& flamelet_config_options = config->GetFlameletParsedOptions(); /*--- Controlling variable transport. ---*/ - for (auto iCV=0u; iCV < config->GetNControlVars(); iCV++){ - const auto& cv_name = config->GetControllingVariableName(iCV); + for (auto iCV=0u; iCV < flamelet_config_options.n_control_vars; iCV++){ + const auto& cv_name = flamelet_config_options.controlling_variable_names[iCV]; AddHistoryOutput("BGS_" + cv_name, "bgs[" + cv_name + "]", ScreenOutputFormat::FIXED, "BGS_RES", "BGS residual of the " + cv_name + " controlling variable equation.", HistoryFieldType::RESIDUAL); } /*--- auxiliary species transport ---*/ - for (auto i_scalar = 0u; i_scalar < config->GetNUserScalars(); i_scalar++){ - const auto& scalar_name = config->GetUserScalarName(i_scalar); + for (auto i_scalar = 0u; i_scalar < flamelet_config_options.n_user_scalars; i_scalar++){ + const auto& scalar_name = flamelet_config_options.user_scalar_names[i_scalar]; AddHistoryOutput("BGS_"+scalar_name, "bgs["+scalar_name+"]", ScreenOutputFormat::FIXED , "BGS_RES", "BGS residual of the "+scalar_name+" mass fraction equation." , HistoryFieldType::RESIDUAL); } break; @@ -1213,9 +1216,10 @@ void CFlowOutput::LoadHistoryDataScalar(const CConfig* config, const CSolver* co } case SPECIES_MODEL::FLAMELET: { + const auto& flamelet_config_options = config->GetFlameletParsedOptions(); /*--- Controlling variable transport. ---*/ - for (auto iCV=0u; iCV < config->GetNControlVars(); iCV++){ - const auto& cv_name = config->GetControllingVariableName(iCV); + for (auto iCV=0u; iCV < flamelet_config_options.n_control_vars; iCV++){ + const auto& cv_name = flamelet_config_options.controlling_variable_names[iCV]; SetHistoryOutputValue("RMS_" + cv_name, log10(solver[SPECIES_SOL]->GetRes_RMS(iCV))); SetHistoryOutputValue("MAX_" + cv_name, log10(solver[SPECIES_SOL]->GetRes_Max(iCV))); if (multiZone) { @@ -1223,19 +1227,19 @@ void CFlowOutput::LoadHistoryDataScalar(const CConfig* config, const CSolver* co } } /*--- auxiliary species transport ---*/ - for (unsigned short iReactant=0; iReactantGetNUserScalars(); iReactant++){ - const auto& species_name = config->GetUserScalarName(iReactant); - SetHistoryOutputValue("RMS_" + species_name, log10(solver[SPECIES_SOL]->GetRes_RMS(config->GetNControlVars() + iReactant))); - SetHistoryOutputValue("MAX_" + species_name, log10(solver[SPECIES_SOL]->GetRes_Max(config->GetNControlVars() + iReactant))); + for (unsigned short iReactant=0; iReactantGetRes_RMS(flamelet_config_options.n_control_vars + iReactant))); + SetHistoryOutputValue("MAX_" + species_name, log10(solver[SPECIES_SOL]->GetRes_Max(flamelet_config_options.n_control_vars + iReactant))); if (multiZone) { - SetHistoryOutputValue("BGS_" + species_name, log10(solver[SPECIES_SOL]->GetRes_BGS(config->GetNControlVars() + iReactant))); + SetHistoryOutputValue("BGS_" + species_name, log10(solver[SPECIES_SOL]->GetRes_BGS(flamelet_config_options.n_control_vars + iReactant))); } } SetHistoryOutputValue("LINSOL_ITER_FLAMELET", solver[SPECIES_SOL]->GetIterLinSolver()); SetHistoryOutputValue("LINSOL_RESIDUAL_FLAMELET", log10(solver[SPECIES_SOL]->GetResLinSolver())); - break; } + break; case SPECIES_MODEL::NONE: break; } @@ -1274,18 +1278,19 @@ void CFlowOutput::SetVolumeOutputFieldsScalarSolution(const CConfig* config){ AddVolumeOutput("SPECIES_" + std::to_string(iVar), "Species_" + std::to_string(iVar), "SOLUTION", "Species_" + std::to_string(iVar) + " mass fraction"); } break; - case SPECIES_MODEL::FLAMELET: - /*--- Controlling variables. ---*/ - for (auto iCV=0u; iCVGetNControlVars(); iCV++) { - const auto& cv_name = config->GetControllingVariableName(iCV); - AddVolumeOutput(cv_name, cv_name, "SOLUTION", cv_name + " solution."); - } - /*--- auxiliary species ---*/ - for (auto iReactant=0u; iReactantGetNUserScalars(); iReactant++) { - const auto& species_name = config->GetUserScalarName(iReactant); - AddVolumeOutput(species_name, species_name, "SOLUTION", species_name + "Mass fraction solution"); + case SPECIES_MODEL::FLAMELET: { + const auto& flamelet_config_options = config->GetFlameletParsedOptions(); + /*--- Controlling variables. ---*/ + for (auto iCV=0u; iCVGetFlameletParsedOptions(); /*--- Residuals for controlling variable transport equations. ---*/ - for (auto iCV=0u; iCVGetNControlVars(); iCV++) { - const auto& cv_name = config->GetControllingVariableName(iCV); + for (auto iCV=0u; iCVGetNUserScalars(); iReactant++){ - const auto& species_name = config->GetUserScalarName(iReactant); + for (unsigned short iReactant=0; iReactantGetnSpecies(); iVar++) AddVolumeOutput("LIMITER_SPECIES_" + std::to_string(iVar), "Limiter_Species_" + std::to_string(iVar), "LIMITER", "Limiter value of the transported species " + std::to_string(iVar)); break; - case SPECIES_MODEL::FLAMELET: + case SPECIES_MODEL::FLAMELET: { + const auto& flamelet_config_options = config->GetFlameletParsedOptions(); /*--- Limiter for controlling variables transport. ---*/ - for (auto iCV=0u; iCV < config->GetNControlVars(); iCV++) { - const auto& cv_name = config->GetControllingVariableName(iCV); + for (auto iCV=0u; iCV < flamelet_config_options.n_control_vars; iCV++) { + const auto& cv_name = flamelet_config_options.controlling_variable_names[iCV]; AddVolumeOutput("LIMITER_" + cv_name, "Limiter_" + cv_name, "LIMITER", "Limiter of " + cv_name + " controlling variable."); } /*--- limiter for auxiliary species transport ---*/ - for (unsigned short iReactant=0; iReactant < config->GetNUserScalars(); iReactant++) { - const auto& species_name = config->GetUserScalarName(iReactant); + for (unsigned short iReactant=0; iReactant < flamelet_config_options.n_user_scalars; iReactant++) { + const auto& species_name = flamelet_config_options.user_scalar_names[iReactant]; AddVolumeOutput("LIMITER_" + species_name, "LIMITER_" + species_name, "LIMITER", "Limiter value for the " + species_name + " equation"); } + } break; default: break; @@ -1421,19 +1430,21 @@ void CFlowOutput::SetVolumeOutputFieldsScalarSource(const CConfig* config) { /*--- Only place outputs of the "SOURCE" group for scalar transport here. ---*/ switch (config->GetKind_Species_Model()) { - case SPECIES_MODEL::FLAMELET: - for (auto iCV=0u; iCV < config->GetNControlVars(); iCV++) { - const auto& cv_source_name = config->GetControllingVariableSourceName(iCV); - const auto& cv_name = config->GetControllingVariableName(iCV); + case SPECIES_MODEL::FLAMELET: { + const auto& flamelet_config_options = config->GetFlameletParsedOptions(); + for (auto iCV=0u; iCV < flamelet_config_options.n_control_vars; iCV++) { + const auto& cv_source_name = flamelet_config_options.cv_source_names[iCV]; + const auto& cv_name = flamelet_config_options.controlling_variable_names[iCV]; if (cv_source_name.compare("NULL") != 0) AddVolumeOutput("SOURCE_"+cv_name, "Source_" + cv_name, "SOURCE", "Source " + cv_name); } /*--- no source term for enthalpy ---*/ /*--- auxiliary species source terms ---*/ - for (auto iReactant=0u; iReactantGetNUserScalars(); iReactant++) { - const auto& species_name = config->GetUserScalarName(iReactant); + for (auto iReactant=0u; iReactantGetKind_Species_Model()) { - case SPECIES_MODEL::FLAMELET: - for (auto i_lookup = 0u; i_lookup < config->GetNLookups(); ++i_lookup) { - string strname1 = "lookup_" + config->GetLookupName(i_lookup); - AddVolumeOutput(config->GetLookupName(i_lookup), strname1,"LOOKUP", config->GetLookupName(i_lookup)); - } - AddVolumeOutput("TABLE_MISSES" , "Table_misses" , "LOOKUP", "Lookup table misses"); - break; - default: - break; + if (config->GetKind_Species_Model() == SPECIES_MODEL::FLAMELET) { + const auto& flamelet_config_options = config->GetFlameletParsedOptions(); + for (auto i_lookup = 0u; i_lookup < flamelet_config_options.n_lookups; ++i_lookup) { + string strname1 = "lookup_" + flamelet_config_options.lookup_names[i_lookup]; + AddVolumeOutput(flamelet_config_options.lookup_names[i_lookup], strname1,"LOOKUP", flamelet_config_options.lookup_names[i_lookup]); + } + AddVolumeOutput("TABLE_MISSES" , "Table_misses" , "LOOKUP", "Lookup table misses"); } } @@ -1585,47 +1593,47 @@ void CFlowOutput::LoadVolumeDataScalar(const CConfig* config, const CSolver* con case SPECIES_MODEL::FLAMELET: { const auto Node_Species = solver[SPECIES_SOL]->GetNodes(); - + const auto& flamelet_config_options = config->GetFlameletParsedOptions(); /*--- Controlling variables transport equations. ---*/ - for (auto iCV=0u; iCV < config->GetNControlVars(); iCV++) { - const auto& cv_name = config->GetControllingVariableName(iCV); + for (auto iCV=0u; iCV < flamelet_config_options.n_control_vars; iCV++) { + const auto& cv_name = flamelet_config_options.controlling_variable_names[iCV]; SetVolumeOutputValue(cv_name, iPoint, Node_Species->GetSolution(iPoint, iCV)); SetVolumeOutputValue("RES_" + cv_name, iPoint, solver[SPECIES_SOL]->LinSysRes(iPoint, iCV)); - const auto& source_name = config->GetControllingVariableSourceName(iCV); + const auto& source_name = flamelet_config_options.cv_source_names[iCV]; if (source_name.compare("NULL") != 0) SetVolumeOutputValue("SOURCE_" + cv_name, iPoint, Node_Species->GetScalarSources(iPoint)[iCV]); } /*--- auxiliary species transport equations ---*/ - for (unsigned short i_scalar=0; i_scalarGetNUserScalars(); i_scalar++) { - const auto& scalar_name = config->GetUserScalarName(i_scalar); - SetVolumeOutputValue(scalar_name, iPoint, Node_Species->GetSolution(iPoint, config->GetNControlVars() + i_scalar)); - SetVolumeOutputValue("SOURCE_" + scalar_name, iPoint, Node_Species->GetScalarSources(iPoint)[config->GetNControlVars() + i_scalar]); - SetVolumeOutputValue("RES_" + scalar_name, iPoint, solver[SPECIES_SOL]->LinSysRes(iPoint, config->GetNControlVars() + i_scalar)); + for (unsigned short i_scalar=0; i_scalarGetSolution(iPoint, flamelet_config_options.n_control_vars + i_scalar)); + SetVolumeOutputValue("SOURCE_" + scalar_name, iPoint, Node_Species->GetScalarSources(iPoint)[flamelet_config_options.n_control_vars + i_scalar]); + SetVolumeOutputValue("RES_" + scalar_name, iPoint, solver[SPECIES_SOL]->LinSysRes(iPoint, flamelet_config_options.n_control_vars + i_scalar)); } if (config->GetKind_SlopeLimit_Species() != LIMITER::NONE) { /*--- Limiter for controlling variable transport equations. ---*/ - for (auto iCV=0u; iCVGetNControlVars(); iCV++) { - const auto& cv_name = config->GetControllingVariableName(iCV); + for (auto iCV=0u; iCVGetLimiter(iPoint, iCV)); } /*--- limiter for auxiliary species transport equations ---*/ - for (unsigned short i_scalar=0; i_scalarGetNUserScalars(); i_scalar++) { - const auto& scalar_name = config->GetUserScalarName(i_scalar); - SetVolumeOutputValue("LIMITER_" + scalar_name, iPoint, Node_Species->GetLimiter(iPoint, config->GetNControlVars() + i_scalar)); + for (unsigned short i_scalar=0; i_scalarGetLimiter(iPoint, flamelet_config_options.n_control_vars + i_scalar)); } } /*--- variables that we look up from the LUT ---*/ - for (int i_lookup = 0; i_lookup < config->GetNLookups(); ++i_lookup) { - if (config->GetLookupName(i_lookup)!="NULL") - SetVolumeOutputValue(config->GetLookupName(i_lookup), iPoint, Node_Species->GetScalarLookups(iPoint)[i_lookup]); + for (int i_lookup = 0; i_lookup < flamelet_config_options.n_lookups; ++i_lookup) { + if (flamelet_config_options.lookup_names[i_lookup] !="NULL") + SetVolumeOutputValue(flamelet_config_options.lookup_names[i_lookup], iPoint, Node_Species->GetScalarLookups(iPoint)[i_lookup]); } SetVolumeOutputValue("TABLE_MISSES", iPoint, Node_Species->GetTableMisses(iPoint)); - break; } + break; case SPECIES_MODEL::NONE: break; } } @@ -2601,7 +2609,7 @@ void CFlowOutput::WriteForcesBreakdown(const CConfig* config, const CSolver* flo file << "\n"; file << "-------------------------------------------------------------------------\n"; file << "| ___ _ _ ___ |\n"; - file << "| / __| | | |_ ) Release 8.1.0 \"Harrier\" |\n"; + file << "| / __| | | |_ ) Release 8.2.0 \"Harrier\" |\n"; file << "| \\__ \\ |_| |/ / |\n"; file << "| |___/\\___//___| Suite (Computational Fluid Dynamics Code) |\n"; file << "| |\n"; @@ -2611,7 +2619,7 @@ void CFlowOutput::WriteForcesBreakdown(const CConfig* config, const CSolver* flo file << "| The SU2 Project is maintained by the SU2 Foundation |\n"; file << "| (http://su2foundation.org) |\n"; file << "-------------------------------------------------------------------------\n"; - file << "| Copyright 2012-2024, SU2 Contributors |\n"; + file << "| Copyright 2012-2025, SU2 Contributors |\n"; file << "| |\n"; file << "| SU2 is free software; you can redistribute it and/or |\n"; file << "| modify it under the terms of the GNU Lesser General Public |\n"; diff --git a/SU2_CFD/src/output/CHeatOutput.cpp b/SU2_CFD/src/output/CHeatOutput.cpp index f7acc239e9b1..66d17fcb154c 100644 --- a/SU2_CFD/src/output/CHeatOutput.cpp +++ b/SU2_CFD/src/output/CHeatOutput.cpp @@ -2,14 +2,14 @@ * \file CHeatOutput.cpp * \brief Main subroutines for the heat solver output * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -72,21 +72,28 @@ CHeatOutput::CHeatOutput(CConfig *config, unsigned short nDim) : CFVMOutput(conf } +void CHeatOutput::LoadHistoryDataImpl(CConfig *config, CGeometry *geometry, CSolver **solver, COutput* output) { + + CSolver* heat_solver = solver[HEAT_SOL]; + + output->SetHistoryOutputValue("TOTAL_HEATFLUX", heat_solver->GetTotal_HeatFlux()); + output->SetHistoryOutputValue("AVG_TEMPERATURE", heat_solver->GetTotal_AvgTemperature()); + output->SetHistoryOutputValue("RMS_TEMPERATURE", log10(heat_solver->GetRes_RMS(0))); + output->SetHistoryOutputValue("MAX_TEMPERATURE", log10(heat_solver->GetRes_Max(0))); + if (config->GetMultizone_Problem()) { + output->SetHistoryOutputValue("BGS_TEMPERATURE", log10(heat_solver->GetRes_BGS(0))); + } + output->SetHistoryOutputValue("CFL_NUMBER", config->GetCFL(MESH_0)); +} + void CHeatOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CSolver **solver) { CSolver* heat_solver = solver[HEAT_SOL]; - SetHistoryOutputValue("TOTAL_HEATFLUX", heat_solver->GetTotal_HeatFlux()); - SetHistoryOutputValue("MAXIMUM_HEATFLUX", heat_solver->GetTotal_MaxHeatFlux()); - SetHistoryOutputValue("AVG_TEMPERATURE", heat_solver->GetTotal_AvgTemperature()); - SetHistoryOutputValue("RMS_TEMPERATURE", log10(heat_solver->GetRes_RMS(0))); - SetHistoryOutputValue("MAX_TEMPERATURE", log10(heat_solver->GetRes_Max(0))); - if (multiZone) - SetHistoryOutputValue("BGS_TEMPERATURE", log10(heat_solver->GetRes_BGS(0))); + LoadHistoryDataImpl(config, geometry, solver, this); SetHistoryOutputValue("LINSOL_ITER", heat_solver->GetIterLinSolver()); SetHistoryOutputValue("LINSOL_RESIDUAL", log10(heat_solver->GetResLinSolver())); - SetHistoryOutputValue("CFL_NUMBER", config->GetCFL(MESH_0)); ComputeSimpleCustomOutputs(config); @@ -94,20 +101,23 @@ void CHeatOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CSolver SetCustomAndComboObjectives(HEAT_SOL, config, solver); } +void CHeatOutput::SetHistoryOutputFieldsImpl(CConfig *config, COutput* output) { -void CHeatOutput::SetHistoryOutputFields(CConfig *config){ + output->AddHistoryOutput("RMS_TEMPERATURE", "rms[T]", ScreenOutputFormat::FIXED, "RMS_RES", "Root mean square residual of the temperature", HistoryFieldType::RESIDUAL); + output->AddHistoryOutput("MAX_TEMPERATURE", "max[T]", ScreenOutputFormat::FIXED, "MAX_RES", "Maximum residual of the temperature", HistoryFieldType::RESIDUAL); + output->AddHistoryOutput("BGS_TEMPERATURE", "bgs[T]", ScreenOutputFormat::FIXED, "BGS_RES", "Block-Gauss-Seidel residual of the temperature", HistoryFieldType::RESIDUAL); - AddHistoryOutput("LINSOL_ITER", "LinSolIter", ScreenOutputFormat::INTEGER, "LINSOL", "Number of iterations of the linear solver."); - AddHistoryOutput("LINSOL_RESIDUAL", "LinSolRes", ScreenOutputFormat::FIXED, "LINSOL", "Residual of the linear solver."); + output->AddHistoryOutput("TOTAL_HEATFLUX", "HF", ScreenOutputFormat::SCIENTIFIC, "HEAT", "Total heatflux on all surfaces defined in MARKER_MONITORING", HistoryFieldType::COEFFICIENT); + output->AddHistoryOutput("AVG_TEMPERATURE", "AvgTemp", ScreenOutputFormat::SCIENTIFIC, "HEAT", "Average temperature on all surfaces defined in MARKER_MONITORING", HistoryFieldType::COEFFICIENT); + output->AddHistoryOutput("CFL_NUMBER", "CFL number", ScreenOutputFormat::SCIENTIFIC, "CFL_NUMBER", "Current value of the CFL number"); +} - AddHistoryOutput("RMS_TEMPERATURE", "rms[T]", ScreenOutputFormat::FIXED, "RMS_RES", "Root mean square residual of the temperature", HistoryFieldType::RESIDUAL); - AddHistoryOutput("MAX_TEMPERATURE", "max[T]", ScreenOutputFormat::FIXED, "MAX_RES", "Maximum residual of the temperature", HistoryFieldType::RESIDUAL); - AddHistoryOutput("BGS_TEMPERATURE", "bgs[T]", ScreenOutputFormat::FIXED, "BGS_RES", "Block-Gauss-Seidel residual of the temperature", HistoryFieldType::RESIDUAL); +void CHeatOutput::SetHistoryOutputFields(CConfig *config) { - AddHistoryOutput("TOTAL_HEATFLUX", "HF", ScreenOutputFormat::SCIENTIFIC, "HEAT", "Total heatflux on all surfaces defined in MARKER_MONITORING", HistoryFieldType::COEFFICIENT); - AddHistoryOutput("MAXIMUM_HEATFLUX", "MaxHF", ScreenOutputFormat::SCIENTIFIC, "HEAT", "Maximum heatflux on all surfaces defined in MARKER_MONITORING", HistoryFieldType::COEFFICIENT); - AddHistoryOutput("AVG_TEMPERATURE", "AvgTemp", ScreenOutputFormat::SCIENTIFIC, "HEAT", "Average temperature on all surfaces defined in MARKER_MONITORING", HistoryFieldType::COEFFICIENT); - AddHistoryOutput("CFL_NUMBER", "CFL number", ScreenOutputFormat::SCIENTIFIC, "CFL_NUMBER", "Current value of the CFL number"); + SetHistoryOutputFieldsImpl(config, this); + + AddHistoryOutput("LINSOL_ITER", "LinSolIter", ScreenOutputFormat::INTEGER, "LINSOL", "Number of iterations of the linear solver."); + AddHistoryOutput("LINSOL_RESIDUAL", "LinSolRes", ScreenOutputFormat::FIXED, "LINSOL", "Residual of the linear solver."); AddHistoryOutput("COMBO", "ComboObj", ScreenOutputFormat::SCIENTIFIC, "COMBO", "Combined obj. function value.", HistoryFieldType::COEFFICIENT); } diff --git a/SU2_CFD/src/output/CMeshOutput.cpp b/SU2_CFD/src/output/CMeshOutput.cpp index 672c04820f7d..bbddc85e837a 100644 --- a/SU2_CFD/src/output/CMeshOutput.cpp +++ b/SU2_CFD/src/output/CMeshOutput.cpp @@ -2,14 +2,14 @@ * \file CMeshOutput.cpp * \brief Main subroutines for the heat solver output * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/output/CMultizoneOutput.cpp b/SU2_CFD/src/output/CMultizoneOutput.cpp index 67a27b18826e..b41d11969178 100644 --- a/SU2_CFD/src/output/CMultizoneOutput.cpp +++ b/SU2_CFD/src/output/CMultizoneOutput.cpp @@ -2,14 +2,14 @@ * \file CMultizoneOutput.cpp * \brief Main subroutines for multizone output * \author R. Sanchez, T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/output/CNEMOCompOutput.cpp b/SU2_CFD/src/output/CNEMOCompOutput.cpp index 7b75ac646d25..ee891e8b7d10 100644 --- a/SU2_CFD/src/output/CNEMOCompOutput.cpp +++ b/SU2_CFD/src/output/CNEMOCompOutput.cpp @@ -2,14 +2,14 @@ * \file CNEMOCompOutput.cpp * \brief Main subroutines for compressible flow output * \author W. Maier, R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -65,7 +65,7 @@ CNEMOCompOutput::CNEMOCompOutput(const CConfig *config, unsigned short nDim) : C auto notFound = requestedVolumeFields.end(); if (find(requestedVolumeFields.begin(), notFound, string("GRID_VELOCITY")) == notFound) { requestedVolumeFields.emplace_back("GRID_VELOCITY"); - nRequestedVolumeFields ++; + nRequestedVolumeFields++; } } diff --git a/SU2_CFD/src/output/COutput.cpp b/SU2_CFD/src/output/COutput.cpp index adc6f9421452..90d39de199c5 100644 --- a/SU2_CFD/src/output/COutput.cpp +++ b/SU2_CFD/src/output/COutput.cpp @@ -2,14 +2,14 @@ * \file COutput.cpp * \brief Main subroutines for output solver information * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -173,12 +173,12 @@ COutput::COutput(const CConfig *config, unsigned short ndim, bool fem_output): convergence = false; buildFieldIndexCache = false; - curInnerIter = 0; curOuterIter = 0; curTimeIter = 0; volumeDataSorter = nullptr; + volumeDataSorterCompact = nullptr; surfaceDataSorter = nullptr; headerNeeded = false; @@ -195,6 +195,7 @@ COutput::~COutput() { delete fileWritingTable; delete historyFileTable; delete volumeDataSorter; + delete volumeDataSorterCompact; delete surfaceDataSorter; } @@ -205,8 +206,7 @@ void COutput::SetHistoryOutput(CGeometry *geometry, unsigned long TimeIter, unsigned long OuterIter, unsigned long InnerIter) { - - curTimeIter = TimeIter; + curTimeIter = TimeIter; curAbsTimeIter = max(TimeIter, config->GetStartWindowIteration()) - config->GetStartWindowIteration(); curOuterIter = OuterIter; curInnerIter = InnerIter; @@ -272,7 +272,7 @@ void COutput::SetHistoryOutput(CGeometry ****geometry, CSolver *****solver, CCon void COutput::SetMultizoneHistoryOutput(COutput **output, CConfig **config, CConfig *driver_config, unsigned long TimeIter, unsigned long OuterIter){ - curTimeIter = TimeIter; + curTimeIter = TimeIter; curAbsTimeIter = max(TimeIter, driver_config->GetStartWindowIteration()) - driver_config->GetStartWindowIteration(); curOuterIter = OuterIter; @@ -343,6 +343,9 @@ void COutput::AllocateDataSorters(CConfig *config, CGeometry *geometry){ if (volumeDataSorter == nullptr) volumeDataSorter = new CFEMDataSorter(config, geometry, volumeFieldNames); + if (config->GetWrt_Restart_Compact() && volumeDataSorterCompact == nullptr) + volumeDataSorterCompact = new CFEMDataSorter(config, geometry, requiredVolumeFieldNames); + if (surfaceDataSorter == nullptr) surfaceDataSorter = new CSurfaceFEMDataSorter(config, geometry, dynamic_cast(volumeDataSorter)); @@ -352,6 +355,9 @@ void COutput::AllocateDataSorters(CConfig *config, CGeometry *geometry){ if (volumeDataSorter == nullptr) volumeDataSorter = new CFVMDataSorter(config, geometry, volumeFieldNames); + if (config->GetWrt_Restart_Compact() && volumeDataSorterCompact == nullptr) + volumeDataSorterCompact = new CFVMDataSorter(config, geometry, requiredVolumeFieldNames); + if (surfaceDataSorter == nullptr) surfaceDataSorter = new CSurfaceFVMDataSorter(config, geometry, dynamic_cast(volumeDataSorter)); @@ -373,6 +379,7 @@ void COutput::LoadData(CGeometry *geometry, CConfig *config, CSolver** solver_co /*--- Partition and sort the volume output data -- */ volumeDataSorter->SortOutputData(); + if (volumeDataSorterCompact != nullptr) volumeDataSorterCompact->SortOutputData(); } @@ -381,6 +388,9 @@ void COutput::WriteToFile(CConfig *config, CGeometry *geometry, OUTPUT_TYPE form /*--- File writer that will later be used to write the file to disk. Created below in the "switch" ---*/ CFileWriter *fileWriter = nullptr; + /*--- Set current time iter even if history file is not written ---*/ + curTimeIter = config->GetTimeIter(); + /*--- If it is still present, strip the extension (suffix) from the filename ---*/ const auto lastindex = fileName.find_last_of('.'); fileName = fileName.substr(0, lastindex); @@ -412,6 +422,10 @@ void COutput::WriteToFile(CConfig *config, CGeometry *geometry, OUTPUT_TYPE form if (!config->GetWrt_Surface_Overwrite()) filename_iter = config->GetFilename_Iter(fileName, curInnerIter, curOuterIter); + /*--- If we have compact restarts, we use only the required fields. ---*/ + if (config->GetWrt_Restart_Compact()) + surfaceDataSorter->SetRequiredFieldNames(requiredVolumeFieldNames); + surfaceDataSorter->SortConnectivity(config, geometry); surfaceDataSorter->SortOutputData(); @@ -430,6 +444,10 @@ void COutput::WriteToFile(CConfig *config, CGeometry *geometry, OUTPUT_TYPE form if (!config->GetWrt_Restart_Overwrite()) filename_iter = config->GetFilename_Iter(fileName, curInnerIter, curOuterIter); + /*--- If we have compact restarts, we use only the required fields. ---*/ + if (config->GetWrt_Restart_Compact()) + volumeDataSorter->SetRequiredFieldNames(requiredVolumeFieldNames); + LogOutputFiles("SU2 ASCII restart"); fileWriter = new CSU2FileWriter(volumeDataSorter); @@ -446,8 +464,13 @@ void COutput::WriteToFile(CConfig *config, CGeometry *geometry, OUTPUT_TYPE form filename_iter = config->GetFilename_Iter(fileName, curInnerIter, curOuterIter); LogOutputFiles("SU2 binary restart"); - fileWriter = new CSU2BinaryFileWriter(volumeDataSorter); - + if (config->GetWrt_Restart_Compact()) { + /*--- If we have compact restarts, we use only the required fields. ---*/ + volumeDataSorterCompact->SetRequiredFieldNames(requiredVolumeFieldNames); + fileWriter = new CSU2BinaryFileWriter(volumeDataSorterCompact); + } else { + fileWriter = new CSU2BinaryFileWriter(volumeDataSorter); + } break; case OUTPUT_TYPE::MESH: @@ -455,7 +478,7 @@ void COutput::WriteToFile(CConfig *config, CGeometry *geometry, OUTPUT_TYPE form extension = CSU2MeshFileWriter::fileExt; if (fileName.empty()) - fileName = volumeFilename; + fileName = config->GetFilename(volumeFilename, "", curTimeIter); if (!config->GetWrt_Volume_Overwrite()) filename_iter = config->GetFilename_Iter(fileName, curInnerIter, curOuterIter); @@ -826,6 +849,7 @@ bool COutput::SetResultFiles(CGeometry *geometry, CConfig *config, CSolver** sol /*--- Partition and sort the data --- */ volumeDataSorter->SortOutputData(); + if (volumeDataSorterCompact != nullptr) volumeDataSorterCompact->SortOutputData(); if (rank == MASTER_NODE && !isFileWrite) { fileWritingTable->SetAlign(PrintingToolbox::CTablePrinter::CENTER); @@ -1504,58 +1528,64 @@ void COutput::PreprocessVolumeOutput(CConfig *config){ SetVolumeOutputFields(config); - /*---Coordinates and solution groups must be always in the output. - * If they are not requested, add them here. ---*/ - - auto itCoord = std::find(requestedVolumeFields.begin(), - requestedVolumeFields.end(), "COORDINATES"); - if (itCoord == requestedVolumeFields.end()){ + /*--- Coordinates must be always in the output. If they are not requested, add them here. ---*/ + auto itCoord = std::find(requestedVolumeFields.begin(), requestedVolumeFields.end(), "COORDINATES"); + if (itCoord == requestedVolumeFields.end()) { requestedVolumeFields.emplace_back("COORDINATES"); nRequestedVolumeFields++; } - auto itSol = std::find(requestedVolumeFields.begin(), - requestedVolumeFields.end(), "SOLUTION"); - if (itSol == requestedVolumeFields.end()){ - requestedVolumeFields.emplace_back("SOLUTION"); - nRequestedVolumeFields++; - } - nVolumeFields = 0; + /*--- Add the solution if it was not requested for backwards compatibility, unless the COMPACT keyword was used to request exclusively the specified fields. ---*/ + auto itSol = std::find(requestedVolumeFields.begin(), requestedVolumeFields.end(), "SOLUTION"); + if (itSol == requestedVolumeFields.end()) { + auto itCompact = std::find(requestedVolumeFields.begin(), requestedVolumeFields.end(), "COMPACT"); + if (itCompact == requestedVolumeFields.end()) { + requestedVolumeFields.emplace_back("SOLUTION"); + nRequestedVolumeFields++; + } + } - string RequestedField; std::vector FoundField(nRequestedVolumeFields, false); vector FieldsToRemove; - /*--- Loop through all fields defined in the corresponding SetVolumeOutputFields(). - * If it is also defined in the config (either as part of a group or a single field), the field - * object gets an offset so that we know where to find the data in the Local_Data() array. - * Note that the default offset is -1. An index !=-1 defines this field as part of the output. ---*/ + * If it is also defined in the config (either as part of a group or a single field), the field + * object gets an offset so that we know where to find the data in the Local_Data() array. + * Note that the default offset is -1. An index !=-1 defines this field as part of the output. ---*/ + + unsigned short nVolumeFields = 0, nVolumeFieldsCompact = 0; - for (unsigned short iField_Output = 0; iField_Output < volumeOutput_List.size(); iField_Output++){ + for (size_t iField_Output = 0; iField_Output < volumeOutput_List.size(); iField_Output++) { const string &fieldReference = volumeOutput_List[iField_Output]; - if (volumeOutput_Map.count(fieldReference) > 0){ - VolumeOutputField &Field = volumeOutput_Map.at(fieldReference); + const auto it = volumeOutput_Map.find(fieldReference); + if (it != volumeOutput_Map.end()) { + VolumeOutputField &Field = it->second; - /*--- Loop through all fields specified in the config ---*/ + /*--- Loop through the minimum required fields for restarts. ---*/ - for (unsigned short iReqField = 0; iReqField < nRequestedVolumeFields; iReqField++){ + for (const auto& RequiredField : restartVolumeFields) { + if ((RequiredField == Field.outputGroup || RequiredField == fieldReference) && Field.offsetCompact == -1) { + Field.offsetCompact = nVolumeFieldsCompact++; + requiredVolumeFieldNames.push_back(Field.fieldName); + } + } - RequestedField = requestedVolumeFields[iReqField]; + /*--- Loop through all fields specified in the config. ---*/ - if (((RequestedField == Field.outputGroup) || (RequestedField == fieldReference)) && (Field.offset == -1)){ - Field.offset = nVolumeFields; - volumeFieldNames.push_back(Field.fieldName); - nVolumeFields++; + for (size_t iReqField = 0; iReqField < nRequestedVolumeFields; iReqField++) { + const auto &RequestedField = requestedVolumeFields[iReqField]; + if ((RequestedField == Field.outputGroup || RequestedField == fieldReference) && Field.offset == -1) { + Field.offset = nVolumeFields++; + volumeFieldNames.push_back(Field.fieldName); FoundField[iReqField] = true; } } } } - for (unsigned short iReqField = 0; iReqField < nRequestedVolumeFields; iReqField++){ + for (size_t iReqField = 0; iReqField < nRequestedVolumeFields; iReqField++){ if (!FoundField[iReqField]){ FieldsToRemove.push_back(requestedVolumeFields[iReqField]); } @@ -1563,7 +1593,7 @@ void COutput::PreprocessVolumeOutput(CConfig *config){ /*--- Remove fields which are not defined --- */ - for (unsigned short iReqField = 0; iReqField < FieldsToRemove.size(); iReqField++){ + for (size_t iReqField = 0; iReqField < FieldsToRemove.size(); iReqField++){ if (rank == MASTER_NODE) { if (iReqField == 0){ cout << " Info: Ignoring the following volume output fields/groups:" << endl; @@ -1585,7 +1615,6 @@ void COutput::PreprocessVolumeOutput(CConfig *config){ if (rank == MASTER_NODE){ cout <<"Volume output fields: "; for (unsigned short iReqField = 0; iReqField < nRequestedVolumeFields; iReqField++){ - RequestedField = requestedVolumeFields[iReqField]; cout << requestedVolumeFields[iReqField]; if (iReqField != nRequestedVolumeFields - 1) cout << ", "; } @@ -1602,10 +1631,11 @@ void COutput::LoadDataIntoSorter(CConfig* config, CGeometry* geometry, CSolver** /*--- Reset the offset cache and index --- */ cachePosition = 0; fieldIndexCache.clear(); + fieldIndexCacheCompact.clear(); curGetFieldIndex = 0; fieldGetIndexCache.clear(); - if (femOutput){ + if (femOutput) { /*--- Create an object of the class CMeshFEM_DG and retrieve the necessary geometrical information for the FEM DG solver. ---*/ @@ -1619,33 +1649,24 @@ void COutput::LoadDataIntoSorter(CConfig* config, CGeometry* geometry, CSolver** /*--- Access the solution by looping over the owned volume elements. ---*/ for(unsigned long l=0; lGetnPointDomain(); iPoint++) { - - /*--- Load the volume data into the data sorter. --- */ - buildFieldIndexCache = fieldIndexCache.empty(); - LoadVolumeData(config, geometry, solver, iPoint); - } /*--- Reset the offset cache and index --- */ cachePosition = 0; fieldIndexCache.clear(); + fieldIndexCacheCompact.clear(); curGetFieldIndex = 0; fieldGetIndexCache.clear(); @@ -1653,19 +1674,16 @@ void COutput::LoadDataIntoSorter(CConfig* config, CGeometry* geometry, CSolver** /*--- We only want to have surface values on solid walls ---*/ - if (config->GetSolid_Wall(iMarker)){ - for (iVertex = 0; iVertex < geometry->GetnVertex(iMarker); iVertex++){ + if (config->GetSolid_Wall(iMarker)) { + for (iVertex = 0; iVertex < geometry->GetnVertex(iMarker); iVertex++) { iPoint = geometry->vertex[iMarker][iVertex]->GetNode(); /*--- Load the surface data into the data sorter. --- */ - if(geometry->nodes->GetDomain(iPoint)){ - + if (geometry->nodes->GetDomain(iPoint)) { buildFieldIndexCache = fieldIndexCache.empty(); - LoadSurfaceData(config, geometry, solver, iPoint, iMarker, iVertex); - } } } @@ -1675,67 +1693,73 @@ void COutput::LoadDataIntoSorter(CConfig* config, CGeometry* geometry, CSolver** void COutput::SetVolumeOutputValue(const string& name, unsigned long iPoint, su2double value){ - if (buildFieldIndexCache){ - + if (buildFieldIndexCache) { /*--- Build up the offset cache to speed up subsequent * calls of this routine since the order of calls is - * the same for every value of iPoint --- */ + * the same for every value of iPoint. ---*/ - if (volumeOutput_Map.count(name) > 0){ - const short Offset = volumeOutput_Map.at(name).offset; + const auto it = volumeOutput_Map.find(name); + if (it != volumeOutput_Map.end()) { + const short Offset = it->second.offset; fieldIndexCache.push_back(Offset); - if (Offset != -1){ + if (Offset != -1) { volumeDataSorter->SetUnsortedData(iPoint, Offset, value); } + /*--- Note that the compact fields are a subset of the full fields. ---*/ + const short OffsetCompact = it->second.offsetCompact; + fieldIndexCacheCompact.push_back(OffsetCompact); + if (volumeDataSorterCompact != nullptr && OffsetCompact != -1) { + volumeDataSorterCompact->SetUnsortedData(iPoint, OffsetCompact, value); + } } else { - SU2_MPI::Error(string("Cannot find output field with name ") + name, CURRENT_FUNCTION); + SU2_MPI::Error("Cannot find output field with name " + name, CURRENT_FUNCTION); } } else { - - /*--- Use the offset cache for the access ---*/ - - const short Offset = fieldIndexCache[cachePosition++]; - if (Offset != -1){ + /*--- Use the offset caches for the access. ---*/ + const short Offset = fieldIndexCache[cachePosition]; + const short OffsetCompact = fieldIndexCacheCompact[cachePosition++]; + if (cachePosition == fieldIndexCache.size()) { + cachePosition = 0; + } + if (Offset != -1) { volumeDataSorter->SetUnsortedData(iPoint, Offset, value); } - if (cachePosition == fieldIndexCache.size()){ - cachePosition = 0; + if (volumeDataSorterCompact != nullptr && OffsetCompact != -1) { + volumeDataSorterCompact->SetUnsortedData(iPoint, OffsetCompact, value); } } } -su2double COutput::GetVolumeOutputValue(const string& name, unsigned long iPoint){ - - if (buildFieldIndexCache){ +su2double COutput::GetVolumeOutputValue(const string& name, unsigned long iPoint) { + if (buildFieldIndexCache) { /*--- Build up the offset cache to speed up subsequent * calls of this routine since the order of calls is - * the same for every value of iPoint --- */ + * the same for every value of iPoint. ---*/ - if (volumeOutput_Map.count(name) > 0){ - const short Offset = volumeOutput_Map.at(name).offset; + const auto it = volumeOutput_Map.find(name); + if (it != volumeOutput_Map.end()) { + const short Offset = it->second.offset; fieldGetIndexCache.push_back(Offset); - if (Offset != -1){ + if (Offset != -1) { return volumeDataSorter->GetUnsortedData(iPoint, Offset); } } else { - SU2_MPI::Error(string("Cannot find output field with name ") + name, CURRENT_FUNCTION); + SU2_MPI::Error("Cannot find output field with name " + name, CURRENT_FUNCTION); } } else { - - /*--- Use the offset cache for the access ---*/ + /*--- Use the offset cache for the access, ---*/ const short Offset = fieldGetIndexCache[curGetFieldIndex++]; - if (curGetFieldIndex == fieldGetIndexCache.size()){ + if (curGetFieldIndex == fieldGetIndexCache.size()) { curGetFieldIndex = 0; } - if (Offset != -1){ + if (Offset != -1) { return volumeDataSorter->GetUnsortedData(iPoint, Offset); } } - return 0.0; } @@ -1743,38 +1767,39 @@ void COutput::SetAvgVolumeOutputValue(const string& name, unsigned long iPoint, const su2double scaling = 1.0 / su2double(curAbsTimeIter + 1); - if (buildFieldIndexCache){ - + if (buildFieldIndexCache) { /*--- Build up the offset cache to speed up subsequent * calls of this routine since the order of calls is - * the same for every value of iPoint --- */ + * the same for every value of iPoint. ---*/ - if (volumeOutput_Map.count(name) > 0){ - const short Offset = volumeOutput_Map.at(name).offset; + const auto it = volumeOutput_Map.find(name); + if (it != volumeOutput_Map.end()) { + const short Offset = it->second.offset; fieldIndexCache.push_back(Offset); - if (Offset != -1){ - + /*--- This function is used for time-averaged fields and we know + * those are not part of the compact restart fields. ---*/ + fieldIndexCacheCompact.push_back(-1); + if (Offset != -1) { const su2double old_value = volumeDataSorter->GetUnsortedData(iPoint, Offset); - const su2double new_value = value * scaling + old_value *( 1.0 - scaling); + const su2double new_value = value * scaling + old_value * (1.0 - scaling); volumeDataSorter->SetUnsortedData(iPoint, Offset, new_value); } } else { - SU2_MPI::Error(string("Cannot find output field with name ") + name, CURRENT_FUNCTION); + SU2_MPI::Error("Cannot find output field with name " + name, CURRENT_FUNCTION); } } else { /*--- Use the offset cache for the access ---*/ const short Offset = fieldIndexCache[cachePosition++]; - if (Offset != -1){ - + if (Offset != -1) { const su2double old_value = volumeDataSorter->GetUnsortedData(iPoint, Offset); - const su2double new_value = value * scaling + old_value *( 1.0 - scaling); + const su2double new_value = value * scaling + old_value * (1.0 - scaling); volumeDataSorter->SetUnsortedData(iPoint, Offset, new_value); } - if (cachePosition == fieldIndexCache.size()){ + if (cachePosition == fieldIndexCache.size()) { cachePosition = 0; } } @@ -2414,7 +2439,7 @@ void COutput::PrintVolumeFields(){ } cout << "Available volume output fields for the current configuration in " << multiZoneHeaderString << ":" << endl; - cout << "Note: COORDINATES and SOLUTION groups are always in the volume output." << endl; + cout << "Note: COORDINATES are always included, and so is SOLUTION unless you add the keyword COMPACT to the list of fields." << endl; VolumeFieldTable.AddColumn("Name", NameSize); VolumeFieldTable.AddColumn("Group Name", GroupSize); VolumeFieldTable.AddColumn("Description", DescrSize); diff --git a/SU2_CFD/src/output/COutputFactory.cpp b/SU2_CFD/src/output/COutputFactory.cpp index 3c97e2a1da5f..e38b8cc25ef3 100644 --- a/SU2_CFD/src/output/COutputFactory.cpp +++ b/SU2_CFD/src/output/COutputFactory.cpp @@ -2,14 +2,14 @@ * \file COutputFactory.cpp * \brief Main subroutines for output solver information * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/output/CTurboOutput.cpp b/SU2_CFD/src/output/CTurboOutput.cpp index 0633b3673dd0..9da2a81bfda3 100644 --- a/SU2_CFD/src/output/CTurboOutput.cpp +++ b/SU2_CFD/src/output/CTurboOutput.cpp @@ -2,14 +2,14 @@ * \file CTurboOutput.cpp * \brief Source of the Turbomachinery Performance class * \author S. Vitale, N. Anand - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/output/filewriter/CCGNSFileWriter.cpp b/SU2_CFD/src/output/filewriter/CCGNSFileWriter.cpp index 0586e8ee6ad0..276cbb354784 100644 --- a/SU2_CFD/src/output/filewriter/CCGNSFileWriter.cpp +++ b/SU2_CFD/src/output/filewriter/CCGNSFileWriter.cpp @@ -2,14 +2,14 @@ * \file CCGNSFileWriter.cpp * \brief Filewriter class for CGNS format. * \author G. Baldan - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/output/filewriter/CCSVFileWriter.cpp b/SU2_CFD/src/output/filewriter/CCSVFileWriter.cpp index 9f2ce831e860..4d2762ef3a89 100644 --- a/SU2_CFD/src/output/filewriter/CCSVFileWriter.cpp +++ b/SU2_CFD/src/output/filewriter/CCSVFileWriter.cpp @@ -2,14 +2,14 @@ * \file CCSVFileWriter.cpp * \brief CSV Writer output class * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/output/filewriter/CFEMDataSorter.cpp b/SU2_CFD/src/output/filewriter/CFEMDataSorter.cpp index 3fc1f60a9b20..f811f5b6afb0 100644 --- a/SU2_CFD/src/output/filewriter/CFEMDataSorter.cpp +++ b/SU2_CFD/src/output/filewriter/CFEMDataSorter.cpp @@ -2,14 +2,14 @@ * \file CFEMDataSorter.cpp * \brief Datasorter class for FEM solvers. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/output/filewriter/CFVMDataSorter.cpp b/SU2_CFD/src/output/filewriter/CFVMDataSorter.cpp index d82d8e76e796..e65fcdcf4d14 100644 --- a/SU2_CFD/src/output/filewriter/CFVMDataSorter.cpp +++ b/SU2_CFD/src/output/filewriter/CFVMDataSorter.cpp @@ -2,14 +2,14 @@ * \file CFVMDataSorter.cpp * \brief Datasorter class for FVM solvers. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/output/filewriter/CParallelDataSorter.cpp b/SU2_CFD/src/output/filewriter/CParallelDataSorter.cpp index 0290c20b0251..7e8f44481459 100644 --- a/SU2_CFD/src/output/filewriter/CParallelDataSorter.cpp +++ b/SU2_CFD/src/output/filewriter/CParallelDataSorter.cpp @@ -2,14 +2,14 @@ * \file CParallelDataSorter.cpp * \brief Datasorter base class. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -32,7 +32,8 @@ CParallelDataSorter::CParallelDataSorter(CConfig *config, const vector &valFieldNames) : rank(SU2_MPI::GetRank()), size(SU2_MPI::GetSize()), - fieldNames(valFieldNames) { + fieldNames(valFieldNames), + requiredFieldNames(valFieldNames) { GlobalField_Counter = fieldNames.size(); diff --git a/SU2_CFD/src/output/filewriter/CParallelFileWriter.cpp b/SU2_CFD/src/output/filewriter/CParallelFileWriter.cpp index d6bb50f2e108..0607ea16cc20 100644 --- a/SU2_CFD/src/output/filewriter/CParallelFileWriter.cpp +++ b/SU2_CFD/src/output/filewriter/CParallelFileWriter.cpp @@ -2,14 +2,14 @@ * \file CParallelFileWriter.cpp * \brief Filewriter base class. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/output/filewriter/CParaviewBinaryFileWriter.cpp b/SU2_CFD/src/output/filewriter/CParaviewBinaryFileWriter.cpp index 1da72cf0307d..c12327cc8d84 100644 --- a/SU2_CFD/src/output/filewriter/CParaviewBinaryFileWriter.cpp +++ b/SU2_CFD/src/output/filewriter/CParaviewBinaryFileWriter.cpp @@ -2,14 +2,14 @@ * \file CParaviewBinaryFileWriter.cpp * \brief Filewriter class for Paraview binary format. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/output/filewriter/CParaviewFileWriter.cpp b/SU2_CFD/src/output/filewriter/CParaviewFileWriter.cpp index a80e16aeddb9..34c9677f0363 100644 --- a/SU2_CFD/src/output/filewriter/CParaviewFileWriter.cpp +++ b/SU2_CFD/src/output/filewriter/CParaviewFileWriter.cpp @@ -2,14 +2,14 @@ * \file CParaviewFileWriter.cpp * \brief Filewriter class for Paraview ASCII format. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/output/filewriter/CParaviewVTMFileWriter.cpp b/SU2_CFD/src/output/filewriter/CParaviewVTMFileWriter.cpp index cd5eccaae7ac..64f7e62ec3e9 100644 --- a/SU2_CFD/src/output/filewriter/CParaviewVTMFileWriter.cpp +++ b/SU2_CFD/src/output/filewriter/CParaviewVTMFileWriter.cpp @@ -2,14 +2,14 @@ * \file CParaviewVTMFileWriter.cpp * \brief Filewriter class for Paraview binary format. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/output/filewriter/CParaviewXMLFileWriter.cpp b/SU2_CFD/src/output/filewriter/CParaviewXMLFileWriter.cpp index 0897cae3f164..15c320dbeef0 100644 --- a/SU2_CFD/src/output/filewriter/CParaviewXMLFileWriter.cpp +++ b/SU2_CFD/src/output/filewriter/CParaviewXMLFileWriter.cpp @@ -2,14 +2,14 @@ * \file CParaviewXMLFileWriter.cpp * \brief Filewriter class for Paraview binary format. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/output/filewriter/CSTLFileWriter.cpp b/SU2_CFD/src/output/filewriter/CSTLFileWriter.cpp index b3381c7e775f..e2c39b6cf448 100644 --- a/SU2_CFD/src/output/filewriter/CSTLFileWriter.cpp +++ b/SU2_CFD/src/output/filewriter/CSTLFileWriter.cpp @@ -2,14 +2,14 @@ * \file CSTLFileWriter.cpp * \brief STL Writer output class * \author T. Kattmann, T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/output/filewriter/CSU2BinaryFileWriter.cpp b/SU2_CFD/src/output/filewriter/CSU2BinaryFileWriter.cpp index 8e7a869f1bfa..040032ad0d8d 100644 --- a/SU2_CFD/src/output/filewriter/CSU2BinaryFileWriter.cpp +++ b/SU2_CFD/src/output/filewriter/CSU2BinaryFileWriter.cpp @@ -2,14 +2,14 @@ * \file CSU2BinaryFileWriter.cpp * \brief Filewriter class SU2 native binary format. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -41,7 +41,7 @@ void CSU2BinaryFileWriter::WriteData(string val_filename){ unsigned short iVar; - const vector& fieldNames = dataSorter->GetFieldNames(); + const vector& fieldNames = dataSorter->GetRequiredFieldNames(); unsigned short nVar = fieldNames.size(); unsigned long nParallel_Poin = dataSorter->GetnPoints(); unsigned long nPoint_Global = dataSorter->GetnPointsGlobal(); diff --git a/SU2_CFD/src/output/filewriter/CSU2FileWriter.cpp b/SU2_CFD/src/output/filewriter/CSU2FileWriter.cpp index 4c04cf0e70d7..0ad35000da1a 100644 --- a/SU2_CFD/src/output/filewriter/CSU2FileWriter.cpp +++ b/SU2_CFD/src/output/filewriter/CSU2FileWriter.cpp @@ -2,14 +2,14 @@ * \file CSU2FileWriter.cpp * \brief Filewriter class SU2 native ASCII (CSV) format. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -35,7 +35,8 @@ CSU2FileWriter::CSU2FileWriter(CParallelDataSorter *valDataSorter) : void CSU2FileWriter::WriteData(string val_filename){ ofstream restart_file; - const vector fieldNames = dataSorter->GetFieldNames(); + const vector fieldNames = dataSorter->GetRequiredFieldNames(); + /*--- We append the pre-defined suffix (extension) to the filename (prefix) ---*/ val_filename.append(fileExt); diff --git a/SU2_CFD/src/output/filewriter/CSU2MeshFileWriter.cpp b/SU2_CFD/src/output/filewriter/CSU2MeshFileWriter.cpp index 241df16c88bd..5a497bf5d683 100644 --- a/SU2_CFD/src/output/filewriter/CSU2MeshFileWriter.cpp +++ b/SU2_CFD/src/output/filewriter/CSU2MeshFileWriter.cpp @@ -2,14 +2,14 @@ * \file CSU2MeshFileWriter.cpp * \brief Filewriter class SU2 native mesh format. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/output/filewriter/CSurfaceFEMDataSorter.cpp b/SU2_CFD/src/output/filewriter/CSurfaceFEMDataSorter.cpp index 42dacb0ff151..a51787cc0f18 100644 --- a/SU2_CFD/src/output/filewriter/CSurfaceFEMDataSorter.cpp +++ b/SU2_CFD/src/output/filewriter/CSurfaceFEMDataSorter.cpp @@ -2,14 +2,14 @@ * \file CSurfaceFEMDataSorter.cpp * \brief Datasorter for FEM surfaces. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/output/filewriter/CSurfaceFVMDataSorter.cpp b/SU2_CFD/src/output/filewriter/CSurfaceFVMDataSorter.cpp index 5acf62ec4e8d..963bdbdf107b 100644 --- a/SU2_CFD/src/output/filewriter/CSurfaceFVMDataSorter.cpp +++ b/SU2_CFD/src/output/filewriter/CSurfaceFVMDataSorter.cpp @@ -2,14 +2,14 @@ * \file CSurfaceFVMDataSorter.cpp * \brief Datasorter for FVM surfaces. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/output/filewriter/CTecplotBinaryFileWriter.cpp b/SU2_CFD/src/output/filewriter/CTecplotBinaryFileWriter.cpp index 11366fb565ae..d0a3b1b6f753 100644 --- a/SU2_CFD/src/output/filewriter/CTecplotBinaryFileWriter.cpp +++ b/SU2_CFD/src/output/filewriter/CTecplotBinaryFileWriter.cpp @@ -2,14 +2,14 @@ * \file CTecplotBinaryFileWriter.cpp * \brief Filewriter class for Tecplot binary format. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/output/filewriter/CTecplotFileWriter.cpp b/SU2_CFD/src/output/filewriter/CTecplotFileWriter.cpp index 0f7813a48725..7928d792db50 100644 --- a/SU2_CFD/src/output/filewriter/CTecplotFileWriter.cpp +++ b/SU2_CFD/src/output/filewriter/CTecplotFileWriter.cpp @@ -2,14 +2,14 @@ * \file CTecplotFileWriter.cpp * \brief Filewriter class for Tecplot ASCII format. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/output/tools/CWindowingTools.cpp b/SU2_CFD/src/output/tools/CWindowingTools.cpp index be2a9b946850..46be258c45d5 100644 --- a/SU2_CFD/src/output/tools/CWindowingTools.cpp +++ b/SU2_CFD/src/output/tools/CWindowingTools.cpp @@ -2,14 +2,14 @@ * \file signal_processing_toolbox.cpp * \brief Signal processing tools * \author S. Schotthöfer - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/python_wrapper_structure.cpp b/SU2_CFD/src/python_wrapper_structure.cpp index 2a148a346d94..95e81111904e 100644 --- a/SU2_CFD/src/python_wrapper_structure.cpp +++ b/SU2_CFD/src/python_wrapper_structure.cpp @@ -2,14 +2,14 @@ * \file python_wrapper_structure.cpp * \brief Driver subroutines that are used by the Python wrapper. Those routines are usually called from an external Python environment. * \author D. Thomas - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/solvers/CAdjEulerSolver.cpp b/SU2_CFD/src/solvers/CAdjEulerSolver.cpp index db5f22047700..0b40f3edf134 100644 --- a/SU2_CFD/src/solvers/CAdjEulerSolver.cpp +++ b/SU2_CFD/src/solvers/CAdjEulerSolver.cpp @@ -2,14 +2,14 @@ * \file CAdjEulerSolver.cpp * \brief Main subroutines for solving Euler adjoint problems. * \author F. Palacios, T. Economon, H. Kline - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/solvers/CAdjNSSolver.cpp b/SU2_CFD/src/solvers/CAdjNSSolver.cpp index 54e6c717b270..7c7956b8ecab 100644 --- a/SU2_CFD/src/solvers/CAdjNSSolver.cpp +++ b/SU2_CFD/src/solvers/CAdjNSSolver.cpp @@ -2,14 +2,14 @@ * \file CAdjNSSolver.cpp * \brief Main subroutines for solving Navier-Stokes adjoint problems. * \author F. Palacios, T. Economon, H. Kline - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/solvers/CAdjTurbSolver.cpp b/SU2_CFD/src/solvers/CAdjTurbSolver.cpp index eeb81c4354f5..c2d6071280d4 100644 --- a/SU2_CFD/src/solvers/CAdjTurbSolver.cpp +++ b/SU2_CFD/src/solvers/CAdjTurbSolver.cpp @@ -2,14 +2,14 @@ * \file CAdjTurbVariable.cpp * \brief Main subroutines for solving turbulent adjoint problems. * \author F. Palacios, A. Bueno, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/solvers/CBaselineSolver.cpp b/SU2_CFD/src/solvers/CBaselineSolver.cpp index 0a83d7fd6085..ff093d957b08 100644 --- a/SU2_CFD/src/solvers/CBaselineSolver.cpp +++ b/SU2_CFD/src/solvers/CBaselineSolver.cpp @@ -2,14 +2,14 @@ * \file CBaselineSolver.cpp * \brief Main subroutines for CBaselineSolver class. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/solvers/CBaselineSolver_FEM.cpp b/SU2_CFD/src/solvers/CBaselineSolver_FEM.cpp index f9df6099ee67..d6e08e4d3ad2 100644 --- a/SU2_CFD/src/solvers/CBaselineSolver_FEM.cpp +++ b/SU2_CFD/src/solvers/CBaselineSolver_FEM.cpp @@ -2,14 +2,14 @@ * \file CBaselineSolver_FEM.cpp * \brief Main subroutines for CBaselineSolver_FEM class. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/solvers/CDiscAdjFEASolver.cpp b/SU2_CFD/src/solvers/CDiscAdjFEASolver.cpp index 81952b4ea613..a5a874735224 100644 --- a/SU2_CFD/src/solvers/CDiscAdjFEASolver.cpp +++ b/SU2_CFD/src/solvers/CDiscAdjFEASolver.cpp @@ -2,14 +2,14 @@ * \file CDiscAdjFEASolver.cpp * \brief Main subroutines for solving adjoint FEM elasticity problems. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/solvers/CDiscAdjMeshSolver.cpp b/SU2_CFD/src/solvers/CDiscAdjMeshSolver.cpp index 87b4df1a3c36..040e885b3d16 100644 --- a/SU2_CFD/src/solvers/CDiscAdjMeshSolver.cpp +++ b/SU2_CFD/src/solvers/CDiscAdjMeshSolver.cpp @@ -2,14 +2,14 @@ * \file CDiscAdjMeshSolver.cpp * \brief Main subroutines for solving the discrete adjoint mesh problem. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/solvers/CDiscAdjSolver.cpp b/SU2_CFD/src/solvers/CDiscAdjSolver.cpp index eada9828e352..7a7e172a84d1 100644 --- a/SU2_CFD/src/solvers/CDiscAdjSolver.cpp +++ b/SU2_CFD/src/solvers/CDiscAdjSolver.cpp @@ -2,14 +2,14 @@ * \file CDiscAdjSolver.cpp * \brief Main subroutines for solving the discrete adjoint problem. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -162,6 +162,7 @@ void CDiscAdjSolver::RegisterSolution(CGeometry *geometry, CConfig *config) { /*--- Boolean true indicates that an input is registered ---*/ direct_solver->GetNodes()->RegisterSolution(true); + /*--- Register quantities that are no solver variables but further inputs/outputs of the (outer) iteration. ---*/ direct_solver->RegisterSolutionExtra(true, config); if (time_n_needed) diff --git a/SU2_CFD/src/solvers/CEulerSolver.cpp b/SU2_CFD/src/solvers/CEulerSolver.cpp index 489bacb8a49c..15f5a227c94a 100644 --- a/SU2_CFD/src/solvers/CEulerSolver.cpp +++ b/SU2_CFD/src/solvers/CEulerSolver.cpp @@ -2,14 +2,14 @@ * \file CEulerSolver.cpp * \brief Main subroutines for solving Finite-Volume Euler flow problems. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -64,6 +64,7 @@ CEulerSolver::CEulerSolver(CGeometry *geometry, CConfig *config, (config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_2ND); const bool time_stepping = (config->GetTime_Marching() == TIME_MARCHING::TIME_STEPPING); const bool adjoint = config->GetContinuous_Adjoint() || config->GetDiscrete_Adjoint(); + const bool centered = config->GetKind_ConvNumScheme_Flow() == SPACE_CENTERED; int Unst_RestartIter = 0; unsigned long iPoint, iMarker, counter_local = 0, counter_global = 0; @@ -116,9 +117,12 @@ CEulerSolver::CEulerSolver(CGeometry *geometry, CConfig *config, nDim = geometry->GetnDim(); - nVar = nDim+2; - nPrimVar = nDim+9; nPrimVarGrad = nDim+4; - nSecondaryVar = nSecVar; nSecondaryVarGrad = 2; + nVar = nDim + 2; + nPrimVar = nDim + 9; + /*--- Centered schemes only need gradients for viscous fluxes (T and v). ---*/ + nPrimVarGrad = nDim + (centered && !config->GetContinuous_Adjoint() ? 1 : 4); + nSecondaryVar = nSecVar; + nSecondaryVarGrad = 2; /*--- Initialize nVarGrad for deallocation ---*/ @@ -4111,7 +4115,7 @@ void CEulerSolver::SetActDisk_BEM_VLAD(CGeometry *geometry, CSolver **solver_con * Institution: Computational and Theoretical Fluid Dynamics (CTFD), * CSIR - National Aerospace Laboratories, Bangalore * Academy of Scientific and Innovative Research, Ghaziabad - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * First release date : September 26 2023 * modified on: * @@ -6878,7 +6882,6 @@ void CEulerSolver::BC_Inlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { unsigned short iDim; - unsigned long iVertex, iPoint; su2double P_Total, T_Total, Velocity[MAXNDIM], Velocity2, H_Total, Temperature, Riemann, Pressure, Density, Energy, Flow_Dir[MAXNDIM], Mach2, SoundSpeed2, SoundSpeed_Total2, Vel_Mag, alpha, aa, bb, cc, dd, Area, UnitNormal[MAXNDIM], Normal[MAXNDIM]; @@ -6887,290 +6890,259 @@ void CEulerSolver::BC_Inlet(CGeometry *geometry, CSolver **solver_container, const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); const su2double Two_Gamma_M1 = 2.0 / Gamma_Minus_One; const su2double Gas_Constant = config->GetGas_ConstantND(); - const auto Kind_Inlet = config->GetKind_Inlet(); + const auto Kind_Inlet_Cfg = config->GetKind_Inlet(); const auto Marker_Tag = config->GetMarker_All_TagBound(val_marker); const bool tkeNeeded = (config->GetKind_Turb_Model() == TURB_MODEL::SST); /*--- Loop over all the vertices on this boundary marker ---*/ SU2_OMP_FOR_DYN(OMP_MIN_SIZE) - for (iVertex = 0; iVertex < geometry->nVertex[val_marker]; iVertex++) { + for (auto iVertex = 0ul; iVertex < geometry->nVertex[val_marker]; iVertex++) { /*--- Allocate the value at the inlet ---*/ V_inlet = GetCharacPrimVar(val_marker, iVertex); - iPoint = geometry->vertex[val_marker][iVertex]->GetNode(); + 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)) { - - /*--- Normal vector for this vertex (negate for outward convention) ---*/ + if (!geometry->nodes->GetDomain(iPoint)) continue; - geometry->vertex[val_marker][iVertex]->GetNormal(Normal); - for (iDim = 0; iDim < nDim; iDim++) Normal[iDim] = -Normal[iDim]; - conv_numerics->SetNormal(Normal); + /*--- Normal vector for this vertex (negate for outward convention) ---*/ - Area = GeometryToolbox::Norm(nDim, Normal); - for (iDim = 0; iDim < nDim; iDim++) - UnitNormal[iDim] = Normal[iDim]/Area; + geometry->vertex[val_marker][iVertex]->GetNormal(Normal); + for (iDim = 0; iDim < nDim; iDim++) Normal[iDim] = -Normal[iDim]; + conv_numerics->SetNormal(Normal); - /*--- Retrieve solution at this boundary node ---*/ + Area = GeometryToolbox::Norm(nDim, Normal); + for (iDim = 0; iDim < nDim; iDim++) + UnitNormal[iDim] = Normal[iDim]/Area; - V_domain = nodes->GetPrimitive(iPoint); + /*--- Retrieve solution at this boundary node ---*/ - /*--- Build the fictitious intlet state based on characteristics ---*/ + V_domain = nodes->GetPrimitive(iPoint); + /*--- On intersections with viscous walls we set the total conditions equal to + the static conditions of the wall point. This avoids a jump in pressure, + energy, etc. at this location. ---*/ - /*--- Subsonic inflow: there is one outgoing characteristic (u-c), - therefore we can specify all but one state variable at the inlet. - The outgoing Riemann invariant provides the final piece of info. - Adapted from an original implementation in the Stanford University - multi-block (SUmb) solver in the routine bcSubsonicInflow.f90 - written by Edwin van der Weide, last modified 04-20-2009. ---*/ + const auto Kind_Inlet = geometry->nodes->GetViscousBoundary(iPoint) + ? INLET_TYPE::TOTAL_CONDITIONS : Kind_Inlet_Cfg; - switch (Kind_Inlet) { + /*--- Build the fictitious inlet state based on characteristics ---*/ - /*--- Total properties have been specified at the inlet. ---*/ + /*--- Subsonic inflow: there is one outgoing characteristic (u-c), + therefore we can specify all but one state variable at the inlet. + The outgoing Riemann invariant provides the final piece of info. + Adapted from an original implementation in the Stanford University + multi-block (SUmb) solver in the routine bcSubsonicInflow.f90 + written by Edwin van der Weide, last modified 04-20-2009. ---*/ - case INLET_TYPE::TOTAL_CONDITIONS: { + switch (Kind_Inlet) { - /*--- Retrieve the specified total conditions for this inlet. ---*/ + /*--- Total properties have been specified at the inlet. ---*/ - P_Total = Inlet_Ptotal[val_marker][iVertex]; - T_Total = Inlet_Ttotal[val_marker][iVertex]; - const su2double* dir = Inlet_FlowDir[val_marker][iVertex]; - const su2double mag = GeometryToolbox::Norm(nDim, dir); - for (iDim = 0; iDim < nDim; iDim++) { - Flow_Dir[iDim] = dir[iDim] / mag; - } + case INLET_TYPE::TOTAL_CONDITIONS: { - /*--- Non-dim. the inputs if necessary. ---*/ + /*--- Retrieve the specified total conditions for this inlet. ---*/ - P_Total /= config->GetPressure_Ref(); - T_Total /= config->GetTemperature_Ref(); + P_Total = Inlet_Ptotal[val_marker][iVertex]; + T_Total = Inlet_Ttotal[val_marker][iVertex]; + const su2double* dir = Inlet_FlowDir[val_marker][iVertex]; + const su2double mag = GeometryToolbox::Norm(nDim, dir); + for (iDim = 0; iDim < nDim; iDim++) { + Flow_Dir[iDim] = dir[iDim] / mag; + } - /*--- Store primitives and set some variables for clarity. ---*/ + /*--- Non-dim. the inputs if necessary. ---*/ - Density = V_domain[nDim+2]; - Velocity2 = 0.0; - for (iDim = 0; iDim < nDim; iDim++) { - Velocity[iDim] = V_domain[iDim+1]; - Velocity2 += Velocity[iDim]*Velocity[iDim]; - } - Energy = V_domain[nDim+3] - V_domain[nDim+1]/V_domain[nDim+2]; - Pressure = V_domain[nDim+1]; - H_Total = (Gamma*Gas_Constant/Gamma_Minus_One)*T_Total; - SoundSpeed2 = Gamma*Pressure/Density; + P_Total /= config->GetPressure_Ref(); + T_Total /= config->GetTemperature_Ref(); - /*--- Compute the acoustic Riemann invariant that is extrapolated - from the domain interior. ---*/ + if (geometry->nodes->GetViscousBoundary(iPoint)) { + P_Total = nodes->GetPressure(iPoint); + T_Total = nodes->GetTemperature(iPoint); + } - Riemann = 2.0*sqrt(SoundSpeed2)/Gamma_Minus_One; - for (iDim = 0; iDim < nDim; iDim++) - Riemann += Velocity[iDim]*UnitNormal[iDim]; + /*--- Store primitives and set some variables for clarity. ---*/ - /*--- Total speed of sound ---*/ + Density = V_domain[nDim+2]; + Velocity2 = 0.0; + for (iDim = 0; iDim < nDim; iDim++) { + Velocity[iDim] = V_domain[iDim+1]; + Velocity2 += Velocity[iDim]*Velocity[iDim]; + } + Energy = V_domain[nDim+3] - V_domain[nDim+1]/V_domain[nDim+2]; + Pressure = V_domain[nDim+1]; + H_Total = (Gamma*Gas_Constant/Gamma_Minus_One)*T_Total; + SoundSpeed2 = Gamma*Pressure/Density; - SoundSpeed_Total2 = Gamma_Minus_One*(H_Total - (Energy + Pressure/Density)+0.5*Velocity2) + SoundSpeed2; + /*--- Compute the acoustic Riemann invariant that is extrapolated + from the domain interior. ---*/ - /*--- Dot product of normal and flow direction. This should - be negative due to outward facing boundary normal convention. ---*/ + Riemann = 2.0*sqrt(SoundSpeed2)/Gamma_Minus_One; + for (iDim = 0; iDim < nDim; iDim++) + Riemann += Velocity[iDim]*UnitNormal[iDim]; - alpha = 0.0; - for (iDim = 0; iDim < nDim; iDim++) - alpha += UnitNormal[iDim]*Flow_Dir[iDim]; + /*--- Total speed of sound ---*/ - /*--- Coefficients in the quadratic equation for the velocity ---*/ + SoundSpeed_Total2 = Gamma_Minus_One*(H_Total - (Energy + Pressure/Density)+0.5*Velocity2) + SoundSpeed2; - aa = 1.0 + 0.5*Gamma_Minus_One*alpha*alpha; - bb = -1.0*Gamma_Minus_One*alpha*Riemann; - cc = 0.5*Gamma_Minus_One*Riemann*Riemann - -2.0*SoundSpeed_Total2/Gamma_Minus_One; + /*--- Dot product of normal and flow direction. This should + be negative due to outward facing boundary normal convention. ---*/ - /*--- Solve quadratic equation for velocity magnitude. Value must - be positive, so the choice of root is clear. ---*/ + alpha = 0.0; + for (iDim = 0; iDim < nDim; iDim++) + alpha += UnitNormal[iDim]*Flow_Dir[iDim]; - dd = bb*bb - 4.0*aa*cc; - dd = sqrt(max(0.0, dd)); - Vel_Mag = (-bb + dd)/(2.0*aa); - Vel_Mag = max(0.0, Vel_Mag); - Velocity2 = Vel_Mag*Vel_Mag; + /*--- Coefficients in the quadratic equation for the velocity ---*/ - /*--- Compute speed of sound from total speed of sound eqn. ---*/ + aa = 1.0 + 0.5*Gamma_Minus_One*alpha*alpha; + bb = -1.0*Gamma_Minus_One*alpha*Riemann; + cc = 0.5*Gamma_Minus_One*Riemann*Riemann + -2.0*SoundSpeed_Total2/Gamma_Minus_One; - SoundSpeed2 = SoundSpeed_Total2 - 0.5*Gamma_Minus_One*Velocity2; + /*--- Solve quadratic equation for velocity magnitude. Value must + be positive, so the choice of root is clear. ---*/ - /*--- Mach squared (cut between 0-1), use to adapt velocity ---*/ + dd = bb*bb - 4.0*aa*cc; + dd = sqrt(max(0.0, dd)); + Vel_Mag = (-bb + dd)/(2.0*aa); + Vel_Mag = max(0.0, Vel_Mag); + Velocity2 = Vel_Mag*Vel_Mag; - Mach2 = Velocity2/SoundSpeed2; - Mach2 = min(1.0, Mach2); - Velocity2 = Mach2*SoundSpeed2; - Vel_Mag = sqrt(Velocity2); - SoundSpeed2 = SoundSpeed_Total2 - 0.5*Gamma_Minus_One*Velocity2; + /*--- Compute speed of sound from total speed of sound eqn. ---*/ - /*--- Compute new velocity vector at the inlet ---*/ + SoundSpeed2 = SoundSpeed_Total2 - 0.5*Gamma_Minus_One*Velocity2; - for (iDim = 0; iDim < nDim; iDim++) - Velocity[iDim] = Vel_Mag*Flow_Dir[iDim]; + /*--- Mach squared (cut between 0-1), use to adapt velocity ---*/ - /*--- Static temperature from the speed of sound relation ---*/ + Mach2 = Velocity2/SoundSpeed2; + Mach2 = min(1.0, Mach2); + Velocity2 = Mach2*SoundSpeed2; + Vel_Mag = sqrt(Velocity2); + SoundSpeed2 = SoundSpeed_Total2 - 0.5*Gamma_Minus_One*Velocity2; - Temperature = SoundSpeed2/(Gamma*Gas_Constant); + /*--- Compute new velocity vector at the inlet ---*/ - /*--- Static pressure using isentropic relation at a point ---*/ + for (iDim = 0; iDim < nDim; iDim++) + Velocity[iDim] = Vel_Mag*Flow_Dir[iDim]; - Pressure = P_Total*pow((Temperature/T_Total), Gamma/Gamma_Minus_One); + /*--- Static temperature from the speed of sound relation ---*/ - /*--- Density at the inlet from the gas law ---*/ + Temperature = SoundSpeed2/(Gamma*Gas_Constant); - Density = Pressure/(Gas_Constant*Temperature); + /*--- Static pressure using isentropic relation at a point ---*/ - /*--- Using pressure, density, & velocity, compute the energy ---*/ + Pressure = P_Total*pow((Temperature/T_Total), Gamma/Gamma_Minus_One); - Energy = Pressure/(Density*Gamma_Minus_One) + 0.5*Velocity2; - if (tkeNeeded) Energy += GetTke_Inf(); + /*--- Density at the inlet from the gas law ---*/ - /*--- Primitive variables, using the derived quantities ---*/ + Density = Pressure/(Gas_Constant*Temperature); - V_inlet[0] = Temperature; - for (iDim = 0; iDim < nDim; iDim++) - V_inlet[iDim+1] = Velocity[iDim]; - V_inlet[nDim+1] = Pressure; - V_inlet[nDim+2] = Density; - V_inlet[nDim+3] = Energy + Pressure/Density; + /*--- Using pressure, density, & velocity, compute the energy ---*/ - break; - } - /*--- Mass flow has been specified at the inlet. ---*/ + Energy = Pressure/(Density*Gamma_Minus_One) + 0.5*Velocity2; + if (tkeNeeded) Energy += GetTke_Inf(); - case INLET_TYPE::MASS_FLOW: { + /*--- Primitive variables, using the derived quantities ---*/ - /*--- Retrieve the specified mass flow for the inlet. ---*/ + V_inlet[0] = Temperature; + for (iDim = 0; iDim < nDim; iDim++) + V_inlet[iDim+1] = Velocity[iDim]; + V_inlet[nDim+1] = Pressure; + V_inlet[nDim+2] = Density; + V_inlet[nDim+3] = Energy + Pressure/Density; - Density = Inlet_Ttotal[val_marker][iVertex]; - Vel_Mag = Inlet_Ptotal[val_marker][iVertex]; - const su2double* dir = Inlet_FlowDir[val_marker][iVertex]; - const su2double mag = GeometryToolbox::Norm(nDim, dir); - for (iDim = 0; iDim < nDim; iDim++) { - Flow_Dir[iDim] = dir[iDim] / mag; - } + break; + } + /*--- Mass flow has been specified at the inlet. ---*/ - /*--- Non-dim. the inputs if necessary. ---*/ + case INLET_TYPE::MASS_FLOW: { - Density /= config->GetDensity_Ref(); - Vel_Mag /= config->GetVelocity_Ref(); + /*--- Retrieve the specified mass flow for the inlet. ---*/ - /*--- Get primitives from current inlet state. ---*/ + Density = Inlet_Ttotal[val_marker][iVertex]; + Vel_Mag = Inlet_Ptotal[val_marker][iVertex]; + const su2double* dir = Inlet_FlowDir[val_marker][iVertex]; + const su2double mag = GeometryToolbox::Norm(nDim, dir); + for (iDim = 0; iDim < nDim; iDim++) { + Flow_Dir[iDim] = dir[iDim] / mag; + } - for (iDim = 0; iDim < nDim; iDim++) - Velocity[iDim] = nodes->GetVelocity(iPoint,iDim); - Pressure = nodes->GetPressure(iPoint); - SoundSpeed2 = Gamma*Pressure/V_domain[nDim+2]; + /*--- Non-dim. the inputs if necessary. ---*/ - /*--- Compute the acoustic Riemann invariant that is extrapolated - from the domain interior. ---*/ + Density /= config->GetDensity_Ref(); + Vel_Mag /= config->GetVelocity_Ref(); - Riemann = Two_Gamma_M1*sqrt(SoundSpeed2); - for (iDim = 0; iDim < nDim; iDim++) - Riemann += Velocity[iDim]*UnitNormal[iDim]; + /*--- Get primitives from current inlet state. ---*/ - /*--- Speed of sound squared for fictitious inlet state ---*/ + for (iDim = 0; iDim < nDim; iDim++) + Velocity[iDim] = nodes->GetVelocity(iPoint,iDim); + Pressure = nodes->GetPressure(iPoint); + SoundSpeed2 = Gamma*Pressure/V_domain[nDim+2]; - SoundSpeed2 = Riemann; - for (iDim = 0; iDim < nDim; iDim++) - SoundSpeed2 -= Vel_Mag*Flow_Dir[iDim]*UnitNormal[iDim]; + /*--- Compute the acoustic Riemann invariant that is extrapolated + from the domain interior. ---*/ - SoundSpeed2 = max(0.0,0.5*Gamma_Minus_One*SoundSpeed2); - SoundSpeed2 = SoundSpeed2*SoundSpeed2; + Riemann = Two_Gamma_M1*sqrt(SoundSpeed2); + for (iDim = 0; iDim < nDim; iDim++) + Riemann += Velocity[iDim]*UnitNormal[iDim]; - /*--- Pressure for the fictitious inlet state ---*/ + /*--- Speed of sound squared for fictitious inlet state ---*/ - Pressure = SoundSpeed2*Density/Gamma; + SoundSpeed2 = Riemann; + for (iDim = 0; iDim < nDim; iDim++) + SoundSpeed2 -= Vel_Mag*Flow_Dir[iDim]*UnitNormal[iDim]; - /*--- Energy for the fictitious inlet state ---*/ + SoundSpeed2 = max(0.0,0.5*Gamma_Minus_One*SoundSpeed2); + SoundSpeed2 = SoundSpeed2*SoundSpeed2; - Energy = Pressure/(Density*Gamma_Minus_One) + 0.5*Vel_Mag*Vel_Mag; - if (tkeNeeded) Energy += GetTke_Inf(); + /*--- Pressure for the fictitious inlet state ---*/ - /*--- Primitive variables, using the derived quantities ---*/ + Pressure = SoundSpeed2*Density/Gamma; - V_inlet[0] = Pressure / ( Gas_Constant * Density); - for (iDim = 0; iDim < nDim; iDim++) - V_inlet[iDim+1] = Vel_Mag*Flow_Dir[iDim]; - V_inlet[nDim+1] = Pressure; - V_inlet[nDim+2] = Density; - V_inlet[nDim+3] = Energy + Pressure/Density; + /*--- Energy for the fictitious inlet state ---*/ - break; - } - default: - SU2_MPI::Error("Unsupported INLET_TYPE.", CURRENT_FUNCTION); - break; - } + Energy = Pressure/(Density*Gamma_Minus_One) + 0.5*Vel_Mag*Vel_Mag; + if (tkeNeeded) Energy += GetTke_Inf(); - /*--- Set various quantities in the solver class ---*/ + /*--- Primitive variables, using the derived quantities ---*/ + Temperature = Pressure / ( Gas_Constant * Density); + V_inlet[0] = Temperature; + for (iDim = 0; iDim < nDim; iDim++) + V_inlet[iDim+1] = Vel_Mag*Flow_Dir[iDim]; + V_inlet[nDim+1] = Pressure; + V_inlet[nDim+2] = Density; + V_inlet[nDim+3] = Energy + Pressure/Density; - conv_numerics->SetPrimitive(V_domain, V_inlet); + break; + } + default: + SU2_MPI::Error("Unsupported INLET_TYPE.", CURRENT_FUNCTION); + break; + } - if (dynamic_grid) - conv_numerics->SetGridVel(geometry->nodes->GetGridVel(iPoint), geometry->nodes->GetGridVel(iPoint)); + /*--- Set various quantities in the solver class ---*/ - /*--- Compute the residual using an upwind scheme ---*/ + conv_numerics->SetPrimitive(V_domain, V_inlet); - auto residual = conv_numerics->ComputeResidual(config); + if (dynamic_grid) + conv_numerics->SetGridVel(geometry->nodes->GetGridVel(iPoint), geometry->nodes->GetGridVel(iPoint)); - /*--- Update residual value ---*/ + /*--- Compute the residual using an upwind scheme ---*/ - LinSysRes.AddBlock(iPoint, residual); + auto residual = conv_numerics->ComputeResidual(config); - /*--- Jacobian contribution for implicit integration ---*/ + /*--- Update residual value ---*/ - if (implicit) - Jacobian.AddBlock2Diag(iPoint, residual.jacobian_i); + LinSysRes.AddBlock(iPoint, residual); -// /*--- Viscous contribution, commented out because serious convergence problems ---*/ -// -// if (viscous) { -// -// /*--- Set laminar and eddy viscosity at the infinity ---*/ -// -// V_inlet[nDim+5] = nodes->GetLaminarViscosity(iPoint); -// V_inlet[nDim+6] = nodes->GetEddyViscosity(iPoint); -// -// /*--- Set the normal vector and the coordinates ---*/ -// -// visc_numerics->SetNormal(Normal); -// su2double Coord_Reflected[MAXNDIM]; -// GeometryToolbox::PointPointReflect(nDim, geometry->nodes->GetCoord(Point_Normal), -// geometry->nodes->GetCoord(iPoint), Coord_Reflected); -// visc_numerics->SetCoord(geometry->nodes->GetCoord(iPoint), Coord_Reflected); -// -// /*--- Primitive variables, and gradient ---*/ -// -// visc_numerics->SetPrimitive(V_domain, V_inlet); -// visc_numerics->SetPrimVarGradient(nodes->GetGradient_Primitive(iPoint), nodes->GetGradient_Primitive(iPoint)); -// -// /*--- Turbulent kinetic energy ---*/ -// -// if (config->GetKind_Turb_Model() == TURB_MODEL::SST) -// visc_numerics->SetTurbKineticEnergy(solver_container[TURB_SOL]->GetNodes()->GetSolution(iPoint,0), -// solver_container[TURB_SOL]->GetNodes()->GetSolution(iPoint,0)); -// -// /*--- Compute and update residual ---*/ -// -// auto residual = visc_numerics->ComputeResidual(config); -// LinSysRes.SubtractBlock(iPoint, residual); -// -// /*--- Jacobian contribution for implicit integration ---*/ -// -// if (implicit) -// Jacobian.SubtractBlock2Diag(iPoint, residual.jacobian_i); -// -// } + /*--- Jacobian contribution for implicit integration ---*/ - } + if (implicit) + Jacobian.AddBlock2Diag(iPoint, residual.jacobian_i); } END_SU2_OMP_FOR @@ -7384,7 +7356,12 @@ void CEulerSolver::BC_Supersonic_Inlet(CGeometry *geometry, CSolver **solver_con const su2double Velocity2 = GeometryToolbox::SquaredNorm(int(MAXNDIM), Velocity); su2double Energy = Pressure / (Density * Gamma_Minus_One) + 0.5 * Velocity2; - if (tkeNeeded) Energy += GetTke_Inf(); + if (tkeNeeded) { + const su2double* Turb_Properties = config->GetInlet_TurbVal(Marker_Tag); + const su2double Intensity = Turb_Properties[0]; + const su2double Tke = 3.0 / 2.0 * (Velocity2 * pow(Intensity, 2)); + Energy += Tke; + } /*--- Primitive variables, using the derived quantities. ---*/ diff --git a/SU2_CFD/src/solvers/CFEASolver.cpp b/SU2_CFD/src/solvers/CFEASolver.cpp index 4cd718d6ce1f..acdea74b9e41 100644 --- a/SU2_CFD/src/solvers/CFEASolver.cpp +++ b/SU2_CFD/src/solvers/CFEASolver.cpp @@ -2,14 +2,14 @@ * \file CFEASolver.cpp * \brief Main subroutines for solving direct FEM elasticity problems. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -30,6 +30,7 @@ #include "../../include/numerics/elasticity/CFEAElasticity.hpp" #include "../../../Common/include/toolboxes/printing_toolbox.hpp" #include "../../../Common/include/toolboxes/geometry_toolbox.hpp" +#include "../../include/solvers/CHeatSolver.hpp" #include using namespace GeometryToolbox; @@ -49,7 +50,7 @@ CFEASolver::CFEASolver(LINEAR_SOLVER_MODE mesh_deform_mode) : CFEASolverBase(mes CFEASolver::CFEASolver(CGeometry *geometry, CConfig *config) : CFEASolverBase(geometry, config) { - bool dynamic = (config->GetTime_Domain()); + bool dynamic = config->GetTime_Domain(); config->SetDelta_UnstTimeND(config->GetDelta_UnstTime()); /*--- Test whether we consider dielectric elastomers ---*/ @@ -59,6 +60,7 @@ CFEASolver::CFEASolver(CGeometry *geometry, CConfig *config) : CFEASolverBase(ge element_based = false; topol_filter_applied = false; initial_calc = true; + body_forces = config->GetGravityForce() || config->GetBody_Force() || config->GetCentrifugalForce(); /*--- Here is where we assign the kind of each element ---*/ @@ -71,6 +73,10 @@ CFEASolver::CFEASolver(CGeometry *geometry, CConfig *config) : CFEASolverBase(ge element_container[FEA_TERM][EL_TRIA+offset] = new CTRIA1(); element_container[FEA_TERM][EL_QUAD+offset] = new CQUAD4(); + /*--- Initialize temperature ---*/ + element_container[FEA_TERM][EL_TRIA+offset]->SetTemperature(config->GetTemperature_FreeStream()); + element_container[FEA_TERM][EL_QUAD+offset]->SetTemperature(config->GetTemperature_FreeStream()); + if (de_effects) { element_container[DE_TERM][EL_TRIA+offset] = new CTRIA1(); element_container[DE_TERM][EL_QUAD+offset] = new CQUAD4(); @@ -82,6 +88,10 @@ CFEASolver::CFEASolver(CGeometry *geometry, CConfig *config) : CFEASolverBase(ge element_container[FEA_TERM][EL_PYRAM+offset] = new CPYRAM5(); element_container[FEA_TERM][EL_PRISM+offset] = new CPRISM6(); + for (const auto el : {EL_TETRA, EL_HEXA, EL_PYRAM, EL_PRISM}) { + element_container[FEA_TERM][el+offset]->SetTemperature(config->GetTemperature_FreeStream()); + } + if (de_effects) { element_container[DE_TERM][EL_TETRA+offset] = new CTETRA1(); element_container[DE_TERM][EL_HEXA +offset] = new CHEXA8 (); @@ -113,22 +123,15 @@ CFEASolver::CFEASolver(CGeometry *geometry, CConfig *config) : CFEASolverBase(ge /*--- The length of the solution vector depends on whether the problem is static or dynamic ---*/ - unsigned short nSolVar; string text_line, filename; ifstream restart_file; - if (dynamic) nSolVar = 3 * nVar; - else nSolVar = nVar; - - auto* SolInit = new su2double[nSolVar](); - /*--- Initialize from zero everywhere ---*/ - nodes = new CFEABoundVariable(SolInit, nPoint, nDim, nVar, config); + std::array zeros{}; + nodes = new CFEABoundVariable(zeros.data(), nPoint, nDim, nVar, config); SetBaseClassPointerToNodes(); - delete [] SolInit; - /*--- Set which points are vertices and allocate boundary data. ---*/ for (unsigned long iPoint = 0; iPoint < nPoint; iPoint++) @@ -559,9 +562,13 @@ void CFEASolver::Preprocessing(CGeometry *geometry, CSolver **solver_container, const bool dynamic = config->GetTime_Domain(); const bool disc_adj_fem = (config->GetKind_Solver() == MAIN_SOLVER::DISC_ADJ_FEM); - const bool body_forces = config->GetDeadLoad(); const bool topology_mode = config->GetTopology_Optimization(); + /*--- Set the pointer to the heat solver so we can access temperatures. ---*/ + if (config->GetWeakly_Coupled_Heat()) { + heat_nodes = solver_container[HEAT_SOL]->GetNodes(); + } + /* * For topology optimization we apply a filter on the design density field to avoid * numerical issues (checkerboards), ensure mesh independence, and impose a length scale. @@ -594,7 +601,7 @@ void CFEASolver::Preprocessing(CGeometry *geometry, CSolver **solver_container, * Only initialized once, at the first iteration of the first time step. */ if (body_forces && (initial_calc || disc_adj_fem)) - Compute_DeadLoad(geometry, numerics, config); + Compute_BodyForces(geometry, numerics, config); /*--- Clear the linear system solution. ---*/ SU2_OMP_PARALLEL @@ -645,6 +652,7 @@ void CFEASolver::Compute_StiffMatrix(CGeometry *geometry, CNumerics **numerics, const bool topology_mode = config->GetTopology_Optimization(); const su2double simp_exponent = config->GetSIMP_Exponent(); const su2double simp_minstiff = config->GetSIMP_MinStiffness(); + const su2double t_ref = config->GetTemperature_Ref(); /*--- Start OpenMP parallel region. ---*/ @@ -687,6 +695,9 @@ void CFEASolver::Compute_StiffMatrix(CGeometry *geometry, CNumerics **numerics, element->SetRef_Coord(iNode, iDim, val_Coord); element->SetCurr_Coord(iNode, iDim, val_Sol); } + if (heat_nodes) { + element->SetTemperature(iNode, heat_nodes->GetSolution(indexNode[iNode], 0) * t_ref); + } } /*--- In topology mode determine the penalty to apply to the stiffness. ---*/ @@ -739,6 +750,7 @@ void CFEASolver::Compute_StiffMatrix_NodalStressRes(CGeometry *geometry, CNumeri const bool topology_mode = config->GetTopology_Optimization(); const su2double simp_exponent = config->GetSIMP_Exponent(); const su2double simp_minstiff = config->GetSIMP_MinStiffness(); + const su2double t_ref = config->GetTemperature_Ref(); /*--- Start OpenMP parallel region. ---*/ @@ -794,6 +806,9 @@ void CFEASolver::Compute_StiffMatrix_NodalStressRes(CGeometry *geometry, CNumeri de_elem->SetRef_Coord(iNode, iDim, val_Coord); } } + if (heat_nodes) { + fea_elem->SetTemperature(iNode, heat_nodes->GetSolution(indexNode[iNode], 0) * t_ref); + } } /*--- In topology mode determine the penalty to apply to the stiffness. ---*/ @@ -877,6 +892,7 @@ void CFEASolver::Compute_MassMatrix(const CGeometry *geometry, CNumerics **numer const bool topology_mode = config->GetTopology_Optimization(); const su2double simp_minstiff = config->GetSIMP_MinStiffness(); + const su2double t_ref = config->GetTemperature_Ref(); /*--- Never record this method as the mass matrix is passive (but the mass residual is not). ---*/ const bool wasActive = AD::BeginPassive(); @@ -917,6 +933,9 @@ void CFEASolver::Compute_MassMatrix(const CGeometry *geometry, CNumerics **numer su2double val_Coord = Get_ValCoord(geometry, indexNode[iNode], iDim); element->SetRef_Coord(iNode, iDim, val_Coord); } + if (heat_nodes) { + element->SetTemperature(iNode, heat_nodes->GetSolution(indexNode[iNode], 0) * t_ref); + } } /*--- In topology mode determine the penalty to apply to the mass, @@ -964,6 +983,7 @@ void CFEASolver::Compute_MassRes(const CGeometry *geometry, CNumerics **numerics const bool topology_mode = config->GetTopology_Optimization(); const su2double simp_minstiff = config->GetSIMP_MinStiffness(); + const su2double t_ref = config->GetTemperature_Ref(); /*--- Clear vector before calculation. ---*/ TimeRes.SetValZero(); @@ -998,6 +1018,9 @@ void CFEASolver::Compute_MassRes(const CGeometry *geometry, CNumerics **numerics su2double val_Coord = Get_ValCoord(geometry, indexNode[iNode], iDim); element->SetRef_Coord(iNode, iDim, val_Coord); } + if (heat_nodes) { + element->SetTemperature(iNode, heat_nodes->GetSolution(indexNode[iNode], 0) * t_ref); + } } /*--- In topology mode determine the penalty to apply to the mass, @@ -1043,6 +1066,7 @@ void CFEASolver::Compute_NodalStressRes(CGeometry *geometry, CNumerics **numeric const bool topology_mode = config->GetTopology_Optimization(); const su2double simp_exponent = config->GetSIMP_Exponent(); const su2double simp_minstiff = config->GetSIMP_MinStiffness(); + const su2double t_ref = config->GetTemperature_Ref(); /*--- Start OpenMP parallel region. ---*/ @@ -1092,6 +1116,9 @@ void CFEASolver::Compute_NodalStressRes(CGeometry *geometry, CNumerics **numeric element->SetCurr_Coord(iNode, iDim, val_Sol); element->SetRef_Coord(iNode, iDim, val_Coord); } + if (heat_nodes) { + element->SetTemperature(iNode, heat_nodes->GetSolution(indexNode[iNode], 0) * t_ref); + } } /*--- In topology mode determine the penalty to apply to the stiffness ---*/ @@ -1136,6 +1163,7 @@ void CFEASolver::Compute_NodalStress(CGeometry *geometry, CNumerics **numerics, const bool topology_mode = config->GetTopology_Optimization(); const su2double simp_exponent = config->GetSIMP_Exponent(); const su2double simp_minstiff = config->GetSIMP_MinStiffness(); + const su2double t_ref = config->GetTemperature_Ref(); const auto stressParam = config->GetStressPenaltyParam(); const su2double stress_scale = 1.0 / stressParam[0]; @@ -1208,6 +1236,9 @@ void CFEASolver::Compute_NodalStress(CGeometry *geometry, CNumerics **numerics, element->SetCurr_Coord(iNode, iDim, val_Sol); element->SetRef_Coord(iNode, iDim, val_Coord); } + if (heat_nodes) { + element->SetTemperature(iNode, heat_nodes->GetSolution(indexNode[iNode], 0) * t_ref); + } } /*--- In topology mode determine the penalty to apply to the stiffness ---*/ @@ -1407,7 +1438,9 @@ void CFEASolver::Compute_NodalStress(CGeometry *geometry, CNumerics **numerics, } -void CFEASolver::Compute_DeadLoad(CGeometry *geometry, CNumerics **numerics, const CConfig *config) { +void CFEASolver::Compute_BodyForces(CGeometry *geometry, CNumerics **numerics, const CConfig *config) { + + const su2double t_ref = config->GetTemperature_Ref(); /*--- Start OpenMP parallel region. ---*/ @@ -1448,6 +1481,9 @@ void CFEASolver::Compute_DeadLoad(CGeometry *geometry, CNumerics **numerics, con su2double val_Coord = Get_ValCoord(geometry, indexNode[iNode], iDim); element->SetRef_Coord(iNode, iDim, val_Coord); } + if (heat_nodes) { + element->SetTemperature(iNode, heat_nodes->GetSolution(indexNode[iNode], 0) * t_ref); + } } /*--- Penalize the dead load, do it by default to avoid unecessary "ifs", since it @@ -1457,7 +1493,7 @@ void CFEASolver::Compute_DeadLoad(CGeometry *geometry, CNumerics **numerics, con /*--- Set the properties of the element and compute its mass matrix. ---*/ element->Set_ElProperties(element_properties[iElem]); - numerics[FEA_TERM + thread*MAX_TERMS]->Compute_Dead_Load(element, config); + numerics[FEA_TERM + thread*MAX_TERMS]->Compute_Body_Forces(element, config); /*--- Add contributions of this element to the mass matrix. ---*/ for (iNode = 0; iNode < nNodes; iNode++) { @@ -1587,6 +1623,20 @@ void CFEASolver::BC_Clamped_Post(CGeometry *geometry, const CConfig *config, uns } +namespace { +/*--- Helper for BC_Sym_Plane ---*/ +template +void SubtractProjection(unsigned short nDim, const su2double* n, const Read& read, const Write& write) { + su2double tmp[3] = {}; + for (auto iDim = 0u; iDim < nDim; ++iDim) tmp[iDim] = read(iDim); + const su2double proj = DotProduct(nDim, tmp, n); + for (auto iDim = 0u; iDim < nDim; ++iDim) { + tmp[iDim] -= proj * n[iDim]; + write(iDim, tmp[iDim]); + } +} +} + void CFEASolver::BC_Sym_Plane(CGeometry *geometry, const CConfig *config, unsigned short val_marker) { if (geometry->GetnElem_Bound(val_marker) == 0) return; @@ -1609,14 +1659,8 @@ void CFEASolver::BC_Sym_Plane(CGeometry *geometry, const CConfig *config, unsign case 3: TriangleNormal(nodeCoord, normal); break; case 4: QuadrilateralNormal(nodeCoord, normal); break; } - - auto axis = 0u; - for (auto iDim = 1u; iDim < MAXNDIM; ++iDim) - axis = (fabs(normal[iDim]) > fabs(normal[axis]))? iDim : axis; - - if (fabs(normal[axis]) < 0.99*Norm(int(MAXNDIM),normal)) { - SU2_MPI::Error("The structural solver only supports axis-aligned symmetry planes.",CURRENT_FUNCTION); - } + const su2double area = Norm(int(MAXNDIM), normal); + for (auto iDim = 0u; iDim < MAXNDIM; ++iDim) normal[iDim] /= area; /*--- Impose zero displacement perpendicular to the symmetry plane. ---*/ @@ -1626,20 +1670,29 @@ void CFEASolver::BC_Sym_Plane(CGeometry *geometry, const CConfig *config, unsign const auto iPoint = geometry->vertex[val_marker][iVertex]->GetNode(); /*--- Set and enforce solution at current and previous time-step ---*/ - nodes->SetSolution(iPoint, axis, 0.0); +#define SUBTRACT_PROJECTION(READ, WRITE) \ + SubtractProjection(nDim, normal, [&](unsigned short iDim) { return nodes->READ(iPoint, iDim); }, \ + [&](unsigned short iDim, const su2double& x) { nodes->WRITE(iPoint, iDim, x); }); + SUBTRACT_PROJECTION(GetSolution, SetSolution) if (dynamic) { - nodes->SetSolution_Vel(iPoint, axis, 0.0); - nodes->SetSolution_Accel(iPoint, axis, 0.0); - nodes->Set_Solution_time_n(iPoint, axis, 0.0); - nodes->SetSolution_Vel_time_n(iPoint, axis, 0.0); - nodes->SetSolution_Accel_time_n(iPoint, axis, 0.0); + SUBTRACT_PROJECTION(GetSolution_Vel, SetSolution_Vel) + SUBTRACT_PROJECTION(GetSolution_Accel, SetSolution_Accel) + SUBTRACT_PROJECTION(GetSolution_time_n, Set_Solution_time_n) + SUBTRACT_PROJECTION(GetSolution_Vel_time_n, SetSolution_Vel_time_n) + SUBTRACT_PROJECTION(GetSolution_Accel_time_n, SetSolution_Accel_time_n) } /*--- Set and enforce 0 solution for mesh deformation ---*/ - nodes->SetBound_Disp(iPoint, axis, 0.0); - LinSysSol(iPoint, axis) = 0.0; - if (LinSysReact.GetLocSize() > 0) LinSysReact(iPoint, axis) = 0.0; - Jacobian.EnforceSolutionAtDOF(iPoint, axis, su2double(0.0), LinSysRes); + SUBTRACT_PROJECTION(GetBound_Disp, SetBound_Disp) +#undef SUBTRACT_PROJECTION + + SubtractProjection(nDim, normal, [&](unsigned short iDim) { return LinSysSol(iPoint, iDim); }, + [&](unsigned short iDim, const su2double& x) { LinSysSol(iPoint, iDim) = x; }); + if (LinSysReact.GetLocSize() > 0) { + SubtractProjection(nDim, normal, [&](unsigned short iDim) { return LinSysReact(iPoint, iDim); }, + [&](unsigned short iDim, const su2double& x) { LinSysReact(iPoint, iDim) = x; }); + } + Jacobian.EnforceZeroProjection(iPoint, normal, LinSysRes); } @@ -2105,7 +2158,6 @@ void CFEASolver::ImplicitNewmark_Iteration(const CGeometry *geometry, CNumerics const bool linear_analysis = (config->GetGeometricConditions() == STRUCT_DEFORMATION::SMALL); const bool nonlinear_analysis = (config->GetGeometricConditions() == STRUCT_DEFORMATION::LARGE); const bool newton_raphson = (config->GetKind_SpaceIteScheme_FEA() == STRUCT_SPACE_ITE::NEWTON); - const bool body_forces = config->GetDeadLoad(); /*--- For simplicity, no incremental loading is handled with increment of 1. ---*/ const su2double loadIncr = config->GetIncrementalLoad()? loadIncrement : su2double(1.0); @@ -2293,7 +2345,6 @@ void CFEASolver::GeneralizedAlpha_Iteration(const CGeometry *geometry, CNumerics const bool linear_analysis = (config->GetGeometricConditions() == STRUCT_DEFORMATION::SMALL); const bool nonlinear_analysis = (config->GetGeometricConditions() == STRUCT_DEFORMATION::LARGE); const bool newton_raphson = (config->GetKind_SpaceIteScheme_FEA() == STRUCT_SPACE_ITE::NEWTON); - const bool body_forces = config->GetDeadLoad(); /*--- Blend between previous and current timestep. ---*/ const su2double alpha_f = config->Get_Int_Coeffs(2); @@ -2917,9 +2968,6 @@ void CFEASolver::Compute_OFVolFrac(CGeometry *geometry, const CConfig *config) void CFEASolver::Compute_OFCompliance(CGeometry *geometry, const CConfig *config) { - /*--- Types of loads to consider ---*/ - const bool body_forces = config->GetDeadLoad(); - /*--- If the loads are being applied incrementaly ---*/ const bool incremental_load = config->GetIncrementalLoad(); @@ -2977,6 +3025,7 @@ void CFEASolver::Stiffness_Penalty(CGeometry *geometry, CNumerics **numerics, CC PenaltyValue = 0.0; return; } + const su2double t_ref = config->GetTemperature_Ref(); su2double weightedValue = 0.0; su2double weightedValue_reduce = 0.0; @@ -3008,6 +3057,9 @@ void CFEASolver::Stiffness_Penalty(CGeometry *geometry, CNumerics **numerics, CC su2double val_Coord = Get_ValCoord(geometry, indexNode[iNode], iDim); element->SetRef_Coord(iNode, iDim, val_Coord); } + if (heat_nodes) { + element->SetTemperature(iNode, heat_nodes->GetSolution(indexNode[iNode], 0) * t_ref); + } } // Avoid double-counting elements: diff --git a/SU2_CFD/src/solvers/CFEASolverBase.cpp b/SU2_CFD/src/solvers/CFEASolverBase.cpp index 29da6fd4a5aa..37e17fd70c4d 100644 --- a/SU2_CFD/src/solvers/CFEASolverBase.cpp +++ b/SU2_CFD/src/solvers/CFEASolverBase.cpp @@ -2,14 +2,14 @@ * \file CFEASolverBase.cpp * \brief Common class template for FEA solvers * \author T. Dick - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/solvers/CFEM_DG_EulerSolver.cpp b/SU2_CFD/src/solvers/CFEM_DG_EulerSolver.cpp index 29c53116c845..723a363fc1b0 100644 --- a/SU2_CFD/src/solvers/CFEM_DG_EulerSolver.cpp +++ b/SU2_CFD/src/solvers/CFEM_DG_EulerSolver.cpp @@ -2,14 +2,14 @@ * \file CFEM_DG_EulerSolver.cpp * \brief Main subroutines for solving finite element Euler flow problems * \author J. Alonso, E. van der Weide, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/solvers/CFEM_DG_NSSolver.cpp b/SU2_CFD/src/solvers/CFEM_DG_NSSolver.cpp index 4e2558a74a2a..3f6f81763c1e 100644 --- a/SU2_CFD/src/solvers/CFEM_DG_NSSolver.cpp +++ b/SU2_CFD/src/solvers/CFEM_DG_NSSolver.cpp @@ -2,14 +2,14 @@ * \file CFEM_DG_NSSolver.cpp * \brief Main subroutines for solving finite element Navier-Stokes flow problems * \author J. Alonso, E. van der Weide, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/solvers/CGradientSmoothingSolver.cpp b/SU2_CFD/src/solvers/CGradientSmoothingSolver.cpp index b46145960655..bab03aa12449 100644 --- a/SU2_CFD/src/solvers/CGradientSmoothingSolver.cpp +++ b/SU2_CFD/src/solvers/CGradientSmoothingSolver.cpp @@ -2,14 +2,14 @@ * \file CGradientSmoothing.cpp * \brief Main solver routines for the gradient smoothing problem. * \author T. Dick - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/solvers/CHeatSolver.cpp b/SU2_CFD/src/solvers/CHeatSolver.cpp index dbbb7191f172..217baf8f8d4e 100644 --- a/SU2_CFD/src/solvers/CHeatSolver.cpp +++ b/SU2_CFD/src/solvers/CHeatSolver.cpp @@ -2,14 +2,14 @@ * \file CHeatSolver.cpp * \brief Main subroutines for solving the heat equation * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -35,7 +35,7 @@ template class CScalarSolver; CHeatSolver::CHeatSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh) : CScalarSolver(geometry, config, false), - flow(config->GetFluidProblem()), heat_equation(config->GetHeatProblem()) { + flow(config->GetFluidProblem()) { /*--- Dimension of the problem --> temperature is the only conservative variable ---*/ @@ -101,14 +101,13 @@ CHeatSolver::CHeatSolver(CGeometry *geometry, CConfig *config, unsigned short iM /*--- Set the reference values for heat fluxes. If the heat solver runs stand-alone, * thermal conductivity is read directly from config file ---*/ - if (heat_equation) { + if (!flow) { su2double rho_cp = config->GetMaterialDensity(0)*config->GetSpecific_Heat_Cp(); config->SetThermalDiffusivity(config->GetThermal_Conductivity_Constant() / rho_cp); /*--- Fluxes are computed via thermal diffusivity (not conductivity), so we have to divide by rho*cp ---*/ config->SetHeat_Flux_Ref(rho_cp*Temperature_Ref); - } - else if (flow) { + } else { config->SetHeat_Flux_Ref(config->GetViscosity_Ref()*config->GetSpecific_Heat_Cp()); } @@ -551,8 +550,7 @@ void CHeatSolver::BC_ConjugateHeat_Interface(CGeometry *geometry, CSolver **solv } } END_SU2_OMP_FOR - } - else if (heat_equation) { + } else { SU2_OMP_FOR_STAT(OMP_MIN_SIZE) for (auto iVertex = 0ul; iVertex < geometry->nVertex[val_marker]; iVertex++) { diff --git a/SU2_CFD/src/solvers/CIncEulerSolver.cpp b/SU2_CFD/src/solvers/CIncEulerSolver.cpp index 127e546fd8ab..2d81eea38730 100644 --- a/SU2_CFD/src/solvers/CIncEulerSolver.cpp +++ b/SU2_CFD/src/solvers/CIncEulerSolver.cpp @@ -2,14 +2,14 @@ * \file CIncEulerSolver.cpp * \brief Main subroutines for solving incompressible flow (Euler, Navier-Stokes, etc.). * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -56,6 +56,7 @@ CIncEulerSolver::CIncEulerSolver(CGeometry *geometry, CConfig *config, unsigned (config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_2ND)); bool time_stepping = config->GetTime_Marching() == TIME_MARCHING::TIME_STEPPING; bool adjoint = (config->GetContinuous_Adjoint()) || (config->GetDiscrete_Adjoint()); + const bool centered = config->GetKind_ConvNumScheme_Flow() == SPACE_CENTERED; /* 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(); @@ -117,7 +118,10 @@ CIncEulerSolver::CIncEulerSolver(CGeometry *geometry, CConfig *config, unsigned nDim = geometry->GetnDim(); /*--- Make sure to align the sizes with the constructor of CIncEulerVariable. ---*/ - nVar = nDim+2; nPrimVar = nDim+9; nPrimVarGrad = nDim+4; + nVar = nDim + 2; + nPrimVar = nDim + 9; + /*--- Centered schemes only need gradients for viscous fluxes (T and v, but we need also to include P). ---*/ + nPrimVarGrad = nDim + (centered ? 2 : 4); /*--- Initialize nVarGrad for deallocation ---*/ diff --git a/SU2_CFD/src/solvers/CIncNSSolver.cpp b/SU2_CFD/src/solvers/CIncNSSolver.cpp index 41cedcdb5f59..006603549f91 100644 --- a/SU2_CFD/src/solvers/CIncNSSolver.cpp +++ b/SU2_CFD/src/solvers/CIncNSSolver.cpp @@ -2,14 +2,14 @@ * \file CIncNSSolver.cpp * \brief Main subroutines for solving Navier-Stokes incompressible flow. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -341,7 +341,6 @@ void CIncNSSolver::BC_Wall_Generic(const CGeometry *geometry, const CConfig *con /*--- Variables for streamwise periodicity ---*/ const bool streamwise_periodic = (config->GetKind_Streamwise_Periodic() != ENUM_STREAMWISE_PERIODIC::NONE); const bool streamwise_periodic_temperature = config->GetStreamwise_Periodic_Temperature(); - su2double Cp, thermal_conductivity, dot_product, scalar_factor; /*--- Identify the boundary by string name ---*/ @@ -434,15 +433,17 @@ void CIncNSSolver::BC_Wall_Generic(const CGeometry *geometry, const CConfig *con /*--- With streamwise periodic flow and heatflux walls an additional term is introduced in the boundary formulation ---*/ if (streamwise_periodic && streamwise_periodic_temperature) { - Cp = nodes->GetSpecificHeatCp(iPoint); - thermal_conductivity = nodes->GetThermalConductivity(iPoint); + const su2double Cp = nodes->GetSpecificHeatCp(iPoint); + const su2double thermal_conductivity = nodes->GetThermalConductivity(iPoint); /*--- Scalar factor of the residual contribution ---*/ const su2double norm2_translation = GeometryToolbox::SquaredNorm(nDim, config->GetPeriodic_Translation(0)); - scalar_factor = SPvals.Streamwise_Periodic_IntegratedHeatFlow*thermal_conductivity / (SPvals.Streamwise_Periodic_MassFlow * Cp * norm2_translation); + const su2double scalar_factor = + SPvals.Streamwise_Periodic_IntegratedHeatFlow*thermal_conductivity / + (SPvals.Streamwise_Periodic_MassFlow * Cp * norm2_translation); /*--- Dot product ---*/ - dot_product = GeometryToolbox::DotProduct(nDim, config->GetPeriodic_Translation(0), Normal); + const su2double dot_product = GeometryToolbox::DotProduct(nDim, config->GetPeriodic_Translation(0), Normal); LinSysRes(iPoint, nDim+1) += scalar_factor*dot_product; } // if streamwise_periodic @@ -472,18 +473,17 @@ void CIncNSSolver::BC_Wall_Generic(const CGeometry *geometry, const CConfig *con const auto Coord_i = geometry->nodes->GetCoord(iPoint); const auto Coord_j = geometry->nodes->GetCoord(Point_Normal); - su2double Edge_Vector[MAXNDIM]; - GeometryToolbox::Distance(nDim, Coord_j, Coord_i, Edge_Vector); - su2double dist_ij_2 = GeometryToolbox::SquaredNorm(nDim, Edge_Vector); - su2double dist_ij = sqrt(dist_ij_2); + su2double UnitNormal[MAXNDIM] = {0.0}; + for (auto iDim = 0u; iDim < nDim; ++iDim) UnitNormal[iDim] = Normal[iDim] / Area; + const su2double dist_ij = GeometryToolbox::NormalDistance(nDim, UnitNormal, Coord_i, Coord_j); /*--- Compute the normal gradient in temperature using Twall ---*/ - su2double dTdn = -(nodes->GetTemperature(Point_Normal) - Twall)/dist_ij; + const su2double dTdn = -(nodes->GetTemperature(Point_Normal) - Twall)/dist_ij; /*--- Get thermal conductivity ---*/ - su2double thermal_conductivity = nodes->GetThermalConductivity(iPoint); + const su2double thermal_conductivity = nodes->GetThermalConductivity(iPoint); /*--- Apply a weak boundary condition for the energy equation. Compute the residual due to the prescribed heat flux. ---*/ @@ -493,10 +493,7 @@ void CIncNSSolver::BC_Wall_Generic(const CGeometry *geometry, const CConfig *con /*--- Jacobian contribution for temperature equation. ---*/ if (implicit) { - su2double proj_vector_ij = 0.0; - if (dist_ij_2 > 0.0) - proj_vector_ij = GeometryToolbox::DotProduct(nDim, Edge_Vector, Normal) / dist_ij_2; - Jacobian.AddVal2Diag(iPoint, nDim+1, thermal_conductivity*proj_vector_ij); + Jacobian.AddVal2Diag(iPoint, nDim+1, thermal_conductivity * Area / dist_ij); } break; } // switch @@ -688,11 +685,7 @@ void CIncNSSolver::SetTau_Wall_WF(CGeometry *geometry, CSolver **solver_containe const su2double VelTangMod = GeometryToolbox::Norm(int(MAXNDIM), VelTang); /*--- Compute normal distance of the interior point from the wall ---*/ - - su2double WallDist[MAXNDIM] = {0.0}; - GeometryToolbox::Distance(nDim, Coord, Coord_Normal, WallDist); - - su2double WallDistMod = GeometryToolbox::Norm(int(MAXNDIM), WallDist); + const su2double WallDistMod = GeometryToolbox::Distance(nDim, Coord, Coord_Normal); su2double Density_Wall = nodes->GetDensity(iPoint); diff --git a/SU2_CFD/src/solvers/CMeshSolver.cpp b/SU2_CFD/src/solvers/CMeshSolver.cpp index 0335e1759d05..a9a661ba89e3 100644 --- a/SU2_CFD/src/solvers/CMeshSolver.cpp +++ b/SU2_CFD/src/solvers/CMeshSolver.cpp @@ -2,14 +2,14 @@ * \file CMeshSolver.cpp * \brief Main subroutines to solve moving meshes using a pseudo-linear elastic approach. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -1450,7 +1450,7 @@ void CMeshSolver::Surface_Translating(CGeometry *geometry, CConfig *config, unsi } for (iDim = 0; iDim < 3; iDim++) { - xDot[iDim] = config->GetMarkerTranslationRate(jMarker, iDim); + xDot[iDim] = config->GetMarkerTranslationRate(jMarker, iDim)/config->GetVelocity_Ref(); Center[iDim] = config->GetMarkerMotion_Origin(jMarker, iDim); } diff --git a/SU2_CFD/src/solvers/CNEMOEulerSolver.cpp b/SU2_CFD/src/solvers/CNEMOEulerSolver.cpp index 1a41a04f66a7..af2c19fc7518 100644 --- a/SU2_CFD/src/solvers/CNEMOEulerSolver.cpp +++ b/SU2_CFD/src/solvers/CNEMOEulerSolver.cpp @@ -2,14 +2,14 @@ * \file CNEMOEulerSolver.cpp * \brief Headers of the CNEMOEulerSolver class * \author S. R. Copeland, F. Palacios, W. Maier, C. Garbacz, J. Needels - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/solvers/CNEMONSSolver.cpp b/SU2_CFD/src/solvers/CNEMONSSolver.cpp index 01d633857392..7dc815429f19 100644 --- a/SU2_CFD/src/solvers/CNEMONSSolver.cpp +++ b/SU2_CFD/src/solvers/CNEMONSSolver.cpp @@ -2,14 +2,14 @@ * \file CNEMONSSolver.cpp * \brief Headers of the CNEMONSSolver class * \author S. R. Copeland, F. Palacios, W. Maier. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/solvers/CNSSolver.cpp b/SU2_CFD/src/solvers/CNSSolver.cpp index 127ff3f5b08b..5b1ee02832b1 100644 --- a/SU2_CFD/src/solvers/CNSSolver.cpp +++ b/SU2_CFD/src/solvers/CNSSolver.cpp @@ -2,14 +2,14 @@ * \file CNSSolver.cpp * \brief Main subroutines for solving Finite-Volume Navier-Stokes flow problems. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -672,22 +672,19 @@ void CNSSolver::BC_Isothermal_Wall_Generic(CGeometry *geometry, CSolver **solver const auto Coord_i = geometry->nodes->GetCoord(iPoint); const auto Coord_j = geometry->nodes->GetCoord(Point_Normal); - - su2double dist_ij = GeometryToolbox::Distance(nDim, Coord_i, Coord_j); + const su2double dist_ij = GeometryToolbox::NormalDistance(nDim, UnitNormal, Coord_i, Coord_j); /*--- Store the corrected velocity at the wall which will be zero (v = 0), unless there is grid motion (v = u_wall)---*/ if (dynamic_grid) { nodes->SetVelocity_Old(iPoint, geometry->nodes->GetGridVel(iPoint)); - } - else { + } else { su2double zero[MAXNDIM] = {0.0}; nodes->SetVelocity_Old(iPoint, zero); } - for (auto iDim = 0u; iDim < nDim; iDim++) - LinSysRes(iPoint, iDim+1) = 0.0; + for (auto iDim = 0u; iDim < nDim; iDim++) LinSysRes(iPoint, iDim+1) = 0.0; nodes->SetVel_ResTruncError_Zero(iPoint); /*--- Get transport coefficients ---*/ @@ -708,8 +705,7 @@ void CNSSolver::BC_Isothermal_Wall_Generic(CGeometry *geometry, CSolver **solver if (cht_mode) { Twall = GetCHTWallTemperature(config, val_marker, iVertex, dist_ij, thermal_conductivity, There, Temperature_Ref); - } - else if (config->GetMarker_All_PyCustom(val_marker)) { + } else if (config->GetMarker_All_PyCustom(val_marker)) { Twall = geometry->GetCustomBoundaryTemperature(val_marker, iVertex) / Temperature_Ref; } @@ -868,11 +864,7 @@ void CNSSolver::SetTau_Wall_WF(CGeometry *geometry, CSolver **solver_container, const su2double VelTangMod = GeometryToolbox::Norm(int(MAXNDIM), VelTang); /*--- Compute normal distance of the interior point from the wall ---*/ - - su2double WallDist[MAXNDIM] = {0.0}; - GeometryToolbox::Distance(nDim, Coord, Coord_Normal, WallDist); - - const su2double WallDistMod = GeometryToolbox::Norm(int(MAXNDIM), WallDist); + const su2double WallDistMod = GeometryToolbox::Distance(nDim, Coord, Coord_Normal); su2double T_Wall = nodes->GetTemperature(iPoint); const su2double Conductivity_Wall = nodes->GetThermalConductivity(iPoint); diff --git a/SU2_CFD/src/solvers/CRadP1Solver.cpp b/SU2_CFD/src/solvers/CRadP1Solver.cpp index a1983796f31a..87a1317c7803 100644 --- a/SU2_CFD/src/solvers/CRadP1Solver.cpp +++ b/SU2_CFD/src/solvers/CRadP1Solver.cpp @@ -2,14 +2,14 @@ * \file CRadP1Solver.cpp * \brief Main subroutines for solving P1 radiation problems. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/solvers/CRadSolver.cpp b/SU2_CFD/src/solvers/CRadSolver.cpp index 6a8dec783a84..454fc8df9864 100644 --- a/SU2_CFD/src/solvers/CRadSolver.cpp +++ b/SU2_CFD/src/solvers/CRadSolver.cpp @@ -2,14 +2,14 @@ * \file CRadP1Solver.cpp * \brief Main subroutines for solving generic radiation problems (P1, M1, discrete ordinates...) * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/solvers/CSolver.cpp b/SU2_CFD/src/solvers/CSolver.cpp index 3b8c9e0e3cea..bfb16147d395 100644 --- a/SU2_CFD/src/solvers/CSolver.cpp +++ b/SU2_CFD/src/solvers/CSolver.cpp @@ -2,14 +2,14 @@ * \file CSolver.cpp * \brief Main subroutines for CSolver class. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -1717,6 +1717,7 @@ void CSolver::AdaptCFLNumber(CGeometry **geometry, const su2double CFLMin = config->GetCFL_AdaptParam(2); const su2double CFLMax = config->GetCFL_AdaptParam(3); const su2double acceptableLinTol = config->GetCFL_AdaptParam(4); + const su2double startingIter = config->GetCFL_AdaptParam(5); const bool fullComms = (config->GetComm_Level() == COMM_FULL); /* Number of iterations considered to check for stagnation. */ @@ -1764,8 +1765,12 @@ void CSolver::AdaptCFLNumber(CGeometry **geometry, /* Check if we should decrease or if we can increase, the 20% is to avoid flip-flopping. */ resetCFL = linRes > 0.99; - reduceCFL = linRes > 1.2*linTol; - canIncrease = linRes < linTol; + unsigned long iter = config->GetMultizone_Problem() ? config->GetOuterIter() : config->GetInnerIter(); + + /* only change CFL number when larger than starting iteration */ + reduceCFL = (linRes > 1.2*linTol) && (iter >= startingIter); + + canIncrease = (linRes < linTol) && (iter >= startingIter); if ((iMesh == MESH_0) && (Res_Count > 0)) { Old_Func = New_Func; @@ -3158,7 +3163,8 @@ void CSolver::InterpolateRestartData(const CGeometry *geometry, const CConfig *c const unsigned long nFields = Restart_Vars[1]; const unsigned long nPointFile = Restart_Vars[2]; const auto t0 = SU2_MPI::Wtime(); - auto nRecurse = 0; + int nRecurse = 0; + const int maxNRecurse = 128; if (rank == MASTER_NODE) { cout << "\nThe number of points in the restart file (" << nPointFile << ") does not match " @@ -3257,7 +3263,7 @@ void CSolver::InterpolateRestartData(const CGeometry *geometry, const CConfig *c bool done = false; SU2_OMP_PARALLEL - while (!done) { + while (!done && nRecurse < maxNRecurse) { SU2_OMP_FOR_DYN(roundUpDiv(nPointDomain,2*omp_get_num_threads())) for (auto iPoint = 0ul; iPoint < nPointDomain; ++iPoint) { /*--- Do not change points that are already interpolated. ---*/ @@ -3268,7 +3274,8 @@ void CSolver::InterpolateRestartData(const CGeometry *geometry, const CConfig *c for (const auto jPoint : geometry->nodes->GetPoints(iPoint)) { if (!isMapped[jPoint]) continue; - if (boundary_i != geometry->nodes->GetSolidBoundary(jPoint)) continue; + /*--- Take data from anywhere if we are looping too many times. ---*/ + if (boundary_i != geometry->nodes->GetSolidBoundary(jPoint) && nRecurse < 8) continue; nDonor[iPoint]++; @@ -3310,6 +3317,10 @@ void CSolver::InterpolateRestartData(const CGeometry *geometry, const CConfig *c } // everything goes out of scope except "localVars" + if (nRecurse == maxNRecurse) { + SU2_MPI::Error("Limit number of recursions reached, the meshes may be too different.", CURRENT_FUNCTION); + } + /*--- Move to Restart_Data in ascending order of global index, which is how a matching restart would have been read. ---*/ Restart_Data.resize(nPointDomain*nFields); @@ -3324,9 +3335,11 @@ void CSolver::InterpolateRestartData(const CGeometry *geometry, const CConfig *c counter++; } } + int nRecurseMax = 0; + SU2_MPI::Reduce(&nRecurse, &nRecurseMax, 1, MPI_INT, MPI_MAX, MASTER_NODE, SU2_MPI::GetComm()); if (rank == MASTER_NODE) { - cout << "Number of recursions: " << nRecurse << ".\n" + cout << "Number of recursions: " << nRecurseMax << ".\n" "Elapsed time: " << SU2_MPI::Wtime()-t0 << "s.\n" << endl; } } @@ -3683,14 +3696,16 @@ void CSolver::LoadInletProfile(CGeometry **geometry, columnValue << config->GetInlet_SpeciesVal(Marker_Tag)[iVar] << "\t"; } break; - case SPECIES_MODEL::FLAMELET: + case SPECIES_MODEL::FLAMELET: { + const auto& flamelet_config_options = config->GetFlameletParsedOptions(); /*--- 2-equation flamelet model ---*/ columnName << "PROGRESSVAR" << setw(24) << "ENTHALPYTOT" << setw(24); columnValue << config->GetInlet_SpeciesVal(Marker_Tag)[0] << "\t" << config->GetInlet_SpeciesVal(Marker_Tag)[1]<<"\t"; /*--- auxiliary species transport equations ---*/ - for (unsigned short iReactant = 0; iReactant < config->GetNUserScalars(); iReactant++) { - columnName << config->GetUserScalarName(iReactant) << setw(24); - columnValue << config->GetInlet_SpeciesVal(Marker_Tag)[config->GetNControlVars() + iReactant] << "\t"; + for (unsigned short iReactant = 0; iReactant < flamelet_config_options.n_user_scalars; iReactant++) { + columnName << flamelet_config_options.user_scalar_names[iReactant] << setw(24); + columnValue << config->GetInlet_SpeciesVal(Marker_Tag)[flamelet_config_options.n_control_vars + iReactant] << "\t"; + } } break; } diff --git a/SU2_CFD/src/solvers/CSolverFactory.cpp b/SU2_CFD/src/solvers/CSolverFactory.cpp index 743775ad139b..12255a652b16 100644 --- a/SU2_CFD/src/solvers/CSolverFactory.cpp +++ b/SU2_CFD/src/solvers/CSolverFactory.cpp @@ -2,14 +2,14 @@ * \file CSolverFactory.cpp * \brief Main subroutines for CSolverFactoryclass. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -173,6 +173,9 @@ CSolver** CSolverFactory::CreateSolverContainer(MAIN_SOLVER kindMainSolver, CCon break; case MAIN_SOLVER::FEM_ELASTICITY: solver[FEA_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::FEA, solver, geometry, config, iMGLevel); + if (config->GetWeakly_Coupled_Heat()) { + solver[HEAT_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::HEAT, solver, geometry, config, iMGLevel); + } break; case MAIN_SOLVER::DISC_ADJ_FEM: solver[FEA_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::FEA, solver, geometry, config, iMGLevel); diff --git a/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp b/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp index 33ad74b3f38a..4355e3ecb22d 100644 --- a/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp +++ b/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp @@ -2,14 +2,14 @@ * \file CSpeciesFlameletSolver.cpp * \brief Main subroutines of CSpeciesFlameletSolver class * \author D. Mayer, T. Economon, N. Beishuizen, E. Bunschoten - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -36,9 +36,13 @@ CSpeciesFlameletSolver::CSpeciesFlameletSolver(CGeometry* geometry, CConfig* config, unsigned short iMesh) : CSpeciesSolver(geometry, config, true) { + + /*--- Retrieve options from config. ---*/ + flamelet_config_options = config->GetFlameletParsedOptions(); + /*--- Dimension of the problem. ---*/ - nVar = config->GetNScalars(); - include_mixture_fraction = (config->GetNControlVars() == 3); + nVar = flamelet_config_options.n_scalars; + include_mixture_fraction = (flamelet_config_options.n_control_vars == 3); Initialize(geometry, config, iMesh, nVar); @@ -73,12 +77,12 @@ void CSpeciesFlameletSolver::Preprocessing(CGeometry* geometry, CSolver** solver auto* flowNodes = su2staticcast_p(solver_container[FLOW_SOL]->GetNodes()); /*--- Retrieve spark ignition parameters for spark-type ignition. ---*/ - if ((config->GetFlameletInitType() == FLAMELET_INIT_TYPE::SPARK) && !config->GetRestart()) { - auto spark_init = config->GetFlameInit(); + if ((flamelet_config_options.ignition_method == FLAMELET_INIT_TYPE::SPARK)) { + auto spark_init = flamelet_config_options.spark_init; spark_iter_start = ceil(spark_init[4]); spark_duration = ceil(spark_init[5]); unsigned long iter = config->GetMultizone_Problem() ? config->GetOuterIter() : config->GetInnerIter(); - ignition = ((iter >= spark_iter_start) && (iter <= (spark_iter_start + spark_duration)) && !config->GetRestart()); + ignition = ((iter >= spark_iter_start) && (iter <= (spark_iter_start + spark_duration))); } SU2_OMP_SAFE_GLOBAL_ACCESS(config->SetGlobalParam(config->GetKind_Solver(), RunTime_EqSystem);) @@ -95,18 +99,18 @@ void CSpeciesFlameletSolver::Preprocessing(CGeometry* geometry, CSolver** solver if (ignition) { /*--- Apply source terms within spark radius. ---*/ su2double dist_from_center = 0, - spark_radius = config->GetFlameInit()[3]; - dist_from_center = GeometryToolbox::SquaredDistance(nDim, geometry->nodes->GetCoord(i_point), config->GetFlameInit()); + spark_radius = flamelet_config_options.spark_init[3]; + dist_from_center = GeometryToolbox::SquaredDistance(nDim, geometry->nodes->GetCoord(i_point), flamelet_config_options.spark_init.data()); if (dist_from_center < pow(spark_radius,2)) { for (auto iVar = 0u; iVar < nVar; iVar++) - nodes->SetScalarSource(i_point, iVar, nodes->GetScalarSources(i_point)[iVar] + config->GetSpark()[iVar]); + nodes->SetScalarSource(i_point, iVar, nodes->GetScalarSources(i_point)[iVar] + flamelet_config_options.spark_reaction_rates[iVar]); } } nodes->SetTableMisses(i_point, misses); n_not_in_domain_local += misses; /*--- Obtain passive look-up scalars. ---*/ - SetScalarLookUps(config, fluid_model_local, i_point, scalars_vector); + SetScalarLookUps(fluid_model_local, i_point, scalars_vector); /*--- Set mass diffusivity based on thermodynamic state. ---*/ auto T = flowNodes->GetTemperature(i_point); @@ -117,8 +121,8 @@ void CSpeciesFlameletSolver::Preprocessing(CGeometry* geometry, CSolver** solver } /*--- Obtain preferential diffusion scalar values. ---*/ - if (config->GetPreferentialDiffusion()) - SetPreferentialDiffusionScalars(config, fluid_model_local, i_point, scalars_vector); + if (flamelet_config_options.preferential_diffusion) + SetPreferentialDiffusionScalars(fluid_model_local, i_point, scalars_vector); if (!Output) LinSysRes.SetBlock_Zero(i_point); } @@ -130,7 +134,7 @@ void CSpeciesFlameletSolver::Preprocessing(CGeometry* geometry, CSolver** solver cout << "Number of points outside manifold domain: " << n_not_in_domain_global << endl; /*--- Compute preferential diffusion scalar gradients. ---*/ - if (config->GetPreferentialDiffusion()) { + if (flamelet_config_options.preferential_diffusion) { switch (config->GetKind_Gradient_Method()) { case GREEN_GAUSS: SetAuxVar_Gradient_GG(geometry, config); @@ -157,11 +161,11 @@ void CSpeciesFlameletSolver::SetInitialCondition(CGeometry** geometry, CSolver** su2double flame_offset[3] = {0, 0, 0}, flame_normal[3] = {0, 0, 0}, flame_thickness = 0, flame_burnt_thickness = 0, flamenorm = 0; - bool flame_front_ignition = (config->GetFlameletInitType() == FLAMELET_INIT_TYPE::FLAME_FRONT); + bool flame_front_ignition = (flamelet_config_options.ignition_method == FLAMELET_INIT_TYPE::FLAME_FRONT); if (flame_front_ignition) { /*--- Collect flame front ignition parameters. ---*/ - auto flame_init = config->GetFlameInit(); + auto flame_init = flamelet_config_options.flame_init; for (auto iDim = 0u; iDim < 3; ++iDim) { flame_offset[iDim] = flame_init[iDim]; flame_normal[iDim] = flame_init[3 + iDim]; @@ -179,11 +183,11 @@ void CSpeciesFlameletSolver::SetInitialCondition(CGeometry** geometry, CSolver** if (rank == MASTER_NODE) { cout << "initial condition: T = " << temp_inlet << endl; - for (auto iCV = 0u; iCV < config->GetNControlVars(); iCV++) { - const auto& cv_name = config->GetControllingVariableName(iCV); + for (auto iCV = 0u; iCV < flamelet_config_options.n_control_vars; iCV++) { + const auto& cv_name = flamelet_config_options.controlling_variable_names[iCV]; cout << "initial condition: " << cv_name << " = " << config->GetSpecies_Init()[iCV] << endl; } - switch (config->GetFlameletInitType()) { + switch (flamelet_config_options.ignition_method) { case FLAMELET_INIT_TYPE::FLAME_FRONT: cout << "Ignition with a straight flame front" << endl; break; @@ -214,12 +218,14 @@ void CSpeciesFlameletSolver::SetInitialCondition(CGeometry** geometry, CSolver** scalar_init[I_ENTH] = enth_inlet; prog_unburnt = config->GetSpecies_Init()[I_PROGVAR]; - prog_burnt = GetBurntProgressVariable(fluid_model_local, scalar_init); SU2_OMP_FOR_STAT(omp_chunk_size) for (unsigned long i_point = 0; i_point < nPoint; i_point++) { auto coords = geometry[i_mesh]->nodes->GetCoord(i_point); if (flame_front_ignition) { + + prog_burnt = GetBurntProgressVariable(fluid_model_local, scalar_init); + /*--- Determine if point is above or below the plane, assuming the normal is pointing towards the burned region. ---*/ point_loc = 0.0; @@ -258,7 +264,7 @@ void CSpeciesFlameletSolver::SetInitialCondition(CGeometry** geometry, CSolver** n_not_in_domain_local += fluid_model_local->GetExtrapolation(); /* --- Initialize the auxiliary transported scalars (not controlling variables). --- */ - for (int i_scalar = config->GetNControlVars(); i_scalar < config->GetNScalars(); ++i_scalar) { + for (int i_scalar = flamelet_config_options.n_control_vars; i_scalar < flamelet_config_options.n_scalars; ++i_scalar) { scalar_init[i_scalar] = config->GetSpecies_Init()[i_scalar]; } @@ -506,40 +512,40 @@ unsigned long CSpeciesFlameletSolver::SetScalarSources(const CConfig* config, CF unsigned long iPoint, const vector& scalars) { /*--- Compute total source terms from the production and consumption. ---*/ - vector table_sources(config->GetNControlVars() + 2 * config->GetNUserScalars()); + vector table_sources(flamelet_config_options.n_control_vars + 2 * flamelet_config_options.n_user_scalars); unsigned long misses = fluid_model_local->EvaluateDataSet(scalars, FLAMELET_LOOKUP_OPS::SOURCES, table_sources); table_sources[I_PROGVAR] = fmax(0, table_sources[I_PROGVAR]); nodes->SetTableMisses(iPoint, misses); /*--- The source term for progress variable is always positive, we clip from below to makes sure. --- */ - vector source_scalar(config->GetNScalars()); - for (auto iCV = 0u; iCV < config->GetNControlVars(); iCV++) source_scalar[iCV] = table_sources[iCV]; + vector source_scalar(flamelet_config_options.n_scalars); + for (auto iCV = 0u; iCV < flamelet_config_options.n_control_vars; iCV++) source_scalar[iCV] = table_sources[iCV]; /*--- Source term for the auxiliary species transport equations. ---*/ - for (size_t i_aux = 0; i_aux < config->GetNUserScalars(); i_aux++) { + for (size_t i_aux = 0; i_aux < flamelet_config_options.n_user_scalars; i_aux++) { /*--- The source term for the auxiliary equations consists of a production term and a consumption term: S_TOT = S_PROD + S_CONS * Y ---*/ - su2double y_aux = scalars[config->GetNControlVars() + i_aux]; - su2double source_prod = table_sources[config->GetNControlVars() + 2 * i_aux]; - su2double source_cons = table_sources[config->GetNControlVars() + 2 * i_aux + 1]; - source_scalar[config->GetNControlVars() + i_aux] = source_prod + source_cons * y_aux; + su2double y_aux = scalars[flamelet_config_options.n_control_vars + i_aux]; + su2double source_prod = table_sources[flamelet_config_options.n_control_vars + 2 * i_aux]; + su2double source_cons = table_sources[flamelet_config_options.n_control_vars + 2 * i_aux + 1]; + source_scalar[flamelet_config_options.n_control_vars + i_aux] = source_prod + source_cons * y_aux; } for (auto i_scalar = 0u; i_scalar < nVar; i_scalar++) nodes->SetScalarSource(iPoint, i_scalar, source_scalar[i_scalar]); return misses; } -unsigned long CSpeciesFlameletSolver::SetScalarLookUps(const CConfig* config, CFluidModel* fluid_model_local, +unsigned long CSpeciesFlameletSolver::SetScalarLookUps(CFluidModel* fluid_model_local, unsigned long iPoint, const vector& scalars) { /*--- Retrieve the passive look-up variables from the manifold. ---*/ unsigned long misses{0}; /*--- Skip if no passive look-ups are listed ---*/ - if (config->GetNLookups() > 0) { - vector lookup_scalar(config->GetNLookups()); + if (flamelet_config_options.n_lookups > 0) { + vector lookup_scalar(flamelet_config_options.n_lookups); misses = fluid_model_local->EvaluateDataSet(scalars, FLAMELET_LOOKUP_OPS::LOOKUP, lookup_scalar); - for (auto i_lookup = 0u; i_lookup < config->GetNLookups(); i_lookup++) { + for (auto i_lookup = 0u; i_lookup < flamelet_config_options.n_lookups; i_lookup++) { nodes->SetLookupScalar(iPoint, lookup_scalar[i_lookup], i_lookup); } } @@ -547,8 +553,7 @@ unsigned long CSpeciesFlameletSolver::SetScalarLookUps(const CConfig* config, CF return misses; } -unsigned long CSpeciesFlameletSolver::SetPreferentialDiffusionScalars(const CConfig* config, - CFluidModel* fluid_model_local, +unsigned long CSpeciesFlameletSolver::SetPreferentialDiffusionScalars(CFluidModel* fluid_model_local, unsigned long iPoint, const vector& scalars) { /*--- Retrieve the preferential diffusion scalar values from the manifold. ---*/ @@ -566,7 +571,7 @@ void CSpeciesFlameletSolver::Viscous_Residual(const unsigned long iEdge, const C CNumerics* numerics, const CConfig* config) { /*--- Overloaded viscous residual method which accounts for preferential diffusion. ---*/ const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT), - PreferentialDiffusion = config->GetPreferentialDiffusion(); + PreferentialDiffusion = flamelet_config_options.preferential_diffusion; /*--- Points in edge ---*/ auto iPoint = geometry->edges->GetNode(iEdge, 0); @@ -592,7 +597,7 @@ void CSpeciesFlameletSolver::Viscous_Residual(const unsigned long iEdge, const C diff_coeff_beta_j[MAXNVAR] = {0}; // Number of active transport scalars - const auto n_CV = config->GetNControlVars(); + const auto n_CV = flamelet_config_options.n_control_vars; su2activematrix scalar_grad_i(MAXNVAR, MAXNDIM), scalar_grad_j(MAXNVAR, MAXNDIM); /*--- Looping over spatial dimensions to fill in the diffusion scalar gradients. ---*/ diff --git a/SU2_CFD/src/solvers/CSpeciesSolver.cpp b/SU2_CFD/src/solvers/CSpeciesSolver.cpp index 9d7c4494c516..306732566266 100644 --- a/SU2_CFD/src/solvers/CSpeciesSolver.cpp +++ b/SU2_CFD/src/solvers/CSpeciesSolver.cpp @@ -2,14 +2,14 @@ * \file CSpeciesSolver.cpp * \brief Main subroutines of CSpeciesSolver class * \author T. Kattmann - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/solvers/CTemplateSolver.cpp b/SU2_CFD/src/solvers/CTemplateSolver.cpp index 5a10e76cc42c..f52d38e19ffc 100644 --- a/SU2_CFD/src/solvers/CTemplateSolver.cpp +++ b/SU2_CFD/src/solvers/CTemplateSolver.cpp @@ -2,14 +2,14 @@ * \file CTemplateSolver.cpp * \brief Subroutines to be implemented for any new solvers * \author F. Palacios - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/solvers/CTransLMSolver.cpp b/SU2_CFD/src/solvers/CTransLMSolver.cpp index ca0ea0cdacf2..8a872799a4d5 100644 --- a/SU2_CFD/src/solvers/CTransLMSolver.cpp +++ b/SU2_CFD/src/solvers/CTransLMSolver.cpp @@ -2,14 +2,14 @@ * \file CTransLMSolver.cpp * \brief Main subroutines for Langtry-Menter Transition model solver. * \author A. Aranake, S. Kang. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/solvers/CTurbSASolver.cpp b/SU2_CFD/src/solvers/CTurbSASolver.cpp index 6b465e802fd8..4a0d54a95176 100644 --- a/SU2_CFD/src/solvers/CTurbSASolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSASolver.cpp @@ -2,14 +2,14 @@ * \file CTurbSASolver.cpp * \brief Main subroutines of CTurbSASolver class * \author F. Palacios, A. Bueno - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -309,7 +309,7 @@ void CTurbSASolver::Source_Residual(CGeometry *geometry, CSolver **solver_contai CNumerics **numerics_container, CConfig *config, unsigned short iMesh) { bool axisymmetric = config->GetAxisymmetric(); - + const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); const bool harmonic_balance = (config->GetTime_Marching() == TIME_MARCHING::HARMONIC_BALANCE); const bool transition_BC = config->GetSAParsedOptions().bc; @@ -389,7 +389,7 @@ void CTurbSASolver::Source_Residual(CGeometry *geometry, CSolver **solver_contai /*--- Set y coordinate ---*/ numerics->SetCoord(geometry->nodes->GetCoord(iPoint), geometry->nodes->GetCoord(iPoint)); } - + /*--- Compute the source term ---*/ auto residual = numerics->ComputeResidual(config); @@ -500,7 +500,7 @@ void CTurbSASolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_conta Res_Wall = coeff*RoughWallBC*Area; LinSysRes.SubtractBlock(iPoint, &Res_Wall); - su2double Jacobian_i = (laminar_viscosity*Area)/(0.03*Roughness_Height*sigma); + su2double Jacobian_i = (laminar_viscosity /density *Area)/(0.03*Roughness_Height*sigma); Jacobian_i += 2.0*RoughWallBC*Area/sigma; if (implicit) Jacobian.AddVal2Diag(iPoint, -Jacobian_i); } diff --git a/SU2_CFD/src/solvers/CTurbSSTSolver.cpp b/SU2_CFD/src/solvers/CTurbSSTSolver.cpp index 02b91c8ab2cf..9fee88d18760 100644 --- a/SU2_CFD/src/solvers/CTurbSSTSolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSSTSolver.cpp @@ -2,14 +2,14 @@ * \file CTurbSSTSolver.cpp * \brief Main subroutines of CTurbSSTSolver class * \author F. Palacios, A. Bueno - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -230,7 +230,7 @@ void CTurbSSTSolver::Postprocessing(CGeometry *geometry, CSolver **solver_contai const su2double dist = geometry->nodes->GetWall_Distance(iPoint); const su2double VorticityMag = max(GeometryToolbox::Norm(3, flowNodes->GetVorticity(iPoint)), 1e-12); - const su2double StrainMag = max(nodes->GetStrainMag(iPoint), 1e-12); + const su2double StrainMag = max(flowNodes->GetStrainMag(iPoint), 1e-12); nodes->SetBlendingFunc(iPoint, mu, dist, rho, config->GetKind_Trans_Model()); const su2double F2 = nodes->GetF2blending(iPoint); @@ -251,37 +251,37 @@ void CTurbSSTSolver::Postprocessing(CGeometry *geometry, CSolver **solver_contai /*--- Compute turbulence index ---*/ if (config->GetKind_Trans_Model() != TURB_TRANS_MODEL::NONE) { - for (auto iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) - if (config->GetViscous_Wall(iMarker)) { - SU2_OMP_FOR_STAT(OMP_MIN_SIZE) - for (auto iVertex = 0u; iVertex < geometry->nVertex[iMarker]; iVertex++) { - const auto iPoint = geometry->vertex[iMarker][iVertex]->GetNode(); + for (auto iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { + if (!config->GetViscous_Wall(iMarker)) continue; - /*--- Check if the node belongs to the domain (i.e, not a halo node) ---*/ + SU2_OMP_FOR_STAT(OMP_MIN_SIZE) + for (auto iVertex = 0u; iVertex < geometry->nVertex[iMarker]; iVertex++) { + const auto iPoint = geometry->vertex[iMarker][iVertex]->GetNode(); - if (geometry->nodes->GetDomain(iPoint)) { - const auto jPoint = geometry->vertex[iMarker][iVertex]->GetNormal_Neighbor(); + /*--- Check if the node belongs to the domain (i.e, not a halo node) ---*/ - su2double shearStress = 0.0; - for(auto iDim = 0u; iDim < nDim; iDim++) { - shearStress += pow(solver_container[FLOW_SOL]->GetCSkinFriction(iMarker, iVertex, iDim), 2.0); - } - shearStress = sqrt(shearStress); + if (!geometry->nodes->GetDomain(iPoint)) continue; - const su2double FrictionVelocity = sqrt(shearStress/flowNodes->GetDensity(iPoint)); - const su2double wall_dist = geometry->nodes->GetWall_Distance(jPoint); - const su2double Derivative = flowNodes->GetLaminarViscosity(jPoint) * pow(nodes->GetSolution(jPoint, 0), 0.673) / wall_dist; - const su2double turbulence_index = 6.1 * Derivative / pow(FrictionVelocity, 2.346); + const auto jPoint = geometry->vertex[iMarker][iVertex]->GetNormal_Neighbor(); - nodes->SetTurbIndex(iPoint, turbulence_index); - - } + su2double shearStress = 0.0; + for(auto iDim = 0u; iDim < nDim; iDim++) { + shearStress += pow(solver_container[FLOW_SOL]->GetCSkinFriction(iMarker, iVertex, iDim), 2.0); } - END_SU2_OMP_FOR + shearStress = sqrt(shearStress); + + const su2double FrictionVelocity = sqrt(shearStress/flowNodes->GetDensity(iPoint)); + const su2double wall_dist = geometry->vertex[iMarker][iVertex]->GetNearestNeighborDistance(); + + const su2double Derivative = flowNodes->GetLaminarViscosity(jPoint) * pow(nodes->GetSolution(jPoint, 0), 0.673) / wall_dist; + const su2double turbulence_index = 6.1 * Derivative / pow(FrictionVelocity, 2.346); + + nodes->SetTurbIndex(iPoint, turbulence_index); } + END_SU2_OMP_FOR + } } - AD::EndNoSharedReading(); } @@ -459,20 +459,16 @@ void CTurbSSTSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_cont } else { // smooth wall /*--- distance to closest neighbor ---*/ - const auto jPoint = geometry->vertex[val_marker][iVertex]->GetNormal_Neighbor(); + su2double wall_dist = geometry->vertex[val_marker][iVertex]->GetNearestNeighborDistance(); - su2double distance2 = GeometryToolbox::SquaredDistance(nDim, - geometry->nodes->GetCoord(iPoint), - geometry->nodes->GetCoord(jPoint)); /*--- Set wall values ---*/ - - su2double density = solver_container[FLOW_SOL]->GetNodes()->GetDensity(jPoint); - su2double laminar_viscosity = solver_container[FLOW_SOL]->GetNodes()->GetLaminarViscosity(jPoint); + su2double density = solver_container[FLOW_SOL]->GetNodes()->GetDensity(iPoint); + su2double laminar_viscosity = solver_container[FLOW_SOL]->GetNodes()->GetLaminarViscosity(iPoint); su2double beta_1 = constants[4]; su2double solution[MAXNVAR]; solution[0] = 0.0; - solution[1] = 60.0*laminar_viscosity/(density*beta_1*distance2); + solution[1] = 60.0*laminar_viscosity/(density*beta_1*pow(wall_dist,2)); /*--- Set the solution values and zero the residual ---*/ nodes->SetSolution_Old(iPoint,solution); @@ -1012,8 +1008,7 @@ su2double CTurbSSTSolver::GetInletAtVertex(unsigned short iMarker, unsigned long su2double Normal[MAXNDIM] = {0.0}; geometry->vertex[iMarker][iVertex]->GetNormal(Normal); - return GeometryToolbox::Norm(nDim, Normal); -} + return GeometryToolbox::Norm(nDim, Normal);} void CTurbSSTSolver::SetUniformInlet(const CConfig* config, unsigned short iMarker) { if (config->GetMarker_All_KindBC(iMarker) == INLET_FLOW) { diff --git a/SU2_CFD/src/solvers/CTurbSolver.cpp b/SU2_CFD/src/solvers/CTurbSolver.cpp index 2340369c0c77..1b668144c0d4 100644 --- a/SU2_CFD/src/solvers/CTurbSolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSolver.cpp @@ -2,14 +2,14 @@ * \file CTurbSolver.cpp * \brief Main subroutines of CTurbSolver class * \author F. Palacios, A. Bueno - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -236,3 +236,12 @@ void CTurbSolver::Impose_Fixed_Values(const CGeometry *geometry, const CConfig * } } + +unsigned long CTurbSolver::RegisterSolutionExtra(bool input, const CConfig* config) { + + /*--- Register muT as input/output of a RANS iteration. ---*/ + nodes->RegisterEddyViscosity(input); + + /*--- We don't need to save adjoint values for muT. ---*/ + return 0; +} diff --git a/SU2_CFD/src/variables/CAdjEulerVariable.cpp b/SU2_CFD/src/variables/CAdjEulerVariable.cpp index ca29fe2e4456..d0adee3a4c1f 100644 --- a/SU2_CFD/src/variables/CAdjEulerVariable.cpp +++ b/SU2_CFD/src/variables/CAdjEulerVariable.cpp @@ -2,14 +2,14 @@ * \file CAdjEulerVariable.cpp * \brief Definition of the solution fields. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/variables/CAdjNSVariable.cpp b/SU2_CFD/src/variables/CAdjNSVariable.cpp index 5ca1483853dd..255ab3e1d882 100644 --- a/SU2_CFD/src/variables/CAdjNSVariable.cpp +++ b/SU2_CFD/src/variables/CAdjNSVariable.cpp @@ -2,14 +2,14 @@ * \file CAdjNSVariable.cpp * \brief Definition of the solution fields. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/variables/CAdjTurbVariable.cpp b/SU2_CFD/src/variables/CAdjTurbVariable.cpp index 16e5806484c1..c58bc9c276ba 100644 --- a/SU2_CFD/src/variables/CAdjTurbVariable.cpp +++ b/SU2_CFD/src/variables/CAdjTurbVariable.cpp @@ -2,14 +2,14 @@ * \file CAdjTurbVariable.cpp * \brief Definition of the solution fields. * \author F. Palacios, A. Bueno - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/variables/CBaselineVariable.cpp b/SU2_CFD/src/variables/CBaselineVariable.cpp index 76874884088d..d7bdb190f256 100644 --- a/SU2_CFD/src/variables/CBaselineVariable.cpp +++ b/SU2_CFD/src/variables/CBaselineVariable.cpp @@ -2,14 +2,14 @@ * \file CBaselineVariable.cpp * \brief Definition of the solution fields. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/variables/CDiscAdjFEABoundVariable.cpp b/SU2_CFD/src/variables/CDiscAdjFEABoundVariable.cpp index ec22f82b6f0f..8668b696b20f 100644 --- a/SU2_CFD/src/variables/CDiscAdjFEABoundVariable.cpp +++ b/SU2_CFD/src/variables/CDiscAdjFEABoundVariable.cpp @@ -2,14 +2,14 @@ * \file CDiscAdjFEAVariable.cpp * \brief Definition of the variables for FEM adjoint elastic structural problems. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/variables/CDiscAdjMeshBoundVariable.cpp b/SU2_CFD/src/variables/CDiscAdjMeshBoundVariable.cpp index c4ecb0e9f7a3..febda47b6cc8 100644 --- a/SU2_CFD/src/variables/CDiscAdjMeshBoundVariable.cpp +++ b/SU2_CFD/src/variables/CDiscAdjMeshBoundVariable.cpp @@ -2,14 +2,14 @@ * \file CDiscAdjMeshVariable.cpp * \brief Main subroutines for the discrete adjoint mesh variable structure. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/variables/CDiscAdjVariable.cpp b/SU2_CFD/src/variables/CDiscAdjVariable.cpp index dea77867329b..145ef6d50cbb 100644 --- a/SU2_CFD/src/variables/CDiscAdjVariable.cpp +++ b/SU2_CFD/src/variables/CDiscAdjVariable.cpp @@ -2,14 +2,14 @@ * \file CDiscAdjVariable.cpp * \brief Main subroutines for the discrete adjoint variable structure. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/variables/CEulerVariable.cpp b/SU2_CFD/src/variables/CEulerVariable.cpp index a3cc7e6e2c9b..935b082879a6 100644 --- a/SU2_CFD/src/variables/CEulerVariable.cpp +++ b/SU2_CFD/src/variables/CEulerVariable.cpp @@ -2,14 +2,14 @@ * \file CEulerVariable.cpp * \brief Definition of the solution fields. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -30,7 +30,8 @@ CEulerVariable::CEulerVariable(su2double density, const su2double *velocity, su2double energy, unsigned long npoint, unsigned long ndim, unsigned long nvar, const CConfig *config) - : CFlowVariable(npoint, ndim, nvar, ndim + 9, ndim + 4, config), + : CFlowVariable(npoint, ndim, nvar, ndim + 9, + ndim + (config->GetKind_ConvNumScheme_Flow() == SPACE_CENTERED && !config->GetContinuous_Adjoint() ? 1 : 4), config), indices(ndim, 0) { const bool dual_time = (config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_1ST) || @@ -77,7 +78,7 @@ CEulerVariable::CEulerVariable(su2double density, const su2double *velocity, su2 Grad_AuxVar.resize(nPoint, nAuxVar, nDim, 0.0); AuxVar.resize(nPoint, nAuxVar) = su2double(0.0); } - + if (config->GetKind_FluidModel() == ENUM_FLUIDMODEL::DATADRIVEN_FLUID){ DataDrivenFluid = true; DatasetExtrapolation.resize(nPoint) = 0; diff --git a/SU2_CFD/src/variables/CFEABoundVariable.cpp b/SU2_CFD/src/variables/CFEABoundVariable.cpp index fe3fefe00204..b361835d5c1d 100644 --- a/SU2_CFD/src/variables/CFEABoundVariable.cpp +++ b/SU2_CFD/src/variables/CFEABoundVariable.cpp @@ -2,14 +2,14 @@ * \file CFEABoundVariable.cpp * \brief Definition of the variables for FEM elastic structural problems. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/variables/CFEAVariable.cpp b/SU2_CFD/src/variables/CFEAVariable.cpp index 7e486af3a21b..34ba7eca4d7e 100644 --- a/SU2_CFD/src/variables/CFEAVariable.cpp +++ b/SU2_CFD/src/variables/CFEAVariable.cpp @@ -2,14 +2,14 @@ * \file CFEAVariable.cpp * \brief Definition of the variables for FEM elastic structural problems. * \author R. Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -46,7 +46,7 @@ CFEAVariable::CFEAVariable(const su2double *val_fea, unsigned long npoint, unsig * still work as expected for the primal solver). ---*/ const bool dynamic_analysis = config->GetTime_Domain(); - const bool body_forces = config->GetDeadLoad(); + const bool body_forces = config->GetGravityForce() || config->GetBody_Force() || config->GetCentrifugalForce(); const bool prestretch_fem = config->GetPrestretch(); // Structure is prestretched const bool discrete_adjoint = config->GetDiscrete_Adjoint(); const bool refgeom = config->GetRefGeom(); // Reference geometry needs to be stored diff --git a/SU2_CFD/src/variables/CFlowVariable.cpp b/SU2_CFD/src/variables/CFlowVariable.cpp index db13f4f5521b..73bea8437868 100644 --- a/SU2_CFD/src/variables/CFlowVariable.cpp +++ b/SU2_CFD/src/variables/CFlowVariable.cpp @@ -1,14 +1,14 @@ /*! * \file CFlowVariable.cpp * \brief Definition of common solution fields for flow solvers. - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/variables/CHeatVariable.cpp b/SU2_CFD/src/variables/CHeatVariable.cpp index c0784ad21d00..de1d194c8075 100644 --- a/SU2_CFD/src/variables/CHeatVariable.cpp +++ b/SU2_CFD/src/variables/CHeatVariable.cpp @@ -2,14 +2,14 @@ * \file CHeatVariable.cpp * \brief Definition of the variables for heat equation problems. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/variables/CIncEulerVariable.cpp b/SU2_CFD/src/variables/CIncEulerVariable.cpp index 929fcf84245d..73cc9c94a835 100644 --- a/SU2_CFD/src/variables/CIncEulerVariable.cpp +++ b/SU2_CFD/src/variables/CIncEulerVariable.cpp @@ -2,14 +2,14 @@ * \file CIncEulerVariable.cpp * \brief Definition of the variable classes for incompressible flow. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -30,7 +30,8 @@ CIncEulerVariable::CIncEulerVariable(su2double pressure, const su2double *velocity, su2double temperature, unsigned long npoint, unsigned long ndim, unsigned long nvar, const CConfig *config) - : CFlowVariable(npoint, ndim, nvar, ndim + 9, ndim + 4, config), + : CFlowVariable(npoint, ndim, nvar, ndim + 9, + ndim + (config->GetKind_ConvNumScheme_Flow() == SPACE_CENTERED ? 2 : 4), config), indices(ndim, 0) { const bool dual_time = (config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_1ST) || diff --git a/SU2_CFD/src/variables/CIncNSVariable.cpp b/SU2_CFD/src/variables/CIncNSVariable.cpp index cbcfa3b0aad6..38e5627b3c24 100644 --- a/SU2_CFD/src/variables/CIncNSVariable.cpp +++ b/SU2_CFD/src/variables/CIncNSVariable.cpp @@ -2,14 +2,14 @@ * \file CIncNSVariable.cpp * \brief Definition of the variable classes for incompressible flow. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/variables/CMeshBoundVariable.cpp b/SU2_CFD/src/variables/CMeshBoundVariable.cpp index dad56c1972a8..abf3d862f9ea 100644 --- a/SU2_CFD/src/variables/CMeshBoundVariable.cpp +++ b/SU2_CFD/src/variables/CMeshBoundVariable.cpp @@ -2,14 +2,14 @@ * \file CMeshBoundVariable.cpp * \brief Definition of the boundary variables for mesh motion using a pseudo-elastic approach. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/variables/CMeshElement.cpp b/SU2_CFD/src/variables/CMeshElement.cpp index d5d538e5a0b2..8d0d089e6ad7 100644 --- a/SU2_CFD/src/variables/CMeshElement.cpp +++ b/SU2_CFD/src/variables/CMeshElement.cpp @@ -2,14 +2,14 @@ * \file CMeshElement.cpp * \brief Definition of the mesh elements for mesh deformation using a pseudo-elastic approach. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/variables/CMeshVariable.cpp b/SU2_CFD/src/variables/CMeshVariable.cpp index 5efc109e3aff..ba23e65075f0 100644 --- a/SU2_CFD/src/variables/CMeshVariable.cpp +++ b/SU2_CFD/src/variables/CMeshVariable.cpp @@ -2,14 +2,14 @@ * \file CMeshVariable.cpp * \brief Definition of the variables for mesh motion using a pseudo-elastic approach. * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/variables/CNEMOEulerVariable.cpp b/SU2_CFD/src/variables/CNEMOEulerVariable.cpp index 8386ed3b6162..49604c097f8b 100644 --- a/SU2_CFD/src/variables/CNEMOEulerVariable.cpp +++ b/SU2_CFD/src/variables/CNEMOEulerVariable.cpp @@ -2,14 +2,14 @@ * \file CNEMOEulerVariable.cpp * \brief Definition of the solution fields. * \author C. Garbacz, W. Maier, S.R. Copeland - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/variables/CNEMONSVariable.cpp b/SU2_CFD/src/variables/CNEMONSVariable.cpp index c94d5408630f..3d2b781353dc 100644 --- a/SU2_CFD/src/variables/CNEMONSVariable.cpp +++ b/SU2_CFD/src/variables/CNEMONSVariable.cpp @@ -2,14 +2,14 @@ * \file CNEMONSVariable.cpp * \brief Definition of the solution fields. * \author C. Garbacz, W. Maier, S.R. Copeland - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/variables/CNSVariable.cpp b/SU2_CFD/src/variables/CNSVariable.cpp index 5b67a0bdbb8e..a03c95124594 100644 --- a/SU2_CFD/src/variables/CNSVariable.cpp +++ b/SU2_CFD/src/variables/CNSVariable.cpp @@ -2,14 +2,14 @@ * \file CNSVariable.cpp * \brief Definition of the solution fields. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -114,6 +114,8 @@ void CNSVariable::SetRoe_Dissipation_FD(unsigned long iPoint, su2double val_wall AD::SetPreaccIn(Primitive(iPoint, indices.EddyViscosity())); /*--- Laminar viscosity --- */ AD::SetPreaccIn(Primitive(iPoint, indices.LaminarViscosity())); + /*--- Density; GetDensity reads from Solution (not Primitive) at index 0 ---*/ + AD::SetPreaccIn(Solution(iPoint, 0)); su2double uijuij = 0.0; diff --git a/SU2_CFD/src/variables/CRadP1Variable.cpp b/SU2_CFD/src/variables/CRadP1Variable.cpp index bae525f40c26..bec3c5049572 100644 --- a/SU2_CFD/src/variables/CRadP1Variable.cpp +++ b/SU2_CFD/src/variables/CRadP1Variable.cpp @@ -2,14 +2,14 @@ * \file CRadP1Variable.cpp * \brief Definition of the P1 model variables * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/variables/CRadVariable.cpp b/SU2_CFD/src/variables/CRadVariable.cpp index 4f6d74f88123..dc018a950763 100644 --- a/SU2_CFD/src/variables/CRadVariable.cpp +++ b/SU2_CFD/src/variables/CRadVariable.cpp @@ -2,14 +2,14 @@ * \file CRadVariable.cpp * \brief Definition of the radiation variables * \author Ruben Sanchez - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/variables/CScalarVariable.cpp b/SU2_CFD/src/variables/CScalarVariable.cpp index 08421ee0b658..a7c2c759fd6a 100644 --- a/SU2_CFD/src/variables/CScalarVariable.cpp +++ b/SU2_CFD/src/variables/CScalarVariable.cpp @@ -2,14 +2,14 @@ * \file CScalarVariable.cpp * \brief Definition of the solution fields. * \author F. Palacios, A. Bueno - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/variables/CSobolevSmoothingVariable.cpp b/SU2_CFD/src/variables/CSobolevSmoothingVariable.cpp index ccf8a00702e8..13da87c731b6 100644 --- a/SU2_CFD/src/variables/CSobolevSmoothingVariable.cpp +++ b/SU2_CFD/src/variables/CSobolevSmoothingVariable.cpp @@ -2,14 +2,14 @@ * \file CSobolevSmoothingVariable.cpp * \brief Definition of the variables for gradient smoothing problems. * \author T. Dick - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/variables/CSpeciesFlameletVariable.cpp b/SU2_CFD/src/variables/CSpeciesFlameletVariable.cpp index 9b8d9b562126..f30b2a9b8437 100644 --- a/SU2_CFD/src/variables/CSpeciesFlameletVariable.cpp +++ b/SU2_CFD/src/variables/CSpeciesFlameletVariable.cpp @@ -2,14 +2,14 @@ * \file CSpeciesFlameletVariable.cpp * \brief Definition of the variable fields for the flamelet class. * \author D. Mayer, T. Economon, N. Beishuizen - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -49,12 +49,12 @@ CSpeciesFlameletVariable::CSpeciesFlameletVariable(const su2double* species_inf, Res_TruncError.resize(nPoint, nVar) = su2double(0.0); /* 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); + const auto& flamelet_config_options = config->GetFlameletParsedOptions(); + source_scalar.resize(nPoint, flamelet_config_options.n_scalars) = su2double(0.0); + lookup_scalar.resize(nPoint, flamelet_config_options.n_lookups) = su2double(0.0); table_misses.resize(nPoint) = 0; - if (config->GetPreferentialDiffusion()) { + if (flamelet_config_options.preferential_diffusion) { AuxVar.resize(nPoint, FLAMELET_PREF_DIFF_SCALARS::N_BETA_TERMS) = su2double(0.0); Grad_AuxVar.resize(nPoint, FLAMELET_PREF_DIFF_SCALARS::N_BETA_TERMS, nDim, 0.0); } diff --git a/SU2_CFD/src/variables/CSpeciesVariable.cpp b/SU2_CFD/src/variables/CSpeciesVariable.cpp index 5715ae784cab..66477830cab9 100644 --- a/SU2_CFD/src/variables/CSpeciesVariable.cpp +++ b/SU2_CFD/src/variables/CSpeciesVariable.cpp @@ -2,14 +2,14 @@ * \file CSpeciesVariable.cpp * \brief Definition of the solution fields. * \author T. Kattmann - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/variables/CTransLMVariable.cpp b/SU2_CFD/src/variables/CTransLMVariable.cpp index 6ea1c088b84b..99867ff95389 100644 --- a/SU2_CFD/src/variables/CTransLMVariable.cpp +++ b/SU2_CFD/src/variables/CTransLMVariable.cpp @@ -2,14 +2,14 @@ * \file CTransLMVariable.cpp * \brief Definition of the solution fields. * \author A. Aranake, S. Kang - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/variables/CTurbSAVariable.cpp b/SU2_CFD/src/variables/CTurbSAVariable.cpp index d7091f8be59a..72afca8ddc66 100644 --- a/SU2_CFD/src/variables/CTurbSAVariable.cpp +++ b/SU2_CFD/src/variables/CTurbSAVariable.cpp @@ -2,14 +2,14 @@ * \file CTurbSAVariable.cpp * \brief Definition of the solution fields. * \author F. Palacios, A. Bueno - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/variables/CTurbSSTVariable.cpp b/SU2_CFD/src/variables/CTurbSSTVariable.cpp index d1fd98c8a14a..f4498900e92f 100644 --- a/SU2_CFD/src/variables/CTurbSSTVariable.cpp +++ b/SU2_CFD/src/variables/CTurbSSTVariable.cpp @@ -2,14 +2,14 @@ * \file CTurbSSTVariable.cpp * \brief Definition of the solution fields. * \author F. Palacios, A. Bueno - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_CFD/src/variables/CTurbVariable.cpp b/SU2_CFD/src/variables/CTurbVariable.cpp index 46b686766a78..25a6a6801ef6 100644 --- a/SU2_CFD/src/variables/CTurbVariable.cpp +++ b/SU2_CFD/src/variables/CTurbVariable.cpp @@ -2,14 +2,14 @@ * \file CTurbVariable.cpp * \brief Definition of the solution fields. * \author F. Palacios, A. Bueno - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 @@ -36,3 +36,7 @@ CTurbVariable::CTurbVariable(unsigned long npoint, unsigned long ndim, unsigned intermittency.resize(nPoint) = su2double(1.0); } + +void CTurbVariable::RegisterEddyViscosity(bool input) { + RegisterContainer(input, muT); +} diff --git a/SU2_CFD/src/variables/CVariable.cpp b/SU2_CFD/src/variables/CVariable.cpp index 98ab867b2e92..75bf88822826 100644 --- a/SU2_CFD/src/variables/CVariable.cpp +++ b/SU2_CFD/src/variables/CVariable.cpp @@ -2,14 +2,14 @@ * \file CVariable.cpp * \brief Definition of the solution fields. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_DEF/include/drivers/CDeformationDriver.hpp b/SU2_DEF/include/drivers/CDeformationDriver.hpp index 73c7a58e1cbd..5a31bbd842e6 100644 --- a/SU2_DEF/include/drivers/CDeformationDriver.hpp +++ b/SU2_DEF/include/drivers/CDeformationDriver.hpp @@ -2,14 +2,14 @@ * \file CDeformationDriver.hpp * \brief Headers of the main subroutines for driving the mesh deformation. * \author A. Gastaldi, H. Patel - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_DEF/include/drivers/CDiscAdjDeformationDriver.hpp b/SU2_DEF/include/drivers/CDiscAdjDeformationDriver.hpp index 7a999f50e9b9..70fa79f75f8a 100644 --- a/SU2_DEF/include/drivers/CDiscAdjDeformationDriver.hpp +++ b/SU2_DEF/include/drivers/CDiscAdjDeformationDriver.hpp @@ -2,14 +2,14 @@ * \file CDiscAdjDeformationDriver.hpp * \brief Headers of the main subroutines for driving the projection of sensitivities. * \author T. Economon, H. Kline, R. Sanchez, A. Gastaldi, H. Patel - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_DEF/src/SU2_DEF.cpp b/SU2_DEF/src/SU2_DEF.cpp index 28883b15ca67..a82a93af72d2 100644 --- a/SU2_DEF/src/SU2_DEF.cpp +++ b/SU2_DEF/src/SU2_DEF.cpp @@ -2,14 +2,14 @@ * \file SU2_DEF.cpp * \brief Main file of Mesh Deformation Code (SU2_DEF). * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_DEF/src/drivers/CDeformationDriver.cpp b/SU2_DEF/src/drivers/CDeformationDriver.cpp index 551fc7f81f8d..7b07ac7c4b53 100644 --- a/SU2_DEF/src/drivers/CDeformationDriver.cpp +++ b/SU2_DEF/src/drivers/CDeformationDriver.cpp @@ -2,14 +2,14 @@ * \file CDeformationDriver.cpp * \brief Main subroutines for driving the mesh deformation. * \author A. Gastaldi, H. Patel - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_DEF/src/drivers/CDiscAdjDeformationDriver.cpp b/SU2_DEF/src/drivers/CDiscAdjDeformationDriver.cpp index f919f5af7d8c..e2abe0197ec0 100644 --- a/SU2_DEF/src/drivers/CDiscAdjDeformationDriver.cpp +++ b/SU2_DEF/src/drivers/CDiscAdjDeformationDriver.cpp @@ -2,14 +2,14 @@ * \file CDiscAdjDeformationDriver.cpp * \brief Main subroutines for driving the projection of sensitivities. * \author T. Economon, H. Kline, R. Sanchez, A. Gastaldi, H. Patel - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_DOT/src/SU2_DOT.cpp b/SU2_DOT/src/SU2_DOT.cpp index f40d88eea663..00f335cf65e2 100644 --- a/SU2_DOT/src/SU2_DOT.cpp +++ b/SU2_DOT/src/SU2_DOT.cpp @@ -2,14 +2,14 @@ * \file SU2_DOT.cpp * \brief Main file of the Gradient Projection Code (SU2_DOT). * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_GEO/include/SU2_GEO.hpp b/SU2_GEO/include/SU2_GEO.hpp index fafa14a67377..5e613d70477d 100644 --- a/SU2_GEO/include/SU2_GEO.hpp +++ b/SU2_GEO/include/SU2_GEO.hpp @@ -3,14 +3,14 @@ * \brief Headers of the main subroutines of the code SU2_GEO. * The subroutines and functions are in the SU2_GEO.cpp file. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_GEO/src/SU2_GEO.cpp b/SU2_GEO/src/SU2_GEO.cpp index 3aadbd6499b8..f432a7c2ecaf 100644 --- a/SU2_GEO/src/SU2_GEO.cpp +++ b/SU2_GEO/src/SU2_GEO.cpp @@ -2,14 +2,14 @@ * \file SU2_GEO.cpp * \brief Main file of the Geometry Definition Code (SU2_GEO). * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_PY/FSI_tools/FSIInterface.py b/SU2_PY/FSI_tools/FSIInterface.py index 61148d805c78..ed9f4841f1f0 100644 --- a/SU2_PY/FSI_tools/FSIInterface.py +++ b/SU2_PY/FSI_tools/FSIInterface.py @@ -3,14 +3,14 @@ ## \file FSIInterface.py # \brief FSI interface class that handles fluid/solid solvers synchronisation and communication. # \authors Nicola Fonzi, Vittorio Cavalieri based on the work of David Thomas -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 @@ -307,7 +307,7 @@ def connect(self, FSI_config, FluidSolver, SolidSolver): print("Fluid solver is initialized on process {}".format(myid)) self.haveFluidSolver = True allMovingMarkersTags = FluidSolver.GetDeformableMarkerTags() - allMarkersID = FluidSolver.GetMarkerTags() + allMarkersID = FluidSolver.GetMarkerIndices() if not allMovingMarkersTags: raise Exception("No interface for FSI was defined.") else: diff --git a/SU2_PY/FSI_tools/FSI_config.py b/SU2_PY/FSI_tools/FSI_config.py index c6092f81a128..d3658d1937af 100644 --- a/SU2_PY/FSI_tools/FSI_config.py +++ b/SU2_PY/FSI_tools/FSI_config.py @@ -3,14 +3,14 @@ ## \file FSI_config.py # \brief Python class for handling configuration file for FSI computation. # \authors Nicola Fonzi, Vittorio Cavalieri based on the work of David Thomas -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/OptimalPropeller.py b/SU2_PY/OptimalPropeller.py index c8127de730ca..abb910517443 100644 --- a/SU2_PY/OptimalPropeller.py +++ b/SU2_PY/OptimalPropeller.py @@ -1,14 +1,14 @@ ## \file OptimalPropeller.py # \brief Python script for generating the ActuatorDisk.dat file. # \author E. Saetta, L. Russo, R. Tognaccini -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/SU2/eval/design.py b/SU2_PY/SU2/eval/design.py index d4b41771a399..497d37df85d1 100644 --- a/SU2_PY/SU2/eval/design.py +++ b/SU2_PY/SU2/eval/design.py @@ -3,14 +3,14 @@ ## \file design.py # \brief python package for designs # \author T. Lukaczyk, F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/SU2/eval/functions.py b/SU2_PY/SU2/eval/functions.py index 42dfeadf4806..fa5630a0c722 100644 --- a/SU2_PY/SU2/eval/functions.py +++ b/SU2_PY/SU2/eval/functions.py @@ -3,14 +3,14 @@ ## \file functions.py # \brief python package for functions # \author T. Lukaczyk, F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/SU2/eval/gradients.py b/SU2_PY/SU2/eval/gradients.py index 6d553ee041dc..d39ab84b123b 100644 --- a/SU2_PY/SU2/eval/gradients.py +++ b/SU2_PY/SU2/eval/gradients.py @@ -3,14 +3,14 @@ ## \file gradients.py # \brief python package for gradients # \author T. Lukaczyk, F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/SU2/io/config.py b/SU2_PY/SU2/io/config.py index aea9927b9a5b..3db56b9ecd22 100755 --- a/SU2_PY/SU2/io/config.py +++ b/SU2_PY/SU2/io/config.py @@ -3,14 +3,14 @@ ## \file config.py # \brief python package for config # \author T. Lukaczyk, F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/SU2/io/config_options.py b/SU2_PY/SU2/io/config_options.py index f7ffe4de45ec..09d59778f29e 100644 --- a/SU2_PY/SU2/io/config_options.py +++ b/SU2_PY/SU2/io/config_options.py @@ -1,14 +1,14 @@ # \file config_options.py # \brief python package for config # \author T. Lukaczyk, F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/SU2/io/data.py b/SU2_PY/SU2/io/data.py index 00f27ef04692..9d7ec16de0cb 100644 --- a/SU2_PY/SU2/io/data.py +++ b/SU2_PY/SU2/io/data.py @@ -3,14 +3,14 @@ ## \file data.py # \brief python package for data utility functions # \author T. Lukaczyk, F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/SU2/io/filelock.py b/SU2_PY/SU2/io/filelock.py index 19144f720cab..5712e0991648 100644 --- a/SU2_PY/SU2/io/filelock.py +++ b/SU2_PY/SU2/io/filelock.py @@ -3,14 +3,14 @@ ## \file filelock.py # \brief python package for filelocking # \author T. Lukaczyk, F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/SU2/io/redirect.py b/SU2_PY/SU2/io/redirect.py index 4dcb0c0d6a3a..c6a86366059d 100644 --- a/SU2_PY/SU2/io/redirect.py +++ b/SU2_PY/SU2/io/redirect.py @@ -3,14 +3,14 @@ ## \file redirect.py # \brief python package for file redirection # \author T. Lukaczyk, F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/SU2/io/state.py b/SU2_PY/SU2/io/state.py index 74a5227729f0..b55df00ad6ca 100644 --- a/SU2_PY/SU2/io/state.py +++ b/SU2_PY/SU2/io/state.py @@ -3,14 +3,14 @@ ## \file state.py # \brief python package for state # \author T. Lukaczyk, F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/SU2/io/tools.py b/SU2_PY/SU2/io/tools.py index 30316fc4738d..a040f3865780 100755 --- a/SU2_PY/SU2/io/tools.py +++ b/SU2_PY/SU2/io/tools.py @@ -3,14 +3,14 @@ ## \file tools.py # \brief file i/o functions # \author T. Lukaczyk, F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/SU2/opt/project.py b/SU2_PY/SU2/opt/project.py index aad8e26851ab..6fc0124f0912 100644 --- a/SU2_PY/SU2/opt/project.py +++ b/SU2_PY/SU2/opt/project.py @@ -3,14 +3,14 @@ ## \file project.py # \brief package for optimization projects # \author T. Lukaczyk, F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/SU2/opt/scipy_tools.py b/SU2_PY/SU2/opt/scipy_tools.py index 3fbf876fffa5..655c36cfe549 100644 --- a/SU2_PY/SU2/opt/scipy_tools.py +++ b/SU2_PY/SU2/opt/scipy_tools.py @@ -3,14 +3,14 @@ ## \file scipy_tools.py # \brief tools for interfacing with scipy # \author T. Lukaczyk, F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/SU2/run/adjoint.py b/SU2_PY/SU2/run/adjoint.py index 9ac6d4f45f67..237c590c14fa 100644 --- a/SU2_PY/SU2/run/adjoint.py +++ b/SU2_PY/SU2/run/adjoint.py @@ -3,14 +3,14 @@ ## \file adjoint.py # \brief python package for running adjoint problems # \author T. Lukaczyk, F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/SU2/run/deform.py b/SU2_PY/SU2/run/deform.py index b5006c9ecbbf..6622fdcfac83 100644 --- a/SU2_PY/SU2/run/deform.py +++ b/SU2_PY/SU2/run/deform.py @@ -3,14 +3,14 @@ ## \file deform.py # \brief python package for deforming meshes # \author T. Lukaczyk, F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/SU2/run/direct.py b/SU2_PY/SU2/run/direct.py index 4457a659de2d..dd0bfb5d6bf8 100644 --- a/SU2_PY/SU2/run/direct.py +++ b/SU2_PY/SU2/run/direct.py @@ -3,14 +3,14 @@ ## \file direct.py # \brief python package for running direct solutions # \author T. Lukaczyk, F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/SU2/run/geometry.py b/SU2_PY/SU2/run/geometry.py index 5b0447e46955..9036b18c74e5 100644 --- a/SU2_PY/SU2/run/geometry.py +++ b/SU2_PY/SU2/run/geometry.py @@ -3,14 +3,14 @@ ## \file geometry.py # \brief python package for running geometry analyses # \author T. Lukaczyk, F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/SU2/run/interface.py b/SU2_PY/SU2/run/interface.py index 3645fa626875..2aa0ba3674b9 100644 --- a/SU2_PY/SU2/run/interface.py +++ b/SU2_PY/SU2/run/interface.py @@ -3,14 +3,14 @@ ## \file interface.py # \brief python package interfacing with the SU2 suite # \author T. Lukaczyk, F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/SU2/run/merge.py b/SU2_PY/SU2/run/merge.py index c96d11dea81d..773a72e4347d 100644 --- a/SU2_PY/SU2/run/merge.py +++ b/SU2_PY/SU2/run/merge.py @@ -1,14 +1,14 @@ ## \file merge.py # \brief python package for merging meshes # \author T. Economon, T. Lukaczyk, F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/SU2/run/projection.py b/SU2_PY/SU2/run/projection.py index 4ebd8a7cd175..cbfbd50b4cea 100644 --- a/SU2_PY/SU2/run/projection.py +++ b/SU2_PY/SU2/run/projection.py @@ -3,14 +3,14 @@ ## \file projection.py # \brief python package for running gradient projection # \author T. Lukaczyk, F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/SU2/util/filter_adjoint.py b/SU2_PY/SU2/util/filter_adjoint.py index 4b803d1bf726..21f17718d40e 100644 --- a/SU2_PY/SU2/util/filter_adjoint.py +++ b/SU2_PY/SU2/util/filter_adjoint.py @@ -3,14 +3,14 @@ ## \file filter_adjoint.py # \brief Applies various filters to the adjoint surface sensitivities of an airfoil # \author T. Lukaczyk, F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/SU2/util/plot.py b/SU2_PY/SU2/util/plot.py index 1db3c80b7c75..73d92a14e514 100644 --- a/SU2_PY/SU2/util/plot.py +++ b/SU2_PY/SU2/util/plot.py @@ -3,14 +3,14 @@ ## \file plot.py # \brief python package for plotting # \author T. Lukaczyk, F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/SU2/util/polarSweepLib.py b/SU2_PY/SU2/util/polarSweepLib.py index 8b141c4a6572..f46093cc5a9d 100755 --- a/SU2_PY/SU2/util/polarSweepLib.py +++ b/SU2_PY/SU2/util/polarSweepLib.py @@ -1,14 +1,14 @@ # \file polarSweepLib.py # \brief Functions library for compute_polar.py script. # \author E Arad -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/SU2/util/which.py b/SU2_PY/SU2/util/which.py index 88216fd06fb7..d9310bd671b8 100644 --- a/SU2_PY/SU2/util/which.py +++ b/SU2_PY/SU2/util/which.py @@ -3,14 +3,14 @@ ## \file which.py # \brief looks for where a program is # \author T. Lukaczyk, F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/SU2_CFD.py b/SU2_PY/SU2_CFD.py index b7917b89e05e..c11fde72668d 100755 --- a/SU2_PY/SU2_CFD.py +++ b/SU2_PY/SU2_CFD.py @@ -3,14 +3,14 @@ ## \file SU2_CFD.py # \brief Python script to launch SU2_CFD through the Python Wrapper. # \author David Thomas -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/SU2_Nastran/pysu2_nastran.py b/SU2_PY/SU2_Nastran/pysu2_nastran.py index 8985b6d143a2..637003571eec 100644 --- a/SU2_PY/SU2_Nastran/pysu2_nastran.py +++ b/SU2_PY/SU2_Nastran/pysu2_nastran.py @@ -3,14 +3,14 @@ ## \file pysu2_nastran.py # \brief Structural solver using Nastran models # \authors Nicola Fonzi, Vittorio Cavalieri, based on the work of David Thomas -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/change_version_number.py b/SU2_PY/change_version_number.py index 093015a34bb8..daef789dc659 100755 --- a/SU2_PY/change_version_number.py +++ b/SU2_PY/change_version_number.py @@ -3,14 +3,14 @@ ## \file change_version_number.py # \brief Python script for updating the version number of the SU2 suite. # \author A. Aranake -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 @@ -55,13 +55,13 @@ if not options.version: parser.error("new version number must be provided with -v option") -oldvers = '8.1.0 "Harrier"' -oldvers_q = r"8.1.0 \"Harrier\"" +oldvers = '8.2.0 "Harrier"' +oldvers_q = r"8.2.0 \"Harrier\"" newvers = str(options.version) + ' "' + str(options.releasename) + '"' newvers_q = str(options.version) + ' \\"' + str(options.releasename) + '\\"' -# oldvers = 'Copyright 2012-2024, SU2' +# oldvers = 'Copyright 2012-2025, SU2' # oldvers_q = oldvers -# newvers = 'Copyright 2012-2024, SU2' +# newvers = 'Copyright 2012-2025, SU2' # newvers_q = newvers if sys.version_info[0] > 2: diff --git a/SU2_PY/compute_polar.py b/SU2_PY/compute_polar.py index af882723e16e..13f3ae699013 100755 --- a/SU2_PY/compute_polar.py +++ b/SU2_PY/compute_polar.py @@ -3,14 +3,14 @@ ## \file Compute_polar.py # \brief Python script for performing polar sweep. # \author E Arad (based on T. Lukaczyk and F. Palacios script) -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/compute_uncertainty.py b/SU2_PY/compute_uncertainty.py index cd0060785561..427f911d99e0 100755 --- a/SU2_PY/compute_uncertainty.py +++ b/SU2_PY/compute_uncertainty.py @@ -3,14 +3,14 @@ ## \file compute_uncertainty.py # \brief Python script for performing model-form UQ for SST turbulence model # \author J. Mukhopadhaya -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/continuous_adjoint.py b/SU2_PY/continuous_adjoint.py index 8414a8af903b..a77a99db3366 100755 --- a/SU2_PY/continuous_adjoint.py +++ b/SU2_PY/continuous_adjoint.py @@ -3,14 +3,14 @@ ## \file continuous_adjoint.py # \brief Python script for continuous adjoint computation using the SU2 suite. # \author F. Palacios, T. Economon, T. Lukaczyk -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/copy_directory.py b/SU2_PY/copy_directory.py index 29f99b68ac00..86a77eaf0001 100755 --- a/SU2_PY/copy_directory.py +++ b/SU2_PY/copy_directory.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, SU2 Contributors (cf. AUTHORS.md) import sys import os diff --git a/SU2_PY/direct_differentiation.py b/SU2_PY/direct_differentiation.py index 5890020a3068..1cc4c8b3184c 100755 --- a/SU2_PY/direct_differentiation.py +++ b/SU2_PY/direct_differentiation.py @@ -3,14 +3,14 @@ ## \file direct_differentiation.py # \brief Python script for doing the direct differentiation computation using the SU2 suite. # \author F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/discrete_adjoint.py b/SU2_PY/discrete_adjoint.py index ba04772b5f5b..546f80a50adb 100755 --- a/SU2_PY/discrete_adjoint.py +++ b/SU2_PY/discrete_adjoint.py @@ -3,14 +3,14 @@ ## \file discrete_adjoint.py # \brief Python script for doing the discrete adjoint computation using the SU2 suite. # \author F. Palacios, T. Economon, T. Lukaczyk -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/finite_differences.py b/SU2_PY/finite_differences.py index 7319645d6549..e397da10390e 100755 --- a/SU2_PY/finite_differences.py +++ b/SU2_PY/finite_differences.py @@ -3,14 +3,14 @@ ## \file finite_differences.py # \brief Python script for doing the finite differences computation using the SU2 suite. # \author F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/fsi_computation.py b/SU2_PY/fsi_computation.py index 4b2e35c73ef2..de42ee3b23e2 100755 --- a/SU2_PY/fsi_computation.py +++ b/SU2_PY/fsi_computation.py @@ -3,14 +3,14 @@ ## \file fsi_computation.py # \brief Python wrapper code for FSI computation by coupling a third-party structural solver to SU2. # \authors Nicola Fonzi, Vittorio Cavalieri based on the work of David Thomas -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/merge_solution.py b/SU2_PY/merge_solution.py index eb75c1fc7814..06356e0607d6 100755 --- a/SU2_PY/merge_solution.py +++ b/SU2_PY/merge_solution.py @@ -3,14 +3,14 @@ ## \file merge_solution.py # \brief Python script for merging of the solution files. # \author F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/mesh_deformation.py b/SU2_PY/mesh_deformation.py index 578c58b422d8..1efa94180a77 100755 --- a/SU2_PY/mesh_deformation.py +++ b/SU2_PY/mesh_deformation.py @@ -3,14 +3,14 @@ ## \file mesh_deformation.py # \brief Python script for doing the parallel deformation using SU2_DEF. # \author F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/meson.build b/SU2_PY/meson.build index 85ae325f3f0b..ced812903468 100644 --- a/SU2_PY/meson.build +++ b/SU2_PY/meson.build @@ -70,3 +70,5 @@ install_data(['FSI_tools/__init__.py', install_data(['SU2_Nastran/__init__.py', 'SU2_Nastran/pysu2_nastran.py'], install_dir: join_paths(get_option('bindir'), 'SU2_Nastran')) + +install_subdir(['../externals/FADO'], install_dir: get_option('bindir')) diff --git a/SU2_PY/parallel_computation.py b/SU2_PY/parallel_computation.py index f44a63fa1c65..36c8f814a468 100755 --- a/SU2_PY/parallel_computation.py +++ b/SU2_PY/parallel_computation.py @@ -3,14 +3,14 @@ ## \file parallel_computation.py # \brief Python script for doing the continuous adjoint computation using the SU2 suite. # \author T. Economon, T. Lukaczyk, F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/parallel_computation_fsi.py b/SU2_PY/parallel_computation_fsi.py index b456cb0b3ec1..608d12f8bd32 100755 --- a/SU2_PY/parallel_computation_fsi.py +++ b/SU2_PY/parallel_computation_fsi.py @@ -3,14 +3,14 @@ ## \file parallel_computation_fsi.py # \brief Python script for running FSI simulations using the SU2 suite. # \author T. Economon, T. Lukaczyk, F. Palacios, H. Kline, R. Sanchez -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/parse_config.py b/SU2_PY/parse_config.py index d727f8ec2303..3ab585901b0d 100755 --- a/SU2_PY/parse_config.py +++ b/SU2_PY/parse_config.py @@ -3,14 +3,14 @@ ## \file parse_config.py # \brief Builds a worksheet of all SU2.cpp options # \author A. Aranake, F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/profiling.py b/SU2_PY/profiling.py index b82eeae8ba64..ad4702f0f047 100755 --- a/SU2_PY/profiling.py +++ b/SU2_PY/profiling.py @@ -3,14 +3,14 @@ ## \file profiling.py # \brief Python script for postprocessing the SU2 custom profiling (profiling.csv) # \author T. Economon -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/pySU2/pySU2.i b/SU2_PY/pySU2/pySU2.i index 49bfda392741..92d5e89c05a8 100644 --- a/SU2_PY/pySU2/pySU2.i +++ b/SU2_PY/pySU2/pySU2.i @@ -4,14 +4,14 @@ # \file pySU2.i # \brief Configuration file for the Swig compilation of the Python wrapper. # \author D. Thomas -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/pySU2/pySU2ad.i b/SU2_PY/pySU2/pySU2ad.i index 6a834bc14579..b96ed17c52c4 100644 --- a/SU2_PY/pySU2/pySU2ad.i +++ b/SU2_PY/pySU2/pySU2ad.i @@ -4,14 +4,14 @@ # \file pySU2ad.i # \brief Configuration file for the Swig compilation of the Python wrapper. # \author D. Thomas, R. Sanchez -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/set_ffd_design_var.py b/SU2_PY/set_ffd_design_var.py index 0dc1a2672314..8753b4de8684 100755 --- a/SU2_PY/set_ffd_design_var.py +++ b/SU2_PY/set_ffd_design_var.py @@ -3,14 +3,14 @@ ## \file set_ffd_design_var.py # \brief Python script for automatically generating a list of FFD variables. # \author T. Economon, F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/shape_optimization.py b/SU2_PY/shape_optimization.py index c513d3592e87..ad9bfa164c8c 100755 --- a/SU2_PY/shape_optimization.py +++ b/SU2_PY/shape_optimization.py @@ -3,14 +3,14 @@ ## \file shape_optimization.py # \brief Python script for performing the shape optimization. # \author T. Economon, T. Lukaczyk, F. Palacios -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 @@ -106,7 +106,7 @@ def main(): "| ___ _ _ ___ |\n" ) sys.stdout.write( - '| / __| | | |_ ) Release 8.1.0 "Harrier" |\n' + '| / __| | | |_ ) Release 8.2.0 "Harrier" |\n' ) sys.stdout.write( "| \\__ \\ |_| |/ / |\n" @@ -136,7 +136,7 @@ def main(): "-------------------------------------------------------------------------\n" ) sys.stdout.write( - "| Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) |\n" + "| Copyright 2012-2025, SU2 Contributors (cf. AUTHORS.md) |\n" ) sys.stdout.write( "| |\n" diff --git a/SU2_PY/topology_optimization.py b/SU2_PY/topology_optimization.py index aa099ba49d7e..e3bfcc32761b 100755 --- a/SU2_PY/topology_optimization.py +++ b/SU2_PY/topology_optimization.py @@ -2,14 +2,14 @@ ## \file topology_optimization.py # \brief Python script to drive SU2 in topology optimization. -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_PY/updateHistoryMap.py b/SU2_PY/updateHistoryMap.py index 7c8eadac0b39..1693393d2f98 100644 --- a/SU2_PY/updateHistoryMap.py +++ b/SU2_PY/updateHistoryMap.py @@ -3,14 +3,14 @@ ## \file updateHistoryMap.py # \brief Python script for updating the historyMap.py file. # \author T. Albring -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/SU2_SOL/include/SU2_SOL.hpp b/SU2_SOL/include/SU2_SOL.hpp index 7e1c432f101a..7b85b656c3d6 100644 --- a/SU2_SOL/include/SU2_SOL.hpp +++ b/SU2_SOL/include/SU2_SOL.hpp @@ -3,14 +3,14 @@ * \brief Headers of the main subroutines of the code SU2_SOL. * The subroutines and functions are in the SU2_SOL.cpp file. * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/SU2_SOL/src/SU2_SOL.cpp b/SU2_SOL/src/SU2_SOL.cpp index 0c1b63c7d744..f9f63fe7f391 100644 --- a/SU2_SOL/src/SU2_SOL.cpp +++ b/SU2_SOL/src/SU2_SOL.cpp @@ -2,14 +2,14 @@ * \file SU2_SOL.cpp * \brief Main file for the solution export/conversion code (SU2_SOL). * \author F. Palacios, T. Economon - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/TestCases/TestCase.py b/TestCases/TestCase.py index 81ab3fb68953..03b431ba3a7d 100644 --- a/TestCases/TestCase.py +++ b/TestCases/TestCase.py @@ -3,14 +3,14 @@ ## \file TestCase.py # \brief Python class for automated regression testing of SU2 examples # \author A. Aranake, A. Campos, T. Economon, T. Lukaczyk, S. Padron -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 @@ -361,7 +361,14 @@ def run_filediff(self, with_tsan=False, with_asan=False): # Assert that both files have the same number of lines if len(fromlines) != len(tolines): - diff = ["ERROR: Number of lines in " + fromfile + " and " + tofile + " differ: " + len(fromlines) + " vs " + len(tolines) + "."] + stringerr = "ERROR: Number of lines in " + str(fromfile) + " and " + str(tofile) + " differ: " + str(len(fromlines)) + " vs " + str(len(tolines)) + "." + diff = [stringerr] + print("generated file = ") + for i_line in tolines: + print(i_line) + for i_line in fromlines: + print(i_line) + passed = False # Loop through all lines @@ -464,6 +471,9 @@ def run_filediff(self, with_tsan=False, with_asan=False): print('Ignored entries: ' + str(ignore_counter)) print('Maximum difference: ' + str(max_delta) + '%') + if not passed: + print(open(self.test_file).readlines()) + print('==================== End Test: %s ====================\n'%self.tag) sys.stdout.flush() diff --git a/TestCases/Tutorials/design/Inc_Turbulent_Bend_Wallfunctions/optim.csv.ref b/TestCases/Tutorials/design/Inc_Turbulent_Bend_Wallfunctions/optim.csv.ref new file mode 100644 index 000000000000..2423dbf65989 --- /dev/null +++ b/TestCases/Tutorials/design/Inc_Turbulent_Bend_Wallfunctions/optim.csv.ref @@ -0,0 +1,2 @@ +ITER, avg_dp +1, 64.90301114659223 diff --git a/TestCases/aeroelastic/aeroelastic_NACA64A010.cfg b/TestCases/aeroelastic/aeroelastic_NACA64A010.cfg index e62e2f1e8d0f..f87da351fb26 100644 --- a/TestCases/aeroelastic/aeroelastic_NACA64A010.cfg +++ b/TestCases/aeroelastic/aeroelastic_NACA64A010.cfg @@ -5,7 +5,7 @@ % Author: Santiago Padron % % Institution: Stanford University % % Date: 07-09-15 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/axisymmetric_rans/air_nozzle/air_nozzle_restart.cfg b/TestCases/axisymmetric_rans/air_nozzle/air_nozzle_restart.cfg index 680033e445be..9c9711fda934 100644 --- a/TestCases/axisymmetric_rans/air_nozzle/air_nozzle_restart.cfg +++ b/TestCases/axisymmetric_rans/air_nozzle/air_nozzle_restart.cfg @@ -4,7 +4,7 @@ % Case description: Axisymmetric supersonic converging-diverging air nozzle % % Author: Florian Dittmann % % Date: 2021.12.02 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/cgns_writer/config.cfg b/TestCases/cgns_writer/config.cfg index cfd589236a73..58273c850c49 100644 --- a/TestCases/cgns_writer/config.cfg +++ b/TestCases/cgns_writer/config.cfg @@ -5,7 +5,7 @@ % Author: Andrea Rausa % % Institution: Politecnico di Milano % % Date: 12/2/2023 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/cont_adj_euler/naca0012/inv_NACA0012.cfg b/TestCases/cont_adj_euler/naca0012/inv_NACA0012.cfg index 7a63c1ff1898..2f4c7c86b5b8 100644 --- a/TestCases/cont_adj_euler/naca0012/inv_NACA0012.cfg +++ b/TestCases/cont_adj_euler/naca0012/inv_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2011.11.02 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/cont_adj_euler/naca0012/inv_NACA0012_FD.cfg b/TestCases/cont_adj_euler/naca0012/inv_NACA0012_FD.cfg index a6972db32095..5561884d4424 100644 --- a/TestCases/cont_adj_euler/naca0012/inv_NACA0012_FD.cfg +++ b/TestCases/cont_adj_euler/naca0012/inv_NACA0012_FD.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2011.11.02 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/cont_adj_euler/naca0012/inv_NACA0012_discadj.cfg b/TestCases/cont_adj_euler/naca0012/inv_NACA0012_discadj.cfg index 7fe83b2786d5..b4d7d3ba4edb 100644 --- a/TestCases/cont_adj_euler/naca0012/inv_NACA0012_discadj.cfg +++ b/TestCases/cont_adj_euler/naca0012/inv_NACA0012_discadj.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2011.11.02 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/cont_adj_euler/naca0012/of_grad_cd_disc.dat.ref b/TestCases/cont_adj_euler/naca0012/of_grad_cd_disc.dat.ref index 6da6f45e3ee1..43f74e02a639 100644 --- a/TestCases/cont_adj_euler/naca0012/of_grad_cd_disc.dat.ref +++ b/TestCases/cont_adj_euler/naca0012/of_grad_cd_disc.dat.ref @@ -1,39 +1,39 @@ VARIABLES="VARIABLE" , "GRADIENT" , "FINDIFF_STEP" - 0 , -2656.0 , 0.001 - 1 , -7290.69 , 0.001 - 2 , -11252.7 , 0.001 - 3 , -12531.4 , 0.001 - 4 , -10923.7 , 0.001 - 5 , -6826.86 , 0.001 - 6 , -843.71 , 0.001 - 7 , 6462.74 , 0.001 - 8 , 14656.3 , 0.001 - 9 , 23308.0 , 0.001 - 10 , 31688.2 , 0.001 - 11 , 38407.2 , 0.001 - 12 , 41274.9 , 0.001 - 13 , 37812.2 , 0.001 - 14 , 27093.1 , 0.001 - 15 , 14049.9 , 0.001 - 16 , 17583.8 , 0.001 - 17 , 78620.8 , 0.001 - 18 , 140614.0 , 0.001 - 19 , -18263.2 , 0.001 - 20 , -20877.9 , 0.001 - 21 , -22859.6 , 0.001 - 22 , -24751.5 , 0.001 - 23 , -28392.5 , 0.001 - 24 , -35514.1 , 0.001 - 25 , -46855.4 , 0.001 - 26 , -61697.7 , 0.001 - 27 , -77631.1 , 0.001 - 28 , -90537.8 , 0.001 - 29 , -95036.8 , 0.001 - 30 , -85899.0 , 0.001 - 31 , -60885.3 , 0.001 - 32 , -24333.4 , 0.001 - 33 , 12334.3 , 0.001 - 34 , 39948.1 , 0.001 - 35 , 65452.2 , 0.001 - 36 , 82215.8 , 0.001 - 37 , -44066.2 , 0.001 + 0 , 292.459 , 0.001 + 1 , -8318.5 , 0.001 + 2 , -16158.4 , 0.001 + 3 , -21277.2 , 0.001 + 4 , -23366.9 , 0.001 + 5 , -22727.6 , 0.001 + 6 , -19872.3 , 0.001 + 7 , -15278.1 , 0.001 + 8 , -9283.99 , 0.001 + 9 , -2179.87 , 0.001 + 10 , 5520.63 , 0.001 + 11 , 12726.0 , 0.001 + 12 , 17538.0 , 0.001 + 13 , 17441.1 , 0.001 + 14 , 10335.6 , 0.001 + 15 , -2686.37 , 0.001 + 16 , -10522.5 , 0.001 + 17 , 24712.2 , 0.001 + 18 , 166438.0 , 0.001 + 19 , -15618.6 , 0.001 + 20 , -14178.7 , 0.001 + 21 , -12765.5 , 0.001 + 22 , -12007.2 , 0.001 + 23 , -13597.5 , 0.001 + 24 , -19002.9 , 0.001 + 25 , -28729.6 , 0.001 + 26 , -41946.6 , 0.001 + 27 , -56289.3 , 0.001 + 28 , -67832.1 , 0.001 + 29 , -71484.0 , 0.001 + 30 , -62334.5 , 0.001 + 31 , -38478.2 , 0.001 + 32 , -4757.34 , 0.001 + 33 , 26448.5 , 0.001 + 34 , 45049.5 , 0.001 + 35 , 60960.9 , 0.001 + 36 , 83515.9 , 0.001 + 37 , 8837.4 , 0.001 diff --git a/TestCases/cont_adj_euler/naca0012/of_grad_directdiff.dat.ref b/TestCases/cont_adj_euler/naca0012/of_grad_directdiff.dat.ref index 1b4c963eeacc..2d6e15119833 100644 --- a/TestCases/cont_adj_euler/naca0012/of_grad_directdiff.dat.ref +++ b/TestCases/cont_adj_euler/naca0012/of_grad_directdiff.dat.ref @@ -1,4 +1,4 @@ VARIABLES="VARIABLE" , "DRAG" , "EFFICIENCY" , "FORCE_X" , "FORCE_Y" , "FORCE_Z" , "LIFT" , "MOMENT_X" , "MOMENT_Y" , "MOMENT_Z" , "SIDEFORCE" - 0 , 0.2405003164 , -108.3397202 , 0.2752804375 , -1.591326829 , 0.0 , -1.596953347 , 0.0 , 0.0 , 1.18511582 , 0.0 - 1 , 0.4163088272 , -176.5661566 , 0.4692829784 , -2.423229574 , 0.0 , -2.432890265 , 0.0 , 0.0 , 1.020271816 , 0.0 - 2 , 0.5558397416 , -231.7769399 , 0.6239540061 , -3.115569035 , 0.0 , -3.128439099 , 0.0 , 0.0 , 0.6093229584 , 0.0 + 0 , 0.24008251 , -117.3444057 , 0.2742430499 , -1.56293638 , 0.0 , -1.568547024 , 0.0 , 0.0 , 1.189018284 , 0.0 + 1 , 0.4064005433 , -189.77779 , 0.4586830911 , -2.391641926 , 0.0 , -2.401078899 , 0.0 , 0.0 , 1.030793484 , 0.0 + 2 , 0.5421052294 , -249.5397676 , 0.6095878335 , -3.086770277 , 0.0 , -3.099333798 , 0.0 , 0.0 , 0.6218682473 , 0.0 diff --git a/TestCases/cont_adj_euler/oneram6/inv_ONERAM6.cfg b/TestCases/cont_adj_euler/oneram6/inv_ONERAM6.cfg index 3d593c4d6f28..f0cbba1c8cdd 100644 --- a/TestCases/cont_adj_euler/oneram6/inv_ONERAM6.cfg +++ b/TestCases/cont_adj_euler/oneram6/inv_ONERAM6.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2015.08.25 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/cont_adj_euler/wedge/inv_wedge_ROE.cfg b/TestCases/cont_adj_euler/wedge/inv_wedge_ROE.cfg index 4ad77fbde61d..0f757dd93a09 100644 --- a/TestCases/cont_adj_euler/wedge/inv_wedge_ROE.cfg +++ b/TestCases/cont_adj_euler/wedge/inv_wedge_ROE.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2012.10.07 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/cont_adj_euler/wedge/inv_wedge_ROE_multiobj.cfg b/TestCases/cont_adj_euler/wedge/inv_wedge_ROE_multiobj.cfg index de2e39bcadf7..4076d89bb867 100644 --- a/TestCases/cont_adj_euler/wedge/inv_wedge_ROE_multiobj.cfg +++ b/TestCases/cont_adj_euler/wedge/inv_wedge_ROE_multiobj.cfg @@ -6,7 +6,7 @@ % Author: H.L. Kline, modified from inviscid wedge by Thomas D. Economon % % Institution: Stanford University % % Date: 2018.01.07 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/cont_adj_euler/wedge/of_grad_combo.dat.ref b/TestCases/cont_adj_euler/wedge/of_grad_combo.dat.ref index 51bda5370df0..eca2a7ba1835 100644 --- a/TestCases/cont_adj_euler/wedge/of_grad_combo.dat.ref +++ b/TestCases/cont_adj_euler/wedge/of_grad_combo.dat.ref @@ -1,5 +1,5 @@ VARIABLES="VARIABLE" , "GRADIENT" , "FINDIFF_STEP" - 0 , 0.00767644 , 0.0001 - 1 , 0.00498358 , 0.0001 - 2 , 0.00246134 , 0.0001 - 3 , 0.000893054 , 0.0001 + 0 , 0.00765473 , 0.0001 + 1 , 0.00497838 , 0.0001 + 2 , 0.0024697 , 0.0001 + 3 , 0.00090216 , 0.0001 diff --git a/TestCases/cont_adj_navierstokes/cylinder/lam_cylinder.cfg b/TestCases/cont_adj_navierstokes/cylinder/lam_cylinder.cfg index 7b03288992b1..8429fe40c5fd 100644 --- a/TestCases/cont_adj_navierstokes/cylinder/lam_cylinder.cfg +++ b/TestCases/cont_adj_navierstokes/cylinder/lam_cylinder.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2013.03.01 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/cont_adj_navierstokes/naca0012_sub/lam_NACA0012.cfg b/TestCases/cont_adj_navierstokes/naca0012_sub/lam_NACA0012.cfg index a9f9f95722b6..eec08f2291c9 100644 --- a/TestCases/cont_adj_navierstokes/naca0012_sub/lam_NACA0012.cfg +++ b/TestCases/cont_adj_navierstokes/naca0012_sub/lam_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: Jul 18th, 2014 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/cont_adj_navierstokes/naca0012_trans/lam_NACA0012.cfg b/TestCases/cont_adj_navierstokes/naca0012_trans/lam_NACA0012.cfg index f7379a3bd383..dc40f7e6ae87 100644 --- a/TestCases/cont_adj_navierstokes/naca0012_trans/lam_NACA0012.cfg +++ b/TestCases/cont_adj_navierstokes/naca0012_trans/lam_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: Jul 18th, 2014 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/cont_adj_rans/naca0012/turb_nasa.cfg b/TestCases/cont_adj_rans/naca0012/turb_nasa.cfg index ffbccb56e150..7d6b419aa06c 100644 --- a/TestCases/cont_adj_rans/naca0012/turb_nasa.cfg +++ b/TestCases/cont_adj_rans/naca0012/turb_nasa.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2013.03.01 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/cont_adj_rans/naca0012/turb_nasa_binary.cfg b/TestCases/cont_adj_rans/naca0012/turb_nasa_binary.cfg index 727ee79f15ec..07400144d0e0 100644 --- a/TestCases/cont_adj_rans/naca0012/turb_nasa_binary.cfg +++ b/TestCases/cont_adj_rans/naca0012/turb_nasa_binary.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2013.03.01 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/cont_adj_rans/oneram6/turb_ONERAM6.cfg b/TestCases/cont_adj_rans/oneram6/turb_ONERAM6.cfg index 2dcf0d6258cf..0b87db01ee2c 100644 --- a/TestCases/cont_adj_rans/oneram6/turb_ONERAM6.cfg +++ b/TestCases/cont_adj_rans/oneram6/turb_ONERAM6.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2013.03.01 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/cont_adj_rans/rae2822/turb_SA_RAE2822.cfg b/TestCases/cont_adj_rans/rae2822/turb_SA_RAE2822.cfg index 893278e4a254..21c3cf827ac2 100644 --- a/TestCases/cont_adj_rans/rae2822/turb_SA_RAE2822.cfg +++ b/TestCases/cont_adj_rans/rae2822/turb_SA_RAE2822.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 5/15/2013 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/control_surface/inv_ONERAM6_moving.cfg b/TestCases/control_surface/inv_ONERAM6_moving.cfg index 369c3c9cf58e..7d97f6d04b39 100644 --- a/TestCases/control_surface/inv_ONERAM6_moving.cfg +++ b/TestCases/control_surface/inv_ONERAM6_moving.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 09.07.2011 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/control_surface/inv_ONERAM6_setting.cfg b/TestCases/control_surface/inv_ONERAM6_setting.cfg index 3a2e2a2b1628..ec7fd40c1709 100644 --- a/TestCases/control_surface/inv_ONERAM6_setting.cfg +++ b/TestCases/control_surface/inv_ONERAM6_setting.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 09.07.2011 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/coupled_cht/comp_2d/cht_2d_3cylinders.cfg b/TestCases/coupled_cht/comp_2d/cht_2d_3cylinders.cfg index 8158af7bbbdb..e3f5a6708bcb 100644 --- a/TestCases/coupled_cht/comp_2d/cht_2d_3cylinders.cfg +++ b/TestCases/coupled_cht/comp_2d/cht_2d_3cylinders.cfg @@ -5,7 +5,7 @@ % Author: O. Burghardt % % Institution: Chair for Scientific Computing, TU Kaiserslautern % % Date: January 6, 2020 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/coupled_cht/disc_adj_incomp_2d/cht_2d_3cylinders.cfg b/TestCases/coupled_cht/disc_adj_incomp_2d/cht_2d_3cylinders.cfg index 87f05765669b..f496c1622fed 100644 --- a/TestCases/coupled_cht/disc_adj_incomp_2d/cht_2d_3cylinders.cfg +++ b/TestCases/coupled_cht/disc_adj_incomp_2d/cht_2d_3cylinders.cfg @@ -5,7 +5,7 @@ % Author: O. Burghardt, T. Economon % % Institution: Chair for Scientific Computing, TU Kaiserslautern % % Date: August 8, 2019 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/coupled_cht/incomp_2d/cht_2d_3cylinders.cfg b/TestCases/coupled_cht/incomp_2d/cht_2d_3cylinders.cfg index 7bd7663457a5..091c1aff5cb5 100644 --- a/TestCases/coupled_cht/incomp_2d/cht_2d_3cylinders.cfg +++ b/TestCases/coupled_cht/incomp_2d/cht_2d_3cylinders.cfg @@ -5,7 +5,7 @@ % Author: O. Burghardt, T. Economon % % Institution: Chair for Scientific Computing, TU Kaiserslautern % % Date: August 8, 2019 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/coupled_cht/incomp_2d_unsteady/cht_2d_3cylinders.cfg b/TestCases/coupled_cht/incomp_2d_unsteady/cht_2d_3cylinders.cfg index 690bb65253b1..2f96afc73aeb 100644 --- a/TestCases/coupled_cht/incomp_2d_unsteady/cht_2d_3cylinders.cfg +++ b/TestCases/coupled_cht/incomp_2d_unsteady/cht_2d_3cylinders.cfg @@ -5,7 +5,7 @@ % Author: O. Burghardt, T. Economon % % Institution: Chair for Scientific Computing, TU Kaiserslautern % % Date: August 8, 2019 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/ddes/flatplate/ddes_flatplate.cfg b/TestCases/ddes/flatplate/ddes_flatplate.cfg index 53f8255922e1..ad36cdffe7f2 100644 --- a/TestCases/ddes/flatplate/ddes_flatplate.cfg +++ b/TestCases/ddes/flatplate/ddes_flatplate.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2011.11.10 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/deformation/brick_hex/def_brick_hex.cfg b/TestCases/deformation/brick_hex/def_brick_hex.cfg index 14dae41c5cf1..a669a5348387 100755 --- a/TestCases/deformation/brick_hex/def_brick_hex.cfg +++ b/TestCases/deformation/brick_hex/def_brick_hex.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2016.05.31 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/deformation/brick_hex_rans/def_brick_hex_rans.cfg b/TestCases/deformation/brick_hex_rans/def_brick_hex_rans.cfg index 0bee9a1cd21b..c53cc5aab997 100755 --- a/TestCases/deformation/brick_hex_rans/def_brick_hex_rans.cfg +++ b/TestCases/deformation/brick_hex_rans/def_brick_hex_rans.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2016.05.31 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/deformation/brick_prism/def_brick_prism.cfg b/TestCases/deformation/brick_prism/def_brick_prism.cfg index 3eb2e5944b06..418412c76726 100755 --- a/TestCases/deformation/brick_prism/def_brick_prism.cfg +++ b/TestCases/deformation/brick_prism/def_brick_prism.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2016.05.31 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/deformation/brick_prism_rans/def_brick_prism_rans.cfg b/TestCases/deformation/brick_prism_rans/def_brick_prism_rans.cfg index 7330ddefc4a3..801fef712e37 100755 --- a/TestCases/deformation/brick_prism_rans/def_brick_prism_rans.cfg +++ b/TestCases/deformation/brick_prism_rans/def_brick_prism_rans.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2016.05.31 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/deformation/brick_pyra/def_brick_pyra.cfg b/TestCases/deformation/brick_pyra/def_brick_pyra.cfg index d7ceb2773e22..1168e7a86317 100755 --- a/TestCases/deformation/brick_pyra/def_brick_pyra.cfg +++ b/TestCases/deformation/brick_pyra/def_brick_pyra.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2016.05.31 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/deformation/brick_tets/def_brick_tets.cfg b/TestCases/deformation/brick_tets/def_brick_tets.cfg index 267f2c0dcbe7..957f30a99a67 100755 --- a/TestCases/deformation/brick_tets/def_brick_tets.cfg +++ b/TestCases/deformation/brick_tets/def_brick_tets.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2016.05.31 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/deformation/cylindrical_ffd/def_cylindrical.cfg b/TestCases/deformation/cylindrical_ffd/def_cylindrical.cfg index 8e5a4a79d8db..983070fb6cc6 100644 --- a/TestCases/deformation/cylindrical_ffd/def_cylindrical.cfg +++ b/TestCases/deformation/cylindrical_ffd/def_cylindrical.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 5/15/2013 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/deformation/intersection_prevention/def_intersect.cfg b/TestCases/deformation/intersection_prevention/def_intersect.cfg index 18610d759b87..ee2e4b66a774 100644 --- a/TestCases/deformation/intersection_prevention/def_intersect.cfg +++ b/TestCases/deformation/intersection_prevention/def_intersect.cfg @@ -15,7 +15,7 @@ % Institution: % % Technische Universiteit Eindhoven % % Date: 2021.01.08 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------% diff --git a/TestCases/deformation/naca0012/def_NACA0012.cfg b/TestCases/deformation/naca0012/def_NACA0012.cfg index 839cf5b25802..d026fa0873cd 100644 --- a/TestCases/deformation/naca0012/def_NACA0012.cfg +++ b/TestCases/deformation/naca0012/def_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/deformation/naca0012/surface_file_NACA0012.cfg b/TestCases/deformation/naca0012/surface_file_NACA0012.cfg index 9250a2483374..485ca26b65ea 100644 --- a/TestCases/deformation/naca0012/surface_file_NACA0012.cfg +++ b/TestCases/deformation/naca0012/surface_file_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/deformation/naca4412/def_NACA4412.cfg b/TestCases/deformation/naca4412/def_NACA4412.cfg index 33c0a8458b44..3ec9561fa101 100644 --- a/TestCases/deformation/naca4412/def_NACA4412.cfg +++ b/TestCases/deformation/naca4412/def_NACA4412.cfg @@ -6,7 +6,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2016.05.06 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/deformation/rae2822/def_RAE2822.cfg b/TestCases/deformation/rae2822/def_RAE2822.cfg index 3e7ca39942cb..900760cc96b2 100644 --- a/TestCases/deformation/rae2822/def_RAE2822.cfg +++ b/TestCases/deformation/rae2822/def_RAE2822.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 5/15/2013 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/deformation/spherical_ffd/def_spherical.cfg b/TestCases/deformation/spherical_ffd/def_spherical.cfg index 900f745b5a50..19d44fee875d 100644 --- a/TestCases/deformation/spherical_ffd/def_spherical.cfg +++ b/TestCases/deformation/spherical_ffd/def_spherical.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 5/15/2013 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/deformation/spherical_ffd/def_spherical_bspline.cfg b/TestCases/deformation/spherical_ffd/def_spherical_bspline.cfg index 3fb60f392700..ffdd21b6a911 100644 --- a/TestCases/deformation/spherical_ffd/def_spherical_bspline.cfg +++ b/TestCases/deformation/spherical_ffd/def_spherical_bspline.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 5/15/2013 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_euler/arina2k/Arina2KRS.cfg b/TestCases/disc_adj_euler/arina2k/Arina2KRS.cfg index 6e3e256a3193..28e9a76ac3c1 100644 --- a/TestCases/disc_adj_euler/arina2k/Arina2KRS.cfg +++ b/TestCases/disc_adj_euler/arina2k/Arina2KRS.cfg @@ -6,7 +6,7 @@ % Author: Jairo Paes Cavalcante Filho [Based on T. Economon & M. Pini work] % % Institution: University of São Paulo % % Date: 8-JUL-2018 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_euler/cylinder3D/inv_cylinder3D.cfg b/TestCases/disc_adj_euler/cylinder3D/inv_cylinder3D.cfg index 493593371b71..5634e22ca37b 100644 --- a/TestCases/disc_adj_euler/cylinder3D/inv_cylinder3D.cfg +++ b/TestCases/disc_adj_euler/cylinder3D/inv_cylinder3D.cfg @@ -5,7 +5,7 @@ % Author: ___________________________________________________________________ % % Institution: ______________________________________________________________ % % Date: __________ % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_euler/oneram6/inv_ONERAM6.cfg b/TestCases/disc_adj_euler/oneram6/inv_ONERAM6.cfg index 6d525632468e..9ac61f175834 100644 --- a/TestCases/disc_adj_euler/oneram6/inv_ONERAM6.cfg +++ b/TestCases/disc_adj_euler/oneram6/inv_ONERAM6.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios, Heather Kline % % Institution: Stanford University % % Date: 01.17.2017 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_fea/configAD_fem.cfg b/TestCases/disc_adj_fea/configAD_fem.cfg index 188c7e451bfb..07b8656b1ab5 100644 --- a/TestCases/disc_adj_fea/configAD_fem.cfg +++ b/TestCases/disc_adj_fea/configAD_fem.cfg @@ -4,7 +4,7 @@ % Author: R.Sanchez % % Institution: Imperial College London % % Date: 2017.11.29 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SOLVER= ELASTICITY @@ -16,7 +16,7 @@ RESTART_SOL= NO ITER = 10 -OBJECTIVE_FUNCTION = REFERENCE_GEOMETRY +OBJECTIVE_FUNCTION = REFERENCE_GEOMETRY REFERENCE_GEOMETRY = YES REFERENCE_GEOMETRY_FILENAME = reference_geometry.dat @@ -39,7 +39,6 @@ MATERIAL_COMPRESSIBILITY= COMPRESSIBLE ELASTICITY_MODULUS=21000 POISSON_RATIO=0.4 MATERIAL_DENSITY=100 -DEAD_LOAD=NO FORMULATION_ELASTICITY_2D = PLANE_STRAIN NONLINEAR_FEM_SOLUTION_METHOD = NEWTON_RAPHSON diff --git a/TestCases/disc_adj_fsi/Airfoil_2d/configFlow.cfg b/TestCases/disc_adj_fsi/Airfoil_2d/configFlow.cfg index 845c47996540..23143f1ea39f 100755 --- a/TestCases/disc_adj_fsi/Airfoil_2d/configFlow.cfg +++ b/TestCases/disc_adj_fsi/Airfoil_2d/configFlow.cfg @@ -51,10 +51,9 @@ TIME_DISCRE_FLOW= EULER_IMPLICIT % Linear solvers ------------------------------------------------------- % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= ILU -LINEAR_SOLVER_ERROR= 1E-3 -LINEAR_SOLVER_ITER= 20 -LINEAR_SOLVER_SMOOTHER_RELAXATION= 0.7 -DISCADJ_LIN_SOLVER= SMOOTHER +LINEAR_SOLVER_ERROR= 1E-4 +LINEAR_SOLVER_ITER= 50 +DISCADJ_LIN_SOLVER= FGMRES DISCADJ_LIN_PREC= ILU NEWTON_KRYLOV= YES QUASI_NEWTON_NUM_SAMPLES= 999 @@ -91,4 +90,4 @@ VOLUME_ADJ_FILENAME= adjoint_fluid SURFACE_FILENAME= surface_fluid SURFACE_ADJ_FILENAME= adjoint_surface_fluid SCREEN_WRT_FREQ_INNER= 10 -CONV_FILENAME= history \ No newline at end of file +CONV_FILENAME= history diff --git a/TestCases/disc_adj_fsi/config.cfg b/TestCases/disc_adj_fsi/config.cfg index 044f409302c1..f9729cb5adb4 100644 --- a/TestCases/disc_adj_fsi/config.cfg +++ b/TestCases/disc_adj_fsi/config.cfg @@ -1,5 +1,5 @@ SOLVER= MULTIPHYSICS -MATH_PROBLEM= DISCRETE_ADJOINT +RESTART_SOL= NO CONFIG_LIST=(configFlow.cfg, configFEA.cfg) MARKER_ZONE_INTERFACE = (UpperWall, UpperWallS, LowerWall, LowerWallS) diff --git a/TestCases/disc_adj_fsi/configFEA.cfg b/TestCases/disc_adj_fsi/configFEA.cfg index 4c93a30bb768..1071d12fc297 100644 --- a/TestCases/disc_adj_fsi/configFEA.cfg +++ b/TestCases/disc_adj_fsi/configFEA.cfg @@ -4,15 +4,11 @@ % Author: R.Sanchez % % Institution: Imperial College London % % Date: 2017.11.29 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SOLVER= ELASTICITY -MATH_PROBLEM= DISCRETE_ADJOINT - -RESTART_SOL= NO - PRESTRETCH = YES PRESTRETCH_FILENAME = prestretch.dat @@ -27,8 +23,6 @@ REFERENCE_GEOMETRY_FORMAT = SU2 % Consider only the surface REFERENCE_GEOMETRY_SURFACE = NO -READ_BINARY_RESTART=NO - STAT_RELAX_PARAMETER= 1.0 BGS_RELAXATION = FIXED_PARAMETER PREDICTOR_ORDER=0 @@ -49,13 +43,13 @@ MARKER_CLAMPED = ( Clamped_Right, Clamped_Left ) MARKER_FLUID_LOAD= ( LowerWallS, UpperWallS) -LINEAR_SOLVER= CONJUGATE_GRADIENT -LINEAR_SOLVER_PREC= JACOBI +LINEAR_SOLVER= FGMRES +LINEAR_SOLVER_PREC= ILU LINEAR_SOLVER_ERROR= 1E-9 -LINEAR_SOLVER_ITER= 50000 +LINEAR_SOLVER_ITER= 100 -DISCADJ_LIN_SOLVER = CONJUGATE_GRADIENT -DISCADJ_LIN_PREC = JACOBI +DISCADJ_LIN_SOLVER = FGMRES +DISCADJ_LIN_PREC = ILU CONV_RESIDUAL_MINVAL= -10 CONV_STARTITER= 10 diff --git a/TestCases/disc_adj_fsi/configFlow.cfg b/TestCases/disc_adj_fsi/configFlow.cfg index 7fd45fb741a4..fead895f27f5 100644 --- a/TestCases/disc_adj_fsi/configFlow.cfg +++ b/TestCases/disc_adj_fsi/configFlow.cfg @@ -4,20 +4,14 @@ % Author: R.Sanchez % % Institution: Imperial College London % % Date: 2017.11.29 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SOLVER= NAVIER_STOKES -MATH_PROBLEM= DISCRETE_ADJOINT - -RESTART_SOL= NO - -READ_BINARY_RESTART=NO - INNER_ITER= 50 -STAT_RELAX_PARAMETER= 1.0 +STAT_RELAX_PARAMETER= 1 BGS_RELAXATION = FIXED_PARAMETER PREDICTOR_ORDER=0 @@ -48,7 +42,6 @@ MARKER_MONITORING= ( UpperWall, LowerWall, Wall) DEFORM_MESH= YES MARKER_DEFORM_MESH= ( UpperWall, LowerWall ) - DEFORM_STIFFNESS_TYPE = INVERSE_VOLUME DEFORM_POISSONS_RATIO = 1e6 DEFORM_LINEAR_SOLVER = CONJUGATE_GRADIENT diff --git a/TestCases/disc_adj_fsi/dyn_fsi/config.cfg b/TestCases/disc_adj_fsi/dyn_fsi/config.cfg index 2f8810526ad8..0aa9e2ebd7bd 100644 --- a/TestCases/disc_adj_fsi/dyn_fsi/config.cfg +++ b/TestCases/disc_adj_fsi/dyn_fsi/config.cfg @@ -11,16 +11,15 @@ MESH_FILENAME= mesh.su2 TIME_DOMAIN = YES TIME_ITER = 3 -TIME_STEP = 0.01 +TIME_STEP = 0.002 UNST_ADJOINT_ITER= 10 ITER_AVERAGE_OBJ= 3 OBJECTIVE_FUNCTION= REFERENCE_NODE -SCREEN_OUTPUT= OUTER_ITER, AVG_BGS_RES[0] +SCREEN_OUTPUT= TIME_ITER, OUTER_ITER, AVG_BGS_RES[0], AVG_BGS_RES[1], SENSITIVITY[1] WRT_ZONE_HIST=YES %WRT_ZONE_CONV=YES -% Debug: Force Zero Grid Velocity = NO WRT_PERFORMANCE= NO diff --git a/TestCases/disc_adj_fsi/dyn_fsi/configFEA.cfg b/TestCases/disc_adj_fsi/dyn_fsi/configFEA.cfg index 7070a14d4a54..0879e03fe446 100644 --- a/TestCases/disc_adj_fsi/dyn_fsi/configFEA.cfg +++ b/TestCases/disc_adj_fsi/dyn_fsi/configFEA.cfg @@ -17,7 +17,7 @@ DESIGN_VARIABLE_FEA= YOUNG_MODULUS % Solid properties ----------------------------------------------------- % MATERIAL_MODEL= NEO_HOOKEAN -ELASTICITY_MODULUS= 7E8 +ELASTICITY_MODULUS= 2E9 POISSON_RATIO= 0.35 MATERIAL_DENSITY= 2700.0 @@ -48,7 +48,6 @@ INCREMENTAL_LOAD= NO MESH_FILENAME= mesh.su2 MESH_FORMAT= SU2 -RESTART_SOL= NO SOLUTION_FILENAME= solution_solid.dat SOLUTION_ADJ_FILENAME= adjoint_solid.dat OUTPUT_WRT_FREQ= 1 diff --git a/TestCases/disc_adj_fsi/dyn_fsi/configFlow.cfg b/TestCases/disc_adj_fsi/dyn_fsi/configFlow.cfg index fbb5552efc8e..755b4f515cc9 100644 --- a/TestCases/disc_adj_fsi/dyn_fsi/configFlow.cfg +++ b/TestCases/disc_adj_fsi/dyn_fsi/configFlow.cfg @@ -46,12 +46,15 @@ NUM_METHOD_GRAD= GREEN_GAUSS CFL_NUMBER= 1000.0 % Flow numerics -------------------------------------------------------- % -CONV_NUM_METHOD_FLOW= JST +CONV_NUM_METHOD_FLOW= ROE +MUSCL_FLOW= YES +SLOPE_LIMITER_FLOW= NONE JST_SENSOR_COEFF= ( 0.5, 0.02 ) +ENTROPY_FIX_COEFF= 0.01 TIME_DISCRE_FLOW= EULER_IMPLICIT % Linear solvers ------------------------------------------------------- % -LINEAR_SOLVER= BCGSTAB +LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= ILU LINEAR_SOLVER_ERROR= 1E-6 LINEAR_SOLVER_ITER= 25 @@ -82,7 +85,6 @@ CONV_RESIDUAL_MINVAL= -7 MESH_FILENAME= mesh.su2 MESH_FORMAT= SU2 % -RESTART_SOL= NO SOLUTION_FILENAME= solution_fluid.dat SOLUTION_ADJ_FILENAME= adjoint_fluid.dat OUTPUT_WRT_FREQ= 1 @@ -95,5 +97,6 @@ SURFACE_FILENAME= surface_fluid SURFACE_ADJ_FILENAME= adjoint_surface_fluid SCREEN_WRT_FREQ_INNER= 10 CONV_FILENAME= history +SCREEN_OUTPUT= ITER, RMS_RES, LINSOL HISTORY_OUTPUT= ITER, RMS_RES, AERO_COEFF, TAVG_AERO_COEFF OUTPUT_FILES= NONE diff --git a/TestCases/disc_adj_fsi/dyn_fsi/grad_dv.opt.ref b/TestCases/disc_adj_fsi/dyn_fsi/grad_dv.opt.ref index d0a338410ba9..3a0cbdefcf4e 100644 --- a/TestCases/disc_adj_fsi/dyn_fsi/grad_dv.opt.ref +++ b/TestCases/disc_adj_fsi/dyn_fsi/grad_dv.opt.ref @@ -1,9 +1,9 @@ INDEX GRAD -0 -5.239274142145693e-03 -1 -2.822866261832595e-03 -2 -1.251166631047082e-03 -3 -4.746312021502222e-04 -4 -4.726421390156573e-04 -5 -1.242307153964931e-03 -6 -2.797799332331688e-03 -7 -5.181304648315885e-03 +0 -4.570869215186209e-04 +1 -2.401466750293265e-04 +2 -9.134698389661222e-05 +3 -1.628087055796442e-05 +4 -1.741052457131011e-05 +5 -9.462489787924037e-05 +6 -2.452466259888652e-04 +7 -4.635483632874935e-04 diff --git a/TestCases/disc_adj_heat/disc_adj_heat.cfg b/TestCases/disc_adj_heat/disc_adj_heat.cfg index ee8c4ad51add..729503ad98bd 100644 --- a/TestCases/disc_adj_heat/disc_adj_heat.cfg +++ b/TestCases/disc_adj_heat/disc_adj_heat.cfg @@ -6,7 +6,7 @@ % Author: Ole Burghardt % % Institution: Chair for Scientific Computing, TU Kaiserslautern % % Date: November 26th, 2018 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_heat/primal.cfg b/TestCases/disc_adj_heat/primal.cfg index 4bd8a0a9ae98..02b5a32dccde 100644 --- a/TestCases/disc_adj_heat/primal.cfg +++ b/TestCases/disc_adj_heat/primal.cfg @@ -5,7 +5,7 @@ % Author: Ole Burghardt % % Institution: Chair for Scientific Computing, TU Kaiserslautern % % Date: November 26th, 2018 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_incomp_euler/naca0012/incomp_NACA0012_disc.cfg b/TestCases/disc_adj_incomp_euler/naca0012/incomp_NACA0012_disc.cfg index 6b35257ca846..88dcc3db1aeb 100644 --- a/TestCases/disc_adj_incomp_euler/naca0012/incomp_NACA0012_disc.cfg +++ b/TestCases/disc_adj_incomp_euler/naca0012/incomp_NACA0012_disc.cfg @@ -4,7 +4,7 @@ % Case description: Subsonic incompressible inviscid flow around a NACA0012 % % Author: Thomas D. Economon % % Date: 2018.10.30 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_incomp_navierstokes/cylinder/heated_cylinder.cfg b/TestCases/disc_adj_incomp_navierstokes/cylinder/heated_cylinder.cfg index 2975973f8d00..81f95a746824 100644 --- a/TestCases/disc_adj_incomp_navierstokes/cylinder/heated_cylinder.cfg +++ b/TestCases/disc_adj_incomp_navierstokes/cylinder/heated_cylinder.cfg @@ -4,7 +4,7 @@ % Case description: Steady incompressible laminar flow past a heated cylinder % % Author: Thomas D. Economon % % Date: 2018.06.10 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_incomp_rans/naca0012/turb_naca0012_sa.cfg b/TestCases/disc_adj_incomp_rans/naca0012/turb_naca0012_sa.cfg index 6db1724e57d6..929ccd00f6f1 100755 --- a/TestCases/disc_adj_incomp_rans/naca0012/turb_naca0012_sa.cfg +++ b/TestCases/disc_adj_incomp_rans/naca0012/turb_naca0012_sa.cfg @@ -5,7 +5,7 @@ % http://turbmodels.larc.nasa.gov/naca0012_val_sa.html % % Author: Thomas D. Economon & Francisco Palacios % % Date: 2018.06.10 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_incomp_rans/naca0012/turb_naca0012_sst.cfg b/TestCases/disc_adj_incomp_rans/naca0012/turb_naca0012_sst.cfg index 10406f8d60fe..4e834ab4a4d4 100755 --- a/TestCases/disc_adj_incomp_rans/naca0012/turb_naca0012_sst.cfg +++ b/TestCases/disc_adj_incomp_rans/naca0012/turb_naca0012_sst.cfg @@ -5,7 +5,7 @@ % http://turbmodels.larc.nasa.gov/naca0012_val_sst.html % % Author: Thomas D. Economon & Francisco Palacios % % Date: 2018.06.10 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_rans/cylinder/cylinder.cfg b/TestCases/disc_adj_rans/cylinder/cylinder.cfg index 97cbc9df7abf..8b5ad810978e 100644 --- a/TestCases/disc_adj_rans/cylinder/cylinder.cfg +++ b/TestCases/disc_adj_rans/cylinder/cylinder.cfg @@ -5,7 +5,7 @@ % Author: Tim Albring % % Institution: TU Kaiserslautern % % Date: 2016.06.14 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_rans/cylinder/cylinder_Windowing.cfg b/TestCases/disc_adj_rans/cylinder/cylinder_Windowing.cfg index 030483833a8a..35b21a1f5366 100644 --- a/TestCases/disc_adj_rans/cylinder/cylinder_Windowing.cfg +++ b/TestCases/disc_adj_rans/cylinder/cylinder_Windowing.cfg @@ -5,7 +5,7 @@ % Author: Tim Albring % % Institution: TU Kaiserslautern % % Date: 2016.06.14 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_rans/cylinder/cylinder_Windowing_AD.cfg b/TestCases/disc_adj_rans/cylinder/cylinder_Windowing_AD.cfg index 32bfbddcf739..829da3dc38f9 100644 --- a/TestCases/disc_adj_rans/cylinder/cylinder_Windowing_AD.cfg +++ b/TestCases/disc_adj_rans/cylinder/cylinder_Windowing_AD.cfg @@ -5,7 +5,7 @@ % Author: Tim Albring % % Institution: TU Kaiserslautern % % Date: 2016.06.14 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_rans/cylinder_DT_1ST/cylinder.cfg b/TestCases/disc_adj_rans/cylinder_DT_1ST/cylinder.cfg index 586aa35c2934..821bfbb5e51f 100644 --- a/TestCases/disc_adj_rans/cylinder_DT_1ST/cylinder.cfg +++ b/TestCases/disc_adj_rans/cylinder_DT_1ST/cylinder.cfg @@ -5,7 +5,7 @@ % Author: Tim Albring % % Institution: TU Kaiserslautern % % Date: 2016.06.14 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_rans/naca0012/naca0012.cfg b/TestCases/disc_adj_rans/naca0012/naca0012.cfg index 9a84427b263f..7061a73e0e0a 100644 --- a/TestCases/disc_adj_rans/naca0012/naca0012.cfg +++ b/TestCases/disc_adj_rans/naca0012/naca0012.cfg @@ -5,7 +5,7 @@ % Author: Steffen Schotthöfer % % Institution: TU Kaiserslautern % % Date: Mar 16, 2017 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_rans/naca0012/turb_NACA0012_sa.cfg b/TestCases/disc_adj_rans/naca0012/turb_NACA0012_sa.cfg index c3dc5d2824cc..919a6e48bbd4 100644 --- a/TestCases/disc_adj_rans/naca0012/turb_NACA0012_sa.cfg +++ b/TestCases/disc_adj_rans/naca0012/turb_NACA0012_sa.cfg @@ -6,7 +6,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: Feb 18th, 2013 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -45,6 +45,7 @@ MARKER_MONITORING= ( airfoil ) % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% % NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES +NUM_METHOD_GRAD_RECON= LEAST_SQUARES CFL_NUMBER= 10.0 MAX_DELTA_TIME= 1E10 CFL_ADAPT= NO @@ -67,7 +68,6 @@ LINEAR_SOLVER_ITER= 5 % CONV_NUM_METHOD_FLOW= ROE MUSCL_FLOW= YES -SLOPE_LIMITER_FLOW= VENKATAKRISHNAN JST_SENSOR_COEFF= ( 0.5, 0.02 ) TIME_DISCRE_FLOW= EULER_IMPLICIT @@ -88,7 +88,7 @@ CONV_CAUCHY_EPS= 1E-6 % ------------------------- INPUT/OUTPUT INFORMATION --------------------------% % -MESH_FILENAME= n0012_113-33.su2 +MESH_FILENAME= n0012_225-65.su2 MESH_FORMAT= SU2 MESH_OUT_FILENAME= mesh_out.su2 SOLUTION_FILENAME= solution_flow_sa.dat @@ -103,4 +103,4 @@ GRAD_OBJFUNC_FILENAME= of_grad.dat SURFACE_FILENAME= surface_flow SURFACE_ADJ_FILENAME= surface_adjoint OUTPUT_WRT_FREQ= 1000 -SCREEN_OUTPUT = (INNER_ITER, RMS_ADJ_DENSITY, RMS_ADJ_NU_TILDE, SENS_PRESS, SENS_AOA RMS_DENSITY RMS_NU_TILDE LIFT DRAG LINSOL_ITER LINSOL_RESIDUAL LINSOL_ITER_TURB LINSOL_RESIDUAL_TURB) \ No newline at end of file +SCREEN_OUTPUT = (INNER_ITER, RMS_ADJ_DENSITY, RMS_ADJ_NU_TILDE, SENS_PRESS, SENS_AOA RMS_DENSITY RMS_NU_TILDE LIFT DRAG LINSOL_ITER LINSOL_RESIDUAL LINSOL_ITER_TURB LINSOL_RESIDUAL_TURB) diff --git a/TestCases/disc_adj_rans/naca0012/turb_NACA0012_sst.cfg b/TestCases/disc_adj_rans/naca0012/turb_NACA0012_sst.cfg index 977ae827ec24..066d60c80319 100644 --- a/TestCases/disc_adj_rans/naca0012/turb_NACA0012_sst.cfg +++ b/TestCases/disc_adj_rans/naca0012/turb_NACA0012_sst.cfg @@ -6,16 +6,18 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: Feb 18th, 2013 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------% % SOLVER= RANS +SST_OPTIONS= V1994m KIND_TURB_MODEL= SST MATH_PROBLEM= DISCRETE_ADJOINT RESTART_SOL= NO +READ_BINARY_RESTART= NO % -------------------- COMPRESSIBLE FREE-STREAM DEFINITION --------------------% % @@ -44,7 +46,8 @@ MARKER_MONITORING= ( airfoil ) % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% % NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES -CFL_NUMBER= 10.0 +NUM_METHOD_GRAD_RECON= LEAST_SQUARES +CFL_NUMBER= 1000.0 MAX_DELTA_TIME= 1E10 CFL_ADAPT= YES CFL_ADAPT_PARAM= ( 0.1, 1.2, 1.0, 100.0 ) @@ -66,7 +69,7 @@ LINEAR_SOLVER_ITER= 10 % CONV_NUM_METHOD_FLOW= ROE MUSCL_FLOW= YES -SLOPE_LIMITER_FLOW= VENKATAKRISHNAN +SLOPE_LIMITER_FLOW= NONE JST_SENSOR_COEFF= ( 0.5, 0.02 ) TIME_DISCRE_FLOW= EULER_IMPLICIT @@ -74,7 +77,7 @@ TIME_DISCRE_FLOW= EULER_IMPLICIT % CONV_NUM_METHOD_TURB= SCALAR_UPWIND MUSCL_TURB= NO -SLOPE_LIMITER_TURB= VENKATAKRISHNAN +SLOPE_LIMITER_TURB= NONE TIME_DISCRE_TURB= EULER_IMPLICIT CFL_REDUCTION_TURB= 1.0 @@ -87,7 +90,7 @@ CONV_CAUCHY_EPS= 1E-6 % ------------------------- INPUT/OUTPUT INFORMATION --------------------------% % -MESH_FILENAME= n0012_113-33.su2 +MESH_FILENAME= n0012_225-65.su2 MESH_FORMAT= SU2 MESH_OUT_FILENAME= mesh_out.su2 SOLUTION_FILENAME= solution_flow_sst.dat @@ -102,4 +105,4 @@ GRAD_OBJFUNC_FILENAME= of_grad.dat SURFACE_FILENAME= surface_flow SURFACE_ADJ_FILENAME= surface_adjoint OUTPUT_WRT_FREQ= 1000 -SCREEN_OUTPUT = (INNER_ITER, RMS_ADJ_DENSITY, RMS_ADJ_TKE, SENS_PRESS, SENS_AOA RMS_DENSITY RMS_TKE LIFT DRAG) \ No newline at end of file +SCREEN_OUTPUT = (INNER_ITER, RMS_ADJ_DENSITY, RMS_ADJ_TKE, SENS_PRESS, SENS_AOA RMS_DENSITY RMS_TKE LIFT DRAG) diff --git a/TestCases/disc_adj_turbomachinery/transonic_stator_2D/transonic_stator.cfg b/TestCases/disc_adj_turbomachinery/transonic_stator_2D/transonic_stator.cfg index 479586fc59ff..dd023feb86f9 100644 --- a/TestCases/disc_adj_turbomachinery/transonic_stator_2D/transonic_stator.cfg +++ b/TestCases/disc_adj_turbomachinery/transonic_stator_2D/transonic_stator.cfg @@ -5,7 +5,7 @@ % Author: S. Vitale % % Institution: Delft University of Technology % % Date: 2017.03.01 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/euler/CRM/inv_CRM_JST.cfg b/TestCases/euler/CRM/inv_CRM_JST.cfg index a7382b304130..b55ac94d2850 100644 --- a/TestCases/euler/CRM/inv_CRM_JST.cfg +++ b/TestCases/euler/CRM/inv_CRM_JST.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2012.10.07 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/euler/biparabolic/BIPARABOLIC.cfg b/TestCases/euler/biparabolic/BIPARABOLIC.cfg index e998281388ac..7a31323f836b 100644 --- a/TestCases/euler/biparabolic/BIPARABOLIC.cfg +++ b/TestCases/euler/biparabolic/BIPARABOLIC.cfg @@ -5,7 +5,7 @@ % Author: Trent W. Lukaczyk % % Institution: Stanford University % % Date: 2012.08.16 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/euler/bluntbody/blunt.cfg b/TestCases/euler/bluntbody/blunt.cfg index 3a89720ba25f..efb8af6fbbb9 100644 --- a/TestCases/euler/bluntbody/blunt.cfg +++ b/TestCases/euler/bluntbody/blunt.cfg @@ -5,7 +5,7 @@ % Author: Amit Sachdeva % % Institution: ADSG-VSSC % % Date: 2019.01.23 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/euler/channel/inv_channel.cfg b/TestCases/euler/channel/inv_channel.cfg index 760c621729ee..001f2cdf6067 100644 --- a/TestCases/euler/channel/inv_channel.cfg +++ b/TestCases/euler/channel/inv_channel.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2012.09.29 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/euler/channel/inv_channel_RK.cfg b/TestCases/euler/channel/inv_channel_RK.cfg index 4c03659c199b..d5e0642cf984 100644 --- a/TestCases/euler/channel/inv_channel_RK.cfg +++ b/TestCases/euler/channel/inv_channel_RK.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2012.10.07 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/euler/naca0012/inv_NACA0012.cfg b/TestCases/euler/naca0012/inv_NACA0012.cfg index cb57e61c3073..ea33d6bd843c 100644 --- a/TestCases/euler/naca0012/inv_NACA0012.cfg +++ b/TestCases/euler/naca0012/inv_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/euler/naca0012/inv_NACA0012_Roe.cfg b/TestCases/euler/naca0012/inv_NACA0012_Roe.cfg index 58c5b4721ef7..4adc98ffaf53 100644 --- a/TestCases/euler/naca0012/inv_NACA0012_Roe.cfg +++ b/TestCases/euler/naca0012/inv_NACA0012_Roe.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2012.10.07 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/euler/oneram6/inv_ONERAM6.cfg b/TestCases/euler/oneram6/inv_ONERAM6.cfg index 49438295f581..133a10d214e5 100644 --- a/TestCases/euler/oneram6/inv_ONERAM6.cfg +++ b/TestCases/euler/oneram6/inv_ONERAM6.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2015.08.25 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/euler/ramp/inv_ramp.cfg b/TestCases/euler/ramp/inv_ramp.cfg index 15f650bd8595..fad4c9548acf 100644 --- a/TestCases/euler/ramp/inv_ramp.cfg +++ b/TestCases/euler/ramp/inv_ramp.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon, Amit Sachdeva % % Institution: Stanford University % % Date: 2023.04.08 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/euler/wedge/inv_wedge_HLLC.cfg b/TestCases/euler/wedge/inv_wedge_HLLC.cfg index be32ff4aaac8..f54892fdd3bf 100644 --- a/TestCases/euler/wedge/inv_wedge_HLLC.cfg +++ b/TestCases/euler/wedge/inv_wedge_HLLC.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2012.10.07 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/fea_fsi/Airfoil_RBF/config.cfg b/TestCases/fea_fsi/Airfoil_RBF/config.cfg index cb27f047bb00..92dadba651b0 100755 --- a/TestCases/fea_fsi/Airfoil_RBF/config.cfg +++ b/TestCases/fea_fsi/Airfoil_RBF/config.cfg @@ -3,7 +3,7 @@ % Case description: 2D airfoil FSI with radial basis function interp. % % Institution: Imperial College London % % Date: 2015.08.12 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SOLVER = MULTIPHYSICS diff --git a/TestCases/fea_fsi/Airfoil_RBF/configFEA.cfg b/TestCases/fea_fsi/Airfoil_RBF/configFEA.cfg index 25489531a3b3..b75242bcc67d 100644 --- a/TestCases/fea_fsi/Airfoil_RBF/configFEA.cfg +++ b/TestCases/fea_fsi/Airfoil_RBF/configFEA.cfg @@ -2,7 +2,7 @@ % SU2 configuration file % % Case description: 2D airfoil FSI with radial basis function interp. % % Institution: Imperial College London % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Interface options ---------------------------------------------------- % diff --git a/TestCases/fea_fsi/Airfoil_RBF/configFlow.cfg b/TestCases/fea_fsi/Airfoil_RBF/configFlow.cfg index a345a5ce4ef9..a8231078668f 100644 --- a/TestCases/fea_fsi/Airfoil_RBF/configFlow.cfg +++ b/TestCases/fea_fsi/Airfoil_RBF/configFlow.cfg @@ -2,7 +2,7 @@ % SU2 configuration file % % Case description: 2D airfoil FSI with radial basis function interp. % % Institution: Imperial College London % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Interface options ---------------------------------------------------- % diff --git a/TestCases/fea_fsi/DynBeam_2d/configBeam_2d.cfg b/TestCases/fea_fsi/DynBeam_2d/configBeam_2d.cfg index 75416f23dc40..f2728332c676 100644 --- a/TestCases/fea_fsi/DynBeam_2d/configBeam_2d.cfg +++ b/TestCases/fea_fsi/DynBeam_2d/configBeam_2d.cfg @@ -4,7 +4,7 @@ % Author: Ruben Sanchez Fernandez % % Institution: Imperial College London % % Date: 2016.02.01 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SOLVER= ELASTICITY diff --git a/TestCases/fea_fsi/MixElemsKnowles/config.cfg b/TestCases/fea_fsi/MixElemsKnowles/config.cfg index 495648587218..a24034a77dcc 100644 --- a/TestCases/fea_fsi/MixElemsKnowles/config.cfg +++ b/TestCases/fea_fsi/MixElemsKnowles/config.cfg @@ -4,7 +4,7 @@ % Case description: Tip-loaded 3D cantilever beam, mix of element types, % % nonlinear elasticity with Knowles material model. % % Institution: Imperial College London % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/fea_fsi/SquareCyl_Beam/config.cfg b/TestCases/fea_fsi/SquareCyl_Beam/config.cfg index 2eb29fd02b81..4f587b580ce0 100644 --- a/TestCases/fea_fsi/SquareCyl_Beam/config.cfg +++ b/TestCases/fea_fsi/SquareCyl_Beam/config.cfg @@ -5,7 +5,7 @@ % Author: Ruben Sanchez Fernandez % % Institution: Imperial College London % % Date: 2016.06.01 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/fea_fsi/StatBeam_3d/configBeam_3d.cfg b/TestCases/fea_fsi/StatBeam_3d/configBeam_3d.cfg index a6c9cde3c84c..f78228d1842b 100644 --- a/TestCases/fea_fsi/StatBeam_3d/configBeam_3d.cfg +++ b/TestCases/fea_fsi/StatBeam_3d/configBeam_3d.cfg @@ -4,7 +4,7 @@ % Author: Ruben Sanchez Fernandez % % Institution: Imperial College London % % Date: 2016.02.01 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SOLVER= ELASTICITY @@ -14,14 +14,17 @@ MATERIAL_MODEL= LINEAR_ELASTIC MESH_FILENAME= meshBeam_3d.su2 ELASTICITY_MODULUS=3E7 POISSON_RATIO=0.3 +MATERIAL_THERMAL_EXPANSION_COEFF= 2e-5 +MATERIAL_REFERENCE_TEMPERATURE= 288.15 +FREESTREAM_TEMPERATURE= 350 MATERIAL_DENSITY=7854 -MARKER_CLAMPED = ( left , right ) -MARKER_PRESSURE= ( lower, 0 , symleft, 0, symright, 0) -MARKER_LOAD= ( upper, 1, 1000, 0, -1, 0) -LINEAR_SOLVER= FGMRES -LINEAR_SOLVER_PREC= LU_SGS +MARKER_CLAMPED = ( left, right ) +MARKER_PRESSURE= ( lower, 0 , symleft, 0, symright, 0 ) +MARKER_LOAD= ( upper, 1, 1000, 0, -1, 0 ) +LINEAR_SOLVER= CONJUGATE_GRADIENT +LINEAR_SOLVER_PREC= ILU LINEAR_SOLVER_ERROR= 1E-8 -LINEAR_SOLVER_ITER= 500 +LINEAR_SOLVER_ITER= 1000 MESH_FORMAT= SU2 TABULAR_FORMAT= CSV CONV_FILENAME= history_beam diff --git a/TestCases/fea_fsi/ThermalBeam_3d/configBeam_3d.cfg b/TestCases/fea_fsi/ThermalBeam_3d/configBeam_3d.cfg new file mode 100644 index 000000000000..cad1ab20e1c5 --- /dev/null +++ b/TestCases/fea_fsi/ThermalBeam_3d/configBeam_3d.cfg @@ -0,0 +1,48 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SU2 configuration file % +% Case description: 3D beam with thermal expansion % +% File Version 8.2.0 "Harrier" % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +SOLVER= ELASTICITY +MATH_PROBLEM= DIRECT +GEOMETRIC_CONDITIONS= SMALL_DEFORMATIONS +MATERIAL_MODEL= LINEAR_ELASTIC +MESH_FILENAME= meshBeam_3d.su2 +ELASTICITY_MODULUS=3E7 +POISSON_RATIO=0.3 +MATERIAL_THERMAL_EXPANSION_COEFF= 2e-5 +MATERIAL_REFERENCE_TEMPERATURE= 288.15 +MATERIAL_DENSITY=7854 +MARKER_CLAMPED= ( left, right ) +MARKER_PRESSURE= ( lower, 0, symleft, 0, symright, 0 ) +MARKER_LOAD= ( upper, 1, 1000, 0, -1, 0 ) +LINEAR_SOLVER= CONJUGATE_GRADIENT +LINEAR_SOLVER_PREC= ILU +LINEAR_SOLVER_ERROR= 1E-8 +LINEAR_SOLVER_ITER= 1000 +MESH_FORMAT= SU2 +TABULAR_FORMAT= CSV +CONV_FILENAME= history_beam +VOLUME_FILENAME= beam +RESTART_FILENAME= restart_beam.dat +SOLUTION_FILENAME= restart_beam.dat +OUTPUT_WRT_FREQ= 1 +INNER_ITER=1 + +% Coupling with heat solver. +WEAKLY_COUPLED_HEAT_EQUATION= YES +FREESTREAM_TEMPERATURE= 300 +SPECIFIC_HEAT_CP= 460 +THERMAL_CONDUCTIVITY_CONSTANT= 45 +% NOTE: These markers a duplicates of "left" and "right" to allow specifying +% boundary conditions for both solvers. This is work in progress. +MARKER_ISOTHERMAL= ( left_heat, 400, right_heat, 300 ) + +NUM_METHOD_GRAD= GREEN_GAUSS +TIME_DISCRE_HEAT= EULER_IMPLICIT +CFL_NUMBER= 1e8 + +MARKER_MONITORING= ( left_heat ) +SCREEN_OUTPUT= INNER_ITER, RMS_RES, LINSOL, VMS, TOTAL_HEATFLUX + diff --git a/TestCases/fea_fsi/rotating_cylinder/config.cfg b/TestCases/fea_fsi/rotating_cylinder/config.cfg new file mode 100644 index 000000000000..7a9d124da76f --- /dev/null +++ b/TestCases/fea_fsi/rotating_cylinder/config.cfg @@ -0,0 +1,34 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SU2 configuration file % +% Case description: Spinning Cylinder % +% Author: Pedro Gomes % +% Institution: SU2 Foundation % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +SOLVER= ELASTICITY +MATH_PROBLEM= DIRECT +GEOMETRIC_CONDITIONS= SMALL_DEFORMATIONS +MATERIAL_MODEL= LINEAR_ELASTIC + +ELASTICITY_MODULUS= 2E11 +POISSON_RATIO= 0.3 +MATERIAL_DENSITY= 7854 + +MARKER_SYM= ( x_minus, per_1, per_2 ) +MARKER_PRESSURE= ( inner, 0, outer, 0, x_plus, 0 ) + +CENTRIFUGAL_FORCE= YES +ROTATION_RATE= ( 1500, 0, 0 ) +MOTION_ORIGIN= ( 0, 0, 0 ) + +LINEAR_SOLVER= CONJUGATE_GRADIENT +LINEAR_SOLVER_PREC= ILU +LINEAR_SOLVER_ERROR= 1E-8 +LINEAR_SOLVER_ITER= 1000 + +SCREEN_OUTPUT= INNER_ITER, RMS_RES, LINSOL, VMS +OUTPUT_WRT_FREQ= 1 +INNER_ITER= 1 + +MESH_FILENAME= cylinder.su2 + diff --git a/TestCases/fea_topology/config.cfg b/TestCases/fea_topology/config.cfg index 5e8d0b60d8af..8e085f08720e 100644 --- a/TestCases/fea_topology/config.cfg +++ b/TestCases/fea_topology/config.cfg @@ -2,7 +2,7 @@ % SU2 configuration file % % Case description: 4 by 1 cantilever optim. for stiff. @ 50% material % % Institution: Imperial College London % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Optimization diff --git a/TestCases/fixed_cl/naca0012/inv_NACA0012.cfg b/TestCases/fixed_cl/naca0012/inv_NACA0012.cfg index ccdc4708080c..0bfe73697519 100644 --- a/TestCases/fixed_cl/naca0012/inv_NACA0012.cfg +++ b/TestCases/fixed_cl/naca0012/inv_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/fixed_cl/naca0012/inv_NACA0012_ContAdj.cfg b/TestCases/fixed_cl/naca0012/inv_NACA0012_ContAdj.cfg index 5c513786fdad..043d410e7e83 100644 --- a/TestCases/fixed_cl/naca0012/inv_NACA0012_ContAdj.cfg +++ b/TestCases/fixed_cl/naca0012/inv_NACA0012_ContAdj.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/flamelet/01_laminar_premixed_ch4_flame_cfd/lam_prem_ch4_cfd.cfg b/TestCases/flamelet/01_laminar_premixed_ch4_flame_cfd/lam_prem_ch4_cfd.cfg index d2d8497b97d1..d1a8e6da6fc1 100644 --- a/TestCases/flamelet/01_laminar_premixed_ch4_flame_cfd/lam_prem_ch4_cfd.cfg +++ b/TestCases/flamelet/01_laminar_premixed_ch4_flame_cfd/lam_prem_ch4_cfd.cfg @@ -4,7 +4,7 @@ % Author: Nijso Beishuizen % % Institution: Bosch Thermotechnology % % Date: 08/09/2021 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/flamelet/02_laminar_premixed_ch4_flame_hx_ad/lam_prem_ch4_hx_ad.cfg b/TestCases/flamelet/02_laminar_premixed_ch4_flame_hx_ad/lam_prem_ch4_hx_ad.cfg index ff52e8d58b62..442018b7faf8 100644 --- a/TestCases/flamelet/02_laminar_premixed_ch4_flame_hx_ad/lam_prem_ch4_hx_ad.cfg +++ b/TestCases/flamelet/02_laminar_premixed_ch4_flame_hx_ad/lam_prem_ch4_hx_ad.cfg @@ -11,7 +11,7 @@ % Institution b: Bosch Thermotechnology % % % % Date: 02/21/2023 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -128,7 +128,7 @@ MARKER_ANALYZE_AVERAGE= MASSFLUX OUTPUT_FILES= RESTART, RESTART_ASCII, PARAVIEW VOLUME_OUTPUT= RESIDUAL, PRIMITIVE VOLUME_ADJ_FILENAME= ch4_flame_hx_ad - +WRT_RESTART_COMPACT = NO OUTPUT_WRT_FREQ= 100 % GRAD_OBJFUNC_FILENAME= of_grad.csv diff --git a/TestCases/flamelet/02_laminar_premixed_ch4_flame_hx_ad/lam_prem_ch4_hx_dot.cfg b/TestCases/flamelet/02_laminar_premixed_ch4_flame_hx_ad/lam_prem_ch4_hx_dot.cfg index 70f95d119166..8d060248274b 100644 --- a/TestCases/flamelet/02_laminar_premixed_ch4_flame_hx_ad/lam_prem_ch4_hx_dot.cfg +++ b/TestCases/flamelet/02_laminar_premixed_ch4_flame_hx_ad/lam_prem_ch4_hx_dot.cfg @@ -11,7 +11,7 @@ % Institution b: Bosch Thermotechnology % % % % Date: 02/21/2023 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/flamelet/03_laminar_premixed_ch4_flame_cht_cfd/lam_prem_ch4_cht_cfd_fluid.cfg b/TestCases/flamelet/03_laminar_premixed_ch4_flame_cht_cfd/lam_prem_ch4_cht_cfd_fluid.cfg index adf9a65020f6..af8e562b0cdb 100644 --- a/TestCases/flamelet/03_laminar_premixed_ch4_flame_cht_cfd/lam_prem_ch4_cht_cfd_fluid.cfg +++ b/TestCases/flamelet/03_laminar_premixed_ch4_flame_cht_cfd/lam_prem_ch4_cht_cfd_fluid.cfg @@ -19,6 +19,8 @@ HISTORY_OUTPUT= RMS_RES AERO_COEFF FLOW_COEFF FLOW_COEFF_SURF VOLUME_OUTPUT= SOLUTION PRIMITIVE SOURCE RESIDUAL LOOKUP +WRT_RESTART_COMPACT = NO + OUTPUT_FILES= (RESTART_ASCII, PARAVIEW) INNER_ITER= 1 diff --git a/TestCases/flamelet/03_laminar_premixed_ch4_flame_cht_cfd/lam_prem_ch4_cht_cfd_master.cfg b/TestCases/flamelet/03_laminar_premixed_ch4_flame_cht_cfd/lam_prem_ch4_cht_cfd_master.cfg index 9a674d7a8e5c..cb9dafa62bae 100644 --- a/TestCases/flamelet/03_laminar_premixed_ch4_flame_cht_cfd/lam_prem_ch4_cht_cfd_master.cfg +++ b/TestCases/flamelet/03_laminar_premixed_ch4_flame_cht_cfd/lam_prem_ch4_cht_cfd_master.cfg @@ -43,13 +43,15 @@ SCREEN_WRT_FREQ_OUTER= 1 WRT_VOLUME_OVERWRITE= YES -WRT_ZONE_CONV= YES +%WRT_ZONE_CONV= YES CONV_RESIDUAL_MINVAL= -20 VOLUME_FILENAME= fluid CONV_FILENAME= history +SCREEN_OUTPUT= OUTER_ITER, RMS_RES[0], RMS_RES[1] + % --------------------------- Optimization Parameters --------------------------% MESH_FILENAME= mesh_unstructured_cht.su2 diff --git a/TestCases/flamelet/04_laminar_premixed_ch4_flame_cht_ad/lam_prem_ch4_cht_ad_fluid.cfg b/TestCases/flamelet/04_laminar_premixed_ch4_flame_cht_ad/lam_prem_ch4_cht_ad_fluid.cfg index 7824d6780fda..b251e54182a8 100644 --- a/TestCases/flamelet/04_laminar_premixed_ch4_flame_cht_ad/lam_prem_ch4_cht_ad_fluid.cfg +++ b/TestCases/flamelet/04_laminar_premixed_ch4_flame_cht_ad/lam_prem_ch4_cht_ad_fluid.cfg @@ -23,6 +23,8 @@ VOLUME_OUTPUT= SOLUTION PRIMITIVE SOURCE RESIDUAL LOOKUP OUTPUT_FILES= ( RESTART_ASCII) +WRT_RESTART_COMPACT= NO + INNER_ITER= 1 % -------------------- BOUNDARY CONDITION DEFINITION --------------------------% diff --git a/TestCases/flamelet/04_laminar_premixed_ch4_flame_cht_ad/lam_prem_ch4_cht_ad_master.cfg b/TestCases/flamelet/04_laminar_premixed_ch4_flame_cht_ad/lam_prem_ch4_cht_ad_master.cfg index e3e9a0597c13..91524aea8eaf 100644 --- a/TestCases/flamelet/04_laminar_premixed_ch4_flame_cht_ad/lam_prem_ch4_cht_ad_master.cfg +++ b/TestCases/flamelet/04_laminar_premixed_ch4_flame_cht_ad/lam_prem_ch4_cht_ad_master.cfg @@ -44,10 +44,11 @@ OUTER_ITER = 1100 OUTPUT_WRT_FREQ= 50 SCREEN_WRT_FREQ_INNER= 1 SCREEN_WRT_FREQ_OUTER= 1 +SCREEN_OUTPUT= OUTER_ITER, BGS_RES[0], BGS_RES[1] WRT_VOLUME_OVERWRITE= YES -WRT_ZONE_CONV= YES +%WRT_ZONE_CONV= YES CONV_RESIDUAL_MINVAL= -20 VOLUME_FILENAME= fluid diff --git a/TestCases/flamelet/05_laminar_premixed_ch4_flame_cfd_axi/lam_prem_ch4_cfd_axi.cfg b/TestCases/flamelet/05_laminar_premixed_ch4_flame_cfd_axi/lam_prem_ch4_cfd_axi.cfg index f9cf7c695eb8..47140e2ddb3c 100644 --- a/TestCases/flamelet/05_laminar_premixed_ch4_flame_cfd_axi/lam_prem_ch4_cfd_axi.cfg +++ b/TestCases/flamelet/05_laminar_premixed_ch4_flame_cfd_axi/lam_prem_ch4_cfd_axi.cfg @@ -5,7 +5,7 @@ % Author: Nijso Beishuizen % % Institution: Bosch Thermotechnology % % Date: 08/09/2021 % -% File Version 8.1.0 "Harrier", % +% File Version 8.2.0 "Harrier", % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/flamelet/06_laminar_partial_premixed_ch4_flame_cfd/lam_partial_prem_ch4_cfd.cfg b/TestCases/flamelet/06_laminar_partial_premixed_ch4_flame_cfd/lam_partial_prem_ch4_cfd.cfg index fc749929e703..fe919c81896e 100644 --- a/TestCases/flamelet/06_laminar_partial_premixed_ch4_flame_cfd/lam_partial_prem_ch4_cfd.cfg +++ b/TestCases/flamelet/06_laminar_partial_premixed_ch4_flame_cfd/lam_partial_prem_ch4_cfd.cfg @@ -4,7 +4,7 @@ % Author: Nijso Beishuizen % % Institution: Bosch Thermotechnology % % Date: 16/06/2023 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/grad_smooth/naca0012/inv_NACA0012_gradsmooth.cfg b/TestCases/grad_smooth/naca0012/inv_NACA0012_gradsmooth.cfg index be7d48f96fcd..85dc08a4991f 100644 --- a/TestCases/grad_smooth/naca0012/inv_NACA0012_gradsmooth.cfg +++ b/TestCases/grad_smooth/naca0012/inv_NACA0012_gradsmooth.cfg @@ -4,7 +4,7 @@ % Case description: Sobolev smoothing for gradient on the NACA 0012 airfoil % % Author: Thomas Dick (TU Kaiserslautern) % % Date: 11.11.2021 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/grad_smooth/oneram6/ONERAM6_gradsmooth.cfg b/TestCases/grad_smooth/oneram6/ONERAM6_gradsmooth.cfg index b58d050a63d5..cd7215f3aa72 100644 --- a/TestCases/grad_smooth/oneram6/ONERAM6_gradsmooth.cfg +++ b/TestCases/grad_smooth/oneram6/ONERAM6_gradsmooth.cfg @@ -4,7 +4,7 @@ % Case description: Sobolev smoothing for gradient on the ONERA M6 wing % % Author: Thomas Dick (TU Kaiserslautern) % % Date: 11.11.2021 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/gust/cosine_gust_zdir.cfg b/TestCases/gust/cosine_gust_zdir.cfg index 91b1aa061bc3..c058c6e336d1 100644 --- a/TestCases/gust/cosine_gust_zdir.cfg +++ b/TestCases/gust/cosine_gust_zdir.cfg @@ -5,7 +5,7 @@ % Author: Arne Voß % % Institution: DLR % % Date: 25.05.2023 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/gust/gust_with_mesh_deformation.cfg b/TestCases/gust/gust_with_mesh_deformation.cfg index 962450178bde..9e8dba31c42a 100644 --- a/TestCases/gust/gust_with_mesh_deformation.cfg +++ b/TestCases/gust/gust_with_mesh_deformation.cfg @@ -5,7 +5,7 @@ % Author: Arne Voß % % Institution: DLR % % Date: 25.05.2023 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/gust/inv_gust_NACA0012.cfg b/TestCases/gust/inv_gust_NACA0012.cfg index b9e7f89c17e0..c00d51da1bfb 100644 --- a/TestCases/gust/inv_gust_NACA0012.cfg +++ b/TestCases/gust/inv_gust_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Santiago Padron % % Institution: Stanford University % % Date: 06-26-2015 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/harmonic_balance/HB.cfg b/TestCases/harmonic_balance/HB.cfg index 780e87ddfc55..d23aa827dafb 100644 --- a/TestCases/harmonic_balance/HB.cfg +++ b/TestCases/harmonic_balance/HB.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2016.20.09 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/harmonic_balance/hb_rans_preconditioning/davis.cfg b/TestCases/harmonic_balance/hb_rans_preconditioning/davis.cfg index baf7a19ee147..46278af8d161 100644 --- a/TestCases/harmonic_balance/hb_rans_preconditioning/davis.cfg +++ b/TestCases/harmonic_balance/hb_rans_preconditioning/davis.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2016.20.09 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_euler/NACA0012_3D_Hybrid_4thOrder/fem_NACA0012.cfg b/TestCases/hom_euler/NACA0012_3D_Hybrid_4thOrder/fem_NACA0012.cfg index 33cdf9e54367..640b6ec8a0cf 100644 --- a/TestCases/hom_euler/NACA0012_3D_Hybrid_4thOrder/fem_NACA0012.cfg +++ b/TestCases/hom_euler/NACA0012_3D_Hybrid_4thOrder/fem_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_euler/NACA0012_5thOrder/fem_NACA0012.cfg b/TestCases/hom_euler/NACA0012_5thOrder/fem_NACA0012.cfg index 93423631c1c9..e2c2781819d4 100644 --- a/TestCases/hom_euler/NACA0012_5thOrder/fem_NACA0012.cfg +++ b/TestCases/hom_euler/NACA0012_5thOrder/fem_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_euler/NACA0012_5thOrder/fem_NACA0012_reg.cfg b/TestCases/hom_euler/NACA0012_5thOrder/fem_NACA0012_reg.cfg index 47488d80e4b3..73db0c864d9b 100644 --- a/TestCases/hom_euler/NACA0012_5thOrder/fem_NACA0012_reg.cfg +++ b/TestCases/hom_euler/NACA0012_5thOrder/fem_NACA0012_reg.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_euler/Sphere_4thOrder_Hexa/fem_Sphere.cfg b/TestCases/hom_euler/Sphere_4thOrder_Hexa/fem_Sphere.cfg index 1d64cbe5c693..a6219e6bcc56 100644 --- a/TestCases/hom_euler/Sphere_4thOrder_Hexa/fem_Sphere.cfg +++ b/TestCases/hom_euler/Sphere_4thOrder_Hexa/fem_Sphere.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_euler/Sphere_4thOrder_Tet/fem_Sphere.cfg b/TestCases/hom_euler/Sphere_4thOrder_Tet/fem_Sphere.cfg index c39ab160b297..6af8e8185ad9 100644 --- a/TestCases/hom_euler/Sphere_4thOrder_Tet/fem_Sphere.cfg +++ b/TestCases/hom_euler/Sphere_4thOrder_Tet/fem_Sphere.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_euler/SubsonicChannel/nPoly1/fem_SubsonicChannel.cfg b/TestCases/hom_euler/SubsonicChannel/nPoly1/fem_SubsonicChannel.cfg index 94e6c85e7f12..8b02afb4ac47 100644 --- a/TestCases/hom_euler/SubsonicChannel/nPoly1/fem_SubsonicChannel.cfg +++ b/TestCases/hom_euler/SubsonicChannel/nPoly1/fem_SubsonicChannel.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_euler/SubsonicChannel/nPoly1/fem_SubsonicChannel_Farfield.cfg b/TestCases/hom_euler/SubsonicChannel/nPoly1/fem_SubsonicChannel_Farfield.cfg index 7c819091fac6..124723c6c747 100644 --- a/TestCases/hom_euler/SubsonicChannel/nPoly1/fem_SubsonicChannel_Farfield.cfg +++ b/TestCases/hom_euler/SubsonicChannel/nPoly1/fem_SubsonicChannel_Farfield.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_euler/SubsonicChannel/nPoly2/fem_SubsonicChannel.cfg b/TestCases/hom_euler/SubsonicChannel/nPoly2/fem_SubsonicChannel.cfg index 524b82866c45..9d946ef54693 100644 --- a/TestCases/hom_euler/SubsonicChannel/nPoly2/fem_SubsonicChannel.cfg +++ b/TestCases/hom_euler/SubsonicChannel/nPoly2/fem_SubsonicChannel.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_euler/SubsonicChannel/nPoly2/fem_SubsonicChannel_Farfield.cfg b/TestCases/hom_euler/SubsonicChannel/nPoly2/fem_SubsonicChannel_Farfield.cfg index 348926b3ca65..da554192c50e 100644 --- a/TestCases/hom_euler/SubsonicChannel/nPoly2/fem_SubsonicChannel_Farfield.cfg +++ b/TestCases/hom_euler/SubsonicChannel/nPoly2/fem_SubsonicChannel_Farfield.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_euler/SubsonicChannel/nPoly4/fem_SubsonicChannel.cfg b/TestCases/hom_euler/SubsonicChannel/nPoly4/fem_SubsonicChannel.cfg index f20a3ec149bc..a5250cc93d09 100644 --- a/TestCases/hom_euler/SubsonicChannel/nPoly4/fem_SubsonicChannel.cfg +++ b/TestCases/hom_euler/SubsonicChannel/nPoly4/fem_SubsonicChannel.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_euler/SubsonicChannel/nPoly4/fem_SubsonicChannel_Farfield.cfg b/TestCases/hom_euler/SubsonicChannel/nPoly4/fem_SubsonicChannel_Farfield.cfg index 9e812bf8190d..3780981a02a8 100644 --- a/TestCases/hom_euler/SubsonicChannel/nPoly4/fem_SubsonicChannel_Farfield.cfg +++ b/TestCases/hom_euler/SubsonicChannel/nPoly4/fem_SubsonicChannel_Farfield.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_navierstokes/CylinderViscous/nPoly3/fem_Cylinder_reg.cfg b/TestCases/hom_navierstokes/CylinderViscous/nPoly3/fem_Cylinder_reg.cfg index 6d78d74cec5e..051f5cb2b003 100644 --- a/TestCases/hom_navierstokes/CylinderViscous/nPoly3/fem_Cylinder_reg.cfg +++ b/TestCases/hom_navierstokes/CylinderViscous/nPoly3/fem_Cylinder_reg.cfg @@ -5,7 +5,7 @@ % Author: Edwin van der Weide % % Institution: University of Twente % % Date: 2016.07.15 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_navierstokes/FlatPlate/nPoly4/lam_flatplate_reg.cfg b/TestCases/hom_navierstokes/FlatPlate/nPoly4/lam_flatplate_reg.cfg index 0b79f645a90c..af875e15a92d 100644 --- a/TestCases/hom_navierstokes/FlatPlate/nPoly4/lam_flatplate_reg.cfg +++ b/TestCases/hom_navierstokes/FlatPlate/nPoly4/lam_flatplate_reg.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2013.09.30 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_navierstokes/SphereViscous/nPoly3_QuadDominant/fem_Sphere_reg.cfg b/TestCases/hom_navierstokes/SphereViscous/nPoly3_QuadDominant/fem_Sphere_reg.cfg index 559867854091..c1cf1d0d164e 100644 --- a/TestCases/hom_navierstokes/SphereViscous/nPoly3_QuadDominant/fem_Sphere_reg.cfg +++ b/TestCases/hom_navierstokes/SphereViscous/nPoly3_QuadDominant/fem_Sphere_reg.cfg @@ -5,7 +5,7 @@ % Author: Edwin van der Weide % % Institution: University of Twente % % Date: 2016.07.15 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_navierstokes/SphereViscous/nPoly3_QuadDominant/fem_Sphere_reg_ADER.cfg b/TestCases/hom_navierstokes/SphereViscous/nPoly3_QuadDominant/fem_Sphere_reg_ADER.cfg index f50ff0984c76..bbfb16039a5c 100644 --- a/TestCases/hom_navierstokes/SphereViscous/nPoly3_QuadDominant/fem_Sphere_reg_ADER.cfg +++ b/TestCases/hom_navierstokes/SphereViscous/nPoly3_QuadDominant/fem_Sphere_reg_ADER.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_navierstokes/UnsteadyCylinder/nPoly4/fem_unst_cylinder.cfg b/TestCases/hom_navierstokes/UnsteadyCylinder/nPoly4/fem_unst_cylinder.cfg index 7d0e27fbc0a8..02747b3b0536 100644 --- a/TestCases/hom_navierstokes/UnsteadyCylinder/nPoly4/fem_unst_cylinder.cfg +++ b/TestCases/hom_navierstokes/UnsteadyCylinder/nPoly4/fem_unst_cylinder.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_navierstokes/UnsteadyCylinder/nPoly4/fem_unst_cylinder_ADER.cfg b/TestCases/hom_navierstokes/UnsteadyCylinder/nPoly4/fem_unst_cylinder_ADER.cfg index 84483bb96e2d..b5b646ee5157 100644 --- a/TestCases/hom_navierstokes/UnsteadyCylinder/nPoly4/fem_unst_cylinder_ADER.cfg +++ b/TestCases/hom_navierstokes/UnsteadyCylinder/nPoly4/fem_unst_cylinder_ADER.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hybrid_regression.py b/TestCases/hybrid_regression.py index 23ccc5667553..366589a7994f 100644 --- a/TestCases/hybrid_regression.py +++ b/TestCases/hybrid_regression.py @@ -3,14 +3,14 @@ ## \file hybrid_regression.py # \brief Python script for automated regression testing of SU2 examples # \author A. Aranake, A. Campos, T. Economon, T. Lukaczyk, S. Padron -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 @@ -51,7 +51,7 @@ def main(): channel.cfg_dir = "euler/channel" channel.cfg_file = "inv_channel_RK.cfg" channel.test_iter = 20 - channel.test_vals = [-2.965605, 2.459083, 0.016007, 0.042277] + channel.test_vals = [-2.965642, 2.459171, 0.016012, 0.042270] test_list.append(channel) # NACA0012 @@ -59,7 +59,7 @@ def main(): naca0012.cfg_dir = "euler/naca0012" naca0012.cfg_file = "inv_NACA0012_Roe.cfg" naca0012.test_iter = 20 - naca0012.test_vals = [-4.444945, -3.941041, 0.318999, 0.022365] + naca0012.test_vals = [-4.766168, -4.287699, 0.326688, 0.022661] test_list.append(naca0012) # Supersonic wedge @@ -67,7 +67,7 @@ def main(): wedge.cfg_dir = "euler/wedge" wedge.cfg_file = "inv_wedge_HLLC.cfg" wedge.test_iter = 20 - wedge.test_vals = [-1.368091, 4.302736, -0.243433, 0.042906] + wedge.test_vals = [-1.379426, 4.288828, -0.245341, 0.043244] test_list.append(wedge) # ONERA M6 Wing @@ -83,7 +83,7 @@ def main(): fixedCL_naca0012.cfg_dir = "fixed_cl/naca0012" fixedCL_naca0012.cfg_file = "inv_NACA0012.cfg" fixedCL_naca0012.test_iter = 10 - fixedCL_naca0012.test_vals = [-3.905038, 1.628019, 0.301067, 0.019483] + fixedCL_naca0012.test_vals = [-3.896832, 1.637749, 0.301084, 0.019485] test_list.append(fixedCL_naca0012) # HYPERSONIC FLOW PAST BLUNT BODY @@ -91,7 +91,7 @@ def main(): bluntbody.cfg_dir = "euler/bluntbody" bluntbody.cfg_file = "blunt.cfg" bluntbody.test_iter = 20 - bluntbody.test_vals = [0.491773, 6.855541, 0.000298, 1.791791] + bluntbody.test_vals = [0.475463, 6.835018, 0.000226, 1.784354] test_list.append(bluntbody) ########################## @@ -103,8 +103,7 @@ def main(): flatplate.cfg_dir = "navierstokes/flatplate" flatplate.cfg_file = "lam_flatplate.cfg" flatplate.test_iter = 100 - flatplate.test_vals = [-7.700620, -2.229886, 0.001084, 0.036235, 2.361500, -2.325300, -1.823400, -1.823400] - flatplate.test_vals_aarch64 = [-9.154130, -3.663197, 0.001112, 0.036277, 2.361500, -2.325300, -2.278800, -2.278800] + flatplate.test_vals = [-7.680034, -2.207912, 0.001084, 0.036233, 2.361500, -2.325300, 0.000000, 0.000000] test_list.append(flatplate) # Laminar cylinder (steady) @@ -112,8 +111,7 @@ def main(): cylinder.cfg_dir = "navierstokes/cylinder" cylinder.cfg_file = "lam_cylinder.cfg" cylinder.test_iter = 25 - cylinder.test_vals = [-8.265865, -2.783635, -0.019914, 1.614879, -0.010191] - cylinder.test_vals_aarch64 = [-6.765429, -1.297425, 0.019571, 0.310231, 0.123270] + cylinder.test_vals = [-8.266513, -2.783904, -0.019899, 1.615668, 0] test_list.append(cylinder) # Laminar cylinder (low Mach correction) @@ -121,8 +119,8 @@ def main(): cylinder_lowmach.cfg_dir = "navierstokes/cylinder" cylinder_lowmach.cfg_file = "cylinder_lowmach.cfg" cylinder_lowmach.test_iter = 25 - cylinder_lowmach.test_vals = [-6.830996, -1.368850, -0.143956, 73.963354, 0.002457] - cylinder_lowmach.test_vals_aarch64 = [-6.830996, -1.368850, -0.143956, 73.963354, 0.002457] + cylinder_lowmach.test_vals = [-6.830996, -1.368850, -0.143956, 73.963354, 0] + cylinder_lowmach.test_vals_aarch64 = [-6.830996, -1.368850, -0.143956, 73.963354, 0] test_list.append(cylinder_lowmach) # 2D Poiseuille flow (body force driven with periodic inlet / outlet) @@ -130,8 +128,7 @@ def main(): poiseuille.cfg_dir = "navierstokes/poiseuille" poiseuille.cfg_file = "lam_poiseuille.cfg" poiseuille.test_iter = 10 - poiseuille.test_vals = [-5.048283, 0.650813, 0.008713, 13.677671, -2.054800] - poiseuille.test_vals_aarch64 = [-5.048282, 0.650814, 0.008713, 13.677691, -2.054800] + poiseuille.test_vals = [-5.046131, 0.652984, 0.008355, 13.735818, 0] test_list.append(poiseuille) # 2D Poiseuille flow (inlet profile file) @@ -139,8 +136,8 @@ def main(): poiseuille_profile.cfg_dir = "navierstokes/poiseuille" poiseuille_profile.cfg_file = "profile_poiseuille.cfg" poiseuille_profile.test_iter = 10 - poiseuille_profile.test_vals = [-12.485957, -7.612048, -0.000000, 2.085796] - poiseuille_profile.test_vals_aarch64 = [-12.485957, -7.612048, -0.000000, 2.085796] + poiseuille_profile.test_vals = [-12.009016, -7.262446, -0.000000, 2.089953] + poiseuille_profile.test_vals_aarch64 = [-12.494717, -7.711274, -0.000000, 2.085796] test_list.append(poiseuille_profile) # 2D Rotational Periodic @@ -148,8 +145,7 @@ def main(): periodic2d.cfg_dir = "navierstokes/periodic2D" periodic2d.cfg_file = "config.cfg" periodic2d.test_iter = 1400 - periodic2d.test_vals = [-10.818509, -8.363386, -8.287481, -5.334812, -1.087925, -2945.200000] - periodic2d.test_vals_aarch64 = [-10.818510, -8.363388, -8.287480, -5.334814, -1.087922, -2945.2] + periodic2d.test_vals = [-10.817611, -8.363544, -8.287460, -5.334104, -1.088411, -2945.2] test_list.append(periodic2d) ########################## @@ -161,7 +157,7 @@ def main(): rae2822_sa.cfg_dir = "rans/rae2822" rae2822_sa.cfg_file = "turb_SA_RAE2822.cfg" rae2822_sa.test_iter = 20 - rae2822_sa.test_vals = [-2.020123, -5.269324, 0.807147, 0.060499, -80602.000000] + rae2822_sa.test_vals = [-2.020123, -5.269339, 0.807147, 0.060499, 0] test_list.append(rae2822_sa) # RAE2822 SST @@ -169,7 +165,7 @@ def main(): rae2822_sst.cfg_dir = "rans/rae2822" rae2822_sst.cfg_file = "turb_SST_RAE2822.cfg" rae2822_sst.test_iter = 20 - rae2822_sst.test_vals = [-0.510363, 4.872736, 0.815617, 0.060920, -73391.000000] + rae2822_sst.test_vals = [-0.510349, 4.950289, 0.811983, 0.061600, 0.000000] test_list.append(rae2822_sst) # RAE2822 SST_SUST @@ -177,7 +173,7 @@ def main(): rae2822_sst_sust.cfg_dir = "rans/rae2822" rae2822_sst_sust.cfg_file = "turb_SST_SUST_RAE2822.cfg" rae2822_sst_sust.test_iter = 20 - rae2822_sst_sust.test_vals = [-2.535141, 4.872736, 0.815617, 0.060920] + rae2822_sst_sust.test_vals = [-2.678140, 4.950289, 0.811983, 0.061600] test_list.append(rae2822_sst_sust) # Flat plate @@ -185,7 +181,7 @@ def main(): turb_flatplate.cfg_dir = "rans/flatplate" turb_flatplate.cfg_file = "turb_SA_flatplate.cfg" turb_flatplate.test_iter = 20 - turb_flatplate.test_vals = [-4.156553, -6.736064, -0.176184, 0.057478] + turb_flatplate.test_vals = [-4.316134, -6.737979, -0.187461, 0.057468] test_list.append(turb_flatplate) # ONERA M6 Wing @@ -193,7 +189,7 @@ def main(): turb_oneram6.cfg_dir = "rans/oneram6" turb_oneram6.cfg_file = "turb_ONERAM6.cfg" turb_oneram6.test_iter = 10 - turb_oneram6.test_vals = [-2.392863, -6.689822, 0.230745, 0.158812, -33786.000000] + turb_oneram6.test_vals = [-2.408675, -6.662904, 0.238578, 0.158968, 0.000000] test_list.append(turb_oneram6) # NACA0012 (SA, FUN3D finest grid results: CL=1.0983, CD=0.01242) @@ -201,8 +197,8 @@ def main(): turb_naca0012_sa.cfg_dir = "rans/naca0012" turb_naca0012_sa.cfg_file = "turb_NACA0012_sa.cfg" turb_naca0012_sa.test_iter = 5 - turb_naca0012_sa.test_vals = [-10.451625, -13.859808, 1.057622, 0.022916, 20.000000, -1.358306, 20.000000, -2.512316, -44.540000] - turb_naca0012_sa.test_vals_aarch64 = [-10.451625, -13.859809, 1.057622, 0.022916, 20.000000, -1.358307, 20.000000, -2.512316, -44.540000] + turb_naca0012_sa.test_vals = [-12.098325, -14.149988, 1.057665, 0.022971, 20.000000, -2.292707, 0.000000, -12.068169, 0] + turb_naca0012_sa.test_vals_aarch64 = [-12.098325, -14.149988, 1.057665, 0.022971, 20.000000, -2.292707, 0.000000, -12.068169, 0] test_list.append(turb_naca0012_sa) # NACA0012 (SST, FUN3D finest grid results: CL=1.0840, CD=0.01253) @@ -210,7 +206,7 @@ def main(): turb_naca0012_sst.cfg_dir = "rans/naca0012" turb_naca0012_sst.cfg_file = "turb_NACA0012_sst.cfg" turb_naca0012_sst.test_iter = 10 - turb_naca0012_sst.test_vals = [-12.216989, -14.439370, -7.108639, 1.050109, 0.019148, -1.483537, -38.510000] + turb_naca0012_sst.test_vals = [-12.232646, -14.434809, -6.037672, 1.047444, 0.019214, -1.652532, 0.000000] test_list.append(turb_naca0012_sst) # NACA0012 (SST_SUST, FUN3D finest grid results: CL=1.0840, CD=0.01253) @@ -218,7 +214,7 @@ def main(): turb_naca0012_sst_sust.cfg_dir = "rans/naca0012" turb_naca0012_sst_sust.cfg_file = "turb_NACA0012_sst_sust.cfg" turb_naca0012_sst_sust.test_iter = 10 - turb_naca0012_sst_sust.test_vals = [-12.148204, -14.755890, -6.342986, 1.001189, 0.019384, -1.432333] + turb_naca0012_sst_sust.test_vals = [-12.152294, -14.781143, -6.357944, 1.000270, 0.019123, -1.417707] test_list.append(turb_naca0012_sst_sust) # NACA0012 (SST, fixed values for turbulence quantities) @@ -226,8 +222,7 @@ def main(): turb_naca0012_sst_fixedvalues.cfg_dir = "rans/naca0012" turb_naca0012_sst_fixedvalues.cfg_file = "turb_NACA0012_sst_fixedvalues.cfg" turb_naca0012_sst_fixedvalues.test_iter = 10 - turb_naca0012_sst_fixedvalues.test_vals = [-5.192598, -10.042489, -1.617721, 1.022073, 0.040198, -2.381138] - turb_naca0012_sst_fixedvalues.test_vals_aarch64 = [-5.192599, -10.042490, -1.617720, 1.022073, 0.040198, -2.381138] + turb_naca0012_sst_fixedvalues.test_vals = [-5.192404, -10.250818, -1.560208, 1.022562, 0.040530, -2.382731] test_list.append(turb_naca0012_sst_fixedvalues) # NACA0012 (SST, explicit Euler for flow and turbulence equations) @@ -235,7 +230,7 @@ def main(): turb_naca0012_sst_expliciteuler.cfg_dir = "rans/naca0012" turb_naca0012_sst_expliciteuler.cfg_file = "turb_NACA0012_sst_expliciteuler.cfg" turb_naca0012_sst_expliciteuler.test_iter = 10 - turb_naca0012_sst_expliciteuler.test_vals = [-3.532289, -3.157766, 3.364024, 1.122901, 0.500798, -float("inf")] + turb_naca0012_sst_expliciteuler.test_vals = [-3.533765, -3.157766, 3.364026, 1.124757, 0.501700, -float("inf")] test_list.append(turb_naca0012_sst_expliciteuler) # PROPELLER @@ -243,7 +238,7 @@ def main(): propeller.cfg_dir = "rans/propeller" propeller.cfg_file = "propeller.cfg" propeller.test_iter = 10 - propeller.test_vals = [-3.389575, -8.409251, 0.000048, 0.056329] + propeller.test_vals = [-3.389724, -8.409502, 0.000048, 0.056344] test_list.append(propeller) ####################################### @@ -255,7 +250,7 @@ def main(): axi_rans_air_nozzle_restart.cfg_dir = "axisymmetric_rans/air_nozzle" axi_rans_air_nozzle_restart.cfg_file = "air_nozzle_restart.cfg" axi_rans_air_nozzle_restart.test_iter = 10 - axi_rans_air_nozzle_restart.test_vals = [-12.155957, -6.610384, -9.237797, -4.532605, -2019.700000] + axi_rans_air_nozzle_restart.test_vals = [-12.065954, -6.836372, -8.889803, -3.832665, 0.000000] test_list.append(axi_rans_air_nozzle_restart) ################################# @@ -268,7 +263,7 @@ def main(): turb_naca0012_sst_restart_mg.cfg_file = "turb_NACA0012_sst_multigrid_restart.cfg" turb_naca0012_sst_restart_mg.test_iter = 20 turb_naca0012_sst_restart_mg.ntest_vals = 5 - turb_naca0012_sst_restart_mg.test_vals = [-7.644702, -7.433663, -1.918163, -0.000003, 0.079111] + turb_naca0012_sst_restart_mg.test_vals = [-7.633091, -7.181942, -0.627082, -0.000020, 0.078737] test_list.append(turb_naca0012_sst_restart_mg) ############################# @@ -280,7 +275,7 @@ def main(): turb_naca0012_1c.cfg_dir = "rans_uq/naca0012" turb_naca0012_1c.cfg_file = "turb_NACA0012_uq_1c.cfg" turb_naca0012_1c.test_iter = 10 - turb_naca0012_1c.test_vals = [-4.980878, 1.138865, 0.247731, -0.117335] + turb_naca0012_1c.test_vals = [-4.976639, 1.141468, 0.243064, -0.112166] turb_naca0012_1c.test_vals_aarch64 = [-4.981105, 1.138873, 0.248013, -0.117248] test_list.append(turb_naca0012_1c) @@ -289,7 +284,7 @@ def main(): turb_naca0012_2c.cfg_dir = "rans_uq/naca0012" turb_naca0012_2c.cfg_file = "turb_NACA0012_uq_2c.cfg" turb_naca0012_2c.test_iter = 10 - turb_naca0012_2c.test_vals = [-5.483313, 0.968731, 0.215420, -0.124767] + turb_naca0012_2c.test_vals = [-5.486005, 0.968502, 0.233564, -0.114514] turb_naca0012_2c.test_vals_aarch64 = [-5.483345, 0.968720, 0.214914, -0.124932] test_list.append(turb_naca0012_2c) @@ -298,7 +293,7 @@ def main(): turb_naca0012_3c.cfg_dir = "rans_uq/naca0012" turb_naca0012_3c.cfg_file = "turb_NACA0012_uq_3c.cfg" turb_naca0012_3c.test_iter = 10 - turb_naca0012_3c.test_vals = [-5.584300, 0.931293, 0.207446, -0.125692] + turb_naca0012_3c.test_vals = [-5.584366, 0.931883, 0.223356, -0.116142] turb_naca0012_3c.test_vals_aarch64 = [-5.584300, 0.931293, 0.207447, -0.125691] test_list.append(turb_naca0012_3c) @@ -307,7 +302,7 @@ def main(): turb_naca0012_p1c1.cfg_dir = "rans_uq/naca0012" turb_naca0012_p1c1.cfg_file = "turb_NACA0012_uq_p1c1.cfg" turb_naca0012_p1c1.test_iter = 10 - turb_naca0012_p1c1.test_vals = [-5.132363, 1.075634, 0.337251, -0.082829] + turb_naca0012_p1c1.test_vals = [-5.114311, 1.076961, 0.224322, -0.118874] turb_naca0012_p1c1.test_vals_aarch64 = [-5.132358, 1.075658, 0.337268, -0.082827] test_list.append(turb_naca0012_p1c1) @@ -316,8 +311,8 @@ def main(): turb_naca0012_p1c2.cfg_dir = "rans_uq/naca0012" turb_naca0012_p1c2.cfg_file = "turb_NACA0012_uq_p1c2.cfg" turb_naca0012_p1c2.test_iter = 10 - turb_naca0012_p1c2.test_vals = [-5.554392, 0.943703, 0.229483, -0.121058] - turb_naca0012_p1c2.test_vals_aarch64 = [-5.554425, 0.943683, 0.229293, -0.121125] + turb_naca0012_p1c2.test_vals = [-5.548834, 0.946383, 0.211109, -0.121304] + turb_naca0012_p1c2.test_vals_aarch64 = [-5.548775, 0.945962, 0.211150, -0.121291] test_list.append(turb_naca0012_p1c2) ###################################### @@ -329,7 +324,7 @@ def main(): harmonic_balance.cfg_dir = "harmonic_balance" harmonic_balance.cfg_file = "HB.cfg" harmonic_balance.test_iter = 25 - harmonic_balance.test_vals = [-1.554985, 0.831796, 0.935728, 3.960209] + harmonic_balance.test_vals = [-1.559187, 0.829574, 0.931511, 3.954440] test_list.append(harmonic_balance) # Turbulent pitching NACA 64a010 airfoil @@ -337,7 +332,7 @@ def main(): hb_rans_preconditioning.cfg_dir = "harmonic_balance/hb_rans_preconditioning" hb_rans_preconditioning.cfg_file = "davis.cfg" hb_rans_preconditioning.test_iter = 25 - hb_rans_preconditioning.test_vals = [-1.902111, 0.484080, 0.601469, 3.608991, -5.949373] + hb_rans_preconditioning.test_vals = [-1.902111, 0.484080, 0.601469, 3.608991, -5.949369] test_list.append(hb_rans_preconditioning) ############################# @@ -349,7 +344,7 @@ def main(): inc_euler_naca0012.cfg_dir = "incomp_euler/naca0012" inc_euler_naca0012.cfg_file = "incomp_NACA0012.cfg" inc_euler_naca0012.test_iter = 20 - inc_euler_naca0012.test_vals = [-7.104363, -6.354829, 0.531976, 0.008467] + inc_euler_naca0012.test_vals = [-7.127256, -6.466554, 0.531991, 0.008466] test_list.append(inc_euler_naca0012) # C-D nozzle with pressure inlet and mass flow outlet @@ -357,7 +352,7 @@ def main(): inc_nozzle.cfg_dir = "incomp_euler/nozzle" inc_nozzle.cfg_file = "inv_nozzle.cfg" inc_nozzle.test_iter = 20 - inc_nozzle.test_vals = [-6.363748, -5.564772, -0.003840, 0.126592] + inc_nozzle.test_vals = [-6.595923, -5.820518, -0.018365, 0.126411] inc_nozzle.test_vals_aarch64 = [-5.624385, -4.988472, -0.000096, 0.137032] test_list.append(inc_nozzle) @@ -386,8 +381,8 @@ def main(): inc_poly_cylinder.cfg_dir = "incomp_navierstokes/cylinder" inc_poly_cylinder.cfg_file = "poly_cylinder.cfg" inc_poly_cylinder.test_iter = 20 - inc_poly_cylinder.test_vals = [-7.851512, -2.093420, 0.029974, 1.921595, -175.300000] - inc_poly_cylinder.test_vals_aarch64 = [-7.851510, -2.093419, 0.029974, 1.921595, -175.300000] + inc_poly_cylinder.test_vals = [-7.827942, -2.061513, 0.029525, 1.953498, -174.780000] + inc_poly_cylinder.test_vals_aarch64 = [-7.827942, -2.061513, 0.029525, 1.953498, -174.780000] test_list.append(inc_poly_cylinder) # X-coarse laminar bend as a mixed element CGNS test @@ -395,7 +390,7 @@ def main(): inc_lam_bend.cfg_dir = "incomp_navierstokes/bend" inc_lam_bend.cfg_file = "lam_bend.cfg" inc_lam_bend.test_iter = 10 - inc_lam_bend.test_vals = [-3.547250, -3.225803, -0.015148, 1.006543] + inc_lam_bend.test_vals = [-3.560185, -3.051988, -0.013972, 1.102842] inc_lam_bend.test_vals_aarch64 = [-3.437996, -3.086188, -0.015600, 1.142213] test_list.append(inc_lam_bend) @@ -408,7 +403,7 @@ def main(): inc_turb_naca0012.cfg_dir = "incomp_rans/naca0012" inc_turb_naca0012.cfg_file = "naca0012.cfg" inc_turb_naca0012.test_iter = 20 - inc_turb_naca0012.test_vals = [-4.788405, -11.039465, 0.000008, 0.309490] + inc_turb_naca0012.test_vals = [-4.788405, -11.040560, 0.000008, 0.309505] test_list.append(inc_turb_naca0012) # NACA0012, SST_SUST @@ -416,7 +411,7 @@ def main(): inc_turb_naca0012_sst_sust.cfg_dir = "incomp_rans/naca0012" inc_turb_naca0012_sst_sust.cfg_file = "naca0012_SST_SUST.cfg" inc_turb_naca0012_sst_sust.test_iter = 20 - inc_turb_naca0012_sst_sust.test_vals = [-7.270637, 0.018416, 0.000004, 0.307678] + inc_turb_naca0012_sst_sust.test_vals = [-7.291693, 0.132607, 0.000002, 0.312092] test_list.append(inc_turb_naca0012_sst_sust) # Weakly coupled heat equation @@ -436,7 +431,7 @@ def main(): cavity.cfg_dir = "moving_wall/cavity" cavity.cfg_file = "lam_cavity.cfg" cavity.test_iter = 25 - cavity.test_vals = [-5.627868, -0.164404, 0.053310, 2.545839] + cavity.test_vals = [-5.627869, -0.164403, 0.054734, 2.545856] test_list.append(cavity) # Spinning cylinder @@ -444,7 +439,7 @@ def main(): spinning_cylinder.cfg_dir = "moving_wall/spinning_cylinder" spinning_cylinder.cfg_file = "spinning_cylinder.cfg" spinning_cylinder.test_iter = 25 - spinning_cylinder.test_vals = [-8.006541, -2.609759, 1.495662, 1.486341] + spinning_cylinder.test_vals = [-8.008048, -2.611074, 1.497289, 1.487468] spinning_cylinder.test_vals_aarch64 = [-8.006541, -2.609759, 1.495662, 1.486341] test_list.append(spinning_cylinder) @@ -457,8 +452,8 @@ def main(): square_cylinder.cfg_dir = "unsteady/square_cylinder" square_cylinder.cfg_file = "turb_square.cfg" square_cylinder.test_iter = 3 - square_cylinder.test_vals = [-2.557949, -1.173575, 0.058030, 1.399794, 2.220402, 1.399748, 2.218603, -0.453270] - square_cylinder.test_vals_aarch64 = [-2.557902, -1.173574, 0.058050, 1.399794, 2.220402, 1.399748, 2.218604, -0.453270] + square_cylinder.test_vals = [-2.560838, -1.175929, 0.062081, 1.399401, 2.220361, 1.399349, 2.218600, 0.000000] + square_cylinder.test_vals_aarch64 = [-2.557902, -1.173574, 0.058050, 1.399794, 2.220402, 1.399748, 2.218604, 0] square_cylinder.unsteady = True test_list.append(square_cylinder) @@ -467,7 +462,7 @@ def main(): sine_gust.cfg_dir = "gust" sine_gust.cfg_file = "inv_gust_NACA0012.cfg" sine_gust.test_iter = 5 - sine_gust.test_vals = [-1.977514, 3.481817, -0.010400, -0.008115] + sine_gust.test_vals = [-1.977498, 3.481818, -0.010484, -0.008178] sine_gust.unsteady = True test_list.append(sine_gust) @@ -476,7 +471,7 @@ def main(): cosine_gust.cfg_dir = "gust" cosine_gust.cfg_file = "cosine_gust_zdir.cfg" cosine_gust.test_iter = 79 - cosine_gust.test_vals = [-2.418805, 0.002013, -0.001504, 0.000445, -0.000558] + cosine_gust.test_vals = [-2.418805, 0.001949, -0.001254, 0.000425, -0.000593] cosine_gust.unsteady = True cosine_gust.enabled_with_tsan = False test_list.append(cosine_gust) @@ -486,7 +481,7 @@ def main(): gust_mesh_defo.cfg_dir = "gust" gust_mesh_defo.cfg_file = "gust_with_mesh_deformation.cfg" gust_mesh_defo.test_iter = 6 - gust_mesh_defo.test_vals = [-1.844761, 0.001116, -0.000265] + gust_mesh_defo.test_vals = [-1.844761, 0.001095, -0.000273] gust_mesh_defo.unsteady = True gust_mesh_defo.enabled_with_tsan = False test_list.append(gust_mesh_defo) @@ -496,7 +491,7 @@ def main(): aeroelastic.cfg_dir = "aeroelastic" aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" aeroelastic.test_iter = 2 - aeroelastic.test_vals = [0.074058, 0.027628, -0.001641, -0.000128] + aeroelastic.test_vals = [0.074052, 0.027623, -0.001641, -0.000128] aeroelastic.test_vals_aarch64 = [0.074170, 0.027590, -0.001579, -0.000160] aeroelastic.unsteady = True aeroelastic.enabled_on_cpu_arch = ["x86_64"] # Requires AVX-capable architecture @@ -508,7 +503,7 @@ def main(): ddes_flatplate.cfg_dir = "ddes/flatplate" ddes_flatplate.cfg_file = "ddes_flatplate.cfg" ddes_flatplate.test_iter = 10 - ddes_flatplate.test_vals = [-2.714785, -5.882681, -0.215041, 0.023758, -617.440000] + ddes_flatplate.test_vals = [-2.714713, -5.788302, -0.214960, 0.023758, 0.000000] ddes_flatplate.unsteady = True test_list.append(ddes_flatplate) @@ -517,7 +512,7 @@ def main(): unst_inc_turb_naca0015_sa.cfg_dir = "unsteady/pitching_naca0015_rans_inc" unst_inc_turb_naca0015_sa.cfg_file = "config_incomp_turb_sa.cfg" unst_inc_turb_naca0015_sa.test_iter = 1 - unst_inc_turb_naca0015_sa.test_vals = [-3.008629, -6.888963, 1.435186, 0.433529] + unst_inc_turb_naca0015_sa.test_vals = [-3.008629, -6.888996, 1.435193, 0.433537] unst_inc_turb_naca0015_sa.unsteady = True test_list.append(unst_inc_turb_naca0015_sa) @@ -526,7 +521,7 @@ def main(): unst_deforming_naca0012.cfg_dir = "disc_adj_euler/naca0012_pitching_def" unst_deforming_naca0012.cfg_file = "inv_NACA0012_pitching_deform.cfg" unst_deforming_naca0012.test_iter = 5 - unst_deforming_naca0012.test_vals = [-3.665202, -3.793253, -3.716498, -3.148334] + unst_deforming_naca0012.test_vals = [-3.665168, -3.793307, -3.716526, -3.148348] unst_deforming_naca0012.unsteady = True unst_deforming_naca0012.enabled_with_tsan = False test_list.append(unst_deforming_naca0012) @@ -540,7 +535,7 @@ def main(): edge_VW.cfg_dir = "nicf/edge" edge_VW.cfg_file = "edge_VW.cfg" edge_VW.test_iter = 40 - edge_VW.test_vals = [-5.759815, 0.398128, -0.000009, 0.000000] + edge_VW.test_vals = [-5.681149, 0.463233, -0.000009, 0.000000] test_list.append(edge_VW) # Rarefaction shock wave edge_PPR @@ -548,7 +543,7 @@ def main(): edge_PPR.cfg_dir = "nicf/edge" edge_PPR.cfg_file = "edge_PPR.cfg" edge_PPR.test_iter = 40 - edge_PPR.test_vals = [-6.922907, -0.757793, -0.000034, 0.000000] + edge_PPR.test_vals = [-7.139177, -0.980792, -0.000034, 0.000000] edge_PPR.test_vals_aarch64 = [-8.573595, -2.391849, -0.000034, 0.000000] test_list.append(edge_PPR) @@ -561,7 +556,7 @@ def main(): Jones_tc_restart.cfg_dir = "turbomachinery/APU_turbocharger" Jones_tc_restart.cfg_file = "Jones_restart.cfg" Jones_tc_restart.test_iter = 5 - Jones_tc_restart.test_vals = [-10.467026, -2.871699, -19.214627, -13.508254, -11.582396, -6.306163, 73273, 73273, 0.019884, 82.491] + Jones_tc_restart.test_vals = [-7.308010, -5.332065, -14.895822, -9.330703, -12.071733, -6.548623, 73291.000000, 73291.000000, 0.020111, 82.896000] test_list.append(Jones_tc_restart) # 2D axial stage @@ -569,7 +564,7 @@ def main(): axial_stage2D.cfg_dir = "turbomachinery/axial_stage_2D" axial_stage2D.cfg_file = "Axial_stage2D.cfg" axial_stage2D.test_iter = 20 - axial_stage2D.test_vals = [0.983739, 1.534333, -2.888521, 2.606770, -2.418339, 3.087275, 106380.000000, 106380.000000, 5.732600, 64.711000] + axial_stage2D.test_vals = [1.090053, 1.550934, -2.895064, 2.607596, -2.479704, 3.063740, 106380.000000, 106380.000000, 5.733600, 64.747000] axial_stage2D.test_vals_aarch64 = [0.983739, 1.534333, -2.888521, 2.606770, -2.418339, 3.087275, 106380, 106380, 5.7325, 64.711] test_list.append(axial_stage2D) @@ -578,8 +573,8 @@ def main(): transonic_stator_restart.cfg_dir = "turbomachinery/transonic_stator_2D" transonic_stator_restart.cfg_file = "transonic_stator_restart.cfg" transonic_stator_restart.test_iter = 20 - transonic_stator_restart.test_vals = [-5.007735, -3.099310, -2.751696, 1.091966, -3.542819, 2.163237, -471630.000000, 94.866000, -0.035738] - transonic_stator_restart.test_vals_aarch64 = [-5.007735, -3.099310, -2.751696, 1.091966, -3.542819, 2.163237, -471630, 94.866, -0.035738] + transonic_stator_restart.test_vals = [-4.357591, -2.480153, -2.075008, 1.737627, -1.441579, 3.240658, -471620.000000, 94.840000, -0.054589] + transonic_stator_restart.test_vals_aarch64 = [-4.357748, -2.480402, -2.075152, 1.737469, -1.440919, 2.727299, -471620.000000, 94.840000, -0.054603] test_list.append(transonic_stator_restart) # Multiple turbomachinery interface restart @@ -600,7 +595,7 @@ def main(): uniform_flow.cfg_dir = "sliding_interface/uniform_flow" uniform_flow.cfg_file = "uniform_NN.cfg" uniform_flow.test_iter = 5 - uniform_flow.test_vals = [5.000000, 0.000000, -0.185381, -10.631535] + uniform_flow.test_vals = [5.000000, 0.000000, -0.195002, -10.624444] uniform_flow.unsteady = True uniform_flow.multizone = True test_list.append(uniform_flow) @@ -610,7 +605,7 @@ def main(): channel_2D.cfg_dir = "sliding_interface/channel_2D" channel_2D.cfg_file = "channel_2D_WA.cfg" channel_2D.test_iter = 2 - channel_2D.test_vals = [2.000000, 0.000000, 0.419762, 0.352170, 0.404385] + channel_2D.test_vals = [2.000000, 0.000000, 0.464907, 0.348052, 0.397452] channel_2D.unsteady = True channel_2D.multizone = True test_list.append(channel_2D) @@ -620,7 +615,7 @@ def main(): channel_3D.cfg_dir = "sliding_interface/channel_3D" channel_3D.cfg_file = "channel_3D_WA.cfg" channel_3D.test_iter = 2 - channel_3D.test_vals = [2.000000, 0.000000, 0.623108, 0.505077, 0.412801] + channel_3D.test_vals = [2.000000, 0.000000, 0.629106, 0.524901, 0.422380] channel_3D.test_vals_aarch64 = [2.000000, 0.000000, 0.620558, 0.504323, 0.412729] channel_3D.unsteady = True channel_3D.multizone = True @@ -632,7 +627,7 @@ def main(): pipe.cfg_dir = "sliding_interface/pipe" pipe.cfg_file = "pipe_NN.cfg" pipe.test_iter = 2 - pipe.test_vals = [0.116650, 0.481386, 0.648698, 0.982997, 1.018359] + pipe.test_vals = [0.080826, 0.547321, 0.655098, 0.968229, 1.049129] pipe.unsteady = True pipe.multizone = True test_list.append(pipe) @@ -642,7 +637,7 @@ def main(): rotating_cylinders.cfg_dir = "sliding_interface/rotating_cylinders" rotating_cylinders.cfg_file = "rot_cylinders_WA.cfg" rotating_cylinders.test_iter = 3 - rotating_cylinders.test_vals = [3.000000, 0.000000, 0.719776, 1.111045, 1.154066] + rotating_cylinders.test_vals = [3.000000, 0.000000, 0.717065, 1.119817, 1.160326] rotating_cylinders.unsteady = True rotating_cylinders.multizone = True test_list.append(rotating_cylinders) @@ -652,7 +647,7 @@ def main(): supersonic_vortex_shedding.cfg_dir = "sliding_interface/supersonic_vortex_shedding" supersonic_vortex_shedding.cfg_file = "sup_vor_shed_WA.cfg" supersonic_vortex_shedding.test_iter = 5 - supersonic_vortex_shedding.test_vals = [5.000000, 0.000000, 1.207949, 1.036083] + supersonic_vortex_shedding.test_vals = [5.000000, 0.000000, 1.207118, 1.065254] supersonic_vortex_shedding.unsteady = True supersonic_vortex_shedding.multizone = True test_list.append(supersonic_vortex_shedding) @@ -662,7 +657,7 @@ def main(): bars_SST_2D.cfg_dir = "sliding_interface/bars_SST_2D" bars_SST_2D.cfg_file = "bars.cfg" bars_SST_2D.test_iter = 13 - bars_SST_2D.test_vals = [13.000000, -0.773513, -1.700012] + bars_SST_2D.test_vals = [13.000000, 1.167903, -1.660901] bars_SST_2D.multizone = True test_list.append(bars_SST_2D) @@ -685,8 +680,8 @@ def main(): statbeam3d.cfg_dir = "fea_fsi/StatBeam_3d" statbeam3d.cfg_file = "configBeam_3d.cfg" statbeam3d.test_iter = 0 - statbeam3d.test_vals = [-2.378370, -1.585252, -2.028505, 64359.000000] - statbeam3d.test_vals_aarch64 = [-2.382650, -1.561882, -2.045083, 64433.000000] + statbeam3d.test_vals = [-2.787802, -1.721974, -2.438436, 110350] + statbeam3d.test_vals_aarch64 = [-2.787802, -1.721974, -2.438436, 110350] test_list.append(statbeam3d) # Dynamic beam, 2d @@ -703,28 +698,18 @@ def main(): fsi2d.cfg_dir = "fea_fsi/WallChannel_2d" fsi2d.cfg_file = "configFSI.cfg" fsi2d.test_iter = 4 - fsi2d.test_vals = [4.000000, 0.000000, -3.729243, -4.153954] + fsi2d.test_vals = [4.000000, 0.000000, -3.726029, -4.277769] fsi2d.multizone= True fsi2d.unsteady = True fsi2d.enabled_with_tsan = False test_list.append(fsi2d) - # FSI, Static, 2D, new mesh solver - stat_fsi = TestCase('stat_fsi') - stat_fsi.cfg_dir = "fea_fsi/stat_fsi" - stat_fsi.cfg_file = "config.cfg" - stat_fsi.test_iter = 7 - stat_fsi.test_vals = [-5.425896, -5.797242, 0.000000, 6.000000] - stat_fsi.test_vals_aarch64 = [-5.423016, -5.753459, 0.000000, 10.000000] - stat_fsi.multizone = True - test_list.append(stat_fsi) - # FSI, Dynamic, 2D, new mesh solver dyn_fsi = TestCase('dyn_fsi') dyn_fsi.cfg_dir = "fea_fsi/dyn_fsi" dyn_fsi.cfg_file = "config.cfg" dyn_fsi.test_iter = 4 - dyn_fsi.test_vals = [-4.330441, -4.057994, 0.000000, 103.000000] + dyn_fsi.test_vals = [-4.330725, -4.152983, 0.000000, 103.000000] dyn_fsi.test_vals_aarch64 = [-4.332167, -4.057742, 0.000000, 102.000000] dyn_fsi.multizone = True dyn_fsi.unsteady = True @@ -735,7 +720,7 @@ def main(): stat_fsi_restart.cfg_dir = "fea_fsi/stat_fsi" stat_fsi_restart.cfg_file = "config_restart.cfg" stat_fsi_restart.test_iter = 1 - stat_fsi_restart.test_vals = [-3.463348, -4.232710, 0.000000, 37.000000] + stat_fsi_restart.test_vals = [-3.549586, -4.460650, 0.000000, 35.000000] stat_fsi_restart.test_vals_aarch64 = [-3.442878, -4.228058, 0.000000, 37.000000] stat_fsi_restart.multizone = True test_list.append(stat_fsi_restart) @@ -749,7 +734,7 @@ def main(): mms_fvm_ns.cfg_dir = "mms/fvm_navierstokes" mms_fvm_ns.cfg_file = "lam_mms_roe.cfg" mms_fvm_ns.test_iter = 20 - mms_fvm_ns.test_vals = [-2.851428, 2.192348, 0.000000, 0.000000] + mms_fvm_ns.test_vals = [-2.808514, 2.152655, 0.000000, 0.000000] test_list.append(mms_fvm_ns) # FVM, incompressible, euler diff --git a/TestCases/hybrid_regression_AD.py b/TestCases/hybrid_regression_AD.py index 54809a89b263..0727b5888735 100644 --- a/TestCases/hybrid_regression_AD.py +++ b/TestCases/hybrid_regression_AD.py @@ -3,14 +3,14 @@ ## \file hybrid_regression_AD.py # \brief Python script for automated regression testing of SU2 examples # \author A. Aranake, A. Campos, T. Economon, T. Lukaczyk, S. Padron -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 @@ -50,7 +50,7 @@ def main(): discadj_naca0012.cfg_dir = "cont_adj_euler/naca0012" discadj_naca0012.cfg_file = "inv_NACA0012_discadj.cfg" discadj_naca0012.test_iter = 100 - discadj_naca0012.test_vals = [-3.560691, -8.925239, -0.000000, 0.005559] + discadj_naca0012.test_vals = [-3.562611, -8.932638, -0.000000, 0.005608] test_list.append(discadj_naca0012) # Inviscid Cylinder 3D (multiple markers) @@ -58,7 +58,7 @@ def main(): discadj_cylinder3D.cfg_dir = "disc_adj_euler/cylinder3D" discadj_cylinder3D.cfg_file = "inv_cylinder3D.cfg" discadj_cylinder3D.test_iter = 5 - discadj_cylinder3D.test_vals = [-3.764562, -3.719982, -0.000000, 0.000000] + discadj_cylinder3D.test_vals = [-3.689810, -3.883743, -0.000000, 0.000000] test_list.append(discadj_cylinder3D) # Arina nozzle 2D @@ -66,7 +66,7 @@ def main(): discadj_arina2k.cfg_dir = "disc_adj_euler/arina2k" discadj_arina2k.cfg_file = "Arina2KRS.cfg" discadj_arina2k.test_iter = 20 - discadj_arina2k.test_vals = [-3.534954, -3.773310, 0.027244, 0.000000] + discadj_arina2k.test_vals = [-3.254503, -3.495599, 0.052373, 0.000000] test_list.append(discadj_arina2k) #################################### @@ -78,7 +78,7 @@ def main(): discadj_rans_naca0012_sa.cfg_dir = "disc_adj_rans/naca0012" discadj_rans_naca0012_sa.cfg_file = "turb_NACA0012_sa.cfg" discadj_rans_naca0012_sa.test_iter = 10 - discadj_rans_naca0012_sa.test_vals = [-2.230621, 0.644162, 0.177890, -0.000016, 5.000000, -3.007652, 5.000000, -7.728093] + discadj_rans_naca0012_sa.test_vals = [-2.997064, -0.196172, 0.000003, -0.000000, 5.000000, -2.919675, 5.000000, -7.323218] test_list.append(discadj_rans_naca0012_sa) # Adjoint turbulent NACA0012 SST @@ -86,7 +86,7 @@ def main(): discadj_rans_naca0012_sst.cfg_dir = "disc_adj_rans/naca0012" discadj_rans_naca0012_sst.cfg_file = "turb_NACA0012_sst.cfg" discadj_rans_naca0012_sst.test_iter = 10 - discadj_rans_naca0012_sst.test_vals = [-2.221846, -0.491928, 0.182000, -0.000018] + discadj_rans_naca0012_sst.test_vals = [-2.237413, -0.200125, 2.763200, -0.039612] test_list.append(discadj_rans_naca0012_sst) ####################################### @@ -98,7 +98,7 @@ def main(): discadj_incomp_NACA0012.cfg_dir = "disc_adj_incomp_euler/naca0012" discadj_incomp_NACA0012.cfg_file = "incomp_NACA0012_disc.cfg" discadj_incomp_NACA0012.test_iter = 20 - discadj_incomp_NACA0012.test_vals = [20.000000, -4.087948, -2.655204, 0.000000] + discadj_incomp_NACA0012.test_vals = [20.000000, -4.091640, -2.655563, 0.000000] test_list.append(discadj_incomp_NACA0012) ##################################### @@ -110,8 +110,8 @@ def main(): discadj_incomp_cylinder.cfg_dir = "disc_adj_incomp_navierstokes/cylinder" discadj_incomp_cylinder.cfg_file = "heated_cylinder.cfg" discadj_incomp_cylinder.test_iter = 20 - discadj_incomp_cylinder.test_vals = [20.000000, -2.705921, -2.837904, 0.000000] - discadj_incomp_cylinder.test_vals_aarch64 = [20.000000, -2.705918, -2.837766, 0.000000] + discadj_incomp_cylinder.test_vals = [20.000000, -2.746353, -2.934792, 0.000000] + discadj_incomp_cylinder.test_vals_aarch64 = [20.000000, -2.746353, -2.934792, 0.000000] test_list.append(discadj_incomp_cylinder) ###################################### @@ -131,7 +131,7 @@ def main(): discadj_incomp_turb_NACA0012_sst.cfg_dir = "disc_adj_incomp_rans/naca0012" discadj_incomp_turb_NACA0012_sst.cfg_file = "turb_naca0012_sst.cfg" discadj_incomp_turb_NACA0012_sst.test_iter = 10 - discadj_incomp_turb_NACA0012_sst.test_vals = [-4.029282, -2.181911, -7.734686, 0.000000, -0.939944] + discadj_incomp_turb_NACA0012_sst.test_vals = [-3.597708, -2.983823, -8.354806, 0.000000, -0.916525] test_list.append(discadj_incomp_turb_NACA0012_sst) ####################################################### @@ -143,7 +143,7 @@ def main(): discadj_cylinder.cfg_dir = "disc_adj_rans/cylinder" discadj_cylinder.cfg_file = "cylinder.cfg" discadj_cylinder.test_iter = 9 - discadj_cylinder.test_vals = [3.746907, -1.544883, -0.008321, 0.000014] + discadj_cylinder.test_vals = [1.639345, -2.834279, -0.009538, 0.000020] discadj_cylinder.unsteady = True discadj_cylinder.enabled_with_tsan = False test_list.append(discadj_cylinder) @@ -157,7 +157,7 @@ def main(): discadj_cylinder.cfg_dir = "disc_adj_rans/cylinder" discadj_cylinder.cfg_file = "cylinder_Windowing_AD.cfg" discadj_cylinder.test_iter = 9 - discadj_cylinder.test_vals = [3.004402] + discadj_cylinder.test_vals = [2.183376] discadj_cylinder.unsteady = True discadj_cylinder.enabled_with_tsan = False test_list.append(discadj_cylinder) @@ -171,7 +171,7 @@ def main(): discadj_DT_1ST_cylinder.cfg_dir = "disc_adj_rans/cylinder_DT_1ST" discadj_DT_1ST_cylinder.cfg_file = "cylinder.cfg" discadj_DT_1ST_cylinder.test_iter = 9 - discadj_DT_1ST_cylinder.test_vals = [3.698167, -1.607051, -0.002159, 0.000028] + discadj_DT_1ST_cylinder.test_vals = [1.196346, -3.339016, -0.006212, 0.000020] discadj_DT_1ST_cylinder.unsteady = True discadj_DT_1ST_cylinder.enabled_with_tsan = False test_list.append(discadj_DT_1ST_cylinder) @@ -185,7 +185,7 @@ def main(): discadj_pitchingNACA0012.cfg_dir = "disc_adj_euler/naca0012_pitching" discadj_pitchingNACA0012.cfg_file = "inv_NACA0012_pitching.cfg" discadj_pitchingNACA0012.test_iter = 4 - discadj_pitchingNACA0012.test_vals = [-1.221198, -1.647772, -0.007510, 0.000013] + discadj_pitchingNACA0012.test_vals = [-1.220333, -1.646832, -0.007539, 0.000013] discadj_pitchingNACA0012.unsteady = True discadj_pitchingNACA0012.enabled_with_tsan = False test_list.append(discadj_pitchingNACA0012) @@ -199,7 +199,7 @@ def main(): discadj_trans_stator.cfg_dir = "disc_adj_turbomachinery/transonic_stator_2D" discadj_trans_stator.cfg_file = "transonic_stator.cfg" discadj_trans_stator.test_iter = 79 - discadj_trans_stator.test_vals = [79.000000, 0.770094, 0.383191, 0.472139, -0.996477, 2.153270, -4.444323] + discadj_trans_stator.test_vals = [79.000000, 0.770295, 0.383672, 0.472433, -0.996122, 2.153513, -4.444080] discadj_trans_stator.test_vals_aarch64 = [79, 0.769987, 0.383135, 0.472391, -0.996504, 2.153296, -4.444301] discadj_trans_stator.enabled_with_tsan = False test_list.append(discadj_trans_stator) @@ -253,7 +253,7 @@ def main(): pywrapper_CFD_AD_MeshDisp.cfg_dir = "py_wrapper/disc_adj_flow/mesh_disp_sens" pywrapper_CFD_AD_MeshDisp.cfg_file = "configAD_flow.cfg" pywrapper_CFD_AD_MeshDisp.test_iter = 1000 - pywrapper_CFD_AD_MeshDisp.test_vals = [30.000000, -2.505480, 1.403813, 0.000000] + pywrapper_CFD_AD_MeshDisp.test_vals = [30.000000, -2.496218, 1.441643, 0.000000] pywrapper_CFD_AD_MeshDisp.test_vals_aarch64 = [30.000000, -2.499079, 1.440068, 0.000000] pywrapper_CFD_AD_MeshDisp.command = TestCase.Command(exec = "python", param = "run_adjoint.py --parallel -f") pywrapper_CFD_AD_MeshDisp.timeout = 1600 diff --git a/TestCases/incomp_euler/naca0012/incomp_NACA0012.cfg b/TestCases/incomp_euler/naca0012/incomp_NACA0012.cfg index b31b0a3c289d..e2ef6036ea52 100644 --- a/TestCases/incomp_euler/naca0012/incomp_NACA0012.cfg +++ b/TestCases/incomp_euler/naca0012/incomp_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 09/18/2011 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/incomp_euler/nozzle/inv_nozzle.cfg b/TestCases/incomp_euler/nozzle/inv_nozzle.cfg index 4bbe5fc04b72..947f4e602409 100644 --- a/TestCases/incomp_euler/nozzle/inv_nozzle.cfg +++ b/TestCases/incomp_euler/nozzle/inv_nozzle.cfg @@ -4,7 +4,7 @@ % Case description: Inv. inc. nozzle with pressure inlet and mass flow outlet % % Author: Thomas D. Economon % % Date: 2018.11.30 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/incomp_navierstokes/buoyancy_cavity/lam_buoyancy_cavity.cfg b/TestCases/incomp_navierstokes/buoyancy_cavity/lam_buoyancy_cavity.cfg index d8112d91697d..cd9ed6c3c8fb 100644 --- a/TestCases/incomp_navierstokes/buoyancy_cavity/lam_buoyancy_cavity.cfg +++ b/TestCases/incomp_navierstokes/buoyancy_cavity/lam_buoyancy_cavity.cfg @@ -4,7 +4,7 @@ % Case description: Buoyancy-driven flow inside a cavity % % Author: Thomas D. Economon % % Date: 2018.06.10 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/incomp_navierstokes/cylinder/incomp_cylinder.cfg b/TestCases/incomp_navierstokes/cylinder/incomp_cylinder.cfg index 05d70caa7652..451e01383a1b 100644 --- a/TestCases/incomp_navierstokes/cylinder/incomp_cylinder.cfg +++ b/TestCases/incomp_navierstokes/cylinder/incomp_cylinder.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 2012.03.14 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/incomp_navierstokes/cylinder/poly_cylinder.cfg b/TestCases/incomp_navierstokes/cylinder/poly_cylinder.cfg index 976a340530d3..45bf7b81e6f5 100644 --- a/TestCases/incomp_navierstokes/cylinder/poly_cylinder.cfg +++ b/TestCases/incomp_navierstokes/cylinder/poly_cylinder.cfg @@ -5,7 +5,7 @@ % custom fluid using polynomial fluid models. % % Author: Thomas D. Economon % % Date: 2018.12.02 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/incomp_navierstokes/cylinder_split/cylinder_split.cfg b/TestCases/incomp_navierstokes/cylinder_split/cylinder_split.cfg new file mode 100644 index 000000000000..892f135f21a6 --- /dev/null +++ b/TestCases/incomp_navierstokes/cylinder_split/cylinder_split.cfg @@ -0,0 +1,97 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% SU2 configuration file % +% Case description: 3D laminar flow around wall mounted cylinder % +% Author: Nijso Beishuizen % +% Institution: TU Eindhoven % +% Date: 2025.03.16 % +% File Version 8.2.0 "Harrier" % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------% +% +SOLVER= INC_EULER +KIND_TURB_MODEL= NONE +RESTART_SOL= YES + +% ---------------- INCOMPRESSIBLE FLOW CONDITION DEFINITION -------------------% +% +% Re = rho * V * D / mu +% +INC_VELOCITY_INIT= ( 10, 0.0, 0.0 ) + +% --------------------------- VISCOSITY MODEL ---------------------------------% +% +INC_NONDIM= DIMENSIONAL +INC_DENSITY_MODEL= CONSTANT +INC_DENSITY_INIT= 1.0 +FREESTREAM_DENSITY= 1.0 +FREESTREAM_TEMPERATURE=300.0 +FREESTREAM_VELOCITY=10.0 0.0 0.0 +INC_ENERGY_EQUATION= NO + +% ---------------------- REFERENCE VALUE DEFINITION ---------------------------% +% +REF_ORIGIN_MOMENT_X = 0.25 +REF_ORIGIN_MOMENT_Y = 0.00 +REF_ORIGIN_MOMENT_Z = 0.00 +REF_LENGTH= 1.0 +REF_AREA= 1.0 + +% -------------------- BOUNDARY CONDITION DEFINITION --------------------------% +% +MARKER_EULER= ( wall_1, wall_2, wall ) +MARKER_SYM= ( symmetry_top, symmetry, symmetry_side, wall_floor) +MARKER_INLET= ( inlet,300.0, 1.000000, 1.000000, 0.000000, 0.000000 ) +INC_INLET_TYPE= ( VELOCITY_INLET ) +INC_INLET_DAMPING= 0.01 +MARKER_OUTLET= ( outlet, 0.000000 ) +INC_OUTLET_TYPE= ( PRESSURE_OUTLET ) +INC_OUTLET_DAMPING= 0.01 + +% ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% +% +NUM_METHOD_GRAD= GREEN_GAUSS +CFL_NUMBER=10.0 +CFL_ADAPT= NO +CFL_ADAPT_PARAM= ( 0.95, 1.005,0.1,100.0, 0.0001 ) +ITER=2000 +VENKAT_LIMITER_COEFF= 0.01 +LINEAR_SOLVER= FGMRES +LINEAR_SOLVER_PREC= ILU +LINEAR_SOLVER_ERROR= 1E-12 +LINEAR_SOLVER_ITER= 15 + +% -------------------------- MULTIGRID PARAMETERS -----------------------------% +% +MGLEVEL= 0 +% -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% +% +CONV_NUM_METHOD_FLOW= FDS +MUSCL_FLOW= NO +SLOPE_LIMITER_FLOW= NONE +JST_SENSOR_COEFF= ( 0.5, 0.04 ) +TIME_DISCRE_FLOW= EULER_IMPLICIT + +% --------------------------- CONVERGENCE PARAMETERS --------------------------% +% +CONV_RESIDUAL_MINVAL= -13 +CONV_STARTITER= 10 +CONV_CAUCHY_ELEMS= 100 +CONV_CAUCHY_EPS= 1E-6 + +% ------------------------- INPUT/OUTPUT INFORMATION --------------------------% +% +OUTPUT_FILES= RESTART, PARAVIEW_MULTIBLOCK +MESH_FILENAME= cylinder_split.cgns +MESH_FORMAT= CGNS +SOLUTION_FILENAME= solution_flow.dat +TABULAR_FORMAT= CSV +CONV_FILENAME= history +RESTART_FILENAME= restart_flow.dat +VOLUME_FILENAME= flow +SURFACE_FILENAME= surface_flow +OUTPUT_WRT_FREQ= 100 +SCREEN_OUTPUT= (INNER_ITER, RMS_PRESSURE, RMS_VELOCITY-X, RMS_VELOCITY-Y, RMS_VELOCITY-Z,AVG_CFL) +VOLUME_OUTPUT= SOLUTION, PRIMITIVE, TIMESTEP, RESIDUAL diff --git a/TestCases/incomp_navierstokes/sphere/sphere.cfg b/TestCases/incomp_navierstokes/sphere/sphere.cfg index 159446287016..f2cf7ab9fb1a 100644 --- a/TestCases/incomp_navierstokes/sphere/sphere.cfg +++ b/TestCases/incomp_navierstokes/sphere/sphere.cfg @@ -5,7 +5,7 @@ % Author: Nijso Beishuizen % % Institution: Technische Universiteit Eindhoven % % Date: 2024.05.05 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/BC_HeatTransfer.cfg b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/BC_HeatTransfer.cfg index b84153ef3593..c402079d75f4 100644 --- a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/BC_HeatTransfer.cfg +++ b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/BC_HeatTransfer.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: Robert Bosch GmbH % % Date: 2020.12.15 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/DA_configMaster.cfg b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/DA_configMaster.cfg index 2de412e71a8d..ddeefa9885ec 100644 --- a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/DA_configMaster.cfg +++ b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/DA_configMaster.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: Robert Bosch GmbH % % Date: 2020.12.15 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/FD_configMaster.cfg b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/FD_configMaster.cfg index 842f7900b11e..9c98e7ff6503 100644 --- a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/FD_configMaster.cfg +++ b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/FD_configMaster.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: Robert Bosch GmbH % % Date: 2020.12.15 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/configFluid.cfg b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/configFluid.cfg index 668d66270eb4..54cec2b30c30 100644 --- a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/configFluid.cfg +++ b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/configFluid.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: Robert Bosch GmbH % % Date: 2020.12.15 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/configMaster.cfg b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/configMaster.cfg index 6a5aabd0d184..39f86e85c136 100644 --- a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/configMaster.cfg +++ b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/configMaster.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: Robert Bosch GmbH % % Date: 2020.12.15 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/configSolid.cfg b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/configSolid.cfg index 8faa1c854d54..78a08b287a83 100644 --- a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/configSolid.cfg +++ b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/configSolid.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: Robert Bosch GmbH % % Date: 2020.12.15 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/of_grad_findiff.csv.ref b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/of_grad_findiff.csv.ref index 2634fca1ff54..ac3cc62550ad 100644 --- a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/of_grad_findiff.csv.ref +++ b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/of_grad_findiff.csv.ref @@ -1,2 +1,2 @@ -"VARIABLE" , "AVG_DENSITY[0]", "AVG_ENTHALPY[0]", "AVG_NORMALVEL[0]", "DRAG[0]" , "EFFICIENCY[0]" , "FORCE_X[0]" , "FORCE_Y[0]" , "FORCE_Z[0]" , "LIFT[0]" , "MOMENT_X[0]" , "MOMENT_Y[0]" , "MOMENT_Z[0]" , "SIDEFORCE[0]" , "SURFACE_MACH[0]", "SURFACE_MASSFLOW[0]", "SURFACE_MOM_DISTORTION[0]", "SURFACE_PRESSURE_DROP[0]", "SURFACE_SECONDARY[0]", "SURFACE_SECOND_OVER_UNIFORM[0]", "SURFACE_STATIC_PRESSURE[0]", "SURFACE_STATIC_TEMPERATURE[0]", "SURFACE_TOTAL_PRESSURE[0]", "SURFACE_TOTAL_TEMPERATURE[0]", "SURFACE_UNIFORMITY[0]", "AVG_TEMPERATURE[1]", "MAXIMUM_HEATFLUX[1]", "TOTAL_HEATFLUX[1]", "FINDIFF_STEP" -0 , 0.0 , -300000.0026077032, -3.3306691000000184e-08, 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , -0.01999999887924986, 0.0 , -0.9000000009140585 , 0.0 , 0.9379999998948563 , 1.649999997743734 , 419.99999780273356 , -69.99999868639861 , 358.9999998609983 , -69.99999868639861 , -0.6000000052353016 , -380.0000001774606, 0.0 , -430.00000005122274, 1e-08 +"VARIABLE" , "AVG_DENSITY[0]", "AVG_ENTHALPY[0]", "AVG_NORMALVEL[0]", "DRAG[0]" , "EFFICIENCY[0]" , "FORCE_X[0]" , "FORCE_Y[0]" , "FORCE_Z[0]" , "LIFT[0]" , "MOMENT_X[0]" , "MOMENT_Y[0]" , "MOMENT_Z[0]" , "SIDEFORCE[0]" , "SURFACE_MACH[0]", "SURFACE_MASSFLOW[0]", "SURFACE_MOM_DISTORTION[0]", "SURFACE_PRESSURE_DROP[0]", "SURFACE_SECONDARY[0]", "SURFACE_SECOND_OVER_UNIFORM[0]", "SURFACE_STATIC_PRESSURE[0]", "SURFACE_STATIC_TEMPERATURE[0]", "SURFACE_TOTAL_PRESSURE[0]", "SURFACE_TOTAL_TEMPERATURE[0]", "SURFACE_UNIFORMITY[0]", "AVG_TEMPERATURE[1]", "TOTAL_HEATFLUX[1]", "FINDIFF_STEP" +0 , 0.0 , -1000000.0242143869, -9.992000000081167e-08, 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , -1.4199999995301305, 0.0 , -36.519999999096164 , 0.0 , 39.07999999996914 , 73.22000000198337 , 6360.000003269306 , -279.99999474559445 , 109.99999915384251 , -290.0000026784255 , -34.39999998189336 , -110.00000199601345, 260.00000161729986, 1e-08 diff --git a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_3d/configFluid.cfg b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_3d/configFluid.cfg index 2e4ba6e66e4f..8cda49b3570c 100644 --- a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_3d/configFluid.cfg +++ b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_3d/configFluid.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: Robert Bosch GmbH % % Date: 07.06.2019 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_3d/configMaster.cfg b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_3d/configMaster.cfg index e61f6c473050..5024d5acd2eb 100644 --- a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_3d/configMaster.cfg +++ b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_3d/configMaster.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: Robert Bosch GmbH % % Date: 2020.12.15 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_3d/configSolid.cfg b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_3d/configSolid.cfg index 3c9cacda54d1..be7d35fbfbf4 100644 --- a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_3d/configSolid.cfg +++ b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_3d/configSolid.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: Robert Bosch GmbH % % Date: 07.06.2019 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/incomp_navierstokes/streamwise_periodic/dp-adjoint_chtPinArray_2d/configFluid.cfg b/TestCases/incomp_navierstokes/streamwise_periodic/dp-adjoint_chtPinArray_2d/configFluid.cfg index 1b82f8c7250f..d2b1e4c059b4 100644 --- a/TestCases/incomp_navierstokes/streamwise_periodic/dp-adjoint_chtPinArray_2d/configFluid.cfg +++ b/TestCases/incomp_navierstokes/streamwise_periodic/dp-adjoint_chtPinArray_2d/configFluid.cfg @@ -4,7 +4,7 @@ % Case description: Unit Cell flow around pin array (fluid) % % Author: T. Kattmann % % Date: 2022.02.10 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/incomp_navierstokes/streamwise_periodic/dp-adjoint_chtPinArray_2d/configMaster.cfg b/TestCases/incomp_navierstokes/streamwise_periodic/dp-adjoint_chtPinArray_2d/configMaster.cfg index 7dcc07c02495..613f55311644 100644 --- a/TestCases/incomp_navierstokes/streamwise_periodic/dp-adjoint_chtPinArray_2d/configMaster.cfg +++ b/TestCases/incomp_navierstokes/streamwise_periodic/dp-adjoint_chtPinArray_2d/configMaster.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: None % % Date: 2022.02.10 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/incomp_navierstokes/streamwise_periodic/dp-adjoint_chtPinArray_2d/configSolid.cfg b/TestCases/incomp_navierstokes/streamwise_periodic/dp-adjoint_chtPinArray_2d/configSolid.cfg index 6f78e160a6cc..57edc34d4381 100644 --- a/TestCases/incomp_navierstokes/streamwise_periodic/dp-adjoint_chtPinArray_2d/configSolid.cfg +++ b/TestCases/incomp_navierstokes/streamwise_periodic/dp-adjoint_chtPinArray_2d/configSolid.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: None % % Date: 2022.02.10 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/incomp_navierstokes/streamwise_periodic/pipeSlice_3d/sp_pipeSlice_3d_dp_hf_tp.cfg b/TestCases/incomp_navierstokes/streamwise_periodic/pipeSlice_3d/sp_pipeSlice_3d_dp_hf_tp.cfg index d0d61377ed62..30e8dd040306 100644 --- a/TestCases/incomp_navierstokes/streamwise_periodic/pipeSlice_3d/sp_pipeSlice_3d_dp_hf_tp.cfg +++ b/TestCases/incomp_navierstokes/streamwise_periodic/pipeSlice_3d/sp_pipeSlice_3d_dp_hf_tp.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: Robert Bosch GmbH % % Date: 2020.12.14 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/incomp_rans/naca0012/naca0012.cfg b/TestCases/incomp_rans/naca0012/naca0012.cfg index 20523cd298c6..cf7b24669c63 100644 --- a/TestCases/incomp_rans/naca0012/naca0012.cfg +++ b/TestCases/incomp_rans/naca0012/naca0012.cfg @@ -6,7 +6,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: Feb 18th, 2013 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/incomp_rans/naca0012/naca0012_SST_SUST.cfg b/TestCases/incomp_rans/naca0012/naca0012_SST_SUST.cfg index 07dd9dc17674..9a313cd42884 100644 --- a/TestCases/incomp_rans/naca0012/naca0012_SST_SUST.cfg +++ b/TestCases/incomp_rans/naca0012/naca0012_SST_SUST.cfg @@ -6,7 +6,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: Feb 18th, 2013 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/incomp_rans/rough_flatplate/rough_flatplate_incomp.cfg b/TestCases/incomp_rans/rough_flatplate/rough_flatplate_incomp.cfg index 049d583819f8..af410edd5abd 100644 --- a/TestCases/incomp_rans/rough_flatplate/rough_flatplate_incomp.cfg +++ b/TestCases/incomp_rans/rough_flatplate/rough_flatplate_incomp.cfg @@ -5,7 +5,7 @@ % pressure gradient % % Author: Akshay Koodly % % Date: 2020.07.07 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/mms/dg_ringleb/ringleb_dg.cfg b/TestCases/mms/dg_ringleb/ringleb_dg.cfg index 4d279e69cf0d..3e37534e1036 100644 --- a/TestCases/mms/dg_ringleb/ringleb_dg.cfg +++ b/TestCases/mms/dg_ringleb/ringleb_dg.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/mms/fvm_incomp_euler/inv_mms_jst.cfg b/TestCases/mms/fvm_incomp_euler/inv_mms_jst.cfg index 40c0fe9385f4..2bbc80402f83 100755 --- a/TestCases/mms/fvm_incomp_euler/inv_mms_jst.cfg +++ b/TestCases/mms/fvm_incomp_euler/inv_mms_jst.cfg @@ -4,7 +4,7 @@ % Case description: Incompressible inviscid MMS test case % % Author: Thomas D. Economon % % Date: 2019.04.09 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/mms/fvm_incomp_navierstokes/lam_mms_fds.cfg b/TestCases/mms/fvm_incomp_navierstokes/lam_mms_fds.cfg index 37fe5125df58..b97722275686 100755 --- a/TestCases/mms/fvm_incomp_navierstokes/lam_mms_fds.cfg +++ b/TestCases/mms/fvm_incomp_navierstokes/lam_mms_fds.cfg @@ -4,7 +4,7 @@ % Case description: Incompressible laminar MMS test case % % Author: Thomas D. Economon % % Date: 2019.04.09 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/mms/fvm_navierstokes/lam_mms_roe.cfg b/TestCases/mms/fvm_navierstokes/lam_mms_roe.cfg index 30e8820f290c..ab4ece6cac41 100755 --- a/TestCases/mms/fvm_navierstokes/lam_mms_roe.cfg +++ b/TestCases/mms/fvm_navierstokes/lam_mms_roe.cfg @@ -4,7 +4,7 @@ % Case description: Compressible laminar MMS test case % % Author: Thomas D. Economon % % Date: 2019.04.09 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/moving_wall/cavity/lam_cavity.cfg b/TestCases/moving_wall/cavity/lam_cavity.cfg index 310e6eef9e2f..2da508ef2b40 100644 --- a/TestCases/moving_wall/cavity/lam_cavity.cfg +++ b/TestCases/moving_wall/cavity/lam_cavity.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2013.10.01 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/moving_wall/spinning_cylinder/spinning_cylinder.cfg b/TestCases/moving_wall/spinning_cylinder/spinning_cylinder.cfg index f9c21e43cca2..e4d905d186a5 100644 --- a/TestCases/moving_wall/spinning_cylinder/spinning_cylinder.cfg +++ b/TestCases/moving_wall/spinning_cylinder/spinning_cylinder.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2013.08.21 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/multiple_ffd/naca0012/inv_NACA0012_ffd.cfg b/TestCases/multiple_ffd/naca0012/inv_NACA0012_ffd.cfg index 588629caaad0..74eb10bea61c 100644 --- a/TestCases/multiple_ffd/naca0012/inv_NACA0012_ffd.cfg +++ b/TestCases/multiple_ffd/naca0012/inv_NACA0012_ffd.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios, Charanya Venkatesan-Crome % % Institution: Stanford University % % Date: 2018.07.23 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/multiple_ffd/naca0012/of_grad_cd.dat.ref b/TestCases/multiple_ffd/naca0012/of_grad_cd.dat.ref index bce05aa9bf66..3c7f554fd5d0 100644 --- a/TestCases/multiple_ffd/naca0012/of_grad_cd.dat.ref +++ b/TestCases/multiple_ffd/naca0012/of_grad_cd.dat.ref @@ -1,3 +1,3 @@ VARIABLES="VARIABLE" , "GRADIENT" , "FINDIFF_STEP" - 0 , 0.0779208 , 0.001 - 1 , -0.115959 , 0.001 + 0 , 0.0790825 , 0.001 + 1 , -0.112974 , 0.001 diff --git a/TestCases/multiple_ffd/naca0012/of_grad_directdiff.dat.ref b/TestCases/multiple_ffd/naca0012/of_grad_directdiff.dat.ref index 74adba36fa11..6ec22d9664a3 100644 --- a/TestCases/multiple_ffd/naca0012/of_grad_directdiff.dat.ref +++ b/TestCases/multiple_ffd/naca0012/of_grad_directdiff.dat.ref @@ -1,3 +1,3 @@ VARIABLES="VARIABLE" , "DRAG" , "EFFICIENCY" , "FORCE_X" , "FORCE_Y" , "FORCE_Z" , "LIFT" , "MOMENT_X" , "MOMENT_Y" , "MOMENT_Z" , "SIDEFORCE" - 0 , 0.06149476303 , -0.608748249 , 0.05888315926 , 0.1203589365 , 0.0 , 0.119045765 , 0.0 , 0.0 , 0.009719951712 , 0.0 - 1 , -0.08536237383 , 8.303168487 , -0.09097907726 , 0.2564786779 , 0.0 , 0.2584023411 , 0.0 , 0.0 , 0.004460595335 , 0.0 + 0 , 0.05922508178 , -0.6082054907 , 0.05650610011 , 0.1252552372 , 0.0 , 0.1239927558 , 0.0 , 0.0 , 0.00502894879 , 0.0 + 1 , -0.07750209216 , 8.684127966 , -0.08326907905 , 0.2634518171 , 0.0 , 0.2652056281 , 0.0 , 0.0 , -0.006643227386 , 0.0 diff --git a/TestCases/navierstokes/cylinder/cylinder_lowmach.cfg b/TestCases/navierstokes/cylinder/cylinder_lowmach.cfg index c7019c507904..32d412358e76 100644 --- a/TestCases/navierstokes/cylinder/cylinder_lowmach.cfg +++ b/TestCases/navierstokes/cylinder/cylinder_lowmach.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2013.09.30 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/navierstokes/cylinder/lam_cylinder.cfg b/TestCases/navierstokes/cylinder/lam_cylinder.cfg index ae65dabb5945..a8ffe599981b 100644 --- a/TestCases/navierstokes/cylinder/lam_cylinder.cfg +++ b/TestCases/navierstokes/cylinder/lam_cylinder.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2013.09.30 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/navierstokes/flatplate/lam_flatplate.cfg b/TestCases/navierstokes/flatplate/lam_flatplate.cfg index db98f0bfc1cc..31b745a7570d 100644 --- a/TestCases/navierstokes/flatplate/lam_flatplate.cfg +++ b/TestCases/navierstokes/flatplate/lam_flatplate.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2013.09.30 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/navierstokes/flatplate/lam_flatplate_unst.cfg b/TestCases/navierstokes/flatplate/lam_flatplate_unst.cfg index c62ce2570c6d..261d1ee7ba61 100644 --- a/TestCases/navierstokes/flatplate/lam_flatplate_unst.cfg +++ b/TestCases/navierstokes/flatplate/lam_flatplate_unst.cfg @@ -2,7 +2,7 @@ % % % SU2 configuration file % % Case description: Test interp. restart, and auto time-step for dual-time % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/navierstokes/naca0012/lam_NACA0012.cfg b/TestCases/navierstokes/naca0012/lam_NACA0012.cfg index 040b8caadcf1..0d0517017782 100644 --- a/TestCases/navierstokes/naca0012/lam_NACA0012.cfg +++ b/TestCases/navierstokes/naca0012/lam_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: Sep 28, 2012 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/navierstokes/poiseuille/lam_poiseuille.cfg b/TestCases/navierstokes/poiseuille/lam_poiseuille.cfg index 17ec04513b12..86484983ba44 100644 --- a/TestCases/navierstokes/poiseuille/lam_poiseuille.cfg +++ b/TestCases/navierstokes/poiseuille/lam_poiseuille.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2017.02.27 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/navierstokes/poiseuille/profile_poiseuille.cfg b/TestCases/navierstokes/poiseuille/profile_poiseuille.cfg index 156e159dc557..d57b5d5147fd 100644 --- a/TestCases/navierstokes/poiseuille/profile_poiseuille.cfg +++ b/TestCases/navierstokes/poiseuille/profile_poiseuille.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Robert Bosch LLC % % Date: 2018.03.19 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nicf/LS89/turb_SA_PR.cfg b/TestCases/nicf/LS89/turb_SA_PR.cfg index 2ed0bc26690e..1d28e05fab4d 100644 --- a/TestCases/nicf/LS89/turb_SA_PR.cfg +++ b/TestCases/nicf/LS89/turb_SA_PR.cfg @@ -5,7 +5,7 @@ % Author: M. Pini, S. Vitale % % Institution: Delft University of Technology % % Date: Feb 18th, 2013 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nicf/LS89/turb_SST_PR.cfg b/TestCases/nicf/LS89/turb_SST_PR.cfg index 0199b3edb938..f8fb8c2ff915 100644 --- a/TestCases/nicf/LS89/turb_SST_PR.cfg +++ b/TestCases/nicf/LS89/turb_SST_PR.cfg @@ -5,7 +5,7 @@ % Author: M. Pini, S. Vitale % % Institution: Delft University of Technology % % Date: Feb 18th, 2013 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nicf/coolprop/fluidModel.cfg b/TestCases/nicf/coolprop/fluidModel.cfg index c26f13949f32..47e6622636d9 100644 --- a/TestCases/nicf/coolprop/fluidModel.cfg +++ b/TestCases/nicf/coolprop/fluidModel.cfg @@ -6,7 +6,7 @@ % Author: Peng Yan, Alberto Guardone % % Institution: Politecnico di Milano % % Date: 2022.10.8 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nicf/coolprop/transportModel.cfg b/TestCases/nicf/coolprop/transportModel.cfg index 2326aa36ebd1..8d82a9e5b833 100644 --- a/TestCases/nicf/coolprop/transportModel.cfg +++ b/TestCases/nicf/coolprop/transportModel.cfg @@ -6,7 +6,7 @@ % Author: Peng Yan, Alberto Guardone % % Institution: Politecnico di Milano % % Date: 2022.11.26 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nicf/datadriven/datadriven_nozzle.cfg b/TestCases/nicf/datadriven/datadriven_nozzle.cfg index 0e5326609f48..eeb30165261c 100644 --- a/TestCases/nicf/datadriven/datadriven_nozzle.cfg +++ b/TestCases/nicf/datadriven/datadriven_nozzle.cfg @@ -7,7 +7,7 @@ % Author: Evert Bunschoten % % Institution: Delft University of Technology % % Date: 2022.10.8 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -15,7 +15,7 @@ SOLVER= RANS KIND_TURB_MODEL= SST MATH_PROBLEM= DIRECT -RESTART_SOL= NO +RESTART_SOL= YES SYSTEM_MEASUREMENTS= SI % % -------------------- COMPRESSIBLE FREE-STREAM DEFINITION --------------------% @@ -26,31 +26,34 @@ AOA= 0.0 SIDESLIP_ANGLE= 0.0 INIT_OPTION= TD_CONDITIONS FREESTREAM_OPTION= TEMPERATURE_FS -FREESTREAM_PRESSURE= 250000.0 +FREESTREAM_PRESSURE= 3361842.0 % -% Free-stream temperature (288.15 K, 518.67 R by default) -FREESTREAM_TEMPERATURE= 400.0 +FREESTREAM_TEMPERATURE= 189.288 FREESTREAM_DENSITY= 2.0 REF_DIMENSIONALIZATION= DIMENSIONAL % ---- DATADRIVEN FLUID MODEL DEFINITION -------% -% +% Use physics-informed neural network method. FLUID_MODEL = DATADRIVEN_FLUID INTERPOLATION_METHOD = MLP -FILENAMES_INTERPOLATOR = (MLP_air.mlp) -DATADRIVEN_NEWTON_RELAXATION = 0.8 +FILENAMES_INTERPOLATOR = (MLP_nitrogen.mlp) +USE_PINN= YES + +CONDUCTIVITY_MODEL=CONSTANT_PRANDTL +PRANDTL_LAM=0.8426621478074403 +PRANDTL_TURB=0.8426621478074403 % --------------------------- VISCOSITY MODEL ---------------------------------% VISCOSITY_MODEL= CONSTANT_VISCOSITY -MU_CONSTANT= 1.21409E-05 +MU_CONSTANT= 1.0998841148727364e-05 -% --------------------------- THERMAL CONDUCTIVITY MODEL ----------------------% -CONDUCTIVITY_MODEL= CONSTANT_CONDUCTIVITY -THERMAL_CONDUCTIVITY_CONSTANT= 0.030542828 % -------------------- BOUNDARY CONDITION DEFINITION --------------------------% -MARKER_SYM= ( SYMMETRY, WALL ) -MARKER_RIEMANN= ( INFLOW, TOTAL_CONDITIONS_PT, 904388, 542.13, 1.0, 0.0, 0.0, OUTFLOW, STATIC_PRESSURE, 200000.0, 0.0, 0.0, 0.0, 0.0 ) +MARKER_SYM= ( SYMMETRY ) +MARKER_HEATFLUX= (WALL, 0.0) +MARKER_RIEMANN= ( INFLOW, TOTAL_CONDITIONS_PT, 3361842.0, 189.288, 1.0, 0.0, 0.0, \ + OUTFLOW, STATIC_PRESSURE, 747076.0, 0.0, 0.0, 0.0, 0.0 ) + % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% NUM_METHOD_GRAD= GREEN_GAUSS @@ -73,8 +76,6 @@ LINEAR_SOLVER_ITER= 10 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % -% Multi-grid levels (0 = no multi-grid) -MGLEVEL= 0 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% CONV_NUM_METHOD_FLOW= ROE @@ -89,7 +90,7 @@ CFL_REDUCTION_TURB= 1.0 % --------------------------- CONVERGENCE PARAMETERS --------------------------% % % Number of total iterations -ITER= 10 +ITER= 500 CONV_RESIDUAL_MINVAL= -24 CONV_STARTITER= 10 @@ -109,19 +110,19 @@ SOLUTION_FILENAME= solution_flow.dat TABULAR_FORMAT= CSV % % Output file convergence history (w/o extension) -CONV_FILENAME= history % % Output file restart flow RESTART_FILENAME= restart_flow.dat % % Output file flow (w/o extension) variables -VOLUME_FILENAME= flow +VOLUME_OUTPUT=(SOLUTION) % % Output file surface flow coefficient (w/o extension) SURFACE_FILENAME= surface_flow % % Writing solution file frequency OUTPUT_WRT_FREQ= 500 +OUTPUT_FILES=RESTART % % Screen output -SCREEN_OUTPUT= (INNER_ITER, RMS_DENSITY, RMS_TKE, RMS_DISSIPATION, LIFT, DRAG) +SCREEN_OUTPUT= (INNER_ITER, RMS_RES) diff --git a/TestCases/nicf/edge/edge_PPR.cfg b/TestCases/nicf/edge/edge_PPR.cfg index 95a86eab7ead..1e115c6d57a8 100644 --- a/TestCases/nicf/edge/edge_PPR.cfg +++ b/TestCases/nicf/edge/edge_PPR.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2012.09.29 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nicf/edge/edge_VW.cfg b/TestCases/nicf/edge/edge_VW.cfg index 215e758df475..06a722f78784 100644 --- a/TestCases/nicf/edge/edge_VW.cfg +++ b/TestCases/nicf/edge/edge_VW.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2012.09.29 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nonequilibrium/invwedge/invwedge_ausm.cfg b/TestCases/nonequilibrium/invwedge/invwedge_ausm.cfg index 287cea51497a..2dd0084ff89b 100644 --- a/TestCases/nonequilibrium/invwedge/invwedge_ausm.cfg +++ b/TestCases/nonequilibrium/invwedge/invwedge_ausm.cfg @@ -5,7 +5,7 @@ % Author: C. Garbacz % % Institution: Strathclyde University % % Date: 2020.11.01 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nonequilibrium/invwedge/invwedge_ausmplusup2.cfg b/TestCases/nonequilibrium/invwedge/invwedge_ausmplusup2.cfg index ce928e65497d..80d14b4e1f98 100644 --- a/TestCases/nonequilibrium/invwedge/invwedge_ausmplusup2.cfg +++ b/TestCases/nonequilibrium/invwedge/invwedge_ausmplusup2.cfg @@ -2,7 +2,7 @@ % % % SU2 configuration file % % Case description: Mach 5 inviscid flow over a 10deg wedge- AUSM+-Up2 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nonequilibrium/invwedge/invwedge_lax.cfg b/TestCases/nonequilibrium/invwedge/invwedge_lax.cfg index d0e2505af4b8..6fdc7f0ec048 100644 --- a/TestCases/nonequilibrium/invwedge/invwedge_lax.cfg +++ b/TestCases/nonequilibrium/invwedge/invwedge_lax.cfg @@ -2,7 +2,7 @@ % % % SU2 configuration file % % Case description: Mach 5 inviscid flow over a 10deg wedge-LAX % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nonequilibrium/invwedge/invwedge_msw.cfg b/TestCases/nonequilibrium/invwedge/invwedge_msw.cfg index edbbde31ad70..5155a8b47023 100644 --- a/TestCases/nonequilibrium/invwedge/invwedge_msw.cfg +++ b/TestCases/nonequilibrium/invwedge/invwedge_msw.cfg @@ -2,7 +2,7 @@ % % % SU2 configuration file % % Case description: Mach 5 inviscid flow over a 10deg wedge-MSW % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nonequilibrium/invwedge/invwedge_roe.cfg b/TestCases/nonequilibrium/invwedge/invwedge_roe.cfg index 54ada41ed533..39c4bbc3830e 100644 --- a/TestCases/nonequilibrium/invwedge/invwedge_roe.cfg +++ b/TestCases/nonequilibrium/invwedge/invwedge_roe.cfg @@ -2,7 +2,7 @@ % % % SU2 configuration file % % Case description: Mach 5 inviscid flow over a 10deg wedge-ROE % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nonequilibrium/invwedge/invwedge_ss_inlet.cfg b/TestCases/nonequilibrium/invwedge/invwedge_ss_inlet.cfg index 37da8afc394c..abbf8f42fa71 100644 --- a/TestCases/nonequilibrium/invwedge/invwedge_ss_inlet.cfg +++ b/TestCases/nonequilibrium/invwedge/invwedge_ss_inlet.cfg @@ -5,7 +5,7 @@ % Author: J. Needels % % Institution: Stanford University % % Date: 2022.1.11 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nonequilibrium/thermalbath/finitechemistry/thermalbath.cfg b/TestCases/nonequilibrium/thermalbath/finitechemistry/thermalbath.cfg index 4e21dc4b7400..6130f1cf4de4 100644 --- a/TestCases/nonequilibrium/thermalbath/finitechemistry/thermalbath.cfg +++ b/TestCases/nonequilibrium/thermalbath/finitechemistry/thermalbath.cfg @@ -7,7 +7,7 @@ % Author: C. Garbacz % % Institution: Strathclyde University % % Date: 2019.04.10 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nonequilibrium/thermalbath/frozen/thermalbath_frozen.cfg b/TestCases/nonequilibrium/thermalbath/frozen/thermalbath_frozen.cfg index 2b3364adbcf9..b108d12204e9 100644 --- a/TestCases/nonequilibrium/thermalbath/frozen/thermalbath_frozen.cfg +++ b/TestCases/nonequilibrium/thermalbath/frozen/thermalbath_frozen.cfg @@ -6,7 +6,7 @@ % Author: C. Garbacz % % Institution: Strathclyde University % % Date: 2019.04.10 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nonequilibrium/visc_wedge/axi_visccone.cfg b/TestCases/nonequilibrium/visc_wedge/axi_visccone.cfg index 63ddf04461b5..2702fec63ae4 100644 --- a/TestCases/nonequilibrium/visc_wedge/axi_visccone.cfg +++ b/TestCases/nonequilibrium/visc_wedge/axi_visccone.cfg @@ -4,7 +4,7 @@ % Case description: Mach 5 viscous flow over a 10deg axisymmetric cone % % Author: C. Garbacz % % Institution: Strathclyde University % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nonequilibrium/visc_wedge/partial_cat.cfg b/TestCases/nonequilibrium/visc_wedge/partial_cat.cfg index 1bea1feddd2d..21e1abc11457 100644 --- a/TestCases/nonequilibrium/visc_wedge/partial_cat.cfg +++ b/TestCases/nonequilibrium/visc_wedge/partial_cat.cfg @@ -5,7 +5,7 @@ % catalytic walls - gamma model, effeciency = 0.2 % % Author: J. Needels % % Institution: Stanford University % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nonequilibrium/visc_wedge/super_cat.cfg b/TestCases/nonequilibrium/visc_wedge/super_cat.cfg index 0e3b8aa0c5c0..31098bd1e4b1 100644 --- a/TestCases/nonequilibrium/visc_wedge/super_cat.cfg +++ b/TestCases/nonequilibrium/visc_wedge/super_cat.cfg @@ -5,7 +5,7 @@ % catalytic walls - gamma model, effeciency = 0.2 % % Author: J. Needels % % Institution: Stanford University % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nonequilibrium/viscwedge_mpp/viscwedge_mpp.cfg b/TestCases/nonequilibrium/viscwedge_mpp/viscwedge_mpp.cfg index eeffdfd15d56..ee58bb65a793 100644 --- a/TestCases/nonequilibrium/viscwedge_mpp/viscwedge_mpp.cfg +++ b/TestCases/nonequilibrium/viscwedge_mpp/viscwedge_mpp.cfg @@ -5,7 +5,7 @@ % Author: C. Garbacz % % Institution: Strathclyde University % % Date: 2020.11.01 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_euler/equivalentarea_naca64206/NACA64206.cfg b/TestCases/optimization_euler/equivalentarea_naca64206/NACA64206.cfg index cc9639fdbade..5c274d526394 100644 --- a/TestCases/optimization_euler/equivalentarea_naca64206/NACA64206.cfg +++ b/TestCases/optimization_euler/equivalentarea_naca64206/NACA64206.cfg @@ -5,7 +5,7 @@ % Author: Yuki Utsumi % % Institution: Individual % % Date: 2021.08.07 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_2surf_1obj.cfg b/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_2surf_1obj.cfg index 7559c91646fa..53b5d89d7806 100644 --- a/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_2surf_1obj.cfg +++ b/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_2surf_1obj.cfg @@ -7,7 +7,7 @@ % Author: H.L. Kline, modified from inviscid wedge by Thomas D. Economon % % Institution: Stanford University % % Date: 2018.01.07 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj.cfg b/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj.cfg index f2f0982d0e08..544a057cf33d 100644 --- a/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj.cfg +++ b/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj.cfg @@ -8,7 +8,7 @@ % Author: H.L. Kline, modified from inviscid wedge by Thomas D. Economon % % Institution: Stanford University % % Date: 2018.01.07 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj_1surf.cfg b/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj_1surf.cfg index 003b135449e4..8823543345e9 100644 --- a/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj_1surf.cfg +++ b/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj_1surf.cfg @@ -8,7 +8,7 @@ % Author: H.L. Kline, modified from inviscid wedge by Thomas D. Economon % % Institution: Stanford University % % Date: 2018.01.07 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj_combo.cfg b/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj_combo.cfg index ce705552bb23..c7089d8d53d7 100644 --- a/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj_combo.cfg +++ b/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj_combo.cfg @@ -10,7 +10,7 @@ % Author: H.L. Kline, modified from inviscid wedge by Thomas D. Economon % % Institution: Stanford University % % Date: 2018.01.07 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_euler/multipoint_naca0012/inv_NACA0012_multipoint.cfg b/TestCases/optimization_euler/multipoint_naca0012/inv_NACA0012_multipoint.cfg index 70602c2d5ec3..3008787ad42a 100644 --- a/TestCases/optimization_euler/multipoint_naca0012/inv_NACA0012_multipoint.cfg +++ b/TestCases/optimization_euler/multipoint_naca0012/inv_NACA0012_multipoint.cfg @@ -5,7 +5,7 @@ % Author: Indiana Stokes % % Institution: % % Date: 2017.07.03 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_euler/pitching_naca64a010/pitching_NACA64A010.cfg b/TestCases/optimization_euler/pitching_naca64a010/pitching_NACA64A010.cfg index 4e4f1c835879..79188f4c1465 100644 --- a/TestCases/optimization_euler/pitching_naca64a010/pitching_NACA64A010.cfg +++ b/TestCases/optimization_euler/pitching_naca64a010/pitching_NACA64A010.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2011.11.02 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_euler/pitching_oneram6/pitching_ONERAM6.cfg b/TestCases/optimization_euler/pitching_oneram6/pitching_ONERAM6.cfg index 60bb8825cf26..bd5232b4acc5 100644 --- a/TestCases/optimization_euler/pitching_oneram6/pitching_ONERAM6.cfg +++ b/TestCases/optimization_euler/pitching_oneram6/pitching_ONERAM6.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 09.07.2011 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_euler/rotating_naca0012/rotating_NACA0012.cfg b/TestCases/optimization_euler/rotating_naca0012/rotating_NACA0012.cfg index 72d30abf09f9..30fd366e1820 100644 --- a/TestCases/optimization_euler/rotating_naca0012/rotating_NACA0012.cfg +++ b/TestCases/optimization_euler/rotating_naca0012/rotating_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2013.03.06 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_euler/steady_inverse_design/inv_NACA0012.cfg b/TestCases/optimization_euler/steady_inverse_design/inv_NACA0012.cfg index afd6e525c7e2..91e94aaf382e 100644 --- a/TestCases/optimization_euler/steady_inverse_design/inv_NACA0012.cfg +++ b/TestCases/optimization_euler/steady_inverse_design/inv_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_euler/steady_naca0012/inv_NACA0012_adv.cfg b/TestCases/optimization_euler/steady_naca0012/inv_NACA0012_adv.cfg index feedaae8e70b..aab55df81b0e 100644 --- a/TestCases/optimization_euler/steady_naca0012/inv_NACA0012_adv.cfg +++ b/TestCases/optimization_euler/steady_naca0012/inv_NACA0012_adv.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 2013.09.29 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_euler/steady_naca0012/inv_NACA0012_basic.cfg b/TestCases/optimization_euler/steady_naca0012/inv_NACA0012_basic.cfg index fe5917fa1ce3..3c6643892f88 100644 --- a/TestCases/optimization_euler/steady_naca0012/inv_NACA0012_basic.cfg +++ b/TestCases/optimization_euler/steady_naca0012/inv_NACA0012_basic.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 2013.09.29 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_euler/steady_oneram6/inv_ONERAM6_adv.cfg b/TestCases/optimization_euler/steady_oneram6/inv_ONERAM6_adv.cfg index 617939543b05..ca0bb1ccd21f 100644 --- a/TestCases/optimization_euler/steady_oneram6/inv_ONERAM6_adv.cfg +++ b/TestCases/optimization_euler/steady_oneram6/inv_ONERAM6_adv.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios, Heather Kline % % Institution: Stanford University % % Date: 01.17.2017 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_euler/steady_oneram6/inv_ONERAM6_basic.cfg b/TestCases/optimization_euler/steady_oneram6/inv_ONERAM6_basic.cfg index 9b54558d2df4..59500661a1db 100644 --- a/TestCases/optimization_euler/steady_oneram6/inv_ONERAM6_basic.cfg +++ b/TestCases/optimization_euler/steady_oneram6/inv_ONERAM6_basic.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios, Heather Kline % % Institution: Stanford University % % Date: 01.17.2017 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_rans/naca0012/naca0012.cfg b/TestCases/optimization_rans/naca0012/naca0012.cfg index 763109d820a3..61550e343b6d 100644 --- a/TestCases/optimization_rans/naca0012/naca0012.cfg +++ b/TestCases/optimization_rans/naca0012/naca0012.cfg @@ -5,7 +5,7 @@ % Author: Steffen Schotthöfer % % Institution: TU Kaiserslautern % % Date: Mar 16, 2017 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_rans/pitching_naca64a010/turb_NACA64A010.cfg b/TestCases/optimization_rans/pitching_naca64a010/turb_NACA64A010.cfg index 4752ab6ed697..8f66986bf538 100644 --- a/TestCases/optimization_rans/pitching_naca64a010/turb_NACA64A010.cfg +++ b/TestCases/optimization_rans/pitching_naca64a010/turb_NACA64A010.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2011.11.02 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_rans/pitching_oneram6/turb_ONERAM6.cfg b/TestCases/optimization_rans/pitching_oneram6/turb_ONERAM6.cfg index 08a1cb604196..d9c7467c22fb 100644 --- a/TestCases/optimization_rans/pitching_oneram6/turb_ONERAM6.cfg +++ b/TestCases/optimization_rans/pitching_oneram6/turb_ONERAM6.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2011.11.02 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_rans/steady_oneram6/turb_ONERAM6.cfg b/TestCases/optimization_rans/steady_oneram6/turb_ONERAM6.cfg index e03877b28b6d..b139814e3516 100644 --- a/TestCases/optimization_rans/steady_oneram6/turb_ONERAM6.cfg +++ b/TestCases/optimization_rans/steady_oneram6/turb_ONERAM6.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 2011.11.02 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_rans/steady_rae2822/turb_SA_RAE2822.cfg b/TestCases/optimization_rans/steady_rae2822/turb_SA_RAE2822.cfg index 65242d649ae3..dbece40a3eb4 100644 --- a/TestCases/optimization_rans/steady_rae2822/turb_SA_RAE2822.cfg +++ b/TestCases/optimization_rans/steady_rae2822/turb_SA_RAE2822.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 5/15/2013 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index d6aee618cb97..a6c8cf296637 100644 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -3,14 +3,14 @@ ## \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 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 @@ -47,7 +47,7 @@ def main(): cfd_flamelet_ch4.cfg_dir = "flamelet/01_laminar_premixed_ch4_flame_cfd" cfd_flamelet_ch4.cfg_file = "lam_prem_ch4_cfd.cfg" cfd_flamelet_ch4.test_iter = 10 - cfd_flamelet_ch4.test_vals = [-13.665072, -12.593885, -14.249600, -6.069756, -14.816937, -17.057821] + cfd_flamelet_ch4.test_vals = [-14.297190, -12.593356, -14.249342, -6.069757, -14.816955, -17.057821] cfd_flamelet_ch4.new_output = True test_list.append(cfd_flamelet_ch4) @@ -56,7 +56,7 @@ def main(): cfd_flamelet_ch4_axi.cfg_dir = "flamelet/05_laminar_premixed_ch4_flame_cfd_axi" cfd_flamelet_ch4_axi.cfg_file = "lam_prem_ch4_cfd_axi.cfg" cfd_flamelet_ch4_axi.test_iter = 10 - cfd_flamelet_ch4_axi.test_vals = [-10.935396, -11.476692, -11.302574, -12.734435, -6.110559] + cfd_flamelet_ch4_axi.test_vals = [-10.935482, -11.477701, -11.302709, -12.734435, -6.110542] cfd_flamelet_ch4_axi.new_output = True test_list.append(cfd_flamelet_ch4_axi) @@ -65,7 +65,7 @@ def main(): cfd_flamelet_ch4_partial_premix.cfg_dir = "flamelet/06_laminar_partial_premixed_ch4_flame_cfd" cfd_flamelet_ch4_partial_premix.cfg_file = "lam_partial_prem_ch4_cfd.cfg" cfd_flamelet_ch4_partial_premix.test_iter = 10 - cfd_flamelet_ch4_partial_premix.test_vals = [-9.641526, -11.303947, -3.675920, -13.158386, -11.087893] + cfd_flamelet_ch4_partial_premix.test_vals = [-9.645814, -11.304194, -3.675580, -13.158500, -11.087904] cfd_flamelet_ch4_partial_premix.new_output = True test_list.append(cfd_flamelet_ch4_partial_premix) @@ -74,7 +74,7 @@ def main(): cfd_flamelet_h2.cfg_dir = "flamelet/07_laminar_premixed_h2_flame_cfd" cfd_flamelet_h2.cfg_file = "laminar_premixed_h2_flame_cfd.cfg" cfd_flamelet_h2.test_iter = 5 - cfd_flamelet_h2.test_vals = [-9.999540, -9.843936, -3.290033, -11.338454] + cfd_flamelet_h2.test_vals = [-10.006096, -9.844001, -3.290043, -11.338465] cfd_flamelet_h2.new_output = True test_list.append(cfd_flamelet_h2) @@ -175,7 +175,7 @@ def main(): visc_cone.cfg_dir = "nonequilibrium/visc_wedge" visc_cone.cfg_file = "axi_visccone.cfg" visc_cone.test_iter = 10 - visc_cone.test_vals = [-5.222270, -5.746525, -20.560273, -20.510152, -20.409102, 1.255757, -3.208382, -0.016014, 0.093462, 32619.000000] + visc_cone.test_vals = [-5.222270, -5.746525, -20.560278, -20.510152, -20.409102, 1.255758, -3.208382, -0.016014, 0.093462, 32619.000000] visc_cone.test_vals_aarch64 = [-5.222267, -5.746523, -20.560279, -20.510152, -20.409102, 1.255758, -3.208380, -0.016014, 0.093462, 32633.000000] test_list.append(visc_cone) @@ -220,7 +220,7 @@ def main(): channel.cfg_dir = "euler/channel" channel.cfg_file = "inv_channel_RK.cfg" channel.test_iter = 20 - channel.test_vals = [-2.904385, 2.536048, 0.020906, 0.042348] + channel.test_vals = [-2.904401, 2.536139, 0.020924, 0.042340] test_list.append(channel) # NACA0012 @@ -228,7 +228,7 @@ def main(): naca0012.cfg_dir = "euler/naca0012" naca0012.cfg_file = "inv_NACA0012_Roe.cfg" naca0012.test_iter = 20 - naca0012.test_vals = [-4.322128, -3.813578, 0.321660, 0.022547] + naca0012.test_vals = [-4.607257, -4.138750, 0.327682, 0.022685] test_list.append(naca0012) # Supersonic wedge @@ -236,7 +236,7 @@ def main(): wedge.cfg_dir = "euler/wedge" wedge.cfg_file = "inv_wedge_HLLC.cfg" wedge.test_iter = 20 - wedge.test_vals = [-1.377543, 4.293870, -0.243566, 0.042930] + wedge.test_vals = [-1.387215, 4.281574, -0.245443, 0.043264] test_list.append(wedge) # ONERA M6 Wing @@ -244,7 +244,7 @@ def main(): oneram6.cfg_dir = "euler/oneram6" oneram6.cfg_file = "inv_ONERAM6.cfg" oneram6.test_iter = 10 - oneram6.test_vals = [-11.512364, -10.982009, 0.280800, 0.008623] + oneram6.test_vals = [-11.500303, -10.971884, 0.280800, 0.008623] oneram6.timeout = 3200 test_list.append(oneram6) @@ -253,7 +253,7 @@ def main(): fixedCL_naca0012.cfg_dir = "fixed_cl/naca0012" fixedCL_naca0012.cfg_file = "inv_NACA0012.cfg" fixedCL_naca0012.test_iter = 10 - fixedCL_naca0012.test_vals = [-3.856871, 1.676974, 0.301113, 0.019487] + fixedCL_naca0012.test_vals = [-3.840915, 1.693979, 0.301144, 0.019489] test_list.append(fixedCL_naca0012) # Polar sweep of the inviscid NACA0012 @@ -262,7 +262,7 @@ def main(): polar_naca0012.cfg_file = "inv_NACA0012.cfg" polar_naca0012.polar = True polar_naca0012.test_iter = 10 - polar_naca0012.test_vals = [-1.086730, 4.382703, 0.001762, 0.033013] + polar_naca0012.test_vals = [-1.096894, 4.372054, 0.002074, 0.031515] polar_naca0012.test_vals_aarch64 = [-1.083394, 4.386134, 0.001588, 0.033513] polar_naca0012.command = TestCase.Command(exec = "compute_polar.py", param = "-i 11") # flaky test on arm64 @@ -274,7 +274,7 @@ def main(): bluntbody.cfg_dir = "euler/bluntbody" bluntbody.cfg_file = "blunt.cfg" bluntbody.test_iter = 20 - bluntbody.test_vals = [0.493672, 6.857839, -0.000002, 1.791404] + bluntbody.test_vals = [0.475144, 6.834602, -0.000007, 1.783980] test_list.append(bluntbody) # Equivalent area NACA64-206 @@ -282,7 +282,7 @@ def main(): ea_naca64206.cfg_dir = "optimization_euler/equivalentarea_naca64206" ea_naca64206.cfg_file = "NACA64206.cfg" ea_naca64206.test_iter = 10 - ea_naca64206.test_vals = [-1.188459, -0.522783, -0.003147, 67775.000000] + ea_naca64206.test_vals = [-1.125893, -0.474056, -0.002414, 67775.000000] test_list.append(ea_naca64206) # SUPERSONIC FLOW PAST A RAMP IN A CHANNEL @@ -290,7 +290,7 @@ def main(): ramp.cfg_dir = "euler/ramp" ramp.cfg_file = "inv_ramp.cfg" ramp.test_iter = 10 - ramp.test_vals = [-13.648694, -8.010920, -0.076277, 0.054839] + ramp.test_vals = [-13.650727, -8.014514, -0.076277, 0.054839] ramp.test_vals_aarch64 = [-13.398422, -7.786461, -0.081064, 0.056474] test_list.append(ramp) @@ -303,7 +303,7 @@ def main(): flatplate.cfg_dir = "navierstokes/flatplate" flatplate.cfg_file = "lam_flatplate.cfg" flatplate.test_iter = 100 - flatplate.test_vals = [-7.621750, -2.149876, 0.001084, 0.036232, 2.361500, -2.325300, -1.815200, -1.815200] + flatplate.test_vals = [-7.613292, -2.141207, 0.001084, 0.036230, 2.361500, -2.325300, 0.000000, 0.000000] test_list.append(flatplate) # Custom objective function @@ -311,7 +311,7 @@ def main(): flatplate_udobj.cfg_dir = "user_defined_functions" flatplate_udobj.cfg_file = "lam_flatplate.cfg" flatplate_udobj.test_iter = 20 - flatplate_udobj.test_vals = [-6.664134, -1.190073, -0.954366, 0.000641, -0.000633, 0.000548, -0.001181, 596.940000, 300.020000, 296.920000, 22.201000, 0.525750, 37.278000, 2.347900] + flatplate_udobj.test_vals = [-6.760101, -1.283906, -0.745653, 0.000587, -0.000038, 0.000977, -0.001015, 596.450000, 299.550000, 296.900000, 21.318000, 0.586640, 36.553000, 2.188800] test_list.append(flatplate_udobj) # Laminar cylinder (steady) @@ -319,7 +319,7 @@ def main(): cylinder.cfg_dir = "navierstokes/cylinder" cylinder.cfg_file = "lam_cylinder.cfg" cylinder.test_iter = 25 - cylinder.test_vals = [-8.421986, -2.931138, -0.003382, 1.607685, -0.009905] + cylinder.test_vals = [-8.422091, -2.930561, -0.003396, 1.608418, 0.000000] test_list.append(cylinder) # Laminar cylinder (low Mach correction) @@ -327,7 +327,7 @@ def main(): cylinder_lowmach.cfg_dir = "navierstokes/cylinder" cylinder_lowmach.cfg_file = "cylinder_lowmach.cfg" cylinder_lowmach.test_iter = 25 - cylinder_lowmach.test_vals = [-6.841604, -1.379532, -1.266739, 76.118218, 0.000274] + cylinder_lowmach.test_vals = [-6.841604, -1.379532, -1.266739, 76.118218, 0.000000] test_list.append(cylinder_lowmach) # 2D Poiseuille flow (body force driven with periodic inlet / outlet) @@ -335,7 +335,7 @@ def main(): poiseuille.cfg_dir = "navierstokes/poiseuille" poiseuille.cfg_file = "lam_poiseuille.cfg" poiseuille.test_iter = 10 - poiseuille.test_vals = [-5.050847, 0.648238, 0.000200, 13.639839, -2.047000] + poiseuille.test_vals = [-5.050889, 0.648196, 0.000199, 13.639173, 0.000000] poiseuille.tol = 0.001 test_list.append(poiseuille) @@ -344,8 +344,8 @@ def main(): poiseuille_profile.cfg_dir = "navierstokes/poiseuille" poiseuille_profile.cfg_file = "profile_poiseuille.cfg" poiseuille_profile.test_iter = 10 - poiseuille_profile.test_vals = [-12.483967, -7.577331, -0.000000, 2.085796] - poiseuille_profile.test_vals_aarch64 = [-12.483967, -7.577331, -0.000000, 2.085796] + poiseuille_profile.test_vals = [-12.007512, -7.227061, -0.000000, 2.089953] + poiseuille_profile.test_vals_aarch64 = [-12.492864, -7.671632, -0.000000, 2.085796] test_list.append(poiseuille_profile) ########################## @@ -357,7 +357,7 @@ def main(): rae2822_sa.cfg_dir = "rans/rae2822" rae2822_sa.cfg_file = "turb_SA_RAE2822.cfg" rae2822_sa.test_iter = 20 - rae2822_sa.test_vals = [-2.004689, -5.265782, 0.809463, 0.062016, -80576.000000] + rae2822_sa.test_vals = [-2.004689, -5.265797, 0.809463, 0.062016, 0] test_list.append(rae2822_sa) # RAE2822 SST @@ -365,7 +365,7 @@ def main(): rae2822_sst.cfg_dir = "rans/rae2822" rae2822_sst.cfg_file = "turb_SST_RAE2822.cfg" rae2822_sst.test_iter = 20 - rae2822_sst.test_vals = [-0.510369, 4.870643, 0.816647, 0.061833, -71779.000000] + rae2822_sst.test_vals = [-0.510313, 4.941942, 0.813793, 0.062425, 0.000000] test_list.append(rae2822_sst) # RAE2822 SST_SUST @@ -373,7 +373,7 @@ def main(): rae2822_sst_sust.cfg_dir = "rans/rae2822" rae2822_sst_sust.cfg_file = "turb_SST_SUST_RAE2822.cfg" rae2822_sst_sust.test_iter = 20 - rae2822_sst_sust.test_vals = [-2.537339, 4.870643, 0.816647, 0.061833] + rae2822_sst_sust.test_vals = [-2.677866, 4.941942, 0.813793, 0.062425] test_list.append(rae2822_sst_sust) # Flat plate @@ -381,7 +381,7 @@ def main(): turb_flatplate.cfg_dir = "rans/flatplate" turb_flatplate.cfg_file = "turb_SA_flatplate.cfg" turb_flatplate.test_iter = 20 - turb_flatplate.test_vals = [-4.147387, -6.728398, -0.176234, 0.057709] + turb_flatplate.test_vals = [-4.297198, -6.730442, -0.187632, 0.057700] test_list.append(turb_flatplate) # Flat plate (compressible) with species inlet @@ -389,7 +389,7 @@ def main(): turb_flatplate_species.cfg_dir = "rans/flatplate" turb_flatplate_species.cfg_file = "turb_SA_flatplate_species.cfg" turb_flatplate_species.test_iter = 20 - turb_flatplate_species.test_vals = [-4.120225, -0.634021, -1.706720, 1.363240, -3.250204, 9.000000, -6.697079, 5.000000, -6.978731, 10.000000, -6.013196, 0.996237, 0.996237] + turb_flatplate_species.test_vals = [-4.249479, -0.634915, -1.716291, 1.223196, -3.307930, 9.000000, -6.634088, 5.000000, -6.985954, 10.000000, -6.255640, 0.999903, 0.999903] test_list.append(turb_flatplate_species) # Flat plate SST compressibility correction Wilcox @@ -397,7 +397,7 @@ def main(): turb_flatplate_CC_Wilcox.cfg_dir = "rans/flatplate" turb_flatplate_CC_Wilcox.cfg_file = "turb_SST_flatplate_compressibility_Wilcox.cfg" turb_flatplate_CC_Wilcox.test_iter = 20 - turb_flatplate_CC_Wilcox.test_vals = [-1.280875, 1.974212, 1.440458, 5.038402, -4.051125, 8.521136] + turb_flatplate_CC_Wilcox.test_vals = [-1.280934, 1.974155, 1.440363, 5.038339, -3.791118, 8.297543] test_list.append(turb_flatplate_CC_Wilcox) # Flat plate SST compressibility correction Sarkar @@ -405,7 +405,7 @@ def main(): turb_flatplate_CC_Sarkar.cfg_dir = "rans/flatplate" turb_flatplate_CC_Sarkar.cfg_file = "turb_SST_flatplate_compressibility_Sarkar.cfg" turb_flatplate_CC_Sarkar.test_iter = 20 - turb_flatplate_CC_Sarkar.test_vals = [-1.280875, 1.974212, 1.440458, 5.038402, -4.051128, 8.521136] + turb_flatplate_CC_Sarkar.test_vals = [-1.280934, 1.974155, 1.440363, 5.038339, -3.791121, 8.297543] test_list.append(turb_flatplate_CC_Sarkar) # ONERA M6 Wing @@ -413,7 +413,7 @@ def main(): turb_oneram6.cfg_dir = "rans/oneram6" turb_oneram6.cfg_file = "turb_ONERAM6.cfg" turb_oneram6.test_iter = 10 - turb_oneram6.test_vals = [-2.392865, -6.689822, 0.230746, 0.158811, -33786.000000] + turb_oneram6.test_vals = [-2.408685, -6.662907, 0.238579, 0.158968, 0.000000] turb_oneram6.timeout = 3200 test_list.append(turb_oneram6) @@ -422,7 +422,7 @@ def main(): turb_oneram6_vc.cfg_dir = "rans/oneram6" turb_oneram6_vc.cfg_file = "turb_ONERAM6_vc.cfg" turb_oneram6_vc.test_iter = 15 - turb_oneram6_vc.test_vals = [-2.266212, -6.628059, 0.228692, 0.142105, -28396.000000] + turb_oneram6_vc.test_vals = [-2.282318, -6.614780, 0.234330, 0.143024, 0.000000] turb_oneram6_vc.timeout = 3200 test_list.append(turb_oneram6_vc) @@ -431,7 +431,7 @@ def main(): turb_oneram6_nk.cfg_dir = "rans/oneram6" turb_oneram6_nk.cfg_file = "turb_ONERAM6_nk.cfg" turb_oneram6_nk.test_iter = 20 - turb_oneram6_nk.test_vals = [-4.803402, -4.393783, -11.445194, 0.218505, 0.048793, 4.000000, -0.607076, 25.924000] + turb_oneram6_nk.test_vals = [-4.828066, -4.426250, -11.417591, 0.224679, 0.044309, 1.000000, -0.642977, 31.384000] turb_oneram6_nk.timeout = 600 turb_oneram6_nk.tol = 0.0001 test_list.append(turb_oneram6_nk) @@ -441,7 +441,7 @@ def main(): turb_naca0012_sa.cfg_dir = "rans/naca0012" turb_naca0012_sa.cfg_file = "turb_NACA0012_sa.cfg" turb_naca0012_sa.test_iter = 5 - turb_naca0012_sa.test_vals = [-10.453509, -13.866376, 1.057622, 0.022916, 20.000000, -1.867547, 20.000000, -3.632893, -44.540000] + turb_naca0012_sa.test_vals = [-12.094695, -14.685268, 1.057665, 0.022971, 20.000000, -1.692967, 20.000000, -4.037673, 0] turb_naca0012_sa.timeout = 3200 test_list.append(turb_naca0012_sa) @@ -450,8 +450,8 @@ def main(): turb_naca0012_sst.cfg_dir = "rans/naca0012" turb_naca0012_sst.cfg_file = "turb_NACA0012_sst.cfg" turb_naca0012_sst.test_iter = 10 - turb_naca0012_sst.test_vals = [-12.219694, -14.440925, -7.107551, 1.050109, 0.019148, -1.601287, -38.510000] - turb_naca0012_sst.test_vals_aarch64 = [-12.219735, -14.440925, -7.107550, 1.050109, 0.019148, -1.601262, -38.510000] + turb_naca0012_sst.test_vals = [-12.232530, -14.435294, -6.037147, 1.047444, 0.019214, -1.704457, 0.000000] + turb_naca0012_sst.test_vals_aarch64 = [-12.232530, -14.435294, -6.037147, 1.047444, 0.019214, -1.704457, 0.000000] turb_naca0012_sst.timeout = 3200 test_list.append(turb_naca0012_sst) @@ -460,8 +460,8 @@ def main(): turb_naca0012_sst_sust.cfg_dir = "rans/naca0012" turb_naca0012_sst_sust.cfg_file = "turb_NACA0012_sst_sust.cfg" turb_naca0012_sst_sust.test_iter = 10 - turb_naca0012_sst_sust.test_vals = [-12.148637, -14.756583, -6.342201, 1.001189, 0.019384, -1.579100] - turb_naca0012_sst_sust.test_vals_aarch64 = [-12.148716, -14.756582, -6.342200, 1.001189, 0.019384, -1.579104] + turb_naca0012_sst_sust.test_vals = [-12.146171, -14.781592, -6.358755, 1.000270, 0.019123, -1.593320] + turb_naca0012_sst_sust.test_vals_aarch64 = [-12.146171, -14.781592, -6.358755, 1.000270, 0.019123, -1.593320] turb_naca0012_sst_sust.timeout = 3200 test_list.append(turb_naca0012_sst_sust) @@ -470,7 +470,7 @@ def main(): turb_naca0012_sst_2003_Vm.cfg_dir = "rans/naca0012" turb_naca0012_sst_2003_Vm.cfg_file = "turb_NACA0012_sst_2003-Vm.cfg" turb_naca0012_sst_2003_Vm.test_iter = 10 - turb_naca0012_sst_2003_Vm.test_vals = [-7.664806, -10.014760, -3.358584, 1.048643, 0.019718, -2.067883] + turb_naca0012_sst_2003_Vm.test_vals = [-8.263591, -10.306174, -3.626544, 1.045289, 0.019325, -1.551890] turb_naca0012_sst_2003_Vm.timeout = 3200 test_list.append(turb_naca0012_sst_2003_Vm) @@ -479,7 +479,7 @@ def main(): turb_naca0012_sst_1994_KLm.cfg_dir = "rans/naca0012" turb_naca0012_sst_1994_KLm.cfg_file = "turb_NACA0012_sst_1994-KLm.cfg" turb_naca0012_sst_1994_KLm.test_iter = 10 - turb_naca0012_sst_1994_KLm.test_vals = [-8.570837, -10.805211, -3.997146, 1.049397, 0.019183, -1.805750] + turb_naca0012_sst_1994_KLm.test_vals = [-8.563675, -10.803009, -4.036981, 1.046738, 0.019251, -1.806475] turb_naca0012_sst_1994_KLm.timeout = 3200 test_list.append(turb_naca0012_sst_1994_KLm) @@ -489,7 +489,7 @@ def main(): turb_naca0012_sst_fixedvalues.cfg_dir = "rans/naca0012" turb_naca0012_sst_fixedvalues.cfg_file = "turb_NACA0012_sst_fixedvalues.cfg" turb_naca0012_sst_fixedvalues.test_iter = 10 - turb_naca0012_sst_fixedvalues.test_vals = [-5.216737, -10.025507, -1.615166, 1.021891, 0.040213, -3.731060] + turb_naca0012_sst_fixedvalues.test_vals = [-5.216568, -10.236279, -1.556755, 1.022392, 0.040547, -3.738510] turb_naca0012_sst_fixedvalues.timeout = 3200 test_list.append(turb_naca0012_sst_fixedvalues) @@ -498,7 +498,7 @@ def main(): turb_naca0012_sst_expliciteuler.cfg_dir = "rans/naca0012" turb_naca0012_sst_expliciteuler.cfg_file = "turb_NACA0012_sst_expliciteuler.cfg" turb_naca0012_sst_expliciteuler.test_iter = 10 - turb_naca0012_sst_expliciteuler.test_vals = [-3.532289, -3.157766, 3.364024, 1.122901, 0.500798, -float("inf")] + turb_naca0012_sst_expliciteuler.test_vals = [-3.533765, -3.157766, 3.364026, 1.124757, 0.501700, -float("inf")] turb_naca0012_sst_expliciteuler.timeout = 3200 test_list.append(turb_naca0012_sst_expliciteuler) @@ -507,7 +507,7 @@ def main(): propeller.cfg_dir = "rans/propeller" propeller.cfg_file = "propeller.cfg" propeller.test_iter = 10 - propeller.test_vals = [-3.389575, -8.409251, 0.000048, 0.056329] + propeller.test_vals = [-3.389724, -8.409502, 0.000048, 0.056344] propeller.timeout = 3200 test_list.append(propeller) @@ -516,7 +516,7 @@ def main(): actuatordisk_bem.cfg_dir = "rans/actuatordisk_bem" actuatordisk_bem.cfg_file = "actuatordisk_bem.cfg" actuatordisk_bem.test_iter = 15 - actuatordisk_bem.test_vals = [-5.282249, -10.335140, 0.001383, -0.375718] + actuatordisk_bem.test_vals = [-5.388943, -10.318617, 0.001362, -0.376520] actuatordisk_bem.timeout = 3200 actuatordisk_bem.tol = 0.001 test_list.append(actuatordisk_bem) @@ -530,7 +530,7 @@ def main(): axi_rans_air_nozzle_restart.cfg_dir = "axisymmetric_rans/air_nozzle" axi_rans_air_nozzle_restart.cfg_file = "air_nozzle_restart.cfg" axi_rans_air_nozzle_restart.test_iter = 10 - axi_rans_air_nozzle_restart.test_vals = [-12.150822, -6.604726, -9.187292, -4.518261, -2019.700000] + axi_rans_air_nozzle_restart.test_vals = [-12.067375, -6.838713, -8.845034, -3.786225, 0.000000] axi_rans_air_nozzle_restart.tol = 0.0001 test_list.append(axi_rans_air_nozzle_restart) @@ -544,7 +544,7 @@ def main(): turb_naca0012_sst_restart_mg.cfg_file = "turb_NACA0012_sst_multigrid_restart.cfg" turb_naca0012_sst_restart_mg.test_iter = 20 turb_naca0012_sst_restart_mg.ntest_vals = 5 - turb_naca0012_sst_restart_mg.test_vals = [-7.612353, -7.432347, -1.918249, -0.000013, 0.079110] + turb_naca0012_sst_restart_mg.test_vals = [-7.600526, -7.181924, -0.627078, -0.000016, 0.078729] turb_naca0012_sst_restart_mg.timeout = 3200 turb_naca0012_sst_restart_mg.tol = 0.000001 test_list.append(turb_naca0012_sst_restart_mg) @@ -558,7 +558,7 @@ def main(): inc_euler_naca0012.cfg_dir = "incomp_euler/naca0012" inc_euler_naca0012.cfg_file = "incomp_NACA0012.cfg" inc_euler_naca0012.test_iter = 20 - inc_euler_naca0012.test_vals = [-7.141428, -6.403478, 0.531992, 0.008466] + inc_euler_naca0012.test_vals = [-7.154146, -6.507095, 0.532001, 0.008466] test_list.append(inc_euler_naca0012) # C-D nozzle with pressure inlet and mass flow outlet @@ -566,9 +566,17 @@ def main(): inc_nozzle.cfg_dir = "incomp_euler/nozzle" inc_nozzle.cfg_file = "inv_nozzle.cfg" inc_nozzle.test_iter = 20 - inc_nozzle.test_vals = [-6.308730, -5.512525, -0.004405, 0.126629] + inc_nozzle.test_vals = [-6.576818, -5.796867, -0.003141, 0.126481] test_list.append(inc_nozzle) + # Laminar wall mounted cylinder, Euler walls, cylinder wall diagonally split + inc_cylinder_split = TestCase('inc_cylinder_split') + inc_cylinder_split.cfg_dir = "incomp_navierstokes/cylinder_split" + inc_cylinder_split.cfg_file = "cylinder_split.cfg" + inc_cylinder_split.test_iter = 10 + inc_cylinder_split.test_vals = [-10.207060, -11.197502, -11.296847, 10.000000] + test_list.append(inc_cylinder_split) + ############################# ### Incompressible N-S ### ############################# @@ -586,7 +594,7 @@ def main(): inc_lam_sphere.cfg_dir = "incomp_navierstokes/sphere" inc_lam_sphere.cfg_file = "sphere.cfg" inc_lam_sphere.test_iter = 5 - inc_lam_sphere.test_vals = [-8.342926, -8.032107, 0.121003, 25.782687] + inc_lam_sphere.test_vals = [-8.342048, -9.328063, 0.121003, 25.782687] test_list.append(inc_lam_sphere) # Buoyancy-driven cavity @@ -602,15 +610,15 @@ def main(): inc_poly_cylinder.cfg_dir = "incomp_navierstokes/cylinder" inc_poly_cylinder.cfg_file = "poly_cylinder.cfg" inc_poly_cylinder.test_iter = 20 - inc_poly_cylinder.test_vals = [-7.791831, -2.062292, 0.013040, 1.913997, -171.120000] + inc_poly_cylinder.test_vals = [-7.786564, -2.036735, 0.012980, 1.944887, -170.930000] test_list.append(inc_poly_cylinder) # X-coarse laminar bend as a mixed element CGNS test - inc_lam_bend = TestCase('inc_lam_bend') - inc_lam_bend.cfg_dir = "incomp_navierstokes/bend" - inc_lam_bend.cfg_file = "lam_bend.cfg" + inc_lam_bend = TestCase('inc_lam_bend') + inc_lam_bend.cfg_dir = "incomp_navierstokes/bend" + inc_lam_bend.cfg_file = "lam_bend.cfg" inc_lam_bend.test_iter = 10 - inc_lam_bend.test_vals = [-3.550744, -3.220213, -0.017606, 1.015086] + inc_lam_bend.test_vals = [-3.588863, -3.101606, -0.022302, 1.062971] test_list.append(inc_lam_bend) # 3D laminar channnel with 1 cell in flow direction, streamwise periodic @@ -618,7 +626,7 @@ def main(): sp_pipeSlice_3d_dp_hf_tp.cfg_dir = "incomp_navierstokes/streamwise_periodic/pipeSlice_3d" sp_pipeSlice_3d_dp_hf_tp.cfg_file = "sp_pipeSlice_3d_dp_hf_tp.cfg" sp_pipeSlice_3d_dp_hf_tp.test_iter = 10 - sp_pipeSlice_3d_dp_hf_tp.test_vals = [-11.119796, -11.234737, -8.694310, -0.000023] + sp_pipeSlice_3d_dp_hf_tp.test_vals = [-11.119796, -11.234737, -9.429479, -0.000023] test_list.append(sp_pipeSlice_3d_dp_hf_tp) # 2D pin array with heat transfer BC on pin surfaces @@ -626,7 +634,7 @@ def main(): inc_heatTransfer_BC.cfg_dir = "incomp_navierstokes/streamwise_periodic/chtPinArray_2d" inc_heatTransfer_BC.cfg_file = "BC_HeatTransfer.cfg" inc_heatTransfer_BC.test_iter = 50 - inc_heatTransfer_BC.test_vals = [-8.201114, -7.405807, -7.555676, -0.113666, -1671.700000] + inc_heatTransfer_BC.test_vals = [-8.747445, -7.653823, -8.079512, -0.654920, -1670.100000] test_list.append(inc_heatTransfer_BC) ############################ @@ -638,7 +646,7 @@ def main(): inc_turb_naca0012.cfg_dir = "incomp_rans/naca0012" inc_turb_naca0012.cfg_file = "naca0012.cfg" inc_turb_naca0012.test_iter = 20 - inc_turb_naca0012.test_vals = [-4.788596, -11.039529, -0.000002, 0.309504] + inc_turb_naca0012.test_vals = [-4.788595, -11.040625, -0.000002, 0.309519] test_list.append(inc_turb_naca0012) # NACA0012, SST_SUST @@ -646,7 +654,7 @@ def main(): inc_turb_naca0012_sst_sust.cfg_dir = "incomp_rans/naca0012" inc_turb_naca0012_sst_sust.cfg_file = "naca0012_SST_SUST.cfg" inc_turb_naca0012_sst_sust.test_iter = 20 - inc_turb_naca0012_sst_sust.test_vals = [-7.270578, 0.018403, -0.000001, 0.307688] + inc_turb_naca0012_sst_sust.test_vals = [-7.291511, 0.132644, -0.000001, 0.312109] test_list.append(inc_turb_naca0012_sst_sust) #################### @@ -724,7 +732,7 @@ def main(): turbmod_sa_bsl_rae2822.cfg_dir = "turbulence_models/sa/rae2822" turbmod_sa_bsl_rae2822.cfg_file = "turb_SA_BSL_RAE2822.cfg" turbmod_sa_bsl_rae2822.test_iter = 20 - turbmod_sa_bsl_rae2822.test_vals = [-2.004689, 0.742306, 0.497308, -5.265782, 0.809463, 0.062016] + turbmod_sa_bsl_rae2822.test_vals = [-2.004689, 0.742306, 0.497308, -5.265797, 0.809463, 0.062016] test_list.append(turbmod_sa_bsl_rae2822) # SA Negative @@ -732,8 +740,8 @@ def main(): turbmod_sa_neg_rae2822.cfg_dir = "turbulence_models/sa/rae2822" turbmod_sa_neg_rae2822.cfg_file = "turb_SA_NEG_RAE2822.cfg" turbmod_sa_neg_rae2822.test_iter = 10 - turbmod_sa_neg_rae2822.test_vals = [-1.466238, 3.169232, 2.756518, 4.722767, 1.120253, 0.378675, -83444.000000] - turbmod_sa_neg_rae2822.test_vals_aarch64 = [-1.359612, 1.493629, 1.218367, -1.441703, 1.248499, 0.457987, -86467.000000] + turbmod_sa_neg_rae2822.test_vals = [-1.204800, 1.611685, 1.349330, 1.489602, 1.263603, 0.466487, 0] + turbmod_sa_neg_rae2822.test_vals_aarch64 = [-1.359612, 1.493629, 1.218367, -1.441703, 1.248499, 0.457987, 0] test_list.append(turbmod_sa_neg_rae2822) # SA Compressibility Correction @@ -741,7 +749,7 @@ def main(): turbmod_sa_comp_rae2822.cfg_dir = "turbulence_models/sa/rae2822" turbmod_sa_comp_rae2822.cfg_file = "turb_SA_COMP_RAE2822.cfg" turbmod_sa_comp_rae2822.test_iter = 20 - turbmod_sa_comp_rae2822.test_vals = [-2.004687, 0.742304, 0.497309, -5.266067, 0.809467, 0.062029] + turbmod_sa_comp_rae2822.test_vals = [-2.004687, 0.742304, 0.497309, -5.266084, 0.809467, 0.062029] test_list.append(turbmod_sa_comp_rae2822) # SA Edwards @@ -765,7 +773,7 @@ def main(): turbmod_sa_qcr_rae2822.cfg_dir = "turbulence_models/sa/rae2822" turbmod_sa_qcr_rae2822.cfg_file = "turb_SA_QCR_RAE2822.cfg" turbmod_sa_qcr_rae2822.test_iter = 20 - turbmod_sa_qcr_rae2822.test_vals = [-2.004793, 0.742353, 0.497315, -5.265962, 0.807841, 0.062027] + turbmod_sa_qcr_rae2822.test_vals = [-2.004793, 0.742353, 0.497315, -5.265977, 0.807841, 0.062027] test_list.append(turbmod_sa_qcr_rae2822) ############################ @@ -777,7 +785,7 @@ def main(): schubauer_klebanoff_transition.cfg_dir = "transition/Schubauer_Klebanoff" schubauer_klebanoff_transition.cfg_file = "transitional_BC_model_ConfigFile.cfg" schubauer_klebanoff_transition.test_iter = 10 - schubauer_klebanoff_transition.test_vals = [-8.058933, -13.242001, 0.000048, 0.007993] + schubauer_klebanoff_transition.test_vals = [-8.215651, -13.240283, 0.000048, 0.007983] test_list.append(schubauer_klebanoff_transition) ##################################### @@ -813,7 +821,7 @@ def main(): contadj_fixed_CL_naca0012.cfg_dir = "fixed_cl/naca0012" contadj_fixed_CL_naca0012.cfg_file = "inv_NACA0012_ContAdj.cfg" contadj_fixed_CL_naca0012.test_iter = 100 - contadj_fixed_CL_naca0012.test_vals = [0.748438, -4.810920, -0.520110, -0.000292] + contadj_fixed_CL_naca0012.test_vals = [0.748407, -4.810872, -0.520110, -0.000291] test_list.append(contadj_fixed_CL_naca0012) ################################### @@ -881,8 +889,7 @@ def main(): turb_naca0012_1c.cfg_dir = "rans_uq/naca0012" turb_naca0012_1c.cfg_file = "turb_NACA0012_uq_1c.cfg" turb_naca0012_1c.test_iter = 10 - turb_naca0012_1c.test_vals = [-4.976284, 1.141136, 0.463115, -0.083307] - turb_naca0012_1c.test_vals_aarch64 = [-4.983453, 1.138491, 0.459947, -0.084114] + turb_naca0012_1c.test_vals = [-4.981445, 1.140044, 0.466241, -0.076886] test_list.append(turb_naca0012_1c) # NACA0012 2c @@ -890,8 +897,7 @@ def main(): turb_naca0012_2c.cfg_dir = "rans_uq/naca0012" turb_naca0012_2c.cfg_file = "turb_NACA0012_uq_2c.cfg" turb_naca0012_2c.test_iter = 10 - turb_naca0012_2c.test_vals = [-5.483317, 0.968654, 0.307611, -0.118062] - turb_naca0012_2c.test_vals_aarch64 = [-5.483338, 0.968646, 0.308055, -0.117915] + turb_naca0012_2c.test_vals = [-5.485045, 0.968951, 0.317727, -0.109873] test_list.append(turb_naca0012_2c) # NACA0012 3c @@ -899,7 +905,7 @@ def main(): turb_naca0012_3c.cfg_dir = "rans_uq/naca0012" turb_naca0012_3c.cfg_file = "turb_NACA0012_uq_3c.cfg" turb_naca0012_3c.test_iter = 10 - turb_naca0012_3c.test_vals = [-5.584309, 0.931259, 0.281831, -0.117821] + turb_naca0012_3c.test_vals = [-5.584375, 0.931875, 0.274184, -0.113514] test_list.append(turb_naca0012_3c) # NACA0012 p1c1 @@ -907,8 +913,7 @@ def main(): turb_naca0012_p1c1.cfg_dir = "rans_uq/naca0012" turb_naca0012_p1c1.cfg_file = "turb_NACA0012_uq_p1c1.cfg" turb_naca0012_p1c1.test_iter = 10 - turb_naca0012_p1c1.test_vals = [-5.128887, 1.076846, 0.589839, -0.051939] - turb_naca0012_p1c1.test_vals_aarch64 = [-5.128883, 1.076873, 0.590376, -0.051754] + turb_naca0012_p1c1.test_vals = [-5.122421, 1.074501, 0.412268, -0.091538] test_list.append(turb_naca0012_p1c1) # NACA0012 p1c2 @@ -916,8 +921,7 @@ def main(): turb_naca0012_p1c2.cfg_dir = "rans_uq/naca0012" turb_naca0012_p1c2.cfg_file = "turb_NACA0012_uq_p1c2.cfg" turb_naca0012_p1c2.test_iter = 10 - turb_naca0012_p1c2.test_vals = [-5.554633, 0.943626, 0.402263, -0.100275] - turb_naca0012_p1c2.test_vals_aarch64 = [-5.554636, 0.943621, 0.401650, -0.100495] + turb_naca0012_p1c2.test_vals = [-5.549646, 0.946077, 0.284451, -0.112299] test_list.append(turb_naca0012_p1c2) ###################################### @@ -929,7 +933,7 @@ def main(): harmonic_balance.cfg_dir = "harmonic_balance" harmonic_balance.cfg_file = "HB.cfg" harmonic_balance.test_iter = 25 - harmonic_balance.test_vals = [-1.554985, 0.831796, 0.935729, 3.960210] + harmonic_balance.test_vals = [-1.559187, 0.829575, 0.931512, 3.954440] test_list.append(harmonic_balance) # Turbulent pitching NACA 64a010 airfoil @@ -938,7 +942,7 @@ def main(): hb_rans_preconditioning.cfg_file = "davis.cfg" hb_rans_preconditioning.test_iter = 25 hb_rans_preconditioning.tol = 0.00001 - hb_rans_preconditioning.test_vals = [-1.902098, 0.484070, 0.601481, 3.609002, -5.949360] + hb_rans_preconditioning.test_vals = [-1.902098, 0.484070, 0.601481, 3.609002, -5.949356] test_list.append(hb_rans_preconditioning) ###################################### @@ -950,7 +954,7 @@ def main(): rot_naca0012.cfg_dir = "rotating/naca0012" rot_naca0012.cfg_file = "rot_NACA0012.cfg" rot_naca0012.test_iter = 25 - rot_naca0012.test_vals = [-2.709459, 2.836670, -0.081188, 0.002156] + rot_naca0012.test_vals = [-2.603551, 2.924633, -0.081272, 0.002162] test_list.append(rot_naca0012) # Lid-driven cavity @@ -958,7 +962,7 @@ def main(): cavity.cfg_dir = "moving_wall/cavity" cavity.cfg_file = "lam_cavity.cfg" cavity.test_iter = 25 - cavity.test_vals = [-5.610928, -0.146749, 1.114461, 1.490381] + cavity.test_vals = [-5.610923, -0.146741, 1.115860, 1.490430] test_list.append(cavity) # Spinning cylinder @@ -966,7 +970,7 @@ def main(): spinning_cylinder.cfg_dir = "moving_wall/spinning_cylinder" spinning_cylinder.cfg_file = "spinning_cylinder.cfg" spinning_cylinder.test_iter = 25 - spinning_cylinder.test_vals = [-7.806016, -2.364954, 1.683365, 1.517059] + spinning_cylinder.test_vals = [-7.806056, -2.364884, 1.685228, 1.518276] test_list.append(spinning_cylinder) ###################################### @@ -978,7 +982,7 @@ def main(): square_cylinder.cfg_dir = "unsteady/square_cylinder" square_cylinder.cfg_file = "turb_square.cfg" square_cylinder.test_iter = 3 - square_cylinder.test_vals = [-1.173603, 0.058045, 1.399795, 2.220404, 1.399749, 2.218605, -0.453330] + square_cylinder.test_vals = [-1.175927, 0.062080, 1.399402, 2.220364, 1.399350, 2.218602, 0.000000] square_cylinder.unsteady = True test_list.append(square_cylinder) @@ -987,7 +991,7 @@ def main(): sine_gust.cfg_dir = "gust" sine_gust.cfg_file = "inv_gust_NACA0012.cfg" sine_gust.test_iter = 5 - sine_gust.test_vals = [-1.977514, 3.481817, -0.010609, -0.007956] + sine_gust.test_vals = [-1.977498, 3.481817, -0.010773, -0.008068] sine_gust.unsteady = True test_list.append(sine_gust) @@ -996,7 +1000,7 @@ def main(): aeroelastic.cfg_dir = "aeroelastic" aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" aeroelastic.test_iter = 2 - aeroelastic.test_vals = [0.075176, 0.027496, -0.001643, -0.000126] + aeroelastic.test_vals = [0.075023, 0.027483, -0.001643, -0.000126] aeroelastic.unsteady = True test_list.append(aeroelastic) @@ -1005,7 +1009,7 @@ def main(): ddes_flatplate.cfg_dir = "ddes/flatplate" ddes_flatplate.cfg_file = "ddes_flatplate.cfg" ddes_flatplate.test_iter = 10 - ddes_flatplate.test_vals = [-2.714785, -5.882679, -0.215041, 0.023758, -617.450000] + ddes_flatplate.test_vals = [-2.714713, -5.788290, -0.214960, 0.023758, 0.000000] ddes_flatplate.unsteady = True test_list.append(ddes_flatplate) @@ -1014,7 +1018,7 @@ def main(): unst_inc_turb_naca0015_sa.cfg_dir = "unsteady/pitching_naca0015_rans_inc" unst_inc_turb_naca0015_sa.cfg_file = "config_incomp_turb_sa.cfg" unst_inc_turb_naca0015_sa.test_iter = 1 - unst_inc_turb_naca0015_sa.test_vals = [-3.004012, -6.876220, 1.487882, 0.421861] + unst_inc_turb_naca0015_sa.test_vals = [-3.004011, -6.876250, 1.487888, 0.421869] unst_inc_turb_naca0015_sa.unsteady = True test_list.append(unst_inc_turb_naca0015_sa) @@ -1023,7 +1027,7 @@ def main(): flatplate_unsteady.cfg_dir = "navierstokes/flatplate" flatplate_unsteady.cfg_file = "lam_flatplate_unst.cfg" flatplate_unsteady.test_iter = 3 - flatplate_unsteady.test_vals = [0.000008, -8.876477, -8.249920, -6.294138, -5.468911, -3.398657, 0.002075, -0.324341] + flatplate_unsteady.test_vals = [-8.875128, -8.250204, -6.305788, -5.469452, -3.398230, 0.002075, -0.325535] flatplate_unsteady.unsteady = True test_list.append(flatplate_unsteady) @@ -1036,7 +1040,7 @@ def main(): edge_VW.cfg_dir = "nicf/edge" edge_VW.cfg_file = "edge_VW.cfg" edge_VW.test_iter = 50 - edge_VW.test_vals = [-8.107432, -1.914195, -0.000009, 0.000000] + edge_VW.test_vals = [-9.057409, -2.833203, -0.000009, 0.000000] test_list.append(edge_VW) # Rarefaction shock wave edge_PPR @@ -1044,7 +1048,7 @@ def main(): edge_PPR.cfg_dir = "nicf/edge" edge_PPR.cfg_file = "edge_PPR.cfg" edge_PPR.test_iter = 50 - edge_PPR.test_vals = [-8.611983, -2.441992, -0.000034, 0.000000] + edge_PPR.test_vals = [-9.781896, -3.630892, -0.000034, 0.000000] test_list.append(edge_PPR) # Rarefaction Q1D nozzle, include CoolProp fluid model @@ -1052,7 +1056,7 @@ def main(): coolprop_fluidModel.cfg_dir = "nicf/coolprop" coolprop_fluidModel.cfg_file = "fluidModel.cfg" coolprop_fluidModel.test_iter = 5 - coolprop_fluidModel.test_vals = [-4.424953, -1.582877, 3.442422, 0.000000, 0.000000] + coolprop_fluidModel.test_vals = [-4.684483, -1.583073, 3.724768, 0.000000, 0.000000] coolprop_fluidModel.enabled_on_cpu_arch = ["x86_64"] test_list.append(coolprop_fluidModel) @@ -1061,7 +1065,7 @@ def main(): coolprop_transportModel.cfg_dir = "nicf/coolprop" coolprop_transportModel.cfg_file = "transportModel.cfg" coolprop_transportModel.test_iter = 5 - coolprop_transportModel.test_vals = [-4.428098, -1.314332, 4.630872, 0.000000, 0.000000] + coolprop_transportModel.test_vals = [-4.684988, -1.314608, 4.668105, 0.000000, 0.000000] coolprop_transportModel.enabled_on_cpu_arch = ["x86_64"] test_list.append(coolprop_transportModel) @@ -1070,7 +1074,7 @@ def main(): datadriven_fluidModel.cfg_dir = "nicf/datadriven" datadriven_fluidModel.cfg_file = "datadriven_nozzle.cfg" datadriven_fluidModel.test_iter = 50 - datadriven_fluidModel.test_vals = [-2.632817, 0.155922, 4.690917, 0.000000, 0.000000] + datadriven_fluidModel.test_vals = [-6.338898, -3.837472, -4.351292, -1.860262, -2.700991, 0.691801] test_list.append(datadriven_fluidModel) ###################################### @@ -1082,8 +1086,7 @@ def main(): Aachen_3D_restart.cfg_dir = "turbomachinery/Aachen_turbine" Aachen_3D_restart.cfg_file = "aachen_3D_MP_restart.cfg" Aachen_3D_restart.test_iter = 5 - Aachen_3D_restart.enabled_with_asan = False - Aachen_3D_restart.test_vals = [-9.829186, -8.875103, -9.609509, -8.075211, -7.759491, -4.360714] + Aachen_3D_restart.test_vals = [-7.701448, -8.512241, -6.014939, -6.468738, -5.801759, -4.607179, -5.551037, -5.300771, -3.804188, -5.256055, -5.765160, -3.609605, -2.229276, -2.883962, -0.563469] test_list.append(Aachen_3D_restart) # Jones APU Turbocharger restart @@ -1091,7 +1094,7 @@ def main(): Jones_tc_restart.cfg_dir = "turbomachinery/APU_turbocharger" Jones_tc_restart.cfg_file = "Jones_restart.cfg" Jones_tc_restart.test_iter = 5 - Jones_tc_restart.test_vals = [-10.467612, -2.871708, -19.345651, -13.625871, -11.582397, -6.306168, 73273, 73273, 0.019884, 82.491] + Jones_tc_restart.test_vals = [-7.308012, -5.332077, -14.895814, -9.330692, -12.071730, -6.548620, 73291.000000, 73291.000000, 0.020111, 82.896000] test_list.append(Jones_tc_restart) # 2D axial stage @@ -1099,8 +1102,7 @@ def main(): axial_stage2D.cfg_dir = "turbomachinery/axial_stage_2D" axial_stage2D.cfg_file = "Axial_stage2D.cfg" axial_stage2D.test_iter = 20 - axial_stage2D.test_vals = [0.983754, 1.534455, -2.888523, 2.606770, -2.418403, 3.087203, 106380, 106380, 5.7325, 64.711] - axial_stage2D.test_vals_aarch64 = [0.983754, 1.534455, -2.888523, 2.606770, -2.418403, 3.087203, 106380, 106380, 5.7325, 64.711] + axial_stage2D.test_vals = [1.090054, 1.550990, -2.895064, 2.607596, -2.479704, 3.063740, 106380.000000, 106380.000000, 5.733600, 64.747000] test_list.append(axial_stage2D) # 2D transonic stator restart @@ -1108,7 +1110,7 @@ def main(): transonic_stator_restart.cfg_dir = "turbomachinery/transonic_stator_2D" transonic_stator_restart.cfg_file = "transonic_stator_restart.cfg" transonic_stator_restart.test_iter = 20 - transonic_stator_restart.test_vals = [-5.011834, -3.091110, -2.757795, 1.087934, -3.544707, 2.166101, -471630, 94.868, -0.035888] + transonic_stator_restart.test_vals = [-4.354756, -2.473198, -2.076102, 1.740556, -1.441690, 3.246152, -471620.000000, 94.839000, -0.050276] transonic_stator_restart.test_vals_aarch64 = [-5.011834, -3.091110, -2.757795, 1.087934, -3.544707, 2.166101, -471630, 94.868, -0.035888] test_list.append(transonic_stator_restart) @@ -1130,7 +1132,7 @@ def main(): uniform_flow.cfg_dir = "sliding_interface/uniform_flow" uniform_flow.cfg_file = "uniform_NN.cfg" uniform_flow.test_iter = 5 - uniform_flow.test_vals = [5.000000, 0.000000, -0.185381, -10.631539] + uniform_flow.test_vals = [5.000000, 0.000000, -0.195002, -10.624448] uniform_flow.unsteady = True uniform_flow.multizone = True test_list.append(uniform_flow) @@ -1140,8 +1142,7 @@ def main(): channel_2D.cfg_dir = "sliding_interface/channel_2D" channel_2D.cfg_file = "channel_2D_WA.cfg" channel_2D.test_iter = 2 - channel_2D.test_vals = [2.000000, 0.000000, 0.419792, 0.352177, 0.404446] - channel_2D.test_vals_aarch64 = [2.000000, 0.000000, 0.398036, 0.352783, 0.405462] + channel_2D.test_vals = [2.000000, 0.000000, 0.464931, 0.348057, 0.397535] channel_2D.timeout = 100 channel_2D.unsteady = True channel_2D.multizone = True @@ -1152,8 +1153,7 @@ def main(): channel_3D.cfg_dir = "sliding_interface/channel_3D" channel_3D.cfg_file = "channel_3D_WA.cfg" channel_3D.test_iter = 2 - channel_3D.test_vals = [2.000000, 0.000000, 0.623113, 0.505078, 0.412774] - channel_3D.test_vals_aarch64 = [2.000000, 0.000000, 0.620182, 0.505302, 0.415257] + channel_3D.test_vals = [2.000000, 0.000000, 0.629113, 0.524906, 0.422425] channel_3D.unsteady = True channel_3D.multizone = True test_list.append(channel_3D) @@ -1163,7 +1163,7 @@ def main(): pipe.cfg_dir = "sliding_interface/pipe" pipe.cfg_file = "pipe_NN.cfg" pipe.test_iter = 2 - pipe.test_vals = [0.116649, 0.481389, 0.648696, 0.982990, 1.018349] + pipe.test_vals = [0.080827, 0.547324, 0.655095, 0.968235, 1.049121] pipe.unsteady = True pipe.multizone = True test_list.append(pipe) @@ -1173,7 +1173,7 @@ def main(): rotating_cylinders.cfg_dir = "sliding_interface/rotating_cylinders" rotating_cylinders.cfg_file = "rot_cylinders_WA.cfg" rotating_cylinders.test_iter = 3 - rotating_cylinders.test_vals = [3.000000, 0.000000, 0.719777, 1.111044, 1.154071] + rotating_cylinders.test_vals = [3.000000, 0.000000, 0.717065, 1.119815, 1.160330] rotating_cylinders.unsteady = True rotating_cylinders.multizone = True test_list.append(rotating_cylinders) @@ -1183,7 +1183,7 @@ def main(): supersonic_vortex_shedding.cfg_dir = "sliding_interface/supersonic_vortex_shedding" supersonic_vortex_shedding.cfg_file = "sup_vor_shed_WA.cfg" supersonic_vortex_shedding.test_iter = 5 - supersonic_vortex_shedding.test_vals = [5.000000, 0.000000, 1.207949, 1.036090] + supersonic_vortex_shedding.test_vals = [5.000000, 0.000000, 1.207118, 1.065260] supersonic_vortex_shedding.unsteady = True supersonic_vortex_shedding.multizone = True test_list.append(supersonic_vortex_shedding) @@ -1193,7 +1193,7 @@ def main(): bars_SST_2D.cfg_dir = "sliding_interface/bars_SST_2D" bars_SST_2D.cfg_file = "bars.cfg" bars_SST_2D.test_iter = 13 - bars_SST_2D.test_vals = [13.000000, -0.773513, -1.700012] + bars_SST_2D.test_vals = [13.000000, 1.167840, -1.660900] bars_SST_2D.multizone = True test_list.append(bars_SST_2D) @@ -1228,11 +1228,31 @@ def main(): statbeam3d.cfg_dir = "fea_fsi/StatBeam_3d" statbeam3d.cfg_file = "configBeam_3d.cfg" statbeam3d.test_iter = 0 - statbeam3d.test_vals = [-8.396797, -8.162206, -8.156102, 64095.000000] - statbeam3d.test_vals_aarch64 = [-8.396793, -8.162255, -8.156118, 64095.0] #last 4 columns + statbeam3d.test_vals = [-6.058758, -5.750933, -5.892188, 110190] + statbeam3d.test_vals_aarch64 = [-6.058758, -5.750933, -5.892188, 110190] statbeam3d.command = TestCase.Command(exec = "parallel_computation_fsi.py", param = "-f") test_list.append(statbeam3d) + # Static beam, 3d with coupled temperature + thermal_beam_3d = TestCase('thermal_beam_3d') + thermal_beam_3d.cfg_dir = "fea_fsi/ThermalBeam_3d" + thermal_beam_3d.cfg_file = "configBeam_3d.cfg" + thermal_beam_3d.test_iter = 0 + thermal_beam_3d.test_vals = [-6.140220, -5.842734, -5.972391, -8.091358, 262, -8.246755, 81, -8.298569, 135620, 144.65] + thermal_beam_3d.command = TestCase.Command(exec = "parallel_computation_fsi.py", param = "-f") + test_list.append(thermal_beam_3d) + + # Rotating cylinder, 3d + rotating_cylinder_fea = TestCase('rotating_cylinder_fea') + rotating_cylinder_fea.cfg_dir = "fea_fsi/rotating_cylinder" + rotating_cylinder_fea.cfg_file = "config.cfg" + rotating_cylinder_fea.test_iter = 0 + # For a thin disk with the inner and outer radius of this geometry, from + # "Formulas for Stress, Strain, and Structural Matrices", 2nd Edition, figure 19-4, + # the maximum stress is 165.6MPa, we get a Von Misses stress very close to that. + rotating_cylinder_fea.test_vals = [-6.861940, -6.835550, -6.895497, 22, -8.313847, 1.6502e+08] + test_list.append(rotating_cylinder_fea) + # Dynamic beam, 2d dynbeam2d = TestCase('dynbeam2d') dynbeam2d.cfg_dir = "fea_fsi/DynBeam_2d" @@ -1247,7 +1267,7 @@ def main(): fsi2d.cfg_dir = "fea_fsi/WallChannel_2d" fsi2d.cfg_file = "configFSI.cfg" fsi2d.test_iter = 4 - fsi2d.test_vals = [4.000000, 0.000000, -3.729224, -4.153951] + fsi2d.test_vals = [4.000000, 0.000000, -3.726013, -4.277768] fsi2d.command = TestCase.Command(exec = "parallel_computation_fsi.py", param = "-f") fsi2d.multizone= True fsi2d.unsteady = True @@ -1258,7 +1278,7 @@ def main(): stat_fsi.cfg_dir = "fea_fsi/stat_fsi" stat_fsi.cfg_file = "config.cfg" stat_fsi.test_iter = 7 - stat_fsi.test_vals = [-3.311842, -4.950580, 0.000000, 8.000000] + stat_fsi.test_vals = [-3.301938, -4.971986, 0.000000, 11.000000] stat_fsi.multizone = True test_list.append(stat_fsi) @@ -1267,7 +1287,7 @@ def main(): dyn_fsi.cfg_dir = "fea_fsi/dyn_fsi" dyn_fsi.cfg_file = "config.cfg" dyn_fsi.test_iter = 4 - dyn_fsi.test_vals = [-4.330462, -4.058005, 0.000000, 97.000000] + dyn_fsi.test_vals = [-4.330741, -4.153001, 0.000000, 97.000000] dyn_fsi.multizone = True dyn_fsi.unsteady = True test_list.append(dyn_fsi) @@ -1277,7 +1297,7 @@ def main(): stat_fsi_restart.cfg_dir = "fea_fsi/stat_fsi" stat_fsi_restart.cfg_file = "config_restart.cfg" stat_fsi_restart.test_iter = 1 - stat_fsi_restart.test_vals = [-3.445617, -4.243213, 0.000000, 28.000000] + stat_fsi_restart.test_vals = [-3.486655, -4.425104, 0.000000, 27.000000] stat_fsi_restart.multizone = True test_list.append(stat_fsi_restart) @@ -1290,7 +1310,7 @@ def main(): p1rad.cfg_dir = "radiation/p1model" p1rad.cfg_file = "configp1.cfg" p1rad.test_iter = 100 - p1rad.test_vals = [-7.743666, -7.921411, -2.111848, 0.098302, -45.023000] + p1rad.test_vals = [-7.743666, -7.921411, -2.111848, 0.098302, -47.897000] test_list.append(p1rad) @@ -1303,8 +1323,8 @@ def main(): solid_periodic_pins.cfg_dir = "solid_heat_conduction/periodic_pins" solid_periodic_pins.cfg_file = "configSolid.cfg" solid_periodic_pins.test_iter = 750 - solid_periodic_pins.test_vals = [-15.878977, -14.569206, 300.900000, 425.320000, 0.000000, 5.000000, -1.672737] - solid_periodic_pins.test_vals_aarch64 = [-15.879016, -14.569206, 300.900000, 425.320000, 0.000000, 5.000000, -1.672666] + solid_periodic_pins.test_vals = [-15.878977, -14.569206, 300.900000, 425.320000, 5.000000, -1.672737] + solid_periodic_pins.test_vals_aarch64 = [-15.879016, -14.569206, 300.900000, 425.320000, 5.000000, -1.672666] test_list.append(solid_periodic_pins) # ############################### @@ -1334,7 +1354,7 @@ def main(): 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.088580, -0.764276, -1.086940, -0.747450, 208.023676, 344.680000, -0.000000, -0.747450, 0.747450] + sp_pinArray_cht_2d_dp_hf.test_vals = [0.500399, -0.667466, -0.984103, -0.726712, 208.023676, 350.140000, -0.000000, -0.726710, 0.726710] sp_pinArray_cht_2d_dp_hf.multizone = True test_list.append(sp_pinArray_cht_2d_dp_hf) @@ -1343,8 +1363,8 @@ def main(): sp_pinArray_3d_cht_mf_hf_tp.cfg_dir = "incomp_navierstokes/streamwise_periodic/chtPinArray_3d" sp_pinArray_3d_cht_mf_hf_tp.cfg_file = "configMaster.cfg" sp_pinArray_3d_cht_mf_hf_tp.test_iter = 30 - sp_pinArray_3d_cht_mf_hf_tp.test_vals = [-1.627413, -3.083567, -4.577909, -0.009725, 104.632413, 418.370000, 0.000000] - sp_pinArray_3d_cht_mf_hf_tp.test_vals_aarch64 = [-1.622914, -3.081114, -4.576282, -0.009725, 104.632412, 418.370000, 0.000000] + sp_pinArray_3d_cht_mf_hf_tp.test_vals = [-1.116189, -1.881686, -2.561500, -0.009805, 104.600449, 418.360000, 0.000000] + sp_pinArray_3d_cht_mf_hf_tp.test_vals_aarch64 = [-1.117102, -1.880628, -2.561816, -0.009804, 104.600540, 418.360000, 0.000000] sp_pinArray_3d_cht_mf_hf_tp.multizone = True test_list.append(sp_pinArray_3d_cht_mf_hf_tp) @@ -1358,7 +1378,7 @@ def main(): pywrapper_naca0012.cfg_dir = "euler/naca0012" pywrapper_naca0012.cfg_file = "inv_NACA0012_Roe.cfg" pywrapper_naca0012.test_iter = 100 - pywrapper_naca0012.test_vals = [-9.569885, -8.966579, 0.335418, 0.023332] + pywrapper_naca0012.test_vals = [-9.249009, -8.546597, 0.335769, 0.023275] pywrapper_naca0012.command = TestCase.Command("mpirun -np 2", "SU2_CFD.py", "--parallel -f") test_list.append(pywrapper_naca0012) @@ -1367,8 +1387,8 @@ def main(): pywrapper_turb_naca0012_sst.cfg_dir = "rans/naca0012" pywrapper_turb_naca0012_sst.cfg_file = "turb_NACA0012_sst.cfg" pywrapper_turb_naca0012_sst.test_iter = 10 - pywrapper_turb_naca0012_sst.test_vals = [-12.219694, -14.440925, -7.107551, 1.050109, 0.019148, -1.601287, -38.510000] - pywrapper_turb_naca0012_sst.test_vals_aarch64 = [-12.219735, -14.440925, -7.107550, 1.050109, 0.019148, -1.601262, -38.510000] + pywrapper_turb_naca0012_sst.test_vals = [-12.232530, -14.435294, -6.037147, 1.047444, 0.019214, -1.704457, 0.000000] + pywrapper_turb_naca0012_sst.test_vals_aarch64 = [-12.232530, -14.435294, -6.037147, 1.047444, 0.019214, -1.704457, 0.000000] pywrapper_turb_naca0012_sst.command = TestCase.Command("mpirun -np 2", "SU2_CFD.py", "--parallel -f") pywrapper_turb_naca0012_sst.timeout = 3200 test_list.append(pywrapper_turb_naca0012_sst) @@ -1378,8 +1398,7 @@ def main(): pywrapper_square_cylinder.cfg_dir = "unsteady/square_cylinder" pywrapper_square_cylinder.cfg_file = "turb_square.cfg" pywrapper_square_cylinder.test_iter = 10 - pywrapper_square_cylinder.test_vals = [-1.175619, -0.352238, 1.408450, 2.360729, 1.404693, 2.302284, -0.347980] - pywrapper_square_cylinder.test_vals_aarch64 = [-1.175617, -0.352079, 1.408450, 2.360729, 1.404693, 2.302284, -0.347980] + pywrapper_square_cylinder.test_vals = [-1.178764, -0.349891, 1.401055, 2.358075, 1.401419, 2.301174, 0.000000] pywrapper_square_cylinder.command = TestCase.Command("mpirun -np 2", "SU2_CFD.py", "--parallel -f") pywrapper_square_cylinder.unsteady = True test_list.append(pywrapper_square_cylinder) @@ -1389,7 +1408,7 @@ def main(): pywrapper_aeroelastic.cfg_dir = "aeroelastic" pywrapper_aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" pywrapper_aeroelastic.test_iter = 2 - pywrapper_aeroelastic.test_vals = [0.075176, 0.027496, -0.001643, -0.000126] + pywrapper_aeroelastic.test_vals = [0.075023, 0.027483, -0.001643, -0.000126] pywrapper_aeroelastic.command = TestCase.Command("mpirun -np 2", "SU2_CFD.py", "--parallel -f") pywrapper_aeroelastic.unsteady = True test_list.append(pywrapper_aeroelastic) @@ -1409,7 +1428,7 @@ def main(): pywrapper_fsi2d.cfg_dir = "fea_fsi/WallChannel_2d" pywrapper_fsi2d.cfg_file = "configFSI.cfg" pywrapper_fsi2d.test_iter = 4 - pywrapper_fsi2d.test_vals = [4.000000, 0.000000, -3.729224, -4.153951] + pywrapper_fsi2d.test_vals = [4.000000, 0.000000, -3.726013, -4.277768] pywrapper_fsi2d.command = TestCase.Command("mpirun -np 2", "SU2_CFD.py", "--nZone 2 --fsi True --parallel -f") pywrapper_fsi2d.unsteady = True pywrapper_fsi2d.multizone = True @@ -1420,30 +1439,30 @@ def main(): pywrapper_unsteadyFSI.cfg_dir = "py_wrapper/dyn_fsi" pywrapper_unsteadyFSI.cfg_file = "config.cfg" pywrapper_unsteadyFSI.test_iter = 4 - pywrapper_unsteadyFSI.test_vals = [0.000000, 49.000000, 5.000000, 44.000000, -0.589089, -2.800967, -2.603174, -6.722478, 0.000209] + pywrapper_unsteadyFSI.test_vals = [0.000000, 31.000000, 5.000000, 58.000000, -1.756677, -2.828286, -7.638545, -6.863959, 0.000156] pywrapper_unsteadyFSI.command = TestCase.Command("mpirun -np 2", "python", "run.py") pywrapper_unsteadyFSI.unsteady = True pywrapper_unsteadyFSI.multizone = True test_list.append(pywrapper_unsteadyFSI) # Unsteady CHT - pywrapper_unsteadyCHT = TestCase('pywrapper_unsteadyCHT') - pywrapper_unsteadyCHT.cfg_dir = "py_wrapper/flatPlate_unsteady_CHT" - pywrapper_unsteadyCHT.cfg_file = "unsteady_CHT_FlatPlate_Conf.cfg" - pywrapper_unsteadyCHT.test_iter = 5 - pywrapper_unsteadyCHT.test_vals = [-1.614167, 2.240663, -0.001316, 0.177491] - pywrapper_unsteadyCHT.command = TestCase.Command("mpirun -np 2", "python", "launch_unsteady_CHT_FlatPlate.py --parallel -f") - pywrapper_unsteadyCHT.unsteady = True + pywrapper_unsteadyCHT = TestCase('pywrapper_unsteadyCHT') + pywrapper_unsteadyCHT.cfg_dir = "py_wrapper/flatPlate_unsteady_CHT" + pywrapper_unsteadyCHT.cfg_file = "unsteady_CHT_FlatPlate_Conf.cfg" + pywrapper_unsteadyCHT.test_iter = 5 + pywrapper_unsteadyCHT.test_vals = [-1.614167, 2.247364, -0.001388, 0.172995] + pywrapper_unsteadyCHT.command = TestCase.Command("mpirun -np 2", "python", "launch_unsteady_CHT_FlatPlate.py --parallel -f") + pywrapper_unsteadyCHT.unsteady = True test_list.append(pywrapper_unsteadyCHT) # Rigid motion - pywrapper_rigidMotion = TestCase('pywrapper_rigidMotion') - pywrapper_rigidMotion.cfg_dir = "py_wrapper/flatPlate_rigidMotion" - pywrapper_rigidMotion.cfg_file = "flatPlate_rigidMotion_Conf.cfg" - pywrapper_rigidMotion.test_iter = 5 - pywrapper_rigidMotion.test_vals = [-1.614165, 2.238591, 0.349970, 0.095593] - pywrapper_rigidMotion.command = TestCase.Command("mpirun -np 2", "python", "launch_flatPlate_rigidMotion.py --parallel -f") - pywrapper_rigidMotion.unsteady = True + pywrapper_rigidMotion = TestCase('pywrapper_rigidMotion') + pywrapper_rigidMotion.cfg_dir = "py_wrapper/flatPlate_rigidMotion" + pywrapper_rigidMotion.cfg_file = "flatPlate_rigidMotion_Conf.cfg" + pywrapper_rigidMotion.test_iter = 5 + pywrapper_rigidMotion.test_vals = [-1.614166, 2.243100, 0.350194, 0.089497] + pywrapper_rigidMotion.command = TestCase.Command("mpirun -np 2", "python", "launch_flatPlate_rigidMotion.py --parallel -f") + pywrapper_rigidMotion.unsteady = True test_list.append(pywrapper_rigidMotion) # Deforming Bump in Channel @@ -1451,7 +1470,7 @@ def main(): pywrapper_deformingBump.cfg_dir = "py_wrapper/deforming_bump_in_channel" pywrapper_deformingBump.cfg_file = "config.cfg" pywrapper_deformingBump.test_iter = 1 - pywrapper_deformingBump.test_vals = [0.500000, 0.000000, -3.037857, -1.603573, -2.074205, 2.424288, 7.765352, -0.220502] + pywrapper_deformingBump.test_vals = [0.500000, 0.000000, -2.811520, -1.603562, -2.074259, 2.424289, 7.616891, -0.205655] pywrapper_deformingBump.command = TestCase.Command("mpirun -np 2", "python", "run.py") pywrapper_deformingBump.unsteady = True test_list.append(pywrapper_deformingBump) @@ -1465,7 +1484,7 @@ def main(): mms_fvm_ns.cfg_dir = "mms/fvm_navierstokes" mms_fvm_ns.cfg_file = "lam_mms_roe.cfg" mms_fvm_ns.test_iter = 20 - mms_fvm_ns.test_vals = [-2.851428, 2.192348, 0.000000, 0.000000] + mms_fvm_ns.test_vals = [-2.808514, 2.152654, 0.000000, 0.000000] mms_fvm_ns.tol = 0.0001 test_list.append(mms_fvm_ns) @@ -1523,7 +1542,7 @@ def main(): species2_primitiveVenturi_mixingmodel.cfg_dir = "species_transport/venturi_primitive_3species" species2_primitiveVenturi_mixingmodel.cfg_file = "species2_primitiveVenturi_mixingmodel.cfg" species2_primitiveVenturi_mixingmodel.test_iter = 50 - species2_primitiveVenturi_mixingmodel.test_vals = [ -5.407755, -4.557255, -4.635502, -5.642910, -0.059627, -5.546376, 5.000000, -1.879995, 5.000000, -4.898985, 5.000000, -1.169389, 0.000551, 0.000483, 0.000068, 0.000000] + species2_primitiveVenturi_mixingmodel.test_vals = [-5.736233, -4.561289, -4.666830, -5.863760, -0.071055, -5.584743, 5.000000, -1.376449, 5.000000, -4.869012, 5.000000, -1.452251, 0.000372, 0.000356, 0.000016, 0.000000] test_list.append(species2_primitiveVenturi_mixingmodel) # 2 species (1 eq) primitive venturi mixing using mixing model and bounded scalar transport @@ -1531,7 +1550,7 @@ def main(): species2_primitiveVenturi_mixingmodel_boundedscalar.cfg_dir = "species_transport/venturi_primitive_3species" species2_primitiveVenturi_mixingmodel_boundedscalar.cfg_file = "species2_primitiveVenturi_mixingmodel_boundedscalar.cfg" species2_primitiveVenturi_mixingmodel_boundedscalar.test_iter = 50 - species2_primitiveVenturi_mixingmodel_boundedscalar.test_vals = [-5.392378, -4.492373, -4.576491, -5.759780, -0.137797, -5.677531, 5.000000, -1.895013, 5.000000, -4.806816, 5.000000, -1.697769, 0.000275, 0.000275, 0.000000, 0.000000] + species2_primitiveVenturi_mixingmodel_boundedscalar.test_vals = [-5.689876, -4.507214, -4.611632, -6.120372, -0.118388, -5.705973, 5.000000, -1.437234, 5.000000, -4.924953, 5.000000, -1.768691, 0.000313, 0.000313, 0.000000, 0.000000] test_list.append(species2_primitiveVenturi_mixingmodel_boundedscalar) # 2 species (1 eq) primitive venturi mixing using mixing model including viscosity, thermal conductivity and inlet markers for SA turbulence model @@ -1539,7 +1558,7 @@ def main(): species2_primitiveVenturi_mixingmodel_viscosity.cfg_dir = "species_transport/venturi_primitive_3species" species2_primitiveVenturi_mixingmodel_viscosity.cfg_file = "species2_primitiveVenturi_mixingmodel_viscosity.cfg" species2_primitiveVenturi_mixingmodel_viscosity.test_iter = 50 - species2_primitiveVenturi_mixingmodel_viscosity.test_vals = [-4.857397, -3.646605, -3.737462, -7.602922, -5.008846, 5.000000, -1.756226, 5.000000, -3.163353, 5.000000, -2.189723, 2.476808, 0.976999, 0.609280, 0.890529] + species2_primitiveVenturi_mixingmodel_viscosity.test_vals = [-5.232339, -3.617118, -3.857221, -7.533847, -5.126646, 5.000000, -1.682962, 5.000000, -3.474078, 5.000000, -2.086859, 2.495548, 0.985490, 0.600234, 0.909824] test_list.append(species2_primitiveVenturi_mixingmodel_viscosity) # 2 species (1 eq) primitive venturi mixing using mixing model including heat capacity and mass diffusivity @@ -1547,7 +1566,7 @@ def main(): species2_primitiveVenturi_mixingmodel_heatcapacity_H2.cfg_dir = "species_transport/venturi_primitive_3species" species2_primitiveVenturi_mixingmodel_heatcapacity_H2.cfg_file = "species2_primitiveVenturi_mixingmodel_heatcapacity_H2.cfg" species2_primitiveVenturi_mixingmodel_heatcapacity_H2.test_iter = 50 - species2_primitiveVenturi_mixingmodel_heatcapacity_H2.test_vals = [-5.688779, -4.556193, -4.513326, -6.563666, 2.298459, -5.423525, 30.000000, -6.903871, 13.000000, -8.224587, 8.000000, -9.119625, 2.078869, 1.000000, 0.600000, 0.478869] + species2_primitiveVenturi_mixingmodel_heatcapacity_H2.test_vals = [-5.830112, -4.504576, -4.654774, -7.014975, 2.317603, -5.509555, 30.000000, -6.906408, 11.000000, -8.227485, 8.000000, -9.294144, 2.077533, 1.000000, 0.600000, 0.477533] test_list.append(species2_primitiveVenturi_mixingmodel_heatcapacity_H2) # 2 species (1 eq) primitive venturi mixing using mixing model including heat capacity and mass diffusivity NonDimensional case @@ -1555,7 +1574,7 @@ def main(): species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.cfg_dir = "species_transport/venturi_primitive_3species" species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.cfg_file = "species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.cfg" species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.test_iter = 50 - species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.test_vals = [-5.287504, -4.852957, -4.798004, -7.501815, 1.991002, -5.023713, 10.000000, -2.696121, 3.000000, -5.182457, 5.000000, -5.561055, 2.078843, 1.000000, 0.600000, 0.478843] + species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.test_vals = [-5.429311, -4.805894, -4.943400, -7.978127, 2.012275, -5.115722, 10.000000, -2.264471, 2.000000, -5.061843, 4.000000, -5.055035, 2.077660, 1.000000, 0.600000, 0.477660] test_list.append(species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND) # 2 species (1 eq) primitive venturi mixing @@ -1563,7 +1582,7 @@ def main(): species2_primitiveVenturi.cfg_dir = "species_transport/venturi_primitive_3species" species2_primitiveVenturi.cfg_file = "species2_primitiveVenturi.cfg" species2_primitiveVenturi.test_iter = 50 - species2_primitiveVenturi.test_vals = [-5.643794, -4.798953, -4.858719, -5.648947, -1.195985, -5.564607, 5.000000, -0.958960, 5.000000, -2.515334, 5.000000, -0.796944, 0.000210, 0.000206, 0.000004, 0.000000] + species2_primitiveVenturi.test_vals = [-5.919132, -4.941085, -4.919763, -5.717215, -1.405791, -6.087254, 5.000000, -0.524653, 5.000000, -2.608809, 5.000000, -0.351723, 0.000113, 0.000112, 0.000000, 0.000000] test_list.append(species2_primitiveVenturi) # 2 species (1 eq) primitive venturi mixing with bounded scalar transport @@ -1571,7 +1590,7 @@ def main(): species_primitiveVenturi_boundedscalar.cfg_dir = "species_transport/venturi_primitive_3species" species_primitiveVenturi_boundedscalar.cfg_file = "species2_primitiveVenturi_boundedscalar.cfg" species_primitiveVenturi_boundedscalar.test_iter = 50 - species_primitiveVenturi_boundedscalar.test_vals = [-5.283533, -4.417193, -4.478360, -5.669526, -0.952767, -5.618596, 5.000000, -1.996975, 5.000000, -4.017868, 5.000000, -1.747496, 0.000423, 0.000423, 0.000000, 0.000000] + species_primitiveVenturi_boundedscalar.test_vals = [-5.534441, -4.368794, -4.465911, -5.935827, -0.867763, -5.633723, 5.000000, -1.470749, 5.000000, -4.161492, 5.000000, -1.724769, 0.000434, 0.000434, 0.000000, 0.000000] test_list.append(species_primitiveVenturi_boundedscalar) # 2 species (1 eq) primitive venturi mixing using mixing model including inlet markers for turbulent intensity and viscosity ratios @@ -1579,7 +1598,7 @@ def main(): species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.cfg_dir = "species_transport/venturi_primitive_3species" species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.cfg_file = "species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.cfg" species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.test_iter = 50 - species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.test_vals = [-4.105910, -1.680056, -1.599493, -0.672401, 1.441091, -3.759601, 23.000000, -5.201473, 11.000000, -5.312651, 4.000000, -6.525448, 2.000000, 1.000000, 0.000000, 1.000000] + species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.test_vals = [-4.565556, -1.773987, -1.569972, -0.978893, 1.693213, -3.843844, 23.000000, -5.040721, 10.000000, -5.559387, 3.000000, -5.370252, 2.000000, 1.000000, 0.000000, 1.000000] test_list.append(species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS) # 3 species (2 eq) primitive venturi mixing with inlet files. @@ -1588,7 +1607,7 @@ def main(): species3_primitiveVenturi_inletFile.cfg_dir = "species_transport/venturi_primitive_3species" species3_primitiveVenturi_inletFile.cfg_file = "species3_primitiveVenturi_inletFile.cfg" species3_primitiveVenturi_inletFile.test_iter = 50 - species3_primitiveVenturi_inletFile.test_vals = [-5.714428, -4.869589, -4.929349, -5.719577, -1.266622, -5.824037, -5.944720, 5.000000, -0.958918, 5.000000, -2.515337, 5.000000, -0.523677] + species3_primitiveVenturi_inletFile.test_vals = [-5.989944, -5.011655, -4.990373, -5.787315, -1.475219, -6.316068, -6.446277, 5.000000, -0.525858, 5.000000, -2.609037, 5.000000, -0.362429] test_list.append(species3_primitiveVenturi_inletFile) # rectangle passive transport validation @@ -1596,7 +1615,7 @@ def main(): species_passive_val.cfg_dir = "species_transport/passive_transport_validation" species_passive_val.cfg_file = "passive_transport.cfg" species_passive_val.test_iter = 50 - species_passive_val.test_vals = [-16.604279, -16.303255, -16.970059, -4.257599, 10.000000, -4.731945, 8.000000, -5.193350, 0.186610, 0.000000] + species_passive_val.test_vals = [-16.561013, -16.280437, -16.910003, -4.257599, 10.000000, -4.457215, 8.000000, -5.193350, 0.186610, 0.000000] species_passive_val.test_vals_aarch64 = [-16.538551, -16.312552, -16.882823, -4.257599, 10, -4.585464, 8, -5.19335, 0.18661, 0] test_list.append(species_passive_val) @@ -1605,7 +1624,7 @@ def main(): species3_multizone_restart.cfg_dir = "species_transport/multizone" species3_multizone_restart.cfg_file = "configMaster.cfg" species3_multizone_restart.test_iter = 5 - species3_multizone_restart.test_vals = [-6.111017, -5.720050] + species3_multizone_restart.test_vals = [-3.715625, -3.070578] species3_multizone_restart.multizone = True test_list.append(species3_multizone_restart) @@ -1618,11 +1637,24 @@ def main(): cgns_writer.cfg_dir = "cgns_writer" cgns_writer.cfg_file = "config.cfg" cgns_writer.test_iter = 1 - cgns_writer.test_vals = [-2.974473, 0.665204, 5.068846, -7.003873] - cgns_writer.command = TestCase.Command("mpirun -n 2", "SU2_CFD") + cgns_writer.test_vals = [-2.974473, 0.640256, 5.371028, -6.732060] cgns_writer.new_output = True test_list.append(cgns_writer) + ###################################### + ### RUN CHT TEST WITH FILEDIFF ### + ###################################### + + # 2D planar laminar premixed methane flame on isothermal burner with conjugate heat transfer in cooling fin (restart) + cfd_flamelet_ch4_cht = TestCase('cfd_flamelet_ch4_cht') + cfd_flamelet_ch4_cht.cfg_dir = "flamelet/03_laminar_premixed_ch4_flame_cht_cfd" + cfd_flamelet_ch4_cht.cfg_file = "lam_prem_ch4_cht_cfd_master.cfg" + cfd_flamelet_ch4_cht.test_iter = 5 + cfd_flamelet_ch4_cht.test_vals = [-10.166224, -9.299576, -10.022482, -11.907558, -3.447626, -12.290421, -13.719415, -6.864920] + cfd_flamelet_ch4_cht.timeout = 1600 + cfd_flamelet_ch4_cht.multizone = True + test_list.append(cfd_flamelet_ch4_cht) + ###################################### ### RUN TESTS ### ###################################### @@ -1641,25 +1673,6 @@ def main(): pass_list = [ test.run_test() for test in test_list ] - ###################################### - ### RUN CHT TEST WITH FILEDIFF ### - ###################################### - - # 2D planar laminar premixed methane flame on isothermal burner with conjugate heat transfer in cooling fin (restart) - cfd_flamelet_ch4_cht = TestCase('cfd_flamelet_ch4_cht') - cfd_flamelet_ch4_cht.cfg_dir = "flamelet/03_laminar_premixed_ch4_flame_cht_cfd" - cfd_flamelet_ch4_cht.cfg_file = "lam_prem_ch4_cht_cfd_master.cfg" - cfd_flamelet_ch4_cht.test_iter = 5 - cfd_flamelet_ch4_cht.command = TestCase.Command("mpirun -n 2", "SU2_CFD") - cfd_flamelet_ch4_cht.timeout = 1600 - cfd_flamelet_ch4_cht.reference_file = "restart_0.csv.ref" - cfd_flamelet_ch4_cht.test_file = "restart_0.csv" - cfd_flamelet_ch4_cht.multizone = True - cfd_flamelet_ch4_cht.comp_threshold = 1e-6 - cfd_flamelet_ch4_cht.tol_file_percent = 1.0 - pass_list.append(cfd_flamelet_ch4_cht.run_filediff()) - test_list.append(cfd_flamelet_ch4_cht) - ###################################### ### RUN SU2_SOL TESTS ### ###################################### diff --git a/TestCases/parallel_regression_AD.py b/TestCases/parallel_regression_AD.py index af50a43b1dae..21ec615f9ff4 100644 --- a/TestCases/parallel_regression_AD.py +++ b/TestCases/parallel_regression_AD.py @@ -3,14 +3,14 @@ ## \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 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 @@ -47,7 +47,7 @@ def main(): discadj_naca0012.cfg_dir = "cont_adj_euler/naca0012" discadj_naca0012.cfg_file = "inv_NACA0012_discadj.cfg" discadj_naca0012.test_iter = 100 - discadj_naca0012.test_vals = [-3.560692, -8.925239, -0.000000, 0.005559] + discadj_naca0012.test_vals = [-3.562562, -8.932563, -0.000000, 0.005608] test_list.append(discadj_naca0012) # Inviscid Cylinder 3D (multiple markers) @@ -55,7 +55,7 @@ def main(): discadj_cylinder3D.cfg_dir = "disc_adj_euler/cylinder3D" discadj_cylinder3D.cfg_file = "inv_cylinder3D.cfg" discadj_cylinder3D.test_iter = 5 - discadj_cylinder3D.test_vals = [-3.768909, -3.725727, 0.000000, 0.000000] + discadj_cylinder3D.test_vals = [-3.693714, -3.889422, 0.000000, 0.000000] test_list.append(discadj_cylinder3D) # Arina nozzle 2D @@ -63,7 +63,7 @@ def main(): discadj_arina2k.cfg_dir = "disc_adj_euler/arina2k" discadj_arina2k.cfg_file = "Arina2KRS.cfg" discadj_arina2k.test_iter = 20 - discadj_arina2k.test_vals = [-3.540396, -3.828299, 0.027959, 0.000000] + discadj_arina2k.test_vals = [-3.254894, -3.550776, 0.053099, 0.000000] test_list.append(discadj_arina2k) # Equivalent area NACA64-206 @@ -71,7 +71,7 @@ def main(): ea_naca64206.cfg_dir = "optimization_euler/equivalentarea_naca64206" ea_naca64206.cfg_file = "NACA64206.cfg" ea_naca64206.test_iter = 10 - ea_naca64206.test_vals = [3.127605, 2.411805, -5505700.000000, 10.591000] + ea_naca64206.test_vals = [3.117653, 2.396440, -5467200.000000, 11.585000] test_list.append(ea_naca64206) #################################### @@ -83,7 +83,7 @@ def main(): discadj_rans_naca0012_sa.cfg_dir = "disc_adj_rans/naca0012" discadj_rans_naca0012_sa.cfg_file = "turb_NACA0012_sa.cfg" discadj_rans_naca0012_sa.test_iter = 10 - discadj_rans_naca0012_sa.test_vals = [-2.230568, 0.644202, 0.181590, -0.000018, 5.000000, -3.421717, 5.000000, -6.769530] + discadj_rans_naca0012_sa.test_vals = [-2.996963, -0.196020, 0.000004, -0.000000, 5.000000, -3.430615, 5.000000, -7.411381] test_list.append(discadj_rans_naca0012_sa) # Adjoint turbulent NACA0012 SST @@ -91,8 +91,8 @@ def main(): discadj_rans_naca0012_sst.cfg_dir = "disc_adj_rans/naca0012" discadj_rans_naca0012_sst.cfg_file = "turb_NACA0012_sst.cfg" discadj_rans_naca0012_sst.test_iter = 10 - discadj_rans_naca0012_sst.test_vals = [-2.221848, -0.502430, 0.182000, -0.000018] - discadj_rans_naca0012_sst.test_vals_aarch64 = [-2.221848, -0.502430, 0.182000, -0.000018] + discadj_rans_naca0012_sst.test_vals = [-2.265044, -0.279938, -2.268100, -0.002968] + discadj_rans_naca0012_sst.test_vals_aarch64 = [-2.265044, -0.279938, -2.268100, -0.002968] test_list.append(discadj_rans_naca0012_sst) ####################################### @@ -104,7 +104,7 @@ def main(): discadj_incomp_NACA0012.cfg_dir = "disc_adj_incomp_euler/naca0012" discadj_incomp_NACA0012.cfg_file = "incomp_NACA0012_disc.cfg" discadj_incomp_NACA0012.test_iter = 20 - discadj_incomp_NACA0012.test_vals = [20.000000, -4.093433, -2.686134, 0.000000] + discadj_incomp_NACA0012.test_vals = [20.000000, -4.096681, -2.686537, 0.000000] test_list.append(discadj_incomp_NACA0012) ##################################### @@ -116,7 +116,7 @@ def main(): discadj_incomp_cylinder.cfg_dir = "disc_adj_incomp_navierstokes/cylinder" discadj_incomp_cylinder.cfg_file = "heated_cylinder.cfg" discadj_incomp_cylinder.test_iter = 20 - discadj_incomp_cylinder.test_vals = [20.000000, -2.195581, -2.162081, 0.000000] + discadj_incomp_cylinder.test_vals = [20.000000, -2.082673, -2.013587, 0.000000] test_list.append(discadj_incomp_cylinder) ###################################### @@ -128,7 +128,7 @@ def main(): discadj_incomp_turb_NACA0012_sa.cfg_dir = "disc_adj_incomp_rans/naca0012" discadj_incomp_turb_NACA0012_sa.cfg_file = "turb_naca0012_sa.cfg" discadj_incomp_turb_NACA0012_sa.test_iter = 10 - discadj_incomp_turb_NACA0012_sa.test_vals = [10.000000, -3.846018, -1.031079, 0.000000] + discadj_incomp_turb_NACA0012_sa.test_vals = [10.000000, -3.846020, -1.031079, 0.000000] discadj_incomp_turb_NACA0012_sa.test_vals_aarch64 = [10.000000, -3.846020, -1.031078, 0.000000] test_list.append(discadj_incomp_turb_NACA0012_sa) @@ -137,8 +137,8 @@ def main(): discadj_incomp_turb_NACA0012_sst.cfg_dir = "disc_adj_incomp_rans/naca0012" discadj_incomp_turb_NACA0012_sst.cfg_file = "turb_naca0012_sst.cfg" discadj_incomp_turb_NACA0012_sst.test_iter = 10 - discadj_incomp_turb_NACA0012_sst.test_vals = [-4.183391, -2.287284, -7.892044, 0, -1.230919] - discadj_incomp_turb_NACA0012_sst.test_vals_aarch64 = [-4.183391, -2.287284, -7.892044, 0, -1.230919] + discadj_incomp_turb_NACA0012_sst.test_vals = [-3.944706, -2.788179, -7.913889, 0.000000, -0.956513] + discadj_incomp_turb_NACA0012_sst.test_vals_aarch64 = [-3.944706, -2.788179, -7.913889, 0.000000, -0.956513] test_list.append(discadj_incomp_turb_NACA0012_sst) #################################################################### @@ -150,7 +150,7 @@ def main(): discadj_axisymmetric_rans_nozzle.cfg_dir = "axisymmetric_rans/air_nozzle" discadj_axisymmetric_rans_nozzle.cfg_file = "air_nozzle_restart.cfg" discadj_axisymmetric_rans_nozzle.test_iter = 10 - discadj_axisymmetric_rans_nozzle.test_vals = [9.550040, 4.937865, 7.377284, 2.748846] + discadj_axisymmetric_rans_nozzle.test_vals = [9.738507, 5.143637, 7.119665, 2.505997] discadj_axisymmetric_rans_nozzle.no_restart = True test_list.append(discadj_axisymmetric_rans_nozzle) @@ -163,7 +163,7 @@ def main(): discadj_cylinder.cfg_dir = "disc_adj_rans/cylinder" discadj_cylinder.cfg_file = "cylinder.cfg" discadj_cylinder.test_iter = 9 - discadj_cylinder.test_vals = [3.746909, -1.544883, -0.008321, 0.000014] #last 4 columns + discadj_cylinder.test_vals = [1.639372, -2.834295, -0.009538, 0.000020] #last 4 columns discadj_cylinder.unsteady = True test_list.append(discadj_cylinder) @@ -176,7 +176,7 @@ def main(): discadj_cylinder.cfg_dir = "disc_adj_rans/cylinder" discadj_cylinder.cfg_file = "cylinder_Windowing_AD.cfg" discadj_cylinder.test_iter = 9 - discadj_cylinder.test_vals = [3.004406] #last column + discadj_cylinder.test_vals = [2.183366] #last column discadj_cylinder.unsteady = True test_list.append(discadj_cylinder) @@ -189,7 +189,7 @@ def main(): discadj_cylinder.cfg_dir = "disc_adj_rans/cylinder" discadj_cylinder.cfg_file = "cylinder_Windowing.cfg" discadj_cylinder.test_iter = 6 - discadj_cylinder.test_vals = [0.202349, -0.000119, 1.899933, -0.000050, 1.067900] + discadj_cylinder.test_vals = [0.238134, -0.000245, 1.926672, -0.000097, 1.062800] discadj_cylinder.tol = 0.0001 discadj_cylinder.command = TestCase.Command("mpirun -n 2", "SU2_CFD_DIRECTDIFF") discadj_cylinder.unsteady = True @@ -204,7 +204,7 @@ def main(): discadj_DT_1ST_cylinder.cfg_dir = "disc_adj_rans/cylinder_DT_1ST" discadj_DT_1ST_cylinder.cfg_file = "cylinder.cfg" discadj_DT_1ST_cylinder.test_iter = 9 - discadj_DT_1ST_cylinder.test_vals = [3.698168, -1.607050, -0.002159, 0.000028] #last 4 columns + discadj_DT_1ST_cylinder.test_vals = [1.196413, -3.339027, -0.006212, 0.000020] #last 4 columns discadj_DT_1ST_cylinder.unsteady = True test_list.append(discadj_DT_1ST_cylinder) @@ -217,7 +217,7 @@ def main(): discadj_pitchingNACA0012.cfg_dir = "disc_adj_euler/naca0012_pitching" discadj_pitchingNACA0012.cfg_file = "inv_NACA0012_pitching.cfg" discadj_pitchingNACA0012.test_iter = 4 - discadj_pitchingNACA0012.test_vals = [-1.227073, -1.648410, -0.007541, 0.000012] + discadj_pitchingNACA0012.test_vals = [-1.226212, -1.647429, -0.007557, 0.000012] discadj_pitchingNACA0012.unsteady = True test_list.append(discadj_pitchingNACA0012) @@ -230,8 +230,8 @@ def main(): discadj_trans_stator.cfg_dir = "disc_adj_turbomachinery/transonic_stator_2D" discadj_trans_stator.cfg_file = "transonic_stator.cfg" discadj_trans_stator.test_iter = 79 - discadj_trans_stator.test_vals = [79, 0.769967, 0.374299, 0.474436, -0.996528, 2.154053, -4.446085] - discadj_trans_stator.test_vals_aarch64 = [79, 0.769967, 0.374299, 0.474436, -0.996528, 2.154053, -4.446085] + discadj_trans_stator.test_vals = [79.000000, 0.770207, 0.374782, 0.474740, -0.996140, 2.154296, -4.445843] + discadj_trans_stator.test_vals_aarch64 = [79.000000, 0.770207, 0.374782, 0.474740, -0.996140, 2.154296, -4.445843] test_list.append(discadj_trans_stator) ################################### @@ -256,7 +256,7 @@ def main(): discadj_heat.cfg_dir = "disc_adj_heat" discadj_heat.cfg_file = "disc_adj_heat.cfg" discadj_heat.test_iter = 10 - discadj_heat.test_vals = [-2.117791, 0.784475, 0.000000, -0.574700] + discadj_heat.test_vals = [-1.999668, 0.670563, 0.000000, 0.006210] discadj_heat.test_vals_aarch64 = [-2.226539, 0.605868, 0.000000, -6.256400] test_list.append(discadj_heat) @@ -269,7 +269,7 @@ def main(): discadj_fsi.cfg_dir = "disc_adj_fsi" discadj_fsi.cfg_file = "config.cfg" discadj_fsi.test_iter = 6 - discadj_fsi.test_vals = [6.000000, -1.949946, -3.080711, 0.000440, -1.063100] + discadj_fsi.test_vals = [6.000000, -7.017319, -7.872545, 3.9968e-09, -2.4097e-05] test_list.append(discadj_fsi) # Multi physics framework @@ -277,7 +277,7 @@ def main(): discadj_fsi2.cfg_dir = "disc_adj_fsi/Airfoil_2d" discadj_fsi2.cfg_file = "config.cfg" discadj_fsi2.test_iter = 8 - discadj_fsi2.test_vals = [-2.402639, 2.740269, -1.270185, -1.273900, 3.860200] + discadj_fsi2.test_vals = [-4.772585, 0.918091, -3.863369, 0.295450, 3.841200] discadj_fsi2.test_vals_aarch64 = [-4.349372, 0.190601, -1.303589, 0.754070, 2.324400] discadj_fsi2.tol = 0.00001 test_list.append(discadj_fsi2) @@ -299,7 +299,7 @@ def main(): da_sp_pinArray_cht_2d_dp_hf.cfg_dir = "incomp_navierstokes/streamwise_periodic/chtPinArray_2d" da_sp_pinArray_cht_2d_dp_hf.cfg_file = "DA_configMaster.cfg" da_sp_pinArray_cht_2d_dp_hf.test_iter = 100 - da_sp_pinArray_cht_2d_dp_hf.test_vals = [-4.706292, -4.062398, -4.137374] + da_sp_pinArray_cht_2d_dp_hf.test_vals = [-4.754828, -4.058323, -4.137408] da_sp_pinArray_cht_2d_dp_hf.multizone = True test_list.append(da_sp_pinArray_cht_2d_dp_hf) @@ -308,7 +308,7 @@ def main(): da_sp_pinArray_cht_2d_mf.cfg_dir = "incomp_navierstokes/streamwise_periodic/dp-adjoint_chtPinArray_2d" da_sp_pinArray_cht_2d_mf.cfg_file = "configMaster.cfg" da_sp_pinArray_cht_2d_mf.test_iter = 100 - da_sp_pinArray_cht_2d_mf.test_vals = [-4.600710, -1.298285, -1.430286, -18.503417, -0.870017, -5.768271, -19.069555, -47.953298] + da_sp_pinArray_cht_2d_mf.test_vals = [-4.543396, -1.198883, -1.451287, -18.497517, -0.811918, -6.001418, -19.076086, -49.855384] da_sp_pinArray_cht_2d_mf.multizone = True test_list.append(da_sp_pinArray_cht_2d_mf) @@ -317,64 +317,52 @@ def main(): da_unsteadyCHT_cylinder.cfg_dir = "coupled_cht/disc_adj_unsteadyCHT_cylinder" da_unsteadyCHT_cylinder.cfg_file = "chtMaster.cfg" da_unsteadyCHT_cylinder.test_iter = 2 - da_unsteadyCHT_cylinder.test_vals = [-3.508906, -4.317739, -4.241558, -11.836892, -12.862650, 0.000000, 3.688000, 0.295190] + da_unsteadyCHT_cylinder.test_vals = [-3.508906, -4.317739, -4.241558, -11.836892, -12.862640, 0.000000, 3.688000, 0.295190] da_unsteadyCHT_cylinder.test_vals_aarch64 = [-3.508906, -4.317739, -4.241558, -11.836892, -12.862650, 0.000000, 3.688000, 0.295190] da_unsteadyCHT_cylinder.unsteady = True da_unsteadyCHT_cylinder.multizone = True test_list.append(da_unsteadyCHT_cylinder) - ###################################### - ### RUN TESTS ### - ###################################### - - # set suitable defaults unless something else has been specified - # command: "mpirun -n 2 SU2_CFD_AD" - # timeout: 1600 - # tol: 0.00001 - for test in test_list: - if test.command.empty(): - test.command = TestCase.Command("mpirun -n 2", "SU2_CFD_AD") - if test.timeout == 0: - test.timeout = 1600 - if test.tol == 0.0: - test.tol = 0.00001 - - pass_list = [ test.run_test() for test in test_list ] - ################################## ### Disc. adj. flamelet solver ### ################################## # 2D planar laminar premixed flame on isothermal burner (restart) discadj_flamelet_ch4_hx = TestCase('discadj_flamelet_ch4_hx') - discadj_flamelet_ch4_hx.command = TestCase.Command("mpirun -n 2", "SU2_CFD_AD") discadj_flamelet_ch4_hx.cfg_dir = "flamelet/02_laminar_premixed_ch4_flame_hx_ad" discadj_flamelet_ch4_hx.cfg_file = "lam_prem_ch4_hx_ad.cfg" discadj_flamelet_ch4_hx.multizone = False discadj_flamelet_ch4_hx.test_iter = 10 - discadj_flamelet_ch4_hx.timeout = 20000 - discadj_flamelet_ch4_hx.reference_file = "restart_adj_custom.csv.ref" - discadj_flamelet_ch4_hx.test_file = "restart_adj_custom.csv" - discadj_flamelet_ch4_hx.comp_threshold = 1e-6 - discadj_flamelet_ch4_hx.tol_file_percent = 0.1 - pass_list.append(discadj_flamelet_ch4_hx.run_filediff()) + discadj_flamelet_ch4_hx.test_vals = [-8.699008, -8.604699, -8.816298, -6.626855, -14.620943, -3.249062, -18.930953] test_list.append(discadj_flamelet_ch4_hx) # 2D planar laminar premixed flame on isothermal burner with conjugate heat transfer (restart) discadj_flamelet_ch4_cht = TestCase('discadj_flamelet_ch4_cht') - discadj_flamelet_ch4_cht.command = TestCase.Command("mpirun -n 2", "SU2_CFD_AD") discadj_flamelet_ch4_cht.cfg_dir = "flamelet/04_laminar_premixed_ch4_flame_cht_ad" discadj_flamelet_ch4_cht.cfg_file = "lam_prem_ch4_cht_ad_master.cfg" discadj_flamelet_ch4_cht.multizone = True - discadj_flamelet_ch4_cht.test_iter = 5 - discadj_flamelet_ch4_cht.reference_file = "restart_adj_T_0.csv.ref" - discadj_flamelet_ch4_cht.test_file = "restart_adj_T_0.csv" - discadj_flamelet_ch4_cht.comp_threshold = 1e-6 - discadj_flamelet_ch4_cht.tol_file_percent = 0.1 - discadj_flamelet_ch4_cht.timeout = 20000 - pass_list.append(discadj_flamelet_ch4_cht.run_filediff()) + discadj_flamelet_ch4_cht.test_iter = 10 + discadj_flamelet_ch4_cht.test_vals = [-2.760027, -1.999839, -2.096537, -0.153424, -7.289370, -18.655063, -18.622003, -4.847179] test_list.append(discadj_flamelet_ch4_cht) + ###################################### + ### RUN TESTS ### + ###################################### + + # set suitable defaults unless something else has been specified + # command: "mpirun -n 2 SU2_CFD_AD" + # timeout: 1600 + # tol: 0.00001 + for test in test_list: + if test.command.empty(): + test.command = TestCase.Command("mpirun -n 2", "SU2_CFD_AD") + if test.timeout == 0: + test.timeout = 1600 + if test.tol == 0.0: + test.tol = 0.00001 + + pass_list = [ test.run_test() for test in test_list ] + ################################################ ### Gradient check (dot) for flamelet solver ### ################################################ @@ -511,7 +499,7 @@ def main(): pywrapper_CFD_AD_MeshDisp.cfg_dir = "py_wrapper/disc_adj_flow/mesh_disp_sens" pywrapper_CFD_AD_MeshDisp.cfg_file = "configAD_flow.cfg" pywrapper_CFD_AD_MeshDisp.test_iter = 1000 - pywrapper_CFD_AD_MeshDisp.test_vals = [30.000000, -2.506016, 1.407249, 0.000000] + pywrapper_CFD_AD_MeshDisp.test_vals = [30.000000, -2.496560, 1.440884, 0.000000] pywrapper_CFD_AD_MeshDisp.command = TestCase.Command("mpirun -n 2", "python", "run_adjoint.py --parallel -f") pywrapper_CFD_AD_MeshDisp.timeout = 1600 pywrapper_CFD_AD_MeshDisp.tol = 0.000001 @@ -524,7 +512,7 @@ def main(): pywrapper_wavy_wall_steady.cfg_dir = "py_wrapper/wavy_wall" pywrapper_wavy_wall_steady.cfg_file = "run_steady.py" pywrapper_wavy_wall_steady.test_iter = 100 - pywrapper_wavy_wall_steady.test_vals = [-1.360044, 2.580709, -2.892473] + pywrapper_wavy_wall_steady.test_vals = [-1.352680, 2.579322, -2.898321] pywrapper_wavy_wall_steady.command = TestCase.Command("mpirun -n 2", "python", "run_steady.py") pywrapper_wavy_wall_steady.timeout = 1600 pywrapper_wavy_wall_steady.tol = 0.00001 diff --git a/TestCases/pastix_support/config.cfg b/TestCases/pastix_support/config.cfg index e0b27aef6ac8..c671f00c20d3 100644 --- a/TestCases/pastix_support/config.cfg +++ b/TestCases/pastix_support/config.cfg @@ -2,7 +2,7 @@ % SU2 configuration file % % PaStiX options (http://pastix.gforge.inria.fr/files/README-txt.html) % % Institution: Imperial College London % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Intro: diff --git a/TestCases/pastix_support/readme.txt b/TestCases/pastix_support/readme.txt index 27b7e6907ce2..8dcdf9547ea8 100644 --- a/TestCases/pastix_support/readme.txt +++ b/TestCases/pastix_support/readme.txt @@ -2,7 +2,7 @@ % SU2 configuration file % % PaStiX support build instructions. % % Institution: Imperial College London % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % 1 - Download diff --git a/TestCases/polar/naca0012/inv_NACA0012.cfg b/TestCases/polar/naca0012/inv_NACA0012.cfg index 0edfa5b3babd..dd8ed5d3f109 100644 --- a/TestCases/polar/naca0012/inv_NACA0012.cfg +++ b/TestCases/polar/naca0012/inv_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/py_wrapper/custom_heat_flux/run_ad.py b/TestCases/py_wrapper/custom_heat_flux/run_ad.py index 81018a974129..cb8b945efc1c 100644 --- a/TestCases/py_wrapper/custom_heat_flux/run_ad.py +++ b/TestCases/py_wrapper/custom_heat_flux/run_ad.py @@ -2,14 +2,14 @@ ## \file run.py # \brief Unsteady adjoint heat transfer case with custom heat flux. -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/TestCases/py_wrapper/custom_inlet/run.py b/TestCases/py_wrapper/custom_inlet/run.py index 3f161dee5943..0f4c5f702ba7 100644 --- a/TestCases/py_wrapper/custom_inlet/run.py +++ b/TestCases/py_wrapper/custom_inlet/run.py @@ -2,14 +2,14 @@ ## \file run.py # \brief Unsteady inlet boundary conditions. -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/TestCases/py_wrapper/custom_load_fea/config.cfg b/TestCases/py_wrapper/custom_load_fea/config.cfg index fb3646961040..3924cb1d8e48 100644 --- a/TestCases/py_wrapper/custom_load_fea/config.cfg +++ b/TestCases/py_wrapper/custom_load_fea/config.cfg @@ -1,7 +1,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % SU2 configuration file % % Case description: 2D Beam with custom load via Python wrapper % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SOLVER= ELASTICITY diff --git a/TestCases/py_wrapper/custom_load_fea/run.py b/TestCases/py_wrapper/custom_load_fea/run.py index ee9fd36e8a9b..f7539ecea5ef 100755 --- a/TestCases/py_wrapper/custom_load_fea/run.py +++ b/TestCases/py_wrapper/custom_load_fea/run.py @@ -2,14 +2,14 @@ ## \file run.py # \brief FEA case with custom load. -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/TestCases/py_wrapper/custom_load_fea/run_ad.py b/TestCases/py_wrapper/custom_load_fea/run_ad.py index dfb9fab4fab6..fe50a2e7410b 100644 --- a/TestCases/py_wrapper/custom_load_fea/run_ad.py +++ b/TestCases/py_wrapper/custom_load_fea/run_ad.py @@ -2,14 +2,14 @@ ## \file run.py # \brief Unsteady adjoint FEA case with custom load. -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 @@ -61,6 +61,7 @@ OUTPUT_WRT_FREQ= 1 OBJECTIVE_FUNCTION= STRESS_PENALTY STRESS_PENALTY_PARAM= ( 500, 20 ) +WRT_RESTART_COMPACT= NO INNER_ITER= 20 CONV_RESIDUAL_MINVAL= -4 diff --git a/TestCases/py_wrapper/deforming_bump_in_channel/run.py b/TestCases/py_wrapper/deforming_bump_in_channel/run.py index 1533ba0b5874..368a1951f9e2 100755 --- a/TestCases/py_wrapper/deforming_bump_in_channel/run.py +++ b/TestCases/py_wrapper/deforming_bump_in_channel/run.py @@ -2,14 +2,14 @@ ## \file run.py # \brief Deforming bump in channel. -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/TestCases/py_wrapper/disc_adj_fea/flow_load_sens/configAD_fem.cfg b/TestCases/py_wrapper/disc_adj_fea/flow_load_sens/configAD_fem.cfg index 63edf6869cf6..b5d0f15d944f 100644 --- a/TestCases/py_wrapper/disc_adj_fea/flow_load_sens/configAD_fem.cfg +++ b/TestCases/py_wrapper/disc_adj_fea/flow_load_sens/configAD_fem.cfg @@ -35,7 +35,6 @@ MATERIAL_COMPRESSIBILITY= COMPRESSIBLE ELASTICITY_MODULUS=21000 POISSON_RATIO=0.4 MATERIAL_DENSITY=100 -DEAD_LOAD=NO FORMULATION_ELASTICITY_2D = PLANE_STRAIN NONLINEAR_FEM_SOLUTION_METHOD = NEWTON_RAPHSON diff --git a/TestCases/py_wrapper/disc_adj_fea/flow_load_sens/run_adjoint.py b/TestCases/py_wrapper/disc_adj_fea/flow_load_sens/run_adjoint.py index 5865cb141fea..fcb4c8bd4a89 100755 --- a/TestCases/py_wrapper/disc_adj_fea/flow_load_sens/run_adjoint.py +++ b/TestCases/py_wrapper/disc_adj_fea/flow_load_sens/run_adjoint.py @@ -3,14 +3,14 @@ ## \file run_adjoint.py # \brief Python script to launch SU2_CFD_AD and compute the sensitivity of the FEA problem respect to flow loads. # \author Ruben Sanchez -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/TestCases/py_wrapper/disc_adj_flow/mesh_disp_sens/run_adjoint.py b/TestCases/py_wrapper/disc_adj_flow/mesh_disp_sens/run_adjoint.py index 8dfa12dd0ed2..322b293c3954 100755 --- a/TestCases/py_wrapper/disc_adj_flow/mesh_disp_sens/run_adjoint.py +++ b/TestCases/py_wrapper/disc_adj_flow/mesh_disp_sens/run_adjoint.py @@ -3,14 +3,14 @@ ## \file run_adjoint.py # \brief Python script to launch SU2_CFD_AD # \author Ruben Sanchez -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/TestCases/py_wrapper/dyn_fsi/run.py b/TestCases/py_wrapper/dyn_fsi/run.py index 912ec7305eed..a770d7bbe3e1 100644 --- a/TestCases/py_wrapper/dyn_fsi/run.py +++ b/TestCases/py_wrapper/dyn_fsi/run.py @@ -2,14 +2,14 @@ ## \file run.py # \brief Unsteady FSI case with custom load. -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/TestCases/py_wrapper/flatPlate_rigidMotion/flatPlate_rigidMotion_Conf.cfg b/TestCases/py_wrapper/flatPlate_rigidMotion/flatPlate_rigidMotion_Conf.cfg index 41ea8b1fed71..477e7630f5df 100644 --- a/TestCases/py_wrapper/flatPlate_rigidMotion/flatPlate_rigidMotion_Conf.cfg +++ b/TestCases/py_wrapper/flatPlate_rigidMotion/flatPlate_rigidMotion_Conf.cfg @@ -5,7 +5,7 @@ % Author: ___________________________________________________________________ % % Institution: ______________________________________________________________ % % Date: __________ % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/py_wrapper/flatPlate_rigidMotion/launch_flatPlate_rigidMotion.py b/TestCases/py_wrapper/flatPlate_rigidMotion/launch_flatPlate_rigidMotion.py index 0a8921704664..165bab0ff222 100755 --- a/TestCases/py_wrapper/flatPlate_rigidMotion/launch_flatPlate_rigidMotion.py +++ b/TestCases/py_wrapper/flatPlate_rigidMotion/launch_flatPlate_rigidMotion.py @@ -3,14 +3,14 @@ ## \file flatPlate_rigidMotion.py # \brief Python script to launch SU2_CFD with customized unsteady boundary conditions using the Python wrapper. # \author David Thomas -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/TestCases/py_wrapper/flatPlate_unsteady_CHT/launch_unsteady_CHT_FlatPlate.py b/TestCases/py_wrapper/flatPlate_unsteady_CHT/launch_unsteady_CHT_FlatPlate.py index 0252ae0d2847..4bdbaa622519 100755 --- a/TestCases/py_wrapper/flatPlate_unsteady_CHT/launch_unsteady_CHT_FlatPlate.py +++ b/TestCases/py_wrapper/flatPlate_unsteady_CHT/launch_unsteady_CHT_FlatPlate.py @@ -3,14 +3,14 @@ ## \file launch_unsteady_CHT_FlatPlate.py # \brief Python script to launch SU2_CFD with customized unsteady boundary conditions using the Python wrapper. # \author David Thomas -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/TestCases/py_wrapper/flatPlate_unsteady_CHT/unsteady_CHT_FlatPlate_Conf.cfg b/TestCases/py_wrapper/flatPlate_unsteady_CHT/unsteady_CHT_FlatPlate_Conf.cfg index e4b16142237e..5734b053490a 100644 --- a/TestCases/py_wrapper/flatPlate_unsteady_CHT/unsteady_CHT_FlatPlate_Conf.cfg +++ b/TestCases/py_wrapper/flatPlate_unsteady_CHT/unsteady_CHT_FlatPlate_Conf.cfg @@ -5,7 +5,7 @@ % Author: David THOMAS % % Institution: University of Liège % % Date: 12/12/2017 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/py_wrapper/translating_NACA0012/config.cfg b/TestCases/py_wrapper/translating_NACA0012/config.cfg index a78809272390..3deaf8fc1b62 100644 --- a/TestCases/py_wrapper/translating_NACA0012/config.cfg +++ b/TestCases/py_wrapper/translating_NACA0012/config.cfg @@ -43,7 +43,7 @@ MARKER_DEFORM_MESH= ( airfoil ) % DISCRETIZATION METHODS % CONV_NUM_METHOD_FLOW= ROE -MUSCL_FLOW= NO +MUSCL_FLOW= YES NUM_METHOD_GRAD= GREEN_GAUSS SLOPE_LIMITER_FLOW= VENKATAKRISHNAN_WANG VENKAT_LIMITER_COEFF= 0.1 @@ -54,7 +54,7 @@ CFL_NUMBER= 1000 CFL_ADAPT= NO % MGLEVEL= 3 -MGCYCLE= W_CYCLE +MGCYCLE= V_CYCLE MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) MG_POST_SMOOTH= ( 0, 0, 0, 0 ) MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) @@ -63,13 +63,13 @@ MG_DAMP_PROLONGATION= 0.7 % LINEAR_SOLVER= FGMRES -LINEAR_SOLVER_PREC= ILU -LINEAR_SOLVER_ERROR= 1.0e-6 -LINEAR_SOLVER_ITER= 25 +LINEAR_SOLVER_PREC= LU_SGS +LINEAR_SOLVER_ERROR= 0.1 +LINEAR_SOLVER_ITER= 5 % CONVERGENCE PARAMETERS % -ITER= 2500 +ITER= 100 CONV_FIELD= RMS_DENSITY CONV_RESIDUAL_MINVAL= -9 @@ -77,5 +77,5 @@ CONV_RESIDUAL_MINVAL= -9 % MESH_FILENAME= ../../euler/naca0012/mesh_NACA0012_inv.su2 MESH_FORMAT= SU2 -SCREEN_OUTPUT= (INNER_ITER, RMS_RES, LIFT, DRAG, MOMENT_X, MOMENT_Y, MOMENT_Z, LINSOL_RES, LINSOL_ITER) +SCREEN_OUTPUT= (INNER_ITER, RMS_RES, LIFT, DRAG, MOMENT_X, MOMENT_Y, MOMENT_Z, LINSOL) HISTORY_OUTPUT= (INNER_ITER, RMS_RES, AERO_COEFF) diff --git a/TestCases/py_wrapper/translating_NACA0012/forces_0.csv.ref b/TestCases/py_wrapper/translating_NACA0012/forces_0.csv.ref index 56ad73bb9aa8..d9998aced7cb 100644 --- a/TestCases/py_wrapper/translating_NACA0012/forces_0.csv.ref +++ b/TestCases/py_wrapper/translating_NACA0012/forces_0.csv.ref @@ -1,200 +1,200 @@ -199, -0.85, -0.00, 0.00 -0, -2.66, 18.33, 0.00 -1, -3.73, 25.70, 0.00 -2, -4.53, 31.27, 0.00 -3, -5.24, 36.23, 0.00 -4, -5.81, 40.33, 0.00 -5, -6.25, 43.55, 0.00 -6, -6.60, 46.13, 0.00 -7, -6.83, 47.96, 0.00 -8, -6.95, 49.09, 0.00 -9, -6.97, 49.54, 0.00 -10, -6.90, 49.35, 0.00 -11, -6.74, 48.57, 0.00 -12, -6.50, 47.14, 0.00 -13, -6.17, 45.13, 0.00 -14, -5.76, 42.53, 0.00 -15, -5.29, 39.38, 0.00 -16, -4.75, 35.75, 0.00 -17, -4.16, 31.65, 0.00 -18, -3.53, 27.09, 0.00 -19, -2.85, 22.14, 0.00 -20, -2.14, 16.79, 0.00 -21, -1.39, 11.10, 0.00 -22, -0.63, 5.06, 0.00 -23, 0.16, -1.33, 0.00 -24, 0.98, -8.10, 0.00 -25, 1.82, -15.27, 0.00 -26, 2.68, -22.82, 0.00 -27, 3.56, -30.76, 0.00 -28, 4.45, -39.00, 0.00 -29, 5.32, -47.44, 0.00 -30, 6.19, -56.07, 0.00 -31, 7.05, -64.97, 0.00 -32, 7.91, -74.28, 0.00 -33, 8.78, -83.97, 0.00 -34, 9.63, -93.91, 0.00 -35, 10.46, -104.09, 0.00 -36, 11.25, -114.37, 0.00 -37, 12.00, -124.73, 0.00 -38, 12.71, -135.28, 0.00 -39, 13.38, -145.98, 0.00 -40, 13.99, -156.79, 0.00 -41, 14.55, -167.72, 0.00 -42, 15.06, -178.80, 0.00 -43, 15.48, -189.92, 0.00 -44, 15.83, -201.03, 0.00 -45, 16.07, -211.97, 0.00 -46, 16.22, -222.82, 0.00 -47, 16.27, -233.68, 0.00 -48, 16.23, -244.83, 0.00 -49, 16.13, -256.65, 0.00 -50, 15.93, -269.12, 0.00 -51, 15.62, -282.01, 0.00 -52, 15.14, -294.70, 0.00 -53, 14.49, -307.24, 0.00 -54, 13.68, -319.91, 0.00 -55, 12.67, -332.16, 0.00 -56, 11.42, -342.95, 0.00 -57, 9.91, -351.31, 0.00 -58, 8.15, -356.48, 0.00 -59, 6.19, -358.24, 0.00 -60, 4.07, -357.17, 0.00 -61, 1.85, -353.80, 0.00 -62, -0.43, -348.10, 0.00 -63, -2.73, -340.32, 0.00 -64, -5.01, -331.03, 0.00 -65, -7.24, -320.26, 0.00 -66, -9.38, -308.18, 0.00 -67, -11.42, -295.32, 0.00 -68, -13.34, -281.72, 0.00 -69, -15.11, -267.62, 0.00 -70, -16.72, -253.15, 0.00 -71, -18.14, -238.20, 0.00 -72, -19.34, -222.69, 0.00 -73, -20.27, -206.50, 0.00 -74, -20.91, -189.85, 0.00 -75, -21.24, -172.83, 0.00 -76, -21.19, -155.22, 0.00 -77, -20.73, -137.21, 0.00 -78, -19.84, -118.97, 0.00 -79, -18.47, -100.51, 0.00 -80, -16.59, -82.08, 0.00 -81, -14.17, -63.76, 0.00 -82, -11.16, -45.67, 0.00 -83, -7.51, -27.92, 0.00 -84, -3.16, -10.66, 0.00 -85, 1.96, 5.99, 0.00 -86, 7.98, 21.97, 0.00 -87, 15.01, 37.12, 0.00 -88, 23.22, 51.25, 0.00 -89, 32.70, 63.95, 0.00 -90, 43.60, 74.81, 0.00 -91, 56.10, 83.39, 0.00 -92, 70.04, 88.70, 0.00 -93, 85.41, 90.05, 0.00 -94, 101.82, 86.49, 0.00 -95, 118.17, 76.97, 0.00 -96, 133.74, 61.30, 0.00 -97, 147.39, 39.89, 0.00 -98, 111.90, 15.02, 0.00 -99, 71.22, -0.00, 0.00 -100, 109.26, -14.66, 0.00 -101, 137.60, -37.24, 0.00 -102, 115.95, -53.15, 0.00 -103, 93.75, -61.06, 0.00 -104, 72.27, -61.39, 0.00 -105, 52.36, -55.20, 0.00 -106, 34.79, -44.05, 0.00 -107, 19.66, -29.23, 0.00 -108, 6.81, -11.68, 0.00 -109, -3.93, 7.68, 0.00 -110, -12.86, 28.37, 0.00 -111, -20.21, 49.96, 0.00 -112, -26.23, 72.22, 0.00 -113, -31.05, 94.79, 0.00 -114, -34.88, 117.65, 0.00 -115, -37.90, 140.89, 0.00 -116, -40.20, 164.49, 0.00 -117, -41.88, 188.42, 0.00 -118, -43.00, 212.71, 0.00 -119, -43.62, 237.42, 0.00 -120, -43.64, 261.69, 0.00 -121, -43.10, 285.24, 0.00 -122, -42.11, 308.46, 0.00 -123, -40.72, 331.35, 0.00 -124, -38.94, 353.54, 0.00 -125, -36.84, 375.42, 0.00 -126, -34.48, 397.10, 0.00 -127, -31.85, 418.29, 0.00 -128, -28.97, 438.71, 0.00 -129, -25.85, 458.00, 0.00 -130, -22.55, 476.33, 0.00 -131, -19.10, 493.80, 0.00 -132, -15.54, 510.37, 0.00 -133, -11.90, 526.39, 0.00 -134, -8.20, 541.54, 0.00 -135, -4.46, 556.04, 0.00 -136, -0.70, 570.26, 0.00 -137, 3.05, 583.60, 0.00 -138, 6.79, 596.04, 0.00 -139, 10.50, 608.18, 0.00 -140, 14.17, 619.60, 0.00 -141, 17.77, 629.84, 0.00 -142, 21.29, 639.37, 0.00 -143, 24.72, 648.06, 0.00 -144, 28.03, 655.33, 0.00 -145, 31.19, 661.08, 0.00 -146, 34.20, 665.74, 0.00 -147, 37.05, 669.08, 0.00 -148, 39.71, 670.85, 0.00 -149, 42.17, 671.22, 0.00 -150, 44.38, 669.34, 0.00 -151, 46.26, 664.42, 0.00 -152, 47.51, 652.70, 0.00 -153, 46.78, 616.94, 0.00 -154, 39.70, 504.23, 0.00 -155, 24.94, 305.93, 0.00 -156, 16.44, 195.28, 0.00 -157, 13.94, 160.59, 0.00 -158, 13.18, 147.63, 0.00 -159, 12.74, 138.97, 0.00 -160, 12.29, 130.81, 0.00 -161, 11.80, 122.63, 0.00 -162, 11.26, 114.42, 0.00 -163, 10.66, 106.07, 0.00 -164, 10.01, 97.60, 0.00 -165, 9.32, 89.11, 0.00 -166, 8.57, 80.48, 0.00 -167, 7.78, 71.77, 0.00 -168, 6.96, 63.07, 0.00 -169, 6.10, 54.40, 0.00 -170, 5.22, 45.80, 0.00 -171, 4.33, 37.37, 0.00 -172, 3.44, 29.24, 0.00 -173, 2.56, 21.44, 0.00 -174, 1.69, 13.95, 0.00 -175, 0.83, 6.81, 0.00 -176, 0.01, 0.05, 0.00 -177, -0.80, -6.35, 0.00 -178, -1.58, -12.38, 0.00 -179, -2.32, -18.05, 0.00 -180, -3.04, -23.33, 0.00 -181, -3.71, -28.22, 0.00 -182, -4.34, -32.66, 0.00 -183, -4.92, -36.62, 0.00 -184, -5.43, -40.09, 0.00 -185, -5.87, -42.98, 0.00 -186, -6.24, -45.27, 0.00 -187, -6.52, -46.94, 0.00 -188, -6.70, -47.94, 0.00 -189, -6.80, -48.33, 0.00 -190, -6.80, -48.04, 0.00 -191, -6.70, -47.05, 0.00 -192, -6.48, -45.33, 0.00 -193, -6.15, -42.84, 0.00 -194, -5.72, -39.70, 0.00 -195, -5.15, -35.65, 0.00 -196, -4.45, -30.72, 0.00 -197, -3.65, -25.15, 0.00 -198, -2.59, -17.80, 0.00 +199, -0.95, -0.00, 0.00 +0, -2.89, 19.93, 0.00 +1, -4.16, 28.63, 0.00 +2, -5.19, 35.84, 0.00 +3, -6.11, 42.27, 0.00 +4, -6.89, 47.83, 0.00 +5, -7.53, 52.42, 0.00 +6, -8.06, 56.37, 0.00 +7, -8.47, 59.49, 0.00 +8, -8.76, 61.87, 0.00 +9, -8.94, 63.52, 0.00 +10, -9.02, 64.50, 0.00 +11, -9.01, 64.87, 0.00 +12, -8.90, 64.57, 0.00 +13, -8.70, 63.67, 0.00 +14, -8.42, 62.15, 0.00 +15, -8.06, 60.06, 0.00 +16, -7.64, 57.51, 0.00 +17, -7.16, 54.41, 0.00 +18, -6.62, 50.82, 0.00 +19, -6.02, 46.77, 0.00 +20, -5.38, 42.25, 0.00 +21, -4.69, 37.33, 0.00 +22, -3.97, 31.98, 0.00 +23, -3.21, 26.23, 0.00 +24, -2.43, 20.13, 0.00 +25, -1.63, 13.66, 0.00 +26, -0.80, 6.84, 0.00 +27, 0.03, -0.29, 0.00 +28, 0.88, -7.75, 0.00 +29, 1.74, -15.50, 0.00 +30, 2.60, -23.53, 0.00 +31, 3.45, -31.83, 0.00 +32, 4.31, -40.43, 0.00 +33, 5.15, -49.28, 0.00 +34, 5.98, -58.35, 0.00 +35, 6.80, -67.68, 0.00 +36, 7.60, -77.26, 0.00 +37, 8.37, -87.01, 0.00 +38, 9.12, -97.01, 0.00 +39, 9.83, -107.21, 0.00 +40, 10.49, -117.56, 0.00 +41, 11.11, -128.08, 0.00 +42, 11.69, -138.80, 0.00 +43, 12.20, -149.69, 0.00 +44, 12.65, -160.70, 0.00 +45, 13.03, -171.78, 0.00 +46, 13.32, -182.92, 0.00 +47, 13.52, -194.12, 0.00 +48, 13.61, -205.31, 0.00 +49, 13.60, -216.52, 0.00 +50, 13.47, -227.51, 0.00 +51, 13.18, -238.10, 0.00 +52, 12.75, -248.28, 0.00 +53, 12.23, -259.17, 0.00 +54, 11.51, -269.17, 0.00 +55, 10.25, -268.73, 0.00 +56, 8.38, -251.80, 0.00 +57, 7.08, -251.06, 0.00 +58, 7.58, -331.40, 0.00 +59, 7.34, -425.09, 0.00 +60, 5.05, -443.58, 0.00 +61, 2.27, -434.14, 0.00 +62, -0.52, -424.59, 0.00 +63, -3.33, -414.88, 0.00 +64, -6.11, -403.87, 0.00 +65, -8.85, -391.44, 0.00 +66, -11.50, -377.71, 0.00 +67, -14.04, -363.05, 0.00 +68, -16.44, -347.37, 0.00 +69, -18.68, -330.91, 0.00 +70, -20.72, -313.80, 0.00 +71, -22.54, -296.04, 0.00 +72, -24.12, -277.82, 0.00 +73, -25.43, -259.16, 0.00 +74, -26.46, -240.22, 0.00 +75, -27.16, -221.02, 0.00 +76, -27.48, -201.33, 0.00 +77, -27.42, -181.48, 0.00 +78, -26.96, -161.64, 0.00 +79, -26.03, -141.69, 0.00 +80, -24.63, -121.84, 0.00 +81, -22.68, -102.06, 0.00 +82, -20.15, -82.45, 0.00 +83, -16.97, -63.10, 0.00 +84, -13.07, -44.09, 0.00 +85, -8.36, -25.53, 0.00 +86, -2.73, -7.52, 0.00 +87, 3.97, 9.81, 0.00 +88, 11.89, 26.25, 0.00 +89, 21.22, 41.51, 0.00 +90, 32.12, 55.12, 0.00 +91, 44.88, 66.72, 0.00 +92, 59.51, 75.37, 0.00 +93, 76.12, 80.27, 0.00 +94, 94.45, 80.24, 0.00 +95, 113.03, 73.62, 0.00 +96, 129.92, 59.55, 0.00 +97, 142.64, 38.61, 0.00 +98, 108.56, 14.57, 0.00 +99, 69.98, -0.00, 0.00 +100, 103.93, -13.95, 0.00 +101, 125.25, -33.90, 0.00 +102, 102.02, -46.76, 0.00 +103, 77.51, -50.49, 0.00 +104, 53.83, -45.73, 0.00 +105, 32.59, -34.37, 0.00 +106, 14.60, -18.48, 0.00 +107, -0.30, 0.44, 0.00 +108, -12.53, 21.51, 0.00 +109, -22.47, 43.94, 0.00 +110, -30.49, 67.29, 0.00 +111, -36.85, 91.11, 0.00 +112, -41.91, 115.39, 0.00 +113, -45.81, 139.82, 0.00 +114, -48.77, 164.48, 0.00 +115, -50.93, 189.36, 0.00 +116, -52.38, 214.32, 0.00 +117, -53.20, 239.37, 0.00 +118, -53.43, 264.32, 0.00 +119, -53.12, 289.11, 0.00 +120, -52.35, 313.88, 0.00 +121, -51.12, 338.31, 0.00 +122, -49.52, 362.75, 0.00 +123, -47.56, 387.00, 0.00 +124, -45.22, 410.58, 0.00 +125, -42.59, 434.00, 0.00 +126, -39.71, 457.30, 0.00 +127, -36.56, 480.08, 0.00 +128, -33.16, 502.25, 0.00 +129, -29.56, 523.72, 0.00 +130, -25.78, 544.66, 0.00 +131, -21.86, 565.07, 0.00 +132, -17.80, 584.72, 0.00 +133, -13.65, 603.83, 0.00 +134, -9.41, 621.93, 0.00 +135, -5.12, 639.20, 0.00 +136, -0.81, 656.06, 0.00 +137, 3.51, 671.80, 0.00 +138, 7.82, 686.38, 0.00 +139, 12.10, 700.45, 0.00 +140, 16.32, 713.56, 0.00 +141, 20.46, 725.19, 0.00 +142, 24.51, 736.06, 0.00 +143, 28.46, 746.15, 0.00 +144, 32.29, 754.94, 0.00 +145, 35.97, 762.42, 0.00 +146, 39.51, 769.08, 0.00 +147, 42.90, 774.72, 0.00 +148, 46.11, 779.11, 0.00 +149, 49.18, 782.75, 0.00 +150, 52.06, 785.17, 0.00 +151, 54.77, 786.61, 0.00 +152, 57.30, 787.12, 0.00 +153, 59.67, 786.85, 0.00 +154, 61.83, 785.26, 0.00 +155, 63.48, 778.68, 0.00 +156, 67.01, 795.78, 0.00 +157, 59.18, 681.93, 0.00 +158, 2.62, 29.33, 0.00 +159, -2.31, -25.18, 0.00 +160, 0.55, 5.86, 0.00 +161, 0.34, 3.53, 0.00 +162, 0.33, 3.30, 0.00 +163, 0.29, 2.87, 0.00 +164, 0.12, 1.20, 0.00 +165, -0.13, -1.27, 0.00 +166, -0.46, -4.36, 0.00 +167, -0.86, -7.92, 0.00 +168, -1.30, -11.82, 0.00 +169, -1.79, -15.99, 0.00 +170, -2.32, -20.31, 0.00 +171, -2.86, -24.72, 0.00 +172, -3.42, -29.14, 0.00 +173, -4.00, -33.56, 0.00 +174, -4.58, -37.85, 0.00 +175, -5.15, -41.99, 0.00 +176, -5.71, -46.00, 0.00 +177, -6.25, -49.75, 0.00 +178, -6.77, -53.23, 0.00 +179, -7.26, -56.43, 0.00 +180, -7.72, -59.27, 0.00 +181, -8.13, -61.77, 0.00 +182, -8.49, -63.87, 0.00 +183, -8.79, -65.51, 0.00 +184, -9.04, -66.76, 0.00 +185, -9.23, -67.51, 0.00 +186, -9.33, -67.71, 0.00 +187, -9.36, -67.37, 0.00 +188, -9.29, -66.42, 0.00 +189, -9.14, -64.91, 0.00 +190, -8.89, -62.78, 0.00 +191, -8.54, -59.98, 0.00 +192, -8.08, -56.48, 0.00 +193, -7.50, -52.21, 0.00 +194, -6.82, -47.34, 0.00 +195, -6.01, -41.55, 0.00 +196, -5.06, -34.95, 0.00 +197, -4.01, -27.61, 0.00 +198, -2.73, -18.81, 0.00 diff --git a/TestCases/py_wrapper/updated_moving_frame_NACA12/config.cfg b/TestCases/py_wrapper/updated_moving_frame_NACA12/config.cfg index 449248bf1695..7417a173e403 100644 --- a/TestCases/py_wrapper/updated_moving_frame_NACA12/config.cfg +++ b/TestCases/py_wrapper/updated_moving_frame_NACA12/config.cfg @@ -54,7 +54,12 @@ CFL_NUMBER= 1e3 CFL_ADAPT= NO % MGLEVEL= 3 -MGCYCLE= W_CYCLE +MGCYCLE= V_CYCLE +MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) +MG_POST_SMOOTH= ( 0, 0, 0, 0 ) +MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) +MG_DAMP_RESTRICTION= 0.7 +MG_DAMP_PROLONGATION= 0.7 % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= ILU diff --git a/TestCases/py_wrapper/updated_moving_frame_NACA12/forces_0.csv.ref b/TestCases/py_wrapper/updated_moving_frame_NACA12/forces_0.csv.ref index 2e4f90bda43d..4eacedc90eff 100644 --- a/TestCases/py_wrapper/updated_moving_frame_NACA12/forces_0.csv.ref +++ b/TestCases/py_wrapper/updated_moving_frame_NACA12/forces_0.csv.ref @@ -1,200 +1,200 @@ -199, -1.01, -0.00, 0.00 -0, -2.98, 20.50, 0.00 -1, -3.99, 27.46, 0.00 -2, -5.22, 36.06, 0.00 -3, -6.10, 42.20, 0.00 -4, -6.90, 47.88, 0.00 -5, -7.54, 52.52, 0.00 -6, -8.08, 56.52, 0.00 -7, -8.50, 59.69, 0.00 -8, -8.79, 62.11, 0.00 -9, -8.98, 63.80, 0.00 -10, -9.06, 64.81, 0.00 -11, -9.06, 65.22, 0.00 -12, -8.95, 64.94, 0.00 -13, -8.75, 64.06, 0.00 -14, -8.48, 62.56, 0.00 -15, -8.12, 60.48, 0.00 -16, -7.70, 57.92, 0.00 -17, -7.21, 54.81, 0.00 -18, -6.66, 51.20, 0.00 -19, -6.07, 47.12, 0.00 -20, -5.42, 42.57, 0.00 -21, -4.73, 37.59, 0.00 -22, -4.00, 32.19, 0.00 -23, -3.23, 26.37, 0.00 -24, -2.44, 20.21, 0.00 -25, -1.63, 13.66, 0.00 -26, -0.79, 6.76, 0.00 -27, 0.05, -0.45, 0.00 -28, 0.91, -7.99, 0.00 -29, 1.77, -15.81, 0.00 -30, 2.64, -23.91, 0.00 -31, 3.50, -32.27, 0.00 -32, 4.36, -40.90, 0.00 -33, 5.20, -49.76, 0.00 -34, 6.03, -58.80, 0.00 -35, 6.84, -68.06, 0.00 -36, 7.63, -77.50, 0.00 -37, 8.37, -87.04, 0.00 -38, 9.09, -96.70, 0.00 -39, 9.76, -106.43, 0.00 -40, 10.37, -116.12, 0.00 -41, 10.91, -125.73, 0.00 -42, 11.39, -135.21, 0.00 -43, 11.77, -144.39, 0.00 -44, 12.05, -153.08, 0.00 -45, 12.21, -161.05, 0.00 -46, 12.22, -167.88, 0.00 -47, 12.01, -172.51, 0.00 -48, 11.61, -175.12, 0.00 -49, 11.25, -179.01, 0.00 -50, 10.12, -170.90, 0.00 -51, 6.24, -112.75, 0.00 -52, 6.61, -128.63, 0.00 -53, 20.84, -441.83, 0.00 -54, 25.65, -599.65, 0.00 -55, 21.77, -570.80, 0.00 -56, 18.66, -560.26, 0.00 -57, 15.64, -554.49, 0.00 -58, 12.51, -546.85, 0.00 -59, 9.28, -537.57, 0.00 -60, 6.01, -527.15, 0.00 -61, 2.70, -515.89, 0.00 -62, -0.62, -503.33, 0.00 -63, -3.92, -489.55, 0.00 -64, -7.19, -475.11, 0.00 -65, -10.39, -459.75, 0.00 -66, -13.50, -443.31, 0.00 -67, -16.49, -426.20, 0.00 -68, -19.33, -408.27, 0.00 -69, -22.00, -389.78, 0.00 -70, -24.49, -370.85, 0.00 -71, -26.76, -351.39, 0.00 +199, -0.96, -0.00, 0.00 +0, -2.92, 20.12, 0.00 +1, -4.12, 28.38, 0.00 +2, -5.19, 35.79, 0.00 +3, -6.11, 42.26, 0.00 +4, -6.91, 47.93, 0.00 +5, -7.55, 52.59, 0.00 +6, -8.09, 56.59, 0.00 +7, -8.51, 59.77, 0.00 +8, -8.81, 62.19, 0.00 +9, -8.99, 63.88, 0.00 +10, -9.08, 64.90, 0.00 +11, -9.07, 65.31, 0.00 +12, -8.96, 65.04, 0.00 +13, -8.77, 64.16, 0.00 +14, -8.49, 62.66, 0.00 +15, -8.13, 60.58, 0.00 +16, -7.71, 58.02, 0.00 +17, -7.23, 54.91, 0.00 +18, -6.68, 51.30, 0.00 +19, -6.08, 47.23, 0.00 +20, -5.43, 42.67, 0.00 +21, -4.74, 37.69, 0.00 +22, -4.01, 32.30, 0.00 +23, -3.24, 26.47, 0.00 +24, -2.46, 20.31, 0.00 +25, -1.64, 13.76, 0.00 +26, -0.81, 6.86, 0.00 +27, 0.04, -0.35, 0.00 +28, 0.90, -7.89, 0.00 +29, 1.76, -15.72, 0.00 +30, 2.63, -23.81, 0.00 +31, 3.49, -32.17, 0.00 +32, 4.35, -40.81, 0.00 +33, 5.19, -49.67, 0.00 +34, 6.02, -58.71, 0.00 +35, 6.83, -67.98, 0.00 +36, 7.62, -77.42, 0.00 +37, 8.37, -86.96, 0.00 +38, 9.08, -96.64, 0.00 +39, 9.75, -106.37, 0.00 +40, 10.36, -116.07, 0.00 +41, 10.91, -125.70, 0.00 +42, 11.38, -135.20, 0.00 +43, 11.77, -144.41, 0.00 +44, 12.06, -153.14, 0.00 +45, 12.22, -161.12, 0.00 +46, 12.23, -168.00, 0.00 +47, 12.04, -172.93, 0.00 +48, 11.64, -175.62, 0.00 +49, 11.16, -177.56, 0.00 +50, 10.14, -171.34, 0.00 +51, 7.30, -131.80, 0.00 +52, 6.53, -127.05, 0.00 +53, 19.34, -410.00, 0.00 +54, 25.58, -598.18, 0.00 +55, 21.94, -575.15, 0.00 +56, 18.63, -559.59, 0.00 +57, 15.63, -554.21, 0.00 +58, 12.51, -546.77, 0.00 +59, 9.28, -537.48, 0.00 +60, 6.01, -527.06, 0.00 +61, 2.70, -515.82, 0.00 +62, -0.62, -503.27, 0.00 +63, -3.92, -489.49, 0.00 +64, -7.19, -475.06, 0.00 +65, -10.39, -459.70, 0.00 +66, -13.50, -443.27, 0.00 +67, -16.48, -426.16, 0.00 +68, -19.32, -408.24, 0.00 +69, -22.00, -389.76, 0.00 +70, -24.49, -370.83, 0.00 +71, -26.76, -351.38, 0.00 72, -28.78, -331.47, 0.00 -73, -30.52, -311.04, 0.00 -74, -31.97, -290.33, 0.00 -75, -33.11, -269.42, 0.00 -76, -33.86, -248.08, 0.00 -77, -34.24, -226.61, 0.00 -78, -34.22, -205.20, 0.00 -79, -33.74, -183.64, 0.00 -80, -32.78, -162.19, 0.00 -81, -31.29, -140.79, 0.00 -82, -29.21, -119.49, 0.00 -83, -26.48, -98.43, 0.00 -84, -23.02, -77.63, 0.00 -85, -18.75, -57.22, 0.00 -86, -13.54, -37.28, 0.00 -87, -7.23, -17.89, 0.00 -88, 0.32, 0.71, 0.00 -89, 9.35, 18.28, 0.00 -90, 20.02, 34.35, 0.00 -91, 32.65, 48.54, 0.00 -92, 47.34, 59.96, 0.00 -93, 64.24, 67.74, 0.00 -94, 83.11, 70.60, 0.00 -95, 102.71, 66.90, 0.00 -96, 121.38, 55.64, 0.00 -97, 137.08, 37.10, 0.00 -98, 106.89, 14.34, 0.00 -99, 69.93, -0.00, 0.00 -100, 104.81, -14.06, 0.00 -101, 129.39, -35.02, 0.00 -102, 108.98, -49.95, 0.00 -103, 86.90, -56.60, 0.00 -104, 64.97, -55.19, 0.00 -105, 44.71, -47.14, 0.00 -106, 27.08, -34.30, 0.00 -107, 12.21, -18.16, 0.00 -108, -0.23, 0.39, 0.00 -109, -10.50, 20.54, 0.00 -110, -18.96, 41.85, 0.00 -111, -25.82, 63.84, 0.00 -112, -31.39, 86.44, 0.00 -113, -35.84, 109.39, 0.00 -114, -39.33, 132.66, 0.00 -115, -42.01, 156.16, 0.00 -116, -43.95, 179.80, 0.00 -117, -45.26, 203.64, 0.00 -118, -45.98, 227.47, 0.00 -119, -46.16, 251.27, 0.00 -120, -45.89, 275.14, 0.00 -121, -45.14, 298.74, 0.00 -122, -44.00, 322.34, 0.00 -123, -42.49, 345.71, 0.00 -124, -40.58, 368.50, 0.00 -125, -38.39, 391.21, 0.00 -126, -35.94, 413.88, 0.00 -127, -33.21, 436.09, 0.00 -128, -30.22, 457.70, 0.00 -129, -27.02, 478.65, 0.00 -130, -23.62, 499.09, 0.00 -131, -20.08, 519.03, 0.00 -132, -16.39, 538.22, 0.00 -133, -12.59, 556.86, 0.00 -134, -8.70, 574.51, 0.00 -135, -4.74, 591.34, 0.00 -136, -0.75, 607.73, 0.00 -137, 3.26, 623.00, 0.00 -138, 7.26, 637.13, 0.00 -139, 11.24, 650.73, 0.00 -140, 15.17, 663.34, 0.00 -141, 19.03, 674.54, 0.00 -142, 22.81, 684.95, 0.00 -143, 26.50, 694.58, 0.00 -144, 30.06, 702.94, 0.00 -145, 33.49, 710.01, 0.00 -146, 36.79, 716.23, 0.00 -147, 39.95, 721.39, 0.00 -148, 42.93, 725.31, 0.00 -149, 45.77, 728.51, 0.00 -150, 48.44, 730.59, 0.00 -151, 50.61, 726.85, 0.00 -152, 53.86, 739.83, 0.00 -153, 53.31, 702.96, 0.00 -154, 8.15, 103.49, 0.00 -155, -2.34, -28.69, 0.00 -156, 3.10, 36.88, 0.00 -157, 3.81, 43.93, 0.00 -158, 3.88, 43.46, 0.00 -159, 4.18, 45.56, 0.00 -160, 4.24, 45.15, 0.00 -161, 4.13, 42.94, 0.00 -162, 3.90, 39.62, 0.00 -163, 3.56, 35.42, 0.00 -164, 3.14, 30.58, 0.00 -165, 2.64, 25.27, 0.00 -166, 2.09, 19.60, 0.00 -167, 1.48, 13.68, 0.00 -168, 0.84, 7.64, 0.00 -169, 0.17, 1.53, 0.00 -170, -0.52, -4.58, 0.00 -171, -1.23, -10.62, 0.00 -172, -1.94, -16.53, 0.00 -173, -2.66, -22.30, 0.00 -174, -3.37, -27.85, 0.00 -175, -4.06, -33.13, 0.00 -176, -4.74, -38.17, 0.00 -177, -5.39, -42.87, 0.00 -178, -6.01, -47.21, 0.00 +73, -30.53, -311.04, 0.00 +74, -31.98, -290.35, 0.00 +75, -33.11, -269.46, 0.00 +76, -33.87, -248.14, 0.00 +77, -34.25, -226.70, 0.00 +78, -34.24, -205.31, 0.00 +79, -33.76, -183.76, 0.00 +80, -32.81, -162.32, 0.00 +81, -31.32, -140.93, 0.00 +82, -29.24, -119.65, 0.00 +83, -26.52, -98.60, 0.00 +84, -23.07, -77.82, 0.00 +85, -18.81, -57.42, 0.00 +86, -13.61, -37.46, 0.00 +87, -7.31, -18.07, 0.00 +88, 0.25, 0.55, 0.00 +89, 9.28, 18.15, 0.00 +90, 20.00, 34.31, 0.00 +91, 32.69, 48.60, 0.00 +92, 47.51, 60.17, 0.00 +93, 64.67, 68.19, 0.00 +94, 84.00, 71.35, 0.00 +95, 104.26, 67.91, 0.00 +96, 123.59, 56.65, 0.00 +97, 139.79, 37.83, 0.00 +98, 109.03, 14.63, 0.00 +99, 71.37, -0.00, 0.00 +100, 106.71, -14.32, 0.00 +101, 131.85, -35.68, 0.00 +102, 110.88, -50.82, 0.00 +103, 88.07, -57.36, 0.00 +104, 65.47, -55.62, 0.00 +105, 44.83, -47.26, 0.00 +106, 27.03, -34.23, 0.00 +107, 12.07, -17.95, 0.00 +108, -0.39, 0.67, 0.00 +109, -10.68, 20.88, 0.00 +110, -19.12, 42.19, 0.00 +111, -25.97, 64.20, 0.00 +112, -31.53, 86.81, 0.00 +113, -35.96, 109.75, 0.00 +114, -39.44, 133.01, 0.00 +115, -42.10, 156.51, 0.00 +116, -44.03, 180.14, 0.00 +117, -45.33, 203.94, 0.00 +118, -46.04, 227.76, 0.00 +119, -46.21, 251.54, 0.00 +120, -45.93, 275.39, 0.00 +121, -45.17, 298.97, 0.00 +122, -44.03, 322.56, 0.00 +123, -42.51, 345.93, 0.00 +124, -40.61, 368.71, 0.00 +125, -38.41, 391.41, 0.00 +126, -35.95, 414.07, 0.00 +127, -33.22, 436.26, 0.00 +128, -30.23, 457.86, 0.00 +129, -27.02, 478.79, 0.00 +130, -23.63, 499.23, 0.00 +131, -20.08, 519.16, 0.00 +132, -16.39, 538.35, 0.00 +133, -12.59, 557.00, 0.00 +134, -8.70, 574.66, 0.00 +135, -4.74, 591.49, 0.00 +136, -0.75, 607.88, 0.00 +137, 3.26, 623.17, 0.00 +138, 7.26, 637.30, 0.00 +139, 11.24, 650.91, 0.00 +140, 15.18, 663.54, 0.00 +141, 19.03, 674.74, 0.00 +142, 22.82, 685.17, 0.00 +143, 26.50, 694.80, 0.00 +144, 30.07, 703.15, 0.00 +145, 33.50, 710.22, 0.00 +146, 36.80, 716.44, 0.00 +147, 39.96, 721.63, 0.00 +148, 42.95, 725.58, 0.00 +149, 45.78, 728.71, 0.00 +150, 48.38, 729.69, 0.00 +151, 50.59, 726.67, 0.00 +152, 54.68, 751.14, 0.00 +153, 51.25, 675.81, 0.00 +154, 6.97, 88.47, 0.00 +155, -0.21, -2.53, 0.00 +156, 3.40, 40.39, 0.00 +157, 3.83, 44.10, 0.00 +158, 4.05, 45.38, 0.00 +159, 4.28, 46.69, 0.00 +160, 4.30, 45.78, 0.00 +161, 4.17, 43.39, 0.00 +162, 3.93, 39.96, 0.00 +163, 3.59, 35.69, 0.00 +164, 3.16, 30.80, 0.00 +165, 2.66, 25.45, 0.00 +166, 2.10, 19.75, 0.00 +167, 1.50, 13.82, 0.00 +168, 0.86, 7.76, 0.00 +169, 0.18, 1.63, 0.00 +170, -0.51, -4.49, 0.00 +171, -1.22, -10.54, 0.00 +172, -1.93, -16.46, 0.00 +173, -2.65, -22.24, 0.00 +174, -3.36, -27.80, 0.00 +175, -4.05, -33.09, 0.00 +176, -4.73, -38.14, 0.00 +177, -5.39, -42.85, 0.00 +178, -6.01, -47.20, 0.00 179, -6.59, -51.20, 0.00 180, -7.13, -54.76, 0.00 -181, -7.62, -57.90, 0.00 -182, -8.05, -60.58, 0.00 -183, -8.42, -62.75, 0.00 -184, -8.74, -64.48, 0.00 -185, -8.97, -65.65, 0.00 -186, -9.13, -66.23, 0.00 -187, -9.20, -66.23, 0.00 -188, -9.17, -65.58, 0.00 -189, -9.06, -64.33, 0.00 -190, -8.84, -62.44, 0.00 -191, -8.52, -59.84, 0.00 -192, -8.08, -56.51, 0.00 +181, -7.62, -57.91, 0.00 +182, -8.06, -60.60, 0.00 +183, -8.43, -62.77, 0.00 +184, -8.74, -64.50, 0.00 +185, -8.98, -65.68, 0.00 +186, -9.13, -66.26, 0.00 +187, -9.20, -66.26, 0.00 +188, -9.17, -65.60, 0.00 +189, -9.06, -64.36, 0.00 +190, -8.84, -62.46, 0.00 +191, -8.52, -59.85, 0.00 +192, -8.08, -56.52, 0.00 193, -7.52, -52.37, 0.00 -194, -6.86, -47.60, 0.00 +194, -6.86, -47.59, 0.00 195, -6.05, -41.82, 0.00 -196, -5.16, -35.60, 0.00 -197, -3.91, -26.94, 0.00 -198, -2.89, -19.92, 0.00 +196, -5.11, -35.27, 0.00 +197, -4.04, -27.82, 0.00 +198, -2.82, -19.44, 0.00 diff --git a/TestCases/py_wrapper/wavy_wall/run_steady.py b/TestCases/py_wrapper/wavy_wall/run_steady.py index 511aa585827a..2bec62288967 100644 --- a/TestCases/py_wrapper/wavy_wall/run_steady.py +++ b/TestCases/py_wrapper/wavy_wall/run_steady.py @@ -2,14 +2,14 @@ ## \file run.py # \brief Channel with wave-like motion on walls (steady state version). -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/TestCases/radiation/p1adjoint/configp1adjoint.cfg b/TestCases/radiation/p1adjoint/configp1adjoint.cfg index 93740e5ea95e..59958e4183f1 100644 --- a/TestCases/radiation/p1adjoint/configp1adjoint.cfg +++ b/TestCases/radiation/p1adjoint/configp1adjoint.cfg @@ -4,7 +4,7 @@ % Case description: Coupled CFD-RHT adjoint problem % % Author: Ruben Sanchez (TU Kaiserslautern) % % Date: 2020-02-13 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/radiation/p1adjoint/of_grad_cd.csv.ref b/TestCases/radiation/p1adjoint/of_grad_cd.csv.ref index 8c422aae7195..0d3e4c92dbcb 100644 --- a/TestCases/radiation/p1adjoint/of_grad_cd.csv.ref +++ b/TestCases/radiation/p1adjoint/of_grad_cd.csv.ref @@ -1,51 +1,51 @@ "VARIABLE" , "GRADIENT" , "FINDIFF_STEP" -0 , -0.000954218 , 0.001 -1 , -0.00432384 , 0.001 -2 , -0.0111485 , 0.001 -3 , -0.0214656 , 0.001 -4 , -0.0344212 , 0.001 -5 , -0.0490221 , 0.001 -6 , -0.0643278 , 0.001 -7 , -0.0792041 , 0.001 -8 , -0.0924318 , 0.001 -9 , -0.103025 , 0.001 -10 , -0.110239 , 0.001 -11 , -0.113383 , 0.001 -12 , -0.111898 , 0.001 -13 , -0.105745 , 0.001 -14 , -0.0956773 , 0.001 -15 , -0.0830288 , 0.001 -16 , -0.069201 , 0.001 -17 , -0.0553022 , 0.001 -18 , -0.0421316 , 0.001 -19 , -0.0303252 , 0.001 -20 , -0.0203976 , 0.001 -21 , -0.0126387 , 0.001 -22 , -0.00701749 , 0.001 -23 , -0.0032361 , 0.001 -24 , -0.000955756 , 0.001 -25 , 0.00128953 , 0.001 -26 , 0.00518424 , 0.001 -27 , 0.0125712 , 0.001 -28 , 0.0234942 , 0.001 -29 , 0.0370801 , 0.001 -30 , 0.052231 , 0.001 -31 , 0.06787 , 0.001 -32 , 0.0827503 , 0.001 -33 , 0.0955927 , 0.001 -34 , 0.105415 , 0.001 -35 , 0.11154 , 0.001 -36 , 0.113399 , 0.001 -37 , 0.110583 , 0.001 -38 , 0.103215 , 0.001 -39 , 0.0921957 , 0.001 -40 , 0.0789703 , 0.001 -41 , 0.0650043 , 0.001 -42 , 0.0514107 , 0.001 -43 , 0.0389322 , 0.001 -44 , 0.0280921 , 0.001 -45 , 0.0192441 , 0.001 -46 , 0.0124768 , 0.001 -47 , 0.00752972 , 0.001 -48 , 0.00391057 , 0.001 -49 , 0.00131276 , 0.001 +0 , -0.000958205 , 0.001 +1 , -0.00432733 , 0.001 +2 , -0.0111443 , 0.001 +3 , -0.0214515 , 0.001 +4 , -0.0343997 , 0.001 +5 , -0.0489968 , 0.001 +6 , -0.0643023 , 0.001 +7 , -0.0791818 , 0.001 +8 , -0.092416 , 0.001 +9 , -0.103017 , 0.001 +10 , -0.11024 , 0.001 +11 , -0.113392 , 0.001 +12 , -0.111913 , 0.001 +13 , -0.105766 , 0.001 +14 , -0.0957015 , 0.001 +15 , -0.0830517 , 0.001 +16 , -0.0692182 , 0.001 +17 , -0.0553101 , 0.001 +18 , -0.042129 , 0.001 +19 , -0.0303137 , 0.001 +20 , -0.0203813 , 0.001 +21 , -0.0126226 , 0.001 +22 , -0.00700441 , 0.001 +23 , -0.00322726 , 0.001 +24 , -0.000951904 , 0.001 +25 , 0.00128803 , 0.001 +26 , 0.0051774 , 0.001 +27 , 0.0125547 , 0.001 +28 , 0.0234674 , 0.001 +29 , 0.0370465 , 0.001 +30 , 0.0521956 , 0.001 +31 , 0.0678379 , 0.001 +32 , 0.0827257 , 0.001 +33 , 0.0955787 , 0.001 +34 , 0.105412 , 0.001 +35 , 0.111548 , 0.001 +36 , 0.113415 , 0.001 +37 , 0.110605 , 0.001 +38 , 0.103242 , 0.001 +39 , 0.0922244 , 0.001 +40 , 0.0789963 , 0.001 +41 , 0.0650234 , 0.001 +42 , 0.0514199 , 0.001 +43 , 0.0389312 , 0.001 +44 , 0.0280831 , 0.001 +45 , 0.0192316 , 0.001 +46 , 0.0124655 , 0.001 +47 , 0.00752232 , 0.001 +48 , 0.0039072 , 0.001 +49 , 0.00131195 , 0.001 diff --git a/TestCases/radiation/p1model/configp1.cfg b/TestCases/radiation/p1model/configp1.cfg index adab47b0a947..ed727abf1d47 100644 --- a/TestCases/radiation/p1model/configp1.cfg +++ b/TestCases/radiation/p1model/configp1.cfg @@ -5,7 +5,7 @@ % Author: Ruben Sanchez % % Institution: Chair for Scientific Computing, TU Kaiserslautern % % Date: 2019-01-29 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/actuatordisk_bem/actuatordisk_bem.cfg b/TestCases/rans/actuatordisk_bem/actuatordisk_bem.cfg index 7ba0bedc5e1c..5422539f6287 100644 --- a/TestCases/rans/actuatordisk_bem/actuatordisk_bem.cfg +++ b/TestCases/rans/actuatordisk_bem/actuatordisk_bem.cfg @@ -8,7 +8,7 @@ % Academy of Scientific and Innovative Research, Ghaziabad % % Comments : % % Date: 23/09/2023 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/actuatordisk_variable_load/propeller_variable_load.cfg b/TestCases/rans/actuatordisk_variable_load/propeller_variable_load.cfg index b2b97b46c909..bdcdaeafabc5 100644 --- a/TestCases/rans/actuatordisk_variable_load/propeller_variable_load.cfg +++ b/TestCases/rans/actuatordisk_variable_load/propeller_variable_load.cfg @@ -8,7 +8,7 @@ % Comments: Grid file and propeller data courtesy of Mauro Minervino, % % Centro Italiano Ricerche Aerospaziali (CIRA) % % Date: 07/08/2020 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/flatplate/turb_SA_flatplate.cfg b/TestCases/rans/flatplate/turb_SA_flatplate.cfg index b5a6509f5e6e..52d5142f9d80 100644 --- a/TestCases/rans/flatplate/turb_SA_flatplate.cfg +++ b/TestCases/rans/flatplate/turb_SA_flatplate.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2011.11.10 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/flatplate/turb_SA_flatplate_species.cfg b/TestCases/rans/flatplate/turb_SA_flatplate_species.cfg index 8a752f1f1290..3ac0413fb3e1 100644 --- a/TestCases/rans/flatplate/turb_SA_flatplate_species.cfg +++ b/TestCases/rans/flatplate/turb_SA_flatplate_species.cfg @@ -6,7 +6,7 @@ % Author: T. Kattmann % % Institution: Bosch Thermotechmniek B.V. % % Date: 2021.11.30 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/flatplate/turb_SST_flatplate.cfg b/TestCases/rans/flatplate/turb_SST_flatplate.cfg index 580c0c45637f..52e21e4f23dd 100644 --- a/TestCases/rans/flatplate/turb_SST_flatplate.cfg +++ b/TestCases/rans/flatplate/turb_SST_flatplate.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2011.11.10 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/flatplate/turb_SST_flatplate_compressibility_Sarkar.cfg b/TestCases/rans/flatplate/turb_SST_flatplate_compressibility_Sarkar.cfg index 3f077b0d8c61..020fa1a3d977 100644 --- a/TestCases/rans/flatplate/turb_SST_flatplate_compressibility_Sarkar.cfg +++ b/TestCases/rans/flatplate/turb_SST_flatplate_compressibility_Sarkar.cfg @@ -5,7 +5,7 @@ % Author: Sunoh. Kang % % Institution: Pusan National University % % Date: 2024.04.30 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/flatplate/turb_SST_flatplate_compressibility_Wilcox.cfg b/TestCases/rans/flatplate/turb_SST_flatplate_compressibility_Wilcox.cfg index a8181da4d9de..56caf32cf417 100644 --- a/TestCases/rans/flatplate/turb_SST_flatplate_compressibility_Wilcox.cfg +++ b/TestCases/rans/flatplate/turb_SST_flatplate_compressibility_Wilcox.cfg @@ -5,7 +5,7 @@ % Author: Sunoh. Kang % % Institution: Pusan National University % % Date: 2024.04.30 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/naca0012/turb_NACA0012_sa.cfg b/TestCases/rans/naca0012/turb_NACA0012_sa.cfg index 59b285d9c801..47558fced8ab 100644 --- a/TestCases/rans/naca0012/turb_NACA0012_sa.cfg +++ b/TestCases/rans/naca0012/turb_NACA0012_sa.cfg @@ -6,7 +6,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: Feb 18th, 2013 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/naca0012/turb_NACA0012_sst.cfg b/TestCases/rans/naca0012/turb_NACA0012_sst.cfg index 5412bb98b9d7..bfa3925c7c4d 100644 --- a/TestCases/rans/naca0012/turb_NACA0012_sst.cfg +++ b/TestCases/rans/naca0012/turb_NACA0012_sst.cfg @@ -6,7 +6,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: Feb 18th, 2013 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/naca0012/turb_NACA0012_sst_1994-KLm.cfg b/TestCases/rans/naca0012/turb_NACA0012_sst_1994-KLm.cfg index e0eb272cafc0..d1c5ceb126e5 100644 --- a/TestCases/rans/naca0012/turb_NACA0012_sst_1994-KLm.cfg +++ b/TestCases/rans/naca0012/turb_NACA0012_sst_1994-KLm.cfg @@ -3,7 +3,7 @@ % SU2 configuration file % % Case description: 2D NACA 0012 Airfoil Validation Case (compressible) % % SST-1994-KLm implementation % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/naca0012/turb_NACA0012_sst_2003-Vm.cfg b/TestCases/rans/naca0012/turb_NACA0012_sst_2003-Vm.cfg index 69133c5ed92c..991ad431227c 100644 --- a/TestCases/rans/naca0012/turb_NACA0012_sst_2003-Vm.cfg +++ b/TestCases/rans/naca0012/turb_NACA0012_sst_2003-Vm.cfg @@ -3,7 +3,7 @@ % SU2 configuration file % % Case description: 2D NACA 0012 Airfoil Validation Case (compressible) % % SST-2003-Vm implementation % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/naca0012/turb_NACA0012_sst_2003m.cfg b/TestCases/rans/naca0012/turb_NACA0012_sst_2003m.cfg index 144c602c6bc3..c5c2e571050e 100644 --- a/TestCases/rans/naca0012/turb_NACA0012_sst_2003m.cfg +++ b/TestCases/rans/naca0012/turb_NACA0012_sst_2003m.cfg @@ -1,7 +1,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % SU2 configuration file, NACA0012 RANS SST-2003m % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/naca0012/turb_NACA0012_sst_expliciteuler.cfg b/TestCases/rans/naca0012/turb_NACA0012_sst_expliciteuler.cfg index e7997ee4e24a..e253b8c9a97b 100644 --- a/TestCases/rans/naca0012/turb_NACA0012_sst_expliciteuler.cfg +++ b/TestCases/rans/naca0012/turb_NACA0012_sst_expliciteuler.cfg @@ -5,7 +5,7 @@ % Author: Max Aehle % % Institution: TU Kaiserslautern % % Date: Nov 17th, 2021 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/naca0012/turb_NACA0012_sst_fixedvalues.cfg b/TestCases/rans/naca0012/turb_NACA0012_sst_fixedvalues.cfg index da1935ed267a..3ed7280ad688 100644 --- a/TestCases/rans/naca0012/turb_NACA0012_sst_fixedvalues.cfg +++ b/TestCases/rans/naca0012/turb_NACA0012_sst_fixedvalues.cfg @@ -5,7 +5,7 @@ % Author: Max Aehle % % Institution: TU Kaiserslautern % % Date: Mar 17th, 2021 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/naca0012/turb_NACA0012_sst_multigrid_restart.cfg b/TestCases/rans/naca0012/turb_NACA0012_sst_multigrid_restart.cfg index 17febfd1bb0c..0f9fd3c9f492 100644 --- a/TestCases/rans/naca0012/turb_NACA0012_sst_multigrid_restart.cfg +++ b/TestCases/rans/naca0012/turb_NACA0012_sst_multigrid_restart.cfg @@ -6,7 +6,7 @@ % Author: David E. Manosalvas % % Institution: Stanford University % % Date: 02.14.2017 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/naca0012/turb_NACA0012_sst_sust.cfg b/TestCases/rans/naca0012/turb_NACA0012_sst_sust.cfg index 798a7383430f..984c4f951139 100644 --- a/TestCases/rans/naca0012/turb_NACA0012_sst_sust.cfg +++ b/TestCases/rans/naca0012/turb_NACA0012_sst_sust.cfg @@ -6,7 +6,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: Feb 18th, 2013 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/oneram6/turb_ONERAM6.cfg b/TestCases/rans/oneram6/turb_ONERAM6.cfg index a43f3974459d..98ac5377d2ae 100644 --- a/TestCases/rans/oneram6/turb_ONERAM6.cfg +++ b/TestCases/rans/oneram6/turb_ONERAM6.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.14 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/oneram6/turb_ONERAM6_nk.cfg b/TestCases/rans/oneram6/turb_ONERAM6_nk.cfg index c78c5970c710..b24a9837a5a9 100644 --- a/TestCases/rans/oneram6/turb_ONERAM6_nk.cfg +++ b/TestCases/rans/oneram6/turb_ONERAM6_nk.cfg @@ -2,7 +2,7 @@ % % % SU2 configuration file % % Case description: Turbulent flow, ONERA M6, Newton-Krylov solver % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/oneram6/turb_ONERAM6_vc.cfg b/TestCases/rans/oneram6/turb_ONERAM6_vc.cfg index 64d4ac7f14b5..5b2ff072a9dd 100644 --- a/TestCases/rans/oneram6/turb_ONERAM6_vc.cfg +++ b/TestCases/rans/oneram6/turb_ONERAM6_vc.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.14 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/propeller/propeller.cfg b/TestCases/rans/propeller/propeller.cfg index 1645a1f08b4a..8abec22dc62f 100644 --- a/TestCases/rans/propeller/propeller.cfg +++ b/TestCases/rans/propeller/propeller.cfg @@ -5,7 +5,7 @@ % Author: % % Institution: % % Date: % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/rae2822/turb_SA_RAE2822.cfg b/TestCases/rans/rae2822/turb_SA_RAE2822.cfg index 24d2dfc8522d..b9d0c0a74b3d 100644 --- a/TestCases/rans/rae2822/turb_SA_RAE2822.cfg +++ b/TestCases/rans/rae2822/turb_SA_RAE2822.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 5/15/2013 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/rae2822/turb_SST_RAE2822.cfg b/TestCases/rans/rae2822/turb_SST_RAE2822.cfg index 5c75477a75e1..7729ed092dbc 100644 --- a/TestCases/rans/rae2822/turb_SST_RAE2822.cfg +++ b/TestCases/rans/rae2822/turb_SST_RAE2822.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 5/15/2013 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/rae2822/turb_SST_SUST_RAE2822.cfg b/TestCases/rans/rae2822/turb_SST_SUST_RAE2822.cfg index a8a666f6739c..34c2752a5425 100644 --- a/TestCases/rans/rae2822/turb_SST_SUST_RAE2822.cfg +++ b/TestCases/rans/rae2822/turb_SST_SUST_RAE2822.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 5/15/2013 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/restart_directdiff_naca/naca0012.cfg b/TestCases/rans/restart_directdiff_naca/naca0012.cfg index 9f6a9ec859e6..ab034cd0208d 100644 --- a/TestCases/rans/restart_directdiff_naca/naca0012.cfg +++ b/TestCases/rans/restart_directdiff_naca/naca0012.cfg @@ -5,7 +5,7 @@ % Author: Steffen Schotthöfer % % Institution: TU Kaiserslautern % % Date: Mar 16, 2017 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/s809/trans_s809.cfg b/TestCases/rans/s809/trans_s809.cfg index 5088cc7911c4..ee2d5eed0ea3 100644 --- a/TestCases/rans/s809/trans_s809.cfg +++ b/TestCases/rans/s809/trans_s809.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 5/15/2013 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/s809/turb_S809.cfg b/TestCases/rans/s809/turb_S809.cfg index ed4d9bac92fe..d8f41f5dd622 100644 --- a/TestCases/rans/s809/turb_S809.cfg +++ b/TestCases/rans/s809/turb_S809.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 5/15/2013 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/vki_turbine/turb_vki.cfg b/TestCases/rans/vki_turbine/turb_vki.cfg index f7ee0c450396..cb1b2255bcf3 100644 --- a/TestCases/rans/vki_turbine/turb_vki.cfg +++ b/TestCases/rans/vki_turbine/turb_vki.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios, Thomas D. Economon % % Institution: Stanford University % % Date: Feb 18th, 2013 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans_uq/naca0012/turb_NACA0012_uq.cfg b/TestCases/rans_uq/naca0012/turb_NACA0012_uq.cfg index 12a6808e8f77..d653fae2d621 100644 --- a/TestCases/rans_uq/naca0012/turb_NACA0012_uq.cfg +++ b/TestCases/rans_uq/naca0012/turb_NACA0012_uq.cfg @@ -6,7 +6,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: Feb 18th, 2013 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans_uq/naca0012/turb_NACA0012_uq_1c.cfg b/TestCases/rans_uq/naca0012/turb_NACA0012_uq_1c.cfg index 56db142c65f3..fa98ddb075a3 100644 --- a/TestCases/rans_uq/naca0012/turb_NACA0012_uq_1c.cfg +++ b/TestCases/rans_uq/naca0012/turb_NACA0012_uq_1c.cfg @@ -6,7 +6,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: Feb 18th, 2013 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans_uq/naca0012/turb_NACA0012_uq_2c.cfg b/TestCases/rans_uq/naca0012/turb_NACA0012_uq_2c.cfg index c8f15955d090..bc37038cf1d6 100644 --- a/TestCases/rans_uq/naca0012/turb_NACA0012_uq_2c.cfg +++ b/TestCases/rans_uq/naca0012/turb_NACA0012_uq_2c.cfg @@ -6,7 +6,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: Feb 18th, 2013 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans_uq/naca0012/turb_NACA0012_uq_3c.cfg b/TestCases/rans_uq/naca0012/turb_NACA0012_uq_3c.cfg index 929c2f0100ac..526a4f4f4057 100644 --- a/TestCases/rans_uq/naca0012/turb_NACA0012_uq_3c.cfg +++ b/TestCases/rans_uq/naca0012/turb_NACA0012_uq_3c.cfg @@ -6,7 +6,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: Feb 18th, 2013 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans_uq/naca0012/turb_NACA0012_uq_p1c1.cfg b/TestCases/rans_uq/naca0012/turb_NACA0012_uq_p1c1.cfg index a69c41b1f5ec..8de0d20da42a 100644 --- a/TestCases/rans_uq/naca0012/turb_NACA0012_uq_p1c1.cfg +++ b/TestCases/rans_uq/naca0012/turb_NACA0012_uq_p1c1.cfg @@ -6,7 +6,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: Feb 18th, 2013 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans_uq/naca0012/turb_NACA0012_uq_p1c2.cfg b/TestCases/rans_uq/naca0012/turb_NACA0012_uq_p1c2.cfg index 195ad3f03a7b..5f4bbdb61025 100644 --- a/TestCases/rans_uq/naca0012/turb_NACA0012_uq_p1c2.cfg +++ b/TestCases/rans_uq/naca0012/turb_NACA0012_uq_p1c2.cfg @@ -6,7 +6,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: Feb 18th, 2013 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rotating/caradonna_tung/rot_caradonna_tung.cfg b/TestCases/rotating/caradonna_tung/rot_caradonna_tung.cfg index 703d051feca5..2336255f9149 100644 --- a/TestCases/rotating/caradonna_tung/rot_caradonna_tung.cfg +++ b/TestCases/rotating/caradonna_tung/rot_caradonna_tung.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2020.05.24 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rotating/naca0012/rot_NACA0012.cfg b/TestCases/rotating/naca0012/rot_NACA0012.cfg index 54fbc87e5aea..e428d8ae7496 100644 --- a/TestCases/rotating/naca0012/rot_NACA0012.cfg +++ b/TestCases/rotating/naca0012/rot_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2020.06.06 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -52,7 +52,7 @@ MARKER_DESIGNING = ( airfoil ) % ------------- COMMON PARAMETERS TO DEFINE THE NUMERICAL METHOD --------------% % NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES -CFL_NUMBER= 1e4 +CFL_NUMBER= 100 CFL_ADAPT= NO CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) diff --git a/TestCases/serial_regression.py b/TestCases/serial_regression.py index e5825f786e15..8cb540e0519f 100644 --- a/TestCases/serial_regression.py +++ b/TestCases/serial_regression.py @@ -3,14 +3,14 @@ ## \file serial_regression.py # \brief Python script for automated regression testing of SU2 examples # \author A. Aranake, A. Campos, T. Economon, T. Lukaczyk, S. Padron -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 @@ -93,7 +93,7 @@ def main(): channel.cfg_dir = "euler/channel" channel.cfg_file = "inv_channel_RK.cfg" channel.test_iter = 10 - channel.test_vals = [-2.691364, 2.781660, -0.009405, 0.011874] + channel.test_vals = [-2.691660, 2.781413, -0.009401, 0.011862] test_list.append(channel) # NACA0012 @@ -101,7 +101,7 @@ def main(): naca0012.cfg_dir = "euler/naca0012" naca0012.cfg_file = "inv_NACA0012_Roe.cfg" naca0012.test_iter = 20 - naca0012.test_vals = [-4.444941, -3.941038, 0.318998, 0.022365] + naca0012.test_vals = [-4.766184, -4.287722, 0.326688, 0.022661] test_list.append(naca0012) # Supersonic wedge @@ -109,7 +109,7 @@ def main(): wedge.cfg_dir = "euler/wedge" wedge.cfg_file = "inv_wedge_HLLC.cfg" wedge.test_iter = 20 - wedge.test_vals = [-1.368091, 4.302736, -0.243433, 0.042906] + wedge.test_vals = [-1.379426, 4.288828, -0.245341, 0.043244] test_list.append(wedge) # ONERA M6 Wing @@ -117,7 +117,7 @@ def main(): oneram6.cfg_dir = "euler/oneram6" oneram6.cfg_file = "inv_ONERAM6.cfg" oneram6.test_iter = 10 - oneram6.test_vals = [-11.510606, -10.980023, 0.280800, 0.008623] + oneram6.test_vals = [-11.498143, -10.969216, 0.280800, 0.008623] oneram6.timeout = 9600 test_list.append(oneram6) @@ -126,7 +126,7 @@ def main(): fixedCL_naca0012.cfg_dir = "fixed_cl/naca0012" fixedCL_naca0012.cfg_file = "inv_NACA0012.cfg" fixedCL_naca0012.test_iter = 10 - fixedCL_naca0012.test_vals = [-3.848561, 1.688373, 0.301145, 0.019489] + fixedCL_naca0012.test_vals = [-3.837516, 1.700577, 0.301169, 0.019490] test_list.append(fixedCL_naca0012) # Polar sweep of the inviscid NACA0012 @@ -135,7 +135,7 @@ def main(): polar_naca0012.cfg_file = "inv_NACA0012.cfg" polar_naca0012.polar = True polar_naca0012.test_iter = 10 - polar_naca0012.test_vals = [-1.067859, 4.397227, 0.000060, 0.031134] + polar_naca0012.test_vals = [-1.077848, 4.386916, -0.000333, 0.029678] polar_naca0012.test_vals_aarch64 = [-1.063447, 4.401847, 0.000291, 0.031696] polar_naca0012.command = TestCase.Command(exec = "compute_polar.py", param = "-n 1 -i 11") # flaky test on arm64 @@ -147,7 +147,7 @@ def main(): bluntbody.cfg_dir = "euler/bluntbody" bluntbody.cfg_file = "blunt.cfg" bluntbody.test_iter = 20 - bluntbody.test_vals = [0.493297, 6.857373, -0.000026, 1.791394] + bluntbody.test_vals = [0.475378, 6.834898, 0.000000, 1.783956] test_list.append(bluntbody) ########################## @@ -166,7 +166,7 @@ def main(): flatplate.cfg_dir = "navierstokes/flatplate" flatplate.cfg_file = "lam_flatplate.cfg" flatplate.test_iter = 20 - flatplate.test_vals = [-5.122306, 0.357174, 0.001311, 0.028230, 2.361600, -2.333300, -2.629100, -2.629100] + flatplate.test_vals = [-5.097199, 0.382306, 0.001326, 0.027904, 2.361500, -2.333600, 0.000000, 0.000000] test_list.append(flatplate) # Laminar cylinder (steady) @@ -174,7 +174,7 @@ def main(): cylinder.cfg_dir = "navierstokes/cylinder" cylinder.cfg_file = "lam_cylinder.cfg" cylinder.test_iter = 25 - cylinder.test_vals = [-8.363068, -2.882163, -0.017777, 1.607222, -0.010064] + cylinder.test_vals = [-8.363995, -2.882536, -0.017780, 1.607979, 0] test_list.append(cylinder) # Laminar cylinder (low Mach correction) @@ -182,7 +182,7 @@ def main(): cylinder_lowmach.cfg_dir = "navierstokes/cylinder" cylinder_lowmach.cfg_file = "cylinder_lowmach.cfg" cylinder_lowmach.test_iter = 25 - cylinder_lowmach.test_vals = [-6.830989, -1.368842, -0.143838, 73.962440, 0.002454] + cylinder_lowmach.test_vals = [-6.830989, -1.368842, -0.143838, 73.962440, 0] test_list.append(cylinder_lowmach) # 2D Poiseuille flow (body force driven with periodic inlet / outlet) @@ -190,7 +190,7 @@ def main(): poiseuille.cfg_dir = "navierstokes/poiseuille" poiseuille.cfg_file = "lam_poiseuille.cfg" poiseuille.test_iter = 10 - poiseuille.test_vals = [-5.050732, 0.648355, 0.012273, 13.643219, -2.047100] + poiseuille.test_vals = [-5.050753, 0.648333, 0.012273, 13.643141, 0] test_list.append(poiseuille) # 2D Poiseuille flow (inlet profile file) @@ -198,8 +198,8 @@ def main(): poiseuille_profile.cfg_dir = "navierstokes/poiseuille" poiseuille_profile.cfg_file = "profile_poiseuille.cfg" poiseuille_profile.test_iter = 10 - poiseuille_profile.test_vals = [-12.485974, -7.612341, -0.000000, 2.085796] - poiseuille_profile.test_vals_aarch64 = [-12.485974, -7.612341, -0.000000, 2.085796] + poiseuille_profile.test_vals = [-12.009021, -7.262796, -0.000000, 2.089953] + poiseuille_profile.test_vals_aarch64 = [-12.494684, -7.711379, -0.000000, 2.085796] #last 4 columns test_list.append(poiseuille_profile) ########################## @@ -218,7 +218,7 @@ def main(): rae2822_sa.cfg_dir = "rans/rae2822" rae2822_sa.cfg_file = "turb_SA_RAE2822.cfg" rae2822_sa.test_iter = 20 - rae2822_sa.test_vals = [-2.020123, -5.269324, 0.807147, 0.060499, -80602.000000] + rae2822_sa.test_vals = [-2.020123, -5.269339, 0.807147, 0.060499, 0] test_list.append(rae2822_sa) # RAE2822 SST @@ -226,7 +226,7 @@ def main(): rae2822_sst.cfg_dir = "rans/rae2822" rae2822_sst.cfg_file = "turb_SST_RAE2822.cfg" rae2822_sst.test_iter = 20 - rae2822_sst.test_vals = [-0.510376, 4.873617, 0.816197, 0.060504, -71886.000000] + rae2822_sst.test_vals = [-0.510326, 4.944645, 0.812737, 0.061081, 0.000000] test_list.append(rae2822_sst) # RAE2822 SST_SUST @@ -234,7 +234,7 @@ def main(): rae2822_sst_sust.cfg_dir = "rans/rae2822" rae2822_sst_sust.cfg_file = "turb_SST_SUST_RAE2822.cfg" rae2822_sst_sust.test_iter = 20 - rae2822_sst_sust.test_vals = [-2.536121, 4.873617, 0.816197, 0.060504] + rae2822_sst_sust.test_vals = [-2.680659, 4.944645, 0.812737, 0.061080] test_list.append(rae2822_sst_sust) # Flat plate @@ -242,7 +242,7 @@ def main(): turb_flatplate.cfg_dir = "rans/flatplate" turb_flatplate.cfg_file = "turb_SA_flatplate.cfg" turb_flatplate.test_iter = 20 - turb_flatplate.test_vals = [-4.156553, -6.736064, -0.176184, 0.057478] + turb_flatplate.test_vals = [-4.316135, -6.737979, -0.187461, 0.057468] test_list.append(turb_flatplate) # FLAT PLATE, WALL FUNCTIONS, COMPRESSIBLE SST @@ -250,7 +250,7 @@ def main(): turb_wallfunction_flatplate_sst.cfg_dir = "wallfunctions/flatplate/compressible_SST" turb_wallfunction_flatplate_sst.cfg_file = "turb_SST_flatplate.cfg" turb_wallfunction_flatplate_sst.test_iter = 10 - turb_wallfunction_flatplate_sst.test_vals = [-4.177397, -1.880811, -1.943377, 1.263787, -1.254740, 1.538892, 10.000000, -2.097623, 0.074673, 0.002932] + turb_wallfunction_flatplate_sst.test_vals = [-4.587729, -1.908761, -1.968077, 0.903297, -1.608475, 1.497162, 10.000000, -1.733571, 0.033374, 0.002430] test_list.append(turb_wallfunction_flatplate_sst) # FLAT PLATE, WALL FUNCTIONS, COMPRESSIBLE SA @@ -258,7 +258,7 @@ def main(): turb_wallfunction_flatplate_sa.cfg_dir = "wallfunctions/flatplate/compressible_SA" turb_wallfunction_flatplate_sa.cfg_file = "turb_SA_flatplate.cfg" turb_wallfunction_flatplate_sa.test_iter = 10 - turb_wallfunction_flatplate_sa.test_vals = [-4.414833, -2.031596, -2.120806, 1.007586, -5.386444, 10.000000, -1.635112, 0.068983, 0.002640] + turb_wallfunction_flatplate_sa.test_vals = [-4.487562, -2.016144, -2.169439, 0.834724, -5.382532, 10.000000, -1.508186, 0.034484, 0.002639] test_list.append(turb_wallfunction_flatplate_sa) # ONERA M6 Wing @@ -266,7 +266,7 @@ def main(): turb_oneram6.cfg_dir = "rans/oneram6" turb_oneram6.cfg_file = "turb_ONERAM6.cfg" turb_oneram6.test_iter = 10 - turb_oneram6.test_vals = [-2.392867, -6.689823, 0.230746, 0.158811, -33786.000000] + turb_oneram6.test_vals = [-2.408685, -6.662908, 0.238580, 0.158968, 0.000000] turb_oneram6.timeout = 3200 test_list.append(turb_oneram6) @@ -275,7 +275,7 @@ def main(): turb_naca0012_sa.cfg_dir = "rans/naca0012" turb_naca0012_sa.cfg_file = "turb_NACA0012_sa.cfg" turb_naca0012_sa.test_iter = 5 - turb_naca0012_sa.test_vals = [-10.451742, -13.864841, 1.057622, 0.022916, 20.000000, -1.588482, 20.000000, -2.963093, -44.540000] + turb_naca0012_sa.test_vals = [-12.091778, -14.685322, 1.057665, 0.022971, 20.000000, -2.686203, 20.000000, -4.459916, 0] turb_naca0012_sa.timeout = 3200 test_list.append(turb_naca0012_sa) @@ -284,8 +284,8 @@ def main(): turb_naca0012_sst.cfg_dir = "rans/naca0012" turb_naca0012_sst.cfg_file = "turb_NACA0012_sst.cfg" turb_naca0012_sst.test_iter = 10 - turb_naca0012_sst.test_vals = [-12.213755, -14.439873, -7.108062, 1.050109, 0.019148, -1.875539, -38.510000] - turb_naca0012_sst.test_vals_aarch64 = [-12.213728, -14.439873, -7.108062, 1.050109, 0.019148, -1.875538, -38.510000] + turb_naca0012_sst.test_vals = [-12.229889, -14.434883, -6.037177, 1.047444, 0.019214, -2.108366, 0.000000] + turb_naca0012_sst.test_vals_aarch64 = [-12.229890, -14.434837, -6.410709, 1.047444, 0.019214, -2.107944, 0.000000] turb_naca0012_sst.timeout = 3200 test_list.append(turb_naca0012_sst) @@ -294,7 +294,7 @@ def main(): turb_naca0012_sst_2003m.cfg_dir = "rans/naca0012" turb_naca0012_sst_2003m.cfg_file = "turb_NACA0012_sst_2003m.cfg" turb_naca0012_sst_2003m.test_iter = 10 - turb_naca0012_sst_2003m.test_vals = [-7.690803, -10.049843, -3.414020, 1.049314, 0.019686, -2.207421, -45.199000] + turb_naca0012_sst_2003m.test_vals = [-8.617103, -10.718898, -4.021920, 1.046418, 0.019227, -1.708431, 0.000000] turb_naca0012_sst_2003m.timeout = 3200 test_list.append(turb_naca0012_sst_2003m) @@ -303,8 +303,8 @@ def main(): turb_naca0012_sst_sust_restart.cfg_dir = "rans/naca0012" turb_naca0012_sst_sust_restart.cfg_file = "turb_NACA0012_sst_sust.cfg" turb_naca0012_sst_sust_restart.test_iter = 10 - turb_naca0012_sst_sust_restart.test_vals = [-12.153015, -14.756601, -6.342509, 1.001189, 0.019384, -1.820009] - turb_naca0012_sst_sust_restart.test_vals_aarch64 = [-12.153059, -14.756601, -6.342509, 1.001189, 0.019384, -1.819999] + turb_naca0012_sst_sust_restart.test_vals = [-12.157353, -14.781748, -6.359242, 1.000270, 0.019123, -1.780616] + turb_naca0012_sst_sust_restart.test_vals_aarch64 = [-12.157374, -14.782027, -6.726462, 1.000270, 0.019123, -1.780624] turb_naca0012_sst_sust_restart.timeout = 3200 test_list.append(turb_naca0012_sst_sust_restart) @@ -313,7 +313,7 @@ def main(): turb_naca0012_sst_fixedvalues.cfg_dir = "rans/naca0012" turb_naca0012_sst_fixedvalues.cfg_file = "turb_NACA0012_sst_fixedvalues.cfg" turb_naca0012_sst_fixedvalues.test_iter = 10 - turb_naca0012_sst_fixedvalues.test_vals = [-5.206797, -10.023481, -1.616002, 1.021528, 0.040220, -3.480532] + turb_naca0012_sst_fixedvalues.test_vals = [-5.206634, -10.233383, -1.557783, 1.022024, 0.040554, -3.477756] turb_naca0012_sst_fixedvalues.timeout = 3200 test_list.append(turb_naca0012_sst_fixedvalues) @@ -322,7 +322,7 @@ def main(): propeller.cfg_dir = "rans/propeller" propeller.cfg_file = "propeller.cfg" propeller.test_iter = 10 - propeller.test_vals = [-3.389575, -8.409251, 0.000048, 0.056329] + propeller.test_vals = [-3.389724, -8.409502, 0.000048, 0.056344] propeller.timeout = 3200 test_list.append(propeller) @@ -335,8 +335,8 @@ def main(): axi_rans_air_nozzle_restart.cfg_dir = "axisymmetric_rans/air_nozzle" axi_rans_air_nozzle_restart.cfg_file = "air_nozzle_restart.cfg" axi_rans_air_nozzle_restart.test_iter = 10 - axi_rans_air_nozzle_restart.test_vals = [-12.151701, -6.605756, -9.188910, -4.516059, -2019.700000] - axi_rans_air_nozzle_restart.test_vals_aarch64 = [-12.063354, -7.004772, -8.705740, -4.036824, -2019.800000] + axi_rans_air_nozzle_restart.test_vals = [-12.067274, -6.841605, -8.843340, -3.783551, 0.000000] + axi_rans_air_nozzle_restart.test_vals_aarch64 = [-12.067037, -6.840810, -8.843191, -3.783401, 0.000000] axi_rans_air_nozzle_restart.tol = 0.0001 test_list.append(axi_rans_air_nozzle_restart) @@ -350,7 +350,7 @@ def main(): turb_naca0012_sst_restart_mg.cfg_file = "turb_NACA0012_sst_multigrid_restart.cfg" turb_naca0012_sst_restart_mg.test_iter = 50 turb_naca0012_sst_restart_mg.ntest_vals = 5 - turb_naca0012_sst_restart_mg.test_vals = [-7.639702, -7.441853, -1.895004, 0.000001, 0.079178] + turb_naca0012_sst_restart_mg.test_vals = [-7.645513, -7.268192, -1.665656, -0.000027, 0.078643] turb_naca0012_sst_restart_mg.timeout = 3200 turb_naca0012_sst_restart_mg.tol = 0.000001 test_list.append(turb_naca0012_sst_restart_mg) @@ -371,7 +371,7 @@ def main(): inc_euler_naca0012.cfg_dir = "incomp_euler/naca0012" inc_euler_naca0012.cfg_file = "incomp_NACA0012.cfg" inc_euler_naca0012.test_iter = 20 - inc_euler_naca0012.test_vals = [-7.128795, -6.375403, 0.531980, 0.008467] + inc_euler_naca0012.test_vals = [-7.140809, -6.485990, 0.531993, 0.008466] test_list.append(inc_euler_naca0012) # C-D nozzle with pressure inlet and mass flow outlet @@ -379,7 +379,7 @@ def main(): inc_nozzle.cfg_dir = "incomp_euler/nozzle" inc_nozzle.cfg_file = "inv_nozzle.cfg" inc_nozzle.test_iter = 20 - inc_nozzle.test_vals = [-6.363763, -5.566528, -0.005348, 0.126610] + inc_nozzle.test_vals = [-6.623301, -5.844127, -0.023181, 0.126370] test_list.append(inc_nozzle) ############################# @@ -414,7 +414,7 @@ def main(): inc_poly_cylinder.cfg_dir = "incomp_navierstokes/cylinder" inc_poly_cylinder.cfg_file = "poly_cylinder.cfg" inc_poly_cylinder.test_iter = 20 - inc_poly_cylinder.test_vals = [-8.106741, -2.160042, 0.019225, 1.902421, -172.750000] + inc_poly_cylinder.test_vals = [-8.083556, -2.134369, 0.018999, 1.932938, -173.730000] test_list.append(inc_poly_cylinder) # X-coarse laminar bend as a mixed element CGNS test @@ -422,7 +422,7 @@ def main(): inc_lam_bend.cfg_dir = "incomp_navierstokes/bend" inc_lam_bend.cfg_file = "lam_bend.cfg" inc_lam_bend.test_iter = 10 - inc_lam_bend.test_vals = [-3.558881, -3.234611, -0.016265, 1.024052] + inc_lam_bend.test_vals = [-3.647474, -3.230291, -0.016108, 1.085750] test_list.append(inc_lam_bend) ############################ @@ -441,7 +441,7 @@ def main(): inc_turb_naca0012.cfg_dir = "incomp_rans/naca0012" inc_turb_naca0012.cfg_file = "naca0012.cfg" inc_turb_naca0012.test_iter = 20 - inc_turb_naca0012.test_vals = [-4.788496, -11.039482, 0.000023, 0.309488] + inc_turb_naca0012.test_vals = [-4.788495, -11.040578, 0.000023, 0.309503] test_list.append(inc_turb_naca0012) # NACA0012, SST_SUST @@ -449,7 +449,7 @@ def main(): inc_turb_naca0012_sst_sust.cfg_dir = "incomp_rans/naca0012" inc_turb_naca0012_sst_sust.cfg_file = "naca0012_SST_SUST.cfg" inc_turb_naca0012_sst_sust.test_iter = 20 - inc_turb_naca0012_sst_sust.test_vals = [-7.270375, 0.018431, 0.000021, 0.307673] + inc_turb_naca0012_sst_sust.test_vals = [-7.291334, 0.132662, 0.000021, 0.312093] test_list.append(inc_turb_naca0012_sst_sust) # FLAT PLATE, WALL FUNCTIONS, INCOMPRESSIBLE SST @@ -457,7 +457,7 @@ def main(): inc_turb_wallfunction_flatplate_sst.cfg_dir = "wallfunctions/flatplate/incompressible_SST" inc_turb_wallfunction_flatplate_sst.cfg_file = "turb_SST_flatplate.cfg" inc_turb_wallfunction_flatplate_sst.test_iter = 10 - inc_turb_wallfunction_flatplate_sst.test_vals = [-6.507362, -5.693894, -6.434063, -4.223774, -7.008049, -1.954102, 10.000000, -3.047554, 0.001081, 0.003644, 0.618140] + inc_turb_wallfunction_flatplate_sst.test_vals = [-6.881306, -5.729111, -6.724803, -4.242636, -7.162846, -2.044959, 10.000000, -2.877924, 0.001151, 0.003161, 0.000000] test_list.append(inc_turb_wallfunction_flatplate_sst) # FLAT PLATE, WALL FUNCTIONS, INCOMPRESSIBLE SA @@ -465,7 +465,7 @@ def main(): inc_turb_wallfunction_flatplate_sa.cfg_dir = "wallfunctions/flatplate/incompressible_SA" inc_turb_wallfunction_flatplate_sa.cfg_file = "turb_SA_flatplate.cfg" inc_turb_wallfunction_flatplate_sa.test_iter = 10 - inc_turb_wallfunction_flatplate_sa.test_vals = [-6.521493, -5.710967, -6.424313, -4.224459, -9.586823, 10.000000, -3.054800, 0.000999, 0.003759] + inc_turb_wallfunction_flatplate_sa.test_vals = [-6.894429, -5.717193, -6.743475, -4.242550, -9.587276, 10.000000, -2.879802, 0.001021, 0.003759] test_list.append(inc_turb_wallfunction_flatplate_sa) #################### @@ -558,7 +558,7 @@ def main(): schubauer_klebanoff_transition.cfg_dir = "transition/Schubauer_Klebanoff" schubauer_klebanoff_transition.cfg_file = "transitional_BC_model_ConfigFile.cfg" schubauer_klebanoff_transition.test_iter = 10 - schubauer_klebanoff_transition.test_vals = [-8.087369, -13.241874, 0.000055, 0.007992] + schubauer_klebanoff_transition.test_vals = [-8.284308, -13.240273, 0.000057, 0.007982] test_list.append(schubauer_klebanoff_transition) ##################################### @@ -602,7 +602,7 @@ def main(): contadj_fixedCL_naca0012.cfg_dir = "fixed_cl/naca0012" contadj_fixedCL_naca0012.cfg_file = "inv_NACA0012_ContAdj.cfg" contadj_fixedCL_naca0012.test_iter = 100 - contadj_fixedCL_naca0012.test_vals = [0.755070, -4.794630, -0.525290, -0.000238] + contadj_fixedCL_naca0012.test_vals = [0.754936, -4.793625, -0.524550, -0.000227] test_list.append(contadj_fixedCL_naca0012) ################################### @@ -677,8 +677,7 @@ def main(): turb_naca0012_1c.cfg_dir = "rans_uq/naca0012" turb_naca0012_1c.cfg_file = "turb_NACA0012_uq_1c.cfg" turb_naca0012_1c.test_iter = 10 - turb_naca0012_1c.test_vals = [-4.986094, 1.137009, 0.378604, -0.083526] - turb_naca0012_1c.test_vals_aarch64 = [-4.986054, 1.137073, 0.378618, -0.083513] + turb_naca0012_1c.test_vals = [-4.992341, 1.135213, 0.352815, -0.084443] test_list.append(turb_naca0012_1c) # NACA0012 2c @@ -686,8 +685,7 @@ def main(): turb_naca0012_2c.cfg_dir = "rans_uq/naca0012" turb_naca0012_2c.cfg_file = "turb_NACA0012_uq_2c.cfg" turb_naca0012_2c.test_iter = 10 - turb_naca0012_2c.test_vals = [-5.483291, 0.968701, 0.258168, -0.114217] - turb_naca0012_2c.test_vals_aarch64 = [-5.483307, 0.968694, 0.258049, -0.114260] #last 4 columns + turb_naca0012_2c.test_vals = [-5.485201, 0.968804, 0.270412, -0.105544] test_list.append(turb_naca0012_2c) # NACA0012 3c @@ -695,7 +693,7 @@ def main(): turb_naca0012_3c.cfg_dir = "rans_uq/naca0012" turb_naca0012_3c.cfg_file = "turb_NACA0012_uq_3c.cfg" turb_naca0012_3c.test_iter = 10 - turb_naca0012_3c.test_vals = [-5.584299, 0.931258, 0.251298, -0.114232] + turb_naca0012_3c.test_vals = [-5.584365, 0.931915, 0.247973, -0.108789] test_list.append(turb_naca0012_3c) # NACA0012 p1c1 @@ -703,8 +701,7 @@ def main(): turb_naca0012_p1c1.cfg_dir = "rans_uq/naca0012" turb_naca0012_p1c1.cfg_file = "turb_NACA0012_uq_p1c1.cfg" turb_naca0012_p1c1.test_iter = 10 - turb_naca0012_p1c1.test_vals = [-5.127497, 1.077175, 0.546823, -0.023191] - turb_naca0012_p1c1.test_vals_aarch64 = [-5.127510, 1.077107, 0.546893, -0.023166] #last 4 columns + turb_naca0012_p1c1.test_vals = [-5.120106, 1.075360, 0.291660, -0.104760] test_list.append(turb_naca0012_p1c1) # NACA0012 p1c2 @@ -712,8 +709,7 @@ def main(): turb_naca0012_p1c2.cfg_dir = "rans_uq/naca0012" turb_naca0012_p1c2.cfg_file = "turb_NACA0012_uq_p1c2.cfg" turb_naca0012_p1c2.test_iter = 10 - turb_naca0012_p1c2.test_vals = [-5.554412, 0.943562, 0.322803, -0.095946] - turb_naca0012_p1c2.test_vals_aarch64 = [-5.554381, 0.943577, 0.322676, -0.095989] #last 4 columns + turb_naca0012_p1c2.test_vals = [-5.549184, 0.946308, 0.249527, -0.112742] test_list.append(turb_naca0012_p1c2) ###################################### @@ -725,7 +721,7 @@ def main(): harmonic_balance.cfg_dir = "harmonic_balance" harmonic_balance.cfg_file = "HB.cfg" harmonic_balance.test_iter = 25 - harmonic_balance.test_vals = [-1.554985, 0.831796, 0.935729, 3.960210] + harmonic_balance.test_vals = [-1.559187, 0.829575, 0.931512, 3.954440] test_list.append(harmonic_balance) # Turbulent pitching NACA 64a010 airfoil @@ -733,7 +729,7 @@ def main(): hb_rans_preconditioning.cfg_dir = "harmonic_balance/hb_rans_preconditioning" hb_rans_preconditioning.cfg_file = "davis.cfg" hb_rans_preconditioning.test_iter = 25 - hb_rans_preconditioning.test_vals = [-1.902097, 0.484069, 0.601483, 3.609005, -5.949359] + hb_rans_preconditioning.test_vals = [-1.902097, 0.484069, 0.601483, 3.609005, -5.949355] test_list.append(hb_rans_preconditioning) ###################################### @@ -745,7 +741,7 @@ def main(): rot_naca0012.cfg_dir = "rotating/naca0012" rot_naca0012.cfg_file = "rot_NACA0012.cfg" rot_naca0012.test_iter = 25 - rot_naca0012.test_vals = [-2.738864, 2.811401, -0.080279, 0.002160] + rot_naca0012.test_vals = [-2.610126, 2.922809, -0.080488, 0.002170] test_list.append(rot_naca0012) # Lid-driven cavity @@ -753,7 +749,7 @@ def main(): cavity.cfg_dir = "moving_wall/cavity" cavity.cfg_file = "lam_cavity.cfg" cavity.test_iter = 25 - cavity.test_vals = [-5.627868, -0.164405, 0.053283, 2.545817] + cavity.test_vals = [-5.627870, -0.164404, 0.054706, 2.545833] test_list.append(cavity) # Spinning cylinder @@ -761,7 +757,7 @@ def main(): spinning_cylinder.cfg_dir = "moving_wall/spinning_cylinder" spinning_cylinder.cfg_file = "spinning_cylinder.cfg" spinning_cylinder.test_iter = 25 - spinning_cylinder.test_vals = [-7.892807, -2.467378, 1.702819, 1.669208] + spinning_cylinder.test_vals = [-7.894516, -2.469078, 1.703821, 1.670411] test_list.append(spinning_cylinder) ###################################### @@ -773,7 +769,7 @@ def main(): square_cylinder.cfg_dir = "unsteady/square_cylinder" square_cylinder.cfg_file = "turb_square.cfg" square_cylinder.test_iter = 3 - square_cylinder.test_vals = [-2.557884, -1.173573, 0.058052, 1.399794, 2.220411, 1.399748, 2.218612, -0.453340] + square_cylinder.test_vals = [-2.560839, -1.175927, 0.062080, 1.399401, 2.220371, 1.399349, 2.218609, 0.000000] square_cylinder.unsteady = True test_list.append(square_cylinder) @@ -782,7 +778,7 @@ def main(): sine_gust.cfg_dir = "gust" sine_gust.cfg_file = "inv_gust_NACA0012.cfg" sine_gust.test_iter = 5 - sine_gust.test_vals = [-1.977514, 3.481817, -0.010465, -0.007859] + sine_gust.test_vals = [-1.977498, 3.481817, -0.010657, -0.007976] sine_gust.unsteady = True test_list.append(sine_gust) @@ -791,7 +787,7 @@ def main(): aeroelastic.cfg_dir = "aeroelastic" aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" aeroelastic.test_iter = 2 - aeroelastic.test_vals = [0.074291, 0.027620, -0.001641, -0.000128] + aeroelastic.test_vals = [0.074208, 0.027599, -0.001641, -0.000128] aeroelastic.unsteady = True test_list.append(aeroelastic) @@ -800,7 +796,7 @@ def main(): ddes_flatplate.cfg_dir = "ddes/flatplate" ddes_flatplate.cfg_file = "ddes_flatplate.cfg" ddes_flatplate.test_iter = 10 - ddes_flatplate.test_vals = [-2.714785, -5.882680, -0.215041, 0.023758, -617.450000] + ddes_flatplate.test_vals = [-2.714713, -5.788301, -0.214960, 0.023758, 0.000000] ddes_flatplate.unsteady = True test_list.append(ddes_flatplate) @@ -809,7 +805,7 @@ def main(): unst_inc_turb_naca0015_sa.cfg_dir = "unsteady/pitching_naca0015_rans_inc" unst_inc_turb_naca0015_sa.cfg_file = "config_incomp_turb_sa.cfg" unst_inc_turb_naca0015_sa.test_iter = 1 - unst_inc_turb_naca0015_sa.test_vals = [-3.007635, -6.879778, 1.445293, 0.419274] + unst_inc_turb_naca0015_sa.test_vals = [-3.007635, -6.879809, 1.445300, 0.419281] unst_inc_turb_naca0015_sa.unsteady = True test_list.append(unst_inc_turb_naca0015_sa) @@ -818,7 +814,7 @@ def main(): unst_deforming_naca0012.cfg_dir = "disc_adj_euler/naca0012_pitching_def" unst_deforming_naca0012.cfg_file = "inv_NACA0012_pitching_deform.cfg" unst_deforming_naca0012.test_iter = 5 - unst_deforming_naca0012.test_vals = [-3.665187, -3.793258, -3.716457, -3.148323] + unst_deforming_naca0012.test_vals = [-3.665152, -3.793306, -3.716483, -3.148336] unst_deforming_naca0012.unsteady = True test_list.append(unst_deforming_naca0012) @@ -831,7 +827,7 @@ def main(): ls89_sa.cfg_dir = "nicf/LS89" ls89_sa.cfg_file = "turb_SA_PR.cfg" ls89_sa.test_iter = 20 - ls89_sa.test_vals = [-5.050483, -13.371791, 0.174939, 0.430757] + ls89_sa.test_vals = [-5.050483, -13.371790, 0.174939, 0.430757] test_list.append(ls89_sa) # Rarefaction shock wave edge_VW @@ -839,7 +835,7 @@ def main(): edge_VW.cfg_dir = "nicf/edge" edge_VW.cfg_file = "edge_VW.cfg" edge_VW.test_iter = 20 - edge_VW.test_vals = [-0.768929, 5.433202, -0.000628, 0.000000] + edge_VW.test_vals = [-0.772250, 5.429879, -0.000470, 0.000000] test_list.append(edge_VW) # Rarefaction shock wave edge_PPR @@ -847,7 +843,7 @@ def main(): edge_PPR.cfg_dir = "nicf/edge" edge_PPR.cfg_file = "edge_PPR.cfg" edge_PPR.test_iter = 20 - edge_PPR.test_vals = [-2.017812, 4.174560, 0.000019, 0.000000] + edge_PPR.test_vals = [-2.126694, 4.066051, -0.000013, 0.000000] test_list.append(edge_PPR) @@ -860,7 +856,7 @@ def main(): Aachen_3D_restart.cfg_dir = "turbomachinery/Aachen_turbine" Aachen_3D_restart.cfg_file = "aachen_3D_MP_restart.cfg" Aachen_3D_restart.test_iter = 5 - Aachen_3D_restart.test_vals = [-9.829185, -8.875103, -9.609505, -8.075194, -7.759490, -4.360713] + Aachen_3D_restart.test_vals = [-7.701448, -8.512359, -6.014939, -6.468741, -5.801762, -4.607173, -5.551041, -5.300777, -3.804188, -5.256055, -5.765225, -3.609601, -2.229277, -2.883896, -0.563470] test_list.append(Aachen_3D_restart) # Jones APU Turbocharger restart @@ -868,7 +864,7 @@ def main(): Jones_tc_restart.cfg_dir = "turbomachinery/APU_turbocharger" Jones_tc_restart.cfg_file = "Jones_restart.cfg" Jones_tc_restart.test_iter = 5 - Jones_tc_restart.test_vals = [-10.466644, -2.871703, -19.193464, -13.487820, -11.582397, -6.306167, 73273, 73273, 0.019884, 82.491] + Jones_tc_restart.test_vals = [-7.308013, -5.332076, -14.895815, -9.330694, -12.071730, -6.548620, 73291.000000, 73291.000000, 0.020111, 82.896000] test_list.append(Jones_tc_restart) # 2D axial stage @@ -876,8 +872,7 @@ def main(): axial_stage2D.cfg_dir = "turbomachinery/axial_stage_2D" axial_stage2D.cfg_file = "Axial_stage2D.cfg" axial_stage2D.test_iter = 20 - axial_stage2D.test_vals = [0.983751, 1.534480, -2.888520, 2.606773, -2.418421, 3.087187, 106380.000000, 106380.000000, 5.732500, 64.711000] - axial_stage2D.test_vals_aarch64 = [0.983751, 1.534480, -2.888520, 2.606773, -2.418421, 3.087187, 106380, 106380, 5.7325, 64.711] + axial_stage2D.test_vals = [1.090052, 1.551005, -2.895066, 2.607594, -2.479704, 3.063740, 106380.000000, 106380.000000, 5.733600, 64.747000] test_list.append(axial_stage2D) # 2D transonic stator restart @@ -885,8 +880,8 @@ def main(): transonic_stator_restart.cfg_dir = "turbomachinery/transonic_stator_2D" transonic_stator_restart.cfg_file = "transonic_stator_restart.cfg" transonic_stator_restart.test_iter = 20 - transonic_stator_restart.test_vals = [-5.008547, -3.102420, -2.752033, 1.091152, -3.543849, 2.169844, -471630.000000, 94.866000, -0.035806] - transonic_stator_restart.test_vals_aarch64 = [-5.008547, -3.102420, -2.752033, 1.091152, -3.543849, 2.169844, -471630, 94.866, -0.035806] + transonic_stator_restart.test_vals = [-4.359175, -2.486698, -2.079382, 1.736046, -1.443172, 3.240049, -471620.000000, 94.840000, -0.055450] + transonic_stator_restart.test_vals_aarch64 = [-4.359175, -2.486698, -2.079382, 1.736046, -1.443172, 3.240049, -471620.000000, 94.840000, -0.055450] test_list.append(transonic_stator_restart) # Multiple turbomachinery interface restart @@ -915,8 +910,7 @@ def main(): uniform_flow.cfg_dir = "sliding_interface/uniform_flow" uniform_flow.cfg_file = "uniform_NN.cfg" uniform_flow.test_iter = 2 - uniform_flow.test_vals = [2.000000, 0.000000, -0.202697, -13.249572] - uniform_flow.test_vals_aarch64 = [2.000000, 0.000000, -0.205134, -13.250720] #last 4 columns + uniform_flow.test_vals = [2.000000, 0.000000, -0.230641, -13.250022] uniform_flow.tol = 0.000001 uniform_flow.unsteady = True uniform_flow.multizone = True @@ -927,8 +921,7 @@ def main(): channel_2D.cfg_dir = "sliding_interface/channel_2D" channel_2D.cfg_file = "channel_2D_WA.cfg" channel_2D.test_iter = 2 - channel_2D.test_vals = [2.000000, 0.000000, 0.419778, 0.352185, 0.404395] - channel_2D.test_vals_aarch64 = [2.000000, 0.000000, 0.398053, 0.352788, 0.405474] #last 5 columns + channel_2D.test_vals = [2.000000, 0.000000, 0.464920, 0.348054, 0.397553] channel_2D.timeout = 100 channel_2D.unsteady = True channel_2D.multizone = True @@ -939,8 +932,7 @@ def main(): channel_3D.cfg_dir = "sliding_interface/channel_3D" channel_3D.cfg_file = "channel_3D_WA.cfg" channel_3D.test_iter = 1 - channel_3D.test_vals = [1.000000, 0.000000, 0.657678, 0.767752, 0.692208] - channel_3D.test_vals_aarch64 = [1.000000, 0.000000, 0.661408, 0.769902, 0.695663] #last 5 columns + channel_3D.test_vals = [1.000000, 0.000000, 0.611989, 0.798999, 0.702438] channel_3D.unsteady = True channel_3D.multizone = True test_list.append(channel_3D) @@ -950,7 +942,7 @@ def main(): pipe.cfg_dir = "sliding_interface/pipe" pipe.cfg_file = "pipe_NN.cfg" pipe.test_iter = 2 - pipe.test_vals = [0.481390, 0.648695, 0.982990, 1.018349] + pipe.test_vals = [0.547322, 0.655095, 0.968232, 1.049121] pipe.unsteady = True pipe.multizone = True test_list.append(pipe) @@ -960,7 +952,7 @@ def main(): rotating_cylinders.cfg_dir = "sliding_interface/rotating_cylinders" rotating_cylinders.cfg_file = "rot_cylinders_WA.cfg" rotating_cylinders.test_iter = 3 - rotating_cylinders.test_vals = [3.000000, 0.000000, 0.719778, 1.111044, 1.154068] + rotating_cylinders.test_vals = [3.000000, 0.000000, 0.717067, 1.119816, 1.160327] rotating_cylinders.unsteady = True rotating_cylinders.multizone = True test_list.append(rotating_cylinders) @@ -970,7 +962,7 @@ def main(): supersonic_vortex_shedding.cfg_dir = "sliding_interface/supersonic_vortex_shedding" supersonic_vortex_shedding.cfg_file = "sup_vor_shed_WA.cfg" supersonic_vortex_shedding.test_iter = 5 - supersonic_vortex_shedding.test_vals = [5.000000, 0.000000, 1.207949, 1.036092] + supersonic_vortex_shedding.test_vals = [5.000000, 0.000000, 1.207119, 1.065262] supersonic_vortex_shedding.unsteady = True supersonic_vortex_shedding.multizone = True test_list.append(supersonic_vortex_shedding) @@ -980,7 +972,7 @@ def main(): bars_SST_2D.cfg_dir = "sliding_interface/bars_SST_2D" bars_SST_2D.cfg_file = "bars.cfg" bars_SST_2D.test_iter = 13 - bars_SST_2D.test_vals = [13.000000, -0.773513, -1.700012] + bars_SST_2D.test_vals = [13.000000, 1.167903, -1.660900] bars_SST_2D.multizone = True test_list.append(bars_SST_2D) @@ -1020,8 +1012,8 @@ def main(): statbeam3d.cfg_dir = "fea_fsi/StatBeam_3d" statbeam3d.cfg_file = "configBeam_3d.cfg" statbeam3d.test_iter = 0 - statbeam3d.test_vals = [-8.498245, -8.230816, -8.123810, 64095.000000] - statbeam3d.test_vals_aarch64 = [-8.498254, -8.230683, -8.123819, 64095.0] #last 4 columns + statbeam3d.test_vals = [-6.168640, -5.939035, -6.071159, 110190] + statbeam3d.test_vals_aarch64 = [-6.168640, -5.939035, -6.071159, 110190] #last 4 columns test_list.append(statbeam3d) # Mix elem, 3d beam, Knowles @@ -1048,7 +1040,7 @@ def main(): fsi2d.cfg_dir = "fea_fsi/WallChannel_2d" fsi2d.cfg_file = "configFSI.cfg" fsi2d.test_iter = 4 - fsi2d.test_vals = [4.000000, 0.000000, -3.729228, -4.153949] + fsi2d.test_vals = [4.000000, 0.000000, -3.726014, -4.277767] fsi2d.multizone = True fsi2d.unsteady = True test_list.append(fsi2d) @@ -1058,7 +1050,7 @@ def main(): stat_fsi.cfg_dir = "fea_fsi/stat_fsi" stat_fsi.cfg_file = "config.cfg" stat_fsi.test_iter = 7 - stat_fsi.test_vals = [-3.345064, -4.996078, 0.000000, 7.000000] + stat_fsi.test_vals = [-3.336320, -4.991964, 0.000000, 7.000000] stat_fsi.multizone = True test_list.append(stat_fsi) @@ -1067,7 +1059,7 @@ def main(): stat_fsi_restart.cfg_dir = "fea_fsi/stat_fsi" stat_fsi_restart.cfg_file = "config_restart.cfg" stat_fsi_restart.test_iter = 1 - stat_fsi_restart.test_vals = [-3.404628, -4.288921, 0.000000, 27.000000] + stat_fsi_restart.test_vals = [-3.401553, -4.672932, 0.000000, 26.000000] stat_fsi_restart.multizone = True test_list.append(stat_fsi_restart) @@ -1076,8 +1068,7 @@ def main(): dyn_fsi.cfg_dir = "fea_fsi/dyn_fsi" dyn_fsi.cfg_file = "config.cfg" dyn_fsi.test_iter = 4 - dyn_fsi.test_vals = [-4.330444, -4.058003, 0.000000, 86.000000] - dyn_fsi.test_vals_aarch64 = [-4.355809, -4.060588, 0.000000, 86.000000] #last 4 columns + dyn_fsi.test_vals = [-4.330728, -4.152995, 0.000000, 85.000000] dyn_fsi.multizone = True dyn_fsi.unsteady = True test_list.append(dyn_fsi) @@ -1088,7 +1079,7 @@ def main(): airfoilRBF.cfg_file = "config.cfg" airfoilRBF.test_iter = 1 - airfoilRBF.test_vals = [1.000000, -2.581853, -5.085822] + airfoilRBF.test_vals = [1.000000, 0.086004, -3.365759] airfoilRBF.tol = 0.0001 airfoilRBF.multizone = True test_list.append(airfoilRBF) @@ -1102,7 +1093,7 @@ def main(): p1rad.cfg_dir = "radiation/p1model" p1rad.cfg_file = "configp1.cfg" p1rad.test_iter = 100 - p1rad.test_vals = [-7.751309, -7.923059, -2.119084, 0.091733, -44.537000] + p1rad.test_vals = [-7.751309, -7.923059, -2.119084, 0.091733, -47.387000] test_list.append(p1rad) # ############################### @@ -1143,7 +1134,7 @@ def main(): mms_fvm_ns.cfg_dir = "mms/fvm_navierstokes" mms_fvm_ns.cfg_file = "lam_mms_roe.cfg" mms_fvm_ns.test_iter = 20 - mms_fvm_ns.test_vals = [-2.851428, 2.192348, 0.000000, 0.000000] + mms_fvm_ns.test_vals = [-2.808514, 2.152654, 0.000000, 0.000000] mms_fvm_ns.tol = 0.0001 test_list.append(mms_fvm_ns) @@ -1486,7 +1477,7 @@ def main(): opt_multiobj1surf_py.cfg_dir = "optimization_euler/multiobjective_wedge" opt_multiobj1surf_py.cfg_file = "inv_wedge_ROE_multiobj_1surf.cfg" opt_multiobj1surf_py.test_iter = 1 - opt_multiobj1surf_py.test_vals = [1.000000, 1.000000, 36.117740, 4.438036] + opt_multiobj1surf_py.test_vals = [1.000000, 1.000000, 36.122920, 4.611743] opt_multiobj1surf_py.command = TestCase.Command(exec = "shape_optimization.py", param = "-g CONTINUOUS_ADJOINT -f") opt_multiobj1surf_py.timeout = 1600 opt_multiobj1surf_py.tol = 0.00001 @@ -1499,7 +1490,7 @@ def main(): opt_2surf1obj_py.cfg_dir = "optimization_euler/multiobjective_wedge" opt_2surf1obj_py.cfg_file = "inv_wedge_ROE_2surf_1obj.cfg" opt_2surf1obj_py.test_iter = 1 - opt_2surf1obj_py.test_vals = [1.000000, 1.000000, 2.005219, 0.000369] + opt_2surf1obj_py.test_vals = [1.000000, 1.000000, 2.005099, 0.000383] opt_2surf1obj_py.command = TestCase.Command(exec = "shape_optimization.py", param = "-g CONTINUOUS_ADJOINT -f") opt_2surf1obj_py.timeout = 1600 opt_2surf1obj_py.tol = 0.00001 @@ -1516,7 +1507,7 @@ def main(): pywrapper_naca0012.cfg_dir = "euler/naca0012" pywrapper_naca0012.cfg_file = "inv_NACA0012_Roe.cfg" pywrapper_naca0012.test_iter = 20 - pywrapper_naca0012.test_vals = [-4.444941, -3.941038, 0.318998, 0.022365] + pywrapper_naca0012.test_vals = [-4.766184, -4.287722, 0.326688, 0.022661] pywrapper_naca0012.command = TestCase.Command(exec = "SU2_CFD.py", param = "-f") pywrapper_naca0012.timeout = 1600 pywrapper_naca0012.tol = 0.00001 @@ -1529,8 +1520,8 @@ def main(): pywrapper_turb_naca0012_sst.cfg_dir = "rans/naca0012" pywrapper_turb_naca0012_sst.cfg_file = "turb_NACA0012_sst.cfg" pywrapper_turb_naca0012_sst.test_iter = 10 - pywrapper_turb_naca0012_sst.test_vals = [-12.213755, -14.439873, -7.108062, 1.050109, 0.019148, -1.875539, -38.510000] - pywrapper_turb_naca0012_sst.test_vals_aarch64 = [-12.213728, -14.439873, -7.108062, 1.050109, 0.019148, -1.875538, -38.510000] + pywrapper_turb_naca0012_sst.test_vals = [-12.229889, -14.434883, -6.037177, 1.047444, 0.019214, -2.108366, 0.000000] + pywrapper_turb_naca0012_sst.test_vals_aarch64 = [-12.229889, -14.434883, -6.037177, 1.047444, 0.019214, -2.108366, 0.000000] pywrapper_turb_naca0012_sst.command = TestCase.Command(exec = "SU2_CFD.py", param = "-f") pywrapper_turb_naca0012_sst.timeout = 3200 pywrapper_turb_naca0012_sst.tol = 0.00001 @@ -1543,7 +1534,7 @@ def main(): pywrapper_square_cylinder.cfg_dir = "unsteady/square_cylinder" pywrapper_square_cylinder.cfg_file = "turb_square.cfg" pywrapper_square_cylinder.test_iter = 3 - pywrapper_square_cylinder.test_vals = [-2.557884, -1.173573, 0.058052, 1.399794, 2.220411, 1.399748, 2.218612, -0.453340] + pywrapper_square_cylinder.test_vals = [-2.560839, -1.175927, 0.062080, 1.399401, 2.220371, 1.399349, 2.218609, 0.000000] pywrapper_square_cylinder.command = TestCase.Command(exec = "SU2_CFD.py", param = "-f") pywrapper_square_cylinder.timeout = 1600 pywrapper_square_cylinder.tol = 0.00001 @@ -1557,7 +1548,7 @@ def main(): pywrapper_aeroelastic.cfg_dir = "aeroelastic" pywrapper_aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" pywrapper_aeroelastic.test_iter = 2 - pywrapper_aeroelastic.test_vals = [0.074291, 0.027620, -0.001641, -0.000128] + pywrapper_aeroelastic.test_vals = [0.074208, 0.027599, -0.001641, -0.000128] pywrapper_aeroelastic.command = TestCase.Command(exec = "SU2_CFD.py", param = "-f") pywrapper_aeroelastic.timeout = 1600 pywrapper_aeroelastic.tol = 0.00001 @@ -1571,7 +1562,7 @@ def main(): pywrapper_fsi2d.cfg_dir = "fea_fsi/WallChannel_2d" pywrapper_fsi2d.cfg_file = "configFSI.cfg" pywrapper_fsi2d.test_iter = 4 - pywrapper_fsi2d.test_vals = [4.000000, 0.000000, -3.729228, -4.153949] + pywrapper_fsi2d.test_vals = [4.000000, 0.000000, -3.726014, -4.277767] pywrapper_fsi2d.command = TestCase.Command(exec = "SU2_CFD.py", param = "--nZone 2 --fsi True -f") pywrapper_fsi2d.unsteady = True pywrapper_fsi2d.multizone = True @@ -1586,7 +1577,7 @@ def main(): pywrapper_unsteadyCHT.cfg_dir = "py_wrapper/flatPlate_unsteady_CHT" pywrapper_unsteadyCHT.cfg_file = "unsteady_CHT_FlatPlate_Conf.cfg" pywrapper_unsteadyCHT.test_iter = 5 - pywrapper_unsteadyCHT.test_vals = [-1.614167, 2.240658, 0.000772, 0.177467] + pywrapper_unsteadyCHT.test_vals = [-1.614167, 2.247359, 0.000771, 0.172997] pywrapper_unsteadyCHT.command = TestCase.Command(exec = "python", param = "launch_unsteady_CHT_FlatPlate.py -f") pywrapper_unsteadyCHT.timeout = 1600 pywrapper_unsteadyCHT.tol = 0.00001 @@ -1600,7 +1591,7 @@ def main(): pywrapper_rigidMotion.cfg_dir = "py_wrapper/flatPlate_rigidMotion" pywrapper_rigidMotion.cfg_file = "flatPlate_rigidMotion_Conf.cfg" pywrapper_rigidMotion.test_iter = 5 - pywrapper_rigidMotion.test_vals = [-1.614165, 2.238592, 0.349984, 0.095593] + pywrapper_rigidMotion.test_vals = [-1.614166, 2.243100, 0.350208, 0.089498] pywrapper_rigidMotion.command = TestCase.Command(exec = "python", param = "launch_flatPlate_rigidMotion.py -f") pywrapper_rigidMotion.timeout = 1600 pywrapper_rigidMotion.tol = 0.00001 @@ -1614,7 +1605,7 @@ def main(): pywrapper_custom_inlet.cfg_dir = "py_wrapper/custom_inlet" pywrapper_custom_inlet.cfg_file = "lam_flatplate.cfg" pywrapper_custom_inlet.test_iter = 20 - pywrapper_custom_inlet.test_vals = [-4.120494, -1.540195, -3.566114, 1.342509, -0.748827, 0.161349, -0.013214, 0.516000, -0.529220] + pywrapper_custom_inlet.test_vals = [-4.123206, -1.543215, -3.735006, 1.339481, -0.793478, 0.161210, -0.007009, 0.513560, -0.520570] pywrapper_custom_inlet.command = TestCase.Command(exec = "python", param = "run.py") pywrapper_custom_inlet.timeout = 1600 pywrapper_custom_inlet.tol = 0.0001 diff --git a/TestCases/serial_regression_AD.py b/TestCases/serial_regression_AD.py index 09043e19eb80..89f64d54c22b 100644 --- a/TestCases/serial_regression_AD.py +++ b/TestCases/serial_regression_AD.py @@ -3,14 +3,14 @@ ## \file serial_regression.py # \brief Python script for automated regression testing of SU2 examples # \author A. Aranake, A. Campos, T. Economon, T. Lukaczyk, S. Padron -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 @@ -50,7 +50,7 @@ def main(): discadj_naca0012.cfg_dir = "cont_adj_euler/naca0012" discadj_naca0012.cfg_file = "inv_NACA0012_discadj.cfg" discadj_naca0012.test_iter = 100 - discadj_naca0012.test_vals = [-3.560691, -8.925239, -0.000000, 0.005559] + discadj_naca0012.test_vals = [-3.562611, -8.932639, -0.000000, 0.005608] test_list.append(discadj_naca0012) # Inviscid Cylinder 3D (multiple markers) @@ -58,7 +58,7 @@ def main(): discadj_cylinder3D.cfg_dir = "disc_adj_euler/cylinder3D" discadj_cylinder3D.cfg_file = "inv_cylinder3D.cfg" discadj_cylinder3D.test_iter = 5 - discadj_cylinder3D.test_vals = [-3.771233, -3.727282, -0.000000, 0.000000] + discadj_cylinder3D.test_vals = [-3.702105, -3.895140, -0.000000, 0.000000] test_list.append(discadj_cylinder3D) # Arina nozzle 2D @@ -66,7 +66,7 @@ def main(): discadj_arina2k.cfg_dir = "disc_adj_euler/arina2k" discadj_arina2k.cfg_file = "Arina2KRS.cfg" discadj_arina2k.test_iter = 20 - discadj_arina2k.test_vals = [-3.534947, -3.773294, 0.027242, 0.000000] + discadj_arina2k.test_vals = [-3.254490, -3.495569, 0.052370, 0.000000] test_list.append(discadj_arina2k) ####################################################### @@ -78,7 +78,7 @@ def main(): discadj_rans_naca0012_sa.cfg_dir = "disc_adj_rans/naca0012" discadj_rans_naca0012_sa.cfg_file = "turb_NACA0012_sa.cfg" discadj_rans_naca0012_sa.test_iter = 10 - discadj_rans_naca0012_sa.test_vals = [-2.230545, 0.644224, 0.180740, -0.000018, 5.000000, -4.275182, 5.000000, -10.051224] + discadj_rans_naca0012_sa.test_vals = [-2.996976, -0.196055, 0.000004, -0.000000, 5.000000, -3.971736, 5.000000, -10.464319] test_list.append(discadj_rans_naca0012_sa) # Adjoint turbulent NACA0012 SST @@ -86,7 +86,7 @@ def main(): discadj_rans_naca0012_sst.cfg_dir = "disc_adj_rans/naca0012" discadj_rans_naca0012_sst.cfg_file = "turb_NACA0012_sst.cfg" discadj_rans_naca0012_sst.test_iter = 10 - discadj_rans_naca0012_sst.test_vals = [-2.221845, -0.491927, 0.182000, -0.000018] + discadj_rans_naca0012_sst.test_vals = [-2.130024, -0.206343, 0.340230, -0.022047] test_list.append(discadj_rans_naca0012_sst) ####################################### @@ -98,7 +98,7 @@ def main(): discadj_incomp_NACA0012.cfg_dir = "disc_adj_incomp_euler/naca0012" discadj_incomp_NACA0012.cfg_file = "incomp_NACA0012_disc.cfg" discadj_incomp_NACA0012.test_iter = 20 - discadj_incomp_NACA0012.test_vals = [20.000000, -4.087948, -2.655204, 0.000000] + discadj_incomp_NACA0012.test_vals = [20.000000, -4.091644, -2.655563, 0.000000] test_list.append(discadj_incomp_NACA0012) ##################################### @@ -110,7 +110,7 @@ def main(): discadj_incomp_cylinder.cfg_dir = "disc_adj_incomp_navierstokes/cylinder" discadj_incomp_cylinder.cfg_file = "heated_cylinder.cfg" discadj_incomp_cylinder.test_iter = 20 - discadj_incomp_cylinder.test_vals = [20.000000, -2.373367, -2.368305, 0.000000] + discadj_incomp_cylinder.test_vals = [20.000000, -2.386480, -2.408986, 0.000000] test_list.append(discadj_incomp_cylinder) ####################################################### @@ -122,7 +122,7 @@ def main(): discadj_cylinder.cfg_dir = "disc_adj_rans/cylinder" discadj_cylinder.cfg_file = "cylinder.cfg" discadj_cylinder.test_iter = 9 - discadj_cylinder.test_vals = [3.746909, -1.544883, -0.008321, 0.000014] + discadj_cylinder.test_vals = [1.639372, -2.834285, -0.009538, 0.000020] discadj_cylinder.unsteady = True test_list.append(discadj_cylinder) @@ -135,7 +135,7 @@ def main(): discadj_DT_1ST_cylinder.cfg_dir = "disc_adj_rans/cylinder_DT_1ST" discadj_DT_1ST_cylinder.cfg_file = "cylinder.cfg" discadj_DT_1ST_cylinder.test_iter = 9 - discadj_DT_1ST_cylinder.test_vals = [3.698168, -1.607050, -0.002159, 0.000028] + discadj_DT_1ST_cylinder.test_vals = [1.196420, -3.339046, -0.006211, 0.000020] discadj_DT_1ST_cylinder.unsteady = True test_list.append(discadj_DT_1ST_cylinder) @@ -148,7 +148,7 @@ def main(): discadj_pitchingNACA0012.cfg_dir = "disc_adj_euler/naca0012_pitching" discadj_pitchingNACA0012.cfg_file = "inv_NACA0012_pitching.cfg" discadj_pitchingNACA0012.test_iter = 4 - discadj_pitchingNACA0012.test_vals = [-1.220016, -1.646770, -0.007597, 0.000013] + discadj_pitchingNACA0012.test_vals = [-1.219518, -1.646199, -0.007607, 0.000013] discadj_pitchingNACA0012.unsteady = True test_list.append(discadj_pitchingNACA0012) @@ -157,7 +157,7 @@ def main(): unst_deforming_naca0012.cfg_dir = "disc_adj_euler/naca0012_pitching_def" unst_deforming_naca0012.cfg_file = "inv_NACA0012_pitching_deform_ad.cfg" unst_deforming_naca0012.test_iter = 4 - unst_deforming_naca0012.test_vals = [-1.959357, -1.843601, 2729.700000, 0.000004] + unst_deforming_naca0012.test_vals = [-1.960419, -1.844186, 2970.700000, 0.000004] unst_deforming_naca0012.unsteady = True test_list.append(unst_deforming_naca0012) @@ -183,7 +183,7 @@ def main(): discadj_heat.cfg_dir = "disc_adj_heat" discadj_heat.cfg_file = "disc_adj_heat.cfg" discadj_heat.test_iter = 10 - discadj_heat.test_vals = [-2.122406, 0.693852, 0.000000, -0.869010] + discadj_heat.test_vals = [-2.174678, 0.591525, 0.000000, 0.008748] test_list.append(discadj_heat) ################################### @@ -195,7 +195,7 @@ def main(): discadj_fsi.cfg_dir = "disc_adj_fsi" discadj_fsi.cfg_file = "config.cfg" discadj_fsi.test_iter = 6 - discadj_fsi.test_vals = [6.000000, -1.965877, -3.084381, 0.000440, -1.063100] + discadj_fsi.test_vals = [6.000000, -8.928327, -10.009868, 3.1056e-11, -1.7613e-06] test_list.append(discadj_fsi) ################################### @@ -337,7 +337,7 @@ def main(): pywrapper_CFD_AD_MeshDisp.cfg_dir = "py_wrapper/disc_adj_flow/mesh_disp_sens" pywrapper_CFD_AD_MeshDisp.cfg_file = "configAD_flow.cfg" pywrapper_CFD_AD_MeshDisp.test_iter = 1000 - pywrapper_CFD_AD_MeshDisp.test_vals = [30.000000, -2.505330, 1.409290, 0.000000] + pywrapper_CFD_AD_MeshDisp.test_vals = [30.000000, -2.496380, 1.441373, 0.000000] pywrapper_CFD_AD_MeshDisp.command = TestCase.Command(exec = "python", param = "run_adjoint.py -f") pywrapper_CFD_AD_MeshDisp.timeout = 1600 pywrapper_CFD_AD_MeshDisp.tol = 0.000001 diff --git a/TestCases/sliding_interface/bars_SST_2D/bars.cfg b/TestCases/sliding_interface/bars_SST_2D/bars.cfg index 6cd8d1857d47..c29ecdcd043e 100644 --- a/TestCases/sliding_interface/bars_SST_2D/bars.cfg +++ b/TestCases/sliding_interface/bars_SST_2D/bars.cfg @@ -5,7 +5,7 @@ % Author: A. Rubino % % Institution: Delft University of Technology % % Date: Feb 27th, 2017 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/bars_SST_2D/zone_1.cfg b/TestCases/sliding_interface/bars_SST_2D/zone_1.cfg index 2da70905be7b..2f73cb219250 100644 --- a/TestCases/sliding_interface/bars_SST_2D/zone_1.cfg +++ b/TestCases/sliding_interface/bars_SST_2D/zone_1.cfg @@ -5,7 +5,7 @@ % Author: A. Rubino % % Institution: Delft University of Technology % % Date: Feb 27th, 2017 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/bars_SST_2D/zone_2.cfg b/TestCases/sliding_interface/bars_SST_2D/zone_2.cfg index d6d0e532887d..32febcd8ecc1 100644 --- a/TestCases/sliding_interface/bars_SST_2D/zone_2.cfg +++ b/TestCases/sliding_interface/bars_SST_2D/zone_2.cfg @@ -5,7 +5,7 @@ % Author: A. Rubino % % Institution: Delft University of Technology % % Date: Feb 27th, 2017 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/sliding_interface/bars_SST_2D/zone_3.cfg b/TestCases/sliding_interface/bars_SST_2D/zone_3.cfg index 09060c4cd6a6..c93b8009e53e 100644 --- a/TestCases/sliding_interface/bars_SST_2D/zone_3.cfg +++ b/TestCases/sliding_interface/bars_SST_2D/zone_3.cfg @@ -5,7 +5,7 @@ % Author: A. Rubino % % Institution: Delft University of Technology % % Date: Feb 27th, 2017 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/channel_2D/channel_2D_NN.cfg b/TestCases/sliding_interface/channel_2D/channel_2D_NN.cfg index 445d8e05407d..ff54aae49c52 100644 --- a/TestCases/sliding_interface/channel_2D/channel_2D_NN.cfg +++ b/TestCases/sliding_interface/channel_2D/channel_2D_NN.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/channel_2D/channel_2D_WA.cfg b/TestCases/sliding_interface/channel_2D/channel_2D_WA.cfg index a579a274fd9a..2a760df77cdb 100644 --- a/TestCases/sliding_interface/channel_2D/channel_2D_WA.cfg +++ b/TestCases/sliding_interface/channel_2D/channel_2D_WA.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/channel_2D/zone_2.cfg b/TestCases/sliding_interface/channel_2D/zone_2.cfg index ac95b79f5ba2..b19168dcd4db 100644 --- a/TestCases/sliding_interface/channel_2D/zone_2.cfg +++ b/TestCases/sliding_interface/channel_2D/zone_2.cfg @@ -5,7 +5,7 @@ % Author: A. Rubino % % Institution: Delft University of Technology % % Date: Feb 27th, 2017 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/sliding_interface/channel_2D/zone_3.cfg b/TestCases/sliding_interface/channel_2D/zone_3.cfg index 09060c4cd6a6..c93b8009e53e 100644 --- a/TestCases/sliding_interface/channel_2D/zone_3.cfg +++ b/TestCases/sliding_interface/channel_2D/zone_3.cfg @@ -5,7 +5,7 @@ % Author: A. Rubino % % Institution: Delft University of Technology % % Date: Feb 27th, 2017 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/channel_3D/channel_3D_NN.cfg b/TestCases/sliding_interface/channel_3D/channel_3D_NN.cfg index b3283d02d2d2..64d874411aaf 100644 --- a/TestCases/sliding_interface/channel_3D/channel_3D_NN.cfg +++ b/TestCases/sliding_interface/channel_3D/channel_3D_NN.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/channel_3D/channel_3D_WA.cfg b/TestCases/sliding_interface/channel_3D/channel_3D_WA.cfg index b5e632096940..e495d584b164 100644 --- a/TestCases/sliding_interface/channel_3D/channel_3D_WA.cfg +++ b/TestCases/sliding_interface/channel_3D/channel_3D_WA.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/channel_3D/zone_1.cfg b/TestCases/sliding_interface/channel_3D/zone_1.cfg index 368d2ee72174..44710988f291 100644 --- a/TestCases/sliding_interface/channel_3D/zone_1.cfg +++ b/TestCases/sliding_interface/channel_3D/zone_1.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/channel_3D/zone_2.cfg b/TestCases/sliding_interface/channel_3D/zone_2.cfg index c72ef258837c..d742fad77051 100644 --- a/TestCases/sliding_interface/channel_3D/zone_2.cfg +++ b/TestCases/sliding_interface/channel_3D/zone_2.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/sliding_interface/channel_3D/zone_3.cfg b/TestCases/sliding_interface/channel_3D/zone_3.cfg index e3d483a86944..eaf521dc2a00 100644 --- a/TestCases/sliding_interface/channel_3D/zone_3.cfg +++ b/TestCases/sliding_interface/channel_3D/zone_3.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/sliding_interface/incompressible_steady/config.cfg b/TestCases/sliding_interface/incompressible_steady/config.cfg index 190b44876714..76ab43617818 100644 --- a/TestCases/sliding_interface/incompressible_steady/config.cfg +++ b/TestCases/sliding_interface/incompressible_steady/config.cfg @@ -5,7 +5,7 @@ % Author: Ruben Sanchez % % Institution: Chair for Scientific Computing, TU Kaiserslautern % % Date: January 28th, 2018 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/sliding_interface/incompressible_steady/configCircle.cfg b/TestCases/sliding_interface/incompressible_steady/configCircle.cfg index f956988fcccb..8b0fc5db8a0a 100644 --- a/TestCases/sliding_interface/incompressible_steady/configCircle.cfg +++ b/TestCases/sliding_interface/incompressible_steady/configCircle.cfg @@ -5,7 +5,7 @@ % Author: Ruben Sanchez % % Institution: Chair for Scientific Computing, TU Kaiserslautern % % Date: January 28th, 2018 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/sliding_interface/incompressible_steady/configOut.cfg b/TestCases/sliding_interface/incompressible_steady/configOut.cfg index 9ce32d853df0..8fe66a47a677 100644 --- a/TestCases/sliding_interface/incompressible_steady/configOut.cfg +++ b/TestCases/sliding_interface/incompressible_steady/configOut.cfg @@ -5,7 +5,7 @@ % Author: Ruben Sanchez % % Institution: Chair for Scientific Computing, TU Kaiserslautern % % Date: January 28th, 2018 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/sliding_interface/incompressible_unsteady/config.cfg b/TestCases/sliding_interface/incompressible_unsteady/config.cfg index e7b83d6b350d..6b3263694814 100644 --- a/TestCases/sliding_interface/incompressible_unsteady/config.cfg +++ b/TestCases/sliding_interface/incompressible_unsteady/config.cfg @@ -5,7 +5,7 @@ % Author: Ruben Sanchez % % Institution: Chair for Scientific Computing, TU Kaiserslautern % % Date: January 28th, 2018 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/sliding_interface/incompressible_unsteady/configCircle.cfg b/TestCases/sliding_interface/incompressible_unsteady/configCircle.cfg index ccb1a958fc90..36b5e623c341 100644 --- a/TestCases/sliding_interface/incompressible_unsteady/configCircle.cfg +++ b/TestCases/sliding_interface/incompressible_unsteady/configCircle.cfg @@ -5,7 +5,7 @@ % Author: Ruben Sanchez % % Institution: Chair for Scientific Computing, TU Kaiserslautern % % Date: January 28th, 2018 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/sliding_interface/incompressible_unsteady/configOut.cfg b/TestCases/sliding_interface/incompressible_unsteady/configOut.cfg index 6501a9f25aa3..6881c2227fcf 100644 --- a/TestCases/sliding_interface/incompressible_unsteady/configOut.cfg +++ b/TestCases/sliding_interface/incompressible_unsteady/configOut.cfg @@ -5,7 +5,7 @@ % Author: Ruben Sanchez % % Institution: Chair for Scientific Computing, TU Kaiserslautern % % Date: January 28th, 2018 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/sliding_interface/pipe/pipe_NN.cfg b/TestCases/sliding_interface/pipe/pipe_NN.cfg index fda92958f3d3..d902070b8c8e 100644 --- a/TestCases/sliding_interface/pipe/pipe_NN.cfg +++ b/TestCases/sliding_interface/pipe/pipe_NN.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/pipe/pipe_WA.cfg b/TestCases/sliding_interface/pipe/pipe_WA.cfg index 67b71f40fa3b..5ffaec1a0c47 100644 --- a/TestCases/sliding_interface/pipe/pipe_WA.cfg +++ b/TestCases/sliding_interface/pipe/pipe_WA.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/pipe/zone_1.cfg b/TestCases/sliding_interface/pipe/zone_1.cfg index 40b0529d549a..330ff7ca10d7 100644 --- a/TestCases/sliding_interface/pipe/zone_1.cfg +++ b/TestCases/sliding_interface/pipe/zone_1.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/pipe/zone_2.cfg b/TestCases/sliding_interface/pipe/zone_2.cfg index c16760fd8945..bb39436b1ed2 100644 --- a/TestCases/sliding_interface/pipe/zone_2.cfg +++ b/TestCases/sliding_interface/pipe/zone_2.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/pipe/zone_3.cfg b/TestCases/sliding_interface/pipe/zone_3.cfg index ecc56f7ab283..1832e33882f0 100644 --- a/TestCases/sliding_interface/pipe/zone_3.cfg +++ b/TestCases/sliding_interface/pipe/zone_3.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/pipe/zone_4.cfg b/TestCases/sliding_interface/pipe/zone_4.cfg index 20c1efe5c584..21dc8aea15e7 100644 --- a/TestCases/sliding_interface/pipe/zone_4.cfg +++ b/TestCases/sliding_interface/pipe/zone_4.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/pipe/zone_5.cfg b/TestCases/sliding_interface/pipe/zone_5.cfg index c16760fd8945..bb39436b1ed2 100644 --- a/TestCases/sliding_interface/pipe/zone_5.cfg +++ b/TestCases/sliding_interface/pipe/zone_5.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/rotating_cylinders/rot_cylinders_NN.cfg b/TestCases/sliding_interface/rotating_cylinders/rot_cylinders_NN.cfg index 36610bbf8223..77d2b22fd0e4 100644 --- a/TestCases/sliding_interface/rotating_cylinders/rot_cylinders_NN.cfg +++ b/TestCases/sliding_interface/rotating_cylinders/rot_cylinders_NN.cfg @@ -5,7 +5,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/rotating_cylinders/rot_cylinders_WA.cfg b/TestCases/sliding_interface/rotating_cylinders/rot_cylinders_WA.cfg index 20d8471f1f47..b223b5f6fccc 100644 --- a/TestCases/sliding_interface/rotating_cylinders/rot_cylinders_WA.cfg +++ b/TestCases/sliding_interface/rotating_cylinders/rot_cylinders_WA.cfg @@ -5,7 +5,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/single_stage/single_stage_NN.cfg b/TestCases/sliding_interface/single_stage/single_stage_NN.cfg index 3c2b9acebac1..c4bd15fc2beb 100644 --- a/TestCases/sliding_interface/single_stage/single_stage_NN.cfg +++ b/TestCases/sliding_interface/single_stage/single_stage_NN.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/single_stage/single_stage_WA.cfg b/TestCases/sliding_interface/single_stage/single_stage_WA.cfg index dac849121bcb..cdb8a04e48e5 100644 --- a/TestCases/sliding_interface/single_stage/single_stage_WA.cfg +++ b/TestCases/sliding_interface/single_stage/single_stage_WA.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/single_stage/zone_1.cfg b/TestCases/sliding_interface/single_stage/zone_1.cfg index 39d26fb51ae2..12a8191f024e 100644 --- a/TestCases/sliding_interface/single_stage/zone_1.cfg +++ b/TestCases/sliding_interface/single_stage/zone_1.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/single_stage/zone_2.cfg b/TestCases/sliding_interface/single_stage/zone_2.cfg index b079f02ed192..7ed4b5615328 100644 --- a/TestCases/sliding_interface/single_stage/zone_2.cfg +++ b/TestCases/sliding_interface/single_stage/zone_2.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/supersonic_vortex_shedding/sup_vor_shed_NN.cfg b/TestCases/sliding_interface/supersonic_vortex_shedding/sup_vor_shed_NN.cfg index fa0d09e4f596..b37b5f3a674f 100644 --- a/TestCases/sliding_interface/supersonic_vortex_shedding/sup_vor_shed_NN.cfg +++ b/TestCases/sliding_interface/supersonic_vortex_shedding/sup_vor_shed_NN.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/supersonic_vortex_shedding/sup_vor_shed_WA.cfg b/TestCases/sliding_interface/supersonic_vortex_shedding/sup_vor_shed_WA.cfg index 384a0c178a8e..b88941af7c14 100644 --- a/TestCases/sliding_interface/supersonic_vortex_shedding/sup_vor_shed_WA.cfg +++ b/TestCases/sliding_interface/supersonic_vortex_shedding/sup_vor_shed_WA.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/supersonic_vortex_shedding/zone_1.cfg b/TestCases/sliding_interface/supersonic_vortex_shedding/zone_1.cfg index 2c8bcc6a6173..3d98a9517129 100644 --- a/TestCases/sliding_interface/supersonic_vortex_shedding/zone_1.cfg +++ b/TestCases/sliding_interface/supersonic_vortex_shedding/zone_1.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/sliding_interface/supersonic_vortex_shedding/zone_2.cfg b/TestCases/sliding_interface/supersonic_vortex_shedding/zone_2.cfg index 93834285887e..a4011ae3ea79 100644 --- a/TestCases/sliding_interface/supersonic_vortex_shedding/zone_2.cfg +++ b/TestCases/sliding_interface/supersonic_vortex_shedding/zone_2.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/sliding_interface/uniform_flow/uniform_NN.cfg b/TestCases/sliding_interface/uniform_flow/uniform_NN.cfg index 3fdd6df8a3f3..55cf9bef4bdc 100644 --- a/TestCases/sliding_interface/uniform_flow/uniform_NN.cfg +++ b/TestCases/sliding_interface/uniform_flow/uniform_NN.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/uniform_flow/uniform_WA.cfg b/TestCases/sliding_interface/uniform_flow/uniform_WA.cfg index 850dd7c48a87..7960be6ee52a 100644 --- a/TestCases/sliding_interface/uniform_flow/uniform_WA.cfg +++ b/TestCases/sliding_interface/uniform_flow/uniform_WA.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/uniform_flow/zone_1.cfg b/TestCases/sliding_interface/uniform_flow/zone_1.cfg index da558f2b493b..aca019d43279 100644 --- a/TestCases/sliding_interface/uniform_flow/zone_1.cfg +++ b/TestCases/sliding_interface/uniform_flow/zone_1.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/sliding_interface/uniform_flow/zone_2.cfg b/TestCases/sliding_interface/uniform_flow/zone_2.cfg index e4ee199e1e7f..07a52244ba7f 100644 --- a/TestCases/sliding_interface/uniform_flow/zone_2.cfg +++ b/TestCases/sliding_interface/uniform_flow/zone_2.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/solid_heat_conduction/periodic_pins/configSolid.cfg b/TestCases/solid_heat_conduction/periodic_pins/configSolid.cfg index 7563c7647621..4c5d51c36b8e 100644 --- a/TestCases/solid_heat_conduction/periodic_pins/configSolid.cfg +++ b/TestCases/solid_heat_conduction/periodic_pins/configSolid.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: Bosch Thermotechniek B.V. % % Date: 2021.09.27 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/species_transport/multizone/configMaster.cfg b/TestCases/species_transport/multizone/configMaster.cfg index 7517375fab0e..115762404865 100644 --- a/TestCases/species_transport/multizone/configMaster.cfg +++ b/TestCases/species_transport/multizone/configMaster.cfg @@ -5,7 +5,7 @@ % Author: N. Beishuizen % % Institution: Technische Universiteit Eindhoven % % Date: November 1, 2022 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/species_transport/passive_transport_validation/passive_transport.cfg b/TestCases/species_transport/passive_transport_validation/passive_transport.cfg index 503ce0052e41..e81cccff6ded 100644 --- a/TestCases/species_transport/passive_transport_validation/passive_transport.cfg +++ b/TestCases/species_transport/passive_transport_validation/passive_transport.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: Bosch Thermotechniek B.V % % Date: 2021.10.02 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi.cfg b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi.cfg index e2d3b8d10895..f08b48f92797 100644 --- a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi.cfg +++ b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: Bosch Thermotechniek B.V. % % Date: 2021/10/14 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_boundedscalar.cfg b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_boundedscalar.cfg index 766b40f267fb..e38bc56e5b06 100644 --- a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_boundedscalar.cfg +++ b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_boundedscalar.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: Bosch Thermotechniek B.V. % % Date: 2021/10/14 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel.cfg b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel.cfg index 502edbfcea9d..86cbbb9a33bc 100644 --- a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel.cfg +++ b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel.cfg @@ -7,7 +7,7 @@ % Author: Cristopher Morales Ubal % % Institution: Eindhoven University of Technology % % Date: 2022/06/15 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.cfg b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.cfg index 08e40714a1b5..adbff709f82a 100644 --- a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.cfg +++ b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.cfg @@ -8,7 +8,7 @@ % Author: Cristopher Morales Ubal % % Institution: Eindhoven University of Technology % % Date: 2022/12/05 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_boundedscalar.cfg b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_boundedscalar.cfg index aed44fe9fda9..12807b4d4973 100644 --- a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_boundedscalar.cfg +++ b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_boundedscalar.cfg @@ -7,7 +7,7 @@ % Author: Cristopher Morales Ubal % % Institution: Eindhoven University of Technology % % Date: 2022/06/15 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_heatcapacity_H2.cfg b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_heatcapacity_H2.cfg index cfc84264296b..76cb0089a3e6 100644 --- a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_heatcapacity_H2.cfg +++ b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_heatcapacity_H2.cfg @@ -8,7 +8,7 @@ % Author: Cristopher Morales Ubal % % Institution: Eindhoven University of Technology % % Date: 2022/09/12 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.cfg b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.cfg index dbac08389e5f..103c0d449f94 100644 --- a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.cfg +++ b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.cfg @@ -9,7 +9,7 @@ % Author: Cristopher Morales Ubal % % Institution: Eindhoven University of Technology % % Date: 2022/10/12 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_viscosity.cfg b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_viscosity.cfg index 68d8c37b0f1a..3ebb2c629768 100644 --- a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_viscosity.cfg +++ b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_viscosity.cfg @@ -8,7 +8,7 @@ % Author: Cristopher Morales Ubal % % Institution: Eindhoven University of Technology % % Date: 2022/06/27 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/species_transport/venturi_primitive_3species/species3_primitiveVenturi_inletFile.cfg b/TestCases/species_transport/venturi_primitive_3species/species3_primitiveVenturi_inletFile.cfg index eed1a1fea21f..6ef15ea2b9c3 100644 --- a/TestCases/species_transport/venturi_primitive_3species/species3_primitiveVenturi_inletFile.cfg +++ b/TestCases/species_transport/venturi_primitive_3species/species3_primitiveVenturi_inletFile.cfg @@ -6,7 +6,7 @@ % Author: T. Kattmann % % Institution: Bosch Thermotechniek B.V. % % Date: 2021/10/14 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/transition/E387_Airfoil/transitional_BC_model_ConfigFile.cfg b/TestCases/transition/E387_Airfoil/transitional_BC_model_ConfigFile.cfg index 3da389783dbb..67dee8f54a65 100644 --- a/TestCases/transition/E387_Airfoil/transitional_BC_model_ConfigFile.cfg +++ b/TestCases/transition/E387_Airfoil/transitional_BC_model_ConfigFile.cfg @@ -6,7 +6,7 @@ % Institution: TOBB University of Economics and Technology % % TAI-TUSAS Turkish Aerospace Industries % % Date: Oct 10th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/transition/Schubauer_Klebanoff/transitional_BC_model_ConfigFile.cfg b/TestCases/transition/Schubauer_Klebanoff/transitional_BC_model_ConfigFile.cfg index 1a67dafe7ed8..8ccc174953b2 100644 --- a/TestCases/transition/Schubauer_Klebanoff/transitional_BC_model_ConfigFile.cfg +++ b/TestCases/transition/Schubauer_Klebanoff/transitional_BC_model_ConfigFile.cfg @@ -6,7 +6,7 @@ % Institution: TOBB University of Economics and Technology % % TAI-TUSAS Turkish Aerospace Industries % % Date: Oct 10th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/transition/T3A_FlatPlate/transitional_BC_model_ConfigFile.cfg b/TestCases/transition/T3A_FlatPlate/transitional_BC_model_ConfigFile.cfg index 4c0df3c73ce6..bdefe3e16a8d 100644 --- a/TestCases/transition/T3A_FlatPlate/transitional_BC_model_ConfigFile.cfg +++ b/TestCases/transition/T3A_FlatPlate/transitional_BC_model_ConfigFile.cfg @@ -6,7 +6,7 @@ % Institution: TOBB University of Economics and Technology % % TAI-TUSAS Turkish Aerospace Industries % % Date: Oct 10th, 2016 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/turbomachinery/APU_turbocharger/Jones_restart.cfg b/TestCases/turbomachinery/APU_turbocharger/Jones_restart.cfg index 405bea3ae75e..054791aabb3f 100755 --- a/TestCases/turbomachinery/APU_turbocharger/Jones_restart.cfg +++ b/TestCases/turbomachinery/APU_turbocharger/Jones_restart.cfg @@ -5,7 +5,7 @@ % Author: S. Vitale % % Institution: Delft University of Technology % % Date: Jun 28th, 2017 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/turbomachinery/Aachen_turbine/aachen_3D_MP_restart.cfg b/TestCases/turbomachinery/Aachen_turbine/aachen_3D_MP_restart.cfg old mode 100644 new mode 100755 index 97f2e133e61f..05c383114b8b --- a/TestCases/turbomachinery/Aachen_turbine/aachen_3D_MP_restart.cfg +++ b/TestCases/turbomachinery/Aachen_turbine/aachen_3D_MP_restart.cfg @@ -119,6 +119,15 @@ CONDUCTIVITY_MODEL= CONSTANT_PRANDTL %Navier-Stokes wall boundary marker(s) (NONE = no marker) MARKER_HEATFLUX= (BLADE1, 0.0, BLADE2, 0.0, BLADE3, 0.0, HUB1, 0.0, SHROUD1, 0.0, HUB2, 0.0, SHROUD2, 0.0, HUB3, 0.0, SHROUD3, 0.0) % +% ------------------------ WALL FUNCTION DEFINITION --------------------------% +% +MARKER_WALL_FUNCTIONS= ( BLADE1, STANDARD_WALL_FUNCTION , BLADE2, STANDARD_WALL_FUNCTION , BLADE3, STANDARD_WALL_FUNCTION , HUB1, STANDARD_WALL_FUNCTION , SHROUD1, STANDARD_WALL_FUNCTION , HUB2, STANDARD_WALL_FUNCTION , SHROUD2, STANDARD_WALL_FUNCTION , HUB3, STANDARD_WALL_FUNCTION , SHROUD3, STANDARD_WALL_FUNCTION ) +WALLMODEL_KAPPA= 0.41 +WALLMODEL_B= 5.5 +WALLMODEL_MINYPLUS= 5.0 +WALLMODEL_MAXITER= 200 +WALLMODEL_RELFAC= 0.5 + % Periodic boundary marker(s) (NONE = no marker) % Format: ( periodic marker, donor marker, rot_cen_x, rot_cen_y, rot_cen_z, rot_angle_x-axis, rot_angle_y-axis, rot_angle_z-axis, translation_x, translation_y, translation_z) MARKER_PERIODIC= (PER1_STATOR1, PER2_STATOR1, 0.0, 0.0, 0.0, 0.0, 0.0, 8.7804878, 0.0, 0.0, 0.0, PER1_ROTOR, PER2_ROTOR, 0.0, 0.0, 0.0, 0.0, 0.0, 8.7804878, 0.0, 0.0, 0.0, PER1_STATOR2, PER2_STATOR2, 0.0, 0.0, 0.0, 0.0, 0.0, 8.7804878, 0.0, 0.0, 0.0) @@ -167,7 +176,7 @@ TURBULENT_MIXINGPLANE= YES RAMP_OUTLET_PRESSURE= NO % % Parameters of the outlet pressure ramp (starting outlet pressure, updating-iteration-frequency, total number of iteration for the ramp) -RAMP_OUTLET_PRESSURE_COEFF= (140000.0, 10.0, 2000) +RAMP_OUTLET_PRESSURE_COEFF= (140000.0, 150.0, 2000) % % Specify Kind of average process for linearizing the Navier-Stokes equation at inflow and outflow BC included mixing-plane % (ALGEBRAIC, AREA, MASSSFLUX, MIXEDOUT) default AREA @@ -196,7 +205,7 @@ MARKER_MONITORING= (BLADE1, BLADE2, BLADE3) NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES % % Courant-Friedrichs-Lewy condition of the finest grid -CFL_NUMBER= 10 +CFL_NUMBER= 2 % % Adaptive CFL number (NO, YES) CFL_ADAPT= NO @@ -230,8 +239,8 @@ LIMITER_ITER= 999999 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % % Convective numerical method -CONV_NUM_METHOD_FLOW= ROE -ENTROPY_FIX_COEFF= 0.001 +CONV_NUM_METHOD_FLOW= JST +ENTROPY_FIX_COEFF= 0.3 % JST_SENSOR_COEFF= ( 0.5, 0.25 ) % Spatial numerical order integration @@ -294,7 +303,7 @@ CONV_RESIDUAL_MINVAL= -12 CONV_STARTITER= 10 % % Screen output fields (use 'SU2_CFD -d ' to view list of available fields) -SCREEN_OUTPUT= (OUTER_ITER, RMS_DENSITY[0], RMS_DENSITY[1], RMS_DENSITY[2], RMS_MOMENTUM-X[0], RMS_MOMENTUM-Y[0], RMS_ENERGY[0]) +SCREEN_OUTPUT= (OUTER_ITER, RMS_DENSITY[0], RMS_DENSITY[1], RMS_DENSITY[2], RMS_MOMENTUM-X[0], RMS_MOMENTUM-X[1], RMS_MOMENTUM-X[2], RMS_MOMENTUM-Y[0], RMS_MOMENTUM-Y[1], RMS_MOMENTUM-Y[2], RMS_MOMENTUM-Z[0], RMS_MOMENTUM-Z[1], RMS_MOMENTUM-Z[2], RMS_ENERGY[0], RMS_ENERGY[1], RMS_ENERGY[2]) % % History output groups (use 'SU2_CFD -d ' to view list of available fields) HISTORY_OUTPUT= (ITER, RMS_RES, TURBO_PERF) @@ -349,7 +358,7 @@ SURFACE_FILENAME= surface_flow SURFACE_ADJ_FILENAME= surface_adjoint % % Writing solution file frequency -OUTPUT_WRT_FREQ= 500 +OUTPUT_WRT_FREQ= 1000 % % Writing convergence history frequency HISTORY_WRT_FREQ_OUTER= 1 diff --git a/TestCases/turbomachinery/axial_stage_2D/Axial_stage2D.cfg b/TestCases/turbomachinery/axial_stage_2D/Axial_stage2D.cfg index f53bdcf2baa4..e0f2a0a8ab4d 100755 --- a/TestCases/turbomachinery/axial_stage_2D/Axial_stage2D.cfg +++ b/TestCases/turbomachinery/axial_stage_2D/Axial_stage2D.cfg @@ -5,7 +5,7 @@ % Author: S. Vitale % % Institution: Delft University of Technology % % Date: Feb 28th, 2017 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/turbomachinery/axial_stage_2D/zone_1.cfg b/TestCases/turbomachinery/axial_stage_2D/zone_1.cfg index ae0544905856..a3f701cad35c 100644 --- a/TestCases/turbomachinery/axial_stage_2D/zone_1.cfg +++ b/TestCases/turbomachinery/axial_stage_2D/zone_1.cfg @@ -5,7 +5,7 @@ % Author: S. Vitale % % Institution: Delft University of Technology % % Date: Feb 28th, 2017 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/turbomachinery/axial_stage_2D/zone_2.cfg b/TestCases/turbomachinery/axial_stage_2D/zone_2.cfg index a0934eb366d6..900ee31690d7 100644 --- a/TestCases/turbomachinery/axial_stage_2D/zone_2.cfg +++ b/TestCases/turbomachinery/axial_stage_2D/zone_2.cfg @@ -5,7 +5,7 @@ % Author: S. Vitale % % Institution: Delft University of Technology % % Date: Feb 28th, 2017 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/turbomachinery/centrifugal_blade/centrifugal_blade.cfg b/TestCases/turbomachinery/centrifugal_blade/centrifugal_blade.cfg index 08e2327e3085..7dce6faded11 100755 --- a/TestCases/turbomachinery/centrifugal_blade/centrifugal_blade.cfg +++ b/TestCases/turbomachinery/centrifugal_blade/centrifugal_blade.cfg @@ -5,7 +5,7 @@ % Author:S. Vitale % % Institution: Delft University of Technology % % Date: Oct 26th, 2015 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/turbomachinery/centrifugal_stage/centrifugal_stage.cfg b/TestCases/turbomachinery/centrifugal_stage/centrifugal_stage.cfg index ff14695c1e47..41fbe6aee81c 100755 --- a/TestCases/turbomachinery/centrifugal_stage/centrifugal_stage.cfg +++ b/TestCases/turbomachinery/centrifugal_stage/centrifugal_stage.cfg @@ -5,7 +5,7 @@ % Author: S. Vitale % % Institution: Delft University of Technology % % Date: Oct 28th, 2015 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/turbomachinery/multi_interface/multi_interface_rst.cfg b/TestCases/turbomachinery/multi_interface/multi_interface_rst.cfg index 8d5c456d2a0e..b91511acf66e 100644 --- a/TestCases/turbomachinery/multi_interface/multi_interface_rst.cfg +++ b/TestCases/turbomachinery/multi_interface/multi_interface_rst.cfg @@ -6,7 +6,7 @@ % Author: J. Kelly % % Institution: University of Liverpool % % Date: Sep 5th, 2024 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/turbomachinery/transonic_stator_2D/transonic_stator_restart.cfg b/TestCases/turbomachinery/transonic_stator_2D/transonic_stator_restart.cfg index 9ae4300d381b..1650b6e03e20 100644 --- a/TestCases/turbomachinery/transonic_stator_2D/transonic_stator_restart.cfg +++ b/TestCases/turbomachinery/transonic_stator_2D/transonic_stator_restart.cfg @@ -5,7 +5,7 @@ % Author: S. Vitale % % Institution: Delft University of Technology % % Date: 2017.03.01 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/tutorials.py b/TestCases/tutorials.py index 59e0f298a53e..457d5697a0e0 100644 --- a/TestCases/tutorials.py +++ b/TestCases/tutorials.py @@ -3,14 +3,14 @@ ## \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 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 @@ -69,7 +69,7 @@ def main(): cht_CR.cfg_dir = "../Tutorials/multiphysics/contact_resistance_cht" cht_CR.cfg_file = "master.cfg" cht_CR.test_iter = 80 - cht_CR.test_vals = [ -8.857438, -9.377593, -10.097769, -2.122358] + cht_CR.test_vals = [-8.606916, -9.227614, -10.411673, -2.114949] cht_CR.multizone = True test_list.append(cht_CR) @@ -80,7 +80,7 @@ def main(): sp_pinArray_2d_mf_hf.cfg_dir = "../Tutorials/incompressible_flow/Inc_Streamwise_Periodic" sp_pinArray_2d_mf_hf.cfg_file = "sp_pinArray_2d_mf_hf.cfg" sp_pinArray_2d_mf_hf.test_iter = 25 - sp_pinArray_2d_mf_hf.test_vals = [-4.613682, 1.471278, -0.748987, 241.667177] + sp_pinArray_2d_mf_hf.test_vals = [-4.666594, 1.403293, -0.758331, 241.626886] test_list.append(sp_pinArray_2d_mf_hf) # 2D pin case pressure drop periodic with heatflux BC and temperature periodicity @@ -88,9 +88,45 @@ def main(): sp_pinArray_2d_dp_hf_tp.cfg_dir = "../Tutorials/incompressible_flow/Inc_Streamwise_Periodic" sp_pinArray_2d_dp_hf_tp.cfg_file = "sp_pinArray_2d_dp_hf_tp.cfg" sp_pinArray_2d_dp_hf_tp.test_iter = 25 - sp_pinArray_2d_dp_hf_tp.test_vals = [-4.640621, 1.436697, -0.707302, 208.023676] + sp_pinArray_2d_dp_hf_tp.test_vals = [-4.718616, 1.341279, -0.716655, 208.023676] test_list.append(sp_pinArray_2d_dp_hf_tp) + # 90 degree pipe bend with wall functions from the experiments of Sudo et al. + sudo_tutorial = TestCase('sudo_bend') + sudo_tutorial.cfg_dir = "../Tutorials/incompressible_flow/Inc_Turbulent_Bend_Wallfunctions" + sudo_tutorial.cfg_file = "sudo.cfg" + sudo_tutorial.test_iter = 10 + sudo_tutorial.test_vals = [-14.664419, -12.789769, -13.280336, -13.016392, -13.018817, -9.510066, 15.000000, -1.994192] + sudo_tutorial.command = TestCase.Command("mpirun -n 2", "SU2_CFD") + test_list.append(sudo_tutorial) + + # design-primal: 90 degree pipe bend with wall functions from the experiments of Sudo et al. + sudo_design_primal = TestCase('sudo_bend_design_primal') + sudo_design_primal.cfg_dir = "../Tutorials/design/Inc_Turbulent_Bend_Wallfunctions" + sudo_design_primal.cfg_file = "sudo_primal.cfg" + sudo_design_primal.test_iter = 10 + sudo_design_primal.test_vals = [-12.282828, -11.284608, -11.508705, -10.879281, -11.317890, -8.080709, 64.545000] + sudo_design_primal.command = TestCase.Command("mpirun -n 2", "SU2_CFD") + test_list.append(sudo_design_primal) + + # design-adjoint: 90 degree pipe bend with wall functions from the experiments of Sudo et al. + sudo_design_adjoint = TestCase('sudo_bend_design_adjoint') + sudo_design_adjoint.cfg_dir = "../Tutorials/design/Inc_Turbulent_Bend_Wallfunctions" + sudo_design_adjoint.cfg_file = "sudo_adjoint.cfg" + sudo_design_adjoint.test_iter = 10 + sudo_design_adjoint.test_vals = [-4.380696, -3.296474, -3.098815, -3.195595, -3.737980, -7.327552] + sudo_design_adjoint.command = TestCase.Command("mpirun -n 2", "SU2_CFD_AD") + test_list.append(sudo_design_adjoint) + + # Laminar vortex shedding behind a cylinder (Re=120) + von_karman_cylinder = TestCase('von_karman_cylinder') + von_karman_cylinder.cfg_dir = "../Tutorials/incompressible_flow/Inc_Von_Karman_Cylinder" + von_karman_cylinder.cfg_file = "unsteady_incomp_cylinder.cfg" + von_karman_cylinder.test_iter = 10 + von_karman_cylinder.test_vals = [-7.845765, -7.681042, -8.736704, -0.002581, 1.423652] + test_list.append(von_karman_cylinder) + + ### Species Transport # 3 species (2 eq) primitive venturi mixing @@ -98,7 +134,7 @@ def main(): species3_primitiveVenturi.cfg_dir = "../Tutorials/incompressible_flow/Inc_Species_Transport" species3_primitiveVenturi.cfg_file = "species3_primitiveVenturi.cfg" species3_primitiveVenturi.test_iter = 50 - species3_primitiveVenturi.test_vals = [-5.869509, -5.252493, -5.127926, -5.912790, -1.767067, -6.152558, -6.304196, 5.000000, -0.933280, 5.000000, -2.314730, 5.000000, -0.680255, 1.649865, 0.500678, 0.596475, 0.552712] + species3_primitiveVenturi.test_vals = [-6.325258, -5.481481, -5.487951, -6.041510, -1.982216, -6.686450, -6.770227, 5.000000, -0.578086, 5.000000, -2.435371, 5.000000, -0.176851, 1.655677, 0.501807, 0.602254, 0.551616] test_list.append(species3_primitiveVenturi) # 3 species (2 eq) primitive venturi mixing @@ -106,7 +142,7 @@ def main(): DAspecies3_primitiveVenturi.cfg_dir = "../Tutorials/incompressible_flow/Inc_Species_Transport" DAspecies3_primitiveVenturi.cfg_file = "DAspecies3_primitiveVenturi.cfg" DAspecies3_primitiveVenturi.test_iter = 50 - DAspecies3_primitiveVenturi.test_vals = [-7.584508, -7.211527, -6.740742, -6.896386, -11.472089, -10.865347, -10.096770] + DAspecies3_primitiveVenturi.test_vals = [-9.822258, -8.691684, -8.724082, -8.421745, -12.992943, -11.017067, -10.232083] DAspecies3_primitiveVenturi.test_vals_aarch64 = [-7.865411, -7.548131, -7.347978, -7.217536, -11.822422, -10.968444, -10.193225] DAspecies3_primitiveVenturi.command = TestCase.Command("mpirun -n 2", "SU2_CFD_AD") test_list.append(DAspecies3_primitiveVenturi) @@ -116,18 +152,10 @@ def main(): kenics_mixer_tutorial.cfg_dir = "../Tutorials/incompressible_flow/Inc_Species_Transport_Composition_Dependent_Model" kenics_mixer_tutorial.cfg_file = "kenics_mixer_tutorial.cfg" kenics_mixer_tutorial.test_iter = 10 - kenics_mixer_tutorial.test_vals = [-7.489796, -6.823473, -6.838032, -5.157793, -7.911512, -3.166212, -7.447901, 5.000000, -1.862212, 4.000000, -5.131048, 3.000000, -6.380193, 0.025472, 0.000000, 0.025472, 0.000000, 64.105000, 8.479200, 48.099000, 7.526700] + kenics_mixer_tutorial.test_vals = [-7.490002, -6.823162, -6.837602, -6.378680, -7.928782, -3.089710, -7.447882, 5.000000, -1.863053, 4.000000, -5.174845, 3.000000, -6.382936, 0.025471, 0.000000, 0.025471, 0.000000, 64.126000, 8.479400, 48.120000, 7.526800] kenics_mixer_tutorial.command = TestCase.Command("mpirun -n 2", "SU2_CFD") test_list.append(kenics_mixer_tutorial) - # 90 degree pipe bend with wall functions from the experiments of Sudo et al. - sudo_tutorial = TestCase('sudo_bend') - sudo_tutorial.cfg_dir = "../Tutorials/incompressible_flow/Inc_Turbulent_Bend_Wallfunctions" - sudo_tutorial.cfg_file = "sudo.cfg" - sudo_tutorial.test_iter = 10 - sudo_tutorial.test_vals = [-14.579462, -13.203791, -13.601782, -12.616876, -14.005299, -10.817605, 15.000000, -2.296083] - sudo_tutorial.command = TestCase.Command("mpirun -n 2", "SU2_CFD") - test_list.append(sudo_tutorial) ### Incompressible Combustion @@ -136,7 +164,7 @@ def main(): premixed_hydrogen.cfg_dir = "../Tutorials/incompressible_flow/Inc_Combustion/1__premixed_hydrogen" premixed_hydrogen.cfg_file = "H2_burner.cfg" premixed_hydrogen.test_iter = 10 - premixed_hydrogen.test_vals = [-9.809794, -10.369804, -11.044267, -4.332945, -11.883789] + premixed_hydrogen.test_vals = [-9.880667, -10.491791, -11.028989, -4.325192, -11.885386] test_list.append(premixed_hydrogen) ### Compressible Flow @@ -146,7 +174,7 @@ def main(): tutorial_inv_bump.cfg_dir = "../Tutorials/compressible_flow/Inviscid_Bump" tutorial_inv_bump.cfg_file = "inv_channel.cfg" tutorial_inv_bump.test_iter = 0 - tutorial_inv_bump.test_vals = [-1.548003, 3.983585, 0.020973, 0.071064] + tutorial_inv_bump.test_vals = [-1.437425, 4.075857, 0.035200, 0.019230] test_list.append(tutorial_inv_bump) # Inviscid Wedge @@ -154,7 +182,7 @@ def main(): tutorial_inv_wedge.cfg_dir = "../Tutorials/compressible_flow/Inviscid_Wedge" tutorial_inv_wedge.cfg_file = "inv_wedge_HLLC.cfg" tutorial_inv_wedge.test_iter = 0 - tutorial_inv_wedge.test_vals = [-0.864206, 4.850246, -0.245674, 0.043209] + tutorial_inv_wedge.test_vals = [-0.481460, 5.253008, -0.281099, 0.049535] tutorial_inv_wedge.no_restart = True test_list.append(tutorial_inv_wedge) @@ -163,7 +191,7 @@ def main(): tutorial_inv_onera.cfg_dir = "../Tutorials/compressible_flow/Inviscid_ONERAM6" tutorial_inv_onera.cfg_file = "inv_ONERAM6.cfg" tutorial_inv_onera.test_iter = 0 - tutorial_inv_onera.test_vals = [-5.504789, -4.895776, 0.249157, 0.118834] + tutorial_inv_onera.test_vals = [-5.204928, -4.597762, 0.294332, 0.115223] tutorial_inv_onera.no_restart = True test_list.append(tutorial_inv_onera) @@ -172,7 +200,7 @@ def main(): tutorial_lam_cylinder.cfg_dir = "../Tutorials/compressible_flow/Laminar_Cylinder" tutorial_lam_cylinder.cfg_file = "lam_cylinder.cfg" tutorial_lam_cylinder.test_iter = 0 - tutorial_lam_cylinder.test_vals = [-6.162141, -0.699617, 0.125776, 69.613563] + tutorial_lam_cylinder.test_vals = [-6.162141, -0.699617, 0.126007, 69.619462] tutorial_lam_cylinder.no_restart = True test_list.append(tutorial_lam_cylinder) @@ -190,7 +218,7 @@ def main(): tutorial_turb_flatplate.cfg_dir = "../Tutorials/compressible_flow/Turbulent_Flat_Plate" tutorial_turb_flatplate.cfg_file = "turb_SA_flatplate.cfg" tutorial_turb_flatplate.test_iter = 0 - tutorial_turb_flatplate.test_vals = [-2.258584, -4.901015, -0.429373, 0.201034] + tutorial_turb_flatplate.test_vals = [-2.258584, -4.901015, -0.429401, 0.201034] tutorial_turb_flatplate.no_restart = True test_list.append(tutorial_turb_flatplate) @@ -199,7 +227,7 @@ def main(): tutorial_trans_flatplate.cfg_dir = "../Tutorials/compressible_flow/Transitional_Flat_Plate" tutorial_trans_flatplate.cfg_file = "transitional_BC_model_ConfigFile.cfg" tutorial_trans_flatplate.test_iter = 0 - tutorial_trans_flatplate.test_vals = [-22.021786, -15.330766, 0.000000, 0.023952] #last 4 columns + tutorial_trans_flatplate.test_vals = [-22.021786, -15.330766, 0.000000, 0.023944] tutorial_trans_flatplate.no_restart = True test_list.append(tutorial_trans_flatplate) @@ -208,7 +236,7 @@ def main(): tutorial_trans_flatplate_T3A.cfg_dir = "../Tutorials/compressible_flow/Transitional_Flat_Plate/Langtry_and_Menter/T3A" tutorial_trans_flatplate_T3A.cfg_file = "transitional_LM_model_ConfigFile.cfg" tutorial_trans_flatplate_T3A.test_iter = 20 - tutorial_trans_flatplate_T3A.test_vals = [-5.837399, -2.092246, -3.983493, -0.302381, -1.920868, 1.667180, -3.496278, 0.391608] + tutorial_trans_flatplate_T3A.test_vals = [-5.837372, -2.092248, -3.985588, -0.302343, -1.938059, 1.767906, -3.496887, 0.391359] tutorial_trans_flatplate_T3A.test_vals_aarch64 = [-5.837368, -2.092246, -3.984172, -0.302357, -1.928108, 1.667157, -3.496279, 0.391610] tutorial_trans_flatplate_T3A.no_restart = True test_list.append(tutorial_trans_flatplate_T3A) @@ -218,7 +246,7 @@ def main(): tutorial_trans_flatplate_T3Am.cfg_dir = "../Tutorials/compressible_flow/Transitional_Flat_Plate/Langtry_and_Menter/T3A-" tutorial_trans_flatplate_T3Am.cfg_file = "transitional_LM_model_ConfigFile.cfg" tutorial_trans_flatplate_T3Am.test_iter = 20 - tutorial_trans_flatplate_T3Am.test_vals = [-6.063700, -1.945073, -3.946836, -0.549147, -3.863792, 2.664440, -2.517610, 1.112977] + tutorial_trans_flatplate_T3Am.test_vals = [-5.887367, -1.965182, -3.915982, -0.391858, -3.893196, 2.628116, -2.486582, 1.346060] tutorial_trans_flatplate_T3Am.test_vals_aarch64 = [-6.063726, -1.945088, -3.946923, -0.549166, -3.863794, 2.664439, -2.517601, 1.112978] tutorial_trans_flatplate_T3Am.no_restart = True test_list.append(tutorial_trans_flatplate_T3Am) @@ -228,7 +256,7 @@ def main(): tutorial_trans_e387_sa.cfg_dir = "../Tutorials/compressible_flow/Transitional_Airfoil/Langtry_and_Menter/E387" tutorial_trans_e387_sa.cfg_file = "transitional_SA_LM_model_ConfigFile.cfg" tutorial_trans_e387_sa.test_iter = 20 - tutorial_trans_e387_sa.test_vals = [-6.527027, -5.081560, -0.795267, 1.022556, 0.150189, 2.000000, -9.580669] + tutorial_trans_e387_sa.test_vals = [-6.527027, -5.082051, -0.795021, 1.022607, 0.150175, 2.000000, -9.581277] tutorial_trans_e387_sa.no_restart = True test_list.append(tutorial_trans_e387_sa) @@ -237,7 +265,7 @@ def main(): tutorial_trans_e387_sst.cfg_dir = "../Tutorials/compressible_flow/Transitional_Airfoil/Langtry_and_Menter/E387" tutorial_trans_e387_sst.cfg_file = "transitional_SST_LM_model_ConfigFile.cfg" tutorial_trans_e387_sst.test_iter = 20 - tutorial_trans_e387_sst.test_vals = [-6.532424, -5.085816, -0.789725, 1.078014, 0.188274, 2.000000, -9.567012] + tutorial_trans_e387_sst.test_vals = [-6.532424, -2.932985, 0.401484, 1.078076, 0.188212, 2.000000, -10.005786] tutorial_trans_e387_sst.no_restart = True test_list.append(tutorial_trans_e387_sst) @@ -246,24 +274,34 @@ def main(): tutorial_turb_oneram6.cfg_dir = "../Tutorials/compressible_flow/Turbulent_ONERAM6" tutorial_turb_oneram6.cfg_file = "turb_ONERAM6.cfg" tutorial_turb_oneram6.test_iter = 0 - tutorial_turb_oneram6.test_vals = [-4.564441, -11.524295, 0.327905, 0.097340] + tutorial_turb_oneram6.test_vals = [-4.564441, -11.533952, 0.330625, 0.097701] test_list.append(tutorial_turb_oneram6) - # NICD Nozzle + # NICFD Nozzle tutorial_nicfd_nozzle = TestCase('nicfd_nozzle') tutorial_nicfd_nozzle.cfg_dir = "../Tutorials/compressible_flow/NICFD_nozzle" tutorial_nicfd_nozzle.cfg_file = "NICFD_nozzle.cfg" tutorial_nicfd_nozzle.test_iter = 20 - tutorial_nicfd_nozzle.test_vals = [-2.056675, -2.124123, 3.687027, 0.000000, 0.000000] + tutorial_nicfd_nozzle.test_vals = [-2.258703, -2.317269, 3.711051, 0.000000, 0.000000] tutorial_nicfd_nozzle.no_restart = True test_list.append(tutorial_nicfd_nozzle) + # NICFD Nozzle using PINN + tutorial_nicfd_nozzle_pinn = TestCase('nicfd_nozzle_pinn') + tutorial_nicfd_nozzle_pinn.cfg_dir = "../Tutorials/compressible_flow/NICFD_nozzle/PhysicsInformed" + tutorial_nicfd_nozzle_pinn.cfg_file = "config_NICFD_PINN.cfg" + tutorial_nicfd_nozzle_pinn.test_iter = 20 + tutorial_nicfd_nozzle_pinn.test_vals = [-3.181747, -1.638856, -1.277037, 2.445964, -11.769570] + tutorial_nicfd_nozzle_pinn.no_restart = True + test_list.append(tutorial_nicfd_nozzle_pinn) + + # Unsteady NACA0012 tutorial_unst_naca0012 = TestCase('unsteady_naca0012') tutorial_unst_naca0012.cfg_dir = "../Tutorials/compressible_flow/Unsteady_NACA0012" tutorial_unst_naca0012.cfg_file = "unsteady_naca0012.cfg" tutorial_unst_naca0012.test_iter = 520 - tutorial_unst_naca0012.test_vals = [520.000000, 0.000000, -5.291711, 0.000000, 0.305248, 0.810326, 0.001814, 0.006573] + tutorial_unst_naca0012.test_vals = [520.000000, 0.000000, -5.290694, 0.000000, 0.317272, 0.820972, 0.002144, 0.012805] tutorial_unst_naca0012.test_vals_aarch64 = [520.000000, 0.000000, -5.298777, 0.000000, 0.288956, 0.736706, 0.002419, 0.007134] tutorial_unst_naca0012.unsteady = True test_list.append(tutorial_unst_naca0012) @@ -273,7 +311,7 @@ def main(): propeller_var_load.cfg_dir = "../Tutorials/compressible_flow/ActuatorDisk_VariableLoad" propeller_var_load.cfg_file = "propeller_variable_load.cfg" propeller_var_load.test_iter = 20 - propeller_var_load.test_vals = [-1.830276, -4.535127, -0.000323, 0.171623] + propeller_var_load.test_vals = [-1.830257, -4.535041, -0.000323, 0.171647] propeller_var_load.timeout = 3200 test_list.append(propeller_var_load) @@ -284,7 +322,7 @@ def main(): tutorial_design_inv_naca0012.cfg_dir = "../Tutorials/design/Inviscid_2D_Unconstrained_NACA0012" tutorial_design_inv_naca0012.cfg_file = "inv_NACA0012_basic.cfg" tutorial_design_inv_naca0012.test_iter = 0 - tutorial_design_inv_naca0012.test_vals = [-3.918503, -3.332494, 0.134359, 0.218097] + tutorial_design_inv_naca0012.test_vals = [-3.585391, -2.989014, 0.169337, 0.235131] tutorial_design_inv_naca0012.no_restart = True test_list.append(tutorial_design_inv_naca0012) @@ -324,6 +362,22 @@ def main(): pass_list = [ test.run_test() for test in test_list ] + + # design-FADO: 90 degree pipe bend optimization + sudo_design_fado = TestCase('sudo_bend_design_fado') + sudo_design_fado.command = TestCase.Command(exec = "python", param = "optimization.py") + sudo_design_fado.cfg_dir = "../Tutorials/design/Inc_Turbulent_Bend_Wallfunctions" + sudo_design_fado.cfg_file = "sudo.cfg" + sudo_design_fado.multizone = False + sudo_design_fado.test_iter = 10 + sudo_design_fado.timeout = 1600 + sudo_design_fado.reference_file = "../../../TestCases/Tutorials/design/Inc_Turbulent_Bend_Wallfunctions/optim.csv.ref" + sudo_design_fado.test_file = "optim.csv" + sudo_design_fado.comp_threshold = 1e-6 + sudo_design_fado.tol_file_percent = 0.1 + pass_list.append(sudo_design_fado.run_filediff()) + test_list.append(sudo_design_fado) + # Tests summary print('==================================================================') print('Summary of the parallel tests') diff --git a/TestCases/unsteady/pitching_naca64a010_euler/pitching_NACA64A010.cfg b/TestCases/unsteady/pitching_naca64a010_euler/pitching_NACA64A010.cfg index 548202908aa5..87218fb08320 100644 --- a/TestCases/unsteady/pitching_naca64a010_euler/pitching_NACA64A010.cfg +++ b/TestCases/unsteady/pitching_naca64a010_euler/pitching_NACA64A010.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2011.11.02 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/unsteady/pitching_naca64a010_rans/turb_NACA64A010.cfg b/TestCases/unsteady/pitching_naca64a010_rans/turb_NACA64A010.cfg index b950e2704886..6cc9cd1dfff5 100644 --- a/TestCases/unsteady/pitching_naca64a010_rans/turb_NACA64A010.cfg +++ b/TestCases/unsteady/pitching_naca64a010_rans/turb_NACA64A010.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2011.11.02 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg b/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg index 6be90a4148ae..932499ec970a 100644 --- a/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg +++ b/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: Jun 12, 2014 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/unsteady/square_cylinder/turb_square.cfg b/TestCases/unsteady/square_cylinder/turb_square.cfg index 3e7fc3a7c56f..356b1510e13d 100644 --- a/TestCases/unsteady/square_cylinder/turb_square.cfg +++ b/TestCases/unsteady/square_cylinder/turb_square.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2013.02.25 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/user_defined_functions/lam_flatplate.cfg b/TestCases/user_defined_functions/lam_flatplate.cfg index 877238551067..5c6cdc9dd094 100644 --- a/TestCases/user_defined_functions/lam_flatplate.cfg +++ b/TestCases/user_defined_functions/lam_flatplate.cfg @@ -4,7 +4,7 @@ % Case description: Test custom outputs and objective function. % % Author: P. Gomes % % Date: 5th Jan 2022 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/vandv.py b/TestCases/vandv.py index ec07fbad2901..d563cc653de0 100644 --- a/TestCases/vandv.py +++ b/TestCases/vandv.py @@ -6,14 +6,14 @@ # - Use the SU2 --dry_run mode for configs of large tests. # - Restart from converged results for medium problems. # - Run small cases (<20s) to convergence. -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 @@ -45,8 +45,8 @@ def main(): p30n30.cfg_dir = "vandv/rans/30p30n" p30n30.cfg_file = "config.cfg" p30n30.test_iter = 20 - p30n30.test_vals = [-10.806343, -10.326374, -10.559106, -10.432754, -13.517105, 0.050962, 2.828563, 1.317849, -0.228843] - p30n30.test_vals_aarch64 = [-10.801521, -10.325747, -10.557163, -10.427274, -13.517118, 0.050962, 2.828563, 1.317849, -0.207763] + p30n30.test_vals = [-10.582183, -10.106601, -10.474910, -10.182549, -12.679336, 0.052181, 2.829820, 1.318613, -0.221374] + p30n30.test_vals_aarch64 = [-10.582183, -10.106601, -10.474910, -10.182549, -12.679336, 0.052181, 2.829820, 1.318613, -0.221374] test_list.append(p30n30) # flat plate - sst-v1994m @@ -54,8 +54,8 @@ def main(): flatplate_sst1994m.cfg_dir = "vandv/rans/flatplate" flatplate_sst1994m.cfg_file = "turb_flatplate_sst.cfg" flatplate_sst1994m.test_iter = 5 - flatplate_sst1994m.test_vals = [-13.027926, -10.276119, -11.311717, -8.137517, -10.520065, -5.127385, 0.002775] - flatplate_sst1994m.test_vals_aarch64 = [-13.028095, -11.271115, -11.532461, -8.387610, -11.417974, -5.116988, 0.002808] + flatplate_sst1994m.test_vals = [-13.034112, -9.631829, -10.705034, -7.564954, -9.926380, -4.911151, 0.002786] + flatplate_sst1994m.test_vals_aarch64 = [-13.024930, -9.634457, -10.707600, -7.558080, -9.926634, -4.910704, 0.002786] test_list.append(flatplate_sst1994m) # bump in channel - sst-v1994m @@ -63,8 +63,8 @@ def main(): bump_sst1994m.cfg_dir = "vandv/rans/bump_in_channel" bump_sst1994m.cfg_file = "turb_bump_sst.cfg" bump_sst1994m.test_iter = 5 - bump_sst1994m.test_vals = [-13.022054, -9.882710, -10.557148, -7.605034, -10.172437, -5.549948, 0.004904] - bump_sst1994m.test_vals_aarch64 = [-13.034665, -10.510699, -10.627802, -7.661320, -10.680337, -5.749566, 0.004972] + bump_sst1994m.test_vals = [-13.058028, -10.648326, -10.605014, -7.606233, -10.707705, -5.453705, 0.004903] + bump_sst1994m.test_vals_aarch64 = [-13.025265, -10.669816, -10.615338, -7.577125, -10.709448, -5.453868, 0.004903] test_list.append(bump_sst1994m) # SWBLI SA @@ -72,8 +72,8 @@ def main(): swbli_sa.cfg_dir = "vandv/rans/swbli" swbli_sa.cfg_file = "config_sa.cfg" swbli_sa.test_iter = 5 - swbli_sa.test_vals = [-11.564511, -10.836187, -11.792765, -10.383947, -15.718717, 0.002212, -2.993991, 1.340100] - swbli_sa.test_vals_aarch64 = [-11.564511, -10.836187, -11.792765, -10.383947, -15.718717, 0.002212, -2.993991, 1.340100] + swbli_sa.test_vals = [-11.511182, -10.750503, -11.853919, -10.320019, -14.316261, 0.002238, -1.585259, 1.276300] + swbli_sa.test_vals_aarch64 = [-11.511278, -10.750583, -11.854073, -10.320108, -14.316261, 0.002238, -1.585354, 1.276300] test_list.append(swbli_sa) @@ -82,9 +82,25 @@ def main(): swbli_sst.cfg_dir = "vandv/rans/swbli" swbli_sst.cfg_file = "config_sst.cfg" swbli_sst.test_iter = 5 - swbli_sst.test_vals = [-11.528112, -10.961624, -11.903226, -10.630539, -11.117619, -4.573066, 0.002318, -2.905628, -4.037947, 1.340100] + swbli_sst.test_vals = [-11.502801, -10.850953, -11.573565, -10.370903, -11.405169, -3.864744, 0.001794, -1.451606, -3.606886, 10.000000] test_list.append(swbli_sst) + # DSMA661 - SA + dsma661_sa = TestCase('dsma661_sa') + dsma661_sa.cfg_dir = "vandv/rans/dsma661" + dsma661_sa.cfg_file = "dsma661_sa_config.cfg" + dsma661_sa.test_iter = 5 + dsma661_sa.test_vals = [-11.013046, -8.140606, -8.989695, -5.978550, -10.593381, 0.155689, 0.024173] + test_list.append(dsma661_sa) + + # DSMA661 - SST-V2003m + dsma661_sst = TestCase('dsma661_sst') + dsma661_sst.cfg_dir = "vandv/rans/dsma661" + dsma661_sst.cfg_file = "dsma661_sst_config.cfg" + dsma661_sst.test_iter = 5 + dsma661_sst.test_vals = [-11.010713, -8.424971, -9.045546, -5.969005, -10.556865, -8.053764, 0.155948, 0.023353] + test_list.append(dsma661_sst) + ########################## ### Incompressible RANS ### ########################## @@ -94,7 +110,7 @@ def main(): sandiajet_sst.cfg_dir = "vandv/species_transport/sandia_jet" sandiajet_sst.cfg_file = "validation.cfg" sandiajet_sst.test_iter = 5 - sandiajet_sst.test_vals = [-17.169907, -13.518707, -15.442566, -12.021165, -9.660040, -15.289842, 5.000000, -2.746249, 5.000000, -4.836800, 5.000000, -3.966350, 0.000259, 0.000000, 0.000000, 0.000259, 4047.400000, 3946.800000, 49.161000, 51.433000] + sandiajet_sst.test_vals = [-17.167460, -14.133874, -15.538854, -14.038830, -10.311748, -15.739547, 5.000000, -2.916316, 5.000000, -5.380194, 5.000000, -4.153689, 0.000258, 0.000000, 0.000000, 0.000258, 4019.500000, 3918.900000, 49.151000, 51.436000] sandiajet_sst.test_vals_aarch64 = [-17.069026, -13.156800, -15.290567, -11.689831, -9.349978, -14.907311, 5.000000, -2.738947, 5.000000, -4.813747, 5.000000, -3.981740, 0.000259, 0.000000, 0.000000, 0.000259, 4047.400000, 3946.800000, 49.161000, 51.433000] test_list.append(sandiajet_sst) diff --git a/TestCases/vandv/rans/dsma661/dsma661_sa_config.cfg b/TestCases/vandv/rans/dsma661/dsma661_sa_config.cfg new file mode 100644 index 000000000000..41c902232a42 --- /dev/null +++ b/TestCases/vandv/rans/dsma661/dsma661_sa_config.cfg @@ -0,0 +1,140 @@ +% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------% +% +% Solver type (EULER, NAVIER_STOKES, RANS, +% INC_EULER, INC_NAVIER_STOKES, INC_RANS, +% NEMO_EULER, NEMO_NAVIER_STOKES, +% FEM_EULER, FEM_NAVIER_STOKES, FEM_RANS, FEM_LES, +% HEAT_EQUATION_FVM, ELASTICITY) +SOLVER= RANS +MATH_PROBLEM= DIRECT +RESTART_SOL= YES +DISCARD_INFILES= NO +SYSTEM_MEASUREMENTS= SI +KIND_TURB_MODEL= SA % (NONE, SA, SST) +SA_OPTIONS= NONE +% +% ------------------------------- SOLVER CONTROL ------------------------------% +% +ITER= 1000000 +CONV_FIELD= RMS_DENSITY +CONV_RESIDUAL_MINVAL= -11 +CONV_STARTITER= 10 +CONV_CAUCHY_ELEMS= 100 +CONV_CAUCHY_EPS= 1E-11 +% +% ---------------------- REFERENCE VALUE DEFINITION ---------------------------% +% +REF_ORIGIN_MOMENT_X = 0.00 +REF_ORIGIN_MOMENT_Y = 0.00 +REF_ORIGIN_MOMENT_Z = 0.00 +REF_LENGTH= 1.0 +REF_VELOCITY= 1.0 +REF_VISCOSITY= 1.0 +REF_AREA= 1.0 +% +% -------------------- COMPRESSIBLE FREE-STREAM DEFINITION --------------------% +% +MACH_NUMBER= 0.088 +AOA= 0 +INIT_OPTION= REYNOLDS +FREESTREAM_OPTION= TEMPERATURE_FS +FREESTREAM_TEMPERATURE= 300 +FREESTREAM_DENSITY= 1.2886 +FREESTREAM_VELOCITY= ( 30.5552677, 0.00, 0.00 ) +FREESTREAM_VISCOSITY= 1.853E-5 +FREESTREAM_NU_FACTOR= 3 +REYNOLDS_NUMBER= 1.2e6 +REYNOLDS_LENGTH= 1.0 +REF_DIMENSIONALIZATION= DIMENSIONAL +% +% --------------------------- VISCOSITY MODEL ---------------------------------% +% +% Viscosity model (SUTHERLAND, CONSTANT_VISCOSITY, POLYNOMIAL_VISCOSITY, FLAMELET). +VISCOSITY_MODEL= SUTHERLAND +MU_CONSTANT= 1.716E-5 +MU_REF= 1.716E-5 +MU_T_REF= 273.15 +SUTHERLAND_CONSTANT= 110.4 +% +% -------------------- BOUNDARY CONDITION DEFINITION --------------------------% +% +% Navier-Stokes (no-slip), constant heat flux wall marker(s) (NONE = no marker) +% Format: ( marker name, constant heat flux (J/m^2), ... ) +MARKER_HEATFLUX= (airfoil, 0.0) +MARKER_FAR= (farfield) +MARKER_PLOTTING = ( airfoil ) +MARKER_MONITORING = ( airfoil ) +MARKER_ANALYZE_AVERAGE = AREA +% +% ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% +% +% Numerical method for spatial gradients (GREEN_GAUSS, WEIGHTED_LEAST_SQUARES) +NUM_METHOD_GRAD= GREEN_GAUSS +CFL_NUMBER= 1000.0 %For coarser meshes 1000 converges fast; for finer meshes 10-100 works well +CFL_ADAPT= NO +CFL_ADAPT_PARAM= ( 0.95, 1.05, 0.001, 10000, 0.00001 ) +% +% -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% +% +CONV_NUM_METHOD_FLOW= ROE +MUSCL_FLOW= YES +SLOPE_LIMITER_FLOW= VAN_ALBADA_EDGE +TIME_DISCRE_FLOW= EULER_IMPLICIT +% +% -------------------- TURBULENT NUMERICAL METHOD DEFINITION ------------------% +% +CONV_NUM_METHOD_TURB= SCALAR_UPWIND +MUSCL_TURB= NO +SLOPE_LIMITER_TURB= VENKATAKRISHNAN +TIME_DISCRE_TURB= EULER_IMPLICIT +% +% ------------------------ LINEAR SOLVER DEFINITION ---------------------------% +% +% Linear solver for implicit formulations (BCGSTAB, FGMRES) +LINEAR_SOLVER= FGMRES +LINEAR_SOLVER_PREC= ILU +LINEAR_SOLVER_ILU_FILL_IN= 0 +LINEAR_SOLVER_ERROR= 1E-3 +LINEAR_SOLVER_ITER= 20 +% +% ------------------------- SCREEN/HISTORY VOLUME OUTPUT --------------------------% +% +SCREEN_OUTPUT= (INNER_ITER, WALL_TIME, RMS_RES, LIFT, DRAG) +HISTORY_OUTPUT= (INNER_ITER, WALL_TIME, RMS_RES, AERO_COEFF, FLOW_COEFF) +VOLUME_OUTPUT = (COORDINATES, SOLUTION, PRIMITIVE, VORTEX_IDENTIFICATION, CFL_NUMBER, MESH_QUALITY, RESIDUALS) +SCREEN_WRT_FREQ_INNER= 1 +HISTORY_WRT_FREQ_INNER= 1 +OUTPUT_WRT_FREQ= 200 +WRT_PERFORMANCE= YES +WRT_AD_STATISTICS= YES +WRT_RESTART_OVERWRITE= YES +WRT_SURFACE_OVERWRITE= YES +WRT_VOLUME_OVERWRITE= YES +WRT_FORCES_BREAKDOWN= YES +% +% ------------------------- INPUT/OUTPUT FILE INFORMATION --------------------------% +% +MESH_FILENAME= mesh_turb_dsma661_65.su2 % mesh_turb_dsma661_65.su2, mesh_turb_dsma661_129.su2, + %mesh_turb_dsma661_257.su2, mesh_turb_dsma661_513.su2, mesh_turb_dsma661_1025.su2 +MESH_FORMAT= SU2 +% 149_29, 297_57, 593_113, 1185_225, 2369_449, +RESTART_FILENAME= restart_flow-149_29.dat +VOLUME_FILENAME= flow-149_29 +BREAKDOWN_FILENAME= forces_breakdown-149_29.dat +CONV_FILENAME= history-149_29 +SURFACE_FILENAME= suface-149_29 + +MESH_OUT_FILENAME= mesh_out.su2 +SOLUTION_FILENAME= sa_restart_flow-149_29.dat +TABULAR_FORMAT= CSV +OUTPUT_PRECISION= 15 +% Files to output +% Possible formats : (TECPLOT_ASCII, TECPLOT, SURFACE_TECPLOT_ASCII, +% SURFACE_TECPLOT, CSV, SURFACE_CSV, PARAVIEW_ASCII, PARAVIEW_LEGACY, SURFACE_PARAVIEW_ASCII, +% SURFACE_PARAVIEW_LEGACY, PARAVIEW, SURFACE_PARAVIEW, RESTART_ASCII, RESTART, CGNS, SURFACE_CGNS, STL_ASCII, STL_BINARY) +% default : (RESTART, PARAVIEW, SURFACE_PARAVIEW) +OUTPUT_FILES= (RESTART, PARAVIEW, SURFACE_PARAVIEW) +VALUE_OBJFUNC_FILENAME= of_eval.dat +READ_BINARY_RESTART= YES +REORIENT_ELEMENTS= YES +% diff --git a/TestCases/vandv/rans/dsma661/dsma661_sst_config.cfg b/TestCases/vandv/rans/dsma661/dsma661_sst_config.cfg new file mode 100644 index 000000000000..e3bcc532d696 --- /dev/null +++ b/TestCases/vandv/rans/dsma661/dsma661_sst_config.cfg @@ -0,0 +1,140 @@ +% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------% +% +% Solver type (EULER, NAVIER_STOKES, RANS, +% INC_EULER, INC_NAVIER_STOKES, INC_RANS, +% NEMO_EULER, NEMO_NAVIER_STOKES, +% FEM_EULER, FEM_NAVIER_STOKES, FEM_RANS, FEM_LES, +% HEAT_EQUATION_FVM, ELASTICITY) +SOLVER= RANS +MATH_PROBLEM= DIRECT +RESTART_SOL= YES +DISCARD_INFILES= NO +SYSTEM_MEASUREMENTS= SI +KIND_TURB_MODEL= SST % (NONE, SA, SST) +SST_OPTIONS= V2003m +% +% ------------------------------- SOLVER CONTROL ------------------------------% +% +ITER= 1000000 +CONV_FIELD= RMS_DENSITY +CONV_RESIDUAL_MINVAL= -11 +CONV_STARTITER= 10 +CONV_CAUCHY_ELEMS= 100 +CONV_CAUCHY_EPS= 1E-11 +% +% ---------------------- REFERENCE VALUE DEFINITION ---------------------------% +% +REF_ORIGIN_MOMENT_X = 0.00 +REF_ORIGIN_MOMENT_Y = 0.00 +REF_ORIGIN_MOMENT_Z = 0.00 +REF_LENGTH= 1.0 +REF_VELOCITY= 1.0 +REF_VISCOSITY= 1.0 +REF_AREA= 1.0 +% +% -------------------- COMPRESSIBLE FREE-STREAM DEFINITION --------------------% +% +MACH_NUMBER= 0.088 +AOA= 0 +INIT_OPTION= REYNOLDS +FREESTREAM_OPTION= TEMPERATURE_FS +FREESTREAM_TEMPERATURE= 300 +FREESTREAM_DENSITY= 1.2886 +FREESTREAM_VELOCITY= ( 30.5552677, 0.00, 0.00 ) +FREESTREAM_VISCOSITY= 1.853E-5 +FREESTREAM_NU_FACTOR= 3 +REYNOLDS_NUMBER= 1.2e6 +REYNOLDS_LENGTH= 1.0 +REF_DIMENSIONALIZATION= DIMENSIONAL +% +% --------------------------- VISCOSITY MODEL ---------------------------------% +% +% Viscosity model (SUTHERLAND, CONSTANT_VISCOSITY, POLYNOMIAL_VISCOSITY, FLAMELET). +VISCOSITY_MODEL= SUTHERLAND +MU_CONSTANT= 1.716E-5 +MU_REF= 1.716E-5 +MU_T_REF= 273.15 +SUTHERLAND_CONSTANT= 110.4 +% +% -------------------- BOUNDARY CONDITION DEFINITION --------------------------% +% +% Navier-Stokes (no-slip), constant heat flux wall marker(s) (NONE = no marker) +% Format: ( marker name, constant heat flux (J/m^2), ... ) +MARKER_HEATFLUX= (airfoil, 0.0) +MARKER_FAR= (farfield) +MARKER_PLOTTING = ( airfoil ) +MARKER_MONITORING = ( airfoil ) +MARKER_ANALYZE_AVERAGE = AREA +% +% ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% +% +% Numerical method for spatial gradients (GREEN_GAUSS, WEIGHTED_LEAST_SQUARES) +NUM_METHOD_GRAD= GREEN_GAUSS +CFL_NUMBER= 1000.0 %For coarser meshes 1000 converges fast; for finer meshes 10-100 works well +CFL_ADAPT= NO +CFL_ADAPT_PARAM= ( 0.95, 1.05, 0.001, 10000, 0.00001 ) +% +% -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% +% +CONV_NUM_METHOD_FLOW= ROE +MUSCL_FLOW= YES +SLOPE_LIMITER_FLOW= VAN_ALBADA_EDGE +TIME_DISCRE_FLOW= EULER_IMPLICIT +% +% -------------------- TURBULENT NUMERICAL METHOD DEFINITION ------------------% +% +CONV_NUM_METHOD_TURB= SCALAR_UPWIND +MUSCL_TURB= NO +SLOPE_LIMITER_TURB= VENKATAKRISHNAN +TIME_DISCRE_TURB= EULER_IMPLICIT +% +% ------------------------ LINEAR SOLVER DEFINITION ---------------------------% +% +% Linear solver for implicit formulations (BCGSTAB, FGMRES) +LINEAR_SOLVER= FGMRES +LINEAR_SOLVER_PREC= LU_SGS +LINEAR_SOLVER_ILU_FILL_IN= 0 +LINEAR_SOLVER_ERROR= 1E-3 +LINEAR_SOLVER_ITER= 20 +% +% ------------------------- SCREEN/HISTORY VOLUME OUTPUT --------------------------% +% +SCREEN_OUTPUT= (INNER_ITER, WALL_TIME, RMS_RES, LIFT, DRAG) +HISTORY_OUTPUT= (INNER_ITER, WALL_TIME, RMS_RES, RMS_NU_TILDE, AERO_COEFF, FLOW_COEFF) +VOLUME_OUTPUT = (COORDINATES, SOLUTION, PRIMITIVE, VORTEX_IDENTIFICATION, CFL_NUMBER, MESH_QUALITY, RESIDUALS) +SCREEN_WRT_FREQ_INNER= 1 +HISTORY_WRT_FREQ_INNER= 1 +OUTPUT_WRT_FREQ= 500 +WRT_PERFORMANCE= YES +WRT_AD_STATISTICS= YES +WRT_RESTART_OVERWRITE= YES +WRT_SURFACE_OVERWRITE= YES +WRT_VOLUME_OVERWRITE= YES +WRT_FORCES_BREAKDOWN= YES +% +% ------------------------- INPUT/OUTPUT FILE INFORMATION --------------------------% +% +MESH_FILENAME= mesh_turb_dsma661_65.su2 % mesh_turb_dsma661_65.su2, mesh_turb_dsma661_129.su2, + %mesh_turb_dsma661_257.su2, mesh_turb_dsma661_513.su2, mesh_turb_dsma661_1025.su2 +MESH_FORMAT= SU2 +% 149_29, 297_57, 593_113, 1185_225, 2369_449, +RESTART_FILENAME= restart_flow-149_29.dat +VOLUME_FILENAME= flow-149_29 +BREAKDOWN_FILENAME= forces_breakdown-149_29.dat +CONV_FILENAME= history-149_29 +SURFACE_FILENAME= suface-149_29 + +MESH_OUT_FILENAME= mesh_out.su2 +SOLUTION_FILENAME= sst_restart_flow-149_29.dat +TABULAR_FORMAT= CSV +OUTPUT_PRECISION= 15 +% Files to output +% Possible formats : (TECPLOT_ASCII, TECPLOT, SURFACE_TECPLOT_ASCII, +% SURFACE_TECPLOT, CSV, SURFACE_CSV, PARAVIEW_ASCII, PARAVIEW_LEGACY, SURFACE_PARAVIEW_ASCII, +% SURFACE_PARAVIEW_LEGACY, PARAVIEW, SURFACE_PARAVIEW, RESTART_ASCII, RESTART, CGNS, SURFACE_CGNS, STL_ASCII, STL_BINARY) +% default : (RESTART, PARAVIEW, SURFACE_PARAVIEW) +OUTPUT_FILES= (RESTART, PARAVIEW, SURFACE_PARAVIEW) +VALUE_OBJFUNC_FILENAME= of_eval.dat +READ_BINARY_RESTART= YES +REORIENT_ELEMENTS= YES +% diff --git a/TestCases/vandv/rans/swbli/config_sa.cfg b/TestCases/vandv/rans/swbli/config_sa.cfg index 93ad793255ce..9c5e1ac0d0f5 100644 --- a/TestCases/vandv/rans/swbli/config_sa.cfg +++ b/TestCases/vandv/rans/swbli/config_sa.cfg @@ -69,12 +69,12 @@ TIME_DISCRE_TURB= EULER_IMPLICIT CFL_NUMBER= 1 CFL_REDUCTION_TURB= 1 CFL_ADAPT= YES -CFL_ADAPT_PARAM= ( 1.0, 1.05, 1, 100, 0.8 ) +CFL_ADAPT_PARAM= ( 1.0, 1.05, 1, 50, 0.8 ) % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= ILU -LINEAR_SOLVER_ERROR= 0.0001 -LINEAR_SOLVER_ITER= 3 +LINEAR_SOLVER_ERROR= 0.1 +LINEAR_SOLVER_ITER= 10 % NEWTON_KRYLOV= YES NEWTON_KRYLOV_IPARAM= ( 0, 3, 1 ) % n0, np, ft diff --git a/TestCases/vandv/rans/swbli/config_sst.cfg b/TestCases/vandv/rans/swbli/config_sst.cfg index f2af3e18ec0f..42d3684879fc 100644 --- a/TestCases/vandv/rans/swbli/config_sst.cfg +++ b/TestCases/vandv/rans/swbli/config_sst.cfg @@ -4,7 +4,7 @@ % SOLVER= RANS KIND_TURB_MODEL= SST -SST_OPTIONS= V2003m +SST_OPTIONS= V2003m, COMPRESSIBILITY-WILCOX REF_DIMENSIONALIZATION= FREESTREAM_VEL_EQ_MACH % % ----------------------------- FREESTREAM ------------------------------ % @@ -68,23 +68,23 @@ MUSCL_TURB= NO TIME_DISCRE_FLOW= EULER_IMPLICIT TIME_DISCRE_TURB= EULER_IMPLICIT % -CFL_NUMBER= 1 +CFL_NUMBER= 10 CFL_REDUCTION_TURB= 1 -CFL_ADAPT= YES -CFL_ADAPT_PARAM= ( 1.0, 1.05, 1, 100, 0.8 ) +CFL_ADAPT= NO +CFL_ADAPT_PARAM= ( 1.0, 1.05, 1, 50, 0.8 ) % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= ILU -LINEAR_SOLVER_ERROR= 0.0001 +LINEAR_SOLVER_ERROR= 0.01 LINEAR_SOLVER_ITER= 3 % -NEWTON_KRYLOV= YES -NEWTON_KRYLOV_IPARAM= ( 0, 3, 1 ) % n0, np, ft +NEWTON_KRYLOV= NO +NEWTON_KRYLOV_IPARAM= ( 0, 0, 1 ) % n0, np, ft NEWTON_KRYLOV_DPARAM= ( 0.0, 1e-20, -3, 1e-5 ) % r0, tp, rf, e % % ------------------------ CONVERGENCE CRITERIA ------------------------- % % -ITER= 2000 +ITER= 20000 CONV_RESIDUAL_MINVAL= -11.5 % % --------------------------- INPUT / OUTPUT ---------------------------- % diff --git a/TestCases/vandv/species_transport/sandia_jet/validation.cfg b/TestCases/vandv/species_transport/sandia_jet/validation.cfg index 7568c041e823..087a2851dcf2 100644 --- a/TestCases/vandv/species_transport/sandia_jet/validation.cfg +++ b/TestCases/vandv/species_transport/sandia_jet/validation.cfg @@ -5,7 +5,7 @@ % Author: S.J.H. Bosmans % % Institution: TU Eindhoven (TU/e) % % Date: 2023/05/04 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/wallfunctions/flatplate/compressible_SA/turb_SA_flatplate.cfg b/TestCases/wallfunctions/flatplate/compressible_SA/turb_SA_flatplate.cfg index b65cb8820953..8e686c5463f8 100644 --- a/TestCases/wallfunctions/flatplate/compressible_SA/turb_SA_flatplate.cfg +++ b/TestCases/wallfunctions/flatplate/compressible_SA/turb_SA_flatplate.cfg @@ -6,7 +6,7 @@ % Author: Nijso Beishuizen, T. Kattmann % % Institution: Bosch Thermotechnology % % Date: 2021.09.01 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/wallfunctions/flatplate/compressible_SST/turb_SST_flatplate.cfg b/TestCases/wallfunctions/flatplate/compressible_SST/turb_SST_flatplate.cfg index 28a11c941c9d..ee1b13db82eb 100644 --- a/TestCases/wallfunctions/flatplate/compressible_SST/turb_SST_flatplate.cfg +++ b/TestCases/wallfunctions/flatplate/compressible_SST/turb_SST_flatplate.cfg @@ -6,7 +6,7 @@ % Author: Nijso Beishuizen, T. Kattmann % % Institution: Bosch Thermotechnology % % Date: 2021.09.01 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/wallfunctions/flatplate/incompressible_SA/turb_SA_flatplate.cfg b/TestCases/wallfunctions/flatplate/incompressible_SA/turb_SA_flatplate.cfg index c31bc403b171..4fd530825189 100644 --- a/TestCases/wallfunctions/flatplate/incompressible_SA/turb_SA_flatplate.cfg +++ b/TestCases/wallfunctions/flatplate/incompressible_SA/turb_SA_flatplate.cfg @@ -6,7 +6,7 @@ % Author: Nijso Beishuizen, T. Kattmann % % Institution: Bosch Thermotechnology % % Date: 2021.09.01 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/wallfunctions/flatplate/incompressible_SST/turb_SST_flatplate.cfg b/TestCases/wallfunctions/flatplate/incompressible_SST/turb_SST_flatplate.cfg index bbb78a8df948..b902cb8ea9b5 100644 --- a/TestCases/wallfunctions/flatplate/incompressible_SST/turb_SST_flatplate.cfg +++ b/TestCases/wallfunctions/flatplate/incompressible_SST/turb_SST_flatplate.cfg @@ -6,7 +6,7 @@ % Author: Nijso Beishuizen, T. Kattmann % % Institution: Bosch Thermotechnology % % Date: 2021.09.01 % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/UnitTests/Common/containers/CLookupTable_tests.cpp b/UnitTests/Common/containers/CLookupTable_tests.cpp index f90ceb08f99b..2ca4924ac7db 100644 --- a/UnitTests/Common/containers/CLookupTable_tests.cpp +++ b/UnitTests/Common/containers/CLookupTable_tests.cpp @@ -2,14 +2,14 @@ * \file CLookupTable_tests.cpp * \brief Unit tests for the lookup table. * \author N. Beishuizen - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/UnitTests/Common/geometry/CGeometry_test.cpp b/UnitTests/Common/geometry/CGeometry_test.cpp index 7ba54ab302d0..e74fe4adf9f1 100644 --- a/UnitTests/Common/geometry/CGeometry_test.cpp +++ b/UnitTests/Common/geometry/CGeometry_test.cpp @@ -2,14 +2,14 @@ * \file CGeometry_tests.cpp * \brief Unit tests for CGeometry. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/UnitTests/Common/geometry/dual_grid/CDualGrid_tests.cpp b/UnitTests/Common/geometry/dual_grid/CDualGrid_tests.cpp index aedc87aac418..a7e22668ec60 100644 --- a/UnitTests/Common/geometry/dual_grid/CDualGrid_tests.cpp +++ b/UnitTests/Common/geometry/dual_grid/CDualGrid_tests.cpp @@ -2,14 +2,14 @@ * \file CDualGrid_tests.cpp * \brief Unit tests for the dual grid classes * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/UnitTests/Common/geometry/primal_grid/CPrimalGrid_tests.cpp b/UnitTests/Common/geometry/primal_grid/CPrimalGrid_tests.cpp index 67d7c7305b1b..0c43597bf940 100644 --- a/UnitTests/Common/geometry/primal_grid/CPrimalGrid_tests.cpp +++ b/UnitTests/Common/geometry/primal_grid/CPrimalGrid_tests.cpp @@ -2,14 +2,14 @@ * \file CPrimalGrid_tests.cpp * \brief Unit tests for the primal grid classes * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/UnitTests/Common/simple_ad_test.cpp b/UnitTests/Common/simple_ad_test.cpp index 8be49be99c9e..258fbe7c31e5 100644 --- a/UnitTests/Common/simple_ad_test.cpp +++ b/UnitTests/Common/simple_ad_test.cpp @@ -4,14 +4,14 @@ * basic functionality, this also serves as a regression test * to make sure that AD works within unit testing. * \author C. Pederson - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/UnitTests/Common/simple_directdiff_test.cpp b/UnitTests/Common/simple_directdiff_test.cpp index 9f8543b29022..31ce7826567b 100644 --- a/UnitTests/Common/simple_directdiff_test.cpp +++ b/UnitTests/Common/simple_directdiff_test.cpp @@ -4,14 +4,14 @@ * basic functionality, this also serves as a regression test * to make sure that DD works within unit testing. * \author C. Pederson - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/UnitTests/Common/toolboxes/C1DInterpolation_tests.cpp b/UnitTests/Common/toolboxes/C1DInterpolation_tests.cpp index ca24201de85d..0b8da6a0ba3d 100644 --- a/UnitTests/Common/toolboxes/C1DInterpolation_tests.cpp +++ b/UnitTests/Common/toolboxes/C1DInterpolation_tests.cpp @@ -2,14 +2,14 @@ * \file C1DInterpolation_tests.cpp * \brief Unit tests for splines and what not. * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/UnitTests/Common/toolboxes/CQuasiNewtonInvLeastSquares_tests.cpp b/UnitTests/Common/toolboxes/CQuasiNewtonInvLeastSquares_tests.cpp index e1001d36c9c6..6480b5dd810c 100644 --- a/UnitTests/Common/toolboxes/CQuasiNewtonInvLeastSquares_tests.cpp +++ b/UnitTests/Common/toolboxes/CQuasiNewtonInvLeastSquares_tests.cpp @@ -3,14 +3,14 @@ * \brief Unit tests for the CQuasiNewtonInvLeastSquares class. * Which should find the root of a n-d linear problem in n+1 iterations. * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/UnitTests/Common/toolboxes/multilayer_perceptron/CLookUp_ANN_tests.cpp b/UnitTests/Common/toolboxes/multilayer_perceptron/CLookUp_ANN_tests.cpp index 3c4171741bb4..00a85a26d0ef 100644 --- a/UnitTests/Common/toolboxes/multilayer_perceptron/CLookUp_ANN_tests.cpp +++ b/UnitTests/Common/toolboxes/multilayer_perceptron/CLookUp_ANN_tests.cpp @@ -2,14 +2,14 @@ * \file CLookUp_ANN_tests.cpp * \brief Unit tests for CLookUp_ANN and CIOMap classes. * \author E.C.Bunschoten - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/UnitTests/Common/toolboxes/ndflattener_tests.cpp b/UnitTests/Common/toolboxes/ndflattener_tests.cpp index 61b5ababeb9e..469a2de2ea12 100644 --- a/UnitTests/Common/toolboxes/ndflattener_tests.cpp +++ b/UnitTests/Common/toolboxes/ndflattener_tests.cpp @@ -2,14 +2,14 @@ * \file ndflattener_tests.cpp * \brief Unit tests for NdFlattener template classes. * \author M. Aehle - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/UnitTests/Common/vectorization.cpp b/UnitTests/Common/vectorization.cpp index 71f790f4672a..b5d8ae4bb2ce 100644 --- a/UnitTests/Common/vectorization.cpp +++ b/UnitTests/Common/vectorization.cpp @@ -2,14 +2,14 @@ * \file vectorization.cpp * \brief Unit tests for the SIMD type and associated expression templates. * \author P. Gomes - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/UnitTests/SU2_CFD/fluid/CFluidModel_tests.cpp b/UnitTests/SU2_CFD/fluid/CFluidModel_tests.cpp new file mode 100644 index 000000000000..9b14f1d8145c --- /dev/null +++ b/UnitTests/SU2_CFD/fluid/CFluidModel_tests.cpp @@ -0,0 +1,122 @@ +/*! + * \file CFluidModel_tests.cpp + * \brief Unit tests for the fluid model classes. + * \author E.Bunschoten + * \version 8.2.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2025, 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 "catch.hpp" +#include +#include "../../../SU2_CFD/include/fluid/CFluidModel.hpp" +#include "../../../SU2_CFD/include/fluid/CIdealGas.hpp" +#include "../../../SU2_CFD/include/fluid/CDataDrivenFluid.hpp" + +void FluidModelChecks(CFluidModel* fluid_model, const su2double val_p, const su2double val_T) { + /*--- Check consistency of reverse look-up ---*/ + { + fluid_model->SetTDState_PT(val_p, val_T); + + const su2double val_rho_fluidmodel = fluid_model->GetDensity(); + const su2double val_e_fluidmodel = fluid_model->GetStaticEnergy(); + + fluid_model->SetTDState_rhoe(val_rho_fluidmodel, val_e_fluidmodel); + CHECK(Approx(fluid_model->GetPressure()) == val_p); + CHECK(Approx(fluid_model->GetTemperature()) == val_T); + } + /*--- Check internal consistency between primary and derived fluid properties ---*/ + fluid_model->SetTDState_PT(val_p, val_T); + const su2double val_rho = fluid_model->GetDensity(); + const su2double val_e = fluid_model->GetStaticEnergy(); + + const su2double dTdrho_e = fluid_model->GetdTdrho_e(); + const su2double dPdrho_e = fluid_model->GetdPdrho_e(); + const su2double dTde_rho = fluid_model->GetdTde_rho(); + const su2double dPde_rho = fluid_model->GetdPde_rho(); + + su2double delta_rho = 1e-2, delta_e = 100.0; + { + fluid_model->SetTDState_rhoe(val_rho + delta_rho, val_e); + const su2double T_plus = fluid_model->GetTemperature(); + const su2double p_plus = fluid_model->GetPressure(); + + fluid_model->SetTDState_rhoe(val_rho - delta_rho, val_e); + const su2double T_minus = fluid_model->GetTemperature(); + const su2double p_minus = fluid_model->GetPressure(); + const su2double dTdrho_e_FD = (T_plus - T_minus) / (2 * delta_rho); + const su2double dPdrho_e_FD = (p_plus - p_minus) / (2 * delta_rho); + + CHECK(dTdrho_e == Approx(dTdrho_e_FD)); + CHECK(dPdrho_e == Approx(dPdrho_e_FD)); + } + { + fluid_model->SetTDState_rhoe(val_rho, val_e + delta_e); + const su2double T_plus = fluid_model->GetTemperature(); + const su2double p_plus = fluid_model->GetPressure(); + + fluid_model->SetTDState_rhoe(val_rho, val_e - delta_e); + const su2double T_minus = fluid_model->GetTemperature(); + const su2double p_minus = fluid_model->GetPressure(); + const su2double dTde_rho_FD = (T_plus - T_minus) / (2 * delta_e); + const su2double dPde_rho_FD = (p_plus - p_minus) / (2 * delta_e); + + CHECK(dTde_rho == Approx(dTde_rho_FD)); + CHECK(dPde_rho == Approx(dPde_rho_FD)); + } +} + +TEST_CASE("Test case for ideal gas fluid model") { + CIdealGas* fluid_model = new CIdealGas(1.4, 287.0); + + FluidModelChecks(fluid_model, 101325, 300.0); + FluidModelChecks(fluid_model, 1e6, 600.0); + + delete fluid_model; +} + +TEST_CASE("Test case for data-driven fluid model") { + std::stringstream config_options; + + config_options << "SOLVER=RANS" << std::endl; + config_options << "KIND_TURB_MODEL=SA" << std::endl; + config_options << "SA_OPTIONS= NONE" << std::endl; + config_options << "REYNOLDS_NUMBER=1e6" << std::endl; + config_options << "FLUID_MODEL=DATADRIVEN_FLUID" << std::endl; + config_options << "USE_PINN=YES" << std::endl; + config_options << "INTERPOLATION_METHOD=MLP" << std::endl; + config_options << "FILENAMES_INTERPOLATOR=(src/SU2/UnitTests/SU2_CFD/fluid/MLP_PINN.mlp)" << std::endl; + config_options << "CONV_NUM_METHOD_FLOW=JST" << std::endl; + + /*--- Setup ---*/ + + CConfig* config = new CConfig(config_options, SU2_COMPONENT::SU2_CFD, false); + + /*--- Define fluid model ---*/ + CDataDrivenFluid* fluid_model = new CDataDrivenFluid(config, false); + + /*--- Check fluid model consistency for several combinations of pressure-temperature. ---*/ + FluidModelChecks(fluid_model, 1.83e6, 523.0); + FluidModelChecks(fluid_model, 2e5, 520.0); + + delete config; + delete fluid_model; +} diff --git a/UnitTests/SU2_CFD/fluid/CFluidModel_tests_AD.cpp b/UnitTests/SU2_CFD/fluid/CFluidModel_tests_AD.cpp new file mode 100644 index 000000000000..d5a24d0ff6a4 --- /dev/null +++ b/UnitTests/SU2_CFD/fluid/CFluidModel_tests_AD.cpp @@ -0,0 +1,156 @@ +/*! + * \file CFluidModel_tests.cpp + * \brief AD unit tests for the fluid model classes. + * \author E.Bunschoten + * \version 8.2.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2025, 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 "catch.hpp" +#include +#include "../../../SU2_CFD/include/fluid/CFluidModel.hpp" +#include "../../../SU2_CFD/include/fluid/CIdealGas.hpp" +#include "../../../SU2_CFD/include/fluid/CDataDrivenFluid.hpp" +#include "../../../SU2_CFD/include/fluid/CPengRobinson.hpp" + +void FluidModelADChecks(CFluidModel* fluid_model, su2double val_p, su2double val_T) { + /*--- Consistency tests for the fluid model secondary variables and AD integration. ---*/ + + /*--- Extract fluid density and static energy. ---*/ + fluid_model->SetTDState_PT(val_p, val_T); + su2double val_rho = fluid_model->GetDensity(); + su2double val_e = fluid_model->GetStaticEnergy(); + + /*--- Test 1: check consistency of pressure derivatives. ---*/ + AD::Reset(); + AD::StartRecording(); + AD::RegisterInput(val_rho); + AD::RegisterInput(val_e); + + fluid_model->SetTDState_rhoe(val_rho, val_e); + su2double val_p_pred = fluid_model->GetPressure(); + AD::RegisterOutput(val_p_pred); + AD::StopRecording(); + + SU2_TYPE::SetDerivative(val_p_pred, 1.0); + AD::ComputeAdjoint(); + + /*--- Extract pressure derivatives from fluid model and AD. ---*/ + const su2double dpdrho_e_AD = SU2_TYPE::GetDerivative(val_rho); + const su2double dpde_rho_AD = SU2_TYPE::GetDerivative(val_e); + const su2double dpdrho_e_pred = fluid_model->GetdPdrho_e(); + const su2double dpde_rho_pred = fluid_model->GetdPde_rho(); + + CHECK(SU2_TYPE::GetValue(dpdrho_e_AD) == Approx(SU2_TYPE::GetValue(dpdrho_e_pred))); + CHECK(SU2_TYPE::GetValue(dpde_rho_AD) == Approx(SU2_TYPE::GetValue(dpde_rho_pred))); + + /*--- Test 2: check consistency of temperature derivatives. ---*/ + AD::Reset(); + AD::StartRecording(); + AD::RegisterInput(val_rho); + AD::RegisterInput(val_e); + + fluid_model->SetTDState_rhoe(val_rho, val_e); + su2double val_T_pred = fluid_model->GetTemperature(); + + AD::RegisterOutput(val_T_pred); + AD::StopRecording(); + + SU2_TYPE::SetDerivative(val_T_pred, 1.0); + AD::ComputeAdjoint(); + + /*--- Extract temperature derivatives from fluid model and AD. ---*/ + const su2double dTdrho_e_AD = SU2_TYPE::GetDerivative(val_rho); + const su2double dTde_rho_AD = SU2_TYPE::GetDerivative(val_e); + const su2double dTdrho_e_pred = fluid_model->GetdTdrho_e(); + const su2double dTde_rho_pred = fluid_model->GetdTde_rho(); + + CHECK(SU2_TYPE::GetValue(dTdrho_e_AD) == Approx(SU2_TYPE::GetValue(dTdrho_e_pred))); + CHECK(SU2_TYPE::GetValue(dTde_rho_AD) == Approx(SU2_TYPE::GetValue(dTde_rho_pred))); + + /*--- Test 3: check consistency of specific heat at constant pressure. ---*/ + const su2double drhode_p = -dpde_rho_AD / dpdrho_e_AD; + const su2double dTde_p = dTde_rho_AD + dTdrho_e_AD * drhode_p; + const su2double dhde_rho = 1 + dpde_rho_AD / val_rho; + const su2double dhdrho_e = -val_p * (1 / pow(val_rho, 2)) + dpdrho_e_AD / val_rho; + const su2double dhde_p = dhde_rho + drhode_p * dhdrho_e; + const su2double Cp_AD = dhde_p / dTde_p; + const su2double Cp_pred = fluid_model->GetCp(); + + CHECK(SU2_TYPE::GetValue(Cp_AD) == Approx(SU2_TYPE::GetValue(Cp_pred))); + + /*--- Test 4: check consistency of secondary variables for non-reflecting boundary conditions.---*/ + AD::Reset(); + AD::StartRecording(); + AD::RegisterInput(val_p); + AD::RegisterInput(val_rho); + + fluid_model->ComputeDerivativeNRBC_Prho(val_p, val_rho); + su2double val_s_pred = fluid_model->GetEntropy(); + + AD::RegisterOutput(val_s_pred); + AD::StopRecording(); + + SU2_TYPE::SetDerivative(val_s_pred, 1.0); + AD::ComputeAdjoint(); + const su2double dsdp_rho_AD = SU2_TYPE::GetDerivative(val_p); + const su2double dsdrho_p_AD = SU2_TYPE::GetDerivative(val_rho); + const su2double dsdp_rho_pred = fluid_model->GetdsdP_rho(); + const su2double dsdrho_p_pred = fluid_model->Getdsdrho_P(); + + CHECK(SU2_TYPE::GetValue(dsdp_rho_pred) == Approx(SU2_TYPE::GetValue(dsdp_rho_AD))); + CHECK(SU2_TYPE::GetValue(dsdrho_p_pred) == Approx(SU2_TYPE::GetValue(dsdrho_p_AD))); +} + +TEST_CASE("AD test case for ideal gas fluid model", "[AD tests]") { + CIdealGas* fluid_model = new CIdealGas(1.4, 287.0, true); + FluidModelADChecks(fluid_model, 101325, 300.0); + + delete fluid_model; +} + +TEST_CASE("AD test case for data-driven fluid model", "[AD tests]") { + std::stringstream config_options; + + config_options << "SOLVER=RANS" << std::endl; + config_options << "KIND_TURB_MODEL=SA" << std::endl; + config_options << "SA_OPTIONS= NONE" << std::endl; + config_options << "REYNOLDS_NUMBER=1e6" << std::endl; + config_options << "FLUID_MODEL=DATADRIVEN_FLUID" << std::endl; + config_options << "USE_PINN=YES" << std::endl; + config_options << "INTERPOLATION_METHOD=MLP" << std::endl; + config_options << "FILENAMES_INTERPOLATOR=(src/SU2/UnitTests/SU2_CFD/fluid/MLP_PINN.mlp)" << std::endl; + config_options << "CONV_NUM_METHOD_FLOW=JST" << std::endl; + + /*--- Setup ---*/ + + CConfig* config = new CConfig(config_options, SU2_COMPONENT::SU2_CFD, false); + + /*--- Define fluid model ---*/ + CDataDrivenFluid* fluid_model = new CDataDrivenFluid(config, false); + + FluidModelADChecks(fluid_model, 3e5, 520.0); + FluidModelADChecks(fluid_model, 1.83e6, 523.0); + + delete config; + delete fluid_model; +} diff --git a/UnitTests/SU2_CFD/fluid/MLP_PINN.mlp b/UnitTests/SU2_CFD/fluid/MLP_PINN.mlp new file mode 100644 index 000000000000..36084ee790fa --- /dev/null +++ b/UnitTests/SU2_CFD/fluid/MLP_PINN.mlp @@ -0,0 +1,78 @@ +
+ +[number of layers] +4 + +[neurons per layer] +2 +12 +12 +1 + +[activation function] +linear +exponential +exponential +linear + +[input names] +Density +Energy + +[input regularization method] +minmax + +[input normalization] ++1.0000000000002272e-01 +3.6000000000001620e+02 ++2.4999999999999913e+05 +5.5000000000000407e+05 + +[output names] +s + +[output regularization method] +minmax + +[output normalization] ++6.5239076364026619e+02 +1.5203988895015702e+03 + +
+ +[weights per layer] + +-2.2636230520308294e+00 -1.4376163759051570e+02 -1.8210265085365642e+00 -1.9392431999968291e+01 +7.7998972848161929e-01 -4.4451402056377132e-01 +1.1480586943782076e+00 +7.3911541657373481e-01 +6.6848364842168884e-01 -1.8271554443848029e+01 +1.2261285194926941e+00 -1.4498105832610020e+00 +-3.5792276167311754e-01 -4.6660012868153460e-02 +8.6960980388545261e-01 -3.3067252427727123e-01 +7.2901181049513930e-01 -4.5132436983111057e-01 -1.6721101091715045e+00 +1.6381708561036443e-01 -9.9953810361650641e-01 -1.6660397867362475e+00 -3.6845287976534608e-01 +3.2679042214120246e-01 + + ++5.9993107069789275e-01 -3.7968611358916876e-01 -9.1784196873856094e-01 +3.7697075096981791e-01 -2.4514594732936050e+00 -2.9404244326707329e-01 -9.4877021231483852e-02 -3.3980372028224931e-02 +4.2421189400580528e-01 +7.7781137867976824e-01 +7.8391084779202980e-02 -1.8389416804610961e+00 +-2.5408281524798354e-01 +9.0756663051344069e-03 +1.1584753496996323e+00 +2.3534308868577432e-03 +2.4490086543179976e+00 +5.5043198360778117e-02 +7.1243387886788068e-01 -1.3472356985325758e-02 -1.6022336815491792e-01 +7.9384957177751261e-03 -8.3913484678289282e-02 -5.0208325332694126e-01 +-1.3231543644220687e+00 +2.3890465005266312e-01 -2.7829788154280122e+00 -4.1684736117099767e-02 -1.7289853140913009e-01 -2.7452124285237439e-01 +1.9057689172006617e-01 -4.8499148958861135e-02 -1.5998171284591250e-01 -3.8444057771255657e-01 -1.7591798029573689e+00 -3.1998700856829099e-01 +-3.4460543761346853e+00 +2.8269088892223054e-01 -1.8007009126606924e-01 -1.8194428084477665e-01 -9.8097976562849054e-01 +2.2343131530917884e+00 -9.3480765212571959e-01 -2.1820922470878051e-01 +2.4998489167470859e+00 -9.2764413588769656e-01 +4.2116280346986166e+00 +5.7430289000882420e+00 +-1.3779943339666223e-01 +5.1527341679864391e-01 -2.0684081713014844e+00 -4.6713867186704139e-01 -1.6656574393452730e+00 +8.2916484143979841e-02 -6.2985392912561127e-03 -8.0554067455084744e-01 +1.5050572815527488e-01 -3.0403633272013114e-01 +9.3661086475363739e-02 -1.7366620874413785e-01 ++1.2102271004943301e+00 -1.4795362440831727e-01 -7.7934495467562570e-01 -5.9581359297919689e-01 -2.5799123516309956e+00 -4.2086823260415152e-01 -6.1754592301131395e-01 +5.3496586769756471e-01 -1.1988742301845021e+00 -1.1825507727456516e-01 -1.2989806049860451e+00 -1.5082167140110778e+00 +-1.5832999264655581e+00 -5.0541334265413407e-01 -1.2224436375090135e+00 +9.4464382557138807e-02 -7.7094226591729909e-01 -1.3308898524504738e+00 -5.6071570095690060e-01 -1.1808627032633583e-01 -6.8406003004295413e-01 -1.0851498125792971e+00 -1.6619882623877327e+00 +3.3905033683843949e-01 +-1.6613583604241693e+00 -4.7389354240091253e-01 -1.6404302611149377e+00 +5.6328884449292083e-01 -2.3886973163682126e+00 +6.3182847097032660e-02 -1.1988633757241718e+00 -1.0449760622285645e-01 -5.0007576677205112e-01 -5.7953124309145942e-01 +1.3744226228525147e-01 -5.2406676771136440e-01 +-5.2321502793378249e-01 -5.3150359391312596e-01 -8.2608918128172837e-01 -1.5179873908573804e+00 -1.3741534704444816e+00 -1.1396125599060034e+00 -2.4669798409655488e-01 +3.5463486969786873e-01 -1.4557579529418466e-01 +3.9772638519145487e-01 -7.3761409583500159e-01 +4.3638838398439539e-01 ++1.1339107378860229e+00 +1.7594521224843396e-01 -2.3113519941138065e+00 -1.6298684024567350e-01 +2.1654392231781072e+00 +1.1946181086317720e+00 +6.1504990167411666e-01 +3.5812470374750952e-02 +4.7359603213749768e-01 -1.3926908147980210e-01 +1.5092490082960155e+00 +6.2527693075989743e-01 +-1.8730091080176507e+00 +6.0253144933079306e-01 -8.4799895628536026e-01 -4.9738323769072662e-01 -2.7954591059886620e+00 -6.0772894919752340e-01 -1.6669559186193763e+00 +3.2575755465661199e-01 -6.3810153137096781e-01 -1.5742470796026808e+00 +4.0723523279497037e-01 -2.6629855030791610e-01 ++9.5260226581936475e-02 +1.3178352071446142e-01 -8.2706051782881629e-01 +4.3476689449955158e-01 -1.9510329069314138e+00 -6.1816074212742961e-02 -8.8250388388085288e-01 -3.9491669828062620e-01 -1.5457029407527009e-01 -8.1118953547083511e-02 -9.3695252718016830e-01 -7.2928015955932368e-01 + + +-1.1729556416685407e+00 ++6.5203789113121413e-01 +-1.8734538612518090e-01 ++2.1621137726863668e-01 ++5.6641315509463920e-03 ++2.0302117964378608e-01 ++8.4775779057667755e-02 +-3.0580176253474467e-01 ++3.0269028189313296e-01 ++5.6045172511572938e-01 +-1.2871102614766081e-01 +-1.2950131608167472e+00 + + +[biases per layer] ++0.0000000000000000e+00 +0.0000000000000000e+00 ++1.1016481462000773e+00 +2.3664012769409184e+00 -9.4722828005676618e-01 +2.9514075029104910e-02 -7.7331761508748165e-01 +7.3249514271738470e-01 +2.5926140499409794e-01 +8.9008692454169913e-01 +5.0307216362067246e-02 +5.9255316881972364e-01 -2.0202744615666726e-01 -4.3866869529767016e-01 ++3.7843782710203738e-01 +1.6775822623352205e-01 -6.9759335447123827e-01 -4.0155126735738134e-01 -2.5582386039767488e+00 -4.7188519950683777e-01 -7.9682095244914830e-01 -7.9066710997409528e-02 -6.3882846975992846e-01 -4.3560525651855958e-01 -1.3131160733413525e+00 -8.0222167363936081e-01 ++3.4454053855686528e-01 diff --git a/UnitTests/SU2_CFD/gradients.cpp b/UnitTests/SU2_CFD/gradients.cpp index 948aa91879f0..a2c08f71d051 100644 --- a/UnitTests/SU2_CFD/gradients.cpp +++ b/UnitTests/SU2_CFD/gradients.cpp @@ -2,14 +2,14 @@ * \file gradients.cpp * \brief Unit tests for gradient calculation. * \author P. Gomes, T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/UnitTests/SU2_CFD/numerics/CNumerics_tests.cpp b/UnitTests/SU2_CFD/numerics/CNumerics_tests.cpp index f236ee7ea620..1d0ad664acbd 100644 --- a/UnitTests/SU2_CFD/numerics/CNumerics_tests.cpp +++ b/UnitTests/SU2_CFD/numerics/CNumerics_tests.cpp @@ -2,14 +2,14 @@ * \file CNumerics_tests.cpp * \brief Unit tests for the numerics classes. * \author C. Pederson - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/UnitTests/SU2_CFD/windowing.cpp b/UnitTests/SU2_CFD/windowing.cpp index 5473738d0399..7192d56dd187 100644 --- a/UnitTests/SU2_CFD/windowing.cpp +++ b/UnitTests/SU2_CFD/windowing.cpp @@ -2,14 +2,14 @@ * \file windowing.cpp * \brief Unit tests for windowed time-averaging. * \author C. Bauer - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/UnitTests/UnitQuadTestCase.hpp b/UnitTests/UnitQuadTestCase.hpp index 72a19c3538d5..130213a3fefa 100644 --- a/UnitTests/UnitQuadTestCase.hpp +++ b/UnitTests/UnitQuadTestCase.hpp @@ -2,14 +2,14 @@ * \file UnitQuadTestCase.hpp * \brief Simple unit quad test to be used in unit tests. * \author T. Albring - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/UnitTests/meson.build b/UnitTests/meson.build index 1c806b67ca43..3e64cfb9aa3d 100644 --- a/UnitTests/meson.build +++ b/UnitTests/meson.build @@ -14,11 +14,15 @@ su2_cfd_tests = files(['Common/geometry/primal_grid/CPrimalGrid_tests.cpp', 'Common/containers/CLookupTable_tests.cpp', 'Common/toolboxes/multilayer_perceptron/CLookUp_ANN_tests.cpp', 'SU2_CFD/numerics/CNumerics_tests.cpp', + 'SU2_CFD/fluid/CFluidModel_tests.cpp', 'SU2_CFD/gradients.cpp', 'SU2_CFD/windowing.cpp']) # Reverse-mode (algorithmic differentiation) tests: su2_cfd_tests_ad = files(['Common/simple_ad_test.cpp']) +if get_option('enable-mlpcpp') + su2_cfd_tests_ad = su2_cfd_tests_ad + files(['SU2_CFD/fluid/CFluidModel_tests_AD.cpp']) +endif # Forward-mode (direct differentiation) tests: su2_cfd_tests_dd = files(['Common/simple_directdiff_test.cpp']) diff --git a/UnitTests/test_driver.cpp b/UnitTests/test_driver.cpp index 46bd1f15b034..4e435d27c49f 100644 --- a/UnitTests/test_driver.cpp +++ b/UnitTests/test_driver.cpp @@ -2,14 +2,14 @@ * \file test_driver.cpp * \brief The main entry point for unit tests (the main()). * \author C. Pederson - * \version 8.1.0 "Harrier" + * \version 8.2.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * * The SU2 Project is maintained by the SU2 Foundation * (http://su2foundation.org) * - * Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) + * Copyright 2012-2025, 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 diff --git a/config_template.cfg b/config_template.cfg index ff9e9f11297b..6b3d5ab396aa 100644 --- a/config_template.cfg +++ b/config_template.cfg @@ -5,7 +5,7 @@ % Author: ___________________________________________________________________ % % Institution: ______________________________________________________________ % % Date: __________ % -% File Version 8.1.0 "Harrier" % +% File Version 8.2.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -51,7 +51,7 @@ KIND_VERIFICATION_SOLUTION= NO_VERIFICATION_SOLUTION % Defaults to DISCRETE_ADJOINT for the SU2_*_AD codes, and to DIRECT otherwise. MATH_PROBLEM= DIRECT % -% Axisymmetric simulation, only compressible flows (NO, YES) +% Axisymmetric simulation for 2D problems. (NO, YES) AXISYMMETRIC= NO % % Gravity force @@ -60,6 +60,12 @@ GRAVITY_FORCE= NO % Restart solution (NO, YES) RESTART_SOL= NO % +% Only save the minimum required variables for restarting to restart files (NO, YES). +% If this option is set to NO, then all fields will be written to all output files. +% To minimize the size of other output files (e.g. paraview, tecplot) by not including +% default restart fields in them, add the keyword COMPACT to VOLUME_OUTPUT. +WRT_RESTART_COMPACT= YES +% % Discard the data storaged in the solution and geometry files % e.g. AOA, dCL/dAoA, dCD/dCL, iter, etc. % Note that AoA in the solution and geometry files is critical @@ -435,7 +441,14 @@ FILENAMES_INTERPOLATOR= (MLP_1.mlp, MLP_2.mlp, MLP_3.mlp) % Relaxation factor for the Newton solvers in the data-driven fluid model DATADRIVEN_NEWTON_RELAXATION= 0.8 -% +% Use physics-informed neural network for calculation of the fluid caloric properties. +USE_PINN= YES + +% Optional initial guess for fluid density and static energy in data-driven fluid analysis. +DATADRIVEN_INITIAL_DENSITY= -1 +DATADRIVEN_INITIAL_ENERGY= -1 + + % Specify if there is ionization IONIZATION= NO % @@ -1389,12 +1402,12 @@ CFL_NUMBER= 15.0 CFL_ADAPT= NO % % Parameters of the adaptive CFL number (factor-down, factor-up, CFL min value, -% CFL max value, acceptable linear solver convergence) -% Local CFL increases by factor-up until max if the solution rate of change is not limited, -% and acceptable linear convergence is achieved. It is reduced if rate is limited, or if there +% CFL max value, acceptable linear solver convergence, starting iteration) +% After the starting iteration has passed, local CFL increases by factor-up until max if the solution rate of +% change is not limited, and acceptable linear convergence is achieved. It is reduced if rate is limited, or if there % is not enough linear convergence, or if the nonlinear residuals are stagnant and oscillatory. % It is reset back to min when linear solvers diverge, or if nonlinear residuals increase too much. -CFL_ADAPT_PARAM= ( 0.1, 2.0, 10.0, 1e10, 0.001 ) +CFL_ADAPT_PARAM= ( 0.1, 2.0, 10.0, 1e10, 0.001, 0) % % Maximum Delta Time in local time stepping simulations MAX_DELTA_TIME= 1E6 @@ -1727,6 +1740,12 @@ ELASTICITY_MODULUS= 1000.0 % Poisson ratio POISSON_RATIO= 0.35 % +% Thermal expansion coefficient +MATERIAL_THERMAL_EXPANSION_COEFF= 0 +% +% Freestream temperature at which there is no stress from thermal expansion +MATERIAL_REFERENCE_TEMPERATURE= 288.15 +% % Knowles B constant KNOWLES_B= 1.0 % @@ -1736,12 +1755,17 @@ KNOWLES_N= 1.0 % ID of the region we want to compute the sensitivities using direct differentiation FEA_ID_DIRECTDIFF= 0 % -% RESTART_STEADY_STATE= NO % % Time discretization TIME_DISCRE_FEA= NEWMARK_IMPLICIT % +% Iterative method for non-linear structural analysis +NONLINEAR_FEM_SOLUTION_METHOD= NEWTON_RAPHSON +% +% Pseudo static analysis (no density in dynamic analysis) +PSEUDO_STATIC= NO +% % Parameter alpha for Newmark scheme (s) NEWMARK_BETA= 0.25 % @@ -1775,6 +1799,9 @@ MATERIAL_MODEL= LINEAR_ELASTIC % Compressibility of the material MATERIAL_COMPRESSIBILITY= COMPRESSIBLE % +% Formulation for 2-dimensional elasticity solver +FORMULATION_ELASTICITY_2D= PLANE_STRAIN +% % -------------------- Dielectric effects ------------------% % % Include DE effects @@ -1788,6 +1815,20 @@ ELECTRIC_FIELD_MOD= 20e5 % % Direction of the Electic Fields ELECTRIC_FIELD_DIR= (0.0, 1.0) +% +% ------------------------ Prestretch -----------------------% +% +% Consider a prestretch in the structural domain +PRESTRETCH= NO +% +% Filename to input for prestretching membranes +PRESTRETCH_FILENAME= prestretch_file.dat +% +% ----------------------- Body Forces -----------------------% +% +% Centrifugal forces due to ROTATION_RATE around MOTION_ORIGIN. +% GRAVITY_FORCE and BODY_FORCE can also be used with the FEA solver. +CENTRIFUGAL_FORCE= NO % -------------------- Weakly Coupled Heat ------------------% % @@ -2004,34 +2045,6 @@ STRESS_PENALTY_PARAM= (1.0, 10.0) % Preaccumulation in the AD mode. PREACC= YES -% ---------------- PRESTRETCH FOR STRUCTURES -------------------% -% Consider a prestretch in the structural domain -PRESTRETCH= NO -% -% Filename to input for prestretching membranes -PRESTRETCH_FILENAME= prestretch_file.dat -% -% Iterative method for non-linear structural analysis -NONLINEAR_FEM_SOLUTION_METHOD= NEWTON_RAPHSON -% -% Formulation for bidimensional elasticity solver -FORMULATION_ELASTICITY_2D= PLANE_STRAIN -% -% Apply dead loads -DEAD_LOAD= NO -% -% pseudo static analysis (no density in dynamic analysis) -PSEUDO_STATIC= NO -% -% Dynamic or static structural analysis (deprecated -> use TIME_DOMAIN) -DYNAMIC_ANALYSIS= NO -% -% Time Step for dynamic analysis (s) (deprecated -> use TIME_STEP) -DYN_TIMESTEP= 0.0 -% -% Total Physical Time for dual time stepping simulations (s) (deprecated -> use MAX_TIME) -DYN_TIME= 1.0 - % ---------------- MESH DEFORMATION PARAMETERS (NEW SOLVER) -------------------% % % Use the reformatted pseudo-elastic solver for grid deformation diff --git a/externals/FADO b/externals/FADO new file mode 160000 index 000000000000..ce7ee018e4e6 --- /dev/null +++ b/externals/FADO @@ -0,0 +1 @@ +Subproject commit ce7ee018e4e699af5028d69baa1939fea290e18a diff --git a/externals/codi b/externals/codi index 762ba7698e3c..a0725b2bfd17 160000 --- a/externals/codi +++ b/externals/codi @@ -1 +1 @@ -Subproject commit 762ba7698e3ceaa1b17aa299421ddd418f00b823 +Subproject commit a0725b2bfd172e741a07f96b041a5ddf88d441d7 diff --git a/externals/medi b/externals/medi index 7d550831e0e2..0cfaf96e7a31 160000 --- a/externals/medi +++ b/externals/medi @@ -1 +1 @@ -Subproject commit 7d550831e0e233a85b9d9af9c181d7ecb2929946 +Subproject commit 0cfaf96e7a31a5a8941b97f84198da03a8f8bd7a diff --git a/externals/opdi b/externals/opdi index a6b9655c240a..a5e2ac47035b 160000 --- a/externals/opdi +++ b/externals/opdi @@ -1 +1 @@ -Subproject commit a6b9655c240af2a35454a61727e5bbbbaa3a425f +Subproject commit a5e2ac47035b6b3663f60d5f80b7a9fe62084867 diff --git a/meson.build b/meson.build index e6886833f61d..cdd905310798 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,5 @@ project('SU2', 'c', 'cpp', - version: '8.1.0 "Harrier"', + version: '8.2.0 "Harrier"', meson_version: '>=0.61.1', license: 'LGPL2', default_options: ['buildtype=release', @@ -326,7 +326,7 @@ endif message('''------------------------------------------------------------------------- | ___ _ _ ___ | - | / __| | | |_ ) Release 8.1.0 "Harrier" | + | / __| | | |_ ) Release 8.2.0 "Harrier" | | \__ \ |_| |/ / | | |___/\___//___| Meson Configuration Summary | | | diff --git a/meson.py b/meson.py index f58dc31f9983..021bf3b1e295 100755 --- a/meson.py +++ b/meson.py @@ -3,14 +3,14 @@ ## \file meson.py # \brief An extended meson script for setting up the environment and running meson # \author T. Albring and F. Poli -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 diff --git a/meson_options.txt b/meson_options.txt index 08fbac80669f..55782c62ff80 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -20,8 +20,8 @@ option('extra-deps', type : 'string', value : '', description: 'comma-separated option('enable-mpp', type : 'boolean', value : false, description: 'enable Mutation++ support') option('install-mpp', type : 'boolean', value : false, description: 'install Mutation++ in the directory defined with --prefix') option('enable-coolprop', type : 'boolean', value : false, description: 'enable CoolProp support') -option('enable-mlpcpp', type : 'boolean', value : false, description: 'enable profiling through gprof') -option('enable-gprof', type : 'boolean', value : false, description: 'enable MLPCpp support') +option('enable-mlpcpp', type : 'boolean', value : false, description: 'enable MLPCpp support') +option('enable-gprof', type : 'boolean', value : false, description: 'enable profiling through gprof') option('opdi-backend', type : 'combo', choices : ['auto', 'macro', 'ompt'], value : 'auto', description: 'OpDiLib backend choice') option('codi-tape', type : 'combo', choices : ['JacobianLinear', 'JacobianReuse', 'JacobianMultiUse', 'PrimalLinear', 'PrimalReuse', 'PrimalMultiUse'], value : 'JacobianLinear', description: 'CoDiPack tape choice') option('opdi-shared-read-opt', type : 'boolean', value : true, description : 'OpDiLib shared reading optimization') diff --git a/meson_scripts/init.py b/meson_scripts/init.py index 4ed6f053dc96..b0fc7aa759d3 100755 --- a/meson_scripts/init.py +++ b/meson_scripts/init.py @@ -4,14 +4,14 @@ # \brief Initializes necessary dependencies for SU2 either using git or it # fetches zip files. # \author T. Albring and F. Poli -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 @@ -48,6 +48,7 @@ def init_submodules( own_mpp=True, own_cool=True, own_mel=True, + own_fado=True, own_mlpcpp=True, ): @@ -55,11 +56,11 @@ def init_submodules( # This information of the modules is used if projects was not cloned using git # The sha tag must be maintained manually to point to the correct commit - sha_version_codi = "762ba7698e3ceaa1b17aa299421ddd418f00b823" + sha_version_codi = "a0725b2bfd172e741a07f96b041a5ddf88d441d7" github_repo_codi = "https://github.com/scicompkl/CoDiPack" - sha_version_medi = "7d550831e0e233a85b9d9af9c181d7ecb2929946" + sha_version_medi = "0cfaf96e7a31a5a8941b97f84198da03a8f8bd7a" github_repo_medi = "https://github.com/SciCompKL/MeDiPack" - sha_version_opdi = "a6b9655c240af2a35454a61727e5bbbbaa3a425f" + sha_version_opdi = "a5e2ac47035b6b3663f60d5f80b7a9fe62084867" github_repo_opdi = "https://github.com/SciCompKL/OpDiLib" sha_version_meson = "41c650a040d50e0912d268af7a903a9ce1456dfa" github_repo_meson = "https://github.com/mesonbuild/meson" @@ -71,7 +72,9 @@ def init_submodules( github_repo_coolprop = "https://github.com/CoolProp/CoolProp" sha_version_mel = "46205ab019e5224559091375a6d71aabae6bc5b9" github_repo_mel = "https://github.com/pcarruscag/MEL" - sha_version_mlpcpp = "c19c53ea2b85ccfb185f1c6c87044dc0b5bc7ae0" + sha_version_fado = "ce7ee018e4e699af5028d69baa1939fea290e18a" + github_repo_fado = "https://github.com/pcarruscag/FADO" + sha_version_mlpcpp = "e19ca0cafb28c4b7ba5b8cffef42883259b00dc0" github_repo_mlpcpp = "https://github.com/EvertBunschoten/MLPCpp" medi_name = "MeDiPack" @@ -82,6 +85,7 @@ def init_submodules( mpp_name = "Mutationpp" coolprop_name = "CoolProp" mel_name = "MEL" + fado_name = "FADO" mlpcpp_name = "MLPCpp" base_path = cur_dir + os.path.sep + "externals" + os.path.sep @@ -91,6 +95,7 @@ def init_submodules( alt_name_meson = base_path + "meson" alt_name_ninja = base_path + "ninja" alt_name_mel = base_path + "mel" + alt_name_fado = base_path + "FADO" alt_name_mpp = cur_dir + os.path.sep + "subprojects" + os.path.sep + "Mutationpp" alt_name_coolprop = cur_dir + os.path.sep + "subprojects" + os.path.sep + "CoolProp" alt_name_mlpcpp = cur_dir + os.path.sep + "subprojects" + os.path.sep + "MLPCpp" @@ -123,6 +128,8 @@ def init_submodules( submodule_status(alt_name_coolprop, sha_version_coolprop) if own_mel: submodule_status(alt_name_mel, sha_version_mel) + if own_fado: + submodule_status(alt_name_fado, sha_version_fado) if own_mlpcpp: submodule_status(alt_name_mlpcpp, sha_version_mlpcpp) # Otherwise download the zip file from git @@ -157,6 +164,10 @@ def init_submodules( ) if own_mel: download_module(mel_name, alt_name_mel, github_repo_mel, sha_version_mel) + if own_fado: + download_module( + fado_name, alt_name_fado, github_repo_fado, sha_version_fado + ) if own_mlpcpp: download_module( mlpcpp_name, alt_name_mlpcpp, github_repo_mlpcpp, sha_version_mlpcpp diff --git a/preconfigure.py b/preconfigure.py index 51cb0599e6eb..3ff77780aef0 100755 --- a/preconfigure.py +++ b/preconfigure.py @@ -3,14 +3,14 @@ ## \file preconfigure.py # \brief An preconfigure script for setting up the build environment # \author T. Albring and F. Poli -# \version 8.1.0 "Harrier" +# \version 8.2.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # # The SU2 Project is maintained by the SU2 Foundation # (http://su2foundation.org) # -# Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md) +# Copyright 2012-2025, 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 @@ -81,6 +81,7 @@ def run( own_mpp=True, own_cool=True, own_mel=True, + own_fado=True, own_mlpcpp=True, ): @@ -94,6 +95,7 @@ def run( own_mpp=own_mpp, own_cool=own_cool, own_mel=own_mel, + own_fado=own_fado, own_mlpcpp=own_mlpcpp, ) @@ -137,6 +139,9 @@ def run( parser.add_argument( "--no-mel", help="do not download own copy of MEL", action="store_false" ) + parser.add_argument( + "--no-fado", help="do not download own copy of FADO", action="store_false" + ) parser.add_argument( "--no-mlpcpp", help="do not download copy of MLpCpp", @@ -152,5 +157,6 @@ def run( own_mpp=args.no_mpp, own_cool=args.no_coolprop, own_mel=args.no_mel, + own_fado=args.no_fado, own_mlpcpp=args.no_mlpcpp, ) diff --git a/su2omp.syntax.json b/su2omp.syntax.json index 9bddb6fd63a3..16a9b2623bd8 100644 --- a/su2omp.syntax.json +++ b/su2omp.syntax.json @@ -4,14 +4,14 @@ "\\file su2omp.syntax.json", "\\brief Definitions for the OpDiLib syntax checker", "\\author J. Blühdorn", - "\\version 8.1.0 \"Harrier\"", + "\\version 8.2.0 \"Harrier\"", "SU2 Project Website: https://su2code.github.io", "The SU2 Project is maintained by the SU2 Foundation ", "(http://su2foundation.org)", - "Copyright 2012-2024, SU2 Contributors (cf. AUTHORS.md)", + "Copyright 2012-2025, 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", diff --git a/subprojects/MLPCpp b/subprojects/MLPCpp index c19c53ea2b85..e19ca0cafb28 160000 --- a/subprojects/MLPCpp +++ b/subprojects/MLPCpp @@ -1 +1 @@ -Subproject commit c19c53ea2b85ccfb185f1c6c87044dc0b5bc7ae0 +Subproject commit e19ca0cafb28c4b7ba5b8cffef42883259b00dc0