.. _sec-compile: ************************************************** PHITSのビルド方法 ************************************************** ユーザー定義線源 ``usrsors.f`` や **[t-userdefined]** を利用する場合は、PHITSをコンパイルする必要があります。 PHITS事務局で動作確認しているコンパイラは Intel oneAPIとgfortranです。 対応していないMacOSを除いて、Intel oneAPIの利用を推奨しています。 これ以外のコンパイラによる不具合に関しては、十分なサポートができないことをご了承ください。 :numref:`tbl-compile` に、各OSにおいてコンパイル可能なコンパイラと設定の組み合わせをまとめました。 ここでsingleは並列計算を行わない場合、MPIとOpen MPはそれぞれMPIプロトコルとOpen MPを利用した並列計算、hybridはそれらを組み合わせた並列計算の設定を表しています。 並列計算については :numref:`sec-parallel` を参照してください。 .. _tbl-compile: .. list-table:: 各 OS におけるコンパイル可能なコンパイラと設定の組み合わせ :header-rows: 2 * - 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 [#gfortran-openmp]_ - * - Mac - - - - - yes - - yes [#gfortran-openmp]_ - * - Linux - yes - yes - yes - yes - yes - - yes [#gfortran-openmp]_ - .. [#gfortran-openmp] gfortranを使った場合のOpen MP高速化性能はそれほど高くありません。 .. _sec-compile-Win: Windows OS におけるビルド方法 ================================= コンパイラ、ライブラリのインストール -------------------------------------------------- WindowsではFortranコンパイラとしてIntel oneAPIのifxを使用します。 また、ビルド時に必要となるライブラリ等をインストールするために、Visual Studioもインストールしてください。 これらのインストール方法については、 ``phits/document/Install-IntelFortran-OneAPI-en.pdf`` を参照してください。 なお、cmake [#]_ およびninja [#]_ がVisual Studioパッケージに含まれていない場合は、別途それぞれのウェブサイトからダウンロードとインストールを行ってください。 他に、基本的には不要ですが、HDF5ライブラリ [#]_ を使用する場合は、これも別途インストールしてください。 ただし、バージョン2.0.0以降では一部不具合が発生するため、1.14.6 [#]_ を使用してください。 .. [#] https://cmake.org/ .. [#] https://ninja-build.org/ .. [#] https://www.hdfgroup.org/solutions/hdf5/ .. [#] https://support.hdfgroup.org/releases/hdf5/v1_14/v1_14_6/downloads/index.html PHITSのビルド ------------- Cmakeを用いたビルド方法 ^^^^^^^^^^^^^^^^^^^^^^^^^^ ``Intel oneAPI Command Prompt for Intel 64 for Visual Studio 2022`` を起動し、これをターミナルとして使用します。 起動するには、Windowsの検索ボックスを開き、 ``oneAPI``と入力して ``Enter`` キーを押します。 続いて、ターミナルウィンドウでカレントフォルダを変更します。 .. code-block:: console cd C:\phits\src\cmake ``C:\phits\src`` にPHITSのFortranソースファイルが配置されています。 cmake関連ファイルは ``cmake`` フォルダにあるので、ここに移動します。 ビルドは、基本的にcmakeコマンドを2回実行して行います。 並列計算を実行しない場合(single)や並列計算を実行する場合(OpenMPあるいはMPI)に応じて、設定するオプションが変わります。 主なオプションは以下の通りです。 他は ``cmake --help`` で確認してください。 .. list-table:: 利用可能なオプション :header-rows: 1 * - オプション - 説明 * - -S - ``CMakeLists.txt`` が置かれたフォルダを指定します(ドット「.」はカレントフォルダを意味します)。 * - -B - ビルドフォルダを指定します。任意の場所に変更可能で、存在しない場合は自動的に作成されます。 * - -G - ジェネレータを指定します(利用可能なジェネレータの一覧は ``cmake --help`` で確認できます)。 * - -DCMAKE_BUILD_TYPE:STRING - ビルドタイプ(Release または Debug)を設定します。このオプションで Debug を指定すると、PHITS はデバッグモードでビルドされ、``phits_win_dbg.exe`` が生成されます。 * - -DCMAKE_RUNTIME_OUTPUT_DIRECTORY - 実行ファイルの出力先フォルダを指定します。 * - -DPHITS_ADD_SUFFIX - 実行ファイル名に ``_win`` というサフィックスを付けるかどうかを設定します(=yes で付加、=no で付加しない)。 * - -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 ジェネレータを用いる場合には ``-T "fortran=ifx"`` と指定してください。 Singleの場合 ~~~~~~~~~~~~~~~~~~~~~~~~ 以下に、PHITSをsingleモード(並列化なし)でコンパイルする方法を示します。 次の2つのCMakeコマンドを実行することで、PHITSの実行ファイルをビルドできます。 これらを実行すると、実行ファイル ``phits_win.exe`` (および ``angel_win.exe`` )が ``\phits\bin\recompiled`` フォルダに生成されます。 .. code-block:: console 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 Singleの場合(オプション1) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ NinjaのMulti-Configモードを使用すると、1つのビルドフォルダ内でReleaseとDebugの両方の構成を扱うことができます。 以下のコマンドでそのようなビルドを作成できます。 .. code-block:: console cmake -S . -B build_multi -G "Ninja Multi-Config" -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=./../../bin/recompiled -DPHITS_ADD_SUFFIX=1 ここで、 ``build_multi`` フォルダはマルチコンフィグ用のビルドファイルを格納するために使用されます。 その後、以下のように ``--config`` オプションを用いてReleaseまたはDebugを選択できます。 .. code-block:: console cmake --build build_multi --config Release または .. code-block:: console cmake --build build_multi --config Debug なお、出力フォルダ内にReleaseまたはDebugという名前の新しいフォルダが作成され、それぞれ対応する実行ファイルがそのフォルダ内に配置されます。 Singleの場合(オプション2) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Visual Studio をジェネレータとして使用する場合は、以下の CMake コマンドを実行します。 .. code-block:: console 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のいずれかを指定する必要があります。 Singleの場合(オプション3) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ HDF5を有効にしてPHITSをビルドするには、以下のように ``cmake`` のオプションに ``-DPHITS_USE_HDF5=yes`` を追加します: .. code-block:: console 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 Singleの場合(オプション4) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Fortranコンパイラとしてgfortranを使用することも可能であり、 ``-DCMAKE_Fortran_COMPILER`` オプションで指定できます。 .. code-block:: console 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 の両方がインストールされている場合は、このオプションを用いてコンパイラを選択できます。 OpenMPの場合 ~~~~~~~~~~~~~~~~~~~~~~~~ 次のオプションでビルドできます。 実行ファイル ``phits_openmp_win.exe`` が作成されます。 .. code-block:: console 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 MPIの場合 ~~~~~~~~~~~~~~~~~~~~~~~~ 次のオプションでビルドできます。 実行ファイル ``phits_mpi_win.exe`` が作成されます。 .. code-block:: console 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 .. _sec-VisualStudio: 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/`` に実行ファイルが作成されます。 実行ファイルの変更 ^^^^^^^^^^^^^^^^^^^^^^^^^^ CmakeかMicrosoft Visual Studioを利用してビルドすると、それぞれ ``\phits\bin\recompiled`` か ``\phits\bin`` フォルダにPHITSの実行ファイルが作成されます。 各フォルダに新しい実行ファイルが作成されているのを確認した後、 ``phits.bat`` をPHITS-Padなどのテキストエディターで開いて次のように編集してください。 .. code-block:: console @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`` に変更しています。 この編集をして保存すると、 ``送る`` を通じた通常の実行において、作成した実行ファイルが使用されます。 .. _sec-compile-Mac: macOS ================================= はじめに ------------- PHITSを自分でビルドするためには、まずコンパイラと必要に応じたライブラリのインストールを行い、その後PHITSのビルドに移ります。 コンパイラ、コンパイル用ツールのインストール -------------------------------------------------- macOSではFortranコンパイラに :command:`gfortran` を使用します。 :command:`gfortran` は :program:`Homebrew` または :program:`MacPorts` のいずれかを用いてインストールします。本項では :program:`Homebrew` での方法を示します。 :program:`MacPorts` を利用する場合は、各自調べてください。 :program:`Homebrew` がインストールされていない場合は、以下のコマンドをターミナルで実行してインストールしてください。 .. code-block:: console $ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 次にFortranコンパイラ、コンパイルに使用する :command:`cmake`、:command:`ninja` をインストールします。 .. code-block:: console $ brew install gcc cmake ninja ライブラリのインストール -------------------------------------------------- MPIによる並列計算には :program:`OpenMPI` が必要で、:program:`Homebrew` を用いてインストールします。 .. code-block:: console $ brew install open-mpi HDF5形式の四面体メッシュ体系を読み込むには :program:`HDF5` が必要で、:program:`Homebrew` を用いてインストールします。 :program:`HDF5` はバージョン1.14.6で動作確認をしています。 .. code-block:: console $ 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 PHITSのビルド ------------- PHITSのソースコード一式が :file:`src` ディレクトリにあって、ビルド作業には :file:`build` ディレクトリを使用します。これらは同じ階層にあることを想定しています。 #. ビルド用ディレクトリへの移動 .. code-block:: console $ mv build #. ビルド構成 例としてシングルコア用をビルドする場合、以下のコマンドを実行します。 .. code-block:: console $ cmake -G "Ninja Multi-Config" -S ../src -B . :program:`OpenMP` や :program:`MPI` による並列化、:program:`HDF5` を使いたい場合は、上記のコマンドにオプションや変数を指定することで対応できます。これらは複数指定することができます。 .. csv-table:: 利用可能なオプションや変数 :header: 機能, オプションや変数 :program:`OpenMP` による並列化, ``-DPHITS_USE_OMP:BOOL=ON`` :program:`MPI` による並列化, ``-DPHITS_USE_MPI:BOOL=ON -DMPI_Fortran_COMPILER:PATH=mpifort`` :program:`HDF5` の有効化, ``-DPHITS_USE_HDF5:BOOL=ON`` HDF5を有効にする場合は次のようにします。 .. code-block:: console $ cmake -G "Ninja Multi-Config" -S ../src -B . \ -DPHITS_USE_HDF5:BOOL=ON \ -DHDF5_ROOT:PATH=$HOME/local/hdf5 :program:`HDF5` と :program:`OpenMP` を同時に使う場合は次のようにします。 .. code-block:: console $ cmake -G "Ninja Multi-Config" -S ../src -B . \ -DPHITS_USE_HDF5:BOOL=ON \ -DHDF5_ROOT:PATH=$HOME/local/hdf5 \ -DPHITS_USE_OMP:BOOL=ON :program:`MPI` を有効にする場合は次のようにします。 .. code-block:: console $ cmake -G "Ninja Multi-Config" -S ../src -B . \ -DPHITS_USE_HDF5:BOOL=ON \ -DHDF5_ROOT:PATH=mpifort #. ビルド 通常計算を行う実行ファイルをビルドするには以下のコマンドを使って下さい。 .. code-block:: console $ cmake --build . --config Release ``build/Release`` ディレクトリに実行ファイルが生成されます。 ``$PHITSPATH/bin`` ディレクトリにあるこれまでの実行ファイルのファイル名を変えた後、生成された実行ファイルを ``$PHITSPATH/bin`` ディレクトリに移動してください。 通常計算用が動かない場合はこちらを試してください。 .. code-block:: console $ cmake --build . --config Debug ``build/Debug`` ディレクトリに実行ファイルが生成されます。 ``$PHITSPATH/bin`` ディレクトリにあるこれまでの実行ファイルのファイル名を変えた後、生成された実行ファイルを ``$PHITSPATH/bin`` ディレクトリに移動してください。 .. _sec-compile-Lin: Linux ================================= コンパイラ、ライブラリのインストール -------------------------------------------------- LinuxではFortranコンパイラとしてIntel oneAPIの :command:`ifx` を使用します。 :command:`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を想定しています。 .. code-block:: console $ source /opt/intel/oneapi/setvars.sh cmakeのインストール .. code-block:: console $ sudo apt install cmake ninja-build ライブラリのインストール -------------------------------------------------- :program:`MPI` による並列計算にはIntel OneAPIの :program:`MPI` が必要です。:program:`HDF5` 形式の四面体メッシュ体系を読み込むには :program:`HDF5` が必要です。 :command:`apt` などのパッケージマネージャで :program:`HDF5` をインストールすると、:command:`ifx` でコンパイルできなくなることがありますので、:program:`HDF5` はソースを取得してビルドします。以下の説明では :file:`$HOME/local` ディレクトリに インストールすることを想定しています。 これらのライブラリは、PHITSの実行時にも必要ですのでインストール後に削除したりフォルダ名を変更したりしないでください。 :program:`HDF5` は1.14.6で動作確認をしています。 .. code-block:: console $ 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 PHITSのビルド ------------- PHITSのソースコード一式が :file:`src` ディレクトリにあって、ビルド作業には :file:`build` ディレクトリを使用します。これらは同じ階層にあることを想定しています。 #. ビルド用ディレクトリへの移動 .. code-block:: console $ mv build #. ビルド構成 例としてシングルコア用をビルドする場合、以下のコマンドを実行します。 .. code-block:: console $ cmake -G "Ninja Multi-Config" -S ../src -B . :program:`OpenMP` や :program:`MPI` による並列化、:program:`HDF5` を使いたい場合は、上記のコマンドにオプションを追加することで対応できます。 このオプションは複数使うことができます。:program:`HDF5` と :program:`OpenMP` を同時に使う場合はthread safety機能を有効化した :program:`HDF5` を指定して下さい。 .. csv-table:: 利用可能なオプション :header: 機能, オプションや変数 HDF5の有効化, ``-DPHITS_USE_HDF5:BOOL=ON -DHDF5_ROOT=`` "HDF5を入れたディレクトリ $HOME/local/hdf5など" OpenMPによる並列化, ``-DPHITS_USE_OMP:BOOL=ON`` MPIによる並列化, ``-DPHITS_USE_MPI:BOOL=ON -DMPI_Fortran_COMPILER:STRING=mpiifx`` :program:`HDF5` を有効にする場合は次のようにします。 .. code-block:: console $ cmake -G "Ninja Multi-Config" -S ../src -B . \ -DPHITS_USE_HDF5:BOOL=ON -DHDF5_ROOT:PATH=$HOME/local/hdf5 :program:`HDF5` と :program:`OpenMP` を同時に使う場合は次のようにします。 .. code-block:: console $ cmake -G "Ninja Multi-Config" -S ../src -B . \ -DPHITS_USE_HDF5:BOOL=ON -DHDF5_ROOT:PATH=$HOME/local/hdf5 \ -DPHITS_USE_OMP:BOOL=ON #. ビルド 通常計算を行う実行ファイルをビルドするには以下のコマンドを使って下さい。 .. code-block:: console $ cmake --build . --config Release ``build/Release`` ディレクトリに実行ファイルが生成されます。 ``$PHITSPATH/bin`` ディレクトリにあるこれまでの実行ファイルのファイル名を変えた後、生成された実行ファイルを ``$PHITSPATH/bin`` ディレクトリに移動してください。 通常計算用が動かない場合はこちらを試してください。 .. code-block:: console $ cmake --build . --config Debug ``build/Debug`` ディレクトリに実行ファイルが生成されます。 ``$PHITSPATH/bin`` ディレクトリにあるこれまでの実行ファイルのファイル名を変えた後、生成された実行ファイルを ``$PHITSPATH/bin`` ディレクトリに移動してください。 .. _sec-KURBUC: 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 事務局まで連絡してください。 .. _array-scale: 配列の大きさの変更 ================================================== インクルードファイル ``param.inc`` の中に、ユーザーが場合により変更しなければならない配列の大きさが記述されています。 特に重要なのは、**kvlmax** (定義する cell や material の最大数)、**itlmax** (定義するタリーの最大数)、**isrc** (定義するマルチソースの最大数) です。 以下に現在のデフォルト値が記述された ``param.inc`` を示します。 .. code-block:: text ************************************************************************ * * * '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 * * * *--------------------------------------------------------------------------------------*