From a8b83fce8555e42fd720f97160ed3f2c626c866e Mon Sep 17 00:00:00 2001 From: xiao312 Date: Tue, 24 Jun 2025 10:49:54 +0800 Subject: [PATCH 1/2] Calling syncState() on Cantera Reactor in dfChemistryModel to avoid repetitive initialization. --- src/dfChemistryModel/dfChemistryModel.C | 27 ++++++++++++++++--------- src/dfChemistryModel/dfChemistryModel.H | 5 ++++- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/dfChemistryModel/dfChemistryModel.C b/src/dfChemistryModel/dfChemistryModel.C index 3c09f12a..61c3fccf 100644 --- a/src/dfChemistryModel/dfChemistryModel.C +++ b/src/dfChemistryModel/dfChemistryModel.C @@ -336,6 +336,14 @@ Foam::dfChemistryModel::dfChemistryModel { hc_[i] = CanteraGas_->Hf298SS(i)/CanteraGas_->molecularWeight(i); } + + react_ = std::make_unique(); + react_->setEnergy(0); + react_->insert(mixture_.CanteraSolution()); + + sim_ = std::make_unique(); + sim_->addReactor(*react_); + setNumerics(*sim_); } @@ -824,7 +832,7 @@ void Foam::dfChemistryModel::solveSingle clockTime time; time.timeIncrement(); - Cantera::Reactor react; + // Cantera::Reactor react; const scalar Ti = problem.Ti; const scalar pi = problem.pi; const scalar rhoi = problem.rhoi; @@ -833,14 +841,15 @@ void Foam::dfChemistryModel::solveSingle mixture_.setState_TPY(Ti, pi, yPre_.begin()); - react.insert(mixture_.CanteraSolution()); - // keep T const before and after sim.advance. this will give you a little improvement - react.setEnergy(0); - Cantera::ReactorNet sim; - sim.addReactor(react); - setNumerics(sim); + // react.insert(mixture_.CanteraSolution()); + // // keep T const before and after sim.advance. this will give you a little improvement + // react.setEnergy(0); + // Cantera::ReactorNet sim; + // sim.addReactor(react); + // setNumerics(sim); - sim.advance(problem.deltaT); + react_->syncState(); + sim_->advance(problem.deltaT); CanteraGas_->getMassFractions(yTemp_.begin()); @@ -1176,4 +1185,4 @@ Foam::scalar Foam::dfChemistryModel::solve_CVODE #include "pytorchFunctions.H" #endif -// ************************************************************************* // +// ************************************************************************* // \ No newline at end of file diff --git a/src/dfChemistryModel/dfChemistryModel.H b/src/dfChemistryModel/dfChemistryModel.H index 59ea2483..34a4cbb9 100644 --- a/src/dfChemistryModel/dfChemistryModel.H +++ b/src/dfChemistryModel/dfChemistryModel.H @@ -94,6 +94,9 @@ public IOdictionary CanteraMixture& mixture_; std::shared_ptr CanteraGas_; std::shared_ptr CanteraKinetics_; + std::unique_ptr react_; + std::unique_ptr sim_; + const fvMesh& mesh_; Switch chemistry_; @@ -388,4 +391,4 @@ public: #endif -// ************************************************************************* // +// ************************************************************************* // \ No newline at end of file From f5f6eba716fcef440b479bb8b3afa202eda457a6 Mon Sep 17 00:00:00 2001 From: xiao312 Date: Wed, 25 Jun 2025 12:56:49 +0800 Subject: [PATCH 2/2] Bug fix --- src/dfChemistryModel/dfChemistryModel.C | 1 + 1 file changed, 1 insertion(+) diff --git a/src/dfChemistryModel/dfChemistryModel.C b/src/dfChemistryModel/dfChemistryModel.C index 61c3fccf..b9d6da87 100644 --- a/src/dfChemistryModel/dfChemistryModel.C +++ b/src/dfChemistryModel/dfChemistryModel.C @@ -852,6 +852,7 @@ void Foam::dfChemistryModel::solveSingle sim_->advance(problem.deltaT); CanteraGas_->getMassFractions(yTemp_.begin()); + sim_->setInitialTime(0.0); for (int i=0; i