Skip to content

Commit a788026

Browse files
Merge branch 'main' into mpas-refactor
2 parents 0892248 + e218864 commit a788026

File tree

10 files changed

+294
-168
lines changed

10 files changed

+294
-168
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ L1_AMSUA_to_netcdf
168168
convert_airs_L2
169169
convert_amsu_L1
170170
convert_L2b
171+
convert_goes_ABI_L1b
171172

172173
# Test programs built by developer_tests
173174
rttov_test

CHANGELOG.rst

+5
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ individual files.
2222

2323
The changes are now listed with the most recent at the top.
2424

25+
**October 22 2024 :: Bug-fixes: WRF and GOES. Tag 11.8.2**
26+
27+
- Force THM to be the WRF-DART temperature variable
28+
- Remove offset on GOES observation converter
29+
2530
**September 27 2024 :: MOM6 mask bug-fix. Tag 11.8.1**
2631

2732
- Fix for MOM6 CESM3 workhorse 2/3 degree grid TL319_t232 to

conf.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
author = 'Data Assimilation Research Section'
2222

2323
# The full version, including alpha/beta/rc tags
24-
release = '11.8.1'
24+
release = '11.8.2'
2525
root_doc = 'index'
2626

2727
# -- General configuration ---------------------------------------------------

models/wrf/model_mod.f90

+16
Original file line numberDiff line numberDiff line change
@@ -694,6 +694,22 @@ subroutine static_init_model()
694694

695695
! JPH now that we have the domain ID just go ahead and get type indices once
696696
! NOTE: this is not strictly necessary - can use only stagger info in the future (???)
697+
698+
! Prevent boundscheck error by making WRF temperature variable 'THM' as mandatory.
699+
! Also, for WRFv4 and later versions variable 'T' is
700+
! diagnostic, thus updating the 'THM' variable (prognostic) is also preferred
701+
! for all DA applications.
702+
703+
704+
705+
if (get_type_ind_from_type_string(id,'T') >=0 .or. get_type_ind_from_type_string(id,'THM') <=0) then
706+
707+
write(errstring,*)'WRF temperature variable THM must appear in DART model_nml', &
708+
' for WRFv4 and later'
709+
call error_handler(E_ERR,'static_init_model', errstring, source, revision, revdate)
710+
711+
endif
712+
697713
wrf%dom(id)%type_u = get_type_ind_from_type_string(id,'U')
698714
wrf%dom(id)%type_v = get_type_ind_from_type_string(id,'V')
699715
wrf%dom(id)%type_w = get_type_ind_from_type_string(id,'W')

models/wrf/readme.rst

+11-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@ Some important WRF-DART updates include:
2424
operator calculations.
2525

2626
- Version 11.5.0: Improves compatibility with WRFv4+ versions where
27-
the prognostic 3D temperature variable is THM.
27+
the prognostic 3D temperature variable is THM. It is now mandatory to
28+
include THM instead of T in the ``wrf_state_variables`` namelist.
29+
30+
2831

2932
It is always recommended that you update your DART version to the
3033
`latest release <https://github.com/NCAR/DART/releases>`__ before beginning new research.
@@ -336,6 +339,13 @@ For example:
336339
'PSFC','QTY_PRESSURE','TYPE_PS','UPDATE','999',
337340

338341

342+
.. Important::
343+
344+
It is mandatory to include ``THM`` instead of ``T`` as the ``TYPE_T`` WRF
345+
temperature variable. This is because ``THM`` is the prognostic temperature variable
346+
that will impact the forecast when updated.
347+
348+
339349
- polar, periodic_x
340350

341351
The ``Polar`` and ``periodic_x`` namelist values are used in global WRF simulations.

models/wrf/tutorial/README.rst

+3-1
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,14 @@ either WRF or DART.
1919
versions 11.4.0 and earlier because those older versions do not account
2020
for different coordinate systems including the sigma hybrid coordinates as
2121
described in `DART Issue #650 <https://github.com/NCAR/DART/pull/650>`__.
22+
2223
Furthermore, older versions do not account for the prognostic temperature variable
2324
switch from ``T`` (perturbation potential temperature) to ``THM``, (either perturbation
2425
potential temperature or perturbation moist potential temperature) as described in
2526
`DART issue #661 <https://github.com/NCAR/DART/issues/661>`__. The current implementation
2627
of the code sets ``T=THM`` because within &dynamics section of ``namelist.input``
27-
``use_theta_m=0``.
28+
``use_theta_m=0``. For this reason, It is mandatory to include ``THM`` instead of
29+
``T`` as the ``TYPE_T`` within the wrf_state_variables namelist.
2830
2931
Earlier version of WRF (v3.9) may run without errors with more recent versions of
3032
DART (later than 11.4.0), but the assimilation performance will be deprecated.

observations/forward_operators/obs_def_rttov_mod.rst

+118-17
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ MODULE ``obs_def_rttov_mod``
66
Overview
77
--------
88

9-
DART RTTOV observation module, including the observation operators for the two primary
9+
The DART RTTOV observation module, including the observation operators for the two primary
1010
RTTOV-observation types -- visible/infrared radiances and microwave
1111
radiances/brightness temperatures.
1212

@@ -46,25 +46,124 @@ Although a model may not have the necessary inputs by itself,
4646
the defaults in RTTOV based on climatology can be used.
4747
The impact on the quality of the results should be investigated.
4848

49-
The quanities for each observation type are defined in obs_def_rttov{13}_mod.f90, like so:
49+
The quanities for each observation type are defined in obs_def_rttov{13}_mod.f90, for example:
5050

5151
.. code::
5252
53-
! HIMAWARI_8_AHI_RADIANCE, QTY_RADIANCE
53+
! HIMAWARI_9_AHI_RADIANCE, QTY_RADIANCE
5454
5555
If you want to change the quantity associated with an observation, for example, if you want
56-
to assimilate HIMAWARI_8_AHI_RADIANCE as QTY_BRIGHTNESS_TEMPERATURE, edit the QTY
57-
in obs_def_rttov{13}_mod.f90 and rerun quickbuild.sh.
56+
to assimilate HIMAWARI_9_AHI_RADIANCE as QTY_BRIGHTNESS_TEMPERATURE, edit the QTY
57+
in obs_def_rttov{13}_mod.f90 and rerun quickbuild.sh. Although both spectral radiance
58+
(mW/cm/m^2/sr) and brightness temperature (Kelvin) quantify the same emitted/reflected
59+
radiance from the atmosphere, the tendency for brightness temperatures to adhere closer
60+
to a gaussian distribution may improve the quality of the assimilation if using
61+
a DART filter type that depends on Gaussian assumptions (e.g. EAKF). This is
62+
an ongoing area of research.
5863

5964

60-
Known issues:
6165

62-
- DART does not yet provide any type of bias correction
63-
- Cross-channel error correlations are not yet supported. A principal component approach has been discussed. For now,
64-
the best bet is to use a subset of channels that are nearly independent of one another.
65-
- Vertical localization will need to be tuned. Turning off vertical localization may work well if you have a large
66-
number of ensemble members. Using the maximum peak of the weighting function or the cloud-top may be appropriate.
67-
There are also other potential approaches being investigated.
66+
RTTOV Metadata
67+
---------------
68+
69+
The RTTOV module ingests metadata from the ``obs_seq.out`` file in order to calculate the
70+
expected observed radiance. For example, a single ``HIMAWARI_9_AHI_RADIANCE``
71+
observation in units of brightness temperature (Kelvin) looks like the following:
72+
73+
.. code::
74+
75+
76+
OBS 1
77+
288.370817896852
78+
0.000000000000000E+000
79+
-1 2 -1
80+
obdef
81+
loc3d
82+
1.766273140907288 0.1535889655351639 34000.00000000000 2
83+
kind
84+
304
85+
visir
86+
100.500000000000 46.6700000000000 -888888.000000000
87+
-888888.000000000
88+
31 9 56 8
89+
-888888.000000000
90+
1
91+
0 154166
92+
1.00000000000000
93+
94+
95+
Please note, that in this example the radiance observation was assigned a vertical level (34000 Pa)
96+
with the ``VERTISPRESSURE`` (integer = 2) vertical coordinate.
97+
Although radiance/BT observations are technically representative of the entire atmospheric
98+
column and not a single vertical level, for some applications where specific channels (wavelength)
99+
are especially sensitive to constituents at particular atmospheric levels, assigning
100+
a vertical level to the observation may improve the skill of the assimilation forecast. This is an ongoing
101+
area of research. As an alternative, it is also common to leave the vertical level
102+
as undefined (VERTISUNDEF, integer = -2), however, this limits the ability to vertically
103+
localize the impact of the observation on the model state.
104+
105+
In this example where the observation is infrared (IR) radiance, the metadata is located after
106+
the ``visir`` line (Note: for microwave observations the metadata would follow ``mw``).
107+
The metadata includes the azimuth and elevation angle of the satellite and the sun respectively. In this instance the sun azimuth/elevation are given missing values (-888888) because
108+
solar reflectance has no impact on an IR radiance observation. Also note, the observation
109+
provides a 4 integer description (31/9/56/8) of the platform/satellite/sensor/channel
110+
combination specific to this satellite observation. For more information on this
111+
metadata refer to this GOES observation converter example here:
112+
:doc:`../../observations/obs_converters/GOES/README`
113+
114+
.. Important ::
115+
116+
It is important that the user confirms the satellite integer metadata within
117+
the obs_seq.out file matches the metadata within rttov_sensor_db.csv. Furthermore,
118+
confirm that the channel as defined in the obs_seq.out file matches the channel
119+
available in the RTTOV coefficient file (.dat). See next section for more information.
120+
121+
RTTOV coefficient files
122+
-----------------------
123+
124+
The RTTOV coefficent file (.dat) contains the appropriate parameter values for a specific satellite
125+
radiance observation. The DART file (``rttov_sensor_db.csv``) refers to the RTTOV coefficent
126+
file. For the ``HIMAWARI_9_AHI_RADIANCE`` observation type, for example, the following information
127+
is provided within ``rttov_sensor_db.csv``:
128+
129+
.. code::
130+
131+
HIMAWARI_9_AHI 31 9 56 ir rtcoef_himawari_9_ahi.dat
132+
133+
The coefficent file (.dat) is included with the RTTOV installation and can be found at the
134+
path ``${RTTOV_install}/rtcoef_rttov13/rttov9pred54L/rtcoef_himawari_9_ahi.dat``. This file
135+
should be included in your run folder at runtime. Additional coefficent files for a given
136+
satellite sensor may be required.
137+
138+
It is good practice to always view your coefficent file (.dat) to confirm that the
139+
channels listed in the file match the channel from the ``obs_seq.out`` file. The coefficent
140+
file will include a list of channels (wavebands) with the associated wavelength (microns).
141+
142+
143+
.. Important ::
144+
145+
The RTTOV package includes multiple coefficent files (e.g. all wavelengths, IR only, etc.) that
146+
contain the appropriate parameter data for each satellite/sensor/channel combination. Whether
147+
the file contains all wavelengths versus only IR wavelengths is **extremely important** because
148+
it will shift the value of the channel number. Recommended practice is to choose a coefficient file
149+
with all channels included. If, on the other hand, you subset your coefficent file to only include
150+
IR channels, you should edit your observation converter such that the channels match.
151+
If RTTOV always returns expected observations of radiance = 0, or if the prior expected radiance
152+
is unusually biased from your prior, this could be a sign there is a mismatch between the
153+
obs_seq.out channel and the coefficient file channel.
154+
155+
156+
157+
Known issues:
158+
-------------
159+
- DART does not provide any type of observation bias correction. It may be appropriate to preprocess your radiance
160+
observations to remove systematic bias before assimilation, using techniques such as cumulative distribution
161+
function (CDF) matching.
162+
- Cross-channel error correlations are not supported. A principal component approach has been discussed. For now,
163+
we recommend to use a subset of channels that are nearly independent of one another.
164+
- Vertical localization will need to be tuned based on the research application. Turning off vertical localization
165+
may work well if you have a large number of ensemble members. Using the maximum peak of the channel weighting
166+
function or the cloud-top height to set a vertical location for an observation may be appropriate.
68167

69168

70169
The namelist ``&obs_def_rttov_mod_nml`` is read from file ``input.nml``. Namelists start with an ampersand '&'
@@ -159,11 +258,13 @@ RTTOV v12 Namelist
159258
+------------------------+--------------------+----------------------------------------------------------------------+
160259
| Item | Type | Description |
161260
+========================+====================+======================================================================+
162-
| rttov_sensor_db_file | character(len=512) | The location of the RTTOV sensor database. The format for the |
163-
| | | database is a comma-separated file. The columns of the database are |
164-
| | | the DART observation-kind, the platform/satellite/sensor ID, the |
165-
| | | observation type, the coefficient file, and a comma-separated list |
166-
| | | of RTTOV channels to use for this observation type. |
261+
| rttov_sensor_db_file | character(len=512) | The location of the DART file with RTTOV sensor metadata. The format |
262+
| | | is a comma-separated file. The columns are the DART |
263+
| | | observation type, the platform/satellite/sensor ID, the |
264+
| | | wavelength band, the coefficient file, and a comma-separated list |
265+
| | | of RTTOV channels to use for this observation type. The default file |
266+
| | | does not provide a list of channels, thus default behavior is to |
267+
| | | make all channels available. |
167268
+------------------------+--------------------+----------------------------------------------------------------------+
168269
| first_lvl_is_sfc | logical | Whether the first level of the model represents the surface (true) |
169270
| | | or the top of the atmosphere (false). |

0 commit comments

Comments
 (0)