Skip to content

Commit

Permalink
Add state of ground to increase the snow depth reports.
Browse files Browse the repository at this point in the history
  • Loading branch information
jiaruidong2017 committed Nov 9, 2024
1 parent dfc871f commit 1c8096f
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 10 deletions.
1 change: 1 addition & 0 deletions parm/snow/obs/config/bufr2ioda_mapping.yaml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@ mkdir:
- '{{ DATA }}/obs'
copy:
- ['{{PARMgfs}}/gdas/snow/obs/config/bufr_sfcsno_mapping.yaml', '{{ DATA }}/obs/']
- ['{{PARMgfs}}/gdas/snow/obs/config/ioda_bufr_python_encoder.py', '{{ DATA }}']
17 changes: 10 additions & 7 deletions parm/snow/obs/config/bufr_sfcsno_mapping.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ bufr:
query: "[*/CLON, */CLONH]"
stationIdentification:
query: "*/RPID"

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

Expand All @@ -26,11 +25,8 @@ bufr:
query: "[*/SNWSQ1/TOSD, */MTRMSC/TOSD, */STGDSNDM/TOSD]"
transforms:
- scale: 1000.0
filters:
- bounding:
variable: totalSnowDepth
lowerBound: 0
upperBound: 10000000
groundState:
query: "[*/GRDSQ1/SOGR, */STGDSNDM/SOGR]"

encoder:
variables:
Expand Down Expand Up @@ -65,11 +61,18 @@ encoder:
coordinates: "longitude latitude"
source: variables/stationIdentification
longName: "Identification of Observing Location"
units: "m"
units: "index"

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

- name: "ObsValue/groundState"
coordinates: "longitude latitude"
source: variables/groundState
longName: "STATE OF THE GROUND"
units: "index"

31 changes: 31 additions & 0 deletions parm/snow/obs/config/ioda_bufr_python_encoder.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import numpy as np
import bufr
from pyioda.ioda.Engines.Bufr import Encoder


def mask_container(container, mask):
new_container = bufr.DataContainer()
for var_name in container.list():
print(f" ... variable name: {var_name} ...")
var = container.get(var_name)
paths = container.get_paths(var_name)
new_container.add(var_name, var[mask], paths)

return new_container

def create_obs_group(input_path):
YAML_PATH = "./obs/bufr_sfcsno_mapping.yaml"
container = bufr.Parser(input_path, YAML_PATH).parse()

sogr = container.get('variables/groundState')
snod = container.get('variables/totalSnowDepth')
snod[(sogr < 10.0) | (sogr == 11.0) | (sogr == 15.0)] = 0.0
container.replace('variables/totalSnowDepth', snod)

print(f" ... Remove filled/missing snow values ...")
masked_container = mask_container(container, (~snod.mask))

encoder = Encoder(YAML_PATH)
data = next(iter(encoder.encode(masked_container).values()))

return data
6 changes: 4 additions & 2 deletions parm/snow/obs/config/sfcsno_snow.yaml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@
halo size: 250e3
obsdatain:
engine:
type: bufr
type: script
script file: "{{ DATA }}/ioda_bufr_python_encoder.py"
args:
input_path: '{{ DATA }}/obs/{{ OPREFIX }}sfcsno.tm00.bufr_d'
obsfile: '{{ DATA }}/obs/{{ OPREFIX }}sfcsno.tm00.bufr_d'
mapping file: '{{ DATA }}/obs/bufr_sfcsno_mapping.yaml'
obsdataout:
engine:
type: H5File
Expand Down
2 changes: 1 addition & 1 deletion sorc/bufr-query
Submodule bufr-query updated 36 files
+4 −2 CMakeLists.txt
+5 −5 cmake/Targets.cmake
+4 −2 core/CMakeLists.txt
+8 −0 core/include/bufr/BufrParser.h
+25 −2 core/include/bufr/DataContainer.h
+523 −1 core/include/bufr/DataObject.h
+5 −7 core/include/bufr/DataProvider.h
+8 −3 core/include/bufr/File.h
+3 −0 core/include/bufr/NcepDataProvider.h
+3 −0 core/include/bufr/WmoDataProvider.h
+66 −1 core/src/bufr/BufrReader/BufrParser.cpp
+51 −11 core/src/bufr/BufrReader/Query/DataProvider/DataProvider.cpp
+8 −0 core/src/bufr/BufrReader/Query/DataProvider/NcepDataProvider.cpp
+7 −0 core/src/bufr/BufrReader/Query/DataProvider/WmoDataProvider.cpp
+12 −5 core/src/bufr/BufrReader/Query/File.cpp
+56 −0 core/src/bufr/DataContainer.cpp
+11 −2 core/src/encoders/netcdf/Encoder.cpp
+31 −0 docs/python_api.rst
+1 −0 docs/uml/BUFR_BigPicture.puml
+25 −28 python/CMakeLists.txt
+17 −10 python/DataObjectFunctions.cpp
+4 −4 python/DataObjectFunctions.h
+4 −0 python/py_bufr.cpp
+17 −1 python/py_data_container.cpp
+2 −1 python/py_file.cpp
+49 −0 python/py_mpi.cpp
+23 −0 python/py_mpi.h
+15 −2 python/py_parser.cpp
+12 −8 test/CMakeLists.txt
+2 −2 test/testinput/bufrtest_fieldname_validation.py
+88 −0 test/testinput/bufrtest_python_mpi_test.py
+21 −12 test/testinput/bufrtest_python_test.py
+3 −0 tools/bufr2netcdf/CMakeLists.txt
+140 −44 tools/bufr2netcdf/bufr2netcdf.cpp
+1 −1 tools/build_scripts/bufr_query_cpp_lint.py
+11 −3 tools/show_queries/QueryPrinter.cpp

0 comments on commit 1c8096f

Please sign in to comment.