CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM (https://www.cfd-online.com/Forums/openfoam/)
-   -   nSubCycles criteria (https://www.cfd-online.com/Forums/openfoam/139525-nsubcycles-criteria.html)

maysmech July 25, 2014 11:16

nSubCycles criteria
 
Hi Foamers,

As you know, in gas-solid flows there are two time steps; one for continuous phase and the other for disperse phase which is usually less than first one. It is introduced as nSubCycles in openFoam. when running dpmFoam we see in terminal:
Code:

Courant Number mean: 0.0331165 max: 0.168717
Time = 0.00018

Evolving kinematicCloud

Solving 3-D cloud kinematicCloud
    2 move-collide subCycles

which tells it has 2 move subcycles.

HTML Code:

src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/CollisionModel/CollisionModel.H
in above address you see:
Code:

    // Member Functions

        //- Return the number of times to subcycle the current
        //  timestep to meet the criteria of the collision model
        virtual label nSubCycles() const;

I couldn't find in source code the criteria for number of subcycles and how is it calculated and implemented. If anyone knows please share with us.
Regards,

Shah Akib Sarwar August 9, 2023 19:03

Hello. Did you ever find an answer to this?

dscian September 1, 2023 14:19

That firstly reads:
~/OpenFOAM/OpenFOAM-dev/src/lagrangian/parcel/submodels/Momentum/CollisionModel/PairCollision/PairCollision.C

Code:

template<class CloudType>
Foam::label Foam::PairCollision<CloudType>::nSubCycles() const
{
    label nSubCycles = 1;

    if (pairModel_->controlsTimestep())
    {
        label nPairSubCycles = returnReduce
        (
            pairModel_->nSubCycles(), maxOp<label>()
        );

        nSubCycles = max(nSubCycles, nPairSubCycles);
    }

    if (wallModel_->controlsTimestep())
    {
        label nWallSubCycles = returnReduce
        (
            wallModel_->nSubCycles(), maxOp<label>()
        );

        nSubCycles = max(nSubCycles, nWallSubCycles);
    }

    return nSubCycles;
}

which then reads

~/OpenFOAM/OpenFOAM-dev/src/lagrangian/parcel/submodels/Momentum/CollisionModel/PairCollision/PairModel/PairSpringSliderDashpot/PairSpringSliderDashpot.C

and

~/OpenFOAM/OpenFOAM-dev/src/lagrangian/parcel/submodels/Momentum/CollisionModel/PairCollision/WallModel/WallSpringSliderDashpot/WallSpringSliderDashpot.C

as part of "pairModel_->nSubCycles()" and "wallModel_->nSubCycles()"

nSubCycles()from PairSpringSliderDashpot is as follows:

Code:

template<class CloudType>
Foam::label Foam::PairSpringSliderDashpot<CloudType>::nSubCycles() const
{
    if (!this->owner().size())
    {
        return 1;
    }

    scalar RMin, rhoMax, UMagMax;
    findMinMaxProperties(RMin, rhoMax, UMagMax);

    // Note:  pi^(7/5)*(5/4)^(2/5) = 5.429675
    const scalar minCollisionDeltaT =
        5.429675
      *RMin
      *pow(rhoMax/(Estar_*sqrt(UMagMax) + rootVSmall), 0.4)
      /collisionResolutionSteps_;

    return ceil(this->owner().time().deltaTValue()/minCollisionDeltaT);
}

nSubCycles() of WallSpringSliderDashpot is basically the same.


All times are GMT -4. The time now is 10:01.