티스토리 뷰

일본어 원문링크


작성일 : 2015년 10월 10일
번역일 : 2016년  2월    1


크롬 브라우저로 보시는 것을 권장해 드립니다.



미번역된 페이지들은 일본어 원본 링크 되어있습니다. 

댓글달아주시면 우선적으로 번역하도록 하겠습니다.



  들어가기 


OpenFOAM 설정파일의 형식에 대해



  기준 OpenFOAM 버전 


OpenFOAM 2.4.0


 

  설정파일의 형식 


OpenFOAM의 설정파일은 C++언어의 소스코드와 유사한 양식으로 작성된다.

 

Comments

C++와 같은 형식의 커맨트문을 사용할수 있다. 적 "/*"과 "*/"의 사이 또는 "//"로 시작하는 행을 커맨트로 인식하고 무시한다.

 

Header

설정파일에는 다음과 같은 헤더가 사용된다.


FoamFile {

version     2.0;

format     ascii;

class       dictionary;

location    "constant";

object     transportProperties;

}


필드데이터의 경우, class에 아래와 같은 필드 클래스를 적는다.
  • volScalarField : 스칼라장(압력이나 온도 등)
  • volVectorField : 벡터장(속도 등)
  • volSymmTensorField : 대칭텐서장(레이놀즈응력 등)

Dictionary

OpenFOAM의 데이터에는 사전(Dictionary, 딕셔너리)라는 형식이 사용된다. 딕셔너리는 아래와 같이 기술한다.


<딕너리리 이름> { ... 키워드 ... };


키워드 부분은, 다음과 같은 형식이다.

<키워드> <항목 1> <항목 2> ... <항목 N>;


마지막에는 꼭 세미콜론을 붙여야 한다.


예를 들어 아래와 같다.


boundaryField

{

inlet

{

type         fixedValue;

value        uniform (1 0 0);

}


outlet

{

type         zeroGradient;

}


wall

{

type         fixedValue;

value        uniform (0 0 0);

}

}


위의 예와 같이 딕셔너리는 하위 딕셔너리(sub Dictionary)를 가질 수 있다.


딕셔너리명과 키워드는 이중인용부호를 이용해 정규화하고 있다. 가능한 전부에 대해 기술하려면 ".*"로 표현가능하다. 이름의 끝에 Final이 있는 모든 것을 선택하려면 ".*Final"로 기술한다. k 또는 epsilon을 선택하려면 "(k|epsilon)"으로 표현한다. kFinal 또는 epsilonFinal을 선택하려면 "(k|epsilon)Final"로 기술가능하다. 아래는 사용예이다.


relaxationFactors

{

fields

{

p             0.3;

}

equations

{

U             0.7;

"(k|epsilon|omega|R)" 0.7;

}

}


 

List

괄호 안에 다수의 데이터를 합쳐 기술하는 것을 리스트라고 한다. 리스트는 아래와 같은 형식으로 지정되어있다.


<리스트 이름>

<리스트 갯수>

(

...항목...

);


리스트이름이나 리스트 갯수는 생략하는 경우도 있다. 또한, 다음과 같이 항목을 클래스로 정의하기도 한다.

<리스트 이름>

List <클래스 이름>

<리스트 수>

(

...항목...

);


 

벡터와 텐서(Vector and Tensor)

벡터는 예를들어 X 방향으로 1 m/s, Y방향과 Z방향으로는 0 m/s의 속도를 표현할때 아래와 같이 기술한다.

(1 0 0)

(2단의) 텐서의 경우, 9개성분을 나란히 적는다. 단위텐서를 행렬식으로 적으면 아래와 같이 표현할 수 있다.

(

1 0 0

0 1 0

0 0 1

)

대칭텐서의 경우, 6개 성분을 지정한다. 단위 텐서를 행렬식으로 적으면, 아래와 같다.

(

1 0 0

1 0

1

)


 

단위를 포함하는 데이터

단위를 가지는 데이터는 예를들어 아래와 같이 지정한다.

nu            nu [ 0 2 -1 0 0 0 0 ] 1e-05;

처음의 "nu"는 키워드, 다음의 "nu"는 데이터 이름(보통은 키워드와 같다), 그리고 뒤의 항목은 단위 차원(dimension), 마지막은 값에 해당한다.


단위는, 다음과 같은 형식으로 각단위에 숫자로 지정한다.

[kg m s K mol A Cd]

예를들어 m/s이면 "[0 1 -1 0 0 0 0]"이다.

 


파일 불러오기

#include문으로 파일을 불러올 수 있다.

#include "파일명"

OpenFOAM 2.4.0부터 $FOAM_ETC이하의 파일을 불러올때는 #includeEtc도 사용가능하다.

#includeEtc "caseDicts/setConstraintTypes"

 

값의 참조

"$이름"으로 딕셔너리나 키워드의 값을 참조할 수 있다.

solvers

{

p

{

solver            PCG;

preconditioner    DIC;

tolerance         1e-06;

relTol            0.01;

}


pFinal

{

$p;

tolerance         1e-06;

relTol            0;

}


...생략...

}

위의 예와 같이, "$p"에 의해 딕셔너리  p의 항목이 딕셔너리 pFinal에 불러진다.


딕셔너리이름 또는 키워드에는 기본적으로 솔버나 유틸리티등의 프로그램이 필요로 하는 것을 지정하지만 임의의 이름을 사용할 수 있으며, 그것을 참조할수도 있다.

 


식을 지정할때는 아래와 같은 기술로 가능하다.

value        uniform (#calc "pow(200.,2)/(pow(50.,2)*3.14)*10." 0 0);

 

코드

식을 코드로 계싼하도록 지정하려면 아래와 같은 기술로 가능하다.

L            200.;

D            50.;

Ux0          10.;

Ux           #codeStream

{

code

#{

const scalar pi = constant::mathematical::pi;

os << pow($L,2)/pow($D,2)*pi)*$Ux0;

#};

};

value        uniform ($Ux 0 0);



댓글