数值风云

rhoCentralFoam 代码中变量定义的疑惑

在阅读 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 ,我觉得都是临时变量,每次循环都要分配内存。
而这些临时变量本来都是不用去创建的。