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

Initial low Mach reacting flow capabilities #281

Merged
merged 43 commits into from
Jun 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
34537a0
initial commit of reacting species dev branch
Mar 14, 2024
69d9c45
hooked up reactingFlow to grab properties from transport/chemistry, N…
Mar 26, 2024
d56dffa
added species diffusion source term in temp eq
Mar 26, 2024
6b76486
small change to update diffs
Mar 27, 2024
b122d64
WIP state
Apr 2, 2024
d3e41e6
switch last Yn to be solved for using other Yn's
Apr 4, 2024
80a9c71
temp hard-code for Cp in dPodt term in temp
Apr 4, 2024
ddb4bfe
added Cp to temp eq via op coeffs, not running
Apr 5, 2024
8405e03
fixed some uninit problems and a tmpR0_ misuse
Apr 5, 2024
3122fe9
wip, hard-code CpMix=1 and dtPo=0, temp not stable otherwise
Apr 5, 2024
871a9ec
fixed Cp bug on explicit unsteady terms in temp, resT useage in speci…
Apr 5, 2024
3bd2ceb
added updates to MsRho and MsRhoCp
Apr 5, 2024
382aa6c
patterned argon mixture diffusivity off flux mixture flux routine
Apr 5, 2024
0fd58b9
fixes (i think) to species and mixture Cp, seems to still have a prob…
Apr 9, 2024
d9d118f
small fix to reaction rate related data sizes/types
Apr 9, 2024
394fcf8
Fix bug in ReactingFlow::speciesProduction
trevilo Apr 9, 2024
1049b25
Bug fixes in ReactingFlow::heatOfFormation
trevilo Apr 9, 2024
9d1f048
Bug fix in ReactingFlow::UpdateTimestepHistory
trevilo Apr 9, 2024
60dcead
Non-general implementation of sensible enthalpy contribution...
trevilo Apr 9, 2024
1fe8dfe
Correct mixture Cp calculation
trevilo Apr 9, 2024
c488b02
removed passing of full state to getCp routines and fixed a couple in…
Apr 10, 2024
5a53911
adding ic-distribution function for species
Apr 10, 2024
23f834f
added ic for binary diffusion test case
Apr 13, 2024
916de16
Bug fixes in ReactingFlow
trevilo Apr 15, 2024
ce47b0d
adding tests for reacting flow
Apr 30, 2024
d5b462b
enforce style
Apr 30, 2024
601dc90
trying to get rid of virtual function override intended? warning
Apr 30, 2024
0bbd569
working through warnings
Apr 30, 2024
c121419
Update input file for reactFlow-binDiff.test
trevilo May 2, 2024
b0b9b97
Relax tolerance on LeQuere test
trevilo May 2, 2024
22b2051
Relax tolerance in reactFlow-binDiff.test
trevilo May 2, 2024
2acc9fd
Workaround for cuda stack sizing issue
trevilo May 6, 2024
27a2e87
Tweak low Mach variant of single reaction test
trevilo Jun 4, 2024
8ebc5cd
Tweak low Mach variant of argon minimal diffusion test
trevilo Jun 4, 2024
ad29ad9
Reincarnate 'uniform' option for velocity IC
trevilo Jun 4, 2024
f86f06a
Remove some commented out code; add some TODOs
trevilo Jun 4, 2024
28d8e0f
Set eddy Pr and Sc from user input
trevilo Jun 4, 2024
f2fd982
Bug fix: Don't zero out convection term in temperature eqn
trevilo Jun 4, 2024
8998ea7
Add some checks to low Mach reacting
trevilo Jun 4, 2024
3b1339d
Style
trevilo Jun 4, 2024
53e9444
fixed bug related to error in tomboulides paper eq 1.1a. Cross-diffu…
May 7, 2024
cab31b6
fixes for 'cross diffusion' term
trevilo Jun 4, 2024
5a1d673
Put low Mach reacting reference solns into the dist
trevilo Jun 4, 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
5 changes: 3 additions & 2 deletions src/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ cxx_sources = averaging.cpp faceGradientIntegration.cpp M2ulPhyS.cpp rh
pybindings.cpp gslib_interpolator.cpp loMach.cpp loMachIO.cpp loMach_options.cpp calorically_perfect.cpp \
thermo_chem_base.cpp split_flow_base.cpp tomboulides.cpp dirichlet_bc_helper.cpp \
sponge_base.cpp geometricSponge.cpp gaussianInterpExtData.cpp turb_model_base.cpp \
algebraicSubgridModels.cpp algebraic_rans.cpp mesh_base.cpp lte_thermo_chem.cpp cases.cpp
algebraicSubgridModels.cpp algebraic_rans.cpp mesh_base.cpp lte_thermo_chem.cpp cases.cpp \
reactingFlow.cpp

mfem_extra_sources = ../utils/mfem_extras/pfem_extras.cpp

Expand All @@ -57,7 +58,7 @@ headers = averaging.hpp equation_of_state.hpp transport_properties.
thermo_chem_base.hpp split_flow_base.hpp tomboulides.hpp dirichlet_bc_helper.hpp \
sponge_base.hpp geometricSponge.hpp externalData_base.hpp gaussianInterpExtData.hpp \
turb_model_base.hpp algebraicSubgridModels.hpp algebraic_rans.hpp mesh_base.hpp \
lte_thermo_chem.hpp cases.hpp
lte_thermo_chem.hpp cases.hpp reactingFlow.hpp

mfem_extra_headers = ../utils/mfem_extras/pfem_extras.hpp

Expand Down
202 changes: 198 additions & 4 deletions src/argon_transport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -334,10 +334,12 @@ MFEM_HOST_DEVICE double ArgonMinimalTransport::computeThirdOrderElectronThermalC
(L11 - L12 * L12 / L22);
}

void ArgonMinimalTransport::computeMixtureAverageDiffusivity(const Vector &state, Vector &diffusivity) {
void ArgonMinimalTransport::computeMixtureAverageDiffusivity(const Vector &state, const Vector &Efield,
Vector &diffusivity, bool unused) {
diffusivity.SetSize(3);
diffusivity = 0.0;
computeMixtureAverageDiffusivity(&state[0], &diffusivity[0]);
computeMixtureAverageDiffusivity(&state[0], &Efield[0], &diffusivity[0], unused);

// Vector primitiveState(num_equation);
// mixture->GetPrimitivesFromConservatives(state, primitiveState);
//
Expand Down Expand Up @@ -375,8 +377,8 @@ void ArgonMinimalTransport::computeMixtureAverageDiffusivity(const Vector &state
// CurtissHirschfelder(X_sp, Y_sp, binaryDiff, diffusivity);
}

MFEM_HOST_DEVICE void ArgonMinimalTransport::computeMixtureAverageDiffusivity(const double *state,
double *diffusivity) {
MFEM_HOST_DEVICE void ArgonMinimalTransport::computeMixtureAverageDiffusivity(const double *state, const double *Efield,
double *diffusivity, bool unused) {
double primitiveState[gpudata::MAXEQUATIONS];
mixture->GetPrimitivesFromConservatives(state, primitiveState);

Expand Down Expand Up @@ -550,6 +552,46 @@ MFEM_HOST_DEVICE void ArgonMinimalTransport::GetViscosities(const double *conser
}
}

/*
MFEM_HOST_DEVICE void ArgonMinimalTransport::GetThermalConductivities(const double *conserved, const double *primitive,
double *kappa) { double n_sp[gpudata::MAXSPECIES], X_sp[gpudata::MAXSPECIES], Y_sp[gpudata::MAXSPECIES];
mixture->computeSpeciesPrimitives(conserved, X_sp, Y_sp, n_sp);
// double nTotal = 0.0;
// for (int sp = 0; sp < numSpecies; sp++) nTotal += n_sp[sp];
collisionInputs collInputs = computeCollisionInputs(primitive, n_sp);

double speciesViscosity[gpudata::MAXSPECIES], speciesHvyThrmCnd[gpudata::MAXSPECIES];
for (int sp = 0; sp < numSpecies; sp++) {
if (sp == electronIndex_) {
speciesViscosity[sp] = 0.0;
speciesHvyThrmCnd[sp] = 0.0;
continue;
}
speciesViscosity[sp] =
viscosityFactor_ * sqrt(mw_[sp] * collInputs.Th) / collisionIntegral(sp, sp, 2, 2, collInputs);
speciesHvyThrmCnd[sp] = speciesViscosity[sp] * kOverEtaFactor_ / mw_[sp];
}
// transportBuffer[FluxTrns::VISCOSITY] = linearAverage(X_sp, speciesViscosity);
// transportBuffer[FluxTrns::HEAVY_THERMAL_CONDUCTIVITY] = linearAverage(X_sp, speciesHvyThrmCnd);
//transportBuffer[FluxTrns::BULK_VISCOSITY] = 0.0;
kappa[0] = linearAverage(X_sp, speciesHvyThrmCnd);

if (thirdOrderkElectron_) {
// transportBuffer[FluxTrns::ELECTRON_THERMAL_CONDUCTIVITY] = computeThirdOrderElectronThermalConductivity(X_sp,
collInputs); kappa[1] = computeThirdOrderElectronThermalConductivity(X_sp, collInputs);

} else {
// transportBuffer[FluxTrns::ELECTRON_THERMAL_CONDUCTIVITY] =
// viscosityFactor_ * kOverEtaFactor_ * sqrt(collInputs.Te / mw_[electronIndex_]) * X_sp[electronIndex_] /
// collisionIntegral(electronIndex_, electronIndex_, 2, 2, collInputs);
kappa[1] = viscosityFactor_ * kOverEtaFactor_ * sqrt(collInputs.Te / mw_[electronIndex_]) * X_sp[electronIndex_] /
collisionIntegral(electronIndex_, electronIndex_, 2, 2, collInputs);

}

}
*/

//////////////////////////////////////////////////////
//////// Argon Mixture Transport
//////////////////////////////////////////////////////
Expand Down Expand Up @@ -1016,3 +1058,155 @@ MFEM_HOST_DEVICE void ArgonMixtureTransport::GetViscosities(const double *conser

return;
}

MFEM_HOST_DEVICE void ArgonMixtureTransport::GetThermalConductivities(const double *conserved, const double *primitive,
double *kappa) {
double n_sp[gpudata::MAXSPECIES], X_sp[gpudata::MAXSPECIES], Y_sp[gpudata::MAXSPECIES];
mixture->computeSpeciesPrimitives(conserved, X_sp, Y_sp, n_sp);
// double nTotal = 0.0;
// for (int sp = 0; sp < numSpecies; sp++) nTotal += n_sp[sp];
collisionInputs collInputs = computeCollisionInputs(primitive, n_sp);

double speciesViscosity[gpudata::MAXSPECIES], speciesHvyThrmCnd[gpudata::MAXSPECIES];
for (int sp = 0; sp < numSpecies; sp++) {
if (sp == electronIndex_) {
speciesViscosity[sp] = 0.0;
speciesHvyThrmCnd[sp] = 0.0;
continue;
}
speciesViscosity[sp] =
viscosityFactor_ * sqrt(mw_[sp] * collInputs.Th) / collisionIntegral(sp, sp, 2, 2, collInputs);
speciesHvyThrmCnd[sp] = speciesViscosity[sp] * kOverEtaFactor_ / mw_[sp];
}
// transportBuffer[FluxTrns::VISCOSITY] = linearAverage(X_sp, speciesViscosity);
// transportBuffer[FluxTrns::HEAVY_THERMAL_CONDUCTIVITY] = linearAverage(X_sp, speciesHvyThrmCnd);
// transportBuffer[FluxTrns::BULK_VISCOSITY] = 0.0;
kappa[0] = linearAverage(X_sp, speciesHvyThrmCnd);

if (thirdOrderkElectron_) {
// transportBuffer[FluxTrns::ELECTRON_THERMAL_CONDUCTIVITY] =
// computeThirdOrderElectronThermalConductivity(X_sp, collInputs);
kappa[1] = computeThirdOrderElectronThermalConductivity(X_sp, collInputs);

} else {
// transportBuffer[FluxTrns::ELECTRON_THERMAL_CONDUCTIVITY] =
// viscosityFactor_ * kOverEtaFactor_ * sqrt(collInputs.Te / mw_[electronIndex_]) * X_sp[electronIndex_] /
// collisionIntegral(electronIndex_, electronIndex_, 2, 2, collInputs);
kappa[1] = viscosityFactor_ * kOverEtaFactor_ * sqrt(collInputs.Te / mw_[electronIndex_]) * X_sp[electronIndex_] /
collisionIntegral(electronIndex_, electronIndex_, 2, 2, collInputs);
}
}

void ArgonMixtureTransport::computeMixtureAverageDiffusivity(const Vector &state, const Vector &Efield,
Vector &diffusivity, bool unused) {
diffusivity.SetSize(3);
diffusivity = 0.0;
computeMixtureAverageDiffusivity(&state[0], &Efield[0], &diffusivity[0], unused);
}

/*
MFEM_HOST_DEVICE void ArgonMixtureTransport::computeMixtureAverageDiffusivity(const double *state, double *diffusivity)
{ double primitiveState[gpudata::MAXEQUATIONS]; mixture->GetPrimitivesFromConservatives(state, primitiveState);

double n_sp[3], X_sp[3], Y_sp[3];
mixture->computeSpeciesPrimitives(state, X_sp, Y_sp, n_sp);

double nTotal = 0.0;
for (int sp = 0; sp < numSpecies; sp++) nTotal += n_sp[sp];

double Te = (twoTemperature_) ? primitiveState[num_equation - 1] : primitiveState[nvel_ + 1];
double Th = primitiveState[nvel_ + 1];

// Add Xeps to avoid zero number density case.
double nOverT = (n_sp[electronIndex_] + Xeps_) / Te + (n_sp[ionIndex_] + Xeps_) / Th;
// double debyeLength = sqrt(debyeFactor_ / AVOGADRONUMBER / nOverT);
double debyeLength;
debyeLength = debyeFactor_;
debyeLength /= AVOGADRONUMBER;
debyeLength /= nOverT;
debyeLength = std::sqrt(debyeLength);
double debyeCircle = PI_ * debyeLength * debyeLength;

double nondimTe = debyeLength * 4.0 * PI_ * debyeFactor_ * Te;
// double nondimTh = debyeLength * 4.0 * PI_ * debyeFactor_ * Th;

double binaryDiff[3 *3];
for (int i = 0; i < 3 * 3; i++) binaryDiff[i] = 0.0;
binaryDiff[electronIndex_ + neutralIndex_ * numSpecies] =
diffusivityFactor_ * std::sqrt(Te / getMuw(electronIndex_, neutralIndex_)) / nTotal / collision::argon::eAr11(Te);
binaryDiff[neutralIndex_ + electronIndex_ * numSpecies] = binaryDiff[electronIndex_ + neutralIndex_ * numSpecies];
binaryDiff[neutralIndex_ + ionIndex_ * numSpecies] =
diffusivityFactor_ * std::sqrt(Th / getMuw(neutralIndex_, ionIndex_)) / nTotal / collision::argon::ArAr1P11(Th);
binaryDiff[ionIndex_ + neutralIndex_ * numSpecies] = binaryDiff[neutralIndex_ + ionIndex_ * numSpecies];
binaryDiff[electronIndex_ + ionIndex_ * numSpecies] = diffusivityFactor_ *
std::sqrt(Te / getMuw(ionIndex_, electronIndex_)) / nTotal /
(collision::charged::att11(nondimTe) * debyeCircle);
binaryDiff[ionIndex_ + electronIndex_ * numSpecies] = binaryDiff[electronIndex_ + ionIndex_ * numSpecies];

// diffusivity.SetSize(3);
for (int sp = 0; sp < 3; sp++) diffusivity[sp] = 0.0;
CurtissHirschfelder(X_sp, Y_sp, binaryDiff, diffusivity);
for (int sp = 0; sp < 3; sp++) {
}
}
*/

MFEM_HOST_DEVICE void ArgonMixtureTransport::computeMixtureAverageDiffusivity(const double *state, const double *Efield,
double *diffusivity, bool unused) {
// double transportBuffer[FluxTrns::NUM_FLUX_TRANS];
// for (int p = 0; p < FluxTrns::NUM_FLUX_TRANS; p++) transportBuffer[p] = 0.0;

double primitiveState[gpudata::MAXEQUATIONS];
mixture->GetPrimitivesFromConservatives(state, primitiveState);

double n_sp[gpudata::MAXSPECIES], X_sp[gpudata::MAXSPECIES], Y_sp[gpudata::MAXSPECIES];
mixture->computeSpeciesPrimitives(state, X_sp, Y_sp, n_sp);
double nTotal = 0.0;
for (int sp = 0; sp < numSpecies; sp++) nTotal += n_sp[sp];

collisionInputs collInputs = computeCollisionInputs(primitiveState, n_sp);

/*
double speciesViscosity[gpudata::MAXSPECIES];
double speciesHvyThrmCnd[gpudata::MAXSPECIES];
for (int sp = 0; sp < numSpecies; sp++) {
if (sp == electronIndex_) {
speciesViscosity[sp] = 0.0;
speciesHvyThrmCnd[sp] = 0.0;
continue;
}
speciesViscosity[sp] =
viscosityFactor_ * sqrt(mw_[sp] * collInputs.Th) / collisionIntegral(sp, sp, 2, 2, collInputs);
speciesHvyThrmCnd[sp] = speciesViscosity[sp] * kOverEtaFactor_ / mw_[sp];
}
*/

// transportBuffer[FluxTrns::VISCOSITY] = linearAverage(X_sp, speciesViscosity);
// transportBuffer[FluxTrns::HEAVY_THERMAL_CONDUCTIVITY] = linearAverage(X_sp, speciesHvyThrmCnd);
// transportBuffer[FluxTrns::BULK_VISCOSITY] = 0.0;

/*
if (thirdOrderkElectron_) {
transportBuffer[FluxTrns::ELECTRON_THERMAL_CONDUCTIVITY] =
computeThirdOrderElectronThermalConductivity(X_sp, collInputs);
} else {
transportBuffer[FluxTrns::ELECTRON_THERMAL_CONDUCTIVITY] =
viscosityFactor_ * kOverEtaFactor_ * sqrt(collInputs.Te / mw_[electronIndex_]) * X_sp[electronIndex_] /
collisionIntegral(electronIndex_, electronIndex_, 2, 2, collInputs);
}
*/

double binaryDiff[gpudata::MAXSPECIES * gpudata::MAXSPECIES];
// binaryDiff = 0.0;
for (int spI = 0; spI < numSpecies - 1; spI++) {
for (int spJ = spI + 1; spJ < numSpecies; spJ++) {
double temp = ((spI == electronIndex_) || (spJ == electronIndex_)) ? collInputs.Te : collInputs.Th;
binaryDiff[spI + spJ * numSpecies] =
diffusivityFactor_ * sqrt(temp / getMuw(spI, spJ)) / nTotal / collisionIntegral(spI, spJ, 1, 1, collInputs);
binaryDiff[spJ + spI * numSpecies] = binaryDiff[spI + spJ * numSpecies];
}
}

for (int sp = 0; sp < 3; sp++) diffusivity[sp] = 0.0;
CurtissHirschfelder(X_sp, Y_sp, binaryDiff, diffusivity);
}
19 changes: 14 additions & 5 deletions src/argon_transport.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,8 @@ class ArgonMinimalTransport : public MolecularTransport {
const double eps0_ = VACUUMPERMITTIVITY;
const double qe_ = ELECTRONCHARGE;
const double R_ = UNIVERSALGASCONSTANT;
const double debyeFactor_ = kB_ * eps0_ / qe_ / qe_;
// const double debyeFactor_ = kB_ * eps0_ / qe_ / qe_;
const double debyeFactor_ = BOLTZMANNCONSTANT * VACUUMPERMITTIVITY / ELECTRONCHARGE / ELECTRONCHARGE;
// const double PI_ = 4.0 * atan(1.0);
const double PI_ = PI;
const double qeOverkB_ = qe_ / kB_;
Expand Down Expand Up @@ -124,8 +125,11 @@ class ArgonMinimalTransport : public MolecularTransport {
MFEM_HOST_DEVICE double computeThirdOrderElectronThermalConductivity(const double *X_sp, const double debyeLength,
const double Te, const double nondimTe);

virtual void computeMixtureAverageDiffusivity(const Vector &state, Vector &diffusivity);
MFEM_HOST_DEVICE void computeMixtureAverageDiffusivity(const double *state, double *diffusivity);
virtual void computeMixtureAverageDiffusivity(const Vector &state, const Vector &Efield, Vector &diffusivity,
bool unused);
MFEM_HOST_DEVICE virtual void computeMixtureAverageDiffusivity(const double *state, const double *Efield,
double *diffusivity, bool unused);
MFEM_HOST_DEVICE void GetThermalConductivities(const double *conserved, const double *primitive, double *kappa);

// These are used to compute third-order electron thermal conductivity based on standard Chapman--Enskog method.
MFEM_HOST_DEVICE double L11ee(const double *Q2) { return Q2[0]; }
Expand Down Expand Up @@ -188,8 +192,13 @@ class ArgonMixtureTransport : public ArgonMinimalTransport {

MFEM_HOST_DEVICE double computeThirdOrderElectronThermalConductivity(const double *X_sp,
const collisionInputs &collInputs);
//
// virtual void computeMixtureAverageDiffusivity(const Vector &state, Vector &diffusivity);

virtual void computeMixtureAverageDiffusivity(const Vector &state, const Vector &Efield, Vector &diffusivity,
bool unused);
MFEM_HOST_DEVICE virtual void computeMixtureAverageDiffusivity(const double *state, const double *Efield,
double *diffusivity, bool unused);

MFEM_HOST_DEVICE void GetThermalConductivities(const double *conserved, const double *primitive, double *kappa);
};

#endif // ARGON_TRANSPORT_HPP_
8 changes: 4 additions & 4 deletions src/calorically_perfect.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ CaloricallyPerfectThermoChem::CaloricallyPerfectThermoChem(mfem::ParMesh *pmesh,
tpsP_->getInput("loMach/calperfect/linear-solver-rtol", rtol_, 1e-12);
tpsP_->getInput("loMach/calperfect/linear-solver-max-iter", max_iter_, 1000);
tpsP_->getInput("loMach/calperfect/linear-solver-verbosity", pl_solve_, 0);
tpsP_->getInput("loMach/calperfect/numerical-integ", numerical_integ_, true);
}

CaloricallyPerfectThermoChem::~CaloricallyPerfectThermoChem() {
Expand Down Expand Up @@ -358,7 +359,7 @@ void CaloricallyPerfectThermoChem::initializeSelf() {

// Wall BCs
{
std::cout << "There are " << pmesh_->bdr_attributes.Max() << " boundary attributes!" << std::endl;
if (rank0_) std::cout << "There are " << pmesh_->bdr_attributes.Max() << " boundary attributes" << std::endl;
Array<int> attr_wall(pmesh_->bdr_attributes.Max());
attr_wall = 0;

Expand All @@ -371,7 +372,7 @@ void CaloricallyPerfectThermoChem::initializeSelf() {
tpsP_->getRequiredInput((basepath + "/type").c_str(), type);

if (type == "viscous_isothermal") {
std::cout << "Adding patch = " << patch << " to isothermal wall list!" << std::endl;
if (rank0_) std::cout << "Adding patch = " << patch << " to isothermal wall list" << std::endl;

attr_wall = 0;
attr_wall[patch - 1] = 1;
Expand All @@ -381,7 +382,6 @@ void CaloricallyPerfectThermoChem::initializeSelf() {

ConstantCoefficient *Twall_coeff = new ConstantCoefficient();
Twall_coeff->constant = Twall;

AddTempDirichletBC(Twall_coeff, attr_wall);

ConstantCoefficient *Qt_bc_coeff = new ConstantCoefficient();
Expand Down Expand Up @@ -557,7 +557,7 @@ void CaloricallyPerfectThermoChem::initializeOperators() {
MqInv_->SetMaxIter(max_iter_);

LQ_form_ = new ParBilinearForm(sfes_);
auto *lqd_blfi = new DiffusionIntegrator(*thermal_diff_coeff_);
auto *lqd_blfi = new DiffusionIntegrator(*thermal_diff_total_coeff_);
if (numerical_integ_) {
lqd_blfi->SetIntRule(&ir_di);
}
Expand Down
Loading
Loading