Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add precipitable clouds in microwave all-sky assimilations #63

Merged
merged 3 commits into from
Jan 16, 2025
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions observation_chronicle/atmosphere/atms_n21.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Instrument metadata
# -------------------
commissioned: 2023-05-01T12:00:00

observer_type: satellite # Type of chronicle to use

# Instrument initial configuration
# --------------------------------
channel_variables:
simulated: min
active: min
biascorrtd: min
error: max
error_cld: max
ermax: max
var_b: min
var_pg: min
icld_det: min
icloud: min
iaerosol: min
channel_values:
1: [ 1, 1, 1, 4.50, 20.00, 4.50, 10.00, 0.00, -2, 1, -1 ]
2: [ 1, 1, 1, 4.50, 25.00, 4.50, 10.00, 0.00, -2, 1, -1 ]
3: [ 1, 1, 1, 4.50, 12.00, 3.00, 10.00, 0.00, -2, 1, -1 ]
4: [ 1, 1, 1, 2.50, 7.00, 3.00, 10.00, 0.00, -2, 1, -1 ]
5: [ 1, 1, 1, 0.55, 3.50, 1.00, 10.00, 0.00, -2, 1, -1 ]
6: [ 1, 1, 1, 0.30, 3.00, 1.00, 10.00, 0.00, -2, 1, -1 ]
7: [ 1, 1, 1, 0.30, 0.80, 1.00, 10.00, 0.00, -2, 1, -1 ]
8: [ 1, 1, 1, 0.40, 0.40, 1.00, 10.00, 0.00, -2, 1, -1 ]
9: [ 1, 1, 1, 0.40, 0.40, 1.00, 10.00, 0.00, -2, 1, -1 ]
10: [ 1, 1, 1, 0.40, 0.40, 1.00, 10.00, 0.00, -2, 1, -1 ]
11: [ 1, 1, 1, 0.45, 0.45, 1.00, 10.00, 0.00, -2, 1, -1 ]
12: [ 1, 1, 1, 0.45, 0.45, 1.00, 10.00, 0.00, -2, 1, -1 ]
13: [ 1, 1, 1, 0.55, 0.55, 1.00, 10.00, 0.00, -2, 1, -1 ]
14: [ 1, 1, 1, 0.80, 0.80, 2.00, 10.00, 0.00, -2, 1, -1 ]
15: [ 1, 1, 0, 4.00, 4.00, 4.50, 10.00, 0.00, -2, 1, -1 ]
16: [ 1, 1, 1, 4.00, 19.00, 4.50, 10.00, 0.00, -2, 1, -1 ]
17: [ 1, 1, 1, 4.00, 30.00, 2.00, 10.00, 0.00, -2, 1, -1 ]
18: [ 1, 1, 1, 3.50, 25.00, 2.00, 10.00, 0.00, -2, 1, -1 ]
19: [ 1, 1, 1, 3.00, 16.50, 2.00, 10.00, 0.00, -2, 1, -1 ]
20: [ 1, 1, 1, 3.00, 12.00, 2.00, 10.00, 0.00, -2, 1, -1 ]
21: [ 1, 1, 1, 3.00, 9.00, 2.00, 10.00, 0.00, -2, 1, -1 ]
22: [ 1, 1, 1, 3.00, 6.50, 2.00, 10.00, 0.00, -2, 1, -1 ]
142 changes: 137 additions & 5 deletions observations/atmosphere/amsua_n19.yaml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,10 @@
# --------------------
obs operator:
name: CRTM
Absorbers: [H2O, O3]
Clouds: [Water, Ice]
Cloud_Fraction: 1.0
Absorbers: [H2O, O3, CO2]
Clouds: &Clouds_in_amsua_n19_operator [Water, Ice, Rain, Snow, Graupel]
danholdaway marked this conversation as resolved.
Show resolved Hide resolved
# Cloud_Fraction: 1.0
Cloud_Seeding: true
obs options:
Sensor_ID: &{{observation_from_jcb}}_sensor_id amsua_n19
EndianType: little_endian
Expand All @@ -34,6 +35,8 @@
obs bias:
input file: "{{atmosphere_obsbiasin_path}}/{{atmosphere_obsbiasin_prefix}}{{observation_from_jcb}}{{atmosphere_obsbiasin_suffix}}"
output file: "{{atmosphere_obsbiasout_path}}/{{atmosphere_obsbiasout_prefix}}{{observation_from_jcb}}{{atmosphere_obsbiasout_suffix}}"
variables without bc: [brightnessTemperature]
channels: &{{observation_from_jcb}}_not_bias_corrected {{ get_satellite_variable(observation_from_jcb, "not_biascorrtd") }}
danholdaway marked this conversation as resolved.
Show resolved Hide resolved
variational bc:
predictors:
- name: constant
Expand Down Expand Up @@ -64,7 +67,25 @@

# Observation Filters (QC)
# ------------------------
obs filters:
obs prior filters:
# Zero Atmospheric clouds in CRTM where water_area_fraction < 0.99
- filter: Variable Assignment
assignments:
- name: MetaData/zeroCloudInCRTM
type: int
function:
name: ObsFunction/Conditional
options:
# firstmatchingcase: false
defaultvalue: 0 # Will not zero clouds by default
cases:
- where:
- variable:
name: GeoVaLs/water_area_fraction
maxvalue: 0.99
value: 1 # Will zero clouds by default

obs post filters:
- filter: BlackList
filter variables:
- name: brightnessTemperature
Expand Down Expand Up @@ -124,6 +145,7 @@
channels: *{{observation_from_jcb}}_simulated_channels
options:
channels: *{{observation_from_jcb}}_simulated_channels
Clouds: *Clouds_in_amsua_n19_operator
obserr_clearsky: *{{observation_from_jcb}}_err0
clwret_function:
name: ObsFunction/CLWRetMW
Expand Down Expand Up @@ -301,6 +323,8 @@
x1: *{{observation_from_jcb}}_x1
err0: *{{observation_from_jcb}}_err0
err1: *{{observation_from_jcb}}_err1
threshold: 3
threshold_precip: 2.5
obserr_bound_max: [{{ get_satellite_variable(observation_from_jcb, "ermax") }}]
action:
name: reject
Expand Down Expand Up @@ -334,8 +358,116 @@
minvalue: 1.0e-12
action:
name: reject
# Column liquid cloud
- filter: Variable Assignment
assignments:
- name: DerivedMetaData/ColumnLiquidCloud
type: float
function:
name: TotalColumnCloudGuess@ObsFunction
options:
cloud_content: mass_content_of_cloud_liquid_water_in_atmosphere_layer
# Column ice cloud
- filter: Variable Assignment
assignments:
- name: DerivedMetaData/ColumnIceCloud
type: float
function:
name: TotalColumnCloudGuess@ObsFunction
options:
cloud_content: mass_content_of_cloud_ice_in_atmosphere_layer
# Combined ColumnLiquidCloud + ColumnIceCloud
- filter: Variable Assignment
assignments:
- name: DerivedMetaData/ColumnLiquidIceCloud
type: float
function:
name: ObsFunction/Arithmetic
options:
variables:
- name: DerivedMetaData/ColumnLiquidCloud
- name: DerivedMetaData/ColumnIceCloud
coefs: [1, 1]
# replace zero by 1e-7 in DerivedMetaData/ColumnLiquidIceCloud
- filter: Variable Assignment
assignments:
- name: DerivedMetaData/ColumnLiquidIceCloud
type: float
value: 1.0e-7
where:
- variable:
name: DerivedMetaData/ColumnLiquidIceCloud
maxvalue: 1.0e-8


# ratio of liquid /(Liquid+Ice)
- filter: Variable Assignment
assignments:
- name: DerivedMetaData/ColumnRatioLiquidCloud
type: float
function:
name: ObsFunction/ElementMultiply
options:
variables:
- name: DerivedMetaData/ColumnLiquidCloud
- name: DerivedMetaData/ColumnLiquidIceCloud
exponents: [1,-1]
# TotalColumnVaporGuess
- filter: Variable Assignment
assignments:
- name: DerivedMetaData/TotalColumnVaporGuess
type: float
function:
name: ObsFunction/TotalColumnVaporGuess
# potentialTemperature at surface
- filter: Variable Assignment
assignments:
- name: DerivedMetaData/PotentialTemperatureSurface
type: float
function:
name: PotentialTemperatureGuess2D@ObsFunction
options:
approximate pressure: surface_pressure
# potentialTemperature near 700 hPa
- filter: Variable Assignment
assignments:
- name: DerivedMetaData/PotentialTemperatureAt700hPa
type: float
function:
name: PotentialTemperatureGuess2D@ObsFunction
options:
approximate pressure: 70000.0
# stability = Difference between PotentialTemperatur values
- filter: Variable Assignment
assignments:
- name: DerivedMetaData/PotentialTemperatureDiff
type: float
function:
name: ObsFunction/Arithmetic
options:
variables:
- name: DerivedMetaData/PotentialTemperatureAt700hPa
- name: DerivedMetaData/PotentialTemperatureSurface
coefs: [1, -1]
## cao_check
- filter: BlackList
filter variables:
- name: brightnessTemperature
channels: 1-6, 15
where:
- variable:
name: ObsFunction/TotalColumnVaporGuess
maxvalue: 8.0
- variable:
name: DerivedMetaData/ColumnRatioLiquidCloud
maxvalue: 0.5
- variable:
name: DerivedMetaData/ColumnLiquidIceCloud
minvalue: 1.0e-6
- variable:
name: DerivedMetaData/PotentialTemperatureDiff
maxvalue: 12.0
action:
name: reject
# GeoVaLs for Driving Observation Operators (testing mode)
# --------------------------------------------------------
geovals:
Expand Down
Loading
Loading