Skip to content

Commit

Permalink
Add the capability to assimilate the MADIS snow depth for global-work…
Browse files Browse the repository at this point in the history
…flow (#602)


* Initialize the madis snow DA in GDASApp for Global-Workflow.

* Add temporal thinning filter for madis data

* Update the temporal thinning filter.

* Change '$(' to '{{' as suggested.

* Made changes from $() to {{ }}
  • Loading branch information
jiaruidong2017 committed Sep 12, 2023
1 parent 7eddfd6 commit 2ed98b2
Show file tree
Hide file tree
Showing 6 changed files with 198 additions and 7 deletions.
102 changes: 102 additions & 0 deletions parm/land/obs/config/snocvr_snow.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
obs space:
name: snocvr_snow
distribution:
name: Halo
halo size: 250e3
obsdatain:
engine:
type: H5File
obsfile: '{{ DATA }}/obs/{{ OPREFIX }}snocvr_snow.nc4'
obsdataout:
engine:
type: H5File
obsfile: '{{ DATA }}/diags/diag_snocvr_snow.nc4'
simulated variables: [totalSnowDepth]
obs operator:
name: Composite
components:
- name: Identity
- name: BackgroundErrorIdentity
obs error:
covariance model: diagonal
obs localizations:
- localization method: Horizontal SOAR
lengthscale: 250e3
soar horizontal decay: 0.000021
max nobs: 50
- localization method: Vertical Brasnett
vertical lengthscale: 700
obs filters:
- filter: Bounds Check
filter variables:
- name: totalSnowDepth
minvalue: 0.0
maxvalue: 2000.0
action:
name: reject
- filter: Domain Check
where:
- variable:
name: MetaData/height
minvalue: -999.0
- filter: Domain Check # land only
where:
- variable:
name: GeoVaLs/slmsk
minvalue: 0.5
maxvalue: 1.5
- filter: RejectList # no land-ice
where:
- variable:
name: GeoVaLs/vtype
minvalue: 14.5
maxvalue: 15.5
- filter: Temporal Thinning
min_spacing: '{{ LAND_WINDOW_LENGTH }}'
seed_time: '{{ current_cycle | to_isotime }}'
category_variable:
name: MetaData/stationIdentification
- filter: Background Check # gross error check
filter variables:
- name: totalSnowDepth
threshold: 6.25
action:
name: reject
- filter: Met Office Buddy Check
filter variables:
- name: totalSnowDepth
rejection_threshold: 0.5
traced_boxes: # trace all observations
min_latitude: -90
max_latitude: 90
min_longitude: -180
max_longitude: 180
search_radius: 150 # km
station_id_variable:
name: MetaData/stationIdentification
num_zonal_bands: 24
sort_by_pressure: false
max_total_num_buddies: 15
max_num_buddies_from_single_band: 10
max_num_buddies_with_same_station_id: 5
use_legacy_buddy_collector: false
horizontal_correlation_scale: { "-90": 150, "90": 150 }
temporal_correlation_scale: PT6H
damping_factor_1: 1.0
damping_factor_2: 1.0
background_error_group: BkgError
- filter: Perform Action
filter variables:
- name: totalSnowDepth
action:
name: assign error
error parameter: 40.0
- filter: Variable Assignment
assignments:
- name: GrossErrorProbability/totalSnowDepth
type: float
value: 0.02
- name: BkgError/totalSnowDepth_background_error
type: float
value: 30.0

3 changes: 3 additions & 0 deletions parm/land/obs/lists/gdas_land_gts_only.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
observers:
- !INC ${OBS_YAML_DIR}/adpsfc_snow.yaml
- !INC ${OBS_YAML_DIR}/snocvr_snow.yaml
1 change: 1 addition & 0 deletions parm/land/obs/lists/gdas_land_prototype.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
observers:
- !INC ${OBS_YAML_DIR}/adpsfc_snow.yaml
- !INC ${OBS_YAML_DIR}/snocvr_snow.yaml
- !INC ${OBS_YAML_DIR}/ims_snow.yaml
10 changes: 7 additions & 3 deletions parm/land/prep/prep_gts.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,12 @@ gtsbufr:
mkdir:
- $(DATA)/obs
copy:
- [$(COM_OBS)/$(OPREFIX)adpsfc.tm00.bufr_d, $(DATA)/obs/]
- [{{ COM_OBS }}/{{ OPREFIX }}adpsfc.tm00.bufr_d, {{ DATA }}/obs/]
- [{{ COM_OBS }}/{{ OPREFIX }}snocvr.tm00.bufr_d, {{ DATA }}/obs/]
gtsioda:
copy:
- [$(DATA)/$(OPREFIX)adpsfc_snow.nc4, $(COM_OBS)/$(OPREFIX)adpsfc_snow.nc4]

- [{{ DATA }}/{{ OPREFIX }}adpsfc_snow.nc4, {{ COM_OBS }}/{{ OPREFIX }}adpsfc_snow.nc4]
- [{{ DATA }}/{{ OPREFIX }}snocvr_snow.nc4, {{ COM_OBS }}/{{ OPREFIX }}snocvr_snow.nc4]
bufr2ioda:
adpsfc: {{ HOMEgfs }}/sorc/gdas.cd/test/testinput/bufr_adpsfc_snow.yaml
snocvr: {{ HOMEgfs }}/sorc/gdas.cd/test/testinput/bufr_snocvr_snow.yaml
6 changes: 2 additions & 4 deletions test/testinput/bufr_adpsfc_snow.yaml
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
# (C) Copyright 2021-2022 NOAA/NWS/NCEP/EMC
#
# 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.

observations:
- obs space:
name: bufr

obsdatain: $(DATA)/obs/$(OPREFIX)adpsfc.tm00.bufr_d
obsdatain: '{{ DATA }}/obs/{{ OPREFIX }}adpsfc.tm00.bufr_d'

exports:
variables:
Expand Down Expand Up @@ -41,7 +39,7 @@ observations:

ioda:
backend: netcdf
obsdataout: $(DATA)/$(OPREFIX)adpsfc_snow.nc4
obsdataout: '{{ DATA }}/{{ OPREFIX }}adpsfc_snow.nc4'

variables:

Expand Down
83 changes: 83 additions & 0 deletions test/testinput/bufr_snocvr_snow.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# (C) Copyright 2021-2022 NOAA/NWS/NCEP/EMC
#

observations:
- obs space:
name: bufr

obsdatain: '{{ DATA }}/obs/{{ OPREFIX }}snocvr.tm00.bufr_d'

exports:
variables:
# MetaData
timestamp:
datetime:
year: "*/YEAR[1]"
month: "*/MNTH[1]"
day: "*/DAYS[1]"
hour: "*/HOUR[1]"
minute: "*/MINU[1]"
latitude:
query: "[*/CLAT, */CLATH]"
longitude:
query: "[*/CLON, */CLONH]"
stationIdentification:
query: "*/WGOSLID"

height:
query: "[*/SELV, */HSMSL]"

# ObsValue
totalSnowDepth:
query: "*/TOSD"
transforms:
- scale: 1000.0
filters:
- bounding:
variable: totalSnowDepth
upperBound: 10000000

ioda:
backend: netcdf
obsdataout: '{{ DATA }}/{{ OPREFIX }}snocvr_snow.nc4'

variables:

# MetaData
- name: "MetaData/dateTime"
coordinates: "longitude latitude"
source: variables/timestamp
longName: "Datetime"
units: "seconds since 1970-01-01T00:00:00Z"

- name: "MetaData/latitude"
coordinates: "longitude latitude"
source: variables/latitude
longName: "Latitude"
units: "degree_north"
range: [-90, 90]

- name: "MetaData/longitude"
coordinates: "longitude latitude"
source: variables/longitude
longName: "Longitude"
units: "degree_east"
range: [-180, 180]

- name: "MetaData/height"
coordinates: "longitude latitude"
source: variables/height
longName: "Height of Station"

- name: "MetaData/stationIdentification"
coordinates: "longitude latitude"
source: variables/stationIdentification
longName: "Identification of Observing Location"
units: "m"

# ObsValue
- name: "ObsValue/totalSnowDepth"
coordinates: "longitude latitude"
source: variables/totalSnowDepth
longName: "Total Snow Depth"
units: "mm"

0 comments on commit 2ed98b2

Please sign in to comment.