ece-nemo.sh.tmpl 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563
  1. #!/usr/bin/env bash
  2. set -ue
  3. # librunscript defines some helper functions
  4. source ./librunscript.sh
  5. # =============================================================================
  6. # *** BEGIN User configuration
  7. # =============================================================================
  8. # -----------------------------------------------------------------------------
  9. # *** General configuration
  10. # -----------------------------------------------------------------------------
  11. # Component configuration
  12. # (for syntax of the $config variable, see librunscript.sh)
  13. config="nemo lim3 xios:detached"
  14. # Experiment name (exactly 4 letters!)
  15. exp_name=[[[MOD:GENERAL:EXP_NAME]]]
  16. # Simulation start and end date. Use any (reasonable) syntax you want.
  17. run_start_date="[[[MOD:GENERAL:RUN_START_DATE]]]"
  18. run_end_date="[[[MOD:GENERAL:RUN_END_DATE]]]"
  19. # Set $force_run_from_scratch to 'true' if you want to force this run to start
  20. # from scratch, possibly ignoring any restart files present in the run
  21. # directory. Leave set to 'false' otherwise.
  22. # NOTE: If set to 'true' the run directory $run_dir is cleaned!
  23. force_run_from_scratch=[[[MOD:GENERAL:FORCE_RUN_FROM_SCRATCH]]]
  24. # Resolution
  25. nem_grid=[[[MOD:NEM:GRID]]]
  26. # Restart frequency. Use any (reasonable) number and time unit you want.
  27. # For runs without restart, leave this variable empty
  28. rst_freq="[[[MOD:GENERAL:RST_FREQ]]]"
  29. # Number of restart legs to be run in one go
  30. run_num_legs=[[[MOD:GENERAL:RUN_NUM_LEGS]]]
  31. # Directories
  32. start_dir=${PWD}
  33. ctrl_file_dir=${start_dir}/ctrl
  34. output_control_files_dir=${start_dir}/[[[MOD:GENERAL:OUTPUT_CONTROL_FILES_DIR]]]
  35. # Architecture
  36. build_arch=[[[PLT:ACTIVE:BUILD_ARCH]]]
  37. # This file is used to store information about restarts
  38. ece_info_file="ece.info"
  39. # -----------------------------------------------------------------------------
  40. # *** Read platform dependent configuration
  41. # -----------------------------------------------------------------------------
  42. source ./ecconf.cfg
  43. configure
  44. # -----------------------------------------------------------------------------
  45. # *** Time step settings
  46. # -----------------------------------------------------------------------------
  47. case "${nem_grid}" in
  48. ORCA1L*) nem_time_step_sec=2700; lim_time_step_sec=2700 ;;
  49. ORCA025L*) nem_time_step_sec=900 ; lim_time_step_sec=900 ;;
  50. *) error "Can't set time steps for unknown horizontal grid: ${nem_grid}"
  51. ;;
  52. esac
  53. # -----------------------------------------------------------------------------
  54. # *** NEMO/LIM configuration
  55. # -----------------------------------------------------------------------------
  56. # This is only needed if the experiment is started from an existing set of NEMO
  57. # restart files
  58. nem_restart_file_path=${start_dir}/nemo-rst
  59. nem_restart_offset=0
  60. nem_res_hor=$(echo ${nem_grid} | sed 's:ORCA\([0-9]\+\)L[0-9]\+:\1:')
  61. # Pick correct NEMO configuration, which is one of:
  62. # NEMO standalone, NEMO+PISCES-standaone, PISCES-offline
  63. nem_config_name=${nem_grid}_LIM3_standalone
  64. has_config pisces && nem_config_name=${nem_grid}_LIM3_PISCES_standalone
  65. has_config pisces:offline && nem_config_name=${nem_grid}_OFF_PISCES
  66. nem_exe_file=${ecearth_src_dir}/nemo-3.6/CONFIG/${nem_config_name}/BLD/bin/nemo.exe
  67. nem_numproc=[[[MOD:NEM:NUMPROC]]]
  68. # -----------------------------------------------------------------------------
  69. # *** XIOS configuration
  70. # -----------------------------------------------------------------------------
  71. xio_exe_file=${ecearth_src_dir}/xios-2.5/bin/xios_server.exe
  72. xio_numproc=[[[MOD:XIO:NUMPROC]]]
  73. # -----------------------------------------------------------------------------
  74. # *** Extra initial conditions saved during the run
  75. # -----------------------------------------------------------------------------
  76. if has_config save_ic
  77. then
  78. source ./libsave_ic.sh
  79. declare -a save_ic_date save_ic_date1 save_ic_sec save_ic_day save_ic_ppt_file save_ic_nemo_ts
  80. fi
  81. # =============================================================================
  82. # *** END of User configuration
  83. # =============================================================================
  84. # =============================================================================
  85. # *** This is where the code begins ...
  86. # =============================================================================
  87. # -----------------------------------------------------------------------------
  88. # *** Create the run dir if necessary and go there
  89. # Everything is done from here.
  90. # -----------------------------------------------------------------------------
  91. if [ ! -d ${run_dir} ]
  92. then
  93. mkdir -p ${run_dir}
  94. fi
  95. cd ${run_dir}
  96. # -----------------------------------------------------------------------------
  97. # *** Determine the time span of this run and whether it's a restart leg
  98. # -----------------------------------------------------------------------------
  99. # Regularise the format of the start and end date of the simulation
  100. run_start_date=$(absolute_date_noleap "${run_start_date}")
  101. run_end_date=$(absolute_date_noleap "${run_end_date}")
  102. # Loop over the number of legs
  103. for (( ; run_num_legs>0 ; run_num_legs-- ))
  104. do
  105. # Check for restart information file and set the current leg start date
  106. # Ignore restart information file if force_run_from_scratch is true
  107. if ${force_run_from_scratch} || ! [ -r ${ece_info_file} ]
  108. then
  109. leg_is_restart=false
  110. leg_start_date=${run_start_date}
  111. leg_number=1
  112. else
  113. leg_is_restart=true
  114. . ./${ece_info_file}
  115. leg_start_date=${leg_end_date}
  116. leg_number=$((leg_number+1))
  117. fi
  118. # Compute the end date of the current leg
  119. if [ -n "${rst_freq}" ]
  120. then
  121. leg_end_date=$(absolute_date_noleap "${leg_start_date} + ${rst_freq}")
  122. else
  123. leg_end_date=${run_end_date}
  124. fi
  125. if [ $(date -d "${leg_end_date}" +%s) -gt $(date -d "${run_end_date}" +%s) ]
  126. then
  127. leg_end_date=${run_end_date}
  128. fi
  129. # Some time variables needed later
  130. leg_length_sec=$(( $(date -d "${leg_end_date}" +%s) - $(date -d "${leg_start_date}" +%s) ))
  131. leg_start_sec=$(( $(date -d "${leg_start_date}" +%s) - $(date -d "${run_start_date}" +%s) ))
  132. leg_end_sec=$(( $(date -d "${leg_end_date}" +%s) - $(date -d "${run_start_date}" +%s) ))
  133. leg_start_date_yyyymmdd=$(date -u -d "${leg_start_date}" +%Y%m%d)
  134. leg_start_date_yyyy=$(date -u -d "${leg_start_date}" +%Y)
  135. leg_end_date_yyyy=$(date -u -d "${leg_end_date}" +%Y)
  136. # Correct for leap days because NEMO standalone uses no-leap calendar
  137. leg_length_sec=$(( leg_length_sec - $(leap_days "${leg_start_date}" "${leg_end_date}")*24*3600 ))
  138. leg_start_sec=$(( leg_start_sec - $(leap_days "${run_start_date}" "${leg_start_date}")*24*3600 ))
  139. leg_end_sec=$(( leg_end_sec - $(leap_days "${run_start_date}" "${leg_end_date}")*24*3600 ))
  140. # Check whether there's actually time left to simulate - exit otherwise
  141. if [ ${leg_length_sec} -le 0 ]
  142. then
  143. info "Leg start date equal to or after end of simulation."
  144. info "Nothing left to do. Exiting."
  145. exit 0
  146. fi
  147. # Initial conditions saved during the run
  148. do_save_ic=false
  149. has_config save_ic && save_ic_get_config
  150. # if you do not use an option with save_ic, you must define 'do_save_ic' and
  151. # 'save_ic_date_offset' here or in ../libsave_ic.sh/save_ic_get_config()
  152. ${do_save_ic} && save_ic_define_vars
  153. # -------------------------------------------------------------------------
  154. # *** Prepare the run directory for a run from scratch
  155. # -------------------------------------------------------------------------
  156. if ! $leg_is_restart
  157. then
  158. # ---------------------------------------------------------------------
  159. # *** Check if run dir is empty. If not, and if we are allowed to do so
  160. # by ${force_run_from_scratch}, remove everything
  161. # ---------------------------------------------------------------------
  162. if $(ls * >& /dev/null)
  163. then
  164. if ${force_run_from_scratch}
  165. then
  166. rm -fr ${run_dir}/*
  167. else
  168. error "Run directory not empty and \$force_run_from_scratch not set."
  169. fi
  170. fi
  171. # ---------------------------------------------------------------------
  172. # *** Copy executables of model components
  173. # *** Additionally, create symlinks to the original place for reference
  174. # ---------------------------------------------------------------------
  175. cp ${nem_exe_file} .
  176. ln -s ${nem_exe_file} $(basename ${nem_exe_file}).lnk
  177. cp ${xio_exe_file} .
  178. ln -s ${xio_exe_file} $(basename ${xio_exe_file}).lnk
  179. # ---------------------------------------------------------------------
  180. # *** Files needed for NEMO (linked)
  181. # ---------------------------------------------------------------------
  182. # Link initialisation files for matching ORCA grid
  183. for f in \
  184. bathy_meter.nc coordinates.nc \
  185. ahmcoef.nc \
  186. K1rowdrg.nc M2rowdrg.nc mask_itf.nc \
  187. decay_scale_bot.nc decay_scale_cri.nc \
  188. mixing_power_bot.nc mixing_power_cri.nc mixing_power_pyc.nc \
  189. runoff_depth.nc subbasins.nc
  190. do
  191. [ -f ${ini_data_dir}/nemo/initial/${nem_grid}/$f ] && ln -s ${ini_data_dir}/nemo/initial/${nem_grid}/$f
  192. done
  193. # Link geothermal heating file (independent of grid) and matching weight file
  194. ln -s ${ini_data_dir}/nemo/initial/Goutorbe_ghflux.nc
  195. ln -s ${ini_data_dir}/nemo/initial/weights_Goutorbe1_2_orca${nem_res_hor}_bilinear.nc
  196. # Link the salinity climatology file (needed for diagnostics)
  197. ln -s ${ini_data_dir}/nemo/climatology/${nem_grid}/sali_ref_clim_monthly.nc
  198. # Link either restart files or climatology files for the initial state
  199. if $(has_config nemo:start_from_restart)
  200. then
  201. # When linking restart files, we accept three options:
  202. # (1) Merged files for ocean and ice, i.e.
  203. # restart_oce.nc and restart_ice.nc
  204. # (2) One-file-per-MPI-rank, i.e.
  205. # restart_oce_????.nc and restart_ice_????.nc
  206. # No check is done whether the number of restart files agrees
  207. # with the number of MPI ranks for NEMO!
  208. # (3) One-file-per-MPI-rank with a prefix, i.e.
  209. # <exp_name>_<time_step>_restart_oce_????.nc (similar for the ice)
  210. # The prefix is ignored.
  211. # The code assumes that one of the options can be applied! If more
  212. # options are applicable, the first is chosen. If none of the
  213. # options apply, NEMO will crash with missing restart file.
  214. if ls -U ${nem_restart_file_path}/restart_[oi]ce.nc > /dev/null 2>&1
  215. then
  216. ln -s ${nem_restart_file_path}/restart_[oi]ce.nc ./
  217. elif ls -U ${nem_restart_file_path}/restart_[oi]ce_????.nc > /dev/null 2>&1
  218. then
  219. ln -s ${nem_restart_file_path}/restart_[oi]ce_????.nc ./
  220. else
  221. for f in ${nem_restart_file_path}/????_????????_restart_[oi]ce_????.nc
  222. do
  223. ln -s $f $(echo $f | sed 's/.*_\(restart_[oi]ce_....\.nc\)/\1/')
  224. done
  225. fi
  226. else
  227. # Temperature and salinity files for initialisation
  228. ln -s ${ini_data_dir}/nemo/climatology/absolute_salinity_WOA13_decav_Reg1L75_clim.nc
  229. ln -s ${ini_data_dir}/nemo/climatology/conservative_temperature_WOA13_decav_Reg1L75_clim.nc
  230. ln -s ${ini_data_dir}/nemo/climatology/weights_WOA13d1_2_orca${nem_res_hor}_bilinear.nc
  231. fi
  232. # Grid dependent runoff files
  233. case ${nem_grid} in
  234. ORCA1*) ln -s ${ini_data_dir}/nemo/climatology/runoff-icb_DaiTrenberth_Depoorter_ORCA1_JD.nc ;;
  235. ORCA025*) ln -s ${ini_data_dir}/nemo/climatology/ORCA_R025_runoff_v1.1.nc ;;
  236. esac
  237. #for ocean_nudging
  238. if $(has_config nemo:ocenudg) ; then
  239. ln -fs ${ini_data_dir}/nemo/oce_nudg/resto.nc ./
  240. fi
  241. # Write fake file for previous fresh water budget adjustment (nn_fwb==2 in namelist)
  242. echo " 0 0.0000000000000000E+00 0.0000000000000000E+00" > EMPave_old.dat
  243. # Link NEMO CoreII forcing files (only set supported out-of-the-box)
  244. for v in u_10 v_10 t_10 q_10 ncar_precip ncar_rad
  245. do
  246. f="${ini_data_dir}/nemo/forcing/CoreII/${v}.15JUNE2009_fill.nc"
  247. [ -f "$f" ] && ln -s $f
  248. done
  249. # Link CoreII weight files for corresponding grid
  250. ln -s ${ini_data_dir}/nemo/forcing/CoreII/weights_coreII_2_orca${nem_res_hor}_bilinear.nc
  251. ln -s ${ini_data_dir}/nemo/forcing/CoreII/weights_coreII_2_orca${nem_res_hor}_bicubic.nc
  252. # XIOS files
  253. . ${ctrl_file_dir}/iodef.xml.sh > iodef.xml
  254. ln -s ${ctrl_file_dir}/context_nemo.xml
  255. ln -s ${ctrl_file_dir}/domain_def_nemo.xml
  256. ln -s ${ctrl_file_dir}/axis_def_nemo.xml
  257. ln -s ${ctrl_file_dir}/grids_def_nemo.xml
  258. ln -s ${ctrl_file_dir}/field_def_nemo-lim.xml
  259. ln -s ${ctrl_file_dir}/field_def_nemo-opa.xml
  260. ln -s ${ctrl_file_dir}/field_def_nemo-pisces.xml
  261. ln -s ${ctrl_file_dir}/field_def_nemo-inerttrc.xml
  262. ln -s ${output_control_files_dir}/file_def_nemo-lim3.xml file_def_nemo-lim.xml
  263. ln -s ${output_control_files_dir}/file_def_nemo-opa.xml
  264. ln -s ${output_control_files_dir}/file_def_nemo-pisces.xml
  265. if [ -f ${ini_data_dir}/xios/ORCA${nem_res_hor}/coordinates_xios.nc ]
  266. then
  267. cp ${ini_data_dir}/xios/ORCA${nem_res_hor}/coordinates_xios.nc ./
  268. else
  269. info "File 'coordinates_xios.nc' not found. NEMO can not be run with land domain removal!"
  270. fi
  271. # ---------------------------------------------------------------------
  272. # *** Files needed for TOP/PISCES (linked)
  273. # ---------------------------------------------------------------------
  274. if $(has_config pisces)
  275. then
  276. ln -fs ${ini_data_dir}/pisces/dust_INCA_ORCA_R1.nc
  277. ln -fs ${ini_data_dir}/pisces/ndeposition_Duce_ORCA_R1.nc
  278. ln -fs ${ini_data_dir}/pisces/pmarge_etopo_ORCA_R1.nc
  279. ln -fs ${ini_data_dir}/pisces/river_global_news_ORCA_R1.nc
  280. ln -fs ${ini_data_dir}/pisces/Solubility_T62_Mahowald_ORCA_R1.nc
  281. ln -fs ${ini_data_dir}/pisces/par_fraction_gewex_clim90s00s_ORCA_R1.nc
  282. ln -fs ${ini_data_dir}/pisces/DIC_GLODAP_annual_ORCA_R1.nc
  283. ln -fs ${ini_data_dir}/pisces/Alkalini_GLODAP_annual_ORCA_R1.nc
  284. ln -fs ${ini_data_dir}/pisces/O2_WOA2009_monthly_ORCA_R1.nc
  285. ln -fs ${ini_data_dir}/pisces/PO4_WOA2009_monthly_ORCA_R1.nc
  286. ln -fs ${ini_data_dir}/pisces/Si_WOA2009_monthly_ORCA_R1.nc
  287. ln -fs ${ini_data_dir}/pisces/DOC_PISCES_monthly_ORCA_R1.nc
  288. ln -fs ${ini_data_dir}/pisces/Fer_PISCES_monthly_ORCA_R1.nc
  289. ln -fs ${ini_data_dir}/pisces/NO3_WOA2009_monthly_ORCA_R1.nc
  290. fi
  291. else # i.e. $leg_is_restart == true
  292. # ---------------------------------------------------------------------
  293. # *** Remove all leftover output files from previous legs
  294. # ---------------------------------------------------------------------
  295. # NEMO output files
  296. rm -f ${exp_name}_??_????????_????????_{grid_U,grid_V,grid_W,grid_T,icemod,SBC,scalar,SBC_scalar,diad_T}.nc
  297. restart_dir="restart/nemo/$(printf %03d $((leg_number)))"
  298. [ -f ${restart_dir}/EMPave_old.dat ] && cp ${restart_dir}/EMPave_old.dat .
  299. fi # ! $leg_is_restart
  300. #--------------------------------------------------------------------------
  301. # *** Surface restoring and ocean nudging options
  302. #--------------------------------------------------------------------------
  303. #for ocean_nudging
  304. if $(has_config nemo:ocenudg) ; then
  305. ln -fs ${ini_data_dir}/nemo/oce_nudg/temp_sal_*.nc ./
  306. fi
  307. #for surface restoring
  308. if $(has_config nemo:surfresto) ; then
  309. ln -fs ${ini_data_dir}/nemo/surface_restoring/sss_restore_data*.nc ./
  310. ln -fs ${ini_data_dir}/nemo/surface_restoring/sst_restore_data*.nc ./
  311. ln -fs ${ini_data_dir}/nemo/surface_restoring/mask_restore*.nc ./
  312. fi
  313. # -------------------------------------------------------------------------
  314. # *** Remove land grid-points
  315. # -------------------------------------------------------------------------
  316. if $(has_config nemo:elpin)
  317. then
  318. if [ ! -f coordinates_xios.nc ]
  319. then
  320. error "ELpIN requested, but file 'coordinates_xios.nc' was not found"
  321. fi
  322. jpns=($(${ecearth_src_dir}/util/ELPiN/ELPiNv2.cmd ${nem_numproc}))
  323. info "nemo domain decompostion from ELpIN: ${jpns[@]}"
  324. nem_numproc=${jpns[0]}
  325. nem_jpni=${jpns[1]}
  326. nem_jpnj=${jpns[2]}
  327. else
  328. info "nemo original domain decomposition (not using ELPiN)"
  329. fi
  330. # -------------------------------------------------------------------------
  331. # *** Initial conditions saved during the run
  332. # -------------------------------------------------------------------------
  333. ${do_save_ic} && save_ic_prepare_output
  334. # -------------------------------------------------------------------------
  335. # *** Create some control files
  336. # -------------------------------------------------------------------------
  337. # NEMO and LIM namelists
  338. . ${ctrl_file_dir}/namelist.nemo.ref.sh > namelist_ref
  339. . ${ctrl_file_dir}/namelist.nemo-${nem_grid}-standalone.cfg.sh > namelist_cfg
  340. . ${ctrl_file_dir}/namelist.lim3.ref.sh > namelist_ice_ref
  341. . ${ctrl_file_dir}/namelist.lim3-${nem_grid}.cfg.sh > namelist_ice_cfg
  342. # NEMO/TOP+PISCES namelists
  343. has_config pisces && . ${ctrl_file_dir}/namelist.nemo.top.ref.sh > namelist_top_ref
  344. has_config pisces && . ${ctrl_file_dir}/namelist.nemo.top.cfg.sh > namelist_top_cfg
  345. has_config pisces && . ${ctrl_file_dir}/namelist.nemo.pisces.ref.sh > namelist_pisces_ref
  346. has_config pisces && . ${ctrl_file_dir}/namelist.nemo.pisces.cfg.sh > namelist_pisces_cfg
  347. # -------------------------------------------------------------------------
  348. # *** Link the appropriate NEMO restart files of the previous leg
  349. # -------------------------------------------------------------------------
  350. if $leg_is_restart
  351. then
  352. ns=$(printf %08d $(( leg_start_sec / nem_time_step_sec - nem_restart_offset )))
  353. for (( n=0 ; n<nem_numproc ; n++ ))
  354. do
  355. np=$(printf %04d ${n})
  356. ln -fs ${exp_name}_${ns}_restart_oce_${np}.nc restart_oce_${np}.nc
  357. ln -fs ${exp_name}_${ns}_restart_ice_${np}.nc restart_ice_${np}.nc
  358. has_config pisces && \
  359. ln -fs ${exp_name}_${ns}_restart_trc_${np}.nc restart_trc_${np}.nc
  360. done
  361. # Make sure there are no global restart files
  362. # If links are found, they will be removed. We are cautious and do
  363. # _not_ remove real files! However, if real global restart files are
  364. # present, NEMO/LIM will stop because time stamps will not match.
  365. [ -h restart_oce.nc ] && rm restart_oce.nc
  366. [ -h restart_ice.nc ] && rm restart_ice.nc
  367. fi
  368. # -------------------------------------------------------------------------
  369. # *** Start the run
  370. # -------------------------------------------------------------------------
  371. # Use the launch function from the platform configuration file
  372. t1=$(date +%s)
  373. launch \
  374. ${xio_numproc} ${xio_exe_file} -- \
  375. ${nem_numproc} ${nem_exe_file}
  376. t2=$(date +%s)
  377. tr=$(date -d "0 -$t1 sec + $t2 sec" +%T)
  378. # -------------------------------------------------------------------------
  379. # *** Check for signs of success
  380. # Note the tests provide no guarantee that things went fine! They are
  381. # just based on the IFS and NEMO log files. More tests (e.g. checking
  382. # restart files) could be implemented.
  383. # -------------------------------------------------------------------------
  384. # Check for NEMO success
  385. if [ -f ocean.output ]
  386. then
  387. if [ "$(sed -n '/New day/h; ${g;s:.*\([0-9/]\{10\}\).*:\1:;p;}' ocean.output)" == "$(date -u -d "$(absolute_date_noleap "${leg_end_date} - 1 day")" +%Y/%m/%d)" ]
  388. then
  389. info "Leg successfully completed according to NEMO log file 'ocean.output'."
  390. else
  391. error "Leg not completed according to NEMO log file 'ocean.output'."
  392. fi
  393. else
  394. error "NEMO log file 'ocean.output' not found after run."
  395. fi
  396. # -------------------------------------------------------------------------
  397. # *** Post-process initial conditions saved during the run if requested
  398. # -------------------------------------------------------------------------
  399. ${do_save_ic} && save_ic_postproc
  400. # -------------------------------------------------------------------------
  401. # *** Move NEMO output files to archive directory
  402. # -------------------------------------------------------------------------
  403. outdir="output/nemo/$(printf %03d $((leg_number)))"
  404. mkdir -p ${outdir}
  405. for v in grid_U grid_V grid_W grid_T icemod SBC scalar SBC_scalar diad_T \
  406. grid_T_2D grid_U_2D grid_V_2D grid_W_2D grid_T_3D grid_U_3D grid_V_3D grid_W_3D \
  407. grid_1point grid_T_3D_ncatice vert_sum \
  408. grid_ptr_W_3basin_3D grid_ptr_T_3basin_2D grid_ptr_T_2D \
  409. zoom_700_sum zoom_300_sum zoom_2000_sum
  410. do
  411. for f in ${exp_name}_*_????????_????????_*${v}.nc
  412. do
  413. test -f $f && mv $f $outdir/
  414. done
  415. done
  416. # -------------------------------------------------------------------------
  417. # *** Move NEMO restart files to archive directory
  418. # -------------------------------------------------------------------------
  419. if $leg_is_restart
  420. then
  421. outdir="restart/nemo/$(printf %03d $((leg_number)))"
  422. mkdir -p ${outdir}
  423. ns=$(printf %08d $(( leg_start_sec / nem_time_step_sec - nem_restart_offset )))
  424. for f in oce ice trc
  425. do
  426. test -f ${exp_name}_${ns}_restart_${f}_0000.nc && \
  427. mv ${exp_name}_${ns}_restart_${f}_????.nc ${outdir}
  428. done
  429. cp EMPave_old.dat ${outdir}/EMPave_old.dat
  430. fi
  431. cp EMPave.dat EMPave_old.dat
  432. # -------------------------------------------------------------------------
  433. # *** Move log files to archive directory
  434. # -------------------------------------------------------------------------
  435. outdir="log/$(printf %03d $((leg_number)))"
  436. mkdir -p ${outdir}
  437. for f in \
  438. ocean.output time.step solver.stat
  439. do
  440. test -f ${f} && mv ${f} ${outdir}
  441. done
  442. # -------------------------------------------------------------------------
  443. # *** Write the restart control file
  444. # -------------------------------------------------------------------------
  445. # Compute CPMIP performance
  446. sypd="$(cpmip_sypd $leg_length_sec $(($t2 - $t1)))"
  447. chpsy="$(cpmip_chpsy $leg_length_sec $(($t2 - $t1)) $(($nem_numproc + $xio_numproc)))"
  448. echo "#" | tee -a ${ece_info_file}
  449. echo "# Finished leg at `date '+%F %T'` after ${tr} (hh:mm:ss)" \
  450. | tee -a ${ece_info_file}
  451. echo "# CPMIP performance: $sypd SYPD $chpsy CHPSY"| tee -a ${ece_info_file}
  452. echo "leg_number=${leg_number}" | tee -a ${ece_info_file}
  453. echo "leg_start_date=\"${leg_start_date}\"" | tee -a ${ece_info_file}
  454. echo "leg_end_date=\"${leg_end_date}\"" | tee -a ${ece_info_file}
  455. # Need to reset force_run_from_scratch in order to avoid destroying the next leg
  456. force_run_from_scratch=false
  457. done # loop over legs
  458. # -----------------------------------------------------------------------------
  459. # *** Platform dependent finalising of the run
  460. # -----------------------------------------------------------------------------
  461. finalise
  462. exit 0