Open1

【Linux用ビルドアプリ】Calculix, FrontISTR

HD_mount_MusicHD_mount_Music

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
inp2vtu.bat
@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
inp2vtu
#!/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 ==="
Example on Windows
$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
脚注
  1. !MESH, NAME=fstrMSH, TYPE=HECMW-DIST, REFINE=1... シミュレーション前にメッシュを単純に細分化する機能。 ↩︎