2015년 4월 18일 토요일

Open Source CAE Toolchain 6 - CFD with Elmer with a Body


앞서 Elmer에 기본적으로 들어있는 Solver 중에서
Navier-Stokes Equation을 이용하여
CFD의 가장 간단한 경우를 연습해 보았다.
비압축성(Incompressible), 층류(Laminar), 정상상태(Steady State)
등의 조건이다.

여기서는 이상의 조건을 유지하면서
안에 Body를 하나 넣어봤다.

이를테면 바다속을 전진하는 잠수함 같은 거다.

모델링은 뭐 아무거나 가지고 하면 되고...
매쉬 작업 마친 모습은 아래와 같다.


이 안에 Cavity의 형태로 잠수함(?) 모양이 들어있다.


요렇게 숨어있다.
ElmerGUI에서 이처럼 선택적으로 
서피스를 보였다 안 보였다 하게 해 주려면
메뉴의 View 항목 중에서 Hide/show selected를 이용하면 된다.
안에 숨어있는 면에 경계조건 줄 때도 유용하다.

아무튼 첫번째로 대충 경계조건 주고 돌려봤는데 결과는....

 무의미한 결과가 나왔다. (-,.-);
이유를 찾기 위해 이것저것 건드려 봤는데
기하학적 경계조건 자체는 문제가 없었던 것 같고,
경계조건의 수치 스케일링 문제였던 것 같다.

Elmer는 단위계가 따로 명확히 정해져 있지 않고
디폴트로 들어가 있는 물성치들의 단위는
SI단위계로 통일되어 있다고 하는데
형상의 모델링 및 포멧 변환할 때 치수 단위가
의도한대로 안 넘어왔던가 그런 것 같다.

스케일링 문제는 나중에 기회 있을때 자세히 따져보기로 하고...
 일단 소프트웨어 기능부터 익히는게 순서니깐...
일단 입구속도가 너무 빨라서 유체가 막 날라다니는(?) 걸로 판단되므로
임의로 적절히 Inlet 입구 유속을 원래의 1/100으로 수정해 보았다.


휴우...
이제 깜찍하게 나왔다.
유체도 아주 평화롭게 흐른다.
잠수함 정수리 부분이
약간 바알갛게 압력이 걸리는 것도 예쁘게 보인다.





이제 Parasolid로 들어가보자.


잠수함을 명확하게 보이도록 하기 위해서,
별도로 잠수함만 매쉬해서 저장해 뒀다가,
이럴때 불러다 쓴다.

일단 압력 걸리는거 Volume으로 보고,


Stream Lines 보고,


압력을 Contour 해서 또 보고,


속도도 보고....


가운데 잘라서 압력 양상 확인.


또 가운데 잘라서 속도 분포 확인.
이 그림이 제일 예쁜 듯.


Stream Line은
이리저리 굵게도 해 보고 빽빽하게도 해 보고 해 봤는데
이쪽은 확실히 어설프다.

마지막으로, 사용된 case.sif 파일 내용을 보존해 둔다.



Header
  CHECK KEYWORDS Warn
  Mesh DB "." "."
  Include Path ""
  Results Directory ""
End

Simulation
  Max Output Level = 5
  Coordinate System = Cartesian
  Coordinate Mapping(3) = 1 2 3
  Simulation Type = Steady state
  Steady State Max Iterations = 1
  Output Intervals = 1
  Timestepping Method = BDF
  BDF Order = 1
  Solver Input File = case.sif
  Post File = case.ep
End

Constants
  Gravity(4) = 0 -1 0 9.82
  Stefan Boltzmann = 5.67e-08
  Permittivity of Vacuum = 8.8542e-12
  Boltzmann Constant = 1.3807e-23
  Unit Charge = 1.602e-19
End

Body 1
  Target Bodies(1) = 1
  Name = "Body 1"
  Equation = 1
  Material = 1
End

Solver 1
  Equation = Navier-Stokes
  Calculate Loads = True
  Procedure = "FlowSolve" "FlowSolver"
  Variable = Flow Solution[Velocity:3 Pressure:1]
  Exec Solver = Always
  Stabilize = True
  Bubbles = False
  Lumped Mass Matrix = False
  Optimize Bandwidth = True
  Steady State Convergence Tolerance = 1.0e-5
  Nonlinear System Convergence Tolerance = 1.0e-7
  Nonlinear System Max Iterations = 20
  Nonlinear System Newton After Iterations = 3
  Nonlinear System Newton After Tolerance = 1.0e-3
  Nonlinear System Relaxation Factor = 1
  Linear System Solver = Iterative
  Linear System Iterative Method = BiCGStab
  Linear System Max Iterations = 500
  Linear System Convergence Tolerance = 1.0e-10
  BiCGstabl polynomial degree = 2
  Linear System Preconditioning = Diagonal
  Linear System ILUT Tolerance = 1.0e-3
  Linear System Abort Not Converged = False
  Linear System Residual Output = 1
  Linear System Precondition Recompute = 1
End

Equation 1
  Name = "Equation 1"
  Active Solvers(1) = 1
End

Material 1
  Name = "Water (room temperature)"
  Heat Conductivity = 0.58
  Heat Capacity = 4183.0
  Density = 998.3
  Relative Permittivity = 80.1
  Viscosity = 1.002e-3
  Sound speed = 1497.0
  Heat expansion Coefficient = 0.207e-3
End

Boundary Condition 1
  Target Boundaries(1) = 3
  Name = "inlet"
  Velocity 3 = 0
  Velocity 1 = 1
  Velocity 2 = 0
End

Boundary Condition 2
  Target Boundaries(1) = 5
  Name = "outlet"
  Velocity 3 = 0
  Velocity 2 = 0
  External Pressure = 0
End

Boundary Condition 3
  Target Boundaries(4) = 1 2 4 6
  Name = "wall"
  Noslip wall BC = True
End

Boundary Condition 4
  Target Boundaries(6) = 7 8 9 10 11 12
  Name = "body"
  Noslip wall BC = True
End

! Paraview에서 읽을 수 있도록 추가해 주는 코드
Solver 2
  Exec Solver = after timestep
  Equation = "result output"
  Procedure = "ResultOutputSolve" "ResultOutputSolver"
  Output File Name = "case"
  Output Format = String "vtu"
  Binary Output = True
  Single Precision = True
  Save Geometry Ids = True
End



이상, Elmer 가지고
간단한 풍동 실험 같은거 할 만 하다고 생각된다.

사용된 Navier-Stokes 방정식에 사용된
각종 파라미터들의 물리적 의미를 정확히 이해해서
실제 현실의 물리적 현상과 최대한 일치시켜 나가는 것은
각자 공부할 부분 같다.

Elmer 사용자 매뉴얼과 각종 예제, 그리고 Solve의 Notation 등에 관한
문서들은 엄청나게 잘 되어 있으므로 시간과 열정만 있다면 얼마든지 가능할 것이다.

필요하다면 포트란으로 자신만의 Solver을 만들어서
Elmer에 내장된 명령어로 컴파일한 다음 그걸 ElmerGUI 메뉴에 등록해서
완벽하게 환경을 꾸미는 것도 가능하다.

물론 현재 Elmer의 CFD 능력 자체는
OpenFoam 보다 미약한 것은 확실하다.

확실하게 알려진 한계점은
Multi-Phase가 안된다는 점 (파도칠 때 여러 갈래로 쪼개지는 것 따위)
Body가 기계적으로 움직이는 것과의 커넥션 방법이 알려져 있지 않다는 점,
또 압축성 유체를 다룰 때 정확도가 떨어지거나 잘 안된다는 점 등 같다.


하지만 Elmer 만의 강점이 있다.

Multiphysics 목표가 강하기 때문에, 유체+열 커넥션해서 해석하기가 간단하다.
(아직 직접 해 보지는 않았으나 매뉴얼에 예제 등이 잘 나와있다.)

또 GUI가 있는데다가 아주 간단하므로 진입장벽이 매우 낮다.
내가 해 본 것만 해도 대부분 디폴트로 놔두고 기본적인 것만 건드려 본건데
별 어려움 없이 일단 해석이 된 거다.

openFoam은 일단 GUI가 없다.
이건 이 분야에서 큰 약점이라고 생각된다.

물론 이 문제에 대한 솔루션이 없는건 아니다.
예를 들어 http://engys.com/ 이곳을 보면
OpenFoam용 GUI를 만들어서 오픈소스로 제공해 주고 있다.
Helix-OS라는 이름이다.
안 써봐서 어느정도로 좋은지는 모르겠는데
경계조건 간단히 주고 압축성/비압축성 선택이라던가
등등의 옵션 주는게 되는 것 같다.
대규모 복잡형상에서 쓸만한지는 잘 모르겠다.
제시된 예제들은 전부 간단한 형태들 뿐이라...

아무튼 Elmer는 자체 GUI 이므로 더 낫다고 할 수 있다.

그리고...

Elmer는 자신의 Equation을 만들어서 사용 가능하다.
이렇게까지 할 사람은 극소수겠지만...

예를 들어 어느 대학교 물리 실험실에서
양자물리학 현상을 시뮬레이션 하고 싶은데
적절한 시뮬레이터가 없고
대학원생들이 밑바닥부터 코딩해서
소프트웨어 개발할 여력도 없다고 할 경우,
 Elmer를 쓰면 딱 맞을 것이다.

양자역학 물리현상을 모사한 Solver가 별로 없는데다가
해당 실험에 적합하도록 구성된 것도 거의 없을 것이다.
직접 만들기에는 작업량이 너무 많고...
핵심 Equation만 딱 써넣고 쓸 수 있다면
그보다 더 좋은게 어디 있을까?




(보충) Stream Lines 그리기 성공..  헥헥


댓글 없음:

댓글 쓰기