CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM Running, Solving & CFD (https://www.cfd-online.com/Forums/openfoam-solving/)
-   -   SMALL, GREAT and ROOTVSMALL - what is that? (https://www.cfd-online.com/Forums/openfoam-solving/120990-small-great-rootvsmall-what.html)

Dommy July 18, 2013 17:18

SMALL, GREAT and ROOTVSMALL - what is that?
 
Dear Foamers!

I'm working on Euler/Lagrange validation cases at the moment.
While looking into Disoersion Models I discoverd something in the Code - SMALL, GREAT and ROOTVSMALL.

Some examples (from /openfoam211/src/lagrangian/intermediate/submodels/Kinematic/DispersionModel/GradientDispersionRAS/GradientDispersionRAS.C)

Code:


scalar sigma = sqrt(2.0*k/3.0);
vector dir = -gradk/(mag(gradk) + SMALL);

Code:

else
    {
        tTurb = GREAT;
        UTurb = vector::zero;
    }

Code:

const scalar epsilon =
        this->epsilonPtr_->internalField()[cellI] + ROOTVSMALL;
    const vector& gradk = this->gradkPtr_->internalField()[cellI];

In order to completly understand what I'm doing I need to know what this model is doing. Thanks a lot in advance!

Best,
Thomas

Lieven July 18, 2013 17:31

Hi Thomas,

SMALL, VSMALL, LARGE, ... are simply constants defined in src/OpenFOAM/primitives/Scalar/scalar/scalar.H and src/OpenFOAM/primitives/Scalar/floatScalar/floatScalar.H

In summary:
Code:

GREAT = 1.0e+6;
VGREAT = 1.0e+37;
ROOTVGREAT = 1.0e+18;
SMALL = 1.0e-6;
VSMALL = 1.0e-37;
ROOTVSMALL = 1.0e-18;

When you have something like 1/(x+SMALL) in the code, the SMALL simply prevents an floating point error from occurring when x = 0.

Cheers,

Lieven

l_r_mcglashan July 18, 2013 17:47

Slight correction; the values depend on whether openfoam is compiled in single or double precision.

Lieven July 18, 2013 17:55

How indeed, my apologies for this laxity. The values mentioned above are for a double precision compilation.

Cheers

L

Dommy July 19, 2013 04:47

Thanks for the quick reply - it all makes sense now!

l_r_mcglashan July 19, 2013 04:48

Correction; the values above are for single precision.

ndev March 22, 2017 19:53

Double Precision Values
 
I know this is old, but sometimes these posts get a lot of traffic. Just to eliminate any confusion, the double precision values are:

static const doubleScalar doubleScalarGREAT = 1.0e+15;
static const doubleScalar doubleScalarVGREAT = 1.0e+300;

static const doubleScalar doubleScalarROOTVGREAT = 1.0e+150;

static const doubleScalar doubleScalarSMALL = 1.0e-15;
static const doubleScalar doubleScalarVSMALL = 1.0e-300;
static const doubleScalar doubleScalarROOTVSMALL = 1.0e-150;

evamaria February 20, 2020 09:12

Be aware that the hard-coded scalar limits have been replaced: https://github.com/OpenFOAM/OpenFOAM...9d7f1ee5912713


All times are GMT -4. The time now is 18:05.