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 설정과 그에 따른 딕셔너리가 필요하다. simulationTypelaminar, RAS, LES 등이 있다.

turbulenceprintCoeffs 는 항상 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>;
    }
}

Herschel-Bulkley

laminar
{
    model           generalizedNewtonian;
    viscosityModel  HerschelBulkley;
    HerschelBulkleyCoeffs
    {
        nu0     <value>;
        tau0    <value>;
        k       <value>;
        n       <value>;
    }
}

Bird-Carreau

laminar
{
    model           generalizedNewtonian;
    viscosityModel  BirdCarreau;
    BirdCarreauCoeffs
    {
        nu0     <value>;
        nuInf   <value>;
        k       <value>;
        n       <value>;
        a       <value>;
    }
}

Non-Newtonian power law

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)의 값이다.

ReyStardeltaRey 는 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>;
    }

Kinetic-Energy Transport

    dynamicKEqnCoeffs
    {
        filter      simple;
        Sct         <value>;
    }

One Equation Eddy Viscosity

    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;
        }
    }

smooth

    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 모델은 LESModel 에서 설정하고 Length-Scale 모델은 delta 에서 설정한다.

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 파일의 SIMPLEPIMPLE 딕셔너리의 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 에 사용되고, 층류 및 난류 확산계수인 경우는 alphaDalphaDt 에 사용된다.

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 딕셔너리

thermoTypemixture, 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

CpHf 를 설정한다. Cp 는 정압비열이며 Hf 는 생성열이다. BaramFlow에는 아직 화학반응이 포함되어 있지 않기 때문에 Hf 는 사용되지 않으며 항상 0으로 설정된다.

정압비열이 상수일 때 다음과 같다.

thermodynamics
{
    Cp  <value>;
    Hf  0;
}

정압비열이 다항식일 때는 다음과 같다.

thermodynamics
{
    Hf          0;
    Sf          0;
    CpCoeffs<8> (<a0> <a1> <a2> ... <a7>)
}

Sf 는 표준 엔트로피(standard entropy)이며 BaramFlow에는 아직 화학반응이 포함되어 있지 않기 때문에 Sf 는 사용되지 않으며 항상 0으로 설정된다.

다항식은 아래의 식과 같이 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>)
}

점성계수가 Sutherland일 때는 다음과 같다.

transport
{
    As  <value>;
    Ts  <value>;
}

As 는 Sutherland 계수, Ts 는 Sutherland 온도

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>;
}

Kunz, Merkle 모델

KunzCoeffs // MerkleCoeffs
{
    UInf    <value>;
    tInf    <value>;
    Cc      <value>;
    Cv      <value>;
}

Zwart-Gerber-Belamri 모델

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는 coordinateSysteme1, e2 에 사용된다. 관성저항계수와 점성저항계수는 DarcyForchheimerCoeffsfd 에 사용된다.

<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 에서 ( )와 같이 주는데 입력한 값은 explicit value에 쓰고 implicit value에는 0.0을 쓴다.

값의 크기 설정 방법(Specification Method)는 전체 체적에 대한 값(Value for Entire Cell Zone)과 단위 체적당 값(Value per Unit Volume) 두 가지가 있으며 volumeMode 에서 설정한다. 전체 체적에 대한 값은 absolute, 단위 체적당 값은 specific 이다.

셀존이 아닌 전체 영역에 생성항을 줄 때는 selectionModeall 이 된다.

<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 파일에서 고정할 수 있다.

속도

typemeanVelocityForce 이다.

입력한 속도는 Ubar 에, 완화계수는 relaxation 에 사용된다.

<name>
{
    type            meanVelocityForce;
    active          yes;
    fields          (U);
    Ubar            (<Ux> <Uy> <Uz>);
    relaxation      <value>;
    selectionMode   cellZone;
    cellZone        <cell zone name>;
}

온도

typefixedTemperatureConstraint 이다.

입력한 온도는 temperature 에 사용된다.

fixedTemperature_porousZone
{
    type            fixedTemperatureConstraint;
    active          yes;
    mode            uniform;
    temperature     constant <value>;
    selectionMode   cellZone;
    cellZone        <cell zone name>;
}

난류, 화학종

typescalarFixedValueConstraint 이다.

스칼라의 종류와 입력한 값은 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>)
            ...
        );
    }
}

시간에 따른 속도분포를 사용할 때, 속도지정방법이 x, y, z 성분이면

<boundayr name>
{
    type            uniformFixedValue;
    uniformValue    table;
    uniformValueCoeffs
    {
        values
        (
            (<time0>  (<Ux0> <Uy0> <Uz0>))
            (<time1>  (<Ux1> <Uy1> <Uz1>))
            (<time2>  (<Ux2> <Uy2> <Uz2>))
            ...
        );
    }
}

속도의 공간분포를 사용할 때, x, y, z 좌표 파일은 constant/boundaryData//points_U 이고, Ux, Uy, Uz 파일은 constant/boundaryData//0/U 이다.

<boundayr name> 
{
    type    timeVaryingMappedFixedValue;
    points  points_U;
}

constant/boundaryData//points_U

<number of points>
(
    (<x-coordinate0> <y-coordinate0> <z-coordinate0>)
    (<x-coordinate1> <y-coordinate1> <z-coordinate1>)
    ...    
)

constant/boundaryData//0/U

<number of points>
(
    (<Ux0> <Uy0> <Uz0>)
    (<Ux1> <Uy1> <Uz1>)
    ...    
)

p_rgh

<boundayr name>
{
    type     zeroGradient;
}

T

상수일 때

<boundayr name>
{
    type    fixedValue;
    value   uniform <value>;
}

시간에 따른 변화에 조각별 선형함수(piecewise linear)를 사용할 때

<boundayr name> 
{
    type            uniformFixedValue;
    uniformValue    table;
    uniformValueCoeffs
    {
        values
        (
            (<time0>    <T0>)
            (<time1>    <T1>)
            (<time2>    <T2>)
            ...
        );
    }
}

시간에 따른 변화에 다항식(polynomial)을 사용할 때

<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>;
}

지정방법이 난류강도와 점도비율(Intensity and Viscosity Ratio)일 때

<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>;
}

지정방법이 난류강도와 점도비율(Intensity and Viscosity Ratio)일 때

<boundayr name>
{
    type            viscosityRatioInletOutletTDR;
    viscosityRatio  uniform <value>;
    value           uniform <value>;
}

nuTilda

지정방법이 보정 난류 점상계수(Modifed Turbulent Viscosity)일 때

<boundayr name>
{
    type    fixedValue;
    value   uniform <value>;
}

지정방법이 난류 점도비율(Turbulent Viscosity Ratio)일 때

<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>;
}

유량 정의 방법이 질량 유량(Mass Flow Rate)일 때

<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>;
}

지정방법이 난류강도와 점도비율(Intensity and Viscosity Ratio)일 때

<boundayr name>
{
    type            turbulentIntensityInletOutletTKE;
    turbIntensity   uniform <value>;
    value           uniform <value>;
}

epsilon, omega

지정방법이 K와 Epsilon일 때

<boundayr name>
{
    type            freestream;
    freestreamValue uniform <inlet value>;
}

지정방법이 난류강도와 점도비율(Intensity and Viscosity Ratio)일 때

<boundayr name>
{
    type            viscosityRatioInletOutletTDR;
    viscosityRatio  uniform <value>;
    value uniform   <value>;
}

nuTilda

지정방법이 보정 난류 점상계수(Modifed Turbulent Viscosity)일 때

<boundayr name>
{
    type            freestream;
    freestreamValue uniform <inlet value>;
}

지정방법이 난류 점도비율(Turbulent Viscosity Ratio)일 때

<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>);
}

Non-reflecging Boundary 옵션을 사용할 때

<boundayr name>
{
    type    waveTransmissive;
    gamma   <value>;
}

p_rgh

Non-reflecging Boundary 옵션을 사용하지 않을 때

<boundayr name>
{
    type    totalPressure;
    p0      uniform <value>; # value is static pressure
}

Non-reflecging Boundary 옵션을 사용할 때

<boundayr name>
{
    type    waveTransmissive;
    gamma   <value>;
}

T

유입류 조건(Specify Backflow Properties) 옵션을 사용하지 않을 때

<boundayr name>
{
    type    zeroGradient;
}

유입류 조건(Specify Backflow Properties) 옵션을 사용할 때

<boundayr name>
{
    type        inletOutletTotalTemperature;
    gamma       <value>;
    inletValue  uniform <value>;
    T0          uniform <value>;
}

k

유입류 조건(Specify Backflow Properties) 옵션을 사용하지 않을 때

<boundayr name>
{
    type    zeroGradient;
}

유입류 조건(Specify Backflow Properties) 옵션을 사용하고, 지정방법이 K와 Epsilon일 때

<boundayr name>
{
    type        inletOutlet;
    inletValue  uniform <value>;
    value       uniform <value>;
}

유입류 조건(Specify Backflow Properties) 옵션을 사용하고, 지정방법이 난류강도와 점도비율(Intensity and Viscosity Ratio)일 때

<boundayr name>
{
    type            turbulentIntensityInletOutletTKE;
    turbIntensity   uniform <value>;
    value           uniform <value>;
}

epsilon, omega

유입류 조건(Specify Backflow Properties) 옵션을 사용하지 않을 때

<boundayr name>
{
    type    zeroGradient;
}

유입류 조건(Specify Backflow Properties) 옵션을 사용하고, 지정방법이 K와 Epsilon일 때

<boundayr name>
{
    type        inletOutlet;
    inletValue  uniform <value>;
    value       uniform <value>;
}

유입류 조건(Specify Backflow Properties) 옵션을 사용하고, 지정방법이 난류강도와 점도비율(Intensity and Viscosity Ratio)일 때

<boundayr name>
{
    type        viscosityRatioInletOutletTDR;
    inletValue  uniform <value>;
    value       uniform <value>;
}

nuTilda

유입류 조건(Specify Backflow Properties) 옵션을 사용하지 않을 때

<boundayr name>
{
    type    zeroGradient;
}

유입류 조건(Specify Backflow Properties) 옵션을 사용하고, 지정방법이 보정 난류 점상계수(Modifed Turbulent Viscosity)일 때

<boundayr name>
{
    type        inletOutlet;
    inletValue  uniform <value>;
    value       uniform <value>;
}

유입류 조건(Specify Backflow Properties) 옵션을 사용하고, 지정방법이 난류 점도비율(Turbulent Viscosity Ratio)일 때

<boundayr name>
{
    type        viscosityRatioInletOutletNuTilda;
    inletValue  uniform <value>;
    value       uniform <value>;
}

nut, alphat

Without Specify Backflow Properties

<boundayr name>
{
    type    zeroGradient;
}

With Specify Backflow Properties, Intensity and Viscosity Ratio

<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>;
}

지정방법이 난류강도와 점도비율(Intensity and Viscosity Ratio)일 때

<boundayr name>
{
    type            turbulentIntensityInletOutletTKE;
    turbIntensity   uniform <value>;
    value           uniform <value>;
}

epsilon, omega

지정방법이 K와 Epsilon일 때

<boundayr name>
{
    type        inletOutlet;
    inletValue  uniform <value>;
    value       uniform <value>;
}

지정방법이 난류강도와 점도비율(Intensity and Viscosity Ratio)일 때

<boundayr name>
{
    type            viscosityRatioInletOutletTDR;
    viscosityRatio  uniform <value>;
    value           uniform <value>;
}

nuTilda

지정방법이 보정 난류 점상계수(Modifed Turbulent Viscosity)일 때

<boundayr name>
{
    type        inletOutlet;
    inletValue  uniform <value>;
    value       uniform <value>;
}

지정방법이 난류 점도비율(Turbulent Viscosity Ratio)일 때

<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)
}

미끄럼 벽(Slip)

<boundayr name>
{
    type    slip;
}

움직이는 벽(Moving Wall)

<boundayr name>
{
    type    movingWallVelocity;
    value   uniform (0 0 0)
}

대기경계층 지표면(Atmospheric Wall)

<boundayr name>
{
    type    fixedValue;
    value   uniform (0 0 0)
}

직선 속도(Translational Moving Wall)

<boundayr name>
{
    type    fixedValue;
    value   uniform (<Ux> <Uy> <Uz>)
}

회전 속도(Rotational Moving Wall)

<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;
}

일정 온도(Constant Temperature)

<boundayr name>
{
    type    fixedValue;
    value   uniform <value>;
}

일정 열유속(Constant Heat Flux)

<boundayr name>
{
    type        externalWallHeatFluxTemperature;
    mode        flux;
    q           uniform <value>;
    kappaMethod fluidThermo;
    value       uniform <value>;
}

외부로 대류열전달(Convection)

<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>;
}

Two layer 벽함수

<boundayr name>
{
    type    epsilonBlendedWallFunction;
    value   uniform <value>;
}

대기경계층 지표면(Atmospheric Wall)

<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>;
}

Two layer 벽함수, SST k-omega 모델, Spalart-Allmaras 모델

<boundayr name>
{
    type    nutSpaldingWallFunction;
    value   uniform <value>;
}

대기경계층 지표면(Atmospheric Wall)

<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>;
}

Two layer 벽함수

<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>;
}

k-omega, Two-layer 벽함수, Spalart-Allmaras

<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;    
}

two layer wall function

<boundayr name>
{
    type    epsilonBlendedWallFunction;    
}

omega

<boundayr name>
{
    type    omegaBlendedWallFunction;    
}

nuTilda

<boundayr name>
{
    type    zeroGradient;    
}

nut

k-epsilon, standard wall function

<boundayr name>
{
    type    nutkWallFunction;    
}

two layer wall function, SST k-omega, Spalart-Allmaras

<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;
}

p_rgh

<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;
}

p_rgh

<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>;
    }
}

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;
}

모니터(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>;
    }
}

저장 간격(Write Interval)은 writeInterval 에 설정된다. 유동 방향(Flow Direction)의 항력 방향(Drag Direction)은 dragDir 에, 양력 방향(Lift Direction)은 liftDir 에, 회전중심(Center of Rotation)은 CofR 에 설정된다. 경계면(Boundaries)에 선택된 것들은 patches 에 설정된다.

점(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>;
    }
}

저장 간격(Write Interval)은 writeInterval 에, 유동 변수(Field)는 fields 에, 좌표(Coordidate)는 probeLocations 에 설정된다.

면(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>;
    }
}

저장 간격(Write Interval)은 writeInterval 에, 유동 변수(Field Variable)은 fields 에, 함수(Report Type)은 operation 에, 면(Surface)는 name 에 설정된다.

체적(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>;
    }
}

저장 간격(Write Interval)은 writeInterval 에, 유동 변수(Field Variable)은 fields 에, 함수(Report Type)은 operation 에, 체적(Volume)은 name 에 설정된다.

잔차(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>
            ... 
        );
    }
    ... 
);

다상유동의 체적분율(alpha)을 초기화할 때는 다음과 같이 모든 상을 값을 설정한다.

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> 
        );
    } 
);

첫번째 상(Primary phase)의 값은 전체 값의 합이 1이 되도록 결정된다.

계산 조건(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의 값