EC00.sh 78 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957
  1. #!/bin/bash
  2. #
  3. # Job options
  4. #
  5. #SBATCH --job-name=EC00
  6. #SBATCH --time=12:00:00
  7. #SBATCH --account=ecearth
  8. #
  9. #SBATCH --nodes=4
  10. #SBATCH --exclusive
  11. #SBATCH --ntasks-per-node=102
  12. #SBATCH --partition=batch
  13. #
  14. set -ueo pipefail
  15. #
  16. LOCAL_NODES=4
  17. LOCAL_TASKS=408
  18. #
  19. stdout_file=${SLURM_SUBMIT_DIR-$PWD}/${SLURM_JOB_NAME-"local"}_${SLURM_JOB_ID-"id"}.log
  20. exec > ${stdout_file}
  21. echo "------------------ Job Info --------------------"
  22. echo "jobid : ${SLURM_JOB_ID-"id"}"
  23. echo "jobname : ${SLURM_JOB_NAME-"local"}"
  24. echo "nodename : ${SLURMD_NODENAME-"local"}"
  25. echo "# nodes : ${SLURM_JOB_NUM_NODES-$LOCAL_NODES}"
  26. echo "# tasks : ${SLURM_NTASKS-$LOCAL_TASKS}"
  27. echo "submit dir : ${SLURM_SUBMIT_DIR-$PWD}"
  28. set -ue
  29. #
  30. # Cluster variables
  31. #
  32. NB_CORES_PER_NODES=128
  33. MAX_CORES_PER_NODES=100
  34. LIST_CORES_SOCKET=`seq -s',' 0 $((NB_CORES_PER_NODES-1))`
  35. #
  36. # Directories
  37. start_dir=${SLURM_SUBMIT_DIR-$PWD}
  38. # librunscript defines some helper functions
  39. . ${start_dir}/librunscript.sh
  40. # =============================================================================
  41. # *** BEGIN User configuration
  42. # =============================================================================
  43. # -----------------------------------------------------------------------------
  44. # *** General configuration
  45. # -----------------------------------------------------------------------------
  46. # Component configuration (for syntax of the $config variable, see librunscript.sh)
  47. #
  48. # Currently maintained:
  49. # config="ifs amip oasis" # "GCM forced-SST" : IFS + AMIP
  50. # config="ifs amip oasis lpjg:fdbck" # "Veg" : forced-GCM + LPJ-Guess
  51. # config="ifs amip oasis tm5:chem,o3fb,ch4fb,aerfb" # "AerChem" : forced-GCM + TM5
  52. #
  53. # config="ifs nemo lim3 rnfmapper xios:detached oasis" # "GCM" : IFS+NEMO
  54. # config="ifs nemo lim3 rnfmapper xios:detached oasis lpjg:fdbck" # "Veg" : GCM+LPJ-Guess
  55. # config="ifs nemo lim3 rnfmapper xios:detached oasis pisces lpjg:fdbck tm5:co2,co2fb" # "C-cycle" : GCM+LPJG+TM5
  56. # config="ifs nemo lim3 rnfmapper xios:detached oasis tm5:chem,o3fb,ch4fb,aerfb" # "AerChem" : GCM+TM5
  57. #
  58. # config="ifs nemo pisces lim3 rnfmapper xios:detached oasis" # "GCM" : IFS+NEMO+PISCES
  59. #
  60. config="ifs nemo lim3 rnfmapper xios:detached oasis"
  61. # minimum sanity
  62. has_config amip nemo && error "Cannot have both nemo and amip in config!!"
  63. ! has_config ifs && error "The ESM script requires ifs in config"
  64. # Experiment name (exactly 4 letters!)
  65. export exp_name=EC00
  66. # Simulation start and end date. Use any (reasonable) syntax you want.
  67. run_start_date="1850-01-01"
  68. run_end_date="${run_start_date} + 10 years"
  69. # Set $force_run_from_scratch to 'true' if you want to force this run to start
  70. # from scratch, possibly ignoring any restart files present in the run
  71. # directory. Leave set to 'false' otherwise.
  72. # NOTE: If set to 'true' the run directory $run_dir is cleaned!
  73. force_run_from_scratch=true
  74. special_restart=false
  75. special_restart_from=ECE3
  76. special_restart_date="1995-01-01"
  77. # Resolution (TM5 resolution is set at compilation)
  78. ifs_grid=T255L91
  79. nem_grid=ORCA1L75
  80. # Restart frequency. Use any (reasonable) number and time unit you want.
  81. # For runs without restart, leave this variable empty
  82. rst_freq="1 year"
  83. # Number of restart legs to be run in one go
  84. run_num_legs=2
  85. # Coupling frequencies
  86. has_config ifs tm5 && cpl_freq_atm_ctm_hrs=6
  87. has_config ifs lpjg && cpl_freq_atm_lpjg_hrs=24
  88. # Don't change the coupling frequency because UPDCLIE (where SST and SIC
  89. # are updated) is called every 24 hours (hardcoded in ifs-36r4/src/ifs/utility/updtim.F90)
  90. has_config amip && cpl_freq_amip_sec=86400
  91. # Directories
  92. #start_dir=${PWD}
  93. ctrl_file_dir=${start_dir}/ctrl
  94. output_control_files_dir=${start_dir}/ctrl
  95. # Architecture
  96. build_arch=ecconf
  97. use_machinefile=%USE_MACHINEFILE%
  98. # This file is used to store information about restarts
  99. ece_info_file="ece.info"
  100. # -----------------------------------------------------------------------------
  101. # *** Read platform dependent configuration
  102. # -----------------------------------------------------------------------------
  103. . ${start_dir}/ecconf.cfg
  104. configure
  105. # -----------------------------------------------------------------------------
  106. # *** Time step settings
  107. # -----------------------------------------------------------------------------
  108. if has_config ifs
  109. then
  110. case "${ifs_grid}" in
  111. T159L*) ifs_time_step_sec=3600 ;;
  112. T255L*) ifs_time_step_sec=2700 ;;
  113. T511L*) ifs_time_step_sec=900 ;;
  114. *) error "Can't set time steps for unknown horizontal grid: ${ifs_grid}"
  115. ;;
  116. esac
  117. fi
  118. if has_config nemo
  119. then
  120. case "${nem_grid}" in
  121. ORCA1L*) nem_time_step_sec=2700; lim_time_step_sec=2700 ;;
  122. ORCA025L*) nem_time_step_sec=900 ; lim_time_step_sec=900 ;;
  123. *) error "Can't set time steps for unknown horizontal grid: ${nem_grid}"
  124. ;;
  125. esac
  126. fi
  127. if has_config ifs nemo
  128. then
  129. case "${ifs_grid}--${nem_grid}" in
  130. T159L*--ORCA1L*)
  131. ifs_time_step_sec=3600; nem_time_step_sec=2700; lim_time_step_sec=2700; cpl_freq_atm_oce_sec=10800
  132. ;;
  133. T255L*--ORCA1L*)
  134. ifs_time_step_sec=2700; nem_time_step_sec=2700; lim_time_step_sec=2700; cpl_freq_atm_oce_sec=2700
  135. ;;
  136. T511L*--ORCA025L*)
  137. ifs_time_step_sec=900 ; nem_time_step_sec=900 ; lim_time_step_sec=900 ; cpl_freq_atm_oce_sec=2700
  138. ;;
  139. *) error "Can't set time steps for unknown combination of horizontal grids: ${ifs_grid}-${nem_grid}"
  140. ;;
  141. esac
  142. fi
  143. # -----------------------------------------------------------------------------
  144. # *** IFS configuration
  145. # -----------------------------------------------------------------------------
  146. ifs_version=36r4
  147. ifs_di_freq=$(( 24 * 3600 / ifs_time_step_sec ))
  148. ifs_ddh_freq=$(( 120 * 3600 / ifs_time_step_sec ))
  149. export ifs_res_hor=$(echo ${ifs_grid} | sed 's:T\([0-9]\+\)L\([0-9]\+\):\1:')
  150. ifs_res_ver=$(echo ${ifs_grid} | sed 's:T\([0-9]\+\)L\([0-9]\+\):\2:')
  151. ifs_numproc=320
  152. ifs_exe_file=${ecearth_src_dir}/ifs-${ifs_version}/bin/ifsmaster-${build_arch}
  153. ifs_lastout=false
  154. # USE FORCING FROM CMIP5 (SOLAR, GHG, AEROSOL, O3)
  155. ifs_cmip5=TRUE
  156. # SWITCH FOR RCP AND HISTORICAL RUNS FOR CMIP5 (0=HISTO 1=RCP 3-PD, 2=RCP 4.5, 3=RCP 6.0, 4=RCP 8.5)
  157. ifs_cmip5_rcp=0
  158. # 1PCTCO2 and A4XCO2 should operate together with ifs_cmip_fixyear years, ie., the baseline GHGs level will use that for year ifs_cmip_fixyear
  159. export ifs_cmip_fixyear=0
  160. export ifs_cmip_fixyear_ch4=0
  161. # Repeat trap from ifs/suecrad.F90 for early catch
  162. if ! has_config tm5:ch4fb && (( $ifs_cmip_fixyear != $ifs_cmip_fixyear_ch4 ))
  163. then
  164. error 'CH4 in IFS is not provided by TM5, NCMIPFIXYR_CH4 should be set equal to NCMIPFIXYR'
  165. fi
  166. # USE FORCING FROM CMIP6 (HAS PRIORITY OVER LCMIP5)
  167. ifs_cmip6=TRUE
  168. # MAC-SP anthropogenic simple plume model (parameterization of anthropogenic aerosol optical properties)
  169. ifs_mac2sp=TRUE
  170. # Use CMIP6 prescribed preindustrial aerosol
  171. ifs_cmip6piaer=TRUE
  172. # !! scenario 'historical' max 2014
  173. # 1850 (o3_pi)
  174. # 1850 --> 2014 (o3_histo)
  175. # !! other scenarios (> 2014), default: SSP3-7.0
  176. # SSP1-1.9, SSP1-2.6, SSP1-2.6-Ext, SSP2-4.5, SSP3-7.0, SSP3-LowNTCF, SSP4-3.4, SSP5-3.4-OS, SSP4-6.0, SSP5-3.4-OS-Ext, SSP5-8.5, SSP5-8.5-Ext
  177. ifs_cmip6_scenario=historical
  178. # Enable optional COVID-19 scenarios, will enforce ifs_cmip6_scenario=SSP2-4.5
  179. ifs_covid19=FALSE
  180. # Choose one scenario : Base TwoYearBlip ModerateGreen StrongGreen FossilFuel
  181. ifs_covid19scen=Base
  182. # Basic sanity checks
  183. if [ ${ifs_covid19} == TRUE ] ; then
  184. [ ${ifs_cmip6_scenario} != SSP2-4.5 ] && echo "*WARNING* with ifs_covid19=TRUE IFS uses ifs_cmip6_scenario=SSP2-4.5 not ${ifs_cmip6_scenario}"
  185. has_config any lpjg pisces tm5 && error "ifs_covid19=TRUE is not supported with LPJ-GUESS, PISCES nor TM5"
  186. fi
  187. # Read CMIP6 stratospheric aerosol data file, vertically integrated version
  188. lcmip6_strataer_simp=FALSE
  189. lcmip6_strataer_full=TRUE
  190. lcmip6_strataer_bckgd=FALSE
  191. # for an abrupt increase of CO2 to 4x the starting year (ifs_cmip_fixyear)
  192. export ifs_A4xCO2=FALSE
  193. # for an 1% per year increase of CO2 until reaching 4x the starting year (ifs_cmip_fixyear)
  194. export ifs_1PCTCO2=FALSE
  195. export bgc_1PCTCO2=FALSE
  196. # Time-varying orbital forcing (Qiong Zhang, SU-2013-09)
  197. # https://dev.ec-earth.org/projects/ecearth3/wiki/Orbital_forcing_in_EC-Earth_3
  198. #
  199. # ifs_orb_switch=false, no orbital calculations applied
  200. # ifs_orb_switch=true, use orbital calculations according to ifs_orb_mode
  201. # ifs_orb_mode="fixed_year", or "variable_year", or "fixed_parameters"
  202. # fixed_year: calculate the orbital parameters at ifs_orb_iyear, e.g.,1850
  203. # variable_year: calculate orbital parameters annually start from ifs_orb_iyear
  204. # fixed_parameters: prescribe orbital parameters for given year
  205. case "${ifs_grid}" in
  206. T159*) ifs_orb_switch=true ;;
  207. *) ifs_orb_switch=false ;;
  208. esac
  209. ifs_orb_mode="variable_year"
  210. ifs_orb_iyear=$(date -u -d "${run_start_date}" +%Y)
  211. # Relaxation of soil moisture (Wilhelm May, LU; October 2017)
  212. #
  213. # LRXSM: Parameter indicating the levels to be nudged
  214. #
  215. # LRXSM = 0: no nudging
  216. # LRXSM = 12: 4xdaily data and 3 levels (excluding level 1)
  217. # LRXSM = 13: 4xdaily data and 4 levels
  218. #
  219. # LRXSMTx: time scale of the relaxation for level X (in hours)
  220. #
  221. # LRXSMTx = 0: actual values relpaced by external ones
  222. # LRXSMTx = 24: 1 day
  223. # LRXSMTx = 120: 5 days
  224. #
  225. # LRXSMS: indicates when the relaxation is done
  226. #
  227. # LRXSMS = 0: before the time step
  228. # LRXSMS = 1: after the time step
  229. #
  230. has_config soilnudg && ifs_lrxsm=13 || ifs_lrxsm=0
  231. ifs_lrxsmt1=96
  232. ifs_lrxsmt2=72
  233. ifs_lrxsmt3=48
  234. ifs_lrxsmt4=24
  235. ifs_lrxsms=1
  236. # IFS tuning parameters
  237. variant=
  238. has_config tm5:chem && variant=-AerChem
  239. ifs_tuning_parameter_file=${ctrl_file_dir}/ifs-tuning-parameters-${ifs_grid}${variant}.sh
  240. if [ -f ${ifs_tuning_parameter_file} ]
  241. then
  242. source ${ifs_tuning_parameter_file}
  243. else
  244. error "Sorry, ${ifs_tuning_parameter_file} not found, exiting."
  245. fi
  246. # Select source of vegetation data:
  247. # ifs climatology from IFS
  248. # era20c vegetation from an off-line LPJ-Guess run forced with ERA20C
  249. # (currently available only for T255 and T159)
  250. # cmip6 vegetation from an EC-Earth3-Veg (interactive LPJ-Guess) run
  251. # (currently available only for T255)
  252. # custom_exp vegetation from any EC-Earth3-Veg run exp
  253. # (must contain same variables as era20c & cmip6 and located in icmcl_exp folder)
  254. # none don't create an ICMCL file with vegetation data (this is set
  255. # automatically if LPJG is used with feedback)
  256. #
  257. ifs_veg_source="cmip6"
  258. has_config lpjg:fdbck && ifs_veg_source="none"
  259. case ${ifs_veg_source} in
  260. "ifs" )
  261. # Use Lambert-Beer to compute effective vegetation cover
  262. n_compute_eff_veg_fraction=2
  263. ;;
  264. "era20c" )
  265. # LPJG vegetation is provided as effective cover
  266. # Don't use Lambert-Beer
  267. n_compute_eff_veg_fraction=0
  268. case "${ifs_grid}" in
  269. T159L*) veg_version=v29 ;;
  270. T255L*) veg_version=v16 ;;
  271. *) error "Vegetation from off-line LPJ-Guess not available for ${ifs_grid}" ;;
  272. esac
  273. ;;
  274. "cmip6" )
  275. # LPJG vegetation is provided as effective cover
  276. # Don't use Lambert-Beer
  277. n_compute_eff_veg_fraction=0
  278. case "${ifs_grid}" in
  279. T255L*) veg_version=v32 ;;
  280. *) error "Vegetation from CMIP6 EC-Earth3-Veg not available for ${ifs_grid}" ;;
  281. esac
  282. ;;
  283. "custom_"* )
  284. # LPJG vegetation is provided as effective cover
  285. # Don't use Lambert-Beer
  286. n_compute_eff_veg_fraction=0
  287. veg_version=${ifs_veg_source:7}
  288. if [ ! -d ${ini_data_dir}/ifs/${ifs_grid}/icmcl_${veg_version} ]
  289. then
  290. error "requested IFS_VEG_SOURCE = ${ifs_veg_source} but not found in ${ini_data_dir}/ifs/${ifs_grid}/icmcl_${veg_version}"
  291. fi
  292. ;;
  293. "none" )
  294. # LPJG with feedback
  295. n_compute_eff_veg_fraction=0
  296. ! has_config lpjg:fdbck && error "IFS requires an offline source of vegetation"
  297. ;;
  298. * )
  299. error "Vegetation from ${ifs_veg_source} not implemented"
  300. ;;
  301. esac
  302. # use DMI land ice physics and varying snow albedo
  303. case "${ifs_grid}" in
  304. T159*) ifs_landice=true ;;
  305. *) ifs_landice=false ;;
  306. esac
  307. # -----------------------------------------------------------------------------
  308. # *** NEMO/LIM configuration
  309. # -----------------------------------------------------------------------------
  310. # This is only needed if the experiment is started from an existing set of NEMO
  311. # restart files
  312. nem_restart_file_path=${start_dir}/nemo-rst
  313. nem_restart_offset=0
  314. nem_res_hor=$(echo ${nem_grid} | sed 's:ORCA\([0-9]\+\)L[0-9]\+:\1:')
  315. nem_config=${nem_grid}
  316. has_config lim3 && nem_config=${nem_config}_LIM3
  317. if has_config pisces tm5:co2
  318. then
  319. nem_config=${nem_config}_CarbonCycle
  320. elif has_config pisces
  321. then
  322. nem_config=${nem_config}_PISCES
  323. fi
  324. # TODO - nemo standalone configs are not accounted for in this script, but this would set the required nem_config
  325. ! has_config ifs && nem_config=${nem_config}_standalone
  326. nem_exe_file=${ecearth_src_dir}/nemo-3.6/CONFIG/${nem_config}/BLD/bin/nemo.exe
  327. nem_numproc=86
  328. # Thermal conductivity of snow, see comment in ctrl/namelist.lim3.ref.sh
  329. case "${ifs_grid}" in
  330. T159L* ) nem_rn_cdsn=0.25 ;;
  331. * ) nem_rn_cdsn=0.27 ;;
  332. esac
  333. # -----------------------------------------------------------------------------
  334. # *** Runoff mapper configuration
  335. # -----------------------------------------------------------------------------
  336. rnf_exe_file=${ecearth_src_dir}/runoff-mapper/bin/runoff-mapper.exe
  337. rnf_numproc=1
  338. # -----------------------------------------------------------------------------
  339. # *** LPJ-GUESS configuration
  340. # -----------------------------------------------------------------------------
  341. lpjg_time_step_sec=86400
  342. lpjg_numproc=32
  343. has_config lpjg && lpjg_on=1
  344. has_config lpjg:fdbck && lpjg_fdbck=1
  345. has_config tm5:co2 && lpjg_fdbck_tm5=1 || lpjg_fdbck_tm5=0
  346. export lpjg_fixNdepafter=-1
  347. export lpjg_fixLUafter=-1
  348. info '!!!! CMIP FIX YEAR SETTINGS:'
  349. info "ifs_cmip_fixyear: $ifs_cmip_fixyear"
  350. info "lpjg_fixNDepAfter: $lpjg_fixNdepafter"
  351. info "lpjg_fixLUAfter: $lpjg_fixLUafter"
  352. info '!!!!'
  353. lpjg_res=T${ifs_res_hor}
  354. lpjg_exe_file=${ecearth_src_dir}/lpjg/build/guess_${lpjg_res}
  355. # -----------------------------------------------------------------------------
  356. # *** AMIP-reader configuration
  357. # -----------------------------------------------------------------------------
  358. amip_exe_file=${ecearth_src_dir}/amip-forcing/bin/amip-forcing.exe
  359. amip_numproc=1
  360. # -----------------------------------------------------------------------------
  361. # *** TM5 configuration
  362. # -----------------------------------------------------------------------------
  363. if $(has_config tm5)
  364. then
  365. # With TM5, NPRTRV is set to 1 in the namelist. To avoid some out-of-bound
  366. # arrays in IFS, we must limit the number of cores for IFS
  367. if (( ifs_numproc > (ifs_res_hor+1) ))
  368. then
  369. error "too much cores requested for IFS, max is $((ifs_res_hor+1))"
  370. fi
  371. # TM5 settings
  372. has_config tm5:co2 && tmversion="co2" || tmversion="cb05"
  373. has_config tm5:co2 && export tm5_co2=1 || export tm5_co2=0
  374. export tm5_exch_nlevs=10
  375. tm5_time_step_sec=3600
  376. export tm5_numproc_x=2
  377. export tm5_numproc_y=45
  378. tm5_numproc=$(( tm5_numproc_x * tm5_numproc_y ))
  379. export tm5_emiss_fixyear=0
  380. # limited number of levels for feedback (aerosols, currently set to lmax_conv in TM5)
  381. case ${tm5_exch_nlevs} in
  382. 34) export tm5_exch_nlevs_cutoff=23 ;;
  383. 10) export tm5_exch_nlevs_cutoff=10 ;;
  384. 4) export tm5_exch_nlevs_cutoff=4 ;;
  385. *) error "not supported number of levels for TM5"
  386. esac
  387. # executable
  388. tm5_exe_file=${ecearth_src_dir}/tm5mp/build-${tmversion}-ml${tm5_exch_nlevs}/appl-tm5-${tmversion}.x
  389. # path to initial conditions, modify as needed
  390. tm5_restart_file_path=${ini_data_dir}/tm5/restart/${tmversion}-ml${tm5_exch_nlevs}
  391. # fields sent back to IFS
  392. has_config tm5:o3fb && tm5_to_ifs=O3 || tm5_to_ifs=
  393. has_config tm5:ch4fb && tm5_to_ifs=${tm5_to_ifs},CH4
  394. has_config tm5:aerfb && tm5_to_ifs=${tm5_to_ifs},"\
  395. N2,SU2,BC2,OC2,N3,SU3,BC3,OC3,SS3,DU3,\
  396. N4,SU4,BC4,OC4,SS4,DU4,N5,BC5,OC5,N6,DU6,N7,DU7,\
  397. NO3,MSA,\
  398. AOD_01,AOD_02,AOD_03,AOD_04,AOD_05,AOD_06,AOD_07,AOD_08,AOD_09,AOD_10,AOD_11,AOD_12,AOD_13,AOD_14,\
  399. SSA_01,SSA_02,SSA_03,SSA_04,SSA_05,SSA_06,SSA_07,SSA_08,SSA_09,SSA_10,SSA_11,SSA_12,SSA_13,SSA_14,\
  400. ASF_01,ASF_02,ASF_03,ASF_04,ASF_05,ASF_06,ASF_07,ASF_08,ASF_09,ASF_10,ASF_11,ASF_12,ASF_13,ASF_14"
  401. has_config tm5:co2fb && tm5_to_ifs=${tm5_to_ifs},CO2
  402. export tm5_to_ifs=$(echo ${tm5_to_ifs} | sed "s/^,//")
  403. # coupled to LPJ-Guess and/or PISCES?
  404. has_config tm5:co2 lpjg && export cpl_tm_guess=T || export cpl_tm_guess=F
  405. has_config tm5:co2 pisces && export cpl_tm_pisces=T || export cpl_tm_pisces=F
  406. fi
  407. # -----------------------------------------------------------------------------
  408. # *** OASIS configuration
  409. # -----------------------------------------------------------------------------
  410. # Restart files for the coupling fields (note 8 character limit in OASIS)
  411. # rstas.nc : atmosphere single-category fields
  412. # rstam.nc : atmosphere multi-category fields
  413. # rstos.nc : ocean single-category fields
  414. # rstom.nc : ocean multi-category fields
  415. oas_rst_ifs_nemo="rstas.nc rstos.nc"
  416. oas_rst_ifs_lpjg="vegin.nc lpjgv.nc"
  417. # Met fields from IFS to TM (always required)
  418. oas_rst_ifs_tm5="r_hum.nc r_g2d.nc r_udr.nc r_div.nc r_vor.nc \
  419. r_ddr.nc r_tmp.nc r_dmf.nc r_s2d.nc r_umf.nc"
  420. has_config tm5:chem && \
  421. oas_rst_ifs_tm5=${oas_rst_ifs_tm5}' r_cc_.nc r_clw.nc r_cco.nc r_ciw.nc r_ccu.nc'
  422. has_config tm5:o3fb || has_config tm5:ch4fb && oas_rst_ifs_tm5=$oas_rst_ifs_tm5' o3ch4.nc'
  423. has_config tm5:aerfb && oas_rst_ifs_tm5=$oas_rst_ifs_tm5' C???????'
  424. # C-cycle configuration
  425. has_config tm5:co2 lpjg && oas_rst_ifs_tm5=$oas_rst_ifs_tm5' l_co2.nc rlpjg.nc'
  426. has_config tm5:co2 pisces && oas_rst_ifs_tm5=$oas_rst_ifs_tm5' o_co2.nc pisce.nc'
  427. has_config tm5:co2fb && oas_rst_ifs_tm5=$oas_rst_ifs_tm5' co2mx.nc'
  428. # final list of files depends on the activated components - this is used in save_ic as well
  429. #oas_rst_files="${oas_rst_ifs_nemo} ${oas_rst_ifs_tm5} vegin.nc lpjgv.nc"
  430. oas_rst_files=""
  431. has_config ifs nemo && oas_rst_files+=" ${oas_rst_ifs_nemo}"
  432. has_config ifs lpjg && oas_rst_files+=" ${oas_rst_ifs_lpjg}"
  433. has_config ifs tm5 && oas_rst_files+=" ${oas_rst_ifs_tm5}"
  434. # Decide whether the OASIS weight files for interpolation should be linked from
  435. # the setup directory (true) or not (false). In the latter case, the weights
  436. # are re-computed at the start of the run.
  437. oas_link_weights=true
  438. # Flux correction for runoff (not calving) sent from Oasis to ocean.
  439. # 1.07945 is computed to compensate for a P-E=-0.016 mm/day (valid for std res)
  440. case "${ifs_grid}" in
  441. T159L* ) has_config nemo && oas_mb_fluxcorr=1.08652 ;;
  442. * ) has_config nemo && oas_mb_fluxcorr=1.07945 ;;
  443. esac
  444. # -----------------------------------------------------------------------------
  445. # *** XIOS configuration
  446. # -----------------------------------------------------------------------------
  447. xio_exe_file=${ecearth_src_dir}/xios-2.5/bin/xios_server.exe
  448. xio_numproc=1
  449. # -----------------------------------------------------------------------------
  450. # *** Extra initial conditions saved during the run
  451. # -----------------------------------------------------------------------------
  452. if has_config save_ic
  453. then
  454. source ./libsave_ic.sh
  455. declare -a save_ic_date save_ic_date1 save_ic_sec save_ic_day save_ic_ppt_file save_ic_nemo_ts
  456. oas_rst_files="${oas_rst_ifs_nemo} ${oas_rst_ifs_tm5} vegin.nc lpjgv.nc"
  457. fi
  458. # -----------------------------------------------------------------------------
  459. # *** Carbon cycle configuration
  460. # -----------------------------------------------------------------------------
  461. # set to true to write co2 fluxes sent to TM5
  462. ccycle_debug_fluxes=true
  463. # =============================================================================
  464. # *** END of User configuration
  465. # =============================================================================
  466. # =============================================================================
  467. # *** This is where the code begins ...
  468. # =============================================================================
  469. # -----------------------------------------------------------------------------
  470. # *** Create the run dir if necessary and go there
  471. # Everything is done from here.
  472. # -----------------------------------------------------------------------------
  473. if [ ! -d ${run_dir} ]
  474. then
  475. mkdir -p ${run_dir}
  476. if $special_restart
  477. then
  478. force_run_from_scratch=false
  479. echo 'rsync -av --delete ${run_dir}/../${special_restart_from}/ --exclude log --exclude output --exclude restart --exclude="${special_restart_from}_*" --exclude="srf*" --exclude="restart_*" --exclude="debug.*" --ex clude="output.*" ${run_dir}'
  480. rsync -av --delete ${run_dir}/../${special_restart_from}/ --exclude log --exclude output --exclude restart --exclude="${special_restart_from}_*" --exclude="srf*" --exclude="restart_*" --exclude="debug.*" --exclude="output.*" ${run_dir}
  481. cp -f ${nem_exe_file} ${run_dir}
  482. cp -f ${ifs_exe_file} ${run_dir}
  483. cp -f ${rnf_exe_file} ${run_dir}
  484. cp -f ${xio_exe_file} ${run_dir}
  485. special_year=${special_restart_date:0:4}
  486. sed -i "/$special_year/q" ${run_dir}/ece.info
  487. . ${run_dir}/ece.info
  488. special_restart_leg=$(printf %03d $((leg_number+1)))
  489. special_restart_leg_oasis=$(printf %03d $((leg_number+2)))
  490. # PUT HERE THE INSTRUCTIONS TO COPY THE restart files
  491. rsync -av ${run_dir}/../../archive/${special_restart_from}/restart/ifs/${special_restart_leg}/ ${run_dir}
  492. rsync -av ${run_dir}/../../archive/${special_restart_from}/restart/oasis/${special_restart_leg_oasis}/ ${run_dir}
  493. cd ${run_dir}/../../archive/${special_restart_from}/restart/nemo/${special_restart_leg}
  494. for f in *.nc; do
  495. nf=${exp_name}${f:4}
  496. cp $f ${run_dir}/$nf
  497. done
  498. cd -
  499. cd ${run_dir}
  500. for f in ${exp_name}_????????_restart_???_????.nc; do
  501. nf=${f:14}
  502. ln -s $f $nf
  503. done
  504. cd -
  505. rm -f ${run_dir}/ICMCL${special_restart_from}INIT
  506. mv ${run_dir}/ICMGG${special_restart_from}INIUA ${run_dir}/ICMGG${exp_name}INIUA
  507. mv ${run_dir}/ICMGG${special_restart_from}INIT ${run_dir}/ICMGG${exp_name}INIT
  508. mv ${run_dir}/ICMSH${special_restart_from}INIT ${run_dir}/ICMSH${exp_name}INIT
  509. fi
  510. else
  511. force_run_from_scratch=false
  512. special_restart=false
  513. fi
  514. cd ${run_dir}
  515. # -----------------------------------------------------------------------------
  516. # *** Determine the time span of this run and whether it's a restart leg
  517. # -----------------------------------------------------------------------------
  518. # Regularise the format of the start and end date of the simulation
  519. run_start_date=$(date -uR -d "${run_start_date}")
  520. run_end_date=$(date -uR -d "${run_end_date}")
  521. # -----------------------------------------------------------------------------
  522. # *** Set path to grib_set
  523. # -----------------------------------------------------------------------------
  524. grib_set=${GRIB_BIN_PATH}${GRIB_BIN_PATH:+/}grib_set
  525. # Loop over the number of legs
  526. for (( ; run_num_legs>0 ; run_num_legs-- ))
  527. do
  528. # Check for restart information file and set the current leg start date
  529. # Ignore restart information file if force_run_from_scratch is true
  530. if ${force_run_from_scratch} || ! [ -r ${ece_info_file} ]
  531. then
  532. leg_is_restart=false
  533. leg_start_date=${run_start_date}
  534. leg_number=1
  535. else
  536. leg_is_restart=true
  537. . ./${ece_info_file}
  538. leg_start_date=${leg_end_date}
  539. leg_number=$((leg_number+1))
  540. fi
  541. # Compute the end date of the current leg
  542. if [ -n "${rst_freq}" ]
  543. then
  544. leg_end_date=$(date -uR -d "${leg_start_date} + ${rst_freq}")
  545. else
  546. leg_end_date=${run_end_date}
  547. fi
  548. # Check if legs are integer multiples of full years if LPJG is used
  549. if has_config lpjg
  550. then
  551. if [[ $(date +%m%d%T -u -d "${leg_start_date}") != "010100:00:00" || \
  552. $(date +%m%d%T -u -d "${leg_start_date} + ${rst_freq}") != "010100:00:00" ]]
  553. then
  554. error "LPJ-GUESS runs must start on Jan 1 and end on Dec 31. Multi-year legs are allowed."
  555. fi
  556. fi
  557. if [ $(date -u -d "${leg_end_date}" +%s) -ge $(date -u -d "${run_end_date}" +%s) ]
  558. then
  559. leg_end_date=${run_end_date}
  560. ifs_lastout=true
  561. fi
  562. # Some time variables needed later
  563. leg_length_sec=$(( $(date -u -d "${leg_end_date}" +%s) - $(date -u -d "${leg_start_date}" +%s) ))
  564. leg_start_sec=$(( $(date -u -d "${leg_start_date}" +%s) - $(date -u -d "${run_start_date}" +%s) ))
  565. leg_end_sec=$(( $(date -u -d "${leg_end_date}" +%s) - $(date -u -d "${run_start_date}" +%s) ))
  566. leg_start_date_yyyymmdd=$(date -u -d "${leg_start_date}" +%Y%m%d)
  567. leg_start_date_yyyy=$(date -u -d "${leg_start_date}" +%Y)
  568. leg_end_date_yyyy=$(date -u -d "${leg_end_date}" +%Y)
  569. # Check whether there's actually time left to simulate - exit otherwise
  570. if [ ${leg_length_sec} -le 0 ]
  571. then
  572. info "Leg start date equal to or after end of simulation."
  573. info "Nothing left to do. Exiting."
  574. exit 0
  575. fi
  576. # Initial conditions saved during the run
  577. do_save_ic=false
  578. has_config save_ic && save_ic_get_config
  579. # if you do not use an option with save_ic, you must define 'do_save_ic' and
  580. # 'save_ic_date_offset' here or in ../libsave_ic.sh/save_ic_get_config()
  581. ${do_save_ic} && save_ic_define_vars
  582. # -------------------------------------------------------------------------
  583. # *** Prepare the run directory for a run from scratch
  584. # -------------------------------------------------------------------------
  585. if ! $leg_is_restart
  586. then
  587. # ---------------------------------------------------------------------
  588. # *** Check if run dir is empty. If not, and if we are allowed to do so
  589. # by ${force_run_from_scratch}, remove everything
  590. # ---------------------------------------------------------------------
  591. if $(ls * >& /dev/null)
  592. then
  593. if ${force_run_from_scratch}
  594. then
  595. rm -fr ${run_dir}/*
  596. else
  597. error "Run directory not empty and \$force_run_from_scratch not set."
  598. fi
  599. fi
  600. # ---------------------------------------------------------------------
  601. # *** Copy executables of model components
  602. # *** Additionally, create symlinks to the original place for reference
  603. # ---------------------------------------------------------------------
  604. cp ${ifs_exe_file} .
  605. ln -s ${ifs_exe_file} $(basename ${ifs_exe_file}).lnk
  606. if $(has_config amip)
  607. then
  608. cp ${amip_exe_file} .
  609. ln -s ${amip_exe_file} $(basename ${amip_exe_file}).lnk
  610. fi
  611. if $(has_config nemo)
  612. then
  613. cp ${nem_exe_file} .
  614. ln -s ${nem_exe_file} $(basename ${nem_exe_file}).lnk
  615. cp ${rnf_exe_file} .
  616. ln -s ${rnf_exe_file} $(basename ${rnf_exe_file}).lnk
  617. cp ${xio_exe_file} .
  618. ln -s ${xio_exe_file} $(basename ${xio_exe_file}).lnk
  619. fi
  620. if $(has_config lpjg)
  621. then
  622. cp ${lpjg_exe_file} .
  623. ln -s ${lpjg_exe_file} $(basename ${lpjg_exe_file}).lnk
  624. fi
  625. if $(has_config tm5)
  626. then
  627. cp ${tm5_exe_file} .
  628. ln -s ${tm5_exe_file} $(basename ${tm5_exe_file}).lnk
  629. fi
  630. # ---------------------------------------------------------------------
  631. # *** Files needed for IFS (linked)
  632. # ---------------------------------------------------------------------
  633. # Initial data
  634. ln -s \
  635. ${ini_data_dir}/ifs/${ifs_grid}/${leg_start_date_yyyymmdd}/ICMGGECE3INIUA \
  636. ICMGG${exp_name}INIUA
  637. ln -s \
  638. ${ini_data_dir}/ifs/${ifs_grid}/${leg_start_date_yyyymmdd}/ICMSHECE3INIT \
  639. ICMSH${exp_name}INIT
  640. rm -f ICMGG${exp_name}INIT
  641. cp ${ini_data_dir}/ifs/${ifs_grid}/${leg_start_date_yyyymmdd}/ICMGGECE3INIT \
  642. ICMGG${exp_name}INIT
  643. # add bare_soil_albedo to ICMGG*INIT
  644. tempfile=tmp.$$
  645. ${grib_set} -s dataDate=$(date -u -d "$run_start_date" +%Y%m%d) \
  646. ${ini_data_dir}/ifs/${ifs_grid}/climate/bare_soil_albedos.grb \
  647. ${tempfile}
  648. cat ${tempfile} >> ICMGG${exp_name}INIT
  649. rm -f ${tempfile}
  650. # add land ice mask if needed
  651. if ${ifs_landice}
  652. then
  653. tempfile=tmp.$$
  654. cdo divc,10 -setcode,82 -selcode,141 ICMGG${exp_name}INIT ${tempfile}
  655. ${grib_set} -s gridType=reduced_gg ${tempfile} ${tempfile}
  656. cat ${tempfile} >> ICMGG${exp_name}INIT
  657. rm -f ${tempfile}
  658. fi
  659. # Other stuff
  660. ln -s ${ini_data_dir}/ifs/rtables/* .
  661. # Output control (ppt files)
  662. if [ ! -f ${output_control_files_dir}/pptdddddd0600 ] && [ ! -f ${output_control_files_dir}/pptdddddd0300 ];then
  663. echo "Error from ece-esm.sh: Neither the file pptdddddd0600 or pptdddddd0300 exists in the directory:"
  664. echo " " ${output_control_files_dir}
  665. exit -1
  666. fi
  667. mkdir postins
  668. cp ${output_control_files_dir}/ppt* postins/
  669. if [ -f postins/pptdddddd0600 ];then
  670. ln -s pptdddddd0600 postins/pptdddddd0000
  671. ln -s pptdddddd0600 postins/pptdddddd1200
  672. ln -s pptdddddd0600 postins/pptdddddd1800
  673. fi
  674. if [ -f postins/pptdddddd0300 ];then
  675. ln -s pptdddddd0300 postins/pptdddddd0900
  676. ln -s pptdddddd0300 postins/pptdddddd1500
  677. ln -s pptdddddd0300 postins/pptdddddd2100
  678. if [ ! -f postins/pptdddddd0600 ];then
  679. ln -s pptdddddd0300 postins/pptdddddd0000
  680. ln -s pptdddddd0300 postins/pptdddddd0600
  681. ln -s pptdddddd0300 postins/pptdddddd1200
  682. ln -s pptdddddd0300 postins/pptdddddd1800
  683. fi
  684. fi
  685. /bin/ls -1 postins/* > dirlist
  686. # ---------------------------------------------------------------------
  687. # *** Files needed for LPJ-GUESS
  688. # ---------------------------------------------------------------------
  689. if $(has_config lpjg)
  690. then
  691. # Check for valid grid
  692. if [ $lpjg_res != "T255" -a $lpjg_res != "T159" ]
  693. then
  694. error "LPJG-gridlist doesn't exist for ifs-grid: ${ifs_grid}"
  695. fi
  696. # Initial data - saved state for LPJ-GUESS (.bin format)
  697. lpjgstartdir=$(printf "lpjg_state_%04d" $leg_start_date_yyyy)
  698. ln -sf ${ini_data_dir}/lpjg/ini_state/${lpjg_res}/${lpjgstartdir} ${run_dir}/${lpjgstartdir}
  699. # Control files (i.e. .ins, landuse, N deposition, soil type files etc.)
  700. cp -f ${ecearth_src_dir}/lpjg/data/ins/*.ins .
  701. # activate the new litterfall scheme for C4MIP - for the coupled model this is done when both pisces and lpjg are activated
  702. has_config pisces lpjg && echo -e "!override for EC-Earth-CC in runscript\nifpftlitterfall 1\ncalc_phen_after_restart 0" >> global.ins
  703. mkdir -p ${run_dir}/landuse
  704. fi
  705. # ---------------------------------------------------------------------
  706. # *** Files needed for NEMO (linked)
  707. # ---------------------------------------------------------------------
  708. if $(has_config nemo)
  709. then
  710. # Link initialisation files for matching ORCA grid
  711. for f in \
  712. bathy_meter.nc coordinates.nc \
  713. ahmcoef.nc \
  714. K1rowdrg.nc M2rowdrg.nc mask_itf.nc \
  715. decay_scale_bot.nc decay_scale_cri.nc \
  716. mixing_power_bot.nc mixing_power_cri.nc mixing_power_pyc.nc \
  717. runoff_depth.nc subbasins.nc
  718. do
  719. [ -f ${ini_data_dir}/nemo/initial/${nem_grid}/$f ] && ln -s ${ini_data_dir}/nemo/initial/${nem_grid}/$f
  720. done
  721. # Copying the time independent NEMO files for the matching ORCA grid in order to facilitate cmorisation:
  722. for f in \
  723. bathy_meter.nc subbasins.nc
  724. do
  725. mkdir -p output/nemo/ofx-data
  726. [ -f ${ini_data_dir}/nemo/initial/${nem_grid}/$f ] && cp -f ${ini_data_dir}/nemo/initial/${nem_grid}/$f output/nemo/ofx-data/
  727. done
  728. # Link geothermal heating file (independent of grid) and matching weight file
  729. ln -s ${ini_data_dir}/nemo/initial/Goutorbe_ghflux.nc
  730. ln -s ${ini_data_dir}/nemo/initial/weights_Goutorbe1_2_orca${nem_res_hor}_bilinear.nc
  731. # Link the salinity climatology file (needed for diagnostics)
  732. ln -s ${ini_data_dir}/nemo/climatology/${nem_grid}/sali_ref_clim_monthly.nc
  733. # Link either restart files or climatology files for the initial state
  734. if $(has_config nemo:start_from_restart)
  735. then
  736. # When linking restart files, we accept three options:
  737. # (1) Merged files for ocean and ice, i.e.
  738. # restart_oce.nc and restart_ice.nc
  739. # (2) One-file-per-MPI-rank, i.e.
  740. # restart_oce_????.nc and restart_ice_????.nc
  741. # No check is done whether the number of restart files agrees
  742. # with the number of MPI ranks for NEMO!
  743. # (3) One-file-per-MPI-rank with a prefix, i.e.
  744. # <exp_name>_<time_step>_restart_oce_????.nc (similar for the ice)
  745. # The prefix is ignored.
  746. # The code assumes that one of the options can be applied! If more
  747. # options are applicable, the first is chosen. If none of the
  748. # options apply, NEMO will crash with missing restart file.
  749. if ls -U ${nem_restart_file_path}/restart_[oi]ce.nc > /dev/null 2>&1
  750. then
  751. ln -s ${nem_restart_file_path}/restart_[oi]ce.nc ./
  752. elif ls -U ${nem_restart_file_path}/restart_[oi]ce_????.nc > /dev/null 2>&1
  753. then
  754. ln -s ${nem_restart_file_path}/restart_[oi]ce_????.nc ./
  755. else
  756. for f in ${nem_restart_file_path}/????_????????_restart_[oi]ce_????.nc
  757. do
  758. ln -s $f $(echo $f | sed 's/.*_\(restart_[oi]ce_....\.nc\)/\1/')
  759. done
  760. fi
  761. else
  762. # Temperature and salinity files for initialisation
  763. ln -s ${ini_data_dir}/nemo/climatology/absolute_salinity_WOA13_decav_Reg1L75_clim.nc
  764. ln -s ${ini_data_dir}/nemo/climatology/conservative_temperature_WOA13_decav_Reg1L75_clim.nc
  765. ln -s ${ini_data_dir}/nemo/climatology/weights_WOA13d1_2_orca${nem_res_hor}_bilinear.nc
  766. # Grid dependent runoff files
  767. case ${nem_grid} in
  768. ORCA1*) ln -s ${ini_data_dir}/nemo/climatology/runoff-icb_DaiTrenberth_Depoorter_ORCA1_JD.nc ;;
  769. ORCA025*) ln -s ${ini_data_dir}/nemo/climatology/ORCA_R025_runoff_v1.1.nc ;;
  770. esac
  771. fi
  772. # for ocean_nudging
  773. if $(has_config nemo:ocenudg) ; then
  774. ln -s ${ini_data_dir}/nemo/oce_nudg/resto.nc
  775. fi
  776. # XIOS files
  777. . ${ctrl_file_dir}/iodef.xml.sh > iodef.xml
  778. ln -s ${ctrl_file_dir}/context_nemo.xml
  779. ln -s ${ctrl_file_dir}/domain_def_nemo.xml
  780. ln -s ${ctrl_file_dir}/axis_def_nemo.xml
  781. ln -s ${ctrl_file_dir}/grids_def_nemo.xml
  782. ln -s ${ctrl_file_dir}/field_def_nemo-lim.xml
  783. ln -s ${ctrl_file_dir}/field_def_nemo-opa.xml
  784. ln -s ${ctrl_file_dir}/field_def_nemo-pisces.xml
  785. ln -s ${ctrl_file_dir}/field_def_nemo-inerttrc.xml
  786. ln -s ${output_control_files_dir}/file_def_nemo-lim3.xml file_def_nemo-lim.xml
  787. ln -s ${output_control_files_dir}/file_def_nemo-opa.xml
  788. ln -s ${output_control_files_dir}/file_def_nemo-pisces.xml
  789. if [ -f ${ini_data_dir}/xios/ORCA${nem_res_hor}/coordinates_xios.nc ]
  790. then
  791. cp ${ini_data_dir}/xios/ORCA${nem_res_hor}/coordinates_xios.nc ./
  792. else
  793. info "File 'coordinates_xios.nc' not found. NEMO can not be run with land domain removal!"
  794. fi
  795. # Files needed for TOP/PISCES
  796. if $(has_config pisces)
  797. then
  798. ln -fs ${ini_data_dir}/nemo/pisces/dust_INCA_ORCA_R1.nc
  799. ln -fs ${ini_data_dir}/nemo/pisces/ndeposition_Duce_ORCA_R1.nc
  800. ln -fs ${ini_data_dir}/nemo/pisces/pmarge_etopo_ORCA_R1.nc
  801. ln -fs ${ini_data_dir}/nemo/pisces/river_global_news_ORCA_R1.nc
  802. ln -fs ${ini_data_dir}/nemo/pisces/Solubility_T62_Mahowald_ORCA_R1.nc
  803. ln -fs ${ini_data_dir}/nemo/pisces/par_fraction_gewex_clim90s00s_ORCA_R1.nc
  804. ln -fs ${ini_data_dir}/nemo/pisces/DIC_GLODAP_annual_ORCA_R1.nc
  805. ln -fs ${ini_data_dir}/nemo/pisces/Alkalini_GLODAP_annual_ORCA_R1.nc
  806. ln -fs ${ini_data_dir}/nemo/pisces/O2_WOA2009_monthly_ORCA_R1.nc
  807. ln -fs ${ini_data_dir}/nemo/pisces/PO4_WOA2009_monthly_ORCA_R1.nc
  808. ln -fs ${ini_data_dir}/nemo/pisces/Si_WOA2009_monthly_ORCA_R1.nc
  809. ln -fs ${ini_data_dir}/nemo/pisces/DOC_PISCES_monthly_ORCA_R1.nc
  810. ln -fs ${ini_data_dir}/nemo/pisces/Fer_PISCES_monthly_ORCA_R1.nc
  811. ln -fs ${ini_data_dir}/nemo/pisces/NO3_WOA2009_monthly_ORCA_R1.nc
  812. # create co2 concentration file atcco2.txt if required
  813. if { [ $ifs_cmip_fixyear -gt 0 ] || [[ "${ifs_A4xCO2}" = "TRUE" ]]; } && [[ "${bgc_1PCTCO2}" = "FALSE" ]]
  814. then
  815. rm -f atcco2.txt
  816. elif [[ "${bgc_1PCTCO2}" = "TRUE" ]]
  817. then
  818. cp -f ${ini_data_dir}/nemo/pisces/mole-fraction-of-carbon-dioxide-in-air_1pctCO2_1849-2016.txt atcco2.txt
  819. else
  820. # determine scenario-name and co2-file middle-fix
  821. case $(echo ${ifs_cmip6_scenario} | tr '[:upper:]' '[:lower:]') in
  822. hist*) pis_scen="ssp585"; pis_sco2_mfix="REMIND-MAGPIE-ssp585-1-2-1";;
  823. ssp2-4.5*) pis_scen="ssp245"; pis_sco2_mfix="MESSAGE-GLOBIOM-ssp245-1-2-1";;
  824. ssp5-3.4*) pis_scen="ssp534os"; pis_sco2_mfix="REMIND-MAGPIE-ssp534-over-1-2-1";;
  825. ssp5-8.5*) pis_scen="ssp585"; pis_sco2_mfix="REMIND-MAGPIE-ssp585-1-2-1";;
  826. *) error "Scenario ${ifs_cmip6_scenario} not defined for PISCES" ;;
  827. esac
  828. # concatenate historic and scenario (2015+) co2 concentration file
  829. pis_sco2_pfix="${ini_data_dir}/nemo/pisces/mole-fraction-of-carbon-dioxide-in-air_input4MIPs_GHGConcentrations"
  830. cat ${pis_sco2_pfix}_CMIP_UoM-CMIP-1-2-0_gr1-GMNHSH_1849-2014.txt ${pis_sco2_pfix}_ScenarioMIP_UoM-${pis_sco2_mfix}_gr1-GMNHSH_2015-2500.txt > atcco2.txt
  831. fi
  832. fi
  833. #linking surface boundary conditions for CFCs (even if CFCs are not included)
  834. ln -fs ${ini_data_dir}/nemo/cfc/CFCs_CDIAC_extension_1637_2019.dat CFCs_CDIAC.dat
  835. if $(has_config pisces:start_from_restart)
  836. then
  837. # Same three options as for nemo:start_from_restart
  838. if ls -U ${nem_restart_file_path}/restart_trc.nc > /dev/null 2>&1
  839. then
  840. ln -s ${nem_restart_file_path}/restart_trc.nc ./
  841. elif ls -U ${nem_restart_file_path}/restart_trc_????.nc > /dev/null 2>&1
  842. then
  843. ln -s ${nem_restart_file_path}/restart_trc_????.nc ./
  844. else
  845. for f in ${nem_restart_file_path}/????_????????_restart_trc_????.nc
  846. do
  847. ln -s $f $(echo $f | sed 's/.*_\(restart_trc_....\.nc\)/\1/')
  848. done
  849. fi
  850. fi
  851. fi
  852. # ---------------------------------------------------------------------
  853. # *** Files needed for the Runoff mapper (linked)
  854. # ---------------------------------------------------------------------
  855. has_config rnfmapper && \
  856. ln -s ${ini_data_dir}/runoff-mapper/runoff_maps.nc
  857. # -------------------------------------------------------------------------
  858. # *** File and dir needed for TM5
  859. # -------------------------------------------------------------------------
  860. if $(has_config tm5)
  861. then
  862. tm5_istart=9
  863. case ${tm5_istart} in
  864. 33|32) ln -s \
  865. ${tm5_restart_file_path}/TM5_restart_${leg_start_date_yyyymmdd}_0000_glb300x200.nc
  866. ;;
  867. 31) ln -s ${tm5_restart_file_path}/tm5_save.hdf
  868. ;;
  869. 5) ln -s ${tm5_restart_file_path}/tm5_mmix.hdf
  870. ;;
  871. 2|9)
  872. ;;
  873. *) error "Unsupported initial fields option (TM5): ${tm5_istart}"
  874. ;;
  875. esac
  876. # spectral info
  877. ln -s ${ini_data_dir}/tm5/TM5_INPUT/T${ifs_res_hor}_info.txt
  878. # Profiling dir for TM5
  879. mkdir -p ${run_dir}/tm5_profile
  880. fi
  881. # ---------------------------------------------------------------------
  882. # *** Files needed for OASIS (linked)
  883. # ---------------------------------------------------------------------
  884. # Name table file
  885. ln -s ${ini_data_dir}/oasis/cf_name_table.txt
  886. # -- Get grid definition and weight files for IFS/NEMO or IFS/AMIP coupling
  887. has_config nemo && \
  888. oas_grid_dir=${ini_data_dir}/oasis/T${ifs_res_hor}-ORCA${nem_res_hor} && \
  889. mycp='cp'
  890. has_config amip && \
  891. oas_grid_dir=${ini_data_dir}/oasis/AMIP && \
  892. mycp='cdo -f nc copy' # to enforce nc format, needed for 'cdo merge' to work (have nc4c with Primavera files)
  893. # Grid definition files
  894. if $(has_config tm5)
  895. then
  896. ${mycp} ${oas_grid_dir}/areas.nc gcm_areas.nc
  897. ${mycp} ${oas_grid_dir}/grids.nc gcm_grids.nc
  898. ${mycp} ${oas_grid_dir}/masks.nc gcm_masks.nc
  899. else
  900. ln -s ${oas_grid_dir}/areas.nc
  901. ln -s ${oas_grid_dir}/grids.nc
  902. ln -s ${oas_grid_dir}/masks.nc
  903. fi
  904. # Weight files
  905. case ${ifs_res_hor} in
  906. 159) oas_agrd=080
  907. ;;
  908. 255) oas_agrd=128
  909. ;;
  910. 511) oas_agrd=256
  911. ;;
  912. 799) oas_agrd=400
  913. ;;
  914. *) error "Unsupported horizontal resolution (IFS): ${ifs_res_hor}"
  915. ;;
  916. esac
  917. if $(has_config nemo)
  918. then
  919. case ${nem_res_hor} in
  920. 1) oas_ogrd=O1t0
  921. ;;
  922. 025) oas_ogrd=Ot25
  923. ;;
  924. *) error "Unsupported horizontal resolution (NEMO): ${nem_res_hor}"
  925. ;;
  926. esac
  927. fi
  928. if ${oas_link_weights}
  929. then
  930. for f in ${oas_grid_dir}/rmp_????_to_????_GAUSWGT.nc
  931. do
  932. ln -s $f
  933. done
  934. fi
  935. if $(has_config ifs nemo)
  936. then
  937. for f in ${oas_rst_ifs_nemo}
  938. do
  939. cp ${oas_grid_dir}/rst/$f .
  940. done
  941. fi
  942. # -- Get grid definition, weight and restart files for TM5 coupling
  943. if $(has_config tm5)
  944. then
  945. oas_grid_dir=${ini_data_dir}/oasis/T${ifs_res_hor}-TM5-LPJG
  946. cp ${oas_grid_dir}/tm5_areas.nc .
  947. cp ${oas_grid_dir}/tm5_grids.nc .
  948. cp ${oas_grid_dir}/tm5_masks.nc .
  949. if ${oas_link_weights}
  950. then
  951. for f in ${oas_grid_dir}/rmp_????_to_????_*.nc
  952. do
  953. ln -s $f
  954. done
  955. fi
  956. # -- Get restart files for TM5-IFS/LPJG/PISCES
  957. for f in ${oas_rst_ifs_tm5}
  958. do
  959. cp ${oas_grid_dir}/rst/${tm5_exch_nlevs}-levels/$f .
  960. done
  961. # -- Merge grid definition files
  962. cdo merge gcm_areas.nc tm5_areas.nc areas.nc
  963. cdo merge gcm_grids.nc tm5_grids.nc grids.nc
  964. cdo merge gcm_masks.nc tm5_masks.nc masks.nc
  965. fi
  966. else # i.e. $leg_is_restart == true
  967. # ---------------------------------------------------------------------
  968. # *** Remove all leftover output files from previous legs
  969. # ---------------------------------------------------------------------
  970. # IFS files
  971. rm -f ICM{SH,GG}${exp_name}+??????
  972. # NEMO files
  973. rm -f ${exp_name}_??_????????_????????_{grid_U,grid_V,grid_W,grid_T,icemod,SBC,scalar,SBC_scalar,diad_T}.nc
  974. # TM5 restart file type
  975. tm5_istart=33
  976. if [ $tm5_istart -eq 31 ] && $(has_config tm5)
  977. then
  978. ln -sf save_${leg_start_date_yyyymmdd}00_glb300x200.hdf tm5_save.hdf
  979. fi
  980. fi # ! $leg_is_restart
  981. #--------------------------------------------------------------------------
  982. # *** Surface restoring and ocean nudging options
  983. #--------------------------------------------------------------------------
  984. if $(has_config nemo:ocenudg) ; then
  985. ln -fs ${ini_data_dir}/nemo/oce_nudg/temp_sal*.nc ./
  986. fi
  987. if $(has_config nemo:surfresto) ; then
  988. ln -fs ${ini_data_dir}/nemo/surface_restoring/sss_restore_data*.nc ./
  989. ln -fs ${ini_data_dir}/nemo/surface_restoring/sst_restore_data*.nc ./
  990. ln -fs ${ini_data_dir}/nemo/surface_restoring/mask_restore*.nc ./
  991. fi
  992. # -------------------------------------------------------------------------
  993. # *** Remove land grid-points
  994. # -------------------------------------------------------------------------
  995. if $(has_config nemo:elpin)
  996. then
  997. if [ ! -f coordinates_xios.nc ]
  998. then
  999. error "ELpIN requested, but file 'coordinates_xios.nc' was not found"
  1000. fi
  1001. jpns=($(${ecearth_src_dir}/util/ELPiN/ELPiNv2.cmd ${nem_numproc}))
  1002. info "nemo domain decompostion from ELpIN: ${jpns[@]}"
  1003. nem_numproc=${jpns[0]}
  1004. nem_jpni=${jpns[1]}
  1005. nem_jpnj=${jpns[2]}
  1006. elif has_config nemo
  1007. then
  1008. info "nemo original domain decomposition (not using ELPiN)"
  1009. fi
  1010. # -------------------------------------------------------------------------
  1011. # *** Initial conditions saved during the run
  1012. # -------------------------------------------------------------------------
  1013. ${do_save_ic} && save_ic_prepare_output
  1014. # -------------------------------------------------------------------------
  1015. # *** Create some control files
  1016. # -------------------------------------------------------------------------
  1017. # Create TM5 runtime rcfile
  1018. tm5_start_date=$(date -u -d "${leg_start_date}" +%F\ %T)
  1019. tm5_end_date=$(date -u -d "${leg_end_date}" +%F\ %T)
  1020. if $(has_config tm5)
  1021. then
  1022. cp -f ${ctrl_file_dir}/tm5-config-run.rc ${run_dir}
  1023. ${ecearth_src_dir}/tm5mp/setup_tm5 --no-compile \
  1024. --time-start="${tm5_start_date}" --time-final="${tm5_end_date}" \
  1025. --istart=${tm5_istart} ${run_dir}/tm5-config-run.rc
  1026. fi
  1027. # IFS frequency output for namelist
  1028. if [ -f postins/pptdddddd0300 ]
  1029. then
  1030. ifs_output_freq=$(( 3 * 3600 / ifs_time_step_sec ))
  1031. elif [ -f postins/pptdddddd0600 ]
  1032. then
  1033. ifs_output_freq=$(( 6 * 3600 / ifs_time_step_sec ))
  1034. else
  1035. error "IFS output frequency undefined."
  1036. fi
  1037. # IFS, NEMO, LIM, AMIP namelist and OASIS namcouple files
  1038. has_config ifs && . ${ctrl_file_dir}/namelist.ifs.sh > fort.4
  1039. has_config nemo && . ${ctrl_file_dir}/namelist.nemo.ref.sh > namelist_ref
  1040. has_config ifs nemo && . ${ctrl_file_dir}/namelist.nemo-${nem_grid}-coupled.cfg.sh > namelist_cfg
  1041. has_config lim3 && . ${ctrl_file_dir}/namelist.lim3.ref.sh > namelist_ice_ref
  1042. has_config lim3 && . ${ctrl_file_dir}/namelist.lim3-${nem_grid}.cfg.sh > namelist_ice_cfg
  1043. has_config rnfmapper && . ${ctrl_file_dir}/namelist.runoffmapper.sh > namelist.runoffmapper
  1044. has_config amip && . ${ctrl_file_dir}/namelist.amip.sh > namelist.amip
  1045. has_config pisces && . ${ctrl_file_dir}/namelist.nemo.top.ref.sh > namelist_top_ref
  1046. has_config pisces && . ${ctrl_file_dir}/namelist.nemo.top.cfg.sh > namelist_top_cfg
  1047. has_config pisces && . ${ctrl_file_dir}/namelist.nemo.pisces.ref.sh > namelist_pisces_ref
  1048. has_config pisces && . ${ctrl_file_dir}/namelist.nemo.pisces.cfg.sh > namelist_pisces_cfg
  1049. has_config nemo && . ${ctrl_file_dir}/namelist.nemo.age.ref.sh > namelist_age_ref
  1050. has_config nemo && . ${ctrl_file_dir}/namelist.nemo.age.cfg.sh > namelist_age_cfg
  1051. #include CFCs namelist even if CFCs are not included
  1052. has_config nemo && . ${ctrl_file_dir}/namelist.nemo.cfc.ref.sh > namelist_cfc_ref
  1053. has_config nemo && . ${ctrl_file_dir}/namelist.nemo.cfc.cfg.sh > namelist_cfc_cfg
  1054. # C-cycle - overwrite coupled nemo namelist
  1055. has_config pisces tm5:co2 && \
  1056. . ${ctrl_file_dir}/namelist.nemo-${nem_grid}-carboncycle.cfg.sh > namelist_cfg
  1057. lucia=0
  1058. . ${ctrl_file_dir}/namcouple.sh > namcouple
  1059. # -------------------------------------------------------------------------
  1060. # *** LPJ-GUESS initial data
  1061. # -------------------------------------------------------------------------
  1062. if $(has_config lpjg)
  1063. then
  1064. # LPJG runtime rcfile - update with leg dates
  1065. . ${ctrl_file_dir}/namelist.lpjg.sh > lpjg_steps.rc
  1066. # determine lpjg scenario-name and co2-file middle-fix
  1067. case $(echo ${ifs_cmip6_scenario} | tr '[:upper:]' '[:lower:]') in
  1068. hist*) lpjg_scen="ssp370"; lu_src="AIM" ; lpjg_sco2_mfix="AIM-ssp370-1-2-1" ; lu_file_posfix="2018_10_08.txt";;
  1069. ssp1-1.9*) lpjg_scen="ssp119"; lu_src="IMAGE" ; lpjg_sco2_mfix="IMAGE-ssp119-1-2-1" ; lu_file_posfix="2019_03_13.txt";;
  1070. ssp1-2.6*) lpjg_scen="ssp126"; lu_src="IMAGE" ; lpjg_sco2_mfix="IMAGE-ssp126-1-2-1" ; lu_file_posfix="2018_10_08.txt";;
  1071. ssp2-4.5*) lpjg_scen="ssp245"; lu_src="MESSAGE"; lpjg_sco2_mfix="MESSAGE-GLOBIOM-ssp245-1-2-1"; lu_file_posfix="2018_10_08.txt";;
  1072. ssp3-7.0*) lpjg_scen="ssp370"; lu_src="AIM" ; lpjg_sco2_mfix="AIM-ssp370-1-2-1" ; lu_file_posfix="2018_10_08.txt";;
  1073. ssp4-3.4*) lpjg_scen="ssp434"; lu_src="GCAM" ; lpjg_sco2_mfix="GCAM4-ssp434-1-2-1" ; lu_file_posfix="2018_10_08.txt";;
  1074. ssp5-3.4*) lpjg_scen="ssp534os"; lu_src="MAGPIE"; lpjg_sco2_mfix="REMIND-MAGPIE-ssp534-over-1-2-1" ; lu_file_posfix="2019_05_10.txt";;
  1075. ssp5-8.5*) lpjg_scen="ssp585"; lu_src="MAGPIE" ; lpjg_sco2_mfix="REMIND-MAGPIE-ssp585-1-2-1" ; lu_file_posfix="2018_10_08.txt";;
  1076. *) error "Scenario ${ifs_cmip6_scenario} not defined for LPJ-GUESS" ;;
  1077. esac
  1078. lpjg_scenario_new="historical + $lpjg_sco2_mfix"
  1079. lpjg_scenario_info=${run_dir}/lpjg_scenario.info
  1080. if [ -f $lpjg_scenario_info ]
  1081. then
  1082. source $lpjg_scenario_info
  1083. if [ "$lpjg_scenario_new" = "$lpjg_scenario" ]
  1084. then
  1085. lpjg_copy_rte=false
  1086. else
  1087. lpjg_copy_rte=true
  1088. fi
  1089. else
  1090. lpjg_copy_rte=true
  1091. fi
  1092. # copy RTE only if necessary (at beginning of a run or when scenario changes)
  1093. if $lpjg_copy_rte
  1094. then
  1095. # write info about installed scenarios to file
  1096. echo "lpjg_scenario=\"historical + $lpjg_sco2_mfix\"" > $lpjg_scenario_info
  1097. # set file prefixes depending on scenario
  1098. lu_file_prefix="1850_2100_luh2_Hist_ScenarioMIP_UofMD"
  1099. lu_file_midfix="2_1_f"
  1100. lu_path="${ini_data_dir}/lpjg/landuse/${lpjg_res}/${lpjg_scen}"
  1101. # copy and reference-link landuse, gross transitions, crops, n-fertilisation
  1102. for inp in lu gross crop nfert
  1103. do
  1104. if [ $inp == "crop" -o $inp == "nfert" ]
  1105. then
  1106. lu_src_file="${lu_path}/${inp}_rfirr_${lu_file_prefix}_${lu_src}_${lpjg_scen}_${lu_file_midfix}_${lpjg_res}_${lu_file_posfix}"
  1107. else
  1108. lu_src_file="${lu_path}/${inp}_${lu_file_prefix}_${lu_src}_${lpjg_scen}_${lu_file_midfix}_${lpjg_res}_${lu_file_posfix}"
  1109. fi
  1110. cp -f $lu_src_file ${run_dir}/landuse/${inp}_luh2.txt
  1111. ln -fs $lu_src_file ${run_dir}/landuse/${inp}_luh2.txt.lnk
  1112. done
  1113. # nitrogen deposition files
  1114. mkdir -p ${run_dir}/ndep
  1115. for inp in drynhx2 drynoy2 wetnhx2 wetnoy2
  1116. do
  1117. ndep_src_file="${ini_data_dir}/lpjg/ndep/${lpjg_res}/${lpjg_scen}/${lpjg_scen}_${lpjg_res}_${inp}.nc"
  1118. cp -f $ndep_src_file ${run_dir}/ndep/${inp}.nc
  1119. ln -fs $ndep_src_file ${run_dir}/ndep/${inp}.nc.lnk
  1120. done
  1121. # concatenate historic and scenario (2015+) co2 concentration file
  1122. # hist co2 file
  1123. lpjg_hco2_file="${ini_data_dir}/ifs/cmip6-data/mole-fraction-of-carbon-dioxide-in-air_input4MIPs_GHGConcentrations_CMIP_UoM-CMIP-1-2-0_gr1-GMNHSH_0000-2014.nc"
  1124. # scenario co2 file
  1125. lpjg_sco2_file="${ini_data_dir}/ifs/cmip6-data/mole-fraction-of-carbon-dioxide-in-air_input4MIPs_GHGConcentrations_ScenarioMIP_UoM-${lpjg_sco2_mfix}_gr1-GMNHSH_2015-2500.nc"
  1126. # combined file
  1127. lpjg_co2_file="${run_dir}/mole_fraction_of_carbon_dioxide_in_air_input4MIPs_lpjg.nc"
  1128. rm -f $lpjg_co2_file
  1129. cdo mergetime $lpjg_hco2_file $lpjg_sco2_file $lpjg_co2_file
  1130. fi
  1131. # Populate or update LPJG run directories
  1132. for (( n=1; n<=${lpjg_numproc}; n++ ))
  1133. do
  1134. # if run from scratch or number of procs has been extended
  1135. if ! $leg_is_restart || [ ! -d ${run_dir}/run${n} ]
  1136. then
  1137. # Make output directories
  1138. mkdir -p ${run_dir}/run${n}/output
  1139. # Copy *.ins, lpjg_steps.rc and OASIS-MCT restart files
  1140. cp ${run_dir}/*.ins ${run_dir}/run${n}
  1141. # Copy output control files
  1142. cp ${output_control_files_dir}/lpjg_cmip6_output.ins ${run_dir}/run${n}
  1143. ln -s ${output_control_files_dir}/lpjg_cmip6_output.ins ${run_dir}/run${n}/lpjg_cmip6_output.ins.lnk
  1144. cp ${ini_data_dir}/lpjg/oasismct/ghg*.txt ${run_dir}/run${n}
  1145. cp ${ini_data_dir}/lpjg/oasismct/${lpjg_res}/ece_gridlist_${lpjg_res}.txt ${run_dir}/run${n}/ece_gridlist.txt
  1146. ln -s ${ini_data_dir}/lpjg/oasismct/${lpjg_res}/ece_gridlist_${lpjg_res}.txt ${run_dir}/run${n}/ece_gridlist.txt.lnk
  1147. # Data only needed by master
  1148. if [ $n == 1 ]
  1149. then
  1150. cp ${ini_data_dir}/lpjg/oasismct/${lpjg_res}/*.nc ${run_dir}
  1151. cp ${ini_data_dir}/lpjg/oasismct/lpjgv.txt ${run_dir}/run${n}
  1152. fi
  1153. fi
  1154. # Refresh output-dirs after they hav been removed at end of the last leg
  1155. mkdir -p ${run_dir}/run${n}/output/CMIP6
  1156. mkdir -p ${run_dir}/run${n}/output/CRESCENDO
  1157. done
  1158. if $leg_is_restart
  1159. then
  1160. lpjg_restart_dir="restart/lpjg/$(printf %03d $((leg_number-1)))"
  1161. lpjg_rst_state="${lpjg_restart_dir}/lpjg_state_${leg_start_date_yyyy}"
  1162. if [ -d "$lpjg_rst_state" ]
  1163. then
  1164. ln -sf $lpjg_rst_state
  1165. else
  1166. echo "lpjg restart dir $lpjg_rst_state not available"
  1167. exit -1
  1168. fi
  1169. # get oasis restart files
  1170. oasis_restart_dir="restart/oasis/$(printf %03d $((leg_number)))"
  1171. cp -f ${oasis_restart_dir}/*.nc ${run_dir}/
  1172. fi
  1173. fi
  1174. # -------------------------------------------------------------------------
  1175. # *** Create ICMCL file with vegetation fields
  1176. # not needed if LPJG is used with feedback
  1177. # -------------------------------------------------------------------------
  1178. tempfile=tmp.$$
  1179. case ${ifs_veg_source} in
  1180. "ifs" )
  1181. # Vegetation from IFS (climatology)
  1182. icmclfile=${ini_data_dir}/ifs/${ifs_grid}/climate/ICMCL_ONLY_VEG_PD
  1183. # Create data for december, the year before the leg starts
  1184. ${grib_set} \
  1185. -s dataDate=$(printf "%04d" $((leg_start_date_yyyy-1)))1215 \
  1186. ${icmclfile}-12 ICMCL${exp_name}INIT
  1187. # Create data for all month in the years of the leg
  1188. for (( y=${leg_start_date_yyyy} ; y<=${leg_end_date_yyyy} ; y++ ))
  1189. do
  1190. yy=$(printf "%04d" $y)
  1191. for m in {1..12}
  1192. do
  1193. mm=$(printf "%02d" $m)
  1194. ${grib_set} -s dataDate=${yy}${mm}15 ${icmclfile}-${mm} ${tempfile}
  1195. cat ${tempfile} >> ICMCL${exp_name}INIT
  1196. done
  1197. done
  1198. # Create data for january, the year after the leg ends
  1199. ${grib_set} \
  1200. -s dataDate=$(printf "%04d" $((leg_end_date_yyyy+1)))0115 \
  1201. ${icmclfile}-01 ${tempfile}
  1202. cat ${tempfile} >> ICMCL${exp_name}INIT
  1203. ;;
  1204. "era20c"|"cmip6"|"custom_"* )
  1205. # Vegetation from a LPJG run (off-line or EC-Earth3-Veg)
  1206. rm -f ICMCL${exp_name}INIT
  1207. # Create data for all years of the leg, including one year
  1208. # before and one year after
  1209. for (( yr=leg_start_date_yyyy-1 ; yr<=leg_end_date_yyyy+1 ; yr+=1 ))
  1210. do
  1211. case ${ifs_veg_source} in
  1212. 'era20c' )
  1213. # no scenario needed with era20c
  1214. icmcl_scenario="" ;;
  1215. 'custom_'* )
  1216. # no scenario implemented yet with custom_dir
  1217. icmcl_scenario="" ;;
  1218. 'cmip6' )
  1219. # select scenario, use SSP3-7.0 as default
  1220. # if not otherwise specified
  1221. icmcl_scenario="historical"
  1222. if ( [ $ifs_cmip_fixyear -le 0 ] && [ $yr -ge 2015 ] ) || \
  1223. [ $ifs_cmip_fixyear -ge 2015 ]
  1224. then
  1225. [[ ${ifs_cmip6_scenario} =~ ^SSP ]] \
  1226. && icmcl_scenario=${ifs_cmip6_scenario} \
  1227. || if [ ${ifs_covid19^^} == TRUE ]
  1228. then
  1229. icmcl_scenario='SSP2-4.5'
  1230. else
  1231. icmcl_scenario='SSP3-7.0'
  1232. fi
  1233. fi ;;
  1234. esac
  1235. if [ $ifs_cmip_fixyear -le 0 ] || [[ ${ifs_veg_source} == custom_* ]]
  1236. then
  1237. cat ${ini_data_dir}/ifs/${ifs_grid}/icmcl_${veg_version}/${icmcl_scenario}/icmcl_$yr.grb >> ICMCL${exp_name}INIT
  1238. else
  1239. # Fixed year forcing, requires cdo! (only when not using ifs_veg_source=custom_exp*)
  1240. # If cdo is not available at runtime you need to fix proper
  1241. # icmcl files beforehand and use them here
  1242. cdo setyear,$yr ${ini_data_dir}/ifs/${ifs_grid}/icmcl_${veg_version}/${icmcl_scenario}/icmcl_${ifs_cmip_fixyear}.grb ${tempfile}
  1243. cat ${tempfile} >> ICMCL${exp_name}INIT
  1244. fi
  1245. done
  1246. ;;
  1247. "none" )
  1248. info "no ICMCL file is created"
  1249. ;;
  1250. * )
  1251. error "Vegetation from ${ifs_veg_source} not implemented"
  1252. ;;
  1253. esac
  1254. # Clean up
  1255. rm -f ${tempfile}
  1256. # -------------------------------------------------------------------------
  1257. # *** Link the appropriate NEMO restart files of the previous leg
  1258. # -------------------------------------------------------------------------
  1259. if $leg_is_restart && $(has_config nemo) && ! $special_restart
  1260. then
  1261. ns=$(printf %08d $(( leg_start_sec / nem_time_step_sec - nem_restart_offset )))
  1262. for (( n=0 ; n<nem_numproc ; n++ ))
  1263. do
  1264. np=$(printf %04d ${n})
  1265. ln -fs ${exp_name}_${ns}_restart_oce_${np}.nc restart_oce_${np}.nc
  1266. ln -fs ${exp_name}_${ns}_restart_ice_${np}.nc restart_ice_${np}.nc
  1267. has_config pisces && \
  1268. ln -fs ${exp_name}_${ns}_restart_trc_${np}.nc restart_trc_${np}.nc
  1269. done
  1270. # Make sure there are no global restart files
  1271. # If links are found, they will be removed. We are cautious and do
  1272. # _not_ remove real files! However, if real global restart files are
  1273. # present, NEMO/LIM will stop because time stamps will not match.
  1274. [ -h restart_oce.nc ] && rm restart_oce.nc
  1275. [ -h restart_ice.nc ] && rm restart_ice.nc
  1276. [ -h restart_trc.nc ] && rm restart_trc.nc
  1277. fi
  1278. # -------------------------------------------------------------------------
  1279. # *** Remove some OASIS files of the previous leg
  1280. # -------------------------------------------------------------------------
  1281. if $leg_is_restart
  1282. then
  1283. rm -f anaisout_*
  1284. fi
  1285. # -------------------------------------------------------------------------
  1286. # *** Remove any ccycle debug output files
  1287. # -------------------------------------------------------------------------
  1288. if ${ccycle_debug_fluxes} && $leg_is_restart && $(has_config tm5:co2)
  1289. then
  1290. if $(has_config lpjg)
  1291. then
  1292. rm -f GUE_{CNAT,CANT,CNPP}_*.nc run1/GUE_{CNAT,CANT,CNPP}_*.nc
  1293. rm -f TM5_Land{CNAT,CANT,CNPP}_*.nc
  1294. fi
  1295. if $(has_config pisces)
  1296. then
  1297. rm -f O_CO2FLX_*.nc
  1298. rm -f TM5_OceCFLX_*.nc
  1299. fi
  1300. fi
  1301. # -------------------------------------------------------------------------
  1302. # *** Check consistency of OASIS restarts and IFS rcf with ece_info_file
  1303. # -------------------------------------------------------------------------
  1304. if $leg_is_restart
  1305. then
  1306. info "Check OASIS restarts and IFS rcf before launch"
  1307. leg_nb_3d=$(printf %03d $((leg_number)))
  1308. for oasis_restart_file in restart/oasis/${leg_nb_3d}/*
  1309. do
  1310. [ ! -f "${oasis_restart_file}" ] && break
  1311. if ! diff -q $(basename ${oasis_restart_file}) ${oasis_restart_file} >/dev/null
  1312. then
  1313. echo "*WARNING* Overwriting OASIS restart (${oasis_restart_file})"
  1314. cp -f ${oasis_restart_file} .
  1315. fi
  1316. done
  1317. rcf_restart_file=restart/ifs/${leg_nb_3d}/rcf
  1318. if [ -f "${rcf_restart_file}" ]
  1319. then
  1320. if ! diff -q rcf ${rcf_restart_file} >/dev/null
  1321. then
  1322. echo "*WARNING* Overwriting IFS rcf file (${rcf_restart_file})"
  1323. cp -f ${rcf_restart_file} .
  1324. fi
  1325. fi
  1326. fi
  1327. # -------------------------------------------------------------------------
  1328. # *** Start the run
  1329. # -------------------------------------------------------------------------
  1330. export DR_HOOK_IGNORE_SIGNALS='-1'
  1331. export CPLNG='active'
  1332. # Use the launch function from the platform configuration file
  1333. has_config nemo && \
  1334. cmd="${xio_numproc} ${xio_exe_file} -- \
  1335. ${nem_numproc} ${nem_exe_file} -- \
  1336. ${ifs_numproc} ${ifs_exe_file} -v ecmwf -e ${exp_name}" || \
  1337. cmd="${ifs_numproc} ${ifs_exe_file} -v ecmwf -e ${exp_name}"
  1338. has_config lpjg && cmd=${cmd}" -- ${lpjg_numproc} ${lpjg_exe_file} guess.ins -parallel"
  1339. has_config tm5 && cmd=${cmd}" -- ${tm5_numproc} ${tm5_exe_file} tm5-run.rc"
  1340. has_config amip && cmd=${cmd}" -- ${amip_numproc} ${amip_exe_file}"
  1341. has_config nemo && cmd=${cmd}" -- ${rnf_numproc} ${rnf_exe_file}"
  1342. t1=$(date +%s)
  1343. launch $cmd
  1344. t2=$(date +%s)
  1345. tr=$(date -d "0 -$t1 sec + $t2 sec" +%T)
  1346. # -------------------------------------------------------------------------
  1347. # *** Check for signs of success
  1348. # Note the tests provide no guarantee that things went fine! They are
  1349. # just based on the IFS, NEMO and TM5 log files. More tests (e.g. checking
  1350. # restart files) could be implemented.
  1351. # -------------------------------------------------------------------------
  1352. # Checking for IFS success
  1353. if [ -f ifs.stat ]
  1354. then
  1355. if [ "$(awk 'END{print $3}' ifs.stat)" == "CNT0" ]
  1356. then
  1357. info "Leg successfully completed according to IFS log file 'ifs.stat'."
  1358. else
  1359. error "Leg not completed according to IFS log file 'ifs.stat'."
  1360. fi
  1361. else
  1362. error "IFS log file 'ifs.stat' not found after run."
  1363. fi
  1364. # Check for NEMO success
  1365. if $(has_config nemo)
  1366. then
  1367. if [ -f ocean.output ]
  1368. then
  1369. if [ "$(sed -n '/New day/h; ${g;s:.*\([0-9/]\{10\}\).*:\1:;p;}' ocean.output)" == "$(date -u -d "${leg_end_date} - 1 day" +%Y/%m/%d)" ]
  1370. then
  1371. info "Leg successfully completed according to NEMO log file 'ocean.output'."
  1372. else
  1373. error "Leg not completed according to NEMO log file 'ocean.output'."
  1374. fi
  1375. else
  1376. error "NEMO log file 'ocean.output' not found after run."
  1377. fi
  1378. fi
  1379. # Check for TM5 success
  1380. if $(has_config tm5)
  1381. then
  1382. if [ -f tm5.ok ]
  1383. then
  1384. info "Leg successfully completed according to existing TM5 file 'tm5.ok'."
  1385. else
  1386. error "Leg not completed according to non-existing TM5 file 'tm5.ok'."
  1387. fi
  1388. fi
  1389. # -------------------------------------------------------------------------
  1390. # *** Post-process initial conditions saved during the run if requested
  1391. # -------------------------------------------------------------------------
  1392. ${do_save_ic} && save_ic_postproc
  1393. # -------------------------------------------------------------------------
  1394. # *** Move IFS output files to archive directory
  1395. # -------------------------------------------------------------------------
  1396. outdir="${archive_dir}/output/ifs/$(printf %03d $((leg_number)))"
  1397. mkdir -p ${outdir}
  1398. prv_leg=$(printf %03d $((leg_number-1)))
  1399. # This takes care of a special IFS feature: The output for the last time
  1400. # step of each leg is written at the first time step of the new leg. The
  1401. # following code makes sure that the output is appended to the appropriate
  1402. # file. Since GRIB files are just streams, its done with a simple cat
  1403. # command.
  1404. for f in ICMSH${exp_name}+?????? ICMGG${exp_name}+??????
  1405. do
  1406. if [ -f output/ifs/${prv_leg}/${f} ]
  1407. then
  1408. cat ${f} >> output/ifs/${prv_leg}/${f}
  1409. rm -f ${f}
  1410. else
  1411. mv ${f} ${outdir}
  1412. fi
  1413. done
  1414. # -------------------------------------------------------------------------
  1415. # *** Move NEMO output files to archive directory
  1416. # -------------------------------------------------------------------------
  1417. if $(has_config nemo)
  1418. then
  1419. outdir="${archive_dir}/output/nemo/$(printf %03d $((leg_number)))"
  1420. mkdir -p ${outdir}
  1421. for v in grid_U grid_V grid_W grid_T icemod SBC scalar SBC_scalar diad_T ptrc_T bioscalar \
  1422. grid_T_2D grid_U_2D grid_V_2D grid_W_2D grid_T_3D grid_U_3D grid_V_3D grid_W_3D \
  1423. grid_T_SFC grid_1point grid_T_3D_ncatice vert_sum \
  1424. grid_ptr_W_3basin_3D grid_ptr_T_3basin_2D grid_ptr_T_2D \
  1425. zoom_700_sum zoom_300_sum zoom_2000_sum
  1426. do
  1427. for f in ${exp_name}_*_????????_????????_*${v}.nc
  1428. do
  1429. test -f $f && mv $f $outdir/
  1430. done
  1431. done
  1432. fi
  1433. # -------------------------------------------------------------------------
  1434. # *** Move LPJ-GUESS output files to archive directory
  1435. # -------------------------------------------------------------------------
  1436. if $(has_config lpjg)
  1437. then
  1438. outdir="output/lpjg/$(printf %03d $((leg_number)))"
  1439. if [ -d ${outdir} ]
  1440. then
  1441. rm -rf ${outdir}
  1442. fi
  1443. mkdir -p ${outdir}
  1444. # LPJG run directories
  1445. # concatenate *.out (or compressed *.out.gz) files from each run* into output dir
  1446. flist=$(cd ${run_dir}/run1/output && find *.out.gz -type f 2>/dev/null || true)
  1447. if [ "$flist" = "" ]
  1448. then
  1449. lpjg_compress_output=false
  1450. flist=$(cd ${run_dir}/run1/output && find *.out -type f 2>/dev/null)
  1451. else
  1452. lpjg_compress_output=true
  1453. fi
  1454. mkdir ${outdir}/CMIP6
  1455. for (( n=1; n<=${lpjg_numproc}; n++ ))
  1456. do
  1457. for ofile in $flist
  1458. do
  1459. if $lpjg_compress_output
  1460. then
  1461. [ $n == 1 ] && gzip -c ${run_dir}/run${n}/output/`basename ${ofile} .gz`.hdr > ${outdir}/$ofile
  1462. cat ${run_dir}/run${n}/output/${ofile} >> ${outdir}/$ofile
  1463. else
  1464. if (( n == 1 ))
  1465. then
  1466. cat ${run_dir}/run${n}/output/${ofile} > ${outdir}/$ofile
  1467. else
  1468. awk '(FNR!=1){print $0}' ${run_dir}/run${n}/output/${ofile} >> ${outdir}/$ofile
  1469. fi
  1470. fi
  1471. done
  1472. rm -rf ${run_dir}/run${n}/output
  1473. done
  1474. # move monthly file if available
  1475. if [ -f ${run_dir}/LPJ-GUESS_monthlyoutput.txt ]
  1476. then
  1477. mv ${run_dir}/LPJ-GUESS_monthlyoutput.txt ${outdir}
  1478. fi
  1479. fi
  1480. # -------------------------------------------------------------------------
  1481. # *** Move TM5 output files to archive directory
  1482. # -------------------------------------------------------------------------
  1483. if $(has_config tm5)
  1484. then
  1485. outdir="output/tm5/$(printf %03d $((leg_number)))"
  1486. mkdir -p ${outdir}
  1487. set +e
  1488. mv budget_??????????_??????????_global.hdf ${outdir}
  1489. mv j_statistics_??????????_??????????.hdf ${outdir}
  1490. mv mmix_??????????_??????????_glb???x???.hdf ${outdir}
  1491. mv aerocom?_TM5_*_????????_daily.nc ${outdir}
  1492. mv aerocom?_TM5_*_??????_monthly.nc ${outdir}
  1493. mv AOD_????_??_??.nc ${outdir}
  1494. mv -f TM5MP_${exp_name}_griddef.nc ${outdir}
  1495. mv TM5MP_${exp_name}_TP_????_??_??.nc ${outdir}
  1496. mv TM5MP_${exp_name}_vmr3_????_??_??.nc ${outdir}
  1497. mv general_TM5_${exp_name}_??????????_hourly.nc ${outdir}
  1498. mv general_TM5_${exp_name}_??????_monthly.nc ${outdir}
  1499. mv *EC-Earth3-*_${exp_name}_*.nc ${outdir}
  1500. set -e
  1501. # move profiling files if any
  1502. if [ "$(ls -A ${run_dir}/tm5_profile)" ]
  1503. then
  1504. outdir="output/tm5/profile_$(printf %03d $((leg_number)))"
  1505. mkdir -p ${outdir}
  1506. for f in ${run_dir}/tm5_profile/*
  1507. do
  1508. test -f ${f} && mv $f ${outdir}
  1509. done
  1510. fi
  1511. fi
  1512. # -------------------------------------------------------------------------
  1513. # *** Move IFS restart files to archive directory
  1514. # -------------------------------------------------------------------------
  1515. if $leg_is_restart
  1516. then
  1517. outdir="${archive_dir}/restart/ifs/$(printf %03d $((leg_number)))"
  1518. mkdir -p ${outdir}
  1519. # Figure out the time part of the restart files (cf. CTIME on rcf files)
  1520. # NOTE: Assuming that restarts are at full days (time=0000) only!
  1521. nd="$(printf %06d $((leg_start_sec/(24*3600))))0000"
  1522. mv srf${nd}.???? ${outdir}
  1523. fi
  1524. # -------------------------------------------------------------------------
  1525. # *** Move ccycle debug output files to archive directory
  1526. # -------------------------------------------------------------------------
  1527. if ${ccycle_debug_fluxes} && $(has_config tm5:co2)
  1528. then
  1529. outdir="output/tm5/$(printf %03d $((leg_number)))"
  1530. mkdir -p ${outdir}
  1531. if $(has_config lpjg)
  1532. then
  1533. for f in CNAT CANT CNPP ; do
  1534. mv TM5_Land${f}_*.nc ${outdir}
  1535. rm -f GUE_${f}_*.nc run1/GUE_${f}_*.nc
  1536. #gf=`ls -1 GUE_${f}_*.nc | head -n 1`
  1537. #cdo mergetime ${gf} run1/${gf} ${outdir}/${gf}
  1538. done
  1539. fi
  1540. if $(has_config pisces)
  1541. then
  1542. mv TM5_OceCFLX_*.nc ${outdir}
  1543. rm -f O_CO2FLX_*.nc
  1544. #mv O_CO2FLX_*.nc ${outdir}
  1545. fi
  1546. fi
  1547. # -------------------------------------------------------------------------
  1548. # *** Move LPJ-GUESS restart files to archive directory
  1549. # -------------------------------------------------------------------------
  1550. if $(has_config lpjg)
  1551. then
  1552. outdir="restart/lpjg/$(printf %03d $((leg_number)))"
  1553. if [ -d ${outdir} ]
  1554. then
  1555. rm -rf ${outdir}
  1556. fi
  1557. mkdir -p ${outdir}
  1558. state_dir="./lpjg_state_$(printf %04d $((leg_end_date_yyyy)))"
  1559. mv ${state_dir} ${outdir}
  1560. # LPJG writes into run1 dir, so mv to main rundir
  1561. mv -f run1/lpjgv.nc .
  1562. has_config tm5:co2 lpjg && mv -f run1/rlpjg.nc .
  1563. # remove restart link
  1564. if $leg_is_restart
  1565. then
  1566. old_state_dir="./lpjg_state_$(printf %04d $((leg_start_date_yyyy)))"
  1567. if [ -L $old_state_dir ]
  1568. then
  1569. rm -f "$old_state_dir"
  1570. fi
  1571. fi
  1572. fi
  1573. # -------------------------------------------------------------------------
  1574. # *** Move NEMO restart files to archive directory
  1575. # -------------------------------------------------------------------------
  1576. if $leg_is_restart && $(has_config nemo)
  1577. then
  1578. outdir="${archive_dir}/restart/nemo/$(printf %03d $((leg_number)))"
  1579. mkdir -p ${outdir}
  1580. ns=$(printf %08d $(( leg_start_sec / nem_time_step_sec - nem_restart_offset )))
  1581. for f in oce ice
  1582. do
  1583. mv ${exp_name}_${ns}_restart_${f}_????.nc ${outdir}
  1584. done
  1585. if has_config pisces
  1586. then
  1587. mv ${exp_name}_${ns}_restart_trc_????.nc ${outdir}
  1588. fi
  1589. fi
  1590. # -------------------------------------------------------------------------
  1591. # *** Move TM5 restart file to archive directory
  1592. # -------------------------------------------------------------------------
  1593. if $leg_is_restart && $(has_config tm5)
  1594. then
  1595. outdir="restart/tm5/$(printf %03d $((leg_number)))"
  1596. mkdir -p ${outdir}
  1597. case ${tm5_istart} in
  1598. 33|32) f=TM5_restart_${leg_start_date_yyyymmdd}_0000_glb300x200.nc
  1599. ;;
  1600. 31) f=save_${leg_start_date_yyyymmdd}00_glb300x200.hdf
  1601. ;;
  1602. esac
  1603. mv $f ${outdir}
  1604. fi
  1605. # -------------------------------------------------------------------------
  1606. # *** Copy OASIS restart files to archive directory
  1607. # NOTE: These files are copied and not moved as they are used in the
  1608. # next leg!
  1609. # Note also that the OASIS restart files present at the end of
  1610. # the leg correspond to the start of the next leg!
  1611. # -------------------------------------------------------------------------
  1612. outdir="${archive_dir}/restart/oasis/$(printf %03d $((leg_number+1)))"
  1613. mkdir -p ${outdir}
  1614. for f in ${oas_rst_files}
  1615. do
  1616. test -f ${f} && cp ${f} ${outdir}
  1617. done
  1618. # -------------------------------------------------------------------------
  1619. # *** Copy rcf files to the archive directory (of the next leg!)
  1620. # -------------------------------------------------------------------------
  1621. outdir="${archive_dir}/restart/ifs/$(printf %03d $((leg_number+1)))"
  1622. mkdir -p ${outdir}
  1623. for f in rcf
  1624. do
  1625. test -f ${f} && cp ${f} ${outdir}
  1626. done
  1627. # -------------------------------------------------------------------------
  1628. # *** Move log files to archive directory
  1629. # -------------------------------------------------------------------------
  1630. outdir="${archive_dir}/log/$(printf %03d $((leg_number)))"
  1631. mkdir -p ${outdir}
  1632. for f in \
  1633. ifs.log ifs.stat fort.4 ocean.output \
  1634. time.step solver.stat guess.log run1/guess0.log \
  1635. amip.log namelist.amip \
  1636. nout.000000 debug.root.?? \
  1637. ctm.tm5.log.0
  1638. do
  1639. test -f ${f} && mv ${f} ${outdir}
  1640. done
  1641. has_config pisces && cp ocean.carbon ${outdir}
  1642. for f in ctm.tm5.log.*
  1643. do
  1644. if [[ -f ${f} ]]
  1645. then
  1646. [[ -s ${f} ]] && mv ${f} ${outdir} || \rm -f ${f}
  1647. fi
  1648. done
  1649. # -------------------------------------------------------------------------
  1650. # *** Write the restart control file
  1651. # -------------------------------------------------------------------------
  1652. # Compute CPMIP performance
  1653. sypd="$(cpmip_sypd $leg_length_sec $(($t2 - $t1)))"
  1654. ncores=0
  1655. has_config nemo && (( ncores+=${nem_numproc} )) || :
  1656. has_config ifs && (( ncores+=${ifs_numproc} )) || :
  1657. has_config xios && (( ncores+=${xio_numproc} )) || :
  1658. has_config rnfmapper && (( ncores+=${rnf_numproc} )) || :
  1659. has_config lpjg && (( ncores+=${lpjg_numproc} )) || :
  1660. has_config tm5 && (( ncores+=${tm5_numproc} )) || :
  1661. has_config amip && (( ncores+=${amip_numproc} )) || :
  1662. chpsy="$(cpmip_chpsy $leg_length_sec $(($t2 - $t1)) $ncores)"
  1663. echo "#" | tee -a ${ece_info_file}
  1664. echo "# Finished leg at `date '+%F %T'` after ${tr} (hh:mm:ss)" \
  1665. | tee -a ${ece_info_file}
  1666. echo "# CPMIP performance: $sypd SYPD $chpsy CHPSY"| tee -a ${ece_info_file}
  1667. echo "leg_number=${leg_number}" | tee -a ${ece_info_file}
  1668. echo "leg_start_date=\"${leg_start_date}\"" | tee -a ${ece_info_file}
  1669. echo "leg_end_date=\"${leg_end_date}\"" | tee -a ${ece_info_file}
  1670. # Need to reset force_run_from_scratch in order to avoid destroying the next leg
  1671. force_run_from_scratch=false
  1672. special_restart=false
  1673. done # loop over legs
  1674. # -----------------------------------------------------------------------------
  1675. # *** Platform dependent finalising of the run
  1676. # -----------------------------------------------------------------------------
  1677. finalise
  1678. exit 0