CCSR/NIES AGCM 5.6 を京大 KDK で利用する方法に関するメモ


  1. ホスト情報
  2. 資源
  3. 資源の移動
  4. 1. 資源の展開
  5. 2. 環境変数の設定 (~/.cshrc ファイルの編集)
  6. 3. $AGCMDIR/Mkinclude の編集
  7. 4. $AGCMDIR/src/sysdep/Makedef.Sun の編集
  8. 5. $AGCMDIR/src/Makefile の修正 (KDK ではやってはダメ!!!)
  9. 6. $AGCMDIR/src/runtype/single/Mkinclude の修正
  10. 7. $AGCMDIR/src/runtype/parallel/Mkinclude の修正
  11. 8. $AGCMDIR/src/physics/Makefile の修正
  12. 9. $AGCMDIR/src/runtype/parallel/xisetp.F の修正
  13. 10. $AGCMDIR/src/proj/$PROJECT/Mkinclude の編集
  14. 11. ライブラリの作成
  15. 12. 実行コマンドの作成
  16. 13. $AGCMDIR/util のライブラリ作成
  17. 14. agcm5.t42ml20cstd.parallel のライブラリ作成
  18. 15. 実行用シェルスクリプトの編集
  19. 16. 初期値作成
  20. 17. 積分実行
  21. 18. 積分実行中のログの確認
  22. 19. 積分データの格納
  23. 20A. 積分データの図示方法 (gtool3 -> grads 形式 -> GrADS)
  24. 20B. 積分データの図示方法 (gtool3 -> NetCDF 形式 -> GPhys)
  25. 20C. 積分データの図示方法 (gtool を使って図示)
  26. 21. KDK への dcl-5.2 のインストール
  27. 22. KDK への gtool3 のインストール

ホスト情報

資源

資源の移動

% scp (資源のファイル名) dpac@akdk3.rish.kyoto-u.ac.jp:~/ 

1. 資源の展開

(1) ソース展開場所の作成

% cd
% mkdir ccsr-nies-agcm

(2) ソースの展開

% mv agcm5.6_new.tar ccsr-nies-agcm/
% cd ccsr-nies-agcm/
% tar xvf agcm5.6_new.tar

(3) 境界値データの展開

% 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 -

(4) エアロゾルデータの展開

% cd $AGCMDIR
% mv ~/agcm5.6.aerosol.data.tar.gz $AGCMDIR
% zcat agcm5.6.aerosol.data.tar.gz | tar xvf -

2. 環境変数の設定 (~/.cshrc ファイルの編集)

setenv AGCMDIR /home/user/dpac/ccsr-nies-agcm/agcm5.6
setenv LANG japanese

3. $AGCMDIR/Mkinclude の編集

% cd $AGCMDIR
% cp Mkinclude Mkinclude.org

(1) システムの指定

SYSTEM = Sun

(2) 計算形態の指定 (並列計算を行うか否かの設定)

RTYPE = single
RTYPE = parallel 

(3) プロジェクト名の指定

PROJECT = std (とりあえず, デフォルトのまま)

(4) LIBS の修正

(修正前) LIBS   = $(LINKOPT)-L$(LIBDIR) \
                  $(LINKOPT)-l$(LIBNAMES)

(修正後) LIBS   = $(LINKOPT) -L$(LIBDIR) \
                  $(LINKOPT) -l$(LIBNAMES)

4. $AGCMDIR/src/sysdep/Makedef.Sun の編集

% cd $AGCMDIR/src/sysdep/
% cp Mkdef.Sun Mkdef.Sun.org

(1) MPIR_HOME の修正

(修正前) MPIR_HOME      = /usr/local_local/lib/MPI
(修正後) MPIR_HOME       = /opt/FJSVmpi2

(2) R_SYSLDFLAGS の修正

(修正前) 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

(3) R_FC, R_LD の修正

(修正前) 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  

(4) S_INCDIR の修正

(修正前) S_INCDIR       =
(修正後) S_INCDIR       = /usr/include

(5) S_SYSLDFLAGS の修正

(修正前) 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

(6) S_FC, S_LD の修正

(修正前) S_FC            = f77
(修正前) S_LD            = f77

(修正後) S_FC            = frt
(修正後) S_LD            = frt

(7) SYSFFLAGS の修正

(修正前) SYSFFLAGS      = -O -u
(修正後) SYSFFLAGS      = -O

(8) SYSCFLAGS の修正

(修正前) 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

(9) SYSCPPFLAGS の修正

(修正前) 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

(10) SYSAUTODBL の修正

(修正前) SYSAUTODBL     = -r8
(修正後) SYSAUTODBL     =

(11) SYSDEBUG の修正

(修正前) SYSDEBUG       = -g
(修正後) SYSDEBUG       =

(12) SYSCHECK の修正

(修正前) SYSCHECK       = -C
(修正後) SYSCHECK       =

(13) LINKOPT の修正

(修正前) 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

(14) MAKE の修正

(修正前) # MAKE          = make
(修正後) MAKE            = /usr/ccs/bin/make

(15) CC の修正

(修正前) CC              = cc
(修正後) CC              = mpic99 -KV9
-KV9
(修正後) CC              = mpic99 -Ktl_trt  -Kline -KV9
-Ktl_trt
-Kline

(16) CPP の修正

(修正前) CPP             = cpp -P
(修正後) CPP             = mpiFCC -KV9
-KV9
(修正後) CPP             = mpiFCC -Ktl_trt -Kline -KV9
-Ktl_trt
-Kline

(17) SYSXLIBDIR の修正

(修正前) SYSXLIBDIR      = /usr/X11R5/lib
(修正後) SYSXLIBDIR      = /usr/X/lib

5. $AGCMDIR/src/Makefile の修正 (KDK ではやってはダメ!!!)

$(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) $@

と修正.

6. $AGCMDIR/src/runtype/single/Mkinclude の修正

F77 = $(FC)


(修正前) ROPT            = -DOPT_NONPARALLEL
(修正後) ROPT            = -Wp,-DOPT_NONPARALLEL

7. $AGCMDIR/src/runtype/parallel/Mkinclude の修正

F77 = $(FC)

8. $AGCMDIR/src/physics/Makefile の修正

(修正前) 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

9. $AGCMDIR/src/runtype/parallel/xisetp.F の修正

以下のサブルーチン中の ***** 部分を追加する

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
...
...

10. $AGCMDIR/src/proj/$PROJECT/Mkinclude の編集

最初は以下のような設定にした:

(1) 水平分解能

HRESOLUTION     = t42
  1. 鉛直分解能
VRESOLUTION     = l20c

(3) 地表鉛直分解能

GRESOLUTION     = g31c

(4) Compilig Options

(修正前) OPTIONS         = -DOPT_DEBUG
(修正後) OPTIONS         = -Wp,-DOPT_DEBUG

その他は, デフォルトのまま.

11. ライブラリの作成

% cd $AGCMDIR/src/
% make clean
% make dirs
% make lib >& make.parallel.log

(または, % make lib >& make.single.log) 

12. 実行コマンドの作成

(1) 実行コマンドの作成

% cd $AGCMDIR/src/
% make gcm

(2) 実行ファイルが生成されたことを確認

% ls $AGCMDIR/bin/Sun/

agcm5.t42ml20cstd.single

13. $AGCMDIR/util のライブラリ作成

(1) Makefile の書き換え

% cd $AGCMDIR/util/

(修正前) CPPFLAGS       = $(STDCPPFLAGS) $(CPPOPT)-Iinclude
(修正後) CPPFLAGS       = $(STDCPPFLAGS) $(CPPOPT) -Iinclude

(2) ライブラリ作成

% cd $AGCMDIR/util/
% make standards 
% ls $AGCMDIR/lib/Sun/
libagcm5t42ml20c.parallel.a   libagcm5t42ml20c.single.a     libagcmutil.a

作成したライブラリは libagcmutil.a である. 作成されていることを上記の ように確認しておく.

14. agcm5.t42ml20cstd.parallel のライブラリ作成

上記の 3. (RTYPE=parallel とする) 〜 12. までを再度行えばよい.

15. 実行用シェルスクリプトの編集

作成したスクリプトは /home/user/dpac/ccsr-nies-agcm/exec/ 以下に置く. 現在, 以下の 2つのスクリプトが置いてある:

single.sun.csh
parallel.sun.csh

16. 初期値作成

% cd $AGCMDIR/util/init/

(1) INITPRM の編集

(例) 等温静止初期値の作成の場合 (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

(2) 初期値作成

% make isoinit
% ./isoinit

※ 上記の make を行う際の注意事項

a) $AGCMDIR/util/init/Makedef.conv 内の解像度の設定を, 
   $AGCMDIR/src/proj/${PROJECT}/Mkinclude 内の解像度の設定と合わせておく

b) $AGCMDIR/Mkinclude 内の RTYPE を, 実行シェルスクリプト内の 
   $RUNNAME (single か parallel)と合わせておく

(3) 作成した初期値を, 積分実行のためのしかるべき場所に移動

% mv -f init (データファイル名) $AGCMDIR/data/init/init_t42l20_std

17. 積分実行

% qrun single.sun.csh

18. 積分実行中のログの確認

積分実行中のログは, $AGCMDIR/out/$RUNNAME 以下の SYSOUT ファイルに記述 される

% tail -f $AGCMDIR/out/$RUNNAME/SYSOUT 

をしておけば, 積分実行中のログを確認できる.

19. 積分データの格納

20A. 積分データの図示方法 (gtool3 -> grads 形式 -> GrADS)

(1) シェルスクリプト(make_gt2gr)のコピー

% cp $AGCMDIR/sh/sample/make_gt2gr $AGCMDIR/out/$RUNNAME

(2) シェルスクリプト(make_gt2gr)の修正

(3) $AGCMDIR/out/$RUNNAME/make_gt2gr を実行

% 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

(4) $AGCMDIR/out/$RUNNAME/grads 以下のデータを linux PC へ転送する

(5) コントロールファイルの修正

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

(6) 後は grads を起動して, 図示すれば OK

20B. 積分データの図示方法 (gtool3 -> NetCDF 形式 -> GPhys)

(1) 格子点情報ファイルの作成

% 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

(2) $AGCMDIR/out/$RUNNAME/gt3 以下のデータを linux PC へ転送

(3) $AGCMDIR/util/bound 以下の GTAX* データ(格子点情報)を linux PC へ転送

(4) NetCDF データ形式のデータ作成

(5) 作図

% gpview --mean time --itr=10 u.nc@U,time=7932:8508,sig=0.83 --map coast_world 

などコマンドを実行.

20C. 積分データの図示方法 (gtool を使って図示)

(1) 軸情報ファイルの endian 変換 (一度だけすれば OK)

% gtfixendian.g77 (ファイル名)

(2) gtool3 形式のデータの endian 変換 (一度だけすれば OK)

% gtfixendian.g77 (ファイル名)

(3) 図示

% gtcont (ファイル名)

などコマンドを実行

21. KDK への dcl-5.2 のインストール

% 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

など.

22. KDK への gtool3 のインストール


Hiroshi Taniguchi@ Last Updated: 2007/03/23, Since: 2007/03/13