其他分享
首页 > 其他分享> > Palabos算例解读:cavity3d.cpp From /codesByTopic/externalMacroscopicVariables/

Palabos算例解读:cavity3d.cpp From /codesByTopic/externalMacroscopicVariables/

作者:互联网

我们要想做理想的LBM模拟,往往中间涉及到很多其他操作,比如外部变量,耦合等等,这个算例提供了很好的展示。

从int main看起,

定义了变量,lattice1,lattice2,边界条件后,通过cavitySetup将其初始化。

接下来定义了lattice2RhoBarJparam,显然它就是我们可以操作的地方。

MultiScalarField3D<T> rhoBar(lattice2);
    MultiTensorField3D<T,3> j(lattice2);
    std::vector<MultiBlock3D*> lattice2RhoBarJparam;
    lattice2RhoBarJparam.push_back(&lattice2);
    lattice2RhoBarJparam.push_back(&rhoBar);
    lattice2RhoBarJparam.push_back(&j);
    computeRhoBarJ(lattice2, rhoBar, j, lattice2.getBoundingBox());

下面有一个computeRhoBarJ,这里调用的是下面代码

template<typename T, template<typename U> class Descriptor>
void computeRhoBarJ( MultiBlockLattice3D<T,Descriptor>& lattice,
                     MultiScalarField3D<T>& rhoBar, MultiTensorField3D<T,3>& j, Box3D domain )
{
    std::vector<MultiBlock3D*> fields;
    fields.push_back(&lattice);
    fields.push_back(&rhoBar);
    fields.push_back(&j);
    applyProcessingFunctional (
            new BoxRhoBarJfunctional3D<T,Descriptor>, domain, fields );
}

这里我之前的博文有介绍,它的作用是根据分布函数f计算出rhobar和j,并返回这两个值。

逻辑上应该是在cavitySetup(lattice2, parameters, *boundaryCondition)的时候,有initializeAtEquilibrium的过程,所以才用feq得到rhobar和j赋值。

接下来是利用ExternalRhoJcollideAndStream3D将lattice2集成到内部处理器中,level为-1。它的作用前文已述,即对lattice2进行一次collideAndStream。

integrateProcessingFunctional( new ExternalRhoJcollideAndStream3D<T,DESCRIPTOR>,
                               lattice2.getBoundingBox(), lattice2RhoBarJparam, -1 );

它的循环过程中,首先对lattice进行collideAndStream,接着对lattice2执行level为-1的内部处理器,后面lattice2.executeInternalProcessors()在这里没有作用,因为它正常是按顺序从0往上依次执行内部处理器,算例里没有其他相关数据处理器的定义。

// Execute a time iteration.
lattice.collideAndStream();
lattice2.executeInternalProcessors(-1);
lattice2.executeInternalProcessors();

而在Movingwall的IBM算例里,作者就大量地运用了这种integrateProcessingFunctional来进行j和g的计算。

标签:externalMacroscopicVariables,cavity3d,fields,算例,back,lattice2RhoBarJparam,push,r
来源: https://blog.csdn.net/qq_40259141/article/details/110106371