2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LIGGGHTSのPraviewでの可視化 時刻の設定

Posted at

Liggghtsでの解析結果をParaviewで可視化する場合に、ステップ数と時間の対応方法が分からず悩んだので、その方法を共有します。

Liggghts結果データのフォーマット

Liggghtsの結果ファイルはdumpコマンドで出力を行います。

dumpコマンド.
dump ID group-ID style N file args

使用例
dump dmp all custom 100 dump*.liggghts_run id type x y z vx vy vz fx fy fz radius mass

出力ファイルは以下のような中身になっています。

dump.
ITEM: TIMESTEP
23500
ITEM: NUMBER OF ATOMS
1
ITEM: BOX BOUNDS ff ff ff
0 1.5
0 0.5
0 0.5
ITEM: ATOMS id type x y z vx vy vz fx fy fz radius mass 
1 1 0.75 0.25 0.25 0 0 0 2.23481e-08 -0.0248054 1.49699e-15 0.00553014 0.00252857 

このままでは、Paraviewで読み込めないのでプリポスト用のPythonツール集であるLPPパッケージを使用してVTKファイルに変換します。LPPについては、以前の記事を参考にダウンロードしてください。

dumpコマンドで出力した結果データがあるフォルダーで、lpp.pyというPythonスクリプトを実行することで変換することができます。lpp.pyはダウンロードしたLPPパッケージの中に含まれます。

.sh
python -i lpp.py 出力ファイル名

これにより、出力されたvtkファイルを読み込むことでParaviewで可視化できます。
しかし、この方法で読み込んだ結果は解析ステップと時刻の対応がなされていません。したがって、解析のアニメーションで時刻を表示させたい場合に、解析内での実時間とアニメーションでの表記が一致しない問題が発生します。
CFDEMでCFDの結果と同時に表示させる際に、2つの時間進行が一致しない等の問題が起こります。

ParaviewにおいてVTKファイルでのステップ数と時刻の対応を行うには、以下のようなjson形式のSeriesファイルが必要になります。(Paraview5.6以上)

.series
{
  "file-series-version" : "1.0",
  "files" : [
    { "name" : "foo1.vtk", "time" : 0 },
    { "name" : "foo2.vtk", "time" : 5.5 },
    { "name" : "foo3.vtk", "time" : 11.2 }
  ]
}

Paraview5.6以下では以下のような書式のものを作成ください。

.vtp
<VTKFile type="Collection" version="0.1" byte_order="LittleEndian">
  <Collection>
<DataSet timestep="0.01" group="" part="0" file="Foo_001.vtu"/>
<DataSet timestep=“0.02" group="" part="0" file=“Foo_002.vtu"/>
<DataSet timestep=“0.03" group="" part="0" file=“Foo_003.vtu"/>
  </Collection>
</VTKFile>

これらのファイルをvtkファイルがあるフォルダーに置き、Paraviewで読み込むとステップ数と時刻の対応が可能です。
Information>Time にIndexとTimeが表示されると思います。

WS000014.JPG

vtkファイルの数が多いと、テキストの編集も大変になるので、.seriesファイルを出力するPythonスクリプトを作成しました。実行時に、必要項目をinputするとseriesファイルを作成することができます。

CreateSeries.py
import json

def generate_json(prefix, start, end, interval, start_time, time_interval):
    files = []
    time = start_time
    for i in range(start, end + 1, interval):
        # 追番を4桁以上にし、不足分を0で埋める
        formatted_number = str(i).zfill(4)
        filename = f"{prefix}{formatted_number}.vtk"
        files.append({"name": filename, "time": time})
        time += time_interval

    data = {
        "file-series-version": "1.0",
        "files": files
    }
    return json.dumps(data, indent=2)

if __name__ == "__main__":
    prefix = input("ファイル名のプレフィックスを入力してください(例:ファイル): ")
    start = int(input("開始番号を入力してください: "))
    end = int(input("終了番号を入力してください: "))
    interval = int(input("追番の間隔を入力してください: "))
    start_time = float(input("時間の開始時刻を入力してください: "))
    time_interval = float(input("時間の間隔を入力してください: "))

    result = generate_json(prefix, start, end, interval, start_time, time_interval)
    
    with open("TimeSteps.series", "w") as file:
        file.write(result)

    print("TimeSteps.seriesファイルにJSONテキストを出力しました。")

今回は、ParaviewでVTKの時刻の設定を行う方法を説明しました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?