- How to set up input data which is prepared by GFDL
%cd $MOMpath/EXP/$myEXP/PREP_UPDATES
%cp $MOMpath/PREP_DATA/run_sbc .
%cp $MOMpath/PREP_DATA/run_ic .
%cp $MOMpath/PREP_DATA/run_sponge .
-> 위의 세가지 화일을 편집하여 다음과 같이 고친다.
myEXP = GLOBE
MOMupdates = MOM_UPDATES의 path를 적는다.
PREPupdates = PREP_UPDATES의 path를 적는다.
MOMpath = MOM의 HOME directory
PREPpath = GFDL에서 제공하는 MOMpath 아래의 PREP_DATA directory
datainpath = GFDL에서 제공하는 database가 있는 directory
dataoutpath = 결과 database가 저장될 directory
WORKDIR = working directory로서 setting 후에 직접 만들어 주어야 한다.
-> OPTIONS에 -Dcray_t90을 지우고 -Dsgi를 삽입하고 Digital Unix 상에서 실행 중일 경우 -convert big_endian도 함께 추가해 준다.
-> 입력 데이타를 copy하는 부분이 있는데 link를 시키는 것이 편하므로 symbolic link를 해주는데 각각의 link할 화일은 다음과 같다.
run_sbc : hellerman.tau, oorts.air
run_ic : *.temp, *.salt
run_sponge : *.mom
-> run_sbc에 intrph와 intrpo도 알맞게 고쳐준다.
-> Digital Unix에서는 $MOMpath/iomngr.F의 1182번쩨 줄에 write format error가 생기므로 다음과 같이 고쳐준다.
write(stdout,'(a4,)') -> write(stdout,'(a4)')
%./run.sbc
-> 실행 후에 각각의 *.prn 화일을 잘 살펴 보고 $dataoutpath에 길과가 제대로 들어갔는지 확인한다.
- How to set up scripps topography data
......
- How to change MOM2 resolution
1. grids.F의 해상도를 알맞게 고친 후 run_grids를 실행하여 결과 확인.
2. index.h에 lsegf와 jmtfil의 값을 조정해야 하는데 이것은 mom2를 여러번 실행하면서 조정 (error message가 나옴).
3. diago_netcdf.F에 lenbuf가 10000으로 setting되어 있는데 이 값이 적정하지 않으면 처음 diagnostic 결과가 저장될 때 error message로서 print되는데, 될 수 있으면 첫 실행에서 diagnostic 결과를 빨리 저장하도록 하여 이것을 확인 해 보는 것이 좋다.
4. PREP_UPDATES에서 run_sbc, run_ic, run_sponge를 각각 다시 실행하여 해상도에 맞는 databsea 생성. 해상도가 높으면 database가 커지므로 될수 있으면 각각의 run scripts에 $dataoutpath로 copy하는 부분을 move로 고쳐주는 것이 좋다. 그렇지 않으면 FTMPDIR과 DATABASE에 똑같은 화일이 두개 존재하므로 FTMPDIR을 일부러 지우지 않는한 space의 낭비를 가져올 수 있다.
5. run_mom에서 runlen, dtts, dtuv, dtsf 등을 고친 후 실행. dtuv와 dtsf는 dtts의 24배 정도 작은 값을 채택.
2. run_mom_dec를 편집하여 "COMPILER_OPTIONS"의 "-mips2"와 "-align64"를 빼고 다음을 추가한다.
"-convert big_endian"
3. LEN_TRIM 함수는 iomngr.F와 util.F, timer.F에 있는데 이것이 컴파일시 중복이 되므로 util.F와 timer.F에 있는 LEN_TRIM함수는 모두 comment처리한다. 참고로 f90으로 컴파일하면 LEN_TRIM이 Intrinsic Procedure로써 제공된다.
1. run_iomngr을 test할 때 iomngr.F에 sform='SYSTEM'이라고 써있는 부분이 있는데 이 format문은 Digital Unix에 맞지 않으므로 'UNFORMATTED'라고 고치거나 f77을 사용하지 맡고 f90을 사용하되 컴파일 옵션에 '-Df90'을 추가한다.
1. GFDL에서 제공하는 DATABASE는 32bit IEEE unformatted 화일이므로 이것을 읽으려면 위의 모든 scripts 화일에서 compile option에 "-r8" 부분을 빼주어야 하는데 (Digital Unix Fortran의 Default real size는 4이다) 이 옵션을 빼면 namelist나 그외 몇몇 부분에서 real size가 잘 맞지 않아 결과의 소수점 아래부분이 값이 많이 틀림을 알 수 있다. 이것은 수치모형에서 치명적인 에라를 유발할 수 있으므로 PREP_UPDATES에서 제공하는 모든 data를 real*8로 바꾸어서 만들어야 하는데 이것의 간단한 설명은 다음과 같고 자세한 것을 알고 싶으면 mail() 주시기 바랍니다.
우선 $MOMpath/PREP_DATA에서 sbc.F와 ic.F를 PREP_UPDATES에 copy한다 (sponge.F는 run_ic에서 만든 데이타를 이용하므로 고쳐줄 필요없다.).
각 화일을 편집하여 데이타를 read하는 부분(doit()서브루틴 내에 있음)을 찾아서 각각의 변수 중 real인 것 만 골라서 이것과 비슷한 이름으로 real*4로 정의한 변수를 만든다.
이렇게 만든 real*4변수로 read문의 변수를 대체하고 각각 읽은 후에 다시 원래의 real*8의 변수에 값을 치환하여 집어 넣어 주면 된다.
2. CASE=2를 사용할 경우, 즉 SBC를 MONTHLY로 읽어 들이는 부분에서 Digital Unix 상에서는 error이 나는데 그것은 SBC/MONTHLY/setatm.F에서 file을 open할 때 direct access의 record length의 값이 맞지 않기 때문이다. 왜냐하면 이 값이 Cray와도 맞지 않고 SGI에도 맞지 않기 때문이다. 정확한 record length의 값은 현재 테스트 중에 있으므로 결과가 검증이 되는대로 값을 제시하도록 하겠다 (검증 전에라도 값이 필요하신 분은 mail() 주시기 바랍니다).
convect(t,z,y,x) : Rate of convection
period(t) : Averaging period
diag_surf.dta[.nc]
Diagnostic Surface Height
dsp(t,y,x) : diag surf height
dspper(t) : averaging period
energy_int.dta[.nc]
Energyanalysis
ddt_int(t) : internal mode energy change
hadv_int(t) : internal mode work by hor adv
vadv_int(t) : internal mode work by vert adv
hfric_int(t) : internal mode work by hor fric
vfric_int(t) : internal mode work by vert fric
press_int(t) : internal mode work by pressure
imbal_int(t) : internal mode imbalance
wind_int(t) : internal mode work by wind
drag_int(t) : internal mode work by bottom drag
ddt_ext(t) : external mode energy change
hadv_ext(t) : external mode work by hor adv
vadv_ext(t) : external mode work by vert adv
hfric_ext(t) : external mode work by hor fric
vfric_ext(t) : external mode work by vert fric
press_ext(t) : external mode work by pressure
imbal_ext(t) : external mode imbalance
wind_ext(t) : external mode work by wind
drag_ext(t) : external mode work by bottom drag
buoy(t) : buoyancy
buoy_err(t) : buoyancy error
energy_leak(t) : non-linear error
period(t) : Averaging period
gyre_comp.dta[.nc]
Gyre northward transport components
zonal_mean_T(t,y) : x mean_T
zonal_eddy_T(t,y) : x eddy_T
vert_mean_T(t,y) : z mean_T
vert_eddy_T(t,y) : z eddy T
ekman_T(t,y) : ekman_T
adv_T(t,y) : total advection_T
diff_T(t,y) : diffusion_T
total_T(t,y) : total transport_T
zonal_mean_S(t,y) : x