From c988cfba5b566ecf64ea3286c67aae562155a6db Mon Sep 17 00:00:00 2001 From: "Chan-hoo.Jeon" Date: Tue, 30 May 2023 17:24:59 +0000 Subject: [PATCH 01/27] add ecflow to prod --- parm/ecflow/defs/aqm-cycled.def | 818 ++++++++++++++++++ .../scripts/aqm_manager/aqm_manager.ecf | 31 + .../scripts/aqm_manager/data_cleanup.ecf | 31 + parm/ecflow/scripts/forecast/jforecast.ecf | 24 + parm/ecflow/scripts/nexus/jnexus_emission.ecf | 26 + parm/ecflow/scripts/nexus/jnexus_gfs_sfc.ecf | 23 + .../scripts/nexus/jnexus_post_split.ecf | 23 + parm/ecflow/scripts/post/jpost.ecf | 28 + parm/ecflow/scripts/prep/jget_extrn_ics.ecf | 24 + parm/ecflow/scripts/prep/jget_extrn_lbcs.ecf | 23 + parm/ecflow/scripts/prep/jics.ecf | 29 + parm/ecflow/scripts/prep/jlbcs.ecf | 48 + parm/ecflow/scripts/prep/jmake_ics.ecf | 24 + parm/ecflow/scripts/prep/jmake_lbcs.ecf | 24 + .../scripts/product/jbias_correction_o3.ecf | 27 + .../scripts/product/jbias_correction_pm25.ecf | 43 + parm/ecflow/scripts/product/jpost_stat_o3.ecf | 23 + .../scripts/product/jpost_stat_pm25.ecf | 23 + .../ecflow/scripts/product/jpre_post_stat.ecf | 23 + .../scripts/pts_fire_emis/jfire_emission.ecf | 23 + .../scripts/pts_fire_emis/jpoint_source.ecf | 26 + ush/create_ecflow_scripts.py | 138 +++ ush/generate_FV3LAM_wflow.py | 42 +- ush/load_modules_run_task.sh | 55 +- 24 files changed, 1556 insertions(+), 43 deletions(-) create mode 100644 parm/ecflow/defs/aqm-cycled.def create mode 100644 parm/ecflow/scripts/aqm_manager/aqm_manager.ecf create mode 100644 parm/ecflow/scripts/aqm_manager/data_cleanup.ecf create mode 100755 parm/ecflow/scripts/forecast/jforecast.ecf create mode 100755 parm/ecflow/scripts/nexus/jnexus_emission.ecf create mode 100755 parm/ecflow/scripts/nexus/jnexus_gfs_sfc.ecf create mode 100755 parm/ecflow/scripts/nexus/jnexus_post_split.ecf create mode 100755 parm/ecflow/scripts/post/jpost.ecf create mode 100755 parm/ecflow/scripts/prep/jget_extrn_ics.ecf create mode 100755 parm/ecflow/scripts/prep/jget_extrn_lbcs.ecf create mode 100755 parm/ecflow/scripts/prep/jics.ecf create mode 100755 parm/ecflow/scripts/prep/jlbcs.ecf create mode 100755 parm/ecflow/scripts/prep/jmake_ics.ecf create mode 100755 parm/ecflow/scripts/prep/jmake_lbcs.ecf create mode 100755 parm/ecflow/scripts/product/jbias_correction_o3.ecf create mode 100755 parm/ecflow/scripts/product/jbias_correction_pm25.ecf create mode 100755 parm/ecflow/scripts/product/jpost_stat_o3.ecf create mode 100755 parm/ecflow/scripts/product/jpost_stat_pm25.ecf create mode 100755 parm/ecflow/scripts/product/jpre_post_stat.ecf create mode 100755 parm/ecflow/scripts/pts_fire_emis/jfire_emission.ecf create mode 100755 parm/ecflow/scripts/pts_fire_emis/jpoint_source.ecf create mode 100644 ush/create_ecflow_scripts.py diff --git a/parm/ecflow/defs/aqm-cycled.def b/parm/ecflow/defs/aqm-cycled.def new file mode 100644 index 0000000000..89ec7b93d1 --- /dev/null +++ b/parm/ecflow/defs/aqm-cycled.def @@ -0,0 +1,818 @@ +extern /totality_limit:TOTALITY +extern /cycled_v16_3/primary/00/gfs/v16.3/gfs/jgfs_forecast +extern /cycled_v16_3/primary/06/gfs/v16.3/gfs/jgfs_forecast +extern /cycled_v16_3/primary/12/gfs/v16.3/gfs/jgfs_forecast +extern /cycled_v16_3/primary/18/gfs/v16.3/gfs/jgfs_forecast + +suite emc_aqm + inlimit /totality_limit:TOTALITY + family primary + edit aqm_ver 'v7.0.46' + edit PACKAGEHOME '/lfs/h2/emc/global/noscrub/%EMC_USER%/para/packages/aqm.%aqm_ver%' + edit NET 'aqm' + edit RUN 'aqm' + edit PROJ 'AQM' + edit PROJENVIR 'DEV' + edit MACHINE_SITE 'development' + edit ENVIR 'prod' + edit QUEUE 'dev' + edit QUEUE_ARCH 'dev_transfer' + edit OUTPUTDIR '/lfs/h2/emc/ptmp/%EMC_USER%/ecflow_aqm/para/output/prod/today' + family 00 + edit CYC '00' + family aqm + family v1.0 + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts' + family nexus + task jnexus_gfs_sfc + trigger /cycled_v16_3/primary/18/gfs/v16.3/gfs/jgfs_forecast==complete or ../../../../18/aqm/v1.0/aqm_manager/aqm_manager:release_next_cycle + # NCO replace with time based trigger + task jnexus_emission_00 + edit NSPT '00' + trigger ./jnexus_gfs_sfc==complete + task jnexus_emission_01 + edit NSPT '01' + trigger ./jnexus_gfs_sfc==complete + task jnexus_emission_02 + edit NSPT '02' + trigger ./jnexus_gfs_sfc==complete + task jnexus_emission_03 + edit NSPT '03' + trigger ./jnexus_gfs_sfc==complete + task jnexus_emission_04 + edit NSPT '04' + trigger ./jnexus_gfs_sfc==complete + task jnexus_emission_05 + edit NSPT '05' + trigger ./jnexus_gfs_sfc==complete + task jnexus_post_split + trigger ./jnexus_emission_00==complete and ./jnexus_emission_01==complete and ./jnexus_emission_02==complete + endfamily + family prep + task jget_extrn_ics + trigger ../nexus/jnexus_gfs_sfc==active or ../nexus/jnexus_gfs_sfc==complete + task jget_extrn_lbcs + trigger ../nexus/jnexus_gfs_sfc==active or ../nexus/jnexus_gfs_sfc==complete + task jmake_ics + trigger ./jget_extrn_ics==complete + task jmake_lbcs + trigger ./jget_extrn_lbcs==complete + task jics + trigger ./jmake_ics==complete + task jlbcs + trigger ./jmake_lbcs==complete + endfamily + family pts_fire_emis + task jpoint_source + trigger ../nexus/jnexus_gfs_sfc==active or ../nexus/jnexus_gfs_sfc==complete + task jfire_emission + trigger ../nexus/jnexus_gfs_sfc==active or ../nexus/jnexus_gfs_sfc==complete + endfamily + family forecast + task jforecast + trigger ../nexus==complete and ../prep==complete and ../pts_fire_emis==complete + endfamily + family post + task jpost_f000 + edit FHR '000' + trigger ../forecast==complete + task jpost_f001 + edit FHR '001' + trigger ../forecast==complete + task jpost_f002 + edit FHR '002' + trigger ../forecast==complete + task jpost_f003 + edit FHR '003' + trigger ../forecast==complete + task jpost_f004 + edit FHR '004' + trigger ../forecast==complete + task jpost_f005 + edit FHR '005' + trigger ../forecast==complete + task jpost_f006 + edit FHR '006' + trigger ../forecast==complete + endfamily + family product + task jpre_post_stat + trigger ../forecast==complete + task jpost_stat_o3 + trigger ./jpre_post_stat==complete + task jpost_stat_pm25 + trigger ./jpre_post_stat==complete + task jbias_correction_o3 + trigger ./jpre_post_stat==complete + task jbias_correction_pm25 + trigger ./jpre_post_stat==complete + endfamily + family aqm_manager + task aqm_manager + trigger ../nexus/jnexus_gfs_sfc==active or ../nexus/jnexus_gfs_sfc==complete + event 1 release_next_cycle + event 2 requeue_cycle + task data_cleanup + trigger ../forecast==complete + endfamily + endfamily # v1.0 + endfamily # aqm + endfamily # 00 + family 06 + edit CYC '06' + family aqm + family v1.0 + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts' + family nexus + task jnexus_gfs_sfc + trigger /cycled_v16_3/primary/18/gfs/v16.3/gfs/jgfs_forecast==complete or ../../../../00/aqm/v1.0/aqm_manager/aqm_manager:release_next_cycle + # NCO replace with time based trigger + task jnexus_emission_00 + edit NSPT '00' + trigger ./jnexus_gfs_sfc==complete + task jnexus_emission_01 + edit NSPT '01' + trigger ./jnexus_gfs_sfc==complete + task jnexus_emission_02 + edit NSPT '02' + trigger ./jnexus_gfs_sfc==complete + task jnexus_emission_03 + edit NSPT '03' + trigger ./jnexus_gfs_sfc==complete + task jnexus_emission_04 + edit NSPT '04' + trigger ./jnexus_gfs_sfc==complete + task jnexus_emission_05 + edit NSPT '05' + trigger ./jnexus_gfs_sfc==complete + task jnexus_post_split + trigger ./jnexus_emission_00==complete and ./jnexus_emission_01==complete and ./jnexus_emission_02==complete + endfamily + family prep + task jget_extrn_ics + trigger ../nexus/jnexus_gfs_sfc==active or ../nexus/jnexus_gfs_sfc==complete + task jget_extrn_lbcs + trigger ../nexus/jnexus_gfs_sfc==active or ../nexus/jnexus_gfs_sfc==complete + task jmake_ics + trigger ./jget_extrn_ics==complete + task jmake_lbcs + trigger ./jget_extrn_lbcs==complete + task jics + trigger ./jmake_ics==complete + task jlbcs + trigger ./jmake_lbcs==complete + endfamily + family pts_fire_emis + task jpoint_source + trigger ../nexus/jnexus_gfs_sfc==active or ../nexus/jnexus_gfs_sfc==complete + task jfire_emission + trigger ../nexus/jnexus_gfs_sfc==active or ../nexus/jnexus_gfs_sfc==complete + endfamily + family forecast + task jforecast + trigger ../nexus==complete and ../prep==complete and ../pts_fire_emis==complete + endfamily + family post + task jpost_f000 + edit FHR '000' + trigger ../forecast==complete + task jpost_f001 + edit FHR '001' + trigger ../forecast==complete + task jpost_f002 + edit FHR '002' + trigger ../forecast==complete + task jpost_f003 + edit FHR '003' + trigger ../forecast==complete + task jpost_f004 + edit FHR '004' + trigger ../forecast==complete + task jpost_f005 + edit FHR '005' + trigger ../forecast==complete + task jpost_f006 + edit FHR '006' + trigger ../forecast==complete + task jpost_f007 + edit FHR '007' + trigger ../forecast==complete + task jpost_f008 + edit FHR '008' + trigger ../forecast==complete + task jpost_f009 + edit FHR '009' + trigger ../forecast==complete + task jpost_f010 + edit FHR '010' + trigger ../forecast==complete + task jpost_f011 + edit FHR '011' + trigger ../forecast==complete + task jpost_f012 + edit FHR '012' + trigger ../forecast==complete + task jpost_f013 + edit FHR '013' + trigger ../forecast==complete + task jpost_f014 + edit FHR '014' + trigger ../forecast==complete + task jpost_f015 + edit FHR '015' + trigger ../forecast==complete + task jpost_f016 + edit FHR '016' + trigger ../forecast==complete + task jpost_f017 + edit FHR '017' + trigger ../forecast==complete + task jpost_f018 + edit FHR '018' + trigger ../forecast==complete + task jpost_f019 + edit FHR '019' + trigger ../forecast==complete + task jpost_f020 + edit FHR '020' + trigger ../forecast==complete + task jpost_f021 + edit FHR '021' + trigger ../forecast==complete + task jpost_f022 + edit FHR '022' + trigger ../forecast==complete + task jpost_f023 + edit FHR '023' + trigger ../forecast==complete + task jpost_f024 + edit FHR '024' + trigger ../forecast==complete + task jpost_f025 + edit FHR '025' + trigger ../forecast==complete + task jpost_f026 + edit FHR '026' + trigger ../forecast==complete + task jpost_f027 + edit FHR '027' + trigger ../forecast==complete + task jpost_f028 + edit FHR '028' + trigger ../forecast==complete + task jpost_f029 + edit FHR '029' + trigger ../forecast==complete + task jpost_f030 + edit FHR '030' + trigger ../forecast==complete + task jpost_f031 + edit FHR '031' + trigger ../forecast==complete + task jpost_f032 + edit FHR '032' + trigger ../forecast==complete + task jpost_f033 + edit FHR '033' + trigger ../forecast==complete + task jpost_f034 + edit FHR '034' + trigger ../forecast==complete + task jpost_f035 + edit FHR '035' + trigger ../forecast==complete + task jpost_f036 + edit FHR '036' + trigger ../forecast==complete + task jpost_f037 + edit FHR '037' + trigger ../forecast==complete + task jpost_f038 + edit FHR '038' + trigger ../forecast==complete + task jpost_f039 + edit FHR '039' + trigger ../forecast==complete + task jpost_f040 + edit FHR '040' + trigger ../forecast==complete + task jpost_f041 + edit FHR '041' + trigger ../forecast==complete + task jpost_f042 + edit FHR '042' + trigger ../forecast==complete + task jpost_f043 + edit FHR '043' + trigger ../forecast==complete + task jpost_f044 + edit FHR '044' + trigger ../forecast==complete + task jpost_f045 + edit FHR '045' + trigger ../forecast==complete + task jpost_f046 + edit FHR '046' + trigger ../forecast==complete + task jpost_f047 + edit FHR '047' + trigger ../forecast==complete + task jpost_f048 + edit FHR '048' + trigger ../forecast==complete + task jpost_f049 + edit FHR '049' + trigger ../forecast==complete + task jpost_f050 + edit FHR '050' + trigger ../forecast==complete + task jpost_f051 + edit FHR '051' + trigger ../forecast==complete + task jpost_f052 + edit FHR '052' + trigger ../forecast==complete + task jpost_f053 + edit FHR '053' + trigger ../forecast==complete + task jpost_f054 + edit FHR '054' + trigger ../forecast==complete + task jpost_f055 + edit FHR '055' + trigger ../forecast==complete + task jpost_f056 + edit FHR '056' + trigger ../forecast==complete + task jpost_f057 + edit FHR '057' + trigger ../forecast==complete + task jpost_f058 + edit FHR '058' + trigger ../forecast==complete + task jpost_f059 + edit FHR '059' + trigger ../forecast==complete + task jpost_f060 + edit FHR '060' + trigger ../forecast==complete + task jpost_f061 + edit FHR '061' + trigger ../forecast==complete + task jpost_f062 + edit FHR '062' + trigger ../forecast==complete + task jpost_f063 + edit FHR '063' + trigger ../forecast==complete + task jpost_f064 + edit FHR '064' + trigger ../forecast==complete + task jpost_f065 + edit FHR '065' + trigger ../forecast==complete + task jpost_f066 + edit FHR '066' + trigger ../forecast==complete + task jpost_f067 + edit FHR '067' + trigger ../forecast==complete + task jpost_f068 + edit FHR '068' + trigger ../forecast==complete + task jpost_f069 + edit FHR '069' + trigger ../forecast==complete + task jpost_f070 + edit FHR '070' + trigger ../forecast==complete + task jpost_f071 + edit FHR '071' + trigger ../forecast==complete + task jpost_f072 + edit FHR '072' + trigger ../forecast==complete + endfamily + family product + task jpre_post_stat + trigger ../forecast==complete + task jpost_stat_o3 + trigger ./jpre_post_stat==complete + task jpost_stat_pm25 + trigger ./jpre_post_stat==complete + task jbias_correction_o3 + trigger ./jpre_post_stat==complete + task jbias_correction_pm25 + trigger ./jpre_post_stat==complete + endfamily + family aqm_manager + task aqm_manager + trigger ../nexus/jnexus_gfs_sfc==active or ../nexus/jnexus_gfs_sfc==complete + event 1 release_next_cycle + event 2 requeue_cycle + task data_cleanup + trigger ../forecast==complete + endfamily + endfamily # v1.0 + endfamily # aqm + endfamily # 06 + family 12 + edit CYC '12' + family aqm + family v1.0 + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts' + family nexus + task jnexus_gfs_sfc + trigger /cycled_v16_3/primary/18/gfs/v16.3/gfs/jgfs_forecast==complete or ../../../../06/aqm/v1.0/aqm_manager/aqm_manager:release_next_cycle + # NCO replace with time based trigger + task jnexus_emission_00 + edit NSPT '00' + trigger ./jnexus_gfs_sfc==complete + task jnexus_emission_01 + edit NSPT '01' + trigger ./jnexus_gfs_sfc==complete + task jnexus_emission_02 + edit NSPT '02' + trigger ./jnexus_gfs_sfc==complete + task jnexus_emission_03 + edit NSPT '03' + trigger ./jnexus_gfs_sfc==complete + task jnexus_emission_04 + edit NSPT '04' + trigger ./jnexus_gfs_sfc==complete + task jnexus_emission_05 + edit NSPT '05' + trigger ./jnexus_gfs_sfc==complete + task jnexus_post_split + trigger ./jnexus_emission_00==complete and ./jnexus_emission_01==complete and ./jnexus_emission_02==complete + endfamily + family prep + task jget_extrn_ics + trigger ../nexus/jnexus_gfs_sfc==active or ../nexus/jnexus_gfs_sfc==complete + task jget_extrn_lbcs + trigger ../nexus/jnexus_gfs_sfc==active or ../nexus/jnexus_gfs_sfc==complete + task jmake_ics + trigger ./jget_extrn_ics==complete + task jmake_lbcs + trigger ./jget_extrn_lbcs==complete + task jics + trigger ./jmake_ics==complete + task jlbcs + trigger ./jmake_lbcs==complete + endfamily + family pts_fire_emis + task jpoint_source + trigger ../nexus/jnexus_gfs_sfc==active or ../nexus/jnexus_gfs_sfc==complete + task jfire_emission + trigger ../nexus/jnexus_gfs_sfc==active or ../nexus/jnexus_gfs_sfc==complete + endfamily + family forecast + task jforecast + trigger ../nexus==complete and ../prep==complete and ../pts_fire_emis==complete + endfamily + family post + task jpost_f000 + edit FHR '000' + trigger ../forecast==complete + task jpost_f001 + edit FHR '001' + trigger ../forecast==complete + task jpost_f002 + edit FHR '002' + trigger ../forecast==complete + task jpost_f003 + edit FHR '003' + trigger ../forecast==complete + task jpost_f004 + edit FHR '004' + trigger ../forecast==complete + task jpost_f005 + edit FHR '005' + trigger ../forecast==complete + task jpost_f006 + edit FHR '006' + trigger ../forecast==complete + task jpost_f007 + edit FHR '007' + trigger ../forecast==complete + task jpost_f008 + edit FHR '008' + trigger ../forecast==complete + task jpost_f009 + edit FHR '009' + trigger ../forecast==complete + task jpost_f010 + edit FHR '010' + trigger ../forecast==complete + task jpost_f011 + edit FHR '011' + trigger ../forecast==complete + task jpost_f012 + edit FHR '012' + trigger ../forecast==complete + task jpost_f013 + edit FHR '013' + trigger ../forecast==complete + task jpost_f014 + edit FHR '014' + trigger ../forecast==complete + task jpost_f015 + edit FHR '015' + trigger ../forecast==complete + task jpost_f016 + edit FHR '016' + trigger ../forecast==complete + task jpost_f017 + edit FHR '017' + trigger ../forecast==complete + task jpost_f018 + edit FHR '018' + trigger ../forecast==complete + task jpost_f019 + edit FHR '019' + trigger ../forecast==complete + task jpost_f020 + edit FHR '020' + trigger ../forecast==complete + task jpost_f021 + edit FHR '021' + trigger ../forecast==complete + task jpost_f022 + edit FHR '022' + trigger ../forecast==complete + task jpost_f023 + edit FHR '023' + trigger ../forecast==complete + task jpost_f024 + edit FHR '024' + trigger ../forecast==complete + task jpost_f025 + edit FHR '025' + trigger ../forecast==complete + task jpost_f026 + edit FHR '026' + trigger ../forecast==complete + task jpost_f027 + edit FHR '027' + trigger ../forecast==complete + task jpost_f028 + edit FHR '028' + trigger ../forecast==complete + task jpost_f029 + edit FHR '029' + trigger ../forecast==complete + task jpost_f030 + edit FHR '030' + trigger ../forecast==complete + task jpost_f031 + edit FHR '031' + trigger ../forecast==complete + task jpost_f032 + edit FHR '032' + trigger ../forecast==complete + task jpost_f033 + edit FHR '033' + trigger ../forecast==complete + task jpost_f034 + edit FHR '034' + trigger ../forecast==complete + task jpost_f035 + edit FHR '035' + trigger ../forecast==complete + task jpost_f036 + edit FHR '036' + trigger ../forecast==complete + task jpost_f037 + edit FHR '037' + trigger ../forecast==complete + task jpost_f038 + edit FHR '038' + trigger ../forecast==complete + task jpost_f039 + edit FHR '039' + trigger ../forecast==complete + task jpost_f040 + edit FHR '040' + trigger ../forecast==complete + task jpost_f041 + edit FHR '041' + trigger ../forecast==complete + task jpost_f042 + edit FHR '042' + trigger ../forecast==complete + task jpost_f043 + edit FHR '043' + trigger ../forecast==complete + task jpost_f044 + edit FHR '044' + trigger ../forecast==complete + task jpost_f045 + edit FHR '045' + trigger ../forecast==complete + task jpost_f046 + edit FHR '046' + trigger ../forecast==complete + task jpost_f047 + edit FHR '047' + trigger ../forecast==complete + task jpost_f048 + edit FHR '048' + trigger ../forecast==complete + task jpost_f049 + edit FHR '049' + trigger ../forecast==complete + task jpost_f050 + edit FHR '050' + trigger ../forecast==complete + task jpost_f051 + edit FHR '051' + trigger ../forecast==complete + task jpost_f052 + edit FHR '052' + trigger ../forecast==complete + task jpost_f053 + edit FHR '053' + trigger ../forecast==complete + task jpost_f054 + edit FHR '054' + trigger ../forecast==complete + task jpost_f055 + edit FHR '055' + trigger ../forecast==complete + task jpost_f056 + edit FHR '056' + trigger ../forecast==complete + task jpost_f057 + edit FHR '057' + trigger ../forecast==complete + task jpost_f058 + edit FHR '058' + trigger ../forecast==complete + task jpost_f059 + edit FHR '059' + trigger ../forecast==complete + task jpost_f060 + edit FHR '060' + trigger ../forecast==complete + task jpost_f061 + edit FHR '061' + trigger ../forecast==complete + task jpost_f062 + edit FHR '062' + trigger ../forecast==complete + task jpost_f063 + edit FHR '063' + trigger ../forecast==complete + task jpost_f064 + edit FHR '064' + trigger ../forecast==complete + task jpost_f065 + edit FHR '065' + trigger ../forecast==complete + task jpost_f066 + edit FHR '066' + trigger ../forecast==complete + task jpost_f067 + edit FHR '067' + trigger ../forecast==complete + task jpost_f068 + edit FHR '068' + trigger ../forecast==complete + task jpost_f069 + edit FHR '069' + trigger ../forecast==complete + task jpost_f070 + edit FHR '070' + trigger ../forecast==complete + task jpost_f071 + edit FHR '071' + trigger ../forecast==complete + task jpost_f072 + edit FHR '072' + trigger ../forecast==complete + endfamily + family product + task jpre_post_stat + trigger ../forecast==complete + task jpost_stat_o3 + trigger ./jpre_post_stat==complete + task jpost_stat_pm25 + trigger ./jpre_post_stat==complete + task jbias_correction_o3 + trigger ./jpre_post_stat==complete + task jbias_correction_pm25 + trigger ./jpre_post_stat==complete + endfamily + family aqm_manager + task aqm_manager + trigger ../nexus/jnexus_gfs_sfc==active or ../nexus/jnexus_gfs_sfc==complete + event 1 release_next_cycle + event 2 requeue_cycle + task data_cleanup + trigger ../forecast==complete + endfamily + endfamily # v1.0 + endfamily # aqm + endfamily # 12 + family 18 + edit CYC '18' + family aqm + family v1.0 + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts' + family nexus + task jnexus_gfs_sfc + trigger /cycled_v16_3/primary/18/gfs/v16.3/gfs/jgfs_forecast==complete or ../../../../12/aqm/v1.0/aqm_manager/aqm_manager:release_next_cycle + # NCO replace with time based trigger + task jnexus_emission_00 + edit NSPT '00' + trigger ./jnexus_gfs_sfc==complete + task jnexus_emission_01 + edit NSPT '01' + trigger ./jnexus_gfs_sfc==complete + task jnexus_emission_02 + edit NSPT '02' + trigger ./jnexus_gfs_sfc==complete + task jnexus_emission_03 + edit NSPT '03' + trigger ./jnexus_gfs_sfc==complete + task jnexus_emission_04 + edit NSPT '04' + trigger ./jnexus_gfs_sfc==complete + task jnexus_emission_05 + edit NSPT '05' + trigger ./jnexus_gfs_sfc==complete + task jnexus_post_split + trigger ./jnexus_emission_00==complete and ./jnexus_emission_01==complete and ./jnexus_emission_02==complete + endfamily + family prep + task jget_extrn_ics + trigger ../nexus/jnexus_gfs_sfc==active or ../nexus/jnexus_gfs_sfc==complete + task jget_extrn_lbcs + trigger ../nexus/jnexus_gfs_sfc==active or ../nexus/jnexus_gfs_sfc==complete + task jmake_ics + trigger ./jget_extrn_ics==complete + task jmake_lbcs + trigger ./jget_extrn_lbcs==complete + task jics + trigger ./jmake_ics==complete + task jlbcs + trigger ./jmake_lbcs==complete + endfamily + family pts_fire_emis + task jpoint_source + trigger ../nexus/jnexus_gfs_sfc==active or ../nexus/jnexus_gfs_sfc==complete + task jfire_emission + trigger ../nexus/jnexus_gfs_sfc==active or ../nexus/jnexus_gfs_sfc==complete + endfamily + family forecast + task jforecast + trigger ../nexus==complete and ../prep==complete and ../pts_fire_emis==complete + endfamily + family post + task jpost_f000 + edit FHR '000' + trigger ../forecast==complete + task jpost_f001 + edit FHR '001' + trigger ../forecast==complete + task jpost_f002 + edit FHR '002' + trigger ../forecast==complete + task jpost_f003 + edit FHR '003' + trigger ../forecast==complete + task jpost_f004 + edit FHR '004' + trigger ../forecast==complete + task jpost_f005 + edit FHR '005' + trigger ../forecast==complete + task jpost_f006 + edit FHR '006' + trigger ../forecast==complete + endfamily + family product + task jpre_post_stat + trigger ../forecast==complete + task jpost_stat_o3 + trigger ./jpre_post_stat==complete + task jpost_stat_pm25 + trigger ./jpre_post_stat==complete + task jbias_correction_o3 + trigger ./jpre_post_stat==complete + task jbias_correction_pm25 + trigger ./jpre_post_stat==complete + endfamily + family aqm_manager + task aqm_manager + trigger ../nexus/jnexus_gfs_sfc==active or ../nexus/jnexus_gfs_sfc==complete + event 1 release_next_cycle + event 2 requeue_cycle + task data_cleanup + trigger ../forecast==complete + endfamily + endfamily # v1.0 + endfamily # aqm + endfamily # 18 + endfamily # primary +endsuite diff --git a/parm/ecflow/scripts/aqm_manager/aqm_manager.ecf b/parm/ecflow/scripts/aqm_manager/aqm_manager.ecf new file mode 100644 index 0000000000..5759fda05d --- /dev/null +++ b/parm/ecflow/scripts/aqm_manager/aqm_manager.ecf @@ -0,0 +1,31 @@ +#PBS -N %RUN%_aqm_manager_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=06:00:00 +#PBS -l select=1:ncpus=1:mem=1GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=aqm +%include +%include + +############################################################ +# Load modules +############################################################ + +module list + +export cyc=%CYC% +export cycle=t${cyc}z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEaqm}/jobs/JAQM_MANAGER + +%include +%manual + +%end diff --git a/parm/ecflow/scripts/aqm_manager/data_cleanup.ecf b/parm/ecflow/scripts/aqm_manager/data_cleanup.ecf new file mode 100644 index 0000000000..7cf558ce86 --- /dev/null +++ b/parm/ecflow/scripts/aqm_manager/data_cleanup.ecf @@ -0,0 +1,31 @@ +#PBS -N %RUN%_data_cleanup_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=06:00:00 +#PBS -l select=1:ncpus=1:mem=1GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=aqm +%include +%include + +############################################################ +# Load modules +############################################################ + +module list + +export cyc=%CYC% +export cycle=t${cyc}z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEaqm}/jobs/JDATA_CLEANUP + +%include +%manual + +%end diff --git a/parm/ecflow/scripts/forecast/jforecast.ecf b/parm/ecflow/scripts/forecast/jforecast.ecf new file mode 100755 index 0000000000..c8eaafb97e --- /dev/null +++ b/parm/ecflow/scripts/forecast/jforecast.ecf @@ -0,0 +1,24 @@ +#PBS -N aqm_forecast_%CYC% +#PBS -j oe +#PBS -S /bin/bash +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=04:00:00 +#PBS -l select=14:mpiprocs=128:ompthreads=1:ncpus=128 +#PBS -l place=vscatter:exclhost +#PBS -l debug=true + +model=aqm +export cyc="%CYC%" +export subcyc=0 + +%include +%include + +. {{ exptdir }}/var_denfs.sh +. ${USHdir}/load_modules_run_task.sh run_fcst "${JOBSdir}/JREGIONAL_RUN_FCST" + +%include + +%manual +%end diff --git a/parm/ecflow/scripts/nexus/jnexus_emission.ecf b/parm/ecflow/scripts/nexus/jnexus_emission.ecf new file mode 100755 index 0000000000..ca804e74ed --- /dev/null +++ b/parm/ecflow/scripts/nexus/jnexus_emission.ecf @@ -0,0 +1,26 @@ +#PBS -N aqm_nexus_emission_%NSPT%_%CYC% +#PBS -j oe +#PBS -S /bin/bash +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=01:00:00 +#PBS -l select=4:mpiprocs=64:ompthreads=2:ncpus=128 +#PBS -l place=vscatter:exclhost +#PBS -l debug=true + +model=aqm +export cyc="%CYC%" +%include +%include + +export nspt="%NSPT%" +export subcyc=0 +export DCOMINfire=/lfs/h2/emc/physics/noscrub/kai.wang/RAVE_fire/RAVE_NA_NRT + +. {{ exptdir }}/var_denfs.sh +. ${USHdir}/load_modules_run_task.sh nexus_emission "${JOBSdir}/JREGIONAL_NEXUS_EMISSION" + +%include + +%manual +%end diff --git a/parm/ecflow/scripts/nexus/jnexus_gfs_sfc.ecf b/parm/ecflow/scripts/nexus/jnexus_gfs_sfc.ecf new file mode 100755 index 0000000000..cd7153e711 --- /dev/null +++ b/parm/ecflow/scripts/nexus/jnexus_gfs_sfc.ecf @@ -0,0 +1,23 @@ +#PBS -N aqm_nexus_gfs_sfc_%CYC% +#PBS -j oe +#PBS -S /bin/bash +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:30:00 +#PBS -l select=1:mpiprocs=1:ncpus=1 +#PBS -l debug=true + +model=aqm +export cyc="%CYC%" +%include +%include + +export subcyc=0 + +. {{ exptdir }}/var_denfs.sh +. ${USHdir}/load_modules_run_task.sh nexus_gfs_sfc "${JOBSdir}/JREGIONAL_NEXUS_GFS_SFC" + +%include + +%manual +%end diff --git a/parm/ecflow/scripts/nexus/jnexus_post_split.ecf b/parm/ecflow/scripts/nexus/jnexus_post_split.ecf new file mode 100755 index 0000000000..e169e587bc --- /dev/null +++ b/parm/ecflow/scripts/nexus/jnexus_post_split.ecf @@ -0,0 +1,23 @@ +#PBS -N aqm_nexus_post_split_%CYC% +#PBS -j oe +#PBS -S /bin/bash +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:30:00 +#PBS -l select=1:mpiprocs=1:ncpus=1 +#PBS -l debug=true + +model=aqm +export cyc="%CYC%" +%include +%include + +export subcyc=0 + +. {{ exptdir }}/var_denfs.sh +. ${USHdir}/load_modules_run_task.sh nexus_post_split "${JOBSdir}/JREGIONAL_NEXUS_POST_SPLIT" + +%include + +%manual +%end diff --git a/parm/ecflow/scripts/post/jpost.ecf b/parm/ecflow/scripts/post/jpost.ecf new file mode 100755 index 0000000000..02a1b59799 --- /dev/null +++ b/parm/ecflow/scripts/post/jpost.ecf @@ -0,0 +1,28 @@ +#PBS -N aqm_post_%FHR%_%CYC% +#PBS -j oe +#PBS -S /bin/bash +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:15:00 +#PBS -l select=2:mpiprocs=24:ncpus=24 +#PBS -l place=vscatter:exclhost +#PBS -l debug=true + +model=aqm +export cyc="%CYC%" +%include +%include + +module list + +export subcyc=0 +export fhr="%FHR%" +#export DATAFCST=$DATAROOT/${model}_forecast_${cyc}.${PDY}${cyc} + +. {{ exptdir }}/var_denfs.sh +. ${USHdir}/load_modules_run_task.sh run_post "${JOBSdir}/JREGIONAL_RUN_POST" + +%include + +%manual +%end diff --git a/parm/ecflow/scripts/prep/jget_extrn_ics.ecf b/parm/ecflow/scripts/prep/jget_extrn_ics.ecf new file mode 100755 index 0000000000..5521dafff4 --- /dev/null +++ b/parm/ecflow/scripts/prep/jget_extrn_ics.ecf @@ -0,0 +1,24 @@ +#PBS -N aqm_get_extrn_ics_%CYC% +#PBS -j oe +#PBS -S /bin/bash +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:45:00 +#PBS -l select=1:mpiprocs=1:ncpus=1:mem=2G +#PBS -l debug=true + +model=aqm +export cyc="%CYC%" +%include +%include + +export subcyc=0 +#export ICS_OR_LBCS=ICS + +. {{ exptdir }}/var_denfs.sh +. ${USHdir}/load_modules_run_task.sh get_extrn_ics "${JOBSdir}/JREGIONAL_GET_EXTRN_MDL_FILES" + +%include + +%manual +%end diff --git a/parm/ecflow/scripts/prep/jget_extrn_lbcs.ecf b/parm/ecflow/scripts/prep/jget_extrn_lbcs.ecf new file mode 100755 index 0000000000..0df3ddc624 --- /dev/null +++ b/parm/ecflow/scripts/prep/jget_extrn_lbcs.ecf @@ -0,0 +1,23 @@ +#PBS -N aqm_get_extrn_lbcs_%CYC% +#PBS -j oe +#PBS -S /bin/bash +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=02:00:00 +#PBS -l select=1:mpiprocs=1:ncpus=1:mem=2G +#PBS -l debug=true + +model=aqm +export cyc="%CYC%" +%include +%include + +export subcyc=0 + +. {{ exptdir }}/var_denfs.sh +. ${USHdir}/load_modules_run_task.sh get_extrn_lbcs "${JOBSdir}/JREGIONAL_GET_EXTRN_MDL_FILES" + +%include + +%manual +%end diff --git a/parm/ecflow/scripts/prep/jics.ecf b/parm/ecflow/scripts/prep/jics.ecf new file mode 100755 index 0000000000..a99f4aa666 --- /dev/null +++ b/parm/ecflow/scripts/prep/jics.ecf @@ -0,0 +1,29 @@ +#PBS -N aqm_ics_%CYC% +#PBS -j oe +#PBS -S /bin/bash +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:30:00 +#PBS -l select=1:mpiprocs=1:ncpus=1 +#PBS -l debug=true + +model=aqm +export cyc="%CYC%" +%include +%include + +export subcyc=0 +SDATE=$($NDATE -6 ${PDY}${cyc}) +PDYS_P1=$(echo $SDATE | cut -c1-8) +cycs_p1=$(echo $SDATE | cut -c9-10) + +. {{ exptdir }}/var_denfs.sh + +export PREV_CYCLE_DIR=${COMaqm}/${model}.${PDYS_P1}/${cycs_p1} + +. ${USHdir}/load_modules_run_task.sh aqm_ics "${JOBSdir}/JREGIONAL_AQM_ICS" + +%include + +%manual +%end diff --git a/parm/ecflow/scripts/prep/jlbcs.ecf b/parm/ecflow/scripts/prep/jlbcs.ecf new file mode 100755 index 0000000000..7ea0aebb80 --- /dev/null +++ b/parm/ecflow/scripts/prep/jlbcs.ecf @@ -0,0 +1,48 @@ +#PBS -N aqm_lbcs_%CYC% +#PBS -j oe +#PBS -S /bin/bash +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:20:00 +#PBS -l select=1:mpiprocs=24:ncpus=24 +#PBS -l debug=true + +model=aqm +export cyc="%CYC%" +%include +%include + +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load envvar/${envvar_ver} +module load cray-mpich/${cray_mpich_ver} +module load libjpeg/${libjpeg_ver} +module load zlib/${zlib_ver} +module load libpng/${libpng_ver} +module load hdf5/${hdf5_ver} +module load netcdf/${netcdf_ver} +module load cray-pals/${cray_pals_ver} +module load wgrib2/${wgrib2_ver} +module load udunits/${udunits_ver} +module load gsl/${gsl_ver} +module load nco/${nco_ver} +module load python/${python_ver} + +module list + +export subcyc=0 +. ${HOMEaqm}/parm/config/var_defns.sh +. $USHdir/source_util_funcs.sh +machine=$(echo_lowercase $MACHINE) +export ICS_OR_LBCS=LBCS +export DCOMINchem_lbcs=/lfs/h2/emc/lam/noscrub/RRFS_CMAQ/LBCS/AQM_NA13km_AM4_v1 +export DCOMINgefs=/lfs/h2/emc/lam/noscrub/RRFS_CMAQ/GEFS_DATA +export COMINgefs=$(compath.py ${envir}/gefs/${gefs_ver}) + +${HOMEaqm}/jobs/JREGIONAL_AQM_LBCS + +%include + +%manual +%end diff --git a/parm/ecflow/scripts/prep/jmake_ics.ecf b/parm/ecflow/scripts/prep/jmake_ics.ecf new file mode 100755 index 0000000000..ba41ff7ead --- /dev/null +++ b/parm/ecflow/scripts/prep/jmake_ics.ecf @@ -0,0 +1,24 @@ +#PBS -N aqm_make_ics_%CYC% +#PBS -j oe +#PBS -S /bin/bash +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:30:00 +#PBS -l select=4:mpiprocs=12:ncpus=12 +#PBS -l place=vscatter:exclhost +#PBS -l debug=true + +model=aqm +export cyc="%CYC%" +%include +%include + +export subcyc=0 + +. {{ exptdir }}/var_denfs.sh +. ${USHdir}/load_modules_run_task.sh make_ics "${JOBSdir}/JREGIONAL_MAKE_ICS" + +%include + +%manual +%end diff --git a/parm/ecflow/scripts/prep/jmake_lbcs.ecf b/parm/ecflow/scripts/prep/jmake_lbcs.ecf new file mode 100755 index 0000000000..50a39533c0 --- /dev/null +++ b/parm/ecflow/scripts/prep/jmake_lbcs.ecf @@ -0,0 +1,24 @@ +#PBS -N aqm_make_lbcs_%CYC% +#PBS -j oe +#PBS -S /bin/bash +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:30:00 +#PBS -l select=1:mpiprocs=128:ncpus=128 +#PBS -l place=vscatter:exclhost +#PBS -l debug=true + +model=aqm +export cyc="%CYC%" +%include +%include + +export subcyc=0 + +. {{ exptdir }}/var_denfs.sh +. ${USHdir}/load_modules_run_task.sh make_lbcs "${JOBSdir}/JREGIONAL_MAKE_LBCS" + +%include + +%manual +%end diff --git a/parm/ecflow/scripts/product/jbias_correction_o3.ecf b/parm/ecflow/scripts/product/jbias_correction_o3.ecf new file mode 100755 index 0000000000..841baa06aa --- /dev/null +++ b/parm/ecflow/scripts/product/jbias_correction_o3.ecf @@ -0,0 +1,27 @@ +#PBS -N aqm_bias_correction_o3_%CYC% +#PBS -j oe +#PBS -S /bin/bash +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:30:00 +#PBS -l select=1:mpiprocs=1:ompthreads=32:ncpus=32:mem=120G +#PBS -l debug=true + +model=aqm +export cyc="%CYC%" +%include +%include + +export subcyc=0 + +. {{ exptdir }}/var_denfs.sh + +export DCOMINairnow=/lfs/h1/ops/prod/dcom +export COMOUTbicor=${COMaqm} + +. ${USHdir}/load_modules_run_task.sh bias_correction_o3 "${JOBSdir}/JREGIONAL_BIAS_CORRECTION_O3" + +%include + +%manual +%end diff --git a/parm/ecflow/scripts/product/jbias_correction_pm25.ecf b/parm/ecflow/scripts/product/jbias_correction_pm25.ecf new file mode 100755 index 0000000000..5db1a969a7 --- /dev/null +++ b/parm/ecflow/scripts/product/jbias_correction_pm25.ecf @@ -0,0 +1,43 @@ +#PBS -N aqm_bias_correction_pm25_%CYC% +#PBS -j oe +#PBS -S /bin/bash +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:30:00 +#PBS -l select=1:mpiprocs=1:ompthreads=32:ncpus=32:mem=120G +#PBS -l debug=true + +model=aqm +export cyc="%CYC%" +%include +%include + +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load envvar/${envvar_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load hdf5/${hdf5_ver} +module load netcdf/${netcdf_ver} +module load libjpeg/${libjpeg_ver} +module load zlib/${zlib_ver} +module load libpng/${libpng_ver} +module load grib_util/${grib_util_ver} +module load wgrib2/${wgrib2_ver} +module load python/${python_ver} + +module list + +export subcyc=0 +. {{ exptdir }}/var_denfs.sh + +export DCOMINairnow=/lfs/h1/ops/prod/dcom +export COMOUTbicor=${COMaqm} + +. ${USHdir}/load_modules_run_task.sh bias_correction_pm25 "${JOBSdir}/JREGIONAL_BIAS_CORRECTION_PM25" + +%include + +%manual +%end diff --git a/parm/ecflow/scripts/product/jpost_stat_o3.ecf b/parm/ecflow/scripts/product/jpost_stat_o3.ecf new file mode 100755 index 0000000000..f241aaa8d3 --- /dev/null +++ b/parm/ecflow/scripts/product/jpost_stat_o3.ecf @@ -0,0 +1,23 @@ +#PBS -N aqm_post_stat_o3_%CYC% +#PBS -j oe +#PBS -S /bin/bash +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:30:00 +#PBS -l select=1:mpiprocs=1:ncpus=1:mem=120G +#PBS -l debug=true + +model=aqm +export cyc="%CYC%" +%include +%include + +export subcyc=0 + +. {{ exptdir }}/var_denfs.sh +. ${USHdir}/load_modules_run_task.sh post_stat_o3 "${JOBSdir}/JREGIONAL_POST_STAT_O3" + +%include + +%manual +%end diff --git a/parm/ecflow/scripts/product/jpost_stat_pm25.ecf b/parm/ecflow/scripts/product/jpost_stat_pm25.ecf new file mode 100755 index 0000000000..bbbffa7f62 --- /dev/null +++ b/parm/ecflow/scripts/product/jpost_stat_pm25.ecf @@ -0,0 +1,23 @@ +#PBS -N aqm_post_stat_pm25_%CYC% +#PBS -j oe +#PBS -S /bin/bash +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:30:00 +#PBS -l select=1:mpiprocs=1:ncpus=1:mem=120G +#PBS -l debug=true + +model=aqm +export cyc="%CYC%" +%include +%include + +export subcyc=0 + +. {{ exptdir }}/var_denfs.sh +. ${USHdir}/load_modules_run_task.sh post_stat_pm25 "${JOBSdir}/JREGIONAL_POST_STAT_PM25" + +%include + +%manual +%end diff --git a/parm/ecflow/scripts/product/jpre_post_stat.ecf b/parm/ecflow/scripts/product/jpre_post_stat.ecf new file mode 100755 index 0000000000..0c2cc0ad29 --- /dev/null +++ b/parm/ecflow/scripts/product/jpre_post_stat.ecf @@ -0,0 +1,23 @@ +#PBS -N aqm_pre_post_stat_%CYC% +#PBS -j oe +#PBS -S /bin/bash +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:30:00 +#PBS -l select=1:mpiprocs=1:ncpus=1 +#PBS -l debug=true + +model=aqm +export cyc="%CYC%" +%include +%include + +export subcyc=0 + +. {{ exptdir }}/var_denfs.sh +. ${USHdir}/load_modules_run_task.sh pre_post_stat "${JOBSdir}/JREGIONAL_PRE_POST_STAT" + +%include + +%manual +%end diff --git a/parm/ecflow/scripts/pts_fire_emis/jfire_emission.ecf b/parm/ecflow/scripts/pts_fire_emis/jfire_emission.ecf new file mode 100755 index 0000000000..12283d8c0b --- /dev/null +++ b/parm/ecflow/scripts/pts_fire_emis/jfire_emission.ecf @@ -0,0 +1,23 @@ +#PBS -N aqm_fire_emission_%CYC% +#PBS -j oe +#PBS -S /bin/bash +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:30:00 +#PBS -l select=1:mpiprocs=1:ncpus=1 +#PBS -l debug=true + +model=aqm +export cyc="%CYC%" +%include +%include + +export subcyc=0 + +. {{ exptdir }}/var_denfs.sh +. ${USHdir}/load_modules_run_task.sh fire_emission "${JOBSdir}/JREGIONAL_FIRE_EMISSION" + +%include + +%manual +%end diff --git a/parm/ecflow/scripts/pts_fire_emis/jpoint_source.ecf b/parm/ecflow/scripts/pts_fire_emis/jpoint_source.ecf new file mode 100755 index 0000000000..cfab27a2c1 --- /dev/null +++ b/parm/ecflow/scripts/pts_fire_emis/jpoint_source.ecf @@ -0,0 +1,26 @@ +#PBS -N aqm_point_source_%CYC% +#PBS -j oe +#PBS -S /bin/bash +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=01:00:00 +#PBS -l select=1:mpiprocs=1:ncpus=1 +#PBS -l debug=true + +model=aqm +export cyc="%CYC%" +%include +%include + +export subcyc=0 + +. {{ exptdir }}/var_denfs.sh + +export DCOMINpt_src=/lfs/h2/emc/physics/noscrub/Youhua.Tang/nei2016v1-pt/v2023-01-PT + +. ${USHdir}/load_modules_run_task.sh point_source "${JOBSdir}/JREGIONAL_POINT_SOURCE" + +%include + +%manual +%end diff --git a/ush/create_ecflow_scripts.py b/ush/create_ecflow_scripts.py new file mode 100644 index 0000000000..1d8b58cb1a --- /dev/null +++ b/ush/create_ecflow_scripts.py @@ -0,0 +1,138 @@ +#!/usr/bin/env python3 + +import os +import sys +from textwrap import dedent +import jinja2 as j2 +from jinja2 import meta +import yaml +import re + +from python_utils import ( + import_vars, + print_info_msg, + print_err_msg_exit, + cfg_to_yaml_str, + load_shell_config, + flatten_dict, + cp_vrfy, + ln_vrfy, + mkdir_vrfy +) + +from fill_jinja_template import fill_jinja_template + +def create_ecflow_scripts(global_var_defns_fp): + """ Creates ecFlow job cards and definition script in the specific + experiment directory.""" + + cfg = load_shell_config(global_var_defns_fp) + cfg = flatten_dict(cfg) + import_vars(dictionary=cfg) + + # + #----------------------------------------------------------------------- + # + # Create ecFlow job cards and definition script in the experiment directory. + # + #----------------------------------------------------------------------- + # + print_info_msg(f""" + Creating ecFlow job cards and definition scripts in the specified + experiment directory (EXPTDIR): + EXPTDIR = '{EXPTDIR}'""", verbose=VERBOSE) + + # + #----------------------------------------------------------------------- + # + # Copy definition directory into experiment directory. + # + #----------------------------------------------------------------------- + # + cp_vrfy("-r", os.path.join(PARMdir,"ecflow/defs"), os.path.join(EXPTDIR, "ecf")) + + # + #----------------------------------------------------------------------- + # + # Create job cards for tasks + # + #----------------------------------------------------------------------- + # + grp_aqm_manager = ["aqm_manager", "data_cleanup"] + grp_forecast = ["jforecast"] + grp_nexus = ["jnexus_emission", "jnexus_gfs_sfc", "jnexus_post_split"] + grp_post = ["jpost"] + grp_prep = ["jget_extrn_ics", "jget_extrn_lbcs", "jics", "jlbcs", "jmake_ics", "jmake_lbcs"] + grp_product = ["jbias_correction_o3", "jbias_correction_pm25", "jpost_stat_o3", "jpost_stat_pm25", "jpre_post_stat"] + grp_pts_fire_emis = ["jfire_emission", "jpoint_source"] + + tsk_grp = {"aqm_manager": grp_aqm_manager, "forecast": grp_forecast, "nexus": grp_nexus, "post": grp_post, "prep": grp_prep, "product": grp_product, "pts_fire_emis": grp_pts_fire_emis} + + task_all = grp_aqm_manager + grp_forecast + grp_nexus + grp_post + grp_prep + grp_product + grp_pts_fire_emis + + print(tsk_grp) + + for tsk in task_all: + print('Creating ecFlow job card for', tsk) + # + # Set template file path + # + for grp_k, grp_v in tsk_grp.items(): + if tsk in grp_v: + ecflow_script_group = grp_k + break + + mkdir_vrfy("-p", os.path.join(EXPTDIR, "ecf/scripts", ecflow_script_group)) + ecflow_script_fn = f"{tsk}.ecf" + ecflow_script_tmpl_fp = os.path.join(PARMdir, "ecflow/scripts", ecflow_script_group, ecflow_script_fn) + ecflow_script_fp = os.path.join(EXPTDIR, "ecf/scripts", ecflow_script_group, ecflow_script_fn) + + settings = { + "exptdir": EXPTDIR, + } + settings_str = cfg_to_yaml_str(settings) + + # Call a python script to generate the ecFlow job card. + args = ["-q", + "-o", ecflow_script_fp, + "-t", ecflow_script_tmpl_fp, + "-u", settings_str ] + + try: + fill_jinja_template(args) + except: + raise Exception( + dedent( + f"""Call to create the ecFlow job card for '{tsk}' failed.""" + ) + ) + + # + #----------------------------------------------------------------------- + # + # Create soft-link for mulitple scripts + # + #----------------------------------------------------------------------- + # + max_fcst_len = max(FCST_LEN_CYCL)+1 + print(max_fcst_len) + for itsk in range(0, max_fcst_len): + ecf_script_orgi = os.path.join(EXPTDIR, "ecf/scripts/post", "jpost.ecf") + ecf_script_link_fn = f"jpost_f{itsk:03d}.ecf" + ecf_script_link = os.path.join(EXPTDIR, "ecf/scripts/post", ecf_script_link_fn) + ln_vrfy(f"""-fsn '{ecf_script_orgi}' '{ecf_script_link}'""") + + for itsk in range(0, NUM_SPLIT_NEXUS): + ecf_script_orgi = os.path.join(EXPTDIR, "ecf/scripts/nexus", "jnexus_emission.ecf") + ecf_script_link_fn = f"jnexus_emission_f{itsk:02d}.ecf" + ecf_script_link = os.path.join(EXPTDIR, "ecf/scripts/nexus", ecf_script_link_fn) + ln_vrfy(f"""-fsn '{ecf_script_orgi}' '{ecf_script_link}'""") + + + return True + + +if __name__ == "__main__": + create_ecflow_scripts(global_var_defns_fp) + + diff --git a/ush/generate_FV3LAM_wflow.py b/ush/generate_FV3LAM_wflow.py index 9be5dfdf91..92ad6536e4 100755 --- a/ush/generate_FV3LAM_wflow.py +++ b/ush/generate_FV3LAM_wflow.py @@ -38,7 +38,7 @@ from fill_jinja_template import fill_jinja_template from set_namelist import set_namelist from check_python_version import check_python_version - +from create_ecflow_scripts import create_ecflow_scripts def generate_FV3LAM_wflow(ushdir, logfile: str = "log.generate_FV3LAM_wflow", debug: bool = False) -> str: """Function to setup a forecast experiment and create a workflow @@ -246,21 +246,21 @@ def generate_FV3LAM_wflow(ushdir, logfile: str = "log.generate_FV3LAM_wflow", de # # ----------------------------------------------------------------------- # - exptdir = expt_config["workflow"]["EXPTDIR"] - wflow_launch_script_fp = expt_config["workflow"]["WFLOW_LAUNCH_SCRIPT_FP"] - wflow_launch_script_fn = expt_config["workflow"]["WFLOW_LAUNCH_SCRIPT_FN"] - log_info( - f""" - Creating symlink in the experiment directory (EXPTDIR) that points to the + exptdir = expt_config["workflow"]["EXPTDIR"] + wflow_launch_script_fp = expt_config["workflow"]["WFLOW_LAUNCH_SCRIPT_FP"] + wflow_launch_script_fn = expt_config["workflow"]["WFLOW_LAUNCH_SCRIPT_FN"] + log_info( + f""" + Creating symlink in the experiment directory (EXPTDIR) that points to the workflow launch script (WFLOW_LAUNCH_SCRIPT_FP): EXPTDIR = '{exptdir}' WFLOW_LAUNCH_SCRIPT_FP = '{wflow_launch_script_fp}'""", verbose=verbose, - ) + ) - create_symlink_to_file( - wflow_launch_script_fp, os.path.join(exptdir, wflow_launch_script_fn), False - ) + create_symlink_to_file( + wflow_launch_script_fp, os.path.join(exptdir, wflow_launch_script_fn), False + ) # # ----------------------------------------------------------------------- # @@ -274,12 +274,24 @@ def generate_FV3LAM_wflow(ushdir, logfile: str = "log.generate_FV3LAM_wflow", de # in the flattened expt_config dictionary # TODO: Reference all these variables in their respective # dictionaries, instead. - import_vars(dictionary=flatten_dict(expt_config)) - export_vars(source_dict=flatten_dict(expt_config)) + import_vars(dictionary=flatten_dict(expt_config)) + export_vars(source_dict=flatten_dict(expt_config)) + + if USE_CRON_TO_RELAUNCH: + add_crontab_line() + + elif expt_config["platform"]["WORKFLOW_MANAGER"] == "ecflow": + # create directoies for ecflow in EXPTDIR + global_var_defns_fp = expt_config["workflow"]["GLOBAL_VAR_DEFNS_FP"] + exptdir = expt_config["workflow"]["EXPTDIR"] + mkdir_vrfy("-p", os.path.join(exptdir, "ecf")) + mkdir_vrfy("-p", os.path.join(exptdir, "ecf/scripts")) + mkdir_vrfy("-p", os.path.join(exptdir, "ecf/defs")) - if USE_CRON_TO_RELAUNCH: - add_crontab_line() + # create ecflow definition file and job cards + create_ecflow_scripts(global_var_defns_fp) + exit() # # Copy or symlink fix files # diff --git a/ush/load_modules_run_task.sh b/ush/load_modules_run_task.sh index 1bc6aac62b..7e996b5087 100755 --- a/ush/load_modules_run_task.sh +++ b/ush/load_modules_run_task.sh @@ -99,16 +99,15 @@ set -u #----------------------------------------------------------------------- # machine=$(echo_lowercase $MACHINE) -if [ "${WORKFLOW_MANAGER}" = "rocoto" ]; then - source "${HOMEaqm}/etc/lmod-setup.sh" ${machine} - if [ "${machine}" != "wcoss2" ]; then - module use "${HOMEaqm}/modulefiles" - module load "${BUILD_MOD_FN}" || print_err_msg_exit "\ - Loading of platform- and compiler-specific module file (BUILD_MOD_FN) +source "${HOMEaqm}/etc/lmod-setup.sh" ${machine} +if [ "${machine}" != "wcoss2" ]; then + module use "${HOMEaqm}/modulefiles" + module load "${BUILD_MOD_FN}" || print_err_msg_exit "\ + Loading of platform- and compiler-specific module file (BUILD_MOD_FN) for the workflow task specified by task_name failed: task_name = \"${task_name}\" BUILD_MOD_FN = \"${BUILD_MOD_FN}\"" - fi +fi # #----------------------------------------------------------------------- # @@ -135,9 +134,9 @@ for the workflow task specified by task_name failed: # #----------------------------------------------------------------------- # - modules_dir="$HOMEaqm/modulefiles/tasks/$machine" - modulefile_name="${task_name}" - default_modules_dir="$HOMEaqm/modulefiles" +modules_dir="$HOMEaqm/modulefiles/tasks/$machine" +modulefile_name="${task_name}" +default_modules_dir="$HOMEaqm/modulefiles" # #----------------------------------------------------------------------- # @@ -145,32 +144,32 @@ for the workflow task specified by task_name failed: # #----------------------------------------------------------------------- # - print_info_msg "$VERBOSE" " +print_info_msg "$VERBOSE" " Loading modules for task \"${task_name}\" ..." - module use "${modules_dir}" || print_err_msg_exit "\ -Call to \"module use\" command failed." - - # source version file (run) only if it is specified in versions directory - VERSION_FILE="${HOMEaqm}/versions/${RUN_VER_FN}" - if [ -f ${VERSION_FILE} ]; then - . ${VERSION_FILE} - fi - # - # Load the .local module file if available for the given task - # - modulefile_local="${task_name}.local" - if [ -f ${modules_dir}/${modulefile_local}.lua ]; then - module load "${modulefile_local}" || print_err_msg_exit "\ +module use "${modules_dir}" || print_err_msg_exit "\ + Call to \"module use\" command failed." + +# source version file (run) only if it is specified in versions directory +VERSION_FILE="${HOMEaqm}/versions/${RUN_VER_FN}" +if [ -f ${VERSION_FILE} ]; then + . ${VERSION_FILE} +fi +# +# Load the .local module file if available for the given task +# +modulefile_local="${task_name}.local" +if [ -f ${modules_dir}/${modulefile_local}.lua ]; then + module load "${modulefile_local}" || print_err_msg_exit "\ Loading .local module file (in directory specified by modules_dir) for the specified task (task_name) failed: task_name = \"${task_name}\" modulefile_local = \"${modulefile_local}\" modules_dir = \"${modules_dir}\"" - fi - - module list fi + +module list + # Modules that use conda and need an environment activated will set the # SRW_ENV variable to the name of the environment to be activated. That # must be done within the script, and not inside the module. Do that From 581be69a695a83ba4c612ddf3cae279171e6cfcf Mon Sep 17 00:00:00 2001 From: chan-hoo Date: Wed, 31 May 2023 17:24:09 +0000 Subject: [PATCH 02/27] add defn and env file for ecflow --- .../{aqm-cycled.def => ecf_defn_template.def} | 14 +-- parm/ecflow/env/env_template.sh | 5 ++ ush/config.aqm.nco.realtime.yaml | 2 + ush/create_ecflow_scripts.py | 85 +++++++++++++++++-- 4 files changed, 93 insertions(+), 13 deletions(-) rename parm/ecflow/defs/{aqm-cycled.def => ecf_defn_template.def} (99%) create mode 100644 parm/ecflow/env/env_template.sh diff --git a/parm/ecflow/defs/aqm-cycled.def b/parm/ecflow/defs/ecf_defn_template.def similarity index 99% rename from parm/ecflow/defs/aqm-cycled.def rename to parm/ecflow/defs/ecf_defn_template.def index 89ec7b93d1..ed42db0219 100644 --- a/parm/ecflow/defs/aqm-cycled.def +++ b/parm/ecflow/defs/ecf_defn_template.def @@ -7,17 +7,17 @@ extern /cycled_v16_3/primary/18/gfs/v16.3/gfs/jgfs_forecast suite emc_aqm inlimit /totality_limit:TOTALITY family primary - edit aqm_ver 'v7.0.46' - edit PACKAGEHOME '/lfs/h2/emc/global/noscrub/%EMC_USER%/para/packages/aqm.%aqm_ver%' - edit NET 'aqm' - edit RUN 'aqm' - edit PROJ 'AQM' + edit aqm_ver '{{ model_ver }}' + edit PACKAGEHOME '{{ exptdir }}' + edit NET '{{ net }}' + edit RUN '{{ run }}' + edit PROJ '{{ net | upper }}' edit PROJENVIR 'DEV' edit MACHINE_SITE 'development' - edit ENVIR 'prod' + edit ENVIR '{{ envir }}' edit QUEUE 'dev' edit QUEUE_ARCH 'dev_transfer' - edit OUTPUTDIR '/lfs/h2/emc/ptmp/%EMC_USER%/ecflow_aqm/para/output/prod/today' + edit OUTPUTDIR '{{ opsroot }}/ecf_output' family 00 edit CYC '00' family aqm diff --git a/parm/ecflow/env/env_template.sh b/parm/ecflow/env/env_template.sh new file mode 100644 index 0000000000..25197b04e7 --- /dev/null +++ b/parm/ecflow/env/env_template.sh @@ -0,0 +1,5 @@ +export ECF_HOME="{{ ecf_home }}" +export ECF_DATA_ROOT="{{ ecf_data_root }}" +export ECF_OUTPUTDIR="{{ ecf_outputdir }}" +export ECF_COMDIR="{{ ecf_comdir }}" +export LFS_OUTPUTDIR="{{ lfs_outputdir }}" diff --git a/ush/config.aqm.nco.realtime.yaml b/ush/config.aqm.nco.realtime.yaml index 3609bdc246..1c250d1556 100644 --- a/ush/config.aqm.nco.realtime.yaml +++ b/ush/config.aqm.nco.realtime.yaml @@ -4,6 +4,8 @@ user: RUN_ENVIR: nco MACHINE: wcoss2 ACCOUNT: [account name] +platform: + WORKFLOW_MANAGER: rocoto workflow: USE_CRON_TO_RELAUNCH: true CRON_RELAUNCH_INTVL_MNTS: 3 diff --git a/ush/create_ecflow_scripts.py b/ush/create_ecflow_scripts.py index 1d8b58cb1a..2ad6ec1e22 100644 --- a/ush/create_ecflow_scripts.py +++ b/ush/create_ecflow_scripts.py @@ -45,11 +45,11 @@ def create_ecflow_scripts(global_var_defns_fp): # #----------------------------------------------------------------------- # - # Copy definition directory into experiment directory. + # Copy include directory into experiment directory. # #----------------------------------------------------------------------- # - cp_vrfy("-r", os.path.join(PARMdir,"ecflow/defs"), os.path.join(EXPTDIR, "ecf")) + cp_vrfy("-r", os.path.join(PARMdir,"ecflow/include"), os.path.join(EXPTDIR, "ecf")) # #----------------------------------------------------------------------- @@ -70,8 +70,6 @@ def create_ecflow_scripts(global_var_defns_fp): task_all = grp_aqm_manager + grp_forecast + grp_nexus + grp_post + grp_prep + grp_product + grp_pts_fire_emis - print(tsk_grp) - for tsk in task_all: print('Creating ecFlow job card for', tsk) # @@ -115,7 +113,6 @@ def create_ecflow_scripts(global_var_defns_fp): #----------------------------------------------------------------------- # max_fcst_len = max(FCST_LEN_CYCL)+1 - print(max_fcst_len) for itsk in range(0, max_fcst_len): ecf_script_orgi = os.path.join(EXPTDIR, "ecf/scripts/post", "jpost.ecf") ecf_script_link_fn = f"jpost_f{itsk:03d}.ecf" @@ -128,6 +125,83 @@ def create_ecflow_scripts(global_var_defns_fp): ecf_script_link = os.path.join(EXPTDIR, "ecf/scripts/nexus", ecf_script_link_fn) ln_vrfy(f"""-fsn '{ecf_script_orgi}' '{ecf_script_link}'""") + # + #----------------------------------------------------------------------- + # + # Create definition file + # + #----------------------------------------------------------------------- + # + ecflow_defn_fn = f"{NET}_cycled.def" + ecflow_defn_tmpl_fp = os.path.join(PARMdir, "ecflow/defs", "ecf_defn_template.def") + ecflow_defn_fp = os.path.join(EXPTDIR, "ecf/defs", ecflow_defn_fn) + + settings = { + "model_ver": model_ver, + "exptdir": EXPTDIR, + "net": NET, + "run": RUN, + "envir": envir, + "opsroot": OPSROOT, + } + settings_str = cfg_to_yaml_str(settings) + + # Call a python script to generate the ecFlow job card. + args = ["-q", + "-o", ecflow_defn_fp, + "-t", ecflow_defn_tmpl_fp, + "-u", settings_str ] + + try: + fill_jinja_template(args) + except: + raise Exception( + dedent( + f"""Call to create the ecFlow definition file failed.""" + ) + ) + + # + #----------------------------------------------------------------------- + # + # Create ecFlow enviroment file + # + #----------------------------------------------------------------------- + # + ecflow_env_fn = "ecf_env.def" + ecflow_env_tmpl_fp = os.path.join(PARMdir, "ecflow/env", "env_template.sh") + ecflow_env_fp = os.path.join(EXPTDIR, "ecf", ecflow_env_fn) + + ecf_home = f"{OPSROOT}/ecflow" + ecf_data_root = f"{OPSROOT}/ecflow/data" + ecf_outputdir = f"{OPSROOT}/ecflow/output" + ecf_comdir = f"{OPSROOT}/ecflow/com" + lfs_outputdir = f"{OPSROOT}/ecflow/lsf" + + settings = { + "ecf_home": ecf_home, + "ecf_data_root": ecf_data_root, + "ecf_outputdir": ecf_outputdir, + "ecf_comdir": ecf_comdir, + "lfs_outputdir": lfs_outputdir, + } + settings_str = cfg_to_yaml_str(settings) + + # Call a python script to generate the ecFlow job card. + args = ["-q", + "-o", ecflow_env_fp, + "-t", ecflow_env_tmpl_fp, + "-u", settings_str ] + + try: + fill_jinja_template(args) + except: + raise Exception( + dedent( + f"""Call to create the ecFlow job card for '{tsk}' failed.""" + ) + ) + return True @@ -135,4 +209,3 @@ def create_ecflow_scripts(global_var_defns_fp): if __name__ == "__main__": create_ecflow_scripts(global_var_defns_fp) - From 101746c08d696b0481db73a46f5ff5fb7273f2db Mon Sep 17 00:00:00 2001 From: chan-hoo Date: Thu, 1 Jun 2023 12:32:00 +0000 Subject: [PATCH 03/27] change template --- parm/ecflow/env/env_template.sh | 17 +++++++++++++++++ ush/create_ecflow_scripts.py | 7 ++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/parm/ecflow/env/env_template.sh b/parm/ecflow/env/env_template.sh index 25197b04e7..9e088349a2 100644 --- a/parm/ecflow/env/env_template.sh +++ b/parm/ecflow/env/env_template.sh @@ -1,5 +1,22 @@ +#!/bin/bash + export ECF_HOME="{{ ecf_home }}" export ECF_DATA_ROOT="{{ ecf_data_root }}" export ECF_OUTPUTDIR="{{ ecf_outputdir }}" export ECF_COMDIR="{{ ecf_comdir }}" export LFS_OUTPUTDIR="{{ lfs_outputdir }}" + +mkdir -p $ECF_HOME +mkdir -p $ECF_DATA_ROOT +mkdir -p $ECF_OUTPUTDIR +mkdir -p $ECF_COMDIR +mkdir -p $LFS_OUTPUTDIR + +ecflow_client --alter add variable EMC_USER chan-hoo.jeon /emc_aqm +ecflow_client --alter add variable ECF_INCLUDE {{ exptdir }}/ecf/include /emc_aqm + +ecflow_client --alter add variable PDY {{ pdy }} /emc_aqm/primary/00 +ecflow_client --alter add variable PDY {{ pdy }} /emc_aqm/primary/06 +ecflow_client --alter add variable PDY {{ pdy }} /emc_aqm/primary/12 +ecflow_client --alter add variable PDY {{ pdy }} /emc_aqm/primary/18 + diff --git a/ush/create_ecflow_scripts.py b/ush/create_ecflow_scripts.py index 2ad6ec1e22..d6982d2819 100644 --- a/ush/create_ecflow_scripts.py +++ b/ush/create_ecflow_scripts.py @@ -17,7 +17,8 @@ flatten_dict, cp_vrfy, ln_vrfy, - mkdir_vrfy + mkdir_vrfy, + date_to_str ) from fill_jinja_template import fill_jinja_template @@ -178,12 +179,16 @@ def create_ecflow_scripts(global_var_defns_fp): ecf_comdir = f"{OPSROOT}/ecflow/com" lfs_outputdir = f"{OPSROOT}/ecflow/lsf" + date_first = date_to_str(DATE_FIRST_CYCL, format="%Y%m%d") + settings = { "ecf_home": ecf_home, "ecf_data_root": ecf_data_root, "ecf_outputdir": ecf_outputdir, "ecf_comdir": ecf_comdir, "lfs_outputdir": lfs_outputdir, + "exptdir": EXPTDIR, + "pdy": date_first, } settings_str = cfg_to_yaml_str(settings) From 9d1af8fcb28b6f3c828a0289aec24e872fd23fa5 Mon Sep 17 00:00:00 2001 From: chan-hoo Date: Thu, 1 Jun 2023 23:54:56 +0000 Subject: [PATCH 04/27] fix load modules in scripts --- .../tasks/wcoss2/python_regional_workflow.lua | 2 ++ parm/ecflow/defs/ecf_defn_template.def | 2 +- parm/ecflow/scripts/forecast/jforecast.ecf | 5 ++- parm/ecflow/scripts/nexus/jnexus_emission.ecf | 7 ++-- parm/ecflow/scripts/nexus/jnexus_gfs_sfc.ecf | 5 ++- .../scripts/nexus/jnexus_post_split.ecf | 5 ++- parm/ecflow/scripts/post/jpost.ecf | 7 ++-- parm/ecflow/scripts/prep/jget_extrn_ics.ecf | 5 ++- parm/ecflow/scripts/prep/jget_extrn_lbcs.ecf | 5 ++- parm/ecflow/scripts/prep/jics.ecf | 4 ++- parm/ecflow/scripts/prep/jlbcs.ecf | 36 +++++-------------- parm/ecflow/scripts/prep/jmake_ics.ecf | 5 ++- parm/ecflow/scripts/prep/jmake_lbcs.ecf | 5 ++- .../scripts/product/jbias_correction_o3.ecf | 8 +++-- .../scripts/product/jbias_correction_pm25.ecf | 26 ++++---------- parm/ecflow/scripts/product/jpost_stat_o3.ecf | 5 ++- .../scripts/product/jpost_stat_pm25.ecf | 5 ++- .../ecflow/scripts/product/jpre_post_stat.ecf | 5 ++- .../scripts/pts_fire_emis/jfire_emission.ecf | 5 ++- .../scripts/pts_fire_emis/jpoint_source.ecf | 6 ++-- ush/create_ecflow_scripts.py | 6 ++-- ush/generate_FV3LAM_wflow.py | 29 +++++++-------- ush/load_modules_run_task.sh | 2 +- 23 files changed, 103 insertions(+), 87 deletions(-) diff --git a/modulefiles/tasks/wcoss2/python_regional_workflow.lua b/modulefiles/tasks/wcoss2/python_regional_workflow.lua index 519f1cdf4a..0a3bc3207b 100644 --- a/modulefiles/tasks/wcoss2/python_regional_workflow.lua +++ b/modulefiles/tasks/wcoss2/python_regional_workflow.lua @@ -1,3 +1,5 @@ +load(pathJoin("PrgEnv-intel", os.getenv("PrgEnv_intel_ver"))) +load(pathJoin("craype", os.getenv("craype_ver"))) load(pathJoin("intel", os.getenv("intel_ver"))) load(pathJoin("python", os.getenv("python_ver"))) load(pathJoin("prod_util", os.getenv("prod_util_ver"))) diff --git a/parm/ecflow/defs/ecf_defn_template.def b/parm/ecflow/defs/ecf_defn_template.def index ed42db0219..51376231f4 100644 --- a/parm/ecflow/defs/ecf_defn_template.def +++ b/parm/ecflow/defs/ecf_defn_template.def @@ -17,7 +17,7 @@ suite emc_aqm edit ENVIR '{{ envir }}' edit QUEUE 'dev' edit QUEUE_ARCH 'dev_transfer' - edit OUTPUTDIR '{{ opsroot }}/ecf_output' + edit OUTPUTDIR '{{ logbasedir }}' family 00 edit CYC '00' family aqm diff --git a/parm/ecflow/scripts/forecast/jforecast.ecf b/parm/ecflow/scripts/forecast/jforecast.ecf index c8eaafb97e..dc38eb7edb 100755 --- a/parm/ecflow/scripts/forecast/jforecast.ecf +++ b/parm/ecflow/scripts/forecast/jforecast.ecf @@ -15,7 +15,10 @@ export subcyc=0 %include %include -. {{ exptdir }}/var_denfs.sh +export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" +export USHdir="{{ ushdir }}" +JOBSdir="{{ jobsdir }}" + . ${USHdir}/load_modules_run_task.sh run_fcst "${JOBSdir}/JREGIONAL_RUN_FCST" %include diff --git a/parm/ecflow/scripts/nexus/jnexus_emission.ecf b/parm/ecflow/scripts/nexus/jnexus_emission.ecf index ca804e74ed..c7c676eba1 100755 --- a/parm/ecflow/scripts/nexus/jnexus_emission.ecf +++ b/parm/ecflow/scripts/nexus/jnexus_emission.ecf @@ -15,9 +15,12 @@ export cyc="%CYC%" export nspt="%NSPT%" export subcyc=0 -export DCOMINfire=/lfs/h2/emc/physics/noscrub/kai.wang/RAVE_fire/RAVE_NA_NRT +#export DCOMINfire=/lfs/h2/emc/physics/noscrub/kai.wang/RAVE_fire/RAVE_NA_NRT + +export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" +export USHdir="{{ ushdir }}" +JOBSdir="{{ jobsdir }}" -. {{ exptdir }}/var_denfs.sh . ${USHdir}/load_modules_run_task.sh nexus_emission "${JOBSdir}/JREGIONAL_NEXUS_EMISSION" %include diff --git a/parm/ecflow/scripts/nexus/jnexus_gfs_sfc.ecf b/parm/ecflow/scripts/nexus/jnexus_gfs_sfc.ecf index cd7153e711..4d0694de12 100755 --- a/parm/ecflow/scripts/nexus/jnexus_gfs_sfc.ecf +++ b/parm/ecflow/scripts/nexus/jnexus_gfs_sfc.ecf @@ -14,7 +14,10 @@ export cyc="%CYC%" export subcyc=0 -. {{ exptdir }}/var_denfs.sh +export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" +export USHdir="{{ ushdir }}" +JOBSdir="{{ jobsdir }}" + . ${USHdir}/load_modules_run_task.sh nexus_gfs_sfc "${JOBSdir}/JREGIONAL_NEXUS_GFS_SFC" %include diff --git a/parm/ecflow/scripts/nexus/jnexus_post_split.ecf b/parm/ecflow/scripts/nexus/jnexus_post_split.ecf index e169e587bc..40a63f9b49 100755 --- a/parm/ecflow/scripts/nexus/jnexus_post_split.ecf +++ b/parm/ecflow/scripts/nexus/jnexus_post_split.ecf @@ -14,7 +14,10 @@ export cyc="%CYC%" export subcyc=0 -. {{ exptdir }}/var_denfs.sh +export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" +export USHdir="{{ ushdir }}" +JOBSdir="{{ jobsdir }}" + . ${USHdir}/load_modules_run_task.sh nexus_post_split "${JOBSdir}/JREGIONAL_NEXUS_POST_SPLIT" %include diff --git a/parm/ecflow/scripts/post/jpost.ecf b/parm/ecflow/scripts/post/jpost.ecf index 02a1b59799..720e912c7b 100755 --- a/parm/ecflow/scripts/post/jpost.ecf +++ b/parm/ecflow/scripts/post/jpost.ecf @@ -13,13 +13,14 @@ export cyc="%CYC%" %include %include -module list - export subcyc=0 export fhr="%FHR%" #export DATAFCST=$DATAROOT/${model}_forecast_${cyc}.${PDY}${cyc} -. {{ exptdir }}/var_denfs.sh +export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" +export USHdir="{{ ushdir }}" +JOBSdir="{{ jobsdir }}" + . ${USHdir}/load_modules_run_task.sh run_post "${JOBSdir}/JREGIONAL_RUN_POST" %include diff --git a/parm/ecflow/scripts/prep/jget_extrn_ics.ecf b/parm/ecflow/scripts/prep/jget_extrn_ics.ecf index 5521dafff4..d1c7def449 100755 --- a/parm/ecflow/scripts/prep/jget_extrn_ics.ecf +++ b/parm/ecflow/scripts/prep/jget_extrn_ics.ecf @@ -15,7 +15,10 @@ export cyc="%CYC%" export subcyc=0 #export ICS_OR_LBCS=ICS -. {{ exptdir }}/var_denfs.sh +export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" +export USHdir="{{ ushdir }}" +JOBSdir="{{ jobsdir }}" + . ${USHdir}/load_modules_run_task.sh get_extrn_ics "${JOBSdir}/JREGIONAL_GET_EXTRN_MDL_FILES" %include diff --git a/parm/ecflow/scripts/prep/jget_extrn_lbcs.ecf b/parm/ecflow/scripts/prep/jget_extrn_lbcs.ecf index 0df3ddc624..7b5a66e642 100755 --- a/parm/ecflow/scripts/prep/jget_extrn_lbcs.ecf +++ b/parm/ecflow/scripts/prep/jget_extrn_lbcs.ecf @@ -14,7 +14,10 @@ export cyc="%CYC%" export subcyc=0 -. {{ exptdir }}/var_denfs.sh +export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" +export USHdir="{{ ushdir }}" +JOBSdir="{{ jobsdir }}" + . ${USHdir}/load_modules_run_task.sh get_extrn_lbcs "${JOBSdir}/JREGIONAL_GET_EXTRN_MDL_FILES" %include diff --git a/parm/ecflow/scripts/prep/jics.ecf b/parm/ecflow/scripts/prep/jics.ecf index a99f4aa666..f7e6b2a3da 100755 --- a/parm/ecflow/scripts/prep/jics.ecf +++ b/parm/ecflow/scripts/prep/jics.ecf @@ -17,7 +17,9 @@ SDATE=$($NDATE -6 ${PDY}${cyc}) PDYS_P1=$(echo $SDATE | cut -c1-8) cycs_p1=$(echo $SDATE | cut -c9-10) -. {{ exptdir }}/var_denfs.sh +export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" +export USHdir="{{ ushdir }}" +JOBSdir="{{ jobsdir }}" export PREV_CYCLE_DIR=${COMaqm}/${model}.${PDYS_P1}/${cycs_p1} diff --git a/parm/ecflow/scripts/prep/jlbcs.ecf b/parm/ecflow/scripts/prep/jlbcs.ecf index 7ea0aebb80..565af9d351 100755 --- a/parm/ecflow/scripts/prep/jlbcs.ecf +++ b/parm/ecflow/scripts/prep/jlbcs.ecf @@ -12,35 +12,17 @@ export cyc="%CYC%" %include %include -module load PrgEnv-intel/${PrgEnv_intel_ver} -module load craype/${craype_ver} -module load intel/${intel_ver} -module load envvar/${envvar_ver} -module load cray-mpich/${cray_mpich_ver} -module load libjpeg/${libjpeg_ver} -module load zlib/${zlib_ver} -module load libpng/${libpng_ver} -module load hdf5/${hdf5_ver} -module load netcdf/${netcdf_ver} -module load cray-pals/${cray_pals_ver} -module load wgrib2/${wgrib2_ver} -module load udunits/${udunits_ver} -module load gsl/${gsl_ver} -module load nco/${nco_ver} -module load python/${python_ver} - -module list - export subcyc=0 -. ${HOMEaqm}/parm/config/var_defns.sh -. $USHdir/source_util_funcs.sh -machine=$(echo_lowercase $MACHINE) -export ICS_OR_LBCS=LBCS -export DCOMINchem_lbcs=/lfs/h2/emc/lam/noscrub/RRFS_CMAQ/LBCS/AQM_NA13km_AM4_v1 -export DCOMINgefs=/lfs/h2/emc/lam/noscrub/RRFS_CMAQ/GEFS_DATA -export COMINgefs=$(compath.py ${envir}/gefs/${gefs_ver}) +#export ICS_OR_LBCS=LBCS +#export DCOMINchem_lbcs=/lfs/h2/emc/lam/noscrub/RRFS_CMAQ/LBCS/AQM_NA13km_AM4_v1 +#export DCOMINgefs=/lfs/h2/emc/lam/noscrub/RRFS_CMAQ/GEFS_DATA +#export COMINgefs=$(compath.py ${envir}/gefs/${gefs_ver}) + +export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" +export USHdir="{{ ushdir }}" +JOBSdir="{{ jobsdir }}" -${HOMEaqm}/jobs/JREGIONAL_AQM_LBCS +. ${USHdir}/load_modules_run_task.sh aqm_ics "${JOBSdir}/JREGIONAL_AQM_ICS" %include diff --git a/parm/ecflow/scripts/prep/jmake_ics.ecf b/parm/ecflow/scripts/prep/jmake_ics.ecf index ba41ff7ead..3d98397613 100755 --- a/parm/ecflow/scripts/prep/jmake_ics.ecf +++ b/parm/ecflow/scripts/prep/jmake_ics.ecf @@ -15,7 +15,10 @@ export cyc="%CYC%" export subcyc=0 -. {{ exptdir }}/var_denfs.sh +export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" +export USHdir="{{ ushdir }}" +JOBSdir="{{ jobsdir }}" + . ${USHdir}/load_modules_run_task.sh make_ics "${JOBSdir}/JREGIONAL_MAKE_ICS" %include diff --git a/parm/ecflow/scripts/prep/jmake_lbcs.ecf b/parm/ecflow/scripts/prep/jmake_lbcs.ecf index 50a39533c0..7def36d227 100755 --- a/parm/ecflow/scripts/prep/jmake_lbcs.ecf +++ b/parm/ecflow/scripts/prep/jmake_lbcs.ecf @@ -15,7 +15,10 @@ export cyc="%CYC%" export subcyc=0 -. {{ exptdir }}/var_denfs.sh +export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" +export USHdir="{{ ushdir }}" +JOBSdir="{{ jobsdir }}" + . ${USHdir}/load_modules_run_task.sh make_lbcs "${JOBSdir}/JREGIONAL_MAKE_LBCS" %include diff --git a/parm/ecflow/scripts/product/jbias_correction_o3.ecf b/parm/ecflow/scripts/product/jbias_correction_o3.ecf index 841baa06aa..eca0fd5635 100755 --- a/parm/ecflow/scripts/product/jbias_correction_o3.ecf +++ b/parm/ecflow/scripts/product/jbias_correction_o3.ecf @@ -14,10 +14,12 @@ export cyc="%CYC%" export subcyc=0 -. {{ exptdir }}/var_denfs.sh +#export DCOMINairnow=/lfs/h1/ops/prod/dcom +#export COMOUTbicor=${COMaqm} -export DCOMINairnow=/lfs/h1/ops/prod/dcom -export COMOUTbicor=${COMaqm} +export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" +export USHdir="{{ ushdir }}" +JOBSdir="{{ jobsdir }}" . ${USHdir}/load_modules_run_task.sh bias_correction_o3 "${JOBSdir}/JREGIONAL_BIAS_CORRECTION_O3" diff --git a/parm/ecflow/scripts/product/jbias_correction_pm25.ecf b/parm/ecflow/scripts/product/jbias_correction_pm25.ecf index 5db1a969a7..f2fc471057 100755 --- a/parm/ecflow/scripts/product/jbias_correction_pm25.ecf +++ b/parm/ecflow/scripts/product/jbias_correction_pm25.ecf @@ -12,28 +12,14 @@ export cyc="%CYC%" %include %include -module load PrgEnv-intel/${PrgEnv_intel_ver} -module load craype/${craype_ver} -module load intel/${intel_ver} -module load envvar/${envvar_ver} -module load cray-mpich/${cray_mpich_ver} -module load cray-pals/${cray_pals_ver} -module load hdf5/${hdf5_ver} -module load netcdf/${netcdf_ver} -module load libjpeg/${libjpeg_ver} -module load zlib/${zlib_ver} -module load libpng/${libpng_ver} -module load grib_util/${grib_util_ver} -module load wgrib2/${wgrib2_ver} -module load python/${python_ver} - -module list - export subcyc=0 -. {{ exptdir }}/var_denfs.sh -export DCOMINairnow=/lfs/h1/ops/prod/dcom -export COMOUTbicor=${COMaqm} +#export DCOMINairnow=/lfs/h1/ops/prod/dcom +#export COMOUTbicor=${COMaqm} + +export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" +export USHdir="{{ ushdir }}" +JOBSdir="{{ jobsdir }}" . ${USHdir}/load_modules_run_task.sh bias_correction_pm25 "${JOBSdir}/JREGIONAL_BIAS_CORRECTION_PM25" diff --git a/parm/ecflow/scripts/product/jpost_stat_o3.ecf b/parm/ecflow/scripts/product/jpost_stat_o3.ecf index f241aaa8d3..5286db55fa 100755 --- a/parm/ecflow/scripts/product/jpost_stat_o3.ecf +++ b/parm/ecflow/scripts/product/jpost_stat_o3.ecf @@ -14,7 +14,10 @@ export cyc="%CYC%" export subcyc=0 -. {{ exptdir }}/var_denfs.sh +export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" +export USHdir="{{ ushdir }}" +JOBSdir="{{ jobsdir }}" + . ${USHdir}/load_modules_run_task.sh post_stat_o3 "${JOBSdir}/JREGIONAL_POST_STAT_O3" %include diff --git a/parm/ecflow/scripts/product/jpost_stat_pm25.ecf b/parm/ecflow/scripts/product/jpost_stat_pm25.ecf index bbbffa7f62..7d9cffd1f4 100755 --- a/parm/ecflow/scripts/product/jpost_stat_pm25.ecf +++ b/parm/ecflow/scripts/product/jpost_stat_pm25.ecf @@ -14,7 +14,10 @@ export cyc="%CYC%" export subcyc=0 -. {{ exptdir }}/var_denfs.sh +export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" +export USHdir="{{ ushdir }}" +JOBSdir="{{ jobsdir }}" + . ${USHdir}/load_modules_run_task.sh post_stat_pm25 "${JOBSdir}/JREGIONAL_POST_STAT_PM25" %include diff --git a/parm/ecflow/scripts/product/jpre_post_stat.ecf b/parm/ecflow/scripts/product/jpre_post_stat.ecf index 0c2cc0ad29..851e232bd2 100755 --- a/parm/ecflow/scripts/product/jpre_post_stat.ecf +++ b/parm/ecflow/scripts/product/jpre_post_stat.ecf @@ -14,7 +14,10 @@ export cyc="%CYC%" export subcyc=0 -. {{ exptdir }}/var_denfs.sh +export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" +export USHdir="{{ ushdir }}" +JOBSdir="{{ jobsdir }}" + . ${USHdir}/load_modules_run_task.sh pre_post_stat "${JOBSdir}/JREGIONAL_PRE_POST_STAT" %include diff --git a/parm/ecflow/scripts/pts_fire_emis/jfire_emission.ecf b/parm/ecflow/scripts/pts_fire_emis/jfire_emission.ecf index 12283d8c0b..a1e8e5359f 100755 --- a/parm/ecflow/scripts/pts_fire_emis/jfire_emission.ecf +++ b/parm/ecflow/scripts/pts_fire_emis/jfire_emission.ecf @@ -14,7 +14,10 @@ export cyc="%CYC%" export subcyc=0 -. {{ exptdir }}/var_denfs.sh +export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" +export USHdir="{{ ushdir }}" +JOBSdir="{{ jobsdir }}" + . ${USHdir}/load_modules_run_task.sh fire_emission "${JOBSdir}/JREGIONAL_FIRE_EMISSION" %include diff --git a/parm/ecflow/scripts/pts_fire_emis/jpoint_source.ecf b/parm/ecflow/scripts/pts_fire_emis/jpoint_source.ecf index cfab27a2c1..b58cd76af5 100755 --- a/parm/ecflow/scripts/pts_fire_emis/jpoint_source.ecf +++ b/parm/ecflow/scripts/pts_fire_emis/jpoint_source.ecf @@ -14,9 +14,11 @@ export cyc="%CYC%" export subcyc=0 -. {{ exptdir }}/var_denfs.sh +export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" +export USHdir="{{ ushdir }}" +JOBSdir="{{ jobsdir }}" -export DCOMINpt_src=/lfs/h2/emc/physics/noscrub/Youhua.Tang/nei2016v1-pt/v2023-01-PT +#export DCOMINpt_src=/lfs/h2/emc/physics/noscrub/Youhua.Tang/nei2016v1-pt/v2023-01-PT . ${USHdir}/load_modules_run_task.sh point_source "${JOBSdir}/JREGIONAL_POINT_SOURCE" diff --git a/ush/create_ecflow_scripts.py b/ush/create_ecflow_scripts.py index d6982d2819..ec71a71aaf 100644 --- a/ush/create_ecflow_scripts.py +++ b/ush/create_ecflow_scripts.py @@ -87,7 +87,9 @@ def create_ecflow_scripts(global_var_defns_fp): ecflow_script_fp = os.path.join(EXPTDIR, "ecf/scripts", ecflow_script_group, ecflow_script_fn) settings = { - "exptdir": EXPTDIR, + "global_var_defns_fp": GLOBAL_VAR_DEFNS_FP, + "ushdir": USHdir, + "jobsdir": JOBSdir, } settings_str = cfg_to_yaml_str(settings) @@ -143,7 +145,7 @@ def create_ecflow_scripts(global_var_defns_fp): "net": NET, "run": RUN, "envir": envir, - "opsroot": OPSROOT, + "logbasedir": LOGBASEDIR, } settings_str = cfg_to_yaml_str(settings) diff --git a/ush/generate_FV3LAM_wflow.py b/ush/generate_FV3LAM_wflow.py index 92ad6536e4..abbce8cb6c 100755 --- a/ush/generate_FV3LAM_wflow.py +++ b/ush/generate_FV3LAM_wflow.py @@ -261,6 +261,18 @@ def generate_FV3LAM_wflow(ushdir, logfile: str = "log.generate_FV3LAM_wflow", de create_symlink_to_file( wflow_launch_script_fp, os.path.join(exptdir, wflow_launch_script_fn), False ) + + elif expt_config["platform"]["WORKFLOW_MANAGER"] == "ecflow": + # create directoies for ecflow in EXPTDIR + global_var_defns_fp = expt_config["workflow"]["GLOBAL_VAR_DEFNS_FP"] + exptdir = expt_config["workflow"]["EXPTDIR"] + mkdir_vrfy("-p", os.path.join(exptdir, "ecf")) + mkdir_vrfy("-p", os.path.join(exptdir, "ecf/scripts")) + mkdir_vrfy("-p", os.path.join(exptdir, "ecf/defs")) + + # create ecflow definition file and job cards + create_ecflow_scripts(global_var_defns_fp) + # # ----------------------------------------------------------------------- # @@ -274,24 +286,13 @@ def generate_FV3LAM_wflow(ushdir, logfile: str = "log.generate_FV3LAM_wflow", de # in the flattened expt_config dictionary # TODO: Reference all these variables in their respective # dictionaries, instead. - import_vars(dictionary=flatten_dict(expt_config)) - export_vars(source_dict=flatten_dict(expt_config)) + import_vars(dictionary=flatten_dict(expt_config)) + export_vars(source_dict=flatten_dict(expt_config)) + if expt_config["platform"]["WORKFLOW_MANAGER"] == "rocoto": if USE_CRON_TO_RELAUNCH: add_crontab_line() - elif expt_config["platform"]["WORKFLOW_MANAGER"] == "ecflow": - # create directoies for ecflow in EXPTDIR - global_var_defns_fp = expt_config["workflow"]["GLOBAL_VAR_DEFNS_FP"] - exptdir = expt_config["workflow"]["EXPTDIR"] - mkdir_vrfy("-p", os.path.join(exptdir, "ecf")) - mkdir_vrfy("-p", os.path.join(exptdir, "ecf/scripts")) - mkdir_vrfy("-p", os.path.join(exptdir, "ecf/defs")) - - # create ecflow definition file and job cards - create_ecflow_scripts(global_var_defns_fp) - - exit() # # Copy or symlink fix files # diff --git a/ush/load_modules_run_task.sh b/ush/load_modules_run_task.sh index 7e996b5087..b098418e29 100755 --- a/ush/load_modules_run_task.sh +++ b/ush/load_modules_run_task.sh @@ -99,8 +99,8 @@ set -u #----------------------------------------------------------------------- # machine=$(echo_lowercase $MACHINE) -source "${HOMEaqm}/etc/lmod-setup.sh" ${machine} if [ "${machine}" != "wcoss2" ]; then + source "${HOMEaqm}/etc/lmod-setup.sh" ${machine} module use "${HOMEaqm}/modulefiles" module load "${BUILD_MOD_FN}" || print_err_msg_exit "\ Loading of platform- and compiler-specific module file (BUILD_MOD_FN) From 823b18143de7228cb704ad408689cb902f74be3e Mon Sep 17 00:00:00 2001 From: chan-hoo Date: Fri, 2 Jun 2023 02:10:50 +0000 Subject: [PATCH 05/27] add missing flag --- parm/ecflow/scripts/prep/jget_extrn_ics.ecf | 2 +- parm/ecflow/scripts/prep/jget_extrn_lbcs.ecf | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/parm/ecflow/scripts/prep/jget_extrn_ics.ecf b/parm/ecflow/scripts/prep/jget_extrn_ics.ecf index d1c7def449..392ad5d41f 100755 --- a/parm/ecflow/scripts/prep/jget_extrn_ics.ecf +++ b/parm/ecflow/scripts/prep/jget_extrn_ics.ecf @@ -13,7 +13,7 @@ export cyc="%CYC%" %include export subcyc=0 -#export ICS_OR_LBCS=ICS +export ICS_OR_LBCS=ICS export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" export USHdir="{{ ushdir }}" diff --git a/parm/ecflow/scripts/prep/jget_extrn_lbcs.ecf b/parm/ecflow/scripts/prep/jget_extrn_lbcs.ecf index 7b5a66e642..dcdbf7a236 100755 --- a/parm/ecflow/scripts/prep/jget_extrn_lbcs.ecf +++ b/parm/ecflow/scripts/prep/jget_extrn_lbcs.ecf @@ -13,6 +13,7 @@ export cyc="%CYC%" %include export subcyc=0 +export ICS_OR_LBCS=LBCS export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" export USHdir="{{ ushdir }}" From ee68ed9f85dff678dbefac81195bb0330b27211f Mon Sep 17 00:00:00 2001 From: chan-hoo Date: Sat, 3 Jun 2023 03:15:59 +0000 Subject: [PATCH 06/27] mv ecf to homedir --- .gitignore | 1 + jobs/JAQM_MANAGER | 77 ++++++++++ jobs/JDATA_CLEANUP | 39 +++++ .../tasks/wcoss2/aqm_manager.local.lua | 1 + parm/ecflow/defs/ecf_defn_template.def | 4 +- parm/ecflow/env/env_template.sh | 14 +- .../scripts/aqm_manager/aqm_manager.ecf | 16 +- parm/ecflow/scripts/forecast/jforecast.ecf | 2 +- parm/ecflow/scripts/nexus/jnexus_gfs_sfc.ecf | 2 +- parm/ecflow/scripts/prep/jget_extrn_ics.ecf | 2 +- parm/ecflow/scripts/prep/jget_extrn_lbcs.ecf | 2 +- scripts/exaqm_manager.sh | 138 ++++++++++++++++++ scripts/exdata_cleanup.sh | 52 +++++++ ush/config.aqm.nco.realtime.yaml | 6 +- ush/create_ecflow_scripts.py | 59 +++++--- ush/generate_FV3LAM_wflow.py | 10 +- ush/load_modules_run_task.sh | 16 +- 17 files changed, 381 insertions(+), 60 deletions(-) create mode 100755 jobs/JAQM_MANAGER create mode 100755 jobs/JDATA_CLEANUP create mode 100644 modulefiles/tasks/wcoss2/aqm_manager.local.lua create mode 100755 scripts/exaqm_manager.sh create mode 100755 scripts/exdata_cleanup.sh diff --git a/.gitignore b/.gitignore index bc3eee8545..ed736c9d74 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ bin/ +ecf/ exec/ build/ fix/ diff --git a/jobs/JAQM_MANAGER b/jobs/JAQM_MANAGER new file mode 100755 index 0000000000..0720502e63 --- /dev/null +++ b/jobs/JAQM_MANAGER @@ -0,0 +1,77 @@ +#!/bin/bash + +# +#----------------------------------------------------------------------- +# +# This script copies files from various directories into the experiment +# directory, creates links to some of them, and modifies others (e.g. +# templates) to customize them for the current experiment setup. +# +#----------------------------------------------------------------------- +# + +# +#----------------------------------------------------------------------- +# +# Source the variable definitions file and the bash utility functions. +# +#----------------------------------------------------------------------- +# +. $USHdir/source_util_funcs.sh +. ${GLOBAL_VAR_DEFNS_FP} +. $USHdir/job_preamble.sh +# +#----------------------------------------------------------------------- +# +# Save current shell options (in a global array). Then set new options +# for this script/function. +# +#----------------------------------------------------------------------- +# +{ save_shell_opts; . $USHdir/preamble.sh; } > /dev/null 2>&1 +# +#----------------------------------------------------------------------- +# +# Get the full path to the file in which this script/function is located +# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in +# which the file is located (scrfunc_dir). +# +#----------------------------------------------------------------------- +# +scrfunc_fp=$( $READLINK -f "${BASH_SOURCE[0]}" ) +scrfunc_fn=$( basename "${scrfunc_fp}" ) +scrfunc_dir=$( dirname "${scrfunc_fp}" ) +# +#----------------------------------------------------------------------- +# +# Print message indicating entry into script. +# +#----------------------------------------------------------------------- +# +print_info_msg " +======================================================================== +Entering script: \"${scrfunc_fn}\" +In directory: \"${scrfunc_dir}\" + +This is the J-job script for the task that runs a forecast with FV3 for +the specified cycle. +========================================================================" +# +export PS4='$SECONDS + ' +date + +############################################## +# Set variables used in the script +############################################## +${HOMEaqm}/scripts/exaqm_manager.sh +status=$? +[[ $status -ne 0 ]] && exit $status + +########################################## +# Remove the Temporary working directory +########################################## +cd $DATAROOT +[[ $KEEPDATA = "FALSE" ]] && rm -rf $DATA + +date +exit 0 diff --git a/jobs/JDATA_CLEANUP b/jobs/JDATA_CLEANUP new file mode 100755 index 0000000000..5cda6bb171 --- /dev/null +++ b/jobs/JDATA_CLEANUP @@ -0,0 +1,39 @@ +#!/bin/bash +set -x + +export RUN_ENVIR=${RUN_ENVIR:-"nco"} +export PS4='$SECONDS + ' +date + +############################################## +# Obtain unique process id (pid) and make temp directory +############################################## +export pid=${pid:-$$} +export outid=${outid:-"LL$job"} + +export DATA=${DATA:-${DATAROOT}/${jobid:?}} +mkdir -p $DATA +cd $DATA + +############################################## +# Run setpdy and initialize PDY variables +############################################## +export cycle="t${cyc}z" +setpdy.sh +. ./PDY + +############################################## +# Set variables used in the script +############################################## +${HOMEaqm}/scripts/exdata_cleanup.sh +status=$? +[[ $status -ne 0 ]] && exit $status + +########################################## +# Remove the Temporary working directory +########################################## +cd $DATAROOT +[[ $KEEPDATA = "NO" ]] && rm -rf $DATA + +date +exit 0 diff --git a/modulefiles/tasks/wcoss2/aqm_manager.local.lua b/modulefiles/tasks/wcoss2/aqm_manager.local.lua new file mode 100644 index 0000000000..3370fa018b --- /dev/null +++ b/modulefiles/tasks/wcoss2/aqm_manager.local.lua @@ -0,0 +1 @@ +load("python_regional_workflow") diff --git a/parm/ecflow/defs/ecf_defn_template.def b/parm/ecflow/defs/ecf_defn_template.def index 51376231f4..7e3df44c6d 100644 --- a/parm/ecflow/defs/ecf_defn_template.def +++ b/parm/ecflow/defs/ecf_defn_template.def @@ -4,11 +4,11 @@ extern /cycled_v16_3/primary/06/gfs/v16.3/gfs/jgfs_forecast extern /cycled_v16_3/primary/12/gfs/v16.3/gfs/jgfs_forecast extern /cycled_v16_3/primary/18/gfs/v16.3/gfs/jgfs_forecast -suite emc_aqm +suite {{ ecf_suite_nm }} inlimit /totality_limit:TOTALITY family primary edit aqm_ver '{{ model_ver }}' - edit PACKAGEHOME '{{ exptdir }}' + edit PACKAGEHOME '{{ home_ecf }}' edit NET '{{ net }}' edit RUN '{{ run }}' edit PROJ '{{ net | upper }}' diff --git a/parm/ecflow/env/env_template.sh b/parm/ecflow/env/env_template.sh index 9e088349a2..b5f1394638 100644 --- a/parm/ecflow/env/env_template.sh +++ b/parm/ecflow/env/env_template.sh @@ -1,5 +1,7 @@ #!/bin/bash +export ECF_PORT="34310" +export ECF_HOST="ddecflow01" export ECF_HOME="{{ ecf_home }}" export ECF_DATA_ROOT="{{ ecf_data_root }}" export ECF_OUTPUTDIR="{{ ecf_outputdir }}" @@ -12,11 +14,11 @@ mkdir -p $ECF_OUTPUTDIR mkdir -p $ECF_COMDIR mkdir -p $LFS_OUTPUTDIR -ecflow_client --alter add variable EMC_USER chan-hoo.jeon /emc_aqm -ecflow_client --alter add variable ECF_INCLUDE {{ exptdir }}/ecf/include /emc_aqm +ecflow_client --alter add variable EMC_USER chan-hoo.jeon /{{ ecf_suite_nm }} +ecflow_client --alter add variable ECF_INCLUDE {{ home_ecf }}/ecf/include /{{ ecf_suite_nm }} -ecflow_client --alter add variable PDY {{ pdy }} /emc_aqm/primary/00 -ecflow_client --alter add variable PDY {{ pdy }} /emc_aqm/primary/06 -ecflow_client --alter add variable PDY {{ pdy }} /emc_aqm/primary/12 -ecflow_client --alter add variable PDY {{ pdy }} /emc_aqm/primary/18 +ecflow_client --alter add variable PDY {{ pdy }} /{{ ecf_suite_nm }}/primary/00 +ecflow_client --alter add variable PDY {{ pdy }} /{{ ecf_suite_nm }}/primary/06 +ecflow_client --alter add variable PDY {{ pdy }} /{{ ecf_suite_nm }}/primary/12 +ecflow_client --alter add variable PDY {{ pdy }} /{{ ecf_suite_nm }}/primary/18 diff --git a/parm/ecflow/scripts/aqm_manager/aqm_manager.ecf b/parm/ecflow/scripts/aqm_manager/aqm_manager.ecf index 5759fda05d..f360ec1f95 100644 --- a/parm/ecflow/scripts/aqm_manager/aqm_manager.ecf +++ b/parm/ecflow/scripts/aqm_manager/aqm_manager.ecf @@ -11,19 +11,15 @@ model=aqm %include %include -############################################################ -# Load modules -############################################################ - -module list - export cyc=%CYC% export cycle=t${cyc}z +export subcyc=0 + +export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" +export USHdir="{{ ushdir }}" +JOBSdir="{{ jobsdir }}" -############################################################ -# CALL executable job script here -############################################################ -${HOMEaqm}/jobs/JAQM_MANAGER +. ${USHdir}/load_modules_run_task.sh aqm_manager "${JOBSdir}/JAQM_MANAGER" %include %manual diff --git a/parm/ecflow/scripts/forecast/jforecast.ecf b/parm/ecflow/scripts/forecast/jforecast.ecf index dc38eb7edb..20d71d9090 100755 --- a/parm/ecflow/scripts/forecast/jforecast.ecf +++ b/parm/ecflow/scripts/forecast/jforecast.ecf @@ -1,4 +1,4 @@ -#PBS -N aqm_forecast_%CYC% +#PBS -N {{ tn_run_fcst }} #PBS -j oe #PBS -S /bin/bash #PBS -q %QUEUE% diff --git a/parm/ecflow/scripts/nexus/jnexus_gfs_sfc.ecf b/parm/ecflow/scripts/nexus/jnexus_gfs_sfc.ecf index 4d0694de12..35f2ec80db 100755 --- a/parm/ecflow/scripts/nexus/jnexus_gfs_sfc.ecf +++ b/parm/ecflow/scripts/nexus/jnexus_gfs_sfc.ecf @@ -1,4 +1,4 @@ -#PBS -N aqm_nexus_gfs_sfc_%CYC% +#PBS -N {{ tn_nexus_gfs_sfc }} #PBS -j oe #PBS -S /bin/bash #PBS -q %QUEUE% diff --git a/parm/ecflow/scripts/prep/jget_extrn_ics.ecf b/parm/ecflow/scripts/prep/jget_extrn_ics.ecf index 392ad5d41f..f75588616d 100755 --- a/parm/ecflow/scripts/prep/jget_extrn_ics.ecf +++ b/parm/ecflow/scripts/prep/jget_extrn_ics.ecf @@ -1,4 +1,4 @@ -#PBS -N aqm_get_extrn_ics_%CYC% +#PBS -N {{ tn_get_extrn_ics }} #PBS -j oe #PBS -S /bin/bash #PBS -q %QUEUE% diff --git a/parm/ecflow/scripts/prep/jget_extrn_lbcs.ecf b/parm/ecflow/scripts/prep/jget_extrn_lbcs.ecf index dcdbf7a236..f546fdaeae 100755 --- a/parm/ecflow/scripts/prep/jget_extrn_lbcs.ecf +++ b/parm/ecflow/scripts/prep/jget_extrn_lbcs.ecf @@ -1,4 +1,4 @@ -#PBS -N aqm_get_extrn_lbcs_%CYC% +#PBS -N {{ tn_get_extrn_lbcs }} #PBS -j oe #PBS -S /bin/bash #PBS -q %QUEUE% diff --git a/scripts/exaqm_manager.sh b/scripts/exaqm_manager.sh new file mode 100755 index 0000000000..94fc2ed6c9 --- /dev/null +++ b/scripts/exaqm_manager.sh @@ -0,0 +1,138 @@ +#! /bin/bash + +# +#----------------------------------------------------------------------- +# +# Source the variable definitions file and the bash utility functions. +# +#----------------------------------------------------------------------- +# +. $USHdir/source_util_funcs.sh +. ${GLOBAL_VAR_DEFNS_FP} +# +#----------------------------------------------------------------------- +# +# Save current shell options (in a global array). Then set new options +# for this script/function. +# +#----------------------------------------------------------------------- +# +{ save_shell_opts; . $USHdir/preamble.sh; } > /dev/null 2>&1 +# +#----------------------------------------------------------------------- +# +# Get the full path to the file in which this script/function is located +# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in +# which the file is located (scrfunc_dir). +# +#----------------------------------------------------------------------- +# +scrfunc_fp=$( $READLINK -f "${BASH_SOURCE[0]}" ) +scrfunc_fn=$( basename "${scrfunc_fp}" ) +scrfunc_dir=$( dirname "${scrfunc_fp}" ) +# +#----------------------------------------------------------------------- +# +# Print message indicating entry into script. +# +#----------------------------------------------------------------------- +# +print_info_msg " +======================================================================== +Entering script: \"${scrfunc_fn}\" +In directory: \"${scrfunc_dir}\" + +This is the ex-script for AQM-MANAGER. +========================================================================" + +ecflow_sid=emc_aqm + +############################################## +# Set variables used in the script +############################################## +CDATE=${PDY}${cyc} +GDATE=$($NDATE -06 $CDATE) +gPDY=$(echo $GDATE | cut -c1-8) +gcyc=$(echo $GDATE | cut -c9-10) +NEXTDATE=$($NDATE +06 $CDATE) +NEXTPDY=$(echo $NEXTDATE | cut -c1-8) +NEXTcyc=$(echo $NEXTDATE | cut -c9-10) +# NEXT24HPDY=$($NDATE +24 ${PDY}00) +CURRENTDAYPDY=$(ecflow_client --query variable /${ecflow_sid}/primary/${gcyc}:PDY)00 +NEXTDAYPDY_CDATE=$($NDATE +24 $CURRENTDAYPDY) +NEXTDAYPDY=$(echo $NEXTDAYPDY_CDATE | cut -c1-8) + +gefs_check=$(compath.py ${envir}/gefs/${gefs_ver})/gefs.${NEXTPDY}/${NEXTcyc}/chem/sfcsig/geaer.t${NEXTcyc}z.atmf078.nemsio +gfs_check=$(compath.py ${envir}/gfs/${gfs_ver})/gfs.${NEXTPDY}/${NEXTcyc}/atmos/gfs.t${NEXTcyc}z.sfcf078.nc +found_required_file_for_next_cycle=NO +fcst_job_completed=NO +release_next_cycle=NO +previous_cycle_run_completed=NO +cleanup_job_done=NO +previous_cycle_aqm_manager_complete=NO + +h_try=1 +while [ $h_try -lt 70 ]; do + #################################### + # Set release_next_cycle event when + # current cycle fcst restart file exist + #################################### + if [ ${found_required_file_for_next_cycle} = "NO" ]; then + aqm_forecast_RESTART_file=$(ls ${COMIN}/RESTART/*coupler.res|wc -l) + if [[ ${aqm_forecast_RESTART_file} -ge 1 && -f ${gefs_check} && -f ${gfs_check} ]]; then + ecflow_client --event release_next_cycle + found_required_file_for_next_cycle=YES + fi + fi + #################################### + # Requeue previous cycle when + # current forecast job is completed + #################################### + if [ ${fcst_job_completed} = "NO" ]; then + P_state=$(ecflow_client --query state /${ecflow_sid}/primary/${gcyc}) + e_state=$(ecflow_client --query state /${ecflow_sid}/primary/${cyc}/aqm/v1.0/forecast/jforecast) + if [[ ${e_state} = "complete" && ${P_state} = "complete" ]]; then + ecflow_client --event requeue_cycle + ecflow_client --alter change variable PDY $NEXTDAYPDY /${ecflow_sid}/primary/${gcyc} + ecflow_client --requeue force /${ecflow_sid}/primary/${gcyc}/aqm + fcst_job_completed=YES + fi + fi + + h_try=$((h_try+1)) + if [ ${found_required_file_for_next_cycle} = "YES" -a ${fcst_job_completed} = "YES" ]; then + h_try=99 + else + sleep 300 + fi +done +if [ $h_try -eq 70 ]; then + exit 70 +fi + +# +#----------------------------------------------------------------------- +# +# Print message indicating successful completion of script. +# +#----------------------------------------------------------------------- +# + print_info_msg " +======================================================================== +Successfully ran AQM-MANAGER!!! + +Exiting script: \"${scrfunc_fn}\" +In directory: \"${scrfunc_dir}\" +========================================================================" + +# +#----------------------------------------------------------------------- +# +# Restore the shell options saved at the beginning of this script/func- +# tion. +# +#----------------------------------------------------------------------- +# +{ restore_shell_opts; } > /dev/null 2>&1 + + diff --git a/scripts/exdata_cleanup.sh b/scripts/exdata_cleanup.sh new file mode 100755 index 0000000000..201e80975b --- /dev/null +++ b/scripts/exdata_cleanup.sh @@ -0,0 +1,52 @@ +#! /bin/bash +set -x + +############################################## +# Clean up the DATA directory from previous cycle if found +############################################## +[[ $KEEPDATA = "YES" ]] && exit 0 + +############################################## +# Set variables used in the script +############################################## +CDATE=${PDY}${cyc} +GDATE=$($NDATE -24 $CDATE) +gPDY=$(echo $GDATE | cut -c1-8) +gcyc=$(echo $GDATE | cut -c9-10) + +############################################## +# Looking for the following directory for cleanup +# aqm_forecast_${gcyc}.${gPDY}${gcyc} +# aqm_get_extrn_ics_${gcyc}.${gPDY}${gcyc} +# aqm_get_extrn_lbcs_${gcyc}.${gPDY}${gcyc} +# aqm_nexus_gfs_sfc_${gcyc}.${gPDY}${gcyc} +# aqm_get_extrn_ics_${gcyc}.${gPDY}${gcyc} +# aqm_get_extrn_lbcs_${gcyc}.${gPDY}${gcyc} +############################################## +target_for_delete=${DATAROOT}/aqm_forecast_${gcyc}.${gPDY}${gcyc} +echo "Remove DATA from ${target_for_delete}" +[[ -d $target_for_delete ]] && rm -rf $target_for_delete + +target_for_delete=${DATAROOT}/aqm_get_extrn_ics_${gcyc}.${gPDY}${gcyc} +echo "Remove DATA from ${target_for_delete}" +[[ -d $target_for_delete ]] && rm -rf $target_for_delete + +target_for_delete=${DATAROOT}/aqm_get_extrn_lbcs_${gcyc}.${gPDY}${gcyc} +echo "Remove DATA from ${target_for_delete}" +[[ -d $target_for_delete ]] && rm -rf $target_for_delete + +target_for_delete=${DATAROOT}/aqm_nexus_gfs_sfc_${gcyc}.${gPDY}${gcyc} +echo "Remove DATA from ${target_for_delete}" +[[ -d $target_for_delete ]] && rm -rf $target_for_delete + +target_for_delete=${DATAROOT}/aqm_get_extrn_ics_${gcyc}.${gPDY}${gcyc} +echo "Remove DATA from ${target_for_delete}" +[[ -d $target_for_delete ]] && rm -rf $target_for_delete + +target_for_delete=${DATAROOT}/aqm_get_extrn_lbcs_${gcyc}.${gPDY}${gcyc} +echo "Remove DATA from ${target_for_delete}" +[[ -d $target_for_delete ]] && rm -rf $target_for_delete + +exit 0 +##################################################### + diff --git a/ush/config.aqm.nco.realtime.yaml b/ush/config.aqm.nco.realtime.yaml index 1c250d1556..c3a8fabe7a 100644 --- a/ush/config.aqm.nco.realtime.yaml +++ b/ush/config.aqm.nco.realtime.yaml @@ -5,15 +5,15 @@ user: MACHINE: wcoss2 ACCOUNT: [account name] platform: - WORKFLOW_MANAGER: rocoto + WORKFLOW_MANAGER: ecflow workflow: USE_CRON_TO_RELAUNCH: true CRON_RELAUNCH_INTVL_MNTS: 3 EXPT_SUBDIR: aqm_nco_aqmna13km PREDEF_GRID_NAME: AQM_NA_13km CCPP_PHYS_SUITE: FV3_GFS_v16 - DATE_FIRST_CYCL: '2023042500' - DATE_LAST_CYCL: '2023042518' + DATE_FIRST_CYCL: '2023053000' + DATE_LAST_CYCL: '2023053018' INCR_CYCL_FREQ: 6 FCST_LEN_HRS: -1 FCST_LEN_CYCL: diff --git a/ush/create_ecflow_scripts.py b/ush/create_ecflow_scripts.py index ec71a71aaf..95c5d0ca06 100644 --- a/ush/create_ecflow_scripts.py +++ b/ush/create_ecflow_scripts.py @@ -31,18 +31,22 @@ def create_ecflow_scripts(global_var_defns_fp): cfg = flatten_dict(cfg) import_vars(dictionary=cfg) + print_info_msg(f""" + Creating ecFlow job cards and definition scripts in the home directory (HOMEaqm): + HOMEaqm = '{HOMEaqm}'""", verbose=VERBOSE) + # #----------------------------------------------------------------------- # - # Create ecFlow job cards and definition script in the experiment directory. + # Create ecFlow directories in the home directory. # #----------------------------------------------------------------------- # - print_info_msg(f""" - Creating ecFlow job cards and definition scripts in the specified - experiment directory (EXPTDIR): - EXPTDIR = '{EXPTDIR}'""", verbose=VERBOSE) - + home_ecf = HOMEaqm + mkdir_vrfy("-p", os.path.join(home_ecf, "ecf")) + mkdir_vrfy("-p", os.path.join(home_ecf, "ecf/scripts")) + mkdir_vrfy("-p", os.path.join(home_ecf, "ecf/defs")) + # #----------------------------------------------------------------------- # @@ -50,7 +54,7 @@ def create_ecflow_scripts(global_var_defns_fp): # #----------------------------------------------------------------------- # - cp_vrfy("-r", os.path.join(PARMdir,"ecflow/include"), os.path.join(EXPTDIR, "ecf")) + cp_vrfy("-r", os.path.join(PARMdir,"ecflow/include"), os.path.join(home_ecf, "ecf")) # #----------------------------------------------------------------------- @@ -59,6 +63,7 @@ def create_ecflow_scripts(global_var_defns_fp): # #----------------------------------------------------------------------- # + ecf_suite_nm = f"prod_{NET}" grp_aqm_manager = ["aqm_manager", "data_cleanup"] grp_forecast = ["jforecast"] grp_nexus = ["jnexus_emission", "jnexus_gfs_sfc", "jnexus_post_split"] @@ -81,15 +86,19 @@ def create_ecflow_scripts(global_var_defns_fp): ecflow_script_group = grp_k break - mkdir_vrfy("-p", os.path.join(EXPTDIR, "ecf/scripts", ecflow_script_group)) + mkdir_vrfy("-p", os.path.join(home_ecf, "ecf/scripts", ecflow_script_group)) ecflow_script_fn = f"{tsk}.ecf" ecflow_script_tmpl_fp = os.path.join(PARMdir, "ecflow/scripts", ecflow_script_group, ecflow_script_fn) - ecflow_script_fp = os.path.join(EXPTDIR, "ecf/scripts", ecflow_script_group, ecflow_script_fn) + ecflow_script_fp = os.path.join(home_ecf, "ecf/scripts", ecflow_script_group, ecflow_script_fn) settings = { "global_var_defns_fp": GLOBAL_VAR_DEFNS_FP, "ushdir": USHdir, "jobsdir": JOBSdir, + "tn_get_extrn_ics": TN_GET_EXTRN_ICS, + "tn_get_extrn_lbcs": TN_GET_EXTRN_LBCS, + "tn_nexus_gfs_sfc": TN_NEXUS_GFS_SFC, + "tn_run_fcst": TN_RUN_FCST, } settings_str = cfg_to_yaml_str(settings) @@ -117,15 +126,15 @@ def create_ecflow_scripts(global_var_defns_fp): # max_fcst_len = max(FCST_LEN_CYCL)+1 for itsk in range(0, max_fcst_len): - ecf_script_orgi = os.path.join(EXPTDIR, "ecf/scripts/post", "jpost.ecf") + ecf_script_orgi = os.path.join(home_ecf, "ecf/scripts/post", "jpost.ecf") ecf_script_link_fn = f"jpost_f{itsk:03d}.ecf" - ecf_script_link = os.path.join(EXPTDIR, "ecf/scripts/post", ecf_script_link_fn) + ecf_script_link = os.path.join(home_ecf, "ecf/scripts/post", ecf_script_link_fn) ln_vrfy(f"""-fsn '{ecf_script_orgi}' '{ecf_script_link}'""") for itsk in range(0, NUM_SPLIT_NEXUS): - ecf_script_orgi = os.path.join(EXPTDIR, "ecf/scripts/nexus", "jnexus_emission.ecf") - ecf_script_link_fn = f"jnexus_emission_f{itsk:02d}.ecf" - ecf_script_link = os.path.join(EXPTDIR, "ecf/scripts/nexus", ecf_script_link_fn) + ecf_script_orgi = os.path.join(home_ecf, "ecf/scripts/nexus", "jnexus_emission.ecf") + ecf_script_link_fn = f"jnexus_emission_{itsk:02d}.ecf" + ecf_script_link = os.path.join(home_ecf, "ecf/scripts/nexus", ecf_script_link_fn) ln_vrfy(f"""-fsn '{ecf_script_orgi}' '{ecf_script_link}'""") # @@ -137,11 +146,12 @@ def create_ecflow_scripts(global_var_defns_fp): # ecflow_defn_fn = f"{NET}_cycled.def" ecflow_defn_tmpl_fp = os.path.join(PARMdir, "ecflow/defs", "ecf_defn_template.def") - ecflow_defn_fp = os.path.join(EXPTDIR, "ecf/defs", ecflow_defn_fn) + ecflow_defn_fp = os.path.join(home_ecf, "ecf/defs", ecflow_defn_fn) settings = { "model_ver": model_ver, - "exptdir": EXPTDIR, + "ecf_suite_nm": ecf_suite_nm, + "home_ecf": home_ecf, "net": NET, "run": RUN, "envir": envir, @@ -171,15 +181,15 @@ def create_ecflow_scripts(global_var_defns_fp): # #----------------------------------------------------------------------- # - ecflow_env_fn = "ecf_env.def" + ecflow_env_fn = "ecf_env.sh" ecflow_env_tmpl_fp = os.path.join(PARMdir, "ecflow/env", "env_template.sh") - ecflow_env_fp = os.path.join(EXPTDIR, "ecf", ecflow_env_fn) + ecflow_env_fp = os.path.join(home_ecf, "ecf", ecflow_env_fn) - ecf_home = f"{OPSROOT}/ecflow" - ecf_data_root = f"{OPSROOT}/ecflow/data" - ecf_outputdir = f"{OPSROOT}/ecflow/output" - ecf_comdir = f"{OPSROOT}/ecflow/com" - lfs_outputdir = f"{OPSROOT}/ecflow/lsf" + ecf_home = f"{EXPTDIR}/ecflow" + ecf_data_root = f"{EXPTDIR}/ecflow/data" + ecf_outputdir = f"{EXPTDIR}/ecflow/output" + ecf_comdir = f"{EXPTDIR}/ecflow/com" + lfs_outputdir = f"{EXPTDIR}/ecflow/lsf" date_first = date_to_str(DATE_FIRST_CYCL, format="%Y%m%d") @@ -189,7 +199,8 @@ def create_ecflow_scripts(global_var_defns_fp): "ecf_outputdir": ecf_outputdir, "ecf_comdir": ecf_comdir, "lfs_outputdir": lfs_outputdir, - "exptdir": EXPTDIR, + "ecf_suite_nm": ecf_suite_nm, + "home_ecf": home_ecf, "pdy": date_first, } settings_str = cfg_to_yaml_str(settings) diff --git a/ush/generate_FV3LAM_wflow.py b/ush/generate_FV3LAM_wflow.py index abbce8cb6c..a548adc0bf 100755 --- a/ush/generate_FV3LAM_wflow.py +++ b/ush/generate_FV3LAM_wflow.py @@ -19,6 +19,7 @@ ln_vrfy, mkdir_vrfy, mv_vrfy, + rm_vrfy, run_command, date_to_str, define_macos_utilities, @@ -263,12 +264,11 @@ def generate_FV3LAM_wflow(ushdir, logfile: str = "log.generate_FV3LAM_wflow", de ) elif expt_config["platform"]["WORKFLOW_MANAGER"] == "ecflow": - # create directoies for ecflow in EXPTDIR + global_var_defns_fp = expt_config["workflow"]["GLOBAL_VAR_DEFNS_FP"] - exptdir = expt_config["workflow"]["EXPTDIR"] - mkdir_vrfy("-p", os.path.join(exptdir, "ecf")) - mkdir_vrfy("-p", os.path.join(exptdir, "ecf/scripts")) - mkdir_vrfy("-p", os.path.join(exptdir, "ecf/defs")) + homeaqm = expt_config["user"]["HOMEaqm"] + home_ecf = f"{homeaqm}/ecf" + rm_vrfy("-rf",f"{home_ecf}") # create ecflow definition file and job cards create_ecflow_scripts(global_var_defns_fp) diff --git a/ush/load_modules_run_task.sh b/ush/load_modules_run_task.sh index b098418e29..9db1b06717 100755 --- a/ush/load_modules_run_task.sh +++ b/ush/load_modules_run_task.sh @@ -99,8 +99,10 @@ set -u #----------------------------------------------------------------------- # machine=$(echo_lowercase $MACHINE) -if [ "${machine}" != "wcoss2" ]; then +if [ "${WORKFLOW_MANAGER}" != "ecflow" ]; then source "${HOMEaqm}/etc/lmod-setup.sh" ${machine} +fi +if [ "${machine}" != "wcoss2" ]; then module use "${HOMEaqm}/modulefiles" module load "${BUILD_MOD_FN}" || print_err_msg_exit "\ Loading of platform- and compiler-specific module file (BUILD_MOD_FN) @@ -149,11 +151,13 @@ print_info_msg "$VERBOSE" " module use "${modules_dir}" || print_err_msg_exit "\ Call to \"module use\" command failed." - + # source version file (run) only if it is specified in versions directory -VERSION_FILE="${HOMEaqm}/versions/${RUN_VER_FN}" -if [ -f ${VERSION_FILE} ]; then - . ${VERSION_FILE} +if [ "${WORKFLOW_MANAGER}" != "ecflow" ]; then + VERSION_FILE="${HOMEaqm}/versions/${RUN_VER_FN}" + if [ -f ${VERSION_FILE} ]; then + . ${VERSION_FILE} + fi fi # # Load the .local module file if available for the given task @@ -199,6 +203,7 @@ print_info_msg "$VERBOSE" " Launching J-job (jjob_fp) for task \"${task_name}\" ... jjob_fp = \"${jjob_fp}\" " + exec "${jjob_fp}" # #----------------------------------------------------------------------- @@ -210,4 +215,3 @@ exec "${jjob_fp}" # { restore_shell_opts; } > /dev/null 2>&1 - From d53e38d8415f7e6684d5912c56e9e41fcfbad688 Mon Sep 17 00:00:00 2001 From: chan-hoo Date: Sun, 4 Jun 2023 18:30:09 +0000 Subject: [PATCH 07/27] change paths for nco variables --- parm/FV3LAM_wflow.xml | 14 +++--- ush/config.aqm.nco.realtime.yaml | 12 ++--- ush/config_defaults.yaml | 65 +++++++++++++------------- ush/create_ecflow_scripts.py | 12 ++--- ush/job_preamble.sh | 80 +++++++++++++++++++++++--------- ush/machine/hera.yaml | 14 +++--- ush/machine/wcoss2.yaml | 16 +++---- ush/setup.py | 30 ++++++------ 8 files changed, 139 insertions(+), 104 deletions(-) diff --git a/parm/FV3LAM_wflow.xml b/parm/FV3LAM_wflow.xml index 4515c849e8..13dcdf4483 100644 --- a/parm/FV3LAM_wflow.xml +++ b/parm/FV3LAM_wflow.xml @@ -108,13 +108,13 @@ Directories and files. {%- if run_envir == "nco" %} {%- if do_ensemble %} -@Y@m@d@H/dyn"> -@Y@m@d@H/phy"> +@Y@m@d@H/dyn"> +@Y@m@d@H/phy"> {%- else %} -@Y@m@d@H/dyn"> -@Y@m@d@H/phy"> +@Y@m@d@H/dyn"> +@Y@m@d@H/phy"> {%- endif %} - + {%- else %} @Y@m@d@H{{ slash_ensmem_subdir }}/dyn"> @Y@m@d@H{{ slash_ensmem_subdir }}/phy"> @@ -122,10 +122,10 @@ Directories and files. {%- endif %} {%- if run_envir == "nco" %} -@Y@m@d"> +@Y@m@d"> {%- else %} - + {%- endif %} diff --git a/ush/config.aqm.nco.realtime.yaml b/ush/config.aqm.nco.realtime.yaml index c3a8fabe7a..4392eee982 100644 --- a/ush/config.aqm.nco.realtime.yaml +++ b/ush/config.aqm.nco.realtime.yaml @@ -31,12 +31,12 @@ workflow: COLDSTART: false WARMSTART_CYCLE_DIR: /path/to/restart/dir nco: - envir: prod - NET: aqm - model_ver: v7.0 - RUN: aqm_nco_aqmna13km - OPSROOT: /path/to/custom/opsroot - KEEPDATA: false + envir_dfv: prod + NET_dfv: aqm + model_ver_dfv: v7.0 + RUN_dfv: aqm_nco_aqmna13km + OPSROOT_dfv: /path/to/custom/opsroot + KEEPDATA_dfv: false workflow_switches: RUN_TASK_MAKE_GRID: false RUN_TASK_MAKE_OROG: false diff --git a/ush/config_defaults.yaml b/ush/config_defaults.yaml index 7a4ee1fd31..4e09df356d 100644 --- a/ush/config_defaults.yaml +++ b/ush/config_defaults.yaml @@ -905,7 +905,10 @@ nco: #----------------------------------------------------------------------- # # Set variables that are only used in NCO mode (i.e. when RUN_ENVIR is - # set to "nco"). Definitions: + # set to "nco"). All variables have the suffix _dfv meaning the default value. + # This is bacuase they are used as the default values for the production using ecFlow. + # + # Definitions: # # envir, NET, model_ver, RUN: # Standard environment variables defined in the NCEP Central Operations WCOSS @@ -937,35 +940,35 @@ nco: # #----------------------------------------------------------------------- # - envir: "prod" - NET: "aqm" - RUN: "aqm" - model_ver: "v7.0.0" - OPSROOT: '{{ workflow.EXPT_BASEDIR }}/../nco_dirs' - COMROOT: '{{ OPSROOT }}/com' - PACKAGEROOT: '{{ OPSROOT }}/packages' - DATAROOT: '{{ OPSROOT }}/tmp' - DCOMROOT: '{{ OPSROOT }}/dcom' - LOGBASEDIR: '{{ OPSROOT }}/output' - COMIN_BASEDIR: '{{ COMROOT }}/{{ NET }}/{{ model_ver }}' - COMOUT_BASEDIR: '{{ COMROOT }}/{{ NET }}/{{ model_ver }}' + envir_dfv: "prod" + NET_dfv: "aqm" + RUN_dfv: "aqm" + model_ver_dfv: "v7.0.0" + OPSROOT_dfv: '{{ workflow.EXPT_BASEDIR }}/../nco_dirs' + COMROOT_dfv: '{{ OPSROOT_dfv }}/com' + COMIN_BASEDIR: '{{ COMROOT_dfv }}/{{ NET_dfv }}/{{ model_ver_dfv }}' + COMOUT_BASEDIR: '{{ COMROOT_dfv }}/{{ NET_dfv }}/{{ model_ver_dfv }}' + + DATAROOT_dfv: '{{ OPSROOT_dfv }}/tmp' + DCOMROOT_dfv: '{{ OPSROOT_dfv }}/dcom' + LOGBASEDIR_dfv: '{{ OPSROOT_dfv }}/output' # #----------------------------------------------------------------------- # - # The following are also described in the NCO doc above + # The following are also described in the NCO doc above: default values # #----------------------------------------------------------------------- # - DBNROOT: "" - SENDECF: false - SENDDBN: false - SENDDBN_NTC: false - SENDCOM: false - SENDWEB: false - KEEPDATA: true - MAILTO: "" - MAILCC: "" + DBNROOT_dfv: "" + SENDECF_dfv: false + SENDDBN_dfv: false + SENDDBN_NTC_dfv: false + SENDCOM_dfv: false + SENDWEB_dfv: false + KEEPDATA_dfv: true + MAILTO_dfv: "" + MAILCC_dfv: "" #---------------------------- @@ -3015,18 +3018,18 @@ cpl_aqm_parm: DO_AQM_SAVE_FIRE: false AQM_CONFIG_DIR: "" - DCOMINbio: "" + DCOMINbio_dfv: "" AQM_BIO_FILE: "BEIS_SARC401.ncf" - DCOMINdust: "/path/to/dust/dir" + DCOMINdust_dfv: "/path/to/dust/dir" AQM_DUST_FILE_PREFIX: "FENGSHA_p8_10km_inputs" AQM_DUST_FILE_SUFFIX: ".nc" - DCOMINcanopy: "/path/to/canopy/dir" + DCOMINcanopy_dfv: "/path/to/canopy/dir" AQM_CANOPY_FILE_PREFIX: "gfs.t12z.geo" AQM_CANOPY_FILE_SUFFIX: ".canopy_regrid.nc" - DCOMINfire: "" + DCOMINfire_dfv: "" AQM_FIRE_FILE_PREFIX: "GBBEPx_C401GRID.emissions_v003" AQM_FIRE_FILE_SUFFIX: ".nc" AQM_FIRE_ARCHV_DIR: "/path/to/archive/dir/for/RAVE/on/HPSS" @@ -3035,10 +3038,10 @@ cpl_aqm_parm: AQM_RC_PRODUCT_FN: "aqm.prod.nc" AQM_RC_PRODUCT_FREQUENCY: "hourly" - DCOMINchem_lbcs: "" + DCOMINchem_lbcs_dfv: "" AQM_LBCS_FILES: "am4_bndy_c793.2019.v1.nc" - DCOMINgefs: "" + DCOMINgefs_def: "" AQM_GEFS_FILE_PREFIX: "geaer" AQM_GEFS_FILE_CYC: "" @@ -3049,7 +3052,7 @@ cpl_aqm_parm: NEXUS_GFS_SFC_DIR: "" NEXUS_GFS_SFC_ARCHV_DIR: "/NCEPPROD/hpssprod/runhistory" - DCOMINpt_src: "/path/to/point/source/base/directory" + DCOMINpt_src_dfv: "/path/to/point/source/base/directory" - DCOMINairnow: "/path/to/airnow/obaservation/data" + DCOMINairnow_dfv: "/path/to/airnow/obaservation/data" AQM_AIRNOW_HIST_DIR: "/path/to/historical/airnow/data/dir" diff --git a/ush/create_ecflow_scripts.py b/ush/create_ecflow_scripts.py index 95c5d0ca06..cecedd6050 100644 --- a/ush/create_ecflow_scripts.py +++ b/ush/create_ecflow_scripts.py @@ -144,18 +144,18 @@ def create_ecflow_scripts(global_var_defns_fp): # #----------------------------------------------------------------------- # - ecflow_defn_fn = f"{NET}_cycled.def" + ecflow_defn_fn = f"{NET_dfv}_cycled.def" ecflow_defn_tmpl_fp = os.path.join(PARMdir, "ecflow/defs", "ecf_defn_template.def") ecflow_defn_fp = os.path.join(home_ecf, "ecf/defs", ecflow_defn_fn) settings = { - "model_ver": model_ver, + "model_ver": model_ver_dfv, "ecf_suite_nm": ecf_suite_nm, "home_ecf": home_ecf, - "net": NET, - "run": RUN, - "envir": envir, - "logbasedir": LOGBASEDIR, + "net": NET_dfv, + "run": RUN_dfv, + "envir": envir_dfv, + "logbasedir": LOGBASEDIR_dfv, } settings_str = cfg_to_yaml_str(settings) diff --git a/ush/job_preamble.sh b/ush/job_preamble.sh index adb3f0b503..2c2fe5af9b 100644 --- a/ush/job_preamble.sh +++ b/ush/job_preamble.sh @@ -7,11 +7,67 @@ # #----------------------------------------------------------------------- # -export share_pid=${WORKFLOW_ID}_${PDY}${cyc} +if [ "${WORKFLOW_MANAGER}" = "ecflow" ]; then + export share_pid=${share_pid:-${PDY}${cyc}} +else + export share_pid=${share_pid:-${WORKFLOW_ID}_${PDY}${cyc}} +fi + if [ $# -ne 0 ]; then export pid=$share_pid export jobid=${job}.${pid} fi +# +#----------------------------------------------------------------------- +# +# Set NCO standard environment variables +# +#----------------------------------------------------------------------- +# +export envir="${envir:-${envir_dfv}}" +export NET="${NET:-${NET_dfv}}" +export RUN="${RUN:-${RUN_dfv}}" +export model_ver="${model_ver:-${model_ver_dfv}}" +export COMROOT="${COMROOT:-${COMROOT_dfv}}" +export DATAROOT="${DATAROOT:-${DATAROOT_dfv}}" +export DCOMROOT="${DCOMROOT:-${DCOMROOT_dfv}}" +export LOGBASEDIR="${LOGBASEDIR:-${LOGBASEDIR_dfv}}" + +export DBNROOT="${DBNROOT:-${DBNROOT_dfv}}" +export SENDECF="${SENDECF:-${SENDECF_dfv}}" +export SENDDBN="${SENDDBN:-${SENDDBN_dfv}}" +export SENDDBN_NTC="${SENDDBN_NTC:-${SENDDBN_NTC_dfv}}" +export SENDCOM="${SENDCOM:-${SENDCOM_dfv}}" +export SENDWEB="${SENDWEB:-${SENDWEB_dfv}}" +export KEEPDATA="${KEEPDATA:-${KEEPDATA_dfv}}" +export MAILTO="${MAILTO:-${MAILTO_dfv}}" +export MAILCC="${MAILCC:-${MAILCC_dfv}}" + +if [ "${RUN_ENVIR}" = "nco" ]; then + [[ "$WORKFLOW_MANAGER" = "rocoto" ]] && export COMROOT=$COMROOT + export COMIN="${COMIN:-$(compath.py -o ${NET}/${model_ver}/${RUN}.${PDY}/${cyc})}" + export COMOUT="${COMOUT:-$(compath.py -o ${NET}/${model_ver}/${RUN}.${PDY}/${cyc})}" + export COMINm1="${COMINm1:-$(compath.py -o ${NET}/${model_ver}/${RUN}.${PDYm1})}" + + export COMINgfs="${COMINgfs:-$(compath.py ${envir}/gfs/${gfs_ver})}" + export COMINgefs="${COMINgefs:-$(compath.py ${envir}/gefs/${gefs_ver})}" + +else + export COMIN="${COMIN_BASEDIR}/${PDY}${cyc}" + export COMOUT="${COMOUT_BASEDIR}/${PDY}${cyc}" + export COMINm1="${COMIN_BASEDIR}/${RUN}.${PDYm1}" +fi +export COMOUTwmo="${COMOUTwmo:-${COMOUT}/wmo}" + +export DCOMINbio="${DCOMINbio:-${DCOMINbio_dfv}}" +export DCOMINdust="${DCOMINdust:-${DCOMINdust_dfv}}" +export DCOMINcanopy="${DCOMINcanopy:-${DCOMINcanopy_dfv}}" +export DCOMINfire="${DCOMINfire:-${DCOMINfire_dfv}}" +export DCOMINchem_lbcs="${DCOMINchem_lbcs:-${DCOMINchem_lbcs_dfv}}" +export DCOMINgefs="${DCOMINgefs:-${DCOMINgefs_dfv}}" +export DCOMINpt_src="${DCOMINpt_src:-${DCOMINpt_src_dfv}}" +export DCOMINairnow="${DCOMINairnow:-${DCOMINairnow_dfv}}" + # #----------------------------------------------------------------------- # @@ -114,29 +170,7 @@ else fi export -f PREP_STEP export -f POST_STEP -# -#----------------------------------------------------------------------- -# -# Set COMIN / COMOUT / other common variables -# -#----------------------------------------------------------------------- -# -if [ "${RUN_ENVIR}" = "nco" ]; then - export COMROOT=$COMROOT - export COMIN="${COMIN:-$(compath.py -o ${NET}/${model_ver}/${RUN}.${PDY}/${cyc})}" - export COMOUT="${COMOUT:-$(compath.py -o ${NET}/${model_ver}/${RUN}.${PDY}/${cyc})}" - export COMINm1="${COMINm1:-$(compath.py -o ${NET}/${model_ver}/${RUN}.${PDYm1})}" - - export COMINgfs="${COMINgfs:-$(compath.py ${envir}/gfs/${gfs_ver})}" - export COMINgefs="${COMINgefs:-$(compath.py ${envir}/gefs/${gefs_ver})}" - export KEEPDATA="${KEEPDATA:-$KEEPDATA}" -else - export COMIN="${COMIN_BASEDIR}/${PDY}${cyc}" - export COMOUT="${COMOUT_BASEDIR}/${PDY}${cyc}" - export COMINm1="${COMIN_BASEDIR}/${RUN}.${PDYm1}" -fi -export COMOUTwmo="${COMOUTwmo:-${COMOUT}/wmo}" # #----------------------------------------------------------------------- # diff --git a/ush/machine/hera.yaml b/ush/machine/hera.yaml index ec66ef5957..76f150d475 100644 --- a/ush/machine/hera.yaml +++ b/ush/machine/hera.yaml @@ -43,13 +43,13 @@ data: RAP_obs: /scratch2/BMC/public/data/grids/rap/obs cpl_aqm_parm: AQM_CONFIG_DIR: /scratch2/NCEPDEV/naqfc/RRFS_CMAQ/aqm/epa/data - DCOMINbio: /scratch2/NCEPDEV/naqfc/RRFS_CMAQ/aqm/bio - DCOMINdust: /scratch2/NCEPDEV/naqfc/RRFS_CMAQ/FENGSHA - DCOMINcanopy: /scratch2/NCEPDEV/naqfc/RRFS_CMAQ/canopy - DCOMINfire: /scratch2/NCEPDEV/naqfc/RRFS_CMAQ/RAVE_fire - DCOMINchem_lbcs: /scratch2/NCEPDEV/naqfc/RRFS_CMAQ/LBCS/AQM_NA13km_AM4_v1 - DCOMINgefs: /scratch2/NCEPDEV/naqfc/RRFS_CMAQ/GEFS_DATA - DCOMINpt_src: /scratch1/RDARCH/rda-arl-gpu/Barry.Baker/emissions/nexus/NEI2016v1/v2023-01-PT + DCOMINbio_dfv: /scratch2/NCEPDEV/naqfc/RRFS_CMAQ/aqm/bio + DCOMINdust_dfv: /scratch2/NCEPDEV/naqfc/RRFS_CMAQ/FENGSHA + DCOMINcanopy_dfv: /scratch2/NCEPDEV/naqfc/RRFS_CMAQ/canopy + DCOMINfire_dfv: /scratch2/NCEPDEV/naqfc/RRFS_CMAQ/RAVE_fire + DCOMINchem_lbcs_dfv: /scratch2/NCEPDEV/naqfc/RRFS_CMAQ/LBCS/AQM_NA13km_AM4_v1 + DCOMINgefs_dfv: /scratch2/NCEPDEV/naqfc/RRFS_CMAQ/GEFS_DATA + DCOMINpt_src_dfv: /scratch1/RDARCH/rda-arl-gpu/Barry.Baker/emissions/nexus/NEI2016v1/v2023-01-PT NEXUS_INPUT_DIR: /scratch2/NCEPDEV/naqfc/RRFS_CMAQ/emissions/nexus NEXUS_FIX_DIR: /scratch2/NCEPDEV/naqfc/RRFS_CMAQ/nexus/fix diff --git a/ush/machine/wcoss2.yaml b/ush/machine/wcoss2.yaml index e104363a1e..349c279746 100644 --- a/ush/machine/wcoss2.yaml +++ b/ush/machine/wcoss2.yaml @@ -39,14 +39,14 @@ data: HRRR: compath.py ${envir}/hrrr/${hrrr_ver}/hrrr.${PDYext}/conus cpl_aqm_parm: AQM_CONFIG_DIR: /lfs/h2/emc/lam/noscrub/RRFS_CMAQ/aqm/epa/data - DCOMINbio: /lfs/h2/emc/lam/noscrub/RRFS_CMAQ/aqm/bio - DCOMINdust: /lfs/h2/emc/lam/noscrub/RRFS_CMAQ/FENGSHA - DCOMINcanopy: /lfs/h2/emc/lam/noscrub/RRFS_CMAQ/canopy - DCOMINfire: /lfs/h2/emc/physics/noscrub/kai.wang/RAVE_fire/RAVE_NA_NRT - DCOMINchem_lbcs: /lfs/h2/emc/lam/noscrub/RRFS_CMAQ/LBCS/AQM_NA13km_AM4_v1 - DCOMINgefs: /lfs/h2/emc/lam/noscrub/RRFS_CMAQ/GEFS_DATA - DCOMINpt_src: /lfs/h2/emc/physics/noscrub/Youhua.Tang/nei2016v1-pt/v2023-01-PT - DCOMINairnow: /lfs/h1/ops/prod/dcom + DCOMINbio_dfv: /lfs/h2/emc/lam/noscrub/RRFS_CMAQ/aqm/bio + DCOMINdust_dfv: /lfs/h2/emc/lam/noscrub/RRFS_CMAQ/FENGSHA + DCOMINcanopy_dfv: /lfs/h2/emc/lam/noscrub/RRFS_CMAQ/canopy + DCOMINfire_dfv: /lfs/h2/emc/physics/noscrub/kai.wang/RAVE_fire/RAVE_NA_NRT + DCOMINchem_lbcs_dfv: /lfs/h2/emc/lam/noscrub/RRFS_CMAQ/LBCS/AQM_NA13km_AM4_v1 + DCOMINgefs_dfv: /lfs/h2/emc/lam/noscrub/RRFS_CMAQ/GEFS_DATA + DCOMINpt_src_dfv: /lfs/h2/emc/physics/noscrub/Youhua.Tang/nei2016v1-pt/v2023-01-PT + DCOMINairnow_dfv: /lfs/h1/ops/prod/dcom AQM_AIRNOW_HIST_DIR: /lfs/h2/emc/physics/noscrub/jianping.huang/Bias_correction/aqmv7.0 NEXUS_INPUT_DIR: /lfs/h2/emc/lam/noscrub/RRFS_CMAQ/nexus_emissions NEXUS_FIX_DIR: /lfs/h2/emc/lam/noscrub/RRFS_CMAQ/nexus/fix diff --git a/ush/setup.py b/ush/setup.py index bca641a3be..e6ed1a2a13 100644 --- a/ush/setup.py +++ b/ush/setup.py @@ -975,11 +975,10 @@ def get_location(xcs, fmt, expt_cfg): # running in community mode, we set these paths to the experiment # directory. nco_vars = [ - "opsroot", - "comroot", - "packageroot", - "dataroot", - "dcomroot", + "opsroot_dfv", + "comroot_dfv", + "dataroot_dfv", + "dcomroot_dfv", "comin_basedir", "comout_basedir", ] @@ -990,24 +989,23 @@ def get_location(xcs, fmt, expt_cfg): for nco_var in nco_vars: nco_config[nco_var.upper()] = exptdir - nco_config["LOGBASEDIR"] = os.path.join(exptdir, "log") + nco_config["LOGBASEDIR_dfv"] = os.path.join(exptdir, "log") # Use env variables for NCO variables and create NCO directories - if run_envir == "nco": - + workflow_manager = expt_config["platform"].get("WORKFLOW_MANAGER") + if run_envir == "nco" and workflow_manager == "rocoto": for nco_var in nco_vars: envar = os.environ.get(nco_var) if envar is not None: nco_config[nco_var.upper()] = envar - mkdir_vrfy(f' -p "{nco_config.get("OPSROOT")}"') - mkdir_vrfy(f' -p "{nco_config.get("COMROOT")}"') - mkdir_vrfy(f' -p "{nco_config.get("PACKAGEROOT")}"') - mkdir_vrfy(f' -p "{nco_config.get("DATAROOT")}"') - mkdir_vrfy(f' -p "{nco_config.get("DCOMROOT")}"') - mkdir_vrfy(f' -p "{nco_config.get("LOGBASEDIR")}"') - if nco_config["DBNROOT"]: - mkdir_vrfy(f' -p "{nco_config["DBNROOT"]}"') + mkdir_vrfy(f' -p "{nco_config.get("OPSROOT_dfv")}"') + mkdir_vrfy(f' -p "{nco_config.get("COMROOT_dfv")}"') + mkdir_vrfy(f' -p "{nco_config.get("DATAROOT_dfv")}"') + mkdir_vrfy(f' -p "{nco_config.get("DCOMROOT_dfv")}"') + mkdir_vrfy(f' -p "{nco_config.get("LOGBASEDIR_dfv")}"') + if nco_config["DBNROOT_dfv"] and workflow_manager == "rocoto": + mkdir_vrfy(f' -p "{nco_config["DBNROOT_dfv"]}"') # create experiment dir mkdir_vrfy(f' -p "{exptdir}"') From 0f2f4b50bfc6aff6236010c54797a8ca01aa6007 Mon Sep 17 00:00:00 2001 From: chan-hoo Date: Sun, 4 Jun 2023 20:39:29 +0000 Subject: [PATCH 08/27] fix typo --- ush/create_ecflow_scripts.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ush/create_ecflow_scripts.py b/ush/create_ecflow_scripts.py index cecedd6050..a4c0434f71 100644 --- a/ush/create_ecflow_scripts.py +++ b/ush/create_ecflow_scripts.py @@ -63,7 +63,7 @@ def create_ecflow_scripts(global_var_defns_fp): # #----------------------------------------------------------------------- # - ecf_suite_nm = f"prod_{NET}" + ecf_suite_nm = f"prod_{NET_dfv}" grp_aqm_manager = ["aqm_manager", "data_cleanup"] grp_forecast = ["jforecast"] grp_nexus = ["jnexus_emission", "jnexus_gfs_sfc", "jnexus_post_split"] From fceee1ae8596139432ed0fc0ccbdb80ee0bc67ab Mon Sep 17 00:00:00 2001 From: chan-hoo Date: Mon, 5 Jun 2023 00:10:06 +0000 Subject: [PATCH 09/27] make complete flag only for rocoto --- jobs/JREGIONAL_RUN_POST | 16 +++++++++------- scripts/exregional_pre_post_stat.sh | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/jobs/JREGIONAL_RUN_POST b/jobs/JREGIONAL_RUN_POST index 308e254b7e..b36222f13e 100755 --- a/jobs/JREGIONAL_RUN_POST +++ b/jobs/JREGIONAL_RUN_POST @@ -137,14 +137,16 @@ Call to ex-script corresponding to J-job \"${scrfunc_fn}\" failed." # #----------------------------------------------------------------------- # -if [ ${#FCST_LEN_CYCL[@]} -gt 1 ]; then - cyc_mod=$(( ${cyc} - ${DATE_FIRST_CYCL:8:2} )) - CYCLE_IDX=$(( ${cyc_mod} / ${INCR_CYCL_FREQ} )) - FCST_LEN_HRS=${FCST_LEN_CYCL[$CYCLE_IDX]} +if [ "${WORKFLOW_MANAGER}" = "rocoto"]; then + if [ ${#FCST_LEN_CYCL[@]} -gt 1 ]; then + cyc_mod=$(( ${cyc} - ${DATE_FIRST_CYCL:8:2} )) + CYCLE_IDX=$(( ${cyc_mod} / ${INCR_CYCL_FREQ} )) + FCST_LEN_HRS=${FCST_LEN_CYCL[$CYCLE_IDX]} - fcst_len_hrs=$( printf "%03d" "${FCST_LEN_HRS}" ) - if [ "${fhr}" = "${fcst_len_hrs}" ]; then - touch "${COMIN}/post_${PDY}${cyc}_task_complete.txt" + fcst_len_hrs=$( printf "%03d" "${FCST_LEN_HRS}" ) + if [ "${fhr}" = "${fcst_len_hrs}" ]; then + touch "${COMIN}/post_${PDY}${cyc}_task_complete.txt" + fi fi fi # diff --git a/scripts/exregional_pre_post_stat.sh b/scripts/exregional_pre_post_stat.sh index dce755c1bc..3d96a816cd 100755 --- a/scripts/exregional_pre_post_stat.sh +++ b/scripts/exregional_pre_post_stat.sh @@ -57,7 +57,7 @@ if [ ${#FCST_LEN_CYCL[@]} -gt 1 ]; then cyc_mod=$(( ${cyc} - ${DATE_FIRST_CYCL:8:2} )) CYCLE_IDX=$(( ${cyc_mod} / ${INCR_CYCL_FREQ} )) FCST_LEN_HRS=${FCST_LEN_CYCL[$CYCLE_IDX]} - if [ "${RUN_TASK_RUN_POST}" = "TRUE" ]; then + if [ "${WORKFLOW_MANAGER}" = "rocoto" ] && [ "${RUN_TASK_RUN_POST}" = "TRUE" ]; then rm -f "${COMIN}/${TN_RUN_POST}_${PDY}${cyc}_task_complete.txt" fi fi From 9dc08ba2c45f28dc1d341b1b39c1a6d02b98572f Mon Sep 17 00:00:00 2001 From: chan-hoo Date: Mon, 5 Jun 2023 01:09:52 +0000 Subject: [PATCH 10/27] bug fix in default fcst_len_cycl --- ush/config_defaults.yaml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/ush/config_defaults.yaml b/ush/config_defaults.yaml index 4e09df356d..16c3e073ad 100644 --- a/ush/config_defaults.yaml +++ b/ush/config_defaults.yaml @@ -807,10 +807,7 @@ workflow: INCR_CYCL_FREQ: 24 FCST_LEN_HRS: 24 FCST_LEN_CYCL: - - 6 - - 12 - - 12 - - 6 + - '{{ FCST_LEN_HRS }}' # #----------------------------------------------------------------------- From 4133be926ac0f56ee3b2c8ad3d3695e7f15fa51f Mon Sep 17 00:00:00 2001 From: chan-hoo Date: Mon, 5 Jun 2023 10:32:26 +0000 Subject: [PATCH 11/27] add missing include --- .gitignore | 1 - parm/ecflow/include_tmpl/envir-p1.h | 51 ++++++++++++++++ parm/ecflow/include_tmpl/head.h | 93 +++++++++++++++++++++++++++++ parm/ecflow/include_tmpl/tail.h | 3 + ush/create_ecflow_scripts.py | 2 +- 5 files changed, 148 insertions(+), 2 deletions(-) create mode 100644 parm/ecflow/include_tmpl/envir-p1.h create mode 100644 parm/ecflow/include_tmpl/head.h create mode 100644 parm/ecflow/include_tmpl/tail.h diff --git a/.gitignore b/.gitignore index ed736c9d74..5c8d075e50 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,6 @@ fix/ include/ lib/ share/ -modulefiles/extrn_comp_build/ sorc/*/ tests/WE2E/WE2E_tests_*.yaml tests/WE2E/*.txt diff --git a/parm/ecflow/include_tmpl/envir-p1.h b/parm/ecflow/include_tmpl/envir-p1.h new file mode 100644 index 0000000000..8d469f83ec --- /dev/null +++ b/parm/ecflow/include_tmpl/envir-p1.h @@ -0,0 +1,51 @@ +# envir-p1.h + +export model_ver="v7.0" +export RUN=%RUN% + +if [ -n "%SENDCANNEDDBN:%" ]; then export SENDCANNEDDBN=${SENDCANNEDDBN:-%SENDCANNEDDBN:%}; fi +export SENDCANNEDDBN=${SENDCANNEDDBN:-"NO"} + +if [[ "$envir" == prod && "$SENDDBN" == YES ]]; then + export eval=%EVAL:NO% + if [ $eval == YES ]; then export SIPHONROOT=${UTILROOT}/para_dbn + else export SIPHONROOT=/lfs/h1/ops/prod/dbnet_siphon + fi + if [ "$PARATEST" == YES ]; then export SIPHONROOT=${UTILROOT}/fakedbn; export NODBNFCHK=YES; fi +else + export SIPHONROOT=${UTILROOT}/fakedbn +fi +export SIPHONROOT=${UTILROOT}/fakedbn +export DBNROOT=$SIPHONROOT + +if [[ ! " prod para test " =~ " ${envir} " && " ops.prod ops.para " =~ " $(whoami) " ]]; then err_exit "ENVIR must be prod, para, or test [envir-p1.h]"; fi + +# KEEPDATA is defined in head.h +if [ "${KEEPDATA}" = "YES" ] || [ "${KEEPDATA}" = "TRUE" ]; then + export KEEPDATA="TRUE" +elif [ "${KEEPDATA}" = "NO" ] || [ "${KEEPDATA}" = "FALSE" ]; then + export KEEPDATA="FALSE" +fi + +# Developer configuration +PTMP=/lfs/h2/emc/ptmp +PSLOT=ecflow_aqm + +export OPSROOT="${PTMP}/${USER}/${PSLOT}/para" +export COMROOT="${OPSROOT}/com" +export DATAROOT="${OPSROOT}/tmp" +export DCOMROOT="${OPSROOT}/dcom" + +#export DCOMINbio: /lfs/h2/emc/lam/noscrub/RRFS_CMAQ/aqm/bio +#export DCOMINdust: /lfs/h2/emc/lam/noscrub/RRFS_CMAQ/FENGSHA +#export DCOMINfire: /lfs/h2/emc/physics/noscrub/kai.wang/RAVE_fire/RAVE_NA_NRT +#export DCOMINchem_lbcs: /lfs/h2/emc/lam/noscrub/RRFS_CMAQ/LBCS/AQM_NA13km_AM4_v1 +#export DCOMINgefs: /lfs/h2/emc/lam/noscrub/RRFS_CMAQ/GEFS_DATA +#export DCOMINpt_src: /lfs/h2/emc/physics/noscrub/Youhua.Tang/nei2016v1-pt/v2023-01-PT +#export DCOMINairnow: /lfs/h1/ops/prod/dcom + +if [ -n "%PDY:%" ]; then + export PDY=${PDY:-%PDY:%} + export CDATE=${PDY}%CYC:% +fi + diff --git a/parm/ecflow/include_tmpl/head.h b/parm/ecflow/include_tmpl/head.h new file mode 100644 index 0000000000..dbd9e5941a --- /dev/null +++ b/parm/ecflow/include_tmpl/head.h @@ -0,0 +1,93 @@ +date +hostname +set -xe # print commands as they are executed and enable signal trapping + +export PS4='+ $SECONDS + ' + +# Variables needed for communication with ecFlow +export ECF_NAME=%ECF_NAME% +export ECF_HOST=%ECF_LOGHOST% +export ECF_PORT=%ECF_PORT% +export ECF_PASS=%ECF_PASS% +export ECF_TRYNO=%ECF_TRYNO% +export ECF_RID=${ECF_RID:-${PBS_JOBID:-$(hostname -s).$$}} +export ECF_JOB=%ECF_JOB% +export ECF_JOBOUT=%ECF_JOBOUT% +export ecflow_ver=%ecflow_ver% + +if [ -d /apps/ops/prod ]; then # On WCOSS2 + set +x + echo "Running 'module reset'" + module reset + set -x +fi + +# Setting the model package location +modelhome=%PACKAGEHOME:% +eval "export HOME${model:?'model undefined'}=$modelhome" +eval "versionfile=\$HOME${model}/versions/run.ver" +if [ -f "$versionfile" ]; then + . $versionfile +fi +export envir=%ENVIR% +export MACHINE_SITE=%MACHINE_SITE% +export RUN_ENVIR=${RUN_ENVIR:-nco} +export SENDECF=${SENDECF:-YES} +export SENDCOM=${SENDCOM:-YES} +if [ -n "%PDY:%" ]; then export PDY=${PDY:-%PDY:%}; fi +if [ -n "%PARATEST:%" ]; then export PARATEST=${PARATEST:-%PARATEST:%}; fi +if [ -n "%COMPATH:%" ]; then export COMPATH=${COMPATH:-%COMPATH:%}; fi +if [ -n "%MAILTO:%" ]; then export MAILTO=${MAILTO:-%MAILTO:%}; fi +if [ -n "%DBNLOG:%" ]; then export DBNLOG=${DBNLOG:-%DBNLOG:%}; fi +export KEEPDATA=YES +export SENDDBN=${SENDDBN:-%SENDDBN:YES%} +export SENDDBN_NTC=${SENDDBN_NTC:-%SENDDBN_NTC:YES%} + +if [ -d /apps/ops/prod ]; then # On WCOSS2 + set +x + if [ $(whoami) == ops.para ]; then + module use -a /apps/ops/para/nco/modulefiles/core + fi + echo "Running module load ecflow/$ecflow_ver" + module load ecflow/$ecflow_ver + echo "ecflow module location: $(module display ecflow |& head -2 | tail -1 | sed 's/:$//')" + set -x + . ${ECF_ROOT}/versions/run.ver + set +x + module load prod_util/${prod_util_ver} + module load prod_envir/${prod_envir_ver} + echo "Listing modules from head.h:" + module list + set -x +fi + +timeout 300 ecflow_client --init=${ECF_RID} + +if [[ " ops.prod ops.para " =~ " $(whoami) " ]]; then + POST_OUT=${POST_OUT:-/lfs/h1/ops/%ENVIR%/tmp/posts/ecflow_post_in.${ECF_RID}} + echo 'export ECF_NAME=${ECF_NAME}' > $POST_OUT + echo 'export ECF_HOST=${ECF_HOST}' >> $POST_OUT + echo 'export ECF_PORT=${ECF_PORT}' >> $POST_OUT + echo 'export ECF_PASS=${ECF_PASS}' >> $POST_OUT + echo 'export ECF_TRYNO=${ECF_TRYNO}' >> $POST_OUT + echo 'export ECF_RID=${ECF_RID}' >> $POST_OUT +fi + +# Define error handler +ERROR() { + set +ex + if [ "$1" -eq 0 ]; then + msg="Killed by signal (likely via qdel)" + else + msg="Killed by signal $1" + fi + ecflow_client --abort="$msg" + echo $msg + if [[ " ops.prod ops.para " =~ " $(whoami) " ]]; then + echo "# Trap Caught" >>$POST_OUT + fi + trap $1; exit $1 +} +# Trap all error and exit signals +trap 'ERROR $?' ERR EXIT + diff --git a/parm/ecflow/include_tmpl/tail.h b/parm/ecflow/include_tmpl/tail.h new file mode 100644 index 0000000000..c6686c5ca1 --- /dev/null +++ b/parm/ecflow/include_tmpl/tail.h @@ -0,0 +1,3 @@ +timeout 300 ecflow_client --complete # Notify ecFlow of a normal end +trap 0 # Remove all traps +exit 0 # End the shell diff --git a/ush/create_ecflow_scripts.py b/ush/create_ecflow_scripts.py index a4c0434f71..755d34de9c 100644 --- a/ush/create_ecflow_scripts.py +++ b/ush/create_ecflow_scripts.py @@ -54,7 +54,7 @@ def create_ecflow_scripts(global_var_defns_fp): # #----------------------------------------------------------------------- # - cp_vrfy("-r", os.path.join(PARMdir,"ecflow/include"), os.path.join(home_ecf, "ecf")) + cp_vrfy("-r", os.path.join(PARMdir,"ecflow/include_tmpl"), os.path.join(home_ecf, "ecf/include")) # #----------------------------------------------------------------------- From de39bfe404f888407eb0a6e648dfea754909c4c7 Mon Sep 17 00:00:00 2001 From: chan-hoo Date: Mon, 5 Jun 2023 16:35:45 +0000 Subject: [PATCH 12/27] replace exec with bash for ecflow --- ush/load_modules_run_task.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ush/load_modules_run_task.sh b/ush/load_modules_run_task.sh index 9db1b06717..a1b8398a46 100755 --- a/ush/load_modules_run_task.sh +++ b/ush/load_modules_run_task.sh @@ -204,7 +204,12 @@ Launching J-job (jjob_fp) for task \"${task_name}\" ... jjob_fp = \"${jjob_fp}\" " -exec "${jjob_fp}" +if [ "${WORKFLOW_MANAGER}" = "ecflow" ]; then + /bin/bash "${jjob_fp}" +else + exec "${jjob_fp}" +fi + # #----------------------------------------------------------------------- # From 96739f762f7d3ac929b10ef4b4bffd2e8f7c602e Mon Sep 17 00:00:00 2001 From: chan-hoo Date: Mon, 5 Jun 2023 17:15:35 +0000 Subject: [PATCH 13/27] update data_cleanup scripts --- jobs/JDATA_CLEANUP | 78 ++++++++++++++----- .../tasks/wcoss2/data_cleanup.local.lua | 1 + .../scripts/aqm_manager/data_cleanup.ecf | 17 ++-- scripts/exaqm_manager.sh | 1 - scripts/exdata_cleanup.sh | 75 +++++++++++++----- 5 files changed, 120 insertions(+), 52 deletions(-) create mode 100644 modulefiles/tasks/wcoss2/data_cleanup.local.lua diff --git a/jobs/JDATA_CLEANUP b/jobs/JDATA_CLEANUP index 5cda6bb171..9d5e34af7f 100755 --- a/jobs/JDATA_CLEANUP +++ b/jobs/JDATA_CLEANUP @@ -1,26 +1,64 @@ #!/bin/bash -set -x -export RUN_ENVIR=${RUN_ENVIR:-"nco"} -export PS4='$SECONDS + ' -date - -############################################## -# Obtain unique process id (pid) and make temp directory -############################################## -export pid=${pid:-$$} -export outid=${outid:-"LL$job"} +# +#----------------------------------------------------------------------- +# +# This script copies files from various directories into the experiment +# directory, creates links to some of them, and modifies others (e.g. +# templates) to customize them for the current experiment setup. +# +#----------------------------------------------------------------------- +# -export DATA=${DATA:-${DATAROOT}/${jobid:?}} -mkdir -p $DATA -cd $DATA +# +#----------------------------------------------------------------------- +# +# Source the variable definitions file and the bash utility functions. +# +#----------------------------------------------------------------------- +# +. $USHdir/source_util_funcs.sh +. ${GLOBAL_VAR_DEFNS_FP} +. $USHdir/job_preamble.sh +# +#----------------------------------------------------------------------- +# +# Save current shell options (in a global array). Then set new options +# for this script/function. +# +#----------------------------------------------------------------------- +# +{ save_shell_opts; . $USHdir/preamble.sh; } > /dev/null 2>&1 +# +#----------------------------------------------------------------------- +# +# Get the full path to the file in which this script/function is located +# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in +# which the file is located (scrfunc_dir). +# +#----------------------------------------------------------------------- +# +scrfunc_fp=$( $READLINK -f "${BASH_SOURCE[0]}" ) +scrfunc_fn=$( basename "${scrfunc_fp}" ) +scrfunc_dir=$( dirname "${scrfunc_fp}" ) +# +#----------------------------------------------------------------------- +# +# Print message indicating entry into script. +# +#----------------------------------------------------------------------- +# +print_info_msg " +======================================================================== +Entering script: \"${scrfunc_fn}\" +In directory: \"${scrfunc_dir}\" -############################################## -# Run setpdy and initialize PDY variables -############################################## -export cycle="t${cyc}z" -setpdy.sh -. ./PDY +This is the J-job script for the task that runs a forecast with FV3 for +the specified cycle. +========================================================================" +# +export PS4='$SECONDS + ' +date ############################################## # Set variables used in the script @@ -33,7 +71,7 @@ status=$? # Remove the Temporary working directory ########################################## cd $DATAROOT -[[ $KEEPDATA = "NO" ]] && rm -rf $DATA +[[ $KEEPDATA = "FALSE" ]] && rm -rf $DATA date exit 0 diff --git a/modulefiles/tasks/wcoss2/data_cleanup.local.lua b/modulefiles/tasks/wcoss2/data_cleanup.local.lua new file mode 100644 index 0000000000..3370fa018b --- /dev/null +++ b/modulefiles/tasks/wcoss2/data_cleanup.local.lua @@ -0,0 +1 @@ +load("python_regional_workflow") diff --git a/parm/ecflow/scripts/aqm_manager/data_cleanup.ecf b/parm/ecflow/scripts/aqm_manager/data_cleanup.ecf index 7cf558ce86..b89105eef2 100644 --- a/parm/ecflow/scripts/aqm_manager/data_cleanup.ecf +++ b/parm/ecflow/scripts/aqm_manager/data_cleanup.ecf @@ -2,7 +2,7 @@ #PBS -j oe #PBS -q %QUEUE% #PBS -A %PROJ%-%PROJENVIR% -#PBS -l walltime=06:00:00 +#PBS -l walltime=00:30:00 #PBS -l select=1:ncpus=1:mem=1GB #PBS -l place=vscatter #PBS -l debug=true @@ -11,19 +11,14 @@ model=aqm %include %include -############################################################ -# Load modules -############################################################ - -module list - export cyc=%CYC% export cycle=t${cyc}z -############################################################ -# CALL executable job script here -############################################################ -${HOMEaqm}/jobs/JDATA_CLEANUP +export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" +export USHdir="{{ ushdir }}" +JOBSdir="{{ jobsdir }}" + +. ${USHdir}/load_modules_run_task.sh data_cleanup "${JOBSdir}/JDATA_CLEANUP" %include %manual diff --git a/scripts/exaqm_manager.sh b/scripts/exaqm_manager.sh index 94fc2ed6c9..89bc96dad7 100755 --- a/scripts/exaqm_manager.sh +++ b/scripts/exaqm_manager.sh @@ -135,4 +135,3 @@ In directory: \"${scrfunc_dir}\" # { restore_shell_opts; } > /dev/null 2>&1 - diff --git a/scripts/exdata_cleanup.sh b/scripts/exdata_cleanup.sh index 201e80975b..da56184d2c 100755 --- a/scripts/exdata_cleanup.sh +++ b/scripts/exdata_cleanup.sh @@ -1,10 +1,55 @@ #! /bin/bash -set -x + +# +#----------------------------------------------------------------------- +# +# Source the variable definitions file and the bash utility functions. +# +#----------------------------------------------------------------------- +# +. $USHdir/source_util_funcs.sh +. ${GLOBAL_VAR_DEFNS_FP} +# +#----------------------------------------------------------------------- +# +# Save current shell options (in a global array). Then set new options +# for this script/function. +# +#----------------------------------------------------------------------- +# +{ save_shell_opts; . $USHdir/preamble.sh; } > /dev/null 2>&1 +# +#----------------------------------------------------------------------- +# +# Get the full path to the file in which this script/function is located +# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in +# which the file is located (scrfunc_dir). +# +#----------------------------------------------------------------------- +# +scrfunc_fp=$( $READLINK -f "${BASH_SOURCE[0]}" ) +scrfunc_fn=$( basename "${scrfunc_fp}" ) +scrfunc_dir=$( dirname "${scrfunc_fp}" ) +# +#----------------------------------------------------------------------- +# +# Print message indicating entry into script. +# +#----------------------------------------------------------------------- +# +print_info_msg " +======================================================================== +Entering script: \"${scrfunc_fn}\" +In directory: \"${scrfunc_dir}\" + +This is the ex-script for DATA-CLEANUP. +========================================================================" + ############################################## # Clean up the DATA directory from previous cycle if found ############################################## -[[ $KEEPDATA = "YES" ]] && exit 0 +[[ $KEEPDATA = "FALSE" ]] && exit 0 ############################################## # Set variables used in the script @@ -16,34 +61,24 @@ gcyc=$(echo $GDATE | cut -c9-10) ############################################## # Looking for the following directory for cleanup -# aqm_forecast_${gcyc}.${gPDY}${gcyc} -# aqm_get_extrn_ics_${gcyc}.${gPDY}${gcyc} -# aqm_get_extrn_lbcs_${gcyc}.${gPDY}${gcyc} -# aqm_nexus_gfs_sfc_${gcyc}.${gPDY}${gcyc} -# aqm_get_extrn_ics_${gcyc}.${gPDY}${gcyc} -# aqm_get_extrn_lbcs_${gcyc}.${gPDY}${gcyc} +# forecast.${gPDY}${gcyc} +# get_extrn_ics.${gPDY}${gcyc} +# get_extrn_lbcs.${gPDY}${gcyc} +# nexus_gfs_sfc.${gPDY}${gcyc} ############################################## -target_for_delete=${DATAROOT}/aqm_forecast_${gcyc}.${gPDY}${gcyc} -echo "Remove DATA from ${target_for_delete}" -[[ -d $target_for_delete ]] && rm -rf $target_for_delete - -target_for_delete=${DATAROOT}/aqm_get_extrn_ics_${gcyc}.${gPDY}${gcyc} -echo "Remove DATA from ${target_for_delete}" -[[ -d $target_for_delete ]] && rm -rf $target_for_delete - -target_for_delete=${DATAROOT}/aqm_get_extrn_lbcs_${gcyc}.${gPDY}${gcyc} +target_for_delete=${DATAROOT}/forecast.${gPDY}${gcyc} echo "Remove DATA from ${target_for_delete}" [[ -d $target_for_delete ]] && rm -rf $target_for_delete -target_for_delete=${DATAROOT}/aqm_nexus_gfs_sfc_${gcyc}.${gPDY}${gcyc} +target_for_delete=${DATAROOT}/get_extrn_ics.${gPDY}${gcyc} echo "Remove DATA from ${target_for_delete}" [[ -d $target_for_delete ]] && rm -rf $target_for_delete -target_for_delete=${DATAROOT}/aqm_get_extrn_ics_${gcyc}.${gPDY}${gcyc} +target_for_delete=${DATAROOT}/get_extrn_lbcs.${gPDY}${gcyc} echo "Remove DATA from ${target_for_delete}" [[ -d $target_for_delete ]] && rm -rf $target_for_delete -target_for_delete=${DATAROOT}/aqm_get_extrn_lbcs_${gcyc}.${gPDY}${gcyc} +target_for_delete=${DATAROOT}/nexus_gfs_sfc.${gPDY}${gcyc} echo "Remove DATA from ${target_for_delete}" [[ -d $target_for_delete ]] && rm -rf $target_for_delete From 542b4af36a8d8ba455ade7a18e1ba34c302f9c81 Mon Sep 17 00:00:00 2001 From: chan-hoo Date: Mon, 5 Jun 2023 17:20:11 +0000 Subject: [PATCH 14/27] fix typo --- scripts/exdata_cleanup.sh | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/scripts/exdata_cleanup.sh b/scripts/exdata_cleanup.sh index da56184d2c..c578518d06 100755 --- a/scripts/exdata_cleanup.sh +++ b/scripts/exdata_cleanup.sh @@ -45,15 +45,10 @@ In directory: \"${scrfunc_dir}\" This is the ex-script for DATA-CLEANUP. ========================================================================" - -############################################## # Clean up the DATA directory from previous cycle if found -############################################## -[[ $KEEPDATA = "FALSE" ]] && exit 0 +[[ $KEEPDATA = "TRUE" ]] && exit 0 -############################################## # Set variables used in the script -############################################## CDATE=${PDY}${cyc} GDATE=$($NDATE -24 $CDATE) gPDY=$(echo $GDATE | cut -c1-8) From 02a2c402ff684ecbbf6ff4ccddb632ad5eaae99f Mon Sep 17 00:00:00 2001 From: chan-hoo Date: Mon, 5 Jun 2023 23:01:46 +0000 Subject: [PATCH 15/27] fix bug on aqm_ics --- parm/ecflow/include_tmpl/envir-p1.h | 2 ++ parm/ecflow/scripts/prep/jics.ecf | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/parm/ecflow/include_tmpl/envir-p1.h b/parm/ecflow/include_tmpl/envir-p1.h index 8d469f83ec..fa7dd1b81a 100644 --- a/parm/ecflow/include_tmpl/envir-p1.h +++ b/parm/ecflow/include_tmpl/envir-p1.h @@ -2,6 +2,8 @@ export model_ver="v7.0" export RUN=%RUN% +export NET=%NET% +export envir=%ENVIR% if [ -n "%SENDCANNEDDBN:%" ]; then export SENDCANNEDDBN=${SENDCANNEDDBN:-%SENDCANNEDDBN:%}; fi export SENDCANNEDDBN=${SENDCANNEDDBN:-"NO"} diff --git a/parm/ecflow/scripts/prep/jics.ecf b/parm/ecflow/scripts/prep/jics.ecf index f7e6b2a3da..94b066fa00 100755 --- a/parm/ecflow/scripts/prep/jics.ecf +++ b/parm/ecflow/scripts/prep/jics.ecf @@ -21,7 +21,7 @@ export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" export USHdir="{{ ushdir }}" JOBSdir="{{ jobsdir }}" -export PREV_CYCLE_DIR=${COMaqm}/${model}.${PDYS_P1}/${cycs_p1} +export PREV_CYCLE_DIR=$(compath.py -o ${NET}/${model_ver}/${RUN}.${PDYS_P1}/${cycs_p1}) . ${USHdir}/load_modules_run_task.sh aqm_ics "${JOBSdir}/JREGIONAL_AQM_ICS" From 90f4a597ba6b3b0ed686eaa9bbf1c46807015776 Mon Sep 17 00:00:00 2001 From: chan-hoo Date: Mon, 5 Jun 2023 23:15:26 +0000 Subject: [PATCH 16/27] update aqm_lbcs script --- parm/ecflow/scripts/prep/jlbcs.ecf | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/parm/ecflow/scripts/prep/jlbcs.ecf b/parm/ecflow/scripts/prep/jlbcs.ecf index 565af9d351..5810d67f24 100755 --- a/parm/ecflow/scripts/prep/jlbcs.ecf +++ b/parm/ecflow/scripts/prep/jlbcs.ecf @@ -13,16 +13,12 @@ export cyc="%CYC%" %include export subcyc=0 -#export ICS_OR_LBCS=LBCS -#export DCOMINchem_lbcs=/lfs/h2/emc/lam/noscrub/RRFS_CMAQ/LBCS/AQM_NA13km_AM4_v1 -#export DCOMINgefs=/lfs/h2/emc/lam/noscrub/RRFS_CMAQ/GEFS_DATA -#export COMINgefs=$(compath.py ${envir}/gefs/${gefs_ver}) export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" export USHdir="{{ ushdir }}" JOBSdir="{{ jobsdir }}" -. ${USHdir}/load_modules_run_task.sh aqm_ics "${JOBSdir}/JREGIONAL_AQM_ICS" +. ${USHdir}/load_modules_run_task.sh aqm_lbcs "${JOBSdir}/JREGIONAL_AQM_LBCS" %include From c90385fa763fdfcf35eb9d3a67f0f28eeb818e4a Mon Sep 17 00:00:00 2001 From: chan-hoo Date: Mon, 5 Jun 2023 23:44:53 +0000 Subject: [PATCH 17/27] update ecf suite name --- scripts/exaqm_manager.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/exaqm_manager.sh b/scripts/exaqm_manager.sh index 89bc96dad7..0997341cc3 100755 --- a/scripts/exaqm_manager.sh +++ b/scripts/exaqm_manager.sh @@ -45,7 +45,7 @@ In directory: \"${scrfunc_dir}\" This is the ex-script for AQM-MANAGER. ========================================================================" -ecflow_sid=emc_aqm +ecflow_sid=prod_aqm ############################################## # Set variables used in the script From 9d9441376c1ecadfcb45ac1dd3d47364a69071fc Mon Sep 17 00:00:00 2001 From: chan-hoo Date: Tue, 6 Jun 2023 00:00:58 +0000 Subject: [PATCH 18/27] remove unnecessary lines --- parm/ecflow/scripts/nexus/jnexus_emission.ecf | 1 - parm/ecflow/scripts/post/jpost.ecf | 1 - parm/ecflow/scripts/product/jbias_correction_o3.ecf | 3 --- parm/ecflow/scripts/product/jbias_correction_pm25.ecf | 3 --- parm/ecflow/scripts/pts_fire_emis/jpoint_source.ecf | 2 -- 5 files changed, 10 deletions(-) diff --git a/parm/ecflow/scripts/nexus/jnexus_emission.ecf b/parm/ecflow/scripts/nexus/jnexus_emission.ecf index c7c676eba1..8f8364fb42 100755 --- a/parm/ecflow/scripts/nexus/jnexus_emission.ecf +++ b/parm/ecflow/scripts/nexus/jnexus_emission.ecf @@ -15,7 +15,6 @@ export cyc="%CYC%" export nspt="%NSPT%" export subcyc=0 -#export DCOMINfire=/lfs/h2/emc/physics/noscrub/kai.wang/RAVE_fire/RAVE_NA_NRT export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" export USHdir="{{ ushdir }}" diff --git a/parm/ecflow/scripts/post/jpost.ecf b/parm/ecflow/scripts/post/jpost.ecf index 720e912c7b..74b75cce23 100755 --- a/parm/ecflow/scripts/post/jpost.ecf +++ b/parm/ecflow/scripts/post/jpost.ecf @@ -15,7 +15,6 @@ export cyc="%CYC%" export subcyc=0 export fhr="%FHR%" -#export DATAFCST=$DATAROOT/${model}_forecast_${cyc}.${PDY}${cyc} export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" export USHdir="{{ ushdir }}" diff --git a/parm/ecflow/scripts/product/jbias_correction_o3.ecf b/parm/ecflow/scripts/product/jbias_correction_o3.ecf index eca0fd5635..b6f4cdfd13 100755 --- a/parm/ecflow/scripts/product/jbias_correction_o3.ecf +++ b/parm/ecflow/scripts/product/jbias_correction_o3.ecf @@ -14,9 +14,6 @@ export cyc="%CYC%" export subcyc=0 -#export DCOMINairnow=/lfs/h1/ops/prod/dcom -#export COMOUTbicor=${COMaqm} - export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" export USHdir="{{ ushdir }}" JOBSdir="{{ jobsdir }}" diff --git a/parm/ecflow/scripts/product/jbias_correction_pm25.ecf b/parm/ecflow/scripts/product/jbias_correction_pm25.ecf index f2fc471057..5a4d432d98 100755 --- a/parm/ecflow/scripts/product/jbias_correction_pm25.ecf +++ b/parm/ecflow/scripts/product/jbias_correction_pm25.ecf @@ -14,9 +14,6 @@ export cyc="%CYC%" export subcyc=0 -#export DCOMINairnow=/lfs/h1/ops/prod/dcom -#export COMOUTbicor=${COMaqm} - export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" export USHdir="{{ ushdir }}" JOBSdir="{{ jobsdir }}" diff --git a/parm/ecflow/scripts/pts_fire_emis/jpoint_source.ecf b/parm/ecflow/scripts/pts_fire_emis/jpoint_source.ecf index b58cd76af5..30d348a7af 100755 --- a/parm/ecflow/scripts/pts_fire_emis/jpoint_source.ecf +++ b/parm/ecflow/scripts/pts_fire_emis/jpoint_source.ecf @@ -18,8 +18,6 @@ export GLOBAL_VAR_DEFNS_FP="{{ global_var_defns_fp }}" export USHdir="{{ ushdir }}" JOBSdir="{{ jobsdir }}" -#export DCOMINpt_src=/lfs/h2/emc/physics/noscrub/Youhua.Tang/nei2016v1-pt/v2023-01-PT - . ${USHdir}/load_modules_run_task.sh point_source "${JOBSdir}/JREGIONAL_POINT_SOURCE" %include From 1ca5e56fc2e274d2d33a9ef1461da834be869f09 Mon Sep 17 00:00:00 2001 From: chan-hoo Date: Tue, 6 Jun 2023 10:49:58 +0000 Subject: [PATCH 19/27] add testing flag --- parm/ecflow/include_tmpl/envir-p1.h | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/parm/ecflow/include_tmpl/envir-p1.h b/parm/ecflow/include_tmpl/envir-p1.h index fa7dd1b81a..5cc3f2ef7e 100644 --- a/parm/ecflow/include_tmpl/envir-p1.h +++ b/parm/ecflow/include_tmpl/envir-p1.h @@ -22,17 +22,14 @@ export DBNROOT=$SIPHONROOT if [[ ! " prod para test " =~ " ${envir} " && " ops.prod ops.para " =~ " $(whoami) " ]]; then err_exit "ENVIR must be prod, para, or test [envir-p1.h]"; fi -# KEEPDATA is defined in head.h -if [ "${KEEPDATA}" = "YES" ] || [ "${KEEPDATA}" = "TRUE" ]; then - export KEEPDATA="TRUE" -elif [ "${KEEPDATA}" = "NO" ] || [ "${KEEPDATA}" = "FALSE" ]; then - export KEEPDATA="FALSE" -fi # Developer configuration PTMP=/lfs/h2/emc/ptmp PSLOT=ecflow_aqm +export SENDDBN="NO" +export SENDDBN_NTC="NO" + export OPSROOT="${PTMP}/${USER}/${PSLOT}/para" export COMROOT="${OPSROOT}/com" export DATAROOT="${OPSROOT}/tmp" @@ -51,3 +48,10 @@ if [ -n "%PDY:%" ]; then export CDATE=${PDY}%CYC:% fi +# KEEPDATA is defined in head.h +if [ "${KEEPDATA}" = "YES" ] || [ "${KEEPDATA}" = "TRUE" ]; then + export KEEPDATA="TRUE" +elif [ "${KEEPDATA}" = "NO" ] || [ "${KEEPDATA}" = "FALSE" ]; then + export KEEPDATA="FALSE" +fi + From e4eabf6de21cd1ed8b588ca58a9c69ded412b50d Mon Sep 17 00:00:00 2001 From: chan-hoo Date: Tue, 6 Jun 2023 11:09:38 +0000 Subject: [PATCH 20/27] update sample script --- ush/config.aqm.nco.realtime.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ush/config.aqm.nco.realtime.yaml b/ush/config.aqm.nco.realtime.yaml index 4392eee982..c314145eb0 100644 --- a/ush/config.aqm.nco.realtime.yaml +++ b/ush/config.aqm.nco.realtime.yaml @@ -12,8 +12,8 @@ workflow: EXPT_SUBDIR: aqm_nco_aqmna13km PREDEF_GRID_NAME: AQM_NA_13km CCPP_PHYS_SUITE: FV3_GFS_v16 - DATE_FIRST_CYCL: '2023053000' - DATE_LAST_CYCL: '2023053018' + DATE_FIRST_CYCL: '2023060500' + DATE_LAST_CYCL: '2023060518' INCR_CYCL_FREQ: 6 FCST_LEN_HRS: -1 FCST_LEN_CYCL: From bbfc76221f3b57fdb30c37129948cd2fbae42c75 Mon Sep 17 00:00:00 2001 From: chan-hoo Date: Tue, 6 Jun 2023 15:12:24 +0000 Subject: [PATCH 21/27] fix wrong if range --- jobs/JREGIONAL_RUN_POST | 18 +++++++++--------- scripts/exregional_run_post.sh | 4 ---- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/jobs/JREGIONAL_RUN_POST b/jobs/JREGIONAL_RUN_POST index b36222f13e..a09f665e81 100755 --- a/jobs/JREGIONAL_RUN_POST +++ b/jobs/JREGIONAL_RUN_POST @@ -137,16 +137,16 @@ Call to ex-script corresponding to J-job \"${scrfunc_fn}\" failed." # #----------------------------------------------------------------------- # -if [ "${WORKFLOW_MANAGER}" = "rocoto"]; then - if [ ${#FCST_LEN_CYCL[@]} -gt 1 ]; then - cyc_mod=$(( ${cyc} - ${DATE_FIRST_CYCL:8:2} )) - CYCLE_IDX=$(( ${cyc_mod} / ${INCR_CYCL_FREQ} )) - FCST_LEN_HRS=${FCST_LEN_CYCL[$CYCLE_IDX]} +if [ ${#FCST_LEN_CYCL[@]} -gt 1 ]; then + cyc_mod=$(( ${cyc} - ${DATE_FIRST_CYCL:8:2} )) + CYCLE_IDX=$(( ${cyc_mod} / ${INCR_CYCL_FREQ} )) + FCST_LEN_HRS=${FCST_LEN_CYCL[$CYCLE_IDX]} +fi - fcst_len_hrs=$( printf "%03d" "${FCST_LEN_HRS}" ) - if [ "${fhr}" = "${fcst_len_hrs}" ]; then - touch "${COMIN}/post_${PDY}${cyc}_task_complete.txt" - fi +if [ "${WORKFLOW_MANAGER}" = "rocoto" ]; then + fcst_len_hrs=$( printf "%03d" "${FCST_LEN_HRS}" ) + if [ "${fhr}" = "${fcst_len_hrs}" ]; then + touch "${COMIN}/post_${PDY}${cyc}_task_complete.txt" fi fi # diff --git a/scripts/exregional_run_post.sh b/scripts/exregional_run_post.sh index 5cbcb6aa0b..1f22a64281 100755 --- a/scripts/exregional_run_post.sh +++ b/scripts/exregional_run_post.sh @@ -303,10 +303,6 @@ done rm -rf ${DATA_FHR} -# Delete the forecast directory -if [ $RUN_ENVIR = "nco" ] && [ $KEEPDATA = "FALSE" ]; then - rm -rf $DATAFCST -fi # #----------------------------------------------------------------------- # From 0fdb4634a5c74f73b29e7216e1bb90f4d98668b0 Mon Sep 17 00:00:00 2001 From: chan-hoo Date: Tue, 6 Jun 2023 23:44:28 +0000 Subject: [PATCH 22/27] Fix bug in aqm_manager script --- scripts/exaqm_manager.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/scripts/exaqm_manager.sh b/scripts/exaqm_manager.sh index 0997341cc3..3a4de59c5d 100755 --- a/scripts/exaqm_manager.sh +++ b/scripts/exaqm_manager.sh @@ -77,9 +77,8 @@ while [ $h_try -lt 70 ]; do # Set release_next_cycle event when # current cycle fcst restart file exist #################################### - if [ ${found_required_file_for_next_cycle} = "NO" ]; then - aqm_forecast_RESTART_file=$(ls ${COMIN}/RESTART/*coupler.res|wc -l) - if [[ ${aqm_forecast_RESTART_file} -ge 1 && -f ${gefs_check} && -f ${gfs_check} ]]; then + if [ ${found_required_file_for_next_cycle} = "NO" ] && [ -d "{COMIN}/RESTART" ]; then + if [ "$(ls -A ${COMIN}/RESTART )" ] && [-f ${gefs_check} ] && [ -f ${gfs_check} ]; then ecflow_client --event release_next_cycle found_required_file_for_next_cycle=YES fi From 247eb0ba8cf8320c66473f2d7d84e7a8c85034bb Mon Sep 17 00:00:00 2001 From: chan-hoo Date: Tue, 6 Jun 2023 23:57:26 +0000 Subject: [PATCH 23/27] fix typo --- scripts/exaqm_manager.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/exaqm_manager.sh b/scripts/exaqm_manager.sh index 3a4de59c5d..76f00df44f 100755 --- a/scripts/exaqm_manager.sh +++ b/scripts/exaqm_manager.sh @@ -77,7 +77,7 @@ while [ $h_try -lt 70 ]; do # Set release_next_cycle event when # current cycle fcst restart file exist #################################### - if [ ${found_required_file_for_next_cycle} = "NO" ] && [ -d "{COMIN}/RESTART" ]; then + if [ ${found_required_file_for_next_cycle} = "NO" ] && [ -d "${COMIN}/RESTART" ]; then if [ "$(ls -A ${COMIN}/RESTART )" ] && [-f ${gefs_check} ] && [ -f ${gfs_check} ]; then ecflow_client --event release_next_cycle found_required_file_for_next_cycle=YES From 993b61943733e38d41beaf41b2ae7beeabaad853 Mon Sep 17 00:00:00 2001 From: chan-hoo Date: Wed, 7 Jun 2023 01:23:34 +0000 Subject: [PATCH 24/27] update aqm_manager script --- scripts/exaqm_manager.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/exaqm_manager.sh b/scripts/exaqm_manager.sh index 76f00df44f..74a77bf03c 100755 --- a/scripts/exaqm_manager.sh +++ b/scripts/exaqm_manager.sh @@ -78,7 +78,7 @@ while [ $h_try -lt 70 ]; do # current cycle fcst restart file exist #################################### if [ ${found_required_file_for_next_cycle} = "NO" ] && [ -d "${COMIN}/RESTART" ]; then - if [ "$(ls -A ${COMIN}/RESTART )" ] && [-f ${gefs_check} ] && [ -f ${gfs_check} ]; then + if [[ "$(ls -A ${COMIN}/RESTART )" && -f ${gefs_check} && -f ${gfs_check} ]]; then ecflow_client --event release_next_cycle found_required_file_for_next_cycle=YES fi From 121218d7d09557f02e43e79e33314bd9c5b9fd14 Mon Sep 17 00:00:00 2001 From: chan-hoo Date: Wed, 7 Jun 2023 11:19:10 +0000 Subject: [PATCH 25/27] update sample script --- ush/config.aqm.nco.realtime.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ush/config.aqm.nco.realtime.yaml b/ush/config.aqm.nco.realtime.yaml index c314145eb0..532c646c1c 100644 --- a/ush/config.aqm.nco.realtime.yaml +++ b/ush/config.aqm.nco.realtime.yaml @@ -34,7 +34,7 @@ nco: envir_dfv: prod NET_dfv: aqm model_ver_dfv: v7.0 - RUN_dfv: aqm_nco_aqmna13km + RUN_dfv: aqm OPSROOT_dfv: /path/to/custom/opsroot KEEPDATA_dfv: false workflow_switches: From 6be8775bbca3f44b733bf027c47617a3fa08898f Mon Sep 17 00:00:00 2001 From: chan-hoo Date: Thu, 8 Jun 2023 15:50:26 +0000 Subject: [PATCH 26/27] move boolify for nco env to job_preamble --- scripts/exregional_bias_correction_o3.sh | 8 ++++---- scripts/exregional_bias_correction_pm25.sh | 8 ++++---- scripts/exregional_post_stat_o3.sh | 4 ++-- scripts/exregional_post_stat_pm25.sh | 4 ++-- ush/job_preamble.sh | 17 ++++++++++++++++- 5 files changed, 28 insertions(+), 13 deletions(-) diff --git a/scripts/exregional_bias_correction_o3.sh b/scripts/exregional_bias_correction_o3.sh index 651d5bb420..c0206933fc 100755 --- a/scripts/exregional_bias_correction_o3.sh +++ b/scripts/exregional_bias_correction_o3.sh @@ -381,7 +381,7 @@ EOF1 cp ${DATA}/${NET}.${cycle}.max_*hr_o3_bc.*.grib2 ${COMOUT} - if [ "$SENDDBN" = "YES" ]; then + if [ "$SENDDBN" = "TRUE" ]; then ${DBNROOT}/bin/dbn_alert MODEL AQM_MAX ${job} ${COMOUT}/${NET}.${cycle}.max_1hr_o3_bc.227.grib2 ${DBNROOT}/bin/dbn_alert MODEL AQM_MAX ${job} ${COMOUT}/${NET}.${cycle}.max_8hr_o3_bc.227.grib2 fi @@ -409,7 +409,7 @@ EOF1 cp awpaqm.${cycle}.*o3-max-bc.227.grib2 ${COMOUTwmo} # Distribute Data - if [ "${SENDDBN_NTC}" = "YES" ] ; then + if [ "${SENDDBN_NTC}" = "TRUE" ] ; then ${DBNROOT}/bin/dbn_alert ${DBNALERT_TYPE} ${NET} ${job} ${COMOUTwmo}/awpaqm.${cycle}.1ho3-max-bc.227.grib2 ${DBNROOT}/bin/dbn_alert ${DBNALERT_TYPE} ${NET} ${job} ${COMOUTwmo}/awpaqm.${cycle}.8ho3-max-bc.227.grib2 fi @@ -456,7 +456,7 @@ if [ "${cyc}" = "06" ] || [ "${cyc}" = "12" ]; then cp ${NET}.${cycle}.ave_8hr_o3_bc.227.grib2 ${COMOUT} fi -if [ "${SENDDBN}" = "YES" ] ; then +if [ "${SENDDBN}" = "TRUE" ] ; then ${DBNROOT}/bin/dbn_alert MODEL AQM_CONC ${job} ${COMOUT}/${NET}.${cycle}.ave_1hr_o3_bc.227.grib2 if [ "${cyc}" = "06" ] || [ "${cyc}" = "12" ]; then ${DBNROOT}/bin/dbn_alert MODEL AQM_CONC ${job} ${COMOUT}/${NET}.${cycle}.ave_8hr_o3_bc.227.grib2 @@ -508,7 +508,7 @@ if [ "${cyc}" = "06" ] || [ "${cyc}" = "12" ]; then cp awpaqm.${cycle}.${hr}ho3-max-bc.227.grib2 ${COMOUTwmo} # Distribute Data - if [ "${SENDDBN}" = "YES" ]; then + if [ "${SENDDBN}" = "TRUE" ]; then ${DBNROOT}/bin/dbn_alert ${DBNALERT_TYPE} ${NET} ${job} ${COMOUTwmo}/awpaqm.${cycle}.${hr}ho3-bc.227.grib2 ${DBNROOT}/bin/dbn_alert ${DBNALERT_TYPE} ${NET} ${job} ${COMOUTwmo}/awpaqm.${cycle}.${hr}ho3-max-bc.227.grib2 fi diff --git a/scripts/exregional_bias_correction_pm25.sh b/scripts/exregional_bias_correction_pm25.sh index 65f14660ab..6924b4dbf8 100755 --- a/scripts/exregional_bias_correction_pm25.sh +++ b/scripts/exregional_bias_correction_pm25.sh @@ -280,7 +280,7 @@ fi POST_STEP cp ${DATA}/${NET}.${cycle}.pm25*bc*.grib2 ${COMOUT} -if [ "$SENDDBN" = "YES" ]; then +if [ "$SENDDBN" = "TRUE" ]; then $DBNROOT/bin/dbn_alert MODEL AQM_PM ${job} ${COMOUT} fi @@ -377,7 +377,7 @@ EOF1 cp ${NET}.${cycle}.max_1hr_pm25_bc.227.grib2 ${COMOUT} cp ${NET}.${cycle}.ave_24hr_pm25_bc.227.grib2 ${COMOUT} - if [ "${SENDDBN}" = "YES" ]; then + if [ "${SENDDBN}" = "TRUE" ]; then ${DBNROOT}/bin/dbn_alert MODEL AQM_MAX ${job} ${COMOUT}/${NET}.${cycle}.max_1hr_pm25_bc.227.grib2 ${DBNROOT}/bin/dbn_alert MODEL AQM_PM ${job} ${COMOUT}/${NET}.${cycle}.ave_24hr_pm25_bc.227.grib2 fi @@ -395,7 +395,7 @@ wgrib2 tmpfile_pm25_bc -set_grib_type c3b -new_grid_winds earth -new_grid ${grid cp tmpfile_pm25_bc ${COMOUT}/${NET}.${cycle}.ave_1hr_pm25_bc.${id_domain}.grib2 cp ${NET}.${cycle}.grib2_pm25_bc.227 ${COMOUT}/${NET}.${cycle}.ave_1hr_pm25_bc.227.grib2 -if [ "${SENDDBN}" = "YES" ]; then +if [ "${SENDDBN}" = "TRUE" ]; then ${DBNROOT}/bin/dbn_alert MODEL AQM_PM ${job} ${COMOUT}/${NET}.${cycle}.ave_1hr_pm25_bc.227.grib2 fi @@ -463,7 +463,7 @@ if [ "${cyc}" = "06" ] || [ "${cyc}" = "12" ]; then cp awpaqm.${cycle}.24hr-pm25-ave-bc.227.grib2 ${COMOUTwmo} # Distribute Data - if [ "${SENDDBN_NTC}" = "YES" ] ; then + if [ "${SENDDBN_NTC}" = "TRUE" ] ; then ${DBNROOT}/bin/dbn_alert ${DBNALERT_TYPE} ${NET} ${job} ${COMOUTwmo}/awpaqm.${cycle}.1hpm25-bc.227.grib2 ${DBNROOT}/bin/dbn_alert ${DBNALERT_TYPE} ${NET} ${job} ${COMOUTwmo}/awpaqm.${cycle}.daily-1hr-pm25-max-bc.227.grib2 ${DBNROOT}/bin/dbn_alert ${DBNALERT_TYPE} ${NET} ${job} ${COMOUTwmo}/awpaqm.${cycle}.24hr-pm25-ave-bc.227.grib2 diff --git a/scripts/exregional_post_stat_o3.sh b/scripts/exregional_post_stat_o3.sh index 69b1879634..06a253247f 100755 --- a/scripts/exregional_post_stat_o3.sh +++ b/scripts/exregional_post_stat_o3.sh @@ -254,7 +254,7 @@ EOF1 wgrib2 ${NET}.${cycle}.max_1hr_o3.${id_domain}.grib2 -set_grib_type c3b -new_grid_winds earth -new_grid ${!gg} ${NET}.${cycle}.max_1hr_o3.${grid}.grib2 cp ${DATA}/${NET}.${cycle}.max_*hr_o3.*.grib2 ${COMOUT} - if [ "$SENDDBN" = "YES" ]; then + if [ "$SENDDBN" = "TRUE" ]; then ${DBNROOT}/bin/dbn_alert MODEL AQM_MAX ${job} ${COMOUT}/${NET}.${cycle}.max_1hr_o3.${grid}.grib2 ${DBNROOT}/bin/dbn_alert MODEL AQM_MAX ${job} ${COMOUT}/${NET}.${cycle}.max_8hr_o3.${grid}.grib2 fi @@ -278,7 +278,7 @@ EOF1 done cp awpaqm.${cycle}.*o3-max.${grid}.grib2 ${COMOUTwmo} - if [ "${SENDDBN_NTC}" = "YES" ]; then + if [ "${SENDDBN_NTC}" = "TRUE" ]; then ${DBNROOT}/bin/dbn_alert ${DBNALERT_TYPE} ${NET} ${job} ${COMOUTwmo}/awpaqm.${cycle}.1ho3-max.${grid}.grib2 ${DBNROOT}/bin/dbn_alert ${DBNALERT_TYPE} ${NET} ${job} ${COMOUTwmo}/awpaqm.${cycle}.8ho3-max.${grid}.grib2 fi diff --git a/scripts/exregional_post_stat_pm25.sh b/scripts/exregional_post_stat_pm25.sh index b44e4c84fc..cab6a164e0 100755 --- a/scripts/exregional_post_stat_pm25.sh +++ b/scripts/exregional_post_stat_pm25.sh @@ -149,7 +149,7 @@ if [ "${cyc}" = "06" ] || [ "${cyc}" = "12" ]; then cp awpaqm.${cycle}.1hpm25.${grid}.grib2 ${COMOUTwmo} # Distribute Data - if [ "${SENDDBN_NTC}" = "YES" ] ; then + if [ "${SENDDBN_NTC}" = "TRUE" ] ; then ${DBNROOT}/bin/dbn_alert ${DBNALERT_TYPE} ${NET} ${job} ${COMOUTwmo}/awpaqm.${cycle}.1hpm25.${grid}.grib2 ${DBNROOT}/bin/dbn_alert ${DBNALERT_TYPE} ${NET} ${job} ${COMOUTwmo}/awpaqm.${cycle}.daily-1hr-pm25-max.${grid}.grib2 fi @@ -276,7 +276,7 @@ EOF1 cp awpaqm.${cycle}.daily-1hr-pm25-max.${grid}.grib2 ${COMOUTwmo} cp awpaqm.${cycle}.24hr-pm25-ave.${grid}.grib2 ${COMOUTwmo} - if [ "$SENDDBN" = "YES" ]; then + if [ "$SENDDBN" = "TRUE" ]; then ${DBNROOT}/bin/dbn_alert MODEL AQM_MAX ${job} ${COMOUTwmo}/${NET}.${cycle}.ave_24hr_pm25.${grid}.grib2 ${DBNROOT}/bin/dbn_alert MODEL AQM_MAX ${job} ${COMOUTwmo}/${NET}.${cycle}.max_1hr_pm25.${grid}.grib2 fi diff --git a/ush/job_preamble.sh b/ush/job_preamble.sh index 2c2fe5af9b..b291d3c7a5 100644 --- a/ush/job_preamble.sh +++ b/ush/job_preamble.sh @@ -68,6 +68,21 @@ export DCOMINgefs="${DCOMINgefs:-${DCOMINgefs_dfv}}" export DCOMINpt_src="${DCOMINpt_src:-${DCOMINpt_src_dfv}}" export DCOMINairnow="${DCOMINairnow:-${DCOMINairnow_dfv}}" +# +#----------------------------------------------------------------------- +# +# Change YES/NO (NCO standards; job card) to TRUE/FALSE (workflow standards) +# for NCO environment variables +# +#----------------------------------------------------------------------- +# +export KEEPDATA=$(boolify "${KEEPDATA}") +export SENDCOM=$(boolify "${SENDCOM}") +export SENDDBN=$(boolify "${SENDDBN}") +export SENDDBN_NTC=$(boolify "${SENDDBN_NTC}") +export SENDECF=$(boolify "${SENDECF}") +export SENDWEB=$(boolify "${SENDWEB}") + # #----------------------------------------------------------------------- # @@ -179,7 +194,7 @@ export -f POST_STEP # #----------------------------------------------------------------------- # -if [ "${RUN_ENVIR}" = "nco" ] && [ "${WORKFLOW_MANAGER}" = "rocoto" ]; then +if [ "${RUN_ENVIR}" = "nco" ] && [ "${WORKFLOW_MANAGER}" != "ecflow" ]; then __EXPTLOG=${EXPTDIR}/log mkdir -p ${__EXPTLOG} for i in ${LOGDIR}/*.${WORKFLOW_ID}.log; do From e91e1794aaa525f945caf762a666fb433b602415 Mon Sep 17 00:00:00 2001 From: chan-hoo Date: Thu, 8 Jun 2023 15:55:48 +0000 Subject: [PATCH 27/27] remove boolify of keepdata from envir-p1 --- parm/ecflow/include_tmpl/envir-p1.h | 7 ------- 1 file changed, 7 deletions(-) diff --git a/parm/ecflow/include_tmpl/envir-p1.h b/parm/ecflow/include_tmpl/envir-p1.h index 5cc3f2ef7e..e40b9dec7a 100644 --- a/parm/ecflow/include_tmpl/envir-p1.h +++ b/parm/ecflow/include_tmpl/envir-p1.h @@ -48,10 +48,3 @@ if [ -n "%PDY:%" ]; then export CDATE=${PDY}%CYC:% fi -# KEEPDATA is defined in head.h -if [ "${KEEPDATA}" = "YES" ] || [ "${KEEPDATA}" = "TRUE" ]; then - export KEEPDATA="TRUE" -elif [ "${KEEPDATA}" = "NO" ] || [ "${KEEPDATA}" = "FALSE" ]; then - export KEEPDATA="FALSE" -fi -