如何重新读取已有的时间步里的场
-
@李东岳 李老师,controlDict读取的也是latestTime (比如是t1), 然后他读取了t1时间步的场,比如一个force source term ‘f’。现在我在solver里想定义,每运行ndeltaT的时间步时,从新的(t1+ndeltaT)time文件中读取新的 ‘f’场, ‘f’场的值事先准备好了,放在(t1+ndeltaT,t1+2ndeltaT,t1+3n*deltaT,.......)里面。问题是,读了t1时间步的场后,后面的怎么都读不进去,仍然保持t1时候的值不变,不管是设置了“MUST_READ_IF_MODIFIED”,或者强制‘f.read()’。
volScalarField f ( IOobject ( "f", runTime.timeName(), mesh, IOobject::MUST_READ_IF_MODIFIED, IOobject::NO_WRITE ), mesh );
-
@coolhhh 嗯嗯,刚刚试了,不行。这样子的话,p的值就为0了,再read()一下还是0,读不进来。
我在想,能不能借鉴从constant/transportProperties中读取nu的方法:dimensionedScalar nu ( "nu", dimViscosity, transportProperties.lookup("nu") );
这样子是可以实时更新的。但是不知道如何在runTime.timeName()中lookup场的值,这个代码怎么写还没搞明白,一直报错。
这样写是报错的:p = dimensionedScalar("p", p.dimensions(), runTime.timeName().lookup("p")); log文件: interPhaseChangeFoam_justPp.C:120:72: error: ‘class Foam::word’ has no member named ‘lookup’ p = dimensionedScalar("p", p.dimensions(), runTime.timeName().lookup("p")