diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/geos_atmosphere.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/geos_atmosphere.yaml index 09fb12b18..a8c72d65a 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/geos_atmosphere.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/geos_atmosphere.yaml @@ -3,7 +3,7 @@ total_processors: 6*{{npx_proc}}*{{npy_proc}} executables: hofx3D: fv3jedi_hofx_nomodel.x hofx4D: fv3jedi_hofx.x - variational3D: fv3jedi_var.x - variational4D: fv3jedi_var.x - variational4DEnsVar: fv3jedi_var.x + variational3D-Var: fv3jedi_var.x + variational4D-Var: fv3jedi_var.x + variational4D-Ens-Var: fv3jedi_var.x localensembleda: fv3jedi_letkf.x diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/model/background4D.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/model/background4D.yaml new file mode 100755 index 000000000..f33adb95b --- /dev/null +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/model/background4D.yaml @@ -0,0 +1,70 @@ +- datetime: '{{local_background_time_iso}}' + filetype: cube sphere history + provider: geos + datapath: '' + filenames: ['{{cycle_dir}}/bkg.%yyyy%mm%ddT%hh%MM%ssZ.nc4', + '{{experiment_root}}/{{experiment_id}}/stage/fv3-jedi/geos_atmosphere/bkg/geos.crtmsrf.{{horizontal_resolution}}.nc4'] + state variables: [u,v,ua,va,t,delp,ps,q,qi,ql,qr,qs,o3ppmv,phis, + qls,qcn,cfcn,frocean,frland,varflt,ustar,bstar, + zpbl,cm,ct,cq,kcbl,tsm,khl,khu,frlake,frseaice,vtype, + stype,vfrac,sheleg,ts,soilt,soilm,u10m,v10m] +- datetime: '2021-12-11T22:00:00Z' + filetype: cube sphere history + provider: geos + datapath: '' + filenames: ['{{cycle_dir}}/bkg.%yyyy%mm%ddT%hh%MM%ssZ.nc4', + '{{experiment_root}}/{{experiment_id}}/stage/fv3-jedi/geos_atmosphere/bkg/geos.crtmsrf.{{horizontal_resolution}}.nc4'] + state variables: [u,v,ua,va,t,delp,ps,q,qi,ql,qr,qs,o3ppmv,phis, + qls,qcn,cfcn,frocean,frland,varflt,ustar,bstar, + zpbl,cm,ct,cq,kcbl,tsm,khl,khu,frlake,frseaice,vtype, + stype,vfrac,sheleg,ts,soilt,soilm,u10m,v10m] +- datetime: '2021-12-11T23:00:00Z' + filetype: cube sphere history + provider: geos + datapath: '' + filenames: ['{{cycle_dir}}/bkg.%yyyy%mm%ddT%hh%MM%ssZ.nc4', + '{{experiment_root}}/{{experiment_id}}/stage/fv3-jedi/geos_atmosphere/bkg/geos.crtmsrf.{{horizontal_resolution}}.nc4'] + state variables: [u,v,ua,va,t,delp,ps,q,qi,ql,qr,qs,o3ppmv,phis, + qls,qcn,cfcn,frocean,frland,varflt,ustar,bstar, + zpbl,cm,ct,cq,kcbl,tsm,khl,khu,frlake,frseaice,vtype, + stype,vfrac,sheleg,ts,soilt,soilm,u10m,v10m] +- datetime: '2021-12-12T00:00:00Z' + filetype: cube sphere history + provider: geos + datapath: '' + filenames: ['{{cycle_dir}}/bkg.%yyyy%mm%ddT%hh%MM%ssZ.nc4', + '{{experiment_root}}/{{experiment_id}}/stage/fv3-jedi/geos_atmosphere/bkg/geos.crtmsrf.{{horizontal_resolution}}.nc4'] + state variables: [u,v,ua,va,t,delp,ps,q,qi,ql,qr,qs,o3ppmv,phis, + qls,qcn,cfcn,frocean,frland,varflt,ustar,bstar, + zpbl,cm,ct,cq,kcbl,tsm,khl,khu,frlake,frseaice,vtype, + stype,vfrac,sheleg,ts,soilt,soilm,u10m,v10m] +- datetime: '2021-12-12T01:00:00Z' + filetype: cube sphere history + provider: geos + datapath: '' + filenames: ['{{cycle_dir}}/bkg.%yyyy%mm%ddT%hh%MM%ssZ.nc4', + '{{experiment_root}}/{{experiment_id}}/stage/fv3-jedi/geos_atmosphere/bkg/geos.crtmsrf.{{horizontal_resolution}}.nc4'] + state variables: [u,v,ua,va,t,delp,ps,q,qi,ql,qr,qs,o3ppmv,phis, + qls,qcn,cfcn,frocean,frland,varflt,ustar,bstar, + zpbl,cm,ct,cq,kcbl,tsm,khl,khu,frlake,frseaice,vtype, + stype,vfrac,sheleg,ts,soilt,soilm,u10m,v10m] +- datetime: '2021-12-12T02:00:00Z' + filetype: cube sphere history + provider: geos + datapath: '' + filenames: ['{{cycle_dir}}/bkg.%yyyy%mm%ddT%hh%MM%ssZ.nc4', + '{{experiment_root}}/{{experiment_id}}/stage/fv3-jedi/geos_atmosphere/bkg/geos.crtmsrf.{{horizontal_resolution}}.nc4'] + state variables: [u,v,ua,va,t,delp,ps,q,qi,ql,qr,qs,o3ppmv,phis, + qls,qcn,cfcn,frocean,frland,varflt,ustar,bstar, + zpbl,cm,ct,cq,kcbl,tsm,khl,khu,frlake,frseaice,vtype, + stype,vfrac,sheleg,ts,soilt,soilm,u10m,v10m] +- datetime: '2021-12-12T03:00:00Z' + filetype: cube sphere history + provider: geos + datapath: '' + filenames: ['{{cycle_dir}}/bkg.%yyyy%mm%ddT%hh%MM%ssZ.nc4', + '{{experiment_root}}/{{experiment_id}}/stage/fv3-jedi/geos_atmosphere/bkg/geos.crtmsrf.{{horizontal_resolution}}.nc4'] + state variables: [u,v,ua,va,t,delp,ps,q,qi,ql,qr,qs,o3ppmv,phis, + qls,qcn,cfcn,frocean,frland,varflt,ustar,bstar, + zpbl,cm,ct,cq,kcbl,tsm,khl,khu,frlake,frseaice,vtype, + stype,vfrac,sheleg,ts,soilt,soilm,u10m,v10m] diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/model/background_error.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/model/background_error.yaml index fe2f0b7ee..ffff0596b 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/model/background_error.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/model/background_error.yaml @@ -4,7 +4,7 @@ saber central block: read: gsi akbk: '{{experiment_root}}/{{experiment_id}}/stage/fv3-jedi/geos_atmosphere/fv3files/akbk{{vertical_resolution}}.nc4' gsi error covariance file: '{{experiment_root}}/{{experiment_id}}/stage/fv3-jedi/geos_atmosphere/gsibec/gsibec_coefficients_c{{horizontal_resolution}}.nc4' - gsi berror namelist file: '{{experiment_root}}/{{experiment_id}}/stage/fv3-jedi/geos_atmosphere/gsibec/gsibec_configuration_c{{horizontal_resolution}}.nml' + gsi berror namelist file: '{{experiment_root}}/{{experiment_id}}/stage/fv3-jedi/geos_atmosphere/gsibec/{{gsibec_configuration}}_c{{horizontal_resolution}}.nml' processor layout x direction: {{gsibec_npx_proc}} processor layout y direction: {{gsibec_npy_proc}} debugging mode: false @@ -13,12 +13,10 @@ saber outer blocks: state variables to inverse: &bvars [eastward_wind,northward_wind,air_temperature,surface_pressure, specific_humidity,cloud_liquid_ice,cloud_liquid_water, mole_fraction_of_ozone_in_air, - skin_temperature, - fraction_of_ocean,fraction_of_lake,fraction_of_ice, sfc_geopotential_height_times_grav] gsi akbk: '{{experiment_root}}/{{experiment_id}}/stage/fv3-jedi/geos_atmosphere/fv3files/akbk{{vertical_resolution}}.nc4' gsi error covariance file: '{{experiment_root}}/{{experiment_id}}/stage/fv3-jedi/geos_atmosphere/gsibec/gsibec_coefficients_c{{horizontal_resolution}}.nc4' - gsi berror namelist file: '{{experiment_root}}/{{experiment_id}}/stage/fv3-jedi/geos_atmosphere/gsibec/gsibec_configuration_c{{horizontal_resolution}}.nml' + gsi berror namelist file: '{{experiment_root}}/{{experiment_id}}/stage/fv3-jedi/geos_atmosphere/gsibec/{{gsibec_configuration}}_c{{horizontal_resolution}}.nml' processor layout x direction: {{gsibec_npx_proc}} processor layout y direction: {{gsibec_npy_proc}} debugging mode: false diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/model/cost_type.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/model/cost_type.yaml new file mode 100644 index 000000000..2a82b73f4 --- /dev/null +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/model/cost_type.yaml @@ -0,0 +1 @@ +'{{cost_type}}' diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/model/stage.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/model/stage.yaml index 70c9f00db..bd8604ed4 100755 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/model/stage.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/model/stage.yaml @@ -4,4 +4,5 @@ - ['{{experiment_root}}/{{experiment_id}}/jedi_bundle/source/fv3-jedi/test/Data/fieldmetadata/*', '{{experiment_root}}/{{experiment_id}}/stage/fv3-jedi/geos_atmosphere/fieldmetadata/'] - ['{{experiment_root}}/{{experiment_id}}/jedi_bundle/source/fv3-jedi/test/Data/fv3files/*', '{{experiment_root}}/{{experiment_id}}/stage/fv3-jedi/geos_atmosphere/fv3files/'] - ['{{swell_static_files}}/jedi/interfaces/geos_atmosphere/gsibec/gsibec_coefficients_c{{horizontal_resolution}}.nc4', '{{experiment_root}}/{{experiment_id}}/stage/fv3-jedi/geos_atmosphere/gsibec/'] - - ['{{swell_static_files}}/jedi/interfaces/geos_atmosphere/gsibec/gsibec_configuration_c{{horizontal_resolution}}.nml', '{{experiment_root}}/{{experiment_id}}/stage/fv3-jedi/geos_atmosphere/gsibec/'] + - ['{{swell_static_files}}/jedi/interfaces/geos_atmosphere/gsibec/{{gsibec_configuration}}_c{{horizontal_resolution}}.nml', '{{experiment_root}}/{{experiment_id}}/stage/fv3-jedi/geos_atmosphere/gsibec/'] + - ['{{swell_static_files}}/jedi/interfaces/geos_atmosphere/rcov/1.0.0/*', '{{experiment_root}}/{{experiment_id}}/stage/fv3-jedi/geos_atmosphere/rcov/'] diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/model/var4Dincrement1.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/model/var4Dincrement1.yaml new file mode 100644 index 000000000..4261401da --- /dev/null +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/model/var4Dincrement1.yaml @@ -0,0 +1,39 @@ +write increment: true +increment: + state component: + states: + - date: 2021-12-11T21:00:00Z + filetype: auxgrid + gridtype: latlon + datapath: './' + filename: jedi.increment-iter1. + - date: 2021-12-11T22:00:00Z + filetype: auxgrid + gridtype: latlon + datapath: './' + filename: jedi.increment-iter1. + - date: 2021-12-11T23:00:00Z + filetype: auxgrid + gridtype: latlon + datapath: './' + filename: jedi.increment-iter1. + - date: 2021-12-12T00:00:00Z + filetype: auxgrid + gridtype: latlon + datapath: './' + filename: jedi.increment-iter1. + - date: 2021-12-12T01:00:00Z + filetype: auxgrid + gridtype: latlon + datapath: './' + filename: jedi.increment-iter1. + - date: 2021-12-12T02:00:00Z + filetype: auxgrid + gridtype: latlon + datapath: './' + filename: jedi.increment-iter1. + - date: 2021-12-12T03:00:00Z + filetype: auxgrid + gridtype: latlon + datapath: './' + filename: jedi.increment-iter1. diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/model/varincrement1.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/model/varincrement1.yaml new file mode 100644 index 000000000..42fa3965c --- /dev/null +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/model/varincrement1.yaml @@ -0,0 +1,7 @@ +write increment: true +increment: + state component: + filetype: auxgrid + gridtype: latlon + datapath: ./ + filename: {{experiment_id}}.increment-iter1. diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/aircraft.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/aircraft.yaml index 0a19b8d4a..de5992294 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/aircraft.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/aircraft.yaml @@ -24,8 +24,8 @@ obs operator: - name: windNorthward # Hofx scaling - hofx scaling field: SurfaceWindScalingPressure - hofx scaling field group: DerivedVariables +# hofx scaling field: SurfaceWindScalingPressure +# hofx scaling field group: DerivedVariables - name: VertInterp observation alias file: '{{experiment_root}}/{{experiment_id}}/configuration/jedi/interfaces/{{model_component}}/observations/obsop_name_map.yaml' diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/airs_aqua.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/airs_aqua.yaml index 3cfacd2dd..05887a34e 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/airs_aqua.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/airs_aqua.yaml @@ -21,7 +21,7 @@ obs operator: linear obs operator: Absorbers: [H2O,O3] - Surfaces: [Water_Temperature] + Surfaces: [Water_Temperature,Land_Temperature,Ice_Temperature,Snow_Temperature] obs bias: input file: '{{cycle_dir}}/airs_aqua.{{background_time}}.satbias.nc4' @@ -53,6 +53,10 @@ obs bias: ratio for small dataset: 2.0 output file: '{{cycle_dir}}/airs_aqua.{{window_begin}}.satbias.nc4' +obs error: + covariance model: cross variable covariances + input file: '{{experiment_root}}/{{experiment_id}}/stage/fv3-jedi/geos_atmosphere/rcov/airs_aqua_119_jedi_rcov.nc4' + obs prior filters: - filter: Perform Action filter variables: diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_aqua.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_aqua.yaml index 658e88b03..f6f481364 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_aqua.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_aqua.yaml @@ -24,6 +24,8 @@ obs operator: obs bias: input file: '{{cycle_dir}}/amsua_aqua.{{background_time}}.satbias.nc4' + variables without bc: [brightnessTemperature] + channels: 14 variational bc: predictors: - name: constant diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_metop-c.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_metop-c.yaml index a21a15cfe..0d16989d6 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_metop-c.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/amsua_metop-c.yaml @@ -52,11 +52,11 @@ obs bias: step size: 1.0e-4 largest analysis variance: 10000.0 prior: - input file: '{{cycle_dir}}/INSTRUMENT.{{background_time}}.satbias.nc4' + input file: '{{cycle_dir}}/amsua_metop-c.{{background_time}}.satbias.nc4' inflation: ratio: 1.1 ratio for small dataset: 2.0 - output file: '{{cycle_dir}}/INSTRUMENT.{{window_begin}}.satbias.nc4' + output file: '{{cycle_dir}}/amsua_metop-c.{{window_begin}}.satbias.nc4' obs prior filters: # Assign obs error diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/cris-fsr_n20.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/cris-fsr_n20.yaml index 04cd967b7..559a480c6 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/cris-fsr_n20.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/cris-fsr_n20.yaml @@ -20,7 +20,7 @@ obs operator: CoefficientPath: '{{crtm_coeff_dir}}/' linear obs operator: Absorbers: [H2O,O3] - Surfaces: [Water_Temperature] + Surfaces: [Water_Temperature,Land_Temperature,Ice_Temperature,Snow_Temperature] obs bias: input file: '{{cycle_dir}}/cris-fsr_n20.{{background_time}}.satbias.nc4' @@ -52,6 +52,10 @@ obs bias: ratio for small dataset: 2.0 output file: '{{cycle_dir}}/cris-fsr_n20.{{window_begin}}.satbias.nc4' +obs error: + covariance model: cross variable covariances + input file: '{{experiment_root}}/{{experiment_id}}/stage/fv3-jedi/geos_atmosphere/rcov/cris-fsr_108_jedi_rcov.nc4' + obs prior filters: - filter: Perform Action filter variables: diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/cris-fsr_npp.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/cris-fsr_npp.yaml index 401863032..48f329889 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/cris-fsr_npp.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/cris-fsr_npp.yaml @@ -20,7 +20,7 @@ obs operator: CoefficientPath: '{{crtm_coeff_dir}}/' linear obs operator: Absorbers: [H2O,O3] - Surfaces: [Water_Temperature] + Surfaces: [Water_Temperature,Land_Temperature,Ice_Temperature,Snow_Temperature] obs bias: input file: '{{cycle_dir}}/cris-fsr_npp.{{background_time}}.satbias.nc4' @@ -52,6 +52,10 @@ obs bias: ratio for small dataset: 2.0 output file: '{{cycle_dir}}/cris-fsr_npp.{{window_begin}}.satbias.nc4' +obs error: + covariance model: cross variable covariances + input file: '{{experiment_root}}/{{experiment_id}}/stage/fv3-jedi/geos_atmosphere/rcov/cris-fsr_108_jedi_rcov.nc4' + obs prior filters: - filter: Perform Action filter variables: diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/iasi_metop-b.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/iasi_metop-b.yaml index da48f76e6..f4ff7a346 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/iasi_metop-b.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/iasi_metop-b.yaml @@ -20,7 +20,7 @@ obs operator: CoefficientPath: '{{crtm_coeff_dir}}/' linear obs operator: Absorbers: [H2O,O3] - Surfaces: [Water_Temperature] + Surfaces: [Water_Temperature,Land_Temperature,Ice_Temperature,Snow_Temperature] obs bias: input file: '{{cycle_dir}}/iasi_metop-b.{{background_time}}.satbias.nc4' @@ -52,6 +52,10 @@ obs bias: ratio for small dataset: 2.0 output file: '{{cycle_dir}}/iasi_metop-b.{{window_begin}}.satbias.nc4' +obs error: + covariance model: cross variable covariances + input file: '{{experiment_root}}/{{experiment_id}}/stage/fv3-jedi/geos_atmosphere/rcov/iasi_metop_141_jedi_rcov.nc4' + obs prior filters: - filter: Perform Action filter variables: diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/iasi_metop-c.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/iasi_metop-c.yaml index 836d229a3..a871e898e 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/iasi_metop-c.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/iasi_metop-c.yaml @@ -20,7 +20,7 @@ obs operator: CoefficientPath: '{{crtm_coeff_dir}}/' linear obs operator: Absorbers: [H2O,O3] - Surfaces: [Water_Temperature] + Surfaces: [Water_Temperature,Land_Temperature,Ice_Temperature,Snow_Temperature] obs bias: input file: '{{cycle_dir}}/iasi_metop-c.{{background_time}}.satbias.nc4' @@ -52,6 +52,10 @@ obs bias: ratio for small dataset: 2.0 output file: '{{cycle_dir}}/iasi_metop-c.{{window_begin}}.satbias.nc4' +obs error: + covariance model: cross variable covariances + input file: '{{experiment_root}}/{{experiment_id}}/stage/fv3-jedi/geos_atmosphere/rcov/iasi_metop_141_jedi_rcov.nc4' + obs prior filters: - filter: Perform Action filter variables: diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/mhs_metop-c.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/mhs_metop-c.yaml index 740e87225..c9d3700f9 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/mhs_metop-c.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/mhs_metop-c.yaml @@ -21,7 +21,7 @@ obs operator: EndianType: little_endian CoefficientPath: '{{crtm_coeff_dir}}/' linear obs operator: - Absorbers: [H2O,O3,CO2] + Absorbers: [H2O,O3] Clouds: [Water] Surfaces: [Water_Temperature] diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/mhs_n19.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/mhs_n19.yaml index 3b36ba9c7..3eb0c79fb 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/mhs_n19.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/mhs_n19.yaml @@ -21,7 +21,7 @@ obs operator: EndianType: little_endian CoefficientPath: '{{crtm_coeff_dir}}/' linear obs operator: - Absorbers: [H2O,O3,CO2] + Absorbers: [H2O,O3] Clouds: [Water] Surfaces: [Water_Temperature] diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/omi_aura.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/omi_aura.yaml index 3a591c74e..f538bb067 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/omi_aura.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/omi_aura.yaml @@ -42,20 +42,20 @@ obs filters: action: name: reject # Reject rows 25+ (somewhat stringent but thats what we do in GEOS) -- filter: Bounds Check - filter variables: - - name: ozoneTotal - test variables: - - name: MetaData/sensorScanPosition - minvalue: 3 - maxvalue: 24 - action: - name: reject +#- filter: Bounds Check +# filter variables: +# - name: ozoneTotal +# test variables: +# - name: MetaData/sensorScanPosition +# minvalue: 3 +# maxvalue: 24 +# action: +# name: reject # Gross check -- filter: Background Check - filter variables: - - name: ozoneTotal - threshold: 5.0 - action: - name: reject +#- filter: Background Check +# filter variables: +# - name: ozoneTotal +# threshold: 5.0 +# action: +# name: reject diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/ompsnm_npp.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/ompsnm_npp.yaml index 17831a00c..1d295cb0c 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/ompsnm_npp.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/ompsnm_npp.yaml @@ -41,9 +41,9 @@ obs filters: action: name: reject # Gross check -- filter: Background Check - filter variables: - - name: ozoneTotal - threshold: 5.0 - action: - name: reject +#- filter: Background Check +# filter variables: +# - name: ozoneTotal +# threshold: 5.0 +# action: +# name: reject diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/pibal.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/pibal.yaml index 61e6c1b21..bbb8084c3 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/pibal.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/pibal.yaml @@ -33,8 +33,8 @@ obs operator: interpolation method backup: log-linear # Hofx scaling - hofx scaling field: SurfaceWindScalingCombined - hofx scaling field group: DerivedVariables +# hofx scaling field: SurfaceWindScalingCombined +# hofx scaling field group: DerivedVariables obs pre filters: diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/satwind.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/satwind.yaml index 860df666f..06cbd7573 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/satwind.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/satwind.yaml @@ -13,8 +13,8 @@ obs space: obs operator: name: VertInterp observation alias file: '{{experiment_root}}/{{experiment_id}}/configuration/jedi/interfaces/{{model_component}}/observations/obsop_name_map.yaml' - hofx scaling field: SurfaceWindScalingPressure - hofx scaling field group: DerivedVariables +# hofx scaling field: SurfaceWindScalingPressure +# hofx scaling field group: DerivedVariables obs prior filters: diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/scatwind.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/scatwind.yaml index e44256e8d..3c4c9655e 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/scatwind.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/scatwind.yaml @@ -20,8 +20,8 @@ obs operator: observation vertical coordinate group: DerivedVariables observation vertical coordinate: adjustedHeight interpolation method: linear - hofx scaling field: SurfaceWindScalingHeight - hofx scaling field group: DerivedVariables +# hofx scaling field: SurfaceWindScalingHeight +# hofx scaling field group: DerivedVariables obs prior filters: diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/sfc.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/sfc.yaml index f5dbd5a39..08f5b2677 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/sfc.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/sfc.yaml @@ -25,8 +25,8 @@ obs operator: observation vertical coordinate group: DerivedVariables observation vertical coordinate: adjustedHeight interpolation method: linear - hofx scaling field: SurfaceWindScalingHeight - hofx scaling field group: DerivedVariables +# hofx scaling field: SurfaceWindScalingHeight +# hofx scaling field group: DerivedVariables # Temperatures use vertical interpolation - name: VertInterp @@ -64,8 +64,8 @@ linear obs operator: observation vertical coordinate group: DerivedVariables observation vertical coordinate: adjustedHeight interpolation method: linear - hofx scaling field: SurfaceWindScalingHeight - hofx scaling field group: DerivedVariables +# hofx scaling field: SurfaceWindScalingHeight +# hofx scaling field group: DerivedVariables # Temperatures use vertical interpolation - name: VertInterp diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/sfcship.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/sfcship.yaml index 040ae240c..72ca65482 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/sfcship.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/sfcship.yaml @@ -24,8 +24,8 @@ obs operator: observation vertical coordinate group: DerivedVariables observation vertical coordinate: adjustedHeight interpolation method: linear - hofx scaling field: SurfaceWindScalingHeight - hofx scaling field group: DerivedVariables +# hofx scaling field: SurfaceWindScalingHeight +# hofx scaling field group: DerivedVariables - name: VertInterp observation alias file: '{{experiment_root}}/{{experiment_id}}/configuration/jedi/interfaces/{{model_component}}/observations/obsop_name_map.yaml' @@ -60,8 +60,8 @@ linear obs operator: observation vertical coordinate group: DerivedVariables observation vertical coordinate: adjustedHeight interpolation method: linear - hofx scaling field: SurfaceWindScalingHeight - hofx scaling field group: DerivedVariables +# hofx scaling field: SurfaceWindScalingHeight +# hofx scaling field group: DerivedVariables - name: VertInterp observation alias file: '{{experiment_root}}/{{experiment_id}}/configuration/jedi/interfaces/{{model_component}}/observations/obsop_name_map.yaml' diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/sondes.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/sondes.yaml index 55972b868..0524cfa6e 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/sondes.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/sondes.yaml @@ -52,8 +52,8 @@ linear obs operator: - name: windNorthward # Hofx scaling - hofx scaling field: SurfaceWindScalingPressure - hofx scaling field group: DerivedVariables +# hofx scaling field: SurfaceWindScalingPressure +# hofx scaling field group: DerivedVariables - name: VertInterp variables: diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/ssmis_f17.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/ssmis_f17.yaml index 94f973562..bad8e3229 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/ssmis_f17.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/observations/ssmis_f17.yaml @@ -2,7 +2,7 @@ name: CRTM Absorbers: [H2O,O3,CO2] linear obs operator: - Absorbers: [H2O,O3,CO2] + Absorbers: [H2O,O3] Surfaces: [Water_Temperature] obs options: Sensor_ID: &Sensor_ID ssmis_f17 @@ -53,6 +53,17 @@ order: 2 - name: scan_angle var_name: sensorScanPosition + covariance: + minimal required obs number: 20 + variance range: [1.0e-6, 10.0] + step size: 1.0e-4 + largest analysis variance: 10000.0 + prior: + input file: '{{cycle_dir}}/ssmis_f17.{{background_time}}.satbias.nc4' + inflation: + ratio: 1.1 + ratio for small dataset: 2.0 + output file: '{{cycle_dir}}/ssmis_f17.{{window_begin}}.satbias.nc4' obs prior filters: # Step 1: Initial Observation Error Assignment diff --git a/src/swell/configuration/jedi/interfaces/geos_atmosphere/task_questions.yaml b/src/swell/configuration/jedi/interfaces/geos_atmosphere/task_questions.yaml index 09edbc304..e9d7b0019 100644 --- a/src/swell/configuration/jedi/interfaces/geos_atmosphere/task_questions.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_atmosphere/task_questions.yaml @@ -10,7 +10,8 @@ analysis_variables: - ps - qi - ql - - o3 + - o3ppmv + - phis background_error_model: default_value: GSIbec @@ -26,6 +27,12 @@ background_frequency: background_time_offset: default_value: PT9H +cost_type: + default_value: 3D-Var + options: + - 4D-Var + - 4D-En-Var + clean_patterns: default_value: - '*.nc4' @@ -50,6 +57,11 @@ geovals_experiment: geovals_provider: default_value: ncdiag +gsibec_configuration: + default_value: cli_gsibec_configuration + options: + - hyb_gsibec_configuration + gradient_norm_reduction: default_value: 10e-5 @@ -95,9 +107,9 @@ local_ensemble_solver: - GETKF minimizer: - default_value: DRIPCG + default_value: DRPCG options: - - DRIPCG + - DRPCG npx_proc: default_value: 2 diff --git a/src/swell/configuration/jedi/interfaces/geos_ocean/geos_ocean.yaml b/src/swell/configuration/jedi/interfaces/geos_ocean/geos_ocean.yaml index b17cdbe55..16dfc780c 100644 --- a/src/swell/configuration/jedi/interfaces/geos_ocean/geos_ocean.yaml +++ b/src/swell/configuration/jedi/interfaces/geos_ocean/geos_ocean.yaml @@ -3,9 +3,9 @@ total_processors: {{total_processors}} executables: hofx3D: soca_hofx3d.x hofx4D: soca_hofx.x - variational3D: soca_var.x - variational4D: soca_var.x - variational4DEnsVar: soca_var.x + variational3D-Var: soca_var.x + variational4D-Var: soca_var.x + variational4D-Ens-Var: soca_var.x explicit_diffusion: soca_error_covariance_toolbox.x variables: hocn: h diff --git a/src/swell/configuration/jedi/interfaces/geos_ocean/model/cost_type.yaml b/src/swell/configuration/jedi/interfaces/geos_ocean/model/cost_type.yaml new file mode 100644 index 000000000..2a82b73f4 --- /dev/null +++ b/src/swell/configuration/jedi/interfaces/geos_ocean/model/cost_type.yaml @@ -0,0 +1 @@ +'{{cost_type}}' diff --git a/src/swell/configuration/jedi/interfaces/geos_ocean/model/varincrement1.yaml b/src/swell/configuration/jedi/interfaces/geos_ocean/model/varincrement1.yaml new file mode 100644 index 000000000..8c394150e --- /dev/null +++ b/src/swell/configuration/jedi/interfaces/geos_ocean/model/varincrement1.yaml @@ -0,0 +1,7 @@ +write increment: true +increment: + state component: + datadir: ./ + date: '{{window_begin_iso}}' + exp: {{experiment_id}} + type: incr diff --git a/src/swell/configuration/jedi/oops/variational3D.yaml b/src/swell/configuration/jedi/oops/variational3D-Var.yaml similarity index 79% rename from src/swell/configuration/jedi/oops/variational3D.yaml rename to src/swell/configuration/jedi/oops/variational3D-Var.yaml index b8bc0b405..c96b8e551 100644 --- a/src/swell/configuration/jedi/oops/variational3D.yaml +++ b/src/swell/configuration/jedi/oops/variational3D-Var.yaml @@ -1,5 +1,6 @@ cost function: - cost type: 3D-Var + cost type: + TASKFILLcost_type jb evaluation: false time window: begin: '{{window_begin_iso}}' @@ -25,13 +26,7 @@ variational: diagnostics: departures: ombg online diagnostics: - write increment: true - increment: - state component: - datadir: ./ - date: '{{window_begin_iso}}' - exp: {{experiment_id}} - type: incr + TASKFILLvarincrement1 final: diagnostics: departures: oman diff --git a/src/swell/configuration/jedi/oops/variational4D-Ens-Var.yaml b/src/swell/configuration/jedi/oops/variational4D-Ens-Var.yaml new file mode 100644 index 000000000..922ecf942 --- /dev/null +++ b/src/swell/configuration/jedi/oops/variational4D-Ens-Var.yaml @@ -0,0 +1,46 @@ +cost function: + cost type: + TASKFILLcost_type + jb evaluation: false + time window: + begin: '{{window_begin_iso}}' + length: '{{window_length}}' + bound to include: begin + subwindow: PT1H + parallel subwindows: false + geometry: + TASKFILLgeometry + variable change: + variable change name: Analysis2Model + analysis variables: {{analysis_variables}} + background: + states: + TASKFILLbackground4D + background error: + TASKFILLbackground_error + observations: + observers: + SPECIALobservations +variational: + minimizer: + algorithm: {{minimizer}} + iterations: + - geometry: TASKFILLgeometry_inner + gradient norm reduction: '{{gradient_norm_reduction}}' + ninner: '{{number_of_iterations}}' + linear model: + name: Identity + increment variables: {{analysis_variables}} + variable change: Identity + tstep: PT1H + diagnostics: + departures: ombg + online diagnostics: + TASKFILLvar4Dincrement1 +final: + diagnostics: + departures: oman + prints: + frequency: PT3H #TODO: Define this as a default value in suite config +output: + TASKFILLanalysis diff --git a/src/swell/configuration/jedi/oops/variational4D-Var.yaml b/src/swell/configuration/jedi/oops/variational4D-Var.yaml new file mode 100644 index 000000000..2d8d9a9c1 --- /dev/null +++ b/src/swell/configuration/jedi/oops/variational4D-Var.yaml @@ -0,0 +1,46 @@ +cost function: + cost type: + TASKFILLcost_type + jb evaluation: false + time window: + begin: '{{window_begin_iso}}' + length: '{{window_length}}' + bound to include: begin + geometry: + TASKFILLgeometry + model: + TASKFILLpseudo-model + variable change: + variable change name: Analysis2Model + forecast length: {{window_length}} + analysis variables: {{analysis_variables}} + background: + TASKFILLbackground + background error: + TASKFILLbackground_error + observations: + observers: + SPECIALobservations +variational: + minimizer: + algorithm: {{minimizer}} + iterations: + - geometry: TASKFILLgeometry_inner + gradient norm reduction: '{{gradient_norm_reduction}}' + ninner: '{{number_of_iterations}}' + linear model: + name: Identity + increment variables: {{analysis_variables}} + variable change: Identity + tstep: PT1H + diagnostics: + departures: ombg + online diagnostics: + TASKFILLvarincrement1 +final: + diagnostics: + departures: oman + prints: + frequency: PT3H #TODO: Define this as a default value in suite config +output: + TASKFILLanalysis diff --git a/src/swell/deployment/create_experiment.py b/src/swell/deployment/create_experiment.py index d0f96855f..f88ce4547 100644 --- a/src/swell/deployment/create_experiment.py +++ b/src/swell/deployment/create_experiment.py @@ -466,10 +466,10 @@ def prepare_cylc_suite_jinja2(logger, swell_suite_path, exp_suite_path, experime render_dictionary['scheduling'] = {} for slurm_task in slurm_tasks: render_dictionary['scheduling'][slurm_task] = {} - render_dictionary['scheduling'][slurm_task]['execution_time_limit'] = 'PT1H' + render_dictionary['scheduling'][slurm_task]['execution_time_limit'] = 'PT3H' render_dictionary['scheduling'][slurm_task]['account'] = account render_dictionary['scheduling'][slurm_task]['qos'] = qos - render_dictionary['scheduling'][slurm_task]['nodes'] = 1 + render_dictionary['scheduling'][slurm_task]['nodes'] = 9 render_dictionary['scheduling'][slurm_task]['ntasks_per_node'] = 24 render_dictionary['scheduling'][slurm_task]['constraint'] = constraint render_dictionary['scheduling'][slurm_task]['partition'] = partition @@ -483,6 +483,7 @@ def prepare_cylc_suite_jinja2(logger, swell_suite_path, exp_suite_path, experime # nodes render_dictionary['scheduling']['RunJediUfoTestsExecutable']['ntasks_per_node'] = 1 + render_dictionary['scheduling']['EvaObservations']['ntasks_per_node'] = 1 # Render the template # ------------------- diff --git a/src/swell/suites/3dfgat_atmos/eva/jedi_log-geos_atmosphere.yaml b/src/swell/suites/3dfgat_atmos/eva/jedi_log-geos_atmosphere.yaml new file mode 100644 index 000000000..4ba4d12a0 --- /dev/null +++ b/src/swell/suites/3dfgat_atmos/eva/jedi_log-geos_atmosphere.yaml @@ -0,0 +1,64 @@ +datasets: + +- type: JediLog + collection_name: JediLogTest + jedi_log_to_parse: '{{cycle_dir}}/jedi_variational_log.log' + data_to_parse: + convergence: true + +transforms: +- transform: arithmetic + new name: JediLogTest::convergence::${variable}_log + equals: log(JediLogTest::convergence::${variable}) + for: + variable: [residual_norm, norm_reduction] + +graphics: + + plotting_backend: Emcpy + figure_list: + + - figure: + layout: [3,1] + figure size: [12,10] + title: 'Residual Norm and Norm Reduction Plots' + output name: '{{cycle_dir}}/eva/jedi_log/convergence/residual_norm_reduction.png' + plots: + - add_xlabel: 'Total inner iteration number' + add_ylabel: 'Residual norm' + layers: + - type: LinePlot + x: + variable: JediLogTest::convergence::total_iteration + y: + variable: JediLogTest::convergence::residual_norm + color: 'black' + + - add_xlabel: 'Total inner iteration number' + add_ylabel: 'Log(norm reduction)' + layers: + - type: LinePlot + x: + variable: JediLogTest::convergence::total_iteration + y: + variable: JediLogTest::convergence::norm_reduction + color: 'black' + + - add_xlabel: 'Total inner iteration number' + add_ylabel: 'Log(reduction)' + add_legend: + layers: + - type: LinePlot + x: + variable: JediLogTest::convergence::total_iteration + y: + variable: JediLogTest::convergence::residual_norm_log + color: 'red' + label: 'Log(residual norm)' + - type: LinePlot + x: + variable: JediLogTest::convergence::total_iteration + y: + variable: JediLogTest::convergence::norm_reduction_log + color: 'blue' + label: 'Log norm reduction' diff --git a/src/swell/suites/3dfgat_atmos/eva/observations-geos_atmosphere.yaml b/src/swell/suites/3dfgat_atmos/eva/observations-geos_atmosphere.yaml new file mode 100644 index 000000000..9ed40d834 --- /dev/null +++ b/src/swell/suites/3dfgat_atmos/eva/observations-geos_atmosphere.yaml @@ -0,0 +1,1292 @@ +datasets: + +- group: increment + type: LatLon + filename: {{cycle_dir}}/swell-3dfgat_atmos.increment-iter1.20211211_210000z.nc4 + name: experiment_increment + variables: [ps, ua, va, t, q, lat, lon] + +- name: experiment + type: IodaObsSpace + filenames: + - {{obs_path_file}} + channels: &channels {{channels}} + groups: + - name: ObsValue + variables: &variables {{simulated_variables}} + - name: GsiHofXBc + #- name: GsiEffectiveQC + - name: hofx0 + - name: hofx1 + - name: ombg + - name: oman + - name: EffectiveQC0 + - name: EffectiveQC1 + - name: MetaData + +transforms: + +# Generate hofx0 for GSI +- transform: arithmetic + new name: experiment::ObsValueMinusGsiHofXBc::${variable} + equals: experiment::ObsValue::${variable}-experiment::GsiHofXBc::${variable} + for: + variable: *variables + +# Generate hofx0 for JEDI +- transform: arithmetic + new name: experiment::ObsValueMinusHofx0::${variable} + equals: experiment::ObsValue::${variable}-experiment::hofx0::${variable} + for: + variable: *variables + +# Generate hofx difference +- transform: arithmetic + new name: experiment::Hofx0MinusGsiHofXBc::${variable} + equals: experiment::hofx0::${variable}-experiment::GsiHofXBc::${variable} + for: + variable: *variables + +# Generate hofx that passed QC for JEDI +- transform: accept where + new name: experiment::hofx0PassedQc::${variable} + starting field: experiment::hofx0::${variable} + where: + - experiment::EffectiveQC0::${variable} == 0 + for: + variable: *variables + +# Generate GSI hofx that passed JEDI QC +- transform: accept where + new name: experiment::GsiHofXBcPassedQc::${variable} + starting field: experiment::GsiHofXBc::${variable} + where: + - experiment::EffectiveQC0::${variable} == 0 + for: + variable: *variables + +# Generate hofx0 that passed QC for JEDI +- transform: accept where + new name: experiment::ObsValueMinushofx0PassedQc::${variable} + starting field: experiment::ObsValueMinusHofx0::${variable} + where: + - experiment::EffectiveQC0::${variable} == 0 + for: + variable: *variables + +# Generate hofx0 that passed QC for GSI +- transform: accept where + new name: experiment::ObsValueMinusGsiHofXBcPassedQc::${variable} + starting field: experiment::ObsValueMinusGsiHofXBc::${variable} + where: + - experiment::EffectiveQC0::${variable} == 0 + for: + variable: *variables + +# Generate ombg that passed QC for JEDI +- transform: accept where + new name: experiment::ombgPassedQc::${variable} + starting field: experiment::ombg::${variable} + where: + - experiment::EffectiveQC0::${variable} == 0 + for: + variable: *variables + +# Generate oman that passed QC for JEDI +- transform: accept where + new name: experiment::omanPassedQc::${variable} + starting field: experiment::oman::${variable} + where: + - experiment::EffectiveQC1::${variable} == 0 + for: + variable: *variables + +# Generate obs contribution to analysis (OmA*OmA)-(OmB*OmB) +- transform: arithmetic + new name: experiment::ResidualRMSdiff::${variable} + equals: (experiment::omanPassedQc::${variable})*(experiment::omanPassedQc::${variable})-(experiment::ombgPassedQc::${variable})*(experiment::ombgPassedQc::${variable}) + for: + variable: *variables + +graphics: + + plotting_backend: Emcpy + figure_list: + + # Correlation scatter plots + # ------------------------- + + # JEDI h(x) vs Observations + - batch figure: + variables: *variables + channels: *channels + figure: + layout: [1,1] + title: 'Observations vs. JEDI h(x) | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/correlation_scatter/${variable}${channel}/jedi_hofx0_vs_obs_{{instrument}}_${variable}${channel}.png' + plots: + - add_xlabel: 'Observation Value' + add_ylabel: 'JEDI h(x)' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::ObsValue::${variable} + y: + variable: experiment::hofx0::${variable} + channel: ${channel} + markersize: 5 + color: 'black' + label: 'JEDI h(x) versus obs (all obs)' + - type: Scatter + x: + variable: experiment::ObsValue::${variable} + y: + variable: experiment::hofx0PassedQc::${variable} + channel: ${channel} + markersize: 5 + color: 'red' + label: 'JEDI h(x) versus obs (passed QC in JEDI)' + + # GSI h(x) vs Observations + - batch figure: + variables: *variables + channels: *channels + figure: + layout: [1,1] + title: 'Observations vs. GSI h(x) | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/correlation_scatter/${variable}${channel}/gsi_hofx0_vs_obs_{{instrument}}_${variable}${channel}.png' + plots: + - add_xlabel: 'Observation Value' + add_ylabel: 'GSI h(x)' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::ObsValue::${variable} + y: + variable: experiment::GsiHofXBc::${variable} + channel: ${channel} + markersize: 5 + color: 'black' + label: 'GSI h(x) versus obs (all obs)' + - type: Scatter + x: + variable: experiment::ObsValue::${variable} + y: + variable: experiment::GsiHofXBcPassedQc::${variable} + channel: ${channel} + markersize: 5 + color: 'red' + label: 'GSI h(x) versus obs (passed QC in JEDI)' + + # JEDI h(x) vs GSI h(x) + - batch figure: + variables: *variables + channels: *channels + figure: + layout: [1,1] + title: 'JEDI h(x) vs. GSI h(x) | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/correlation_scatter/${variable}${channel}/gsi_hofx_vs_jedi0_hofx_{{instrument}}_${variable}${channel}.png' + plots: + - add_xlabel: 'GSI h(x)' + add_ylabel: 'JEDI h(x)' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::GsiHofXBc::${variable} + y: + variable: experiment::hofx0::${variable} + channel: ${channel} + markersize: 5 + color: 'black' + label: 'JEDI h(x) versus GSI h(x)' + - type: Scatter + x: + variable: experiment::GsiHofXBcPassedQc::${variable} + y: + variable: experiment::hofx0PassedQc::${variable} + channel: ${channel} + markersize: 5 + color: 'red' + label: 'JEDI h(x) versus GSI h(x) (passed QC in JEDI)' + + # JEDI hofx0 vs GSI hofx0 + - batch figure: + variables: *variables + channels: *channels + figure: + layout: [1,1] + title: 'JEDI hofx0 vs. GSI hofx0 | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/correlation_scatter/${variable}${channel}/gsi_hofx0_vs_jedi_hofx0_{{instrument}}_${variable}${channel}.png' + plots: + - add_xlabel: 'GSI observation minus h(x)' + add_ylabel: 'JEDI observation minus h(x)' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::ObsValueMinusGsiHofXBc::${variable} + y: + variable: experiment::ObsValueMinusHofx0::${variable} + channel: ${channel} + markersize: 5 + color: 'black' + label: 'GSI hofx0 vs JEDI hofx0 (all obs)' + - type: Scatter + x: + variable: experiment::ObsValueMinusGsiHofXBcPassedQc::${variable} + y: + variable: experiment::ObsValueMinushofx0PassedQc::${variable} + channel: ${channel} + markersize: 5 + color: 'red' + label: 'GSI hofx0 vs JEDI hofx0 (passed QC in JEDI)' + + # JEDI oma vs omb + - batch figure: + variables: *variables + channels: *channels + figure: + layout: [1,1] + title: 'OmA vs. OmB | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/correlation_scatter/${variable}${channel}/jedi_oma_vs_omb_{{instrument}}_${variable}${channel}.png' + plots: + - add_xlabel: 'OmA' + add_ylabel: 'OmB' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::oman::${variable} + y: + variable: experiment::ombg::${variable} + channel: ${channel} + markersize: 5 + color: 'black' + label: 'OmA versus OmB (all residuals)' + - type: Scatter + x: + variable: experiment::omanPassedQc::${variable} + y: + variable: experiment::ombgPassedQc::${variable} + channel: ${channel} + markersize: 5 + color: 'red' + label: 'OmA versus OmB (passed QC)' + +# Map plots# --------- + + # Observations + - batch figure: + variables: *variables + channels: *channels + dynamic options: + - type: vminvmaxcmap + channel: ${channel} + data variable: experiment::ObsValue::${variable} + figure: + figure size: [20,10] + layout: [1,1] + title: 'Observations | {{instrument_title}} | Obs Value' + output name: '{{cycle_dir}}/eva/{{instrument}}/map_plots/${variable}${channel}/observations_{{instrument}}_${variable}${channel}.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: ObsValue + add_grid: + layers: + - type: MapScatter + longitude: + variable: experiment::MetaData::longitude + latitude: + variable: experiment::MetaData::latitude + data: + variable: experiment::ObsValue::${variable} + channel: ${channel} + markersize: 2 + label: ObsValue + colorbar: true + cmap: ${dynamic_cmap} + vmin: ${dynamic_vmin} + vmax: ${dynamic_vmax} + + # hofx0 jedi + - batch figure: + variables: *variables + channels: *channels + dynamic options: + - type: vminvmaxcmap + channel: ${channel} + data variable: experiment::ObsValueMinusHofx0::${variable} + figure: + figure size: [20,10] + layout: [1,1] + title: 'JEDI hofx0 | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/map_plots/${variable}${channel}/hofx0_jedi_{{instrument}}_${variable}${channel}.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: '${variable}' + add_grid: + layers: + - type: MapScatter + longitude: + variable: experiment::MetaData::longitude + latitude: + variable: experiment::MetaData::latitude + data: + variable: experiment::ObsValueMinusHofx0::${variable} + channel: ${channel} + markersize: 2 + label: '${variable}' + colorbar: true + cmap: ${dynamic_cmap} + vmin: ${dynamic_vmin} + vmax: ${dynamic_vmax} + + # hofx0 gsi + - batch figure: + variables: *variables + channels: *channels + dynamic options: + - type: vminvmaxcmap + channel: ${channel} + data variable: experiment::ObsValueMinusGsiHofXBc::${variable} + figure: + figure size: [20,10] + layout: [1,1] + title: 'GSI hofx0 | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/map_plots/${variable}${channel}/hofx0_gsi_{{instrument}}_${variable}${channel}.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: '${variable}' + add_grid: + layers: + - type: MapScatter + longitude: + variable: experiment::MetaData::longitude + latitude: + variable: experiment::MetaData::latitude + data: + variable: experiment::ObsValueMinusGsiHofXBc::${variable} + channel: ${channel} + markersize: 2 + label: '${variable}' + colorbar: true + cmap: ${dynamic_cmap} + vmin: ${dynamic_vmin} + vmax: ${dynamic_vmax} + + # hofx difference + - batch figure: + variables: *variables + channels: *channels + dynamic options: + - type: vminvmaxcmap + channel: ${channel} + data variable: experiment::Hofx0MinusGsiHofXBc::${variable} + figure: + figure size: [20,10] + layout: [1,1] + title: 'Hofx0 Difference | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/map_plots/${variable}${channel}/hofx0_difference_{{instrument}}_${variable}${channel}.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: '${variable}' + add_grid: + layers: + - type: MapScatter + longitude: + variable: experiment::MetaData::longitude + latitude: + variable: experiment::MetaData::latitude + data: + variable: experiment::Hofx0MinusGsiHofXBc::${variable} + channel: ${channel} + markersize: 2 + label: '${variable}' + colorbar: true + cmap: ${dynamic_cmap} + vmin: ${dynamic_vmin} + vmax: ${dynamic_vmax} + + + # RMS(oma)-RMS(omb) difference + - batch figure: + variables: *variables + channels: *channels + dynamic options: + - type: vminvmaxcmap + channel: ${channel} + data variable: experiment::ResidualRMSdiff::${variable} + figure: + figure size: [20,10] + layout: [1,1] + title: 'RMS Residual Difference | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/map_plots/${variable}${channel}/rmsres_difference_{{instrument}}_${variable}${channel}.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: '${variable}' + add_grid: + layers: + - type: MapScatter + longitude: + variable: experiment::MetaData::longitude + latitude: + variable: experiment::MetaData::latitude + data: + variable: experiment::ResidualRMSdiff::${variable} + channel: ${channel} + markersize: 2 + label: '${variable}' + colorbar: true + cmap: ${dynamic_cmap} + vmin: ${dynamic_vmin} + vmax: ${dynamic_vmax} +# Histogram plots# --------------- + + # hofx0 vs hofx0 + - batch figure: + variables: *variables + channels: *channels + dynamic options: + - type: histogram_bins + channel: ${channel} + number of bins rule: sturges + data variable: experiment::ObsValueMinusHofx0::${variable} + figure: + layout: [1,1] + title: 'JEDI hofx0 vs. GSI hofx0 | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/histograms/${variable}${channel}/gsi_hofx0_vs_jedi_hofx0_{{instrument}}_${variable}${channel}.png' + plots: + - add_xlabel: 'Observation minus h(x)' + add_ylabel: 'Count' + add_legend: + loc: 'upper left' + layers: + - type: Histogram + data: + variable: experiment::ObsValueMinusGsiHofXBc::${variable} + channel: ${channel} + color: 'blue' + label: 'GSI hofx0 (all obs)' + bins: ${dynamic_bins} + alpha: 0.5 + - type: Histogram + data: + variable: experiment::ObsValueMinusHofx0::${variable} + channel: ${channel} + color: 'red' + label: 'JEDI hofx0 (all obs)' + bins: ${dynamic_bins} + alpha: 0.5 + + # JEDI omb vs oma + - batch figure: + variables: *variables + dynamic options: + - type: histogram_bins + data variable: experiment::omanPassedQc::${variable} + number of bins rule: 'rice' + figure: + layout: [1,1] + title: 'OmB vs. OmA | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/histograms/${variable}/ombg_oman_{{instrument}}_${variable}.png' + plots: + - add_xlabel: 'Difference' + add_ylabel: 'Count' + set_xlim: [-3, 3] + add_legend: + loc: 'upper left' + statistics: + fields: + - field_name: experiment::ombgPassedQc::${variable} + xloc: 0.5 + yloc: -0.10 + kwargs: + color: 'black' + fontsize: 8 + fontfamily: monospace + - field_name: experiment::omanPassedQc::${variable} + xloc: 0.5 + yloc: -0.13 + kwargs: + color: 'red' + fontsize: 8 + fontfamily: monospace + statistics_variables: + - n + - min + - mean + - max + - std + layers: + - type: Histogram + data: + variable: experiment::ombgPassedQc::${variable} + color: 'red' + label: 'observations minus background ' + bins: ${dynamic_bins} + alpha: 0.5 + density: true + - type: Histogram + data: + variable: experiment::omanPassedQc::${variable} + color: 'blue' + label: 'observations minus analysis' + bins: ${dynamic_bins} + alpha: 0.5 + density: true + + #map plot for surface pressure increment + - batch figure: + variables: [ps] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Surface Pressure Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::ps + label: PS increment + colorbar: true + cmap: 'bwr' + vmin: -100 + vmax: 100 + #map plot for temperature increment (lowest level) + - batch figure: + variables: [t] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_1000.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Temperature Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::t + slices: '[71,...]' + label: T increment (1000 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for temperature increment + - batch figure: + variables: [t] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_850.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Temperature Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::t + slices: '[62,...]' + label: T increment (850 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for temperature increment + - batch figure: + variables: [t] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_500.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Temperature Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::t + slices: '[49,...]' + label: T increment (500 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for temperature increment + - batch figure: + variables: [t] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_200.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Temperature Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::t + slices: '[42,...]' + label: T increment (200 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for temperature increment + - batch figure: + variables: [t] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_10.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Temperature Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::t + slices: '[24,...]' + label: T increment (10 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for temperature increment + - batch figure: + variables: [t] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_1.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Temperature Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::t + slices: '[14,...]' + label: T increment (1 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + + #map plot for Zonal Wind increment (lowest level) + - batch figure: + variables: [ua] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_1000.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Zonal Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::ua + slices: '[71,...]' + label: U increment (1000 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Zonal Wind increment + - batch figure: + variables: [ua] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_850.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Zonal Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::ua + slices: '[62,...]' + label: U increment (850 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Zonal Wind increment + - batch figure: + variables: [ua] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_500.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Zonal Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::ua + slices: '[49,...]' + label: U increment (500 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Zonal Wind increment + - batch figure: + variables: [ua] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_200.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Zonal Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::ua + slices: '[42,...]' + label: U increment (200 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Zonal Wind increment + - batch figure: + variables: [ua] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_10.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Zonal Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::ua + slices: '[24,...]' + label: U increment (10 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Zonal Wind increment + - batch figure: + variables: [ua] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_1.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Zonal Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::ua + slices: '[14,...]' + label: U increment (1 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + + #map plot for Meridional Wind increment (lowest level) + - batch figure: + variables: [va] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_1000.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Meridional Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::va + slices: '[71,...]' + label: V increment (1000 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Meridional Wind increment + - batch figure: + variables: [va] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_850.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Meridional Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::va + slices: '[62,...]' + label: V increment (850 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Meridional Wind increment + - batch figure: + variables: [va] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_500.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Meridional Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::va + slices: '[49,...]' + label: V increment (500 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Meridional Wind increment + - batch figure: + variables: [va] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_200.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Meridional Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::va + slices: '[42,...]' + label: V increment (200 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Meridional Wind increment + - batch figure: + variables: [va] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_10.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Meridional Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::va + slices: '[24,...]' + label: V increment (10 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Meridional Wind increment + - batch figure: + variables: [va] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_1.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Meridional Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::va + slices: '[14,...]' + label: V increment (1 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + + #map plot for Specific Humidity increment (lowest level) + - batch figure: + variables: [q] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_1000.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Specific Humidity Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::q + slices: '[71,...]' + label: Q increment (1000 hPa) + colorbar: true + cmap: 'bwr' + vmin: -0.001 + vmax: 0.001 + #map plot for Specific Humidity increment + - batch figure: + variables: [q] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_850.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Specific Humidity Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::q + slices: '[62,...]' + label: Q increment (850 hPa) + colorbar: true + cmap: 'bwr' + vmin: -0.001 + vmax: 0.001 + #map plot for Specific Humidity increment + - batch figure: + variables: [q] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_500.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Specific Humidity Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::q + slices: '[49,...]' + label: Q increment (500 hPa) + colorbar: true + cmap: 'bwr' + vmin: -0.001 + vmax: 0.001 + #map plot for Specific Humidity increment + - batch figure: + variables: [q] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_200.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Specific Humidity Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::q + slices: '[42,...]' + label: Q increment (200 hPa) + colorbar: true + cmap: 'bwr' + vmin: -0.001 + vmax: 0.001 + #map plot for Specific Humidity increment + - batch figure: + variables: [q] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_10.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Specific Humidity Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::q + slices: '[24,...]' + label: Q increment (10 hPa) + colorbar: true + cmap: 'bwr' + vmin: -0.001 + vmax: 0.001 diff --git a/src/swell/suites/3dfgat_atmos/flow.cylc b/src/swell/suites/3dfgat_atmos/flow.cylc new file mode 100644 index 000000000..7a245bc1f --- /dev/null +++ b/src/swell/suites/3dfgat_atmos/flow.cylc @@ -0,0 +1,191 @@ +# (C) Copyright 2021- United States Government as represented by the Administrator of the +# National Aeronautics and Space Administration. All Rights Reserved. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + +# -------------------------------------------------------------------------------------------------- + +# Cylc suite for executing JEDI-based non-cycling variational data assimilation + +# -------------------------------------------------------------------------------------------------- + +[scheduler] + UTC mode = True + allow implicit tasks = False + +# -------------------------------------------------------------------------------------------------- + +[scheduling] + + initial cycle point = {{start_cycle_point}} + final cycle point = {{final_cycle_point}} + runahead limit = {{runahead_limit}} + + [[graph]] + R1 = """ + # Triggers for non cycle time dependent tasks + # ------------------------------------------- + # Clone JEDI source code + CloneJedi + + # Build JEDI source code by linking + CloneJedi => BuildJediByLinking? + + # If not able to link to build create the build + BuildJediByLinking:fail? => BuildJedi + + {% for model_component in model_components %} + # Stage JEDI static files + CloneJedi => StageJedi-{{model_component}} + + # Clone geos ana for generating observing system records + CloneGeosMksi-{{model_component}} + {% endfor %} + """ + + {% for cycle_time in cycle_times %} + {{cycle_time.cycle_time}} = """ + {% for model_component in model_components %} + {% if cycle_time[model_component] %} + + # Task triggers for: {{model_component}} + # ------------------ + # Generate satellite channel records + CloneGeosMksi-{{model_component}}[^] => GenerateObservingSystemRecords-{{model_component}} + + # Get background + GetBackground-{{model_component}} + + # Get observations + GetObservations-{{model_component}} + + # Perform staging that is cycle dependent + StageJediCycle-{{model_component}} + + # Run Jedi variational executable + BuildJediByLinking[^]? | BuildJedi[^] => RunJediVariationalExecutable-{{model_component}} + StageJedi-{{model_component}}[^] => RunJediVariationalExecutable-{{model_component}} + StageJediCycle-{{model_component}} => RunJediVariationalExecutable-{{model_component}} + GetBackground-{{model_component}} => RunJediVariationalExecutable-{{model_component}} + GetObservations-{{model_component}} => RunJediVariationalExecutable-{{model_component}} + GenerateObservingSystemRecords-{{model_component}} => RunJediVariationalExecutable-{{model_component}} + + # EvaObservations + RunJediVariationalExecutable-{{model_component}} => EvaObservations-{{model_component}} + + # EvaJediLog + RunJediVariationalExecutable-{{model_component}} => EvaJediLog-{{model_component}} + + # Save observations + RunJediVariationalExecutable-{{model_component}} => SaveObsDiags-{{model_component}} + + # Clean up large files + EvaObservations-{{model_component}} & SaveObsDiags-{{model_component}} => + CleanCycle-{{model_component}} + + {% endif %} + {% endfor %} + """ + {% endfor %} + +# -------------------------------------------------------------------------------------------------- + +[runtime] + + # Task defaults + # ------------- + [[root]] + pre-script = "source $CYLC_SUITE_DEF_PATH/modules" + + [[[environment]]] + datetime = $CYLC_TASK_CYCLE_POINT + config = $CYLC_SUITE_DEF_PATH/experiment.yaml + + # Tasks + # ----- + [[CloneJedi]] + script = "swell task CloneJedi $config" + + [[BuildJediByLinking]] + script = "swell task BuildJediByLinking $config" + + [[BuildJedi]] + script = "swell task BuildJedi $config" + platform = {{platform}} + execution time limit = {{scheduling["BuildJedi"]["execution_time_limit"]}} + [[[directives]]] + --account = {{scheduling["BuildJedi"]["account"]}} + --qos = {{scheduling["BuildJedi"]["qos"]}} + --job-name = BuildJedi + --nodes={{scheduling["BuildJedi"]["nodes"]}} + --ntasks-per-node={{scheduling["BuildJedi"]["ntasks_per_node"]}} + --constraint={{scheduling["BuildJedi"]["constraint"]}} + {% if scheduling["BuildJedi"]["partition"] %} + --partition={{scheduling["BuildJedi"]["partition"]}} + {% endif %} + + {% for model_component in model_components %} + + [[CloneGeosMksi-{{model_component}}]] + script = "swell task CloneGeosMksi $config -m {{model_component}}" + + [[GenerateObservingSystemRecords-{{model_component}}]] + script = "swell task GenerateObservingSystemRecords $config -d $datetime -m {{model_component}}" + + [[StageJedi-{{model_component}}]] + script = "swell task StageJedi $config -m {{model_component}}" + + [[StageJediCycle-{{model_component}}]] + script = "swell task StageJedi $config -d $datetime -m {{model_component}}" + + [[ GetBackground-{{model_component}} ]] + script = "swell task GetBackground $config -d $datetime -m {{model_component}}" + + [[GetObservations-{{model_component}}]] + script = "swell task GetObservations $config -d $datetime -m {{model_component}}" + + [[RunJediVariationalExecutable-{{model_component}}]] + script = "swell task RunJediVariationalExecutable $config -d $datetime -m {{model_component}}" + + [[RunJediVariationalExecutable-{{model_component}}]] + script = "swell task RunJediVariationalExecutable $config -d $datetime -m {{model_component}}" + platform = {{platform}} + execution time limit = {{scheduling["RunJediVariationalExecutable"]["execution_time_limit"]}} + [[[directives]]] + --account = {{scheduling["RunJediVariationalExecutable"]["account"]}} + --qos = {{scheduling["RunJediVariationalExecutable"]["qos"]}} + --job-name = RunJediVariationalExecutable + --nodes={{scheduling["RunJediVariationalExecutable"]["nodes"]}} + --ntasks-per-node={{scheduling["RunJediVariationalExecutable"]["ntasks_per_node"]}} + --constraint={{scheduling["RunJediVariationalExecutable"]["constraint"]}} + {% if scheduling["RunJediVariationalExecutable"]["partition"] %} + --partition={{scheduling["RunJediVariationalExecutable"]["partition"]}} + {% endif %} + + [[EvaJediLog-{{model_component}}]] + script = "swell task EvaJediLog $config -d $datetime -m {{model_component}}" + + [[EvaObservations-{{model_component}}]] + script = "swell task EvaObservations $config -d $datetime -m {{model_component}}" + platform = {{platform}} + execution time limit = {{scheduling["EvaObservations"]["execution_time_limit"]}} + [[[directives]]] + --account = {{scheduling["EvaObservations"]["account"]}} + --qos = {{scheduling["EvaObservations"]["qos"]}} + --job-name = EvaObservations + --nodes={{scheduling["EvaObservations"]["nodes"]}} + --ntasks-per-node={{scheduling["EvaObservations"]["ntasks_per_node"]}} + --constraint={{scheduling["EvaObservations"]["constraint"]}} + {% if scheduling["EvaObservations"]["partition"] %} + --partition={{scheduling["EvaObservations"]["partition"]}} + {% endif %} + + [[SaveObsDiags-{{model_component}}]] + script = "swell task SaveObsDiags $config -d $datetime -m {{model_component}}" + + [[CleanCycle-{{model_component}}]] + script = "swell task CleanCycle $config -d $datetime -m {{model_component}}" + {% endfor %} + +# -------------------------------------------------------------------------------------------------- diff --git a/src/swell/suites/3dfgat_atmos/suite_questions.yaml b/src/swell/suites/3dfgat_atmos/suite_questions.yaml new file mode 100644 index 000000000..71c889f68 --- /dev/null +++ b/src/swell/suites/3dfgat_atmos/suite_questions.yaml @@ -0,0 +1,32 @@ +start_cycle_point: + ask_question: True + default_value: '2021-12-12T00:00:00Z' + prompt: What is the time of the first cycle (middle of the window)? + type: iso-datetime + +final_cycle_point: + ask_question: True + default_value: '2021-12-12T06:00:00Z' + prompt: What is the time of the final cycle (middle of the window)? + type: iso-datetime + +runahead_limit: + ask_question: True + default_value: 'P4' + prompt: Since this suite is non-cycling choose how many hours the workflow can run ahead? + type: string + +r2d2_local_path: + ask_question: False + default_value: defer_to_platform + prompt: Enter the path where R2D2 will store experiment output + type: string + +cycle_times: + ask_question: True + default_value: defer_to_model + options: defer_to_model + models: + - all + prompt: Enter the cycle times for this model. + type: string-check-list diff --git a/src/swell/suites/3dvar_atmos/eva/jedi_log-geos_atmosphere.yaml b/src/swell/suites/3dvar_atmos/eva/jedi_log-geos_atmosphere.yaml new file mode 100644 index 000000000..4ba4d12a0 --- /dev/null +++ b/src/swell/suites/3dvar_atmos/eva/jedi_log-geos_atmosphere.yaml @@ -0,0 +1,64 @@ +datasets: + +- type: JediLog + collection_name: JediLogTest + jedi_log_to_parse: '{{cycle_dir}}/jedi_variational_log.log' + data_to_parse: + convergence: true + +transforms: +- transform: arithmetic + new name: JediLogTest::convergence::${variable}_log + equals: log(JediLogTest::convergence::${variable}) + for: + variable: [residual_norm, norm_reduction] + +graphics: + + plotting_backend: Emcpy + figure_list: + + - figure: + layout: [3,1] + figure size: [12,10] + title: 'Residual Norm and Norm Reduction Plots' + output name: '{{cycle_dir}}/eva/jedi_log/convergence/residual_norm_reduction.png' + plots: + - add_xlabel: 'Total inner iteration number' + add_ylabel: 'Residual norm' + layers: + - type: LinePlot + x: + variable: JediLogTest::convergence::total_iteration + y: + variable: JediLogTest::convergence::residual_norm + color: 'black' + + - add_xlabel: 'Total inner iteration number' + add_ylabel: 'Log(norm reduction)' + layers: + - type: LinePlot + x: + variable: JediLogTest::convergence::total_iteration + y: + variable: JediLogTest::convergence::norm_reduction + color: 'black' + + - add_xlabel: 'Total inner iteration number' + add_ylabel: 'Log(reduction)' + add_legend: + layers: + - type: LinePlot + x: + variable: JediLogTest::convergence::total_iteration + y: + variable: JediLogTest::convergence::residual_norm_log + color: 'red' + label: 'Log(residual norm)' + - type: LinePlot + x: + variable: JediLogTest::convergence::total_iteration + y: + variable: JediLogTest::convergence::norm_reduction_log + color: 'blue' + label: 'Log norm reduction' diff --git a/src/swell/suites/3dvar_atmos/eva/observations-geos_atmosphere.yaml b/src/swell/suites/3dvar_atmos/eva/observations-geos_atmosphere.yaml new file mode 100644 index 000000000..a2d065559 --- /dev/null +++ b/src/swell/suites/3dvar_atmos/eva/observations-geos_atmosphere.yaml @@ -0,0 +1,1292 @@ +datasets: + +- group: increment + type: LatLon + filename: {{cycle_dir}}/swell-3dvar_atmos.increment-iter1.20211212_000000z.nc4 + name: experiment_increment + variables: [ps, ua, va, t, q, lat, lon] + +- name: experiment + type: IodaObsSpace + filenames: + - {{obs_path_file}} + channels: &channels {{channels}} + groups: + - name: ObsValue + variables: &variables {{simulated_variables}} + - name: GsiHofXBc + #- name: GsiEffectiveQC + - name: hofx0 + - name: hofx1 + - name: ombg + - name: oman + - name: EffectiveQC0 + - name: EffectiveQC1 + - name: MetaData + +transforms: + +# Generate hofx0 for GSI +- transform: arithmetic + new name: experiment::ObsValueMinusGsiHofXBc::${variable} + equals: experiment::ObsValue::${variable}-experiment::GsiHofXBc::${variable} + for: + variable: *variables + +# Generate hofx0 for JEDI +- transform: arithmetic + new name: experiment::ObsValueMinusHofx0::${variable} + equals: experiment::ObsValue::${variable}-experiment::hofx0::${variable} + for: + variable: *variables + +# Generate hofx difference +- transform: arithmetic + new name: experiment::Hofx0MinusGsiHofXBc::${variable} + equals: experiment::hofx0::${variable}-experiment::GsiHofXBc::${variable} + for: + variable: *variables + +# Generate hofx that passed QC for JEDI +- transform: accept where + new name: experiment::hofx0PassedQc::${variable} + starting field: experiment::hofx0::${variable} + where: + - experiment::EffectiveQC0::${variable} == 0 + for: + variable: *variables + +# Generate GSI hofx that passed JEDI QC +- transform: accept where + new name: experiment::GsiHofXBcPassedQc::${variable} + starting field: experiment::GsiHofXBc::${variable} + where: + - experiment::EffectiveQC0::${variable} == 0 + for: + variable: *variables + +# Generate hofx0 that passed QC for JEDI +- transform: accept where + new name: experiment::ObsValueMinushofx0PassedQc::${variable} + starting field: experiment::ObsValueMinusHofx0::${variable} + where: + - experiment::EffectiveQC0::${variable} == 0 + for: + variable: *variables + +# Generate hofx0 that passed QC for GSI +- transform: accept where + new name: experiment::ObsValueMinusGsiHofXBcPassedQc::${variable} + starting field: experiment::ObsValueMinusGsiHofXBc::${variable} + where: + - experiment::EffectiveQC0::${variable} == 0 + for: + variable: *variables + +# Generate ombg that passed QC for JEDI +- transform: accept where + new name: experiment::ombgPassedQc::${variable} + starting field: experiment::ombg::${variable} + where: + - experiment::EffectiveQC0::${variable} == 0 + for: + variable: *variables + +# Generate oman that passed QC for JEDI +- transform: accept where + new name: experiment::omanPassedQc::${variable} + starting field: experiment::oman::${variable} + where: + - experiment::EffectiveQC1::${variable} == 0 + for: + variable: *variables + +# Generate obs contribution to analysis (OmA*OmA)-(OmB*OmB) +- transform: arithmetic + new name: experiment::ResidualRMSdiff::${variable} + equals: (experiment::omanPassedQc::${variable})*(experiment::omanPassedQc::${variable})-(experiment::ombgPassedQc::${variable})*(experiment::ombgPassedQc::${variable}) + for: + variable: *variables + +graphics: + + plotting_backend: Emcpy + figure_list: + + # Correlation scatter plots + # ------------------------- + + # JEDI h(x) vs Observations + - batch figure: + variables: *variables + channels: *channels + figure: + layout: [1,1] + title: 'Observations vs. JEDI h(x) | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/correlation_scatter/${variable}${channel}/jedi_hofx0_vs_obs_{{instrument}}_${variable}${channel}.png' + plots: + - add_xlabel: 'Observation Value' + add_ylabel: 'JEDI h(x)' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::ObsValue::${variable} + y: + variable: experiment::hofx0::${variable} + channel: ${channel} + markersize: 5 + color: 'black' + label: 'JEDI h(x) versus obs (all obs)' + - type: Scatter + x: + variable: experiment::ObsValue::${variable} + y: + variable: experiment::hofx0PassedQc::${variable} + channel: ${channel} + markersize: 5 + color: 'red' + label: 'JEDI h(x) versus obs (passed QC in JEDI)' + + # GSI h(x) vs Observations + - batch figure: + variables: *variables + channels: *channels + figure: + layout: [1,1] + title: 'Observations vs. GSI h(x) | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/correlation_scatter/${variable}${channel}/gsi_hofx0_vs_obs_{{instrument}}_${variable}${channel}.png' + plots: + - add_xlabel: 'Observation Value' + add_ylabel: 'GSI h(x)' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::ObsValue::${variable} + y: + variable: experiment::GsiHofXBc::${variable} + channel: ${channel} + markersize: 5 + color: 'black' + label: 'GSI h(x) versus obs (all obs)' + - type: Scatter + x: + variable: experiment::ObsValue::${variable} + y: + variable: experiment::GsiHofXBcPassedQc::${variable} + channel: ${channel} + markersize: 5 + color: 'red' + label: 'GSI h(x) versus obs (passed QC in JEDI)' + + # JEDI h(x) vs GSI h(x) + - batch figure: + variables: *variables + channels: *channels + figure: + layout: [1,1] + title: 'JEDI h(x) vs. GSI h(x) | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/correlation_scatter/${variable}${channel}/gsi_hofx_vs_jedi0_hofx_{{instrument}}_${variable}${channel}.png' + plots: + - add_xlabel: 'GSI h(x)' + add_ylabel: 'JEDI h(x)' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::GsiHofXBc::${variable} + y: + variable: experiment::hofx0::${variable} + channel: ${channel} + markersize: 5 + color: 'black' + label: 'JEDI h(x) versus GSI h(x)' + - type: Scatter + x: + variable: experiment::GsiHofXBcPassedQc::${variable} + y: + variable: experiment::hofx0PassedQc::${variable} + channel: ${channel} + markersize: 5 + color: 'red' + label: 'JEDI h(x) versus GSI h(x) (passed QC in JEDI)' + + # JEDI hofx0 vs GSI hofx0 + - batch figure: + variables: *variables + channels: *channels + figure: + layout: [1,1] + title: 'JEDI hofx0 vs. GSI hofx0 | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/correlation_scatter/${variable}${channel}/gsi_hofx0_vs_jedi_hofx0_{{instrument}}_${variable}${channel}.png' + plots: + - add_xlabel: 'GSI observation minus h(x)' + add_ylabel: 'JEDI observation minus h(x)' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::ObsValueMinusGsiHofXBc::${variable} + y: + variable: experiment::ObsValueMinusHofx0::${variable} + channel: ${channel} + markersize: 5 + color: 'black' + label: 'GSI hofx0 vs JEDI hofx0 (all obs)' + - type: Scatter + x: + variable: experiment::ObsValueMinusGsiHofXBcPassedQc::${variable} + y: + variable: experiment::ObsValueMinushofx0PassedQc::${variable} + channel: ${channel} + markersize: 5 + color: 'red' + label: 'GSI hofx0 vs JEDI hofx0 (passed QC in JEDI)' + + # JEDI oma vs omb + - batch figure: + variables: *variables + channels: *channels + figure: + layout: [1,1] + title: 'OmA vs. OmB | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/correlation_scatter/${variable}${channel}/jedi_oma_vs_omb_{{instrument}}_${variable}${channel}.png' + plots: + - add_xlabel: 'OmA' + add_ylabel: 'OmB' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::oman::${variable} + y: + variable: experiment::ombg::${variable} + channel: ${channel} + markersize: 5 + color: 'black' + label: 'OmA versus OmB (all residuals)' + - type: Scatter + x: + variable: experiment::omanPassedQc::${variable} + y: + variable: experiment::ombgPassedQc::${variable} + channel: ${channel} + markersize: 5 + color: 'red' + label: 'OmA versus OmB (passed QC)' + +# Map plots# --------- + + # Observations + - batch figure: + variables: *variables + channels: *channels + dynamic options: + - type: vminvmaxcmap + channel: ${channel} + data variable: experiment::ObsValue::${variable} + figure: + figure size: [20,10] + layout: [1,1] + title: 'Observations | {{instrument_title}} | Obs Value' + output name: '{{cycle_dir}}/eva/{{instrument}}/map_plots/${variable}${channel}/observations_{{instrument}}_${variable}${channel}.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: ObsValue + add_grid: + layers: + - type: MapScatter + longitude: + variable: experiment::MetaData::longitude + latitude: + variable: experiment::MetaData::latitude + data: + variable: experiment::ObsValue::${variable} + channel: ${channel} + markersize: 2 + label: ObsValue + colorbar: true + cmap: ${dynamic_cmap} + vmin: ${dynamic_vmin} + vmax: ${dynamic_vmax} + + # hofx0 jedi + - batch figure: + variables: *variables + channels: *channels + dynamic options: + - type: vminvmaxcmap + channel: ${channel} + data variable: experiment::ObsValueMinusHofx0::${variable} + figure: + figure size: [20,10] + layout: [1,1] + title: 'JEDI hofx0 | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/map_plots/${variable}${channel}/hofx0_jedi_{{instrument}}_${variable}${channel}.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: '${variable}' + add_grid: + layers: + - type: MapScatter + longitude: + variable: experiment::MetaData::longitude + latitude: + variable: experiment::MetaData::latitude + data: + variable: experiment::ObsValueMinusHofx0::${variable} + channel: ${channel} + markersize: 2 + label: '${variable}' + colorbar: true + cmap: ${dynamic_cmap} + vmin: ${dynamic_vmin} + vmax: ${dynamic_vmax} + + # hofx0 gsi + - batch figure: + variables: *variables + channels: *channels + dynamic options: + - type: vminvmaxcmap + channel: ${channel} + data variable: experiment::ObsValueMinusGsiHofXBc::${variable} + figure: + figure size: [20,10] + layout: [1,1] + title: 'GSI hofx0 | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/map_plots/${variable}${channel}/hofx0_gsi_{{instrument}}_${variable}${channel}.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: '${variable}' + add_grid: + layers: + - type: MapScatter + longitude: + variable: experiment::MetaData::longitude + latitude: + variable: experiment::MetaData::latitude + data: + variable: experiment::ObsValueMinusGsiHofXBc::${variable} + channel: ${channel} + markersize: 2 + label: '${variable}' + colorbar: true + cmap: ${dynamic_cmap} + vmin: ${dynamic_vmin} + vmax: ${dynamic_vmax} + + # hofx difference + - batch figure: + variables: *variables + channels: *channels + dynamic options: + - type: vminvmaxcmap + channel: ${channel} + data variable: experiment::Hofx0MinusGsiHofXBc::${variable} + figure: + figure size: [20,10] + layout: [1,1] + title: 'Hofx0 Difference | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/map_plots/${variable}${channel}/hofx0_difference_{{instrument}}_${variable}${channel}.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: '${variable}' + add_grid: + layers: + - type: MapScatter + longitude: + variable: experiment::MetaData::longitude + latitude: + variable: experiment::MetaData::latitude + data: + variable: experiment::Hofx0MinusGsiHofXBc::${variable} + channel: ${channel} + markersize: 2 + label: '${variable}' + colorbar: true + cmap: ${dynamic_cmap} + vmin: ${dynamic_vmin} + vmax: ${dynamic_vmax} + + + # RMS(oma)-RMS(omb) difference + - batch figure: + variables: *variables + channels: *channels + dynamic options: + - type: vminvmaxcmap + channel: ${channel} + data variable: experiment::ResidualRMSdiff::${variable} + figure: + figure size: [20,10] + layout: [1,1] + title: 'RMS Residual Difference | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/map_plots/${variable}${channel}/rmsres_difference_{{instrument}}_${variable}${channel}.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: '${variable}' + add_grid: + layers: + - type: MapScatter + longitude: + variable: experiment::MetaData::longitude + latitude: + variable: experiment::MetaData::latitude + data: + variable: experiment::ResidualRMSdiff::${variable} + channel: ${channel} + markersize: 2 + label: '${variable}' + colorbar: true + cmap: ${dynamic_cmap} + vmin: ${dynamic_vmin} + vmax: ${dynamic_vmax} +# Histogram plots# --------------- + + # hofx0 vs hofx0 + - batch figure: + variables: *variables + channels: *channels + dynamic options: + - type: histogram_bins + channel: ${channel} + number of bins rule: sturges + data variable: experiment::ObsValueMinusHofx0::${variable} + figure: + layout: [1,1] + title: 'JEDI hofx0 vs. GSI hofx0 | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/histograms/${variable}${channel}/gsi_hofx0_vs_jedi_hofx0_{{instrument}}_${variable}${channel}.png' + plots: + - add_xlabel: 'Observation minus h(x)' + add_ylabel: 'Count' + add_legend: + loc: 'upper left' + layers: + - type: Histogram + data: + variable: experiment::ObsValueMinusGsiHofXBc::${variable} + channel: ${channel} + color: 'blue' + label: 'GSI hofx0 (all obs)' + bins: ${dynamic_bins} + alpha: 0.5 + - type: Histogram + data: + variable: experiment::ObsValueMinusHofx0::${variable} + channel: ${channel} + color: 'red' + label: 'JEDI hofx0 (all obs)' + bins: ${dynamic_bins} + alpha: 0.5 + + # JEDI omb vs oma + - batch figure: + variables: *variables + dynamic options: + - type: histogram_bins + data variable: experiment::omanPassedQc::${variable} + number of bins rule: 'rice' + figure: + layout: [1,1] + title: 'OmB vs. OmA | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/histograms/${variable}/ombg_oman_{{instrument}}_${variable}.png' + plots: + - add_xlabel: 'Difference' + add_ylabel: 'Count' + set_xlim: [-3, 3] + add_legend: + loc: 'upper left' + statistics: + fields: + - field_name: experiment::ombgPassedQc::${variable} + xloc: 0.5 + yloc: -0.10 + kwargs: + color: 'black' + fontsize: 8 + fontfamily: monospace + - field_name: experiment::omanPassedQc::${variable} + xloc: 0.5 + yloc: -0.13 + kwargs: + color: 'red' + fontsize: 8 + fontfamily: monospace + statistics_variables: + - n + - min + - mean + - max + - std + layers: + - type: Histogram + data: + variable: experiment::ombgPassedQc::${variable} + color: 'red' + label: 'observations minus background ' + bins: ${dynamic_bins} + alpha: 0.5 + density: true + - type: Histogram + data: + variable: experiment::omanPassedQc::${variable} + color: 'blue' + label: 'observations minus analysis' + bins: ${dynamic_bins} + alpha: 0.5 + density: true + + #map plot for surface pressure increment + - batch figure: + variables: [ps] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Surface Pressure Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::ps + label: PS increment + colorbar: true + cmap: 'bwr' + vmin: -100 + vmax: 100 + #map plot for temperature increment (lowest level) + - batch figure: + variables: [t] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_1000.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Temperature Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::t + slices: '[71,...]' + label: T increment (1000 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for temperature increment + - batch figure: + variables: [t] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_850.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Temperature Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::t + slices: '[62,...]' + label: T increment (850 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for temperature increment + - batch figure: + variables: [t] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_500.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Temperature Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::t + slices: '[49,...]' + label: T increment (500 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for temperature increment + - batch figure: + variables: [t] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_200.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Temperature Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::t + slices: '[42,...]' + label: T increment (200 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for temperature increment + - batch figure: + variables: [t] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_10.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Temperature Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::t + slices: '[24,...]' + label: T increment (10 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for temperature increment + - batch figure: + variables: [t] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_1.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Temperature Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::t + slices: '[14,...]' + label: T increment (1 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + + #map plot for Zonal Wind increment (lowest level) + - batch figure: + variables: [ua] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_1000.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Zonal Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::ua + slices: '[71,...]' + label: U increment (1000 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Zonal Wind increment + - batch figure: + variables: [ua] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_850.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Zonal Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::ua + slices: '[62,...]' + label: U increment (850 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Zonal Wind increment + - batch figure: + variables: [ua] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_500.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Zonal Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::ua + slices: '[49,...]' + label: U increment (500 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Zonal Wind increment + - batch figure: + variables: [ua] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_200.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Zonal Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::ua + slices: '[42,...]' + label: U increment (200 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Zonal Wind increment + - batch figure: + variables: [ua] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_10.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Zonal Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::ua + slices: '[24,...]' + label: U increment (10 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Zonal Wind increment + - batch figure: + variables: [ua] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_1.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Zonal Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::ua + slices: '[14,...]' + label: U increment (1 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + + #map plot for Meridional Wind increment (lowest level) + - batch figure: + variables: [va] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_1000.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Meridional Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::va + slices: '[71,...]' + label: V increment (1000 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Meridional Wind increment + - batch figure: + variables: [va] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_850.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Meridional Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::va + slices: '[62,...]' + label: V increment (850 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Meridional Wind increment + - batch figure: + variables: [va] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_500.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Meridional Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::va + slices: '[49,...]' + label: V increment (500 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Meridional Wind increment + - batch figure: + variables: [va] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_200.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Meridional Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::va + slices: '[42,...]' + label: V increment (200 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Meridional Wind increment + - batch figure: + variables: [va] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_10.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Meridional Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::va + slices: '[24,...]' + label: V increment (10 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Meridional Wind increment + - batch figure: + variables: [va] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_1.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Meridional Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::va + slices: '[14,...]' + label: V increment (1 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + + #map plot for Specific Humidity increment (lowest level) + - batch figure: + variables: [q] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_1000.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Specific Humidity Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::q + slices: '[71,...]' + label: Q increment (1000 hPa) + colorbar: true + cmap: 'bwr' + vmin: -0.001 + vmax: 0.001 + #map plot for Specific Humidity increment + - batch figure: + variables: [q] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_850.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Specific Humidity Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::q + slices: '[62,...]' + label: Q increment (850 hPa) + colorbar: true + cmap: 'bwr' + vmin: -0.001 + vmax: 0.001 + #map plot for Specific Humidity increment + - batch figure: + variables: [q] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_500.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Specific Humidity Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::q + slices: '[49,...]' + label: Q increment (500 hPa) + colorbar: true + cmap: 'bwr' + vmin: -0.001 + vmax: 0.001 + #map plot for Specific Humidity increment + - batch figure: + variables: [q] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_200.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Specific Humidity Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::q + slices: '[42,...]' + label: Q increment (200 hPa) + colorbar: true + cmap: 'bwr' + vmin: -0.001 + vmax: 0.001 + #map plot for Specific Humidity increment + - batch figure: + variables: [q] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_10.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Specific Humidity Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::q + slices: '[24,...]' + label: Q increment (10 hPa) + colorbar: true + cmap: 'bwr' + vmin: -0.001 + vmax: 0.001 diff --git a/src/swell/suites/3dvar_atmos/flow.cylc b/src/swell/suites/3dvar_atmos/flow.cylc new file mode 100644 index 000000000..7a245bc1f --- /dev/null +++ b/src/swell/suites/3dvar_atmos/flow.cylc @@ -0,0 +1,191 @@ +# (C) Copyright 2021- United States Government as represented by the Administrator of the +# National Aeronautics and Space Administration. All Rights Reserved. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + +# -------------------------------------------------------------------------------------------------- + +# Cylc suite for executing JEDI-based non-cycling variational data assimilation + +# -------------------------------------------------------------------------------------------------- + +[scheduler] + UTC mode = True + allow implicit tasks = False + +# -------------------------------------------------------------------------------------------------- + +[scheduling] + + initial cycle point = {{start_cycle_point}} + final cycle point = {{final_cycle_point}} + runahead limit = {{runahead_limit}} + + [[graph]] + R1 = """ + # Triggers for non cycle time dependent tasks + # ------------------------------------------- + # Clone JEDI source code + CloneJedi + + # Build JEDI source code by linking + CloneJedi => BuildJediByLinking? + + # If not able to link to build create the build + BuildJediByLinking:fail? => BuildJedi + + {% for model_component in model_components %} + # Stage JEDI static files + CloneJedi => StageJedi-{{model_component}} + + # Clone geos ana for generating observing system records + CloneGeosMksi-{{model_component}} + {% endfor %} + """ + + {% for cycle_time in cycle_times %} + {{cycle_time.cycle_time}} = """ + {% for model_component in model_components %} + {% if cycle_time[model_component] %} + + # Task triggers for: {{model_component}} + # ------------------ + # Generate satellite channel records + CloneGeosMksi-{{model_component}}[^] => GenerateObservingSystemRecords-{{model_component}} + + # Get background + GetBackground-{{model_component}} + + # Get observations + GetObservations-{{model_component}} + + # Perform staging that is cycle dependent + StageJediCycle-{{model_component}} + + # Run Jedi variational executable + BuildJediByLinking[^]? | BuildJedi[^] => RunJediVariationalExecutable-{{model_component}} + StageJedi-{{model_component}}[^] => RunJediVariationalExecutable-{{model_component}} + StageJediCycle-{{model_component}} => RunJediVariationalExecutable-{{model_component}} + GetBackground-{{model_component}} => RunJediVariationalExecutable-{{model_component}} + GetObservations-{{model_component}} => RunJediVariationalExecutable-{{model_component}} + GenerateObservingSystemRecords-{{model_component}} => RunJediVariationalExecutable-{{model_component}} + + # EvaObservations + RunJediVariationalExecutable-{{model_component}} => EvaObservations-{{model_component}} + + # EvaJediLog + RunJediVariationalExecutable-{{model_component}} => EvaJediLog-{{model_component}} + + # Save observations + RunJediVariationalExecutable-{{model_component}} => SaveObsDiags-{{model_component}} + + # Clean up large files + EvaObservations-{{model_component}} & SaveObsDiags-{{model_component}} => + CleanCycle-{{model_component}} + + {% endif %} + {% endfor %} + """ + {% endfor %} + +# -------------------------------------------------------------------------------------------------- + +[runtime] + + # Task defaults + # ------------- + [[root]] + pre-script = "source $CYLC_SUITE_DEF_PATH/modules" + + [[[environment]]] + datetime = $CYLC_TASK_CYCLE_POINT + config = $CYLC_SUITE_DEF_PATH/experiment.yaml + + # Tasks + # ----- + [[CloneJedi]] + script = "swell task CloneJedi $config" + + [[BuildJediByLinking]] + script = "swell task BuildJediByLinking $config" + + [[BuildJedi]] + script = "swell task BuildJedi $config" + platform = {{platform}} + execution time limit = {{scheduling["BuildJedi"]["execution_time_limit"]}} + [[[directives]]] + --account = {{scheduling["BuildJedi"]["account"]}} + --qos = {{scheduling["BuildJedi"]["qos"]}} + --job-name = BuildJedi + --nodes={{scheduling["BuildJedi"]["nodes"]}} + --ntasks-per-node={{scheduling["BuildJedi"]["ntasks_per_node"]}} + --constraint={{scheduling["BuildJedi"]["constraint"]}} + {% if scheduling["BuildJedi"]["partition"] %} + --partition={{scheduling["BuildJedi"]["partition"]}} + {% endif %} + + {% for model_component in model_components %} + + [[CloneGeosMksi-{{model_component}}]] + script = "swell task CloneGeosMksi $config -m {{model_component}}" + + [[GenerateObservingSystemRecords-{{model_component}}]] + script = "swell task GenerateObservingSystemRecords $config -d $datetime -m {{model_component}}" + + [[StageJedi-{{model_component}}]] + script = "swell task StageJedi $config -m {{model_component}}" + + [[StageJediCycle-{{model_component}}]] + script = "swell task StageJedi $config -d $datetime -m {{model_component}}" + + [[ GetBackground-{{model_component}} ]] + script = "swell task GetBackground $config -d $datetime -m {{model_component}}" + + [[GetObservations-{{model_component}}]] + script = "swell task GetObservations $config -d $datetime -m {{model_component}}" + + [[RunJediVariationalExecutable-{{model_component}}]] + script = "swell task RunJediVariationalExecutable $config -d $datetime -m {{model_component}}" + + [[RunJediVariationalExecutable-{{model_component}}]] + script = "swell task RunJediVariationalExecutable $config -d $datetime -m {{model_component}}" + platform = {{platform}} + execution time limit = {{scheduling["RunJediVariationalExecutable"]["execution_time_limit"]}} + [[[directives]]] + --account = {{scheduling["RunJediVariationalExecutable"]["account"]}} + --qos = {{scheduling["RunJediVariationalExecutable"]["qos"]}} + --job-name = RunJediVariationalExecutable + --nodes={{scheduling["RunJediVariationalExecutable"]["nodes"]}} + --ntasks-per-node={{scheduling["RunJediVariationalExecutable"]["ntasks_per_node"]}} + --constraint={{scheduling["RunJediVariationalExecutable"]["constraint"]}} + {% if scheduling["RunJediVariationalExecutable"]["partition"] %} + --partition={{scheduling["RunJediVariationalExecutable"]["partition"]}} + {% endif %} + + [[EvaJediLog-{{model_component}}]] + script = "swell task EvaJediLog $config -d $datetime -m {{model_component}}" + + [[EvaObservations-{{model_component}}]] + script = "swell task EvaObservations $config -d $datetime -m {{model_component}}" + platform = {{platform}} + execution time limit = {{scheduling["EvaObservations"]["execution_time_limit"]}} + [[[directives]]] + --account = {{scheduling["EvaObservations"]["account"]}} + --qos = {{scheduling["EvaObservations"]["qos"]}} + --job-name = EvaObservations + --nodes={{scheduling["EvaObservations"]["nodes"]}} + --ntasks-per-node={{scheduling["EvaObservations"]["ntasks_per_node"]}} + --constraint={{scheduling["EvaObservations"]["constraint"]}} + {% if scheduling["EvaObservations"]["partition"] %} + --partition={{scheduling["EvaObservations"]["partition"]}} + {% endif %} + + [[SaveObsDiags-{{model_component}}]] + script = "swell task SaveObsDiags $config -d $datetime -m {{model_component}}" + + [[CleanCycle-{{model_component}}]] + script = "swell task CleanCycle $config -d $datetime -m {{model_component}}" + {% endfor %} + +# -------------------------------------------------------------------------------------------------- diff --git a/src/swell/suites/3dvar_atmos/suite_questions.yaml b/src/swell/suites/3dvar_atmos/suite_questions.yaml new file mode 100644 index 000000000..71c889f68 --- /dev/null +++ b/src/swell/suites/3dvar_atmos/suite_questions.yaml @@ -0,0 +1,32 @@ +start_cycle_point: + ask_question: True + default_value: '2021-12-12T00:00:00Z' + prompt: What is the time of the first cycle (middle of the window)? + type: iso-datetime + +final_cycle_point: + ask_question: True + default_value: '2021-12-12T06:00:00Z' + prompt: What is the time of the final cycle (middle of the window)? + type: iso-datetime + +runahead_limit: + ask_question: True + default_value: 'P4' + prompt: Since this suite is non-cycling choose how many hours the workflow can run ahead? + type: string + +r2d2_local_path: + ask_question: False + default_value: defer_to_platform + prompt: Enter the path where R2D2 will store experiment output + type: string + +cycle_times: + ask_question: True + default_value: defer_to_model + options: defer_to_model + models: + - all + prompt: Enter the cycle times for this model. + type: string-check-list diff --git a/src/swell/suites/hyb4denvar_atmos/eva/jedi_log-geos_atmosphere.yaml b/src/swell/suites/hyb4denvar_atmos/eva/jedi_log-geos_atmosphere.yaml new file mode 100644 index 000000000..4ba4d12a0 --- /dev/null +++ b/src/swell/suites/hyb4denvar_atmos/eva/jedi_log-geos_atmosphere.yaml @@ -0,0 +1,64 @@ +datasets: + +- type: JediLog + collection_name: JediLogTest + jedi_log_to_parse: '{{cycle_dir}}/jedi_variational_log.log' + data_to_parse: + convergence: true + +transforms: +- transform: arithmetic + new name: JediLogTest::convergence::${variable}_log + equals: log(JediLogTest::convergence::${variable}) + for: + variable: [residual_norm, norm_reduction] + +graphics: + + plotting_backend: Emcpy + figure_list: + + - figure: + layout: [3,1] + figure size: [12,10] + title: 'Residual Norm and Norm Reduction Plots' + output name: '{{cycle_dir}}/eva/jedi_log/convergence/residual_norm_reduction.png' + plots: + - add_xlabel: 'Total inner iteration number' + add_ylabel: 'Residual norm' + layers: + - type: LinePlot + x: + variable: JediLogTest::convergence::total_iteration + y: + variable: JediLogTest::convergence::residual_norm + color: 'black' + + - add_xlabel: 'Total inner iteration number' + add_ylabel: 'Log(norm reduction)' + layers: + - type: LinePlot + x: + variable: JediLogTest::convergence::total_iteration + y: + variable: JediLogTest::convergence::norm_reduction + color: 'black' + + - add_xlabel: 'Total inner iteration number' + add_ylabel: 'Log(reduction)' + add_legend: + layers: + - type: LinePlot + x: + variable: JediLogTest::convergence::total_iteration + y: + variable: JediLogTest::convergence::residual_norm_log + color: 'red' + label: 'Log(residual norm)' + - type: LinePlot + x: + variable: JediLogTest::convergence::total_iteration + y: + variable: JediLogTest::convergence::norm_reduction_log + color: 'blue' + label: 'Log norm reduction' diff --git a/src/swell/suites/hyb4denvar_atmos/eva/observations-geos_atmosphere.yaml b/src/swell/suites/hyb4denvar_atmos/eva/observations-geos_atmosphere.yaml new file mode 100644 index 000000000..267fa85d7 --- /dev/null +++ b/src/swell/suites/hyb4denvar_atmos/eva/observations-geos_atmosphere.yaml @@ -0,0 +1,1292 @@ +datasets: + +- group: increment + type: LatLon + filename: {{cycle_dir}}/swell-3dfgat_atmos.increment-iter1.20211212_000000z.nc4 + name: experiment_increment + variables: [ps, ua, va, t, q, lat, lon] + +- name: experiment + type: IodaObsSpace + filenames: + - {{obs_path_file}} + channels: &channels {{channels}} + groups: + - name: ObsValue + variables: &variables {{simulated_variables}} + - name: GsiHofXBc + #- name: GsiEffectiveQC + - name: hofx0 + - name: hofx1 + - name: ombg + - name: oman + - name: EffectiveQC0 + - name: EffectiveQC1 + - name: MetaData + +transforms: + +# Generate hofx0 for GSI +- transform: arithmetic + new name: experiment::ObsValueMinusGsiHofXBc::${variable} + equals: experiment::ObsValue::${variable}-experiment::GsiHofXBc::${variable} + for: + variable: *variables + +# Generate hofx0 for JEDI +- transform: arithmetic + new name: experiment::ObsValueMinusHofx0::${variable} + equals: experiment::ObsValue::${variable}-experiment::hofx0::${variable} + for: + variable: *variables + +# Generate hofx difference +- transform: arithmetic + new name: experiment::Hofx0MinusGsiHofXBc::${variable} + equals: experiment::hofx0::${variable}-experiment::GsiHofXBc::${variable} + for: + variable: *variables + +# Generate hofx that passed QC for JEDI +- transform: accept where + new name: experiment::hofx0PassedQc::${variable} + starting field: experiment::hofx0::${variable} + where: + - experiment::EffectiveQC0::${variable} == 0 + for: + variable: *variables + +# Generate GSI hofx that passed JEDI QC +- transform: accept where + new name: experiment::GsiHofXBcPassedQc::${variable} + starting field: experiment::GsiHofXBc::${variable} + where: + - experiment::EffectiveQC0::${variable} == 0 + for: + variable: *variables + +# Generate hofx0 that passed QC for JEDI +- transform: accept where + new name: experiment::ObsValueMinushofx0PassedQc::${variable} + starting field: experiment::ObsValueMinusHofx0::${variable} + where: + - experiment::EffectiveQC0::${variable} == 0 + for: + variable: *variables + +# Generate hofx0 that passed QC for GSI +- transform: accept where + new name: experiment::ObsValueMinusGsiHofXBcPassedQc::${variable} + starting field: experiment::ObsValueMinusGsiHofXBc::${variable} + where: + - experiment::EffectiveQC0::${variable} == 0 + for: + variable: *variables + +# Generate ombg that passed QC for JEDI +- transform: accept where + new name: experiment::ombgPassedQc::${variable} + starting field: experiment::ombg::${variable} + where: + - experiment::EffectiveQC0::${variable} == 0 + for: + variable: *variables + +# Generate oman that passed QC for JEDI +- transform: accept where + new name: experiment::omanPassedQc::${variable} + starting field: experiment::oman::${variable} + where: + - experiment::EffectiveQC1::${variable} == 0 + for: + variable: *variables + +# Generate obs contribution to analysis (OmA*OmA)-(OmB*OmB) +- transform: arithmetic + new name: experiment::ResidualRMSdiff::${variable} + equals: (experiment::omanPassedQc::${variable})*(experiment::omanPassedQc::${variable})-(experiment::ombgPassedQc::${variable})*(experiment::ombgPassedQc::${variable}) + for: + variable: *variables + +graphics: + + plotting_backend: Emcpy + figure_list: + + # Correlation scatter plots + # ------------------------- + + # JEDI h(x) vs Observations + - batch figure: + variables: *variables + channels: *channels + figure: + layout: [1,1] + title: 'Observations vs. JEDI h(x) | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/correlation_scatter/${variable}${channel}/jedi_hofx0_vs_obs_{{instrument}}_${variable}${channel}.png' + plots: + - add_xlabel: 'Observation Value' + add_ylabel: 'JEDI h(x)' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::ObsValue::${variable} + y: + variable: experiment::hofx0::${variable} + channel: ${channel} + markersize: 5 + color: 'black' + label: 'JEDI h(x) versus obs (all obs)' + - type: Scatter + x: + variable: experiment::ObsValue::${variable} + y: + variable: experiment::hofx0PassedQc::${variable} + channel: ${channel} + markersize: 5 + color: 'red' + label: 'JEDI h(x) versus obs (passed QC in JEDI)' + + # GSI h(x) vs Observations + - batch figure: + variables: *variables + channels: *channels + figure: + layout: [1,1] + title: 'Observations vs. GSI h(x) | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/correlation_scatter/${variable}${channel}/gsi_hofx0_vs_obs_{{instrument}}_${variable}${channel}.png' + plots: + - add_xlabel: 'Observation Value' + add_ylabel: 'GSI h(x)' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::ObsValue::${variable} + y: + variable: experiment::GsiHofXBc::${variable} + channel: ${channel} + markersize: 5 + color: 'black' + label: 'GSI h(x) versus obs (all obs)' + - type: Scatter + x: + variable: experiment::ObsValue::${variable} + y: + variable: experiment::GsiHofXBcPassedQc::${variable} + channel: ${channel} + markersize: 5 + color: 'red' + label: 'GSI h(x) versus obs (passed QC in JEDI)' + + # JEDI h(x) vs GSI h(x) + - batch figure: + variables: *variables + channels: *channels + figure: + layout: [1,1] + title: 'JEDI h(x) vs. GSI h(x) | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/correlation_scatter/${variable}${channel}/gsi_hofx_vs_jedi0_hofx_{{instrument}}_${variable}${channel}.png' + plots: + - add_xlabel: 'GSI h(x)' + add_ylabel: 'JEDI h(x)' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::GsiHofXBc::${variable} + y: + variable: experiment::hofx0::${variable} + channel: ${channel} + markersize: 5 + color: 'black' + label: 'JEDI h(x) versus GSI h(x)' + - type: Scatter + x: + variable: experiment::GsiHofXBcPassedQc::${variable} + y: + variable: experiment::hofx0PassedQc::${variable} + channel: ${channel} + markersize: 5 + color: 'red' + label: 'JEDI h(x) versus GSI h(x) (passed QC in JEDI)' + + # JEDI hofx0 vs GSI hofx0 + - batch figure: + variables: *variables + channels: *channels + figure: + layout: [1,1] + title: 'JEDI hofx0 vs. GSI hofx0 | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/correlation_scatter/${variable}${channel}/gsi_hofx0_vs_jedi_hofx0_{{instrument}}_${variable}${channel}.png' + plots: + - add_xlabel: 'GSI observation minus h(x)' + add_ylabel: 'JEDI observation minus h(x)' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::ObsValueMinusGsiHofXBc::${variable} + y: + variable: experiment::ObsValueMinusHofx0::${variable} + channel: ${channel} + markersize: 5 + color: 'black' + label: 'GSI hofx0 vs JEDI hofx0 (all obs)' + - type: Scatter + x: + variable: experiment::ObsValueMinusGsiHofXBcPassedQc::${variable} + y: + variable: experiment::ObsValueMinushofx0PassedQc::${variable} + channel: ${channel} + markersize: 5 + color: 'red' + label: 'GSI hofx0 vs JEDI hofx0 (passed QC in JEDI)' + + # JEDI oma vs omb + - batch figure: + variables: *variables + channels: *channels + figure: + layout: [1,1] + title: 'OmA vs. OmB | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/correlation_scatter/${variable}${channel}/jedi_oma_vs_omb_{{instrument}}_${variable}${channel}.png' + plots: + - add_xlabel: 'OmA' + add_ylabel: 'OmB' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::oman::${variable} + y: + variable: experiment::ombg::${variable} + channel: ${channel} + markersize: 5 + color: 'black' + label: 'OmA versus OmB (all residuals)' + - type: Scatter + x: + variable: experiment::omanPassedQc::${variable} + y: + variable: experiment::ombgPassedQc::${variable} + channel: ${channel} + markersize: 5 + color: 'red' + label: 'OmA versus OmB (passed QC)' + +# Map plots# --------- + + # Observations + - batch figure: + variables: *variables + channels: *channels + dynamic options: + - type: vminvmaxcmap + channel: ${channel} + data variable: experiment::ObsValue::${variable} + figure: + figure size: [20,10] + layout: [1,1] + title: 'Observations | {{instrument_title}} | Obs Value' + output name: '{{cycle_dir}}/eva/{{instrument}}/map_plots/${variable}${channel}/observations_{{instrument}}_${variable}${channel}.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: ObsValue + add_grid: + layers: + - type: MapScatter + longitude: + variable: experiment::MetaData::longitude + latitude: + variable: experiment::MetaData::latitude + data: + variable: experiment::ObsValue::${variable} + channel: ${channel} + markersize: 2 + label: ObsValue + colorbar: true + cmap: ${dynamic_cmap} + vmin: ${dynamic_vmin} + vmax: ${dynamic_vmax} + + # hofx0 jedi + - batch figure: + variables: *variables + channels: *channels + dynamic options: + - type: vminvmaxcmap + channel: ${channel} + data variable: experiment::ObsValueMinusHofx0::${variable} + figure: + figure size: [20,10] + layout: [1,1] + title: 'JEDI hofx0 | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/map_plots/${variable}${channel}/hofx0_jedi_{{instrument}}_${variable}${channel}.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: '${variable}' + add_grid: + layers: + - type: MapScatter + longitude: + variable: experiment::MetaData::longitude + latitude: + variable: experiment::MetaData::latitude + data: + variable: experiment::ObsValueMinusHofx0::${variable} + channel: ${channel} + markersize: 2 + label: '${variable}' + colorbar: true + cmap: ${dynamic_cmap} + vmin: ${dynamic_vmin} + vmax: ${dynamic_vmax} + + # hofx0 gsi + - batch figure: + variables: *variables + channels: *channels + dynamic options: + - type: vminvmaxcmap + channel: ${channel} + data variable: experiment::ObsValueMinusGsiHofXBc::${variable} + figure: + figure size: [20,10] + layout: [1,1] + title: 'GSI hofx0 | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/map_plots/${variable}${channel}/hofx0_gsi_{{instrument}}_${variable}${channel}.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: '${variable}' + add_grid: + layers: + - type: MapScatter + longitude: + variable: experiment::MetaData::longitude + latitude: + variable: experiment::MetaData::latitude + data: + variable: experiment::ObsValueMinusGsiHofXBc::${variable} + channel: ${channel} + markersize: 2 + label: '${variable}' + colorbar: true + cmap: ${dynamic_cmap} + vmin: ${dynamic_vmin} + vmax: ${dynamic_vmax} + + # hofx difference + - batch figure: + variables: *variables + channels: *channels + dynamic options: + - type: vminvmaxcmap + channel: ${channel} + data variable: experiment::Hofx0MinusGsiHofXBc::${variable} + figure: + figure size: [20,10] + layout: [1,1] + title: 'Hofx0 Difference | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/map_plots/${variable}${channel}/hofx0_difference_{{instrument}}_${variable}${channel}.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: '${variable}' + add_grid: + layers: + - type: MapScatter + longitude: + variable: experiment::MetaData::longitude + latitude: + variable: experiment::MetaData::latitude + data: + variable: experiment::Hofx0MinusGsiHofXBc::${variable} + channel: ${channel} + markersize: 2 + label: '${variable}' + colorbar: true + cmap: ${dynamic_cmap} + vmin: ${dynamic_vmin} + vmax: ${dynamic_vmax} + + + # RMS(oma)-RMS(omb) difference + - batch figure: + variables: *variables + channels: *channels + dynamic options: + - type: vminvmaxcmap + channel: ${channel} + data variable: experiment::ResidualRMSdiff::${variable} + figure: + figure size: [20,10] + layout: [1,1] + title: 'RMS Residual Difference | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/map_plots/${variable}${channel}/rmsres_difference_{{instrument}}_${variable}${channel}.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: '${variable}' + add_grid: + layers: + - type: MapScatter + longitude: + variable: experiment::MetaData::longitude + latitude: + variable: experiment::MetaData::latitude + data: + variable: experiment::ResidualRMSdiff::${variable} + channel: ${channel} + markersize: 2 + label: '${variable}' + colorbar: true + cmap: ${dynamic_cmap} + vmin: ${dynamic_vmin} + vmax: ${dynamic_vmax} +# Histogram plots# --------------- + + # hofx0 vs hofx0 + - batch figure: + variables: *variables + channels: *channels + dynamic options: + - type: histogram_bins + channel: ${channel} + number of bins rule: sturges + data variable: experiment::ObsValueMinusHofx0::${variable} + figure: + layout: [1,1] + title: 'JEDI hofx0 vs. GSI hofx0 | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/histograms/${variable}${channel}/gsi_hofx0_vs_jedi_hofx0_{{instrument}}_${variable}${channel}.png' + plots: + - add_xlabel: 'Observation minus h(x)' + add_ylabel: 'Count' + add_legend: + loc: 'upper left' + layers: + - type: Histogram + data: + variable: experiment::ObsValueMinusGsiHofXBc::${variable} + channel: ${channel} + color: 'blue' + label: 'GSI hofx0 (all obs)' + bins: ${dynamic_bins} + alpha: 0.5 + - type: Histogram + data: + variable: experiment::ObsValueMinusHofx0::${variable} + channel: ${channel} + color: 'red' + label: 'JEDI hofx0 (all obs)' + bins: ${dynamic_bins} + alpha: 0.5 + + # JEDI omb vs oma + - batch figure: + variables: *variables + dynamic options: + - type: histogram_bins + data variable: experiment::omanPassedQc::${variable} + number of bins rule: 'rice' + figure: + layout: [1,1] + title: 'OmB vs. OmA | {{instrument_title}} | ${variable_title}' + output name: '{{cycle_dir}}/eva/{{instrument}}/histograms/${variable}/ombg_oman_{{instrument}}_${variable}.png' + plots: + - add_xlabel: 'Difference' + add_ylabel: 'Count' + set_xlim: [-3, 3] + add_legend: + loc: 'upper left' + statistics: + fields: + - field_name: experiment::ombgPassedQc::${variable} + xloc: 0.5 + yloc: -0.10 + kwargs: + color: 'black' + fontsize: 8 + fontfamily: monospace + - field_name: experiment::omanPassedQc::${variable} + xloc: 0.5 + yloc: -0.13 + kwargs: + color: 'red' + fontsize: 8 + fontfamily: monospace + statistics_variables: + - n + - min + - mean + - max + - std + layers: + - type: Histogram + data: + variable: experiment::ombgPassedQc::${variable} + color: 'red' + label: 'observations minus background ' + bins: ${dynamic_bins} + alpha: 0.5 + density: true + - type: Histogram + data: + variable: experiment::omanPassedQc::${variable} + color: 'blue' + label: 'observations minus analysis' + bins: ${dynamic_bins} + alpha: 0.5 + density: true + + #map plot for surface pressure increment + - batch figure: + variables: [ps] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Surface Pressure Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::ps + label: PS increment + colorbar: true + cmap: 'bwr' + vmin: -100 + vmax: 100 + #map plot for temperature increment (lowest level) + - batch figure: + variables: [t] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_1000.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Temperature Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::t + slices: '[71,...]' + label: T increment (1000 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for temperature increment + - batch figure: + variables: [t] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_850.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Temperature Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::t + slices: '[62,...]' + label: T increment (850 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for temperature increment + - batch figure: + variables: [t] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_500.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Temperature Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::t + slices: '[49,...]' + label: T increment (500 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for temperature increment + - batch figure: + variables: [t] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_200.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Temperature Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::t + slices: '[42,...]' + label: T increment (200 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for temperature increment + - batch figure: + variables: [t] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_10.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Temperature Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::t + slices: '[24,...]' + label: T increment (10 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for temperature increment + - batch figure: + variables: [t] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_1.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Temperature Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::t + slices: '[14,...]' + label: T increment (1 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + + #map plot for Zonal Wind increment (lowest level) + - batch figure: + variables: [ua] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_1000.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Zonal Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::ua + slices: '[71,...]' + label: U increment (1000 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Zonal Wind increment + - batch figure: + variables: [ua] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_850.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Zonal Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::ua + slices: '[62,...]' + label: U increment (850 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Zonal Wind increment + - batch figure: + variables: [ua] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_500.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Zonal Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::ua + slices: '[49,...]' + label: U increment (500 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Zonal Wind increment + - batch figure: + variables: [ua] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_200.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Zonal Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::ua + slices: '[42,...]' + label: U increment (200 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Zonal Wind increment + - batch figure: + variables: [ua] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_10.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Zonal Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::ua + slices: '[24,...]' + label: U increment (10 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Zonal Wind increment + - batch figure: + variables: [ua] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_1.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Zonal Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::ua + slices: '[14,...]' + label: U increment (1 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + + #map plot for Meridional Wind increment (lowest level) + - batch figure: + variables: [va] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_1000.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Meridional Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::va + slices: '[71,...]' + label: V increment (1000 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Meridional Wind increment + - batch figure: + variables: [va] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_850.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Meridional Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::va + slices: '[62,...]' + label: V increment (850 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Meridional Wind increment + - batch figure: + variables: [va] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_500.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Meridional Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::va + slices: '[49,...]' + label: V increment (500 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Meridional Wind increment + - batch figure: + variables: [va] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_200.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Meridional Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::va + slices: '[42,...]' + label: V increment (200 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Meridional Wind increment + - batch figure: + variables: [va] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_10.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Meridional Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::va + slices: '[24,...]' + label: V increment (10 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + #map plot for Meridional Wind increment + - batch figure: + variables: [va] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_1.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Meridional Wind Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::va + slices: '[14,...]' + label: V increment (1 hPa) + colorbar: true + cmap: 'bwr' + vmin: -1 + vmax: 1 + + #map plot for Specific Humidity increment (lowest level) + - batch figure: + variables: [q] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_1000.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Specific Humidity Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::q + slices: '[71,...]' + label: Q increment (1000 hPa) + colorbar: true + cmap: 'bwr' + vmin: -0.001 + vmax: 0.001 + #map plot for Specific Humidity increment + - batch figure: + variables: [q] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_850.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Specific Humidity Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::q + slices: '[62,...]' + label: Q increment (850 hPa) + colorbar: true + cmap: 'bwr' + vmin: -0.001 + vmax: 0.001 + #map plot for Specific Humidity increment + - batch figure: + variables: [q] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_500.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Specific Humidity Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::q + slices: '[49,...]' + label: Q increment (500 hPa) + colorbar: true + cmap: 'bwr' + vmin: -0.001 + vmax: 0.001 + #map plot for Specific Humidity increment + - batch figure: + variables: [q] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_200.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Specific Humidity Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::q + slices: '[42,...]' + label: Q increment (200 hPa) + colorbar: true + cmap: 'bwr' + vmin: -0.001 + vmax: 0.001 + #map plot for Specific Humidity increment + - batch figure: + variables: [q] + figure: + figure size: [20,10] + layout: [1,1] + title: 'Increment from JEDI' + output name: '{{cycle_dir}}/eva/increment/map_plots/${variable}/inc_${variable}_10.png' + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: Specific Humidity Increment + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment_increment::increment::lon + latitude: + variable: experiment_increment::increment::lat + data: + variable: experiment_increment::increment::q + slices: '[24,...]' + label: Q increment (10 hPa) + colorbar: true + cmap: 'bwr' + vmin: -0.001 + vmax: 0.001 diff --git a/src/swell/suites/hyb4denvar_atmos/flow.cylc b/src/swell/suites/hyb4denvar_atmos/flow.cylc new file mode 100644 index 000000000..530478194 --- /dev/null +++ b/src/swell/suites/hyb4denvar_atmos/flow.cylc @@ -0,0 +1,198 @@ +# (C) Copyright 2021- United States Government as represented by the Administrator of the +# National Aeronautics and Space Administration. All Rights Reserved. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + +# -------------------------------------------------------------------------------------------------- + +# Cylc suite for executing JEDI-based non-cycling variational data assimilation + +# -------------------------------------------------------------------------------------------------- + +[scheduler] + UTC mode = True + allow implicit tasks = False + +# -------------------------------------------------------------------------------------------------- + +[scheduling] + + initial cycle point = {{start_cycle_point}} + final cycle point = {{final_cycle_point}} + runahead limit = {{runahead_limit}} + + [[graph]] + R1 = """ + # Triggers for non cycle time dependent tasks + # ------------------------------------------- + # Clone JEDI source code + CloneJedi + + # Build JEDI source code by linking + CloneJedi => BuildJediByLinking? + + # If not able to link to build create the build + BuildJediByLinking:fail? => BuildJedi + + {% for model_component in model_components %} + # Stage JEDI static files + CloneJedi => StageJedi-{{model_component}} + + # Clone geos ana for generating observing system records + CloneGeosMksi-{{model_component}} + {% endfor %} + """ + + {% for cycle_time in cycle_times %} + {{cycle_time.cycle_time}} = """ + {% for model_component in model_components %} + {% if cycle_time[model_component] %} + + # Task triggers for: {{model_component}} + # ------------------ + # Generate satellite channel records + CloneGeosMksi-{{model_component}}[^] => GenerateObservingSystemRecords-{{model_component}} + + # Get background + GetBackground-{{model_component}} + + # Get ensemble + GetEnsemble-{{model_component}} + + # Get observations + GetObservations-{{model_component}} + + # Perform staging that is cycle dependent + StageJediCycle-{{model_component}} + + # Run Jedi variational executable + BuildJediByLinking[^]? | BuildJedi[^] => RunJediVariationalExecutable-{{model_component}} + StageJedi-{{model_component}}[^] => RunJediVariationalExecutable-{{model_component}} + StageJediCycle-{{model_component}} => RunJediVariationalExecutable-{{model_component}} + GetBackground-{{model_component}} => RunJediVariationalExecutable-{{model_component}} + GetEnsemble-{{model_component}} => RunJediVariationalExecutable-{{model_component}} + GetObservations-{{model_component}} => RunJediVariationalExecutable-{{model_component}} + GenerateObservingSystemRecords-{{model_component}} => RunJediVariationalExecutable-{{model_component}} + + # EvaObservations + RunJediVariationalExecutable-{{model_component}} => EvaObservations-{{model_component}} + + # EvaJediLog + RunJediVariationalExecutable-{{model_component}} => EvaJediLog-{{model_component}} + + # Save observations + RunJediVariationalExecutable-{{model_component}} => SaveObsDiags-{{model_component}} + + # Clean up large files + EvaObservations-{{model_component}} & SaveObsDiags-{{model_component}} => + CleanCycle-{{model_component}} + + {% endif %} + {% endfor %} + """ + {% endfor %} + +# -------------------------------------------------------------------------------------------------- + +[runtime] + + # Task defaults + # ------------- + [[root]] + pre-script = "source $CYLC_SUITE_DEF_PATH/modules" + + [[[environment]]] + datetime = $CYLC_TASK_CYCLE_POINT + config = $CYLC_SUITE_DEF_PATH/experiment.yaml + + # Tasks + # ----- + [[CloneJedi]] + script = "swell task CloneJedi $config" + + [[BuildJediByLinking]] + script = "swell task BuildJediByLinking $config" + + [[BuildJedi]] + script = "swell task BuildJedi $config" + platform = {{platform}} + execution time limit = {{scheduling["BuildJedi"]["execution_time_limit"]}} + [[[directives]]] + --account = {{scheduling["BuildJedi"]["account"]}} + --qos = {{scheduling["BuildJedi"]["qos"]}} + --job-name = BuildJedi + --nodes={{scheduling["BuildJedi"]["nodes"]}} + --ntasks-per-node={{scheduling["BuildJedi"]["ntasks_per_node"]}} + --constraint={{scheduling["BuildJedi"]["constraint"]}} + {% if scheduling["BuildJedi"]["partition"] %} + --partition={{scheduling["BuildJedi"]["partition"]}} + {% endif %} + + {% for model_component in model_components %} + + [[CloneGeosMksi-{{model_component}}]] + script = "swell task CloneGeosMksi $config -m {{model_component}}" + + [[GenerateObservingSystemRecords-{{model_component}}]] + script = "swell task GenerateObservingSystemRecords $config -d $datetime -m {{model_component}}" + + [[StageJedi-{{model_component}}]] + script = "swell task StageJedi $config -m {{model_component}}" + + [[StageJediCycle-{{model_component}}]] + script = "swell task StageJedi $config -d $datetime -m {{model_component}}" + + [[ GetBackground-{{model_component}} ]] + script = "swell task GetBackground $config -d $datetime -m {{model_component}}" + + [[GetEnsemble-{{model_component}}]] + script = "swell task GetEnsemble $config -d $datetime -m {{model_component}}" + + [[GetObservations-{{model_component}}]] + script = "swell task GetObservations $config -d $datetime -m {{model_component}}" + + [[RunJediVariationalExecutable-{{model_component}}]] + script = "swell task RunJediVariationalExecutable $config -d $datetime -m {{model_component}}" + + [[RunJediVariationalExecutable-{{model_component}}]] + script = "swell task RunJediVariationalExecutable $config -d $datetime -m {{model_component}}" + platform = {{platform}} + execution time limit = {{scheduling["RunJediVariationalExecutable"]["execution_time_limit"]}} + [[[directives]]] + --account = {{scheduling["RunJediVariationalExecutable"]["account"]}} + --qos = {{scheduling["RunJediVariationalExecutable"]["qos"]}} + --job-name = RunJediVariationalExecutable + --nodes={{scheduling["RunJediVariationalExecutable"]["nodes"]}} + --ntasks-per-node={{scheduling["RunJediVariationalExecutable"]["ntasks_per_node"]}} + --constraint={{scheduling["RunJediVariationalExecutable"]["constraint"]}} + {% if scheduling["RunJediVariationalExecutable"]["partition"] %} + --partition={{scheduling["RunJediVariationalExecutable"]["partition"]}} + {% endif %} + + [[EvaJediLog-{{model_component}}]] + script = "swell task EvaJediLog $config -d $datetime -m {{model_component}}" + + [[EvaObservations-{{model_component}}]] + script = "swell task EvaObservations $config -d $datetime -m {{model_component}}" + platform = {{platform}} + execution time limit = {{scheduling["EvaObservations"]["execution_time_limit"]}} + [[[directives]]] + --account = {{scheduling["EvaObservations"]["account"]}} + --qos = {{scheduling["EvaObservations"]["qos"]}} + --job-name = EvaObservations + --nodes={{scheduling["EvaObservations"]["nodes"]}} + --ntasks-per-node={{scheduling["EvaObservations"]["ntasks_per_node"]}} + --constraint={{scheduling["EvaObservations"]["constraint"]}} + {% if scheduling["EvaObservations"]["partition"] %} + --partition={{scheduling["EvaObservations"]["partition"]}} + {% endif %} + + [[SaveObsDiags-{{model_component}}]] + script = "swell task SaveObsDiags $config -d $datetime -m {{model_component}}" + + [[CleanCycle-{{model_component}}]] + script = "swell task CleanCycle $config -d $datetime -m {{model_component}}" + {% endfor %} + +# -------------------------------------------------------------------------------------------------- diff --git a/src/swell/suites/hyb4denvar_atmos/suite_questions.yaml b/src/swell/suites/hyb4denvar_atmos/suite_questions.yaml new file mode 100644 index 000000000..71c889f68 --- /dev/null +++ b/src/swell/suites/hyb4denvar_atmos/suite_questions.yaml @@ -0,0 +1,32 @@ +start_cycle_point: + ask_question: True + default_value: '2021-12-12T00:00:00Z' + prompt: What is the time of the first cycle (middle of the window)? + type: iso-datetime + +final_cycle_point: + ask_question: True + default_value: '2021-12-12T06:00:00Z' + prompt: What is the time of the final cycle (middle of the window)? + type: iso-datetime + +runahead_limit: + ask_question: True + default_value: 'P4' + prompt: Since this suite is non-cycling choose how many hours the workflow can run ahead? + type: string + +r2d2_local_path: + ask_question: False + default_value: defer_to_platform + prompt: Enter the path where R2D2 will store experiment output + type: string + +cycle_times: + ask_question: True + default_value: defer_to_model + options: defer_to_model + models: + - all + prompt: Enter the cycle times for this model. + type: string-check-list diff --git a/src/swell/tasks/run_jedi_variational_executable.py b/src/swell/tasks/run_jedi_variational_executable.py index 78eb8ff9d..e2fc8e451 100644 --- a/src/swell/tasks/run_jedi_variational_executable.py +++ b/src/swell/tasks/run_jedi_variational_executable.py @@ -30,6 +30,7 @@ def execute(self): # Parse configuration # ------------------- + cost_type = self.config.cost_type() window_type = self.config.window_type() window_length = self.config.window_length() window_offset = self.config.window_offset() @@ -58,6 +59,7 @@ def execute(self): # Populate jedi interface templates dictionary # -------------------------------------------- + self.jedi_rendering.add_key('cost_type', cost_type) self.jedi_rendering.add_key('window_begin_iso', window_begin_iso) self.jedi_rendering.add_key('window_end_iso', window_end_iso) self.jedi_rendering.add_key('window_length', window_length) @@ -85,6 +87,7 @@ def execute(self): # Atmosphere background error model if npx_proc is not None and npy_proc is not None: + self.jedi_rendering.add_key('gsibec_configuration', self.config.gsibec_configuration()) self.jedi_rendering.add_key('gsibec_npx_proc', npx_proc) self.jedi_rendering.add_key('gsibec_npy_proc', 6*npy_proc) @@ -92,6 +95,10 @@ def execute(self): if window_type == '4D': self.jedi_rendering.add_key('background_frequency', self.config.background_frequency()) + # Access to ensemble +# if cost_type == '4D-Ens-Var': +# self.jedi_rendering.add_key('path_to_ensemble', self.config.path_to_ensemble()) + # Jedi configuration file # ----------------------- jedi_config_file = os.path.join(self.cycle_dir(), f'jedi_{jedi_application}_config.yaml') @@ -102,7 +109,7 @@ def execute(self): # Open the JEDI config file and fill initial templates # ---------------------------------------------------- - jedi_config_dict = self.jedi_rendering.render_oops_file(f'{jedi_application}{window_type}') + jedi_config_dict = self.jedi_rendering.render_oops_file(f'{jedi_application}{cost_type}') # Perform complete template rendering # ----------------------------------- @@ -124,7 +131,7 @@ def execute(self): # Jedi executable name # -------------------- - jedi_executable = model_component_meta['executables'][f'{jedi_application}{window_type}'] + jedi_executable = model_component_meta['executables'][f'{jedi_application}{cost_type}'] jedi_executable_path = os.path.join(self.experiment_path(), 'jedi_bundle', 'build', 'bin', jedi_executable) diff --git a/src/swell/tasks/stage_jedi.py b/src/swell/tasks/stage_jedi.py index 8bdf5db2e..47b2dad43 100644 --- a/src/swell/tasks/stage_jedi.py +++ b/src/swell/tasks/stage_jedi.py @@ -33,11 +33,13 @@ def execute(self): horizontal_resolution = self.config.horizontal_resolution() swell_static_files = self.config.swell_static_files() vertical_resolution = self.config.vertical_resolution() + gsibec_configuration = self.config.gsibec_configuration() # Add jedi interface template keys self.jedi_rendering.add_key('horizontal_resolution', horizontal_resolution) self.jedi_rendering.add_key('swell_static_files', swell_static_files) self.jedi_rendering.add_key('vertical_resolution', vertical_resolution) + self.jedi_rendering.add_key('gsibec_configuration', gsibec_configuration) # Open the stage configuration file # --------------------------------- diff --git a/src/swell/tasks/task_questions.yaml b/src/swell/tasks/task_questions.yaml index f7a2ace59..ea2cc81b5 100644 --- a/src/swell/tasks/task_questions.yaml +++ b/src/swell/tasks/task_questions.yaml @@ -106,6 +106,17 @@ bundles: - CloneJedi type: string-check-list +cost_type: + ask_question: false + default_value: defer_to_model + models: + - all + options: defer_to_model + prompt: Define cost function to minimize + tasks: + - RunJediVariationalExecutable + type: string-drop-list + clean_patterns: ask_question: false default_value: defer_to_model @@ -302,6 +313,18 @@ geovals_provider: - GetGeovals type: string +gsibec_configuration: + ask_question: false + default_value: defer_to_model + models: + - all + options: defer_to_model + prompt: Which GSIBEC climatological or hybrid? + tasks: + - RunJediVariationalExecutable + - StageJedi + type: string-drop-list + gradient_norm_reduction: ask_question: false default_value: defer_to_model diff --git a/src/swell/test/suite_tests/3dfgat_atmos-tier1.yaml b/src/swell/test/suite_tests/3dfgat_atmos-tier1.yaml new file mode 100644 index 000000000..7f2725bc8 --- /dev/null +++ b/src/swell/test/suite_tests/3dfgat_atmos-tier1.yaml @@ -0,0 +1,49 @@ +jedi_build_method: use_existing +model_components: ['geos_atmosphere'] +models: + geos_atmosphere: + cost_type: 4D-Var + cycle_times: + - T00 + horizontal_resolution: '91' + window_type: 4D + observations: + - aircraft + - airs_aqua + - amsr2_gcom-w1 + - amsua_aqua + - amsua_metop-b + - amsua_metop-c + - amsua_n15 + - amsua_n18 + - amsua_n19 + - atms_n20 + - atms_npp + - avhrr3_metop-b + - avhrr3_n18 + - avhrr3_n19 + - cris-fsr_n20 + - cris-fsr_npp + - gmi_gpm + - gps + - iasi_metop-b + - iasi_metop-c + - mhs_metop-b + - mhs_metop-c + - mhs_n19 + - mls55_aura + - omi_aura + - ompsnm_npp + - pibal + - satwind + - scatwind + - sfcship + - sfc + - sondes + - ssmis_f17 + gradient_norm_reduction: 1e-3 + number_of_iterations: + - 5 + obs_experiment: x0048v2 + geovals_experiment: x0048v2-geovals + clean_patterns: [] diff --git a/src/swell/test/suite_tests/3dvar_atmos-tier1.yaml b/src/swell/test/suite_tests/3dvar_atmos-tier1.yaml new file mode 100644 index 000000000..18127f68f --- /dev/null +++ b/src/swell/test/suite_tests/3dvar_atmos-tier1.yaml @@ -0,0 +1,51 @@ +start_cycle_point: '2021-12-12T00:00:00Z' +final_cycle_point: '2021-12-12T06:00:00Z' +jedi_build_method: use_existing +model_components: ['geos_atmosphere'] +models: + geos_atmosphere: + cycle_times: + - T00 + window_length: PT6H + window_offset: PT3H + window_type: 3D + horizontal_resolution: '91' + vertical_resolution: '72' + total_processors: 6 + observations: + - aircraft + - airs_aqua + - amsr2_gcom-w1 + - amsua_aqua + - amsua_metop-b + - amsua_metop-c + - amsua_n15 + - amsua_n18 + - amsua_n19 + - atms_n20 + - atms_npp + - avhrr3_metop-b + - avhrr3_n18 + - avhrr3_n19 + - cris-fsr_n20 + - cris-fsr_npp + - gmi_gpm + - gps + - iasi_metop-b + - iasi_metop-c + - mhs_metop-b + - mhs_metop-c + - mhs_n19 + - mls55_aura + - omi_aura + - ompsnm_npp + - pibal + - satwind + - scatwind + - sfcship + - sfc + - sondes + - ssmis_f17 + obs_experiment: x0048v2 + geovals_experiment: x0048v2-geovals + clean_patterns: [] diff --git a/src/swell/test/suite_tests/hyb4denvar_atmos-tier1.yaml b/src/swell/test/suite_tests/hyb4denvar_atmos-tier1.yaml new file mode 100644 index 000000000..d078f6378 --- /dev/null +++ b/src/swell/test/suite_tests/hyb4denvar_atmos-tier1.yaml @@ -0,0 +1,50 @@ +jedi_build_method: use_existing +model_components: ['geos_atmosphere'] +models: + geos_atmosphere: + cost_type: 4D-Ens-Var + cycle_times: + - T00 + gsibec_configuration: hyb_gsibec_configuration + horizontal_resolution: '91' + window_type: 4D + observations: + - aircraft + - airs_aqua + - amsr2_gcom-w1 + - amsua_aqua + - amsua_metop-b + - amsua_metop-c + - amsua_n15 + - amsua_n18 + - amsua_n19 + - atms_n20 + - atms_npp + - avhrr3_metop-b + - avhrr3_n18 + - avhrr3_n19 + - cris-fsr_n20 + - cris-fsr_npp + - gmi_gpm + - gps + - iasi_metop-b + - iasi_metop-c + - mhs_metop-b + - mhs_metop-c + - mhs_n19 + - mls55_aura + - omi_aura + - ompsnm_npp + - pibal + - satwind + - scatwind + - sfcship + - sfc + - sondes + - ssmis_f17 + gradient_norm_reduction: 1e-3 + number_of_iterations: + - 5 + obs_experiment: x0048v2 + geovals_experiment: x0048v2-geovals + clean_patterns: [] diff --git a/src/swell/utilities/render_jedi_interface_files.py b/src/swell/utilities/render_jedi_interface_files.py index 2052b6af8..d1c19de8b 100644 --- a/src/swell/utilities/render_jedi_interface_files.py +++ b/src/swell/utilities/render_jedi_interface_files.py @@ -60,8 +60,10 @@ def __init__(self, logger, experiment_root, experiment_id, cycle_dir, cycle_time 'background_error_model', 'background_frequency', 'background_time', + 'cost_type', 'crtm_coeff_dir', 'ensemble_num_members', + 'gsibec_configuration', 'gradient_norm_reduction', 'horizontal_localization_lengthscale', 'horizontal_localization_max_nobs', diff --git a/src/swell/utilities/scripts/check_jedi_interface_templates.py b/src/swell/utilities/scripts/check_jedi_interface_templates.py index aad742562..5623485b1 100644 --- a/src/swell/utilities/scripts/check_jedi_interface_templates.py +++ b/src/swell/utilities/scripts/check_jedi_interface_templates.py @@ -30,6 +30,7 @@ def main(): 'interfaces/*/observations/*yaml', 'interfaces/*/model/geometry.yaml', 'interfaces/*/model/background.yaml', + 'interfaces/*/model/background4D.yaml', 'interfaces/*/model/r2d2.yaml', 'interfaces/*/model/stage*.yaml', 'interfaces/*/model/background_error.yaml',