Skip to content

Conversation

@bhuang95
Copy link

@bhuang95 bhuang95 commented Dec 16, 2025

Description

This PR, along with its three dependent PRs listed below, enables running enkf only for atmosphere in the global-workflow with necessary tasks. It will help test JEDI EnKF capabilities in the global workflow and compare with GSI in support of hybrid 4DEnVar appplication for the atmosphere.

This was further modified based on the original branch from Travis J Elless at NOAA EMC.

Major change summary from three PRs:

This PR:

  • Add DOENKFONLY_ATM (false by default) in the dev/parm/config/gfs/config.base.j2 to activate the GSI and JEDI EnKF-only run.
  • Modify rocoto task generator files for gfs_cycle to keep a few EnKF-only tasks.
  • Add two asks: fetchatmanlbias and prepatmanlbias to fetch operational analysis bias correction files at the previous cycle and process them for JEDI and GSI EnKF use (dev/jobs/JGLOBAL_ATM_PREP_ANL_BIAS)
  • To test

Resolves:

Dependencies:

Acceptance Criteria

  • With DOENKFONLY_ATM="NO" by default, it should not affect existing applications in the current global workflow. In other words, it should pass all relevant tests following the general guidelines of building the global workflow.
  • With DOENKFONLY_ATM="YES" in the config.base during the workflow setup, it should generate related tasks for GSI and JEDI EnKF-only run with additional variable changes in config.base, respectively, and pass all these tasks through rocoto jobs.

Type of change

  • Bug fix (fixes something broken)
  • New feature (adds functionality)
  • Maintenance (code refactor, clean-up, new CI test, etc.)

Change characteristics

  • Is this a breaking change (a change in existing functionality)? NO
  • Does this change require a documentation update? NO
  • Does this change require an update to any of the following submodules? YES/NO (If YES, please add a link to any PRs that are pending.)
    • EMC verif-global
    • GDAS
    • GFS-utils
    • GSI
    • GSI-monitor
    • GSI-utils
    • UFS-utils
    • UFS-weather-model
    • wxflow

How has this been tested?

-Built and cycled successfully on Ursa as follows.

  • Clone this branch
git clone https://github.com/bhuang95/global-workflow.git
cd global-workflow
git checkout feature/enkf_only_dev
git submodule update --init --recursive
  • Build the branch following step 7.1.3 here
  • IC on Ursa
    /scratch4/BMC/gsienkf/Bo.Huang/expCodes/Workflow/Data/IC/TravisIC-2022010312/
  • Set the workflow following steps 7.3.2 and 7.3.3 here. At "7.3.3. Step 3: Check user and experiment settings", additionally define the following variables
DOENKFONLY_ATM="YES" (for both GSI and JEDI run) to turn on EnKF-only run
DOIAU="NO" (for both GSI and JEDI run) or "YES" (for GSI run only, not ready for JEDI yet) to turn on or off IAU
DO_JEDIATMVAR="YES" (for JEDI run only) to run JEDI
DO_JEDIATMENS="YES"(for JEDI run only) to run JEDI
  • Example of GSI EnKF-only rocoto tasks for the first DA cycle
- gdas_prep                      
- gdas_fetchatmanlbias        
- gdas_prepatmanlbias         
- gdas_prepatmiodaobs         
- enkfgdas_atmensanlinit  
- enkfgdas_atmensanlfv3inc
- enkfgdas_atmensanlfinal 
- enkfgdas_atmensanlobs   
- enkfgdas_atmensanlsol   
- enkfgdas_fcst_mem001-080   
- enkfgdas_epos000-006   
- enkfgdas_esfc               
- enkfgdas_earc_tars_00-01  
- enkfgdas_cleanup 
  • Example of JEDI EnKF-only rocoto tasks for the first DA cycle
- gdas_prep                      
- gdas_fetchatmanlbias        
- gdas_prepatmanlbias         
- enkfgdas_eobs               
- enkfgdas_eupd               
- enkfgdas_ecen000            
- enkfgdas_ediag              
- enkfgdas_fcst_mem001-080 
- enkfgdas_epos000-006   
- enkfgdas_esfc               
- enkfgdas_earc_tars_00-01   
- enkfgdas_cleanup

Checklist

  • Any dependent changes have been merged and published
  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have documented my code, including function, input, and output descriptions
  • My changes generate no new warnings
  • New and existing tests pass with my changes
  • This change is covered by an existing CI test or a new one has been added
  • Any new scripts have been added to the .github/CODEOWNERS file with owners
  • I have made corresponding changes to the system documentation if necessary

Copy link
Contributor

@TravisElless-NOAA TravisElless-NOAA left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for picking up the ball on this @bhuang95. As I'm starting to relearn things, I have a few questions along with some other details I noticed initially.

Comment on lines +18 to +21
# If DOENKFONLY_ATM="YES", skip PROCESS_TROPCY
if [[ "${DOENKFONLY_ATM:-NO}" == "YES" ]] ; then
export PROCESS_TROPCY="NO"
fi
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this block actually needed? I haven't run with this enkf setting yet, but in default testing PROCESS_TROPCY=NO gets set 3 lines earlier. Does this default change for enkf only?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@TravisElless-NOAA I remember I added this block because PROCESS_TROPCY was set to "YES" somewhere and it failed the task when DOENKFONLY_ATM = "YES". Looks like this block is not needed any more here. I will remove this block and test it in the updated PR.

Comment on lines 31 to 32
'DOLETKF_OCN', 'IAUFHRS_ENKF', 'NET', 'NMEM_ENS_GFS', 'DO_GSISOILDA', 'DO_LAND_IAU',
'DOENKFONLY_ATM']
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cleans up the format of this block better

Suggested change
'DOLETKF_OCN', 'IAUFHRS_ENKF', 'NET', 'NMEM_ENS_GFS', 'DO_GSISOILDA', 'DO_LAND_IAU',
'DOENKFONLY_ATM']
'DOLETKF_OCN', 'IAUFHRS_ENKF', 'NET', 'NMEM_ENS_GFS',
'DO_GSISOILDA', 'DO_LAND_IAU', 'DOENKFONLY_ATM']

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@TravisElless-NOAA Will modify as suggested in the updated PR. Thanks.


# Reset tasks to run enkf-only for atm if do_enkfonly_atm=true
if options['do_enkfonly_atm']:
task_names[run] = []
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this clear out the prep jobs you just added/declared previously (line 389)?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@TravisElless-NOAA Yes. Line 385-390, and Line 429- basically reset task_names[run]. It was meant to only include necessary tasks for enkf-only run and to avoid excessive addition of "if" statements before these lines.

Looking at @aerorahul 's comments suggesting using DO_GSIATMVAR, DO_GSIATMENS, DO_JEDIATMVAR, DO_JEDIATMENS to set up enkf-only run for GSI and JEDI. this may not be preferred and I may need to add if statements instead.

Comment on lines +143 to +144
dep_dict = {'type': 'metatask', 'name': 'gdas_fcst', 'offset': f"-{timedelta_to_HMS(self._base['interval_gdas'])}"}
deps.append(rocoto.add_dependency(dep_dict))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did this need to be in your enkfonly if block? Currently this new dependency is being added to the entire suite of workflow options, where it wasn't before. So asking if this was intended or not.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@TravisElless-NOAA Line 143-144 is not necessary to be include in the enkfonly if block. Because the enkfgdas_epmn in the enkfonly if block is dependent on the completion of enkfgdas_fcst on Line 143-144. But we can add them there too.

Comment on lines 39 to 44
{% if not DOENKFONLY_ATM %}
{% for iaufhr in IAUFHRS %}
{% set iaufhr = iaufhr %}
- "{{ COMIN_ATMOS_ANALYSIS_MEM | relpath(ROTDIR) }}/{{ head }}recentered_increment.atm.i{{ '%03d' % iaufhr }}.nc"
{% endfor %} # iaufhr in IAUFHRS
{% endfor %} # iaufhr in IAUFHRS
{% endif %}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This section will need to be changed to match the JEDI version in lines 27-32. If running GSI version of ENKFONLY will want to archive increment files for that run as well.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@TravisElless-NOAA I see. I will add one block for DOENKFONLY_ATM=YES to match Line 27-29 and add the increment files for GSI enkf-only run as well. Thanks.

@DavidHuber-NOAA
Copy link
Contributor

@bhuang95 Can you look through the items that shfmt flagged here and apply the recommended changes?

@aerorahul
Copy link
Contributor

@bhuang95
Thank you for this contribution.
I have a couple of high-level suggestions:

  1. We have a variable DO_HYBVAR=YES|NO that determines if we run a hybrid EnVar (DO_HYBVAR=YES) or Variational-only (DO_HYBVAR=NO). In addition to that, with DO_HYBVAR=NO always assumes that one wishes to run the variational solver. You wish to choose to update the prior with an ensemble-only via this PR. I assume you wish to only update the ensemble with JEDI (not the GSI-EnKF). We have a variable DO_JEDIATMENS=YES|NO. Should DO_HYBVAR=NO and DO_JEDIATMENS=YES not be sufficient to update the ensemble without executing the variational solver (GSI or JEDI)? What additional value does DO_ATMENSONLY add that is not covered under DO_HYBVAR=YES AND DO_JEDIATMENS=YES?
Variational Ensemble
DO_GSIATMVAR DO_GSIATMENS
DO_JEDIATMVAR DO_JEDIATMENS

With DO_HYBVAR=YES | NO to choose whether it is a hybrid or not (3DVar|EnKF), and the above variables to choose the appropriate update algorithm.

  1. Testing - for each of the options being added, running the GSI-EnKF only and JEDI-EnKF only, we suggest adding 2 separate tests; e.g. C48_gsiatmensDA.yaml and C48_jediatmensDA.yaml

@bhuang95
Copy link
Author

@bhuang95 can you start by resolving all the conflicts and then we can go from there on scoping out what is needed for this?

@CoryMartin-NOAA I fixed most of shell script failure given what was suggested. I am not sure why the shellcheck still failed and I don't see any obvious issues now (some warning triggered this?). Is there a log file for this shellcheck failure?

@aerorahul
Copy link
Contributor

@bhuang95 can you start by resolving all the conflicts and then we can go from there on scoping out what is needed for this?

@CoryMartin-NOAA I fixed most of shell script failure given what was suggested. I am not sure why the shellcheck still failed and I don't see any obvious issues now (some warning triggered this?). Is there a log file for this shellcheck failure?

@WalterKolczynski-NOAA The shellcheck linter workflow is not posting the non-compliant lines on the PR. The workflow also does not show where it encountered an issue. Can we get some help on this please?

@aerorahul aerorahul mentioned this pull request Jan 14, 2026
11 tasks
@aerorahul
Copy link
Contributor

the bash_code_analysis Github action is not working as expected. @WalterKolczynski-NOAA is working on a fix.

@bhuang95
Copy link
Author

@CoryMartin-NOAA Finally fixed the shellcheck failure and passed all checks. Learnt a lot how this process works, thank you all!

DavidNew-NOAA pushed a commit to NOAA-EMC/jcb-gdas that referenced this pull request Jan 16, 2026
This PR works along with the following three dependent PRs to enable the
EnKF-only configuration for the atmosphere within the global workflow
(see detailed description
NOAA-EMC/global-workflow#4345)

Dependencies:
-NOAA-EMC/global-workflow#4345
-NOAA-EMC/GDASApp#2010
-NOAA-EMC/jcb#32

Resolve
- NOAA-EMC/global-workflow#4339

---------

Co-authored-by: Cory Martin <cory.r.martin@noaa.gov>
DavidNew-NOAA pushed a commit to NOAA-EMC/GDASApp that referenced this pull request Jan 16, 2026
This PR works along with the following three dependent PRs to enable the
EnKF-only configuration for the atmosphere within the global workflow
(see detailed description
NOAA-EMC/global-workflow#4345)

Dependencies:
-NOAA-EMC/global-workflow#4345
-#2010
-NOAA-EMC/jcb#32

Resolve
- NOAA-EMC/global-workflow#4339

---------

Co-authored-by: Cory Martin <cory.r.martin@noaa.gov>
Comment on lines 40 to 41
if [[ ! -d "${COMOUT_ATMOS_ANALYSIS_PREV}" ]]; then mkdir -p "${COMOUT_ATMOS_ANALYSIS_PREV}"; fi
if [[ ! -d "${OUTPUT}" ]]; then mkdir -p "${OUTPUT}"; fi
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can safely reduce this to just

mkdir -p "${COMOUT_ATMOS_ANALYSIS_PREV}"
mkdir -p "${OUTPUT}"

mkdir -p does not raise an error or touch directories if they already exist. If you prefer to keep this in if-blocks, we prefer them in multi-line blocks.


if [[ ${DO_JEDIATMENS} == "YES" ]]; then
# JEDI run
cd "${DATA}" || exit
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
cd "${DATA}" || exit
cd "${DATA}" || exit 1

if [[ ${DO_JEDIATMENS} == "YES" ]]; then
# JEDI run
cd "${DATA}" || exit
if [[ ! -d "testrun/varbc" ]]; then mkdir -p "testrun/varbc"; fi
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if [[ ! -d "testrun/varbc" ]]; then mkdir -p "testrun/varbc"; fi
mkdir -p "testrun/varbc"

if [[ ! -d "testrun/varbc" ]]; then mkdir -p "testrun/varbc"; fi
/bin/ln -sf "${ABIAS_SAT}" "./satbias_in"
/bin/ln -sf "${ABIASPC_SAT}" "./satbias_pc"
grep -i "NaN" satbias_in && echo "Stop. There are NaN in ${ABIAS}." && exit 1
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Prefer this as an if-block and err_exit or err_chk should be called:

Suggested change
grep -i "NaN" satbias_in && echo "Stop. There are NaN in ${ABIAS}." && exit 1
if ! grep -i "NaN" satbias_in > /dev/null 2>&1 ; then
export err=1
err_chk "FATAL ERROR There are NaN in ${ABIAS}."
fi


export err=$?
if [[ ${err} -ne 0 ]]; then
err_exit "satbias2iodas.x failed for ${instrument}, ABORT!"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fatal errors should be labeled:

Suggested change
err_exit "satbias2iodas.x failed for ${instrument}, ABORT!"
err_exit "FATAL ERROR satbias2iodas.x failed for ${instrument}, ABORT!"

cd ./testrun/varbc/
grep "${instrument}" ../../satbias_in | awk '{print $2" "$3" "$4}' > \
"${OUTPUT}"/gdas.t"${gcyc}"z."${instrument}".tlapse.txt
/bin/cp -p satbias_"${instrument}".nc4 "${OUTPUT}"/gdas.t"${gcyc}"z."${instrument}".satbias.nc
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We try to use cpreq unless the file is optional. If it is optional, then a warning should be printed if it is missing

Suggested change
/bin/cp -p satbias_"${instrument}".nc4 "${OUTPUT}"/gdas.t"${gcyc}"z."${instrument}".satbias.nc
cpreq -p satbias_"${instrument}".nc4 "${OUTPUT}"/gdas.t"${gcyc}"z."${instrument}".satbias.nc

grep "${instrument}" ../../satbias_in | awk '{print $2" "$3" "$4}' > \
"${OUTPUT}"/gdas.t"${gcyc}"z."${instrument}".tlapse.txt
/bin/cp -p satbias_"${instrument}".nc4 "${OUTPUT}"/gdas.t"${gcyc}"z."${instrument}".satbias.nc
/bin/mv satbias_"${instrument}".nc4 "${OUTPUT}"/gdas.t"${gcyc}"z."${instrument}".satbias_cov.nc
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's probably fine to use /bin/mv on any POSIX system, but in general, we should allow the PATH variable to determine the command to use.

Suggested change
/bin/mv satbias_"${instrument}".nc4 "${OUTPUT}"/gdas.t"${gcyc}"z."${instrument}".satbias_cov.nc
mv satbias_"${instrument}".nc4 "${OUTPUT}"/gdas.t"${gcyc}"z."${instrument}".satbias_cov.nc

# GSI run
for file in ${BIASFILES}; do
cpreq "${BIASDIR}/${file}" "${COMOUT_ATMOS_ANALYSIS_PREV}/enkf${file}.txt"
err=$?
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

err needs to be exported for err_exit to capture it properly

Suggested change
err=$?
export err=$?

cpreq "${BIASDIR}/${file}" "${COMOUT_ATMOS_ANALYSIS_PREV}/enkf${file}.txt"
err=$?
if [[ ${err} -ne 0 ]]; then
err_exit "Error copying operational anl bias correction files"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
err_exit "Error copying operational anl bias correction files"
err_exit "FATAL ERROR copying operational anl bias correction files"

tar -cvf "${ABIAS_AIR_JEDI_TAR}" "./enkf${GDUMP}.t${gcyc}z.abias_air.txt"
rm -rf "./enkf${GDUMP}.t${gcyc}z.abias_air.txt"
tar -cvf "${ABIAS_SAT_JEDI_TAR}" ./*.nc ./*.txt
err=$?
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
err=$?
export err=$?

fi

if [[ ${err} -ne 0 ]]; then
err_exit "Error executing ${EXSCRIPT}"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
err_exit "Error executing ${EXSCRIPT}"
err_exit "FATAL ERROR executing ${EXSCRIPT}"

Comment on lines +525 to +534
if [[ "${DOENKFONLY_ATM:-NO}" == "YES" ]] ; then
export RECENTER_ENKF="NO" # Turn off recentering ensemble analysis
export DO_VERFOZN="NO" # Ozone data assimilation monitoring
export DO_VERFRAD="NO" # Radiance data assimilation monitoring
export DO_VMINMON="NO" # GSI minimization monitoring
export DO_METP="NO" # Run METPLUS jobs - set METPLUS settings in config.metp
export DO_FIT2OBS="NO" # Run fit to observations package
export DO_TRACKER="NO" # Hurricane track verification
export DO_GENESIS="NO" # Cyclone genesis verification
fi
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@aerorahul I wonder if this would be better to have in dev/workflow/applications/gfs_*.py. What do you think?

CoryMartin-NOAA pushed a commit to NOAA-EMC/GDASApp that referenced this pull request Jan 23, 2026
This PR works along with the following three dependent PRs to enable the
EnKF-only configuration for the atmosphere within the global workflow
(see detailed description
NOAA-EMC/global-workflow#4345)

Dependencies:
-NOAA-EMC/global-workflow#4345
-NOAA-EMC/jcb-gdas#219
-NOAA-EMC/jcb#32

Resolve
- NOAA-EMC/global-workflow#4339

---------

Co-authored-by: Bo Huang <Bo.Huang@gaea65.ncrc.gov>
RussTreadon-NOAA pushed a commit to NOAA-EMC/GDASApp that referenced this pull request Jan 26, 2026
This PR works along with the following three dependent PRs to enable the
EnKF-only configuration for the atmosphere within the global workflow
(see detailed description
NOAA-EMC/global-workflow#4345)

Dependencies:
-NOAA-EMC/global-workflow#4345
-NOAA-EMC/jcb-gdas#219
-NOAA-EMC/jcb#32

Resolve
- NOAA-EMC/global-workflow#4339

---------

Co-authored-by: Bo Huang <Bo.Huang@gaea65.ncrc.gov>
@RussTreadon-NOAA
Copy link
Contributor

This PR requires the changes in the following PRs

The sorc/wxflow and sorc/gdas.cd hashes in bhuang95:feature/enkf_only_dev need to be updated once these PRs are merged into their respective develop

@bhuang95 : Do you intended to add an EnKF-only atmosphere g-w CI case at some point? Failure to do so opens us to the possibility of the EnKF-only capability being unknowingly broken by future g-w PRs. Addition of an EnKF-only atmosphere g-w CI case could be the topic of a future g-w issue and PR.

@RussTreadon-NOAA
Copy link
Contributor

@bhuang95 , whether before or after the above PRs are merged into their respective develop, your branch bhuang95:feature/enkf_only_dev needs to be updated to the current head of g-w develop. Please resolved the listed conflicts and update to the current head of g-w develop. Once this is done I can install your branch on Dogwood for testing.

@RussTreadon-NOAA
Copy link
Contributor

@bhuang95 : GDASApp PR #2051 has been merged into GDASApp develop.

Please update the sorc/gdas.cd hash in bhuang95:feature/enkf_only_dev to 326262a or later.

I can test once sorc/gdas.cd is updated and bhuang95:feature/enkf_only_dev is brought up to date with g-w develop by resolving the listed conflicts.

@bhuang95
Copy link
Author

@RussTreadon-NOAA I need to work on some other tasks today. I will update my g-w bhuang95:feature/enkf_only_dev (including updated sorc/gdas.cd) and address @DavidHuber-NOAA's suggested changes tomorrow morning. Quick question to your CI test question for this PR: yes, we need to do that probably in the future PR as @aerorahul suggested before.

@RussTreadon-NOAA
Copy link
Contributor

Thank you @bhuang95 for the update. I'll resume work on this PR after you address remaining issues. It should be fairly easy to create a new CI EnKF-only atmosphere CI case from existing cases.

@bhuang95
Copy link
Author

@DavidHuber-NOAA Thanks for your suggested changes. I have addressed most of them in this updated PR.

@RussTreadon-NOAA
I have updated to use sorc/gdas.cd hash NOAA-EMC/GDASApp@326262a.
It passed tests of running gsi and jedi enkf-only atm on Ursa. Because some of obs yaml files in https://github.com/NOAA-EMC/GDASApp/blob/develop/parm/jcb-gdas/observations/atmosphere/ are not compatible IODA files generated through obsforge. I only tested JEDI enkf-only atm using modified prepbufr_adpupa.yaml.j2 that assimilates t, u, v and q. We can take care of this in the future when creating CI tests for this PR.

A quick sanity check on this branch would be with no further changes it would not affect the existing CI tests because of by default DOENKFONLY_ATM: NO. Please let me know how your test goes.

@aerorahul Here are some thoughts for your previous high-level suggestions.

  1. CI test
    We will add a CI test in a separate PR after this is merged.
  2. Whether DO_ATMENSONLY is redundant
    I think it's not. In this PR, it will test enfk-only for both GSI and JEDI. If I understand correctly, in the current workflow, the high-level DO_HYBVAR controls whether to run hybrid var+enkf (=YES) or var-only (=NO). The low-level DO_JEDIATMENS/VARfurther decides whether to use JEDI (YES) or GSI (NO) for tasks determined by DO_HYBVAR. Because of this hierarchy, DO_HYBVAR=NO (to run VAR) and DO_JEDIATMENS=YES (to run JEDI ENKF) would not simply enable enkf-only atm for both JEDI and GSI. For example, here , DO_HYBVAR=NO (to run VAR) will not generate enkf tasks for JEDI (DO_JEDIATMENS=YES) and GSI (DO_JEDIATMENS=NO).

In the current implementation, my goal was to minimize changes to the workflow so I chose to define this high-level DOENKFONLY_ATM and follow (a) to leave the codes as it is if DOENKFONLY_ATM=NO and (2) to modify accordingly for JEDI and GSI if DOENKFONLY_ATM=YES or NO. This is reflected by if (DOENKFONLY_ATM) {modified codes} else {original codes} in the changes. As a result, it keeps the original and modified codes local. It would help with furture changes.

My impression: it would require more extensive changes if we use DO_HYBVAR, DO_JEDIATMENS/VAR and DO_GSIATMENS/VAR (need to define) to enable JEDI and GSI enkf-only atm and even if they are flexible enough. That's just my two cents. I'd be happy to hear what others think.

Thank you all for reviewing this PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants