NCAR CCM3
setup화일을 setup.org로 카피하고 setup을 편집하여 DEC 옵션을 추가한다.
set validarch = (CRAY T3D RS6K SUN SGI DEC)
...... 죄송합니다.. 오래된 정보라 데이타 손실로 이 부분은 생략합니다.
혹시 도움이 필요하시면 메일 주세요..
참고 문헌 :
Sun Solaris to DIGITAL UNIX Porting Guide
SGI IRIX to DIGITAL UNIX Porting Guide
기타 :
각각의 model에서 필요한 library
CCM3.1 - PVM3, perl
CCM3.6.6 - MPI, perl
CSM1.0 - MCL1.0, PVM3
CSM1.2 - csm_share, GNU's make
OCCAM - HDF3.3r3, PVM3, MPI (MPICH1.0)
- How to porting CCM3.1 on Digital Unix v4.0D
Makefile화일에서 FLAGS는 다음과 같이 준다.
CFLAGS = -I. -g -DDEC
FFLAGS = -I. -r8 -i4 -g -O2 -convert big_endian
위의 CFLAGS에서 -DDEC는 아래의 화일들 중에 고치는 부분 모두를 #ifdef DEC와 #endif로 감싸서 고쳐주어야만 사용할 수 있다.
FFLAGS에서 -convert 부분은 unformatted IEEE data로 open하는 화일들이 DEC와 Intel CPU는 little endian인데 반하여 다른 대부분의 CPU는 big_endian이므로 그것을 고쳐주기 위한 옵션이다. 이 방법 외에도 직접 데이타를 swap시키는 방법과 open문에서 "convert" keyword를 사용하는 방법, 그리고 FORT_CONVERT라는 environment valiable을 사용하는 방법 등이 있지만 이것이 가장 쉬운 방법같다.
SUN에서는 LDFLAGS = -lsocket이라는 것을 추가해 주어야 하는데 DEC에서는 SUN과 달리 socket library가 C에 포함되어 있으므로 이 옵션은 빼야 한다.
- common/freemem.F - use call operator when use free() because it is not function but subroutine.
call free()
- common/getmem.F - malloc은 function으로 사용하는데 사용전에 다음과 같이 정의하고 사용한다.
integer*8 malloc
external malloc
...
p = malloc(40)
...
- common/wrapup.F - open 문에서 사용되는 keyword 중 "position"은 "access"로 바꾼다.
- common/wrtharr.F - SGI 등에서 사용되는 cast 연산자 중 dfloat()는 DEC에서도 사용가능하므로 그대로 사용한다.
- common/getdate.c - Fortran에서 getdate()를 사용하려면 C에서는 getdate_()로 정의하여야 한다. 그리고 time()이라는 내장함수의 return value는 long이 아니라 time_t이므로 time_t time();로 선언해주어야 한다.
- common/pvm.h - fpvm3.h와 mcl.h의 path를 알맞게 고친다.
Digital Unix에서 제공하는 PVM3를 사용하려면 path는 /usr/include/fpvm3.h 이다.
- common/setbits.c - Fortran에서 setbits를 사용하려면 C에서는 setbits_()로 정의하여야 한다.
- common/wshist.F - tootiny의 값이 1.e-2000으로 너무 작으므로 다음과 같이 고친다.
parameter (tootiny = 1.e-200)
- common/splitg.F, spectral/wrtrs1.F - #include
가 "integer lhbuf" 이전에 include되어 Error가 나므로 그 이후로 옮긴다. wrtrs1.F는 두군데에 있으므로 모두 옮긴다. - spmd/alpmdalpm.h - mnstrt와 mnend가 선언되지 않고 include하는 몇개의 화일들이 있는데 아예 이 include 화일에서 "integer mnstrt, mnend"를 삽입하여 몇몇 화일에서 Warning이 나기는 하지만 가장 간단한 방법이 될 것 같다.
- Digital에서 제공하는 PVM (일명 DPVM)을 사용할 경우는 여러가지 제약점이 많은데 우선 가장 큰 문제는 실행화일의 path가 제대로 setting되지 않는 다는 것이다. 그래서 여러가지로 테스트 해본 결과 다음 방법이 가장 나을 것 같아 여기에 적는다.
common/comspmd.h의 화일에서 codenm의 실행화일 이름을 절대 path로 지정하고 character 길이도 맞추어 준다.
- 입력 데이타의 path도 문제가 되는데 이것은 CCM3가 MSS를 사용하지 않는 경우는 현재 directory만을 찾게 되어 있어서 절대 path를 setting 하기가 곤란하므로 다음과 같이 고쳐준다.
common/atchbnd.F의 mspath변수에서 filename만 골라내는 부분을 "DEC"가 선언 되었을 경우는 생략하게 하면 된다.
- 만약 T42의 해상도로 모형을 simulation한다면 보통 unlimit를 사용하여야 실행 시킬 수 있는데 PVM을 이용한 parallel 실행시에는 .cshrc를 편집해서 이 부분을 넣어 주어야 한다. 또한 shared memory가 부족할 경우도 있는데 이것은 Digital TruCluster의 default setting이 64MB이기 때문이며 /etc/sysconfigtab의 shm-max값을 조정하고 environment variable에 "PVM_BUF_SIZE"를 크게 잡아서 setting 해 주면 된다.
- SOM을 이용한 모형을 simulation할 경우는 input namelist에서 NCDATA와 BNDTVS의 값을 som용으로 제공하는 데이타로 바꾸어 주어야 한다.
참고 문헌 :
Sun Solaris to DIGITAL UNIX Porting Guide
SGI IRIX to DIGITAL UNIX Porting Guide
기타 :
각각의 model에서 필요한 library
CCM3.1 - PVM3, perl
CCM3.6.6 - MPI, perl
CSM1.0 - MCL1.0, PVM3
CSM1.2 - csm_share, GNU's make
OCCAM - HDF3.3r3, PVM3, MPI (MPICH1.0)
- How to porting hUtils-1.2.1 on Digital Unix v4.0D
* 우선 lint로 확인 해 본다.
%lint -Q -I/usr/local/unidata/netcdf-3.4/include -DIEEE_DP *
* union을 사용한 crpack.c를 다음과 같이 고친다.
... Sorry. Under construction ...
... Please wait for a while ...
- The resolution of CCM3
T42 | T31 | t31x15 | T21 | T5 | ||
PLON | 128 | 96 | 48 | 64 | 16 | |
PLAT | 64 | 48 | 48 | 32 | 8 | |
PTRM | 42 | 31 | 15 | 21 | 5 | |
PTRN | 42 | 31 | 31 | 21 | 5 | |
PTRK | 42 | 31 | 31 | 21 | 5 | |
LSMLON | 128 | 96 | 48 | 64 | 16 | |
LSMLAT | 64 | 48 | 48 | 32 | 8 | |
STD | LPT | - | - | - | - | 39 |
KPT | - | - | - | - | 87 | |
NUMLV | 39 | 22 | - | 20 | 4 | |
SOM | LPT | 2796 | 1558 | 838 | 699 | 39 |
KPT | 6009 | 3327 | 1812 | 1502 | 87 | |
NUMLV | 39 | 22 | 12 | 20 | 4 | |
CSM | LPT | 3402 | ? | 1076 | 981 | 39 |
KPT | 7192 | ?? | 2289 | 2100 | 87 | |
NUMLV | 39 | 22 | 15 | 14 | 4 |