perfectFluid를 사용하여 물의 밀도를 온도의 함수로 나타내는 방법

 perfectFluid를 사용하면 밀도는 다음의 식으로 계산된다. rho = p / RT + rho0 위 식에서 R은 기체일 때는 기체상수이며, 액체일 때는 rho/(beta * T)가 된다. beta는 compressibility이다. 예) 25'C 물의 밀도는 997 kg/m3, compressibility는 4.609e-10 m2/N 이므로 R = 997  / (4.609e-10 * 298.15) = 7255 (ESI 버전의 튜토리얼에 있는 값) perfectFluid를 사용할 때 thermophysicalProperties는 다음과 같이 설정한다. ... thermoType {     type                              heRhoThermo;     mixture                       pureMixture;     equationOfState      perfectFluid;     ... } mixture {     ...     equationOfState     {          R          7255;          rho0     997;     } ... } 물인 경우 다음과 같이 간단하게 사용할 수도 있다. ... thermoType {     type    ...

계산영역 내부의 patch 사용법 - baffle, porousJump, fan

 계산영역 내부에 두께가 없는 경계면(patch)을 만들고 이를 이용해서 baffle, porous jump, fan 등에 사용할 수 있는 방법을 설명한다. 계산영역 내부에 경계면을 만들기 위해서는 같은 위치에 master와 slave라는 두 개의 면이 있어야하고 이 두 면은 cyclic 혹은 mappedWall이라는 polyPatchType으로 연결되어 있어야 한다. snappyHexMesh로 격자를 만든다면 원하는 위치에 faceZone을 만들어 주어야 한다. fluentMeshToFoam 유틸리티를 이용할 때는 -writeSets 옵션을 사용하면 interior면이 faceSet으로 만들어진다. faceSet은 topoSet 유틸리티를 이용해서 faceZone으로 만들어 준다. topoSetDict 파일은 다음과 같다. --- topoSetDict ------------------------------------------- actions (     {          name               <name>;          type                  faceZoneSet;          action               new;          source             setToFaceZone;          sourceInfo      ...

복사열전달이 포함된 문제에서 단열조건 사용 방법

 복사열전달을 무시하는 경우 단열 벽면 조건은 온도 T의 조건을 zeroGradient를 사용하면 된다. 그러나 복사열전달이 있는 경우 zeroGradient 조건을 사용하면 벽면의 온도에 복사열전달의 영향이 전혀 나타나지 않는다. 단열 조건은 total heat flux가 0이라는 조건이므로,  복사에 의한 heat flux(qr)이 포함된 전체 heat flux가 0이 되어야 한다. 따라서 zeroGradient 조건 대신 externalWallHeatFluxTemperature 조건을 사용하고 heat flux를 0으로 주어야 한다. 이 조건에서는 계산의 안정성을 위해 qr에 대한 relaxation factor를 사용할 수 있다. 다음과 같이 사용된다. 0/T file ... adiabaticWall { type                         externalWallHeatFluxTemperature; kappaMethod     fluidThermo; mode                       flux; // optional qr                              qr; // field name of radiative heat flux  qrRelaxation        0.9; // relaxation factor of qr q                 ...

kOmegaSST 모델에서 벽함수 사용하지 않는 방법

 kOmegaSST 모델을 사용할 때 벽함수를 사용하지 않으려면 0 폴더의 k, omega, nut 파일을 다음과 같이 설정하면 된다. 1. 0/k wing { type                fixedValue; value               uniform 0;   }   2. 0/omega wing { type             omegaWallFunction; Cmu               0.09; kappa              0.41; E                  1.0e20; // 매우 큰값 beta1            0.075; blended        false;  value            $internalField; }   3. 0/nut wing { type             nutLowReWallFunction; Cmu            0.09; kappa        ...

Paraview에서 Surface Oil Flow 그리는 방법

이미지
Paraview에서 Surface oil flow를 그리는 2가지 방법이다. 하나는 Stream tracer를 이용하는 방법이며 다른 하나는 Surface LIC(Line Integral Convolution) plugin을 이용하는 방법이다. 1. Stream trancer를 이용하는 방법 Surface oil flow in paraview 원하는 Surface에서 SurfaceVector를 만들고 MaskPoint를 생성한다. 그리고 [Stream Tracer With Custom Source] 필터에서 input은 SurfaceVector, source는 MaskPoint를 선택하면 된다.  surfaceVector를 만들 때 surface가 noSlip wall이면 input vector는 wallShearStress를 선택한다. 1) paraFoam을 실행하고 원하는 면을 선택하여 Surface를 그린다. 2) Filters 메뉴에서 [Surface Vectors]를 선택한다 - surfaceVectors1이 생성된다. - Select Input Vectors에서 wallShearStress를 선택한다.  - wallShearStress 필드 생성 방법 OpenFOAM의 standard solver는 wallShearStress를 생성하지 않기 때문에 postProcess를 이용해서   wallShearStress 필드를 생성해 주어야 한다. 터미널에서 해당 폴더로 이동해서 아래의 명령을 입력하면 생성된다. $ <solver> -postProcess -func wallShearStress <options> 예1) $ simpleFoam -postProcess -func wallShearStress -lastestTime 예2) $ mpirun -np 8 simpleFoam -postProcess -func wallShearStress -time 100:1000 -parallel   3)...

유틸리티를 이용한 간편한 경계조건 셋업

1. 개요 OpenFOAM은 TUI(text user interface) 환경에서 사용해야 하기 때문에 해석을 위한 수치조건, 경계조건, 모델선택 등등 설정에 번거로운 점이 많다. 특히 경계조건 설정의 경우 각 경계면 마다 해석하는 solver에 맞는 field values에 각각 사용자가 원하는 경계조건을 입력해줘야 한다. 이러한 방식은 사용자로 하여금 OpenFOAM에서 제공하는 경계조건(OpenFOAM에서 말하는 basic/derived type)을 숙지해야하며 사용자가 입력 과정에서의 실수로 해석이 진행이 안되는 상황을 발생 시킬 수 있다. 오픈폼 사용을 위해 주로 사용하는 경계조건 타입을 특정 파일로 정리하고, 이를 이용한다면 사용자 입력 오류를 방지할 수 있으며 손쉽게 경계조건 설정이 가능할 것이다. 예를 들어 입출구를 가지는 일반적인 유동해석의 경우 입구나 출구에 사용하는 경계조건(입구: fixedValue, flowRateInletVelocity, surfaceNormalVelocity 등, 출구: zeroGradient, inletOutlet, totalPressure 등)을 정리하고, 이렇게 정리된 파일을 참고하여 사용자가 원하는 경계조건을 각 경계면에 사용할 수 있다. 이러한 방식은 OpenFOAM에서 주로 사용하는 방식이다. OpenFOAM에서는 해석 셋업에 필요한 특정 파일을 dictionary라 명하고 전처리, 후처리, 해석 셋업 등에 활용하고 있다. OpenFOAM에서 제공하는 dictionary 파일들은 '$WM_PROJECT_DIR/etc/caseDicts' 위치에서 확인이 가능하다. 이러한 방법을 응용해서 넥스트폼은 경계조건 설정을 위한 유틸리티(setConditions)와 특정 파일(API, boundaryConditions)을 제공하고 있으며 사용자는 간편하고 정확하게 경계조건 설정을 할 수 있다. 2. 특징 -유동해석을 위한 간편한 경계조건 설정 가능 -사용자 입력 오류를 방지 -정확한 경계조건 설정 가능 -...

Docker를 이용해 Linux에서 Baram 사용하기

이미지
넥스트폼에서 Baram-v6.1의 Docker 이미지를 Docker hub에 공개하였다. 이를 이용하면 OpenFOAM 설치 없이 Baram을 쉽게 사용할 수 있다. Baram-v6.1에서 사용하는 OpenFOAM 버전은 openfoam6이다.  넥스트폼 홈페이지( http://nextfoam.co.kr/pd-Baram.php )에 공개된 Install-BARAM-v6.1.3_Docker.tar.xz 파일의 압축을 풀면 같은 이름의 폴더가 생성된다. 터미널에서 이 폴더로 이동해서 install 파일을 실행하면 설치가 완료되고 바탕화면에 아이콘이 생성된다. Baram-v6 아이콘을 더블 클릭하면 Baram이 구동된다. 도커는 사용자가 nextfoam이며 /home/nextfoam 아래에 OpenFOAM, tmp 등의 폴더와 함께 자신의 사용자 폴더가 있다. 그 아래에 호스트 컴퓨터의 모든 파일이 공유되어 있다.  지금은 클러스터에서는 사용할 수 없다. 사용방법은 Help 메뉴의 'User Guide', 'Tutorial Guide'를 참고.