2015년 4월 29일 수요일

Open Source CAE Toolchain 11 - Salome>Elmer


Salome_Meca를 Linux에 설치하고,
여기서 Mesh를 생성한 후,
그것을 Elmer에서 읽어들여 테스트 해 보았다. 


Salome 자체는 큰 문제없이 실행되는데,
아직 여기 포함된 Code_Aster가
제대로 작동되도록 하는데는 성공하지 못하고 있다.
Solver Input 설정에서 뭔가 잘못되어 있거나
또는 Mesh에서 문제가 있는 것 같은데 
구체적인 원인은 못 찾고 있다.

아무튼 대신 Elmer로 넘겨서 해석해 보기 위해
*.unv 파일로 Export한 후, 이걸 Elmer에서 Open 하였다.


빠르게 읽어들여진다.
Gmesh에서 Mesh를 만들어내는 것도 좋지만,
Boundary Condition을 만들기 위한 Group 작업을 미리 해 두거나
Multi-body를 위한 다중 Mesh를 만들어내기 위해서는
Salome를 사용하는 것이 더 낫다고 생각된다.

또 Salome로는
기존 Netgen 기반의 Tetrahdron 분만 아니라,
i,j,k Hexahedron을 생성해 낼 수도 있다.

물론 Hexa로 만들어낼 때는
실패 확률이 Tetra 보다는 높기 때문에,
형상을 많이 정돈해 주는 것이 좋겠다.

아무튼 간단히 Heat Eqation만 적용해서 Solve 해 본다.
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) = 2
  Name = "Body 1"
  Equation = 1
  Material = 1
  Body Force = 1
End

Solver 1
  Equation = Heat Equation
  Procedure = "HeatSolve" "HeatSolver"
  Variable = Temperature
  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 = "Aluminium (generic)"
  Heat Conductivity = 237.0
  Youngs modulus = 70.0e9
  Mesh Poisson ratio = 0.35
  Heat Capacity = 897.0
  Density = 2700.0
  Poisson ratio = 0.35
  Sound speed = 5000.0
  Heat expansion Coefficient = 23.1e-6
End

Body Force 1
  Name = "BodyForce 1"
  Heat Source = 0.1
End

Boundary Condition 1
  Target Boundaries(6) = 64 103 143 208 243 278 
  Name = "RoomTemp"
  Temperature = 293
End



나사 구멍으로 냉각수가 지나간다고 가정하고
상온으로 경계조건을 주었다.
열원은 예제에 따라 단순히 BodyForce로 주었다.











2015년 4월 27일 월요일

Open Source CAE Toolchain 10 - FEM with Elmer by Linear Elascticity & Scanning time varient displacement



전형적인 선형 탄성 변형을 보는 FEM을 하되, Elmer의 특징을 살려 입력되는 Boundary Condition의 값을 시간 변수에 따라 변화되도록 하고, 그걸 한 프레임씩 저장해서 Paraview로 올려 보았다.

이 방식을 응용하면 더욱 다양한 해석이 가능해질 것으로 보인다.

예를 들어, 본 예제에서는 힘을 받는 부위의 변위를 변화시켜 줬지만,
힘을 받는 부위(Node)를 변화시켜가는 방법도
조금 연구하면 찾을 수 있을 것이다.

이렇게 변수를 주는 것이 가능한 구조적인 이유는,
Elmer에 함께 포함된 MATC라는 모듈을 이용해서 가능한 것이다.

Elmer는 불행히도 Mechanical Contact를 Detect 하는
Multi-Body Non-linear 관련 기능은 없다.
 이런 기능은 스스로 만들어 넣으려고 해도
보통 일은 아닐 것이다.
게다가 향후에도 이 기능을 직접 추가할 계획은 없다고 한다.

따라서 이것을 유사하게라도 재현해내려면
MATC를 이용해서 어떻게 해 보거나
다른 툴을 쓰는 것 밖에 답이 없을 것이다.
사실 Contact가 필수적인 기능이라기 보다는
시현성을 위해 필요한 것에 가깝기 때문에
엔지니어링 측면에서는 심각하게 아쉽지는 않다.

참고로,
Mechanical Contact 해석이 가능한 오픈소스 툴은
현재까지 확인해 본 바로는
Calculix 및 Code-Aster 뿐인데,
Contact 해석이라는게 원체 까다롭다 보니 (Failure 확률이 너무 높아서)
실제로 쓸만한 수준인지 여부는 확인을 아직 못 해 봤다.
줄 수 있는 옵션이나 자유도는 Code-Aster 쪽이 더욱 완성도가 높아 보이는데
문제는 에러메시지 같은 것들이 프랑스어로 뜬다는 거다.

기어 치형 접촉 같은 꽤 까다로운 조건에서
Code-Aster로 아직 성공해 보지 못했다.
(의외로 Contact 찾는 알고리즘 상의 Stiffness 설정 같은 문제가 아니고
메모리 부족 문제 같은 것 때문일수도 있다.)



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 = Scanning
  Steady State Max Iterations = 1
  Output Intervals = 1
  Timestepping Method = BDF
  BDF Order = 1
  Timestep intervals = 20
  Timestep Sizes = 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 = Linear elasticity
  Procedure = "StressSolve" "StressSolver"
  Variable = -dofs 3 Displacement
  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"
  Calculate Stresses = True
  Active Solvers(1) = 1
End

Material 1
  Name = "Polycarbonate (generic)"
  Heat Conductivity = 0.205
  Youngs modulus = 2.2e9
  Mesh Poisson ratio = 0.37
  Heat Capacity = 1250.0
  Density = 1220.0
  Poisson ratio = 0.37
  Heat expansion Coefficient = 67.0e-6
End

Boundary Condition 1
  Target Boundaries(1) = 160 
  Name = "Force"
  Displacement 3 = Variable time
     Real MATC "0.01*tx"
End

Boundary Condition 2
  Target Boundaries(2) = 656 659 
  Name = "Fix"
  Displacement 3 = 0
  Displacement 2 = 0
  Displacement 1 = 0
End


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를 이리저리 테스트해 보면서
한 가지 놀라운 부분은,
안정성이 대단히 우수하다는 것이다.

물론 GUI에서 데이타가 너무 무거워지면 프로그램이 다운되거나 하긴 하지만
해석 과정 자체에서 다운 된 적은 거의 한 번도 없었다.
많은 다른 오픈소스 해석툴들과는 이 부분에서 뭔가 차이점이 느껴진다.

하긴 Elmer Solver는 
Fine Mesh의 대용량 데이타를 다루는 물리 시뮬레이션 등을 위해서
유럽 쪽에서는 많은 슈퍼컴퓨터들에 설치되어 사용되고 있는 모양이다.

오랜 시간 동안 운용되면서 안정성이 확보되었을 것이다.
또, 느리지만 확실하고 철저하게 하는 유럽식 마인드의 영향인지도 모른다.




 




2015년 4월 26일 일요일

Open Source CAE Toolchain 9 - CFD with Elmer by MultiPhysics Natural Convection & Transient


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 = Transient
  Steady State Max Iterations = 1
  Output Intervals = 1
  Timestepping Method = BDF
  BDF Order = 1
  Timestep intervals = 10
  Timestep Sizes = 10
  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
  Body Force = 1
  Initial condition = 1
End

Solver 2
  Equation = Heat Equation
  Procedure = "HeatSolve" "HeatSolver"
  Variable = Temperature
  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

Solver 1
  Equation = Navier-Stokes
  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"
  Convection = Computed
  Active Solvers(2) = 2 1
End

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

Body Force 1
  Name = "BodyForce 1"
  Boussinesq = True
End

Initial Condition 1
  Name = "InitialCondition 1"
  Velocity 1 = 0.0001
  Temperature = 293
End

Boundary Condition 1
  Target Boundaries(1) = 6 
  Name = "bottom"
  Velocity 3 = 0
  Velocity 1 = 0
  Velocity 2 = 0
  Temperature = 300
End

Boundary Condition 2
  Target Boundaries(1) = 1 
  Name = "top"
  Velocity 3 = 0
  Velocity 1 = 0
  Velocity 2 = 0
  Temperature = 293
End

Boundary Condition 3
  Target Boundaries(1) = 7 
  Name = "submarine"
  Noslip wall BC = True
  Temperature = 300
End


Solver 3
  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




레일리-버나드 대류( Rayleigh-Benard Convection) 모사에 대한
2D 예제가 있는데, 그걸 응용해서 3D 모델에 적용해 보았다.

레일리-버나드 대류가 뭔가 싶어서 조사해 봤더니,
바닥은 뜨겁고 윗쪽이 차가운 평행한 양쪽 경계조건에서의 대류 현상을 말한다고 한다.
이때 부력조건과 난류조건을 잘 주면(레이놀즈계수 Ra),
동그랗게 돌돌 말아서 돌아가는 셀 같은 것들이 여러 개 나타난다고 한다.

아직 이론을 충분히 숙지하지 못한 상태라서,
난류 모델은 적용하지 못하였다.


 Unify Surface 메뉴를 사용해서
여러개의 Surface를 하나로 합쳐버리면
Boundary Condition을 줄 때 편하다.
ElmerVTK로는 아무래도 충분히 다양하게 보기는 어렵다.




Paraview를 이용한 모습.



2015년 4월 20일 월요일

Open Source CAE Toolchain 8 - CFD with Elmer with Transient




이번에 시도해 본 것은,
Elmer GUI 상에서
Heat Transfer 및 Navier-Stokes Equation을 연성시켜 계산하는
Multi Physics 및 천이(Transient) 현상을 모사 가능한지 확인해 보는 것이다.

사용된 모델링은 아래와 같다.


녹색 부분을 PCB라고 치고, 그 위에 동그라미와 네모로 돌출된 부분을 Heat Source라고 해 준다.
그리고 이 부분을 파낸 형상을 메쉬로 만들어서 케이스 내부 대류 공간으로 삼는다.

케이스 뒤쪽의 큰 동그라미 부분을 Inlet, 앞쪽의 사각형 배열을 Outlet으로 한다.

정확한 경계조건을 주는게 아무래서 서툴다 보니
대략적으로 수렴만 되면 다행이다 싶은 정도의 경계조건으로 주었다.
따라서 실제 물리현상을 제대로 모사한 상태라고는 보기 힘들다.
다만 경계조건을 잘 검토해서 손봐주면 충분히 가능하다는 점을 증명하는데는 충분하리라 생각된다.

난류(Turbulance)는 고려하지 않았다.
k-epsilon 모델 같은걸 쓰려면 k값을 알아야 하는데 
이건 물성치도 아니고 그냥 실험값이기 때문에 열유체역학에 정통하지 못한 나로서는
이 수치를 얼마나 줘야 적절한지 감이 아직 전혀 잡히지 않는다.

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 = Transient Steady State Max Iterations = 1 Output Intervals = 1 Timestepping Method = BDF BDF Order = 1 Timestep intervals = 100 Timestep Sizes = 0.05 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 2 Equation = Heat Equation Procedure = "HeatSolve" "HeatSolver" Variable = Temperature 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 Solver 1 Equation = Navier-Stokes 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" Convection = Computed Active Solvers(2) = 2 1 End Material 1 Name = "Air (room temperature)" Heat Conductivity = 0.0257 Heat Capacity = 1005.0 Density = 1.205 Relative Permittivity = 1.00059 Viscosity = 1.983e-5 Sound speed = 343.0 Heat expansion Coefficient = 3.43e-3 End Boundary Condition 1 Target Boundaries(28) = 1 2 3 4 5 6 7 8 9 11 12 13 14 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 Name = "walls" Noslip wall BC = True Temperature = 293 End Boundary Condition 2 Target Boundaries(1) = 10 Name = "inlet" Velocity 3 = -0.01 Temperature = 293 End Boundary Condition 3 Target Boundaries(5) = 15 16 17 18 19 Name = "outlet" External Pressure = 0 End Boundary Condition 4 Target Boundaries(1) = 40 Name = "pcb" Noslip wall BC = True End Boundary Condition 5 Target Boundaries(13) = 35 36 37 38 39 41 42 43 44 45 46 47 48 Name = "heat_source" Noslip wall BC = True Temperature = 333 End Solver 3 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



수렴상태를 보면 Heat Eq.은 아주 일찌감치 수렴이 끝나버린다.
열원의 표면온도를 고정시켜 놓았으니 정상상태에 일찍 도달해 버린 것이다.....
때문에 열의 전달 상태를 박진감 넘치게 보는 건 나중으로 미루고.


Heat 부분은 이렇게 고정되어 버린다.


Transient 스냅샷은 0.1초 간격으로 100개로 했다.
따라서 해석시간은 10722.13초로 아주 길게 나온다.

Paraview로 만든 동영상은 다음과 같다.




Flow가 부들부들 떠는게 제법...  ㅋㅋㅋ


추가로 다른 연습한 것도 올려 둔다...










2015년 4월 19일 일요일

Open Source CAE Toolchain 7 - Web Services


FEM, CFD 같은 Equation Solve 작업은 누구나 알다시피,
사실 단순무식한 반복계산을 거대하게 수행하는 것이다.

따라서 작업시간을 줄이려면 계산을 엄청 빨리하는 수 밖에 없다.
또 Mesh를 조밀하게 하면 할 수록 정확도가 올라가지만
계산량도 세제곱에 비례해서 커지는데다가,
Transient 조건하에서는 Time Step 만큼 비례해서 더 계산량이 많아진다.

개인용 PC의 성능이 엄청 좋아졌고,
CUDA 같은 기술도 있다고 하지만
아무래도 수십~수천개의 CPU를 병렬로 돌릴 수 있는 환경과는 거리가 멀다.

프로페셔널한 목적으로 해석을 하려면
아무래도 개인용PC 정도로는 생산성이 너무 떨어진다.

그래서 우리나라의
국가슈퍼컴퓨터 연구소(KISTI http://www.nisn.re.kr/ ) 같은 곳에서는
오래전부터 KREONET 같은걸 운영하면서
상당히 저렴하게 슈퍼컴퓨터를 사용할 수 있게 해 주고 있었다.

지금도 아마 국책연구소나 학교 소속이라면 매우 저렴하게 슈퍼컴퓨터에 접속해서
ANSYS, ABAQUS 같은 고가의 CAE 소프트웨어를 마음껏 돌릴 수 있을 것이다.

(학생이라면 연회비 10만원 정도였던가...)

하지만 아무래도 상업적인 용도로 무제한적으로 사용하기에는
어려운 점이 많다.

또 슈퍼컴퓨터에 직접 연결해서 작업하려면 
기본적으로 CUI 환경에서 셋팅해줘야 하는 작업들이 주류일텐데
역시 진입장벽으로 작용한다.

이걸 해소하기 위해 교육용으로 하고 해서
겸사겸사의 목적으로
EDISON Project 라는게 진행중인 모양이다.

http://www.edison.re.kr/

CFD나 나노스케일 물리현상 시뮬레이션 등의 교육용으로
국가 슈퍼컴퓨터 자원을 이용할 수 있도록 하고,
이 과제에 참가한 학교들의 실험실에서 만든 각종 솔버들을
올려서 사용할 수 있도록 한 것이다.
그리고 이걸 웹 기반 서비스로 만든 모양이다.

그런데 뭔가 좀 이상한게
DLL 파일 같은걸 돌려야 된다는 둥
그러면 당신의 PC에서 안 받아줄 테니
확장자를 DLL01 따위로 바꿔서 다운로드 하게 해 줄테니
받아다가 확장자를 DLL로 바꿔서 사용하라는 등의
금융권에서나 일어날 법한 이상한 구조가 좀 있긴 하다.

솔버 역시 Elmer 처럼 General한 것이 아니고
대부분 2D에 정해진 프레임웍만 가진 특수한 문제의 해를 보여주는 식이다.
아무래도 단기간에 General한 솔버를 만드는데는 무리가 있다고 생각된다.

Elmer의 경우에는, 개발을 10년동안 진행한 후 오픈소스로 공개했고
이후에 계속 업데이트하고 있다.
유럽쪽 슈퍼컴퓨터들중 상당수는 Elmer를 셋팅해놓고 돌리는 것 같다.

반면 우리나라의 Edison 프로젝트는
빅데이타네 몽고DB네 Xen이네 등등 최신기술을 줄줄 열거해 놓고 나서
서비스는 실행파일 받아서 돌려라는 식으로 구성되어 있다.
그리고 General Solver 개발은 처음부터 언감생심 고려되고 있지도 않다.

국가연구소 설립한다고 해 놓고
연구소 건물 짓는데 예산을 다 써버리는
건설 마피아가 하는 짓과 비슷하다는 느낌이 들었다.

.........


한편,
2000년대 이후로 급속도로 발달한 웹기술이 주목할 만 하다.
AJAX 기술은 사용자의 UI를
웹 프론트엔드로 거의 완전히 대체 가능하도록 만들었다.

3D 작업은 웹으로 힘들거라는 생각을 이제는 비웃기 시작한다.
실제로 상업적인 서비스가 막 나온다.

GrabCAD 같은 회사는 심플한 PDM 서비스를 운영한다.
서비스를 사용해 봤는데,
제대로 된 PDM이라고 하기에는 좀 거리가 있지만
3D 데이타를 올려서 어디서나 Viewing 하는데는 아주 훌륭했다.

Web 기반 PDM, PLM 서비스는 이제 많이 나와있다.
ARAS 같은것을 필두로, 지맨스 것도 웹 기반으로 전환했고
카티아도 활발하다.
(PTC만 잠자고 있나)

오픈소스 OpenPLM도 있다.
이건 AJAX가 아니고 파이썬 쟝고 기반이지만
아주 훌륭하다.
FreeCAD와 붙여서 연계하는 기능도 최근에 추가된 듯 하다.


이정도 상황이 되었다면,
자 그럼 당연히 CAE도 웹서비스로 할 생각을 하게 될 것이다.
실제로 그것을 완성한 업체를 발견했다.

독일 뮌헨의 스타트업 회사인 듯 한데
요즘 엄청 잘 나가나보다.

SIMSCALE

지금 바로 가서 아카데미로 회원가입하면 모든 기능을 사용 가능하다.
학생, 교사 아니라고 아카데미 회원으로 안 받아주고 
그런 쫌팽이 짓도 안하더라...


기본적으로 무제한의 메모리와 32개의 CPU를 준다.
1000 CPU Time의 자원과 12개월간의 사용권도 준다.

백엔드 쪽은,
Netgen, SnappyHexMesh, EnGrid, (메쉬작업)
Code-Aster, Calculix, (구조해석)
OpenFoam, 스텐포드 SU2, (유체해석)
을 가지고 구성해 놨다.
전부 오픈소스가지고 솔버를 사용한 것이다.

프론트엔드 쪽은,
JavaScript와 그에 기반한 Angular.js 같은걸로 꾸며놨다.
3D는 당연히 X3D로 되어있다.
반응성 엄청 좋다.

포스트스크립트는 VTK 및 ParaviewWeb가지고 해 놨다.

간단히 말해서, 이미 존재하는 것들을 모아다가 서비스를 만들어 놓은 것이다.
최신 웹기술을 가지고 가능한 서비스다.

일단 나도 회원가입해서
매쉬작업 옵션을 Fine으로 해서 빡쎄게 돌려보고 있는 중이다.







이걸로 복잡하거나 규모가 좀 큰 해석을 돌려보고
쓸만하다 싶으면
현재 사용중인 유로 CAE 소프트웨어 라이센스를 끊어버려도 될지 
여부를 심각하게 고려해 볼 지도 모른다.

서비스 안정성에 큰 문제가 없다면
비용적으로 기존 제품의 라이센스 비용보다
훨씬 싸게 먹힌다.

단일 아이디로 여러명이 함께 사용하는 꼼수도 가능하므로
단일 PC에서만 사용이 허락되는 경직된 라이센스 정책에서도 해방되고
사무실 아니라 아무데서나 WebGL이 돌아가는 PC에서 사용 가능하게 된다.

......




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 그리기 성공..  헥헥


2015년 4월 16일 목요일

Open Source CAE Toolchain 5 - CFD with Elmer


Elmer GUI에 기본 제공되는 Equation 중에,
Navier-Stoke Equation이 있으므로 CFD 해석도 가능하다.

간단한 형상을 만들어서 CFD 해석하는 연습을 해 본다...

만약에 잘 되면 OpenFoam 같은 GUI도 없는 걸로
설치부터 환경 구성, 컨디션 설정 등등 까다롭게 삽질할 필요 없이
그냥 한 방에 간단한 문제는 해결 가능할 것이다.

3D 형상은 3D CAD 툴을 이용하여 간단하게 그렸다.
본 케이스에서는 PTC CREO를 사용하였지만,
사실 오픈소스 FreeCAD를 사용해서 그려도 아무 문제 없다.

그린 것을 .stp으로 저장한다.
FreeCAD에서는 .step 확장자로 저장되는데,
이 경우 GMSH 또는 Elmer에서 인식하지 못하므로
확장자 이름을 반드시 *.stp로 고쳐 써 준다.



그려진 모델을 GMSH에서 매쉬를 만든 모습이다.

이것은 GMSH를 사용하지 않고,
ElmerGUI에 내장된 ElmerGRID 툴을 사용해서 만든 모습이다.

아무거나 써도 상관없다.

본 예제에서는 두 번째 것을 사용했다.
(좀 더 성글게 만들었기 때문에)


해석 조건은 대략 아래와 같다.

Model의 Setup은 아무것도 건드리지 않고 디폴트 상태로 두었다.
디폴트는 Steady State이고, 시간에 따른 Transient는 없다.
그냥 정상상태의 스냅샷 하나만 얻어 보겠다는 거다.

Equation은 당연히 Navier-Stokes를 Active로 한다.

Material은 Water로 지정했다.

Boundary Condition은,
입구를 Inlet으로 이름을 짓고 적절히 속도를 상수로 줬다.
출구는 2개 있으므로 2가지 Outlet01,02 만들어서 역시 적절히 출구 속도를 줬다.
속도 대신 Pressure 가지고 줘도 재미있을 것이다.

벽면 부분을 위해서 Walls로 이름짓고 
Noslip wall BC = True
으로 체크해 줬다.

이름 그대로 벽면에 걸리는 슬립 즉 점성마찰계수를 무시한 거다.
좀 더 재미있는 모습을 관찰하려면 이걸 Uncheck하고
아래쪽에 Sip Coefficient 들을 적절히 주면 
더 아름다운 Stream Lines를 나중에 얻을 수 있을 것이다.

아무튼 간단히 하기 위해서 일단은 이렇게 줬다.

이제 각각의 면들을 하나하나 이들 조건을 부여해 줬다.

그리고...

case.sif 파일을 Generate 하고나서 편집으로 들어간 후
마지막에 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


문구를 삽입해 주고 case.sif로 저장해 줬다.

그리고 나서 Solve Run 했다.

한가지 문제가 있었는데, 
해석 속도를 향상시키기 위해 
Parellel Setting을 Check하고 Core를 4개 정도 줘 봤는데
안된다고 Fail이 난다.
그래서 이걸 죽이고 Single Core로 해석하도록 해 봤더니
잘 된다.

(Navier-Stokes는 Single CPU만 지원하나 보다.)

암튼 결과를 보기위해 이것저것 좀 손보면 이런 화면을 얻을 수 있다.



이쁘게 보이기 위해서 이것저것 겹친 모습

Color는 Pressure 정보를 가지고,
Arrow Vector는 Velocity이다.

Stream Line을 보이게 했는데 만족스럽게 다 보이게 하는데는 아직 좀 미숙하다.


Contour 단계를 늘려서 한 번 본다.


이제 Paraview를 열어서 case0001.vtu 파일을 열어 본다.





Paraview의 재미있는 기능 중에, 이 상태를 그대로 WebGL로 만들어내 주는 것이다.
만들어보니깐 *.html 파일과 함께 잡다한 파일들이 많이 만들어지는데,
*.html만 빼고 나머지 파일은 다 지워줘도 된다.

그냥 웹브라우저로 *.html 파일을 열어 보면 브라우저 상에서 3D 화면을 볼 수 있다.
만들어진 파일을 직접 한 번 보자.

https://www.googledrive.com/host/0B3VzdmodvgcINEMtRTA3SVVUM28/webgl_ex/2015017_pipe_elmer_webgl_paraview.html

이상 GMSH, ElmerGUI, Paraview를 통해서 간단한 CFD 해석이 가능하다는 점을 알게 됐다.



**** 여기서 수준을 더 높이려면 ****


다만 Multi-Phase 등 더 복잡한 CFD를 위해서는 역시 OpenFoam 같은게 필요할 것이다.

(OpenFoam은 현재 Binary Install을 직접 제공하지는 않는 것 같다.
직접 받아다가 컴파일해서 만들어야 되고 또 기본적으로 리눅스에서만 된다.
리눅스 특유의 특성상 그냥 컴파일 하는데만도 상당한 삽질이 필요할 가능성이 매우 크다.
무슨 라이브러리가 버전이 안맞네 어쩌네 하면서리...

컴파일 안하고 그냥 윈도우에서 쓸 수 있도록
Cygwin으로 환경구성해서 패키지로 제공하는 곳도 몇군데 있고
( FreeFoam 이라는 이름으로 소스를 포크해서 제공하는 곳도 있고,
또 체코의 해석 전문 중소기업에서 자기네가 쓰는걸 무료로 공개한 곳도 있다.
OpenFoam for Windows - http://www.cfdsupport.com/download-openfoam-for-windows.html  )

또 Cygwin에 의존하지 않고,
윈도우용으로 소스 자체를 손봐서 재컴파일해서 제공하는 곳도 있다.

BlueCFD Core라는 이름으로 제공하는데..
http://joomla.bluecape.com.pt/index.php?option=com_frontpage&Itemid=1&lang=en

무료 버전은 싱글코어 연산만 지원하는데 그냥 다운로드 받아다가 압축 풀어서 쓰면 된다.
윈도우 커맨드 창이 하나 시커멓게 뜨는데 거기다 대고
dir 같은 윈도우 시스템 명령어와, OpenFoam 명령어들을 쓰면 된다.

멀티코어 버전은 유로로 제공하는데
엄청 비싼줄 알았드만 가격이 50유로라고 한다.
우리나라 돈으로 6~7만원 정도다.

뭐 연습하는데는 싱글코어도 상관없으니 무료 버전이라도 좋다.

아무튼 리눅스로 삽질하기 귀챦고, 윈도우에서 간단히 깔아서 해 보려면
BlueCFD가 최선인 듯 하다.

이거 깔아서 예제 따라 해 봤더니 잘 된다.

하는 예제는 생략...






Open Source CAE Toolchain 4 - Z88 Aurora



2011년인가 즈음에 Z88 이라는 FEM 솔버가 있다는 걸 알았었다.




TUI 환경에서 갑갑하게 시간낭비 하면서 바운더리 컨디션 설정해 줘야 하는 식의
그저 그런 것이리라 생각을 했었는데, 
웬걸 알고보니 GUI 도구에 상당히 심혈을 기울이고 있는 걸 보고 인상 깊었었다.

Aurora는 바로 그 GUI 프로그램의 이름이다.
Pre & Post Processor 역할을 하고, Z88 Solver 역시 안에 집어넣었다.

이후 2012년도에 V2가 나왔다.
바로 깔아서 써 봤는데, 아직 완성도가 그다지 높지 못했다.
조금만 3D 데이타의 형상이 복잡해져도
읽어들이는데 실패해 버리거나,
매쉬를 만드는데 성공하지 못할 확률이 매우 높았다.
그래픽 역시 상당히 허접해 보였다.
매쉬가 조금만 많아져도 화면이 버벅대서 도저히 작업이 되질 않았다.
Quadro 그래픽 카드를 사용하는 고사양 PC인데도 그랬다.

하지만 이 툴은 몇가지 상당히 인상깊은 점이 있었다.



독일 바이로이트 대학교의 프랭크 리그라는 교수가 만들었다는데
1985년도부터 포트란으로 시작했다고 한다.
90년대 접어들어서는 큰 결심을 했는지, C로 전체 코드를 새로 짜기 시작했다.

아마 기존의 포트란으로는 다른 FEM 툴과
차별화하기 힘들었기 때문이 아니었을까 싶기도 하다.

90년대~2000년대에 걸쳐서 CAE 시장 상황은
고가의 상업용 툴이 완전히 장악하고 있었다.

수천만원~수억원짜리 툴이 아니면 쓸만한게 없었고
컴퓨터 성능도 제대로 해석 하려면 워크스테이션급 이상이 필요했다.
PC에서 해석한다 그러면 간단한 연습용 코드를 짜서 공부하는 용도 정도였을 것이다.


상업용 툴은 완성도가 매우 높기 때문에
일개 대학 교수 혼자서 뭘 해서 시장에 파문을 일으키기는 힘들다.

하지만 상업용 툴에는 기술 외적으로 치명적인 문제가 있었다.

바로 너무 비싸다는 점이다.

자동차 회사, 중공업 회사 따위의 대기업들만 상대하다 보니
엄청난 고가격으로 판매했고
유지보수 및 교육등으로 고수익을 올렸다.

하지만 FEA가 필요한게 대기업 엔지니어들만 필요한건가??

심히 의문이었다.



중소기업 엔지니어들은 엔지니어도 아닌가....?

가격과 사후지원 등 모든 부분에서 맞지 않는 상황이 되었다..

결국 대안은 오픈소스 툴이 되었고
사용하기 좀 불편하거나, 완성도가 낮거나, 배우기 어렵거나 한 부분들은
좀 더 노력해서 공부하면서 써먹어야겠다는 패러다임이 생겼다.

또 상용 툴 중에서도 후발주자들은 저가 정책을 펴기 시작했다.

국산 툴인 Recurdyn, DAFUL, MidasNFX 같은 것들은
기존의 다른 것들보다 상당히 저렴하다.
또 CAD 툴 안에 내장시켜서 간단히 사용할 수 있게도 만들어내기 시작했다.


하지만 저가형 툴의 가격조차 부담스럽다면??

연매출 300억 미만 규모의 중소기업 정도라면 솔직히 가격 부담을 하게 될 것이다.
이런 규모의 업체들은 직원들 월급주고 이것저것 빼고 나면
사실상 회사 지탱해 나가기 급급하기 때문이다.

이런 제조업체의 설계 엔지니어들을 위해서는
오픈소스 이외에 대안이 없다고 본다.



아무튼 그 중에 Z88 Aurora는 ...

2012년 당시에만 해도 불안정하고,
또 GUI 툴인 Aurora 같은 경우에 리눅스 버전은 아예 없고 윈도우용만 있었다.

실무에 사용하기에 좀 문제가 있었다.


그런데 바로 며칠전인 2015년 4월 8일에 V3 버전이 새로 공개되었다.


바로 깔아서 확인해 보니깐
엄청난 발전이 그동안 있었다는 걸 알 수 있었다.


일단 기존에 선형해석만 되던걸, 이제는 상당한 수준의 비선형 해석까지 가능하다.
재료 비선형, 초탄성, 대변위 뭐 이딴 것들 전부 된다.
(아 물론 물성치나 이런건 어느정도 사용자가 설정해서 보완해 줘야 되지만)

단지 접촉 비선형만 안되는 정도다.


게다가 내장된 Netgen, Tetgen의 셋팅도 상당히 보완했는지...
왠만한 3D 데이타는 큰 문제없이 매쉬 만들어 내는데 잘 성공한다.

(물론 여전히 GMSH 보다는 성공 확률이 낮으므로,
좀 복잡해서 잘 안된다면 GMSH에서 만든 다음
.stl 파일로 저장해서 읽어들여도 된다.)


해석 속도는 개인적으로 좀 놀랐다.
전통적인 포트란 LAPACK 같은 것을 사용하는 Elmer보다
훨씬 빠르다.

거의 순식간에 해석이 완료된다.
속도 자체는 상용툴 수준에 육박한다는 느낌이다.
(물론 거대한 데이타를 넣으면 안정성이 떨어져서 뻗어버릴지도 모르지만)


또 Elmer 자체 내장된 Equation에는 Modal 해석 같은건 안되는데
Z88은 기본으로 들어 있으므로 이 부분도 보완이 된다.


즉 Elmer로는 선형탄성해석 정도만 현실적으로 가능한데
Z88을 이용해서 비선형해석 및 모달해석 까지 커버되는 것이다.

상호보완적으로 사용해도 좋겠다는 생각이 든다.


특히 Z88 Aurora V3는 윈도우용 뿐만 아니라
맥, 리눅스 용으로도 잘 컴파일되어 제공된다.



아무튼 GUI가 좀 독일 스럽게 단순무식한 느낌이 들지만
의외로 굉장히 효율적이다.

특히 처음 띄우면 나오는 SPIDER라는 별도창 도구모음이 있는데
이걸로 순서대로 따라가면 작업이 다 끝난다.
설명서 보고 한 번만 따라해 보면 
다음부터는 그냥 혼자 하면 되는 수준으로 쉽다.




일단 해석한 예를 한 번 들어보겠다...
이제까지 한 것과 동일한 모델을 가지고 한다.



처음에 프로젝트 시작하면
어떤 디렉토리를 찾아들어가서
그 디렉토리를 작업 디렉토리로 삼도록 Aurora가 강제한다.

게다가 그 디렉토리는 완전히 텅텅 비어 있어야 한다!
안 그러면 경고 메시지가 나오면서 그 디렉토리를 비우라고 강요한다.

왜 이렇게 만들었을까???

독일 사람 답게
쓸데없는 파일이 너저분하게 작업디렉토리를 차지하는
꼴을 못 봐서 그럴 것이라고 추측된다.

강제로 사람한테 파일 정리 시키는 프로그램이다.
아무튼 빈 작업디렉토리를 프로젝트 장소로 삼으면 일단 빈 화면이 떡 나타난다.
거기에 이제 3D 데이타를 Import 시키면 되는 거다.

.stp 파일을 불러들이면,
내부적으로 .stl 파일로 변환한 다음에
화면에 그걸 띄워서 보여준다.

문제는 .stp --> .stl 변환 과정에서
모델에 결함이 생길 가능성이 있는 것이다.

위에 보이는 모델이 좋은 예인 것 같다.
화면에는 이상없는 것 처럼 보이는데,
기어 치형의 끝단 부분에서 면이 깨져서 결함이 생긴 것이다.

여기서 매쉬 만들기 들어가니깐 에러 나오고 실패한다.

결국 모델링을 단순하게 만들어 보면서 해도 잘 안되어서,
GMSH에서 미리 매쉬를 만든 다음 그것을 .stl 파일로 저장하고
이렇게 만들어진 .stl 파일은 Z88 Aurora에서 불려들였다.

역시 GMSH가 짱인 것 같다.



이렇게 GMSH에서 만든걸 불러들이니 이렇게 나온다.
Z88 Aurora는 어째 쉐이딩 상태보다 이렇게 검은색 선으로 나오는 화면이 더 좋은 것 같다.
마치 도면을 직접 보는 듯한 느낌이 들도록 선명하다.

흑백 화면을 선호하는 것은
전통적으로 기계공학 엔지니어의 성향인 것 같다.

(복사, 팩스보낼 때, 청사진으로 복제할 때 등에 대비해서
전통적으로 도면은 이렇게 검은색 선으로만 나타내도록 문화가 형성되어 왔다.
컬러 도면, 그레이 스케일로 그려진 도면은 원칙적으로 불량 도면이라고 선배들은 가르쳤다.)



아무튼...  상태 확인해 보고..



이제 여기서 그대로 Tetra 매쉬를 만들라고 시키면...
작업은 지 혼자 막 한다음 결과를 보여주는데 이전 상태와 다를 바 없게 된다.
엘리먼트 사이즈 조건이 다 충족되기 때문이겠지...



이제 경계조건을 줄 부위를 선택해서 이름도 지정해 주고..
(선택할 때는 CTRL 키를 누르고 마우스로 꼭 찝어줘야 된다.
또 선택할 때는 반드시 Node로 하는걸 추천한다.
Surface로 선택해서 해 보니, 거기에 경계조건 줄 때 버그가 있는지
선택된 서피스가 없다고 혼자 엉뚱한 소릴 한다.)

암튼 이런 순서는 매뉴얼 보고 따라하면 되므로
쓸데없는 설명은 생략...



재료 지정해 주고...



경계조건 잡아주고...



솔버 설정해 주고...
마지막으로 솔브 버튼 눌러서 실행한다.

Z88 Aurora GUI 뒤에 따로 떠 있는 터미널 화면에 보면
시간정보 등이 보이므로 언제 끝났는지 확인 가능하다.

끝나면 이제 Post-Processor로 들어가서 화면을 본다.



일단 경계조건에서, 힘을 준 이빨 부분을 보고...



이 부분의 응력을 본다.
위 화면은 응력 범위를 지정해서
응력이 크게 걸리는 부분만 보여지도록 한 것이다.




Z88 Aurora의 Post-Processor는 기능이 좀 미약하다.
물론 비주얼은 보시는 바와 같이 상당히 개성적이긴 하다.

문제는, Z88 Aurora의 해석결과 아웃풋 기능도 미약하다는 점이다.
아웃풋되는 데이타는, 변형된 상태로 얼려진 .stl 파일 뿐이다.

결국 이거라도 받아서 Paraview에서 띄워보았다.
응력이나 변형량 같은 정보는 전부 손실되었다.
(물론 데이타 테이블 가지고 프로그래밍 해 주면 되겠지만
실무 엔지니어가 그럴 시간이 없다.)



Paraview에서 본 모습이다.
변형전, 변형후 2가지 .stl 파일을 같이 불러서 비교해 본다.



이정도 확인 되는 수준.





이상 끝.

Z88 Aurora는 단순무식하지만
그 범위 내에서는 확실하다는 느낌이다.

발전가능성도 높다고 생각되며,
개발한 교수가 이걸로 장사하려는 생각도 없어 보인다.