diff --git a/applications/solvers/dfSprayFoam/createFields.H b/applications/solvers/dfSprayFoam/createFields.H index 7506f74b8..d8e2199a2 100644 --- a/applications/solvers/dfSprayFoam/createFields.H +++ b/applications/solvers/dfSprayFoam/createFields.H @@ -110,7 +110,7 @@ const label inertIndex(chemistry->species()[inertSpecie]); chemistry->setEnergyName("ha"); chemistry->updateEnergy(); -if (combModelName != "flareFGM") +if (combModelName != "flareFGM" && combModelName != "DeePFGM") { chemistry->correctThermo(); Info<< "At initial time, min/max(T) = " << min(T).value() << ", " << max(T).value() << endl; diff --git a/applications/solvers/dfSprayFoam/dfSprayFoam.C b/applications/solvers/dfSprayFoam/dfSprayFoam.C index 363508475..89860af3d 100644 --- a/applications/solvers/dfSprayFoam/dfSprayFoam.C +++ b/applications/solvers/dfSprayFoam/dfSprayFoam.C @@ -154,7 +154,7 @@ int main(int argc, char *argv[]) { #include "UEqn.H" - if(combModelName!="ESF" && combModelName!="flareFGM" ) + if(combModelName!="ESF" && combModelName!="flareFGM" && combModelName!="DeePFGM" ) { #include "YEqn.H" #include "EEqn.H" diff --git a/src/dfCombustionModels/FGM/DeePFGM/DeePFGM.C b/src/dfCombustionModels/FGM/DeePFGM/DeePFGM.C index ce8d8a69b..881f1f044 100644 --- a/src/dfCombustionModels/FGM/DeePFGM/DeePFGM.C +++ b/src/dfCombustionModels/FGM/DeePFGM/DeePFGM.C @@ -25,6 +25,7 @@ License #include "DeePFGM.H" + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template @@ -38,66 +39,17 @@ Foam::combustionModels::DeePFGM::DeePFGM : baseFGM(modelType, thermo, turb, combustionProperties), tableSolver( - baseFGM::speciesNames_, - baseFGM::scaledPV_, - baseFGM::flameletT_, - baseFGM::Ycmaxall_ + baseFGM::tablePath_ ) { //- retrieval data from table - module=initialize_module(); - func=initialize_function(module); - func_load=initialize_load(module); - // model_omegac = PyObject_CallObject(func_load, PyTuple_Pack(1, PyLong_FromLong(0))); - // model_cp = PyObject_CallObject(func_load, PyTuple_Pack(1, PyLong_FromLong(3))); - // model_T = PyObject_CallObject(func_load, PyTuple_Pack(1, PyLong_FromLong(6))); - // model_YH2O = PyObject_CallObject(func_load, PyTuple_Pack(1, PyLong_FromLong(8))); - // model_YCO = PyObject_CallObject(func_load, PyTuple_Pack(1, PyLong_FromLong(9))); - // model_YCO2 = PyObject_CallObject(func_load, PyTuple_Pack(1, PyLong_FromLong(10))); - // PyObject* models = PyList_New(11); - model_omegac=PyObject_CallObject(func_load, PyTuple_Pack(1, PyLong_FromLong(0))); - model_cp=PyObject_CallObject(func_load, PyTuple_Pack(1, PyLong_FromLong(3))); - model_T=PyObject_CallObject(func_load, PyTuple_Pack(1, PyLong_FromLong(6))); - model_YH2O=PyObject_CallObject(func_load, PyTuple_Pack(1, PyLong_FromLong(8))); - model_YCO=PyObject_CallObject(func_load, PyTuple_Pack(1, PyLong_FromLong(9))); - model_YCO2=PyObject_CallObject(func_load, PyTuple_Pack(1, PyLong_FromLong(10))); - // for(int i=0;i<11;i++) - // { - // int phinum[11]={0,0,0,3,3,3,6,6,8,9,10}; - // PyObject* args = PyTuple_Pack(1, PyLong_FromLong(phinum[i])); - // PyObject* py_result = PyObject_CallObject(func_load, args); - // PyList_SET_ITEM(models,i, py_result); - // } - // retrieval(module,func); -} -template -void Foam::combustionModels::DeePFGM::correct() -{ - //- initialize flame kernel - baseFGM::initialiseFalmeKernel(); - - //- solve transport equation - baseFGM::transport(); - - //update enthalpy using lookup data - if(!(this->solveEnthalpy_)) + retrieval(); + Info<< "At DeePFGM, min/max(T) = " << min(this->T_).value() << ", " << max(this->T_).value() << endl; + if (tableSolver::scaledPV_ != baseFGM::scaledPV_) { - this->He_ = this->Z_*(H_fuel-H_ox) + H_ox; + Info << "Warning! -- scaledPV in FGM table: " << tableSolver::scaledPV_ + << "are not equal to that in combustionProperties: " << baseFGM::scaledPV_ << endl; } - // PyObject* module=initialize_module(); - // PyObject* func=initialize_function(module); - // PyObject* func_load=initialize_load(module); - // PyObject* models = PyList_New(6); - // for(int i=0;i<6;i++) - // { - // int phinum[6]={0,3,6,8,9,10}; - // PyObject* args = PyTuple_Pack(1, PyLong_FromLong(phinum[i])); - // PyObject* py_result = PyObject_CallObject(func_load, args); - // PyList_SET_ITEM(models, i, py_result); - // } - //- retrieval data from table - retrieval(module,func,model_omegac,model_cp,model_T,model_YH2O,model_YCO,model_YCO2); - } @@ -107,277 +59,458 @@ template Foam::combustionModels::DeePFGM::~DeePFGM() {} + + template -PyObject* Foam::combustionModels::DeePFGM::initialize_module() +void Foam::combustionModels::DeePFGM::correct() { - Py_Initialize(); - if (!Py_IsInitialized()) + //- initialize flame kernel + baseFGM::initialiseFalmeKernel(); + //- solve transport equation + baseFGM::transport(); + if (this->isLES_) { - std::cout << "python init failed" << std::endl; + baseFGM::magUPrime(); } - // 2、初始化python系统文件路径,保证可以访问到 .py文件 - PyRun_SimpleString("import sys"); - PyRun_SimpleString("import numpy"); - PyRun_SimpleString("sys.path.append(os.getcwd()+'/FGMinference')"); - PyObject* module = PyImport_ImportModule("inference"); - if (module == nullptr) + //update enthalpy using lookup data + if(!(this->solveEnthalpy_)) { - std::cout <<"module not found: inference" << std::endl; - PyErr_Print(); - } - return module; + this->He_ = this->Z_*(this->H_fuel-this->H_ox) + this->H_ox; + } + //- retrieval data from table + retrieval( ); } + + template -PyObject* Foam::combustionModels::DeePFGM::initialize_function(PyObject* module) +void Foam::combustionModels::DeePFGM::getGPUFGMProblemCells(Foam::DynamicList& GPUFGMproblemList) { - PyObject* func = PyObject_GetAttrString(module, "FGM"); - if (!func || !PyCallable_Check(func)) - { - std::cout <<"function not found: FGM" << std::endl; - PyErr_Print(); - } - else + forAll(this->rho_, celli) { - std::cout <<"function found: FGM" << std::endl; + GpuFGMProblem problem; + problem.cellid = celli; + problem.h = this->He_s_[celli]; + problem.z = this->ZCells_[celli]; + problem.c = this->c_s_[celli]; + problem.gz = this->Zvar_s_[celli]; + problem.gc = this->cvar_s_[celli]; + problem.gcz = this->Zcvar_s_[celli]; + GPUFGMproblemList.append(problem); } - return func; + return; } + + template -PyObject* Foam::combustionModels::DeePFGM::initialize_load(PyObject* module) +void Foam::combustionModels::DeePFGM::getDNNinputs(const Foam::DynamicBuffer& problemBuffer, + std::vector