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