Open DEM Japan

LIGGGHTS

LIGGGHTSとは

LIGGGHTSの概要については私が書きましたWikipediaをご笑覧ください. https://ja.wikipedia.org/wiki/LIGGGHTS

各種フォーク

LIGGGHTS-PUBLICが大元のフォークで, そこから多数の派生版が続々誕生してきました. お目当てのモデルが利用できるフォークを選択ください.

マニュアル

LIGGGHTS チュートリアル 実行例

LIGGGHTS-PUBLIC/examples/LIGGGHTS/Tutorials_public

https://github.com/CFDEMproject/LIGGGHTS-PUBLIC/tree/master/examples/LIGGGHTS/Tutorials_public
メディア 内容
chute_wear
シュート内摩耗をDEMで可視化.
cohesion
凝集粒子の挙動を解析.
contactModels
接触モデルの違いを比較.
conveyor
ベルトコンベヤ搬送を粒子レベルで再現.
heatTransfer_1
粒子間熱伝達のシミュレーション1.
heatTransfer_2
粒子間熱伝達のシミュレーション2.
hydrogel_multicontact
ハイドロゲル多点接触を解析.
hysteresis
ヒステリシスモデルでオーバーラップを蓄積.
insert_stream
粉体投入流の形成過程を観察.
multisphere_stone_restitution
多球で複雑形状の石を表現.
packing
球を成長させ高密度充填.
mesh_tet スナップショット mesh_tet
メッシュ内部に粉体を充填. (スナップショット)
meshGran
固定CAD壁に粉体を連続投入し充填・堆積をシミュレート.
movingMeshGran
回転するCAD壁と粉体の相互作用を可視化.

LIGGGHTS-PUBLIC/examples/LIGGGHTS/SPH

https://github.com/CFDEMproject/LIGGGHTS-PUBLIC/tree/master/examples/LIGGGHTS/SPH
メディア 内容
sph_1
3D SPHで流体粒子の自由落下と壁当たりを再現.
sph_2
2D SPHで流体粒子と可動壁の相互作用を可視化.

LIGGGHTS-INL/examples/LIGGGHTS/INL_tutorials

https://github.com/idaholab/LIGGGHTS-INL/tree/inl/examples/LIGGGHTS/INL_tutorials
メディア 内容
6dof_cube
6自由度で動く立方体剛体と粉体の衝突を再現.
dump_custom_vtk
円柱容器に粉体を詰め, custom/vtkでVTK・VTP・VTU同時出力を検証.
mix_sphere_multisphere
球と多球クランプを混在させ自由落下を可視化.

abhishekdbihani/compaction_LIGGGHTS/src

https://github.com/abhishekdbihani/compaction_LIGGGHTS
メディア 内容
uniaxial_compaction
二分散粉体の一軸圧縮をLIGGGHTSで再現.
uniaxial_compaction_forcechain
二分散粉体の一軸圧縮をLIGGGHTSで再現. 力鎖.

LIGGGHTS-INL/examples/LIGGGHTS/INL

https://github.com/idaholab/LIGGGHTS-INL/tree/inl/examples/LIGGGHTS/INL
メディア 内容
chain_bending_test
鎖状粒子列を曲げて挙動を観察(破断なし).
chain_test
鎖状粒子列をボンドモデルで曲げ試験, 中央プレートで押し込み.

LIGGGHTS-INL/examples/LIGGGHTS/INL_tutorials

https://github.com/idaholab/LIGGGHTS-INL/tree/inl/examples/LIGGGHTS/INL_tutorials
メディア 内容
t01a_static_angle_of_repose_monosphere
円筒容器に単一径球を落下充填→円筒を引き上げて安息角を評価.

engineerdo.com

https://www.engineerdo.com/
メディア 内容
Silo
サイロ中の力鎖を計算.
Silo_discharge_using_a_belt_conveyor
DEMソフトLIGGGHTSでベルトコンベヤ式サイロの充填・排出過程をシミュレーション.
Screw_conveyor
スクリューコンベヤ中の粒子の運動を可視化.
RotatingDrum
転動ミル中の粒子の運動を可視化.

本文書の読み方

円滑な進行を図るとともに, その内容に遺漏のないようにWindows 上での操作手順を以下に逐一記述しておく.

以後, 本文書では次の表記

  • 「…」:プルダウンメニュー(> は階層同士の区切り)
  • “…”:ダイアログやメニュー中の設定・チェック項目, 質問, 一般の文字列
  • […]:ボタン
  • ‘…’:ファイル中の文字列
  • …:キートップ

を採用するものと約束する.

慣例に従い, 入出力ファイルの文字列をメタ構文変数 “hoge” で代表させることにする.

実行の概要

LIGGGHTS には一般に普及したグラフィカルな FEM ソフトのようなボタン操作だけで解析を行える統合 GUI は用意されていない. 代わりに, 利用者は簡潔なテキストベースの入力スクリプト(拡張子 in.*)を記述し, ターミナル上でコマンドを実行するというインタプリタ型のワークフローを採用する. 計算結果は ParaView などの汎用可視化ツールで後処理・可視化する仕組みであり, 以下の手順が典型例である.

3D CAD
メモ帳
LIGGGHTS
ParaView
  1. 3D CADで壁用のSTLファイルを作成
  2. メモ帳でLIGGGHTS 入力ファイル in.hoge を編集
  3. liggghts -in in.hoge のように実行し, 粒子情報を hoge.vtkhoge.dump ファイルとして出力.
    ( LPP などのツールで hoge.dumphoge.vtk 形式へ変換)
  4. ParaView で hoge.vtk を読み込み, 可視化

実行に必要なソフト

本節では, 必要となるソフトウェアの概観を説明します. インストールの詳細は次節以降で扱います. 「専門用語まみれでついていけるかな?」と思っても, まずは読み進めてください. 次節以降で実際に手を動かしながら作業すれば, 自然と腑に落ちてくるはずです. LIGGGHTS と ParaView はクロスプラットフォーム対応で, Windows・macOS・Linux のどれでも動作します. 本サイトではユーザー数の多い Windows 版を例に解説します. 私自身は Mac ユーザーですが, OS ごとに書き分けると冗長になるため, あえて Windows に絞ります. 実行に必要なものは, 次の7点です.

  1. 3DCADソフト. STL出力できるものなら何でもいい.
  2. テキストエディタ. Visual Studio Code (VS Code)推奨.
  3. ターミナル. WSL
  4. LIGGGHTS
  5. mpi
  6. ParaView
  7. Python
まずはテキストエディタが必要です. 標準のメモ帳でもかまいませんが, できればVS Codeを推奨します. VS Codeなら構文カラーリングができ, 下記のようにテキストに色がついて識別しやすくなります. VS Codeのスクリーンショット

Windows には標準で「コマンド プロンプト」が備わっていますが, LIGGGHTS を実行する際は, 追加で WSL(Windows Subsystem for Linux)というターミナルをインストールして使います. プログラミングに慣れていて「自分でビルドできる」という方なら, C++ 版の LIGGGHTS をコンパイルして Windows 用の exe をつくることも不可能ではありません. とはいえ, 初心者の方には, まず Linux 向けにビルド済みの実行ファイルを導入する方法をおすすめします. 通常, Linux 用にビルドされたバイナリは Windows では動きませんが, WSL を導入すれば問題なく実行できます. Windows用にビルドされたもの(https://github.com/wuhao1938/LIGGGHTS_IN_WINDOWS_10, https://github.com/wuhao1938/LIGGGHTS_IN_WINDOWS_11)がGithubで配布されていますが, これは並列化計算ができないビルドになっており, 実用的ではありません.

WSL に Ubuntu を導入すると, ターミナルで sudo apt-get install コマンドが使えるようになります. このコマンドで, LIGGGHTS 本体と並列計算に必須の MPICH をまとめてインストールできます. 「並列計算は敷居が高いから, 初心者は後回しでいい」――そんな記事を見かけることもあります. しかし DEM 解析では並列化は must-have-tool です. 使わなければ, 計算時間を際限なく浪費することになります.

ParaView は LIGGGHTS 専用ソフトではなく, 3 次元の科学技術計算全般で広く利用されている可視化ツールです. 無償のオープンソースながら, 商用アプリに引けを取らない性能を備えています. クロスプラットフォーム対応のため, 数年前までは Windows 版で「ボタンが小さい」「GUI が扱いづらい」と感じる場面もありましたが, 近年は改良が進み, Windows 上でも違和感なく操作できるようになりました.

ParaViewのスクリーンショット

LIGGGHTS では VTK 形式を直接書き出すこともできますが, いったん dump ファイルに出力し, Python スクリプトで VTK へ変換したほうが都合のよい場面も多々あります. VTK にしておけば, ほぼどのバージョンの ParaView でも可視化できます. 「dump をそのまま読めればラクなのに……」という声もありますが, ParaView 用のプラグイン(https://github.com/ooyedeji/LIGGGHTS-Paraview-plugin)は開発がストップしており, 最新の ParaView では動作しません. どうしても使いたい場合は自分でビルドし直すか, 古めの ParaView 5.8.1 をインストールする必要があります.

インストール方法

VS Code

まずはエディターのVS Codeをインストールします.
  1. VS Code公式サイト(https://azure.microsoft.com/ja-jp/products/visual-studio-code)からインストーラをダウンロードし, 基本的へ[次へ]や[OK]などをクリックしてインストールします.
  2. 左列の四角いボタンを押し, 拡張機能の検索欄に"LAMMPS"と記入して, "Lammps Syntax Highlighting"を検索します. [インストール]をクリックしてインストールします. 構文カラーリングができ, 拡張子がin.*の テキストに色がついて識別しやすいようになります. Lammps Syntax Highlighting

ターミナル. WSL

  1. エクスプローラーでパスはどこでもいいのでツールバーに"cmd"と入力して Enter を押下します. エクスプローラーのツールバー.
  2. 下記を実行します.
    wsl --install
  3. しばらくするとwslのUbuntuがインストールできます.
  4. 下記のように表示されるのでパスワードを設定します.
    
    ダウンロードしています: Ubuntu
    インストールしています: Ubuntu
    ディストリビューションが正常にインストールされました. 'wsl.exe -d Ubuntu' を使用して起動できます
    Ubuntu を起動しています...
    
    Provisioning the new WSL instance Ubuntu
    This might take a while...
    Create a default Unix user account: ユーザー名
    
    New password:"ここにパスワードを入力してください."
    Retype new password:"ここにパスワードを入力してください."
    passwd: password updated successfully
    To run a command as administrator (user "root"), use "sudo ".
    See "man sudo_root" for details.
                    

LIGGGHTS

  1. エクスプローラーでパスはどこでもいいのでツールバーに"bash"と入力して Enter を押下します. エクスプローラーのツールバー.
  2. wsl(bash)上で下記を実行します. パスワードが要求されるので先ほど設定したパスワードを入力してください.
    sudo apt upgrade
  3. wsl(bash)上で下記を実行します.
    sudo apt update
  4. wsl(bash)上で下記を実行します. Do you want to continue? [Y/n] と聞かれるので "y" と入力します.
    sudo apt-get install liggghts
  5. wsl(bash)上で下記を実行します.
     liggghts 
  6. 下記のように出力されれば成功です.
     --------------------------------------------------------------------------
    LIGGGHTS (Version LIGGGHTS-PUBLIC 3.8.0, compiled 2024-03-31-20:10:17 by buildd, git commit unknown)
    --------------------------------------------------------------------------

MPI

  1. エクスプローラーでパスはどこでもいいのでツールバーに"bash"と入力して Enter を押下します. エクスプローラーのツールバー.
  2. wsl(bash)上で下記を実行します. パスワードが要求されるので先ほど設定したパスワードを入力してください.
    sudo apt-get install mpich
  3. wsl(bash)上で下記を実行します.
     mpirun 
  4. 下記のように出力されれば成功です.
     --------------------------------------------------------------------------
     mpirun could not find anything to do.
    
     It is possible that you forgot to specify how many processes to run
     via the "-np" argument.
    --------------------------------------------------------------------------
  5. ターミナル上でCtrl + C で強制終了されます.

ParaView

  1. Microsoft MPI公式サイト(https://learn.microsoft.com/en-us/message-passing-interface/microsoft-mpi) から Microsoft MPI のインストーラ msmpisetup.exe (Microsoft MPI v10.1.2) をダウンロードします. 新しいとまだ ParaView が対応していないことがあるので, ParaView が正常に動作しなければ古いバージョンをダウンロードします. インストーラの指示に従いインストールします.
  2. インストールできたかcmdで下記を実行します.
    mpiexec
  3. 下記のように表示されればインストール成功です.
    INL\microstructure_compression$ mpiexec
    Microsoft MPI Startup Program [Version 10.1.12498.18]
    
    Launches an application on multiple hosts.
    
    Usage:
    
        mpiexec [options] executable [args] [ : [options] exe [args] : ... ]
        mpiexec -configfile 
    
    Common options:
  4. ParaView公式サイト (https://www.paraview.org/download/) からインストーラ ParaView-5.13.1-MPI-Windows-Python3.10-msvc2017-AMD64.msi をダウンロードします.
  5. ParaViewインストーラの指示に従って基本的に[次へ]や[OK]をクリックしてインストールします.

Python

  1. Python公式サイト(https://www.python.org/downloads/)からpython-3.8.10-amd64.exeをダウンロードします.
  2. インストーラを起動し, インストーラの指示に従ってインストールします.
  3. cmd上で下記を実行します.
    py
  4. 下記のように表示されればインストール成功です.
    Python 3.8.10 (tags/v3.8.10:3d8993a, May  3 2021, 11:48:03) [MSC v.1928 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>>

はじめてのLIGGGTHの実行

  1. エクスプローラーで "Linux"と入力します.
  2. "Ubuntu" > "home" > "ユーザー名" のフォルダを開いていきます. エクスプローラーのスクリーンショット
  3. 絶対パスとしては"\\wsl.localhost\Ubuntu\home\ユーザー名"です.
  4. 下記のGithubのページからzipファイルをダウンロードします.
    https://github.com/CFDEMproject/LIGGGHTS-PUBLIC
    Githubのスクリーンショット
  5. zipファイルを解凍すると "examples" があります. このフォルダをコピーして"\\wsl.localhost\Ubuntu\home\ユーザー名"にペーストします.
  6. このexampleフォルダはLIGGGHTSの様々な実行例が納められたフォルダです.
  7. このexampleフォルダの中の"\LIGGGHTS\Tutorials_public\packing"を開きます.
  8. このフォルダでツールバーに"bash"と入力してターミナルを開きます.
  9. ターミナルで下記のように入力します.
    liggghts -in in.packing 
  10. postフォルダが出力されます.
  11. ParaViewを立ち上げます.
  12. ParaViewの「File > Open」でエクスプローラーを開き, ツールバーに"\\wsl.localhost\Ubuntu\home\ユーザー名\examples\LIGGGHTS\Tutorials_public\packing\post"と入力して [OK] で開きます.
  13. 次のように設定します. ParaViewのスクリーンショット
  14. 再生ボタン [▷] をクリックすると再生されます.

    並列化実行

    現在のパソコンは複数スレッド主流のため, ほとんどのPCでは並列化計算ができます.
  1. ターミナルで下記のように記入します.
     mpirun --display-allocation --report-bindings -np 4 hostname
  2. 下記のような出力が得られます.
    
    ======================   ALLOCATED NODES   ======================
    DESKTOP-MS24P8I: flags=0x11 slots=10 max_slots=0 slots_inuse=0 state=UP
    =================================================================
                    
  3. slots数が10なので10並列化実行できます.
  4. 下記のように実行します.
    mpirun -np 10 liggghts-inl -in in.packing
  5. postフォルダが出力されます. この後は前節と同様の手順でParaViewで可視化します.

派生版比較

派生版 主な特徴 GitHub 初リリース
LAMMPS (Granular) 汎用 MD コードに粒子接触モデルを追加. 基本的な弾性接触, 摩擦, 簡易的粒子生成をサポート. lammps/lammps 2004 年公開(粒子機能は 2008–10 年頃実装)
LIGGGHTS‑PUBLIC 公式本流. 幅広い接触・熱・CFD 連成モデルを搭載し CFDEM coupling と完全互換. CFDEMproject/LIGGGHTS-PUBLIC 2010‑04‑19
LIGGGHTS‑PFM JKU Linz 学術版. 化学反応・粗視化モデルなど最先端研究向け機能を追加. ParticulateFlow/LIGGGHTS-PFM 2019‑02 (ver.19.02)
PICI-LIGGGHTS Python インターフェース強化版. JKR 粘着モデルを標準装備. uob-positron-imaging-centre/PICI-LIGGGHTS 2019 年頃 (v3.8.1 ベース)
LIGGGHTS_Flexible_Fibers 柔軟繊維・ボンドモデル拡張. 細長い繊維束の曲げ・破断を解析可能. schrummy14/LIGGGHTS_Flexible_Fibers 2018 年頃
LIGGGHTS‑INL Idaho National Laboratory 版. 結合球・弾塑性接触など高度モデルを追加. idaholab/LIGGGHTS-INL 2021 年

よくある質問(FAQ)

粒子が壁をすり抜ける
時間刻みが大きすぎる可能性があります. fix check/timestep/gran で推奨 dt を確認し, 十分小さな値を設定してください.
ParaView で粒子が点にしか見えない
Glyph → SpherePoint Gaussian 表示へ変更し, Scale Arrayradius を設定すると実寸表示できます.
非球形粒子を扱いたい
クラスタ(マルチスフィア)や超二次形状(ver.3.8.0 以降)で近似可能です. STL 壁メッシュとして実装する方法も一般的です.
GPU で高速化したい
LIGGGHTS‑PUBLIC には GPU サポートがありません. LAMMPS + KOKKOS 版 DEM またはソース改変による独自 GPU 対応を検討してください.
計算時間が長い
MPI 並列数を増やす / dump 出力頻度を下げる / neighbor 更新間隔を調整するなどの最適化が有効です.

よく使われるコマンドと設定例

以下は LIGGGHTS® で頻繁に用いられる代表コマンドをカテゴリ別に整理した早見表です. 粒子生成・物性付与・境界条件・解析出力まで一通り設定できます.

代表コマンド早見表
カテゴリ キーワード 概要
材料プロパティ fix property/global ヤング率・摩擦係数など粒子種ごとの物性値を登録
粒子挿入 fix insert/pack
fix insert/stream
領域内へ一括パック/連続流入させる最新推奨コマンド(旧 fix pour 代替)
接触モデル pair_style gran model hertz tangential history ヘルツ–ミンドリン弾性+履歴摩擦
境界・壁 fix wall/gran
fix mesh/surface
平面/円筒/多角柱壁, または STL メッシュ壁の定義
外力・積分 fix gravity
fix nve/sphere
重力付与と球粒子の運動積分
解析 compute pair/gran/local 接触ごとの力・重なり量をローカル出力
出力 dump ... custom/vtk VTK 直接出力(ParaView で即時可視化可能)

Tips

当サイトでは Google AdSense などの広告配信サービスを利用しています。広告表示による収益は記事の更新・改善に充当しており、Cookie が利用される場合があります。詳細は Google の広告ポリシーをご確認ください。