2020의 게시물 표시

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              heRhoThermo;     mixture      pureMixture;     properties    liquid ;     energy          sensibleInternalEnergy; } mixture {     H2O; }

계산영역 내부의 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              {               faceSet        <faceSetName>;          }     } ) -------------------------------------------------------------- faceZone으로부터 patch를 만들기 위해서는 createBaffles 유틸리티를 사용한다 . 이를 위해서는 system 폴더에 createBafflesDict 파일이 있어야하는데 다음과 같이 작성한다. --- createBafflesDict ------------------------------------- inte

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

 복사열전달을 무시하는 경우 단열 벽면 조건은 온도 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                                 uniform 0; // total heat flux value                       $internalField; } ...

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           0.41; E                  9.8; value            uniform 0;  }

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)  Filters 메뉴에서 [Mask Po

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

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'를 참고.

Baram의 동작 원리

Baram은 (주)넥스트폼이 개발한 OpenFOAM 기반의 비압축성 유동/열전달 해석을 위한 패키지로, GNU GPL 라이선스로 공개하였다.( http://nextfoam.co.kr/pd-Baram.php ) Baram은 (주)넥스트폼이 개발한 OpenFOAM 패키지인 nextFoam( https://nextfoam.blogspot.com/2019/10/test.html )을 기반으로 다음의 순서로 동작한다. 1 ) 프로그램을 실행하면 createCase 유틸리티를 사용해서 계산 폴더와 system 폴더, controlDict 파일이 만들어진다. 2 ) 격자 파일을 읽어들이면 constant 폴더 아래에 polyMesh 폴더가 생성된다. 3 ) createSettings 유틸리티를 사용해서 constant, system 폴더에 각종 설정 파일이 만들어진다. 4 ) 물리 모델, 물성값, 초기조건, 경계조건, 수치해석조건, 계산조건 등을 설정한다. 5 ) 계산을 시작하면 setConditions 유틸리티를 이용해 fvSchemes, fvSolutions, 0 폴더 아래의 경계조건 파일들이 만들어진다. 6 ) 난류모델, 물성값, cellZone 조건, 병렬조건, 계산조건 등에 대한 파일이 만들어진다. 7 ) runSolver라는 스크립트 파일이 만들어지고 실행된다. 프로그램을 실행하면 계산 폴더는 ∼/.OpenFOAM/Baram temporary 이다. 저장하지 않고 프로그램을 종료하면 이 폴더는 없어진다.  프로그램을 실행하면 계산 폴더에 setup.xml 파일이 있다. 여기에 설정된 값들이 GUI에서 디폴트 값으로 사용되며 모든 입력은 이 파일에 저장된다. 디폴트 값을 바꾸고 싶다면 $FOAM_USER_APPBIN/Baram-6.x/setup.xml 파일에서 값을 변경해 주면 된다. Baram에서 만든 계산 폴더에는 setup.xml 파일과 함께 caseSetupScript.py라는 파일이 있다. 이 파일을 이용하면 GUI를 구동하지 않고 조건을 바꾸어 계산할

Docker를 이용해 MS Windows에서 Baram 사용 하기

이미지
넥스트폼에서 Baram-v6.1의 Docker 이미지를 Docker hub에 공개하였다. 이를 이용하면 MS Windows에서도 Baram을 쉽게 사용할 수 있다.  MS Windows에 Docker 프로그램을 설치하고 Baram-v6.1의 Docker 이미지를 받아와서 실행 스크립트를 만든 다음 실행하면 된다. 이 전체 과정을 하나의 설치 파일로 제작하여 넥스트폼 홈페이지에 공개하였다.( http://nextfoam.co.kr/pd-Baram.php ) windows의 버전이 10 home 이하인 경우는 Install-BARAM-v6.1.3-win10home.zip 파일을 10 pro인 경우는 Install-BARAM-v6.1.3-winpro.zip 파일을 사용한다. 압축을 풀고 install.ext 파일을 관리자 권한 으로 실행한다. 설치파일을 실행하면 Docker와 VcXsrv 프로그램의 설치 마법사가 나타난다. 아래 그림과 같이 설치하면 바탕화면에 ’Oracle VM’, ’Kitematic’, ’Docker Quick Start terminal’, ’XLaunch’, ’Baram-v6’, 'Baram-v6-snappy' 등의 아이콘이 나타난다. Docker 설치(windows 10 home) VcXsrv 설치 바탕화면에 생성된 아이콘 Baram-v6 아이콘을 클릭하면 Baram이 시작된다. 처음 실행할 때 git hub에서 이미지를 받아오는데 몇 분 정도가 소요된다.  Baram 실행 모습

도커에서 OpenFOAM 계산시간 비교

이미지
도커를 이용했을 때 계산 시간이 어느 정도 손실이 있는지 평가하였다. 리눅스에서는 Ubuntu 14.04에서 계산한 것과 Ubuntu 18.04 도커에서 계산한 것을 비교하였으며, 윈도우에서는 WSL(Windows Subsystem for Linux, Ubuntu 16.04)에서 계산한 것과 Ubuntu 18.04 도커에서 계산한 것을 비교하였다. OpenFOAM v6를 사용하였고 솔버는 simpleFoam을 사용하였다. pitzDaily 튜토리얼 격자를 refineMesh 유티리티를 이용하여 coarse, medium, fine 3 가지 격자를 만들어서 테스트하였다. 1. 리눅스에서의 결과 도커에서 오히려 계산이 조금 더 빠른 결과를 얻었다. 정확한 이유는 모르겠지만 Ubuntu 버전의 차이 때문에 계산 시간이 조금 차이가 날 수 있을 것으로 추측된다. 도커가 더 빠르다고 이야기할 수는 없지만 손실은 거의 없는 것으로 생각된다. 2. 윈도우즈에서의 결과 WSL에서 조금 더 빠른 결과를 얻었지만 그 차이가 매누 작아서 손실은 무시할 수 있는 것으로 생각된다.

MicroSoft Windows에서 OpenFOAM 사용 방법 - 도커 이용

이미지
OpenFOAM은 리눅스에서 개발된 프로그램이라 윈도우즈에 직접 설치할 수 없다. 따라서 리눅스 가상머신이나 리눅스용 윈도우 하위 시스템(WSL : Windows Subsystem for Linux)에 설치하여 사용하는 방법이 있다. 여기서는 좀 더 쉽게 도커(Docker)를 이용하는 방법을 소개한다. 1. 설치 및 사용법 - 넥스트폼이 제공하는 설치 파일 이용 먼저 도커를 설치해야 되는데 윈도우 7 이상에서 설치할 수 있다. windows7, windows 10 home은 "Docker Toolbox"를 windows 10 pro에서는 "Docker for Windows" 를 설치하면 된다. 도커를 설치하고 나면 gnuplot 등의 그래픽 프로그램을 사용하기 위해 VcXsrv라는 프로그램을 설치해야 한다.  그리고 OpenFOAM이 설치된 Docker 이미지를 실행하면 된다. 위의 전체 과정을 하나의 설치 파일로 만들어 넥스트폼의 홈페이지( http://nextfoam.co.kr/pd-Baram.php )에 공개하였다. 설치 방법은 아래의 사이트를 참고 https://nextfoam.blogspot.com/2020/07/docker-baram.html 설치를 완료하면 바탕화면에 OpenFOAM-v6라는 아이콘이 생성된다. 아이콘을 더블 클릭하면 openfoam6 환경의 터미널이 나타나고 여기서 OpenFOAM을 사용할 수 있다. /home/nextfoam 폴더 아래에 자신의 사용자 폴더가 공유되어 있다. 2. 직접 설치 openfoam6이 아닌 다른 버전의 OpenFOAM을 사용하려면 직접 도커와 X를 설치하고 해당 도커 이미지를 실행한다. 2-1. 도커 설치 도커 설치 방법은 아래의 사이트를 포함한 많은 웹 페이지에 잘 설명되어 있어 쉽게 설치할 수 있다. https://steemit.com/kr/@mystarlight/docker "Docker Toolbox"를 설치하면 바탕화

Baram-v6 도커(Docker) 만들기

넥스트폼이 개발한 비압축성/열전달 해석을 위한 nextFoam을 사용하는 Graphic User Interface 프로그램인 Baram-v6의 도커를 만드는 방법이다. 앞의 글 'OpenFOAM 도커(Docker) 만들기'에서 만든 ut18-of6 이미지로부터 시작한다. 1. 도커 시작 > docker run --rm -it -v $PWD:/home/myDocker/hostUser -w /home/myDocker ut18-of6  터미널에서 홈 폴더에서 위의 명령을 실행하면 터미널이 우분투 18.04에 OpenFOAM-6이 설치된 환경이 된다. 여기에서 nextfoam, cfMesh, Baram GUI를 설치한다. GUI 동작을 위해 gtk, vtk, vte를 설치하고 몇 가지 그래픽 관련 라이브러리를 설치할 것이다. 왜 그런지 이유는 모르겠으나 도커에서 오픈폼 환경에 한가지 문제가 있다. 'echo $USER' 명령을 하면 아무것도 나타나지 않는다. 이 때문에 오픈폼의 환경 설정이 이상해지고 nextFoam 설치에 문제가 발생한다. 그래서 도커에서 /home/myDocker/.bashrc 파일에 'export USER=myDocker'라는 한줄을 오픈폼 환경 설정 앞줄에 추가해 준다. -------------------------------------------- ... export USER=myDocker source /opt/openfoam6/etc/bashrc ... -------------------------------------------- 그리고 ' source .bashrc '를 실행한다. 도커의 홈폴더(/home/myDocker)에 다음과 같이 몇 개의 폴더를 생성한다. > mkdir OpenFOAM > mkdir OpenFOAM/myDocker-6 > mkdir OpenFOAM/myDocker-6/src &g

OpenFOAM 도커(docker) 이미지 만들고 실행하기

1. 도커 설치 우분투에서는 docker-ce나 docker-io를 많이 사용하는 것 같다. 설치방법은 인터넷에 많이 나와 있어 쉽게 설치할 수 있으니 생략한다. 그런데 우분투 14.04에서는 두가지 모두 제대로 작동하지 않았다. 그래서 docker-engine을 설치했다. docker-engine의 설치는 아래의 사이트를 참고했다. https://zetawiki.com/wiki/%EC%9A%B0%EB%B6%84%ED%88%AC14_docker_%EC %84%A4%EC%B9%98 MS Windows는 버전이 10 professional은 docker for windows를 설치하고 10 home이나 7에서는 docker toolbox를 설치하면 된다. 쉽게 설치할 수 있다. 2. 우분투 18.04에 OpenFOAM-7이 설치된 도커 이미지 만들기 우분투 18.04 이미지에 software-properties-common, vim, make, ssh, sudo, wget 등을 설치하고,  openfoam7을 설치한다. 이 과정을 Dockerfile로 만들고 docker build 명령을  실행해서 이미지를 만든다. Dockerfile은 다음과 같다. -------------------------------------------------------------------------------------------- FROM ubuntu:bionic RUN apt-get update \ && apt-get install -y \ vim \ make \ ssh \ sudo \ wget \ software-properties-common ;\ rm -rf /var/lib/apt/lists/* RUN sh -c "wget -O - http://dl.openfoam.org/gpg.key | apt-key add -" ;\ add-apt-repository