전형적인 선형 탄성 변형을 보는 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의 대용량 데이타를 다루는 물리 시뮬레이션 등을 위해서
유럽 쪽에서는 많은 슈퍼컴퓨터들에 설치되어 사용되고 있는 모양이다.
오랜 시간 동안 운용되면서 안정성이 확보되었을 것이다.
또, 느리지만 확실하고 철저하게 하는 유럽식 마인드의 영향인지도 모른다.
댓글 없음:
댓글 쓰기