#!/bin/ksh # Description for parsing of gene/ifstraj_999.ecf : # ECF-parser : ecf_parse.pl # SHELL : /bin/ksh # EXPVER : gene # TASK : ifstraj_999 # TMPDIR : $rundir # INC_CONFIG : config.an.h # PIFS_FUNCTIONS : $ROOTDIR/flexbuild/bin/ecf/functions.pifs # Include dir : gene/include # Input file : gene/ifstraj_999.ecf # Output file : _gene/ifstraj_999 # End-of-description set -aeu # _gene/ifstraj_999 created by ecf_parse.pl -- over 48019 lines processed # Variables in the order of appearance : SHELL=/bin/ksh #1 [ecf_parse.pl:219] _SHELL_=/bin/ksh #1 [ecf_parse.pl:219] EXPVER=gene #1 [ecf_parse.pl:220] _EXPVER_=gene #1 [ecf_parse.pl:220] _SUITE_=RAPS #1 [ecf_parse.pl:222] _TASK_=ifstraj_999 #1 [ecf_parse.pl:223] _USER_=$USER #1 [ecf_parse.pl:224] OWNER=$USER #1 [ecf_parse.pl:225] TMPDIR=$rundir #1 [ecf_parse.pl:226] TROOT=$rundir #1 [ecf_parse.pl:227] WROOT=$rundir #1 [ecf_parse.pl:228] PIFS_FUNCTIONS=$ROOTDIR/flexbuild/bin/ecf/functions.pifs #1 [ecf_parse.pl:229] _NPES_IOS_=0 #1 [ecf_parse.pl:233] _NPES_CCMA_=$((SLURM_NPROCS-${_NPES_IOS_})) #1 [ecf_parse.pl:234] _STHOST_=/ec/sthost #1 [ecf_parse.pl:236] _WSHOST_=/ec/wshost #1 [ecf_parse.pl:237] _LOGDIR_=$rundir #1 [ecf_parse.pl:238] _PERIOD_4D_=12 #1 [ecf_parse.pl:239] _WINDOW_LENGTH_4D_=12 #1 [ecf_parse.pl:240] _WINDOW_OFFSET_4D_=3 #1 [ecf_parse.pl:241] _MXUP_TRAJ_=4 #1 [ecf_parse.pl:242] _FSFAMILY_=an #1 [ecf_parse.pl:243] _uptraj_=_1 #1 [ecf_parse.pl:244] _FAMILY1_=uptraj_${_uptraj_} #1 [ecf_parse.pl:245] _FAMILY_=main/ZZlw/an/4dvar/uptraj_${_uptraj_} #1 [ecf_parse.pl:246] _YMD_=19700101 #1 [ecf_parse.pl:247] _HOURCYCLE_=00 #1 [ecf_parse.pl:248] _ECF_NAME_=/release/${_FAMILY_} #1 [ecf_parse.pl:249] _ECF_RID_=$SLURM_JOB_ID #1 [ecf_parse.pl:251] _NPES_AN_=$SLURM_NPROCS #1 [ecf_parse.pl:252] _ACCOUNT_=$SLURM_JOB_ACCOUNT #1 [ecf_parse.pl:253] _QUEUE_=$SLURM_JOB_PARTITION #1 [ecf_parse.pl:254] _NODES_=$SLURM_JOB_NUM_NODES #1 [ecf_parse.pl:255] _NPES_=$SLURM_NPROCS #1 [ecf_parse.pl:256] _NPES_FC_=$SLURM_NPROCS #1 [ecf_parse.pl:257] _THREADS_=$SLURM_CPUS_PER_TASK #1 [ecf_parse.pl:258] _ECF_HOST_=unknown #1 [ecf_parse.pl:260] _ECF_PORT_=NONE #1 [ecf_parse.pl:261] _ECF_PASS_=psw #1 [ecf_parse.pl:262] _ECF_JOB_=ifstraj_999 #1 [ecf_parse.pl:263] _ECF_JOBOUT_=ifstraj_999_${_uptraj_} #1 [ecf_parse.pl:264] _INC_CONFIG_=config.an.h #1 [ecf_parse.pl:265] _QSUB_H_=qsub_parallel.h #1 [$EXPVER/ifstraj_999.ecf:14] _MEM_=unset #1 [$EXPVER/include/qsub_gen.h:6] _JOB_MARKER_=none #1 [$EXPVER/include/qsub_gen.h:7] _HYPERTHREADING_=unset #1 [$EXPVER/include/qsub_gen.h:8] _QSUB_ADD_H_=empty.h #1 [$EXPVER/include/qsub_parallel.h:5] _PIFSENV_MODULE_VERSION_=prepifs #1 [$EXPVER/include/env_setup.h:7] _ECF_FILES_=NONE #1 [$EXPVER/include/config.h:22] _HOUR_=00 #1 [$EXPVER/include/config.h:36] _ECF_HOME_=0 #1 [$EXPVER/include/config.h:43] _ECF_OUT_=0 #1 [$EXPVER/include/config.h:45] _ECF_INCLUDE_=0 #1 [$EXPVER/include/config.h:46] _ECF_TRYNO_=1 #1 [$EXPVER/include/config.h:47] _SCHOST_=${HOST} #1 [$EXPVER/include/config.h:53] _DEBUG_=not_set #1 [$EXPVER/include/config.h:58] _DISPLAY_=not_set #1 [$EXPVER/include/config.h:59] _LENKF_HYBRID_=0 #1 [$EXPVER/include/config.h:60] _LOW_PRIORITY_EXP_=false #1 [$EXPVER/include/config.h:69] _DELTA_DAY_=0 #1 [$EXPVER/include/config.h:71] _DELTA_HOUR_=0 #1 [$EXPVER/include/config.h:76] _DELTA_YEAR_=0 #1 [$EXPVER/include/config.h:81] _SURF_LAG_=0 #1 [$EXPVER/include/config.h:89] _INIENDA_=false #1 [$EXPVER/include/config_dep.h:9] _WAVEENDA_=false #1 [$EXPVER/include/config_dep.h:10] _RECENTRE_=true #1 [$EXPVER/include/config_dep.h:11] _N_PERT_AN_=unset #1 [$EXPVER/include/config_dep.h:12] _EDAPERT_PLUSMINUS_=true #1 [$EXPVER/include/config_dep.h:14] _INIEXPVER_=${INIEXPVER:-unset} #1 [$EXPVER/include/config_dep.h:18] _INISTREAM_=${INISTREAM:-DA} #1 [$EXPVER/include/config_dep.h:19] _INICLASS_=${INICLASS:-unset} #1 [$EXPVER/include/config_dep.h:20] _INIWINOFFSET_=${INIWINOFFSET:-unset} #1 [$EXPVER/include/config_dep.h:21] _INITYPE_=${INITYPE:-unset} #1 [$EXPVER/include/config_dep.h:22] _INISTEP_=${INISTEP:-unset} #1 [$EXPVER/include/config_dep.h:23] _ININUMBER_=unset #1 [$EXPVER/include/config_dep.h:32] _EPSMODE_=EPS #1 [$EXPVER/include/config_dep.h:34] _EPSTROP_=$EPSTROP #1 [$EXPVER/include/config_dep.h:35] _SVMODE_=EPS #1 [$EXPVER/include/config_dep.h:36] _TLMODE_=buizza #1 [$EXPVER/include/config_dep.h:37] _SVREGION_=unset #1 [$EXPVER/include/config_dep.h:38] _SVNUM_=0 #1 [$EXPVER/include/config_dep.h:39] _STREAM_=seas #1 [$EXPVER/include/config.ocapp.h:21] _ERA40END_=2000070100 #1 [$EXPVER/include/config.ocapp.h:44] _EPSSVDIAB_=$EPSSVDIAB #1 [$EXPVER/include/config.ocapp.h:51] _EPSSVNUM_=$EPSSVNUM #1 [$EXPVER/include/config.ocapp.h:52] _EPSSVTCSUB_=0 #1 [$EXPVER/include/config.ocapp.h:61] _EPSSVOP_=0 #1 [$EXPVER/include/config.ocapp.h:63] _INIOFFSET_4D_=3 #1 [$EXPVER/include/config.ocapp.h:80] _OCSUITENO_=0 #1 [$EXPVER/include/config.multidates.h:119] _NOFWS_="" #1 [$EXPVER/include/config.h:302] _OWNER_=${OWNER:-unset} #1 [$EXPVER/include/config.h:320] _ECF_VERSION_=prepifs #1 [$EXPVER/include/config.h:330] _I_EXTRACT_=0 #1 [$EXPVER/include/setup.h:11] _I_EXTRACT_DIR_="" #1 [$EXPVER/include/setup.h:15] _LIMITED_SETUP_=0 #1 [$EXPVER/include/setup.h:17] _FAIL_ON_NO_MODULE_=${FAIL_ON_NO_MODULE:-0} #1 [$EXPVER/include/setup.h:24] _FLEX_SUBMIT_=0 #1 [$EXPVER/include/setup.h:42] _SUBFSFAMILY_="" #1 [$EXPVER/include/setup.h:115] _IFS_PRECISION_=DP #1 [$EXPVER/include/setup.h:173] _SC_BUILD_OPT_=BIT #1 [$EXPVER/include/setup.h:196] _FORCE_IFS_MODULE_=${FORCE_IFS_MODULE} #1 [$EXPVER/include/setup.h:247] _USE_IFS_MODULE_=${USE_IFS_MODULE} #1 [$EXPVER/include/setup.h:247] _MARS_CLIENT_VERSION_=default #1 [$EXPVER/include/setup.h:351] _REINITIALIZE_=false #1 [$EXPVER/include/setup.h:538] _EDFAMILY_=false #1 [$EXPVER/include/setup.h:595] _PROFILE_=0 #1 [$EXPVER/include/setup.h:598] _MARS_DOUBLE_ARCHIVE_=0 #1 [$EXPVER/include/set_marsbondident.h:10] _ECFS_DOUBLE_ARCHIVE_=0 #1 [$EXPVER/include/set_marsbondident.h:11] _MARS_BOND_DRY_RUN_=0 #1 [$EXPVER/include/set_marsbondident.h:23] _MARS_BOND_IDENT_=0 #1 [$EXPVER/include/set_marsbondident.h:35] _NUMINI_=0 #1 [$EXPVER/include/cycle_times:18] _PERIOD_AN_=$PERIOD_AN #1 [$EXPVER/include/cycle_times:53] _INIBEGINDATE_="-999999" #1 [$EXPVER/include/cycle_times:91] _INIBEGINHOUR_=99 #1 [$EXPVER/include/cycle_times:92] _NEMOCOUPLED_=0 #1 [$EXPVER/include/getgrb:182] _MEMBER_=0 #1 [$EXPVER/include/ifsmin:177] _ADJMIN_=false #1 [$EXPVER/include/ifsmin:280] _LERADSW2_=".true." #1 [$EXPVER/include/ifsmin:933] _NAER_=1 #1 [$EXPVER/include/ifsmin:1194] _LEKPERT_=.true. #1 [$EXPVER/include/ifsmin:1466] _LEKPERTS_=.true. #1 [$EXPVER/include/ifsmin:1467] _JB_DIST_READ_=.false. #1 [$EXPVER/include/ifsmin:1781] _MIXGRIB_=0 #1 [$EXPVER/include/ifsmin:2620] _LRESTART999_=false #1 [$EXPVER/include/ifstraj:31] _LCOMPBGDEP_=false #1 [$EXPVER/include/ifstraj:35] _LSPSDT_=${LSPSDT:-true} #1 [$EXPVER/include/ifstraj:1267] _LSPP_=${LSPP:-false} #1 [$EXPVER/include/ifstraj:1268] _LCYPAT_=${LCYPAT:-true} #1 [$EXPVER/include/ifstraj:1269] _LCYPAT_COLD_=${LCYPAT_COLD:-false} #1 [$EXPVER/include/ifstraj:1270] _NWTOUT_=4 #1 [$EXPVER/include/ifstraj:1779] _LNEMOCOUP_=0 #1 [$EXPVER/include/ifstraj:2231] _FC_OBSTAT_RANGE_="-99999" #1 [$EXPVER/include/ifstraj:2955] _subtraj_=0 #1 [$EXPVER/include/ifsvar:150] _NPES_IOSERVER_=0 #1 [$EXPVER/include/prep_nemoIFS:31] _XIOS_NPROC_=0 #1 [$EXPVER/include/prep_nemoIFS:31] _NEMOCONFIG_=ORCA1_Z42 #1 [$EXPVER/include/prep_nemoIFS:35] _EPSWAMRESOL_=${WAMRESOL} #1 [$EXPVER/include/prep_nemoIFS:69] _EPSCOUPLE_=0 #1 [$EXPVER/include/prep_nemoIFS:136] _FCCOUPLE_=0 #1 [$EXPVER/include/prep_nemoIFS:136] _INEXTENDED_=0 #1 [$EXPVER/include/prep_nemoIFS:137] _EPSLEG_=1 #1 [$EXPVER/include/prep_nemoIFS:200] _RCHUNK_NR_=0 #1 [$EXPVER/include/prep_nemoIFS:203] _RESTARTCHUNKING_=0 #1 [$EXPVER/include/prep_nemoIFS:296] _RESTART_=false #1 [$EXPVER/include/prep_nemoIFS:296] _EPSINISTEP_PREVIOUS_=0 #1 [$EXPVER/include/prep_nemoIFS:319] _ASSIMMODE_=bkg #1 [$EXPVER/include/prep_nemoIFS:469] _NOUTIT_=0 #1 [$EXPVER/include/prep_nemoIFS:499] _LNOCEANOBS_=0 #1 [$EXPVER/include/prep_nemoIFS:702] _USEXIOS_=0 #1 [$EXPVER/include/prep_nemoIFS:781] _XIOS_PAR_=0 #1 [$EXPVER/include/nemo_namelist_xios.h:8] _XIOS_VER_=1 #1 [$EXPVER/include/nemo_namelist_xios.h:37] _RUNHINDCAST_=0 #1 [$EXPVER/include/nemo_namelist.h:46] _USE_HUGEPAGE_=0 #1 [$EXPVER/include/run_parallel:59] _HUGEPAGE_SIZE_=2 #1 [$EXPVER/include/run_parallel:60] _HUGEPAGE_MEMORY_=96000 #1 [$EXPVER/include/run_parallel:61] _THREAD_STACKSIZE_MB_=399 #1 [$EXPVER/include/run_parallel:63] _THREAD_GUARDSIZE_MB_=64 #1 [$EXPVER/include/run_parallel:64] _COREDUMP_SIZE_=4 #1 [$EXPVER/include/run_parallel:65] _TIMEOUT_=300 #1 [$EXPVER/include/run_parallel:202] _QUIETWARNING_=0 #1 [$EXPVER/include/run_parallel:203] _USE_DR_HOOK_=0 #1 [$EXPVER/include/run_parallel:262] _CHECK_MEM_=0 #1 [$EXPVER/include/run_parallel:412] _DEBUGGER_=ddt #1 [$EXPVER/include/run_parallel:418] _PROFILE_EXE_=0 #1 [$EXPVER/include/run_parallel:428] _PROFILER_=map #1 [$EXPVER/include/run_parallel:430] _OMPTRACE_=0 #1 [$EXPVER/include/run_parallel:433] _USE_DARSHAN_SINGLE_=0 #1 [$EXPVER/include/run_parallel:533] _USE_DARSHAN_PARALLEL_=0 #1 [$EXPVER/include/run_parallel:542] _USE_IPM_=0 #1 [$EXPVER/include/run_parallel:557] _DARSHAN_FLAGS_="" #1 [$EXPVER/include/run_parallel:627] _NWRTOUTWAM_=12 #1 [$EXPVER/include/wave_set_nwrtoutwam:20] _nuptra_range_=0 #1 [$EXPVER/ifstraj_999.ecf:203] _L_CALCULATE_JBW_STATS_=false #1 [$EXPVER/ifstraj_999.ecf:204] _OOPSRUN_=false #1 [$EXPVER/ifstraj_999.ecf:205] _LSSA_ONLY_=false #1 [$EXPVER/ifstraj_999.ecf:206] _mode_=fc #1 [$EXPVER/ifstraj_999.ecf:207] _COMBTASK_=0 #1 [$EXPVER/ifstraj_999.ecf:208] _LUSE_REDUCED_OBS_=false #1 [$EXPVER/ifstraj_999.ecf:210] _LCONTINUOUS_DA_=$LCONTINUOUS_DA #1 [$EXPVER/ifstraj_999.ecf:211] _SUBSUBFSFAMILY_="" #1 [$EXPVER/include/nemo.h:15] _RUNNEMOFCST_=0 #1 [$EXPVER/include/nemo.h:16] _RUNNEMOVAR_=0 #1 [$EXPVER/include/nemo.h:17] _N_MONTHLY_=0 #1 [$EXPVER/include/nemo.h:22] _N_FCSTLEN_=0 #1 [$EXPVER/include/nemo.h:23] _N_INTERVAL_=0 #1 [$EXPVER/include/nemo.h:24] _FCLENGTH_=0 #1 [$EXPVER/include/nemo.h:25] _N_START_DAY_=$YMD #1 [$EXPVER/include/nemo.h:30] _N_END_DAY_=$N_START_DAY #1 [$EXPVER/include/nemo.h:32] _LINNEMONRT_=0 #1 [$EXPVER/include/nemo.h:34] _CHUNK_=1 #1 [$EXPVER/include/nemo.h:35] _NEMONRTCHUNKS_=1 #1 [$EXPVER/include/nemo.h:37] _DAY_=1 #1 [$EXPVER/include/nemo.h:38] _NRTOFFSET_=0 #1 [$EXPVER/include/nemo.h:38] _LCDA_NRT_=False #1 [$EXPVER/include/nemo.h:42] _RUNQC_=0 #1 [$EXPVER/include/nemo.h:127] _OCTOTAL_=1 #1 [$EXPVER/include/nemo.h:224] _PERTNO_="" #1 [$EXPVER/include/nemo.h:226] _EPSMEMBER_=0 #1 [$EXPVER/include/nemo.h:229] _OCFCPERT_=$EPSMEMBER #1 [$EXPVER/include/nemo.h:230] _OCPERT_=0 #1 [$EXPVER/include/nemo.h:231] _LPERT_OBS_=0 #1 [$EXPVER/include/nemo.h:244] _LPERT_FOR_=0 #1 [$EXPVER/include/nemo.h:245] _chunk_=1 #1 [$EXPVER/include/nemo.h:314] _NTIMESTEP_=${NTIMESTEP} #1 [$EXPVER/include/nemo.h:498] _NTIMESTEP_INNER0_=${NTIMESTEP_INNER0:=86400} #1 [$EXPVER/include/nemo.h:499] _NTIMESTEP_INNER1_=${NTIMESTEP_INNER1:=86400} #1 [$EXPVER/include/nemo.h:500] _NTIMESTEP_INNER2_=${NTIMESTEP_INNER2:=86400} #1 [$EXPVER/include/nemo.h:501] _NAM_NN_FSBC_=${NAM_NN_FSBC:-1} #1 [$EXPVER/include/nemo.h:522] _LNRT_=0 #1 [$EXPVER/include/nemo.h:971] _RESTARTCHUNKPERIOD_=0 #1 [$EXPVER/include/nemo.h:1077] _RCHUNK_LAST_=0 #1 [$EXPVER/include/nemo.h:1099] _RCHUNK_STOP_=0 #1 [$EXPVER/include/nemo.h:1102] _RCHUNK_START_=0 #1 [$EXPVER/include/nemo.h:1102] _EPSINISTEP_=0 #1 [$EXPVER/include/nemo.h:1102] _OBSSST_=REYNOLDS #1 [$EXPVER/include/nemo.h:1261] _OBSSLA1_=E2 #1 [$EXPVER/include/nemo.h:1262] _OBSSLA2_=TP #1 [$EXPVER/include/nemo.h:1263] _NEMO_NPROC_=${NEMO_NPROC:-1} #1 [$EXPVER/include/nemo.h:1428] _NEMO_NPROCX_=${NEMO_NPROCX:-0} #1 [$EXPVER/include/nemo.h:1429] _NEMO_NPROCY_=${NEMO_NPROCY:-0} #1 [$EXPVER/include/nemo.h:1430] _NEMOVAR_NPROC_=0 #1 [$EXPVER/include/nemo.h:1431] _NEMOVAR_NPROCX_=0 #1 [$EXPVER/include/nemo.h:1432] _NEMOVAR_NPROCY_=0 #1 [$EXPVER/include/nemo.h:1433] _LNTAOCUR_=0 #1 [$EXPVER/include/nemo.h:1440] _LNADCPCUR_=0 #1 [$EXPVER/include/nemo.h:1449] _LNSMOSICE_=0 #1 [$EXPVER/include/nemo.h:1460] _LNSMOSICE_DIAGS_=0 #1 [$EXPVER/include/nemo.h:1466] _NCCHUNKSIZE_=4194304 #1 [$EXPVER/include/nemo.h:1764] _FCCHUNK_=1 #1 [$EXPVER/include/chunk.h:78] _FCCHUNKSUB_=1 #1 [$EXPVER/include/chunk.h:79] _GRPSTRT_="-1" #1 [$EXPVER/ifstraj_999.ecf:226] _GRPEND_="-1" #1 [$EXPVER/ifstraj_999.ecf:227] _LAEOLUSAMD_=false #1 [$EXPVER/ifstraj_999.ecf:270] _KEEP_WORKDIR_=no #1 [$EXPVER/include/endt.h:22] _VAR_DELAY_=0 #1 [$EXPVER/ifstraj_999.ecf:416] # DESCRIPTION # # 4dvar - Run the main analysis. ifstraj, ifsmin and ifstraj_999 tasks. # # DEPENDS ON # # restartodb, copyodb (eda members) # #include $EXPVER/include/ifstraj_999.man ($EXPVER/ifstraj_999.ecf) # ######################################################################## # # ifstraj_999 # ----------- # # CONSOLE # # 1) If fails with # # "lib-???? : UNRECOVERABLE library error # An unformatted read or write is not allowed on a formatted file. " # # Rerun task a few times before calling analysts. This is the only way to fix this problem. # Problem under investigation.... # # # 2) # ERRORS should be handled automatically otherwise # # wait for final ifstraj task to complete then # search and execute the related task restart_999. # # After this has completed then set ifstraj_999 complete. Can always run # this as an alternative to ifstraj_999. # # # ANALYST # restat_999 always fixes - otherwise call RD # #end-of-include $EXPVER/include/ifstraj_999.man ($EXPVER/ifstraj_999.ecf) : #include $EXPVER/include/qsub_parallel.h ($EXPVER/ifstraj_999.ecf) #include $EXPVER/include/qsub_gen.h ($EXPVER/include/qsub_parallel.h) # TROIKA queue = ${_QUEUE_} # TROIKA name = ${_EXPVER_}_${_FAMILY1_}_${_TASK_} # TROIKA output_file = ${_ECF_JOBOUT_} # TROIKA join_output_error = yes # TROIKA billing_account = ${_ACCOUNT_} # TROIKA memory_per_cpu = ${_MEM_} # TROIKA job_marker = ${_JOB_MARKER_} # TROIKA hyperthreading = ${_HYPERTHREADING_} #end-of-include $EXPVER/include/qsub_gen.h ($EXPVER/include/qsub_parallel.h) # TROIKA threads_per_task = ${_THREADS_} # TROIKA total_tasks = ${_NPES_} #end-of-include $EXPVER/include/empty.h ($EXPVER/include/qsub_parallel.h) #end-of-include $EXPVER/include/qsub_parallel.h ($EXPVER/ifstraj_999.ecf) #include $EXPVER/include/config.h ($EXPVER/ifstraj_999.ecf) echo Job ${SLURM_JOBID:-\"unknown\"} started on ${HOST:-$(hostname)} at $(date +%y/%m/%d-%H:%M:%S) set -xa #include $EXPVER/include/suite_type.h ($EXPVER/include/config.h) SUITE_TYPE="ecf" #end-of-include $EXPVER/include/suite_type.h ($EXPVER/include/config.h) #include $EXPVER/include/env_setup.h ($EXPVER/include/config.h) if [[ -z ${_env_setup_done:-""} ]]; then set +x echo "Sourcing: /etc/profile" . /etc/profile # Load the pifsenv module echo "Running: module load pifsenv/${_PIFSENV_MODULE_VERSION_}" module load pifsenv/${_PIFSENV_MODULE_VERSION_} set -x #======================================================================= # Set up PS4 prompt #======================================================================= typeset -Z2 _H _M _S; SECONDS=$(date +%s) export PS4='${__[(_H=SECONDS/3600%24)==(_M=SECONDS/60%60)==(_S=SECONDS%60)]-$_H:$_M:$_S} ${0##*/}[${LINENO}] ' #======================================================================= # Basic variables #======================================================================= export TMPDIR=${TMPDIR:-/tmp} export HOST=${HOST:-$(hostname)} export NPES=${NPES:-0} #======================================================================= # Start timer #======================================================================= export _script_start_time=$SECONDS export _script_parallel_time=0 export _script_parallel_count=0 export _script_serial_time=0 export _script_serial_count=0 export _run_parallel_timer_file=$TMPDIR/run_parallel_timer_file.$$ export _run_parallel_runs_file=$TMPDIR/run_parallel_runs_file.$$ #======================================================================= # Machine specfic setup #======================================================================= GHOST=$(getThisHost) #======================================================================= # Check for supported $ARCH #======================================================================= export ARCH=$(echo ${ARCH:-none} | tr '[A-Z]' '[a-z]') [[ ${GHOST} == hpc2020 ]] && ARCH="atos-rome64" if [[ ${ARCH} != @(linux|cray|atos-rome64) ]]; then echo "Invalid architecture , see your prepIFS administrator. \$ARCH=${ARCH}" exit 1 fi #======================================================================= # Check for 64bit linux #======================================================================= export LINUX64="" if [[ $ARCH = "linux" ]]; then if [[ $CPU_TYPE = "x86_64" ]]; then LINUX64=64 fi fi #======================================================================= # Get ksh functions #======================================================================= export FPATH=${FPATH:-"."} export PIFS_FUNCTIONS # Get TROOT for supercomputer #include $EXPVER/include/config.sc.h ($EXPVER/include/env_setup.h) #========================================================== # SMS Variables for scconfig #========================================================== NEMO_PRIORITY=50 # TBD NEMO_NPROC=48 NEMO_NPROCX=8 NEMO_NPROCY=6 NEMOVAR_NPROC=48 NEMOVAR_NPROCX=8 NEMOVAR_NPROCY=6 # end TBD CPUTIME_NEMO=10000 MEM_NEMO=1920 CPUTIME_NEMOINI=100 MEM_NEMOINI=960 CPUTIME_NEMOARCH=100 MEM_NEMOARCH=960 THREADS_NEMOPOSTPP=2 TROOT=${TROOT:-"/ec/fws4/sb/work/rd/$USER"} WROOT=${WROOT:-"/ec/fws4/sb/work/rd/$USER"} WROOT_OPER="/sc1/tcwork/emos/emos_data" WROOT_ESUITE="/s2o2/emos_esuite/emos_data" LOGROOT=${LOGROOT:-"/ec/fws4/sb/log/rd"} XROOT="/home/rdx" XROOT_CAMS="/home/ecgems" OROOT="/emos_data" ODATA="/home/emos/data" FWS_ROOT="/ec/fws4" ODBROOT_SERVER="/ec/fws4/odb/prod" FDB_ROOT=${FDB_ROOT:-"/ec/fws4/fdb"} FDB_IROOT=${FDB_IROOT:-"/ec/fws4/fdb" FWS_LB_STRIPE_COUNT=1 set FWS_LB_STRIPE_SIZE 1 # #end-of-include $EXPVER/include/config.sc.h ($EXPVER/include/env_setup.h) # Try and find functions.pifs from scripts repository if available, otherwise # it should already be available in the path from pifsenv if [[ -d ${PIFS_FUNCTIONS:-$TROOT/${_EXPVER_}/functions.pifs} ]]; then # SC PIFS_FUNCTIONS=${PIFS_FUNCTIONS:-$TROOT/${_EXPVER_}/functions.pifs} FPATH=$PIFS_FUNCTIONS:$PIFS_FUNCTIONS/ecflow:$FPATH PATH=$PIFS_FUNCTIONS:$PIFS_FUNCTIONS/ecflow:$PATH fi #======================================================================= # Load python3 and eclib now, LOAD_MODULE is available due to previous # block #======================================================================= LOAD_MODULE python3 LOAD_MODULE eclib # This needs to be loaded after python which also defines some date utils with the same name #======================================================================= # signal list is required for module function (defined in FPATH) #======================================================================= #include $EXPVER/include/trap_signal_list.h ($EXPVER/include/env_setup.h) export TRAP_SIGNAL_LIST='1 2 3 4 5 6 7 8 13 24 31' export ECF_SIGNAL_LIST=$TRAP_SIGNAL_LIST #end-of-include $EXPVER/include/trap_signal_list.h ($EXPVER/include/env_setup.h) _env_setup_done=1 fi #end-of-include $EXPVER/include/env_setup.h ($EXPVER/include/config.h) echo "\ This is the config.h file and\n\ System variables used were: \n\ USER $USER\n\ TMPDIR $TMPDIR\n\ HOST $HOST\n\ ARCH $ARCH\n\ PATH $PATH\n\ " echo Job started at $(date) #========================================================== # Update active experiment list #========================================================== id=$(echo ${_ECF_FILES_} | cut -f4-6 -d"/" | sed "s|/|:|g") [[ -n ${WROOT:-""} && ${WROOT#/fws} != ${WROOT} ]] && id=$(echo ${WROOT} | cut -f2 -d"/"):$id active_file=~rdx/active_exps/$id (umask 111 ; touch $active_file || true) unset id active_file #========================================================== # BASIC VARIABLES #========================================================== LOGDIR=${_LOGDIR_} ymd=${_YMD_} hour=$(printf %02d ${_HOUR_}) BASETIME=$(echo ${ymd}${hour} | cut -c1-10) hourcycle=$(printf %02d ${_HOURCYCLE_}) CYCLETIME=$(echo ${ymd}${hourcycle} | cut -c1-10) SUITE_TYPE=ecf ECF_NAME=${_ECF_NAME_} ECF_HOME=${_ECF_HOME_} ECF_FILES=${_ECF_FILES_} ECF_OUT=${_ECF_OUT_} ECF_INCLUDE=${_ECF_INCLUDE_} ECF_TRYNO=${_ECF_TRYNO_} ECF_JOBOUT=${_ECF_JOBOUT_} # Flexsubmit means that SCHOST may not be correct, so set it explictly from $HOST # ==RFA== Will need update once we know host names of BOND atos machines SCHOST=${_SCHOST_} FAMILY="${_FAMILY_}" FSFAMILY="/${_FSFAMILY_}" DEBUG=${_DEBUG_} DISPLAY=${_DISPLAY_} ECF_LENKF_HYBRID=${_LENKF_HYBRID_} # From 25r4 onwards, NPROCA and NPROCB will not be supplied # by prepIFS, but will be calculated internally. NPROCA=1 NPROCB=1 NPROC=1 # Indicate if this is a low priortiy experiment LOW_PRIORITY_EXP=${_LOW_PRIORITY_EXP_} if [[ ${_DELTA_DAY_} -ne 0 ]] ; then delta=$(expr ${_DELTA_DAY_} \* 24) BASETIME=$(newdate $BASETIME $delta) fi if [[ ${_DELTA_HOUR_} -ne 0 ]] ; then delta=$(expr ${_DELTA_HOUR_}) BASETIME=$(newdate $BASETIME $delta) fi if [[ ${_DELTA_YEAR_} -ne 0 ]] ; then refyear=$( echo $BASETIME | cut -c 1-4 ) delta=$(expr ${_DELTA_YEAR_}) theyear=$(( refyear + delta )) mmddhh=$(echo $BASETIME | cut -c 5-10 ) BASETIME="${theyear}${mmddhh}" fi if [[ ${_SURF_LAG_} -ne 0 ]] ; then delta=$(expr ${_SURF_LAG_}) BASETIME=$(newdate $BASETIME -$delta) fi # Set a default value of NPROMA if [[ $ARCH == atos-rome64 ]]; then DEFAULT_NPROMA_DP=-16 DEFAULT_NPROMA_SP=-16 else DEFAULT_NPROMA_DP=0 DEFAULT_NPROMA_SP=0 fi if [ $FSFAMILY = "/make" ] ; then echo "############################################" echo "########### include config.make.h ##########" echo "############################################" #include $EXPVER/include/config.make.h ($EXPVER/include/config.h) #========================================================== # Variables configuring emptyNamelist #========================================================== ENAMELIST="general" # #========================================================== # Variables configuring WeakConstraints4DVar #========================================================== LWEAK4DVAR=true NTYPE_MODERR=2 ALPHAQ=0.5 LINITCV=true LMODERRFC=true LBGMODERR=true WEAK4D_INTERV=0.0 LMODERR_PERIODIC=false NSPLIT4DWIN=0 LBALSTRATO=false # #========================================================== # Variables configuring VariationalAnalysis #========================================================== NMXLEN=128 RESOLINC_0=191 GTYPEINC_0="l_2" RESOLINC_1=191 GTYPEINC_1="l_2" RESOLINC_2=255 GTYPEINC_2="l_2" RESOLINC_3=255 GTYPEINC_3="l_2" RESOLINC_4=255 GTYPEINC_4="l_2" TSTEP_INC_0=1800 TSTEP_INC_1=1800 TSTEP_INC_2=900 TSTEP_INC_3=1200 TSTEP_INC_4=1200 PERIOD=6 PERIOD_4D=12 WINDOW_LENGTH_4D=12 WINDOW_OFFSET_4D=3 PERIOD_BG=12 STEP_BG=3 MXUP_TRAJ=2 TRAJNOFDB=false NMINSIMPHY=1 ITER_MIN_0=50 ITER_MIN_1=50 ITER_MIN_2=50 ITER_MIN_3=50 ITER_MIN_4=50 LVERIFY_SCREEN=true LATE4DSTART=true LTRAJHR=true LINRADEX=true LNMPHYS=true LPROPTL=false LGPINNER=true LREPRO4DVAR=false LFGNOTBG=false LFSOBS=false FILTERRESOL=255 REDNMC=0.95 # #========================================================== # Variables configuring testOfAnalysis #========================================================== NTESTVAR=3 LCVTEST=true LTLTEST=false LINTEST=false LADTEST=true LRTTOV_ADTEST=false LGRTEST=false LTESTINC=false LVAR_ONE_OBS=false LTWINTRUTH=false LTWINEXP=false TRUTHEXP="none" # #========================================================== # Variables configuring SurfaceAnalysis #========================================================== OBS_SURF_CONV=true LSEKF=false LUSE_EDA_JACOB=true edaHexpid="0001" edaHclass="od" edaHstream="ELDA" edaHnmembers="0" LREAD_EDA_COV_SSA=true LSAVE_SEKF=false LOSTIA=true LHADISST2=false LECURR=false INIECURR=false LUSE_ASCAT=true LUSE_SMOS_TB=false LUSE_SMOS_SM=true NESDIS_RESOL="4" LNESDISIMS=true SSA_GRIB_BITS=16 # #========================================================== # Variables configuring scconfig #========================================================== NPES_SV=4 THREADS_SEKF=16 NPES_AN=224 THREADS_AN=16 THREADS_MIN=16 THREADS_TRAJ=16 THREADS_FINAL_TRAJ=16 NPOOLS=224 NPES_ENKF=512 THREADS_ENKF=4 NPES_ENKFPP=1 THREADS_ENKFPP=1 NPES_FC=376 THREADS_FC=4 DEPTH_IOSERVER=4 THREADS_IOSERVER=1 NPES_MKCMA=4 SCLOGSROOT="/home/rdx/pifsexps/logs" LOGROOT_NOFWS="/ec/vol/ifs/logs" FDB_MPI_CACHE="no" # #========================================================== # Variables configuring Satellites #========================================================== LTOVS=.false. L_SCREEN_LEVEL_OBSOP=false LATOVS=true LAMSUA_ALLSKY=true LMHS_ALLSKY=true LAIRS=true LIRAS=true LMWTS=true LMWTS2=true MWTS2_AVERAGE="3x3" LMWHS=true LMWHS2=true LSAPHIR=true LATMS=true ATMS_AVERAGE="3x3" LATMS_ALLSKY=false LSCAT=.true. LSCATT_NEUTRAL=true LGEOS=true LRAIN1D=false LRAIN4D=true LSSMI=true LSSMIS=true LAMSRE=true LAMSR2=true LTMI=true LGMI=true LMWRI=true LWINDSAT=true LMWIMG=true LMERIS=true LREO3=true LAEOLUS=true LAEOLP=false LAEOL2BP=false LSMOS=false SMOS_AVERAGE=true LSMAP=false LGPSRO=true LIASI=true LCRIS=true LHIRAS=false LIKFS2=false LGBRAD=true LNEXRAD=true LOPERA=false NPRACCL=21600 LRAINGG=false LSYNOP_RGG=false LFULL_IASI=false AMSU_LAND="Dynamic_emis" EMISKF_PATH="standard" LEMISKF=true LIRCLD_SCREEN_HIRS=false LIRCLD_ASSIM_HIRS=false LIRCLD_SCREEN_AIRS=false LIRCLD_ASSIM_AIRS=false LIRCLD_SCREEN_IASI=false LIRCLD_ASSIM_IASI=false # #========================================================== # Variables configuring SatImageSim #========================================================== LSATIM_NEW=false SATIMSTART1=999 SATIMEND1=-999 SATIMSTART3=0 SATIMEND3=12 SATIMSTART6=18 SATIMEND6=120 SATIMSTART12=132 SATIMEND12=240 LSATIMSIM=false SATIMSTART=0 SATIMEND=24 SATIMSTEP=3 # #========================================================== # Variables configuring climate #========================================================== CLMSST=no LBCSST=true PERSST=true FORCE_SST=no SSTLEN=0 SSTINT="1" LONGRANGE_FORCING=false # #========================================================== # Variables configuring Reanalysis #========================================================== ERAFS=false LERA5=false LONGRANGE_FORCING=false RSTBIAS_TS=false ERAPRODUCTS="/era/intprod/data/monitor" LDIAGS_ERA=false LMON_ERA=false ERA_NOGETBIAS=false ERA_POSTPROC=false # #========================================================== # Variables configuring PrognosticHessianTargeting #========================================================== PHT_PRONOBS=false PHT_TOST03=false PHT_LEADTIME_OBS=48 PHT_LEADTIME_BKG=48 PHT_USE_EXPBKG=false PHT_EXPBKG="0001" PHT_PERIOD_HSV=24 PHT_DUPLI_ODB=false PHT_FDBK_SV=false PHT_BLACK_TOST="empty" # #========================================================== # Variables configuring ppgeneral #========================================================== FULL_POS=yes LISENTRPP=false LPPL=1 LPSU=1 LPML=1 LPPV=0 LPTH=0 LPGZ=0 PPFRQ=12 PPSTEPS="-34/0/-3/-6/-9/-12/-18/-24/-30/-36/-42/-48/-54/-60/-66/-72/-78/-84/-90/-96/-102/-108/-114/-120/-126/-132/-144/-156/-168/-180/-192/-204/-216/-228/-240" PPSTEPS_ML="-7/-18/-24/-30/-36/-66/-90/-114" BRF=0 ERF=240 FRQRF=-1 D3GGEXTRAPPS="0" D3SHEXTRAPPS="0" D3GGEXTRAPPP="0" D3SHEXTRAPPP="0" D3GGEXTRAPPT="0" D3SHEXTRAPPT="0" D3GGEXTRAPPV="0" D3SHEXTRAPPV="0" D2SHEXTRAPP="0" SFCEXTRAPP="0" D3GGFIELDSS="133" D3GGFIELDSSTEND="" D3GGFIELDSP="" D3GGFIELDST="133" D3GGFIELDSV="133" D3SHFIELDSS="130/135/138/155" D3SHFIELDSP="129/130/135/138/155/157" D3SHFIELDST="60" D3SHFIELDSV="130" D2SHFIELDS="129/152" SFCFIELDS="31/32/33/34/35/36/37/38/39/40/41/42/44/45/49/50/57/58/59/78/79/129/136/137/139/141/142/143/228/144/145/146/147/148/151/159/164/165/166/167/168/169/170/172/175/176/177/178/179/180/181/182/183/186/187/188/189/195/196/197/198/201/202/205/206/208/209/210/211/212/235/236/238/228008/228009/228010/228011/228012/228013/228014/243/244/245/8/9/228080/228081/228082/228083/228084/228085/228001/260121/260123/228129/228130/003020/228029/228251/228217/228218/228219/228220/228221/260015/228050" SFCFIELDS_ACCUM1="" FIRST_ACCUM1h=1 LAST_ACCUM1h=6 SFCFIELDS_ACCUM3="" FIRST_ACCUM3h=3 LAST_ACCUM3h=30 SFCFIELDS_ACCUM6="" FIRST_ACCUM6h=6 LAST_ACCUM6h=120 LOCEANEXTRGRIB=false LNEMOGRIBMASK=false PRESSURE="1000/925/850/700/500/400/300/250/200/150/100/70/50/30/20/10/7/5/3/2/1" HEIGHT="500/1000/2000" THETA="315/330/370" PV="1000/1500/2000" ETA="1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28/29/30/31/32/33/34/35/36/37/38/39/40/41/42/43/44/45/46/47/48/49/50/51/52/53/54/55/56/57/58/59/60" # #========================================================== # Variables configuring Plots #========================================================== PLOT_RMS=false LGRIDSTAT=false WEBPLOTINTERVAL=5 STAARCHIVE=false LOBSTAT_ALL=true SCOR=no SCOP=no IVER_MARS_GRID="2.50/2.50" IVER_MARS_RESOL="AUTO" IVER_MARS_TRUN="AUTO" IVER_MARS_INTGRID="AUTO" VERFEXPVER="0001" VERFCLASS="od" VERFTYPE="an" VERFCTYPE="fc" VERFCREATE=false VERFEXP2="0001" VERFEXPVER2="0001" VERFCLASS2="od" VERFTYPE2="an" VERIFY_GRIB_API_VERSION="default" VERIFY_ECCODES_VERSION="default" # #========================================================== # Variables configuring Gases #========================================================== LOZONE=true LOZONECH=true LO3CH_HLO=false O3CHEM="H1.0" # #========================================================== # Variables configuring SatelliteMonitor #========================================================== DUMMY=false LMONITORING=false OBS_MONITORING="" LASCATSM=true # #========================================================== # Variables configuring Observations #========================================================== LBUFR=true OBPATH="ops" OBSTREAM="ELDA" OBSCLASS="OD" BASEVER="0001" LCOPE_OVERWRITE_BUOY_PMSL_WITH_PSTN=false B2O_AIRCRAFT_TYPES="" B2O_DEFAULT_BUOY_HEIGHT="0" B2O_BUOY_HEIGHTS="" B2O_MOBILE_LAND_STATIONS=false B2O_TEMP_MAX_LEVELS="5000" B2O_TEMP_ASCENT_BATCH_INTERVAL="900" B2O_TEMP_ASCENT_BATCH_AVERAGING=false B2O_TEMP_DESCENT_BATCH_INTERVAL="300" B2O_TEMP_DESCENT_BATCH_AVERAGING=false B2O_TEMP_DROP_BATCH_INTERVAL="60" B2O_TEMP_DROP_BATCH_AVERAGING=false B2O_STATION_POSITION_TOLERANCE="0.1" B2O_STATION_HEIGHT_TOLERANCE="5.0" B2O_EXTRACT_RH2M=true COPE_OVERRIDE_RH2M=true COPE_APPLY_TD_GT_T_CHECK=true LEXPERIMENTAL_OBS=false EXP_OBS_FORMAT="h5" EXP_OBS_DATA_PATH="ec:/path/to/experimental/data/files" EXP_OBS_MAPPING_FILE="ec:/path/to/mapping_file.dat" OBSASCIILIST="""" OBSODB2LIST="""" LOBS_SCREEN=false ANEMOM_HT=true RSTBIAS=true LREDUCOB=false LOBSCOR=false TSLOTSEC=1800 OBNLAT=90.0 OBWLON=-180.0 OBSLAT=-90.0 OBELON=180.0 # #========================================================== # Variables configuring odb #========================================================== ODB_MAXHANDLE=3 ODB_TIMESLOT_RESOLUTION=60 ODB_CTX_DEBUG=0 ODB_CATCH_SIGNALS=0 ODB_ERRTRA=1 ODB_CCMA_OBS_RANDOMIZE=0 ODB_CCMA_IGNORE_TSLOTS=0 ODB_CCMA_CREATE_DIRECT=1 ODB_LOADBALANCE_CCMA=0 ODB_REPRODUCIBLE_SEQNO=-1 ODB_FLPCHECK=0 ODB_INTCHECK=0 ODB_WRITE_EMPTY_FILES=0 ODB_IO_METHOD=4 ODB_IO_FILESIZE=128 ODB_PACKING=-1 ODB_TEST_INDEX_RANGE=0 ODB_IO_OPENMP=0 PMETHOD=2 ODB_CODE_MAPPINGS="/home/rdx/data/47r3/an/odb_code_mappings.dat" # #========================================================== # Variables configuring odb_arch #========================================================== ODBSAVE_MFB="" ODBSAVE_MFB_EXTRA="" OFB_AUTO_SET="DO_NOT_CHANGE" MFB_AUTO_SET="DO_NOT_CHANGE" ODBSAVE_OFB="" ODBSAVE_OFB_EXTRA="" DUMMY=false ODBSAVE_SQLFILES_PATH="" ODBSAVE_TABLE_DESC="NONE" ODBSAVE_TABLE_HDR="NONE" ODBSAVE_TABLE_TIMESLOT_INDEX="NONE" ODBSAVE_TABLE_MODSURF="NONE" ODBSAVE_TABLE_INDEX="NONE" ODBSAVE_TABLE_BODY="NONE" ODBSAVE_TABLE_ERRSTAT="NONE" ODBSAVE_TABLE_GBRAD="NONE" ODBSAVE_TABLE_GBRAD_BODY="NONE" ODBSAVE_TABLE_RAINGG="NONE" ODBSAVE_TABLE_RAINGG_BODY="NONE" ODBSAVE_TABLE_CONV="NONE" ODBSAVE_TABLE_CONV_BODY="NONE" ODBSAVE_TABLE_SAT="NONE" ODBSAVE_TABLE_RADIANCE="NONE" ODBSAVE_TABLE_RADIANCE_BODY="NONE" ODBSAVE_TABLE_COLLOCATED_IMAGER_INFORMATION="NONE" ODBSAVE_TABLE_CLOUD_SINK="NONE" ODBSAVE_TABLE_ALLSKY="NONE" ODBSAVE_TABLE_ALLSKY_BODY="NONE" ODBSAVE_TABLE_SCATT="NONE" ODBSAVE_TABLE_SCATT_BODY="NONE" ODBSAVE_TABLE_SATOB="NONE" ODBSAVE_TABLE_GNSSRO="NONE" ODBSAVE_TABLE_GNSSRO_BODY="NONE" ODBSAVE_TABLE_UPDATE="NONE" # #========================================================== # Variables configuring ForecastErrors #========================================================== UPTRAJ_FCE=-1 NWRIEVEC=25 RESOLFCE=42 ITER_FCE=150 LANOBSENS=false # #========================================================== # Variables configuring Packages #========================================================== PIFS_MODULEENV_CDO="1.9.10" PIFS_MODULEENV_ECLIB="default" PIFS_MODULEENV_ECMWF_TOOLBOX="default" PIFS_MODULEENV_GRADS="default" PIFS_MODULEENV_HDF5="1.10.6" PIFS_MODULEENV_NCO="4.9.7" PIFS_MODULEENV_NETCDF4="4.7.4" PIFS_MODULEENV_OCXENV="prepifs" PIFS_MODULEENV_PIFSENV="prepifs" PIFS_MODULEENV_PYTHON3="3.8.8-01" PIFS_MODULEENV_QUAVER="default" # #========================================================== # Variables configuring EnsembleKalmanFilter #========================================================== ANAL_METHOD="letkf" COVLOCALH=0.3 COVLOCALV=2.0 INFL_METHOD="jeff" CYCLE_INFLATION=false ADDITIVE_INFLATION=false ALPHA_ADDINFL=1.5 LENKF=false LENKF_HYBRID=false LAN_INITIME=true LWAVESPLIT=false LINCREMENTAL=false # #========================================================== # Variables configuring EnsembleDataAssimilation #========================================================== ENDANENS=50 ENDANENSODB=10 ENDANENSTRAJ=10 ENDANENSFCLONG=0 LEDA_ERRORS_IN=true LJB_EDA=true LSES_EDA=true LEDA_ERRORS_OUT=true LEDA_UNBAL_IN=true LEDA_READ_AV=true LUSE_EDA_SKT=true L_CALCULATE_JBW_STATS=false L_CALCULATE_JBW_INV=false N_BGDATES=5 N_BGMEMBERS=50 N_BGSTEPBY=12 RESOL_ENS_ERRORS=159 ENSADDCLIM=0.10 LENS_CAL=true LENS_CALCONST=false LENS_CAL_PASSIVE=true ENSCALEXPVER="0001" ENSCALCLASS="od" ENSCALSTREAM="LWDA" WINOFFSET_EDACAL=3 ENS_VAR_INFL=0 LONEODB=true LBGPERT=false EDAEXPVER=${EDAEXPVER:-"gene"} EDACYCLE="47r3" EDACLASS="rd" EDASTREAM="ELDA" EDALEVELS=137 EDA_WINDOW_LENGTH_4D=12 LOWNEDA=false EDA_MXUP_TRAJ=2 EDA_MXUP_TRAJ_MEM=-1 NMINSIMPHYMEM=-1 EDAPRECCTRL=1 EDA_PERIOD_4D=12 EDA_RESOL=399 EDA_WINDOW_OFFSET_4D=3 RESOLJB_0=95 RESOLJB_1=127 RESOLJB_2=159 RESOLJB_3=191 RESOLJB_4=255 RESOLJB_5=319 RESOLJB_6=399 MXUP_RESOLJB=7 EDA_CHUNKS=1 # #========================================================== # Variables configuring EarlyDelivery #========================================================== LCONTINUOUS_DA=false WINDOW_LENGTH_4D_ED=8 WINDOW_OFFSET_4D_ED=3 REINIOFFSET=6 REINIHOUR=0 REINIPERIOD=12 REINIWINDOW_LENGTH_4D=12 ED_PERIOD=12 ED_CUTOFF="0400" LFILTER_ED=false ED_MXUP_TRAJ=2 ED_RESOLINC_0=95 ED_GTYPEINC_0="l_2" ED_RESOLINC_1=159 ED_GTYPEINC_1="l_2" ED_RESOLINC_2=255 ED_GTYPEINC_2="l_2" ED_RESOLINC_3=255 ED_GTYPEINC_3="l_2" ED_RESOLINC_4=255 ED_GTYPEINC_4="l_2" ED_TSTEP_INC_0=3600 ED_TSTEP_INC_1=1800 ED_TSTEP_INC_2=1200 ED_TSTEP_INC_3=1200 ED_TSTEP_INC_4=1200 ED_ONLY=false REINIEXPVER="self" REINICLASS="rd" REINISTREAM="LWDA" REINI_NOT_ED=false LSCDA=false # #========================================================== # Variables configuring Dr_Hook #========================================================== DR_HOOK=true DR_HOOK_OPT="none" DR_HOOK_PROFILE_LIMIT=-10 DR_HOOK_HASHBITS=15 DR_HOOK_CATCH_SIGNALS="0" DR_HOOK_IGNORE_SIGNALS="0" # #========================================================== # Variables configuring wavgeneral #========================================================== WAVE=yes WAM2WAY=yes WAMNSTPW=1 WAMRESOL="global25" WAMNFRE=36 WAMNANG=36 INIWAVE=yes WAMCOLDLENGTH=240 WAMALT=yes WAMSAR=no WAMSARASS=false WAM_ASSIMIL_PERIOD=6 WGRIBIN=yes WAMPHYS=1 WAM_LLCAPCHNK=true LWAMCURR=false WAM_LWVFLX_SNL=false WAMMASKICE=true WAMANPARAM="229/230/231/232/220/221/244/222/252/207/253/254/218/217/219/215/216/233/245/249/212/214/209/246/247" WAMFCPARAM="229/230/231/232/220/221/244/222/252/207/253/254/218/217/219/215/216/233/245/249/212/214/209" # #========================================================== # Variables configuring compile #========================================================== SC_PRESERVED_BUILD_DEFAULT_DIR="/home/rdx/preserved_builds" BUILDSC=true SC_BUILD_ARCH="ecmwf/hpc2020/intel/2021.4.0/intel-mpi/2021.4.0/" SC_BUILD_OPT="BIT" LSC_BUILD_INITNAN=false LSC_BUILD_ARRAY_BOUND_CHECK=false SC_RESTORE_BUILD_FROM_ROOT="default" SC_RESTORE_BUILD_NAME="default" SC_PRESERVE_BUILD_TO_ROOT="default" CMAKE_BUILDSYS="make" TOTALVIEW_VERSION="undef" MEMORY_DEBUGGING=false LMPIPROF=false EC_FILL_NANS=false RUN_PARALLEL=true # #========================================================== # Variables configuring Blacklist #========================================================== BLACK_DS="ops" BLACK_MM="ops" BLACK_EX="ops" # #========================================================== # Variables configuring BiasCorrection #========================================================== LVARBC=true VARBC_PATH="standard" NCSTART_TO3=2 NCSTART_GBRAD=0 NCSTART_RAD=2 NCSTART_ALLSKY=2 NCSTART_AIREP=0 NCSTART_TCWV=0 VARBC_ARCHIVE_EVOLVE=false LCONSTANT_VARBC=false LCALC_PSBIAS=false LUSE_PSBIAS=true LCALC_RSTRHBIAS=false LUSE_RSTRHBIAS=true LUSE_RSTBIAS=true VARBC_PS=false VARBC_RSONDE=false LCOLDSTART_SFCOBS=true BIAS_PATH_AMV="none" BIAS_PATH_REO3="none" LAMV_REASSIGN=false LREO3_BCOR=false LREO3_BCOR_EXT=false # #========================================================== # Variables configuring AugmentedControlVariable #========================================================== LJB_ACV=false LJB_HYBRID_ACV=false LTOVSCV_ACV=false LINVER_ACV=false LPAROPTIACV=false STATIC_WEIGHT=1. TAPER_WEIGHT_HYBRID=false TAPER_WEIGHT_BOTTOM=25000. TAPER_WEIGHT_TOP=100. NACV_MEMBERS=0 ACVEXPVER="0001" ACVCLASS="od" ACVSTREAM="ELDA" ACVLEVELS=137 ACV_RESOL=-1 ACV_LAG_TIME=0 ACV_LAG_STEP=0 ACV_LOC_HSCALE=300 ACV_LOC_VSCALE=0 ACV_LOC_LAP_VOD=false ACV_LOC_LAP_LNSP=false ACV_LOC_LAP_HUM=false ACV_TAPER_HUM=false # #========================================================== # Variables configuring macc #========================================================== LMACC=false COMPO_ARCH_PRESET="standard" GHGVAR="" INIGHG=false GHG_CO2_INIEXPVER="h72g" GHG_CO2_INICLASS="rd" GHG_CO2_INISTREAM="da" GHG_CO2_INIFC=0 GHG_CO2_INITYPE="an" GHG_CO2_INILEVELS="137" GHG_CH4_INIEXPVER="h72g" GHG_CH4_INICLASS="rd" GHG_CH4_INISTREAM="da" GHG_CH4_INIFC=0 GHG_CH4_INITYPE="an" GHG_CH4_INILEVELS="137" LGHG_MF=true LGHG_QM=false LGHG_QM3D=true GHG_ARCH_TYPES="" LNEE_ONLINE=true LGHG_ACCO2=false LBFAS_CO2=false BFAS_COLDSTARTEXPID="0001" BFAS_COLDSTARTSTREAM="oper" BFAS_COLDSTARTEXPCLASS="od" BFAS_COLDSTARTRESOL="1279" BFAS_COLDSTARTGTYPE="_4" BFAS_WARMSTART_MODNEE_ANOMALY=false BFAS_SAVEFILES=false AERO_SCHEME="aer" AERO_VER="ver6" AEROVAR="" LSEASALT_RH80=true INIAERO=false AERO_INIEXP="eac4" AERO_INIVER="ver1" AERO_INITYPE="an" AERO_INICLASS="mc" AERO_INISTREAM="da" AERO_INIFC=0 AERO_INIDATE=0 AERO_INILEVELS=60 LSEASALT_INI_RH80=true AEROZEROINIT="" NDRYDEPVEL_DYN=2 NSSALT=4 LAERSEDIMSS=true NDDUST=2 NSO4SCHEME=1 LAERDUST_NEWBIN=false LAERDUSTSOURCE=true LINJ=true LVOLC_ALTI=true LAERO_MACCITY=true LAERSOA_CHEM=true LAERSOAEMIS_FLUX=true LAERRESUSPENSION=false LAERCHEM=true NAERSCAV=3 LAERRRTM=true LAERO_MF=true LAERO_QM=true LAERO_QM3D=false AERO_ARCH_TYPES="" AERO_OPTICS_TYPES="" LAERAOT=false LAEREXT=false LAERLISI_SAT=false LAERLISI_GND=false LAERLISI_UNATT=false LAEROUT=false LCHEM=false CHEM_SCHEME="tm5" CHEM_VER="ver16.3" CHEM_EMIS="CAMS_GLOB_NRT_v02f_24bit" CHEM_EMIS_YEAR=0 CHEM_INIEXP="eac4" CHEM_INIVER="ver15" CHEM_INITYPE="an" CHEM_INICLASS="mc" CHEM_INISTREAM="da" CHEM_INIFC=0 CHEM_INIDATE=0 CHEM_INILEVELS="60" LCHEM_DIA=false LCHEM_DIA_CLEANSTART=true LCHEM_DIAC=false LCHEM_DIAF=false LCHEM_LIGHT=true LCHEM_ACNOX=true LCHEM_0NOX=false KCHEM_NOXADV=0 LCHEM_ANAO3=false LCHEM_DDFLX=true LCHEM_DVOL=true LCHEM_TL=true LCHEM_MF=true LCHEM_QM=true LCHEM_QM3D=false LCHEM_TROPO=true LCHEM_ANACH4=false LCHEM_CONVSCAV=false LCHEM_AEROI=true LCHEM_O3RAD=true LO3_CHEM_UV=false LMCC_COMPO=false LINJ_CHEM=true LCHEM_NEWSUMO=true LCHEM_REVCHEM=false LCHEM_BASCOE_JON=false LSMOOTH_NO_EMIS=true KCHEM_SOLVE=1 LUSESO2VOLC=false CHEM_ARCH_ML="none" CHEM_ARCH_PL="none" CHEM_ARCH_SFC="none" CHEM_ARCH_TC="none" GFASEXP="0001" GFAS_FREQ_HOURS=24 GFAS_LAG_HOURS=0 GFAS_BACKTRACK_DAYS=4 GFAS_OM_CAP=1.0e-8 GFAS_CAP_SPECIES="OC" LCOMPO_DCBB=true LCOMPO_DCVOC=true LCOMPO_DCANT=true LANT_HIGH=true LCOMPO_DCDD=true LCOMPO_DDFLX_DIR=true LUVPROC=false LCOMPO_ARCHIVE_INPUT_2D=false LCOMPO_ARCHIVE_INPUT_3D=false COMPO_RESTART_DAY=1 LCOMPO_PREOP_PP=false LCOMPO_TRACNUDGE=false COMPO_TRACNUDGE_BEGINDATE_GHG=0 COMPO_TRACNUDGE_BEGINDATE_AERO=0 COMPO_TRACNUDGE_BEGINDATE_CHEM=0 COMPO_TRACNUDGE_STEP_GHG=96 COMPO_TRACNUDGE_STEP_AERO=96 COMPO_TRACNUDGE_STEP_CHEM=24 COMPO_TRACNUDGE_DEPRES=79 # #========================================================== # Variables configuring Archiving #========================================================== DO_ARCHIVE=no EXP_LIFETIME=24 LARCHINCR=false UNBLOCK="mv" FDB_COMPLETE="xevent fdb" ARC_COMPLETE="true" CHUNKS=12 FDB_BUF_SECT_SIZE=8388608 FDB_NOF_BUFF=8 MULTIO_SINKS="fdb5" MARS_FDB_DTAP="prod" FDB_HOME_ROOT="/home/fdb" FDB_EXPVER_FILE="/ec/fwsm/sb/fdb5/expver_to_fdb_root.map" FDB_WRITER_TASKS=14 LOUTPUT_FOR_FCDEPAR=false ARCHIVE_FIELDS_FULL_RESOL=true LANONLY=false LREDUCED_ML_PPSTEPS=false # #========================================================== # Variables configuring system #========================================================== FSROOT="/RDX/prepIFS" FSODB="/RDXTMP/prepIFS" FSOROOT="/emos" ACCOUNT="ecsys" #USER="rdx" OWNER="$USER" GROUP="rd" FDB_GROUP="ecmwf" EXPVER=${EXPVER:-"gene"} CLASS="rd" GRIBCLASS=2 SLOWLINES_THRESHOLD=2 NOW=2022060712 MEMBERSTATE=no SINFO_DB="/home/rdx/scriptinfoDB" # #========================================================== # Variables configuring SurfaceFields #========================================================== LNEMOSURF=true SURFSST="blendmask" SURFLST="L4LST" SURFSIC="blendmask" SURFLIC="L4LIC" SURFCURR="none" OCAN_EXPVER="0001" NEMOCONFIG_AN="ORCA025_Z75" OCAN_FSROOT="/emos/OCEA/5" NRTOCEAN_AN=1 LBCICE=false THREADS_NEMOSST=9 # #========================================================== # Variables configuring submit #========================================================== RD_OD_MODE=false SUITE_CONTROL_TYPE="ecflow" SUITE_CONTROL_SERVER="pifs-rd-h.1" SUITE_ROOT="/ec/vol/ifs" # #========================================================== # Variables configuring general #========================================================== RESOL=639 LEVELS=137 GTYPE="_4" DEFAULT_NPROMA_DP=-12 DEFAULT_NPROMA_SP=-16 FPOSINC=false FPOSCLD=false LESUITE=false CLIMVERSION="climate.v018" NGLATH=640 NCYCLE=153 # #========================================================== # Variables configuring CoupledAssim #========================================================== LOUTLOOP=false LCDA_NRT=true LCERA=true LOPA=false THREADS_GRIDDISTS=72 CERA_OUT=false CERA_SAT=false SSTPROD="HAD" SICPROD="OSTIA" RELAXSST=0 LCOMPOSITEOADA=false LPQSCDA=false # #========================================================== # Variables configuring nemogeneral #========================================================== LNEMOCOUP=true LNEMOSST=false LNEMOSSTICE=false COUPFREQ=3600 NAM_NN_FSBC=3 NEMOCONFIG="ORCA025_Z75" OUT_VER=1 OUT_LEVELS=75 OCNVER="V34" LFWBR=no ASSIMVER="V34" INN_VER="2r1" LNRSTTIMEINI=yes OCINI_SOURCE=1 OCINI_FSROOT="/emos/OCEA/5" OCINI_EXPVER="0001" LIMEXPR="0001" LIMI_FSROOT="/emos/OCEA/5" NRTOCEAN=1 ICEMOD=2 OCICE_TYPE="clim" OCICE_SAMPLE_METHOD="hist" OCICE_SAMPLE_SIZE=5 OCICE_DAMP=45 OCICE_PERS=15 OCXSSTICE="/s2o1/ma_ocean/4/0001/sstice_icemask" LIMTEMP=false LIMALB=false NAM_NBITDR=100 OPA_GRID="ORCA025" LSM_ORIG="yes" LWAMNEMOCOUP=yes LWAMNEMOCIC=yes LWAMNEMOCIT=no LWAMNEMOCUR=no LN_WAVETKE=yes LN_STCOR=yes LN_TAUOC=yes QSRTYPE="0" CHLTYPE="0" LNEMOCURR=true NEMO_BRANCH="" # #========================================================== # Variables configuring nemovar #========================================================== VAREXP="VAR" INCMODE="IAU" resbckend=0 NOUTMAX=3 NVAREXP0=0 NTRJFRQ0=24 INNMAX0=0 NFORIN0=0 NUBSSH0=0 NUBVEL0=0 NBCKQC0=0 NBCKRAN0=0 WJCSCA0=0.0 NVAREXP1=0 NTRJFRQ1=24 INNMAX1=40 NFORIN1=1 NUBSSH1=0 NUBVEL1=0 NBCKQC1=0 NBCKRAN1=0 WJCSCA1=0.0 NTIMESTEP_INNER0=43200 NTIMESTEP_INNER1=43200 NVAREXP2=0 NTRJFRQ2=24 INNMAX2=40 NFORIN2=0 NUBSSH2=1 NUBVEL2=1 NBCKQC2=0 NBCKRAN2=0 WJCSCA2=0.0 NTIMESTEP_INNER2=43200 NVAREXP3=0 INNMAX3=40 NFORIN3=0 NUBSSH3=1 NUBVEL3=1 NBCKQC3=0 NBCKRAN3=0 WJCSCA3=0.0 NTIMESTEP_INNER3=43200 ENSEMBLE=0 WINDOW=1 SPINUP=36 sdbckeex=0.03 sdbckt=2.0 sdbcks=0.3 sdbcku=2.0 sdbckv=1.0 sdbcktdo=0.07 sdbcksdo=0.01 BCKEXP="ES7" INITIMESTAMP=49291 FILEXP="ET8" LRNORM=yes NFILNF=1 NESNOW=0 PRTSTA=yes NMCEXP="xxxx" PEREXP="xxxx" IDTWIN=no NPERBK=no CTLEXP="xxxx" NBGECORMOD=4 LN_BGE_EIG_REA=no NBKGRAN=2 NBKGENS=100 LN_ENS_VAR=no NAM_WGT_MOD_VAR=0.5 NAM_WGT_ENS_VAR=0.5 NAM_INF_ENS_SDV=1.0 NAM_BALDEP=5000.0 NAM_FLATSAL=100.0 NAM_FLATSSH=100.0 NAM_DTDZMIN=0.001 NAM_NFILRN2=4 NAM_NMXLCR=2 NAM_SDDPO_TBGE=0.098 NAM_DELTAZ_TBGE=10.0 NAM_DTDZM_BGE=1 # #========================================================== # Variables configuring ocphys #========================================================== PSTAR_LIM=1.5e+04 NR_SSH0="2" NAM_NN_ETAU="1" NAM_RN_EFR=0.05 NAM_NN_HTAU="0" NAM_RN_WHTAUSCL=4 DQDT0=0 DEDS0=0.0 LN_SURFDMP_LIM=no ICEDMP_TYPE="clim" ICEDMP_ECFS_ROOTDIR="/RDX/prepIFS/OCEA/5/0001/" NN_FRLDR_LIM="0" NN_HICIFR_LIM="0" RN_DFLDT_LIM=10.0 RN_DHIDT_LIM=10.0 HIMIN_LIM=0.2 FRIMIN_LIM=0.05 ALPHA_LIMDMP=6.0 ROBS_LIMDMP=0.01 NAM_HDMP0=0 NAM_ZDMP0=0 NAM_SDMP0=1095 NAM_BDMP0=1095 RN_DMP_WIDTH=10 LN_TRADMP_SFC=false OCEDMP_TYPE="clim" OCEDMP_ECFS_ROOTDIR="/RDX/prepIFS/OCEA/5/0001/" LNBIAS=no LNBIASASM=yes BIAS_OFL="" NN_INERTIAL=2 RN_GPHIT0=10 CAPN2VAL=1.e-10 # #========================================================== # Variables configuring ensemb #========================================================== NEMOEDA=0 P3DRAND=yes CDP3DPROBTYPES="831,820,741,401" RP3DREJPROB="0.1,0.05,0.05,0.05" SLARAND=no CDSLAPROBTYPES="J1" RSLAREJPROB="0.1" P3DHPOS=no P3DHTYPES="831,820,741,401" P3DHDISTS="50,50,50,50" P3DHPERTYPES="1,1,1,1" P3DVPOS=2 SEAICEPOS=no NPRVER="V3" FOR_PERT_TYPE="ADD" FOR_PERT_VAR="UTAU VTAU EMP QSR SST ICE_COVER" FOR_PERT_VAR_NEMO="UTAU VTAU EMP QSR" FOR_PERT_VAR_AE="UTAU VTAU EMP QSR SST" TRES_AE="1m" FOR_PERT_VAR_SE="SST ICE_COVER" TRES_SE="1m" # #========================================================== # Variables configuring obs #========================================================== LNGETOBS=yes LNINSITU=yes PASSIVEINSITU=no LN_VTHINTS=yes NVTHINTS=3 LNHORTHIN=yes HORTHINTYPES="741,401" HORTHINDISTS="100.0,100.0" HORTHINDTIME="1.0,1.0" OCQCVER=5 NOINSITU="3" INSITUTYP1="EN" INSITUQC1=yes INSITUQCINN=yes INSITUTYP2="TEP" INSITUQC2=no INSITUTYP3="SEP" INSITUQC3=no OBSINS0="AsORAS5" OBSVER="g10" SLAVER="v5" mdtssh="RIO" NSDTINP=1 NSDSINP=1 NSDSSTP=1 NSDSSHP=1 LNSLA=yes SLANRTDATE="20141226" SLANRTLIST="al/c2/j3/j2/j2n/s3a" SLALISTACT="al/c2/e1/e2/en/enn/g2/h2/j1/j1g/j1n/j2/tp/tpn" SLAQCACT=yes SLAQCINN=yes SLALISTPAS="" SLAQCPAS=yes SLATYP="ref" SLALISTPAS2="" SLATYP2="upd" SLASUPEROB=yes SLASUPER=2 MDTVER="gcojgcm4-dta5_19962012" DRINOBSSLAREF="ec:/ocx/OCEANOBS/MDT" NSSHGLOBAL="monthly" LNSST=no OBSSSTPROD="GRIDDED" LNSSTPASSIVE=no LNSEAICE=true SEAICEDAT="OSTIA" OSISAFDIR="ec:/oparch/sea_ice/OSI-401-b/" SICSUPER=2 SUPERLENG="0.5" NAM_NICETHIN=1 SEAICENEMOVAR=2 # #========================================================== # Variables configuring modelunc #========================================================== LSPSDT=true SDT_NSCALES=3 SDT_SDEV="0.42,0.14,0.048" SDT_XLCOR="500.e3,1000.e3,2000.e3" SDT_TAU="2.16e4,2.592e5,2.592e6" LSPPTGFIX=true LCYPAT=true LCYPAT_INIFAM=true # #========================================================== # Variables configuring inidata #========================================================== INIORIG="mars" INICLASS="rd" INIEXPVER="hjxe" INICYCLE="47r3" INISTREAM="ELDA" INITYPE="4v" INIRESOL=639 INIGTYPE="_4" INILEVELS=137 INISTEP=0 INIPERIOD_4D=12 INIOFFSET_4D=3 INIWINOFFSET=3 INICLIMVERSION="climate.v018" INI_WINDOW_LENGTH_4D=12 INIOZONE=true INICO2=false INICI=true INITILES=true INICLOUDAN=true INIRAINSNOW=true INIMODISALB=true INIHTESSEL=true INIPSBIAS=false INIVARBC=true INIEMISKF=true INIMODERR=true INIENDANENS=50 FORCE_FP=no INIMA="ecmwf" INIMACONS=0 USE_NEW_INILAND=false INILANDCLASS="od" INILANDTYPE="an" INILANDEXPVER="0001" INILANDSTREAM="DA" INILANDCLIMVERSION="climate" USE_NEW_INIWAM=false WAMINICLASS="od" WAMINITYPE="an" WAMINIEXPVER="0001" WAMINISTREAM="WV" INIOBSCLASS="od" INIOBSEXPVER="0001" INIOBSSTREAM="DCDA" INIEXPTYPE="an" INIPATH="""" # #========================================================== # Variables configuring libraries #========================================================== IFS_CYCLE="47r3" BUILD_FROM="this_exp" BUILD_EXPERIMENT_DIR="" IFS_BUNDLE_MODULE="" GIT_VERSION="2.26.0" IFS_GIT_CENTRAL_URL="ssh://git@git.ecmwf.int" IFS_GIT_LOCAL_HOST="aa" IFS_ALL_GIT_TAG="none" IFS_SCRIPTS_GIT_REPO="MAIN" IFS_SCRIPTS_GIT_TAG="CY47R3b" IFS_SUITES_GIT_REPO="MAIN" IFS_SUITES_GIT_TAG="CY47R3b" IFS_SOURCE_GIT_REPO="MAIN" IFS_SOURCE_GIT_TAG="CY47R3b" IFS_BUNDLE_GIT_REPO="MAIN" IFS_BUNDLE_GIT_TAG="CY47R3b" ATLAS_GIT_REPO="MAIN" ATLAS_GIT_TAG="" BUFRDC_TABLES_GIT_REPO="MAIN" BUFRDC_TABLES_GIT_TAG="" COPE_GIT_REPO="MAIN" COPE_GIT_TAG="" ECBUILD_GIT_REPO="MAIN" ECBUILD_GIT_TAG="" ECCODES_GIT_REPO="MAIN" ECCODES_GIT_TAG="" ECKIT_GIT_REPO="MAIN" ECKIT_GIT_TAG="" FDB_GIT_REPO="MAIN" FDB_GIT_TAG="" FCKIT_GIT_REPO="MAIN" FCKIT_GIT_TAG="" IFS_TEST_GIT_REPO="MAIN" IFS_TEST_GIT_TAG="" LIBEMOS_GIT_REPO="MAIN" LIBEMOS_GIT_TAG="" MAGICS_GIT_REPO="MAIN" MAGICS_GIT_TAG="" MARS_SERVER_GIT_REPO="MAIN" MARS_SERVER_GIT_TAG="" METKIT_GIT_REPO="MAIN" METKIT_GIT_TAG="" MULTIO_GIT_REPO="MAIN" MULTIO_GIT_TAG="" ODB_TOOLS_GIT_REPO="MAIN" ODB_TOOLS_GIT_TAG="" ODC_GIT_REPO="MAIN" ODC_GIT_TAG="" OOPS_GIT_REPO="MAIN" OOPS_GIT_TAG="" ECCODES_API_SEED="grib1_mlgrib2" ECCODES_GRIB_DATA_QUALITY_CHECKS=0 GRIB2_NEWMARS=false BOOST_VERSION="1.59.0" LFFTW="true" FFTW_VERSION="3.3.4.7" NETCDF_VERSION="4.3.2" HDF5_VERSION="1.8.13" NEMOINSCRIPTS=yes LOOPS=false LSCREEN_IN_OOPS=false LIFSASOOPS=false # #========================================================== # Variables configuring Forecast #========================================================== TSTEP=720.0 RUN_GFC=no FC00_HR=6 FC06_HR=6 FC12_HR=6 FC18_HR=6 FCLENGTH=240 LEVGEN=true LDUCTDIA=false LELIGHT=true LDIAGTURB_EC=false LESNML=false NSNMLWS=1 # #========================================================== # Variables configuring Description #========================================================== CONTROL=false COMPARE_TO_CONTROL="zzzz" BIT_IDENTICAL=false # #========================================================== # Variables configuring Dates #========================================================== INITIME=2020060112 FINALTIME=2020083112 # #========================================================== # Variables configuring AssimilationMode #========================================================== IFSMODE="4d_inc" SCRANA="active" MONITOR_ONLY=false LFCDEPAR=false FIRST_RANGE=24 LAST_RANGE=48 STEP_RANGE=12 NFCDIAG=20 # #end-of-include $EXPVER/include/config.make.h ($EXPVER/include/config.h) fi if [ $FSFAMILY = "/cancel" ] ; then echo "############################################" echo "######### include config.cancel.h ##########" echo "############################################" #include $EXPVER/include/config.cancel.h ($EXPVER/include/config.h) #========================================================== # Variables configuring emptyNamelist #========================================================== ENAMELIST="general" # #========================================================== # Variables configuring WeakConstraints4DVar #========================================================== LWEAK4DVAR=true NTYPE_MODERR=2 ALPHAQ=0.5 LINITCV=true LMODERRFC=true LBGMODERR=true WEAK4D_INTERV=0.0 LMODERR_PERIODIC=false NSPLIT4DWIN=0 LBALSTRATO=false # #========================================================== # Variables configuring VariationalAnalysis #========================================================== NMXLEN=128 RESOLINC_0=191 GTYPEINC_0="l_2" RESOLINC_1=191 GTYPEINC_1="l_2" RESOLINC_2=255 GTYPEINC_2="l_2" RESOLINC_3=255 GTYPEINC_3="l_2" RESOLINC_4=255 GTYPEINC_4="l_2" TSTEP_INC_0=1800 TSTEP_INC_1=1800 TSTEP_INC_2=900 TSTEP_INC_3=1200 TSTEP_INC_4=1200 PERIOD=6 PERIOD_4D=12 WINDOW_LENGTH_4D=12 WINDOW_OFFSET_4D=3 PERIOD_BG=12 STEP_BG=3 MXUP_TRAJ=2 TRAJNOFDB=false NMINSIMPHY=1 ITER_MIN_0=50 ITER_MIN_1=50 ITER_MIN_2=50 ITER_MIN_3=50 ITER_MIN_4=50 LVERIFY_SCREEN=true LATE4DSTART=true LTRAJHR=true LINRADEX=true LNMPHYS=true LPROPTL=false LGPINNER=true LREPRO4DVAR=false LFGNOTBG=false LFSOBS=false FILTERRESOL=255 REDNMC=0.95 # #========================================================== # Variables configuring testOfAnalysis #========================================================== NTESTVAR=3 LCVTEST=true LTLTEST=false LINTEST=false LADTEST=true LRTTOV_ADTEST=false LGRTEST=false LTESTINC=false LVAR_ONE_OBS=false LTWINTRUTH=false LTWINEXP=false TRUTHEXP="none" # #========================================================== # Variables configuring SurfaceAnalysis #========================================================== OBS_SURF_CONV=true LSEKF=false LUSE_EDA_JACOB=true edaHexpid="0001" edaHclass="od" edaHstream="ELDA" edaHnmembers="0" LREAD_EDA_COV_SSA=true LSAVE_SEKF=false LOSTIA=true LHADISST2=false LECURR=false INIECURR=false LUSE_ASCAT=true LUSE_SMOS_TB=false LUSE_SMOS_SM=true NESDIS_RESOL="4" LNESDISIMS=true SSA_GRIB_BITS=16 # #========================================================== # Variables configuring scconfig #========================================================== NPES_SV=4 THREADS_SEKF=16 NPES_AN=224 THREADS_AN=16 THREADS_MIN=16 THREADS_TRAJ=16 THREADS_FINAL_TRAJ=16 NPOOLS=224 NPES_ENKF=512 THREADS_ENKF=4 NPES_ENKFPP=1 THREADS_ENKFPP=1 NPES_FC=376 THREADS_FC=4 DEPTH_IOSERVER=4 THREADS_IOSERVER=1 NPES_MKCMA=4 SCLOGSROOT="/home/rdx/pifsexps/logs" LOGROOT_NOFWS="/ec/vol/ifs/logs" FDB_MPI_CACHE="no" # #========================================================== # Variables configuring Satellites #========================================================== LTOVS=.false. L_SCREEN_LEVEL_OBSOP=false LATOVS=true LAMSUA_ALLSKY=true LMHS_ALLSKY=true LAIRS=true LIRAS=true LMWTS=true LMWTS2=true MWTS2_AVERAGE="3x3" LMWHS=true LMWHS2=true LSAPHIR=true LATMS=true ATMS_AVERAGE="3x3" LATMS_ALLSKY=false LSCAT=.true. LSCATT_NEUTRAL=true LGEOS=true LRAIN1D=false LRAIN4D=true LSSMI=true LSSMIS=true LAMSRE=true LAMSR2=true LTMI=true LGMI=true LMWRI=true LWINDSAT=true LMWIMG=true LMERIS=true LREO3=true LAEOLUS=true LAEOLP=false LAEOL2BP=false LSMOS=false SMOS_AVERAGE=true LSMAP=false LGPSRO=true LIASI=true LCRIS=true LHIRAS=false LIKFS2=false LGBRAD=true LNEXRAD=true LOPERA=false NPRACCL=21600 LRAINGG=false LSYNOP_RGG=false LFULL_IASI=false AMSU_LAND="Dynamic_emis" EMISKF_PATH="standard" LEMISKF=true LIRCLD_SCREEN_HIRS=false LIRCLD_ASSIM_HIRS=false LIRCLD_SCREEN_AIRS=false LIRCLD_ASSIM_AIRS=false LIRCLD_SCREEN_IASI=false LIRCLD_ASSIM_IASI=false # #========================================================== # Variables configuring SatImageSim #========================================================== LSATIM_NEW=false SATIMSTART1=999 SATIMEND1=-999 SATIMSTART3=0 SATIMEND3=12 SATIMSTART6=18 SATIMEND6=120 SATIMSTART12=132 SATIMEND12=240 LSATIMSIM=false SATIMSTART=0 SATIMEND=24 SATIMSTEP=3 # #========================================================== # Variables configuring climate #========================================================== CLMSST=no LBCSST=true PERSST=true FORCE_SST=no SSTLEN=0 SSTINT="1" LONGRANGE_FORCING=false # #========================================================== # Variables configuring Reanalysis #========================================================== ERAFS=false LERA5=false LONGRANGE_FORCING=false RSTBIAS_TS=false ERAPRODUCTS="/era/intprod/data/monitor" LDIAGS_ERA=false LMON_ERA=false ERA_NOGETBIAS=false ERA_POSTPROC=false # #========================================================== # Variables configuring PrognosticHessianTargeting #========================================================== PHT_PRONOBS=false PHT_TOST03=false PHT_LEADTIME_OBS=48 PHT_LEADTIME_BKG=48 PHT_USE_EXPBKG=false PHT_EXPBKG="0001" PHT_PERIOD_HSV=24 PHT_DUPLI_ODB=false PHT_FDBK_SV=false PHT_BLACK_TOST="empty" # #========================================================== # Variables configuring ppgeneral #========================================================== FULL_POS=yes LISENTRPP=false LPPL=1 LPSU=1 LPML=1 LPPV=0 LPTH=0 LPGZ=0 PPFRQ=12 PPSTEPS="-34/0/-3/-6/-9/-12/-18/-24/-30/-36/-42/-48/-54/-60/-66/-72/-78/-84/-90/-96/-102/-108/-114/-120/-126/-132/-144/-156/-168/-180/-192/-204/-216/-228/-240" PPSTEPS_ML="-7/-18/-24/-30/-36/-66/-90/-114" BRF=0 ERF=240 FRQRF=-1 D3GGEXTRAPPS="0" D3SHEXTRAPPS="0" D3GGEXTRAPPP="0" D3SHEXTRAPPP="0" D3GGEXTRAPPT="0" D3SHEXTRAPPT="0" D3GGEXTRAPPV="0" D3SHEXTRAPPV="0" D2SHEXTRAPP="0" SFCEXTRAPP="0" D3GGFIELDSS="133" D3GGFIELDSSTEND="" D3GGFIELDSP="" D3GGFIELDST="133" D3GGFIELDSV="133" D3SHFIELDSS="130/135/138/155" D3SHFIELDSP="129/130/135/138/155/157" D3SHFIELDST="60" D3SHFIELDSV="130" D2SHFIELDS="129/152" SFCFIELDS="31/32/33/34/35/36/37/38/39/40/41/42/44/45/49/50/57/58/59/78/79/129/136/137/139/141/142/143/228/144/145/146/147/148/151/159/164/165/166/167/168/169/170/172/175/176/177/178/179/180/181/182/183/186/187/188/189/195/196/197/198/201/202/205/206/208/209/210/211/212/235/236/238/228008/228009/228010/228011/228012/228013/228014/243/244/245/8/9/228080/228081/228082/228083/228084/228085/228001/260121/260123/228129/228130/003020/228029/228251/228217/228218/228219/228220/228221/260015/228050" SFCFIELDS_ACCUM1="" FIRST_ACCUM1h=1 LAST_ACCUM1h=6 SFCFIELDS_ACCUM3="" FIRST_ACCUM3h=3 LAST_ACCUM3h=30 SFCFIELDS_ACCUM6="" FIRST_ACCUM6h=6 LAST_ACCUM6h=120 LOCEANEXTRGRIB=false LNEMOGRIBMASK=false PRESSURE="1000/925/850/700/500/400/300/250/200/150/100/70/50/30/20/10/7/5/3/2/1" HEIGHT="500/1000/2000" THETA="315/330/370" PV="1000/1500/2000" ETA="1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28/29/30/31/32/33/34/35/36/37/38/39/40/41/42/43/44/45/46/47/48/49/50/51/52/53/54/55/56/57/58/59/60" # #========================================================== # Variables configuring Plots #========================================================== PLOT_RMS=false LGRIDSTAT=false WEBPLOTINTERVAL=5 STAARCHIVE=false LOBSTAT_ALL=true SCOR=no SCOP=no IVER_MARS_GRID="2.50/2.50" IVER_MARS_RESOL="AUTO" IVER_MARS_TRUN="AUTO" IVER_MARS_INTGRID="AUTO" VERFEXPVER="0001" VERFCLASS="od" VERFTYPE="an" VERFCTYPE="fc" VERFCREATE=false VERFEXP2="0001" VERFEXPVER2="0001" VERFCLASS2="od" VERFTYPE2="an" VERIFY_GRIB_API_VERSION="default" VERIFY_ECCODES_VERSION="default" # #========================================================== # Variables configuring Gases #========================================================== LOZONE=true LOZONECH=true LO3CH_HLO=false O3CHEM="H1.0" # #========================================================== # Variables configuring SatelliteMonitor #========================================================== DUMMY=false LMONITORING=false OBS_MONITORING="" LASCATSM=true # #========================================================== # Variables configuring Observations #========================================================== LBUFR=true OBPATH="ops" OBSTREAM="ELDA" OBSCLASS="OD" BASEVER="0001" LCOPE_OVERWRITE_BUOY_PMSL_WITH_PSTN=false B2O_AIRCRAFT_TYPES="" B2O_DEFAULT_BUOY_HEIGHT="0" B2O_BUOY_HEIGHTS="" B2O_MOBILE_LAND_STATIONS=false B2O_TEMP_MAX_LEVELS="5000" B2O_TEMP_ASCENT_BATCH_INTERVAL="900" B2O_TEMP_ASCENT_BATCH_AVERAGING=false B2O_TEMP_DESCENT_BATCH_INTERVAL="300" B2O_TEMP_DESCENT_BATCH_AVERAGING=false B2O_TEMP_DROP_BATCH_INTERVAL="60" B2O_TEMP_DROP_BATCH_AVERAGING=false B2O_STATION_POSITION_TOLERANCE="0.1" B2O_STATION_HEIGHT_TOLERANCE="5.0" B2O_EXTRACT_RH2M=true COPE_OVERRIDE_RH2M=true COPE_APPLY_TD_GT_T_CHECK=true LEXPERIMENTAL_OBS=false EXP_OBS_FORMAT="h5" EXP_OBS_DATA_PATH="ec:/path/to/experimental/data/files" EXP_OBS_MAPPING_FILE="ec:/path/to/mapping_file.dat" OBSASCIILIST="""" OBSODB2LIST="""" LOBS_SCREEN=false ANEMOM_HT=true RSTBIAS=true LREDUCOB=false LOBSCOR=false TSLOTSEC=1800 OBNLAT=90.0 OBWLON=-180.0 OBSLAT=-90.0 OBELON=180.0 # #========================================================== # Variables configuring odb #========================================================== ODB_MAXHANDLE=3 ODB_TIMESLOT_RESOLUTION=60 ODB_CTX_DEBUG=0 ODB_CATCH_SIGNALS=0 ODB_ERRTRA=1 ODB_CCMA_OBS_RANDOMIZE=0 ODB_CCMA_IGNORE_TSLOTS=0 ODB_CCMA_CREATE_DIRECT=1 ODB_LOADBALANCE_CCMA=0 ODB_REPRODUCIBLE_SEQNO=-1 ODB_FLPCHECK=0 ODB_INTCHECK=0 ODB_WRITE_EMPTY_FILES=0 ODB_IO_METHOD=4 ODB_IO_FILESIZE=128 ODB_PACKING=-1 ODB_TEST_INDEX_RANGE=0 ODB_IO_OPENMP=0 PMETHOD=2 ODB_CODE_MAPPINGS="/home/rdx/data/47r3/an/odb_code_mappings.dat" # #========================================================== # Variables configuring odb_arch #========================================================== ODBSAVE_MFB="" ODBSAVE_MFB_EXTRA="" OFB_AUTO_SET="DO_NOT_CHANGE" MFB_AUTO_SET="DO_NOT_CHANGE" ODBSAVE_OFB="" ODBSAVE_OFB_EXTRA="" DUMMY=false ODBSAVE_SQLFILES_PATH="" ODBSAVE_TABLE_DESC="NONE" ODBSAVE_TABLE_HDR="NONE" ODBSAVE_TABLE_TIMESLOT_INDEX="NONE" ODBSAVE_TABLE_MODSURF="NONE" ODBSAVE_TABLE_INDEX="NONE" ODBSAVE_TABLE_BODY="NONE" ODBSAVE_TABLE_ERRSTAT="NONE" ODBSAVE_TABLE_GBRAD="NONE" ODBSAVE_TABLE_GBRAD_BODY="NONE" ODBSAVE_TABLE_RAINGG="NONE" ODBSAVE_TABLE_RAINGG_BODY="NONE" ODBSAVE_TABLE_CONV="NONE" ODBSAVE_TABLE_CONV_BODY="NONE" ODBSAVE_TABLE_SAT="NONE" ODBSAVE_TABLE_RADIANCE="NONE" ODBSAVE_TABLE_RADIANCE_BODY="NONE" ODBSAVE_TABLE_COLLOCATED_IMAGER_INFORMATION="NONE" ODBSAVE_TABLE_CLOUD_SINK="NONE" ODBSAVE_TABLE_ALLSKY="NONE" ODBSAVE_TABLE_ALLSKY_BODY="NONE" ODBSAVE_TABLE_SCATT="NONE" ODBSAVE_TABLE_SCATT_BODY="NONE" ODBSAVE_TABLE_SATOB="NONE" ODBSAVE_TABLE_GNSSRO="NONE" ODBSAVE_TABLE_GNSSRO_BODY="NONE" ODBSAVE_TABLE_UPDATE="NONE" # #========================================================== # Variables configuring ForecastErrors #========================================================== UPTRAJ_FCE=-1 NWRIEVEC=25 RESOLFCE=42 ITER_FCE=150 LANOBSENS=false # #========================================================== # Variables configuring Packages #========================================================== PIFS_MODULEENV_CDO="1.9.10" PIFS_MODULEENV_ECLIB="default" PIFS_MODULEENV_ECMWF_TOOLBOX="default" PIFS_MODULEENV_GRADS="default" PIFS_MODULEENV_HDF5="1.10.6" PIFS_MODULEENV_NCO="4.9.7" PIFS_MODULEENV_NETCDF4="4.7.4" PIFS_MODULEENV_OCXENV="prepifs" PIFS_MODULEENV_PIFSENV="prepifs" PIFS_MODULEENV_PYTHON3="3.8.8-01" PIFS_MODULEENV_QUAVER="default" # #========================================================== # Variables configuring EnsembleKalmanFilter #========================================================== ANAL_METHOD="letkf" COVLOCALH=0.3 COVLOCALV=2.0 INFL_METHOD="jeff" CYCLE_INFLATION=false ADDITIVE_INFLATION=false ALPHA_ADDINFL=1.5 LENKF=false LENKF_HYBRID=false LAN_INITIME=true LWAVESPLIT=false LINCREMENTAL=false # #========================================================== # Variables configuring EnsembleDataAssimilation #========================================================== ENDANENS=50 ENDANENSODB=10 ENDANENSTRAJ=10 ENDANENSFCLONG=0 LEDA_ERRORS_IN=true LJB_EDA=true LSES_EDA=true LEDA_ERRORS_OUT=true LEDA_UNBAL_IN=true LEDA_READ_AV=true LUSE_EDA_SKT=true L_CALCULATE_JBW_STATS=false L_CALCULATE_JBW_INV=false N_BGDATES=5 N_BGMEMBERS=50 N_BGSTEPBY=12 RESOL_ENS_ERRORS=159 ENSADDCLIM=0.10 LENS_CAL=true LENS_CALCONST=false LENS_CAL_PASSIVE=true ENSCALEXPVER="0001" ENSCALCLASS="od" ENSCALSTREAM="LWDA" WINOFFSET_EDACAL=3 ENS_VAR_INFL=0 LONEODB=true LBGPERT=false EDAEXPVER=${EDAEXPVER:-"gene"} EDACYCLE="47r3" EDACLASS="rd" EDASTREAM="ELDA" EDALEVELS=137 EDA_WINDOW_LENGTH_4D=12 LOWNEDA=false EDA_MXUP_TRAJ=2 EDA_MXUP_TRAJ_MEM=-1 NMINSIMPHYMEM=-1 EDAPRECCTRL=1 EDA_PERIOD_4D=12 EDA_RESOL=399 EDA_WINDOW_OFFSET_4D=3 RESOLJB_0=95 RESOLJB_1=127 RESOLJB_2=159 RESOLJB_3=191 RESOLJB_4=255 RESOLJB_5=319 RESOLJB_6=399 MXUP_RESOLJB=7 EDA_CHUNKS=1 # #========================================================== # Variables configuring EarlyDelivery #========================================================== LCONTINUOUS_DA=false WINDOW_LENGTH_4D_ED=8 WINDOW_OFFSET_4D_ED=3 REINIOFFSET=6 REINIHOUR=0 REINIPERIOD=12 REINIWINDOW_LENGTH_4D=12 ED_PERIOD=12 ED_CUTOFF="0400" LFILTER_ED=false ED_MXUP_TRAJ=2 ED_RESOLINC_0=95 ED_GTYPEINC_0="l_2" ED_RESOLINC_1=159 ED_GTYPEINC_1="l_2" ED_RESOLINC_2=255 ED_GTYPEINC_2="l_2" ED_RESOLINC_3=255 ED_GTYPEINC_3="l_2" ED_RESOLINC_4=255 ED_GTYPEINC_4="l_2" ED_TSTEP_INC_0=3600 ED_TSTEP_INC_1=1800 ED_TSTEP_INC_2=1200 ED_TSTEP_INC_3=1200 ED_TSTEP_INC_4=1200 ED_ONLY=false REINIEXPVER="self" REINICLASS="rd" REINISTREAM="LWDA" REINI_NOT_ED=false LSCDA=false # #========================================================== # Variables configuring Dr_Hook #========================================================== DR_HOOK=true DR_HOOK_OPT="none" DR_HOOK_PROFILE_LIMIT=-10 DR_HOOK_HASHBITS=15 DR_HOOK_CATCH_SIGNALS="0" DR_HOOK_IGNORE_SIGNALS="0" # #========================================================== # Variables configuring wavgeneral #========================================================== WAVE=yes WAM2WAY=yes WAMNSTPW=1 WAMRESOL="global25" WAMNFRE=36 WAMNANG=36 INIWAVE=yes WAMCOLDLENGTH=240 WAMALT=yes WAMSAR=no WAMSARASS=false WAM_ASSIMIL_PERIOD=6 WGRIBIN=yes WAMPHYS=1 WAM_LLCAPCHNK=true LWAMCURR=false WAM_LWVFLX_SNL=false WAMMASKICE=true WAMANPARAM="229/230/231/232/220/221/244/222/252/207/253/254/218/217/219/215/216/233/245/249/212/214/209/246/247" WAMFCPARAM="229/230/231/232/220/221/244/222/252/207/253/254/218/217/219/215/216/233/245/249/212/214/209" # #========================================================== # Variables configuring compile #========================================================== SC_PRESERVED_BUILD_DEFAULT_DIR="/home/rdx/preserved_builds" BUILDSC=true SC_BUILD_ARCH="ecmwf/hpc2020/intel/2021.4.0/intel-mpi/2021.4.0/" SC_BUILD_OPT="BIT" LSC_BUILD_INITNAN=false LSC_BUILD_ARRAY_BOUND_CHECK=false SC_RESTORE_BUILD_FROM_ROOT="default" SC_RESTORE_BUILD_NAME="default" SC_PRESERVE_BUILD_TO_ROOT="default" CMAKE_BUILDSYS="make" TOTALVIEW_VERSION="undef" MEMORY_DEBUGGING=false LMPIPROF=false EC_FILL_NANS=false RUN_PARALLEL=true # #========================================================== # Variables configuring Blacklist #========================================================== BLACK_DS="ops" BLACK_MM="ops" BLACK_EX="ops" # #========================================================== # Variables configuring BiasCorrection #========================================================== LVARBC=true VARBC_PATH="standard" NCSTART_TO3=2 NCSTART_GBRAD=0 NCSTART_RAD=2 NCSTART_ALLSKY=2 NCSTART_AIREP=0 NCSTART_TCWV=0 VARBC_ARCHIVE_EVOLVE=false LCONSTANT_VARBC=false LCALC_PSBIAS=false LUSE_PSBIAS=true LCALC_RSTRHBIAS=false LUSE_RSTRHBIAS=true LUSE_RSTBIAS=true VARBC_PS=false VARBC_RSONDE=false LCOLDSTART_SFCOBS=true BIAS_PATH_AMV="none" BIAS_PATH_REO3="none" LAMV_REASSIGN=false LREO3_BCOR=false LREO3_BCOR_EXT=false # #========================================================== # Variables configuring AugmentedControlVariable #========================================================== LJB_ACV=false LJB_HYBRID_ACV=false LTOVSCV_ACV=false LINVER_ACV=false LPAROPTIACV=false STATIC_WEIGHT=1. TAPER_WEIGHT_HYBRID=false TAPER_WEIGHT_BOTTOM=25000. TAPER_WEIGHT_TOP=100. NACV_MEMBERS=0 ACVEXPVER="0001" ACVCLASS="od" ACVSTREAM="ELDA" ACVLEVELS=137 ACV_RESOL=-1 ACV_LAG_TIME=0 ACV_LAG_STEP=0 ACV_LOC_HSCALE=300 ACV_LOC_VSCALE=0 ACV_LOC_LAP_VOD=false ACV_LOC_LAP_LNSP=false ACV_LOC_LAP_HUM=false ACV_TAPER_HUM=false # #========================================================== # Variables configuring macc #========================================================== LMACC=false COMPO_ARCH_PRESET="standard" GHGVAR="" INIGHG=false GHG_CO2_INIEXPVER="h72g" GHG_CO2_INICLASS="rd" GHG_CO2_INISTREAM="da" GHG_CO2_INIFC=0 GHG_CO2_INITYPE="an" GHG_CO2_INILEVELS="137" GHG_CH4_INIEXPVER="h72g" GHG_CH4_INICLASS="rd" GHG_CH4_INISTREAM="da" GHG_CH4_INIFC=0 GHG_CH4_INITYPE="an" GHG_CH4_INILEVELS="137" LGHG_MF=true LGHG_QM=false LGHG_QM3D=true GHG_ARCH_TYPES="" LNEE_ONLINE=true LGHG_ACCO2=false LBFAS_CO2=false BFAS_COLDSTARTEXPID="0001" BFAS_COLDSTARTSTREAM="oper" BFAS_COLDSTARTEXPCLASS="od" BFAS_COLDSTARTRESOL="1279" BFAS_COLDSTARTGTYPE="_4" BFAS_WARMSTART_MODNEE_ANOMALY=false BFAS_SAVEFILES=false AERO_SCHEME="aer" AERO_VER="ver6" AEROVAR="" LSEASALT_RH80=true INIAERO=false AERO_INIEXP="eac4" AERO_INIVER="ver1" AERO_INITYPE="an" AERO_INICLASS="mc" AERO_INISTREAM="da" AERO_INIFC=0 AERO_INIDATE=0 AERO_INILEVELS=60 LSEASALT_INI_RH80=true AEROZEROINIT="" NDRYDEPVEL_DYN=2 NSSALT=4 LAERSEDIMSS=true NDDUST=2 NSO4SCHEME=1 LAERDUST_NEWBIN=false LAERDUSTSOURCE=true LINJ=true LVOLC_ALTI=true LAERO_MACCITY=true LAERSOA_CHEM=true LAERSOAEMIS_FLUX=true LAERRESUSPENSION=false LAERCHEM=true NAERSCAV=3 LAERRRTM=true LAERO_MF=true LAERO_QM=true LAERO_QM3D=false AERO_ARCH_TYPES="" AERO_OPTICS_TYPES="" LAERAOT=false LAEREXT=false LAERLISI_SAT=false LAERLISI_GND=false LAERLISI_UNATT=false LAEROUT=false LCHEM=false CHEM_SCHEME="tm5" CHEM_VER="ver16.3" CHEM_EMIS="CAMS_GLOB_NRT_v02f_24bit" CHEM_EMIS_YEAR=0 CHEM_INIEXP="eac4" CHEM_INIVER="ver15" CHEM_INITYPE="an" CHEM_INICLASS="mc" CHEM_INISTREAM="da" CHEM_INIFC=0 CHEM_INIDATE=0 CHEM_INILEVELS="60" LCHEM_DIA=false LCHEM_DIA_CLEANSTART=true LCHEM_DIAC=false LCHEM_DIAF=false LCHEM_LIGHT=true LCHEM_ACNOX=true LCHEM_0NOX=false KCHEM_NOXADV=0 LCHEM_ANAO3=false LCHEM_DDFLX=true LCHEM_DVOL=true LCHEM_TL=true LCHEM_MF=true LCHEM_QM=true LCHEM_QM3D=false LCHEM_TROPO=true LCHEM_ANACH4=false LCHEM_CONVSCAV=false LCHEM_AEROI=true LCHEM_O3RAD=true LO3_CHEM_UV=false LMCC_COMPO=false LINJ_CHEM=true LCHEM_NEWSUMO=true LCHEM_REVCHEM=false LCHEM_BASCOE_JON=false LSMOOTH_NO_EMIS=true KCHEM_SOLVE=1 LUSESO2VOLC=false CHEM_ARCH_ML="none" CHEM_ARCH_PL="none" CHEM_ARCH_SFC="none" CHEM_ARCH_TC="none" GFASEXP="0001" GFAS_FREQ_HOURS=24 GFAS_LAG_HOURS=0 GFAS_BACKTRACK_DAYS=4 GFAS_OM_CAP=1.0e-8 GFAS_CAP_SPECIES="OC" LCOMPO_DCBB=true LCOMPO_DCVOC=true LCOMPO_DCANT=true LANT_HIGH=true LCOMPO_DCDD=true LCOMPO_DDFLX_DIR=true LUVPROC=false LCOMPO_ARCHIVE_INPUT_2D=false LCOMPO_ARCHIVE_INPUT_3D=false COMPO_RESTART_DAY=1 LCOMPO_PREOP_PP=false LCOMPO_TRACNUDGE=false COMPO_TRACNUDGE_BEGINDATE_GHG=0 COMPO_TRACNUDGE_BEGINDATE_AERO=0 COMPO_TRACNUDGE_BEGINDATE_CHEM=0 COMPO_TRACNUDGE_STEP_GHG=96 COMPO_TRACNUDGE_STEP_AERO=96 COMPO_TRACNUDGE_STEP_CHEM=24 COMPO_TRACNUDGE_DEPRES=79 # #========================================================== # Variables configuring Archiving #========================================================== DO_ARCHIVE=no EXP_LIFETIME=24 LARCHINCR=false UNBLOCK="mv" FDB_COMPLETE="xevent fdb" ARC_COMPLETE="true" CHUNKS=12 FDB_BUF_SECT_SIZE=8388608 FDB_NOF_BUFF=8 MULTIO_SINKS="fdb5" MARS_FDB_DTAP="prod" FDB_HOME_ROOT="/home/fdb" FDB_EXPVER_FILE="/ec/fwsm/sb/fdb5/expver_to_fdb_root.map" FDB_WRITER_TASKS=14 LOUTPUT_FOR_FCDEPAR=false ARCHIVE_FIELDS_FULL_RESOL=true LANONLY=false LREDUCED_ML_PPSTEPS=false # #========================================================== # Variables configuring system #========================================================== FSROOT="/RDX/prepIFS" FSODB="/RDXTMP/prepIFS" FSOROOT="/emos" ACCOUNT="ecsys" #USER="rdx" OWNER="$USER" GROUP="rd" FDB_GROUP="ecmwf" EXPVER=${EXPVER:-"gene"} CLASS="rd" GRIBCLASS=2 SLOWLINES_THRESHOLD=2 NOW=2022060712 MEMBERSTATE=no SINFO_DB="/home/rdx/scriptinfoDB" # #========================================================== # Variables configuring SurfaceFields #========================================================== LNEMOSURF=true SURFSST="blendmask" SURFLST="L4LST" SURFSIC="blendmask" SURFLIC="L4LIC" SURFCURR="none" OCAN_EXPVER="0001" NEMOCONFIG_AN="ORCA025_Z75" OCAN_FSROOT="/emos/OCEA/5" NRTOCEAN_AN=1 LBCICE=false THREADS_NEMOSST=9 # #========================================================== # Variables configuring submit #========================================================== RD_OD_MODE=false SUITE_CONTROL_TYPE="ecflow" SUITE_CONTROL_SERVER="pifs-rd-h.1" SUITE_ROOT="/ec/vol/ifs" # #========================================================== # Variables configuring general #========================================================== RESOL=639 LEVELS=137 GTYPE="_4" DEFAULT_NPROMA_DP=-12 DEFAULT_NPROMA_SP=-16 FPOSINC=false FPOSCLD=false LESUITE=false CLIMVERSION="climate.v018" NGLATH=640 NCYCLE=153 # #========================================================== # Variables configuring CoupledAssim #========================================================== LOUTLOOP=false LCDA_NRT=true LCERA=true LOPA=false THREADS_GRIDDISTS=72 CERA_OUT=false CERA_SAT=false SSTPROD="HAD" SICPROD="OSTIA" RELAXSST=0 LCOMPOSITEOADA=false LPQSCDA=false # #========================================================== # Variables configuring nemogeneral #========================================================== LNEMOCOUP=true LNEMOSST=false LNEMOSSTICE=false COUPFREQ=3600 NAM_NN_FSBC=3 NEMOCONFIG="ORCA025_Z75" OUT_VER=1 OUT_LEVELS=75 OCNVER="V34" LFWBR=no ASSIMVER="V34" INN_VER="2r1" LNRSTTIMEINI=yes OCINI_SOURCE=1 OCINI_FSROOT="/emos/OCEA/5" OCINI_EXPVER="0001" LIMEXPR="0001" LIMI_FSROOT="/emos/OCEA/5" NRTOCEAN=1 ICEMOD=2 OCICE_TYPE="clim" OCICE_SAMPLE_METHOD="hist" OCICE_SAMPLE_SIZE=5 OCICE_DAMP=45 OCICE_PERS=15 OCXSSTICE="/s2o1/ma_ocean/4/0001/sstice_icemask" LIMTEMP=false LIMALB=false NAM_NBITDR=100 OPA_GRID="ORCA025" LSM_ORIG="yes" LWAMNEMOCOUP=yes LWAMNEMOCIC=yes LWAMNEMOCIT=no LWAMNEMOCUR=no LN_WAVETKE=yes LN_STCOR=yes LN_TAUOC=yes QSRTYPE="0" CHLTYPE="0" LNEMOCURR=true NEMO_BRANCH="" # #========================================================== # Variables configuring nemovar #========================================================== VAREXP="VAR" INCMODE="IAU" resbckend=0 NOUTMAX=3 NVAREXP0=0 NTRJFRQ0=24 INNMAX0=0 NFORIN0=0 NUBSSH0=0 NUBVEL0=0 NBCKQC0=0 NBCKRAN0=0 WJCSCA0=0.0 NVAREXP1=0 NTRJFRQ1=24 INNMAX1=40 NFORIN1=1 NUBSSH1=0 NUBVEL1=0 NBCKQC1=0 NBCKRAN1=0 WJCSCA1=0.0 NTIMESTEP_INNER0=43200 NTIMESTEP_INNER1=43200 NVAREXP2=0 NTRJFRQ2=24 INNMAX2=40 NFORIN2=0 NUBSSH2=1 NUBVEL2=1 NBCKQC2=0 NBCKRAN2=0 WJCSCA2=0.0 NTIMESTEP_INNER2=43200 NVAREXP3=0 INNMAX3=40 NFORIN3=0 NUBSSH3=1 NUBVEL3=1 NBCKQC3=0 NBCKRAN3=0 WJCSCA3=0.0 NTIMESTEP_INNER3=43200 ENSEMBLE=0 WINDOW=1 SPINUP=36 sdbckeex=0.03 sdbckt=2.0 sdbcks=0.3 sdbcku=2.0 sdbckv=1.0 sdbcktdo=0.07 sdbcksdo=0.01 BCKEXP="ES7" INITIMESTAMP=49291 FILEXP="ET8" LRNORM=yes NFILNF=1 NESNOW=0 PRTSTA=yes NMCEXP="xxxx" PEREXP="xxxx" IDTWIN=no NPERBK=no CTLEXP="xxxx" NBGECORMOD=4 LN_BGE_EIG_REA=no NBKGRAN=2 NBKGENS=100 LN_ENS_VAR=no NAM_WGT_MOD_VAR=0.5 NAM_WGT_ENS_VAR=0.5 NAM_INF_ENS_SDV=1.0 NAM_BALDEP=5000.0 NAM_FLATSAL=100.0 NAM_FLATSSH=100.0 NAM_DTDZMIN=0.001 NAM_NFILRN2=4 NAM_NMXLCR=2 NAM_SDDPO_TBGE=0.098 NAM_DELTAZ_TBGE=10.0 NAM_DTDZM_BGE=1 # #========================================================== # Variables configuring ocphys #========================================================== PSTAR_LIM=1.5e+04 NR_SSH0="2" NAM_NN_ETAU="1" NAM_RN_EFR=0.05 NAM_NN_HTAU="0" NAM_RN_WHTAUSCL=4 DQDT0=0 DEDS0=0.0 LN_SURFDMP_LIM=no ICEDMP_TYPE="clim" ICEDMP_ECFS_ROOTDIR="/RDX/prepIFS/OCEA/5/0001/" NN_FRLDR_LIM="0" NN_HICIFR_LIM="0" RN_DFLDT_LIM=10.0 RN_DHIDT_LIM=10.0 HIMIN_LIM=0.2 FRIMIN_LIM=0.05 ALPHA_LIMDMP=6.0 ROBS_LIMDMP=0.01 NAM_HDMP0=0 NAM_ZDMP0=0 NAM_SDMP0=1095 NAM_BDMP0=1095 RN_DMP_WIDTH=10 LN_TRADMP_SFC=false OCEDMP_TYPE="clim" OCEDMP_ECFS_ROOTDIR="/RDX/prepIFS/OCEA/5/0001/" LNBIAS=no LNBIASASM=yes BIAS_OFL="" NN_INERTIAL=2 RN_GPHIT0=10 CAPN2VAL=1.e-10 # #========================================================== # Variables configuring ensemb #========================================================== NEMOEDA=0 P3DRAND=yes CDP3DPROBTYPES="831,820,741,401" RP3DREJPROB="0.1,0.05,0.05,0.05" SLARAND=no CDSLAPROBTYPES="J1" RSLAREJPROB="0.1" P3DHPOS=no P3DHTYPES="831,820,741,401" P3DHDISTS="50,50,50,50" P3DHPERTYPES="1,1,1,1" P3DVPOS=2 SEAICEPOS=no NPRVER="V3" FOR_PERT_TYPE="ADD" FOR_PERT_VAR="UTAU VTAU EMP QSR SST ICE_COVER" FOR_PERT_VAR_NEMO="UTAU VTAU EMP QSR" FOR_PERT_VAR_AE="UTAU VTAU EMP QSR SST" TRES_AE="1m" FOR_PERT_VAR_SE="SST ICE_COVER" TRES_SE="1m" # #========================================================== # Variables configuring obs #========================================================== LNGETOBS=yes LNINSITU=yes PASSIVEINSITU=no LN_VTHINTS=yes NVTHINTS=3 LNHORTHIN=yes HORTHINTYPES="741,401" HORTHINDISTS="100.0,100.0" HORTHINDTIME="1.0,1.0" OCQCVER=5 NOINSITU="3" INSITUTYP1="EN" INSITUQC1=yes INSITUQCINN=yes INSITUTYP2="TEP" INSITUQC2=no INSITUTYP3="SEP" INSITUQC3=no OBSINS0="AsORAS5" OBSVER="g10" SLAVER="v5" mdtssh="RIO" NSDTINP=1 NSDSINP=1 NSDSSTP=1 NSDSSHP=1 LNSLA=yes SLANRTDATE="20141226" SLANRTLIST="al/c2/j3/j2/j2n/s3a" SLALISTACT="al/c2/e1/e2/en/enn/g2/h2/j1/j1g/j1n/j2/tp/tpn" SLAQCACT=yes SLAQCINN=yes SLALISTPAS="" SLAQCPAS=yes SLATYP="ref" SLALISTPAS2="" SLATYP2="upd" SLASUPEROB=yes SLASUPER=2 MDTVER="gcojgcm4-dta5_19962012" DRINOBSSLAREF="ec:/ocx/OCEANOBS/MDT" NSSHGLOBAL="monthly" LNSST=no OBSSSTPROD="GRIDDED" LNSSTPASSIVE=no LNSEAICE=true SEAICEDAT="OSTIA" OSISAFDIR="ec:/oparch/sea_ice/OSI-401-b/" SICSUPER=2 SUPERLENG="0.5" NAM_NICETHIN=1 SEAICENEMOVAR=2 # #========================================================== # Variables configuring modelunc #========================================================== LSPSDT=true SDT_NSCALES=3 SDT_SDEV="0.42,0.14,0.048" SDT_XLCOR="500.e3,1000.e3,2000.e3" SDT_TAU="2.16e4,2.592e5,2.592e6" LSPPTGFIX=true LCYPAT=true LCYPAT_INIFAM=true # #========================================================== # Variables configuring inidata #========================================================== INIORIG="mars" INICLASS="rd" INIEXPVER="hjxe" INICYCLE="47r3" INISTREAM="ELDA" INITYPE="4v" INIRESOL=639 INIGTYPE="_4" INILEVELS=137 INISTEP=0 INIPERIOD_4D=12 INIOFFSET_4D=3 INIWINOFFSET=3 INICLIMVERSION="climate.v018" INI_WINDOW_LENGTH_4D=12 INIOZONE=true INICO2=false INICI=true INITILES=true INICLOUDAN=true INIRAINSNOW=true INIMODISALB=true INIHTESSEL=true INIPSBIAS=false INIVARBC=true INIEMISKF=true INIMODERR=true INIENDANENS=50 FORCE_FP=no INIMA="ecmwf" INIMACONS=0 USE_NEW_INILAND=false INILANDCLASS="od" INILANDTYPE="an" INILANDEXPVER="0001" INILANDSTREAM="DA" INILANDCLIMVERSION="climate" USE_NEW_INIWAM=false WAMINICLASS="od" WAMINITYPE="an" WAMINIEXPVER="0001" WAMINISTREAM="WV" INIOBSCLASS="od" INIOBSEXPVER="0001" INIOBSSTREAM="DCDA" INIEXPTYPE="an" INIPATH="""" # #========================================================== # Variables configuring libraries #========================================================== IFS_CYCLE="47r3" BUILD_FROM="this_exp" BUILD_EXPERIMENT_DIR="" IFS_BUNDLE_MODULE="" GIT_VERSION="2.26.0" IFS_GIT_CENTRAL_URL="ssh://git@git.ecmwf.int" IFS_GIT_LOCAL_HOST="aa" IFS_ALL_GIT_TAG="none" IFS_SCRIPTS_GIT_REPO="MAIN" IFS_SCRIPTS_GIT_TAG="CY47R3b" IFS_SUITES_GIT_REPO="MAIN" IFS_SUITES_GIT_TAG="CY47R3b" IFS_SOURCE_GIT_REPO="MAIN" IFS_SOURCE_GIT_TAG="CY47R3b" IFS_BUNDLE_GIT_REPO="MAIN" IFS_BUNDLE_GIT_TAG="CY47R3b" ATLAS_GIT_REPO="MAIN" ATLAS_GIT_TAG="" BUFRDC_TABLES_GIT_REPO="MAIN" BUFRDC_TABLES_GIT_TAG="" COPE_GIT_REPO="MAIN" COPE_GIT_TAG="" ECBUILD_GIT_REPO="MAIN" ECBUILD_GIT_TAG="" ECCODES_GIT_REPO="MAIN" ECCODES_GIT_TAG="" ECKIT_GIT_REPO="MAIN" ECKIT_GIT_TAG="" FDB_GIT_REPO="MAIN" FDB_GIT_TAG="" FCKIT_GIT_REPO="MAIN" FCKIT_GIT_TAG="" IFS_TEST_GIT_REPO="MAIN" IFS_TEST_GIT_TAG="" LIBEMOS_GIT_REPO="MAIN" LIBEMOS_GIT_TAG="" MAGICS_GIT_REPO="MAIN" MAGICS_GIT_TAG="" MARS_SERVER_GIT_REPO="MAIN" MARS_SERVER_GIT_TAG="" METKIT_GIT_REPO="MAIN" METKIT_GIT_TAG="" MULTIO_GIT_REPO="MAIN" MULTIO_GIT_TAG="" ODB_TOOLS_GIT_REPO="MAIN" ODB_TOOLS_GIT_TAG="" ODC_GIT_REPO="MAIN" ODC_GIT_TAG="" OOPS_GIT_REPO="MAIN" OOPS_GIT_TAG="" ECCODES_API_SEED="grib1_mlgrib2" ECCODES_GRIB_DATA_QUALITY_CHECKS=0 GRIB2_NEWMARS=false BOOST_VERSION="1.59.0" LFFTW="true" FFTW_VERSION="3.3.4.7" NETCDF_VERSION="4.3.2" HDF5_VERSION="1.8.13" NEMOINSCRIPTS=yes LOOPS=false LSCREEN_IN_OOPS=false LIFSASOOPS=false # #========================================================== # Variables configuring Forecast #========================================================== TSTEP=720.0 RUN_GFC=no FC00_HR=6 FC06_HR=6 FC12_HR=6 FC18_HR=6 FCLENGTH=240 LEVGEN=true LDUCTDIA=false LELIGHT=true LDIAGTURB_EC=false LESNML=false NSNMLWS=1 # #========================================================== # Variables configuring Description #========================================================== CONTROL=false COMPARE_TO_CONTROL="zzzz" BIT_IDENTICAL=false # #========================================================== # Variables configuring Dates #========================================================== INITIME=2020060112 FINALTIME=2020083112 # #========================================================== # Variables configuring AssimilationMode #========================================================== IFSMODE="4d_inc" SCRANA="active" MONITOR_ONLY=false LFCDEPAR=false FIRST_RANGE=24 LAST_RANGE=48 STEP_RANGE=12 NFCDIAG=20 # #end-of-include $EXPVER/include/config.cancel.h ($EXPVER/include/config.h) fi if [[ $FSFAMILY = @(/an|/surf_anal|/snow|/sv|/fc|/sst|/mars) ]] ; then echo "############################################" echo "########### include config.an.h ##########" echo "############################################" #include $EXPVER/include/config.an.h ($EXPVER/include/config.h) #========================================================== # Variables configuring emptyNamelist #========================================================== ENAMELIST="general" # #========================================================== # Variables configuring WeakConstraints4DVar #========================================================== LWEAK4DVAR=true NTYPE_MODERR=2 ALPHAQ=0.5 LINITCV=true LMODERRFC=true LBGMODERR=true WEAK4D_INTERV=0.0 LMODERR_PERIODIC=false NSPLIT4DWIN=0 LBALSTRATO=false # #========================================================== # Variables configuring VariationalAnalysis #========================================================== NMXLEN=128 RESOLINC_0=191 GTYPEINC_0="l_2" RESOLINC_1=191 GTYPEINC_1="l_2" RESOLINC_2=255 GTYPEINC_2="l_2" RESOLINC_3=255 GTYPEINC_3="l_2" RESOLINC_4=255 GTYPEINC_4="l_2" TSTEP_INC_0=1800 TSTEP_INC_1=1800 TSTEP_INC_2=900 TSTEP_INC_3=1200 TSTEP_INC_4=1200 PERIOD=6 PERIOD_4D=12 WINDOW_LENGTH_4D=12 WINDOW_OFFSET_4D=3 PERIOD_BG=12 STEP_BG=3 MXUP_TRAJ=2 TRAJNOFDB=false NMINSIMPHY=1 ITER_MIN_0=50 ITER_MIN_1=50 ITER_MIN_2=50 ITER_MIN_3=50 ITER_MIN_4=50 LVERIFY_SCREEN=true LATE4DSTART=true LTRAJHR=true LINRADEX=true LNMPHYS=true LPROPTL=false LGPINNER=true LREPRO4DVAR=false LFGNOTBG=false LFSOBS=false FILTERRESOL=255 REDNMC=0.95 # #========================================================== # Variables configuring testOfAnalysis #========================================================== NTESTVAR=3 LCVTEST=true LTLTEST=false LINTEST=false LADTEST=true LRTTOV_ADTEST=false LGRTEST=false LTESTINC=false LVAR_ONE_OBS=false LTWINTRUTH=false LTWINEXP=false TRUTHEXP="none" # #========================================================== # Variables configuring SurfaceAnalysis #========================================================== OBS_SURF_CONV=true LSEKF=false LUSE_EDA_JACOB=true edaHexpid="0001" edaHclass="od" edaHstream="ELDA" edaHnmembers="0" LREAD_EDA_COV_SSA=true LSAVE_SEKF=false LOSTIA=true LHADISST2=false LECURR=false INIECURR=false LUSE_ASCAT=true LUSE_SMOS_TB=false LUSE_SMOS_SM=true NESDIS_RESOL="4" LNESDISIMS=true SSA_GRIB_BITS=16 # #========================================================== # Variables configuring scconfig #========================================================== NPES_SV=4 THREADS_SEKF=16 NPES_AN=224 THREADS_AN=16 THREADS_MIN=16 THREADS_TRAJ=16 THREADS_FINAL_TRAJ=16 NPOOLS=224 NPES_ENKF=512 THREADS_ENKF=4 NPES_ENKFPP=1 THREADS_ENKFPP=1 NPES_FC=376 THREADS_FC=4 DEPTH_IOSERVER=4 THREADS_IOSERVER=1 NPES_MKCMA=4 SCLOGSROOT="/home/rdx/pifsexps/logs" LOGROOT_NOFWS="/ec/vol/ifs/logs" FDB_MPI_CACHE="no" # #========================================================== # Variables configuring Satellites #========================================================== LTOVS=.false. L_SCREEN_LEVEL_OBSOP=false LATOVS=true LAMSUA_ALLSKY=true LMHS_ALLSKY=true LAIRS=true LIRAS=true LMWTS=true LMWTS2=true MWTS2_AVERAGE="3x3" LMWHS=true LMWHS2=true LSAPHIR=true LATMS=true ATMS_AVERAGE="3x3" LATMS_ALLSKY=false LSCAT=.true. LSCATT_NEUTRAL=true LGEOS=true LRAIN1D=false LRAIN4D=true LSSMI=true LSSMIS=true LAMSRE=true LAMSR2=true LTMI=true LGMI=true LMWRI=true LWINDSAT=true LMWIMG=true LMERIS=true LREO3=true LAEOLUS=true LAEOLP=false LAEOL2BP=false LSMOS=false SMOS_AVERAGE=true LSMAP=false LGPSRO=true LIASI=true LCRIS=true LHIRAS=false LIKFS2=false LGBRAD=true LNEXRAD=true LOPERA=false NPRACCL=21600 LRAINGG=false LSYNOP_RGG=false LFULL_IASI=false AMSU_LAND="Dynamic_emis" EMISKF_PATH="standard" LEMISKF=true LIRCLD_SCREEN_HIRS=false LIRCLD_ASSIM_HIRS=false LIRCLD_SCREEN_AIRS=false LIRCLD_ASSIM_AIRS=false LIRCLD_SCREEN_IASI=false LIRCLD_ASSIM_IASI=false # #========================================================== # Variables configuring SatImageSim #========================================================== LSATIM_NEW=false SATIMSTART1=999 SATIMEND1=-999 SATIMSTART3=0 SATIMEND3=12 SATIMSTART6=18 SATIMEND6=120 SATIMSTART12=132 SATIMEND12=240 LSATIMSIM=false SATIMSTART=0 SATIMEND=24 SATIMSTEP=3 # #========================================================== # Variables configuring climate #========================================================== CLMSST=no LBCSST=true PERSST=true FORCE_SST=no SSTLEN=0 SSTINT="1" LONGRANGE_FORCING=false # #========================================================== # Variables configuring Reanalysis #========================================================== ERAFS=false LERA5=false LONGRANGE_FORCING=false RSTBIAS_TS=false ERAPRODUCTS="/era/intprod/data/monitor" LDIAGS_ERA=false LMON_ERA=false ERA_NOGETBIAS=false ERA_POSTPROC=false # #========================================================== # Variables configuring PrognosticHessianTargeting #========================================================== PHT_PRONOBS=false PHT_TOST03=false PHT_LEADTIME_OBS=48 PHT_LEADTIME_BKG=48 PHT_USE_EXPBKG=false PHT_EXPBKG="0001" PHT_PERIOD_HSV=24 PHT_DUPLI_ODB=false PHT_FDBK_SV=false PHT_BLACK_TOST="empty" # #========================================================== # Variables configuring ppgeneral #========================================================== FULL_POS=yes LISENTRPP=false LPPL=1 LPSU=1 LPML=1 LPPV=0 LPTH=0 LPGZ=0 PPFRQ=12 PPSTEPS="-34/0/-3/-6/-9/-12/-18/-24/-30/-36/-42/-48/-54/-60/-66/-72/-78/-84/-90/-96/-102/-108/-114/-120/-126/-132/-144/-156/-168/-180/-192/-204/-216/-228/-240" PPSTEPS_ML="-7/-18/-24/-30/-36/-66/-90/-114" BRF=0 ERF=240 FRQRF=-1 D3GGEXTRAPPS="0" D3SHEXTRAPPS="0" D3GGEXTRAPPP="0" D3SHEXTRAPPP="0" D3GGEXTRAPPT="0" D3SHEXTRAPPT="0" D3GGEXTRAPPV="0" D3SHEXTRAPPV="0" D2SHEXTRAPP="0" SFCEXTRAPP="0" D3GGFIELDSS="133" D3GGFIELDSSTEND="" D3GGFIELDSP="" D3GGFIELDST="133" D3GGFIELDSV="133" D3SHFIELDSS="130/135/138/155" D3SHFIELDSP="129/130/135/138/155/157" D3SHFIELDST="60" D3SHFIELDSV="130" D2SHFIELDS="129/152" SFCFIELDS="31/32/33/34/35/36/37/38/39/40/41/42/44/45/49/50/57/58/59/78/79/129/136/137/139/141/142/143/228/144/145/146/147/148/151/159/164/165/166/167/168/169/170/172/175/176/177/178/179/180/181/182/183/186/187/188/189/195/196/197/198/201/202/205/206/208/209/210/211/212/235/236/238/228008/228009/228010/228011/228012/228013/228014/243/244/245/8/9/228080/228081/228082/228083/228084/228085/228001/260121/260123/228129/228130/003020/228029/228251/228217/228218/228219/228220/228221/260015/228050" SFCFIELDS_ACCUM1="" FIRST_ACCUM1h=1 LAST_ACCUM1h=6 SFCFIELDS_ACCUM3="" FIRST_ACCUM3h=3 LAST_ACCUM3h=30 SFCFIELDS_ACCUM6="" FIRST_ACCUM6h=6 LAST_ACCUM6h=120 LOCEANEXTRGRIB=false LNEMOGRIBMASK=false PRESSURE="1000/925/850/700/500/400/300/250/200/150/100/70/50/30/20/10/7/5/3/2/1" HEIGHT="500/1000/2000" THETA="315/330/370" PV="1000/1500/2000" ETA="1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28/29/30/31/32/33/34/35/36/37/38/39/40/41/42/43/44/45/46/47/48/49/50/51/52/53/54/55/56/57/58/59/60" # #========================================================== # Variables configuring Plots #========================================================== PLOT_RMS=false LGRIDSTAT=false WEBPLOTINTERVAL=5 STAARCHIVE=false LOBSTAT_ALL=true SCOR=no SCOP=no IVER_MARS_GRID="2.50/2.50" IVER_MARS_RESOL="AUTO" IVER_MARS_TRUN="AUTO" IVER_MARS_INTGRID="AUTO" VERFEXPVER="0001" VERFCLASS="od" VERFTYPE="an" VERFCTYPE="fc" VERFCREATE=false VERFEXP2="0001" VERFEXPVER2="0001" VERFCLASS2="od" VERFTYPE2="an" VERIFY_GRIB_API_VERSION="default" VERIFY_ECCODES_VERSION="default" # #========================================================== # Variables configuring Gases #========================================================== LOZONE=true LOZONECH=true LO3CH_HLO=false O3CHEM="H1.0" # #========================================================== # Variables configuring SatelliteMonitor #========================================================== DUMMY=false LMONITORING=false OBS_MONITORING="" LASCATSM=true # #========================================================== # Variables configuring Observations #========================================================== LBUFR=true OBPATH="ops" OBSTREAM="ELDA" OBSCLASS="OD" BASEVER="0001" LCOPE_OVERWRITE_BUOY_PMSL_WITH_PSTN=false B2O_AIRCRAFT_TYPES="" B2O_DEFAULT_BUOY_HEIGHT="0" B2O_BUOY_HEIGHTS="" B2O_MOBILE_LAND_STATIONS=false B2O_TEMP_MAX_LEVELS="5000" B2O_TEMP_ASCENT_BATCH_INTERVAL="900" B2O_TEMP_ASCENT_BATCH_AVERAGING=false B2O_TEMP_DESCENT_BATCH_INTERVAL="300" B2O_TEMP_DESCENT_BATCH_AVERAGING=false B2O_TEMP_DROP_BATCH_INTERVAL="60" B2O_TEMP_DROP_BATCH_AVERAGING=false B2O_STATION_POSITION_TOLERANCE="0.1" B2O_STATION_HEIGHT_TOLERANCE="5.0" B2O_EXTRACT_RH2M=true COPE_OVERRIDE_RH2M=true COPE_APPLY_TD_GT_T_CHECK=true LEXPERIMENTAL_OBS=false EXP_OBS_FORMAT="h5" EXP_OBS_DATA_PATH="ec:/path/to/experimental/data/files" EXP_OBS_MAPPING_FILE="ec:/path/to/mapping_file.dat" OBSASCIILIST="""" OBSODB2LIST="""" LOBS_SCREEN=false ANEMOM_HT=true RSTBIAS=true LREDUCOB=false LOBSCOR=false TSLOTSEC=1800 OBNLAT=90.0 OBWLON=-180.0 OBSLAT=-90.0 OBELON=180.0 # #========================================================== # Variables configuring odb #========================================================== ODB_MAXHANDLE=3 ODB_TIMESLOT_RESOLUTION=60 ODB_CTX_DEBUG=0 ODB_CATCH_SIGNALS=0 ODB_ERRTRA=1 ODB_CCMA_OBS_RANDOMIZE=0 ODB_CCMA_IGNORE_TSLOTS=0 ODB_CCMA_CREATE_DIRECT=1 ODB_LOADBALANCE_CCMA=0 ODB_REPRODUCIBLE_SEQNO=-1 ODB_FLPCHECK=0 ODB_INTCHECK=0 ODB_WRITE_EMPTY_FILES=0 ODB_IO_METHOD=4 ODB_IO_FILESIZE=128 ODB_PACKING=-1 ODB_TEST_INDEX_RANGE=0 ODB_IO_OPENMP=0 PMETHOD=2 ODB_CODE_MAPPINGS="/home/rdx/data/47r3/an/odb_code_mappings.dat" # #========================================================== # Variables configuring odb_arch #========================================================== ODBSAVE_MFB="" ODBSAVE_MFB_EXTRA="" OFB_AUTO_SET="DO_NOT_CHANGE" MFB_AUTO_SET="DO_NOT_CHANGE" ODBSAVE_OFB="" ODBSAVE_OFB_EXTRA="" DUMMY=false ODBSAVE_SQLFILES_PATH="" ODBSAVE_TABLE_DESC="NONE" ODBSAVE_TABLE_HDR="NONE" ODBSAVE_TABLE_TIMESLOT_INDEX="NONE" ODBSAVE_TABLE_MODSURF="NONE" ODBSAVE_TABLE_INDEX="NONE" ODBSAVE_TABLE_BODY="NONE" ODBSAVE_TABLE_ERRSTAT="NONE" ODBSAVE_TABLE_GBRAD="NONE" ODBSAVE_TABLE_GBRAD_BODY="NONE" ODBSAVE_TABLE_RAINGG="NONE" ODBSAVE_TABLE_RAINGG_BODY="NONE" ODBSAVE_TABLE_CONV="NONE" ODBSAVE_TABLE_CONV_BODY="NONE" ODBSAVE_TABLE_SAT="NONE" ODBSAVE_TABLE_RADIANCE="NONE" ODBSAVE_TABLE_RADIANCE_BODY="NONE" ODBSAVE_TABLE_COLLOCATED_IMAGER_INFORMATION="NONE" ODBSAVE_TABLE_CLOUD_SINK="NONE" ODBSAVE_TABLE_ALLSKY="NONE" ODBSAVE_TABLE_ALLSKY_BODY="NONE" ODBSAVE_TABLE_SCATT="NONE" ODBSAVE_TABLE_SCATT_BODY="NONE" ODBSAVE_TABLE_SATOB="NONE" ODBSAVE_TABLE_GNSSRO="NONE" ODBSAVE_TABLE_GNSSRO_BODY="NONE" ODBSAVE_TABLE_UPDATE="NONE" # #========================================================== # Variables configuring ForecastErrors #========================================================== UPTRAJ_FCE=-1 NWRIEVEC=25 RESOLFCE=42 ITER_FCE=150 LANOBSENS=false # #========================================================== # Variables configuring Packages #========================================================== PIFS_MODULEENV_CDO="1.9.10" PIFS_MODULEENV_ECLIB="default" PIFS_MODULEENV_ECMWF_TOOLBOX="default" PIFS_MODULEENV_GRADS="default" PIFS_MODULEENV_HDF5="1.10.6" PIFS_MODULEENV_NCO="4.9.7" PIFS_MODULEENV_NETCDF4="4.7.4" PIFS_MODULEENV_OCXENV="prepifs" PIFS_MODULEENV_PIFSENV="prepifs" PIFS_MODULEENV_PYTHON3="3.8.8-01" PIFS_MODULEENV_QUAVER="default" # #========================================================== # Variables configuring EnsembleKalmanFilter #========================================================== ANAL_METHOD="letkf" COVLOCALH=0.3 COVLOCALV=2.0 INFL_METHOD="jeff" CYCLE_INFLATION=false ADDITIVE_INFLATION=false ALPHA_ADDINFL=1.5 LENKF=false LENKF_HYBRID=false LAN_INITIME=true LWAVESPLIT=false LINCREMENTAL=false # #========================================================== # Variables configuring EnsembleDataAssimilation #========================================================== ENDANENS=50 ENDANENSODB=10 ENDANENSTRAJ=10 ENDANENSFCLONG=0 LEDA_ERRORS_IN=true LJB_EDA=true LSES_EDA=true LEDA_ERRORS_OUT=true LEDA_UNBAL_IN=true LEDA_READ_AV=true LUSE_EDA_SKT=true L_CALCULATE_JBW_STATS=false L_CALCULATE_JBW_INV=false N_BGDATES=5 N_BGMEMBERS=50 N_BGSTEPBY=12 RESOL_ENS_ERRORS=159 ENSADDCLIM=0.10 LENS_CAL=true LENS_CALCONST=false LENS_CAL_PASSIVE=true ENSCALEXPVER="0001" ENSCALCLASS="od" ENSCALSTREAM="LWDA" WINOFFSET_EDACAL=3 ENS_VAR_INFL=0 LONEODB=true LBGPERT=false EDAEXPVER=${EDAEXPVER:-"gene"} EDACYCLE="47r3" EDACLASS="rd" EDASTREAM="ELDA" EDALEVELS=137 EDA_WINDOW_LENGTH_4D=12 LOWNEDA=false EDA_MXUP_TRAJ=2 EDA_MXUP_TRAJ_MEM=-1 NMINSIMPHYMEM=-1 EDAPRECCTRL=1 EDA_PERIOD_4D=12 EDA_RESOL=399 EDA_WINDOW_OFFSET_4D=3 RESOLJB_0=95 RESOLJB_1=127 RESOLJB_2=159 RESOLJB_3=191 RESOLJB_4=255 RESOLJB_5=319 RESOLJB_6=399 MXUP_RESOLJB=7 EDA_CHUNKS=1 # #========================================================== # Variables configuring EarlyDelivery #========================================================== LCONTINUOUS_DA=false WINDOW_LENGTH_4D_ED=8 WINDOW_OFFSET_4D_ED=3 REINIOFFSET=6 REINIHOUR=0 REINIPERIOD=12 REINIWINDOW_LENGTH_4D=12 ED_PERIOD=12 ED_CUTOFF="0400" LFILTER_ED=false ED_MXUP_TRAJ=2 ED_RESOLINC_0=95 ED_GTYPEINC_0="l_2" ED_RESOLINC_1=159 ED_GTYPEINC_1="l_2" ED_RESOLINC_2=255 ED_GTYPEINC_2="l_2" ED_RESOLINC_3=255 ED_GTYPEINC_3="l_2" ED_RESOLINC_4=255 ED_GTYPEINC_4="l_2" ED_TSTEP_INC_0=3600 ED_TSTEP_INC_1=1800 ED_TSTEP_INC_2=1200 ED_TSTEP_INC_3=1200 ED_TSTEP_INC_4=1200 ED_ONLY=false REINIEXPVER="self" REINICLASS="rd" REINISTREAM="LWDA" REINI_NOT_ED=false LSCDA=false # #========================================================== # Variables configuring Dr_Hook #========================================================== DR_HOOK=true DR_HOOK_OPT="none" DR_HOOK_PROFILE_LIMIT=-10 DR_HOOK_HASHBITS=15 DR_HOOK_CATCH_SIGNALS="0" DR_HOOK_IGNORE_SIGNALS="0" # #========================================================== # Variables configuring wavgeneral #========================================================== WAVE=yes WAM2WAY=yes WAMNSTPW=1 WAMRESOL="global25" WAMNFRE=36 WAMNANG=36 INIWAVE=yes WAMCOLDLENGTH=240 WAMALT=yes WAMSAR=no WAMSARASS=false WAM_ASSIMIL_PERIOD=6 WGRIBIN=yes WAMPHYS=1 WAM_LLCAPCHNK=true LWAMCURR=false WAM_LWVFLX_SNL=false WAMMASKICE=true WAMANPARAM="229/230/231/232/220/221/244/222/252/207/253/254/218/217/219/215/216/233/245/249/212/214/209/246/247" WAMFCPARAM="229/230/231/232/220/221/244/222/252/207/253/254/218/217/219/215/216/233/245/249/212/214/209" # #========================================================== # Variables configuring compile #========================================================== SC_PRESERVED_BUILD_DEFAULT_DIR="/home/rdx/preserved_builds" BUILDSC=true SC_BUILD_ARCH="ecmwf/hpc2020/intel/2021.4.0/intel-mpi/2021.4.0/" SC_BUILD_OPT="BIT" LSC_BUILD_INITNAN=false LSC_BUILD_ARRAY_BOUND_CHECK=false SC_RESTORE_BUILD_FROM_ROOT="default" SC_RESTORE_BUILD_NAME="default" SC_PRESERVE_BUILD_TO_ROOT="default" CMAKE_BUILDSYS="make" TOTALVIEW_VERSION="undef" MEMORY_DEBUGGING=false LMPIPROF=false EC_FILL_NANS=false RUN_PARALLEL=true # #========================================================== # Variables configuring Blacklist #========================================================== BLACK_DS="ops" BLACK_MM="ops" BLACK_EX="ops" # #========================================================== # Variables configuring BiasCorrection #========================================================== LVARBC=true VARBC_PATH="standard" NCSTART_TO3=2 NCSTART_GBRAD=0 NCSTART_RAD=2 NCSTART_ALLSKY=2 NCSTART_AIREP=0 NCSTART_TCWV=0 VARBC_ARCHIVE_EVOLVE=false LCONSTANT_VARBC=false LCALC_PSBIAS=false LUSE_PSBIAS=true LCALC_RSTRHBIAS=false LUSE_RSTRHBIAS=true LUSE_RSTBIAS=true VARBC_PS=false VARBC_RSONDE=false LCOLDSTART_SFCOBS=true BIAS_PATH_AMV="none" BIAS_PATH_REO3="none" LAMV_REASSIGN=false LREO3_BCOR=false LREO3_BCOR_EXT=false # #========================================================== # Variables configuring AugmentedControlVariable #========================================================== LJB_ACV=false LJB_HYBRID_ACV=false LTOVSCV_ACV=false LINVER_ACV=false LPAROPTIACV=false STATIC_WEIGHT=1. TAPER_WEIGHT_HYBRID=false TAPER_WEIGHT_BOTTOM=25000. TAPER_WEIGHT_TOP=100. NACV_MEMBERS=0 ACVEXPVER="0001" ACVCLASS="od" ACVSTREAM="ELDA" ACVLEVELS=137 ACV_RESOL=-1 ACV_LAG_TIME=0 ACV_LAG_STEP=0 ACV_LOC_HSCALE=300 ACV_LOC_VSCALE=0 ACV_LOC_LAP_VOD=false ACV_LOC_LAP_LNSP=false ACV_LOC_LAP_HUM=false ACV_TAPER_HUM=false # #========================================================== # Variables configuring macc #========================================================== LMACC=false COMPO_ARCH_PRESET="standard" GHGVAR="" INIGHG=false GHG_CO2_INIEXPVER="h72g" GHG_CO2_INICLASS="rd" GHG_CO2_INISTREAM="da" GHG_CO2_INIFC=0 GHG_CO2_INITYPE="an" GHG_CO2_INILEVELS="137" GHG_CH4_INIEXPVER="h72g" GHG_CH4_INICLASS="rd" GHG_CH4_INISTREAM="da" GHG_CH4_INIFC=0 GHG_CH4_INITYPE="an" GHG_CH4_INILEVELS="137" LGHG_MF=true LGHG_QM=false LGHG_QM3D=true GHG_ARCH_TYPES="" LNEE_ONLINE=true LGHG_ACCO2=false LBFAS_CO2=false BFAS_COLDSTARTEXPID="0001" BFAS_COLDSTARTSTREAM="oper" BFAS_COLDSTARTEXPCLASS="od" BFAS_COLDSTARTRESOL="1279" BFAS_COLDSTARTGTYPE="_4" BFAS_WARMSTART_MODNEE_ANOMALY=false BFAS_SAVEFILES=false AERO_SCHEME="aer" AERO_VER="ver6" AEROVAR="" LSEASALT_RH80=true INIAERO=false AERO_INIEXP="eac4" AERO_INIVER="ver1" AERO_INITYPE="an" AERO_INICLASS="mc" AERO_INISTREAM="da" AERO_INIFC=0 AERO_INIDATE=0 AERO_INILEVELS=60 LSEASALT_INI_RH80=true AEROZEROINIT="" NDRYDEPVEL_DYN=2 NSSALT=4 LAERSEDIMSS=true NDDUST=2 NSO4SCHEME=1 LAERDUST_NEWBIN=false LAERDUSTSOURCE=true LINJ=true LVOLC_ALTI=true LAERO_MACCITY=true LAERSOA_CHEM=true LAERSOAEMIS_FLUX=true LAERRESUSPENSION=false LAERCHEM=true NAERSCAV=3 LAERRRTM=true LAERO_MF=true LAERO_QM=true LAERO_QM3D=false AERO_ARCH_TYPES="" AERO_OPTICS_TYPES="" LAERAOT=false LAEREXT=false LAERLISI_SAT=false LAERLISI_GND=false LAERLISI_UNATT=false LAEROUT=false LCHEM=false CHEM_SCHEME="tm5" CHEM_VER="ver16.3" CHEM_EMIS="CAMS_GLOB_NRT_v02f_24bit" CHEM_EMIS_YEAR=0 CHEM_INIEXP="eac4" CHEM_INIVER="ver15" CHEM_INITYPE="an" CHEM_INICLASS="mc" CHEM_INISTREAM="da" CHEM_INIFC=0 CHEM_INIDATE=0 CHEM_INILEVELS="60" LCHEM_DIA=false LCHEM_DIA_CLEANSTART=true LCHEM_DIAC=false LCHEM_DIAF=false LCHEM_LIGHT=true LCHEM_ACNOX=true LCHEM_0NOX=false KCHEM_NOXADV=0 LCHEM_ANAO3=false LCHEM_DDFLX=true LCHEM_DVOL=true LCHEM_TL=true LCHEM_MF=true LCHEM_QM=true LCHEM_QM3D=false LCHEM_TROPO=true LCHEM_ANACH4=false LCHEM_CONVSCAV=false LCHEM_AEROI=true LCHEM_O3RAD=true LO3_CHEM_UV=false LMCC_COMPO=false LINJ_CHEM=true LCHEM_NEWSUMO=true LCHEM_REVCHEM=false LCHEM_BASCOE_JON=false LSMOOTH_NO_EMIS=true KCHEM_SOLVE=1 LUSESO2VOLC=false CHEM_ARCH_ML="none" CHEM_ARCH_PL="none" CHEM_ARCH_SFC="none" CHEM_ARCH_TC="none" GFASEXP="0001" GFAS_FREQ_HOURS=24 GFAS_LAG_HOURS=0 GFAS_BACKTRACK_DAYS=4 GFAS_OM_CAP=1.0e-8 GFAS_CAP_SPECIES="OC" LCOMPO_DCBB=true LCOMPO_DCVOC=true LCOMPO_DCANT=true LANT_HIGH=true LCOMPO_DCDD=true LCOMPO_DDFLX_DIR=true LUVPROC=false LCOMPO_ARCHIVE_INPUT_2D=false LCOMPO_ARCHIVE_INPUT_3D=false COMPO_RESTART_DAY=1 LCOMPO_PREOP_PP=false LCOMPO_TRACNUDGE=false COMPO_TRACNUDGE_BEGINDATE_GHG=0 COMPO_TRACNUDGE_BEGINDATE_AERO=0 COMPO_TRACNUDGE_BEGINDATE_CHEM=0 COMPO_TRACNUDGE_STEP_GHG=96 COMPO_TRACNUDGE_STEP_AERO=96 COMPO_TRACNUDGE_STEP_CHEM=24 COMPO_TRACNUDGE_DEPRES=79 # #========================================================== # Variables configuring Archiving #========================================================== DO_ARCHIVE=no EXP_LIFETIME=24 LARCHINCR=false UNBLOCK="mv" FDB_COMPLETE="xevent fdb" ARC_COMPLETE="true" CHUNKS=12 FDB_BUF_SECT_SIZE=8388608 FDB_NOF_BUFF=8 MULTIO_SINKS="fdb5" MARS_FDB_DTAP="prod" FDB_HOME_ROOT="/home/fdb" FDB_EXPVER_FILE="/ec/fwsm/sb/fdb5/expver_to_fdb_root.map" FDB_WRITER_TASKS=14 LOUTPUT_FOR_FCDEPAR=false ARCHIVE_FIELDS_FULL_RESOL=true LANONLY=false LREDUCED_ML_PPSTEPS=false # #========================================================== # Variables configuring system #========================================================== FSROOT="/RDX/prepIFS" FSODB="/RDXTMP/prepIFS" FSOROOT="/emos" ACCOUNT="ecsys" #USER="rdx" OWNER="$USER" GROUP="rd" FDB_GROUP="ecmwf" EXPVER=${EXPVER:-"gene"} CLASS="rd" GRIBCLASS=2 SLOWLINES_THRESHOLD=2 NOW=2022060712 MEMBERSTATE=no SINFO_DB="/home/rdx/scriptinfoDB" # #========================================================== # Variables configuring SurfaceFields #========================================================== LNEMOSURF=true SURFSST="blendmask" SURFLST="L4LST" SURFSIC="blendmask" SURFLIC="L4LIC" SURFCURR="none" OCAN_EXPVER="0001" NEMOCONFIG_AN="ORCA025_Z75" OCAN_FSROOT="/emos/OCEA/5" NRTOCEAN_AN=1 LBCICE=false THREADS_NEMOSST=9 # #========================================================== # Variables configuring submit #========================================================== RD_OD_MODE=false SUITE_CONTROL_TYPE="ecflow" SUITE_CONTROL_SERVER="pifs-rd-h.1" SUITE_ROOT="/ec/vol/ifs" # #========================================================== # Variables configuring general #========================================================== RESOL=639 LEVELS=137 GTYPE="_4" DEFAULT_NPROMA_DP=-12 DEFAULT_NPROMA_SP=-16 FPOSINC=false FPOSCLD=false LESUITE=false CLIMVERSION="climate.v018" NGLATH=640 NCYCLE=153 # #========================================================== # Variables configuring CoupledAssim #========================================================== LOUTLOOP=false LCDA_NRT=true LCERA=true LOPA=false THREADS_GRIDDISTS=72 CERA_OUT=false CERA_SAT=false SSTPROD="HAD" SICPROD="OSTIA" RELAXSST=0 LCOMPOSITEOADA=false LPQSCDA=false # #========================================================== # Variables configuring nemogeneral #========================================================== LNEMOCOUP=true LNEMOSST=false LNEMOSSTICE=false COUPFREQ=3600 NAM_NN_FSBC=3 NEMOCONFIG="ORCA025_Z75" OUT_VER=1 OUT_LEVELS=75 OCNVER="V34" LFWBR=no ASSIMVER="V34" INN_VER="2r1" LNRSTTIMEINI=yes OCINI_SOURCE=1 OCINI_FSROOT="/emos/OCEA/5" OCINI_EXPVER="0001" LIMEXPR="0001" LIMI_FSROOT="/emos/OCEA/5" NRTOCEAN=1 ICEMOD=2 OCICE_TYPE="clim" OCICE_SAMPLE_METHOD="hist" OCICE_SAMPLE_SIZE=5 OCICE_DAMP=45 OCICE_PERS=15 OCXSSTICE="/s2o1/ma_ocean/4/0001/sstice_icemask" LIMTEMP=false LIMALB=false NAM_NBITDR=100 OPA_GRID="ORCA025" LSM_ORIG="yes" LWAMNEMOCOUP=yes LWAMNEMOCIC=yes LWAMNEMOCIT=no LWAMNEMOCUR=no LN_WAVETKE=yes LN_STCOR=yes LN_TAUOC=yes QSRTYPE="0" CHLTYPE="0" LNEMOCURR=true NEMO_BRANCH="" # #========================================================== # Variables configuring nemovar #========================================================== VAREXP="VAR" INCMODE="IAU" resbckend=0 NOUTMAX=3 NVAREXP0=0 NTRJFRQ0=24 INNMAX0=0 NFORIN0=0 NUBSSH0=0 NUBVEL0=0 NBCKQC0=0 NBCKRAN0=0 WJCSCA0=0.0 NVAREXP1=0 NTRJFRQ1=24 INNMAX1=40 NFORIN1=1 NUBSSH1=0 NUBVEL1=0 NBCKQC1=0 NBCKRAN1=0 WJCSCA1=0.0 NTIMESTEP_INNER0=43200 NTIMESTEP_INNER1=43200 NVAREXP2=0 NTRJFRQ2=24 INNMAX2=40 NFORIN2=0 NUBSSH2=1 NUBVEL2=1 NBCKQC2=0 NBCKRAN2=0 WJCSCA2=0.0 NTIMESTEP_INNER2=43200 NVAREXP3=0 INNMAX3=40 NFORIN3=0 NUBSSH3=1 NUBVEL3=1 NBCKQC3=0 NBCKRAN3=0 WJCSCA3=0.0 NTIMESTEP_INNER3=43200 ENSEMBLE=0 WINDOW=1 SPINUP=36 sdbckeex=0.03 sdbckt=2.0 sdbcks=0.3 sdbcku=2.0 sdbckv=1.0 sdbcktdo=0.07 sdbcksdo=0.01 BCKEXP="ES7" INITIMESTAMP=49291 FILEXP="ET8" LRNORM=yes NFILNF=1 NESNOW=0 PRTSTA=yes NMCEXP="xxxx" PEREXP="xxxx" IDTWIN=no NPERBK=no CTLEXP="xxxx" NBGECORMOD=4 LN_BGE_EIG_REA=no NBKGRAN=2 NBKGENS=100 LN_ENS_VAR=no NAM_WGT_MOD_VAR=0.5 NAM_WGT_ENS_VAR=0.5 NAM_INF_ENS_SDV=1.0 NAM_BALDEP=5000.0 NAM_FLATSAL=100.0 NAM_FLATSSH=100.0 NAM_DTDZMIN=0.001 NAM_NFILRN2=4 NAM_NMXLCR=2 NAM_SDDPO_TBGE=0.098 NAM_DELTAZ_TBGE=10.0 NAM_DTDZM_BGE=1 # #========================================================== # Variables configuring ocphys #========================================================== PSTAR_LIM=1.5e+04 NR_SSH0="2" NAM_NN_ETAU="1" NAM_RN_EFR=0.05 NAM_NN_HTAU="0" NAM_RN_WHTAUSCL=4 DQDT0=0 DEDS0=0.0 LN_SURFDMP_LIM=no ICEDMP_TYPE="clim" ICEDMP_ECFS_ROOTDIR="/RDX/prepIFS/OCEA/5/0001/" NN_FRLDR_LIM="0" NN_HICIFR_LIM="0" RN_DFLDT_LIM=10.0 RN_DHIDT_LIM=10.0 HIMIN_LIM=0.2 FRIMIN_LIM=0.05 ALPHA_LIMDMP=6.0 ROBS_LIMDMP=0.01 NAM_HDMP0=0 NAM_ZDMP0=0 NAM_SDMP0=1095 NAM_BDMP0=1095 RN_DMP_WIDTH=10 LN_TRADMP_SFC=false OCEDMP_TYPE="clim" OCEDMP_ECFS_ROOTDIR="/RDX/prepIFS/OCEA/5/0001/" LNBIAS=no LNBIASASM=yes BIAS_OFL="" NN_INERTIAL=2 RN_GPHIT0=10 CAPN2VAL=1.e-10 # #========================================================== # Variables configuring ensemb #========================================================== NEMOEDA=0 P3DRAND=yes CDP3DPROBTYPES="831,820,741,401" RP3DREJPROB="0.1,0.05,0.05,0.05" SLARAND=no CDSLAPROBTYPES="J1" RSLAREJPROB="0.1" P3DHPOS=no P3DHTYPES="831,820,741,401" P3DHDISTS="50,50,50,50" P3DHPERTYPES="1,1,1,1" P3DVPOS=2 SEAICEPOS=no NPRVER="V3" FOR_PERT_TYPE="ADD" FOR_PERT_VAR="UTAU VTAU EMP QSR SST ICE_COVER" FOR_PERT_VAR_NEMO="UTAU VTAU EMP QSR" FOR_PERT_VAR_AE="UTAU VTAU EMP QSR SST" TRES_AE="1m" FOR_PERT_VAR_SE="SST ICE_COVER" TRES_SE="1m" # #========================================================== # Variables configuring obs #========================================================== LNGETOBS=yes LNINSITU=yes PASSIVEINSITU=no LN_VTHINTS=yes NVTHINTS=3 LNHORTHIN=yes HORTHINTYPES="741,401" HORTHINDISTS="100.0,100.0" HORTHINDTIME="1.0,1.0" OCQCVER=5 NOINSITU="3" INSITUTYP1="EN" INSITUQC1=yes INSITUQCINN=yes INSITUTYP2="TEP" INSITUQC2=no INSITUTYP3="SEP" INSITUQC3=no OBSINS0="AsORAS5" OBSVER="g10" SLAVER="v5" mdtssh="RIO" NSDTINP=1 NSDSINP=1 NSDSSTP=1 NSDSSHP=1 LNSLA=yes SLANRTDATE="20141226" SLANRTLIST="al/c2/j3/j2/j2n/s3a" SLALISTACT="al/c2/e1/e2/en/enn/g2/h2/j1/j1g/j1n/j2/tp/tpn" SLAQCACT=yes SLAQCINN=yes SLALISTPAS="" SLAQCPAS=yes SLATYP="ref" SLALISTPAS2="" SLATYP2="upd" SLASUPEROB=yes SLASUPER=2 MDTVER="gcojgcm4-dta5_19962012" DRINOBSSLAREF="ec:/ocx/OCEANOBS/MDT" NSSHGLOBAL="monthly" LNSST=no OBSSSTPROD="GRIDDED" LNSSTPASSIVE=no LNSEAICE=true SEAICEDAT="OSTIA" OSISAFDIR="ec:/oparch/sea_ice/OSI-401-b/" SICSUPER=2 SUPERLENG="0.5" NAM_NICETHIN=1 SEAICENEMOVAR=2 # #========================================================== # Variables configuring modelunc #========================================================== LSPSDT=true SDT_NSCALES=3 SDT_SDEV="0.42,0.14,0.048" SDT_XLCOR="500.e3,1000.e3,2000.e3" SDT_TAU="2.16e4,2.592e5,2.592e6" LSPPTGFIX=true LCYPAT=true LCYPAT_INIFAM=true # #========================================================== # Variables configuring inidata #========================================================== INIORIG="mars" INICLASS="rd" INIEXPVER="hjxe" INICYCLE="47r3" INISTREAM="ELDA" INITYPE="4v" INIRESOL=639 INIGTYPE="_4" INILEVELS=137 INISTEP=0 INIPERIOD_4D=12 INIOFFSET_4D=3 INIWINOFFSET=3 INICLIMVERSION="climate.v018" INI_WINDOW_LENGTH_4D=12 INIOZONE=true INICO2=false INICI=true INITILES=true INICLOUDAN=true INIRAINSNOW=true INIMODISALB=true INIHTESSEL=true INIPSBIAS=false INIVARBC=true INIEMISKF=true INIMODERR=true INIENDANENS=50 FORCE_FP=no INIMA="ecmwf" INIMACONS=0 USE_NEW_INILAND=false INILANDCLASS="od" INILANDTYPE="an" INILANDEXPVER="0001" INILANDSTREAM="DA" INILANDCLIMVERSION="climate" USE_NEW_INIWAM=false WAMINICLASS="od" WAMINITYPE="an" WAMINIEXPVER="0001" WAMINISTREAM="WV" INIOBSCLASS="od" INIOBSEXPVER="0001" INIOBSSTREAM="DCDA" INIEXPTYPE="an" INIPATH="""" # #========================================================== # Variables configuring libraries #========================================================== IFS_CYCLE="47r3" BUILD_FROM="this_exp" BUILD_EXPERIMENT_DIR="" IFS_BUNDLE_MODULE="" GIT_VERSION="2.26.0" IFS_GIT_CENTRAL_URL="ssh://git@git.ecmwf.int" IFS_GIT_LOCAL_HOST="aa" IFS_ALL_GIT_TAG="none" IFS_SCRIPTS_GIT_REPO="MAIN" IFS_SCRIPTS_GIT_TAG="CY47R3b" IFS_SUITES_GIT_REPO="MAIN" IFS_SUITES_GIT_TAG="CY47R3b" IFS_SOURCE_GIT_REPO="MAIN" IFS_SOURCE_GIT_TAG="CY47R3b" IFS_BUNDLE_GIT_REPO="MAIN" IFS_BUNDLE_GIT_TAG="CY47R3b" ATLAS_GIT_REPO="MAIN" ATLAS_GIT_TAG="" BUFRDC_TABLES_GIT_REPO="MAIN" BUFRDC_TABLES_GIT_TAG="" COPE_GIT_REPO="MAIN" COPE_GIT_TAG="" ECBUILD_GIT_REPO="MAIN" ECBUILD_GIT_TAG="" ECCODES_GIT_REPO="MAIN" ECCODES_GIT_TAG="" ECKIT_GIT_REPO="MAIN" ECKIT_GIT_TAG="" FDB_GIT_REPO="MAIN" FDB_GIT_TAG="" FCKIT_GIT_REPO="MAIN" FCKIT_GIT_TAG="" IFS_TEST_GIT_REPO="MAIN" IFS_TEST_GIT_TAG="" LIBEMOS_GIT_REPO="MAIN" LIBEMOS_GIT_TAG="" MAGICS_GIT_REPO="MAIN" MAGICS_GIT_TAG="" MARS_SERVER_GIT_REPO="MAIN" MARS_SERVER_GIT_TAG="" METKIT_GIT_REPO="MAIN" METKIT_GIT_TAG="" MULTIO_GIT_REPO="MAIN" MULTIO_GIT_TAG="" ODB_TOOLS_GIT_REPO="MAIN" ODB_TOOLS_GIT_TAG="" ODC_GIT_REPO="MAIN" ODC_GIT_TAG="" OOPS_GIT_REPO="MAIN" OOPS_GIT_TAG="" ECCODES_API_SEED="grib1_mlgrib2" ECCODES_GRIB_DATA_QUALITY_CHECKS=0 GRIB2_NEWMARS=false BOOST_VERSION="1.59.0" LFFTW="true" FFTW_VERSION="3.3.4.7" NETCDF_VERSION="4.3.2" HDF5_VERSION="1.8.13" NEMOINSCRIPTS=yes LOOPS=false LSCREEN_IN_OOPS=false LIFSASOOPS=false # #========================================================== # Variables configuring Forecast #========================================================== TSTEP=720.0 RUN_GFC=no FC00_HR=6 FC06_HR=6 FC12_HR=6 FC18_HR=6 FCLENGTH=240 LEVGEN=true LDUCTDIA=false LELIGHT=true LDIAGTURB_EC=false LESNML=false NSNMLWS=1 # #========================================================== # Variables configuring Description #========================================================== CONTROL=false COMPARE_TO_CONTROL="zzzz" BIT_IDENTICAL=false # #========================================================== # Variables configuring Dates #========================================================== INITIME=2020060112 FINALTIME=2020083112 # #========================================================== # Variables configuring AssimilationMode #========================================================== IFSMODE="4d_inc" SCRANA="active" MONITOR_ONLY=false LFCDEPAR=false FIRST_RANGE=24 LAST_RANGE=48 STEP_RANGE=12 NFCDIAG=20 # #end-of-include $EXPVER/include/config.an.h ($EXPVER/include/config.h) fi if [[ $FSFAMILY = @(/an|/enkf|/fc|/mars|/surf_anal) ]] ; then echo "############################################" echo "########### include config.enkf.h ##########" echo "############################################" #end-of-include $EXPVER/include/config.enkf.h ($EXPVER/include/config.h) fi if [[ $FSFAMILY = "/an" && $ECF_LENKF_HYBRID = 1 ]] ; then echo "############################################" echo "############ LENKF_HYBRID ############" echo "########### include config.enkf.h ##########" echo "############################################" #end-of-include $EXPVER/include/config.enkf.h ($EXPVER/include/config.h) fi if [ $FSFAMILY = "/gfc" ] || [ $FSFAMILY = "/amip" ] ; then echo "############################################" echo "########### include config.fc.h ############" echo "############################################" #end-of-include $EXPVER/include/config.fc.h ($EXPVER/include/config.h) fi if [ $FSFAMILY = "/sfc_an" ] || [ $FSFAMILY = "/an" ] || [ $FSFAMILY = "/snow" ] || [ $FSFAMILY = "/sst" ] || \ [ $FSFAMILY = "/mars" ] ; then echo "############################################" echo "########### include config.sfc_an.h ############" echo "############################################" #end-of-include $EXPVER/include/config.sfc_an.h ($EXPVER/include/config.h) fi if [ $FSFAMILY = "/ifs_ctm" ] || [ $FSFAMILY = "/fc" ] ; then echo "############################################" echo "########### include config.ifs_ctm.h ############" echo "############################################" #end-of-include $EXPVER/include/config.ifs_ctm.h ($EXPVER/include/config.h) fi if [[ $FSFAMILY = @(/fsobs|/an|/fc|/snow|/sst|/mars|/sens|/enkf|/surf_anal) ]] then echo "############################################" echo "########### include config.fsobs.h #########" echo "############################################" #end-of-include $EXPVER/include/config.fsobs.h ($EXPVER/include/config.h) fi if [ $FSFAMILY = "/climplot" ] ; then echo "############################################" echo "########### include config.climplot.h ######" echo "############################################" #end-of-include $EXPVER/include/config.climplot.h ($EXPVER/include/config.h) fi if [ $FSFAMILY = "/obstat" ] ; then echo "############################################" echo "########### include config.obstat.h ########" echo "############################################" #end-of-include $EXPVER/include/config.obstat.h ($EXPVER/include/config.h) fi if [ $FSFAMILY = "/sens" ] ; then echo "############################################" echo "########### include config.sens.h ##########" echo "############################################" #end-of-include $EXPVER/include/config.sens.h ($EXPVER/include/config.h) fi if [ $FSFAMILY = "/sens" ] ; then echo "############################################" echo "########### include config.sens.h ##########" echo "############################################" #end-of-include $EXPVER/include/config.sens.h ($EXPVER/include/config.h) fi if [ $FSFAMILY = "/surface" ] ; then echo "############################################" echo "########### include config.surface.h ##########" echo "############################################" #end-of-include $EXPVER/include/config.surface.h ($EXPVER/include/config.h) fi if [ $FSFAMILY = "/mc" ] ; then fs=$(echo ${_FAMILY_} | cut -d/ -f2) if [ "$fs" = "eps_sv" ] ; then echo "############################################" echo "########### include config.eps_sv.h ########" echo "############################################" #end-of-include $EXPVER/include/config.eps_sv.h ($EXPVER/include/config.h) #include $EXPVER/include/config_dep.h ($EXPVER/include/config.h) # # SHELL variables are set to depend on other SHELL or SMS variables # Required to run the new EDA-SVINI EPS # # Authors: R Buizza - M Leutbecher # Version: Original Feb 2010 # Version: 2011/11/21 INIENDA=${_INIENDA_} WAVEENDA=${_WAVEENDA_} RECENTRE=${_RECENTRE_} N_PERT_AN=${_N_PERT_AN_} EDAPERT_PLUSMINUS=${_EDAPERT_PLUSMINUS_} if [[ $FSFAMILY = "/longrange" ]] ; then INIEXPVER=${_INIEXPVER_} INISTREAM=${_INISTREAM_} INICLASS=${_INICLASS_} INIWINOFFSET=${_INIWINOFFSET_} INITYPE=${_INITYPE_} INISTEP=${_INISTEP_} else INIEXPVER=${_INIEXPVER_} INISTREAM=${_INISTREAM_} INICLASS=${_INICLASS_} INIWINOFFSET=${_INIWINOFFSET_} INITYPE=${_INITYPE_} INISTEP=${_INISTEP_} fi ININUMBER=${_ININUMBER_} EPSMODE=${_EPSMODE_} EPSTROP=${_EPSTROP_} SVMODE=${_SVMODE_} TLMODE=${_TLMODE_} SVREGION=${_SVREGION_} SVNUM=${_SVNUM_} if [[ ${ISREFC:-false} = true ]]; then HC_REFDATE=$( echo ${ymd} |cut -c 1-8 ) else HC_REFDATE=0 fi #end-of-include $EXPVER/include/config_dep.h ($EXPVER/include/config.h) fi if [ "$fs" = "tg_sv" ] ; then echo "############################################" echo "########### include config.tg_sv.h ########" echo "############################################" #end-of-include $EXPVER/include/config.tg_sv.h ($EXPVER/include/config.h) fi if [ "$fs" = "eps_fc" ] ; then echo "############################################" echo "########### include config.eps_fc.h ########" echo "############################################" #end-of-include $EXPVER/include/config.eps_fc.h ($EXPVER/include/config.h) fi if [ "$fs" = "eps_varfc" ] ; then echo "############################################" echo "########### include config.eps_varfc.h #####" echo "############################################" #end-of-include $EXPVER/include/config.eps_varfc.h ($EXPVER/include/config.h) #include $EXPVER/include/config_dep.h ($EXPVER/include/config.h) # # SHELL variables are set to depend on other SHELL or SMS variables # Required to run the new EDA-SVINI EPS # # Authors: R Buizza - M Leutbecher # Version: Original Feb 2010 # Version: 2011/11/21 INIENDA=${_INIENDA_} WAVEENDA=${_WAVEENDA_} RECENTRE=${_RECENTRE_} N_PERT_AN=${_N_PERT_AN_} EDAPERT_PLUSMINUS=${_EDAPERT_PLUSMINUS_} if [[ $FSFAMILY = "/longrange" ]] ; then INIEXPVER=${_INIEXPVER_} INISTREAM=${_INISTREAM_} INICLASS=${_INICLASS_} INIWINOFFSET=${_INIWINOFFSET_} INITYPE=${_INITYPE_} INISTEP=${_INISTEP_} else INIEXPVER=${_INIEXPVER_} INISTREAM=${_INISTREAM_} INICLASS=${_INICLASS_} INIWINOFFSET=${_INIWINOFFSET_} INITYPE=${_INITYPE_} INISTEP=${_INISTEP_} fi ININUMBER=${_ININUMBER_} EPSMODE=${_EPSMODE_} EPSTROP=${_EPSTROP_} SVMODE=${_SVMODE_} TLMODE=${_TLMODE_} SVREGION=${_SVREGION_} SVNUM=${_SVNUM_} if [[ ${ISREFC:-false} = true ]]; then HC_REFDATE=$( echo ${ymd} |cut -c 1-8 ) else HC_REFDATE=0 fi #end-of-include $EXPVER/include/config_dep.h ($EXPVER/include/config.h) fi if [ "$fs" = "eps_nemo" ] ; then echo "############################################" echo "########### include config.eps_nemo.h #####" echo "############################################" #end-of-include $EXPVER/include/config.eps_nemo.h ($EXPVER/include/config.h) #include $EXPVER/include/config_dep.h ($EXPVER/include/config.h) # # SHELL variables are set to depend on other SHELL or SMS variables # Required to run the new EDA-SVINI EPS # # Authors: R Buizza - M Leutbecher # Version: Original Feb 2010 # Version: 2011/11/21 INIENDA=${_INIENDA_} WAVEENDA=${_WAVEENDA_} RECENTRE=${_RECENTRE_} N_PERT_AN=${_N_PERT_AN_} EDAPERT_PLUSMINUS=${_EDAPERT_PLUSMINUS_} if [[ $FSFAMILY = "/longrange" ]] ; then INIEXPVER=${_INIEXPVER_} INISTREAM=${_INISTREAM_} INICLASS=${_INICLASS_} INIWINOFFSET=${_INIWINOFFSET_} INITYPE=${_INITYPE_} INISTEP=${_INISTEP_} else INIEXPVER=${_INIEXPVER_} INISTREAM=${_INISTREAM_} INICLASS=${_INICLASS_} INIWINOFFSET=${_INIWINOFFSET_} INITYPE=${_INITYPE_} INISTEP=${_INISTEP_} fi ININUMBER=${_ININUMBER_} EPSMODE=${_EPSMODE_} EPSTROP=${_EPSTROP_} SVMODE=${_SVMODE_} TLMODE=${_TLMODE_} SVREGION=${_SVREGION_} SVNUM=${_SVNUM_} if [[ ${ISREFC:-false} = true ]]; then HC_REFDATE=$( echo ${ymd} |cut -c 1-8 ) else HC_REFDATE=0 fi #end-of-include $EXPVER/include/config_dep.h ($EXPVER/include/config.h) fi if [ "$fs" = "test_sv" ] ; then echo "############################################" echo "########### include config.test_sv.h ########" echo "############################################" #end-of-include $EXPVER/include/config.test_sv.h ($EXPVER/include/config.h) #include $EXPVER/include/config_dep.h ($EXPVER/include/config.h) # # SHELL variables are set to depend on other SHELL or SMS variables # Required to run the new EDA-SVINI EPS # # Authors: R Buizza - M Leutbecher # Version: Original Feb 2010 # Version: 2011/11/21 INIENDA=${_INIENDA_} WAVEENDA=${_WAVEENDA_} RECENTRE=${_RECENTRE_} N_PERT_AN=${_N_PERT_AN_} EDAPERT_PLUSMINUS=${_EDAPERT_PLUSMINUS_} if [[ $FSFAMILY = "/longrange" ]] ; then INIEXPVER=${_INIEXPVER_} INISTREAM=${_INISTREAM_} INICLASS=${_INICLASS_} INIWINOFFSET=${_INIWINOFFSET_} INITYPE=${_INITYPE_} INISTEP=${_INISTEP_} else INIEXPVER=${_INIEXPVER_} INISTREAM=${_INISTREAM_} INICLASS=${_INICLASS_} INIWINOFFSET=${_INIWINOFFSET_} INITYPE=${_INITYPE_} INISTEP=${_INISTEP_} fi ININUMBER=${_ININUMBER_} EPSMODE=${_EPSMODE_} EPSTROP=${_EPSTROP_} SVMODE=${_SVMODE_} TLMODE=${_TLMODE_} SVREGION=${_SVREGION_} SVNUM=${_SVNUM_} if [[ ${ISREFC:-false} = true ]]; then HC_REFDATE=$( echo ${ymd} |cut -c 1-8 ) else HC_REFDATE=0 fi #end-of-include $EXPVER/include/config_dep.h ($EXPVER/include/config.h) fi fi if [ $FSFAMILY = "/wam" ] ; then echo "############################################" echo "########### include config.wam.h ###########" echo "############################################" #end-of-include $EXPVER/include/config.wam.h ($EXPVER/include/config.h) fi # # For runs involving ocean model # [[ $FSFAMILY = @(/oc|/assim|/control|/ocean|/longrange|/opa) ]] && LOAD_MODULE ocxenv if [[ $FSFAMILY = "/oc" || $FSFAMILY = "/assim" || $FSFAMILY = "/control" || $FSFAMILY = "/ocean" ]] ; then echo "############################################" echo "########### include config.oc.h ############" echo "############################################" #end-of-include $EXPVER/include/config.oc.h ($EXPVER/include/config.h) # Include also derived variables echo "############################################" echo "########### include config.ocapp.h #########" echo "############################################" #include $EXPVER/include/config.ocapp.h ($EXPVER/include/config.h) # # Some definitions for ocean initial conditions (derived variables) # LOCEAN=true if [[ -n ${OCINIORIG:=""} ]] ; then OCINPUT=$OCINIORIG else if [[ -n $OCINI ]] ;then if [[ $(substring $OCINI 1 1) = "/" ]] ;then OCINPUT=ecfs else OCINPUT=mars fi else OCINPUT=ecfs fi fi if [[ $OCINPUT != 'ecfs' ]] ; then OCSTREAM_INI=$(substring $OCINI 1 4) [[ $OCSTREAM_INI = 'mars' ]] && OCSTREAM_INI=${_STREAM_} OCEXPVER_INI=$(substring $OCINI 6 9 ) OCMETHOD_INI=$(substring $OCINI 11 12 ) OCNUMBER_INI=$(substring $OCINI 14 15 ) OCDATE_INI=$(substring $OCINI 17 24 ) if [[ ${_DELTA_DAY_} -ne 0 ]] ; then set +a ocdate_ini=$(newdate -D $OCDATE_INI ${_DELTA_DAY_}) set -a OCINI=$(echo $OCINI | sed -e "s/$OCDATE_INI/$ocdate_ini/g") OCDATE_INI=$ocdate_ini fi OCCLASS_INI=$(substring $OCINI 26 27 ) OCSYST_INI=$(substring $OCINI 29 30 ) OCTYPE_INI=${OCINI##*_} fi # # For EPS runs only. Change of EPSNORM # # Define LEPSSVINI for backward compatibility # LEPSSVINI=${LEPSSVINI:-false} if [[ $LEPSSVINI = true ]] ; then LASTERA40=${_ERA40END_} if [[ $BASETIME -le 2001031400 ]] && [[ $BASETIME -le $LASTERA40 ]] ; then EPSNORM=2.0 EPSNORMT=2.0 EPSGAMMA=0.0257 fi EPSTROP=${_EPSTROP_} EPSSVDIAB=${_EPSSVDIAB_} EPSSVNUM=${_EPSSVNUM_} # 28r3 DELTAHH_TC_TRACKS=12 # 12h lag from previous TC used in targets task EPSSV_TOPT=48 # optimization time for the tropical singular vectors # targets TC_TRACKS_PATH=/emos/tc/0001 EPSSVTCSUB=${_EPSSVTCSUB_} EPSTCBB=1 # use TC tracks to define optimization regions EPSSVOP=${_EPSSVOP_} # not required to set ecf variable in OD EPSSVTC_ORTHONORM=1 # ortho-normalize tropical SVs if [[ $BASETIME -ge 2004042000 ]] ;then IFSMODE=early_delivery else IFSMODE=4d_inc fi # 29r2 TC_TRACKS_FROM_MARS=true TC_TRACKS_CLASS=od if [[ ${_FAMILY_} = *eps_sv* ]] ; then TSTEP=$TSTEP_SV fi INIOFFSET_4D=${_INIOFFSET_4D_} inidate=$(echo $BASETIME | cut -c 1-8) INIPERIOD_4D=6 date4v12h=2000091200 date_dcda=2004062900 if [ $BASETIME -ge $date4v12h ] ; then INIPERIOD_4D=12 fi if [ $BASETIME -ge $date_dcda ] ; then INIPERIOD_4D=6 fi INIPERIOD=6 PERIOD=6 PERIOD_4D=6 if [ $BASETIME -ge 1997112500 ] && [ $INICLASS = od ] && [ $INIPERIOD_4D = 6 ] ; then INIOFFSET_4D=3 elif [ $INICLASS = e4 ] ; then INIOFFSET_4D=3 elif [ $INIPERIOD_4D = 12 ] ; then INIOFFSET_4D=9 elif [ $INIPERIOD_4D = 6 ] ; then INIOFFSET_4D=9 elif [ $INIPERIOD_4D = 6 ] ; then INIOFFSET_4D=3 else INIOFFSET_4D=0 fi #======================================================================= # EFI PATHS: #======================================================================= EFI_WS_CACHE=/efi_clim/data/cache EFI_WS_SCRATCH=/efi_clim/data/scratch EFI_ECFS_PATH=ec:/emos/efi_clim EFI_HPCF_PATH=/home/emos/data/efi_clim fi # # fixed input for coupled/ocean initial data setup # INICLASS=$(oper_model -b $BASETIME -I ${CLASSORIG:="er_ops"} -c) INIRESOL=$(oper_model -b $BASETIME -I ${CLASSORIG:="er_ops"} -r) INILEVELS=$(oper_model -b $BASETIME -I ${CLASSORIG:="er_ops"} -l) INIGTYPE=$(oper_model -b $BASETIME -I ${CLASSORIG:="er_ops"} -t) INIEXPVER=$(oper_model -b $BASETIME -I ${CLASSORIG:="er_ops"} -e) INITILES=$(oper_model -b $BASETIME -I ${CLASSORIG:="er_ops"} -T) INICLOUDAN=$(oper_model -b $BASETIME -I ${CLASSORIG:="er_ops"} -C) INIMA=ecmwf INICLOUDS=yes INIOZONE=false INIGPQ=yes INIPERIOD_4D=6 INIPERIOD=6 PERIOD=6 PERIOD_4D=6 LOZONE=false INICI=false #end-of-include $EXPVER/include/config.ocapp.h ($EXPVER/include/config.h) fi if [ $FSFAMILY = "/longrange" ] ; then echo "############################################" echo "######## include config.longrange.h ########" echo "############################################" #end-of-include $EXPVER/include/config.longrange.h ($EXPVER/include/config.h) echo "############################################" echo "######## include config.multidates.h #######" echo "############################################" #include $EXPVER/include/config.multidates.h ($EXPVER/include/config.h) #------------------------------------------------------------------------ # Variables which must be set in config.h, but which depend on BASETIME #------------------------------------------------------------------------ oper_model=oper_modelV2 rean_model=rean_model case ${CLASSORIG:="e4_ei2"} in e4_ei2) INIRAINSNOW=false # exists from 36r4, but false in ERAI, so we leave out for now for consistency if [[ $OPS_INIT_DATE = unset ]] ; then if [ $BASETIME -lt 1979010100 ] ; then class="e4" else class="ei" fi else if [ $BASETIME -lt 1979010100 ] ; then class="e4" elif [ $BASETIME -lt ${OPS_INIT_DATE}00 ] ; then class="ei" else class="od" fi fi ;; era5__) INIRAINSNOW=true # exists in ops from 36r4 (approx. 2010), and in ERA5 class="ea" ;; ops___) INIRAINSNOW=true # exists in ops from 36r4 (approx. 2010) class="od" ;; seas5_) INIRAINSNOW=false # exists from 36r4, but false in ERAI, so we leave out for now for consistency if [ $BASETIME -lt 1979010100 ] ; then class="e4" elif [ $BASETIME -lt 2017010100 ] ; then class="ei" else class="od" fi ;; esac #------------------------------------- # Details of atmospheric initial data #------------------------------------- if [[ $class = "od" ]] ; then INICLASS=$($oper_model -b $BASETIME -c) INIRESOL=$($oper_model -b $BASETIME -r) INILEVELS=$($oper_model -b $BASETIME -l) INIGTYPE=$($oper_model -b $BASETIME -t) INIEXPVER=$($oper_model -b $BASETIME -e) INITILES=$($oper_model -b $BASETIME -T) INICLOUDAN=$($oper_model -b $BASETIME -C) INIHTESSEL=$($oper_model -b $BASETIME -H) INIMODISALB=$($oper_model -b $BASETIME -M) INICI=$($oper_model -b $BASETIME -i) INIPERIOD_4D=$($oper_model -b $BASETIME -P) INIOFFSET_4D=$($oper_model -b $BASETIME -O) INICLIMVERSION=$($oper_model -b $BASETIME --climv) else INICLASS=$class INIRESOL=$($rean_model -c $class -r) INILEVELS=$($rean_model -c $class -l) INIGTYPE=$($rean_model -c $class -t) INIEXPVER=$($rean_model -c $class -e) INITILES=$($rean_model -c $class -T) INICLOUDAN=$($rean_model -c $class -C) INIHTESSEL=$($rean_model -c $class -H) INIMODISALB=$($rean_model -c $class -M) INICI=$($rean_model -c $class -i) INIPERIOD_4D=$($rean_model -c $class -P) INIOFFSET_4D=$($rean_model -c $class -O) INICLIMVERSION=$($rean_model -c $class --climv) fi INIMA=ecmwf INIOZONE=true # for ERA40/ops and later #------------------------------------- # Land surface initial conditions #------------------------------------- if [[ $INILANDEXPVER = "sys4" ]] ; then if [ $BASETIME -lt 1991010100 ] ; then INILANDEXPVER=fiv8 elif [ $BASETIME -lt 2009010100 ] ; then INILANDEXPVER=fggq else INILANDEXPVER=fiv8 fi fi if [[ $INICLASS = "od" ]] ; then USE_NEW_INILAND=false # only use INILANDEXPVER to replace reanalysis data INILANDEXPVER=none # only use INILANDEXPVER to replace reanalysis data RUNHINDCAST=${RUNHINDCAST:-0} # by default, use real-time ocean analyses with operational IFS ics else RUNHINDCAST=${RUNHINDCAST:-1} fi if [[ ${INILANDEXPVER:-none} != none ]] ; then INITILES=true INIHTESSEL=true fi #------------------------------------- # EPS perturbations #------------------------------------- if [[ $INICLASS = "od" ]] ; then EPSGAMMA=$EPSGAMMA elif [[ $INICLASS = @("e4"|"ei") ]] ; then EPSGAMMA=0.009 elif [[ $INICLASS = @("ea") ]] ; then EPSGAMMA=0.013 else EPSGAMMA=unset fi #-------------------------------------------- # Calculation of FCLENGTH for multiyear runs #-------------------------------------------- if [[ ${_OCSUITENO_} = 2 ]] ;then if [[ -n ${FCCHUNKLENGTH} ]] ;then if [[ ${ECEARTH:-no} = yes ]] ; then # ECEARTH usage is length in timesteps FCLENGTH=$(deca_fclen $BASETIME $FCCHUNKTOT $FCCHUNKLENGTH $TSTEP) else # ECMWF usage is length in hours FCLENGTH=$(deca_fclen $BASETIME $FCCHUNKTOT $FCCHUNKLENGTH) fi fi fi #end-of-include $EXPVER/include/config.multidates.h ($EXPVER/include/config.h) #include $EXPVER/include/config_dep.h ($EXPVER/include/config.h) # # SHELL variables are set to depend on other SHELL or SMS variables # Required to run the new EDA-SVINI EPS # # Authors: R Buizza - M Leutbecher # Version: Original Feb 2010 # Version: 2011/11/21 INIENDA=${_INIENDA_} WAVEENDA=${_WAVEENDA_} RECENTRE=${_RECENTRE_} N_PERT_AN=${_N_PERT_AN_} EDAPERT_PLUSMINUS=${_EDAPERT_PLUSMINUS_} if [[ $FSFAMILY = "/longrange" ]] ; then INIEXPVER=${_INIEXPVER_} INISTREAM=${_INISTREAM_} INICLASS=${_INICLASS_} INIWINOFFSET=${_INIWINOFFSET_} INITYPE=${_INITYPE_} INISTEP=${_INISTEP_} else INIEXPVER=${_INIEXPVER_} INISTREAM=${_INISTREAM_} INICLASS=${_INICLASS_} INIWINOFFSET=${_INIWINOFFSET_} INITYPE=${_INITYPE_} INISTEP=${_INISTEP_} fi ININUMBER=${_ININUMBER_} EPSMODE=${_EPSMODE_} EPSTROP=${_EPSTROP_} SVMODE=${_SVMODE_} TLMODE=${_TLMODE_} SVREGION=${_SVREGION_} SVNUM=${_SVNUM_} if [[ ${ISREFC:-false} = true ]]; then HC_REFDATE=$( echo ${ymd} |cut -c 1-8 ) else HC_REFDATE=0 fi #end-of-include $EXPVER/include/config_dep.h ($EXPVER/include/config.h) fi if [ $FSFAMILY = "/opa" ] ; then echo "############################################" echo "######## include config.opa.h ########" echo "############################################" #end-of-include $EXPVER/include/config.opa.h ($EXPVER/include/config.h) fi #========================================================== # SCHOST config #========================================================== echo "############################################" echo "########### include config.sc.h ############" echo "############################################" #include $EXPVER/include/config.sc.h ($EXPVER/include/config.h) #========================================================== # SMS Variables for scconfig #========================================================== NEMO_PRIORITY=50 # TBD NEMO_NPROC=48 NEMO_NPROCX=8 NEMO_NPROCY=6 NEMOVAR_NPROC=48 NEMOVAR_NPROCX=8 NEMOVAR_NPROCY=6 # end TBD CPUTIME_NEMO=10000 MEM_NEMO=1920 CPUTIME_NEMOINI=100 MEM_NEMOINI=960 CPUTIME_NEMOARCH=100 MEM_NEMOARCH=960 THREADS_NEMOPOSTPP=2 TROOT=${TROOT:-"/ec/fws4/sb/work/rd/$USER"} WROOT=${WROOT:-"/ec/fws4/sb/work/rd/$USER"} WROOT_OPER="/sc1/tcwork/emos/emos_data" WROOT_ESUITE="/s2o2/emos_esuite/emos_data" LOGROOT=${LOGROOT:-"/ec/fws4/sb/log/rd"} XROOT="/home/rdx" XROOT_CAMS="/home/ecgems" OROOT="/emos_data" ODATA="/home/emos/data" FWS_ROOT="/ec/fws4" ODBROOT_SERVER="/ec/fws4/odb/prod" FDB_ROOT=${FDB_ROOT:-"/ec/fws4/fdb"} FDB_IROOT=${FDB_IROOT:-"/ec/fws4/fdb" FWS_LB_STRIPE_COUNT=1 set FWS_LB_STRIPE_SIZE 1 # #end-of-include $EXPVER/include/config.sc.h ($EXPVER/include/config.h) NOFWS_ROOT=${SCRATCH}/pifsexps NOFWS_DIR=${NOFWS_ROOT}/${CLASS}/${OWNER} TROOTFWS=$TROOT if [[ -n "${_NOFWS_}" ]]; then # Don't use the fws directories [[ ! -d ${NOFWS_ROOT} ]] && (umask 007 ; pmkdir ${NOFWS_ROOT} ; chgrp ifs ${NOFWS_ROOT} ; chmod g+s ${NOFWS_ROOT}) TROOT=${NOFWS_DIR} WROOT=${NOFWS_DIR} [[ ! -d ${NOFWS_DIR} ]] && (umask 007 ; pmkdir ${NOFWS_DIR}/${EXPVER}) fi #========================================================== # Show the branches we're using for scripts & suites #========================================================== #include $EXPVER/include/git_scripts_sha1.h ($EXPVER/include/config.h) SHA1_FINGERPRINTS=${TROOT}/${EXPVER}/repo-fingerprints.txt [[ -e ${SHA1_FINGERPRINTS} ]] && cat ${SHA1_FINGERPRINTS} #end-of-include $EXPVER/include/git_scripts_sha1.h ($EXPVER/include/config.h) #========================================================== # ECMWF Account settings #========================================================== ECREALOWNER=${_OWNER_} ECACCOUNT=${_ACCOUNT_} #======================================================================= # Setup for ECFLOW #======================================================================= # Note - cannot used LOAD_MODULE syntax here as before setup.h # but we need ecflow module loaded for trap.h after this module unload ecflow || true _ECFLOW_VERSION=${_ECF_VERSION_} module load ecflow/${_ECFLOW_VERSION} unset _ECFLOW_VERSION ECF_HOST=${_ECF_HOST_} ECF_PORT=${_ECF_PORT_} ECFLOW_PATH=${ECFLOW_DIR}/bin ECFLOW_CLIENT="${ECFLOW_PATH}/ecflow_client --port ${ECF_PORT} --host ${ECF_HOST}" #end-of-include $EXPVER/include/config.h ($EXPVER/ifstraj_999.ecf) #end-of-include $EXPVER/include/rcp.h ($EXPVER/ifstraj_999.ecf) #include $EXPVER/include/trap.h ($EXPVER/ifstraj_999.ecf) #include $EXPVER/include/env_setup.h ($EXPVER/include/trap.h) if [[ -z ${_env_setup_done:-""} ]]; then set +x echo "Sourcing: /etc/profile" . /etc/profile # Load the pifsenv module echo "Running: module load pifsenv/${_PIFSENV_MODULE_VERSION_}" module load pifsenv/${_PIFSENV_MODULE_VERSION_} set -x #======================================================================= # Set up PS4 prompt #======================================================================= typeset -Z2 _H _M _S; SECONDS=$(date +%s) export PS4='${__[(_H=SECONDS/3600%24)==(_M=SECONDS/60%60)==(_S=SECONDS%60)]-$_H:$_M:$_S} ${0##*/}[${LINENO}] ' #======================================================================= # Basic variables #======================================================================= export TMPDIR=${TMPDIR:-/tmp} export HOST=${HOST:-$(hostname)} export NPES=${NPES:-0} #======================================================================= # Start timer #======================================================================= export _script_start_time=$SECONDS export _script_parallel_time=0 export _script_parallel_count=0 export _script_serial_time=0 export _script_serial_count=0 export _run_parallel_timer_file=$TMPDIR/run_parallel_timer_file.$$ export _run_parallel_runs_file=$TMPDIR/run_parallel_runs_file.$$ #======================================================================= # Machine specfic setup #======================================================================= GHOST=$(getThisHost) #======================================================================= # Check for supported $ARCH #======================================================================= export ARCH=$(echo ${ARCH:-none} | tr '[A-Z]' '[a-z]') [[ ${GHOST} == hpc2020 ]] && ARCH="atos-rome64" if [[ ${ARCH} != @(linux|cray|atos-rome64) ]]; then echo "Invalid architecture , see your prepIFS administrator. \$ARCH=${ARCH}" exit 1 fi #======================================================================= # Check for 64bit linux #======================================================================= export LINUX64="" if [[ $ARCH = "linux" ]]; then if [[ $CPU_TYPE = "x86_64" ]]; then LINUX64=64 fi fi #======================================================================= # Get ksh functions #======================================================================= export FPATH=${FPATH:-"."} export PIFS_FUNCTIONS # Get TROOT for supercomputer #include $EXPVER/include/config.sc.h ($EXPVER/include/env_setup.h) #========================================================== # SMS Variables for scconfig #========================================================== NEMO_PRIORITY=50 # TBD NEMO_NPROC=48 NEMO_NPROCX=8 NEMO_NPROCY=6 NEMOVAR_NPROC=48 NEMOVAR_NPROCX=8 NEMOVAR_NPROCY=6 # end TBD CPUTIME_NEMO=10000 MEM_NEMO=1920 CPUTIME_NEMOINI=100 MEM_NEMOINI=960 CPUTIME_NEMOARCH=100 MEM_NEMOARCH=960 THREADS_NEMOPOSTPP=2 TROOT=${TROOT:-"/ec/fws4/sb/work/rd/$USER"} WROOT=${WROOT:-"/ec/fws4/sb/work/rd/$USER"} WROOT_OPER="/sc1/tcwork/emos/emos_data" WROOT_ESUITE="/s2o2/emos_esuite/emos_data" LOGROOT=${LOGROOT:-"/ec/fws4/sb/log/rd"} XROOT="/home/rdx" XROOT_CAMS="/home/ecgems" OROOT="/emos_data" ODATA="/home/emos/data" FWS_ROOT="/ec/fws4" ODBROOT_SERVER="/ec/fws4/odb/prod" FDB_ROOT=${FDB_ROOT:-"/ec/fws4/fdb"} FDB_IROOT=${FDB_IROOT:-"/ec/fws4/fdb" FWS_LB_STRIPE_COUNT=1 set FWS_LB_STRIPE_SIZE 1 # #end-of-include $EXPVER/include/config.sc.h ($EXPVER/include/env_setup.h) # Try and find functions.pifs from scripts repository if available, otherwise # it should already be available in the path from pifsenv if [[ -d ${PIFS_FUNCTIONS:-$TROOT/${_EXPVER_}/functions.pifs} ]]; then # SC PIFS_FUNCTIONS=${PIFS_FUNCTIONS:-$TROOT/${_EXPVER_}/functions.pifs} FPATH=$PIFS_FUNCTIONS:$PIFS_FUNCTIONS/ecflow:$FPATH PATH=$PIFS_FUNCTIONS:$PIFS_FUNCTIONS/ecflow:$PATH fi #======================================================================= # Load python3 and eclib now, LOAD_MODULE is available due to previous # block #======================================================================= LOAD_MODULE python3 LOAD_MODULE eclib # This needs to be loaded after python which also defines some date utils with the same name #======================================================================= # signal list is required for module function (defined in FPATH) #======================================================================= #include $EXPVER/include/trap_signal_list.h ($EXPVER/include/env_setup.h) export TRAP_SIGNAL_LIST='1 2 3 4 5 6 7 8 13 24 31' export ECF_SIGNAL_LIST=$TRAP_SIGNAL_LIST #end-of-include $EXPVER/include/trap_signal_list.h ($EXPVER/include/env_setup.h) _env_setup_done=1 fi #end-of-include $EXPVER/include/env_setup.h ($EXPVER/include/trap.h) #======================================================================= # # The following is the configuration filled in by SMS/Ecflow # #======================================================================= set -a LOADL_STEP_ID=${LOADL_STEP_ID:=NOT_SET} QSUB_REQID=${QSUB_REQID:=NOT_SET} PBS_JOBID=${PBS_JOBID:=NOT_SET} SGE_JOB_SPOOL_DIR=${SGE_JOB_SPOOL_DIR:=NOT_SET} if [[ $LOADL_STEP_ID != NOT_SET ]] ; then RID=$(echo $LOADL_STEP_ID | cut -f2 -d.) JOB_ID=$LOADL_STEP_ID elif [[ $QSUB_REQID != NOT_SET ]] ; then RID=$(echo $QSUB_REQID | cut -f1 -d.) JOB_ID=$QSUB_REQID elif [[ $PBS_JOBID != NOT_SET ]] ; then RID=$(echo $PBS_JOBID | cut -f1 -d.) JOB_ID=$PBS_JOBID elif [[ $SGE_JOB_SPOOL_DIR != NOT_SET ]] ; then RID=$(basename $SGE_JOB_SPOOL_DIR .1) JOB_ID=$RID else RID=$$ JOB_ID=$RID fi SUITE=${_SUITE_} FAMILY=${_FAMILY_} TASK=${_TASK_} #======================================================================= # # Make trap.h work for both SMS and ECFLOW # #======================================================================= SUITE_TYPE=ecf ECF_PASS=${_ECF_PASS_} ECF_HOST=${_ECF_HOST_} ECF_PORT=${_ECF_PORT_} ECF_NAME=${_ECF_NAME_} ECF_TRYNO=${_ECF_TRYNO_} ECF_JOBOUT=${_ECF_JOBOUT_} ECF_OUT=${_ECF_OUT_} ECF_HOME=${_ECF_HOME_} ECF_RID=$JOB_ID CMETER='CMETER="ecflow_client --meter",' CEVENT='CEVENT="ecflow_client --event",' if [[ -n ${PIFS_FUNCTIONS:-} ]]; then FPATH=$PIFS_FUNCTIONS/ecflow:$FPATH PATH=$PIFS_FUNCTIONS/ecflow:$PATH fi set +a #========================================================================== # Trap handling and SMS initialisation # # Write into the ERROR function what to do in case of any error. #========================================================================== # These variables are required by the functions used by the traps _EXPVER=${EXVPER:-${_EXPVER_}} TASK=${TASK:-${_TASK_}} EXP_RUNNING_AS=${USER:-${_USER_}} EXP_OWNER=${OWNER:-${_OWNER_}} FAMILY=${FAMILY:-${_FAMILY_}} SUITE=${SUITE:-${_SUITE_}} chmod 644 ${ECF_JOBOUT} || true #include $EXPVER/include/trap_signal_list.h ($EXPVER/include/trap.h) export TRAP_SIGNAL_LIST='1 2 3 4 5 6 7 8 13 24 31' export ECF_SIGNAL_LIST=$TRAP_SIGNAL_LIST #end-of-include $EXPVER/include/trap_signal_list.h ($EXPVER/include/trap.h) #include $EXPVER/include/set_traps.h ($EXPVER/include/trap.h) trap ERROR 0 for signal in $ECF_SIGNAL_LIST do name=$(kill -l $signal) trap "{ echo \"Signal $name ($signal) received\"; ERROR ; }" $signal done #end-of-include $EXPVER/include/set_traps.h ($EXPVER/include/trap.h) trap set -exu cd $TMPDIR || true xinit $ECF_RID date || true #end-of-include $EXPVER/include/trap.h ($EXPVER/ifstraj_999.ecf) #include $EXPVER/include/setup.h ($EXPVER/ifstraj_999.ecf) set -a #======================================================================= # The setup script # 31-AUG-1996 / 15-APR-1996 / OP #======================================================================= #======================================================================= # Limited setup switch switches off some of the more complex modules # for tasks where they are not required #======================================================================= export I_EXTRACT=${_I_EXTRACT_} # used for CONTINUOUS_DA [[ "$I_EXTRACT" != "" ]] && I_EXTRACT_DIR=uptraj_${I_EXTRACT} || I_EXTRACT_DIR= if [[ "$I_EXTRACT" == "" ]]; then echo elif [[ "$I_EXTRACT" == "0" ]]; then echo elif [[ "$I_EXTRACT_DIR" != "${_I_EXTRACT_DIR_}" ]]; then echo "EMOS: please fixme"; exit 1; fi LIMITED_SETUP=${_LIMITED_SETUP_} [[ $TASK = @(exp_setup|replay_exp|exp_cancel|createfws|deletefws|clean_ws|logfiles|cancel) ]] && LIMITED_SETUP=1 #======================================================================= # Switch to control what happens if we try to load a non-existant module #======================================================================= FAIL_ON_NO_MODULE=${_FAIL_ON_NO_MODULE_} #======================================================================= # Set timeout for ecflow_client commands (1 hour) #======================================================================= ECF_TIMEOUT=3600 #======================================================================= # Check if RD user having unrestricted access to all projects #======================================================================= RDUSER=$(groups | perl -p -e 'if (/\brd\b/) {$_="rd"}else{$_=""}') #======================================================================= # Allow flexible job submission load balancing over hosts #======================================================================= FLEX_SUBMIT=${_FLEX_SUBMIT_} #======================================================================= # Script Info file location - used for timing/resource usage info #======================================================================= SINFO_ROOT=${TROOTFWS:-unset}/${EXPVER:-unset} if [[ -d ${SINFO_ROOT} && -n ${ECF_NAME:-} ]]; then SINFO_ROOT=${SINFO_ROOT}/scriptinfo SINFO_FILE=${SINFO_ROOT}/$(echo ${ECF_NAME:-unset} | cut -f4- -d"/") else unset SINFO_ROOT fi #======================================================================= # # Basic environment setup # #======================================================================= MPI_INCLUDE_DIR="" #======================================================================= # # Root directories # #======================================================================= BROOT=${BROOT:=$TROOT} if [[ -n $TROOT && ${TROOT#/fws} != $TROOT ]]; then # Using FWS filesystems BASE=$TROOT/$EXPVER BBASE=$BROOT/$EXPVER WORK=$WROOT/$EXPVER WBASE=$BROOT/$EXPVER else # old FDB filesystem if [[ $CLASS = @(rd|od|ea|ei|e4|mc) ]] ; then BASE=$TROOT/$EXPVER BBASE=$BROOT/$EXPVER WORK=$WROOT/$EXPVER WBASE=$BROOT/$EXPVER else BASE=$TROOT/$SUITE/$EXPVER BBASE=$BROOT/$SUITE/$EXPVER WORK=$WROOT/$SUITE/$EXPVER WBASE=$BROOT/$SUITE/$EXPVER fi fi PERMDIR=$PERM/prepifs/$EXPVER DATA=$WORK/data PLOTWS=${PLOTWS:=none} if [[ $PLOTWS != none ]] ; then PLOTDATA=/var/tmp/$EXPVER/data else PLOTDATA=$DATA fi XDATA=${XDATA_ROOT:-$XROOT}/data XBINS=$XROOT/bin XDIR=$XROOT/bin STREAM=${_STREAM_} if [[ $STREAM = DA ]] ; then stream="" else stream="/${STREAM}" fi SUBFSFAMILY=${_SUBFSFAMILY_} ADIR=${BASE}${stream}/${BASETIME}${FSFAMILY}$SUBFSFAMILY WDIR=${WORK}${stream}/${BASETIME}${FSFAMILY}$SUBFSFAMILY WDIR_SFC=${WORK}${stream}/${BASETIME}/surf_anal$SUBFSFAMILY ODIR=${OROOT}${stream}/0001/${BASETIME} FDBDIR=${SCRATCHDIR}/${CLASS}${EXPVER}${STREAM}${BASETIME} # for runs involving ocean model, ADIR and WDIR are defined differently # the variable SUBFSFAMILY may be used more generally if [[ $FSFAMILY = @("/control"|"/assim"|"/oc"|"/ocean") ]] ; then if [[ $FSFAMILY = @("/control"|"/assim") ]] ; then if [[ -n $SUBFSFAMILY ]] ; then ADIR=${BASE}${FSFAMILY}$SUBFSFAMILY/${BASETIME} WDIR=${WORK}${FSFAMILY}$SUBFSFAMILY/${BASETIME} else # assume _an0 is wanted; this will be checked in ocean.h, # and corrected if necessary ADIR=${BASE}${FSFAMILY}_an0/${BASETIME} WDIR=${WORK}${FSFAMILY}_an0/${BASETIME} fi fi fi RTTOV_COEFDIR=$DATA/sat/rttov if [[ $CLASS = od ]] ; then LOGS=$TROOT/$EXPVER/log/$SUITE/$FAMILY else [[ -n ${ECF_JOBOUT:-} ]] && LOGS=$(dirname ${ECF_JOBOUT}) || LOGS=$LOGDIR/$SUITE/$FAMILY fi #======================================================================= # # Parse IFS_CYCLE # #======================================================================= _PS4=$PS4 ; PS4="" # PS4 processing interferes with regexp evaluation IFS_CYCLE_INT=$(if [[ ${IFS_CYCLE} =~ ^(\d+)(r(\d+))?$ ]]; then printf "%d%02d" ${.sh.match[1]} ${.sh.match[3]}; fi) INI_CYCLE_INT=$(if [[ ${INICYCLE:=37r1} =~ ^(\d+)(r(\d+))?$ ]]; then printf "%d%02d" ${.sh.match[1]} ${.sh.match[3]}; fi) EDA_CYCLE_INT=$(if [[ ${EDACYCLE:=37r1} =~ ^(\d+)(r(\d+))?$ ]]; then printf "%d%02d" ${.sh.match[1]} ${.sh.match[3]}; fi) PS4=$_PS4 typeset -u IFS_CYCLE_UPPER IFS_CYCLE_UPPER=CY$IFS_CYCLE #======================================================================= # # Statically installed scripts # #======================================================================= [[ -d ${BASE}/bin ]] && PATH=${BASE}/bin:${PATH} #======================================================================= # # Install location # #======================================================================= IFS_PRECISION=${_IFS_PRECISION_} # Precision is DP (Double Precision) or SP (Single Precision) # Set name of executable. # Ideally we would directly use $IFS_EXECUTABLE as set by the build. IFS_EXECUTABLE=ifsMASTER.$IFS_PRECISION BUILD_FROM=${BUILD_FROM:-this_exp} # Set a sensible default of building in this experiment if [[ ${BUILD_FROM} = this_exp ]]; then # This experiment is building it's own executables # For the cast of a workstation build, this is always the case even if user has requested build # from another experiment or from ifs/ module bundle. IFS_SOURCE_DIR=$BASE/source IFS_BUILD_DIR_DP=$BASE/build_DP IFS_BUILD_DIR_SP=$BASE/build_SP IFS_BUILD_DIR=$BASE/build_${IFS_PRECISION} IFS_SAVEBUILD_DIR_DP=$WORK/savebuild_DP IFS_SAVEBUILD_DIR_SP=$WORK/savebuild_SP IFS_SAVEBUILD_DIR=$WORK/savebuild_${IFS_PRECISION} IFS_INSTALL_DIR_DP=$WORK/install_${_SC_BUILD_OPT_}_DP IFS_INSTALL_DIR_SP=$WORK/install_${_SC_BUILD_OPT_}_SP IFS_INSTALL_DIR=$WORK/install_${_SC_BUILD_OPT_}_${IFS_PRECISION} BINS_DP=${IFS_INSTALL_DIR_DP}/bin BINS_SP=${IFS_INSTALL_DIR_SP}/bin BINS=${IFS_INSTALL_DIR}/bin MYBINS=${WORK}/mybins IFS_INSTALLED=${BINS}/.installed_ok [[ -d ${BINS} ]] && PATH=${BINS}:${PATH} LIBS_DP=${IFS_INSTALL_DIR_DP}/lib LIBS_SP=${IFS_INSTALL_DIR_SP}/lib LIBS=${IFS_INSTALL_DIR}/lib LIBSBL=${WORK}/libsbl PIFS_LD_LIBRARY_PATH=${LIBS}/blackdummy:${LIBS} elif [[ ${BUILD_FROM} = other_exp ]]; then # Here we reference directly the build directory of another experiment if [[ ! -d ${BUILD_EXPERIMENT_DIR:-} ]]; then echo "ERROR: BUILD_EXPERIMENT_DIR=\"${BUILD_EXPERIMENT_DIR}\" does not exist or cannot be read." exit 1 fi IFS_INSTALL_DIR=${BUILD_EXPERIMENT_DIR:-/undefined}/install_${IFS_PRECISION} if [[ ! -d ${IFS_INSTALL_DIR:-} ]]; then echo "ERROR : Could not fund a build for IFS_PRECISION=\"${IFS_PRECISION}\" under ${BUILD_EXPERIMENT_DIR}" exit 1 fi BINS=${IFS_INSTALL_DIR}/bin LIBS=${IFS_INSTALL_DIR}/lib MYBINS=${WORK}/mybins [[ -d ${MYBINS} ]] && PATH=${MYBINS}:${PATH} LIBSBL=${WORK}/libblack PIFS_LD_LIBRARY_PATH=$LIBSBL:$LIBS fi #======================================================================= # # Load the IFS-bundle module if requested # #======================================================================= [[ ${IFS_BUNDLE_MODULE:-none} = @(default|none) ]] && IFS_BUNDLE_MODULE=${IFS_CYCLE_UPPER} # A few ways that the ifs module can be used iostead of self-built executables # - prepifs BULILD_FROM is set to bundle, so the module is used instead of exp building its own exes # - ev $FORCE_IFS_MODULE or ecflow FORCE_IFS_MODULE (overrides ev) is set to 1 - useful to allow progress before build done (or after build deleted) FORCE_IFS_MODULE=${FORCE_IFS_MODULE:-0} USE_IFS_MODULE=${USE_IFS_MODULE:-0} if [[ ${BUILD_FROM} = bundle || ${_FORCE_IFS_MODULE_} -eq 1 || ( (${_FAMILY1_} = cancel || ${_USE_IFS_MODULE_} -eq 1) && ! -f ${IFS_INSTALLED:-_nofile_}) ]]; then LOAD_MODULE ifs/${IFS_BUNDLE_MODULE} IFS_INSTALL_DIR=${IFS_DIR:-/nodir} # Set to a nonsense value if module doesn't exist - allows cancel task to run BINS=${IFS_INSTALL_DIR}/bin MYBINS=${WORK}/mybins RUNTIME_ENV=${RUNTIME_ENV:-${IFS_INSTALL_DIR}/share/ifs-bundle/arch/env.sh} [[ -d ${MYBINS} ]] && PATH=${MYBINS}:${PATH} LIBS=${IFS_INSTALL_DIR}/lib LIBSBL=${WORK}/libblack PIFS_LD_LIBRARY_PATH=$LIBSBL:$LIBS # Load the necessary runtime modules if [[ -f ${IFS_DIR}/runtime_modules ]]; then while IFS= read -r module; do LOAD_MODULE ${module} done < ${IFS_DIR}/runtime_modules fi fi if [[ ${BUILD_FROM} = bundle && ${IFS_DIR:-unset} = unset && ${_FAMILY1_} != cancel ]]; then echo "ERROR : IFS_BUNDLE_MODULE \"${IFS_BUNDLE_MODULE:-unset}\" does not exist" exit 1 fi #======================================================================= # # Runtime environment script # #======================================================================= IFS_RUNTIME_ENV=1 # Ensures the $RUNTIME_ENV script only loads the runtime modules RUNTIME_ENV=${RUNTIME_ENV:-${MYBINS}/runtime_env.sh} [[ -e ${RUNTIME_ENV} ]] && source ${RUNTIME_ENV} #======================================================================= # # Setup python environment # #======================================================================= # Note: the python3 module is now loaded in env_setup.h # Set the PATH/FPATH for our own functions.pifs as pifsenv will overwrite this [[ -n ${PIFS_FUNCTIONS:-} ]] && FPATH=$PIFS_FUNCTIONS:$PIFS_FUNCTIONS/ecflow:$FPATH [[ -n ${PIFS_FUNCTIONS:-} ]] && PATH=$PIFS_FUNCTIONS:$PIFS_FUNCTIONS/ecflow:$PATH # make python modules installed in ${IFS_INSTALL_DIR}/lib/python available: PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}${IFS_INSTALL_DIR}/lib/python" # Set up environment variables used by python3 module to pick up python bindings for libraries # These may be set by the ifs module (if used), otherwise, we set them here to point at install directory ECCODES_DIR=${ECCODES_DIR:-$IFS_INSTALL_DIR} MAGICS_DIR=${MAGICS_DIR:-$IFS_INSTALL_DIR} METVIEW_DIR=${METVIEW_DIR:-$IFS_INSTALL_DIR} ODC_DIR=${ODC_DIR:-$IFS_INSTALL_DIR} #======================================================================= # # Clean environment - ensure any default setup is removed # #======================================================================= [[ $HOST = @(lx*) ]] && module unload Magics #======================================================================= # # ECCODES/GRIB stuff # #======================================================================= ECCODES_GRIBEX_MODE_ON=1 ECCODES_GRIB_WRITE_ON_FAIL=0 ECCODES_API_SEED=${ECCODES_API_SEED:=grib1_mlgrib2} ECCODES_SAMPLES_PATH=/MEMFS/ifs_samples/${ECCODES_API_SEED}:/MEMFS/samples:${IFS_INSTALL_DIR}/share/eccodes/ifs_samples/${ECCODES_API_SEED}:${IFS_INSTALL_DIR}/share/eccodes/samples # set it to 1 if you want to fail on limit violation 2 if you want warning export ECCODES_EXTRA_DEFINITION_PATH=$XDATA/$IFS_CYCLE/datalimits BUFR_TABLES=${IFS_INSTALL_DIR}/share/bufrdc_tables # control which FDB server {dev,test,prod} if [[ ${MULTIO_SINKS:=fdb5} =~ fdb5 ]]; then FDB_HOME=${FDB_HOME_ROOT:-/home/fdb}${MARS_FDB_DTAP:=prod} #FDB_DEBUG=1 MARS_USE_FDB5_DATABASE=1 FDB5_ROOT="${FDB_ROOT}/${MARS_FDB_DTAP}" FDB_EXPVER_FILE=${FDB_EXPVER_FILE:-/ec/fwsm/sb/fdb5/expver_to_fdb_root.map} else [[ $LIMITED_SETUP ]] || FDB_HOME="$(fdb home)" fi #======================================================================= # # MARS client version # #======================================================================= # The design is that a suite can set the MARS_CLIENT_VERSION variable to either # "default", "new" or "previous", and if it is "new" then we'll use the "new" # version of the mars client tools (`mars`, `marsgen`, `grib2fdb`) which # is either the current beta version to be tested, or the same as the # default version if no beta is being tested. # If it is set to "previous" we fall back on previous mars # These variables should be used everywhere in place of using the `mars` # and `grib2fdb` names directly. if [[ "${_MARS_CLIENT_VERSION_}" == new ]]; then MARS_CMD="mars -n" GRIB2FDB_CMD="grib2fdb -n" elif [[ "${_MARS_CLIENT_VERSION_}" == previous ]]; then MARS_CMD="mars -p" GRIB2FDB_CMD="grib2fdb -p" else # When the value is anything other than "new" or "previous" we use the default # mars client tools. The canonical value for this state is "default". MARS_CMD="mars" GRIB2FDB_CMD="grib2fdb" fi # The `marsgen` tool doesn't use the `-n` option, instead these # environment variables are used to control the version of the mars # client used in each step of the archiving. We want it to use the same # mars client as we use elsewhere so we reuse $MARS_CMD. MARS_TO_FDB="$MARS_CMD" MARS_FROM_FDB="$MARS_CMD" MARS_TO_IBM="$MARS_CMD" MARS_FROM_IBM="$MARS_CMD" #======================================================================= # # NetCDF & HDF5 stuff # #======================================================================= if [[ $LIMITED_SETUP -eq 0 ]]; then LOAD_MODULE netcdf4 LOAD_MODULE hdf5 fi #======================================================================= # # Derive the FileServer variables # #======================================================================= FSBASE=${FSROOT}${FSFAMILY}/${EXPVER} FWBASE=${FSROOT}${FSFAMILY}/${EXPVER} FSHOST=${FSBASE}/${ARCH} FSLIBS=${FSHOST}/lib FSBINS=${FSHOST}/bin FSLOG=${FSBASE}/log FSDATA=${FSHOST}/data DHSWAVE=${FSROOT}/${EXPVER}/wave DHSOTIME=$(substring $BASETIME 1 6)/$(substring $BASETIME 7 10) if [[ $CLASS = od ]] ; then FDBASE=${FSBASE} DHSTIME=$DHSOTIME else FDBASE=$FSROOT/${EXPVER}${stream} DHSTIME=${BASETIME} fi FSDIR=${FDBASE}/${BASETIME} FSBDIR=$FSDIR FSODIR=$FSOROOT/0001/${DHSOTIME} FSODB=${FSODB:="/RDXTMP/prepIFS"} FODBDIR=$FSODB/$EXPVER${stream}/$BASETIME FSOCE=/RDX/prepifs/ocean FSWAVE=/RDX/prepifs/wave if [[ $CLASS = @(rd|ei|e4) ]] ; then FSSCORES=/RDX/SCORES/$(echo $BASETIME | cut -c 1-4) else FSSCORES=/RDX/SCORES/$CLASS/$(echo $BASETIME | cut -c 1-4) fi FSMOM=/RDX/prepifs/fc/mmeans PSDIR=$SCRATCH/ps${stream} #======================================================================= # Machine specific configurations #======================================================================= IFS_TUNING_DEFAULTS=${IFS_TUNING_DEFAULTS:-/home/rdx/tuning/IFS_tuning_defaults}.$ARCH [[ -s $IFS_TUNING_DEFAULTS && -x $IFS_TUNING_DEFAULTS ]] && . $IFS_TUNING_DEFAULTS #======================================================================= # MPI/MPL configuration #======================================================================= MPP_TYPE=1 MBX_SIZE=150000000 MPL_MBX_SIZE=$MBX_SIZE MPLARGS="check=0" #======================================================================= # ODB variables #======================================================================= if [[ $LIMITED_SETUP -eq 0 ]]; then ODB_CATCH_SIGNALS=${ODB_CATCH_SIGNALS:=0} ODB_ERRTRA=${ODB_ERRTRA:=1} ODB_MAXHANDLE=3 ODB_STATIC_LINKING=1 [[ ${ARCH} = "atos-rome64" ]] && ODB_UNDEF=2146959359 || ODB_UNDEF=2147483647 fi ODB_MAXCTX=500 ODB_CODES_DIR=/usr/local/apps/mars/configs/prod/odb_codes ODB_SYSPATH=$IFS_INSTALL_DIR/share/odb ODB_FEBINPATH=$BINS ODB_BEBINPATH=$BINS #======================================================================= # Magics environment # ===RFA=== # Individual tasks should include magics.h instead #======================================================================= #if [[ $LIMITED_SETUP -eq 0 ]]; then # if [[ $HOST = @(lx*) ]]; then # # Only load the module if Magics hasn't already been setup elsewhere (eg. ifs-support) # if [[ ${MAGICS_DIR:-unset} = "unset" ]]; then # LOAD_MODULE Magics/2.24.3 # fi # fi #fi #======================================================================= # DR_HOOK #======================================================================= DR_HOOK=${DR_HOOK:-false} DR_HOOK_OPT=${DR_HOOK_OPT:-""} DR_HOOK_GENCORE=1 # Allow Dr.Hook to generate core-file and abort for hanging processes DR_HOOK_GENCORE_SIGNAL=28 # Signal number to send to generate core-file DR_HOOK_USE_LOCKFILE=0 LIBHPM="" if [[ $DR_HOOK = true ]] ; then DR_HOOK_OPT=$(echo $DR_HOOK_OPT | sed -e 's/\// /g') fi #======================================================================= # FDB environment #======================================================================= INISTREAM=${INISTREAM:=DA} WAMSTREAM=0 if [[ $FSFAMILY = @("/mc"|"/assim") ]] ; then if [[ ${HC_REFDATE:-0} = 0 ]] ; then FDB_STREAM=enfo FDB_WSTREAM=waef else FDB_STREAM=enfh FDB_WSTREAM=enwh fi elif [[ $FSFAMILY = "/sens" ]] ; then FDB_STREAM=sens elif [[ $STREAM = DCDA ]] ; then FDB_STREAM=dcda FDB_WSTREAM=dcwv WAMSTREAM=1029 ODB_STREAM=dcda elif [[ $STREAM = SCDA ]] ; then FDB_STREAM=scda FDB_WSTREAM=scwv WAMSTREAM=1027 ODB_STREAM=scda elif [[ $STREAM = ENDA ]] ; then FDB_STREAM=enda FDB_WSTREAM=ewda WAMSTREAM=1088 ODB_STREAM=enda elif [[ $STREAM = LWDA ]] ; then FDB_STREAM=lwda FDB_WSTREAM=lwwv WAMSTREAM=1248 ODB_STREAM=lwda elif [[ $STREAM = ELDA ]] ; then FDB_STREAM=elda FDB_WSTREAM=ewla WAMSTREAM=1250 ODB_STREAM=elda else FDB_STREAM=oper FDB_WSTREAM=wave ODB_STREAM=oper fi REINITIALIZE=${_REINITIALIZE_} REINIEXPVER=${REINIEXPVER:=$EXPVER} [[ $REINIEXPVER = self ]] && REINIEXPVER=$EXPVER REINISTREAM=${REINISTREAM:=DA} REINIPERIOD_4D=${PERIOD_4D:=12} REINIWINDOW_LENGTH_4D=${REINIWINDOW_LENGTH_4D:=12} WINDOW_LENGTH_4D=${WINDOW_LENGTH_4D:=-999999} [[ $REINIEXPVER = $EXPVER ]] && REINIWINDOW_LENGTH_4D=$WINDOW_LENGTH_4D EDAEXPVER=${EDAEXPVER:=$EXPVER} if [[ $EDAEXPVER = self ]] ; then EDAEXPVER=$EXPVER EDACLASS=$CLASS fi ENSCALEXPVER=${ENSCALEXPVER:=$EXPVER} if [[ $ENSCALEXPVER = self ]] ; then ENSCALEXPVER=$EXPVER ENSCALCLASS=$CLASS ENSCALSTREAM=$STREAM fi # analysis from a different centre MANNCEP=0 MANMFR=0 MANDWD=0 MANUKM=0 INIMA=${INIMA:-ecmwf} INIORIGIN=OFF if [[ $STREAM = "MAED" || $STREAM = MAWV ]] ; then for xxx in $INIMA ; do [[ "$xxx" = ncep ]] && MANNCEP=1 [[ "$xxx" = mfr ]] && MANMFR=1 [[ "$xxx" = ukm ]] && MANUKM=1 [[ "$xxx" = dwd ]] && MANDWD=1 done fi if [ "$INIMA" != "ecmwf" ] ; then # Find WMO centre number. Do this more cleverly if [[ $INIMACONS -eq 1 ]] ; then INIORIGIN=CONS elif [[ $INIMA = mfr ]] ; then INIORIGIN=LFPW elif [[ $INIMA = ncep ]] ; then INIORIGIN=KWBC elif [[ $INIMA = ukm ]] ; then INIORIGIN=EGRR elif [[ $INIMA = dwd ]] ; then INIORIGIN=EDZW fi fi LISENTRPP=${LISENTRPP:=false} OBPATH=${OBPATH:-none} LOBREALTIME=false OD_MODE=false LEDFAMILY=${_EDFAMILY_} # Profile information PROFILE=${_PROFILE_} OLDADIR=$(NEWADIR -${PERIOD:-6}) OLDWDIR=$(NEWWDIR -${PERIOD:-6}) YESTERDIR=$(NEWWDIR -24) #======================================================================= # # Check the directories # #======================================================================= if [[ -z "${_NOFWS_}" ]]; then # Don't do if NOFWS is set CHECK_DIR $DATA/$FSFAMILY || : CHECK_DIR $LOGS || : if [[ "$TASK" != "logfiles" ]] ; then for dir in $ADIR $WDIR; do [[ ! -d $dir ]] && (umask 022 ; pmkdir $dir || true ; chmod 755 $dir) || true CHECK_DIR_NO_MAKE $dir done fi CHECK_DIR $DATA || : CHECK_DIR $PLOTDATA || : fi #======================================================================= # # MACC/CAMS setup # #======================================================================= XDATA_CAMS=${XROOT_CAMS:-$XROOT}/data ######################################################################## # # Stronger compression for model level gridpoint fc fields ######################################################################## COMPR_FC_GP_ML=0 #======================================================================= # # ECKIT setup # #======================================================================= [[ ${SUBMIT_TASKS:-1} == 1 ]] && export ECKIT_MPI_FORCE=serial # ensure ECKIT doesn't try to run MPI on serial task #======================================================================= # # PATH setup # #======================================================================= PATH=$TMPDIR:$BINS:$PATH #if [[ $FSFAMILY != "" ]]; then # ==RFA== # PATH=$BINS$FSFAMILY:$BINS:$XBINS/${ARCH}/${IFS_CYCLE}$FSFAMILY:$XBINS/${IFS_CYCLE}$FSFAMILY:$XBINS/${ARCH}/${IFS_CYCLE}:$XBINS/${IFS_CYCLE}:$XBINS/an:$XBINS/${ARCH}:$PATH #fi # Remove duplicated from PATH PATH=$(pwd):.:$PATH # Ensure we pick up all the "here" document scripts PATH=$(echo $PATH | awk -F: '{for (i=1;i<=NF;i++) { if ( !x[$i]++ ) printf("%s:",$i); }}') echo "The following modules are loaded" module list #include $EXPVER/include/set_marsbondident.h ($EXPVER/include/setup.h) # This header file sets appropriate values to prepare for the BOND DHS move. # It should be included in every job script using ECFS and MARS. # Set double archiving variables if needed. Double archiving is enabled # by setting the ecFlow/SMS variables MARS_DOUBLE_ARCHIVE=1 and/or # ECFS_DOUBLE_ARCHIVE=1 on the required tasks/families. It can be set on # the top level of the experiment if all ECFS/MARS writes are to be double # archived. By default double archiving is disabled everywhere. typeset -i SUITE_MARS_DOUBLE_ARCHIVE=${_MARS_DOUBLE_ARCHIVE_} typeset -i SUITE_ECFS_DOUBLE_ARCHIVE=${_ECFS_DOUBLE_ARCHIVE_} # Only set double archiving shell variables if needed [[ $SUITE_MARS_DOUBLE_ARCHIVE -eq 1 ]] && export BOLOGNA_MARS_DOUBLE_ARCHIVE_COPY=1 [[ $SUITE_ECFS_DOUBLE_ARCHIVE -eq 1 ]] && export BOLOGNA_ECFS_DOUBLE_ARCHIVE_COPY=1 unset SUITE_MARS_DOUBLE_ARCHIVE SUITE_ECFS_DOUBLE_ARCHIVE # Determine if we want to perform a DHS move dry run i.e. retrieve required # input data from the temporary DHS. To enable this option, set ecFlow/SMS # variable MARS_BOND_DRY_RUN=1 on the top level of the experiment. By default # it is disabled. typeset -i SUITE_MARS_BOND_DRY_RUN=${_MARS_BOND_DRY_RUN_} # Only set dry-run shell variable if needed [[ $SUITE_MARS_BOND_DRY_RUN -eq 1 ]] && export BOLOGNA_DHS_DRY_RUN_RETRIEVE=1 unset SUITE_MARS_BOND_DRY_RUN # Set $MARS_BOND_IDENT variable to allow MARS requestes to be tracked against # different experiment types # Can be set either by ECFLOW/SMS variable MARS_BOND_IDENT which should be set # at the top level of the experiment, or # automatically generated based on the IFS cycle and experiment type typeset -i MARS_BOND_IDENT=${_MARS_BOND_IDENT_} if [[ $MARS_BOND_IDENT -eq 0 ]]; then # We will create an identifier based on the IFS_CYCLE and experiment type _cycleid=9 # Default for unrecognised cycle case ${IFS_CYCLE:-unset} in 47r1 ) _cycleid=7 ;; 46r1 ) _cycleid=6 ;; 45r2 ) _cycleid=1 ;; 45r1 ) _cycleid=1 ;; 43r3 ) _cycleid=2 ;; 43r1 ) _cycleid=3 ;; 42r1 ) _cycleid=4 ;; 41r2 ) _cycleid=5 ;; 47r1 ) _cycleid=7 ;; 47r2 ) _cycleid=11 ;; 47r3 ) _cycleid=12 ;; esac _exptype=9 # Default for unknown experiment type case ${FSFAMILY:-unset} in /an ) _exptype=0 ;; /enkf ) _exptype=1 ;; /eps_nemo ) _exptype=2 ;; /eps_sv ) _exptype=3 ;; /fc ) _exptype=4 ;; /fsobs ) _exptype=5 ;; /longrange ) _exptype=6 ;; /surface ) _exptype=7 ;; /wam ) _exptype=8 ;; esac MARS_BOND_IDENT="1${_cycleid}${_exptype}" unset _cycleid _exptype fi if [[ $MARS_BOND_IDENT -gt 0 ]]; then export MARS_FOR_BOND_DATASET=$MARS_BOND_IDENT fi unset MARS_BOND_IDENT #end-of-include $EXPVER/include/set_marsbondident.h ($EXPVER/include/setup.h) #======================================================================= # # Ensure consistency between ecFlow and shell variables # #======================================================================= export I_EXTRACT=${_I_EXTRACT_} export I_EXTRACT_DIR="uptraj_${I_EXTRACT}" echo setup complete #end-of-include $EXPVER/include/setup.h ($EXPVER/ifstraj_999.ecf) #include $EXPVER/include/grib_def.h ($EXPVER/ifstraj_999.ecf) ##################################################################### # Redefine GRIB Table 128 variables to avoid problems with Table 210 ##################################################################### set -a # TODO remove .128 as requested by Manuel strf=1.128 vpot=2.128 pt=3.128 sro=8.128 ssro=9.128 aluvp=15.128 aluvd=16.128 alnip=17.128 alnid=18.128 aluvi=186.210 aluvv=187.210 aluvg=188.210 alnii=189.210 alniv=190.210 alnig=191.210 cvl=27.128 cvh=28.128 tvl=29.128 tvh=30.128 ci=31.128 asn=32.128 rsn=33.128 sst=34.128 istl1=35.128 istl2=36.128 istl3=37.128 istl4=38.128 swvl1=39.128 swvl2=40.128 swvl3=41.128 swvl4=42.128 slt=43.128 fg10=49.128 mt2=55.128 cape=59.128 pv=60.128 lail=66.128 laih=67.128 sdfor=74.128 crwc=75.128 cswc=76.128 tclw=78.128 tciw=79.128 mx2t6=121.128 mn2t6=122.128 z=129.128 t=130.128 u=131.128 v=132.128 q=133.128 sp=134.128 w=135.128 tcw=136.128 tcwv=137.128 vo=138.128 stl1=139.128 swl1=140.128 sd=141.128 lsp=142.128 cp=143.128 sf=144.128 sshf=146.128 slhf=147.128 chnk=148.128 msl=151.128 lnsp=152.128 d=155.128 gh=156.128 r=157.128 blh=159.128 sdor=160.128 isor=161.128 anor=162.128 slor=163.128 tcc=164.128 u10=165.128 v10=166.128 t2=167.128 d2=168.128 ssrd=169.128 stl2=170.128 swl2=171.128 lsm=172.128 sr=173.128 alb=174.128 strd=175.128 ssr=176.128 str=177.128 tsr=178.128 ttr=179.128 ewss=180.128 nsss=181.128 e=182.128 stl3=183.128 swl3=184.128 lcc=186.128 mcc=187.128 hcc=188.128 sund=189.128 src=198.128 mx2t=201.128 mn2t=202.128 o3=203.128 tco3=206.128 si10=207.128 tp=228.128 iess=229.128 inss=230.128 asq=233.128 lsrh=234.128 skt=235.128 stl4=236.128 swl4=237.128 tsn=238.128 fsr=244.128 flsr=245.128 clwc=246.128 ciwc=247.128 cc=248.128 u10n=131.228 v10n=132.228 swh=229.140 pp1d=231.140 mwp=232.140 cdww=233.140 wind=245.140 dwi=249.140 cl=26.128 dl=7.228 lmlt=8.228 lmld=9.228 lblt=10.228 ltlt=11.228 lshf=12.228 lict=13.228 licd=14.228 ucurr=151131 vcurr=151132 ra_lsp=142.172 ra_cp=143.172 ra_tp=228.172 ra_sf=144.172 ra_sshf=146.172 ra_slhf=147.172 ra_ssrd=169.172 ra_strd=175.172 ra_ssr=176.172 ra_str=177.172 ra_tsr=178.172 ra_ttr=179.172 ra_ewss=180.172 ra_nsss=181.172 ra_e=182.172 ra_sund=189.172 sig_stl1=139.234 sig_msl=151.234 sig_t2=167.234 sig_tp=228.234 anom_strf=1.171 anom_vpot=2.171 anom_tclw=78.171 anom_tciw=79.171 anom_mx2t6=121.171 anom_mn2t6=122.171 anom_z=129.171 anom_t=130.171 anom_u=131.171 anom_v=132.171 anom_q=133.171 anom_tcw=136.171 anom_tcwv=137.171 anom_stl1=139.171 anom_msl=151.171 ranom_tcc=164.171 anom_u10=165.171 anom_v10=166.171 anom_t2=167.171 anom_d2=168.171 anom_mx2t=201.171 anom_mn2t=202.171 anom_sd=141.171 anom_rsn=33.171 anom_u100=006.171 anom_v100=007.171 anom_u200=fixme.171 anom_v200=fixme.171 anom_cape=59.171 anom_sst=34.171 ranom_sf=144.173 ranom_tp=228.173 ranom_sund=189.173 t2ag2=1.131 t2ag1=2.131 t2ag0=3.131 t2alm1=4.131 t2alm2=5.131 tpag20=6.131 tpag10=7.131 tpag0=8.131 stag0=9.131 mslag0=10.131 prob_z=129.131 prob_stl1=139.131 prob_msl=151.131 prob_t2=167.131 prob_tp=228.131 fdir=228021 cdir=228022 cbh=228023 deg0l=228024 u100=228246 v100=228247 u200=228239 v200=228240 tcrw=228089 tcsw=228090 mld=151148 sl=151145 d20=151163 s=151130 sav300=151175 tav300=151164 ocu=151131 ocv=151132 sit=174098 sh2=174096 echo GRIB_DEF complete #end-of-include $EXPVER/include/grib_def.h ($EXPVER/ifstraj_999.ecf) #======================================================================== # Define scripts #======================================================================== JCAT1() { cat >$TMPDIR/create_audit <<\_eof_create_audit : #include $EXPVER/include/create_audit ($EXPVER/ifstraj_999.ecf) #create_audit version: 20030613 set -euxv #======================================================================= # # Script create_audit # ------------------- # # Purpose : Create observational audit information # # Usage : create_audit -f audit_file # ----- -n name_label # -t audit_type # -c cmd # # Parameters : audit_file - file to which audit info is appended # name_label - a name label attached to audit info # audit_type - the kind of audit information # cmd - a command to execute to obtain info #======================================================================= set +xv file=/dev/null name=NONAME type=UNDEFINED cmd="echo" while getopts f:n:t:c: option do case $option in f) file=$OPTARG;; n) name="$OPTARG";; t) type=$OPTARG;; c) cmd="$OPTARG";; esac done #======================================================================= set +e cat >> $file <> $file 2>/dev/null cat >> $file <$TMPDIR/create_ccma <<\_eof_create_ccma : #include $EXPVER/include/create_ccma ($EXPVER/ifstraj_999.ecf) #create_ccma version: 20030324 set -euxv #======================================================================= # # Script create_ccma # ------------------ # # Purpose : To create CCMA-database from ECMA-database # ------- # # Usage : create_ccma [target_no_of_NPES] # ----- # # Parameters : target no of PEs -- the default is NPES # ---------- (could be NPES_AN or NPES_SV, too) # #======================================================================= set +xv task=${_TASK_} if [[ $task = recreate_ccma ]] ; then rm -f $WDIR/create_ccma_done fi if [[ -f $WDIR/create_ccma_done ]] ; then exit 0 fi thisdir=$(pwd) #======================================================================= if [[ $# -gt 0 ]] ; then tg_npes=$1 else tg_npes=$NPES fi echo "$0: Creating CCMA for target no. of PEs = $tg_npes" #======================================================================= cd $WDIR || { echo "***Error: Unable to locate working dir '$WDIR'" exit 1 } #======================================================================= # Check if ECMA-database exists #======================================================================= [[ -f ECMA/ECMA.sch ]] || { echo "***Error: Unable to locate ECMA-database" exit 1 } #======================================================================= # Remove any traces of CCMA found on disk #======================================================================= [[ -d CCMA ]] && rm -rf CCMA rm -f mergeodb_done_CCMA #======================================================================= # Calculate NPROCA and NPROCB from NPROC #======================================================================= NPROC=$tg_npes kproc=$NPROC . kproctoab NPROCA=$ka NPROCB=$kb #======================================================================= # Want more information about CCMA obs distribution per PE ? # ==> Set the following to 1 #======================================================================= OBS_DISTRIBUTION_INFO=${OBS_DISTRIBUTION_INFO:=0} #======================================================================= # Weighting method for CCMA-observation distribution #======================================================================= wtmethod_flag="-w $ODB_CCMA_WTMETHOD" #======================================================================= # Perform observation mapping to PEs in CCMA creation # by ignoring/not ignoring timeslots #======================================================================= if [[ $ODB_CCMA_IGNORE_TSLOTS -eq 1 ]] ; then ignore_timeslot_flag="-T 0" # supply zero timeslots else ignore_timeslot_flag="" # relies on defaults fi #======================================================================= export ODB_IO_LOCK=1 # ODB's I/O-locking turned *ON* for r/w #-- a bit more debugging from ODB's getdb/putdb ... # the value if > 0 indicates proc id [1..$NPES] # if == -1, then all procs output! #export ODB_CTX_DEBUG=1 #======================================================================= # Create CCMA-database from ECMA-database using odbshuffle-procedure #======================================================================= extra_flags="$ignore_timeslot_flag $wtmethod_flag" odbshuffle -iECMA -oCCMA -a$NPROCA -b$NPROCB $extra_flags || { echo "*** ERROR: odbshuffle failed while creating CCMA from ECMA" exit 1 } cd $thisdir echo "CREATE/CCMA finished at $(date)" > $WDIR/create_ccma_done exit 0 _eof_create_ccma cat >$TMPDIR/create_ioassign <<\_eof_create_ioassign #include $EXPVER/include/create_ioassign ($EXPVER/ifstraj_999.ecf) #!/bin/ksh #create_ioassign version: 20130305 set -xv set -eu #======================================================================= # # Script create_ioassign # ---------------------- # # Purpose : To create IOASSIGN file for the given ODB database # # Usage : create_ioassign # ----- -l dbname ; database name # [-d dirname ; location of ioassign_file] # [-n npools] # [-x] ; expand ioassign_file to get rid of percent-d's # [-t task] ; component databases; use with -x # [-s] ; use this if surface analysis # [-e] ; use this if ensemble data assimilation # [-q] ; be quiet (except for fatal errors) # # Parameters : dbname - database name, like ECMA or CCMA; must be supplied # ---------- dirname - directory where the IOASSIGN will be placed ; # the default: $PWD # npools - number of pools (default: from $dbname/ECMA.dd) # task - component database(s); like -t amsua for ECMA.amsua # #======================================================================= ARGS="$0 $*" USAGE1="$0 -l dbname [-d dirname] [-n npools]" USAGE2=" [-x (to expand ioassign) [-s (if surface analysis)] -t task1 [-t task2] ...]" USAGE3=" [-q (quiet)] [-b iobufsize] [-m monitoring]" dbname=none dir=. npools=0 expand=0 alltasks="" surf=0 ensemble=0 silence=0 monitoring=0 errflg=0 FLAGS="d:l:n:smqt:xe" while getopts $FLAGS option do case $option in l) dbname=$OPTARG;; d) dir="$OPTARG";; n) npools=$OPTARG;; s) surf=1;; e) ensemble=1;; q) silence=1;; t) alltasks="$alltasks $OPTARG";; x) expand=1;; m) monitoring=1;; \?) errflg=1;; esac done if [[ $silence -eq 0 ]] ; then echo "$ARGS" >&2 fi lscreen_cont=false [[ $dbname != CCMA ]] && lscreen_cont=true # PWL #======================================================================= # Check parameters #======================================================================= if [[ $dbname = none ]] ; then echo "$0: An invalid dbname=$dbname was supplied via -l option" >&2 errflg=1 fi [[ -d $dir ]] || mkdir -p $dir || errflg=1 if [[ ! -d $dir ]] ; then echo "$0: Database dir '$dir' not found" >&2 errflg=1 fi if [[ $expand -eq 1 && "$alltasks" = "" ]] ; then alltasks=$(cd $dir/.. ; \ls -C1pd $dbname.* | \ awk -F/ '{print $1}' | sed "s/^$dbname\.//g" | sort -u) fi if [[ $errflg -ne 0 ]] ; then echo "$ARGS" >&2 echo $USAGE1 >&2 echo $USAGE2 >&2 echo $USAGE3 >&2 exit 1 fi ddfile=$dir/$dbname.dd if [[ $npools -le 0 ]] ; then # try to find out correct no. of pools if [[ -s $ddfile ]] ; then npools=$(head -5 $ddfile | tail -1) else npools=${ODB_IOASSIGN_MAXPROC:=0} # If == 0, can be usually a bad thing ;-( fi if [[ $silence -eq 0 ]] ; then echo "$0: Total no. of pools was detected automatically from file '$ddfile' ;" >&2 echo " Using value for npools='$npools'" >&2 fi fi io_method=${ODB_IO_METHOD:=4} if [[ -s $ddfile ]] ; then iom=$(head -1 $ddfile | awk 'BEGIN {n=0;} {if (NF >= 3) n=$3;} END {print n;}') [[ $iom -ne 0 ]] || io_method=$iom fi #-- More I/O-buffering when either less pools or I/O-method found to be horizontal concatenation if [[ $npools -lt 32 ]] || [[ $io_method -eq 4 ]] ; then iodef="-r 8m -w 8m -p 8m -e 8m" else iodef="-r 1m -w 1m -p 1m -e 1m" fi #-- Get list of tables either from existing $ddfile or using latest known tables if [[ -s $ddfile ]] ; then tables=$(egrep "^@" $ddfile | awk '{print $1}' | perl -pe 's#\@# #g;') else #-- Known tables in alphabetical order tables="aeolus_auxmet aeolus_hdr aeolus_l2b aeolus_l2c" tables="$tables body bufr bufr_tables bufr_tables_desc" tables="$tables ddrs desc errstat hdr index poolmask resat" tables="$tables rtovs rtovs_body rtovs_mlev rtovs_pred rtovs_slev" tables="$tables sat satem satob scatt scatt_body smos ralt" tables="$tables ssmi ssmi_body ssmi_mlev ssmi_slev" tables="$tables timeslot_index update limb resat_averaging_kernel" tables="$tables radar radar_body radar_station" tables="$tables surfbody_feedback modsurf radiance allsky co2_sink cloud_sink collocated_imager_information" tables="$tables auxiliary auxiliary_body radiance_body allsky_body fcdiagnostic" tables="$tables gbrad gbrad_body gnssro gnssro_body" tables="$tables ensemble conv conv_body raingg raingg_body" #-- Include only minimal amount of update tables # Note: can't use MXUP_TRAJ, since $NMXUPD in data layout may have a larger value jpmxup=10 # from source code of IFS ; see ifs/module/parcma.F90 uptraj=0 while [[ $uptraj -lt $jpmxup ]] do ((uptraj += 1)) tables="$tables update_$uptraj" done jpmxenkf=120 # from source code of IFS ; see ifs/module/parcma.F90 enkf_count=0 while [[ $enkf_count -lt $jpmxenkf ]] do ((enkf_count += 1)) tables="$tables enkf_$enkf_count" done jpmxenda=100 # from source code of IFS ; see ifs/module/parcma.F90 enda_count=0 while [[ $enda_count -lt $jpmxenda ]] do ((enda_count += 1)) tables="$tables enda_$enda_count" done enda_count=0 while [[ $enda_count -lt $jpmxenda ]] do ((enda_count += 1)) tables="$tables surfbody_feedback_$enda_count" done jpmxfcdiag=20 #from source code of IFS ; see ifs/module/parcma.F90 fcdiag_count=0 while [[ $fcdiag_count -lt $jpmxfcdiag ]] do ((fcdiag_count += 1)) tables="$tables fcdiagnostic_body_$fcdiag_count" done fi #-- Start creating IOASSIGN-file (in the fastest possible way ?) # ioassign -s -n $npools $iodef -a \$ODB_DATAPATH_$dbname/%d/$cmd $dbname..%d unset IOASSIGN || : tmpfile=__ioassign__.$$ cat /dev/null > $tmpfile ioassign -s -a \$ODB_SRCPATH_$dbname/$dbname.dd $dbname >> $tmpfile ioassign -s -a \$ODB_SRCPATH_$dbname/$dbname.sch $dbname.sch >> $tmpfile ioassign -s -a \$ODB_SRCPATH_$dbname/$dbname.flags $dbname.flags >> $tmpfile ioassign -s -a \$ODB_SRCPATH_$dbname/$dbname.iomap $dbname.iomap >> $tmpfile #-- dca : direct column access -files (globally one file per table) # only applicable for self-contained databases i.e. $expand == 0 dcadir=dca if [[ $expand -eq 0 ]] && [[ $alltasks == "" ]] ; then echo "tables=$tables" awk \ '(NR==1) { dca=$0; };(NR >= 2) { \ for (i=1; i<=NF; i++) { x=dca; gsub("TABLENAME",$i,x); print x; }}' >> $tmpfile \ </dev/null | head -1) if [[ "$hdrgz" != "" ]] ; then cmd=".gz -c #gzip" else cmd="" fi if [[ $ensemble -eq 1 ]] ; then dots="/../../" else dots="/" fi #-- No gzipping of QTARFILE ($ODB_IO_METHOD = 3) ioassign -s -n $npools $iodef -a \$ODB_DATAPATH_$dbname/%d/QTARFILE $dbname.QTARFILE.%d >> $tmpfile if [[ $alltasks != "" ]];then #e.g. multiple tasks - ECMA.conv, ECMA.amsua etc if [[ $surf -eq 1 ]] ; then dots="/../../" [[ $monitoring -eq 1 ]] && [[ $lscreen_cont = true ]] && dots="/../../uptraj_$uptraj/" else if [[ $lscreen_cont = true ]];then dots="/../uptraj_$uptraj/" else dots="/../" fi fi p=0 for task in $alltasks do # read npools in this xCMA.x from the .dd file d=$dir$dots$dbname.$task ddfile=$d/$dbname.dd np=$(head -5 $ddfile | tail -1) # Calculate global pool number range for this ECMA.x ((psta = p + 1)) ((pend = p + np)) p=$pend ioassign -S $psta -s -n $np $iodef -a \$ODB_DATAPATH_$dbname$dots$dbname.$task/%d/%s$cmd $dbname.%s.%d >> $tmpfile done else # e.g. single CCMA ioassign -s -n $npools $iodef -a \$ODB_DATAPATH_$dbname$dots%d/%s$cmd $dbname.%s.%d >> $tmpfile fi else # Expand #-- Create template file for table=_xxx_ for subsequent filtering tbl=_xxx_ template=__template__.$$ cat /dev/null > $template p=0 if [[ $surf -eq 1 ]] ; then dots="../.." else dots=".." fi for task in $alltasks do d=$dir/$dots/$dbname.$task ddfile=$d/$dbname.dd if [[ $silence -eq 0 ]] ; then echo "$0: Processing $ddfile ; p=$p" >&2 fi if [[ -s $ddfile ]] ; then #-- Sense whether gzipped already ? hdrgz=$(find [0-9]* -type f -name 'hdr.gz' -print 2>/dev/null | head -1) if [[ "$hdrgz" != "" ]] ; then cmd=".gz -c #gzip" else cmd="" fi np=$(head -5 $ddfile | tail -1) ((psta = p + 1)) ((pend = p + np)) #-- In the following the %d after "-a" option i.e. physical filename # expands (-x) between range [1 .. $np], but the logical filename's %d # expands between range [$psta .. $pend] i.e [$psta .. $psta + $np - 1] (due to -S) ioassign -s -x -n $np -S $psta $iodef \ -a \$ODB_DATAPATH_$dbname/$dots/$dbname.$task/%d/$tbl$cmd \ $dbname.$tbl.%d >> $template p=$pend fi # if [[ -s $ddfile ]] done if [[ $p -ne $npools ]] ; then if [[ $silence -eq 0 ]] ; then echo "$0: ***Warning: Inconsistent no. of pools found=$p ; expected=$npools" >&2 fi fi #-- Now filter "_xxx_" across all tables using Perl to create final IOASSIGN-file # for tbl in $tables # do # perl -pe "s/_xxx_/$tbl/g" < $template >> $tmpfile # done cat << \EOF > create_ioassign_perl.pl use strict; use warnings; my $tables = $ENV{'tables'}; my @tables=split(/\s+/,$tables); my $templ_file=$ENV{'template'}; my $tmpfile=$ENV{'tmpfile'}; my(@lines); if(!open(INFIL,$templ_file)) { print STDERR "Can't open $templ_file for reading\n"; die("Can't open $templ_file for reading\n"); } open(OUT,">>$tmpfile"); @lines=; close INFIL; my $line; for (@tables) { my $tbl=$_; for (@lines) { $line=$_; $line=~s/_xxx_/$tbl/g; print OUT $line; } } EOF export tables template tmpfile perl create_ioassign_perl.pl rm -f $template fi rm -f $dir/*IOASSIGN* || true cp $tmpfile $dir/$dbname.IOASSIGN rm -f $tmpfile # for compatibility & convenience (cd $dir ; \rm -f IOASSIGN.$dbname ; \ln -s $dbname.IOASSIGN IOASSIGN.$dbname) (cd $dir ; \rm -f IOASSIGN ; \ln -s $dbname.IOASSIGN IOASSIGN) exit 0 _eof_create_ioassign cat >$TMPDIR/dcagen <<\_eof_dcagen #include $EXPVER/include/dcagen ($EXPVER/ifstraj_999.ecf) #!/bin/ksh trap 'echo "Received signal, aborting ..." >&2; wait; exit 1' 1 2 3 15 set -eu #begin #======================================================================= # # Script dcagen # ------------- # # Purpose : Creates Direct Column Access-files for given ODB # to improve post-processing & direct column access # from ODB tables # # Usage : dcagen [-l dbname] [-t table] [-f] [-d] [-n] [-u] [-i dbdir] [-v] [-N cpus] # [-F] [-b] [-B bufsiz] [-z] [-g] [-c colname@table] [-C colname@table] # [-x] [-Q] [-m] [-o output_file_prefix] [-D cache_disk] [-a] [-A] [-I] [-P] # [-e errlog] [-E errlog] # # Parameters : -l dbname - database name (default: from *.dd file name) # ---------- -t table - table name (can be supplied multiple times) # -f - force to continue despite fatal errors # -F - force to create despite already exists # -d - turn debugging on # -n - do NOT update i.e. DO NOT use -u option for dcagen.x (the default) # -u - use option -u for dcagen.x # -i dbdir - Database directory (default: "." i.e. current dir) # -v - Produce verbose output # -N - How many CPUs to use to parallelize dcagen over multiple tables (default=3) # -b - Create binary DCA-file instead of text # -B bufsiz - Override the ODB_CACHE_LIMIT used with -c/-C (in MBytes) (default=128) # -z - Remove zero-length DCA-files (by default NOT removed) # -g - DCA-files (binary or text) will be gzip'ped, if possible (by default: not) # -c c@t - Create cache of column 'c@t' values to file cache/c@t.<#> # -C c@t - Create unpacked cache of column 'c@t' values to file cache/c@t.<#> # -q - Quiet option : Do not print dots (....) in show progress in non-verbose mode # -x - Extract poolno,nrows,nmdis,cardinality,min,max of column(s) given by -c/-C # -m - Same as -x, but prints only column name followed by aggregate min & max # -Q - Quickmode: same as -x, but quits after the first input file has been processed # -o prefix - *ALL* cacheable files will be written to file(s) cache/prefix.cache.%d. Implies -N 1 # If set to %s, then prefix will be based on prevailing tablename # -D cachedisk - root-path for cache-disk i.e. ODB_CACHE_DISK (default=cache) # -a - cache all encountered columns. Do NOT unpack them (-C colname and -A override) # -A - cache all encountered columns. Unpack them before caching # -I - Do *NOT* (re-)create $dbname.IOASSIGN-file (even if it did not exist) # -P - Prevent from running odbprune recursively (f.ex. when dcagen is called from odbprune) # -e errlog - Enforce stderr output to file errlog # -E errlog - Enforce stderr output to file errlog; as -e, but append to the existing errlog # #======================================================================= #end OMP_NUM_THREADS=1 cmd=$(\cd $(dirname $0); echo $(pwd))/$(basename $0) thisdir=$(pwd) if [[ $# -gt 0 ]] ; then ARGS="${cmd} $*" else ARGS="${cmd}" fi USAGE="Usage: $0 [-l dbname] [-t table] [-f] [-F] [-d] [-u] [-n]" USAGE="$USAGE [-i dbdir] [-v] [-N cpus] [-b] [-B bufsiz] [-z] [-g]" USAGE="$USAGE [-c col@table] [-C col@table] [-q] [-x] [-m] [-Q] [-o output_file_prefix]" USAGE="$USAGE [-D cache_disk] [-a] [-A] [-I] [-P] [-e errlog] [-E errlog]" dbname="" tables="" force2continue=0 force2create=0 errflg=0 debug="" update="-n" # -u (update) can be 100 times slower than if -n option was used ;-( dbdir=. verbose=0 export ODB_PARAL=${ODB_PARAL:=4} paral=${ODB_PARAL} bufsiz="" binary="" bin=0 rmzero=0 dogzip=0 cachec="" cacheC="" cacheit=0 quiet=0 extract=0 extract_arg="" quick=0 minmax=0 oprefix="" oprefix_given=0 export ODB_CACHE_DISK=${ODB_CACHE_DISK:="cache"} # could be f.ex. "/fast/disk" cachedisk=${ODB_CACHE_DISK} allcached="" ALLcached="" create_Ioassign=1 # ... but only when $dbname.IOASSIGN was not found prune=1 errlog_given=0 errlog="/dev/null" while getopts aAbB:c:C:dD:e:E:fFgi:Il:mnN:o:PqQt:uvxz option do case $option in a) allcached="-a"; cacheit=1;; A) ALLcached="-A"; cacheit=1;; b) binary="-b"; bin=1;; B) bufsiz="-i $OPTARG";; c) cachec="$cachec $OPTARG"; cacheit=1;; C) cacheC="$cacheC $OPTARG"; cacheit=1;; d) debug="-d";; D) cachedisk="$OPTARG";; e) errlog_given=1; errlog="$OPTARG";; E) errlog_given=2; errlog="$OPTARG";; f) force2continue=1;; F) force2create=1;; g) dogzip=1;; i) dbdir=$OPTARG;; I) create_Ioassign=0;; l) dbname=$OPTARG;; m) minmax=1; extract=1;; n) update="-n";; N) paral=$OPTARG;; o) oprefix="-o $(basename $OPTARG)"; oprefix_given=1;; P) prune=0;; q) quiet=1;; Q) extract=1; quick=1;; t) tables="$tables$OPTARG ";; u) update="-u";; v) verbose=1;; x) extract=1; quick=0;; z) rmzero=1;; *) errflg=1;; esac done if [[ $extract -eq 1 ]] ; then extract_arg="-x" quiet=1 update="-n" binary="" bin=0 dogzip=0 paral=1 verbose=0 force2create=1 errlog_given=1; errlog="/dev/null" fi if [[ $errlog_given -ge 1 ]] ; then if [[ $errlog_given -eq 1 ]] ; then # -e exec 2>$errlog else # -E exec 2>>$errlog fi fi if [[ $quiet -eq 0 ]] ; then echo "$ARGS" >&2 fi if [[ $cacheit -eq 1 && $oprefix_given -eq 1 ]] ; then paral=1 fi if [[ ! -d $dbdir ]] ; then echo "***Error: Given database directory does not exist. Check your '-i dbdir'" >&2 errflg=2 else dbdir=$(\cd $dbdir>/dev/null 2>&1; pwd) if [[ "$dbname" = "" ]] ; then dbname=$(\cd $dbdir>/dev/null 2>&1; \ls -C1 *.dd 2>/dev/null | head -1) dbname=$(basename $dbname .dd) fi fi if [[ "$dbname" = "" ]] ; then echo "***Error: Unable to determine the database name. Check your '-l dbname'" >&2 errflg=3 fi dbname=$(echo "$dbname" | perl -pe 's/\..*//') ddfile=$dbdir/$dbname.dd npools=0 if [[ ! -f $ddfile ]] ; then echo "***Error: Unable to locate the main metadata file (ddfile '$ddfile')" >&2 errflg=4 else npools=$(head -5 $ddfile | tail -1) fi #======================================================================= # Report errors and exit #======================================================================= if [[ $errflg -ne 0 ]] ; then echo "***Error(s) were detected" >&2 awk '/#begin/,/#end/' $cmd | egrep -v '#(begin|end)' | sed 's/^#//' >&2 exit 1 fi #======================================================================= # Begin processing ... #======================================================================= if [[ $prune -eq 1 ]] ; then prunecmd="odbprune -i $dbdir" if [[ $quiet -eq 1 ]] ; then prunecmd="$prunecmd -q" fi $prunecmd || { rc=$? echo "***Error in $0: '$prunecmd' has failed" >&2 exit $rc } fi dcadir_in=$dbdir/dca dcadir_out=$dbdir/dca if [[ $create_Ioassign -eq 1 && ! -f $dbdir/$dbname.IOASSIGN ]] ; then #-- Make sure $dbdir/$dbname.IOASSIGN exists \cd $dbdir if [[ $quiet -eq 1 ]] ; then create_ioassign -l $dbname -q >&2 else create_ioassign -l $dbname >&2 fi \cd $thisdir fi if [[ "$(echo "$cachedisk" | cut -c1)" != "/" ]] ; then cachedisk=./$cachedisk fi export ODB_CACHE_DISK="$cachedisk" cacheall="" cachearg="" if [[ $cacheit -eq 1 ]] ; then if [[ $extract -eq 0 ]] ; then [[ -d $cachedisk ]] || mkdir -p $cachedisk fi if [[ "$cachec" != "" ]] ; then cacheallc=$(echo "$cachec" | perl -pe 's/,/ /g; s/\s+/ /g;') cachec=$(echo "$cachec" | perl -pe 's/,/ /g; s/\s+/ /g; s/(\S+)/-c $1/g') else cacheallc="" fi if [[ "$cacheC" != "" ]] ; then cacheallC=$(echo "$cacheC" | perl -pe 's/,/ /g; s/\s+/ /g;') cacheC=$(echo "$cacheC" | perl -pe 's/,/ /g; s/\s+/ /g; s/(\S+)/-C $1/g') else cacheallC="" fi cacheall="$cacheallc $cacheallC" cachearg="$oprefix $ALLcached $allcached $cachec $cacheC" # Note: oprefix (-o flag) MUST BE prior to -c/-C flags fi if [[ "$tables" = "" ]] ; then tables=$(egrep ^@ $ddfile | perl -ne 'print "$1\n" if (m/^\@(\S+)\s+\d+/)' | perl -pe 's/\n/ /g;') # reorder tables for optimal parallel dcagen: largest tables first # for this we need the actual cumulative filesizes for each table TMPDIR=${TMPDIR:=/tmp} sizes=$TMPDIR/sizes.pl.$$ cat > $sizes <<'EOF' use strict; my %cnt = (); my $size; my $key; for (<>) { next if (m/^\s*$/); s/^\s+//; s|\s+\d+/| |; ($size,$key) = split/\s+/; $cnt{$key} += $size; } foreach $key (keys(%cnt)) { $size = $cnt{$key}; print "$size $key\n"; } EOF #-- AIX doesn't seem to support 'xargs -r', but its 'xargs' by default implies -r ... xargs_r=$(echo "" | xargs -r 2>/dev/null && echo "xargs -r" || echo "xargs") tables=$(\cd $dbdir >/dev/null 2>&1; \ (echo "$tables" | perl -pe 's/\s*(\w+)/0 $1\n/g;' ; \ find [0-9]* -type f -follow 2>/dev/null | $xargs_r ls -C1s) | \ perl -w $sizes | sort -nr -k1,1 | awk '{print $NF}' | perl -pe 's/\n/ /g;') rm -f $sizes else tables=$(echo "$tables" | perl -pe 's/,/ /g; s/\s+/ /g;') fi [[ $verbose -eq 0 ]] || set +xv [[ $verbose -eq 0 ]] || echo "dcagen: $(pwd) ..." [[ -d $dcadir_out ]] || mkdir $dcadir_out in_error=$thisdir/in_error rm -f $in_error function dcagen_parallel { set -eu typeset t=$1 if [[ $cacheit -eq 1 ]] ; then typeset ca for ca in $cacheall do typeset col=$(echo "$ca" | perl -pe 's/\@.*//') if [[ $extract -eq 0 ]] ; then rm -f $cachedisk/${col}@$t.cache.* fi done fi typeset cnt=0 typeset dcafile_out if [[ $extract -eq 0 ]] ; then dcafile_out=$dcadir_out/$t.dca else dcafile_out=$dcadir_out/$t.extract fi typeset rc=0 typeset nohdr="" typeset gzip="" [[ $dogzip -eq 0 ]] || gzip=$(whence gzip 2>/dev/null || echo "") typeset v="" [[ $verbose -eq 0 ]] || v="v" if [[ $bin -eq 0 ]] ; then typeset dcafile_in=$dcadir_in/$t.dca egrep '^#DCA' $dcafile_in 2>/dev/null | egrep 'is_little$' >/dev/null 2>&1 || rc=$? fi if [[ $rc -ne 0 ]] || [[ $force2create -eq 1 ]] ; then [[ $verbose -eq 0 ]] || echo "Creating DCA-information for table $t ..." cat /dev/null > $dcafile_out # for f in $(\cd $dbdir >/dev/null 2>&1; \ # find [0-9]* -type f -follow -name $t -print 2>/dev/null | sort -n) typeset f typeset poolno=0 while [[ $poolno -lt $npools ]] do ((poolno += 1)) f=$poolno/$t if [[ -r $dbdir/$f ]] ; then typeset cmd cmd=$(echo "dcagen.x $debug $update -f $ddfile -l $dbname \ -t $t $cachearg -p $poolno $binary $bufsiz $nohdr $extract_arg $f") cmd=$(echo "$cmd" | perl -pe 's/\s+/ /g') [[ $verbose -eq 0 ]] || echo "cd $dbdir; $cmd" (\cd $dbdir >/dev/null 2>&1; $cmd) >> $dcafile_out || { echo "***Error in '$cmd'" >&2 [[ $force2continue -eq 1 ]] || { echo "***Error in '$cmd'" >> $in_error exit 1 } } if [[ $extract -eq 0 && $verbose -eq 0 && $quiet -eq 0 ]] ; then # ...... printout (per every 10th) ((cnt += 1)) typeset tst=$((cnt%10)) if [[ $tst -eq 1 ]] ; then (echo "." | perl -pe 's/\n//' >&2) # echo -n not available on all Junikses fi fi nohdr="-h" if [[ $quick -eq 1 ]] ; then # get out now poolno=$npools fi fi # if [[ -r $f ]] ; then ... done if [[ $extract -eq 0 && $verbose -eq 0 && $quiet -eq 0 ]] ; then # last ..... printout (echo "." | perl -pe 's/\n//' >&2) # echo -n not available on all Junikses fi if [[ $extract -eq 1 ]] ; then if [[ $minmax -eq 1 ]] ; then typeset cols=$(awk '{print $1}' < $dcafile_out | sort -u) typeset ca for ca in $cols do egrep "^$ca " $dcafile_out |\ awk 'BEGIN { name=""; min=1e+100; max=-1e+100;} { \ name=$1; \ if ($NF > max) { max=$NF; } \ if ($(NF-1) < min) { min=$(NF-1);} } \ END {print name,min,max;}' done else cat $dcafile_out fi rm -f $dcafile_out else if [[ $bin -eq 0 ]] ; then egrep '^#DCA' $dcafile_out | head -1 > $dcafile_out.$$ egrep -v '^#' $dcafile_out | sort -n -k1,1 -k6,6 >> $dcafile_out.$$ mv $dcafile_out.$$ $dcafile_out fi if [[ -s $dcafile_out ]] ; then if [[ "$gzip" != "" && -x "$gzip" ]] ; then rm -f $dcafile_out.gz $gzip -1$v $dcafile_out if [[ -f $dcafile_out.gz ]] ; then mv $dcafile_out.gz $dcafile_out fi fi elif [[ $rmzero -eq 1 ]] ; then rm -f $dcafile_out fi fi # if [[ $extract -eq 1 ]] ; then ... else ... fi } subproc="&" if [[ $paral -le 1 ]] ; then subproc="" paral=1 fi setx=""; [[ $verbose -eq 0 ]] || setx="set -x;" [[ $verbose -eq 0 ]] || date n=0 for t in $tables do eval "($setx dcagen_parallel $t) $subproc" ((n+=1)) if [[ -f $in_error && $force2continue -eq 0 ]] ; then break fi [[ $((n%$paral)) -eq 0 ]] && wait if [[ -f $in_error && $force2continue -eq 0 ]] ; then break fi done wait if [[ $extract -eq 0 ]] ; then if [[ $quiet -eq 0 ]] ; then [[ $verbose -eq 1 ]] || echo " " [[ $verbose -eq 0 ]] || date fi fi if [[ -f $in_error ]] ; then echo "***Error: There were error(s) encountered during dcagen run(s)" >&2 cat $in_error >&2 rm -f $in_error exit 1 elif [[ $verbose -eq 1 ]] ; then pwd ls -Lltr $dcadir_out/*.dca 2>/dev/null || : if [[ $cacheit -eq 1 && $extract -eq 0 ]] ; then ls -Lltr $cachedisk 2>/dev/null || : fi fi exit 0 _eof_dcagen cat >$TMPDIR/get_exe <<\_eof_get_exe : #include $EXPVER/include/get_exe ($EXPVER/ifstraj_999.ecf) #get_exe version: 201111122 set -euxv #======================================================================= # # Script get_exe # ------------- # # Purpose : Link to date-dependent binary # ------- # # Usage : get_exe [-d $date] [-p $path] -f exe_name # ----- # # Parameters : -d date - yyyymmddhh, default $BASETIME # ---------- -p path - default $BINS # -f exe_name - output filename # #======================================================================= set +v usage() { echo "usage: $0 [-d $date] [-p $path] -f exe_name" } date=$BASETIME path=$BINS exe_name="" while getopts d:p:f: option ; do case $option in d) date=$OPTARG;; p) path=$OPTARG;; f) exe_name=$OPTARG;; \?) usage exit 1 ;; esac done #======================================================================= # Check parameters #======================================================================= if [[ "$exe_name" = "" ]] ; then echo "$0: error: exe_name not specified. This is required" usage exit 1 fi #======================================================================= # Check date #======================================================================= first=$( echo $INITIME | cut -c1-10 ) if [[ $date -lt $first ]] ; then date=$first fi #======================================================================= # Find first binary with date at or before $date #======================================================================= last=$first prefix=$exe_name if [[ $OD_MODE = true ]] && [[ $SUITE_TYPE = eps ]]; then path="" # use latest last=$(ls -1tr $BINS/${IFS_EXECUTABLE} | tail -1) echo "Using latest executable: $last" exit 0 fi for i in $( ls -1 ${path}/ | grep $prefix*\$ ) ; do if [[ $i = ${prefix}_$date ]] ; then exit 0 fi if [[ $i > ${prefix}_$date ]] ; then exit 0 fi last=$i done echo "Using latest executable: $last" set -x ln -sf $path/$last $exe_name if [[ $PROFILE -gt 0 && $exe_name = ${IFS_EXECUTABLE} ]] ; then ln -sf $path/$i.pg $exe_name.pg fi exit 0 _eof_get_exe cat >$TMPDIR/getbias <<\_eof_getbias : #include $EXPVER/include/getbias ($EXPVER/ifstraj_999.ecf) #----------------------------------------------------------------------- # Script - getbias # ---------------- # # Get the right tovs or scat bias file for a given assimilation cycle # # Usage : getbias [-m mode] [-t time ] -o outfile # ----- # # Parameters : -m mode - default 'noaa' # ---------- -t time - yyyymmddhh, default $BASETIME # -o outfile - output file name # # 31-JUL-1996 / Otto Pesonen # 3-OCT-1997 / Jan Haseler - add scat bias # 26-JAN-1998 / Rose Munro - new file format # 30-OCT-2001 / Christina Koepken - add goesimg (imager) as option # 17-DEC-2003 / Hans Hersbach- make scat bias files cycle and date # dependent # 12-Jul-2006 / Dick Dee - If ERA_MODE and LVARBC, do not get bias files # for radiance data # 18-May-2012 / Paul Poli - Skip radiances or use first date if ERA_NOGETBIAS # Feb-2015 / Giovanna De Chiara - Adding RSCAT and HSCAT bias correction files # # Globals: $XDATA # $BASETIME # #----------------------------------------------------------------------- usage() { echo "usage: $0 [-m mode] [-t $BASETIME] -o localname" } mode=noaa time="" outname="" set -eu #----------------------------------------------------------------------- # Parse the options #----------------------------------------------------------------------- while getopts m:o:t: option ; do case $option in m) mode=$OPTARG;; o) if [ "$outname" != "" ] ; then echo "$0: error: only one output name may be given" usage exit 1 fi outname=$OPTARG ;; t) if [ "$time" != "" ] ; then echo "$0: error: only one timestamp may be given" usage exit 1 fi time=$OPTARG ;; \?) usage exit 1 ;; esac done shift $(expr $OPTIND - 1) #----------------------------------------------------------------------- # Default time is the global BASETIME #----------------------------------------------------------------------- if [[ "$time" = "" ]] ; then time=$BASETIME fi if [[ $OBPATH = era40 ]] ; then e4="/era40" else e4="" fi #----------------------------------------------------------------------- # Check the mode #----------------------------------------------------------------------- first=1943010100 prefix=coef ERA_NOGETBIAS=${ERA_NOGETBIAS:=false} if [[ $ERA_NOGETBIAS = true && $mode = @(noaa|meteosat|goesimg|mtsatimg|fy2|ssmi|airs) ]] ;then echo "Skipping getbias for mode = $mode: not using a bias file" elif [[ $mode = noaa ]] ; then if [[ $OBPATH = era40 ]] ; then bdir=$XDATA/${IFS_CYCLE}/era40/noaabias else bdir=$XDATA/${IFS_CYCLE}/bias prefix=coef_noaa_ first=1999090100 fi elif [[ $mode = metop ]] ; then bdir=$XDATA/metopbias # Dummy file with zeros, until first Metop first=2006010100 # data arrives and is bias-corrected elif [[ $mode = erss0 ]] ; then bdir=$XDATA/${IFS_CYCLE}/scatbias prefix=ers_sigma0_ elif [[ $mode = erssp ]] ; then bdir=$XDATA/${IFS_CYCLE}/scatbias prefix=ers_speed_ elif [[ $mode = ascats0 ]] ; then bdir=$XDATA/${IFS_CYCLE}/scatbias prefix=ascat_sigma0_ elif [[ $mode = ascatsp ]] ; then bdir=$XDATA/${IFS_CYCLE}/scatbias prefix=ascat_speed_ elif [[ $mode = qscatsp ]] ; then bdir=$XDATA/${IFS_CYCLE}/scatbias prefix=qscat_speed_ elif [[ $mode = oscatsp ]] ; then bdir=$XDATA/${IFS_CYCLE}/scatbias prefix=oscat_speed_ elif [[ $mode = rscatsp ]] ; then bdir=$XDATA/${IFS_CYCLE}/scatbias prefix=rscat_speed_ elif [[ $mode = hscatsp ]] ; then bdir=$XDATA/${IFS_CYCLE}/scatbias prefix=hscat_speed_ elif [[ $mode = sscatsp ]] ; then bdir=$XDATA/${IFS_CYCLE}/scatbias prefix=sscat_speed_ elif [[ $mode = fscatsp ]] ; then bdir=$XDATA/${IFS_CYCLE}/scatbias prefix=fscat_speed_ elif [[ $mode = wscatsp ]] ; then bdir=$XDATA/${IFS_CYCLE}/scatbias prefix=wscat_speed_ elif [[ $mode = meteosat ]] ; then if [[ $OBPATH = era40 ]] ; then bdir=$XDATA/${IFS_CYCLE}/metobias else bdir=$XDATA/${IFS_CYCLE}${e4}/metobias # Dummy bias file (bcor=0 for all satellites) between fi first=1977120700 # start of Met-1 and first tuned bias-corr for assim # of MET-7 (based on CY25R1) in coef2001050100 # this includes MSG biases elif [[ $mode = goesimg ]] ; then if [[ $OBPATH = era40 ]] ; then bdir=$XDATA/${IFS_CYCLE}/goesbias else bdir=$XDATA/${IFS_CYCLE}${e4}/goesbias fi prefix=coef_goesimg_ first=1977120700 # First goes bias file available (bcor=0) # (Because LGEOS controls both METEOSAT and GOES, supply dummy GOES bias # files also for dates before the first GOES data, 2001/10/24, is available) elif [[ $mode = mtsatimg ]] ; then if [[ $OBPATH = era40 ]] ; then bdir=$XDATA/${IFS_CYCLE}/mtsatbias else bdir=$XDATA/${IFS_CYCLE}${e4}/mtsatbias fi first=1977120700 # First mtsat bias file available (bcor=0) # (Because LGEOS controls METEOSAT,GOES,MTSAT,FY2 supply dummy MTSAT bias # files also for dates before the first MTSAT data, 2005/??/??, is available) elif [[ $mode = fy2 ]] ; then if [[ $OBPATH = era40 ]] ; then bdir=$XDATA/${IFS_CYCLE}/fy2bias else bdir=$XDATA/${IFS_CYCLE}${e4}/fy2bias fi first=1977120700 # First fy2 bias file available (bcor=0) # (Because LGEOS controls METEOSAT,GOES,MTSAT,FY2 supply dummy FY2 bias # files also for dates before the first FY2 data, 2005/??/??, is available) elif [[ $mode = ssmi ]] ; then bdir=$XDATA/${IFS_CYCLE}${e4}/ssmibias [[ $OBPATH != era40 ]] && first=1999090100 elif [[ $mode = airs ]] ; then bdir=$XDATA/${IFS_CYCLE}/airsbias first=2002101100 # First airs bias file available elif [[ $mode = rst ]] ; then # ERA40 radiosonde temperature biases myhour=$( substring $time 9 10 ) bdir=$XDATA/${IFS_CYCLE}/era40/rsbias prefix=T_correct_${myhour}_ else usage echo "Invalid value for parameter 'mode'" echo "Valid values are noaa, erss0, erssp, meteosat, ssmi, airs and rst" exit 2 fi #----------------------------------------------------------------------- # Check the time #----------------------------------------------------------------------- if [[ $time -lt $first ]] ; then if [[ $ERA_NOGETBIAS != true ]] ; then echo "$0: no bias files before date $first" echo "Please seek advice from the satellite section" exit 3 else time=$first fi fi #----------------------------------------------------------------------- # Ok get the right file #----------------------------------------------------------------------- last=$first for i in $( ls -1 $bdir/ | grep "^${prefix}[1,2][0,9][0-9]\{8\}\$" ) ; do if [[ $i = $prefix$time ]] ; then echo "Using bias file $bdir/$i" cp $bdir/$i $outname exit 0 fi if [[ $i > $prefix$time ]] ; then echo "Using bias file $bdir/$last" cp $bdir/$last $outname exit 0 fi last=$i done echo "Using latest file: $last" cp $bdir/$last $outname exit 0 _eof_getbias cat > $TMPDIR/get_nearest_infile_date <<\_eof_get_nearest_infile_date #include $EXPVER/include/get_nearest_infile_date ($EXPVER/ifstraj_999.ecf) :get_nearest_infile_date version: 20130304 #======================================================================= # # Script get_nearest_infile_date # ------------------------------- # # Purpose : Generic script that gets the right input file for a given # assimilation cycle # # Usage : get_nearest_infile_date [-d $BASETIME] [-i $prefix] [-p blacklist_path] # ----- # # Parameters : -d - date and time in form yyyymmddhh # ---------- -f - output file name # [-p - filename path (where the blacklist files are located; XDATA by default] # # $BASETIME # # Origin: Adaptation of get_ds_black by P de Rosnay, G Radnoti and K Salonen #============================================================================== USAGE="$0 [-d $BASETIME] [-i $prefix] [-p blacklist_path]" # ./get_nearest_infile_date -d 2013030100 -i blacklist_ssa -p /home/rdx/data/41r2/an while getopts d:i:p: option do case $option in d) basetime=$OPTARG;; i) prefix=$OPTARG;; p) blacklist_path=$OPTARG;; esac done echo $basetime echo $prefix echo $blacklist_path #----------------------------------------------------------------------- # First date available for prefix* files #----------------------------------------------------------------------- outname=${prefix} first=1850010100 if [[ ${prefix} = "blacklist_ssa" ]] ; then outname=blacklist_ssa fi if [[ ${prefix} = "amv_p_and_tracking_error" ]] ; then outname=amv_p_and_tracking_error fi echo 'first file available for ' ${prefix} ' : ' ${first} #----------------------------------------------------------------------- # Check the current date #----------------------------------------------------------------------- if [[ $basetime -lt $first ]] ; then echo "$0: no data selection files before date $first" exit 1 fi #----------------------------------------------------------------------- # Ok get the right file #----------------------------------------------------------------------- for i in $( ls -1 $blacklist_path | grep $prefix ) ; do if [[ $i = $prefix'_'$basetime ]] ; then set -x cp $blacklist_path/$i $outname chmod u+w $outname exit 0 fi if [[ $i > $prefix'_'$basetime ]] ; then set -x cp $blacklist_path/$last $outname chmod u+w $outname exit 0 fi last=$i done echo "Using latest file: $last" echo $i set -x cp $blacklist_path/$last $outname chmod u+w $outname exit 0 _eof_get_nearest_infile_date } JCAT2() { cat >$TMPDIR/getgrb <<\_eof_getgrb : #include $EXPVER/include/getgrb ($EXPVER/ifstraj_999.ecf) #getgrb version: 20120305 set -euxv #======================================================================= # # Script getgrb # ------------- # # Purpose : Retrieve GRIB data from MARS # ------- # # Usage : getgrb [-c class] [-x expver] [-t type] # ----- [-d date] [-h hour] [-p step] # [-s shml] [-g ggsfc] [-u ggml] # [-S shsppt ] # [-q qtype] [-o o3type] [-r stream] # [-a gptosp4 ] [-m member] [-w anoffset] [-T trajnofdb] # # Parameters : -c class - default $CLASS # ---------- -x expver - default $EXPVER # -t type - default an # -d date - yyyymmdd (default $BASETIME(1:8)) # -h hour - hh (default $BASETIME(9:10)) # -p step - default 0 # -s shml - output upper air spectral file # (default SPECGRIB) # -S shsppt - output spectral file for SPPT scheme # ( SPECSPPTGRIB ) # -g ggsfc - output surface gridpoint file # (default SFCGRIB) # -W Wantggsfc - true: ggsfc to be retrieved # -u ggml - output upper air gridpoint file # (default UPPGRIB) # -q qtype - 'grid' (default), or 'both', for q on # both upper air gridpoint and spectral # files # -o o3type - 'none' (default), 'grid' or 'both', for # ozone on both upper air gridpoint and # spectral files # -r stream - default $STREAM # -a gptosp4 - force gptosp to 4 processors in ifstraj (default false) # # -m epsmember # -w anoffset for long window 4dvar to supply # the distance from window end of the given analysis # -T trajnofdb true if intermediate ifstraj tasks were writing to grib files and not to FDB #======================================================================= set +v : #include $EXPVER/include/cycle_times ($EXPVER/include/getgrb) #======================================================================= # # cycle_times # ----------- # # Purpose : Define variables control the date and times for # ------- cycling of the assimilation window. # #======================================================================= IFSMODE=${IFSMODE:=none} PERIOD_4D=${PERIOD_4D:=-999999} WINDOW_LENGTH_4D=${WINDOW_LENGTH_4D:=-999999} WINDOW_OFFSET_4D=${WINDOW_OFFSET_4D:=-999999} REINIWINDOW_LENGTH_4D=${REINIWINDOW_LENGTH_4D:=-999999} NUMINI=${_NUMINI_} PERIOD_BG=${PERIOD_BG:=-999999} echo "NUMINI=$NUMINI" # The variables below are derived from WINDOW_LENGTH_4D and WINDOW_OFFSET_4D # later in this file if WINDOW_LENGTH_4D is specified WINDOW_START=-999999 WINDOW_END=-999999 BKG_TIME=-999999 NXBGTIME=-999999 FIRST_AN=-999999 LAST_AN=-999999 STEP_AN=-999999 NO6HTSL=-999999 #======================================================================= # Determine appropriate value for PERIOD_AN and PERIOD_OBS #======================================================================= PERIOD_AN_ATM=${PERIOD_AN_ATM:=6} PERIOD_AN_SFC=${PERIOD_AN_SFC:=6} LPERIOD_AN_SFC=${LPERIOD_AN_SFC:=false} # Set PERIOD_AN, using $LPERIOD_AN_SFC to select between # surface-related tasks and the atmospheric 4d-var if [[ $LPERIOD_AN_SFC = true ]] ; then PERIOD_AN=${PERIOD_AN_SFC} else PERIOD_AN=${PERIOD_AN_ATM} fi # Allow to override this via ecFlow variable - this enables it to be # optionally relaxed from 6 to 12 in the archiving family for CAMS # experiments if you don't need to archive the 06Z and 18Z analyses # (which aren't used to initialise forecasts in a 03-15 window). PERIOD_AN=${_PERIOD_AN_} echo "PERIOD_AN=$PERIOD_AN" PERIOD_OBS=6 #======================================================================= # Some basic prints #======================================================================= echo "BASETIME=$BASETIME" echo "PERIOD_4D=$PERIOD_4D" echo "WINDOW_LENGTH_4D=$WINDOW_LENGTH_4D" echo "WINDOW_OFFSET_4D=$WINDOW_OFFSET_4D" if [[ $WINDOW_LENGTH_4D -gt 0 ]] ; then WINDOW_CUTOFF_4D=$(( WINDOW_LENGTH_4D - WINDOW_OFFSET_4D )) else WINDOW_CUTOFF_4D=-999999 fi echo "WINDOW_CUTOFF_4D=$WINDOW_CUTOFF_4D" echo "PERIOD_BG=$PERIOD_BG" #======================================================================= # Checks #======================================================================= if [[ $WINDOW_OFFSET_4D -gt $WINDOW_LENGTH_4D ]] ; then echo "Window offset is longer than assimilation window" exit 1 fi if [[ $PERIOD_BG -lt $PERIOD_4D ]]; then case $IFSMODE in 4d_inc|3d_fgat|early_delivery) echo "Background cannot be more recent than previous cycle" exit 1 ;; esac fi #======================================================================= # Determine correct BASETIME #======================================================================= INIBEGINDATE=${_INIBEGINDATE_} _inihour=${_INIBEGINHOUR_} INIBEGINHOUR=$(printf %02d $_inihour) if [[ $FAMILY = */make/* || $FAMILY = */inicond/* ]] ; then if [[ $FAMILY = */make/* ]] ; then CYCLETIME=$(echo ${INIBEGINDATE}${INIBEGINHOUR} | cut -c1-10) fi back=$(( (NUMINI+1) * PERIOD_4D )) CYCLETIME=$( newdate $CYCLETIME -$back ) fi echo "CYCLETIME=$CYCLETIME" #======================================================================= # Split outer loop #======================================================================= NSPLIT4DWIN=${NSPLIT4DWIN:=0} NSUBWIN4D=0 SUBWIN_OFFSET=0 LSPLIT4D_SPINUP=false if [[ $NSPLIT4DWIN -gt 0 ]] ; then subtime=$CYCLETIME isubwin=1 while [[ $isubwin -le $NSPLIT4DWIN ]] ; do if [[ $subtime -ge $INITIME ]] ; then NSUBWIN4D=$isubwin fi isubwin=$((isubwin + 1)) subtime=$(newdate $subtime -$WINDOW_LENGTH_4D) done [[ $NSUBWIN4D -lt $NSPLIT4DWIN ]] && LSPLIT4D_SPINUP=true [[ $NSUBWIN4D -gt 1 ]] && SUBWIN_OFFSET=$(( WINDOW_LENGTH_4D * (NSUBWIN4D-1) )) fi echo "NSPLIT4DWIN=$NSPLIT4DWIN" echo "NSUBWIN4D=$NSUBWIN4D" echo "SUBWIN_OFFSET=$SUBWIN_OFFSET" #======================================================================= # Beginning and end of the current window #======================================================================= if [[ $WINDOW_LENGTH_4D -gt 0 ]] ; then WINDOW_START=$( newdate $CYCLETIME -$WINDOW_OFFSET_4D ) WINDOW_END=$( newdate $CYCLETIME $WINDOW_CUTOFF_4D ) echo "WINDOW_START=$WINDOW_START" echo "WINDOW_END=$WINDOW_END" #======================================================================= # Background #======================================================================= BKG_STEP=${STEP_BG:=3} if [[ $REINITIALIZE = true && $REINI_NOT_ED = true ]] ; then BKG_STEP=$(( BKG_STEP + REINIOFFSET - PERIOD_AN )) fi echo "BKG_STEP=$BKG_STEP" BKG_TIME=$( newdate $WINDOW_START -$BKG_STEP ) echo "BKG_TIME=$BKG_TIME" if [[ $REINITIALIZE = true || $LEDFAMILY = true ]] ; then WINDOW_LENGTH_BG=$REINIWINDOW_LENGTH_4D else WINDOW_LENGTH_BG=$WINDOW_LENGTH_4D fi echo "WINDOW_LENGTH_BG=$WINDOW_LENGTH_BG" BKG_OFFSET=$(( WINDOW_LENGTH_BG - PERIOD_BG + BKG_STEP )) echo "BKG_OFFSET=$BKG_OFFSET" # Time for next background (ie start of cycling fc) NXBGTIME=$( newdate $WINDOW_END -$BKG_OFFSET ) # EH: Below is for ED 8h window - need to correct in a general way if [[ $LEDFAMILY = true ]] ; then NXBGTIME=$CYCLETIME fi echo "NXBGTIME=$NXBGTIME" #======================================================================= # Find analysis (synoptic) times #======================================================================= hh="$(substring $WINDOW_START 9 10)" # sh step=$(( 10#$hh % PERIOD_AN )) [[ $step -gt 0 ]] && step=$(( PERIOD_AN - step )) FIRST_AN=$( newdate $WINDOW_START $step ) if [[ $CERA_OUT = true && $FIRST_AN = $WINDOW_START ]] ; then # Until overlapping windows are fully implemented, cannot archive analysis at start of window FIRST_AN=$( newdate $WINDOW_START +$PERIOD_AN) fi hh="$(substring $WINDOW_END 9 10)" step=$(( 10#$hh % PERIOD_AN )) LAST_AN=$( newdate $WINDOW_END -$step) if [[ $FAMILY = */make/* || $FAMILY = */inicond/* ]] ; then FIRST_AN=$NXBGTIME LAST_AN=$NXBGTIME fi STEP_AN=$( datediff -h $FIRST_AN $WINDOW_START ) echo "FIRST_AN=$FIRST_AN" echo "LAST_AN=$LAST_AN" echo "STEP_AN=$STEP_AN" hh_start=$( substring $WINDOW_START 9 10 ) echo "hh_start=$hh_start" case $hh_start in 03|09|15|21) NO6HTSL=$(( WINDOW_LENGTH_4D / PERIOD_OBS )) ;; *) NO6HTSL=$(( WINDOW_LENGTH_4D / PERIOD_OBS + 1 )) esac echo "NO6HTSL=$NO6HTSL" ## Wave model assimilation ## Enforce 6 hourly wave assimilation wam_assimil_period=${WAM_ASSIMIL_PERIOD:=6} if [[ $wam_assimil_period -lt 6 ]] ; then if [[ $FAMILY = */make/* || $FAMILY = */inicond/* ]] ; then anstart=$NXBGTIME else anstart=$WINDOW_START fi FIRST_AN_WAVE=$( newdate $anstart $wam_assimil_period ) PERIOD_AN_WAVE=$wam_assimil_period LAST_AN_WAVE=$WINDOW_END else FIRST_AN_WAVE=$FIRST_AN PERIOD_AN_WAVE=$PERIOD_AN LAST_AN_WAVE=$LAST_AN fi fi #======================================================================= # End cycle_times #======================================================================= WINDOW_LENGTH_4D_TOT=$(( WINDOW_LENGTH_4D + SUBWIN_OFFSET )) echo "WINDOW_LENGTH_4D_TOT=$WINDOW_LENGTH_4D_TOT" #======================================================================= # Things that do not depend on current cycle time #======================================================================= DATE_OPER_DCDA=2004062900 DATE_OPER_ENDA=2010062200 DATE_OPER_LWDA=2013111900 ANOFFSET_TYPES='4i|4v|an|fc|ef|ea|me|em|es|ses' WINDOW_LENGTH_4D_TOT_OPER=12 EDA_WINDOW_LENGTH_4D_TOT_OPER=12 EDA_WINDOW_LENGTH_4D=${EDA_WINDOW_LENGTH_4D:=12} INI_WINDOW_LENGTH_4D=${INI_WINDOW_LENGTH_4D:=12} EDACLASS=${EDACLASS:=od} EDAEXPVER=${EDAEXPVER:=0001} LEDA_ERRORS_IN=${LEDA_ERRORS_IN:=true} if [[ $LEDA_ERRORS_IN = true && $EDACLASS = od && $EDAEXPVER = 0001 && $BASETIME -ge $DATE_OPER_LWDA ]] ; then if [[ $LEVELS = 137 ]] ; then LJB_EDA=true fi LSES_EDA=true fi #======================================================================= # Setting for archiving via NPOSTS argument in NAMCT0, used by sekf_sm and ifstraj and ansfc #======================================================================= PPSTEP_INC=3 if [[ $PERIOD_AN -lt 3 ]] ; then PPSTEP_INC=$PERIOD_AN fi echo "PPSTEP_INC=$PPSTEP_INC" #end-of-include $EXPVER/include/cycle_times ($EXPVER/include/getgrb) USAGE1="$0 [-c class] [-x expver] [-t type] [-d date] [-h hour]" USAGE2=" [-p step] [-s shml] [-S shsppt ] [-P shspp] [-g ggsfc] [-W Wantggsfc] [-u ggml] [-q qtype]" USAGE3=" [-o o3type] [-r stream] [-a gptosp4] [-m epsmember] [-w anoffset] [-T trajnofdb] " errflg=0 class=$CLASS expver=$EXPVER type=an member=0 date=$(echo $BASETIME | cut -c 1-8) hour=$(echo $BASETIME | cut -c 9-10) step=0 shml=SPECGRIB shsppt=SPECSPPTGRIB shspp=SPECSPPGRIB ggsfc=SFCGRIB ggml=UPPGRIB qtype=grid anoffset=-99 database=${database:=""} if [[ $LOZONE = true ]] ; then o3type=grid else o3type=none fi stream=$STREAM gptosp4=false gtype=${GTYPE} resol=${RESOL} levels=${LEVELS} Wantggsfc=true trajnofdb=false while getopts c:x:t:d:h:p:s:S:P:g:W:u:q:o:r:a:m:w:R:L:G:T: option do case $option in c) class=$OPTARG;; x) expver=$OPTARG;; t) type=$OPTARG;; d) date=$OPTARG;; h) hour=$OPTARG;; p) step=$OPTARG;; s) shml=$OPTARG;; S) shsppt=$OPTARG;; P) shspp=$OPTARG;; g) ggsfc=$OPTARG;; W) Wantggsfc=$OPTARG;; u) ggml=$OPTARG;; q) qtype=$OPTARG;; o) o3type=$OPTARG;; r) stream=$OPTARG;; a) gptosp4=$OPTARG;; m) member=$OPTARG;; w) anoffset=$OPTARG;; R) resol=$OPTARG;; L) levels=$OPTARG;; G) gtype=$OPTARG;; T) trajnofdb=$OPTARG;; \?) errflg=1;; esac done #======================================================================= # Check parameters #======================================================================= if [[ $errflg -ne 0 ]] ; then echo $USAGE1 >&2 echo $USAGE2 >&2 echo $USAGE3 >&2 exit 1 fi #======================================================================= # Setup COMPO script and namelist variables #======================================================================= if [[ $LMACC = true ]] ; then . compo_setup fi #======================================================================= # Invariant fields should always come from type=an, or the current # step of a 4DVAR assimilation #======================================================================= if [[ $type = fg ]] ; then adatehour=$(newdate $date$hour -$step) adate=$(echo $adatehour | cut -c 1-8) ahour=$(echo $adatehour | cut -c 9-10) else adate=$date ahour=$hour fi if [[ $type = 4v ]] ; then atype=4v astep=$step else atype=an astep=0 fi if [[ "$WAVE" = "yes" ]] ; then chnk="/$chnk" else chnk="" fi if [[ ${MONITOR_ONLY:=false} = true ]] ; then sh2="" else sh2="/$sh2" fi #======================================================================= # Forecast surface fields #======================================================================= if [[ $type = fc || $type = 4v ]] ; then fsfc="/${u10n}/${v10n}/${fsr}/${flsr}/${t2}/${d2}/${u10}/${v10}${sh2}" else fsfc="" fi #======================================================================= # In case of external ocean current #======================================================================= LECURR=${LECURR:=false} INIECURR=${INIECURR:=false} lcurr=$LECURR [[ $BASETIME -lt $INITIME && $INIECURR = false ]] && lcurr=false if [[ $lcurr = true ]] ; then if [[ ${_NEMOCOUPLED_} = 0 ]] ; then ocurr="/${ucurr}/${vcurr}" else ocurr="" fi else ocurr="" fi ENDANENS=${ENDANENS:=0} LFCDEPAR=${LFCDEPAR:=false} NUPTRA_RANGE=${NUPTRA_RANGE:=0} numstr="" if [[ $type = pf || $ENDANENS -gt 0 ]] ; then numstr="number=$member," fi if [[ $LFCDEPAR = true ]] ; then numstr="number=$NUPTRA_RANGE," stream=ELDA fi #======================================================================= # In case of ozone #======================================================================= o3ml="" if [[ $o3type = grid || $o3type = both ]] ; then o3ml="/$o3" fi #======================================================================= # nonhydrostatic #======================================================================= nhvars="" LNHDYN=${LNHDYN:-false} if [[ $LNHDYN = true ]] ; then nhvars="/118/119" fi #======================================================================= # pattern of Stochastically Pert. Parameterisation Tendencies (SPPT) #======================================================================= get_sppt=${GET_SPPT:-false} spptRequest="" if [[ $get_sppt = true ]]; then nscales=${SDT_NSCALES:-3} igribsppt=1 spptparams=${igribsppt}.213 ii=1 while [[ $ii -le $(( nscales - 1 )) ]] ; do spptparams=$spptparams" "$(( igribsppt + ii )).213 (( ii++ )) done spptexpinifam="" spptparams=$( echo $spptparams|sed -e "s/ /\//g" ) spptRequest="retrieve,repres=sh,levtype=ml,levelist=1,param=${spptparams},target=\"${shsppt}\"." fi #======================================================================= # pattern of Stochastically Pert. Parameters (SPP) #======================================================================= get_spp=${GET_SPP:-false} sppRequest="" if [[ $get_spp = true ]]; then npatterns=20 # get this from prepIFS igribspp=101 sppparams=${igribspp}.213 ii=1 while [[ $ii -le $(( npatterns - 1 )) ]] ; do sppparams=$sppparams" "$(( igribspp + ii )).213 (( ii++ )) done sppexpinifam="" sppparams=$( echo $sppparams|sed -e "s/ /\//g" ) sppRequest="retrieve,repres=sh,levtype=ml,levelist=1,param=${sppparams},target=\"${shspp}_[param]\"." fi #======================================================================= # aquaplanet #======================================================================= aqua="" LAQUA=${LAQUA:-false} if [[ $LAQUA = true ]] ; then aqua="_flat" fi #======================================================================= # lakes #======================================================================= lake_prog="" lake_inv="" LLAKE=${LLAKE:=true} if [[ $LLAKE = true ]] ; then lake_prog="/$lmlt/$lmld/$lblt/$ltlt/$lshf/$lict/$licd" lake_inv="/$cl/$dl" fi #======================================================================= # In case of atmospheric composition #======================================================================= composfc="" compoml="" if [[ $LMACC = true ]] ; then # retrieve from fdb # compoml composfc retrieved together with other ml or sfc fields # naj setup of compoml could go to compo_setup if [[ $type = 4v || ( $LOOPS = true && $type = an && $anoffset = $WINDOW_LENGTH_4D ) ]] ; then # no output of surface fluxes, retrieved from type fc (written in compo_flux) # fx fields are retrieved from type fc in separate mars request compoml=${ghg_ml}${aero_ml_init}${chem_ml_in} composfc= composfc_fx=${ghg_sfc}${ghg_bfascoef}${aero_sfc}${chem_sfc_in}${inj_sfc} compo3D_fx=${compo_3D} elif [[ $type = fc ]]; then # Even though fx fields from compo_flux are also type fc in the FDB, # it's possible that the other fields are coming from the MARS archive # instead (e.g. during the first cycle with MAKE_IDATA=false). # Since a single RETRIEVE can only handle one source (MARS or FDB), # retrieve the flux fields in a separate request. (In the majority # of cases, everything is in the FDB and one request would suffice, # but it's easier to unconditionally do two than to identify which # case we're in here. See IFS-1058.) compoml=${ghg_ml}${aero_ml_init}${chem_ml_in} composfc="" composfc_fx=${ghg_sfc}${aero_sfc}${ghg_bfascoef}${chem_sfc_in}${inj_sfc} compo3D_fx=${compo_3D} if [[ ${MONITOR_ONLY:-false} = true && $LCHEM = true ]] ; then compoml=${ghg_ml}${aero_ml_init}${chem_ml_arch} chem_ml_missing=${chem_ml_in} for par in $(echo $chem_ml_arch | sed "s@/@ @g"); do chem_ml_missing=`echo ${chem_ml_missing} | sed "s@${par}/@@"` done compoml_missing=${chem_ml_missing#/} fi if [[ ${MONITOR_ONLY:-false} = true && $LGHG = true ]] ; then compoml="" compoml_missing=${ghg_ml#/} fi else compoml=${ghg_ml}${aero_ml_init}${chem_ml_in}${compo_3D} composfc=${ghg_sfc}${aero_sfc}${chem_sfc_in}${ghg_bfascoef}${inj_sfc} composfc_fx="" compo3D_fx="" fi fi # This anoffsetstr may get overridden after accounting for REINITIALIZE; # but is needed even when that is set for the COMPO case anoffsetstr="" if [[ $stream = LWDA || $stream = ELDA ]] ; then if [[ $type = @($ANOFFSET_TYPES)|| $atype = @($ANOFFSET_TYPES) ]] ; then if [[ $anoffset = -99 ]] ; then echo 'anoffset must be supplied for types ' $ANOFFSET_TYPES exit 1 fi fi if [[ $type = @($ANOFFSET_TYPES) ]] ; then anoffsetstr="anoffset=$anoffset," else anoffsetstr="" fi fi if [[ $Wantggsfc = true && $LMACC = true ]] ; then type_compo=fc # retrieve chem fields from different type than 4v # This needs to be done BEFORE overriding things for REINITIALIZE, as they fields # always come from EXPVER's FDB, where compo_flux put them. if [[ -n $composfc_fx ]]; then $MARS_CMD < _ggsfc_new mv _ggsfc_new _ggsfc fi if [[ $WAVE == yes ]] ; then # WAVE is yes for emos ; sanity check ; SD-17508 grib_ls _ggsfc | grep chnk || exit 1 # fail asap when charnok is not produced fi fi # Wantggsfc #0 # gabor-cams if [[ $type = 4v && $trajnofdb = true ]] ; then typeset -Z6 steph steph=$step grib_copy -w level!=1000,paramId!=129 $WDIR/vardir/ICMSH${EXPVER}+$steph _shml cp $WDIR/vardir/ICMUA${EXPVER}+$steph _ggml ggqo3file="_ggml" ggmlcldfile="_ggml" else $MARS_CMD <> $ggqo3file fi if [[ $LMACC = true && -n $compoml && ${LCOMPO_FIX_NEG_IC:-false} = true ]] ; then neg_check_paramids=${ghg_nam//,//}${aero_nam//,//} neg_check_paramids=${neg_check_paramids%/}${chem_ml_in} neg_tracer_paramids=$(grib_get -p paramId,min -w paramId=${neg_check_paramids#/} $ggqo3file | awk '$2~/^-/ { print $1 }' | sort -u) neg_tracer_paramids=${neg_tracer_paramids//[[:space:]]//} if [[ -n $neg_tracer_paramids ]]; then echo "WARNING! NEGATIVE TRACER VALUES FOUND in $neg_tracer_paramids, CORRECTING." grib_ls -p paramId,level,min,avg,max -w paramId=$neg_tracer_paramids $ggqo3file | awk '$3~/^-/' $MARS_CMD <<**EOF** READ, FIELDSET=broken, PARAM=$neg_tracer_paramids, source=$ggqo3file COMPUTE, FORMULA="MAX(broken,10.0^-25)", TARGET="_ggqo3.fixed.tmp" **EOF** grib_copy -w paramId!=$neg_tracer_paramids $ggqo3file _ggqo3.bypass.tmp mv _ggqo3.bypass.tmp $ggqo3file cat _ggqo3.fixed.tmp >> $ggqo3file rm _ggqo3.fixed.tmp if grib_get -p min -w paramId=${neg_check_paramids#/} $ggqo3file | grep ^-; then echo "ERROR! FAILED TO CORRECT NEGATIVE TRACER VALUES!" exit 1 fi fi fi if [[ $LMACC = true ]] ; then #naj: this is silly but stil needed until the model calculates the total aerosol itself (is not having 210048 it as NREQIN=1 an other option) if [[ -n $aero_ml_init ]]; then aeronam=${aero_ml_init_nam} # Re-calcluate total aerosol mixing ratio # - this will need modifying for DUALCV to split bins between aersm and aerlg aeroml_for_total=${aeronam} aeroml_for_total=${aeroml_for_total//210048,/} # not existing total aeroml_for_total=${aeroml_for_total//21001[25],/} # exclude Sulphate_SO2 and Volc_SO2 aeroml_for_total=${aeroml_for_total//21202[0-9],/} # } not GLOMAP numbers, aeroml_for_total=${aeroml_for_total//21203[0-5],/} # } precursors or water aeroml_for_total=${aeroml_for_total%,} aeroml_for_total=${aeroml_for_total//,/ } # Splitting fields first is more efficient than having MARS search the # whole file individually for each grib_copy -w paramId=${aeroml_for_total// //} $ggqo3file "_ggqo3_aero[paramId]" $MARS_CMD <<**EOF** $(for p in $aeroml_for_total; do echo "read, fieldset=param$p, source=\"_ggqo3_aero$p\""; done) compute, formula = "param${aeroml_for_total// /+param}", accuracy = av, target = "_ggqo3_totaer" **EOF** grib_set -s paramId=210048 _ggqo3_totaer{,_modified} cat _ggqo3_totaer_modified >>$ggqo3file rm -f _ggqo3_totaer{,_modified} _ggqo3_aero* fi fi #======================================================================== climdir=$XDATA/climate/$CLIMVERSION/${resol}${gtype} if [[ $Wantggsfc = true ]] ; then #Wantggsfc #1 zz="$z/" if [[ $FSFAMILY != /fc ]] ;then zz="" fi if [[ $type = @(pf|cf) ]] ; then clim_alb="alb_int aluvp_int aluvd_int alnip_int alnid_int aluvi_int aluvv_int aluvg_int alnii_int alniv_int alnig_int lail_int laih_int" #============================================ # Use LAI/albedo 10-day climatology LCLIM10D=${LCLIM10D:=false} # Use LAI/albedo 10-day NRT data LVEGNRT=${LVEGNRT:=false} nrtdata=${nrtdata:=NONE} NRTMETHOD=${NRTMETHOD:=DIRECT} #============================================ if [[ $LCLIM10D = true ]] ; then get_10day_alb_lai -t $date$hour -r ${resol} -n $LVEGNRT -d ${nrtdata} -m ${NRTMETHOD} timedecadeint -d $date$hour -c 174 -o alb_int -i month_alb timedecadeint -d $date$hour -c 15 -o aluvp_int -i month_aluvp timedecadeint -d $date$hour -c 16 -o aluvd_int -i month_aluvd timedecadeint -d $date$hour -c 17 -o alnip_int -i month_alnip timedecadeint -d $date$hour -c 18 -o alnid_int -i month_alnid timedecadeint -d $date$hour -c 210186 -o aluvi_int -i month_aluvi timedecadeint -d $date$hour -c 210187 -o aluvv_int -i month_aluvv timedecadeint -d $date$hour -c 210188 -o aluvg_int -i month_aluvg timedecadeint -d $date$hour -c 210189 -o alnii_int -i month_alnii timedecadeint -d $date$hour -c 210190 -o alniv_int -i month_alniv timedecadeint -d $date$hour -c 210191 -o alnig_int -i month_alnig timedecadeint -d $date$hour -c 66 -o lail_int -i month_lail timedecadeint -d $date$hour -c 67 -o laih_int -i month_laih else #no 10-day CLIM ,LCLIM10D false #============================================ timeint -d $date$hour -c 174 -o alb_int -i $climdir/month_alb timeint -d $date$hour -c 15 -o aluvp_int -i $climdir/month_aluvp timeint -d $date$hour -c 16 -o aluvd_int -i $climdir/month_aluvd timeint -d $date$hour -c 17 -o alnip_int -i $climdir/month_alnip timeint -d $date$hour -c 18 -o alnid_int -i $climdir/month_alnid timeint -d $date$hour -c 210186 -o aluvi_int -i $climdir/month_aluvi timeint -d $date$hour -c 210187 -o aluvv_int -i $climdir/month_aluvv timeint -d $date$hour -c 210188 -o aluvg_int -i $climdir/month_aluvg timeint -d $date$hour -c 210189 -o alnii_int -i $climdir/month_alnii timeint -d $date$hour -c 210190 -o alniv_int -i $climdir/month_alniv timeint -d $date$hour -c 210191 -o alnig_int -i $climdir/month_alnig timeint -d $date$hour -c 66 -o lail_int -i $climdir/month_lail timeint -d $date$hour -c 67 -o laih_int -i $climdir/month_laih fi grib_copy -w paramId=26 $climdir/clake lake_fraction #gabor-cams ggsfc_inv_file="_ggsfc_inv" cat $climdir/sfc $clim_alb \ $climdir/sdfor $climdir/slt $climdir/lsmoro \ lake_fraction ${climdir}/lakedl > $ggsfc_inv_file else if [[ $stream = LWDA || $stream = ELDA ]] ; then anoffsetstr="anoffset=$anoffset," else anoffsetstr="" fi #gabor-cams if [[ $atype = 4v && $trajnofdb = true ]] ; then ggsfc_inv_file="_ggsfc" else ggsfc_inv_file="_ggsfc_inv" $MARS_CMD <> _ggsfc rm -f _ggcomposfc_fx # test if _ggcomposfc has same resolution as _ggsfc gridkeys="typeOfGrid,Nj,numberOfValues" tmpfile=test_grid grib_get -p $gridkeys _ggsfc > ${tmpfile} if (( $(cat $tmpfile | uniq | wc -l) != 1 )) ; then grib_get -p ${gridkeys},paramId _ggsfc echo Abort : fields do not seem to be on the same grid. #exit 1 fi rm -f $tmpfile fi if [[ -n $compo3D_fx ]] ; then cat _ggcompoflx3d_fx >> $ggqo3file rm -f _ggcompoflx3d_fx fi fi fi # Wantggsfc #1 rm -f _spec_oro if [[ $LAQUA = true ]] ; then grib_set -d 0.0 $climdir/sporog _spec_oro else ln -s $climdir/sporog _spec_oro fi if [[ $Wantggsfc = true ]] ; then # Watnggsfc #2 if [[ ${LSM_ORIG:-yes} = yes ]]; then grib_set -w edition=2 -s edition=1 $climdir/lsmoro lsmoro_grib1 grib_copy -w shortName=lsm lsmoro_grib1 lsm_grib1 grib_copy -w shortName!=lsm _ggsfc _ggsfc.tmp if [[ $LLAKE = true && ${LAKECL_ORIG:-no} = yes ]] ; then grib_set -w edition=2 -s edition=1 $climdir/clake clake_grib1 grib_copy -w shortName=dl $ggsfc_inv_file _ggsfc_inv.dl grib_copy -w shortName!=cl,shortName!=dl $ggsfc_inv_file _ggsfc_inv.tmp1 cat _ggsfc_inv.tmp1 clake_grib1 _ggsfc_inv.dl > _ggsfc_inv.tmp2 cat lsm_grib1 _ggsfc.tmp _ggsfc_inv.tmp2 > $ggsfc else cat lsm_grib1 _ggsfc.tmp ${ggsfc_inv_file} > $ggsfc fi else # gabor-cams if [[ $ggsfc_inv_file = "_ggsfc" ]] ; then mv _ggsfc $ggsfc else cat _ggsfc $ggsfc_inv_file > $ggsfc fi fi fi # Wantggsfc #2 #gabor-cams if [[ $ggqo3file = $ggmlcldfile ]] ; then mv $ggqo3file $ggml else cat $ggqo3file $ggmlcldfile > $ggml fi if [[ $gtype = l* ]] ; then lflag="-l" else lflag="" fi if [[ $qtype = both || $o3type = both ]] ; then if [[ $gptosp4 = true ]] ; then # force gptosp to use 4 processors gptosp -T $RESOL -g $ggqo3file -S _spqo3 $lflag -P 4 || exit 1 else run_parallel -s $BINS/gptosp.exe -T $RESOL -P 1 -g $ggqo3file -S _spqo3 $lflag || exit 1 fi cat _shml _spec_oro _spqo3 > $shml else cat _shml _spec_oro > $shml fi rm -f _ggsfc _shml $ggqo3file _ggqo3_iccompo _ggml_cloud _ggsfc_inv _spec_oro _spqo3 rm -f _ggsfc_sh2 _ggsfc_new _ggsfc_sh2_out ggsfc_sh20 exit _eof_getgrb cat >$TMPDIR/get_10day_alb_lai <<\_eof_get_10day_alb_lai #include $EXPVER/include/get_10day_alb_lai ($EXPVER/ifstraj_999.ecf) #!/bin/ksh #get_10day_alb_lai #============================================= # # Script get_10day_alb_lai # ------------------ # # extract 10-day climate/NRT LAI and albedo data # # Usage : get_10day_alb_lai # # Parameters : [-n LVEGNRT ] [ -t basetime ] [-r resol] [-d nrtdata ] [-m NRTMETHOD ] # # Externals: # --------- # # Author : Original:S. Boussetta (ECMWF) Dec 2013 # ---------- # #============================================= set -eux #Default BASETIME=1979010100 LVEGNRT=false nrtdata=NONE resol=213 NRTMETHOD=DIRECT errflg=0 USAGE="Usage: get_10day_alb_lai [-n LVEGNRT ] [ -t basetime ] [-r resol] [-d nrtdata ] [-m NRTMETHOD ]" while getopts n:t:r:d:m: option do case $option in n) LVEGNRT=$OPTARG;; t) BASETIME=$OPTARG;; r) resol=$OPTARG;; d) nrtdata=$OPTARG;; m) NRTMETHOD=$OPTARG;; \?) errflg=1;; esac done if [ $errflg -ne 0 ] ; then echo $USAGE >&2 exit 2 fi yyyy=$(echo $BASETIME | cut -c 1-4) DATASOURCE=GEOV1 LAICLM="/home/nag/work/VEG_new/CLIM/${DATASOURCE}/LAI/${resol}/hilo_std" ALBCLMD="/home/nag/work/VEG_new/CLIM/${DATASOURCE}/albedo/${resol}/ALBH" ALDCLMD="/home/nag/work/VEG_new/CLIM/${DATASOURCE}/albedo/${resol}/ALDH" lailfstart=${LAICLM}/${DATASOURCE}_lail_ laihfstart=${LAICLM}/${DATASOURCE}_laih_ laifend=_CLIM_${resol}.grb if [[ $DATASOURCE = MODIS ]] ; then albdcfstart=${ALBCLMD}/${DATASOURCE}_albd_ alnidcfstart=${ALBCLMD}/${DATASOURCE}_alnid_ aluvdcfstart=${ALBCLMD}/${DATASOURCE}_aluvd_ alnipcfstart=${ALDCLMD}/${DATASOURCE}_alnip_ aluvpcfstart=${ALDCLMD}/${DATASOURCE}_aluvp_ alcfend=_CLIM_g${resol}.grb else # DATASOURCE is GEOV1 albdcfstart=${ALBCLMD}/g2_BIOPAR_ALBH_BB_SF_1999_2012_ alnidcfstart=${ALBCLMD}/g2_BIOPAR_ALBH_NI_SF_1999_2012_ aluvdcfstart=${ALBCLMD}/g2_BIOPAR_ALBH_VI_SF_1999_2012_ alnipcfstart=${ALDCLMD}/g2_BIOPAR_ALDH_NI_SF_1999_2012_ aluvpcfstart=${ALDCLMD}/g2_BIOPAR_ALDH_VI_SF_1999_2012_ alcfend=_CLIM_VGT_V1.3_${resol}.grb fi yyyy0=$yyyy ###GEOV1 NRT are available 1999-2012### set -A mm "12" "01" "02" "03" "04" "05" "06" "07" "08" "09" "10" "11" "12" "01" set -A dd "99" "05" "15" "25" "-2" j=1 while [ $j -le 12 ] ; do k=0 while [ $k -le 4 ] ; do yyyy=$yyyy0 if [ ${mm[j]} = "01" -a ${dd[k]} = "99" ]; then if [ $yyyy0 = 1999 ] ; then yyyy=$yyyy0 else yyyy=$(( $yyyy0 - 1 )) fi tagname1=${yyyy}${mm[j-1]}${dd[3]} tagname2=${mm[j-1]}${dd[3]} elif [ ${mm[j]} = "12" -a ${dd[k]} = "-2" ]; then if [ $yyyy0 = 2012 ] ; then yyyy=$yyyy0 else yyyy=$(( $yyyy0 + 1 )) fi tagname1=${yyyy}${mm[j+1]}${dd[1]} tagname2=${mm[j+1]}${dd[1]} elif [ ${dd[k]} = "99" -o ${dd[k]} = "-2" ]; then k=$(expr $k + 1 ) continue else tagname1=${yyyy}${mm[j]}${dd[k]} tagname2=${mm[j]}${dd[k]} fi cp ${lailfstart}${tagname2}${laifend} clim_lail_${tagname2} cp ${laihfstart}${tagname2}${laifend} clim_laih_${tagname2} cp ${albdcfstart}${tagname2}${alcfend} clim_alb_${tagname2} cp ${alnidcfstart}${tagname2}${alcfend} clim_alnid_${tagname2} cp ${aluvdcfstart}${tagname2}${alcfend} clim_aluvd_${tagname2} cp ${alnipcfstart}${tagname2}${alcfend} clim_alnip_${tagname2} cp ${aluvpcfstart}${tagname2}${alcfend} clim_aluvp_${tagname2} grib_set -s dataDate=${tagname1} clim_lail_${tagname2} clim_lail_${tagname1} ; rm -rf clim_lail_${tagname2} grib_set -s dataDate=${tagname1} clim_laih_${tagname2} clim_laih_${tagname1} ; rm -rf clim_laih_${tagname2} grib_set -s dataDate=${tagname1} clim_alb_${tagname2} clim_alb_${tagname1} ; rm -rf clim_alb_${tagname2} grib_set -s dataDate=${tagname1} clim_alnid_${tagname2} clim_alnid_${tagname1} ; rm -rf clim_alnid_${tagname2} grib_set -s dataDate=${tagname1} clim_aluvd_${tagname2} clim_aluvd_${tagname1} ; rm -rf clim_aluvd_${tagname2} grib_set -s dataDate=${tagname1} clim_alnip_${tagname2} clim_alnip_${tagname1} ; rm -rf clim_alnip_${tagname2} grib_set -s dataDate=${tagname1} clim_aluvp_${tagname2} clim_aluvp_${tagname1} ; rm -rf clim_aluvp_${tagname2} if [[ $LVEGNRT = true ]] ; then #NRT data yyyy1=$(echo ${tagname1} | cut -c 1-4) if [[ $NRTMETHOD = DIRECT ]] ; then # LAINRTAD="/home/nag/work/VEG_new/NRT/GEOV1/LAI/${resol}/hilo_std/${yyyy1}" ALBNRTAD="/home/nag/work/VEG_new/NRT/GEOV1/albedo/${resol}/ALBH/ANA/${yyyy1}" ALDNRTAD="/home/nag/work/VEG_new/NRT/GEOV1/albedo/${resol}/ALDH/ANA/${yyyy1}" grib_set -s dataDate=${tagname1} ${LAINRTAD}/GEOV1_lail_${tagname1}_${resol}.grb tmp.grb ; mv tmp.grb ${LAINRTAD}/GEOV1_lail_${tagname1}_${resol}.grb grib_set -s dataDate=${tagname1} ${LAINRTAD}/GEOV1_laih_${tagname1}_${resol}.grb tmp.grb ; mv tmp.grb ${LAINRTAD}/GEOV1_laih_${tagname1}_${resol}.grb grib_set -s dataDate=${tagname1} ${ALBNRTAD}/g2_BIOPAR_ALBH_BB_SF_ana_${tagname1}_VGT_V1.3_${resol}.grb tmp.grb ; mv tmp.grb ${ALBNRTAD}/g2_BIOPAR_ALBH_BB_SF_ana_${tagname1}_VGT_V1.3_${resol}.grb grib_set -s dataDate=${tagname1} ${ALBNRTAD}/g2_BIOPAR_ALBH_NI_SF_ana_${tagname1}_VGT_V1.3_${resol}.grb tmp.grb ; mv tmp.grb ${ALBNRTAD}/g2_BIOPAR_ALBH_NI_SF_ana_${tagname1}_VGT_V1.3_${resol}.grb grib_set -s dataDate=${tagname1} ${ALBNRTAD}/g2_BIOPAR_ALBH_VI_SF_ana_${tagname1}_VGT_V1.3_${resol}.grb tmp.grb ; mv tmp.grb ${ALBNRTAD}/g2_BIOPAR_ALBH_VI_SF_ana_${tagname1}_VGT_V1.3_${resol}.grb grib_set -s dataDate=${tagname1} ${ALDNRTAD}/g2_BIOPAR_ALDH_NI_SF_ana_${tagname1}_VGT_V1.3_${resol}.grb tmp.grb ; mv tmp.grb ${ALDNRTAD}/g2_BIOPAR_ALDH_NI_SF_ana_${tagname1}_VGT_V1.3_${resol}.grb grib_set -s dataDate=${tagname1} ${ALDNRTAD}/g2_BIOPAR_ALDH_VI_SF_ana_${tagname1}_VGT_V1.3_${resol}.grb tmp.grb ; mv tmp.grb ${ALDNRTAD}/g2_BIOPAR_ALDH_VI_SF_ana_${tagname1}_VGT_V1.3_${resol}.grb ln -sf ${LAINRTAD}/GEOV1_lail_${tagname1}_${resol}.grb NRT_lail_${tagname1} ln -sf ${LAINRTAD}/GEOV1_laih_${tagname1}_${resol}.grb NRT_laih_${tagname1} ln -sf ${ALBNRTAD}/g2_BIOPAR_ALBH_BB_SF_ana_${tagname1}_VGT_V1.3_${resol}.grb NRT_alb_${tagname1} ln -sf ${ALBNRTAD}/g2_BIOPAR_ALBH_NI_SF_ana_${tagname1}_VGT_V1.3_${resol}.grb NRT_alnid_${tagname1} ln -sf ${ALBNRTAD}/g2_BIOPAR_ALBH_VI_SF_ana_${tagname1}_VGT_V1.3_${resol}.grb NRT_aluvd_${tagname1} ln -sf ${ALDNRTAD}/g2_BIOPAR_ALDH_NI_SF_ana_${tagname1}_VGT_V1.3_${resol}.grb NRT_alnip_${tagname1} ln -sf ${ALDNRTAD}/g2_BIOPAR_ALDH_VI_SF_ana_${tagname1}_VGT_V1.3_${resol}.grb NRT_aluvp_${tagname1} if [[ $nrtdata = LAIALB ]] ; then cat NRT_alb_${tagname1} >>month_alb_dated cat NRT_alnid_${tagname1} >>month_alnid_dated cat NRT_aluvd_${tagname1} >>month_aluvd_dated cat NRT_alnip_${tagname1} >>month_alnip_dated cat NRT_aluvp_${tagname1} >>month_aluvp_dated cat NRT_lail_${tagname1} >>month_lail_dated cat NRT_laih_${tagname1} >>month_laih_dated elif [[ $nrtdata = ALB ]] ; then cat NRT_alb_${tagname1} >>month_alb_dated cat NRT_alnid_${tagname1} >>month_alnid_dated cat NRT_aluvd_${tagname1} >>month_aluvd_dated cat NRT_alnip_${tagname1} >>month_alnip_dated cat NRT_aluvp_${tagname1} >>month_aluvp_dated cat clim_lail_${tagname1} >>month_lail_dated cat clim_laih_${tagname1} >>month_laih_dated elif [[ $nrtdata = LAI ]] ; then cat clim_alb_${tagname1} >>month_alb_dated cat clim_alnid_${tagname1} >>month_alnid_dated cat clim_aluvd_${tagname1} >>month_aluvd_dated cat clim_alnip_${tagname1} >>month_alnip_dated cat clim_aluvp_${tagname1} >>month_aluvp_dated cat NRT_lail_${tagname1} >>month_lail_dated cat NRT_laih_${tagname1} >>month_laih_dated fi else #$NRTMETHOD Not DIRECT (anomaly factor method used) LAINRTD="/home/nag/work/VEG_new/NRT/GEOV1/LAI/${resol}/total/ANOM/${yyyy1}" ALBNRTD="/home/nag/work/VEG_new/NRT/GEOV1/albedo/${resol}/ALBH/ANOM/${yyyy1}" ALDNRTD="/home/nag/work/VEG_new/NRT/GEOV1/albedo/${resol}/ALDH/ANOM/${yyyy1}" ln -sf ${LAINRTD}/g2_BIOPAR_LAI_anof_${tagname1}_VGT_V1.3_${resol}.grb laianof_${tagname1} ln -sf ${ALBNRTD}/g2_BIOPAR_ALBH_BB_SF_anof_${tagname1}_VGT_V1.3_${resol}.grb albanof_${tagname1} ln -sf ${ALBNRTD}/g2_BIOPAR_ALBH_NI_SF_anof_${tagname1}_VGT_V1.3_${resol}.grb alnidanof_${tagname1} ln -sf ${ALBNRTD}/g2_BIOPAR_ALBH_VI_SF_anof_${tagname1}_VGT_V1.3_${resol}.grb aluvdanof_${tagname1} ln -sf ${ALDNRTD}/g2_BIOPAR_ALDH_NI_SF_anof_${tagname1}_VGT_V1.3_${resol}.grb alnipanof_${tagname1} ln -sf ${ALDNRTD}/g2_BIOPAR_ALDH_VI_SF_anof_${tagname1}_VGT_V1.3_${resol}.grb aluvpanof_${tagname1} cat > bar_lai_alb << EOF read, source="clim_alb_${tagname1}", fieldset=alb read, source="albanof_${tagname1}", fieldset=alb_ano compute, formula="alb*alb_ano",fieldset=alb_nrt1 compute, formula = "(alb_nrt1>1.) * 1. + (alb_nrt1<=1.)*alb_nrt1",fieldset=alb_nrt read, source="clim_alnid_${tagname1}", fieldset=alnid read, source="alnidanof_${tagname1}", fieldset=alnid_ano compute, formula="alnid*alnid_ano",fieldset=alnid_nrt1 compute, formula = "(alnid_nrt1>1.) * 1. + (alnid_nrt1<=1.)*alnid_nrt1",fieldset=alnid_nrt read, source="clim_aluvd_${tagname1}", fieldset=aluvd read, source="aluvdanof_${tagname1}", fieldset=aluvd_ano compute, formula="aluvd*aluvd_ano",fieldset=aluvd_nrt1 compute, formula = "(aluvd_nrt1>1.) * 1. + (aluvd_nrt1<=1.)*aluvd_nrt1",fieldset=aluvd_nrt read, source="clim_alnip_${tagname1}", fieldset=alnip read, source="alnipanof_${tagname1}", fieldset=alnip_ano compute, formula="alnip*alnip_ano",fieldset=alnip_nrt1 compute, formula = "(alnip_nrt1>1.) * 1. + (alnip_nrt1<=1.)*alnip_nrt1",fieldset=alnip_nrt read, source="clim_aluvp_${tagname1}", fieldset=aluvp read, source="aluvpanof_${tagname1}", fieldset=aluvp_ano compute, formula="aluvp*aluvp_ano",fieldset=aluvp_nrt1 compute, formula = "(aluvp_nrt1>1.) * 1. + (aluvp_nrt1<=1.)*aluvp_nrt1",fieldset=aluvp_nrt read, source="clim_lail_${tagname1}", fieldset=lail read, source="laianof_${tagname1}", fieldset=lai_ano compute, formula="lail*lai_ano",fieldset=lail_nrt1 compute, formula = "(lail_nrt1>7.) * 7. + (lail_nrt1<=7.)*lail_nrt1",fieldset=lail_nrt read, source="clim_laih_${tagname1}", fieldset=laih read, source="laianof_${tagname1}", fieldset=lai_ano compute, formula="laih*lai_ano",fieldset=laih_nrt1 compute, formula = "(laih_nrt1>7.) * 7. + (laih_nrt1<=7.)*laih_nrt1",fieldset=laih_nrt write, fieldset=alb_nrt, target=NRT_alb_${tagname1} write, fieldset=alnid_nrt, target=NRT_alnid_${tagname1} write, fieldset=aluvd_nrt, target=NRT_aluvd_${tagname1} write, fieldset=alnip_nrt, target=NRT_alnip_${tagname1} write, fieldset=aluvp_nrt, target=NRT_aluvp_${tagname1} write, fieldset=lail_nrt, target=NRT_lail_${tagname1} write, fieldset=laih_nrt, target=NRT_laih_${tagname1} EOF cat > bar_alb << EOF read, source="clim_alb_${tagname1}", fieldset=alb read, source="albanof_${tagname1}", fieldset=alb_ano compute, formula="alb*alb_ano",fieldset=alb_nrt1 compute, formula = "(alb_nrt1>1.) * 1. + (alb_nrt1<=1.)*alb_nrt1",fieldset=alb_nrt read, source="clim_alnid_${tagname1}", fieldset=alnid read, source="alnidanof_${tagname1}", fieldset=alnid_ano compute, formula="alnid*alnid_ano",fieldset=alnid_nrt1 compute, formula = "(alnid_nrt1>1.) * 1. + (alnid_nrt1<=1.)*alnid_nrt1",fieldset=alnid_nrt read, source="clim_aluvd_${tagname1}", fieldset=aluvd read, source="aluvdanof_${tagname1}", fieldset=aluvd_ano compute, formula="aluvd*aluvd_ano",fieldset=aluvd_nrt1 compute, formula = "(aluvd_nrt1>1.) * 1. + (aluvd_nrt1<=1.)*aluvd_nrt1",fieldset=aluvd_nrt read, source="clim_alnip_${tagname1}", fieldset=alnip read, source="alnipanof_${tagname1}", fieldset=alnip_ano compute, formula="alnip*alnip_ano",fieldset=alnip_nrt1 compute, formula = "(alnip_nrt1>1.) * 1. + (alnip_nrt1<=1.)*alnip_nrt1",fieldset=alnip_nrt read, source="clim_aluvp_${tagname1}", fieldset=aluvp read, source="aluvpanof_${tagname1}", fieldset=aluvp_ano compute, formula="aluvp*aluvp_ano",fieldset=aluvp_nrt1 compute, formula = "(aluvp_nrt1>1.) * 1. + (aluvp_nrt1<=1.)*aluvp_nrt1",fieldset=aluvp_nrt write, fieldset=alb_nrt, target=NRT_alb_${tagname1} write, fieldset=alnid_nrt, target=NRT_alnid_${tagname1} write, fieldset=aluvd_nrt, target=NRT_aluvd_${tagname1} write, fieldset=alnip_nrt, target=NRT_alnip_${tagname1} write, fieldset=aluvp_nrt, target=NRT_aluvp_${tagname1} EOF cat > bar_lai << EOF read, source="clim_lail_${tagname1}", fieldset=lail read, source="laianof_${tagname1}", fieldset=lai_ano compute, formula="lail*lai_ano",fieldset=lail_nrt1 compute, formula = "(lail_nrt1>7.) * 7. + (lail_nrt1<=7.)*lail_nrt1",fieldset=lail_nrt read, source="clim_laih_${tagname1}", fieldset=laih read, source="laianof_${tagname1}", fieldset=lai_ano compute, formula="laih*lai_ano",fieldset=laih_nrt1 compute, formula = "(laih_nrt1>7.) * 7. + (laih_nrt1<=7.)*laih_nrt1",fieldset=laih_nrt write, fieldset=lail_nrt, target=NRT_lail_${tagname1} write, fieldset=laih_nrt, target=NRT_laih_${tagname1} EOF if [[ $nrtdata = LAIALB ]] ; then $MARS_CMD < bar_lai_alb >out_mars grib_set -s dataDate=${tagname1} NRT_alb_${tagname1} tmp.grb ; mv tmp.grb NRT_alb_${tagname1} grib_set -s dataDate=${tagname1} NRT_alnid_${tagname1} tmp.grb ; mv tmp.grb NRT_alnid_${tagname1} grib_set -s dataDate=${tagname1} NRT_aluvd_${tagname1} tmp.grb ; mv tmp.grb NRT_aluvd_${tagname1} grib_set -s dataDate=${tagname1} NRT_alnip_${tagname1} tmp.grb ; mv tmp.grb NRT_alnip_${tagname1} grib_set -s dataDate=${tagname1} NRT_aluvp_${tagname1} tmp.grb ; mv tmp.grb NRT_aluvp_${tagname1} grib_set -s dataDate=${tagname1} NRT_lail_${tagname1} tmp.grb ; mv tmp.grb NRT_lail_${tagname1} grib_set -s dataDate=${tagname1} NRT_laih_${tagname1} tmp.grb ; mv tmp.grb NRT_laih_${tagname1} cat NRT_alb_${tagname1} >>month_alb_dated cat NRT_alnid_${tagname1} >>month_alnid_dated cat NRT_aluvd_${tagname1} >>month_aluvd_dated cat NRT_alnip_${tagname1} >>month_alnip_dated cat NRT_aluvp_${tagname1} >>month_aluvp_dated cat NRT_lail_${tagname1} >>month_lail_dated cat NRT_laih_${tagname1} >>month_laih_dated elif [[ $nrtdata = ALB ]] ; then $MARS_CMD < bar_alb >out_mars grib_set -s dataDate=${tagname1} NRT_alb_${tagname1} tmp.grb ; mv tmp.grb NRT_alb_${tagname1} grib_set -s dataDate=${tagname1} NRT_alnid_${tagname1} tmp.grb ; mv tmp.grb NRT_alnid_${tagname1} grib_set -s dataDate=${tagname1} NRT_aluvd_${tagname1} tmp.grb ; mv tmp.grb NRT_aluvd_${tagname1} grib_set -s dataDate=${tagname1} NRT_alnip_${tagname1} tmp.grb ; mv tmp.grb NRT_alnip_${tagname1} grib_set -s dataDate=${tagname1} NRT_aluvp_${tagname1} tmp.grb ; mv tmp.grb NRT_aluvp_${tagname1} cat NRT_alb_${tagname1} >>month_alb_dated cat NRT_alnid_${tagname1} >>month_alnid_dated cat NRT_aluvd_${tagname1} >>month_aluvd_dated cat NRT_alnip_${tagname1} >>month_alnip_dated cat NRT_aluvp_${tagname1} >>month_aluvp_dated cat clim_lail_${tagname1} >>month_lail_dated cat clim_laih_${tagname1} >>month_laih_dated elif [[ $nrtdata = LAI ]] ; then $MARS_CMD < bar_lai >out_mars grib_set -s dataDate=${tagname1} NRT_lail_${tagname1} tmp.grb ; mv tmp.grb NRT_lail_${tagname1} grib_set -s dataDate=${tagname1} NRT_laih_${tagname1} tmp.grb ; mv tmp.grb NRT_laih_${tagname1} cat clim_alb_${tagname1} >>month_alb_dated cat clim_alnid_${tagname1} >>month_alnid_dated cat clim_aluvd_${tagname1} >>month_aluvd_dated cat clim_alnip_${tagname1} >>month_alnip_dated cat clim_aluvp_${tagname1} >>month_aluvp_dated cat NRT_lail_${tagname1} >>month_lail_dated cat NRT_laih_${tagname1} >>month_laih_dated fi fi #end NRTMETHOD else # no NRT cat clim_alb_${tagname1} >>month_alb_dated cat clim_alnid_${tagname1} >>month_alnid_dated cat clim_aluvd_${tagname1} >>month_aluvd_dated cat clim_alnip_${tagname1} >>month_alnip_dated cat clim_aluvp_${tagname1} >>month_aluvp_dated cat clim_lail_${tagname1} >>month_lail_dated cat clim_laih_${tagname1} >>month_laih_dated fi #NRTd ata k=$(expr $k + 1 ) done j=$(expr $j + 1 ) done mv month_alb_dated month_alb mv month_alnid_dated month_alnid mv month_aluvd_dated month_aluvd mv month_alnip_dated month_alnip mv month_aluvp_dated month_aluvp mv month_laih_dated month_laih mv month_lail_dated month_lail echo "finished get_10day_alb_lai" _eof_get_10day_alb_lai cat >$TMPDIR/grpsize <<\_eof_grpsize : #include $EXPVER/include/grpsize ($EXPVER/ifstraj_999.ecf) # # Finds out maximum number of pools that becomes ODB_IO_GRPSIZE (unless already set) # # Usage: grpsize [DBNAME [npools]] # # where DBNAME is one of {ECMA,ECMASCR,CCMA} # set -eu dbname=ECMA defval=${NPES_AN:-0} if [[ $# -ge 1 ]] ; then dbname=$1 if [[ $# -ge 2 ]] ; then defval=$2 fi fi if [[ "X${ODB_IO_GRPSIZE:-}" = "X" ]] ; then # ODB_IO_GRPSIZE was *NOT* set grpsize=$defval if [[ $# -le 1 ]] ; then # Only DBNAME was given if [[ "$dbname" = "ECMA" ]] || "$dbname" = "ECMASCR" ]] ; then for f in $(\ls -C1 $WDIR/${dbname}.*/${dbname}.dd 2>/dev/null || :) do typeset npools=$(head -5 $f | tail -1) if [[ $grpsize -lt $npools ]] ; then grpsize=$npools fi done fi fi else # ODB_IO_GRPSIZE was *INDEED* set grpsize="${ODB_IO_GRPSIZE}" # Use the preset value if [[ $# -ge 2 && $defval -lt $grpsize ]] ; then grpsize="$defval" # Using smaller value (i.e. arg#2 -- npools -- was less than supplied ODB_IO_GRPSIZE) fi fi echo "$grpsize" _eof_grpsize cat >$TMPDIR/safecat <<\_eof_safecat : #include $EXPVER/include/safecat ($EXPVER/ifstraj_999.ecf) #safecat version: 20110704 set -eu #======================================================================= # # Script safecat # ------------ # # Purpose : Safely cat a file to stdout, only prints $SAFECAT_MAXSIZE lines # of long files # ------- # # Usage : safecat # ----- # # Parameters : none # ---------- # # Externals : none # --------- # #======================================================================= set +v set -x SAFECAT_MAXSIZE=${SAFECAT_MAXSIZE:-20000000} TMPOUT=${SCRATCHDIR:-${SCRATCH:-TMPDIR}}/safecat.tmpout$$ line="**************************************************************************" # If used with "-i" format, then safecat runs in "live" mode, taking input from # stdin and optionally writing it to file specified by -o argument. # The first ${SAFECAT_MAXSIZE} characters will be # written to stdout too, but anything after this won't go to stdout. When the input ends # the last ${SAFECAST_LASTLINES} lines will also be written to stdout livemode=0 outfile_given=0 outfile=${TMPOUT} fname=pipein name=sfct # safecat name to start each line of output while getopts io:m:l: opt do case $opt in i) livemode=1; name=sfcti ;; o) outfile_given=1 ; outfile=$OPTARG ; fname=$OPTARG;; m) SAFECAT_MAXSIZE=$OPTARG ;; esac done ((PARTSIZE=SAFECAT_MAXSIZE/2)) if [[ ${livemode} == 1 ]]; then rm -f ${outfile}.chopped 2>/dev/null || true tee ${outfile} 2>/dev/null | awk "{print \"${name}> $fname[\"NR\"]:\", \"\t\", \$0}" | (head -c ${PARTSIZE} cat -- > ${outfile}.chopped # cat catches stuff after head is exhausted ) if [[ $(stat -c %s ${outfile} 2>/dev/null) -gt ${SAFECAT_MAXSIZE} ]]; then echo ; echo echo "${line}" banner "safecat chopped" [[ ${outfile_given} -eq 1 ]] && echo "Missing middle of output file - see \"${outfile}\" for full output" echo "${line}" echo tail -c ${PARTSIZE} ${outfile}.chopped 2>/dev/null || true echo echo "${line}" echo "Warning : safecat removed some output to reduce log file length" [[ ${outfile_given} -eq 1 ]] && echo "Full output can be browsed in file \"${outfile}\"" echo "${line}" else cat ${outfile}.chopped 2>/dev/null || true fi rm -f ${outfile}.chopped 2>/dev/null || true else for file in $*; do if [[ -r $file ]]; then fname=$(basename ${file}) size=$(perl -e "print -s \"$file\"") if [[ $(echo $file | cut -c1) != "/" ]]; then fullfile=$(pwd)/$file else fullfile=$file fi SAVEDFILE="" if [[ $size -gt $SAFECAT_MAXSIZE ]]; then if [[ ${ECF_JOBOUT:-none} != "none" ]]; then if [[ -d $(dirname $ECF_JOBOUT) ]]; then safe=$(echo $file | sed "s:/:__:g") SAVEDFILE="$ECF_JOBOUT.$safe" cp $file $SAVEDFILE || true fi fi if [[ -f $SAVEDFILE ]]; then warning="** WARNING : Output here only shows first and last $PARTSIZE bytes of $fullfile\nSee $SAVEDFILE for full output" else warning="** WARNING : Output here only shows first and last $PARTSIZE bytes of $fullfile" fi cat ${file} | awk "{print \"${name}> $fname[\"NR\"]:\", \"\t\", \$0}" | ( echo echo "$line" echo "** START : $fullfile" echo "$warning" echo "$line" echo ( head -c $PARTSIZE cat -- > ${outfile}.chopped ) echo echo "${line}" banner "safecat chopped" echo "Missing middle of output file - see \"${file}\" for full output" echo "${line}" echo tail -c $PARTSIZE ${outfile}.chopped echo echo "$line" echo "$warning" echo "** END : $fullfile" echo "$line" echo ) else cat $file | awk "{print \"${name}> $fname[\"NR\"]:\", \"\t\", \$0}" fi fi done fi rm -f ${TMPOUT} ${outfile}.chopped 2>/dev/null || true _eof_safecat cat >$TMPDIR/ifsmin <<\_eof_ifsmin : #include $EXPVER/include/ifsmin ($EXPVER/ifstraj_999.ecf) #ifsmin version: 20111107 set -euxv #======================================================================= # # Script ifsmin # ------------- # # Purpose : Minimization or forecast error calculation # ------- # # Usage : ifsmin [-m mode] -u uptraj # ----- # # Parameters : -m - mode = 'min' for minimization (default), # ---------- mode = 'fce' for forecast error minimization # -u - uptraj = trajectory update number # #======================================================================= set +v # ifsmin pushes into fdb the files spinlr?? gginlr?? spmoderrin* # once, it was an accepted solution, to prevent delay in products delivery, # to copy previous cycle spmoderrin file # and run on the command line grib2fdb : #include $EXPVER/include/cycle_times ($EXPVER/include/ifsmin) #======================================================================= # # cycle_times # ----------- # # Purpose : Define variables control the date and times for # ------- cycling of the assimilation window. # #======================================================================= IFSMODE=${IFSMODE:=none} PERIOD_4D=${PERIOD_4D:=-999999} WINDOW_LENGTH_4D=${WINDOW_LENGTH_4D:=-999999} WINDOW_OFFSET_4D=${WINDOW_OFFSET_4D:=-999999} REINIWINDOW_LENGTH_4D=${REINIWINDOW_LENGTH_4D:=-999999} NUMINI=${_NUMINI_} PERIOD_BG=${PERIOD_BG:=-999999} echo "NUMINI=$NUMINI" # The variables below are derived from WINDOW_LENGTH_4D and WINDOW_OFFSET_4D # later in this file if WINDOW_LENGTH_4D is specified WINDOW_START=-999999 WINDOW_END=-999999 BKG_TIME=-999999 NXBGTIME=-999999 FIRST_AN=-999999 LAST_AN=-999999 STEP_AN=-999999 NO6HTSL=-999999 #======================================================================= # Determine appropriate value for PERIOD_AN and PERIOD_OBS #======================================================================= PERIOD_AN_ATM=${PERIOD_AN_ATM:=6} PERIOD_AN_SFC=${PERIOD_AN_SFC:=6} LPERIOD_AN_SFC=${LPERIOD_AN_SFC:=false} # Set PERIOD_AN, using $LPERIOD_AN_SFC to select between # surface-related tasks and the atmospheric 4d-var if [[ $LPERIOD_AN_SFC = true ]] ; then PERIOD_AN=${PERIOD_AN_SFC} else PERIOD_AN=${PERIOD_AN_ATM} fi # Allow to override this via ecFlow variable - this enables it to be # optionally relaxed from 6 to 12 in the archiving family for CAMS # experiments if you don't need to archive the 06Z and 18Z analyses # (which aren't used to initialise forecasts in a 03-15 window). PERIOD_AN=${_PERIOD_AN_} echo "PERIOD_AN=$PERIOD_AN" PERIOD_OBS=6 #======================================================================= # Some basic prints #======================================================================= echo "BASETIME=$BASETIME" echo "PERIOD_4D=$PERIOD_4D" echo "WINDOW_LENGTH_4D=$WINDOW_LENGTH_4D" echo "WINDOW_OFFSET_4D=$WINDOW_OFFSET_4D" if [[ $WINDOW_LENGTH_4D -gt 0 ]] ; then WINDOW_CUTOFF_4D=$(( WINDOW_LENGTH_4D - WINDOW_OFFSET_4D )) else WINDOW_CUTOFF_4D=-999999 fi echo "WINDOW_CUTOFF_4D=$WINDOW_CUTOFF_4D" echo "PERIOD_BG=$PERIOD_BG" #======================================================================= # Checks #======================================================================= if [[ $WINDOW_OFFSET_4D -gt $WINDOW_LENGTH_4D ]] ; then echo "Window offset is longer than assimilation window" exit 1 fi if [[ $PERIOD_BG -lt $PERIOD_4D ]]; then case $IFSMODE in 4d_inc|3d_fgat|early_delivery) echo "Background cannot be more recent than previous cycle" exit 1 ;; esac fi #======================================================================= # Determine correct BASETIME #======================================================================= INIBEGINDATE=${_INIBEGINDATE_} _inihour=${_INIBEGINHOUR_} INIBEGINHOUR=$(printf %02d $_inihour) if [[ $FAMILY = */make/* || $FAMILY = */inicond/* ]] ; then if [[ $FAMILY = */make/* ]] ; then CYCLETIME=$(echo ${INIBEGINDATE}${INIBEGINHOUR} | cut -c1-10) fi back=$(( (NUMINI+1) * PERIOD_4D )) CYCLETIME=$( newdate $CYCLETIME -$back ) fi echo "CYCLETIME=$CYCLETIME" #======================================================================= # Split outer loop #======================================================================= NSPLIT4DWIN=${NSPLIT4DWIN:=0} NSUBWIN4D=0 SUBWIN_OFFSET=0 LSPLIT4D_SPINUP=false if [[ $NSPLIT4DWIN -gt 0 ]] ; then subtime=$CYCLETIME isubwin=1 while [[ $isubwin -le $NSPLIT4DWIN ]] ; do if [[ $subtime -ge $INITIME ]] ; then NSUBWIN4D=$isubwin fi isubwin=$((isubwin + 1)) subtime=$(newdate $subtime -$WINDOW_LENGTH_4D) done [[ $NSUBWIN4D -lt $NSPLIT4DWIN ]] && LSPLIT4D_SPINUP=true [[ $NSUBWIN4D -gt 1 ]] && SUBWIN_OFFSET=$(( WINDOW_LENGTH_4D * (NSUBWIN4D-1) )) fi echo "NSPLIT4DWIN=$NSPLIT4DWIN" echo "NSUBWIN4D=$NSUBWIN4D" echo "SUBWIN_OFFSET=$SUBWIN_OFFSET" #======================================================================= # Beginning and end of the current window #======================================================================= if [[ $WINDOW_LENGTH_4D -gt 0 ]] ; then WINDOW_START=$( newdate $CYCLETIME -$WINDOW_OFFSET_4D ) WINDOW_END=$( newdate $CYCLETIME $WINDOW_CUTOFF_4D ) echo "WINDOW_START=$WINDOW_START" echo "WINDOW_END=$WINDOW_END" #======================================================================= # Background #======================================================================= BKG_STEP=${STEP_BG:=3} if [[ $REINITIALIZE = true && $REINI_NOT_ED = true ]] ; then BKG_STEP=$(( BKG_STEP + REINIOFFSET - PERIOD_AN )) fi echo "BKG_STEP=$BKG_STEP" BKG_TIME=$( newdate $WINDOW_START -$BKG_STEP ) echo "BKG_TIME=$BKG_TIME" if [[ $REINITIALIZE = true || $LEDFAMILY = true ]] ; then WINDOW_LENGTH_BG=$REINIWINDOW_LENGTH_4D else WINDOW_LENGTH_BG=$WINDOW_LENGTH_4D fi echo "WINDOW_LENGTH_BG=$WINDOW_LENGTH_BG" BKG_OFFSET=$(( WINDOW_LENGTH_BG - PERIOD_BG + BKG_STEP )) echo "BKG_OFFSET=$BKG_OFFSET" # Time for next background (ie start of cycling fc) NXBGTIME=$( newdate $WINDOW_END -$BKG_OFFSET ) # EH: Below is for ED 8h window - need to correct in a general way if [[ $LEDFAMILY = true ]] ; then NXBGTIME=$CYCLETIME fi echo "NXBGTIME=$NXBGTIME" #======================================================================= # Find analysis (synoptic) times #======================================================================= hh="$(substring $WINDOW_START 9 10)" # sh step=$(( 10#$hh % PERIOD_AN )) [[ $step -gt 0 ]] && step=$(( PERIOD_AN - step )) FIRST_AN=$( newdate $WINDOW_START $step ) if [[ $CERA_OUT = true && $FIRST_AN = $WINDOW_START ]] ; then # Until overlapping windows are fully implemented, cannot archive analysis at start of window FIRST_AN=$( newdate $WINDOW_START +$PERIOD_AN) fi hh="$(substring $WINDOW_END 9 10)" step=$(( 10#$hh % PERIOD_AN )) LAST_AN=$( newdate $WINDOW_END -$step) if [[ $FAMILY = */make/* || $FAMILY = */inicond/* ]] ; then FIRST_AN=$NXBGTIME LAST_AN=$NXBGTIME fi STEP_AN=$( datediff -h $FIRST_AN $WINDOW_START ) echo "FIRST_AN=$FIRST_AN" echo "LAST_AN=$LAST_AN" echo "STEP_AN=$STEP_AN" hh_start=$( substring $WINDOW_START 9 10 ) echo "hh_start=$hh_start" case $hh_start in 03|09|15|21) NO6HTSL=$(( WINDOW_LENGTH_4D / PERIOD_OBS )) ;; *) NO6HTSL=$(( WINDOW_LENGTH_4D / PERIOD_OBS + 1 )) esac echo "NO6HTSL=$NO6HTSL" ## Wave model assimilation ## Enforce 6 hourly wave assimilation wam_assimil_period=${WAM_ASSIMIL_PERIOD:=6} if [[ $wam_assimil_period -lt 6 ]] ; then if [[ $FAMILY = */make/* || $FAMILY = */inicond/* ]] ; then anstart=$NXBGTIME else anstart=$WINDOW_START fi FIRST_AN_WAVE=$( newdate $anstart $wam_assimil_period ) PERIOD_AN_WAVE=$wam_assimil_period LAST_AN_WAVE=$WINDOW_END else FIRST_AN_WAVE=$FIRST_AN PERIOD_AN_WAVE=$PERIOD_AN LAST_AN_WAVE=$LAST_AN fi fi #======================================================================= # End cycle_times #======================================================================= WINDOW_LENGTH_4D_TOT=$(( WINDOW_LENGTH_4D + SUBWIN_OFFSET )) echo "WINDOW_LENGTH_4D_TOT=$WINDOW_LENGTH_4D_TOT" #======================================================================= # Things that do not depend on current cycle time #======================================================================= DATE_OPER_DCDA=2004062900 DATE_OPER_ENDA=2010062200 DATE_OPER_LWDA=2013111900 ANOFFSET_TYPES='4i|4v|an|fc|ef|ea|me|em|es|ses' WINDOW_LENGTH_4D_TOT_OPER=12 EDA_WINDOW_LENGTH_4D_TOT_OPER=12 EDA_WINDOW_LENGTH_4D=${EDA_WINDOW_LENGTH_4D:=12} INI_WINDOW_LENGTH_4D=${INI_WINDOW_LENGTH_4D:=12} EDACLASS=${EDACLASS:=od} EDAEXPVER=${EDAEXPVER:=0001} LEDA_ERRORS_IN=${LEDA_ERRORS_IN:=true} if [[ $LEDA_ERRORS_IN = true && $EDACLASS = od && $EDAEXPVER = 0001 && $BASETIME -ge $DATE_OPER_LWDA ]] ; then if [[ $LEVELS = 137 ]] ; then LJB_EDA=true fi LSES_EDA=true fi #======================================================================= # Setting for archiving via NPOSTS argument in NAMCT0, used by sekf_sm and ifstraj and ansfc #======================================================================= PPSTEP_INC=3 if [[ $PERIOD_AN -lt 3 ]] ; then PPSTEP_INC=$PERIOD_AN fi echo "PPSTEP_INC=$PPSTEP_INC" #end-of-include $EXPVER/include/cycle_times ($EXPVER/include/ifsmin) : #include $EXPVER/include/var_include ($EXPVER/include/ifsmin) #======================================================================= # # var_include # ----------- # # Purpose : Define variables to be used in various 4D-Var scripts # ------- # #======================================================================= NORDER_MODERR=${NORDER_MODERR:=0} LWEAK4DVAR=${LWEAK4DVAR:=false} LBGMODERR=${LBGMODERR:=true} LFSOBS=${LFSOBS:=false} LEMISKF=${LEMISKF:=false} ENDANENS=${ENDANENS:=0} LFCDEPAR=${LFCDEPAR:=false} INISTEP_FCDEPAR=${INISTEP_FCDEPAR:=0} INIEXPTYPE=${INIEXPTYPE:=an} NUPTRA_RANGE=${NUPTRA_RANGE:=0} LOBS_SCREEN=${LOBS_SCREEN:=false} #======================================================================= # Model Error #======================================================================= ggme="200133/200203/" # Try to guess what the family is (FSFAMILY does not work here...) family=$FAMILY [[ $ENDANENS -gt 0 ]] && family=$( dirname $FAMILY ) GUESS_FAMILY=$(echo $family | awk -F/ '{print $NF}') if [[ $LWEAK4DVAR = true ]] ; then if [[ $NTYPE_MODERR = @(2|3) ]] ; then NCOMP_MODERR=$(( 1 + 2 * NORDER_MODERR )) ggme="" else NCOMP_MODERR=1 fi NSTEP_MODERR=1 NDIM_MODERR=$(( NCOMP_MODERR * NSTEP_MODERR )) else NSTEP_MODERR=0 NCOMP_MODERR=0 NDIM_MODERR=0 fi #======================================================================= #end-of-include $EXPVER/include/var_include ($EXPVER/include/ifsmin) function intofdb { # dedicated function so we can carry on without delay when performance for grib2fdb is degraded trap '{ echo "Error in function"; exit 1; }' 0 $SMS_SIGNAL_LIST; set -exu xlabel info "grib2fdb start $(date +%Y%m%d-%H%M) " if [[ ($IFSMODE != 3d_fgat || $mode != fce) && ($LFSOBS = false) && ($OOPSRUN != true) ]] ; then if [[ $LARCHINCR = true ]] ; then $GRIB2FDB_CMD -f $WDIR/spinlr${cuptra} if [[ $LGPINNER = true ]]; then $GRIB2FDB_CMD -f $WDIR/gginlr${cuptra} fi fi fi # IFS to OOPS-IFS comparison: switch off weak constraint if [[ $LMODERR = true ]] ; then rm -f $WDIR/spmoderrin${cuptra}* typeset -RZ2 comp=1 while [[ $comp -le $NDIM_MODERR ]] ; do mv spmoderrin${cuptra}${comp} $WDIR/spmoderrin${cuptra}${comp} if [[ $uptraj -eq $(( MXUP_TRAJ-1 )) && $NTYPE_MODERR != 1 ]] ; then $GRIB2FDB_CMD -f $WDIR/spmoderrin${cuptra}${comp} fi comp=$((comp + 1)) done fi # xevent g # zombie # xlabel info "grib2fdb stop $(date +%Y%m%d-%H%M) " # zombie set -e; trap 0; return 0 } USAGE="$0 [-m mode] -u uptraj" errflg=0 mode=min uptraj= lfftw=${LFFTW:-false} while getopts m:u: option do case $option in m) mode=$OPTARG;; u) uptraj=$OPTARG;; \?) errflg=1;; esac done #======================================================================= # Check parameters #======================================================================= if [[ $errflg -ne 0 ]] ; then echo $USAGE >&2 exit 1 fi if [[ "$uptraj" = "" ]] ; then echo $USAGE >&2 echo "-u uptraj, trajectory update number, must be supplied" exit 2 fi typeset -RZ2 cuptra=$uptraj if [[ "$mode" != "fce" && "$mode" != "min" ]] ; then echo $USAGE >&2 echo "-m mode = $mode, which is an invalid value" echo "Valid values are 'fce' or 'min'" exit 3 fi #======================================================================= # Run IFS with OOPS-IFS compatible configuration: # - weak constrained disabled (in PrepIFS) # - jcdfi disabled # - cloud sink variable disabled # - fixed number of iterations #======================================================================= LIFSASOOPS=${LIFSASOOPS:-false} #======================================================================= # Jb Statistics #======================================================================= if [[ $L_CALCULATE_JBW_STATS = true ]] ; then eval RESOLINC_${uptraj}='$'RESOLJB_${uptraj} eval NSMAX_TRAJ='$'RESOLJB_${uptraj} ## if [[ $uptraj -ge $MXUP_TRAJ ]] ; then eval RESOLINC_$((uptraj))='$'RESOLJB_$((uptraj)) eval RESOLINC_$((uptraj-1))='$'RESOLJB_0 eval GTYPEINC_$uptraj=$(eval echo '$'GTYPEINC_$((MXUP_TRAJ - 1))) eval TSTEP_INC_$uptraj=$(eval echo '$'TSTEP_INC_$((MXUP_TRAJ - 1))) eval ITER_MIN_$uptraj=$(eval echo '$'ITER_MIN_$((MXUP_TRAJ - 1))) fi if [[ $LENKF = true ]] ; then export LINITCV=true export LTRAJHR=true fi # ln -sf $DATA/ifs/rtable* . ln -sf $DATA/an/wavelet_T$(eval echo '$'RESOLINC_$uptraj)_L${LEVELS}.cv wavelet.cv ln -sf $DATA/an/stabal96.cv stabal96.cv ln -sf $DATA/an/stabal96.bal stabal96.bal month=$( echo $BASETIME | cut -c5-6 ) ln -sf $XDATA/an/stdev_of_climate/m$month stdev_of_climate # IFS to OOPS-IFS comparison: weak constraint is switched off in PrepIFS if [[ $LWEAK4DVAR = true ]] ; then rm -f moderr.cov ln -s $DATA/an/moderr.cov moderr.cov fi # ln -s -f $DATA/ifsdata/* . ## This is set to true to revert to the old (41R1) way ## of computing the hybrid wavelet JB LHYBRID=false if [[ $LHYBRID = true ]] ; then N_HYB_DATES=12 N_HYB_STEP=3 N_BGDATES=$(( (N_HYB_DATES/N_HYB_STEP) + N_BGDATES )) echo 'N_BGDATES with HYBRID: ', $N_BGDATES fi if [[ $LEDA_ERRORS_OUT = true && $LHYBRID = false ]] ; then N_EDA_BGDATES=$(( $(datediff -h $BASETIME $INIBEGINDATE$INIBEGINHOUR)/$N_BGSTEPBY + 1 )) N_EDA_BGDATES=$(( N_EDA_BGDATES * N_BGDATES )) echo N_BGDATES= $N_BGDATES N_EDA_BGDATES=$N_BGDATES NSAMPLES=$(( $N_EDA_BGDATES * $ENDANENS )) echo 'N_EDA_SAMPLES available for JB computation: ',$NSAMPLES echo 'Required N_EDA_SAMPLES is: '$(( $N_BGDATES * $ENDANENS )) if [[ $N_EDA_BGDATES -lt $N_BGDATES ]] ; then echo 'Not enough samples to compute robust JB, exiting...' exit 1 fi fi fi #======================================================================= # Ensemble data assimilation #======================================================================= member=${_MEMBER_} endamembers=$(( ENDANENS + 1 )) if [[ $ENDANENS -gt 0 ]] ; then numstr="-m $member" else numstr="" fi if [[ $member -gt 0 && $NMINSIMPHYMEM -ne -1 ]]; then NMINSIMPHY=$NMINSIMPHYMEM fi lwribvec="" if [[ $member -eq 0 ]] ; then freeze_varbc=.${LCONSTANT_VARBC}. else freeze_varbc=.true. if [[ LBGPERT = true && $uptraj -eq 0 ]] ; then lwribvec="LWRIBVEC=.true.," fi fi #====================================================================== # Long window #====================================================================== anoffset=$( datediff -h $WINDOW_END $BASETIME ) anoffset_4v=$WINDOW_LENGTH_4D_TOT #======================================================================= # 4D-Var tests #======================================================================= if [[ $LTESTINC = true ]] ; then ltestinc=".true." steptest=10800.0 if [[ $uptraj -eq 0 && ! -d TEST4DINC ]] ; then mkdir TEST4DINC rm -f test4dinc_gg RESTEST=255 [[ $RESTEST -le $RESOL ]] || RESTEST=$RESOL if [[ $ECCODES_API_SEED = grib1 ]] ; then ggml_dir=$XDATA/an/main_gg else ggml_dir=$XDATA/an/main_gg_grib2 fi ln -s $ggml_dir/ggml_T${RESTEST}${GTYPE}_L${LEVELS} test4dinc_gg fi else ltestinc=".false." steptest=0.0 fi #======================================================================= # Weak constraint 4D-Var #======================================================================= lfgerr=".false." # IFS to OOPS-IFS comparison: weak constraint is switched off in PrepIFS if [[ $LWEAK4DVAR = true && $LFSOBS != true && $L_CALCULATE_JBW_STATS != true ]] ; then LMODERR=true rm -f spmoderrin${cuptra}* if [[ $NTYPE_MODERR = 1 ]] ; then rm -f spmoderrfg${cuptra}* typeset -RZ2 comp=1 while [[ $comp -le $NDIM_MODERR ]] ; do ln -s $WDIR/spmoderrfg${cuptra}${comp} spmoderrfg${cuptra}${comp} comp=$((comp + 1)) done fi if [[ $NSUBWIN4D -gt 0 ]] ; then if [[ $uptraj = 0 ]] ; then typeset -RZ2 comp=1 rm -f spmoderrfg${cuptra}* while [[ $comp -le $NDIM_MODERR ]] ; do ln -s $WDIR/spmoderr_bg_${comp} spmoderrfg${cuptra}${comp} comp=$((comp + 1)) done else typeset -RZ2 um1=$(( uptraj - 1 )) rm -f spmoderrfg${cuptra}* typeset -RZ2 comp=1 while [[ $comp -le $NDIM_MODERR ]] ; do ln -s $WDIR/spmoderrin${um1}${comp} spmoderrfg${cuptra}${comp} comp=$((comp + 1)) done fi fi [[ $LBGMODERR = true || $uptraj -gt 0 ]] && lfgerr=".true." else LMODERR=false fi if [[ $NSUBWIN4D -gt 0 ]] ; then MIN_LENGTH=$((NSUBWIN4D * WINDOW_LENGTH_4D)) else MIN_LENGTH=$WINDOW_LENGTH_4D fi #======================================================================= # Observation error correlation #======================================================================= LADJMIN=${_ADJMIN_} if [[ $uptraj -eq 0 && $LOBSCOR = true ]] ; then rm -f obscor.aux.dat fi #======================================================================= # Basic parameters #======================================================================= lvdfmin=".true." if [[ $mode = fce && $IFSMODE = 3d_fgat ]] ; then resjob=$RESOLFCE else eval resjob='$'RESOLINC_$uptraj fi if [[ $mode = min && $IFSMODE = 3d_fgat ]] ; then resjob_prev=$RESOLFCE elif [[ $uptraj -gt 0 ]] ; then eval resjob_prev='$'RESOLINC_$((uptraj-1)) else resjob_prev=$resjob fi if [[ $IFSMODE = 3d_fgat && $mode = min ]] ; then cnmexp=VA${cuptra} else cnmexp=$EXPVER fi #======================================================================= # Bias correction #======================================================================= if [[ $LVARBC = true ]] ; then # Radio-Sonde mask rm -f mask_asc ln -s $DATA/sat/mask_asc mask_asc [[ -s mask_asc ]] || { echo "error linking RS-mask file " ; exit 2 ; } # Sfcobs VARBC_PS=${VARBC_PS:=false} VARBC_APD=${VARBC_APD:=false} else VARBC_PS=${VARBC_PS:=false} VARBC_APD=${VARBC_APD:=false} fi #======================================================================= # Input data #======================================================================= if [[ $FPOSINC = true || $FPOSCLD = true ]] ; then cldparm="YL_NL%NREQIN=1,YI_NL%NREQIN=1,YA_NL%NREQIN=1,YR_NL%NREQIN=1,YS_NL%NREQIN=1," else cldparm="YL_NL%NREQIN=-1,YI_NL%NREQIN=-1,YA_NL%NREQIN=-1,YR_NL%NREQIN=-1,YS_NL%NREQIN=-1," fi if [[ $OOPSRUN = true ]] ; then cldparm="YL_NL%NREQIN=0,YI_NL%NREQIN=0,YA_NL%NREQIN=0,YR_NL%NREQIN=0,YS_NL%NREQIN=0," fi if [[ $LOZONE = true ]] ; then ozonparm="" else ozonparm="YO3_NL%NREQIN=0," fi gtypeinc=$(eval echo '$'GTYPEINC_$uptraj) backgroundshml=backgroundshml_${resjob}${gtypeinc} backgroundggsfc=backgroundggsfc_${resjob}${gtypeinc} backgroundggml=backgroundggml_${resjob}${gtypeinc} if [[ $IFSMODE = 4d_inc && $LPROPTL = true ]] ; then backgroundshml_fgat=backgroundshml_fgat_$resjob fi rm -f errgrib* for errgribfile in $WDIR/errgrib* ; do ln -s $errgribfile . done #======================================================================= # Setup Augmented Control Variable #======================================================================= if [[ ${LJB_ACV} = true ]] ; then . preacv rm -f $WDIR/vardir/AISH${cnmexp}999+* rm -f $WDIR/vardir/AIGG${cnmexp}999+* else namppcacv="" fi #======================================================================= # Setup COMPO script and namelist variables #======================================================================= if [[ $LMACC = true ]] ; then . compo_setup fi #======================================================================= # Input of CO2 diurnal fluxes #======================================================================= if [[ $LMACC = true ]] ; then if [[ $lco2diu = true ]] ; then rm -f CO2CLIM${EXPVER}INIT ln -s $WDIR/CO2CLIM${EXPVER}INIT_$resjob CO2CLIM${EXPVER}INIT fi lghgrttov=${LGHG_RTTOV:=false} else lghgrttov=false lco2diu=false gems_co2_flux_setup="" lfire=false linj=false linj_chem=false gems_ghg="" gems_aero="" gems_naeaer="" fi #======================================================================= # Decide on cold or warm minimization start: # lwarm_rd is true if the Hessian should be read # lwarm_wr is true if the Hessian should be written #======================================================================= if [[ $uptraj -gt $((UPTRAJ_FCE+1)) && $resjob -lt 255 ]] ; then lwarm_rd=.true. else lwarm_rd=.false. fi lwarm_wr=.false. if [[ $uptraj -lt $(( MXUP_TRAJ - 1 )) ]] ; then eval resjob_next='$'RESOLINC_$((uptraj + 1)) if [[ $resjob_next -lt 255 ]] ; then lwarm_wr=.true. fi lwrievec=.true. else if [[ $IFSMODE = 3d_fgat && $mode = fce ]] ; then lwrievec=.true. else lwrievec=.false. fi fi # Set conditions for FG not BG and nozero control vector on first minimization l_fgnotbg=".false." LREADCV=false #gabor #gaborif [[ $LFGNOTBG = true ]] && [[ $LCONTINUOUS_DA = true ]] && [[ ${STREAM} = LWDA ]] && [[ $uptraj -eq 0 ]]; then if [[ $LFGNOTBG = true ]] && [[ ${STREAM} = LWDA ]] && [[ $uptraj -eq 0 ]]; then l_fgnotbg=".true." LREADCV=true fi # Conditions for writing out of control vector last minimization lwricv=".false." #gabor #gabor if [[ $LFGNOTBG = true ]] && [[ $LCONTINUOUS_DA = true ]] && [[ ${STREAM} = DA ]]; then #gabor here i absolutely dont understand why the lcont_da was in the condition if [[ $LFGNOTBG = true ]] && [[ ${STREAM} = DA ]]; then # Make sure lwricv is true last minimization of DA - it is by default true in all min except last lwricv=".true." # Uncomment below if using preconditioning vectors from DA in LWDA # lwrievec=".true." fi #======================================================================= # Link background and initial point of the minimization #======================================================================= rm -f ICMSH${cnmexp}INIT ICMSH${cnmexp}IMIN ICMRF${cnmexp}0000 \ ICMGG${cnmexp}INIT ICMGG${cnmexp}IMIN ICMGG${cnmexp}IMIUA ln -s $WDIR/${backgroundshml} ICMSH${cnmexp}INIT #for suarg only ln -s $WDIR/${backgroundggsfc} ICMGG${cnmexp}INIT #for suarg only if [[ $IFSMODE = 4d_inc && $LPROPTL = true && $uptraj -gt 0 ]] ; then ln -s $WDIR/${backgroundshml_fgat} ICMRF${cnmexp}0000 #for Jb else ln -s $WDIR/${backgroundshml} ICMRF${cnmexp}0000 #for Jb fi ln -s $WDIR/${backgroundggsfc} ICMGG${cnmexp}IMIN #for low-res trajectory if [[ $FPOSINC = true || $FPOSCLD = true ]] ; then ln -s $WDIR/${backgroundggml} ICMGG${cnmexp}IMIUA #for low-res trajectory fi if [[ $uptraj -eq 0 ]] ; then rm -f ICMSH${cnmexp}IMIN ln -s $WDIR/${backgroundshml} ICMSH${cnmexp}IMIN fi if [[ $OOPSRUN = true ]] ; then LTRAJHR=false LGPINNER=false LRAIN4D=false REDNMC=1.0 [[ $resjob != $RESOL ]] && exit 1 ln -s $WDIR/reftrajggml ICMGG${cnmexp}IMIUA #for low-res trajectory fi if [[ $uptraj -gt 0 ]] ; then if [[ $LTRAJHR != true ]] ; then # calculate low-res trajectory by truncating the previous high-res trajectory rm -f ICMSH${EXPVER}IMIN date=$( echo $WINDOW_START | cut -c1-8 ) hour=$( echo $WINDOW_START | cut -c9-10 ) if [[ $LOZONE = true ]] ; then o3type="both" else o3type="none" fi gptosp4=false recipient="co5 dag diad" mailx -s "minimization warning" $recipient <> $IOASSIGN fi rm -f $WDIR/${mode}_${uptraj}.* || : printenv | sort | grep ODB fi #======================================================================= #-- CMA floating point checks (from cy19r2) #======================================================================= if [[ $CLASS = rd ]] ; then # Other variables than CMAFLP_CHECK are not presently checked for export CMAFLP_CHECK=3 # Check CMA upon read AND write export CMAFLP_CHECK_TINY=1 export CMAFLP_CHECK_NAN=1 export CMAFLP_CHECK_INF=1 fi #======================================================================= # Dr Hook & GSTATS #======================================================================= export DR_HOOK_PROFILE=$WDIR/drhook.${mode}_${uptraj} [[ ${LSC_BUILD_ARRAY_BOUND_CHECK:=false} = true || ${LSC_BUILD_INITNAN:=false} = true ]] && nundef="NUNDEFLD=1," || nundef="" nproma="" if [[ ${_IFS_PRECISION_} = DP ]] ; then [[ ${DEFAULT_NPROMA_DP:-0} != 0 ]] && nproma="NPROMA=$DEFAULT_NPROMA_DP," else [[ ${DEFAULT_NPROMA_SP:-0} != 0 ]] && nproma="NPROMA=$DEFAULT_NPROMA_SP," fi rm -f gstats.xml ln -s $LOGS/gstats.${_TASK_}.${ECF_TRYNO}.xml gstats.xml #======================================================================= # Resolution-sensitive settings #======================================================================= if [[ $IFSMODE = 3d_* ]] ; then advscheme="eul" lvertfe=.false. lslag=.false. else advscheme="sli" lvertfe=.true. lslag=.true. fi eval tstep='$'TSTEP_INC_$uptraj tstep_tra=$tstep if [[ $IFSMODE = 4d_inc && $LPROPTL = true ]] ; then lproptl="LPROPTL=.true.," else lproptl="" fi #======================================================================= # Generate namelist #======================================================================= rtol_check_gradient=0.1 if [[ $mode = fce && $IFSMODE = 3d_fgat ]] ; then niter=$ITER_FCE rtol_check_gradient=2.0 else eval niter='$'ITER_MIN_$uptraj fi #[[ $WINDOW_LENGTH_4D == 24 ]] && rtol_check_gradient=$(($rtol_check_gradient * 2.0)) if [[ $mode = min ]] ; then # Previous hard-wired value for $mode = min niter_minimum=10 else # Previous setting for $mode = fce niter_minimum=$niter fi if [[ $LIFSASOOPS = true ]] ; then # Set the number of iterations niter_minimum=$niter fi if [[ $mode = min && $LFSOBS = false ]] ; then rcvge="0.05" else rcvge="1.0E-20" fi if [[ $mode = min && $IFSMODE = 3d_fgat ]] ; then nsimu=$(( niter + 10 )) nmem_guess_runtime="NMEM_GUESS_RUNTIME=20," else nsimu=$niter nmem_guess_runtime="" fi #MARR changed the convergence_check abort level if [[ $niter -gt 25 ]] ; then norm_reduction_abort_level="0.30" #MARR norm_reduction_abort_level="0.3" else norm_reduction_abort_level="1.0" fi # Different settings for Single-Observation Experiments if [[ $LVAR_ONE_OBS = true ]] ; then rcvge="0.05" niter_minimum=1 norm_reduction_abort_level="1.0" fi if [[ $IFSMODE = @(4d_inc|3d_fgat) ]] ; then ctype=4v nstop=$(( MIN_LENGTH * 3600 / tstep )) lagphy=.true. anoffset=$anoffset_4v else ctype=an if [[ $uptraj -lt ${MXUP_TRAJ} ]] ; then nstop=0 else nstop=1 fi lagphy=.false. fi tfclen='t'$nstop ltovscv="" luse_eda_skt=${LUSE_EDA_SKT} lcldsink=.true. if [[ $L_CALCULATE_JBW_STATS = true ]] ; then ltovscv="LTOVSCV=.false.," fi if [[ ${LTOVSCV_ACV:-false} = true ]] ; then ltovscv="LTOVSCV=.false.," luse_eda_skt=.false. lcldsink=.false. fi if [[ (($IFSMODE = 3d_fgat) || ($IFSMODE = 4d_inc && $LPROPTL = true)) && ($OOPSRUN != true) ]] ; then l3dfgat="L3DFGAT=.true.," ljc="LJC=.true.," ljcnmtl="LJCNMTL=.true.," ljcdfi="LJCDFI=.false.," lusejcdfi="LUSEJCDFI=.false.," alphag="ALPHAG=1000000." elif [[ $LFSOBS = true || $OOPSRUN = true ]] ; then ltovscv="LTOVSCV=.false.," ljc="LJC=.false.," ljcdfi="LJCDFI=.false.," lusejcdfi="LUSEJCDFI=.false.," l3dfgat="" ljcnmtl="" alphag="" elif [[ ${LVAR_ONE_OBS} = true ]] ; then l3dfgat="" ljc="" ljcnmtl="" ljcdfi="LJCDFI=.false.," lusejcdfi="LUSEJCDFI=.false.," alphag="" else l3dfgat="" ljc="" ljcnmtl="" ljcdfi="" lusejcdfi="" alphag="" fi # IFS to OOPS-IFS comparison: (this feature is in testing in OOPS) if [[ $LIFSASOOPS = true ]] ; then ljcdfi="LJCDFI=.false.," fi # To test convergence after two iterations in a SingleObservation experiment, # use of JCDFI must be deactivated, uncommenting the following block will # achieve that. #if [[ $LVAR_ONE_OBS = true ]] ; then # lusejcdfi="LUSEJCDFI=.false.," #fi if [[ $mode = fce ]] ; then if [[ $niter -lt 50 ]] ; then nbgvecs="NBGVECS=$(( (1+niter)/2 ))," else nbgvecs="" fi fi if [[ $mode = min ]] ; then nmupd=$(( niter - 1 )) max_nmupd=5 if [[ $nmupd -gt $max_nmupd ]] ; then nmupd=$max_nmupd fi fi linfoconv=.true. if [[ $IFSMODE = 3d_fgat ]] ; then lcongrad=.false. linfoconv=.false. if [[ $mode = fce ]] ; then lvarqcg=.false. else lvarqcg=.true. fi else lcongrad=.true. if [[ $uptraj -gt 0 ]] ; then lvarqcg=.true. else lvarqcg=.false. fi fi nprtjo=$(( WINDOW_LENGTH_4D / PERIOD_4D )) [[ $nprtjo -lt 1 ]] && nprtjo=1 if [[ $mode = fce || $IFSMODE = @(4d_inc|3d_fgat) ]] ; then l131tl=.true. lobstl=.true. else l131tl=.false. lobstl=.false. fi noutput=1 # [[ ${ECF_TRYNO:-0} -gt 1 && $CLASS = od ]] && noutput=2 if [[ $CLASS = od || $LFSOBS = true || $niter -le 20 ]] ; then check_convergence=.false. else check_convergence=.true. fi if [[ $mode = fce && $IFSMODE = 3d_inc ]] ; then ltrajgp="LTRAJGP=.false.," else ltrajgp="" fi #======================================================================= # Extended linearized longwave radiation #======================================================================= if [[ $LINRADEX = true ]] ; then leradsw2=${_LERADSW2_} leradn2=".true." ledcld2=".true." else leradsw2=".false." leradn2=".false." ledcld2=".false." fi #======================================================================= # Post-processing: # # minimization: # step 0 and analysis times # # Hessian singular vectors: # no post-processing # # (NB In order to avoid doing post-processing, set # nposts(0)=1 # nposts(1)=(number > max step number)) # #======================================================================= bigstep=100000 if [[ ($IFSMODE = 3d_fgat && $mode = fce) || ($OOPSRUN = true) ]] ; then # disable postprocessing nbposts=1 ppsteplist="${bigstep}," else if [[ $IFSMODE != 3d_fgat && $uptraj -eq $((MXUP_TRAJ - 1)) ]] ; then ppfirst=$(( WINDOW_OFFSET_4D % PPSTEP_INC )) if [[ $ppfirst -eq 0 ]] ; then nbposts=0 ppsteplist="" hinc=0 else nbposts=1 ppsteplist="0," hinc=$ppfirst fi while [[ $hinc -le $MIN_LENGTH ]] ; do ppsteplist="${ppsteplist}$(( hinc * 3600 / tstep ))," nbposts=$((nbposts+1)) hinc=$((hinc+PPSTEP_INC)) done else if [[ $NSUBWIN4D -gt 0 ]] ; then nbposts=$NSUBWIN4D ppsteplist="" isub=1 while [[ $isub -le $NSUBWIN4D ]] ; do ppsteplist="${ppsteplist}$(( (isub-1)*WINDOW_LENGTH_4D * 3600 / tstep ))," isub=$(( isub + 1 )) done else if [[ $IFSMODE = 4d_inc && $LPROPTL = true ]] ; then nbposts=2 hinc=$PPSTEP_INC ppsteplist="0,$(( hinc * 3600 / tstep ))," else nbposts=1 ppsteplist="0," fi fi fi fi #======================================================================= # Jb setup #======================================================================= lbalstrato=${LBALSTRATO:=true} rednmc=${REDNMC:=1.1} skyline_tol=0.06 ljbwavelet=${LJBWAVELET:=true} l_calculate_jbw_inv=${L_CALCULATE_JBW_INV:=false} leda_read_av=${LEDA_READ_AV:=true} lnewhum=".false." [[ $EDA_CYCLE_INT -ge 4303 ]] && lnewhum=".true." [[ $LEVELS -ne 137 ]] && lnewhum=".false." #COPINT-123 - TO REVIEW WHEN CAMS UPGRADED TO 137 LEVELS ! #======================================================================= # Architecture-dependent parameters #======================================================================= if [[ $LANOBSENS = true ]] ; then lanobs=".true." else lanobs=".false." fi if [[ $LTRAJHR = true || $OOPSRUN = true ]] ; then lspint=".true." # Grid point q and ozone read from trajectory file else lspint=".false." fi if [[ $LGPINNER = true || $OOPSRUN = true ]] ; then legwwms=".true." lsprt=".true." yo3lgp="$LOZONE" yo3lsp=".false." yqlgp=".true." yqlsp=".false." lepcld="true" ninterptraj=3 if [[ $LOZONE = true ]] ; then no3dggm=2 m3dggm="133,203," else no3dggm=1 m3dggm="133," fi if [[ $LMACC = true ]] ; then if [[ $LGHG = true ]] ; then no3dggm=$((no3dggm+nghg)) m3dggm=${m3dggm}${ghg_nam} fi if [[ $LAERO = true ]] ; then no3dggm=$((no3dggm+naero_cv)) m3dggm=${m3dggm}${aero_cv_nam} fi if [[ $LCHEM = true ]] ; then no3dggm=$((no3dggm+nchem_assim)) m3dggm=${m3dggm}${chem_assim_nam} fi fi m3dspm="130,138,152,155" no3dspm=4 else legwwms=".true." lsprt=".false." yo3lgp="false" yo3lsp="$LOZONE" yqlgp="false" yqlsp="true" lepcld="true" ninterptraj=3 no3dggm=0 m3dggm="0," if [[ $LOZONE = true ]] ; then m3dspm="130,133,203,138,152,155" no3dspm=6 else m3dspm="130,133,138,152,155" no3dspm=5 fi ## naeroml_extra=0 ## aeroml_extra="" fi ncombflen=$(echo "($MBX_SIZE * 0.9)/8" | bc) if [[ $LMACC = true ]] ; then bc_aod_modis_TERRA="LBC_AOD_MODIS_TERRA=.true.," bc_aod_modis_AQUA="LBC_AOD_MODIS_AQUA=.true.," bc_aod_pmap="LBC_AOD_PMAP=.true.," bc_aod_slstr="LBC_AOD_SLSTR=.false.," bc_aod_viirs="LBC_AOD_VIIRS=.false.," bc_co_mopitt="LBC_CO_MOPITT=.false.," bc_co_iasi="LBC_CO_IASI=.true.," bc_no2_gome2="LBC_NO2_GOME2=.true.," bc_go3_omps_nadp="LBC_GO3_OMPS_NADP=.true.," if [[ $BASETIME -ge 2018032000 ]] ; then # Activate GOME-2 NO2 assimilation bc_no2_gome2="LBC_NO2_GOME2=.false.," bc_no2_omi="LBC_NO2_OMI=.true.," else bc_no2_gome2="LBC_NO2_GOME2=.true.," bc_no2_omi="LBC_NO2_OMI=.false.," fi bc_go3_tropomi="LBC_GO3_TROPOMI=.true.," bc_no2_tropomi="LBC_NO2_TROPOMI=.false.," bc_co_tropomi="LBC_CO_TROPOMI=.true.," bc_ch4_tropomi="LBC_CH4_TROPOMI=.true.," else bc_aod_modis_TERRA="" bc_aod_modis_AQUA="" bc_aod_pmap="" bc_aod_slstr="" bc_aod_viirs="" bc_co_mopitt="" bc_co_iasi="" bc_no2_gome2="" bc_no2_omi="" bc_go3_omps_nadp="" bc_go3_tropomi="" bc_no2_tropomi="" bc_co_tropomi="" bc_ch4_tropomi="" fi if [[ $mode = fce && $resjob -gt 21 ]] ; then lclmsfce=.true. else lclmsfce=.false. fi # set nspecresmin to min($resjob,nsmin_wavelet)+1 (see ifs/var/sujb.F90) # nspecresmin is used for limiting the maximum value of NPRTRW nspecresmin=$((42+1)) if [[ $resjob -lt $nspecresmin ]] ; then nspecresmin=$((resjob+1)) fi #======================================================================= # Set cloudy IR parameters #======================================================================= lircloud=false if [[ $LIRCLD_ASSIM_HIRS == true ]] || \ [[ $LIRCLD_ASSIM_AIRS == true ]] || \ [[ $LIRCLD_ASSIM_IASI == true ]] ; then lircloud=true fi # IFS to OOPS-IFS comparison: if [[ $LIFSASOOPS = true ]] ; then lcldsink=.false. fi if [[ $OOPSRUN = true ]] ; then nproc=$((NPROCA*NPROCB)) LVARBC=false nproma="NPROMA=-24," nprtrw="NPRTRW=$nproc," nprtrv="NPRTRV=1," nouttype="NOUTTYPE=1," else nprtrw="" nprtrv="" nouttype="" fi lgradsp=false lecompgrid=false if [[ $gtypeinc = "l_2" ]] ; then lgradsp=true fi if [[ $gtypeinc = "_4" ]] ; then lecompgrid=true fi lvarqc_hirs=.TRUE. lvarqc_iasi=.FALSE. # gabor : PEter ahouldn't here be and and STREAM=DA ???????? if [[ $LCONTINUOUS_DA = true && $STREAM = @(DA|SCDA) ]]; then lvarqc_hirs=.FALSE. fi ######################################################################## # Turn off snowML for Trajectory and minimization in NAEPHY and NAMDPHY lsnml=".false." ncsnec=1 ######################################################################## #========================================================================= cat >namlistmin <> namlistmin << EOF &NAEAER NTYPAER=${aero_ntypaer}, $(echo $gems_naeaer | perl -pe 's/!/\n/g') LAERVOL=${LAERVOL}, LSEASALT_RH80=${LSEASALT_RH80:=true}, / EOF fi fi if [[ $OOPSRUN != true ]] ; then nobsprof_7=3 if [[ ${resjob} -le 191 ]] ; then nobsprof_7=2 fi # IFS to OOPS-IFS comparison: if [[ $LIFSASOOPS = true ]] ; then nobsprof_7=3 fi nobsprof_10=7 if [[ $LEVELS -lt 91 ]] ; then nobsprof_10=1 # This isn't as good, but is more robust with low-top model (e.g. CAMS L60). fi luse_eda_skt=false if [[ ${LUSE_EDA_SKT} = true && ${LEDA_ERRORS_IN} = true ]] ; then luse_eda_skt=true fi cat >>namlistmin <>namlistmin <>namlistmin <>namlistmin <>namlistmin <>namlistmin <>namlistmin <>namlistmin <>namlistmin <> namlistmin <>namlistmin <>namlistmin <>namlistmin <>namlistmin <>namlistmin fi # J.Barre: ensure that for compo EDA we have a wavelet_out if ALPHA_HYBRID_JB strictly 0 # no wavelet_out is outputed by ifsmin. Using such low value solve problems with complex eigenvalues # when using significant ALPHA_HYBRID_JB (e.g. 0.3 or 0.1) with compo field due to sharp gradients # and low NEDA (to be diagnosed and fixed in the future) if [[ $LMACC = true ]] ; then alpha_hyb=0.001 else alpha_hyb=0.3 fi # # Gabor: # to avoid failure in low member EDA for CI-test: # if [[ $ENDANENS -eq 5 ]] ; then alpha_hyb=0.1 fi cat >>namlistmin <>namlistmin <>namlistmin <> namlistmin << EOF &NAMCOMPO LCHEM_DIA=false, LCHEM_DDFLX=$LCHEM_DDFLX, LCOMPO_DDFLX_DIR=$LCOMPO_DDFLX_DIR, LCHEM_TROPO=$LCHEM_TROPO, LFIRE=$lfire, LINJ=$linj, LINJ_CHEM=$linj_chem, LAERNITRATE=${LAERNITRATE}, LAERSOA=${LAERSOA}, AERO_SCHEME="$AERO_SCHEME", $(echo $gems2namcompo | perl -pe 's/!/\n/g') / EOF if [ ${LCHEM} = true ] ; then # cat >> namlistmin << EOF # &NAMCHEM # / #EOF cat >> namlistmin << EOF &NAMCHEM CHEM_SCHEME="${CHEM_SCHEME}", LCHEM_DIAC=false, LCHEM_LIGHT=false, LCHEM_ACNOX=false, LCHEM_0NOX=false, LCHEM_TL=${LCHEM_TL}, KCHEM_NOXADV=0, LCHEM_ANAO3=false, / EOF # export for namlist prep export CHEM_LIST=$chem_list export CHEM_SFC_NAM=$chem_sfc_out # NCHEMSFC should be number of post processed tc sfc extra fields for chemistry export NCHEMSFC=$nchemsfc # export CHEM_NAM=${chem_nam}212255,212254 # export NCHEM=$(( nchem + 2 )) export CHEM_NAM=${chem_ml_assim} export NCHEM=$nchem rm -f namlistmin.chem perl $TMPDIR/chem_ifsnam.pl < namlistmin > namlistmin.chem mv namlistmin.chem namlistmin fi fi # Modify NAMDPHY to be sure that NCSNEC=1 cat >> namlistmin << EOF &NAMDPHY NCSNEC=${ncsnec}, / EOF #Relaxation cat >>namlistmin <>namlistmin rm -f fort.4 ln -s namlistmin fort.4 #======================================================================= # If you want to watch ifs.stat, move it to $ADIR #======================================================================= rm -f ifs.stat if [[ ${MRFSDIR:-no} != no ]] ; then ln -s ${MRFSDIR}/ifs.stat . fi #======================================================================= # Execute minimization #======================================================================= banner ${mode}_${uptraj} || : if [[ $STREAM = LWDA ]] ; then bpath=$(dirname $BINS)/$STREAM/bin else bpath=$BINS fi rm -f NODE* stdo.lst stderr.lst if [[ $NSUBWIN4D -eq 0 || 0$uptraj -eq $((MXUP_TRAJ - 1)) ]] ; then rm -f MISH${EXPVER}999* MIGG${EXPVER}999* fi if [[ $IFSMODE = 4d_inc && $LPROPTL = true ]] ; then rm -f 01${EXPVER}999* fi if [[ $L_CALCULATE_JBW_STATS = true ]] ; then ##JBWAV_DIR=$WDIR/vardir/T${resjob} eval resol_jb='$'RESOLJB_$uptraj resjob=$resol_jb NSMAX_TRAJ=$resjob JBWAV_DIR=$WDIR/vardir/T${resol_jb} thisdir=$(pwd) list_files=$(ls -1) if [[ $thisdir != $JBWAV_DIR ]] ; then for file in ${list_files} ; do if [[ -f ${file} && ${file} -nt ${JBWAV_DIR}/$file ]] ; then rm -f ${JBWAV_DIR}/$file cp $file ${JBWAV_DIR}/ fi done fi echo 'Copy background fields', 'LENKF= ',$LENKF if [[ $LENKF = true ]] ; then ## Hybrid Gain EnDA echo 'Copy background fields', 'LENKF= ',$LENKF rm -f ${JBWAV_DIR}/ICMRF${cnmexp}0000 ln -sf $WORK/ELDA/$BASETIME/an/${backgroundshml} ${JBWAV_DIR}/ICMSH${cnmexp}INIT ln -sf $WORK/ELDA/$BASETIME/an/${backgroundshml} ${JBWAV_DIR}/ICMRF${cnmexp}0000 ln -sf $WORK/ELDA/$BASETIME/an/${backgroundggsfc} ${JBWAV_DIR}/ICMGG${cnmexp}INIT ln -sf $WORK/ELDA/$BASETIME/an/${backgroundggsfc} ${JBWAV_DIR}/lowres_gg ln -sf $WORK/ELDA/$BASETIME/an/${backgroundggml} ${JBWAV_DIR}/main_gg ln -sf $WORK/ELDA/$BASETIME/an/reftrajggml ${JBWAV_DIR}/ICMGG${cnmexp}IMIUA ln -sf $WORK/ELDA/$BASETIME/an/${backgroundggml} ${JBWAV_DIR}/backgr_gg$uptr2 else # standard EDA echo 'Copy background fields', 'Standard EDA ' ln -sf $WDIR/${backgroundshml} ${JBWAV_DIR}/ICMSH${cnmexp}INIT ln -sf $WDIR/${backgroundggsfc} ${JBWAV_DIR}/ICMGG${cnmexp}INIT ln -sf $WDIR/${backgroundggsfc} ${JBWAV_DIR}/lowres_gg ln -sf $WDIR/${backgroundggml} ${JBWAV_DIR}/main_gg fi cd $JBWAV_DIR fi #======================================================================= # Run OOPS #======================================================================= if [[ $OOPSRUN = true ]] ; then yyyy=$( echo $BASETIME | cut -c1-4 ) mm=$( echo $BASETIME | cut -c5-6 ) dd=$( echo $BASETIME | cut -c7-8 ) hh=$( echo $BASETIME | cut -c9-10 ) isoantime=${yyyy}-${mm}-${dd}T${hh}:00:00Z echo "isoantime is $isoantime" yyyy=$( echo $WINDOW_START | cut -c1-4 ) mm=$( echo $WINDOW_START | cut -c5-6 ) dd=$( echo $WINDOW_START | cut -c7-8 ) hh=$( echo $WINDOW_START | cut -c9-10 ) isobegin=${yyyy}-${mm}-${dd}T${hh}:00:00Z echo "isobegin is $isobegin" cat > $WDIR/3dvar.json <&1 | safecat -i -o rp_ifs4dvar || { set +e echo "ifs4dvar has failed" safecat NODE* safecat ifs.stat safecat $WDIR/${mode}_${uptraj}.* USERS="integration_team" ERR="CONGRAD: SPTSV/DPTSV returned non-zero info" grep "$ERR" rp_ifs4dvar && USER==emos && mailx $USERS -s "$ECF_HOST:${ECF_PORT}$ECF_NAME - rerun with LEKPERT and LEKPERTS=.false." < /dev/null safecat rp_ifs4dvar set -e exit 1 } set +o pipefail else #======================================================================= # Run IFS #======================================================================= rm -f diagvar.txt get_exe -f ${IFS_EXECUTABLE} # Create links to useful debugging info into log dir ln -sf $LOGS/ifs.log.${_TASK_}.$ECF_TRYNO rp_ifs_exe ln -sf ifs.log.${_TASK_}.$ECF_TRYNO $LOGS/ifs.err.${_TASK_}.$ECF_TRYNO ln -sf $LOGS/ifs.stat.${_TASK_}.$ECF_TRYNO ifs.stat ln -sf $LOGS/NODE.001_01.${_TASK_}.$ECF_TRYNO NODE.001_01 ln -sf $LOGS/gstats.${_TASK_}.${ECF_TRYNO}.xml gstats.xml set -o pipefail run_parallel ${IFS_EXECUTABLE} -ft$nstop -t $tstep -v ecmwf -e $cnmexp -c 131 -a $advscheme 2>&1 | safecat -i -o rp_ifs_exe || { ls -ltr set +e safecat NODE* safecat ifs.stat safecat $WDIR/${mode}_${uptraj}.* safecat rp_ifs_exe set -e exit 1 } set +o pipefai fi # OOPSRUN echo "L_CALCULATE_JBW_STATS = " $L_CALCULATE_JBW_STATS if [[ $L_CALCULATE_JBW_STATS = true ]] ; then echo "END of JB WAVELET CALCULATION, saving wavelet_out.cv and exiting..." edir=$WORK/eda_err CHECK_DIR $edir if [[ $LEDA_ERRORS_OUT = true ]] ; then CHECK_DIR $edir/JB/ cp -f ${JBWAV_DIR}/wavelet_out_T${resjob}.cv $edir/JB/wavelet_out_T${resjob}_L${LEVELS}_${BASETIME}.cv else cp -f ${JBWAV_DIR}/wavelet_out_T${resjob}.cv $edir/wavelet_out_T${resjob}_L${LEVELS}_${BASETIME}.cv fi safecat NODE* safecat ifs.stat exit 0 fi set +e if [[ $IFSMODE = 4d_inc && $LPROPTL = true && $OOPSRUN != true ]] ; then typeset -RZ2 hh hh=$PPSTEP_INC mv MISH${EXPVER}999+000000 MISH${EXPVER}999+000000save cp 01${EXPVER}999-00${hh}00 MISH${EXPVER}999+000000 if [[ $LGPINNER = true ]] ; then mv MIGG${EXPVER}999+000000 MIGG${EXPVER}999+000000save ###cp 01${EXPVER}999-00${hh}00 MIGG${EXPVER}999+000000 echo What do we do here ?? exit 123 fi fi safecat NODE* safecat ifs.stat safecat $WDIR/${mode}_${uptraj}.* set -e if [[ $LIST_VARDIR = true ]] ; then ls -ltr fi #======================================================================= if [[ $DR_HOOK = true && -f ${DR_HOOK_PROFILE}.1 ]] ; then head -100 ${DR_HOOK_PROFILE}.1 || : fi if [[ $DR_HOOK = true && -f ${DR_HOOK_PROFILE}.1-mem ]] ; then head -100 ${DR_HOOK_PROFILE}.1-mem || : fi #======================================================================= # Update observational audit information #======================================================================= if [[ -f NODE.001_01 && -d $WDIR/$dbname ]] ; then create_audit -f $WDIR/$dbname/$dbname.audit \ -n "$dbname:${IFSMODE}:${mode}:${uptraj}" \ -t JOTABLE \ -c "awk '/Diagnostic JO-table/,/End of JO/' < NODE.001_01" fi #======================================================================= # Save VARBC.cycle file #======================================================================= if [[ $LVARBC = true ]] ; then rm -f $WDIR/VARBC.cycle_min_${uptraj} mv VARBC.cycle $WDIR/VARBC.cycle_min_${uptraj} fi #======================================================================= # Save 4DVAR diagnostic file #======================================================================= rm -f $WDIR/diagvar_min_${uptraj} [[ -f diagvar.txt ]] && mv diagvar.txt $WDIR/diagvar_min_${uptraj} if [[ ${LJB_ACV} = true ]] ; then if [[ -f PAR1DACV.cycle ]] ; then rm -f $WDIR/PAR1DACV.cycle_min_${uptraj} mv PAR1DACV.cycle $WDIR/PAR1DACV.cycle_min_${uptraj} fi fi #======================================================================= # Send an Email if the minimization failed the convergence check #======================================================================= set +e fgrep "CONVERGENCE CHECK" rp_ifs_exe NODE* send_mail=$? set -e if [[ $send_mail -eq 0 ]] ; then if [[ $CLASS = od ]] ; then recipient="integration_team dai dag diad dah" else recipient=$OWNER fi mailx -s "minimization_failure" $recipient <> MISH${cnmexp}999+000000 rm -f AISH${cnmexp}999+000000_${acv_grib_id} AISH${cnmexp}999+000000_${acv_grib_id}.${acv_table} typeset -RZ3 jacv=$((${jacv}+1)) done fi if [[ ${NACVSP_3D} -gt 0 ]] ; then for iacv in {1..${NACVSP_3D}} ; do acv_grib_id=${MACVGRB_3D[${iacv}]} grib_copy -w parameterNumber=${acv_grib_id} AISH${cnmexp}999+000000+${jacv} AISH${cnmexp}999+000000_${acv_grib_id} grib_set -s parameterCategory=${acv_table} AISH${cnmexp}999+000000_${acv_grib_id} AISH${cnmexp}999+000000_${acv_grib_id}.${acv_table} cat AISH${cnmexp}999+000000_${acv_grib_id}.${acv_table} >> MISH${cnmexp}999+000000 rm -f AISH${cnmexp}999+000000_${acv_grib_id} AISH${cnmexp}999+000000_${acv_grib_id}.${acv_table} typeset -RZ3 jacv=$((${jacv}+1)) done fi if [[ ${NACVGP_3D} -gt 0 ]] ; then for iacv in {1..${NACVGP_3D}} ; do kacv=$((${iacv}+${NACVSP_3D})) acv_grib_id=${MACVGRB_3D[${kacv}]} grib_copy -w parameterNumber=${acv_grib_id} AIGG${cnmexp}999+000000+${jacv} AIGG${cnmexp}999+000000_${acv_grib_id} grib_set -s parameterCategory=${acv_table} AIGG${cnmexp}999+000000_${acv_grib_id} AIGG${cnmexp}999+000000_${acv_grib_id}.${acv_table} cat AIGG${cnmexp}999+000000_${acv_grib_id}.${acv_table} >> MIGG${cnmexp}999+000000 rm -f AIGG${cnmexp}999+000000_${acv_grib_id} AIGG${cnmexp}999+000000_${acv_grib_id}.${acv_table} typeset -RZ3 jacv=$((${jacv}+1)) done fi fi mv MISH${cnmexp}999+000000 $WDIR/spinlr${cuptra} if [[ $LGPINNER = true ]] ; then mv MIGG${cnmexp}999+000000 $WDIR/gginlr${cuptra} fi # save increment for late4dstart (last subwindow only) if [[ $uptraj -eq $(( MXUP_TRAJ-1 )) ]] ; then typeset -RZ2 hh hh=$(( $WINDOW_OFFSET_4D % $PERIOD_AN )) while [[ $hh -le $MIN_LENGTH ]] ; do #If-test to symlink in cases where hh is 0, otherwise mv is ok if [[ $hh -eq 0 ]] ; then ln -s $WDIR/spinlr${cuptra} $WDIR/spinlr${cuptra}_$hh if [[ $LGPINNER = true ]] ; then ln -s $WDIR/gginlr${cuptra} $WDIR/gginlr${cuptra}_$hh fi else mv MISH${EXPVER}999+00${hh}00 $WDIR/spinlr${cuptra}_$hh if [[ $LGPINNER = true ]] ; then mv MIGG${EXPVER}999+00${hh}00 $WDIR/gginlr${cuptra}_$hh fi fi hh=$((hh + $PERIOD_AN)) done fi fi if [[ $LARCHINCR = true ]] || [[ $OD_MODE = true && ${_MIXGRIB_} == 0 ]]; then $GRIB2FDB_CMD -f $WDIR/spinlr${cuptra} [[ $LGPINNER = true ]] && \ $GRIB2FDB_CMD -f $WDIR/gginlr${cuptra} fi fi #======================================================================= # Save Model Error #======================================================================= if [[ $LMODERR = true ]] || [[ $OD_MODE = true && ${_MIXGRIB_} == 0 ]] ; then rm -f $WDIR/spmoderrin${cuptra}* typeset -RZ2 comp=1 while [[ $comp -le $NDIM_MODERR ]] ; do mv spmoderrin${cuptra}${comp} $WDIR/spmoderrin${cuptra}${comp} if [[ $uptraj -eq $(( MXUP_TRAJ-1 )) && $NTYPE_MODERR != 1 ]] ; then $GRIB2FDB_CMD -f $WDIR/spmoderrin${cuptra}${comp} fi comp=$((comp + 1)) done fi if [[ $OD_MODE = true && ${_MIXGRIB_} == 1 ]]; then # operational mod to take grib2fdb outside of critical path intofdb fi #======================================================================= # Background perturbation #======================================================================= if [[ $LBGPERT = true && $member -gt 0 && $uptraj -eq 0 ]] ; then typeset -RZ3 mmm=$member mv MB${EXPVER}${mmm} $WDIR/MB${EXPVER}${mmm} mv UA${EXPVER}${mmm} $WDIR/UA${EXPVER}${mmm} fi exit _eof_ifsmin cat >$TMPDIR/ifsgmon <<\_eof_ifsgmon : #include $EXPVER/include/ifsgmon ($EXPVER/ifstraj_999.ecf) #ifsgmon version: 20110117 set -euxv #======================================================================= # # Script ifsgmon # ------------- # # Purpose : Produce Profiles # ------- # # Usage : ifsgmon suffix # ----- # # Parameters : suffix - appendixed to gmon and gprof # ---------- # #======================================================================= set +v get_exe -f ${IFS_EXECUTABLE} if [[ $PROFILE -gt 0 ]]; then if [ ! -f $BINS/gprof ]; then cp /usr/bin/gprof $BINS/gprof chmod +w $BINS/gprof /usr/ccs/bin/ldedit -bmaxdata:0x70000000 $BINS/gprof fi jprof=$BINS/gprof if [ -f gmon.out.0 ]; then mv gmon.out.0 $WDIR/gmon.out.0.$1 $jprof ${IFS_EXECUTABLE}.pg $WDIR/gmon.out.0.$1 > $WDIR/gprof.out.0.$1 jn=$( sed -n "/ cumulative/=" $WDIR/gprof.out.0.$1 ) jj=$( wc -l < $WDIR/gprof.out.0.$1 ) jtail=$(( jj - jn + 3 )) tail -$jtail $WDIR/gprof.out.0.$1 > z head -200 z > $WDIR/gprof.out.0.$1.cut set +x echo "JJJ ------------- PROFILE for $1 ---------" cat $WDIR/gprof.out.0.$1.cut echo "JJJ ------------------------------------------------------" set -x fi if [[ $PROFILE -gt 1 ]]; then jn=$( ls -1 $WDIR/gmon.out.0.traj* $WDIR/gmon.out.0.min* | wc -l ) js=$( ls $WDIR/gmon.out.0.traj* $WDIR/gmon.out.0.min* ) if [[ $jn -gt 1 ]] ; then $jprof $BINS/${IFS_EXECUTABLE}.pg $js > $WDIR/gprof.out.0.all jn=$( sed -n "/ cumulative/=" $WDIR/gprof.out.0.all ) jj=$( wc -l < $WDIR/gprof.out.0.all ) jtail=$(( jj - jn + 3 )) tail -$jtail $WDIR/gprof.out.0.all > z head -200 z > $WDIR/gprof.out.0.all.cut set +x echo "JJJ -------- PROFILE for following gmon.out.0* -----------" ls -l $WDIR/gmon.out.0.traj.* $WDIR/gmon.out.0.min.* cat $WDIR/gprof.out.0.all.cut echo "JJJ ------------------------------------------------------" set -x fi fi fi exit _eof_ifsgmon cat >$TMPDIR/ifstraj <<\_eof_ifstraj : #include $EXPVER/include/ifstraj ($EXPVER/ifstraj_999.ecf) #ifstraj version: 20111123 set -euxv #======================================================================= # # Script ifstraj # ------------- # # Purpose : Run trajectory # ------- # # Usage : ifstraj -u uptraj [-s step] [-r rerun] [-m sat_monitor] [-t fgdir] # ----- # # Parameters : -u uptraj - trajectory update number # ---------- -s step - step (in hours - LATE4DSTART only) # -r rerun - rerun screening for VarBC coldstart (option2) # ---------- -m sat_monitor - passive satellite data monitoring only (true|false) # ---------- -t fgdir - working directory for fg only (monitor|sekf) # #======================================================================= set +v : #include $EXPVER/include/cycle_times ($EXPVER/include/ifstraj) #======================================================================= # # cycle_times # ----------- # # Purpose : Define variables control the date and times for # ------- cycling of the assimilation window. # #======================================================================= IFSMODE=${IFSMODE:=none} PERIOD_4D=${PERIOD_4D:=-999999} WINDOW_LENGTH_4D=${WINDOW_LENGTH_4D:=-999999} WINDOW_OFFSET_4D=${WINDOW_OFFSET_4D:=-999999} REINIWINDOW_LENGTH_4D=${REINIWINDOW_LENGTH_4D:=-999999} NUMINI=${_NUMINI_} PERIOD_BG=${PERIOD_BG:=-999999} echo "NUMINI=$NUMINI" # The variables below are derived from WINDOW_LENGTH_4D and WINDOW_OFFSET_4D # later in this file if WINDOW_LENGTH_4D is specified WINDOW_START=-999999 WINDOW_END=-999999 BKG_TIME=-999999 NXBGTIME=-999999 FIRST_AN=-999999 LAST_AN=-999999 STEP_AN=-999999 NO6HTSL=-999999 #======================================================================= # Determine appropriate value for PERIOD_AN and PERIOD_OBS #======================================================================= PERIOD_AN_ATM=${PERIOD_AN_ATM:=6} PERIOD_AN_SFC=${PERIOD_AN_SFC:=6} LPERIOD_AN_SFC=${LPERIOD_AN_SFC:=false} # Set PERIOD_AN, using $LPERIOD_AN_SFC to select between # surface-related tasks and the atmospheric 4d-var if [[ $LPERIOD_AN_SFC = true ]] ; then PERIOD_AN=${PERIOD_AN_SFC} else PERIOD_AN=${PERIOD_AN_ATM} fi # Allow to override this via ecFlow variable - this enables it to be # optionally relaxed from 6 to 12 in the archiving family for CAMS # experiments if you don't need to archive the 06Z and 18Z analyses # (which aren't used to initialise forecasts in a 03-15 window). PERIOD_AN=${_PERIOD_AN_} echo "PERIOD_AN=$PERIOD_AN" PERIOD_OBS=6 #======================================================================= # Some basic prints #======================================================================= echo "BASETIME=$BASETIME" echo "PERIOD_4D=$PERIOD_4D" echo "WINDOW_LENGTH_4D=$WINDOW_LENGTH_4D" echo "WINDOW_OFFSET_4D=$WINDOW_OFFSET_4D" if [[ $WINDOW_LENGTH_4D -gt 0 ]] ; then WINDOW_CUTOFF_4D=$(( WINDOW_LENGTH_4D - WINDOW_OFFSET_4D )) else WINDOW_CUTOFF_4D=-999999 fi echo "WINDOW_CUTOFF_4D=$WINDOW_CUTOFF_4D" echo "PERIOD_BG=$PERIOD_BG" #======================================================================= # Checks #======================================================================= if [[ $WINDOW_OFFSET_4D -gt $WINDOW_LENGTH_4D ]] ; then echo "Window offset is longer than assimilation window" exit 1 fi if [[ $PERIOD_BG -lt $PERIOD_4D ]]; then case $IFSMODE in 4d_inc|3d_fgat|early_delivery) echo "Background cannot be more recent than previous cycle" exit 1 ;; esac fi #======================================================================= # Determine correct BASETIME #======================================================================= INIBEGINDATE=${_INIBEGINDATE_} _inihour=${_INIBEGINHOUR_} INIBEGINHOUR=$(printf %02d $_inihour) if [[ $FAMILY = */make/* || $FAMILY = */inicond/* ]] ; then if [[ $FAMILY = */make/* ]] ; then CYCLETIME=$(echo ${INIBEGINDATE}${INIBEGINHOUR} | cut -c1-10) fi back=$(( (NUMINI+1) * PERIOD_4D )) CYCLETIME=$( newdate $CYCLETIME -$back ) fi echo "CYCLETIME=$CYCLETIME" #======================================================================= # Split outer loop #======================================================================= NSPLIT4DWIN=${NSPLIT4DWIN:=0} NSUBWIN4D=0 SUBWIN_OFFSET=0 LSPLIT4D_SPINUP=false if [[ $NSPLIT4DWIN -gt 0 ]] ; then subtime=$CYCLETIME isubwin=1 while [[ $isubwin -le $NSPLIT4DWIN ]] ; do if [[ $subtime -ge $INITIME ]] ; then NSUBWIN4D=$isubwin fi isubwin=$((isubwin + 1)) subtime=$(newdate $subtime -$WINDOW_LENGTH_4D) done [[ $NSUBWIN4D -lt $NSPLIT4DWIN ]] && LSPLIT4D_SPINUP=true [[ $NSUBWIN4D -gt 1 ]] && SUBWIN_OFFSET=$(( WINDOW_LENGTH_4D * (NSUBWIN4D-1) )) fi echo "NSPLIT4DWIN=$NSPLIT4DWIN" echo "NSUBWIN4D=$NSUBWIN4D" echo "SUBWIN_OFFSET=$SUBWIN_OFFSET" #======================================================================= # Beginning and end of the current window #======================================================================= if [[ $WINDOW_LENGTH_4D -gt 0 ]] ; then WINDOW_START=$( newdate $CYCLETIME -$WINDOW_OFFSET_4D ) WINDOW_END=$( newdate $CYCLETIME $WINDOW_CUTOFF_4D ) echo "WINDOW_START=$WINDOW_START" echo "WINDOW_END=$WINDOW_END" #======================================================================= # Background #======================================================================= BKG_STEP=${STEP_BG:=3} if [[ $REINITIALIZE = true && $REINI_NOT_ED = true ]] ; then BKG_STEP=$(( BKG_STEP + REINIOFFSET - PERIOD_AN )) fi echo "BKG_STEP=$BKG_STEP" BKG_TIME=$( newdate $WINDOW_START -$BKG_STEP ) echo "BKG_TIME=$BKG_TIME" if [[ $REINITIALIZE = true || $LEDFAMILY = true ]] ; then WINDOW_LENGTH_BG=$REINIWINDOW_LENGTH_4D else WINDOW_LENGTH_BG=$WINDOW_LENGTH_4D fi echo "WINDOW_LENGTH_BG=$WINDOW_LENGTH_BG" BKG_OFFSET=$(( WINDOW_LENGTH_BG - PERIOD_BG + BKG_STEP )) echo "BKG_OFFSET=$BKG_OFFSET" # Time for next background (ie start of cycling fc) NXBGTIME=$( newdate $WINDOW_END -$BKG_OFFSET ) # EH: Below is for ED 8h window - need to correct in a general way if [[ $LEDFAMILY = true ]] ; then NXBGTIME=$CYCLETIME fi echo "NXBGTIME=$NXBGTIME" #======================================================================= # Find analysis (synoptic) times #======================================================================= hh="$(substring $WINDOW_START 9 10)" # sh step=$(( 10#$hh % PERIOD_AN )) [[ $step -gt 0 ]] && step=$(( PERIOD_AN - step )) FIRST_AN=$( newdate $WINDOW_START $step ) if [[ $CERA_OUT = true && $FIRST_AN = $WINDOW_START ]] ; then # Until overlapping windows are fully implemented, cannot archive analysis at start of window FIRST_AN=$( newdate $WINDOW_START +$PERIOD_AN) fi hh="$(substring $WINDOW_END 9 10)" step=$(( 10#$hh % PERIOD_AN )) LAST_AN=$( newdate $WINDOW_END -$step) if [[ $FAMILY = */make/* || $FAMILY = */inicond/* ]] ; then FIRST_AN=$NXBGTIME LAST_AN=$NXBGTIME fi STEP_AN=$( datediff -h $FIRST_AN $WINDOW_START ) echo "FIRST_AN=$FIRST_AN" echo "LAST_AN=$LAST_AN" echo "STEP_AN=$STEP_AN" hh_start=$( substring $WINDOW_START 9 10 ) echo "hh_start=$hh_start" case $hh_start in 03|09|15|21) NO6HTSL=$(( WINDOW_LENGTH_4D / PERIOD_OBS )) ;; *) NO6HTSL=$(( WINDOW_LENGTH_4D / PERIOD_OBS + 1 )) esac echo "NO6HTSL=$NO6HTSL" ## Wave model assimilation ## Enforce 6 hourly wave assimilation wam_assimil_period=${WAM_ASSIMIL_PERIOD:=6} if [[ $wam_assimil_period -lt 6 ]] ; then if [[ $FAMILY = */make/* || $FAMILY = */inicond/* ]] ; then anstart=$NXBGTIME else anstart=$WINDOW_START fi FIRST_AN_WAVE=$( newdate $anstart $wam_assimil_period ) PERIOD_AN_WAVE=$wam_assimil_period LAST_AN_WAVE=$WINDOW_END else FIRST_AN_WAVE=$FIRST_AN PERIOD_AN_WAVE=$PERIOD_AN LAST_AN_WAVE=$LAST_AN fi fi #======================================================================= # End cycle_times #======================================================================= WINDOW_LENGTH_4D_TOT=$(( WINDOW_LENGTH_4D + SUBWIN_OFFSET )) echo "WINDOW_LENGTH_4D_TOT=$WINDOW_LENGTH_4D_TOT" #======================================================================= # Things that do not depend on current cycle time #======================================================================= DATE_OPER_DCDA=2004062900 DATE_OPER_ENDA=2010062200 DATE_OPER_LWDA=2013111900 ANOFFSET_TYPES='4i|4v|an|fc|ef|ea|me|em|es|ses' WINDOW_LENGTH_4D_TOT_OPER=12 EDA_WINDOW_LENGTH_4D_TOT_OPER=12 EDA_WINDOW_LENGTH_4D=${EDA_WINDOW_LENGTH_4D:=12} INI_WINDOW_LENGTH_4D=${INI_WINDOW_LENGTH_4D:=12} EDACLASS=${EDACLASS:=od} EDAEXPVER=${EDAEXPVER:=0001} LEDA_ERRORS_IN=${LEDA_ERRORS_IN:=true} if [[ $LEDA_ERRORS_IN = true && $EDACLASS = od && $EDAEXPVER = 0001 && $BASETIME -ge $DATE_OPER_LWDA ]] ; then if [[ $LEVELS = 137 ]] ; then LJB_EDA=true fi LSES_EDA=true fi #======================================================================= # Setting for archiving via NPOSTS argument in NAMCT0, used by sekf_sm and ifstraj and ansfc #======================================================================= PPSTEP_INC=3 if [[ $PERIOD_AN -lt 3 ]] ; then PPSTEP_INC=$PERIOD_AN fi echo "PPSTEP_INC=$PPSTEP_INC" #end-of-include $EXPVER/include/cycle_times ($EXPVER/include/ifstraj) : #include $EXPVER/include/var_include ($EXPVER/include/ifstraj) #======================================================================= # # var_include # ----------- # # Purpose : Define variables to be used in various 4D-Var scripts # ------- # #======================================================================= NORDER_MODERR=${NORDER_MODERR:=0} LWEAK4DVAR=${LWEAK4DVAR:=false} LBGMODERR=${LBGMODERR:=true} LFSOBS=${LFSOBS:=false} LEMISKF=${LEMISKF:=false} ENDANENS=${ENDANENS:=0} LFCDEPAR=${LFCDEPAR:=false} INISTEP_FCDEPAR=${INISTEP_FCDEPAR:=0} INIEXPTYPE=${INIEXPTYPE:=an} NUPTRA_RANGE=${NUPTRA_RANGE:=0} LOBS_SCREEN=${LOBS_SCREEN:=false} #======================================================================= # Model Error #======================================================================= ggme="200133/200203/" # Try to guess what the family is (FSFAMILY does not work here...) family=$FAMILY [[ $ENDANENS -gt 0 ]] && family=$( dirname $FAMILY ) GUESS_FAMILY=$(echo $family | awk -F/ '{print $NF}') if [[ $LWEAK4DVAR = true ]] ; then if [[ $NTYPE_MODERR = @(2|3) ]] ; then NCOMP_MODERR=$(( 1 + 2 * NORDER_MODERR )) ggme="" else NCOMP_MODERR=1 fi NSTEP_MODERR=1 NDIM_MODERR=$(( NCOMP_MODERR * NSTEP_MODERR )) else NSTEP_MODERR=0 NCOMP_MODERR=0 NDIM_MODERR=0 fi #======================================================================= #end-of-include $EXPVER/include/var_include ($EXPVER/include/ifstraj) # LRESTART999=true sets the ifstraj_999:wind event (which # automatically triggers the restart_999 task) if polar wind # or temperature increment problems are detected. LRESTART999=${_LRESTART999_} # LCOMPBGDEP=true for diagnostic background trajectory to # calculate o-b ECMA when first guess differs from background LCOMPBGDEP=${_LCOMPBGDEP_} USAGE="$0 -u uptraj [-s late4dstep] [-m sat_monitor] [-t fgdir]" if [[ $LREPRO4DVAR = true ]] ; then export ODB_LOADBALANCE_CCMA=1 fi errflg=0 uptraj= late4dstep=999 rerun=false sat_monitor=false lfftw=${LFFTW:-false} fgdir="none" while getopts u:s:r:m:t: option do case $option in u) uptraj=$OPTARG;; s) late4dstep=$OPTARG;; r) rerun=$OPTARG;; m) sat_monitor=$OPTARG;; t) fgdir=$OPTARG;; \?) errflg=1;; esac done #======================================================================= # Check parameters #======================================================================= if [[ $errflg -ne 0 ]] ; then echo $USAGE >&2 exit 1 fi if [[ "$uptraj" = "" ]] ; then echo $USAGE >&2 echo "-u uptraj, trajectory update number, must be supplied" exit 2 fi if [[ $uptraj -eq 999 && $late4dstep -eq 999 ]] ; then echo $USAGE >&2 echo "-s late4dstep, step must be supplied for LATE4DSTART trajectory" exit 2 fi if [[ "$sat_monitor" != @(true|false) ]] ; then echo $USAGE >&2 echo "-m sat_monitor can only be true (yes) or false (no)" exit 2 fi if [[ "$fgdir" != "none" ]]; then if [[ "$fgdir" != @(monitor|sekf) ]] ; then echo $USAGE >&2 echo "-t fgdir can only be monitor or sekf" exit 2 fi fi member=$MEMBER endamembers=$(( ENDANENS + 1 )) #======================================================================= # Run IFS with OOPS-IFS compatible configuration: # - weak constrained disabled (in PrepIFS) # - jcdfi disabled # - cloud sink variable disabled # - fixed number of iterations #======================================================================= LIFSASOOPS=${LIFSASOOPS:-false} #======================================================================= # EnKF #======================================================================= if [[ $LENKF = true ]] ; then export NENSFNB=$member #AF not needed anymore export ODB_MAXCTX=401 lhuberbgqcg="LHUBERBGQCG=false," lhuberbgqcg="" #ltovscv="LTOVSCV=.false.," ltovscv="" else lhuberbgqcg="" ltovscv="" fi #======================================================================= # Adjust time step for new linearized moist physics if needed #======================================================================= if [[ $uptraj -lt $MXUP_TRAJ ]] ; then eval tstep_tmp='$'TSTEP_INC_$uptraj else tstep_tmp=$TSTEP fi export tstep=$TSTEP traj_tstep -n $tstep_tmp -m $LNMPHYS -b $LCOMPBGDEP -t $TSTEP -u $uptraj -x $MXUP_TRAJ chmod 777 tstep_tmp eval `tstep_tmp` rm -f tstep_tmp #======================================================================= # clean up wave gribfiles #====================================================================== # rm -f $WDIR/SGS* $WDIR/MPP* #======================================================================= # Define dates for thinning changes #======================================================================= date_80km_WVcloud_AMV=2002121000 #======================================================================= # Define dates for inversion of ers2 scatterometer data #======================================================================= date_ers2_cmod5=2003082118 #======================================================================= # Model errors #======================================================================= # IFS to OOPS-IFS comparison/OOPS: weak constraint switched off in PrepIFS if [[ $LWEAK4DVAR = true ]] ; then if [[ $uptraj -eq 0 ]] ; then if [[ $LBGMODERR = true ]] ; then LMODERR=true else LMODERR=false fi elif [[ $uptraj -le $MXUP_TRAJ ]] ; then LMODERR=true else # late4dstart LMODERR=false fi else LMODERR=false fi if [[ $NSUBWIN4D -gt 0 ]] ; then bgdir=$WDIR/.. else bgdir=$WDIR fi #======================================================================= # Except on first trajectory, go from low to high resolution. # Interpolation is done by the IFS using spint method in suspecg. #======================================================================= LRDINC=${LINITCV} # OOPS: do not enable for OOPS if [[ $LOOPS = true ]] ; then LRDINC="false" fi typeset -RZ2 cuptra=$uptraj typeset -RZ2 um1 typeset -RZ2 hh #======================================================================= # Edit and Save Model Error for EDA #======================================================================= if [[ $LWEAK4DVAR = true && $uptraj -eq 999 && $ENDANENS -gt 0 ]] ; then typeset -RZ2 comp=1 um1=$(( MXUP_TRAJ - 1 )) rm -f spmoderrfg${cuptra}${comp} ln -s $bgdir/spmoderrin${um1}${comp} spmoderrfg${cuptra}${comp} grib_set -s dataType=eme,edition=2,localDefinitionNumber=39,componentIndex=${_MEMBER_} spmoderrfg${cuptra}${comp} spmoderr_temp_edited env MARS_FDB_SET_TABLE=1 $GRIB2FDB_CMD -f spmoderr_temp_edited fi if [[ $uptraj -gt 0 && $uptraj -le $MXUP_TRAJ ]] ; then # save low-res grib analysis at initial time and give it to IFS. um1=$(( uptraj - 1 )) hh=0 rm -f ICMSH${EXPVER}ANIN rm -f ICMGG${EXPVER}ANIUA if [[ $LRDINC = true ]] ; then ln -s $WDIR/spinlr${um1} ICMSH${EXPVER}ANIN [[ $LGPINNER = true ]] && \ ln -s $WDIR/gginlr${um1} ICMGG${EXPVER}ANIUA fi elif [[ $uptraj -eq 999 ]] ; then # Always read an increment in mode 999 [[ $LINITCV = true || $LWEAK4DVAR = true ]] && LRDINC="true" # save low-res grib analysis at initial time and give it to IFS. um1=$(( MXUP_TRAJ - 1 )) hh=$late4dstep rm -f ICMSH${EXPVER}ANIN ICMGG${EXPVER}ANIUA ln -s $WDIR/spinlr${um1}_$hh ICMSH${EXPVER}ANIN [[ $LGPINNER = true ]] && \ ln -s $WDIR/gginlr${um1}_$hh ICMGG${EXPVER}ANIUA date cp $WDIR/spinlr${um1}_$hh splate4d glin="" cubic="" if [[ $GTYPEINC_0 = _full ]] ; then gausstype=regular else gausstype=reduced if [ $GTYPEINC_0 = l_2 ] ; then glin="-l" fi if [ $GTYPEINC_0 = _3 ] ; then cubic="-q 1" fi if [ $GTYPEINC_0 = _4 ] ; then cubic="-q 2" fi fi rm -f VODIFF DDIFF VORDIVDIFF UVDIFF VODIFF1 DDIFF1 UVDIFF_U UVDIFF_V grib_copy -w shortName=vodiff splate4d VODIFF grib_set -s shortName=vo VODIFF VODIFF1 grib_copy -w shortName=ddiff splate4d DDIFF grib_set -s shortName=d DDIFF DDIFF1 cat VODIFF1 DDIFF1 > VORDIVDIFF run_parallel -s $BINS/vod2uv -s VORDIVDIFF -p $XDATA/ifs -G UVDIFF $glin -t r -P 1 $cubic run_parallel -s $BINS/sptogp -s splate4d -p $XDATA/ifs -G gplate4d -t r -n $glin $cubic rm -f spini splate4d set +x var[0]='temperature' var[1]='u wind' var[2]='v wind' contentmax[0]=$(grib_get -p shortName,max gplate4d|grep tdiff| cut -f2 -d " ") contentmin[0]=$(grib_get -p shortName,min gplate4d|grep tdiff| cut -f2 -d " ") contentmax[1]=$(grib_get -p shortName,max UVDIFF_U|grep u| cut -f2 -d " ") contentmin[1]=$(grib_get -p shortName,min UVDIFF_U|grep u| cut -f2 -d " ") contentmax[2]=$(grib_get -p shortName,max UVDIFF_V|grep v| cut -f2 -d " ") contentmin[2]=$(grib_get -p shortName,min UVDIFF_V|grep v| cut -f2 -d " ") limit[0]=35.0 if [[ $ENDANENS -eq 0 ]]; then limit[1]=65.0 limit[2]=65.0 else limit[1]=265.0 limit[2]=265.0 fi iproblem=0 for ivar in 0 1 2 do typeset xmax=-999 iii=1 for value in ${contentmax[$ivar]} do if [ $xmax -lt $value ] ; then xmax=$value levmax=$iii fi iii=$((iii + 1)) done set -x echo ' max of late4d increment for variable',${var[$ivar]}, $xmax, $levmax\\n | tee -a mail.message set +x if [[ $xmax -gt ${limit[$ivar]} ]] ; then iproblem=$(( iproblem + 1 )) fi done for ivar in 0 1 2 do typeset xmin=999 iii=1 for value in ${contentmin[$ivar]} do if [ $xmin -gt $value ] ; then xmin=$value levmin=$iii fi iii=$((iii + 1)) done set -x echo ' min of late4d increment for variable',${var[$ivar]}, $xmin, $levmin\\n | tee -a mail.message set +x if [[ $xmin -lt -1*${limit[$ivar]} ]] ; then iproblem=$((iproblem + 1 )) fi done set -x date if [[ $iproblem -gt 0 ]] ; then echo "\n***Error: increment too big - task restart_999 needs to be run\\n" | tee -a mail.message echo "Numver of problems " ,$iproblem | tee -a mail.message if [[ $LRESTART999 = true || $OD_MODE = true ]] ; then xevent wind # shall start restart_999 #================================================================================ # Send an Email if the restart mechanism activated (due to ifstraj_999 failure) #================================================================================ if [[ $CLASS = od ]] ; then recipient="integration_team dae dav dag diad dims" else recipient=$OWNER fi echo Warning: restart_999 was activated in: $ECF_NAME $BASETIME\\n | tee -a mail.message if [[ ${LOUTLOOP:-false} = false ]] ; then mailx -s "restart_999 $ECF_NAME $BASETIME" $recipient < mail.message fi exit 0 else echo "To automatically trigger restart_999 when this problem occurs," echo " set LRESTART999 (in prepIFS, this is found under 'Data Assimilation Mode')." exit 1 fi fi fi #======================================================================= # Input data #======================================================================= # Set here conditions when to retrieve BG which is not equal FG from backgr* # See vardata for retrieval of backgr* l_fgnotbg=".false." LRETRVBG=false # gabor if [[ $LFGNOTBG = true ]] && [[ $LCONTINUOUS_DA = true ]] && [[ ${STREAM} = LWDA ]] && [[ $uptraj -eq 0 ]]; then # same as in vardata if [[ $LFGNOTBG = true ]] && [[ ${STREAM} = LWDA ]] && [[ $uptraj -eq 0 ]]; then l_fgnotbg=".true." LRETRVBG=true fi rm -f ICMSH${EXPVER}INIT ICMGG${EXPVER}INIT ICMGG${EXPVER}INIUA rm -f ICMSH${EXPVER}BGHR ICMGG${EXPVER}BGHR ICMGG${EXPVER}BGHRUA if [[ $TASK = monitoring ]] ; then echo "pdrtest" echo "NPES ", $NPES rm -f $WDIR/shml_monitoring $WDIR/ggsfc_monitoring $WDIR/ggml_monitoring inter_fp -r ${RESOL} -l ${LEVELS} -R ${RESOLINC_2} -L 91 \ -t $GTYPE -T $GTYPEINC_2 \ -s $WDIR/backgrshml -g $WDIR/backgrggsfc -u $WDIR/backgrggml \ -S $WDIR/shml_monitoring -G $WDIR/ggsfc_monitoring -U $WDIR/ggml_monitoring -p $NPES rm -f ICMSH${EXPVER}INIT ICMGG${EXPVER}INIT ICMGG${EXPVER}INIUA rm -f ICMSH${EXPVER}BGHR ICMGG${EXPVER}BGHR ICMGG${EXPVER}BGHRUA mv $WDIR/ggsfc_monitoring tmp_gg # Store interpolated swi grib_copy -w shortName=swvl1/swvl2/swvl3/swvl4 _tmp_gg _swi_fp_gg smrescale -i _tmp_gg -o $WDIR/ggsfc_monitoring -f TH # Check soil moisture rescaling mv $WDIR/ggsfc_monitoring _tmp_gg check_smrescale_mswi -i $WDIR/backgrggsfc -I _tmp_gg -s _swi_fp_gg -R ${RESOLINC_2} -G ${GTYPEINC_2} -o $WDIR/ggsfc_monitoring RESOL=$RESOLINC_2 GTYPE=$GTYPEINC_2 tstep=$TSTEP_INC_2 LEVELS=91 echo "SMOS TB MONITORING, low resolution ", $LEVELS, $RESOL, $GTYPE, $tstep ln -s $WDIR/shml_monitoring ICMSH${EXPVER}INIT ln -s $WDIR/ggsfc_monitoring ICMGG${EXPVER}INIT ln -s $WDIR/ggml_monitoring ICMGG${EXPVER}INIUA ln -s $WDIR/shml_monitoring ICMSH${EXPVER}BGHR ln -s $WDIR/ggsfc_monitoring ICMGG${EXPVER}BGHR ln -s $WDIR/ggml_monitoring ICMGG${EXPVER}BGHRUA elif [[ $uptraj -eq ${MXUP_TRAJ} && $IFSMODE = 3d_fgat ]] ; then ln -s $WDIR/reftrajshml_fgat ICMSH${EXPVER}INIT ln -s $WDIR/reftrajggsfc_fgat ICMGG${EXPVER}INIT ln -s $WDIR/reftrajggml_fgat ICMGG${EXPVER}INIUA ln -s $WDIR/reftrajshml_fgat ICMSH${EXPVER}BGHR ln -s $WDIR/reftrajggsfc_fgat ICMGG${EXPVER}BGHR ln -s $WDIR/reftrajggml_fgat ICMGG${EXPVER}BGHRUA elif [[ $LENKF = true && $uptraj = 999 ]] ; then ln -s $WDIR/analshml ICMSH${EXPVER}INIT ln -s $WDIR/analggsfc ICMGG${EXPVER}INIT ln -s $WDIR/analggml ICMGG${EXPVER}INIUA ln -s $WDIR/analshml ICMSH${EXPVER}BGHR ln -s $WDIR/analggsfc ICMGG${EXPVER}BGHR ln -s $WDIR/analggml ICMGG${EXPVER}BGHRUA elif [[ $LENKF = true && $uptraj = ${MXUP_TRAJ} ]] ; then ln -s $WDIR/analshml_initime ICMSH${EXPVER}INIT ln -s $WDIR/analggsfc_initime ICMGG${EXPVER}INIT ln -s $WDIR/analggml_initime ICMGG${EXPVER}INIUA ln -s $WDIR/analshml_initime ICMSH${EXPVER}BGHR ln -s $WDIR/analggsfc_initime ICMGG${EXPVER}BGHR ln -s $WDIR/analggml_initime ICMGG${EXPVER}BGHRUA elif [[ $LOOPS = true && $uptraj = ${MXUP_TRAJ} ]] ; then ln -s $WDIR/oopsanshml ICMSH${EXPVER}INIT ln -s $WDIR/oopsanggsfc ICMGG${EXPVER}INIT ln -s $WDIR/oopsanggml ICMGG${EXPVER}INIUA # ln -s $WDIR/analshml_initime ICMSH${EXPVER}BGHR # ln -s $WDIR/analggsfc_initime ICMGG${EXPVER}BGHR # ln -s $WDIR/analggml_initime ICMGG${EXPVER}BGHRUA elif [[ $uptraj -le 1 ]] ; then # fetch the initial 4v trajectory/first guess if [[ $LCOMPBGDEP = true ]] ; then # Diagnostic background trajectory run (ifstrajbg) uses first guess=background ln -s $WDIR/backgrshml ICMSH${EXPVER}INIT ln -s $WDIR/backgrggsfc ICMGG${EXPVER}INIT ln -s $WDIR/backgrggml ICMGG${EXPVER}INIUA else # First guess ln -s $WDIR/reftrajshml ICMSH${EXPVER}INIT ln -s $WDIR/reftrajggsfc ICMGG${EXPVER}INIT ln -s $WDIR/reftrajggml ICMGG${EXPVER}INIUA fi # fetch the background only uptraj_0 if [[ $uptraj -eq 0 ]] ; then if [[ $LRETRVBG = true ]] ; then # Background differs from first guess ln -s $WDIR/backgrshml ICMSH${EXPVER}BGHR ln -s $WDIR/backgrggsfc ICMGG${EXPVER}BGHR ln -s $WDIR/backgrggml ICMGG${EXPVER}BGHRUA else # Background = first guess ln -s $WDIR/reftrajshml ICMSH${EXPVER}BGHR ln -s $WDIR/reftrajggsfc ICMGG${EXPVER}BGHR ln -s $WDIR/reftrajggml ICMGG${EXPVER}BGHRUA fi fi else # fetch the previous 4v trajectory ln -s $WDIR/traj4v_shml_${um1}_${hh} ICMSH${EXPVER}INIT ln -s $WDIR/traj4v_ggsfc_${um1}_${hh} ICMGG${EXPVER}INIT ln -s $WDIR/traj4v_ggml_${um1}_${hh} ICMGG${EXPVER}INIUA fi if [[ $uptraj -lt $MXUP_TRAJ && $LCOMPBGDEP = false ]] ; then typeset -RZ2 itra itra=$uptraj [[ -d TRAJHR${itra} ]] && rm -rf TRAJHR${itra} mkdir TRAJHR${itra} fi #======================================================================= # Setup Augmented Control Variable #======================================================================= if [[ ${LJB_ACV} = true ]] ; then . preacv if [[ ${LTOVSCV_ACV} = true ]] ; then ltovscv="LTOVSCV=.false.," fi fi #======================================================================= # Setup COMPO script and namelist variables #======================================================================= if [[ $LMACC = true ]] ; then . compo_setup fi #======================================================================= # Input CO2 Flux data, VARBC switches #======================================================================= if [[ $LMACC = true ]] ; then if [[ $lco2diu = true ]] ; then rm -f CO2CLIM${EXPVER}INIT ln -s $WDIR/CO2CLIM${EXPVER}INIT_$RESOL CO2CLIM${EXPVER}INIT fi bc_aod_modis_TERRA="LBC_AOD_MODIS_TERRA=.true.," bc_aod_modis_AQUA="LBC_AOD_MODIS_AQUA=.true.," bc_aod_pmap="LBC_AOD_PMAP=.true.," bc_aod_slstr="LBC_AOD_SLSTR=.false.," bc_aod_viirs="LBC_AOD_VIIRS=.false.," bc_co_mopitt="LBC_CO_MOPITT=.false.," bc_co_iasi="LBC_CO_IASI=.true.," if [[ $BASETIME -ge 2018032000 ]] ; then # Activate GOME-2 NO2 assimilation bc_no2_gome2="LBC_NO2_GOME2=.false.," bc_no2_omi="LBC_NO2_OMI=.true.," else bc_no2_gome2="LBC_NO2_GOME2=.true.," bc_no2_omi="LBC_NO2_OMI=.false.," fi bc_go3_omps_nadp="LBC_GO3_OMPS_NADP=.true.," bc_go3_tropomi="LBC_GO3_TROPOMI=.true.," bc_no2_tropomi="LBC_NO2_TROPOMI=.false.," bc_co_tropomi="LBC_CO_TROPOMI=.true.," bc_ch4_tropomi="LBC_CH4_TROPOMI=.true.," lghgrttov=${LGHG_RTTOV:=false} else lghgrttov=false lco2diu=false gems_co2_flux_setup="" lfire=false linj=false linj_chem=false gems_ghg="" gems_aero="" chem_list="" gems_naeaer="" bc_aod_modis_TERRA="" bc_aod_modis_AQUA="" bc_aod_viirs="" bc_aod_pmap="" bc_aod_slstr="" bc_co_mopitt="" bc_co_iasi="" bc_no2_gome2="" bc_no2_omi="" bc_go3_omps_nadp="" bc_go3_tropomi="" bc_no2_tropomi="" bc_co_tropomi="" bc_ch4_tropomi="" fi #================================================================== # During the first trajectory run the background state is written out in a similar # format to the trajectories. This is done for all subsequent inner loop resolutions. #================================================================== if [[ $uptraj -eq 0 && $LCOMPBGDEP = false && ${LJB_ACV} = false ]] ; then rm -rf TRAJBG?? typeset -RZ2 uptr2 uptr2=0 while [[ $uptr2 -lt $MXUP_TRAJ ]] ; do mkdir TRAJBG${uptr2} uptr2=$((uptr2 + 1)) done fi #======================================================================= # Initialise variational bias correction file #======================================================================= # This is to allow cold start of VarBC but it is dangerous if a file is lost... if [[ $uptraj -eq 999 ]] ; then lvarbc=false else lvarbc=$LVARBC fi if [[ $lvarbc = true && $LFCDEPAR = false ]] ; then rm -f VARBC.cycle if [[ $uptraj -eq 0 ]] ; then if [[ -f $WDIR/VARBC.cycle.retr && $LENKF_HYBRID = false ]] ; then convert_varbcfile.x -i $WDIR/VARBC.cycle.retr -o VARBC.cycle elif [[ -f $WDIR/../VARBC.cycle.retr && $LENKF_HYBRID = false ]] ; then convert_varbcfile.x -i $WDIR/../VARBC.cycle.retr -o VARBC.cycle elif [[ -f $bgdir/VARBC.cycle.prev ]] ; then cp $bgdir/VARBC.cycle.prev VARBC.cycle fi elif [[ $LENKF = true ]] ; then if [[ $uptraj -eq 1 ]] ; then # HPRIOR cp $WDIR/../VARBC.cycle_traj_0 VARBC.cycle else cp $WDIR/VARBC.cycle_traj_0 VARBC.cycle fi elif [[ $uptraj -gt 0 && $uptraj -le $MXUP_TRAJ ]] ; then cp $bgdir/VARBC.cycle_min_$(( uptraj - 1 )) VARBC.cycle fi fi #======================================================================= # Force VARBC cold-start for surface obs at the beginning of experiment #======================================================================= VARBC_PS=${VARBC_PS:=false} VARBC_APD=${VARBC_APD:=false} lcoldstart_sfcobs=${LCOLDSTART_SFCOBS:=false} #======================================================================= # Unpack emissivity atlas from previous cycle into work directory #======================================================================= if [[ $LEMISKF = true && $uptraj -eq 0 ]] ; then rm -rf emiskf.unformatted if [[ -d $bgdir/emiskf.unformatted.prev ]] ; then cp -R $bgdir/emiskf.unformatted.prev emiskf.unformatted fi fi #======================================================================= # Forecast errors #======================================================================= rm -f errgrib* eda_spread_grib* if [[ $uptraj -gt 0 && $LENKF = true ]] ; then # ls $WDIR/../errgrib* # make it fail if missing for errgribfile in $WDIR/../errgrib* ; do ln -s $errgribfile . done for eda_file in $WDIR/../eda_spread_grib* ; do ln -s $eda_file . done else if [[ $LENKF = false && $LENKF_HYBRID = true && $uptraj -eq 0 ]] ; then enkfdir=$WDIR/../enkf ls $enkfdir/errgrib* cp -rf $enkfdir/errgrib* $WDIR fi # ls $WDIR/errgrib* for errgribfile in $WDIR/errgrib* ; do ln -s $errgribfile . done for eda_file in $WDIR/eda_spread_grib* ; do ln -s $eda_file . done fi #======================================================================= # Model errors #======================================================================= if [[ $LMODERR = true ]] ; then if [[ $uptraj -eq 0 ]] ; then if [[ $NTYPE_MODERR = @(2|3) ]] ; then typeset -RZ2 comp=1 while [[ $comp -le $NDIM_MODERR ]] ; do rm -f spmoderrfg${cuptra}${comp} ln -s $bgdir/spmoderr_bg_${comp} spmoderrfg${cuptra}${comp} comp=$((comp + 1)) done fi elif [[ $uptraj -le $MXUP_TRAJ ]] ; then typeset -RZ2 comp=1 while [[ $comp -le $NDIM_MODERR ]] ; do if [[ $NTYPE_MODERR = 1 ]] ; then rm -f spmoderrfg${um1}${comp} spmoderrin${um1}${comp} spmoderrfg${cuptra}${comp} ln -s $WDIR/spmoderrfg${um1}${comp} spmoderrfg${um1}${comp} ln -s $WDIR/spmoderrin${um1}${comp} spmoderrin${um1}${comp} else rm -f spmoderrfg${cuptra}${comp} ln -s $bgdir/spmoderrin${um1}${comp} spmoderrfg${cuptra}${comp} fi comp=$((comp + 1)) done fi fi #======================================================================= # Define ODB DDR related parameters #======================================================================= l3dvarmkodb=.false. n4dminmkodb=$(( WINDOW_LENGTH_4D * 60 )) [[ $NSUBWIN4D -gt 0 ]] && n4dminmkodb=$(( n4dminmkodb * NSUBWIN4D )) ntfmarmkodb=$(( WINDOW_CUTOFF_4D * 60 )) ntbmarmkodb=$(( ntfmarmkodb - n4dminmkodb )) if [[ $NSUBWIN4D -gt 0 ]] ; then ntlen=$(( WINDOW_LENGTH_4D * 60 )) ntoff=$(( (SUBTRAJ - 1) * ntlen )) ntfmar=$(( ntfmarmkodb - ntoff )) ntbmar=$(( ntfmar - ntlen )) else ntfmar=$ntfmarmkodb ntbmar=$ntbmarmkodb fi #======================================================================= # Setup ODB-variables and re-create the $IOASSIGN-file #======================================================================= mode=traj export IOASSIGN=IOASSIGN.ifstraj_$uptraj rm -f $IOASSIGN iodef="-r 4m -w 4m -p 4m -e 4m" lscreen_cont=$LCONTINUOUS_DA ## screen incl latest arriving observations in all trajs [[ $STREAM = LWDA ]] && lscreen_cont=false # only do re-screening in Early Delivery linc_tovscv=.true. [[ $lscreen_cont = true ]] && linc_tovscv=.false. [[ $lscreen_cont = true ]] && rm -f $WDIR/mergeodb_done_ECMA [[ $LUSE_REDUCED_OBS = true ]] && lscreen_cont=false && linc_tovscv=.false. # Set a flag file to communicate with archive_prepare family whether we are running in "use_reduced_obs" mode reduced_obs_flagfile=$WDIR/.use_reduced_obs_activated [[ $LUSE_REDUCED_OBS = true ]] && touch $reduced_obs_flagfile [[ $LUSE_REDUCED_OBS = false ]] && [[ -f $reduced_obs_flagfile ]] && rm -f $reduced_obs_flagfile dbname=CCMA if [[ $uptraj = 0 ]] || \ [[ $lscreen_cont = true ]] || \ [[ $uptraj = ${MXUP_TRAJ} && $LVERIFY_SCREEN = true ]] ; then dbname=ECMA fi #Aeolus AUX_MET generation option laeolus_amd=".false." #default setting if [[ ${LAEOLUSAMD:=false} == true ]] ; then laeolus_amd=".true." # make sure HRETR_AEOLUS is called LVARBC=".false." # VARBC not needed echo "-------------------------------------------------------" echo "ifstraj specifically for extraction of Aeolus AUX_MET data" echo "-------------------------------------------------------" #ensure it runs by deleting these rm -f $WDIR/mergeodb_done_ECMA rm -rf $WDIR/ECMA rm -rf $WDIR/CCMA* rm -f $WDIR/mergeodb_done_CCMA export ODB_MERGEODB_DIRECT=1 #only proceed if the data is available if [[ -d $WDIR/uptraj_0/ECMA.aeolus_auxmet ]] ; then #copy ECMA.aeolus_auxmet to ECMA cp -rf $WDIR/uptraj_0/ECMA.aeolus_auxmet $WDIR/ECMA dbname=ECMA else echo "No Aeolus ECMA.aeolus_auxmet available to process, exiting" exit 0 fi fi # use different WDIR that active data if [[ $sat_monitor = true ]] ; then dbdir=$WDIR/$fgdir/$dbname lmonitoring=${LMONITORING} elif [[ $fgdir = sekf ]] ; then dbdir=$WDIR/$fgdir/$dbname lmonitoring=false else dbdir=$WDIR/$dbname lmonitoring=false fi if [[ $LENKF = true ]] && [[ $uptraj -gt 0 ]] ; then if [[ $uptraj -eq 1 ]] ; then typeset curdir=$(pwd) #======================================================================= # Create local CCMA #======================================================================= # Create a new CCMA for each member (link to the main central CCMA) rm -rf $WDIR/CCMA || : mkdir -p $WDIR/CCMA typeset ddfile=CCMA.dd typeset schema_file=CCMA.sch typeset flags_file=CCMA.flags typeset iomap_file=CCMA.iomap cd $WDIR/CCMA #======================================================================= # Create iomap file if ODB_IO_METHOD=4 #======================================================================= typeset eff_io_method=$(head -1 $WDIR/../CCMA/CCMA.dd | awk '{print $3}' | sed 's/ //g' ) if [[ "$eff_io_method" = 4 ]] ; then typeset iomap_file_ccma=$WDIR/../CCMA/CCMA.iomap if [[ ! -f $iomap_file_ccma ]] ; then echo "***Error: Unable to locate I/O-map file ($iomap_file_ccma) for database 'CCMA'" exit 1 fi # For rerunnability of individual members, # determine if restart of this member, or first run. # -if restart then CCMA.obs.iomap file will already exist export BACKUP_CCMA_ENKF=$WDIR/../backup_CCMAobs_enkf if [[ -f $WDIR/CCMA/CCMA.obs.iomap ]];then # this is a restart for this member # Remove iomap from previous run of this member rm -f $WDIR/CCMA/CCMA.obs.iomap # Copy CCMA.obs files associated with the table for this enkf member cd $BACKUP_CCMA_ENKF for tablefile in $(find . -name enkf_$member);do cp $tablefile $WDIR/../CCMA.obs/$tablefile done cd $WDIR/CCMA fi cp $WDIR/../CCMA.obs/CCMA.iomap $WDIR/CCMA/CCMA.obs.iomap cp $WDIR/../CCMA.grid/CCMA.iomap $WDIR/CCMA/CCMA.grid.iomap cat > $iomap_file < $IOASSIGN export ODB_IO_GRPSIZE=$(grpsize CCMA) export ODB_CONSIDER_TABLES="/desc/poolmask/timeslot_index/index/hdr/scatt/scatt_body/conv/conv_body/gbrad/gbrad_body/modsurf/collocated_imager_information/allsky/allsky_body/gnssro/gnssro_body/sat/radiance/radiance_body/cloud_sink/resat/resat_averaging_kernel/satob/limb/body/errstat/update_1/update_2/update_3/ensemble/enkf_$numstr/" export ODB_WRITE_TABLES="/enkf_$numstr/" #else # export ODB_CONSIDER_TABLES="/desc/poolmask/timeslot_index/index/hdr/scatt/scatt_body/conv/conv_body/gbrad/gbrad_body/modsurf/collocated_imager_information/allsky/allsky_body/gnssro/gnssro_body/sat/radiance/radiance_body/cloud_sink/resat/resat_averaging_kernel/satob/limb/body/errstat/update_1/update_2/update_3/ensemble" #export ODB_WRITE_TABLES="/body/" #export ODB_SAVELIST="an_depar@body" fi fi if [[ $LFCDEPAR = true ]] ; then if [[ -f $WDIR/ECMA/ECMA.iomap ]] ; then typeset iomap_file_ecma=$WDIR/ECMA/ECMA.iomap rm -f $iomap_file_ecma cat > $iomap_file_ecma <> $iomap_file_ecma < $IOASSIGN cp $IOASSIGN $ccma_dbdir cd $ccma_dbdir run_parallel $BINS/create_odb.x CCMA $NPES_AN if [[ $ENDANENS -eq 0 ]]; then CHECK_DIR $cache_ccma_dir cp -r $WDIR/CCMA.obs $cache_ccma_dir/. fi fi ### ls -lrt $ccma_dbdir cd $current_pwd ccma_dbdir=$WDIR/CCMA.grid CHECK_DIR $ccma_dbdir export ODB_SRCPATH_CCMA=$ccma_dbdir export ODB_DATAPATH_CCMA=$ccma_dbdir # Create empty CCMA # Check if empty CCMA with required number of pools has already been cached do_copy_ccma=0 if [[ -d $cache_ccma_dir/CCMA.grid && $ENDANENS -eq 0 ]]; then NPOOLS_IN_CACHED_CCMA=`head -5 $cache_ccma_dir/CCMA.grid/CCMA.dd | tail -n1` [[ $NPOOLS_IN_CACHED_CCMA -eq $NPES_AN ]] && do_copy_ccma=1 fi if [[ $do_copy_ccma -eq 1 ]]; then rm -rf $WDIR/CCMA.grid cp -r $cache_ccma_dir/CCMA.grid $WDIR/. else create_ioassign -l CCMA -d $ccma_dbdir -n $NPES cat $ccma_dbdir/CCMA.IOASSIGN > $IOASSIGN cp $IOASSIGN $ccma_dbdir cd $ccma_dbdir run_parallel $BINS/create_odb.x CCMA $NPES_AN if [[ $ENDANENS -eq 0 ]]; then CHECK_DIR $cache_ccma_dir/CCMA.grid cp -r $WDIR/CCMA.grid $cache_ccma_dir/. fi fi ### ls -lrt $ccma_dbdir cd $current_pwd ccma_dbdir=$WDIR/CCMA CHECK_DIR $ccma_dbdir export ODB_SRCPATH_CCMA=$ccma_dbdir export ODB_DATAPATH_CCMA=$ccma_dbdir mergeodb.x -n CCMA -t $WDIR/CCMA.obs -t $WDIR/CCMA.grid -o $WDIR/CCMA ### ls -lrt $ccma_dbdir cat $dbdir/$dbname.IOASSIGN $ccma_dbdir/CCMA.IOASSIGN > $IOASSIGN elif [[ $uptraj -eq ${MXUP_TRAJ} ]] ; then # last trajectory - perform matchup incore export ODB_MATCHUP_DIRECT=1 ccma_dbdir=$WDIR/CCMA export ODB_SRCPATH_CCMA=$ccma_dbdir export ODB_DATAPATH_CCMA=$ccma_dbdir cat $dbdir/$dbname.IOASSIGN $ccma_dbdir/CCMA.IOASSIGN > $IOASSIGN if [[ $NSUBWIN4D -gt 0 ]] ; then run_parallel $BINS/revert_seqnos.x CCMA fi elif [[ $LENKF = false ]] && [[ $uptraj -ne 999 ]]; then cp $dbdir/$dbname.IOASSIGN $IOASSIGN fi export ODB_TRACE_PROC=0 # Tracing off #export ODB_TRACE_PROC=1 # Tracing on for PE#1 only (huge output) #export ODB_TRACE_PROC=-1 # Tracing on for all PEs (excessive output) if [[ $ODB_TRACE_PROC = -1 ]] || \ [[ $ODB_TRACE_PROC -ge 1 ]] ; then mb=1048576 export ODB_TRACE_FILE=${mode}_${uptraj}.%d # Tracefiles (one per PE) export ODB_TRACE_FLUSH_FREQ=1 # Flushed after every written line echo "$ODB_TRACE_FILE $WDIR/$ODB_TRACE_FILE 1 $mb $mb 0 0 0 0 0 $NPES" >> $IOASSIGN fi rm -f $WDIR/${mode}_${uptraj}.* || : #======================================================================= # Radiosonde bias correction scheme #======================================================================= xmeter ifs 1 if [[ $uptraj = 0 ]] || \ [[ $lscreen_cont = true ]]; then if [[ $LUSE_RSTBIAS = true || $LUSE_RSTRHBIAS = true ]] ; then if [[ $LUSE_RSTBIAS = true ]] ; then export ODB_SRCPATH_RSTBIAS=$DATA/an/RSTBIAS export ODB_DATAPATH_RSTBIAS=$DATA/an/RSTBIAS cat $DATA/an/RSTBIAS/RSTBIAS.IOASSIGN >> $IOASSIGN fi if [[ $LUSE_RSTRHBIAS = true ]] ; then typeset -RZ2 month_2_fetch_from month_2_fetch_from=$(substring $BASETIME 5 6) year_2_fetch_from=$(substring $BASETIME 1 4) if [[ $month_2_fetch_from -eq 01 ]] ; then month_2_fetch_from=12 year_2_fetch_from=$(( year_2_fetch_from - 1 )) else month_2_fetch_from=$(( month_2_fetch_from - 1 )) fi yyyymm=${year_2_fetch_from}${month_2_fetch_from} export ODB_SRCPATH_COUNTRYRSTRHBIAS=$WBASE/rstrhbias/$yyyymm/COUNTRYRSTRHBIAS export ODB_DATAPATH_COUNTRYRSTRHBIAS=$WBASE/rstrhbias/$yyyymm/COUNTRYRSTRHBIAS cat $WBASE/rstrhbias/$yyyymm/COUNTRYRSTRHBIAS/COUNTRYRSTRHBIAS.IOASSIGN >> $IOASSIGN export ODB_SRCPATH_SONDETYPERSTRHBIAS=$WBASE/rstrhbias/$yyyymm/SONDETYPERSTRHBIAS export ODB_DATAPATH_SONDETYPERSTRHBIAS=$WBASE/rstrhbias/$yyyymm/SONDETYPERSTRHBIAS cat $WBASE/rstrhbias/$yyyymm/SONDETYPERSTRHBIAS/SONDETYPERSTRHBIAS.IOASSIGN >> $IOASSIGN fi fi fi echo "IOASSIGN to be used : $IOASSIGN" if [[ $LUSE_RSTBIAS = false || $LUSE_RSTRHBIAS = false ]] ; then lrstbias_odb=false else lrstbias_odb=true fi export ODB_IO_GRPSIZE=$(grpsize $ODB_CMA) #printenv | sort | grep ODB #======================================================================= #-- CMA floating point checks (from cy19r2) #======================================================================= if [[ $CLASS = rd ]] ; then # Other variables than CMAFLP_CHECK are not presently checked for if [[ $uptraj = 0 ]] ; then export CMAFLP_CHECK=2 # Check CMA, but only when writing out else export CMAFLP_CHECK=3 # Check CMA upon read AND write fi export CMAFLP_CHECK_TINY=1 export CMAFLP_CHECK_NAN=1 export CMAFLP_CHECK_INF=1 fi #======================================================================= # Dr Hook & GSTATS #======================================================================= export DR_HOOK_PROFILE=$WDIR/drhook.${mode}_${uptraj} [[ ${LSC_BUILD_ARRAY_BOUND_CHECK:=false} = true || ${LSC_BUILD_INITNAN:=false} = true ]] && nundef="NUNDEFLD=1," || nundef="" nproma="" if [[ ${_IFS_PRECISION_} = DP ]] ; then [[ ${DEFAULT_NPROMA_DP:-0} != 0 ]] && nproma="NPROMA=$DEFAULT_NPROMA_DP," else [[ ${DEFAULT_NPROMA_SP:-0} != 0 ]] && nproma="NPROMA=$DEFAULT_NPROMA_SP," fi rm -f gstats.xml ln -s $LOGS/gstats.${_TASK_}.${ECF_TRYNO}.xml gstats.xml touch $LOGS/gstats.${_TASK_}.${ECF_TRYNO}.xml # INT-615 detect when LOGS not present #======================================================================= # Scatterometer table, bias correction files and namelist variables #======================================================================= if [[ $uptraj = 0 ]] || [[ $LENKF = true ]] ; then rm -f fort.36 ers_s0.cor ers_sp.cor ascat_s0.cor ascat_sp.cor ln -s $DATA/an/cmod.table.ieee fort.36 if [[ $OBPATH = era40 || $BASETIME -ge $date_ers2_cmod5 ]] ; then ln -s $WDIR/ers_sigma0.cor ers_s0.cor ln -s $WDIR/ers_speed.cor ers_sp.cor else ln -s $DATA/an/sigma0.cor ers_s0.cor ln -s $DATA/an/speed.cor ers_sp.cor fi ln -s $WDIR/ascat_sigma0.cor ascat_s0.cor ln -s $WDIR/ascat_speed.cor ascat_sp.cor fi ersbias=1 [[ $BASETIME -ge $date_ers2_cmod5 ]] && ersbias=3 [[ $OBPATH = era40 ]] && ersbias=3 nscawsolmax=4 lqscatazi=.true. loscatazi=.true. #======================================================================= # Link ASCAT soil moisture calibration files #======================================================================= if [[ $uptraj = 0 && $LASCATSM = true ]] || [[ $LENKF = true && $LASCATSM = true ]]; then rm -f ascatsm if [[ $LEVGEN = true ]] ; then #Monthly ASCAT SM CDF parameters: month_2_fetch_from=$(substring $BASETIME 5 6) [[ -d TMP_ASCATSM_CDF ]] && rm -rf TMP_ASCATSM_CDF mkdir TMP_ASCATSM_CDF ; cd TMP_ASCATSM_CDF ln -s $XDATA/climate/$CLIMVERSION/${RESOL}${GTYPE}/month_ascat_sm_cdf month_ascat_sm_cdf [[ -f wo_ascatcdf_month ]] && rm -f wo_ascatcdf_month echo 'write "ascat_cdf_[date]";' > wo_ascatcdf_month chmod 755 wo_ascatcdf_month grib_filter wo_ascatcdf_month month_ascat_sm_cdf mv ascat_cdf_9999${month_2_fetch_from}* ../ascatsm cd .. [[ -d TMP_ASCATSM_CDF ]] && rm -rf TMP_ASCATSM_CDF else ln -s $XDATA/climate/$CLIMVERSION/${RESOL}${GTYPE}/ascatsm_tessel ascatsm fi fi #======================================================================= # Link SMOS configuration file of the observations #======================================================================= if [[ $LSMOS = true || $LSMAP = true ]] ; then ln -s -f $DATA/sat/smos_obs_defconfig request_smos fi #======================================================================= # R/S temperature bias correction tables #======================================================================= if [[ $uptraj = 0 ]] ; then rm -f table1 table2 table3 ln -s $DATA/an/rs_bias_T_table1 table1 if [[ $OBPATH = era40 || $RSTBIAS_TS = true ]] ; then ln -s $WDIR/rs_bias_T_table2 table2 if [[ $RSTBIAS_TS = true ]] ; then rm -f table4 ln -f -s $DATA/an/rs_bias_T_table4 table4 fi else ln -s $DATA/an/rs_bias_T_table2 table2 fi ln -s $DATA/an/rs_bias_T_table3 table3 fi #======================================================================= # Identical twin experiment #======================================================================= l_mkcmarpl=.true. if [[ $uptraj = 0 || $lscreen_cont = true ]] && [[ $uptraj != 999 ]] && [[ $uptraj != $MXUP_TRAJ ]] ; then hprior=.false. lscreen=.true. lscreen_openmp=.false. #Disable threaded screening on Atos HPC2020 until failures are resolved. #-- Set the following to .false. if you don't want # MKCMARPL to be OpenMP-parallel over timeslots (see suobs.F90) lmkcmarpl_openmp=.true. if [[ $LTWINEXP = true ]] ; then l_screen_call=.false. l_split_screen=.true. l_mkcmarpl=.false. else l_screen_call=.true. l_split_screen=.false. fi # # if you want only mkcmarpl run set l_mkcmarpl_o=.true. and l_swap_out=.true. # l_mkcmarpl_o=.false. l_swap_out=.false. else lscreen=.false. lscreen_openmp=.false. lmkcmarpl_openmp=.false. l_screen_call=.false. l_split_screen=.false. l_mkcmarpl_o=.false. l_swap_out=.false. fi # First guess check options for Aeolus HLoS observations (Doppler wind lidar) nnhlsfgopt=1 # 1 # 2 # 3 if [[ $nnhlsfgopt = 3 ]] ; then zzhlsfgopt=2.0 else zzhlsfgopt=2.5 # -1.0 fi nhlsfgopt="" zhlsfgopt="" if [[ $uptraj = 0 ]] ; then if [[ $nnhlsfgopt != 1 ]] ; then nhlsfgopt="NHLSFGOPT=$nnhlsfgopt," if [[ $zzhlsfgopt -gt 0 ]] ; then zhlsfgopt="ZHLSFGOPT=$zzhlsfgopt," fi fi fi #======================================================================= # Ensemble data assimilation parameters #======================================================================= lspsdt=.false. lspp=.false. lstoph_spbs=.false. lperturb=.false. lreabvec="" ratio_backscat=0.80 sppt_ini_opts='' sppt_trun_opts='' spp_ini_opts='' spp_trun_opts='' spp_opts='' if [[ $ENDANENS -gt 0 && $member -gt 0 ]] ; then lspsdt=${_LSPSDT_} lspp=${_LSPP_} lcypat=${_LCYPAT_} lcypat_cold=${_LCYPAT_COLD_} # cold start of member if [[ $lcypat = "true" ]] ; then cypat_wrpattinc=3 # write pattern every 3h cypat_lresetseed=true # reseed random number gen cypat_resetseedfrq=3 # frequency for random number gen reseeding cypat_labstimseed=true # use absolute time for random number gen seed if [[ $uptraj = 0 ]] ; then # write out pattern only once date_4v=$( substring $WINDOW_START 1 8 ) hour_4v=$( substring $WINDOW_START 9 10 ) step_4v=$STEP_AN nhour=$step_4v while [[ $(( step_4v + PERIOD_AN )) -le $WINDOW_LENGTH_4D ]] ; do time_an=$( newdate $WINDOW_START $step_4v ) date_an=$( substring $time_an 1 8 ) hour_an=$( substring $time_an 9 10 ) step_4v=$(( step_4v + PERIOD_AN )) nhour=$nhour,$step_4v done nwrpattrun=$(echo $nhour|sed -e "s/,/ /g"|wc -w) patfnsppt=$WDIR/sppt_pattern patfnspp=$WDIR/spp_pattern [[ $lspsdt = true ]] && sppt_trun_opts="LWRPATTRUN_SDT=true, COPATTRUN_SDT='$patfnsppt',\ NWRPATTRUN_SDT=$nwrpattrun,NHOUR_PATTRUN=$nhour," [[ $lspp = true ]] && spp_trun_opts="LWRPATTRUN=true, SPP_WRPATTRUN='$patfnspp',\ NWRPATTRUN=$nwrpattrun,NHOUR_PATTRUN=$nhour," fi if [[ $lcypat_cold = false ]] ; then if [[ $uptraj -eq 999 && $late4dstep -ne 999 ]] ; then patsuf=${late4dstep} else patsuf="_ini" fi [[ $lspsdt = true ]] && sppt_ini_opts="LRDPATINIT_SDT=true, CIPATINIT_SDT='$WDIR/sppt_pattern${patsuf}'," [[ $lspp = true ]] && spp_ini_opts="LRDPATINIT=true, SPP_RDPATINIT='$WDIR/spp_pattern${patsuf}'," fi fi # lcypat if [[ $LENKF = false ]] ; then if [[ $uptraj = 0 ]] ; then lperturb=.true. if [[ $LBGPERT = true && $BASETIME -gt $INITIME ]] ; then lreabvec="LREABVEC=.true." fi fi fi fi #======================================================================= # Generate namtramelist #======================================================================= noffset_obs=0 anoffset=0 anoffset_4v=$WINDOW_LENGTH_4D_TOT if [[ $IFSMODE = 4d_inc ]] || \ [[ $IFSMODE = 3d_fgat && $uptraj = 0 ]] ; then if [[ $uptraj -eq 999 ]] ; then ctype=an nstop=1 antime=$(newdate $WINDOW_START +$late4dstep) anoffset=$( datediff -h $WINDOW_END $antime ) else if [[ $LENKF = true && $uptraj -gt 0 ]] ; then # This is to get wave model analysis output from hprior job ctype=an else ctype=4v fi anoffset=$WINDOW_LENGTH_4D_TOT nstop=$(( WINDOW_LENGTH_4D * 3600 / $tstep )) fi lscre4d=.true. else ctype=an if [[ $uptraj -lt ${MXUP_TRAJ} ]] ; then nstop=0 else nstop=1 fi lscre4d=.false. fi tfclen='t'$nstop if [[ $LEDA_ERRORS_OUT = true && $LENKF = false ]] ; then lenda="LENDA=.true.," else lenda="" fi if [[ $LFCDEPAR = true ]] ; then lmonitor_FCDEPAR="LMONITOR_FCDEPAR=.true.," l_screen_call=.false. l_split_screen=.true. l_mkcmarpl=.false. lscatint="LSCATINT=.false.," else lmonitor_FCDEPAR="" lscatint="" fi # IFS to OOPS-IFS comparison/OOPS: switch off JcDFI (this feature is in testing in OOPS) if [[ $uptraj = 0 || $uptraj -eq $MXUP_TRAJ ]] && \ [[ $LENKF = false ]] && \ [[ $LIFSASOOPS = false && $LOOPS = false ]] ; then ljcdfi="LJCDFI=.true.," else ljcdfi="LJCDFI=.false.," fi if [[ ${LAEOLUSAMD:=false} == true ]] ; then # to allow longer range AUX_MET data ljcdfi="LJCDFI=.false.," fi if [[ $LENKF = true ]] ; then lvarqcg=.false. lhuberminqcg=.true. # lhuberbgqcg="LHUBERBGQCG=false," lhuberbgqcg="" else lhuberbgqcg="" if [[ $uptraj -gt 0 && $IFSMODE = 4d_* ]]; then lvarqcg=.true. lhuberminqcg=.true. else lvarqcg=.false. lhuberminqcg=.false. fi fi # lvarqcg=.false. # lhuberminqcg=.false. # lqvarqc=.false. nprtjo=$(( WINDOW_LENGTH_4D / PERIOD_4D )) [[ $nprtjo -lt 1 ]] && nprtjo=1 # Special for 26r3. Should be implememted in IFS without date-dependency in # later cycles. if [[ $BASETIME -ge 2003071800 ]] ; then ssmi_fgchk_limit=6.25 else ssmi_fgchk_limit=999. fi if [[ $BASETIME -ge 1989010600 && $BASETIME -le 1991123118 ]] ; then kmodedv=4 else kmodedv=3 fi if [[ $FSFAMILY = "/sv" ]] ; then # 444795.69 is 4 degrees in metres. find_sv=444795.69 rmind_rad1c_0=200000. rfind_rad1c_0=$find_sv rmind_rad1c_3=200000. rfind_rad1c_3=$find_sv rfind_ssmi_wsp=$find_sv rfind_tov="RFIND_TOV=$find_sv," rfind_satob="RFIND_SATOB=$find_sv," rfind_airep="RFIND_AIREP=$find_sv," rfind_ssmi_pwc="RFIND_SSMI_PWC=$find_sv," # Thinning increased for EUMETSAT AMVs with move to 80 km WV cloud winds if [[ $BASETIME -ge $date_80km_WVcloud_AMV ]] ; then rfind_satam="RFIND_SATAM=$find_sv," rmind_satam="RMIND_SATAM=$find_sv," else rfind_satam="" rmind_satam="" fi lscre4d=.true. lsigl="" else rmind_rad1c_0=60000. rfind_rad1c_0=125000. rmind_rad1c_3=60000. rfind_rad1c_3=125000. rfind_ssmi_wsp=250000.0 rfind_tov="" rfind_satob="" rfind_airep="" rfind_ssmi_pwc="" # Thinning increased for EUMETSAT AMVs with move to 80 km WV cloud winds if [[ $BASETIME -ge $date_80km_WVcloud_AMV ]] ; then rfind_satam="RFIND_SATAM=200000.00," rmind_satam="RMIND_SATAM=96000.00," else rfind_satam="" rmind_satam="" fi lsigl="" fi noutput=1 # [[ ${ECF_TRYNO:-0} -gt 1 && $OD_MODE = true ]] && noutput=2 if [[ $FSFAMILY = "/sv" ]] ; then lfdbop=.false. else lfdbop=.true. fi #======================================================================= # Post-processing: # 3DVAR model levels: # step 0 for $uptraj > 0 # # 3DVAR pressure levels: # step 0 for $uptraj = $MXUP_TRAJ # # 4DVAR model levels: # step 0 for 0 < $uptraj < $MXUP_TRAJ # every $PERIOD_AN/2 hours for $uptraj = $MXUP_TRAJ # # 4DVAR pressure levels: # every $PERIOD_AN/2 hours for $uptraj = $MXUP_TRAJ # # (NB In order to avoid doing post-processing, set # nposts(0)=1 # nposts(1)=(number > max step number)) # #======================================================================= bigstep=100000 if [[ $IFSMODE = 4d_inc ]] ; then mxtrajm1=$((MXUP_TRAJ -1)) [[ $mxtrajm1 -ge 0 ]] || mxtrajm1=0 if [[ $LCOMPBGDEP = true ]] ; then # === No postprocessing for diagnostic background trajectory lfdbop=.false. nbposts=1 ppsteplist=$bigstep elif [[ $uptraj -eq 0 || $uptraj -eq $mxtrajm1 || $uptraj -eq $MXUP_TRAJ ]] ; then # === Postprocessing at step 0 and at restart times === if [[ $LENKF = true ]] ; then lfdbop=.true. nbposts=1 ppsteplist=$bigstep else lfdbop=.true. nbposts=1 ppsteplist="0," ppstep=$(( (WINDOW_OFFSET_4D)%(PPSTEP_INC) )) if [[ $ppstep -ne 0 ]]; then nbposts=$(( nbposts + 1 )) ppsteplist=${ppsteplist}$(( ppstep * 3600 / $tstep ))"," fi while [[ $ppstep -lt $WINDOW_LENGTH_4D ]] ; do nbposts=$(( nbposts + 1 )) ppstep=$(( ppstep + PPSTEP_INC )) ppsteplist=${ppsteplist}$(( ppstep * 3600 / $tstep ))"," done fi else # === other trajectory runs only postprocess at step zero === if [[ $LENKF = false && $LENKF_HYBRID = true && $uptraj -eq 999 ]] ; then lfdbop=.false. else lfdbop=.true. fi nbposts=1 if [[ $LENKF = true && $uptraj -eq 1 ]] ; then ppsteplist=$bigstep else ppsteplist=0 fi fi else if [[ $FSFAMILY != "/sv" ]] ; then lfdbop=.true. nbposts=1 if [[ $uptraj -eq ${MXUP_TRAJ} ]] ; then ppsteplist=0 else ppsteplist=$bigstep fi else lfdbop=.false. nbposts=1 ppsteplist=$bigstep fi fi if [[ $sat_monitor = true && $fgdir = @(monitor|sekf) ]] ; then lfdbop=.false. nposts[0]=0 nhists[0]=0 fi #gabor-cams TRAJNOFDB=${TRAJNOFDB:=false} if [[ $uptraj -lt $MXUP_TRAJ && $TRAJNOFDB = true ]] ; then lfdbop=.false. rm -f ICM??${EXPVER}+* fi #gabor-cams #======================================================================= # 3DVAR must have a timestep of less than 1 hour. # For 3DVAR, set a wave coupling frequency so large that it won't # be called. #======================================================================= #tstep=$TSTEP wamnstpw=$WAMNSTPW nuptra=$(( uptraj - 1 )) lobs="" l3dfgat="" if [[ $IFSMODE = 3d_fgat && $uptraj -eq $MXUP_TRAJ ]] || \ [[ $uptraj -eq 999 ]] ; then tstep=600. wamnstpw=2 lobs="LOBS=.false.," nuptra=1 l3dfgat="L3DFGAT=.true.," fi #======================================================================= # Interpolating trajectory for minimization #======================================================================= if [[ $uptraj -lt $MXUP_TRAJ ]] ; then eval res_inc='$'RESOLINC_$uptraj gtypeinc=$(eval echo '$'GTYPEINC_$uptraj) eval tstep_inc='$'TSTEP_INC_$uptraj else eval res_inc='$'RESOLINC_$((MXUP_TRAJ - 1)) gtypeinc=$(eval echo '$'GTYPEINC_$((MXUP_TRAJ - 1))) eval tstep_inc='$'TSTEP_INC_$((MXUP_TRAJ - 1)) fi if [[ $LTRAJHR = true && $uptraj -lt $MXUP_TRAJ && $LCOMPBGDEP = false && $LOOPS = false ]] ; then ltrajhr=".true." tstep_tra=$tstep_inc else ltrajhr=".false." tstep_tra=-1 fi #======================================================================= # Low res GRIB files for trajectory (only reads headers for grid def) #======================================================================= # OOPS: do not enable for OOPS if [[ $LTRAJHR = true ]] && [[ $LOOPS = false ]]; then rm -f lowres_gg rm -f main_gg rm -f backgr_gg?? if [[ $uptraj -lt $MXUP_TRAJ ]] ; then ln -s $bgdir/backgroundggsfc_${res_inc}${gtypeinc} lowres_gg ln -s $bgdir/backgroundggml_${res_inc}${gtypeinc} main_gg fi # Background state only written during the first trajectory run if [[ $uptraj -eq 0 ]] ; then typeset -RZ2 uptr2 uptr=0 while [[ $uptr -lt $MXUP_TRAJ ]] ; do gtypeinc=$(eval echo '$'GTYPEINC_$uptr) uptr2=$uptr eval res_backgr='$'RESOLINC_$uptr ln -s $bgdir/backgroundggml_${res_backgr}${gtypeinc} backgr_gg$uptr2 uptr=$((uptr + 1)) done fi fi # Code can cater for max 11 Outer Loop iterations jpmxup=10 # from source code of IFS ; see ifs/module/parcma.F90 uptr=0 while [[ $uptr -le $jpmxup ]] ; do if [[ $uptr -lt $MXUP_TRAJ ]] ; then eval res_backgr_$uptr='$'RESOLINC_$uptr else eval res_backgr_$uptr='-999' fi echo 'uptraj= ', $uptr, 'res_backgr=', res_backgr_$uptr uptr=$((uptr + 1)) done #======================================================================= # 4D-Var tests #======================================================================= LSETDEP=${LSETDEP:-false} if [[ $LTESTINC = true && $uptraj -le $MXUP_TRAJ ]] ; then ltestinc=".true." steptest=10800.0 if [[ $uptraj -eq 0 ]] ; then [[ ! -d TEST4DINC ]] || rm -rf TEST4DINC rm -f test4dinc_gg mkdir TEST4DINC RESTEST=255 [[ $RESTEST -le $RESOL ]] || RESTEST=$RESOL if [[ $ECCODES_API_SEED = grib1 ]] ; then ggml_dir=$XDATA/an/main_gg else ggml_dir=$XDATA/an/main_gg_grib2 fi ln -s $ggml_dir/ggml_T${RESTEST}${GTYPE}_L${LEVELS} test4dinc_gg fi else ltestinc=".false." steptest=0.0 fi if [[ $LGPINNER = true ]] ; then ninterptraj=3 ninterpincr=1 lspint=".false." else ninterptraj=3 ninterpincr=1 lspint=".true." fi [[ $LFSOBS = true ]] && lspint=".false." if [[ $LTWINTRUTH = true && $uptraj -eq 0 ]] ; then ltwintruth=".true." else ltwintruth=".false." fi if [[ $LSETDEP = true && $uptraj -eq 0 ]] ; then ltwintruth=".true." depart="TWINDEPART=1.0," else depart="" fi #======================================================================= # Modify namelist NAEPHY if coupled wave model is run #======================================================================= if [[ "$WAVE" = "yes" ]] ; then lwcou=".true." nstpw=$wamnstpw if [[ "$WAM2WAY" = "no" ]] ; then lwcou2w=".false." else lwcou2w=".true." fi else lwcou=".false." lwcou2w=".false." nstpw="2" fi ncombflen=$(echo "($MBX_SIZE * 0.9)/8" | bc) lhbiasc=.false. if [[ $LUSE_RSTRHBIAS = true ]] ; then l_new_t_bias=true l_new_rh_bias=true lbiascv=.false. ltbiasc=.false. else l_new_t_bias=false l_new_rh_bias=false lbiascv=.${RSTBIAS}. ltbiasc=.true. fi #======================================================================= # Set cloudy IR parameters #======================================================================= lcldsnk_active=.true. if [[ $LIRCLD_ASSIM_HIRS == true ]] || \ [[ $LIRCLD_ASSIM_AIRS == true ]] || \ [[ $LIRCLD_ASSIM_IASI == true ]] ; then lcldsnk_active=.false. fi # IFS to OOPS-IFS comparison/OOPS: switch off cloud sink variable if [[ $LIFSASOOPS = true || $LOOPS = true ]] ; then lcldsnk_active=.false. fi if [[ ${LJB_ACV} = true && ${LTOVSCV_ACV:-false} = true ]] ; then lcldsnk_active=.false. luse_eda_skt=.false. else luse_eda_skt=${LUSE_EDA_SKT} fi ######################################################################## # Turn off snowML for Trajectory and minimization in NAEPHY and NAMDPHY lsnml=".false." ncsnec=1 ######################################################################## # # set nspecresmin to $RESOL+1 (used for limiting maximum value of NPRTRW) nspecresmin=$((RESOL+1)) if [[ $OD_MODE = true ]]; then nwtout=${_NWTOUT_} else [[ ${FDB_WRITER_TASKS:-0} == 0 ]] && (( FDB_WRITER_TASKS = SUBMIT_TOTAL_TASKS / 4 )) [[ $FDB_WRITER_TASKS -lt 4 ]] && FDB_WRITER_TASKS=4 [[ $FDB_WRITER_TASKS -gt $SUBMIT_TOTAL_TASKS ]] && FDB_WRITER_TASKS=$SUBMIT_TOTAL_TASKS (( nwtout = SUBMIT_TOTAL_TASKS / FDB_WRITER_TASKS )) [[ nwtout -lt 1 ]] && nwtout=1 nwtout=${_NWTOUT_} fi NWRTOUT_LINE="NWRTOUT=$nwtout," lgradsp=false lecompgrid=false if [[ "$GTYPE" = "l_2" ]] ; then lgradsp=true fi if [[ "$GTYPE" = "_4" ]] ; then lecompgrid=true fi nobsprof_10=31 if [[ $LEVELS -lt 91 ]] ; then nobsprof_10=1 # This isn't as good, but is more robust with low-top model (e.g. CAMS L60). fi naermacc=1 nghgrad=21 if [[ $LMACC = true && $LAERO = true ]] ; then if [[ $LAERRRTM = true ]]; then naermacc=0 # because NAERMACC=1 would override LAERRRTM=true... fi fi if [[ ${LEPO3RA:-false} = true ]]; then nghgrad=$((nghgrad-1)) # Because ozone climatology shouldn't be used if interactive... fi if [[ ${LOUTLOOP:-false} = true ]] ; then nfrco=$(echo $COUPFREQ / $tstep | bc ) coupextr="" # Warm layer is on by default for 42 levels if [[ ${NEMOCONFIG:-ORCA025_Z75} = *42 ]]; then coupextr="LEOCWA=${LEOCWA:-true}" else coupextr="LEOCWA=${LEOCWA:-false}" fi if [[ ${LPQSCDA:-false} = true ]] ; then LEOBC="LEOBC=${LBCSST:-false},LEOBCICE=${LBCICE:-false},$coupextr," if [[ ${LBCSST:-false} = true ]] || [[ ${LBCICE:-false} = true ]]; then rm -f ICMBC ln -s $WDIR/ICMBC.1 ICMBC fi else LEOBC="LEOBC=false,LEOBCICE=false,$coupextr," fi else nfrco=0 LEOBC="LEOBC=false,LEOBCICE=false," fi lvarqc_hirs=.TRUE. lvarqc_iasi=.FALSE. if [[ $lscreen_cont = true ]]; then lvarqc_hirs=.FALSE. fi luse_eda_skt=false if [[ ${LUSE_EDA_SKT} = true && ${LEDA_ERRORS_IN} = true ]] ; then luse_eda_skt=true fi cat >namlisttraj <>namlisttraj fi #PL Activate coupled model if [[ ${_LNEMOCOUP_} = 1 && $uptraj -ne 999 ]]; then if [[ ${ICEMOD:-0} != 0 ]]; then cat >> namlisttraj << EOF &NAMMCC LMCCEC=true, LMCCIEC=false, LNEMOCOUP=true LNEMO1WAY=false LMCC04=true LNEMOFLUXNC=.false. LMCCICEIC=false LMCCDYNSEAICE=true LNEMOLIMTEMP=${LIMTEMP:-false} LNEMOLIMTLVL=${LIMTLVL:-false} LNEMOLIMALB=${LIMALB:-false} LNEMOLIMTHK=${LIMTHK:-false} / EOF else cat >> namlisttraj << EOF &NAMMCC LMCCEC=true, LMCCIEC=false, LNEMOCOUP=true LNEMO1WAY=false LMCC04=true LNEMOFLUXNC=.false. LMCCICEIC=false / EOF fi fi if [ ${LMACC} = true ] ; then LCOMPO_DDFLX_DIR=${LCOMPO_DDFLX_DIR:-false} LCHEM_DIA_TRAJ=${LCHEM_DIA_TRAJ:-false} if [[ $LCHEM_DIA_TRAJ = true ]]; then lchem_dia=$LCHEM_DIA lchem_diac=$LCHEM_DIAC else lchem_dia=false lchem_diac=false fi # setup general composition namelist cat >> namlisttraj << EOF &NAMCOMPO LCHEM_DIA=$lchem_dia, LCHEM_DDFLX=$LCHEM_DDFLX, LCOMPO_DDFLX_DIR=$LCOMPO_DDFLX_DIR, LCHEM_TROPO=$LCHEM_TROPO, LCOMPO_DCDD=${LCOMPO_DCDD:-true}, LCOMPO_DCBB=${LCOMPO_DCBB:-true}, LCOMPO_DCVOC=${LCOMPO_DCVOC:-true}, LCOMPO_DCANT=${LCOMPO_DCANT:-false}, LANT_HIGH=${LANT_HIGH:-false}, LFIRE=$lfire, LINJ=$linj, LINJ_CHEM=$linj_chem, LVOLC_ALTI=${LVOLC_ALTI:=false}, LAERNITRATE=${LAERNITRATE}, LAERSOA=${LAERSOA}, LAERNUCL=${LAERNUCL}, AERO_SCHEME="$AERO_SCHEME", $(echo $gems2namcompo | perl -pe 's/!/\n/g') / EOF # setup chemistry namelist if [ ${LCHEM} = true ] ; then if [ ${CHEM_SCHEME} = "decay" ] ; then cat >> namlisttraj << EOF &NAMVOLCANO LVOCENS=.false., SVOCLAT=64.41, SVOCLON=-17.32, NVOCDATES=1, IVOCSTART(1)=$BASETIME, SEMIVOC(1)=1000.0, SLVOC1(1)=10.0 SLVOC2(1)=5.0, / EOF fi cat >> namlisttraj << EOF &NAMCHEM CHEM_SCHEME="${CHEM_SCHEME}", LCHEM_DIAC=$lchem_diac, LCHEM_LIGHT=$LCHEM_LIGHT, ${RCHEM_LINOX_SCALING:+RCHEM_LINOX_SCALING=$RCHEM_LINOX_SCALING,} LCHEM_ACNOX=$LCHEM_ACNOX, LCHEM_0NOX=$LCHEM_0NOX, LCHEM_REVCHEM=${LCHEM_REVCHEM:-false}, KCHEM_NOXADV=${KCHEM_NOXADV:-0}, LCHEM_ANAO3=$LCHEM_ANAO3, KCHEM_SOLVE=${KCHEM_SOLVE:-1}, LCHEM_AEROI=$LCHEM_AEROI, LCHEM_O3RAD=$LCHEM_O3RAD, LCHEM_DVOL=${LCHEM_DVOL:-false}, LCHEM_CSHAPE=.false., LCHEM_WDFR=.true., / EOF fi fi # Modify NAMDPHY to be sure that NCSNEC=1 # and add mass diagnostics for composition if enabled if [[ $LMACC = true ]] ; then ncextr=0 nvextr=0 if [[ $lchem_dia = true ]] ; then if [[ $lchem_diac = true ]] ; then nvextr=17 elif [[ $AERO_SCHEME = glomap ]] ; then nvextr=11 else nvextr=7 fi ncextr=$(( ${nchem:-0} + ${naero:-0} + ${nghg:-0} + 4)) [[ $ncextr -ge $LEVELS ]] || ncextr=$LEVELS namdphy_extra="NVEXTR=$nvextr,NCEXTR=$ncextr," else namdphy_extra="" fi else namdphy_extra="" fi cat >> namlisttraj <> namlisttraj <> namlisttraj <> namlisttraj <> namlisttraj << EOF &NAEAER NTYPAER=${aero_ntypaer}, $(echo $gems_naeaer | perl -pe 's/!/\n/g') LAERSOA_CHEM=${LAERSOA_CHEM:=true}, LAERSOAEMIS_FLUX=${LAERSOAEMIS_FLUX:=true}, LAERVOL=${LAERVOL}, NDRYDEPVEL_DYN=${NDRYDEPVEL_DYN:=1}, LAERDUSTSOURCE=${LAERDUSTSOURCE:=false}, LAERDUST_NEWBIN=${LAERDUST_NEWBIN:=false}, LAERNGAT=true, NAERSCAV=${NAERSCAV:=2}, LAERGTOP=true, LAERHYGRO=true, LAERSEDIM=true, LAERSEDIMSS=${LAERSEDIMSS:=false}, LAERDRYDP=true, LAERSURF=true, NDDUST=${NDDUST:=3}, NSSALT=${NSSALT:=1}, NSO4SCHEME=${NSO4SCHEME:=1}, LSEASALT_RH80=${LSEASALT_RH80:=true}, LAERRRTM=${LAERRRTM}, EOF if [[ $AERO_SCHEME = "aer" ]] ; then cat >> namlisttraj << EOF NDDUST=${NDDUST:=3}, EOF fi cat >> namlisttraj << EOF / EOF fi fi #======================================================================= # Generate post-processing namelist, NAMPPC # For 3DVAR, do not post-process surface analysis variables. # od also want q on pressure levels. #======================================================================= if [[ $LECURR = true ]] ; then ocurr="${ucurr},${vcurr}," else ocurr="" fi if [[ $LSEKF = true ]] ; then iswvl4="" else iswvl4="42," fi lake_inv="26,228007," lake_prog="228008,228009,228010,228011,228012,228013,228014" if [[ $uptraj -eq 999 ]] ; then ssalist="" elif [[ $IFSMODE = 4d_inc ]] || \ [[ $IFSMODE = 3d_fgat && $uptraj = 0 ]] ; then ssalist="31,33,34,35,36,37,38,39,40,41,${iswvl4}${ocurr}139,141,167,168,170,183,238,${lake_prog}," else ssalist="" fi if [[ $uptraj -eq 999 || $TASK = monitoring ]] ; then acclist="" ifsf="" else acclist="8,9,44,45,57,58,59,142,143,169,175,176,195,196,197,205," ifsf="228131,228132,244,245," fi if [[ $WAVE = yes ]] ; then charnock="148," else charnock="" fi if [[ $LEVELS = 19 || $LEVELS = 31 || $LEVELS = 40 ]] ; then stratlev="" else stratlev=" 700., 500., 300., 200., 100.," fi if [[ $ERA_POSTPROC = true ]] ; then p76list="77500., 70000." nfp2df=3 ps="134," else p76list="70000." nfp2df=2 ps="" fi nfp3dfs=8 # Add prognostic rain and snow (RMF) nfp3dfs=$((nfp3dfs + 2)) if [[ $LOZONE = true ]] ; then no3pl=1 o3pl="203," else no3pl=0 o3pl="" fi if [[ $LMACC = true ]] ; then if [[ $LCHEM = true ]] ; then nchempl=${nchempl} chempl=${chem_pl_out} else nchempl=0 chempl="" fi if [[ $LGHG = true ]] ; then nghgpl=${nghg} ghgpl=${ghg_nam} else nghgpl=0 ghgpl="" fi if [[ $LAERO = true ]] ; then naeropl=$((nactaero + naero_cv)) aeropl=${aero_nam}${aero_cv_nam} else naeropl=0 aeropl="" fi else nchempl=0 chempl="" nghgpl=0 ghgpl="" naeropl=0 aeropl="" fi ncloudpl=3 cloudpl="246,247,248," nfp3dfp=$(( 8 + no3pl + nchempl + nghgpl + naeropl + ncloudpl )) mfp3dfp="060,129,130,133,135,138,155,157,$o3pl${cloudpl}${chempl}$ghgpl$aeropl" etadot="077," nfp3dfs=$((nfp3dfs + 1)) [[ $uptraj -lt $MXUP_TRAJ ]] && nfp3dfp=0 if [[ $LOZONE = true ]] ; then o3sfc="206," o3="203," nro3=1 else o3sfc="" o3="" nro3=0 fi nfp3dfs=$((nfp3dfs + nro3)) if [[ $LMACC = true ]] ; then if [[ $LGHG = true ]] ; then nfp3dfs=$(( nfp3dfs + nghg )) ghgsfc_out=${ghg_sfc_out_nam} ghg=${ghg_nam} ghg_li=${ghg_nam} else nfp3dfs=$nfp3dfs ghgsfc_out="" ghg="" ghg_li="" fi if [[ $LCHEM = true ]] ; then nfp3dfs=$(( nfp3dfs + nchem )) chemsfc=${chem_sfc_out} chem=${chem_ml_out} else nfp3dfs=$nfp3dfs chemsfc="" chem="" fi if [[ $LAERO = true ]] ; then nfp3dfs=$(( nfp3dfs + naero )) aerosfc_out=${aero_sfc_out_nam} aero=${aero_nam}${aero_cv_nam} else nfp3dfs=$nfp3dfs aerosfc_out="" aero="" fi else ghgsfc_out="" ghg="" ghg_li="" nghg=0 chemtc="" chemsfc="" chem="" nchem=0 aerosfc_out="" aero="" naero=0 fi if [[ $LISENTRPP = true && \ ($uptraj -eq $MXUP_TRAJ || $uptraj -eq 999 ) ]] ; then nfp3dfv=$(( 6 + nro3 + nchempl + nghg + naeropl )) mfp3dfv="MFP3DFV=3,54,129,131,132,133,$o3$chempl$ghg_li$aeropl" nfp3dft=$(( 6 + nro3 + nchempl + nghg + naeropl )) mfp3dft="MFP3DFT=53,54,60,133,138,155,$o3$chempl$ghg_li$aeropl" rfp3th="RFP3TH=265,275,285,300,315,320,330,350,370,395,430,475,530,600,700,850," else nfp3dfv=0 mfp3dfv="" nfp3dft=0 mfp3dft="" rfp3th="" fi lai=" 66,67," modis6="210186,210187,210188,210189,210190,210191" wind100="228246,228247," wind200="228239,228240," # 200si would breaks symetry oextr="" #if [[ $LNEMOCOUP = 1 && ${LOCEANEXTRGRIB:-false} = true ]]; then # FC ONLY # oextr="174098,151148,151145,151163,151130,151164,151175," #fi if [[ $LSEKF = true ]] ; then iswlv4="42," else iswlv4="" fi invarlist="15, 16, 17, 18, 27, 28, 29, 30, 43, 74, 129, 160, 161, 162, 163, 172, 173, 174, 234," invarlist=${invarlist}${modis6}${lai}${lake_inv} if [[ $uptraj -eq 999 ]]; then invarlist="" fi if [[ ${MONITOR_ONLY:=false} = true ]] ; then sh2="" else sh2="174096," fi sfcveriflist="78,79,228,228089,228090," mfpphy="32,${invarlist}\ ${iswlv4}${acclist}${sfcveriflist}134,136,137,\ ${ssalist}${charnock}${ifsf}151,\ 164,165,166,\ 186,187,188,198,${wind100}${fdir},${cdir},${wind200}${oextr}\ ${o3sfc}229,230,235,236,${sh2}${ghgsfc_out}${chemsfc}${aerosfc_out}" nfpphy=$(echo ${mfpphy}|sed -e s/,/' '/g|wc -w) cat >>namlisttraj <> namlisttraj << EOF &NAMGRIB NLOCGRB=36, NSTREAM=1249, NENSFNB=$NUPTRA_RANGE, NTOTENS=20, NCYCLE=$NCYCLE, CTYPE='$ctype', CFCLASS='$CLASS', / EOF elif [[ $STREAM = SCDA ]] ; then cat >> namlisttraj << EOF &NAMGRIB NSTREAM=1026, NCYCLE=$NCYCLE, CTYPE='$ctype', CFCLASS='$CLASS', / EOF elif [[ $STREAM = LWDA ]] ; then cat >> namlisttraj << EOF &NAMGRIB NLOCGRB=36, NSTREAM=1247, NWINOFF=$anoffset, NWINOFF_4V=$anoffset_4v, NBITSSHLNSP=24, NCYCLE=$NCYCLE, CTYPE='$ctype', CFCLASS='$CLASS', / EOF elif [[ $STREAM = ELDA ]] ; then cat >> namlisttraj << EOF &NAMGRIB NLOCGRB=36, NSTREAM=1249, NENSFNB=$member, NTOTENS=$endamembers, NWINOFF=$anoffset, NWINOFF_4V=$anoffset_4v, NBITSSHLNSP=24, NCYCLE=$NCYCLE, CTYPE='$ctype', CFCLASS='$CLASS', / EOF else cat >> namlisttraj << EOF &NAMGRIB NBITSSHLNSP=24, NCYCLE=$NCYCLE, CTYPE='$ctype', CFCLASS='$CLASS', / EOF fi #======================================================================= # Activate regularization in CLOUDSTTL/AD for 1D-Var rain # Activate full simplified physics #======================================================================= if [[ $LRAIN1D = true ]] || [[ $LRAIN4D = true ]] ; then lraind=true else lraind=false fi if [[ $uptraj -eq 0 && $lraind = true ]] ; then lregcl=.true. else lregcl=.false. fi if [[ $member -gt 0 && $NMINSIMPHYMEM -ne -1 ]]; then NMINSIMPHY=$NMINSIMPHYMEM fi # OOPS: switch off if [[ $LTRAJHR = true && $uptraj -ge $NMINSIMPHY && $uptraj -lt $MXUP_TRAJ ]] && \ [[ $LOOPS = false ]]; then letrajp=.true. else letrajp=.false. fi cat >>namlisttraj <>namlisttraj <>namlisttraj <>namlisttraj <>namlisttraj <>namlisttraj << EOF &NAETLDIAG / EOF cat $XDATA/ifs/namelist_$IFS_CYCLE >> namlisttraj ######## adapt namelistfc to select the longrange forcing ###################### [[ $LONGRANGE_FORCING = true ]] && longrange_forcing -n namlisttraj cat namlisttraj rm -f fort.4 ln -s namlisttraj fort.4 # Revove any leftover test-harness output files for file in gom_plus_dump* hop_results* ; do rm -f $file done #======================================================================= # chemical run setup #======================================================================= if [[ $LMACC = true ]] ; then chem_scheme_files='' if [[ $LCHEM = true && $CHEM_SCHEME = @(tm5|bascoetm5) ]] ; then chem_scheme_files="$chem_scheme_files uars_ratio.txt tropo_look_up_cbmhybrid.dat aerosol_reduce.dat" chem_scheme_files="$chem_scheme_files OMI.data.extraterrest haloe_ch4clim.dat" fi if [[ $LCHEM = true && $CHEM_SCHEME = @(bascoe|bascoetm5|n2o) ]] ; then # Jtables **BACKWARD COMPATIBILITY ONLY** # ln -sf $DATA/j_*.dat $DATA/info_j.dat . # cross-sections and auxiliary data for TUV # ln -sf $DATA/crs_*.dat . chem_scheme_files="$chem_scheme_files solflux_socrates-lean97.dat solflux_socrates.dat srb_kockarts94.dat" chem_scheme_files="$chem_scheme_files CO2_vertprof.dat NO2_vertprof.dat NO_vertprof.dat O3_vertprof.dat" fi for fname in $chem_scheme_files ; do ln -sf $DATA/$fname . done if [[ $LCHEM = true && $CHEM_SCHEME = 'mocage' ]] then month=$(substring $BASETIME 5 6 ) rm -f mocage_jdata_v2 ln -s $DATA/Jdata${month}_CIFS.bin mocage_jdata_v2 fi if [[ $LAERO = true && ${AERO_SCHEME:-aer} = glomap ]]; then ln -sf $DATA/glomap_prep . fi fi #======================================================================= # wave model setup #======================================================================= if [[ "$WAVE" = "yes" ]] ; then rm -f wam_namelist ln -s ${WDIR}/wam_namelist_4d_${uptraj} wam_namelist fi #======================================================================= # If you want to watch ifs.stat, put it on $ADIR #======================================================================= rm -f ifs.stat if [[ ${MRFSDIR:-no} != no ]] ; then ln -s ${MRFSDIR}/ifs.stat . fi if [[ $LFCDEPAR = true ]] ; then ### not true any more ((number_of_ranges = (1+($LAST_RANGE - $FIRST_RANGE)/ $STEP_RANGE))) export NFCDIAG export FC_OBSTAT_RANGE=${_FC_OBSTAT_RANGE_} fi #======================================================================= # Execute trajectory. #======================================================================= banner ${mode}_${uptraj} || : rm -f NODE* stdo.lst stderr.lst diagvar.txt get_exe -f ${IFS_EXECUTABLE} hour=$( echo $BASETIME | cut -c9-10 ) # Create links to useful debugging info into log dir ln -sf $LOGS/ifs.log.${_TASK_}.$ECF_TRYNO rp_ifs_exe ln -sf ifs.log.${_TASK_}.$ECF_TRYNO $LOGS/ifs.err.${_TASK_}.$ECF_TRYNO ln -sf $LOGS/ifs.stat.${_TASK_}.$ECF_TRYNO ifs.stat ln -sf $LOGS/NODE.001_01.${_TASK_}.$ECF_TRYNO NODE.001_01 ln -sf $LOGS/gstats.${_TASK_}.${ECF_TRYNO}.xml gstats.xml export PIFS_LD_LIBRARY_PATH=$LIBSBL/$STREAM/${hour}:${PIFS_LD_LIBRARY_PATH:=""} xmeter ifs 2 #export ODB_TEST_INDEX_RANGE=-1 # pwl set -o pipefail run_parallel ${IFS_EXECUTABLE} -ft$nstop -t $tstep -v ecmwf \ -e $EXPVER -c 2 -a sli 2>&1 | safecat -i -o rp_ifs_exe || { set +e ls -ltr safecat ocean.output safecat NODE* safecat ifs.stat safecat $WDIR/${mode}_${uptraj}.* safecat rp_ifs_exe set -e if [[ $uptraj -eq 999 ]]; then grep "WIND TOO STRONG, EXPLOSION" rp_ifs_exe if [[ $? -eq 0 ]]; then if [[ $LRESTART999 = true || $OD_MODE = true ]]; then xevent wind exit 0 else echo "*** Run the restart_999 task ***" echo "To automatically trigger restart_999 when this problem occurs," echo " set LRESTART999 (in prepIFS, this is found under 'Data Assimilation Mode')." fi fi fi exit 1 } set +o pipefail set +e safecat ocean.output safecat NODE* safecat ifs.stat safecat $WDIR/${mode}_${uptraj}.* set -e xmeter ifs 3 #======================================================================= if [[ $DR_HOOK = true && -f ${DR_HOOK_PROFILE}.1 ]] ; then head -100 ${DR_HOOK_PROFILE}.1 || : fi if [[ $DR_HOOK = true && -f ${DR_HOOK_PROFILE}.1-mem ]] ; then head -100 ${DR_HOOK_PROFILE}.1-mem || : fi #======================================================================= # Update observational audit information #======================================================================= if [[ -f NODE.001_01 && -d $WDIR/$dbname ]] ; then create_audit -f $WDIR/$dbname/$dbname.audit \ -n "$dbname:${IFSMODE}:${mode}:${uptraj}" \ -t JOTABLE \ -c "awk '/Diagnostic JO-table/,/End of JO/' < NODE.001_01" if [[ $uptraj = 0 ]] ; then create_audit -f $WDIR/$dbname/$dbname.audit \ -n "$dbname:${IFSMODE}:${mode}:${uptraj}" \ -t SCREENSTAT \ -c "awk '/SCREENING STATISTICS/,/FINISH SCREENING OF OBSERVATIONS/' < NODE.001_01" fi fi #======================================================================= # Save variational bias parameter info #======================================================================= if [[ $lvarbc = true && $uptraj -lt $MXUP_TRAJ && $LFCDEPAR = false ]] ; then mv VARBC.cycle $WDIR/VARBC.cycle_traj_${uptraj} fi if [[ $lvarbc = true && $uptraj = $MXUP_TRAJ && $LFCDEPAR = false ]] ; then if [[ $member -gt 0 ]] ; then rm VARBC.cycle* else mv VARBC.cycle $WDIR fi fi #======================================================================= # Save 4DVAR diagnostic file #======================================================================= rm -f $WDIR/diagvar_traj_${uptraj} [[ -f diagvar.txt ]] && mv diagvar.txt $WDIR/diagvar_traj_${uptraj} if [[ ${LJB_ACV} = true && ${uptraj} -lt $MXUP_TRAJ ]] ; then if [[ -f PAR1DACV.cycle ]] ; then rm -f $WDIR/PAR1DACV.cycle_traj_${uptraj} mv PAR1DACV.cycle $WDIR/PAR1DACV.cycle_traj_${uptraj} fi fi #======================================================================= # Save compressed CMA #======================================================================= rm errgrib* eda_spread_grib* fort.4 if [[ $fgdir != sekf ]] ; then [[ -f $IOASSIGN ]] && mv $IOASSIGN $WDIR/. || true fi # For managing CCMAs in the case of re-running parts of the minimisation: touch $bgdir/ifstraj_updated_ccma #======================================================================= # Keep slimmed-ODBs for EDA-spread calibration if required # (only required if EDA does not have SES fields for radiances, # or if we run a stand-alone EDA, for which calibration of the ES # fields is done with the control) #======================================================================= if [[ $LENKF = false && $LENKF_HYBRID = false && $LENS_CAL = true ]] ; then # This is done only for the EDA # if [[ $uptraj -eq $MXUP_TRAJ ]] ; then if [[ ( $ENDANENS -eq 0 && $LEDA_ERRORS_IN = true && $LSES_EDA = false && $LEDFAMILY = false ) \ || ( $ENDANENS -gt 0 && $MEMBER -eq 0 && $BASETIME > $INITIME ) ]] ; then CHECK_DIR $WORK/eda_err for sensor in hirs amsua amsub mhs ; do if [[ -d $WDIR/ECMA.${sensor} ]] ; then odbsql -i $WDIR/ECMA.${sensor} \ -q 'select satellite_identifier, sensor, vertco_reference_1, degrees(lat) as lat@hdr, lsm, eda_spread, fg_depar from hdr, body, sat, modsurf,errstat where datum_status = 1' \ -f newodb -o $WORK/eda_err/${sensor}.${BASETIME}.odb fi done fi fi fi #======================================================================= # Save SAR wave spectra #======================================================================= sat_sar=${SAT_SAR:=envisat} if [[ $WAMSAR = yes ]] ; then if [[ $WAMSARASS = true ]] ; then if [[ $sat_sar = envisat ]] ; then fname="INA" else fname="INV" fi suffix="" else if [[ $sat_sar = envisat ]] ; then fname=COA else fname=COS fi suffix=4v fi current_dtg=$FIRST_AN while [ $current_dtg -le $LAST_AN ] ; do date=${current_dtg}00 if [ -f ${fname}${date}${suffix} ] ; then mv ${fname}${date}${suffix} $WDIR/wave/${fname}${date}${suffix} fi if [[ $WAMSARASS = false ]] ; then [ -f COS${date}an ] && mv COS${date}an $WDIR/wave/COS${date}AN [ -f COA${date}an ] && mv COA${date}an $WDIR/wave/COS${date}AN fi current_dtg=$(newdate $current_dtg +$PERIOD_AN) done fi if [[ $LENKF = false && $LENKF_HYBRID = true && $uptraj -eq 999 ]] ; then rm -f $WDIR/an_4dvar_shml $WDIR/an_4dvar_ggml mv ICMSH${EXPVER}+000000 $WDIR/an_4dvar_shml mv ICMUA${EXPVER}+000000 $WDIR/an_4dvar_ggml fi #gabor-cams if [[ $uptraj -lt $MXUP_TRAJ && $TRAJNOFDB = true ]] ; then typeset -Z6 pstepn typeset -Z6 psteph for ppsteph in 3 6 9 12 do pstepn=$(( ppsteph * 3600 / $tstep )) psteph=$ppsteph [[ -f ICMSH${EXPVER}+$pstepn ]] && mv ICMSH${EXPVER}+$pstepn ICMSH${EXPVER}+$psteph [[ -f ICMUA${EXPVER}+$pstepn ]] && mv ICMUA${EXPVER}+$pstepn ICMUA${EXPVER}+$psteph [[ -f ICMGG${EXPVER}+$pstepn ]] && mv ICMGG${EXPVER}+$pstepn ICMGG${EXPVER}+$psteph done for file in $WDIR/SGS* $WDIR/MPP* do if [[ -f $file ]] ; then $GRIB2FDB_CMD -f $file mkdir -p $WDIR/tmp/$uptraj mv $file $WDIR/tmp/$uptraj #### rm -f $file fi done fi #gabor-cams #========================================================================================== # Put COMPO mass diagnostics to $DATA #========================================================================================== if [[ $LMACC = true && $LCHEM_DIA_TRAJ = true && $uptraj -ne 999 ]] ; then if [[ $LCHEM_DIA = true ]] ; then grep MASSDIA NODE.001_01* > $DATA/traj${uptraj}_massdia_chem__${EXPVER}_${BASETIME}.txt fi if [[ $LCHEM_DIAC = true ]] ; then grep OZONBUD NODE.001_01* > $DATA/traj${uptraj}_ozonbud_chem__${EXPVER}_${BASETIME}.txt fi fi #========================================================================================== # Send an Email if the screening hit the pb of ngenada finding out of range status values #========================================================================================= set +e fgrep "WARNING from NGENADA" stderr.lst NODE* send_mail=$? set -e if [[ $send_mail -eq 0 ]] ; then if [[ $CLASS = od ]] ; then recipient="integration_team das dag diad stf" else recipient=$OWNER fi mailx -s "screening warning" $recipient <$TMPDIR/ifsvar <<\_eof_ifsvar : #include $EXPVER/include/ifsvar ($EXPVER/ifstraj_999.ecf) #ifsvar version: 20120305 set -euxv #======================================================================= # # Script ifsvar # ------------- # # Purpose : Control incremental variational analysis # ------- # # Usage : ifsvar -u uptraj -m mode -s sat_monitor -t fgdir # ----- # # Parameters : -u uptraj - trajectory update number # ---------- -m mode - traj (trajectory) or min (minimization) # ---------- -s sat_monitor - satellite data monitoring only (true|false) # ---------- -t fgdir - working directory for fg only (monitor|sekf) # #======================================================================= set +v : #include $EXPVER/include/cycle_times ($EXPVER/include/ifsvar) #======================================================================= # # cycle_times # ----------- # # Purpose : Define variables control the date and times for # ------- cycling of the assimilation window. # #======================================================================= IFSMODE=${IFSMODE:=none} PERIOD_4D=${PERIOD_4D:=-999999} WINDOW_LENGTH_4D=${WINDOW_LENGTH_4D:=-999999} WINDOW_OFFSET_4D=${WINDOW_OFFSET_4D:=-999999} REINIWINDOW_LENGTH_4D=${REINIWINDOW_LENGTH_4D:=-999999} NUMINI=${_NUMINI_} PERIOD_BG=${PERIOD_BG:=-999999} echo "NUMINI=$NUMINI" # The variables below are derived from WINDOW_LENGTH_4D and WINDOW_OFFSET_4D # later in this file if WINDOW_LENGTH_4D is specified WINDOW_START=-999999 WINDOW_END=-999999 BKG_TIME=-999999 NXBGTIME=-999999 FIRST_AN=-999999 LAST_AN=-999999 STEP_AN=-999999 NO6HTSL=-999999 #======================================================================= # Determine appropriate value for PERIOD_AN and PERIOD_OBS #======================================================================= PERIOD_AN_ATM=${PERIOD_AN_ATM:=6} PERIOD_AN_SFC=${PERIOD_AN_SFC:=6} LPERIOD_AN_SFC=${LPERIOD_AN_SFC:=false} # Set PERIOD_AN, using $LPERIOD_AN_SFC to select between # surface-related tasks and the atmospheric 4d-var if [[ $LPERIOD_AN_SFC = true ]] ; then PERIOD_AN=${PERIOD_AN_SFC} else PERIOD_AN=${PERIOD_AN_ATM} fi # Allow to override this via ecFlow variable - this enables it to be # optionally relaxed from 6 to 12 in the archiving family for CAMS # experiments if you don't need to archive the 06Z and 18Z analyses # (which aren't used to initialise forecasts in a 03-15 window). PERIOD_AN=${_PERIOD_AN_} echo "PERIOD_AN=$PERIOD_AN" PERIOD_OBS=6 #======================================================================= # Some basic prints #======================================================================= echo "BASETIME=$BASETIME" echo "PERIOD_4D=$PERIOD_4D" echo "WINDOW_LENGTH_4D=$WINDOW_LENGTH_4D" echo "WINDOW_OFFSET_4D=$WINDOW_OFFSET_4D" if [[ $WINDOW_LENGTH_4D -gt 0 ]] ; then WINDOW_CUTOFF_4D=$(( WINDOW_LENGTH_4D - WINDOW_OFFSET_4D )) else WINDOW_CUTOFF_4D=-999999 fi echo "WINDOW_CUTOFF_4D=$WINDOW_CUTOFF_4D" echo "PERIOD_BG=$PERIOD_BG" #======================================================================= # Checks #======================================================================= if [[ $WINDOW_OFFSET_4D -gt $WINDOW_LENGTH_4D ]] ; then echo "Window offset is longer than assimilation window" exit 1 fi if [[ $PERIOD_BG -lt $PERIOD_4D ]]; then case $IFSMODE in 4d_inc|3d_fgat|early_delivery) echo "Background cannot be more recent than previous cycle" exit 1 ;; esac fi #======================================================================= # Determine correct BASETIME #======================================================================= INIBEGINDATE=${_INIBEGINDATE_} _inihour=${_INIBEGINHOUR_} INIBEGINHOUR=$(printf %02d $_inihour) if [[ $FAMILY = */make/* || $FAMILY = */inicond/* ]] ; then if [[ $FAMILY = */make/* ]] ; then CYCLETIME=$(echo ${INIBEGINDATE}${INIBEGINHOUR} | cut -c1-10) fi back=$(( (NUMINI+1) * PERIOD_4D )) CYCLETIME=$( newdate $CYCLETIME -$back ) fi echo "CYCLETIME=$CYCLETIME" #======================================================================= # Split outer loop #======================================================================= NSPLIT4DWIN=${NSPLIT4DWIN:=0} NSUBWIN4D=0 SUBWIN_OFFSET=0 LSPLIT4D_SPINUP=false if [[ $NSPLIT4DWIN -gt 0 ]] ; then subtime=$CYCLETIME isubwin=1 while [[ $isubwin -le $NSPLIT4DWIN ]] ; do if [[ $subtime -ge $INITIME ]] ; then NSUBWIN4D=$isubwin fi isubwin=$((isubwin + 1)) subtime=$(newdate $subtime -$WINDOW_LENGTH_4D) done [[ $NSUBWIN4D -lt $NSPLIT4DWIN ]] && LSPLIT4D_SPINUP=true [[ $NSUBWIN4D -gt 1 ]] && SUBWIN_OFFSET=$(( WINDOW_LENGTH_4D * (NSUBWIN4D-1) )) fi echo "NSPLIT4DWIN=$NSPLIT4DWIN" echo "NSUBWIN4D=$NSUBWIN4D" echo "SUBWIN_OFFSET=$SUBWIN_OFFSET" #======================================================================= # Beginning and end of the current window #======================================================================= if [[ $WINDOW_LENGTH_4D -gt 0 ]] ; then WINDOW_START=$( newdate $CYCLETIME -$WINDOW_OFFSET_4D ) WINDOW_END=$( newdate $CYCLETIME $WINDOW_CUTOFF_4D ) echo "WINDOW_START=$WINDOW_START" echo "WINDOW_END=$WINDOW_END" #======================================================================= # Background #======================================================================= BKG_STEP=${STEP_BG:=3} if [[ $REINITIALIZE = true && $REINI_NOT_ED = true ]] ; then BKG_STEP=$(( BKG_STEP + REINIOFFSET - PERIOD_AN )) fi echo "BKG_STEP=$BKG_STEP" BKG_TIME=$( newdate $WINDOW_START -$BKG_STEP ) echo "BKG_TIME=$BKG_TIME" if [[ $REINITIALIZE = true || $LEDFAMILY = true ]] ; then WINDOW_LENGTH_BG=$REINIWINDOW_LENGTH_4D else WINDOW_LENGTH_BG=$WINDOW_LENGTH_4D fi echo "WINDOW_LENGTH_BG=$WINDOW_LENGTH_BG" BKG_OFFSET=$(( WINDOW_LENGTH_BG - PERIOD_BG + BKG_STEP )) echo "BKG_OFFSET=$BKG_OFFSET" # Time for next background (ie start of cycling fc) NXBGTIME=$( newdate $WINDOW_END -$BKG_OFFSET ) # EH: Below is for ED 8h window - need to correct in a general way if [[ $LEDFAMILY = true ]] ; then NXBGTIME=$CYCLETIME fi echo "NXBGTIME=$NXBGTIME" #======================================================================= # Find analysis (synoptic) times #======================================================================= hh="$(substring $WINDOW_START 9 10)" # sh step=$(( 10#$hh % PERIOD_AN )) [[ $step -gt 0 ]] && step=$(( PERIOD_AN - step )) FIRST_AN=$( newdate $WINDOW_START $step ) if [[ $CERA_OUT = true && $FIRST_AN = $WINDOW_START ]] ; then # Until overlapping windows are fully implemented, cannot archive analysis at start of window FIRST_AN=$( newdate $WINDOW_START +$PERIOD_AN) fi hh="$(substring $WINDOW_END 9 10)" step=$(( 10#$hh % PERIOD_AN )) LAST_AN=$( newdate $WINDOW_END -$step) if [[ $FAMILY = */make/* || $FAMILY = */inicond/* ]] ; then FIRST_AN=$NXBGTIME LAST_AN=$NXBGTIME fi STEP_AN=$( datediff -h $FIRST_AN $WINDOW_START ) echo "FIRST_AN=$FIRST_AN" echo "LAST_AN=$LAST_AN" echo "STEP_AN=$STEP_AN" hh_start=$( substring $WINDOW_START 9 10 ) echo "hh_start=$hh_start" case $hh_start in 03|09|15|21) NO6HTSL=$(( WINDOW_LENGTH_4D / PERIOD_OBS )) ;; *) NO6HTSL=$(( WINDOW_LENGTH_4D / PERIOD_OBS + 1 )) esac echo "NO6HTSL=$NO6HTSL" ## Wave model assimilation ## Enforce 6 hourly wave assimilation wam_assimil_period=${WAM_ASSIMIL_PERIOD:=6} if [[ $wam_assimil_period -lt 6 ]] ; then if [[ $FAMILY = */make/* || $FAMILY = */inicond/* ]] ; then anstart=$NXBGTIME else anstart=$WINDOW_START fi FIRST_AN_WAVE=$( newdate $anstart $wam_assimil_period ) PERIOD_AN_WAVE=$wam_assimil_period LAST_AN_WAVE=$WINDOW_END else FIRST_AN_WAVE=$FIRST_AN PERIOD_AN_WAVE=$PERIOD_AN LAST_AN_WAVE=$LAST_AN fi fi #======================================================================= # End cycle_times #======================================================================= WINDOW_LENGTH_4D_TOT=$(( WINDOW_LENGTH_4D + SUBWIN_OFFSET )) echo "WINDOW_LENGTH_4D_TOT=$WINDOW_LENGTH_4D_TOT" #======================================================================= # Things that do not depend on current cycle time #======================================================================= DATE_OPER_DCDA=2004062900 DATE_OPER_ENDA=2010062200 DATE_OPER_LWDA=2013111900 ANOFFSET_TYPES='4i|4v|an|fc|ef|ea|me|em|es|ses' WINDOW_LENGTH_4D_TOT_OPER=12 EDA_WINDOW_LENGTH_4D_TOT_OPER=12 EDA_WINDOW_LENGTH_4D=${EDA_WINDOW_LENGTH_4D:=12} INI_WINDOW_LENGTH_4D=${INI_WINDOW_LENGTH_4D:=12} EDACLASS=${EDACLASS:=od} EDAEXPVER=${EDAEXPVER:=0001} LEDA_ERRORS_IN=${LEDA_ERRORS_IN:=true} if [[ $LEDA_ERRORS_IN = true && $EDACLASS = od && $EDAEXPVER = 0001 && $BASETIME -ge $DATE_OPER_LWDA ]] ; then if [[ $LEVELS = 137 ]] ; then LJB_EDA=true fi LSES_EDA=true fi #======================================================================= # Setting for archiving via NPOSTS argument in NAMCT0, used by sekf_sm and ifstraj and ansfc #======================================================================= PPSTEP_INC=3 if [[ $PERIOD_AN -lt 3 ]] ; then PPSTEP_INC=$PERIOD_AN fi echo "PPSTEP_INC=$PPSTEP_INC" #end-of-include $EXPVER/include/cycle_times ($EXPVER/include/ifsvar) : #include $EXPVER/include/var_include ($EXPVER/include/ifsvar) #======================================================================= # # var_include # ----------- # # Purpose : Define variables to be used in various 4D-Var scripts # ------- # #======================================================================= NORDER_MODERR=${NORDER_MODERR:=0} LWEAK4DVAR=${LWEAK4DVAR:=false} LBGMODERR=${LBGMODERR:=true} LFSOBS=${LFSOBS:=false} LEMISKF=${LEMISKF:=false} ENDANENS=${ENDANENS:=0} LFCDEPAR=${LFCDEPAR:=false} INISTEP_FCDEPAR=${INISTEP_FCDEPAR:=0} INIEXPTYPE=${INIEXPTYPE:=an} NUPTRA_RANGE=${NUPTRA_RANGE:=0} LOBS_SCREEN=${LOBS_SCREEN:=false} #======================================================================= # Model Error #======================================================================= ggme="200133/200203/" # Try to guess what the family is (FSFAMILY does not work here...) family=$FAMILY [[ $ENDANENS -gt 0 ]] && family=$( dirname $FAMILY ) GUESS_FAMILY=$(echo $family | awk -F/ '{print $NF}') if [[ $LWEAK4DVAR = true ]] ; then if [[ $NTYPE_MODERR = @(2|3) ]] ; then NCOMP_MODERR=$(( 1 + 2 * NORDER_MODERR )) ggme="" else NCOMP_MODERR=1 fi NSTEP_MODERR=1 NDIM_MODERR=$(( NCOMP_MODERR * NSTEP_MODERR )) else NSTEP_MODERR=0 NCOMP_MODERR=0 NDIM_MODERR=0 fi #======================================================================= #end-of-include $EXPVER/include/var_include ($EXPVER/include/ifsvar) # LCOMPBGDEP=true for diagnostic background trajectory to # calculate o-b ECMA when first guess differs from background LCOMPBGDEP=${_LCOMPBGDEP_} USAGE="$0 -u uptraj -m mode -s sat_monitor -t fgdir" uptraj= mode= sat_monitor=false fgdir="none" errflg=0 while getopts u:m:s:t: option do case $option in u) uptraj=$OPTARG;; m) mode=$OPTARG;; s) sat_monitor=$OPTARG;; t) fgdir=$OPTARG;; \?) errflg=1;; esac done echo 'L_CALCULATE_JBW_STATS = ', $L_CALCULATE_JBW_STATS if [[ $L_CALCULATE_JBW_STATS = true ]] ; then eval resjob='$'RESOLJB_$uptraj JBWAV_DIR=$WDIR/vardir/T${resjob} if [[ ! -d $JBWAV_DIR ]] ; then mkdir $JBWAV_DIR fi cd $JBWAV_DIR fi #======================================================================= # Check parameters #======================================================================= if [[ $errflg -ne 0 ]] ; then echo $USAGE >&2 exit 1 fi if [[ "$uptraj" = "" ]] ; then echo $USAGE >&2 echo "-u uptraj, trajectory update number, must be supplied" exit 2 fi if [[ "$mode" != @(traj|min) ]] ; then echo $USAGE >&2 echo "Invalid mode = $mode" echo "Valid values are traj or min" exit 3 fi if [[ "$sat_monitor" != @(true|false) ]] ; then echo $USAGE >&2 echo "Invalid option for sat_monitor = $sat_monitor" echo "Valid values are true (yes) or false (no)" exit 4 fi if [[ "$fgdir" != "none" ]]; then if [[ "$fgdir" != @(monitor|sekf) ]] ; then echo $USAGE >&2 echo "Invalid option for fgdir = $fgdir" echo "Valid values are monitor or sekf" exit 5 fi fi lscreen_cont=$LCONTINUOUS_DA ## EH for creeening in all trajectories, also in ifstraj - move out as global variable [[ $STREAM = LWDA ]] && lscreen_cont=false # only do re-screening in Early Delivery linc_tovscv=.true. [[ $lscreen_cont = true ]] && linc_tovscv=.false. export linc_tovscv [[ ${LUSE_REDUCED_OBS:=false} = true ]] && lscreen_cont=false && linc_tovscv=.false. [[ $lscreen_cont = true ]] && rm -f $WDIR/mergeodb_done_ECMA [[ $uptraj -eq 0 ]] && [[ $mode = "traj" ]] && rm -f $WDIR/mergeodb_done_ECMA [[ $uptraj -eq 0 ]] && [[ $mode = "traj" ]] && rm -f $WDIR/mergeodb_done_CCMA [[ $uptraj -eq 0 ]] && [[ $mode = "traj" ]] && rm -rf $WDIR/ECMA [[ $uptraj -eq 0 ]] && [[ $mode = "traj" ]] && rm -rf $WDIR/CCMA* #======================================================================= # Need to do wave analysis in this trajectory? #======================================================================= #include $EXPVER/include/wave_assimtrajs ($EXPVER/include/ifsvar) echo "[include start] wave_assimtrajs" #OLD# If WAMASSIMTRAJS is not defined, set it to the final trajectory ID #OLD#WAMASSIMTRAJS=${WAMASSIMTRAJS:-$MXUP_TRAJ} #OLD#if [[ $LENKF = true ]] ; then #OLD# WAMASSIMTRAJS=1 #OLD#fi if [[ $LENKF = true && $MEMBER -gt 0 ]] ; then WAMASSIMTRAJS=1 else # If WAMASSIMTRAJS is not defined, set it to the ID of the trajectory just before the final (or 0 in case of one trajectory) if [[ $MXUP_TRAJ -ge 1 ]] ; then ## WAMASSIMTRAJS=${WAMASSIMTRAJS:-$(( MXUP_TRAJ-1 ))} ## does not work for OOPS ## next line works for *OOPS* but needs checking for IFS if [[ $LOOPS = true ]] ; then WAMASSIMTRAJS=${WAMASSIMTRAJS:-$(( MXUP_TRAJ ))} else WAMASSIMTRAJS=${WAMASSIMTRAJS:-$(( MXUP_TRAJ-1 ))} fi else WAMASSIMTRAJS=${WAMASSIMTRAJS:-0} fi fi # Lets find if wave data assimilation is needed at this trajectory export WAMASSI_IN_TRAJ=false if print ${WAMASSIMTRAJS} | grep ':' ; then sep=':' ; else sep='/' ; fi for wat in $(print ${WAMASSIMTRAJS} | tr $sep " ") ; do if [[ $wat -gt ${MXUP_TRAJ} && $uptraj -eq ${MXUP_TRAJ} ]] ; then echo "WAMWARNING: Incorrect trajectory number for wave data assimilation $wat ... Reset to final trjectory ${MXUP_TRAJ}" wat=${MXUP_TRAJ} fi if [[ $wat -eq $uptraj && $LENKF = false ]] ; then WAMASSI_IN_TRAJ=true break fi done [[ ${WAMASSI_IN_TRAJ} = true ]] && \ echo "Wave data assimialion is done in this trajectory" || \ echo "Wave data assimialion will not be done in this trajectory" # If WAM_AN_OUT is not defined, set it to the last/only trajectory number in WAMASSIMTRAJS WAM_AN_OUT=${WAM_AN_OUT:-${WAMASSIMTRAJS##*$sep}} if [[ $uptraj -eq $WAM_AN_OUT ]] ; then lwamanout=T echo "Wave analysis fields are written at this trajectory." else lwamanout=F echo "No wave analysis is written out at this trajectory." fi echo "[include end] wave_assimtrajs" #end-of-include $EXPVER/include/wave_assimtrajs ($EXPVER/include/ifsvar) #======================================================================= # Need to run odbprune ? #======================================================================= odbprune_db=none if [[ ${ODB_IO_BACKUP_ENABLE:=0} -eq 0 && $uptraj -ne 999 && $LENKF = false && $L_CALCULATE_JBW_STATS = false ]] ; then if [[ $LVERIFY_SCREEN = true ]] ; then fintraj=ECMA else fintraj=CCMA fi if [[ "$mode" = "traj" && ( $uptraj -eq $MXUP_TRAJ || $uptraj -eq 0 || $lscreen_cont = true ) ]] ; then odbprune_db=$fintraj elif [[ "$mode" = "min" && $uptraj -ge 0 ]] ; then odbprune_db=CCMA elif [[ "$mode" = "traj" && $uptraj -gt 0 && $lscreen_cont = false ]] ; then odbprune_db=CCMA fi fi #======================================================================= # No. of pools (and MPI-tasks after traj0) in CCMA #======================================================================= export NPES_AN=${_NPES_AN_} export NPES_CCMA=${_NPES_CCMA_} #======================================================================= # Switch off FDB signals. Clean FDB #======================================================================= export FDB_SIGNALS=no export SUBTRAJ=${_subtraj_} member=$MEMBER if [[ $ENDANENS -gt 0 ]] ; then fdbnumber="-N $member" else fdbnumber="" fi fdb_stream=$FDB_STREAM fdb_wstream=$FDB_WSTREAM if [[ $LFCDEPAR = true ]] ; then fdbnumber="-N $NUPTRA_RANGE" fdb_stream=elda fdb_wstream=ewla fi base_4v=$WINDOW_START if [[ $LOBS_SCREEN = true ]] ; then base_ef=$(newdate $base_4v -$WINDOW_LENGTH_4D) date_ef=$(substring $base_ef 1 8) hour_ef=$(substring $base_ef 9 10) base_4v=$(newdate $base_4v -72) fi if [[ $SUBTRAJ -gt 1 ]] ; then stepsub=$(( WINDOW_LENGTH_4D * (SUBTRAJ-1) )) base_4v=$( newdate $base_4v -$stepsub ) fi date_4v=$(substring $base_4v 1 8) hour_4v=$(substring $base_4v 9 10) # # FDB PRE-CLEANING # # FDB PRE_CLEANING step 1 # wave an fdb content is pre-cleaned at every trajectory, except at 999 # this may need revision if wave model writes out an fields not in the final traj because then potentially the next # traj deletes the wve analysis fileds..... # if [[ $LENKF = true && $LENKF_HYBRID = true && $uptraj -eq $MXUP_TRAJ ]] ; then final_enkfh=true else final_enkfh=false fi if [[ ${LSSA_ONLY:=false} = false ]] ; then # 20180311 ABO monitoring if [[ $WAVE = yes && $IFSMODE = 4d_* && $LFSOBS != true && $LFCDEPAR != true && $mode = traj && $uptraj -ne 999 && $final_enkfh = false && $WAMASSI_IN_TRAJ = true ]] ; then ancycle=$FIRST_AN while [[ $ancycle -le $LAST_AN ]] ; do if [[ $LOBS_SCREEN = true ]] ; then an_cycle=$(newdate $ancycle -$WINDOW_LENGTH_4D) else if [[ $SUBTRAJ -gt 1 ]] ; then back=$(( PERIOD_4D * (SUBTRAJ-1) )) an_cycle=$(newdate $ancycle -$back) else an_cycle=$ancycle fi fi an_date=$(substring $an_cycle 1 8) an_hour=$(substring $an_cycle 9 10) anoffset=$( datediff -h $WINDOW_END $an_cycle ) if [[ $fdb_wstream = @(lwwv|ewla) ]] ;then anoffsetstr="-w $anoffset" else anoffsetstr="" fi # rmfdb.sh -f 0 -c $CLASS -s $fdb_wstream -v $EXPVER \ # -D $an_date -T ${an_hour}00 $fdbnumber -t an $anoffsetstr if [[ $LENKF = true ]] ; then beg_date=$(substring $WINDOW_START 1 8) beg_hour=$(substring $WINDOW_START 9 10) anoffset=$( datediff -h $WINDOW_END $WINDOW_START ) if [[ $fdb_wstream = @(lwwv|ewla) ]] ;then anoffsetstr="-w $anoffset" else anoffsetstr="" fi # rmfdb.sh -f 0 -c $CLASS -s $fdb_wstream -v $EXPVER \ # -D $beg_date -T ${beg_hour}00 $fdbnumber -t an $anoffsetstr fi ancycle=$( newdate $ancycle $PERIOD_AN ) done fi # # FDB PRE_CLEANING step 2 # error fields are cleaned only in the beginning # if [[ $uptraj -eq 0 && $mode = traj && $LFSOBS != true && $sat_monitor != true && $fgdir != sekf ]] ; then if [[ $fdb_stream = @(lwwv|ewla|lwda|elda) ]] ;then anoffsetstr="-w $WINDOW_LENGTH_4D_TOT" else anoffsetstr="" fi # if [[ $SUBTRAJ -le 1 ]] ; then # rmfdb.sh -f 0 -c $CLASS -s $fdb_stream -v $EXPVER \ # -D $date_4v -T ${hour_4v}00 $fdbnumber -t ea $anoffsetstr # # if [[ $LOBS_SCREEN = true ]] ; then # rmfdb.sh -f 0 -c $CLASS -s $fdb_stream -v $EXPVER \ # -D $date_ef -T ${hour_ef}00 $fdbnumber -t ef $anoffsetstr # else # rmfdb.sh -f 0 -c $CLASS -s $fdb_stream -v $EXPVER \ # -D $date_4v -T ${hour_4v}00 $fdbnumber -t ef $anoffsetstr # fi # fi fi if [[ $fdb_wstream = @(lwwv|ewla) ]] ;then anoffsetstr="-w $WINDOW_LENGTH_4D_TOT" else anoffsetstr="" fi # # FDB PRE_CLEANING step 3 # 4v fields are pre-cleaned both for model and wave stream at every traj except for 999 # # if [[ $LENKF = false ]] ; then # if [[ $WAVE = yes && $IFSMODE = 4d_* && $mode = traj && $sat_monitor != true && $uptraj -ne 999 && $WAMASSI_IN_TRAJ = true ]] ; then # rmfdb.sh -f 0 -c $CLASS -s $fdb_wstream -v $EXPVER \ # -D $date_4v -T ${hour_4v}00 $fdbnumber -t 4v $anoffsetstr # fi # if [[ $IFSMODE = 4d_* && $mode = traj && $sat_monitor != true && $uptraj -ne 999 && $fgdir != sekf ]] ; then # rmfdb.sh -f 0 -c $CLASS -s $fdb_stream -v $EXPVER \ # -D $date_4v -T ${hour_4v}00 $fdbnumber -t 4v $anoffsetstr # fi # fi fi #======================================================================= # Enable/Disable heap allocation profiling #======================================================================= export EC_PROFILE_HEAP=1 # Enabled #export EC_PROFILE_HEAP=0 # Disabled #======================================================================= # Link constant files #======================================================================= if [[ $LENKF = true && $member -ne 0 && $uptraj -eq 1 ]] ; then varconsts -m $mode -u 0 fi varconsts -m $mode -u $uptraj #======================================================================= # Calculate NPROCA and NPROCB from NPROC #======================================================================= export NPROC=$NPES kproc=$NPROC . kproctoab export NPROCA=$ka export NPROCB=$kb export USE_SMT=true #======================================================================= export ODB_IO_LOCK=1 # ODB's I/O-locking turned *ON* for r/w #-- a bit more debugging from ODB's getdb/putdb ... # the value if > 0 indicates proc id [1..$NPES] # if == -1, then all procs output! #export ODB_CTX_DEBUG=1 #======================================================================= # In case of $ODB_IO_METHOD=4, consider only non-BUFR related tables #======================================================================= tables="* except /bufr/" export ODB_CONSIDER_TABLES="$tables" #======================================================================= # Turn off poolmask table in ODB #======================================================================= export ODB_ECMA_CREATE_POOLMASK=0 export ODB_CCMA_CREATE_POOLMASK=0 #======================================================================= # Silence Dr.Hook (verbose on MYPROC=1) #======================================================================= #export DR_HOOK_SHOW_PROCESS_OPTIONS=${DR_HOOK_SHOW_PROCESS_OPTIONS:=0} #export DR_HOOK_SILENT=${DR_HOOK_SILENT:=1} #======================================================================= # Remove mpi_profiles #======================================================================= echo "Remove mpi_profiles from $PWD" set +x rm -f mpi_profile.* set -x #======================================================================= # Trajectory (but not final trajectory) #======================================================================= #Anne GRIB code to use in ODB instead of string # will be later done via ODB-2 interface if [[ $STREAM = LWDA ]] ; then export STREAMID=1247 elif [[ $STREAM = OPER ]] ; then export STREAMID=1025 elif [[ $STREAM = DA ]] ; then export STREAMID=1025 elif [[ $STREAM = SCDA ]] ; then export STREAMID=1026 elif [[ $STREAM = ELDA ]] ; then export STREAMID=1249 fi if [[ $CLASS = od ]] ; then export CLASSID=1 elif [[ $CLASS = rd ]] ; then export CLASSID=2 elif [[ $CLASS = ei ]] ; then export CLASSID=14 elif [[ $CLASS = mc ]] ; then export CLASSID=19 fi if [[ $uptraj -ne 0 ]] ; then # To archive ODBs in MARS export TYPE='MFB' export TYPEID=262 fi if [[ $uptraj -eq 0 ]] ; then # To archive ODBs in MARS export TYPE='OFB' export TYPEID=263 fi if [[ $mode = traj && $uptraj -lt $MXUP_TRAJ ]] ; then export ODB_MERGEODB_DIRECT=${ODB_MERGEODB_DIRECT:=1} if [[ $uptraj -eq 0 && $ODB_MERGEODB_DIRECT -eq 1 ]] ; then export ODB_ECMA_CREATE_POOLMASK=0 export ODB_ECMA_POOLMASK_FILE=$WDIR/poolmask.ECMA # Note: The following fails on Cray XT4 (but the double-negation works) # [[ -f $ODB_ECMA_POOLMASK_FILE ]] && rm -f $ODB_ECMA_POOLMASK_FILE [[ ! -f $ODB_ECMA_POOLMASK_FILE ]] || rm -f $ODB_ECMA_POOLMASK_FILE if [[ -f $WDIR/ECMA.simulobs/ECMA.dd ]] ; then export SIMULOBS=1 else export SIMULOBS=0 fi fi if [[ $uptraj -eq 0 ]] ; then rm -f $WDIR/create_ccma_done fi if [[ $uptraj -eq 0 || $lscreen_cont = true ]] ; then # Convert OBS_MONITORING into list we can loop over list_monitoring=$(echo $OBS_MONITORING | awk '{print tolower($0)}' | sed -e "s/\// /") if [[ $LUSE_SMOS_TB ]] ; then list_presekf="smos" if [[ -f $WDIR/ECMA.${list_presekf}.tar.do_not_use.just_for_restart ]] ; then export OBS_SURF_ANAL=$list_presekf else echo "No surface data found to exclude from mergeodb" export OBS_SURF_ANAL="" fi fi export uptraj if [[ $sat_monitor = true && $fgdir = monitor ]] ; then for obsgroup in $list_monitoring; do tarfile=ECMA.${obsgroup}.tar.do_not_use.just_for_restart if [[ -f $WDIR/$tarfile ]] ; then thisdir_monitor=$(pwd) echo "Processing monitoring tarfile $tarfile" cd $WDIR tar xf $tarfile cd $thisdir_monitor fi done include_args="" for obsgroup in $list_monitoring; do include_args="${include_args} -t $WDIR/uptraj_${uptraj}/ECMA.$obsgroup" done mergeodb.x -n ECMA $include_args -o $WDIR/monitor/ECMA elif [[ $LFCDEPAR = true && $LTWINEXP = false ]] ; then mergeodb -d elif [[ $LTWINEXP = false && $TASK != Aeolus_AMD_ifstraj && $fgdir != sekf ]] ; then exclude_args="" for obsgroup in $list_monitoring; do exclude_args="${exclude_args} -x ECMA.$obsgroup" done if [[ $LCOMPBGDEP = true ]] ; then mergeodb.x -n ECMA -i $WDIR/uptraj_bg -o $WDIR/ECMA $exclude_args else # Check if restartodb needs to be run if [[ -f $WDIR/uptraj_$uptraj/ECMA.conv/1/desc ]]; then echo "ERROR: 4D-Var restart detected." echo " Please run restartodb task before rerunning ifstraj." exit 1 fi mergeodb.x -n ECMA -i $WDIR/uptraj_${uptraj} -o $WDIR/ECMA $exclude_args fi fi if [[ $sat_monitor = true || $fgdir = sekf ]] ; then if [[ -f $WDIR/$fgdir/mergeodb_done_ECMA ]] ; then ODB_MERGEODB_DIRECT=0 fi export ODB_CCMA_CREATE_DIRECT=0 else if [[ -f $WDIR/mergeodb_done_ECMA ]] ; then ODB_MERGEODB_DIRECT=0 fi fi fi if [[ $uptraj -eq 0 && $ODB_CCMA_CREATE_DIRECT -eq 1 ]] ; then export ODB_CCMA_CREATE_POOLMASK=0 export ODB_CCMA_POOLMASK_FILE=$WDIR/poolmask.CCMA [[ ! -f $ODB_CCMA_POOLMASK_FILE ]] || rm -f $ODB_CCMA_POOLMASK_FILE fi ifstraj -u $uptraj -m $sat_monitor -t $fgdir ### Second screening for VarBC coldstart ### if [[ $LVARBC = true && $VARBC_PATH = coldstart && $uptraj -eq 0 && $BASETIME -eq $INITIME ]] ; then if [[ $member -gt 0 ]] ; then copyodb else restartodb fi ifstraj -u $uptraj -r true fi if [[ $PROFILE -gt 0 ]] ; then ifsgmon traj.$uptraj fi if [[ $uptraj -eq 0 ]] ; then if [[ $ODB_MERGEODB_DIRECT -eq 1 ]] ; then echo "MERGEODB via IFSTRAJ_0 finished at $(date)" > $WDIR/mergeodb_done_ECMA fi if [[ $ODB_CCMA_CREATE_DIRECT -eq 1 ]] ; then echo "CREATE/CCMA via IFSTRAJ_0 finished at $(date)" > $WDIR/create_ccma_done fi fi #======================================================================= # Save "truth" for twin experiment #======================================================================= if [[ $LTWINTRUTH = true && $uptraj -eq 0 ]] ; then thisdir=$(pwd) cd $WDIR ecmadirs="" for ecmadir in ECMA* do [[ ! -d $ecmadir ]] || ecmadirs="$ecmadirs $ecmadir" done tar cvf ECMA.truth.tar $ecmadirs mergeodb_done_ECMA cd $thisdir fi #======================================================================= # Create CCMA-database from ECMA-database #======================================================================= if [[ $uptraj -eq 0 && $sat_monitor != true && $fgdir != sekf ]] ; then create_ccma $NPES_CCMA #-- Get latest Blacklist-file into CCMA-dir if [[ -f $WDIR/Blacklist ]] ; then rm -f $WDIR/CCMA/CCMA.blacklist cp $WDIR/Blacklist $WDIR/CCMA/CCMA.blacklist fi #-- Get poolmask-file (text-file) into CCMA-dir if [[ -f $WDIR/poolmask.CCMA ]] ; then rm -f $WDIR/CCMA/CCMA.poolmask cp $WDIR/poolmask.CCMA $WDIR/CCMA/CCMA.poolmask fi fi #======================================================================= # Update observational audit information for ECMA & CCMA from poolmask #======================================================================= if [[ $uptraj -eq 0 && $sat_monitor != true && $fgdir != sekf ]] ; then perlfile=perlaudit.$$ cat > $perlfile <<'EOF' BEGIN { print "bufrtype:subtype:wmo_satinst:obstype:codetype:sensor:statid:hdr_count:body_count:max_bodies:timeslot:poolno\n"; } for (<>) { if (m/^\s+\d+\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+\d+\s+(\d+)\s+(\d+)\s+(\d+)\s*/) { $key = "$4:$5:$6:$1:$2:$3"; # bufrtype:subtype:wmo_satinst:obstype:codetype:sensor $h{"$key"} += $7; # hdr_count $b{"$key"} += $8; # body_count if ($9 > $mx{"$key"}) { $mx{"$key"} = $9; } # max_bodies (per hdr-entry) } } END { foreach(sort keys %h) { print "$_:-1:$h{$_}:$b{$_}:$mx{$_}:-1:-1\n"; } } EOF for dbname in ECMA CCMA do if [[ -f $WDIR/poolmask.$dbname ]] ; then create_audit -f $WDIR/$dbname/$dbname.audit \ -n "$dbname:${IFSMODE}:${mode}:${uptraj}" \ -t OBSCOUNTS \ -c "perl $perlfile < $WDIR/poolmask.$dbname" fi done rm -f $perlfile || : fi fi #======================================================================= # Minimization #======================================================================= if [[ $mode = min ]] ; then # To archive ODBs in MARS export TYPE='MFB' export TYPEID=262 export ODB_IO_LOCK=0 # ODB's I/O-locking turned *OFF* for r/w if [[ $uptraj -eq $UPTRAJ_FCE && $LFSOBS = false ]] ; then mode="fce" fi if [[ $IFSMODE = 3d_fgat ]] ; then rm -f ME${EXPVER}???$uptraj else rm -f ME${EXPVER}???$((uptraj+1)) fi if [[ $OOPSRUN = true ]] ; then ifsmin -u $uptraj else ifsmin -m $mode -u $uptraj if [[ $PROFILE -gt 0 ]] ; then ifsgmon min.$uptraj fi if [[ $uptraj -eq 0 && $IFSMODE = 3d_fgat ]] ; then ifsmin -m min -u $uptraj fi fi fi #======================================================================= # Late trajectory restart runs #======================================================================= if [[ $mode = traj && $uptraj -eq 999 ]] ; then if [[ $IFSMODE = 4d_* && $SUBTRAJ -le 1 ]] ; then antime=$FIRST_AN while [[ $antime -le $LAST_AN ]] ; do hh=$( datediff -h $antime $WINDOW_START ) ifstraj -u 999 -s $hh antime=$( newdate $antime $PERIOD_AN ) done fi fi #======================================================================= # Final trajectory #======================================================================= if [[ $mode = traj && $uptraj -eq $MXUP_TRAJ ]] ; then # To archive ODBs in MARS export TYPE='OFB' ifstraj -u ${MXUP_TRAJ} [[ $SUBTRAJ -le 1 ]] && xevent ifsdone if [[ $PROFILE -gt 0 ]] ; then ifsgmon traj.$uptraj fi fi #======================================================================= # Save mpi_profiless #======================================================================= if [ -f mpi_profile.0 ]; then mkdir -p $WDIR/MPIPROF_${mode}_${uptraj} echo "Save mpi_profiles in $WDIR/MPIPROF_${mode}_${uptraj}" set +x rm -f $WDIR/MPIPROF_${mode}_${uptraj}/mpi_profile.* mv mpi_profile.* $WDIR/MPIPROF_${mode}_${uptraj}/. set -x fi #======================================================================= # Run odbprune (run-time should be neglible) #======================================================================= if [[ "$odbprune_db" = "CCMA" ]] ; then thisdir=$(pwd) cd $WDIR errfile=errfile.$$ \rm -f $errfile for d in CCMA.* do if [[ -d $d && -f $d/CCMA.dd ]] ; then odbprune -i $d || touch $errfile & fi done wait if [[ -f $errfile ]] ; then echo "***Error: odbprune failed for one or more CCMA-database under $WDIR" fi cd $thisdir elif [[ "$odbprune_db" = "ECMA" ]] ; then thisdir=$(pwd) if [[ lscreen_cont = true ]] ; then cd $WDIR/uptraj_$uptraj else cd $WDIR fi errfile=errfile.$$ \rm -f $errfile for d in ECMA.* do if [[ -d $d && -f $d/ECMA.dd ]] ; then odbprune -i $d || touch $errfile & fi done wait if [[ -f $errfile ]] ; then echo "***Error: odbprune failed for one or more ECMA-database under $WDIR" fi cd $thisdir fi echo $? if [[ $LENKF = true && $uptraj -eq 0 && $L_CALCULATE_JBW_STATS = false ]] ; then create_enkf -n $ENDANENS -d CCMA create_enkf -n $ENDANENS -d ECMA fi echo $? exit _eof_ifsvar cat >$TMPDIR/prep_nemoIFS <<\_eof_prep : #include $EXPVER/include/prep_nemoIFS ($EXPVER/ifstraj_999.ecf) #prep_nemoIFS version: 20080820. MAB set -euxv #======================================================================= # # Script prep_nemoIFS # -------------------- # # Purpose : prepares nemo files/namelist for coupled nemo/IFS # ------- # # Usage : prep_nemoIFS # ----- # # Parameters : none # ---------- # # Externals : none # --------- # # Modifications: C. Roberts - Refactored linking to NEMO/LIM restart files # ------------- # #======================================================================= # Single executable coupling only. # Overrule NEMO_NPROC since this is not relevant for sglexe coupling # and compute NEMO_NPROCX, NEMO_NPROCY within the NEMO code. NEMO_NPROC=$((${_NPES_} - ${_NPES_IOSERVER_} - ${_XIOS_NPROC_})) NEMO_NPROCX=0 NEMO_NPROCY=0 nemogrid=${_NEMOCONFIG_} ifsgrid=${RESOL}${GTYPE} if [[ ${SAVECOUPINFO:-yes} = yes ]]; then # The variable make the directory unique against ENS number # fcdateX etc. cdpathdist=$DATA/remap_mpp/${_FAMILY_} CHECK_DIR $cdpathdist lreaddist=.true. lwritedist=.true. else cdpathdist='./' lreaddist=.false. lwritedist=.false. fi cat >namnemocoup.in<namnemowamcoup.in<0)); then if [[ $leg -gt 0 && ${_RCHUNK_NR_} = 0 ]]; then rstdate=$WINSTART rsttime="000000" nemorst="${rstdate}_${rsttime}" rm -f $WDIR/${EXPVER}_${nemorst}_restart.nc ln -sf $WDIR/${EXPVER}_${nemorst}_restart.$leg.nc $WDIR/${EXPVER}_${nemorst}_restart.nc if [[ ${ICEMOD:=0} != 0 ]]; then rm -f $WDIR/${EXPVER}_${nemorst}_restart_ice.nc ln -sf $WDIR/${EXPVER}_${nemorst}_restart_ice.$leg.nc $WDIR/${EXPVER}_${nemorst}_restart_ice.nc fi fi fi if [[ ${TOTCHUNKS:-0} > 1 ]]; then echo TOTCHUNKS is $TOTCHUNKS if (( FCCHUNKSUB > 1 )) || (( FCCHUNK > 1 )) || (( ${FCLENGTH_PREV:-0} > 0 )); then echo case 1 # All restart are domain decomposed, so for NAM_LN_SGLREAD to false. export NAM_LN_SGLREAD=.false. rstdate=$WINSTART rsttime="000000" nemorst="${rstdate}_${rsttime}" # Ocean restarts file=$WDIR/${EXPVER}_${nemorst}_restart.nc if [[ -s $file ]] ; then echo "Linking to rebuilt NEMO restarts" ln -s $file restart.nc else echo "Rebuilt NEMO restarts not found. Linking to decomposed files" inemo=0 typeset -Z4 inemo nrestnemo=$NEMO_NPROC while((inemo 0 ]]; then echo "restarting NEMO! Link restart files" export NAM_LN_SGLREAD=.false. for thefile in $WDIR/${EXPVER}_${OCCURDAT}_??????_restart_????.nc; do ln -sf $thefile restart_${thefile##*_} done if [[ ${ICEMOD:=0} != 0 ]]; then for thefile in $WDIR/${EXPVER}_${OCCURDAT}_??????_restart_ice_????.nc; do ln -sf $thefile restart_ice_in_${thefile##*_} done fi else (( EPSLEGM1=EPSLEG-1 )) STEP_OLD=${_EPSINISTEP_PREVIOUS_} RESTDATE=$(newdate $BASETIME $STEP_OLD) RESTDATE=$(substring $RESTDATE 1 8) nstepold="${RESTDATE}_000000" ln -sf $WDIR/${EXPVER}_${nstepold}_restart.nc restart.nc [[ $EPSLEG = 1 ]] && export NSLIMRSTIN=1 if [[ ${ICEMOD:=0} != 0 ]]; then ln -sf $WDIR/${EXPVER}_${nstepold}_restart_ice.nc restart_ice_in.nc fi fi else if (( ${FCCHUNKSUB:-1} == 1 )) && (( ${FCCHUNK:-1} == 1 )) ; then if [[ ${_RESTARTCHUNKING_} = 1 && ${_RCHUNK_NR_} = 0 && ${_RESTART_} = false ]]; then rm -f $WDIR/${EXPVER}_????????_??????_restart_????.nc rm -f $WDIR/${EXPVER}_????????_??????_restart_ice_????.nc fi if [[ ${_RESTARTCHUNKING_} = 1 && ${_RCHUNK_NR_} > 0 || ${FCLENGTH_PREV:-0} > 0 ]]; then echo "restarting NEMO! Link restart files" export NAM_LN_SGLREAD=.false. for thefile in $WDIR/${EXPVER}_${OCCURDAT}_??????_restart_????.nc; do ln -sf $thefile restart_${thefile##*_} done if [[ ${ICEMOD:=0} != 0 ]]; then for thefile in $WDIR/${EXPVER}_${OCCURDAT}_??????_restart_ice_????.nc; do ln -sf $thefile restart_ice_in_${thefile##*_} done fi else ln -sf $WDIR/INITIALrestart.nc restart.nc if [[ ${ICEMOD:=0} != 0 ]]; then ln -sf $WDIR/INITIALrestartICE.nc restart_ice_in.nc fi export NSLIMRSTIN=1 fi if [[ $NN_FWB = 1 ]] ; then file=$WDIR/INITIALEMPave.dat if [[ -s $file ]] ; then ln -sf $file EMPave_old.dat else echo $file does not exist ls -l $WDIR/ exit 1 fi fi fi fi # # Sea ice # if [[ ${ICEMOD:=0} = 0 ]]; then NAM_NN_ICE=1 else NAM_NN_ICE=${ICEMOD:=0} fi # # Damping # export DQDT0=${DQDT0:=0} export DQDT1=${DQDT1:=0} export DQDT2=${DQDT2:=0} export DQDT3=${DQDT3:=0} export DEDS0=${DEDS0:=0} export NAM_HDMP=91 # switch off damping to Levitus export NAM_ZDMP=0 export NN_FWB=${NN_FWB:=0} if [[ ${RELAXSST:=0} -ge 1 ]]; then #export DQDT0=-40. export LN_SSR_ON=${LN_SSR_ON:=.true.} else export LN_SSR_ON=${LN_SSR_ON:=.false.} fi NMSH=0 if [[ $TASK = ifsmin || $TASK = ifstraj ]] ; then echo $NR_SSH else NR_SSH=0 fi # # Forcings # # Coupled NAM_NN_SSTR=$RELAXSST NAM_LN_FLX=.false. NAM_LN_BLK=.false. NAM_LN_BLK_ALGO=.false. NAM_LN_CDEC=.false. NAM_NN_ICE_REL=0 # #PL Common variables # LSST=.false. NSLAFILES="''" NPROFFILES="''" LCUR=.false CURFBDATA="''" CURFBAVG=.false. NITIAUFIN=${NITIAUFIN:=$((NITEND-NIT000+1))} # # Assimilation is off # SSHFILE="'ssh', -1,'ssh',.true.,.true.,'yearly','',''" if [[ ${LOUTLOOP:-false} = false || ${_TASK_} = @(model) ]] ; then LBKGWRI=.FALSE. LASMDIN=.FALSE. LASMIAU=.FALSE. LTRAINC=.FALSE. LDYNINC=.FALSE. LSSHINC=.FALSE. NITIAUFIN=0 LPRO=.false. NPROFFILES="''" PROFBENA=.false. LNPROFBENA=.false. LNPROFBENATIM=.false. LSLA=.false. NSLAFILES="''" LCUR=.false. CURFBDATA="''" CURFBAVG=.false. LSST=.false. LNSEAICE=.false. LSEAICEINC=.false. LN_BIAS=.false.. BIAS_ASM=.false. LN_BIAS_OFL=.false. NN_INITIAL=0 LRST_BIASR=.false. GRIDLOOKUP=.false. # #PL Assimilation is on # elif [[ ${LOUTLOOP:-false} = true && ${_TASK_} = @(ifstraj|ifsmin) ]] ; then echo "PL: ifstraj task : ocean assimilation is on" if [[ ${_ASSIMMODE_} = bkg ]] ; then LBKGWRI=.true. LASMDIN=.false. LASMIAU=.false. LTRAINC=.false. LDYNINC=.false. LSSHINC=.false. LSEAICEINC=.false. elif [[ ${_ASSIMMODE_} = IAU ]] ; then LBKGWRI=.false. LASMDIN=.false. LASMIAU=.true. LTRAINC=.true. LDYNINC=.true. LSSHINC=.true. LSEAICEINC=.true. elif [[ ${_ASSIMMODE_} = DI ]] ; then LBKGWRI=.false. LASMDIN=.true. LASMIAU=.false. LTRAINC=.true. LDYNINC=.true. LSSHINC=.true. LSEAICEINC=.true. else echo "PL: wrong value for SMS variable ASSIMMODE" exit 1 fi #PL Add some variables noutit=${_NOUTIT_} GRIDLOOKUP=.true. #PL Link ocean increment and background for the second outer iteration ln -sf $WDIROUTER/assim_background_increments.nc . ln -sf $WDIROUTER/assim_background_state_DI_00.nc assim_background_state_DI.nc #PL Observation profiles NPROFFILES="''" LNPROFBENA=".false." LNPROFBENATIM=".false." LPRO=.false. if [[ $LNINSITU = yes ]]; then LPRO=.true. typeset -Z2 iset isetqc iset=1 while((iset<=NOINSITU)) do ln -fs $WDIROUTER/profiles_${iset}.nc . if ((iset==1)); then NPROFFILES="'profiles_${iset}.nc'" if [[ ${INSITUTYP[$iset]} = 'EN' ]]; then LNPROFBENA=".true." LNPROFBENATIM=".true." else LNPROFBENA=".false." LNPROFBENATIM=".false." fi else NPROFFILES="$NPROFFILES,'profiles_${iset}.nc'" if [[ ${INSITUTYP[$iset]} = 'EN' ]]; then LNPROFBENA="$LNPROFBENA,.true." LNPROFBENATIM="$LNPROFBENATIM,.true." else LNPROFBENA="$LNPROFBENA,.false." LNPROFBENATIM="$LNPROFBENATIM,.false." fi fi ((iset=iset+1)) done if [[ $noutit -gt 0 ]]; then isetqc=$NOINSITU iset=1 while((iset<=NOINSITU)) do if [[ ${INSITUQC[$iset]} = yes && $noutit -gt 0 ]]; then ((isetqc=isetqc+1)) if [[ ! -f $WDIROUTER/profbqc_${iset}_fdbk_00.nc ]]; then print "QC profile input data missing" exit 1 else ln -fs $WDIROUTER/profbqc_${iset}_fdbk_00.nc profiles_${isetqc}.nc NPROFFILES="$NPROFFILES,'profiles_${isetqc}.nc'" fi LNPROFBENA="$LNPROFBENA,.true." if [[ ${INSITUTYP[$iset]} = EN ]]; then LNPROFBENATIM="$LNPROFBENATIM,.false." else LNPROFBENATIM="$LNPROFBENATIM,.true." fi fi ((iset=iset+1)) done fi fi print "SLA data setup" LSLA=.false. NSLAFILES="" if [[ $LNSLA = yes ]]; then LSLA=.true. typeset -Z2 iset isetqc iset=1 while((iset<=NOSLA)) do if [[ ! -f $WDIROUTER/sla_${iset}.nc ]]; then print "SLA input data missing" exit 1 fi ln -sf $WDIROUTER/sla_${iset}.nc . if ((iset==1)); then NSLAFILES="'sla_${iset}.nc'" else NSLAFILES="$NSLAFILES,'sla_${iset}.nc'" fi ((iset=iset+1)) done if [[ $noutit -gt 0 ]]; then isetqc=$NOSLA iset=1 if [[ ${SLAQCACT} = yes ]]; then ((isetqc=isetqc+1)) if [[ ! -f $WDIROUTER/slafbqc_${iset}_fdbk_00.nc ]]; then print "QC profile input data missing" exit 1 else ln -sf $WDIROUTER/slafbqc_${iset}_fdbk_00.nc sla_${isetqc}.nc NSLAFILES="$NSLAFILES,'sla_${isetqc}.nc'" fi fi iset=2 if [[ ${SLAQCPAS} = yes ]]; then while((iset<=$NOSLA)) do ((isetqc=isetqc+1)) if [[ ! -f $WDIROUTER/slafbqc_${iset}_fdbk_00.nc ]]; then print "QC SLA input data missing" exit 1 else ln -sf $WDIROUTER/slafbqc_${iset}_fdbk_00.nc sla_${isetqc}.nc NSLAFILES="$NSLAFILES,'sla_${isetqc}.nc'" fi ((iset=iset+1)) done fi if [[ ${SLASUPEROB} = yes ]]; then iset=1 while((iset<=$NOSLA)) do ((isetqc=isetqc+1)) if [[ ! -f $WDIROUTER/slafbsuper_${iset}_fdbk_00.nc ]]; then print "Superob SLA input data missing" exit 1 else ln -sf $WDIROUTER/slafbsuper_${iset}_fdbk_00.nc sla_${isetqc}.nc NSLAFILES="$NSLAFILES,'sla_${isetqc}.nc'" fi ((iset=iset+1)) done fi fi # ln -s $OCNDATA/slaReferenceLevel.nc . else NSLAFILES="''" fi # # SIC fb data. # if [[ $LNSEAICE = @(yes|true) && $SEAICEDAT = 'OSISAF' ]]; then typeset -Z2 iset iset=1 datini=$WINSTART datend=$(dateincr $WINEND 1) rm -f ice_conc_${iset}.nc if [[ $SICSUPEROB = yes ]]; then ln -s $WDIROUTER/ice_super_${datini}_${datend}.nc ice_conc_${iset}.nc else ln -s $WDIROUTER/ice_conc_${datini}_${datend}.nc ice_conc_${iset}.nc fi NAM_SEAICEFILES="'ice_conc_${iset}.nc'" fi # # Global fresh water budget # if [[ ${NSSHGLOBAL:=clim} = clim ]] ;then SSHFILE="'ssh', -1,'ssh',.true.,.true.,'yearly','',''" if (( $NR_SSH == 2 )) ;then SSHFILE="'grace_bp', -1,'sobp',.true.,.true.,'yearly','',''" fi elif [[ ${NSSHGLOBAL} = yearly ]]; then fileb=aviso_ssh var=ssh if (( $NR_SSH == 2 )) ;then fileb=grace_bp var=sobp fi SSHFILE="'$fileb', -1,'$var',.true.,.false.,'yearly','',''" elif [[ $NSSHGLOBAL = monthly ]] ;then SSHFILE="'aviso_ssh',24,'ssh',.false.,.false.,'monthly','',''" i=0 idat=$(substring $WINSTART 1 6) iend=$(substring $WINEND 1 6) while ((idat<=$iend)) do iyr=$(substring $idat 1 4) imo=$(substring $idat 5 6) file=aviso_ssh_y${iyr}m${imo}.nc daten=$(dateincr $WINEND 1) #daten=$(dateincr $WINEND 9) file1=aviso_ssh_y${iyr}m${imo}_until_$daten.nc if [[ -f $OCNDATAOBS/$file ]] ;then ln -sf $OCNDATAOBS/$file ./$file elif [[ -f $OCNDATAOBS/$file1 ]] ;then ln -sf $OCNDATAOBS/$file1 ./$file else echo Warning: aviso files not found!!! #exit 1 fi idat=$(dateincr ${idat}01 31) idat=$(substring $idat 1 6) done fi fi #PL end of assimilation # # Observation for diagnostics (experimental). # if [[ ${_LNOCEANOBS_} = 1 ]]; then obsend=$(dateincr $WINEND 1) if [[ $LNINSITU = yes ]]; then LPRO=.true. typeset -Z2 iset iset=1 while((iset<=NOINSITU)) do ln -sf $WDIR/profiles_${WINSTART}_${obsend}_${iset}.nc profiles_${iset}.nc if ((iset==1)); then NPROFFILES="'profiles_${iset}.nc'" if [[ ${INSITUTYP[$iset]} = 'EN' ]]; then LNPROFBENA=".true." LNPROFBENATIM=".true." else LNPROFBENA=".false." LNPROFBENATIM=".false." fi else NPROFFILES="$NPROFFILES,'profiles_${iset}.nc'" if [[ ${INSITUTYP[$iset]} = 'EN' ]]; then LNPROFBENA="$LNPROFBENA,.true." LNPROFBENATIM="$LNPROFBENATIM,.true." else LNPROFBENA="$LNPROFBENA,.false." LNPROFBENATIM="$LNPROFBENATIM,.false." fi fi ((iset=iset+1)) done fi if [[ ${LNSSTBUFR:-no} = yes ]]; then NAM_LN_SSTFB=.true. NAM_LN_GRDSST=.false. LSST=.true. typeset -Z2 iset iset=1 ln -sf $WDIR/sst_${WINSTART}_${obsend}_${iset}.nc sst_${iset}.nc NAM_SSTFBFILES="'sst_${iset}.nc'" fi if [[ ${LITOPOBS:-no} = yes ]]; then LCUR=.true. LCURW=.true. typeset -Z2 iset iset=1 CURFBDATA="'velocities_01.nc'" ln -sf $WDIR/velocities_${WINSTART}_${obsend}_${iset}.nc velocities_${iset}.nc fi if [[ ${LDRIFTCUROBS:-no} = yes ]]; then LCURSURF=.true. CURSURFFBDATA="'surfvel_01.nc','surfvel_02.nc'" ln -sf $WDIR/surfvel_${WINSTART}_${obsend}_01.nc surfvel_01.nc ln -sf $WDIR/surfvel_${WINSTART}_${obsend}_02.nc surfvel_02.nc fi fi # # LIM nudgeing # NN_FRLDR_LIM="0" NN_HICIFR_LIM="0" RN_DFLDT_LIM=10.0 RN_DHIDT_LIM=10.0 HIMIN_LIM=0.2 FRIMIN_LIM=0.05 ALPHA_LIMDMP=6.0 ROBS_LIMDMP=0.01 # # Run control # NCYC=0 LN_RESTART=.true. # Setup namelist if [[ $OCNVER = V36 ]]; then #include $EXPVER/include/nemo_namelist_v36.h ($EXPVER/include/prep_nemoIFS) NTIME0=${NTIME0:-0} LNUSETIME=${LNUSETIME:-false} # Reference namelists cat >namelist_ref<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !! NEMO/OPA : 1 - run manager (namrun) !! namelists 2 - Domain (namcfg, namzgr, namzgr_sco, namdom, namtsd) !! 3 - Surface boundary (namsbc, namsbc_ana, namsbc_flx, namsbc_clio, namsbc_core, namsbc_sas !! namsbc_cpl, namtra_qsr, namsbc_rnf, !! namsbc_apr, namsbc_ssr, namsbc_alb) !! 4 - lateral boundary (namlbc, namcla, namagrif, nambdy, nambdy_tide) !! 5 - bottom boundary (nambfr, nambbc, nambbl) !! 6 - Tracer (nameos, namtra_adv, namtra_ldf, namtra_dmp) !! 7 - dynamics (namdyn_adv, namdyn_vor, namdyn_hpg, namdyn_spg, namdyn_ldf) !! 8 - Verical physics (namzdf, namzdf_ric, namzdf_tke, namzdf_kpp, namzdf_ddm, namzdf_tmx, namzdf_tmx_new) !! 9 - diagnostics (namnc4, namtrd, namspr, namflo, namhsb, namsto) !! 10 - miscellaneous (namsol, nammpp, namctl) !! 11 - Obs & Assim (namobs, nam_asminc) !!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !!====================================================================== !! *** Run management namelists *** !!====================================================================== !! namrun parameters of the run !!====================================================================== ! !----------------------------------------------------------------------- &namrun ! parameters of the run !----------------------------------------------------------------------- nn_no = 0 ! job number (no more used...) cn_exp = "ORCA2" ! experience name nn_it000 = 1 ! first time step nn_itend = 5475 ! last time step (std 5475) nn_date0 = 010101 ! date at nit_0000 (format yyyymmdd) used if ln_rstart=F or (ln_rstart=T and nn_rstctl=0 or 1) nn_time0 = 0 ! initial calendar time in hours ln_usetime = .false. nn_leapy = 0 ! Leap year calendar (1) or not (0) ln_rstart = .false. ! start from rest (F) or from a restart file (T) nn_euler = 1 ! = 0 : start with forward time step if ln_rstart=T nn_rstctl = 0 ! restart control ==> activated only if ln_rstart=T ! = 0 nn_date0 read in namelist ; nn_it000 : read in namelist ! = 1 nn_date0 read in namelist ; nn_it000 : check consistancy between namelist and restart ! = 2 nn_date0 read in restart ; nn_it000 : check consistancy between namelist and restart cn_ocerst_in = "restart" ! suffix of ocean restart name (input) cn_ocerst_indir = "." ! directory from which to read input ocean restarts cn_ocerst_out = "restart" ! suffix of ocean restart name (output) cn_ocerst_outdir = "." ! directory in which to write output ocean restarts nn_istate = 0 ! output the initial state (1) or not (0) ln_rst_list = .false. ! output restarts at list of times using nn_stocklist (T) or at set frequency with nn_stock (F) nn_stock = 5475 ! frequency of creation of a restart file (modulo referenced to 1) nn_stocklist = 0,0,0,0,0,0,0,0,0,0 ! List of timesteps when a restart file is to be written nn_write = 5475 ! frequency of write in the output file (modulo referenced to nn_it000) ln_dimgnnn = .false. ! DIMG file format: 1 file for all processors (F) or by processor (T) ln_mskland = .false. ! mask land points in NetCDF outputs (costly: + ~15%) ln_cfmeta = .false. ! output additional data to netCDF files required for compliance with the CF metadata standard ln_clobber = .false. ! clobber (overwrite) an existing file nn_chunksz = 0 ! chunksize (bytes) for NetCDF file (works only with iom_nf90 routines) nn_slimrst = 0 ! option of slim restart output (0:full; 1:nowfields+tke+sbc; 2:nowfields+sbc+en; 3:nowfields only) nn_slimrstin = 0 ! Force slim restart on input ln_rsttime = .true ! Use time in restart output names rather than time step ln_writerst = .true. nn_itout = 1 ! Output from first time step ln_rcf_write = .false. ln_rcf_read = .false. / !!====================================================================== !! *** Domain namelists *** !!====================================================================== !! namcfg parameters of the configuration !! namzgr vertical coordinate !! namzgr_sco s-coordinate or hybrid z-s-coordinate !! namdom space and time domain (bathymetry, mesh, timestep) !! namtsd data: temperature & salinity !!====================================================================== ! !----------------------------------------------------------------------- &namcfg ! parameters of the configuration !----------------------------------------------------------------------- cp_cfg = "default" ! name of the configuration cp_cfz = "no zoom" ! name of the zoom of configuration jp_cfg = 0 ! resolution of the configuration jpidta = 10 ! 1st lateral dimension ( >= jpi ) jpjdta = 12 ! 2nd " " ( >= jpj ) jpkdta = 31 ! number of levels ( >= jpk ) jpiglo = 10 ! 1st dimension of global domain --> i =jpidta jpjglo = 12 ! 2nd - - --> j =jpjdta jpizoom = 1 ! left bottom (i,j) indices of the zoom jpjzoom = 1 ! in data domain indices jperio = 0 ! lateral cond. type (between 0 and 6) ! = 0 closed ; = 1 cyclic East-West ! = 2 equatorial symmetric ; = 3 North fold T-point pivot ! = 4 cyclic East-West AND North fold T-point pivot ! = 5 North fold F-point pivot ! = 6 cyclic East-West AND North fold F-point pivot ln_use_jattr = .false. ! use (T) the file attribute: open_ocean_jstart, if present ! in netcdf input files, as the start j-row for reading / !----------------------------------------------------------------------- &namzgr ! vertical coordinate !----------------------------------------------------------------------- ln_zco = .false. ! z-coordinate - full steps (T/F) ("key_zco" may also be defined) ln_zps = .true. ! z-coordinate - partial steps (T/F) ln_sco = .false. ! s- or hybrid z-s-coordinate (T/F) ln_isfcav = .false. ! ice shelf cavity (T/F) / !----------------------------------------------------------------------- &namzgr_sco ! s-coordinate or hybrid z-s-coordinate !----------------------------------------------------------------------- ln_s_sh94 = .true. ! Song & Haidvogel 1994 hybrid S-sigma (T)| ln_s_sf12 = .false. ! Siddorn & Furner 2012 hybrid S-z-sigma (T)| if both are false the NEMO tanh stretching is applied ln_sigcrit = .false. ! use sigma coordinates below critical depth (T) or Z coordinates (F) for Siddorn & Furner stretch ! stretching coefficients for all functions rn_sbot_min = 10.0 ! minimum depth of s-bottom surface (>0) (m) rn_sbot_max = 7000.0 ! maximum depth of s-bottom surface (= ocean depth) (>0) (m) rn_hc = 150.0 ! critical depth for transition to stretched coordinates !!!!!!! Envelop bathymetry rn_rmax = 0.3 ! maximum cut-off r-value allowed (00) or min number of ocean level (<0) rn_e3zps_min= 20. ! partial step thickness is set larger than the minimum of rn_e3zps_rat= 0.1 ! rn_e3zps_min and rn_e3zps_rat*e3t, with 0 fill namsbc_ana ) ln_flx = .false. ! flux formulation (T => fill namsbc_flx ) ln_blk_clio = .false. ! CLIO bulk formulation (T => fill namsbc_clio) ln_blk_core = .true. ! CORE bulk formulation (T => fill namsbc_core) ln_blk_mfs = .false. ! MFS bulk formulation (T => fill namsbc_mfs ) ln_cpl = .false. ! atmosphere coupled formulation ( requires key_oasis3 ) ln_mixcpl = .false. ! forced-coupled mixed formulation ( requires key_oasis3 ) nn_components = 0 ! configuration of the opa-sas OASIS coupling ! =0 no opa-sas OASIS coupling: default single executable configuration ! =1 opa-sas OASIS coupling: multi executable configuration, OPA component ! =2 opa-sas OASIS coupling: multi executable configuration, SAS component ln_apr_dyn = .false. ! Patm gradient added in ocean & ice Eqs. (T => fill namsbc_apr ) nn_ice = 2 ! =0 no ice boundary condition , ! =1 use observed ice-cover , ! =2 ice-model used ("key_lim3" or "key_lim2") nn_ice_embd = 1 ! =0 levitating ice (no mass exchange, concentration/dilution effect) ! =1 levitating ice with mass and salt exchange but no presure effect ! =2 embedded sea-ice (full salt and mass exchanges and pressure) ln_dm2dc = .false. ! daily mean to diurnal cycle on short wave ln_rnf = .true. ! runoffs (T => fill namsbc_rnf) nn_isf = 0 ! ice shelf melting/freezing (/=0 => fill namsbc_isf) ! 0 =no isf 1 = presence of ISF ! 2 = bg03 parametrisation 3 = rnf file for isf ! 4 = ISF fwf specified ! option 1 and 4 need ln_isfcav = .true. (domzgr) ln_ssr = .true. ! Sea Surface Restoring on T and/or S (T => fill namsbc_ssr) nn_fwb = 2 ! FreshWater Budget: =0 unchecked ! =1 global mean of e-p-r set to zero at each time step ! =2 annual global mean of e-p-r set to zero ln_wave = .false. ! Activate coupling with wave (either Stokes Drift or Drag coefficient, or both) (T => fill namsbc_wave) ln_cdgw = .false. ! Neutral drag coefficient read from wave model (T => fill namsbc_wave) ln_sdw = .false. ! Computation of 3D stokes drift (T => fill namsbc_wave) nn_lsm = 0 ! =0 land/sea mask for input fields is not applied (keep empty land/sea mask filename field) , ! =1:n number of iterations of land/sea mask application for input fields (fill land/sea mask filename field) nn_limflx = -1 ! LIM3 Multi-category heat flux formulation (use -1 if LIM3 is not used) ! =-1 Use per-category fluxes, bypass redistributor, forced mode only, not yet implemented coupled ! = 0 Average per-category fluxes (forced and coupled mode) ! = 1 Average and redistribute per-category fluxes, forced mode only, not yet implemented coupled ! = 2 Redistribute a single flux over categories (coupled mode only) nn_hbp = 0 ! steric height and Bress nn_hst = 0 ! method to compute st height ln_wavetke = .FALSE. ! true if wave parameters are read ln_wbrsource = .FALSE. ! true if TKE from breaking waves input as source term ln_stcor = .FALSE. ! true if Stokes-Coriolis forcing is included ln_tauoc = .FALSE. ! true if wave-modified water-side stress is used rn_taouc_cimin = 0.01 ! Minimum ice fraction for tauoc in coupled mode. ln_wicestrn = .FALSE. ! true if wave-modified ice strain is used ln_limcplcld = .FALSE. ! Clouds from single executable ln_limcpllcc = .FALSE. ! Low clouds from single executable ln_pert = .FALSE. ! read and apply forcing pert (ocean & ice) / !----------------------------------------------------------------------- &namsbc_ana ! analytical surface boundary condition !----------------------------------------------------------------------- nn_tau000 = 0 ! gently increase the stress over the first ntau_rst time-steps rn_utau0 = 0.5 ! uniform value for the i-stress rn_vtau0 = 0.e0 ! uniform value for the j-stress rn_qns0 = 0.e0 ! uniform value for the total heat flux rn_qsr0 = 0.e0 ! uniform value for the solar radiation rn_emp0 = 0.e0 ! uniform value for the freswater budget (E-P) / !----------------------------------------------------------------------- &namsbc_flx ! surface boundary condition : flux formulation !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_utau = 'utau' , 24 , 'utau' , .false. , .false., 'yearly' , '' , '' , '' sn_vtau = 'vtau' , 24 , 'vtau' , .false. , .false., 'yearly' , '' , '' , '' sn_qtot = 'qtot' , 24 , 'qtot' , .false. , .false., 'yearly' , '' , '' , '' sn_qsr = 'qsr' , 24 , 'qsr' , .false. , .false., 'yearly' , '' , '' , '' sn_emp = 'emp' , 24 , 'emp' , .false. , .false., 'yearly' , '' , '' , '' cn_dir = './' ! root directory for the location of the flux files / !----------------------------------------------------------------------- &namsbc_clio ! namsbc_clio CLIO bulk formulae !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_utau = 'taux_1m' , -1 , 'sozotaux', .true. , .true. , 'yearly' , '' , '' , '' sn_vtau = 'tauy_1m' , -1 , 'sometauy', .true. , .true. , 'yearly' , '' , '' , '' sn_wndm = 'flx' , -1 , 'socliowi', .true. , .true. , 'yearly' , '' , '' , '' sn_tair = 'flx' , -1 , 'socliot2', .true. , .true. , 'yearly' , '' , '' , '' sn_humi = 'flx' , -1 , 'socliohu', .true. , .true. , 'yearly' , '' , '' , '' sn_ccov = 'flx' , -1 , 'socliocl', .false. , .true. , 'yearly' , '' , '' , '' sn_prec = 'flx' , -1 , 'socliopl', .false. , .true. , 'yearly' , '' , '' , '' cn_dir = './' ! root directory for the location of the bulk files are / !----------------------------------------------------------------------- &namsbc_core ! namsbc_core CORE bulk formulae !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_wndi = 'u_10.15JUNE2009_fill' , 6 , 'U_10_MOD', .false. , .true. , 'yearly' , 'weights_core_orca2_bicubic_noc.nc' , 'Uwnd' , '' sn_wndj = 'v_10.15JUNE2009_fill' , 6 , 'V_10_MOD', .false. , .true. , 'yearly' , 'weights_core_orca2_bicubic_noc.nc' , 'Vwnd' , '' sn_qsr = 'ncar_rad.15JUNE2009_fill' , 24 , 'SWDN_MOD', .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' sn_qlw = 'ncar_rad.15JUNE2009_fill' , 24 , 'LWDN_MOD', .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' sn_tair = 't_10.15JUNE2009_fill' , 6 , 'T_10_MOD', .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' sn_humi = 'q_10.15JUNE2009_fill' , 6 , 'Q_10_MOD', .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' sn_prec = 'ncar_precip.15JUNE2009_fill' , -1 , 'PRC_MOD1', .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' sn_snow = 'ncar_precip.15JUNE2009_fill' , -1 , 'SNOW' , .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' sn_tdif = 'taudif_core' , 24 , 'taudif' , .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' sn_ccov = 'tcc' , 24 , 'tcc' , .false. , .false. ,'yearly' , '' , '' , '' cn_dir = './' ! root directory for the location of the bulk files ln_taudif = .false. ! HF tau contribution: use "mean of stress module - module of the mean stress" data rn_zqt = 10. ! Air temperature and humidity reference height (m) rn_zu = 10. ! Wind vector reference height (m) rn_pfac = 1. ! multiplicative factor for precipitation (total & snow) rn_efac = 1. ! multiplicative factor for evaporation (0. or 1.) rn_vfac = 0. ! multiplicative factor for ocean/ice velocity ! in the calculation of the wind stress (0.=absolute winds or 1.=relative winds) ln_cdec = .FALSE. ! logical flag for using ec neutral wind drag coef ln_cldcov = .FALSE. ! logical flag to use the cloud cover / !----------------------------------------------------------------------- &namsbc_mfs ! namsbc_mfs MFS bulk formulae !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_wndi = 'ecmwf' , 6 , 'u10' , .true. , .false. , 'daily' ,'bicubic.nc' , '' , '' sn_wndj = 'ecmwf' , 6 , 'v10' , .true. , .false. , 'daily' ,'bicubic.nc' , '' , '' sn_clc = 'ecmwf' , 6 , 'clc' , .true. , .false. , 'daily' ,'bilinear.nc', '' , '' sn_msl = 'ecmwf' , 6 , 'msl' , .true. , .false. , 'daily' ,'bicubic.nc' , '' , '' sn_tair = 'ecmwf' , 6 , 't2' , .true. , .false. , 'daily' ,'bicubic.nc' , '' , '' sn_rhm = 'ecmwf' , 6 , 'rh' , .true. , .false. , 'daily' ,'bilinear.nc', '' , '' sn_prec = 'ecmwf' , 6 , 'precip' , .true. , .true. , 'daily' ,'bicubic.nc' , '' , '' cn_dir = './ECMWF/' ! root directory for the location of the bulk files / !----------------------------------------------------------------------- &namsbc_cpl ! coupled ocean/atmosphere model ("key_oasis3") !----------------------------------------------------------------------- ! ! description ! multiple ! vector ! vector ! vector ! ! ! ! categories ! reference ! orientation ! grids ! ! send sn_snd_temp = 'weighted oce and ice' , 'no' , '' , '' , '' sn_snd_alb = 'weighted ice' , 'no' , '' , '' , '' sn_snd_thick = 'none' , 'no' , '' , '' , '' sn_snd_crt = 'none' , 'no' , 'spherical' , 'eastward-northward' , 'T' sn_snd_co2 = 'coupled' , 'no' , '' , '' , '' ! receive sn_rcv_w10m = 'none' , 'no' , '' , '' , '' sn_rcv_taumod = 'coupled' , 'no' , '' , '' , '' sn_rcv_tau = 'oce only' , 'no' , 'cartesian' , 'eastward-northward', 'U,V' sn_rcv_dqnsdt = 'coupled' , 'no' , '' , '' , '' sn_rcv_qsr = 'oce and ice' , 'no' , '' , '' , '' sn_rcv_qns = 'oce and ice' , 'no' , '' , '' , '' sn_rcv_emp = 'conservative' , 'no' , '' , '' , '' sn_rcv_rnf = 'coupled' , 'no' , '' , '' , '' sn_rcv_cal = 'coupled' , 'no' , '' , '' , '' sn_rcv_co2 = 'coupled' , 'no' , '' , '' , '' ! nn_cplmodel = 1 ! Maximum number of models to/from which NEMO is potentialy sending/receiving data ln_usecplmask = .false. ! use a coupling mask file to merge data received from several models ! -> file cplmask.nc with the float variable called cplmask (jpi,jpj,nn_cplmodel) / !----------------------------------------------------------------------- &namsbc_blk ! namsbc_blk generic Bulk formula (ln_blk = T) !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_wndi = 'u_10.15JUNE2009_fill' , 6 , 'U_10_MOD', .false. , .true. , 'yearly' , 'weights_core_orca2_bicubic_noc.nc' , 'Uwnd' , '' sn_wndj = 'v_10.15JUNE2009_fill' , 6 , 'V_10_MOD', .false. , .true. , 'yearly' , 'weights_core_orca2_bicubic_noc.nc' , 'Vwnd' , '' sn_qsr = 'ncar_rad.15JUNE2009_fill' , 24 , 'SWDN_MOD', .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' sn_qlw = 'ncar_rad.15JUNE2009_fill' , 24 , 'LWDN_MOD', .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' sn_tair = 't_10.15JUNE2009_fill' , 6 , 'T_10_MOD', .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' sn_humi = 'q_10.15JUNE2009_fill' , 6 , 'Q_10_MOD', .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' sn_prec = 'ncar_precip.15JUNE2009_fill', -1 , 'PRC_MOD1', .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' sn_snow = 'ncar_precip.15JUNE2009_fill', -1 , 'SNOW' , .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' sn_slp = 'slp.15JUNE2009_fill' , 6 , 'SLP' , .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' sn_tdif = 'taudif_core' , 24 , 'taudif' , .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' ! ! bulk algorithm : ln_NCAR = .false. ! "NCAR" algorithm (Large and Yeager 2008) ln_COARE_3p0= .false. ! "COARE 3.0" algorithm (Fairall et al. 2003) ln_COARE_3p5= .false. ! "COARE 3.5" algorithm (Edson et al. 2013) ln_ECMWF = .false. ! "ECMWF" algorithm (IFS cycle 31) ! cn_dir = './' ! root directory for the location of the bulk files ln_taudif = .false. ! HF tau contribution: use "mean of stress module - module of the mean stress" data rn_zqt = 10. ! Air temperature and humidity reference height (m) rn_zu = 10. ! Wind vector reference height (m) rn_pfac = 1. ! multiplicative factor for precipitation (total & snow) rn_efac = 1. ! multiplicative factor for evaporation (0. or 1.) rn_vfac = 0. ! multiplicative factor for ocean/ice velocity ! in the calculation of the wind stress (0.=absolute winds or 1.=relative winds) ln_Cd_L12 = .false. ! Modify the drag ice-atm and oce-atm depending on ice concentration ! This parameterization is from Lupkes et al. (JGR 2012) / !----------------------------------------------------------------------- &namsbc_sas ! analytical surface boundary condition !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_usp = 'sas_grid_U' , 120 , 'vozocrtx' , .true. , .true. , 'yearly' , '' , '' , '' sn_vsp = 'sas_grid_V' , 120 , 'vomecrty' , .true. , .true. , 'yearly' , '' , '' , '' sn_tem = 'sas_grid_T' , 120 , 'sosstsst' , .true. , .true. , 'yearly' , '' , '' , '' sn_sal = 'sas_grid_T' , 120 , 'sosaline' , .true. , .true. , 'yearly' , '' , '' , '' sn_ssh = 'sas_grid_T' , 120 , 'sossheig' , .true. , .true. , 'yearly' , '' , '' , '' sn_e3t = 'sas_grid_T' , 120 , 'e3t_m' , .true. , .true. , 'yearly' , '' , '' , '' sn_frq = 'sas_grid_T' , 120 , 'frq_m' , .true. , .true. , 'yearly' , '' , '' , '' ln_3d_uve = .true. ! specify whether we are supplying a 3D u,v and e3 field ln_read_frq = .false. ! specify whether we must read frq or not cn_dir = './' ! root directory for the location of the bulk files are / !----------------------------------------------------------------------- &namtra_qsr ! penetrative solar radiation !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_chl ='chlorophyll', -1 , 'CHLA' , .true. , .true. , 'yearly' , '' , '' , '' cn_dir = './' ! root directory for the location of the runoff files ln_traqsr = .true. ! Light penetration (T) or not (F) ln_qsr_rgb = .true. ! RGB (Red-Green-Blue) light penetration ln_qsr_2bd = .false. ! 2 bands light penetration ln_qsr_bio = .false. ! bio-model light penetration nn_chldta = 1 ! RGB : 2D Chl data (=1), 3D Chl data (=2) or cst value (=0) rn_abs = 0.58 ! RGB & 2 bands: fraction of light (rn_si1) rn_si0 = 0.35 ! RGB & 2 bands: shortess depth of extinction rn_si1 = 23.0 ! 2 bands: longest depth of extinction ln_qsr_ice = .true. ! light penetration for ice-model LIM3 / !----------------------------------------------------------------------- &namsbc_rnf ! runoffs namelist surface boundary condition !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_rnf = 'runoff_core_monthly', -1 , 'sorunoff', .true. , .true. , 'yearly' , '' , '' , '' sn_cnf = 'runoff_core_monthly', 0 , 'socoefr0', .false. , .true. , 'yearly' , '' , '' , '' sn_s_rnf = 'runoffs' , 24 , 'rosaline', .true. , .true. , 'yearly' , '' , '' , '' sn_t_rnf = 'runoffs' , 24 , 'rotemper', .true. , .true. , 'yearly' , '' , '' , '' sn_dep_rnf = 'runoffs' , 0 , 'rodepth' , .false. , .true. , 'yearly' , '' , '' , '' cn_dir = './' ! root directory for the location of the runoff files ln_rnf_mouth = .true. ! specific treatment at rivers mouths rn_hrnf = 15.e0 ! depth over which enhanced vertical mixing is used rn_avt_rnf = 1.e-3 ! value of the additional vertical mixing coef. [m2/s] rn_rfact = 1.e0 ! multiplicative factor for runoff ln_rnf_depth = .false. ! read in depth information for runoff ln_rnf_tem = .false. ! read in temperature information for runoff ln_rnf_sal = .false. ! read in salinity information for runoff ln_rnf_depth_ini = .false. ! compute depth at initialisation from runoff file rn_rnf_max = 5.735e-4 ! max value of the runoff climatologie over global domain ( ln_rnf_depth_ini = .true ) rn_dep_max = 150. ! depth over which runoffs is spread ( ln_rnf_depth_ini = .true ) nn_rnf_depth_file = 0 ! create (=1) a runoff depth file or not (=0) / !----------------------------------------------------------------------- &namsbc_isf ! Top boundary layer (ISF) !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interpol. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! ! nn_isf == 4 sn_qisf = 'rnfisf' , -12 ,'sohflisf', .false. , .true. , 'yearly' , '' , '' sn_fwfisf = 'rnfisf' , -12 ,'sowflisf', .false. , .true. , 'yearly' , '' , '' ! nn_isf == 3 sn_rnfisf = 'runoffs' , -12 ,'sofwfisf', .false. , .true. , 'yearly' , '' , '' ! nn_isf == 2 and 3 sn_depmax_isf = 'runoffs' , -12 ,'sozisfmax' , .false. , .true. , 'yearly' , '' , '' sn_depmin_isf = 'runoffs' , -12 ,'sozisfmin' , .false. , .true. , 'yearly' , '' , '' ! nn_isf == 2 sn_Leff_isf = 'rnfisf' , 0 ,'Leff' , .false. , .true. , 'yearly' , '' , '' ! for all case ln_divisf = .true. ! apply isf melting as a mass flux or in the salinity trend. (maybe I should remove this option as for runoff?) ! only for nn_isf = 1 or 2 rn_gammat0 = 1.0e-4 ! gammat coefficient used in blk formula rn_gammas0 = 1.0e-4 ! gammas coefficient used in blk formula ! only for nn_isf = 1 nn_isfblk = 1 ! 1 ISOMIP ; 2 conservative (3 equation formulation, Jenkins et al. 1991 ??) rn_hisf_tbl = 30. ! thickness of the top boundary layer (Losh et al. 2008) ! 0 => thickness of the tbl = thickness of the first wet cell ln_conserve = .true. ! conservative case (take into account meltwater advection) nn_gammablk = 1 ! 0 = cst Gammat (= gammat/s) ! 1 = velocity dependend Gamma (u* * gammat/s) (Jenkins et al. 2010) ! if you want to keep the cd as in global config, adjust rn_gammat0 to compensate ! 2 = velocity and stability dependent Gamma Holland et al. 1999 / !----------------------------------------------------------------------- &namsbc_apr ! Atmospheric pressure used as ocean forcing or in bulk !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_apr = 'patm' , -1 ,'somslpre', .true. , .true. , 'yearly' , '' , '' , '' cn_dir = './' ! root directory for the location of the bulk files rn_pref = 101000. ! reference atmospheric pressure [N/m2]/ ln_ref_apr = .false. ! ref. pressure: global mean Patm (T) or a constant (F) ln_apr_obc = .false. ! inverse barometer added to OBC ssh data / !----------------------------------------------------------------------- &namsbc_ssr ! surface boundary condition : sea surface restoring !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_sst = 'sst_data' , 24 , 'sst' , .false. , .false., 'yearly' , '' , '' , '' sn_sss = 'sss_data' , -1 , 'sss' , .true. , .true. , 'yearly' , '' , '' , '' cn_dir = './' ! root directory for the location of the runoff files nn_sstr = 0 ! add a retroaction term in the surface heat flux (=1) or not (=0) nn_sssr = 2 ! add a damping term in the surface freshwater flux (=2) ! or to SSS only (=1) or no damping term (=0) rn_dqdt = -40. ! magnitude of the retroaction on temperature [W/m2/K] rn_deds = -166.67 ! magnitude of the damping on salinity [mm/day] ln_sssr_bnd = .true. ! flag to bound erp term (associated with nn_sssr=2) rn_sssr_bnd = 4.e0 ! ABS(Max/Min) value of the damping erp term [mm/day] / !----------------------------------------------------------------------- &namsbc_alb ! albedo parameters !----------------------------------------------------------------------- nn_ice_alb = 1 ! parameterization of ice/snow albedo ! 0: Shine & Henderson-Sellers (JGR 1985), giving clear-sky albedo ! 1: "home made" based on Brandt et al. (JClim 2005) and Grenfell & Perovich (JGR 2004), ! giving cloud-sky albedo rn_alb_sdry = 0.85 ! dry snow albedo : 0.80 (nn_ice_alb = 0); 0.85 (nn_ice_alb = 1); obs 0.85-0.87 (cloud-sky) rn_alb_smlt = 0.75 ! melting snow albedo : 0.65 ( '' ) ; 0.75 ( '' ) ; obs 0.72-0.82 ( '' ) rn_alb_idry = 0.60 ! dry ice albedo : 0.72 ( '' ) ; 0.60 ( '' ) ; obs 0.54-0.65 ( '' ) rn_alb_imlt = 0.50 ! bare puddled ice albedo : 0.53 ( '' ) ; 0.50 ( '' ) ; obs 0.49-0.58 ( '' ) / !----------------------------------------------------------------------- &namberg ! iceberg parameters !----------------------------------------------------------------------- ln_icebergs = .false. ln_bergdia = .true. ! Calculate budgets nn_verbose_level = 1 ! Turn on more verbose output if level > 0 nn_verbose_write = 15 ! Timesteps between verbose messages nn_sample_rate = 1 ! Timesteps between sampling for trajectory storage ! Initial mass required for an iceberg of each class rn_initial_mass = 8.8e7, 4.1e8, 3.3e9, 1.8e10, 3.8e10, 7.5e10, 1.2e11, 2.2e11, 3.9e11, 7.4e11 ! Proportion of calving mass to apportion to each class rn_distribution = 0.24, 0.12, 0.15, 0.18, 0.12, 0.07, 0.03, 0.03, 0.03, 0.02 ! Ratio between effective and real iceberg mass (non-dim) ! i.e. number of icebergs represented at a point rn_mass_scaling = 2000, 200, 50, 20, 10, 5, 2, 1, 1, 1 ! thickness of newly calved bergs (m) rn_initial_thickness = 40., 67., 133., 175., 250., 250., 250., 250., 250., 250. rn_rho_bergs = 850. ! Density of icebergs rn_LoW_ratio = 1.5 ! Initial ratio L/W for newly calved icebergs ln_operator_splitting = .true. ! Use first order operator splitting for thermodynamics rn_bits_erosion_fraction = 0. ! Fraction of erosion melt flux to divert to bergy bits rn_sicn_shift = 0. ! Shift of sea-ice concn in erosion flux (0 surface CT converted in Pot. Temp. in sbcssm ! ! ! ! S-EOS coefficients : ! ! rd(T,S,Z)*rau0 = -a0*(1+.5*lambda*dT+mu*Z+nu*dS)*dT+b0*dS rn_a0 = 1.6550e-1 ! thermal expension coefficient (nn_eos= 1) rn_b0 = 7.6554e-1 ! saline expension coefficient (nn_eos= 1) rn_lambda1 = 5.9520e-2 ! cabbeling coeff in T^2 (=0 for linear eos) rn_lambda2 = 7.4914e-4 ! cabbeling coeff in S^2 (=0 for linear eos) rn_mu1 = 1.4970e-4 ! thermobaric coeff. in T (=0 for linear eos) rn_mu2 = 1.1090e-5 ! thermobaric coeff. in S (=0 for linear eos) rn_nu = 2.4341e-3 ! cabbeling coeff in T*S (=0 for linear eos) / !----------------------------------------------------------------------- &namtra_adv ! advection scheme for tracer !----------------------------------------------------------------------- ln_traadv_cen2 = .false. ! 2nd order centered scheme ln_traadv_tvd = .true. ! TVD scheme ln_traadv_muscl = .false. ! MUSCL scheme ln_traadv_muscl2 = .false. ! MUSCL2 scheme + cen2 at boundaries ln_traadv_ubs = .false. ! UBS scheme ln_traadv_qck = .false. ! QUICKEST scheme ln_traadv_msc_ups= .false. ! use upstream scheme within muscl ln_traadv_tvd_zts= .false. ! TVD scheme with sub-timestepping of vertical tracer advection / !----------------------------------------------------------------------- &namtra_adv_mle ! mixed layer eddy parametrisation (Fox-Kemper param) !----------------------------------------------------------------------- ln_mle = .true. ! (T) use the Mixed Layer Eddy (MLE) parameterisation rn_ce = 0.06 ! magnitude of the MLE (typical value: 0.06 to 0.08) nn_mle = 1 ! MLE type: =0 standard Fox-Kemper ; =1 new formulation rn_lf = 5.e+3 ! typical scale of mixed layer front (meters) (case rn_mle=0) rn_time = 172800. ! time scale for mixing momentum across the mixed layer (seconds) (case rn_mle=0) rn_lat = 20. ! reference latitude (degrees) of MLE coef. (case rn_mle=1) nn_mld_uv = 0 ! space interpolation of MLD at u- & v-pts (0=min,1=averaged,2=max) nn_conv = 0 ! =1 no MLE in case of convection ; =0 always MLE rn_rho_c_mle = 0.01 ! delta rho criterion used to calculate MLD for FK / !---------------------------------------------------------------------------------- &namtra_ldf ! lateral diffusion scheme for tracers !---------------------------------------------------------------------------------- ! ! Operator type: ln_traldf_lap = .true. ! laplacian operator ln_traldf_bilap = .false. ! bilaplacian operator ! ! Direction of action: ln_traldf_level = .false. ! iso-level ln_traldf_hor = .false. ! horizontal (geopotential) (needs "key_ldfslp" when ln_sco=T) ln_traldf_iso = .true. ! iso-neutral (needs "key_ldfslp") ! ! Griffies parameters (all need "key_ldfslp") ln_traldf_grif = .false. ! use griffies triads ln_traldf_gdia = .false. ! output griffies eddy velocities ln_triad_iso = .false. ! pure lateral mixing in ML ln_botmix_grif = .false. ! lateral mixing on bottom ! ! Coefficients ! Eddy-induced (GM) advection always used with Griffies; otherwise needs "key_traldf_eiv" ! Value rn_aeiv_0 is ignored unless = 0 with Held-Larichev spatially varying aeiv ! (key_traldf_c2d & key_traldf_eiv & key_orca_r2, _r1 or _r05) rn_aeiv_0 = 2000. ! eddy induced velocity coefficient [m2/s] rn_aht_0 = 2000. ! horizontal eddy diffusivity for tracers [m2/s] rn_ahtb_0 = 0. ! background eddy diffusivity for ldf_iso [m2/s] ! (normally=0; not used with Griffies) rn_slpmax = 0.01 ! slope limit rn_chsmag = 1. ! multiplicative factor in Smagorinsky diffusivity rn_smsh = 1. ! Smagorinsky diffusivity: = 0 - use only sheer rn_aht_m = 2000. ! upper limit or stability criteria for lateral eddy diffusivity (m2/s) / !----------------------------------------------------------------------- &namtra_dmp ! tracer: T & S newtonian damping !----------------------------------------------------------------------- ln_tradmp = .true. ! add a damping termn (T) or not (F) nn_zdmp = 0 ! vertical shape =0 damping throughout the water column ! =1 no damping in the mixing layer (kz criteria) ! =2 no damping in the mixed layer (rho crieria) cn_resto = 'resto.nc' ! Name of file containing restoration coefficient field (use dmp_tools to create this) / !!====================================================================== !! *** Dynamics namelists *** !!====================================================================== !! namdyn_adv formulation of the momentum advection !! namdyn_vor advection scheme !! namdyn_hpg hydrostatic pressure gradient !! namdyn_spg surface pressure gradient (CPP key only) !! namdyn_ldf lateral diffusion scheme !!====================================================================== ! !----------------------------------------------------------------------- &namdyn_adv ! formulation of the momentum advection !----------------------------------------------------------------------- ln_dynadv_vec = .true. ! vector form (T) or flux form (F) nn_dynkeg = 0 ! scheme for grad(KE): =0 C2 ; =1 Hollingsworth correction ln_dynadv_cen2= .false. ! flux form - 2nd order centered scheme ln_dynadv_ubs = .false. ! flux form - 3rd order UBS scheme ln_dynzad_zts = .false. ! Use (T) sub timestepping for vertical momentum advection / !----------------------------------------------------------------------- &nam_vvl ! vertical coordinate options !----------------------------------------------------------------------- ln_vvl_zstar = .true. ! zstar vertical coordinate ln_vvl_ztilde = .false. ! ztilde vertical coordinate: only high frequency variations ln_vvl_layer = .false. ! full layer vertical coordinate ln_vvl_ztilde_as_zstar = .false. ! ztilde vertical coordinate emulating zstar ln_vvl_zstar_at_eqtor = .false. ! ztilde near the equator rn_ahe3 = 0.0e0 ! thickness diffusion coefficient rn_rst_e3t = 30.e0 ! ztilde to zstar restoration timescale [days] rn_lf_cutoff = 5.0e0 ! cutoff frequency for low-pass filter [days] rn_zdef_max = 0.9e0 ! maximum fractional e3t deformation ln_vvl_dbg = .true. ! debug prints (T/F) / !----------------------------------------------------------------------- &namdyn_vor ! option of physics/algorithm (not control by CPP keys) !----------------------------------------------------------------------- ln_dynvor_ene = .false. ! enstrophy conserving scheme ln_dynvor_ens = .false. ! energy conserving scheme ln_dynvor_mix = .false. ! mixed scheme ln_dynvor_een = .true. ! energy & enstrophy scheme ln_dynvor_een_old = .false. ! energy & enstrophy scheme - original formulation / !----------------------------------------------------------------------- &namdyn_hpg ! Hydrostatic pressure gradient option !----------------------------------------------------------------------- ln_hpg_zco = .false. ! z-coordinate - full steps ln_hpg_zps = .true. ! z-coordinate - partial steps (interpolation) ln_hpg_sco = .false. ! s-coordinate (standard jacobian formulation) ln_hpg_isf = .false. ! s-coordinate (sco ) adapted to isf ln_hpg_djc = .false. ! s-coordinate (Density Jacobian with Cubic polynomial) ln_hpg_prj = .false. ! s-coordinate (Pressure Jacobian scheme) ln_dynhpg_imp = .false. ! time stepping: semi-implicit time scheme (T) ! centered time scheme (F) / !----------------------------------------------------------------------- !namdyn_spg ! surface pressure gradient (CPP key only) !----------------------------------------------------------------------- ! ! explicit free surface ("key_dynspg_exp") ! ! filtered free surface ("key_dynspg_flt") ! ! split-explicit free surface ("key_dynspg_ts") !----------------------------------------------------------------------- &namdyn_ldf ! lateral diffusion on momentum !----------------------------------------------------------------------- ! ! Type of the operator : ln_dynldf_lap = .true. ! laplacian operator ln_dynldf_bilap = .false. ! bilaplacian operator ! ! Direction of action : ln_dynldf_level = .false. ! iso-level ln_dynldf_hor = .true. ! horizontal (geopotential) (require "key_ldfslp" in s-coord.) ln_dynldf_iso = .false. ! iso-neutral (require "key_ldfslp") ! ! Coefficient rn_ahm_0_lap = 40000. ! horizontal laplacian eddy viscosity [m2/s] rn_ahm_0_lap_eq = 2000. ! horizontal laplacian eddy viscosity equator [m2/s] rn_ahmb_0 = 0. ! background eddy viscosity for ldf_iso [m2/s] rn_ahm_0_blp = 0. ! horizontal bilaplacian eddy viscosity [m4/s] rn_cmsmag_1 = 3. ! constant in laplacian Smagorinsky viscosity rn_cmsmag_2 = 3 ! constant in bilaplacian Smagorinsky viscosity rn_cmsh = 1. ! 1 or 0 , if 0 -use only shear for Smagorinsky viscosity rn_ahm_m_blp = -1.e12 ! upper limit for bilap abs(ahm) < min( dx^4/128rdt, rn_ahm_m_blp) rn_ahm_m_lap = 40000. ! upper limit for lap ahm < min(dx^2/16rdt, rn_ahm_m_lap) / !!====================================================================== !! Tracers & Dynamics vertical physics namelists !!====================================================================== !! namzdf vertical physics !! namzdf_ric richardson number dependent vertical mixing ("key_zdfric") !! namzdf_tke TKE dependent vertical mixing ("key_zdftke") !! namzdf_kpp KPP dependent vertical mixing ("key_zdfkpp") !! namzdf_ddm double diffusive mixing parameterization ("key_zdfddm") !! namzdf_tmx tidal mixing parameterization ("key_zdftmx") !! namzdf_tmx_new new tidal mixing parameterization ("key_zdftmx_new") !!====================================================================== ! !----------------------------------------------------------------------- &namzdf ! vertical physics !----------------------------------------------------------------------- rn_avm0 = 1.2e-4 ! vertical eddy viscosity [m2/s] (background Kz if not "key_zdfcst") rn_avt0 = 1.2e-5 ! vertical eddy diffusivity [m2/s] (background Kz if not "key_zdfcst") nn_avb = 0 ! profile for background avt & avm (=1) or not (=0) nn_havtb = 0 ! horizontal shape for avtb (=1) or not (=0) ln_zdfevd = .true. ! enhanced vertical diffusion (evd) (T) or not (F) nn_evdm = 0 ! evd apply on tracer (=0) or on tracer and momentum (=1) rn_avevd = 100. ! evd mixing coefficient [m2/s] ln_zdfnpc = .false. ! Non-Penetrative Convective algorithm (T) or not (F) nn_npc = 1 ! frequency of application of npc nn_npcp = 365 ! npc control print frequency ln_zdfexp = .false. ! time-stepping: split-explicit (T) or implicit (F) time stepping nn_zdfexp = 3 ! number of sub-timestep for ln_zdfexp=T / !----------------------------------------------------------------------- &namzdf_ric ! richardson number dependent vertical diffusion ("key_zdfric" ) !----------------------------------------------------------------------- rn_avmri = 100.e-4 ! maximum value of the vertical viscosity rn_alp = 5. ! coefficient of the parameterization nn_ric = 2 ! coefficient of the parameterization rn_ekmfc = 0.7 ! Factor in the Ekman depth Equation rn_mldmin = 1.0 ! minimum allowable mixed-layer depth estimate (m) rn_mldmax =1000.0 ! maximum allowable mixed-layer depth estimate (m) rn_wtmix = 10.0 ! vertical eddy viscosity coeff [m2/s] in the mixed-layer rn_wvmix = 10.0 ! vertical eddy diffusion coeff [m2/s] in the mixed-layer ln_mldw = .true. ! Flag to use or not the mized layer depth param. / !----------------------------------------------------------------------- &namzdf_tke ! turbulent eddy kinetic dependent vertical diffusion ("key_zdftke") !----------------------------------------------------------------------- rn_ediff = 0.1 ! coef. for vertical eddy coef. (avt=rn_ediff*mxl*sqrt(e) ) rn_ediss = 0.7 ! coef. of the Kolmogoroff dissipation rn_ebb = 67.83 ! coef. of the surface input of tke (=67.83 suggested when ln_mxl0=T) rn_emin = 1.e-6 ! minimum value of tke [m2/s2] rn_emin0 = 1.e-4 ! surface minimum value of tke [m2/s2] rn_bshear = 1.e-20 ! background shear (>0) currently a numerical threshold (do not change it) nn_mxl = 2 ! mixing length: = 0 bounded by the distance to surface and bottom ! = 1 bounded by the local vertical scale factor ! = 2 first vertical derivative of mixing length bounded by 1 ! = 3 as =2 with distinct disspipative an mixing length scale nn_pdl = 1 ! Prandtl number function of richarson number (=1, avt=pdl(Ri)*avm) or not (=0, avt=avm) ln_mxl0 = .true. ! surface mixing length scale = F(wind stress) (T) or not (F) rn_mxl0 = 0.04 ! surface buoyancy lenght scale minimum value ln_lc = .true. ! Langmuir cell parameterisation (Axell 2002) rn_lc = 0.15 ! coef. associated to Langmuir cells nn_etau = 1 ! penetration of tke below the mixed layer (ML) due to internal & intertial waves ! = 0 no penetration ! = 1 add a tke source below the ML ! = 2 add a tke source just at the base of the ML ! = 3 as = 1 applied on HF part of the stress ("key_oasis3") rn_efr = 0.05 ! fraction of surface tke value which penetrates below the ML (nn_etau=1 or 2) nn_htau = 1 ! type of exponential decrease of tke penetration below the ML ! = 0 constant 10 m length scale ! = 1 0.5m at the equator to 30m poleward of 40 degrees rn_ebbice = 3.75 ! coefficient of the surface input of tke under ice ln_ebbice = .false. ! True means TKE is reduced under ice / !------------------------------------------------------------------------ &namzdf_kpp ! K-Profile Parameterization dependent vertical mixing ("key_zdfkpp", and optionally: !------------------------------------------------------------------------ "key_kppcustom" or "key_kpplktb") ln_kpprimix = .true. ! shear instability mixing rn_difmiw = 1.0e-04 ! constant internal wave viscosity [m2/s] rn_difsiw = 0.1e-04 ! constant internal wave diffusivity [m2/s] rn_riinfty = 0.8 ! local Richardson Number limit for shear instability rn_difri = 0.0050 ! maximum shear mixing at Rig = 0 [m2/s] rn_bvsqcon = -0.01e-07 ! Brunt-Vaisala squared for maximum convection [1/s2] rn_difcon = 1. ! maximum mixing in interior convection [m2/s] nn_avb = 0 ! horizontal averaged (=1) or not (=0) on avt and amv nn_ave = 1 ! constant (=0) or profile (=1) background on avt / !----------------------------------------------------------------------- &namzdf_gls ! GLS vertical diffusion ("key_zdfgls") !----------------------------------------------------------------------- rn_emin = 1.e-7 ! minimum value of e [m2/s2] rn_epsmin = 1.e-12 ! minimum value of eps [m2/s3] ln_length_lim = .true. ! limit on the dissipation rate under stable stratification (Galperin et al., 1988) rn_clim_galp = 0.267 ! galperin limit ln_sigpsi = .true. ! Activate or not Burchard 2001 mods on psi schmidt number in the wb case rn_crban = 100. ! Craig and Banner 1994 constant for wb tke flux rn_charn = 70000. ! Charnock constant for wb induced roughness length rn_hsro = 0.02 ! Minimum surface roughness rn_frac_hs = 1.3 ! Fraction of wave height as roughness (if nn_z0_met=2) nn_z0_met = 2 ! Method for surface roughness computation (0/1/2) nn_bc_surf = 1 ! surface condition (0/1=Dir/Neum) nn_bc_bot = 1 ! bottom condition (0/1=Dir/Neum) nn_stab_func = 2 ! stability function (0=Galp, 1= KC94, 2=CanutoA, 3=CanutoB) nn_clos = 1 ! predefined closure type (0=MY82, 1=k-eps, 2=k-w, 3=Gen) / !----------------------------------------------------------------------- &namzdf_ddm ! double diffusive mixing parameterization ("key_zdfddm") !----------------------------------------------------------------------- rn_avts = 1.e-4 ! maximum avs (vertical mixing on salinity) rn_hsbfr = 1.6 ! heat/salt buoyancy flux ratio / !----------------------------------------------------------------------- &namzdf_tmx ! tidal mixing parameterization ("key_zdftmx") !----------------------------------------------------------------------- rn_htmx = 500. ! vertical decay scale for turbulence (meters) rn_n2min = 1.e-8 ! threshold of the Brunt-Vaisala frequency (s-1) rn_tfe = 0.333 ! tidal dissipation efficiency rn_me = 0.2 ! mixing efficiency ln_tmx_itf = .true. ! ITF specific parameterisation rn_tfe_itf = 1. ! ITF tidal dissipation efficiency / !----------------------------------------------------------------------- &namzdf_tmx_new ! new tidal mixing parameterization ("key_zdftmx_new") !----------------------------------------------------------------------- nn_zpyc = 1 ! pycnocline-intensified dissipation scales as N (=1) or N^2 (=2) ln_mevar = .true. ! variable (T) or constant (F) mixing efficiency ln_tsdiff = .true. ! account for differential T/S mixing (T) or not (F) / !!====================================================================== !! *** Miscellaneous namelists *** !!====================================================================== !! namsol elliptic solver / island / free surface !! nammpp Massively Parallel Processing ("key_mpp_mpi) !! namctl Control prints & Benchmark !! namc1d 1D configuration options ("key_c1d") !! namc1d_uvd data: U & V currents ("key_c1d") !! namc1d_dyndmp U & V newtonian damping ("key_c1d") !! namsto Stochastic parametrization of EOS !!====================================================================== ! !----------------------------------------------------------------------- &namsol ! elliptic solver / island / free surface !----------------------------------------------------------------------- nn_solv = 1 ! elliptic solver: =1 preconditioned conjugate gradient (pcg) ! =2 successive-over-relaxation (sor) nn_sol_arp = 0 ! absolute/relative (0/1) precision convergence test rn_eps = 1.e-6 ! absolute precision of the solver nn_nmin = 300 ! minimum of iterations for the SOR solver nn_nmax = 800 ! maximum of iterations for the SOR solver nn_nmod = 10 ! frequency of test for the SOR solver rn_resmax = 1.e-10 ! absolute precision for the SOR solver rn_sor = 1.92 ! optimal coefficient for SOR solver (to be adjusted with the domain) / !----------------------------------------------------------------------- &nammpp ! Massively Parallel Processing ("key_mpp_mpi) !----------------------------------------------------------------------- cn_mpi_send = 'I' ! mpi send/recieve type ='S', 'B', or 'I' for standard send, ! buffer blocking send or immediate non-blocking sends, resp. nn_buffer = 0 ! size in bytes of exported buffer ('B' case), 0 no exportation ln_nnogather= .false. ! activate code to avoid mpi_allgather use at the northfold jpni = 0 ! jpni number of processors following i (set automatically if < 1) jpnj = 0 ! jpnj number of processors following j (set automatically if < 1) jpnij = 0 ! jpnij number of local domains (set automatically if < 1) / !----------------------------------------------------------------------- &namctl ! Control prints & Benchmark !----------------------------------------------------------------------- ln_ctl = .false. ! trends control print (expensive!) nn_print = 0 ! level of print (0 no extra print) nn_ictls = 0 ! start i indice of control sum (use to compare mono versus nn_ictle = 0 ! end i indice of control sum multi processor runs nn_jctls = 0 ! start j indice of control over a subdomain) nn_jctle = 0 ! end j indice of control nn_isplt = 1 ! number of processors in i-direction nn_jsplt = 1 ! number of processors in j-direction nn_bench = 0 ! Bench mode (1/0): CAUTION use zero except for bench ! (no physical validity of the results) nn_timing = 0 ! timing by routine activated (=1) creates timing.output file, or not (=0) / !----------------------------------------------------------------------- &namc1d_uvd ! data: U & V currents ("key_c1d") !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_ucur = 'ucurrent' , -1 ,'u_current', .false. , .true. , 'monthly' , '' , 'Ume' , '' sn_vcur = 'vcurrent' , -1 ,'v_current', .false. , .true. , 'monthly' , '' , 'Vme' , '' ! cn_dir = './' ! root directory for the location of the files ln_uvd_init = .false. ! Initialisation of ocean U & V with U & V input data (T) or not (F) ln_uvd_dyndmp = .false. ! damping of ocean U & V toward U & V input data (T) or not (F) / !----------------------------------------------------------------------- &namc1d_dyndmp ! U & V newtonian damping ("key_c1d") !----------------------------------------------------------------------- ln_dyndmp = .false. ! add a damping term (T) or not (F) / !----------------------------------------------------------------------- &namsto ! Stochastic parametrization of EOS !----------------------------------------------------------------------- ln_rststo = .false. ! start from mean parameter (F) or from restart file (T) ln_rstseed = .true. ! read seed of RNG from restart file cn_storst_in = "restart_sto" ! suffix of stochastic parameter restart file (input) cn_storst_out = "restart_sto" ! suffix of stochastic parameter restart file (output) ln_sto_eos = .false. ! stochastic equation of state nn_sto_eos = 1 ! number of independent random walks rn_eos_stdxy = 1.4 ! random walk horz. standard deviation (in grid points) rn_eos_stdz = 0.7 ! random walk vert. standard deviation (in grid points) rn_eos_tcor = 1440.0 ! random walk time correlation (in timesteps) nn_eos_ord = 1 ! order of autoregressive processes nn_eos_flt = 0 ! passes of Laplacian filter rn_eos_lim = 2.0 ! limitation factor (default = 3.0) / !!====================================================================== !! *** Diagnostics namelists *** !!====================================================================== !! namnc4 netcdf4 chunking and compression settings ("key_netcdf4") !! namtrd dynamics and/or tracer trends !! namptr Poleward Transport Diagnostics !! namflo float parameters ("key_float") !! namhsb Heat and salt budgets !!====================================================================== ! !----------------------------------------------------------------------- &namnc4 ! netcdf4 chunking and compression settings ("key_netcdf4") !----------------------------------------------------------------------- nn_nchunks_i= 4 ! number of chunks in i-dimension nn_nchunks_j= 4 ! number of chunks in j-dimension nn_nchunks_k= 31 ! number of chunks in k-dimension ! setting nn_nchunks_k = jpk will give a chunk size of 1 in the vertical which ! is optimal for postprocessing which works exclusively with horizontal slabs ln_nc4zip = .true. ! (T) use netcdf4 chunking and compression ! (F) ignore chunking information and produce netcdf3-compatible files / !----------------------------------------------------------------------- &namtrd ! diagnostics on dynamics and/or tracer trends ! ! and/or mixed-layer trends and/or barotropic vorticity !----------------------------------------------------------------------- ln_glo_trd = .false. ! (T) global domain averaged diag for T, T^2, KE, and PE ln_dyn_trd = .false. ! (T) 3D momentum trend output ln_dyn_mxl = .FALSE. ! (T) 2D momentum trends averaged over the mixed layer (not coded yet) ln_vor_trd = .FALSE. ! (T) 2D barotropic vorticity trends (not coded yet) ln_KE_trd = .false. ! (T) 3D Kinetic Energy trends ln_PE_trd = .false. ! (T) 3D Potential Energy trends ln_tra_trd = .FALSE. ! (T) 3D tracer trend output ln_tra_mxl = .false. ! (T) 2D tracer trends averaged over the mixed layer (not coded yet) nn_trd = 365 ! print frequency (ln_glo_trd=T) (unit=time step) / !!gm nn_ctls = 0 ! control surface type in mixed-layer trends (0,1 or n /seconds ; =86400. -> /day) !!gm cn_trdrst_in = "restart_mld" ! suffix of ocean restart name (input) !!gm cn_trdrst_out = "restart_mld" ! suffix of ocean restart name (output) !!gm ln_trdmld_restart = .false. ! restart for ML diagnostics !!gm ln_trdmld_instant = .false. ! flag to diagnose trends of instantantaneous or mean ML T/S !!gm !----------------------------------------------------------------------- &namflo ! float parameters ("key_float") !----------------------------------------------------------------------- jpnfl = 1 ! total number of floats during the run jpnnewflo = 0 ! number of floats for the restart ln_rstflo = .false. ! float restart (T) or not (F) nn_writefl = 75 ! frequency of writing in float output file nn_stockfl = 5475 ! frequency of creation of the float restart file ln_argo = .false. ! Argo type floats (stay at the surface each 10 days) ln_flork4 = .false. ! trajectories computed with a 4th order Runge-Kutta (T) ! or computed with Blanke' scheme (F) ln_ariane = .true. ! Input with Ariane tool convention(T) ln_flo_ascii = .true. ! Output with Ariane tool netcdf convention(F) or ascii file (T) / !----------------------------------------------------------------------- &namptr ! Poleward Transport Diagnostic !----------------------------------------------------------------------- ln_diaptr = .false. ! Poleward heat and salt transport (T) or not (F) ln_subbas = .false. ! Atlantic/Pacific/Indian basins computation (T) or not / !----------------------------------------------------------------------- &namhsb ! Heat and salt budgets !----------------------------------------------------------------------- ln_diahsb = .false. ! check the heat and salt budgets (T) or not (F) / !----------------------------------------------------------------------- &nam_diaharm ! Harmonic analysis of tidal constituents ('key_diaharm') !----------------------------------------------------------------------- nit000_han = 1 ! First time step used for harmonic analysis nitend_han = 75 ! Last time step used for harmonic analysis nstep_han = 15 ! Time step frequency for harmonic analysis tname(1) = 'M2' ! Name of tidal constituents tname(2) = 'K1' / !----------------------------------------------------------------------- &namdct ! transports through sections !----------------------------------------------------------------------- nn_dct = 15 ! time step frequency for transports computing nn_dctwri = 15 ! time step frequency for transports writing nn_secdebug = 112 ! 0 : no section to debug ! -1 : debug all section ! 0 < n : debug section number n / !!====================================================================== !! *** Observation & Assimilation namelists *** !!====================================================================== !! namobs observation and model comparison ('key_diaobs') !! nam_asminc assimilation increments ('key_asminc') !!====================================================================== ! !----------------------------------------------------------------------- &namobs ! observation usage switch ('key_diaobs') !----------------------------------------------------------------------- ln_t3d = .false. ! Logical switch for T profile observations ln_s3d = .false. ! Logical switch for S profile observations ln_ena = .false. ! Logical switch for ENACT insitu data set ln_cor = .false. ! Logical switch for Coriolis insitu data set ln_profb = .false. ! Logical switch for feedback insitu data set ln_sla = .false. ! Logical switch for SLA observations ln_sladt = .false. ! Logical switch for AVISO SLA data ln_slafb = .false. ! Logical switch for feedback SLA data ln_ssh = .false. ! Logical switch for SSH observations ln_sst = .false. ! Logical switch for SST observations ln_sstbias = .false. ! Logical switch for SST bias correction ln_grdsst = .false. ! Logical switch for gridded SST observations ln_ghrsst = .false. ! Logical switch for GHRSST observations ln_sstfb = .false. ! Logical switch for feedback SST data ln_sss = .false. ! Logical switch for SSS observations ln_seaice = .false. ! Logical switch for Sea Ice observations ln_vel3d = .false. ! Logical switch for velocity observations ln_velavcur= .false ! Logical switch for velocity daily av. cur. ln_velhrcur= .false ! Logical switch for velocity high freq. cur. ln_velavadcp = .false. ! Logical switch for velocity daily av. ADCP ln_velhradcp = .false. ! Logical switch for velocity high freq. ADCP ln_velfb = .false. ! Logical switch for feedback velocity data ln_grid_global = .false. ! Global distribtion of observations ln_grid_search_lookup = .false. ! Logical switch for obs grid search w/lookup table grid_search_file = 'grid_search' ! Grid search lookup file header ! All of the *files* variables below are arrays. Use namelist_cfg to add more files enactfiles = 'enact.nc' ! ENACT input observation file names (specify full array in namelist_cfg) coriofiles = 'corio.nc' ! Coriolis input observation file name profbfiles = 'profiles_01.nc' ! Profile feedback input observation file name ln_profb_enatim = .false ! Enact feedback input time setting switch slafilesact = 'sla_act.nc' ! Active SLA input observation file names slafilespas = 'sla_pass.nc' ! Passive SLA input observation file names slafbfiles = 'sla_01.nc' ! slafbfiles: Feedback SLA input observation file names sstfiles = 'ghrsst.nc' ! GHRSST input observation file names sstfbfiles = 'sst_01.nc' ! Feedback SST input observation file names seaicefiles = 'seaice_01.nc' ! Sea Ice input observation file names velavcurfiles = 'velavcurfile.nc' ! Vel. cur. daily av. input file name velhrcurfiles = 'velhrcurfile.nc' ! Vel. cur. high freq. input file name velavadcpfiles = 'velavadcpfile.nc' ! Vel. ADCP daily av. input file name velhradcpfiles = 'velhradcpfile.nc' ! Vel. ADCP high freq. input file name velfbfiles = 'velfbfile.nc' ! Vel. feedback input observation file name dobsini = 20000101.000000 ! Initial date in window YYYYMMDD.HHMMSS dobsend = 20010101.000000 ! Final date in window YYYYMMDD.HHMMSS n1dint = 0 ! Type of vertical interpolation method n2dint = 0 ! Type of horizontal interpolation method ln_nea = .false. ! Rejection of observations near land switch nmsshc = 0 ! MSSH correction scheme mdtcorr = 1.61 ! MDT correction mdtcutoff = 65.0 ! MDT cutoff for computed correction ln_altbias = .false. ! Logical switch for alt bias ln_ignmis = .false. ! Logical switch for ignoring missing files endailyavtypes = 820 ! ENACT daily average types - array (use namelist_cfg to set more values) ln_grid_global = .true. ln_grid_search_lookup = .false. grdsstname = "noset.nc" bias_file = "noset.nc" / !----------------------------------------------------------------------- &nam_asminc ! assimilation increments ('key_asminc') !----------------------------------------------------------------------- ln_bkgwri = .false. ! Logical switch for writing out background state ln_trainc = .false. ! Logical switch for applying tracer increments ln_dyninc = .false. ! Logical switch for applying velocity increments ln_sshinc = .false. ! Logical switch for applying SSH increments ln_asmdin = .false. ! Logical switch for Direct Initialization (DI) ln_asmiau = .false. ! Logical switch for Incremental Analysis Updating (IAU) nitbkg = 0 ! Timestep of background in [0,nitend-nit000-1] nitdin = 0 ! Timestep of background for DI in [0,nitend-nit000-1] nitiaustr = 1 ! Timestep of start of IAU interval in [0,nitend-nit000-1] nitiaufin = 15 ! Timestep of end of IAU interval in [0,nitend-nit000-1] niaufn = 0 ! Type of IAU weighting function ln_salfix = .false. ! Logical switch for ensuring that the sa > salfixmin salfixmin = -9999 ! Minimum salinity after applying the increments nn_divdmp = 0 ! Number of iterations of divergence damping operator / !----------------------------------------------------------------------- &namsbc_wave ! External fields from wave model !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_cdg = 'cdg_wave' , 1 , 'drag_coeff' , .true. , .false. , 'daily' , '' , '' , '' sn_usd = 'sdw_wave' , 1 , 'u_sd2d' , .true. , .false. , 'daily' , '' , '' , '' sn_vsd = 'sdw_wave' , 1 , 'v_sd2d' , .true. , .false. , 'daily' , '' , '' , '' sn_wn = 'sdw_wave' , 1 , 'wave_num' , .true. , .false. , 'daily' , '' , '' , '' cn_dir = './' ! root directory for the location of drag coefficient files / !----------------------------------------------------------------------- &namdyn_nept ! Neptune effect (simplified: lateral and vertical diffusions removed) !----------------------------------------------------------------------- ! Suggested lengthscale values are those of Eby & Holloway (1994) for a coarse model ln_neptsimp = .false. ! yes/no use simplified neptune ln_smooth_neptvel = .false. ! yes/no smooth zunep, zvnep rn_tslse = 1.2e4 ! value of lengthscale L at the equator rn_tslsp = 3.0e3 ! value of lengthscale L at the pole ! Specify whether to ramp down the Neptune velocity in shallow ! water, and if so the depth range controlling such ramping down ln_neptramp = .true. ! ramp down Neptune velocity in shallow water rn_htrmin = 100.0 ! min. depth of transition range rn_htrmax = 200.0 ! max. depth of transition range / !----------------------------------------------------------------------- &namsbc_wavepar ! namsbc_wavepar parameters from wave model (CCC not identical to namsbc_wave) !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_ust = 'ust' , 6 , 'ust' , .false. , .false. , 'monthly' , '' , '', '' sn_vst = 'vst' , 6 , 'vst' , .false. , .false. , 'monthly' , '' , '', '' sn_swh = 'swh' , 6 , 'swh' , .false. , .false. , 'monthly' , '' , '', '' sn_mwp = 'mwp' , 6 , 'mwp' , .false. , .false. , 'monthly' , '' , '', '' sn_wspd = 'wspd' , 6 , 'wspd' , .false. , .false. , 'monthly' , '' , '', '' sn_phioc = 'phioc' , 6 , 'phioc' , .false. , .false. , 'monthly' , '' , '', '' sn_tauoc = 'tauoc' , 6 , 'tauoc' , .false. , .false. , 'monthly' , '' , '', '' cn_dir_wavepar = './' ! root directory for the location of the ECWAM files / !----------------------------------------------------------------------- &namsbc_waveparlim !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_strn = 'istr' , 6 , 'icestrain' , .true. , .false. , 'monthly' , '' , '' cn_dir_waveparlim = './' ! root directory for the location of the ECWAM files / !----------------------------------------------------------------------- &namsbc_fwb ! namsbc_fwb Fresh water budget !----------------------------------------------------------------------- rd_fwb = 1. ! time scale to apply fwb correction (days) ikt_fwb = 1 ! freq (time steps) to estimate fwb nr_ssh = 0 ! 0 for global sl=0. 1/2 for external SL/Mass file cn_dir ='./' ! root directory for location of ssh file sn_ssh = 'ssh' , -1. , 'ssh' , .TRUE. , .TRUE. , 'yearly', '', '', '' rcap = 1. ! mm/day cap for FWB adjusment lfwbr = .false. / !----------------------------------------------------------------------- &namsbc_iif ! surface boundary condition for prescribed ice !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interpol. ! clim ! 'yearly' or ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! sn_ice = 'ice_cover' , 24 , 'ice_cov' , .false. , .false. , 'monthly', '', '' cn_dir = './' ! root for location of ice files dtice = 1. ! time scale for relaxation to sea-ice nn_ice_rel = 0 ! Use pseudo-ice treatment / !----------------------------------------------------------------------- &nambias ! Parameters for bias corrections #ifdef key_bias) !----------------------------------------------------------------------- ln_bias = .FALSE. ! activate bias correction ln_bias_asm = .FALSE. ! use assim bias ln_bias_rlx = .FALSE. ! use clim-relax bias ln_bias_ofl = .FALSE. ! use off-line bias ln_bias_ts_app= .TRUE. ! apply bias to Temp/Sal directly ln_bias_pc_app= .TRUE. ! apply bias to pressure gradient cn_bias_tot = 'bias_tot.nc' !file name with bias file (restart) cn_bias_asm = 'bias_asm.nc' !file name " " from assim ! dir and structures for offline bias (using fldread conventions) cn_dir = './' sn_tbias_ofl= 'tbias_ofl', -1,'tbias', .true., .true., 'yearly','' sn_sbias_ofl= 'sbias_ofl', -1,'sbias', .true., .true., 'yearly','' bias_time_unit_asm = 1 ! time unit of asm bias fb_t_asm = 0.02 ! partition of total bias for T/S fb_t_rlx = 1. ! " " " " in T/S fb_t_ofl = .1 fb_p_rlx = 1. fb_p_asm = 0.3 fb_p_ofl = 1. nn_inertial = 0 ! 0/1/2 0/sin(lat)**2/gausian gphit0 = 10. !length for guassian tappering fctamp = 10. eft_rlx = 1800. ! efolding time for rlx bias estimation eft_asm = 1800. ! efolding time for asm bias estimation 5y t_rlx_upd = 0.05 ! update fct rlx bias " (0. -> 1.) t_asm_upd = 0.05 ! update fct assim bias " (0. -> 1.) lrst_biasr = .FALSE. !force to read bias file at first time step capN2val = -1 !if larger than 0, cap N2 min val (~1.e-6) / !----------------------------------------------------------------------- &namsbc_prt ! perturbations to forcing (MAB 2014) !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_putau = 'putau' , 24 , 'utau' , .false. , .false., 'monthly' , '' , '', '' sn_pvtau = 'pvtau' , 24 , 'vtau' , .false. , .false., 'monthly' , '' , '', '' sn_pqns = 'pqns' , 24 , 'qns' , .false. , .false., 'monthly' , '' , '', '' sn_pqsr = 'pqsr' , 24 , 'qsr' , .false. , .false., 'monthly' , '' , '', '' sn_pemp = 'pemp' , 24 , 'emp' , .false. , .false., 'monthly' , '' , '', '' nn_putau = 0 nn_pvtau = 0 nn_pqns = 0 nn_pqsr = 0 nn_pemp = 0 cn_dir = './' ! root directory for the location of the pert files / eof_namelist if [[ ${ICEMOD:-0} = 3 ]]; then cat >namelist_ice_ref<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !! LIM3 namelist : !! 1 - Generic parameters (namicerun) !! 2 - Ice initialization (namiceini) !! 3 - Ice discretization (namiceitd) !! 4 - Ice dynamics and transport (namicedyn) !! 5 - Ice thermodynamics (namicethd) !! 6 - Ice salinity (namicesal) !! 7 - Ice mechanical redistribution (namiceitdme) !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ! !------------------------------------------------------------------------------ &namicerun ! Generic parameters !------------------------------------------------------------------------------ jpl = 5 ! number of ice categories nlay_i = 2 ! number of ice layers nlay_s = 1 ! number of snow layers (only 1 is working) cn_icerst_in = "restart_ice" ! suffix of ice restart name (input) cn_icerst_indir = "." ! directory from which to read input ice restarts cn_icerst_out = "restart_ice" ! suffix of ice restart name (output) cn_icerst_outdir = "." ! directory in which to write output ice restarts ln_limdyn = .true. ! ice dynamics (T) or thermodynamics only (F) rn_amax_n = 0.999 ! maximum tolerated ice concentration NH rn_amax_s = 0.999 ! maximum tolerated ice concentration SH ln_limdiahsb = .false. ! check the heat and salt budgets (T) or not (F) ln_limdiaout = .true. ! output the heat and salt budgets (T) or not (F) ln_icectl = .false. ! ice points output for debug (T or F) iiceprt = 10 ! i-index for debug jiceprt = 10 ! j-index for debug / !------------------------------------------------------------------------------ &namiceini ! Ice initialization !------------------------------------------------------------------------------ ln_iceini = .true. ! activate ice initialization (T) or not (F) rn_thres_sst = 2.0 ! maximum water temperature with initial ice (degC) rn_hts_ini_n = 0.3 ! initial real snow thickness (m), North rn_hts_ini_s = 0.3 ! " " South rn_hti_ini_n = 3.0 ! initial real ice thickness (m), North rn_hti_ini_s = 1.0 ! " " South rn_ati_ini_n = 0.9 ! initial ice concentration (-), North rn_ati_ini_s = 0.9 ! " " South rn_smi_ini_n = 6.3 ! initial ice salinity (g/kg), North rn_smi_ini_s = 6.3 ! " " South rn_tmi_ini_n = 270. ! initial ice/snw temperature (K), North rn_tmi_ini_s = 270. ! " " South / !------------------------------------------------------------------------------ &namiceitd ! Ice discretization !------------------------------------------------------------------------------ nn_catbnd = 2 ! computation of ice category boundaries based on ! 1: tanh function ! 2: h^(-alpha), function of rn_himean rn_himean = 2.0 ! expected domain-average ice thickness (m), nn_catbnd = 2 only / !------------------------------------------------------------------------------ &namicedyn ! Ice dynamics and transport !------------------------------------------------------------------------------ nn_icestr = 0 ! ice strength parameteriztaion ! 0: Hibler_79 P = pstar**exp(-c_rhg*A) ! 1: Rothrock_75 P = Cf*coeff*integral(wr.h^2) ln_icestr_bvf = .false. ! ice strength function brine volume (T) or not (F) rn_pe_rdg = 17.0 ! ridging work divided by pot. energy change in ridging, if nn_icestr = 1 rn_pstar = 2.0e+04 ! ice strength thickness parameter (N/m2), nn_icestr = 0 rn_crhg = 20.0 ! ice strength conc. parameter (-), nn_icestr = 0 rn_cio = 5.0e-03 ! ice-ocean drag coefficient (-) rn_creepl = 1.0e-12 ! creep limit (s-1) rn_ecc = 2.0 ! eccentricity of the elliptical yield curve nn_nevp = 120 ! number of EVP subcycles rn_relast = 0.333 ! ratio of elastic timescale to ice time step: Telast = dt_ice * rn_relast ! advised value: 1/3 (rn_nevp=120) or 1/9 (rn_nevp=300) / !------------------------------------------------------------------------------ &namicehdf ! Ice horizontal diffusion !------------------------------------------------------------------------------ nn_ahi0 = -1 ! horizontal diffusivity computation ! -1: no diffusion (bypass limhdf) ! 0: use rn_ahi0_ref ! 1: use rn_ahi0_ref x mean grid cell length / ( 2deg mean grid cell length ) ! 2: use rn_ahi0_ref x grid cell length / ( 2deg mean grid cell length ) rn_ahi0_ref = 350.0 ! horizontal sea ice diffusivity (m2/s) ! if nn_ahi0 > 0, rn_ahi0_ref is the reference value at a nominal 2 deg resolution nn_convfrq = 5 ! convergence check frequency of the Crant-Nicholson scheme (perf. optimization) / !------------------------------------------------------------------------------ &namicethd ! Ice thermodynamics !------------------------------------------------------------------------------ rn_hnewice = 0.1 ! thickness for new ice formation in open water (m) ln_frazil = .false. ! use frazil ice collection thickness as a function of wind (T) or not (F) rn_maxfrazb = 1.0 ! maximum fraction of frazil ice collecting at the ice base rn_vfrazb = 0.417 ! thresold drift speed for frazil ice collecting at the ice bottom (m/s) rn_Cfrazb = 5.0 ! squeezing coefficient for frazil ice collecting at the ice bottom rn_himin = 0.10 ! minimum ice thickness (m) used in remapping, must be smaller than rn_hnewice rn_betas = 0.66 ! exponent in lead-ice repratition of snow precipitation ! betas = 1 -> equipartition, betas < 1 -> more on leads rn_kappa_i = 1.0 ! radiation attenuation coefficient in sea ice (m-1) nn_conv_dif = 50 ! maximal number of iterations for heat diffusion computation rn_terr_dif = 0.0001 ! maximum temperature after heat diffusion (degC) nn_ice_thcon= 1 ! sea ice thermal conductivity ! 0: k = k0 + beta.S/T (Untersteiner, 1964) ! 1: k = k0 + beta1.S/T - beta2.T (Pringle et al., 2007) rn_cdsn = 0.31 ! thermal conductivity of the snow (0.31 W/m/K, Maykut and Untersteiner, 1971) ! Obs: 0.1-0.5 (Lecomte et al, JAMES 2013) nn_monocat = 0 ! virtual ITD mono-category parameterizations (1, jpl = 1 only) or not (0) ! 2: simple piling instead of ridging --- temporary option ! 3: activate G(he) only --- temporary option ! 4: activate lateral melting only --- temporary option ln_it_qnsice = .true. ! iterate the surface non-solar flux with surface temperature (T) or not (F) / !------------------------------------------------------------------------------ &namicesal ! Ice salinity !------------------------------------------------------------------------------ nn_icesal = 2 ! ice salinity option ! 1: constant ice salinity (S=rn_icesal) ! 2: varying salinity parameterization S(z,t) ! 3: prescribed salinity profile S(z), Schwarzacher, 1959 rn_icesal = 4. ! ice salinity (g/kg, nn_icesal = 1 only) rn_sal_gd = 5. ! restoring ice salinity, gravity drainage (g/kg) rn_time_gd = 1.73e+6 ! restoring time scale, gravity drainage (s) rn_sal_fl = 2. ! restoring ice salinity, flushing (g/kg) rn_time_fl = 8.64e+5 ! restoring time scale, flushing (s) rn_simax = 20. ! maximum tolerated ice salinity (g/kg) rn_simin = 0.1 ! minimum tolerated ice salinity (g/kg) / !------------------------------------------------------------------------------ &namiceitdme ! Ice mechanical redistribution (ridging and rafting) !------------------------------------------------------------------------------ rn_Cs = 0.5 ! fraction of shearing energy contributing to ridging rn_fsnowrdg = 0.5 ! snow volume fraction that survives in ridging rn_fsnowrft = 0.5 ! snow volume fraction that survives in rafting nn_partfun = 1 ! type of ridging participation function ! 0: linear (Thorndike et al, 1975) ! 1: exponential (Lipscomb, 2007 rn_gstar = 0.15 ! fractional area of thin ice being ridged (nn_partfun = 0) rn_astar = 0.05 ! exponential measure of ridging ice fraction (nn_partfun = 1) rn_hstar = 100.0 ! determines the maximum thickness of ridged ice (m) (Hibler, 1980) ln_rafting = .true. ! rafting activated (T) or not (F) rn_hraft = 0.75 ! threshold thickness for rafting (m) rn_craft = 5.0 ! squeezing coefficient used in the rafting function rn_por_rdg = 0.3 ! porosity of newly ridged ice (Lepparanta et al., 1995) / eof_namelist else cat >namelist_ice_ref<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !! NEMO/LIM-2 : 1 - dynamics/advection/thermo (namicerun) !! namelists 2 - ice intialisation (namiceini) !! 3 - ice dynamic (namicedyn) !! 4 - ice advection (namicetrp) !! 5 - thermodynamic (namicethd) !! 6 - ice damping (namice_dmp) !! 7 - ice diagnostics (namicedia) !! 8 - ice outputs (namiceout) !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !----------------------------------------------------------------------- &namicerun ! Share parameters for dynamics/advection/thermo !----------------------------------------------------------------------- cn_icerst_in = "restart_ice_in" ! suffix of ice restart name (input) cn_icerst_indir = "." ! directory from which to read input ice restarts cn_icerst_out = "restart_ice" ! suffix of ice restart name (output) cn_icerst_outdir = "." ! directory in which to write output ice restarts ln_limdyn = .true. ! ice dynamics (T) or thermodynamics only (F) ln_limdmp = .false. ! restoring ice thickness and fraction leads (T => fill namice_dmp) acrit = 1.0e-06 , 1.0e-06 ! minimum lead fraction in the Northern & Southern Hemispheres hsndif = 0.e0 ! computation of temperature in snow (=0.0) or not hicdif = 0.e0 ! computation of temperature in ice (=0.0) or not (=9999.0) / !----------------------------------------------------------------------- &namiceini ! ice initialisation !----------------------------------------------------------------------- ln_limini = .false. ! read the initial state in 'Ice_initialization.nc' (T) or not (F) ttest = 2.0 ! threshold water temperature for initial sea ice hninn = 0.5 ! initial snow thickness in the north hginn = 3.0 ! initial ice thickness in the north alinn = 0.05 ! initial leads area in the north hnins = 0.1 ! same three parameter in the south hgins = 1.0 ! " " south alins = 0.1 ! " " south / !----------------------------------------------------------------------- &namicedyn ! ice dynamic !----------------------------------------------------------------------- epsd = 1.0e-20 ! tolerance parameter alpha = 0.5 ! coefficient for semi-implicit coriolis dm = 0.6e+03 ! diffusion constant for dynamics nbiter = 1 ! number of sub-time steps for relaxation nbitdr = 100 ! maximum number of iterations for relaxation om = 0.5 ! relaxation constant resl = 5.0e-05 ! maximum value for the residual of relaxation cw = 5.0e-03 ! drag coefficient for oceanic stress angvg = 0.0 ! turning angle for oceanic stress pstar = 1.0e+04 ! 1st bulk-rheology parameter c_rhg = 20.0 ! 2nd bulk-rhelogy parameter etamn = 0.0e+07 ! minimun value for viscosity rn_creepl = 1.0e-08 ! creep limit rn_ecc = 2.0 ! eccentricity of the elliptical yield curve ahi0 = 350.e0 ! horizontal eddy diffusivity coefficient for sea-ice [m2/s] nn_nevp = 120 ! number of EVP subcycling iterations telast = 9600 ! timescale for EVP elastic waves alphaevp = 1.0 ! coefficient for the solution of EVP int. stresses / !----------------------------------------------------------------------- &namicetrp ! ice transport !----------------------------------------------------------------------- bound = 0.0 ! boundary conditions (=0. no-slip, =1. free-slip) / !----------------------------------------------------------------------- &namicethd ! ice thermodynamic !----------------------------------------------------------------------- hmelt = -0.15 ! maximum melting at the bottom hiccrit = 0.3 , 0.3 ! ice thickness for lateral accretion in the Northern (Southern) Hemisphere ! ! (caution 1.0, 1.0 best value to be used!!! (gilles G.)) hicmin = 0.2 ! ice thickness corr. to max. energy stored in brine pocket hiclim = 0.05 ! minimum ice thickness amax = 0.999 ! maximum lead fraction swiqst = 1. ! energy stored in brine pocket (=1) or not (=0) sbeta = 1. ! numerical caracteritic of the scheme for diffusion in ice ! Cranck-Nicholson (=0.5), implicit (=1), explicit (=0) parlat = 0.0 ! percentage of energy used for lateral ablation hakspl = 0.5 ! slope of distr. for Hakkinen-Mellor's lateral melting hibspl = 0.5 ! slope of distribution for Hibler's lateral melting exld = 2.0 ! exponent for leads-closure rate hakdif = 1.0 ! coefficient for diffusions of ice and snow thth = 0.2 ! threshold thickness for comp. of eq. thermal conductivity hnzst = 0.1 ! thickness of the surf. layer in temp. computation parsub = 1.0 ! switch for snow sublimation or not alphs = 1.0 ! coefficient for snow density when snow ice formation / !----------------------------------------------------------------------- &namice_dmp ! damping of sea ice alone open boundaries ! ! (hard coded damping area: check if it fit your config) !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_hicif = 'ice_damping' , -1. , 'hicif' , .true. , .true. , 'yearly' , '' , '' , '' sn_frld = 'ice_damping' , -1. , 'frld' , .true. , .true. , 'yearly' , '' , '' , '' ! cn_dir = './' ! root directory for the location of the runoff files / !----------------------------------------------------------------------- &namicedia ! ice diagnostics !----------------------------------------------------------------------- fmtinf = '1PE13.5' ! format of the output values nfrinf = 4 ! number of variables written in one line ntmoy = 1 ! instantaneous values of ice evolution or averaging ninfo = 1 ! frequency of ouputs on file ice_evolu in case of averaging / !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' &namiceout ! parameters for outputs !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ! ! title of the field ! name ! units ! save ! multipl. ! additive ! ! ! ! ! ! or not ! factor ! factor ! field_1 = 'Snow thickness ', 'isnowthi', 'm ', 1 , 1.0 , 0.0 field_2 = 'Ice thickness ', 'iicethic', 'm ', 1 , 1.0 , 0.0 field_3 = 'Ice produced ', 'iiceprod', 'm/kt ', 1 , 1.0 , 0.0 field_4 = 'Ice concentration ', 'ileadfra', 'Fraction', 1 , -1.0 , 1.0 field_5 = 'Ice temperature ', 'iicetemp', 'C ', 1 , 1.0 , -273.15 field_6 = 'Oceanic flux at the ice base ', 'ioceflxb', 'w/m2 ', 1 , 1.0 , 0.0 field_7 = 'Ice velocity u ', 'iicevelu', 'm/s ', 0 , 1.0 , 0.0 field_8 = 'Ice velocity v ', 'iicevelv', 'm/s ', 0 , 1.0 , 0.0 field_9 = 'Sea surface temperature ', 'isstempe', 'C ', 1 , 1.0 , 0.0 field_10 = 'Sea surface salinity ', 'isssalin', 'PSU ', 1 , 1.0 , 0.0 field_11 = 'Total flux at ocean surface ', 'iocetflx', 'w/m2 ', 1 , 1.0 , 0.0 field_12 = 'Solar flux at ocean surface ', 'iocesflx', 'w/m2 ', 1 , 1.0 , 0.0 field_13 = 'Non-solar flux at ocean surface ', 'iocwnsfl', 'w/m2 ', 1 , 1.0 , 0.0 field_14 = 'Salt flux at ocean surface ', 'iocesafl', 'kg/m2/kt', 1 , 1.0 , 0.0 field_15 = 'Wind stress u ', 'iocestru', 'Pa ', 0 , 1.0 , 0.0 field_16 = 'Wind stress v ', 'iocestrv', 'Pa ', 0 , 1.0 , 0.0 field_17 = 'Solar flux at ice/ocean surface ', 'iicesflx', 'w/m2 ', 1 , 1.0 , 0.0 field_18 = 'Non-solar flux at ice/ocean surface', 'iicenflx', 'w/m2 ', 1 , 1.0 , 0.0 field_19 = 'Snow precipitation ', 'isnowpre', 'kg/day ', 1 , 1.0 , 0.0 field_20 = '1st Qsr fraction penetrating ice ', 'iifr1_i0', '- ', 1 , 1.0 , 0.0 field_21 = '2nd Qsr fraction penetrating ice ', 'iifr2_i0', '- ', 1 , 1.0 , 0.0 field_22 = 'Ice velocity u ', 'iicevelu', 'm/s ', 1 , 1.0 , 0.0 field_23 = 'Ice velocity v ', 'iicevelv', 'm/s ', 1 , 1.0 , 0.0 field_24 = 'Wind stress u ', 'iocestru', 'Pa ', 1 , 1.0 , 0.0 field_25 = 'Wind stress v ', 'iocestrv', 'Pa ', 1 , 1.0 , 0.0 field_26 = 'Surface temperature (snow/ice/sst) ', 'isrftemp', 'C ', 1 , 1.0 , 0.0 field_27 = 'Ice mean thickness ', 'iicemthi', 'm ', 1 , 1.0 , 0.0 field_28 = 'Temp inside the ice/snow layer 1 ', 'iitempl1', 'C ', 1 , 1.0 , -273.15 field_29 = 'Temp inside the ice/snow layer 2 ', 'iitempl2', 'C ', 1 , 1.0 , -273.15 field_30 = 'Temp inside the ice/snow layer 3 ', 'iitempl3', 'C ', 1 , 1.0 , -273.15 ! noumef = ${LIMNOUMEF:-30} ! number of fields climoutpath = "${OCEOUTPATH:-./}" ln_nc4zip_lim = ${LIMOUTNC4:-false} ! netCDF4 for output / eof_namelist fi if [[ ${ICEMOD:-0} = 3 ]]; then if [[ $NEMOCOUPLED = 1 ]] ;then NN_NAM_LIMFLX=${NN_NAM_LIMFLX:-2} fi fi # Configuration namelsits # Consistency checks + SMS if [[ ${OUT_GRID}_Z${OUT_LEVELS} = "ORCA1_Z42" ]]; then NAM_LN_SMSLABEL=${NAM_LN_SMSLABEL:=.false.} NAM_NN_SMSFREQ=${NAM_NN_SMSFRQ:=24} cat >namelist_cfg<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !! NEMO/OPA Configuration namelist : used to overwrite defaults values defined in SHARED/namelist_ref !!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ! !----------------------------------------------------------------------- &namrun ! parameters of the run !----------------------------------------------------------------------- nn_no = $NCYC ! job number cn_exp = "$EXPVER" ! experience name nn_it000 = $NIT000 ! first time step nn_itend = $NITEND ! last time step (std 5475) nn_date0 = $NDATE0 ! initial calendar date yymmdd (used if nn_rstctl=1 nn_time0 = $NTIME0 ! initial calendar time in hours ln_usetime = $LNUSETIME ln_rstart = $LN_RESTART ! start from rest (F) or from a restart file (T) cn_ocerst_indir = "${RESTARTSDIR:-.}" ! directory from which to read input ocean restarts cn_ocerst_outdir = "${CN_OCERST_OUT_PATH:-./}" nn_stock = $NSTOCK ! frequency of creation of a restart file (modulo rerenced to 1) nn_write = $OUTFREQ ! frequency of write in the output file (modulo re) nn_leapy = 1 ! Leap year calendar (1) or not (0) nn_rstctl = 0 ! restart control ==> activated only if ln_rstart=T ! = 0 nn_date0 read in namelist ; nn_it000 : read in namelist ! = 1 nn_date0 read in namelist ; nn_it000 : check consistancy between namelist and restart ! = 2 nn_date0 read in restart ; nn_it000 : check consistancy between namelist and restart nn_slimrst = $NSLIMRST ! option of slim restart output (0:full; 1:nowfields+tke+sbc; 2:nowfields+sbc+en; 3:nowfields only) nn_slimrstin = ${NSLIMRSTIN:-0} ! Force slim restart on input ln_rsttime = ${LN_RSTTIME:-.true.} ! Use time in restart output names rather than time steps ln_writerst = ${LNWRITERST:-.true.} nn_itout = ${NITOUT:-$NIT000} nn_itfile = ${NAM_NN_ITFILE:=-1} ln_rcf_write = ${NEMO_LN_RCF_WRITE:-.false.} ln_rcf_read = ${NEMO_LN_RCF_READ:-.false.} ln_clobber = .true. / !----------------------------------------------------------------------- &namcfg ! parameters of the configuration !----------------------------------------------------------------------- cp_cfg = "orca" ! name of the configuration cp_cfz = "normal" ! zoom jp_cfg = 1 ! resolution of the configuration jpidta = 362 ! 1st lateral dimension ( >= jpi ) jpjdta = 292 ! 2nd " " ( >= jpj ) jpkdta = 42 ! number of levels ( >= jpk ) jpiglo = 362 ! 1st dimension of global domain --> i =jpidta jpjglo = 292 ! 2nd - - --> j =jpjdta jpizoom = 1 ! left bottom (i,j) indices of the zoom jpjzoom = 1 ! in data domain indices jperio = 6 ! lateral cond. type (between 0 and 6) ln_trabbl = .true. ! key_trabbl set nn_ldfdyn = 3 ! key_dynldf_c3d / !----------------------------------------------------------------------- &namzgr ! vertical coordinate !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namdom ! space and time domain (bathymetry, mesh, timestep) !----------------------------------------------------------------------- nn_msh = 0 ! create (=1) a mesh file or not (=0) rn_hmin = -3. ! min depth of the ocean (>0) or min number of ocean level (<0) rn_e3zps_min= 20. ! partial step thickness is set larger than the minimum of rn_e3zps_rat= 0.1 ! rn_e3zps_min and rn_e3zps_rat*e3t, with 0 fill namsbc_flx ) ln_blk_core = $NAM_LN_BLK ! CORE bulk formulation (T => fill namsbc_core) nn_ice = $NAM_NN_ICE ! =0 no ice boundary condition , ! =1 use observed ice-cover , ! =2 ice-model used ("key_ ln_blk = $NAM_LN_BLK_ALGO nn_hbp = 1 ln_cdgw = ${NAM_LN_CDWW:-false} ! Neutral drag coefficient read from wave model ln_stcor = ${NAM_LN_STCOR:-false} ! Stokes drift read from wave model ln_wavetke = ${NAM_LN_WAVETKE:-false} ! TKE wave parameters read from wave model ln_tauoc = ${NAM_LN_TAUOC:-false} ! Wave-modified stress from wave model ln_wbrsource = ${NAM_LN_WBRSOURCE:-false} ! TKE from wave breaking as source function ln_pert = ${NAM_LNREAD_PERT:-false} ! Option to read surf pert ln_wicestrn = ${NAM_LN_WICESTRN:-false} ln_wave = .true. nn_fwb = ${NN_FWB} nn_limflx = ${NN_NAM_LIMFLX:-"-1"} / !----------------------------------------------------------------------- &namsbc_core ! namsbc_core CORE bulk formulae !----------------------------------------------------------------------- ln_cldcov = ${LNBULKCLD:-.false.} sn_wndi = 'u10' , ${FREQAN:-6} , 'u10' , .false. , .false. , 'monthly' , '' , '' sn_wndj = 'v10' , ${FREQAN:-6} , 'v10' , .false. , .false. , 'monthly' , '' , '' sn_qsr = 'accum' , ${FREQFC:-24} , 'swdn' , .false. , .false. , 'monthly' , '' , '' sn_qlw = 'accum' , ${FREQFC:-24} , 'lwdn' , .false. , .false. , 'monthly' , '' , '' sn_tair = 'qtml' , ${FREQAN:-6} , 't10' , .false. , .false. , 'monthly' , '' , '' sn_humi = 'qtml' , ${FREQAN:-6} , 'q10' , .false. , .false. , 'monthly' , '' , '' sn_prec = 'accum' , ${FREQFC:-24} , 'precip' , .false. , .false. , 'monthly' , '' , '' sn_snow = 'accum' , ${FREQFC:-24} , 'snow' , .false. , .false. , 'monthly' , '' , '' sn_ccov = '${CLDCOVTYP:-tcc}', ${FREQAN:-6} , '${CLDCOVTYP:-tcc}', .false. , .false. ,'yearly' , '' , '' , '' ln_cdec = ${NAM_LN_CDEC:-true} ! Switch to ECMWF drag rn_vfac = ${NAM_RN_RRELWIND:-1.0} / !----------------------------------------------------------------------- &namsbc_blk ! namsbc_blk generic Bulk formula (ln_blk = T) !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_wndi = 'u10' , ${FREQAN:-6} , 'u10' , .false. , .false. , 'monthly' , '' , '' sn_wndj = 'v10' , ${FREQAN:-6} , 'v10' , .false. , .false. , 'monthly' , '' , '' sn_qsr = 'accum' , ${FREQFC:-24} , 'swdn' , .false. , .false. , 'monthly' , '' , '' sn_qlw = 'accum' , ${FREQFC:-24} , 'lwdn' , .false. , .false. , 'monthly' , '' , '' sn_tair = 'qtml' , ${FREQAN:-6} , 't10' , .false. , .false. , 'monthly' , '' , '' sn_humi = 'qtml' , ${FREQAN:-6} , 'q10' , .false. , .false. , 'monthly' , '' , '' sn_prec = 'accum' , ${FREQFC:-24} , 'precip' , .false. , .false. , 'monthly' , '' , '' sn_snow = 'accum' , ${FREQFC:-24} , 'snow' , .false. , .false. , 'monthly' , '' , '' sn_slp = 'slp' , ${FREQAN:-6} , 'slp' , .false. , .false. , 'monthly' , '' , '' ! ! bulk algorithm : ln_ECMWF = .true. ! "ECMWF" algorithm (IFS cycle 31) ! / !----------------------------------------------------------------------- &namtra_qsr ! penetrative solar radiation !----------------------------------------------------------------------- ln_qsr_rgb = $QSRRGB ! RGB (Red-Green-Blue) light penetration ln_qsr_2bd = $QSR2BD ! 2 bands light penetration nn_chldta = $CHLTYPE ! RGB : Chl data (=1) or cst value (=0) / !----------------------------------------------------------------------- &namsbc_rnf ! runoffs namelist surface boundary condition !----------------------------------------------------------------------- sn_rnf = 'runoff_1m_nomask', -1 , 'sorunoff', .true. , .true. , 'yearly' , '' , '' sn_cnf = 'runoff_1m_nomask', 0 , 'socoefr', .false. , .true. , 'yearly' , '' , '' rn_hrnf = 15.e0 ! depth over which enhanced vertical mixing is used rn_avt_rnf = 1.e-4 ! value of the additional vertical mixing coef. [m2/s] / !----------------------------------------------------------------------- &namsbc_ssr ! surface boundary condition : sea surface restoring !----------------------------------------------------------------------- sn_sst = $SSTDMPFILE, '' sn_sss = 'sss' , -1 , 'sss' , .true. , .true. , 'yearly' , '' , '' cn_dir = './' ! root directory for the location of the runoff files nn_sstr = $NAM_NN_SSTR ! add a retroaction term in the surface heat ! flux (=1 1TS; =2 2TS; =3 3TS ) or not (=0) nn_sssr = 2 ! add a damping term in the surface freshwater flux (=2) ! or to SSS only (=1) or no damping term (=0) rn_dqdt = $DQDT0 ! magnitude of the retroaction on temperature [W/m2/K] rn_dqdt1 = $DQDT1 ! magnitude of the retroaction on temperature [W/m2/K] 1st TS rn_dqdt2 = $DQDT2 ! magnitude of the retroaction on temperature [W/m2/K] 2nd TS rn_dqdt3 = $DQDT3 ! magnitude of the retroaction on temperature [W/m2/K] 3rd TS rn_deds = $DEDS0 ! magnitude of the damping on salinity [mm/day] lgth_2ts = $RML ! window for 2ts rlx running mean lgth_3ts = $RML1 ! window for 3rd ts rlx ln_sssr_bnd = .true. ! flag to bound erp term (associated with nn_sssr=2) rn_sssr_bnd = 4.e0 ! ABS(Max/Min) value of the damping erp term [mm/day] dqdt_limice = 0.1 ! restoring factors under ice [ratio of dqdt] / !----------------------------------------------------------------------- &namsbc_alb ! albedo parameters !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namberg ! iceberg parameters !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namlbc ! lateral momentum boundary condition !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namcla ! cross land advection !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &nambfr ! bottom friction !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &nambbc ! bottom temperature boundary condition !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &nambbl ! bottom boundary layer scheme !----------------------------------------------------------------------- rn_ahtbbl = 0. ! lateral mixing coefficient in the bbl [m2/s] / !----------------------------------------------------------------------- &nameos ! ocean physical parameters !----------------------------------------------------------------------- nn_eos=0 ln_useCT=.false. / !----------------------------------------------------------------------- &namtra_adv ! advection scheme for tracer !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namtra_adv_mle ! mixed layer eddy parametrisation (Fox-Kemper param) !----------------------------------------------------------------------- ln_mle = ${NAM_LN_MLE:-.true.} ! (T) use the Mixed Layer Eddy (MLE) parameterisation / !----------------------------------------------------------------------- &namtra_adv_mle ! mixed layer eddy parametrisation (Fox-Kemper param) !----------------------------------------------------------------------- / !---------------------------------------------------------------------------------- &namtra_ldf ! lateral diffusion scheme for tracers !---------------------------------------------------------------------------------- rn_aeiv_0 = 1000.0 ! eddy induced velocity coefficient [m2/s] (require "key_traldf_eiv") rn_aht_0 = 1000.0 ! horizontal eddy diffusivity for tracers [m2/s] rn_ahtb_0 = 0. ! background eddy diffusivity for ldf_iso [m2/s] / !----------------------------------------------------------------------- &namtra_dmp ! tracer: T & S newtonian damping !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namdyn_adv ! formulation of the momentum advection !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namdyn_vor ! option of physics/algorithm (not control by CPP keys) !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namdyn_hpg ! Hydrostatic pressure gradient option !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namdyn_ldf ! lateral diffusion on momentum !----------------------------------------------------------------------- rn_ahm_0_lap = 10000.0 ! horizontal laplacian eddy viscosity [m2/s] rn_ahm_0_lap_eq = 2000.0 ! horizontal laplacian eddy viscosity [m2/s]??? rn_ahmb_0 = 0. ! background eddy viscosity for ldf_iso [m2/s] rn_ahm_0_blp = 0. ! horizontal bilaplacian eddy viscosity [m4/s] / / !----------------------------------------------------------------------- &namzdf ! vertical physics !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namzdf_tke ! turbulent eddy kinetic dependent vertical diffusion ("key_zdftke") !----------------------------------------------------------------------- rn_ediff = ${NAM_RN_EDIFF:-0.1} ! coef. for vertical eddy coef. (avt=rn_ediff*mxl*sqrt(e) ) rn_ediss = ${NAM_RN_EDISS:-0.7} ! coef. of the Kolmogoroff dissipation rn_ebb = ${NAM_RN_EBB:-67.83} ! coef. of the surface input of tke (=67.83 suggested when ln_mxl0=T) ln_ebbice = ${NAM_LN_EBBICE:-true} ! modify tke surface input under ice (F) rn_ebbice = ${NAM_RN_EBBICE:-20} ! coef. of the surface input of tke under ice rn_emin = 1.e-6 ! minimum value of tke [m2/s2] rn_emin0 = 1.e-4 ! surface minimum value of tke [m2/s2] nn_mxl = ${NAM_NN_MXL:-3} ! mixing length: = 0 bounded by the distance to surface and bottom ! = 1 bounded by the local vertical scale factor ! = 2 first vertical derivative of mixing length bounded by 1 ! = 3 as =2 with distinct disspipative an mixing length scale nn_pdl = ${NAM_NN_PDL:-1} ! Prandtl number function of richarson number (=1, avt=pdl(Ri)*avm) or not (=0, avt=avm) ln_mxl0 = .true. ! surface mixing length scale = F(wind stress) (T) or not (F) rn_mxl0 = 0.04 ! surface buoyancy lenght scale minimum value ln_lc = .true. ! Langmuir cell parameterisation (Axell 2002) rn_lc = 0.15 ! coef. associated to Langmuir cells nn_etau = ${NAM_NN_ETAU:-1} ! penetration of tke below the mixed layer (ML) due to internal & intertial waves ! = 0 no penetration ! = 1 add a tke source below the ML ! = 2 add a tke source just at the base of the ML ! = 3 as = 1 applied on HF part of the stress ("key_coupled") rn_efr = ${NAM_RN_EFR:-0.05} ! fraction of surface tke value which penetrates below the ML (nn_etau=1 or 2) nn_htau = ${NAM_NN_HTAU:-1} ! type of exponential decrease of tke penetration below the ML ! = 0 constant 10 m length scale ! = 1 0.5m at the equator to 30m poleward of 40 degrees ! = 3 proportional to SWH rn_whtauscl = ${NAM_RN_WHTAUSCL:-4} ! SWH scalign for htau=3 rn_whtaumin = ${NAM_RN_WHTAUMIN:-1} ! minimum htau (nn_htau=3) rn_delta_0 = ${NAM_RN_DELTA_0:-0.19} ! Strength of background diffusion rn_alpha_m = ${NAM_RN_ALPHA_M:-1.} rn_alpha_h = ${NAM_RN_ALPHA_H:-1.4} rn_beta_m = ${NAM_RN_BETA_M:-14.} rn_beta_h = ${NAM_RN_BETA_H:-11.2} / !----------------------------------------------------------------------- &namzdf_ddm ! double diffusive mixing parameterization ("key_zdfddm") !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namzdf_tmx ! tidal mixing parameterization ("key_zdftmx") !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namsol ! elliptic solver / island / free surface !----------------------------------------------------------------------- nn_nmax = 2000 ! maximum of iterations for the SOR solver / !----------------------------------------------------------------------- &nammpp ! Massively Parallel Processing ("key_mpp_mpi) !----------------------------------------------------------------------- ln_nnogather= ${NNOGATHER:-.true.} ! activate code to avoid mpi_allgather use at the northfold ln_lbcmap = ${LBCMAP:-false} / !----------------------------------------------------------------------- &namctl ! Control prints & Benchmark !----------------------------------------------------------------------- nn_timing = ${NN_TIMING:-1} ! timing by routine activated (=1) creates timing.output file, or not (=0) ln_sglread = ${NAM_LN_SGLREAD:-.true.} ln_sglwrite = ${LNSGLWRITE:-.false.} ln_timeout = .true. ! Alternative time.step format. ln_smslabel= $NAM_LN_SMSLABEL ! Communicate with SMS. cn_smslabel = "${CN_SMSLABEL:-xlabel}" nn_smsfrq = $NAM_NN_SMSFRQ ! SMS communication frequency (time steps) ln_diadebug = .false. ! Grid point diagnostic output (fill namdiadebug) ln_sglread = ${NAM_LN_SGLREAD:-.true.} ln_sglreadfbm = ${NAM_LN_SGLREADFBM:-.true.} ln_sglwrite = ${LNSGLWRITE:-.false.} ln_sglwritefbm = ${LNSGLWRITEFBM:-.false.} ln_timeout = ${LNTIMEOUT:=.true.} ln_timeoutflush = ${LNTIMEOUTFLUSH:=.true.} / !----------------------------------------------------------------------- &namptr ! Poleward Transport Diagnostic !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namhsb ! Heat and salt budgets !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namdyn_nept ! Neptune effect (simplified: lateral and vertical diffusions removed) !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namobs ! observation usage ('key_diaobs') !----------------------------------------------------------------------- cn_oceobs_out_path="${CN_OCEOBS_OUT_PATH:-./}" ln_t3d = $LPRO ln_s3d = $LPRO ln_ena = .false. ln_profb = $LPRO ln_sla = $LSLA ln_sladt = .false. ln_slafb = $LSLA ln_sst = $LSST ln_sstfb = ${NAM_LN_SSTFB:-.true.} sstfbfiles = ${NAM_SSTFBFILES:-'sst_01.nc'} profbfiles = $NPROFFILES ln_profb_enatim = .true. slafbfiles = $NSLAFILES nmsshc = 1 ln_altbias = .false. ln_ignmis = .false. ln_grid_global = .true. ln_grid_search_lookup = .true. grid_search_file= 'xypos' ln_velfb = $LCUR velfbfiles = $CURFBDATA ln_velfb_av = $CURFBAVG ln_vel2d = ${LCURSURF:-.false.} velfb2dfiles = ${CURSURFFBDATA:-""} n1dint = 1 n2dint = 3 ln_nea = .true. mdtcutoff = 65.0 mdtcorr = 1.61 dobsini = $NDATE0 dobsend = $NDATEND ln_profb_ena = $LNPROFBENA ln_profb_enatim = $LNPROFBENATIM ln_obsmpppack = ${LN_OBSMPPPACK:-.FALSE.} / !----------------------------------------------------------------------- &nam_asminc ! assimilation increments ('key_asminc') !----------------------------------------------------------------------- ln_bkgwri = $LBKGWRI ! Logical switch for writing out background state ln_trainc = $LTRAINC ! Logical switch for applying tracer increments ln_dyninc = $LDYNINC ! Logical switch for applying velocity increments ln_sshinc = $LSSHINC ! Logical switch for applying SSH increments ln_seaiceinc = $LSEAICEINC ! Logical switch for applying seaice increments ln_asmdin = $LASMDIN ! Logical switch for Direct Initialization (DI) ln_asmiau = $LASMIAU ! Logical switch for Incremental Analysis Updating (IAU) nitbkg = 0 ! Timestep of background in [0,nitend-nit000-1] nitdin = 0 ! Timestep of background for DI in [0,nitend-nit000-1] nitiaustr = 1 ! Timestep of start of IAU interval in [0,nitend-nit000-1] nitiaufin = $NITIAUFIN ! Timestep of end of IAU interval in [0,nitend-nit000-1] niaufn = 0 ! Type of IAU weighting function ln_salfix = .false. ! Logical switch for ensuring that the sa > salfixmin salfixmin = -9999 ! Minimum salinity after applying the increments nn_divdmp = ${NN_DIVDMP:=0} ! Number of iterations of divergence damping operator / !----------------------------------------------------------------------- &namsbc_flx ! surface boundary condition : flux formulation !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_utau = 'utau' , 24 , 'utau' , .false. , .false., 'monthly' , '' , '' sn_vtau = 'vtau' , 24 , 'vtau' , .false. , .false., 'monthly' , '' , '' sn_qtot = 'flx' , 24 , 'qtot' , .false. , .false., 'monthly' , '' , '' sn_qsr = 'flx' , 24 , 'qsr' , .false. , .false., 'monthly' , '' , '' sn_emp = 'flx' , 24 , 'emp' , .false. , .false., 'monthly' , '' , '' cn_dir = './' ! root directory for the location of the flux files / !----------------------------------------------------------------------- &namsbc_wave ! External fields from wave model !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_cdg = 'cdww' , ${FREQWAM:-6} , 'cdww' , .false. , .false. , 'monthly' , '' , '' , '' cn_dir = './' ! root directory for the location of drag coefficient files / !----------------------------------------------------------------------- &namsto ! Stochastic parametrization of EOS !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namtrd ! diagnostics on dynamics and/or tracer trends ! ! and/or mixed-layer trends and/or barotropic vorticity !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namsbc_wavepar ! namsbc_wavepar parameters from wave model (CCC not identical to namsbc_wave) !-----------------------------------------------------------------------/ sn_ust = 'ust' , ${FREQWAM:-6} , 'ust' , .false. , .false. , 'monthly' , '' , '', '' sn_vst = 'vst' , ${FREQWAM:-6} , 'vst' , .false. , .false. , 'monthly' , '' , '', '' sn_swh = 'swh' , ${FREQWAM:-6} , 'swh' , .false. , .false. , 'monthly' , '' , '', '' sn_mwp = 'mwp' , ${FREQWAM:-6} , 'mwp' , .false. , .false. , 'monthly' , '' , '', '' sn_wspd = 'wspd' , ${FREQWAM:-6} , 'wspd' , .false. , .false. , 'monthly' , '' , '', '' sn_phioc = 'phioc' , ${FREQWAM:-6} , 'phioc' , .false. , .false. , 'monthly' , '' , '', '' sn_tauoc = 'tauoc' , ${FREQWAM:-6} , 'tauoc' , .false. , .false. , 'monthly' , '' , '', '' cn_dir_wavepar = './' ! root directory for the location of the ECWAM files / !----------------------------------------------------------------------- &namsbc_waveparlim !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namsbc_fwb ! namsbc_fwb Fresh water budget !----------------------------------------------------------------------- rd_fwb = 1. ! time scale to apply fwb correction (days) ikt_fwb = 1 ! freq (time steps) to estimate fwb nr_ssh = $NR_SSH ! 0 for global sl=0. 1/2 for external SL/Mass file cn_dir ='./' ! root directory for location of ssh file sn_ssh = $SSHFILE, '' rcap = 1. ! mm/day cap for FWB adjusment lfwbr = $LFWBR / !----------------------------------------------------------------------- &namsbc_iif ! surface boundary condition for prescribed ice !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interpol. ! clim ! 'yearly' or ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! sn_ice = 'ice_cover' , 24 , 'ice_cov' , .false. , .false. , 'monthly', '', '' cn_dir = './' ! root for location of ice files dtice = 1. ! time scale for relaxation to sea-ice nn_ice_rel = $NAM_NN_ICE_REL ! Use pseudo-ice treatment / !----------------------------------------------------------------------- &nambias ! Parameters for bias corrections #ifdef key_bias) !----------------------------------------------------------------------- ln_bias = $LN_BIAS ! activate bias correction ln_bias_asm = $BIAS_ASM ! use assim bias ln_bias_rlx = .FALSE. ! use clim-relax bias ln_bias_ofl = $LN_BIAS_OFL ! use off-line bias ln_bias_ts_app= ${LN_BIAS_TS_APP:=.TRUE.} ! apply bias to Temp/Sal directly ln_bias_pc_app= ${LN_BIAS_PC_APP:=.TRUE.} ! apply bias to pressure gradient cn_bias_tot = 'bias_tot.nc' !file name with bias file (restart) cn_bias_asm = 'bias_asm.nc' !file name " " from assim ! dir and structures for offline bias (using fldread conventions) cn_dir = './' sn_tbias_ofl= 'tbias_ofl', -1,'tbias', .true., .true., 'yearly','' sn_sbias_ofl= 'sbias_ofl', -1,'sbias', .true., .true., 'yearly','' bias_time_unit_asm = $BIASTIMEUNITASM ! time unit of asm bias fb_t_asm = ${RN_FB_T_ASM:=0.02} ! partition of total bias for T/S fb_t_rlx = 1. ! " " " " in T/S fb_t_ofl = ${RN_FB_T_OFL:=.1} fb_p_rlx = 1. fb_p_asm = ${RN_FB_P_ASM:=0.3} fb_p_ofl = ${RN_FB_P_OFL:=1.} nn_inertial = $NN_INERTIAL !0/1/2 0/sin(lat)**2/gausian gphit0 = ${RN_GPHIT0:=10.} !length for guassian tappering fctamp = ${RN_FCTAMP:=10.} eft_rlx = 1800. ! efolding time for rlx bias estimation eft_asm = ${RN_EFT_ASM:=1800.} ! efolding time for asm bias estimation 5y t_rlx_upd = 0.05 ! update fct rlx bias " (0. -> 1.) t_asm_upd = ${RN_T_ASM_UPD:=0.05} ! update fct assim bias " (0. -> 1.) lrst_biasr =$LRST_BIASR !force to read bias file at first time step capN2val = ${CAPN2VAL:=-1} !if larger than 0, cap N2 min val (~1.e-6) / !----------------------------------------------------------------------- &namnc4 ! netcdf4 chunking and compression settings ("key_netcdf4") !----------------------------------------------------------------------- nn_nchunks_i= 4 ! number of chunks in i-dimension nn_nchunks_j= 4 ! number of chunks in j-dimension nn_nchunks_k= 42 ! number of chunks in k-dimension ! setting nn_nchunks_k = jpk will give a chunk size of 1 in the vertical which ! is optimal for postprocessing which works exclusively with horizontal slabs ln_nc4zip = ${NC4ZIP:-.false.} ! (T) use netcdf4 chunking and compression ! (F) ignore chunking information and produce netcdf3-compatible files / !----------------------------------------------------------------------- &namzdf_gls ! GLS vertical diffusion ("key_zdfgls") !----------------------------------------------------------------------- ln_gls_coldstart = .true. / !----------------------------------------------------------------------- &namsbc_prt ! perturbations to forcing (MAB 2014) !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_putau = 'putau' , 24 , 'utau' , .false. , .false., 'monthly' , '' , '', '' sn_pvtau = 'pvtau' , 24 , 'vtau' , .false. , .false., 'monthly' , '' , '', '' sn_pqns = 'pqns' , 24 , 'qns' , .false. , .false., 'monthly' , '' , '', '' sn_pqsr = 'pqsr' , 24 , 'qsr' , .false. , .false., 'monthly' , '' , '', '' sn_pemp = 'pemp' , 24 , 'emp' , .false. , .false., 'monthly' , '' , '', '' nn_putau = ${NAM_NN_PUTAU:=0} !0/1/2 for nothing/addpert/replace nn_pvtau = ${NAM_NN_PVTAU:=0} nn_pqns = ${NAM_NN_PQNS:=0} nn_pqsr = ${NAM_NN_PQSR:=0} nn_pemp = ${NAM_NN_PEMP:=0} cn_dir = './' ! root directory for the location of the pert files / eof_namelist if [[ ${ICEMOD:-0} = 3 ]]; then cat >namelist_ice_cfg<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !! NEMO/LIM-3 : Ice configuration namelist. Overwrites SHARED/namelist_ice_lim3_ref !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !----------------------------------------------------------------------- &namicerun ! Share parameters for dynamics/advection/thermo !----------------------------------------------------------------------- jpl = ${NLIM3CAT:-5} ! number of ice categories cn_icerst_in = "restart_ice_in"! suffix of ice restart name (input) cn_icerst_indir = "${RESTARTSDIR:-.}" ! directory from which to read input ice restarts cn_icerst_outdir = "${CN_OCERST_OUT_PATH:-./}" / !----------------------------------------------------------------------- &namiceini ! ice initialisation !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namicedyn ! ice dynamic !----------------------------------------------------------------------- / !------------------------------------------------------------------------------ &namicehdf ! Ice horizontal diffusion !------------------------------------------------------------------------------ nn_ahi0 = 2 ! horizontal diffusivity computation / !----------------------------------------------------------------------- &namicethd ! ice thermodynamic !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namicesal ! ice salinity !----------------------------------------------------------------------- / !------------------------------------------------------------------------------ &namiceitd ! Ice discretization !------------------------------------------------------------------------------ / !----------------------------------------------------------------------- &namiceitdme ! parameters for mechanical redistribution of ice !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namicedia ! ice diagnostics !----------------------------------------------------------------------- / eof_namelist else cat >namelist_ice_cfg<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !! NEMO/LIM-2 : Ice configuration namelist. Overwrites SHARED/namelist_ice_lim2_ref !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !----------------------------------------------------------------------- &namicerun ! Share parameters for dynamics/advection/thermo !----------------------------------------------------------------------- cn_icerst_indir = "${RESTARTSDIR:-.}" ! directory from which to read input ice restarts cn_icerst_outdir = "${CN_OCERST_OUT_PATH:-./}" / !----------------------------------------------------------------------- &namiceini ! ice initialisation !----------------------------------------------------------------------- ln_limini = $LN_INILIM ! read the initial state in 'Ice_initialization.nc' (T) or not (F) / !----------------------------------------------------------------------- &namicedyn ! ice dynamic !----------------------------------------------------------------------- pstar = $PSTAR_LIM ! 1.0e+04 ! 1st bulk-rheology parameter nbitdr = ${NAM_NBITDR:-100} ! maximum number of iterations for relaxation rn_creepl = 2.0e-08 ! creep limit ahi0 = 200.e0 ! horizontal eddy diffusivity coefficient for sea-ice [m2/s] telast = 3600 ! timescale for EVP elastic waves nn_nevp = 360 ! number of EVP subcycling iterations / !----------------------------------------------------------------------- &namicetrp ! ice transport !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namicethd ! ice thermodynamic !----------------------------------------------------------------------- parsub = $PARSUB ! switch for snow sublimation or not hiccrit = 0.6 , 0.3 ! ice thickness for lateral accretion in the Northern (Southern) Hemisphere / !----------------------------------------------------------------------- &namiceout ! parameters for outputs !----------------------------------------------------------------------- / eof_namelist fi elif [[ ${OUT_GRID}_Z${OUT_LEVELS} = "ORCA1_Z75" ]]; then NAM_LN_SMSLABEL=${NAM_LN_SMSLABEL:=.false.} NAM_NN_SMSFREQ=${NAM_NN_SMSFRQ:=24} cat >namelist_cfg<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !! NEMO/OPA Configuration namelist : used to overwrite defaults values defined in SHARED/namelist_ref !!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ! !----------------------------------------------------------------------- &namrun ! parameters of the run !----------------------------------------------------------------------- nn_no = $NCYC ! job number cn_exp = "$EXPVER" ! experience name nn_it000 = $NIT000 ! first time step nn_itend = $NITEND ! last time step (std 5475) nn_date0 = $NDATE0 ! initial calendar date yymmdd (used if nn_rstctl=1 nn_time0 = $NTIME0 ! initial calendar time in hours ln_usetime = $LNUSETIME ln_rstart = $LN_RESTART ! start from rest (F) or from a restart file (T) cn_ocerst_indir = "${RESTARTSDIR:-.}" ! directory from which to read input ocean restarts cn_ocerst_outdir = "${CN_OCERST_OUT_PATH:-./}" nn_stock = $NSTOCK ! frequency of creation of a restart file (modulo rerenced to 1) nn_write = $OUTFREQ ! frequency of write in the output file (modulo re) nn_leapy = 1 ! Leap year calendar (1) or not (0) nn_rstctl = 0 ! restart control ==> activated only if ln_rstart=T ! = 0 nn_date0 read in namelist ; nn_it000 : read in namelist ! = 1 nn_date0 read in namelist ; nn_it000 : check consistancy between namelist and restart ! = 2 nn_date0 read in restart ; nn_it000 : check consistancy between namelist and restart nn_slimrst = $NSLIMRST ! option of slim restart output (0:full; 1:nowfields+tke+sbc; 2:nowfields+sbc+en; 3:nowfields only) nn_slimrstin = ${NSLIMRSTIN:-0} ! Force slim restart on input ln_rsttime = ${LN_RSTTIME:-.true.} ! Use time in restart output names rather than time steps ln_writerst = ${LNWRITERST:-.true.} nn_itout = ${NITOUT:-$NIT000} nn_itfile = ${NAM_NN_ITFILE:=-1} ln_rcf_write = ${NEMO_LN_RCF_WRITE:-.false.} ln_rcf_read = ${NEMO_LN_RCF_READ:-.false.} ln_clobber = .true. / !----------------------------------------------------------------------- &namcfg ! parameters of the configuration !----------------------------------------------------------------------- cp_cfg = "orca" ! name of the configuration cp_cfz = "normal" ! zoom jp_cfg = 1 ! resolution of the configuration jpidta = 362 ! 1st lateral dimension ( >= jpi ) jpjdta = 292 ! 2nd " " ( >= jpj ) jpkdta = 75 ! number of levels ( >= jpk ) jpiglo = 362 ! 1st dimension of global domain --> i =jpidta jpjglo = 292 ! 2nd - - --> j =jpjdta jpizoom = 1 ! left bottom (i,j) indices of the zoom jpjzoom = 1 ! in data domain indices jperio = 6 ! lateral cond. type (between 0 and 6) ln_trabbl = .false. ! key_trabbl not set nn_ldfdyn = 3 ! key_dynldf_c2d ln_zdfddm = .false. ! key_zdfddm not set / !----------------------------------------------------------------------- &namzgr ! vertical coordinate !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namdom ! space and time domain (bathymetry, mesh, timestep) !----------------------------------------------------------------------- nn_msh = 0 ! create (=1) a mesh file or not (=0) rn_hmin = -3. ! min depth of the ocean (>0) or min number of ocean level (<0) rn_e3zps_min= 25. ! partial step thickness is set larger than the minimum of rn_e3zps_rat= 0.2 ! rn_e3zps_min and rn_e3zps_rat*e3t, with 0 fill namsbc_flx ) ln_blk_core = $NAM_LN_BLK ! CORE bulk formulation (T => fill namsbc_core) nn_ice = $NAM_NN_ICE ! =0 no ice boundary condition , ! =1 use observed ice-cover , ! =2 ice-model used ("key_ ln_blk = $NAM_LN_BLK_ALGO nn_hbp = 1 ln_cdgw = ${NAM_LN_CDWW:-false} ! Neutral drag coefficient read from wave model ln_stcor = ${NAM_LN_STCOR:-false} ! Stokes drift read from wave model ln_wavetke = ${NAM_LN_WAVETKE:-false} ! TKE wave parameters read from wave model ln_tauoc = ${NAM_LN_TAUOC:-false} ! Wave-modified stress from wave model ln_wbrsource = ${NAM_LN_WBRSOURCE:-false} ! TKE from wave breaking as source function ln_pert = ${NAM_LNREAD_PERT:-false} ! Option to read surf pert ln_wicestrn = ${NAM_LN_WICESTRN:-false} ln_wave = .true. nn_fwb = ${NN_FWB} nn_limflx = ${NN_NAM_LIMFLX:-"-1"} / !----------------------------------------------------------------------- &namsbc_core ! namsbc_core CORE bulk formulae !----------------------------------------------------------------------- ln_cldcov = ${LNBULKCLD:-.false.} sn_wndi = 'u10' , ${FREQAN:-6} , 'u10' , .false. , .false. , 'monthly' , '' , '' sn_wndj = 'v10' , ${FREQAN:-6} , 'v10' , .false. , .false. , 'monthly' , '' , '' sn_qsr = 'accum' , ${FREQFC:-24} , 'swdn' , .false. , .false. , 'monthly' , '' , '' sn_qlw = 'accum' , ${FREQFC:-24} , 'lwdn' , .false. , .false. , 'monthly' , '' , '' sn_tair = 'qtml' , ${FREQAN:-6} , 't10' , .false. , .false. , 'monthly' , '' , '' sn_humi = 'qtml' , ${FREQAN:-6} , 'q10' , .false. , .false. , 'monthly' , '' , '' sn_prec = 'accum' , ${FREQFC:-24} , 'precip' , .false. , .false. , 'monthly' , '' , '' sn_snow = 'accum' , ${FREQFC:-24} , 'snow' , .false. , .false. , 'monthly' , '' , '' sn_ccov = '${CLDCOVTYP:-tcc}', ${FREQAN:-6} , '${CLDCOVTYP:-tcc}', .false. , .false. ,'yearly' , '' , '' , '' ln_cdec = ${NAM_LN_CDEC:-true} ! Switch to ECMWF drag rn_vfac = ${NAM_RN_RRELWIND:-1.0} / !----------------------------------------------------------------------- &namsbc_blk ! namsbc_blk generic Bulk formula (ln_blk = T) !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_wndi = 'u10' , ${FREQAN:-6} , 'u10' , .false. , .false. , 'monthly' , '' , '' sn_wndj = 'v10' , ${FREQAN:-6} , 'v10' , .false. , .false. , 'monthly' , '' , '' sn_qsr = 'accum' , ${FREQFC:-24} , 'swdn' , .false. , .false. , 'monthly' , '' , '' sn_qlw = 'accum' , ${FREQFC:-24} , 'lwdn' , .false. , .false. , 'monthly' , '' , '' sn_tair = 'qtml' , ${FREQAN:-6} , 't10' , .false. , .false. , 'monthly' , '' , '' sn_humi = 'qtml' , ${FREQAN:-6} , 'q10' , .false. , .false. , 'monthly' , '' , '' sn_prec = 'accum' , ${FREQFC:-24} , 'precip' , .false. , .false. , 'monthly' , '' , '' sn_snow = 'accum' , ${FREQFC:-24} , 'snow' , .false. , .false. , 'monthly' , '' , '' sn_slp = 'slp' , ${FREQAN:-6} , 'slp' , .false. , .false. , 'monthly' , '' , '' ! ! bulk algorithm : ln_ECMWF = .true. ! "ECMWF" algorithm (IFS cycle 31) ! / !----------------------------------------------------------------------- &namtra_qsr ! penetrative solar radiation !----------------------------------------------------------------------- ln_qsr_rgb = $QSRRGB ! RGB (Red-Green-Blue) light penetration ln_qsr_2bd = $QSR2BD ! 2 bands light penetration nn_chldta = $CHLTYPE ! RGB : Chl data (=1) or cst value (=0) / !----------------------------------------------------------------------- &namsbc_rnf ! runoffs namelist surface boundary condition !----------------------------------------------------------------------- sn_rnf = 'runoff_1m_nomask', -1 , 'sorunoff', .true. , .true. , 'yearly' , '' , '' sn_cnf = 'runoff_1m_nomask', 0 , 'socoefr', .false. , .true. , 'yearly' , '' , '' rn_hrnf = 10.e0 ! depth over which enhanced vertical mixing is used rn_avt_rnf = 2.e-3 ! value of the additional vertical mixing coef. [m2/s] / / !----------------------------------------------------------------------- &namsbc_ssr ! surface boundary condition : sea surface restoring !----------------------------------------------------------------------- sn_sst = $SSTDMPFILE, '' sn_sss = 'sss' , -1 , 'sss' , .true. , .true. , 'yearly' , '' , '' cn_dir = './' ! root directory for the location of the runoff files nn_sstr = $NAM_NN_SSTR ! add a retroaction term in the surface heat ! flux (=1 1TS; =2 2TS; =3 3TS ) or not (=0) nn_sssr = 2 ! add a damping term in the surface freshwater flux (=2) ! or to SSS only (=1) or no damping term (=0) rn_dqdt = $DQDT0 ! magnitude of the retroaction on temperature [W/m2/K] rn_dqdt1 = $DQDT1 ! magnitude of the retroaction on temperature [W/m2/K] 1st TS rn_dqdt2 = $DQDT2 ! magnitude of the retroaction on temperature [W/m2/K] 2nd TS rn_dqdt3 = $DQDT3 ! magnitude of the retroaction on temperature [W/m2/K] 3rd TS rn_deds = $DEDS0 ! magnitude of the damping on salinity [mm/day] lgth_2ts = $RML ! window for 2ts rlx running mean lgth_3ts = $RML1 ! window for 3rd ts rlx ln_sssr_bnd = .true. ! flag to bound erp term (associated with nn_sssr=2) rn_sssr_bnd = 4.e0 ! ABS(Max/Min) value of the damping erp term [mm/day] dqdt_limice = 0.1 ! restoring factors under ice [ratio of dqdt] / !----------------------------------------------------------------------- &namsbc_alb ! albedo parameters !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namberg ! iceberg parameters !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namlbc ! lateral momentum boundary condition !----------------------------------------------------------------------- rn_shlat = 0. ! shlat = 0 ! 0 < shlat < 2 ! shlat = 2 ! 2 < shlat / !----------------------------------------------------------------------- &namcla ! cross land advection !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &nambfr ! bottom friction !----------------------------------------------------------------------- nn_bfr = 2 ! type of bottom friction : = 0 : free slip, = 1 : linear friction ! = 2 : nonlinear friction ln_bfrimp = .false. ! implicit bottom friction (requires ln_zdfexp = .false. if true) / !----------------------------------------------------------------------- &nambbc ! bottom temperature boundary condition !----------------------------------------------------------------------- ln_trabbc = .false. ! Apply a geothermal heating at the ocean bottom / !----------------------------------------------------------------------- &nambbl ! bottom boundary layer scheme !----------------------------------------------------------------------- nn_bbl_adv = 1 ! advective bbl (=1/2) or not (=0) rn_ahtbbl = 1000. ! lateral mixing coefficient in the bbl [m2/s] / !----------------------------------------------------------------------- &nameos ! ocean physical parameters !----------------------------------------------------------------------- nn_eos=0 ln_useCT=.false. / !----------------------------------------------------------------------- &namtra_adv ! advection scheme for tracer !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namtra_adv_mle ! mixed layer eddy parametrisation (Fox-Kemper param) !----------------------------------------------------------------------- ln_mle = ${NAM_LN_MLE:-.true.} ! (T) use the Mixed Layer Eddy (MLE) parameterisation / !----------------------------------------------------------------------- &namtra_adv_mle ! mixed layer eddy parametrisation (Fox-Kemper param) !----------------------------------------------------------------------- / !---------------------------------------------------------------------------------- &namtra_ldf ! lateral diffusion scheme for tracers !---------------------------------------------------------------------------------- rn_aeiv_0 = 1000. ! eddy induced velocity coefficient [m2/s] (require "key_traldf_eiv") rn_aht_0 = 1000. ! horizontal eddy diffusivity for tracers [m2/s] rn_ahtb_0 = 0. ! background eddy diffusivity for ldf_iso [m2/s] / !----------------------------------------------------------------------- &namtra_dmp ! tracer: T & S newtonian damping !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namdyn_adv ! formulation of the momentum advection !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namdyn_vor ! option of physics/algorithm (not control by CPP keys) !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namdyn_hpg ! Hydrostatic pressure gradient option !----------------------------------------------------------------------- ln_dynhpg_imp = .true. ! time stepping: semi-implicit time scheme (T) ! centered time scheme (F) / !----------------------------------------------------------------------- &namdyn_ldf ! lateral diffusion on momentum !----------------------------------------------------------------------- rn_ahm_0_lap = 10000. ! horizontal laplacian eddy viscosity [m2/s] rn_ahm_0_lap_eq = 2000. ! horizontal laplacian eddy viscosity [m2/s] rn_ahmb_0 = 0. ! background eddy viscosity for ldf_iso [m2/s] rn_ahm_0_blp = 0. ! horizontal bilaplacian eddy viscosity [m4/s] / / !----------------------------------------------------------------------- &namzdf ! vertical physics !----------------------------------------------------------------------- nn_evdm = 1 ! evd apply on tracer (=0) or on tracer and momentum (=1) rn_avevd = 10. ! evd mixing coefficient [m2/s] / !----------------------------------------------------------------------- &namzdf_tke ! turbulent eddy kinetic dependent vertical diffusion ("key_zdftke") !----------------------------------------------------------------------- rn_ediff = ${NAM_RN_EDIFF:-0.1} ! coef. for vertical eddy coef. (avt=rn_ediff*mxl*sqrt(e) ) rn_ediss = ${NAM_RN_EDISS:-0.7} ! coef. of the Kolmogoroff dissipation rn_ebb = ${NAM_RN_EBB:-67.83} ! coef. of the surface input of tke (=67.83 suggested when ln_mxl0=T) ln_ebbice = ${NAM_LN_EBBICE:-true} ! modify tke surface input under ice (F) rn_ebbice = ${NAM_RN_EBBICE:-20} ! coef. of the surface input of tke under ice rn_emin = 1.e-6 ! minimum value of tke [m2/s2] rn_emin0 = 1.e-4 ! surface minimum value of tke [m2/s2] nn_mxl = ${NAM_NN_MXL:-3} ! mixing length: = 0 bounded by the distance to surface and bottom ! = 1 bounded by the local vertical scale factor ! = 2 first vertical derivative of mixing length bounded by 1 ! = 3 as =2 with distinct disspipative an mixing length scale nn_pdl = ${NAM_NN_PDL:-1} ! Prandtl number function of richarson number (=1, avt=pdl(Ri)*avm) or not (=0, avt=avm) ln_mxl0 = .true. ! surface mixing length scale = F(wind stress) (T) or not (F) rn_mxl0 = 0.01 ! surface buoyancy lenght scale minimum value ln_lc = .true. ! Langmuir cell parameterisation (Axell 2002) rn_lc = 0.15 ! coef. associated to Langmuir cells nn_etau = ${NAM_NN_ETAU:-1} ! penetration of tke below the mixed layer (ML) due to internal & intertial waves ! = 0 no penetration ! = 1 add a tke source below the ML ! = 2 add a tke source just at the base of the ML ! = 3 as = 1 applied on HF part of the stress ("key_coupled") rn_efr = ${NAM_RN_EFR:-0.05} ! fraction of surface tke value which penetrates below the ML (nn_etau=1 or 2) nn_htau = ${NAM_NN_HTAU:-0} ! type of exponential decrease of tke penetration below the ML ! = 0 constant 10 m length scale ! = 1 0.5m at the equator to 30m poleward of 40 degrees ! = 2 5m at eq to 60m poleward of 40 degrees ! = 3 proportional to SWH rn_whtauscl = ${NAM_RN_WHTAUSCL:-4} ! SWH scalign for htau=3 rn_whtaumin = ${NAM_RN_WHTAUMIN:-1} ! minimum htau (nn_htau=3) rn_delta_0 = ${NAM_RN_DELTA_0:-0.19} ! Strength of background diffusion rn_alpha_m = ${NAM_RN_ALPHA_M:-1.} rn_alpha_h = ${NAM_RN_ALPHA_H:-1.4} rn_beta_m = ${NAM_RN_BETA_M:-14.} rn_beta_h = ${NAM_RN_BETA_H:-11.2} / !----------------------------------------------------------------------- &namzdf_ddm ! double diffusive mixing parameterization ("key_zdfddm") !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namzdf_tmx ! tidal mixing parameterization ("key_zdftmx") !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namsol ! elliptic solver / island / free surface !----------------------------------------------------------------------- nn_nmax = 2000 ! maximum of iterations for the SOR solver rn_sor = 1.973 ! optimal coefficient for SOR solver (to be adjusted with the domain) / !----------------------------------------------------------------------- &nammpp ! Massively Parallel Processing ("key_mpp_mpi) !----------------------------------------------------------------------- ln_nnogather= ${NNOGATHER:-.true.} ! activate code to avoid mpi_allgather use at the northfold ln_lbcmap = ${LBCMAP:-false} / !----------------------------------------------------------------------- &namctl ! Control prints & Benchmark !----------------------------------------------------------------------- nn_timing = ${NN_TIMING:-1} ! timing by routine activated (=1) creates timing.output file, or not (=0) ln_sglread = ${NAM_LN_SGLREAD:-.true.} ln_sglwrite = ${LNSGLWRITE:-.false.} ln_timeout = .true. ! Alternative time.step format. ln_smslabel= $NAM_LN_SMSLABEL ! Communicate with SMS. cn_smslabel = "${CN_SMSLABEL:-xlabel}" nn_smsfrq = $NAM_NN_SMSFRQ ! SMS communication frequency (time steps) ln_diadebug = .false. ! Grid point diagnostic output (fill namdiadebug) ln_sglread = ${NAM_LN_SGLREAD:-.true.} ln_sglreadfbm = ${NAM_LN_SGLREADFBM:-.true.} ln_sglwrite = ${LNSGLWRITE:-.false.} ln_sglwritefbm = ${LNSGLWRITEFBM:-.false.} ln_timeout = ${LNTIMEOUT:=.true.} ln_timeoutflush = ${LNTIMEOUTFLUSH:=.true.} / !----------------------------------------------------------------------- &namptr ! Poleward Transport Diagnostic !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namhsb ! Heat and salt budgets !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namdyn_nept ! Neptune effect (simplified: lateral and vertical diffusions removed) !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namobs ! observation usage ('key_diaobs') !----------------------------------------------------------------------- cn_oceobs_out_path="${CN_OCEOBS_OUT_PATH:-./}" ln_t3d = $LPRO ln_s3d = $LPRO ln_ena = .false. ln_profb = $LPRO ln_sla = $LSLA ln_sladt = .false. ln_slafb = $LSLA ln_sst = $LSST ln_sstfb = ${NAM_LN_SSTFB:-.true.} sstfbfiles = ${NAM_SSTFBFILES:-'sst_01.nc'} profbfiles = $NPROFFILES ln_profb_enatim = .true. slafbfiles = $NSLAFILES nmsshc = 1 ln_altbias = .false. ln_ignmis = .false. ln_grid_global = .true. ln_grid_search_lookup = .true. grid_search_file= 'xypos' ln_velfb = $LCUR velfbfiles = $CURFBDATA ln_velfb_av = $CURFBAVG ln_vel2d = ${LCURSURF:-.false.} velfb2dfiles = ${CURSURFFBDATA:-""} n1dint = 1 n2dint = 3 ln_nea = .true. mdtcutoff = 65.0 mdtcorr = 1.61 dobsini = $NDATE0 dobsend = $NDATEND ln_profb_ena = $LNPROFBENA ln_profb_enatim = $LNPROFBENATIM ln_obsmpppack = ${LN_OBSMPPPACK:-.FALSE.} / !----------------------------------------------------------------------- &nam_asminc ! assimilation increments ('key_asminc') !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namsbc_flx ! surface boundary condition : flux formulation !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_utau = 'utau' , 24 , 'utau' , .false. , .false., 'monthly' , '' , '' sn_vtau = 'vtau' , 24 , 'vtau' , .false. , .false., 'monthly' , '' , '' sn_qtot = 'flx' , 24 , 'qtot' , .false. , .false., 'monthly' , '' , '' sn_qsr = 'flx' , 24 , 'qsr' , .false. , .false., 'monthly' , '' , '' sn_emp = 'flx' , 24 , 'emp' , .false. , .false., 'monthly' , '' , '' cn_dir = './' ! root directory for the location of the flux files / !----------------------------------------------------------------------- &namsbc_wave ! External fields from wave model !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_cdg = 'cdww' , ${FREQWAM:-6} , 'cdww' , .false. , .false. , 'monthly' , '' , '' , '' cn_dir = './' ! root directory for the location of drag coefficient files / !----------------------------------------------------------------------- &namsto ! Stochastic parametrization of EOS !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namtrd ! diagnostics on dynamics and/or tracer trends ! ! and/or mixed-layer trends and/or barotropic vorticity !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namsbc_wavepar ! namsbc_wavepar parameters from wave model (CCC not identical to namsbc_wave) !-----------------------------------------------------------------------/ sn_ust = 'ust' , ${FREQWAM:-6} , 'ust' , .false. , .false. , 'monthly' , '' , '', '' sn_vst = 'vst' , ${FREQWAM:-6} , 'vst' , .false. , .false. , 'monthly' , '' , '', '' sn_swh = 'swh' , ${FREQWAM:-6} , 'swh' , .false. , .false. , 'monthly' , '' , '', '' sn_mwp = 'mwp' , ${FREQWAM:-6} , 'mwp' , .false. , .false. , 'monthly' , '' , '', '' sn_wspd = 'wspd' , ${FREQWAM:-6} , 'wspd' , .false. , .false. , 'monthly' , '' , '', '' sn_phioc = 'phioc' , ${FREQWAM:-6} , 'phioc' , .false. , .false. , 'monthly' , '' , '', '' sn_tauoc = 'tauoc' , ${FREQWAM:-6} , 'tauoc' , .false. , .false. , 'monthly' , '' , '', '' cn_dir_wavepar = './' ! root directory for the location of the ECWAM files / !----------------------------------------------------------------------- &namsbc_waveparlim !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namsbc_fwb ! namsbc_fwb Fresh water budget !----------------------------------------------------------------------- rd_fwb = 1. ! time scale to apply fwb correction (days) ikt_fwb = 1 ! freq (time steps) to estimate fwb nr_ssh = $NR_SSH ! 0 for global sl=0. 1/2 for external SL/Mass file cn_dir ='./' ! root directory for location of ssh file sn_ssh = $SSHFILE, '' rcap = 1. ! mm/day cap for FWB adjusment lfwbr = $LFWBR / !----------------------------------------------------------------------- &namsbc_iif ! surface boundary condition for prescribed ice !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interpol. ! clim ! 'yearly' or ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! sn_ice = 'ice_cover' , 24 , 'ice_cov' , .false. , .false. , 'monthly', '', '' cn_dir = './' ! root for location of ice files dtice = 1. ! time scale for relaxation to sea-ice nn_ice_rel = $NAM_NN_ICE_REL ! Use pseudo-ice treatment / !----------------------------------------------------------------------- &nambias ! Parameters for bias corrections #ifdef key_bias) !----------------------------------------------------------------------- ln_bias = $LN_BIAS ! activate bias correction ln_bias_asm = $BIAS_ASM ! use assim bias ln_bias_rlx = .FALSE. ! use clim-relax bias ln_bias_ofl = $LN_BIAS_OFL ! use off-line bias ln_bias_ts_app= ${LN_BIAS_TS_APP:=.TRUE.} ! apply bias to Temp/Sal directly ln_bias_pc_app= ${LN_BIAS_PC_APP:=.TRUE.} ! apply bias to pressure gradient cn_bias_tot = 'bias_tot.nc' !file name with bias file (restart) cn_bias_asm = 'bias_asm.nc' !file name " " from assim ! dir and structures for offline bias (using fldread conventions) cn_dir = './' sn_tbias_ofl= 'tbias_ofl', -1,'tbias', .true., .true., 'yearly','' sn_sbias_ofl= 'sbias_ofl', -1,'sbias', .true., .true., 'yearly','' bias_time_unit_asm = $BIASTIMEUNITASM ! time unit of asm bias fb_t_asm = ${RN_FB_T_ASM:=0.02} ! partition of total bias for T/S fb_t_rlx = 1. ! " " " " in T/S fb_t_ofl = ${RN_FB_T_OFL:=.1} fb_p_rlx = 1. fb_p_asm = ${RN_FB_P_ASM:=0.3} fb_p_ofl = ${RN_FB_P_OFL:=1.} nn_inertial = $NN_INERTIAL !0/1/2 0/sin(lat)**2/gausian gphit0 = ${RN_GPHIT0:=10.} !length for guassian tappering fctamp = ${RN_FCTAMP:=10.} eft_rlx = 1800. ! efolding time for rlx bias estimation eft_asm = ${RN_EFT_ASM:=1800.} ! efolding time for asm bias estimation 5y t_rlx_upd = 0.05 ! update fct rlx bias " (0. -> 1.) t_asm_upd = ${RN_T_ASM_UPD:=0.05} ! update fct assim bias " (0. -> 1.) lrst_biasr =$LRST_BIASR !force to read bias file at first time step capN2val = ${CAPN2VAL:=-1} !if larger than 0, cap N2 min val (~1.e-6) / !----------------------------------------------------------------------- &namnc4 ! netcdf4 chunking and compression settings ("key_netcdf4") !----------------------------------------------------------------------- nn_nchunks_i= 4 ! number of chunks in i-dimension nn_nchunks_j= 4 ! number of chunks in j-dimension nn_nchunks_k= 75 ! number of chunks in k-dimension ! setting nn_nchunks_k = jpk will give a chunk size of 1 in the vertical which ! is optimal for postprocessing which works exclusively with horizontal slabs ln_nc4zip = ${NC4ZIP:-.false.} ! (T) use netcdf4 chunking and compression ! (F) ignore chunking information and produce netcdf3-compatible files / !----------------------------------------------------------------------- &namzdf_gls ! GLS vertical diffusion ("key_zdfgls") !----------------------------------------------------------------------- ln_gls_coldstart = .true. / !----------------------------------------------------------------------- &namsbc_prt ! perturbations to forcing (MAB 2014) !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_putau = 'putau' , 24 , 'utau' , .false. , .false., 'monthly' , '' , '', '' sn_pvtau = 'pvtau' , 24 , 'vtau' , .false. , .false., 'monthly' , '' , '', '' sn_pqns = 'pqns' , 24 , 'qns' , .false. , .false., 'monthly' , '' , '', '' sn_pqsr = 'pqsr' , 24 , 'qsr' , .false. , .false., 'monthly' , '' , '', '' sn_pemp = 'pemp' , 24 , 'emp' , .false. , .false., 'monthly' , '' , '', '' nn_putau = ${NAM_NN_PUTAU:=0} !0/1/2 for nothing/addpert/replace nn_pvtau = ${NAM_NN_PVTAU:=0} nn_pqns = ${NAM_NN_PQNS:=0} nn_pqsr = ${NAM_NN_PQSR:=0} nn_pemp = ${NAM_NN_PEMP:=0} cn_dir = './' ! root directory for the location of the pert files / eof_namelist if [[ ${ICEMOD:-0} = 3 ]]; then cat >namelist_ice_cfg<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !! NEMO/LIM-3 : Ice configuration namelist. Overwrites SHARED/namelist_ice_lim3_ref !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !----------------------------------------------------------------------- &namicerun ! Share parameters for dynamics/advection/thermo !----------------------------------------------------------------------- jpl = ${NLIM3CAT:-5} ! number of ice categories cn_icerst_in = "restart_ice_in"! suffix of ice restart name (input) cn_icerst_indir = "${RESTARTSDIR:-.}" ! directory from which to read input ice restarts cn_icerst_outdir = "${CN_OCERST_OUT_PATH:-./}" / !----------------------------------------------------------------------- &namiceini ! ice initialisation !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namicedyn ! ice dynamic !----------------------------------------------------------------------- / !------------------------------------------------------------------------------ &namicehdf ! Ice horizontal diffusion !------------------------------------------------------------------------------ nn_ahi0 = 2 ! horizontal diffusivity computation / !----------------------------------------------------------------------- &namicethd ! ice thermodynamic !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namicesal ! ice salinity !----------------------------------------------------------------------- / !------------------------------------------------------------------------------ &namiceitd ! Ice discretization !------------------------------------------------------------------------------ / !----------------------------------------------------------------------- &namiceitdme ! parameters for mechanical redistribution of ice !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namicedia ! ice diagnostics !----------------------------------------------------------------------- / eof_namelist else cat >namelist_ice_cfg<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !! NEMO/LIM-2 : Ice configuration namelist. Overwrites SHARED/namelist_ice_lim2_ref !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !----------------------------------------------------------------------- &namicerun ! Share parameters for dynamics/advection/thermo !----------------------------------------------------------------------- cn_icerst_indir = "${RESTARTSDIR:-.}" ! directory from which to read input ice restarts cn_icerst_outdir = "${CN_OCERST_OUT_PATH:-./}" / !----------------------------------------------------------------------- &namiceini ! ice initialisation !----------------------------------------------------------------------- ln_limini = $LN_INILIM ! read the initial state in 'Ice_initialization.nc' (T) or not (F) / !----------------------------------------------------------------------- &namicedyn ! ice dynamic !----------------------------------------------------------------------- pstar = $PSTAR_LIM ! 1.0e+04 ! 1st bulk-rheology parameter nbitdr = ${NAM_NBITDR:-100} ! maximum number of iterations for relaxation rn_creepl = 2.0e-08 ! creep limit ahi0 = 200.e0 ! horizontal eddy diffusivity coefficient for sea-ice [m2/s] telast = 3600 ! timescale for EVP elastic waves nn_nevp = 360 ! number of EVP subcycling iterations / !----------------------------------------------------------------------- &namicetrp ! ice transport !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namicethd ! ice thermodynamic !----------------------------------------------------------------------- parsub = $PARSUB ! switch for snow sublimation or not hiccrit = 0.6 , 0.3 ! ice thickness for lateral accretion in the Northern (Southern) Hemisphere / !----------------------------------------------------------------------- &namiceout ! parameters for outputs !----------------------------------------------------------------------- / eof_namelist fi elif [[ ${OUT_GRID}_Z${OUT_LEVELS} = "ORCA025_Z75" ]]; then NAM_LN_SMSLABEL=${NAM_LN_SMSLABEL:=.false.} NAM_NN_SMSFREQ=${NAM_NN_SMSFRQ:=72} cat >namelist_cfg<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !! NEMO/OPA Configuration namelist : used to overwrite defaults values defined in SHARED/namelist_ref !!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ! !----------------------------------------------------------------------- &namrun ! parameters of the run !----------------------------------------------------------------------- nn_no = $NCYC ! job number cn_exp = "$EXPVER" ! experience name nn_it000 = $NIT000 ! first time step nn_itend = $NITEND ! last time step (std 5475) nn_date0 = $NDATE0 ! initial calendar date yymmdd (used if nn_rstctl=1 nn_time0 = $NTIME0 ! initial calendar time in hours ln_usetime = $LNUSETIME ln_rstart = $LN_RESTART ! start from rest (F) or from a restart file (T) cn_ocerst_indir = "${RESTARTSDIR:-.}" ! directory from which to read input ocean restarts cn_ocerst_outdir = "${CN_OCERST_OUT_PATH:-./}" nn_stock = $NSTOCK ! frequency of creation of a restart file (modulo rerenced to 1) nn_write = $OUTFREQ ! frequency of write in the output file (modulo re) nn_leapy = 1 ! Leap year calendar (1) or not (0) nn_rstctl = 0 ! restart control ==> activated only if ln_rstart=T ! = 0 nn_date0 read in namelist ; nn_it000 : read in namelist ! = 1 nn_date0 read in namelist ; nn_it000 : check consistancy between namelist and restart ! = 2 nn_date0 read in restart ; nn_it000 : check consistancy between namelist and restart nn_slimrst = $NSLIMRST ! option of slim restart output (0:full; 1:nowfields+tke+sbc; 2:nowfields+sbc+en; 3:nowfields only) nn_slimrstin = ${NSLIMRSTIN:-0} ! Force slim restart on input ln_rsttime = ${LN_RSTTIME:-.true.} ! Use time in restart output names rather than time steps ln_writerst = ${LNWRITERST:-.true.} nn_itout = ${NITOUT:-$NIT000} nn_itfile = ${NAM_NN_ITFILE:=-1} ln_rcf_write = ${NEMO_LN_RCF_WRITE:-.false.} ln_rcf_read = ${NEMO_LN_RCF_READ:-.false.} ln_clobber = .true. / !----------------------------------------------------------------------- &namcfg ! parameters of the configuration !----------------------------------------------------------------------- cp_cfg = "orca" ! name of the configuration cp_cfz = "normal" ! zoom jp_cfg = 025 ! resolution of the configuration jpidta = 1442 ! 1st lateral dimension ( >= jpi ) jpjdta = 1021 ! 2nd " " ( >= jpj ) jpkdta = 75 ! number of levels ( >= jpk ) jpiglo = 1442 ! 1st dimension of global domain --> i =jpidta jpjglo = 1021 ! 2nd - - --> j =jpjdta jpizoom = 1 ! left bottom (i,j) indices of the zoom jpjzoom = 1 ! in data domain indices jperio = 4 ! lateral cond. type (between 0 and 6) ln_trabbl = .false. ! key_trabbl not set nn_ldfdyn = 2 ! key_dynldf_c2d ln_zdfddm = .false. ! key_zdfddm not set ln_traldf_eiv = .false. ! key_traldf_eiv not set / !----------------------------------------------------------------------- &namzgr ! vertical coordinate !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namdom ! space and time domain (bathymetry, mesh, timestep) !----------------------------------------------------------------------- nn_msh = 0 ! create (=1) a mesh file or not (=0) rn_hmin = -3. ! min depth of the ocean (>0) or min number of ocean level (<0) rn_e3zps_min= 25. ! partial step thickness is set larger than the minimum of rn_e3zps_rat= 0.2 ! rn_e3zps_min and rn_e3zps_rat*e3t, with 0 fill namsbc_flx ) ln_blk_core = $NAM_LN_BLK ! CORE bulk formulation (T => fill namsbc_core) nn_ice = $NAM_NN_ICE ! =0 no ice boundary condition , ! =1 use observed ice-cover , ! =2 ice-model used ("key_ ln_blk = $NAM_LN_BLK_ALGO nn_hbp = 1 ln_cdgw = ${NAM_LN_CDWW:-false} ! Neutral drag coefficient read from wave model ln_stcor = ${NAM_LN_STCOR:-false} ! Stokes drift read from wave model ln_wavetke = ${NAM_LN_WAVETKE:-false} ! TKE wave parameters read from wave model ln_tauoc = ${NAM_LN_TAUOC:-false} ! Wave-modified stress from wave model ln_wbrsource = ${NAM_LN_WBRSOURCE:-false} ! TKE from wave breaking as source function ln_pert = ${NAM_LNREAD_PERT:-false} ! Option to read surf pert ln_wicestrn = ${NAM_LN_WICESTRN:-false} ln_wave = .true. nn_fwb = ${NN_FWB} nn_limflx = ${NN_NAM_LIMFLX:-"-1"} / !----------------------------------------------------------------------- &namsbc_core ! namsbc_core CORE bulk formulae !----------------------------------------------------------------------- ln_cldcov = ${LNBULKCLD:-.false.} sn_wndi = 'u10' , ${FREQAN:-6} , 'u10' , .false. , .false. , 'monthly' , '' , '' sn_wndj = 'v10' , ${FREQAN:-6} , 'v10' , .false. , .false. , 'monthly' , '' , '' sn_qsr = 'accum' , ${FREQFC:-24} , 'swdn' , .false. , .false. , 'monthly' , '' , '' sn_qlw = 'accum' , ${FREQFC:-24} , 'lwdn' , .false. , .false. , 'monthly' , '' , '' sn_tair = 'qtml' , ${FREQAN:-6} , 't10' , .false. , .false. , 'monthly' , '' , '' sn_humi = 'qtml' , ${FREQAN:-6} , 'q10' , .false. , .false. , 'monthly' , '' , '' sn_prec = 'accum' , ${FREQFC:-24} , 'precip' , .false. , .false. , 'monthly' , '' , '' sn_snow = 'accum' , ${FREQFC:-24} , 'snow' , .false. , .false. , 'monthly' , '' , '' sn_ccov = '${CLDCOVTYP:-tcc}', ${FREQAN:-6} , '${CLDCOVTYP:-tcc}', .false. , .false. ,'yearly' , '' , '' , '' ln_cdec = ${NAM_LN_CDEC:-true} ! Switch to ECMWF drag rn_vfac = ${NAM_RN_RRELWIND:-1.0} / !----------------------------------------------------------------------- &namsbc_blk ! namsbc_blk generic Bulk formula (ln_blk = T) !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_wndi = 'u10' , ${FREQAN:-6} , 'u10' , .false. , .false. , 'monthly' , '' , '' sn_wndj = 'v10' , ${FREQAN:-6} , 'v10' , .false. , .false. , 'monthly' , '' , '' sn_qsr = 'accum' , ${FREQFC:-24} , 'swdn' , .false. , .false. , 'monthly' , '' , '' sn_qlw = 'accum' , ${FREQFC:-24} , 'lwdn' , .false. , .false. , 'monthly' , '' , '' sn_tair = 'qtml' , ${FREQAN:-6} , 't10' , .false. , .false. , 'monthly' , '' , '' sn_humi = 'qtml' , ${FREQAN:-6} , 'q10' , .false. , .false. , 'monthly' , '' , '' sn_prec = 'accum' , ${FREQFC:-24} , 'precip' , .false. , .false. , 'monthly' , '' , '' sn_snow = 'accum' , ${FREQFC:-24} , 'snow' , .false. , .false. , 'monthly' , '' , '' sn_slp = 'slp' , ${FREQAN:-6} , 'slp' , .false. , .false. , 'monthly' , '' , '' ! ! bulk algorithm : ln_ECMWF = .true. ! "ECMWF" algorithm (IFS cycle 31) ! / !----------------------------------------------------------------------- &namtra_qsr ! penetrative solar radiation !----------------------------------------------------------------------- ln_qsr_rgb = $QSRRGB ! RGB (Red-Green-Blue) light penetration ln_qsr_2bd = $QSR2BD ! 2 bands light penetration nn_chldta = $CHLTYPE ! RGB : Chl data (=1) or cst value (=0) / !----------------------------------------------------------------------- &namsbc_rnf ! runoffs namelist surface boundary condition !----------------------------------------------------------------------- sn_rnf = 'runoff_1m_nomask', -1 , 'sorunoff', .true. , .true. , 'yearly' , '' , '' sn_cnf = 'runoff_1m_nomask', 0 , 'socoefr', .false. , .true. , 'yearly' , '' , '' rn_hrnf = 10.e0 ! depth over which enhanced vertical mixing is used rn_avt_rnf = 2.e-3 ! value of the additional vertical mixing coef. [m2/s] / / !----------------------------------------------------------------------- &namsbc_ssr ! surface boundary condition : sea surface restoring !----------------------------------------------------------------------- sn_sst = $SSTDMPFILE, '' sn_sss = 'sss' , -1 , 'sss' , .true. , .true. , 'yearly' , '' , '' cn_dir = './' ! root directory for the location of the runoff files nn_sstr = $NAM_NN_SSTR ! add a retroaction term in the surface heat ! flux (=1 1TS; =2 2TS; =3 3TS ) or not (=0) nn_sssr = 2 ! add a damping term in the surface freshwater flux (=2) ! or to SSS only (=1) or no damping term (=0) rn_dqdt = $DQDT0 ! magnitude of the retroaction on temperature [W/m2/K] rn_dqdt1 = $DQDT1 ! magnitude of the retroaction on temperature [W/m2/K] 1st TS rn_dqdt2 = $DQDT2 ! magnitude of the retroaction on temperature [W/m2/K] 2nd TS rn_dqdt3 = $DQDT3 ! magnitude of the retroaction on temperature [W/m2/K] 3rd TS rn_deds = $DEDS0 ! magnitude of the damping on salinity [mm/day] lgth_2ts = $RML ! window for 2ts rlx running mean lgth_3ts = $RML1 ! window for 3rd ts rlx ln_sssr_bnd = .true. ! flag to bound erp term (associated with nn_sssr=2) rn_sssr_bnd = 4.e0 ! ABS(Max/Min) value of the damping erp term [mm/day] dqdt_limice = 0.1 ! restoring factors under ice [ratio of dqdt] / !----------------------------------------------------------------------- &namsbc_alb ! albedo parameters !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namberg ! iceberg parameters !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namlbc ! lateral momentum boundary condition !----------------------------------------------------------------------- rn_shlat = 0. ! shlat = 0 ! 0 < shlat < 2 ! shlat = 2 ! 2 < shlat ln_antinc = ${NAM_LN_ANTINC:-true} / !----------------------------------------------------------------------- &namcla ! cross land advection !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &nambfr ! bottom friction !----------------------------------------------------------------------- ln_bfr2d = .true. ! horizontal variation of the bottom friction coef (read a 2D mask file ) nn_bfr = 2 ! type of bottom friction : = 0 : free slip, = 1 : linear friction ! = 2 : nonlinear friction rn_bfrien = 10. ! local multiplying factor of bfr (ln_bfr2d=T)/ ln_bfrimp = .false. ! implicit bottom friction (requires ln_zdfexp = .false. if true) / !----------------------------------------------------------------------- &nambbc ! bottom temperature boundary condition !----------------------------------------------------------------------- ln_trabbc = .false. ! Apply a geothermal heating at the ocean bottom / !----------------------------------------------------------------------- &nambbl ! bottom boundary layer scheme !----------------------------------------------------------------------- nn_bbl_adv = 1 ! advective bbl (=1/2) or not (=0) rn_ahtbbl = 1000. ! lateral mixing coefficient in the bbl [m2/s] / !----------------------------------------------------------------------- &nameos ! ocean physical parameters !----------------------------------------------------------------------- nn_eos=0 ln_useCT=.false. / !----------------------------------------------------------------------- &namtra_adv ! advection scheme for tracer !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namtra_adv_mle ! mixed layer eddy parametrisation (Fox-Kemper param) !----------------------------------------------------------------------- ln_mle = ${NAM_LN_MLE:-.true.} ! (T) use the Mixed Layer Eddy (MLE) parameterisation / !----------------------------------------------------------------------- &namtra_adv_mle ! mixed layer eddy parametrisation (Fox-Kemper param) !----------------------------------------------------------------------- / !---------------------------------------------------------------------------------- &namtra_ldf ! lateral diffusion scheme for tracers !---------------------------------------------------------------------------------- rn_aeiv_0 = 0. ! eddy induced velocity coefficient [m2/s] (require "key_traldf_eiv") rn_aht_0 = 300. ! horizontal eddy diffusivity for tracers [m2/s] rn_ahtb_0 = 0. ! background eddy diffusivity for ldf_iso [m2/s] / !----------------------------------------------------------------------- &namtra_dmp ! tracer: T & S newtonian damping !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namdyn_adv ! formulation of the momentum advection !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namdyn_vor ! option of physics/algorithm (not control by CPP keys) !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namdyn_hpg ! Hydrostatic pressure gradient option !----------------------------------------------------------------------- ln_dynhpg_imp = .true. ! time stepping: semi-implicit time scheme (T) ! centered time scheme (F) / !----------------------------------------------------------------------- &namdyn_ldf ! lateral diffusion on momentum !----------------------------------------------------------------------- ln_dynldf_lap = .false. ! laplacian operator ln_dynldf_bilap = .true. ! bilaplacian operator rn_ahm_0_lap = 0. ! horizontal laplacian eddy viscosity [m2/s] rn_ahm_0_lap_eq = 0. ! horizontal laplacian eddy viscosity [m2/s] rn_ahmb_0 = 0. ! background eddy viscosity for ldf_iso [m2/s] rn_ahm_0_blp = -1.1e11 ! horizontal bilaplacian eddy viscosity [m4/s] / / !----------------------------------------------------------------------- &namzdf ! vertical physics !----------------------------------------------------------------------- rn_avm0 = 1.e-4 ! vertical eddy viscosity [m2/s] (background Kz if not "key_zdfcst") rn_avt0 = 1.e-5 ! vertical eddy diffusivity [m2/s] (background Kz if not "key_zdfcst") nn_havtb = 1 ! horizontal shape for avtb (=1) or not (=0) nn_evdm = 1 ! evd apply on tracer (=0) or on tracer and momentum (=1) rn_avevd = 10. ! evd mixing coefficient [m2/s] / !----------------------------------------------------------------------- &namzdf_tke ! turbulent eddy kinetic dependent vertical diffusion ("key_zdftke") !----------------------------------------------------------------------- rn_ediff = ${NAM_RN_EDIFF:-0.1} ! coef. for vertical eddy coef. (avt=rn_ediff*mxl*sqrt(e) ) rn_ediss = ${NAM_RN_EDISS:-0.7} ! coef. of the Kolmogoroff dissipation rn_ebb = ${NAM_RN_EBB:-67.83} ! coef. of the surface input of tke (=67.83 suggested when ln_mxl0=T) ln_ebbice = ${NAM_LN_EBBICE:-true} ! modify tke surface input under ice (F) rn_ebbice = ${NAM_RN_EBBICE:-20} ! coef. of the surface input of tke under ice rn_emin = 1.e-6 ! minimum value of tke [m2/s2] rn_emin0 = 1.e-4 ! surface minimum value of tke [m2/s2] nn_mxl = ${NAM_NN_MXL:-3} ! mixing length: = 0 bounded by the distance to surface and bottom ! = 1 bounded by the local vertical scale factor ! = 2 first vertical derivative of mixing length bounded by 1 ! = 3 as =2 with distinct disspipative an mixing length scale nn_pdl = ${NAM_NN_PDL:-1} ! Prandtl number function of richarson number (=1, avt=pdl(Ri)*avm) or not (=0, avt=avm) ln_mxl0 = .true. ! surface mixing length scale = F(wind stress) (T) or not (F) rn_mxl0 = 0.01 ! surface buoyancy lenght scale minimum value ln_lc = .true. ! Langmuir cell parameterisation (Axell 2002) rn_lc = 0.15 ! coef. associated to Langmuir cells nn_etau = ${NAM_NN_ETAU:-1} ! penetration of tke below the mixed layer (ML) due to internal & intertial waves ! = 0 no penetration ! = 1 add a tke source below the ML ! = 2 add a tke source just at the base of the ML ! = 3 as = 1 applied on HF part of the stress ("key_coupled") rn_efr = ${NAM_RN_EFR:-0.05} ! fraction of surface tke value which penetrates below the ML (nn_etau=1 or 2) nn_htau = ${NAM_NN_HTAU:-0} ! type of exponential decrease of tke penetration below the ML ! = 0 constant 10 m length scale ! = 1 0.5m at the equator to 30m poleward of 40 degrees ! = 2 5m at eq to 60m poleward of 40 degrees ! = 3 proportional to SWH rn_whtauscl = ${NAM_RN_WHTAUSCL:-4} ! SWH scalign for htau=3 rn_whtaumin = ${NAM_RN_WHTAUMIN:-1} ! minimum htau (nn_htau=3) rn_delta_0 = ${NAM_RN_DELTA_0:-0.19} ! Strength of background diffusion rn_alpha_m = ${NAM_RN_ALPHA_M:-1.} rn_alpha_h = ${NAM_RN_ALPHA_H:-1.4} rn_beta_m = ${NAM_RN_BETA_M:-14.} rn_beta_h = ${NAM_RN_BETA_H:-11.2} / !----------------------------------------------------------------------- &namzdf_ddm ! double diffusive mixing parameterization ("key_zdfddm") !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namzdf_tmx ! tidal mixing parameterization ("key_zdftmx") !----------------------------------------------------------------------- rn_htmx = 500. ! vertical decay scale for turbulence (meters) rn_n2min = 1.e-8 ! threshold of the Brunt-Vaisala frequency (s-1) rn_tfe = 0.333 ! tidal dissipation efficiency rn_me = 0.2 ! mixing efficiency ln_tmx_itf = .true. ! ITF specific parameterisation rn_tfe_itf = 1. ! ITF tidal dissipation efficiency ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_mskitf = 'mask_itf' , -12 , 'tmaskitf' , .false. , .true. , 'yearly' , '' , '', '' sn_m2 = 'M2rowdrg' , -12 , 'field' , .false. , .true. , 'yearly' , '' , '', '' sn_s2 = 'S2rowdrg' , -12 , 'field' , .false. , .true. , 'yearly' , '' , '', '' sn_k1 = 'K1rowdrg' , -12 , 'field' , .false. , .true. , 'yearly' , '' , '', '' / !----------------------------------------------------------------------- &namsol ! elliptic solver / island / free surface !----------------------------------------------------------------------- nn_nmax = 2800 ! maximum of iterations for the SOR solver rn_sor = 1.973 ! optimal coefficient for SOR solver (to be adjusted with the domain) / !----------------------------------------------------------------------- &nammpp ! Massively Parallel Processing ("key_mpp_mpi) !----------------------------------------------------------------------- ln_nnogather= ${NNOGATHER:-.true.} ! activate code to avoid mpi_allgather use at the northfold ln_lbcmap = ${LBCMAP:-false} / !----------------------------------------------------------------------- &namctl ! Control prints & Benchmark !----------------------------------------------------------------------- nn_timing = ${NN_TIMING:-1} ! timing by routine activated (=1) creates timing.output file, or not (=0) ln_sglread = ${NAM_LN_SGLREAD:-.true.} ln_sglwrite = ${LNSGLWRITE:-.false.} ln_timeout = .true. ! Alternative time.step format. ln_smslabel= $NAM_LN_SMSLABEL ! Communicate with SMS. cn_smslabel = "${CN_SMSLABEL:-xlabel}" nn_smsfrq = $NAM_NN_SMSFRQ ! SMS communication frequency (time steps) ln_diadebug = .false. ! Grid point diagnostic output (fill namdiadebug) ln_sglread = ${NAM_LN_SGLREAD:-.true.} ln_sglreadfbm = ${NAM_LN_SGLREADFBM:-.true.} ln_sglwrite = ${LNSGLWRITE:-.false.} ln_sglwritefbm = ${LNSGLWRITEFBM:-.false.} ln_timeout = ${LNTIMEOUT:=.true.} ln_timeoutflush = ${LNTIMEOUTFLUSH:=.true.} / !----------------------------------------------------------------------- &namptr ! Poleward Transport Diagnostic !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namhsb ! Heat and salt budgets !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namdyn_nept ! Neptune effect (simplified: lateral and vertical diffusions removed) !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namobs ! observation usage ('key_diaobs') !----------------------------------------------------------------------- cn_oceobs_out_path="${CN_OCEOBS_OUT_PATH:-./}" ln_t3d = $LPRO ln_s3d = $LPRO ln_ena = .false. ln_profb = $LPRO ln_sla = $LSLA ln_sladt = .false. ln_slafb = $LSLA ln_sst = $LSST ln_sstfb = ${NAM_LN_SSTFB:-.true.} sstfbfiles = ${NAM_SSTFBFILES:-'sst_01.nc'} profbfiles = $NPROFFILES ln_profb_enatim = .true. slafbfiles = $NSLAFILES nmsshc = 1 ln_altbias = .false. ln_ignmis = .false. ln_grid_global = .true. ln_grid_search_lookup = .true. grid_search_file= 'xypos' ln_velfb = $LCUR velfbfiles = $CURFBDATA ln_velfb_av = $CURFBAVG ln_vel2d = ${LCURSURF:-.false.} velfb2dfiles = ${CURSURFFBDATA:-""} n1dint = 1 n2dint = 3 ln_nea = .true. mdtcutoff = 65.0 mdtcorr = 1.61 dobsini = $NDATE0 dobsend = $NDATEND ln_profb_ena = $LNPROFBENA ln_profb_enatim = $LNPROFBENATIM ln_obsmpppack = ${LN_OBSMPPPACK:-.FALSE.} / !----------------------------------------------------------------------- &nam_asminc ! assimilation increments ('key_asminc') !----------------------------------------------------------------------- ln_bkgwri = $LBKGWRI ! Logical switch for writing out background state ln_trainc = $LTRAINC ! Logical switch for applying tracer increments ln_dyninc = $LDYNINC ! Logical switch for applying velocity increments ln_sshinc = $LSSHINC ! Logical switch for applying SSH increments ln_seaiceinc = $LSEAICEINC ! Logical switch for applying seaice increments ln_asmdin = $LASMDIN ! Logical switch for Direct Initialization (DI) ln_asmiau = $LASMIAU ! Logical switch for Incremental Analysis Updating (IAU) nitbkg = 0 ! Timestep of background in [0,nitend-nit000-1] nitdin = 0 ! Timestep of background for DI in [0,nitend-nit000-1] nitiaustr = 1 ! Timestep of start of IAU interval in [0,nitend-nit000-1] nitiaufin = $NITIAUFIN ! Timestep of end of IAU interval in [0,nitend-nit000-1] niaufn = 0 ! Type of IAU weighting function ln_salfix = .false. ! Logical switch for ensuring that the sa > salfixmin salfixmin = -9999 ! Minimum salinity after applying the increments nn_divdmp = ${NN_DIVDMP:=0} ! Number of iterations of divergence damping operator / !----------------------------------------------------------------------- &namsbc_flx ! surface boundary condition : flux formulation !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_utau = 'utau' , 24 , 'utau' , .false. , .false., 'monthly' , '' , '' sn_vtau = 'vtau' , 24 , 'vtau' , .false. , .false., 'monthly' , '' , '' sn_qtot = 'flx' , 24 , 'qtot' , .false. , .false., 'monthly' , '' , '' sn_qsr = 'flx' , 24 , 'qsr' , .false. , .false., 'monthly' , '' , '' sn_emp = 'flx' , 24 , 'emp' , .false. , .false., 'monthly' , '' , '' cn_dir = './' ! root directory for the location of the flux files / !----------------------------------------------------------------------- &namsbc_wave ! External fields from wave model !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_cdg = 'cdww' , ${FREQWAM:-6} , 'cdww' , .false. , .false. , 'monthly' , '' , '' , '' cn_dir = './' ! root directory for the location of drag coefficient files / !----------------------------------------------------------------------- &namsto ! Stochastic parametrization of EOS !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namtrd ! diagnostics on dynamics and/or tracer trends ! ! and/or mixed-layer trends and/or barotropic vorticity !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namsbc_wavepar ! namsbc_wavepar parameters from wave model (CCC not identical to namsbc_wave) !-----------------------------------------------------------------------/ sn_ust = 'ust' , ${FREQWAM:-6} , 'ust' , .false. , .false. , 'monthly' , '' , '', '' sn_vst = 'vst' , ${FREQWAM:-6} , 'vst' , .false. , .false. , 'monthly' , '' , '', '' sn_swh = 'swh' , ${FREQWAM:-6} , 'swh' , .false. , .false. , 'monthly' , '' , '', '' sn_mwp = 'mwp' , ${FREQWAM:-6} , 'mwp' , .false. , .false. , 'monthly' , '' , '', '' sn_wspd = 'wspd' , ${FREQWAM:-6} , 'wspd' , .false. , .false. , 'monthly' , '' , '', '' sn_phioc = 'phioc' , ${FREQWAM:-6} , 'phioc' , .false. , .false. , 'monthly' , '' , '', '' sn_tauoc = 'tauoc' , ${FREQWAM:-6} , 'tauoc' , .false. , .false. , 'monthly' , '' , '', '' cn_dir_wavepar = './' ! root directory for the location of the ECWAM files / !----------------------------------------------------------------------- &namsbc_waveparlim !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namsbc_fwb ! namsbc_fwb Fresh water budget !----------------------------------------------------------------------- rd_fwb = 1. ! time scale to apply fwb correction (days) ikt_fwb = 1 ! freq (time steps) to estimate fwb nr_ssh = $NR_SSH ! 0 for global sl=0. 1/2 for external SL/Mass file cn_dir ='./' ! root directory for location of ssh file sn_ssh = $SSHFILE, '' rcap = 1. ! mm/day cap for FWB adjusment lfwbr = $LFWBR / !----------------------------------------------------------------------- &namsbc_iif ! surface boundary condition for prescribed ice !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interpol. ! clim ! 'yearly' or ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! sn_ice = 'ice_cover' , 24 , 'ice_cov' , .false. , .false. , 'monthly', '', '' cn_dir = './' ! root for location of ice files dtice = 1. ! time scale for relaxation to sea-ice nn_ice_rel = $NAM_NN_ICE_REL ! Use pseudo-ice treatment / !----------------------------------------------------------------------- &nambias ! Parameters for bias corrections #ifdef key_bias) !----------------------------------------------------------------------- ln_bias = $LN_BIAS ! activate bias correction ln_bias_asm = $BIAS_ASM ! use assim bias ln_bias_rlx = .FALSE. ! use clim-relax bias ln_bias_ofl = $LN_BIAS_OFL ! use off-line bias ln_bias_ts_app= ${LN_BIAS_TS_APP:=.TRUE.} ! apply bias to Temp/Sal directly ln_bias_pc_app= ${LN_BIAS_PC_APP:=.TRUE.} ! apply bias to pressure gradient cn_bias_tot = 'bias_tot.nc' !file name with bias file (restart) cn_bias_asm = 'bias_asm.nc' !file name " " from assim ! dir and structures for offline bias (using fldread conventions) cn_dir = './' sn_tbias_ofl= 'tbias_ofl', -1,'tbias', .true., .true., 'yearly','' sn_sbias_ofl= 'sbias_ofl', -1,'sbias', .true., .true., 'yearly','' bias_time_unit_asm = $BIASTIMEUNITASM ! time unit of asm bias fb_t_asm = ${RN_FB_T_ASM:=0.02} ! partition of total bias for T/S fb_t_rlx = 1. ! " " " " in T/S fb_t_ofl = ${RN_FB_T_OFL:=.1} fb_p_rlx = 1. fb_p_asm = ${RN_FB_P_ASM:=0.3} fb_p_ofl = ${RN_FB_P_OFL:=1.} nn_inertial = $NN_INERTIAL !0/1/2 0/sin(lat)**2/gausian gphit0 = ${RN_GPHIT0:=10.} !length for guassian tappering fctamp = ${RN_FCTAMP:=10.} eft_rlx = 1800. ! efolding time for rlx bias estimation eft_asm = ${RN_EFT_ASM:=1800.} ! efolding time for asm bias estimation 5y t_rlx_upd = 0.05 ! update fct rlx bias " (0. -> 1.) t_asm_upd = ${RN_T_ASM_UPD:=0.05} ! update fct assim bias " (0. -> 1.) lrst_biasr =$LRST_BIASR !force to read bias file at first time step capN2val = ${CAPN2VAL:=-1} !if larger than 0, cap N2 min val (~1.e-6) / !----------------------------------------------------------------------- &namnc4 ! netcdf4 chunking and compression settings ("key_netcdf4") !----------------------------------------------------------------------- nn_nchunks_i= 4 ! number of chunks in i-dimension nn_nchunks_j= 4 ! number of chunks in j-dimension nn_nchunks_k= 75 ! number of chunks in k-dimension ! setting nn_nchunks_k = jpk will give a chunk size of 1 in the vertical which ! is optimal for postprocessing which works exclusively with horizontal slabs ln_nc4zip = ${NC4ZIP:-.false.} ! (T) use netcdf4 chunking and compression ! (F) ignore chunking information and produce netcdf3-compatible files / !----------------------------------------------------------------------- &namzdf_gls ! GLS vertical diffusion ("key_zdfgls") !----------------------------------------------------------------------- ln_gls_coldstart = .true. / !----------------------------------------------------------------------- &namsbc_prt ! perturbations to forcing (MAB 2014) !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_putau = 'putau' , 24 , 'utau' , .false. , .false., 'monthly' , '' , '', '' sn_pvtau = 'pvtau' , 24 , 'vtau' , .false. , .false., 'monthly' , '' , '', '' sn_pqns = 'pqns' , 24 , 'qns' , .false. , .false., 'monthly' , '' , '', '' sn_pqsr = 'pqsr' , 24 , 'qsr' , .false. , .false., 'monthly' , '' , '', '' sn_pemp = 'pemp' , 24 , 'emp' , .false. , .false., 'monthly' , '' , '', '' nn_putau = ${NAM_NN_PUTAU:=0} !0/1/2 for nothing/addpert/replace nn_pvtau = ${NAM_NN_PVTAU:=0} nn_pqns = ${NAM_NN_PQNS:=0} nn_pqsr = ${NAM_NN_PQSR:=0} nn_pemp = ${NAM_NN_PEMP:=0} cn_dir = './' ! root directory for the location of the pert files / eof_namelist if [[ ${ICEMOD:-0} = 3 ]]; then cat >namelist_ice_cfg<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !! NEMO/LIM-3 : Ice configuration namelist. Overwrites SHARED/namelist_ice_lim3_ref !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !----------------------------------------------------------------------- &namicerun ! Share parameters for dynamics/advection/thermo !----------------------------------------------------------------------- jpl = ${NLIM3CAT:-5} ! number of ice categories cn_icerst_in = "restart_ice_in"! suffix of ice restart name (input) cn_icerst_indir = "${RESTARTSDIR:-.}" ! directory from which to read input ice restarts cn_icerst_outdir = "${CN_OCERST_OUT_PATH:-./}" / !----------------------------------------------------------------------- &namiceini ! ice initialisation !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namicedyn ! ice dynamic !----------------------------------------------------------------------- / !------------------------------------------------------------------------------ &namicehdf ! Ice horizontal diffusion !------------------------------------------------------------------------------ nn_ahi0 = 2 ! horizontal diffusivity computation / !----------------------------------------------------------------------- &namicethd ! ice thermodynamic !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namicesal ! ice salinity !----------------------------------------------------------------------- / !------------------------------------------------------------------------------ &namiceitd ! Ice discretization !------------------------------------------------------------------------------ / !----------------------------------------------------------------------- &namiceitdme ! parameters for mechanical redistribution of ice !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namicedia ! ice diagnostics !----------------------------------------------------------------------- / eof_namelist else cat >namelist_ice_cfg<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !! NEMO/LIM-2 : Ice configuration namelist. Overwrites SHARED/namelist_ice_lim2_ref !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !----------------------------------------------------------------------- &namicerun ! Share parameters for dynamics/advection/thermo !----------------------------------------------------------------------- cn_icerst_indir = "${RESTARTSDIR:-.}" ! directory from which to read input ice restarts cn_icerst_outdir = "${CN_OCERST_OUT_PATH:-./}" / !----------------------------------------------------------------------- &namiceini ! ice initialisation !----------------------------------------------------------------------- ln_limini = $LN_INILIM ! read the initial state in 'Ice_initialization.nc' (T) or not (F) / !----------------------------------------------------------------------- &namicedyn ! ice dynamic !----------------------------------------------------------------------- dm = 0.0e+03 ! 0.6e+03 ! diffusion constant for dynamics nbitdr = ${NAM_NBITDR:-250} ! 100 ! maximum number of iterations for relaxation cw = ${NAM_LIM_CW:-1.0e-02} ! 5.0e-03 ! drag coefficient for oceanic stress pstar = $PSTAR_LIM ! 1.0e+04 ! 1st bulk-rheology parameter rn_creepl = 1.0e-09 ! 2.0e-08 ! creep limit ahi0 = ${NAM_LIM_ahi0:-100.e0} ! 200.e0 ! horizontal eddy diffusivity coefficient for sea-ice [m2/s] nn_nevp = 360 ! number of iterations for subcycling telast = 3600 ! timescale for elastic waves alphaevp = 1.0 ! coefficient for the solution of int. stresses / !----------------------------------------------------------------------- &namicetrp ! ice transport !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namicethd ! ice thermodynamic !----------------------------------------------------------------------- parsub = $PARSUB ! switch for snow sublimation or not hiccrit = ${NAM_LIM_NHHIC:-0.6} , ${NAM_LIM_SHHIC:-0.5} ! ice thickness for lateral accretion in the Northern (Southern) Hemisphere ! ! (caution 1.0, 1.0 best value to be used!!! (gilles G.)) / !----------------------------------------------------------------------- &namiceout ! parameters for outputs !----------------------------------------------------------------------- field_1 = 'Snow thickness ', 'isnowthi', 'm ', 1 , 1.0 , 0.0 field_2 = 'Ice thickness ', 'iicethic', 'm ', 1 , 1.0 , 0.0 field_3 = 'Ice produced ', 'iiceprod', 'm/kt ', 1 , 1.0 , 0.0 field_4 = 'Ice concentration ', 'ileadfra', 'Fraction', 1 , -1.0 , 1.0 field_5 = 'Ice temperature ', 'iicetemp', 'C ', 1 , 1.0 , -273.15 field_6 = 'Oceanic flux at the ice base ', 'ioceflxb', 'w/m2 ', 1 , 1.0 , 0.0 field_7 = 'Ice velocity along i axis ', 'iiceveli', 'm/s ', 0 , 1.0 , 0.0 field_8 = 'Ice velocity along j axis ', 'iicevelj', 'm/s ', 0 , 1.0 , 0.0 field_9 = 'Sea surface temperature ', 'isstempe', 'C ', 1 , 1.0 , 0.0 field_10 = 'Sea surface salinity ', 'isssalin', 'PSU ', 1 , 1.0 , 0.0 field_11 = 'Total flux at ocean surface ', 'iocetflx', 'w/m2 ', 0 , 1.0 , 0.0 field_12 = 'Solar flux at ocean surface ', 'iocesflx', 'w/m2 ', 0 , 1.0 , 0.0 field_13 = 'Non-solar flux at ocean surface ', 'iocwnsfl', 'w/m2 ', 0 , 1.0 , 0.0 field_14 = 'Salt flux at ocean surface ', 'iocesafl', 'kg/m2/kt', 1 , 1.0 , 0.0 field_15 = 'Wind stress along i axis ', 'iocestri', 'Pa ', 0 , 1.0 , 0.0 field_16 = 'Wind stress along j axis ', 'iocestrj', 'Pa ', 0 , 1.0 , 0.0 field_17 = 'Solar flux at ice/ocean surface ', 'iicesflx', 'w/m2 ', 1 , 1.0 , 0.0 field_18 = 'Non-solar flux at ice/ocean surface', 'iicenflx', 'w/m2 ', 1 , 1.0 , 0.0 field_19 = 'Snow precipitation ', 'isnowpre', 'kg/day ', 1 , 1.0 , 0.0 field_20 = '1st Qsr fraction penetrating ice ', 'iifr1_i0', '- ', 0 , 1.0 , 0.0 field_21 = '2nd Qsr fraction penetrating ice ', 'iifr2_i0', '- ', 0 , 1.0 , 0.0 field_22 = 'Ice velocity u ', 'iicevelu', 'm/s ', 1 , 1.0 , 0.0 field_23 = 'Ice velocity v ', 'iicevelv', 'm/s ', 1 , 1.0 , 0.0 field_24 = 'Wind stress u ', 'iocestru', 'Pa ', 0 , 1.0 , 0.0 field_25 = 'Wind stress v ', 'iocestrv', 'Pa ', 0 , 1.0 , 0.0 field_26 = 'Surface temperature (snow/ice/sst) ', 'isrftemp', 'C ', 1 , 1.0 , 0.0 field_27 = 'Ice mean thickness ', 'iicemthi', 'm ', 1 , 1.0 , 0.0 field_28 = 'Temp inside the ice/snow layer 1 ', 'iitempl1', 'C ', 1 , 1.0 , -273.15 field_29 = 'Temp inside the ice/snow layer 2 ', 'iitempl2', 'C ', 1 , 1.0 , -273.15 field_30 = 'Temp inside the ice/snow layer 3 ', 'iitempl3', 'C ', 1 , 1.0 , -273.15 / eof_namelist fi elif [[ ${OUT_GRID}_Z${OUT_LEVELS} = "ORCA025_1050_Z75" ]]; then NAM_LN_SMSLABEL=${NAM_LN_SMSLABEL:=.false.} NAM_NN_SMSFREQ=${NAM_NN_SMSFRQ:=72} cat >namelist_cfg<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !! NEMO/OPA : 1 - run manager (namrun) !! namelists 2 - Domain (namcfg, namzgr, namzgr_sco, namdom, namtsd) !! 3 - Surface boundary (namsbc, namsbc_ana, namsbc_flx, namsbc_clio, namsbc_core, namsbc_sas !! namsbc_cpl, namtra_qsr, namsbc_rnf, !! namsbc_apr, namsbc_ssr, namsbc_alb) !! 4 - lateral boundary (namlbc, namcla, namobc, namagrif, nambdy, nambdy_tide) !! 5 - bottom boundary (nambfr, nambbc, nambbl) !! 6 - Tracer (nameos, namtra_adv, namtra_ldf, namtra_dmp) !! 7 - dynamics (namdyn_adv, namdyn_vor, namdyn_hpg, namdyn_spg, namdyn_ldf) !! 8 - Verical physics (namzdf, namzdf_ric, namzdf_tke, namzdf_kpp, namzdf_ddm, namzdf_tmx) !! 9 - diagnostics (namnc4, namtrd, namspr, namflo, namhsb, namsto) !! 10 - miscellaneous (namsol, nammpp, namctl) !! 11 - Obs & Assim (namobs, nam_asminc) !!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !!====================================================================== !! *** Run management namelists *** !!====================================================================== !! namrun parameters of the run !!====================================================================== ! !----------------------------------------------------------------------- &namrun ! parameters of the run !----------------------------------------------------------------------- nn_no = $NCYC ! job number cn_exp = "$EXPVER" ! experience name nn_it000 = $NIT000 ! first time step nn_itend = $NITEND ! last time step (std 5475) nn_date0 = $NDATE0 ! initial calendar date yymmdd (used if nn_rstctl=1 nn_time0 = $NTIME0 ! initial calendar time in hours ln_usetime = $LNUSETIME ln_rstart = $LN_RESTART ! start from rest (F) or from a restart file (T) cn_ocerst_indir = "${RESTARTSDIR:-.}" ! directory from which to read input ocean restarts cn_ocerst_outdir = "${CN_OCERST_OUT_PATH:-./}" nn_stock = $NSTOCK ! frequency of creation of a restart file (modulo rerenced to 1) nn_write = $OUTFREQ ! frequency of write in the output file (modulo re) nn_leapy = 1 ! Leap year calendar (1) or not (0) nn_rstctl = 0 ! restart control ==> activated only if ln_rstart=T ! = 0 nn_date0 read in namelist ; nn_it000 : read in namelist ! = 1 nn_date0 read in namelist ; nn_it000 : check consistancy between namelist and restart ! = 2 nn_date0 read in restart ; nn_it000 : check consistancy between namelist and restart nn_slimrst = $NSLIMRST ! option of slim restart output (0:full; 1:nowfields+tke+sbc; 2:nowfields+sbc+en; 3:nowfields only) nn_slimrstin = ${NSLIMRSTIN:-0} ! Force slim restart on input ln_rsttime = ${LN_RSTTIME:-.true.} ! Use time in restart output names rather than time steps ln_writerst = ${LNWRITERST:-.true.} nn_itout = ${NITOUT:-$NIT000} nn_itfile = ${NAM_NN_ITFILE:=-1} ln_rcf_write = ${NEMO_LN_RCF_WRITE:-.false.} ln_rcf_read = ${NEMO_LN_RCF_READ:-.false.} ln_clobber = .true. / ! !!====================================================================== !! *** Domain namelists *** !!====================================================================== !! namcfg parameters of the configuration !! namzgr vertical coordinate !! namzgr_sco s-coordinate or hybrid z-s-coordinate !! namdom space and time domain (bathymetry, mesh, timestep) !! namtsd data: temperature & salinity !!====================================================================== ! !----------------------------------------------------------------------- &namcfg ! parameters of the configuration !----------------------------------------------------------------------- cp_cfg = "orca" ! name of the configuration cp_cfz = "no zoom" ! name of the zoom of configuration jp_cfg = 025 ! resolution of the configuration jpidta = 1442 ! 1st lateral dimension ( >= jpi ) ! jpjdta = 1207 ! 2nd " " ( >= jpj ) jpjdta = 1050 ! 2nd " " ( >= jpj ) jpkdta = 75 ! number of levels ( >= jpk ) jpiglo = 1442 ! 1st dimension of global domain --> i =jpidta ! jpjglo = 1207 ! 2nd - - --> j =jpjdta jpjglo = 1050 ! 2nd - - --> j =jpjdta jpizoom = 1 ! left bottom (i,j) indices of the zoom jpjzoom = 1 ! in data domain indices jperio = 4 ! lateral cond. type (between 0 and 6) ! = 0 closed ; = 1 cyclic East-West ! = 2 equatorial symmetric ; = 3 North fold T-point pivot ! = 4 cyclic East-West AND North fold T-point pivot ! = 5 North fold F-point pivot ! = 6 cyclic East-West AND North fold F-point pivot ln_use_jattr = .false. ! use (T) the file attribute: open_ocean_jstart, if present ! in netcdf input files, as the start j-row for reading ln_trabbl = .false. ! key_trabbl not set nn_ldfdyn = 2 ! key_dynldf_c2d ln_zdfddm = .true. ! key_zdfddm not set ln_traldf_eiv = .false. ! key_traldf_eiv not set / !----------------------------------------------------------------------- &namzgr ! vertical coordinate !----------------------------------------------------------------------- ln_zco = .false. ! z-coordinate - full steps (T/F) ("key_zco" may also be defined) ln_zps = .true. ! z-coordinate - partial steps (T/F) ln_sco = .false. ! s- or hybrid z-s-coordinate (T/F) ln_isfcav = .false. ! ice shelf cavity (T/F) / !----------------------------------------------------------------------- &namzgr_sco ! s-coordinate or hybrid z-s-coordinate !----------------------------------------------------------------------- ln_s_sh94 = .true. ! Song & Haidvogel 1994 hybrid S-sigma (T)| ln_s_sf12 = .false. ! Siddorn & Furner 2012 hybrid S-z-sigma (T)| if both are false the NEMO tanh stretching is applied ln_sigcrit = .false. ! use sigma coordinates below critical depth (T) or Z coordinates (F) for Siddorn & Furner stretch ! stretching coefficients for all functions rn_sbot_min = 10.0 ! minimum depth of s-bottom surface (>0) (m) rn_sbot_max = 7000.0 ! maximum depth of s-bottom surface (= ocean depth) (>0) (m) rn_hc = 150.0 ! critical depth for transition to stretched coordinates !!!!!!! Envelop bathymetry rn_rmax = 0.3 ! maximum cut-off r-value allowed (00) or min number of ocean level (<0) rn_e3zps_min= 25. ! partial step thickness is set larger than the minimum of rn_e3zps_rat= 0.1 ! rn_e3zps_min and rn_e3zps_rat*e3t, with 0 fill namsbc_flx ) ln_blk_core = $NAM_LN_BLK ! CORE bulk formulation (T => fill namsbc_core) nn_ice = $NAM_NN_ICE ! =0 no ice boundary condition , ! =1 use observed ice-cover , ! =2 ice-model used ("key_ ln_blk = $NAM_LN_BLK_ALGO nn_hbp = 1 nn_ice_embd = 1 ! =0 levitating ice (no mass exchange, concentration/dilution effect) ! =1 levitating ice with mass and salt exchange but no presure effect ! =2 embedded sea-ice (full salt and mass exchanges and pressure) ln_dm2dc = .true. ! daily mean to diurnal cycle on short wave ln_rnf = .true. ! runoffs (T => fill namsbc_rnf) nn_isf = 0 ! ice shelf melting/freezing (/=0 => fill namsbc_isf) ! 0 =no isf 1 = presence of ISF ! 2 = bg03 parametrisation 3 = rnf file for isf ! 4 = ISF fwf specified ! option 1 and 4 need ln_isfcav = .true. (domzgr) ln_ssr = .true. ! Sea Surface Restoring on T and/or S (T => fill namsbc_ssr) ln_wave = .false. ! Activate coupling with wave (either Stokes Drift or Drag coefficient, or both) (T => fill namsbc_wave) ln_sdw = .false. ! Computation of 3D stokes drift (T => fill namsbc_wave) nn_lsm = 0 ! =0 land/sea mask for input fields is not applied (keep empty land/sea mask filename field) , ! =1:n number of iterations of land/sea mask application for input fields (fill land/sea mask filename field) nn_limflx = -1 ! LIM3 Multi-category heat flux formulation (use -1 if LIM3 is not used) ! =-1 Use per-category fluxes, bypass redistributor, forced mode only, not yet implemented coupled ! = 0 Average per-category fluxes (forced and coupled mode) ! = 1 Average and redistribute per-category fluxes, forced mode only, not yet implemented coupled ! = 2 Redistribute a single flux over categories (coupled mode only) ln_cdgw = ${NAM_LN_CDWW:-false} ! Neutral drag coefficient read from wave model ln_stcor = ${NAM_LN_STCOR:-false} ! Stokes drift read from wave model ln_wavetke = ${NAM_LN_WAVETKE:-false} ! TKE wave parameters read from wave model ln_tauoc = ${NAM_LN_TAUOC:-false} ! Wave-modified stress from wave model ln_wbrsource = ${NAM_LN_WBRSOURCE:-false} ! TKE from wave breaking as source function ln_pert = ${NAM_LNREAD_PERT:-false} ! Option to read surf pert ln_wicestrn = ${NAM_LN_WICESTRN:-false} ln_wave = .true. nn_fwb = ${NN_FWB} / !----------------------------------------------------------------------- &namsbc_ana ! analytical surface boundary condition !----------------------------------------------------------------------- nn_tau000 = 0 ! gently increase the stress over the first ntau_rst time-steps rn_utau0 = 0.5 ! uniform value for the i-stress rn_vtau0 = 0.e0 ! uniform value for the j-stress rn_qns0 = 0.e0 ! uniform value for the total heat flux rn_qsr0 = 0.e0 ! uniform value for the solar radiation rn_emp0 = 0.e0 ! uniform value for the freswater budget (E-P) / !----------------------------------------------------------------------- &namsbc_flx ! surface boundary condition : flux formulation !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_utau = 'utau' , 24 , 'utau' , .false. , .false., 'yearly' , '' , '' , '' sn_vtau = 'vtau' , 24 , 'vtau' , .false. , .false., 'yearly' , '' , '' , '' sn_qtot = 'qtot' , 24 , 'qtot' , .false. , .false., 'yearly' , '' , '' , '' sn_qsr = 'qsr' , 24 , 'qsr' , .false. , .false., 'yearly' , '' , '' , '' sn_emp = 'emp' , 24 , 'emp' , .false. , .false., 'yearly' , '' , '' , '' cn_dir = './' ! root directory for the location of the flux files / !----------------------------------------------------------------------- &namsbc_clio ! namsbc_clio CLIO bulk formulae !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_utau = 'taux_1m' , -1 , 'sozotaux', .true. , .true. , 'yearly' , '' , '' , '' sn_vtau = 'tauy_1m' , -1 , 'sometauy', .true. , .true. , 'yearly' , '' , '' , '' sn_wndm = 'flx' , -1 , 'socliowi', .true. , .true. , 'yearly' , '' , '' , '' sn_tair = 'flx' , -1 , 'socliot2', .true. , .true. , 'yearly' , '' , '' , '' sn_humi = 'flx' , -1 , 'socliohu', .true. , .true. , 'yearly' , '' , '' , '' sn_ccov = 'flx' , -1 , 'socliocl', .false. , .true. , 'yearly' , '' , '' , '' sn_prec = 'flx' , -1 , 'socliopl', .false. , .true. , 'yearly' , '' , '' , '' cn_dir = './' ! root directory for the location of the bulk files are / !----------------------------------------------------------------------- &namsbc_core ! namsbc_core CORE bulk formulae !----------------------------------------------------------------------- ln_cldcov = ${LNBULKCLD:-.false.} sn_wndi = 'u10' , ${FREQAN:-6} , 'u10' , .false. , .false. , 'monthly' , '' , '' sn_wndj = 'v10' , ${FREQAN:-6} , 'v10' , .false. , .false. , 'monthly' , '' , '' sn_qsr = 'accum' , ${FREQFC:-24} , 'swdn' , .false. , .false. , 'monthly' , '' , '' sn_qlw = 'accum' , ${FREQFC:-24} , 'lwdn' , .false. , .false. , 'monthly' , '' , '' sn_tair = 'qtml' , ${FREQAN:-6} , 't10' , .false. , .false. , 'monthly' , '' , '' sn_humi = 'qtml' , ${FREQAN:-6} , 'q10' , .false. , .false. , 'monthly' , '' , '' sn_prec = 'accum' , ${FREQFC:-24} , 'precip' , .false. , .false. , 'monthly' , '' , '' sn_snow = 'accum' , ${FREQFC:-24} , 'snow' , .false. , .false. , 'monthly' , '' , '' sn_ccov = '${CLDCOVTYP:-tcc}', ${FREQAN:-6} , '${CLDCOVTYP:-tcc}', .false. , .false. ,'yearly' , '' , '' , '' ln_cdec = ${NAM_LN_CDEC:-true} ! Switch to ECMWF drag rn_vfac = ${NAM_RN_RRELWIND:-1.0} / !----------------------------------------------------------------------- &namsbc_blk ! namsbc_blk generic Bulk formula (ln_blk = T) !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_wndi = 'u10' , ${FREQAN:-6} , 'u10' , .false. , .false. , 'monthly' , '' , '' sn_wndj = 'v10' , ${FREQAN:-6} , 'v10' , .false. , .false. , 'monthly' , '' , '' sn_qsr = 'accum' , ${FREQFC:-24} , 'swdn' , .false. , .false. , 'monthly' , '' , '' sn_qlw = 'accum' , ${FREQFC:-24} , 'lwdn' , .false. , .false. , 'monthly' , '' , '' sn_tair = 'qtml' , ${FREQAN:-6} , 't10' , .false. , .false. , 'monthly' , '' , '' sn_humi = 'qtml' , ${FREQAN:-6} , 'q10' , .false. , .false. , 'monthly' , '' , '' sn_prec = 'accum' , ${FREQFC:-24} , 'precip' , .false. , .false. , 'monthly' , '' , '' sn_snow = 'accum' , ${FREQFC:-24} , 'snow' , .false. , .false. , 'monthly' , '' , '' sn_slp = 'slp' , ${FREQAN:-6} , 'slp' , .false. , .false. , 'monthly' , '' , '' ! ! bulk algorithm : ln_ECMWF = .true. ! "ECMWF" algorithm (IFS cycle 31) ! / !----------------------------------------------------------------------- &namsbc_mfs ! namsbc_mfs MFS bulk formulae !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_wndi = 'ecmwf' , 6 , 'u10' , .true. , .false. , 'daily' ,'bicubic.nc' , '' , '' sn_wndj = 'ecmwf' , 6 , 'v10' , .true. , .false. , 'daily' ,'bicubic.nc' , '' , '' sn_clc = 'ecmwf' , 6 , 'clc' , .true. , .false. , 'daily' ,'bilinear.nc', '' , '' sn_msl = 'ecmwf' , 6 , 'msl' , .true. , .false. , 'daily' ,'bicubic.nc' , '' , '' sn_tair = 'ecmwf' , 6 , 't2' , .true. , .false. , 'daily' ,'bicubic.nc' , '' , '' sn_rhm = 'ecmwf' , 6 , 'rh' , .true. , .false. , 'daily' ,'bilinear.nc', '' , '' sn_prec = 'ecmwf' , 6 , 'precip' , .true. , .true. , 'daily' ,'bicubic.nc' , '' , '' cn_dir = './ECMWF/' ! root directory for the location of the bulk files / !----------------------------------------------------------------------- &namsbc_cpl ! coupled ocean/atmosphere model ("key_oasis3") !----------------------------------------------------------------------- ! ! description ! multiple ! vector ! vector ! vector ! ! ! ! categories ! reference ! orientation ! grids ! ! send sn_snd_temp = 'weighted oce and ice' , 'no' , '' , '' , '' sn_snd_alb = 'weighted ice' , 'no' , '' , '' , '' sn_snd_thick = 'none' , 'no' , '' , '' , '' sn_snd_crt = 'none' , 'no' , 'spherical' , 'eastward-northward' , 'T' sn_snd_co2 = 'coupled' , 'no' , '' , '' , '' ! receive sn_rcv_w10m = 'none' , 'no' , '' , '' , '' sn_rcv_taumod = 'coupled' , 'no' , '' , '' , '' sn_rcv_tau = 'oce only' , 'no' , 'cartesian' , 'eastward-northward', 'U,V' sn_rcv_dqnsdt = 'coupled' , 'no' , '' , '' , '' sn_rcv_qsr = 'oce and ice' , 'no' , '' , '' , '' sn_rcv_qns = 'oce and ice' , 'no' , '' , '' , '' sn_rcv_emp = 'conservative' , 'no' , '' , '' , '' sn_rcv_rnf = 'coupled' , 'no' , '' , '' , '' sn_rcv_cal = 'coupled' , 'no' , '' , '' , '' sn_rcv_co2 = 'coupled' , 'no' , '' , '' , '' ! nn_cplmodel = 1 ! Maximum number of models to/from which NEMO is potentialy sending/receiving data ln_usecplmask = .false. ! use a coupling mask file to merge data received from several models ! -> file cplmask.nc with the float variable called cplmask (jpi,jpj,nn_cplmodel) / !----------------------------------------------------------------------- &namsbc_sas ! analytical surface boundary condition !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_usp = 'sas_grid_U' , 120 , 'vozocrtx' , .true. , .true. , 'yearly' , '' , '' , '' sn_vsp = 'sas_grid_V' , 120 , 'vomecrty' , .true. , .true. , 'yearly' , '' , '' , '' sn_tem = 'sas_grid_T' , 120 , 'sosstsst' , .true. , .true. , 'yearly' , '' , '' , '' sn_sal = 'sas_grid_T' , 120 , 'sosaline' , .true. , .true. , 'yearly' , '' , '' , '' sn_ssh = 'sas_grid_T' , 120 , 'sossheig' , .true. , .true. , 'yearly' , '' , '' , '' sn_e3t = 'sas_grid_T' , 120 , 'e3t_m' , .true. , .true. , 'yearly' , '' , '' , '' sn_frq = 'sas_grid_T' , 120 , 'frq_m' , .true. , .true. , 'yearly' , '' , '' , '' ln_3d_uve = .true. ! specify whether we are supplying a 3D u,v and e3 field ln_read_frq = .false. ! specify whether we must read frq or not cn_dir = './' ! root directory for the location of the bulk files are / !----------------------------------------------------------------------- &namtra_qsr ! penetrative solar radiation !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_chl ='merged_ESACCI_BIOMER4V1R1_CHL_REG05', -1 , 'CHLA' , .true. , .true. , 'yearly' , 'weights_reg05_bilinear.nc' , '', '' cn_dir = './' ! root directory for the location of the runoff files ln_traqsr = .true. ! Light penetration (T) or not (F) ln_qsr_rgb = .true. ! RGB (Red-Green-Blue) light penetration ln_qsr_2bd = .false. ! 2 bands light penetration ln_qsr_bio = .false. ! bio-model light penetration nn_chldta = 1 ! RGB : 2D Chl data (=1), 3D Chl data (=2) or cst value (=0) rn_abs = 0.58 ! RGB & 2 bands: fraction of light (rn_si1) rn_si0 = 0.35 ! RGB & 2 bands: shortess depth of extinction rn_si1 = 23.0 ! 2 bands: longest depth of extinction ln_qsr_ice = .true. ! light penetration for ice-model LIM3 / !----------------------------------------------------------------------- &namsbc_rnf ! runoffs namelist surface boundary condition !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_rnf = 'runoff' , -1 , 'sornficb', .true. , .true. , 'yearly' , '' , '' , '' sn_cnf = 'runoff' , 0 , 'socoefr' , .false. , .true. , 'yearly' , '' , '' , '' sn_s_rnf = 'runoff' , 24 , 'rosaline', .true. , .true. , 'yearly' , '' , '' , '' sn_t_rnf = 'runoff' , 24 , 'rotemper', .true. , .true. , 'yearly' , '' , '' , '' sn_dep_rnf = 'runoff' , 0 , 'rodepth' , .false. , .true. , 'yearly' , '' , '' , '' cn_dir = './' ! root directory for the location of the runoff files ln_rnf_mouth = .false. !!true. !rbb.false. ! specific treatment at rivers mouths rn_hrnf = 10. ! depth over which enhanced vertical mixing is used rn_avt_rnf = 2.e-3 ! value of the additional vertical mixing coef. [m2/s] rn_rfact = 1.e0 ! multiplicative factor for runoff ln_rnf_depth = .false. ! read in depth information for runoff ln_rnf_tem = .false. ! read in temperature information for runoff ln_rnf_sal = .false. ! read in salinity information for runoff ln_rnf_depth_ini = .false. ! compute depth at initialisation from runoff file rn_rnf_max = 5.735e-4 ! max value of the runoff climatologie over global domain ( ln_rnf_depth_ini = .true ) rn_dep_max = 150. ! depth over which runoffs is spread ( ln_rnf_depth_ini = .true ) nn_rnf_depth_file = 0 ! create (=1) a runoff depth file or not (=0) / !----------------------------------------------------------------------- &namsbc_isf ! Top boundary layer (ISF) !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interpol. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! ! nn_isf == 4 sn_qisf = 'rnfisf' , -12 ,'sohflisf', .false. , .true. , 'yearly' , '' , '' sn_fwfisf = 'rnfisf' , -12 ,'sowflisf', .false. , .true. , 'yearly' , '' , '' ! nn_isf == 3 sn_rnfisf = 'runoffs' , -12 ,'sofwfisf', .false. , .true. , 'yearly' , '' , '' ! nn_isf == 2 and 3 sn_depmax_isf = 'runoffs' , -12 ,'sodepmax_isf' , .false. , .true. , 'yearly' , '' , '' sn_depmin_isf = 'runoffs' , -12 ,'sodepmin_isf' , .false. , .true. , 'yearly' , '' , '' ! nn_isf == 2 sn_Leff_isf = 'rnfisf' , 0 ,'Leff' , .false. , .true. , 'yearly' , '' , '' ! for all case ln_divisf = .true. ! apply isf melting as a mass flux or in the salinity trend. (maybe I should remove this option as for runoff?) ! only for nn_isf = 1 or 2 rn_gammat0 = 1.0e-4 ! gammat coefficient used in blk formula rn_gammas0 = 1.0e-4 ! gammas coefficient used in blk formula ! only for nn_isf = 1 nn_isfblk = 1 ! 1 ISOMIP ; 2 conservative (3 equation formulation, Jenkins et al. 1991 ??) rn_hisf_tbl = 30. ! thickness of the top boundary layer (Losh et al. 2008) ! 0 => thickness of the tbl = thickness of the first wet cell ln_conserve = .true. ! conservative case (take into account meltwater advection) nn_gammablk = 1 ! 0 = cst Gammat (= gammat/s) ! 1 = velocity dependend Gamma (u* * gammat/s) (Jenkins et al. 2010) ! if you want to keep the cd as in global config, adjust rn_gammat0 to compensate ! 2 = velocity and stability dependent Gamma Holland et al. 1999 / !----------------------------------------------------------------------- &namsbc_apr ! Atmospheric pressure used as ocean forcing or in bulk !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_apr = 'patm' , -1 ,'somslpre', .true. , .true. , 'yearly' , '' , '' , '' cn_dir = './' ! root directory for the location of the bulk files rn_pref = 101000. ! reference atmospheric pressure [N/m2]/ ln_ref_apr = .false. ! ref. pressure: global mean Patm (T) or a constant (F) ln_apr_obc = .false. ! inverse barometer added to OBC ssh data / !----------------------------------------------------------------------- &namsbc_ssr ! surface boundary condition : sea surface restoring !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_sst = 'sst_data' , 24 , 'sst' , .false. , .false., 'yearly' , '' , '' , '' sn_sss = 'sss_absolute_salinity_WOA13_decav_Reg1L75_clim' , -1 , 'sosaline' , .true. , .true. , 'yearly' , 'weights_WOA13d2_bilinear.nc','' ,'' cn_dir = './' ! root directory for the location of the runoff files nn_sstr = 0 ! add a retroaction term in the surface heat flux (=1) or not (=0) nn_sssr = 2 ! add a damping term in the surface freshwater flux (=2) ! or to SSS only (=1) or no damping term (=0) rn_dqdt = -40. ! magnitude of the retroaction on temperature [W/m2/K] rn_deds = -166.67 ! magnitude of the damping on salinity [mm/day] ln_sssr_bnd = .true. ! flag to bound erp term (associated with nn_sssr=2) rn_sssr_bnd = 4.e0 ! ABS(Max/Min) value of the damping erp term [mm/day] / !----------------------------------------------------------------------- &namsbc_alb ! albedo parameters !----------------------------------------------------------------------- nn_ice_alb = 1 ! parameterization of ice/snow albedo ! 0: Shine & Henderson-Sellers (JGR 1985), giving clear-sky albedo ! 1: "home made" based on Brandt et al. (JClim 2005) and Grenfell & Perovich (JGR 2004), ! giving cloud-sky albedo rn_alb_sdry = 0.85 ! dry snow albedo : 0.80 (nn_ice_alb = 0); 0.85 (nn_ice_alb = 1); obs 0.85-0.87 (cloud-sky) rn_alb_smlt = 0.75 ! melting snow albedo : 0.65 ( '' ) ; 0.75 ( '' ) ; obs 0.72-0.82 ( '' ) rn_alb_idry = 0.60 ! dry ice albedo : 0.72 ( '' ) ; 0.60 ( '' ) ; obs 0.54-0.65 ( '' ) rn_alb_imlt = 0.50 ! bare puddled ice albedo : 0.53 ( '' ) ; 0.50 ( '' ) ; obs 0.49-0.58 ( '' ) / !----------------------------------------------------------------------- &namberg ! iceberg parameters !----------------------------------------------------------------------- ln_icebergs = .false. ln_bergdia = .false. ! Calculate budgets nn_verbose_level = 0 ! Turn on more verbose output if level > 0 nn_verbose_write = 120 ! Timesteps between verbose messages nn_sample_rate = 1 ! Timesteps between sampling for trajectory storage ! Initial mass required for an iceberg of each class rn_initial_mass = 8.8e7, 4.1e8, 3.3e9, 1.8e10, 3.8e10, 7.5e10, 1.2e11, 2.2e11, 3.9e11, 7.4e11 ! Proportion of calving mass to apportion to each class rn_distribution = 0.24, 0.12, 0.15, 0.18, 0.12, 0.07, 0.03, 0.03, 0.03, 0.02 ! Ratio between effective and real iceberg mass (non-dim) ! i.e. number of icebergs represented at a point rn_mass_scaling = 2000, 200, 50, 20, 10, 5, 2, 1, 1, 1 ! thickness of newly calved bergs (m) rn_initial_thickness = 40., 67., 133., 175., 250., 250., 250., 250., 250., 250. rn_rho_bergs = 850. ! Density of icebergs rn_LoW_ratio = 1.5 ! Initial ratio L/W for newly calved icebergs ln_operator_splitting = .true. ! Use first order operator splitting for thermodynamics rn_bits_erosion_fraction = 0. ! Fraction of erosion melt flux to divert to bergy bits rn_sicn_shift = 0. ! Shift of sea-ice concn in erosion flux (0 surface CT converted in Pot. Temp. in sbcssm ! ! ! ! S-EOS coefficients : ! ! rd(T,S,Z)*rau0 = -a0*(1+.5*lambda*dT+mu*Z+nu*dS)*dT+b0*dS rn_a0 = 1.6550e-1 ! thermal expension coefficient (nn_eos= 1) rn_b0 = 7.6554e-1 ! saline expension coefficient (nn_eos= 1) rn_lambda1 = 5.9520e-2 ! cabbeling coeff in T^2 (=0 for linear eos) rn_lambda2 = 7.4914e-4 ! cabbeling coeff in S^2 (=0 for linear eos) rn_mu1 = 1.4970e-4 ! thermobaric coeff. in T (=0 for linear eos) rn_mu2 = 1.1090e-5 ! thermobaric coeff. in S (=0 for linear eos) rn_nu = 2.4341e-3 ! cabbeling coeff in T*S (=0 for linear eos) / !----------------------------------------------------------------------- &namtra_adv ! advection scheme for tracer !----------------------------------------------------------------------- ln_traadv_cen2 = .false. ! 2nd order centered scheme ln_traadv_tvd = .true. ! TVD scheme ln_traadv_muscl = .false. ! MUSCL scheme ln_traadv_muscl2 = .false. ! MUSCL2 scheme + cen2 at boundaries ln_traadv_ubs = .false. ! UBS scheme ln_traadv_qck = .false. ! QUICKEST scheme ln_traadv_msc_ups= .false. ! use upstream scheme within muscl ln_traadv_tvd_zts= .false. ! TVD scheme with sub-timestepping of vertical tracer advection / !----------------------------------------------------------------------- &namtra_adv_mle ! mixed layer eddy parametrisation (Fox-Kemper param) !----------------------------------------------------------------------- ln_mle = .false. ! (T) use the Mixed Layer Eddy (MLE) parameterisation rn_ce = 0.06 ! magnitude of the MLE (typical value: 0.06 to 0.08) nn_mle = 1 ! MLE type: =0 standard Fox-Kemper ; =1 new formulation rn_lf = 5.e+3 ! typical scale of mixed layer front (meters) (case rn_mle=0) rn_time = 172800. ! time scale for mixing momentum across the mixed layer (seconds) (case rn_mle=0) rn_lat = 20. ! reference latitude (degrees) of MLE coef. (case rn_mle=1) nn_mld_uv = 0 ! space interpolation of MLD at u- & v-pts (0=min,1=averaged,2=max) nn_conv = 0 ! =1 no MLE in case of convection ; =0 always MLE rn_rho_c_mle = 0.01 ! delta rho criterion used to calculate MLD for FK / !---------------------------------------------------------------------------------- &namtra_ldf ! lateral diffusion scheme for tracers !---------------------------------------------------------------------------------- ! ! Operator type: ln_traldf_lap = .true. ! laplacian operator ln_traldf_bilap = .false. ! bilaplacian operator ! ! Direction of action: ln_traldf_level = .false. ! iso-level ln_traldf_hor = .false. ! horizontal (geopotential) (needs "key_ldfslp" when ln_sco=T) ln_traldf_iso = .true. ! iso-neutral (needs "key_ldfslp") ! ! Griffies parameters (all need "key_ldfslp") ln_traldf_grif = .false. ! use griffies triads ln_traldf_gdia = .false. ! output griffies eddy velocities ln_triad_iso = .false. ! pure lateral mixing in ML ln_botmix_grif = .false. ! lateral mixing on bottom ! ! Coefficients ! Eddy-induced (GM) advection always used with Griffies; otherwise needs "key_traldf_eiv" ! Value rn_aeiv_0 is ignored unless = 0 with Held-Larichev spatially varying aeiv ! (key_traldf_c2d & key_traldf_eiv & key_orca_r2, _r1 or _r05) rn_aeiv_0 = 0. ! eddy induced velocity coefficient [m2/s] rn_aht_0 = 300. ! horizontal eddy diffusivity for tracers [m2/s] rn_ahtb_0 = 0. ! background eddy diffusivity for ldf_iso [m2/s] ! (normally=0; not used with Griffies) rn_slpmax = 0.01 ! slope limit rn_chsmag = 1. ! multiplicative factor in Smagorinsky diffusivity rn_smsh = 0. ! Smagorinsky diffusivity: = 0 - use only sheer rn_aht_m = 2000. ! upper limit or stability criteria for lateral eddy diffusivity (m2/s) / !----------------------------------------------------------------------- &namtra_dmp ! tracer: T & S newtonian damping !----------------------------------------------------------------------- ln_tradmp = .false. ! add a damping termn (T) or not (F) nn_zdmp = 1 ! vertical shape =0 damping throughout the water column ! =1 no damping in the mixing layer (kz criteria) ! =2 no damping in the mixed layer (rho crieria) cn_resto = 'resto.nc' ! Name of file containing restoration coefficient field (use dmp_tools to create this) / !!====================================================================== !! *** Dynamics namelists *** !!====================================================================== !! namdyn_adv formulation of the momentum advection !! namdyn_vor advection scheme !! namdyn_hpg hydrostatic pressure gradient !! namdyn_spg surface pressure gradient (CPP key only) !! namdyn_ldf lateral diffusion scheme !!====================================================================== ! !----------------------------------------------------------------------- &namdyn_adv ! formulation of the momentum advection !----------------------------------------------------------------------- ln_dynadv_vec = .true. ! vector form (T) or flux form (F) nn_dynkeg = 1 ! scheme for grad(KE): =0 C2 ; =1 Hollingsworth correction ln_dynadv_cen2= .false. ! flux form - 2nd order centered scheme ln_dynadv_ubs = .false. ! flux form - 3rd order UBS scheme ln_dynzad_zts = .false. ! Use (T) sub timestepping for vertical momentum advection / !----------------------------------------------------------------------- &nam_vvl ! vertical coordinate options !----------------------------------------------------------------------- ln_vvl_zstar = .true. ! zstar vertical coordinate ln_vvl_ztilde = .false. ! ztilde vertical coordinate: only high frequency variations ln_vvl_layer = .false. ! full layer vertical coordinate ln_vvl_ztilde_as_zstar = .false. ! ztilde vertical coordinate emulating zstar ln_vvl_zstar_at_eqtor = .false. ! ztilde near the equator rn_ahe3 = 0.0e0 ! thickness diffusion coefficient rn_rst_e3t = 30.e0 ! ztilde to zstar restoration timescale [days] rn_lf_cutoff = 5.0e0 ! cutoff frequency for low-pass filter [days] rn_zdef_max = 0.9e0 ! maximum fractional e3t deformation ln_vvl_dbg = .true. ! debug prints (T/F) / !----------------------------------------------------------------------- &namdyn_vor ! option of physics/algorithm (not control by CPP keys) !----------------------------------------------------------------------- ln_dynvor_ene = .false. ! enstrophy conserving scheme ln_dynvor_ens = .false. ! energy conserving scheme ln_dynvor_mix = .false. ! mixed scheme ln_dynvor_een = .true. ! energy & enstrophy scheme ln_dynvor_een_old = .false. ! energy & enstrophy scheme - original formulation / !----------------------------------------------------------------------- &namdyn_hpg ! Hydrostatic pressure gradient option !----------------------------------------------------------------------- ln_hpg_zco = .false. ! z-coordinate - full steps ln_hpg_zps = .false. ! z-coordinate - partial steps (interpolation) ln_hpg_sco = .true. ! s-coordinate (standard jacobian formulation) ln_hpg_isf = .false. ! s-coordinate (sco ) adapted to isf ln_hpg_djc = .false. ! s-coordinate (Density Jacobian with Cubic polynomial) ln_hpg_prj = .false. ! s-coordinate (Pressure Jacobian scheme) ln_dynhpg_imp = .false. ! time stepping: semi-implicit time scheme (T) ! centered time scheme (F) / !----------------------------------------------------------------------- !namdyn_spg ! surface pressure gradient (CPP key only) !----------------------------------------------------------------------- ! ! explicit free surface ("key_dynspg_exp") ! ! filtered free surface ("key_dynspg_flt") ! ! split-explicit free surface ("key_dynspg_ts") !----------------------------------------------------------------------- &namdyn_ldf ! lateral diffusion on momentum !----------------------------------------------------------------------- ! ! Type of the operator : ln_dynldf_lap = .false. ! laplacian operator ln_dynldf_bilap = .true. ! bilaplacian operator ! ! Direction of action : ln_dynldf_level = .false. ! iso-level ln_dynldf_hor = .true. ! horizontal (geopotential) (require "key_ldfslp" in s-coord.) ln_dynldf_iso = .false. ! iso-neutral (require "key_ldfslp") ! ! Coefficient rn_ahm_0_lap = 0. ! horizontal laplacian eddy viscosity [m2/s] rn_ahmb_0 = 0. ! background eddy viscosity for ldf_iso [m2/s] rn_ahm_0_blp = -6.4e11 ! horizontal bilaplacian eddy viscosity [m4/s] rn_cmsmag_1 = 3. ! constant in laplacian Smagorinsky viscosity rn_cmsmag_2 = 3 ! constant in bilaplacian Smagorinsky viscosity rn_cmsh = 0. ! 1 or 0 , if 0 -use only shear for Smagorinsky viscosity rn_ahm_m_blp = -1.e12 ! upper limit for bilap abs(ahm) < min( dx^4/128rdt, rn_ahm_m_blp) rn_ahm_m_lap = 40000. ! upper limit for lap ahm < min(dx^2/16rdt, rn_ahm_m_lap) / !!====================================================================== !! Tracers & Dynamics vertical physics namelists !!====================================================================== !! namzdf vertical physics !! namzdf_ric richardson number dependent vertical mixing ("key_zdfric") !! namzdf_tke TKE dependent vertical mixing ("key_zdftke") !! namzdf_kpp KPP dependent vertical mixing ("key_zdfkpp") !! namzdf_ddm double diffusive mixing parameterization ("key_zdfddm") !! namzdf_tmx tidal mixing parameterization ("key_zdftmx") !! namzdf_tmx_new new tidal mixing parameterization ("key_zdftmx_new") !!====================================================================== ! !----------------------------------------------------------------------- &namzdf ! vertical physics !----------------------------------------------------------------------- rn_avm0 = 1.e-4 ! vertical eddy viscosity [m2/s] (background Kz if not "key_zdfcst") rn_avt0 = 1.e-5 ! vertical eddy diffusivity [m2/s] (background Kz if not "key_zdfcst") nn_avb = 0 ! profile for background avt & avm (=1) or not (=0) nn_havtb = 1 ! horizontal shape for avtb (=1) or not (=0) ln_zdfevd = .true. ! enhanced vertical diffusion (evd) (T) or not (F) nn_evdm = 1 ! evd apply on tracer (=0) or on tracer and momentum (=1) rn_avevd = 10. ! evd mixing coefficient [m2/s] ln_zdfnpc = .false. ! Non-Penetrative Convective algorithm (T) or not (F) nn_npc = 1 ! frequency of application of npc nn_npcp = 365 ! npc control print frequency ln_zdfexp = .false. ! time-stepping: split-explicit (T) or implicit (F) time stepping nn_zdfexp = 3 ! number of sub-timestep for ln_zdfexp=T / !----------------------------------------------------------------------- &namzdf_ric ! richardson number dependent vertical diffusion ("key_zdfric" ) !----------------------------------------------------------------------- rn_avmri = 100.e-4 ! maximum value of the vertical viscosity rn_alp = 5. ! coefficient of the parameterization nn_ric = 2 ! coefficient of the parameterization rn_ekmfc = 0.7 ! Factor in the Ekman depth Equation rn_mldmin = 1.0 ! minimum allowable mixed-layer depth estimate (m) rn_mldmax =1000.0 ! maximum allowable mixed-layer depth estimate (m) rn_wtmix = 10.0 ! vertical eddy viscosity coeff [m2/s] in the mixed-layer rn_wvmix = 10.0 ! vertical eddy diffusion coeff [m2/s] in the mixed-layer ln_mldw = .true. ! Flag to use or not the mized layer depth param. / !----------------------------------------------------------------------- &namzdf_tke ! turbulent eddy kinetic dependent vertical diffusion ("key_zdftke") !----------------------------------------------------------------------- rn_ediff = ${NAM_RN_EDIFF:-0.1} ! coef. for vertical eddy coef. (avt=rn_ediff*mxl*sqrt(e) ) rn_ediss = ${NAM_RN_EDISS:-0.7} ! coef. of the Kolmogoroff dissipation rn_ebb = ${NAM_RN_EBB:-67.83} ! coef. of the surface input of tke (=67.83 suggested when ln_mxl0=T) ln_ebbice = ${NAM_LN_EBBICE:-true} ! modify tke surface input under ice (F) rn_ebbice = ${NAM_RN_EBBICE:-3.75} ! coef. of the surface input of tke under ice rn_emin = 1.e-6 ! minimum value of tke [m2/s2] rn_emin0 = 1.e-4 ! surface minimum value of tke [m2/s2] nn_mxl = ${NAM_NN_MXL:-3} ! mixing length: = 0 bounded by the distance to surface and bottom ! = 1 bounded by the local vertical scale factor ! = 2 first vertical derivative of mixing length bounded by 1 ! = 3 as =2 with distinct disspipative an mixing length scale nn_pdl = ${NAM_NN_PDL:-1} ! Prandtl number function of richarson number (=1, avt=pdl(Ri)*avm) or not (=0, avt=avm) ln_mxl0 = .true. ! surface mixing length scale = F(wind stress) (T) or not (F) rn_mxl0 = 0.01 ! surface buoyancy lenght scale minimum value ln_lc = .true. ! Langmuir cell parameterisation (Axell 2002) rn_lc = 0.15 ! coef. associated to Langmuir cells nn_etau = ${NAM_NN_ETAU:-1} ! penetration of tke below the mixed layer (ML) due to internal & intertial waves ! = 0 no penetration ! = 1 add a tke source below the ML ! = 2 add a tke source just at the base of the ML ! = 3 as = 1 applied on HF part of the stress ("key_coupled") rn_efr = ${NAM_RN_EFR:-0.05} ! fraction of surface tke value which penetrates below the ML (nn_etau=1 or 2) nn_htau = ${NAM_NN_HTAU:-1} ! type of exponential decrease of tke penetration below the ML ! = 0 constant 10 m length scale ! = 1 0.5m at the equator to 30m poleward of 40 degrees ! = 2 5m at eq to 60m poleward of 40 degrees ! = 3 proportional to SWH rn_whtauscl = ${NAM_RN_WHTAUSCL:-4} ! SWH scalign for htau=3 rn_whtaumin = ${NAM_RN_WHTAUMIN:-1} ! minimum htau (nn_htau=3) rn_delta_0 = ${NAM_RN_DELTA_0:-0.19} ! Strength of background diffusion rn_alpha_m = ${NAM_RN_ALPHA_M:-1.} rn_alpha_h = ${NAM_RN_ALPHA_H:-1.4} rn_beta_m = ${NAM_RN_BETA_M:-14.} rn_beta_h = ${NAM_RN_BETA_H:-11.2} / !------------------------------------------------------------------------ &namzdf_kpp ! K-Profile Parameterization dependent vertical mixing ("key_zdfkpp", and optionally: !------------------------------------------------------------------------ "key_kppcustom" or "key_kpplktb") ln_kpprimix = .true. ! shear instability mixing rn_difmiw = 1.0e-04 ! constant internal wave viscosity [m2/s] rn_difsiw = 0.1e-04 ! constant internal wave diffusivity [m2/s] rn_riinfty = 0.8 ! local Richardson Number limit for shear instability rn_difri = 0.0050 ! maximum shear mixing at Rig = 0 [m2/s] rn_bvsqcon = -0.01e-07 ! Brunt-Vaisala squared for maximum convection [1/s2] rn_difcon = 1. ! maximum mixing in interior convection [m2/s] nn_avb = 0 ! horizontal averaged (=1) or not (=0) on avt and amv nn_ave = 1 ! constant (=0) or profile (=1) background on avt / !----------------------------------------------------------------------- &namzdf_gls ! GLS vertical diffusion ("key_zdfgls") !----------------------------------------------------------------------- rn_emin = 1.e-6 ! minimum value of e [m2/s2] rn_epsmin = 1.e-12 ! minimum value of eps [m2/s3] ln_length_lim = .true. ! limit on the dissipation rate under stable stratification (Galperin et al., 1988) rn_clim_galp = 0.53 ! galperin limit ln_sigpsi = .true. ! Activate or not Burchard 2001 mods on psi schmidt number in the wb case rn_crban = 100. ! Craig and Banner 1994 constant for wb tke flux rn_charn = 70000. ! Charnock constant for wb induced roughness length rn_hsro = 0.02 ! Minimum surface roughness rn_frac_hs = 1.3 ! Fraction of wave height as roughness (if nn_z0_met=2) nn_z0_met = 2 ! Method for surface roughness computation (0/1/2) nn_bc_surf = 1 ! surface condition (0/1=Dir/Neum) nn_bc_bot = 1 ! bottom condition (0/1=Dir/Neum) nn_stab_func = 2 ! stability function (0=Galp, 1= KC94, 2=CanutoA, 3=CanutoB) nn_clos = 1 ! predefined closure type (0=MY82, 1=k-eps, 2=k-w, 3=Gen) / !----------------------------------------------------------------------- &namzdf_ddm ! double diffusive mixing parameterization ("key_zdfddm") !----------------------------------------------------------------------- rn_avts = 1.e-4 ! maximum avs (vertical mixing on salinity) rn_hsbfr = 1.6 ! heat/salt buoyancy flux ratio / !----------------------------------------------------------------------- &namzdf_tmx ! tidal mixing parameterization ("key_zdftmx") !----------------------------------------------------------------------- rn_htmx = 500. ! vertical decay scale for turbulence (meters) rn_n2min = 1.e-8 ! threshold of the Brunt-Vaisala frequency (s-1) rn_tfe = 0.333 ! tidal dissipation efficiency rn_me = 0.2 ! mixing efficiency ln_tmx_itf = .true. ! ITF specific parameterisation rn_tfe_itf = 1. ! ITF tidal dissipation efficiency / !----------------------------------------------------------------------- &namzdf_tmx_new ! new tidal mixing parameterization ("key_zdftmx_new") !----------------------------------------------------------------------- nn_zpyc = 1 ! pycnocline-intensified dissipation scales as N (=1) or N^2 (=2) ln_mevar = .true. ! variable (T) or constant (F) mixing efficiency ln_tsdiff = .true. ! account for differential T/S mixing (T) or not (F) / !!====================================================================== !! *** Miscellaneous namelists *** !!====================================================================== !! namsol elliptic solver / island / free surface !! nammpp Massively Parallel Processing ("key_mpp_mpi) !! namctl Control prints & Benchmark !! namc1d 1D configuration options ("key_c1d") !! namc1d_uvd data: U & V currents ("key_c1d") !! namc1d_dyndmp U & V newtonian damping ("key_c1d") !! namsto Stochastic parametrization of EOS !!====================================================================== ! !----------------------------------------------------------------------- &namsol ! elliptic solver / island / free surface !----------------------------------------------------------------------- nn_solv = 1 ! elliptic solver: =1 preconditioned conjugate gradient (pcg) ! =2 successive-over-relaxation (sor) nn_sol_arp = 0 ! absolute/relative (0/1) precision convergence test rn_eps = 1.e-6 ! absolute precision of the solver nn_nmin = 300 ! minimum of iterations for the SOR solver nn_nmax = 800 ! maximum of iterations for the SOR solver nn_nmod = 10 ! frequency of test for the SOR solver rn_resmax = 1.e-10 ! absolute precision for the SOR solver rn_sor = 1.92 ! optimal coefficient for SOR solver (to be adjusted with the domain) / !----------------------------------------------------------------------- &nammpp ! Massively Parallel Processing ("key_mpp_mpi) !----------------------------------------------------------------------- ln_nnogather= ${NNOGATHER:-.true.} ! activate code to avoid mpi_allgather use at the northfold ln_lbcmap = ${LBCMAP:-false} / !----------------------------------------------------------------------- &namctl ! Control prints & Benchmark !----------------------------------------------------------------------- nn_timing = ${NN_TIMING:-1} ! timing by routine activated (=1) creates timing.output file, or not (=0) ln_timeout = .true. ! Alternative time.step format. ln_smslabel= $NAM_LN_SMSLABEL ! Communicate with SMS. cn_smslabel = "${CN_SMSLABEL:-xlabel}" nn_smsfrq = $NAM_NN_SMSFRQ ! SMS communication frequency (time steps) ln_diadebug = .false. ! Grid point diagnostic output (fill namdiadebug) ln_sglread = ${NAM_LN_SGLREAD:-.false.} ln_sglreadfbm = ${NAM_LN_SGLREADFBM:-.true.} ln_sglwrite = ${LNSGLWRITE:-.false.} ln_sglwritefbm = ${LNSGLWRITEFBM:-.false.} ln_timeout = ${LNTIMEOUT:=.true.} ln_timeoutflush = ${LNTIMEOUTFLUSH:=.true.} / !----------------------------------------------------------------------- &namc1d_uvd ! data: U & V currents ("key_c1d") !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_ucur = 'ucurrent' , -1 ,'u_current', .false. , .true. , 'monthly' , '' , 'Ume' , '' sn_vcur = 'vcurrent' , -1 ,'v_current', .false. , .true. , 'monthly' , '' , 'Vme' , '' ! cn_dir = './' ! root directory for the location of the files ln_uvd_init = .false. ! Initialisation of ocean U & V with U & V input data (T) or not (F) ln_uvd_dyndmp = .false. ! damping of ocean U & V toward U & V input data (T) or not (F) / !----------------------------------------------------------------------- &namc1d_dyndmp ! U & V newtonian damping ("key_c1d") !----------------------------------------------------------------------- ln_dyndmp = .false. ! add a damping term (T) or not (F) / !----------------------------------------------------------------------- &namsto ! Stochastic parametrization of EOS !----------------------------------------------------------------------- ln_rststo = .false. ! start from mean parameter (F) or from restart file (T) ln_rstseed = .true. ! read seed of RNG from restart file cn_storst_in = "restart_sto" ! suffix of stochastic parameter restart file (input) cn_storst_out = "restart_sto" ! suffix of stochastic parameter restart file (output) ln_sto_eos = .false. ! stochastic equation of state nn_sto_eos = 1 ! number of independent random walks rn_eos_stdxy = 1.4 ! random walk horz. standard deviation (in grid points) rn_eos_stdz = 0.7 ! random walk vert. standard deviation (in grid points) rn_eos_tcor = 1440.0 ! random walk time correlation (in timesteps) nn_eos_ord = 1 ! order of autoregressive processes nn_eos_flt = 0 ! passes of Laplacian filter rn_eos_lim = 2.0 ! limitation factor (default = 3.0) / !!====================================================================== !! *** Diagnostics namelists *** !!====================================================================== !! namnc4 netcdf4 chunking and compression settings ("key_netcdf4") !! namtrd dynamics and/or tracer trends !! namptr Poleward Transport Diagnostics !! namflo float parameters ("key_float") !! namhsb Heat and salt budgets !!====================================================================== ! !----------------------------------------------------------------------- &namnc4 ! netcdf4 chunking and compression settings ("key_netcdf4") !----------------------------------------------------------------------- nn_nchunks_i= 4 ! number of chunks in i-dimension nn_nchunks_j= 4 ! number of chunks in j-dimension nn_nchunks_k= 75 ! number of chunks in k-dimension ! setting nn_nchunks_k = jpk will give a chunk size of 1 in the vertical which ! is optimal for postprocessing which works exclusively with horizontal slabs ln_nc4zip = .true. ! (T) use netcdf4 chunking and compression ! (F) ignore chunking information and produce netcdf3-compatible files / !----------------------------------------------------------------------- &namtrd ! diagnostics on dynamics and/or tracer trends ! ! and/or mixed-layer trends and/or barotropic vorticity !----------------------------------------------------------------------- ln_glo_trd = .false. ! (T) global domain averaged diag for T, T^2, KE, and PE ln_dyn_trd = .false. ! (T) 3D momentum trend output ln_dyn_mxl = .FALSE. ! (T) 2D momentum trends averaged over the mixed layer (not coded yet) ln_vor_trd = .FALSE. ! (T) 2D barotropic vorticity trends (not coded yet) ln_KE_trd = .false. ! (T) 3D Kinetic Energy trends ln_PE_trd = .false. ! (T) 3D Potential Energy trends ln_tra_trd = .FALSE. ! (T) 3D tracer trend output ln_tra_mxl = .false. ! (T) 2D tracer trends averaged over the mixed layer (not coded yet) nn_trd = 365 ! print frequency (ln_glo_trd=T) (unit=time step) / !!gm nn_ctls = 0 ! control surface type in mixed-layer trends (0,1 or n /seconds ; =86400. -> /day) !!gm cn_trdrst_in = "restart_mld" ! suffix of ocean restart name (input) !!gm cn_trdrst_out = "restart_mld" ! suffix of ocean restart name (output) !!gm ln_trdmld_restart = .false. ! restart for ML diagnostics !!gm ln_trdmld_instant = .false. ! flag to diagnose trends of instantantaneous or mean ML T/S !!gm !----------------------------------------------------------------------- &namflo ! float parameters ("key_float") !----------------------------------------------------------------------- jpnfl = 1 ! total number of floats during the run jpnnewflo = 0 ! number of floats for the restart ln_rstflo = .false. ! float restart (T) or not (F) nn_writefl = 75 ! frequency of writing in float output file nn_stockfl = 17520 ! 5475 ! frequency of creation of the float restart file ln_argo = .false. ! Argo type floats (stay at the surface each 10 days) ln_flork4 = .false. ! trajectories computed with a 4th order Runge-Kutta (T) ! or computed with Blanke' scheme (F) ln_ariane = .true. ! Input with Ariane tool convention(T) ln_flo_ascii = .true. ! Output with Ariane tool netcdf convention(F) or ascii file (T) / !----------------------------------------------------------------------- &namptr ! Poleward Transport Diagnostic !----------------------------------------------------------------------- ln_diaptr = .false. ! Poleward heat and salt transport (T) or not (F) ln_subbas = .false. ! Atlantic/Pacific/Indian basins computation (T) or not / !----------------------------------------------------------------------- &namhsb ! Heat and salt budgets !----------------------------------------------------------------------- ln_diahsb = .false. ! check the heat and salt budgets (T) or not (F) / !----------------------------------------------------------------------- &nam_diaharm ! Harmonic analysis of tidal constituents ('key_diaharm') !----------------------------------------------------------------------- nit000_han = 1 ! First time step used for harmonic analysis nitend_han = 75 ! Last time step used for harmonic analysis nstep_han = 15 ! Time step frequency for harmonic analysis tname(1) = 'M2' ! Name of tidal constituents tname(2) = 'K1' / !----------------------------------------------------------------------- &namdct ! transports through sections !----------------------------------------------------------------------- nn_dct = 15 ! time step frequency for transports computing nn_dctwri = 15 ! time step frequency for transports writing nn_secdebug = 112 ! 0 : no section to debug ! -1 : debug all section ! 0 < n : debug section number n / !!====================================================================== !! *** Observation & Assimilation namelists *** !!====================================================================== !! namobs observation and model comparison ('key_diaobs') !! nam_asminc assimilation increments ('key_asminc') !!====================================================================== ! !----------------------------------------------------------------------- &namobs ! observation usage ('key_diaobs') !----------------------------------------------------------------------- cn_oceobs_out_path="${CN_OCEOBS_OUT_PATH:-./}" ln_obseos10to80=.true. ln_t3d = $LPRO ln_s3d = $LPRO ln_ena = .false. ln_profb = $LPRO ln_sla = $LSLA ln_sladt = .false. ln_slafb = $LSLA ln_sst = $LSST ln_sstfb = ${NAM_LN_SSTFB:-.true.} sstfbfiles = ${NAM_SSTFBFILES:-'sst_01.nc'} profbfiles = $NPROFFILES ln_profb_enatim = .true. slafbfiles = $NSLAFILES nmsshc = 1 ln_altbias = .false. ln_ignmis = .false. ln_grid_global = .true. ln_grid_search_lookup = .true. grid_search_file= 'xypos' ln_velfb = $LCUR velfbfiles = $CURFBDATA ln_velfb_av = $CURFBAVG ln_vel2d = ${LCURSURF:-.false.} velfb2dfiles = ${CURSURFFBDATA:-""} n1dint = 1 n2dint = 3 ln_nea = .true. mdtcutoff = 65.0 mdtcorr = 1.61 dobsini = $NDATE0 dobsend = $NDATEND ln_profb_ena = $LNPROFBENA ln_profb_enatim = $LNPROFBENATIM ln_obsmpppack = ${LN_OBSMPPPACK:-.FALSE.} / !----------------------------------------------------------------------- &nam_asminc ! assimilation increments ('key_asminc') !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namsbc_wave ! External fields from wave model !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! sn_cdg = 'cdww' , ${FREQWAM:-6} , 'cdww' , .false. , .false. , 'monthly' , '' , '' , '' sn_usd = 'sdw_wave' , 1 , 'u_sd2d' , .true. , .false. , 'daily' , '' , '' , '' sn_vsd = 'sdw_wave' , 1 , 'v_sd2d' , .true. , .false. , 'daily' , '' , '' , '' sn_wn = 'sdw_wave' , 1 , 'wave_num' , .true. , .false. , 'daily' , '' , '' , '' cn_dir = './' ! root directory for the location of drag coefficient files / !----------------------------------------------------------------------- &namdyn_nept ! Neptune effect (simplified: lateral and vertical diffusions removed) !----------------------------------------------------------------------- ! Suggested lengthscale values are those of Eby & Holloway (1994) for a coarse model ln_neptsimp = .false. ! yes/no use simplified neptune ln_smooth_neptvel = .false. ! yes/no smooth zunep, zvnep rn_tslse = 1.2e4 ! value of lengthscale L at the equator rn_tslsp = 3.0e3 ! value of lengthscale L at the pole ! Specify whether to ramp down the Neptune velocity in shallow ! water, and if so the depth range controlling such ramping down ln_neptramp = .true. ! ramp down Neptune velocity in shallow water rn_htrmin = 100.0 ! min. depth of transition range rn_htrmax = 200.0 ! max. depth of transition range / !----------------------------------------------------------------------- &namsbc_prt ! perturbations to forcing (MAB 2014) !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_putau = 'putau' , 24 , 'utau' , .false. , .false., 'monthly' , '' , '', '' sn_pvtau = 'pvtau' , 24 , 'vtau' , .false. , .false., 'monthly' , '' , '', '' sn_pqns = 'pqns' , 24 , 'qns' , .false. , .false., 'monthly' , '' , '', '' sn_pqsr = 'pqsr' , 24 , 'qsr' , .false. , .false., 'monthly' , '' , '', '' sn_pemp = 'pemp' , 24 , 'emp' , .false. , .false., 'monthly' , '' , '', '' nn_putau = ${NAM_NN_PUTAU:=0} !0/1/2 for nothing/addpert/replace nn_pvtau = ${NAM_NN_PVTAU:=0} nn_pqns = ${NAM_NN_PQNS:=0} nn_pqsr = ${NAM_NN_PQSR:=0} nn_pemp = ${NAM_NN_PEMP:=0} cn_dir = './' ! root directory for the location of the pert files / &namsbc_wavepar ! namsbc_wavepar parameters from wave model (CCC not identical to namsbc_wave) !-----------------------------------------------------------------------/ sn_ust = 'ust' , ${FREQWAM:-6} , 'ust' , .false. , .false. , 'monthly' , '' , '', '' sn_vst = 'vst' , ${FREQWAM:-6} , 'vst' , .false. , .false. , 'monthly' , '' , '', '' sn_swh = 'swh' , ${FREQWAM:-6} , 'swh' , .false. , .false. , 'monthly' , '' , '', '' sn_mwp = 'mwp' , ${FREQWAM:-6} , 'mwp' , .false. , .false. , 'monthly' , '' , '', '' sn_wspd = 'wspd' , ${FREQWAM:-6} , 'wspd' , .false. , .false. , 'monthly' , '' , '', '' sn_phioc = 'phioc' , ${FREQWAM:-6} , 'phioc' , .false. , .false. , 'monthly' , '' , '', '' sn_tauoc = 'tauoc' , ${FREQWAM:-6} , 'tauoc' , .false. , .false. , 'monthly' , '' , '', '' cn_dir_wavepar = './' ! root directory for the location of the ECWAM files / !----------------------------------------------------------------------- &namsbc_waveparlim !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namsbc_fwb ! namsbc_fwb Fresh water budget !----------------------------------------------------------------------- rd_fwb = 1. ! time scale to apply fwb correction (days) ikt_fwb = 1 ! freq (time steps) to estimate fwb nr_ssh = $NR_SSH ! 0 for global sl=0. 1/2 for external SL/Mass file cn_dir ='./' ! root directory for location of ssh file sn_ssh = $SSHFILE, '' rcap = 1. ! mm/day cap for FWB adjusment lfwbr = $LFWBR / !----------------------------------------------------------------------- &namsbc_iif ! surface boundary condition for prescribed ice !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interpol. ! clim ! 'yearly' or ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! sn_ice = 'ice_cover' , 24 , 'ice_cov' , .false. , .false. , 'monthly', '', '' cn_dir = './' ! root for location of ice files dtice = 1. ! time scale for relaxation to sea-ice nn_ice_rel = $NAM_NN_ICE_REL ! Use pseudo-ice treatment / !----------------------------------------------------------------------- &nambias ! Parameters for bias corrections #ifdef key_bias) !----------------------------------------------------------------------- ln_bias = $LN_BIAS ! activate bias correction ln_bias_asm = $BIAS_ASM ! use assim bias ln_bias_rlx = .FALSE. ! use clim-relax bias ln_bias_ofl = $LN_BIAS_OFL ! use off-line bias ln_bias_ts_app= ${LN_BIAS_TS_APP:=.TRUE.} ! apply bias to Temp/Sal directly ln_bias_pc_app= ${LN_BIAS_PC_APP:=.TRUE.} ! apply bias to pressure gradient cn_bias_tot = 'bias_tot.nc' !file name with bias file (restart) cn_bias_asm = 'bias_asm.nc' !file name " " from assim ! dir and structures for offline bias (using fldread conventions) cn_dir = './' sn_tbias_ofl= 'tbias_ofl', -1,'tbias', .true., .true., 'yearly','' sn_sbias_ofl= 'sbias_ofl', -1,'sbias', .true., .true., 'yearly','' bias_time_unit_asm = $BIASTIMEUNITASM ! time unit of asm bias fb_t_asm = ${RN_FB_T_ASM:=0.02} ! partition of total bias for T/S fb_t_rlx = 1. ! " " " " in T/S fb_t_ofl = ${RN_FB_T_OFL:=.1} fb_p_rlx = 1. fb_p_asm = ${RN_FB_P_ASM:=0.3} fb_p_ofl = ${RN_FB_P_OFL:=1.} nn_inertial = $NN_INERTIAL !0/1/2 0/sin(lat)**2/gausian gphit0 = ${RN_GPHIT0:=10.} !length for guassian tappering fctamp = ${RN_FCTAMP:=10.} eft_rlx = 1800. ! efolding time for rlx bias estimation eft_asm = ${RN_EFT_ASM:=1800.} ! efolding time for asm bias estimation 5y t_rlx_upd = 0.05 ! update fct rlx bias " (0. -> 1.) t_asm_upd = ${RN_T_ASM_UPD:=0.05} ! update fct assim bias " (0. -> 1.) lrst_biasr =$LRST_BIASR !force to read bias file at first time step capN2val = ${CAPN2VAL:=-1} !if larger than 0, cap N2 min val (~1.e-6) / eof_namelist if [[ ${ICEMOD:-0} = 3 ]]; then cat >namelist_ice_cfg<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !! LIM3 namelist : !! 1 - Generic parameters (namicerun) !! 2 - Ice initialization (namiceini) !! 3 - Ice discretization (namiceitd) !! 4 - Ice dynamics and transport (namicedyn) !! 5 - Ice thermodynamics (namicethd) !! 6 - Ice salinity (namicesal) !! 7 - Ice mechanical redistribution (namiceitdme) !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ! !------------------------------------------------------------------------------ &namicerun ! Generic parameters !------------------------------------------------------------------------------ !----------------------------------------------------------------------- jpl = ${NLIM3CAT:-5} ! number of ice categories cn_icerst_in = "restart_ice_in"! suffix of ice restart name (input) cn_icerst_indir = "${RESTARTSDIR:-.}" ! directory from which to read input ice restarts cn_icerst_outdir = "${CN_OCERST_OUT_PATH:-./}" nlay_i = 2 ! number of ice layers nlay_s = 1 ! number of snow layers (only 1 is working) ln_limdyn = .true. ! ice dynamics (T) or thermodynamics only (F) rn_amax_n = 0.999 ! maximum tolerated ice concentration NH rn_amax_s = 0.999 ! maximum tolerated ice concentration SH ln_limdiahsb = .false. ! check the heat and salt budgets (T) or not (F) ln_limdiaout = .true. ! output the heat and salt budgets (T) or not (F) ln_icectl = .false. ! ice points output for debug (T or F) iiceprt = 10 ! i-index for debug jiceprt = 10 ! j-index for debug / !------------------------------------------------------------------------------ &namiceini ! Ice initialization !------------------------------------------------------------------------------ ln_iceini = .true. ! activate ice initialization (T) or not (F) rn_thres_sst = 2.0 ! maximum water temperature with initial ice (degC) rn_hts_ini_n = 0.3 ! initial real snow thickness (m), North rn_hts_ini_s = 0.3 ! " " South rn_hti_ini_n = 3.0 ! initial real ice thickness (m), North rn_hti_ini_s = 1.0 ! " " South rn_ati_ini_n = 0.9 ! initial ice concentration (-), North rn_ati_ini_s = 0.9 ! " " South rn_smi_ini_n = 6.3 ! initial ice salinity (g/kg), North rn_smi_ini_s = 6.3 ! " " South rn_tmi_ini_n = 270. ! initial ice/snw temperature (K), North rn_tmi_ini_s = 270. ! " " South / !------------------------------------------------------------------------------ &namiceitd ! Ice discretization !------------------------------------------------------------------------------ nn_catbnd = 2 ! computation of ice category boundaries based on ! 1: tanh function ! 2: h^(-alpha), function of rn_himean rn_himean = 2.0 ! expected domain-average ice thickness (m), nn_catbnd = 2 only / !------------------------------------------------------------------------------ &namicedyn ! Ice dynamics and transport !------------------------------------------------------------------------------ nn_icestr = 0 ! ice strength parameteriztaion ! 0: Hibler_79 P = pstar**exp(-c_rhg*A) ! 1: Rothrock_75 P = Cf*coeff*integral(wr.h^2) ln_icestr_bvf = .false. ! ice strength function brine volume (T) or not (F) rn_pe_rdg = 17.0 ! ridging work divided by pot. energy change in ridging, if nn_icestr = 1 rn_pstar = 2.0e+04 ! ice strength thickness parameter (N/m2), nn_icestr = 0 rn_crhg = 20.0 ! ice strength conc. parameter (-), nn_icestr = 0 rn_cio = 5.0e-03 ! ice-ocean drag coefficient (-) rn_creepl = 1.0e-12 ! creep limit (s-1) rn_ecc = 2.0 ! eccentricity of the elliptical yield curve nn_nevp = 120 ! number of EVP subcycles rn_relast = 0.333 ! ratio of elastic timescale to ice time step: Telast = dt_ice * rn_relast ! advised value: 1/3 (rn_nevp=120) or 1/9 (rn_nevp=300) / !------------------------------------------------------------------------------ &namicehdf ! Ice horizontal diffusion !------------------------------------------------------------------------------ nn_convfrq = 5 ! convergence check frequency of the Crant-Nicholson scheme (perf. optimization) / !------------------------------------------------------------------------------ &namicethd ! Ice thermodynamics !------------------------------------------------------------------------------ rn_hnewice = 0.1 ! thickness for new ice formation in open water (m) ln_frazil = .false. ! use frazil ice collection thickness as a function of wind (T) or not (F) rn_maxfrazb = 1.0 ! maximum fraction of frazil ice collecting at the ice base rn_vfrazb = 0.417 ! thresold drift speed for frazil ice collecting at the ice bottom (m/s) rn_Cfrazb = 5.0 ! squeezing coefficient for frazil ice collecting at the ice bottom rn_himin = 0.10 ! minimum ice thickness (m) used in remapping, must be smaller than rn_hnewice rn_betas = 0.66 ! exponent in lead-ice repratition of snow precipitation ! betas = 1 -> equipartition, betas < 1 -> more on leads rn_kappa_i = 1.0 ! radiation attenuation coefficient in sea ice (m-1) nn_conv_dif = 50 ! maximal number of iterations for heat diffusion computation rn_terr_dif = 0.0001 ! maximum temperature after heat diffusion (degC) nn_ice_thcon= 1 ! sea ice thermal conductivity ! 0: k = k0 + beta.S/T (Untersteiner, 1964) ! 1: k = k0 + beta1.S/T - beta2.T (Pringle et al., 2007) nn_monocat = 0 ! virtual ITD mono-category parameterizations (1, jpl = 1 only) or not (0) ! 2: simple piling instead of ridging --- temporary option ! 3: activate G(he) only --- temporary option ! 4: activate lateral melting only --- temporary option ln_it_qnsice = .true. ! iterate the surface non-solar flux with surface temperature (T) or not (F) / !------------------------------------------------------------------------------ &namicesal ! Ice salinity !------------------------------------------------------------------------------ nn_icesal = 2 ! ice salinity option ! 1: constant ice salinity (S=rn_icesal) ! 2: varying salinity parameterization S(z,t) ! 3: prescribed salinity profile S(z), Schwarzacher, 1959 rn_icesal = 4. ! ice salinity (g/kg, nn_icesal = 1 only) rn_sal_gd = 5. ! restoring ice salinity, gravity drainage (g/kg) rn_time_gd = 1.73e+6 ! restoring time scale, gravity drainage (s) rn_sal_fl = 2. ! restoring ice salinity, flushing (g/kg) rn_time_fl = 8.64e+5 ! restoring time scale, flushing (s) rn_simax = 20. ! maximum tolerated ice salinity (g/kg) rn_simin = 0.1 ! minimum tolerated ice salinity (g/kg) / !------------------------------------------------------------------------------ &namiceitdme ! Ice mechanical redistribution (ridging and rafting) !------------------------------------------------------------------------------ rn_Cs = 0.5 ! fraction of shearing energy contributing to ridging rn_fsnowrdg = 0.5 ! snow volume fraction that survives in ridging rn_fsnowrft = 0.5 ! snow volume fraction that survives in rafting nn_partfun = 1 ! type of ridging participation function ! 0: linear (Thorndike et al, 1975) ! 1: exponential (Lipscomb, 2007 rn_gstar = 0.15 ! fractional area of thin ice being ridged (nn_partfun = 0) rn_astar = 0.05 ! exponential measure of ridging ice fraction (nn_partfun = 1) rn_hstar = 100.0 ! determines the maximum thickness of ridged ice (m) (Hibler, 1980) ln_rafting = .true. ! rafting activated (T) or not (F) rn_hraft = 0.75 ! threshold thickness for rafting (m) rn_craft = 5.0 ! squeezing coefficient used in the rafting function rn_por_rdg = 0.3 ! porosity of newly ridged ice (Lepparanta et al., 1995) / eof_namelist else print "Only LIM3 supported for ORCA025_1050." exit 1 fi elif [[ ${OUT_GRID}_Z${OUT_LEVELS} = "ORCA12_Z75" ]]; then NAM_LN_SMSLABEL=${NAM_LN_SMSLABEL:=.false.} NAM_NN_SMSFREQ=${NAM_NN_SMSFRQ:=240} cat >namelist_cfg<namelist_ice_cfg<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !! NEMO/LIM-3 : Ice configuration namelist. Overwrites SHARED/namelist_ice_lim3_ref !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !----------------------------------------------------------------------- &namicerun ! Share parameters for dynamics/advection/thermo !----------------------------------------------------------------------- jpl = ${NLIM3CAT:-5} ! number of ice categories cn_icerst_in = "restart_ice_in"! suffix of ice restart name (input) cn_icerst_indir = "${RESTARTSDIR:-.}" ! directory from which to read input ice restarts cn_icerst_outdir = "${CN_OCERST_OUT_PATH:-./}" / !----------------------------------------------------------------------- &namiceini ! ice initialisation !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namicedyn ! ice dynamic !----------------------------------------------------------------------- / !------------------------------------------------------------------------------ &namicehdf ! Ice horizontal diffusion !------------------------------------------------------------------------------ nn_ahi0 = 2 ! horizontal diffusivity computation / !----------------------------------------------------------------------- &namicethd ! ice thermodynamic !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namicesal ! ice salinity !----------------------------------------------------------------------- / !------------------------------------------------------------------------------ &namiceitd ! Ice discretization !------------------------------------------------------------------------------ / !----------------------------------------------------------------------- &namiceitdme ! parameters for mechanical redistribution of ice !----------------------------------------------------------------------- / !----------------------------------------------------------------------- &namicedia ! ice diagnostics !----------------------------------------------------------------------- / eof_namelist else print "Only LIM3 works with ORCA12" exit 1 fi else print "Defaults for ${OUT_GRID}_Z${OUT_LEVELS} not known" exit 1 fi cat > namelist_streams_io <>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ! OPA namelist for different output streams ! ---------------------------------------- !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ! ! options for output of instantaneous fields ! ! in this example we use OUTSTREMS streams: ! Stream 1, complete set, type=1 (avg), regular frequence FREQ1 ! stream 2, complet set, type=1 (avg), FREQ2 (usually end of run) ! stream 3, complet set, type=1 (avg), FREQ3 (usually more frequent 2D flds) ! stream 4, complet set, type=0 (inst), FREQ4 (usually for debuging) ! nouttype=0 for instantaneous ! &nam_io nstreams = $OUTSTREAMS nouttype(1) = $OUT1TYPE noutfreq(1) = $OUT1FREQ lgridT(1) = $OUT1FLAG lgridU(1) = $OUT1FLAG lgridV(1) = $OUT1FLAG lgridW(1) = $OUT1FLAG lvotemper(1) = .TRUE. lvosaline(1) = .TRUE. lvottrdmp(1) = .TRUE. lvostrdmp(1) = .TRUE. lsosstsst(1) = .TRUE. lsosaline(1) = .TRUE. lsossheig(1) = .TRUE. lsostheig(1) = .TRUE. lsobpheig(1) = .TRUE. liowaflup(1) = .TRUE. lsowaflep(1) = .TRUE. lsowaflup(1) = .TRUE. lsorunoff(1) = .FALSE. lsohefldo(1) = .TRUE. lsoshfldo(1) = .TRUE. lsomxl010(1) = .TRUE. lsomxl125(1) = .TRUE. lsomxl030(1) = .TRUE. lsomxlt05(1) = .TRUE. lsomxlt02(1) = .TRUE. lsomixhgt(1) = .TRUE. lsoicecov(1) = .TRUE. lsowafldp(1) = .TRUE. lsosafldp(1) = .TRUE. lsohefldp(1) = .TRUE. lsodsstmo(1) = .FALSE. lsodsstyy(1) = .FALSE. lsowafldp(1) = .TRUE. lsosafldp(1) = .TRUE. lsosurfps(1) = .FALSE. lsobowlin(1) = .FALSE. lsothedep(1) = .TRUE. lso14chgt(1) = .TRUE. lso17chgt(1) = .TRUE. lso20chgt(1) = .TRUE. lso28chgt(1) = .TRUE. lso26chgt(1) = .TRUE. lsohtc300(1) = .TRUE. lsohtc700(1) = .TRUE. lsohtcbtm(1) = .TRUE. lsosal300(1) = .TRUE. lsosal700(1) = .TRUE. lsosalbtm(1) = .TRUE. lsoicetem(1) = .TRUE. lsoicealb(1) = .TRUE. lvozocrte(1) = .TRUE. lsozocrte(1) = .FALSE. lsozotaue(1) = .TRUE. lvomecrtn(1) = .TRUE. lsomecrtn(1) = .FALSE. lsometaun(1) = .TRUE. lvozocrtx(1) = .TRUE. lvozoeivu(1) = .TRUE. lsozotaux(1) = .TRUE. lvomecrty(1) = .TRUE. lvomeeivv(1) = .TRUE. lsometauy(1) = .TRUE. lvovecrtz(1) = .TRUE. lvoveeivw(1) = .FALSE. lvotkeavt(1) = .FALSE. lvotkeevd(1) = .FALSE. lvotkeavm(1) = .FALSE. lvotkeevm(1) = .FALSE. lvoddmavs(1) = .FALSE. lsoleahtw(1) = .FALSE. lsoleaeiw(1) = .FALSE. lsohtc26c(1) = .FALSE. lsohtc26cd(1) = .FALSE. lvorotrot(1) = ${NEMOROTDIV:-.false.} lvodivdiv(1) = ${NEMOROTDIV:-.false.} lsosfldow(1) = .TRUE. lsosst_cd(1) = .TRUE. lsosss_cd(1) = .TRUE. lcalving(1) = .FALSE. lcalving_heat(1) = .FALSE. lberg_real_calving(1) = .FALSE. lberg_floating_melt(1) = .FALSE. lberg_stored_ice(1) = .FALSE. lberg_melt(1) = .FALSE. lberg_buoy_melt(1) = .FALSE. lberg_eros_melt(1) = .FALSE. lberg_conv_melt(1) = .FALSE. lberg_virtual_area(1) = .FALSE. lbits_src(1) = .FALSE. lbits_melt(1) = .FALSE. lbits_mass(1) = .FALSE. lberg_mass(1) = .FALSE. nouttype(2) = $OUT2TYPE noutfreq(2) = $OUT2FREQ lgridT(2) = $OUT2FLAG lgridU(2) = $OUT2FLAG lgridV(2) = $OUT2FLAG lgridW(2) = $OUT2FLAG lmonthly(2)=$LN_MONTHLY lvotemper(2) = .TRUE. lvosaline(2) = .TRUE. lvosigmat(2) = .TRUE. lvottrdmp(2) = $OUT2FULL lvostrdmp(2) = $OUT2FULL lvotbiasd(2) = $OUT2FULL lvosbiasd(2) = $OUT2FULL lvotbiasp(2) = $OUT2FULL lvosbiasp(2) = $OUT2FULL lvorbiasp(2) = $OUT2FULL lsosstsst(2) = .TRUE. lsosaline(2) = .TRUE. lsossheig(2) = .TRUE. lsostheig(2) = .TRUE. lsobpheig(2) = .TRUE. liowaflup(2) = .TRUE. lsowaflep(2) = .TRUE. lsowaflup(2) = .TRUE. lsorunoff(2) = .TRUE. lsohefldo(2) = .TRUE. lsoshfldo(2) = .TRUE. lsomxl010(2) = .TRUE. lsomxl125(2) = .TRUE. lsomxl030(2) = .TRUE. lsomxlt05(2) = .TRUE. lsomxlt02(2) = .TRUE. lsomixhgt(2) = .TRUE. lsoicecov(2) = .TRUE. lsowafldp(2) = .TRUE. lsosafldp(2) = .TRUE. lsohefldp(2) = .TRUE. lsodsstmo(2) = .FALSE. lsodsstyy(2) = .FALSE. lsowafldp(2) = .TRUE. lsosafldp(2) = .TRUE. lsosurfps(2) = .FALSE. lsobowlin(2) = .FALSE. lsothedep(2) = .TRUE. lso14chgt(2) = .TRUE. lso17chgt(2) = .TRUE. lso20chgt(2) = .TRUE. lso28chgt(2) = .TRUE. lso26chgt(2) = .TRUE. lsohtc300(2) = .TRUE. lsohtc700(2) = .TRUE. lsohtcbtm(2) = .TRUE. lsosal300(2) = .TRUE. lsosal700(2) = .TRUE. lsosalbtm(2) = .TRUE. lsoicetem(2) = .TRUE. lsoicealb(2) = .TRUE. lvozocrte(2) = .TRUE. lsozocrte(2) = .FALSE. lsozotaue(2) = .TRUE. lvomecrtn(2) = .TRUE. lsomecrtn(2) = .FALSE. lsometaun(2) = .TRUE. lvozocrtx(2) = .TRUE. lvozoeivu(2) = .FALSE. lsozotaux(2) = .TRUE. lvomecrty(2) = .TRUE. lvomeeivv(2) = .FALSE. lsometauy(2) = .TRUE. lvovecrtz(2) = .TRUE. lvoveeivw(2) = .FALSE. lvotkeavt(2) = .FALSE. lvotkeevd(2) = .FALSE. lvotkeavm(2) = .FALSE. lvotkeevm(2) = .FALSE. lvoddmavs(2) = .FALSE. lsoleahtw(2) = .FALSE. lsoleaeiw(2) = .FALSE. lsohtc26c(2) = .FALSE. lsohtc26cd(2) = .FALSE. lvorotrot(2) = ${NEMOROTDIV:-.false.} lvodivdiv(2) = ${NEMOROTDIV:-.false.} lsosfldow(2) = .TRUE. lsosst_cd(2) = .TRUE. lsosss_cd(2) = .TRUE. lcalving(2) = .FALSE. lcalving_heat(2) = .FALSE. lberg_real_calving(2) = .FALSE. lberg_floating_melt(2) = .FALSE. lberg_stored_ice(2) = .FALSE. lberg_melt(2) = .FALSE. lberg_buoy_melt(2) = .FALSE. lberg_eros_melt(2) = .FALSE. lberg_conv_melt(2) = .FALSE. lberg_virtual_area(2) = .FALSE. lbits_src(2) = .FALSE. lbits_melt(2) = .FALSE. lbits_mass(2) = .FALSE. lberg_mass(2) = .FALSE. nouttype(3) = $OUT3TYPE noutfreq(3) = $OUT3FREQ lgridT(3) = $OUT3FLAG lgridU(3) = $OUT3FLAG lgridV(3) = $OUT3FLAG lgridW(3) = .FALSE. lvotemper(3) = .FALSE. lvosaline(3) = .FALSE. lvosigmat(3) = .FALSE. lvottrdmp(3) = .FALSE. lvostrdmp(3) = .FALSE. lsosstsst(3) = .TRUE. lsosaline(3) = .TRUE. lsossheig(3) = .TRUE. lsostheig(3) = $OUT3FULL lsobpheig(3) = $OUT3FULL liowaflup(3) = $OUT3FULL lsowaflep(3) = $OUT3FULL lsowaflup(3) = .TRUE. lsorunoff(3) = $OUT3FULL lsohefldo(3) = .TRUE. lsoshfldo(3) = .TRUE. lsomxl010(3) = .TRUE. lsomxl125(3) = .TRUE. lsomxl030(3) = .TRUE. lsomxlt05(3) = .TRUE. lsomxlt02(3) = .TRUE. lsomixhgt(3) = $OUT3FULL lsoicecov(3) = .TRUE. lsowafldp(3) = $OUT3FULL lsosafldp(3) = $OUT3FULL lsohefldp(3) = $OUT3RLX lsodsstmo(3) = .FALSE. lsodsstyy(3) = .FALSE. lsowafldp(3) = $OUT3FULL lsosafldp(3) = $OUT3FULL lsosurfps(3) = $OUT3FULL lsobowlin(3) = $OUT3FULL lsothedep(3) = .TRUE. lso14chgt(3) = .TRUE. lso17chgt(3) = .TRUE. lso20chgt(3) = .TRUE. lso28chgt(3) = .TRUE. lso26chgt(3) = .TRUE. lsohtc300(3) = .TRUE. lsohtc700(3) = .FALSE. lsohtcbtm(3) = .FALSE. lsosal300(3) = .TRUE. lsosal700(3) = .FALSE. lsosalbtm(3) = .FALSE. lsoicetem(3) = .FALSE. lsoicealb(3) = .FALSE. lvozocrte(3) = .FALSE. lsozocrte(3) = .TRUE. lsozotaue(3) = .TRUE. lvomecrtn(3) = .FALSE. lsomecrtn(3) = .TRUE. lsometaun(3) = .TRUE. lvozocrtx(3) = .FALSE. lvozoeivu(3) = .FALSE. lsozotaux(3) = .TRUE. lvomecrty(3) = .FALSE. lvomeeivv(3) = .FALSE. lsometauy(3) = .TRUE. lvovecrtz(3) = .FALSE. lvoveeivw(3) = .FALSE. lvotkeavt(3) = .FALSE. lvotkeevd(3) = .FALSE. lvotkeavm(3) = .FALSE. lvotkeevm(3) = .FALSE. lvoddmavs(3) = .FALSE. lsoleahtw(3) = .FALSE. lsoleaeiw(3) = .FALSE. lsohtc26c(3) = .TRUE. lsohtc26cd(3) = .TRUE. lsosfldow(3) = .TRUE. lsosst_cd(3) = .TRUE. lsosss_cd(3) = .TRUE. lcalving(3) = .FALSE. lcalving_heat(3) = .FALSE. lberg_real_calving(3) = .FALSE. lberg_floating_melt(3) = .FALSE. lberg_stored_ice(3) = .FALSE. lberg_melt(3) = .FALSE. lberg_buoy_melt(3) = .FALSE. lberg_eros_melt(3) = .FALSE. lberg_conv_melt(3) = .FALSE. lberg_virtual_area(3) = .FALSE. lbits_src(3) = .FALSE. lbits_melt(3) = .FALSE. lbits_mass(3) = .FALSE. lberg_mass(3) = .FALSE. nouttype(4) = 0 noutfreq(4) = $OUT4FREQ lgridT(4) = .FALSE. lgridU(4) = .FALSE. lgridV(4) = .FALSE. lgridW(4) = .FALSE. lvotemper(4) = .FALSE. lvosaline(4) = .FALSE. lvottrdmp(4) = .FALSE. lvostrdmp(4) = .FALSE. lsosstsst(4) = .TRUE. lsosaline(4) = .TRUE. lsossheig(4) = .TRUE. liowaflup(4) = .FALSE. lsowaflep(4) = .FALSE. lsowaflup(4) = .FALSE. lsorunoff(4) = .FALSE. lsohefldo(4) = .FALSE. lsoshfldo(4) = .FALSE. lsomxl010(4) = .FALSE. lsomxl125(4) = .FALSE. lsomxl030(4) = .FALSE. lsomxlt05(4) = .FALSE. lsomxlt02(4) = .FALSE. lsomixhgt(4) = .FALSE. lsoicecov(4) = .FALSE. lsowafldp(4) = .FALSE. lsosafldp(4) = .FALSE. lsohefldp(4) = .FALSE. lsodsstmo(4) = .FALSE. lsodsstyy(4) = .FALSE. lsowafldp(4) = .FALSE. lsosafldp(4) = .FALSE. lsosurfps(4) = .FALSE. lsobowlin(4) = .FALSE. lsothedep(4) = .FALSE. lso20chgt(4) = .FALSE. lso28chgt(4) = .FALSE. lsohtc300(4) = .FALSE. lsoicetem(4) = .FALSE. lsoicealb(4) = .FALSE. lvozocrte(4) = .FALSE. lsozocrte(4) = .FALSE. lsozotaue(4) = .FALSE. lvomecrtn(4) = .FALSE. lsomecrtn(4) = .FALSE. lsometaun(4) = .FALSE lvozocrtx(4) = .FALSE. lvozoeivu(4) = .FALSE. lsozotaux(4) = .FALSE. lvomecrty(4) = .FALSE. lvomeeivv(4) = .FALSE. lsometauy(4) = .FALSE. lvovecrtz(4) = .FALSE. lvoveeivw(4) = .FALSE. lvotkeavt(4) = .FALSE. lvotkeevd(4) = .FALSE. lvotkeavm(4) = .FALSE. lvotkeevm(4) = .FALSE. lvoddmavs(4) = .FALSE. lsoleahtw(4) = .FALSE. lsoleaeiw(4) = .FALSE. lsohtc26c(4) = .TRUE. lsohtc26cd(4) = .TRUE. lsosfldow(4) = .TRUE. lsosst_cd(4) = .TRUE. lsosss_cd(4) = .TRUE. lcalving(4) = .FALSE. lcalving_heat(4) = .FALSE. lberg_real_calving(4) = .FALSE. lberg_floating_melt(4) = .FALSE. lberg_stored_ice(4) = .FALSE. lberg_melt(4) = .FALSE. lberg_buoy_melt(4) = .FALSE. lberg_eros_melt(4) = .FALSE. lberg_conv_melt(4) = .FALSE. lberg_virtual_area(4) = .FALSE. lbits_src(4) = .FALSE. lbits_melt(4) = .FALSE. lbits_mass(4) = .FALSE. lberg_mass(4) = .FALSE. nouttype(5) = 2 noutfreq(5) = $OUT5FREQ lgridT(5) = $OUT5FLAG lgridU(5) = $OUT5FLAG lgridV(5) = $OUT5FLAG lgridW(5) = $OUT5FLAG lvotemper(5) = .FALSE. lvosaline(5) = .FALSE. lsosstsst(5) = .TRUE. lsosaline(5) = .TRUE. lsossheig(5) = .TRUE. lsostheig(5) = .FALSE. lsobpheig(5) = .FALSE. liowaflup(5) = .FALSE. lsowaflep(5) = .FALSE. lsowaflup(5) = .FALSE. lsorunoff(5) = .FALSE. lsohefldo(5) = .FALSE. lsoshfldo(5) = .FALSE. lsomxl010(5) = .TRUE. lsomxlt05(5) = .TRUE. lsomixhgt(5) = .TRUE. lsoicecov(5) = .FALSE. lsowindsp(5) = .TRUE. lsowafldp(5) = .FALSE. lsosafldp(5) = .FALSE. lsohefldp(5) = .FALSE. lsowafldp(5) = .FALSE. lsosafldp(5) = .FALSE. lsosurfps(5) = .FALSE. lsobowlin(5) = .FALSE. lsothedep(5) = .FALSE. lso20chgt(5) = .FALSE. lso28chgt(5) = .FALSE. lso26chgt(5) = .FALSE. lsohtc300(5) = .FALSE. lsohtc700(5) = .FALSE. lsohtcbtm(5) = .FALSE. lsosal300(5) = .FALSE. lsosal700(5) = .FALSE. lsosalbtm(5) = .FALSE. lsoicetem(5) = .FALSE. lsoicealb(5) = .FALSE. lsomxl125(5) = .FALSE. lsomxl030(5) = .FALSE. lsomxlt02(5) = .FALSE. lso14chgt(5) = .FALSE. lso17chgt(5) = .FALSE. lvozocrte(5) = .FALSE. lsozocrte(5) = .TRUE. lsozotaue(5) = .TRUE. lvomecrtn(5) = .FALSE. lsomecrtn(5) = .TRUE. lsometaun(5) = .TRUE. lvozocrtx(5) = .FALSE. lvozoeivu(5) = .FALSE. lsozocrtx(5) = .TRUE. lsozoeivu(5) = .FALSE. lsozotaux(5) = .FALSE. lvomecrty(5) = .FALSE. lvomeeivv(5) = .FALSE. lsomecrty(5) = .TRUE. lsomeeivv(5) = .FALSE. lsometauy(5) = .FALSE. lvovecrtz(5) = .FALSE. lvoveeivw(5) = .FALSE. lvotkeavt(5) = .FALSE. lvotkeevd(5) = .FALSE. lvotkeavm(5) = .FALSE. lvotkeevm(5) = .FALSE. lvoddmavs(5) = .FALSE. lsoleahtw(5) = .FALSE. lsoleaeiw(5) = .FALSE. lsolhflup(5) = .FALSE. lsolwfldo(5) = .FALSE. lsosbhfup(5) = .FALSE. lvottrdmp(5) = .FALSE. lvostrdmp(5) = .FALSE. lvotbiasd(5) = .FALSE. lvosbiasd(5) = .FALSE. lvotbiasp(5) = .FALSE. lvosbiasp(5) = .FALSE. lvorbiasp(5) = .FALSE. lvosigmat(5) = .FALSE. lvostcoru(5) = .FALSE. lvostcorv(5) = .FALSE. lsocdn10(5) = .FALSE. lvotke(5) = .FALSE. lsotke(5) = .TRUE. lsotke0(5) = .FALSE. lsotkedfac(5)= .FALSE. lsoicestrn(5)= .FALSE. lsoswh(5) = .FALSE. lsomwp(5) = .FALSE. lsophioc(5) = .FALSE. lsotauoc(5) = .FALSE. lsowndmwam(5)= .FALSE. lsophifwam(5)= .FALSE. lsoutauwam(5)= .FALSE. lsovtauwam(5)= .FALSE. lsfqns_tot(5)= .FALSE. lsfqns_ice(5)= .FALSE. lsfqsr_tot(5)= .FALSE. lsfqsr_ice(5)= .FALSE. lsfemp_tot(5)= .FALSE. lsfemp_ice(5)= .FALSE. lsfdqdns_ice(5)= .FALSE. lsfsprecip(5)= .FALSE. lsfutau(5) = .FALSE. lsfvtau(5) = .FALSE. lsfutau_ice(5)= .FALSE. lsfvtau_ice(5)= .FALSE. lsfqns(5) = .FALSE. lsfqsr(5) = .FALSE. lsfemp(5) = .FALSE. lsfswh(5) = .FALSE. lsfmwp(5) = .FALSE. lsfphioc(5) = .FALSE. lsftauoc(5) = .FALSE. lsfustokes(5)= .FALSE. lsfvstokes(5)= .FALSE. lsfutauwam(5)= .FALSE. lsfvtauwam(5)= .FALSE. lsfwndmwam(5)= .FALSE. lsfphifwam(5)= .FALSE. lsfstrn(5) = .FALSE. lsfall(5) = .FALSE. lsocplsst(5) = ${LATMSST:-.FALSE.} lsohtc26c(5) = .FALSE. lsohtc26cd(5) = .FALSE. lsosfldow(5) = .FALSE. lsosst_cd(5) = .FALSE. lsosss_cd(5) = .FALSE. lcalving(5) = .FALSE. lcalving_heat(5) = .FALSE. lberg_real_calving(5) = .FALSE. lberg_floating_melt(5) = .FALSE. lberg_stored_ice(5) = .FALSE. lberg_melt(5) = .FALSE. lberg_buoy_melt(5) = .FALSE. lberg_eros_melt(5) = .FALSE. lberg_conv_melt(5) = .FALSE. lberg_virtual_area(5) = .FALSE. lbits_src(5) = .FALSE. lbits_melt(5) = .FALSE. lbits_mass(5) = .FALSE. lberg_mass(5) = .FALSE. nouttype(6) = 3 noutfreq(6) = $OUT6FREQ lgridT(6) = $OUT6FLAG lgridU(6) = $OUT6FLAG lgridV(6) = $OUT6FLAG lgridW(6) = $OUT6FLAG lvotemper(6) = .FALSE. lvosaline(6) = .FALSE. lsosstsst(6) = .TRUE. lsosaline(6) = .TRUE. lsossheig(6) = .TRUE. lsostheig(6) = .FALSE. lsobpheig(6) = .FALSE. liowaflup(6) = .FALSE. lsowaflep(6) = .FALSE. lsowaflup(6) = .FALSE. lsorunoff(6) = .FALSE. lsohefldo(6) = .FALSE. lsoshfldo(6) = .FALSE. lsomxl010(6) = .TRUE. lsomxlt05(6) = .TRUE. lsomixhgt(6) = .TRUE. lsoicecov(6) = .FALSE. lsowindsp(6) = .TRUE. lsowafldp(6) = .FALSE. lsosafldp(6) = .FALSE. lsohefldp(6) = .FALSE. lsowafldp(6) = .FALSE. lsosafldp(6) = .FALSE. lsosurfps(6) = .FALSE. lsobowlin(6) = .FALSE. lsothedep(6) = .FALSE. lso20chgt(6) = .FALSE. lso28chgt(6) = .FALSE. lso26chgt(6) = .FALSE. lsohtc300(6) = .FALSE. lsohtc700(6) = .FALSE. lsohtcbtm(6) = .FALSE. lsosal300(6) = .FALSE. lsosal700(6) = .FALSE. lsosalbtm(6) = .FALSE. lsoicetem(6) = .FALSE. lsoicealb(6) = .FALSE. lsomxl125(6) = .FALSE. lsomxl030(6) = .FALSE. lsomxlt02(6) = .FALSE. lso14chgt(6) = .FALSE. lso17chgt(6) = .FALSE. lvozocrte(6) = .FALSE. lsozocrte(6) = .TRUE. lsozotaue(6) = .TRUE. lvomecrtn(6) = .FALSE. lsomecrtn(6) = .TRUE. lsometaun(6) = .TRUE. lvozocrtx(6) = .FALSE. lvozoeivu(6) = .FALSE. lsozocrtx(6) = .TRUE. lsozoeivu(6) = .FALSE. lsozotaux(6) = .FALSE. lvomecrty(6) = .FALSE. lvomeeivv(6) = .FALSE. lsomecrty(6) = .TRUE. lsomeeivv(6) = .FALSE. lsometauy(6) = .FALSE. lvovecrtz(6) = .FALSE. lvoveeivw(6) = .FALSE. lvotkeavt(6) = .FALSE. lvotkeevd(6) = .FALSE. lvotkeavm(6) = .FALSE. lvotkeevm(6) = .FALSE. lvoddmavs(6) = .FALSE. lsoleahtw(6) = .FALSE. lsoleaeiw(6) = .FALSE. lsolhflup(6) = .FALSE. lsolwfldo(6) = .FALSE. lsosbhfup(6) = .FALSE. lvottrdmp(6) = .FALSE. lvostrdmp(6) = .FALSE. lvotbiasd(6) = .FALSE. lvosbiasd(6) = .FALSE. lvotbiasp(6) = .FALSE. lvosbiasp(6) = .FALSE. lvorbiasp(6) = .FALSE. lvosigmat(6) = .FALSE. lvostcoru(6) = .FALSE. lvostcorv(6) = .FALSE. lsocdn10(6) = .FALSE. lvotke(6) = .FALSE. lsotke(6) = .TRUE. lsotke0(6) = .FALSE. lsotkedfac(6)= .FALSE. lsoicestrn(6)= .FALSE. lsoswh(6) = .FALSE. lsomwp(6) = .FALSE. lsophioc(6) = .FALSE. lsotauoc(6) = .FALSE. lsowndmwam(6)= .FALSE. lsophifwam(6)= .FALSE. lsoutauwam(6)= .FALSE. lsovtauwam(6)= .FALSE. lsfqns_tot(6)= .FALSE. lsfqns_ice(6)= .FALSE. lsfqsr_tot(6)= .FALSE. lsfqsr_ice(6)= .FALSE. lsfemp_tot(6)= .FALSE. lsfemp_ice(6)= .FALSE. lsfdqdns_ice(6)= .FALSE. lsfsprecip(6)= .FALSE. lsfutau(6) = .FALSE. lsfvtau(6) = .FALSE. lsfutau_ice(6)= .FALSE. lsfvtau_ice(6)= .FALSE. lsfqns(6) = .FALSE. lsfqsr(6) = .FALSE. lsfemp(6) = .FALSE. lsfswh(6) = .FALSE. lsfmwp(6) = .FALSE. lsfphioc(6) = .FALSE. lsftauoc(6) = .FALSE. lsfustokes(6)= .FALSE. lsfvstokes(6)= .FALSE. lsfutauwam(6)= .FALSE. lsfvtauwam(6)= .FALSE. lsfwndmwam(6)= .FALSE. lsfphifwam(6)= .FALSE. lsfstrn(6) = .FALSE. lsfall(6) = .FALSE. lsohtc26c(6) = .FALSE. lsohtc26cd(6) = .FALSE. lsosfldow(6) = .FALSE. lsosst_cd(6) = .FALSE. lsosss_cd(6) = .FALSE. lcalving(6) = .FALSE. lcalving_heat(6) = .FALSE. lberg_real_calving(6) = .FALSE. lberg_floating_melt(6) = .FALSE. lberg_stored_ice(6) = .FALSE. lberg_melt(6) = .FALSE. lberg_buoy_melt(6) = .FALSE. lberg_eros_melt(6) = .FALSE. lberg_conv_melt(6) = .FALSE. lberg_virtual_area(6) = .FALSE. lbits_src(6) = .FALSE. lbits_melt(6) = .FALSE. lbits_mass(6) = .FALSE. lberg_mass(6) = .FALSE. nouttype(7) = 0 noutfreq(7) = $OUT7FREQ lgridT(7) = .TRUE. lgridU(7) = .TRUE. lgridV(7) = .TRUE. lgridW(7) = .FALSE. lmonthly(7) = .FALSE. lvotemper(7) = .FALSE. lvosaline(7) = .FALSE. lsosstsst(7) = .FALSE. lsosaline(7) = .FALSE. lsossheig(7) = .FALSE. lsostheig(7) = .FALSE. lsobpheig(7) = .FALSE. lsowaflup(7) = .TRUE. lsowaflep(7) = .FALSE. liowaflup(7) = .FALSE. lsorunoff(7) = .TRUE. lsohefldo(7) = .TRUE. lsoshfldo(7) = .TRUE. lsomxl010(7) = .FALSE. lsomxlt05(7) = .FALSE. lsomixhgt(7) = .FALSE. lsomxl125(7) = .FALSE. lsomxl030(7) = .FALSE. lsomxlt02(7) = .FALSE. lsomxkara(7) = .FALSE. lsoicecov(7) = .FALSE. lsowindsp(7) = .TRUE. lsowafldp(7) = .FALSE. lsosafldp(7) = .FALSE. lsohefldp(7) = .FALSE. lsodsstmo(7) = .FALSE. lsodsstyy(7) = .FALSE. lsowafldp(7) = .FALSE. lsosafldp(7) = .FALSE. lsosurfps(7) = .FALSE. lsobowlin(7) = .FALSE. lsothedep(7) = .FALSE. lso14chgt(7) = .FALSE. lso17chgt(7) = .FALSE. lso20chgt(7) = .FALSE. lso28chgt(7) = .FALSE. lso26chgt(7) = .FALSE. lsohtc300(7) = .FALSE. lsohtc700(7) = .FALSE. lsohtcbtm(7) = .FALSE. lsosal300(7) = .FALSE. lsosal700(7) = .FALSE. lsosalbtm(7) = .FALSE. lsoicetem(7) = .FALSE. lsoicealb(7) = .FALSE. lvozocrte(7) = .FALSE. lsozocrte(7) = .FALSE. lsozotaue(7) = .TRUE. lvomecrtn(7) = .FALSE. lsomecrtn(7) = .FALSE. lsometaun(7) = .TRUE. lvozocrtx(7) = .FALSE. lvozoeivu(7) = .FALSE. lsozocrtx(7) = .FALSE. lsozoeivu(7) = .FALSE. lsozotaux(7) = .TRUE. lvomecrty(7) = .FALSE. lvomeeivv(7) = .FALSE. lsomecrty(7) = .FALSE. lsomeeivv(7) = .FALSE. lsometauy(7) = .TRUE. lvovecrtz(7) = .FALSE. lvoveeivw(7) = .FALSE. lvotkeavt(7) = .FALSE. lvotkeevd(7) = .FALSE. lvotkeavm(7) = .FALSE. lvotkeevm(7) = .FALSE. lvoddmavs(7) = .FALSE. lsoleahtw(7) = .FALSE. lsoleaeiw(7) = .FALSE. lsolhflup(7) = .FALSE. lsolwfldo(7) = .FALSE. lsosbhfup(7) = .FALSE. lvottrdmp(7) = .FALSE. lvostrdmp(7) = .FALSE. lvotbiasd(7) = .FALSE. lvosbiasd(7) = .FALSE. lvotbiasp(7) = .FALSE. lvosbiasp(7) = .FALSE. lvorbiasp(7) = .FALSE. lvosigmat(7) = .FALSE. lvostcoru(7) = .FALSE. lvostcorv(7) = .FALSE. lsocdn10(7) = .TRUE. lvotke(7) = .FALSE. lsotke(7) = .FALSE. lsotke0(7) = .FALSE. lsotkedfac(7)= .FALSE. lsoicestrn(7)= .FALSE. lsoswh(7) = .TRUE. lsomwp(7) = .TRUE. lsophioc(7) = .TRUE. lsotauoc(7) = .TRUE. lsowndmwam(7)= .TRUE. lsophifwam(7)= .TRUE. lsoutauwam(7)= .TRUE. lsovtauwam(7)= .TRUE. lsfqns_tot(7)= .TRUE. lsfqns_ice(7)= .TRUE. lsfqsr_tot(7)= .TRUE. lsfqsr_ice(7)= .TRUE. lsfemp_tot(7)= .TRUE. lsfemp_ice(7)= .TRUE. lsfdqdns_ice(7)= .TRUE. lsfsprecip(7)= .TRUE. lsfutau(7) = .TRUE. lsfvtau(7) = .TRUE. lsfutau_ice(7)= .TRUE. lsfvtau_ice(7)= .TRUE. lsfqns(7) = .TRUE. lsfqsr(7) = .TRUE. lsfemp(7) = .TRUE. lsfswh(7) = .TRUE. lsfmwp(7) = .TRUE. lsfphioc(7) = .TRUE. lsftauoc(7) = .TRUE. lsfustokes(7)= .TRUE. lsfvstokes(7)= .TRUE. lsfutauwam(7)= .TRUE. lsfvtauwam(7)= .TRUE. lsfwndmwam(7)= .TRUE. lsfphifwam(7)= .TRUE. lsfstrn(7) = .TRUE. lsfall(7) = .TRUE. lsohtc26c(7) = .FALSE. lsohtc26cd(7) = .FALSE. lsosfldow(7) = .FALSE. lsosst_cd(7) = .FALSE. lsosss_cd(7) = .FALSE. lcalving(7) = .FALSE. lcalving_heat(7) = .FALSE. lberg_real_calving(7) = .FALSE. lberg_floating_melt(7) = .FALSE. lberg_stored_ice(7) = .FALSE. lberg_melt(7) = .FALSE. lberg_buoy_melt(7) = .FALSE. lberg_eros_melt(7) = .FALSE. lberg_conv_melt(7) = .FALSE. lberg_virtual_area(7) = .FALSE. lbits_src(7) = .FALSE. lbits_melt(7) = .FALSE. lbits_mass(7) = .FALSE. lberg_mass(7) = .FALSE. cstreampath(1) = "${OCEOUTPATH:-./}" ! path for output cstreampath(2) = "${OCEOUTPATH:-./}" ! path for output cstreampath(3) = "${OCEOUTPATH:-./}" ! path for output cstreampath(4) = "${OCEOUTPATH:-./}" ! path for output cstreampath(5) = "${OCEOUTPATH:-./}" ! path for output cstreampath(6) = "${OCEOUTPATH:-./}" ! path for output cstreampath(7) = "${OCEOUTPATH:-./}" ! path for output ln_nc4zip_stream(1) = ${NC4F3D:-false} ln_nc4zip_stream(2) = ${NC4F3D:-false} ln_nc4zip_stream(3) = ${NC4F2D:-false} ln_nc4zip_stream(4) = ${NC4F2D:-false} ln_nc4zip_stream(5) = ${NC4F2D:-false} ln_nc4zip_stream(6) = ${NC4F2D:-false} ln_nc4zip_stream(7) = ${NC4F2D:-false} nn_nchunks_k_stream(3) = ${NC4F2DCHUNKZ:-1} nn_nchunks_k_stream(4) = ${NC4F2DCHUNKZ:-1} nn_nchunks_k_stream(5) = ${NC4F2DCHUNKZ:-1} nn_nchunks_k_stream(6) = ${NC4F2DCHUNKZ:-1} nn_nchunks_k_stream(7) = ${NC4F2DCHUNKZ:-1} / eof_namelist #end-of-include $EXPVER/include/nemo_namelist_v36.h ($EXPVER/include/prep_nemoIFS) if [[ ${_USEXIOS_} = 1 ]]; then #include $EXPVER/include/nemo_namelist_xios.h ($EXPVER/include/prep_nemoIFS) cat >namio.in<0)) && server=true xiosbuffer=${XIOS_BUFFER_SIZE:-200000000} if [[ ${XIOS_SPLIT:-no} = yes ]]; then OUT1SPLITFREQ="split_freq=\"\${OUT1FREQ}\${OUT1UNIT}\"" OUT2SPLITFREQ="split_freq=\"\${OUT2FREQ}\${OUT2UNIT}\"" OUT3SPLITFREQ="split_freq=\"\${OUT3FREQ}\${OUT3UNIT}\"" OUT4SPLITFREQ="split_freq=\"\${OUT4FREQ}\${OUT4UNIT}\"" OUT5SPLITFREQ="split_freq=\"\${OUT5FREQ}\${OUT5UNIT}\"" OUT6SPLITFREQ="split_freq=\"\${OUT6FREQ}\${OUT6UNIT}\"" OUT7SPLITFREQ="split_freq=\"\${OUT7FREQ}\${OUT7UNIT}\"" OUT8SPLITFREQ="split_freq=\"\${OUT8FREQ}\${OUT8UNIT}\"" OUT9SPLITFREQ="split_freq=\"\${OUT9FREQ}\${OUT9UNIT}\"" OUT10SPLITFREQ="split_freq=\"\${OUT10FREQ}\${OUT10UNIT}\"" else OUT1SPLITFREQ= OUT2SPLITFREQ= OUT3SPLITFREQ= OUT4SPLITFREQ= OUT5SPLITFREQ= OUT6SPLITFREQ= OUT7SPLITFREQ= OUT8SPLITFREQ= OUT9SPLITFREQ= OUT10SPLITFREQ= fi if [[ ${_XIOS_VER_} = 2 ]]; then if [[ ${OCNVER:-V34} = V36 ]]; then cat > iodef.xml <<_eof_xios_iodef sqrt( @sst2 - @sst * @sst ) sqrt( @ssh2 - @ssh * @ssh ) @sstmax - @sstmin $xiosbuffer 2 0 $server false oceanx _eof_xios_iodef cat > domain_def.xml <<_eof_xios_domain_def _eof_xios_domain_def cat > field_def.xml <<\_eof_xios_field_def toce * e3t soce * e3t sst * sst sss * sss ssh * ssh topthdep - pycndep sshdyn * sshdyn uoce * e3u voce * e3v ut * e3u us * e3u urhop * e3u vt * e3v vs * e3v vrhop * e3v ttrd_atf * e3t strd_atf * e3t ttrd_atf_e3t * 1026.0 * 3991.86795711963 strd_atf_e3t * 1026.0 * 0.001 sqrt( ttrd_xad^2 + ttrd_yad^2 + ttrd_zad^2 ) sqrt( strd_xad^2 + strd_yad^2 + strd_zad^2 ) ttrd_iso_z1 + ttrd_zdf - ttrd_zdfp strd_iso_z1 + strd_zdf - strd_zdfp ttrd_ldf + ttrd_zdf - ttrd_zdfp strd_ldf + strd_zdf - strd_zdfp ttrd_xad * e3t strd_xad * e3t ttrd_yad * e3t strd_yad * e3t ttrd_zad * e3t strd_zad * e3t ttrd_ad * e3t strd_ad * e3t ttrd_totad * e3t strd_totad * e3t ttrd_ldf * e3t strd_ldf * e3t ttrd_zdf * e3t strd_zdf * e3t ttrd_evd * e3t strd_evd * e3t strd_evd * e3t ttrd_iso_x * e3t strd_iso_x * e3t ttrd_iso_y * e3t strd_iso_y * e3t ttrd_iso_z * e3t strd_iso_z * e3t ttrd_iso * e3t strd_iso * e3t ttrd_zdfp * e3t strd_zdfp * e3t ttrd_dmp * e3t strd_dmp * e3t ttrd_bbl * e3t strd_bbl * e3t ttrd_npc * e3t strd_npc * e3t ttrd_qns * e3t_surf strd_cdt * e3t_surf ttrd_qsr * e3t ttrd_bbc * e3t ttrd_totad_e3t * 1026.0 * 3991.86795711963 strd_totad_e3t * 1026.0 * 0.001 ttrd_evd_e3t * 1026.0 * 3991.86795711963 strd_evd_e3t * 1026.0 * 0.001 ttrd_iso_e3t * 1026.0 * 3991.86795711963 strd_iso_e3t * 1026.0 * 0.001 ttrd_zdfp_e3t * 1026.0 * 3991.86795711963 strd_zdfp_e3t * 1026.0 * 0.001 ttrd_qns_e3t * 1026.0 * 3991.86795711963 ttrd_qsr_e3t * 1026.0 * 3991.86795711963 ttrd_bbl_e3t * 1026.0 * 3991.86795711963 strd_bbl_e3t * 1026.0 * 0.001 ttrd_evd_e3t * 1026.0 * 3991.86795711963 strd_evd_e3t * 1026.0 * 0.001 ttrd_tot * e3t strd_tot * e3t ttrd_tot_e3t * 1026.0 * 3991.86795711963 strd_tot_e3t * 1026.0 * 0.001 petrd_zdfp * e3t DIC * e3t Alkalini * e3t O2 * e3t CaCO3 * e3t PO4 * e3t POC * e3t Si * e3t PHY * e3t ZOO * e3t DOC * e3t PHY2 * e3t ZOO2 * e3t DSi * e3t Fer * e3t BFe * e3t GOC * e3t SFe * e3t DFe * e3t GSi * e3t NFe * e3t NCHL * e3t DCHL * e3t NO3 * e3t NH4 * e3t Num * e3t DET * e3t DOM * e3t CFC11 * e3t CFC12 * e3t SF6 * e3t C14B * e3t Age * e3t _eof_xios_field_def elif [[ ${OCNVER:-V34} = V40 ]]; then cat > iodef.xml <<_eof_xios_iodef sqrt( @sst2 - @sst * @sst ) sqrt( @ssh2 - @ssh * @ssh ) @sstmax - @sstmin $xiosbuffer 2 0 $server false oceanx _eof_xios_iodef cat > domain_def.xml <<_eof_xios_domain_def _eof_xios_domain_def cat > field_def.xml <<\_eof_xios_field_def toce * e3t soce * e3t sst * sst sss * sss ssh * ssh topthdep - pycndep sshdyn * sshdyn icemass * icemask + $missval * (1.-icemask ) icethic * icemask05 + $missval * (1.-icemask05) snwmass * icemask + $missval * (1.-icemask ) snwthic * icemask05 + $missval * (1.-icemask05) iceconc * 100. iceage * icemask15 + $missval * (1.-icemask15) icesalt * icemask + $missval * (1.-icemask ) icefrb * icemask + $missval * (1.-icemask ) (icettop+273.15) * icemask + $missval * (1.-icemask) (icetsni+273.15) * icemask + $missval * (1.-icemask) (icetbot+273.15) * icemask + $missval * (1.-icemask) icehc * icemask + $missval * (1.-icemask) snwhc * icemask + $missval * (1.-icemask) vfxsum * icemask + $missval * (1.-icemask) vfxice * icemask + $missval * (1.-icemask) hfxsensib * icemask + $missval * (1.-icemask) hfxcndtop * icemask + $missval * (1.-icemask) hfxcndbot * icemask + $missval * (1.-icemask) sfxice * icemask + $missval * (1.-icemask) uice * icemask + $missval * (1.-icemask) vice * icemask + $missval * (1.-icemask) icevel * icemask + $missval * (1.-icemask) utau_ai * icemask + $missval * (1.-icemask) vtau_ai * icemask + $missval * (1.-icemask) xmtrpice + xmtrpsnw ymtrpice + ymtrpsnw iceconc_cat * icemask_cat + $missval * (1.-icemask_cat) icethic_cat * icemask_cat + $missval * (1.-icemask_cat) snwthic_cat * icemask_cat + $missval * (1.-icemask_cat) iceconc_cat*100. * icemask_cat + $missval * (1.-icemask_cat) uoce * e3u ustokes * e3u voce * e3v vstokes * e3v ut * e3u us * e3u urhop * e3u vt * e3v vs * e3v vrhop * e3v ttrd_atf * e3t strd_atf * e3t ttrd_atf_e3t * 1026.0 * 3991.86795711963 strd_atf_e3t * 1026.0 * 0.001 sqrt( ttrd_xad^2 + ttrd_yad^2 + ttrd_zad^2 ) sqrt( strd_xad^2 + strd_yad^2 + strd_zad^2 ) ttrd_iso_z1 + ttrd_zdf - ttrd_zdfp strd_iso_z1 + strd_zdf - strd_zdfp ttrd_ldf + ttrd_zdf - ttrd_zdfp strd_ldf + strd_zdf - strd_zdfp ttrd_xad * e3t strd_xad * e3t ttrd_yad * e3t strd_yad * e3t ttrd_zad * e3t strd_zad * e3t ttrd_ad * e3t strd_ad * e3t ttrd_totad * e3t strd_totad * e3t ttrd_ldf * e3t strd_ldf * e3t ttrd_zdf * e3t strd_zdf * e3t ttrd_evd * e3t strd_evd * e3t strd_evd * e3t ttrd_iso_x * e3t strd_iso_x * e3t ttrd_iso_y * e3t strd_iso_y * e3t ttrd_iso_z * e3t strd_iso_z * e3t ttrd_iso * e3t strd_iso * e3t ttrd_zdfp * e3t strd_zdfp * e3t ttrd_dmp * e3t strd_dmp * e3t ttrd_bbl * e3t strd_bbl * e3t ttrd_npc * e3t strd_npc * e3t ttrd_qns * e3t_surf strd_cdt * e3t_surf ttrd_qsr * e3t ttrd_bbc * e3t ttrd_totad_e3t * 1026.0 * 3991.86795711963 strd_totad_e3t * 1026.0 * 0.001 ttrd_evd_e3t * 1026.0 * 3991.86795711963 strd_evd_e3t * 1026.0 * 0.001 ttrd_iso_e3t * 1026.0 * 3991.86795711963 strd_iso_e3t * 1026.0 * 0.001 ttrd_zdfp_e3t * 1026.0 * 3991.86795711963 strd_zdfp_e3t * 1026.0 * 0.001 ttrd_qns_e3t * 1026.0 * 3991.86795711963 ttrd_qsr_e3t * 1026.0 * 3991.86795711963 ttrd_bbl_e3t * 1026.0 * 3991.86795711963 strd_bbl_e3t * 1026.0 * 0.001 ttrd_evd_e3t * 1026.0 * 3991.86795711963 strd_evd_e3t * 1026.0 * 0.001 ttrd_tot * e3t strd_tot * e3t ttrd_tot_e3t * 1026.0 * 3991.86795711963 strd_tot_e3t * 1026.0 * 0.001 petrd_zdfp * e3t DIC * e3t Alkalini * e3t O2 * e3t CaCO3 * e3t PO4 * e3t POC * e3t Si * e3t PHY * e3t ZOO * e3t DOC * e3t PHY2 * e3t ZOO2 * e3t DSi * e3t Fer * e3t BFe * e3t GOC * e3t SFe * e3t DFe * e3t GSi * e3t NFe * e3t NCHL * e3t DCHL * e3t NO3 * e3t NH4 * e3t Num * e3t DET * e3t DOM * e3t CFC11 * e3t CFC12 * e3t SF6 * e3t C14B * e3t Age * e3t _eof_xios_field_def else print "XIOS2 not ready of ${OCNVER:-V34}" exit 1 fi else if [[ ${OCNVER:-V34} = V36 ]]; then cat > iodef.xml <<_eof_xios_iodef sqrt( @sst2 - @sst * @sst ) sqrt( @ssh2 - @ssh * @ssh ) @sstmax - @sstmin $xiosbuffer 2 0 $server false oceanx _eof_xios_iodef cat > domain_def.xml <<_eof_xios_domain_def _eof_xios_domain_def cat > field_def.xml <<\_eof_xios_field_def toce * e3t soce * e3t sst * sst sss * sss ssh * ssh topthdep - pycndep sshdyn * sshdyn uoce * e3u voce * e3v ut * e3u us * e3u urhop * e3u vt * e3v vs * e3v vrhop * e3v ttrd_atf * e3t strd_atf * e3t ttrd_atf_e3t * 1026.0 * 3991.86795711963 strd_atf_e3t * 1026.0 * 0.001 sqrt( ttrd_xad^2 + ttrd_yad^2 + ttrd_zad^2 ) sqrt( strd_xad^2 + strd_yad^2 + strd_zad^2 ) ttrd_iso_z1 + ttrd_zdf - ttrd_zdfp strd_iso_z1 + strd_zdf - strd_zdfp ttrd_ldf + ttrd_zdf - ttrd_zdfp strd_ldf + strd_zdf - strd_zdfp ttrd_xad * e3t strd_xad * e3t ttrd_yad * e3t strd_yad * e3t ttrd_zad * e3t strd_zad * e3t ttrd_ad * e3t strd_ad * e3t ttrd_totad * e3t strd_totad * e3t ttrd_ldf * e3t strd_ldf * e3t ttrd_zdf * e3t strd_zdf * e3t ttrd_evd * e3t strd_evd * e3t strd_evd * e3t ttrd_iso_x * e3t strd_iso_x * e3t ttrd_iso_y * e3t strd_iso_y * e3t ttrd_iso_z * e3t strd_iso_z * e3t ttrd_iso * e3t strd_iso * e3t ttrd_zdfp * e3t strd_zdfp * e3t ttrd_dmp * e3t strd_dmp * e3t ttrd_bbl * e3t strd_bbl * e3t ttrd_npc * e3t strd_npc * e3t ttrd_qns * e3t_surf strd_cdt * e3t_surf ttrd_qsr * e3t ttrd_bbc * e3t ttrd_totad_e3t * 1026.0 * 3991.86795711963 strd_totad_e3t * 1026.0 * 0.001 ttrd_evd_e3t * 1026.0 * 3991.86795711963 strd_evd_e3t * 1026.0 * 0.001 ttrd_iso_e3t * 1026.0 * 3991.86795711963 strd_iso_e3t * 1026.0 * 0.001 ttrd_zdfp_e3t * 1026.0 * 3991.86795711963 strd_zdfp_e3t * 1026.0 * 0.001 ttrd_qns_e3t * 1026.0 * 3991.86795711963 ttrd_qsr_e3t * 1026.0 * 3991.86795711963 ttrd_bbl_e3t * 1026.0 * 3991.86795711963 strd_bbl_e3t * 1026.0 * 0.001 ttrd_evd_e3t * 1026.0 * 3991.86795711963 strd_evd_e3t * 1026.0 * 0.001 ttrd_tot * e3t strd_tot * e3t ttrd_tot_e3t * 1026.0 * 3991.86795711963 strd_tot_e3t * 1026.0 * 0.001 petrd_zdfp * e3t DIC * e3t Alkalini * e3t O2 * e3t CaCO3 * e3t PO4 * e3t POC * e3t Si * e3t PHY * e3t ZOO * e3t DOC * e3t PHY2 * e3t ZOO2 * e3t DSi * e3t Fer * e3t BFe * e3t GOC * e3t SFe * e3t DFe * e3t GSi * e3t NFe * e3t NCHL * e3t DCHL * e3t NO3 * e3t NH4 * e3t Num * e3t DET * e3t DOM * e3t CFC11 * e3t CFC12 * e3t SF6 * e3t C14B * e3t Age * e3t _eof_xios_field_def else print "XIOS1 only works with NEMO V36" exit 1 fi fi #end-of-include $EXPVER/include/nemo_namelist_xios.h ($EXPVER/include/prep_nemoIFS) fi echo "NEMO NAMELIST IS:" cat namelist_cfg else #include $EXPVER/include/nemo_namelist.h ($EXPVER/include/prep_nemoIFS) NTIME0=${NTIME0:-0} # # Forcing options # if [[ ${OUT_GRID}_Z${OUT_LEVELS} = "ORCA1_Z42" ]]; then NAM_LN_SMSLABEL=${NAM_LN_SMSLABEL:=.false.} NAM_NN_SMSFREQ=${NAM_NN_SMSFRQ:=24} cat >namelist<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !! NEMO/OPA : 1 - run manager (namrun) !! namelists 2 - Domain (namzgr, namzgr_sco, namdom, namtsd) !! 3 - Surface boundary (namsbc, namsbc_ana, namsbc_flx, namsbc_clio, namsbc_core !! namsbc_cpl, namtra_qsr, namsbc_rnf, !! namsbc_apr, namsbc_ssr, namsbc_alb, !! namsbc_prt) !! 4 - lateral boundary (namlbc, namcla, namobc, namagrif, nambdy, nambdy_tide) !! 5 - bottom boundary (nambfr, nambbc, nambbl) !! 6 - Tracer (nameos, namtra_adv, namtra_ldf, namtra_dmp) !! 7 - dynamics (namdyn_adv, namdyn_vor, namdyn_hpg, namdyn_spg, namdyn_ldf) !! 8 - Verical physics (namzdf, namzdf_ric, namzdf_tke, namzdf_kpp, namzdf_ddm, namzdf_tmx) !! 9 - diagnostics (namnc4, namtrd, namspr, namflo, namptr, namhsb) !! 10 - miscellaneous (namsol, nammpp, nammpp_dyndist, namctl) !! 11 - Obs & Assim (namobs, nam_asminc) !!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !!====================================================================== !! *** Run management namelists *** !!====================================================================== !! namrun parameters of the run !!====================================================================== ! !----------------------------------------------------------------------- &namrun ! parameters of the run !----------------------------------------------------------------------- nn_no = $NCYC ! job number cn_exp = "$EXPVER" ! experience name nn_it000 = $NIT000 ! first time step nn_itend = $NITEND ! last time step (std 5475) nn_date0 = $NDATE0 ! initial calendar date yymmdd (used if nn_rstctl=1) nn_itfile = ${NAM_NN_ITFILE:=-1} nn_leapy = 1 ! Leap year calendar (1) or not (0) ln_rstart = $LN_RESTART ! start from rest (F) or from a restart file (T) nn_rstctl = 0 ! restart control = 0 nn_it000 is not compared to the restart file value ! = 1 use nn_date0 in namelist (not the value in the restart file) ! = 2 calendar parameters read in the restart file cn_ocerst_in = "restart" ! suffix of ocean restart name (input) cn_ocerst_out = "restart" ! suffix of ocean restart name (output) nn_istate = 0 ! output the initial state (1) or not (0) nn_stock = $NSTOCK ! frequency of creation of a restart file (modulo referenced to 1) nn_write = $OUTFREQ ! frequency of write in the output file (modulo referenced to nn_it000) ln_dimgnnn = .false. ! DIMG file format: 1 file for all processors (F) or by processor (T) ln_mskland = .false. ! mask land points in NetCDF outputs (costly: + ~15%) ln_clobber = .true. ! clobber (overwrite) an existing file nn_chunksz = ${NCCHUNKSIZE:-0} ! chunksize (bytes) for NetCDF file nn_slimrst = $NSLIMRST ! option of slim restart output (0:full; 1:nowfields+tke+sbc; 2:nowfields+sbc+en; 3:nowfields only) nn_slimrstin = ${NSLIMRSTIN:-0} ! Force slim restart on input ln_rsttime = ${LN_RSTTIME:-.true.} ! Use time in restart output names rather than time steps ln_writerst = ${LNWRITERST:-.true.} ln_usetime = ${LNUSETIME:-.false.} cn_ocerst_out_path="${CN_OCERST_OUT_PATH:-./}" nn_itout = ${NITOUT:-$NIT000} ln_rcf_read = ${NEMO_LN_RCF_READ:-.false.} ln_rcf_write = ${NEMO_LN_RCF_WRITE:-.false.} / !!====================================================================== !! *** Domain namelists *** !!====================================================================== !! namzgr vertical coordinate !! namzgr_sco s-coordinate or hybrid z-s-coordinate !! namdom space and time domain (bathymetry, mesh, timestep) !! namtsd data: temperature & salinity !!====================================================================== ! !----------------------------------------------------------------------- &namzgr ! vertical coordinate !----------------------------------------------------------------------- ln_zco = .false. ! z-coordinate - full steps (T/F) ("key_zco" may also be defined) ln_zps = .true. ! z-coordinate - partial steps (T/F) ln_sco = .false. ! s- or hybrid z-s-coordinate (T/F) / !----------------------------------------------------------------------- &namzgr_sco ! s-coordinate or hybrid z-s-coordinate !----------------------------------------------------------------------- rn_sbot_min = 300. ! minimum depth of s-bottom surface (>0) (m) rn_sbot_max = 5250. ! maximum depth of s-bottom surface (= ocean depth) (>0) (m) rn_theta = 6.0 ! surface control parameter (0<=rn_theta<=20) rn_thetb = 0.75 ! bottom control parameter (0<=rn_thetb<= 1) rn_rmax = 0.15 ! maximum cut-off r-value allowed (00) or min number of ocean level (<0) rn_e3zps_min= 20. ! partial step thickness is set larger than the minimum of rn_e3zps_rat= 0.1 ! rn_e3zps_min and rn_e3zps_rat*e3t, with 0 fill namsbc_ana ) ln_flx = $NAM_LN_FLX ! flux formulation (T => fill namsbc_flx ) ln_blk_clio = .false. ! CLIO bulk formulation (T => fill namsbc_clio) ln_blk_core = $NAM_LN_BLK ! CORE bulk formulation (T => fill namsbc_core) ln_cpl = .false. ! Coupled formulation (T => fill namsbc_cpl ) ln_apr_dyn = .false. ! Patm gradient added in ocean & ice Eqs. (T => fill namsbc_apr ) nn_ice = $NAM_NN_ICE ! =0 no ice boundary condition , ! =1 use observed ice-cover , ! =2 ice-model used ("key_lim3" or "key_lim2") ln_dm2dc = .false. ! daily mean to diurnal cycle on short wave ln_rnf = .true. ! runoffs (T => fill namsbc_rnf) ln_ssr = .true. ! Sea Surface Restoring on T and/or S (T => fill namsbc_ssr) nn_fwb = $NN_FWB ! FreshWater Budget: =0 unchecked ! =1 global mean of e-p-r set to zero at each time step ! =2 annual global mean of e-p-r set to zero ! =3 global emp set to zero and spread out over erp area ! =4 variable time global mean of e-p-r set to zero (fill namsbc_fwb) nn_hbp = 1 ln_cdgw = ${NAM_LN_CDWW:-false} ! Neutral drag coefficient read from wave model ln_stcor = ${NAM_LN_STCOR:-false} ! Stokes drift read from wave model ln_wavetke = ${NAM_LN_WAVETKE:-false} ! TKE wave parameters read from wave model ln_tauoc = ${NAM_LN_TAUOC:-false} ! Wave-modified stress from wave model ln_wbrsource = ${NAM_LN_WBRSOURCE:-false} ! TKE from wave breaking as source function ln_pert = ${NAM_LNREAD_PERT:-false} ! Option to read surf pert ln_wicestrn = ${NAM_LN_WICESTRN:-false} / !----------------------------------------------------------------------- &namsbc_ana ! analytical surface boundary condition !----------------------------------------------------------------------- nn_tau000 = 0 ! gently increase the stress over the first ntau_rst time-steps rn_utau0 = 0.5 ! uniform value for the i-stress rn_vtau0 = 0.e0 ! uniform value for the j-stress rn_qns0 = 0.e0 ! uniform value for the total heat flux rn_qsr0 = 0.e0 ! uniform value for the solar radiation rn_emp0 = 0.e0 ! uniform value for the freswater budget (E-P) / !----------------------------------------------------------------------- &namsbc_flx ! surface boundary condition : flux formulation !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_utau = 'utau' , 24 , 'utau' , .false. , .false., 'monthly' , '' , '' sn_vtau = 'vtau' , 24 , 'vtau' , .false. , .false., 'monthly' , '' , '' sn_qtot = 'flx' , 24 , 'qtot' , .false. , .false., 'monthly' , '' , '' sn_qsr = 'flx' , 24 , 'qsr' , .false. , .false., 'monthly' , '' , '' sn_emp = 'flx' , 24 , 'emp' , .false. , .false., 'monthly' , '' , '' cn_dir = './' ! root directory for the location of the flux files / !----------------------------------------------------------------------- &namsbc_iif ! surface boundary condition for prescribed ice !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interpol. ! clim ! 'yearly' or ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! sn_ice = 'ice_cover' , 24 , 'ice_cov' , .false. , .false. , 'monthly', '', '' cn_dir = './' ! root for location of ice files dtice = 1. ! time scale for relaxation to sea-ice nn_ice_rel = $NAM_NN_ICE_REL ! Use pseudo-ice treatment / !----------------------------------------------------------------------- &namsbc_clio ! namsbc_clio CLIO bulk formulea !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_utau = 'taux_1m' , -1 , 'sozotaux', .true. , .true. , 'yearly' , '' , '' sn_vtau = 'tauy_1m' , -1 , 'sometauy', .true. , .true. , 'yearly' , '' , '' sn_wndm = 'flx' , -1 , 'socliowi', .true. , .true. , 'yearly' , '' , '' sn_tair = 'flx' , -1 , 'socliot2', .true. , .true. , 'yearly' , '' , '' sn_humi = 'flx' , -1 , 'socliohu', .true. , .true. , 'yearly' , '' , '' sn_ccov = 'flx' , -1 , 'socliocl', .false. , .true. , 'yearly' , '' , '' sn_prec = 'flx' , -1 , 'socliopl', .false. , .true. , 'yearly' , '' , '' cn_dir = './' ! root directory for the location of the bulk files are / !----------------------------------------------------------------------- &namsbc_core ! namsbc_core CORE bulk formulea !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_wndi = 'u10' , ${FREQAN:-6} , 'u10' , .false. , .false. , 'monthly' , '' , '' sn_wndj = 'v10' , ${FREQAN:-6} , 'v10' , .false. , .false. , 'monthly' , '' , '' sn_qsr = 'accum' , ${FREQFC:-24} , 'swdn' , .false. , .false. , 'monthly' , '' , '' sn_qlw = 'accum' , ${FREQFC:-24} , 'lwdn' , .false. , .false. , 'monthly' , '' , '' sn_tair = 'qtml' , ${FREQAN:-6} , 't10' , .false. , .false. , 'monthly' , '' , '' sn_humi = 'qtml' , ${FREQAN:-6} , 'q10' , .false. , .false. , 'monthly' , '' , '' sn_prec = 'accum' , ${FREQFC:-24} , 'precip' , .false. , .false. , 'monthly' , '' , '' sn_snow = 'accum' , ${FREQFC:-24} , 'snow' , .false. , .false. , 'monthly' , '' , '' sn_tdif = 'taudif_core' , 24 , 'taudif' , .false. , .true. , 'yearly' , '' , '' sn_ccov = '${CLDCOVTYP:-tcc}', ${FREQAN:-6} , '${CLDCOVTYP:-tcc}', .false. , .false. , 'monthly' , '' , '' cn_dir = './' ! root directory for the location of the bulk files ln_2m = .false. ! air temperature and humidity referenced at 2m (T) instead 10m (F) ln_taudif = .false. ! HF tau contribution: use "mean of stress module - module of the mean stress" data ln_cdec = $NAM_LN_CDEC ! Switch to ECMWF drag rn_pfac = 1. ! multiplicative factor for precipitation (total & snow) ln_cldcov = ${LNBULKCLD:-.false.} rn_rrelwind = ${NAM_RN_RRELWIND:-1.0} / !----------------------------------------------------------------------- &namsbc_cpl ! coupled ocean/atmosphere model ("key_coupled") !----------------------------------------------------------------------- ! ! description ! multiple ! vector ! vector ! vector ! ! ! ! categories ! reference ! orientation ! grids ! ! send sn_snd_temp = 'weighted oce and ice' , 'no' , '' , '' , '' sn_snd_alb = 'weighted ice' , 'no' , '' , '' , '' sn_snd_thick = 'none' , 'no' , '' , '' , '' sn_snd_crt = 'none' , 'no' , 'spherical' , 'eastward-northward' , 'T' sn_snd_co2 = 'coupled' , 'no' , '' , '' , '' ! receive sn_rcv_w10m = 'none' , 'no' , '' , '' , '' sn_rcv_taumod = 'coupled' , 'no' , '' , '' , '' sn_rcv_tau = 'oce only' , 'no' , 'cartesian' , 'eastward-northward', 'U,V' sn_rcv_dqnsdt = 'coupled' , 'no' , '' , '' , '' sn_rcv_qsr = 'oce and ice' , 'no' , '' , '' , '' sn_rcv_qns = 'oce and ice' , 'no' , '' , '' , '' sn_rcv_emp = 'conservative' , 'no' , '' , '' , '' sn_rcv_rnf = 'coupled' , 'no' , '' , '' , '' sn_rcv_cal = 'coupled' , 'no' , '' , '' , '' sn_rcv_co2 = 'coupled' , 'no' , '' , '' , '' / !----------------------------------------------------------------------- &namtra_qsr ! penetrative solar radiation !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_chl ='chlorophyll', -1 , 'ch' , .true. , .true. , 'yearly' , '' , '' cn_dir = './' ! root directory for the location of the runoff files ln_traqsr = .true. ! Light penetration (T) or not (F) ln_qsr_rgb = $QSRRGB ! RGB (Red-Green-Blue) light penetration ln_qsr_2bd = $QSR2BD ! 2 bands light penetration ln_qsr_bio = .false. ! bio-model light penetration nn_chldta = $CHLTYPE ! RGB : Chl data (=1) or cst value (=0) rn_abs = 0.58 ! RGB & 2 bands: fraction of light (rn_si1) rn_si0 = 0.35 ! RGB & 2 bands: shortess depth of extinction rn_si1 = 23.0 ! 2 bands: longest depth of extinction / !----------------------------------------------------------------------- &namsbc_fwb ! namsbc_fwb Fresh water budget !----------------------------------------------------------------------- rd_fwb = 1. ! time scale to apply fwb correction (days) ikt_fwb = 1 ! freq (time steps) to estimate fwb nr_ssh = $NR_SSH ! 0 for global sl=0. 1/2 for external SL/Mass file cn_dir ='./' ! root directory for location of ssh file sn_ssh = $SSHFILE rcap = 1. ! mm/day cap for FWB adjusment lfwbr = $LFWBR / !----------------------------------------------------------------------- &namsbc_rnf ! runoffs namelist surface boundary condition !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_rnf = 'runoff_1m_nomask', -1 , 'sorunoff', .true. , .true. , 'yearly' , '' , '' sn_cnf = 'runoff_1m_nomask', 0 , 'socoefr', .false. , .true. , 'yearly' , '' , '' sn_s_rnf = 'runoffs' , 24 , 'rosaline', .true. , .true. , 'yearly' , '' , '' sn_t_rnf = 'runoffs' , 24 , 'rotemper', .true. , .true. , 'yearly' , '' , '' sn_dep_rnf = 'runoffs' , 0 , 'rodepth' , .false. , .true. , 'yearly' , '' , '' cn_dir = './' ! root directory for the location of the runoff files ln_rnf_emp = .false. ! runoffs included into precipitation field (T) or into a file (F) ln_rnf_mouth = .true. ! specific treatment at rivers mouths rn_hrnf = 15.e0 ! depth over which enhanced vertical mixing is used rn_avt_rnf = 1.e-4 ! value of the additional vertical mixing coef. [m2/s] rn_rfact = 1.e0 ! multiplicative factor for runoff ln_rnf_depth = .false. ! read in depth information for runoff ln_rnf_tem = .false. ! read in temperature information for runoff ln_rnf_sal = .false. ! read in salinity information for runoff / !----------------------------------------------------------------------- &namsbc_apr ! Atmospheric pressure used as ocean forcing or in bulk !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interpol. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_apr = 'patm' , -1 ,'somslpre', .true. , .true. , 'yearly' , '' , '' cn_dir = './' ! root directory for the location of the bulk files ln_ref_apr = .false. ! ref. pressure: global mean Patm (T) or a constant (F) / !----------------------------------------------------------------------- &namsbc_ssr ! surface boundary condition : sea surface restoring !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_sst = $SSTDMPFILE sn_sss = 'sss' , -1 , 'sss' , .true. , .true. , 'yearly' , '' , '' cn_dir = './' ! root directory for the location of the runoff files nn_sstr = $NAM_NN_SSTR ! add a retroaction term in the surface heat ! flux (=1 1TS; =2 2TS; =3 3TS ) or not (=0) nn_sssr = 2 ! add a damping term in the surface freshwater flux (=2) ! or to SSS only (=1) or no damping term (=0) rn_dqdt = $DQDT0 ! magnitude of the retroaction on temperature [W/m2/K] rn_dqdt1 = $DQDT1 ! magnitude of the retroaction on temperature [W/m2/K] 1st TS rn_dqdt2 = $DQDT2 ! magnitude of the retroaction on temperature [W/m2/K] 2nd TS rn_dqdt3 = $DQDT3 ! magnitude of the retroaction on temperature [W/m2/K] 3rd TS rn_deds = $DEDS0 ! magnitude of the damping on salinity [mm/day] lgth_2ts = $RML ! window for 2ts rlx running mean lgth_3ts = $RML1 ! window for 3rd ts rlx ln_sssr_bnd = .true. ! flag to bound erp term (associated with nn_sssr=2) rn_sssr_bnd = 4.e0 ! ABS(Max/Min) value of the damping erp term [mm/day] dqdt_limice = 0.1 ! restoring factors under ice [ratio of dqdt] / !----------------------------------------------------------------------- &namsbc_alb ! albedo parameters !----------------------------------------------------------------------- rn_cloud = 0.06 ! cloud correction to snow and ice albedo rn_albice = 0.53 ! albedo of melting ice in the arctic and antarctic rn_alphd = 0.80 ! coefficients for linear interpolation used to rn_alphc = 0.65 ! compute albedo between two extremes values rn_alphdi = 0.72 ! (Pyane, 1972) / !----------------------------------------------------------------------- &namsbc_prt ! perturbations to forcing (MAB 2014) !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_putau = 'putau' , 24 , 'utau' , .false. , .false., 'monthly' , '' , '' sn_pvtau = 'pvtau' , 24 , 'vtau' , .false. , .false., 'monthly' , '' , '' sn_pqns = 'pqns' , 24 , 'qns' , .false. , .false., 'monthly' , '' , '' sn_pqsr = 'pqsr' , 24 , 'qsr' , .false. , .false., 'monthly' , '' , '' sn_pemp = 'pemp' , 24 , 'emp' , .false. , .false., 'monthly' , '' , '' nn_putau = ${NAM_NN_PUTAU:=0} !0/1/2 for nothing/addpert/replace nn_pvtau = ${NAM_NN_PVTAU:=0} nn_pqns = ${NAM_NN_PQNS:=0} nn_pqsr = ${NAM_NN_PQSR:=0} nn_pemp = ${NAM_NN_PEMP:=0} cn_dir = './' ! root directory for the location of the pert files / !!====================================================================== !! *** Lateral boundary condition *** !!====================================================================== !! namlbc lateral momentum boundary condition !! namcla cross land advection !! namobc open boundaries parameters ("key_obc") !! namagrif agrif nested grid ( read by child model only ) ("key_agrif") !! nambdy Unstructured open boundaries ("key_bdy") !! namtide Tidal forcing at open boundaries ("key_bdy_tides") !!====================================================================== ! !----------------------------------------------------------------------- &namlbc ! lateral momentum boundary condition !----------------------------------------------------------------------- rn_shlat = 2. ! shlat = 0 ! 0 < shlat < 2 ! shlat = 2 ! 2 < shlat ! free slip ! partial slip ! no slip ! strong slip ln_vorlat = .false. ! consistency of vorticity boundary condition with analytical eqs. / !----------------------------------------------------------------------- &namcla ! cross land advection !----------------------------------------------------------------------- nn_cla = 0 ! advection between 2 ocean pts separates by land / !----------------------------------------------------------------------- &namobc ! open boundaries parameters ("key_obc") !----------------------------------------------------------------------- ln_obc_clim = .false. ! climatological obc data files (T) or not (F) ln_vol_cst = .true. ! impose the total volume conservation (T) or not (F) ln_obc_fla = .false. ! Flather open boundary condition nn_obcdta = 1 ! = 0 the obc data are equal to the initial state ! = 1 the obc data are read in 'obc.dta' files cn_obcdta = 'annual' ! set to annual if obc datafile hold 1 year of data ! set to monthly if obc datafile hold 1 month of data rn_dpein = 1. ! damping time scale for inflow at east open boundary rn_dpwin = 1. ! - - - west - - rn_dpnin = 1. ! - - - north - - rn_dpsin = 1. ! - - - south - - rn_dpeob = 3000. ! time relaxation (days) for the east open boundary rn_dpwob = 15. ! - - - west - - rn_dpnob = 3000. ! - - - north - - rn_dpsob = 15. ! - - - south - - rn_volemp = 1. ! = 0 the total volume change with the surface flux (E-P-R) ! = 1 the total volume remains constant / !----------------------------------------------------------------------- &namagrif ! AGRIF zoom ("key_agrif") !----------------------------------------------------------------------- nn_cln_update = 3 ! baroclinic update frequency ln_spc_dyn = .true. ! use 0 as special value for dynamics rn_sponge_tra = 2880. ! coefficient for tracer sponge layer [m2/s] rn_sponge_dyn = 2880. ! coefficient for dynamics sponge layer [m2/s] / !----------------------------------------------------------------------- &nam_tide ! tide parameters (#ifdef key_tide) !----------------------------------------------------------------------- ln_tide_pot = .true. ! use tidal potential forcing nb_harmo = 11 ! number of constituents used clname(1) = 'M2' ! name of constituent clname(2) = 'S2' clname(3) = 'N2' clname(4) = 'K1' clname(5) = 'O1' clname(6) = 'Q1' clname(7) = 'M4' clname(8) = 'K2' clname(9) = 'P1' clname(10) = 'Mf' clname(11) = 'Mm' / !----------------------------------------------------------------------- &nambdy ! unstructured open boundaries ("key_bdy") !----------------------------------------------------------------------- nb_bdy = 1 ! number of open boundary sets ln_coords_file = .true. ! =T : read bdy coordinates from file cn_coords_file = 'coordinates.bdy.nc' ! bdy coordinates files ln_mask_file = .false. ! =T : read mask from file cn_mask_file = '' ! name of mask file (if ln_mask_file=.TRUE.) nn_dyn2d = 2 ! boundary conditions for barotropic fields nn_dyn2d_dta = 3 ! = 0, bdy data are equal to the initial state ! = 1, bdy data are read in 'bdydata .nc' files ! = 2, use tidal harmonic forcing data from files ! = 3, use external data AND tidal harmonic forcing nn_dyn3d = 0 ! boundary conditions for baroclinic velocities nn_dyn3d_dta = 0 ! = 0, bdy data are equal to the initial state ! = 1, bdy data are read in 'bdydata .nc' files nn_tra = 1 ! boundary conditions for T and S nn_tra_dta = 1 ! = 0, bdy data are equal to the initial state ! = 1, bdy data are read in 'bdydata .nc' files nn_rimwidth = 10 ! width of the relaxation zone ln_vol = .false. ! total volume correction (see nn_volctl parameter) nn_volctl = 1 ! = 0, the total water flux across open boundaries is zero / !----------------------------------------------------------------------- &nambdy_dta ! open boundaries - external data ("key_bdy") !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interpol. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! bn_ssh = 'amm12_bdyT_u2d' , 24 , 'sossheig' , .true. , .false. , 'daily' , '' , '' bn_u2d = 'amm12_bdyU_u2d' , 24 , 'vobtcrtx' , .true. , .false. , 'daily' , '' , '' bn_v2d = 'amm12_bdyV_u2d' , 24 , 'vobtcrty' , .true. , .false. , 'daily' , '' , '' bn_u3d = 'amm12_bdyU_u3d' , 24 , 'vozocrtx' , .true. , .false. , 'daily' , '' , '' bn_v3d = 'amm12_bdyV_u3d' , 24 , 'vomecrty' , .true. , .false. , 'daily' , '' , '' bn_tem = 'amm12_bdyT_tra' , 24 , 'votemper' , .true. , .false. , 'daily' , '' , '' bn_sal = 'amm12_bdyT_tra' , 24 , 'vosaline' , .true. , .false. , 'daily' , '' , '' cn_dir = 'bdydta/' ln_full_vel = .false. / !----------------------------------------------------------------------- &nambdy_tide ! tidal forcing at open boundaries !----------------------------------------------------------------------- filtide = 'bdydta/amm12_bdytide_' ! file name root of tidal forcing files tide_cpt(1) ='Q1' ! names of tidal components used tide_cpt(2) ='O1' ! names of tidal components used tide_cpt(3) ='P1' ! names of tidal components used tide_cpt(4) ='S1' ! names of tidal components used tide_cpt(5) ='K1' ! names of tidal components used tide_cpt(6) ='2N2' ! names of tidal components used tide_cpt(7) ='MU2' ! names of tidal components used tide_cpt(8) ='N2' ! names of tidal components used tide_cpt(9) ='NU2' ! names of tidal components used tide_cpt(10) ='M2' ! names of tidal components used tide_cpt(11) ='L2' ! names of tidal components used tide_cpt(12) ='T2' ! names of tidal components used tide_cpt(13) ='S2' ! names of tidal components used tide_cpt(14) ='K2' ! names of tidal components used tide_cpt(15) ='M4' ! names of tidal components used tide_speed(1) = 13.398661 ! phase speeds of tidal components (deg/hour) tide_speed(2) = 13.943036 ! phase speeds of tidal components (deg/hour) tide_speed(3) = 14.958932 ! phase speeds of tidal components (deg/hour) tide_speed(4) = 15.000001 ! phase speeds of tidal components (deg/hour) tide_speed(5) = 15.041069 ! phase speeds of tidal components (deg/hour) tide_speed(6) = 27.895355 ! phase speeds of tidal components (deg/hour) tide_speed(7) = 27.968210 ! phase speeds of tidal components (deg/hour) tide_speed(8) = 28.439730 ! phase speeds of tidal components (deg/hour) tide_speed(9) = 28.512585 ! phase speeds of tidal components (deg/hour) tide_speed(10) = 28.984106 ! phase speeds of tidal components (deg/hour) tide_speed(11) = 29.528479 ! phase speeds of tidal components (deg/hour) tide_speed(12) = 29.958935 ! phase speeds of tidal components (deg/hour) tide_speed(13) = 30.000002 ! phase speeds of tidal components (deg/hour) tide_speed(14) = 30.082138 ! phase speeds of tidal components (deg/hour) tide_speed(15) = 57.968212 ! phase speeds of tidal components (deg/hour) ln_tide_date = .true. ! adjust tidal harmonics for start date of run / !!====================================================================== !! *** Bottom boundary condition *** !!====================================================================== !! nambfr bottom friction !! nambbc bottom temperature boundary condition !! nambbl bottom boundary layer scheme ("key_trabbl") !!====================================================================== ! !----------------------------------------------------------------------- &nambfr ! bottom friction !----------------------------------------------------------------------- nn_bfr = 1 ! type of bottom friction : = 0 : free slip, = 1 : linear friction ! = 2 : nonlinear friction rn_bfri1 = 4.e-4 ! bottom drag coefficient (linear case) rn_bfri2 = 1.e-3 ! bottom drag coefficient (non linear case) rn_bfeb2 = 2.5e-3 ! bottom turbulent kinetic energy background (m2/s2) ln_bfr2d = .false. ! horizontal variation of the bottom friction coef (read a 2D mask file ) rn_bfrien = 50. ! local multiplying factor of bfr (ln_bfr2d=T) ln_bfrimp = .true. ! implicit bottom friction (requires ln_zdfexp = .false. if true) / !----------------------------------------------------------------------- &nambbc ! bottom temperature boundary condition !----------------------------------------------------------------------- ln_trabbc = .true. ! Apply a geothermal heating at the ocean bottom nn_geoflx = 2 ! geothermal heat flux: = 0 no flux ! = 1 constant flux ! = 2 variable flux (read in geothermal_heating.nc in mW/m2) rn_geoflx_cst = 86.4e-3 ! Constant value of geothermal heat flux [W/m2] / !----------------------------------------------------------------------- &nambbl ! bottom boundary layer scheme !----------------------------------------------------------------------- nn_bbl_ldf = 1 ! diffusive bbl (=1) or not (=0) nn_bbl_adv = 0 ! advective bbl (=1/2) or not (=0) rn_ahtbbl = 0. ! lateral mixing coefficient in the bbl [m2/s] rn_gambbl = 10. ! advective bbl coefficient [s] / !!====================================================================== !! Tracer (T & S ) namelists !!====================================================================== !! nameos equation of state !! namtra_adv advection scheme !! namtra_ldf lateral diffusion scheme !! namtra_dmp T & S newtonian damping !!====================================================================== ! !----------------------------------------------------------------------- &nameos ! ocean physical parameters !----------------------------------------------------------------------- nn_eos = 0 ! type of equation of state and Brunt-Vaisala frequency ! = 0, UNESCO (formulation of Jackett and McDougall (1994) and of McDougall (1987) ) ! = 1, linear: rho(T) = rau0 * ( 1.028 - ralpha * T ) ! = 2, linear: rho(T,S) = rau0 * ( rbeta * S - ralpha * T ) rn_alpha = 2.0e-4 ! thermal expension coefficient (nn_eos= 1 or 2) rn_beta = 7.7e-4 ! saline expension coefficient (nn_eos= 2) / !----------------------------------------------------------------------- &namtra_adv ! advection scheme for tracer !----------------------------------------------------------------------- ln_traadv_cen2 = .false. ! 2nd order centered scheme ln_traadv_tvd = .true. ! TVD scheme ln_traadv_muscl = .false. ! MUSCL scheme ln_traadv_muscl2 = .false. ! MUSCL2 scheme + cen2 at boundaries ln_traadv_ubs = .false. ! UBS scheme ln_traadv_qck = .false. ! QUICKEST scheme / !----------------------------------------------------------------------- &namtra_ldf ! lateral diffusion scheme for tracer !----------------------------------------------------------------------- ! ! Type of the operator : ln_traldf_lap = .true. ! laplacian operator ln_traldf_bilap = .false. ! bilaplacian operator ! ! Direction of action : ln_traldf_level = .false. ! iso-level ln_traldf_hor = .false. ! horizontal (geopotential) (require "key_ldfslp" when ln_sco=T) ln_traldf_iso = .true. ! iso-neutral (require "key_ldfslp") ln_traldf_grif = .false. ! griffies skew flux formulation (require "key_ldfslp") ln_traldf_gdia = .false. ! griffies operator strfn diagnostics (require "key_ldfslp") ln_triad_iso = .false. ! griffies operator calculates triads twice => pure lateral mixing in ML (require "key_ldfslp") ln_botmix_grif = .false. ! griffies operator with lateral mixing on bottom (require "key_ldfslp") ! Coefficient rn_aht_0 = 1000.0 ! horizontal eddy diffusivity for tracers [m2/s] rn_ahtb_0 = 0. ! background eddy diffusivity for ldf_iso [m2/s] rn_aeiv_0 = 1000.0 ! eddy induced velocity coefficient [m2/s] (require "key_traldf_eiv") / !----------------------------------------------------------------------- &namtra_dmp ! tracer: T & S newtonian damping ('key_tradmp') !----------------------------------------------------------------------- ln_tradmp = .true. ! add a damping termn (T) or not (F) ln_tradmp_sfc = ${LN_TRADMP_SFC:=false} ! Extend 3D damping to surface layer. nn_hdmp = $NAM_HDMP ! horizontal shape =-1, damping in Med and Red Seas only ! =XX, damping poleward of XX degrees (XX>=0) ! + F(distance-to-coast) + Red and Med Seas nn_zdmp = ${NAM_ZDMP:=0} ! vertical shape =0 damping throughout the water column ! =1 no damping in the mixing layer (kz criteria) ! =2 no damping in the mixed layer (rho crieria) rn_surf = $NAM_SDMP ! surface time scale of damping [days] rn_bot = $NAM_BDMP ! bottom time scale of damping [days] rn_dep = 800. ! depth of transition between rn_surf and rn_bot [meters] rn_dmp_width = ${RN_DMP_WIDTH:=10.} ! Width of transition used with NN_HDMP>0 [degrees latitude] nn_file = 0 ! create a damping.coeff NetCDF file (=1) or not (=0) / !!====================================================================== !! *** Dynamics namelists *** !!====================================================================== !! namdyn_adv formulation of the momentum advection !! namdyn_vor advection scheme !! namdyn_hpg hydrostatic pressure gradient !! namdyn_spg surface pressure gradient (CPP key only) !! namdyn_ldf lateral diffusion scheme !!====================================================================== ! !----------------------------------------------------------------------- &namdyn_adv ! formulation of the momentum advection !----------------------------------------------------------------------- ln_dynadv_vec = .true. ! vector form (T) or flux form (F) ln_dynadv_cen2= .false. ! flux form - 2nd order centered scheme ln_dynadv_ubs = .false. ! flux form - 3rd order UBS scheme / !----------------------------------------------------------------------- &namdyn_vor ! option of physics/algorithm (not control by CPP keys) !----------------------------------------------------------------------- ln_dynvor_ene = .false. ! enstrophy conserving scheme ln_dynvor_ens = .false. ! energy conserving scheme ln_dynvor_mix = .false. ! mixed scheme ln_dynvor_een = .true. ! energy & enstrophy scheme / !----------------------------------------------------------------------- &namdyn_hpg ! Hydrostatic pressure gradient option !----------------------------------------------------------------------- ln_hpg_zco = .false. ! z-coordinate - full steps ln_hpg_zps = .true. ! z-coordinate - partial steps (interpolation) ln_hpg_sco = .false. ! s-coordinate (standard jacobian formulation) ln_hpg_djc = .false. ! s-coordinate (Density Jacobian with Cubic polynomial) ln_hpg_prj = .false. ! s-coordinate (Pressure Jacobian scheme) ln_dynhpg_imp = .false. ! time stepping: semi-implicit time scheme (T) ! centered time scheme (F) / !----------------------------------------------------------------------- !namdyn_spg ! surface pressure gradient (CPP key only) !----------------------------------------------------------------------- ! ! explicit free surface ("key_dynspg_exp") ! ! filtered free surface ("key_dynspg_flt") ! ! split-explicit free surface ("key_dynspg_ts") !----------------------------------------------------------------------- &namdyn_ldf ! lateral diffusion on momentum !----------------------------------------------------------------------- ! ! Type of the operator : ln_dynldf_lap = .true. ! laplacian operator ln_dynldf_bilap = .false. ! bilaplacian operator ! ! Direction of action : ln_dynldf_level = .false. ! iso-level ln_dynldf_hor = .true. ! horizontal (geopotential) (require "key_ldfslp" in s-coord.) ln_dynldf_iso = .false. ! iso-neutral (require "key_ldfslp") ! ! Coefficient rn_ahm_0_lap = 10000.0 ! horizontal laplacian eddy viscosity [m2/s] rn_ahm_0_lap_eq = 2000.0 ! horizontal laplacian eddy viscosity [m2/s] rn_ahmb_0 = 0. ! background eddy viscosity for ldf_iso [m2/s] rn_ahm_0_blp = 0. ! horizontal bilaplacian eddy viscosity [m4/s] / !!====================================================================== !! Tracers & Dynamics vertical physics namelists !!====================================================================== !! namzdf vertical physics !! namzdf_ric richardson number dependent vertical mixing ("key_zdfric") !! namzdf_tke TKE dependent vertical mixing ("key_zdftke") !! namzdf_kpp KPP dependent vertical mixing ("key_zdfkpp") !! namzdf_ddm double diffusive mixing parameterization ("key_zdfddm") !! namzdf_tmx tidal mixing parameterization ("key_zdftmx") !!====================================================================== ! !----------------------------------------------------------------------- &namzdf ! vertical physics !----------------------------------------------------------------------- rn_avm0 = 1.2e-4 ! vertical eddy viscosity [m2/s] (background Kz if not "key_zdfcst") rn_avt0 = 1.2e-5 ! vertical eddy diffusivity [m2/s] (background Kz if not "key_zdfcst") nn_avb = 0 ! profile for background avt & avm (=1) or not (=0) nn_havtb = 0 ! horizontal shape for avtb (=1) or not (=0) ln_zdfevd = .true. ! enhanced vertical diffusion (evd) (T) or not (F) nn_evdm = 0 ! evd apply on tracer (=0) or on tracer and momentum (=1) rn_avevd = 100. ! evd mixing coefficient [m2/s] ln_zdfnpc = .false. ! Non-Penetrative Convective algorithm (T) or not (F) nn_npc = 1 ! frequency of application of npc nn_npcp = 365 ! npc control print frequency ln_zdfexp = .false. ! time-stepping: split-explicit (T) or implicit (F) time stepping nn_zdfexp = 3 ! number of sub-timestep for ln_zdfexp=T / !----------------------------------------------------------------------- &namzdf_ric ! richardson number dependent vertical diffusion ("key_zdfric" ) !----------------------------------------------------------------------- rn_avmri = 100.e-4 ! maximum value of the vertical viscosity rn_alp = 5. ! coefficient of the parameterization nn_ric = 2 ! coefficient of the parameterization rn_ekmfc = 0.7 ! Factor in the Ekman depth Equation rn_mldmin = 1.0 ! minimum allowable mixed-layer depth estimate (m) rn_mldmax =1000.0 ! maximum allowable mixed-layer depth estimate (m) rn_wtmix = 10.0 ! vertical eddy viscosity coeff [m2/s] in the mixed-layer rn_wvmix = 10.0 ! vertical eddy diffusion coeff [m2/s] in the mixed-layer ln_mldw = .true. ! Flag to use or not the mized layer depth param. / !----------------------------------------------------------------------- &namzdf_tke ! turbulent eddy kinetic dependent vertical diffusion ("key_zdftke") !----------------------------------------------------------------------- rn_ediff = ${NAM_RN_EDIFF:-0.1} ! coef. for vertical eddy coef. (avt=rn_ediff*mxl*sqrt(e) ) rn_ediss = ${NAM_RN_EDISS:-0.7} ! coef. of the Kolmogoroff dissipation rn_ebb = ${NAM_RN_EBB:-67.83} ! coef. of the surface input of tke (=67.83 suggested when ln_mxl0=T) ln_ebbice = ${NAM_LN_EBBICE:-true} ! modify tke surface input under ice (F) rn_ebbice = ${NAM_RN_EBBICE:-20} ! coef. of the surface input of tke under ice rn_emin = 1.e-6 ! minimum value of tke [m2/s2] rn_emin0 = 1.e-4 ! surface minimum value of tke [m2/s2] nn_mxl = ${NAM_NN_MXL:-3} ! mixing length: = 0 bounded by the distance to surface and bottom ! = 1 bounded by the local vertical scale factor ! = 2 first vertical derivative of mixing length bounded by 1 ! = 3 as =2 with distinct disspipative an mixing length scale nn_pdl = ${NAM_NN_PDL:-1} ! Prandtl number function of richarson number (=1, avt=pdl(Ri)*avm) or not (=0, avt=avm) ln_mxl0 = .true. ! surface mixing length scale = F(wind stress) (T) or not (F) rn_mxl0 = 0.04 ! surface buoyancy lenght scale minimum value ln_lc = .true. ! Langmuir cell parameterisation (Axell 2002) rn_lc = 0.15 ! coef. associated to Langmuir cells nn_etau = ${NAM_NN_ETAU:-1} ! penetration of tke below the mixed layer (ML) due to internal & intertial waves ! = 0 no penetration ! = 1 add a tke source below the ML ! = 2 add a tke source just at the base of the ML ! = 3 as = 1 applied on HF part of the stress ("key_coupled") rn_efr = ${NAM_RN_EFR:-0.05} ! fraction of surface tke value which penetrates below the ML (nn_etau=1 or 2) nn_htau = ${NAM_NN_HTAU:-1} ! type of exponential decrease of tke penetration below the ML ! = 0 constant 10 m length scale ! = 1 0.5m at the equator to 30m poleward of 40 degrees ! = 3 proportional to SWH rn_whtauscl = ${NAM_RN_WHTAUSCL:-4} ! SWH scalign for htau=3 rn_whtaumin = ${NAM_RN_WHTAUMIN:-1} ! minimum htau (nn_htau=3) rn_delta_0 = ${NAM_RN_DELTA_0:-0.19} ! Strength of background diffusion rn_alpha_m = ${NAM_RN_ALPHA_M:-1.} rn_alpha_h = ${NAM_RN_ALPHA_H:-1.4} rn_beta_m = ${NAM_RN_BETA_M:-14.} rn_beta_h = ${NAM_RN_BETA_H:-11.2} / !------------------------------------------------------------------------ &namzdf_kpp ! K-Profile Parameterization dependent vertical mixing ("key_zdfkpp", and optionally: !------------------------------------------------------------------------ "key_kppcustom" or "key_kpplktb") ln_kpprimix = .true. ! shear instability mixing rn_difmiw = 1.0e-04 ! constant internal wave viscosity [m2/s] rn_difsiw = 0.1e-04 ! constant internal wave diffusivity [m2/s] rn_riinfty = 0.8 ! local Richardson Number limit for shear instability rn_difri = 0.0050 ! maximum shear mixing at Rig = 0 [m2/s] rn_bvsqcon = -0.01e-07 ! Brunt-Vaisala squared for maximum convection [1/s2] rn_difcon = 1. ! maximum mixing in interior convection [m2/s] nn_avb = 0 ! horizontal averaged (=1) or not (=0) on avt and amv nn_ave = 1 ! constant (=0) or profile (=1) background on avt / !----------------------------------------------------------------------- &namzdf_gls ! GLS vertical diffusion ("key_zdfgls") !----------------------------------------------------------------------- rn_emin = 1.e-6 ! minimum value of e [m2/s2] rn_epsmin = 1.e-12 ! minimum value of eps [m2/s3] ln_length_lim = .true. ! limit on the dissipation rate under stable stratification (Galperin et al., 1988) rn_clim_galp = 0.53 ! galperin limit ln_crban = .true. ! Use Craig & Banner (1994) surface wave mixing parametrisation ln_sigpsi = .true. ! Activate or not Burchard 2001 mods on psi schmidt number in the wb case rn_crban = 100. ! Craig and Banner 1994 constant for wb tke flux rn_charn = 70000. ! Charnock constant for wb induced roughness length nn_tkebc_surf = 1 ! surface tke condition (0/1/2=Dir/Neum/Dir Mellor-Blumberg) nn_tkebc_bot = 1 ! bottom tke condition (0/1=Dir/Neum) nn_psibc_surf = 1 ! surface psi condition (0/1/2=Dir/Neum/Dir Mellor-Blumberg) nn_psibc_bot = 1 ! bottom psi condition (0/1=Dir/Neum) nn_stab_func = 2 ! stability function (0=Galp, 1= KC94, 2=CanutoA, 3=CanutoB) nn_clos = 1 ! predefined closure type (0=MY82, 1=k-eps, 2=k-w, 3=Gen) / !----------------------------------------------------------------------- &namzdf_ddm ! double diffusive mixing parameterization ("key_zdfddm") !----------------------------------------------------------------------- rn_avts = 1.e-4 ! maximum avs (vertical mixing on salinity) rn_hsbfr = 1.6 ! heat/salt buoyancy flux ratio / !----------------------------------------------------------------------- &namzdf_tmx ! tidal mixing parameterization ("key_zdftmx") !----------------------------------------------------------------------- rn_htmx = 500. ! vertical decay scale for turbulence (meters) rn_n2min = 1.e-8 ! threshold of the Brunt-Vaisala frequency (s-1) rn_tfe = 0.333 ! tidal dissipation efficiency rn_me = 0.2 ! mixing efficiency ln_tmx_itf = .true. ! ITF specific parameterisation rn_tfe_itf = 1. ! ITF tidal dissipation efficiency / !!====================================================================== !! *** Miscellaneous namelists *** !!====================================================================== !! nammpp Massively Parallel Processing ("key_mpp_mpi") !! namctl Control prints & Benchmark !! namsol elliptic solver / island / free surface !!====================================================================== ! !----------------------------------------------------------------------- &namsol ! elliptic solver / island / free surface !----------------------------------------------------------------------- nn_solv = 1 ! elliptic solver: =1 preconditioned conjugate gradient (pcg) ! =2 successive-over-relaxation (sor) nn_sol_arp = 0 ! absolute/relative (0/1) precision convergence test rn_eps = 1.e-6 ! absolute precision of the solver nn_nmin = 300 ! minimum of iterations for the SOR solver nn_nmax = 2000 ! maximum of iterations for the SOR solver nn_nmod = 10 ! frequency of test for the SOR solver rn_resmax = 1.e-10 ! absolute precision for the SOR solver rn_sor = 1.92 ! optimal coefficient for SOR solver (to be adjusted with the domain) / !----------------------------------------------------------------------- &nammpp ! Massively Parallel Processing ("key_mpp_mpi") !----------------------------------------------------------------------- cn_mpi_send = 'I' ! mpi send/recieve type ='S', 'B', or 'I' for standard send, ! buffer blocking send or immediate non-blocking sends, resp. nn_buffer = 0 ! size in bytes of exported buffer ('B' case), 0 no exportation jpni = $NEMO_NPROCX ! jpni number of processors following i (set automatically if < 1) jpnj = $NEMO_NPROCY ! jpnj number of processors following j (set automatically if < 1) jpnij = $NEMO_NPROC ! jpnij number of local domains (set automatically if < 1) ln_nnogather = .true. ln_lbcmap = ${LN_LBCMAP:-.TRUE.} / !----------------------------------------------------------------------- &namctl ! Control prints & Benchmark !----------------------------------------------------------------------- ln_ctl = .false. ! trends control print (expensive!) nn_print = 0 ! level of print (0 no extra print) nn_ictls = 0 ! start i indice of control sum (use to compare mono versus nn_ictle = 0 ! end i indice of control sum multi processor runs nn_jctls = 0 ! start j indice of control over a subdomain) nn_jctle = 0 ! end j indice of control nn_isplt = 1 ! number of processors in i-direction nn_jsplt = 1 ! number of processors in j-direction nn_bench = 0 ! Bench mode (1/0): CAUTION use zero except for bench ! (no physical validity of the results) nn_timing = 1 ! timing by routine activated (=1) creates timing.output file, or not (=0) ln_mpiprt = .false. ! Non-masters tasks write ocean.output_... ln_smslabel= $NAM_LN_SMSLABEL ! Communicate with SMS. cn_smslabel = "${CN_SMSLABEL:-xlabel}" nn_smsfrq = $NAM_NN_SMSFRQ ! SMS communication frequency (time steps) ln_diadebug = .false. ! Grid point diagnostic output (fill namdiadebug) ln_sglread = ${NAM_LN_SGLREAD:-.true.} ln_sglreadfbm = ${NAM_LN_SGLREADFBM:-.true.} ln_sglwrite = ${LNSGLWRITE:-.false.} ln_sglwritefbm = ${LNSGLWRITEFBM:-.false.} ln_timeout = ${LNTIMEOUT:=.true.} ln_timeoutflush = ${LNTIMEOUTFLUSH:=.true.} / !----------------------------------------------------------------------- &namcfg ! parameters of the configuration !----------------------------------------------------------------------- cp_cfg = "orca" ! name of the configuration cp_cfz = "normal" ! zoom jp_cfg = 1 ! resolution of the configuration jpidta = 362 ! 1st lateral dimension ( >= jpi ) jpjdta = 292 ! 2nd " " ( >= jpj ) jpkdta = 42 ! number of levels ( >= jpk ) jpiglo = 362 ! 1st dimension of global domain --> i =jpidta jpjglo = 292 ! 2nd - - --> j =jpjdta jpizoom = 1 ! left bottom (i,j) indices of the zoom jpjzoom = 1 ! in data domain indices jperio = 6 ! lateral cond. type (between 0 and 6) ln_trabbl = .true. ! key_trabbl set nn_ldfdyn = 3 ! key_dynldf_c3d / !!====================================================================== !! *** Diagnostics namelists *** !!====================================================================== !! namnc4 netcdf4 chunking and compression settings ("key_netcdf4") !! namtrd dynamics and/or tracer trends ("key_trddyn","key_trdtra","key_trdmld") !! namflo float parameters ("key_float") !! namptr Poleward Transport Diagnostics !! namhsb Heat and salt budgets !!====================================================================== ! !----------------------------------------------------------------------- &namnc4 ! netcdf4 chunking and compression settings ("key_netcdf4") !----------------------------------------------------------------------- nn_nchunks_i= ${NC4CHUNKX:-4} ! number of chunks in i-dimension nn_nchunks_j= ${NC4CHUNKY:-4} ! number of chunks in j-dimension nn_nchunks_k= ${NC4CHUNKZ:-42} ! number of chunks in k-dimension ! setting nn_nchunks_k = jpk will give a chunk size of 1 in the vertical which ! is optimal for postprocessing which works exclusively with horizontal slabs ln_nc4zip = ${NC4REST:-.false.} ! (T) use netcdf4 chunking and compression ! (F) ignore chunking information and produce netcdf3-compatible files / !----------------------------------------------------------------------- &namtrd ! diagnostics on dynamics and/or tracer trends ("key_trddyn" and/or "key_trdtra") ! ! or mixed-layer trends or barotropic vorticity ("key_trdmld" or "key_trdvor") !----------------------------------------------------------------------- nn_trd = 365 ! time step frequency dynamics and tracers trends nn_ctls = 0 ! control surface type in mixed-layer trends (0,1 or n /seconds ; =86400. -> /day) cn_trdrst_in = "restart_mld" ! suffix of ocean restart name (input) cn_trdrst_out = "restart_mld" ! suffix of ocean restart name (output) ln_trdmld_restart = .false. ! restart for ML diagnostics ln_trdmld_instant = .false. ! flag to diagnose trends of instantantaneous or mean ML T/S / !----------------------------------------------------------------------- &namflo ! float parameters ("key_float") !----------------------------------------------------------------------- jpnfl = 1 ! total number of floats during the run jpnnewflo = 0 ! number of floats for the restart ln_rstflo = .false. ! float restart (T) or not (F) nn_writefl = 75 ! frequency of writing in float output file nn_stockfl = 5475 ! frequency of creation of the float restart file ln_argo = .false. ! Argo type floats (stay at the surface each 10 days) ln_flork4 = .false. ! trajectories computed with a 4th order Runge-Kutta (T) ! or computed with Blanke' scheme (F) ln_ariane = .true. ! Input with Ariane tool convention(T) ln_flo_ascii = .true. ! Output with Ariane tool netcdf convention(F) or ascii file (T) / !----------------------------------------------------------------------- &namptr ! Poleward Transport Diagnostic !----------------------------------------------------------------------- ln_diaptr = .false. ! Poleward heat and salt transport (T) or not (F) ln_diaznl = .true. ! Add zonal means and meridional stream functions ln_subbas = .true. ! Atlantic/Pacific/Indian basins computation (T) or not ! (orca configuration only, need input basins mask file named "subbasins.nc" ln_ptrcomp = .true. ! Add decomposition : overturning nn_fptr = 1 ! Frequency of ptr computation [time step] nn_fwri = 15 ! Frequency of ptr outputs [time step] / !----------------------------------------------------------------------- &namhsb ! Heat and salt budgets !----------------------------------------------------------------------- ln_diahsb = .false. ! check the heat and salt budgets (T) or not (F) / !----------------------------------------------------------------------- &nam_diaharm ! Harmonic analysis of tidal constituents ('key_diaharm') !----------------------------------------------------------------------- nit000_han = 1 ! First time step used for harmonic analysis nitend_han = 75 ! Last time step used for harmonic analysis nstep_han = 15 ! Time step frequency for harmonic analysis nb_ana = 2 ! Number of harmonics to analyse tname(1) = 'M2' ! Name of tidal constituents tname(2) = 'K1' / !----------------------------------------------------------------------- &namdct ! transports through sections !----------------------------------------------------------------------- nn_dct = 15 ! time step frequency for transports computing nn_dctwri = 15 ! time step frequency for transports writing nn_secdebug = 112 ! 0 : no section to debug ! -1 : debug all section ! 0 < n : debug section number n / !!====================================================================== !! *** Observation & Assimilation namelists *** !!====================================================================== !! namobs observation and model comparison ('key_diaobs') !! nam_asminc assimilation increments ('key_asminc') !!====================================================================== ! !----------------------------------------------------------------------- &namobs ! observation usage switch ('key_diaobs') !----------------------------------------------------------------------- cn_oceobs_out_path="${CN_OCEOBS_OUT_PATH:-./}" ln_t3d = $LPRO ! Logical switch for T profile observations ln_s3d = $LPRO ! Logical switch for S profile observations ln_ena = .false. ! Logical switch for ENACT insitu data set ! ! ln_cor Logical switch for Coriolis insitu data set ln_profb = $LPRO ! Logical switch for feedback insitu data set ln_sla = $LSLA ! Logical switch for SLA observations ln_sladt = .false. ! Logical switch for AVISO SLA data ln_slafb = $LSLA ! Logical switch for feedback SLA data ! ln_ssh Logical switch for SSH observations ln_sst = $LSST ! Logical switch for SST observations ln_sstbias = .false. ln_grdsst = ${NAM_LN_GRDSST:-.true.} ! ln_grdsst Logical switch for gridded observations ! ln_ghrsst Logical switch for GHRSST observations ln_sstfb = ${NAM_LN_SSTFB:-.false.} ! Logical switch for feedback SST data sstfbfiles = ${NAM_SSTFBFILES:-''} ! ln_sss Logical switch for SSS observations ! ln_seaice Logical switch for Sea Ice observations ! ln_vel3d Logical switch for velocity observations ! ln_velavcur Logical switch for velocity daily av. cur. ! ln_velhrcur Logical switch for velocity high freq. cur. ! ln_velavadcp Logical switch for velocity daily av. ADCP ! ln_velhradcp Logical switch for velocity high freq. ADCP ! ln_velfb Logical switch for feedback velocity data ! ln_grid_global Global distribtion of observations ! ln_grid_search_lookup Logical switch for obs grid search w/lookup table ! grid_search_file Grid search lookup file header ! enactfiles ENACT input observation file names ! coriofiles Coriolis input observation file name ! ! profbfiles: Profile feedback input observation file name profbfiles = $NPROFFILES ln_profb_enatim = .true. ! ln_profb_enatim Enact feedback input time setting switch ! slafilesact Active SLA input observation file name ! slafilespas Passive SLA input observation file name ! ! slafbfiles: Feedback SLA input observation file nam slafbfiles = $NSLAFILES ! sstfiles GHRSST input observation file name ! ! sstfbfiles: Feedback SST input observation file name ! seaicefiles Sea Ice input observation file name ! velavcurfiles Vel. cur. daily av. input file name ! velhvcurfiles Vel. cur. high freq. input file name ! velavadcpfiles Vel. ADCP daily av. input file name ! velhvadcpfiles Vel. ADCP high freq. input file name ! velfbfiles Vel. feedback input observation file name ! dobsini Initial date in window YYYYMMDD.HHMMSS ! dobsend Final date in window YYYYMMDD.HHMMSS ! n1dint Type of vertical interpolation method ! n2dint Type of horizontal interpolation method ! ln_nea Rejection of observations near land switch nmsshc = 1 ! MSSH correction scheme ! mdtcorr MDT correction ! mdtcutoff MDT cutoff for computed correction ln_altbias = .false. ! Logical switch for alt bias ln_ignmis = .true. ! Logical switch for ignoring missing files ! endailyavtypes ENACT daily average types ln_grid_global = .true. ln_grid_search_lookup = $GRIDLOOKUP ln_velfb = $LCUR ln_vel3d = $LCUR ln_vel3dw = ${LCURW:-false} velfbfiles = $CURFBDATA ln_velfb_av = $CURFBAVG ln_vel2d = ${LCURSURF:-.false.} velfb2dfiles = ${CURSURFFBDATA:-\"\"} n1dint = 1 n2dint = 3 ln_nea = .true. mdtcutoff = 65.0 mdtcorr = 1.61 dobsini = $NDATE0 dobsend = ${OBSWINEND:-$NDATEND} ln_profb_ena = $LNPROFBENA ln_profb_enatim = $LNPROFBENATIM ln_seaice = $LNSEAICE ln_grdseaice = $LNGRDSEAICE ln_seaicefb = $LNSEAICEFB grdseaicename = 'ice_cover_yYYYYmMM.nc' seaicefbfiles = ${NAM_SEAICEFILES:-''} nicethin = ${NAM_NICETHIN:-1} ! Thinning factor for reading gridded seaice obs ln_seaicepos = ${LN_SEAICEPOS:=.FALSE.} ! Logical switch for seaice gridded obs perturbation iceprobseed = ${ICEPROBSEED:-0} ! Seed for seaice obs perturbation ln_obsmpppack = ${LN_OBSMPPPACK:=.TRUE.} / !----------------------------------------------------------------------- &nam_asminc ! assimilation increments ('key_asminc') !----------------------------------------------------------------------- ln_bkgwri = $LBKGWRI ! Logical switch for writing out background state ln_trainc = $LTRAINC ! Logical switch for applying tracer increments ln_dyninc = $LDYNINC ! Logical switch for applying velocity increments ln_sshinc = $LSSHINC ! Logical switch for applying SSH increments ln_seaiceinc = $LSEAICEINC ! Logical switch for applying seaice increments ln_asmdin = $LASMDIN ! Logical switch for Direct Initialization (DI) ln_asmiau = $LASMIAU ! Logical switch for Incremental Analysis Updating (IAU) nitbkg = 0 ! Timestep of background in [0,nitend-nit000-1] nitdin = 0 ! Timestep of background for DI in [0,nitend-nit000-1] nitiaustr = 1 ! Timestep of start of IAU interval in [0,nitend-nit000-1] nitiaufin = $NITIAUFIN ! Timestep of end of IAU interval in [0,nitend-nit000-1] niaufn = 0 ! Type of IAU weighting function ln_salfix = .false. ! Logical switch for ensuring that the sa > salfixmin salfixmin = -9999 ! Minimum salinity after applying the increments nn_divdmp = ${NN_DIVDMP:=0} ! Number of iterations of divergence damping operator / &namtrj cn_dirtrj = 'tam_trajectory' ln_trjhand = ${NAM_LN_TRAJ:=.FALSE.} nn_ittrjfrq = ${TRJFRQ:=0} ln_trj_spl = .TRUE. / !----------------------------------------------------------------------- &nambias ! Parameters for bias corrections #ifdef key_bias) !----------------------------------------------------------------------- ln_bias = $LN_BIAS ! activate bias correction ln_bias_asm = $BIAS_ASM ! use assim bias ln_bias_rlx = .FALSE. ! use clim-relax bias ln_bias_ofl = $LN_BIAS_OFL ! use off-line bias ln_bias_ts_app=${LN_BIAS_TS_APP:=.TRUE.} ! apply bias to Temp/Sal directly ln_bias_pc_app=${LN_BIAS_PC_APP:=.TRUE.} ! apply bias to pressure gradient cn_bias_tot = 'bias_tot.nc' !file name with bias file (restart) cn_bias_asm = 'bias_asm.nc' !file name " " from assim ! dir and structures for offline bias (using fldread conventions) cn_dir = './' sn_tbias_ofl= 'tbias_ofl', -1,'tbias', .true., .true., 'yearly' sn_sbias_ofl= 'sbias_ofl', -1,'sbias', .true., .true., 'yearly' bias_time_unit_asm = $BIASTIMEUNITASM ! time unit of asm bias fb_t_asm = ${RN_FB_T_ASM:=0.02} ! partition of total bias for T/S fb_t_rlx = 1. ! " " " " in T/S fb_t_ofl = ${RN_FB_T_OFL:=.1} fb_p_rlx = 1. fb_p_asm = ${RN_FB_P_ASM:=0.3} fb_p_ofl = ${RN_FB_P_OFL:=1.} nn_inertial = $NN_INERTIAL !0/1/2 0/sin(lat)**2/gausian gphit0 = ${RN_GPHIT0:=10.} !length for guassian tappering fctamp = ${RN_FCTAMP:=10.} eft_rlx = 1800. ! efolding time for rlx bias estimation eft_asm = ${RN_EFT_ASM:=1800.} ! efolding time for asm bias estimation 5y t_rlx_upd = 0.05 ! update fct rlx bias " (0. -> 1.) t_asm_upd = ${RN_T_ASM_UPD:=0.05} ! update fct assim bias " (0. -> 1.) lrst_biasr =$LRST_BIASR !force to read bias file at first time step capN2val = ${CAPN2VAL:=-1} !if larger than 0, cap N2 min val (~1.e-6) / !----------------------------------------------------------------------- &namsbc_wave ! External fields from wave model !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_cdg = 'cdww' , ${FREQWAM:-6} , 'cdww' , ${NAMCDWWINT:-.false.} , .false., 'monthly' , '' , '' ! cn_dir_cdg = './' ! root directory for the location of drag coefficient files / !----------------------------------------------------------------------- &namsbc_waveparlim !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_strn = 'istr' , 6 , 'icestrain' , .true. , .false. , 'monthly' , '' , '' cn_dir_waveparlim = './' ! root directory for the location of the ECWAM files / !----------------------------------------------------------------------- &namdyn_nept ! Neptune effect (simplified: lateral and vertical diffusions removed) !----------------------------------------------------------------------- ! Suggested lengthscale values are those of Eby & Holloway (1994) for a coarse model ln_neptsimp = .false. ! yes/no use simplified neptune ln_smooth_neptvel = .false. ! yes/no smooth zunep, zvnep rn_tslse = 1.2e4 ! value of lengthscale L at the equator rn_tslsp = 3.0e3 ! value of lengthscale L at the pole ! Specify whether to ramp down the Neptune velocity in shallow ! water, and if so the depth range controlling such ramping down ln_neptramp = .true. ! ramp down Neptune velocity in shallow water rn_htrmin = 100.0 ! min. depth of transition range rn_htrmax = 200.0 ! max. depth of transition range / !----------------------------------------------------------------------- &namtam ! TAM trajactory !----------------------------------------------------------------------- cn_dirtrj = 'tam_trajectory' ln_trjwri = .FALSE. nn_ittrjfrq = 1 ln_trj_spl = .TRUE. / !----------------------------------------------------------------------- &namsbc_wavepar ! namsbc_wavepar parameters from wave model (CCC not identical to namsbc_wave) !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_ust = 'ust' , ${FREQWAM:-6} , 'ust' , .false. , .false. , 'monthly' , '' , '' sn_vst = 'vst' , ${FREQWAM:-6} , 'vst' , .false. , .false. , 'monthly' , '' , '' sn_swh = 'swh' , ${FREQWAM:-6} , 'swh' , .false. , .false. , 'monthly' , '' , '' sn_mwp = 'mwp' , ${FREQWAM:-6} , 'mwp' , .false. , .false. , 'monthly' , '' , '' sn_wspd = 'wspd' , ${FREQWAM:-6} , 'wspd' , .false. , .false. , 'monthly' , '' , '' sn_phioc = 'phioc' , ${FREQWAM:-6} , 'phioc' , .false. , .false. , 'monthly' , '' , '' sn_tauoc = 'tauoc' , ${FREQWAM:-6} , 'tauoc' , .false. , .false. , 'monthly' , '' , '' cn_dir_wavepar = './' ! root directory for the location of the ECWAM files / !----------------------------------------------------------------------- &namdebug jpig1=139 jpig2=142 jpjg1=74 jpjg2=77 jpkg1=1 jpkg2=10 kt1=10 kt2=20 / !----------------------------------------------------------------------- eof_namelist elif [[ ${OUT_GRID}_Z${OUT_LEVELS} = "ORCA025_Z75" ]]; then NAM_LN_SMSLABEL=${NAM_LN_SMSLABEL:=.false.} NAM_NN_SMSFREQ=${NAM_NN_SMSFRQ:=72} cat >namelist<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !! NEMO/OPA : 1 - run manager (namrun) !! namelists 2 - Domain (namzgr, namzgr_sco, namdom, namtsd) !! 3 - Surface boundary (namsbc, namsbc_ana, namsbc_flx, namsbc_clio, namsbc_core !! namsbc_cpl, namtra_qsr, namsbc_rnf, !! namsbc_apr, namsbc_ssr, namsbc_alb, !! namsbc_prt) !! 4 - lateral boundary (namlbc, namcla, namobc, namagrif, nambdy, nambdy_tide) !! 5 - bottom boundary (nambfr, nambbc, nambbl) !! 6 - Tracer (nameos, namtra_adv, namtra_ldf, namtra_dmp) !! 7 - dynamics (namdyn_adv, namdyn_vor, namdyn_hpg, namdyn_spg, namdyn_ldf) !! 8 - Verical physics (namzdf, namzdf_ric, namzdf_tke, namzdf_kpp, namzdf_ddm, namzdf_tmx) !! 9 - diagnostics (namnc4, namtrd, namspr, namflo, namptr, namhsb) !! 10 - miscellaneous (namsol, nammpp, nammpp_dyndist, namctl) !! 11 - Obs & Assim (namobs, nam_asminc) !!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !!====================================================================== !! *** Run management namelists *** !!====================================================================== !! namrun parameters of the run !!====================================================================== ! !----------------------------------------------------------------------- &namrun ! parameters of the run !----------------------------------------------------------------------- nn_no = $NCYC ! job number cn_exp = "$EXPVER" ! experience name nn_it000 = $NIT000 ! first time step nn_itend = $NITEND ! last time step (std 5475) nn_date0 = $NDATE0 ! initial calendar date yymmdd (used if nn_rstctl=1) nn_time0 = $NTIME0 ! initial calendar time in hours nn_itfile = ${NAM_NN_ITFILE:=-1} nn_leapy = 1 ! Leap year calendar (1) or not (0) ln_rstart = $LN_RESTART ! start from rest (F) or from a restart file (T) nn_rstctl = 0 ! restart control = 0 nn_it000 is not compared to the restart file value ! = 1 use nn_date0 in namelist (not the value in the restart file) ! = 2 calendar parameters read in the restart file cn_ocerst_in = "restart" ! suffix of ocean restart name (input) cn_ocerst_out = "restart" ! suffix of ocean restart name (output) nn_istate = 0 ! output the initial state (1) or not (0) nn_stock = $NSTOCK ! frequency of creation of a restart file (modulo referenced to 1) nn_write = $OUTFREQ ! frequency of write in the output file (modulo referenced to nn_it000) ln_dimgnnn = .false. ! DIMG file format: 1 file for all processors (F) or by processor (T) ln_mskland = .false. ! mask land points in NetCDF outputs (costly: + ~15%) ln_clobber = .true. ! clobber (overwrite) an existing file nn_chunksz = ${NCCHUNKSIZE:-0} ! chunksize (bytes) for NetCDF file nn_slimrst = $NSLIMRST ! option of slim restart output (0:full; 1:nowfields+tke+sbc; 2:nowfields+sbc+en; 3:nowfields only) nn_slimrstin = ${NSLIMRSTIN:-0} ! Force slim restart on input ln_rsttime = ${LN_RSTTIME:-.true.} ! Use time in restart output names rather than time steps ln_writerst = ${LNWRITERST:-.true.} ln_usetime = ${LNUSETIME:-.false.} cn_ocerst_out_path="${CN_OCERST_OUT_PATH:-./}" nn_itout = ${NITOUT:-$NIT000} ln_rcf_read = ${NEMO_LN_RCF_READ:-.false.} ln_rcf_write = ${NEMO_LN_RCF_WRITE:-.false.} / !!====================================================================== !! *** Domain namelists *** !!====================================================================== !! namzgr vertical coordinate !! namzgr_sco s-coordinate or hybrid z-s-coordinate !! namdom space and time domain (bathymetry, mesh, timestep) !! namtsd data: temperature & salinity !!====================================================================== ! !----------------------------------------------------------------------- &namzgr ! vertical coordinate !----------------------------------------------------------------------- ln_zco = .false. ! z-coordinate - full steps (T/F) ("key_zco" may also be defined) ln_zps = .true. ! z-coordinate - partial steps (T/F) ln_sco = .false. ! s- or hybrid z-s-coordinate (T/F) / !----------------------------------------------------------------------- &namzgr_sco ! s-coordinate or hybrid z-s-coordinate !----------------------------------------------------------------------- rn_sbot_min = 300. ! minimum depth of s-bottom surface (>0) (m) rn_sbot_max = 5250. ! maximum depth of s-bottom surface (= ocean depth) (>0) (m) rn_theta = 6.0 ! surface control parameter (0<=rn_theta<=20) rn_thetb = 0.75 ! bottom control parameter (0<=rn_thetb<= 1) rn_rmax = 0.15 ! maximum cut-off r-value allowed (00) or min number of ocean level (<0) rn_e3zps_min= 25. ! partial step thickness is set larger than the minimum of rn_e3zps_rat= 0.2 ! rn_e3zps_min and rn_e3zps_rat*e3t, with 0 fill namsbc_ana ) ln_flx = $NAM_LN_FLX ! flux formulation (T => fill namsbc_flx ) ln_blk_clio = .false. ! CLIO bulk formulation (T => fill namsbc_clio) ln_blk_core = $NAM_LN_BLK ! CORE bulk formulation (T => fill namsbc_core) ln_cpl = .false. ! Coupled formulation (T => fill namsbc_cpl ) ln_apr_dyn = .false. ! Patm gradient added in ocean & ice Eqs. (T => fill namsbc_apr ) nn_ice = $NAM_NN_ICE ! =0 no ice boundary condition , ! =1 use observed ice-cover , ! =2 ice-model used ("key_lim3" or "key_lim2") ln_dm2dc = .false. ! daily mean to diurnal cycle on short wave ln_rnf = .true. ! runoffs (T => fill namsbc_rnf) ln_ssr = .true. ! Sea Surface Restoring on T and/or S (T => fill namsbc_ssr) nn_fwb = $NN_FWB ! FreshWater Budget: =0 unchecked ! =1 global mean of e-p-r set to zero at each time step ! =2 annual global mean of e-p-r set to zero ! =3 global emp set to zero and spread out over erp area ! =4 variable time global mean of e-p-r set to zero (fill namsbc_fwb) nn_hbp = 1 ln_cdgw = ${NAM_LN_CDWW:-false} ! Neutral drag coefficient read from wave model ln_stcor = ${NAM_LN_STCOR:-false} ! Stokes drift read from wave model ln_wavetke = ${NAM_LN_WAVETKE:-false} ! TKE wave parameters read from wave model ln_tauoc = ${NAM_LN_TAUOC:-false} ! Wave-modified stress from wave model ln_wbrsource = ${NAM_LN_WBRSOURCE:-false} ! TKE from wave breaking as source function ln_pert = ${NAM_LNREAD_PERT:-false} ! Option to read surf pert ln_wicestrn = ${NAM_LN_WICESTRN:-false} / !----------------------------------------------------------------------- &namsbc_ana ! analytical surface boundary condition !----------------------------------------------------------------------- nn_tau000 = 0 ! gently increase the stress over the first ntau_rst time-steps rn_utau0 = 0.5 ! uniform value for the i-stress rn_vtau0 = 0.e0 ! uniform value for the j-stress rn_qns0 = 0.e0 ! uniform value for the total heat flux rn_qsr0 = 0.e0 ! uniform value for the solar radiation rn_emp0 = 0.e0 ! uniform value for the freswater budget (E-P) / !----------------------------------------------------------------------- &namsbc_flx ! surface boundary condition : flux formulation !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_utau = 'utau' , 24 , 'utau' , .false. , .false., 'monthly' , '' , '' sn_vtau = 'vtau' , 24 , 'vtau' , .false. , .false., 'monthly' , '' , '' sn_qtot = 'flx' , 24 , 'qtot' , .false. , .false., 'monthly' , '' , '' sn_qsr = 'flx' , 24 , 'qsr' , .false. , .false., 'monthly' , '' , '' sn_emp = 'flx' , 24 , 'emp' , .false. , .false., 'monthly' , '' , '' cn_dir = './' ! root directory for the location of the flux files / !----------------------------------------------------------------------- &namsbc_iif ! surface boundary condition for prescribed ice !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interpol. ! clim ! 'yearly' or ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! sn_ice = 'ice_cover' , 24 , 'ice_cov' , .false. , .false. , 'monthly', '', '' cn_dir = './' ! root for location of ice files dtice = 1. ! time scale for relaxation to sea-ice nn_ice_rel = $NAM_NN_ICE_REL ! Use pseudo-ice treatment / !----------------------------------------------------------------------- &namsbc_clio ! namsbc_clio CLIO bulk formulea !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_utau = 'taux_1m' , -1 , 'sozotaux', .true. , .true. , 'yearly' , '' , '' sn_vtau = 'tauy_1m' , -1 , 'sometauy', .true. , .true. , 'yearly' , '' , '' sn_wndm = 'flx' , -1 , 'socliowi', .true. , .true. , 'yearly' , '' , '' sn_tair = 'flx' , -1 , 'socliot2', .true. , .true. , 'yearly' , '' , '' sn_humi = 'flx' , -1 , 'socliohu', .true. , .true. , 'yearly' , '' , '' sn_ccov = 'flx' , -1 , 'socliocl', .false. , .true. , 'yearly' , '' , '' sn_prec = 'flx' , -1 , 'socliopl', .false. , .true. , 'yearly' , '' , '' cn_dir = './' ! root directory for the location of the bulk files are / !----------------------------------------------------------------------- &namsbc_core ! namsbc_core CORE bulk formulea !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_wndi = 'u10' , ${FREQAN:-6} , 'u10' , .false. , .false. , 'monthly' , '' , '' sn_wndj = 'v10' , ${FREQAN:-6} , 'v10' , .false. , .false. , 'monthly' , '' , '' sn_qsr = 'accum' , ${FREQFC:-24} , 'swdn' , .false. , .false. , 'monthly' , '' , '' sn_qlw = 'accum' , ${FREQFC:-24} , 'lwdn' , .false. , .false. , 'monthly' , '' , '' sn_tair = 'qtml' , ${FREQAN:-6} , 't10' , .false. , .false. , 'monthly' , '' , '' sn_humi = 'qtml' , ${FREQAN:-6} , 'q10' , .false. , .false. , 'monthly' , '' , '' sn_prec = 'accum' , ${FREQFC:-24} , 'precip' , .false. , .false. , 'monthly' , '' , '' sn_snow = 'accum' , ${FREQFC:-24} , 'snow' , .false. , .false. , 'monthly' , '' , '' sn_tdif = 'taudif_core' , 24 , 'taudif' , .false. , .true. , 'yearly' , '' , '' sn_ccov = '${CLDCOVTYP:-tcc}', ${FREQAN:-6} , '${CLDCOVTYP:-tcc}', .false. , .false. , 'monthly' , '' , '' cn_dir = './' ! root directory for the location of the bulk files ln_2m = .false. ! air temperature and humidity referenced at 2m (T) instead 10m (F) ln_taudif = .false. ! HF tau contribution: use "mean of stress module - module of the mean stress" data ln_cdec = $NAM_LN_CDEC ! Switch to ECMWF drag rn_pfac = 1. ! multiplicative factor for precipitation (total & snow) ln_cldcov = ${LNBULKCLD:-.false.} rn_rrelwind = ${NAM_RN_RRELWIND:-1.0} / !----------------------------------------------------------------------- &namsbc_cpl ! coupled ocean/atmosphere model ("key_coupled") !----------------------------------------------------------------------- ! ! description ! multiple ! vector ! vector ! vector ! ! ! ! categories ! reference ! orientation ! grids ! ! send sn_snd_temp = 'weighted oce and ice' , 'no' , '' , '' , '' sn_snd_alb = 'weighted ice' , 'no' , '' , '' , '' sn_snd_thick = 'none' , 'no' , '' , '' , '' sn_snd_crt = 'none' , 'no' , 'spherical' , 'eastward-northward' , 'T' sn_snd_co2 = 'coupled' , 'no' , '' , '' , '' ! receive sn_rcv_w10m = 'none' , 'no' , '' , '' , '' sn_rcv_taumod = 'coupled' , 'no' , '' , '' , '' sn_rcv_tau = 'oce only' , 'no' , 'cartesian' , 'eastward-northward', 'U,V' sn_rcv_dqnsdt = 'coupled' , 'no' , '' , '' , '' sn_rcv_qsr = 'oce and ice' , 'no' , '' , '' , '' sn_rcv_qns = 'oce and ice' , 'no' , '' , '' , '' sn_rcv_emp = 'conservative' , 'no' , '' , '' , '' sn_rcv_rnf = 'coupled' , 'no' , '' , '' , '' sn_rcv_cal = 'coupled' , 'no' , '' , '' , '' sn_rcv_co2 = 'coupled' , 'no' , '' , '' , '' / !----------------------------------------------------------------------- &namtra_qsr ! penetrative solar radiation !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_chl ='chlorophyll', -1 , 'ch' , .true. , .true. , 'yearly' , '' , '' cn_dir = './' ! root directory for the location of the runoff files ln_traqsr = .true. ! Light penetration (T) or not (F) ln_qsr_rgb = $QSRRGB ! RGB (Red-Green-Blue) light penetration ln_qsr_2bd = $QSR2BD ! 2 bands light penetration ln_qsr_bio = .false. ! bio-model light penetration nn_chldta = $CHLTYPE ! RGB : Chl data (=1) or cst value (=0) rn_abs = 0.58 ! RGB & 2 bands: fraction of light (rn_si1) rn_si0 = 0.35 ! RGB & 2 bands: shortess depth of extinction rn_si1 = 23.0 ! 2 bands: longest depth of extinction / !----------------------------------------------------------------------- &namsbc_fwb ! namsbc_fwb Fresh water budget !----------------------------------------------------------------------- rd_fwb = 1. ! time scale to apply fwb correction (days) ikt_fwb = 1 ! freq (time steps) to estimate fwb nr_ssh = $NR_SSH ! 0 for global sl=0. 1/2 for external SL/MASS file cn_dir ='./' ! root directory for location of ssh file sn_ssh = $SSHFILE rcap = 1. ! mm/day cap for FWB adjusment lfwbr = $LFWBR / !----------------------------------------------------------------------- &namsbc_rnf ! runoffs namelist surface boundary condition !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_rnf = 'runoff_1m_nomask', -1 , 'sorunoff', .true. , .true. , 'yearly' , '' , '' sn_cnf = 'runoff_1m_nomask', 0 , 'socoefr', .false. , .true. , 'yearly' , '' , '' sn_s_rnf = 'runoffs' , 24 , 'rosaline', .true. , .true. , 'yearly' , '' , '' sn_t_rnf = 'runoffs' , 24 , 'rotemper', .true. , .true. , 'yearly' , '' , '' sn_dep_rnf = 'runoffs' , 0 , 'rodepth' , .false. , .true. , 'yearly' , '' , '' cn_dir = './' ! root directory for the location of the runoff files ln_rnf_emp = .false. ! runoffs included into precipitation field (T) or into a file (F) ln_rnf_mouth = .true. ! specific treatment at rivers mouths rn_hrnf = 10.e0 ! depth over which enhanced vertical mixing is used rn_avt_rnf = 2.e-3 ! value of the additional vertical mixing coef. [m2/s] rn_rfact = 1.e0 ! multiplicative factor for runoff ln_rnf_depth = .false. ! read in depth information for runoff ln_rnf_tem = .false. ! read in temperature information for runoff ln_rnf_sal = .false. ! read in salinity information for runoff / !----------------------------------------------------------------------- &namsbc_apr ! Atmospheric pressure used as ocean forcing or in bulk !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interpol. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_apr = 'patm' , -1 ,'somslpre', .true. , .true. , 'yearly' , '' , '' cn_dir = './' ! root directory for the location of the bulk files ln_ref_apr = .false. ! ref. pressure: global mean Patm (T) or a constant (F) / !----------------------------------------------------------------------- &namsbc_ssr ! surface boundary condition : sea surface restoring !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_sst = $SSTDMPFILE sn_sss = 'sss' , -1 , 'sss' , .true. , .true. , 'yearly' , '' , '' cn_dir = './' ! root directory for the location of the runoff files nn_sstr = $NAM_NN_SSTR ! add a retroaction term in the surface heat ! flux (=1 1TS; =2 2TS; =3 3TS ) or not (=0) nn_sssr = 2 ! add a damping term in the surface freshwater flux (=2) ! or to SSS only (=1) or no damping term (=0) rn_dqdt = $DQDT0 ! magnitude of the retroaction on temperature [W/m2/K] rn_dqdt1 = $DQDT1 ! magnitude of the retroaction on temperature [W/m2/K] 1st TS rn_dqdt2 = $DQDT2 ! magnitude of the retroaction on temperature [W/m2/K] 2nd TS rn_dqdt3 = $DQDT3 ! magnitude of the retroaction on temperature [W/m2/K] 3rd TS rn_deds = $DEDS0 ! magnitude of the damping on salinity [mm/day] lgth_2ts = $RML ! window for 2ts rlx running mean lgth_3ts = $RML1 ! window for 3rd ts rlx ln_sssr_bnd = .true. ! flag to bound erp term (associated with nn_sssr=2) rn_sssr_bnd = 4.e0 ! ABS(Max/Min) value of the damping erp term [mm/day] dqdt_limice = 0.1 ! restoring factors under ice [ratio of dqdt] / !----------------------------------------------------------------------- &namsbc_alb ! albedo parameters !----------------------------------------------------------------------- rn_cloud = 0.06 ! cloud correction to snow and ice albedo rn_albice = 0.53 ! albedo of melting ice in the arctic and antarctic rn_alphd = 0.80 ! coefficients for linear interpolation used to rn_alphc = 0.65 ! compute albedo between two extremes values rn_alphdi = 0.72 ! (Pyane, 1972) / !----------------------------------------------------------------------- &namsbc_prt ! perturbations to forcing (MAB 2014) !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_putau = 'putau' , 24 , 'utau' , .false. , .false., 'monthly' , '' , '' sn_pvtau = 'pvtau' , 24 , 'vtau' , .false. , .false., 'monthly' , '' , '' sn_pqns = 'pqns' , 24 , 'qns' , .false. , .false., 'monthly' , '' , '' sn_pqsr = 'pqsr' , 24 , 'qsr' , .false. , .false., 'monthly' , '' , '' sn_pemp = 'pemp' , 24 , 'emp' , .false. , .false., 'monthly' , '' , '' nn_putau = ${NAM_NN_PUTAU:=0} !0/1/2 for nothing/addpert/replace nn_pvtau = ${NAM_NN_PVTAU:=0} nn_pqns = ${NAM_NN_PQNS:=0} nn_pqsr = ${NAM_NN_PQSR:=0} nn_pemp = ${NAM_NN_PEMP:=0} cn_dir = './' ! root directory for the location of the pert files / !!====================================================================== !! *** Lateral boundary condition *** !!====================================================================== !! namlbc lateral momentum boundary condition !! namcla cross land advection !! namobc open boundaries parameters ("key_obc") !! namagrif agrif nested grid ( read by child model only ) ("key_agrif") !! nambdy Unstructured open boundaries ("key_bdy") !! namtide Tidal forcing at open boundaries ("key_bdy_tides") !!====================================================================== ! !----------------------------------------------------------------------- &namlbc ! lateral momentum boundary condition !----------------------------------------------------------------------- rn_shlat = 0. ! shlat = 0 ! 0 < shlat < 2 ! shlat = 2 ! 2 < shlat ! free slip ! partial slip ! no slip ! strong slip ln_vorlat = .false. ! consistency of vorticity boundary condition with analytical eqs. ln_antinc = ${NAM_LN_ANTINC:-true} / !----------------------------------------------------------------------- &namcla ! cross land advection !----------------------------------------------------------------------- nn_cla = 0 ! advection between 2 ocean pts separates by land / !----------------------------------------------------------------------- &namobc ! open boundaries parameters ("key_obc") !----------------------------------------------------------------------- ln_obc_clim = .false. ! climatological obc data files (T) or not (F) ln_vol_cst = .true. ! impose the total volume conservation (T) or not (F) ln_obc_fla = .false. ! Flather open boundary condition nn_obcdta = 1 ! = 0 the obc data are equal to the initial state ! = 1 the obc data are read in 'obc.dta' files cn_obcdta = 'annual' ! set to annual if obc datafile hold 1 year of data ! set to monthly if obc datafile hold 1 month of data rn_dpein = 1. ! damping time scale for inflow at east open boundary rn_dpwin = 1. ! - - - west - - rn_dpnin = 1. ! - - - north - - rn_dpsin = 1. ! - - - south - - rn_dpeob = 3000. ! time relaxation (days) for the east open boundary rn_dpwob = 15. ! - - - west - - rn_dpnob = 3000. ! - - - north - - rn_dpsob = 15. ! - - - south - - rn_volemp = 1. ! = 0 the total volume change with the surface flux (E-P-R) ! = 1 the total volume remains constant / !----------------------------------------------------------------------- &namagrif ! AGRIF zoom ("key_agrif") !----------------------------------------------------------------------- nn_cln_update = 3 ! baroclinic update frequency ln_spc_dyn = .true. ! use 0 as special value for dynamics rn_sponge_tra = 2880. ! coefficient for tracer sponge layer [m2/s] rn_sponge_dyn = 2880. ! coefficient for dynamics sponge layer [m2/s] / !----------------------------------------------------------------------- ! nam_tide tide parameters (#ifdef key_tide) !----------------------------------------------------------------------- ! ln_tide_obcramp= linearly apply tidal forcing on open boundaries (sea rdtideramp) ! ln_tide_pot = use tidal potential forcing ! ln_read_tide_elev = read tidal elevations (tide_elev.nc) as obc data ! ln_read_tide_trans = read tidal barotropic velocities (tide_ubar.nc/tide_vbar.nc) as obc data ! ln_compute_tide_trans = compute barotropic velocities from linear equations and elevation as obc data ! ln_read_pot_charge = read charge potential ! rdtideramp = Ramp length in days if ln_tide_obcramp=.true. ! nb_harmo = number of constituents used ! name(1) = 'M2', 'K1', etc name of constituent &nam_tide ln_tide_obcramp = .false. ln_tide_pot = .false. ln_read_tide_elev = .false. ln_read_tide_trans = .false. ln_compute_tide_trans = .false. ln_read_pot_charge = .false. rdtideramp = 2. nb_harmo = 1 clname(1) = 'M2' ! nb_harmo = 11 ! clname(1) = 'M2' ! clname(2) = 'S2' ! clname(3) = 'N2' ! clname(4) = 'K1' ! clname(5) = 'O1' ! clname(6) = 'Q1' ! clname(7) = 'M4' ! clname(8) = 'K2' ! clname(9) = 'P1' ! clname(10) = 'Mf' ! clname(11) = 'Mm' / !----------------------------------------------------------------------- &nambdy ! unstructured open boundaries ("key_bdy") !----------------------------------------------------------------------- nb_bdy = 1 ! number of open boundary sets ln_coords_file = .true. ! =T : read bdy coordinates from file cn_coords_file = 'coordinates.bdy.nc' ! bdy coordinates files ln_mask_file = .false. ! =T : read mask from file cn_mask_file = '' ! name of mask file (if ln_mask_file=.TRUE.) nn_dyn2d = 2 ! boundary conditions for barotropic fields nn_dyn2d_dta = 3 ! = 0, bdy data are equal to the initial state ! = 1, bdy data are read in 'bdydata .nc' files ! = 2, use tidal harmonic forcing data from files ! = 3, use external data AND tidal harmonic forcing nn_dyn3d = 0 ! boundary conditions for baroclinic velocities nn_dyn3d_dta = 0 ! = 0, bdy data are equal to the initial state ! = 1, bdy data are read in 'bdydata .nc' files nn_tra = 1 ! boundary conditions for T and S nn_tra_dta = 1 ! = 0, bdy data are equal to the initial state ! = 1, bdy data are read in 'bdydata .nc' files nn_rimwidth = 10 ! width of the relaxation zone ln_vol = .false. ! total volume correction (see nn_volctl parameter) nn_volctl = 1 ! = 0, the total water flux across open boundaries is zero / !----------------------------------------------------------------------- &nambdy_dta ! open boundaries - external data ("key_bdy") !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interpol. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! bn_ssh = 'amm12_bdyT_u2d' , 24 , 'sossheig' , .true. , .false. , 'daily' , '' , '' bn_u2d = 'amm12_bdyU_u2d' , 24 , 'vobtcrtx' , .true. , .false. , 'daily' , '' , '' bn_v2d = 'amm12_bdyV_u2d' , 24 , 'vobtcrty' , .true. , .false. , 'daily' , '' , '' bn_u3d = 'amm12_bdyU_u3d' , 24 , 'vozocrtx' , .true. , .false. , 'daily' , '' , '' bn_v3d = 'amm12_bdyV_u3d' , 24 , 'vomecrty' , .true. , .false. , 'daily' , '' , '' bn_tem = 'amm12_bdyT_tra' , 24 , 'votemper' , .true. , .false. , 'daily' , '' , '' bn_sal = 'amm12_bdyT_tra' , 24 , 'vosaline' , .true. , .false. , 'daily' , '' , '' cn_dir = 'bdydta/' ln_full_vel = .false. / !----------------------------------------------------------------------- &nambdy_tide ! tidal forcing at open boundaries !----------------------------------------------------------------------- filtide = 'bdydta/amm12_bdytide_' ! file name root of tidal forcing files tide_cpt(1) ='Q1' ! names of tidal components used tide_cpt(2) ='O1' ! names of tidal components used tide_cpt(3) ='P1' ! names of tidal components used tide_cpt(4) ='S1' ! names of tidal components used tide_cpt(5) ='K1' ! names of tidal components used tide_cpt(6) ='2N2' ! names of tidal components used tide_cpt(7) ='MU2' ! names of tidal components used tide_cpt(8) ='N2' ! names of tidal components used tide_cpt(9) ='NU2' ! names of tidal components used tide_cpt(10) ='M2' ! names of tidal components used tide_cpt(11) ='L2' ! names of tidal components used tide_cpt(12) ='T2' ! names of tidal components used tide_cpt(13) ='S2' ! names of tidal components used tide_cpt(14) ='K2' ! names of tidal components used tide_cpt(15) ='M4' ! names of tidal components used tide_speed(1) = 13.398661 ! phase speeds of tidal components (deg/hour) tide_speed(2) = 13.943036 ! phase speeds of tidal components (deg/hour) tide_speed(3) = 14.958932 ! phase speeds of tidal components (deg/hour) tide_speed(4) = 15.000001 ! phase speeds of tidal components (deg/hour) tide_speed(5) = 15.041069 ! phase speeds of tidal components (deg/hour) tide_speed(6) = 27.895355 ! phase speeds of tidal components (deg/hour) tide_speed(7) = 27.968210 ! phase speeds of tidal components (deg/hour) tide_speed(8) = 28.439730 ! phase speeds of tidal components (deg/hour) tide_speed(9) = 28.512585 ! phase speeds of tidal components (deg/hour) tide_speed(10) = 28.984106 ! phase speeds of tidal components (deg/hour) tide_speed(11) = 29.528479 ! phase speeds of tidal components (deg/hour) tide_speed(12) = 29.958935 ! phase speeds of tidal components (deg/hour) tide_speed(13) = 30.000002 ! phase speeds of tidal components (deg/hour) tide_speed(14) = 30.082138 ! phase speeds of tidal components (deg/hour) tide_speed(15) = 57.968212 ! phase speeds of tidal components (deg/hour) ln_tide_date = .true. ! adjust tidal harmonics for start date of run / !!====================================================================== !! *** Bottom boundary condition *** !!====================================================================== !! nambfr bottom friction !! nambbc bottom temperature boundary condition !! nambbl bottom boundary layer scheme ("key_trabbl") !!====================================================================== ! !----------------------------------------------------------------------- &nambfr ! bottom friction !----------------------------------------------------------------------- nn_bfr = 2 ! type of bottom friction : = 0 : free slip, = 1 : linear friction ! = 2 : nonlinear friction rn_bfri1 = 4.e-4 ! bottom drag coefficient (linear case) rn_bfri2 = 1.e-3 ! bottom drag coefficient (non linear case) rn_bfeb2 = 2.5e-3 ! bottom turbulent kinetic energy background (m2/s2) ln_bfr2d = .true. ! horizontal variation of the bottom friction coef (read a 2D mask file ) rn_bfrien = 10. ! local multiplying factor of bfr (ln_bfr2d=T) ln_bfrimp = .false. ! implicit bottom friction (requires ln_zdfexp = .false. if true) / !----------------------------------------------------------------------- &nambbc ! bottom temperature boundary condition !----------------------------------------------------------------------- ln_trabbc = .false. ! Apply a geothermal heating at the ocean bottom nn_geoflx = 2 ! geothermal heat flux: = 0 no flux ! = 1 constant flux ! = 2 variable flux (read in geothermal_heating.nc in mW/m2) rn_geoflx_cst = 86.4e-3 ! Constant value of geothermal heat flux [W/m2] / !----------------------------------------------------------------------- &nambbl ! bottom boundary layer scheme !----------------------------------------------------------------------- nn_bbl_ldf = 1 ! diffusive bbl (=1) or not (=0) nn_bbl_adv = 1 ! advective bbl (=1/2) or not (=0) rn_ahtbbl = 1000. ! lateral mixing coefficient in the bbl [m2/s] rn_gambbl = 10. ! advective bbl coefficient [s] / !!====================================================================== !! Tracer (T & S ) namelists !!====================================================================== !! nameos equation of state !! namtra_adv advection scheme !! namtra_ldf lateral diffusion scheme !! namtra_dmp T & S newtonian damping !!====================================================================== ! !----------------------------------------------------------------------- &nameos ! ocean physical parameters !----------------------------------------------------------------------- nn_eos = 0 ! type of equation of state and Brunt-Vaisala frequency ! = 0, UNESCO (formulation of Jackett and McDougall (1994) and of McDougall (1987) ) ! = 1, linear: rho(T) = rau0 * ( 1.028 - ralpha * T ) ! = 2, linear: rho(T,S) = rau0 * ( rbeta * S - ralpha * T ) rn_alpha = 2.0e-4 ! thermal expension coefficient (nn_eos= 1 or 2) rn_beta = 7.7e-4 ! saline expension coefficient (nn_eos= 2) / !----------------------------------------------------------------------- &namtra_adv ! advection scheme for tracer !----------------------------------------------------------------------- ln_traadv_cen2 = .false. ! 2nd order centered scheme ln_traadv_tvd = .true. ! TVD scheme ln_traadv_muscl = .false. ! MUSCL scheme ln_traadv_muscl2 = .false. ! MUSCL2 scheme + cen2 at boundaries ln_traadv_ubs = .false. ! UBS scheme ln_traadv_qck = .false. ! QUICKEST scheme / !----------------------------------------------------------------------- &namtra_ldf ! lateral diffusion scheme for tracer !----------------------------------------------------------------------- ! ! Type of the operator : ln_traldf_lap = .true. ! laplacian operator ln_traldf_bilap = .false. ! bilaplacian operator ! ! Direction of action : ln_traldf_level = .false. ! iso-level ln_traldf_hor = .false. ! horizontal (geopotential) (require "key_ldfslp" when ln_sco=T) ln_traldf_iso = .true. ! iso-neutral (require "key_ldfslp") ln_traldf_grif = .false. ! griffies skew flux formulation (require "key_ldfslp") ln_traldf_gdia = .false. ! griffies operator strfn diagnostics (require "key_ldfslp") ln_triad_iso = .false. ! griffies operator calculates triads twice => pure lateral mixing in ML (require "key_ldfslp") ln_botmix_grif = .false. ! griffies operator with lateral mixing on bottom (require "key_ldfslp") ! Coefficient rn_aht_0 = 300. ! horizontal eddy diffusivity for tracers [m2/s] rn_ahtb_0 = 0. ! background eddy diffusivity for ldf_iso [m2/s] rn_aeiv_0 = 0. ! eddy induced velocity coefficient [m2/s] (require "key_traldf_eiv") / !----------------------------------------------------------------------- &namtra_dmp ! tracer: T & S newtonian damping ('key_tradmp') !----------------------------------------------------------------------- ln_tradmp = .true. ! add a damping termn (T) or not (F) ln_tradmp_sfc = ${LN_TRADMP_SFC:=false} ! Extend 3D damping to surface layer. nn_hdmp = $NAM_HDMP ! horizontal shape =-1, damping in Med and Red Seas only ! =XX, damping poleward of XX degrees (XX>=0) ! + F(distance-to-coast) + Red and Med Seas nn_zdmp = ${NAM_ZDMP:=0} ! vertical shape =0 damping throughout the water column ! =1 no damping in the mixing layer (kz criteria) ! =2 no damping in the mixed layer (rho crieria) rn_surf = $NAM_SDMP ! surface time scale of damping [days] rn_bot = $NAM_BDMP ! bottom time scale of damping [days] rn_dep = 800. ! depth of transition between rn_surf and rn_bot [meters] rn_dmp_width = ${RN_DMP_WIDTH:=10.} ! Width of transition used with NN_HDMP>0 [degrees latitude] nn_file = 0 ! create a damping.coeff NetCDF file (=1) or not (=0) / !!====================================================================== !! *** Dynamics namelists *** !!====================================================================== !! namdyn_adv formulation of the momentum advection !! namdyn_vor advection scheme !! namdyn_hpg hydrostatic pressure gradient !! namdyn_spg surface pressure gradient (CPP key only) !! namdyn_ldf lateral diffusion scheme !!====================================================================== ! !----------------------------------------------------------------------- &namdyn_adv ! formulation of the momentum advection !----------------------------------------------------------------------- ln_dynadv_vec = .true. ! vector form (T) or flux form (F) ln_dynadv_cen2= .false. ! flux form - 2nd order centered scheme ln_dynadv_ubs = .false. ! flux form - 3rd order UBS scheme / !----------------------------------------------------------------------- &namdyn_vor ! option of physics/algorithm (not control by CPP keys) !----------------------------------------------------------------------- ln_dynvor_ene = .false. ! enstrophy conserving scheme ln_dynvor_ens = .false. ! energy conserving scheme ln_dynvor_mix = .false. ! mixed scheme ln_dynvor_een = .true. ! energy & enstrophy scheme / !----------------------------------------------------------------------- &namdyn_hpg ! Hydrostatic pressure gradient option !----------------------------------------------------------------------- ln_hpg_zco = .false. ! z-coordinate - full steps ln_hpg_zps = .true. ! z-coordinate - partial steps (interpolation) ln_hpg_sco = .false. ! s-coordinate (standard jacobian formulation) ln_hpg_djc = .false. ! s-coordinate (Density Jacobian with Cubic polynomial) ln_hpg_prj = .false. ! s-coordinate (Pressure Jacobian scheme) ln_dynhpg_imp = .true. ! time stepping: semi-implicit time scheme (T) ! centered time scheme (F) / !----------------------------------------------------------------------- !namdyn_spg ! surface pressure gradient (CPP key only) !----------------------------------------------------------------------- ! ! explicit free surface ("key_dynspg_exp") ! ! filtered free surface ("key_dynspg_flt") ! ! split-explicit free surface ("key_dynspg_ts") !----------------------------------------------------------------------- &namdyn_ldf ! lateral diffusion on momentum !----------------------------------------------------------------------- ! ! Type of the operator : ln_dynldf_lap = .false. ! laplacian operator ln_dynldf_bilap = .true. ! bilaplacian operator ! ! Direction of action : ln_dynldf_level = .false. ! iso-level ln_dynldf_hor = .true. ! horizontal (geopotential) (require "key_ldfslp" in s-coord.) ln_dynldf_iso = .false. ! iso-neutral (require "key_ldfslp") ! ! Coefficient rn_ahm_0_lap = 0. ! horizontal laplacian eddy viscosity [m2/s] rn_ahm_0_lap_eq = 0. ! horizontal laplacian eddy viscosity [m2/s] rn_ahmb_0 = 0. ! background eddy viscosity for ldf_iso [m2/s] rn_ahm_0_blp = -1.1e11 ! horizontal bilaplacian eddy viscosity [m4/s] / !!====================================================================== !! Tracers & Dynamics vertical physics namelists !!====================================================================== !! namzdf vertical physics !! namzdf_ric richardson number dependent vertical mixing ("key_zdfric") !! namzdf_tke TKE dependent vertical mixing ("key_zdftke") !! namzdf_kpp KPP dependent vertical mixing ("key_zdfkpp") !! namzdf_ddm double diffusive mixing parameterization ("key_zdfddm") !! namzdf_tmx tidal mixing parameterization ("key_zdftmx") !!====================================================================== ! !----------------------------------------------------------------------- &namzdf ! vertical physics !----------------------------------------------------------------------- rn_avm0 = 1.e-4 ! vertical eddy viscosity [m2/s] (background Kz if not "key_zdfcst") rn_avt0 = 1.e-5 ! vertical eddy diffusivity [m2/s] (background Kz if not "key_zdfcst") nn_avb = 0 ! profile for background avt & avm (=1) or not (=0) nn_havtb = 1 ! horizontal shape for avtb (=1) or not (=0) ln_zdfevd = .true. ! enhanced vertical diffusion (evd) (T) or not (F) nn_evdm = 1 ! evd apply on tracer (=0) or on tracer and momentum (=1) rn_avevd = 10. ! evd mixing coefficient [m2/s] ln_zdfnpc = .false. ! Non-Penetrative Convective algorithm (T) or not (F) nn_npc = 1 ! frequency of application of npc nn_npcp = 365 ! npc control print frequency ln_zdfexp = .false. ! time-stepping: split-explicit (T) or implicit (F) time stepping nn_zdfexp = 3 ! number of sub-timestep for ln_zdfexp=T / !----------------------------------------------------------------------- &namzdf_ric ! richardson number dependent vertical diffusion ("key_zdfric" ) !----------------------------------------------------------------------- rn_avmri = 100.e-4 ! maximum value of the vertical viscosity rn_alp = 5. ! coefficient of the parameterization nn_ric = 2 ! coefficient of the parameterization rn_ekmfc = 0.7 ! Factor in the Ekman depth Equation rn_mldmin = 1.0 ! minimum allowable mixed-layer depth estimate (m) rn_mldmax =1000.0 ! maximum allowable mixed-layer depth estimate (m) rn_wtmix = 10.0 ! vertical eddy viscosity coeff [m2/s] in the mixed-layer rn_wvmix = 10.0 ! vertical eddy diffusion coeff [m2/s] in the mixed-layer ln_mldw = .true. ! Flag to use or not the mized layer depth param. / !----------------------------------------------------------------------- &namzdf_tke ! turbulent eddy kinetic dependent vertical diffusion ("key_zdftke") !----------------------------------------------------------------------- rn_ediff = ${NAM_RN_EDIFF:-0.1} ! coef. for vertical eddy coef. (avt=rn_ediff*mxl*sqrt(e) ) rn_ediss = ${NAM_RN_EDISS:-0.7} ! coef. of the Kolmogoroff dissipation rn_ebb = ${NAM_RN_EBB:-67.83} ! coef. of the surface input of tke (=67.83 suggested when ln_mxl0=T) ln_ebbice = ${NAM_LN_EBBICE:-true} ! modify tke surface input under ice (F) rn_ebbice = ${NAM_RN_EBBICE:-20} ! coef. of the surface input of tke under ice rn_emin = 1.e-6 ! minimum value of tke [m2/s2] rn_emin0 = 1.e-4 ! surface minimum value of tke [m2/s2] nn_mxl = ${NAM_NN_MXL:-3} ! mixing length: = 0 bounded by the distance to surface and bottom ! = 1 bounded by the local vertical scale factor ! = 2 first vertical derivative of mixing length bounded by 1 ! = 3 as =2 with distinct disspipative an mixing length scale nn_pdl = ${NAM_NN_PDL:-1} ! Prandtl number function of richarson number (=1, avt=pdl(Ri)*avm) or not (=0, avt=avm) ln_mxl0 = .true. ! surface mixing length scale = F(wind stress) (T) or not (F) rn_mxl0 = 0.01 ! surface buoyancy lenght scale minimum value ln_lc = .true. ! Langmuir cell parameterisation (Axell 2002) rn_lc = 0.15 ! coef. associated to Langmuir cells nn_etau = ${NAM_NN_ETAU:-1} ! penetration of tke below the mixed layer (ML) due to internal & intertial waves ! = 0 no penetration ! = 1 add a tke source below the ML ! = 2 add a tke source just at the base of the ML ! = 3 as = 1 applied on HF part of the stress ("key_coupled") rn_efr = ${NAM_RN_EFR:-0.05} ! fraction of surface tke value which penetrates below the ML (nn_etau=1 or 2) nn_htau = ${NAM_NN_HTAU:-0} ! type of exponential decrease of tke penetration below the ML ! = 0 constant 10 m length scale ! = 1 0.5m at the equator to 30m poleward of 40 degrees ! = 2 5m at eq to 60m poleward of 40 degrees ! = 3 proportional to SWH rn_whtauscl = ${NAM_RN_WHTAUSCL:-4} ! SWH scalign for htau=3 rn_whtaumin = ${NAM_RN_WHTAUMIN:-1} ! minimum htau (nn_htau=3) rn_delta_0 = ${NAM_RN_DELTA_0:-0.19} ! Strength of background diffusion rn_alpha_m = ${NAM_RN_ALPHA_M:-1.} rn_alpha_h = ${NAM_RN_ALPHA_H:-1.4} rn_beta_m = ${NAM_RN_BETA_M:-14.} rn_beta_h = ${NAM_RN_BETA_H:-11.2} / !------------------------------------------------------------------------ &namzdf_kpp ! K-Profile Parameterization dependent vertical mixing ("key_zdfkpp", and optionally: !------------------------------------------------------------------------ "key_kppcustom" or "key_kpplktb") ln_kpprimix = .true. ! shear instability mixing rn_difmiw = 1.0e-04 ! constant internal wave viscosity [m2/s] rn_difsiw = 0.1e-04 ! constant internal wave diffusivity [m2/s] rn_riinfty = 0.8 ! local Richardson Number limit for shear instability rn_difri = 0.0050 ! maximum shear mixing at Rig = 0 [m2/s] rn_bvsqcon = -0.01e-07 ! Brunt-Vaisala squared for maximum convection [1/s2] rn_difcon = 1. ! maximum mixing in interior convection [m2/s] nn_avb = 0 ! horizontal averaged (=1) or not (=0) on avt and amv nn_ave = 1 ! constant (=0) or profile (=1) background on avt / !----------------------------------------------------------------------- &namzdf_gls ! GLS vertical diffusion ("key_zdfgls") !----------------------------------------------------------------------- rn_emin = 1.e-6 ! minimum value of e [m2/s2] rn_epsmin = 1.e-12 ! minimum value of eps [m2/s3] ln_length_lim = .true. ! limit on the dissipation rate under stable stratification (Galperin et al., 1988) rn_clim_galp = 0.53 ! galperin limit ln_crban = .true. ! Use Craig & Banner (1994) surface wave mixing parametrisation ln_sigpsi = .true. ! Activate or not Burchard 2001 mods on psi schmidt number in the wb case rn_crban = 100. ! Craig and Banner 1994 constant for wb tke flux rn_charn = 70000. ! Charnock constant for wb induced roughness length nn_tkebc_surf = 1 ! surface tke condition (0/1/2=Dir/Neum/Dir Mellor-Blumberg) nn_tkebc_bot = 1 ! bottom tke condition (0/1=Dir/Neum) nn_psibc_surf = 1 ! surface psi condition (0/1/2=Dir/Neum/Dir Mellor-Blumberg) nn_psibc_bot = 1 ! bottom psi condition (0/1=Dir/Neum) nn_stab_func = 2 ! stability function (0=Galp, 1= KC94, 2=CanutoA, 3=CanutoB) nn_clos = 1 ! predefined closure type (0=MY82, 1=k-eps, 2=k-w, 3=Gen) / !----------------------------------------------------------------------- &namzdf_ddm ! double diffusive mixing parameterization ("key_zdfddm") !----------------------------------------------------------------------- rn_avts = 1.e-4 ! maximum avs (vertical mixing on salinity) rn_hsbfr = 1.6 ! heat/salt buoyancy flux ratio / !----------------------------------------------------------------------- &namzdf_tmx ! tidal mixing parameterization ("key_zdftmx") !----------------------------------------------------------------------- rn_htmx = 500. ! vertical decay scale for turbulence (meters) rn_n2min = 1.e-8 ! threshold of the Brunt-Vaisala frequency (s-1) rn_tfe = 0.333 ! tidal dissipation efficiency rn_me = 0.2 ! mixing efficiency ln_tmx_itf = .true. ! ITF specific parameterisation rn_tfe_itf = 1. ! ITF tidal dissipation efficiency ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_mskitf = 'mask_itf' , -12 , 'tmaskitf' , .false. , .true. , 'yearly' , '' , '' sn_m2 = 'M2rowdrg' , -12 , 'field' , .false. , .true. , 'yearly' , '' , '' sn_s2 = 'S2rowdrg' , -12 , 'field' , .false. , .true. , 'yearly' , '' , '' sn_k1 = 'K1rowdrg' , -12 , 'field' , .false. , .true. , 'yearly' , '' , '' / !!====================================================================== !! *** Miscellaneous namelists *** !!====================================================================== !! nammpp Massively Parallel Processing ("key_mpp_mpi") !! namctl Control prints & Benchmark !! namsol elliptic solver / island / free surface !!====================================================================== ! !----------------------------------------------------------------------- &namsol ! elliptic solver / island / free surface !----------------------------------------------------------------------- nn_solv = 1 ! elliptic solver: =1 preconditioned conjugate gradient (pcg) ! =2 successive-over-relaxation (sor) nn_sol_arp = 0 ! absolute/relative (0/1) precision convergence test rn_eps = 1.e-6 ! absolute precision of the solver nn_nmin = 300 ! minimum of iterations for the SOR solver nn_nmax = 2800 ! maximum of iterations for the SOR solver nn_nmod = 10 ! frequency of test for the SOR solver rn_resmax = 1.e-10 ! absolute precision for the SOR solver rn_sor = 1.973 ! optimal coefficient for SOR solver (to be adjusted with the domain) / !----------------------------------------------------------------------- &nammpp ! Massively Parallel Processing ("key_mpp_mpi") !----------------------------------------------------------------------- cn_mpi_send = 'I' ! mpi send/recieve type ='S', 'B', or 'I' for standard send, ! buffer blocking send or immediate non-blocking sends, resp. nn_buffer = 0 ! size in bytes of exported buffer ('B' case), 0 no exportation jpni = $NEMO_NPROCX ! jpni number of processors following i (set automatically if < 1) jpnj = $NEMO_NPROCY ! jpnj number of processors following j (set automatically if < 1) jpnij = $NEMO_NPROC ! jpnij number of local domains (set automatically if < 1) ln_nnogather = .true. ln_lbcmap = ${LN_LBCMAP:-.TRUE.} / !----------------------------------------------------------------------- &namctl ! Control prints & Benchmark !----------------------------------------------------------------------- ln_ctl = .false. ! trends control print (expensive!) nn_print = 0 ! level of print (0 no extra print) nn_ictls = 0 ! start i indice of control sum (use to compare mono versus nn_ictle = 0 ! end i indice of control sum multi processor runs nn_jctls = 0 ! start j indice of control over a subdomain) nn_jctle = 0 ! end j indice of control nn_isplt = 1 ! number of processors in i-direction nn_jsplt = 1 ! number of processors in j-direction nn_bench = 0 ! Bench mode (1/0): CAUTION use zero except for bench ! (no physical validity of the results) nn_timing = 1 ! timing by routine activated (=1) creates timing.output file, or not (=0) ln_mpiprt = .false. ! Non-masters tasks write ocean.output_... ln_smslabel= $NAM_LN_SMSLABEL ! Communicate with SMS. cn_smslabel = "${CN_SMSLABEL:-xlabel}" nn_smsfrq = $NAM_NN_SMSFRQ ! SMS communication frequency (time steps) ln_diadebug = .false. ! Grid point diagnostic output (fill namdiadebug) ln_sglread = ${NAM_LN_SGLREAD:-.true.} ln_sglreadfbm = ${NAM_LN_SGLREADFBM:-.true.} ln_sglwrite = ${LNSGLWRITE:-.false.} ln_sglwritefbm = ${LNSGLWRITEFBM:-.false.} ln_timeout = ${LNTIMEOUT:=.true.} ln_timeoutflush = ${LNTIMEOUTFLUSH:=.true.} / !----------------------------------------------------------------------- &namcfg ! parameters of the configuration !----------------------------------------------------------------------- cp_cfg = "orca" ! name of the configuration cp_cfz = "normal" ! zoom jp_cfg = 025 ! resolution of the configuration jpidta = 1442 ! 1st lateral dimension ( >= jpi ) jpjdta = 1021 ! 2nd " " ( >= jpj ) jpkdta = 75 ! number of levels ( >= jpk ) jpiglo = 1442 ! 1st dimension of global domain --> i =jpidta jpjglo = 1021 ! 2nd - - --> j =jpjdta jpizoom = 1 ! left bottom (i,j) indices of the zoom jpjzoom = 1 ! in data domain indices jperio = 4 ! lateral cond. type (between 0 and 6) ln_trabbl = .false. ! key_trabbl not set nn_ldfdyn = 2 ! key_dynldf_c2d ln_zdfddm = .false. ! key_zdfddm not set ln_traldf_eiv = .false. ! key_traldf_eiv not set / !!====================================================================== !! *** Diagnostics namelists *** !!====================================================================== !! namnc4 netcdf4 chunking and compression settings ("key_netcdf4") !! namtrd dynamics and/or tracer trends ("key_trddyn","key_trdtra","key_trdmld") !! namflo float parameters ("key_float") !! namptr Poleward Transport Diagnostics !! namhsb Heat and salt budgets !!====================================================================== ! !----------------------------------------------------------------------- &namnc4 ! netcdf4 chunking and compression settings ("key_netcdf4") !----------------------------------------------------------------------- nn_nchunks_i= ${NC4CHUNKX:-4} ! number of chunks in i-dimension nn_nchunks_j= ${NC4CHUNKY:-4} ! number of chunks in j-dimension nn_nchunks_k= ${NC4CHUNKZ:-75} ! number of chunks in k-dimension ! setting nn_nchunks_k = jpk will give a chunk size of 1 in the vertical which ! is optimal for postprocessing which works exclusively with horizontal slabs ln_nc4zip = ${NC4REST:-.false.} ! (T) use netcdf4 chunking and compression ! (F) ignore chunking information and produce netcdf3-compatible files / !----------------------------------------------------------------------- &namtrd ! diagnostics on dynamics and/or tracer trends ("key_trddyn" and/or "key_trdtra") ! ! or mixed-layer trends or barotropic vorticity ("key_trdmld" or "key_trdvor") !----------------------------------------------------------------------- nn_trd = 365 ! time step frequency dynamics and tracers trends nn_ctls = 0 ! control surface type in mixed-layer trends (0,1 or n /seconds ; =86400. -> /day) cn_trdrst_in = "restart_mld" ! suffix of ocean restart name (input) cn_trdrst_out = "restart_mld" ! suffix of ocean restart name (output) ln_trdmld_restart = .false. ! restart for ML diagnostics ln_trdmld_instant = .false. ! flag to diagnose trends of instantantaneous or mean ML T/S / !----------------------------------------------------------------------- &namflo ! float parameters ("key_float") !----------------------------------------------------------------------- jpnfl = 1 ! total number of floats during the run jpnnewflo = 0 ! number of floats for the restart ln_rstflo = .false. ! float restart (T) or not (F) nn_writefl = 75 ! frequency of writing in float output file nn_stockfl = 5475 ! frequency of creation of the float restart file ln_argo = .false. ! Argo type floats (stay at the surface each 10 days) ln_flork4 = .false. ! trajectories computed with a 4th order Runge-Kutta (T) ! or computed with Blanke' scheme (F) ln_ariane = .true. ! Input with Ariane tool convention(T) ln_flo_ascii = .true. ! Output with Ariane tool netcdf convention(F) or ascii file (T) / !----------------------------------------------------------------------- &namptr ! Poleward Transport Diagnostic !----------------------------------------------------------------------- ln_diaptr = .false. ! Poleward heat and salt transport (T) or not (F) ln_diaznl = .true. ! Add zonal means and meridional stream functions ln_subbas = .true. ! Atlantic/Pacific/Indian basins computation (T) or not ! (orca configuration only, need input basins mask file named "subbasins.nc" ln_ptrcomp = .true. ! Add decomposition : overturning nn_fptr = 1 ! Frequency of ptr computation [time step] nn_fwri = 15 ! Frequency of ptr outputs [time step] / !----------------------------------------------------------------------- &namhsb ! Heat and salt budgets !----------------------------------------------------------------------- ln_diahsb = .false. ! check the heat and salt budgets (T) or not (F) / !----------------------------------------------------------------------- &nam_diaharm ! Harmonic analysis of tidal constituents ('key_diaharm') !----------------------------------------------------------------------- nit000_han = 1 ! First time step used for harmonic analysis nitend_han = 75 ! Last time step used for harmonic analysis nstep_han = 15 ! Time step frequency for harmonic analysis tname(1) = 'M2' ! Name of tidal constituents tname(2) = 'K1' / !----------------------------------------------------------------------- &namdct ! transports through sections !----------------------------------------------------------------------- nn_dct = 15 ! time step frequency for transports computing nn_dctwri = 15 ! time step frequency for transports writing nn_secdebug = 112 ! 0 : no section to debug ! -1 : debug all section ! 0 < n : debug section number n / !!====================================================================== !! *** Observation & Assimilation namelists *** !!====================================================================== !! namobs observation and model comparison ('key_diaobs') !! nam_asminc assimilation increments ('key_asminc') !!====================================================================== ! !----------------------------------------------------------------------- &namobs ! observation usage switch ('key_diaobs') !----------------------------------------------------------------------- cn_oceobs_out_path="${CN_OCEOBS_OUT_PATH:-./}" ln_t3d = $LPRO ! Logical switch for T profile observations ln_s3d = $LPRO ! Logical switch for S profile observations ln_ena = .false. ! Logical switch for ENACT insitu data set ! ! ln_cor Logical switch for Coriolis insitu data set ln_profb = $LPRO ! Logical switch for feedback insitu data set ln_sla = $LSLA ! Logical switch for SLA observations ln_sladt = .false. ! Logical switch for AVISO SLA data ln_slafb = $LSLA ! Logical switch for feedback SLA data ! ln_ssh Logical switch for SSH observations ln_sst = $LSST ! Logical switch for SST observations ln_sstbias = .false. ln_grdsst = ${NAM_LN_GRDSST:-.true.} ! ln_grdsst Logical switch for gridded observations ! ln_ghrsst Logical switch for GHRSST observations ln_sstfb = ${NAM_LN_SSTFB:-.false.} ! Logical switch for feedback SST data sstfbfiles = ${NAM_SSTFBFILES:-''} ! ln_sss Logical switch for SSS observations ! ln_seaice Logical switch for Sea Ice observations ! ln_vel3d Logical switch for velocity observations ! ln_velavcur Logical switch for velocity daily av. cur. ! ln_velhrcur Logical switch for velocity high freq. cur. ! ln_velavadcp Logical switch for velocity daily av. ADCP ! ln_velhradcp Logical switch for velocity high freq. ADCP ! ln_velfb Logical switch for feedback velocity data ! ln_grid_global Global distribtion of observations ! ln_grid_search_lookup Logical switch for obs grid search w/lookup table ! grid_search_file Grid search lookup file header ! enactfiles ENACT input observation file names ! coriofiles Coriolis input observation file name ! ! profbfiles: Profile feedback input observation file name profbfiles = $NPROFFILES ln_profb_enatim = .true. ! ln_profb_enatim Enact feedback input time setting switch ! slafilesact Active SLA input observation file name ! slafilespas Passive SLA input observation file name ! ! slafbfiles: Feedback SLA input observation file nam slafbfiles = $NSLAFILES ! sstfiles GHRSST input observation file name ! ! sstfbfiles: Feedback SST input observation file name ! seaicefiles Sea Ice input observation file name ! velavcurfiles Vel. cur. daily av. input file name ! velhvcurfiles Vel. cur. high freq. input file name ! velavadcpfiles Vel. ADCP daily av. input file name ! velhvadcpfiles Vel. ADCP high freq. input file name ! velfbfiles Vel. feedback input observation file name ! dobsini Initial date in window YYYYMMDD.HHMMSS ! dobsend Final date in window YYYYMMDD.HHMMSS ! n1dint Type of vertical interpolation method ! n2dint Type of horizontal interpolation method ! ln_nea Rejection of observations near land switch nmsshc = 1 ! MSSH correction scheme ! mdtcorr MDT correction ! mdtcutoff MDT cutoff for computed correction ln_altbias = .false. ! Logical switch for alt bias ln_ignmis = .true. ! Logical switch for ignoring missing files ! endailyavtypes ENACT daily average types ln_grid_global = .true. ln_grid_search_lookup = $GRIDLOOKUP ln_velfb = $LCUR ln_vel3d = $LCUR ln_vel3dw = ${LCURW:-false} velfbfiles = $CURFBDATA ln_velfb_av = $CURFBAVG ln_vel2d = ${LCURSURF:-.false.} velfb2dfiles = ${CURSURFFBDATA:-\"\"} n1dint = 1 n2dint = 3 ln_nea = .true. mdtcutoff = 65.0 mdtcorr = 1.61 dobsini = ${NDATE0}.${NTIME0}0000 dobsend = ${OBSWINEND:-${NDATEND}.${NTIMEEND}0000} ln_profb_ena = $LNPROFBENA ln_profb_enatim = $LNPROFBENATIM ln_seaice = $LNSEAICE ln_grdseaice = $LNGRDSEAICE ln_seaicefb = $LNSEAICEFB grdseaicename = 'ice_cover_yYYYYmMM.nc' seaicefbfiles = ${NAM_SEAICEFILES:-''} nicethin = ${NAM_NICETHIN:-2} ! Thinning factor for reading gridded seaice obs ln_seaicepos = ${LN_SEAICEPOS:=.FALSE.} ! Logical switch for seaice gridded obs perturbation iceprobseed = ${ICEPROBSEED:-0} ! Seed for seaice obs perturbation ln_obsmpppack = ${LN_OBSMPPPACK:=.TRUE.} / !----------------------------------------------------------------------- &nam_asminc ! assimilation increments ('key_asminc') !----------------------------------------------------------------------- ln_bkgwri = $LBKGWRI ! Logical switch for writing out background state ln_trainc = $LTRAINC ! Logical switch for applying tracer increments ln_dyninc = $LDYNINC ! Logical switch for applying velocity increments ln_sshinc = $LSSHINC ! Logical switch for applying SSH increments ln_seaiceinc = $LSEAICEINC ! Logical switch for applying seaice increments ln_asmdin = $LASMDIN ! Logical switch for Direct Initialization (DI) ln_asmiau = $LASMIAU ! Logical switch for Incremental Analysis Updating (IAU) nitbkg = 0 ! Timestep of background in [0,nitend-nit000-1] nitdin = 0 ! Timestep of background for DI in [0,nitend-nit000-1] nitiaustr = 1 ! Timestep of start of IAU interval in [0,nitend-nit000-1] nitiaufin = $NITIAUFIN ! Timestep of end of IAU interval in [0,nitend-nit000-1] niaufn = 0 ! Type of IAU weighting function ln_salfix = .false. ! Logical switch for ensuring that the sa > salfixmin salfixmin = -9999 ! Minimum salinity after applying the increments nn_divdmp = ${NN_DIVDMP:=0} ! Number of iterations of divergence damping operator / &namtrj cn_dirtrj = 'tam_trajectory' ln_trjhand = ${NAM_LN_TRAJ:=.FALSE.} nn_ittrjfrq = ${TRJFRQ:=0} ln_trj_spl = .TRUE. / !----------------------------------------------------------------------- &nambias ! Parameters for bias corrections #ifdef key_bias) !----------------------------------------------------------------------- ln_bias = $LN_BIAS ! activate bias correction ln_bias_asm = $BIAS_ASM ! use assim bias ln_bias_rlx = .FALSE. ! use clim-relax bias ln_bias_ofl = $LN_BIAS_OFL ! use off-line bias ln_bias_ts_app= ${LN_BIAS_TS_APP:=.TRUE.} ! apply bias to Temp/Sal directly ln_bias_pc_app= ${LN_BIAS_PC_APP:=.TRUE.} ! apply bias to pressure gradient cn_bias_tot = 'bias_tot.nc' !file name with bias file (restart) cn_bias_asm = 'bias_asm.nc' !file name " " from assim ! dir and structures for offline bias (using fldread conventions) cn_dir = './' sn_tbias_ofl= 'tbias_ofl', -1,'tbias', .true., .true., 'yearly' sn_sbias_ofl= 'sbias_ofl', -1,'sbias', .true., .true., 'yearly' bias_time_unit_asm = $BIASTIMEUNITASM ! time unit of asm bias fb_t_asm = ${RN_FB_T_ASM:=0.02} ! partition of total bias for T/S fb_t_rlx = 1. ! " " " " in T/S fb_t_ofl = ${RN_FB_T_OFL:=.1} fb_p_rlx = 1. fb_p_asm = ${RN_FB_P_ASM:=0.3} fb_p_ofl = ${RN_FB_P_OFL:=1.} nn_inertial = $NN_INERTIAL !0/1/2 0/sin(lat)**2/gausian gphit0 = ${RN_GPHIT0:=10.} !length for guassian tappering fctamp = ${RN_FCTAMP:=10.} eft_rlx = 1800. ! efolding time for rlx bias estimation eft_asm = ${RN_EFT_ASM:=1800.} ! efolding time for asm bias estimation 5y t_rlx_upd = 0.05 ! update fct rlx bias " (0. -> 1.) t_asm_upd = ${RN_T_ASM_UPD:=0.05} ! update fct assim bias " (0. -> 1.) lrst_biasr =$LRST_BIASR !force to read bias file at first time step capN2val = ${CAPN2VAL:=-1} !if larger than 0, cap N2 min val (~1.e-6) / !----------------------------------------------------------------------- &namsbc_wave ! External fields from wave model !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_cdg = 'cdww' , ${FREQWAM:-6} , 'cdww' , ${NAMCDWWINT:-.false.} , .false., 'monthly' , '' , '' ! cn_dir_cdg = './' ! root directory for the location of drag coefficient files / !----------------------------------------------------------------------- &namsbc_waveparlim !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_strn = 'istr' , 6 , 'icestrain' , .true. , .false. , 'monthly' , '' , '' cn_dir_waveparlim = './' ! root directory for the location of the ECWAM files / !----------------------------------------------------------------------- &namdyn_nept ! Neptune effect (simplified: lateral and vertical diffusions removed) !----------------------------------------------------------------------- ! Suggested lengthscale values are those of Eby & Holloway (1994) for a coarse model ln_neptsimp = .false. ! yes/no use simplified neptune ln_smooth_neptvel = .false. ! yes/no smooth zunep, zvnep rn_tslse = 1.2e4 ! value of lengthscale L at the equator rn_tslsp = 3.0e3 ! value of lengthscale L at the pole ! Specify whether to ramp down the Neptune velocity in shallow ! water, and if so the depth range controlling such ramping down ln_neptramp = .true. ! ramp down Neptune velocity in shallow water rn_htrmin = 100.0 ! min. depth of transition range rn_htrmax = 200.0 ! max. depth of transition range / !----------------------------------------------------------------------- &namtam ! TAM trajactory !----------------------------------------------------------------------- cn_dirtrj = 'tam_trajectory' ln_trjwri = .FALSE. nn_ittrjfrq = 1 ln_trj_spl = .TRUE. / !----------------------------------------------------------------------- &namsbc_wavepar ! namsbc_wavepar parameters from wave model (CCC not identical to namsbc_wave) !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_ust = 'ust' , ${FREQWAM:-6} , 'ust' , .false. , .false. , 'monthly' , '' , '' sn_vst = 'vst' , ${FREQWAM:-6} , 'vst' , .false. , .false. , 'monthly' , '' , '' sn_swh = 'swh' , ${FREQWAM:-6} , 'swh' , .false. , .false. , 'monthly' , '' , '' sn_mwp = 'mwp' , ${FREQWAM:-6} , 'mwp' , .false. , .false. , 'monthly' , '' , '' sn_wspd = 'wspd' , ${FREQWAM:-6} , 'wspd' , .false. , .false. , 'monthly' , '' , '' sn_phioc = 'phioc' , ${FREQWAM:-6} , 'phioc' , .false. , .false. , 'monthly' , '' , '' sn_tauoc = 'tauoc' , ${FREQWAM:-6} , 'tauoc' , .false. , .false. , 'monthly' , '' , '' cn_dir_wavepar = './' ! root directory for the location of the ECWAM files / &namdebug jpig1=1072 jpig2=1075 jpjg1=65 jpjg2=67 jpkg1=1 jpkg2=40 kt1=1152 kt2=1224 / eof_namelist elif [[ ${OUT_GRID}_Z${OUT_LEVELS} = "ORCA1_Z75" ]]; then NAM_LN_SMSLABEL=${NAM_LN_SMSLABEL:=.false.} NAM_NN_SMSFREQ=${NAM_NN_SMSFRQ:=24} cat >namelist<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !! NEMO/OPA : 1 - run manager (namrun) !! namelists 2 - Domain (namzgr, namzgr_sco, namdom, namtsd) !! 3 - Surface boundary (namsbc, namsbc_ana, namsbc_flx, namsbc_clio, namsbc_core !! namsbc_cpl, namtra_qsr, namsbc_rnf, !! namsbc_apr, namsbc_ssr, namsbc_alb, !! namsbc_prt) !! 4 - lateral boundary (namlbc, namcla, namobc, namagrif, nambdy, nambdy_tide) !! 5 - bottom boundary (nambfr, nambbc, nambbl) !! 6 - Tracer (nameos, namtra_adv, namtra_ldf, namtra_dmp) !! 7 - dynamics (namdyn_adv, namdyn_vor, namdyn_hpg, namdyn_spg, namdyn_ldf) !! 8 - Verical physics (namzdf, namzdf_ric, namzdf_tke, namzdf_kpp, namzdf_ddm, namzdf_tmx) !! 9 - diagnostics (namnc4, namtrd, namspr, namflo, namptr, namhsb) !! 10 - miscellaneous (namsol, nammpp, nammpp_dyndist, namctl) !! 11 - Obs & Assim (namobs, nam_asminc) !!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !!====================================================================== !! *** Run management namelists *** !!====================================================================== !! namrun parameters of the run !!====================================================================== ! !----------------------------------------------------------------------- &namrun ! parameters of the run !----------------------------------------------------------------------- nn_no = $NCYC ! job number cn_exp = "$EXPVER" ! experience name nn_it000 = $NIT000 ! first time step nn_itend = $NITEND ! last time step (std 5475) nn_date0 = $NDATE0 ! initial calendar date yymmdd (used if nn_rstctl=1) nn_itfile = ${NAM_NN_ITFILE:=-1} nn_leapy = 1 ! Leap year calendar (1) or not (0) ln_rstart = $LN_RESTART ! start from rest (F) or from a restart file (T) nn_rstctl = 0 ! restart control = 0 nn_it000 is not compared to the restart file value ! = 1 use nn_date0 in namelist (not the value in the restart file) ! = 2 calendar parameters read in the restart file cn_ocerst_in = "restart" ! suffix of ocean restart name (input) cn_ocerst_out = "restart" ! suffix of ocean restart name (output) nn_istate = 0 ! output the initial state (1) or not (0) nn_stock = $NSTOCK ! frequency of creation of a restart file (modulo referenced to 1) nn_write = $OUTFREQ ! frequency of write in the output file (modulo referenced to nn_it000) ln_dimgnnn = .false. ! DIMG file format: 1 file for all processors (F) or by processor (T) ln_mskland = .false. ! mask land points in NetCDF outputs (costly: + ~15%) ln_clobber = .true. ! clobber (overwrite) an existing file nn_chunksz = ${NCCHUNKSIZE:-0} ! chunksize (bytes) for NetCDF file nn_slimrst = $NSLIMRST ! option of slim restart output (0:full; 1:nowfields+tke+sbc; 2:nowfields+sbc+en; 3:nowfields only) nn_slimrstin = ${NSLIMRSTIN:-0} ! Force slim restart on input ln_rsttime = ${LN_RSTTIME:-.true.} ! Use time in restart output names rather than time steps ln_writerst = ${LNWRITERST:-.true.} ln_usetime = ${LNUSETIME:-.false.} cn_ocerst_out_path="${CN_OCERST_OUT_PATH:-./}" nn_itout = ${NITOUT:-$NIT000} ln_rcf_read = ${NEMO_LN_RCF_READ:-.false.} ln_rcf_write = ${NEMO_LN_RCF_WRITE:-.false.} / !!====================================================================== !! *** Domain namelists *** !!====================================================================== !! namzgr vertical coordinate !! namzgr_sco s-coordinate or hybrid z-s-coordinate !! namdom space and time domain (bathymetry, mesh, timestep) !! namtsd data: temperature & salinity !!====================================================================== ! !----------------------------------------------------------------------- &namzgr ! vertical coordinate !----------------------------------------------------------------------- ln_zco = .false. ! z-coordinate - full steps (T/F) ("key_zco" may also be defined) ln_zps = .true. ! z-coordinate - partial steps (T/F) ln_sco = .false. ! s- or hybrid z-s-coordinate (T/F) / !----------------------------------------------------------------------- &namzgr_sco ! s-coordinate or hybrid z-s-coordinate !----------------------------------------------------------------------- rn_sbot_min = 300. ! minimum depth of s-bottom surface (>0) (m) rn_sbot_max = 5250. ! maximum depth of s-bottom surface (= ocean depth) (>0) (m) rn_theta = 6.0 ! surface control parameter (0<=rn_theta<=20) rn_thetb = 0.75 ! bottom control parameter (0<=rn_thetb<= 1) rn_rmax = 0.15 ! maximum cut-off r-value allowed (00) or min number of ocean level (<0) rn_e3zps_min= 25. ! partial step thickness is set larger than the minimum of rn_e3zps_rat= 0.2 ! rn_e3zps_min and rn_e3zps_rat*e3t, with 0 fill namsbc_ana ) ln_flx = $NAM_LN_FLX ! flux formulation (T => fill namsbc_flx ) ln_blk_clio = .false. ! CLIO bulk formulation (T => fill namsbc_clio) ln_blk_core = $NAM_LN_BLK ! CORE bulk formulation (T => fill namsbc_core) ln_cpl = .false. ! Coupled formulation (T => fill namsbc_cpl ) ln_apr_dyn = .false. ! Patm gradient added in ocean & ice Eqs. (T => fill namsbc_apr ) nn_ice = $NAM_NN_ICE ! =0 no ice boundary condition , ! =1 use observed ice-cover , ! =2 ice-model used ("key_lim3" or "key_lim2") ln_dm2dc = .false. ! daily mean to diurnal cycle on short wave ln_rnf = .true. ! runoffs (T => fill namsbc_rnf) ln_ssr = .true. ! Sea Surface Restoring on T and/or S (T => fill namsbc_ssr) nn_fwb = $NN_FWB ! FreshWater Budget: =0 unchecked ! =1 global mean of e-p-r set to zero at each time step ! =2 annual global mean of e-p-r set to zero ! =3 global emp set to zero and spread out over erp area ! =4 variable time global mean of e-p-r set to zero (fill namsbc_fwb) nn_hbp = 1 ln_cdgw = ${NAM_LN_CDWW:-false} ! Neutral drag coefficient read from wave model ln_stcor = ${NAM_LN_STCOR:-false} ! Stokes drift read from wave model ln_wavetke = ${NAM_LN_WAVETKE:-false} ! TKE wave parameters read from wave model ln_tauoc = ${NAM_LN_TAUOC:-false} ! Wave-modified stress from wave model ln_wbrsource = ${NAM_LN_WBRSOURCE:-false} ! TKE from wave breaking as source function ln_pert = ${NAM_LNREAD_PERT:-false} ! Option to read surf pert ln_wicestrn = ${NAM_LN_WICESTRN:-false} / !----------------------------------------------------------------------- &namsbc_ana ! analytical surface boundary condition !----------------------------------------------------------------------- nn_tau000 = 0 ! gently increase the stress over the first ntau_rst time-steps rn_utau0 = 0.5 ! uniform value for the i-stress rn_vtau0 = 0.e0 ! uniform value for the j-stress rn_qns0 = 0.e0 ! uniform value for the total heat flux rn_qsr0 = 0.e0 ! uniform value for the solar radiation rn_emp0 = 0.e0 ! uniform value for the freswater budget (E-P) / !----------------------------------------------------------------------- &namsbc_flx ! surface boundary condition : flux formulation !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_utau = 'utau' , 24 , 'utau' , .false. , .false., 'monthly' , '' , '' sn_vtau = 'vtau' , 24 , 'vtau' , .false. , .false., 'monthly' , '' , '' sn_qtot = 'flx' , 24 , 'qtot' , .false. , .false., 'monthly' , '' , '' sn_qsr = 'flx' , 24 , 'qsr' , .false. , .false., 'monthly' , '' , '' sn_emp = 'flx' , 24 , 'emp' , .false. , .false., 'monthly' , '' , '' cn_dir = './' ! root directory for the location of the flux files / !----------------------------------------------------------------------- &namsbc_iif ! surface boundary condition for prescribed ice !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interpol. ! clim ! 'yearly' or ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! sn_ice = 'ice_cover' , 24 , 'ice_cov' , .false. , .false. , 'monthly', '', '' cn_dir = './' ! root for location of ice files dtice = 1. ! time scale for relaxation to sea-ice nn_ice_rel = $NAM_NN_ICE_REL ! Use pseudo-ice treatment / !----------------------------------------------------------------------- &namsbc_clio ! namsbc_clio CLIO bulk formulea !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_utau = 'taux_1m' , -1 , 'sozotaux', .true. , .true. , 'yearly' , '' , '' sn_vtau = 'tauy_1m' , -1 , 'sometauy', .true. , .true. , 'yearly' , '' , '' sn_wndm = 'flx' , -1 , 'socliowi', .true. , .true. , 'yearly' , '' , '' sn_tair = 'flx' , -1 , 'socliot2', .true. , .true. , 'yearly' , '' , '' sn_humi = 'flx' , -1 , 'socliohu', .true. , .true. , 'yearly' , '' , '' sn_ccov = 'flx' , -1 , 'socliocl', .false. , .true. , 'yearly' , '' , '' sn_prec = 'flx' , -1 , 'socliopl', .false. , .true. , 'yearly' , '' , '' cn_dir = './' ! root directory for the location of the bulk files are / !----------------------------------------------------------------------- &namsbc_core ! namsbc_core CORE bulk formulea !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_wndi = 'u10' , ${FREQAN:-6} , 'u10' , .false. , .false. , 'monthly' , '' , '' sn_wndj = 'v10' , ${FREQAN:-6} , 'v10' , .false. , .false. , 'monthly' , '' , '' sn_qsr = 'accum' , ${FREQFC:-24} , 'swdn' , .false. , .false. , 'monthly' , '' , '' sn_qlw = 'accum' , ${FREQFC:-24} , 'lwdn' , .false. , .false. , 'monthly' , '' , '' sn_tair = 'qtml' , ${FREQAN:-6} , 't10' , .false. , .false. , 'monthly' , '' , '' sn_humi = 'qtml' , ${FREQAN:-6} , 'q10' , .false. , .false. , 'monthly' , '' , '' sn_prec = 'accum' , ${FREQFC:-24} , 'precip' , .false. , .false. , 'monthly' , '' , '' sn_snow = 'accum' , ${FREQFC:-24} , 'snow' , .false. , .false. , 'monthly' , '' , '' sn_tdif = 'taudif_core' , 24 , 'taudif' , .false. , .true. , 'yearly' , '' , '' sn_ccov = '${CLDCOVTYP:-tcc}', ${FREQAN:-6} , '${CLDCOVTYP:-tcc}', .false. , .false. , 'monthly' , '' , '' cn_dir = './' ! root directory for the location of the bulk files ln_2m = .false. ! air temperature and humidity referenced at 2m (T) instead 10m (F) ln_taudif = .false. ! HF tau contribution: use "mean of stress module - module of the mean stress" data ln_cdec = $NAM_LN_CDEC ! Switch to ECMWF drag rn_pfac = 1. ! multiplicative factor for precipitation (total & snow) ln_cldcov = ${LNBULKCLD:-.false.} rn_rrelwind = ${NAM_RN_RRELWIND:-1.0} / !----------------------------------------------------------------------- &namsbc_cpl ! coupled ocean/atmosphere model ("key_coupled") !----------------------------------------------------------------------- ! ! description ! multiple ! vector ! vector ! vector ! ! ! ! categories ! reference ! orientation ! grids ! ! send sn_snd_temp = 'weighted oce and ice' , 'no' , '' , '' , '' sn_snd_alb = 'weighted ice' , 'no' , '' , '' , '' sn_snd_thick = 'none' , 'no' , '' , '' , '' sn_snd_crt = 'none' , 'no' , 'spherical' , 'eastward-northward' , 'T' sn_snd_co2 = 'coupled' , 'no' , '' , '' , '' ! receive sn_rcv_w10m = 'none' , 'no' , '' , '' , '' sn_rcv_taumod = 'coupled' , 'no' , '' , '' , '' sn_rcv_tau = 'oce only' , 'no' , 'cartesian' , 'eastward-northward', 'U,V' sn_rcv_dqnsdt = 'coupled' , 'no' , '' , '' , '' sn_rcv_qsr = 'oce and ice' , 'no' , '' , '' , '' sn_rcv_qns = 'oce and ice' , 'no' , '' , '' , '' sn_rcv_emp = 'conservative' , 'no' , '' , '' , '' sn_rcv_rnf = 'coupled' , 'no' , '' , '' , '' sn_rcv_cal = 'coupled' , 'no' , '' , '' , '' sn_rcv_co2 = 'coupled' , 'no' , '' , '' , '' / !----------------------------------------------------------------------- &namtra_qsr ! penetrative solar radiation !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_chl ='chlorophyll', -1 , 'ch' , .true. , .true. , 'yearly' , '' , '' cn_dir = './' ! root directory for the location of the runoff files ln_traqsr = .true. ! Light penetration (T) or not (F) ln_qsr_rgb = $QSRRGB ! RGB (Red-Green-Blue) light penetration ln_qsr_2bd = $QSR2BD ! 2 bands light penetration ln_qsr_bio = .false. ! bio-model light penetration nn_chldta = $CHLTYPE ! RGB : Chl data (=1) or cst value (=0) rn_abs = 0.58 ! RGB & 2 bands: fraction of light (rn_si1) rn_si0 = 0.35 ! RGB & 2 bands: shortess depth of extinction rn_si1 = 23.0 ! 2 bands: longest depth of extinction / !----------------------------------------------------------------------- &namsbc_fwb ! namsbc_fwb Fresh water budget !----------------------------------------------------------------------- rd_fwb = 1. ! time scale to apply fwb correction (days) ikt_fwb = 1 ! freq (time steps) to estimate fwb nr_ssh = $NR_SSH ! 0 for global sl=0. 1/2 for external SL/Mass file cn_dir ='./' ! root directory for location of ssh file sn_ssh = $SSHFILE rcap = 1. ! mm/day cap for FWB adjusment lfwbr = $LFWBR / !----------------------------------------------------------------------- &namsbc_rnf ! runoffs namelist surface boundary condition !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_rnf = 'runoff_1m_nomask', -1 , 'sorunoff', .true. , .true. , 'yearly' , '' , '' sn_cnf = 'runoff_1m_nomask', 0 , 'socoefr', .false. , .true. , 'yearly' , '' , '' sn_s_rnf = 'runoffs' , 24 , 'rosaline', .true. , .true. , 'yearly' , '' , '' sn_t_rnf = 'runoffs' , 24 , 'rotemper', .true. , .true. , 'yearly' , '' , '' sn_dep_rnf = 'runoffs' , 0 , 'rodepth' , .false. , .true. , 'yearly' , '' , '' cn_dir = './' ! root directory for the location of the runoff files ln_rnf_emp = .false. ! runoffs included into precipitation field (T) or into a file (F) ln_rnf_mouth = .true. ! specific treatment at rivers mouths rn_hrnf = 10.e0 ! depth over which enhanced vertical mixing is used rn_avt_rnf = 2.e-3 ! value of the additional vertical mixing coef. [m2/s] rn_rfact = 1.e0 ! multiplicative factor for runoff ln_rnf_depth = .false. ! read in depth information for runoff ln_rnf_tem = .false. ! read in temperature information for runoff ln_rnf_sal = .false. ! read in salinity information for runoff / !----------------------------------------------------------------------- &namsbc_apr ! Atmospheric pressure used as ocean forcing or in bulk !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interpol. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_apr = 'patm' , -1 ,'somslpre', .true. , .true. , 'yearly' , '' , '' cn_dir = './' ! root directory for the location of the bulk files ln_ref_apr = .false. ! ref. pressure: global mean Patm (T) or a constant (F) / !----------------------------------------------------------------------- &namsbc_ssr ! surface boundary condition : sea surface restoring !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_sst = $SSTDMPFILE sn_sss = 'sss' , -1 , 'sss' , .true. , .true. , 'yearly' , '' , '' cn_dir = './' ! root directory for the location of the runoff files nn_sstr = $NAM_NN_SSTR ! add a retroaction term in the surface heat ! flux (=1 1TS; =2 2TS; =3 3TS ) or not (=0) nn_sssr = 2 ! add a damping term in the surface freshwater flux (=2) ! or to SSS only (=1) or no damping term (=0) rn_dqdt = $DQDT0 ! magnitude of the retroaction on temperature [W/m2/K] rn_dqdt1 = $DQDT1 ! magnitude of the retroaction on temperature [W/m2/K] 1st TS rn_dqdt2 = $DQDT2 ! magnitude of the retroaction on temperature [W/m2/K] 2nd TS rn_dqdt3 = $DQDT3 ! magnitude of the retroaction on temperature [W/m2/K] 3rd TS rn_deds = $DEDS0 ! magnitude of the damping on salinity [mm/day] lgth_2ts = $RML ! window for 2ts rlx running mean lgth_3ts = $RML1 ! window for 3rd ts rlx ln_sssr_bnd = .true. ! flag to bound erp term (associated with nn_sssr=2) rn_sssr_bnd = 4.e0 ! ABS(Max/Min) value of the damping erp term [mm/day] dqdt_limice = 0.1 ! restoring factors under ice [ratio of dqdt] / !----------------------------------------------------------------------- &namsbc_alb ! albedo parameters !----------------------------------------------------------------------- rn_cloud = 0.06 ! cloud correction to snow and ice albedo rn_albice = 0.53 ! albedo of melting ice in the arctic and antarctic rn_alphd = 0.80 ! coefficients for linear interpolation used to rn_alphc = 0.65 ! compute albedo between two extremes values rn_alphdi = 0.72 ! (Pyane, 1972) / !----------------------------------------------------------------------- &namsbc_prt ! perturbations to forcing (MAB 2014) !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_putau = 'putau' , 24 , 'utau' , .false. , .false., 'monthly' , '' , '' sn_pvtau = 'pvtau' , 24 , 'vtau' , .false. , .false., 'monthly' , '' , '' sn_pqns = 'pqns' , 24 , 'qns' , .false. , .false., 'monthly' , '' , '' sn_pqsr = 'pqsr' , 24 , 'qsr' , .false. , .false., 'monthly' , '' , '' sn_pemp = 'pemp' , 24 , 'emp' , .false. , .false., 'monthly' , '' , '' nn_putau = ${NAM_NN_PUTAU:=0} !0/1/2 for nothing/addpert/replace nn_pvtau = ${NAM_NN_PVTAU:=0} nn_pqns = ${NAM_NN_PQNS:=0} nn_pqsr = ${NAM_NN_PQSR:=0} nn_pemp = ${NAM_NN_PEMP:=0} cn_dir = './' ! root directory for the location of the pert files / !!====================================================================== !! *** Lateral boundary condition *** !!====================================================================== !! namlbc lateral momentum boundary condition !! namcla cross land advection !! namobc open boundaries parameters ("key_obc") !! namagrif agrif nested grid ( read by child model only ) ("key_agrif") !! nambdy Unstructured open boundaries ("key_bdy") !! namtide Tidal forcing at open boundaries ("key_bdy_tides") !!====================================================================== ! !----------------------------------------------------------------------- &namlbc ! lateral momentum boundary condition !----------------------------------------------------------------------- rn_shlat = 0. ! shlat = 0 ! 0 < shlat < 2 ! shlat = 2 ! 2 < shlat ! free slip ! partial slip ! no slip ! strong slip ln_vorlat = .false. ! consistency of vorticity boundary condition with analytical eqs. / !----------------------------------------------------------------------- &namcla ! cross land advection !----------------------------------------------------------------------- nn_cla = 0 ! advection between 2 ocean pts separates by land / !----------------------------------------------------------------------- &namobc ! open boundaries parameters ("key_obc") !----------------------------------------------------------------------- ln_obc_clim = .false. ! climatological obc data files (T) or not (F) ln_vol_cst = .true. ! impose the total volume conservation (T) or not (F) ln_obc_fla = .false. ! Flather open boundary condition nn_obcdta = 1 ! = 0 the obc data are equal to the initial state ! = 1 the obc data are read in 'obc.dta' files cn_obcdta = 'annual' ! set to annual if obc datafile hold 1 year of data ! set to monthly if obc datafile hold 1 month of data rn_dpein = 1. ! damping time scale for inflow at east open boundary rn_dpwin = 1. ! - - - west - - rn_dpnin = 1. ! - - - north - - rn_dpsin = 1. ! - - - south - - rn_dpeob = 3000. ! time relaxation (days) for the east open boundary rn_dpwob = 15. ! - - - west - - rn_dpnob = 3000. ! - - - north - - rn_dpsob = 15. ! - - - south - - rn_volemp = 1. ! = 0 the total volume change with the surface flux (E-P-R) ! = 1 the total volume remains constant / !----------------------------------------------------------------------- &namagrif ! AGRIF zoom ("key_agrif") !----------------------------------------------------------------------- nn_cln_update = 3 ! baroclinic update frequency ln_spc_dyn = .true. ! use 0 as special value for dynamics rn_sponge_tra = 2880. ! coefficient for tracer sponge layer [m2/s] rn_sponge_dyn = 2880. ! coefficient for dynamics sponge layer [m2/s] / !----------------------------------------------------------------------- &nam_tide ! tide parameters (#ifdef key_tide) !----------------------------------------------------------------------- ln_tide_pot = .true. ! use tidal potential forcing nb_harmo = 11 ! number of constituents used clname(1) = 'M2' ! name of constituent clname(2) = 'S2' clname(3) = 'N2' clname(4) = 'K1' clname(5) = 'O1' clname(6) = 'Q1' clname(7) = 'M4' clname(8) = 'K2' clname(9) = 'P1' clname(10) = 'Mf' clname(11) = 'Mm' / !----------------------------------------------------------------------- &nambdy ! unstructured open boundaries ("key_bdy") !----------------------------------------------------------------------- nb_bdy = 1 ! number of open boundary sets ln_coords_file = .true. ! =T : read bdy coordinates from file cn_coords_file = 'coordinates.bdy.nc' ! bdy coordinates files ln_mask_file = .false. ! =T : read mask from file cn_mask_file = '' ! name of mask file (if ln_mask_file=.TRUE.) nn_dyn2d = 2 ! boundary conditions for barotropic fields nn_dyn2d_dta = 3 ! = 0, bdy data are equal to the initial state ! = 1, bdy data are read in 'bdydata .nc' files ! = 2, use tidal harmonic forcing data from files ! = 3, use external data AND tidal harmonic forcing nn_dyn3d = 0 ! boundary conditions for baroclinic velocities nn_dyn3d_dta = 0 ! = 0, bdy data are equal to the initial state ! = 1, bdy data are read in 'bdydata .nc' files nn_tra = 1 ! boundary conditions for T and S nn_tra_dta = 1 ! = 0, bdy data are equal to the initial state ! = 1, bdy data are read in 'bdydata .nc' files nn_rimwidth = 10 ! width of the relaxation zone ln_vol = .false. ! total volume correction (see nn_volctl parameter) nn_volctl = 1 ! = 0, the total water flux across open boundaries is zero / !----------------------------------------------------------------------- &nambdy_dta ! open boundaries - external data ("key_bdy") !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interpol. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! bn_ssh = 'amm12_bdyT_u2d' , 24 , 'sossheig' , .true. , .false. , 'daily' , '' , '' bn_u2d = 'amm12_bdyU_u2d' , 24 , 'vobtcrtx' , .true. , .false. , 'daily' , '' , '' bn_v2d = 'amm12_bdyV_u2d' , 24 , 'vobtcrty' , .true. , .false. , 'daily' , '' , '' bn_u3d = 'amm12_bdyU_u3d' , 24 , 'vozocrtx' , .true. , .false. , 'daily' , '' , '' bn_v3d = 'amm12_bdyV_u3d' , 24 , 'vomecrty' , .true. , .false. , 'daily' , '' , '' bn_tem = 'amm12_bdyT_tra' , 24 , 'votemper' , .true. , .false. , 'daily' , '' , '' bn_sal = 'amm12_bdyT_tra' , 24 , 'vosaline' , .true. , .false. , 'daily' , '' , '' cn_dir = 'bdydta/' ln_full_vel = .false. / !----------------------------------------------------------------------- &nambdy_tide ! tidal forcing at open boundaries !----------------------------------------------------------------------- filtide = 'bdydta/amm12_bdytide_' ! file name root of tidal forcing files tide_cpt(1) ='Q1' ! names of tidal components used tide_cpt(2) ='O1' ! names of tidal components used tide_cpt(3) ='P1' ! names of tidal components used tide_cpt(4) ='S1' ! names of tidal components used tide_cpt(5) ='K1' ! names of tidal components used tide_cpt(6) ='2N2' ! names of tidal components used tide_cpt(7) ='MU2' ! names of tidal components used tide_cpt(8) ='N2' ! names of tidal components used tide_cpt(9) ='NU2' ! names of tidal components used tide_cpt(10) ='M2' ! names of tidal components used tide_cpt(11) ='L2' ! names of tidal components used tide_cpt(12) ='T2' ! names of tidal components used tide_cpt(13) ='S2' ! names of tidal components used tide_cpt(14) ='K2' ! names of tidal components used tide_cpt(15) ='M4' ! names of tidal components used tide_speed(1) = 13.398661 ! phase speeds of tidal components (deg/hour) tide_speed(2) = 13.943036 ! phase speeds of tidal components (deg/hour) tide_speed(3) = 14.958932 ! phase speeds of tidal components (deg/hour) tide_speed(4) = 15.000001 ! phase speeds of tidal components (deg/hour) tide_speed(5) = 15.041069 ! phase speeds of tidal components (deg/hour) tide_speed(6) = 27.895355 ! phase speeds of tidal components (deg/hour) tide_speed(7) = 27.968210 ! phase speeds of tidal components (deg/hour) tide_speed(8) = 28.439730 ! phase speeds of tidal components (deg/hour) tide_speed(9) = 28.512585 ! phase speeds of tidal components (deg/hour) tide_speed(10) = 28.984106 ! phase speeds of tidal components (deg/hour) tide_speed(11) = 29.528479 ! phase speeds of tidal components (deg/hour) tide_speed(12) = 29.958935 ! phase speeds of tidal components (deg/hour) tide_speed(13) = 30.000002 ! phase speeds of tidal components (deg/hour) tide_speed(14) = 30.082138 ! phase speeds of tidal components (deg/hour) tide_speed(15) = 57.968212 ! phase speeds of tidal components (deg/hour) ln_tide_date = .true. ! adjust tidal harmonics for start date of run / !!====================================================================== !! *** Bottom boundary condition *** !!====================================================================== !! nambfr bottom friction !! nambbc bottom temperature boundary condition !! nambbl bottom boundary layer scheme ("key_trabbl") !!====================================================================== ! !----------------------------------------------------------------------- &nambfr ! bottom friction !----------------------------------------------------------------------- nn_bfr = 2 ! type of bottom friction : = 0 : free slip, = 1 : linear friction ! = 2 : nonlinear friction rn_bfri1 = 4.e-4 ! bottom drag coefficient (linear case) rn_bfri2 = 1.e-3 ! bottom drag coefficient (non linear case) rn_bfeb2 = 2.5e-3 ! bottom turbulent kinetic energy background (m2/s2) ln_bfr2d = .false. ! horizontal variation of the bottom friction coef (read a 2D mask file ) rn_bfrien = 50. ! local multiplying factor of bfr (ln_bfr2d=T) ln_bfrimp = .false. ! implicit bottom friction (requires ln_zdfexp = .false. if true) / !----------------------------------------------------------------------- &nambbc ! bottom temperature boundary condition !----------------------------------------------------------------------- ln_trabbc = .false. ! Apply a geothermal heating at the ocean bottom nn_geoflx = 2 ! geothermal heat flux: = 0 no flux ! = 1 constant flux ! = 2 variable flux (read in geothermal_heating.nc in mW/m2) rn_geoflx_cst = 86.4e-3 ! Constant value of geothermal heat flux [W/m2] / !----------------------------------------------------------------------- &nambbl ! bottom boundary layer scheme !----------------------------------------------------------------------- nn_bbl_ldf = 1 ! diffusive bbl (=1) or not (=0) nn_bbl_adv = 1 ! advective bbl (=1/2) or not (=0) rn_ahtbbl = 1000. ! lateral mixing coefficient in the bbl [m2/s] rn_gambbl = 10. ! advective bbl coefficient [s] / !!====================================================================== !! Tracer (T & S ) namelists !!====================================================================== !! nameos equation of state !! namtra_adv advection scheme !! namtra_ldf lateral diffusion scheme !! namtra_dmp T & S newtonian damping !!====================================================================== ! !----------------------------------------------------------------------- &nameos ! ocean physical parameters !----------------------------------------------------------------------- nn_eos = 0 ! type of equation of state and Brunt-Vaisala frequency ! = 0, UNESCO (formulation of Jackett and McDougall (1994) and of McDougall (1987) ) ! = 1, linear: rho(T) = rau0 * ( 1.028 - ralpha * T ) ! = 2, linear: rho(T,S) = rau0 * ( rbeta * S - ralpha * T ) rn_alpha = 2.0e-4 ! thermal expension coefficient (nn_eos= 1 or 2) rn_beta = 7.7e-4 ! saline expension coefficient (nn_eos= 2) / !----------------------------------------------------------------------- &namtra_adv ! advection scheme for tracer !----------------------------------------------------------------------- ln_traadv_cen2 = .false. ! 2nd order centered scheme ln_traadv_tvd = .true. ! TVD scheme ln_traadv_muscl = .false. ! MUSCL scheme ln_traadv_muscl2 = .false. ! MUSCL2 scheme + cen2 at boundaries ln_traadv_ubs = .false. ! UBS scheme ln_traadv_qck = .false. ! QUICKEST scheme / !----------------------------------------------------------------------- &namtra_ldf ! lateral diffusion scheme for tracer !----------------------------------------------------------------------- ! ! Type of the operator : ln_traldf_lap = .true. ! laplacian operator ln_traldf_bilap = .false. ! bilaplacian operator ! ! Direction of action : ln_traldf_level = .false. ! iso-level ln_traldf_hor = .false. ! horizontal (geopotential) (require "key_ldfslp" when ln_sco=T) ln_traldf_iso = .true. ! iso-neutral (require "key_ldfslp") ln_traldf_grif = .false. ! griffies skew flux formulation (require "key_ldfslp") ln_traldf_gdia = .false. ! griffies operator strfn diagnostics (require "key_ldfslp") ln_triad_iso = .false. ! griffies operator calculates triads twice => pure lateral mixing in ML (require "key_ldfslp") ln_botmix_grif = .false. ! griffies operator with lateral mixing on bottom (require "key_ldfslp") ! Coefficient rn_aht_0 = 1000.0 ! horizontal eddy diffusivity for tracers [m2/s] rn_ahtb_0 = 0. ! background eddy diffusivity for ldf_iso [m2/s] rn_aeiv_0 = 1000.0 ! eddy induced velocity coefficient [m2/s] (require "key_traldf_eiv") / !----------------------------------------------------------------------- &namtra_dmp ! tracer: T & S newtonian damping ('key_tradmp') !----------------------------------------------------------------------- ln_tradmp = .true. ! add a damping termn (T) or not (F) ln_tradmp_sfc = ${LN_TRADMP_SFC:=false} ! Extend 3D damping to surface layer. nn_hdmp = $NAM_HDMP ! horizontal shape =-1, damping in Med and Red Seas only ! =XX, damping poleward of XX degrees (XX>=0) ! + F(distance-to-coast) + Red and Med Seas nn_zdmp = ${NAM_ZDMP:=0} ! vertical shape =0 damping throughout the water column ! =1 no damping in the mixing layer (kz criteria) ! =2 no damping in the mixed layer (rho crieria) rn_surf = $NAM_SDMP ! surface time scale of damping [days] rn_bot = $NAM_BDMP ! bottom time scale of damping [days] rn_dep = 800. ! depth of transition between rn_surf and rn_bot [meters] rn_dmp_width = ${RN_DMP_WIDTH:=10.} ! Width of transition used with NN_HDMP>0 [degrees latitude] nn_file = 0 ! create a damping.coeff NetCDF file (=1) or not (=0) / !!====================================================================== !! *** Dynamics namelists *** !!====================================================================== !! namdyn_adv formulation of the momentum advection !! namdyn_vor advection scheme !! namdyn_hpg hydrostatic pressure gradient !! namdyn_spg surface pressure gradient (CPP key only) !! namdyn_ldf lateral diffusion scheme !!====================================================================== ! !----------------------------------------------------------------------- &namdyn_adv ! formulation of the momentum advection !----------------------------------------------------------------------- ln_dynadv_vec = .true. ! vector form (T) or flux form (F) ln_dynadv_cen2= .false. ! flux form - 2nd order centered scheme ln_dynadv_ubs = .false. ! flux form - 3rd order UBS scheme / !----------------------------------------------------------------------- &namdyn_vor ! option of physics/algorithm (not control by CPP keys) !----------------------------------------------------------------------- ln_dynvor_ene = .false. ! enstrophy conserving scheme ln_dynvor_ens = .false. ! energy conserving scheme ln_dynvor_mix = .false. ! mixed scheme ln_dynvor_een = .true. ! energy & enstrophy scheme / !----------------------------------------------------------------------- &namdyn_hpg ! Hydrostatic pressure gradient option !----------------------------------------------------------------------- ln_hpg_zco = .false. ! z-coordinate - full steps ln_hpg_zps = .true. ! z-coordinate - partial steps (interpolation) ln_hpg_sco = .false. ! s-coordinate (standard jacobian formulation) ln_hpg_djc = .false. ! s-coordinate (Density Jacobian with Cubic polynomial) ln_hpg_prj = .false. ! s-coordinate (Pressure Jacobian scheme) ln_dynhpg_imp = .true. ! time stepping: semi-implicit time scheme (T) ! centered time scheme (F) / !----------------------------------------------------------------------- !namdyn_spg ! surface pressure gradient (CPP key only) !----------------------------------------------------------------------- ! ! explicit free surface ("key_dynspg_exp") ! ! filtered free surface ("key_dynspg_flt") ! ! split-explicit free surface ("key_dynspg_ts") !----------------------------------------------------------------------- &namdyn_ldf ! lateral diffusion on momentum !----------------------------------------------------------------------- ! ! Type of the operator : ln_dynldf_lap = .true. ! laplacian operator ln_dynldf_bilap = .false. ! bilaplacian operator ! ! Direction of action : ln_dynldf_level = .false. ! iso-level ln_dynldf_hor = .true. ! horizontal (geopotential) (require "key_ldfslp" in s-coord.) ln_dynldf_iso = .false. ! iso-neutral (require "key_ldfslp") ! ! Coefficient rn_ahm_0_lap = 10000.0 ! horizontal laplacian eddy viscosity [m2/s] rn_ahm_0_lap_eq = 2000.0 ! horizontal laplacian eddy viscosity [m2/s] rn_ahmb_0 = 0. ! background eddy viscosity for ldf_iso [m2/s] rn_ahm_0_blp = 0. ! horizontal bilaplacian eddy viscosity [m4/s] / !!====================================================================== !! Tracers & Dynamics vertical physics namelists !!====================================================================== !! namzdf vertical physics !! namzdf_ric richardson number dependent vertical mixing ("key_zdfric") !! namzdf_tke TKE dependent vertical mixing ("key_zdftke") !! namzdf_kpp KPP dependent vertical mixing ("key_zdfkpp") !! namzdf_ddm double diffusive mixing parameterization ("key_zdfddm") !! namzdf_tmx tidal mixing parameterization ("key_zdftmx") !!====================================================================== ! !----------------------------------------------------------------------- &namzdf ! vertical physics !----------------------------------------------------------------------- rn_avm0 = 1.2e-4 ! vertical eddy viscosity [m2/s] (background Kz if not "key_zdfcst") rn_avt0 = 1.2e-5 ! vertical eddy diffusivity [m2/s] (background Kz if not "key_zdfcst") nn_avb = 0 ! profile for background avt & avm (=1) or not (=0) nn_havtb = 0 ! horizontal shape for avtb (=1) or not (=0) ln_zdfevd = .true. ! enhanced vertical diffusion (evd) (T) or not (F) nn_evdm = 1 ! evd apply on tracer (=0) or on tracer and momentum (=1) rn_avevd = 10. ! evd mixing coefficient [m2/s] ln_zdfnpc = .false. ! Non-Penetrative Convective algorithm (T) or not (F) nn_npc = 1 ! frequency of application of npc nn_npcp = 365 ! npc control print frequency ln_zdfexp = .false. ! time-stepping: split-explicit (T) or implicit (F) time stepping nn_zdfexp = 3 ! number of sub-timestep for ln_zdfexp=T / !----------------------------------------------------------------------- &namzdf_ric ! richardson number dependent vertical diffusion ("key_zdfric" ) !----------------------------------------------------------------------- rn_avmri = 100.e-4 ! maximum value of the vertical viscosity rn_alp = 5. ! coefficient of the parameterization nn_ric = 2 ! coefficient of the parameterization rn_ekmfc = 0.7 ! Factor in the Ekman depth Equation rn_mldmin = 1.0 ! minimum allowable mixed-layer depth estimate (m) rn_mldmax =1000.0 ! maximum allowable mixed-layer depth estimate (m) rn_wtmix = 10.0 ! vertical eddy viscosity coeff [m2/s] in the mixed-layer rn_wvmix = 10.0 ! vertical eddy diffusion coeff [m2/s] in the mixed-layer ln_mldw = .true. ! Flag to use or not the mized layer depth param. / !----------------------------------------------------------------------- &namzdf_tke ! turbulent eddy kinetic dependent vertical diffusion ("key_zdftke") !----------------------------------------------------------------------- rn_ediff = ${NAM_RN_EDIFF:-0.1} ! coef. for vertical eddy coef. (avt=rn_ediff*mxl*sqrt(e) ) rn_ediss = ${NAM_RN_EDISS:-0.7} ! coef. of the Kolmogoroff dissipation rn_ebb = ${NAM_RN_EBB:-67.83} ! coef. of the surface input of tke (=67.83 suggested when ln_mxl0=T) ln_ebbice = ${NAM_LN_EBBICE:-true} ! modify tke surface input under ice (F) rn_ebbice = ${NAM_RN_EBBICE:-20} ! coef. of the surface input of tke under ice rn_emin = 1.e-6 ! minimum value of tke [m2/s2] rn_emin0 = 1.e-4 ! surface minimum value of tke [m2/s2] nn_mxl = ${NAM_NN_MXL:-3} ! mixing length: = 0 bounded by the distance to surface and bottom ! = 1 bounded by the local vertical scale factor ! = 2 first vertical derivative of mixing length bounded by 1 ! = 3 as =2 with distinct disspipative an mixing length scale nn_pdl = ${NAM_NN_PDL:-1} ! Prandtl number function of richarson number (=1, avt=pdl(Ri)*avm) or not (=0, avt=avm) ln_mxl0 = .true. ! surface mixing length scale = F(wind stress) (T) or not (F) rn_mxl0 = 0.01 ! surface buoyancy lenght scale minimum value ln_lc = .true. ! Langmuir cell parameterisation (Axell 2002) rn_lc = 0.15 ! coef. associated to Langmuir cells nn_etau = ${NAM_NN_ETAU:-1} ! penetration of tke below the mixed layer (ML) due to internal & intertial waves ! = 0 no penetration ! = 1 add a tke source below the ML ! = 2 add a tke source just at the base of the ML ! = 3 as = 1 applied on HF part of the stress ("key_coupled") rn_efr = ${NAM_RN_EFR:-0.05} ! fraction of surface tke value which penetrates below the ML (nn_etau=1 or 2) nn_htau = ${NAM_NN_HTAU:-0} ! type of exponential decrease of tke penetration below the ML ! = 0 constant 10 m length scale ! = 1 0.5m at the equator to 30m poleward of 40 degrees ! = 2 5m at eq to 60m poleward of 40 degrees ! = 3 proportional to SWH rn_whtauscl = ${NAM_RN_WHTAUSCL:-4} ! SWH scalign for htau=3 rn_whtaumin = ${NAM_RN_WHTAUMIN:-1} ! minimum htau (nn_htau=3) rn_delta_0 = ${NAM_RN_DELTA_0:-0.19} ! Strength of background diffusion rn_alpha_m = ${NAM_RN_ALPHA_M:-1.} rn_alpha_h = ${NAM_RN_ALPHA_H:-1.4} rn_beta_m = ${NAM_RN_BETA_M:-14.} rn_beta_h = ${NAM_RN_BETA_H:-11.2} / !------------------------------------------------------------------------ &namzdf_kpp ! K-Profile Parameterization dependent vertical mixing ("key_zdfkpp", and optionally: !------------------------------------------------------------------------ "key_kppcustom" or "key_kpplktb") ln_kpprimix = .true. ! shear instability mixing rn_difmiw = 1.0e-04 ! constant internal wave viscosity [m2/s] rn_difsiw = 0.1e-04 ! constant internal wave diffusivity [m2/s] rn_riinfty = 0.8 ! local Richardson Number limit for shear instability rn_difri = 0.0050 ! maximum shear mixing at Rig = 0 [m2/s] rn_bvsqcon = -0.01e-07 ! Brunt-Vaisala squared for maximum convection [1/s2] rn_difcon = 1. ! maximum mixing in interior convection [m2/s] nn_avb = 0 ! horizontal averaged (=1) or not (=0) on avt and amv nn_ave = 1 ! constant (=0) or profile (=1) background on avt / !----------------------------------------------------------------------- &namzdf_gls ! GLS vertical diffusion ("key_zdfgls") !----------------------------------------------------------------------- rn_emin = 1.e-6 ! minimum value of e [m2/s2] rn_epsmin = 1.e-12 ! minimum value of eps [m2/s3] ln_length_lim = .true. ! limit on the dissipation rate under stable stratification (Galperin et al., 1988) rn_clim_galp = 0.53 ! galperin limit ln_crban = .true. ! Use Craig & Banner (1994) surface wave mixing parametrisation ln_sigpsi = .true. ! Activate or not Burchard 2001 mods on psi schmidt number in the wb case rn_crban = 100. ! Craig and Banner 1994 constant for wb tke flux rn_charn = 70000. ! Charnock constant for wb induced roughness length nn_tkebc_surf = 1 ! surface tke condition (0/1/2=Dir/Neum/Dir Mellor-Blumberg) nn_tkebc_bot = 1 ! bottom tke condition (0/1=Dir/Neum) nn_psibc_surf = 1 ! surface psi condition (0/1/2=Dir/Neum/Dir Mellor-Blumberg) nn_psibc_bot = 1 ! bottom psi condition (0/1=Dir/Neum) nn_stab_func = 2 ! stability function (0=Galp, 1= KC94, 2=CanutoA, 3=CanutoB) nn_clos = 1 ! predefined closure type (0=MY82, 1=k-eps, 2=k-w, 3=Gen) / !----------------------------------------------------------------------- &namzdf_ddm ! double diffusive mixing parameterization ("key_zdfddm") !----------------------------------------------------------------------- rn_avts = 1.e-4 ! maximum avs (vertical mixing on salinity) rn_hsbfr = 1.6 ! heat/salt buoyancy flux ratio / !----------------------------------------------------------------------- &namzdf_tmx ! tidal mixing parameterization ("key_zdftmx") !----------------------------------------------------------------------- rn_htmx = 500. ! vertical decay scale for turbulence (meters) rn_n2min = 1.e-8 ! threshold of the Brunt-Vaisala frequency (s-1) rn_tfe = 0.333 ! tidal dissipation efficiency rn_me = 0.2 ! mixing efficiency ln_tmx_itf = .true. ! ITF specific parameterisation rn_tfe_itf = 1. ! ITF tidal dissipation efficiency / !!====================================================================== !! *** Miscellaneous namelists *** !!====================================================================== !! nammpp Massively Parallel Processing ("key_mpp_mpi") !! namctl Control prints & Benchmark !! namsol elliptic solver / island / free surface !!====================================================================== ! !----------------------------------------------------------------------- &namsol ! elliptic solver / island / free surface !----------------------------------------------------------------------- nn_solv = 1 ! elliptic solver: =1 preconditioned conjugate gradient (pcg) ! =2 successive-over-relaxation (sor) nn_sol_arp = 0 ! absolute/relative (0/1) precision convergence test rn_eps = 1.e-6 ! absolute precision of the solver nn_nmin = 300 ! minimum of iterations for the SOR solver nn_nmax = 2000 ! maximum of iterations for the SOR solver nn_nmod = 10 ! frequency of test for the SOR solver rn_resmax = 1.e-10 ! absolute precision for the SOR solver rn_sor = 1.973 ! optimal coefficient for SOR solver (to be adjusted with the domain) / !----------------------------------------------------------------------- &nammpp ! Massively Parallel Processing ("key_mpp_mpi") !----------------------------------------------------------------------- cn_mpi_send = 'I' ! mpi send/recieve type ='S', 'B', or 'I' for standard send, ! buffer blocking send or immediate non-blocking sends, resp. nn_buffer = 0 ! size in bytes of exported buffer ('B' case), 0 no exportation jpni = $NEMO_NPROCX ! jpni number of processors following i (set automatically if < 1) jpnj = $NEMO_NPROCY ! jpnj number of processors following j (set automatically if < 1) jpnij = $NEMO_NPROC ! jpnij number of local domains (set automatically if < 1) ln_nnogather = .true. ln_lbcmap = ${LN_LBCMAP:-.TRUE.} / !----------------------------------------------------------------------- &namctl ! Control prints & Benchmark !----------------------------------------------------------------------- ln_ctl = .false. ! trends control print (expensive!) nn_print = 0 ! level of print (0 no extra print) nn_ictls = 0 ! start i indice of control sum (use to compare mono versus nn_ictle = 0 ! end i indice of control sum multi processor runs nn_jctls = 0 ! start j indice of control over a subdomain) nn_jctle = 0 ! end j indice of control nn_isplt = 1 ! number of processors in i-direction nn_jsplt = 1 ! number of processors in j-direction nn_bench = 0 ! Bench mode (1/0): CAUTION use zero except for bench ! (no physical validity of the results) nn_timing = 1 ! timing by routine activated (=1) creates timing.output file, or not (=0) ln_mpiprt = .false. ! Non-masters tasks write ocean.output_... ln_smslabel= $NAM_LN_SMSLABEL ! Communicate with SMS. cn_smslabel = "${CN_SMSLABEL:-xlabel}" nn_smsfrq = $NAM_NN_SMSFRQ ! SMS communication frequency (time steps) ln_diadebug = .false. ! Grid point diagnostic output (fill namdiadebug) ln_sglread = ${NAM_LN_SGLREAD:-.true.} ln_sglreadfbm = ${NAM_LN_SGLREADFBM:-.true.} ln_sglwrite = ${LNSGLWRITE:-.false.} ln_sglwritefbm = ${LNSGLWRITEFBM:-.false.} ln_timeout = ${LNTIMEOUT:=.true.} ln_timeoutflush = ${LNTIMEOUTFLUSH:=.true.} / !----------------------------------------------------------------------- &namcfg ! parameters of the configuration !----------------------------------------------------------------------- cp_cfg = "orca" ! name of the configuration cp_cfz = "normal" ! zoom jp_cfg = 1 ! resolution of the configuration jpidta = 362 ! 1st lateral dimension ( >= jpi ) jpjdta = 292 ! 2nd " " ( >= jpj ) jpkdta = 75 ! number of levels ( >= jpk ) jpiglo = 362 ! 1st dimension of global domain --> i =jpidta jpjglo = 292 ! 2nd - - --> j =jpjdta jpizoom = 1 ! left bottom (i,j) indices of the zoom jpjzoom = 1 ! in data domain indices jperio = 6 ! lateral cond. type (between 0 and 6) ln_trabbl = .false. ! true=key_trabbl nn_ldfdyn = 3 ! 2=key_dynldf_c2d, 3=key_dynldf_c3d ln_zdfddm = .false. ! true=key_zdfddm / !!====================================================================== !! *** Diagnostics namelists *** !!====================================================================== !! namnc4 netcdf4 chunking and compression settings ("key_netcdf4") !! namtrd dynamics and/or tracer trends ("key_trddyn","key_trdtra","key_trdmld") !! namflo float parameters ("key_float") !! namptr Poleward Transport Diagnostics !! namhsb Heat and salt budgets !!====================================================================== ! !----------------------------------------------------------------------- &namnc4 ! netcdf4 chunking and compression settings ("key_netcdf4") !----------------------------------------------------------------------- nn_nchunks_i= ${NC4CHUNKX:-4} ! number of chunks in i-dimension nn_nchunks_j= ${NC4CHUNKY:-4} ! number of chunks in j-dimension nn_nchunks_k= ${NC4CHUNKZ:-75} ! number of chunks in k-dimension ! setting nn_nchunks_k = jpk will give a chunk size of 1 in the vertical which ! is optimal for postprocessing which works exclusively with horizontal slabs ln_nc4zip = ${NC4REST:-.false.} ! (T) use netcdf4 chunking and compression ! (F) ignore chunking information and produce netcdf3-compatible files / !----------------------------------------------------------------------- &namtrd ! diagnostics on dynamics and/or tracer trends ("key_trddyn" and/or "key_trdtra") ! ! or mixed-layer trends or barotropic vorticity ("key_trdmld" or "key_trdvor") !----------------------------------------------------------------------- nn_trd = 365 ! time step frequency dynamics and tracers trends nn_ctls = 0 ! control surface type in mixed-layer trends (0,1 or n /seconds ; =86400. -> /day) cn_trdrst_in = "restart_mld" ! suffix of ocean restart name (input) cn_trdrst_out = "restart_mld" ! suffix of ocean restart name (output) ln_trdmld_restart = .false. ! restart for ML diagnostics ln_trdmld_instant = .false. ! flag to diagnose trends of instantantaneous or mean ML T/S / !----------------------------------------------------------------------- &namflo ! float parameters ("key_float") !----------------------------------------------------------------------- jpnfl = 1 ! total number of floats during the run jpnnewflo = 0 ! number of floats for the restart ln_rstflo = .false. ! float restart (T) or not (F) nn_writefl = 75 ! frequency of writing in float output file nn_stockfl = 5475 ! frequency of creation of the float restart file ln_argo = .false. ! Argo type floats (stay at the surface each 10 days) ln_flork4 = .false. ! trajectories computed with a 4th order Runge-Kutta (T) ! or computed with Blanke' scheme (F) ln_ariane = .true. ! Input with Ariane tool convention(T) ln_flo_ascii = .true. ! Output with Ariane tool netcdf convention(F) or ascii file (T) / !----------------------------------------------------------------------- &namptr ! Poleward Transport Diagnostic !----------------------------------------------------------------------- ln_diaptr = .false. ! Poleward heat and salt transport (T) or not (F) ln_diaznl = .true. ! Add zonal means and meridional stream functions ln_subbas = .true. ! Atlantic/Pacific/Indian basins computation (T) or not ! (orca configuration only, need input basins mask file named "subbasins.nc" ln_ptrcomp = .true. ! Add decomposition : overturning nn_fptr = 1 ! Frequency of ptr computation [time step] nn_fwri = 15 ! Frequency of ptr outputs [time step] / !----------------------------------------------------------------------- &namhsb ! Heat and salt budgets !----------------------------------------------------------------------- ln_diahsb = .false. ! check the heat and salt budgets (T) or not (F) / !----------------------------------------------------------------------- &nam_diaharm ! Harmonic analysis of tidal constituents ('key_diaharm') !----------------------------------------------------------------------- nit000_han = 1 ! First time step used for harmonic analysis nitend_han = 75 ! Last time step used for harmonic analysis nstep_han = 15 ! Time step frequency for harmonic analysis nb_ana = 2 ! Number of harmonics to analyse tname(1) = 'M2' ! Name of tidal constituents tname(2) = 'K1' / !----------------------------------------------------------------------- &namdct ! transports through sections !----------------------------------------------------------------------- nn_dct = 15 ! time step frequency for transports computing nn_dctwri = 15 ! time step frequency for transports writing nn_secdebug = 112 ! 0 : no section to debug ! -1 : debug all section ! 0 < n : debug section number n / !!====================================================================== !! *** Observation & Assimilation namelists *** !!====================================================================== !! namobs observation and model comparison ('key_diaobs') !! nam_asminc assimilation increments ('key_asminc') !!====================================================================== ! !----------------------------------------------------------------------- &namobs ! observation usage switch ('key_diaobs') !----------------------------------------------------------------------- cn_oceobs_out_path="${CN_OCEOBS_OUT_PATH:-./}" ln_t3d = $LPRO ! Logical switch for T profile observations ln_s3d = $LPRO ! Logical switch for S profile observations ln_ena = .false. ! Logical switch for ENACT insitu data set ! ! ln_cor Logical switch for Coriolis insitu data set ln_profb = $LPRO ! Logical switch for feedback insitu data set ln_sla = $LSLA ! Logical switch for SLA observations ln_sladt = .false. ! Logical switch for AVISO SLA data ln_slafb = $LSLA ! Logical switch for feedback SLA data ! ln_ssh Logical switch for SSH observations ln_sst = $LSST ! Logical switch for SST observations ln_sstbias = .false. ln_grdsst = ${NAM_LN_GRDSST:-.true.} ! ln_grdsst Logical switch for gridded observations ! ln_ghrsst Logical switch for GHRSST observations ln_sstfb = ${NAM_LN_SSTFB:-.false.} ! Logical switch for feedback SST data sstfbfiles = ${NAM_SSTFBFILES:-''} ! ln_sss Logical switch for SSS observations ! ln_seaice Logical switch for Sea Ice observations ! ln_vel3d Logical switch for velocity observations ! ln_velavcur Logical switch for velocity daily av. cur. ! ln_velhrcur Logical switch for velocity high freq. cur. ! ln_velavadcp Logical switch for velocity daily av. ADCP ! ln_velhradcp Logical switch for velocity high freq. ADCP ! ln_velfb Logical switch for feedback velocity data ! ln_grid_global Global distribtion of observations ! ln_grid_search_lookup Logical switch for obs grid search w/lookup table ! grid_search_file Grid search lookup file header ! enactfiles ENACT input observation file names ! coriofiles Coriolis input observation file name ! ! profbfiles: Profile feedback input observation file name profbfiles = $NPROFFILES ln_profb_enatim = .true. ! ln_profb_enatim Enact feedback input time setting switch ! slafilesact Active SLA input observation file name ! slafilespas Passive SLA input observation file name ! ! slafbfiles: Feedback SLA input observation file nam slafbfiles = $NSLAFILES ! sstfiles GHRSST input observation file name ! ! sstfbfiles: Feedback SST input observation file name ! seaicefiles Sea Ice input observation file name ! velavcurfiles Vel. cur. daily av. input file name ! velhvcurfiles Vel. cur. high freq. input file name ! velavadcpfiles Vel. ADCP daily av. input file name ! velhvadcpfiles Vel. ADCP high freq. input file name ! velfbfiles Vel. feedback input observation file name ! dobsini Initial date in window YYYYMMDD.HHMMSS ! dobsend Final date in window YYYYMMDD.HHMMSS ! n1dint Type of vertical interpolation method ! n2dint Type of horizontal interpolation method ! ln_nea Rejection of observations near land switch nmsshc = 1 ! MSSH correction scheme ! mdtcorr MDT correction ! mdtcutoff MDT cutoff for computed correction ln_altbias = .false. ! Logical switch for alt bias ln_ignmis = .true. ! Logical switch for ignoring missing files ! endailyavtypes ENACT daily average types ln_grid_global = .true. ln_grid_search_lookup = $GRIDLOOKUP ln_velfb = $LCUR ln_vel3d = $LCUR ln_vel3dw = ${LCURW:-false} velfbfiles = $CURFBDATA ln_velfb_av = $CURFBAVG ln_vel2d = ${LCURSURF:-.false.} velfb2dfiles = ${CURSURFFBDATA:-\"\"} n1dint = 1 n2dint = 3 ln_nea = .true. mdtcutoff = 65.0 mdtcorr = 1.61 dobsini = $NDATE0 dobsend = ${OBSWINEND:-$NDATEND} ln_profb_ena = $LNPROFBENA ln_profb_enatim = $LNPROFBENATIM ln_seaice = $LNSEAICE ln_grdseaice = $LNGRDSEAICE ln_seaicefb = $LNSEAICEFB grdseaicename = 'ice_cover_yYYYYmMM.nc' seaicefbfiles = ${NAM_SEAICEFILES:-''} nicethin = ${NAM_NICETHIN:-1} ! Thinning factor for reading gridded seaice obs ln_seaicepos = ${LN_SEAICEPOS:=.FALSE.} ! Logical switch for seaice gridded obs perturbation iceprobseed = ${ICEPROBSEED:-0} ! Seed for seaice obs perturbation ln_obsmpppack = ${LN_OBSMPPPACK:=.TRUE.} / !----------------------------------------------------------------------- &nam_asminc ! assimilation increments ('key_asminc') !----------------------------------------------------------------------- ln_bkgwri = $LBKGWRI ! Logical switch for writing out background state ln_trainc = $LTRAINC ! Logical switch for applying tracer increments ln_dyninc = $LDYNINC ! Logical switch for applying velocity increments ln_sshinc = $LSSHINC ! Logical switch for applying SSH increments ln_seaiceinc = $LSEAICEINC ! Logical switch for applying seaice increments ln_asmdin = $LASMDIN ! Logical switch for Direct Initialization (DI) ln_asmiau = $LASMIAU ! Logical switch for Incremental Analysis Updating (IAU) nitbkg = 0 ! Timestep of background in [0,nitend-nit000-1] nitdin = 0 ! Timestep of background for DI in [0,nitend-nit000-1] nitiaustr = 1 ! Timestep of start of IAU interval in [0,nitend-nit000-1] nitiaufin = $NITIAUFIN ! Timestep of end of IAU interval in [0,nitend-nit000-1] niaufn = 0 ! Type of IAU weighting function ln_salfix = .false. ! Logical switch for ensuring that the sa > salfixmin salfixmin = -9999 ! Minimum salinity after applying the increments nn_divdmp = ${NN_DIVDMP:=0} ! Number of iterations of divergence damping operator / &namtrj cn_dirtrj = 'tam_trajectory' ln_trjhand = .FALSE. nn_ittrjfrq = 1 ln_trj_spl = .TRUE. / !----------------------------------------------------------------------- &nambias ! Parameters for bias corrections #ifdef key_bias) !----------------------------------------------------------------------- ln_bias = $LN_BIAS ! activate bias correction ln_bias_asm = $BIAS_ASM ! use assim bias ln_bias_rlx = .FALSE. ! use clim-relax bias ln_bias_ofl = $LN_BIAS_OFL ! use off-line bias ln_bias_ts_app=${LN_BIAS_TS_APP:=.TRUE.} ! apply bias to Temp/Sal directly ln_bias_pc_app=${LN_BIAS_PC_APP:=.TRUE.} ! apply bias to pressure gradient cn_bias_tot = 'bias_tot.nc' !file name with bias file (restart) cn_bias_asm = 'bias_asm.nc' !file name " " from assim ! dir and structures for offline bias (using fldread conventions) cn_dir = './' sn_tbias_ofl= 'tbias_ofl', -1,'tbias', .true., .true., 'yearly' sn_sbias_ofl= 'sbias_ofl', -1,'sbias', .true., .true., 'yearly' bias_time_unit_asm = $BIASTIMEUNITASM ! time unit of asm bias fb_t_asm = ${RN_FB_T_ASM:=0.02} ! partition of total bias for T/S fb_t_rlx = 1. ! " " " " in T/S fb_t_ofl = ${RN_FB_T_OFL:=.1} fb_p_rlx = 1. fb_p_asm = ${RN_FB_P_ASM:=0.3} fb_p_ofl = ${RN_FB_P_OFL:=1.} nn_inertial = $NN_INERTIAL !0/1/2 0/sin(lat)**2/gausian gphit0 = ${RN_GPHIT0:=10.} !length for guassian tappering fctamp = ${RN_FCTAMP:=10.} eft_rlx = 1800. ! efolding time for rlx bias estimation eft_asm = ${RN_EFT_ASM:=1800.} ! efolding time for asm bias estimation 5y t_rlx_upd = 0.05 ! update fct rlx bias " (0. -> 1.) t_asm_upd = ${RN_T_ASM_UPD:=0.05} ! update fct assim bias " (0. -> 1.) lrst_biasr =$LRST_BIASR !force to read bias file at first time step capN2val = ${CAPN2VAL:=-1} !if larger than 0, cap N2 min val (~1.e-6) / !----------------------------------------------------------------------- &namsbc_wave ! External fields from wave model !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_cdg = 'cdww' , ${FREQWAM:-6} , 'cdww' , ${NAMCDWWINT:-.false.} , .false., 'monthly' , '' , '' ! cn_dir_cdg = './' ! root directory for the location of drag coefficient files / !----------------------------------------------------------------------- &namsbc_waveparlim !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_strn = 'istr' , 6 , 'icestrain' , .true. , .false. , 'monthly' , '' , '' cn_dir_waveparlim = './' ! root directory for the location of the ECWAM files / !----------------------------------------------------------------------- &namdyn_nept ! Neptune effect (simplified: lateral and vertical diffusions removed) !----------------------------------------------------------------------- ! Suggested lengthscale values are those of Eby & Holloway (1994) for a coarse model ln_neptsimp = .false. ! yes/no use simplified neptune ln_smooth_neptvel = .false. ! yes/no smooth zunep, zvnep rn_tslse = 1.2e4 ! value of lengthscale L at the equator rn_tslsp = 3.0e3 ! value of lengthscale L at the pole ! Specify whether to ramp down the Neptune velocity in shallow ! water, and if so the depth range controlling such ramping down ln_neptramp = .true. ! ramp down Neptune velocity in shallow water rn_htrmin = 100.0 ! min. depth of transition range rn_htrmax = 200.0 ! max. depth of transition range / !----------------------------------------------------------------------- &namtam ! TAM trajactory !----------------------------------------------------------------------- cn_dirtrj = 'tam_trajectory' ln_trjwri = .FALSE. nn_ittrjfrq = 1 ln_trj_spl = .TRUE. / !----------------------------------------------------------------------- &namsbc_wavepar ! namsbc_wavepar parameters from wave model (CCC not identical to namsbc_wave) !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_ust = 'ust' , ${FREQWAM:-6} , 'ust' , .false. , .false. , 'monthly' , '' , '' sn_vst = 'vst' , ${FREQWAM:-6} , 'vst' , .false. , .false. , 'monthly' , '' , '' sn_swh = 'swh' , ${FREQWAM:-6} , 'swh' , .false. , .false. , 'monthly' , '' , '' sn_mwp = 'mwp' , ${FREQWAM:-6} , 'mwp' , .false. , .false. , 'monthly' , '' , '' sn_wspd = 'wspd' , ${FREQWAM:-6} , 'wspd' , .false. , .false. , 'monthly' , '' , '' sn_phioc = 'phioc' , ${FREQWAM:-6} , 'phioc' , .false. , .false. , 'monthly' , '' , '' sn_tauoc = 'tauoc' , ${FREQWAM:-6} , 'tauoc' , .false. , .false. , 'monthly' , '' , '' cn_dir_wavepar = './' ! root directory for the location of the ECWAM files / !----------------------------------------------------------------------- &namdebug jpig1=139 jpig2=142 jpjg1=74 jpjg2=77 jpkg1=1 jpkg2=10 kt1=10 kt2=20 / !----------------------------------------------------------------------- eof_namelist elif [[ ${OUT_GRID}_Z${OUT_LEVELS} = "ORCA1_Z46" ]]; then NAM_LN_SMSLABEL=${NAM_LN_SMSLABEL:=.false.} NAM_NN_SMSFREQ=${NAM_NN_SMSFRQ:=24} cat >namelist<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !! NEMO/OPA : 1 - run manager (namrun) !! namelists 2 - Domain (namzgr, namzgr_sco, namdom, namtsd) !! 3 - Surface boundary (namsbc, namsbc_ana, namsbc_flx, namsbc_clio, namsbc_core !! namsbc_cpl, namtra_qsr, namsbc_rnf, !! namsbc_apr, namsbc_ssr, namsbc_alb, !! namsbc_prt) !! 4 - lateral boundary (namlbc, namcla, namobc, namagrif, nambdy, nambdy_tide) !! 5 - bottom boundary (nambfr, nambbc, nambbl) !! 6 - Tracer (nameos, namtra_adv, namtra_ldf, namtra_dmp) !! 7 - dynamics (namdyn_adv, namdyn_vor, namdyn_hpg, namdyn_spg, namdyn_ldf) !! 8 - Verical physics (namzdf, namzdf_ric, namzdf_tke, namzdf_kpp, namzdf_ddm, namzdf_tmx) !! 9 - diagnostics (namnc4, namtrd, namspr, namflo, namptr, namhsb) !! 10 - miscellaneous (namsol, nammpp, nammpp_dyndist, namctl) !! 11 - Obs & Assim (namobs, nam_asminc) !!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !!====================================================================== !! *** Run management namelists *** !!====================================================================== !! namrun parameters of the run !!====================================================================== ! !----------------------------------------------------------------------- &namrun ! parameters of the run !----------------------------------------------------------------------- nn_no = $NCYC ! job number cn_exp = "$EXPVER" ! experience name nn_it000 = $NIT000 ! first time step nn_itend = $NITEND ! last time step (std 5475) nn_date0 = $NDATE0 ! initial calendar date yymmdd (used if nn_rstctl=1) nn_itfile = ${NAM_NN_ITFILE:=-1} nn_leapy = 1 ! Leap year calendar (1) or not (0) ln_rstart = $LN_RESTART ! start from rest (F) or from a restart file (T) nn_rstctl = 0 ! restart control = 0 nn_it000 is not compared to the restart file value ! = 1 use nn_date0 in namelist (not the value in the restart file) ! = 2 calendar parameters read in the restart file cn_ocerst_in = "restart" ! suffix of ocean restart name (input) cn_ocerst_out = "restart" ! suffix of ocean restart name (output) nn_istate = 0 ! output the initial state (1) or not (0) nn_stock = $NSTOCK ! frequency of creation of a restart file (modulo referenced to 1) nn_write = $OUTFREQ ! frequency of write in the output file (modulo referenced to nn_it000) ln_dimgnnn = .false. ! DIMG file format: 1 file for all processors (F) or by processor (T) ln_mskland = .false. ! mask land points in NetCDF outputs (costly: + ~15%) ln_clobber = .true. ! clobber (overwrite) an existing file nn_chunksz = ${NCCHUNKSIZE:-0} ! chunksize (bytes) for NetCDF file nn_slimrst = $NSLIMRST ! option of slim restart output (0:full; 1:nowfields+tke+sbc; 2:nowfields+sbc+en; 3:nowfields only) nn_slimrstin = ${NSLIMRSTIN:-0} ! Force slim restart on input ln_rsttime = ${LN_RSTTIME:-.true.} ! Use time in restart output names rather than time steps ln_writerst = ${LNWRITERST:-.true.} ln_usetime = ${LNUSETIME:-.false.} cn_ocerst_out_path="${CN_OCERST_OUT_PATH:-./}" nn_itout = ${NITOUT:-$NIT000} ln_rcf_read = ${NEMO_LN_RCF_READ:-.false.} ln_rcf_write = ${NEMO_LN_RCF_WRITE:-.false.} / !!====================================================================== !! *** Domain namelists *** !!====================================================================== !! namzgr vertical coordinate !! namzgr_sco s-coordinate or hybrid z-s-coordinate !! namdom space and time domain (bathymetry, mesh, timestep) !! namtsd data: temperature & salinity !!====================================================================== ! !----------------------------------------------------------------------- &namzgr ! vertical coordinate !----------------------------------------------------------------------- ln_zco = .false. ! z-coordinate - full steps (T/F) ("key_zco" may also be defined) ln_zps = .true. ! z-coordinate - partial steps (T/F) ln_sco = .false. ! s- or hybrid z-s-coordinate (T/F) / !----------------------------------------------------------------------- &namzgr_sco ! s-coordinate or hybrid z-s-coordinate !----------------------------------------------------------------------- rn_sbot_min = 300. ! minimum depth of s-bottom surface (>0) (m) rn_sbot_max = 5250. ! maximum depth of s-bottom surface (= ocean depth) (>0) (m) rn_theta = 6.0 ! surface control parameter (0<=rn_theta<=20) rn_thetb = 0.75 ! bottom control parameter (0<=rn_thetb<= 1) rn_rmax = 0.15 ! maximum cut-off r-value allowed (00) or min number of ocean level (<0) rn_e3zps_min= 5. ! partial step thickness is set larger than the minimum of rn_e3zps_rat= 0.1 ! rn_e3zps_min and rn_e3zps_rat*e3t, with 0 fill namsbc_ana ) ln_flx = $NAM_LN_FLX ! flux formulation (T => fill namsbc_flx ) ln_blk_clio = .false. ! CLIO bulk formulation (T => fill namsbc_clio) ln_blk_core = $NAM_LN_BLK ! CORE bulk formulation (T => fill namsbc_core) ln_cpl = .false. ! Coupled formulation (T => fill namsbc_cpl ) ln_apr_dyn = .false. ! Patm gradient added in ocean & ice Eqs. (T => fill namsbc_apr ) nn_ice = $NAM_NN_ICE ! =0 no ice boundary condition , ! =1 use observed ice-cover , ! =2 ice-model used ("key_lim3" or "key_lim2") ln_dm2dc = .false. ! daily mean to diurnal cycle on short wave ln_rnf = .true. ! runoffs (T => fill namsbc_rnf) ln_ssr = .true. ! Sea Surface Restoring on T and/or S (T => fill namsbc_ssr) nn_fwb = $NN_FWB ! FreshWater Budget: =0 unchecked ! =1 global mean of e-p-r set to zero at each time step ! =2 annual global mean of e-p-r set to zero ! =3 global emp set to zero and spread out over erp area ! =4 variable time global mean of e-p-r set to zero (fill namsbc_fwb) nn_hbp = 1 ln_cdgw = ${NAM_LN_CDWW:-false} ! Neutral drag coefficient read from wave model ln_stcor = ${NAM_LN_STCOR:-false} ! Stokes drift read from wave model ln_wavetke = ${NAM_LN_WAVETKE:-false} ! TKE wave parameters read from wave model ln_tauoc = ${NAM_LN_TAUOC:-false} ! Wave-modified stress from wave model ln_wbrsource = ${NAM_LN_WBRSOURCE:-false} ! TKE from wave breaking as source function ln_pert = ${NAM_LNREAD_PERT:-false} ! Option to read surf pert ln_wicestrn = ${NAM_LN_WICESTRN:-false} / !----------------------------------------------------------------------- &namsbc_ana ! analytical surface boundary condition !----------------------------------------------------------------------- nn_tau000 = 0 ! gently increase the stress over the first ntau_rst time-steps rn_utau0 = 0.5 ! uniform value for the i-stress rn_vtau0 = 0.e0 ! uniform value for the j-stress rn_qns0 = 0.e0 ! uniform value for the total heat flux rn_qsr0 = 0.e0 ! uniform value for the solar radiation rn_emp0 = 0.e0 ! uniform value for the freswater budget (E-P) / !----------------------------------------------------------------------- &namsbc_flx ! surface boundary condition : flux formulation !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_utau = 'utau' , 24 , 'utau' , .false. , .false., 'monthly' , '' , '' sn_vtau = 'vtau' , 24 , 'vtau' , .false. , .false., 'monthly' , '' , '' sn_qtot = 'flx' , 24 , 'qtot' , .false. , .false., 'monthly' , '' , '' sn_qsr = 'flx' , 24 , 'qsr' , .false. , .false., 'monthly' , '' , '' sn_emp = 'flx' , 24 , 'emp' , .false. , .false., 'monthly' , '' , '' cn_dir = './' ! root directory for the location of the flux files / !----------------------------------------------------------------------- &namsbc_iif ! surface boundary condition for prescribed ice !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interpol. ! clim ! 'yearly' or ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! sn_ice = 'ice_cover' , 24 , 'ice_cov' , .false. , .false. , 'monthly', '', '' cn_dir = './' ! root for location of ice files dtice = 1. ! time scale for relaxation to sea-ice nn_ice_rel = $NAM_NN_ICE_REL ! Use pseudo-ice treatment / !----------------------------------------------------------------------- &namsbc_clio ! namsbc_clio CLIO bulk formulea !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_utau = 'taux_1m' , -1 , 'sozotaux', .true. , .true. , 'yearly' , '' , '' sn_vtau = 'tauy_1m' , -1 , 'sometauy', .true. , .true. , 'yearly' , '' , '' sn_wndm = 'flx' , -1 , 'socliowi', .true. , .true. , 'yearly' , '' , '' sn_tair = 'flx' , -1 , 'socliot2', .true. , .true. , 'yearly' , '' , '' sn_humi = 'flx' , -1 , 'socliohu', .true. , .true. , 'yearly' , '' , '' sn_ccov = 'flx' , -1 , 'socliocl', .false. , .true. , 'yearly' , '' , '' sn_prec = 'flx' , -1 , 'socliopl', .false. , .true. , 'yearly' , '' , '' cn_dir = './' ! root directory for the location of the bulk files are / !----------------------------------------------------------------------- &namsbc_core ! namsbc_core CORE bulk formulea !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_wndi = 'u10' , ${FREQAN:-6} , 'u10' , .false. , .false. , 'monthly' , '' , '' sn_wndj = 'v10' , ${FREQAN:-6} , 'v10' , .false. , .false. , 'monthly' , '' , '' sn_qsr = 'accum' , ${FREQFC:-24} , 'swdn' , .false. , .false. , 'monthly' , '' , '' sn_qlw = 'accum' , ${FREQFC:-24} , 'lwdn' , .false. , .false. , 'monthly' , '' , '' sn_tair = 'qtml' , ${FREQAN:-6} , 't10' , .false. , .false. , 'monthly' , '' , '' sn_humi = 'qtml' , ${FREQAN:-6} , 'q10' , .false. , .false. , 'monthly' , '' , '' sn_prec = 'accum' , ${FREQFC:-24} , 'precip' , .false. , .false. , 'monthly' , '' , '' sn_snow = 'accum' , ${FREQFC:-24} , 'snow' , .false. , .false. , 'monthly' , '' , '' sn_tdif = 'taudif_core' , 24 , 'taudif' , .false. , .true. , 'yearly' , '' , '' sn_ccov = '${CLDCOVTYP:-tcc}', ${FREQAN:-6} , '${CLDCOVTYP:-tcc}', .false. , .false. , 'monthly' , '' , '' cn_dir = './' ! root directory for the location of the bulk files ln_2m = .false. ! air temperature and humidity referenced at 2m (T) instead 10m (F) ln_taudif = .false. ! HF tau contribution: use "mean of stress module - module of the mean stress" data ln_cdec = $NAM_LN_CDEC ! Switch to ECMWF drag rn_pfac = 1. ! multiplicative factor for precipitation (total & snow) ln_cldcov = ${LNBULKCLD:-.false.} rn_rrelwind = ${NAM_RN_RRELWIND:-1.0} / !----------------------------------------------------------------------- &namsbc_cpl ! coupled ocean/atmosphere model ("key_coupled") !----------------------------------------------------------------------- ! ! description ! multiple ! vector ! vector ! vector ! ! ! ! categories ! reference ! orientation ! grids ! ! send sn_snd_temp = 'weighted oce and ice' , 'no' , '' , '' , '' sn_snd_alb = 'weighted ice' , 'no' , '' , '' , '' sn_snd_thick = 'none' , 'no' , '' , '' , '' sn_snd_crt = 'none' , 'no' , 'spherical' , 'eastward-northward' , 'T' sn_snd_co2 = 'coupled' , 'no' , '' , '' , '' ! receive sn_rcv_w10m = 'none' , 'no' , '' , '' , '' sn_rcv_taumod = 'coupled' , 'no' , '' , '' , '' sn_rcv_tau = 'oce only' , 'no' , 'cartesian' , 'eastward-northward', 'U,V' sn_rcv_dqnsdt = 'coupled' , 'no' , '' , '' , '' sn_rcv_qsr = 'oce and ice' , 'no' , '' , '' , '' sn_rcv_qns = 'oce and ice' , 'no' , '' , '' , '' sn_rcv_emp = 'conservative' , 'no' , '' , '' , '' sn_rcv_rnf = 'coupled' , 'no' , '' , '' , '' sn_rcv_cal = 'coupled' , 'no' , '' , '' , '' sn_rcv_co2 = 'coupled' , 'no' , '' , '' , '' / !----------------------------------------------------------------------- &namtra_qsr ! penetrative solar radiation !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_chl ='chlorophyll', -1 , 'ch' , .true. , .true. , 'yearly' , '' , '' cn_dir = './' ! root directory for the location of the runoff files ln_traqsr = .true. ! Light penetration (T) or not (F) ln_qsr_rgb = $QSRRGB ! RGB (Red-Green-Blue) light penetration ln_qsr_2bd = $QSR2BD ! 2 bands light penetration ln_qsr_bio = .false. ! bio-model light penetration nn_chldta = $CHLTYPE ! RGB : Chl data (=1) or cst value (=0) rn_abs = 0.58 ! RGB & 2 bands: fraction of light (rn_si1) rn_si0 = 0.35 ! RGB & 2 bands: shortess depth of extinction rn_si1 = 23.0 ! 2 bands: longest depth of extinction / !----------------------------------------------------------------------- &namsbc_fwb ! namsbc_fwb Fresh water budget !----------------------------------------------------------------------- rd_fwb = 1. ! time scale to apply fwb correction (days) ikt_fwb = 1 ! freq (time steps) to estimate fwb nr_ssh = $NR_SSH ! 0 for global sl=0. 1/2 for external SL/Mass file cn_dir ='./' ! root directory for location of ssh file sn_ssh = $SSHFILE rcap = 1. ! mm/day cap for FWB adjusment lfwbr = $LFWBR / !----------------------------------------------------------------------- &namsbc_rnf ! runoffs namelist surface boundary condition !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_rnf = 'runoff_1m_nomask', -1 , 'sorunoff', .true. , .true. , 'yearly' , '' , '' sn_cnf = 'runoff_1m_nomask', 0 , 'socoefr', .false. , .true. , 'yearly' , '' , '' sn_s_rnf = 'runoffs' , 24 , 'rosaline', .true. , .true. , 'yearly' , '' , '' sn_t_rnf = 'runoffs' , 24 , 'rotemper', .true. , .true. , 'yearly' , '' , '' sn_dep_rnf = 'runoffs' , 0 , 'rodepth' , .false. , .true. , 'yearly' , '' , '' cn_dir = './' ! root directory for the location of the runoff files ln_rnf_emp = .false. ! runoffs included into precipitation field (T) or into a file (F) ln_rnf_mouth = .true. ! specific treatment at rivers mouths rn_hrnf = 15.e0 ! depth over which enhanced vertical mixing is used rn_avt_rnf = 1.e-4 ! value of the additional vertical mixing coef. [m2/s] rn_rfact = 1.e0 ! multiplicative factor for runoff ln_rnf_depth = .false. ! read in depth information for runoff ln_rnf_tem = .false. ! read in temperature information for runoff ln_rnf_sal = .false. ! read in salinity information for runoff / !----------------------------------------------------------------------- &namsbc_apr ! Atmospheric pressure used as ocean forcing or in bulk !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interpol. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_apr = 'patm' , -1 ,'somslpre', .true. , .true. , 'yearly' , '' , '' cn_dir = './' ! root directory for the location of the bulk files ln_ref_apr = .false. ! ref. pressure: global mean Patm (T) or a constant (F) / !----------------------------------------------------------------------- &namsbc_ssr ! surface boundary condition : sea surface restoring !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_sst = $SSTDMPFILE sn_sss = 'sss' , -1 , 'sss' , .true. , .true. , 'yearly' , '' , '' cn_dir = './' ! root directory for the location of the runoff files nn_sstr = $NAM_NN_SSTR ! add a retroaction term in the surface heat ! flux (=1 1TS; =2 2TS; =3 3TS ) or not (=0) nn_sssr = 2 ! add a damping term in the surface freshwater flux (=2) ! or to SSS only (=1) or no damping term (=0) rn_dqdt = $DQDT0 ! magnitude of the retroaction on temperature [W/m2/K] rn_dqdt1 = $DQDT1 ! magnitude of the retroaction on temperature [W/m2/K] 1st TS rn_dqdt2 = $DQDT2 ! magnitude of the retroaction on temperature [W/m2/K] 2nd TS rn_dqdt3 = $DQDT3 ! magnitude of the retroaction on temperature [W/m2/K] 3rd TS rn_deds = $DEDS0 ! magnitude of the damping on salinity [mm/day] lgth_2ts = $RML ! window for 2ts rlx running mean lgth_3ts = $RML1 ! window for 3rd ts rlx ln_sssr_bnd = .true. ! flag to bound erp term (associated with nn_sssr=2) rn_sssr_bnd = 4.e0 ! ABS(Max/Min) value of the damping erp term [mm/day] dqdt_limice = 0.1 ! restoring factors under ice [ratio of dqdt] / !----------------------------------------------------------------------- &namsbc_alb ! albedo parameters !----------------------------------------------------------------------- rn_cloud = 0.06 ! cloud correction to snow and ice albedo rn_albice = 0.53 ! albedo of melting ice in the arctic and antarctic rn_alphd = 0.80 ! coefficients for linear interpolation used to rn_alphc = 0.65 ! compute albedo between two extremes values rn_alphdi = 0.72 ! (Pyane, 1972) / !----------------------------------------------------------------------- &namsbc_prt ! perturbations to forcing (MAB 2014) !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_putau = 'putau' , 24 , 'utau' , .false. , .false., 'monthly' , '' , '' sn_pvtau = 'pvtau' , 24 , 'vtau' , .false. , .false., 'monthly' , '' , '' sn_pqns = 'pqns' , 24 , 'qns' , .false. , .false., 'monthly' , '' , '' sn_pqsr = 'pqsr' , 24 , 'qsr' , .false. , .false., 'monthly' , '' , '' sn_pemp = 'pemp' , 24 , 'emp' , .false. , .false., 'monthly' , '' , '' nn_putau = ${NAM_NN_PUTAU:=0} !0/1/2 for nothing/addpert/replace nn_pvtau = ${NAM_NN_PVTAU:=0} nn_pqns = ${NAM_NN_PQNS:=0} nn_pqsr = ${NAM_NN_PQSR:=0} nn_pemp = ${NAM_NN_PEMP:=0} cn_dir = './' ! root directory for the location of the pert files / !!====================================================================== !! *** Lateral boundary condition *** !!====================================================================== !! namlbc lateral momentum boundary condition !! namcla cross land advection !! namobc open boundaries parameters ("key_obc") !! namagrif agrif nested grid ( read by child model only ) ("key_agrif") !! nambdy Unstructured open boundaries ("key_bdy") !! namtide Tidal forcing at open boundaries ("key_bdy_tides") !!====================================================================== ! !----------------------------------------------------------------------- &namlbc ! lateral momentum boundary condition !----------------------------------------------------------------------- rn_shlat = 2. ! shlat = 0 ! 0 < shlat < 2 ! shlat = 2 ! 2 < shlat ! free slip ! partial slip ! no slip ! strong slip ln_vorlat = .false. ! consistency of vorticity boundary condition with analytical eqs. / !----------------------------------------------------------------------- &namcla ! cross land advection !----------------------------------------------------------------------- nn_cla = 0 ! advection between 2 ocean pts separates by land / !----------------------------------------------------------------------- &namobc ! open boundaries parameters ("key_obc") !----------------------------------------------------------------------- ln_obc_clim = .false. ! climatological obc data files (T) or not (F) ln_vol_cst = .true. ! impose the total volume conservation (T) or not (F) ln_obc_fla = .false. ! Flather open boundary condition nn_obcdta = 1 ! = 0 the obc data are equal to the initial state ! = 1 the obc data are read in 'obc.dta' files cn_obcdta = 'annual' ! set to annual if obc datafile hold 1 year of data ! set to monthly if obc datafile hold 1 month of data rn_dpein = 1. ! damping time scale for inflow at east open boundary rn_dpwin = 1. ! - - - west - - rn_dpnin = 1. ! - - - north - - rn_dpsin = 1. ! - - - south - - rn_dpeob = 3000. ! time relaxation (days) for the east open boundary rn_dpwob = 15. ! - - - west - - rn_dpnob = 3000. ! - - - north - - rn_dpsob = 15. ! - - - south - - rn_volemp = 1. ! = 0 the total volume change with the surface flux (E-P-R) ! = 1 the total volume remains constant / !----------------------------------------------------------------------- &namagrif ! AGRIF zoom ("key_agrif") !----------------------------------------------------------------------- nn_cln_update = 3 ! baroclinic update frequency ln_spc_dyn = .true. ! use 0 as special value for dynamics rn_sponge_tra = 2880. ! coefficient for tracer sponge layer [m2/s] rn_sponge_dyn = 2880. ! coefficient for dynamics sponge layer [m2/s] / !----------------------------------------------------------------------- &nam_tide ! tide parameters (#ifdef key_tide) !----------------------------------------------------------------------- ln_tide_pot = .true. ! use tidal potential forcing nb_harmo = 11 ! number of constituents used clname(1) = 'M2' ! name of constituent clname(2) = 'S2' clname(3) = 'N2' clname(4) = 'K1' clname(5) = 'O1' clname(6) = 'Q1' clname(7) = 'M4' clname(8) = 'K2' clname(9) = 'P1' clname(10) = 'Mf' clname(11) = 'Mm' / !----------------------------------------------------------------------- &nambdy ! unstructured open boundaries ("key_bdy") !----------------------------------------------------------------------- nb_bdy = 1 ! number of open boundary sets ln_coords_file = .true. ! =T : read bdy coordinates from file cn_coords_file = 'coordinates.bdy.nc' ! bdy coordinates files ln_mask_file = .false. ! =T : read mask from file cn_mask_file = '' ! name of mask file (if ln_mask_file=.TRUE.) nn_dyn2d = 2 ! boundary conditions for barotropic fields nn_dyn2d_dta = 3 ! = 0, bdy data are equal to the initial state ! = 1, bdy data are read in 'bdydata .nc' files ! = 2, use tidal harmonic forcing data from files ! = 3, use external data AND tidal harmonic forcing nn_dyn3d = 0 ! boundary conditions for baroclinic velocities nn_dyn3d_dta = 0 ! = 0, bdy data are equal to the initial state ! = 1, bdy data are read in 'bdydata .nc' files nn_tra = 1 ! boundary conditions for T and S nn_tra_dta = 1 ! = 0, bdy data are equal to the initial state ! = 1, bdy data are read in 'bdydata .nc' files nn_rimwidth = 10 ! width of the relaxation zone ln_vol = .false. ! total volume correction (see nn_volctl parameter) nn_volctl = 1 ! = 0, the total water flux across open boundaries is zero / !----------------------------------------------------------------------- &nambdy_dta ! open boundaries - external data ("key_bdy") !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interpol. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! bn_ssh = 'amm12_bdyT_u2d' , 24 , 'sossheig' , .true. , .false. , 'daily' , '' , '' bn_u2d = 'amm12_bdyU_u2d' , 24 , 'vobtcrtx' , .true. , .false. , 'daily' , '' , '' bn_v2d = 'amm12_bdyV_u2d' , 24 , 'vobtcrty' , .true. , .false. , 'daily' , '' , '' bn_u3d = 'amm12_bdyU_u3d' , 24 , 'vozocrtx' , .true. , .false. , 'daily' , '' , '' bn_v3d = 'amm12_bdyV_u3d' , 24 , 'vomecrty' , .true. , .false. , 'daily' , '' , '' bn_tem = 'amm12_bdyT_tra' , 24 , 'votemper' , .true. , .false. , 'daily' , '' , '' bn_sal = 'amm12_bdyT_tra' , 24 , 'vosaline' , .true. , .false. , 'daily' , '' , '' cn_dir = 'bdydta/' ln_full_vel = .false. / !----------------------------------------------------------------------- &nambdy_tide ! tidal forcing at open boundaries !----------------------------------------------------------------------- filtide = 'bdydta/amm12_bdytide_' ! file name root of tidal forcing files tide_cpt(1) ='Q1' ! names of tidal components used tide_cpt(2) ='O1' ! names of tidal components used tide_cpt(3) ='P1' ! names of tidal components used tide_cpt(4) ='S1' ! names of tidal components used tide_cpt(5) ='K1' ! names of tidal components used tide_cpt(6) ='2N2' ! names of tidal components used tide_cpt(7) ='MU2' ! names of tidal components used tide_cpt(8) ='N2' ! names of tidal components used tide_cpt(9) ='NU2' ! names of tidal components used tide_cpt(10) ='M2' ! names of tidal components used tide_cpt(11) ='L2' ! names of tidal components used tide_cpt(12) ='T2' ! names of tidal components used tide_cpt(13) ='S2' ! names of tidal components used tide_cpt(14) ='K2' ! names of tidal components used tide_cpt(15) ='M4' ! names of tidal components used tide_speed(1) = 13.398661 ! phase speeds of tidal components (deg/hour) tide_speed(2) = 13.943036 ! phase speeds of tidal components (deg/hour) tide_speed(3) = 14.958932 ! phase speeds of tidal components (deg/hour) tide_speed(4) = 15.000001 ! phase speeds of tidal components (deg/hour) tide_speed(5) = 15.041069 ! phase speeds of tidal components (deg/hour) tide_speed(6) = 27.895355 ! phase speeds of tidal components (deg/hour) tide_speed(7) = 27.968210 ! phase speeds of tidal components (deg/hour) tide_speed(8) = 28.439730 ! phase speeds of tidal components (deg/hour) tide_speed(9) = 28.512585 ! phase speeds of tidal components (deg/hour) tide_speed(10) = 28.984106 ! phase speeds of tidal components (deg/hour) tide_speed(11) = 29.528479 ! phase speeds of tidal components (deg/hour) tide_speed(12) = 29.958935 ! phase speeds of tidal components (deg/hour) tide_speed(13) = 30.000002 ! phase speeds of tidal components (deg/hour) tide_speed(14) = 30.082138 ! phase speeds of tidal components (deg/hour) tide_speed(15) = 57.968212 ! phase speeds of tidal components (deg/hour) ln_tide_date = .true. ! adjust tidal harmonics for start date of run / !!====================================================================== !! *** Bottom boundary condition *** !!====================================================================== !! nambfr bottom friction !! nambbc bottom temperature boundary condition !! nambbl bottom boundary layer scheme ("key_trabbl") !!====================================================================== ! !----------------------------------------------------------------------- &nambfr ! bottom friction !----------------------------------------------------------------------- nn_bfr = 1 ! type of bottom friction : = 0 : free slip, = 1 : linear friction ! = 2 : nonlinear friction rn_bfri1 = 4.e-4 ! bottom drag coefficient (linear case) rn_bfri2 = 1.e-3 ! bottom drag coefficient (non linear case) rn_bfeb2 = 2.5e-3 ! bottom turbulent kinetic energy background (m2/s2) ln_bfr2d = .false. ! horizontal variation of the bottom friction coef (read a 2D mask file ) rn_bfrien = 50. ! local multiplying factor of bfr (ln_bfr2d=T) ln_bfrimp = .true. ! implicit bottom friction (requires ln_zdfexp = .false. if true) / !----------------------------------------------------------------------- &nambbc ! bottom temperature boundary condition !----------------------------------------------------------------------- ln_trabbc = .true. ! Apply a geothermal heating at the ocean bottom nn_geoflx = 2 ! geothermal heat flux: = 0 no flux ! = 1 constant flux ! = 2 variable flux (read in geothermal_heating.nc in mW/m2) rn_geoflx_cst = 86.4e-3 ! Constant value of geothermal heat flux [W/m2] / !----------------------------------------------------------------------- &nambbl ! bottom boundary layer scheme !----------------------------------------------------------------------- nn_bbl_ldf = 1 ! diffusive bbl (=1) or not (=0) nn_bbl_adv = 0 ! advective bbl (=1/2) or not (=0) rn_ahtbbl = 0. ! lateral mixing coefficient in the bbl [m2/s] rn_gambbl = 10. ! advective bbl coefficient [s] / !!====================================================================== !! Tracer (T & S ) namelists !!====================================================================== !! nameos equation of state !! namtra_adv advection scheme !! namtra_ldf lateral diffusion scheme !! namtra_dmp T & S newtonian damping !!====================================================================== ! !----------------------------------------------------------------------- &nameos ! ocean physical parameters !----------------------------------------------------------------------- nn_eos = 0 ! type of equation of state and Brunt-Vaisala frequency ! = 0, UNESCO (formulation of Jackett and McDougall (1994) and of McDougall (1987) ) ! = 1, linear: rho(T) = rau0 * ( 1.028 - ralpha * T ) ! = 2, linear: rho(T,S) = rau0 * ( rbeta * S - ralpha * T ) rn_alpha = 2.0e-4 ! thermal expension coefficient (nn_eos= 1 or 2) rn_beta = 7.7e-4 ! saline expension coefficient (nn_eos= 2) / !----------------------------------------------------------------------- &namtra_adv ! advection scheme for tracer !----------------------------------------------------------------------- ln_traadv_cen2 = .false. ! 2nd order centered scheme ln_traadv_tvd = .true. ! TVD scheme ln_traadv_muscl = .false. ! MUSCL scheme ln_traadv_muscl2 = .false. ! MUSCL2 scheme + cen2 at boundaries ln_traadv_ubs = .false. ! UBS scheme ln_traadv_qck = .false. ! QUICKEST scheme / !----------------------------------------------------------------------- &namtra_ldf ! lateral diffusion scheme for tracer !----------------------------------------------------------------------- ! ! Type of the operator : ln_traldf_lap = .true. ! laplacian operator ln_traldf_bilap = .false. ! bilaplacian operator ! ! Direction of action : ln_traldf_level = .false. ! iso-level ln_traldf_hor = .false. ! horizontal (geopotential) (require "key_ldfslp" when ln_sco=T) ln_traldf_iso = .true. ! iso-neutral (require "key_ldfslp") ln_traldf_grif = .false. ! griffies skew flux formulation (require "key_ldfslp") ln_traldf_gdia = .false. ! griffies operator strfn diagnostics (require "key_ldfslp") ln_triad_iso = .false. ! griffies operator calculates triads twice => pure lateral mixing in ML (require "key_ldfslp") ln_botmix_grif = .false. ! griffies operator with lateral mixing on bottom (require "key_ldfslp") ! Coefficient rn_aht_0 = 1000.0 ! horizontal eddy diffusivity for tracers [m2/s] rn_ahtb_0 = 0. ! background eddy diffusivity for ldf_iso [m2/s] rn_aeiv_0 = 1000.0 ! eddy induced velocity coefficient [m2/s] (require "key_traldf_eiv") / !----------------------------------------------------------------------- &namtra_dmp ! tracer: T & S newtonian damping ('key_tradmp') !----------------------------------------------------------------------- ln_tradmp = .true. ! add a damping termn (T) or not (F) ln_tradmp_sfc = ${LN_TRADMP_SFC:=false} ! Extend 3D damping to surface layer. nn_hdmp = $NAM_HDMP ! horizontal shape =-1, damping in Med and Red Seas only ! =XX, damping poleward of XX degrees (XX>=0) ! + F(distance-to-coast) + Red and Med Seas nn_zdmp = ${NAM_ZDMP:=0} ! vertical shape =0 damping throughout the water column ! =1 no damping in the mixing layer (kz criteria) ! =2 no damping in the mixed layer (rho crieria) rn_surf = $NAM_SDMP ! surface time scale of damping [days] rn_bot = $NAM_BDMP ! bottom time scale of damping [days] rn_dep = 800. ! depth of transition between rn_surf and rn_bot [meters] rn_dmp_width = ${RN_DMP_WIDTH:=10.} ! Width of transition used with NN_HDMP>0 [degrees latitude] nn_file = 0 ! create a damping.coeff NetCDF file (=1) or not (=0) / !!====================================================================== !! *** Dynamics namelists *** !!====================================================================== !! namdyn_adv formulation of the momentum advection !! namdyn_vor advection scheme !! namdyn_hpg hydrostatic pressure gradient !! namdyn_spg surface pressure gradient (CPP key only) !! namdyn_ldf lateral diffusion scheme !!====================================================================== ! !----------------------------------------------------------------------- &namdyn_adv ! formulation of the momentum advection !----------------------------------------------------------------------- ln_dynadv_vec = .true. ! vector form (T) or flux form (F) ln_dynadv_cen2= .false. ! flux form - 2nd order centered scheme ln_dynadv_ubs = .false. ! flux form - 3rd order UBS scheme / !----------------------------------------------------------------------- &namdyn_vor ! option of physics/algorithm (not control by CPP keys) !----------------------------------------------------------------------- ln_dynvor_ene = .false. ! enstrophy conserving scheme ln_dynvor_ens = .false. ! energy conserving scheme ln_dynvor_mix = .false. ! mixed scheme ln_dynvor_een = .true. ! energy & enstrophy scheme / !----------------------------------------------------------------------- &namdyn_hpg ! Hydrostatic pressure gradient option !----------------------------------------------------------------------- ln_hpg_zco = .false. ! z-coordinate - full steps ln_hpg_zps = .true. ! z-coordinate - partial steps (interpolation) ln_hpg_sco = .false. ! s-coordinate (standard jacobian formulation) ln_hpg_djc = .false. ! s-coordinate (Density Jacobian with Cubic polynomial) ln_hpg_prj = .false. ! s-coordinate (Pressure Jacobian scheme) ln_dynhpg_imp = .false. ! time stepping: semi-implicit time scheme (T) ! centered time scheme (F) / !----------------------------------------------------------------------- !namdyn_spg ! surface pressure gradient (CPP key only) !----------------------------------------------------------------------- ! ! explicit free surface ("key_dynspg_exp") ! ! filtered free surface ("key_dynspg_flt") ! ! split-explicit free surface ("key_dynspg_ts") !----------------------------------------------------------------------- &namdyn_ldf ! lateral diffusion on momentum !----------------------------------------------------------------------- ! ! Type of the operator : ln_dynldf_lap = .true. ! laplacian operator ln_dynldf_bilap = .false. ! bilaplacian operator ! ! Direction of action : ln_dynldf_level = .false. ! iso-level ln_dynldf_hor = .true. ! horizontal (geopotential) (require "key_ldfslp" in s-coord.) ln_dynldf_iso = .false. ! iso-neutral (require "key_ldfslp") ! ! Coefficient rn_ahm_0_lap = 10000.0 ! horizontal laplacian eddy viscosity [m2/s] rn_ahm_0_lap_eq = 2000.0 ! horizontal laplacian eddy viscosity [m2/s] rn_ahmb_0 = 0. ! background eddy viscosity for ldf_iso [m2/s] rn_ahm_0_blp = 0. ! horizontal bilaplacian eddy viscosity [m4/s] / !!====================================================================== !! Tracers & Dynamics vertical physics namelists !!====================================================================== !! namzdf vertical physics !! namzdf_ric richardson number dependent vertical mixing ("key_zdfric") !! namzdf_tke TKE dependent vertical mixing ("key_zdftke") !! namzdf_kpp KPP dependent vertical mixing ("key_zdfkpp") !! namzdf_ddm double diffusive mixing parameterization ("key_zdfddm") !! namzdf_tmx tidal mixing parameterization ("key_zdftmx") !!====================================================================== ! !----------------------------------------------------------------------- &namzdf ! vertical physics !----------------------------------------------------------------------- rn_avm0 = 1.2e-4 ! vertical eddy viscosity [m2/s] (background Kz if not "key_zdfcst") rn_avt0 = 1.2e-5 ! vertical eddy diffusivity [m2/s] (background Kz if not "key_zdfcst") nn_avb = 0 ! profile for background avt & avm (=1) or not (=0) nn_havtb = 0 ! horizontal shape for avtb (=1) or not (=0) ln_zdfevd = .true. ! enhanced vertical diffusion (evd) (T) or not (F) nn_evdm = 0 ! evd apply on tracer (=0) or on tracer and momentum (=1) rn_avevd = 100. ! evd mixing coefficient [m2/s] ln_zdfnpc = .false. ! Non-Penetrative Convective algorithm (T) or not (F) nn_npc = 1 ! frequency of application of npc nn_npcp = 365 ! npc control print frequency ln_zdfexp = .false. ! time-stepping: split-explicit (T) or implicit (F) time stepping nn_zdfexp = 3 ! number of sub-timestep for ln_zdfexp=T / !----------------------------------------------------------------------- &namzdf_ric ! richardson number dependent vertical diffusion ("key_zdfric" ) !----------------------------------------------------------------------- rn_avmri = 100.e-4 ! maximum value of the vertical viscosity rn_alp = 5. ! coefficient of the parameterization nn_ric = 2 ! coefficient of the parameterization rn_ekmfc = 0.7 ! Factor in the Ekman depth Equation rn_mldmin = 1.0 ! minimum allowable mixed-layer depth estimate (m) rn_mldmax =1000.0 ! maximum allowable mixed-layer depth estimate (m) rn_wtmix = 10.0 ! vertical eddy viscosity coeff [m2/s] in the mixed-layer rn_wvmix = 10.0 ! vertical eddy diffusion coeff [m2/s] in the mixed-layer ln_mldw = .true. ! Flag to use or not the mized layer depth param. / !----------------------------------------------------------------------- &namzdf_tke ! turbulent eddy kinetic dependent vertical diffusion ("key_zdftke") !----------------------------------------------------------------------- rn_ediff = ${NAM_RN_EDIFF:-0.1} ! coef. for vertical eddy coef. (avt=rn_ediff*mxl*sqrt(e) ) rn_ediss = ${NAM_RN_EDISS:-0.7} ! coef. of the Kolmogoroff dissipation rn_ebb = ${NAM_RN_EBB:-67.83} ! coef. of the surface input of tke (=67.83 suggested when ln_mxl0=T) ln_ebbice = ${NAM_LN_EBBICE:-true} ! modify tke surface input under ice (F) rn_ebbice = ${NAM_RN_EBBICE:-20} ! coef. of the surface input of tke under ice rn_emin = 1.e-6 ! minimum value of tke [m2/s2] rn_emin0 = 1.e-4 ! surface minimum value of tke [m2/s2] nn_mxl = ${NAM_NN_MXL:-3} ! mixing length: = 0 bounded by the distance to surface and bottom ! = 1 bounded by the local vertical scale factor ! = 2 first vertical derivative of mixing length bounded by 1 ! = 3 as =2 with distinct disspipative an mixing length scale nn_pdl = ${NAM_NN_PDL:-1} ! Prandtl number function of richarson number (=1, avt=pdl(Ri)*avm) or not (=0, avt=avm) ln_mxl0 = .true. ! surface mixing length scale = F(wind stress) (T) or not (F) rn_mxl0 = 0.04 ! surface buoyancy lenght scale minimum value ln_lc = .true. ! Langmuir cell parameterisation (Axell 2002) rn_lc = 0.15 ! coef. associated to Langmuir cells nn_etau = ${NAM_NN_ETAU:-1} ! penetration of tke below the mixed layer (ML) due to internal & intertial waves ! = 0 no penetration ! = 1 add a tke source below the ML ! = 2 add a tke source just at the base of the ML ! = 3 as = 1 applied on HF part of the stress ("key_coupled") rn_efr = ${NAM_RN_EFR:-0.05} ! fraction of surface tke value which penetrates below the ML (nn_etau=1 or 2) nn_htau = ${NAM_NN_HTAU:-1} ! type of exponential decrease of tke penetration below the ML ! = 0 constant 10 m length scale ! = 1 0.5m at the equator to 30m poleward of 40 degrees ! = 3 proportional to SWH rn_whtauscl = ${NAM_RN_WHTAUSCL:-4} ! SWH scalign for htau=3 rn_whtaumin = ${NAM_RN_WHTAUMIN:-1} ! minimum htau (nn_htau=3) rn_delta_0 = ${NAM_RN_DELTA_0:-0.19} ! Strength of background diffusion rn_alpha_m = ${NAM_RN_ALPHA_M:-1.} rn_alpha_h = ${NAM_RN_ALPHA_H:-1.4} rn_beta_m = ${NAM_RN_BETA_M:-14.} rn_beta_h = ${NAM_RN_BETA_H:-11.2} / !------------------------------------------------------------------------ &namzdf_kpp ! K-Profile Parameterization dependent vertical mixing ("key_zdfkpp", and optionally: !------------------------------------------------------------------------ "key_kppcustom" or "key_kpplktb") ln_kpprimix = .true. ! shear instability mixing rn_difmiw = 1.0e-04 ! constant internal wave viscosity [m2/s] rn_difsiw = 0.1e-04 ! constant internal wave diffusivity [m2/s] rn_riinfty = 0.8 ! local Richardson Number limit for shear instability rn_difri = 0.0050 ! maximum shear mixing at Rig = 0 [m2/s] rn_bvsqcon = -0.01e-07 ! Brunt-Vaisala squared for maximum convection [1/s2] rn_difcon = 1. ! maximum mixing in interior convection [m2/s] nn_avb = 0 ! horizontal averaged (=1) or not (=0) on avt and amv nn_ave = 1 ! constant (=0) or profile (=1) background on avt / !----------------------------------------------------------------------- &namzdf_gls ! GLS vertical diffusion ("key_zdfgls") !----------------------------------------------------------------------- rn_emin = 1.e-6 ! minimum value of e [m2/s2] rn_epsmin = 1.e-12 ! minimum value of eps [m2/s3] ln_length_lim = .true. ! limit on the dissipation rate under stable stratification (Galperin et al., 1988) rn_clim_galp = 0.53 ! galperin limit ln_crban = .true. ! Use Craig & Banner (1994) surface wave mixing parametrisation ln_sigpsi = .true. ! Activate or not Burchard 2001 mods on psi schmidt number in the wb case rn_crban = 100. ! Craig and Banner 1994 constant for wb tke flux rn_charn = 70000. ! Charnock constant for wb induced roughness length nn_tkebc_surf = 1 ! surface tke condition (0/1/2=Dir/Neum/Dir Mellor-Blumberg) nn_tkebc_bot = 1 ! bottom tke condition (0/1=Dir/Neum) nn_psibc_surf = 1 ! surface psi condition (0/1/2=Dir/Neum/Dir Mellor-Blumberg) nn_psibc_bot = 1 ! bottom psi condition (0/1=Dir/Neum) nn_stab_func = 2 ! stability function (0=Galp, 1= KC94, 2=CanutoA, 3=CanutoB) nn_clos = 1 ! predefined closure type (0=MY82, 1=k-eps, 2=k-w, 3=Gen) / !----------------------------------------------------------------------- &namzdf_ddm ! double diffusive mixing parameterization ("key_zdfddm") !----------------------------------------------------------------------- rn_avts = 1.e-4 ! maximum avs (vertical mixing on salinity) rn_hsbfr = 1.6 ! heat/salt buoyancy flux ratio / !----------------------------------------------------------------------- &namzdf_tmx ! tidal mixing parameterization ("key_zdftmx") !----------------------------------------------------------------------- rn_htmx = 500. ! vertical decay scale for turbulence (meters) rn_n2min = 1.e-8 ! threshold of the Brunt-Vaisala frequency (s-1) rn_tfe = 0.333 ! tidal dissipation efficiency rn_me = 0.2 ! mixing efficiency ln_tmx_itf = .true. ! ITF specific parameterisation rn_tfe_itf = 1. ! ITF tidal dissipation efficiency / !!====================================================================== !! *** Miscellaneous namelists *** !!====================================================================== !! nammpp Massively Parallel Processing ("key_mpp_mpi") !! namctl Control prints & Benchmark !! namsol elliptic solver / island / free surface !!====================================================================== ! !----------------------------------------------------------------------- &namsol ! elliptic solver / island / free surface !----------------------------------------------------------------------- nn_solv = 1 ! elliptic solver: =1 preconditioned conjugate gradient (pcg) ! =2 successive-over-relaxation (sor) nn_sol_arp = 0 ! absolute/relative (0/1) precision convergence test rn_eps = 1.e-6 ! absolute precision of the solver nn_nmin = 300 ! minimum of iterations for the SOR solver nn_nmax = 2000 ! maximum of iterations for the SOR solver nn_nmod = 10 ! frequency of test for the SOR solver rn_resmax = 1.e-10 ! absolute precision for the SOR solver rn_sor = 1.92 ! optimal coefficient for SOR solver (to be adjusted with the domain) / !----------------------------------------------------------------------- &nammpp ! Massively Parallel Processing ("key_mpp_mpi") !----------------------------------------------------------------------- cn_mpi_send = 'I' ! mpi send/recieve type ='S', 'B', or 'I' for standard send, ! buffer blocking send or immediate non-blocking sends, resp. nn_buffer = 0 ! size in bytes of exported buffer ('B' case), 0 no exportation jpni = $NEMO_NPROCX ! jpni number of processors following i (set automatically if < 1) jpnj = $NEMO_NPROCY ! jpnj number of processors following j (set automatically if < 1) jpnij = $NEMO_NPROC ! jpnij number of local domains (set automatically if < 1) ln_nnogather = .true. ln_lbcmap = ${LN_LBCMAP:-.TRUE.} / !----------------------------------------------------------------------- &namctl ! Control prints & Benchmark !----------------------------------------------------------------------- ln_ctl = .false. ! trends control print (expensive!) nn_print = 0 ! level of print (0 no extra print) nn_ictls = 0 ! start i indice of control sum (use to compare mono versus nn_ictle = 0 ! end i indice of control sum multi processor runs nn_jctls = 0 ! start j indice of control over a subdomain) nn_jctle = 0 ! end j indice of control nn_isplt = 1 ! number of processors in i-direction nn_jsplt = 1 ! number of processors in j-direction nn_bench = 0 ! Bench mode (1/0): CAUTION use zero except for bench ! (no physical validity of the results) nn_timing = 1 ! timing by routine activated (=1) creates timing.output file, or not (=0) ln_mpiprt = .false. ! Non-masters tasks write ocean.output_... ln_smslabel= $NAM_LN_SMSLABEL ! Communicate with SMS. cn_smslabel = "${CN_SMSLABEL:-xlabel}" nn_smsfrq = $NAM_NN_SMSFRQ ! SMS communication frequency (time steps) ln_diadebug = .false. ! Grid point diagnostic output (fill namdiadebug) ln_sglread = ${NAM_LN_SGLREAD:-.true.} ln_sglreadfbm = ${NAM_LN_SGLREADFBM:-.true.} ln_sglwrite = ${LNSGLWRITE:-.false.} ln_sglwritefbm = ${LNSGLWRITEFBM:-.false.} ln_timeout = ${LNTIMEOUT:=.true.} ln_timeoutflush = ${LNTIMEOUTFLUSH:=.true.} / !----------------------------------------------------------------------- &namcfg ! parameters of the configuration !----------------------------------------------------------------------- cp_cfg = "orca" ! name of the configuration cp_cfz = "normal" ! zoom jp_cfg = 1 ! resolution of the configuration jpidta = 362 ! 1st lateral dimension ( >= jpi ) jpjdta = 292 ! 2nd " " ( >= jpj ) jpkdta = 46 ! number of levels ( >= jpk ) jpiglo = 362 ! 1st dimension of global domain --> i =jpidta jpjglo = 292 ! 2nd - - --> j =jpjdta jpizoom = 1 ! left bottom (i,j) indices of the zoom jpjzoom = 1 ! in data domain indices jperio = 6 ! lateral cond. type (between 0 and 6) ln_trabbl = .true. ! key_trabbl set nn_ldfdyn = 3 ! key_dynldf_c3d / !!====================================================================== !! *** Diagnostics namelists *** !!====================================================================== !! namnc4 netcdf4 chunking and compression settings ("key_netcdf4") !! namtrd dynamics and/or tracer trends ("key_trddyn","key_trdtra","key_trdmld") !! namflo float parameters ("key_float") !! namptr Poleward Transport Diagnostics !! namhsb Heat and salt budgets !!====================================================================== ! !----------------------------------------------------------------------- &namnc4 ! netcdf4 chunking and compression settings ("key_netcdf4") !----------------------------------------------------------------------- nn_nchunks_i= ${NC4CHUNKX:-4} ! number of chunks in i-dimension nn_nchunks_j= ${NC4CHUNKY:-4} ! number of chunks in j-dimension nn_nchunks_k= ${NC4CHUNKZ:-46} ! number of chunks in k-dimension ! setting nn_nchunks_k = jpk will give a chunk size of 1 in the vertical which ! is optimal for postprocessing which works exclusively with horizontal slabs ln_nc4zip = ${NC4REST:-.false.} ! (T) use netcdf4 chunking and compression ! (F) ignore chunking information and produce netcdf3-compatible files / !----------------------------------------------------------------------- &namtrd ! diagnostics on dynamics and/or tracer trends ("key_trddyn" and/or "key_trdtra") ! ! or mixed-layer trends or barotropic vorticity ("key_trdmld" or "key_trdvor") !----------------------------------------------------------------------- nn_trd = 365 ! time step frequency dynamics and tracers trends nn_ctls = 0 ! control surface type in mixed-layer trends (0,1 or n /seconds ; =86400. -> /day) cn_trdrst_in = "restart_mld" ! suffix of ocean restart name (input) cn_trdrst_out = "restart_mld" ! suffix of ocean restart name (output) ln_trdmld_restart = .false. ! restart for ML diagnostics ln_trdmld_instant = .false. ! flag to diagnose trends of instantantaneous or mean ML T/S / !----------------------------------------------------------------------- &namflo ! float parameters ("key_float") !----------------------------------------------------------------------- jpnfl = 1 ! total number of floats during the run jpnnewflo = 0 ! number of floats for the restart ln_rstflo = .false. ! float restart (T) or not (F) nn_writefl = 75 ! frequency of writing in float output file nn_stockfl = 5475 ! frequency of creation of the float restart file ln_argo = .false. ! Argo type floats (stay at the surface each 10 days) ln_flork4 = .false. ! trajectories computed with a 4th order Runge-Kutta (T) ! or computed with Blanke' scheme (F) ln_ariane = .true. ! Input with Ariane tool convention(T) ln_flo_ascii = .true. ! Output with Ariane tool netcdf convention(F) or ascii file (T) / !----------------------------------------------------------------------- &namptr ! Poleward Transport Diagnostic !----------------------------------------------------------------------- ln_diaptr = .false. ! Poleward heat and salt transport (T) or not (F) ln_diaznl = .true. ! Add zonal means and meridional stream functions ln_subbas = .true. ! Atlantic/Pacific/Indian basins computation (T) or not ! (orca configuration only, need input basins mask file named "subbasins.nc" ln_ptrcomp = .true. ! Add decomposition : overturning nn_fptr = 1 ! Frequency of ptr computation [time step] nn_fwri = 15 ! Frequency of ptr outputs [time step] / !----------------------------------------------------------------------- &namhsb ! Heat and salt budgets !----------------------------------------------------------------------- ln_diahsb = .false. ! check the heat and salt budgets (T) or not (F) / !----------------------------------------------------------------------- &nam_diaharm ! Harmonic analysis of tidal constituents ('key_diaharm') !----------------------------------------------------------------------- nit000_han = 1 ! First time step used for harmonic analysis nitend_han = 75 ! Last time step used for harmonic analysis nstep_han = 15 ! Time step frequency for harmonic analysis nb_ana = 2 ! Number of harmonics to analyse tname(1) = 'M2' ! Name of tidal constituents tname(2) = 'K1' / !----------------------------------------------------------------------- &namdct ! transports through sections !----------------------------------------------------------------------- nn_dct = 15 ! time step frequency for transports computing nn_dctwri = 15 ! time step frequency for transports writing nn_secdebug = 112 ! 0 : no section to debug ! -1 : debug all section ! 0 < n : debug section number n / !!====================================================================== !! *** Observation & Assimilation namelists *** !!====================================================================== !! namobs observation and model comparison ('key_diaobs') !! nam_asminc assimilation increments ('key_asminc') !!====================================================================== ! !----------------------------------------------------------------------- &namobs ! observation usage switch ('key_diaobs') !----------------------------------------------------------------------- cn_oceobs_out_path="${CN_OCEOBS_OUT_PATH:-./}" ln_t3d = $LPRO ! Logical switch for T profile observations ln_s3d = $LPRO ! Logical switch for S profile observations ln_ena = .false. ! Logical switch for ENACT insitu data set ! ! ln_cor Logical switch for Coriolis insitu data set ln_profb = $LPRO ! Logical switch for feedback insitu data set ln_sla = $LSLA ! Logical switch for SLA observations ln_sladt = .false. ! Logical switch for AVISO SLA data ln_slafb = $LSLA ! Logical switch for feedback SLA data ! ln_ssh Logical switch for SSH observations ln_sst = $LSST ! Logical switch for SST observations ln_sstbias = .false. ln_grdsst = ${NAM_LN_GRDSST:-.true.} ! ln_grdsst Logical switch for gridded observations ! ln_ghrsst Logical switch for GHRSST observations ln_sstfb = ${NAM_LN_SSTFB:-.false.} ! Logical switch for feedback SST data sstfbfiles = ${NAM_SSTFBFILES:-''} ! ln_sss Logical switch for SSS observations ! ln_seaice Logical switch for Sea Ice observations ! ln_vel3d Logical switch for velocity observations ! ln_velavcur Logical switch for velocity daily av. cur. ! ln_velhrcur Logical switch for velocity high freq. cur. ! ln_velavadcp Logical switch for velocity daily av. ADCP ! ln_velhradcp Logical switch for velocity high freq. ADCP ! ln_velfb Logical switch for feedback velocity data ! ln_grid_global Global distribtion of observations ! ln_grid_search_lookup Logical switch for obs grid search w/lookup table ! grid_search_file Grid search lookup file header ! enactfiles ENACT input observation file names ! coriofiles Coriolis input observation file name ! ! profbfiles: Profile feedback input observation file name profbfiles = $NPROFFILES ln_profb_enatim = .true. ! ln_profb_enatim Enact feedback input time setting switch ! slafilesact Active SLA input observation file name ! slafilespas Passive SLA input observation file name ! ! slafbfiles: Feedback SLA input observation file nam slafbfiles = $NSLAFILES ! sstfiles GHRSST input observation file name ! ! sstfbfiles: Feedback SST input observation file name ! seaicefiles Sea Ice input observation file name ! velavcurfiles Vel. cur. daily av. input file name ! velhvcurfiles Vel. cur. high freq. input file name ! velavadcpfiles Vel. ADCP daily av. input file name ! velhvadcpfiles Vel. ADCP high freq. input file name ! velfbfiles Vel. feedback input observation file name ! dobsini Initial date in window YYYYMMDD.HHMMSS ! dobsend Final date in window YYYYMMDD.HHMMSS ! n1dint Type of vertical interpolation method ! n2dint Type of horizontal interpolation method ! ln_nea Rejection of observations near land switch nmsshc = 1 ! MSSH correction scheme ! mdtcorr MDT correction ! mdtcutoff MDT cutoff for computed correction ln_altbias = .false. ! Logical switch for alt bias ln_ignmis = .true. ! Logical switch for ignoring missing files ! endailyavtypes ENACT daily average types ln_grid_global = .true. ln_grid_search_lookup = $GRIDLOOKUP ln_velfb = $LCUR ln_vel3d = $LCUR ln_vel3dw = ${LCURW:-false} velfbfiles = $CURFBDATA ln_velfb_av = $CURFBAVG ln_vel2d = ${LCURSURF:-.false.} velfb2dfiles = ${CURSURFFBDATA:-\"\"} n1dint = 1 n2dint = 3 ln_nea = .true. mdtcutoff = 65.0 mdtcorr = 1.61 dobsini = $NDATE0 dobsend = ${OBSWINEND:-$NDATEND} ln_profb_ena = $LNPROFBENA ln_profb_enatim = $LNPROFBENATIM ln_seaice = $LNSEAICE ln_grdseaice = $LNGRDSEAICE ln_seaicefb = $LNSEAICEFB grdseaicename = 'ice_cover_yYYYYmMM.nc' seaicefbfiles = ${NAM_SEAICEFILES:-''} nicethin = ${NAM_NICETHIN:-1} ! Thinning factor for reading gridded seaice obs ln_seaicepos = ${LN_SEAICEPOS:=.FALSE.} ! Logical switch for seaice gridded obs perturbation iceprobseed = ${ICEPROBSEED:-0} ! Seed for seaice obs perturbation ln_obsmpppack = ${LN_OBSMPPPACK:=.TRUE.} / !----------------------------------------------------------------------- &nam_asminc ! assimilation increments ('key_asminc') !----------------------------------------------------------------------- ln_bkgwri = $LBKGWRI ! Logical switch for writing out background state ln_trainc = $LTRAINC ! Logical switch for applying tracer increments ln_dyninc = $LDYNINC ! Logical switch for applying velocity increments ln_sshinc = $LSSHINC ! Logical switch for applying SSH increments ln_seaiceinc = $LSEAICEINC ! Logical switch for applying seaice increments ln_asmdin = $LASMDIN ! Logical switch for Direct Initialization (DI) ln_asmiau = $LASMIAU ! Logical switch for Incremental Analysis Updating (IAU) nitbkg = 0 ! Timestep of background in [0,nitend-nit000-1] nitdin = 0 ! Timestep of background for DI in [0,nitend-nit000-1] nitiaustr = 1 ! Timestep of start of IAU interval in [0,nitend-nit000-1] nitiaufin = $NITIAUFIN ! Timestep of end of IAU interval in [0,nitend-nit000-1] niaufn = 0 ! Type of IAU weighting function ln_salfix = .false. ! Logical switch for ensuring that the sa > salfixmin salfixmin = -9999 ! Minimum salinity after applying the increments nn_divdmp = ${NN_DIVDMP:=0} ! Number of iterations of divergence damping operator / &namtrj cn_dirtrj = 'tam_trajectory' ln_trjhand = .FALSE. nn_ittrjfrq = 1 ln_trj_spl = .TRUE. / !----------------------------------------------------------------------- &nambias ! Parameters for bias corrections #ifdef key_bias) !----------------------------------------------------------------------- ln_bias = $LN_BIAS ! activate bias correction ln_bias_asm = $BIAS_ASM ! use assim bias ln_bias_rlx = .FALSE. ! use clim-relax bias ln_bias_ofl = $LN_BIAS_OFL ! use off-line bias ln_bias_ts_app=${LN_BIAS_TS_APP:=.TRUE.} ! apply bias to Temp/Sal directly ln_bias_pc_app=${LN_BIAS_PC_APP:=.TRUE.} ! apply bias to pressure gradient cn_bias_tot = 'bias_tot.nc' !file name with bias file (restart) cn_bias_asm = 'bias_asm.nc' !file name " " from assim ! dir and structures for offline bias (using fldread conventions) cn_dir = './' sn_tbias_ofl= 'tbias_ofl', -1,'tbias', .true., .true., 'yearly' sn_sbias_ofl= 'sbias_ofl', -1,'sbias', .true., .true., 'yearly' bias_time_unit_asm = $BIASTIMEUNITASM ! time unit of asm bias fb_t_asm = ${RN_FB_T_ASM:=0.02} ! partition of total bias for T/S fb_t_rlx = 1. ! " " " " in T/S fb_t_ofl = ${RN_FB_T_OFL:=.1} fb_p_rlx = 1. fb_p_asm = ${RN_FB_P_ASM:=0.3} fb_p_ofl = ${RN_FB_P_OFL:=1.} nn_inertial = $NN_INERTIAL !0/1/2 0/sin(lat)**2/gausian gphit0 = ${RN_GPHIT0:=10.} !length for guassian tappering fctamp = ${RN_FCTAMP:=10.} eft_rlx = 1800. ! efolding time for rlx bias estimation eft_asm = ${RN_EFT_ASM:=1800.} ! efolding time for asm bias estimation 5y t_rlx_upd = 0.05 ! update fct rlx bias " (0. -> 1.) t_asm_upd = ${RN_T_ASM_UPD:=0.05} ! update fct assim bias " (0. -> 1.) lrst_biasr =$LRST_BIASR !force to read bias file at first time step capN2val = ${CAPN2VAL:=-1} !if larger than 0, cap N2 min val (~1.e-6) / !----------------------------------------------------------------------- &namsbc_wave ! External fields from wave model !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_cdg = 'cdww' , ${FREQWAM:-6} , 'cdww' , ${NAMCDWWINT:-.false.} , .false., 'monthly' , '' , '' ! cn_dir_cdg = './' ! root directory for the location of drag coefficient files / !----------------------------------------------------------------------- &namsbc_waveparlim !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_strn = 'istr' , 6 , 'icestrain' , .true. , .false. , 'monthly' , '' , '' cn_dir_waveparlim = './' ! root directory for the location of the ECWAM files / !----------------------------------------------------------------------- &namdyn_nept ! Neptune effect (simplified: lateral and vertical diffusions removed) !----------------------------------------------------------------------- ! Suggested lengthscale values are those of Eby & Holloway (1994) for a coarse model ln_neptsimp = .false. ! yes/no use simplified neptune ln_smooth_neptvel = .false. ! yes/no smooth zunep, zvnep rn_tslse = 1.2e4 ! value of lengthscale L at the equator rn_tslsp = 3.0e3 ! value of lengthscale L at the pole ! Specify whether to ramp down the Neptune velocity in shallow ! water, and if so the depth range controlling such ramping down ln_neptramp = .true. ! ramp down Neptune velocity in shallow water rn_htrmin = 100.0 ! min. depth of transition range rn_htrmax = 200.0 ! max. depth of transition range / !----------------------------------------------------------------------- &namtam ! TAM trajactory !----------------------------------------------------------------------- cn_dirtrj = 'tam_trajectory' ln_trjwri = .FALSE. nn_ittrjfrq = 1 ln_trj_spl = .TRUE. / !----------------------------------------------------------------------- &namsbc_wavepar ! namsbc_wavepar parameters from wave model (CCC not identical to namsbc_wave) !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_ust = 'ust' , ${FREQWAM:-6} , 'ust' , .false. , .false. , 'monthly' , '' , '' sn_vst = 'vst' , ${FREQWAM:-6} , 'vst' , .false. , .false. , 'monthly' , '' , '' sn_swh = 'swh' , ${FREQWAM:-6} , 'swh' , .false. , .false. , 'monthly' , '' , '' sn_mwp = 'mwp' , ${FREQWAM:-6} , 'mwp' , .false. , .false. , 'monthly' , '' , '' sn_wspd = 'wspd' , ${FREQWAM:-6} , 'wspd' , .false. , .false. , 'monthly' , '' , '' sn_phioc = 'phioc' , ${FREQWAM:-6} , 'phioc' , .false. , .false. , 'monthly' , '' , '' sn_tauoc = 'tauoc' , ${FREQWAM:-6} , 'tauoc' , .false. , .false. , 'monthly' , '' , '' cn_dir_wavepar = './' ! root directory for the location of the ECWAM files / !----------------------------------------------------------------------- &namdebug jpig1=139 jpig2=142 jpjg1=74 jpjg2=77 jpkg1=1 jpkg2=10 kt1=10 kt2=20 / !----------------------------------------------------------------------- eof_namelist else print "Defaults for ${OUT_GRID}_Z${OUT_LEVELS} not known" exit 1 fi if [[ ${OUT_GRID} = "ORCA1" ]]; then cat > namelist_ice <>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !! NEMO/LIM-2 : 1 - dynamics/advection/thermo (namicerun) !! namelists 2 - ice intialisation (namiceini) !! 3 - ice dynamic (namicedyn) !! 4 - ice advection (namicetrp) !! 5 - thermodynamic (namicethd) !! 6 - ice damping (namice_dmp) !! 7 - ice diagnostics (namicedia) !! 8 - ice outputs (namiceout) !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !----------------------------------------------------------------------- &namicerun ! Share parameters for dynamics/advection/thermo !----------------------------------------------------------------------- cn_icerst_in = "restart_ice_in" ! suffix of ice restart name (input) cn_icerst_out = "restart_ice" ! suffix of ice restart name (output) ln_icerstnc4 = ${LIMRSTNC4:-false} ! netCDF4 for restart output ln_limdyn = .true. ! ice dynamics (T) or thermodynamics only (F) ln_limdyn_oce = .true. ! using ocean time step to update u/vtau (T) or not (F) ln_limdmp = .false. ! restoring ice thickness and fraction ! leads around the boundaries (T => fill namice_dmp) ln_limsurfdmp = $LN_SURFDMP_LIM ! restoring ice thickness and fraction leads acrit = 1.0e-06 , 1.0e-06 ! minimum lead fraction in the Northern & Southern Hemispheres hsndif = 0.e0 ! computation of temperature in snow (=0.0) or not hicdif = 0.e0 ! computation of temperature in ice (=0.0) or not (=9999.0) / !----------------------------------------------------------------------- &namiceini ! ice initialisation !----------------------------------------------------------------------- ln_limini = $LN_INILIM ! read the initial state in 'Ice_initialization.nc' (T) or not (F) ttest = 2.0 ! threshold water temperature for initial sea ice hninn = 0.5 ! initial snow thickness in the north hginn = 3.0 ! initial ice thickness in the north alinn = 0.05 ! initial leads area in the north hnins = 0.1 ! same three parameter in the south hgins = 1.0 ! " " south alins = 0.1 ! " " south / !----------------------------------------------------------------------- &namicedyn ! ice dynamic !----------------------------------------------------------------------- epsd = 1.0e-20 ! tolerance parameter alpha = 0.5 ! coefficient for semi-implicit coriolis dm = 0.6e+03 ! diffusion constant for dynamics nbiter = 1 ! number of sub-time steps for relaxation nbitdr = ${NAM_NBITDR:-100} ! maximum number of iterations for relaxation om = 0.5 ! relaxation constant resl = 5.0e-05 ! maximum value for the residual of relaxation cw = 5.0e-03 ! drag coefficient for oceanic stress angvg = 0.0 ! turning angle for oceanic stress pstar = $PSTAR_LIM ! 1st bulk-rheology parameter c_rhg = 20.0 ! 2nd bulk-rhelogy parameter etamn = 0.0e+07 ! minimun value for viscosity creepl = 2.0e-08 ! creep limit ecc = 2.0 ! eccentricity of the elliptical yield curve ahi0 = 200.e0 ! horizontal eddy diffusivity coefficient for sea-ice [m2/s] ! nevp = 120 ! number of EVP subcycling iterations (ORCA0083) nevp = 360 ! number of EVP subcycling iterations ! telast = 9600 ! timescale for EVP elastic waves ! telast = 3200 ! timescale for EVP elastic waves ! telast = 19200 ! timescale for EVP elastic waves (ORCA0083) telast = 3600 ! timescale for EVP elastic waves alphaevp = 1.0 ! coefficient for the solution of EVP int. stresses / !----------------------------------------------------------------------- &namicetrp ! ice transport !----------------------------------------------------------------------- bound = 0.0 ! boundary conditions (=0. no-slip, =1. free-slip) / !----------------------------------------------------------------------- &namicethd ! ice thermodynamic !----------------------------------------------------------------------- hmelt = -0.15 ! maximum melting at the bottom hiccrit = 0.6 , 0.3 ! ice thickness for lateral accretion in the Northern (Southern) Hemisphere ! ! (caution 1.0, 1.0 best value to be used!!! (gilles G.)) hicmin = 0.2 ! ice thickness corr. to max. energy stored in brine pocket hiclim = 0.05 ! minimum ice thickness amax = 0.999 ! maximum lead fraction swiqst = 1. ! energy stored in brine pocket (=1) or not (=0) sbeta = 1. ! numerical caracteritic of the scheme for diffusion in ice ! Cranck-Nicholson (=0.5), implicit (=1), explicit (=0) parlat = 0.0 ! percentage of energy used for lateral ablation hakspl = 0.5 ! slope of distr. for Hakkinen-Mellor's lateral melting hibspl = 0.5 ! slope of distribution for Hibler's lateral melting exld = 2.0 ! exponent for leads-closure rate hakdif = 1.0 ! coefficient for diffusions of ice and snow thth = 0.2 ! threshold thickness for comp. of eq. thermal conductivity hnzst = 0.1 ! thickness of the surf. layer in temp. computation parsub = $PARSUB ! switch for snow sublimation or not alphs = 1.0 ! coefficient for snow density when snow ice formation / !----------------------------------------------------------------------- &namice_dmp ! damping of sea ice !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_frld = ${ICE_COVER_DMP_FIELD:-"'ice_cover',24,'ice_cov',.true.,.false.,'monthly','',''"} sn_hicif = ${ICE_THICK_DMP_FIELD:-"'ice_thick',-1,'hicif',.true.,.true.,'yearly','',''"} ! cn_dir = './' ! root directory for the location of the runoff files nn_frldr = $NN_FRLDR_LIM ! restore ice cover ( > 0 ) or not ( = 0 ) nn_hicifr = $NN_HICIFR_LIM ! restore ice thickness ( = 1 ) or not ( = 0 ) himin = $HIMIN_LIM ! minimum hicif after restoring frimin = $FRIMIN_LIM ! minimum ice cover after restoring rn_dfldt = $RN_DFLDT_LIM ! restoring magnitude of the ice cover [days] rn_dhidt = $RN_DHIDT_LIM ! restoring magnitude of the ice thickness [days] alpha_limdmp = $ALPHA_LIMDMP ! Power given to model error for weighting factor robs_limdmp = $ROBS_LIMDMP ! Error variance of observation for weighting factor / !----------------------------------------------------------------------- &namicedia ! ice diagnostics !----------------------------------------------------------------------- fmtinf = '1PE13.5' ! format of the output values nfrinf = 4 ! number of variables written in one line ntmoy = 1 ! instantaneous values of ice evolution or averaging ninfo = 1 ! frequency of ouputs on file ice_evolu in case of averaging / !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' &namiceout ! parameters for outputs !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ! ! title of the field ! name ! units ! save ! multipl. ! additive ! ! ! ! ! ! or not ! factor ! factor ! field_1 = 'Snow thickness ', 'isnowthi', 'm ', 1 , 1.0 , 0.0 field_2 = 'Ice thickness ', 'iicethic', 'm ', 1 , 1.0 , 0.0 field_3 = 'Ice produced ', 'iiceprod', 'm/kt ', 1 , 1.0 , 0.0 field_4 = 'Ice concentration ', 'ileadfra', 'Fraction', 1 , -1.0 , 1.0 field_5 = 'Ice temperature ', 'iicetemp', 'C ', 1 , 1.0 , -273.15 field_6 = 'Oceanic flux at the ice base ', 'ioceflxb', 'w/m2 ', 1 , 1.0 , 0.0 field_7 = 'Ice velocity u ', 'iicevelu', 'm/s ', 0 , 1.0 , 0.0 field_8 = 'Ice velocity v ', 'iicevelv', 'm/s ', 0 , 1.0 , 0.0 field_9 = 'Sea surface temperature ', 'isstempe', 'C ', 1 , 1.0 , 0.0 field_10 = 'Sea surface salinity ', 'isssalin', 'PSU ', 1 , 1.0 , 0.0 field_11 = 'Total flux at ocean surface ', 'iocetflx', 'w/m2 ', 1 , 1.0 , 0.0 field_12 = 'Solar flux at ocean surface ', 'iocesflx', 'w/m2 ', 1 , 1.0 , 0.0 field_13 = 'Non-solar flux at ocean surface ', 'iocwnsfl', 'w/m2 ', 1 , 1.0 , 0.0 field_14 = 'Salt flux at ocean surface ', 'iocesafl', 'kg/m2/kt', 1 , 1.0 , 0.0 field_15 = 'Wind stress u ', 'iocestru', 'Pa ', 0 , 1.0 , 0.0 field_16 = 'Wind stress v ', 'iocestrv', 'Pa ', 0 , 1.0 , 0.0 field_17 = 'Solar flux at ice/ocean surface ', 'iicesflx', 'w/m2 ', 1 , 1.0 , 0.0 field_18 = 'Non-solar flux at ice/ocean surface', 'iicenflx', 'w/m2 ', 1 , 1.0 , 0.0 field_19 = 'Snow precipitation ', 'isnowpre', 'kg/day ', 1 , 1.0 , 0.0 field_20 = '1st Qsr fraction penetrating ice ', 'iifr1_i0', '- ', 1 , 1.0 , 0.0 field_21 = '2nd Qsr fraction penetrating ice ', 'iifr2_i0', '- ', 1 , 1.0 , 0.0 field_22 = 'Ice velocity u ', 'iicevelu', 'm/s ', 1 , 1.0 , 0.0 field_23 = 'Ice velocity v ', 'iicevelv', 'm/s ', 1 , 1.0 , 0.0 field_24 = 'Wind stress u ', 'iocestru', 'Pa ', 1 , 1.0 , 0.0 field_25 = 'Wind stress v ', 'iocestrv', 'Pa ', 1 , 1.0 , 0.0 field_26 = 'Surface temperature (snow/ice/sst) ', 'isrftemp', 'C ', 1 , 1.0 , 0.0 field_27 = 'Ice mean thickness ', 'iicemthi', 'm ', 1 , 1.0 , 0.0 field_28 = 'Temp inside the ice/snow layer 1 ', 'iitempl1', 'C ', 1 , 1.0 , -273.15 field_29 = 'Temp inside the ice/snow layer 2 ', 'iitempl2', 'C ', 1 , 1.0 , -273.15 field_30 = 'Temp inside the ice/snow layer 3 ', 'iitempl3', 'C ', 1 , 1.0 , -273.15 ! noumef = ${LIMNOUMEF:-30} ! number of fields climoutpath = "${OCEOUTPATH:-./}" ln_nc4zip_lim = ${LIMOUTNC4:-false} ! netCDF4 for output / eof_namelist_ice elif [[ ${OUT_GRID} = "ORCA025" ]]; then # ecflow: uncomment or replace # with percent, but this is not SMS compatible #cat > namelist_ice < #eof_namelist_ice # SMS compatible # reduce output for nemo hindcast INT-298 case ${_RUNHINDCAST_} in 1 | true) # HINDCAST mode cat > namelist_ice <>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !! NEMO/LIM-2 : 1 - dynamics/advection/thermo (namicerun) !! namelists 2 - ice intialisation (namiceini) !! 3 - ice dynamic (namicedyn) !! 4 - ice advection (namicetrp) !! 5 - thermodynamic (namicethd) !! 6 - ice damping (namice_dmp) !! 7 - ice diagnostics (namicedia) !! 8 - ice outputs (namiceout) !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !----------------------------------------------------------------------- &namicerun ! Share parameters for dynamics/advection/thermo !----------------------------------------------------------------------- cn_icerst_in = "restart_ice_in" ! suffix of ice restart name (input) cn_icerst_out = "restart_ice" ! suffix of ice restart name (output) ln_icerstnc4 = ${LIMRSTNC4:-false} ! netCDF4 for restart output ln_limdyn = .true. ! ice dynamics (T) or thermodynamics only (F) ln_limdyn_oce = .true. ! using ocean time step to update u/vtau (T) or not (F) ln_limdmp = .false. ! restoring ice thickness and fraction ! leads around the boundaries (T => fill namice_dmp) ln_limsurfdmp = $LN_SURFDMP_LIM ! restoring ice thickness and fraction leads acrit = 1.0e-06 , 1.0e-06 ! minimum lead fraction in the Northern & Southern Hemispheres hsndif = 0.e0 ! computation of temperature in snow (=0.0) or not hicdif = 0.e0 ! computation of temperature in ice (=0.0) or not (=9999.0) / !----------------------------------------------------------------------- &namiceini ! ice initialisation !----------------------------------------------------------------------- ln_limini = $LN_INILIM ! read the initial state in 'Ice_initialization.nc' (T) or not (F) ttest = 2.0 ! threshold water temperature for initial sea ice hninn = 0.5 ! initial snow thickness in the north hginn = 3.0 ! initial ice thickness in the north alinn = 0.05 ! initial leads area in the north hnins = 0.1 ! same three parameter in the south hgins = 1.0 ! " " south alins = 0.1 ! " " south / !----------------------------------------------------------------------- &namicedyn ! ice dynamic ! take values from GG run MJM95 !----------------------------------------------------------------------- epsd = 1.0e-20 ! tolerance parameter alpha = 0.5 ! coefficient for semi-implicit coriolis dm = 0.0e+03 ! 0.6e+03 ! diffusion constant for dynamics nbiter = 1 ! number of sub-time steps for relaxation nbitdr = ${NAM_NBITDR:-250} ! 100 ! maximum number of iterations for relaxation om = 0.5 ! relaxation constant resl = 5.0e-05 ! maximum value for the residual of relaxation cw = ${NAM_LIM_CW:-1.0e-02} ! 5.0e-03 ! drag coefficient for oceanic stress angvg = 0.0 ! turning angle for oceanic stress pstar = $PSTAR_LIM ! 1.0e+04 ! 1st bulk-rheology parameter c_rhg = 20.0 ! 2nd bulk-rhelogy parameter etamn = 0.0e+07 ! minimun value for viscosity creepl = 1.0e-09 ! 2.0e-08 ! creep limit ecc = 2.0 ! eccentricity of the elliptical yield curve ahi0 = ${NAM_LIM_ahi0:-100.e0} ! 200.e0 ! horizontal eddy diffusivity coefficient for sea-ice [m2/s] nevp = 360 ! number of iterations for subcycling telast = 3600 ! timescale for elastic waves alphaevp = 1.0 ! coefficient for the solution of int. stresses / !----------------------------------------------------------------------- &namicetrp ! ice transport !----------------------------------------------------------------------- bound = 0.0 ! boundary conditions (=0. no-slip, =1. free-slip) / !----------------------------------------------------------------------- &namicethd ! ice thermodynamic !----------------------------------------------------------------------- hmelt = -0.15 ! maximum melting at the bottom hiccrit = ${NAM_LIM_NHHIC:-0.6} , ${NAM_LIM_SHHIC:-0.5} ! ice thickness for lateral accretion in the Northern (Southern) Hemisphere ! ! (caution 1.0, 1.0 best value to be used!!! (gilles G.)) hicmin = 0.2 ! ice thickness corr. to max. energy stored in brine pocket hiclim = 0.05 ! minimum ice thickness amax = 0.999 ! maximum lead fraction swiqst = 1. ! energy stored in brine pocket (=1) or not (=0) sbeta = 1. ! numerical caracteritic of the scheme for diffusion in ice ! Cranck-Nicholson (=0.5), implicit (=1), explicit (=0) parlat = 0.0 ! percentage of energy used for lateral ablation hakspl = 0.5 ! slope of distr. for Hakkinen-Mellor's lateral melting hibspl = 0.5 ! slope of distribution for Hibler's lateral melting exld = 2.0 ! exponent for leads-closure rate hakdif = 1.0 ! coefficient for diffusions of ice and snow thth = 0.2 ! threshold thickness for comp. of eq. thermal conductivity hnzst = 0.1 ! thickness of the surf. layer in temp. computation parsub = $PARSUB ! switch for snow sublimation or not alphs = 1.0 ! coefficient for snow density when snow ice formation / !----------------------------------------------------------------------- &namice_dmp ! damping of sea ice !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_frld = ${ICE_COVER_DMP_FIELD:-"'ice_cover',24,'ice_cov',.true.,.false.,'monthly','',''"} sn_hicif = ${ICE_THICK_DMP_FIELD:-"'ice_thick',-1,'hicif',.true.,.true.,'yearly','',''"} ! cn_dir = './' ! root directory for the location of the runoff files nn_frldr = $NN_FRLDR_LIM ! restore ice cover ( > 0 ) or not ( = 0 ) nn_hicifr = $NN_HICIFR_LIM ! restore ice thickness ( = 1 ) or not ( = 0 ) himin = $HIMIN_LIM ! minimum hicif after restoring frimin = $FRIMIN_LIM ! minimum ice cover after restoring rn_dfldt = $RN_DFLDT_LIM ! restoring magnitude of the ice cover [days] rn_dhidt = $RN_DHIDT_LIM ! restoring magnitude of the ice thickness [days] alpha_limdmp = $ALPHA_LIMDMP ! Power given to model error for weighting factor robs_limdmp = $ROBS_LIMDMP ! Error variance of observation for weighting factor / !----------------------------------------------------------------------- &namicedia ! ice diagnostics !----------------------------------------------------------------------- fmtinf = '1PE13.5' ! format of the output values nfrinf = 4 ! number of variables written in one line ntmoy = 1 ! instantaneous values of ice evolution or averaging ninfo = 1 ! frequency of ouputs on file ice_evolu in case of averaging / !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' &namiceout ! parameters for outputs !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ! ! title of the field ! name ! units ! save ! multipl. ! additive ! ! ! ! ! ! or not ! factor ! factor ! field_1 = 'Snow thickness ', 'isnowthi', 'm ', 0 , 1.0 , 0.0 field_2 = 'Ice thickness ', 'iicethic', 'm ', 0 , 1.0 , 0.0 field_3 = 'Ice produced ', 'iiceprod', 'm/kt ', 0 , 1.0 , 0.0 field_4 = 'Ice concentration ', 'ileadfra', 'Fraction', 1 , -1.0 , 1.0 field_5 = 'Ice temperature ', 'iicetemp', 'C ', 0 , 1.0 , -273.15 field_6 = 'Oceanic flux at the ice base ', 'ioceflxb', 'w/m2 ', 0 , 1.0 , 0.0 field_7 = 'Ice velocity along i axis ', 'iicevelu', 'm/s ', 0 , 1.0 , 0.0 field_8 = 'Ice velocity along j axis ', 'iicevelv', 'm/s ', 0 , 1.0 , 0.0 field_9 = 'Sea surface temperature ', 'isstempe', 'C ', 0 , 1.0 , 0.0 field_10 = 'Sea surface salinity ', 'isssalin', 'PSU ', 0 , 1.0 , 0.0 field_11 = 'Total flux at ocean surface ', 'iocetflx', 'w/m2 ', 0 , 1.0 , 0.0 field_12 = 'Solar flux at ocean surface ', 'iocesflx', 'w/m2 ', 0 , 1.0 , 0.0 field_13 = 'Non-solar flux at ocean surface ', 'iocwnsfl', 'w/m2 ', 0 , 1.0 , 0.0 field_14 = 'Salt flux at ocean surface ', 'iocesafl', 'kg/m2/kt', 0 , 1.0 , 0.0 field_15 = 'Wind stress along i axis ', 'iocestru', 'Pa ', 0 , 1.0 , 0.0 field_16 = 'Wind stress along j axis ', 'iocestrv', 'Pa ', 0 , 1.0 , 0.0 field_17 = 'Solar flux at ice/ocean surface ', 'iicesflx', 'w/m2 ', 0 , 1.0 , 0.0 field_18 = 'Non-solar flux at ice/ocean surface', 'iicenflx', 'w/m2 ', 0 , 1.0 , 0.0 field_19 = 'Snow precipitation ', 'isnowpre', 'kg/day ', 0 , 1.0 , 0.0 field_20 = '1st Qsr fraction penetrating ice ', 'iifr1_i0', '- ', 0 , 1.0 , 0.0 field_21 = '2nd Qsr fraction penetrating ice ', 'iifr2_i0', '- ', 0 , 1.0 , 0.0 field_22 = 'Ice velocity u ', 'iicevelu', 'm/s ', 1 , 1.0 , 0.0 field_23 = 'Ice velocity v ', 'iicevelv', 'm/s ', 1 , 1.0 , 0.0 field_24 = 'Wind stress u ', 'iocestru', 'Pa ', 0 , 1.0 , 0.0 field_25 = 'Wind stress v ', 'iocestrv', 'Pa ', 0 , 1.0 , 0.0 field_26 = 'Surface temperature (snow/ice/sst) ', 'isrftemp', 'C ', 0 , 1.0 , 0.0 field_27 = 'Ice mean thickness ', 'iicemthi', 'm ', 1 , 1.0 , 0.0 field_28 = 'Temp inside the ice/snow layer 1 ', 'iitempl1', 'C ', 0 , 1.0 , -273.15 field_29 = 'Temp inside the ice/snow layer 2 ', 'iitempl2', 'C ', 0 , 1.0 , -273.15 field_30 = 'Temp inside the ice/snow layer 3 ', 'iitempl3', 'C ', 0 , 1.0 , -273.15 ! noumef = ${LIMNOUMEF:-30} ! number of fields climoutpath = "${OCEOUTPATH:-./}" ln_nc4zip_lim = ${LIMOUTNC4:-false} ! netCDF4 for output / eof_namelist_ice ;; *) # real-time mode cat > namelist_ice <>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !! NEMO/LIM-2 : 1 - dynamics/advection/thermo (namicerun) !! namelists 2 - ice intialisation (namiceini) !! 3 - ice dynamic (namicedyn) !! 4 - ice advection (namicetrp) !! 5 - thermodynamic (namicethd) !! 6 - ice damping (namice_dmp) !! 7 - ice diagnostics (namicedia) !! 8 - ice outputs (namiceout) !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !----------------------------------------------------------------------- &namicerun ! Share parameters for dynamics/advection/thermo !----------------------------------------------------------------------- cn_icerst_in = "restart_ice_in" ! suffix of ice restart name (input) cn_icerst_out = "restart_ice" ! suffix of ice restart name (output) ln_icerstnc4 = ${LIMRSTNC4:-false} ! netCDF4 for restart output ln_limdyn = .true. ! ice dynamics (T) or thermodynamics only (F) ln_limdyn_oce = .true. ! using ocean time step to update u/vtau (T) or not (F) ln_limdmp = .false. ! restoring ice thickness and fraction ! leads around the boundaries (T => fill namice_dmp) ln_limsurfdmp = $LN_SURFDMP_LIM ! restoring ice thickness and fraction leads acrit = 1.0e-06 , 1.0e-06 ! minimum lead fraction in the Northern & Southern Hemispheres hsndif = 0.e0 ! computation of temperature in snow (=0.0) or not hicdif = 0.e0 ! computation of temperature in ice (=0.0) or not (=9999.0) / !----------------------------------------------------------------------- &namiceini ! ice initialisation !----------------------------------------------------------------------- ln_limini = $LN_INILIM ! read the initial state in 'Ice_initialization.nc' (T) or not (F) ttest = 2.0 ! threshold water temperature for initial sea ice hninn = 0.5 ! initial snow thickness in the north hginn = 3.0 ! initial ice thickness in the north alinn = 0.05 ! initial leads area in the north hnins = 0.1 ! same three parameter in the south hgins = 1.0 ! " " south alins = 0.1 ! " " south / !----------------------------------------------------------------------- &namicedyn ! ice dynamic ! take values from GG run MJM95 !----------------------------------------------------------------------- epsd = 1.0e-20 ! tolerance parameter alpha = 0.5 ! coefficient for semi-implicit coriolis dm = 0.0e+03 ! 0.6e+03 ! diffusion constant for dynamics nbiter = 1 ! number of sub-time steps for relaxation nbitdr = ${NAM_NBITDR:-250} ! 100 ! maximum number of iterations for relaxation om = 0.5 ! relaxation constant resl = 5.0e-05 ! maximum value for the residual of relaxation cw = ${NAM_LIM_CW:-1.0e-02} ! 5.0e-03 ! drag coefficient for oceanic stress angvg = 0.0 ! turning angle for oceanic stress pstar = $PSTAR_LIM ! 1.0e+04 ! 1st bulk-rheology parameter c_rhg = 20.0 ! 2nd bulk-rhelogy parameter etamn = 0.0e+07 ! minimun value for viscosity creepl = 1.0e-09 ! 2.0e-08 ! creep limit ecc = 2.0 ! eccentricity of the elliptical yield curve ahi0 = ${NAM_LIM_ahi0:-100.e0} ! 200.e0 ! horizontal eddy diffusivity coefficient for sea-ice [m2/s] nevp = 360 ! number of iterations for subcycling telast = 3600 ! timescale for elastic waves alphaevp = 1.0 ! coefficient for the solution of int. stresses / !----------------------------------------------------------------------- &namicetrp ! ice transport !----------------------------------------------------------------------- bound = 0.0 ! boundary conditions (=0. no-slip, =1. free-slip) / !----------------------------------------------------------------------- &namicethd ! ice thermodynamic !----------------------------------------------------------------------- hmelt = -0.15 ! maximum melting at the bottom hiccrit = ${NAM_LIM_NHHIC:-0.6} , ${NAM_LIM_SHHIC:-0.5} ! ice thickness for lateral accretion in the Northern (Southern) Hemisphere ! ! (caution 1.0, 1.0 best value to be used!!! (gilles G.)) hicmin = 0.2 ! ice thickness corr. to max. energy stored in brine pocket hiclim = 0.05 ! minimum ice thickness amax = 0.999 ! maximum lead fraction swiqst = 1. ! energy stored in brine pocket (=1) or not (=0) sbeta = 1. ! numerical caracteritic of the scheme for diffusion in ice ! Cranck-Nicholson (=0.5), implicit (=1), explicit (=0) parlat = 0.0 ! percentage of energy used for lateral ablation hakspl = 0.5 ! slope of distr. for Hakkinen-Mellor's lateral melting hibspl = 0.5 ! slope of distribution for Hibler's lateral melting exld = 2.0 ! exponent for leads-closure rate hakdif = 1.0 ! coefficient for diffusions of ice and snow thth = 0.2 ! threshold thickness for comp. of eq. thermal conductivity hnzst = 0.1 ! thickness of the surf. layer in temp. computation parsub = $PARSUB ! switch for snow sublimation or not alphs = 1.0 ! coefficient for snow density when snow ice formation / !----------------------------------------------------------------------- &namice_dmp ! damping of sea ice !----------------------------------------------------------------------- ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! sn_frld = ${ICE_COVER_DMP_FIELD:-"'ice_cover',24,'ice_cov',.true.,.false.,'monthly','',''"} sn_hicif = ${ICE_THICK_DMP_FIELD:-"'ice_thick',-1,'hicif',.true.,.true.,'yearly','',''"} ! cn_dir = './' ! root directory for the location of the runoff files nn_frldr = $NN_FRLDR_LIM ! restore ice cover ( > 0 ) or not ( = 0 ) nn_hicifr = $NN_HICIFR_LIM ! restore ice thickness ( = 1 ) or not ( = 0 ) himin = $HIMIN_LIM ! minimum hicif after restoring frimin = $FRIMIN_LIM ! minimum ice cover after restoring rn_dfldt = $RN_DFLDT_LIM ! restoring magnitude of the ice cover [days] rn_dhidt = $RN_DHIDT_LIM ! restoring magnitude of the ice thickness [days] alpha_limdmp = $ALPHA_LIMDMP ! Power given to model error for weighting factor robs_limdmp = $ROBS_LIMDMP ! Error variance of observation for weighting factor / !----------------------------------------------------------------------- &namicedia ! ice diagnostics !----------------------------------------------------------------------- fmtinf = '1PE13.5' ! format of the output values nfrinf = 4 ! number of variables written in one line ntmoy = 1 ! instantaneous values of ice evolution or averaging ninfo = 1 ! frequency of ouputs on file ice_evolu in case of averaging / !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' &namiceout ! parameters for outputs !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ! ! title of the field ! name ! units ! save ! multipl. ! additive ! ! ! ! ! ! or not ! factor ! factor ! field_1 = 'Snow thickness ', 'isnowthi', 'm ', 1 , 1.0 , 0.0 field_2 = 'Ice thickness ', 'iicethic', 'm ', 1 , 1.0 , 0.0 field_3 = 'Ice produced ', 'iiceprod', 'm/kt ', 1 , 1.0 , 0.0 field_4 = 'Ice concentration ', 'ileadfra', 'Fraction', 1 , -1.0 , 1.0 field_5 = 'Ice temperature ', 'iicetemp', 'C ', 1 , 1.0 , -273.15 field_6 = 'Oceanic flux at the ice base ', 'ioceflxb', 'w/m2 ', 1 , 1.0 , 0.0 field_7 = 'Ice velocity along i axis ', 'iiceveli', 'm/s ', 0 , 1.0 , 0.0 field_8 = 'Ice velocity along j axis ', 'iicevelj', 'm/s ', 0 , 1.0 , 0.0 field_9 = 'Sea surface temperature ', 'isstempe', 'C ', 1 , 1.0 , 0.0 field_10 = 'Sea surface salinity ', 'isssalin', 'PSU ', 1 , 1.0 , 0.0 field_11 = 'Total flux at ocean surface ', 'iocetflx', 'w/m2 ', 0 , 1.0 , 0.0 field_12 = 'Solar flux at ocean surface ', 'iocesflx', 'w/m2 ', 0 , 1.0 , 0.0 field_13 = 'Non-solar flux at ocean surface ', 'iocwnsfl', 'w/m2 ', 0 , 1.0 , 0.0 field_14 = 'Salt flux at ocean surface ', 'iocesafl', 'kg/m2/kt', 1 , 1.0 , 0.0 field_15 = 'Wind stress along i axis ', 'iocestri', 'Pa ', 0 , 1.0 , 0.0 field_16 = 'Wind stress along j axis ', 'iocestrj', 'Pa ', 0 , 1.0 , 0.0 field_17 = 'Solar flux at ice/ocean surface ', 'iicesflx', 'w/m2 ', 1 , 1.0 , 0.0 field_18 = 'Non-solar flux at ice/ocean surface', 'iicenflx', 'w/m2 ', 1 , 1.0 , 0.0 field_19 = 'Snow precipitation ', 'isnowpre', 'kg/day ', 1 , 1.0 , 0.0 field_20 = '1st Qsr fraction penetrating ice ', 'iifr1_i0', '- ', 0 , 1.0 , 0.0 field_21 = '2nd Qsr fraction penetrating ice ', 'iifr2_i0', '- ', 0 , 1.0 , 0.0 field_22 = 'Ice velocity u ', 'iicevelu', 'm/s ', 1 , 1.0 , 0.0 field_23 = 'Ice velocity v ', 'iicevelv', 'm/s ', 1 , 1.0 , 0.0 field_24 = 'Wind stress u ', 'iocestru', 'Pa ', 0 , 1.0 , 0.0 field_25 = 'Wind stress v ', 'iocestrv', 'Pa ', 0 , 1.0 , 0.0 field_26 = 'Surface temperature (snow/ice/sst) ', 'isrftemp', 'C ', 1 , 1.0 , 0.0 field_27 = 'Ice mean thickness ', 'iicemthi', 'm ', 1 , 1.0 , 0.0 field_28 = 'Temp inside the ice/snow layer 1 ', 'iitempl1', 'C ', 1 , 1.0 , -273.15 field_29 = 'Temp inside the ice/snow layer 2 ', 'iitempl2', 'C ', 1 , 1.0 , -273.15 field_30 = 'Temp inside the ice/snow layer 3 ', 'iitempl3', 'C ', 1 , 1.0 , -273.15 ! noumef = ${LIMNOUMEF:-30} ! number of fields climoutpath = "${OCEOUTPATH:-./}" ln_nc4zip_lim = ${LIMOUTNC4:-false} ! netCDF4 for output / eof_namelist_ice ;; esac # /SMS compatible else print "Ice defaults for ${OUT_GRID} not known" exit 1 fi # The following only works with ecFlow, it is not SMS compatible. # To use you must uncomment/replace # with percent. An SMS compatible # alternative is below. #cat >> namelist < #eof_namelist # # This is the SMS compatible version: case ${_RUNHINDCAST_} in 1 | true) # HINDCAST mode cat >> namelist <>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ! OPA namelist for different output streams ! ---------------------------------------- !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ! ! options for output of instantaneous fields ! ! in this example we use OUTSTREMS streams: ! Stream 1, complete set, type=1 (avg), regular frequence FREQ1 ! stream 2, complet set, type=1 (avg), FREQ2 (usually end of run) ! stream 3, complet set, type=1 (avg), FREQ3 (usually more frequent 2D flds) ! stream 4, complet set, type=0 (inst), FREQ4 (usually for debuging) ! nouttype=0 for instantaneous ! &nam_io nstreams = $OUTSTREAMS nouttype(1) = $OUT1TYPE noutfreq(1) = $OUT1FREQ lgridT(1) = $OUT1FLAG lgridU(1) = $OUT1FLAG lgridV(1) = $OUT1FLAG lgridW(1) = $OUT1FLAG lvotemper(1) = .TRUE. lvosaline(1) = .TRUE. lvottrdmp(1) = .TRUE. lvostrdmp(1) = .TRUE. lsosstsst(1) = .TRUE. lsosaline(1) = .TRUE. lsossheig(1) = .TRUE. lsostheig(1) = .TRUE. lsobpheig(1) = .TRUE. liowaflup(1) = .TRUE. lsowaflep(1) = .TRUE. lsowaflup(1) = .TRUE. lsorunoff(1) = .FALSE. lsowaflcd(1) = .FALSE. lsosalflx(1) = .TRUE. lsohefldo(1) = .TRUE. lsoshfldo(1) = .TRUE. lsomxl010(1) = .TRUE. lsomxl125(1) = .TRUE. lsomxl030(1) = .TRUE. lsomxlt05(1) = .TRUE. lsomxlt02(1) = .TRUE. lsomixhgt(1) = .TRUE. lsoicecov(1) = .TRUE. lsowafldp(1) = .TRUE. lsosafldp(1) = .TRUE. lsohefldp(1) = .TRUE. lsodsstmo(1) = .FALSE. lsodsstyy(1) = .FALSE. lsowafldp(1) = .TRUE. lsosafldp(1) = .TRUE. lsosurfps(1) = .FALSE. lsobowlin(1) = .FALSE. lsothedep(1) = .TRUE. lso14chgt(1) = .TRUE. lso17chgt(1) = .TRUE. lso20chgt(1) = .TRUE. lso28chgt(1) = .TRUE. lso26chgt(1) = .TRUE. lsohtc300(1) = .TRUE. lsohtc700(1) = .TRUE. lsohtcbtm(1) = .TRUE. lsosal300(1) = .TRUE. lsosal700(1) = .TRUE. lsosalbtm(1) = .TRUE. lsoicetem(1) = .TRUE. lsoicealb(1) = .TRUE. lvozocrte(1) = .TRUE. lsozocrte(1) = .FALSE. lsozotaue(1) = .TRUE. lvomecrtn(1) = .TRUE. lsomecrtn(1) = .FALSE. lsometaun(1) = .TRUE. lvozocrtx(1) = .TRUE. lvozoeivu(1) = .TRUE. lsozotaux(1) = .TRUE. lvomecrty(1) = .TRUE. lvomeeivv(1) = .TRUE. lsometauy(1) = .TRUE. lvovecrtz(1) = .TRUE. lvoveeivw(1) = .FALSE. lvotkeavt(1) = .FALSE. lvotkeevd(1) = .FALSE. lvotkeavm(1) = .FALSE. lvotkeevm(1) = .FALSE. lvoddmavs(1) = .FALSE. lsoleahtw(1) = .FALSE. lsoleaeiw(1) = .FALSE. lsohtc26c(1) = .FALSE. lsohtc26cd(1) = .FALSE. lvorotrot(1) = ${NEMOROTDIV:-.false.} lvodivdiv(1) = ${NEMOROTDIV:-.false.} nouttype(2) = $OUT2TYPE noutfreq(2) = $OUT2FREQ lgridT(2) = $OUT2FLAG lgridU(2) = $OUT2FLAG lgridV(2) = $OUT2FLAG lgridW(2) = $OUT2FLAG lmonthly(2)=$LN_MONTHLY lvotemper(2) = .TRUE. lvosaline(2) = .TRUE. lvosigmat(2) = .TRUE. lvottrdmp(2) = $OUT2FULL lvostrdmp(2) = $OUT2FULL lvotbiasd(2) = $OUT2FULL lvosbiasd(2) = $OUT2FULL lvotbiasp(2) = $OUT2FULL lvosbiasp(2) = $OUT2FULL lvorbiasp(2) = $OUT2FULL lsosstsst(2) = .TRUE. lsosaline(2) = .TRUE. lsossheig(2) = .TRUE. lsostheig(2) = .TRUE. lsobpheig(2) = .TRUE. liowaflup(2) = .TRUE. lsowaflep(2) = .TRUE. lsowaflup(2) = .TRUE. lsorunoff(2) = .TRUE. lsowaflcd(2) = .TRUE. lsosalflx(2) = .TRUE. lsohefldo(2) = .TRUE. lsoshfldo(2) = .TRUE. lsomxl010(2) = .TRUE. lsomxl125(2) = .TRUE. lsomxl030(2) = .TRUE. lsomxlt05(2) = .TRUE. lsomxlt02(2) = .TRUE. lsomixhgt(2) = .TRUE. lsoicecov(2) = .TRUE. lsowafldp(2) = .TRUE. lsosafldp(2) = .TRUE. lsohefldp(2) = .TRUE. lsodsstmo(2) = .FALSE. lsodsstyy(2) = .FALSE. lsowafldp(2) = .TRUE. lsosafldp(2) = .TRUE. lsosurfps(2) = .FALSE. lsobowlin(2) = .FALSE. lsothedep(2) = .TRUE. lso14chgt(2) = .TRUE. lso17chgt(2) = .TRUE. lso20chgt(2) = .TRUE. lso28chgt(2) = .TRUE. lso26chgt(2) = .TRUE. lsohtc300(2) = .TRUE. lsohtc700(2) = .TRUE. lsohtcbtm(2) = .TRUE. lsosal300(2) = .TRUE. lsosal700(2) = .TRUE. lsosalbtm(2) = .TRUE. lsoicetem(2) = .TRUE. lsoicealb(2) = .TRUE. lvozocrte(2) = .TRUE. lsozocrte(2) = .FALSE. lsozotaue(2) = .TRUE. lvomecrtn(2) = .TRUE. lsomecrtn(2) = .FALSE. lsometaun(2) = .TRUE. lvozocrtx(2) = .TRUE. lvozoeivu(2) = .FALSE. lsozotaux(2) = .TRUE. lvomecrty(2) = .TRUE. lvomeeivv(2) = .FALSE. lsometauy(2) = .TRUE. lvovecrtz(2) = .TRUE. lvoveeivw(2) = .FALSE. lvotkeavt(2) = .FALSE. lvotkeevd(2) = .FALSE. lvotkeavm(2) = .FALSE. lvotkeevm(2) = .FALSE. lvoddmavs(2) = .FALSE. lsoleahtw(2) = .FALSE. lsoleaeiw(2) = .FALSE. lsohtc26c(2) = .FALSE. lsohtc26cd(2) = .FALSE. lvorotrot(2) = ${NEMOROTDIV:-.false.} lvodivdiv(2) = ${NEMOROTDIV:-.false.} nouttype(3) = $OUT3TYPE noutfreq(3) = $OUT3FREQ lgridT(3) = $OUT3FLAG lgridU(3) = .FALSE. lgridV(3) = .FALSE. lgridW(3) = .FALSE. lvotemper(3) = .FALSE. lvosaline(3) = .FALSE. lvosigmat(3) = .FALSE. lvottrdmp(3) = .FALSE. lvostrdmp(3) = .FALSE. lsosstsst(3) = .TRUE. lsosaline(3) = .TRUE. lsossheig(3) = .TRUE. lsostheig(3) = .FALSE. lsobpheig(3) = .FALSE. liowaflup(3) = .FALSE. lsowaflep(3) = .FALSE. lsowaflup(3) = .FALSE. lsorunoff(3) = .FALSE. lsowaflcd(3) = .FALSE. lsosalflx(3) = .FALSE. lsohefldo(3) = .FALSE. lsoshfldo(3) = .FALSE. lsomxl010(3) = .TRUE. lsomxl125(3) = .FALSE. lsomxl030(3) = .FALSE. lsomxlt05(3) = .FALSE. lsomxlt02(3) = .FALSE. lsomixhgt(3) = .FALSE. lsoicecov(3) = .FALSE. lsowindsp(3) = .FALSE. lsowafldp(3) = .FALSE. lsosafldp(3) = .FALSE. lsohefldp(3) = .FALSE. lsodsstmo(3) = .FALSE. lsodsstyy(3) = .FALSE. lsowafldp(3) = .FALSE. lsosafldp(3) = .FALSE. lsosurfps(3) = .FALSE. lsobowlin(3) = .FALSE. lsothedep(3) = .FALSE. lso14chgt(3) = .FALSE. lso17chgt(3) = .FALSE. lso20chgt(3) = .TRUE. lso28chgt(3) = .FALSE. lso26chgt(3) = .FALSE. lsohtc300(3) = .TRUE. lsohtc700(3) = .FALSE. lsohtcbtm(3) = .FALSE. lsosal300(3) = .TRUE. lsosal700(3) = .FALSE. lsosalbtm(3) = .FALSE. lsoicetem(3) = .FALSE. lsoicealb(3) = .FALSE. lvozocrte(3) = .FALSE. lsozocrte(3) = .TRUE. lsozotaue(3) = .FALSE. lvomecrtn(3) = .FALSE. lsomecrtn(3) = .TRUE. lsometaun(3) = .FALSE. lvozocrtx(3) = .FALSE. lvozoeivu(3) = .FALSE. lsozotaux(3) = .FALSE. lvomecrty(3) = .FALSE. lvomeeivv(3) = .FALSE. lsometauy(3) = .FALSE. lvovecrtz(3) = .FALSE. lvoveeivw(3) = .FALSE. lvotkeavt(3) = .FALSE. lvotkeevd(3) = .FALSE. lvotkeavm(3) = .FALSE. lvotkeevm(3) = .FALSE. lvoddmavs(3) = .FALSE. lsoleahtw(3) = .FALSE. lsoleaeiw(3) = .FALSE. lsocplsst(3) = .FALSE. lsohtc26c(3) = .TRUE. lsohtc26cd(3) = .FALSE. nouttype(4) = 0 noutfreq(4) = $OUT4FREQ lgridT(4) = .FALSE. lgridU(4) = .FALSE. lgridV(4) = .FALSE. lgridW(4) = .FALSE. lvotemper(4) = .FALSE. lvosaline(4) = .FALSE. lvottrdmp(4) = .FALSE. lvostrdmp(4) = .FALSE. lsosstsst(4) = .TRUE. lsosaline(4) = .TRUE. lsossheig(4) = .TRUE. liowaflup(4) = .FALSE. lsowaflep(4) = .FALSE. lsowaflup(4) = .FALSE. lsorunoff(4) = .FALSE. lsowaflcd(4) = .FALSE. lsosalflx(4) = .FALSE. lsohefldo(4) = .FALSE. lsoshfldo(4) = .FALSE. lsomxl010(4) = .FALSE. lsomxl125(4) = .FALSE. lsomxl030(4) = .FALSE. lsomxlt05(4) = .FALSE. lsomxlt02(4) = .FALSE. lsomixhgt(4) = .FALSE. lsoicecov(4) = .FALSE. lsowafldp(4) = .FALSE. lsosafldp(4) = .FALSE. lsohefldp(4) = .FALSE. lsodsstmo(4) = .FALSE. lsodsstyy(4) = .FALSE. lsowafldp(4) = .FALSE. lsosafldp(4) = .FALSE. lsosurfps(4) = .FALSE. lsobowlin(4) = .FALSE. lsothedep(4) = .FALSE. lso20chgt(4) = .FALSE. lso28chgt(4) = .FALSE. lsohtc300(4) = .FALSE. lsoicetem(4) = .FALSE. lsoicealb(4) = .FALSE. lvozocrte(4) = .FALSE. lsozocrte(4) = .FALSE. lsozotaue(4) = .FALSE. lvomecrtn(4) = .FALSE. lsomecrtn(4) = .FALSE. lsometaun(4) = .FALSE lvozocrtx(4) = .FALSE. lvozoeivu(4) = .FALSE. lsozotaux(4) = .FALSE. lvomecrty(4) = .FALSE. lvomeeivv(4) = .FALSE. lsometauy(4) = .FALSE. lvovecrtz(4) = .FALSE. lvoveeivw(4) = .FALSE. lvotkeavt(4) = .FALSE. lvotkeevd(4) = .FALSE. lvotkeavm(4) = .FALSE. lvotkeevm(4) = .FALSE. lvoddmavs(4) = .FALSE. lsoleahtw(4) = .FALSE. lsoleaeiw(4) = .FALSE. lsohtc26c(4) = .TRUE. lsohtc26cd(4) = .TRUE. nouttype(5) = 2 noutfreq(5) = $OUT5FREQ lgridT(5) = $OUT5FLAG lgridU(5) = $OUT5FLAG lgridV(5) = $OUT5FLAG lgridW(5) = $OUT5FLAG lvotemper(5) = .FALSE. lvosaline(5) = .FALSE. lsosstsst(5) = .TRUE. lsosaline(5) = .TRUE. lsossheig(5) = .TRUE. lsostheig(5) = .FALSE. lsobpheig(5) = .FALSE. liowaflup(5) = .FALSE. lsowaflep(5) = .FALSE. lsowaflup(5) = .FALSE. lsorunoff(5) = .FALSE. lsowaflcd(5) = .FALSE. lsosalflx(5) = .FALSE. lsohefldo(5) = .FALSE. lsoshfldo(5) = .FALSE. lsomxl010(5) = .TRUE. lsomxlt05(5) = .TRUE. lsomixhgt(5) = .TRUE. lsoicecov(5) = .FALSE. lsowindsp(5) = .TRUE. lsowafldp(5) = .FALSE. lsosafldp(5) = .FALSE. lsohefldp(5) = .FALSE. lsowafldp(5) = .FALSE. lsosafldp(5) = .FALSE. lsosurfps(5) = .FALSE. lsobowlin(5) = .FALSE. lsothedep(5) = .FALSE. lso20chgt(5) = .FALSE. lso28chgt(5) = .FALSE. lso26chgt(5) = .FALSE. lsohtc300(5) = .FALSE. lsohtc700(5) = .FALSE. lsohtcbtm(5) = .FALSE. lsosal300(5) = .FALSE. lsosal700(5) = .FALSE. lsosalbtm(5) = .FALSE. lsoicetem(5) = .FALSE. lsoicealb(5) = .FALSE. lsomxl125(5) = .FALSE. lsomxl030(5) = .FALSE. lsomxlt02(5) = .FALSE. lso14chgt(5) = .FALSE. lso17chgt(5) = .FALSE. lvozocrte(5) = .FALSE. lsozocrte(5) = .TRUE. lsozotaue(5) = .TRUE. lvomecrtn(5) = .FALSE. lsomecrtn(5) = .TRUE. lsometaun(5) = .TRUE. lvozocrtx(5) = .FALSE. lvozoeivu(5) = .FALSE. lsozocrtx(5) = .TRUE. lsozoeivu(5) = .FALSE. lsozotaux(5) = .FALSE. lvomecrty(5) = .FALSE. lvomeeivv(5) = .FALSE. lsomecrty(5) = .TRUE. lsomeeivv(5) = .FALSE. lsometauy(5) = .FALSE. lvovecrtz(5) = .FALSE. lvoveeivw(5) = .FALSE. lvotkeavt(5) = .FALSE. lvotkeevd(5) = .FALSE. lvotkeavm(5) = .FALSE. lvotkeevm(5) = .FALSE. lvoddmavs(5) = .FALSE. lsoleahtw(5) = .FALSE. lsoleaeiw(5) = .FALSE. lsolhflup(5) = .FALSE. lsolwfldo(5) = .FALSE. lsosbhfup(5) = .FALSE. lvottrdmp(5) = .FALSE. lvostrdmp(5) = .FALSE. lvotbiasd(5) = .FALSE. lvosbiasd(5) = .FALSE. lvotbiasp(5) = .FALSE. lvosbiasp(5) = .FALSE. lvorbiasp(5) = .FALSE. lvosigmat(5) = .FALSE. lvostcoru(5) = .FALSE. lvostcorv(5) = .FALSE. lsocdn10(5) = .FALSE. lvotke(5) = .FALSE. lsotke(5) = .TRUE. lsotke0(5) = .FALSE. lsotkedfac(5)= .FALSE. lsoicestrn(5)= .FALSE. lsoswh(5) = .FALSE. lsomwp(5) = .FALSE. lsophioc(5) = .FALSE. lsotauoc(5) = .FALSE. lsowndmwam(5)= .FALSE. lsophifwam(5)= .FALSE. lsoutauwam(5)= .FALSE. lsovtauwam(5)= .FALSE. lsfqns_tot(5)= .FALSE. lsfqns_ice(5)= .FALSE. lsfqsr_tot(5)= .FALSE. lsfqsr_ice(5)= .FALSE. lsfemp_tot(5)= .FALSE. lsfemp_ice(5)= .FALSE. lsfdqdns_ice(5)= .FALSE. lsfsprecip(5)= .FALSE. lsfutau(5) = .FALSE. lsfvtau(5) = .FALSE. lsfutau_ice(5)= .FALSE. lsfvtau_ice(5)= .FALSE. lsfqns(5) = .FALSE. lsfqsr(5) = .FALSE. lsfemp(5) = .FALSE. lsfswh(5) = .FALSE. lsfmwp(5) = .FALSE. lsfphioc(5) = .FALSE. lsftauoc(5) = .FALSE. lsfustokes(5)= .FALSE. lsfvstokes(5)= .FALSE. lsfutauwam(5)= .FALSE. lsfvtauwam(5)= .FALSE. lsfwndmwam(5)= .FALSE. lsfphifwam(5)= .FALSE. lsfstrn(5) = .FALSE. lsfall(5) = .FALSE. lsocplsst(5) = ${LATMSST:-.FALSE.} lsohtc26c(5) = .FALSE. lsohtc26cd(5) = .FALSE. nouttype(6) = 3 noutfreq(6) = $OUT6FREQ lgridT(6) = $OUT6FLAG lgridU(6) = $OUT6FLAG lgridV(6) = $OUT6FLAG lgridW(6) = $OUT6FLAG lvotemper(6) = .FALSE. lvosaline(6) = .FALSE. lsosstsst(6) = .TRUE. lsosaline(6) = .TRUE. lsossheig(6) = .TRUE. lsostheig(6) = .FALSE. lsobpheig(6) = .FALSE. liowaflup(6) = .FALSE. lsowaflep(6) = .FALSE. lsowaflup(6) = .FALSE. lsorunoff(6) = .FALSE. lsowaflcd(6) = .FALSE. lsosalflx(6) = .FALSE. lsohefldo(6) = .FALSE. lsoshfldo(6) = .FALSE. lsomxl010(6) = .TRUE. lsomxlt05(6) = .TRUE. lsomixhgt(6) = .TRUE. lsoicecov(6) = .FALSE. lsowindsp(6) = .TRUE. lsowafldp(6) = .FALSE. lsosafldp(6) = .FALSE. lsohefldp(6) = .FALSE. lsowafldp(6) = .FALSE. lsosafldp(6) = .FALSE. lsosurfps(6) = .FALSE. lsobowlin(6) = .FALSE. lsothedep(6) = .FALSE. lso20chgt(6) = .FALSE. lso28chgt(6) = .FALSE. lso26chgt(6) = .FALSE. lsohtc300(6) = .FALSE. lsohtc700(6) = .FALSE. lsohtcbtm(6) = .FALSE. lsosal300(6) = .FALSE. lsosal700(6) = .FALSE. lsosalbtm(6) = .FALSE. lsoicetem(6) = .FALSE. lsoicealb(6) = .FALSE. lsomxl125(6) = .FALSE. lsomxl030(6) = .FALSE. lsomxlt02(6) = .FALSE. lso14chgt(6) = .FALSE. lso17chgt(6) = .FALSE. lvozocrte(6) = .FALSE. lsozocrte(6) = .TRUE. lsozotaue(6) = .TRUE. lvomecrtn(6) = .FALSE. lsomecrtn(6) = .TRUE. lsometaun(6) = .TRUE. lvozocrtx(6) = .FALSE. lvozoeivu(6) = .FALSE. lsozocrtx(6) = .TRUE. lsozoeivu(6) = .FALSE. lsozotaux(6) = .FALSE. lvomecrty(6) = .FALSE. lvomeeivv(6) = .FALSE. lsomecrty(6) = .TRUE. lsomeeivv(6) = .FALSE. lsometauy(6) = .FALSE. lvovecrtz(6) = .FALSE. lvoveeivw(6) = .FALSE. lvotkeavt(6) = .FALSE. lvotkeevd(6) = .FALSE. lvotkeavm(6) = .FALSE. lvotkeevm(6) = .FALSE. lvoddmavs(6) = .FALSE. lsoleahtw(6) = .FALSE. lsoleaeiw(6) = .FALSE. lsolhflup(6) = .FALSE. lsolwfldo(6) = .FALSE. lsosbhfup(6) = .FALSE. lvottrdmp(6) = .FALSE. lvostrdmp(6) = .FALSE. lvotbiasd(6) = .FALSE. lvosbiasd(6) = .FALSE. lvotbiasp(6) = .FALSE. lvosbiasp(6) = .FALSE. lvorbiasp(6) = .FALSE. lvosigmat(6) = .FALSE. lvostcoru(6) = .FALSE. lvostcorv(6) = .FALSE. lsocdn10(6) = .FALSE. lvotke(6) = .FALSE. lsotke(6) = .TRUE. lsotke0(6) = .FALSE. lsotkedfac(6)= .FALSE. lsoicestrn(6)= .FALSE. lsoswh(6) = .FALSE. lsomwp(6) = .FALSE. lsophioc(6) = .FALSE. lsotauoc(6) = .FALSE. lsowndmwam(6)= .FALSE. lsophifwam(6)= .FALSE. lsoutauwam(6)= .FALSE. lsovtauwam(6)= .FALSE. lsfqns_tot(6)= .FALSE. lsfqns_ice(6)= .FALSE. lsfqsr_tot(6)= .FALSE. lsfqsr_ice(6)= .FALSE. lsfemp_tot(6)= .FALSE. lsfemp_ice(6)= .FALSE. lsfdqdns_ice(6)= .FALSE. lsfsprecip(6)= .FALSE. lsfutau(6) = .FALSE. lsfvtau(6) = .FALSE. lsfutau_ice(6)= .FALSE. lsfvtau_ice(6)= .FALSE. lsfqns(6) = .FALSE. lsfqsr(6) = .FALSE. lsfemp(6) = .FALSE. lsfswh(6) = .FALSE. lsfmwp(6) = .FALSE. lsfphioc(6) = .FALSE. lsftauoc(6) = .FALSE. lsfustokes(6)= .FALSE. lsfvstokes(6)= .FALSE. lsfutauwam(6)= .FALSE. lsfvtauwam(6)= .FALSE. lsfwndmwam(6)= .FALSE. lsfphifwam(6)= .FALSE. lsfstrn(6) = .FALSE. lsfall(6) = .FALSE. lsocplsst(6) = ${LATMSST:-.FALSE.} lsohtc26c(6) = .FALSE. lsohtc26cd(6) = .FALSE. nouttype(7) = 0 noutfreq(7) = $OUT7FREQ lgridT(7) = .TRUE. lgridU(7) = .TRUE. lgridV(7) = .TRUE. lgridW(7) = .FALSE. lmonthly(7) = .FALSE. lvotemper(7) = .FALSE. lvosaline(7) = .FALSE. lsosstsst(7) = .FALSE. lsosaline(7) = .FALSE. lsossheig(7) = .FALSE. lsostheig(7) = .FALSE. lsobpheig(7) = .FALSE. lsowaflup(7) = .TRUE. lsowaflep(7) = .FALSE. liowaflup(7) = .FALSE. lsorunoff(7) = .TRUE. lsowaflcd(7) = .FALSE. lsosalflx(7) = .FALSE. lsohefldo(7) = .TRUE. lsoshfldo(7) = .TRUE. lsomxl010(7) = .FALSE. lsomxlt05(7) = .FALSE. lsomixhgt(7) = .FALSE. lsomxl125(7) = .FALSE. lsomxl030(7) = .FALSE. lsomxlt02(7) = .FALSE. lsomxkara(7) = .FALSE. lsoicecov(7) = .FALSE. lsowindsp(7) = .TRUE. lsowafldp(7) = .FALSE. lsosafldp(7) = .FALSE. lsohefldp(7) = .FALSE. lsodsstmo(7) = .FALSE. lsodsstyy(7) = .FALSE. lsowafldp(7) = .FALSE. lsosafldp(7) = .FALSE. lsosurfps(7) = .FALSE. lsobowlin(7) = .FALSE. lsothedep(7) = .FALSE. lso14chgt(7) = .FALSE. lso17chgt(7) = .FALSE. lso20chgt(7) = .FALSE. lso28chgt(7) = .FALSE. lso26chgt(7) = .FALSE. lsohtc300(7) = .FALSE. lsohtc700(7) = .FALSE. lsohtcbtm(7) = .FALSE. lsosal300(7) = .FALSE. lsosal700(7) = .FALSE. lsosalbtm(7) = .FALSE. lsoicetem(7) = .FALSE. lsoicealb(7) = .FALSE. lvozocrte(7) = .FALSE. lsozocrte(7) = .FALSE. lsozotaue(7) = .TRUE. lvomecrtn(7) = .FALSE. lsomecrtn(7) = .FALSE. lsometaun(7) = .TRUE. lvozocrtx(7) = .FALSE. lvozoeivu(7) = .FALSE. lsozocrtx(7) = .FALSE. lsozoeivu(7) = .FALSE. lsozotaux(7) = .TRUE. lvomecrty(7) = .FALSE. lvomeeivv(7) = .FALSE. lsomecrty(7) = .FALSE. lsomeeivv(7) = .FALSE. lsometauy(7) = .TRUE. lvovecrtz(7) = .FALSE. lvoveeivw(7) = .FALSE. lvotkeavt(7) = .FALSE. lvotkeevd(7) = .FALSE. lvotkeavm(7) = .FALSE. lvotkeevm(7) = .FALSE. lvoddmavs(7) = .FALSE. lsoleahtw(7) = .FALSE. lsoleaeiw(7) = .FALSE. lsolhflup(7) = .FALSE. lsolwfldo(7) = .FALSE. lsosbhfup(7) = .FALSE. lvottrdmp(7) = .FALSE. lvostrdmp(7) = .FALSE. lvotbiasd(7) = .FALSE. lvosbiasd(7) = .FALSE. lvotbiasp(7) = .FALSE. lvosbiasp(7) = .FALSE. lvorbiasp(7) = .FALSE. lvosigmat(7) = .FALSE. lvostcoru(7) = .FALSE. lvostcorv(7) = .FALSE. lsocdn10(7) = .TRUE. lvotke(7) = .FALSE. lsotke(7) = .FALSE. lsotke0(7) = .FALSE. lsotkedfac(7)= .FALSE. lsoicestrn(7)= .FALSE. lsoswh(7) = .TRUE. lsomwp(7) = .TRUE. lsophioc(7) = .TRUE. lsotauoc(7) = .TRUE. lsowndmwam(7)= .TRUE. lsophifwam(7)= .TRUE. lsoutauwam(7)= .TRUE. lsovtauwam(7)= .TRUE. lsfqns_tot(7)= .TRUE. lsfqns_ice(7)= .TRUE. lsfqsr_tot(7)= .TRUE. lsfqsr_ice(7)= .TRUE. lsfemp_tot(7)= .TRUE. lsfemp_ice(7)= .TRUE. lsfdqdns_ice(7)= .TRUE. lsfsprecip(7)= .TRUE. lsfutau(7) = .TRUE. lsfvtau(7) = .TRUE. lsfutau_ice(7)= .TRUE. lsfvtau_ice(7)= .TRUE. lsfqns(7) = .TRUE. lsfqsr(7) = .TRUE. lsfemp(7) = .TRUE. lsfswh(7) = .TRUE. lsfmwp(7) = .TRUE. lsfphioc(7) = .TRUE. lsftauoc(7) = .TRUE. lsfustokes(7)= .TRUE. lsfvstokes(7)= .TRUE. lsfutauwam(7)= .TRUE. lsfvtauwam(7)= .TRUE. lsfwndmwam(7)= .TRUE. lsfphifwam(7)= .TRUE. lsfstrn(7) = .TRUE. lsfall(7) = .TRUE. lsohtc26c(7) = .FALSE. lsohtc26cd(7) = .FALSE. cstreampath(1) = "${OCEOUTPATH:-./}" ! path for output cstreampath(2) = "${OCEOUTPATH:-./}" ! path for output cstreampath(3) = "${OCEOUTPATH:-./}" ! path for output cstreampath(4) = "${OCEOUTPATH:-./}" ! path for output cstreampath(5) = "${OCEOUTPATH:-./}" ! path for output cstreampath(6) = "${OCEOUTPATH:-./}" ! path for output cstreampath(7) = "${OCEOUTPATH:-./}" ! path for output ln_nc4zip_stream(1) = ${NC4F3D:-false} ln_nc4zip_stream(2) = ${NC4F3D:-false} ln_nc4zip_stream(3) = ${NC4F2D:-false} ln_nc4zip_stream(4) = ${NC4F2D:-false} ln_nc4zip_stream(5) = ${NC4F2D:-false} ln_nc4zip_stream(6) = ${NC4F2D:-false} ln_nc4zip_stream(7) = ${NC4F2D:-false} nn_nchunks_k_stream(3) = ${NC4F2DCHUNKZ:-1} nn_nchunks_k_stream(4) = ${NC4F2DCHUNKZ:-1} nn_nchunks_k_stream(5) = ${NC4F2DCHUNKZ:-1} nn_nchunks_k_stream(6) = ${NC4F2DCHUNKZ:-1} nn_nchunks_k_stream(7) = ${NC4F2DCHUNKZ:-1} / eof_namelist ;; *) # real-time mode cat >> namelist <>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ! OPA namelist for different output streams ! ---------------------------------------- !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ! ! options for output of instantaneous fields ! ! in this example we use OUTSTREMS streams: ! Stream 1, complete set, type=1 (avg), regular frequence FREQ1 ! stream 2, complet set, type=1 (avg), FREQ2 (usually end of run) ! stream 3, complet set, type=1 (avg), FREQ3 (usually more frequent 2D flds) ! stream 4, complet set, type=0 (inst), FREQ4 (usually for debuging) ! nouttype=0 for instantaneous ! &nam_io nstreams = $OUTSTREAMS nouttype(1) = $OUT1TYPE noutfreq(1) = $OUT1FREQ lgridT(1) = $OUT1FLAG lgridU(1) = $OUT1FLAG lgridV(1) = $OUT1FLAG lgridW(1) = $OUT1FLAG lvotemper(1) = .TRUE. lvosaline(1) = .TRUE. lvottrdmp(1) = .TRUE. lvostrdmp(1) = .TRUE. lsosstsst(1) = .TRUE. lsosaline(1) = .TRUE. lsossheig(1) = .TRUE. lsostheig(1) = .TRUE. lsobpheig(1) = .TRUE. liowaflup(1) = .TRUE. lsowaflep(1) = .TRUE. lsowaflup(1) = .TRUE. lsorunoff(1) = .FALSE. lsowaflcd(1) = .FALSE. lsosalflx(1) = .TRUE. lsohefldo(1) = .TRUE. lsoshfldo(1) = .TRUE. lsomxl010(1) = .TRUE. lsomxl125(1) = .TRUE. lsomxl030(1) = .TRUE. lsomxlt05(1) = .TRUE. lsomxlt02(1) = .TRUE. lsomixhgt(1) = .TRUE. lsoicecov(1) = .TRUE. lsowafldp(1) = .TRUE. lsosafldp(1) = .TRUE. lsohefldp(1) = .TRUE. lsodsstmo(1) = .FALSE. lsodsstyy(1) = .FALSE. lsowafldp(1) = .TRUE. lsosafldp(1) = .TRUE. lsosurfps(1) = .FALSE. lsobowlin(1) = .FALSE. lsothedep(1) = .TRUE. lso14chgt(1) = .TRUE. lso17chgt(1) = .TRUE. lso20chgt(1) = .TRUE. lso28chgt(1) = .TRUE. lso26chgt(1) = .TRUE. lsohtc300(1) = .TRUE. lsohtc700(1) = .TRUE. lsohtcbtm(1) = .TRUE. lsosal300(1) = .TRUE. lsosal700(1) = .TRUE. lsosalbtm(1) = .TRUE. lsoicetem(1) = .TRUE. lsoicealb(1) = .TRUE. lvozocrte(1) = .TRUE. lsozocrte(1) = .FALSE. lsozotaue(1) = .TRUE. lvomecrtn(1) = .TRUE. lsomecrtn(1) = .FALSE. lsometaun(1) = .TRUE. lvozocrtx(1) = .TRUE. lvozoeivu(1) = .TRUE. lsozotaux(1) = .TRUE. lvomecrty(1) = .TRUE. lvomeeivv(1) = .TRUE. lsometauy(1) = .TRUE. lvovecrtz(1) = .TRUE. lvoveeivw(1) = .FALSE. lvotkeavt(1) = .FALSE. lvotkeevd(1) = .FALSE. lvotkeavm(1) = .FALSE. lvotkeevm(1) = .FALSE. lvoddmavs(1) = .FALSE. lsoleahtw(1) = .FALSE. lsoleaeiw(1) = .FALSE. lsohtc26c(1) = .FALSE. lsohtc26cd(1) = .FALSE. lvorotrot(1) = ${NEMOROTDIV:-.false.} lvodivdiv(1) = ${NEMOROTDIV:-.false.} nouttype(2) = $OUT2TYPE noutfreq(2) = $OUT2FREQ lgridT(2) = $OUT2FLAG lgridU(2) = $OUT2FLAG lgridV(2) = $OUT2FLAG lgridW(2) = $OUT2FLAG lmonthly(2)=$LN_MONTHLY lvotemper(2) = .TRUE. lvosaline(2) = .TRUE. lvosigmat(2) = .TRUE. lvottrdmp(2) = $OUT2FULL lvostrdmp(2) = $OUT2FULL lvotbiasd(2) = $OUT2FULL lvosbiasd(2) = $OUT2FULL lvotbiasp(2) = $OUT2FULL lvosbiasp(2) = $OUT2FULL lvorbiasp(2) = $OUT2FULL lsosstsst(2) = .TRUE. lsosaline(2) = .TRUE. lsossheig(2) = .TRUE. lsostheig(2) = .TRUE. lsobpheig(2) = .TRUE. liowaflup(2) = .TRUE. lsowaflep(2) = .TRUE. lsowaflup(2) = .TRUE. lsorunoff(2) = .TRUE. lsowaflcd(2) = .TRUE. lsosalflx(2) = .TRUE. lsohefldo(2) = .TRUE. lsoshfldo(2) = .TRUE. lsomxl010(2) = .TRUE. lsomxl125(2) = .TRUE. lsomxl030(2) = .TRUE. lsomxlt05(2) = .TRUE. lsomxlt02(2) = .TRUE. lsomixhgt(2) = .TRUE. lsoicecov(2) = .TRUE. lsowafldp(2) = .TRUE. lsosafldp(2) = .TRUE. lsohefldp(2) = .TRUE. lsodsstmo(2) = .FALSE. lsodsstyy(2) = .FALSE. lsowafldp(2) = .TRUE. lsosafldp(2) = .TRUE. lsosurfps(2) = .FALSE. lsobowlin(2) = .FALSE. lsothedep(2) = .TRUE. lso14chgt(2) = .TRUE. lso17chgt(2) = .TRUE. lso20chgt(2) = .TRUE. lso28chgt(2) = .TRUE. lso26chgt(2) = .TRUE. lsohtc300(2) = .TRUE. lsohtc700(2) = .TRUE. lsohtcbtm(2) = .TRUE. lsosal300(2) = .TRUE. lsosal700(2) = .TRUE. lsosalbtm(2) = .TRUE. lsoicetem(2) = .TRUE. lsoicealb(2) = .TRUE. lvozocrte(2) = .TRUE. lsozocrte(2) = .TRUE. lsozotaue(2) = .TRUE. lvomecrtn(2) = .TRUE. lsomecrtn(2) = .TRUE. lsometaun(2) = .TRUE. lvozocrtx(2) = .TRUE. lvozoeivu(2) = .FALSE. lsozotaux(2) = .TRUE. lvomecrty(2) = .TRUE. lvomeeivv(2) = .FALSE. lsometauy(2) = .TRUE. lvovecrtz(2) = .TRUE. lvoveeivw(2) = .FALSE. lvotkeavt(2) = .FALSE. lvotkeevd(2) = .FALSE. lvotkeavm(2) = .FALSE. lvotkeevm(2) = .FALSE. lvoddmavs(2) = .FALSE. lsoleahtw(2) = .FALSE. lsoleaeiw(2) = .FALSE. lsohtc26c(2) = .FALSE. lsohtc26cd(2) = .FALSE. lvorotrot(2) = ${NEMOROTDIV:-.false.} lvodivdiv(2) = ${NEMOROTDIV:-.false.} nouttype(3) = $OUT3TYPE noutfreq(3) = $OUT3FREQ lgridT(3) = $OUT3FLAG lgridU(3) = $OUT3FLAG lgridV(3) = $OUT3FLAG lgridW(3) = .FALSE. lvotemper(3) = .FALSE. lvosaline(3) = .FALSE. lvosigmat(3) = .FALSE. lvottrdmp(3) = .FALSE. lvostrdmp(3) = .FALSE. lsosstsst(3) = .TRUE. lsosaline(3) = .TRUE. lsossheig(3) = .TRUE. lsostheig(3) = $OUT3FULL lsobpheig(3) = $OUT3FULL liowaflup(3) = $OUT3FULL lsowaflep(3) = $OUT3FULL lsowaflup(3) = .TRUE. lsorunoff(3) = $OUT3FULL lsowaflcd(3) = $OUT3FULL lsosalflx(3) = $OUT3FULL lsohefldo(3) = .TRUE. lsoshfldo(3) = .TRUE. lsomxl010(3) = .TRUE. lsomxl125(3) = .TRUE. lsomxl030(3) = .TRUE. lsomxlt05(3) = .TRUE. lsomxlt02(3) = .TRUE. lsomixhgt(3) = $OUT3FULL lsoicecov(3) = .TRUE. lsowafldp(3) = $OUT3FULL lsosafldp(3) = $OUT3FULL lsohefldp(3) = $OUT3RLX lsodsstmo(3) = .FALSE. lsodsstyy(3) = .FALSE. lsowafldp(3) = $OUT3FULL lsosafldp(3) = $OUT3FULL lsosurfps(3) = $OUT3FULL lsobowlin(3) = $OUT3FULL lsothedep(3) = .TRUE. lso14chgt(3) = .TRUE. lso17chgt(3) = .TRUE. lso20chgt(3) = .TRUE. lso28chgt(3) = .TRUE. lso26chgt(3) = .TRUE. lsohtc300(3) = .TRUE. lsohtc700(3) = .FALSE. lsohtcbtm(3) = .FALSE. lsosal300(3) = .TRUE. lsosal700(3) = .FALSE. lsosalbtm(3) = .FALSE. lsoicetem(3) = .FALSE. lsoicealb(3) = .FALSE. lvozocrte(3) = .FALSE. lsozocrtx(3) = .TRUE. lsozocrte(3) = .TRUE. lsozotaue(3) = .TRUE. lvomecrtn(3) = .FALSE. lsomecrty(3) = .TRUE. lsomecrtn(3) = .TRUE. lsometaun(3) = .TRUE. lvozocrtx(3) = .FALSE. lvozoeivu(3) = .FALSE. lsozotaux(3) = .TRUE. lvomecrty(3) = .FALSE. lvomeeivv(3) = .FALSE. lsometauy(3) = .TRUE. lvovecrtz(3) = .FALSE. lvoveeivw(3) = .FALSE. lvotkeavt(3) = .FALSE. lvotkeevd(3) = .FALSE. lvotkeavm(3) = .FALSE. lvotkeevm(3) = .FALSE. lvoddmavs(3) = .FALSE. lsoleahtw(3) = .FALSE. lsoleaeiw(3) = .FALSE. lsocplsst(3) = ${LATMSST:-.FALSE.} lsohtc26c(3) = .TRUE. lsohtc26cd(3) = .TRUE. nouttype(4) = 0 noutfreq(4) = $OUT4FREQ lgridT(4) = .FALSE. lgridU(4) = .FALSE. lgridV(4) = .FALSE. lgridW(4) = .FALSE. lvotemper(4) = .FALSE. lvosaline(4) = .FALSE. lvottrdmp(4) = .FALSE. lvostrdmp(4) = .FALSE. lsosstsst(4) = .TRUE. lsosaline(4) = .TRUE. lsossheig(4) = .TRUE. liowaflup(4) = .FALSE. lsowaflep(4) = .FALSE. lsowaflup(4) = .FALSE. lsorunoff(4) = .FALSE. lsowaflcd(4) = .FALSE. lsosalflx(4) = .FALSE. lsohefldo(4) = .FALSE. lsoshfldo(4) = .FALSE. lsomxl010(4) = .FALSE. lsomxl125(4) = .FALSE. lsomxl030(4) = .FALSE. lsomxlt05(4) = .FALSE. lsomxlt02(4) = .FALSE. lsomixhgt(4) = .FALSE. lsoicecov(4) = .FALSE. lsowafldp(4) = .FALSE. lsosafldp(4) = .FALSE. lsohefldp(4) = .FALSE. lsodsstmo(4) = .FALSE. lsodsstyy(4) = .FALSE. lsowafldp(4) = .FALSE. lsosafldp(4) = .FALSE. lsosurfps(4) = .FALSE. lsobowlin(4) = .FALSE. lsothedep(4) = .FALSE. lso20chgt(4) = .FALSE. lso28chgt(4) = .FALSE. lsohtc300(4) = .FALSE. lsoicetem(4) = .FALSE. lsoicealb(4) = .FALSE. lvozocrte(4) = .FALSE. lsozocrte(4) = .FALSE. lsozotaue(4) = .FALSE. lvomecrtn(4) = .FALSE. lsomecrtn(4) = .FALSE. lsometaun(4) = .FALSE lvozocrtx(4) = .FALSE. lvozoeivu(4) = .FALSE. lsozotaux(4) = .FALSE. lvomecrty(4) = .FALSE. lvomeeivv(4) = .FALSE. lsometauy(4) = .FALSE. lvovecrtz(4) = .FALSE. lvoveeivw(4) = .FALSE. lvotkeavt(4) = .FALSE. lvotkeevd(4) = .FALSE. lvotkeavm(4) = .FALSE. lvotkeevm(4) = .FALSE. lvoddmavs(4) = .FALSE. lsoleahtw(4) = .FALSE. lsoleaeiw(4) = .FALSE. lsohtc26c(4) = .TRUE. lsohtc26cd(4) = .TRUE. nouttype(5) = 2 noutfreq(5) = $OUT5FREQ lgridT(5) = $OUT5FLAG lgridU(5) = $OUT5FLAG lgridV(5) = $OUT5FLAG lgridW(5) = $OUT5FLAG lvotemper(5) = .FALSE. lvosaline(5) = .FALSE. lsosstsst(5) = .TRUE. lsosaline(5) = .TRUE. lsossheig(5) = .TRUE. lsostheig(5) = .FALSE. lsobpheig(5) = .FALSE. liowaflup(5) = .FALSE. lsowaflep(5) = .FALSE. lsowaflup(5) = .FALSE. lsorunoff(5) = .FALSE. lsowaflcd(5) = .FALSE. lsosalflx(5) = .FALSE. lsohefldo(5) = .FALSE. lsoshfldo(5) = .FALSE. lsomxl010(5) = .TRUE. lsomxlt05(5) = .TRUE. lsomixhgt(5) = .TRUE. lsoicecov(5) = .FALSE. lsowindsp(5) = .TRUE. lsowafldp(5) = .FALSE. lsosafldp(5) = .FALSE. lsohefldp(5) = .FALSE. lsowafldp(5) = .FALSE. lsosafldp(5) = .FALSE. lsosurfps(5) = .FALSE. lsobowlin(5) = .FALSE. lsothedep(5) = .FALSE. lso20chgt(5) = .FALSE. lso28chgt(5) = .FALSE. lso26chgt(5) = .FALSE. lsohtc300(5) = .FALSE. lsohtc700(5) = .FALSE. lsohtcbtm(5) = .FALSE. lsosal300(5) = .FALSE. lsosal700(5) = .FALSE. lsosalbtm(5) = .FALSE. lsoicetem(5) = .FALSE. lsoicealb(5) = .FALSE. lsomxl125(5) = .FALSE. lsomxl030(5) = .FALSE. lsomxlt02(5) = .FALSE. lso14chgt(5) = .FALSE. lso17chgt(5) = .FALSE. lvozocrte(5) = .FALSE. lsozocrte(5) = .TRUE. lsozotaue(5) = .TRUE. lvomecrtn(5) = .FALSE. lsomecrtn(5) = .TRUE. lsometaun(5) = .TRUE. lvozocrtx(5) = .FALSE. lvozoeivu(5) = .FALSE. lsozocrtx(5) = .TRUE. lsozoeivu(5) = .FALSE. lsozotaux(5) = .FALSE. lvomecrty(5) = .FALSE. lvomeeivv(5) = .FALSE. lsomecrty(5) = .TRUE. lsomeeivv(5) = .FALSE. lsometauy(5) = .FALSE. lvovecrtz(5) = .FALSE. lvoveeivw(5) = .FALSE. lvotkeavt(5) = .FALSE. lvotkeevd(5) = .FALSE. lvotkeavm(5) = .FALSE. lvotkeevm(5) = .FALSE. lvoddmavs(5) = .FALSE. lsoleahtw(5) = .FALSE. lsoleaeiw(5) = .FALSE. lsolhflup(5) = .FALSE. lsolwfldo(5) = .FALSE. lsosbhfup(5) = .FALSE. lvottrdmp(5) = .FALSE. lvostrdmp(5) = .FALSE. lvotbiasd(5) = .FALSE. lvosbiasd(5) = .FALSE. lvotbiasp(5) = .FALSE. lvosbiasp(5) = .FALSE. lvorbiasp(5) = .FALSE. lvosigmat(5) = .FALSE. lvostcoru(5) = .FALSE. lvostcorv(5) = .FALSE. lsocdn10(5) = .FALSE. lvotke(5) = .FALSE. lsotke(5) = .TRUE. lsotke0(5) = .FALSE. lsotkedfac(5)= .FALSE. lsoicestrn(5)= .FALSE. lsoswh(5) = .FALSE. lsomwp(5) = .FALSE. lsophioc(5) = .FALSE. lsotauoc(5) = .FALSE. lsowndmwam(5)= .FALSE. lsophifwam(5)= .FALSE. lsoutauwam(5)= .FALSE. lsovtauwam(5)= .FALSE. lsfqns_tot(5)= .FALSE. lsfqns_ice(5)= .FALSE. lsfqsr_tot(5)= .FALSE. lsfqsr_ice(5)= .FALSE. lsfemp_tot(5)= .FALSE. lsfemp_ice(5)= .FALSE. lsfdqdns_ice(5)= .FALSE. lsfsprecip(5)= .FALSE. lsfutau(5) = .FALSE. lsfvtau(5) = .FALSE. lsfutau_ice(5)= .FALSE. lsfvtau_ice(5)= .FALSE. lsfqns(5) = .FALSE. lsfqsr(5) = .FALSE. lsfemp(5) = .FALSE. lsfswh(5) = .FALSE. lsfmwp(5) = .FALSE. lsfphioc(5) = .FALSE. lsftauoc(5) = .FALSE. lsfustokes(5)= .FALSE. lsfvstokes(5)= .FALSE. lsfutauwam(5)= .FALSE. lsfvtauwam(5)= .FALSE. lsfwndmwam(5)= .FALSE. lsfphifwam(5)= .FALSE. lsfstrn(5) = .FALSE. lsfall(5) = .FALSE. lsocplsst(5) = ${LATMSST:-.FALSE.} lsohtc26c(5) = .FALSE. lsohtc26cd(5) = .FALSE. nouttype(6) = 3 noutfreq(6) = $OUT6FREQ lgridT(6) = $OUT6FLAG lgridU(6) = $OUT6FLAG lgridV(6) = $OUT6FLAG lgridW(6) = $OUT6FLAG lvotemper(6) = .FALSE. lvosaline(6) = .FALSE. lsosstsst(6) = .TRUE. lsosaline(6) = .TRUE. lsossheig(6) = .TRUE. lsostheig(6) = .FALSE. lsobpheig(6) = .FALSE. liowaflup(6) = .FALSE. lsowaflep(6) = .FALSE. lsowaflup(6) = .FALSE. lsorunoff(6) = .FALSE. lsowaflcd(6) = .FALSE. lsosalflx(6) = .FALSE. lsohefldo(6) = .FALSE. lsoshfldo(6) = .FALSE. lsomxl010(6) = .TRUE. lsomxlt05(6) = .TRUE. lsomixhgt(6) = .TRUE. lsoicecov(6) = .FALSE. lsowindsp(6) = .TRUE. lsowafldp(6) = .FALSE. lsosafldp(6) = .FALSE. lsohefldp(6) = .FALSE. lsowafldp(6) = .FALSE. lsosafldp(6) = .FALSE. lsosurfps(6) = .FALSE. lsobowlin(6) = .FALSE. lsothedep(6) = .FALSE. lso20chgt(6) = .FALSE. lso28chgt(6) = .FALSE. lso26chgt(6) = .FALSE. lsohtc300(6) = .FALSE. lsohtc700(6) = .FALSE. lsohtcbtm(6) = .FALSE. lsosal300(6) = .FALSE. lsosal700(6) = .FALSE. lsosalbtm(6) = .FALSE. lsoicetem(6) = .FALSE. lsoicealb(6) = .FALSE. lsomxl125(6) = .FALSE. lsomxl030(6) = .FALSE. lsomxlt02(6) = .FALSE. lso14chgt(6) = .FALSE. lso17chgt(6) = .FALSE. lvozocrte(6) = .FALSE. lsozocrte(6) = .TRUE. lsozotaue(6) = .TRUE. lvomecrtn(6) = .FALSE. lsomecrtn(6) = .TRUE. lsometaun(6) = .TRUE. lvozocrtx(6) = .FALSE. lvozoeivu(6) = .FALSE. lsozocrtx(6) = .TRUE. lsozoeivu(6) = .FALSE. lsozotaux(6) = .FALSE. lvomecrty(6) = .FALSE. lvomeeivv(6) = .FALSE. lsomecrty(6) = .TRUE. lsomeeivv(6) = .FALSE. lsometauy(6) = .FALSE. lvovecrtz(6) = .FALSE. lvoveeivw(6) = .FALSE. lvotkeavt(6) = .FALSE. lvotkeevd(6) = .FALSE. lvotkeavm(6) = .FALSE. lvotkeevm(6) = .FALSE. lvoddmavs(6) = .FALSE. lsoleahtw(6) = .FALSE. lsoleaeiw(6) = .FALSE. lsolhflup(6) = .FALSE. lsolwfldo(6) = .FALSE. lsosbhfup(6) = .FALSE. lvottrdmp(6) = .FALSE. lvostrdmp(6) = .FALSE. lvotbiasd(6) = .FALSE. lvosbiasd(6) = .FALSE. lvotbiasp(6) = .FALSE. lvosbiasp(6) = .FALSE. lvorbiasp(6) = .FALSE. lvosigmat(6) = .FALSE. lvostcoru(6) = .FALSE. lvostcorv(6) = .FALSE. lsocdn10(6) = .FALSE. lvotke(6) = .FALSE. lsotke(6) = .TRUE. lsotke0(6) = .FALSE. lsotkedfac(6)= .FALSE. lsoicestrn(6)= .FALSE. lsoswh(6) = .FALSE. lsomwp(6) = .FALSE. lsophioc(6) = .FALSE. lsotauoc(6) = .FALSE. lsowndmwam(6)= .FALSE. lsophifwam(6)= .FALSE. lsoutauwam(6)= .FALSE. lsovtauwam(6)= .FALSE. lsfqns_tot(6)= .FALSE. lsfqns_ice(6)= .FALSE. lsfqsr_tot(6)= .FALSE. lsfqsr_ice(6)= .FALSE. lsfemp_tot(6)= .FALSE. lsfemp_ice(6)= .FALSE. lsfdqdns_ice(6)= .FALSE. lsfsprecip(6)= .FALSE. lsfutau(6) = .FALSE. lsfvtau(6) = .FALSE. lsfutau_ice(6)= .FALSE. lsfvtau_ice(6)= .FALSE. lsfqns(6) = .FALSE. lsfqsr(6) = .FALSE. lsfemp(6) = .FALSE. lsfswh(6) = .FALSE. lsfmwp(6) = .FALSE. lsfphioc(6) = .FALSE. lsftauoc(6) = .FALSE. lsfustokes(6)= .FALSE. lsfvstokes(6)= .FALSE. lsfutauwam(6)= .FALSE. lsfvtauwam(6)= .FALSE. lsfwndmwam(6)= .FALSE. lsfphifwam(6)= .FALSE. lsfstrn(6) = .FALSE. lsfall(6) = .FALSE. lsocplsst(6) = ${LATMSST:-.FALSE.} lsohtc26c(6) = .FALSE. lsohtc26cd(6) = .FALSE. nouttype(7) = 0 noutfreq(7) = $OUT7FREQ lgridT(7) = .TRUE. lgridU(7) = .TRUE. lgridV(7) = .TRUE. lgridW(7) = .FALSE. lmonthly(7) = .FALSE. lvotemper(7) = .FALSE. lvosaline(7) = .FALSE. lsosstsst(7) = .FALSE. lsosaline(7) = .FALSE. lsossheig(7) = .FALSE. lsostheig(7) = .FALSE. lsobpheig(7) = .FALSE. lsowaflup(7) = .TRUE. lsowaflep(7) = .FALSE. liowaflup(7) = .FALSE. lsorunoff(7) = .TRUE. lsowaflcd(7) = .FALSE. lsosalflx(7) = .FALSE. lsohefldo(7) = .TRUE. lsoshfldo(7) = .TRUE. lsomxl010(7) = .FALSE. lsomxlt05(7) = .FALSE. lsomixhgt(7) = .FALSE. lsomxl125(7) = .FALSE. lsomxl030(7) = .FALSE. lsomxlt02(7) = .FALSE. lsomxkara(7) = .FALSE. lsoicecov(7) = .FALSE. lsowindsp(7) = .TRUE. lsowafldp(7) = .FALSE. lsosafldp(7) = .FALSE. lsohefldp(7) = .FALSE. lsodsstmo(7) = .FALSE. lsodsstyy(7) = .FALSE. lsowafldp(7) = .FALSE. lsosafldp(7) = .FALSE. lsosurfps(7) = .FALSE. lsobowlin(7) = .FALSE. lsothedep(7) = .FALSE. lso14chgt(7) = .FALSE. lso17chgt(7) = .FALSE. lso20chgt(7) = .FALSE. lso28chgt(7) = .FALSE. lso26chgt(7) = .FALSE. lsohtc300(7) = .FALSE. lsohtc700(7) = .FALSE. lsohtcbtm(7) = .FALSE. lsosal300(7) = .FALSE. lsosal700(7) = .FALSE. lsosalbtm(7) = .FALSE. lsoicetem(7) = .FALSE. lsoicealb(7) = .FALSE. lvozocrte(7) = .FALSE. lsozocrte(7) = .FALSE. lsozotaue(7) = .TRUE. lvomecrtn(7) = .FALSE. lsomecrtn(7) = .FALSE. lsometaun(7) = .TRUE. lvozocrtx(7) = .FALSE. lvozoeivu(7) = .FALSE. lsozocrtx(7) = .FALSE. lsozoeivu(7) = .FALSE. lsozotaux(7) = .TRUE. lvomecrty(7) = .FALSE. lvomeeivv(7) = .FALSE. lsomecrty(7) = .FALSE. lsomeeivv(7) = .FALSE. lsometauy(7) = .TRUE. lvovecrtz(7) = .FALSE. lvoveeivw(7) = .FALSE. lvotkeavt(7) = .FALSE. lvotkeevd(7) = .FALSE. lvotkeavm(7) = .FALSE. lvotkeevm(7) = .FALSE. lvoddmavs(7) = .FALSE. lsoleahtw(7) = .FALSE. lsoleaeiw(7) = .FALSE. lsolhflup(7) = .FALSE. lsolwfldo(7) = .FALSE. lsosbhfup(7) = .FALSE. lvottrdmp(7) = .FALSE. lvostrdmp(7) = .FALSE. lvotbiasd(7) = .FALSE. lvosbiasd(7) = .FALSE. lvotbiasp(7) = .FALSE. lvosbiasp(7) = .FALSE. lvorbiasp(7) = .FALSE. lvosigmat(7) = .FALSE. lvostcoru(7) = .FALSE. lvostcorv(7) = .FALSE. lsocdn10(7) = .TRUE. lvotke(7) = .FALSE. lsotke(7) = .FALSE. lsotke0(7) = .FALSE. lsotkedfac(7)= .FALSE. lsoicestrn(7)= .FALSE. lsoswh(7) = .TRUE. lsomwp(7) = .TRUE. lsophioc(7) = .TRUE. lsotauoc(7) = .TRUE. lsowndmwam(7)= .TRUE. lsophifwam(7)= .TRUE. lsoutauwam(7)= .TRUE. lsovtauwam(7)= .TRUE. lsfqns_tot(7)= .TRUE. lsfqns_ice(7)= .TRUE. lsfqsr_tot(7)= .TRUE. lsfqsr_ice(7)= .TRUE. lsfemp_tot(7)= .TRUE. lsfemp_ice(7)= .TRUE. lsfdqdns_ice(7)= .TRUE. lsfsprecip(7)= .TRUE. lsfutau(7) = .TRUE. lsfvtau(7) = .TRUE. lsfutau_ice(7)= .TRUE. lsfvtau_ice(7)= .TRUE. lsfqns(7) = .TRUE. lsfqsr(7) = .TRUE. lsfemp(7) = .TRUE. lsfswh(7) = .TRUE. lsfmwp(7) = .TRUE. lsfphioc(7) = .TRUE. lsftauoc(7) = .TRUE. lsfustokes(7)= .TRUE. lsfvstokes(7)= .TRUE. lsfutauwam(7)= .TRUE. lsfvtauwam(7)= .TRUE. lsfwndmwam(7)= .TRUE. lsfphifwam(7)= .TRUE. lsfstrn(7) = .TRUE. lsfall(7) = .TRUE. lsohtc26c(7) = .FALSE. lsohtc26cd(7) = .FALSE. cstreampath(1) = "${OCEOUTPATH:-./}" ! path for output cstreampath(2) = "${OCEOUTPATH:-./}" ! path for output cstreampath(3) = "${OCEOUTPATH:-./}" ! path for output cstreampath(4) = "${OCEOUTPATH:-./}" ! path for output cstreampath(5) = "${OCEOUTPATH:-./}" ! path for output cstreampath(6) = "${OCEOUTPATH:-./}" ! path for output cstreampath(7) = "${OCEOUTPATH:-./}" ! path for output ln_nc4zip_stream(1) = ${NC4F3D:-false} ln_nc4zip_stream(2) = ${NC4F3D:-false} ln_nc4zip_stream(3) = ${NC4F2D:-false} ln_nc4zip_stream(4) = ${NC4F2D:-false} ln_nc4zip_stream(5) = ${NC4F2D:-false} ln_nc4zip_stream(6) = ${NC4F2D:-false} ln_nc4zip_stream(7) = ${NC4F2D:-false} nn_nchunks_k_stream(3) = ${NC4F2DCHUNKZ:-1} nn_nchunks_k_stream(4) = ${NC4F2DCHUNKZ:-1} nn_nchunks_k_stream(5) = ${NC4F2DCHUNKZ:-1} nn_nchunks_k_stream(6) = ${NC4F2DCHUNKZ:-1} nn_nchunks_k_stream(7) = ${NC4F2DCHUNKZ:-1} / eof_namelist ;; esac #end-of-include $EXPVER/include/nemo_namelist.h ($EXPVER/include/prep_nemoIFS) echo "NEMO NAMELIST IS:" cat namelist fi echo "END NEMO NAMELIST" _eof_prep } JCAT3() { cat >$TMPDIR/kproctoab <<\_eof_kproctoab #include $EXPVER/include/kproctoab ($EXPVER/ifstraj_999.ecf) set -v #======================================================================= # # kproctoab - execute this code in the current shell to calculate # ka and kb from $kproc, where # kproc = ka x kb # and ka and kb are as close to sqrt(kproc) as possible # #======================================================================= set +v if [[ $kproc -eq 1 ]] ; then ka=1 kb=1 else isqr=$( echo "scale=0 ; sqrt($kproc)" | bc) ja=$isqr while [[ $ja -le $kproc ]] ; do jb=$(( kproc / ja )) if [[ $(( ja * jb )) -eq $kproc ]] ; then if [[ $ja -ge $jb ]] ; then ka=$ja kb=$jb else ka=$jb kb=$ja fi break fi ja=$(( ja + 1 )) done fi _eof_kproctoab cat >$TMPDIR/mergeodb <<\_eof_mergeodb : #include $EXPVER/include/mergeodb ($EXPVER/ifstraj_999.ecf) #mergeodb version: 20101206 set -euxv #======================================================================= # # Script mergeodb # --------------- # # Purpose : Merge multiple ODB databases into one database # ------- and updates sequence numbers and other stuff # in preparation for IFS analysis run # # Usage : mergeodb [-l dbname] [-t task1] ... [-t taskN] [-s] [-w] [-f] # ----- # # Parameters : -l dbname - database name (default = 'ECMA') # ---------- -t task - database task(s) to be merged. # normally supplied multiple times. # refers to all $WDIR/$dbname.$task dirs # If no tasks were given, script will # automatically scan for tasks from # directory names $WDIR/$dbname.* # -s - if 2m/rh2m surface analysis or snow analysis or sekf # -w - if subwindows # -f - if fc_sens_obs # -m - if monitoring # -d - if forecast diagnostic # # # Example : mergeodb -l ECMA -t CONV -t ATOV # ------- # - merges conventional & level-1c databases # into a single database # - assumed to be located under # $WDIR/$dbname.CONV & $WDIR/$dbname.ATOV # respectively # #======================================================================= set +v thisdir=$(pwd) USAGE="$0 [-l dbname] [-t task1] ... [-t taskN] [-s surf_2m|surf_snow|sekf] [-w] [-f] [-m] [-d]" errflg=0 dbname=ECMA tasks= surf="" fc_sens_obs=0 subwindows=0 monitoring=1 fcdiag=0 while getopts l:s:fdt:wm option do case $option in l) dbname=$OPTARG;; s) surf=$OPTARG;; f) fc_sens_obs=1;; w) subwindows=1;; d) fcdiag=1;; t) tasks="$tasks $OPTARG";; m) monitoring=0;; \?) errflg=1;; esac done #======================================================================= # Check parameters #======================================================================= if [ $errflg -ne 0 ] ; then echo $USAGE >&2 exit 1 fi #======================================================================= # mergeodb : glue (partial) databases into one 'massive' database #======================================================================= #set +x lscreen_cont=false [[ $dbname != CCMA ]] && lscreen_cont=true ## EH Variable for screening in all trajectories - make global variable [[ -v uptraj ]] || lscreen_cont=false #-- Need auto-detection ? if [[ "$tasks" = "" && "$surf" != "sekf" ]] ; then if [[ $fcdiag -eq 1 ]] ; then cd $WDIR/../uptraj_$uptraj elif [[ $lscreen_cont = true ]] ; then cd $WDIR/uptraj_$uptraj else cd $WDIR fi tasks=$(ls -1d $dbname.* | perl -ne 'if (m/^'"$dbname"'\.(\w+)$/) { s/^'"$dbname"'\.(\w+)$/\1/g; print; }') # Exclude all satellite which are monitored passively and don't need to be part of the huge database exclude_list=$(echo $OBS_MONITORING | awk '{print tolower($0)}' | sed -e "s/\// /") for task in $exclude_list ; do tasks=$(echo $tasks | sed -e "s/$task//") done # Exclude satellites of the surface analysis which don't need to be part of the huge database exclude_surf=$(echo $OBS_SURF_ANAL | awk '{print tolower($0)}' | sed -e "s/\// /") for task in $exclude_surf ; do tasks=$(echo $tasks | sed -e "s/$task//") done cd $thisdir fi tasks=$(echo "$tasks" | perl -pe 's/(\S+)\s+/\1 /g;') if [[ $fcdiag -eq 1 ]] ; then saved_WDIR=$WDIR/.. else saved_WDIR=$WDIR fi if [[ "$surf" != "" ]] ; then export WDIR=$WDIR/$surf pmkdir $WDIR fi if [[ $monitoring -eq 0 ]] ; then export WDIR=$WDIR/monitor pmkdir $WDIR fi echo "Workdirectory: $WDIR" if [[ -f $WDIR/mergeodb_done_$dbname ]] ; then exit 0 fi cd $WDIR [[ -d $dbname ]] && rm -rf $dbname mkdir $dbname cd $dbname echo "*** Starting mergeodb: dbname=$dbname, tasks='$tasks'" pwd typeset n typeset npools=0 typeset ntables=0 typeset ntask=0 typeset ddfile=$dbname.dd typeset schema_file=$dbname.sch typeset flags_file=$dbname.flags typeset iomap_file=$WDIR/$dbname/$dbname.iomap typeset ddfile_task=/dev/null typeset schema_file_task=/dev/null typeset flags_file_task=/dev/null typeset taskdir typeset task typeset errfile=$WDIR/mergeodb.in_error rm -f $errfile #-- Start (virtual) I/O-map file (format=2) echo "2" > $iomap_file echo "$(date): Start symbolic linking" # create symbolic links to the original taskdir's pools last_ddfile="" typeset alltasks="" if [[ "$dbname" = "CCMA" ]] ; then dots="$WDIR" elif [[ "$dbname" = "MONDB" ]] ; then dots="$WDIR" # To make sure we only merge (do not shuffle...) export ODB_MERGEODB_DIRECT=1 elif [[ $monitoring -eq 0 ]] ; then dots="../../uptraj_$uptraj" alltasks="$alltasks -s -m" elif [[ $fcdiag -eq 1 ]] ; then dots="../../uptraj_$uptraj" alltasks="$alltasks -s -m" elif [[ "$surf" = "surf_2m" || "$surf" = "surf_snow" || "$surf" = "sekf" ]] ; then dots="../.." alltasks="$alltasks -s" else if [[ $lscreen_cont = true ]]; then dots="../uptraj_$uptraj" else dots=".." fi fi if [[ $fc_sens_obs -eq 1 ]] ; then dots=".." alltasks="$alltasks -f" fi for task in $tasks do taskdir=$dots/$dbname.$task [[ -d $taskdir ]] || continue alltasks="$alltasks -t $task" ddfile_task=$taskdir/$ddfile [[ -f $ddfile_task ]] || { echo "***Error: Unable to locate data dictionary-file ($ddfile_task) for component database '$task'" exit 1 } #-- when effective I/O-method is 4 (horizontally concatenated table-files), # we also need I/O-map files, in order to retrieve offset-information for partial extraction typeset eff_io_method=$(head -1 $ddfile_task | awk '{print $3}' | sed 's/ //g') if [[ "$eff_io_method" = 4 ]] ; then if [[ $lscreen_cont = true ]] || [[ $fcdiag -eq 1 ]] ; then typeset iomap_file_task=$saved_WDIR/uptraj_$uptraj/$dbname.$task/$dbname.iomap else typeset iomap_file_task=$saved_WDIR/$dbname.$task/$dbname.iomap fi if [[ ! -f $iomap_file_task ]] ; then echo "***Error: Unable to locate I/O-map file ($iomap_file_task) for component database '$task'" exit 1 fi if [[ "$surf" = "surf_2m" || "$surf" = "surf_snow" || "$surf" = "sekf" || $fcdiag -eq 1 ]] ; then iomap_file_task="$saved_WDIR/$dbname.$task/$dbname.iomap" elif [[ $monitoring -eq 0 ]] ; then iomap_file_task="$saved_WDIR/uptraj_$uptraj/$dbname.$task/$dbname.iomap" else if [[ $lscreen_cont = true ]]; then iomap_file_task="\$WDIR/uptraj_${uptraj}/$dbname.$task/$dbname.iomap" else iomap_file_task="\$WDIR/$dbname.$task/$dbname.iomap" fi fi echo "$iomap_file_task" >> $iomap_file fi schema_file_task=$taskdir/$schema_file if [[ ! -f $schema_file ]] ; then cp $schema_file_task $schema_file || { echo "***Error: Unable to copy SCHEMA-file from '$schema_file_task' to '$schema_file'" exit 1 } fi flags_file_task=$taskdir/$flags_file if [[ ! -f $flags_file ]] ; then cp $flags_file_task $flags_file || { echo "***Error: Unable to copy FLAGS-file from '$flags_file_task' to '$flags_file'" exit 1 } fi last_ddfile=$ddfile_task typeset ncount=$(head -5 $ddfile_task | tail -1) ((ntask+=1)) [[ $((ntask%${_NPES_})) -eq 0 ]] && wait ((npools+=$ncount)) done wait if [[ -f $errfile ]] ; then echo "***Error has occurred while trying to create symbolic links to component databases" set -x cat $errfile exit 1 fi # reconstruct dd-file for merged case [[ -f $ddfile ]] || { [[ -f $ddfile_task ]] || { echo "***Error: Cannot locate any task specific DD-files; tried='$ddfile_task'" exit 1 } # Records #1..4 head -4 $ddfile_task > $ddfile # Record #5 : no. of pools in the merged case echo $npools >> $ddfile # Record #6 : no. of tables ntables=$(head -6 $ddfile_task | tail -1) echo $ntables >> $ddfile # Records #6+1..6+$ntables (i.e. table names) perl -ne 'if (/^\d+ @/) { s/^(\d+ @\w+\b).*/\1 -1/; print;}' $ddfile_task >> $ddfile # The rest of the file after record #6+$ntables typeset skip_rec=$((6+ntables)) perl -ne '$nr++; print if ($nr>'"$skip_rec"');' $ddfile_task >> $ddfile } echo "mergeodb: Total number of pools : $npools" # Create IOASSIGN file(s) under $WDIR/$dbname echo "mergeodb: create_ioassign -l $dbname -d $WDIR/$dbname -n $npools $alltasks" create_ioassign -l $dbname -d $WDIR/$dbname -n $npools $alltasks echo "mergeodb: Total number of obs. groups : $ntask" echo "$(date): End symbolic linking" # We will exit, if MERGEODB is meant to be run from within ifstraj_0 export ODB_MERGEODB_DIRECT=${ODB_MERGEODB_DIRECT:=0} [[ $ODB_MERGEODB_DIRECT -eq 0 ]] || exit 0 if [[ $dbname = CCMA ]] ; then #-- With dbname CCMA we modify seqno@hdr only export ODB_SEQNO_INC=${ODB_SEQNO_INC:=10000000} n=0 if [[ $subwindows -gt 0 ]] ; then for task in $tasks do if [[ $n -gt 0 ]] ; then dbdir=$WDIR/$dbname.$task export IOASSIGN=$dbdir/$dbname.IOASSIGN export ODB_SRCPATH_$dbname=$dbdir export ODB_DATAPATH_$dbname=$dbdir export ODB_CONSIDER_TABLES="/hdr/" run_parallel $BINS/adjust_seqnos.x $dbname $n #Hint: When going reverse: put -$n instead $n i.e. #-- run_parallel $BINS/adjust_seqnos.x $dbname -$n fi ((n += $ODB_SEQNO_INC)) done fi elif [[ "$surf" = "surf_2m" || "$surf" = "surf_snow" ]] ; then echo "mergeodb: surface analysis done..." else #-- An important thing for reproducible results when changing no. of PEs (the default is 4) export ODB_REPRODUCIBLE_SEQNO=${ODB_REPRODUCIBLE_SEQNO:=-1} if [[ -f $WDIR/$dbname.simulobs/$dbname.dd ]] ; then export SIMULOBS=1 else export SIMULOBS=0 fi export ODB_IO_GRPSIZE=$(grpsize $dbname) odbshuffle -i$dbname -o$dbname || { echo "***Error: ODBSHUFFLE/update for database '$dbname' has failed" exit 1 } fi cd $thisdir echo "MERGEODB finished at $(date)" > $WDIR/mergeodb_done_$dbname exit _eof_mergeodb cat >$TMPDIR/odbshuffle <<\_eof_odbshuffle : #include $EXPVER/include/odbshuffle ($EXPVER/ifstraj_999.ecf) #odbshuffle version: 20120306 set -euxv #======================================================================= # # A script for ODB-software (batch version): # # (1) to create load balanced ECMA-database from ECMASCR # (2) to create load balanced CCMA-database from ECMA # (3) to perform matchup from CCMA to ECMA databases # # Usage: odbshuffle -i input_db # -o output_db # -N no. PEs to be used (default=$NPES, max<=no. of pools; auto-adjusted) # -n no. of observations to average (-n3 --> mask3x3) # -a no. of (virtual) procs in A-dir (default=no. of pools in input database) # -b no. of (virtual) procs in B-dir (default=1) # -T no. of timeslots (default=determined from IFSMODE) # -L date for left margin in minutes (default=basetime - x ; depends on IFSMODE) # -R date for right margin in minutes (default=basetime + y ; depends on IFSMODE) # -F ECMA or CCMA (final traj performed with ECMA=default or CCMA ?) # -u max no. of updates (default=MXUP_TRAJ) # -r randomize obs distribution over the globe (default : do not randomize) # -w weighting method for obs distribution (default = 407) # -m (to indicate that reverse matchup is to be performed) # -l label # -c subwindow number (>0 when subwindows) # -s (to indicate that matchup of sink-variables is to be performed) # -p run odbprune # # Author: Sami Saarinen, ECMWF, 17-Sep-1999 (initial interactive version) # -"- -"- 15-Dec-1999 (prod. vers#1 : ECMA->CCMA & ECMASCR->ECMA) # -"- -"- 22-Dec-1999 (batch version) # -"- -"- 17-Jan-2000 (matchup : CCMA->ECMA update) # -"- -"- 04-Feb-2001 (odbshuffle ECMA->CCMA run internally from IFS) # -"- -"- 05-Feb-2001 (odb2ecma follows matchup internally if -P is used) # -"- -"- 26-Nov-2001 (new tables added due to BUFR2ODB) # -"- -"- 20-Dec-2001 (BUFR2ODB support i.e. in-place update of ECMA from bufr2odb) # -"- -"- 27-Jan-2005 (Add option -m to perform reverse matchup of ECMA->CCMA) # -"- -"- 27-Jan-2005 (Removal of obsolete -P and -c options) # -"- -"- 02-Feb-2005 (Add -l option) # -"- -"- 13-Feb-2007 (Run odbprune when necessary) # -"- -"- 23-Nov-2007 (-s option : matchup of sink-variables) # -"- -"- 12-May-2008 (thecase=matchupsink not [just] matchup when using -s option) # #======================================================================= set +v : #include $EXPVER/include/cycle_times ($EXPVER/include/odbshuffle) #======================================================================= # # cycle_times # ----------- # # Purpose : Define variables control the date and times for # ------- cycling of the assimilation window. # #======================================================================= IFSMODE=${IFSMODE:=none} PERIOD_4D=${PERIOD_4D:=-999999} WINDOW_LENGTH_4D=${WINDOW_LENGTH_4D:=-999999} WINDOW_OFFSET_4D=${WINDOW_OFFSET_4D:=-999999} REINIWINDOW_LENGTH_4D=${REINIWINDOW_LENGTH_4D:=-999999} NUMINI=${_NUMINI_} PERIOD_BG=${PERIOD_BG:=-999999} echo "NUMINI=$NUMINI" # The variables below are derived from WINDOW_LENGTH_4D and WINDOW_OFFSET_4D # later in this file if WINDOW_LENGTH_4D is specified WINDOW_START=-999999 WINDOW_END=-999999 BKG_TIME=-999999 NXBGTIME=-999999 FIRST_AN=-999999 LAST_AN=-999999 STEP_AN=-999999 NO6HTSL=-999999 #======================================================================= # Determine appropriate value for PERIOD_AN and PERIOD_OBS #======================================================================= PERIOD_AN_ATM=${PERIOD_AN_ATM:=6} PERIOD_AN_SFC=${PERIOD_AN_SFC:=6} LPERIOD_AN_SFC=${LPERIOD_AN_SFC:=false} # Set PERIOD_AN, using $LPERIOD_AN_SFC to select between # surface-related tasks and the atmospheric 4d-var if [[ $LPERIOD_AN_SFC = true ]] ; then PERIOD_AN=${PERIOD_AN_SFC} else PERIOD_AN=${PERIOD_AN_ATM} fi # Allow to override this via ecFlow variable - this enables it to be # optionally relaxed from 6 to 12 in the archiving family for CAMS # experiments if you don't need to archive the 06Z and 18Z analyses # (which aren't used to initialise forecasts in a 03-15 window). PERIOD_AN=${_PERIOD_AN_} echo "PERIOD_AN=$PERIOD_AN" PERIOD_OBS=6 #======================================================================= # Some basic prints #======================================================================= echo "BASETIME=$BASETIME" echo "PERIOD_4D=$PERIOD_4D" echo "WINDOW_LENGTH_4D=$WINDOW_LENGTH_4D" echo "WINDOW_OFFSET_4D=$WINDOW_OFFSET_4D" if [[ $WINDOW_LENGTH_4D -gt 0 ]] ; then WINDOW_CUTOFF_4D=$(( WINDOW_LENGTH_4D - WINDOW_OFFSET_4D )) else WINDOW_CUTOFF_4D=-999999 fi echo "WINDOW_CUTOFF_4D=$WINDOW_CUTOFF_4D" echo "PERIOD_BG=$PERIOD_BG" #======================================================================= # Checks #======================================================================= if [[ $WINDOW_OFFSET_4D -gt $WINDOW_LENGTH_4D ]] ; then echo "Window offset is longer than assimilation window" exit 1 fi if [[ $PERIOD_BG -lt $PERIOD_4D ]]; then case $IFSMODE in 4d_inc|3d_fgat|early_delivery) echo "Background cannot be more recent than previous cycle" exit 1 ;; esac fi #======================================================================= # Determine correct BASETIME #======================================================================= INIBEGINDATE=${_INIBEGINDATE_} _inihour=${_INIBEGINHOUR_} INIBEGINHOUR=$(printf %02d $_inihour) if [[ $FAMILY = */make/* || $FAMILY = */inicond/* ]] ; then if [[ $FAMILY = */make/* ]] ; then CYCLETIME=$(echo ${INIBEGINDATE}${INIBEGINHOUR} | cut -c1-10) fi back=$(( (NUMINI+1) * PERIOD_4D )) CYCLETIME=$( newdate $CYCLETIME -$back ) fi echo "CYCLETIME=$CYCLETIME" #======================================================================= # Split outer loop #======================================================================= NSPLIT4DWIN=${NSPLIT4DWIN:=0} NSUBWIN4D=0 SUBWIN_OFFSET=0 LSPLIT4D_SPINUP=false if [[ $NSPLIT4DWIN -gt 0 ]] ; then subtime=$CYCLETIME isubwin=1 while [[ $isubwin -le $NSPLIT4DWIN ]] ; do if [[ $subtime -ge $INITIME ]] ; then NSUBWIN4D=$isubwin fi isubwin=$((isubwin + 1)) subtime=$(newdate $subtime -$WINDOW_LENGTH_4D) done [[ $NSUBWIN4D -lt $NSPLIT4DWIN ]] && LSPLIT4D_SPINUP=true [[ $NSUBWIN4D -gt 1 ]] && SUBWIN_OFFSET=$(( WINDOW_LENGTH_4D * (NSUBWIN4D-1) )) fi echo "NSPLIT4DWIN=$NSPLIT4DWIN" echo "NSUBWIN4D=$NSUBWIN4D" echo "SUBWIN_OFFSET=$SUBWIN_OFFSET" #======================================================================= # Beginning and end of the current window #======================================================================= if [[ $WINDOW_LENGTH_4D -gt 0 ]] ; then WINDOW_START=$( newdate $CYCLETIME -$WINDOW_OFFSET_4D ) WINDOW_END=$( newdate $CYCLETIME $WINDOW_CUTOFF_4D ) echo "WINDOW_START=$WINDOW_START" echo "WINDOW_END=$WINDOW_END" #======================================================================= # Background #======================================================================= BKG_STEP=${STEP_BG:=3} if [[ $REINITIALIZE = true && $REINI_NOT_ED = true ]] ; then BKG_STEP=$(( BKG_STEP + REINIOFFSET - PERIOD_AN )) fi echo "BKG_STEP=$BKG_STEP" BKG_TIME=$( newdate $WINDOW_START -$BKG_STEP ) echo "BKG_TIME=$BKG_TIME" if [[ $REINITIALIZE = true || $LEDFAMILY = true ]] ; then WINDOW_LENGTH_BG=$REINIWINDOW_LENGTH_4D else WINDOW_LENGTH_BG=$WINDOW_LENGTH_4D fi echo "WINDOW_LENGTH_BG=$WINDOW_LENGTH_BG" BKG_OFFSET=$(( WINDOW_LENGTH_BG - PERIOD_BG + BKG_STEP )) echo "BKG_OFFSET=$BKG_OFFSET" # Time for next background (ie start of cycling fc) NXBGTIME=$( newdate $WINDOW_END -$BKG_OFFSET ) # EH: Below is for ED 8h window - need to correct in a general way if [[ $LEDFAMILY = true ]] ; then NXBGTIME=$CYCLETIME fi echo "NXBGTIME=$NXBGTIME" #======================================================================= # Find analysis (synoptic) times #======================================================================= hh="$(substring $WINDOW_START 9 10)" # sh step=$(( 10#$hh % PERIOD_AN )) [[ $step -gt 0 ]] && step=$(( PERIOD_AN - step )) FIRST_AN=$( newdate $WINDOW_START $step ) if [[ $CERA_OUT = true && $FIRST_AN = $WINDOW_START ]] ; then # Until overlapping windows are fully implemented, cannot archive analysis at start of window FIRST_AN=$( newdate $WINDOW_START +$PERIOD_AN) fi hh="$(substring $WINDOW_END 9 10)" step=$(( 10#$hh % PERIOD_AN )) LAST_AN=$( newdate $WINDOW_END -$step) if [[ $FAMILY = */make/* || $FAMILY = */inicond/* ]] ; then FIRST_AN=$NXBGTIME LAST_AN=$NXBGTIME fi STEP_AN=$( datediff -h $FIRST_AN $WINDOW_START ) echo "FIRST_AN=$FIRST_AN" echo "LAST_AN=$LAST_AN" echo "STEP_AN=$STEP_AN" hh_start=$( substring $WINDOW_START 9 10 ) echo "hh_start=$hh_start" case $hh_start in 03|09|15|21) NO6HTSL=$(( WINDOW_LENGTH_4D / PERIOD_OBS )) ;; *) NO6HTSL=$(( WINDOW_LENGTH_4D / PERIOD_OBS + 1 )) esac echo "NO6HTSL=$NO6HTSL" ## Wave model assimilation ## Enforce 6 hourly wave assimilation wam_assimil_period=${WAM_ASSIMIL_PERIOD:=6} if [[ $wam_assimil_period -lt 6 ]] ; then if [[ $FAMILY = */make/* || $FAMILY = */inicond/* ]] ; then anstart=$NXBGTIME else anstart=$WINDOW_START fi FIRST_AN_WAVE=$( newdate $anstart $wam_assimil_period ) PERIOD_AN_WAVE=$wam_assimil_period LAST_AN_WAVE=$WINDOW_END else FIRST_AN_WAVE=$FIRST_AN PERIOD_AN_WAVE=$PERIOD_AN LAST_AN_WAVE=$LAST_AN fi fi #======================================================================= # End cycle_times #======================================================================= WINDOW_LENGTH_4D_TOT=$(( WINDOW_LENGTH_4D + SUBWIN_OFFSET )) echo "WINDOW_LENGTH_4D_TOT=$WINDOW_LENGTH_4D_TOT" #======================================================================= # Things that do not depend on current cycle time #======================================================================= DATE_OPER_DCDA=2004062900 DATE_OPER_ENDA=2010062200 DATE_OPER_LWDA=2013111900 ANOFFSET_TYPES='4i|4v|an|fc|ef|ea|me|em|es|ses' WINDOW_LENGTH_4D_TOT_OPER=12 EDA_WINDOW_LENGTH_4D_TOT_OPER=12 EDA_WINDOW_LENGTH_4D=${EDA_WINDOW_LENGTH_4D:=12} INI_WINDOW_LENGTH_4D=${INI_WINDOW_LENGTH_4D:=12} EDACLASS=${EDACLASS:=od} EDAEXPVER=${EDAEXPVER:=0001} LEDA_ERRORS_IN=${LEDA_ERRORS_IN:=true} if [[ $LEDA_ERRORS_IN = true && $EDACLASS = od && $EDAEXPVER = 0001 && $BASETIME -ge $DATE_OPER_LWDA ]] ; then if [[ $LEVELS = 137 ]] ; then LJB_EDA=true fi LSES_EDA=true fi #======================================================================= # Setting for archiving via NPOSTS argument in NAMCT0, used by sekf_sm and ifstraj and ansfc #======================================================================= PPSTEP_INC=3 if [[ $PERIOD_AN -lt 3 ]] ; then PPSTEP_INC=$PERIOD_AN fi echo "PPSTEP_INC=$PPSTEP_INC" #end-of-include $EXPVER/include/cycle_times ($EXPVER/include/odbshuffle) CMD=$(basename $0) PARAMS="$@" FLAGS=i:o:n:a:b:N:T:L:R:F:u:rw:ml:c:sptf PRINT_FLAGS=$(echo $FLAGS | sed 's/://g') usage="Usage: $CMD [-${PRINT_FLAGS}]" # # Parse arguments # thecase=none na=0 nb=0 nab=0 npools=0 input_db=none output_db=none mxup_traj=$MXUP_TRAJ obs_randomize="" wtmethod=407 subwindows=0 run_odbprune=1 if [[ $IFSMODE = 3d_inc ]] ; then mhalf_period=$(( PERIOD * 30 )) tslots=1 left_margin=$(( 1 - mhalf_period )) right_margin=${mhalf_period} else tslotmin=$(( $TSLOTSEC / 60 )) n4dmin=$(( WINDOW_LENGTH_4D * 60 )) tslots=$(( n4dmin / tslotmin + 1 )) right_margin=$(( 60 * WINDOW_CUTOFF_4D )) left_margin=$(( right_margin - n4dmin )) fi fintraj=ECMA revmatchup=0 label="" sink=0 sinkarg="" matchup=matchup nobs_averaged=0 abort=no init_odb_tables=0 FCDEPAR=0 while getopts ${FLAGS} i do # echo '$i='"$i : $OPTARG" case $i in i) input_db="$OPTARG";; o) output_db="$OPTARG";; N) export NPES="$OPTARG";; n) nobs_averaged="$OPTARG";; a) na="$OPTARG";; b) nb="$OPTARG";; T) tslots="$OPTARG";; L) left_margin="$OPTARG";; R) right_margin="$OPTARG";; F) fintraj="$OPTARG";; u) mxup_traj="$OPTARG";; r) obs_randomize="-r";; w) wtmethod="$OPTARG";; m) revmatchup=1;; c) subwindows="$OPTARG";; l) label=".$OPTARG";; s) sink=1; sinkarg="-s"; matchup=matchupsink;; p) run_odbprune=0;; t) init_odb_tables=1;; f) FCDEPAR=1;; \?) abort=yes; break;; esac done # # Detect case from input_db & output_db # input_dir=$WDIR/$input_db output_dir=$WDIR/$output_db input_db=$(cut -d'.' -f2 <<<"$input_db") output_db=$(cut -d'.' -f2 <<<"$output_db") if [[ "$abort" = "no" ]] ; then if [[ "$input_db" = "ECMASCR" && "$output_db" = "ECMA" ]] ; then thecase=screen elif [[ "$input_db" = "ECMA" && "$output_db" = "CCMA" ]] ; then if [[ $revmatchup -eq 0 ]] ; then thecase=minim else # reverse matchup thecase=revmatchup fi elif [[ "$input_db" = "CCMA" && "$output_db" = "ECMA" ]] ; then thecase=$matchup elif [[ "$input_db" = "ECMA" && "$output_db" = "ECMA" ]] ; then thecase=bufr2odb else echo "***Error: Conflicting input ($input_db) and output ($output_db) databases" abort=yes fi fi # # Check existence of directories # if [[ ! -d $input_dir ]] ; then echo "*** Error: Input directory '$input_dir' for database '$input_db' does not exist" abort=yes fi if [[ "$abort" = "no" ]] && [[ "$output_dir" = "" ]] ; then output_dir=$(echo $input_dir | awk -F/ '{for(i=2;i Input-DB = '$input_db'" echo "==> Input = '$input_dir'" echo "==> Output-DB = '$output_db'" echo "==> Output = '$output_dir'" echo "==> Case = '$thecase'" echo "==> FinTraj-DB= '$fintraj'" echo "==> npools=$npools, nab=$nab, na=$na, nb=$nb, NPES=$NPES" shift $(expr $OPTIND - 1) if [[ $# -ne 0 || "$abort" = "yes" ]] ; then echo "$usage" >&2 # echo "Flags:" exit 1 fi #======================================================================= # Silence Dr.Hook #======================================================================= export DR_HOOK_SHOW_PROCESS_OPTIONS=${DR_HOOK_SHOW_PROCESS_OPTIONS:=0} export DR_HOOK_SILENT=${DR_HOOK_SILENT:=1} #======================================================================= # Enable/Disable heap allocation profiling #======================================================================= #export EC_PROFILE_HEAP=1 # Enabled export EC_PROFILE_HEAP=0 # Disabled # # Get going # set +x #-- a bit more debugging from ODB's getdb/putdb ... # the value if > 0 indicates proc id [1..$NPES] # if == -1, then all procs output! #export ODB_CTX_DEBUG=1 #-- Want ODB-tracing ? tracefile_prefix=$WDIR/trace.odbshuffle.$thecase rm -f $tracefile_prefix.* || : #export ODB_TRACE_FILE=$tracefile_prefix.%d #export ODB_TRACE_FLUSH_FREQ=1 #-- all procs #export ODB_TRACE_PROC=-1 #-- PE#1 (f.ex.) #export ODB_TRACE_PROC=1 #-- none of the PEs (the default) #export ODB_TRACE_PROC=0 cd $input_dir args="-a$na -b$nb -B$yyyymmddhh -L$left_margin -R$right_margin \ -T$tslots -u$mxup_traj -w$wtmethod $obs_randomize $sinkarg -n$nobs_averaged" if [[ $thecase = bufr2odb ]] ; then export ODB_ECMA_CREATE_POOLMASK=0 export ODB_ECMA_POOLMASK_FILE=$WDIR/poolmask.ECMA [[ -f $ODB_ECMA_POOLMASK_FILE ]] && rm -f $ODB_ECMA_POOLMASK_FILE export ODB_REPRODUCIBLE_SEQNO=${ODB_REPRODUCIBLE_SEQNO:=-1} export ODB_SRCPATH_ECMA=$input_dir export ODB_DATAPATH_ECMA=$input_dir export ODB_SRCPATH_ECMA=$output_dir export ODB_DATAPATH_ECMA=$output_dir args="-iECMA -oECMA $args" if [[ $init_odb_tables -eq 1 ]] ; then args="$args -t" fi if [[ $FCDEPAR -eq 1 ]] ; then args="$args -f" fi elif [[ $thecase = screen ]] ; then export ODB_ECMA_CREATE_POOLMASK=0 export ODB_ECMA_POOLMASK_FILE=$WDIR/poolmask.ECMA [[ -f $ODB_ECMA_POOLMASK_FILE ]] && rm -f $ODB_ECMA_POOLMASK_FILE export ODB_SRCPATH_ECMASCR=$input_dir export ODB_DATAPATH_ECMASCR=$input_dir export ODB_SRCPATH_ECMA=$output_dir export ODB_DATAPATH_ECMA=$output_dir args="-iECMASCR -oECMA $args" elif [[ $thecase = minim ]] ; then export ODB_CCMA_CREATE_POOLMASK=0 export ODB_CCMA_POOLMASK_FILE=$WDIR/poolmask.CCMA [[ -f $ODB_CCMA_POOLMASK_FILE ]] && rm -f $ODB_CCMA_POOLMASK_FILE export ODB_SRCPATH_ECMA=$input_dir export ODB_DATAPATH_ECMA=$input_dir export ODB_SRCPATH_CCMA=$output_dir export ODB_DATAPATH_CCMA=$output_dir args="-iECMA -oCCMA $args" elif [[ $thecase = revmatchup ]] ; then export ODB_SRCPATH_ECMA=$input_dir export ODB_DATAPATH_ECMA=$input_dir export ODB_SRCPATH_CCMA=$output_dir export ODB_DATAPATH_CCMA=$output_dir args="-iECMA -oCCMA $args -m -c$subwindows" if [[ $subwindows -gt 0 ]] ; then #AF add seqnos adjustment of CCMA export CD_KEEP=$(pwd) cd $output_dir run_parallel ${BINS}/revert_seqnos.x CCMA cd $CD_KEEP fi elif [[ $thecase = $matchup ]] ; then export ODB_SRCPATH_CCMA=$input_dir export ODB_DATAPATH_CCMA=$input_dir export ODB_SRCPATH_ECMA=$output_dir export ODB_DATAPATH_ECMA=$output_dir args="-iCCMA -oECMA $args -F$fintraj" fi #======================================================================= # Need to run odbprune ? #======================================================================= odbprune_db=none if [[ ${ODB_IO_BACKUP_ENABLE:=0} -eq 0 ]] && [[ $run_odbprune -eq 1 ]] ; then if [[ $thecase = screen ]] ; then odbprune_db="ECMASCR ECMA" elif [[ $thecase = minim ]] ; then odbprune_db="CCMA ECMA" elif [[ $thecase = revmatchup ]] ; then odbprune_db="CCMA ECMA" elif [[ $thecase = $matchup ]] ; then if [[ $sink -eq 0 ]] ; then odbprune_db="CCMA ECMA" fi elif [[ $thecase = bufr2odb ]] ; then odbprune_db="ECMA" fi fi #======================================================================= # In case of $ODB_IO_METHOD=4, consider only non-BUFR related tables # -- except in "matchup", where we need to load only those tables # which are present in the (smaller) i.e. CCMA database # -- except in "screen", where ECMA & ECMASCR should have ALL tables # in principle exchanged #======================================================================= if [[ $thecase = screen ]] ; then tables='*' elif [[ $thecase = $matchup ]] ; then if [[ $sink -eq 0 ]] ; then ddfile=$WDIR/CCMA/CCMA.dd if [[ -s $ddfile ]] ; then tables="$(egrep '^@' $ddfile | awk '{print $1}' | perl -pe 's#\@#/#g; s#\s*$##')/" fi else tables="/desc/poolmask/timeslot_index/index/hdr/sat/radiance/" fi elif [[ $thecase = revmatchup ]] ; then tables="/timeslot_index/index/hdr/body/" else tables='* except /bufr/' fi export ODB_CONSIDER_TABLES="$tables" #======================================================================= #-- Remove any data files from the previous runs #======================================================================= if [[ $thecase = screen ]] || \ [[ $thecase = minim ]] ; then rm -rf $output_dir mkdir -p $output_dir || { echo "*** Error: Cannot create output directory '$output_dir' for database '$output_db'" exit 1 } fi #======================================================================= # Create IOASSIGN #======================================================================= export IOASSIGN=$TMPDIR/IOASSIGN.$thecase rm -f $IOASSIGN cat /dev/null > $IOASSIGN if [[ $thecase = bufr2odb ]] ; then export ODB_IO_GRPSIZE=$(grpsize ECMA) if [[ -f $WDIR/ECMA/ECMA.IOASSIGN ]] ; then cat $WDIR/ECMA/ECMA.IOASSIGN >> $IOASSIGN else cat $input_dir/IOASSIGN >> $IOASSIGN odbprune_db="none" fi elif [[ $thecase = screen ]] ; then export ODB_IO_GRPSIZE=$(grpsize ECMASCR) cat $WDIR/ECMASCR/ECMASCR.IOASSIGN >> $IOASSIGN create_ioassign -l ECMA -d $WDIR/ECMA -n $npools cat $WDIR/ECMA/ECMA.IOASSIGN >> $IOASSIGN elif [[ $thecase = minim ]] ; then export ODB_IO_GRPSIZE=$(grpsize ECMA) if [[ -f $WDIR/ECMA/ECMA.IOASSIGN ]] ; then cat $WDIR/ECMA/ECMA.IOASSIGN >> $IOASSIGN else cat $input_dir/IOASSIGN >> $IOASSIGN odbprune_db="none" fi if [[ -d $WDIR/CCMA ]] ; then create_ioassign -l CCMA -d $WDIR/CCMA -n $npools cat $WDIR/CCMA/CCMA.IOASSIGN >> $IOASSIGN else create_ioassign -l CCMA -d $output_dir -n $npools cat $output_dir/CCMA.IOASSIGN >> $IOASSIGN fi elif [[ $thecase = revmatchup ]] ; then cat $input_dir/ECMA.IOASSIGN >> $IOASSIGN cat $WDIR/CCMA/CCMA.IOASSIGN >> $IOASSIGN elif [[ $thecase = $matchup ]] ; then export ODB_IO_GRPSIZE=$(grpsize ECMA) cat $WDIR/CCMA/CCMA.IOASSIGN >> $IOASSIGN cat $output_dir/ECMA.IOASSIGN >> $IOASSIGN fi # # Execute # pwd ls -ltr export DR_HOOK_PROFILE=$WDIR/drhook.odbshuffle.$thecase$label rc=0 run_parallel ${BINS}/shuffle.x $args || rc=$? #-------------------------------------------------------------------- # Run odbprune, if required #-------------------------------------------------------------------- if [[ $rc -eq 0 && "$odbprune_db" != "none" ]] ; then thisdir=$(pwd) cd $WDIR errfile=errfile.$$ rm -f $errfile for x in $odbprune_db do if [[ $x = CCMA ]] ; then odbprune -i $x || touch $errfile & elif [[ $x = @(ECMA|ECMASCR) ]] ; then for d in $(\ls -C1d $WDIR/$x.* 2>/dev/null || :) do if [[ -d $d && -f $d/$x.dd ]] ; then ls -lrt $d ls -lrt $d/$x.dd odbprune -i $d || touch $errfile & fi done wait fi done wait if [[ -f $errfile ]] ; then echo "***Error: odbprune failed for one or more database(s) under $WDIR" rc=123 fi cd $thisdir fi #-------------------------------------------------------------------- if [[ $DR_HOOK = true && -f ${DR_HOOK_PROFILE}.1 ]] ; then head -100 ${DR_HOOK_PROFILE}.1 || : fi if [[ $DR_HOOK = true && -f ${DR_HOOK_PROFILE}.1-mem ]] ; then head -100 ${DR_HOOK_PROFILE}.1-mem || : fi cat $tracefile_prefix.* 2>/dev/null || true exit $rc _eof_odbshuffle cat >$TMPDIR/copyodb <<\_eof_copyodb : #include $EXPVER/include/copyodb ($EXPVER/ifstraj_999.ecf) #copyodb version: 20090902 set -euxv #======================================================================= # # Script copyodb # -------------- # # Purpose : Copy control ODB to this ENDA member # ------- # # Usage : copyodb # ----- # # Parameters : none # ---------- # #======================================================================= set +v : #include $EXPVER/include/var_include ($EXPVER/include/copyodb) #======================================================================= # # var_include # ----------- # # Purpose : Define variables to be used in various 4D-Var scripts # ------- # #======================================================================= NORDER_MODERR=${NORDER_MODERR:=0} LWEAK4DVAR=${LWEAK4DVAR:=false} LBGMODERR=${LBGMODERR:=true} LFSOBS=${LFSOBS:=false} LEMISKF=${LEMISKF:=false} ENDANENS=${ENDANENS:=0} LFCDEPAR=${LFCDEPAR:=false} INISTEP_FCDEPAR=${INISTEP_FCDEPAR:=0} INIEXPTYPE=${INIEXPTYPE:=an} NUPTRA_RANGE=${NUPTRA_RANGE:=0} LOBS_SCREEN=${LOBS_SCREEN:=false} #======================================================================= # Model Error #======================================================================= ggme="200133/200203/" # Try to guess what the family is (FSFAMILY does not work here...) family=$FAMILY [[ $ENDANENS -gt 0 ]] && family=$( dirname $FAMILY ) GUESS_FAMILY=$(echo $family | awk -F/ '{print $NF}') if [[ $LWEAK4DVAR = true ]] ; then if [[ $NTYPE_MODERR = @(2|3) ]] ; then NCOMP_MODERR=$(( 1 + 2 * NORDER_MODERR )) ggme="" else NCOMP_MODERR=1 fi NSTEP_MODERR=1 NDIM_MODERR=$(( NCOMP_MODERR * NSTEP_MODERR )) else NSTEP_MODERR=0 NCOMP_MODERR=0 NDIM_MODERR=0 fi #======================================================================= #end-of-include $EXPVER/include/var_include ($EXPVER/include/copyodb) #========================================================================= # Copyodb copies makecma generated control CMA files to the ENDA members #========================================================================= set -x if [[ $STREAM = ELDA ]] ; then ENDA_MEMBER=${_MEMBER_} if [[ $ENDA_MEMBER -eq 0 ]]; then ENDA_SUFFIX='' else ENDA_SUFFIX=$( basename $WDIR ) fi fi rm -f $WDIR/mergeodb_done_ECMA rm -f $WDIR/mergeodb_done_CCMA controldir=$WDIR/../control/uptraj_0/ cd $controldir pwd ls -ltrd ECMA.* [[ -d $WDIR/uptraj_0 ]] || mkdir $WDIR/uptraj_0 subproc="&" for d in ECMA.* do cd $WDIR/uptraj_0 if [[ -d $d ]] ; then mv $d old_$d eval "rm -rf old_$d $subproc" fi tarfile=$d.tar.do_not_use.just_for_restart if [[ -f $controldir/$tarfile ]] ; then echo "Processing tarfile $controldir/$tarfile for ${_FAMILY1_}" tar xf $controldir/$tarfile fi done #========================================================================= # Copy surface analysis and wave directories #========================================================================= echo "checking file $controldir/surf_2m" # for t2ana and rh2ana tasks if [ -d $controldir/surf_2m ] ; then cp -r $controldir/surf_2m $WDIR/uptraj_0/. cp $WDIR/uptraj_0/surf_2m/ECMA/ECMA.iomap $WDIR/uptraj_0/surf_2m/ECMA/ECMA.iomap.ori sed "s/control/$ENDA_SUFFIX/" $WDIR/uptraj_0/surf_2m/ECMA/ECMA.iomap.ori > $WDIR/uptraj_0/surf_2m/ECMA/ECMA.iomap rm -rf $WDIR/uptraj_0/surf_2m/ECMA/ECMA.iomap.ori fi echo "checking file $controldir/surf_snow" # for the snow task if [ -d $controldir/surf_snow ] ; then cp -r $controldir/surf_snow $WDIR/uptraj_0/. cp $WDIR/uptraj_0/surf_snow/ECMA/ECMA.iomap $WDIR/uptraj_0/surf_snow/ECMA/ECMA.iomap.ori sed "s/control/$ENDA_SUFFIX/" $WDIR/uptraj_0/surf_snow/ECMA/ECMA.iomap.ori > $WDIR/uptraj_0/surf_snow/ECMA/ECMA.iomap rm -rf $WDIR/uptraj_0/surf_snow/ECMA/ECMA.iomap.ori fi if [[ $LSEKF = true ]] ; then [[ -d $controldir/sekf ]] && cp -r $controldir/sekf $WDIR/uptraj_0/. # for the sekf task cp $WDIR/uptraj_0/sekf/ECMA/ECMA.iomap $WDIR/uptraj_0/sekf/ECMA/ECMA.iomap.ori sed "s/control/$ENDA_SUFFIX/" $WDIR/uptraj_0/sekf/ECMA/ECMA.iomap.ori > $WDIR/uptraj_0/sekf/ECMA/ECMA.iomap rm -rf $WDIR/uptraj_0/sekf/ECMA/ECMA.iomap.ori fi [[ -d $controldir/wave ]] && cp -r $controldir/wave $WDIR/uptraj_0/. pwd ls -ltrd ECMA.* exit _eof_copyodb } JCAT4() { cat >$TMPDIR/restartodb <<\_eof_restartodb : #include $EXPVER/include/restartodb ($EXPVER/ifstraj_999.ecf) #restartodb version: 20101209 set -euxv #======================================================================= # # Script restartodb # ----------------- # # Purpose : Recreate ECMA database from existing ECMA-tarfiles. # ------- No need to rerun makeodb, if these tar-files present. # Resets mergeodb-done status to false. # # Usage : restartodb # ----- # # Parameters : None # ---------- # #======================================================================= set +v ORIG_WDIR=$WDIR lscreen_cont=$LCONTINUOUS_DA ## screen incl latest arriving observations in all trajs [[ $STREAM = LWDA ]] && lscreen_cont=false # only do re-screening in Early Delivery n_extractions=1 [[ $lscreen_cont = true ]] && n_extractions=$MXUP_TRAJ rm -f $WDIR/mergeodb_done_ECMA if [[ $LOBS_SCREEN = true ]] ; then # Next line changed by RB to enable restartodb to be run if ifstraj fails # both mergeodb_done_ECMA and mergeodb_done_CCMA have to be removed prior to a rerun rm -f $WDIR/mergeodb_done_CCMA fi i=0 # global restart aka orig # if [[ "${I_EXTRACT:=}" != "" ]]; then i=$I_EXTRACT; n_extractions=$I_EXTRACT; fi # inner restart if [[ $OD_MODE = true && "${I_EXTRACT:=}" != "" ]]; then i=$I_EXTRACT; n_extractions=$(( I_EXTRACT + 1 )); fi # thanks Peter while [[ $i -lt $n_extractions ]]; do WDIR=$ORIG_WDIR/uptraj_${i} # FIXME ??? use I_EXTRACT_DIR or UPTRAJ variable cd $WDIR set +x pwd ls -ltrd ECMA.* subproc="&" for d in ECMA.* do if [[ -d $d ]] ; then mv $d old_$d eval "rm -rf old_$d $subproc" fi tarfile=$d.tar.do_not_use.just_for_restart if [[ -f $tarfile ]] ; then echo "Processing tarfile $tarfile" tar xf $tarfile fi done wait pwd ls -ltrd ECMA.* (( i = i + 1 )) done exit _eof_restartodb cat >$TMPDIR/run_parallel <<\_eof_run_parallel #include $EXPVER/include/run_parallel ($EXPVER/ifstraj_999.ecf) #run_parallel version: 20111113 #======================================================================= # # Script run_parallel # ------------------- # # Purpose : Run a parallel executable, possibly under mpirun # ------- and/or totalview debugger # # Usage : run_parallel [-F] [-s] [-n ] [-N ] [-S ] [-j ] [-d ] # [-H] [-h] [-p ] [-M ] [-m ] # ----- # # Parameters : [ -F ] (to force use of OMP_NUM_THREADS) # ---------- [ -s ] Run in serial mode (but in parallel environment, so can use MPI) # [ -n ] Number of MPI tasks to run (default $SUBMIT_TOTAL_TASKS/1) # [ -N ] Number of MPI tasks to run per node (default $SUBMIT_TASKS_PER_NODE/1) # [ -S ] Number of MPI tasks to run per NUMA node (default $SUBMIT_TASKS_PER_NUMA_NODE/1) # [ -j ] 1=No hyperthreading / n=n-way hyperthreading (default $SUBMIT_CPUS_PER_COMPUTE_UNIT/1) # [ -d ] Number of OMP threads to use (default $OMP_NUM_THREADS/1) # [ -H ] Force use of huge pages (default SMS:USE_HUGEPAGE) # [ -h ] Force not to use huge pages (default SMS:USE_HUGEPAGE) # [ -p ] Hugepage page size (megabytes) (default SMS:HUGEPAGE_SIZE) # [ -M ] Amount of memory (megabytes) to reserve for hugepages (default SMS:HUGEPAGE_MEMORY) # [ -m ] Number of different executables to run in MPMD mode (default $SUBMIT_TOTAL_EXECUTABLES/1) # # If num_exes==1 then the executable command to be run. # If num_exes>1 then a file containing a list of the executables+args to run, one per line # Arguments for # # Environment : RUN_PARALLEL - if "true" and $ARCH is not # ----------- fujitsu then the executable is # run under mpirun. # DEBUG - if DEBUG is set to the name of # the executable with the initial # path deleted, then the executable # is run under totalview. # # Externals : datediff -s - to get elapsed time in seconds # --------- # # # *** Will exit with non-zero return code if totalview gets invoked *** # #======================================================================= set -euxa force_ompthreads=false submit_total_tasks=${SUBMIT_TOTAL_TASKS:=1} submit_tasks_per_node=${SUBMIT_TASKS_PER_NODE:=1} submit_tasks_per_numa_node=${SUBMIT_TASKS_PER_NUMA_NODE:-1} submit_cpus_per_compute_unit=${SUBMIT_CPUS_PER_COMPUTE_UNIT:-1} submit_total_executables=${SUBMIT_TOTAL_EXECUTABLES:-1} submit_force_numa_memory_affinity="" omp_num_threads=${OMP_NUM_THREADS:-1} use_hugepage=${_USE_HUGEPAGE_} hugepage_size=${_HUGEPAGE_SIZE_} hugepage_memory=${_HUGEPAGE_MEMORY_} serial_mode=""; thread_stacksize_mb=${_THREAD_STACKSIZE_MB_} thread_guardsize_mb=${_THREAD_GUARDSIZE_MB_} coredump_size=${_COREDUMP_SIZE_} # This *must* be "unlimited" if we want to get *any* core-files from ATP !! case $use_hugepage in True | true | 1) use_hugepage=1;; False | false | 0) use_hugepage=0;; *) exit 1;; esac USAGE="Usage: $(basename $0) [-F] [-s] [-n ] [-N ] [-S ] [-j ] [-d ] [-H] [-h] [-p ] [-M ] [-t ] [-m ] " # Parse command line options. while getopts hFsn:N:S:j:d:m:t: OPT; do case "$OPT" in F) force_ompthreads=true ;; s) serial_mode=true ;; n) submit_total_tasks=$OPTARG ;; N) submit_tasks_per_node=$OPTARG ;; S) submit_tasks_per_numa_node=$OPTARG ;; j) submit_cpus_per_compute_unit=$OPTARG ;; d) omp_num_threads=$OPTARG ;; H) use_hugepage=1 ;; h) use_hugepage=0 ;; p) hugepage_size=$OPTARG ;; M) hugepage_memory=$OPTARG ;; m) submit_total_executables=$OPTARG ;; t) thread_stacksize_mb=$OPTARG ;; \?) # getopts issues an error message echo $USAGE >&2 exit 1 ;; esac done # Remove the switches we parsed above. shift $(($OPTIND - 1)) if [[ $# -lt 1 ]] ; then echo "run_parallel must be invoked with at least one argument" exit 1 elif [[ $# == 1 ]]; then cmd=$1 args="" else cmd=$1 shift args=$@ fi # Let serial_wrapper script know it is launched parallel already export ENV_RUN_PARALLEL=1 allocate_huge_page=0 if [[ ${_ECF_NAME_} == *4dvar* ]]; then allocate_huge_page=1; elif [[ ${_ECF_NAME_} == */sv/* ]]; then allocate_huge_page=1; elif [[ ${_ECF_NAME_} == */fc/* ]]; then allocate_huge_page=1; elif [[ ${_ECF_NAME_} == */jb_* ]]; then allocate_huge_page=1; elif [[ $cmd = "${IFS_EXECUTABLE}" ]] ; then allocate_huge_page=1; fi if [[ $serial_mode == true ]]; then submit_total_tasks=1 submit_tasks_per_node=1 submit_tasks_per_numa_node=1 submit_cpus_per_compute_unit=1 submit_total_executables=1 omp_num_threads=1 fi # Start run_parallel timer # First retrieve any previous accumulated run_parallel times in this task if [[ -n ${_run_parallel_timer_file:-""} && -f $_run_parallel_timer_file ]]; then . $_run_parallel_timer_file else _script_parallel_time=0 _script_parallel_count=0 _script_serial_time=0 _script_serial_count=0 fi _run_parallel_start_time=$SECONDS if [[ "$(basename $cmd)" = "mpi_scheduler.x" ]] ; then #-- remove backslashes on machines that do NOT use mpirun (reason: w/o backlashes eats [;<>] ;-) # removal currently needed perhaps only on all, but sgimips (uses mpirun) [[ $ARCH = sgimips ]] || args=$(echo "$args" | perl -pe 's/\\([;<>])/\1/g;') fi if [[ $ARCH != "atos-rome64" ]]; then # New MPL_GETARG needs terminating argument after which any silly # MPI-implementation can add their own args without interfering # our arg-list (15-Mar-2006/SS). See ifsaux/module/mpl_arg_mod.F90. # If cl_terminate is not present, IBM version of MPI still works, but MPICH not. # # If you don't like the default '-^', you can override it with another string # (up to 10 characters long) via export MPL_CL_TERMINATE= export MPL_CL_TERMINATE=${MPL_CL_TERMINATE:="-^"} cl_terminate=$MPL_CL_TERMINATE args="$args $cl_terminate" fi echo "==> args=$args" npes=${NPES:-1} [[ $npes -gt 1 ]] || npes=1 if [[ $DEBUG = ${cmd##*/} ]] ; then export DISPLAY=${_DISPLAY_} # Confirm that user is at display ready to debug timeout=${_TIMEOUT_} [[ ${_QUIETWARNING_} != 0 ]] && regularBell=0 || regularBell=10 # Ring the bell every 10s unless SMS QUIETWARNING is set start=$(checkUserReady --title "$EXPVER : Totalview session" --timeout $timeout --exitTimeout 0 --OKMessage "start" --regularBell $regularBell) # Pop up dialog on user's screen if [[ $start != "start" ]]; then echo $start echo "Exiting as user has not responded to interactive prompt" exit 1 fi fi # Enforce numerical reproducibility in MKL 19.0.5 or higher # otherwise single precision IFS is not bit reproducible export MKL_CBWR=AUTO,STRICT echo "=== Starting $cmd on $npes PEs at $(date) ===" start_date=$(date +%Y%m%d%H%M%S) echo "=== Command-line arguments are: \"$args\" ===" echo "=== Execution commences from directory $(hostname):$(pwd) ===" if [[ ${RUN_PARALLEL} = true || ${cmd} = mrfs2disk || ${cmd} = disk2mrfs ]] ; then ulimit -a echo "System load: $(uptime)" set -x if [[ ${ARCH} = "atos-rome64" ]]; then # Check we can run executable if [[ ${submit_total_executables} == 1 && ! -x $(whence ${cmd}) ]]; then echo "Executable cannot be run" exit 1 fi MKL_CBWR=AVX2,STRICT # force to use AVX2 on AMD if [[ ${use_hugepage} == 1 && ${SUBMIT_CLASS} = parallel ]]; then [[ ${TASK} = ifsmin || ${TASK} = oopsvar ]] && TBB_MALLOC_SET_HUGE_SIZE_THRESHOLD=1000000 HUGETLB_DEFAULT_PAGE_SIZE=${_HUGEPAGE_SIZE_}M TBB_MALLOC_USE_HUGE_PAGES=1 HUGETLB_MORECORE=yes num_numas_per_node=8 #Atos Rome nodes have 8 numa regions ((num_hugepages_per_numa=${_HUGEPAGE_MEMORY_}/(${num_numas_per_node}*${_HUGEPAGE_SIZE_}))) srun -K0 --wait=300 --ntasks-per-node=1 -n $SUBMIT_TOTAL_NODES /usr/bin/sudo /usr/local/root/SUDO/ec_hugepages -n $num_hugepages_per_numa -s -q < /dev/null fi DR_HOOK_HARAKIRI_TIMEOUT=180 THREAD_GUARDSIZE="${thread_guardsize_mb}M" ((thread_stacksize_mb += thread_guardsize_mb)) OMP_STACKSIZE="${thread_stacksize_mb}M" OMP_NUM_THREADS=$omp_num_threads #OMP_WAIT_POLICY=PASSIVE # need to decide whether to use this OMP_PROC_BIND=true [[ ${submit_cpus_per_compute_unit} == 1 ]] && OMP_PLACES=cores || OMP_PLACES=threads # Set up DR_HOOK performance profiling USE_DR_HOOK=${_USE_DR_HOOK_} if [[ ${USE_DR_HOOK} != 0 ]]; then if [[ ${OD_MODE} = true ]]; then DR_HOOK_LOG_DIR=${STHOST}/tc/emos/dr_hook_logs/${SUITE}/${YMD}/${FAMILY}/${TASK} else DR_HOOK_LOG_DIR=${PWD}/dr_hook_logs.$$ fi CHECK_DIR ${DR_HOOK_LOG_DIR} DR_HOOK_LOG_DIR=${DR_HOOK_LOG_DIR}/dr_hook DR_HOOK=1 DR_HOOK_INIT_SIGNALS=1 DR_HOOK_OPT=prof DR_HOOK_PROFILE=${DR_HOOK_LOG_DIR} DR_HOOK_GENCORE=0 fi ulimit -S -c ${coredump_size} # Must be "unlimited" for ATP (DrHook setrlimit() too late for ATP) rm -f core core.* || true if [[ ${submit_total_executables} == 1 ]]; then srun_flags="--export=ALL -n ${submit_total_tasks} --mem-bind=verbose,local --cpu-bind=verbose" if [[ ${SUBMIT_CLASS} = "parallel" ]]; then [[ ${SUBMIT_HYPERTHREADING:-off} == "on" ]] && srun_flags="${srun_flags} --hint=multithread" || srun_flags="${srun_flags} --hint=nomultithread" srun_flags="${srun_flags} --cpus-per-task ${SUBMIT_THREADS}" srun_flags="${srun_flags} --distribution=block:cyclic" srun_flags="${srun_flags} --ntasks-per-socket ${SUBMIT_TASKS_PER_NUMA_NODE}" else # serial/fractional jobs srun_flags="${srun_flags} --cpus-per-task ${SUBMIT_HT_CPUS_PER_TASK}" srun_flags="${srun_flags} --distribution=block:block" fi command="srun -K0 --wait=300 ${srun_flags} $(whence ${cmd}) ${args}" else exit 666 # PB RFA : code for MPMD needs to be here fi echo ${command} >&2 module list >&2 echo Binding Info srun -K0 --wait=300 ${srun_flags} $(whence binding.${_IFS_PRECISION_}) &2 ; eval ${command}) || rc=$? if [[ ${rc} -ne 0 ]]; then # echo "run_parallel FAILURE" banner "run_parallel FAILURE" # PB RFA : deal with core files exit ${rc} fi elif [[ $ARCH = cray ]]; then # Check we can run executable if [[ $submit_total_executables == 1 && ! -x $(whence $cmd) ]]; then echo "Executable cannot be run" exit 1 fi #export DR_HOOK_IGNORE_SIGNALS=-1 export DR_HOOK_HARAKIRI_TIMEOUT=180 export ATP_ENABLED=${ATP_ENABLED:-1} export ATP_MAX_CORES=${ATP_MAX_CORES:-5} # Cray default is 20 export MPICH_MEMORY_REPORT=${MPICH_MEMORY_REPORT:-1} export MPICH_ENV_DISPLAY=${MPICH_ENV_DISPLAY:-1} export MPICH_GNI_MALLOC_FALLBACK=${MPICH_GNI_MALLOC_FALLBACK:-1} # huge page alloc failure falls back to std malloc() export MPICH_MAX_THREAD_SAFETY=multiple export THREAD_GUARDSIZE="${thread_guardsize_mb}M" ((thread_stacksize_mb += thread_guardsize_mb)) export OMP_STACKSIZE="${thread_stacksize_mb}M" export OMP_NUM_THREADS=$omp_num_threads export OMP_WAIT_POLICY=ACTIVE export FI_MLX_TLS=rc,self,sm export I_MPI_OFI_PROVIDER=mlx export UCX_NET_DEVICES=mlx5_0:1 export I_MPI_PLATFORM=clx export I_MPI_PLATFORM_CHECK=0 export I_MPI_SHM=clx_avx2 export I_MPI_MALLOC=1 export I_MPI_SHM_HEAP=1 export HUGEPAGE_MEMORY="${hugepage_memory}M" # [[ $OD_MODE == true ]] && [[ ${ECF_TRYNO} -gt 1 ]] && [[ $STREAM == ELDA ]] && [[ $TASK == model ]] && use_hugepage=0 && mailx -s "$ECF_NAME: hugepage reset" integration_team < /dev/null # e-suite mode catchup, solution is to increase NPES (mem) if [[ $OD_MODE != true ]]; then #include $EXPVER/include/parenv_tuning.h ($EXPVER/include/run_parallel) # Contains tuning defaults for running parallel executables # Please maintain a history of changes here: # Date Name Description of changes # 20/09/12 P.Burton Initial version taken from run_parallel@38r2 # Replaced MP_PULSE=0 with MP_PULSE=60 # 25/09/12 P.Burton MP_PULSE changed to 100 # added ESVDGEMMOPT=yes if [[ $ARCH = cray ]]; then export MPICH_RANK_REORDER_DISPLAY=1 export MPICH_NO_BUFFER_ALIAS_CHECK=1 fi #end-of-include $EXPVER/include/parenv_tuning.h ($EXPVER/include/run_parallel) fi __EC_APRUN_PARAMS="" if [[ ( $PBS_QUEUE == [a-z]s || $PBS_QUEUE == [a-z]f ) && $HOST != cc[a-z]mom*(\d) ]]; then # Fractional job running using mpiexec LOAD_MODULE cray-snplauncher command="mpiexec -n $submit_total_tasks $(whence $cmd) $args" elif [[ $submit_total_executables == 1 ]]; then [[ ${SUBMIT_FORCE_NUMA_MEMORY_AFFINITY:-""} == "yes" ]] && submit_force_numa_memory_affinity="-ss" # If odd number of tasks, we cannot ask for half of tasks per NUMA node. # So we turn of "-S argument (and -ss if specified) in this case which allows it to work # but it a non-optimum fashion. (( odd_tasks = $submit_tasks_per_node % 2 )) if [[ $odd_tasks == 1 ]]; then Sarg="" submit_force_numa_memory_affinity="" else Sarg="-S $submit_tasks_per_numa_node" fi (( _nodes = $SUBMIT_TOTAL_TASKS / $SUBMIT_TASKS_PER_NODE )) marg="" if [[ $allocate_huge_page == 1 && $_nodes -gt 1 && $use_hugepage == 1 ]]; then LOAD_MODULE craype-hugepages${hugepage_size}M if [[ $odd_tasks == 0 ]]; then (( marg = $hugepage_memory / $SUBMIT_TASKS_PER_NODE )) if [[ $OD_MODE != true ]]; then job_mem=$(echo $EC_memory_per_task | sed "s/M[Bb]//") [[ $job_mem -lt $marg ]] && marg=$job_mem fi marg="-m${marg}h" submit_force_numa_memory_affinity="-ss" fi fi if [[ $compiler == "intel" ]]; then submit_force_numa_memory_affinity="" cpu_binding="-cc depth" marg="" else cpu_binding="-cc cpu" fi CHECK_MEM=${_CHECK_MEM_} if [[ $CHECK_MEM == 1 ]]; then aprun -n $EC_nodes_total -N 1 /usr/local/sbin/EC_rank_info.memdetails fi if [[ $DEBUG = ${cmd##*/} ]] ; then if [[ ${_DEBUGGER_} == totalview ]]; then __EC_APRUN_PARAMS="-a $cpu_binding $marg -n $submit_total_tasks -N $submit_tasks_per_node $Sarg -j $submit_cpus_per_compute_unit -d $omp_num_threads $submit_force_numa_memory_affinity" command="totalview aprun ${__EC_APRUN_PARAMS} $(whence $cmd) $args" else # Default is DDT export ALLINEA_TOOLS_CONFIG_DIR=$BASE/ddtconfig [[ -d $ALLINEA_TOOLS_CONFIG_DIR ]] || mkdir -p $ALLINEA_TOOLS_CONFIG_DIR LOAD_MODULE forge __EC_APRUN_PARAMS="$marg $cpu_binding -n $submit_total_tasks -N $submit_tasks_per_node $Sarg -j $submit_cpus_per_compute_unit -d $omp_num_threads $submit_force_numa_memory_affinity" command="ddt --source-dirs $IFS_SOURCE_DIR -n $submit_total_tasks -mpiargs '$marg -cc cpu -N $submit_tasks_per_node $Sarg -j $submit_cpus_per_compute_unit -d $omp_num_threads $submit_force_numa_memory_affinity' $(whence $cmd) $args" fi elif [[ ${_PROFILE_EXE_} = ${cmd##*/} ]] ; then if [[ ${_PROFILER_} = "extrae" ]]; then LOAD_MODULE extrae/new export EXTRAE_CONFIG_FILE=/perm/rd/nama/extrae/xml/MPI/extrae.xml if [[ ${_OMPTRACE_} = 1 ]]; then export OMP_TRACE=1 fi __EC_APRUN_PARAMS="$cpu_binding $marg -n $submit_total_tasks -N $submit_tasks_per_node $Sarg -j $submit_cpus_per_compute_unit -d $omp_num_threads $submit_force_numa_memory_affinity" command="aprun ${__EC_APRUN_PARAMS} trace-fortran.sh $(whence $cmd) $args" else # Default is MAP export ALLINEA_TOOLS_CONFIG_DIR=$BASE/mapconfig [[ -d $ALLINEA_TOOLS_CONFIG_DIR ]] || mkdir -p $ALLINEA_TOOLS_CONFIG_DIR LOAD_MODULE forge export ALLINEA_SAMPLER_INTERVAL=80 export ALLINEA_NO_TIMEOUT=1 __EC_APRUN_PARAMS="$marg $cpu_binding -n $submit_total_tasks -N $submit_tasks_per_node $Sarg -j $submit_cpus_per_compute_unit -d $omp_num_threads $submit_force_numa_memory_affinity" command="map --source-dirs $IFS_SOURCE_DIR -n $submit_total_tasks --profile -mpiargs '$marg -cc cpu -N $submit_tasks_per_node $Sarg -j $submit_cpus_per_compute_unit -d $omp_num_threads $submit_force_numa_memory_affinity' $(whence $cmd) $args" fi else __EC_APRUN_PARAMS="$cpu_binding $marg -n $submit_total_tasks -N $submit_tasks_per_node $Sarg -j $submit_cpus_per_compute_unit -d $omp_num_threads $submit_force_numa_memory_affinity" command="aprun ${__EC_APRUN_PARAMS} $(whence $cmd) $args" fi else # MPMD multiple executable mode if [[ ! -f $cmd ]]; then echo "Could not find executables file \"$cmd\"" exit 2 fi command="aprun" for exe in {1..$submit_total_executables}; do _submit_total_tasks=$(echo $submit_total_tasks | cut -d":" -f $exe) [[ -z $_submit_total_tasks ]] && { echo No total_tasks found for exe $exe ; exit 2; } _submit_tasks_per_node=$(echo $submit_tasks_per_node | cut -d":" -f $exe) [[ -z $_submit_tasks_per_node ]] && { echo No tasks_per_node found for exe $exe ; exit 2; } _submit_tasks_per_numa_node=$(echo $submit_tasks_per_numa_node | cut -d":" -f $exe) [[ -z $_submit_tasks_per_numa_node ]] && { echo No tasks_per_numa_node found for exe $exe ; exit 2; } _submit_cpus_per_compute_unit=$(echo $submit_cpus_per_compute_unit | cut -d":" -f $exe) [[ -z $_submit_cpus_per_compute_unit ]] && { echo No submit_cpus_per_compute_unit found for exe $exe ; exit 2; } _omp_num_threads=$(echo $omp_num_threads | cut -d":" -f $exe) [[ -z $_omp_num_threads ]] && { echo No omp_num_threads found for exe $exe ; exit 2; } _submit_force_numa_memory_affinity=$(echo $SUBMIT_FORCE_NUMA_MEMORY_AFFINITY | cut -d":" -f $exe) [[ -z $_submit_force_numa_memory_affinity ]] && { echo No SUBMIT_FORCE_NUMA_MEMORY_AFFINITY found for exe $exe ; exit 2; } [[ $_submit_force_numa_memory_affinity == yes ]] && _submit_force_numa_memory_affinity="-ss" || _submit_force_numa_memory_affinity="" (( odd_tasks = $_submit_tasks_per_node % 2 )) if [[ $odd_tasks == 1 ]]; then Sarg="" _submit_force_numa_memory_affinity="" else Sarg="-S $_submit_tasks_per_numa_node" fi line=$(sed -n "$exe p" $cmd | sed "s/^ *//" | grep -vE "^#") _cmd=$(echo $line | cut -f1 -d" ") _args=$(echo $line | cut -f2- -d" ") [[ $exe -gt 1 ]] && command=$command" :" cpu_binding="-cc cpu" command=$command" $cpu_binding -n $_submit_total_tasks -N $_submit_tasks_per_node $Sarg -j $_submit_cpus_per_compute_unit -d $_omp_num_threads $_submit_force_numa_memory_affinity env OMP_NUM_THREADS=$_omp_num_threads $(whence $_cmd) $_args" done fi echo $command # Print a mapping of which MPI task is running on which node if [[ -n ${__EC_APRUN_PARAMS} && ${__EC_APRUN_PARAMS}:RANK_REORDER:${MPICH_RANK_REORDER_METHOD:-"default"} != ${__EC_LAST_APRUN_PARAMS:-""} ]]; then echo "*** EC_rank_info Task -> Node mapping" eval aprun $__EC_APRUN_PARAMS /usr/local/sbin/EC_rank_info /dev/null | uniq) do if [[ -f $f ]] ; then core=$f.$PBS_JOBNAME.$PBS_JOBID core=$(echo "$core" | sed 's/:/./g') # replace ":" with "." mv $f $core chmod g+r $core # Also stdout goes to stderr (except gdb's *own* stderr goes to /dev/null) (pwd; ls -ltr $core) 1>&2 (set -x; gdb -batch -n -q -ex "thread apply all bt" $thecmd $core 2>/dev/null) 1>&2 || : fi done # Delayed abort ... set -eu exit $rc fi if [[ ${_PROFILE_EXE_} == ${cmd##*/} ]]; then export PROFILEDIR=${WDIR}/profile.${TASK}.${ECF_TRYNO}.$$ mkdir $PROFILEDIR if [[ ${_PROFILER_} == "extrae" ]]; then mv *.prv *.pcf *.row $PROFILEDIR fi if [[ ${_PROFILER_} == "map" ]]; then mv *.map $PROFILEDIR fi fi # Darshan processing if [[ $HOST = @(cc*) && $OD_MODE != true && $USE_DARSHAN != 0 && -d ${DARSHAN_LOG_DIR} ]]; then darshan_logs=$(find $DARSHAN_LOG_DIR -type f) if [[ -n $darshan_logs ]]; then for out in $darshan_logs; do darshan_raw=./$(basename $out) darshan_out=$(echo $darshan_raw | sed "s/.gz$/.info/") mv $out $darshan_raw IOsummary.py ${_DARSHAN_FLAGS_} $darshan_raw > $darshan_out echo echo "**** DARSHAN DIAGNOSTICS FOR $cmd [$darshan_out] ****" cat $darshan_out done fi [[ -d $DARSHAN_LOG_DIR ]] && rm -rf $DARSHAN_LOG_DIR fi # MEMINFO Processing if [[ $HOST = @(cc*) && $USE_DR_HOOK != 0 ]]; then cp $WDIR/meminfo* $DR_HOOK_LOG_DIR || : #MAAM fixme fi else eval mpirun -np $npes $(whence $cmd) $arg fi else # not parallel ------------------------------------------------------ if [[ $DEBUG = ${cmd##*/} ]] ; then export ODB_ERRTRA=0 export TRAP_FPE="INT_OVERFL=ABORT;OVERFL=ABORT;UNDERFL=ZERO;DIVZERO=ABORT;INVALID=ABORT;DEBUG" export F90_CONFORM_CHECK_ABORT=YES #=== Uncomment the following to abort on bounds a check. #=== You should also set NUNDEFLD=1 in NAMDIM to avoid trivial bounds checks. # export F90_BOUNDS_CHECK_ABORT=YES set +u ; use totalview ; set -u exit 1 else set -x eval $(whence $cmd) $args fi fi (( _exe_time = SECONDS - _run_parallel_start_time )) if [[ ${submit_total_tasks%%:*} -gt 1 || ${omp_num_threads%%:*} -gt 1 ]]; then (( _script_parallel_time = _script_parallel_time + _exe_time )) (( _script_parallel_count = _script_parallel_count + 1 )) else (( _script_serial_time = _script_serial_time + _exe_time )) (( _script_serial_count = _script_serial_count + 1 )) fi # Write out accumulated run_parallel times to timer file if [[ -n ${_run_parallel_timer_file:-""} ]]; then echo "_script_parallel_time=$_script_parallel_time" > $_run_parallel_timer_file echo "_script_parallel_count=$_script_parallel_count" >> $_run_parallel_timer_file echo "_script_serial_time=$_script_serial_time" >> $_run_parallel_timer_file echo "_script_serial_count=$_script_serial_count" >> $_run_parallel_timer_file fi # Write out runtime information to run file if [[ -n ${_run_parallel_runs_file:-""} ]]; then datestamp=$(date +%H:%M:%S) printf "$datestamp %9sx%7s %7.2f $cmd\n" ${submit_total_tasks:-1} ${omp_num_threads:-1} $_exe_time >> ${_run_parallel_runs_file} fi if [[ ${USE_DARSHAN_SINGLE:-0} != 0 ]] then #restore darshan single after run parallel module load darshan/2.3.1-single LD_PRELOAD=$LD_PRELOAD_SERIAL_SAVED unset LD_PRELOAD_SERIAL_SAVED fi set +x end_date=$(date +%Y%m%d%H%M%S) secs=$(datediff -s $end_date $start_date) echo "=== Elapsed time : $secs seconds ===" echo "=== Ending $cmd at $(date) ===" exit _eof_run_parallel cat >$TMPDIR/varconsts <<\_eof_varconsts : #include $EXPVER/include/varconsts ($EXPVER/ifstraj_999.ecf) #varconsts version: 20111014 set -euxv #======================================================================= # # Script varconsts # ---------------- # # Purpose : Link the constant files for the variational analysis # ------- # # Usage : varconsts [-m mode] -u uptraj # ----- # # Parameters : -u - uptraj = trajectory update number # ---------- -m - mode = 'traj' for all links (default) # # #======================================================================= function link_rttov_coeffs { set -ex if [[ $RTTOV_COEFDIR = "" ]] ; then echo "linking coefficients" ln -sf $DATA/sat/rttov/rtcoef* . ln -sf $DATA/sat/rttov/sccldcoef* . else #---progam will use full name (rm links to make sure)--- echo "removing coefficient links" rm -f ./rtcoef* rm -f ./sccldcoef* fi ln -sf $DATA/sat/rttov/ssmi_mean_emis_climato* . ln -sf $DATA/sat/rttov/UWirbfemis* . ln -sf $DATA/sat/rttov/UWiremis_labeigvects.nc . ln -sf $DATA/sat/rttov/uwiremis* . } typeset -fx link_rttov_coeffs set +v USAGE="$0 [-m mode] -u uptraj" errflg=0 uptraj= mode=traj while getopts m:u: option do case $option in m) mode=$OPTARG;; u) uptraj=$OPTARG;; \?) errflg=1;; esac done #======================================================================= # Check parameters #======================================================================= if [[ $errflg -ne 0 ]] ; then echo $USAGE >&2 exit 1 fi if [[ "$uptraj" = "" ]] ; then echo $USAGE >&2 echo "-u uptraj, trajectory update number, must be supplied" exit 2 fi LJB_EDA=${LJB_EDA:=false} LJB_EDA_LOCAL=$LJB_EDA if [[ ${LJB_HYBRID_ACV:=false} = true && ${LJB_HYBRID_ACV_LOCAL:=false} = false ]] ; then LJB_EDA_LOCAL=false fi #======================================================================= # Setup COMPO script and namelist variables #======================================================================= if [[ $LMACC = true ]] ; then . compo_setup fi export LFSOBS=${LFSOBS:=false} if [[ ( $mode = traj && ($uptraj -eq 0 || $uptraj -eq 999) ) || ( $NSPLIT4DWIN -gt 0 && $mode = min && $uptraj -eq 0 ) ]] ; then #======================================================================= # Forecast sensitivity to observations #======================================================================= if [[ $LFSOBS = true ]] ; then rm -f sensgrad ln -s $WDIR/sensgrad sensgrad fi #======================================================================= # Radiative transfer coefficients, 1DVAR control files and # bias/scan files #======================================================================= # Background error files # ---------------------- rm -f sigmab.dat ln -s $DATA/sat/sigmab sigmab.dat rm -f correl.dat ln -s $DATA/sat/correl correl.dat # RTTOV coefficient files # ----------------------- echo "Using RTTOV coefficients from RTTOV_COEFDIR=$RTTOV_COEFDIR" link_rttov_coeffs & get_nearest_infile_date -d $BASETIME -i rtcoef_jpss_0_cris.dat \ -p $XDATA/$IFS_CYCLE/sat/rttov/ get_nearest_infile_date -d $BASETIME -i rtcoef_jpss_0_cris.bin \ -p $XDATA/$IFS_CYCLE/sat/rttov/ mv rtcoef_jpss_0_cris.dat $DATA/sat/rttov/. mv rtcoef_jpss_0_cris.bin $DATA/sat/rttov/. get_nearest_infile_date -d $BASETIME -i rtcoef_noaa_20_cris.dat \ -p $XDATA/$IFS_CYCLE/sat/rttov/ get_nearest_infile_date -d $BASETIME -i rtcoef_noaa_20_cris.bin \ -p $XDATA/$IFS_CYCLE/sat/rttov/ mv rtcoef_noaa_20_cris.dat $DATA/sat/rttov/. mv rtcoef_noaa_20_cris.bin $DATA/sat/rttov/. # All-sky microwave error and coefficient files # --------------------------------------------- ln -f -s $DATA/sat/rttov/mietable*.dat . ln -f -s $DATA/sat/rttov/mietable*.bin . as_stems=$(ls $XDATA/$IFS_CYCLE/sat/mwave_error*.dat | awk -F/ '{print $NF}' | \ awk -F '_' '{print $1"_"$2"_"$3"_"$4"_"$5}' | awk -F '.dat' '{print $1}' | sort | uniq) for satsens in ${as_stems}; do get_nearest_infile_date -d $BASETIME -i ${satsens}.dat -p $XDATA/$IFS_CYCLE/sat/ done # Clear-sky amsu-a observation error files # --------------------------------------------- cs_stems=$(ls $XDATA/$IFS_CYCLE/sat/mw_clearsky_error* | awk -F/ '{print $NF}' | \ awk -F '_' '{print $1"_"$2"_"$3"_"$4"_"$5"_"$6}' | sort | uniq) for satsens in ${cs_stems}; do get_nearest_infile_date -d $BASETIME -i ${satsens} -p $XDATA/$IFS_CYCLE/sat/ done # Cost limit files # ---------------- rm -f cstlim_noaa.dat ln -s $DATA/sat/cstlim_noaa cstlim_noaa.dat # Channel specification files # --------------------------- rm -f chanspec_noaa.dat ln -s $DATA/sat/chanspec_noaa chanspec_noaa.dat rm -f iasichannels ln -s $DATA/sat/iasichannels iasichannels rm -f iasichannels_allskymask ln -s $DATA/sat/iasichannels_allskymask iasichannels_allskymask rm -f crischannels get_nearest_infile_date -d $BASETIME -i crischannels -p $XDATA/$IFS_CYCLE/sat/ rm -f hiraschannels ln -s $DATA/sat/hiraschannels hiraschannels rm -f ikfs2channels ln -s $DATA/sat/ikfs2channels ikfs2channels # Cloud Detection Files # ----------------------- rm -f AIRS_CLDDET.NL IASI_CLDDET.NL CRIS_CLDDET.NL HIRAS_CLDDET.NL IKFS2_CLDDET.NL ln -s $DATA/sat/AIRS_CLDDET.NL AIRS_CLDDET.NL ln -s $DATA/sat/IASI_CLDDET.NL IASI_CLDDET.NL get_nearest_infile_date -d $BASETIME -i CRIS_CLDDET.NL -p $XDATA/$IFS_CYCLE/sat/ ln -s $DATA/sat/HIRAS_CLDDET.NL HIRAS_CLDDET.NL ln -s $DATA/sat/IKFS2_CLDDET.NL IKFS2_CLDDET.NL # Aerosol Detection Files # ----------------------- rm -f AIRS_AERDET.NL IASI_AERDET.NL CRIS_AERDET.NL ln -s $DATA/sat/AIRS_AERDET.NL AIRS_AERDET.NL ln -s $DATA/sat/IASI_AERDET.NL IASI_AERDET.NL get_nearest_infile_date -d $BASETIME -i CRIS_AERDET.NL -p $XDATA/$IFS_CYCLE/sat/ # Trace gas detection files # ------------------------- rm -f AIRS_TRGASDET.NL IASI_TRGASDET.NL CRIS_TRGASDET.NL ln -s $DATA/sat/AIRS_TRGASDET.NL AIRS_TRGASDET.NL ln -s $DATA/sat/IASI_TRGASDET.NL IASI_TRGASDET.NL ln -s $DATA/sat/CRIS_TRGASDET.NL CRIS_TRGASDET.NL # Measurement error files # ----------------------- for file in $DATA/sat/rmtberr* ; do odvname=$(basename $file) rm -f ${odvname}.dat ln -s $file ${odvname}.dat done rm -f rmtberr_metop_1_iasi.dat rm -f rmtberr_metop_2_iasi.dat rm -f rmtberr_metop_3_iasi.dat get_nearest_infile_date -d $BASETIME -i rmtberr_metop_1_iasi -p $XDATA/$IFS_CYCLE/sat/ get_nearest_infile_date -d $BASETIME -i rmtberr_metop_2_iasi -p $XDATA/$IFS_CYCLE/sat/ get_nearest_infile_date -d $BASETIME -i rmtberr_metop_3_iasi -p $XDATA/$IFS_CYCLE/sat/ mv rmtberr_metop_1_iasi rmtberr_metop_1_iasi.dat mv rmtberr_metop_2_iasi rmtberr_metop_2_iasi.dat mv rmtberr_metop_3_iasi rmtberr_metop_3_iasi.dat rm -f rmtberr_jpss_0_cris.dat rm -f rmtberr_noaa_20_cris.dat get_nearest_infile_date -d $BASETIME -i rmtberr_jpss_0_cris -p $XDATA/$IFS_CYCLE/sat/ get_nearest_infile_date -d $BASETIME -i rmtberr_noaa_20_cris -p $XDATA/$IFS_CYCLE/sat/ mv rmtberr_jpss_0_cris rmtberr_jpss_0_cris.dat mv rmtberr_noaa_20_cris rmtberr_noaa_20_cris.dat rm -f amv_p_and_tracking_error get_nearest_infile_date -d $BASETIME -i amv_p_and_tracking_error -p $XDATA/$IFS_CYCLE/sat/ # Bias files # ---------- rm -f amv_bias_info ln -s $DATA/sat/amv_bias_info amv_bias_info rm -f bcor_reo3 ln -s $DATA/sat/bcor_reo3 bcor_reo3 if [[ $LMACC = true ]] ; then if [[ $LGHG = true ]] ; then rm -f bcor_ch4 ln -s $DATA/sat/bcor_ch4 bcor_ch4 fi fi #======================================================================= # REO3 thinning file #======================================================================= rm -f thin_reo3 ln -s $DATA/sat/thin_reo3 thin_reo3 #======================================================================= # SSMI 1DVAR coefficients files. # There are special files for ERA40 bad channel dates. #======================================================================= rm -f FILCOVB rm -f FILBIASO_SSMI FILCMIX_SSMI FILCOVO_SSMI FILCWAT_SSMI rm -f FILBIASO_TMI FILCMIX_TMI FILCOVO_TMI FILCWAT_TMI ln -s $DATA/sat/filcovb FILCOVB ln -s $DATA/sat/filbiaso_ssmi FILBIASO_SSMI ln -s $DATA/sat/filcmix_ssmi FILCMIX_SSMI ln -s $DATA/sat/filcwat_ssmi FILCWAT_SSMI ln -s $DATA/sat/filbiaso_tmi FILBIASO_TMI ln -s $DATA/sat/filcmix_tmi FILCMIX_TMI ln -s $DATA/sat/filcovo_tmi FILCOVO_TMI ln -s $DATA/sat/filcwat_tmi FILCWAT_TMI if [[ $BASETIME -ge 1992010100 || $BASETIME -lt 1989010600 ]] ; then ln -s $XDATA/sat/filcovo_ssmi FILCOVO_SSMI elif [[ $BASETIME -ge 1991020100 && $BASETIME -lt 1991110800 ]] ; then ln -s $XDATA/sat/filcovo_ssmi_bad67 FILCOVO_SSMI else ln -s $XDATA/sat/filcovo_ssmi_bad6 FILCOVO_SSMI fi #======================================================================= # ozone chemistry files #======================================================================= for i in $XDATA/climate/$CLIMVERSION/* ; do ires=$(basename $i) if [ $( print $ires | grep '^[0-9]' ) ] ; then rm -f $ires ln -s $i $ires fi done #======================================================================= # Radiosonde height observation error correlation coefficients #======================================================================= rm -f rszcoef_fmt ln -s $DATA/an/rszcoef_fmt rszcoef_fmt #======================================================================= # Background error covariances. # Background error balance operators. # Climatological standard deviations for use in the error growth model. #======================================================================= rm -f stabal96.cv stabal96.bal stdev_of_climate wavelet*.cv if [[ $uptraj -lt $MXUP_TRAJ ]] ; then JB_DIR=$WORK/eda_err/JB if [[ $LOOPS = true ]] ; then resols=$RESOLINC_0 resolprev=$RESOLINC_0 for ((jres=1;jres<${MXUP_TRAJ};jres++)); do eval resjob='$'RESOLINC_$jres if [[ $resjob -gt $resolprev ]] ; then resols=$(echo $resols $resjob) fi resolprev=$resjob done echo 'inner loop resolutions are ' $resols else eval resjob='$'RESOLINC_$uptraj resols=$resjob fi ## This bit is to cater for the first cycle of a self-feeding EDA ## if [[ $BASETIME == $INITIME && $ENDANENS -gt 0 && $EXPVER = $EDAEXPVER ]] ; then LJB_EDA_LOCAL=$LJB_EDA if [[ ${LJB_HYBRID_ACV:=false} = true ]] ; then LJB_EDA_LOCAL=false fi fi if [[ $LJB_EDA_LOCAL = true && $LEDA_ERRORS_IN = true && ($LOOPS = true || $mode = min) ]] ;then prevdate=$( newdate $BASETIME -$EDA_PERIOD_4D ) # for SCDA set up as previous HRES cycle if [[ $STREAM = SCDA ]] ; then prevdate=$( newdate $prevdate -6 ) fi if [[ $EDA_PERIOD_4D = 6 && $BASETIME = $INITIME ]] ; then prevdate=$( newdate $prevdate -$PERIOD) fi EDASHIFT=$(( WINDOW_LENGTH_4D - PERIOD_4D )) EDASHIFT=0 # EH: Temporary until understood how to update for ED 8h window [[ $EDASHIFT -gt 0 ]] && prevdate=$( newdate $prevdate -$EDASHIFT ) extension="" for resjob in $resols ; do edafile=wavelet_out_T${resjob}_L${LEVELS}_${prevdate}.cv if [[ $LOOPS = true ]] ; then extension="_${resjob}" fi if [[ -f $JB_DIR/$edafile ]] ; then ln -sf $JB_DIR/$edafile wavelet${extension}.cv echo "Using online wavelet JB: ", $JB_DIR/$edafile else echo " online wavelet JB files are requested but not found" exit 1 fi done else extension="" for resjob in $resols ; do if [[ $LOOPS = true ]] ; then extension="_${resjob}" fi ln -sf $DATA/an/wavelet_T${resjob}_L${LEVELS}.cv wavelet${extension}.cv echo "Using static wavelet JB: ", $DATA/an/wavelet_T${resjob}_L${LEVELS}.cv done fi if [[ $LOOPS = true ]] ; then ### the line below is a temporary short-cut for single outer loop exps GR (still needed????) ln -sf wavelet_${RESOLINC_0}.cv wavelet.cv fi ln -s $DATA/an/stabal96.cv stabal96.cv ln -s $DATA/an/stabal96.bal stabal96.bal fi month=$( echo $BASETIME | cut -c5-6 ) ln -s $XDATA/an/stdev_of_climate/m$month stdev_of_climate if [[ $LWEAK4DVAR = true ]] ; then rm -f moderr.cov ln -s $DATA/an/moderr.cov moderr.cov fi #======================================================================= # NeuroFlux and Jacobians for the linearized longwave radiation #======================================================================= # Specify number of levels to be used in neural network as a function of # actual vertical resolution (interpolation if not the same). case $LEVELS in 19) LEVELS_NEUR=31 ;; 40) LEVELS_NEUR=50 ;; 62) LEVELS_NEUR=60 ;; 91) LEVELS_NEUR=60 ;; *) LEVELS_NEUR=$LEVELS ;; esac rm -f dataneur${LEVELS_NEUR}.bin datadfsdx$LEVELS.bin ln -s $DATA/an/neuroflux_l${LEVELS_NEUR} dataneur${LEVELS_NEUR}.bin ln -s $DATA/an/radjacobian_l$LEVELS datadfsdx$LEVELS.bin # rm -f rtable* # ln -s $DATA/ifs/rtable* . # rm -f C11CLIM GCH4CLIM RADRRTM SO4_A1B2050 SO4_OBS1930 # rm -f C12CLIM GCO2CLIM RADSRTM SO4_A1B2060 SO4_OBS1940 # rm -f C22CLIM GOZOCLIM SO4_A1B2000 SO4_A1B2070 SO4_OBS1950 # rm -f CCL4CLIM MCICA SO4_A1B2010 SO4_A1B2080 SO4_OBS1960 # rm -f CH4CLIM N2OCLIM SO4_A1B2020 SO4_A1B2090 SO4_OBS1970 # rm -f CO2CLIM NO2CLIM SO4_A1B2030 SO4_A1B2100 SO4_OBS1980 # rm -f ECOZC OZOCLIM SO4_A1B2040 SO4_OBS1920 SO4_OBS1990 # rm -f MCH4CLIM MCO2CLIM MOZOCLIM # ln -sf $DATA/ifsdata/* . #======================================================================= # Fetch date-dependent ERA40 radiosonde temperature bias correction # file #======================================================================= if [[ $uptraj -eq 0 ]] ; then if [[ $OBPATH = era40 || $RSTBIAS_TS = true ]] ; then getbias -m rst -o $WDIR/rs_bias_T_table2 chmod u+w $WDIR/rs_bias_T_table2 fi fi #======================================================================= # Fetch date-dependent ERS-2 scatterometer CMOD and bias files #======================================================================= date_ers2_cmod5=2003082118 prevdate=$( newdate $BASETIME -$PERIOD_4D ) if [[ $BASETIME -ge $date_ers2_cmod5 && \ $prevdate -lt $date_ers2_cmod5 ]] ; then rm -f $DATA/an/cmod.table.ieee if [[ ${LSCATT_NEUTRAL:=false} = "true" ]] ; then ln -s $XDATA/scat/cmod5.n.table.ieee $DATA/an/cmod.table.ieee else ln -s $XDATA/scat/cmod5.4.table.ieee $DATA/an/cmod.table.ieee fi [[ -f $DATA/an/cmod.table.ieee ]] || exit 1 fi if [[ $uptraj -eq 0 ]] ; then if [[ $OBPATH = era40 || $BASETIME -ge $date_ers2_cmod5 ]] ; then getbias -m erss0 -o $WDIR/ers_sigma0.cor getbias -m erssp -o $WDIR/ers_speed.cor fi #======================================================================= # Fetch date-dependent ASCAT scatterometer bias files #======================================================================= getbias -m ascats0 -o $WDIR/ascat_sigma0.cor getbias -m ascatsp -o $WDIR/ascat_speed.cor fi #======================================================================= # Replacement of lowres_fp: construct interpolated orography for each # inner loop resolution (only at first time) #======================================================================= if [[ $LOOPS = true ]] ; then climdir=$XDATA/climate/$CLIMVERSION/${RESOL}${GTYPE} for resjob in $resols ; do if [[ ! -f $DATA/spec_oro_$resjob ]] ; then spint -i $climdir/sporog -o $DATA/spec_oro_$resjob -r $resjob fi ln -sf $DATA/spec_oro_$resjob done fi #======================== #End of traj0 only links #======================== else if [[ $uptraj -lt $MXUP_TRAJ ]] ; then eval resjob='$'RESOLINC_$uptraj JB_DIR=$WORK/eda_err/JB ## This bit is to cater for the first cycle of a self-feeding EDA ## if [[ $BASETIME == $INITIME && $ENDANENS -gt 0 && $EXPVER = $EDAEXPVER ]] ; then LJB_EDA_LOCAL=$LJB_EDA if [[ ${LJB_HYBRID_ACV:=false} = true ]] ; then LJB_EDA_LOCAL=false fi fi if [[ $LEDA_ERRORS_IN = true && $LJB_EDA_LOCAL = true ]] ; then prevdate=$( newdate $BASETIME -$EDA_PERIOD_4D ) # for SCDA set up as previous HRES cycle if [[ $STREAM = SCDA ]] ; then prevdate=$( newdate $prevdate -6 ) fi if [[ $EDA_PERIOD_4D = 6 && $BASETIME = $INITIME ]] ; then prevdate=$( newdate $prevdate -$PERIOD) fi EDASHIFT=$(( WINDOW_LENGTH_4D - PERIOD_4D )) EDASHIFT=0 # EH: Temporary until understood how to update for ED 8h window [[ $EDASHIFT -gt 0 ]] && prevdate=$( newdate $prevdate -$EDASHIFT ) edafile=wavelet_out_T${resjob}_L${LEVELS}_${prevdate}.cv if [[ -f $JB_DIR/$edafile ]] ; then ln -sf $JB_DIR/$edafile wavelet.cv echo "Using online wavelet JB: ", $JB_DIR/$edafile else if [[ $mode = min ]] ; then echo " online wavelet JB files are requested but not found" exit 1 else echo " No wavelet file supplied" fi fi else ln -sf $DATA/an/wavelet_T${resjob}_L${LEVELS}.cv wavelet.cv echo "Using static wavelet JB: ", $DATA/an/wavelet_T${resjob}_L${LEVELS}.cv fi fi fi #======================================================================= # wave model setup #======================================================================= if [[ "$WAVE" = "yes" ]] ; then if [[ $IFSMODE = @(4d_inc|3d_fgat) ]] ; then wave_setup_4v -u $uptraj if [[ $LOOPS = true ]] ; then ln -sf $WDIR/wam_namelist_4d_0 wam_namelist fi fi fi exit _eof_varconsts if [[ ${LJB_ACV} = true ]] ; then cat >$TMPDIR/preacv <<\_eof_preacv : #include $EXPVER/include/preacv ($EXPVER/ifstraj_999.ecf) #preacv version: 20190306 set -euxv #======================================================================= # # Script preacv # ------------- # # Purpose : Augmented Control Variation Setup # ------- # # Usage : preacv # ----- # # Parameters : # ---------- # # #======================================================================= set +v #======================================================================= # Check parameters #======================================================================= if [[ $TASK = @(ifstraj|ifstraj_999|ifsmin) && ("$uptraj" = "") ]] ; then echo $USAGE >&2 echo "uptraj, trajectory update number, must be supplied" exit 2 fi #======================================================================= # General initialisation #======================================================================= LACV_1D=false LACV_2D=false LACV_3D=false NACV=0 NACV_1D=0 NACVSP_2D=0 NACVGP_2D=0 NACVSP_3D=0 NACVGP_3D=0 LARCHINCR=true TABLEACV="" GRIBREF=90 GRIBACV=${GRIBREF} #======================================================================= # Parameter estimation #======================================================================= if [[ ${LPAROPTIACV:=false} == true ]] ; then # # Activate ACV # NACV=$(( ${NACV} + 1)) # LACV_1D=true # NACV_1D=$(( ${NACV_1D} + 1)) LACV_2D=true NACVSP_2D=$(( ${NACVSP_2D} + 1)) # # Coldstart # RBGSTDV=100. RCOLD=1200. if [[ $TASK = @(fetchmars|vardata|model) && $BASETIME -le $INITIME ]] ; then LCOLDSTART_ACV1D=true elif [[ $TASK = @(ifstraj) && ($BASETIME = $INITIME) && ($uptraj = 0) ]] ; then LCOLDSTART_ACV1D=true else LCOLDSTART_ACV1D=false fi # # Desciption and associated grib number # CDESC[${NACV}]='SOLAR_CONSTANT' LENGTH_SCALE[${NACV}]=0. MACVGRB_2D[${NACVSP_2D}]=${GRIBACV} RSDT_2D[${NACVSP_2D}]=${RBGSTDV} GRIBACV=$(( ${GRIBACV} + 1 )) # # Namelist # cat >namparacv <namparacv <namjbtskinacv < 0 ]] ; then step_ref=$STEP_BG first_step=$(( ${step_ref} - ${ACV_LAG_STEP}*${ACV_LAG_TIME})) last_step=$(( ${step_ref} + ${ACV_LAG_STEP}*${ACV_LAG_TIME})) nb_step_lag=0 loop_step=${first_step} while [[ ${loop_step} -le ${last_step} ]] ; do loop_step=$(( ${loop_step} + ${ACV_LAG_STEP} )) nb_step_lag=$(( ${nb_step_lag} +1 )) done else nb_step_lag=1 fi # # Initialisation # if [[ ${NACV_MEMBERS} -gt ${LEVELS} ]] ; then echo "Hybrid JB: too many perturbation members ", exit 1 fi NACV_NPERT=$(( ${nb_step_lag}*${NACV_MEMBERS} )) HSCALE_RATIO=1. # # Desciption and associated grib number # for iacvhyb in {1..${nb_step_lag}} ; do echo $iacvhyb NACV=$(( ${NACV} + 1 )) NACVSP_3D=$(( ${NACVSP_3D} + 1 )) CDESC[${NACV}]='JB_HYBRID_ACV' LENGTH_SCALE[${NACV}]=$(echo "${ACV_LOC_HSCALE}*${HSCALE_RATIO}*1000." | bc -l) MACVGRB_3D[${NACVSP_3D}]=${GRIBACV} RSDT_3D[${NACVSP_3D}]=1. GRIBACV=$(( ${GRIBACV} + 1 )) done # # Link the perturbations # if [[ $TASK = "ifsmin" ]] ; then params_sp="$t/$vo/$d/$lnsp" if [[ ${LOZONE_ACV:=false} == true ]] ; then params_gp="$q/$o3" else params_gp="$q" fi rm -f enspert_??? enspert.???_??? for iacv in {1..${NACV_NPERT}} ; do typeset -Z3 ipert=${iacv} aparam_sp=(${params_sp//\// }) aparam_gp=(${params_gp//\// }) # Spectral fields for my_param in ${aparam_sp[@]} ; do paramid=$(echo ${my_param} | cut -f 1 -d '.') if [[ ! -f $WDIR/enspertgp_T${resjob}.${paramid}_${ipert} ]] ; then echo "Hybrid JB: file $WDIR/enspertgp_T${resjob}.${paramid}_${ipert} missing " else ln -sf $WDIR/enspertgp_T${resjob}.${paramid}_${ipert} enspert.${paramid}_${ipert} fi done # Grid point fields for my_param in ${aparam_gp[@]} ; do paramid=$(echo ${my_param} | cut -f 1 -d '.') if [[ ! -f $WDIR/enspertgp.${paramid}_${ipert} ]] ; then echo "Hybrid JB: file $WDIR/enspertgp.${paramid}_${ipert} missing " else ln -sf $WDIR/enspertgp.${paramid}_${ipert} enspert.${paramid}_${ipert} fi done done fi # # Namelist # cat >namjbhybacv <namjbhybacv <namlistacv <>namlistacv <>namlistacv <>namlistacv <>namlistacv <>namlistacv <>namlistacv <> namlistacv # # No ACV # else cat >namlistacv < namlistacv cat >> namlistacv <$TMPDIR/wave_setup_4v <<\_eof_wave_setup_4v : #include $EXPVER/include/wave_setup_4v ($EXPVER/ifstraj_999.ecf) #wave_setup_4v version: 20120305 set -exuv ######################################################################## # # # Script wave_setup_4v # # -------------------- # # # # Purpose : Setup of the wave model grid and input files # # ------- for 4dvar analysis run # # # # Usage : wave_setup_4v [-s] -u uptraj # # ----- # # # # Parameters : -u - uptraj = trajectory update number # # ---------- -s surface extended Kalman filter # # # # JEAN BIDLOT ECMWF DEC 1997 # ######################################################################## set +v USAGE="$0 [-s] -u uptraj" errflg=0 lsekf=false uptraj= while getopts su: option do case $option in s) lsekf=true;; u) uptraj=$OPTARG;; \?) errflg=1;; esac done #======================================================================= # Check parameters #======================================================================= if [[ $errflg -ne 0 ]] ; then echo $USAGE >&2 exit 1 fi if [[ "$uptraj" = "" ]] ; then echo $USAGE >&2 echo "-u uptraj, trajectory update number, must be supplied" exit 2 fi #======================================================================= #include $EXPVER/include/wave_find_stream ($EXPVER/include/wave_setup_4v) function wave_find_stream { #wave_find_stream version: 20090911 set -eu set +x ########################################################################### # # # function wave_find_stream # ------------------------- # # # # Purpose : based on the atmospheric stream acronym as input # # ------- it determines # # nstream the corresponding stream number # # wnstream the corresponding wave model stream number # # wamstream the corresponding wave model stream acronym # # nlocgrb the corresponding grib table number # # # # Usage : wave_find_stream $stream # # ----- # # # ########################################################################### typeset -l stream stream=$1 if [[ $stream = da ]] ; then nstream=1025; wnstream=1045; wamstream=wave; nlocgrb=1; elif [[ $stream = oper ]] ; then nstream=1025; wnstream=1045; wamstream=wave; nlocgrb=1; elif [[ $stream = scda ]] ; then nstream=1026; wnstream=1027; wamstream=scwv; nlocgrb=1; elif [[ $stream = dcda ]] ; then nstream=1028; wnstream=1029; wamstream=dcwv; nlocgrb=1; elif [[ $stream = enda ]] ; then nstream=1030; wnstream=1088; wamstream=ewda; nlocgrb=1; elif [[ $stream = dahc ]] ; then nstream=1024; wnstream=1085; wamstream=wvhc; nlocgrb=26; elif [[ $stream = ef ]] ; then nstream=1035; wnstream=1081; wamstream=waef; nlocgrb=1; elif [[ $stream = enfo ]] ; then nstream=1035; wnstream=1081; wamstream=waef; nlocgrb=1; elif [[ $stream = efov ]] ; then nstream=1034; wnstream=1086; wamstream=weov; nlocgrb=1; elif [[ $stream = efhc ]] ; then nstream=1039; wnstream=1084; wamstream=ewhc; nlocgrb=26; elif [[ $stream = efhs ]] ; then nstream=1040; wnstream=1077; wamstream=wehs; nlocgrb=30; elif [[ $stream = enfh ]] ; then nstream=1033; wnstream=1079; wamstream=enwh; nlocgrb=30; elif [[ $stream = efho ]] ; then nstream=1032; wnstream=1078; wamstream=ewho; nlocgrb=30; elif [[ $stream = maed ]] ; then nstream=1037; wnstream=1083; wamstream=mawv; nlocgrb=18; elif [[ $stream = sens ]] ; then nstream=1036; wnstream=1045; wamstream=wave; nlocgrb=21; elif [[ $stream = mofc ]] ; then nstream=1093; wnstream=1095; wamstream=wamf; nlocgrb=15; elif [[ $stream = mnfc ]] ; then nstream=1200; wnstream=1203; wamstream=mnfw; nlocgrb=23; elif [[ $stream = mnfh ]] ; then nstream=1201; wnstream=1204; wamstream=mfhw; nlocgrb=23; elif [[ $stream = seas ]] ; then nstream=1090; wnstream=1082; wamstream=wasf; nlocgrb=15; elif [[ $stream = mmsf ]] ; then nstream=1220; wnstream=1082; wamstream=wasf; nlocgrb=15; elif [[ $stream = mnsf ]] ; then nstream=1220; wnstream=1222; wamstream=wams; nlocgrb=15; # ??? not sure ??? elif [[ $stream = moda ]] ; then nstream=1071; wnstream=1080; wamstream=wamo; nlocgrb=1; elif [[ $stream = sfmm ]] ; then nstream=1091; wnstream=1092; wamstream=swmm; nlocgrb=16; elif [[ $stream = mofm ]] ; then nstream=1094; wnstream=1096; wamstream=wmfm; nlocgrb=16; elif [[ $stream = mnfa ]] ; then nstream=1202; wnstream=1205; wamstream=mfaw; nlocgrb=23; elif [[ $stream = mnfm ]] ; then nstream=1206; wnstream=1209; wamstream=mfwm; nlocgrb=23; elif [[ $stream = mfhm ]] ; then nstream=1207; wnstream=1210; wamstream=mhwm; nlocgrb=23; elif [[ $stream = mfam ]] ; then nstream=1208; wnstream=1211; wamstream=mawm; nlocgrb=23; elif [[ $stream = msmm ]] ; then nstream=1221; wnstream=1223; wamstream=mswm; nlocgrb=15; elif [[ $stream = lwda ]] ; then nstream=1247; wnstream=1248; wamstream=lwwv; nlocgrb=36; elif [[ $stream = elda ]] ; then nstream=1249; wnstream=1250; wamstream=ewla; nlocgrb=36; else set -x echo "!! problem in wave_find_stream !! " echo "!! unknown atmosheric stream : "$stream exit 1 fi set +eu #====================================================================== # # End of wave_find_stream # #====================================================================== } #end-of-include $EXPVER/include/wave_find_stream ($EXPVER/include/wave_setup_4v) typeset -fx wave_find_stream #include $EXPVER/include/wave_setgflag ($EXPVER/include/wave_setup_4v) function wave_setgflag { #wave_setgflag version: 20120305 #include $EXPVER/include/set_traps.h ($EXPVER/include/wave_setgflag) trap ERROR 0 for signal in $ECF_SIGNAL_LIST do name=$(kill -l $signal) trap "{ echo \"Signal $name ($signal) received\"; ERROR ; }" $signal done #end-of-include $EXPVER/include/set_traps.h ($EXPVER/include/wave_setgflag) set -eu set +x ######################################################################## # # # function wave_setgflag # ---------------------- # # # # Purpose : sets gflag for use in wam_input # # ------- from the definition given in $param # # # # Usage : wave_setgflag $param # # ----- # # see mpcrtbl.F90 # # ######################################################################## param=$1 #maximum length of gflag # See JPPFLAG in module yowcout nbgflagmax=83 typeset -i iflg iflg=0 until [[ iflg -gt nbgflagmax ]] do ((iflg=iflg+1)) gflag[iflg]=F done newparam="" for par in $(print ${param} | tr "/" " ") do if [[ $par -eq 229 ]] ; then gflag[1]=T elif [[ $par -eq 230 ]] ; then gflag[2]=T elif [[ $par -eq 232 ]] ; then gflag[3]=T ## gflag[4] would be for friction velocity (need grib code) elif [[ $par -eq 249 ]] ; then gflag[5]=T elif [[ $par -eq 231 ]] ; then gflag[6]=T elif [[ $par -eq 233 ]] ; then gflag[7]=T ## gflag[8] would be for wave indiced stress (need grib code) elif [[ $par -eq 244 ]] ; then gflag[9]=T elif [[ $par -eq 245 ]] ; then gflag[10]=T elif [[ $par -eq 234 ]] ; then gflag[11]=T elif [[ $par -eq 237 ]] ; then gflag[12]=T elif [[ $par -eq 235 ]] ; then gflag[13]=T elif [[ $par -eq 238 ]] ; then gflag[14]=T elif [[ $par -eq 236 ]] ; then gflag[15]=T elif [[ $par -eq 239 ]] ; then gflag[16]=T elif [[ $par -eq 246 ]] ; then gflag[17]=T elif [[ $par -eq 247 ]] ; then gflag[18]=T elif [[ $par -eq 248 ]] ; then gflag[19]=T elif [[ $par -eq 220 ]] ; then gflag[20]=T elif [[ $par -eq 221 ]] ; then gflag[21]=T elif [[ $par -eq 222 ]] ; then gflag[22]=T elif [[ $par -eq 223 ]] ; then gflag[23]=T elif [[ $par -eq 226 ]] ; then gflag[24]=T elif [[ $par -eq 224 ]] ; then gflag[25]=T elif [[ $par -eq 227 ]] ; then gflag[26]=T elif [[ $par -eq 225 ]] ; then gflag[27]=T elif [[ $par -eq 228 ]] ; then gflag[28]=T elif [[ $par -eq 252 ]] ; then gflag[29]=T elif [[ $par -eq 253 ]] ; then gflag[30]=T elif [[ $par -eq 254 ]] ; then gflag[31]=T elif [[ $par -eq 219 ]] ; then gflag[32]=T elif [[ $par -eq 218 ]] ; then gflag[33]=T elif [[ $par -eq 217 ]] ; then gflag[34]=T elif [[ $par -eq 215 ]] ; then gflag[35]=T elif [[ $par -eq 216 ]] ; then gflag[36]=T elif [[ $par -eq 131 ]] ; then gflag[37]=T elif [[ $par -eq 132 ]] ; then gflag[38]=T elif [[ $par -eq 212 ]] ; then gflag[39]=T elif [[ $par -eq 211 ]] ; then gflag[40]=T elif [[ $par -eq 214 ]] ; then gflag[41]=T elif [[ $par -eq 121 ]] ; then gflag[42]=T elif [[ $par -eq 122 ]] ; then gflag[43]=T elif [[ $par -eq 123 ]] ; then gflag[44]=T elif [[ $par -eq 124 ]] ; then gflag[45]=T elif [[ $par -eq 125 ]] ; then gflag[46]=T elif [[ $par -eq 126 ]] ; then gflag[47]=T elif [[ $par -eq 127 ]] ; then gflag[48]=T elif [[ $par -eq 128 ]] ; then gflag[49]=T elif [[ $par -eq 129 ]] ; then gflag[50]=T elif [[ $par -eq 210 ]] ; then gflag[51]=T elif [[ $par -eq 120 ]] ; then gflag[52]=T elif [[ $par -eq 209 ]] ; then gflag[53]=T elif [[ $par -eq 208 ]] ; then gflag[54]=T elif [[ $par -eq 31 ]] ; then gflag[55]=T elif [[ $par -eq 92 ]] ; then gflag[56]=T elif [[ $par -eq 207 ]] ; then gflag[57]=T elif [[ $par -eq 159 ]] ; then gflag[58]=T elif [[ $par -eq 91 ]] ; then gflag[59]=T # elif [[ $par -eq 92 ]] ; then # gflag[60]=T elif [[ $par -eq 49 ]] ; then gflag[61]=T elif [[ $par -eq 50 ]] ; then gflag[62]=T elif [[ $par -eq 112 ]] ; then gflag[63]=T elif [[ $par -eq 113 ]] ; then gflag[64]=T elif [[ $par -eq 114 ]] ; then gflag[65]=T elif [[ $par -eq 115 ]] ; then gflag[66]=T elif [[ $par -eq 116 ]] ; then gflag[67]=T elif [[ $par -eq 117 ]] ; then gflag[68]=T elif [[ $par -eq 118 ]] ; then gflag[69]=T elif [[ $par -eq 119 ]] ; then gflag[70]=T elif [[ $par -eq 098 ]] ; then gflag[71]=T elif [[ $par -eq 099 ]] ; then gflag[72]=T elif [[ $par -eq 100 ]] ; then gflag[73]=T elif [[ $par -eq 101 ]] ; then gflag[74]=T elif [[ $par -eq 102 ]] ; then gflag[75]=T elif [[ $par -eq 103 ]] ; then gflag[76]=T elif [[ $par -eq 104 ]] ; then gflag[77]=T elif [[ $par -eq 105 ]] ; then gflag[78]=T # extra fields elif [[ $par -eq 080 ]] ; then ((iflg=nbgflagmax-4)) gflag[iflg]=T elif [[ $par -eq 081 ]] ; then ((iflg=nbgflagmax-3)) gflag[iflg]=T elif [[ $par -eq 082 ]] ; then ((iflg=nbgflagmax-2)) gflag[iflg]=T elif [[ $par -eq 083 ]] ; then ((iflg=nbgflagmax-1)) gflag[iflg]=T elif [[ $par -eq 084 ]] ; then ((iflg=nbgflagmax)) gflag[iflg]=T # !! if more gflag also increase nbgflagmax accordingly (see above) fi done iflg=0 until [[ iflg -ge nbgflagmax ]] do ((iflg=iflg+1)) echo ${gflag[iflg]} done set -ex #====================================================================== # # End of wave_setgflag # #====================================================================== set -e; trap 0; return 0 ##### reset trap } #end-of-include $EXPVER/include/wave_setgflag ($EXPVER/include/wave_setup_4v) typeset -fx wave_setgflag #include $EXPVER/include/wave_set_tstep ($EXPVER/include/wave_setup_4v) function wave_set_tstep { #wave_set_tstep version: 20120305 #include $EXPVER/include/set_traps.h ($EXPVER/include/wave_set_tstep) trap ERROR 0 for signal in $ECF_SIGNAL_LIST do name=$(kill -l $signal) trap "{ echo \"Signal $name ($signal) received\"; ERROR ; }" $signal done #end-of-include $EXPVER/include/set_traps.h ($EXPVER/include/wave_set_tstep) set -eu set +x ######################################################################## # # # function wave_set_tstep # ----------------------- # # # # Purpose : sets idelpro, idelt, ishallow, licerun, irefra llunstr # ------- for use in wam_input # # from the definition given in $wamresol # # and $lecurr # # # # # Usage : wave_set_step $wamresol $lecurr $wamunstr # # ----- # # # ######################################################################## wamresol=$1 lecurr=$2 wamunstr=${3:-} if [[ $wamunstr = true ]] ; then llunstr=T else llunstr=F fi if [[ $wamresol = global5 ]] ; then ishallow=0 idelpro=150 idelt=600 licerun=T if [[ "$lecurr" = true ]] ; then irefra=2 else irefra=0 fi elif [[ $wamresol = global10 ]] ; then ishallow=0 idelpro=300 idelt=600 licerun=T if [[ "$lecurr" = true ]] ; then irefra=2 else irefra=0 fi elif [[ $wamresol = global12.5 ]] ; then ishallow=0 idelpro=450 idelt=450 licerun=T if [[ "$lecurr" = true ]] ; then irefra=2 else irefra=0 fi elif [[ $wamresol = global25 ]] ; then ishallow=0 idelpro=720 idelt=720 licerun=T if [[ "$lecurr" = true ]] ; then irefra=2 else irefra=0 fi elif [[ $wamresol = global36 ]] ; then ishallow=0 idelpro=900 idelt=900 licerun=T if [[ "$lecurr" = true ]] ; then irefra=2 else irefra=0 fi elif [[ $wamresol = global50 ]] ; then ishallow=0 if [[ $WAMNANG -gt 24 ]] ; then idelpro=900 idelt=900 else idelpro=1200 idelt=1200 fi licerun=T if [[ "$lecurr" = true ]] ; then irefra=2 else irefra=0 fi elif [[ $wamresol = global100 ]] ; then ishallow=0 if [[ $WAMNANG -gt 24 ]] ; then idelpro=900 idelt=900 else idelpro=1200 idelt=1200 fi licerun=T if [[ "$lecurr" = true ]] ; then irefra=2 else irefra=0 fi elif [[ $wamresol = global150 ]] ; then ishallow=0 if [[ $WAMNANG -gt 24 ]] ; then idelpro=900 idelt=900 else idelpro=1200 idelt=1200 fi licerun=T if [[ "$lecurr" = true ]] ; then irefra=2 else irefra=0 fi elif [[ $wamresol = global300 ]] ; then ishallow=0 if [[ $WAMNANG -ge 24 ]] ; then idelpro=1200 else idelpro=3600 fi idelt=1200 licerun=T if [[ "$lecurr" = true ]] ; then irefra=2 else irefra=0 fi elif [[ $wamresol = global511 ]] ; then ishallow=0 idelpro=900 idelt=900 licerun=T if [[ "$lecurr" = true ]] ; then irefra=2 else irefra=0 fi elif [[ $wamresol = medite25 ]] ; then ishallow=0 if [[ $wamunstr = true ]] ; then idelpro=300 idelt=300 licerun=T else idelpro=600 idelt=600 licerun=T fi if [[ "$lecurr" = true ]] ; then irefra=2 else irefra=0 fi elif [[ $wamresol = medite15 ]] ; then ishallow=0 idelpro=450 idelt=900 licerun=T if [[ "$lecurr" = true ]] ; then irefra=2 else irefra=0 fi elif [[ $wamresol = medite10 ]] ; then ishallow=0 licerun=T if [[ $wamunstr = true ]] ; then idelpro=300 idelt=300 else idelpro=300 idelt=600 fi if [[ "$lecurr" = true ]] ; then irefra=2 else irefra=0 fi elif [[ $wamresol = onegrdpt ]] ; then # one grid point setup ishallow=0 idelpro=300 idelt=300 licerun=F irefra=0 elif [[ $wamresol = swamp ]] ; then # swamp setup ishallow=0 idelpro=150 idelt=300 licerun=T irefra=0 elif [[ $wamresol = standrewbay ]] ; then ishallow=0 idelpro=15 idelt=300 licerun=F irefra=0 elif [[ $wamresol = gm20 ]] ; then # Gulf of Mexico ishallow=0 idelpro=450 idelt=450 licerun=F if [[ "$lecurr" = true ]] ; then irefra=2 else irefra=0 fi else print - "$0: ERROR - wamresol=$wamresol. Invalid resolution." print - "$0: ERROR - EXIT" exit fi set +eu #====================================================================== # # End of wave_set_tstep # #====================================================================== set -e; trap 0; return 0 ##### reset trap } #end-of-include $EXPVER/include/wave_set_tstep ($EXPVER/include/wave_setup_4v) typeset -fx wave_set_tstep #include $EXPVER/include/wave_set_nwrtoutwam ($EXPVER/include/wave_setup_4v) function wave_set_nwrtoutwam { #wave_set_nwrtoutwam version: 20141017 #include $EXPVER/include/set_traps.h ($EXPVER/include/wave_set_nwrtoutwam) trap ERROR 0 for signal in $ECF_SIGNAL_LIST do name=$(kill -l $signal) trap "{ echo \"Signal $name ($signal) received\"; ERROR ; }" $signal done #end-of-include $EXPVER/include/set_traps.h ($EXPVER/include/wave_set_nwrtoutwam) set -eu set +x ######################################################################## # # # function wave_set_nwrtoutwam # ---------------------------- # # # # Purpose : sets nwrtoutwam # # ------- stride used to speficy the output tasks for fdb # # # # Usage : wave_set_nwrtoutwam # # ----- # # # ######################################################################## if [[ $OD_MODE = true ]]; then nwrtoutwam=${_NWRTOUTWAM_} else nwrtoutwam=${_NWRTOUTWAM_} # In MPMD mode SUBMIT_TOTAL_TASKS will have colon separated list # of tasks, this formatting extracts first entry [[ $nwrtoutwam -gt ${SUBMIT_TOTAL_TASKS%%:*} ]] && nwrtoutwam=${SUBMIT_TOTAL_TASKS%%:*} [[ nwrtoutwam -lt 1 ]] && nwrtoutwam=1 fi echo $nwrtoutwam set -ex #====================================================================== # # End of wave_set_nwrtoutwam # #====================================================================== set -e; trap 0; return 0 ##### reset trap } #end-of-include $EXPVER/include/wave_set_nwrtoutwam ($EXPVER/include/wave_setup_4v) typeset -fx wave_set_nwrtoutwam : #include $EXPVER/include/cycle_times ($EXPVER/include/wave_setup_4v) #======================================================================= # # cycle_times # ----------- # # Purpose : Define variables control the date and times for # ------- cycling of the assimilation window. # #======================================================================= IFSMODE=${IFSMODE:=none} PERIOD_4D=${PERIOD_4D:=-999999} WINDOW_LENGTH_4D=${WINDOW_LENGTH_4D:=-999999} WINDOW_OFFSET_4D=${WINDOW_OFFSET_4D:=-999999} REINIWINDOW_LENGTH_4D=${REINIWINDOW_LENGTH_4D:=-999999} NUMINI=${_NUMINI_} PERIOD_BG=${PERIOD_BG:=-999999} echo "NUMINI=$NUMINI" # The variables below are derived from WINDOW_LENGTH_4D and WINDOW_OFFSET_4D # later in this file if WINDOW_LENGTH_4D is specified WINDOW_START=-999999 WINDOW_END=-999999 BKG_TIME=-999999 NXBGTIME=-999999 FIRST_AN=-999999 LAST_AN=-999999 STEP_AN=-999999 NO6HTSL=-999999 #======================================================================= # Determine appropriate value for PERIOD_AN and PERIOD_OBS #======================================================================= PERIOD_AN_ATM=${PERIOD_AN_ATM:=6} PERIOD_AN_SFC=${PERIOD_AN_SFC:=6} LPERIOD_AN_SFC=${LPERIOD_AN_SFC:=false} # Set PERIOD_AN, using $LPERIOD_AN_SFC to select between # surface-related tasks and the atmospheric 4d-var if [[ $LPERIOD_AN_SFC = true ]] ; then PERIOD_AN=${PERIOD_AN_SFC} else PERIOD_AN=${PERIOD_AN_ATM} fi # Allow to override this via ecFlow variable - this enables it to be # optionally relaxed from 6 to 12 in the archiving family for CAMS # experiments if you don't need to archive the 06Z and 18Z analyses # (which aren't used to initialise forecasts in a 03-15 window). PERIOD_AN=${_PERIOD_AN_} echo "PERIOD_AN=$PERIOD_AN" PERIOD_OBS=6 #======================================================================= # Some basic prints #======================================================================= echo "BASETIME=$BASETIME" echo "PERIOD_4D=$PERIOD_4D" echo "WINDOW_LENGTH_4D=$WINDOW_LENGTH_4D" echo "WINDOW_OFFSET_4D=$WINDOW_OFFSET_4D" if [[ $WINDOW_LENGTH_4D -gt 0 ]] ; then WINDOW_CUTOFF_4D=$(( WINDOW_LENGTH_4D - WINDOW_OFFSET_4D )) else WINDOW_CUTOFF_4D=-999999 fi echo "WINDOW_CUTOFF_4D=$WINDOW_CUTOFF_4D" echo "PERIOD_BG=$PERIOD_BG" #======================================================================= # Checks #======================================================================= if [[ $WINDOW_OFFSET_4D -gt $WINDOW_LENGTH_4D ]] ; then echo "Window offset is longer than assimilation window" exit 1 fi if [[ $PERIOD_BG -lt $PERIOD_4D ]]; then case $IFSMODE in 4d_inc|3d_fgat|early_delivery) echo "Background cannot be more recent than previous cycle" exit 1 ;; esac fi #======================================================================= # Determine correct BASETIME #======================================================================= INIBEGINDATE=${_INIBEGINDATE_} _inihour=${_INIBEGINHOUR_} INIBEGINHOUR=$(printf %02d $_inihour) if [[ $FAMILY = */make/* || $FAMILY = */inicond/* ]] ; then if [[ $FAMILY = */make/* ]] ; then CYCLETIME=$(echo ${INIBEGINDATE}${INIBEGINHOUR} | cut -c1-10) fi back=$(( (NUMINI+1) * PERIOD_4D )) CYCLETIME=$( newdate $CYCLETIME -$back ) fi echo "CYCLETIME=$CYCLETIME" #======================================================================= # Split outer loop #======================================================================= NSPLIT4DWIN=${NSPLIT4DWIN:=0} NSUBWIN4D=0 SUBWIN_OFFSET=0 LSPLIT4D_SPINUP=false if [[ $NSPLIT4DWIN -gt 0 ]] ; then subtime=$CYCLETIME isubwin=1 while [[ $isubwin -le $NSPLIT4DWIN ]] ; do if [[ $subtime -ge $INITIME ]] ; then NSUBWIN4D=$isubwin fi isubwin=$((isubwin + 1)) subtime=$(newdate $subtime -$WINDOW_LENGTH_4D) done [[ $NSUBWIN4D -lt $NSPLIT4DWIN ]] && LSPLIT4D_SPINUP=true [[ $NSUBWIN4D -gt 1 ]] && SUBWIN_OFFSET=$(( WINDOW_LENGTH_4D * (NSUBWIN4D-1) )) fi echo "NSPLIT4DWIN=$NSPLIT4DWIN" echo "NSUBWIN4D=$NSUBWIN4D" echo "SUBWIN_OFFSET=$SUBWIN_OFFSET" #======================================================================= # Beginning and end of the current window #======================================================================= if [[ $WINDOW_LENGTH_4D -gt 0 ]] ; then WINDOW_START=$( newdate $CYCLETIME -$WINDOW_OFFSET_4D ) WINDOW_END=$( newdate $CYCLETIME $WINDOW_CUTOFF_4D ) echo "WINDOW_START=$WINDOW_START" echo "WINDOW_END=$WINDOW_END" #======================================================================= # Background #======================================================================= BKG_STEP=${STEP_BG:=3} if [[ $REINITIALIZE = true && $REINI_NOT_ED = true ]] ; then BKG_STEP=$(( BKG_STEP + REINIOFFSET - PERIOD_AN )) fi echo "BKG_STEP=$BKG_STEP" BKG_TIME=$( newdate $WINDOW_START -$BKG_STEP ) echo "BKG_TIME=$BKG_TIME" if [[ $REINITIALIZE = true || $LEDFAMILY = true ]] ; then WINDOW_LENGTH_BG=$REINIWINDOW_LENGTH_4D else WINDOW_LENGTH_BG=$WINDOW_LENGTH_4D fi echo "WINDOW_LENGTH_BG=$WINDOW_LENGTH_BG" BKG_OFFSET=$(( WINDOW_LENGTH_BG - PERIOD_BG + BKG_STEP )) echo "BKG_OFFSET=$BKG_OFFSET" # Time for next background (ie start of cycling fc) NXBGTIME=$( newdate $WINDOW_END -$BKG_OFFSET ) # EH: Below is for ED 8h window - need to correct in a general way if [[ $LEDFAMILY = true ]] ; then NXBGTIME=$CYCLETIME fi echo "NXBGTIME=$NXBGTIME" #======================================================================= # Find analysis (synoptic) times #======================================================================= hh="$(substring $WINDOW_START 9 10)" # sh step=$(( 10#$hh % PERIOD_AN )) [[ $step -gt 0 ]] && step=$(( PERIOD_AN - step )) FIRST_AN=$( newdate $WINDOW_START $step ) if [[ $CERA_OUT = true && $FIRST_AN = $WINDOW_START ]] ; then # Until overlapping windows are fully implemented, cannot archive analysis at start of window FIRST_AN=$( newdate $WINDOW_START +$PERIOD_AN) fi hh="$(substring $WINDOW_END 9 10)" step=$(( 10#$hh % PERIOD_AN )) LAST_AN=$( newdate $WINDOW_END -$step) if [[ $FAMILY = */make/* || $FAMILY = */inicond/* ]] ; then FIRST_AN=$NXBGTIME LAST_AN=$NXBGTIME fi STEP_AN=$( datediff -h $FIRST_AN $WINDOW_START ) echo "FIRST_AN=$FIRST_AN" echo "LAST_AN=$LAST_AN" echo "STEP_AN=$STEP_AN" hh_start=$( substring $WINDOW_START 9 10 ) echo "hh_start=$hh_start" case $hh_start in 03|09|15|21) NO6HTSL=$(( WINDOW_LENGTH_4D / PERIOD_OBS )) ;; *) NO6HTSL=$(( WINDOW_LENGTH_4D / PERIOD_OBS + 1 )) esac echo "NO6HTSL=$NO6HTSL" ## Wave model assimilation ## Enforce 6 hourly wave assimilation wam_assimil_period=${WAM_ASSIMIL_PERIOD:=6} if [[ $wam_assimil_period -lt 6 ]] ; then if [[ $FAMILY = */make/* || $FAMILY = */inicond/* ]] ; then anstart=$NXBGTIME else anstart=$WINDOW_START fi FIRST_AN_WAVE=$( newdate $anstart $wam_assimil_period ) PERIOD_AN_WAVE=$wam_assimil_period LAST_AN_WAVE=$WINDOW_END else FIRST_AN_WAVE=$FIRST_AN PERIOD_AN_WAVE=$PERIOD_AN LAST_AN_WAVE=$LAST_AN fi fi #======================================================================= # End cycle_times #======================================================================= WINDOW_LENGTH_4D_TOT=$(( WINDOW_LENGTH_4D + SUBWIN_OFFSET )) echo "WINDOW_LENGTH_4D_TOT=$WINDOW_LENGTH_4D_TOT" #======================================================================= # Things that do not depend on current cycle time #======================================================================= DATE_OPER_DCDA=2004062900 DATE_OPER_ENDA=2010062200 DATE_OPER_LWDA=2013111900 ANOFFSET_TYPES='4i|4v|an|fc|ef|ea|me|em|es|ses' WINDOW_LENGTH_4D_TOT_OPER=12 EDA_WINDOW_LENGTH_4D_TOT_OPER=12 EDA_WINDOW_LENGTH_4D=${EDA_WINDOW_LENGTH_4D:=12} INI_WINDOW_LENGTH_4D=${INI_WINDOW_LENGTH_4D:=12} EDACLASS=${EDACLASS:=od} EDAEXPVER=${EDAEXPVER:=0001} LEDA_ERRORS_IN=${LEDA_ERRORS_IN:=true} if [[ $LEDA_ERRORS_IN = true && $EDACLASS = od && $EDAEXPVER = 0001 && $BASETIME -ge $DATE_OPER_LWDA ]] ; then if [[ $LEVELS = 137 ]] ; then LJB_EDA=true fi LSES_EDA=true fi #======================================================================= # Setting for archiving via NPOSTS argument in NAMCT0, used by sekf_sm and ifstraj and ansfc #======================================================================= PPSTEP_INC=3 if [[ $PERIOD_AN -lt 3 ]] ; then PPSTEP_INC=$PERIOD_AN fi echo "PPSTEP_INC=$PPSTEP_INC" #end-of-include $EXPVER/include/cycle_times ($EXPVER/include/wave_setup_4v) #====================================================================== # 1. Define xidw and startdate #====================================================================== # variable controlling the introduction of the new levtype for the waves wamnewlvtp=${WAMNEWLVTP:=false} # variable controlling the use of sea ice mask or sea ice attenuation wammaskice=${WAMMASKICE:=true} # variable setting the use of unstructed grids wamunstr=${WAMUNSTR:=false} # get the wave model stream and the grib table number run_stream=${STREAM:=da} wave_find_stream $run_stream if [[ $wamnewlvtp = true ]] ; then wamstream=$run_stream else wamstream=$wamstream fi nlocgrb=$nlocgrb #Ensemble data assimilation parameters member=${_MEMBER_} endamembers=$(( ENDANENS + 1 )) xidw=$EXPVER startdate=$( newdate $BASETIME -$WINDOW_OFFSET_4D ) begindate=${startdate}0000 window_end_4d=$((WINDOW_LENGTH_4D - WINDOW_OFFSET_4D)) hh=0 while [[ $((hh-PERIOD)) -ge $((window_end_4d-WINDOW_LENGTH_4D)) ]] ; do hh=$((hh-PERIOD)) done start_hh=$hh rm -f BLS* LAW* rm -f wam_namelist wam_grid_tables wam_subgrid_* rm -f sfcwindin cdwavein uwavein specwavein #====================================================================== # # 3. Get Altimeter data file. # 3.1 Altimeter data file. # #====================================================================== if [[ $lsekf = true || $LENKF = true ]] ; then WAMALT=no WAMSAR=no fi if [[ "$WAMALT" = "yes" ]] ; then if [[ $PWD != $WDIR ]] ; then rm -f RFL* fi # one set per PERIOD in 4dvar window hh=$start_hh while [[ $hh -lt $window_end_4d ]] ;do analysis_date=$( newdate $BASETIME $hh ) analysis_date="${analysis_date}00" if [[ ! -r ${WDIR}/wave/RFL${analysis_date} ]] ; then set +vx echo ' ' echo '!!!!! no altimeter wave data were provided !!!!!' echo '!!!!! the wave model analysis will be carried out !!!!' echo '!!!!! without it. !!!!' echo ' ' set -xv else if [[ $PWD != $WDIR ]] ; then rm -f RFL${analysis_date} ln -sf ${WDIR}/wave/RFL${analysis_date} RFL${analysis_date} fi fi hh=$(( hh + PERIOD )) done fi #====================================================================== # # 3.2 SAR data file. # #====================================================================== sat_sar=${SAT_SAR:=envisat} if [[ "$WAMSAR" = "yes" && "$WAMSARASS" = "true" ]] ; then if [[ $sat_sar = ers ]] ; then SMC=SMC sarpar=sarpar performance=performance # parameter for SAR inversion cat > ${WDIR}/SARINPUT <<- EOF #include $EXPVER/include/sar_input ($EXPVER/include/wave_setup_4v) ERS-2 SAR simulation parameter 1.1 RAR MTF modulation parameter ---------------------------- 5.0 RAR MTF modulus 45.0 RAR MTF phase 0.5 relaxation parameter of hydrodynamic modulation 0.0 modulus of hydrodynamic MTF associated with wind input 0.0 phase hydrodynamic MTF associated with wind input 1.2 radar parameter --------------- 1, radar polarisation -1 = HH, 1 = VV 3, number of azimuthal looks 11.0 single look azimuthal resolution 0.056 radar wave length (C-Band) 839000. distance radar - target 6600. satellite velocity 23.0 incidence angle 1.3 additional parameters --------------------- 32.0 ocean and sar image step width 0.78 calibr. fac.: 1 for n look intensity,0.78 for ERS-1 SAR. 3. max. allowed distance (in degree) between WAM and SAR 1.4 simulation control parameters ------------------------------ 0, print flag (standard output, unit 6) 0, plot flag; 0 - no plots, 1 - plotting spectra 0, RAR MTF flag; 1 = parametrization, else theoretical calc. -1, radar look direction, 1 = left, -1 = right 2, flag 2 1 - ERS-1 wave mode data, 0 - SIR-C data flag 2 should be 2 for ERS-2 incidence angle is really 23.0 degree EOF elif [[ $sat_sar = envisat ]] ; then SMC=AMC sarpar=sarpar_asar performance=performance_asar # parameter for ASAR inversion cat > ${WDIR}/SARINPUT <<- EOF #include $EXPVER/include/asar_input ($EXPVER/include/wave_setup_4v) ENVISAT ASAR simulation parameter 1.1 RAR MTF modulation parameter ---------------------------- 5.0 RAR MTF modulus 45.0 RAR MTF phase 0.5 relaxation parameter of hydrodynamic modulation 0.0 modulus of hydrodynamic MTF associated with wind input 0.0 phase hydrodynamic MTF associated with wind input 1.2 radar parameter --------------- 1, radar polarisation -1 = HH, 1 = VV 1, number of azimuthal looks 11.0 single look azimuthal resolution 0.056 radar wave length (C-Band) 839000. distance radar - target 6600. satellite velocity 23.0 incidence angle 1.3 additional parameters --------------------- 32.0 ocean and sar image step width 0.78 calibr. fac.: 1 for n look intensity,0.78 for ERS-1 SAR. 3. max. allowed distance (in degree) between WAM and SAR 1.4 simulation control parameters ------------------------------ 0, print flag (standard output, unit 6) 0, plot flag; 0 - no plots, 1 - plotting spectra 0, RAR MTF flag; 1 = parametrization, else theoretical calc. -1, radar look direction, 1 = left, -1 = right 60, flag 2: 1 - ERS-1 wave mode data, 0 - SIR-C data flag 2 should be 1 for ERS-1 (Lets use 2 for ERS-2, and 60 for ENVISAT) incidence angle is really 23.0 degree It is possible that "ocean and sar image step width" may not be 32.0 for ENVISAT EOF else echo "ERROR from $0 - Unknown stellite: $sat_sar" echo " Use only: ers or envisat" exit 2 fi chmod g+w ${WDIR}/SARINPUT || true rm -f ${sarpar} ln -s ${WDIR}/SARINPUT ${sarpar} # one set per PERIOD in 4dvar window hh=$start_hh while [[ $hh -lt $window_end_4d ]] ;do analysis_date=$( newdate $BASETIME $hh ) analysis_date="${analysis_date}00" if [[ ! -r ${WDIR}/wave/${SMC}${analysis_date} ]] ; then set +vx echo ' ' echo '!!!!! no SAR wave data were provided !!!!!' echo '!!!!! the wave model analysis will be carried out !!!!' echo '!!!!! without it. !!!!' echo ' ' set -xv else if [[ $PWD != $WDIR ]] ; then rm -f ${SMC}${analysis_date} ln -sf ${WDIR}/wave/${SMC}${analysis_date} ${SMC}${analysis_date} fi fi hh=$(( hh + PERIOD )) done elif [[ "$WAMSAR" = "yes" ]] ; then if [[ $PWD != $WDIR ]] ; then rm -f COL* fi # one set per PERIOD in 4dvar window hh=$start_hh while [[ $hh -lt $window_end_4d ]] ;do analysis_date=$( newdate $BASETIME $hh ) analysis_date="${analysis_date}00" if [[ ! -r ${WDIR}/wave/COL${analysis_date} ]] ; then set +vx echo ' ' echo '!!!!! no SAR wave data were provided !!!!!' echo '!!!!! the wave model will not provide first guess !!!!' echo '!!!!! wave spectra. !!!!' echo ' ' set -xv else if [[ $PWD != $WDIR ]] ; then rm -f COL${analysis_date} ln -sf ${WDIR}/wave/COL${analysis_date} COL${analysis_date} fi fi hh=$(( hh + PERIOD )) done fi if [[ "$WAMSAR" = "yes" ]] ; then rm -f ${performance} if [[ -s $DATA/wave/${STREAM}/${performance} ]] ; then ln -s $DATA/wave/${STREAM}/${performance} ${performance} || true else [[ -d $DATA/wave/${STREAM} ]] || mkdir -p $DATA/wave/${STREAM} touch $DATA/wave/${STREAM}/${performance} || true ln -s $DATA/wave/${STREAM}/${performance} ${performance} || true touch $DATA/wave/${STREAM}/flag_${performance} || true fi fi #====================================================================== # # 4. Create input namelist file for coupled run. # #====================================================================== iassi=0 ((idelalt=PERIOD_AN_WAVE*3600)) enddate=00000000000000 lwcou=T ppfreq=3 clotsu=H if [[ $STREAM = ELDA ]] ; then # get ensemble parameters typeset -Z3 nensfnb=$member typeset -Z3 ntotens=$endamembers else nensfnb=0 ntotens=0 fi irest=1 param=${WAMANPARAM} typeset -i iflg iflg=0 set +x rm -f wam_input_gflags for ldum in $(wave_setgflag $param) do ((iflg=iflg+1)) gflag[iflg]=$ldum echo "GFLAG("${iflg}")= "${gflag[iflg]}"," >> wam_input_gflags done echo "/" >> wam_input_gflags set -x nsysnb=-1 nmetnb=-1 # Flag for use of ODB lodbralt=T # Flags for Gustiness and Air Density lgust=T laden=T llwswave=F llwdwave=F liceth=F llsource=T lnsestart=F # number of grid points in inner loops per threads if openMP nproma_wam=24 if [[ $nlocgrb = 18 ]] ; then manncep=$MANNCEP manmfr=$MANMFR mandwd=$MANDWD manukm=$MANUKM inimacons=$INIMACONS else manncep=0 manmfr=0 mandwd=0 manukm=0 inimacons=0 fi irefdate=${HC_REFDATE:=0} if [[ $FSFAMILY = "/sv" ]] ; then lfdbioout=F else lfdbioout=T fi # use IO server if used by IFS lwam_use_io_serv=${LIOSERVER:=false} itest=0 lnocdin=F l4vtype=T lfrstfld=F storage_path=$WDIR cfdbsf=${FDB_ROOT:-} cfdb2dsp=${FDB_ROOT:-} if [[ "$WAMALT" = "yes" ]] ; then laltas=T else laltas=F fi if [[ "$WAMSARASS" = "true" ]] ; then lsaras=T else lsaras=F fi # Coupling of WAM and NEMO if [[ ${LWAMNEMOCOUP:-no} = yes && ${_LNEMOCOUP_} = 1 ]]; then lwnemocou=T # get and use sea ice cover from NEMO (once coupled) if [[ ${LWAMNEMOCIC:-yes} = yes ]]; then lwnemocic=T else lwnemocic=F fi # get or not the sea ice thickness (once coupled) if [[ ${LWAMNEMOCIT:-no} = yes ]]; then lwnemocit=T else lwnemocit=F fi # surface current if [[ ${LWAMNEMOCUR:-yes} = yes && ${LWAMCURR:-false} = true ]]; then # get surface currents from NEMO (once coupled) lwnemocur=T # use surface currents from NEMO in WAM lecurr=true else lwnemocur=F # use surface currents from IFS if [[ ${LWAMCURR:-false} = true ]]; then # use surface currents from IFS lecurr=${LECURR:=false} else lecurr=false fi fi else lwnemocou=F lwnemocic=F lwnemocit=F lwnemocur=F # use surface currents from IFS if [[ ${LWAMCURR:-false} = true ]]; then # use surface currents from IFS lecurr=${LECURR:=false} else lecurr=false fi fi # mask sea ice or use attenuation model if [[ $wammaskice = true ]] ; then lmaskice=T else lmaskice=F fi wave_set_tstep $WAMRESOL $lecurr ishallow=$ishallow idelpro=$idelpro idelt=$idelt licerun=$licerun irefra=$irefra cdatecura=$begindate idelcur=0 lrelwind=T lfdb=T #gabor-cams TRAJNOFDB=${TRAJNOFDB:=false} if [[ $uptraj -lt $MXUP_TRAJ && $TRAJNOFDB = true ]] ; then lfdb=F lfdbioout=F fi #gabor-cams fflag[1]=F, fflag[3]=F, fflag[6]=F, fflag[7]=F, fflag[10]=F, fflag[11]=F, fflag[20]=F, fflag[23]=F, fflag[32]=F, fflag[39]=F, fflag[41]=F, # Second order post-processing ll2ndorder=T # Settting the stride for output tasks nwrtoutwam=$(wave_set_nwrtoutwam) # Produce norms of fields passed from IFS to WAM llnormifs2wam=T # Produce norms of fields passed from WAM to IFS llnormwam2ifs=T # Produce norms of selected output fields (see gflags) llnormwamout=T swampwind=18.45 swampwind2=0. dtnewwind=0. lturn90=F idelwi=$idelpro idelwo=$idelpro # flag to use IFS grib header information (on in coupled runs) lgrhdifs=T # new levtype flag if [[ $wamnewlvtp = true ]] ; then lnewlvtp=T else lnewlvtp=F fi #======================================================================= # Need to do wave analysis in this trajectory? #======================================================================= #include $EXPVER/include/wave_assimtrajs ($EXPVER/include/wave_setup_4v) echo "[include start] wave_assimtrajs" #OLD# If WAMASSIMTRAJS is not defined, set it to the final trajectory ID #OLD#WAMASSIMTRAJS=${WAMASSIMTRAJS:-$MXUP_TRAJ} #OLD#if [[ $LENKF = true ]] ; then #OLD# WAMASSIMTRAJS=1 #OLD#fi if [[ $LENKF = true && $MEMBER -gt 0 ]] ; then WAMASSIMTRAJS=1 else # If WAMASSIMTRAJS is not defined, set it to the ID of the trajectory just before the final (or 0 in case of one trajectory) if [[ $MXUP_TRAJ -ge 1 ]] ; then ## WAMASSIMTRAJS=${WAMASSIMTRAJS:-$(( MXUP_TRAJ-1 ))} ## does not work for OOPS ## next line works for *OOPS* but needs checking for IFS if [[ $LOOPS = true ]] ; then WAMASSIMTRAJS=${WAMASSIMTRAJS:-$(( MXUP_TRAJ ))} else WAMASSIMTRAJS=${WAMASSIMTRAJS:-$(( MXUP_TRAJ-1 ))} fi else WAMASSIMTRAJS=${WAMASSIMTRAJS:-0} fi fi # Lets find if wave data assimilation is needed at this trajectory export WAMASSI_IN_TRAJ=false if print ${WAMASSIMTRAJS} | grep ':' ; then sep=':' ; else sep='/' ; fi for wat in $(print ${WAMASSIMTRAJS} | tr $sep " ") ; do if [[ $wat -gt ${MXUP_TRAJ} && $uptraj -eq ${MXUP_TRAJ} ]] ; then echo "WAMWARNING: Incorrect trajectory number for wave data assimilation $wat ... Reset to final trjectory ${MXUP_TRAJ}" wat=${MXUP_TRAJ} fi if [[ $wat -eq $uptraj && $LENKF = false ]] ; then WAMASSI_IN_TRAJ=true break fi done [[ ${WAMASSI_IN_TRAJ} = true ]] && \ echo "Wave data assimialion is done in this trajectory" || \ echo "Wave data assimialion will not be done in this trajectory" # If WAM_AN_OUT is not defined, set it to the last/only trajectory number in WAMASSIMTRAJS WAM_AN_OUT=${WAM_AN_OUT:-${WAMASSIMTRAJS##*$sep}} if [[ $uptraj -eq $WAM_AN_OUT ]] ; then lwamanout=T echo "Wave analysis fields are written at this trajectory." else lwamanout=F echo "No wave analysis is written out at this trajectory." fi echo "[include end] wave_assimtrajs" #end-of-include $EXPVER/include/wave_assimtrajs ($EXPVER/include/wave_setup_4v) if [[ ( ($uptraj -eq ${MXUP_TRAJ} && ( $LENKF = false || $LENKF_HYBRID = false) ) \ || $IFSMODE = 3d_fgat || ($LENKF = true && $uptraj -eq 1) \ || ${WAMASSI_IN_TRAJ} = true ) && \ $lsekf = false ]] ; then outdate=${BASETIME}0000 cdatef=$(newdate $startdate $WINDOW_LENGTH_4D ) cdatef=${cdatef}0000 cdater=$outdate cdates=$outdate irest=1 typeset -Z7 idelres=$(( PERIOD / 2 )) if [[ "$WAMALT" = "yes" || "$WAMSARASS" = "true" ]] ; then iassi=1 else iassi=0 fi if [[ "$WAMSAR" = "yes" && "$WAMSARASS" = "true" ]] ; then lsarinv=T else lsarinv=F fi else # note that outdate is intentionally set outside the run time range # since there is no need for wave model output for those trajectories outdate=$(newdate $BASETIME $WINDOW_LENGTH_4D ) outdate=${outdate}0000 cdatef=$outdate cdater=00000000000000 cdates=00000000000000 irest=0 typeset -Z7 idelres=$(( PERIOD / 2 )) iassi=0 lsarinv=F fi # model decomposition if [[ $iassi -eq 1 ]] ; then ll1d=T else ll1d=F fi if [[ $lsekf = true ]] ; then namelist_file=wam_namelist_sekf_cpld else namelist_file=wam_namelist_4d_${uptraj} fi cat > ${WDIR}/${namelist_file} <> ${WDIR}/${namelist_file} # add list of assimilation times and different output times: if [[ ( ($uptraj -eq ${MXUP_TRAJ} ) || ${WAMASSI_IN_TRAJ} = true || $IFSMODE = 3d_fgat || ($LENKF = true && $uptraj -eq 1) ) && \ $lsekf = false ]] ; then # wave data assimilation time list: if [[ $PERIOD_AN_WAVE -lt 6 ]] ; then outdate=$FIRST_AN_WAVE while [[ $outdate -le $LAST_AN_WAVE ]] ; do echo '&NAAT CLAOUT="'${outdate}'0000" /' >> ${WDIR}/${namelist_file} outdate=$( newdate $outdate $PERIOD_AN_WAVE ) done else hh=$PERIOD while [[ $hh -lt $WINDOW_OFFSET_4D ]] ; do hh=$(( hh+PERIOD )) done hh=$(( hh - PERIOD )) while [[ $((-hh)) -le $(( WINDOW_LENGTH_4D - WINDOW_OFFSET_4D )) ]] ; do outdate=$( newdate $BASETIME $((-hh)) ) echo '&NAAT CLAOUT="'${outdate}'0000" /' >> ${WDIR}/${namelist_file} hh=$(( hh - PERIOD )) done fi # output time list for integrated parameters: outdate=$FIRST_AN_WAVE while [[ $outdate -le $LAST_AN_WAVE ]] ; do echo '&NAOT CLOUT="'${outdate}'0000" /' >> ${WDIR}/${namelist_file} outdate=$( newdate $outdate $PERIOD_AN_WAVE ) done if [[ $PERIOD_AN_WAVE -lt 6 ]] ; then # ensure that there is output at the end of the window outdate=$WINDOW_END echo '&NAOT CLOUT="'${outdate}'0000" /' >> ${WDIR}/${namelist_file} fi # output time list for wave spectra: outdate=$FIRST_AN while [[ $outdate -le $LAST_AN ]] ; do echo '&NAOS CLSOUT="'${outdate}'0000" /' >> ${WDIR}/${namelist_file} outdate=$( newdate $outdate $PERIOD_AN ) done if [[ $PERIOD_AN_WAVE -lt 6 ]] ; then # ensure that there is output at the end of the window outdate=$WINDOW_END echo '&NAOS CLSOUT="'${outdate}'0000" /' >> ${WDIR}/${namelist_file} fi else echo '&NAOT CLOUT="'${outdate}'" /' >> ${WDIR}/${namelist_file} fi if [[ $lsekf = true ]] ; then rm -f wam_namelist echo 'dir pat' $WDIR cp -rf $WDIR/wam_namelist_sekf_cpld $WDIR/sekfdir/wam_namelist fi chmod g+w ${WDIR}/${namelist_file} || true #====================================================================== # # 5. General grid information and model constants. # #====================================================================== ln -s $DATA/$WAMRESOL/wam_grid_tables_${WAMNFRE}_${WAMNANG} wam_grid_tables #====================================================================== # # 6. Common UBUF. # #====================================================================== for ip in 0 1 2 do ln -s $DATA/$WAMRESOL/wam_subgrid_${ip}_${WAMNFRE}_${WAMNANG} wam_subgrid_${ip} done #====================================================================== # # 7. Get restart files. # #====================================================================== for file in sfcwindin cdwavein specwavein do rm -f $file ln -s ${WDIR}/wam_${file} ${file} done file=uwavein rm -f $file if [[ -r $WDIR/wam_${file} ]] ; then ln -s ${WDIR}/wam_${file} ${file} fi #====================================================================== # # End of Wave_setup_4v. # #====================================================================== #wave_setup_4v version: 20100114 _eof_wave_setup_4v if [[ $LMACC = true ]] ; then cat >$TMPDIR/compo_setup <<\_eof_compo_setup #include $EXPVER/include/compo_setup ($EXPVER/ifstraj_999.ecf) #compo_setup # These setup scripts are very verbose. Temporarily disable xtrace. if [[ ${LCOMPO_SETUP_VERBOSE:-false} = true ]]; then restore_xtrace='' elif [[ -o xtrace ]]; then restore_xtrace='set -x' set +x fi # set LAERO and LGHG , LCHEM is set in prepIFS if [[ -n $AEROVAR ]] ; then LAERO=true else LAERO=false fi if [[ -n $GHGVAR ]] ; then LGHG=true else LGHG=false fi # fire variables lfire=false linj=false linj_chem=false if [[ ${LINJ:-false} = true || ${LINJ_CHEM:-false} = true ]] ; then linj=true fi # set up and initialise # number of components nghg=0 nchem=0 nactaero=0 naero=0 # compo namelist gems2namcompo="" # 3d flux fields (aircraft emissions and CH4 LR) compo_3D="" LCOMPO_ARCHIVE_INPUT_2D=${LCOMPO_ARCHIVE_INPUT_2D:-true} LCOMPO_ARCHIVE_INPUT_3D=${LCOMPO_ARCHIVE_INPUT_3D:-false} LLCO2=false LLCH4=false lco2sfc=false lch4sfc=false lco2diu=false lrch4_ml="" ghg_sfc_nam="" ghg_ens="" ghg_ml="" ghg_sfc="" ghg_sfc_out="" ghg_bfascoef="" ghg_bfascoef_nam="" gems_co2_flux_setup="" ghg_nam="" ghg_sfc_out_nam="" lrch4_nam="" nch4=0 nghgbfascoef=0 nghgsfc=0 nghgsfc_out=0 # set aerosol defaults aero_ml="" aero_ml_init="" aero_nam="" naero_ml_outfc=0 aero_ml_outfc_nam="" aero_pl="" naero_pl_outfc=0 aero_pl_outfc_nam="" naero_sfc=0 naero_sfc_out=0 naero_sfc_outfc=0 aero_sfc="" aero_sfc_nam="" aero_sfc_out_nam="" aero_sfc_outfc_nam="" LAERNITRATE=false LAERSOA=false LAERVOL=false gems_ghg="" gems_aero="" gems_naeaer="" # chemistry setup chem_sfc_in="" chem_ml_in="" chem_list="" chem_sfc_out="" chem_ml_out="" chem_pl_out="" nchemsfc=0 nchempl=0 # total number of extra gfl fields ncextra=0 ########################################################## # Set up GHG ########################################################## if [[ $LGHG = true ]] ; then . ghg_setup fi ########################################################## # Set up Aerosols ########################################################## if [[ $LAERO = true ]] ; then . aero_setup fi ########################################################## # Set up Reactive Gases ########################################################## if [[ $LCHEM = true ]] ; then . chem_setup fi # Set up fire options if either GHGs or aerosols in use if (( nghg + naero > 0 )); then if [[ $TASK = ifsmin ]]; then lfire=false linj=false linj_chem=false elif [[ $CHEM_EMIS = CAMS_CMIP6 ]] ; then lfire=false else lfire=true fi fi inj_sfc="" if [[ $linj_chem = true || $linj = true ]] ; then inj_sfc=/119.210 inj_sfc_nam=210119 else inj_sfc="" inj_sfc_nam="" fi if [[ $LAERO = false ]] ; then LAERNUCL=false LVOLC_ALTI=false fi # add number of required extra gfl fields (set in chem_setup and ghg_setup ) if [[ $ncextra -gt 0 ]] ; then chem_list="${chem_list}NGFL_EXT=$ncextra,!" fi $restore_xtrace _eof_compo_setup cat >$TMPDIR/ghg_setup <<\_eof_ghg_setup #include $EXPVER/include/ghg_setup ($EXPVER/ifstraj_999.ecf) #ghg_setup ########################################################## # Set up Greenhouse Gases ########################################################## LGHG_ASSIM=${LGHG_ASSIM:-true} GHGVAR=${GHGVAR/\// } if [[ -n $GHGVAR ]] ; then set -A GHG $GHGVAR else set -A GHG empty fi set -A GHG_NAMES CO2 CH4 N2O set -A GHG_GRIB1 210061 210062 210063 set -A GHG_GRIB2 61.210 62.210 63.210 set -A GHG_GRIB3 210064 210065 210066 set -A GHG_GRIB4 64.210 65.210 66.210 nghg=${#GHG[*]} nch4=0 nghgbfascoef=0 LLCO2=false LLCH4=false lco2sfc=false lch4sfc=false lco2diu=false lrch4_ml="" lrch4_nam="" gems_ghg="" ghg_nam="" ghg_ml="" ghg_ml_arch="" ghg_pl_nam="" ghg_pl="" ghg_pl_arch="" ghg_sfc_nam="" ghg_sfc="" ghg_sfc_out_nam="" ghg_sfc_out="" ghg_sfc_arch="" ghg_mlsfc_arch="" ghg_bfascoef="" ghg_bfascoef_nam="" ghg_bfascoef_arch="" ghg_ens="" i=0 j=0 # General mass fixer flag LGHG_MF=${LGHG_MF:=true} LGHG_QM=${LGHG_QM:=false} LGHG_QM3D=${LGHG_QM3D:=true} if [[ ${LGHG_QM} = true && ${LGHG_QM3D} = true ]] ; then echo "You should choose between LGHG_QM or LGHG_QM3D" exit 1 fi for name in ${GHG_NAMES[*]} do if [[ $name == ${GHG[$i]} ]] ; then let i=i+1 gems_ghg=$gems_ghg"YGHG_NL($i)%CNAME='$name',!YGHG_NL($i)%IGRBCODE=${GHG_GRIB1[$j]},!YGHG_NL($i)%LADV5=true,!" gems_ghg=$gems_ghg"YGHG_NL($i)%LASSIM="${LGHG_ASSIM}",!" gems_ghg=$gems_ghg"YGHG_NL($i)%LMASSFIX="${LGHG_MF}",!" gems_ghg=$gems_ghg"YGHG_NL($i)%LNEGFIX=".FALSE.",!" gems_ghg=$gems_ghg"YGHG_NL($i)%LQM="${LGHG_QM}",!" gems_ghg=$gems_ghg"YGHG_NL($i)%LQM3D="${LGHG_QM3D}",!" gems_ghg=$gems_ghg"YGHG_NL($i)%BETAMFBC="2",!" # All required as ICs ghg_ml+=/${GHG_GRIB2[$j]} ghg_nam+=${GHG_GRIB1[$j]}, if [[ ML = @(${GHG_ARCH_TYPES//\//|}) ]]; then ghg_ml_arch+=/${GHG_GRIB2[$j]} fi if [[ PL = @(${GHG_ARCH_TYPES//\//|}) ]]; then ghg_pl+=/${GHG_GRIB2[$j]} ghg_pl_nam+=${GHG_GRIB1[$j]}, ghg_pl_arch+=/${GHG_GRIB2[$j]} fi if [[ TC = @(${GHG_ARCH_TYPES//\//|}) ]]; then nghgsfc_out=$((nghgsfc_out+1)) ghg_sfc_out+=/${GHG_GRIB4[$j]} ghg_sfc_out_nam+=${GHG_GRIB3[$j]}, ghg_sfc_arch+=/${GHG_GRIB4[$j]} fi if [[ SFC = @(${GHG_ARCH_TYPES//\//|}) ]]; then #nghgsfc_out=${nghgsfc_out+1} # not until model can output these directly at the surface #ghg_sfc_out+=/${GHG_GRIB2[$j]} #ghg_sfc_out_nam+=${GHG_GRIB1[$j]}, #ghg_sfc_arch+=/${GHG_GRIB2[$j]} ghg_mlsfc_arch+=/${GHG_GRIB2[$j]} fi ghg_ens="${ghg_ens} ${name}" if [[ $name == CO2 ]] ; then LLCO2=true lco2sfc=true fi if [[ $name == CH4 ]] ; then LLCH4=true lch4sfc=true if [[ $TASK != ifsmin ]] ; then gems_ghg="YLRCH4_NL%CNAME='kCH4',!YLRCH4_NL%IGRBCODE=210071,!YLRCH4_NL%LGP=.TRUE.,YLRCH4_NL%LTRAJIO=.FALSE.,!"$gems_ghg lrch4_ml=/71.210 lrch4_nam=210071, nch4=1 # naj check if this is needed in getini #if [[ $TASK == getini || $TASK == getfcdata ]] ; then #if [[ $TASK == vardata || $TASK == getfcdata ]] ; then compo_3D=${compo_3D}/71.210 #fi fi fi fi let j=j+1 if [[ $i -eq nghg ]] ; then break fi done ENSCALEXPVERGHG="g6cs" if [[ $i -gt 0 ]]; then LGHG=true nghg=$i nghgsfc=0 ghg_sfc="" ghg_sfc_nam="" if [[ $LLCO2 = true && $TASK != ifsmin ]]; then let nghgsfc=nghgsfc+4 ghg_sfc+=/67.210/68.210/69.210/80.210 ghg_sfc_nam+=210067,210068,210069,210080, lco2diu=true # ncextra is initialised in compo_setup if [[ $LGHG_ACCO2 = true ]] ; then ncextra=$((ncextra+1)) gems_ghg="${gems_ghg}YEXT_NL($ncextra)%CNAME='EMIACCO2',!" gems_ghg="${gems_ghg}YEXT_NL($ncextra)%NREQIN=1,!" gems_ghg="${gems_ghg}YEXT_NL($ncextra)%IGRBCODE=212253,!" gems_ghg="${gems_ghg}YEXT_NL($ncextra)%LADV=".FALSE.",!" gems_ghg="${gems_ghg}YEXT_NL($ncextra)%LGP=".TRUE.",!" gems_ghg="${gems_ghg}YEXT_NL($ncextra)%LGPINGP=".TRUE.",!" compo_3D=${compo_3D}/212253 fi else lco2sfc=false lco2diu=false fi if [[ $LLCH4 = true && $TASK != ifsmin ]]; then let nghgsfc=nghgsfc+2 ghg_sfc+=/70.210/82.210 ghg_sfc_nam+=210070,210082, else lch4sfc=false fi if [[ $TASK = inidata_* ]] ; then if [[ $INIGHG = true || $IFSMODE = fc ]] ; then nch4=0 nghg=0 nghgsfc_out=0 lrch4_ml="" lrch4_nam="" gems_ghg="" ghg_nam="" ghg_ml="" ghg_pl="" ghg_sfc_out="" ghg_sfc_out_nam="" ghg_sfc_nam="" ghg_sfc="" fi lco2sfc=false lch4sfc=false elif [[ $TASK = ifsmin ]] ; then lco2sfc=false lch4sfc=false fi # GHG fluxes setup # NCO2CLIMYY1=${NCO2CLIMYY1:=2003} NCO2CLIMYY2=${NCO2CLIMYY2:=2012} NCO2CLIMN1=${NCO2CLIMN1:=90} NCO2CLIMN2=${NCO2CLIMN2:=1350} NCO2CLIMFRQ=${NCO2CLIMFRQ:=180} NAPFCLIMYY1=${NAPFCLIMYY1:=2003} NAPFCLIMYY2=${NAPFCLIMYY2:=2010} # # Biogenic Flux Adjustment System (BFAS) default setup for coldstart # coldstartexpid=${coldstartexpid:=None} coldstartstream=${coldstartstream:=None} coldstartresol=${coldstartresol:=None} coldstartgtype=${coldstartgtype:=None} coldstartretr=${coldstartretr:=None} coldstartdate=${coldstartdate:=None} # gems_co2_flux_setup="NCO2CLIMYY1=$NCO2CLIMYY1,!NCO2CLIMYY2=$NCO2CLIMYY2,!NCO2CLIMN1=$NCO2CLIMN1,!NCO2CLIMN2=$NCO2CLIMN2,!NCO2CLIMFRQ=$NCO2CLIMFRQ," gems_ghg="NGHG=$nghg,!"$gems_ghg gems2namcompo="LCO2SFC=$lco2sfc,!LCH4SFC=$lch4sfc,!LGHG_ACCO2=$LGHG_ACCO2,!"$gems2namcompo # Use CTESSEL LNEE_ONLINE=${LNEE_ONLINE:=true} NEE_INIEXP="" NEE_FILE="" LBFAS_CO2=${LBFAS_CO2:=true} # # Use BFAS if [[ $LLCO2 = true && ${LBFAS_CO2} = true ]]; then nghgbfascoef=2 cgpp=78.228 crec=79.228 cgpp_nam=228078 crec_nam=228079 ghg_bfascoef=/${cgpp}/${crec} ghg_bfascoef_nam=${cgpp_nam},${crec_nam}, if [[ BFAS = @(${GHG_ARCH_TYPES//\//|}) ]]; then ghg_bfascoef_arch=/${cgpp}/${crec} fi fi # Link with RTTOV LGHG_RTTOV=${LGHG_RTTOV:=false} # # Mass fixer option (defined in PrepIFS in "Gridpoint variables and tracer mass fixer setting", only available in fc mode) # ### The lines below will only work if prepIFS parameters defined "Gridpoint variables..." ### are exported to the config.fc.h file. Currently they are only put in ifsnam.fc.h if [[ $IFSMODE != fc ]] ; then gems_ghg=$gems_ghg"LTRCMFP=false,!" gems_ghg=$gems_ghg"LTRCMFBC=true,!" gems_ghg=$gems_ghg"NOPTMFBC=1,!" gems_ghg=$gems_ghg"LTRCMFIX_PS=true,!" gems_ghg=$gems_ghg"NOPTVFE=0,!" gems_ghg=$gems_ghg"NMFDIAGLEV=1,!" gems_ghg=$gems_ghg"LEXTRADF=false,!" fi # NOTE: for fc, LTRCMFBC set in ifsnam by prepIFS # Usage of Jb and standard deviation error for the analysis LERR_EDA_GHG=${LERR_EDA_GHG:=false} LJB_EDA_GHG=${LJB_EDA_GHG:=false} export LERR_EDA_GHG export LJB_EDA_GHG if [[ ${LJB_EDA_GHG} = true ]] ; then EDACLASS_GHG=${EDACLASSGHG:=rd} EDAEXPVER_GHG=${EDAEXPVERGHG:=gbod} fi LCLIMERR_GHG=${LCLIMERR_GHG:=false} CLIMERR_GHG_PATH=${CLIMERR_GHG_PATH:=/ec/fws2/lb/user/dism/data/42r1/an/} if [[ ${LCLIMERR_GHG} = true && ! -d ${CLIMERR_GHG_PATH} ]] ; then echo "Directory ${CLIMERR_GHG_PATH} does not exist" exit 1 fi if [[ ${LERR_EDA_GHG} = true && ${LCLIMERR_GHG} = true ]] ; then echo "You should choose between on-line or climatological error" exit 1 fi # GHG EDA gems_ghg=$gems_ghg"NOPTVFE=${NOPTVFE:=0},!" # Usage of Jb and standard deviation error for the analysis LERR_EDA_GHG=${LERR_EDA_GHG:=false} LJB_EDA_GHG=${LJB_EDA_GHG:=false} export LERR_EDA_GHG export LJB_EDA_GHG if [[ ${LJB_EDA_GHG} = true ]] ; then EDACLASS_GHG=${EDACLASSGHG:=rd} EDAEXPVER_GHG=${EDAEXPVERGHG:=gbod} fi LCLIMERR_GHG=${LCLIMERR_GHG:=false} CLIMERR_GHG_PATH=${CLIMERR_GHG_PATH:=/ec/fws2/lb/user/dism/data/42r1/an/} if [[ ${LCLIMERR_GHG} = true && ! -d ${CLIMERR_GHG_PATH} ]] ; then echo "Directory ${CLIMERR_GHG_PATH} does not exist" exit 1 fi if [[ ${LERR_EDA_GHG} = true && ${LCLIMERR_GHG} = true ]] ; then echo "You should choose between on-line or climatological error" exit 1 fi # GHG EDA ENSCALEXPVERGHG=${ENSCALEXPVERGHG:="none"} if [[ ${ENSCALEXPVERGHG} = "none" && $STREAM = ELDA ]] ; then echo "You should specify ENSCALEXPVERGHG" exit 1 fi GHG_SMOOTH_REDUCTION=100 # reduction factor for the smoother (def: 1.) GHG_SMOOTH_EXPONENT=4 # exponent for the spectral smoother (def: 4) export BFAS_EDA_NOISE=0.5 export CH4_EMISS_PERTURB=true export CH4_EMISS_NOISE=0.5 else LGHG=false nghg=0 nch4=0 nghgsfc_out=0 nghgsfc=0 lco2diu=false gems_co2_flux_setup="" LNEE_ONLINE=false LBFAS_CO2=false fi # naj : no GHG fields in NAMGFL if INIGHG = false (mknam_fp) if [[ $TASK = inidata_* ]] ; then if [[ $INIGHG = false ]] ; then gems_ghg="" LGHG=false fi fi _eof_ghg_setup cat >$TMPDIR/aero_setup <<\_eof_aero_setup #include $EXPVER/include/aero_setup ($EXPVER/ifstraj_999.ecf) # Set up the variables necessary for aerosol. # The name of the ascii table file containing the required information # about the aerosol species to model. XDATA_CAMS=${XDATA_CAMS:-/home/ecgems/data} #copint88 AERO_TABLE_PATH=$XDATA_CAMS/cifs_input/aer/aux AERO_SCHEME=${AERO_SCHEME:-aer} AERO_VER=${AERO_VER:-ver3} table_file_suffix=${AERO_SCHEME:+_${AERO_SCHEME}}${AERO_VER}.csv type_file=${AERO_TABLE_PATH}/types$table_file_suffix bin_file=${AERO_TABLE_PATH}/bins$table_file_suffix wavelength_file=${AERO_TABLE_PATH}/wavelengths$table_file_suffix # Ensure these actually exist, as $(get_tablecol ...) suppresses errors [[ -e $type_file ]] [[ -e $bin_file ]] [[ -e $wavelength_file ]] # defaults LAERO_MACCITY=${LAERO_MACCITY:-true} LSEASALT_RH80=${LSEASALT_RH80:-true} LSEASALT_INI_RH80=${LSEASALT_INI_RH80:-true} LVOLC_ALTI=${LVOLC_ALTI:-false} NDDUST=${NDDUST:-3} LAERDUSTSOURCE=${LAERDUSTSOURCE:-false} LAERSOAEMIS_FLUX=${LAERSOAEMIS_FLUX:-true} NSO4SCHEME=${NSO4SCHEME:-1} LAERRESUSPENSION=${LAERRESUSPENSION:-false} LAERNUCL=${LAERNUCL:-true} LAEROUT=${LAEROUT:-true} LAERAOT=${LAERAOT:-true} LAEREXT=${LAEREXT:-true} LAERLISI_SAT=${LAERLISI_SAT:-true} LAERLISI_GND=${LAERLISI_GND:-true} LAERLISI_UNATT=${LAERLISI_UNATT:-false} # If we're running with aerosol (which we are if this script is called) # then UV processor should default to ON for backward compatibility. # (Otherwise it's off by default.) LUVPROC=${LUVPROC:-true} NAERSCAV=${NAERSCAV:-2} NDRYDEPVEL_DYN=${NDRYDEPVEL_DYN:-1} if [[ $AERO_SCHEME = glomap && -n $AEROVAR ]]; then if [[ $AEROZEROINIT = $AEROVAR ]]; then AEROZEROINIT="$AEROZEROINIT/Number/Precursors/Water" fi AEROVAR="$AEROVAR/Number/Precursors/Water" fi AEROVAR=${AEROVAR//\// } set -A AERO_TYPES ${AEROVAR:-empty} AEROZEROINIT=${AEROZEROINIT//\// } set -A AERO_ZERO_TYPES ${AEROZEROINIT:-empty} set -A AERO_NBINS # check mass fixing and qm options if [[ $LAERO_QM = true && $LAERO_QM3D = true ]] ; then echo ' both true LAERO_QM LAERO_QM3D ' exit 1 fi if [[ $LAERO_MF = false ]] ; then echo ' No Massfixer for aerosol ? ' exit 1 fi # Initialise the variable that will hold the namelist string: # (_out variables are only output, not read in) # (_outfc variables are only output in forecast, not analysis) # (_arch,_archfc variables are archived to mars) gems_aero="" gems_naeaer="" aero_ml="" aero_ml_arch="" aero_ml_init="" aero_ic_arch="" aero_cv="" aero_pl="" aero_pl_arch="" aero_ml_outfc="" aero_ml_archfc="" aero_pl_outfc="" aero_pl_archfc="" aero_sfc="" aero_sfc_out="" aero_sfc_arch="" aero_sfc_outfc="" aero_sfc_archfc="" aero_mlsfc_arch="" naero=0 ntypes=${#AERO_TYPES[*]} grib_to_nam() { while [[ $# > 0 ]]; do echo $(( ${1#*.} *1000 + ${1%.*} )) shift done } grib_to_nam_list() { grib_to_nam ${@//\// } | tr '\n' , } count_list() { set -- ${@//\// } echo $# } # Make this false unless either Nitrates or Ammonium are enabled LAERNITRATE=false LAERSOA=false # Make this false unless either VolcAsh or VolcSulfates are enabled LAERVOL=false # Initialise number of bins to zero unless any are used for type_index in $(get_tablecol $type_file number); do AERO_NBINS[$type_index]=0 done # Note that we must process aerosol bin in $bin_file order for aero_bin in $(get_tablecol $bin_file name); do type_shortname=$(get_tablecol -w name=$aero_bin $bin_file type) aero_type=$(get_tablecol -w name=$type_shortname $type_file long_name) type_index=$(get_tablecol -w name=$type_shortname $type_file number) for aero_type_selected in "${AERO_TYPES[@]}"; do [[ $aero_type == $aero_type_selected ]] || continue # Check if this aerosol type is in the list of ones to be zero-initialized # (and therefore not expected in the initial conditions) aero_zeroinit=false if [[ ( ( $IFSMODE == fc && $BASETIME -le $INIBEGINDATE ) || $FAMILY == @(*make*|*inicond*) ) ]]; then for aero_type_zeroinit in "${AERO_ZERO_TYPES[@]}"; do [[ $aero_type == $aero_type_zeroinit ]] || continue aero_zeroinit=true break done if [[ $aero_zeroinit = true && $TASK = inidata_* ]] ; then break # ignore zero aerosol type during inidata_* fi fi let AERO_NBINS[type_index]+=1 bin_name=$(get_tablecol -w name=$aero_bin $bin_file long_name) bin_grib=$(get_tablecol -w name=$aero_bin $bin_file grib) bin_advect=$(get_tablecol -w name=$aero_bin $bin_file advect) if [[ $LAERCHEM != true || $bin_name != Sulphate_SO2 ]]; then let naero=naero+1 gems_aero=$gems_aero"YAERO_NL($naero)%CNAME='$bin_name',!" gems_aero=$gems_aero"YAERO_NL($naero)%IGRBCODE=$(grib_to_nam $bin_grib),!" if [[ $aero_type = Number ]]; then # IFS-GLOMAP: don't apply mass fixer to number concentration (why?) gems_aero=$gems_aero"YAERO_NL($naero)%LMASSFIX=.false.,!" else gems_aero=$gems_aero"YAERO_NL($naero)%LMASSFIX=.${LAERO_MF}.,!" fi gems_aero=$gems_aero"YAERO_NL($naero)%LQM=.${LAERO_QM}.,!" gems_aero=$gems_aero"YAERO_NL($naero)%LQM3D=.${LAERO_QM3D}.,!" gems_aero=$gems_aero"YAERO_NL($naero)%BETAMFBC=-999,!" gems_aero=$gems_aero"YAERO_NL($naero)%LADV=.$bin_advect.,!" if [[ $aero_zeroinit = true ]]; then gems_aero=$gems_aero"YAERO_NL($naero)%NREQIN=-1,!" else aero_ml_init=$aero_ml_init/$bin_grib fi # All required as ICs, and on lowest level even if not on all aero_ml+=/$bin_grib if [[ ML = @(${AERO_ARCH_TYPES//\//|}) ]]; then aero_ml_arch+=/$bin_grib fi if [[ PL = @(${AERO_ARCH_TYPES//\//|}) ]]; then aero_pl+=/$bin_grib aero_pl_arch+=/$bin_grib fi if [[ SFC = @(${AERO_ARCH_TYPES//\//|}) ]]; then #aero_sfc_out+=/$bin_grib # not until model can output these directly at the surface #aero_sfc_arch+=/$bin_grib aero_mlsfc_arch+=/$bin_grib fi if [[ $AERO_SCHEME != glomap ]]; then if [[ $TASK != ifsmin && ( TC = @(${AERO_ARCH_TYPES//\//|}) || BUDGET = @(${AERO_ARCH_TYPES//\//|}) ) ]]; then # The ordering of diagnostics here must match that in yoe_aerodiag.F90 bin_gribdiags=$(get_tablecol -w name=$aero_bin $bin_file grib{src,ddp,sdm,wdl,wdc,ngt,od,mss}) bin_gribdiags=$(for g in $bin_gribdiags; do echo -n "/$g"; done) gems_naeaer=$gems_naeaer"YAERO_DESC($naero)%IGRIBDIAG=$(grib_to_nam_list $bin_gribdiags)!" # NOTE: this is a *single* percent symbol (minimal match, not maximal) # as far as the shell is concerned. The second one escapes it from SMS/ecFlow. bin_gribdiags_flux=${bin_gribdiags%/*/*} # all except od, mss bin_gribdiags_nonflux=${bin_gribdiags#$bin_gribdiags_flux} # only od, mss # non-flux diags (OD, MSS) included in all outputs, if TC or BUDGET selected aero_sfc_out+=$bin_gribdiags_nonflux aero_sfc_arch+=$bin_gribdiags_nonflux if [[ BUDGET = @(${AERO_ARCH_TYPES//\//|}) ]]; then # flux diags only included in forecast output, if BUDGET selected aero_sfc_outfc+=$bin_gribdiags_flux aero_sfc_archfc+=$bin_gribdiags_flux fi fi gems_naeaer=$gems_naeaer"YAERO_DESC($naero)%RDDEPVSEA=$(get_tablecol -w name=$aero_bin $bin_file ddepvsea),!" gems_naeaer=$gems_naeaer"YAERO_DESC($naero)%RDDEPVLIC=$(get_tablecol -w name=$aero_bin $bin_file ddepvlic),!" gems_naeaer=$gems_naeaer"YAERO_DESC($naero)%RSEDIMV=$(get_tablecol -w name=$aero_bin $bin_file sedimv),!" gems_naeaer=$gems_naeaer"YAERO_DESC($naero)%RSCAVIN=$(get_tablecol -w name=$aero_bin $bin_file scavin),!" gems_naeaer=$gems_naeaer"YAERO_DESC($naero)%RSCAVBCR=$(get_tablecol -w name=$aero_bin $bin_file scavbcr),!" gems_naeaer=$gems_naeaer"YAERO_DESC($naero)%RSCAVBCS=$(get_tablecol -w name=$aero_bin $bin_file scavbcs),!" gems_naeaer=$gems_naeaer"YAERO_DESC($naero)%COPTCLASS='$(get_tablecol -w name=$aero_bin $bin_file optclass)',!" gems_naeaer=$gems_naeaer"YAERO_DESC($naero)%CHYGCLASS='$(get_tablecol -w name=$aero_bin $bin_file hygclass)',!" gems_naeaer=$gems_naeaer"YAERO_DESC($naero)%IAEROCV=$(get_tablecol -w name=$aero_bin $bin_file aerocv),!" fi fi type_gribod550=$(get_tablecol -w long_name=$aero_type $type_file gribod550) if [[ $type_gribod550 != - && $aero_sfc_out != */$type_gribod550* ]]; then aero_sfc_out+=/$type_gribod550 aero_sfc_arch+=/$type_gribod550 fi if [[ $aero_type = @(Nitrates|Ammonium) ]]; then LAERNITRATE=true fi if [[ $aero_type = @(SecOrg) ]]; then LAERSOA=true fi if [[ $aero_type = Volc* ]]; then LAERVOL=true fi # Uncomment once per-type total column masses are implemented #type_gribtc=$(get_tablecol -w long_name=$aero_type $type_file gribtc) #if [[ -n "$type_gribtc" ]]; then # aero_sfc_out+=/$type_gribtc # aero_sfc_arch+=/$type_gribtc #fi break done done aero_ntypaer=${AERO_NBINS[*]} aero_ntypaer=${aero_ntypaer// /,} if [[ $naero > 0 ]]; then LAERO=true nactaero=$naero if [[ $TASK = inidata_* ]] ; then if [[ $INIAERO = false || ( $IFSMODE = fc && $BASETIME -gt $INIBEGINDATE ) ]] ; then naero=0 nactaero=0 aero_ntypaer=${aero_ntypaer//[0-9]/0} fi elif [[ $TASK = @(ifstraj|ifstraj_999|ifstsave|ifsmin|oopsvar|anml|anpl|anil|ansfc) ]] ; then # Total aerosol tracer is only needed during 4D-Var loops let naero=naero+1 gems_aero=$gems_aero"YAERO_NL($naero)%CNAME='Total_aerosol',!YAERO_NL($naero)%IGRBCODE=210048,!YAERO_NL($naero)%LADV5=true,!" gems_aero=$gems_aero"YAERO_NL($naero)%LMASSFIX=.${LAERO_MF}.,!" gems_aero=$gems_aero"YAERO_NL($naero)%LQM=.${LAERO_QM}.,!" gems_aero=$gems_aero"YAERO_NL($naero)%LQM3D=.${LAERO_QM3D}.,!" gems_aero=$gems_aero"YAERO_NL($naero)%BETAMFBC=-999,!" aero_cv=${aero_cv}/48.210 fi gems_aero="NAERO=$naero,!NACTAERO=$nactaero,!"$gems_aero if [[ $TASK = @(inidata_*|ifsmin) ]] ; then gems2namcompo="LAEROSFC=false,!"$gems2namcompo else gems2namcompo="LAEROSFC=true,!"$gems2namcompo fi # this list should be synchronised with gems_get_surface aero_sfc+=/31.210/32.210/33.210/34.210/39.210/40.210/41.210/42.210/43.210 # AERLSnn if [[ $LAERCHEM != true ]] ; then aero_sfc+=/35.210/36.210 aero_sfc+=/6.216 # SUMO dry dep velocity fi if [[ $LAERO_MACCITY = true ]] ; then aero_sfc+=/7.216 fi aero_sfc_out+=/72.210/73.210/74.210 # PMx aero_sfc_arch+=/72.210/73.210/74.210 if [[ $LUVPROC = true ]] ; then aero_sfc_out+=/2.214/3.214 # UV aero_sfc_arch+=/2.214/3.214 fi if [[ $TASK = @(model|ml|pl|fcml|fcpl|anml|anpl) ]] ; then case "$AERO_SCHEME" in aer) if [[ $LAERAOT = true && ML = @(${AERO_OPTICS_TYPES//\//|}) ]]; then # AOT fields - ML only gems_aero=$gems_aero"LAERAOT=true,!" aero_ml_outfc+=/93.215/94.215/95.215 aero_ml_archfc+=/93.215/94.215/95.215 else gems_aero=$gems_aero"LAERAOT=false,!" fi if [[ ( $LAEREXT = true || $LAERLISI_SAT = true || $LAERLISI_GND = true || $LAERLISI_UNATT = true ) && ( ML = @(${AERO_OPTICS_TYPES//\//|}) || PL = @(${AERO_OPTICS_TYPES//\//|}) ) ]]; then # AERLISI fields - can be interpolated to PL etc. gems_aero=$gems_aero"LAERLISI=true,!" if [[ $LAEREXT = true ]]; then # Aerosol extinction coefficients if [[ ML = @(${AERO_OPTICS_TYPES//\//|}) ]]; then aero_ml_outfc+=/180.215/181.215/182.215 aero_ml_archfc+=/180.215/181.215/182.215 fi if [[ PL = @(${AERO_OPTICS_TYPES//\//|}) ]]; then aero_pl_outfc+=/180.215/181.215/182.215 aero_pl_archfc+=/180.215/181.215/182.215 fi fi if [[ $LAERLISI_SAT = true ]]; then # Attenuated backscattter from satellite/TOA if [[ ML = @(${AERO_OPTICS_TYPES//\//|}) ]]; then aero_ml_outfc+=/183.215/184.215/185.215 aero_ml_archfc+=/183.215/184.215/185.215 fi if [[ PL = @(${AERO_OPTICS_TYPES//\//|}) ]]; then aero_pl_outfc+=/183.215/184.215/185.215 aero_pl_archfc+=/183.215/184.215/185.215 fi fi if [[ $LAERLISI_GND = true ]]; then # Attenuated backscattter from ground/surface if [[ ML = @(${AERO_OPTICS_TYPES//\//|}) ]]; then aero_ml_outfc+=/186.215/187.215/188.215 aero_ml_archfc+=/186.215/187.215/188.215 fi if [[ PL = @(${AERO_OPTICS_TYPES//\//|}) ]]; then aero_pl_outfc+=/186.215/187.215/188.215 aero_pl_archfc+=/186.215/187.215/188.215 fi fi if [[ $LAERLISI_UNATT = true ]]; then # Extra diagnostics for unattenuated aerosol and molecular backscattering coefficients if [[ ML = @(${AERO_OPTICS_TYPES//\//|}) ]]; then aero_ml_outfc+=/13.216/14.216/15.216/16.216/17.216/18.216 aero_ml_archfc+=/13.216/14.216/15.216/16.216/17.216/18.216 fi if [[ PL = @(${AERO_OPTICS_TYPES//\//|}) ]]; then aero_pl_outfc+=/13.216/14.216/15.216/16.216/17.216/18.216 aero_pl_archfc+=/13.216/14.216/15.216/16.216/17.216/18.216 fi fi else gems_aero=$gems_aero"LAERLISI=false,!" fi naerout=0 if [[ $LAEROUT = true ]]; then # AEROUT fields - only #16 (absorption coefficient) can be interpolated to PL etc. naerout=$((naerout+1)) gems_aero=$gems_aero"!YAEROUT_NL($naerout)%CNAME='AEROUT-7',!YAEROUT_NL($naerout)%IGRBCODE=210022," aero_ml_outfc+=/22.210 aero_ml_archfc+=/22.210 if [[ $LAEREXT = true && ( ML = @(${AERO_OPTICS_TYPES//\//|}) || PL = @(${AERO_OPTICS_TYPES//\//|}) ) ]]; then naerout=$((naerout+1)) gems_aero=$gems_aero"!YAEROUT_NL($naerout)%CNAME='AEROUT16',!YAEROUT_NL($naerout)%IGRBCODE=210025," if [[ ML = @(${AERO_OPTICS_TYPES//\//|}) ]]; then aero_ml_outfc+=/25.210 aero_ml_archfc+=/25.210 fi if [[ PL = @(${AERO_OPTICS_TYPES//\//|}) ]]; then aero_pl_outfc+=/25.210 aero_pl_archfc+=/25.210 fi fi fi gems_aero=$gems_aero"!NAEROUT=$naerout," ;; glomap) gems_aero=$gems_aero"LAERAOT=false,LAERLISI=false,!" if [[ $LAEROUT = true ]]; then # AEROUT fields for GLOMAP - ML only, 212051-212088 gems_aero=$gems_aero"!NAEROUT=38," for iaerout in {1..38}; do if [[ iaerout -lt 10 ]]; then aerout_cname="AEROUT-$iaerout" else aerout_cname="AEROUT$iaerout" fi aerout_grib="$((50+iaerout)).212" gems_aero=$gems_aero"!YAEROUT_NL($iaerout)%CNAME='$aerout_cname',!YAEROUT_NL($iaerout)%IGRBCODE=$(grib_to_nam $aerout_grib)," aero_ml_outfc+=/$aerout_grib aero_ml_archfc+=/$aerout_grib done else gems_aero=$gems_aero"!NAEROUT=0," fi ;; esac if [[ $LUVPROC = true ]]; then # UV fields - ML only gems_aero=$gems_aero"!NUVP=1,LUVPOUT=.true.," gems_aero=$gems_aero"!YUVP_NL(1)%CNAME='UVP2DRAD',!YUVP_NL(1)%IGRBCODE=210055," aero_ml_outfc+=/55.210 aero_ml_archfc+=/55.210 fi else gems_aero=$gems_aero"LAERAOT=false,!LAERLISI=false,!" fi if [[ $TASK != @(inidata_*|ifsmin) && $AERO_SCHEME != glomap && $NSO4SCHEME -ge 2 ]]; then # AEROCLIM fields - only if required for NSO4SCHEME >= 2, and not in minimisation or interpolation gems_aero=$gems_aero"!NAEROCLIM=3," gems_aero=$gems_aero"!YAEROCLIM_NL(1)%CNAME='OH_CLIM ',!YAEROCLIM_NL(1)%IGRBCODE=216123," gems_aero=$gems_aero"!YAEROCLIM_NL(2)%CNAME='O3_CLIM ',!YAEROCLIM_NL(2)%IGRBCODE=216124," gems_aero=$gems_aero"!YAEROCLIM_NL(3)%CNAME='H2O2CLIM',!YAEROCLIM_NL(3)%IGRBCODE=216125," compo_3D+=/123.216/124.216/125.216 fi # For EDA AERO_SMOOTH_REDUCTION=100 # reduction factor for the smoother (def: 1.) AERO_SMOOTH_EXPONENT=4 # exponent for the spectral smoother (def: 4) # set up mass fixer for an (for fc it is done in prepIFS) if [[ $IFSMODE != fc && $LGHG = false ]] ; then gems_aero=$gems_aero"LTRCMFBC=true,!" gems_aero=$gems_aero"NMFDIAGLEV=1,!" fi # For ifsmin, only AOD at 550nm is required, as defaulted in model code if [[ $TASK != ifsmin && WVL = @(${AERO_OPTICS_TYPES//\//|}) ]] ; then # set up per-wavelength column aerosol optical diagnostics naero_wvl=0 for aero_wvl in $(get_tablecol $wavelength_file wavelength); do aero_wvl_idx=$(get_tablecol -w wavelength=$aero_wvl $wavelength_file number) let naero_wvl=naero_wvl+1 if [[ $TASK == ifsmin ]] ; then # Even if the condition above is removed, ifsmin only needs AOD aero_wvl_gribdiags=aod else # The ordering of diagnostics here must match that in yoe_aerodiag.F90 aero_wvl_gribdiags=$(echo grib{aod,aodabs,aodfm,ssa,assimetry}) fi aero_wvl_gribdiags=$(get_tablecol -w wavelength=$aero_wvl $wavelength_file $aero_wvl_gribdiags) aero_wvl_gribdiags=$(for g in $aero_wvl_gribdiags; do echo -n "/$g"; done) gems_aero=$gems_aero"YAERO_WVL_DIAG_NL($naero_wvl)%IWVL=$aero_wvl,!" gems_aero=$gems_aero"YAERO_WVL_DIAG_NL($naero_wvl)%IGRIBDIAG=$(grib_to_nam_list $aero_wvl_gribdiags)!" aero_sfc_out+=$aero_wvl_gribdiags aero_sfc_arch+=$aero_wvl_gribdiags done gems_aero="${gems_aero/YAERO_WVL_DIAG_NL/NAERO_WVL_DIAG=$naero_wvl,!NAERO_WVL_DIAG_TYPES=5,!YAERO_WVL_DIAG_NL}" else # just aod550 aero_sfc_out+=/207.210 aero_sfc_arch+=/207.210 fi if [[ $LAERNITRATE = true ]] ; then # Need calcite fraction climatology for nitrate scheme aero_sfc+=/43.216/44.216 fi if [[ $LVOLC_ALTI = true ]] ; then aero_sfc+=/45.216 fi if [[ $NDDUST = 2 || $NDDUST = 4 ]] ; then # Need LTS and SCC input for Nabat scheme aero_sfc+=/53.210/54.210 fi if [[ $LAERDUSTSOURCE = true ]] ; then # Need dust source function aero_sfc+=/46.216 fi gems_aero=$gems_aero"LAERCHEM=${LAERCHEM},!" else LAERO=false fi aero_pl=$aero_ml naero_sfc=$(count_list $aero_sfc) naero_sfc_out=$(count_list $aero_sfc_out) naero_sfc_outfc=$(count_list $aero_sfc_outfc) naero_ml_init=$(count_list $aero_ml_init) naero_ml_outfc=$(count_list $aero_ml_outfc) naero_pl_outfc=$(count_list $aero_pl_outfc) naero_cv=$(count_list $aero_cv) aero_nam=$(grib_to_nam_list $aero_ml) aero_sfc_nam=$(grib_to_nam_list $aero_sfc) aero_sfc_out_nam=$(grib_to_nam_list $aero_sfc_out) aero_sfc_outfc_nam=$(grib_to_nam_list $aero_sfc_outfc) aero_ml_init_nam=$(grib_to_nam_list $aero_ml_init) aero_ml_outfc_nam=$(grib_to_nam_list $aero_ml_outfc) aero_pl_outfc_nam=$(grib_to_nam_list $aero_pl_outfc) aero_ens="aerlg" aero_cv_nam=$(grib_to_nam_list $aero_cv) _eof_aero_setup cat >$TMPDIR/chem_setup <<\_eof_chem_setup #include $EXPVER/include/chem_setup ($EXPVER/ifstraj_999.ecf) # Set up the variables necessary for chemistry. # The name of the ascii table file containing the required information # about the chemical species to model. XDATA_CAMS=${XDATA_CAMS:-/home/ecgems/data} linj_chem=${LINJ_CHEM:-false} LAERCHEM=${LAERCHEM:-false} LUSESO2VOLC=${LUSESO2VOLC:-false} # Set true to use full ICs (from GHG and linCO) to re-initialise the different carbon tracers reset_ic_carbtrac=false CHEM_DATA=$XDATA_CAMS/cifs_input/chem CHEM_TABLE_PATH=$CHEM_DATA/aux tablefile=${CHEM_TABLE_PATH}/table_${CHEM_SCHEME}${CHEM_VER}.txt # Ensure this actually exists, as $(get_tablecol ...) suppresses errors [[ -e $tablefile ]] # #x_y_in: retrieve from mars/fdb for IC and other IFS input, / separated #x_y_out: output by IFS to fdb (for namelist) , , separated #x_y_arch: archive to mars , , separated #x_y_assim: assimilation # Initialise the variable that will hold the namelist string. chem_ml_in="" chem_ml_out="" chem_ml_arch="" chem_ml_assim="" chem_ml_assim_arch="" chem_ic_arch="" #chem_pl_in chem_pl_out="" chem_pl_arch="" chem_pl_assim_arch="" chem_sfc_in="" chem_sfc_out="" chem_sfc_arch="" chem_sfc_assim_arch="" chem_mlsfc_arch="" # archived on the lowest level only from forecast chem_list="" chem_assim_nam="" chem_ens="" # use chemistry IC from climatology (netcdf-files input)? reset_ic_chem=false # to be set by prepIFS : experimental flux output LCHEM_DIAF=${LCHEM_DIAF:-false} # set up species for assimilation set -A CHEM_ASSIM_SPECIES if [[ $CHEM_SCHEME = @(linco|carbontracers) ]]; then CHEM_ASSIM_SPECIES+=( CO ) else CHEM_ASSIM_SPECIES+=( NO2 SO2 CO CH2O O3 ) [[ $LUSESO2VOLC = true ]] && CHEM_ASSIM_SPECIES+=( SO2VOLC ) [[ $LCHEM_TL = true ]] && CHEM_ASSIM_SPECIES+=( NO OH ) fi LLGO3=false LLSO2=false LLSO2VOLC=false LLNO2=false LLCO=false LLHCHO=false nchem_assim=${#CHEM_ASSIM_SPECIES[@]} # Construct list for use in @(...|...|...) assim_list="${CHEM_ASSIM_SPECIES[*]}" assim_list="${assim_list// /|}" i=0 for name in "${CHEM_ASSIM_SPECIES[@]}"; do #set switches for fetchobs case "$name" in GO3|O3) LLGO3=true ;; SO2) LLSO2=true ;; NOX|NO2) LLNO2=true ;; CO) LLCO=true ;; SO2VOLC) LLSO2VOLC=true ;; HCHO|CH2O) #J. Barre: # Formaldehyde sat obs have very large errors. The EDA uses the obs error to perturb the obs # This lead unphysical values and obstat wont like it at all # Having formaldehyde in EDA would require to tune the perturbations in sources if [[ ${ENDANENSODB:-0} -eq 0 ]] ; then LLHCHO=true fi ;; esac done #For EDA CHEM_SMOOTH_REDUCTION=100 # reduction factor for the smoother (def: 1.) CHEM_SMOOTH_EXPONENT=4 # exponent for the spectral smoother (def: 4) ###################################################### #chem_sfc_nam="" #chem_sfcout_nam="" #chem_sfc_mars="" #chem_sfc="" #chem_ml_mars="" #chem_ml_init="" #chem_pl_mars="" #chem_tc_mars="" #chem_ens="" #nchemtc=0 #nchempl=0 # check mass fixing and qm options if [[ $LCHEM_QM = true && $LCHEM_QM3D = true ]] ; then echo ' both true LCHEM_QM LCHEM_QM3D ' exit 1 fi if [[ $LCHEM_MF = false ]] ; then echo ' No Massfixer for chemistry ? ' exit 1 fi # list of species for which no MF is applied in any case # Q: should this be moved to a flag in the table file? NO_MF="CLXA NOXA H2O NO NO2 NO3 BRO HBR BR HOBR PSC CO2_C CO2_NBB CO2_NAP CO2_NBI CO2_NOC CO2_NFX CH4_C CH4_NBB CH4_NAP CH4_NWE CH4_NOC CH4_NOA CH4_NFX" # Get details about the species to be modelled from the ascii table # file. set -A all_name $(get_tablecol $tablefile name) set -A all_IC $(get_tablecol $tablefile IC) set -A all_molm $(get_tablecol $tablefile molm) set -A all_grib $(get_tablecol $tablefile grib) set -A all_gribtc $(get_tablecol $tablefile gribtc) set -A all_gribem $(get_tablecol $tablefile gribsfc) set -A all_gribdv $(get_tablecol $tablefile gribdv) set -A all_emis $(get_tablecol $tablefile emis) set -A all_drydep $(get_tablecol $tablefile drydep) set -A all_efold_days $(get_tablecol $tablefile efold_days) set -A all_advec $(get_tablecol $tablefile advec) set -A all_scav $(get_tablecol $tablefile scav) set -A all_henrya $(get_tablecol $tablefile henrya) set -A all_henryb $(get_tablecol $tablefile henryb) nspecies=${#all_name[*]} chem_assim_indices="" # IC is always needed if not the first run if [[ ( $IFSMODE == fc && $BASETIME -gt $INIBEGINDATE ) || ( $IFSMODE != fc && $FAMILY != @(*make*|*inicond*) ) ]]; then i=0 for icval in ${all_IC[*]} { all_IC[$i]=1 i=$((i+1)) } fi # Function to test whether a species is included in a (possibly predefined/named) archiving list # - the lists do not need defining separately for each scheme: if a species isn't in a particular # scheme (or version thereof) then it simply won't get archived anyway function test_chem_arch { # $1=species $2=list if [[ $# != 2 ]]; then echo >&2 "chem_setup: test_chem_arch expects 2 arguments, got $#" exit 1 fi case "$2" in *[\ ,/\|]except[\ ,/\|]except[\ ,/\|]*) echo >&2 "chem_setup: test_chem_arch does not support multiple except clauses" exit 1 ;; *[\ ,/\|]except[\ ,/\|]*) test_chem_arch "$1" "${2%[ ,/|]except[ ,/\|]*}" && ! test_chem_arch "$1" "${2##*[ ,/|]except[ ,/|]}" && return 0 || return 1 ;; none) # no species matches return 1 ;; all) # every species matches return 0 ;; O3+CO) [[ $1 = @(O3|CO) ]] && return 0 || return 1 ;; assimilated) [[ $1 = @($assim_list) ]] && return 0 || return 1 ;; minimal) [[ $1 = @(O3|CO|NO|NO2|CH2O|SO2|NH3|HNO3|SO2VOLC) ]] && return 0 || return 1 ;; operational) [[ $1 = @(O3|CO|NO|NO2|PAN|HNO3|CH2O|SO2|CH4|H2O2|OH|C5H8|C2H6|C3H8|O3S|HO2|NH3|SO2VOLC) ]] && return 0 || return 1 ;; research_3d) [[ $1 = @(O3|CO|NO|NO2|PAN|HNO3|CH2O|SO2|CH4|H2O2|OH|HO2|NH3|N2O|H2O|CLO|HCL|CLONO2|N2O5|CL2O2|BRO|BRONO2|SO2VOLC) ]] && return 0 || return 1 ;; research_sfc) [[ $1 = @(O3|CO|NO|NO2|PAN|HNO3|CH2O|SO2|CH4|H2O2|OH|HO2|NH3|C5H8|C2H6|C3H6|C3H8|ALD2) ]] && return 0 || return 1 ;; *) # explicit list (space/comma/slash/pipe separated) [[ $1 = @(${2//[ ,\/]/|}) ]] && return 0 || return 1 ;; esac echo >&2 "chem_setup: test_chem_arch fell through case statement - should not happen!" exit 1 } # Loop over each species. ispecies=0 jspecies=0 while (( $ispecies < $nspecies )) ; do species=${all_name[$ispecies]} if [[ $TASK = ifsmin ]] ; then if [[ $species != @($assim_list) ]] ; then ispecies=$((ispecies+1)) continue fi fi jspecies=$((jspecies+1)) # Get the grib numbers in format ppp.ttt grib_noml=${all_grib[$ispecies]} grib_notc=${all_gribtc[$ispecies]} grib_noem=${all_gribem[$ispecies]} grib_nodv=${all_gribdv[$ispecies]} # Process the grib numbers from form ppp.ttt to tttppp. grib_ml=$(( ${grib_noml#*.} *1000 + ${grib_noml%.*})) if [[ ${grib_noml#*.} = 128 ]] ; then grib_ml=${grib_noml%.*} fi grib_tc=$(( ${grib_notc#*.} *1000 + ${grib_notc%.*})) if [[ ${grib_notc#*.} = 128 ]] ; then grib_tc=${grib_notc%.*} fi grib_dv=$(( ${grib_nodv#*.} *1000 + ${grib_nodv%.*})) grib_em=$(( ${grib_noem#*.} *1000 + ${grib_noem%.*})) # All species potentially required as ICs # Some also required on lowest level even if not on all chem_ml_out=${chem_ml_out}${grib_ml}, chem_ic_arch+=/$grib_ml if test_chem_arch $species "$CHEM_ARCH_ML"; then chem_ml_arch+=/$grib_ml [[ $species = @($assim_list) ]] && chem_ml_assim_arch+=/$grib_ml fi if test_chem_arch $species "$CHEM_ARCH_PL"; then chem_pl_out+=$grib_ml, chem_pl_arch+=/$grib_ml [[ $species = @($assim_list) ]] && chem_pl_assim_arch+=/$grib_ml fi if test_chem_arch $species "$CHEM_ARCH_SFC"; then # chem_sfc_out+=$grib_ml, # not until model can output these directly at the surface # chem_sfc_arch+=/$grib_ml chem_mlsfc_arch+=/$grib_ml fi if test_chem_arch $species "$CHEM_ARCH_TC"; then chem_sfc_out+=$grib_tc, chem_sfc_arch+=/$grib_tc [[ $species = @($assim_list) ]] && chem_sfc_assim_arch+=/$grib_tc fi # Create the namelist lines for this species chem_list="${chem_list}YCHEM_NL($jspecies)%CNAME='$species',!" if [[ $TASK = @(ifsmin|ifstraj|ifstraj_999|ens_fetch_fields|ens_stats_mem|fetch_jb_fields_mem|eda_err_save|ens_cal|ens_errors|ens_stats_gather|anml|anpl|anil) ]] ; then if [[ $species = @($assim_list) ]] ; then chem_list="${chem_list}YCHEM_NL($jspecies)%LTRAJIO=".TRUE.",!" chem_assim_nam=${chem_assim_nam}${grib_ml}, chem_ml_assim=${chem_ml_assim}/${grib_ml} if [[ $species == CH2O ]] ; then chem_ens="${chem_ens} HCHO" elif [[ $species == O3 ]] ; then chem_ens="${chem_ens} GO3" else chem_ens="${chem_ens} $species" fi fi fi # initial conditions NNREQIN=${all_IC[$ispecies]} if [[ $TASK = ifsmin ]] ; then NNREQIN=-1 if [[ $species = @($assim_list) ]] ; then NNREQIN=1 fi fi if [[ $species == SO4 && $LAERCHEM == true ]] ; then NNREQIN=-1 fi chem_list="${chem_list}YCHEM_NL($jspecies)%NREQIN=${NNREQIN},!" if [[ ${NNREQIN} = 1 ]] ; then chem_ml_in=${chem_ml_in}/${grib_ml} fi chem_list="${chem_list}YCHEM_NL($jspecies)%RMOLMASS=${all_molm[$ispecies]},!" if [[ $CHEM_SCHEME = @('carbontracers'|'decay'|'linco'|'nwpo3'|'RnPb') ]] ; then chem_list="${chem_list}YCHEM_NL($jspecies)%REFOLD=${all_efold_days[$ispecies]},!" fi chem_list="${chem_list}YCHEM_NL($jspecies)%IGRBCODE=${grib_ml},!" chem_list="${chem_list}YCHEM_NL($jspecies)%LNEGFIX=".TRUE.",!" # This needs to be defined even if the variable is not used, because # of assumptions in the IFS source that NCHEM==NCHEM_TC # naj introduce flexible choice of tc calculation in IFS chem_list="${chem_list}YCHEM_NL($jspecies)%IGRIBTC=${grib_tc},!" if [[ ${all_emis[$ispecies]} = 1 ]] ; then if [[ $TASK != ifsmin ]] ; then chem_list="${chem_list}YCHEM_NL($jspecies)%IGRIBSFC=${grib_em},!" # chem_sfc_nam="${chem_sfc_nam},${gribsfc}" chem_sfc_in="${chem_sfc_in}/${grib_em}" fi fi if [[ ${all_drydep[$ispecies]} = true ]] ; then if [[ $TASK != ifsmin ]] ; then chem_list="${chem_list}YCHEM_NL($jspecies)%IGRIBDV=${grib_dv},!" # chem_sfc_nam="${chem_sfc_nam},${gribdv}" [[ $LCHEM_DVOL = true ]] || chem_sfc_in="${chem_sfc_in}/${grib_dv}" fi fi if [[ ${all_scav[$ispecies]} = true ]] ; then chem_list="${chem_list}YCHEM_NL($jspecies)%HENRYA=${all_henrya[$ispecies]},!" chem_list="${chem_list}YCHEM_NL($jspecies)%HENRYB=${all_henryb[$ispecies]},!" fi if [[ $LCHEM_QM = false ]] ; then chem_list="${chem_list}YCHEM_NL($jspecies)%LQM="."${LCHEM_QM}".",!" fi if [[ $LCHEM_QM3D = true ]] ; then chem_list="${chem_list}YCHEM_NL($jspecies)%LQM3D=".TRUE.",!" fi # if [[ $CHEM_SCHEME = "carbontracers" ]]; then # if [[ ${species_massfixer[$ispecies]} = T ]] ; then #CO/CO_NBB/CO_NAP/CO_NFX # chem_list="${chem_list}YCHEM_NL($jspecies)%LMASSFIX=".TRUE.",!" # else # chem_list="${chem_list}YCHEM_NL($jspecies)%LMASSFIX=".FALSE.",!" # fi # elif [[ ${all_advec[$ispecies]} = true && ${species_massfixer[$ispecies]} = T ]] ; then if [[ ${all_advec[$ispecies]} = false ]] ; then chem_list="${chem_list}YCHEM_NL($jspecies)%LADV=".FALSE.",!" chem_list="${chem_list}YCHEM_NL($jspecies)%LMASSFIX=".FALSE.",!" fi if [[ $LCHEM_MF = true && ${all_advec[$ispecies]} = true ]] ; then chem_list="${chem_list}YCHEM_NL($jspecies)%LADV=".TRUE.",!" if [[ $species = @(${NO_MF// /|}) ]] ; then chem_list="${chem_list}YCHEM_NL($jspecies)%LMASSFIX=".FALSE.",!" else chem_list="${chem_list}YCHEM_NL($jspecies)%LMASSFIX=".TRUE.",!" chem_list="${chem_list}YCHEM_NL($jspecies)%"BETAMFBC=-999.9",!" fi else chem_list="${chem_list}YCHEM_NL($jspecies)%LMASSFIX=".FALSE.",!" fi if [[ $species = "PSC" ]] ; then chem_list="${chem_list}YCHEM_NL($jspecies)%"REFVALI=0.0",!" chem_list="${chem_list}YCHEM_NL($jspecies)%"NREQIN=-1",!" fi # output of flux if [[ ${LCHEM_FLXO:-false} = true ]] ; then if [[ ${all_emis[$ispecies]} = 1 || $species = O3 ]] ; then chem_list="${chem_list}YCHEM_NL($jspecies)%IGRBFLXO=${grib_em},!" chem_sfc_out+=$grib_em, chem_sfc_arch+=/$grib_em fi fi if [[ ${all_name[$ispecies]} = @($assim_list) ]] ; then if [[ ${all_name[$ispecies]} = "OH" || ${all_name[$ispecies]} = "NO" ]] ; then chem_list="${chem_list}YCHEM_NL($jspecies)%LASSIM=".FALSE.",!" else chem_list="${chem_list}YCHEM_NL($jspecies)%LASSIM=".TRUE.",!" fi chem_list="${chem_list}YCHEM_NL($jspecies)%LADV5=".TRUE.",!" typeset -Z5 itmp=$jspecies chem_assim_indices="$chem_assim_indices $itmp" else chem_list="${chem_list}YCHEM_NL($jspecies)%LASSIM=".FALSE.",!" fi ispecies=$((ispecies+1)) done if [[ $TASK = ifsmin ]] ; then LCHEM_ACNOX=false LCHEM_LIGHT=false LGHG_ACCO2=false nspecies=$jspecies fi # ncextra is initialised in compo_setup # compo_3D=${compo_3D:-""} if [[ $LCHEM_ACNOX = true ]] ; then grib_no=212255 ncextra=$((ncextra+1)) compo_3D=${compo_3D}/${grib_no} chem_list="${chem_list}YEXT_NL($ncextra)%CNAME='EMIAC',!" chem_list="${chem_list}YEXT_NL($ncextra)%NREQIN=1,!" chem_list="${chem_list}YEXT_NL($ncextra)%IGRBCODE=${grib_no},!" chem_list="${chem_list}YEXT_NL($ncextra)%LADV=".FALSE.",!" chem_list="${chem_list}YEXT_NL($ncextra)%LGP=".TRUE.",!" chem_list="${chem_list}YEXT_NL($ncextra)%LGPINGP=".TRUE.",!" fi if [[ $LCHEM_LIGHT = true ]] ; then grib_no=212254 ncextra=$((ncextra+1)) chem_list="${chem_list}YEXT_NL($ncextra)%CNAME='EMILI',!" chem_list="${chem_list}YEXT_NL($ncextra)%NREQIN=0,!" chem_list="${chem_list}YEXT_NL($ncextra)%IGRBCODE=${grib_no},!" chem_list="${chem_list}YEXT_NL($ncextra)%LADV=".FALSE.",!" chem_list="${chem_list}YEXT_NL($ncextra)%LGP=".TRUE.",!" chem_list="${chem_list}YEXT_NL($ncextra)%LGPINGP=".TRUE.",!" fi if [[ $LCHEM_DIAF = true && $TASK = @(model|ml|fcml) ]] ; then grib_no=250.212 grib_no_nam=$(( ${grib_no#*.} *1000 + ${grib_no%.*})) chem_ml_out=${chem_ml_out}${grib_no_nam}, chem_ml_arch+=/$grib_no ncextra=$((ncextra+1)) chem_list="${chem_list}YEXT_NL($ncextra)%CNAME='DDVEL',!" chem_list="${chem_list}YEXT_NL($ncextra)%NREQIN=0,!" chem_list="${chem_list}YEXT_NL($ncextra)%IGRBCODE=${grib_no_nam},!" chem_list="${chem_list}YEXT_NL($ncextra)%LADV=".FALSE.",!" chem_list="${chem_list}YEXT_NL($ncextra)%LGP=".TRUE.",!" chem_list="${chem_list}YEXT_NL($ncextra)%LGPINGP=".TRUE.",!" grib_no=252.212 grib_no_nam=$(( ${grib_no#*.} *1000 + ${grib_no%.*})) chem_ml_out=${chem_ml_out}${grib_no_nam}, chem_ml_arch+=/$grib_no ncextra=$((ncextra+1)) chem_list="${chem_list}YEXT_NL($ncextra)%CNAME='DDFLXA',!" chem_list="${chem_list}YEXT_NL($ncextra)%NREQIN=0,!" chem_list="${chem_list}YEXT_NL($ncextra)%IGRBCODE=${grib_no_nam},!" chem_list="${chem_list}YEXT_NL($ncextra)%LADV=".FALSE.",!" chem_list="${chem_list}YEXT_NL($ncextra)%LGP=".TRUE.",!" chem_list="${chem_list}YEXT_NL($ncextra)%LGPINGP=".TRUE.",!" grib_no=251.212 grib_no_nam=$(( ${grib_no#*.} *1000 + ${grib_no%.*})) chem_ml_out=${chem_ml_out}${grib_no_nam}, chem_ml_arch+=/$grib_no ncextra=$((ncextra+1)) chem_list="${chem_list}YEXT_NL($ncextra)%CNAME='WDFLXA',!" chem_list="${chem_list}YEXT_NL($ncextra)%NREQIN=0,!" chem_list="${chem_list}YEXT_NL($ncextra)%IGRBCODE=${grib_no_nam},!" chem_list="${chem_list}YEXT_NL($ncextra)%LADV=".FALSE.",!" chem_list="${chem_list}YEXT_NL($ncextra)%LGP=".TRUE.",!" chem_list="${chem_list}YEXT_NL($ncextra)%LGPINGP=".TRUE.",!" fi # Put the number of chemical species into chem_list. nchem=$nspecies chem_list="!NCHEM=$nspecies,!"$chem_list # to calculate mass fixer correction used with LCHEM_DIA if [[ $LCHEM_DIA = true ]] ; then chem_list=$chem_list"NMFDIAGLEV=1,!" fi if [[ $IFSMODE != fc ]] ; then if [[ $LGHG = false && $LAERO = false ]] ; then chem_list=$chem_list"LTRCMFP=true,!" chem_list=$chem_list"NMFDIAGLEV=1,!" fi fi echo $chem_list | perl -pe 's{!$}{} ; s{!}{\n}g' # number of elements in comma separated variable set -A chem_sfc_out_a ${chem_sfc_out//,/ } nchemsfc=${#chem_sfc_out_a[@]} set -A chem_pl_out_a ${chem_pl_out//,/ } nchempl=${#chem_pl_out_a[@]} _eof_chem_setup cat >$TMPDIR/get_tablecol <<\_eof_get_tablecol #include $EXPVER/include/get_tablecol ($EXPVER/ifstraj_999.ecf) #!/bin/ksh # Script to extract one or more named columns of data from a C-IFS # table file, optionally with a condition on the value of another # column. Usage is # # get_table_columns [-w column=value] tablefile column [column2 column3 etc.] # # where each of the column names should correspond exactly to one of # the column titles in the tablefile. The entries for a given column # are returned on a single line of standard output. To restrict the # entries returned to just those for which another column contains a # given value use the -w option in the form -w column=value. Thus to # get the names of the entries for which drydep=true use ... # # get_table_columns -w drydep=true table.txt name # # Author: Luke Jones. set -eu function usage { echo Usage: get_table_column \[-w column=value\] tablefile column >&2 } # Process the options. If a -w condition option has been supplied then # set condition_column to the name of the column we're testing and # condition_value to the name of the requested value. condition_column="" condition_value="" while getopts w: OPT ; do case $OPT in w) condition_column=${OPTARG%=*} condition_value=${OPTARG##*=} if [[ $condition_column = $OPTARG ]] ; then echo ERROR: -w argument must be of form column=value >&2 usage exit 1 fi ;; *) echo ERROR: unrecognised option: $OPT >&2 usage exit 1;; esac done shift $(($OPTIND-1)) # Get the name of the table file. tablefile=${1:-} if [[ -z $tablefile ]] ; then echo ERROR: no table filename supplied >&2 usage exit 1 fi # Get the names of the columns for which to retrieve data. columns2get="" while [[ -n ${2:-} ]] ; do columns2get="$columns2get $2" shift done if [[ -z ${columns2get##+( )} ]] ; then echo ERROR: no column name supplied >&2 usage exit 1 fi # The table should have a single header line. nheaderlines=1 # Calculate the total number of entries in the file. (The perl bit # ensures that a final newline gets fed to wc, even if there isn't one # in the file, otherwise wc reports one line too few). total_entries=$(perl -pe 's{.*(\n)?}{\n}' $tablefile | wc -l) total_entries=$((total_entries-$nheaderlines)) # Get the column names as a space-separated list. read table_cols < $tablefile table_cols=$(echo $table_cols | perl -pe 's{ *, *}{,}g ; s{ }{_}g ; s{,}{ }g') # A function to get the values, or a select subset of the values, for # a single column. function get_1column { # The name of the column to get. typeset column2get=$1 shift # An optional subset of entries numbers, counting from 1. If # supplied, only these entries will be returned. typeset entries2get="${*:-}" # Loop over the columns in the table until we find the index of the # column we want. typeset found=0 typeset icol=0 typeset table_col for table_col in $table_cols { if [[ $table_col = $column2get ]] ; then found=1 break fi icol=$((icol+1)) } if (( ! $found )) ; then echo ERROR: failed to find column $column2get in $tablefile >&2 exit 1 fi # A command to extract all the values for the column, excluding the # header lines. typeset extract="cut -f $((icol+1)) -d , $tablefile \ | sed -n $((nheaderlines+1))',\$p'" # If the column contains blank entries then these will be lost the # way this script is written at the moment. This could lead to # confusion, so check for this now. if (( $(eval $extract | \grep -E '[^ ]' | wc -l) != $total_entries )) ; then echo ERROR: missing entries in column \"$column2get\" in $tablefile >&2 exit 1 fi # Return the values. If we're only returning a subset then use sed # to pick out the right line numbers. if [[ -z $entries2get ]] ; then eval $extract else typeset sed_cmd=$(echo $entries2get | perl -pe 's{(\d+) *}{\1p;}g') eval $extract | sed -n $sed_cmd fi } # If a condition column has been supplied then get the indices of the # entries for which the condition is satisfied. if [[ -n $condition_column ]] ; then ok_entries=$(get_1column $condition_column \ | grep -En "^ *$condition_value *\$" \ | cut -f 1 -d :) # If this is none then use an out-of-range entry number. if [[ -z $ok_entries ]] ; then ok_entries=$((total_entries+1)) fi else ok_entries="" fi # Loop over the required columns and echo the values. icolumn2get=0 for column2get in $columns2get { values=$(get_1column $column2get $ok_entries) echo $values icolumn2get=$((icolumn2get+1)) } _eof_get_tablecol cat >$TMPDIR/chem_ifsnam.pl <<\_eof_chem_ifsnam #include $EXPVER/include/chem_ifsnam.pl ($EXPVER/ifstraj_999.ecf) use warnings; use strict; my $namgfl=0; my $chem_list = $ENV{CHEM_LIST}; my $nchem = $ENV{NCHEM}; #no postprocessing my $nchem_p = $ENV{NCHEM_PL}; my $nchem_phy = $ENV{NCHEMSFC}; my $chem_sfc_nam = $ENV{CHEM_SFC_NAM}; my $chem_nam = $ENV{CHEM_NAM}; my $chem_nam_p = $ENV{CHEM_PL_NAM}; my $var; my $val; for (<>) { if (m/NAMGFL/) { print "\&NAMGFL\n"; $chem_list =~ s/!/\n/g; print $chem_list; $namgfl=1 } elsif (m/NFP3DFS/) { chomp($_); if (m/^(\w+)=(\d+)/) { $var=$1; $val=$2; } print $var."=".($val+$nchem).",\n" } elsif (m/NFP3DFP/) { chomp($_); if (m/^(\w+)=(\d+)/) { $var=$1; $val=$2; } print $var."=".($val+$nchem_p).",\n" } elsif (m/NFPPHY/) { chomp($_); if (m/^(\w+)=(\d+)/) { $var=$1; $val=$2; } print $var."=".($val+$nchem_phy).",\n" } elsif (m/MFP3DFS/) { chomp($_); print $_.${chem_nam}."\n" } elsif (m/MFP3DFP/) { chomp($_); print $_.${chem_nam_p}."\n" } elsif (m/MFPPHY/) { chomp($_); print $_.${chem_sfc_nam}."\n" } else { print $_ } } if ($namgfl eq 0) { print "\&NAMGFL\n"; $chem_list =~ s/!/\n/g; print $chem_list } _eof_chem_ifsnam fi cat >$TMPDIR/create_enkf <<\_eof_create_enkf : #include $EXPVER/include/create_enkf ($EXPVER/ifstraj_999.ecf) #create_enkf version: 20100224 set -euxv #======================================================================= # # Script create_enkf # ------------- # # Purpose : For rerunnability, save CCMA # ------- # # Usage : create_enkf -n nenda # ----- # # Parameters : -n nenda - number of ensembles # #======================================================================= set +v : #include $EXPVER/include/var_include ($EXPVER/include/create_enkf) #======================================================================= # # var_include # ----------- # # Purpose : Define variables to be used in various 4D-Var scripts # ------- # #======================================================================= NORDER_MODERR=${NORDER_MODERR:=0} LWEAK4DVAR=${LWEAK4DVAR:=false} LBGMODERR=${LBGMODERR:=true} LFSOBS=${LFSOBS:=false} LEMISKF=${LEMISKF:=false} ENDANENS=${ENDANENS:=0} LFCDEPAR=${LFCDEPAR:=false} INISTEP_FCDEPAR=${INISTEP_FCDEPAR:=0} INIEXPTYPE=${INIEXPTYPE:=an} NUPTRA_RANGE=${NUPTRA_RANGE:=0} LOBS_SCREEN=${LOBS_SCREEN:=false} #======================================================================= # Model Error #======================================================================= ggme="200133/200203/" # Try to guess what the family is (FSFAMILY does not work here...) family=$FAMILY [[ $ENDANENS -gt 0 ]] && family=$( dirname $FAMILY ) GUESS_FAMILY=$(echo $family | awk -F/ '{print $NF}') if [[ $LWEAK4DVAR = true ]] ; then if [[ $NTYPE_MODERR = @(2|3) ]] ; then NCOMP_MODERR=$(( 1 + 2 * NORDER_MODERR )) ggme="" else NCOMP_MODERR=1 fi NSTEP_MODERR=1 NDIM_MODERR=$(( NCOMP_MODERR * NSTEP_MODERR )) else NSTEP_MODERR=0 NCOMP_MODERR=0 NDIM_MODERR=0 fi #======================================================================= #end-of-include $EXPVER/include/var_include ($EXPVER/include/create_enkf) #======================================================================= # Ensemble data assimilation #======================================================================= USAGE="$0 -n nenda -d dbname" errflg=0 nenda= dbname=CCMA while getopts n:d: option do case $option in n) nenda=$OPTARG;; d) dbname=$OPTARG;; \?) errflg=1;; esac done #======================================================================= # Check parameters #======================================================================= if [[ $errflg -ne 0 ]] ; then echo $USAGE >&2 exit 1 fi if [[ "$nenda" = "" ]] ; then echo $USAGE >&2 echo "-n nenda, number of ensembles must be supplied" exit 2 fi export dbname #======================================================================= # For rerunnability, save CCMA after first trajectory #======================================================================= if [[ $dbname = CCMA ]] ; then export ODB_SRCPATH_CCMA=$WDIR/CCMA export ODB_DATAPATH_CCMA=$WDIR/CCMA export IOASSIGN=IOASSIGN.create_enkf cat $ODB_SRCPATH_CCMA/CCMA.IOASSIGN > $IOASSIGN else export ODB_SRCPATH_ECMA=$WDIR/ECMA export ODB_DATAPATH_ECMA=$WDIR/ECMA export IOASSIGN=IOASSIGN.create_enkf cat $ODB_SRCPATH_ECMA/ECMA.IOASSIGN > $IOASSIGN fi rc=0 export ENKFNENS=$nenda run_parallel ${BINS}/create_enkf.x || rc=$? [[ $rc -eq 0 ]] || exit $rc # Make backup of empty CCMA ensemble tables for rerunnability of individual ENKF members if [[ $dbname = CCMA ]] ; then export BACKUP_CCMA_ENKF=${ODB_DATAPATH_CCMA}/../backup_CCMAobs_enkf if [[ -d $BACKUP_CCMA_ENKF ]];then rm -rf $BACKUP_CCMA_ENKF fi cp -r ${ODB_DATAPATH_CCMA}.obs $BACKUP_CCMA_ENKF fi exit _eof_create_enkf cat >$TMPDIR/longrange_forcing <<\_eof_longrange_forcing : #include $EXPVER/include/longrange_forcing ($EXPVER/ifstraj_999.ecf) # longrange_forcing version: 20101210 #============================================= # # adapt model namelist for using longrange forcing # ------------------------------------------------ # Usage : longrange_forcing [-n] [-d] # ----- # Parameters: # ---------- # # [-n] : model namelist file (input and output) # [-d] : disable diagnostics (input) # # Author: Hans Hersbach # # Modifications # 2017-04-03: Chris Roberts - updated CMIP switches for future # compatibility with CMIP6 #============================================= #set -ex ########################################################## echo "longrange_forcing: SETUP FOR LONGRANGE FORCING" USAGE="longrange_forcing -n modelnamelist [ -d lallowdiag]" modelnamelist="" lallowdiag="yes" while getopts n:d: option do case $option in n) modelnamelist=$OPTARG;; d) lallowdiag=$OPTARG;; esac done if [[ $modelnamelist == "" ]] ; then echo $USAGE >&2 exit fi ########################################################## # Set switches and paths for input data as used below ########################################################## lsolarforcing=false lsolarforcing=true lghgcmip5=false lghgcmip5=true ghgdatadir=/ec/fwsm/lb/project/eras/cmip5_ghg/ leo3var=false leo3var=true co3datadir=/ec/fwsm/lb/project/eras/cmip5_o3/ leso4his=false leso4his=true aerso4dir=/ec/fwsm/lb/project/eras/cmip5_aer lvolcdata=false lvolcdata=true cvolcdata=/ec/fwsm/lb/project/eras/giss_volcanic_strat/volcanic_giss.data lhourlyrad=true # perform diagnostics if selected; Only to be selected for testing. ldiagforcing=true ; [[ $lallowdiag != "yes" ]] && ldiagforcing=false ldiagforcing=false # Contents of the radiation namelist NAERAD rad="" ########################################################## # Store ozone, ghg, and aerosols into 3-d auxiliary fields ########################################################## if [[ $ldiagforcing == true ]] ; then rad="${rad}LDIAGFORCING=true," # Reserve auxiliary radiation fields. # Please check that this choice does not interact with other auxiliary fields nvextr=15 extras="82,83,84,85,86,87,88,89,90,91,92,93,94,95,96" update_namelist -i $modelnamelist -n NAMDPHY -a "NVEXTRRAD=$nvextr," update_namelist -i $modelnamelist -n NAMPHYDS -a "NVEXRADGB=$extras," # Write these to FDB on model levels; merge extra levels with existing list update_namelist -i $modelnamelist -n NAMFPC -m "NFP3DFS+=$nvextr," update_namelist -i $modelnamelist -n NAMFPC -m "MFP3DFS=$extras," fi ########################################################## # Adapt namelist for Solar Forcing ########################################################## if [[ $lsolarforcing == true ]] ; then rad="${rad}NHINCSOL=3," fi ########################################################## # Adapt namelist for Greenhouse Gases ########################################################## if [[ $lghgcmip5 == true ]] ; then rad="${rad}NGHGCMIP=5,GHGDATADIR='$ghgdatadir'," fi ########################################################## # Adapt namelist for Ozone ########################################################## if [[ $leo3var == true ]] ; then rad="${rad}NO3CMIP=5,CO3DATADIR='$co3datadir',NGHGRAD=20," fi ########################################################## # Adapt namelist for Sulfate Tropospheric Aerosols ########################################################## if [[ $leso4his == true ]] ; then aertype=aero_1.9x2.5_L26_ [[ -f flistso4his ]] && rm flistso4his for scenario in HIST RCP45 ; do fbase=$aerso4dir/$scenario/$aertype flist=$(ls ${fbase}*so4_burden) for burdenfile in $flist ; do decade=$(echo $burdenfile | awk -F_L26_ '{print $2}'| awk -F- '{print $1}') if [[ $decade == 2000 && $scenario != HIST ]] ; then echo skip $burdenfile else echo $decade $burdenfile >> flistso4his fi done done rad="${rad}LESO4HIS=true,CLISTSO4='flistso4his'," fi ########################################################## # Adapt namelist for Volcanic Stratospheric Aerosols ########################################################## if [[ $lvolcdata == true ]] ; then rad="${rad}LHVOLCA=true,LVOLCDATA=true,CVOLCDATA='$cvolcdata'," fi ########################################################## # Adapt namelist to call radiation every hour # (as done in ERA-40, ERA-Interim, ERA-20CM, ERA-20C) ########################################################## if [[ $lhourlyrad == true ]] ; then rad="${rad}NRADFR=-1," fi ########################################################## # Adapt radiation namelist ########################################################## if [[ "${rad}" != "" ]] ; then update_namelist -i $modelnamelist -n NAERAD -a "$rad" fi _eof_longrange_forcing cat >$TMPDIR/update_namelist <<\_eof_update_namelist : #include $EXPVER/include/update_namelist ($EXPVER/ifstraj_999.ecf) # update_namelist version: 20110329 #============================================= # # append variables to a namelist # -------------- # Usage : update_namelist [-i] [-o] [-n] [-a] [-m] # ----- # Parameters: # ---------- # # [-i] : input namelist file # [-o] : output namelist file (optional) # [-n] : namelist in which update is to be made # [-a] : text to be added (optional) # [-m] : merge (optional) # # Author: Hans Hersbach # # Merge only works for numerical lists, format: # namevar= , --> append to existing list # namevar+=, --> add numerical to existing one and replace # #============================================= #set -ex function upcase { echo $1 | tr "[:lower:]" "[:upper:]" ;} USAGE="$0 -i namelist_file [ -o namelist_updated_file -n namelist -a string -m merge ]" namelist_in="" namelist_out="" namelist="" append="" merge="" while getopts i:o:n:a:m: option do case $option in i) namelist_in=$OPTARG;; o) namelist_out=$OPTARG;; n) namelist=$(upcase $OPTARG);; a) append=$OPTARG;; m) merge=$OPTARG;; esac done if [[ $namelist_in == "" ]] ; then echo $USAGE >&2 exit fi # in case no output file is specified overwrite to input file [[ $namelist_out == "" ]] && namelist_out=$namelist_in ntmp=${namelist_in}.tmp cp $namelist_in $ntmp # first merge if [[ $merge != "" ]] ; then tlist=$(echo $merge | sed "s/=/ /") mvap=$(echo $merge | awk -F= '{print $1}') mvar=$(echo $mvap | awk -F+ '{print $1}') mval=$(echo $merge | awk -F= '{print $2}') # take values from latest occurence in namelist mold=$(grep -i $mvar $ntmp | sed "s/ //" | tail -1) if [[ $mold != "" ]] ; then if [[ $mvap == $mvar ]] ; then mnew=$mold$mval else oldval=$(echo $mold | awk -F= '{print $2}' | awk -F, '{print $1}') oldvar=$(echo $mold | awk -F= '{print $1}') incval=$(echo $mval | awk -F, '{print $1}') newval=$((oldval + incval)) mnew=${oldvar}"="${newval}"," fi cat $ntmp | sed "s/$mold/$mnew/" > $namelist_out else cp $ntmp $namelist_out append=$append${mvar}"="$mval fi else cp $ntmp $namelist_out fi # then append if [[ $append != "" ]] ; then cp $namelist_out $ntmp echo "& END" >> $ntmp # find namelists and line numbers: all start with "&" # remove ":" from line number; put everything in one list nlist=$(grep -n \& $ntmp | sed "s/\&//" | sed "s/:/ /") [[ -f $namelist_out ]] && rm $namelist_out i=1 n2="" nam2="" found="no" for item in $nlist ; do if [[ i -eq 1 ]] ; then n1=$n2 n2=$item else nam1=$nam2 nam2=$(upcase $item) if [[ $nam1 != "" ]] ; then cat $ntmp | head -$((n2-2)) | tail -$((n2-n1-1)) >> $namelist_out if [[ $append != "" ]] && [[ $nam1 == $namelist ]] ; then echo " "$append >> $namelist_out found="yes" fi cat $ntmp | head -$((n2-1)) | tail -1 >> $namelist_out fi fi let i=-i done # In case the namelist does not exist, create it if [[ $found == "no" ]] ; then echo " &$namelist" >> $namelist_out echo " $append " >> $namelist_out echo " / " >> $namelist_out fi fi # clean up [[ -f $ntmp ]] && rm $ntmp _eof_update_namelist cat >$TMPDIR/check_norms <<\_eof_check_norms : #include $EXPVER/include/check_norms ($EXPVER/ifstraj_999.ecf) # check_norms - Checks if norms are bit-identical with the control set -exu # Exit with success if norm-checking is not required. if [[ ${BIT_IDENTICAL:=false} != true || ${COMPARE_TO_CONTROL:=zzzz} = zzzz ]]; then exit 0 fi if [[ ${_FAMILY_} =~ jb_calc ]]; then # ifsmin in jb_calc is not a real minimization and has no spnorms, so checking norms is meaningless there. # second cycle of CI test will pick up any potential norm changes that may have happened due jb_calc exit 0 fi # Check if we know how to compare norms for the current task (if not we # shouldn't have called check_norms) task=${_TASK_} if [[ $task != @(ifstraj|ifsmin|ifstraj_999|ifstrajbg|oopsvar|J1|J1back|model|modeleps_nemo|cpmodel_nemo*|sv|outer|ninner|ninner_ice) ]]; then echo "ERROR: Norms checking not implemented for this task" exit 1 fi if [[ "$task" == "J1back" ]]; then # The J1back task is actually a J1 task with an overridden task name. # ecFlow will treat the task as if it is any other J1 task, and the log file # will be archived as J1. so from this point we just use J1 as the task # name and everything will work fine. task="J1" fi # Some common variables: experiment_type=$( echo ${_FAMILY_} | cut -d/ -f2 ) family_prefix="$( echo ${_FAMILY_} | cut -d/ -f 5- )" if [[ -z "$family_prefix" ]]; then family_prefix="." fi date=${_YMD_} if [[ ${ISREFC:-false} == true ]]; then # Reforecast configurations of the eps_nemo experiment type encode the # reforecast year as part of the log archive name instead of containing a # directory named the same as the year family. We can add the reforecast # year to the date (used to construct log archive names) so that the correct # archives can be retrieved, and we must also strip the first family from # the $family_prefix variable since it will be the reforecast year. date="${date}.$( printf '%+2.2i' ${_DELTA_YEAR_} | tr '+-' 'pm' )" family_prefix="$( echo $family_prefix | cut -d/ -f 2- )" fi # Some experiment types store their .tar.gz log archive within another tar, # which must be extracted first. case "$experiment_type" in an|fsobs) log_container="" ;; eps_nemo|fc|longrange|opa) log_container="list.${date}.tar" ;; *) echo "ERROR: Norms checking not implemented for this experiment type" exit 1 esac # Different tasks store output in different log archives. case "$task" in cpmodel_nemo*) # These tasks can appear in the main family of a longrange experiment, or # in the extend_main family if the annual extension component is active. if [[ ${_FAMILY_} =~ "extend_main" ]]; then log_tarfile_name="extend_main.${date}.tar.gz" else log_tarfile_name="main.${date}.tar.gz" fi ;; outer|ninner|ninner_ice) log_tarfile_name="main.${date}.tar.gz" ;; model) # Multiple experiment types use the 'model' task in different contexts if [[ "$experiment_type" = "fc" ]]; then log_tarfile_name="fcgroup.${date}.tar.gz" elif [[ ${_FAMILY_} =~ inifam_1 ]]; then # Initial forecast of an analysis experiment log_tarfile_name="make.${date}.tar.gz" else # Long or short forecast of an analysis experiment or an initial # forecast in an fsobs experiment stream_hour=$(echo ${_FAMILY_} | cut -d/ -f4) log_tarfile_name="${date}.${stream_hour}.tar.gz" fi ;; modeleps_nemo) log_tarfile_name="ensemble.${date}.tar.gz" ;; sv) if [[ "$experiment_type" = "longrange" ]]; then log_tarfile_name="prep.${date}.tar.gz" else log_tarfile_name="sv.${date}.tar.gz" fi ;; *) # Assume the task is part of an analysis type experiment if nothing else # is matched stream_hour=$(echo ${_FAMILY_} | cut -d/ -f4) log_tarfile_name="${date}.${stream_hour}.tar.gz" ;; esac log_tarfile_basename="$( basename "$log_tarfile_name" .tar.gz )" # Set up a local directory to store control logs in: control_dir="$BASE/log_control/${experiment_type}" mkdir -p "${control_dir}" # Retrieve the logs for the desired family from ECFS log_path_ecfs="ec:/RDX/prepIFS/${COMPARE_TO_CONTROL}/log/${experiment_type}" if [[ -n "$log_container" ]]; then # The log tarfiles for the control experiment are contained inside a # parent tar archive, retrieve the one we want. # # In an ensemble there might be multiple instances of this script running # at the same time trying to retrieve the same file. We use a file lock to # ensure only a single instance will be extracting a given file from ECFS # at a time. We are using the -u option to ECFS so no work will be done if # the file has already bee retrieved and is up-to-date. container_lock="${control_dir}/${log_container}.lock" ( flock 9 ecp -u "${log_path_ecfs}/${log_container}" "${control_dir}/" ) 9>"${container_lock}" # Use a file lock to ensure only one instance of this script can be # attempting to process a given log archive at a time. archive_lock="${control_dir}/${log_tarfile_name}.lock" ( flock 9 if [[ ! -f "${control_dir}/${log_tarfile_name}" ]]; then # Extract the log file if it has not yet been extracted (because of # the lock we know no other instance is currently performing the same # operation) tar -C "${control_dir}" -xf "${control_dir}/${log_container}" "${log_tarfile_name}" fi ) 9>"${archive_lock}" else # The specified tar file is flat, just retrieve it. # # We should lock this operation for safety in case multiple tasks are running # this script at the same time (e.g. in an EDA). archive_lock="${control_dir}/${log_tarfile_name}.lock" ( flock 9 ecp -u "${log_path_ecfs}/${log_tarfile_name}" "${control_dir}/" ) 9>"${archive_lock}" fi # Determine which file the output we need to inspect is contained in case $task in outer) inspect_file="solver.stat" ;; ninner|ninner_ice) inspect_file="nemovar.output" ;; *) inspect_file="NODE.001_01" ;; esac # Extract the file to inspect from the control experiment. It will be named # ${inspect_file}.${task}., and there may be multilple try numbers. # We want the one with the latest time stamp since that should correspond to # the successful run. This file is unique per task so we no longer have to # worry about concurrency issues/locking. archived_output_file=$( tar -tvf "${control_dir}/${log_tarfile_name}" \ | grep -E "${family_prefix}/${inspect_file}.${task}.[0-9]+$" \ | awk '{ print $4,$5,$6 }' \ | sort -n \ | tail -n 1 \ | awk '{ print $3 }' ) if [[ -z $archived_output_file ]]; then echo "ERROR: Expecting a file ${inspect_file}.${task}.* in the control's log archive but none were found" exit 1 fi mkdir -p "${control_dir}/${log_tarfile_basename}" tar -C "${control_dir}/${log_tarfile_basename}" -xf "${control_dir}/${log_tarfile_name}" "${archived_output_file}" control_output_file="${control_dir}/${log_tarfile_basename}/${archived_output_file}" # And finally, compare control's and current task's norms rc=0 rc1=0 case $task in ifstraj|ifstrajbg|ifsmin) output_file=$WDIR/vardir/$inspect_file # Cost function differences are not immediatley treated as an error, but # are reported. Only spectral norms differences cause an error exit. diff -b <( grep -a '^[[:space:]]*GREPCOST_hex' $control_output_file ) \ <( grep -a '^[[:space:]]*GREPCOST_hex' $output_file ) \ || rc1=$? diff -b <( grep -a '^[[:space:]]*SPECTRAL NORMS' $control_output_file ) \ <( grep -a '^[[:space:]]*SPECTRAL NORMS' $output_file ) \ || rc=$? ;; oopsvar) output_file=$WDIR/vardir/$inspect_file # Spectral norms are not checked in OOPS configurations, we just use the cost # function since the minimisations and trajectories are run under one task. # It should be possible to check for spectral norms too if desired. diff -b <( grep -a '^(I)[[:space:]]*Quadratic cost function: J ' $control_output_file ) \ <( grep -a '^(I)[[:space:]]*Quadratic cost function: J ' $output_file ) \ || rc=$? ;; ifstraj_999) output_file=$WDIR/vardir_999/$inspect_file diff -b <( grep -a '^[[:space:]]*SPECTRAL NORMS' $control_output_file ) \ <( grep -a '^[[:space:]]*SPECTRAL NORMS' $output_file ) \ || rc=$? ;; J1) output_file=$TMPDIR/$inspect_file diff -b <( grep -a '^[[:space:]]*SPECTRAL NORMS' $control_output_file ) \ <( grep -a '^[[:space:]]*SPECTRAL NORMS' $output_file ) \ || rc=$? ;; model|modeleps_nemo|cpmodel_nemo*|sv) output_file=$TMPDIR/$inspect_file diff -b <( grep -a '^[[:space:]]*SPECTRAL NORMS' $control_output_file ) \ <( grep -a '^[[:space:]]*SPECTRAL NORMS' $output_file ) \ || rc=$? ;; outer) output_file=$TMPDIR/$inspect_file diff -b $control_output_file $output_file || rc=$? ;; ninner|ninner_ice) output_file=$TMPDIR/$inspect_file diff -b <( grep -a '^[[:space:]]*Total J' $control_output_file ) \ <( grep -a '^[[:space:]]*Total J' $output_file ) \ || rc1=$? ;; esac # Were there any differences? if [[ $rc1 != 0 ]]; then echo "WARNING: This task MAY NOT BE BIT-IDENTICAL with the control (see the diff above)" fi if [[ $rc != 0 ]]; then echo "ERROR: This task is NOT BIT-IDENTICAL with the control (see the diff above)" exit 1 fi _eof_check_norms cat >$TMPDIR/traj_tstep <<\_eof_traj_tstep #include $EXPVER/include/traj_tstep ($EXPVER/ifstraj_999.ecf) :traj_tstep #======================================================================= # # Script traj_tstep # ------------------------------- # # Purpose : Generic script that defines h etime step to use in trajectories of sekf and ifstraj # # Usage : traj_tstep # ----- # Parameters : -n TSTEP_INC_uptraj - # -m LNMPHYS # -b LCOMPBGDEP # -t TSTEP # -u uptraj - trajectory update number # -x MXUP_TRAJ # # Origin: avoid duplication of tstep definition in sekf, ifstraj and other tasks running trajectories #======================================================================================================= USAGE="$0 -n $TSTEP_INC_uptraj -m $LNMPHYS -b LCOMPBGDEP -t $TSTEP -u $uptraj -x $MXUP_TRAJ" #./traj_tstep -n $TSTEP_INC_uptraj -m $LNMPHYS -b LCOMPBGDEP -t $TSTEP -u $uptraj -x $MXUP_TRAJ # ./traj_tstep -n 3600 -m true -t 900 -u 0 -x 3 # LCOMPBGDEP=true for diagnostic background trajectory to # calculate o-b ECMA when first guess differs from background LCOMPBGDEP=false while getopts n:m:b:t:u:v:x: option do case $option in n) TSTEP_INC_uptraj=$OPTARG;; m) LNMPHYS=$OPTARG;; b) LCOMPBGDEP=$OPTARG;; t) TSTEP=$OPTARG;; u) uptraj=$OPTARG;; x) MXUP_TRAJ=$OPTARG;; esac done echo 'PAT TEST UPTRAJ' echo $uptraj echo 'LNMPHYS' $LNMPHYS echo 'LCOMPBGDEP' $LCOMPBGDEP echo 'TSTEP char' $TSTEP echo 'MXUP_TRAJ' $MXUP_TRAJ echo 'TSTEP_INC_uptraj' $TSTEP_INC_uptraj tstep=$TSTEP if [[ $LNMPHYS = true && $LCOMPBGDEP = false ]]; then tstep_new=$tstep if [[ $uptraj -lt $MXUP_TRAJ ]] ; then eval tstep_tmp='$'TSTEP_INC_uptraj eval TSTEP='$'TSTEP echo 'tstep_tmp='$tstep_tmp,$TSTEP if [[ $(( tstep_tmp % TSTEP )) -ne 0 ]]; then tstep_new=$(( tstep_tmp / ( 1 + tstep_tmp / TSTEP ) )) fi fi if [[ $tstep_new -lt $tstep ]]; then tstep=$tstep_new fi fi echo 'result' $tstep echo "tstep=$tstep" > tstep_tmp echo "printf \"tstep=${tstep}\n\"" >> tstep_tmp exit 0 ~ _eof_traj_tstep } JCAT1 & JCAT2 & JCAT3 & JCAT4 & wait chmod u+x $TMPDIR/* export PATH=$TMPDIR:$PATH set -a PERIOD_4D=${_PERIOD_4D_} WINDOW_LENGTH_4D=${_WINDOW_LENGTH_4D_} WINDOW_OFFSET_4D=${_WINDOW_OFFSET_4D_} MXUP_TRAJ=${_MXUP_TRAJ_} NUPTRA_RANGE=${_nuptra_range_} L_CALCULATE_JBW_STATS=${_L_CALCULATE_JBW_STATS_} OOPSRUN=${_OOPSRUN_} LSSA_ONLY=${_LSSA_ONLY_} mode=${_mode_} COMBTASK=${_COMBTASK_} ECF_OUT=${_ECF_OUT_} LUSE_REDUCED_OBS=${_LUSE_REDUCED_OBS_} LCONTINUOUS_DA=${_LCONTINUOUS_DA_} set +a if [[ ${LOUTLOOP:-false} = true && ${_mode_} != min && ${_TASK_} != ifstraj_999 ]] ; then #PL : #include $EXPVER/include/cycle_times ($EXPVER/ifstraj_999.ecf) #======================================================================= # # cycle_times # ----------- # # Purpose : Define variables control the date and times for # ------- cycling of the assimilation window. # #======================================================================= IFSMODE=${IFSMODE:=none} PERIOD_4D=${PERIOD_4D:=-999999} WINDOW_LENGTH_4D=${WINDOW_LENGTH_4D:=-999999} WINDOW_OFFSET_4D=${WINDOW_OFFSET_4D:=-999999} REINIWINDOW_LENGTH_4D=${REINIWINDOW_LENGTH_4D:=-999999} NUMINI=${_NUMINI_} PERIOD_BG=${PERIOD_BG:=-999999} echo "NUMINI=$NUMINI" # The variables below are derived from WINDOW_LENGTH_4D and WINDOW_OFFSET_4D # later in this file if WINDOW_LENGTH_4D is specified WINDOW_START=-999999 WINDOW_END=-999999 BKG_TIME=-999999 NXBGTIME=-999999 FIRST_AN=-999999 LAST_AN=-999999 STEP_AN=-999999 NO6HTSL=-999999 #======================================================================= # Determine appropriate value for PERIOD_AN and PERIOD_OBS #======================================================================= PERIOD_AN_ATM=${PERIOD_AN_ATM:=6} PERIOD_AN_SFC=${PERIOD_AN_SFC:=6} LPERIOD_AN_SFC=${LPERIOD_AN_SFC:=false} # Set PERIOD_AN, using $LPERIOD_AN_SFC to select between # surface-related tasks and the atmospheric 4d-var if [[ $LPERIOD_AN_SFC = true ]] ; then PERIOD_AN=${PERIOD_AN_SFC} else PERIOD_AN=${PERIOD_AN_ATM} fi # Allow to override this via ecFlow variable - this enables it to be # optionally relaxed from 6 to 12 in the archiving family for CAMS # experiments if you don't need to archive the 06Z and 18Z analyses # (which aren't used to initialise forecasts in a 03-15 window). PERIOD_AN=${_PERIOD_AN_} echo "PERIOD_AN=$PERIOD_AN" PERIOD_OBS=6 #======================================================================= # Some basic prints #======================================================================= echo "BASETIME=$BASETIME" echo "PERIOD_4D=$PERIOD_4D" echo "WINDOW_LENGTH_4D=$WINDOW_LENGTH_4D" echo "WINDOW_OFFSET_4D=$WINDOW_OFFSET_4D" if [[ $WINDOW_LENGTH_4D -gt 0 ]] ; then WINDOW_CUTOFF_4D=$(( WINDOW_LENGTH_4D - WINDOW_OFFSET_4D )) else WINDOW_CUTOFF_4D=-999999 fi echo "WINDOW_CUTOFF_4D=$WINDOW_CUTOFF_4D" echo "PERIOD_BG=$PERIOD_BG" #======================================================================= # Checks #======================================================================= if [[ $WINDOW_OFFSET_4D -gt $WINDOW_LENGTH_4D ]] ; then echo "Window offset is longer than assimilation window" exit 1 fi if [[ $PERIOD_BG -lt $PERIOD_4D ]]; then case $IFSMODE in 4d_inc|3d_fgat|early_delivery) echo "Background cannot be more recent than previous cycle" exit 1 ;; esac fi #======================================================================= # Determine correct BASETIME #======================================================================= INIBEGINDATE=${_INIBEGINDATE_} _inihour=${_INIBEGINHOUR_} INIBEGINHOUR=$(printf %02d $_inihour) if [[ $FAMILY = */make/* || $FAMILY = */inicond/* ]] ; then if [[ $FAMILY = */make/* ]] ; then CYCLETIME=$(echo ${INIBEGINDATE}${INIBEGINHOUR} | cut -c1-10) fi back=$(( (NUMINI+1) * PERIOD_4D )) CYCLETIME=$( newdate $CYCLETIME -$back ) fi echo "CYCLETIME=$CYCLETIME" #======================================================================= # Split outer loop #======================================================================= NSPLIT4DWIN=${NSPLIT4DWIN:=0} NSUBWIN4D=0 SUBWIN_OFFSET=0 LSPLIT4D_SPINUP=false if [[ $NSPLIT4DWIN -gt 0 ]] ; then subtime=$CYCLETIME isubwin=1 while [[ $isubwin -le $NSPLIT4DWIN ]] ; do if [[ $subtime -ge $INITIME ]] ; then NSUBWIN4D=$isubwin fi isubwin=$((isubwin + 1)) subtime=$(newdate $subtime -$WINDOW_LENGTH_4D) done [[ $NSUBWIN4D -lt $NSPLIT4DWIN ]] && LSPLIT4D_SPINUP=true [[ $NSUBWIN4D -gt 1 ]] && SUBWIN_OFFSET=$(( WINDOW_LENGTH_4D * (NSUBWIN4D-1) )) fi echo "NSPLIT4DWIN=$NSPLIT4DWIN" echo "NSUBWIN4D=$NSUBWIN4D" echo "SUBWIN_OFFSET=$SUBWIN_OFFSET" #======================================================================= # Beginning and end of the current window #======================================================================= if [[ $WINDOW_LENGTH_4D -gt 0 ]] ; then WINDOW_START=$( newdate $CYCLETIME -$WINDOW_OFFSET_4D ) WINDOW_END=$( newdate $CYCLETIME $WINDOW_CUTOFF_4D ) echo "WINDOW_START=$WINDOW_START" echo "WINDOW_END=$WINDOW_END" #======================================================================= # Background #======================================================================= BKG_STEP=${STEP_BG:=3} if [[ $REINITIALIZE = true && $REINI_NOT_ED = true ]] ; then BKG_STEP=$(( BKG_STEP + REINIOFFSET - PERIOD_AN )) fi echo "BKG_STEP=$BKG_STEP" BKG_TIME=$( newdate $WINDOW_START -$BKG_STEP ) echo "BKG_TIME=$BKG_TIME" if [[ $REINITIALIZE = true || $LEDFAMILY = true ]] ; then WINDOW_LENGTH_BG=$REINIWINDOW_LENGTH_4D else WINDOW_LENGTH_BG=$WINDOW_LENGTH_4D fi echo "WINDOW_LENGTH_BG=$WINDOW_LENGTH_BG" BKG_OFFSET=$(( WINDOW_LENGTH_BG - PERIOD_BG + BKG_STEP )) echo "BKG_OFFSET=$BKG_OFFSET" # Time for next background (ie start of cycling fc) NXBGTIME=$( newdate $WINDOW_END -$BKG_OFFSET ) # EH: Below is for ED 8h window - need to correct in a general way if [[ $LEDFAMILY = true ]] ; then NXBGTIME=$CYCLETIME fi echo "NXBGTIME=$NXBGTIME" #======================================================================= # Find analysis (synoptic) times #======================================================================= hh="$(substring $WINDOW_START 9 10)" # sh step=$(( 10#$hh % PERIOD_AN )) [[ $step -gt 0 ]] && step=$(( PERIOD_AN - step )) FIRST_AN=$( newdate $WINDOW_START $step ) if [[ $CERA_OUT = true && $FIRST_AN = $WINDOW_START ]] ; then # Until overlapping windows are fully implemented, cannot archive analysis at start of window FIRST_AN=$( newdate $WINDOW_START +$PERIOD_AN) fi hh="$(substring $WINDOW_END 9 10)" step=$(( 10#$hh % PERIOD_AN )) LAST_AN=$( newdate $WINDOW_END -$step) if [[ $FAMILY = */make/* || $FAMILY = */inicond/* ]] ; then FIRST_AN=$NXBGTIME LAST_AN=$NXBGTIME fi STEP_AN=$( datediff -h $FIRST_AN $WINDOW_START ) echo "FIRST_AN=$FIRST_AN" echo "LAST_AN=$LAST_AN" echo "STEP_AN=$STEP_AN" hh_start=$( substring $WINDOW_START 9 10 ) echo "hh_start=$hh_start" case $hh_start in 03|09|15|21) NO6HTSL=$(( WINDOW_LENGTH_4D / PERIOD_OBS )) ;; *) NO6HTSL=$(( WINDOW_LENGTH_4D / PERIOD_OBS + 1 )) esac echo "NO6HTSL=$NO6HTSL" ## Wave model assimilation ## Enforce 6 hourly wave assimilation wam_assimil_period=${WAM_ASSIMIL_PERIOD:=6} if [[ $wam_assimil_period -lt 6 ]] ; then if [[ $FAMILY = */make/* || $FAMILY = */inicond/* ]] ; then anstart=$NXBGTIME else anstart=$WINDOW_START fi FIRST_AN_WAVE=$( newdate $anstart $wam_assimil_period ) PERIOD_AN_WAVE=$wam_assimil_period LAST_AN_WAVE=$WINDOW_END else FIRST_AN_WAVE=$FIRST_AN PERIOD_AN_WAVE=$PERIOD_AN LAST_AN_WAVE=$LAST_AN fi fi #======================================================================= # End cycle_times #======================================================================= WINDOW_LENGTH_4D_TOT=$(( WINDOW_LENGTH_4D + SUBWIN_OFFSET )) echo "WINDOW_LENGTH_4D_TOT=$WINDOW_LENGTH_4D_TOT" #======================================================================= # Things that do not depend on current cycle time #======================================================================= DATE_OPER_DCDA=2004062900 DATE_OPER_ENDA=2010062200 DATE_OPER_LWDA=2013111900 ANOFFSET_TYPES='4i|4v|an|fc|ef|ea|me|em|es|ses' WINDOW_LENGTH_4D_TOT_OPER=12 EDA_WINDOW_LENGTH_4D_TOT_OPER=12 EDA_WINDOW_LENGTH_4D=${EDA_WINDOW_LENGTH_4D:=12} INI_WINDOW_LENGTH_4D=${INI_WINDOW_LENGTH_4D:=12} EDACLASS=${EDACLASS:=od} EDAEXPVER=${EDAEXPVER:=0001} LEDA_ERRORS_IN=${LEDA_ERRORS_IN:=true} if [[ $LEDA_ERRORS_IN = true && $EDACLASS = od && $EDAEXPVER = 0001 && $BASETIME -ge $DATE_OPER_LWDA ]] ; then if [[ $LEVELS = 137 ]] ; then LJB_EDA=true fi LSES_EDA=true fi #======================================================================= # Setting for archiving via NPOSTS argument in NAMCT0, used by sekf_sm and ifstraj and ansfc #======================================================================= PPSTEP_INC=3 if [[ $PERIOD_AN -lt 3 ]] ; then PPSTEP_INC=$PERIOD_AN fi echo "PPSTEP_INC=$PPSTEP_INC" #end-of-include $EXPVER/include/cycle_times ($EXPVER/ifstraj_999.ecf) #include $EXPVER/include/nemo.h ($EXPVER/ifstraj_999.ecf) #==================================================== # file nemo.h # # nemo-related variables for forced/coupled runs #=================================================== set -eaux NEMOUTILS=$XBINS/nemo/$ARCH #temporary. Not used at the moment. #change to appropiate valued when needed #========== #set general defaults here for imported SMS defined variables #========= SUBFSFAMILY=${_SUBFSFAMILY_} SUBSUBFSFAMILY=${_SUBSUBFSFAMILY_} RUNNEMOFCST=${_RUNNEMOFCST_} RUNNEMOVAR=${_RUNNEMOVAR_} NEMOCOUPLED=${_NEMOCOUPLED_} NOUTMAX=${NOUTMAX:-0} [[ ${OD_MODE:-false} == false ]] && YMD=${_YMD_} || YMD=$BASETIME N_MONTHLY=${_N_MONTHLY_} N_FCSTLEN=${_N_FCSTLEN_} N_INTERVAL=${_N_INTERVAL_} FCLENGTH=${_FCLENGTH_} if [[ ${OCSUITE:-notset} = "vareps" ]]; then DELAY=${_EPSINISTEP_PREVIOUS_} N_START_DAY=$(newdate $YMD $DELAY) else N_START_DAY=${_N_START_DAY_} fi N_END_DAY=${_N_END_DAY_} fluxadd=1 if [[ ${_LINNEMONRT_} = 1 ]]; then ((nninidays=(${_CHUNK_}-1)*N_INTERVAL)) YMD=$(dateincr $YMD $nninidays) if [[ ${_CHUNK_} = ${_NEMONRTCHUNKS_} ]]; then N_INTERVAL=$((${_DAY_}+${_NRTOFFSET_}-(${_CHUNK_}-1)*N_INTERVAL+1)) fluxadd=0 fi fi if [[ ${LOUTLOOP:-false} == true && ${_LCDA_NRT_} == True ]]; then fluxadd=0 fi chunkstop=${chunkstop:=0} chunkstart=${chunkstart:=0} if [[ $NEMOCOUPLED = 1 ]] ;then NSLIMRST=0 fi #================================ # nemo configuration #================================ OUT_GRID=${OUT_GRID:=$OPA_GRID} INN_GRID=${INN_GRID:=$OPA_GRID} if [[ $OUT_GRID = ORCA1 ]] ;then OUT_LEVELS=${OUT_LEVELS:='42'} OUT_VER=${OUT_VER:='2'} ntsres=3600 NR_SSH0=${NR_SSH0:=2} # 1 to SL altimeter; 2 for GRACE climatology elif [[ $OUT_GRID = ORCA2 ]] ;then OUT_LEVELS=${OUT_LEVELS:='31'} OUT_VER=${OUT_VER:='0'} ntsres=5400 NR_SSH0=${NR_SSH0:0} elif [[ $OUT_GRID = ORCA025 ]] ;then OUT_LEVELS=${OUT_LEVELS:='75'} OUT_VER=${OUT_VER:='1'} ntsres=1200 NR_SSH0=${NR_SSH0:=2} elif [[ $OUT_GRID = ORCA025_1050 ]] ;then OUT_LEVELS=${OUT_LEVELS:='75'} OUT_VER=${OUT_VER:='0'} ntsres=900 NR_SSH0=${NR_SSH0:=2} elif [[ $OUT_GRID = ORCA12 ]] ;then OUT_LEVELS=${OUT_LEVELS:='75'} OUT_VER=${OUT_VER:='0'} ntsres=360 NR_SSH0=${NR_SSH0:=2} elif [[ $OUT_GRID = eORCA025_GO8 ]] ;then OUT_LEVELS=${OUT_LEVELS:='75'} OUT_VER=${OUT_VER:='0'} ntsres=900 NR_SSH0=${NR_SSH0:=2} else print "New defaults for grid $OUT_GRID" exit 1 fi OUT_CONFIG=${OUT_GRID} if [[ ${OUT_LEVELS:='undefined'} != 'undefined' ]]; then OUT_CONFIG="${OUT_CONFIG}_Z${OUT_LEVELS}" fi nemogrid=${_NEMOCONFIG_} if [[ $nemogrid != $OUT_CONFIG ]]; then OUT_CONFIG=$nemogrid OUT_GRID=$(echo $OUT_CONFIG | cut -f1 -d_) OUT_LEVELS=$(echo $OUT_CONFIG | cut -f2 -d_ | cut -f2 -dZ) fi if [[ ${OUT_VER:='undefined'} != 'undefined' ]]; then OUT_CONFIG="${OUT_CONFIG}_v${OUT_VER}" fi if [[ $INN_GRID = ORCA1 ]] ;then INN_LEVELS=${INN_LEVELS:='42'} INN_VER=${INN_VER:='1'} elif [[ $INN_GRID = ORCA2 ]] ;then INN_LEVELS=${INN_LEVELS:='31'} INN_VER=${INN_VER:='0'} elif [[ $INN_GRID = ORCA025 ]] ;then INN_LEVELS=${INN_LEVELS:='75'} INN_VER=${INN_VER:='2r1'} elif [[ $INN_GRID = ORCA025_1050 ]] ;then INN_LEVELS=${INN_LEVELS:='75'} INN_VER=${INN_VER:='xxx'} elif [[ $INN_GRID = ORCA12 ]] ;then INN_LEVELS=${INN_LEVELS:='75'} INN_VER=${INN_VER:='xxx'} elif [[ $INN_GRID = eORCA025_GO8 ]] ;then INN_LEVELS=${INN_LEVELS:='75'} INN_VER=${INN_VER:='xxx'} else print "New defaults for grid $INN_GRID" exit 1 fi OCQCVER=${OCQCVER:='3'} RUNQC=${_RUNQC_} NPROFFILES="'profiles_01.nc'" NPRVER=${NPRVER:=V2} #new perturbations will be V3 NPRSRC=${NPRSRC:=pert03} #NPRSRC can be a list of sources after V3 if [[ $NPRVER = V2 ]] ;then PERT_END_PATH=$NPRVER/${OUT_CONFIG}/$NPRSRC #Res depenent. Fixe source else PERT_END_PATH=$NPRVER # Res indepedent multiple sources fi #=============================================================================== # set up nambge_cor namelist variables (background error correlation parameters) # value must be consistant with the normalization file selected by INN_VER # Only works for ORCA025 and OUT_VER=1 #=============================================================================== if [[ $INN_GRID = ORCA025 && $OUT_VER = 1 ]]; then if [[ $INN_VER = 2r ]]; then NAM_FBGEZSCMR=2 # scmr = stretching factor for the vertical scales NAM_FBGELSHE=4 # bgelshe=correlation horizontal length scale for SSH elif [[ $INN_VER = 2r1 ]]; then NAM_FBGEZSCMR=2 NAM_FBGELSHE=2 elif [[ $INN_VER = 2r2 ]]; then # MyO2 production run setting NAM_FBGEZSCMR=1 NAM_FBGELSHE=2 elif [[ $INN_VER = 2r3 ]]; then # MyO2 production run setting NAM_FBGEZSCMR=1 NAM_FBGELSHE=2 elif [[ $INN_VER = 3 ]]; then # MXL vten NAM_FBGEZSCMR=1 NAM_FBGELSHE=2 else print "Not supported INN_VER value" exit 1 fi fi #=============================================================== # Input data directories for outer/coupled if not set by prepIFS #================================================================ set -eu OCNSETUP=${OCNSETUP:=ec:/ocx/NEMO/SETUP/$OCNVER} OCQCDATA=${OCQCDATA:=ec:/ocx/NEMO/QCDATA/v$OCQCVER} DRINCLI=${DRINCLI:=$OCNSETUP/$OUT_CONFIG/CLIMATOLOGY} DRINPAR=${DRINPAR:=$OCNSETUP/$OUT_CONFIG/PARAMETERS} DRINMSH=${DRINMSH:=$OCNSETUP/$OUT_CONFIG/MESH} DRINWEIGHTS=${DRINWEIGHTS:=$OCNSETUP/$OUT_CONFIG/WEIGHTS} DRINPERT=${DRINPERT:=ec:/ocx/NEMO/PERT/$PERT_END_PATH} DRINREMAP=${DRINREMAP:=$OCNSETUP/$OUT_CONFIG/REMAP} DRINREMAPCPL=${DRINREMAPCPL:=$OCNSETUP/$OUT_CONFIG/REMAPCPL} DRINREMAPCDO=${DRINREMAPCDO:=$OCNSETUP/$OUT_CONFIG/REMAPCDO} if [[ $NEMOCOUPLED = 0 ]] ;then DRINREMAPWAM=${DRINREMAPWAM:=ec:/ocx/WAM/REMAP/ERAI/$OUT_CONFIG} else DRINREMAPWAM=${DRINREMAPWAM:=$OCNSETUP/$OUT_CONFIG/REMAPWAM} fi if [[ ${OD_MODE:=false} != true ]] ; then OCXDATA=${NEMO_OCXDATA:-/ec/fwsm/lb/project/nemo} OCXFILES=$OCXDATA/SETUP/$OCNVER/$OUT_CONFIG else # CHECK ME - FIX ME OCXDATA=${NEMO_OCXDATA:-$XDATA} OCXFILES=$XDATA/ocfiles/$OCNVER/$OUT_CONFIG fi OCXFORCING=$XDATA/ocforcing/${NFRVER:=V2}/$OUT_GRID/FF OCXOBS=$XDATA/ocobs OCXPERT=$OCXDATA/ocpert/$PERT_END_PATH OCXQCDATA=$OCXDATA/QCDATA/v$OCQCVER #patch until we put ORCA1_Z42_v3 in rdx dir if [[ $NPRVER = V2 ]] ;then if [[ $OUT_CONFIG = ORCA1_Z42_v3 ]] ;then OCXPERT=$XDATA/ocpert/$NPRVER/ORCA1_Z42_v2/$NPRSRC # elif [[ $OUT_GRID = ORCA025 || $OUT_LEVELS != 42 ]] # then # if (( $LPERT_FOR > 0 )) # then # echo Tau pert do not exist yet for these configurations # exit 1 # fi fi fi OCXSSTICE=${OCXSSTICE:-/${STHOST:-sc1}/tcwork/emos/ma_ocean/4/0001/sstice} # default is S4 operations OCXSSTICE5YR=${OCXSSTICE5YR:-/${STHOST:-sc1}/tcwork/emos/ma_ocean/4/0001/iceclim5yr} # default is system "4" in operations # ecfs observation directories (below or in separate file) # ecfs forcing directories (below or in separate file) #================================================ # perturbations controls #================================================ OCTOTAL=${_OCTOTAL_} if [[ $NEMOCOUPLED = 0 ]] ;then OCPERT=${_PERTNO_} OCFCPERT=$OCPERT else EPSMEMBER=${_EPSMEMBER_} OCFCPERT=${_OCFCPERT_} OCPERT=${_OCPERT_} fi #PL and EDB and PAB if [[ ${LOUTLOOP:-false} = true ]];then if [[ $SUBFSFAMILY = "" || $SUBFSFAMILY = /control ]];then OCPERT=0 else OCPERT=$(echo $SUBFSFAMILY | tail -c -3 | bc) fi # OCFCPERT="" PAB COMMENTED TO ALLOW INIFAM_1 MODEL TASK TO FIND RESTART.nc files. i.e. LINKS WERE WORKING fi NIT0=0 LPERT_OBS=${_LPERT_OBS_} LPERT_FOR=${_LPERT_FOR_} #================================================ # directories experiment specific (ecfs and disk) #================================================ #in ecfs (FS) and on disk (pert dependent and indpendent) #Variables starting with FS are in ecfs if [[ ${RUNNEMOFCST:-0} = 1 ]]; then fsdir=${EXPVER}/$YMD else fsdir=${EXPVER} fi FSOBS=ec:${FSROOT}/${fsdir}/obs #archive of input obs used in experiment FSFOR=ec:${FSROOT}/${fsdir}/forcing #archive of input forcing used in exper FSDIAG=ec:${FSROOT}/${fsdir}/diag${FSFAMILY}$OCFCPERT FSBASEN=ec:${FSROOT}/${fsdir}${FSFAMILY}$OCFCPERT #FSBASE already def in setup.h FSBASEMEAN=ec:${FSROOT}/${fsdir}${FSFAMILY}mean #FSBASE for ensmean FSBASEVAR=ec:${FSROOT}/${fsdir}${FSFAMILY}var #FSBASE for ensvar FSBASESDV=ec:${FSROOT}/${fsdir}${FSFAMILY}sdv #FSBASE for enssdv FSSTATS=ec:${FSROOT}/${fsdir}/stats${FSFAMILY} #perturb independent FSSTATS0=ec:${FSROOT}/${fsdir}/stats${FSFAMILY}$OCFCPERT #perturb dependent FSPLOTS=ec:${FSROOT}/${fsdir}/plots${FSFAMILY} #perturb independent FSBASETMP=ectmp:$FSROOT/${fsdir} FSBASENTMP=$FSBASETMP$FSFAMILY$OCFCPERT FSOMONATMP=$FSBASENTMP/omona_backup if [[ $NEMOCOUPLED = 0 || ${LOUTLOOP:-false} = true ]] ;then addtime='' else addtime=/$BASETIME fi FSRES=$FSBASEN/restart$addtime #previous RESDIR FSOUT=$FSBASEN/output$addtime #previous OUTDIR FSFDBK=$FSBASEN/fdbk$addtime #previous OSBDIR FSODB=$FSBASEN/odb$addtime if [[ ${EMOSARC:=no} = yes ]]; then CP_ARCH_OPTS="-b -o" else CP_ARCH_OPTS="-o" fi #input directories on disk #exp dependent, but no data or perturbation dependent NDATA=$DATA OCNDATA=$NDATA/ninput/$nemogrid if [[ ${RUNNEMOFCST:-0} = 1 ]]; then OCNDATAOBS=$WDIR/observations OCNDATAFOR=$WDIR/forcing else OCNDATAOBS=$NDATA/observations OCNDATAFOR=$NDATA/forcing fi OCNDATAREMAP=$NDATA/remap # OCNDATAREMAPSST is for coupled mode only. # It is need to account for different LSM in MARS compared # to the model with different CLIMVERSION OCNDATAREMAPSST=$NDATA/remap_sst OCNDATAQC=$NDATA/qc OCNDATAODB=$NDATA/odb OCNDATAPERT=$NDATA/pert OCNDATAOBSVELSTORE=$OCNDATAOBS/currents OCNDATAOBSVEL=$OCNDATAOBS if [[ ${_LINNEMONRT_} = 1 ]]; then OCNDATAOBS=${OCNDATAOBS}_nrt_${_DAY_}_${_chunk_} OCNDATAFOR=${OCNDATAFOR}_nrt_${_DAY_} OCNDATAPERT=${OCNDATAPERT}_nrt_${_DAY_} fi #Perturbation dependent if [[ ${RUNNEMOFCST:-0} = 1 ]]; then OCNDIR=$WDIR$FSFAMILY$OCFCPERT #perturbation dependent input data else OCNDIR=$WORK$FSFAMILY$OCFCPERT #perturbation dependent input data fi OCNDIROUTER=$OCNDIR/outer #perturbation dependent input data #Date dependent and perturbation dependent # his may need additional check for neom in coupled # if [[ ${_LINNEMONRT_} = 1 ]]; then WDIR=${WDIR}_nrt_${_DAY_}_${_CHUNK_} fi if [[ -n ${SUBFSFAMILY:=""} || $NEMOCOUPLED = 1 ]] ;then echo WDIR is $WDIR WDIROUTER=$WDIR else WDIR=$WDIR$OCFCPERT WDIROUTER=$WDIR/outer fi if [[ ${_LINNEMONRT_} = 1 ]]; then OCNDIRRESTOUTPUT=$WDIROUTER if [[ ${_CHUNK_} = 1 ]]; then OCNDIRRESTINPUT=$OCNDIROUTER else chunkm1=$((${_CHUNK_} -1)) OCNDIRRESTINPUT=${WDIROUTER/nrt_${_DAY_}_${_CHUNK_}/nrt_${_DAY_}_$chunkm1} fi else OCNDIRRESTINPUT=$OCNDIROUTER OCNDIRRESTOUTPUT=$OCNDIROUTER fi if [[ ${SUBSUBFSFAMILY:=""} = process ]] ;then WDIR=${WDIR}_process fi #PAB PUT THIS NEXT IF STATEMENT IN - DO WE EVER $RUNNEMOVAR when $NEMOCOUPLED? #PL Define LNASSIM if [[ ${LOUTLOOP:-false} = true && $TASK = nouterpp ]] ; then RUNNEMOVAR=1 fi if [[ $RUNNEMOVAR = 0 ]] ;then LNASSIM=no else LNASSIM=yes fi if [[ $NEMOCOUPLED = 0 ]] ;then if [[ $RUNNEMOVAR = 0 ]] ;then LNASSIM=no else LNASSIM=yes fi nflux0=${NFLUXES:=INTER_ONLINE} #for backward compatibility NFCLIM=${NFCLIM:=false} else if [[ ${LOUTLOOP:-false} = false ]]; then LNASSIM=no fi nflux0=CLIM #for backward compatibility NFINTER=${NFINTER:=OFFLINE} NFCLIM=${NFCLIM:=true} #NFLUXES before NFLUXPROD=e4_ei fi #for backward compatiblity if [[ ! -n ${NFINTER:=""} ]] ;then case $nflux0 in INTER_ONLINE) NFINTER=ONLINE ;; OASIS3_OFFLINE) NFINTER=OFFLINE ;; CLIM) NFCLIM=true ; NFINTER=INTER_OFFLINE ;; esac fi ### LNSEAICE=${LNSEAICE:=false} #observation operation [[ $LNSEAICE = yes ]] && LNSEAICE=true [[ $LNSEAICE = no ]] && LNSEAICE=false LN_SEAICENEMOVAR=FALSE LSEAICEINC=FALSE if [[ ${SEAICENEMOVAR:-0} != 0 ]] ;then LN_SEAICENEMOVAR=true LSEAICEINC=TRUE #LNSEAICE=true fi #Thinning LN_VTHINTS=${LN_VTHINTS:=.false.} [[ $LN_VTHINTS = yes ]] && LN_VTHINTS=.true. [[ $LN_VTHINTS = no ]] && LN_VTHINTS=.false. CHECK_DIR $WDIR CHECK_DIR $OCNDATA CHECK_DIR $OCNDIR CHECK_DIR $OCNDIROUTER CHECK_DIR $WDIROUTER # Uncoupled and coupled output directories if [[ $NEMOCOUPLED = 0 ]] ;then OCEOUTPATH=${WDIR}/outputs/ CN_OCERST_OUT_PATH=${WDIR}/restarts/ CN_OCEOBS_OUT_PATH=${WDIR}/observations/ CHECK_DIR $OCEOUTPATH CHECK_DIR $CN_OCERST_OUT_PATH CHECK_DIR $CN_OCEOBS_OUT_PATH else CN_OCERST_OUT_PATH=${WDIR}/ # add ending slash OCEOUTPATH=${WDIR}/nemo_output/ CHECK_DIR $OCEOUTPATH CHECK_DIR $CN_OCERST_OUT_PATH fi # This is defined the same way in all cases OCINI_FSROOT=${OCINI_FSROOT:-$FSROOT} if [[ ${_FAMILY1_} = ocean_initial ]] ; then OCINI_FSROOT=${OCAN_FSROOT:=$OCINI_FSROOT} NRTOCEAN=${NRTOCEAN_AN} fi #==================================================== # time step controls: length begining and end of run #==================================================== # currently a mess. It needs to be harmonized. #1: The length of the run should be an SMS variable FCLENGTH, or OCHUNK, # or N_FCSTLEN (at least 1 too many already) #2: The subchunking in the longrange suite makes things more confusing # since fclength is not the length of the chunk. #3: It would help having a variable defined with the lenght of the # current chunk #4: There are redundat variables (OCCURDAT=WINSTART=NDATE0) #5: This is the first attempt have an unified mehtod for coupled # and uncoupled runs #6: I needs to be generalized for 00H and 12H runs, and to specify # the lenght in hours # # # Objective: here one should set up: # NTIMESTEP: # OCNINDAT: begining of experiment # OCCURDAT: begining of this chunk # OCRUNDAYS: length of the current chunk # Derived variables are: # DAYSTP, NDAYS # NIT000,NITEND # OCNEWDAT,OCOLDAT, # OCCURDATM1,OCNEWDATM1 # NINITIME (dont know when it is used yet) # NINITIMESTAMP (if checks of restart timestep is required) # NTI0 # # Current outer loop number # typeset -Z2 nit nit=$((${_NOUTIT_}+1)) # Activate trajectory set +eu # nvarexp[0]=0 nvarexp[1]=$NVAREXP1 nvarexp[2]=$NVAREXP2 nvarexp[3]=$NVAREXP3 nvarexp[4]=$NVAREXP4 nvarexp[$NOUTMAX+1]=${nvarexp[$NOUTMAX]} # # 3D-FGAT/4D-Var # if [[ ${nvarexp[$nit]} == 1 ]]; then # Activate trajectory NAM_LN_TRAJ=.true. else NAM_LN_TRAJ=.false. fi # Set time step NTIMESTEP=${NTIMESTEP:=$ntsres} NTIMESTEP=${_NTIMESTEP_} NTIMESTEP_INNER0=${_NTIMESTEP_INNER0_} NTIMESTEP_INNER1=${_NTIMESTEP_INNER1_} NTIMESTEP_INNER2=${_NTIMESTEP_INNER2_} #set +eu # inntimestep[0]=$NTIMESTEP_INNER0 inntimestep[1]=$NTIMESTEP_INNER1 inntimestep[2]=$NTIMESTEP_INNER2 inntimestep[3]=$NTIMESTEP_INNER3 inntimestep[4]=$NTIMESTEP_INNER4 # inntrjfrq[0]=$NTRJFRQ1 inntrjfrq[1]=$NTRJFRQ2 inntrjfrq[2]=$NTRJFRQ2 inntrjfrq[3]=$NTRJFRQ2 #PAB/MC to clean up inntrjfrq[4]=$NTRJFRQ2 #PAB/MC to clean up TRJFRQ=${inntrjfrq[${_NOUTIT_}]} # set -eu NAM_NN_FSBC=${_NAM_NN_FSBC_} DAYSTP=$((86400/${NTIMESTEP})) DAYSTP_INNER=$((86400/${inntimestep[${_NOUTIT_}]})) tmpdat=${N_START_DAY:=$YMD} if [[ ${_DELTA_YEAR_} -ne 0 ]] && [[ ${OD_MODE:=false} == false ]]; then refyear=$( echo $tmpdat | cut -c 1-4 ) delta=$(expr ${_DELTA_YEAR_}) theyear=$(( refyear + delta )) mmddhh=$(echo $tmpdat | cut -c 5-10 ) OCNINDAT="${theyear}${mmddhh}" else OCNINDAT=$tmpdat fi if [[ ${OCSUITE:-notset} = "vareps" ]]; then OCCURDAT=$(substring $OCNINDAT 1 8 ) OCCURTIME=$(substring $OCNINDAT 9 10 ) else OCCURDAT=$(substring $YMD 1 8 ) OCCURTIME=00 fi if [[ ${RUNNEMOFCST} = 1 ]]; then OCNINDAT=$OCCURDAT fi N_RUNLEN=$N_INTERVAL if [[ $NEMOCOUPLED = 0 ]] ;then if (( $N_MONTHLY == 1 )) ;then OCRUNDAYS=$(rundays $YMD 999 $N_RUNLEN) if (( N_INTERVAL > 1 )) ;then LN_MONTHLY=TRUE fi else OCRUNDAYS=$N_RUNLEN fi else OCNINDAT=$OCCURDAT (( OCRUNDAYS = ($chunkstop - $chunkstart)/24 )) (( ndays_offset = chunkstart/24 )) OCCURDAT=$(dateincr $OCCURDAT $ndays_offset) fi OCCURDATM1=$(dateincr $OCCURDAT -1) OCNEWDAT=$(dateincr $OCCURDAT $OCRUNDAYS) OCNEWDATM1=$(dateincr $OCNEWDAT -1) #PL Retrieve observations over two days if [[ ${LOUTLOOP:-false} = true ]]; then WINSTART=$OCCURDATM1 WINEND=$OCNEWDAT WINENDFLUX=$WINEND else WINSTART=$OCCURDAT WINEND=$OCNEWDATM1 WINENDFLUX=$WINEND fi if [[ ${RUNNEMOFCST:-0} = 1 ]] ; then NAMCDWWINT=.false. else # Add 1 to WINENDFLUX for fluxes if ICE nudging or LNSEAICE=true, or WAVEPAR. if [[ ${LN_SURFDMP_LIM:-no} = yes || ${LNSST:-no} = yes || ${LNSEAICE:-false} = @(yes|true) || ${WAVEPAR:-false} = @(yes|true) ]]; then if [[ $fluxadd = 1 ]]; then # Don't do it if we are in the NRT last chunk. WINENDFLUX=$(dateincr $WINENDFLUX 1) fi fi fi if [[ ${LOUTLOOP:-false} = true && ${_LCDA_NRT_} = True ]] ; then if [[ $FAMILY = @(*ngetforcing*|*ncatforcing*) ]] ; then WINSTART=$(dateincr -d $WINSTART -1) WINENDFLUX=$(dateincr -d $WINENDFLUX -1) fi fi #some restart checks and variables for namelists NDATE0=$OCCURDAT NDATEND=$OCNEWDAT NIT000=1 NITEND=$(($NIT000+$DAYSTP*$OCRUNDAYS-1)) NITENDVAR=$(($DAYSTP_INNER*$OCRUNDAYS)) NTIME0=00 NTIMEEND=00 if [[ ${LOUTLOOP:-false} = true ]]; then LNUSETIME=.true. if [[ $FSFAMILY = @(/an) ]] || [[ $FSFAMILY = /mars && $TASK = @(narcres|narcobs|narcana) ]]; then echo "This case is for analysis only" NDATE0=$(echo $WINDOW_START | cut -c 1-8 ) NTIME0=$(echo $WINDOW_START | cut -c 9-10) NITEND=$(($NIT000+(($WINDOW_LENGTH_4D*60*60)/$NTIMESTEP)-1)) NITENDVAR=$NITEND NDATEND=$(echo $WINDOW_END | cut -c 1-8) NTIMEEND=$(echo $WINDOW_END | cut -c 9-10) NITIAUFIN=$(((($WINDOW_LENGTH_4D-3)*60*60)/$NTIMESTEP)) #Note PAB hardcoded 3 hour offset of forecast here elif [[ $FAMILY = */make/* && $FAMILY = */archive/* ]]; then echo "this case is for archiving of inifam forecast" NDATE0=$(echo $NXBGTIME | cut -c 1-8 ) NTIME0=$(echo $NXBGTIME | cut -c 9-10) _finish=$(dateincr -h $NXBGTIME $FCLENGTH) NDATEND=$(echo $_finish | cut -c 1-8 ) NTIMEEND=$(echo $_finish | cut -c 9-10) elif [[ $FSFAMILY = /fc && $BASETIME -lt $INITIME ]]; then NTIME0=$hourcycle NITEND=$(($NIT000+(($FCLENGTH*60*60)/$NTIMESTEP)-1)) elif [[ $FSFAMILY = @(/fc) && $BASETIME -ge $INITIME ]] ; then echo "This case is for short and long forecasts" NTIME0=$(echo $BASETIME | cut -c 9-10) NITEND=$(($NIT000+(($FCLENGTH*60*60)/$NTIMESTEP)-1)) NTIMEEND=$(dateincr -h $BASETIME $FCLENGTH | cut -c 9-10) NDATEND=$(dateincr -h $BASETIME $FCLENGTH | cut -c 1-8) elif [[ $FSFAMILY = /mars && $FCLENGTH -lt 72 ]] ; then echo "This case is for archiving short forecast" NTIME0=$(substring $LAST_AN 9 10) NDATE0=$(substring $LAST_AN 1 8) NTIMEEND=$(newdate $LAST_AN $FCLENGTH | cut -c 9-10) NDATEND=$(newdate $LAST_AN $FCLENGTH | cut -c 1-8) elif [[ $FSFAMILY = /mars && $FCLENGTH -ge 72 ]] ; then echo "This case is for archiving long forecast" NTIME0=$(substring $FIRST_AN 9 10) NDATE0=$(substring $FIRST_AN 1 8) NTIMEEND=$(newdate $FIRST_AN $FCLENGTH | cut -c 9-10) NDATEND=$(newdate $FIRST_AN $FCLENGTH | cut -c 1-8) fi fi #================================ # OCEAN INITIALIZATION #================================ function _nemo_expand_list { # Convert a comma-separated list into a space separated list with # error checking. # # * comma_list # A comma-separated list of values. The number of values must be # the same as the required_length argument, or be a single value. # # * required_length # The required length of the resulting list. This is used for # expanding a single value to a list of the apprpriate length, and # for validating the length of an input with >1 items. # # Returns: # # * space_list # If the input was a single value then this list will contain that # value repeated to produce a list of the required length. If the # input list contained the required number of values then this # will be a space-separated version of the input comma-separated # list. If the input list length was >1 but was not the required # length then the result will be empty. # typeset comma_list="$1" typeset required_length="$2" typeset space_list=$(echo $comma_list | tr "," " ") typeset list_length=$(echo $space_list | wc -w) if [[ $list_length -eq 1 ]]; then # Expand the list to the required length by repeating the only value: space_list="$(printf "%.0s$comma_list " $(seq 1 $required_length))" elif [[ $list_length -ne $required_length ]]; then # Set to blank if invalid: space_list="" fi echo $space_list } if [[ $NEMOCOUPLED = 1 ]]; then # Handle differences in prepIFS set-up between coupled and uncoupled # ocean experiments. The coupled experiments have less flexibility for # initialization. The simpler set of variables used in coupled # experiments needs to be mapped to the more general initialization # variables used in un-coupled mode. # # The experiment version is a single version in coupled modes, set the # corresponding variable that is used for the more general uncoupled # initialization: if [[ ${_FAMILY1_} = ocean_initial ]] ; then OCINI_EXPVER=${OCAN_EXPVER:=$OCINI_EXPVER} fi NBCKEXP=$OCINI_EXPVER # For coupled experiments the initialization time is the run start time, # for both the ocean and the ice: NINITIME=$OCNINDAT LIMTIMER=$OCNINDAT # We are always going to initialize the ocean from a restart in coupled # mode, in un-coupled this will be set to the desired value already: NINIREST=yes fi # Sea ice initial conditions are determined by LIMINIR0, it takes the # following values: # 0 : cold start # 1 : climatology # 2 : restart from a specified experiment # 3 : restart from the same experiment as ocean restart if [[ ${LIMINIR0:=3} -eq 3 ]]; then # The ice initialization is from restart file using the same experiment # as the ocean initialization. Overwirte LIMIEXPR with the ocean # initialization experiment version, LIMTIMER with the ocean imitialization # time: LIMEXPR=$NBCKEXP LIMTIMER=$NINITIME # Override LIMI_FSROOT to use the ocean resource directory: LIMI_FSROOT=${OCINI_FSROOT:-$FSROOT} # Finally set LIMINIR to indicate starting LIM from a restart: LIMINIR=2 else # Otherwise just use the provided settings for LIMI_FSROOT and preserve # the value of LIMINIR0 in LIMINIR: LIMI_FSROOT=${LIMI_FSROOT:-$FSROOT} # Set LIMINIR with the value specified in LIMINIR0 without modification: LIMINIR=$LIMINIR0 fi # Set OCPERT0 correctly. if [[ ${NINIPERT:-not_set} = not_set ]]; then # If the user didn't provide a set of perturbations then we just use # the value of OCPERT0, falling back to OCPERT (the perturbation number # of the current run) if that is not set. OCPERT0=${OCPERT0:-$OCPERT} else # Otherwise we need to process NINIPERT, which will either be a single # value, or a comma separated list of values whose length must match # the value of OCTOTAL (i.e. one value per member): ss=$(_nemo_expand_list $NINIPERT $OCTOTAL) if [[ -z $ss ]]; then echo "Number of oc ensemble members and initial pert numbers do not match" echo "OCTOTAL is " $OCTOTAL echo "NINIPERT is "$NINIPERT exit 1 fi # declare -a NINIPERT=( $ss ) OCPERT0=${NINIPERT[$OCPERT]} fi # Set LIMOCPERT0 correctly. A negative number indicates the ice perturbation # should be the same as the ocean perturbation, any other value indicates the # required perturbation number. If LIMOCPERT0 is not defined then the default # is -1, indicating to match the perturbation number of the ocean. LIMOCPERT0=${LIMOCPERT0:--1} if (( $LIMOCPERT0 < 0 )) ;then LIMOCPERT0=$OCPERT0 fi # Calculate NINITIME0 (initialisation time for ocean) ss="$(_nemo_expand_list $NINITIME $OCTOTAL)" if [[ -z $ss ]]; then echo "Number of oc ensemble members and initial dates do not match" echo "OCTOTAL is " $OCTOTAL echo "NINITIME is "$NINITIME exit 1 fi # declare -a set -A NINITIME $ss NINITIME0=${NINITIME[$OCPERT]} # Compute NBCKEXP0 (initialisation experiment for ocean) if [[ ${NINIREST} = no ]]; then # List of experiment identifiers not required if initializing from clim NBCKEXP0="" else ss="$(_nemo_expand_list $NBCKEXP $OCTOTAL)" if [[ -z $ss ]]; then echo "Number of oc ensemble members and initial dates do not match" echo "OCTOTAL is " $OCTOTAL echo "NBCKEXP is "$NBCKEXP exit 1 fi # declare -a set -A NBCKEXP $ss NBCKEXP0=${NBCKEXP[$OCPERT]} fi # Compute LIMEXPR0 and LIMTIMER0 (initialisation experiment and time for ice) if [[ $LIMINIR0 -eq 3 ]]; then # Ice restarts are the same as ocean: LIMEXPR0=$NBCKEXP0 LIMTIMER0=$NINITIME0 else ss="$(_nemo_expand_list \"$LIMEXPR\" \"$OCTOTAL\")" if [[ -z $ss ]]; then echo "Number of oc ensemble members and experiment versions do not match" echo "OCTOTAL is " $OCTOTAL echo "LIMEXPR is "$LIMEXPR exit 1 fi # declare -a set -A LIMEXPR $ss LIMEXPR0=${LIMEXPR[$OCPERT]} ss="$(_nemo_expand_list \"$LIMTIMER\" \"$OCTOTAL\")" if [[ -z $ss ]]; then echo "Number of oc ensemble members and initial dates do not match" echo "OCTOTAL is " $OCTOTAL echo "LIMTIMER is "$LIMTIMER exit 1 fi # declare -a set -A LIMTIMER $ss LIMTIMER0=${LIMTIMER[$OCPERT]} fi # Set paths that depend on the experiment specific information we just # computed: if [[ $NEMOCOUPLED = 1 ]] ;then FSRES0=ec:$OCINI_FSROOT/${NBCKEXP0}/opa$OCPERT0/restart else FSRES0=ec:$OCINI_FSROOT/${NBCKEXP0:-""}${FSFAMILY}${OCPERT0}/restart fi LIMFSRES0=ec:${LIMI_FSROOT}/${LIMEXPR0}/opa${LIMOCPERT0}/restart #================================ # time stamp/counter for run #========================================== #NINIREST if you want to start from a binary restart file # You may want to set up the counter to zero or continue if [[ ${NINIREST} = yes ]]; then if [[ $RUNNEMOFCST = 1 ]] || [[ $NEMOCOUPLED = 1 ]] ; then NINITIME=$OCNINDAT NINITIME0=$OCNINDAT LIMTIMER=$OCNINDAT LIMTIMER0=$OCNINDAT else NIT000=1 NITEND=$(($NIT000+$DAYSTP*$OCRUNDAYS-1)) fi fi #================================ # output and restart frequencies #=============================== #set defaults for frequency of output for different streams # Stream 1: regular interval output # Stream 2: end of run output.Time averaged # Stream 3: frequent (daily) output. Mainly 2D fields. # Stream 4: debug freq # Stream 5: minimum daily values # Stream 6: maximum daily values # Stream 7: Time step output # Stream 8: XIOS lim2 output new formats # Stream 9: XIOS lim2 output old formats # Stream 10: XIOS lim3 output # set -A COUTSTREAMS=(OUT1 OUT2 OUT3 OUT4 OUT5 OUT6 OUT7 OUT8 OUT9 OUT10) NOUT8FLAG=.FALSE. NOUT9FLAG=.FALSE. NOUT10FLAG=.FALSE. if [[ ${_USEXIOS_} = 1 ]]; then if [[ ${ICEMOD:-0} = 2 ]]; then # There seem to be a problem with initialization for # some fields for stream 9 in coupled mode, so # we dont write this until we have understood this if [[ $NEMOCOUPLED = 0 ]] ;then NOUT8FLAG=${XIOSLIMNEW:-.TRUE.} else NOUT8FLAG=${XIOSLIMNEW:-.FALSE.} fi NOUT9FLAG=${XIOSLIMOLD:-.TRUE.} NOUT10FLAG=.FALSE. elif [[ ${ICEMOD:-0} = @(3|4) ]]; then NOUT8FLAG=.FALSE. NOUT9FLAG=.FALSE. NOUT10FLAG=.TRUE. fi OUTSTREAMS=10 NOUT5FLAG=.FALSE. NOUT6FLAG=.FALSE. fi #option for slim output SLIMOUT=${SLIMOUT:=yes} if [[ ${SLIMRST:=yes} = yes ]] ;then #LN_SLIMRST=.TRUE. NSLIMRST=${NSLIMRST:=1} else #LN_SLIMRST=.FALSE. NSLIMRST=${NSLIMRST:=0} fi OUTSTREAMS=${OUTSTREAMS=3} if [[ ${_USEXIOS_} = 0 ]]; then OUT1FREQ=${NOUT1FREQ=-2} # output nerver OUT2FREQ=${NOUT2FREQ=-1} #end of run OUT3FREQ=${NOUT3FREQ=1} #daily OUT4FREQ=${NOUT4FREQ=-2} #no debug output OUT5FREQ=${NOUT5FREQ=1} #daily OUT6FREQ=${NOUT6FREQ=1} #daily OUT7FREQ=${NOUT7FREQ=-2} OUT8FREQ=${NOUT8FREQ=1} # Ice model average OUT9FREQ=${NOUT9FREQ=1} # Ice model instant OUT10FREQ=${NOUT10FREQ=1} # Ice model instant OUT1UNIT=${NOUT1UNIT=DAYS} OUT2UNIT=${NOUT2UNIT=DAYS} OUT3UNIT=${NOUT3UNIT=DAYS} OUT4UNIT=${NOUT4UNIT=DAYS} OUT5UNIT=${NOUT5UNIT=DAYS} OUT6UNIT=${NOUT6UNIT=DAYS} OUT7UNIT=${NOUT7UNIT=STEPS} OUT8UNIT=${NOUT8UNIT=DAYS} OUT9UNIT=${NOUT9UNIT=DAYS} OUT10UNIT=${NOUT10UNIT=DAYS} else OUT1FREQ=${NOUT1FREQ=-2} # output nerver OUT2FREQ=${NOUT2FREQ=-1} #end of run OUT3FREQ=${NOUT3FREQ=1} #daily OUT4FREQ=${NOUT4FREQ=-2} #no debug output OUT5FREQ=${NOUT5FREQ=1} #daily OUT6FREQ=${NOUT6FREQ=1} #daily OUT7FREQ=${NOUT7FREQ=-2} OUT8FREQ=${NOUT8FREQ=1} # Ice model average OUT9FREQ=${NOUT9FREQ=1} # Ice model instant OUT10FREQ=${NOUT10FREQ=1} # Ice model instant OUT1UNIT=${NOUT1UNIT=d} OUT2UNIT=${NOUT2UNIT=d} OUT3UNIT=${NOUT3UNIT=d} OUT4UNIT=${NOUT4UNIT=d} OUT5UNIT=${NOUT5UNIT=d} OUT6UNIT=${NOUT6UNIT=d} OUT7UNIT=${NOUT7UNIT=ts} OUT8UNIT=${NOUT8UNIT=d} OUT9UNIT=${NOUT9UNIT=d} OUT10UNIT=${NOUT10UNIT=d} fi OUT1TYPE=1 # time-averaged OUT2TYPE=1 # time-averaged OUT3TYPE=1 # time-averaged OUT4TYPE=0 #4th stream instantaneous OUT5TYPE=2 # min over a day OUT6TYPE=3 # max over a day OUT7TYPE=0 #4th stream instantaneous OUT8TYPE=1 # time-averaged OUT9TYPE=1 # time-averaged OUT10TYPE=1 # time-averaged LN_MONTHLY=${LN_MONTHLY:=.FALSE.} OUT1FLAG=.FALSE. OUT2FLAG=.TRUE. OUT3FLAG=.TRUE. OUT4FLAG=.FALSE. OUT5FLAG=${NOUT5FLAG:=.TRUE.} OUT6FLAG=${NOUT6FLAG:=.TRUE.} OUT7FLAG=.TRUE. OUT8FLAG=${NOUT8FLAG} OUT9FLAG=${NOUT9FLAG} OUT10FLAG=${NOUT10FLAG} if [[ $NEMOCOUPLED = 0 ]] ;then if [[ ${_LNRT_} = 1 ]]; then OUT1FLAG=.TRUE. OUT1FREQ=1 # stream1 output = 1 days for NRT run else if [[ ${SLIMOUT} = yes ]] ;then OUT1FREQ=-2 #never OUT1FLAG=.FALSE. fi fi OUT2FULL=.TRUE. OUT3FULL=.TRUE. if [[ $LN_MONTHLY = @(.true.|.TRUE.|TRUE|true) ]]; then OUT2FREQ=1 if [[ ${_USEXIOS_} = 0 ]]; then OUT2UNIT=MONTHS else OUT2UNIT=mo fi fi else OUT1FLAG=.FALSE. LN_MONTHLY=${NAM_LN_MONTHLY:-.TRUE.} # calender monthly output in stream 2 if [[ $LN_MONTHLY = @(.true.|.TRUE.|TRUE|true) ]]; then OUT2FREQ=1 if [[ ${_USEXIOS_} = 0 ]]; then OUT2UNIT=MONTHS else OUT2UNIT=mo fi else OUT2FREQ=${NOUT2FREQ=1} #end of run if [[ ${_USEXIOS_} = 0 ]]; then OUT2UNIT=${NOUT2UNIT=MONTHS} else OUT2UNIT=${NOUT2UNIT:=mo} fi fi OUT2FULL=.FALSE. OUT3FULL=.FALSE. LATMSST=.TRUE. fi if [[ ${LOUTLOOP:-false} = true && $FSFAMILY = /an ]]; then echo "Output averaged fields over whole assimilation window" OUT3FLAG=.TRUE. OUT3FREQ=$WINDOW_LENGTH_4D OUT3UNIT=HOURS fi OUTFREQ=${NOUTFREQ:=-1} #end of run OUTUNIT=${NOUTUNIT:=DAYS} OUTTYPE=1 #timeaverage #convert frequencies in time steps for str in ${COUTSTREAMS[*]} do eval nunit='$'{${str}UNIT} eval nfreq='$'{${str}FREQ} eval ntype='$'{${str}TYPE} if [[ ${_USEXIOS_} = 0 ]]; then if (( $nfreq < -1 )) ;then #never (( nplus = -1*$nfreq - 1 )) eval ${str}FREQ=$(( $NITEND + $nplus )) elif (( $nfreq == -1 )) ;then eval ${str}FREQ=$(( $OCRUNDAYS*$DAYSTP )) #end of the run else if [[ ${nunit} = "DAYS" ]]; then #convert in time steps eval ${str}FREQ=$(($DAYSTP*$nfreq)) fi if [[ ${nunit} = "HOURS" ]]; then #convert in time steps eval ${str}FREQ=$((3600*$nfreq/$NTIMESTEP)) fi fi else if (( $nfreq < -1 )) ;then #never (( nplus = -1*$nfreq - 1 )) eval ${str}FLAG=.FALSE. eval ${str}FREQ=$(( $OCRUNDAYS )) eval ${str}UNIT=d elif (( $nfreq == -1 )) ;then eval ${str}FREQ=$(( $OCRUNDAYS )) #end of the run eval ${str}UNIT=d else if [[ ${nunit} = "DAYS" ]]; then #convert in time steps eval ${str}FREQ=$(($nfreq)) fi if [[ ${nunit} = "HOURS" ]]; then #convert in time steps eval ${str}FREQ=$(($nfreq/$NTIMESTEP)) fi fi fi eval ${str}TYPE=$ntype done #OUTIFREQ=${OUTIFREQ:=$OUTFREQ} #frequency in timestes # Full frequency forcing output for debugging if [[ ${NEMOFORCINGOUTPUT:=no} = yes ]]; then OUTSTREAMS=7 if [[ $NEMOCOUPLED = 1 ]] ;then OUT7FREQ=$((OCOASISTSTEP/NTIMESTEP)) else OUT7FREQ=${NAM_NN_FSBC:-1} fi fi #frequency for restart file . From days/months to time-steps if [[ ${_RESTARTCHUNKPERIOD_} -gt 0 ]] ; then RESTUNIT=DAYS NSTOCK=${_RESTARTCHUNKPERIOD_} NAM_NN_ITFILE=$(($DAYSTP*${_RESTARTCHUNKPERIOD_})) else RESTUNIT=${RESTUNIT:='TIMESTEP'} NSTOCK=${NSTOCK:=-1} fi # Force restart only at end of run for NRT part of suite. if [[ ${RESTUNIT} = "DAYS" && $OCRUNDAYS -lt 28 ]]; then NSTOCK=${NSTOCK:=1} else NSTOCK=${NSTOCK:=-1} #default is at the end of the run fi LSTOCKMONTH=false if (( $NSTOCK == -2 )) ;then NSTOCK=-1 # NSTOCK in the namelist is now set to -1 meaning end of run + # end of months. LSTOCKMONTH=true elif (( $NSTOCK < 0 )) ;then if [[ ${_EPSLEG_} = 1 ]] ; then if [[ ${_RESTARTCHUNKING_} = 1 ]]; then if [[ ${_RCHUNK_NR_} = ${_RCHUNK_LAST_} ]]; then if [[ ${_RCHUNK_LAST_} -gt 0 ]]; then # this assumes EPSINISTEP is set to the correct value for a forecast without chunking nh=$(( ${_RCHUNK_STOP_} - ${_RCHUNK_START_} - ($EPSFCLENGTH_A - ${_EPSINISTEP_}) )) NSTOCK=$(($nh*3600/NTIMESTEP)) if [[ $NSTOCK -lt 0 ]]; then echo "FCLENGTH too small" exit 1 fi else nh=${_EPSINISTEP_} # for legA: before end of run NSTOCK=$(($nh*3600/NTIMESTEP)) fi else NSTOCK=-1 # end of run fi else nh=${_EPSINISTEP_} # for legA: before end of run NSTOCK=$(($nh*3600/NTIMESTEP)) fi else NSTOCK=$NITEND #end of run fi else if [[ ${RESTUNIT} = 'DAYS' ]] ;then NSTOCK=$(($DAYSTP*$NSTOCK)) fi fi # If restarting the model... if [[ ${OCSUITE:-not_set} = "seasonal" && ${SVRF:-no} = "yes" ]]; then NSTOCK=$(($DAYSTP*${restart_length_days:=-1})) fi #PL Restart file if [[ ${LOUTLOOP:-false} = true ]] ; then if [[ $FSFAMILY = "/fc" && $FCLENGTH -le 30 || $FSFAMILY = "/an" && ${_uptraj_} -le $NOUTMAX ]] ; then NSTOCK=$(((3*60*60)/$NTIMESTEP)) # PAB ADDED - making restart files every 3 hours else NSTOCK=$NITEND fi #PL OUTPUT if [[ $FSFAMILY = "/an" && ${_uptraj_} -ne $MXUP_TRAJ ]] ; then OUT2FLAG=.FALSE. OUT3FLAG=.FALSE. fi #PL Coupling between WAM and NEMO if [[ ${LWAMNEMOCOUP:-no} = yes ]]; then lwnemocou=T else lwnemocou=F fi fi # PAB END LOUTLOOP #======================= # forcing settings #====================== if [[ ${NFRPATH:-""} = "" ]]; then NFRVER=${NFRVER:=V2} #version of forcing NFRPATH=${NFRPATH:=ec:/ocx/NEMO/FORCING/$NFRVER/${OUT_CONFIG}/FF} if [[ ! -n ${NFINTER:=""} ]] ;then NFINTER=OFFLINE fi if [[ $NFCLIM = true ]] ;then NFRVER=V2 NFRPATH=$(echo $NFRPATH |sed -e "s|$OUT_CONFIG/FF|$OUT_CONFIG/clim_FF|g") CPER=19892004 fi else CPER=19892004 fi if [[ ${NSSTPATH:-""} = "" ]]; then NSSTPATH=$NFRPATH fi NFRPATH0=$NFRPATH NSSTPATH0=$NSSTPATH OCXFORCING0=$OCXFORCING #function to set up forcing directories: FF is a fuction of date #it may change within a single chunck NEWFRDIR() { set -ex if (( $# < 2 )) ; then echo $0: "USAGE NEWFRDIR class field (f for flx and s for sst)" exit 1 else cc=$1 ff=$2 fi case $ff in c) export NFRPATH=$(echo $NFRPATH0 | sed -e "s/FF/$cc/g") export OCXFORCING=$(echo $OCXFORCING0 | sed -e "s/FF/$cc/g") ;; s) export NSSTPATH=$(echo $NSSTPATH0 | sed -e "s/FF/$cc/g") ;; esac } typeset -fx NEWFRDIR #=============================== # observations settings #=============================== # In situ observations # Hard code observation settings for coupled mode for now if [[ ${_LNOCEANOBS_} = 1 ]]; then if [[ $NEMOCOUPLED = 1 ]]; then LNINSITU=${LNINSITU:=yes} if [[ $OCNVER = V36 ]]; then NOINSITU=1 else NOINSITU=3 if [[ ${LNALAMOOBS:-no} = yes ]]; then INSITUTYP[4]=${INSITUTYP4:=ALAMO} NOINSITU=4 elif [[ ${LITOPOBS:-no} = yes ]]; then INSITUTYP[4]=${INSITUTYP4:=BU} INSITUTYP[5]=${INSITUTYP5:=ITOP} NOINSITU=5 fi fi LNSSTBUFR=${LNSSTBUFR:=yes} fi else LNINSITU=${LNINSITU:=no} LNSSTBUFR=${LNSSTBUFR:=no} fi #Along track satellites (version, date to switch to NRT product and list of NRT satellites).. SLAVER=${SLAVER:=v5} SLASTART=19921101 #when along sla starts MDTDATE20=19921131 #minimum allowed second date to compute MDT MDTDATE2F=19991231 #maximum " " " " SLANRTLIST=${SLANRTLIST:="al/c2/j3/j2/j2n/s3a"} if [[ $SLAVER = AsORAS5 ]] ;then SLAVER=v5 SLANRTDATE=20141226 SLANRTLIST="al/c2/j3/j2/j2n" elif [[ $SLAVER = v6 ]] ;then #No correct MSSH OFFSET file yet!!! SLANRTDATE=${SLANRTDATE:=20171231} SLASTART=19930101 MDTDATE20=19930131 elif [[ $SLAVER = v5 ]] ;then SLANRTDATE=${SLANRTDATE:=20170515} elif [[ $SLAVER = v4 ]] ;then SLANRTDATE=${SLANRTDATE:=20121201} else SLANRTDATE=${SLANRTDATE:=20091001} fi if ((WINENDENEND0)) ; then #switch to EN411_g10 OBSINS=EN411 OBSVER=g10 ENEND0=20150531 fi if ((WINEND>ENEND0)) ; then #switch to BUFR data since 20150601 INSITUTYP1="BU" fi else if [[ $(substring $OBSINS 1 3) = EN3 ]] ;then ENSTART0=${ENSTART0:=19500101} ENEND0=${ENEND0:=20111231} OBSVER=v2aw if ((WINEND>ENEND0)); then #switch to v2a OBSVER="v2a" ENEND0=20131231 fi if ((WINEND>ENEND0)) ; then #switch to EN4 data from 20140101 OBSINS=EN4 fi fi if [[ $(substring $OBSINS 1 3) = EN4 ]] ;then OBSINS=EN421 OBSVER=g10 # default Gouretski and Reseghetti (2010) bias corrections applied. ENSTART0=${ENSTART0:=19000101} ENEND0=${ENEND0:=20171231} if ((WINEND>ENEND0)); then # switch to BU data from 20180101 INSITUTYP1="BU" fi fi fi ENSTART=${ENSTART0:=19500101} ENEND=${ENEND0:=20111231} #---------------------------------------- #global mean SSH timeseries #---------------------------------------- #NR_SSH can be 1 for clim SL or 2 for clim Grace or 0 for non adjustment NR_SSH=${NR_SSH:=$NR_SSH0} if [[ $NR_SSH = 2 ]]; then if (( $BASETIME <= 1993010100 )) ;then NSSHGLOBAL=yearly fi #set some transition dates depending on version. #DATENRT : when NRT product instead of dt is to be used. Either RD or OD #DATEONLINE : when the global TS are to be computed online #DATE_MONTHLY: the the global TS are monthly files (with daily data) # instead of yearly files (with monthly means) case $SLAVER in v4) DATENRT_MSSHTS=20110201 ; DATEONLINE_MSSHTS=20140101 ; DATE_MONTHLY_MSSH=1993010100 ;; v5) DATENRT_MSSHTS=$SLANRTDATE ; DATEONLINE_MSSHTS=$SLANRTDATE ; DATE_MONTHLY_MSSH=1993010100 ;; v6) DATENRT_MSSHTS=$SLANRTDATE ; DATEONLINE_MSSHTS=$SLANRTDATE ; DATE_MONTHLY_MSSH=1993010100 ;; \?) DATENRT_MSSHTS=20100201 ; DATEONLINE_MSSHTS=20100430 ; DATE_MONTHLY_MSSH=1993010100 ;; esac if (( $BASETIME > $DATE_MONTHLY_MSSH )) ;then NSSHGLOBAL=monthly if (( $NR_SSH != 0 )) ;then #NR_SSH forced to read obs SL NR_SSH=1 fi fi fi #-------------------------------------- #ecfs observation directories DRINOBB=${DRINOBB:=ec:/ocx/OCEANOBS/INSITU/$OBSINS} DRINOBSSST=${DRINOBSSST:=ec:/ocx/OCEANOBS/SST} DRINOBSSLA=${DRINOBSSLA:=ec:/ocx/OCEANOBS/SLA$SLAVER} DRINOBSSLANRT=${DRINOBSSLANRT:=ec:/ocx/OCEANOBS/SLA$SLAVER/nrt} DRINOBSSLART=${DRINOBSSLART:=ec:/oparch/sla-NRT-cf} #diff for SLAV5 DRINOBSSLAREF=${DRINOBSSLAREF:=ec:/ocx/OCEANOBS/MDT} DRINOBSRAPIDTS=${DRINOBSRAPIDTS:=ec:/ocx/OCEANOBS/RAPID} DRINOBSEPIC=${DRINOBSEPIC:=ec:/ocx/OCEANOBS/INSITU/EPIC} DRINOBSITOP=${DRINOBSITOP:=ec:/ocx/OCEANOBS/INSITU/ITOP} DRINOBSALAMO=${DRINOBSALAMO:=ec:/ocx/OCEANOBS/INSITU/ALAMO} DRINOBSDRIFUV=${DRINOBSDRIFUV:=ec:/ocx/OCEANOBS/CURRENTS/DRIFTERS/hourly_monthly_fbfiles/} DRINOBS_MSSHTS=${DRINOB_SSHTSM:=ec:/ocx/OCEANOBS/MSLA$SLAVER/TS} #global mean SSH if [[ $SLAVER = @(v5|v6) ]] && (( $WINEND >= $SLANRTDATE)) ;then DRINOBSSLANRT=ec:/oparch/SLA$SLAVER/nrt #for V5 we go from dt in ocx to #nrt in oparch directly fi if [[ $SLAVER = v6 ]] ;then CMEMSVER=phy_vfec_l3 else CMEMSVER=sla_vfec fi #============================ # Ocean and sea-ice damping #============================ OCEDMP_TYPE=${OCEDMP_TYPE:=clim} ICEDMP_TYPE=${ICEDMP_TYPE:=clim} OCNDMP_DIR=${NDATA}/dmp${OCFCPERT} #perturbation-dependent directory for time-varying damping data if [[ $OCEDMP_TYPE = monthly ]]; then TDMPFILE="'votemper_1m',-1,'votemper',.true.,.false.,'monthly','',''" SDMPFILE="'vosaline_1m',-1,'vosaline',.true.,.false.,'monthly','',''" MONTHLY_OCEDMPVARS="votemper vosaline" else TDMPFILE="'data_1m_potential_temperature_nomask',-1,'votemper',.true.,.true.,'yearly','',''" SDMPFILE="'data_1m_salinity_nomask',-1,'vosaline',.true.,.true.,'yearly', '',''" MONTHLY_OCEDMPVARS="" fi if [[ $ICEDMP_TYPE = monthly ]]; then ICE_COVER_DMP_FIELD="'ileadfra_1m',-1,'ileadfra',.true.,.false.,'monthly','',''" ICE_THICK_DMP_FIELD="'iicethic_1m',-1,'iicethic',.true.,.false.,'monthly','',''" MONTHLY_ICEDMPVARS="iicethic ileadfra" else ICE_COVER_DMP_FIELD="'ice_cover',24,'ice_cov',.true.,.false.,'monthly','',''" ICE_THICK_DMP_FIELD="'ice_thick',-1,'hicif',.true.,.true.,'yearly','',''" MONTHLY_ICEDMPVARS="" fi #=========== # Some other default variables, only uncoupled #============ if [[ $NEMOCOUPLED = 0 ]] ;then LENA=${LENA:=true} NN_FWB=${NN_FWB:=4} NAM_HDMP=${NAM_HDMP0=0} NAM_ZDMP=${NAM_ZDMP0=0} DQDT0=${DQDT0:=-40} DQDT1=${DQDT1:=0} DQDT2=${DQDT2:=0} DQDT3=${DQDT3:=0} DEDS0=${DEDS0:=0} else NN_FWB=${NN_FWB:=0} NSSHGLOBAL=${NSSHGLOBAL:=clim} NAM_HDMP=${NAM_HDMP0=91} NAM_ZDMP=${NAM_ZDMP0=0} # all other default variables for coupled are set up in prep_nemoIFS fi if [[ ${LOUTLOOP:-false} = true ]] ; then if [[ $FSFAMILY != "/fc" ]]; then NN_FWB=4 #output the fresh water budget in coupled assimilation elif [[ $FCLENGTH -le 30 ]]; then NN_FWB=4 #output the fresh water budget in short forecast fi fi #============================================================================ #Number of processors #============================================================================ NEMO_NPROC=${_NEMO_NPROC_} NEMO_NPROCX=${_NEMO_NPROCX_} NEMO_NPROCY=${_NEMO_NPROCY_} NEMOVAR_NPROC=${_NEMOVAR_NPROC_} NEMOVAR_NPROCX=${_NEMOVAR_NPROCX_} NEMOVAR_NPROCY=${_NEMOVAR_NPROCY_} #============================================================================ #Tao currents #============================================================================ TAOCURDIR=${TAOCURDIR:=ec:/ocx/OCEANOBS/CURRENTS} TAOCURFILE=${TAOCURFILE:=tao_pirata_rama_v1.0.tar.gz} if [[ ${_LNTAOCUR_} = 1 ]]; then LNTAOCUR=yes else LNTAOCUR=no fi #============================================================================ #ADCP currents #============================================================================ ADCPCURDIR=${TAOCURDIR:=ec:/ocx/OCEANOBS/CURRENTS} if [[ ${_LNADCPCUR_} = 1 ]]; then LNADCPCUR=yes else LNADCPCUR=no fi #============================================================================ #SMOS sea ice thickness #============================================================================ SMOSICEDIR=${SMOSICEDIR:=ec:/oparch/sea_ice/smos_sit} DRINSMOSICE=${DRINSMOSICE:=ec:/ocx/NEMO/OBSCONST/SMOSDATA/} OCNDATASMOS=$NDATA/smosconst if [[ ${_LNSMOSICE_} = 1 ]]; then LNSMOSICE=yes else LNSMOSICE=no fi # offline observation diagnostics if [[ ${_LNSMOSICE_DIAGS_} = 1 ]]; then LNSMOSICE_DIAGS=yes else LNSMOSICE_DIAGS=no fi #============================================================================ #L3 OSI-SAF sea ice concentration #============================================================================ OSISAFDIR=${OSISAFDIR:=ec:/oparch/sea_ice/OSI-401-b/} OSIOPARCH=${OSIOPARCH:=1} # operational archiving structure SEAICEDAT=${SEAICEDAT:=OSISAF} SUPERLENG=${SUPERLENG:=0.5} # length of superob/thinning box if [[ $SEAICEDAT = NONE ]]; then LNGRDSEAICE=.false. LNSEAICEFB=.false. elif [[ $SEAICEDAT = OSISAF ]]; then LNGRDSEAICE=.false. LNSEAICEFB=.true. else LNGRDSEAICE=.true. LNSEAICEFB=.false. fi #SIC superobing/thinning #Works from CY43R3 onwards SICSUPER=${SICSUPER:=2} if [[ $SICSUPER = 0 ]]; then #nothing SICSUPEROB=no SICSUPERTHIN=no elif [[ $SICSUPER = 1 ]]; then #just superobbing SICSUPEROB=yes SICSUPERTHIN=no else #thinning. Note the superob logic is on #even for thinning SICSUPEROB=yes SICSUPERTHIN=yes fi #============================================================================ #Observations #============================================================================ #INSITU switches NOINSITU=${NOINSITU:=1} INSITUTYP[1]=${INSITUTYP1:=EN} INSITUTYP[2]=${INSITUTYP2:=TEP} INSITUTYP[3]=${INSITUTYP3:=SEP} # Force QC to off for NEMOFCST. if [ $RUNNEMOFCST = 1 ]; then RUNQC=0 INSITUQC1=no INSITUQC2=no INSITUQC3=no SLAQCACT=no SLAQCPAS=no fi if [[ $RUNQC = 1 ]]; then myrunqc=yes else myrunqc=no fi INSITUQC[1]=${INSITUQC1:=$myrunqc} INSITUQC[2]=${INSITUQC2:=$myrunqc} INSITUQC[3]=${INSITUQC3:=$myrunqc} SLAQCACT=${SLAQCACT:=$myrunqc} SLAQCPAS=${SLAQCPAS:=$myrunqc} #New option for SLA thinning within superob grid #Only works with prepIFS 41r2 onwards if [[ ${SLASUPER:-0} = 0 ]]; then #nothing SLASUPEROB=no SLASUPERTHIN=no elif [[ ${SLASUPER:-0} = 1 ]]; then #just superobbing SLASUPEROB=yes SLASUPERTHIN=no else #thinning. Note the superob logic is on #even for thinning SLASUPEROB=yes SLASUPERTHIN=yes fi MDTVER=${MDTVER:=Rio09} # EMOSLIB (To be reviewed) EMOSVER=000361 EMOSLIB="-L/usr/local/lib/metaps/lib/${EMOSVER} -lemos.R32.D64.I32" # BUFR_TABLES=/usr/local/apps/libemos/tables/bufr/bufrtables/ # setup.h #============================================================================ #Bias #============================================================================ if [[ ${LNBIAS:=no} = yes ]]; then LN_BIAS=.true. BIASTIMEUNITASM=$((OCRUNDAYS*86400)) else LN_BIAS=.false. BIASTIMEUNITASM=86400 fi if [[ ${BIAS_OFL:-""} = "" ]]; then LN_BIAS_OFL=.false. NAM_SDMP=${NAM_SDMP0:=1095} NAM_BDMP=${NAM_BDMP0:=1095} else LN_BIAS_OFL=.true. NAM_SDMP=${NAM_SDMP0:=7300} NAM_BDMP=${NAM_BDMP0:=7300} fi if [[ ${LNBIASASM:=no} = yes ]]; then BIAS_ASM=.true. else BIAS_ASM=.false. fi if [[ ${LRST_BIASR:=no} = yes ]]; then LRST_BIASR=true else LRST_BIASR=false fi # For check on bias restart file if [[ ${LNBIAS:=no} = yes && $OCCURDAT != $OCNINDAT ]]; then LRST_BIASR=true fi NN_INERTIAL=${NN_INERTIAL:=1} if [[ ${LOUTLOOP:-false} = false ]]; then if [[ ${LFWBR:=no} = yes || $OCCURDAT != $OCNINDAT ]]; then LFWBR=.true. else LFWBR=.false. fi else if [[ $FSFAMILY = "/fc" ]]; then LFWBR=.false. # off in forecasts in outer loop coupling else if [[ ${LFWBR:=no} = yes || $BASETIME -ge $INITIME ]]; then LFWBR=.true. else LFWBR=.false. fi fi fi #================================ # SST and Fluxes options #================================ #Choose SST and SeaIce product SSTPROD=${SSTPROD:=e4_ops} SICPROD=${SICPROD:=$SSTPROD} [[ $SICPROD = AsSSTPROD ]] && SICPROD=$SSTPROD #special patch to deal with lack of correct wave forcing for ERA40 if [[ $NEMOCOUPLED = 0 ]] ;then if [[ $NFLUXPROD = @(e4_ei|e4_ei_ops|AsORAS5) ]] && [[ $WINSTART -lt 19790101 ]] && [[ $WAVEPAR = yes ]] ;then WAVEPAR=no NAM_LN_CDWW=false NAM_LN_TAUOC=false NAM_LN_STCOR=false NAM_LN_WAVETKE=false NAM_LN_WBRSOURCE=false NAM_RN_EBB=20 NAM_NN_HTAU=0 fi fi #The following needs eventually sorting out in nemo_oper_model. #a) goto ei after end of e20c if [[ $NFLUXPROD != rd ]]; then if [[ $NFLUXPROD = e20c || $NFLUXPROD = e20cd ]] && [[ $WINENDFLUX -gt 20101231 ]] ;then NFLUXPROD=e4_ei fi # Switch to operations if [[ $WINENDFLUX -gt ${NFLUXOPSDATE:-20180101} ]]; then NFLUXPROD=ops fi # WAM flux product default is e4_ei. Alternative is e4_ei_ops NWAMFLUXPROD=${NFLUXPROD:-e4_ei} if [[ $WINENDFLUX -gt ${NFLUXOPSDATE:-20180101} ]]; then NWAMFLUXPROD=e4_ei_ops fi else NWAMFLUXPROD=rd fi #b) Set Frequency of fluxes for bulk formula and mars retrievals. This # is needed in nemonamelists and in forcing tasks. It should be an argument # in nemo_oper_model if [[ $NFLUXPROD = e20c || $NFLUXPROD = e20cd ]] ;then FREQAN=3 FREQFC=3 FREQWAM=3 elif [[ $NFLUXPROD = ea ]] ;then FREQAN=${ERA5_ANFREQ:-1} FREQFC=${ERA5_FCFREQ:-1} FREQWAM=${ERA5_ANFREQ:-1} else FREQAN=6 FREQFC=24 FREQWAM=6 fi if [[ ${LFCSTRDFORCING:-no} = yes ]]; then FREQAN=${RD_FORCE_INST_FREQ:-6} FREQFC=${RD_FORCE_ACCUM_FREQ:-24} FREQWAM=${RD_FORCE_WAM_FREQ:-6} fi #-----end patch # #============================= #For light penetration sheme QSRTYPE=${QSRTYPE:=1} CHLTYPE=${CHLTYPE:=0} if ((QSRTYPE>0)); then QSRRGB=.true. QSR2BD=.false. else QSRRGB=.false. QSR2BD=.true. fi #To get ICE data at the end of the run. # for monthly output: OUTFREQ=$(($OCRUNDAYS*$DAYSTP)) icemod=${ICEMOD:-0} if ((icemod>0)); then OUTFREQ=$(($DAYSTP)) OUTIFREQ=$(($DAYSTP)) fi # PSTAR_LIM=${PSTAR_LIM:=1.5e+4} if [[ $NEMOCOUPLED = 0 ]] ;then PARSUB=1.0 else PARSUB=0.0 fi if [[ ${LN_SURFDMP_LIM:=no} = yes ]]; then LN_SURFDMP_LIM=.true. else LN_SURFDMP_LIM=.false. fi NN_FRLDR_LIM=${NN_FRLDR_LIM:=0} NN_HICIFR_LIM=${NN_HICIFR_LIM:=0} ALPHA_LIMDMP=${ALPHA_LIMDMP:=6.0} ROBS_LIMDMP=${ROBS_LIMDMP:=0.01} #============================================================================ # List of forcing fields to be created and linked etc for EPS. #============================================================================ if [[ ${ICEMOD:-0} != 0 ]]; then FLUXLISTLOW='accum sst ice_cover' FLUXLISTHIGH='qtml u10 v10' FLUXLIST="$FLUXLISTLOW $FLUXLISTHIGH" else FLUXLIST='flx utau vtau sst ice_cover' fi #---options for sst relaxation RELAXSST=${RELAXSST:=0} export T2RLX=${T2RLX:=0} export RML=${RML:=31} export RML1=${RML1:=730} if [[ ${OCSST_INTERFACE:=no} = yes ]]; then if (( $T2RLX == 2 )); then RELAXSST=3 elif (( $T2RLX == 1 )); then RELAXSST=2 else RELAXSST=1 fi OUT3RLX=.true. else OUT3RLX=$OUT3FULL fi if [[ ${LOUTLOOP:-false} = true ]]; then #PAB #PL Swith off SST nudging in forecast step if [[ $FSFAMILY = "/fc" ]] ; then OCSST_INTERFACE=no RELAXSST=0 fi fi if (( $RELAXSST > 0 )); then DQDT0=${DQDT0:=-200} fi #Default for climatological ice concentration/thickness/etc is false LN_INILIM=${LN_INILIM:=false} # NetCDF chunk size to prevent netCDF3 inquiring the OS for block/page sizes export NCCHUNKSIZE=${_NCCHUNKSIZE_} #============================================================================ # PERTURBATIONS #============================================================================ # Observation perturbation # ----------------------------------------- # Random rejections of observation # ----------------------------------------- if [[ $NEMOCOUPLED = 0 ]] ;then NPROBREJSEED=$((-$YMD-100000000*$OCPERT)) else NPROBREJSEED=0 fi #Profiles LN_P3DPROB=.false. if ((OCPERT>0)) && [[ $LPERT_OBS = 1 ]]; then [[ ${P3DRAND:-no} = yes ]] && LN_P3DPROB=.true. fi CDP3DPROBTYPES=${CDP3DPROBTYPES:="'831'"} RP3DREJPROB=${RP3DREJPROB:="0.1"} #SLA LN_SLAPROB=.false. if ((OCPERT>0)) && [[ $LPERT_OBS = 1 ]]; then [[ ${SLARAND:-no} = yes ]] && LN_SLAPROB=.true. fi CDSLAPROBTYPES=${CDSLAPROBTYPES:="'J1'"} RSLAREJPROB=${RSLAREJPROB:="0.1"} # ---------------------------------------------------- # Perturbation of gridded seaice observation # use seaice thinning subroutine with random # selection of obs within each thinning boxes # ---------------------------------------------------- ICEPROBSEED=$NPROBREJSEED LN_SEAICEPOS=false NAM_NICETHIN=${NAM_NICETHIN:=1} if ((OCPERT>0)) && [[ $LPERT_OBS = 1 ]]; then [[ ${SEAICEPOS:-no} = yes ]] && LN_SEAICEPOS=true fi # ---------------------------------------------------- # Vertical position perturbation for profile data # use vertical thinning subroutine but use a random # selection of profile level data # ---------------------------------------------------- NPROBVTSEED=$NPROBREJSEED LN_P3DVPOS=0 if ((OCPERT>0)) && [[ $LPERT_OBS = 1 ]]; then [[ ${P3DVPOS:-0} != 0 ]] && LN_P3DVPOS=$P3DVPOS fi if ((OCTOTAL>1)) && [[ $LPERT_OBS = 1 ]]; then [[ ${P3DVPOS:-0} != 0 ]] && LN_VTHINTS=.true. fi # ---------------------------------------------------- # Horizontal position perturbation for profile data # ---------------------------------------------------- LN_P3DHPOS=false if ((OCPERT>0)) && [[ $LPERT_OBS = 1 ]]; then [[ ${P3DHPOS:-no} = yes ]] && LN_P3DHPOS=true fi P3DHTYPES=${P3DHTYPES:="'all'"} P3DHDISTS=${P3DHDISTS:="50"} P3DHPERTYPES=${P3DHPERTYPES:="1"} # perturb only the first in-situ dataset (hard coded) INSITUNUM=${INSITUNUM:="1"} NPROBOBSSEED=$NPROBREJSEED # TO DO # Add Gaussian distribution instead of random perturbation #----------------------------------------------- #FORCING PERTURBATIONS. MAB 2014 #----------------------------------------------- #NEW version of perturbations V3 if [[ $NPRVER != V2 ]] ;then # Since V3 the nprsrc is not in path anylonger, since it depends on source # The configuration is not in the path, since pert are interpolated on the fly # SOURCE: # ae: analysis error (ae, from eda). For forcing and sst. # se: structural error (difference between analyses products). In sst/sic # te: temporal error (more appropriate for the forecasts). In sst/sic # FOR_PERT_VAR is the list of variables to perturb. It may need hardcoding, # since this may depend on date and on source. # Sea-Ice perturbations in type opa with SEAICENEMOVAR are considered # as observation perturbations instead of forcing perturbations, and applied # at in the prep family at script level, as if add_prep # SST pertubation are also considered as obs perturbations, and applied # in the prep family at script level FOR_PERT_VAR=${FOR_PERT_VAR:="utau vtau sst ice_cover emp qsr"} #capital leters FOR_PERT_VAR_NEMO=${FOR_PERT_VAR_NEMO:="utau vtau emp qsr"} #capital leters # NPRSRC=${NPRSRC:="ae se"} #analyses and structural error FOR_PERT_VAR_SE=${FOR_PERT_VAR_SE:="sst ice_cover"} #structural error FOR_PERT_VAR_AE=${FOR_PERT_VAR_AE:="utau vtau sst emp qsr"} #analysis error TRES_AE=${TRES_AE:=5d} #temporal decorrelation scale for analysis error pert TRES_SE=${TRES_SE:=1m} #temporal decorrelation scale for structural error pert else #OLD version of perturbations V2 #the menus are not active. hardcoded FOR_PERT_VAR=${FOR_PERT_VAR:="utau vtau"} #capital leters FOR_PERT_VAR_NEMO=${FOR_PERT_VAR_NEMO:=""} #capital leters FOR_PERT_VAR_SE=${FOR_PERT_VAR_SE:=""} #structural error FOR_PERT_VAR_AE=${FOR_PERT_VAR_AE:=""} #analysis error FOR_PERT_TYPE=ADD TRES_AE="" TRES_SE="1m" fi #The menus should be modified to have ADD/REPLACE. #THE ADD_NEMO or ADD_PREP should be given by FOR_PERT_VAR_NEMO #FOR_PERT_VAR is the list of perturbations to create in the prep family #FOR_PERT_VAR_NEMO is the list of perturbations to read in NEMO. #THE DIFFERENCES between FOR_PERT_VAR and FOR_PERT_VAR_NEMO are added #in the prep family FOR_PERT_TYPE=${FOR_PERT_TYPE:="ADD"} #ADD_NEMO/ADD_PREP/REPLACE/ADD if [[ FOR_PERT_TYPE = @(ADD_PREP|ADD_NEMO) ]] ;then FOR_PERT_TYPE=ADD fi NAM_LNREAD_FPERT=false #read in perturbations in NEMO? FOR_PERT_VAR=${FOR_PERT_VAR:=""} FOR_PERT_VAR_NEMO=${FOR_PERT_VAR_NEMO:=""} FOR_PERT_VAR_PREP="" typeset -u FOR_PERT_VAR typeset -u FOR_PERT_VAR_NEMO typeset -u FOR_PERT_VAR_PREP typeset -u FOR_PERT_VAR_SE typeset -u FOR_PERT_VAR_AE typeset -l for_pert_var typeset -l for_pert_var_nemo typeset -l for_pert_var_prep typeset -l for_pert_var_se typeset -l for_pert_var_ae for var in UTAU VTAU EMP QNS QSR #SST ICE #SST and ICE not include in nemo do eval NAM_NN_P${var}=0 done if (( $LPERT_FOR > 0 )) ; then if [[ $FOR_PERT_TYPE = @(ADD|ADD_NEMO|ADD_PREP) ]] ;then #some variables may need to be read in NEMO FOR_PERT_VAR_PREP="" for v1 in $FOR_PERT_VAR do add=$v1 for v2 in $FOR_PERT_VAR_NEMO do if [[ $v1 = $v2 ]] ;then add=none break fi done if [[ $add != none ]] ; then FOR_PERT_VAR_PREP=$FOR_PERT_VAR_PREP$add" " fi done if [[ -n $FOR_PERT_VAR_NEMO ]] && (( OCFCPERT > 0 )) ;then NAM_LNREAD_PERT=true for vvv in $FOR_PERT_VAR_NEMO do eval NAM_NN_P$vvv=1 done fi if [[ $NPRVER = V2 ]] ;then echo "hard coded for the time being..." echo "restricted to utau/utau of S4 perturbations" fi elif [[ FOR_PERT_TYPE = 'REPLACE' ]] ;then #all forcing is replaced NAM_LNREAD_PERT=false PERT_CLASS=e2_eda echo "THIS OPTION IS NOT CODED YET" exit 1 fi for_pert_var="$FOR_PERT_VAR" for_pert_var_nemo="$FOR_PERT_VAR_NEMO" for_pert_var_prep="${FOR_PERT_VAR_PREP}" for_pert_var_ae="${FOR_PERT_VAR_AE}" for_pert_var_se="${FOR_PERT_VAR_SE}" else FOR_PERT_VAR="" FOR_PERT_VAR_NEMO="" FOR_PERT_VAR_PREP="" for_pert_var="" for_pert_var_nemo="" for_pert_var_prep="" for_pert_var_ae="" for_pert_var_se="" fi ###end forcing perturbations #if [[ ${_USEXIOS_} = 1 && ${_XIOS_PAR_} = 0 ]]; then if [[ ${_USEXIOS_} = 1 ]]; then #To be sorted. export HDF5_DISABLE_VERSION_CHECK=1 fi #end-of-include $EXPVER/include/nemo.h ($EXPVER/ifstraj_999.ecf) #include $EXPVER/include/chunk.h ($EXPVER/ifstraj_999.ecf) echo "starting chunk.h" # # Defines the control variables for three types of 'chunking', needed # for seasonal and longer runs of the coupled model. # # The first two types of chunking make up an inner level. The idea is # to split the run into a number of 'subchunks', so that each job on # the computer has a modest run-time, allowing greater flexibility of # scheduling, and the possibility of faster recovery from failures. # # Normally only the first type of subchunking is used, but in operations # we require some of the six month forecasts to be 'transmuted' into a # different forecast, and then extended to 12 months. This is implemented # as a special 'extended run' subchunk. Both types of subchunking # assume that the integration first completes, and then the whole of # the integration is processed and archived. # # The last type of chunking is an outer level of chunks, suitable for use # in long runs. When each chunk is complete, it can then be archived, # and that part of the data removed. # # The subchunks can be forced to always end on calendar month boundaries # by setting FCCHUNKSUBCM (for the multiyear suite this is not necessary, # since calendar month boundaries are always used anyway). For the extended # range forecast, this means the extended forecast starts later than # requested: some tasks need to know the requested stop, some the actual. # # In all cases, chunks must be an integer number of days to allow proper # sychronization by OASIS of the coupling - the script ensures this # automatically. For the multiyear suite, forecasts must start at 0Z on # the 1st of a month. For other suites, there is no restriction. However, # all chunks will finish at the same time as they start (0Z, 12Z) # regardless of calendar month boundaries. # # The units of the chunk boundaries and restart points are hours. # # Inputs to chunk.h: # OCSUITE - eg seasonal or multiyear # FCLENGTH - total length of standard run (inc. outer level chunks) # FCLENGTHEXTEND - total length of extended run (or 0) # FCCHUNKSUBTOT - number of subchunks in standard run (per chunk) # FCCHUNKSUBEXTENDTOT - number of subchunks in extended run (or 0) # FCCHUNKSUBCM - 1 if force subchunks to be whole calendar months (default 0) # FCCHUNKTOT - number of 'outer level' chunks (normally 1) # FCCHUNK - value of present chunk (from SMS, default 1) # FCCHUNKSUB - value of present subchunk (from SMS, default 1) # INEXTENDED - 1 if in extended family (from SMS, default 0) # # Output from chunk.h: # chunkstart - start of present subchunk # chunkstop - stop of present subchunk # restarts - string defining IFS restarts # FCSTART - start of present outer chunk (normally 0) # FCSTOP - stop of present outer chunk (normally FCLENGTH) # TOTCHUNKS - total number of chunks/subchunks # chunkprev - number of previous chunk # mchunkprev - number of previous subchunk FCCHUNKSUBEXTENDTOT=${FCCHUNKSUBEXTENDTOT:-0} FCCHUNKSUBTOT=${FCCHUNKSUBTOT:-1} FCLENGTHEXTEND=${FCLENGTHEXTEND:-0} FCCHUNKTOT=${FCCHUNKTOT:-1} FCLENGTH=${FCLENGTH:-${_FCLENGTH_}} FCCHUNKSUBCM=${FCCHUNKSUBCM:-0} if [[ $FCCHUNKSUBEXTENDTOT -gt 0 && $FCCHUNKTOT -gt 1 ]] ; then echo "Setting FCCHUNKSUBEXTENDTOT and FCCHUNKTOT greater than 1" echo "at the same time is not supported" exit 1 fi if [[ $FCCHUNKSUBEXTENDTOT -gt 0 ]] ; then TOTCHUNKS=$(( FCCHUNKSUBEXTENDTOT + FCCHUNKSUBTOT )) else TOTCHUNKS=$(( FCCHUNKTOT * FCCHUNKSUBTOT )) fi FCCHUNK=${_FCCHUNK_} FCCHUNKSUB=${_FCCHUNKSUB_} inextended=${_INEXTENDED_} NEMO_LN_RCF_WRITE=.false. NEMO_LN_RCF_READ=.false. WAM_LRSTINFDAT=.false. IFS_LRCFTIME=.false. FCSTART=0 FCLENGTH_PREV=${FCLENGTH_PREV:-0} if [[ $FCLENGTH_PREV -gt 0 ]]; then ymdstart=$(substring $BASETIME 1 8) ystart=$(substring $BASETIME 1 4) mstart=$(substring $BASETIME 5 6) ymdstop=$(newdate $BASETIME $FCLENGTH_PREV ) ymdstopMonth=$(substring $ymdstop 1 6 )01 ymdstop=$(substring $ymdstop 1 8) (( diff = (ymdstop-ymdstopMonth)*24 )) (( FCSTART = FCLENGTH_PREV-diff )) (( fclength_restart = FCLENGTH-FCSTART )) fi if [[ $TOTCHUNKS -gt 1 || ${SVRF:-no} = "yes" ]]; then echo "Multiple chunks and/or restarts" # Option 1: No outer chunks, but possibly include extended forecast chunks if [[ "$OCSUITE" != "multiyear" ]] ; then # settings for whole calendar months ymdstart=$(newdate $BASETIME $FCSTART) ymdstart=$(substring $ymdstart 1 8) ystart=$(substring $ymdstart 1 4) mstart=$(substring $ymdstart 5 6) ymdstop=$(newdate $BASETIME $FCLENGTH ) ystop=$(substring $ymdstop 1 4) mstop=$(substring $ymdstop 5 6) dstop=$(substring $ymdstop 7 8) (( nmonths = (ystop-ystart)*12+mstop-mstart )) (( dstop > 1 )) && (( nmonths = nmonths+1 )) if (( nmonths < FCCHUNKSUBTOT )); then set +x echo "Sub chunks with calendar month boundaries requested (FCCHUNKSUBCM=1)," echo "but there are more sub chunks than months, so this is not possible." echo "Please check size of FCCHUNKSUBTOT." echo $nmonths, $FCCHUNKSUBTOT set -x exit 1 fi (( nsubmon = nmonths/FCCHUNKSUBTOT )) # settings for equal split in whole days fcchunksublen=$(( (FCLENGTH - FCSTART) / FCCHUNKSUBTOT )) fcchunksublen=$(( 24*(fcchunksublen/24) )) startpoint[0]=$FCSTART subchunk=1 i=0 while (( subchunk < FCCHUNKSUBTOT )) ; do i=$((i+1)) if [[ $FCCHUNKSUBCM = 1 ]] ; then (( nmon = i * nsubmon )) mstoppoint=$(rundays $ymdstart 999 $nmon ) (( mstoppoint = mstoppoint * 24 )) if (( mstoppoint > FCLENGTH )) ; then set +x echo "Sub chunks with calendar month boundaries requested (FCCHUNKSUBCM=1)," echo "but there are more sub chunks than months, so this is not possible." echo "Please check size of FCCHUNKSUBTOT." set -x exit 1 fi startpoint[$i]=$((mstoppoint + FCSTART)) else startpoint[$i]=$((subchunk*fcchunksublen)); fi subchunk=$((subchunk + 1)) done startpoint[$FCCHUNKSUBTOT]=$FCLENGTH # For extended part, subchunk boundaries will again be the end # of calendar months, even though end of first forecast period # was not. if [[ $inextended = 1 ]] ; then dstopext=$(newdate $BASETIME $FCLENGTHEXTEND ) ystopext=$(substring $dstopext 1 4) mstopext=$(substring $dstopext 5 6) dstopext=$(substring $dstopext 7 8) (( nmonthsext = (ystopext-ystop)*12+mstopext-mstop )) (( dstopext > 1 )) && (( nmonthsext = nmonthsext+1 )) (( nsubmonext = nmonthsext/FCCHUNKSUBEXTENDTOT )) (( nmonthskip = nmonths )) (( dstop > 1 )) && (( nmonthskip = nmonthskip-1 )) fcchunksublen=$(( (FCLENGTHEXTEND-FCLENGTH) / FCCHUNKSUBEXTENDTOT )) fcchunksublen=$(( 24*(fcchunksublen/24) )) subchunk=1 i=$FCCHUNKSUBTOT while (( subchunk < FCCHUNKSUBEXTENDTOT )) ; do i=$((i+1)) if [[ $FCCHUNKSUBCM = 1 ]] ; then (( nmon = nmonthskip + subchunk * nsubmonext )) mstoppoint=$(rundays $ymdstart 999 $nmon ) (( mstoppoint = mstoppoint * 24 )) if (( mstoppoint > FCLENGTHEXTEND )) ; then set +x echo "Sub chunks with calendar month boundaries requested (FCCHUNKSUBCM=1)," echo "but there are more sub chunks than months, so this is not possible." echo "Please check size of FCCHUNKSUBEXTENDTOT." set -x exit 1 fi startpoint[$i]=$mstoppoint else startpoint[$i]=$((subchunk*fcchunksublen+FCLENGTH)); fi subchunk=$((subchunk + 1)) done startpoint[$TOTCHUNKS]=$FCLENGTHEXTEND fi chunkstartpos=$((FCCHUNKSUB-1)) chunkstoppos=$((chunkstartpos+1)) chunkstart=${startpoint[$chunkstartpos]}; chunkstop=${startpoint[$chunkstoppos]}; FCSTOP=$FCLENGTH if [[ $inextended = 1 ]] ; then FCSTOP=$FCLENGTHEXTEND fi elif [[ "$OCSUITE" = "multiyear" ]] ; then # Option 2: Multiyear suite, with outer chunks and no extended forecast chkstart=$(substring $BASETIME 7 10 ) if [[ $chkstart != "0100" ]] ; then echo "multiyear must start at beginning of month" exit 1 fi startpoint[0]=0 i=0 if [[ ${ECEARTH:-no} = yes ]] ; then mlist=$(chunks_monthly $BASETIME $FCCHUNKTOT $FCCHUNKLENGTH $FCCHUNKSUBTOT $TSTEP ) else mlist=$(chunks_monthly $BASETIME $FCCHUNKTOT $FCCHUNKLENGTH $FCCHUNKSUBTOT 3600 ) fi for mstartpointTemp in $mlist; do i=$((i+1)) startpoint[$i]=$mstartpointTemp done chunkstartpos=$(((FCCHUNK-1)*FCCHUNKSUBTOT+FCCHUNKSUB-1)) chunkstoppos=$((chunkstartpos+1)) chunkstart=${startpoint[$chunkstartpos]} chunkstop=${startpoint[$chunkstoppos]} FCSTART=${startpoint[$(((FCCHUNK - 1)*FCCHUNKSUBTOT))]} FCSTOP=${startpoint[$((FCCHUNK*FCCHUNKSUBTOT))]} fi restarts="-1,-$chunkstop" if [[ "$OCSUITE" != "multiyear" && $FCCHUNKSUB -eq $FCCHUNKSUBTOT && ${OCRUNEXFC:-no} == no ]]; then ymdstart=$(substring $BASETIME 1 8) ystart=$(substring $BASETIME 1 4) mstart=$(substring $BASETIME 5 6) ymdstop=$(newdate $BASETIME $FCLENGTH ) ymdstopMonth=$(substring $ymdstop 1 6 )01 ymdstop=$(substring $ymdstop 1 8) (( diff = (ymdstop-ymdstopMonth)*24 )) (( chunkrestart = FCLENGTH-diff )) restarts="-1,-$chunkrestart" fi elif [[ ${_RESTARTCHUNKING_} = 1 && ${_RCHUNK_NR_} -lt ${_RCHUNK_LAST_} ]] ; then restarts="-1,-$FCLENGTH" # FCLENGTH = RCHUNK_STOP, set in def file chunkstart=${_RCHUNK_START_} chunkstop=$FCLENGTH FCSTART=${_RCHUNK_START_} # was 0 before FCSTOP=$FCLENGTH elif [[ ${_RESTARTCHUNKPERIOD_} -gt 0 ]] ; then i=1 ((fcl=${_RESTARTCHUNKPERIOD_}*24)) rs="" while((fcl0 )); then mchunkprev=$FCCHUNK else chunkprev=$FCCHUNKSUBTOT mchunkprev=$((FCCHUNK - 1)) fi export chunkprev mchunkprev echo "end of chunk.h" #end-of-include $EXPVER/include/chunk.h ($EXPVER/ifstraj_999.ecf) fi if [[ $IFSMODE = early_delivery ]] ; then IFSMODE=4d_inc fi GRPSTRT=${_GRPSTRT_} GRPEND=${_GRPEND_} savdir=$WDIR memb=$GRPSTRT while [[ $memb -le $GRPEND ]] ; do if [[ $GRPEND -eq -1 ]] ; then export MEMBER=${_MEMBER_} else export MEMBER=$memb if [[ $MEMBER -eq 0 ]] ; then SUBFSFAMILY='/control' else if [[ $MEMBER -lt 10 ]] ; then SUBFSFAMILY='/enda0'$MEMBER else SUBFSFAMILY='/enda'$MEMBER fi fi WDIR=$savdir$SUBFSFAMILY ADIR=$savdir$SUBFSFAMILY fi CHECK_DIR $WDIR/vardir #======================================================================== # Activate ODB out of bounds index checking # for continuous integration testing #======================================================================== [[ $BIT_IDENTICAL == true ]] && export ODB_TEST_INDEX_RANGE=-1 #======================================================================== # Variational analysis #======================================================================== export NPES=${_NPES_} uptraj=${_uptraj_} #======================================================================== # Aeolus AUX_MET generation #======================================================================== export LAEOLUSAMD=${_LAEOLUSAMD_} #======================================================================== # HYBRID-ENKF analysis #======================================================================== if [[ $LENKF_HYBRID = true && $FSFAMILY = "/an" ]] ; then export LINITCV=true export LTRAJHR=true export LENKF=false fi #======================================================================= # set default LIST_VARDIR to not list vardir #======================================================================= export LIST_VARDIR=${LIST_VARDIR:=false} xxtest() { set -x export ECF_PORT=43333 ECF_HOST=vsms2 ECF_NAME=/e_${IFS_CYCLE}/main/06bc/an/4dvar/uptraj_0/ifsmin xforce active $ECF_NAME xalter add variable ECF_PASS FREE $ECF_NAME uptraj=0; MXUP_TRAJ=3 while [[ $uptraj -lt $MXUP_TRAJ ]]; do echo $uptraj echo ifsvar -m min -u $uptraj uptraj=$((uptraj+1)) handover 1; sleep 5 # xwait is a wrapper around ecflow_client --wait or smswait if [[ $uptraj -eq $MXUP_TRAJ ]]; then xwait "../../surf_anal==complete"; fi echo ifsvar -m traj -u $uptraj if [[ $uptraj -lt $MXUP_TRAJ ]]; then handover 0; sleep 5; fi done } handover() { set -x # export ECF_PASS=FREE #xinit() { #ecflow_client --init $$ #} #xcomplete() { #ecflow_client --complete #} tk1=ifstraj tk2=ifsmin pfm=uptraj_ curr=$ECF_NAME cross=$1 case $curr in *$tk1) next=$(echo $curr | sed -e "s:$tk1:$tk2:") ;; *$tk2) next=$(echo $curr | sed -e "s:$tk2:$tk1:") ;; esac case $cross in 1) next=$(echo $next | sed -e "s:$pfm$((uptraj-1)):$pfm${uptraj}:");;esac export curr next; xevent 1 xalter add variable ECF_PASS FREE $next || : # active before complete so that ecflow does not submit zombie echo "COMBTASK MODE!!! output may be found in previous traj or ifsmin0!!!" export ECF_NAME=$next; xinit; # prevent submit export ECF_NAME=$curr; xcomplete; export ECF_NAME=$next # xcomplete; export ECF_NAME=$next; xinit # natural flow , need suite event 1 ln -sf $(echo ${PBS_NODEFILE:=} | sed -e 's:aux:spool:').OU ${_ECF_OUT_}${ECF_NAME}.${_ECF_TRYNO_}.running || : xalter delete variable ECF_PASS FREE $curr || : } if [[ $uptraj -eq 999 ]] ; then rm -rf $WDIR/vardir_999 mkdir -p $WDIR/vardir_999 cd $WDIR/vardir_999 ifsvar -m $mode -u 999 elif [[ $COMBTASK == 1 ]] && [[ $mode == min ]] && [[ $uptraj == 0 ]] && [[ ${_ECF_NAME_} != *calc* ]] && [[ ${_ECF_NAME_} != *fsobs* ]]; then while [[ $uptraj -lt $MXUP_TRAJ ]]; do cd $WDIR/vardir rout=$ECF_OUT/${ECF_NAME}.0.comb;mkdir -p $(dirname $rout);[ -f $rout ] && rm $rout && printenv > $rout \rm $ECF_OUT/${ECF_NAME}.1 || : ifsvar -m min -u $uptraj | tee -a $rout xwait "ifstsave==complete" uptraj=$((uptraj+1)) handover 1 if [[ $uptraj -eq $MXUP_TRAJ ]]; then xwait "../../surf_anal==complete"; fi cd $WDIR/vardir rout=$ECF_OUT/${ECF_NAME}.0.comb; rm $rout && printenv > $rout \rm $ECF_OUT/${ECF_NAME}.1 || : ifsvar -m traj -u $uptraj | tee -a $rout if [[ $uptraj -lt $MXUP_TRAJ ]]; then handover 0; sleep 5; fi done elif [[ $OD_MODE == true ]] && [[ $COMBTASK == 1 ]] && [[ $mode == traj ]] && [[ $uptraj -lt $MXUP_TRAJ ]] && [[ $uptraj -gt 0 ]] && [[ ${_ECF_NAME_} != *depar* ]] ; then cd $WDIR/vardir; ifsvar -m traj -u $uptraj handover 0 cd $WDIR/vardir rout=$ECF_OUT/${ECF_NAME}.0.comb;mkdir -p $(dirname $rout);[ -f $rout ] && rm $rout && printenv > $rout \rm $ECF_OUT/${ECF_NAME}.1 || : ifsvar -m min -u $uptraj | tee -a $rout else cd $WDIR/vardir #PL Coupled mode for ifstraj if [[ ${LOUTLOOP:-false} = true && ${_mode_} = traj ]] ; then if [[ $uptraj -lt $NOUTMAX ]]; then OUTSTREAMS=0 LNWRITERST=false fi prep_nemoIFS fi ifsvar -m $mode -u $uptraj fi # [[ $uptraj -eq 999 ]] if [[ ${LOUTLOOP:-false} = true && ${_mode_} = traj && $uptraj -ne 999 ]] ; then #include $EXPVER/include/nemo_outer_output.h ($EXPVER/ifstraj_999.ecf) mv ${EXPVER}_*_grid_*.nc $WDIROUTER || true mv ${EXPVER}_*_icemod_*.nc $WDIROUTER || true mv ${EXPVER}_*_restart*.nc ${CN_OCERST_OUT_PATH:-$WDIROUTER} || true mv ${EXPVER}_*_EMPave.dat ${CN_OCERST_OUT_PATH:-$WDIROUTER} || true mv ${EXPVER}_*_bias*.nc ${CN_OCERST_OUT_PATH:-$WDIROUTER} || true mv profb_* ${CN_OCEOBS_OUT_PATH:-$WDIROUTER} || true mv slafb_* ${CN_OCEOBS_OUT_PATH:-$WDIROUTER} || true mv sstfb_* ${CN_OCEOBS_OUT_PATH:-$WDIROUTER} || true mv grdsst_* ${CN_OCEOBS_OUT_PATH:-$WDIROUTER} || true mv velfb_* ${CN_OCEOBS_OUT_PATH:-$WDIROUTER} || true mv seaicefb_* ${CN_OCEOBS_OUT_PATH:-$WDIROUTER} || true mv assim_background_state* $WDIROUTER || true mv STRAIT.dat $OCNDIRRESTOUTPUT/STRAIT.dat.$BASETIME || true mv FWB.stat $OCNDIRRESTOUTPUT/FWB.stat.$BASETIME || true mv ice_evolu $WDIROUTER/${EXPVER}_ice_evolu.$BASETIME || true mv trajectory_icebergs_*.nc ${OCEOUTPATH:-$WDIROUTER} || true #mv ice_fram $WDIROUTER/${EXPVER}_ice_fram.$BASETIME || true for f in ocean.output solver.stat drhook* time.step timing.output do if [[ -f $f ]]; then mv $f $WDIROUTER/${f}.${_NOUTIT_} fi done # # Move some constant files into OCNDIRRESTOUTPUT if their are not already # there. Useful for constant files which can be automatically generated # if not present. # if [[ ${OCPERT:-0} = 0 ]]; then for f in xypos_global.nc do if [[ ! -f $OCNDIROUTER/$f ]]; then if [[ -f $f ]]; then mv $f $OCNDIROUTER/$f fi fi done fi #end-of-include $EXPVER/include/nemo_outer_output.h ($EXPVER/ifstraj_999.ecf) fi if [[ $LIST_VARDIR = true ]] ; then ls -l fi memb=$(( memb + 1 )) done check_norms # Remove NODE.001_01 from the working directory. It is just a link to the real # file in $LOGS, deleting the link prevents subsequent tasks overwriting the # version in $LOGS. Must wait until after check_norms has run, because it will # expect the file to be in in the working directory still. rm -f NODE.001_01 # reset variable that may have changed thank to Operator/Analyst to circumvent observation issue if [[ $uptraj == $MXUP_TRAJ ]] && [[ $OD_MODE == true ]]; then HOLDER=/${_SUITE_}/main/${EMOS_BASE} if [[ $LUSE_REDUCED_OBS == true ]]; then xalter change variable LUSE_REDUCED_OBS false $HOLDER fi if [[ $LCONTINUOUS_DA == false ]] && [[ ${LMACC:-false} != true ]]; then if [[ $STREAM == DA ]] || [[ $STREAM == SCDA ]]; then xalter change variable LCONTINUOUS_DA true $HOLDER fi fi fi #include $EXPVER/include/endt.h ($EXPVER/ifstraj_999.ecf) #========================================================================== # End task. # Clean up and exit #========================================================================== wait #========================================================================== # Print out script timers #========================================================================== REPORT_SCRIPT_INFO xcomplete trap 0 #========================================================================== # Remove temporary directory #========================================================================== if [[ ${_KEEP_WORKDIR_} = "no" ]]; then \cd # Ensure we're not in the directory we're about to delete [[ -n $TMPDIR && -d $TMPDIR ]] && rm -rf $TMPDIR 2>/dev/null || true fi echo Job Completed at $(date) exit #end-of-include $EXPVER/include/endt.h ($EXPVER/ifstraj_999.ecf) sleep ${_VAR_DELAY_}