수치해석 기법(Numerical Conditions)

수치해석 기법은 system/fvSolution 파일과 system/fvSchemes 파일에서 설정한다.

압력-속도 연성기법(Pressure-Velocity Coupling Scheme)

압력-속도 연성기법은 system/fvSolution 파일의 SIMPLE, PIMPLE 딕셔너리의 consistent 에 설정한다. 값이 SIMPLE 이면 no, SIMPLEC 이면 yes 이다.

SIMPLE
{
    consistent      <yes or no>;
    ...
}

운동량방정식 계산(Momentum Predictor)

운동량방정식 계산은 system/fvSolution 파일 PIMPLE 딕셔너리의 momentumPredictor 에서 on 혹은 off 로 설정한다.

PIMPLE
{
    ...
    momentumPredictor   <on or off>;
    ...
}

플럭스 계산 기법(Flux Type)

플럭스 계산 기법(Flux Type)은 system/fvSolution 파일의 Riemann 딕셔너리에 설정한다. Riemann 은 밀도기반 솔버에서 사용되는 것으로 다음과 같다.

Riemann
{
    fluxScheme      <roeFlux or AUSMplusFlux or AUSMplusUpFlux>;
    secondOrder     <yes or no>;
    reconGradScheme VKLimited Gauss linear 1;
    roeFluxCoeffs
    {
        epsilon     <value>;
    }
    AUSMplusUpFluxCoeffs
    {
        MInf        <value>;
    }
}

fluxScheme 은 Roe-FDS일 때는 roeFlux 로, AUSM일 때는 AUSMplusFlux 로, AUSM-up일 때는 AUSMplusUpFlux 가 된다.

Entropy Fix Coefficient 값은 roeFluxCoeffsepsilon 에 설정되고, Cut-off Mach Number 값은 AUSMplusUpFluxCoeffsMInf 에 설정된다.

이산화 기법(Discretization Schemes)

시간(Time)

system/fvSchemes 파일의 ddtSchemes 딕셔너리에 설정된다.

1차 음해법(First Order Implicit)일 때 Euler, 2차 음해법(Second Order Implicit)일 때 backward 가 된다.

ddtSchemes
{
    default     <Euler or backward>;
}

압력(Pressure)

system/fvSchemes 파일의 interpolationSchemes 에 설정된다.

Linear 이면 다음과 같다.

interpolationSchemes
{
    default             linear;
    interpolate(p)      linear;
    interpolate(p_rgh)  linear;
}

Momentum Weighted 면 다음과 같다.

interpolationSchemes
{
  default               linear;
  interpolate(p)        momentumWeighted;
  interpolate(p_rgh)    momentumWeighted;
}

Momentum Weighted Reconstruct 이면 다음과 같다.

interpolationSchemes
{
    default             linear;
    interpolate(p)      momentumWeightedReconstruct;
    interpolate(p_rgh)  momentumWeightedReconstruct;
}

운동량(Momentum), 에너지(Energy), 난류(Turbulence), 체적분율(Volume Fraction)

system/fvSchemes 파일의 divSchemes 딕셔너리에 설정된다.

1차 상류기법(First Order Upwind)일 때는 다음과 같다.

divSchemes
{
    default             Gauss linear;
    div(phi,U)          Gauss upwind;
    div(rhoPhi,U)       Gauss upwind;
    div(phiNeg,U)       Gauss upwind;
    div(phiPos,U)       Gauss upwind;
    div(phi,k)          Gauss upwind;
    div(phi,epsilon)    Gauss upwind;
    div(phi,omega)      Gauss upwind;
    div(phi,nuTilda)    Gauss upwind;
    div(phi,alpha)      Gauss upwind;
    div(phirb,alpha)    Gauss upwind;
    div(phi,scalar)     Gauss upwind;
}

2차 상류기법(Second Order Upwind)일 때는 다음과 같다.

divSchemes
{
    default             Gauss linear;
    div(phi,U)          Gauss linearUpwind momentumReconGrad;
    div(rhoPhi,U)       Gauss linearUpwind momentumReconGrad;
    div(phiNeg,U)       Gauss MinmodV;
    div(phiPos,U)       Gauss MinmodV;
    div(phi,k)          Gauss linearUpwind turbulenceReconGrad;
    div(phi,epsilon)    Gauss linearUpwind turbulenceReconGrad;
    div(phi,omega)      Gauss linearUpwind turbulenceReconGrad;
    div(phi,nuTilda)    Gauss linearUpwind turbulenceReconGrad;
    div(phi,alpha)      Gauss vanLeer;
    div(phirb,alpha)    Gauss linear;
    div(phi,scalar)     Gauss linearUpwind momentumReconGrad;
}

밀도기반 솔버

밀도기반 솔버에서는 유동(Flow)의 이산화 기법은 system/fvSolution 파일의 Riemann 딕셔너리에서 설정한다. 1차 상류기법(First Order Upwind)일 때는 secondOrderno, 2차 상류기법(Second Order Upwind)일 때는 yes 가 된다.

Riemann
{
    ...
    secondOrder     <yes or no>;
    ...
}

난류에 대해서는 압력기반 솔버와 같다.

완화계수(Under-Relaxation Factors)

완화계수는 system/fvSolution 파일의 relaxationFactors 딕셔너리에 설정된다.

완화계수에 입력한 값들이 다음과 같이 설정된다.

relaxationFactors
{
    fields
    {
        p           <value>;
        pFinal      <value>;
        p_rgh       <value>;
        p_rghFinal  <value>;
        rho         <value>;
        rhoFinal    <value>;
    }
    equations
    {
        U           <value>;
        UFinal      <value>;
        h           <value>;
        hFinal      <value>;
        "(k|epsilon|omega|nuTilda)"         <value>;
        "(k|epsilon|omega|nuTilda)Final"    <value>;
        alpha.waterLiquid       <value>;
        alpha.waterLiquidFinal  <value>;
        scalar                  <value>;
        scalarFinal             <value>;
    }
}

안정성 향상(Improve Stability)

안정성 향상 옵션은 system/fvSchemes 파일의 laplacianSchemes 딕셔너리에 설정된다.

안정성 향상 옵션이 꺼져 있을 때 다음과 같다.

laplacianSchemes
{
    default     Gauss linear corrected;
}

안정성 향상 옵션이 켜져 있을 때 다음과 같다.

laplacianSchemes
{
    default     Gauss linear limited corrected 0.5;
}

밀도기반 솔버에서는 이 옵션이 적용되지 않고, 옵션이 꺼져 있을 때와 같은 설정을 사용한다.

시간당 반복계산 회수(Max Iterations per Time Step), 압력보정 회수(Number of Correctors)

system/fvSolution 파일의 PIMPLE 딕셔너리에 설정된다.

시간당 반복계산 회수는 nOuterCorrectors, 압력보정 회수는 nCorrectors 에 사용된다.

PIMPLE
{
    ...
    nCorrectors                 <value>;
    nOuterCorrectors            <value>;
    ...
}

다상유동(Multiphase)

다상유동은 system/fvSolution 파일의 solvers 딕셔너리에 설정된다.

solvers
{
    ...
    "alpha.*"
    {
        ...
        nAlphaSubCycles     <value>;
        nAlphaCorr          <value>;
        MULESCorr           <yes or no>;
        cAlpha              <value>;
        nLimiterIter        <value>;
        ...
  }
    ...
}

시간당 반복계산 회수(Max. Iteration per Time Step)는 nAlphaSubCycles 값으로 설정되며, 보정 회수(Number of Correctors)는 nAlphaCorr 값으로 설정된다.

MULES 기법(MULES Variant)이 Explicit이면 MULESCorrno 가 되고 Semi-implicit이면 _yes_가 된다.

상 경계면 압축계수(Phase Interface Compression Factor)는 cAlpha 값으로 설정된다.

제한자에 대한 MULES 반복 회수(Number of MULES iterations over the limiter)는 nLimiterIter 값으로 설정된다.

수렴 판정 기준(Convergence Criteria)

압력기반 솔버는 system/fvSolution 파일에 설정된다. SIMPLEPIMPLE 딕셔너리의 residualControl 을 사용한다.

SIMPLE
{
    ...
    residualControl
    {
        p           <value>;
        p_rgh       <value>;
        U           <value>;
        h           <value>;
        "(k|epsilon|omega|nuTilda)" <value>;
        "alpha.*"   <value>;
    }
}

비정상상태 문제에서는 residualControltolerancerelTol 2가지가 있다. 설정한 Absolute 값은 tolerance 에, Relative 값은 relTol 에 사용된다.

PIMPLE
{
    ...
    residualControl
    {
        ...
        p_rgh
        {
            tolerance       <value>;
            relTol          <value>;
        }
        U
        {
            tolerance       <value>;
            relTol          <value>;
        }
        ...
    }
}

밀도기반 솔버는 system/fvSolution 파일의 LU-SGS 딕셔너리에 설정된다.

LU-SGS
{
    residualControl
    {
        rho     0.001;
        rhoU    0.001;
        rhoE    0.001;
        "(k|epsilon|omega|nuTilda)" 0.001;
    }
}

값의 제한(Limits)

system/fvOptions 파일에 limitT 딕셔너리를 사용해서 온도의 최소/최대값을 제한한다.

limitT
{
    type            limitTemperature;
    active          yes;
    selectionMode   all;
    min             1;
    max             5000;
}

방정식 선택(Equations)

system/fvSolution 파일에서 유동, 에너지, 화학종 방정식 각각에 대해 계산할 것인지를 선택한다.

SIMPLEPIMPLE 딕셔너리의 solveFlow, solveEnergy, solveSpecies 를 사용한다.

SIMPLE // PIMPLE
{
    ...
    solveFlow                   <yes or no>;
    solveEnergy                 <yes or no>;
    solveSpecies                <yes or no>;
    ...
}

에너지방정식은 점성가열, 운동에너지, 압력에 의한 일 등의 3가지를 계산할 것인지 선택할 수 있다. constant/thermophysicalProperties 파일에 다음과 같이 설정된다.

includeViscousDissipation   <true of false>;
includeKineticEnergy        <true of false>;
includePressureWork         <true of false>;

기타 디폴트 설정

fvSolution 파일의 SIMPLE

nNonOrthogonalCorrectors, pRefCell, pRefValue 는 항상 0을 사용한다.

SIMPLE
{
    ...
    nNonOrthogonalCorrectors    0;
    pRefCell                    0;
    pRefValue                   0;
    ...
}

fvSolution 파일의 PIMPLE

turbOnFinalIterOnly 는 항상 false 이다. nAlphaSpreadIternAlphaSweepIter 은 항상 0이고, rDeltaTSmoothingCoeffrDeltaTDampingCoeff 는 항상 0.5이다.

PIMPLE
{
    ...
    turbOnFinalIterOnly         false;
    nAlphaSpreadIter            0;
    nAlphaSweepIter             0;
    rDeltaTSmoothingCoeff       0.5;
    rDeltaTDampingCoeff         0.5;
    ...
}

fvSolution 파일의 solvers

계산할 유동 변수에 대한 행렬 연산 방법을 설정한다. solverpreconditioner 는 변수에 따라 다르다. tolerance 는 1e-16, relative tolerance(relTol) 는 0.1, minimum iteration(minIter) 는 1을, maximum iteration(maxIter) 는 5를 사용한다. 다만 체적분율(alpha)의 경우 tolerance 는 1e-8, relTol 은 0, minIter 는 1, maxIter 는 10을 사용한다.

압력

p_rgh은 PCG solver와 GAMG preconditioner를 사용한다.

solvers
{
    ...
    p_rgh
    {
        solver          PCG;
        preconditioner
        {
            preconditioner  GAMG;
            smoother        DIC;
            tolerance       1e-5;
            relTol          0.1;
        }
        tolerance       1e-16;
        relTol          0.1;
        minIter         1;
        maxIter         5;
    }
    ...
}

속도, 난류, 화학종, 사용자 정의 스칼라

U, k, epsilon, omega, nuTilda, scalar, Yi 등은 PBiCGStab solver와 DILU preconditioner를 사용한다.

solvers
{
    ...
    "(U|k|epsilon|omega|nuTilda|scalar|Yi)"
    {
        solver          PBiCGStab;
        preconditioner  DILU;
        tolerance       1e-16;
        relTol          0.1;
        minIter         1;
        maxIter         5;
  }
    ...
}

에너지

h는 PBiCGStab solver와 GAMG preconditioner를 사용한다.

solvers
{
    ...
    h
    {
        solver          PBiCGStab;
        preconditioner
        {
            preconditioner  GAMG;
            smoother        DILU;
            tolerance       1e-5;
            relTol          0.1;
        }
        tolerance       1e-16;
        relTol          0.1;
        minIter         1;
        maxIter         5;
    }
    ...
}

밀도

rho는 PCG solver와 DIC preconditioner를 사용한다.

solvers
{
    ...
    rho
    {
        solver          PCG;
        preconditioner  DIC;
        tolerance       1e-16;
        relTol          0.1;
        minIter         1;
        maxIter         5;
    }
    ...
}

체적 분율(alpha)

alpha는 smoothSolver solver와 symGaussSeidel smoother를 사용한다.

icAlpha 는 0, alphaApplyPrevCorryes 로 설정된다.

solvers
{
    ...
    "alpha.*"
    {
        solver              smoothSolver;
        smoother            symGaussSeidel;
        icAlpha             0;
        alphaApplyPrevCorr  yes;
        tolerance           1e-8;
        relTol              0;
        minIter             1;
        maxIter             10;
  }
    ...
}

fvSolution 파일의 fieldBounds

fieldBounds 는 밀도기반 솔버에서 사용되는 값의 제한으로 항상 다음과 같다.

fieldBounds
{
    p       1e-06   1e+10;
    rho     1e-06   1e+10;
    h       1e-06   1e+10;
    e       1e-06   1e+10;
    rhoE    1e-06   1e+10;
    T       1e-06   3e+4;
    U       3e+4;
}

fvSchemes 파일의 gradSchemes

압력기반 솔버는 항상 Gauss linear 를 사용한다. momentumReconGrad, energyReconGrad, turbulenceReconGrad 등은 _divSchemes_에 사용하기 위한 정의이다.

gradSchemes
{
    default             Gauss linear;
    momentumReconGrad   VKLimited Gauss linear 1.0;
    energyReconGrad     VKLimited Gauss linear 1.0;
    turbulenceReconGrad VKLimited Gauss linear 1.0;
}

밀도기반 솔버는 다음과 같은 조건을 항상 사용한다.

gradSchemes
{
    default         Gauss linear;
    grad(k)         VKLimited Gauss linear 0.5;
    grad(epsilon)   VKLimited Gauss linear 0.5;
    grad(omega)     VKLimited Gauss linear 0.5;
    grad(nuTilda)   VKLimited Gauss linear 0.5;
    reconGrad       VKLimited Gauss linear 0.5;
}

fvSchemes 파일의 interpolationSchemes

밀도기반 솔버에서는 다음의 설정을 사용한다.

interpolationSchemes
{
    default             linear;
    interpolate(rho)    linearUpwind phi grad(rho);
}

fvSchemes 파일의 snGradSchemes

항상 다음의 설정을 사용한다.

snGradSchemes
{
    default     corrected;
}