如何将new出来的volScalarField手动添加到objectRegistry?
-
如下所示,在固体力学求解器的编写中,我希望根据材料类型创建不同数量材料参数的volScalarField,进而用于主程序的求解:
List<volScalarField*> matConstList(0); if (materialType == "elastic") { // 构造出Evalue和nuvalue两个volScalarField matConstList.setSize(2); // new两个volScalarField出来,将Evalue和nuvalue都保存下来 matConstList[0] = new volScalarField("E", Evalue); matConstList[1] = new volScalarField("nu", nuvalue); } else if (materialType == "plastic") { // 类似上面的代码创建塑性参数 } 然而,在将各种材料参数的volScalarField new出来并保存到matConstList之后,主程序中使用lookupObject函数无法找到这些volScalarField,如下所示:
const volScalarField& E = mesh.lookupObject<volScalarField>("E"); // 这样会显示mesh没有名为"E"的objectRegistry 请教一下各位大佬,有没有什么办法,能将这些volScalarField手动添加到objectRegistry,使得主程序求解的时候lookupObject函数能找到他们?
-
PtrList<volScalarField> nutlist(BATCH);//场数组 forAll(nutlist, i) { nutlist.set ( i, new volScalarField ( IOobject ( "nutlist" + name(i), mesh.time().timeName(), mesh, IOobject::MUST_READ, IOobject::NO_WRITE ), mesh ) ); }
你试试这个,封装好的。
-
感谢老师,这下在主程序能找到创建的场变量了
2024年12月1日 02:51
1/3
2024年12月5日 08:49