수치해석 기법(Numerical Conditions)
수치해석 기법은 system/fvSolution 파일과 system/fvSchemes 파일에서 설정한다.
- 압력-속도 연성기법(Pressure-Velocity Coupling Scheme)
- 운동량방정식 계산(Momentum Predictor)
- 플럭스 계산 기법(Flux Type)
- 이산화 기법(Discretization Schemes)
- 완화계수(Under-Relaxation Factors)
- 안정성 향상(Improve Stability)
- 시간당 반복계산 회수(Max Iterations per Time Step), 압력보정 회수(Number of Correctors)
- 다상유동(Multiphase)
- 수렴 판정 기준(Convergence Criteria)
- 값의 제한(Limits)
- 방정식 선택(Equations)
- 기타 디폴트 설정
압력-속도 연성기법(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 값은 roeFluxCoeffs 의 epsilon 에 설정되고, Cut-off Mach Number 값은 AUSMplusUpFluxCoeffs 의 MInf 에 설정된다.
이산화 기법(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)일 때는 secondOrder 가 no, 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이면 MULESCorr 은 no 가 되고 Semi-implicit이면 _yes_가 된다.
상 경계면 압축계수(Phase Interface Compression Factor)는 cAlpha 값으로 설정된다.
제한자에 대한 MULES 반복 회수(Number of MULES iterations over the limiter)는 nLimiterIter 값으로 설정된다.
수렴 판정 기준(Convergence Criteria)
압력기반 솔버는 system/fvSolution 파일에 설정된다. SIMPLE 과 PIMPLE 딕셔너리의 residualControl 을 사용한다.
SIMPLE
{
...
residualControl
{
p <value>;
p_rgh <value>;
U <value>;
h <value>;
"(k|epsilon|omega|nuTilda)" <value>;
"alpha.*" <value>;
}
}
비정상상태 문제에서는 residualControl 에 tolerance 와 relTol 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 파일에서 유동, 에너지, 화학종 방정식 각각에 대해 계산할 것인지를 선택한다.
SIMPLE 과 PIMPLE 딕셔너리의 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 이다. nAlphaSpreadIter 와 nAlphaSweepIter 은 항상 0이고, rDeltaTSmoothingCoeff 와 rDeltaTDampingCoeff 는 항상 0.5이다.
PIMPLE
{
...
turbOnFinalIterOnly false;
nAlphaSpreadIter 0;
nAlphaSweepIter 0;
rDeltaTSmoothingCoeff 0.5;
rDeltaTDampingCoeff 0.5;
...
}
fvSolution 파일의 solvers
계산할 유동 변수에 대한 행렬 연산 방법을 설정한다. solver 와 preconditioner 는 변수에 따라 다르다. 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, alphaApplyPrevCorr 는 yes 로 설정된다.
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;
}