2015년 6월 14일 일요일

Transient Linear Elastic with Elmer


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 결과를 좀 효율이 떨어지더라도 얻어낼 수 있다는 것.



댓글 없음:

댓글 쓰기