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/)
-   -   Strange high velocity in centrifugal pump simulation (https://www.cfd-online.com/Forums/openfoam-solving/138495-strange-high-velocity-centrifugal-pump-simulation.html)

huangxianbei July 4, 2014 22:29

Strange high velocity in centrifugal pump simulation
 
Hi,all:
I'm simulating a centrifugal pump's impeller with single channel, so I use SRFSimpleFoam to do a steadystate simulation. I refer to the settings of fvsolution and fvschemes http://www.cfd-online.com/Forums/ope...mparation.html
The operating condition is n=725rpm and flow rate is 3.06L/s , indicates 0.914m/s at inlet.
Here is a image of the pump
http://www.cfd-online.com/Forums/mem...5-10-27-09.png

huangxianbei July 4, 2014 22:32

here is the initial conditions
k
Code:

dimensions      [ 0 2 -2 0 0 0 0 ];

internalField  uniform 0.002;

boundaryField
{
    in
    {
        type            fixedValue;
        value          uniform 0.002;
    }
    out
    {
        type            zeroGradient;
    }
    part_1
    {
        type            kqRWallFunction;
        value          uniform 0.002;
    }
    hub
    {
        type            kqRWallFunction;
        value          uniform 0.002;
    }

shroud
    {
        type            kqRWallFunction;
        value          uniform 0.002;
    }
 bo
    {
        type            kqRWallFunction;
        value          uniform 0.002;
    }
 bi
    {
        type            kqRWallFunction;
        value          uniform 0.002;
    }
ss
    {
        type            kqRWallFunction;
        value          uniform 0.002;
    }
ps
    {
        type            kqRWallFunction;
        value          uniform 0.002;
    }

    peri1
    {
        type            cyclic;
        value          uniform 0.002;
    }
    peri2
    {
        type            cyclic;
        value          uniform 0.002;
    }
}

nut
Code:

dimensions      [ 0 2 -1 0 0 0 0 ];

internalField  uniform 0;

boundaryField
{
    in
    {
        type            calculated;
        value          uniform 0;
    }
    out
    {
        type            calculated;
        value          uniform 0;
    }


part_1
    {
        type            nutkWallFunction;
        U              Urel;
        value          uniform 0;
    }
    hub
    {
        type            nutkWallFunction;
        U              Urel;
        value          uniform 0;
    }

shroud
    {
        type            nutkWallFunction;
        U              Urel;
        value          uniform 0;
    }
 bo
    {
        type            nutkWallFunction;
        U              Urel;
        value          uniform 0;
    }
 bi
    {
        type            nutkWallFunction;
        U              Urel;
        value          uniform 0;
    }
ss
    {
      type            nutkWallFunction;
        U              Urel;
        value          uniform 0;
    }
ps
    {
        type            nutkWallFunction;
        U              Urel;
        value          uniform 0;
    }

    peri1
    {
        type            cyclic;
        value          uniform 0;
    }
    peri2
    {
        type            cyclic;
        value          uniform 0;
    }
}

omega
Code:

dimensions      [ 0 0 -1 0 0 0 0 ];

internalField  uniform 0.02;

boundaryField
{
    in
    {
        type            fixedValue;
        value          uniform 0.02;
    }
    out
    {
        type            zeroGradient;
    }
part_1
    {
        type            omegaWallFunction;
        U              Urel;
        value          uniform 0.02;
    }
    hub
    {
        type            omegaWallFunction;
        U              Urel;
        value          uniform 0.02;
    }

shroud
    {
        type            omegaWallFunction;
        U              Urel;
        value          uniform 0.02;
    }
 bo
    {
        type            omegaWallFunction;
        U              Urel;
        value          uniform 0.02;
    }
 bi
    {
        type            omegaWallFunction;
        U              Urel;
        value          uniform 0.02;
    }
ss
    {
      type            omegaWallFunction;
        U              Urel;
        value          uniform 0.02;
    }
ps
    {
        type            omegaWallFunction;
        U              Urel;
        value          uniform 0.02;
    }

    peri1
    {
        type            cyclic;
        value          uniform 0.02;
    }
    peri2
    {
        type            cyclic;
        value          uniform 0.02;
    }
}

p
Code:

dimensions      [ 0 2 -2 0 0 0 0 ];

internalField  uniform 0;

boundaryField
{
    in
    {
        type            zeroGradient;
    }
    out
    {
        type            fixedValue;
        value          uniform 0;
    }
    part_1
    {
        type            zeroGradient;
    }
    hub
    {
        type            zeroGradient;
    }

shroud
    {
        type            zeroGradient;
    }
 bo
    {
        type            zeroGradient;
    }
 bi
    {
        type            zeroGradient;
    }
ss
    {
      type            zeroGradient;
    }
ps
    {
        type            zeroGradient;
    }

    peri1
    {
        type            cyclic;
    }
    peri2
    {
        type            cyclic;
    }
}

urel
Code:

dimensions      [ 0 1 -1 0 0 0 0 ];

internalField  uniform ( 0 0 0 );

boundaryField
{
    in
    {
       
        type            SRFVelocity;     
        inletValue            uniform ( 0 0 0.914 );
        relative        no;
        value            uniform ( 0 0 0 );

    }
    out
    {
        type            zeroGradient;
    }
   

    part_1
    {
        type            fixedValue;
        value          uniform ( 0 0 0 );
    }
    hub
    {
      type            fixedValue;
        value          uniform ( 0 0 0 );
    }

shroud
    {
        type            fixedValue;
        value          uniform ( 0 0 0 );
    }
 bo
    {
        type            fixedValue;
        value          uniform ( 0 0 0 );
    }
 bi
    {
        type            fixedValue;
        value          uniform ( 0 0 0 );
    }
ss
    {
      type            fixedValue;
        value          uniform ( 0 0 0 );
    }
ps
    {
        type            fixedValue;
        value          uniform ( 0 0 0 );
    }
    peri1
    {
      type            cyclic;
    }
    peri2
    {
        type            cyclic;
    }
}


huangxianbei July 4, 2014 22:37

I use kOmegaSST,while I'm not sure how to set omega correctly, is there any formulation for estimation?

Here, go on with my simulation.
I set a monitor point close to the suction side of blade outlet to see if the calculation is steady, however, I found a rather strange phenomenon
Code:

#          x      -0.09319
#          y        0.015
#          z  -0.00582998
#        Time
          10            (708.153 -482.063 -84.2791)
          20            (-731.865 -971.44 361.995)
          30            (639.399 492.4 468.239)
          40            (-300.636 -1380.19 1012.41)
          50            (-194.88 -3082.72 -231.911)
          60            (485.299 -3518.82 -432.512)
          70            (1316 -4292.53 -538.085)
          80            (1928.73 -4083.86 -1172.74)
          90            (480.997 1319.28 -2470.87)
          100            (539.042 2127.23 957.49)
          110            (-5375.99 8878.74 2416.83)
          120            (-36226.3 16654.7 4366.7)
          130            (-98909.9 -4494.45 7662.75)
          140            (-142791 -46558.3 10644.8)
          150            (-284845 -147723 20756.2)
          160            (5.24698e+08 -2.85525e+07 -2.43624e+07)
          170            (6.99645e+09 -7.93281e+08 -3.94233e+08)
          180            (1.95323e+10 -3.43447e+09 -1.16038e+09)
          190            (-1.62621e+10 -1.86164e+09 7.33979e+07)
          200            (-2.3165e+10 -7.9908e+09 6.50242e+08)
          210            (3.09272e+10 -1.4602e+09 8.878e+08)
          220            (2.91008e+10 -2.58789e+10 -2.71254e+09)
          230            (-3.83297e+11 -1.56371e+11 3.0038e+10)
          240            (-6.79308e+11 -1.97788e+11 4.6686e+10)
          250            (-1.62821e+12 -7.48888e+11 1.02044e+11)
          260            (-3.34796e+12 -2.71107e+12 2.76611e+11)
          270            (-2.99721e+12 -4.7534e+12 5.17778e+11)
          280            (-1.35913e+13 -1.01207e+13 -1.61047e+12)
          290            (-2.26852e+13 -1.54068e+13 -6.05349e+11)
          300            (-2.34315e+13 -7.01585e+12 -2.15218e+12)
          310            (-7.66376e+12 4.36892e+12 -1.3551e+12)
          320            (-4.6655e+12 3.1273e+12 -1.12806e+12)
          330            (-4.17135e+12 3.8903e+12 -9.72603e+11)
          340            (-4.65089e+12 3.1797e+12 -1.08913e+12)
          350            (-6.25636e+12 1.81316e+12 -2.67658e+12)
          360            (-9.87292e+12 -8.66844e+11 -5.06165e+12)
          370            (-2.36429e+14 -2.11397e+14 -4.20645e+13)
          380            (-2.22321e+15 -2.59051e+15 -4.26863e+14)
          390            (-9.6626e+15 -1.05104e+16 -2.15745e+15)
          400            (-9.61184e+15 -1.18926e+16 -1.85749e+15)
          410            (-8.7657e+15 -9.30405e+15 -1.3393e+15)
          420            (-1.17965e+16 -7.26078e+15 -1.05772e+15)
          430            (-1.11844e+17 -1.40191e+17 4.95792e+15)
          440            (-2.0703e+17 -1.32351e+17 3.3317e+16)
          450            (-2.90402e+17 -1.03778e+17 3.86379e+16)
          460            (-5.23649e+17 -1.26167e+17 7.09394e+16)
          470            (-7.28269e+17 -1.90686e+17 9.7137e+16)
          480            (-4.82389e+17 -1.83384e+17 7.39091e+16)
          490            (-5.67745e+17 -9.90307e+16 6.05046e+16)
          500            (-7.40366e+17 1.39949e+17 3.92672e+16)
          510            (-1.71386e+18 4.54933e+17 -6.3212e+15)
          520            (-1.36598e+18 -6.88643e+16 -1.24439e+17)
          530            (-2.43043e+18 -2.19435e+17 -2.04526e+17)
          540            (-7.27807e+18 1.60216e+18 -4.18682e+17)
          550            (-4.83848e+19 -1.06007e+19 -1.18041e+19)
          560            (-2.62584e+20 -2.47255e+20 -8.68161e+19)
          570            (-4.31522e+20 -4.36771e+20 -1.06853e+20)

As seen, the Urel goes crazy along the calculation , it can be expected to overflow after certain steps

huangxianbei July 4, 2014 22:39

fvschemes
Code:

ddtSchemes
{
    default        steadyState;
}

gradSchemes
{
    default        Gauss linear;
   
   
}

divSchemes
{
    default        none;
    div(phi,U) Gauss SFCD;
div(phi,Urel) Gauss SFCD;
div(phi,k) Gauss linear;
div(phi,epsilon) Gauss linear;
div(phi,omega) Gauss linear;
div(phi,v2) Gauss limitedLinear 0.5;
div(phi,f) Gauss limitedLinear 0.5;
div(phi,R) Gauss linear;
div(R) Gauss linear;
div(phi,nuTilda) Gauss upwind;
div((nuEff*dev(T(grad(Urel))))) Gauss linear;
}

laplacianSchemes
{
    default        Gauss linear corrected;
laplacian(nuEff,U) Gauss linear corrected;
laplacian(nuEff,Urel) Gauss linear corrected;
laplacian((1|A(U)),p) Gauss linear corrected;
laplacian((1|A(Urel)),p) Gauss linear corrected;
laplacian(DkEff,k) Gauss linear corrected;
laplacian(DepsilonEff,epsilon) Gauss linear corrected;
laplacian(DomegaEff,omega) Gauss linear corrected;
laplacian(DREff,R) Gauss linear corrected;
laplacian(DnuTildaEff,nuTilda) Gauss linear corrected;
}

interpolationSchemes
{
    default        linear;
}

snGradSchemes
{
    default        corrected;
}

fluxRequired
{
    default        no;
    p              ;
}

fvsolution
Code:

solvers
{
    p
    {
        solver          PCG;
        preconditioner  DIC;
        tolerance      1e-06;
        relTol          0.01;
    }

    Urel
    {
        solver  smoothSolver;
        smoother GaussSeidel;
        nSweeps 2;
        tolerance 1e-7;
        relTol 0.01;
    }

    k
    {
        solver          PBiCG;
        preconditioner  DILU;
        tolerance      1e-07;
        relTol          0.01;
    }

   

    omega
    {
        solver          PBiCG;
        preconditioner  DILU;
        tolerance      1e-07;
        relTol          0.1;
    }

   
}

SIMPLE
{
nNonOrthogonalCorrectors 2;
}

relaxationFactors
{
    fields
    {
        p              0.3;
    }
    equations
    {
        Urel            0.4;
        k              0.4;
        omega          0.4;
    }
}


huangxianbei July 4, 2014 22:42

Can anyone give me some advice? I'm struggling for several days:mad:
By the way, the residual is also always among 0.3-0.5

huangxianbei July 5, 2014 02:56

hello,everyone, I tried another way, still, the problem stays the same. I think it's due to the periodic boundary, so I generate a full impeller's mesh(unstructured) and with only 3 boundaries: inlet, wall, outlet
All the setting are the same as before except without periodic boundaries, while, the velocity and pressure continues to grow and finally crashed.

I have already checked the mesh, it's ok, so there is no doubt about the geometry(for example, transform mesh with a wrong scale).The only problem my be the boundary conditions, the schemes used won't cause this unreal result , I think

tomf July 7, 2014 03:07

Hi,

I believe it is the schemes that cause your divergence. You use linear for the convection in the turbulent equations, but these have very high gradients near solid walls. This will lead to an unstable system. Also the SFCD scheme is not very stable. You could better use limitedLinear or perhaps even upwind for k or omega.

Regards,
Tom

huangxianbei July 7, 2014 08:04

Quote:

Originally Posted by tomf (Post 500349)
Hi,

I believe it is the schemes that cause your divergence. You use linear for the convection in the turbulent equations, but these have very high gradients near solid walls. This will lead to an unstable system. Also the SFCD scheme is not very stable. You could better use limitedLinear or perhaps even upwind for k or omega.

Regards,
Tom

Hi,Tom:
Thank you for your reply. I changed the scheme and solution as the mixer tutorial and use K-e instead, now the result is converged.
Xianbei

huangxianbei July 8, 2014 23:05

Quote:

Originally Posted by tomf (Post 500349)
Hi,

I believe it is the schemes that cause your divergence. You use linear for the convection in the turbulent equations, but these have very high gradients near solid walls. This will lead to an unstable system. Also the SFCD scheme is not very stable. You could better use limitedLinear or perhaps even upwind for k or omega.

Regards,
Tom

Hi,Tom:
I'm facing another problem:(
I want to do LES calculation with the same Mesh. In fact, after computing with RANS, the y+ turns out to be <2.5 around the blade, so it's fine enough to do LES. While, when I use SRFPimpleFoam to accomplish this, the Courant number goes large very quickly in a given timestep size(deltaT), while, if I use
Code:

adjustTimeStep  yes;

maxCo          50;

It can be seen that the deltaT goes smaller and smaller, one order smaller after one step(By the way, I mapped the RANS result as the initial condition)
All the boundary conditions are the same as in RANS except the new nuSgs,which is
Code:

dimensions      [ 0 2 -1 0 0 0 0 ];

internalField  uniform 0;

boundaryField
{
    bottomWall
    {
        type            zeroGradient;
    }
    topWall
    {
        type            zeroGradient;
    }
        part_1
    {
        type            zeroGradient;
    }
    in
    {
        type            calculated;
        value          uniform 0;
    }
    out
    {
        type            calculated;
        value          uniform 0;
    }
    ps
    {
        type            zeroGradient;
    }
    ss
    {
        type            zeroGradient;
    }
    bi
    {
        type            zeroGradient;
    }
    bo
    {
        type            zeroGradient;
    }
    shroud
    {
        type            zeroGradient;
    }
    hub
    {
        type            zeroGradient;
    }
    peri1
    {
        type            cyclic;
    }
    peri2
    {
        type            cyclic;
    }
}

The LES model used is oneEq, the ddtScheme is backward,and PIMPLE settings in fvsolution
Code:

PIMPLE
{
    nOuterCorrectors 2;
    nCorrectors    2;
    nNonOrthogonalCorrectors 2;
    pRefCell        0;
    pRefValue      0;
}

I'm considering that SIMPLE algorithm should be used in transient calculation. I tried to use SRFSimpleFoam with ddtScheme backward and find it won't diverge. While I'm not quite sure if SIMPLE can be used in unsteady calculation.
Any advice is highly appreciated

Xianbei

tomf July 9, 2014 03:02

Hello Xianbei,

I think using maxCo = 50 for LES may not be accurate enough. You will probably not resolve the smallest time scales.

That being said, using only two outer correctors and maxCo=50 is probably the cause of the divergence. I would suggest to reduce your maxCo and/or increase the number of outer correctors for the PIMPLE solver. You may also want to use residualControl for the convergence within a time step.

Regards,
Tom

huangxianbei July 9, 2014 09:32

Quote:

Originally Posted by tomf (Post 500689)
Hello Xianbei,

I think using maxCo = 50 for LES may not be accurate enough. You will probably not resolve the smallest time scales.

That being said, using only two outer correctors and maxCo=50 is probably the cause of the divergence. I would suggest to reduce your maxCo and/or increase the number of outer correctors for the PIMPLE solver. You may also want to use residualControl for the convergence within a time step.

Regards,
Tom

Hi,Tom:
Thank you very much. I searched a lot about the divergence in the forum and found it should be more in outer correctors for PIMPLE. I'll try and report the result soon.

Xianbei

huangxianbei July 10, 2014 03:44

Quote:

Originally Posted by tomf (Post 500689)
Hello Xianbei,

I think using maxCo = 50 for LES may not be accurate enough. You will probably not resolve the smallest time scales.

That being said, using only two outer correctors and maxCo=50 is probably the cause of the divergence. I would suggest to reduce your maxCo and/or increase the number of outer correctors for the PIMPLE solver. You may also want to use residualControl for the convergence within a time step.

Regards,
Tom

Hi,Tom:
I tried both your methods, use 20 outer correctors and residual control of p at 1e-2 and U 1e-5, also, the maxCo is limited to 5, the calculation is now proceeding well.Thank you very much:)
A quick question about the p residual: Is it acceptable for a residual of p to 1e-2. When setting this, the calculation can converge in 20 steps.

Xianbei

tomf July 10, 2014 04:18

Hi Xianbei,

Good to hear it is running.

1e-2 sounds like it is not enough, but you can only tell if you compare the results to experiment or literature. I would use at least 1e-4, but if 1e-2 is accurate enough than it is ok. I think that would be up to you to decide.

Kind regards,
Tom

huangxianbei July 10, 2014 07:08

Quote:

Originally Posted by tomf (Post 500894)
Hi Xianbei,

Good to hear it is running.

1e-2 sounds like it is not enough, but you can only tell if you compare the results to experiment or literature. I would use at least 1e-4, but if 1e-2 is accurate enough than it is ok. I think that would be up to you to decide.

Kind regards,
Tom

Hi,Tom:
Yes,it's do sounds not enough. I run another case which is 40 outercorrectors and p 1e-3, however, most steps take the largest 40 correctors, which means a tendency of not converge to 1e-3. So I'll keep the 1e-2 case and see if the result is acceptable(comparing with experiment).
Thank you.
Xianbei

huangxianbei July 10, 2014 21:50

Quote:

Originally Posted by tomf (Post 500894)
Hi Xianbei,

Good to hear it is running.

1e-2 sounds like it is not enough, but you can only tell if you compare the results to experiment or literature. I would use at least 1e-4, but if 1e-2 is accurate enough than it is ok. I think that would be up to you to decide.

Kind regards,
Tom

Hi,Tom:
Looking for help again:)
I find a unexpected fact that if I decompose the domain into more parts in order to calculate in parallel, the residual rises. For example, if I decompose it into 4 parts, the residual can be below 1e-5 of p ,with GAMG solver and 1 nNonorthogonalCorrector, while if I decompose it into 16, the solution can never get a residual below even 1e-4. It's quite unacceptable for me, if I want to improve the accuracy, the speed will slow down with only 4 processors:(.
Is there anything I can do to avoid this?

Xianbei

huangxianbei July 10, 2014 23:07

Quote:

Originally Posted by tomf (Post 500894)
Hi Xianbei,

I think that would be up to you to decide.

Kind regards,
Tom

Hi,Tom:
Sorry for annoying. I tried many times, and find that the residual do be influenced by the number of processors used. I use the scotch method to decompose. The conclusion I can draw is that for my case, the maximum number of processor is 8 to make sure the residual of p to be below 1e-5. However, I still insist OF can be paralleled with as many processors as possible without accuracy loss.

Xianbei

tomf July 11, 2014 04:30

Hi Xianbei,

No problem, I will only answer when I have time available and if someone else can join the discussion and help you, that would be great as well.

About the decomposition, I remember a discussion during an OpenFOAM workshop where something similar was shown. That is to say, depending on the number of cpus used, the instantaneous results for a particular case (LES as well) differed, but the statistical parameters (average forces, standard deviation, fluctuation scales etc.) where all in agreement. I believe the comment was that the solver tolerance (fvSolution) should have been reduced by 1 or 2 orders of magnitude to have a more consistent development of the flow between different decompositions.

The mathematical reason is that you do solve a slightly different matrix-vector system and the non-linearity of the equations can cause this effect.

So I can only suggest that you tighten the tolerance on your final subiteration to have less difference between runs. Otherwise you maybe get lower residuals with 15 cpus instead of 16.

Kind regards,
Tom

huangxianbei July 11, 2014 07:33

Quote:

Originally Posted by tomf (Post 501085)
Hi Xianbei,

No problem, I will only answer when I have time available and if someone else can join the discussion and help you, that would be great as well.

About the decomposition, I remember a discussion during an OpenFOAM workshop where something similar was shown. That is to say, depending on the number of cpus used, the instantaneous results for a particular case (LES as well) differed, but the statistical parameters (average forces, standard deviation, fluctuation scales etc.) where all in agreement. I believe the comment was that the solver tolerance (fvSolution) should have been reduced by 1 or 2 orders of magnitude to have a more consistent development of the flow between different decompositions.

The mathematical reason is that you do solve a slightly different matrix-vector system and the non-linearity of the equations can cause this effect.

So I can only suggest that you tighten the tolerance on your final subiteration to have less difference between runs. Otherwise you maybe get lower residuals with 15 cpus instead of 16.

Kind regards,
Tom

Hi,Tom:
Thank you for the details. You have helped me a lot, I really appreciate very much. Yes, maybe the result won't be affected much, however, only the residual is low enough can make one believe that the calculation is accurate enough. Thank you for your suggestion, I'll try it, if no further improvement is seen, I'll use 8 processor(Thanks God that the mesh size is not so big:), 0.3 million)

Xianbei

huangxianbei July 14, 2014 23:04

Quote:

Originally Posted by tomf (Post 501085)
Hi Xianbei,

No problem, I will only answer when I have time available and if someone else can join the discussion and help you, that would be great as well.

About the decomposition, I remember a discussion during an OpenFOAM workshop where something similar was shown. That is to say, depending on the number of cpus used, the instantaneous results for a particular case (LES as well) differed, but the statistical parameters (average forces, standard deviation, fluctuation scales etc.) where all in agreement. I believe the comment was that the solver tolerance (fvSolution) should have been reduced by 1 or 2 orders of magnitude to have a more consistent development of the flow between different decompositions.

The mathematical reason is that you do solve a slightly different matrix-vector system and the non-linearity of the equations can cause this effect.

So I can only suggest that you tighten the tolerance on your final subiteration to have less difference between runs. Otherwise you maybe get lower residuals with 15 cpus instead of 16.

Kind regards,
Tom

Hi,Tom:
I find another strange thing about the yPlus. When I use RANS model in the calculation, yPlusRAS returns the y+<5 on the walls which I have specified a small distance at the first layer of grid. I run the LES case for another 1 day and the flow is steady (the monitor velocity varies much less), then I run the yPlusLES and find that the yPlus returns is much bigger than the RANS case, the yPlus is almost twice of that!! Have you ever experience this?

Xianbei

tomf July 15, 2014 03:35

Hi,

I have not performed any real LES cases, just played around a bit, so I can not say I have seen something similar.

Tom


All times are GMT -4. The time now is 04:42.