コンテンツにスキップ

コンパイル

make

src/swpc_3d, src/swpc_psv, src/swpc_sh, src/toolsの下にmakefileがある. src/sharedには各プログラムから共通に呼び出されるモジュールコードが格納されている. 各ソースコードディレクトリ(src/swpc_*)においてmakeすることでbin以下に実行バイナリが生成される.

makefileの指定変数

makefileでは以下の変数を指定する必要がある.

変数 説明
FC コンパイラ
FFLAGS コンパイルオプション
NCFLAG NetCDF 利用スイッチ
NCLIB NetCDF ライブラリ格納ディレクトリ
NCINC NetCDF includeディレクトリ
NETCDF NetCDF ライブラリのリンク

さまざまな計算機環境でコンパイルするため,以下のarchオプションによりオプションを分岐させている:

arch name target NetCDF location
apple (previously mac-m1) macOS + gfortran (Homebrew) /opt/homebrew/
ubuntu-gfortran Ubuntu 22.04LTS + gfortran + Open MPI Installation by apt
dgx-spark NVIDIA DGX Spark /opt/netcdf-nv
bdec-o Wisteria/BDEC-01 (Odyssey) of the University of Tokyo automatically specified by the module command
eic2025 EIC2025 (ERI, UTokyo) with the Intel Compiler automatically specified by the module command
miyabi-g Miyabi supercomputer of the University of Tokyo automatically specified by the nf-config command

たとえばappleに相当する環境では,

1
make arch=apple

とすることで,その環境に適したコンパイルオプションが自動的に選択される.また,幾つかの環境では,

1
make arch=apple debug=true

のようにdebug=trueオプションを付けると,コンパイルオプションFFLAGSがデバッグに適したものに変更されるようになっている.これらの変数は src/shared/makefile.archsrc/shared/makefile-tools.archに定義されている. 新たな環境を追加するには,これらのファイルにオプションを追記するのが簡単であろう.

NetCDFの利用

本コードの入力と出力の一部にはNetCDF形式を採用しており,ライブラリとモジュール情報ファイルが必要である. 具体的には,

  • libnetcdf.*: NetCDFライブラリファイル
  • libnetcdff.*: NetCDF Fortran用ライブラリファイル(NetCDF ver.4以降)
  • netcdf.mod: Fortranモジュール情報ファイル

がコンパイル時に必要となる. ライブラリの拡張子は*.a(static)の場合と*.so*(dynamic)の場合がある. また,Fortranの仕様により,netcdf.modはのコンパイルと同じコンパイラにより作成されていなければならない. 特にLinux環境等において,yum, apt, brew等のパッケージ管理システムにより導入したNetCDFでは,gfortran以外のコンパイラを用いることができない.そのような場合は,別の場所に用のNetCDFを自力でコンパイルする必要がある.

埋め込みパラメータの調整

OpenSWPCの挙動は原則としてパラメータファイルで制御されるが,計算速度の向上のため,幾つかの変更頻度の低いと期待されるパラメタがソースコードに埋め込まれている.これらはいずれもm_global.F90で定義されている.以下の値を修正した場合には,コード全体の再コンパイル(make clean; make)が必要である.

Parameters

UC
計算に用いる混合座標系(距離km, 密度g/cm, 地震波速度km/sなどの慣用単位)での結果をSI単位に換算する定数. 計算の単位系を変更する場合には調整が必要となる.デフォルト値は 1e-15 (3D) もしくは 1e-12 (2D)
MP
混合精度差分法の精度.DPの場合,必要な変数については倍精度で,それ以外の変数を単精度でそれぞれ計算する.これをSPに変更すると,計算すべてを単精度で実行するようになる.単精度計算では特に震源周辺で桁あふれに伴う不安定が起こる場合があるが,必要となるメモリ量は約2/3に小さくなり,計算も速い.デフォルト値は倍精度を意味するパラメタDP.具体的な値はFortranコンパイラによって自動的に決定されるが,多くのコンパイラで8を取る.
NM
メモリ変数を用いて計算する一般化Zener粘弾性体の並列数.1より大きな値の場合には,パラメタfq_*に応じて指定された周波数範囲において周波数一定の値を取るように最適化される.一方,0の場合には完全弾性体の問題となり,内部減衰は考慮されない.特に3次元計算においては,計算に必要な時間やメモリ量がこのパラメタによって大きく変動する.