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/)
-   -   Mean Age of Air (https://www.cfd-online.com/Forums/openfoam-post-processing/68300-mean-age-air.html)

Tobi July 20, 2012 16:20

2 Attachment(s)
Hi,

same solutions with simple and pimple.
Attachements

Toorop July 23, 2012 05:55

2 Attachment(s)
Hi,

unfortunately I have mixed up the correct solver with an old one with errors. A thunder storm killed the hard disk with the new, correct version and I posted my obsolete one - always back up, and correct old stuff as well ...

So the correct scalar equation with sources:
Code:

tmp<fvScalarMatrix> TEqn
    (
        fvm::ddt(T) + fvm::div(phi, T) - fvm::laplacian(DTEff, T) == sources(T)
    );

One have to add one more line to the solver:
Code:

sources.constrain(TEqn());
This function can be applied to set values in given cells - it has no effect on our setup, though, I added it for completeness.

Add sourcesProperties folder to your constant folder with entries:
Code:

age
{
    type            scalarExplicitSource;
    active          on;
    timeStart      0.0;
    duration        1.0;
    selectionMode  all;

    scalarExplicitSourceCoeffs
    {
        volumeMode        specific;
        injectionRate
        {
            T            1;
        }
    }
}

So the solver updates the T field, the value of time step is given to every cell. Check the release notes about field sources to get more information about this feature.

I double-checked this solution, and it gives the exact values of the solver that Andrew King has attached a while back. Andrew, thanks for your solution, quite useful!

About the term in the laplacian, I "borrowed" the idea from Daniel C, here's what he said about the issue. I set DT to zero since I don't want additional diffusion.

I don't know if this method can be used in a steady-state case since there's no explicit time stepping. But if the solution matches the transient version more or less than it can be valid.

WARNING: I don't validated any result to real world tests. Feel free to correct the solver, add your thoughts, thank you!

About your question:
if the flow is laminar, incompressible and you now the inlet properties (velocity / flow rate), I think it's just some basic calculations and it depends on the geometry of the diffusor. When the flow is turbulent I don't know how to calculate it, maybe there's some good approximations out there.

immortality April 23, 2013 13:07

Hi
also it seems a dead thread.but I hope not and propound my question!
I have a inflow patch and need a lot to know if the inflowing fluid has reached to outflow patch or not.
preferably by rhoPimpleFoam.
both the fluid that rest in the channel at first(internalField) and the fluid is entering are the same (air) but entering air has more pressure and temperature.
is it possible to track entering air particles through the unsteady case I have?
to give more information if is important to answer the case is a rectangular tube with one inflow and one outflow patch.
how to modify the files in this thread in my case?

Tobi April 23, 2013 13:36

Quote:

Originally Posted by immortality (Post 422671)
Hi
also it seems a dead thread.but I hope not and propound my question!
I have a inflow patch and need a lot to know if the inflowing fluid has reached to outflow patch or not.
preferably by rhoPimpleFoam.
both the fluid that rest in the channel at first(internalField) and the fluid is entering are the same (air) but entering air has more pressure and temperature.
is it possible to track entering air particles through the unsteady case I have?
to give more information if is important to answer the case is a rectangular tube with one inflow and one outflow patch.
how to modify the files in this thread in my case?

Hi,

you can use implement a conserved scalar transport equation for that!
At the beginning your scalar is 1 at the inlet and the rest is zero.

While simulating your scalar is transported through the domain. In your case you should only use the transport due to convection and so you can have a look when the scalar reaches the outlet!

Hope its helpful.
Tobi

immortality April 23, 2013 13:44

Hi Tobias
thanks for rapid reply!
I haven't modified a solver to solve for a new equation.
then could you please guide me.
I've added this in createFields:
Code:

volScalarField age
    (
        IOobject
        (
            "age",
            runTime.timeName(),
            mesh,
            IOobject::MUST_READ,
            IOobject::AUTO_WRITE
        ),
        mesh
    );

is this the only change should I do in createFiels.H or some other lines?

in the folder of solver I have to add this:
Code:

// --- Scalar Transport
        volScalarField DTEff = DT+turbulence->muEff()/0.7;
        tmp<fvScalarMatrix> AgeEqn
        (
        fvm::ddt(rho,Age) + fvm::div(phi, Age)  == dimensionedScalar("AgeSource", Age.dimensions()*dimensionSet(1,-3,-1,0,0), 1) //- fvm::laplacian(DTEff, Age)
        );
       
        AgeEqn().relax();
       
        sources.constrain(AgeEqn());
       
        AgeEqn().solve();

I changed all T's to Age.and as you said to me should delete the laplacian term also,correct?
and what should be assign for DT?and also change nut to mut(since my case is compressible,unsteady) correct?
(does it work if I switch to a turbulent case too?)

Tobi April 23, 2013 16:40

Hi,
have a look at my solver: https://github.com/shor-ty/scalarRhoSimpleFoam

Then use the scalarEqn.H and the entry in the createFields.H for your own pimple solver!

If there are any problems ask me!

Have a nice evening,
Tobi

immortality April 24, 2013 07:23

thanks.
1)I can't download.this error occurs:
Code:

https://github.com/shor-ty/scalarRhoSimpleFoam.git
bash: https://github.com/shor-ty/scalarRhoSimpleFoam.git: No such file or directory

2)and also why ddt isn't there in equation?
Code:

    // --- Scalar transport


    tmp<fvScalarMatrix> SEqn
    (
      (
            fvm::div(phi, S)
          - fvm::Sp(fvc::div(phi), S)
              - fvm::laplacian(turbulence->muEff(), S)
          )
    );


    SEqn().relax();   
    SEqn().solve(mesh.solver("S"));

3)how should I modify it to my unsteady compressible problem you know?
should I delete laplacian term totally?why you have not done this to delete laplacian term?then how can account for
turbulence?
4)what does this term is added?what does do?
Code:

- fvm::Sp(fvc::div(phi), S)

immortality April 24, 2013 13:47

hi
could you please help me with questions?:)

Tobi April 24, 2013 14:22

Quote:

Originally Posted by immortality (Post 422923)
hi
could you please help me with questions?:)

Hi,

i was at work till now.

1. on my computer the github link is working!
2. you have to set ddt into that equation; in my case I used the SIMPLE algo (steady-state; ddt = 0)
3. let the diffusion term in your case
4. thats a numerical trick for stabilisation

Tobi April 24, 2013 14:26

git clone https://github.com/shor-ty/scalarRhoSimpleFoam.git

immortality April 24, 2013 17:30

thanks.then can you please give me a more description (or there is a source and internet link for that) about the term you has added for more stability.because may it be necessary to give some description in my thesis about each of terms in equations.

Tobi April 25, 2013 00:42

Quote:

Originally Posted by immortality (Post 422952)
thanks.then can you please give me a more description (or there is a source and internet link for that) about the term you has added for more stability.because may it be necessary to give some description in my thesis about each of terms in equations.

I wrote a PDF and posted it here ... but no time for searching at the moment.

immortality April 25, 2013 02:01

ok.thank you.that would be nice.then i wait untill you come back.
and what does that expression argument in parenthesis in solve() function mean?is that for cases we have moving mesh?
Code:

SEqn().solve(mesh.solver("S"));

immortality April 25, 2013 07:43

and also in rhoPimpleFoam solver below is the position of gasEquation.H suitable(several times it solves) or it is better to be after pimple.loop() to solve one time each time step?
Code:

int main(int argc, char *argv[])
{
    #include "setRootCase.H"
    #include "createTime.H"
    #include "createMesh.H"

    pimpleControl pimple(mesh);

    #include "createFields.H"
    #include "createFvOptions.H"
    #include "initContinuityErrs.H"

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

    Info<< "\nStarting time loop\n" << endl;

    while (runTime.run())
    {
        #include "readTimeControls.H"
        #include "compressibleCourantNo.H"
        #include "setDeltaT.H"

        runTime++;

        Info<< "Time = " << runTime.timeName() << nl << endl;

        if (pimple.nCorrPIMPLE() <= 1)
        {
            #include "rhoEqn.H"
        }

        // --- Pressure-velocity PIMPLE corrector loop
        while (pimple.loop())
        {
            #include "UEqn.H"
            #include "EEqn.H"

            // --- Pressure corrector loop
            while (pimple.correct())
            {
                #include "pEqn.H"
            }

            if (pimple.turbCorr())
            {
                turbulence->correct();
            }

              #include "gasEqn.H"
        }
        //Cp.write();
        runTime.write();

        Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
            << "  ClockTime = " << runTime.elapsedClockTime() << " s"
            << nl << endl;
    }

    Info<< "End\n" << endl;

    return 0;
}

thanks.

immortality April 25, 2013 10:12

1 Attachment(s)
hello again
excuse me for questions.
I run the case but gas(scalar value) is not between 0 and 1 as the snapshot.
how to resolve?
thanks.

Tobi April 25, 2013 11:17

Quote:

Originally Posted by immortality (Post 423138)
hello again
excuse me for questions.
I run the case but gas(scalar value) is not between 0 and 1 as the snapshot.
how to resolve?
thanks.

i dont know what you mean with gas. Is that your new scalar?

http://www.cfd-online.com/Forums/ope...tml#post407482

immortality April 25, 2013 11:57

yes.at last i put the name gas in return of S.because air flowing in has a higher pressure and temperature than air in domain.shouln't it be between 0 and 1

Tobi April 25, 2013 12:24

The value of your scalar depend on yuor BC settings!

immortality April 25, 2013 12:32

i have set it 1 for inflow and 0 for initial condition as you told.
Maybe because my case is compressible a change should be done.
The dimension is zero[0 0 0 0 0 0].is it correct?

Tobi April 25, 2013 13:41

I am a bit confused couse the tutorial added in my git repo is not the one i build for that. Its the CO/H2/N2 mesh :D

well maybe I have time to resolve that mesh but first I reset my computer for Arch Linux


All times are GMT -4. The time now is 11:03.