每个时间步文件夹下没有数据写入,求大神!
-
我在linearViscousStress.H中需要引用omega(SSTkomega.C中的)变量,然后我这样引用:
const volScalarField& omega_ = ( this->mesh_.objectRegistry::template lookupObject<volScalarField>("omega") );
编译没问题,但当我运行求解器时,会出现:
--> FOAM FATAL ERROR: request for volScalarField omega from objectRegistry region0 failed available objects of type volScalarField are 15 ( sigmaMag alphas nu.pos muMag_0 rho nu.molten p_rgh nu alpha.molten nu.neg muMag rho_0 alpha.neg alpha.pos sigmaMag_0 )
即objectRegistry region0此时没有omega注册,我分析原因:执行求解器的时候linearViscousStress.C先执行,此时omega还没注册进表里,显示找不到它,我现在在linearViscousStress.C的引用以前加入:
omega ( IOobject ( IOobject::groupName("omega", alphaRhoPhi.group()), //"omega", runTime.timeName(), //way--time mesh, //objectRegistry---region0(fvmesh) IOobject::MUST_READ, //regIOobject IOobject::AUTO_WRITE //regIOobject ), mesh ); const volScalarField& omega_ = ( this->mesh_.objectRegistry::template lookupObject<volScalarField>("omega") );
求解器可以运行,也omage也正常迭代,
但在每个时间步文件夹下,omage文件始终保持0文件下的状态,没有数据写入,所以不知为何?
我相当于IOobject了两次omega变量(其中SSTkomegabase.C本身自带一次,自己人为添加一次),是这个原因吗? -
@chen_hao 我后处理的程序是这样写的,我不确定,你可以试一下。我也不太懂
Info<< "Calculating LES Resolved Index Quality -> IQη (LESIQ)\n" << endl; // LES Resolved Index Quality of TKE -> IQη = LESIQ volScalarField LESIQ ( IOobject ( "LESIQ", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::AUTO_WRITE ), mesh, dimensionedScalar ( "LESIQ", dimless, scalar(0) ) ); //LESIQ = 1/(1+0.05*(pow((mu+muSGS)/max(mu, muSmall), (0.53/1.0)))); LESIQ = 1/(1+0.05*(pow(muEff/max(mu, muSmall), (0.53/1.0)))); LESIQ.write();
-
@chen_hao 在 每个时间步文件夹下没有数据写入,求大神! 中说:
我在linearViscousStress.H中需要引用omega(SSTkomega.C中的)变量,然后我这样引用:
const volScalarField& omega_ = ( this->mesh_.objectRegistry::template lookupObject<volScalarField>("omega") );
编译没问题,但当我运行求解器时,会出现:
--> FOAM FATAL ERROR: request for volScalarField omega from objectRegistry region0 failed available objects of type volScalarField are 15 ( sigmaMag alphas nu.pos muMag_0 rho nu.molten p_rgh nu alpha.molten nu.neg muMag rho_0 alpha.neg alpha.pos sigmaMag_0 )
即objectRegistry region0此时没有omega注册,我分析原因:执行求解器的时候linearViscousStress.C先执行,此时omega还没注册进表里,显示找不到它,我现在在linearViscousStress.C的引用以前加入:
omega ( IOobject ( IOobject::groupName("omega", alphaRhoPhi.group()), //"omega", runTime.timeName(), //way--time mesh, //objectRegistry---region0(fvmesh) IOobject::MUST_READ, //regIOobject IOobject::AUTO_WRITE //regIOobject ), mesh ); const volScalarField& omega_ = ( this->mesh_.objectRegistry::template lookupObject<volScalarField>("omega") );
求解器可以运行,也omage也正常迭代,
但在每个时间步文件夹下,omage文件始终保持0文件下的状态,没有数据写入,所以不知为何?
我相当于IOobject了两次omega变量(其中SSTkomegabase.C本身自带一次,自己人为添加一次),是这个原因吗?@李东岳 @bestucan 想问下怎么把一个注册到某个objectRegistry的物理量从其中 删除注销 有没有办法 我看regIOobject里有checkOut()函数,不知道能不能实现
-
@bestucan
谢谢老师的耐心解答 ,我之前想达到的理想效果是:
建立个 一次性的Omega场 让第一个循环运行起来后注销,后面的omega场是原湍流模型里的。
在线性项中加入,会可能出现老师说的情况,每轮都会重新新建。求解器运行时,按照createFields.H中的顺序建立许多场,然后读取湍流模型的智能指针,我有个想法:如果有能注销IOobject的建立场命令吗 ,我在createFields中建立这种一次性的omega!
如果没发做到,按照我的编写似乎没发在linearstress运行前注册进去Omega,似乎这种硬植入是无解的