dcpam を宇宙研のスパコン(nysa)で動かす
必要なファイル
http://www.gfd-dennou.org/arch/dcpam/dcpam5/dcpam5-20131008.tgz ver. 20131008
> sxmode
でコンパイラーのモードを知ることができる sx-8rとsx-9用がある(sx-9は大規模計算用)
> compver -sx8r
ビルドは, nysa の /large/t/t583/work/dcpam 以下で行う.
> tar xvf dcpam5-20131008.tgz > mv dcpam5-20131008 dcpam5-2013-10-18_src_20131008_-DSLTTFULLMONOTONIC_-DVECTOR > export FC=sxf90 > export FFLAGS='-DSLTTFULLMONOTONIC -DVECTOR -ftrace' > export AR=sxar > export ARFLAGS=rv > export RANLIB=touch > export SYSLDFLAGS=-ftrace > 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
ftrace を使わない場合には, FFLAGS, SYSLDFLAGS の -ftrace を除く.
コンパイル
> make
作業ディレクトリは,
/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
実行用のスクリプトは,
<URL:prepare.sh>, <URL:run_T.sh> (or <URL:run_S.sh>)
を用いる.
上のファイルで実行するディレクトリを指定している部分 (Topdir) を
/large/t/t583/work/dcpam/dcpam5-2013-10-18_src_20131008_-DSLTTFULLMONOTONIC/practice/Earth
に変更する
初期データを作成
> qsub ./prepare.sh
計算の実行
> qsub ./run_T.sh
次の行はエラーとなる.
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
次の行はエラーとなる.
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
次の行はエラーとなる.
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