BaramFlow의 설정이 NextFOAM에서 사용되는 방법
BaramFlow는 넥스트폼이 개발한 OpenFOAM의 포크인 NextFOAM을 사용한다. BaramFlow의 각종 설정들이 NextFOAM에 어떻게 적용되는지를 설명한다. NextFOAM에서 사용되는 용어들은 이탤릭체로 표현하였다.
기본조건(General)
시간 전진 기법 설정(Time)
시간에 대한 설정은 system/fvSchemes 파일의 ddtSchemes 딕셔너리에서 한다.
정상상태 압력기반 솔버의 단상유동은 steadyState, 2상유동은 localEuler 이다. 밀도기반 솔버도 localEuler 이다.
ddtSchemes
{
default <steadyState or localEuler>;
}
비정상상태는 시간의 이산화 기법이 1차 음해법(First Order Implicit)일 때는 Euler, 2차 음해법(Second Order Implicit)일 때는 backward 이다.
ddtSchemes
{
default <Euler or backward>;
}
중력(Gravity)
중력 벡터의 입력값을 constant/g 파일에 다음과 같이 설정한다.
dimensions [0 1 -2 0 0 0 0];
value (<x-value> <y-value> <z-value>);
작동조건(Operating Conditions)
작동 조건(Operating Conditions) 입력값을 constant/operatingConditions 파일에 다음과 같이 설정한다.
operatingPressure operatingPressure [1 -1 -2 0 0 0 0] <value>;
모델(Model)
난류(Turbulence)
난류는 constant/turbulenceProperties 파일에 다음과 같이 설정한다.
simulationType RAS;
RAS
{
RASModel kOmegaSST;
turbulence on;
printCoeffs on;
viscosityRatioMax 1e5;
}
simulationType 설정과 그에 따른 딕셔너리가 필요하다. simulationType 은 laminar, RAS, LES 등이 있다.
turbulence 와 printCoeffs 는 항상 on 이다.
viscosityRatioMax 는 [수치해석기법] - [고급설정]에서 입력한 최대 점도 비율(Maximum Viscosity Ratio) 값이다.
층류(Laminar)
simulationType laminar;
뉴턴 유체의 경우 아무런 추가 설정이 없다. 비뉴턴체의 경우 laminar 딕셔너리에서 모델을 설정한다. 비뉴턴유체 모델은 Cross, Herschel-Bulkley, Bird-Carreau, Non-Newtonian power law를 선택할 수 있다. 각 모델의 계수는 다음과 같이 설정한다.
Cross
laminar
{
model generalizedNewtonian;
viscosityModel CrossPowerLaw;
CrossPowerLawCoeffs
{
nu0 <value>;
nuInf <value>;
m <value>;
n <value>;
tauStar <value>;
}
}
laminar
{
model generalizedNewtonian;
viscosityModel HerschelBulkley;
HerschelBulkleyCoeffs
{
nu0 <value>;
tau0 <value>;
k <value>;
n <value>;
}
}
laminar
{
model generalizedNewtonian;
viscosityModel BirdCarreau;
BirdCarreauCoeffs
{
nu0 <value>;
nuInf <value>;
k <value>;
n <value>;
a <value>;
}
}
laminar
{
model generalizedNewtonian;
viscosityModel powerLaw;
powerLawCoeffs
{
nuMax <value>;
nuMin <value>;
k <value>;
n <value>;
}
}
Spalart-Allmaras
항상 다음과 같다.
simulationType RAS;
RAS
{
RASModel SpalartAllmaras;
turbulence on;
printCoeffs on;
viscosityRatioMax <value>;
}
k-epsilon
simulationType RAS;
RAS
{
RASModel kEpsilon; // RNGkEpsilon, realizableKE
turbulence on;
printCoeffs on;
viscosityRatioMax <value>;
kEpsilonCoeffs
{
Prt <value>;
Sct <value>;
}
ReyStar 60;
deltaRey 10;
}
RASModel 은 Standard일 때는 kEpsilon, RNG일 때는 RNGkEpsilon, Realizable일 때는 realizableKE 를 사용한다.
Prt 는 난류 프란틀 수(Turbulent Prandtl Number)의 내부 유동변수에 사용(for internal Field)에 입력된 값이다.
Sct 는 난류 슈미트 수(Turbulent Schmidt Number)의 값이다.
ReyStar 와 deltaRey 는 realizable 모델에서 벽함수가 Enhanced Wall Treatment(two layer)일 때만 사용되며 항상 60과 10이다.
k-omega SST
항상 다음과 같다.
simulationType RAS;
RAS
{
RASModel kOmegaSST;
turbulence on;
printCoeffs on;
viscosityRatioMax <value>;
}
LES
LES 모델의 simulationType_은 _LES 이다. Subgrid-Scale 모델과 Length-Scale 모델을 설정하고 그에 따른 딕셔너리가 필요하다.
Subgrid-Scale 모델은 LESModel 에서 설정하고 Length-Scale 모델은 delta 에서 설정한다.
simulationType LES;
LES
{
LESModel <Smagorinsky or WALE or dynamicKEqn or kEqn>;
turbulence on;
printCoeffs off;
delta <cubeRootVol or dynamicKEqn or kEqn>;
viscosityRatioMax <value>;
SmagorinskyCoeffs
{
Ck <value>;
Ce <value>;
Sct <value>;
}
cubeRootVolCoeffs
{
deltaCoeff 1;
}
}
Subgrid-Scale 모델
Smagorinsky-Lilly(Smagorinsky), WALE(WALE), Kinetic-Energy Transport(dynamicKEqn), One Equation Eddy Viscosity(kEqn) 4가지를 선택할 수 있다. Smagorinsky-Lilly일 때는 위와 같으며, 나머지들의 딕셔너리는 다음과 같다.
WALE
WALECoeffs
{
Ck <value>;
Ce <value>;
Cw <value>;
Sct <value>;
}
dynamicKEqnCoeffs
{
filter simple;
Sct <value>;
}
kEqnCoeffs
{
Ck <value>;
Ce <value>;
Sct <value>;
}
Sct 는 난류 슈미트 수이다. 화학종을 계산할 때만 입력창이 나타난다. 화학종 계산이 없을 때는 항상 0.7을 사용한다.
Length-Scale 모델
Cube-root Volume(cubeRootVol), Van Driest(dynamicKEqn), smooth(smooth) 3가지를 선택할 수 있다. Cube-root Volume일 때는 위와 같으며, 나머지들의 딕셔너리는 다음과 같다.
Van Driest
vanDriestCoeffs
{
delta cubeRootVol;
kappa 0.41;
Aplus 26;
Cdelta 0.158;
calcInterval 1;
cubeRootVolCoeffs
{
deltaCoeff 2.0;
}
}
smoothCoeffs
{
delta cubeRootVol;
maxDeltaRatio 1.1;
cubeRootVolCoeffs
{
deltaCoeff 1;
}
}
DES
DES 모델의 simulationType_은 _LES 이다.
RAS 모델, DES 옵션, Length-Scale 모델을 설정하고 그에 따른 딕셔너리가 필요하다.
simulationType LES;
LES
{
LESModel SpalartAllmarasDES; //kOmegaSSTDES;
turbulence on;
delta <cubeRootVol or dynamicKEqn or smooth>;
viscosityRatioMax <value>;
SpalartAllmarasDESCoeffs
{
CDES <value>;
lowReCorrection <yes or no>;
Sct <value>;
}
kOmegaSSTDES
{
CDESkom <value>;
CDESkeps <value>;
Sct <value>;
}
cubeRootVolCoeffs
{
deltaCoeff 1;
}
}
RAS 모델
Spalart-Allmaras(SpalartAllmarasDES), k-omega SST(kOmegaSSTDES) 2가지를 선택할 수 있다.
Spalart-Allmaras일 때 Low-Re Damping 옵션이 있다. 이 옵션을 사용할 때는 SpalartAllmarasDESCoeffs 딕셔너리의 lowReCorrection 이 _yes_가 되고 아닐 때는 _no_가 된다.
DES 옵션
DES 옵션의 Delayed DES를 켜면 Shielding Function 옵션이 나타나고 DDES와 IDDES를 선택할 수 있다. IDDES를 선택하면 Lengh-Scale 모델은 없어진다.
DDES를 선택하면 LESModel 이 RAS 모델에 따라 SpalartAllmarasDDES, kOmegaSSTDDES 가 된다.
simulationType LES;
LES
{
LESModel SpalartAllmarasDDES; //kOmegaSSTDDES;
turbulence on;
delta <cubeRootVol or dynamicKEqn or smooth>;
viscosityRatioMax <value>;
SpalartAllmarasDDESCoeffs
{
CDES <value>;
lowReCorrection <yes or no>;
Sct <value>;
}
kOmegaSSTDDES
{
CDESkom <value>;
CDESkeps <value>;
Sct <value>;
}
cubeRootVolCoeffs
{
deltaCoeff 1;
}
}
IDDES를 선택하면 LESModel 이 RAS 모델에 따라 SpalartAllmarasIDDES, kOmegaSSTIDDES 가 된다.
simulationType LES;
LES
{
LESModel SpalartAllmarasIDDES; //kOmegaSSTIDDES;
turbulence on;
delta IDDESDelta;
viscosityRatioMax 1e5;
SpalartAllmarasIDDESCoeffs
{
CDES <value>;
lowReCorrection <yes or no>;
Sct <value>;
}
kOmegaSSTIDDES
{
CDESkom <value>2;
CDESkeps <value>;
Sct <value>;
}
IDDESDeltaCoeffs
{
hmax maxDeltaxyzCubeRoot;
maxDeltaxyzCubeRootCoeffs
{
}
}
}
Length-Scale 모델
Lengh-Scale 모델은 LES에서와 같다.
에너지(Energy)
에너지 방정식 계산 여부는 system/fvSolution 파일의 SIMPLE 과 PIMPLE 딕셔너리의 solveEnergy 에 설정된다.
SiMPLE //PIMPLE
{
...
solveEnergy <yes or no>;
...
}
화학종 혼합(Species)
화학종 혼합은 constant/thermophysicalProperties 파일에 설정된다.
thermoType 딕셔너리
mixture 가 다음과 같이 multiComponentMixture 가 된다.
thermoType
{
type heRhoThermo;
mixture multiComponentMixture;
transport const;
thermo hConst;
equationOfState rhoConst;
specie specie;
energy sensibleEnthalpy;
}
species 딕셔너리
계산에 사용될 화학종들을 써 준다. 이와 함께 inertSpecie 를 지정해 주어야 한다. 이것은 수송방정식을 계산하지 않으며 질량분율은 1에서 나머지 화학종 값의 합을 뺀 것을 사용한다.
species
(
<species1>
<species2>
...
);
inertSpecie <specie1>
각 화학종의 딕셔너리
각 화확종의 물성값을 설정하는 딕셔너리가 있어야 한다. mixture 딕셔너리와 같은 형태인데 단지 transport 에 확산계수 Dm 이 있는 것만 다르다.
<specie1>
{
thermodynamics
{
...
}
transport
{
mu <value>;
Pr <value>;
Dm <value>;
}
specie
{
...
}
equationOfState
{
...
}
}
<specie2>
...
사용자 정의 스칼라(User-defined Scalars)
사용자 정의 스칼라는 system/controlDict 파일의 functions 딕셔너리에 설정된다.
확산 계수가 상수인 경우 입력한 값은 D 에 사용되고, 층류 및 난류 확산계수인 경우는 alphaD 와 alphaDt 에 사용된다.
functions
{
...
<name>
{
type scalarTransport;
libs ("/baram/solvers/openfoam/lib/libsolverFunctionObjects.so");
field <uds name>;
schemesField scalar;
nCorr 2;
writeControl runTime;
writeInterval <value>;
D <value>; // Constant
//alphaD <value>; // Laminar and Turbulent Viscosity
//alphaDt <value>; // Laminar and Turbulent Viscosity
}
}
schemesField 는 항상 scalar 이다. 이것은 수치해석 기법을 system/fvSolution, system/fvSchemes 파일에서 설정할 때 scalar라는 이름의 값을 사용하는 것이다.
writeInterval 은 계산조건에서 설정한 자동 저장 간격(Save Interval) 값을 사용한다.
물질(Materials)
물성값은 단상유동은 constant/thermophysicalProperties 파일에서, 다상유동은 constant/transportProperties 파일에서 설정한다. 비뉴턴유체의 점성 모델은 constant/turbulenceProperties 파일에서 설정한다.
thermophysicalProperties
thermoType 딕셔너리
thermoType 은 mixture, transport, thermo, equationOfState, specie, energy 등의 6가지를 설정한다.
유체일 때
thermoType
{
type heRhoThermo;
mixture pureMixture;
transport const;
thermo hConst;
equationOfState rhoConst;
specie specie;
energy sensibleEnthalpy;
}
thermoType
{
type heSolidThermo;
mixture pureMixture;
transport constIso;
thermo hConst;
equationOfState rhoConst;
specie specie;
energy sensibleEnthalpy;
}
-
type : 유체일 때는 항상 heRhoThermo 를 사용하고, 고체일 때는 heSolidThermo 를 사용한다.
-
mixture : 화학종 혼합을 계산하지 않을 때는 항상 pureMixture 를 사용한다. 화학종 혼합을 계산할 때는 multiComponentMixture 를 사용한다. 고체일 때는 항상 pureMixture 를 사용한다.
-
transport : 유체인 경우 점성계수와 열전도도가 상수일 때는 const 를 사용하고, 다항식일 때는 polynomial 을 사용한다. 고체인 경우 열전도도가 상수일 때는 constIso 를 사용한다.
-
thermo : 정압비열이 상수일 때 hConst 를 사용하고, 다항식일 때 hPolynomial 을 사용한다.
-
equationOfState : 밀도가 상수일 때 rhoConst 를 사용하고, 완전기체일 때는 perfectGas 를, 비압축성 완전기체일 때는 incompressiblePerfectGas 를 사용한다. 다항식일 때는 icoPolynomial 를 사용한다.
-
specie : 항상 specie 를 사용한다.
-
energy : 항상 sensibleEnthalpy 를 사용한다.
mixture 딕셔너리
화학종 혼합을 계산하지 않을 때 유체의 물성값은 mixture 딕셔너리에서 설정한다. mixture 딕셔너리에는 thermodynamics, transport, specie, equationOfState 등의 딕셔너리가 있다. 사용 예는 다음과 같다.
...
mixture
{
thermodynamics
{
Cp 1006.0;
Hf 0;
}
transport
{
mu 1.79e-05;
Pr 0.7349959183673469;
}
specie
{
nMoles 1;
molWeight 28.966;
}
equationOfState
{
rho 1.225;
}
}
...
thermodynamics
Cp 와 Hf 를 설정한다. Cp 는 정압비열이며 Hf 는 생성열이다. BaramFlow에는 아직 화학반응이 포함되어 있지 않기 때문에 Hf 는 사용되지 않으며 항상 0으로 설정된다.
정압비열이 상수일 때 다음과 같다.
thermodynamics
{
Cp <value>;
Hf 0;
}
정압비열이 다항식일 때는 다음과 같다.
thermodynamics
{
Hf 0;
Sf 0;
CpCoeffs<8> (<a0> <a1> <a2> ... <a7>)
}
다항식은 아래의 식과 같이 7차식으로 표현하기 때문에 8개의 계수가 필요하다.
\(Cp = a_0 + a_1 T + a_2 T^2 + a_3 T^3 + a_4 T^4 + a_5 T^5 + a_6 T^6 + a_7 T^7\)
transport
mu_와 _Pr_을 설정한다. _mu 는 점성계수이며 Pr 은 프란트 수(Prandtl Number)이다.
Viscosity와 Thermal Conductivity가 상수일 때 다음과 같다.
transport
{
mu <value>;
Pr <value>;
}
점성계수와 열전도도가 다항식일 때는 다음과 같다.
transport
{
muCoeffs<8> (<a0> <a1> <a2> ... <a7>)
kappaCoeffs<8> (<a0> <a1> <a2> ... <a7>)
}
transport
{
As <value>;
Ts <value>;
}
specie
_specie_에는 물질의 분자량을 설정한다.
specie
{
nMoles 1;
molWeight <value>;
}
equationOfState
밀도가 상수일 때 다음과 같다.
equationOfState
{
rho <value>;
}
밀도가 다항식일 때는 다음과 같다.
equationOfState
{
rhoCoeffs<8> (<a0> <a1> <a2> ... <a7>)
}
밀도가 이상기체일 때는 equationOfState 딕셔너리가 필요 없다.
밀도가 비압축성 이상기체일 때는 다음과 같다.
equationOfState
{
pRef <value>;
}
transportProperties
다상유동 문제에서 각 상의 물성을 설정한다. phases 라는 딕셔너리와 각 상에 대한 딕셔너리가 필요하며, 표면장력, 캐비테이션 등을 설정한다.
phases
상이 2개일 때 다음과 같다.
phases (<phase1> <phase2>);
상이 3개 이상일 때는 다음과 같다.
phases
(
<phase1>
{
transportModel Newtonian;
nu <value>;
rho <value>;
}
<phase2>
{
transportModel Newtonian;
nu <value>;
rho <value>;
}
...
);
각 상의 물성값
상이 2개일 때는 다음과 같다.
<phase1>
{
transportModel Newtonian;
nu <value>;
rho <value>;
}
<phase2>
{
transportModel Newtonian;
nu <value>;
rho <value>;
}
상이 3개 이상일 때는 phases 딕셔너리에 설정하기 때문에 필요없다.
표면장력
상이 2개일 때 다음과 같다.
sigma <value>;
상이 3개 이상일 때는 각 상간의 값을 다음과 같이 설정한다.
sigmas
(
(<phase1> <phase2>) <value>
(<phase1> <phase3>) <value>
(<phase2> <phase3>) <value>
...
);
캐비테이션
캐비테이션 문제에서는 증기압을 pSat 에 설정하고, 캐비테이션 모델을 phaseChangeTwoPhaseMixture 에 설정한다.
pSat <value>;
phaseChangeTwoPhaseMixture SchnerrSauer; //Kunz, Merkle, Zwart
각 모델의 계수는 별도의 딕셔너리로 다음과 같이 설정한다.
Schnerr-Sauer 모델
SchnerrSauerCoeffs
{
n <value>;
dNuc <value>;
Cc <value>;
Cv <value>;
}
KunzCoeffs // MerkleCoeffs
{
UInf <value>;
tInf <value>;
Cc <value>;
Cv <value>;
}
ZwartCoeffs
{
aNuc <value>;
dNuc <value>;
Cc <value>;
Cv <value>;
}
셀존 조건(Cell Zone Conditions)
다중기준좌표계(Multiple Reference Frame, MRF)
다중기준좌표계는 **constant/MRFProperties**에서 다음과 같이 설정한다.
<name>
{
cellZone <cell zone name>;
active yes;
nonRotatingPatches
(
<patch name 1>
<patch name 2>
...
);
origin (<x> <y> <z>);
axis (<x-axis> <y-axis> <z-axis>);
omega <radian per sec>;
}
omega 는 입력한 분당 회전수(RPM) 값을 초당 라디안(radian)으로 변환해서 사용한다.
미끄럼 격자(Sliding Mesh)
미끄럼 격자는 constant/dynamicMeshDict 파일에서 다음과 같이 설정한다.
dynamicFvMesh dynamicMotionSolverListFvMesh;
motionSolverLibs ("libfvMotionSolvers.so");
motionSolver fvMotionSolvers;
solvers
{
<name>
{
solver solidBody;
solidBodyMotionFunction rotatingMotion;
cellZone rotating;
rotatingMotionCoeffs
{
origin (<x> <y> <z>);
axis (<x-axis> <y-axis> <z-axis>);
omega <radian per sec>;
}
}
}
omega 는 입력한 분당 회전수(RPM) 값을 초당 라디안(radian)으로 변환해서 사용한다.
다공성 매질(Porous Zone)
다공성 매질은 system/fvOptions 파일에서 설정한다.
Power Law 모델
입력 받은 C0, C1은 powerLawCoeffs 에 사용된다.
<name>
{
type explicitPorositySource;
explicitPorositySourceCoeffs
{
type powerLaw;
powerLawCoeffs
{
C0 <value>;
C1 <value>;
coordinateSystem
{
type cartesian;
origin (<x> <y> <z>);
rotation
{
type axesRotation;
e1 (1 0 0);
e2 (0 1 0);
}
}
}
selectionMode cellZone;
cellZone <cell zone name>;
}
}
Darcy Forchheimer 모델
입력 받은 방향벡터 1과 2는 coordinateSystem 의 e1, e2 에 사용된다. 관성저항계수와 점성저항계수는 DarcyForchheimerCoeffs 의 f 와 d 에 사용된다.
<name>
{
type explicitPorositySource;
explicitPorositySourceCoeffs
{
type DarcyForchheimer;
DarcyForchheimerCoeffs
{
d d [ 0 -2 0 0 0 0 0 ] (<x-d> <y-d> <z-d>);
f f [ 0 -1 0 0 0 0 0 ] (<x-f> <y-f> <z-f>);
coordinateSystem
{
type cartesian;
origin (<x> <y> <z>);
rotation
{
type axes;
e1 (<x-dir1> <y-dir1> <z-dir1>);
e2 (<x-dir2> <y-dir2> <z-dir2>);
}
}
}
selectionMode cellZone;
cellZone <cell zone name>;
}
}
액추에이터 디스크(Actuator Disk)
액추에이터 디스크 모델은 system/fvOptions 파일에서 설정한다.
입력 받은 디스크 축 방향은 diskDir 에, 파워 계수는 Cp 에, 추력 계수는 Ct 에 디스크 면적은 diskArea 에, 상류쪽 점의 좌표는 monitorCoeffs에, 힘 계산 방법은 _variant 에 사용된다.
actuationDiskSource_porousZone
{
type actuationDiskSource;
fields (U);
diskDir (<x-dir> <y-dir> <z-dir>);
Cp <value>;
Ct <value>;
diskArea <value>;
monitorMethod points;
monitorCoeffs
{
points ((<x> <y> <z>));
}
variant <Froude or variableScaling>;
selectionMode cellZone;
cellZone <cell zone name>;
}
생성항(Source Terms)
질량, 에너지, 난류, 화학종 관련 필드에 생성항을 줄 수 있다.
생성항은 system/fvOptions 파일에서 설정한다.
무엇에 대한 생성항인지는 sources_에서 설정한다. 질량은 _rho, 에너지는 h, 난류 관련 필드는 k, epsilon, omega 등이다.
값은 sources 에서 (\
값의 크기 설정 방법(Specification Method)는 전체 체적에 대한 값(Value for Entire Cell Zone)과 단위 체적당 값(Value per Unit Volume) 두 가지가 있으며 volumeMode 에서 설정한다. 전체 체적에 대한 값은 absolute, 단위 체적당 값은 specific 이다.
셀존이 아닌 전체 영역에 생성항을 줄 때는 selectionMode 가 all 이 된다.
<name>
{
type scalarSemiImplicitSource;
volumeMode <absolute or specific>;
sources
{
rho (<value> 0.0); // h, k, epsilon, omega, nuTilda, <species>
}
selectionMode cellZone; //all;
cellZone <cell zone name>;
}
<name>
{
type scalarSemiImplicitSource;
volumeMode <absolute or specific>;
sources
{
h
{
explicit table ( (<t0> <t1> ...) (<flowrate0> <flowrate1>) ... );
implicit none;
}
}
selectionMode cellZone;
cellZone <cell zone name>;
}
<name>
{
type scalarSemiImplicitSource;
volumeMode <absolute or specific>;
sources
{
h
{
explicit polynomial ( (<a0> 0) (<a1> 1) ... );
implicit none;
}
}
selectionMode cellZone;
cellZone <cell zone name>;
}
사용자 정의 스칼라의 생성항
사용자 정의 스칼라의 생성항은 system/fvOptions 파일이 아닌 system/controlDict 파일의 functions 딕셔너리에서 설정한다.
functions 의 사용자 정의 스칼라 부분에 fvOptions 라는 딕셔너리로 다음과 같이 설정한다.
functions
{
...
<name>
{
type scalarTransport;
...
fvOptions
{
<name>
{
type scalarSemiImplicitSource;
volumeMode absolute;
sources
{
<uds name> (<value> 0.0);
}
selectionMode cellZone;
cellZone <cell zone name>;
}
}
}
}
고정값(Fixed Values)
속도, 온도, 난류 관련 필드 등의 값을 system/fvOptions 파일에서 고정할 수 있다.
속도
type 은 meanVelocityForce 이다.
입력한 속도는 Ubar 에, 완화계수는 relaxation 에 사용된다.
<name>
{
type meanVelocityForce;
active yes;
fields (U);
Ubar (<Ux> <Uy> <Uz>);
relaxation <value>;
selectionMode cellZone;
cellZone <cell zone name>;
}
온도
type 은 fixedTemperatureConstraint 이다.
입력한 온도는 temperature 에 사용된다.
fixedTemperature_porousZone
{
type fixedTemperatureConstraint;
active yes;
mode uniform;
temperature constant <value>;
selectionMode cellZone;
cellZone <cell zone name>;
}
난류, 화학종
type 은 scalarFixedValueConstraint 이다.
스칼라의 종류와 입력한 값은 fixedValues 딕셔너리에 사용된다.
fixedTemperature_porousZone
{
type scalarFixedValueConstraint;
active yes;
fieldValues
{
k <value>; // epsilon, omega, nuTilda
}
selectionMode cellZone;
cellZone <cell zone name>;
}
사용자 정의 스칼라
사용자 정의 스칼라의 고정값은 system/fvOptions 파일이 아닌 system/controlDict 파일의 functions 딕셔너리에서 설정한다.
functions 의 사용자 정의 스칼라 부분에 fvOptions 라는 딕셔너리로 다음과 같이 설정한다.
functions
{
...
<name>
{
type scalarTransport;
...
fvOptions
{
<name>
{
type scalarFixedValueConstraint;
active yes;
fieldValues
{
<uds name> <value>;
}
selectionMode cellZone;
cellZone <cell zone name>;
}
}
}
}
경계조건(Boundary Condition)
경계조건은 0 폴더 아래의 파일들에 설정된다.
입구속도(Velocity Inlet)
U
속도지정방법(Velocity Specification Method)이 경계면에 수직한 속도(Magnitude, Normal to Boundary)일 때
<boundayr name>
{
type surfaceNormalFixedValue;
refValue uniform -<value>;
}
속도지정방법(Velocity Specification Method)이 x, y, z 성분(Component)일 때
<boundayr name>
{
type fixedValue;
value uniform (<Ux> <Uy> <Uz>);
}
<boundayr name>
{
type uniformNormalFixedValue;
uniformValue table;
uniformValueCoeffs
{
values
(
(<time0> -<velocityMagnitude0>)
(<time1> -<velocityMagnitude1>)
(<time2> -<velocityMagnitude2>)
...
);
}
}
<boundayr name>
{
type uniformFixedValue;
uniformValue table;
uniformValueCoeffs
{
values
(
(<time0> (<Ux0> <Uy0> <Uz0>))
(<time1> (<Ux1> <Uy1> <Uz1>))
(<time2> (<Ux2> <Uy2> <Uz2>))
...
);
}
}
<boundayr name>
{
type timeVaryingMappedFixedValue;
points points_U;
}
<number of points>
(
(<x-coordinate0> <y-coordinate0> <z-coordinate0>)
(<x-coordinate1> <y-coordinate1> <z-coordinate1>)
...
)
<number of points>
(
(<Ux0> <Uy0> <Uz0>)
(<Ux1> <Uy1> <Uz1>)
...
)
p_rgh
<boundayr name>
{
type zeroGradient;
}
T
상수일 때
<boundayr name>
{
type fixedValue;
value uniform <value>;
}
<boundayr name>
{
type uniformFixedValue;
uniformValue table;
uniformValueCoeffs
{
values
(
(<time0> <T0>)
(<time1> <T1>)
(<time2> <T2>)
...
);
}
}
<boundayr name>
{
type uniformFixedValue;
uniformValue polynomial
(
(a0 0)
(a1 1)
(a2 2)
...
);
}
k
지정방법이 K와 Epsilon일 때
<boundayr name>
{
type inletOutlet;
inletValue uniform <inlet value>;
value uniform <value>;
}
<boundayr name>
{
type turbulentIntensityInletOutletTKE;
turbIntensity uniform <value>;
value uniform <value>;
}
epsilon, omega
지정방법이 K와 Epsilon일 때
<boundayr name>
{
type inletOutlet;
inletValue uniform <inlet value>;
value uniform <value>;
}
<boundayr name>
{
type viscosityRatioInletOutletTDR;
viscosityRatio uniform <value>;
value uniform <value>;
}
nuTilda
지정방법이 보정 난류 점상계수(Modifed Turbulent Viscosity)일 때
<boundayr name>
{
type fixedValue;
value uniform <value>;
}
<boundayr name>
{
type viscosityRatioInletOutletNuTilda;
viscosityRatio <value>;
value uniform <value>;
}
nut, alphat
<boundayr name>
{
type calculated;
value uniform <value>;
}
체적분율, 화학종, 사용자 정의 스칼라
<boundayr name>
{
type fixedValue;
value uniform <value>;
}
입구 유량(Flow Rate Inlet)
U
유량 정의 방법이 체적 유량(Volume Flow Rate)일 때
<boundayr name>
{
type flowRateInletVelocity;
volumetricFlowRate <value>;
}
<boundayr name>
{
type flowRateInletVelocity;
massFlowRate <value>;
rhoInlet <value>;
}
압력, 온도, 난류의 설정은 입구 속도 조건일 때와 같다.
입구 전압력(Pressure Inlet)
U
<boundayr name>
{
type pressureInletOutletVelocity;
value uniform <value>;
}
p_rgh
<boundayr name>
{
type totalPressure;
p0 uniform <value>;
}
온도, 난류의 설정은 입구 속도 조건일 때와 같다.
대기경계층 입구(ABL Inlet)
U
<boundayr name>
{
type atmBoundaryLayerInletVelocity;
flowDir (<x-dir> <y-dir> <z-dir>);
zDir (<x-dir> <y-dir> <z-dir>);
Uref <value>;
Zref <value>;
z0 <value>;
d <value>;
}
p_rgh
<boundayr name>
{
type zeroGradient;
}
k
<boundayr name>
{
type atmBoundaryLayerInletK;
flowDir (<x-dir> <y-dir> <z-dir>);
zDir (<x-dir> <y-dir> <z-dir>);
Uref <value>;
Zref <value>;
z0 <value>;
d <value>;
}
epsilon
<boundayr name>
{
type atmBoundaryLayerInletEpsilon;
flowDir (<x-dir> <y-dir> <z-dir>);
zDir (<x-dir> <y-dir> <z-dir>);
Uref <value>;
Zref <value>;
z0 <value>;
d <value>;
}
omega
<boundayr name>
{
type atmBoundaryLayerInletOmega;
flowDir (<x-dir> <y-dir> <z-dir>);
zDir (<x-dir> <y-dir> <z-dir>);
Uref <value>;
Zref <value>;
z0 <value>;
d <value>;
}
nut
<boundayr name>
{
type calculated;
value uniform <value>;
}
비압축성 자유류(Free Stream)
U
<boundayr name>
{
type freestreamVelocity;
freestreamValue uniform <value>;
}
p_rgh
<boundayr name>
{
type freestreamPressure;
freestreamValue uniform <value>;
}
T
<boundayr name>
{
type freestream;
freestreamValue uniform <value>;
}
k
지정방법이 K와 Epsilon일 때
<boundayr name>
{
type freestream;
freestreamValue uniform <value>;
}
<boundayr name>
{
type turbulentIntensityInletOutletTKE;
turbIntensity uniform <value>;
value uniform <value>;
}
epsilon, omega
지정방법이 K와 Epsilon일 때
<boundayr name>
{
type freestream;
freestreamValue uniform <inlet value>;
}
<boundayr name>
{
type viscosityRatioInletOutletTDR;
viscosityRatio uniform <value>;
value uniform <value>;
}
nuTilda
지정방법이 보정 난류 점상계수(Modifed Turbulent Viscosity)일 때
<boundayr name>
{
type freestream;
freestreamValue uniform <inlet value>;
}
<boundayr name>
{
type viscosityRatioInletOutletNuTilda;
viscosityRatio <value>;
value uniform <value>;
}
nut, alphat
<boundayr name>
{
type calculated;
value uniform <value>;
}
species, user defined scalar
<boundayr name>
{
type fixedValue;
value uniform <value>;
}
개수로 입구(Open Channel Inlet)
U
<boundayr name>
{
type variableHeightFlowRateInletVelocity;
alpha alpha.<secondary material name>;
flowRate <value>;
value uniform <value>;
}
p_rgh
<boundayr name>
{
type zeroGradient;
}
alpha.\
<boundayr name>
{
type variableHeightFlowRate;
lowerBound 0.0;
upperBound 1.0;
value uniform <value>;
}
난류의 설정은 입구 속도 조건일 때와 같다.
압축성 리만(Far-field Riemann)
U
<boundayr name>
{
type farfieldRiemann;
flowDir (<x-dir> <y-dir> <z-dir>);
MInf <value>;
pInf <value>;
TInf <value>;
value uniform (<Ux> <Ux> <Ux>);
}
p, T
<boundayr name>
{
type farfieldRiemann;
flowDir (<x-dir> <y-dir> <z-dir>);
MInf <value>;
pInf <value>;
TInf <value>;
value uniform <value>;
}
난류의 설정은 입구 속도 조건일 때와 같다.
아음속 입구(Subsonic Inlet)
U
<boundayr name>
{
type subsonicInlet;
flowDir (<x-dir> <y-dir> <z-dir>);
p0 <value>;
T0 <value>;
value uniform (<Ux> <Ux> <Ux>);
}
p, T
<boundayr name>
{
type subsonicInlet;
flowDir (<x-dir> <y-dir> <z-dir>);
p0 <value>;
T0 <value>;
value uniform <value>;
}
난류의 설정은 입구 속도 조건일 때와 같다.
초음속 입구(Supersonic Inflow)
U
<boundayr name>
{
type fixedValue;
value uniform (<Ux> <Ux> <Ux>);
}
p, T
<boundayr name>
{
type fixedValue;
value uniform <value>;
}
난류의 설정은 입구 속도 조건일 때와 같다.
출구 압력(Pressure Outlet)
U
Non-reflecging Boundary 옵션을 사용하지 않을 때
<boundayr name>
{
type pressureInletOutletVelocity;
value uniform (<Ux> <Ux> <Ux>);
}
<boundayr name>
{
type waveTransmissive;
gamma <value>;
}
p_rgh
Non-reflecging Boundary 옵션을 사용하지 않을 때
<boundayr name>
{
type totalPressure;
p0 uniform <value>; # value is static pressure
}
<boundayr name>
{
type waveTransmissive;
gamma <value>;
}
T
유입류 조건(Specify Backflow Properties) 옵션을 사용하지 않을 때
<boundayr name>
{
type zeroGradient;
}
<boundayr name>
{
type inletOutletTotalTemperature;
gamma <value>;
inletValue uniform <value>;
T0 uniform <value>;
}
k
유입류 조건(Specify Backflow Properties) 옵션을 사용하지 않을 때
<boundayr name>
{
type zeroGradient;
}
<boundayr name>
{
type inletOutlet;
inletValue uniform <value>;
value uniform <value>;
}
<boundayr name>
{
type turbulentIntensityInletOutletTKE;
turbIntensity uniform <value>;
value uniform <value>;
}
epsilon, omega
유입류 조건(Specify Backflow Properties) 옵션을 사용하지 않을 때
<boundayr name>
{
type zeroGradient;
}
<boundayr name>
{
type inletOutlet;
inletValue uniform <value>;
value uniform <value>;
}
<boundayr name>
{
type viscosityRatioInletOutletTDR;
inletValue uniform <value>;
value uniform <value>;
}
nuTilda
유입류 조건(Specify Backflow Properties) 옵션을 사용하지 않을 때
<boundayr name>
{
type zeroGradient;
}
<boundayr name>
{
type inletOutlet;
inletValue uniform <value>;
value uniform <value>;
}
<boundayr name>
{
type viscosityRatioInletOutletNuTilda;
inletValue uniform <value>;
value uniform <value>;
}
nut, alphat
Without Specify Backflow Properties
<boundayr name>
{
type zeroGradient;
}
<boundayr name>
{
type calculated;
value uniform <value>;
}
개수로 출구(Open Channel Outlet)
U
<boundayr name>
{
type outletPhaseMeanVelocity;
Umean <value>;
alpha alpha.<sescondary phase name>;
value uniform <value>;
}
p_rgh
<boundayr name>
{
type zeroGradient;
}
k
지정방법이 K와 Epsilon일 때
<boundayr name>
{
type inletOutlet;
inletValue uniform <value>;
value uniform <value>;
}
<boundayr name>
{
type turbulentIntensityInletOutletTKE;
turbIntensity uniform <value>;
value uniform <value>;
}
epsilon, omega
지정방법이 K와 Epsilon일 때
<boundayr name>
{
type inletOutlet;
inletValue uniform <value>;
value uniform <value>;
}
<boundayr name>
{
type viscosityRatioInletOutletTDR;
viscosityRatio uniform <value>;
value uniform <value>;
}
nuTilda
지정방법이 보정 난류 점상계수(Modifed Turbulent Viscosity)일 때
<boundayr name>
{
type inletOutlet;
inletValue uniform <value>;
value uniform <value>;
}
<boundayr name>
{
type viscosityRatioInletOutletNuTilda;
inletValue uniform <inlet value>;
value uniform <value>;
}
nut
<boundayr name>
{
type calculated;
value uniform <value>;
}
유출(Outflow)
U, p_rgh, T, k, epsilon, omega, nuTilda
<boundayr name>
{
type zeroGradient;
}
아음속 출구(Subsonic Outflow)
U, p, T
<boundayr name>
{
type subsonicOutflow;
pExit <value>;
value uniform <value>;
}
k, epsilon, omega, nuTilda
<boundayr name>
{
type zeroGradient;
}
nut, alphat
<boundayr name>
{
type calculated;
value uniform <value>;
}
초음속 출구(Supersonic Outflow)
U, p_rgh, T, k, epsilon, omega, nuTilda
<boundayr name>
{
type zeroGradient;
}
벽면(Wall)
U
정지(No Slip)
<boundayr name>
{
type fixedValue;
value uniform (0 0 0)
}
<boundayr name>
{
type slip;
}
<boundayr name>
{
type movingWallVelocity;
value uniform (0 0 0)
}
<boundayr name>
{
type fixedValue;
value uniform (0 0 0)
}
<boundayr name>
{
type fixedValue;
value uniform (<Ux> <Uy> <Uz>)
}
<boundayr name>
{
type rotatingWallVelocity;
origin (<x> <y> <z>);
axis (<x> <y> <z>);
omega <value>;
}
p_rgh
<boundayr name>
{
type fixedFluxPressure;
}
p of density based solver
<boundayr name>
{
type zeroGradient;
}
T
단열(Adiabatic)
<boundayr name>
{
type zeroGradient;
}
<boundayr name>
{
type fixedValue;
value uniform <value>;
}
<boundayr name>
{
type externalWallHeatFluxTemperature;
mode flux;
q uniform <value>;
kappaMethod fluidThermo;
value uniform <value>;
}
<boundayr name>
{
type externalWallHeatFluxTemperature;
mode coefficient;
h uniform <value>;
Ta uniform <value>;
kappaMethod fluidThermo;
value uniform <value>;
thicknessLayers (<value0> <value1> <...>);
kappaLayers (<value0> <value1> <...>);
}
k
<boundayr name>
{
type kqRWallFunction;
value uniform <value>;
}
epsilon
표준벽함수(Standard Wall Function)
<boundayr name>
{
type epsilonWallFunction;
value uniform <value>;
}
<boundayr name>
{
type epsilonBlendedWallFunction;
value uniform <value>;
}
<boundayr name>
{
type atmEpsilonWallFunction;
z0 <value>;
d <value>;
value uniform <value>;
}
omega
<boundayr name>
{
type omegaBlendedWallFunction;
blending tanh;
value uniform <value>;
}
nuTilda
<boundayr name>
{
type zeroGradient;
}
nut
표준벽함수(Standard Wall Function)
<boundayr name>
{
type nutkWallFunction;
value uniform <value>;
}
<boundayr name>
{
type nutSpaldingWallFunction;
value uniform <value>;
}
<boundayr name>
{
type atmNutkWallFunction;
z0 <value>;
value uniform <value>;
}
alphat
단열(Adiabatic) 조건일 때
<boundayr name>
{
type compressible::alphatWallFunction;
Prt <value>;
value uniform <value>;
}
<boundayr name>
{
type compressible::alphatJayatillekeWallFunction;
Prt <value>;
value uniform <value>;
}
연결 벽면(Thermo-Coupled Wall)
U
<boundayr name>
{
type fixedValue;
value uniform (0 0 0);
}
p_rgh
<boundayr name>
{
type fixedFluxPressure;
}
T
<boundayr name>
{
type compressible::turbulentTemperatureRadCoupledMixed;
Tnbr T;
kappaMethod fluidThermo;
value uniform <value>;
}
k
<boundayr name>
{
type kqRWallFunction;
value uniform <value>;
}
epsilon
표준벽함수(Standard Wall Function)
<boundayr name>
{
type epsilonWallFunction;
value uniform <value>;
}
<boundayr name>
{
type epsilonBlendedWallFunction;
value uniform <value>;
}
omega
<boundayr name>
{
type omegaBlendedWallFunction;
blending tanh;
value uniform <value>;
}
nuTilda
<boundayr name>
{
type zeroGradient;
}
nut
k-epsilon, 표준벽함수(Standard Wall Function)
<boundayr name>
{
type nutkWallFunction;
value uniform <value>;
}
<boundayr name>
{
type nutSpaldingWallFunction;
value uniform <value>;
}
alphat
<boundayr name>
{
type compressible::alphatJayatillekeWallFunction;
value uniform <value>;
}
영역간 인터페이스(Region Interface)
U
<boundayr name>
{
type fixedValue;
value uniform (0 0 0);
}
p_rgh
<boundayr name>
{
type fixedFluxPressure;
}
T
<boundayr name>
{
type compressible::turbulentTemperatureCoupledBaffleMixed;
}
k
<boundayr name>
{
type kqRWallFunction;
}
epsilon
standard wall function
<boundayr name>
{
type epsilonWallFunction;
}
<boundayr name>
{
type epsilonBlendedWallFunction;
}
omega
<boundayr name>
{
type omegaBlendedWallFunction;
}
nuTilda
<boundayr name>
{
type zeroGradient;
}
nut
k-epsilon, standard wall function
<boundayr name>
{
type nutkWallFunction;
}
<boundayr name>
{
type nutSpaldingWallFunction;
}
alphat
<boundayr name>
{
type compressible::alphatJayatillekeWallFunction;
}
2차원 경계(Empty)
<boundayr name>
{
type empty;
}
축대칭 경계(Wedge)
<boundayr name>
{
type wedge;
}
대칭(Symmetry)
<boundayr name>
{
type symmetry;
}
인터페이스(Interface)
<boundayr name>
{
type cyclicAMI;
}
Cyclic
<boundayr name>
{
type cyclic;
}
다공성 압력 점프(Porous Jump)
All fields except p_rgh
<boundayr name>
{
type cyclic;
}
<boundayr name>
{
type porousBafflePressure;
patchType cyclic;
D <value>;
I <value>;
length <value>;
value uniform <value>;
}
팬(Fan)
All fields except p_rgh
<boundayr name>
{
type cyclic;
}
<boundayr name>
{
type fan;
patchType cyclic;
jumpTable csvFile;
jumpTableCoeffs
{
nHeaderLine 0;
refColumn 0;
componentColumns (1);
separator ",";
mergeSeparators no;
file "<path and file name>";
}
}
수치해석 기법(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>;
}
}
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;
}
interpolationSchemes
{
default linear;
interpolate(p) momentumWeighted;
interpolate(p_rgh) momentumWeighted;
}
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>;
...
}
...
}
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>;
}
}
PIMPLE
{
...
residualControl
{
...
p_rgh
{
tolerance <value>;
relTol <value>;
}
U
{
tolerance <value>;
relTol <value>;
}
...
}
}
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;
}
모니터(Monitor)
모니터링은 system/controlDict 파일의 functions 딕셔너리를 사용한다.
힘(Force)
functions
{
...
<name of forces>
{
type forces;
libs ("/baram/solvers/openfoam/lib/libforces.so");
patches
(
<patch name 1>
...
);
CofR (<x> <x> <x>);
updateHeader false;
log false;
executeControl timeStep;
executeInterval 1;
writeControl timeStep;
writeInterval <value>;
}
<name of force coefficients>
{
type forceCoeffs;
libs ("/baram/solvers/openfoam/lib/libforces.so");
patches
(
<patch name 1>
...
);
coefficients (Cd Cl CmPitch);
rho rho;
Aref <value>;
lRef <value>;
magUInf <value>;
rhoInf <value>;
dragDir (<x-dir> <y-dir> <z-dir>);
liftDir (<x-dir> <y-dir> <z-dir>);
CofR (<x> <y> <z>);
updateHeader false;
log false;
pRef <value>;
executeControl timeStep;
executeInterval 1;
writeControl timeStep;
writeInterval <value>;
}
}
점(Point)
functions
{
...
<name>
{
type probes;
libs ("/baram/solvers/openfoam/lib/libsampling.so");
fields (<field>);
probeLocations ( (<x> <y> <z>) );
updateHeader false;
log false;
executeControl timeStep;
executeInterval 1;
writeControl timeStep;
writeInterval <value>;
}
}
면(Surface)
functions
{
...
<name>
{
type surfaceFieldValue;
libs ("/baram/solvers/openfoam/lib/libfieldFunctionObjects.so");
regionType patch;
name <patch name>;
surfaceFormat none;
fields (<field>);
operation <value>;
writeFields false;
updateHeader false;
log false;
executeControl timeStep;
executeInterval 1;
writeControl timeStep;
writeInterval <value>;
}
}
체적(Volume)
functions
{
...
<name>
{
type volFieldValue;
libs ("/baram/solvers/openfoam/lib/libfieldFunctionObjects.so");
regionType cellZone;
name <cel zone name>;
fields (<field>);
operation <value>;
writeFields false;
updateHeader false;
log false;
executeControl timeStep;
executeInterval 1;
writeControl timeStep;
writeInterval <value>;
}
}
잔차(Residual)
잔차 데이터를 생성하고 저장하기 위해서 system/controlDict 파일의 functions 딕셔너리를 사용한다.
fields 는 솔버에 따라 다르게 설정된다.
functions
{
...
<name>
{
type solverInfo;
libs ("/baram/solvers/openfoam/lib/libutilityFunctionObjects.so");
executeControl timeStep;
executeInterval 1;
writeResidualFields no;
fields
(
U
p_rgh
k
epsilon
...
);
}
}
초기화(Initialization)
특정 부분을 초기화할 때 system/setFields 파일을 사용한다.
defaultFieldValues 의 값은 전체 영역에 대해 설정한 값이며, regions 의 값은 특정 영역에 대해 설정한 값이다.
defaultFieldValues
(
volScalarFieldValue <field> <value>
...
);
regions
(
boxToCell
{
box (<x1> <y1> <z1>) (<x2> <y2> <z2>);
fieldValues
(
volScalarFieldValue <field> <value>
...
);
}
...
);
defaultFieldValues
(
volScalarFieldValue alpha.<secondary phase1> <value>
volScalarFieldValue alpha.<primaty phase> <1-value>
);
regions
(
boxToCell
{
box (<x1> <y1> <z1>) (<x2> <y2> <z2>);
fieldValues
(
volScalarFieldValue alpha.<secondary phase1> <value>
volScalarFieldValue alpha.<primaty phase1> <1-value>
);
}
);
계산 조건(Run Conditions)
계산 조건은 system/controlDict 파일에 다음과 같이 설정된다.
application <solver>;
startFrom latestTime;
startTime 0;
stopAt endTime;
endTime <value>;
deltaT <value>;
writeControl adjustableRunTime;
writeInterval <value>;
purgeWrite <value>;
writeFormat <binary or ascii>;
writePrecision <value>;
writeCompression off;
writeAtEnd true;
timeFormat general;
timePrecision <value>;
runTimeModifiable yes;
adjustTimeStep <yes or no>;
maxCo <value>;
maxDi <value>;
maxAlphaCo <value>;
- endTime : 계산 회수(Number of Iteration) 혹은 종료 시간(End Time)의 값
- deltaT : 시간 전진 간격(Time Step Size)의 값
- writeInterval : 자동 저장 간격(Save Interval)의 값
- purgeWrite : 가장 최근 파일만 저장(Retain Only the Most Recent Files)의 값
- writeFormat : 데이터 저장 포맷(Data Write Format)의 값
- writePrecision : 데이터 저장 유효숫자(Data Write Precision)의 값
- timePrecision : 시간 저장 유효숫자(Time Precision)의 값
- adjustTimeStep : 시간 전진 방법(Time Stepping Method)의 값
- maxCo : Courant Number의 값
- maxDi : Maximum Diffusion Number의 값
- maxAlphaCo : Max Courant Number for VoF의 값