=begin = 宇宙研スパコン (SX) ビルドログ * 作業日 2013/10/18 dcpam を宇宙研のスパコン(nysa)で動かす == 準備 === 必要なファイルの取得 #nysa に接続する PC で, 20110808という #ディレクトリを作成して必要なファイルを入れる 必要なファイル * ispack http://www.gfd-dennou.org/library/ispack/ispack-1.0.2.tar.gz ver 1.0.2 * netcdf http://www.unidata.ucar.edu/downloads/netcdf/ftp/netcdf-3.6.1.tar.gz SX 用のパッチがあり, 動作確認ができている 3.6.1 を取得 * gtool http://www.gfd-dennou.org/library/gtool/gtool5/gtool5-20101228-1.tgz ver. 20101228-1 * spmodel http://www.gfd-dennou.org/library/spmodel/ ver. snv snapshot 20130411 バージョン名が分かるように名前を変更した mv spml_current.tar.gz spml-0.6.1.tar.gz * dcpam http://www.gfd-dennou.org/arch/dcpam/dcpam5/dcpam5-20110615.tgz ver. 20110615 === netcdfのパッチ適応 パッチファイルの取得 http://www.unidata.ucar.edu/software/netcdf/patches/blksz-361-patch http://www.unidata.ucar.edu/software/netcdf/patches/f90-361-patch http://www.unidata.ucar.edu/software/netcdf/patches/nec_sx_vector_ncx-361-patch http://www.unidata.ucar.edu/software/netcdf/patches/fileinf-361-patch netcdfのファイルを解凍する $ tar zxvf netcdf-3.6.1.tar.gz パッチファイルを netcdf-3.6.1/src に移動する $ cp *-patch netcdf-3.6.1/src パッチを適応する $ cd netcdf-3.6.1/src $ patch -p0 < blksz-361-patch $ patch -p0 < f90-361-patch $ patch -p0 < nec_sx_vector_ncx-361-patch $ patch -p0 < fileinf-361-patch netcdf-3.6.1/src/libsrc/v2i.c がヘッダ指定不足なので以下の部分を追加する #include "config.h" #include "nc.h" #=== フロントエンドへの転送 #~/20110808のディレクトリを圧縮 # $ tar cfz 20110808.tar.gz 20110808 # #nysaのホームディレクトリにsrc/を作成しておく # $ mkdir ~/src # #sftpでの転送 # $ sftp -F ~/OpenSSH_config/config h290@nysa # sftp> cd src # sftp> put 20110808.tar.gz #たくさんのファイルを送るときは # mput [ファイル名] # #送ったファイルの解凍 # > tar zxf 20110808.tar.gz === コンパイラーモードの設定 > sxmode でコンパイラーのモードを知ることができる sx-8rとsx-9用がある(sx-9は大規模計算用) > compver -sx8r == ビルド === ispack ビルドは, nysa の ~/tmp/ispack 以下で行う. Mkincludeの編集 以下のように変更する FC = sxf90 FFLAGS = -g -sx8r -Wf'-pvctl nodivloop noloopchg fullmsg -L fmtlist transform -O' MPIFC = sxmpif90 MPIFFLAGS = -g -sx8r -Wf'-pvctl nodivloop noloopchg fullmsg -L fmtlist transform -O' CC = sxc++ CFLAGS = -g -sx8r -Wf'-pvctl nodivloop noloopchg fullmsg -L fmtlist transform -O' DCLFRT = dclfrt AR = sxar ARFLAGS = vru RM = rm -f CP = cp CPP = cpp CPPFLAGS = -DDIRECT -DFORMAT -DIEEE -DASCII -DNEC AS = sxas MV = mv -f RANLIB = touch CAT = cat SSE = fort NVCC = nvcc NVCFLAGS = -arch=sm_20 -O3 コンパイル > make 移動 > mkdir -p ~/local/ispack-1.0.2-sx8r/lib > cp libisp.a ~/local/ispack-1.0.2-sx8r/lib === netcdf クロスコンパイルに成功していないので, ジョブを投げてセルフコンパイルする. ジョブを投げるディレクトリは /large/t/t583 とする. ジョブを投げるのにはジョブスクリプトを 作成する必要がある (参考:jss user guide P80). ここでは (()) を利用 パスは下のように設定 #PBS -v TOPDIR_front=/large/t/t290/netcdf/netcdf-3.6.1 # ./configure \ # --build=sx8-nec-superux17.1 \ # --prefix=${TOPDIR_front}/netcdf \ # --disable-cxx ジョブの投入 > qsub ./config.sh うまくいけば Request 94136.iox submitted to queue: T. というように表示される. ジョブの状況を知りたい時は以下のコマンドを実行 > qstat 標準出力 netcdf_config.sh.o* 標準エラー出力 netcdf_config.sh.e* config.sh.e*をみると %NQSII(INFO): Batch job received signal SIGKILL. (Exceeded per-req elapse time limit) という表示がある 時間切れのため途中で止まっているので ./configure make clean をコメントアウトしてもう一度実行 > qsub ./config.sh > qstat で確認 netcdfというディレクトリができるのでこれを移動. > mv netcdf ~/local/netcdf-3.6.1-sx8r === gtool5 ビルドは, nysa の ~/tmp/gtool5 以下で行う. > tar zxvf gtool5-20101228-1.tgz > cd gtool5-20101228-1/ > export FC=sxf90 > export AR=sxar > export ARFLAGS=rv > export RANLIB=touch > export SYSLDFLAGS= > export SYSFFLAGS="-w -dW -sx8r -Wf'-pvctl loopcnt=65536 \ nodivloop noloopchg fullmsg -L fmtlist transform -O'" > ./configure \ --prefix=${HOME}/local/gtool5-20101228-1-sx8r \ --with-netcdf=${HOME}/local/netcdf-3.6.1-sx8r/lib/libnetcdf.a コンパイル > make インストール > make install === spmodel ビルドは, nysa の ~/tmp/spml 以下で行う. > tar zxvf spml-svn_snapshot.tar.gz-20130411 > cd spml > export FC=sxf90 > export AR=sxar > export ARFLAGS=rv > export RANLIB=touch > export SYSLDFLAGS= > export SYSFFLAGS="-w -dW -sx8r -Wf'-pvctl loopcnt=65536 \ nodivloop noloopchg fullmsg -L fmtlist transform -O'" > ./configure --prefix=${HOME}/local/spml-svn_snapshot-20130411-sx8r \ --with-ispack=${HOME}/local/ispack-1.0.2-sx8r/lib/libisp.a \ --with-netcdf=${HOME}/local/netcdf-3.6.1-sx8r/lib/libnetcdf.a \ --with-gtool5=${HOME}/local/gtool5-20101228-1-sx8r/lib/libgtool5.a コンパイル > make インストール > make install === dcpam ビルドは, nysa の /large/t/t583/work/dcpam 以下で行う. > tar xvf dcpam5-20131008.tgz > mv dcpam5-20131008 dcpam5-2013-10-18_src_20131008_-DSLTTFULLMONOTONIC > export FC=sxf90 > export FFLAGS=-DSLTTFULLMONOTONIC > export AR=sxar > export ARFLAGS=rv > export RANLIB=touch > export SYSLDFLAGS= > export SYSFFLAGS="-w -dW -sx8r -Wf'-pvctl loopcnt=65536 \ nodivloop noloopchg fullmsg -L fmtlist transform -O -M noinv'" > ./configure --with-ispack=${HOME}/local/ispack-1.0.2-sx8r/lib/libisp.a \ --with-netcdf=${HOME}/local/netcdf-3.6.1-sx8r/lib/libnetcdf.a \ --with-gtool5=${HOME}/local/gtool5-20101228-1-sx8r/lib/libgtool5.a \ --with-spml=${HOME}/local/spml-svn_snapshot-20130411-sx8r/lib/libspml-vec.a #バージョン20110615のみ # > make clean.depend # > make depend コンパイル > make == dcpam の実行 作業ディレクトリは, /large/t/t583/work/dcpam/dcpam5-2013-10-18_src_20131008_-DSLTTFULLMONOTONIC/practice/Earth とする. 最後のディレクトリの名前は実験によって変更する. cd /large/t/t583/work/dcpam/dcpam5-2013-10-18_src_20131008_-DSLTTFULLMONOTONIC/practice/Earth 実行用のスクリプトは, (()), (()) (or (())) を用いる. 上のファイルで実行するディレクトリを指定している部分 (Topdir) を /large/t/t583/work/dcpam/dcpam5-2013-10-18_src_20131008_-DSLTTFULLMONOTONIC/practice/Earth に変更する 初期データを作成 > qsub ./prepare.sh 計算の実行 > qsub ./run_T.sh #== 計算結果のファイルを手元の計算機に移動する #手元のPC上にデータ保存用ディレクトリを作成 # $ mkdir dcpam_test # $ cd dcpam_test # #手元のPCで以下を実行 # $ rsync -auvz -e "ssh -F ../OpenSSH_config/config" h290@nysa:/large/h/h290/dcpam . == 注意 === src/radiation/rad_C2001.f90 の 960 行目 次の行はエラーとなる. xyrr_TransElem(:,:,k,kk) = xyrr_TransElem(:,:,k,kk)**CoefN (xyrr_TransElem(:,:,k,kk) の値が小さすぎるところでエラーとなる). そこで下のように書き換える. where ( xyrr_TransElem(:,:,k,kk) >= 1.0d-10 ) xyrr_TransElem(:,:,k,kk) = xyrr_TransElem(:,:,k,kk)**CoefN elsewhere xyrr_TransElem(:,:,k,kk) = 0.0_DP end where === src/util/mass_fixer.f90 の 307 行目 次の行はエラーとなる. xy_FactAlphaDenom = xy_FactAlphaDenom & & + xyzf_QMix (:,:,k,n) & & * abs( xyzf_QMix(:,:,k,n) - xyzf_QMixRefLV(:,:,k,n) )**FactBeta & & * xyz_DelMass(:,:,k) そこで下のように書き換える. where ( abs( xyzf_QMix(:,:,k,n) - xyzf_QMixRefLV(:,:,k,n) ) >=1.0d-30 ) xy_FactAlphaDenom = xy_FactAlphaDenom & & + xyzf_QMix (:,:,k,n) & & * abs( xyzf_QMix(:,:,k,n) - xyzf_QMixRefLV(:,:,k,n) )**FactBeta & & * xyz_DelMass(:,:,k) elsewhere xy_FactAlphaDenom = xy_FactAlphaDenom end where === src/util/mass_fixer.f90 の 320 行目 次の行はエラーとなる. xyzf_QMix(:,:,:,n) = xyzf_QMix(:,:,:,n) & & + FactAlpha * xyzf_QMix(:,:,:,n) & & * abs( xyzf_QMix(:,:,:,n) - xyzf_QMixRefLV(:,:,:,n) )**FactBeta そこで下のように書き換える. where( abs( xyzf_QMix(:,:,:,n) - xyzf_QMixRefLV(:,:,:,n) ) > 1.0d-30 ) xyzf_QMix(:,:,:,n) = xyzf_QMix(:,:,:,n) & & + FactAlpha * xyzf_QMix(:,:,:,n) & & * abs( xyzf_QMix(:,:,:,n) - xyzf_QMixRefLV(:,:,:,n) )**FactBeta elsewhere xyzf_QMix(:,:,:,n) = xyzf_QMix(:,:,:,n) end where == 参考資料 * jss資料 * jssのポータルからログイン * 講習会資料 * 新規利用者向けjssユーザ講習会 * (()) * 非公開領域なので地球流体電脳クラブのアカウントが必要 * (()) =end