10. PHITSのビルド方法¶
ユーザー定義線源 usrsors.f や [t-userdefined] を利用する場合は、PHITSをコンパイルする必要があります。
PHITS事務局で動作確認しているコンパイラは Intel oneAPIとgfortranです。
対応していないMacOSを除いて、Intel oneAPIの利用を推奨しています。
これ以外のコンパイラによる不具合に関しては、十分なサポートができないことをご了承ください。
表 10.1 に、各OSにおいてコンパイル可能なコンパイラと設定の組み合わせをまとめました。 ここでsingleは並列計算を行わない場合、MPIとOpen MPはそれぞれMPIプロトコルとOpen MPを利用した並列計算、hybridはそれらを組み合わせた並列計算の設定を表しています。 並列計算については 11 章 を参照してください。
OS |
Intel oneAPI |
Intel oneAPI |
Intel oneAPI |
Intel oneAPI |
gfortran |
gfortran |
gfortran |
gfortran |
|---|---|---|---|---|---|---|---|---|
single |
MPI |
Open MP |
hybrid |
single |
MPI |
Open MP |
hybrid |
|
Windows |
yes |
yes |
yes |
yes |
yes |
yes [1] |
||
Mac |
yes |
yes [1] |
||||||
Linux |
yes |
yes |
yes |
yes |
yes |
yes [1] |
10.1. Windows OS におけるビルド方法¶
10.1.1. コンパイラ、ライブラリのインストール¶
WindowsではFortranコンパイラとしてIntel oneAPIのifxを使用します。
また、ビルド時に必要となるライブラリ等をインストールするために、Visual Studioもインストールしてください。
これらのインストール方法については、 phits/document/Install-IntelFortran-OneAPI-en.pdf を参照してください。
なお、cmake [2] およびninja [3] がVisual Studioパッケージに含まれていない場合は、別途それぞれのウェブサイトからダウンロードとインストールを行ってください。
他に、基本的には不要ですが、HDF5ライブラリ [4] を使用する場合は、これも別途インストールしてください。 ただし、バージョン2.0.0以降では一部不具合が発生するため、1.14.6 [5] を使用してください。
https://support.hdfgroup.org/releases/hdf5/v1_14/v1_14_6/downloads/index.html
10.1.2. PHITSのビルド¶
10.1.2.1. Cmakeを用いたビルド方法¶
Intel oneAPI Command Prompt for Intel 64 for Visual Studio 2022 を起動し、これをターミナルとして使用します。
起動するには、Windowsの検索ボックスを開き、 oneAPI``と入力して ``Enter キーを押します。
続いて、ターミナルウィンドウでカレントフォルダを変更します。
cd C:\phits\src\cmake
C:\phits\src にPHITSのFortranソースファイルが配置されています。
cmake関連ファイルは cmake フォルダにあるので、ここに移動します。
ビルドは、基本的にcmakeコマンドを2回実行して行います。 並列計算を実行しない場合(single)や並列計算を実行する場合(OpenMPあるいはMPI)に応じて、設定するオプションが変わります。
主なオプションは以下の通りです。
他は cmake --help で確認してください。
オプション |
説明 |
|---|---|
-S |
|
-B |
ビルドフォルダを指定します。任意の場所に変更可能で、存在しない場合は自動的に作成されます。 |
-G |
ジェネレータを指定します(利用可能なジェネレータの一覧は |
-DCMAKE_BUILD_TYPE:STRING |
ビルドタイプ(Release または Debug)を設定します。このオプションで Debug を指定すると、PHITS はデバッグモードでビルドされ、 |
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY |
実行ファイルの出力先フォルダを指定します。 |
-DPHITS_ADD_SUFFIX |
実行ファイル名に |
-DPHITS_USE_OMP |
OpenMP を利用した並列計算にするかどうかを指定します(=yes で OpenMP 並列、=no で並列化しない)。 |
-DPHITS_USE_MPI |
MPI を利用した並列計算にするかどうかを指定します(=yes で MPI 並列、=no で並列化しない)。 |
-DPHITS_USE_HDF5 |
HDF5 ライブラリを利用するかどうかを指定します(=yes で利用する、=no で利用しない)。 |
-DCMAKE_Fortran_COMPILER |
使用する Fortran コンパイラを指定します。 |
-T |
ツールセット(toolset)を指定するオプションです。Visual Studio ジェネレータを用いる場合には |
10.1.2.1.1. Singleの場合¶
以下に、PHITSをsingleモード(並列化なし)でコンパイルする方法を示します。
次の2つのCMakeコマンドを実行することで、PHITSの実行ファイルをビルドできます。
これらを実行すると、実行ファイル phits_win.exe (および angel_win.exe )が \phits\bin\recompiled フォルダに生成されます。
cmake -S . -B build_single -G Ninja -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=./../../bin/recompiled -DPHITS_ADD_SUFFIX=yes
cmake --build build_single
10.1.2.1.2. Singleの場合(オプション1)¶
NinjaのMulti-Configモードを使用すると、1つのビルドフォルダ内でReleaseとDebugの両方の構成を扱うことができます。 以下のコマンドでそのようなビルドを作成できます。
cmake -S . -B build_multi -G "Ninja Multi-Config" -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=./../../bin/recompiled -DPHITS_ADD_SUFFIX=1
ここで、 build_multi フォルダはマルチコンフィグ用のビルドファイルを格納するために使用されます。
その後、以下のように --config オプションを用いてReleaseまたはDebugを選択できます。
cmake --build build_multi --config Release
または
cmake --build build_multi --config Debug
なお、出力フォルダ内にReleaseまたはDebugという名前の新しいフォルダが作成され、それぞれ対応する実行ファイルがそのフォルダ内に配置されます。
10.1.2.1.3. Singleの場合(オプション2)¶
Visual Studio をジェネレータとして使用する場合は、以下の CMake コマンドを実行します。
cmake -S . -B build_vs -G "Visual Studio 17 2022" -T "fortran=ifx" -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=../../bin/recompiled -DPHITS_ADD_SUFFIX=1
ここで、 build_vs フォルダはビルドファイルを格納するために使用されます。
このジェネレータもマルチコンフィグであるため、Ninja Multi-Config と同様に、 --build オプションを用いてCMakeを実行する際にはReleaseまたはDebugのいずれかを指定する必要があります。
10.1.2.1.4. Singleの場合(オプション3)¶
HDF5を有効にしてPHITSをビルドするには、以下のように cmake のオプションに -DPHITS_USE_HDF5=yes を追加します:
cmake -S . -B build_hdf5 -G Ninja -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=./../../bin/recompiled -DPHITS_ADD_SUFFIX=yes -DPHITS_USE_HDF5=yes
cmake --build build_hdf5
10.1.2.1.5. Singleの場合(オプション4)¶
Fortranコンパイラとしてgfortranを使用することも可能であり、 -DCMAKE_Fortran_COMPILER オプションで指定できます。
cmake -S . -B build -G Ninja_gfortran -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=./../../bin/recompiled -DPHITS_ADD_SUFFIX=yes -DCMAKE_Fortran_COMPILER=gfortran
cmake --build build_gfortran
gfortranのみがインストールされている場合は、このオプションを指定しなくてもPHITSをビルドできます。 ifxとgfortran の両方がインストールされている場合は、このオプションを用いてコンパイラを選択できます。
10.1.2.1.6. OpenMPの場合¶
次のオプションでビルドできます。
実行ファイル phits_openmp_win.exe が作成されます。
cmake -S . -B build_openmp -G Ninja -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=./../../bin/recompiled -DPHITS_ADD_SUFFIX=yes -DPHITS_USE_OMP=yes
cmake --build build_openmp
10.1.2.1.7. MPIの場合¶
次のオプションでビルドできます。
実行ファイル phits_mpi_win.exe が作成されます。
cmake -S . -B build_mpi -G Ninja -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=./../../bin/recompiled -DPHITS_ADD_SUFFIX=yes -DPHITS_USE_MPI=yes
cmake --build build_mpi
10.1.2.2. Microsoft Visual Studioを利用したビルド方法¶
/phits/bin/ フォルダ内に、Microsoft Visual StudioとIntel Fortranを組み合わせた環境で利用可能なソリューションファイル phits-intel.sln が含まれています。
これらのソフトウェアのインストール方法については、 phits/document/Install-IntelFortran-OneAPI-en.pdf を参照してください。
これは Version 3.34 以前の phits-intel.vfproj を使ったコンパイル方法と同じです。
ビルドに成功すると、 /phits/bin/ に実行ファイルが作成されます。
10.1.2.3. 実行ファイルの変更¶
CmakeかMicrosoft Visual Studioを利用してビルドすると、それぞれ \phits\bin\recompiled か \phits\bin フォルダにPHITSの実行ファイルが作成されます。
各フォルダに新しい実行ファイルが作成されているのを確認した後、 phits.bat をPHITS-Padなどのテキストエディターで開いて次のように編集してください。
@echo off
title PHITS: %1
set PHITS_Single_EXE="%PHITSPATH%/bin/recompiled/phits_win.exe"
set PHITS_MPI_EXE="%PHITSPATH%/bin/phits_win_mpi.exe"
set PHITS_OpenMP_EXE="%PHITSPATH%/bin/phits_win_openmp.exe"
set PHITS_Debug_EXE="%PHITSPATH%/bin/phits_win_dbg.exe"
ここでは、 PHITS_Single_EXE= の後のファイルをcmakeを利用して作成した recompiled/phits_win.exe に変更しています。
この編集をして保存すると、 送る を通じた通常の実行において、作成した実行ファイルが使用されます。
10.2. macOS¶
10.2.1. はじめに¶
PHITSを自分でビルドするためには、まずコンパイラと必要に応じたライブラリのインストールを行い、その後PHITSのビルドに移ります。
10.2.2. コンパイラ、コンパイル用ツールのインストール¶
macOSではFortranコンパイラに gfortran を使用します。 gfortran は Homebrew または MacPorts のいずれかを用いてインストールします。本項では Homebrew での方法を示します。 MacPorts を利用する場合は、各自調べてください。
Homebrew がインストールされていない場合は、以下のコマンドをターミナルで実行してインストールしてください。
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
次にFortranコンパイラ、コンパイルに使用する cmake、ninja をインストールします。
$ brew install gcc cmake ninja
10.2.3. ライブラリのインストール¶
MPIによる並列計算には OpenMPI が必要で、Homebrew を用いてインストールします。
$ brew install open-mpi
HDF5形式の四面体メッシュ体系を読み込むには HDF5 が必要で、Homebrew を用いてインストールします。 HDF5 はバージョン1.14.6で動作確認をしています。
$ brew tap-new local/tools
$ brew extract --version=1.14.6 --git-revision=b2665fee6a29d19164cbc3ed569792f43d3b178e hdf5 local/tools
$ brew install local/tools/hdf5@1.14.6
10.2.4. PHITSのビルド¶
PHITSのソースコード一式が src ディレクトリにあって、ビルド作業には build ディレクトリを使用します。これらは同じ階層にあることを想定しています。
ビルド用ディレクトリへの移動
$ mv build
ビルド構成
例としてシングルコア用をビルドする場合、以下のコマンドを実行します。
$ cmake -G "Ninja Multi-Config" -S ../src -B .
OpenMP や MPI による並列化、HDF5 を使いたい場合は、上記のコマンドにオプションや変数を指定することで対応できます。これらは複数指定することができます。
機能 |
オプションや変数 |
|---|---|
OpenMP による並列化 |
|
MPI による並列化 |
|
HDF5 の有効化 |
|
HDF5を有効にする場合は次のようにします。
$ cmake -G "Ninja Multi-Config" -S ../src -B . \
-DPHITS_USE_HDF5:BOOL=ON \
-DHDF5_ROOT:PATH=$HOME/local/hdf5
HDF5 と OpenMP を同時に使う場合は次のようにします。
$ cmake -G "Ninja Multi-Config" -S ../src -B . \
-DPHITS_USE_HDF5:BOOL=ON \
-DHDF5_ROOT:PATH=$HOME/local/hdf5 \
-DPHITS_USE_OMP:BOOL=ON
MPI を有効にする場合は次のようにします。
$ cmake -G "Ninja Multi-Config" -S ../src -B . \
-DPHITS_USE_HDF5:BOOL=ON \
-DHDF5_ROOT:PATH=mpifort
ビルド
通常計算を行う実行ファイルをビルドするには以下のコマンドを使って下さい。
$ cmake --build . --config Release
build/Release ディレクトリに実行ファイルが生成されます。
$PHITSPATH/bin ディレクトリにあるこれまでの実行ファイルのファイル名を変えた後、生成された実行ファイルを
$PHITSPATH/bin ディレクトリに移動してください。
通常計算用が動かない場合はこちらを試してください。
$ cmake --build . --config Debug
build/Debug ディレクトリに実行ファイルが生成されます。
$PHITSPATH/bin ディレクトリにあるこれまでの実行ファイルのファイル名を変えた後、生成された実行ファイルを
$PHITSPATH/bin ディレクトリに移動してください。
10.3. Linux¶
10.3.1. コンパイラ、ライブラリのインストール¶
LinuxではFortranコンパイラとしてIntel oneAPIの ifx を使用します。 ifx は https://www.intel.com/content/www/us/en/developer/tools/oneapi/toolkits.html からIntel oneAPI Base Toolkitと Intel oneAPI HPC Toolkitをダウンロードしてインストールしてください。インストール後、以下のコマンドで環境変数を設定します。ここではUbuntu 24.04を想定しています。
$ source /opt/intel/oneapi/setvars.sh
cmakeのインストール
$ sudo apt install cmake ninja-build
10.3.2. ライブラリのインストール¶
MPI による並列計算にはIntel OneAPIの MPI が必要です。HDF5 形式の四面体メッシュ体系を読み込むには HDF5 が必要です。 apt などのパッケージマネージャで HDF5 をインストールすると、ifx でコンパイルできなくなることがありますので、HDF5 はソースを取得してビルドします。以下の説明では $HOME/local ディレクトリに
インストールすることを想定しています。
これらのライブラリは、PHITSの実行時にも必要ですのでインストール後に削除したりフォルダ名を変更したりしないでください。
HDF5 は1.14.6で動作確認をしています。
$ wget https://github.com/HDFGroup/hdf5/releases/download/hdf5_1.14.6/hdf5-1.14.6.tar.gz
$ tar xf hdf5-1.14.6.tar.gz
$ mkdir build
$ cd build
$ cmake -S ../hdf5-1.14.6 -B . -G Ninja --preset=ci-StdShar-Intel \
-DCMAKE_INSTALL_PREFIX:PATH=$HOME/local/hdf5 \
-DCMAKE_TOOLCHAIN_FILE:STRING=config/toolchain/intel.cmake \
-DHDF5_BUILD_FORTRAN:BOOL=ON \
-DHDF5_BUILD_JAVA:BOOL=OFF \
-DHDF5_ENABLE_PLUGIN_SUPPORT:BOOL=OFF
$ cmake --build . --target install
$ echo "export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:$HOME/local/hdf5/lib" >> ~/.bashrc
10.3.3. PHITSのビルド¶
PHITSのソースコード一式が src ディレクトリにあって、ビルド作業には build ディレクトリを使用します。これらは同じ階層にあることを想定しています。
ビルド用ディレクトリへの移動
$ mv build
ビルド構成
例としてシングルコア用をビルドする場合、以下のコマンドを実行します。
$ cmake -G "Ninja Multi-Config" -S ../src -B .
OpenMP や MPI による並列化、HDF5 を使いたい場合は、上記のコマンドにオプションを追加することで対応できます。 このオプションは複数使うことができます。HDF5 と OpenMP を同時に使う場合はthread safety機能を有効化した HDF5 を指定して下さい。
機能 |
オプションや変数 |
|---|---|
HDF5の有効化 |
|
OpenMPによる並列化 |
|
MPIによる並列化 |
|
HDF5 を有効にする場合は次のようにします。
$ cmake -G "Ninja Multi-Config" -S ../src -B . \
-DPHITS_USE_HDF5:BOOL=ON -DHDF5_ROOT:PATH=$HOME/local/hdf5
HDF5 と OpenMP を同時に使う場合は次のようにします。
$ cmake -G "Ninja Multi-Config" -S ../src -B . \
-DPHITS_USE_HDF5:BOOL=ON -DHDF5_ROOT:PATH=$HOME/local/hdf5 \
-DPHITS_USE_OMP:BOOL=ON
ビルド
通常計算を行う実行ファイルをビルドするには以下のコマンドを使って下さい。
$ cmake --build . --config Release
build/Release ディレクトリに実行ファイルが生成されます。
$PHITSPATH/bin ディレクトリにあるこれまでの実行ファイルのファイル名を変えた後、生成された実行ファイルを
$PHITSPATH/bin ディレクトリに移動してください。
通常計算用が動かない場合はこちらを試してください。
$ cmake --build . --config Debug
build/Debug ディレクトリに実行ファイルが生成されます。
$PHITSPATH/bin ディレクトリにあるこれまでの実行ファイルのファイル名を変えた後、生成された実行ファイルを
$PHITSPATH/bin ディレクトリに移動してください。
10.4. KURBUC を含めたコンパイル¶
陽子およびイオンに対する飛跡構造解析コード KURBUC のソースコード kurbuc.f は、著作権の関係上 src フォルダに含まれていません。
パッケージに含まれる kurbuc.f は、本物の kurbuc.f がなくてもコンパイルができるように作成したダミーファイルです。
したがって、上記手順でそのままコンパイルすると、陽子やイオンに対する飛跡構造解析を行うことができない PHITS 実行ファイルが作成されます。
各自で作成した実行ファイルで陽子やイオンに対する飛跡構造解析を行いたい場合は、まず通常のコンパイルを実施した後、作成された KURBUC 用オブジェクトファイル (kurbuc.o や kurbuc.obj など) を src/kurbuc-obj フォルダに含まれる各自の環境に合ったオブジェクトファイルに置き換えて、実行ファイルを再作成してください。
通常のコンパイル方法で実行ファイルが再作成されない場合は、例えば main.f を再保存してタイムスタンプを更新してから再コンパイルしてください。
各オブジェクトファイルのコンパイル環境は src/kurbuc-obj/readme.txt を参照してください。
各自の環境に対応するオブジェクトファイルがない場合や、付属のオブジェクトファイルでは正しく動作しない場合は、PHITS 事務局まで連絡してください。
10.5. 配列の大きさの変更¶
インクルードファイル param.inc の中に、ユーザーが場合により変更しなければならない配列の大きさが記述されています。
特に重要なのは、kvlmax (定義する cell や material の最大数)、itlmax (定義するタリーの最大数)、isrc (定義するマルチソースの最大数) です。
以下に現在のデフォルト値が記述された param.inc を示します。
************************************************************************
* *
* 'param.inc' *
* *
************************************************************************
! when you increase mdas over 250000000, you have to define integer*8 instead of integer in the next line
integer mdas,mcmx,mci,mmdas,mmmax,nbnds,mct,multmax,pnlmax
integer kvlmax, kvmmax, itlmax, inevt, isrc, nbchmax, maxchapara
integer mxprodxs
real*8 das
parameter ( mdas = 80000000 )
parameter ( kvlmax = 3000 )
parameter ( kvmmax = 1000000 )
parameter ( itlmax = 200 )
parameter ( inevt = 71 )
parameter ( isrc = 3000 )
parameter ( nbchmax= 10000 )
parameter ( multmax= 500 )
parameter ( pnlmax = 3000 )
parameter ( maxchapara = 1000 )
parameter ( mxprodxs = 20000 )
*--------------------------------------------------------------------------------------*
* *
* pnlmax : maximum number of material in photonuclear library *
* *
*--------------------------------------------------------------------------------------*
common /mdasa/ das( mdas )
common /mdasb/ mmmax
*--------------------------------------------------------------------------------------*
* *
* mdas : total memory * 8 = byte *
* mmmax : maximum number of total array *
* *
* kvlmax : maximum number of regions, cell and material *
* kvmmax : maximum number of id for regions, cel and material *
* *
* itlmax : number of maximum tally entry *
* inevt : number of collision type for summary *
* isrc : number of multi-source *
* nbchmax: maximum number of batch assigned to parallel MPI node *
* pnlmax : maximum number of material in photonuclear library *
* mxprodxs : maximum number of produced nuclides in prodxs *
* *
*--------------------------------------------------------------------------------------*