CFD Online Logo CFD Online URL
www.cfd-online.com
[Sponsors]
Home > Forums > OpenFOAM Running, Solving & CFD

Steady State Centrifugal Compressor Segment

Register Blogs Members List Search Today's Posts Mark Forums Read

Reply
 
LinkBack Thread Tools Display Modes
Old   June 16, 2014, 04:46
Default Steady State Centrifugal Compressor Segment
  #1
Member
 
Victor-S. Eberhart
Join Date: Oct 2011
Posts: 32
Rep Power: 5
vigges is on a distinguished road
Hello everyone,

after a few hours of extensive forum research regarding a steady-state centrifugal compressor passage model simulation and due to the fact that this topic might be interesting for some other users as well, I decided to open a new thread.

To begin with, there is a lot of information on transient full model simulations and it seems to be straight-forward, however, this approach is not very efficient when it comes to optimizing preliminary compressor designs due to the huge mesh sizes.

So, I thought about running a steady-state simulation based on a segment of the full model domain. This way, less efficient designs can be sorted out before running time consuming transient full model simulations. I know from a friend that this method works sufficiently well in CFX, but the real challenge, I think, would be to do this using OpenFOAM.

The segment consists of 3 different cell zones: unvaned inducer - impeller - unvaned diffuser (see fig. 1). The cell zones are "connected" by a pair of interface patches, respectively (orange) and bounded by periodic patches (blue). In order to account for tip gap loss, there also are two patches on top of the main blade (pink). For the sake of completeness, the axial inlet and radial outlet are marked by the green areas.

In a first attempt, I'd like to use the official OF-2.3.x version and its functionality. Basically, it's an outlet mass flow driven simulation with a total pressure and total temperature boundary condition at the inlet patch.

The following is a summary of the numerical setup for the rhoSimpleFoam simulation:

boundary
Code:
    IN
    {
        type            patch;
    }
    OUT
    {
        type            patch;
    }
    HUB
    {
        type            wall;
    }
    SHROUD
    {
        type            wall;
    }

    // example for orange patch
    AMI_INTERFACE_6_1
    {
        type            cyclicAMI;
        inGroups        1(cyclicAMI);
        nFaces          2304;
        startFace       2176992;
        matchTolerance  0.001;
        transform       noOrdering;
        neighbourPatch  AMI_INTERFACE_6_2;
    }

    // example for blue patch
    AMI_PERIODIC_3_1
    {
        type            cyclicAMI;
        inGroups        1(cyclicAMI);
        nFaces          1344;
        startFace       2172576;
        matchTolerance  0.001;
        transform       rotational;
        neighbourPatch  AMI_PERIODIC_3_2;
        rotationAxis    (0 0 1);
        rotationCentre  (0 0 0);
        rotationAngle   40;          // negative value for neighbourPatch entry
    }   
    
    // example for pink patch
    AMI_INTERFACE_4_1 
    {
        type            cyclicAMI;
        inGroups        1(cyclicAMI);
        nFaces          1152;
        startFace       2173920;
        matchTolerance  0.001;
        transform       noOrdering;
        neighbourPatch  AMI_INTERFACE_4_2;
    }
alphat
Code:
internalField   uniform 1;

boundaryField
{
    IN
    {
        type            calculated;
    }
    OUT
    {
        type            calculated;
    }
    ".*"
    {
        type            compressible::alphatWallFunction;
        value           uniform 0;
    }
    "AMI.*"
    {
        type            cyclicAMI;
    }
}
k
Code:
internalField   uniform 1;

boundaryField
{
    IN
    {
        type            turbulentIntensityKineticEnergyInlet;
        intensity       0.05;
        U               U;
        phi             phi;
        value           uniform 1;
    }
    OUT
    {
        type            zeroGradient;
    }
    ".*"
    {
        type            compressible::kqRWallFunction;
        value           uniform 0;
    }
    "AMI.*"
    {
        type            cyclicAMI;	
    }
}
mut
Code:
internalField   uniform 0;

boundaryField
{
    IN
    {
        type            calculated;
    }
    OUT
    {
        type            calculated;
    }
    ".*"
    {
        type            mutLowReWallFunction;
        value           uniform 0;
    }
    "AMI.*"
    {
        type            cyclicAMI;
    }
}
omega
Code:
internalField   uniform 20000;

boundaryField
{
    IN
    {
        type            fixedValue;
        value           uniform 3.5;
    }
    OUT
    {
        type            zeroGradient;
    }
    ".*"
    {
        type            compressible::omegaWallFunction;
        value           uniform 20000;
        Cmu             0.09;
        kappa           0.41;
        E               9.8;
        beta1           0.075;
    }
    "AMI.*"
    {
        type            cyclicAMI;
    }
}
p
Code:
internalField   uniform 101000;

boundaryField
{
    IN
    {
          type            totalPressure;
          p0              uniform 101300;
          phi             phi;
          rho             rho;
          psi             none;
          gamma           1.4;
    }
    OUT
    {
        type            zeroGradient;
    }
    ".*"
    {
        type            zeroGradient;
    }
    "AMI.*"
    {
        type            cyclicAMI;
    }
}
T
Code:
internalField   uniform 288;

boundaryField
{
    IN
    {
        type            totalTemperature;
        T0              uniform 293;
        gamma           1.4;
        phi             phi;
        U               U;
    }
    OUT
    {
	type		zeroGradient;
    }    
    ".*"
    {
        type            zeroGradient;
    }
    "AMI.*"
    {
        type            cyclicAMI;
    }
}
U
Code:
internalField   uniform (0 0 0);

boundaryField
{
    IN
    {
        type            zeroGradient;
    }
    OUT
    {
        type            flowRateInletVelocity;
 	rhoInlet        1.2;
        massFlowRate    table
        (
            (0.0        0.0)
            (200       -0.001)
        );
        value           uniform (0 0 0);
    }    
    ".*"
    {
        type            fixedValue;
        value		uniform (0 0 0);
    }
    "AMI.*"
    {
        type            cyclicAMI;
    }
}
fvOptions
Code:
MRF1
{
    type            MRFSource;
    active          yes;
    selectionMode   cellZone;
    cellZone        IMPELLER;

    MRFSourceCoeffs
    {
        nonRotatingPatches 
        (
            SHROUD_IMPELLER 
            // all cyclicAMIs except for the INDUCER and DIFFUSER periodics 
            AMI_INTERFACE_6_1 // orange 
            AMI_INTERFACE_6_2 // orange 
            AMI_INTERFACE_7_1 // orange 
            AMI_INTERFACE_7_2 // orange 
            AMI_PERIODIC_2_1  // blue   
            AMI_PERIODIC_2_2  // blue   
            AMI_INTERFACE_4_1 // pink   
            AMI_INTERFACE_4_2 // pink   

	);

        origin    (0 0 0);
        axis      (0 0 1);
        omega     table        // linear ramping of 
        (                      // rotational speed
            (0.0        0.0)   // up to nominal speed
            (200      20000)   // during the first 200
            (10000    20000)   // iterations
        );
    }
}
fvSolution
Code:
solvers
{
    rho
    {
        solver          PCG;
        preconditioner  DIC;
        tolerance       1e-5;
        relTol          0.1;
    }

    rhoFinal
    {
        $rho;
        tolerance       1e-5;
        relTol          0;
    }

    U
    {
        solver          smoothSolver;
        smoother        symGaussSeidel;
        tolerance       1e-5;
        relTol          0.1;
    }

    UFinal
    {
        solver          smoothSolver;
        smoother        symGaussSeidel;
        tolerance       1e-5;
        relTol          0;
    }

    eFinal
    {
        solver          smoothSolver;
        smoother        symGaussSeidel;
        tolerance       1e-6;
        relTol          0;
    }

    p
    {
        solver          GAMG;
        tolerance       1e-6;
        relTol          0.05;
        smoother        GaussSeidel;
        cacheAgglomeration true;
        nCellsInCoarsestLevel 20;
        agglomerator    faceAreaPair;
        mergeLevels     1;
    }

    pFinal
    {
        solver          GAMG;
        tolerance       1e-6;
        relTol          0;
        smoother        GaussSeidel;
        cacheAgglomeration true;
        nCellsInCoarsestLevel 20;
        agglomerator    faceAreaPair;
        mergeLevels     1;
    }

    "(e|U|h|k|omega)"
    {
        solver          smoothSolver;
        smoother        symGaussSeidel;
        tolerance       1e-6;
        relTol          0;
    }

    "(e|U|h|k|omega)Final"
    {
        $U;
        tolerance       1e-6;
        relTol          0;
    }
}

SIMPLE
{
    nOuterCorrectors 1;
    nCorrectors     2;
    nNonOrthogonalCorrectors 4;
    momentumPredictor yes;
    rhoMin          rhoMin [ 1 -3 0 0 0 ] 1.0;
    rhoMax          rhoMax [ 1 -3 0 0 0 ] 2.0;
    pRefCell        0;
    pRefValue       1e5;
}

relaxationFactors
{
    fields
    {
    }
    equations
    {
        "U.*"           0.5;
        "e.*"           0.9;
        "k.*"           0.5;
        "omega.*"       0.5;
    }
}
fvSchemes
Code:
ddtSchemes
{
    default         steadyState;
}

gradSchemes
{
    default         faceMDLimited Gauss linear 1.0;
}

divSchemes
{
    default                             none;
    div(phi,U)                          bounded Gauss limitedLinearV 0.8; 
    div(phi,e)                          bounded Gauss limitedLinear 0.8; 
    div(phi,k)                          bounded Gauss limitedLinear 0.8; 
    div(phi,omega)                      bounded Gauss limitedLinear 0.8; 
    div(phi,Ekp)                        bounded Gauss limitedLinear 0.8; 
    div(phid,p)                         bounded Gauss limitedLinear 0.8; 
    div((muEff*dev2(T(grad(U)))))       Gauss linear;
}

laplacianSchemes
{
    default         Gauss linear corrected;
}

interpolationSchemes
{
    default         linear;
}

snGradSchemes
{
    default         corrected;
}

fluxRequired
{
    default         no;
    p;
}

The simulation is running for a few iterations, but then, blows up due to a "Maximum number of iterations exceeded" error.

log
Code:
Create time

Create mesh for time = 0


SIMPLE: no convergence criteria found. Calculations will run for 10000 steps.

Reading thermophysical properties

Selecting thermodynamics package 
{
    type            hePsiThermo;
    mixture         pureMixture;
    transport       const;
    thermo          hConst;
    equationOfState perfectGas;
    specie          specie;
    energy          sensibleInternalEnergy;
}

AMI: Creating addressing and weights between 1152 source faces and 1152 target faces
AMI: Patch source sum(weights) min/max/average = 1, 1, 1
AMI: Patch target sum(weights) min/max/average = 0.999999, 1, 1
AMI: Creating addressing and weights between 4032 source faces and 4032 target faces
AMI: Patch source sum(weights) min/max/average = 1, 1.00074, 1.00014
AMI: Patch target sum(weights) min/max/average = 1, 1.00074, 1.00014
AMI: Creating addressing and weights between 1344 source faces and 1344 target faces
AMI: Patch source sum(weights) min/max/average = 1, 1.03734, 1.00162
AMI: Patch target sum(weights) min/max/average = 0.999999, 1.03734, 1.00162
AMI: Creating addressing and weights between 1152 source faces and 768 target faces
AMI: Patch source sum(weights) min/max/average = 0.698711, 1.00442, 0.99332
AMI: Patch target sum(weights) min/max/average = 0.793633, 1.00348, 0.994922
AMI: Creating addressing and weights between 576 source faces and 576 target faces
AMI: Patch source sum(weights) min/max/average = 0.909942, 1.0008, 0.997517
AMI: Patch target sum(weights) min/max/average = 0.917573, 1.00219, 0.997765
AMI: Creating addressing and weights between 2304 source faces and 2304 target faces
AMI: Patch source sum(weights) min/max/average = 1, 1, 1
AMI: Patch target sum(weights) min/max/average = 1, 1, 1
AMI: Creating addressing and weights between 7680 source faces and 7680 target faces
AMI: Patch source sum(weights) min/max/average = 1, 1.00003, 1
AMI: Patch target sum(weights) min/max/average = 1, 1.00003, 1
Reading field U

Reading/calculating face flux field phi

Creating turbulence model

Selecting RAS turbulence model kOmegaSST

Creating finite volume options from "system/fvOptions"

Selecting finite volume options model type MRFSource
    Source: MRF1
    - applying source for all time
    - selecting cells using cellZone IMPELLER
    - selected 446208 cell(s) with volume 6.63491e-07


Starting time loop

Time = 1

smoothSolver:  Solving for Ux, Initial residual = 1, Final residual = 0.0986978, No Iterations 1
smoothSolver:  Solving for Uy, Initial residual = 1, Final residual = 0.0979385, No Iterations 1
smoothSolver:  Solving for Uz, Initial residual = 1, Final residual = 0.0111414, No Iterations 2
smoothSolver:  Solving for e, Initial residual = 1, Final residual = 9.80797e-07, No Iterations 12
GAMG:  Solving for p, Initial residual = 1, Final residual = 0.0446108, No Iterations 8
GAMG:  Solving for p, Initial residual = 0.108731, Final residual = 0.00535164, No Iterations 20
GAMG:  Solving for p, Initial residual = 0.0380433, Final residual = 0.00170171, No Iterations 11
GAMG:  Solving for p, Initial residual = 0.0276649, Final residual = 0.00131236, No Iterations 11
GAMG:  Solving for p, Initial residual = 0.0211125, Final residual = 0.000942147, No Iterations 10
time step continuity errors : sum local = 6.38773, global = 0.227561, cumulative = 0.227561
rho max/min : 1.22996 1.19158
smoothSolver:  Solving for omega, Initial residual = 0.0231832, Final residual = 5.3308e-07, No Iterations 4
smoothSolver:  Solving for k, Initial residual = 1, Final residual = 5.58828e-07, No Iterations 5
ExecutionTime = 20.97 s  ClockTime = 21 s

faceSource faceSource1 output:
    sum(INLET) for phi = -1.91468e-05

faceSource faceSource2 output:
    sum(AMI_INTERFACE_6_1) for phi = 1.87242e-05

faceSource faceSource3 output:
    sum(AMI_INTERFACE_7_1) for phi = 1.89516e-05

faceSource faceSource4 output:
    sum(OUTLET) for phi = 1.9445e-05

[]

Time = 7

smoothSolver:  Solving for Ux, Initial residual = 0.183966, Final residual = 0.00937516, No Iterations 1
smoothSolver:  Solving for Uy, Initial residual = 0.235456, Final residual = 0.0110085, No Iterations 1
smoothSolver:  Solving for Uz, Initial residual = 0.292774, Final residual = 0.0135016, No Iterations 1
smoothSolver:  Solving for e, Initial residual = 0.683258, Final residual = 8.24174e-07, No Iterations 17
GAMG:  Solving for p, Initial residual = 0.871516, Final residual = 0.0267436, No Iterations 4
GAMG:  Solving for p, Initial residual = 0.774578, Final residual = 0.0200357, No Iterations 4
GAMG:  Solving for p, Initial residual = 0.775779, Final residual = 0.0372116, No Iterations 3
GAMG:  Solving for p, Initial residual = 0.795692, Final residual = 0.0395914, No Iterations 3
GAMG:  Solving for p, Initial residual = 0.745215, Final residual = 0.0356113, No Iterations 3
time step continuity errors : sum local = 3298.37, global = 0.761859, cumulative = 4.81493
rho max/min : 2 1
smoothSolver:  Solving for omega, Initial residual = 0.00454441, Final residual = 3.715e-07, No Iterations 3
bounding omega, min: -6.18148e+06 max: 4.82333e+08 average: 5.85145e+06
smoothSolver:  Solving for k, Initial residual = 0.363912, Final residual = 7.39091e-07, No Iterations 4
bounding k, min: -0.380705 max: 298.131 average: 1.01755
ExecutionTime = 95.84 s  ClockTime = 99 s

faceSource faceSource1 output:
    sum(INLET) for phi = -0.00013497

faceSource faceSource2 output:
    sum(AMI_INTERFACE_6_1) for phi = 0.00013365

faceSource faceSource3 output:
    sum(AMI_INTERFACE_7_1) for phi = -0.000379064

faceSource faceSource4 output:
    sum(OUTLET) for phi = 0.000136115

Time = 8

smoothSolver:  Solving for Ux, Initial residual = 0.253062, Final residual = 0.012248, No Iterations 1
smoothSolver:  Solving for Uy, Initial residual = 0.293322, Final residual = 0.0134332, No Iterations 1
smoothSolver:  Solving for Uz, Initial residual = 0.313296, Final residual = 0.0142965, No Iterations 1
smoothSolver:  Solving for e, Initial residual = 0.699603, Final residual = 6.78483e-07, No Iterations 13


--> FOAM FATAL ERROR: 
Maximum number of iterations exceeded

    From function thermo<Thermo, Type>::T(scalar f, scalar T0, scalar (thermo<Thermo, Type>::*F)(const scalar) const, scalar (thermo<Thermo, Type>::*dFdT)(const scalar) const, scalar (thermo<Thermo, Type>::*limit)(const scalar) const) const
    in file /export/home/xxx/vse/OpenFOAM/OpenFOAM-2.3.x/src/thermophysicalModels/specie/lnInclude/thermoI.H at line 76.

FOAM aborting

#0  Foam::error::printStack(Foam::Ostream&) in "/export/home/xxx/vse/OpenFOAM/OpenFOAM-2.3.x/platforms/linux64GccDPOpt/lib/libOpenFOAM.so"
#1  Foam::error::abort() in "/export/home/xxx/vse/OpenFOAM/OpenFOAM-2.3.x/platforms/linux64GccDPOpt/lib/libOpenFOAM.so"
#2  Foam::species::thermo<Foam::hConstThermo<Foam::perfectGas<Foam::specie> >, Foam::sensibleInternalEnergy>::T(double, double, double, double (Foam::species::thermo<Foam::hConstThermo<Foam::perfectGas<Foam::specie> >, Foam::sensibleInternalEnergy>::*)(double, double) const, double (Foam::species::thermo<Foam::hConstThermo<Foam::perfectGas<Foam::specie> >, Foam::sensibleInternalEnergy>::*)(double, double) const, double (Foam::species::thermo<Foam::hConstThermo<Foam::perfectGas<Foam::specie> >, Foam::sensibleInternalEnergy>::*)(double) const) const in "/export/home/xxx/vse/OpenFOAM/OpenFOAM-2.3.x/platforms/linux64GccDPOpt/lib/libfluidThermophysicalModels.so"
#3  Foam::hePsiThermo<Foam::psiThermo, Foam::pureMixture<Foam::constTransport<Foam::species::thermo<Foam::hConstThermo<Foam::perfectGas<Foam::specie> >, Foam::sensibleInternalEnergy> > > >::calculate() in "/export/home/xxx/vse/OpenFOAM/OpenFOAM-2.3.x/platforms/linux64GccDPOpt/lib/libfluidThermophysicalModels.so"
#4  Foam::hePsiThermo<Foam::psiThermo, Foam::pureMixture<Foam::constTransport<Foam::species::thermo<Foam::hConstThermo<Foam::perfectGas<Foam::specie> >, Foam::sensibleInternalEnergy> > > >::correct() in "/export/home/xxx/vse/OpenFOAM/OpenFOAM-2.3.x/platforms/linux64GccDPOpt/lib/libfluidThermophysicalModels.so"
#5  
 in "/export/home/xxx/vse/OpenFOAM/OpenFOAM-2.3.x/platforms/linux64GccDPOpt/bin/rhoSimpleFoam"
#6  __libc_start_main in "/lib64/libc.so.6"
#7  
 at /home/abuild/rpmbuild/BUILD/glibc-2.14.1/csu/../sysdeps/x86_64/elf/start.S:116
I am aware of my constantly increasing time step continuity error and omega and before spending hours to find proper initial values for my boundary conditions, I'd like to check if my general setup is ok or if there a mistakes which are causing those problems.

Best regards
Attached Images
File Type: jpg segment.jpg (84.3 KB, 24 views)
vigges is offline   Reply With Quote

Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Solver for transonic flow? Martin Hegedus OpenFOAM Running, Solving & CFD 21 April 27, 2015 11:02
is it possible to predict how long it takes to reach steady state solution in unstead Alimohamadi_nasr CFX 4 November 11, 2013 07:11
error message cuteapathy CFX 14 March 20, 2012 07:45
Constant velocity of the material Sas CFX 15 July 13, 2010 08:56
mass flow in is not equal to mass flow out saii CFX 2 September 18, 2009 08:07


All times are GMT -4. The time now is 23:40.