CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM (https://www.cfd-online.com/Forums/openfoam/)
-   -   steady state version of twophaseeulerfoam (https://www.cfd-online.com/Forums/openfoam/93319-steady-state-version-twophaseeulerfoam.html)

miles_davis October 11, 2011 16:59

steady state version of twophaseeulerfoam
 
Hi,

I am using the twophaseeeulerfoam solver to simulate air bubbles in water.
I want to have a steady state version of the solver.

Solution1
According to what I have read, I should first try to under-relax the resolution and raise the time step.
I do not understand why? In fact I do not understand the role of under-relaxtion factor in an unsteady solver.
Does anyone have a point on the subject or some documentation of the relaxation process in Openfoam (and in general, reading is never bad!)? This could help me to understand.

Solution2
On the other hand if I want to change the solver to be steady witch library I was thinking to do so
- Remove time dependence in the solver
- Change the vel-press scheme (I was thinking using simple scheme)
- Modify the fvsol and fvscheme dict.
Does this seem correct?
Does this seem an affordable task for an OF newbee?

Thanks for your opinions and help.

Regards,

miles_davis October 13, 2011 13:13

Hi

I have tried the first solution but it seems that putting a subdict for relaxation at the end of fvSolution has no effect.
I am not sure if it is taken into account.

So I switched to the coding of a steady twophaseeluerfoam solver.
I am tryning to understand how the solver is coded.


I have a few questions and my sorry in advance if it seems to easy but my C++ is very bad.
1.fvVectorMatrix UbEqn(Ub, Ub.dimensions()*dimVol/dimTime)
Is it possible to modify the definition of fvVectorMatrix like that:
fvVectorMatrix UbEqn(Ub, Ub.dimensions())


  1. volScalarField rUaA(1.0/UaEqn.A())
I do not understand what is done here.
What is the definition and the purpose of rUaA and UaEqn.A() ?
Is this related to the first guess on momentum equation in the PIMPLE algorithm?


  1. Ua = rUaA*UaEqn.H()
Same question for UaEqn.H()


4. DDTU.h
What is the purpose of having a special file for the equation on UA and UB?
Can it be included in my SIMPLE loop -since I will move the scheme from pimple to simple.


Thanks for any help.


Regards,

miles_davis October 13, 2011 13:21

for the moderator: I have placed this thread in a more apropriate forum. But i did not manage to delete it.
Sorry for that.

regards

alberto October 14, 2011 20:50

Quote:

Originally Posted by miles_davis (Post 327539)
Hi,

I am using the twophaseeeulerfoam solver to simulate air bubbles in water.
I want to have a steady state version of the solver.

Two-phase flows are intrinsically unsteady. In most of the cases a steady state solution does not exist, and you would end up with a wrong result.

In OpenFOAM 2.0.x, the PIMPLE algorithm is used in twoPhaseEulerFoam. If you really have a steady-state in your system, relaxing and increasing the time step should work.

First however you have to answer the question "does a steady state exist?". If the answer is "no", the only solution is to perform the simulation dynamically, and average over time.

Best,

miles_davis October 15, 2011 19:49

Hi,
Thanks for your help as usual !
I agree with you on the difficulty to consider a real steady state in a multiphase flow.
Nevertheless, I know the system I want to simulate has already been simulated on FLUENT with the steady state euler/euler solver.
Concerning the possibility of including under relaxation to increase my timestep I have two questions please:
1. My actual time step is 0.0002s. What can I expect with underrelaxation? To multiply the timestepd by 2 or 5 or more? I know this question may seem silly.
2. Can you please give me an example of the subdict I need to ad in fvScheme dict. I have tried it before but I think my syntax was bad.
Thanks a lot for you help.

Miles

P.S.: I do not understand the role of underrelaxation in a unsteady simulation… It’s a bit confusing.

alberto October 15, 2011 19:58

Quote:

Originally Posted by miles_davis (Post 328061)
Hi,
Thanks for your help as usual !
I agree with you on the difficulty to consider a real steady state in a multiphase flow.
Nevertheless, I know the system I want to simulate has already been simulated on FLUENT with the steady state euler/euler solver.



It this the case of the air injection in liquid?

Quote:

Concerning the possibility of including under relaxation to increase my timestep I have two questions please:
1. My actual time step is 0.0002s. What can I expect with underrelaxation? To multiply the timestepd by 2 or 5 or more? I know this question may seem silly.



It depends on the system. I would say the rule of thumb is "as much as it is possible without having instabilities". The multi-fluid equations are a pain to solve due to their mathematical nature. Steady-state solvers rely on a set of tricks to stabilize the solution (local relaxation, heavy global relaxation, ...).

2.
Quote:

Can you please give me an example of the subdict I need to ad in fvScheme dict. I have tried it before but I think my syntax was bad.



Code:

relaxationFactors
{
    Ua              0.7;
    Ub              0.7;
    p                0.3;
    alpha          0.2;
    Theta        0.2;
    k                0.4;
    epsilon        0.4;
}

Quote:

P.S.: I do not understand the role of underrelaxation in a unsteady simulation… It’s a bit confusing.


It is exactly the same as in the steady-state one: it slows down the changes in the solution while you iterate to find the converged solution for that time-step. To have time accuracy you should not relax at the last iteration (OF takes care of this).

Best,

miles_davis October 16, 2011 13:38

Hi,

This is indeed the case of the air injected in the water box I have posted earlier.
A question about the relaxation script you have posted (thanks for that BTW):
Do I have to put the script inside the PIMPLE subdict
i.e
Code:

PIMPLE
{....
relaxationFactors
{
Ua 0.7;
Ub 0.7;
p 0.3;
alpha 0.2;
}
}

Or in a separated subdict i.e.
Code:

PIMPLE
{

}
relaxationFactors
{
Ua 0.7;
Ub 0.7;
p 0.3;
alpha 0.2;
}

Thanks again.

Sydney

alberto October 16, 2011 20:10

Second choice :-)

miles_davis October 17, 2011 03:21

Thanks alberto.
The strange thing is I did not get any error message with the first syntax!

Anyway I have tried the to under-relax. I am still not abble to raise the time step. I still cannot go further than 0.001s.

My fv scheme and fvsolutions look like this.
If you have the kindness to tell me if they seem correct to you I would appreciate.

Thanks for your help anyway.

Miles

Code:

/*--------------------------------*- C++ -*----------------------------------*\
| =========                |                                                |
| \\      /  F ield        | OpenFOAM: The Open Source CFD Toolbox          |
|  \\    /  O peration    | Version:  2.0.1                                |
|  \\  /    A nd          | Web:      www.OpenFOAM.com                      |
|    \\/    M anipulation  |                                                |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version    2.0;
    format      ascii;
    class      dictionary;
    location    "system";
    object      fvSolution;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

solvers
{
    p
    {
        solver          GAMG;
        tolerance      1e-08;
        relTol          0.01;
        smoother        DIC;
        nPreSweeps      0;
        nPostSweeps    2;
        nFinestSweeps  2;
        cacheAgglomeration true;
        nCellsInCoarsestLevel 10;
        agglomerator    faceAreaPair;
        mergeLevels    1;
    }

    pFinal
    {
        $p;
        tolerance      1e-08;
        relTol          0;
    }

    "(k|epsilon)"
    {
        solver          PBiCG;
        preconditioner  DILU;
        tolerance      1e-05;
        relTol          0.1;
    }

    "(k|epsilon)Final"
    {
        solver          PBiCG;
        preconditioner  DILU;
        tolerance      1e-05;
        relTol          0;
    }

    alpha
    {
        solver          PBiCG;
        preconditioner  DILU;
        tolerance      1e-10;
        relTol          0.1;
    }

    alphaFinal
    {
        solver          PBiCG;
        preconditioner  DILU;
        tolerance      1e-10;
        relTol          0;
    }
}

PIMPLE
{
    nCorrectors    2;
    nNonOrthogonalCorrectors 4;
    nAlphaCorr      2;
    correctAlpha    yes;
/*pRefPoint (0.0 0.0 0);
pRefValue 20000;*/
}

relaxationFactors
{
  Ua              0.1;
  Ub              0.1;
  p                0.1;
  alpha          0.1;
  Theta        0.1;
  k                0.1;
  epsilon        0.1;
}

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


Code:

/*--------------------------------*- C++ -*----------------------------------*\
| =========                |                                                |
| \\      /  F ield        | OpenFOAM: The Open Source CFD Toolbox          |
|  \\    /  O peration    | Version:  2.0.1                                |
|  \\  /    A nd          | Web:      www.OpenFOAM.com                      |
|    \\/    M anipulation  |                                                |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version    2.0;
    format      ascii;
    class      dictionary;
    location    "system";
    object      fvSchemes;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

ddtSchemes
{
    default        Euler;
}

gradSchemes
{
    default        Gauss linear;
}

divSchemes
{
    default        none;
    div(phia,Ua)    Gauss limitedLinearV 1;
    div(phib,Ub)    Gauss limitedLinearV 1;
    div(phib,k)    Gauss limitedLinear 1;
    div(phib,epsilon) Gauss limitedLinear 1;
    div(phi,alpha)  Gauss limitedLinear01 1;
    div(phir,alpha) Gauss limitedLinear01 1;
    div(phi,Theta)  Gauss limitedLinear 1;
    div(Rca)        Gauss linear;
    div(Rcb)        Gauss linear;
}

laplacianSchemes
{
    default        none;
    laplacian(nuEffa,Ua) Gauss linear corrected;
    laplacian(nuEffb,Ub) Gauss linear corrected;
    laplacian((rho*(1|A(U))),p) Gauss linear corrected;
    laplacian(alphaPpMag,alpha) Gauss linear corrected;
    laplacian(Galphaf,alpha) Gauss linear corrected;
    laplacian(DkEff,k) Gauss linear corrected;
    laplacian(DepsilonEff,epsilon) Gauss linear corrected;
    laplacian(kappa,Theta) Gauss linear corrected;
}

interpolationSchemes
{
    default        linear;
}

snGradSchemes
{
    default        corrected;
}

fluxRequired
{
    default        no;
    p              ;
}


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


Aurelien Thinat October 24, 2011 09:25

Hi Miles,

Your time step will always be bounded by the max courant number in your domain : the faster the bubbles are, the smaller your timestep will be (on a same mesh). You can try to change the grid if you want to get a higher time step.

alberto October 26, 2011 11:07

Quote:

Originally Posted by Aurelien Thinat (Post 329179)
Hi Miles,

Your time step will always be bounded by the max courant number in your domain : the faster the bubbles are, the smaller your timestep will be (on a same mesh). You can try to change the grid if you want to get a higher time step.

Well, in theory this is not true, since he is using an implicit method, and an iterative method with sub-iterations. However there are other limiting factors, like the time-scale of the momentum transfer between the phases, for example, which will keep the time step small.

Best,

Aurelien Thinat October 26, 2011 11:20

Hi Alberto,

I was looking at bubbleFoam and on the few tests I ran, I had to decrease the time step to keep the courant number under ~0,4.
With any higher value, I got some crashs : (

Aurélien

alberto October 26, 2011 11:38

What Courant number was controlling the time-step? One of the phases or the one depending on Ur?

Best,

Aurelien Thinat October 27, 2011 04:08

I am talking about the "Max Ur Courant Number". The "Courant Number mean" value is 10 times less than the Ur based one (at least on my case).

alberto October 27, 2011 14:27

Yes, that's usually the problem. I implemented the Partial Elimination Algorithm (PEA) of Spalding to fix that, and it improves things quite a bit.

Aurelien Thinat November 2, 2011 03:28

Hi Alberto,

Sorry to ask you that on this thread.

I'm trying to add a source term for the dispersed phase equation in bubbleFoam (or twoPhaseEulerFoam) and I have a problem with my pressure equation. I don't understand how the code is handling the surface projection of the continuity equation to get the pressure equation.

I have already opened a thread at this URL :
http://www.cfd-online.com/Forums/ope...tml#post329169

If you have few time for some help, it would be really welcome.

Thank you.

shanvach February 6, 2019 16:26

Converting twoPhaseEulerFoam into steady state solver using fvSchemes
 
Hi all,

I have been following this thread and I would like to ask if there is another way to convert twoPhaseEulerFoam into a steady state solver. fvSchemes has a option called ddt schemes.
Code:

ddtSchemes
{
    default        steadyState;
}

Using steadyState as a ddt scheme basically mean that the ddt term in the equations is zero. In that situation how are the rest of the terms of the equations calculated and would that constitute a steady state solver or can certain additions be done to make it a steady state solver?

Thanks and Regards,
Shantanu

geth03 March 31, 2020 05:36

from my understanding those multiphase solvers use the transient PIMPLE solver. before running a simulation the solver will check controlDict if PIMPLE is defined, otherwise it won't work. defining a steadyState scheme for ddtSchemes won't help much i guess. At least it didn't work for me.


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