与Tutorial_2_2实现的区别
在Palabos tutorial里,2_2仅仅移除了11%的域,而2_4移除了45%。在2_4里,所有的流域都由15×15的小格子拼接,覆盖完半圆的管道。
图片来自Palabos Tutorial
与Tutorial_2_2代码的区别
在Tutorial_2_4中,多出了定义流体节点的模板类。
> template<typename T> class FluidNodes { public:
> FluidNodes(plint N_, plint radius_) : N(N_), radius(radius_)
> { }
> bool operator() (plint iX, plint iY) const {
> return ! BounceBackNodes<T>(N,radius)(iX,iY);//定义BounceBackNodes中非true部分为FluidNodes
> } private:
> plint N, radius; };
对应地后面也多出了利用flagMatrix来重新构建流域。
> MultiScalarField2D<int> flagMatrix(N+1, N/2+1);
> setToFunction(flagMatrix, flagMatrix.getBoundingBox(), FluidNodes<T>(N, radius));//定义固体节点,液体节点。
> plint blockSize = 15; //尺寸
> plint envelopeWidth = 1;
> MultiBlockManagement2D sparseBlockManagement =
> computeSparseManagement (
> *plb::reparallelize(flagMatrix, blockSize,blockSize),
> envelopeWidth );
>
> // Instantiate the multi-block, based on the created block distribution and
> // on default parameters.
> MultiBlockLattice2D<T, DESCRIPTOR> lattice (
> sparseBlockManagement,
> defaultMultiBlockPolicy2D().getBlockCommunicator(),
> defaultMultiBlockPolicy2D().getCombinedStatistics(),
> defaultMultiBlockPolicy2D().getMultiCellAccess<T,DESCRIPTOR>(),
> new BGKdynamics<T,DESCRIPTOR>(omega)
> );