【Linux用ビルドアプリ】Calculix, FrontISTR
Linux環境でCAEツールをビルド・運用するためのメモです。Debian 13とArch Linux を中心に、Intel oneAPI 2026.0 (2026/05時点の最新版) を使ってCalculixとFrontISTRをビルドし、動作確認をしました。
1. CalculiX(ccx, Pardisoソルバー)
A) Arch Linux:AUR(calculix-ccx-pardiso)
Arch Linux の AUR パッケージ(calculix-ccx-pardiso)を Intel oneAPI 2026.0 用に修正してコンパイル(libmkl_core.so.3のように共有ライブラリの末尾がこれまでの2から3に変わるメジャーアップデート)。
- AUR は 2026/5/13 時点で oneAPI 2026.0 に対応済み
- ビルドした
ccx実行ファイルを添付予定
oneAPI の環境設定
. /opt/intel/oneapi/2026.0/oneapi-vars.sh
B) 動作に必要なライブラリと環境設定
Intel® oneAPI Toolkit (2026.0)
インストール後、実行時に以下を読み込む:
. /opt/intel/oneapi/2026.0/oneapi-vars.sh
これにより MKL / iomp5 / OpenMP ランタイムがロードされ、Pardiso ソルバーが利用可能。
C) 動作確認環境
Arch Linux
- AUR 版を oneAPI 2026.0 でビルド
- Pardiso ソルバー動作確認済み
- Spooles は AUR の依存で揃うため追加作業なし
Debian 13、Ubuntu 26.04LTS
Arch でビルドした ccx が そのまま動作。
WindowsのIntel-oneAPI版より高速です。
必要に応じて Spooles(Sidのソースからコンパイルしました) をインストール:
sudo dpkg -i libspooles2.2t64_2.2-16_amd64.deb libspooles-dev_2.2-16_amd64.deb spooles-doc_2.2-16_all.deb
Calculixの実行ファイル、Debian-13用Spoolesリンク先:私のOneDrive
計算速度の比較
How to compile CalculiX with different solversに示すように、PaStiX(特にCUDA版)が速いと言われている。
しかし、公開されているWindows用のものはあまり速くない(Pardisoと同等程度)。また、Linux環境においてもビルド方法が整理されておらず、コンパイルが難しい。
Windows用は比較的高速なPrePoMax付属のccx_dynamic.exeと今回ビルドしたLinux版を比較した。
下図のモデル(六面体一次要素:56250)により、線形弾性解析を実施した。


Windows 11とDebian 13はネイティブ起動、Arch LinuxはDistroBox+Docker、単位は秒
また、Ubuntu26.04LTS(WSL2、6スレッド)は2.7秒であった。
計算時間を短縮するには、最新のoneAPIによるPardiso版を用いることが効果的である。
| Solver | Windows 11 8スレッド | Arch Linux 8スレッド | Debian 13 8スレッド |
|---|---|---|---|
| Pardiso | 5.3 | 2.2 | 2.3 |
| Pastix | 4.7 | N/A | N/A |
ccx用inpファイル > ccx実行 > paraview用vtuファイル
ParaviewのGradientなどの機能を使いたいので、バッチファイルを作って運用しています。
使い方
- Calculixの結果をParaview用に変換するPythonアプリ calculix / ccx2paraview をインストール
- inp2vtu.bat (Windows), inp2vtu (Linux)をパスの通った所に置く
- PrePoMaxやFreeCADなどでinpファイルを作る
- コマンド(Windows):
- $env:in="JobName" # Without .inp
- inp2vtu or inp2vtu.bat
- コマンド (Linux) :
- export in=JobName # Without .inp
- inp2vtu
@echo off
setlocal enabledelayedexpansion
echo === Windows inp to vtu ===
REM --- Check input variable ---
if "%in%"=="" (
echo Error: environment variable "in" is not set.
echo Usage in PowerShell: $env:in = "JobName"
exit /b 1
)
echo Using input: %in%.inp
REM --- Thread settings ---
set OMP_NUM_THREADS=8
set MKL_NUM_THREADS=8
echo Threads: %OMP_NUM_THREADS%
echo === Run CalculiX Solver ===
set CCX="C:\PrePoMax\Solver\ccx_dynamic.exe"
REM set CCX="C:\PrePoMax\Solver-Cubit\ccx_dynamic.exe"
REM --- Run ccx with screen output + log (PowerShell Tee-Object) ---
powershell -NoLogo -NoProfile -Command ^
"& { & %CCX% -i '%in%' 2>&1 | Tee-Object -FilePath '%in%.log' }"
echo === Convert FRD to VTU ===
if exist "%in%.frd" (
ccxToVTU "%in%.frd"
) else (
echo Error: %in%.frd not found. Solver may have failed.
exit /b 1
)
echo === All done ===
endlocal
#!/bin/bash
set -e
echo "=== Load oneAPI ==="
. /opt/intel/oneapi/2026.0/oneapi-vars.sh
if [ -z "$in" ]; then
echo "Error: 'in' variable is not set."
echo "Usage: export in=JobName"
exit 1
fi
echo "=== CPU Thread Settings ==="
export OMP_NUM_THREADS=8
export MKL_NUM_THREADS=8
echo "Using $OMP_NUM_THREADS threads (P-core only recommended)"
echo "=== CalculiX Solver ==="
# --- Arch Linux AUR, calculix-ccx-pardiso 2.23-2 ---
/opt/DEXCS/CalculiX/2.23-oneAPI-2026.0/ccx -i "$in" | tee "${in}.log"
echo "=== Convert frd to vtu ==="
if [ -f "${in}.frd" ]; then
ccxToVTU "${in}.frd"
else
echo "Error: ${in}.frd not found. Solver may have failed."
exit 1
fi
echo "=== All done ==="
$env:in="spring-m-from-prepomax"
inp2vtu
=== Windows inp to vtu ===
Using input: spring-m-from-prepomax.inp
Threads: 8
=== Run CalculiX Solver ===
************************************************************
CalculiX Version 2.22, Copyright(C) 1998-2024 Guido Dhondt
CalculiX comes with ABSOLUTELY NO WARRANTY. This is free
software, and you are welcome to redistribute it under
certain conditions, see gpl.htm
************************************************************
You are using an executable made on Sun Aug 4 19:44:24 2024
The numbers below are estimated upper bounds
...
Determining the structure of the matrix:
Using up to 8 cpu(s) for setting up the structure of the matrix.
number of equations
192000
number of nonzero lower triangular matrix elements
7026456
Using up to 8 cpu(s) for the stress calculation.
Using up to 8 cpu(s) for the symmetric stiffness/mass contributions.
Factoring the system of equations using the symmetric pardiso solver
number of threads = 8
Using up to 8 cpu(s) for the stress calculation.
Job finished
________________________________________
Total CalculiX Time: 5.297869
_______________________________________
=== Convert FRD to VTU ===
INFO: Reading spring-m-from-prepomax.frd
INFO: 64256 nodes
INFO: 56250 cells
INFO: 1 time increment(s)
INFO: Step 1, time 1.0, U, 3 components, 64256 values
INFO: Step 1, time 1.0, S, 6 components, 64256 values
INFO: Step 1, time 1.0, S_Mises, 1 components, 64256 values
INFO: Step 1, time 1.0, S_Principal, 4 components, 64256 values
INFO: Step 1, time 1.0, E, 6 components, 64256 values
INFO: Step 1, time 1.0, E_Mises, 1 components, 64256 values
INFO: Step 1, time 1.0, E_Principal, 4 components, 64256 values
INFO: Step 1, time 1.0, RF, 3 components, 64256 values
INFO: Writing spring-m-from-prepomax.vtu
=== All done ===
2. FrontISTR(外部ライブラリ:MUMPS、MKL、ML-AMG)
A) FrontISTRの特徴
- 中小規模ではMUMPS、 Cluster Pardiso、大規模問題では前処理ML-AMGの反復法が高速 FEM_FrontISTR/sample/benchmarks/03_bikeframe/
- Windows用については配布バイナリで上記の解法が使用可能。Ubuntu用のdebインストーラはmultiverseリポジトリのintel-mkl(2020.4と古い)を使用し、スレッド並列のPardisoのみ動作する。
- LinuxとMac OS Xについては、 autofistr のビルドスクリプトが公開されており、ビルドが容易
B) ビルド条件
- WSL2のDebian 13により作業を行った
- /opt/DEXCSを作り(~/のデイレクトリにFrontISTR関連を置きたくない)、所有権を一般ユーザーにした。autofistr関連のファイルは、/opt/DEXCS/autofistrにある。
- Makefile.in:COMPILER = INTEL、MPI = IMPI、BLASLAPACK = MKL、MKLOPT = -qmkl=cluster
- 使用したライブラリ:Makefileを編集して、ScotchとMUMPSのバージョンを上げた
- コンパイラ、MPI、MKL:Intel oneAPI Toolkit 2026.0 (他のLinuxへの移行を考慮して、OSに依存するライブラリを減らした)
- Metis 5.1.0, ParMetis 4.0.3
- Scotch 7.0.11
- MUMPS 5.8.2
- Trilinos (ML用) 15.1.1
- REVOCAP_Refiner-1.1.04 [1] は使用しなかった(コンパイル時にエラーとなった。コードが古く、最新のoneAPIでは難しいと思われる)。なお、使用するメッシュ自体の品質を上げるのが効果的であるので、補助的な機能と考えている
ビルド情報
公式サイトの配布バイナリと比べて、Intelのライブラリが新しくなっている。
今回ビルドしたLinux版FrontISTR
---
version: 5.9
git_hash: 2586a7c2ff40ed28c72a15c88f6c5ff8c39bf864
build:
date: 2026-05-03T13:18:26+0900
MPI: "4.1, Intel MPI 2021.18.0"
OpenMP: 202011
option: "-p --with-tools --with-metis --with-mumps --with-lapack --with-ml --with-parmetis --with-mkl "
HECMW_METIS_VER: 5
公式サイトの配布FrontISTR(Windows用、Intel-MPI、MKL)
---
version: 5.9
git_hash: ec0f5ab445d5f3619d448dfe3d240ecc2b0cfde9
build:
date: 2026-05-19T06:09:47%z
MPI: "3.1, Intel MPI 2021.2.0"
OpenMP: 201511
OpenACC: disabled
option: "-p --with-tools --with-refiner --with-metis --with-mumps --with-lapack --with-ml --with-mkl "
HECMW_METIS_VER: 5
D) 使用方法
- Debian 13, Arch Linux, Ubuntu 26.04LTSで動作した
- Intel oneAPI 2026.0をインストール、Calculixのときと同様に環境設定を行う
- /opt/DEXCS/autofistrを作り、所有権を一般ユーザーとする
- 私のOneDriveのINTEL_IMPI.tar.gz を/opt/DEXCS/autofistr内で展開する
- /opt/DEXCS/autofistr/INTEL_IMPI/ に実行ファイルとライブラリがある。
- /opt/DEXCS/autofistr/INTEL_IMPI/FrontISTR/lib/ のシンボリックリンクはIntelコンパイラーのライブラリへのリンク。
計算速度の比較(ネイティブ起動8並列)
Calculixと同じモデルにより、計算速度を評価した。単位は秒。
- Windowsの環境では、最適化していないCalculixより高速である
- AMG-MLが非常に高速なのは魅力である
| 解法 | Windows | Windows | Debian 13 |
|---|---|---|---|
| ライブラリ | MSMPI, openblas | Intel MPI, MKL, OpenMP | Intel MPI, MKL, OpenMP |
| MUMPS | 2.70 | 3.71 | 2.84 |
| Cluster Pardiso | N/A | 4.08 | 2.87 |
| CG AMG-ML | 1.75 | 1.76 | 1.45 |
-
!MESH, NAME=fstrMSH, TYPE=HECMW-DIST, REFINE=1... シミュレーション前にメッシュを単純に細分化する機能。 ↩︎