DEM해석시 해석시간에 따른 여러 물리량의 그래프를 그리는 경우가 있다.
LIGGGHTS에서는 시간대에 따라 vtk/vtm파일로 해석데이터를 저장을 하게 되는데, 시계열에 따른 변화를 Plot하려면 시간대에 따른 vtk파일 중 특정 물리량만을 뽑아내어 그래프를 작성하여야 한다.
이 작업은 PARAVIEW에서 지원한다.
우선 LIGGGHTS에서 vtk/vtm파일을 작성하는 방법은 dump명령어를 사용한다.
(vtk/vtm)파일의 차이점은 ASCII/Binary의 차이이다.
먼저 vtk파일을 만들기 위한 dump 명령어를 알아보도록 하자. (본 포스팅에서는 mesh기반으로 생성된 granwall에 대한 예제이다)
# Read Mesh data
fix cad_box all mesh/surface file aa.stl type 2 scale 1.0 # box data
fix top_cap all mesh/surface file topcap.stl type 1 scale 1.0 # topcap data
먼저 fix mesh/surface 스타일을 사용하여 stl파일로 작성된 mesh를 불러온다. mesh id를 달리하기 위해서는 서로 다른 stl파일로 읽어야 한다.
# Use the imported mesh as granular wall
fix gran_walls all wall/gran model hertz tangential history mesh n_meshes 2 meshes cad_box top_cap
LIGGGHTS로 불러들인 mesh파일이 atoms와 interaction을 하기 위해서는 granular wall로 변환되어야 한다. 이때, LIGGGHTS에서는 단 1개의 granwall을 지원하게 된다. 따라서, 두개의 서로다른 mesh (cad_box, topcap)이 하나의 ID (gran_walls)를 가지도록 생성된다.
다음으로, 상부 topcap만을 일정속도로 이동시키도록 한다. 이때 사용되는 fix 스타일은 move/mesh이다.
# Move topcap
fix topcap_move all move/mesh mesh top_cap linear 0.0 0.0 -0.1
해석 Data의 기록은 dump명령어를 사용하여 기록한다.
### Create Imaging informations
run 1
dump dump_mesh all mesh/vtk 1000 post/mesh*.vtk id vel top_cap
dump dump_atoms all custom/vtk 1000 post/atoms*.vtk id type x y z vx vy vz omegax omegay omegaz density diameter
mesh에 대한 정보는 mesh/vtk 스타일을 이용하며, atoms에 대한 정보는 custom/vtk 스타일로 기록한다.
mesh에 대한 물리량은 mesh id와 함께 cell data형식으로 vtk파일에 저장이 되는데, mesh는 facet의 조합으로 구성되므로 mesh별로 id값을 가지게 된다. 예를 들어 위의 예제에서 fix mesh/surface인 cad_box는 윗면이 열려있는 박스로 총 5개의 면으로 구성되며 1개의 면당 2개의 facet이 존재하므로 총 10개의 facet으로 구성된다. 따라서, mesh의 정보를 기록하기 위한 id는 0 ~ 9이다.
문제는, 또 다른 fix mesh/surface인 top_cap은 1개의 정사각형 면으로 2개의 facet으로 구성된다. 이렇게 서로 다른 fix mesh/surface는 mesh id의 시작을 항상 0으로 시작하게 된다. 이럴 경우, dump를 시키는 fix mesh/surface를 구분하지 않는 경우 아래와 같은 문제를 야기한다.
### Create Imaging informations
run 1
dump dump_mesh all mesh/vtk 1000 post/mesh*.vtk id vel
dump dump_atoms all custom/vtk 1000 post/atoms*.vtk id type x y z vx vy vz omegax omegay omegaz density diameter
dump mesh/vtk의 대상 mesh id "top_cap"을 특정하지 않는 경우, 아래와 같은 vtk파일이 생성된다.
CELL_DATA 12
FIELD FieldData 2
meshid 1 12 int
0 1 2 3 4 5 6 7 8
9 0 1
v 3 12 double
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 -0.1 0 0 -0.1
meshid에서 0 ~ 9는 cad_box를 구성하는 facet의 id, 이어지는 0 ~ 1은 top_cap을 구성하는 facet의 id로 0, 1이 중복되게 된다. 그 다음으로 이어지는 "v"는 velocity로 vector의 형태로 기록된다. 마지막 두개의 벡터 (0, 0, -0.1) (0, 0, -0.1)이 top_cap facet mesh id 0, 1의 velocity 기록이다.
문제는 위와 같이 vtk파일이 생성되는 경우 PRAVIEW에서 mesh id가 중복되어 특정 mesh의 velocity time history를 그리기 우한 data처리 작업이 불가능하다는 것이다. 따라서, 시계열 plot이 필요한 경우 dump 단계에서 mesh id를 특정하는 것이 좋다.
dump dump_mesh all mesh/vtk 1000 post/mesh*.vtk id vel top_cap
이렇게 top_cap의 id, velocity만을 cell data로 dump하면,
CELL_DATA 2
FIELD FieldData 2
meshid 1 2 int
0 1
v 3 2 double
0 0 -0.1 0 0 -0.1
이 형태로 들어와서 PARAVIEW에서 처리가 가능해진다.
'LIGGGHTS' 카테고리의 다른 글
Print variable (0) | 2023.06.30 |
---|---|
PARAVIEW를 이용한 시계열 Plot 작성하기 - Part 2 (0) | 2023.06.27 |
SAVE and RESTART (1) | 2023.06.22 |
LIGGGHTS에서 인식가능한 stl파일 형식 (0) | 2023.06.19 |
100 step마다 particle생성하기 (0) | 2023.06.05 |