openfoam11中incompressiblevof求解器
-
@李东岳 在 openfoam11中incompressiblevof求解器 中说:
下周给你做个算例更新到 dyfluid.com
李老师您好,感谢您百忙之中更新的数据驱动LES,但我在运行的时候遇到了一些问题,我按照您在网站上的步骤这么设计了一下。
#include <torch/torch.h> #include "fvCFD.H" #include "viscosityModel.H" #include "incompressibleMomentumTransportModels.H" #include "pisoControl.H" #include "pressureReference.H" #include "fvModels.H" #include "fvConstraints.H" #include "NN.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // int main(int argc, char *argv[]) { // 初始化OpenFOAM运行时间 #include "setRootCaseLists.H" #include "createTime.H" #include "createMesh.H" pisoControl piso(mesh); #include "createFields.H" #include "initContinuityErrs.H" volScalarField nuML ( IOobject ( "nuML", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::NO_WRITE ), mesh, dimensionedScalar("zero", dimViscosity, 0.0) ); // 创建并加载神经网络 auto net = std::make_shared<NN>(); torch::load(net, "net.pth"); // 加载已训练的模型 while (runTime.loop()) { Info << "Time = " << runTime.userTimeName() << nl << endl; #include "CourantNo.H" net->eval(); // 设置网络为评估模式 // 计算速度梯度 volTensorField gradU("", fvc::grad(U)); // 准备输入数据 auto inBatch = torch::zeros({nuML.size(), 9}, torch::kFloat); forAll(nuML, celli) { inBatch[celli][0] = gradU[celli].component(tensor::XX); inBatch[celli][1] = gradU[celli].component(tensor::XY); inBatch[celli][2] = gradU[celli].component(tensor::XZ); inBatch[celli][3] = gradU[celli].component(tensor::YX); inBatch[celli][4] = gradU[celli].component(tensor::YY); inBatch[celli][5] = gradU[celli].component(tensor::YZ); inBatch[celli][6] = gradU[celli].component(tensor::ZX); inBatch[celli][7] = gradU[celli].component(tensor::ZY); inBatch[celli][8] = gradU[celli].component(tensor::ZZ); } // 执行神经网络预测 auto yPred = net->forward(inBatch); // 更新粘性系数 nuML forAll(nuML, celli) { nuML[celli] = yPred[celli].item<float>() / 1e5 + 2e-5; } runTime.write(); } Info << "End" << endl; return 0; }
但是出现了一些warning,不知道哪里出现了问题,我把我的log文件附在这里,想请李老师有空的时候能帮忙看一下问题,谢谢李老师。log.wmake
-
@李东岳 在 openfoam11中incompressiblevof求解器 中说:
volScalarField nuML("nuML", mesh, dimensionedScalar("nu", dimensionSet(0, 2, -1, 0, 0, 0, 0), 0.0));
你有一行代码这么写的,这么写的不对
李老师,我在定义这个变量的时候是这么定义的:
volScalarField nuML ( IOobject ( "nuML", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::NO_WRITE ), mesh, dimensionedScalar("zero", dimViscosity, 0.0) );
但我还是没有运行成功您的教程,想请问李老师可以把您的算例在论坛共享一下吗?然后我还有一个问题是这样的,我想在of10下icofoam的基础上先修改,但是我只是在头文件引入了#include "NN.H",并没有在求解器中修改内容,就不能编译,我看了一下报错,大致的意思是openfoam和libtorch的数据结构不兼容,但是按照您在http://dyfluid.com/上的算例来看不应该会出现这种报错,想请教李老师一下这其中的原因。这是我这部分的log文件log.wmake