콘텐츠로 이동

Translation status

This page has not yet been translated into Korean, 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 を探す.インストール先は書き込み権限のある任意のディレクトリでよい.

export NETCDF_ROOT=$HOME/local/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 を実行する.

cd FrontISTR
mkdir build
cd build
cmake -DWITH_NETCDF=ON ..
make -j$(nproc)

cmake は $NETCDF_ROOT/include の netcdf.h と,$NETCDF_ROOT/lib(または lib64)の libnetcdf を,システムの標準の場所より先に探す.見つかると,次のような行が出力される.

-- Found NetCDF: /home/user/local/netcdf/lib/libnetcdf.so

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 が含まれる.

$ ./fistr1/fistr1 -v
...
build:
  ...
  option:    "-p --with-tools ... --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 のライブラリの場所を加える.

export LD_LIBRARY_PATH=$NETCDF_ROOT/lib:$LD_LIBRARY_PATH

zlib を NetCDF と同じインストール先に入れた場合は,この指定で zlib も見つかる.

関連項目