EC00.sh 78 KB

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