Elmer에서 구조해석을 위한 기본적인 해석기는 실질적으로 Linear Elastic Eq. 밖에 없다.
얼핏 보면 사용할 수 있는 범위가 굉장히 제한적으로 오해받을 수 있으나, 자꾸 살펴보다 보니 상당히 응용범위가 넓은, 잘 만들어진 해석기라는 생각이 든다.
기본적으로 이 해석기는 Implicit Time Integrator라고 생각되는데, 그렇다고 해서 Explicit Time Integration을 통해 얻을 수 있는 결과를 얻을 수 없는 것은 아니다.
Initial Condition 또는 Boundary Condition을 Time Varient 하게 잘 주면 올바른 응답을 보여주는 것 같다. (물론 실제 물리현상과 매칭되도록 조건을 잡아주는 것은 계속 반복 검증해 가면서 맞춰가야 할 것이다. 본 글에서는 일단 기능이 된다는 점만 확인한다.)
물론 좋은 상업용 Explicit 해석기 또는, 오픈소스에서 Explicit 전용으로 개발된 "Impact"같은 툴을 잘 쓰는 것 보다는 결과를 얻어내는데 들어가는 시간이 더 많이 걸리는 것은 당연하다.
하지만 익숙한 툴을 이용하여 원하는 결과를 도출하는데 충분할 수도 있다.
(사실 "Impact" 같은 프로그램은 Java로 만들어져 있어서 대규모의 Fine Mesh 해석 같은 것은 아마 꿈도 못 꾸는 것 같다. 예제를 보면 전부 다 굉장히 매쉬 앨리먼트 개수가 적다.)
아무튼 일단 기능 검증을 위해 간단한 컨틸레버를 그렸다.
길이 100mm, 폭 10mm, 두께 5mm이고, Transfinite 옵션을 줘서 균질하게 매슁이 되도록 했다. 물론 2nd Order로 쪼갰으며, 해석시간 단축을 위해 거칠게 쪼갰다.
그리고 이것을 ElmerGUI로 아래와 같이 읽어들인다.
GUI 상에서 해석 조건을 준다.
해석 입력 파일은 아래와 같다.
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 = 3000
Timestep Sizes = 0.0001
Solver Input File = case.sif
Post File = case.ep
Coordinate Scaling = Real 0.001
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
Initial condition = 1
End
Solver 1
Equation = Result Output
Single Precision = True
Procedure = "ResultOutputSolve" "ResultOutputSolver"
Save Geometry Ids = True
Output File Name = case
Output Format = Vtu
Exec Solver = After Timestep
End
Solver 2
Equation = Linear elasticity
Procedure = "StressSolve" "StressSolver"
Variable = -dofs 3 Displacement
Calculate Stresses = True
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(2) = 1 2
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
Initial Condition 1
Name = "InitialCondition 1"
Displacement 3 = -0.005
End
Boundary Condition 1
Target Boundaries(1) = 5
Name = "Fix"
Displacement 3 = 0
Displacement 2 = 0
Displacement 1 = 0
End
이제 해석을 돌린다. 1000개의 샷을 아주 짧은 시간 간격으로 찍어내기 때문에 시간이 꽤 걸린다.총 시간은 0.3초의 응답을 보는 것이다.
그래도 수렴이 잘 되는 것 같다.
일단 이 해석의 결과를 보면 아래 동영상으로 나온다.
처음에 가진될 때 보이는 2차 이상의 고주파 영역은 금방 감쇄되는 것이 보인다.
참고로 사용된 물성치에는 감쇄계수가 전혀 없다. 무감쇄 조건이다.
그럼에도 불구하고 1차 모드 진동만 남고 다른 진동은 다 사라진다.
1차 모드 진동은 무한대로 감쇄하지 않고 진동이 계속된다.
이제 물성치에 감쇄조건을 추가해 본다.
Damping Coefficient 를 어느정도로 주는 것이 적절한지 전혀 감이 잡히지 않는데, 일단 아무 숫자나 넣어보고 해 봤는데 간에 기별도 안 가길래 숫자를 아주 크게 확 키워 보았다.
Material 카테고리에 아래의 문구가 들어가도록 해 준다. (GUI에서도 지원됨)
Damping = 1e6
그리고 더 키워 본다.
Damping = 1e7
이상의 결과로, Damping 과도 응답(Transient)을 보는 것이 가능하며 이것은 Explicit Time Integration 하는 것과 같은 좋은 기능이라는 사실을 알았다.
대신 해석시간은 매번 전부 다 계산하는 Implicit 방식이기 때문에 꽤 소요된다는 단점이 있다.
결론적으로 Static, Eigenmodal Dynamic, Harmonical Dynamic 뿐만 아니라, Transient Dynamic 결과를 좀 효율이 떨어지더라도 얻어낼 수 있다는 것.
댓글 없음:
댓글 쓰기