Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature new flamelet: addition of preferential diffusion #2156

Merged
merged 62 commits into from
Apr 27, 2024
Merged
Show file tree
Hide file tree
Changes from 43 commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
3325918
Added preferential diffusion model and additional options for flamele…
EvertBunschoten Jul 24, 2023
78f995c
buf fix for spark initialization method
EvertBunschoten Jul 26, 2023
7f795f8
Merge branch 'develop' of https://github.com/su2code/SU2 into feature…
EvertBunschoten Jul 26, 2023
0aaabb9
Merge branch 'develop' of https://github.com/su2code/SU2 into feature…
EvertBunschoten Jul 31, 2023
033ac12
Merge branch 'feature_new_flamelet' of https://github.com/su2code/SU2…
EvertBunschoten Aug 23, 2023
c3f2da9
Merged with develop
EvertBunschoten Aug 23, 2023
f12793b
Merge branch 'develop' of https://github.com/su2code/SU2 into feature…
EvertBunschoten Aug 30, 2023
e5e151b
Pulled the new version of Develop
EvertBunschoten Sep 1, 2023
7897bee
Replaced isothermal getter function in config to be compatible with f…
EvertBunschoten Sep 6, 2023
de1499d
Merge branch 'develop' of https://github.com/su2code/SU2 into feature…
EvertBunschoten Sep 6, 2023
a8e66ed
fix memory allocation crash
bigfooted Sep 25, 2023
0db13fd
Merge branch 'develop' of https://github.com/su2code/SU2 into feature…
EvertBunschoten Oct 5, 2023
16d6405
Pulled develop
EvertBunschoten Oct 5, 2023
0d10cbd
Quality of life changes to usability of flamelet solver
EvertBunschoten Nov 1, 2023
804dc68
Pulled feature_new_flamelet
EvertBunschoten Nov 1, 2023
ead4b74
Updated codipack submodule
EvertBunschoten Nov 1, 2023
465dadb
Merge branch 'develop' of https://github.com/su2code/SU2 into feature…
EvertBunschoten Nov 1, 2023
f48b338
Added hydrogen burner test case
EvertBunschoten Nov 1, 2023
a4de27f
Fixed build errors
EvertBunschoten Nov 2, 2023
d836e45
Updated submodules and updated comments around EvaluateDataSet in CFl…
EvertBunschoten Nov 6, 2023
5e5023c
Merge branch 'develop' into feature_new_flamelet
bigfooted Nov 17, 2023
706c0ed
Updated hydrogen test case file name in regression tests and set the …
EvertBunschoten Nov 20, 2023
ad958b5
Merge branch 'develop' of https://github.com/su2code/SU2 into feature…
EvertBunschoten Nov 29, 2023
4cbaeeb
Updated GetEnthFromTemp function for proper restarts on test cases
EvertBunschoten Nov 29, 2023
3b5c63c
Updated code styling according to pre-commit
EvertBunschoten Nov 29, 2023
718c382
Merge branch 'develop' of https://github.com/su2code/SU2 into feature…
EvertBunschoten Dec 4, 2023
15a8505
Updated residual values for hydrogen flamelet regression test
EvertBunschoten Dec 4, 2023
ee5c4aa
Updated spaces for codefactor analysis
EvertBunschoten Dec 4, 2023
93b85b6
Merge branch 'develop' into feature_new_flamelet
EvertBunschoten Jan 3, 2024
25e49c5
Implemented more efficient line search method for inclusion level sea…
EvertBunschoten Feb 1, 2024
7a63ccd
Merge branch 'develop' into feature_new_flamelet
Cristopher-Morales Feb 13, 2024
4b5a080
Merge branch 'develop' into feature_new_flamelet
Cristopher-Morales Feb 17, 2024
b852da6
Merge branch 'develop' into feature_new_flamelet
Cristopher-Morales Feb 20, 2024
57e8cc9
Merge branch 'develop' into feature_new_flamelet
Cristopher-Morales Feb 25, 2024
f02419e
Merge branch 'develop' into feature_new_flamelet
Cristopher-Morales Feb 26, 2024
4a4c025
Merged develop
EvertBunschoten Mar 5, 2024
ec25553
Adapted fluidflamelet to new table architecture
EvertBunschoten Mar 5, 2024
39ea5f4
Merge branch 'develop' into feature_new_flamelet
Cristopher-Morales Mar 6, 2024
d61c894
Implemented Nijso's comments
EvertBunschoten Mar 7, 2024
572ce65
Added config option for preferential diffusion model
EvertBunschoten Mar 7, 2024
3cbdef7
Update Common/include/containers/CLookUpTable.hpp
EvertBunschoten Mar 7, 2024
7ab2dea
Fixed issues from CodeFactor
EvertBunschoten Mar 7, 2024
c700b70
Merge branch 'feature_new_flamelet' of https://github.com/su2code/SU2…
EvertBunschoten Mar 7, 2024
408c2d1
Merge branch 'develop' of https://github.com/su2code/SU2 into feature…
EvertBunschoten Mar 25, 2024
6f50f7a
Merge branch 'develop' into feature_new_flamelet
Cristopher-Morales Apr 3, 2024
87651bc
Merge branch 'develop' into feature_new_flamelet
Cristopher-Morales Apr 15, 2024
7ab1e08
Updated tutorials branch
EvertBunschoten Apr 17, 2024
d19814c
Merge branch 'develop' into feature_new_flamelet
Cristopher-Morales Apr 18, 2024
d59ce55
Merge branch 'feature_new_flamelet' of https://github.com/su2code/SU2…
EvertBunschoten Apr 18, 2024
67a975f
Corrected gradient method determination for auxilary variables in fla…
EvertBunschoten Apr 18, 2024
37c8a0e
Merge branch 'develop' into feature_new_flamelet
Cristopher-Morales Apr 18, 2024
c539363
Merge branch 'develop' into feature_new_flamelet
Cristopher-Morales Apr 21, 2024
25134bd
Merge branch 'develop' into feature_new_flamelet
Cristopher-Morales Apr 22, 2024
54e98dc
CodeFactor complaints
EvertBunschoten Apr 24, 2024
147fdf0
Added hydrogen combustion tutorial to tutorial regression tests and u…
EvertBunschoten Apr 25, 2024
1effb94
Addressed CodeFactor complaints
EvertBunschoten Apr 25, 2024
3a2895d
Updated MLPCpp module
EvertBunschoten Apr 25, 2024
bde5980
Updated regression test values for hydrogen combustion case
EvertBunschoten Apr 25, 2024
65f06c4
Implemented Pedro's comments
EvertBunschoten Apr 25, 2024
9b0351d
Implemented suggestions from Nijso and Pedro
EvertBunschoten Apr 26, 2024
a44c51c
Fixed bug in CFluidFlamelet destructor
EvertBunschoten Apr 26, 2024
06649f7
Set branches for test cases and tutorials back to develop
EvertBunschoten Apr 27, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/regression.yml
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ jobs:
uses: docker://ghcr.io/su2code/su2/test-su2:230813-0103
with:
# -t <Tutorials-branch> -c <Testcases-branch>
args: -b ${{github.ref}} -t develop -c develop -s ${{matrix.testscript}}
args: -b ${{github.ref}} -t develop -c feature_new_flamelet -s ${{matrix.testscript}}
- name: Cleanup
uses: docker://ghcr.io/su2code/su2/test-su2:230813-0103
with:
Expand Down
47 changes: 42 additions & 5 deletions Common/include/CConfig.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1224,7 +1224,12 @@ class CConfig {
unsigned short nSpecies_Init; /*!< \brief Number of entries of SPECIES_INIT */

/*--- Additional flamelet solver options ---*/
su2double flame_init[8]; /*!< \brief Initial solution parameters for flamelet solver.*/
FLAMELET_INIT_TYPE flame_init_type = FLAMELET_INIT_TYPE::NONE; /*!< \brief Method for solution ignition for flamelet problems. */
su2double flame_init[8]; /*!< \brief Flame front initialization parameters. */
su2double spark_init[6]; /*!< \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.*/
EvertBunschoten marked this conversation as resolved.
Show resolved Hide resolved

/*--- lookup table ---*/
unsigned short n_scalars = 0; /*!< \brief Number of transported scalars for flamelet LUT approach. */
Expand Down Expand Up @@ -2138,13 +2143,44 @@ class CConfig {

/*!
* \brief Get the flame initialization.
* (x1,x2,x3) = flame offset.
* (x4,x5,x6) = flame normal, separating unburnt from burnt.
* (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 Flame initialization for the flamelet model.
* \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;
break;
case FLAMELET_INIT_TYPE::SPARK:
return spark_init;
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.
*/
const su2double* GetFlameInit() const { return flame_init; }
inline void SetPreferentialDiffusion(bool input) { preferential_diffusion = input; }

/*!
* \brief Get the number of control variables for flamelet model.
Expand Down Expand Up @@ -2190,6 +2226,7 @@ class CConfig {
if (n_user_sources > 0) return user_source_names[i_user_source]; else return none;
}

FLAMELET_INIT_TYPE GetFlameletInitType() const { return flame_init_type; }
EvertBunschoten marked this conversation as resolved.
Show resolved Hide resolved
/*!
* \brief Get the number of transported scalars for combustion.
*/
Expand Down
6 changes: 5 additions & 1 deletion Common/include/containers/CLookUpTable.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -389,7 +389,6 @@ class CLookUpTable {
/*!
* \brief Find the table levels with constant z-values directly above and below query val_z.
* \param[in] val_CV3 - Value of controlling variable 3.
* \param[in] within_limits - Whether query point lies within table bounds.
* \returns Pair of inclusion level indices (first = lower level index, second = upper level index).
*/
std::pair<unsigned long, unsigned long> FindInclusionLevels(const su2double val_CV3);
Expand All @@ -410,6 +409,11 @@ class CLookUpTable {
return limits_table_x[i_level];
}

/*!
* \brief Check whether requested set of variables are included in the table.
*/
bool CheckForVariables(const std::vector<std::string>& vars_to_check);
EvertBunschoten marked this conversation as resolved.
Show resolved Hide resolved

/*!
* \brief Returns the index to the variable in the lookup table.
* \param[in] nameVar - Variable name for which to retrieve the column index.
Expand Down
29 changes: 28 additions & 1 deletion Common/include/option_structure.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1333,11 +1333,38 @@ enum FLAMELET_SCALAR_SOURCES {
* \brief Look-up operations for the flamelet scalar solver.
*/
enum FLAMELET_LOOKUP_OPS {
TD, /*!< \brief Thermochemical properties (temperature, density, diffusivity, etc.). */
THERMO, /*!< \brief Thermochemical properties (temperature, density, diffusivity, etc.). */
PREFDIF, /*!< \brief Preferential diffusion scalars. */
SOURCES, /*!< \brief Scalar source terms (controlling variables, passive species).*/
LOOKUP, /*!< \brief Passive look-up variables specified in config. */
};

/*!
* \brief the preferential diffusion scalar indices for the preferential diffusion model.
EvertBunschoten marked this conversation as resolved.
Show resolved Hide resolved
*/
enum FLAMELET_PREF_DIFF_SCALARS {
I_BETA_PROGVAR, /*!< \brief Preferential diffusion scalar for the progress variable. */
I_BETA_ENTH_THERMAL, /*!< \brief Preferential diffusion scalar for temperature. */
I_BETA_ENTH, /*!< \brief Preferential diffusion scalar for total enthalpy. */
I_BETA_MIXFRAC, /*!< \brief Preferential diffusion scalar for mixture fraction. */
N_BETA_TERMS, /*!< \brief Total number of preferential diffusion scalars. */
};

EvertBunschoten marked this conversation as resolved.
Show resolved Hide resolved
/*!
* \brief Flame initialization options for the flamelet solver.
*/
enum class FLAMELET_INIT_TYPE {
FLAME_FRONT, /*!< \brief Straight flame front. */
SPARK, /*!< \brief Species reaction rate in a set location. */
NONE, /*!< \brief No ignition, cold flow only. */
};

static const MapType<std::string, FLAMELET_INIT_TYPE> Flamelet_Init_Map = {
MakePair("NONE", FLAMELET_INIT_TYPE::NONE)
MakePair("FLAME_FRONT", FLAMELET_INIT_TYPE::FLAME_FRONT)
MakePair("SPARK", FLAMELET_INIT_TYPE::SPARK)
};

/*!
* \brief Types of subgrid scale models
*/
Expand Down
18 changes: 15 additions & 3 deletions Common/src/CConfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -987,7 +987,7 @@ void CConfig::SetPointersNull() {
Species_Init = nullptr;
Species_Clipping_Min = nullptr;
Species_Clipping_Max = nullptr;

spark_reaction_rates = nullptr;
EvertBunschoten marked this conversation as resolved.
Show resolved Hide resolved
/*--- Moving mesh pointers ---*/

nKind_SurfaceMovement = 0;
Expand Down Expand Up @@ -1376,7 +1376,9 @@ void CConfig::SetConfig_Options() {
/*!\brief SPECIES_CLIPPING_MIN \n DESCRIPTION: Minimum values for scalar clipping \ingroup Config*/
addDoubleListOption("SPECIES_CLIPPING_MIN", nSpecies_Clipping_Min, Species_Clipping_Min);

/*!\brief FLAME_INIT \n DESCRIPTION: flame initialization using the flamelet model \ingroup Config*/
/*!\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);
/*!\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) ---*/
Expand All @@ -1385,6 +1387,13 @@ void CConfig::SetConfig_Options() {
flame_init[6] = 0.5e-3; flame_init[7] = 1.0;
addDoubleArrayOption("FLAME_INIT", 8,flame_init);

/*!\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);
EvertBunschoten marked this conversation as resolved.
Show resolved Hide resolved

/*!\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);

/*--- Options related to mass diffusivity and thereby the species solver. ---*/

/*!\brief DIFFUSIVITY_MODEL\n DESCRIPTION: mass diffusivity model \n DEFAULT constant disffusivity \ingroup Config*/
Expand Down Expand Up @@ -2136,6 +2145,9 @@ void CConfig::SetConfig_Options() {
/* DESCRIPTION: Names of the user scalar source terms. */
addStringListOption("USER_SOURCE_NAMES", n_user_sources, user_source_names);

/* DESCRIPTION: Enable preferential diffusion for FGM simulations. \n DEFAULT: false */
addBoolOption("PREFERENTIAL_DIFFUSION", 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"));
/*!\brief BREAKDOWN_FILENAME \n DESCRIPTION: Output file forces breakdown \ingroup Config*/
Expand Down Expand Up @@ -9221,7 +9233,7 @@ su2double CConfig::GetIsothermal_Temperature(const string& val_marker) const {
if (Marker_Isothermal[iMarker_Isothermal] == val_marker)
return Isothermal_Temperature[iMarker_Isothermal];

return Isothermal_Temperature[0];
return Temperature_FreeStream;
EvertBunschoten marked this conversation as resolved.
Show resolved Hide resolved
}

su2double CConfig::GetWall_HeatFlux(const string& val_marker) const {
Expand Down
12 changes: 12 additions & 0 deletions Common/src/containers/CLookUpTable.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -802,3 +802,15 @@ bool CLookUpTable::IsInTriangle(su2double val_CV1, su2double val_CV2, unsigned l

return (abs(area_tri - (area_0 + area_1 + area_2)) < area_tri * 1e-10);
}

bool CLookUpTable::CheckForVariables(const std::vector<std::string>& vars_to_check) {
bool variables_are_present{true};
for (auto iVar = 0u; iVar < vars_to_check.size(); iVar++) {
bool var_is_present{false};
for (auto jVar = 0u; jVar < names_var.size(); jVar++) {
if (vars_to_check[iVar].compare(names_var[jVar]) == 0) var_is_present = true;
}
if (!var_is_present) variables_are_present = false;
}
return variables_are_present;
EvertBunschoten marked this conversation as resolved.
Show resolved Hide resolved
}
6 changes: 0 additions & 6 deletions Docs/docmain.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -225,9 +225,3 @@
* \brief Classes for explicit (done by the programmer) vectorization (SIMD) of computations.
* \ingroup Toolboxes
*/

/*!
* \defgroup Multi-Layer Perceptrons (MLP)
* \brief Data look up and interpolation via dense, feed-forward multi-layer perceptrons.
* \ingroup Toolboxes
*/
39 changes: 27 additions & 12 deletions SU2_CFD/include/fluid/CFluidFlamelet.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,17 +34,19 @@
#define USE_MLPCPP
#endif
#include "CFluidModel.hpp"

#include <memory>
class CFluidFlamelet final : public CFluidModel {
EvertBunschoten marked this conversation as resolved.
Show resolved Hide resolved
private:
ENUM_DATADRIVEN_METHOD Kind_DataDriven_Method =
ENUM_DATADRIVEN_METHOD::LUT; /*!< \brief Interpolation method for data set evaluation. */

enum LOOKUP_TD { TEMPERATURE, HEATCAPACITY, VISCOSITY, CONDUCTIVITY, DIFFUSIONCOEFFICIENT, MOLARWEIGHT, SIZE };

su2double beta_progvar, beta_enth_thermal, beta_enth, beta_mixfrac;
int rank;

bool include_mixture_fraction = false; /*!< \brief include mixture fraction in controlling variables. */
bool include_mixture_fraction = false, /*!< \brief include mixture fraction in controlling variables. */
PreferentialDiffusion = false; /*!< \brief use preferential diffusion physics. */
EvertBunschoten marked this conversation as resolved.
Show resolved Hide resolved

unsigned short n_scalars, n_lookups, n_user_scalars, /*!< \brief number of passive reactant species. */
n_control_vars; /*!< \brief number of controlling variables. */
Expand All @@ -62,12 +64,15 @@ class CFluidFlamelet final : public CFluidModel {

vector<unsigned long> LUT_idx_TD,
LUT_idx_Sources,
LUT_idx_LookUp;
LUT_idx_LookUp,
LUT_idx_PD;

/*--- Class variables for the multi-layer perceptron method ---*/
#ifdef USE_MLPCPP
size_t n_betas;
MLPToolbox::CLookUp_ANN* lookup_mlp; /*!< \brief Multi-layer perceptron collection. */
MLPToolbox::CIOMap* iomap_TD; /*!< \brief Input-output map for thermochemical properties. */
MLPToolbox::CIOMap* iomap_PD; /*!< \brief Input-output map for the preferential diffusion scalars. */
MLPToolbox::CIOMap* iomap_Sources; /*!< \brief Input-output map for species source terms. */
MLPToolbox::CIOMap* iomap_LookUp; /*!< \brief Input-output map for passive look-up terms. */
MLPToolbox::CIOMap* iomap_Current;
Expand All @@ -76,10 +81,14 @@ class CFluidFlamelet final : public CFluidModel {
vector<su2double> scalars_vector;

vector<string> varnames_TD, /*!< \brief Lookup names for thermodynamic state variables. */
varnames_Sources, varnames_LookUp;
varnames_Sources, /*!< \brief Lookup names for source terms. */
varnames_LookUp, /*!< \brief Lookup names for passive look-up terms. */
varnames_PD; /*!< \brief Lookup names for preferential diffusion scalars. */

vector<su2double> val_vars_TD, /*!< \brief References to thermodynamic state variables. */
val_vars_Sources, val_vars_LookUp;
val_vars_Sources, /*!< \brief References to source terms. */
val_vars_LookUp, /*!< \brief References passive look-up terms. */
val_vars_PD; /*!< \brief References to preferential diffusion scalars. */

void PreprocessLookUp(CConfig* config);

Expand Down Expand Up @@ -107,14 +116,14 @@ class CFluidFlamelet final : public CFluidModel {
void SetTDState_T(su2double val_temperature, const su2double* val_scalars = nullptr) override;

/*!
* \brief Evaluate the flamelet manifold.
* \param[in] input_scalar - scalar solution.
* \param[in] input_varnames - names of variables to evaluate.
* \param[in] output_refs - output data.
* \param[out] Extrapolation - scalar solution is within bounds (0) or out of bounds (1).
* \brief Evaluate data-set for flamelet simulations.
* \param[in] input_scalar - controlling variables used to interpolate manifold.
* \param[in] lookup_type - look-up operation to be performed (FLAMELET_LOOKUP_OPS)
* \param[in] output_refs - output variables where interpolated results are stored.
* \param[out] Extrapolation - query data is within manifold bounds (0) or out of bounds (1).
*/
inline unsigned long EvaluateDataSet(const vector<su2double>& input_scalar, unsigned short lookup_type,
vector<su2double>& output_refs) override;
unsigned long EvaluateDataSet(const vector<su2double>& input_scalar, unsigned short lookup_type,
vector<su2double>& output_refs);
EvertBunschoten marked this conversation as resolved.
Show resolved Hide resolved

/*!
* \brief Check for out-of-bounds condition for data set interpolation.
Expand Down Expand Up @@ -142,4 +151,10 @@ class CFluidFlamelet final : public CFluidModel {
* \param[out] Mu - value of the laminar viscosity
*/
inline su2double GetLaminarViscosity() override { return Mu; }

/*!
* \brief Preferential diffusion as relevant phenomenon in flamelet simulations.
* \return Inclusion of preferential diffusion model.
*/
inline bool GetPreferentialDiffusion() const override { return PreferentialDiffusion; };
EvertBunschoten marked this conversation as resolved.
Show resolved Hide resolved
};
Loading