LIGGGHTS

**LIGGGHTS**（ライツ/laɪts/ 、**L**-Improved for **G**eneral **G**ranular and **G**ranular **H**eat **T**ransfer **S**imulations）は、粉体・顆粒材料を離散要素法（DEM）で解析するオープンソース・ソフトウェアである。

## 解説
主開発元はオーストリア・リンツの DCS Computing GmbH とヨハネス・ケプラー大学リンツ（JKU Linz）の研究グループで、2009 年に汎用分子動力学コード LAMMPS をフォークして誕生した。MPI 並列計算に対応し、CFD ソルバー OpenFOAM と連成する CFDEM®coupling も公式に提供されている。
しかしオープンソース版の最新リリース 3.8.0（2017-11-30）を最後に公式開発は停止し、後継として商用版 **Aspherix®** へ完全移行した。。学術界でも「事実上の開発中止」と見なされた。しかし、LIGGGHTSのユーザーは未だ根強く存在しており、オープンソースの潮流を引き継ぎ、様々な大学や研究機関において機能拡張や保守を行われつづけており、現在は複数のフォークが独自に存在している。このWikipediaでは能う限りこれらのフォークについて紹介するが、すべて網羅できている保証はない。掲載されていないフォークについてはGitHubやGitLabにおいて"LIGGGHTS"と検索してLIGGGHTS-hoge (ここでhogeはメタ変数文字列) を探されたい。フォーク以外に前処理や後処理に有用な数多くのプログラムやLIGGGTHSのexampleフォルダにはない有志によるLIGGGHTSの実行例も多数見つかるだろう。こうしたユーザーによる開発や活発な情報共有が商用ソフトにはない魅力である。日本では2025年からOpenDEMJapanによってDEMの情報共有のためのフォーラムが開設されており, ソースコード解析が積極的に行われている。
## 概要

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

# `liggghts -in in.demo` のように実行し、粒子情報を `*.dump` ファイルとして出力  
# `LPP` などのツールで `*.dump` を `*.vtk` 形式へ変換.
# ParaView で `*.vtk` を読み込み、レンダリングや解析を行う
## 現状：開発停止とフォーク
公開版 3.8.0 以降、DCS Computing は新機能をすべて Aspherix® に集約しており、LIGGGHTS-PUBLIC は「メンテナンスのみ」の保守フェーズに入った。そのため研究者や企業は以下のような派生版を作成し、独自のモデル追加やバグ修正を継続している。
* **LIGGGHTS-PUBLIC** – 公式 OSS 版（保守のみ）
* **LIGGGHTS-INL** – アイダホ国立研究所が拡張した高機能版
* **LIGGGHTS-PFM** – JKU Linz 粒子流動モデリング部門による研究向け改良版
* **LIGGGHTS-PICI** – 英ブリストル大学 Positron Imaging Centre が JKR 粘着モデルを実装
* **LIGGGHTS_Flexible_Fibers** – 繊維状粒子（可撓性ファイバー）モデルを追加
* **LAMMPS GRANULAR パッケージ** – LAMMPS 本体に実装された DEM 拡張（近年は LIGGGHTS 代替として利用例が増加）
### LIGGGHTS-INL
アイダホ国立研究所（INL）が公開・保守する能力拡張フォーク。LIGGGHTS-PUBLIC 3.8 系を基に独自に 4.0.0 相当へ更新されており、ボンデッドスフィア（粒子接着）モデル、弾塑性結合剛性、ひずみ硬化型非線形接触モデルなどを実装。

バイオマス粒子流動や構造バイオメカニクス解析向けに開発されたが、一般的な粒状体シミュレーションにも対応する。。

LIGGGHTS-PFM

オーストリア・リンツにあるヨハネス・ケプラー大学の粒子流モデリング学科が公開・保守する研究向けフォーク。2018 年以降「YY.MM」形式で半年〜年１回ペースのリリースを継続しており、最新は 24.01（2024-01）。公開版 3.8 系を基盤とする。

### LIGGGHTS-PICI
University of Bristol Positron Imaging Centre（PICI）が公開・保守する粘着性粉体向けフォーク。LIGGGHTS-PUBLIC 3.8 系を基盤に **JKR 粘着接触モデル** を実装する。JKR 接触モデルは、標準 LIGGGHTS ライブラリの「sjkr」(または簡略化された JKR) モデルを置き換えることを目的とした凝集接触モデルである。最新タグは v1.3.2（2023-09）である。
PICI-LIGGGHTS の examples/PICI-LIGGGHTS/rotating_drum_JKR に収録された入力スクリプトで、JKR 粘着接触モデルを用いた回転ドラム混合（drum mixer）の挙動を再現する。Hertz モデルからの主な変更点として粒子間付着仕事を与え、粘着性（表面エネルギー）の物性値と `resolutionJKR` を調整してシミュレーションを安定化させる。モデル実装は Eidevåg らによる JKR コードに基づき、乾式粉体や降雪粒子の付着挙動を検証する用途を想定している。
### LIGGGHTS_Flexible_Fibers
ユーザ開発者の Matthew W. Schramm が保守するフォークで、硬質多球粒子を「弾塑性バネ−ダンパ」結合で連結して **可撓性ファイバー（麦わら・草・プラスチックストロー等）** として挙動を再現できるよう改造した版である。基盤は LIGGGHTS-PUBLIC 3.8 系で、初期実装は richti83 による BondPackage（3.3 系）を全面的に移植・拡張したものに由来する。

* **ボンドモデル** – 曲げ・ねじりを含む 6 自由度ヤング率／せん断弾性を持ち、最大応力または最大変位で破断する。  
* **動的ファイバー挿入** – サイクロイド生成アルゴリズムによりランダム配向・長さ分布のファイバーを高速生成するサンプルスクリプトを同梱。  
* **JKR 粘着モデルとの併用** – 粘着性粉体や降雪接着解析を想定し、eidevag が公開した JKR 実装を統合。  
最新コミットは 2025-05-18 時点の *master* ブランチで、GPL-2.0 ライセンス下で公開されている。
GitHub内のチュートリアルが充実している.

## 主な機能
* 多様な粒子形状（球・複数球・超楕円 など）
* 接触モデル（Hertz–Mindlin ほか）
* 熱伝達および固気二相流連成（CFDEM®coupling）

## 実行に必要なソフト
LIGGGHTS を Windows 環境で実行する場合、典型的なツールチェーンは以下のとおりである。

;3DCADソフト  
: LIGGGHTS が読み込む STL 形式を出力できる三次元 CAD が必要となる。  

;テキストエディタ  
: 入力スクリプトはプレーンテキストで作成するため、構文強調表示やインデント機能を備えたエディタが望ましい。**Visual Studio Code** は多数言語に対応したシンタックスハイライトを標準で提供する。拡張機能 **Lammps Syntax Highlighting** を追加すると LIGGGHTS／LAMMPS スクリプトにもカラーリングが適用される。  

;ターミナル（WSL or cmd）  
: Windows Subsystem for Linux (WSL) を用いると、Ubuntu などの Linux ディストリビューションを仮想化せずに実行でき、LIGGGHTS の Linux バイナリもそのまま動作する。 以前はこのWSL仮想環境方式が用いられることが多かったが, 2025年に美少女 Vtuber 粉体粒子 によってWindows 用にビルドされ, コマンドプロンプト(cmd) で実行できるようになった. 

;LIGGGHTS  
: DEM ソルバー本体。公式配布はソースコードのみであるため、MPI を有効にしてビルドするのが一般的である。2024年まではGitHub にはシリアル専用の Windows バイナリが配布されているが、MPI による並列実行には対応していなかったが、2025年にOpenDEMJapanによってWindowsようにコンパイルされたものが配布されるようになり, 仮想環境WSLを使わずにWindowsのコマンドプロンプトから実行できるようになった. インストーラで簡単にインストールすることができる.

;MPI 実装  
: LIGGGHTS の並列化には MPI が必須であり、Ubuntu 環境では `mpich` を `apt` で容易に導入できる。

;ParaView  
: 計算結果を可視化するオープンソースの科学可視化ツールで、Windows・macOS・Linux 向けバイナリが公式に提供される。LIGGGHTS からは VTK 形式で直接出力するか、後述のプラグインで dump ファイルを使用して読み込む。  または一旦、dumpファイルとして出力してVTK 形式へ変換する。

;Python  
: dump → VTK 変換スクリプトや後処理自動化に広く用いられる。GitHub には `dump2force.py` (liggghts-force-chains) などの変換ユーティリティが公開されている。dump を直接読み込む ParaView プラグインも配布されているが、最終コミットは 2018 年であり最新 ParaView では再ビルドが必要とされる。  

;VTK 変換と ParaView プラグイン  
LIGGGHTS は `dump custom/vtk` などのコマンドで粒子情報を直接 VTK 形式へ出力できるが、`dump` ファイルに書き出し、LPP.pyなどのPython スクリプトで VTK へ変換してから可視化するワークフローも広く用いられる。VTK は ParaView の旧版・新版を問わず読み込めるため、バージョン差異による不具合を避けやすい。  
`dump` を直接読み込む ParaView 用 C++ プラグイン も配布されているものの、2020 年以降メンテナンスが停止しており最新リリースではコンパイルが必要、または **ParaView&nbsp;5.8.1** 以前の旧版を併用する必要がある。  

## インストール
# OpenDEMJapanによってWindowsようにコンパイルされたものが配布される. . LIGGGHTS Windows用インストーラで簡単にインストールすることができる. 

## ライセンス
LIGGGHTS-PUBLIC は GPL v2 以上で配布され、商用利用も可能だが派生物公開義務（コピーレフト）が課される。独自機能を含むクローズドソース版として **Aspherix®** が提供されている。

## 関連ソフトウェア
* LAMMPS — LIGGGHTS の派生元となった MD コード
* OpenFOAM — CFD ソルバー。CFDEM®coupling を介して二相連成解析が可能
* **Aspherix®** — DCS Computing による商用後継

## サンプルコードin.packing

LIGGGHTS exampleフォルダにあるin.packingについて紹介する. 本入力スクリプトは，分子動力学コード LAMMPS を用いて球状粒子をランダムパッキングへと段階的に膨張させ，所定の体積充填率を得る手順の最小例である。シミュレーション領域は
L_x=L_y=0.10\ \mathrm{m},\qquad L_z=0.15\ \mathrm{m}
の直方体で，体積は
V_{\mathrm{box}}=L_xL_yL_z=1.5\times10^{-3}\ \mathrm{m^{3}}
である。初期状態では半径
r_1=5\ \mathrm{mm}（割合 0.3）と
r_2=8\ \mathrm{mm}（割合 0.7）の二種類の球を無速度で同時挿入し，次式で定義される体積充填率

\alpha=\frac{\displaystyle\sum_{i=1}^{N}\tfrac{4}{3}\pi r_i^{3}}{V_{\mathrm{box}}}

を
\alpha_0=0.25（25 %）に設定する。粒子–粒子および粒子–壁の法線接触力はヘルツ則

F_n=\frac{4}{3}E^{\ast}\sqrt{R^{\ast}} \delta^{3/2}

で評価し，ここで
E^{\ast}=5 \mathrm{MPa}（有効ヤング率），
R^{\ast} は有効曲率半径，
\delta は重なり長さである。接線方向にはクーロン摩擦

F_t=\mu F_n

（摩擦係数
\mu=0.5）と履歴依存すべりを導入する。

半径は一定ステップ毎に指数法で増加させる。目標充填率を
\alpha_t=0.67（67 %），全成長ステップ数を
T_{\mathrm{grow}}=5.0\times10^{4}，半径更新間隔を
\Delta t_{\mathrm{update}}=40 step とすると，各更新で適用する無次元拡大率

R=\left(\frac{\alpha_t}{\alpha_0}\right)^{\Delta t_{\mathrm{update}}/(3T_{\mathrm{grow}})}

が得られ，本スクリプトでは
R\approx1.00084 となる。これを

r_i(t+\Delta t_{\mathrm{update}})=R,r_i(t)

で全粒子に適用しながら
T_{\mathrm{grow}} step だけ発展させた後，半径固定のままさらに
T_{\mathrm{relax}}=2.0\times10^{4} step 緩和計算を行うことで粒子間の残留応力を低減する。

時間積分は回転動力学を含む
\mathrm{NVE}（並進＋剛体回転）法，時間刻みは
\Delta t = 10\ \mathrm{\mu s} であり，機械単位系は国際単位系 (SI) を用いる。最終的に得られる粒子配置は体積充填率

\alpha\approx0.67

のランダムパッキングであり，球半径分布と初期パラメータを変えることで多様な密充填モデルの作成に利用できる。


```python
# ---------------------------------------------------------------------------
# パーティクルの挿入 → 直径を段階的に増加させてランダムパッキングを生成する例題
# ＊単位系：SI（m‧kg‧s）で計算
# ---------------------------------------------------------------------------

# --- 基本アトムスタイルと近接通信 ----------------------------------------
atom_style  granular          # 粒子シミュレーション専用アトムスタイル（位置・速度・角速度を持つ）
atom_modify map array         # アトムIDからインデックスへの変換方法を「配列」で保持し高速化
boundary    m m m             # x,y,z すべてを可変境界（モバイル）として設定
newton      off               # 近接リストの計算をペア毎に独立実施（粒子数が少ないと高速）
#echo      both              # 入出力の詳細ログを見たい場合はコメント解除
communicate single vel yes    # ゴースト更新時に「単体粒子」＋速度情報を確実に送る
units       si                # SI単位系に切替

# --- 計算領域（ボックス） --------------------------------------------------
region      reg block -0.05 0.05 -0.05 0.05 0. 0.15 units box # 10 cm×10 cm×15 cm の直方体
create_box  1 reg             # 粒子タイプ 1 だけを含むボックスを生成

# --- 近接リスト／隣接検索 --------------------------------------------------
neighbor    0.002 bin         # 2 mm のビン幅で空間分割して隣接粒子候補を保存
neigh_modify delay 0          # 近接リストの再構築を毎ステップ行う（粒子成長に追従）

# --- 粒子–粒子間物性値をグローバルに設定 ---------------------------------
fix m1 all property/global youngsModulus       peratomtype         5.e6   # ヤング率
fix m2 all property/global poissonsRatio       peratomtype         0.45   # ポアソン比
fix m3 all property/global coefficientRestitution peratomtypepair 1 0.3   # 反発係数
fix m4 all property/global coefficientFriction    peratomtypepair 1 0.5   # 摩擦係数

# --- 相互作用モデル --------------------------------------------------------
pair_style gran model hertz tangential history   # ヘルツ接触＋摩擦履歴（凝着なし）
pair_coeff * *                                   # 全タイプに適用

# --- 時間積分ステップ ------------------------------------------------------
timestep 0.00001          # Δt = 10 µs

# --- 壁面の定義（左右・前後・上下） ----------------------------------------
fix xwalls1 all wall/gran model hertz tangential history primitive type 1 xplane -0.05
fix xwalls2 all wall/gran model hertz tangential history primitive type 1 xplane  0.05
fix ywalls1 all wall/gran model hertz tangential history primitive type 1 yplane -0.05
fix ywalls2 all wall/gran model hertz tangential history primitive type 1 yplane  0.05
fix zwalls1 all wall/gran model hertz tangential history primitive type 1 zplane  0.00
fix zwalls2 all wall/gran model hertz tangential history primitive type 1 zplane  0.15

# --- 挿入用の粒子テンプレート＆分布 ---------------------------------------
fix pts1 all particletemplate/sphere 15485863 atom_type 1 density constant 2500 radius constant 0.005
fix pts2 all particletemplate/sphere 15485867 atom_type 1 density constant 2500 radius constant 0.008
fix pdd1 all particledistribution/discrete 32452843 2 pts1 0.3 pts2 0.7

# --- 直径成長のパラメータ ---------------------------------------------------
variable alphastart  equal 0.25   # 初期充填率
variable alphatarget equal 0.67   # 目標充填率
variable growts     equal 50000   # 成長ステップ数
variable growevery  equal 40      # 直径更新間隔
variable relaxts    equal 20000   # 緩和ステップ数

# --- 挿入を行う領域とグループ定義 -----------------------------------------
group nve_group region reg

# --- 粒子の初期挿入 --------------------------------------------------------
fix ins nve_group insert/pack seed 32452867 distributiontemplate pdd1               &
         maxattempt 200 insert_every once overlapcheck yes all_in yes               &
         vel constant 0. 0. 0. region reg volumefraction_region ${alphastart}

# --- 粒子運動方程式（並進+回転）の解法を適用 ------------------------------
fix integr nve_group nve/sphere

# --- 出力設定 --------------------------------------------------------------
compute 1 all erotate/sphere
thermo_style custom step atoms ke c_1 vol
thermo 1000
thermo_modify lost ignore norm no

# --- 初期配置の確定 --------------------------------------------------------
run 1
dump dmp all custom/vtk 350 post/packing_*.vtk id type type x y z ix iy iz           &
     vx vy vz fx fy fz omegax omegay omegaz radius
unfix ins

# --- 直径成長率の算出 -------------------------------------------------------
variable Rgrowrate equal (${alphatarget}/${alphastart})^(${growevery}/(3.*${growts}))
print "The radius grow rate is ${Rgrowrate}"

# --- 粒径を段階的に増加 -----------------------------------------------------
compute rad all property/atom radius
variable dgrown atom ${Rgrowrate}*2.*c_rad
fix grow all adapt ${growevery} atom diameter v_dgrown

# --- 成長フェーズ実行 -------------------------------------------------------
run ${growts}

# --- 緩和フェーズ -----------------------------------------------------------
unfix grow
run ${relaxts}
```


## 出典

## 脚注

## 外部リンク
* LIGGGHTS® 公式サイト (CFDEM project)
* LIGGGHTS-PUBLIC GitHub リポジトリ
* CFDEM®coupling プロジェクト
* Aspherix® – 商用後継版