Translation status
This page has not yet been translated into Urdu, or its translation is out of date. The current Japanese version is shown as a fallback.
NetCDF を含めたビルド¶
FrontISTR は,可視化出力の Exodus II 形式(output_type=EXODUS,STEP_EXODUS)を NetCDF の C ライブラリを用いて書き出す.このページでは,NetCDF をソースコードからビルドし,それを用いて FrontISTR をビルドする手順を説明する.OS のパッケージなどで NetCDF(netcdf.h と libnetcdf)が標準の場所に入っている場合は,cmake が自動的に検出するため,このページの手順は不要である.
前提条件¶
- CMake によるビルド手順 で FrontISTR をビルドできること
- m4 がインストール済みであること(netcdf-c の configure が使う)
- zlib がインストール済みであること.ヘッダファイル(
zlib.h)が無い場合は,zlib の手順でソースからビルドする
必要なライブラリ¶
FrontISTR が使うのは NetCDF の C ライブラリ(netcdf-c)だけである.
| ライブラリ | 要否 | 理由 |
|---|---|---|
| netcdf-c | 必要 | Exodus II ファイルの書き出しに使う |
| zlib | 必要 | netcdf-c の configure が必須とする |
| HDF5 | 不要 | Exodus II ファイルは NetCDF の 64 ビットオフセット形式で書き出し,HDF5 を用いる NetCDF-4 形式は使わない |
| libxml2,libcurl | 不要 | netcdf-c が遠隔のデータへのアクセス(DAP など)に使うもので,Exodus II ファイルの書き出しには使わない |
| netcdf-fortran | 不要 | FrontISTR は C のインタフェースだけを使う |
| 並列 I/O 対応の NetCDF(PnetCDF,並列 HDF5) | 不要 | MPI 並列実行でも,各プロセスがそれぞれのファイルを書き出す |
HDF5 を組み込んだ NetCDF の共有ライブラリがすでにある場合は,それを使ってもよい.
NetCDF のビルド¶
以下では,NetCDF のインストール先を環境変数 NETCDF_ROOT に設定して進める.FrontISTR の cmake もこの環境変数を参照して NetCDF を探す.インストール先は書き込み権限のある任意のディレクトリでよい.
以下のコマンド例は netcdf-c 4.10.1,zlib 1.3.2 の場合である.ほかの版を使う場合はファイル名を読み替える.
zlib¶
zlib のヘッダファイルがシステムに無い場合だけ,zlib のリリースページ からソースコードを取得し,NetCDF と同じインストール先に入れる.
curl -LO https://github.com/madler/zlib/releases/download/v1.3.2/zlib-1.3.2.tar.gz
tar xzf zlib-1.3.2.tar.gz
cd zlib-1.3.2
./configure --prefix=$NETCDF_ROOT
make
make install
netcdf-c¶
Unidata のダウンロードページ から netcdf-c のソースコードを取得し,ビルド・インストールする.
curl -LO https://downloads.unidata.ucar.edu/netcdf-c/4.10.1/netcdf-c-4.10.1.tar.gz
tar xzf netcdf-c-4.10.1.tar.gz
cd netcdf-c-4.10.1
./configure --prefix=$NETCDF_ROOT --disable-hdf5 --disable-libxml2 --disable-dap
make -j$(nproc)
make install
--disable-hdf5 は,NetCDF-4 形式の読み書きに使う HDF5 を組み込まない指定である.指定しないと configure は HDF5 を探し,見つからなければ Can't find or link to the hdf5 library. を出力して止まる.
--disable-libxml2 は,XML の解析に libxml2 を使わず,netcdf-c に同梱のパーサーを使う指定である.指定しないと configure は libxml2 の開発用パッケージに含まれる xml2-config を探し,見つからなければ Cannot find xml2-config utility. を出力して止まる.
--disable-dap は,遠隔のデータにアクセスする DAP の機能を組み込まない指定である.指定しないと,libcurl のヘッダファイル(curl/curl.h)が無い環境では,make が curl/curl.h: No such file or directory を出力して止まる.
zlib を前述の手順で入れた場合は,その場所を configure に渡す.
./configure --prefix=$NETCDF_ROOT --disable-hdf5 --disable-libxml2 --disable-dap \
CPPFLAGS=-I$NETCDF_ROOT/include LDFLAGS=-L$NETCDF_ROOT/lib
FrontISTR のビルド¶
NETCDF_ROOT を設定したまま,CMake によるビルド手順 と同じように cmake を実行する.
cmake は $NETCDF_ROOT/include の netcdf.h と,$NETCDF_ROOT/lib(または lib64)の libnetcdf を,システムの標準の場所より先に探す.見つかると,次のような行が出力される.
WITH_NETCDF は NetCDF が見つかれば既定で ON になるが,-DWITH_NETCDF=ON を明示すると,見つからなかったときに NetCDF not found, Exodus output disabled の警告が出る.また,NetCDF を入れる前に cmake を実行したビルドディレクトリでは WITH_NETCDF が OFF のままキャッシュに残っているため,この指定で ON にする.
有効になったことの確認¶
fistr1 -v を実行すると,ビルド時の設定が表示される(解析の実行時にも,はじめに同じ内容が表示される).NetCDF を有効にしたビルドでは,option: の行に --with-netcdf が含まれる.
可視化出力の形式に EXODUS を指定して解析を実行し,拡張子 .exo のファイルが作られることでも確かめられる(→ 可視化形式への出力).
実行時の共有ライブラリの指定¶
ビルドディレクトリの fistr1/fistr1 には NetCDF のライブラリの場所が記録されるため,そのまま実行できる.cmake --build . --target install でインストールした fistr1 には記録されないため,実行時に libnetcdf.so が見つからず,error while loading shared libraries: libnetcdf.so.22(数字は netcdf-c の版による)を出力して止まる.実行前に LD_LIBRARY_PATH に NetCDF のライブラリの場所を加える.
zlib を NetCDF と同じインストール先に入れた場合は,この指定で zlib も見つかる.