particleFoam / kinematicCloudProperties の深掘り

# はじめに
OpenFOAMで粒子のみの輸送計算を実施しようとした際に調べたことをここに記録しておこうと思います。

# kinematiCloudPropeties

粒子輸送の設定は、`constant/kinematicCloudProperties`で行われます。

```c++
solution
{
    active          true; // kinematicCloudのtoggle
    coupled         true; //
    transient       yes; // 定常・非定常
    cellValueSourceCorrection off; // Correct cell values using latest transfer information.

    maxCo           1.0;

    interpolationSchemes
    /* The transfer of particle properties between the Lagrangian 
       particle space and the Eulerian grid is performed using linear 
       interpolation functions. */
    {
        rho.air         cell;
        U.air           cellPoint;
        mu.air          cell;
        alpha.air       cell;
    }

    averagingMethod dual;
    """
    dual; 
    Point values are summed using the tetrahedral decomposition of the 
    computational cells. Summation is done in the cells, and also in the 
    terahedrons surrounding each point. The latter forms a type of dual mesh. 
    The interpolation is weighted by proximity to the cell centre or point, as 
    calculated by the barycentric coordinate within the tethrahedron.
    Other options are basic and moment
    """

    integrationSchemes
    {
        U               Euler;
    }

    sourceTerms
    {
        schemes
        {
            U           semiImplicit 1;
        }
    }
}

constantProperties
// density of a particle
{
    rho0            1000;
    alphaMax        0.9;
}

subModels
{
    particleForces
    {
        ErgunWenYuDrag
        {
            alphac alpha.air;
        }
        gravity;
    }

    injectionModels
    {
        model1
        {
            type            patchInjection;
            massTotal       40;
            SOI             1;
            parcelBasisType mass;
            patchName       inlet;
            duration        4;
            parcelsPerSecond 100644;
            U0              (-10 0 0);
            flowRateProfile constant 1;
            sizeDistribution
            {
                type        normal;
                normalDistribution
                {
                    expectation 100e-6;
                    variance 25e-6;
                    minValue 20e-6;
                    maxValue 180e-6;
                }
            }
        }
    }

    dispersionModel none;

    patchInteractionModel localInteraction;

    localInteractionCoeffs
    {
        patches
        (
            walls
            {
                type rebound;
                e    0.97;
                mu   0.09;
            }
            inlet
            {
                type rebound;
                e    0.97;
                mu   0.09;
            }
            outlet
            {
                type escape;
            }
        );
    }

    heatTransferModel none;

    surfaceFilmModel none;

    packingModel implicit;

    explicitCoeffs
    {
        particleStressModel
        {
            type HarrisCrighton;
            alphaPacked 0.6;
            pSolid 10.0;
            beta 2.0;
            eps 1.0e-7;
        }
        correctionLimitingMethod
        {
            type absolute;
            e 0.9;
        }
    }
    implicitCoeffs
    {
        alphaMin 0.0001;
        rhoMin 1.0;
        applyLimiting true;
        applyGravity false;
        particleStressModel
        {
            type HarrisCrighton;
            alphaPacked 0.6;
            pSolid 5.0;
            beta 2.0;
            eps 1.0e-2;
        }
    }

    dampingModel none;

    isotropyModel stochastic;

    stochasticCoeffs
    {
        timeScaleModel
        {
            type isotropic;
            alphaPacked 0.6;
            e 0.9;
        }
    }

    stochasticCollisionModel none;

    radiation off;
}

cloudFunctions
{}
```


# 参考
- MultiPhase-Particle-in-cell : https://en.wikipedia.org/wiki/Multiphase_particle-in-cell_method
- OpenFoam API Guide: https://www.openfoam.com/documentation/guides/latest/api/classFoam_1_1KinematicParcel.html