콘텐츠로 이동

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 설정과 그에 따른 딕셔너리가 필요하다. 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의 값