% scp (資源のファイル名) dpac@akdk3.rish.kyoto-u.ac.jp:~/
% cd % mkdir ccsr-nies-agcm
% mv agcm5.6_new.tar ccsr-nies-agcm/ % cd ccsr-nies-agcm/ % tar xvf agcm5.6_new.tar
% mv ~/agcm5.6.BDATA.tar.gz ~/ccsr-nies-agcm/agcm5.6/data/ % mv ~/agcm5.6.t106.data.tar.gz ~/ccsr-nies-agcm/agcm5.6/data/ % cd ~/ccsr-nies-agcm/agcm5.6/data/ % zcat agcm5.6.t106.data.tar.gz | tar xvf - % zcat agcm5.6.BDATA.tar.gz | tar xvf -
% cd $AGCMDIR % mv ~/agcm5.6.aerosol.data.tar.gz $AGCMDIR % zcat agcm5.6.aerosol.data.tar.gz | tar xvf -
setenv AGCMDIR /home/user/dpac/ccsr-nies-agcm/agcm5.6 setenv LANG japanese
% cd $AGCMDIR % cp Mkinclude Mkinclude.org
SYSTEM = Sun
RTYPE = single
RTYPE = parallel
PROJECT = std (とりあえず, デフォルトのまま)
(修正前) LIBS = $(LINKOPT)-L$(LIBDIR) \ $(LINKOPT)-l$(LIBNAMES) (修正後) LIBS = $(LINKOPT) -L$(LIBDIR) \ $(LINKOPT) -l$(LIBNAMES)
% cd $AGCMDIR/src/sysdep/ % cp Mkdef.Sun Mkdef.Sun.org
(修正前) MPIR_HOME = /usr/local_local/lib/MPI (修正後) MPIR_HOME = /opt/FJSVmpi2
(修正前) R_SYSLDFLAGS = $(MPIR_HOME)/lib/libmpe.a (修正後) R_SYSLDFLAGS = -Kparallel -Kfast_GP2=3,prefetch=4 -Knolargepage,V9 -Khardbarrier -X9
-Kparallel 自動並列化を有効にする -Kfast_GP2=3,prefetch=4 SPARC64 V 向け最適化のオプションセット -Klargepage=2, V9 Parallelnavi ラージページ機能を使用する -Knolargepage Parallelnavi ラージページ機能を使用しない -Khardbarrier スレッド並列をする場合, 同期処理を高速にする
(修正後) R_SYSLDFLAGS = -Ktl_trt -Kparallel -Kfast_GP2=3,prefetch=4 -Knolargepage,V9 -Khardbarrier
-Ktl_trt
(修正前) R_FC = $(MPIR_HOME)/bin/mpif77 -mpilog -lm (修正前) R_LD = $(MPIR_HOME)/bin/mpif77 -mpilog -lm (修正後) R_FC = $(MPIR_HOME)/bin/mpifrt -mpilog -lm -KV9 (修正後) R_LD = $(MPIR_HOME)/bin/mpifrt -mpilog -lm -KV9
-KV9
(修正前) S_INCDIR = (修正後) S_INCDIR = /usr/include
(修正前) S_SYSLDFLAGS = (修正後) S_SYSLDFLAGS = -Kparallel -Kfast_GP2=3,prefetch=4 -Knolargepage,V9 -Khardbarrier -X9
-Kparallel 自動並列化を有効にする -Kfast_GP2=3,prefetch=4 SPARC64 V向け最適化のオプションセット -Klargepage=2, V9 Parallelnavi ラージページ機能を使用する -Knolargepage Parallelnavi ラージページ機能を使用しない -Khardbarrier スレッド並列をする場合, 同期処理を高速にする
(修正後) S_SYSLDFLAGS = -Ktl_trt -Kparallel -Kfast_GP2=3,prefetch=4 -Knolargepage,V9 -Khardbarrier -X9
-Ktl_trt
(修正前) S_FC = f77 (修正前) S_LD = f77 (修正後) S_FC = frt (修正後) S_LD = frt
(修正前) SYSFFLAGS = -O -u (修正後) SYSFFLAGS = -O
(修正前) SYSCFLAGS = -DX_WCHAR (修正後) SYSCFLAGS = -Kparallel -Kfast_GP2=3 -Knolargepage,V9 -Khardbarrier -X9 -Wp,-DX_WCHAR
-Kparallel 自動並列化を有効にする -Kfast_GP2=3,prefetch=4 SPARC64 V向け最適化のオプションセット -Klargepage=2, V9 Parallelnaviラージページ機能を使用する -Knolargepage Parallelnavi ラージページ機能を使用しない -Khardbarrier スレッド並列をする場合, 同期処理を高速にする -Wp,-DX_WCHAR X_WCHARというマクロを渡す
(修正後) SYSCFLAGS = -Ktl_trt -Kparallel -Kfast_GP2=3,prefetch=4 -Knolargepage,V9 -Khardbarrier -X9 -Wp,-DX_WCHAR
-Ktl_trt
(修正前) SYSCPPFLAGS = -DSYS_Sun -DSYS_UNIX -DCODE_ASCII -DCODE_IEEE (修正後) SYSCPPFLAGS = -Kparallel -Kfast_GP2=3,prefetch=4 -Knolargepage,V9 -Khardbarrier -X9 -Wp,-DSYS_Sun \ -Wp,-DSYS_UNIX -Wp,-DCODE_ASCII -Wp,-DCODE_IEEE
-Kparallel 自動並列化を有効にする -Kfast_GP2=3,prefetch=4 SPARC64 V向け最適化のオプションセット -Klargepage=2, V9 Parallelnaviラージページ機能を使用する -Knolargepage Parallelnavi ラージページ機能を使用しない -Khardbarrier スレッド並列をする場合, 同期処理を高速にする -Wp,-D マクロを渡す
(修正後) SYSCPPFLAGS = -Ktl_trt -Kparallel -Kfast_GP2=3,prefetch=4 -Knolargepage,V9 -Khardbarrier \ -X9 -Wp,-DSYS_Sun -Wp,-DSYS_UNIX -Wp,-DCODE_ASCII -Wp,-DCODE_IEEE
-Ktl_trt
(修正前) SYSAUTODBL = -r8 (修正後) SYSAUTODBL =
(修正前) SYSDEBUG = -g (修正後) SYSDEBUG =
(修正前) SYSCHECK = -C (修正後) SYSCHECK =
(修正前) LINKOPT = (修正後) LINKOPT = -Kparallel -Kfast_GP2=3,prefetch=4 -Knolargepage,V9 -Khardbarrier -X9
-Kparallel 自動並列化を有効にする -Kfast_GP2=3,prefetch=4 SPARC64 V向け最適化のオプションセット -Klargepage=2, V9 Parallelnaviラージページ機能を使用する -Knolargepage Parallelnavi ラージページ機能を使用しない -Khardbarrier スレッド並列をする場合, 同期処理を高速にする
(修正後) LINKOPT = -Ktl_trt -Kparallel -Kfast_GP2=3,prefetch=4 -Knolargepage,V9 -Khardbarrier -X9
-Ktl_trt
(修正前) # MAKE = make (修正後) MAKE = /usr/ccs/bin/make
(修正前) CC = cc (修正後) CC = mpic99 -KV9
-KV9
(修正後) CC = mpic99 -Ktl_trt -Kline -KV9
-Ktl_trt
-Kline
(修正前) CPP = cpp -P (修正後) CPP = mpiFCC -KV9
-KV9
(修正後) CPP = mpiFCC -Ktl_trt -Kline -KV9
-Ktl_trt
-Kline
(修正前) SYSXLIBDIR = /usr/X11R5/lib (修正後) SYSXLIBDIR = /usr/X/lib
$(GCM): includes nonstdlib speciallib $(MAIN) $(SYSLIBY) $(LD) $(LDFLAGS) $(OBJS) $(NONSTDS) $(LIBRARY) $(SYSLIBY) $(SYSLIB) -o $@
部分を
$(GCM): includes nonstdlib speciallib $(MAIN) $(SYSLIBY) $(LD) -o $(LDFLAGS) $(OBJS) $(NONSTDS) $(LIBRARY) $(SYSLIBY) $(SYSLIB) $@
と修正.
F77 = $(FC) (修正前) ROPT = -DOPT_NONPARALLEL (修正後) ROPT = -Wp,-DOPT_NONPARALLEL
F77 = $(FC)
(修正前) FFLAGS = $(STDFFLAGS) -I$(INCDIR) -I$(MPIINCDIR) -DOPT_MSTRN8 (修正後) FFLAGS = $(STDFFLAGS) -I$(INCDIR) -I$(MPIINCDIR) -Wp,-DOPT_MSTRN8 (修正前) CPPFLAGS = $(STDCPPFLAGS) $(CPPOPT)-I$(INCDIR) $(CPPOPT)-I$(MPIINCDIR) $(CPPOPT)-DOPT_MSTRN8 (修正後) CPPFLAGS = $(STDCPPFLAGS) $(CPPOPT)-I$(INCDIR) $(CPPOPT)-I$(MPIINCDIR) $(CPPOPT)-Wp,-DOPT_MSTRN8
以下のサブルーチン中の ***** 部分を追加する
SUBROUTINE PARA_TYPE_BLOCK !! make new block data type ... ... CALL MPI_TYPE_VECTOR( JLEN , ILEN , IMAX-IMIN+1 , $ IOLDTYPE , ITEMP , IERR ) ************************************************************* CALL MPI_TYPE_COMMIT( ITEMP , IERR ) ************************************************************* * NCOUNT = 3 IBLOCK( 1 ) = 1 ... ...
最初は以下のような設定にした:
HRESOLUTION = t42
VRESOLUTION = l20c
GRESOLUTION = g31c
(修正前) OPTIONS = -DOPT_DEBUG (修正後) OPTIONS = -Wp,-DOPT_DEBUG
その他は, デフォルトのまま.
% cd $AGCMDIR/src/ % make clean % make dirs % make lib >& make.parallel.log (または, % make lib >& make.single.log)
% cd $AGCMDIR/src/ % make gcm
% ls $AGCMDIR/bin/Sun/ agcm5.t42ml20cstd.single
% cd $AGCMDIR/util/ (修正前) CPPFLAGS = $(STDCPPFLAGS) $(CPPOPT)-Iinclude (修正後) CPPFLAGS = $(STDCPPFLAGS) $(CPPOPT) -Iinclude
% cd $AGCMDIR/util/ % make standards % ls $AGCMDIR/lib/Sun/ libagcm5t42ml20c.parallel.a libagcm5t42ml20c.single.a libagcmutil.a
作成したライブラリは libagcmutil.a である. 作成されていることを上記の ように確認しておく.
上記の 3. (RTYPE=parallel とする) 〜 12. までを再度行えばよい.
作成したスクリプトは /home/user/dpac/ccsr-nies-agcm/exec/ 以下に置く. 現在, 以下の 2つのスクリプトが置いてある:
single.sun.csh parallel.sun.csh
% cd $AGCMDIR/util/init/
(例) 等温静止初期値の作成の場合 (INITPRM の記述を以下のようにした)
&nmout idate=0,1,1,0,0,0, : 時刻(年月日時分秒) hdset='test01' : データセット名 &end &nmrstr file='init', : 出力ファイル名 dfmt='UR4' : データ形式 &end &nmiso t=290., : 温度 q=1.e-10, : 比湿 ps=998.0 : 気圧 &end % make clean
% make isoinit % ./isoinit
※ 上記の make を行う際の注意事項
a) $AGCMDIR/util/init/Makedef.conv 内の解像度の設定を, $AGCMDIR/src/proj/${PROJECT}/Mkinclude 内の解像度の設定と合わせておく b) $AGCMDIR/Mkinclude 内の RTYPE を, 実行シェルスクリプト内の $RUNNAME (single か parallel)と合わせておく
% mv -f init (データファイル名) $AGCMDIR/data/init/init_t42l20_std
% qrun single.sun.csh
積分実行中のログは, $AGCMDIR/out/$RUNNAME 以下の SYSOUT ファイルに記述 される
% tail -f $AGCMDIR/out/$RUNNAME/SYSOUT
をしておけば, 積分実行中のログを確認できる.
以下では, データ格納場所を
gtool3 形式のデータ: $AGCMDIR/out/$RUNNAME/gt3 grads 形式のデータ: $AGCMDIR/out/$RUNNAME/grads
として, データ変換と作図方法を記述する
% cp $AGCMDIR/sh/sample/make_gt2gr $AGCMDIR/out/$RUNNAME
環境変数の修正
setenv OUTNAM out/para setenv DIR $AGCMDIR/$OUTNAM/gt3 setenv DIR $AGCMDIR/$OUTNAM/grads setenv GTP /usr/local/lib/gt3/GTAXLOC.STDPL17
部分をデータの格納場所に応じて修正する.
NAMELIST パラメタの修正
&nms2p (σ->p 変換) os2p=t (t にすると, 変換する) filep='$GTP' (gtool3 の p 面格子位置情報ファイル名) ... &nmdata file='hogehoge' (この行を入れると, hogehoge という名の grads データが作成される)
% sh ./$AGCMDIR/out/$RUNNAME/make_gt2gr * 変換されたデータは, $AGCMDIR/out/$RUNNAME/grads 以下に次のようなファ イル名で格納される agcm5.6.a.ctl agcm5.6.a.grd agcm5.6.l.ctl agcm5.6.l.grd
a) DSET の修正 DSET を, linux 側のデータ格納場所に書き換える b) OPTIONS の修正 (修正前) OPTIONS YREV (修正後) OPTIONS YREV big_endian c) YDEF の修正 (T42 の場合) (修正前) (ガウシアン緯度が一行で入っている) YDEF 64 LEVELS -87.8637924 -85.0965195 -82.3129044 -79.5256042 -76.7369003 -73.9475098 -71.1577454 -68.3677521 -65.5776062 -62.7873497 -59.9970131 \ -57.2066269 -54.4161949 -51.6257286 -48.8352394 -46.0447235 -43.2541924 -40.4636459 -37.6730881 -34.8825188 -32.0919418 -29.3013592 \ -26.5107689 -23.7201729 -20.9295731 -18.1389694 -15.3483629 -12.5577555 -9.76714516 -6.97653341 -4.18592024 -1.39530683 1.39530683 \ 4.18592024 6.97653341 9.76714516 12.5577555 15.3483629 18.1389694 20.9295731 23.7201729 26.5107689 29.3013592 32.0919418 34.8825188 \ 37.6730881 40.4636459 43.2541924 46.0447235 48.8352394 51.6257286 54.4161949 57.2066269 59.9970131 62.7873497 65.5776062 68.3677521 \ 71.1577454 73.9475098 76.7369003 79.5256042 82.3129044 85.0965195 87.8637924 (修正後) (小数点以下の精度を減らし, 適当な行で改行する) YDEF 64 LEVELS -87.86 -85.10 -82.31 -79.52 -76.74 -73.95 -71.16 -68.37 -65.58 -62.79 -60.00 -57.21 -54.42 -51.63 -48.84 -46.04 -43.25 -40.46 -37.67 -34.88 -32.09 -29.30 -26.51 -23.72 -20.93 -18.14 -15.35 -12.56 -9.77 -6.98 -4.19 -1.40 1.40 4.19 6.98 9.77 12.56 15.35 18.14 20.93 23.72 26.51 29.30 32.09 34.88 37.67 40.46 43.25 46.04 48.84 51.63 54.42 57.21 60.00 62.79 65.58 68.37 71.16 73.95 76.74 79.53 82.31 85.10 87.86
% cd $AGCMDIR/util/bound % make % makeaxis
以下の格子点情報ファイルが作成される:
GTAXLOC.CSIG20 GTAXLOC.CSIG20.M GTAXLOC.GLON128 GTAXLOC.GGLA64 GTAXLOC.WLEVC1 GTAXLOC.WLEVC1.M GTAXLOC.GLEVC3 GTAXLOC.GLEVC3.M GTAXWGT.CSIG20 GTAXWGT.CSIG20.M GTAXWGT.GLON128 GTAXWGT.GGLA64 GTAXWGT.WLEVC1 GTAXWGT.WLEVC1.M GTAXWGT.GLEVC3 GTAXWGT.GLEVC3.M
linux 側の gtool3 形式のファイルのある場所で, 以下のコマンドを実行
% ruby gt3nc.rb (gtool3 データ) (NetCDF データ) axis=(格子点情報ファイルの場所) endian=big
% gpview --mean time --itr=10 u.nc@U,time=7932:8508,sig=0.83 --map coast_world
などコマンドを実行.
% gtfixendian.g77 (ファイル名)
% gtfixendian.g77 (ファイル名)
% gtcont (ファイル名)
などコマンドを実行
% tar zxvf dcl-5.2.tar.gz % cd dcl-5.2 % setenv FC "frt -Knolargepage" % setenv CC "fcc -Knolargepage" % ./configure --prefix=/home/user/dpac % mkdir /home/user/dpac/bin % mkdir /home/user/dpac/lib % make % make install
% setenv DISPLAY dpac.dpri.kyoto-u.ac.jp:0.0 % dclclr
など.