在阅读 rhoCentralFoam 代码时,看到了如下的代码
while (runTime.run())
{
// --- Directed interpolation of primitive fields onto faces
surfaceScalarField rho_pos(interpolate(rho, pos));
surfaceScalarField rho_neg(interpolate(rho, neg));
...
我还不是太明白 OpenFOAM 的代码架构,但一般我写代码,这种场的变量都要提前分配内存,然后在循环中更新数值,为什么这里都是在循环中新建变量呢?这样不是每步循环中都要分配一遍内存吗?
1 个赞
有道理,如果把循环里的变量声明放在循环之前,可以避免每次进入循环都重新分配内存空间
1 个赞
其实仅仅是申明在外面也不一定解决问题,rhoCentralFoam 的循环中,要通过很多临时变量去赋值,比如
volScalarField rPsi("rPsi", 1.0/psi);
surfaceScalarField rPsi_pos(interpolate(rPsi, pos, T.name()));
surfaceScalarField rPsi_neg(interpolate(rPsi, neg, T.name()));
像 rPsi ,或者通过插值得到的 rPsi_pos ,我觉得都是临时变量,每次循环都要分配内存。
而这些临时变量本来都是不用去创建的。