Skip to content

Commit

Permalink
JCB-based obs+bias staging, Jedi class updates, and marine B-matrix r…
Browse files Browse the repository at this point in the history
…efactoring (#2992)

This PR is a companion to GDASApp PR
NOAA-EMC/GDASApp#1312 (merged) and NOAA-EMC/jcb-gdas#31
(merged).

This PR does three things:

1. It changes the observation and bias staging for the atmospheric
analysis tasks to use JCB templates instead of reading the full JEDI
input configuration dictionary in order to construct a list of files to
stage. This is cleaner and places fewer constraints on how to initialize
the analysis.
2. The ```Jedi``` constructor now takes as input a dictionary that is
essentially subset of the ```task_config``` dictionary. This makes the
code clearer and less opaque and makes debugging easier. Each dictionary
is constructed from a YAML file with configuration parameters for each
JEDI application that is run.
3. All JEDI applications and their input YAMLs are now initialized in
the initialize job of the ```AtmAnalysis``` and ```AtmEnsAnalysis```.
Before, in the ```atmensanl*``` jobs for example, the LETKF solver was
initialized in the ```atmensanlinit```cjob, but the LETKF solver and FV3
increment converter were both initialized and executed in the
```atmensanlobs``` and ```atmensanlfv3inc``` jobs respectively. This
makes more sense in terms of resource allocation.

Addendum:

I'm now rolling in the refactoring of the marine B-matrix task into this
PR. That makes it also a companion of NOAA-EMC/GDASApp#1346 and
NOAA-EMC/jcb-gdas#36.

These new changes introduce the ```Jedi``` class and JCB into the marine
B-matrix job.

Partially resolvesNOAA-EMC/GDASApp#1296

---------

Co-authored-by: RussTreadon-NOAA <Russ.Treadon@noaa.gov>
Co-authored-by: Rahul Mahajan <aerorahul@users.noreply.github.com>
  • Loading branch information
3 people authored Nov 19, 2024
1 parent 3209bea commit 7ff942e
Show file tree
Hide file tree
Showing 31 changed files with 547 additions and 585 deletions.
7 changes: 6 additions & 1 deletion env/HERCULES.env
Original file line number Diff line number Diff line change
Expand Up @@ -145,14 +145,19 @@ case ${step} in
export NTHREADS_OCNANALECEN=${threads_per_task_ocnanalecen:-${max_threads_per_task}}
[[ ${NTHREADS_OCNANALECEN} -gt ${max_threads_per_task} ]] && export NTHREADS_OCNANALECEN=${max_threads_per_task}
export APRUN_OCNANALECEN="${launcher} -n ${ntasks_ocnanalecen} --cpus-per-task=${NTHREADS_OCNANALECEN}"
;;
;;
"marineanlchkpt")

export APRUNCFP="${launcher} -n \$ncmd ${mpmd_opt}"

export NTHREADS_OCNANAL=${NTHREADSmax}
export APRUN_MARINEANLCHKPT="${APRUN_default} --cpus-per-task=${NTHREADS_OCNANAL}"
;;
"marineanlletkf")

export NTHREADS_MARINEANLLETKF=${NTHREADSmax}
export APRUN_MARINEANLLETKF="${APRUN_default}"
;;
"anal" | "analcalc")

export MKL_NUM_THREADS=4
Expand Down
10 changes: 4 additions & 6 deletions env/WCOSS2.env
Original file line number Diff line number Diff line change
Expand Up @@ -107,17 +107,15 @@ elif [[ "${step}" = "marinebmat" ]]; then
export APRUNCFP="${launcher} -n \$ncmd --multi-prog"
export APRUN_MARINEBMAT="${APRUN_default}"

elif [[ "${step}" = "ocnanalrun" ]]; then
elif [[ "${step}" = "marineanlvar" ]]; then

export APRUNCFP="${launcher} -n \$ncmd --multi-prog"
export APRUN_MARINEANLVAR="${APRUN_default}"

export APRUN_OCNANAL="${APRUN_default}"

elif [[ "${step}" = "ocnanalchkpt" ]]; then
elif [[ "${step}" = "marineanlchkpt" ]]; then

export APRUNCFP="${launcher} -n \$ncmd --multi-prog"

export APRUN_OCNANAL="${APRUN_default}"
export APRUN_MARINEANLCHKPT="${APRUN_default}"

elif [[ "${step}" = "ocnanalecen" ]]; then

Expand Down
7 changes: 3 additions & 4 deletions parm/config/gfs/config.atmanl
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@

echo "BEGIN: config.atmanl"

export JCB_BASE_YAML="${PARMgfs}/gdas/atm/jcb-base.yaml.j2"
export JCB_ALGO_YAML=@JCB_ALGO_YAML@
export JCB_ALGO_YAML_VAR=@JCB_ALGO_YAML_VAR@

export STATICB_TYPE=@STATICB_TYPE@
export LOCALIZATION_TYPE="bump"
Expand All @@ -23,6 +22,8 @@ fi

export CRTM_FIX_YAML="${PARMgfs}/gdas/atm_crtm_coeff.yaml.j2"
export JEDI_FIX_YAML="${PARMgfs}/gdas/atm_jedi_fix.yaml.j2"

export JEDI_CONFIG_YAML="${PARMgfs}/gdas/atmanl_jedi_config.yaml.j2"
export VAR_BKG_STAGING_YAML="${PARMgfs}/gdas/staging/atm_var_bkg.yaml.j2"
export BERROR_STAGING_YAML="${PARMgfs}/gdas/staging/atm_berror_${STATICB_TYPE}.yaml.j2"
export FV3ENS_STAGING_YAML="${PARMgfs}/gdas/staging/atm_var_fv3ens.yaml.j2"
Expand All @@ -33,6 +34,4 @@ export layout_y_atmanl=@LAYOUT_Y_ATMANL@
export io_layout_x=@IO_LAYOUT_X@
export io_layout_y=@IO_LAYOUT_Y@

export JEDIEXE=${EXECgfs}/gdas.x

echo "END: config.atmanl"
3 changes: 0 additions & 3 deletions parm/config/gfs/config.atmanlfv3inc
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,4 @@ echo "BEGIN: config.atmanlfv3inc"
# Get task specific resources
. "${EXPDIR}/config.resources" atmanlfv3inc

export JCB_ALGO=fv3jedi_fv3inc_variational
export JEDIEXE=${EXECgfs}/fv3jedi_fv3inc.x

echo "END: config.atmanlfv3inc"
13 changes: 5 additions & 8 deletions parm/config/gfs/config.atmensanl
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,16 @@

echo "BEGIN: config.atmensanl"

export JCB_BASE_YAML="${PARMgfs}/gdas/atm/jcb-base.yaml.j2"
if [[ ${lobsdiag_forenkf} = ".false." ]] ; then
export JCB_ALGO_YAML=@JCB_ALGO_YAML_LETKF@
else
export JCB_ALGO_YAML=@JCB_ALGO_YAML_OBS@
fi
export JCB_ALGO_YAML_LETKF=@JCB_ALGO_YAML_LETKF@
export JCB_ALGO_YAML_OBS=@JCB_ALGO_YAML_OBS@
export JCB_ALGO_YAML_SOL=@JCB_ALGO_YAML_SOL@

export INTERP_METHOD='barycentric'

export CRTM_FIX_YAML="${PARMgfs}/gdas/atm_crtm_coeff.yaml.j2"
export JEDI_FIX_YAML="${PARMgfs}/gdas/atm_jedi_fix.yaml.j2"

export JEDI_CONFIG_YAML="${PARMgfs}/gdas/atmensanl_jedi_config.yaml.j2"
export LGETKF_BKG_STAGING_YAML="${PARMgfs}/gdas/staging/atm_lgetkf_bkg.yaml.j2"

export layout_x_atmensanl=@LAYOUT_X_ATMENSANL@
Expand All @@ -24,6 +23,4 @@ export layout_y_atmensanl=@LAYOUT_Y_ATMENSANL@
export io_layout_x=@IO_LAYOUT_X@
export io_layout_y=@IO_LAYOUT_Y@

export JEDIEXE=${EXECgfs}/gdas.x

echo "END: config.atmensanl"
3 changes: 0 additions & 3 deletions parm/config/gfs/config.atmensanlfv3inc
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,4 @@ echo "BEGIN: config.atmensanlfv3inc"
# Get task specific resources
. "${EXPDIR}/config.resources" atmensanlfv3inc

export JCB_ALGO=fv3jedi_fv3inc_lgetkf
export JEDIEXE=${EXECgfs}/fv3jedi_fv3inc.x

echo "END: config.atmensanlfv3inc"
2 changes: 0 additions & 2 deletions parm/config/gfs/config.atmensanlobs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,4 @@ echo "BEGIN: config.atmensanlobs"
# Get task specific resources
. "${EXPDIR}/config.resources" atmensanlobs

export JCB_ALGO_YAML=@JCB_ALGO_YAML@

echo "END: config.atmensanlobs"
2 changes: 0 additions & 2 deletions parm/config/gfs/config.atmensanlsol
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,4 @@ echo "BEGIN: config.atmensanlsol"
# Get task specific resources
. "${EXPDIR}/config.resources" atmensanlsol

export JCB_ALGO_YAML=@JCB_ALGO_YAML@

echo "END: config.atmensanlsol"
2 changes: 2 additions & 0 deletions parm/config/gfs/config.marineanl
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@

echo "BEGIN: config.marineanl"

export JEDI_CONFIG_YAML="${PARMgfs}/gdas/soca_bmat_jedi_config.yaml.j2"

export MARINE_OBS_YAML_DIR="${PARMgfs}/gdas/soca/obs/config"
export MARINE_OBS_LIST_YAML=@SOCA_OBS_LIST@
export SOCA_INPUT_FIX_DIR=@SOCA_INPUT_FIX_DIR@
Expand Down
2 changes: 1 addition & 1 deletion parm/config/gfs/config.marineanlletkf
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export MARINE_LETKF_STAGE_YAML_TMPL="${PARMgfs}/gdas/soca/letkf/letkf_stage.yaml
export MARINE_LETKF_SAVE_YAML_TMPL="${PARMgfs}/gdas/soca/letkf/letkf_save.yaml.j2"

export GRIDGEN_EXEC="${EXECgfs}/gdas_soca_gridgen.x"
export GRIDGEN_YAML="${PARMgfs}/gdas/soca/gridgen/gridgen.yaml"
export GRIDGEN_YAML="${HOMEgfs}/sorc/gdas.cd/parm/jcb-gdas/algorithm/marine/soca_gridgen.yaml.j2"
export DIST_HALO_SIZE=500000

echo "END: config.marineanlletkf"
8 changes: 0 additions & 8 deletions parm/config/gfs/config.marinebmat
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,4 @@ echo "BEGIN: config.marinebmat"
# Get task specific resources
. "${EXPDIR}/config.resources" marinebmat

export BERROR_DIAGB_YAML="${PARMgfs}/gdas/soca/berror/soca_diagb.yaml.j2"
export BERROR_VTSCALES_YAML="${PARMgfs}/gdas/soca/berror/soca_vtscales.yaml.j2"
export BERROR_DIFFV_YAML="${PARMgfs}/gdas/soca/berror/soca_parameters_diffusion_vt.yaml.j2"
export BERROR_HZSCALES_YAML="${PARMgfs}/gdas/soca/berror/soca_setcorscales.yaml"
export BERROR_DIFFH_YAML="${PARMgfs}/gdas/soca/berror/soca_parameters_diffusion_hz.yaml.j2"
export BERROR_ENS_RECENTER_YAML="${PARMgfs}/gdas/soca/berror/soca_ensb.yaml.j2"
export BERROR_HYB_WEIGHTS_YAML="${PARMgfs}/gdas/soca/berror/soca_ensweights.yaml.j2"

echo "END: config.marinebmat"
3 changes: 2 additions & 1 deletion parm/config/gfs/config.resources.ORION
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ case ${step} in
;;
"atmanlvar")
# Run on 8 nodes for memory requirement
export tasks_per_node=8
export tasks_per_node_gdas=8
export tasks_per_node_gfs=8
export walltime="00:45:00"
;;
"atmensanlobs")
Expand Down
9 changes: 2 additions & 7 deletions parm/config/gfs/yaml/defaults.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ base:
FHMAX_ENKF_GFS: 12

atmanl:
JCB_ALGO_YAML: "${PARMgfs}/gdas/atm/jcb-prototype_3dvar.yaml.j2"
JCB_ALGO_YAML_VAR: "${PARMgfs}/gdas/atm/jcb-prototype_3dvar.yaml.j2"
STATICB_TYPE: "gsibec"
LAYOUT_X_ATMANL: 8
LAYOUT_Y_ATMANL: 8
Expand All @@ -33,16 +33,11 @@ atmanl:
atmensanl:
JCB_ALGO_YAML_LETKF: "${PARMgfs}/gdas/atm/jcb-prototype_lgetkf.yaml.j2"
JCB_ALGO_YAML_OBS: "${PARMgfs}/gdas/atm/jcb-prototype_lgetkf_observer.yaml.j2"
JCB_ALGO_YAML_SOL: "${PARMgfs}/gdas/atm/jcb-prototype_lgetkf_solver.yaml.j2"
LAYOUT_X_ATMENSANL: 8
LAYOUT_Y_ATMENSANL: 8
IO_LAYOUT_X: 1
IO_LAYOUT_Y: 1

atmensanlobs:
JCB_ALGO_YAML: "${PARMgfs}/gdas/atm/jcb-prototype_lgetkf_observer.yaml.j2"

atmensanlsol:
JCB_ALGO_YAML: "${PARMgfs}/gdas/atm/jcb-prototype_lgetkf_solver.yaml.j2"

aeroanl:
IO_LAYOUT_X: 1
Expand Down
13 changes: 13 additions & 0 deletions parm/gdas/atmanl_jedi_config.yaml.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
atmanlvar:
rundir: '{{ DATA }}'
exe_src: '{{ EXECgfs }}/gdas.x'
mpi_cmd: '{{ APRUN_ATMANLVAR }}'
jedi_args: ['fv3jedi', 'variational']
jcb_base_yaml: '{{ PARMgfs }}/gdas/atm/jcb-base.yaml.j2'
jcb_algo_yaml: '{{ JCB_ALGO_YAML_VAR }}'
atmanlfv3inc:
rundir: '{{ DATA }}'
exe_src: '{{ EXECgfs }}/fv3jedi_fv3inc.x'
mpi_cmd: '{{ APRUN_ATMANLFV3INC }}'
jcb_base_yaml: '{{ PARMgfs }}/gdas/atm/jcb-base.yaml.j2'
jcb_algo: fv3jedi_fv3inc_variational
27 changes: 27 additions & 0 deletions parm/gdas/atmensanl_jedi_config.yaml.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
atmensanlobs:
rundir: '{{ DATA }}'
exe_src: '{{ EXECgfs }}/gdas.x'
mpi_cmd: '{{ APRUN_ATMENSANLOBS }}'
jedi_args: ['fv3jedi', 'localensembleda']
jcb_base_yaml: '{{ PARMgfs }}/gdas/atm/jcb-base.yaml.j2'
jcb_algo_yaml: '{{ JCB_ALGO_YAML_OBS }}'
atmensanlsol:
rundir: '{{ DATA }}'
exe_src: '{{ EXECgfs }}/gdas.x'
mpi_cmd: '{{ APRUN_ATMENSANLSOL }}'
jedi_args: ['fv3jedi', 'localensembleda']
jcb_base_yaml: '{{ PARMgfs }}/gdas/atm/jcb-base.yaml.j2'
jcb_algo_yaml: '{{ JCB_ALGO_YAML_SOL }}'
atmensanlfv3inc:
rundir: '{{ DATA }}'
exe_src: '{{ EXECgfs }}/fv3jedi_fv3inc.x'
mpi_cmd: '{{ APRUN_ATMENSANLFV3INC }}'
jcb_base_yaml: '{{ PARMgfs }}/gdas/atm/jcb-base.yaml.j2'
jcb_algo: fv3jedi_fv3inc_lgetkf
atmensanlletkf:
rundir: '{{ DATA }}'
exe_src: '{{ EXECgfs }}/gdas.x'
mpi_cmd: '{{ APRUN_ATMENSANLLETKF }}'
jedi_args: ['fv3jedi', 'localensembleda']
jcb_base_yaml: '{{ PARMgfs }}/gdas/atm/jcb-base.yaml.j2'
jcb_algo_yaml: '{{ JCB_ALGO_YAML_LETKF }}'
42 changes: 42 additions & 0 deletions parm/gdas/soca_bmat_jedi_config.yaml.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
gridgen:
rundir: '{{ DATA }}'
exe_src: '{{ EXECgfs }}/gdas_soca_gridgen.x'
mpi_cmd: '{{ APRUN_MARINEBMAT }}'
jcb_base_yaml: '{{ PARMgfs }}/gdas/soca/marine-jcb-base.yaml'
jcb_algo: soca_gridgen
soca_diagb:
rundir: '{{ DATA }}'
exe_src: '{{ EXECgfs }}/gdas_soca_diagb.x'
mpi_cmd: '{{ APRUN_MARINEBMAT }}'
jcb_base_yaml: '{{ PARMgfs }}/gdas/soca/marine-jcb-base.yaml'
jcb_algo: soca_diagb
soca_parameters_diffusion_vt:
rundir: '{{ DATA }}'
exe_src: '{{ EXECgfs }}/gdas_soca_error_covariance_toolbox.x'
mpi_cmd: '{{ APRUN_MARINEBMAT }}'
jcb_base_yaml: '{{ PARMgfs }}/gdas/soca/marine-jcb-base.yaml'
jcb_algo: soca_parameters_diffusion_vt
soca_setcorscales:
rundir: '{{ DATA }}'
exe_src: '{{ EXECgfs }}/gdas_soca_setcorscales.x'
mpi_cmd: '{{ APRUN_MARINEBMAT }}'
jcb_base_yaml: '{{ PARMgfs }}/gdas/soca/marine-jcb-base.yaml'
jcb_algo: soca_setcorscales
soca_parameters_diffusion_hz:
rundir: '{{ DATA }}'
exe_src: '{{ EXECgfs }}/gdas_soca_error_covariance_toolbox.x'
mpi_cmd: '{{ APRUN_MARINEBMAT }}'
jcb_base_yaml: '{{ PARMgfs }}/gdas/soca/marine-jcb-base.yaml'
jcb_algo: soca_parameters_diffusion_hz
soca_ensb:
rundir: '{{ DATA }}'
exe_src: '{{ EXECgfs }}/gdas_ens_handler.x'
mpi_cmd: '{{ APRUN_MARINEBMAT }}'
jcb_base_yaml: '{{ PARMgfs }}/gdas/soca/marine-jcb-base.yaml'
jcb_algo: soca_ensb
soca_ensweights:
rundir: '{{ DATA }}'
exe_src: '{{ EXECgfs }}/gdas_socahybridweights.x'
mpi_cmd: '{{ APRUN_MARINEBMAT }}'
jcb_base_yaml: '{{ PARMgfs }}/gdas/soca/marine-jcb-base.yaml'
jcb_algo: soca_ensweights
9 changes: 4 additions & 5 deletions scripts/exglobal_atm_analysis_fv3_increment.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#!/usr/bin/env python3
# exglobal_atm_analysis_fv3_increment.py
# This script creates an AtmAnalysis object
# and runs the initialize_fv3inc and execute methods
# which convert the JEDI increment into an FV3 increment
# and runs the execute method which runs the JEDI
# FV3 increment converter
import os

from wxflow import Logger, cast_strdict_as_dtypedict
Expand All @@ -18,8 +18,7 @@
config = cast_strdict_as_dtypedict(os.environ)

# Instantiate the atm analysis object
AtmAnl = AtmAnalysis(config, 'atmanlfv3inc')
AtmAnl = AtmAnalysis(config)

# Initialize and execute FV3 increment converter
AtmAnl.initialize_jedi()
AtmAnl.execute(config.APRUN_ATMANLFV3INC)
AtmAnl.execute('atmanlfv3inc')
9 changes: 4 additions & 5 deletions scripts/exglobal_atm_analysis_initialize.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
# exglobal_atm_analysis_initialize.py
# This script creates an AtmAnalysis class
# and runs the initialize method
# which create and stage the runtime directory
# and create the YAML configuration
# which creates and stages the runtime directory
# and creates the YAML configuration
# for a global atm variational analysis
import os

Expand All @@ -20,8 +20,7 @@
config = cast_strdict_as_dtypedict(os.environ)

# Instantiate the atm analysis task
AtmAnl = AtmAnalysis(config, 'atmanlvar')
AtmAnl = AtmAnalysis(config)

# Initialize JEDI variational analysis
AtmAnl.initialize_jedi()
AtmAnl.initialize_analysis()
AtmAnl.initialize()
8 changes: 4 additions & 4 deletions scripts/exglobal_atm_analysis_variational.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#!/usr/bin/env python3
# exglobal_atm_analysis_variational.py
# This script creates an AtmAnalysis object
# and runs the execute method
# which executes the global atm variational analysis
# and runs the execute method which runs the JEDI
# variational analysis application
import os

from wxflow import Logger, cast_strdict_as_dtypedict
Expand All @@ -18,7 +18,7 @@
config = cast_strdict_as_dtypedict(os.environ)

# Instantiate the atm analysis task
AtmAnl = AtmAnalysis(config, 'atmanlvar')
AtmAnl = AtmAnalysis(config)

# Execute JEDI variational analysis
AtmAnl.execute(config.APRUN_ATMANLVAR, ['fv3jedi', 'variational'])
AtmAnl.execute('atmanlvar')
9 changes: 4 additions & 5 deletions scripts/exglobal_atmens_analysis_fv3_increment.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#!/usr/bin/env python3
# exglobal_atmens_analysis_fv3_increment.py
# This script creates an AtmEnsAnalysis object
# and runs the initialize_fv3inc and execute methods
# which convert the JEDI increment into an FV3 increment
# and runs the execute method which runs the JEDI
# FV3 increment converter application
import os

from wxflow import Logger, cast_strdict_as_dtypedict
Expand All @@ -18,8 +18,7 @@
config = cast_strdict_as_dtypedict(os.environ)

# Instantiate the atmens analysis object
AtmEnsAnl = AtmEnsAnalysis(config, 'atmensanlfv3inc')
AtmEnsAnl = AtmEnsAnalysis(config)

# Initialize and execute JEDI FV3 increment converter
AtmEnsAnl.initialize_jedi()
AtmEnsAnl.execute(config.APRUN_ATMENSANLFV3INC)
AtmEnsAnl.execute('atmensanlfv3inc')
12 changes: 4 additions & 8 deletions scripts/exglobal_atmens_analysis_initialize.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
# exglobal_atmens_analysis_initialize.py
# This script creates an AtmEnsAnalysis class
# and runs the initialize method
# which create and stage the runtime directory
# and create the YAML configuration
# which creates and stages the runtime directory
# and creates the YAML configuration
# for a global atm local ensemble analysis
import os

Expand All @@ -20,11 +20,7 @@
config = cast_strdict_as_dtypedict(os.environ)

# Instantiate the atmens analysis task
if not config.lobsdiag_forenkf:
AtmEnsAnl = AtmEnsAnalysis(config, 'atmensanlletkf')
else:
AtmEnsAnl = AtmEnsAnalysis(config, 'atmensanlobs')
AtmEnsAnl = AtmEnsAnalysis(config)

# Initialize JEDI ensemble DA analysis
AtmEnsAnl.initialize_jedi()
AtmEnsAnl.initialize_analysis()
AtmEnsAnl.initialize()
Loading

0 comments on commit 7ff942e

Please sign in to comment.