CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM Post-Processing (https://www.cfd-online.com/Forums/openfoam-post-processing/)
-   -   Age of Air Function Object (https://www.cfd-online.com/Forums/openfoam-post-processing/232144-age-air-function-object.html)

b.simpson December 1, 2020 11:54

Age of Air Function Object
 
Hi all,

I am trying to set up an Age of Air function object in OpenFOAM 8. I am running buoyantSimpleFoam in Ubuntu 18.04.

I have tried implementing a function object from older threads (mainly Age of air with function object).

My controlDict code is:
Code:

AoA
        {
                type    scalarTransport;
                libs        ("libutilityFunctionObjects.so");
                enabled true;
                writeControl writeTime;
                log yes;
                nCorr 1;

                field AoA;
                active          true;
                autoSchemes    false;
                resetOnStartUp false;
                DT              1e-5;

                fvOptions
                {
                        IncrementTime
                        {
                                type            semiImplicitSource;
                                active          true;
                                selectionMode all;
                                volumeMode  specific;
                                sources
                                {
                                        injectionRateSuSp
                                        {
                                                AoA      (1 0);
                                        }
                                }
                        }
                }
        }

I am now getting the following error:
Code:

Selecting finite volume options model type semiImplicitSource
    Source: IncrementTime
    - selecting all cells
    - selected 1119784 cell(s) with volume 158.70844
[0]
[0]
[0] --> FOAM FATAL ERROR:
[0]
    request for regIOobject injectionRateSuSp from objectRegistry region0 failed
    available objects of type regIOobject are

Does anyone know what I need to put in place of "injectionRateSuSp"?

Or if there is a better method for calculating age of air?

Thanks in advance for any support.

Kind regards,
Ben

My 0/AoA file is:
Code:

FoamFile
{
    version    2.0;
    format      ascii;
    class      volScalarField;
        location    "0";
    object      AoA;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

dimensions      [0 0 1 0 0 0 0];

internalField  uniform 0;

boundaryField
{
    "xmin|xmax|ymin|ymax|zmax_north|zmax_south"
    {
        type            fixedValue;
        value          uniform 0;
    }
        "zmin|Ceiling|Floor|East_Wall|North_Wall|South_Wall|West_Wall|Computer|Person|zmax_ceiling"
    {
        type            zeroGradient;
    }
        Inlet
    {
        type            fixedValue;
        value          uniform 0;
    }
       
        #includeEtc "caseDicts/setConstraintTypes"
}

fvSolutions:
Code:

AoA
    {
        solver          smoothSolver;
        smoother        GaussSeidel;
        tolerance        1e-08;
        relTol          0.1;
        nsweep          1;
    }

fvSchemes:
Code:

div(phi,AoA) bounded Gauss upwind;

Tobermory December 7, 2020 17:46

There were some changes in v8 to the semiImplicit source term syntax. Check out https://openfoam.org/release/8/ and the example in https://github.com/OpenFOAM/OpenFOAM...7e9747fe696aeb. I am guessing that you need to change:
Code:

                                sources
                                {
                                        injectionRateSuSp
                                        {
                                                AoA      (1 0);
                                        }
                                }

to something like:

Code:

                                sources
                                {
                                        AoA
                                        {
                                                explicit 1;
                                                implicit 0;
                                        }
                                }

Good luck!

b.simpson December 10, 2020 09:27

Thanks
 
Thank you for your reply Tobermory.

The changes you suggested worked and my AoA is now working.

Many thanks.

Ben

HPE February 7, 2021 14:40

In case of anyone's interest,


Function object definitions for the `local mean age of air` and `normalised local mean age of air` metrics (where zero-value means fresh air):

Code:

scalarTransport1
{
    type            scalarTransport;
    libs            (solverFunctionObjects);
    field          LMA;
    schemesField    k;    // bounded Gauss limitedLinear 1;
    bounded01      false;
    alphaD          1;    // viscous contribution
    alphaDt        0;    // turbulent contribution
    // Adding fvOption source for residence time
    fvOptions
    {
        unitySource
        {
            type            scalarSemiImplicitSource;
            enabled        true;
            scalarSemiImplicitSourceCoeffs
            {
                selectionMode  all;
                volumeMode      specific;
                injectionRateSuSp
                {
                    LMA          (1 0);
                }
            }
        }
    }
    resetOnStartUp  false;
    timeStart      <timeStart>;
    executeControl  timeStep;
    executeInterval 1;
    writeControl    writeTime;
}

normalisedLocalMeanAge1
{
    type            reference;
    libs            (fieldFunctionObjects);
    field          LMA;
    result          nLMA;
    // normT = T / (V/Q)
    // normT: normalised local mean age of air
    // T: local mean age of air (Bartak et al., 2001, Eq. 1)
    // V: volume of air in the room [m3]
    // Q: volumetric flow rate through the inlet [m3/s]
    // V/Q: (estimated) mean age of fluid through a reference area (e.g. outlet)
    // scale = 1/(V/Q) = Q/V [1/s]
    scale          <Q/V>;
    offset          0;
    timeStart      <timeStart>;
    executeControl  writeTime;
    writeControl    writeTime;
}

The field `LMA` needs the initial/boundary condition file (e.g. in `0.orig/LMA`) and a setup in `fvSolution`:

Code:

/*--------------------------------*- C++ -*----------------------------------*\
| =========                |                                                |
| \\      /  F ield        | OpenFOAM: The Open Source CFD Toolbox          |
|  \\    /  O peration    | Version:  v2012                                |
|  \\  /    A nd          | Website:  www.openfoam.com                      |
|    \\/    M anipulation  |                                                |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version    2.0;
    format      ascii;
    class      volScalarField;
    object      LMA;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

dimensions      [0 0 0 0 0 0 0];

internalField  uniform 0;

boundaryField
{
    inlet
    {
        type            fixedValue;
        value          uniform 0;
    }

    outlet
    {
        type            inletOutlet;
        inletValue      uniform 0;
        value          uniform 0;
    }

    ".*"
    {
        type            zeroGradient;
    }

    #includeEtc "caseDicts/setConstraintTypes"
}


// ************************************************************************* //

Code:

solvers
{
    LMA
    {
        solver          PBiCGStab;
        preconditioner  DILU;
        tolerance      1e-8;
        relTol          0.01;
    }
}

relaxationFactors
{
    equations
    {
        LMA        0.7;
    }
}



All times are GMT -4. The time now is 12:14.