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