From 09d143cd3e48458edcafab9d54959c74ffee3d43 Mon Sep 17 00:00:00 2001 From: Mei Han Date: Thu, 10 Sep 2026 14:28:20 -0400 Subject: [PATCH 1/4] add abi_g19 --- src/Applications/NCEP_Etc/NCEP_bias/sac.nl.tmpl | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Applications/NCEP_Etc/NCEP_bias/sac.nl.tmpl b/src/Applications/NCEP_Etc/NCEP_bias/sac.nl.tmpl index 1bed79de..878ccfe2 100755 --- a/src/Applications/NCEP_Etc/NCEP_bias/sac.nl.tmpl +++ b/src/Applications/NCEP_Etc/NCEP_bias/sac.nl.tmpl @@ -98,6 +98,7 @@ dtype(83)='iasi', dplat(83)='metop-c', dsis(83)='iasi_metop-c', dtype(84)='abi', dplat(84)='g16', dsis(84)='abi_g16', dtype(85)='abi', dplat(85)='g18', dsis(85)='abi_g18', + dtype(86)='abi', dplat(86)='g19', dsis(86)='abi_g19', / dtype(46)='ssu', dplat(46)='n14', dsis(46)='ssu_n14', dtype(47)='hsb', dplat(47)='aqua', dsis(47)='hsb_aqua', From cf0ccb45abcfe72183a1c12c047529fb619255aa Mon Sep 17 00:00:00 2001 From: Mei Han Date: Thu, 17 Sep 2026 10:49:33 -0400 Subject: [PATCH 2/4] add abi_g19 --- .../NCEP_Etc/NCEP_enkf/scripts/gmao/etc/atmos_enkf.nml.tmpl | 1 + .../NCEP_Etc/NCEP_enkf/scripts/gmao/etc/atmos_enkf_sens.nml.tmpl | 1 + .../NCEP_Etc/NCEP_enkf/scripts/gmao/etc/obs1gsi_mean.rc | 1 + .../NCEP_Etc/NCEP_enkf/scripts/gmao/etc/obs1gsi_member.rc | 1 + 4 files changed, 4 insertions(+) diff --git a/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/atmos_enkf.nml.tmpl b/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/atmos_enkf.nml.tmpl index acce83df..32ba8099 100644 --- a/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/atmos_enkf.nml.tmpl +++ b/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/atmos_enkf.nml.tmpl @@ -109,6 +109,7 @@ sattypes_rad(69)= 'cris-fsr_n21', dsis(69)= 'cris-fsr_n21', sattypes_rad(70)= 'abi_g16', dsis(70)= 'abi_g16', sattypes_rad(71)= 'abi_g18', dsis(71)= 'abi_g18', + sattypes_rad(72)= 'abi_g19', dsis(72)= 'abi_g19', / &ozobs_enkf sattypes_oz(1) = 'sbuv2_n16', diff --git a/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/atmos_enkf_sens.nml.tmpl b/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/atmos_enkf_sens.nml.tmpl index 8fb156fa..fcb3bac0 100644 --- a/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/atmos_enkf_sens.nml.tmpl +++ b/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/atmos_enkf_sens.nml.tmpl @@ -114,6 +114,7 @@ sattypes_rad(69)= 'cris-fsr_n21', dsis(69)= 'cris-fsr_n21', sattypes_rad(70)= 'abi_g16', dsis(70)= 'abi_g16', sattypes_rad(71)= 'abi_g18', dsis(71)= 'abi_g18', + sattypes_rad(72)= 'abi_g19', dsis(72)= 'abi_g19', / &ozobs_enkf sattypes_oz(1) = 'sbuv2_n16', diff --git a/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/obs1gsi_mean.rc b/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/obs1gsi_mean.rc index 5805af32..23459973 100644 --- a/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/obs1gsi_mean.rc +++ b/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/obs1gsi_mean.rc @@ -197,6 +197,7 @@ OBS_INPUT:: amsr2bufr amsr2 gcom-w1 amsr2_gcom-w1 0.0 1 0 gmao_amsr2_bufr abibufr abi g16 abi_g16 0.0 1 0 ncep_goescsr_bufr abibufr abi g18 abi_g18 0.0 1 0 ncep_goescsr_bufr + abibufr abi g19 abi_g19 0.0 1 0 ncep_goescsr_bufr ! The following needs to be set for oneob-test: ! prepqc dummy dummy dummy 1.0 1 0 test :: diff --git a/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/obs1gsi_member.rc b/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/obs1gsi_member.rc index 5eff8e52..b2546541 100644 --- a/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/obs1gsi_member.rc +++ b/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/obs1gsi_member.rc @@ -197,6 +197,7 @@ OBS_INPUT:: amsr2bufr amsr2 gcom-w1 amsr2_gcom-w1 0.0 1 0 gmao_amsr2_bufr abibufr abi g16 abi_g16 0.0 1 0 ncep_goescsr_bufr abibufr abi g18 abi_g18 0.0 1 0 ncep_goescsr_bufr + abibufr abi g19 abi_g19 0.0 1 0 ncep_goescsr_bufr ! The following needs to be set for oneob-test: ! prepqc dummy dummy dummy 1.0 1 0 test :: From accf9be4330129ba02ea4e40103814aaf6156bba Mon Sep 17 00:00:00 2001 From: Ricardo Todling Date: Fri, 18 Sep 2026 15:00:12 -0400 Subject: [PATCH 3/4] needed update to total num of chns --- src/Applications/NCEP_Etc/NCEP_bias/sac.nl.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Applications/NCEP_Etc/NCEP_bias/sac.nl.tmpl b/src/Applications/NCEP_Etc/NCEP_bias/sac.nl.tmpl index 878ccfe2..487a7b72 100755 --- a/src/Applications/NCEP_Etc/NCEP_bias/sac.nl.tmpl +++ b/src/Applications/NCEP_Etc/NCEP_bias/sac.nl.tmpl @@ -1,5 +1,5 @@ &SETUP - jpch=4411,nstep=90,nsize=20,wgtang=0.008333333,wgtlap=0.0, + jpch=4507,nstep=90,nsize=20,wgtang=0.008333333,wgtlap=0.0, iuseqc=1,dtmax=1.0, iyy1=>>>YYYY<<<, imm1=>>>MM<<<, From c6eddbb37a82dc11d0ad4916203a4f3bad52ce5b Mon Sep 17 00:00:00 2001 From: Ricardo Todling Date: Fri, 18 Sep 2026 15:46:02 -0400 Subject: [PATCH 4/4] Add JEDI trigge for ABI-G19 --- .../GEOSdas_App/jedi/etc/obs/abi_g19.yaml | 369 ++++++++++++++++++ 1 file changed, 369 insertions(+) create mode 100644 src/Applications/GEOSdas_App/jedi/etc/obs/abi_g19.yaml diff --git a/src/Applications/GEOSdas_App/jedi/etc/obs/abi_g19.yaml b/src/Applications/GEOSdas_App/jedi/etc/obs/abi_g19.yaml new file mode 100644 index 00000000..a8a65e88 --- /dev/null +++ b/src/Applications/GEOSdas_App/jedi/etc/obs/abi_g19.yaml @@ -0,0 +1,369 @@ + - obs space: + name: ABI GOES-19 + obsdatain: + engine: + type: H5File + obsfile: ./obs/abi_g19.$BYYYYYMMDDTHH0000Z.nc4 + missing file action: warn + obsdataout: + engine: + type: H5File + obsfile: ./hofx/abi_g19.$BYYYYYMMDDTHH0000Z.nc4 + io pool: + max pool size: 6 + simulated variables: [brightnessTemperature] + channels: &abi_g19_channels [7-16] + + obs operator: + name: CRTM + Absorbers: [H2O,O3,CO2] + obs options: + Sensor_ID: abi_g19 + EndianType: little_endian + CoefficientPath: $JEDI_CRTM_COEFFS + linear obs operator: + Absorbers: [H2O,O3] + Surfaces: [Water_Temperature,Land_Temperature,Ice_Temperature,Snow_Temperature] + zeroO3JacRange: + - 996.0 + - 1170.0 + + obs bias: + input file: ./obs/abi_g19.$PYYYYYMMDDTHH0000Z.satbias.nc4 + output file: ./vbc/abi_g19.$BYYYYYMMDDTHH0000Z.satbias.nc4 + variational bc: + predictors: + - name: constant + - name: lapseRate + order: 2 + tlapse: &abi_g19_tlapse ./obs/abi_g19.$PYYYYYMMDDTHH0000Z.tlapse.txt + - name: lapseRate + tlapse: *abi_g19_tlapse + - name: emissivityJacobian + - name: sensorScanAngle + var_name: sensorScanPosition + order: 4 + - name: sensorScanAngle + var_name: sensorScanPosition + order: 3 + - name: sensorScanAngle + var_name: sensorScanPosition + order: 2 + - name: sensorScanAngle + var_name: sensorScanPosition + covariance: + minimal required obs number: 20 + variance range: + - 1e-06 + - 10.0 + step size: 0.0001 + largest analysis variance: 10000.0 + prior: + input file: ./obs/abi_g19.$PYYYYYMMDDTHH0000Z.satbias_cov.nc4 + inflation: + ratio: 1.1 + ratio for small dataset: 2.0 + output file: ./vbc/abi_g19.$BYYYYYMMDDTHH0000Z.satbias_cov.nc4 + + obs prior filters: + - filter: Perform Action + filter variables: + - name: brightnessTemperature + channels: *abi_g19_channels + action: + name: assign error + error parameter vector: [1.4,3.0,3.0,3.5,2.0,2.0,2.0,2.0,2.0,2.0] + + obs post filters: + # Useflag Check + - filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *abi_g19_channels + test variables: + - name: ObsFunction/ChannelUseflagCheckRad + channels: *abi_g19_channels + options: + channels: *abi_g19_channels + use_flag: >>>use_channels_abi_g19<<< + minvalue: 1.0e-12 + action: + name: reject + + # Satellite Zenith Angle Check + - filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *abi_g19_channels + test variables: + - name: MetaData/sensorZenithAngle + maxvalue: 65. + action: + name: reject + + # Surface type check + # Over water no reject. Over land, reject ch 7, 11-16. Over ice or snow, reject all. + - filter: BlackList + filter variables: + - name: brightnessTemperature + channels: 7, 11-16 + where: + - variable: + name: GeoVaLs/land_area_fraction + minvalue: 0.99 + - filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *abi_g19_channels + where: + - variable: + name: GeoVaLs/ice_area_fraction + minvalue: 0.99 + - filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *abi_g19_channels + where: + - variable: + name: GeoVaLs/surface_snow_area_fraction + minvalue: 0.99 + - filter: BlackList + filter variables: + - name: brightnessTemperature + channels: *abi_g19_channels + where: + - variable: + name: GeoVaLs/land_area_fraction + maxvalue: 0.99 + max_exclusive: true + - variable: + name: GeoVaLs/water_area_fraction + maxvalue: 0.99 + max_exclusive: true + - variable: + name: GeoVaLs/ice_area_fraction + maxvalue: 0.99 + max_exclusive: true + - variable: + name: GeoVaLs/surface_snow_area_fraction + maxvalue: 0.99 + max_exclusive: true + + # BT range check + - filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *abi_g19_channels + minvalue: 0.0 + maxvalue: 1000.0 + action: + name: reject + + # Topography Check + - filter: Perform Action + filter variables: + - name: brightnessTemperature + channels: *abi_g19_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorTopoRad + channels: *abi_g19_channels + options: + channels: *abi_g19_channels + sensor: abi_g19 + + # Model top transmittance check + - filter: Perform Action + filter variables: + - name: brightnessTemperature + channels: *abi_g19_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorTransmitTopRad + channels: *abi_g19_channels + options: + channels: *abi_g19_channels + + # Scene Consistency Check based on ch13 (10.3 micron) SDTB + - filter: Perform Action + filter variables: + - name: brightnessTemperature + channels: *abi_g19_channels + where: + - variable: + name: ClearSkyStdDev/brightnessTemperature + channels: 13 + minvalue: 0.4 + action: + name: reject + - filter: Perform Action + filter variables: + - name: brightnessTemperature + channels: *abi_g19_channels + where: + - variable: + name: ClearSkyStdDev/brightnessTemperature + channels: 13 + maxvalue: 0.4 + minvalue: 0.3 + max_exclusive: true + action: + name: inflate error + inflation factor: 1.4142 + + # Scene Consistency Check for ch8-10 based on ch8 (6.2 micron) SDTB + - filter: Perform Action + filter variables: + - name: brightnessTemperature + channels: 8-10 + where: + - variable: + name: ClearSkyStdDev/brightnessTemperature + channels: 8 + maxvalue: 0.5 + minvalue: 0.4 + max_exclusive: true + action: + name: inflate error + inflation factor: 1.1489 + - filter: Perform Action + filter variables: + - name: brightnessTemperature + channels: 8-10 + where: + - variable: + name: ClearSkyStdDev/brightnessTemperature + channels: 8 + maxvalue: 0.6 + minvalue: 0.5 + max_exclusive: true + action: + name: inflate error + inflation factor: 1.2923 + - filter: Perform Action + filter variables: + - name: brightnessTemperature + channels: 8-10 + where: + - variable: + name: ClearSkyStdDev/brightnessTemperature + channels: 8 + maxvalue: 0.7 + minvalue: 0.6 + max_exclusive: true + action: + name: inflate error + inflation factor: 1.4967 + - filter: Perform Action + filter variables: + - name: brightnessTemperature + channels: 8-10 + where: + - variable: + name: ClearSkyStdDev/brightnessTemperature + channels: 8 + minvalue: 0.7 + action: + name: reject + + # Near SST Retrieval Check + - filter: Bounds Check + filter variables: + - name: brightnessTemperature + channels: *abi_g19_channels + test variables: + - name: ObsFunction/NearSSTRetCheckIR + channels: *abi_g19_channels + options: + channels: *abi_g19_channels + use_flag: >>>use_channels_abi_g19<<< + maxvalue: 1.0e-12 + action: + name: reject + + # Surface Jacobian Check + - filter: Perform Action + filter variables: + - name: brightnessTemperature + channels: *abi_g19_channels + action: + name: inflate error + inflation variable: + name: ObsFunction/ObsErrorFactorSurfJacobianRad + channels: *abi_g19_channels + options: + channels: *abi_g19_channels + sensor: abi_g19 + obserr_demisf: [0.01, 0.02, 0.03, 0.02, 0.03] + obserr_dtempf: [0.5, 2.0, 4.0, 2.0, 4.0] + + # All channels are retained where cloud fraction <=1 (i.e., 1%) + - filter: Domain Check + filter variables: + - name: brightnessTemperature + channels: *abi_g19_channels + where: + - variable: + name: MetaData/cloud_frac + maxvalue: 1 + + # For surface and ch10 (7.3 micron), use split window chns to remove oqaque clouds + # step 1: calculate splitWindowDiff with Tb_obs and Tb_sim (hofx, restored to before BC) + - filter: Variable Assignment + assignments: + - name: DerivedMetaData/splitWindowDiff + type: float + function: + name: ObsFunction/Arithmetic + options: + variables: + - name: ObsValue/brightnessTemperature + channels: 13 + - name: ObsValue/brightnessTemperature + channels: 14 + - name: HofX/brightnessTemperature + channels: 13 + - name: HofX/brightnessTemperature + channels: 14 + - name: ObsBiasData/brightnessTemperature + channels: 13 + - name: ObsBiasData/brightnessTemperature + channels: 14 + coefs: [1, -1, -1, 1, 1, -1] + # step 2: apply threshold + - filter: Perform Action + filter variables: + - name: brightnessTemperature + channels: 7, 10-16 + where: + - variable: + name: DerivedMetaData/splitWindowDiff + maxvalue: -0.75 + action: + name: reject + + # Final gross check + - filter: Background Check + filter variables: + - name: brightnessTemperature + channels: *abi_g19_channels + function absolute threshold: + - name: ObsFunction/ObsErrorBoundIR + channels: *abi_g19_channels + options: + channels: *abi_g19_channels + obserr_bound_latitude: + name: ObsFunction/ObsErrorFactorLatRad + options: + latitude_parameters: [0.0, 0.0, 0.0, 0.0] + obserr_bound_transmittop: + name: ObsFunction/ObsErrorFactorTransmitTopRad + channels: *abi_g19_channels + options: + channels: *abi_g19_channels + obserr_bound_max: [2.5,4.0,4.0,4.0,2.5,2.5,2.5,2.5,2.5,2.5] + action: + name: reject + observation_name: abi_g19