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의 대용량 데이타를 다루는 물리 시뮬레이션 등을 위해서
유럽 쪽에서는 많은 슈퍼컴퓨터들에 설치되어 사용되고 있는 모양이다.

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




 




댓글 없음:

댓글 쓰기