1 | General description |
---|
2 | ------------------- |
---|
3 | Features and advantages of observational nudging are discussed in (*) below. |
---|
4 | The method uses relaxation terms based on the model error at observational |
---|
5 | stations, and the relaxation is such as to reduce this error. |
---|
6 | Each observation has a radius of influence, a time window, and a relaxation |
---|
7 | time scale determined by user-specified input. These determine where, when, |
---|
8 | and how much it affects the model solution. Typical model grid points may |
---|
9 | be within the radius of influence of several observations, and their |
---|
10 | contributions are weighted according to the distance from the observation(s). |
---|
11 | Before performing obs-nudging, you will need to generate an observation |
---|
12 | input file for each WRF domain. The observation file(s) contain chronological |
---|
13 | lists of the 3D positions and values of each observation, in a specific format. |
---|
14 | It is critical that your observations be listed in chronological time order! |
---|
15 | |
---|
16 | * Liu, Y., A. Bourgeois, T. Warner, S. Swerdlin and J. Hacker, 2005: An |
---|
17 | implementation of obs-nudging-based FDDA into WRF for supporting |
---|
18 | ATEC test operations. 2005 WRF user workshop. Paper 10.7. |
---|
19 | |
---|
20 | |
---|
21 | How to use the obs-data converter |
---|
22 | ------------------------------------- |
---|
23 | A utility program for converting observation data to the format required by |
---|
24 | WRF has been provided (RT_fdda_reformat_obsnud.pl). The converter assumes |
---|
25 | that your observation data is in standard LITTLE_R format. |
---|
26 | |
---|
27 | To convert your data that is in LITTLE_R format: |
---|
28 | |
---|
29 | RT_fdda_reformat_obsnud.pl yourfilename |
---|
30 | |
---|
31 | where "yourfilename" is the obs-data in LITTLE_R format. The converter will |
---|
32 | produce a file named yourfilename.obsnud, in the format required by the WRF |
---|
33 | model. |
---|
34 | |
---|
35 | Note that during the conversion process: |
---|
36 | |
---|
37 | 1). P,T,U,V and RH fields are extracted. |
---|
38 | |
---|
39 | 2). U and V are assumed to be the wind components rotated to |
---|
40 | the model map-projection (see 3DVAR and MM5 Little_R). |
---|
41 | |
---|
42 | 3). SPD, DIR and Td fields are ignored. |
---|
43 | |
---|
44 | 4). For upper-air data, currently WRF nudging only takes |
---|
45 | those data with valid pressure records. For obs with |
---|
46 | height levels (e.g. wind profilers data), users need to |
---|
47 | calculate or estimate the pressure value. Inaccurate |
---|
48 | estimate of pressure will lead to bad data assimilation. |
---|
49 | |
---|
50 | |
---|
51 | Naming your obs-nudge input files |
---|
52 | --------------------------------- |
---|
53 | After you have converted your obs data file to the proper format for WRF, |
---|
54 | you will need to rename it according to the naming convention for the WRF |
---|
55 | domain on which the obs-nudging is to be performed. For example, for |
---|
56 | observations to be used in Domain 1, use the naming convention OBS_DOMAIN101, |
---|
57 | for Domain 2, OBS_DOMAIN201, etc. |
---|
58 | |
---|
59 | These files must be present in your WRF run directory, along with the usual |
---|
60 | WRF input and boundary files. |
---|
61 | |
---|
62 | |
---|
63 | |
---|
64 | How to activate obs-nudging |
---|
65 | --------------------------- |
---|
66 | To activate the observational nudging option in WRF, you will need to set |
---|
67 | the obs_nudge_opt flag(s) in the WRF "fdda" namelist. Note that there is |
---|
68 | a unique flag for each WRF domain in which you want to activate obs-nudging. |
---|
69 | |
---|
70 | To activate the print statements within the obs-nudging subroutines ERROB, |
---|
71 | NUDOB, and IN4DOB, set the respective print flags obs_ipf_errob, |
---|
72 | obs_ipf_nudob, and obs_ipf_in4dob to ".true." You can then easily verify that |
---|
73 | you have activated observational nudging by observing text in your WRF |
---|
74 | "standard out" that tell you how many obs stations are being processed at |
---|
75 | given model timesteps. This information will look something like: |
---|
76 | |
---|
77 | 0****** CALL IN4DOB AT KTAU = 8 AND XTIME = 24.00: NSTA = 11040 ****** |
---|
78 | ++++++CALL ERROB AT KTAU = 8 AND INEST = 1: NSTA = 11040 ++++++ |
---|
79 | |
---|
80 | These lines will print out for each nest in which you have activated nudging, |
---|
81 | while nudging is active on that domain. |
---|
82 | |
---|
83 | Below is an example of a namelist set up to activate obs-nudging on domains |
---|
84 | 1, 2, and 3: |
---|
85 | |
---|
86 | &fdda |
---|
87 | obs_nudge_opt = 1,1,1,0,0 |
---|
88 | max_obs = 150000, |
---|
89 | fdda_start = 0., 0., 0., 0., 0. |
---|
90 | fdda_end = 99999., 99999., 99999., 99999., 99999. |
---|
91 | obs_nudge_wind = 1,1,1,1,1 |
---|
92 | obs_coef_wind = 6.E-4,6.E-4,6.E-4,6.E-4,6.E-4 |
---|
93 | obs_nudge_temp = 1,1,1,1,1 |
---|
94 | obs_coef_temp = 6.E-4,6.E-4,6.E-4,6.E-4,6.E-4 |
---|
95 | obs_nudge_mois = 1,1,1,1,1 |
---|
96 | obs_coef_mois = 6.E-4,6.E-4,6.E-4,6.E-4,6.E-4 |
---|
97 | obs_rinxy = 240.,240.,180.,180,180 |
---|
98 | obs_rinsig = 0.1, |
---|
99 | obs_twindo = 0.6666667,0.6666667,0.6666667,0.6666667,0.6666667, |
---|
100 | obs_npfi = 10, |
---|
101 | obs_ionf = 2, 2, 2, 2, 2, |
---|
102 | obs_idynin = 0, |
---|
103 | obs_dtramp = 40., |
---|
104 | obs_prt_freq = 10, 10, 10, 10, 10, |
---|
105 | obs_prt_max = 10 |
---|
106 | obs_ipf_errob = .true. |
---|
107 | obs_ipf_nudob = .true. |
---|
108 | obs_ipf_in4dob = .true. |
---|
109 | obs_ipf_init = .true. |
---|
110 | |
---|
111 | In addition, add the following in &time_control: |
---|
112 | |
---|
113 | auxinput11_interval_s = 180, 180, 180, 180, 180, |
---|
114 | auxinput11_end_h = 6, 6, 6, 6, 6, |
---|
115 | |
---|
116 | |
---|
117 | ********************* |
---|
118 | NEW FOR V3.1 |
---|
119 | ********************* |
---|
120 | |
---|
121 | 1) Enhanced diagnostics |
---|
122 | -------------------- |
---|
123 | For version 3.1, diagnostics have been enhanced to allow the user to verify |
---|
124 | grid placement for observations throughout the model run. For v3.1, the fdda namelist |
---|
125 | variable "nobs_obs_prt" is obsolete, and has been replaced by the two namelist |
---|
126 | variables: |
---|
127 | |
---|
128 | obs_prt_max - maximum allowed obs entries in diagnostic printout (integer) |
---|
129 | obs_prt_freq - frequency in obs index for diagnostic printout (max_domains integer) |
---|
130 | |
---|
131 | For example, specifying: |
---|
132 | |
---|
133 | obs_prt_max = 5, |
---|
134 | obs_prt_freq = 1000, 500, 100, |
---|
135 | |
---|
136 | allows up to 5 observations and their locations to be reported for each model timestep |
---|
137 | at which the obs are read and weights calculated (see obs_ionf). For this example, the |
---|
138 | obs are reported for domain 1 with an obs-index frequency of 1000, on domain 2 with a |
---|
139 | frequency of 500, and on domain 3 with a frequency of 100. Below is an example of the |
---|
140 | initial obs diagnostic report produced for each nest, using the namelist values above. |
---|
141 | |
---|
142 | ++++++CALL ERROB AT KTAU = 0 AND INEST = 1: NSTA = 17090 ++++++ |
---|
143 | |
---|
144 | REPORTING OBS MASS-PT LOCS FOR NEST 1 AT XTIME= 0.0 MINUTES |
---|
145 | FREQ=1000, MAX= 5 LOCS, NEWLY READ OBS ONLY, -999 => OBS OFF PROC |
---|
146 | |
---|
147 | OBS# I J K OBS LAT OBS LON XLAT(I,J) XLONG(I,J) TIME(hrs) |
---|
148 | 1 5.282 2.658 1.000 27.580 -97.220 27.580 -97.220 0.00 |
---|
149 | 1001 47.851 9.468 32.377 30.380 -84.360 30.380 -84.360 0.00 |
---|
150 | 2001 40.728 19.834 26.618 33.160 -86.700 33.160 -86.700 0.00 |
---|
151 | 3001 60.866 30.631 -99.000 36.080 -79.950 -999.000 -999.000 0.00 |
---|
152 | 4001 73.216 38.315 -99.000 37.930 -75.480 -999.000 -999.000 0.00 |
---|
153 | ... |
---|
154 | |
---|
155 | ++++++CALL ERROB AT KTAU = 0 AND INEST = 2: NSTA = 3504 ++++++ |
---|
156 | |
---|
157 | REPORTING OBS MASS-PT LOCS FOR NEST 2 AT XTIME= 0.0 MINUTES |
---|
158 | FREQ= 500, MAX= 5 LOCS, NEWLY READ OBS ONLY, -999 => OBS OFF PROC |
---|
159 | |
---|
160 | OBS# I J K OBS LAT OBS LON XLAT(I,J) XLONG(I,J) TIME(hrs) |
---|
161 | 1 62.717 3.505 1.000 34.600 -78.580 -999.000 -999.000 0.00 |
---|
162 | 501 45.014 30.857 32.102 37.200 -80.410 37.200 -80.410 0.00 |
---|
163 | 1001 15.585 54.082 -99.000 39.410 -83.810 -999.000 -999.000 0.00 |
---|
164 | 1501 18.822 78.673 1.000 41.690 -83.400 -999.000 -999.000 0.00 |
---|
165 | 2001 67.015 103.930 1.000 43.830 -77.150 -999.000 -999.000 0.00 |
---|
166 | ... |
---|
167 | |
---|
168 | ++++++CALL ERROB AT KTAU = 0 AND INEST = 3: NSTA = 606 ++++++ |
---|
169 | |
---|
170 | REPORTING OBS MASS-PT LOCS FOR NEST 3 AT XTIME= 0.0 MINUTES |
---|
171 | FREQ= 100, MAX= 5 LOCS, NEWLY READ OBS ONLY, -999 => OBS OFF PROC |
---|
172 | |
---|
173 | OBS# I J K OBS LAT OBS LON XLAT(I,J) XLONG(I,J) TIME(hrs) |
---|
174 | 1 48.735 3.730 1.000 38.220 -76.040 -999.000 -999.000 0.00 |
---|
175 | 101 10.646 25.032 34.295 38.980 -77.460 38.980 -77.460 0.00 |
---|
176 | 201 25.010 28.538 9.296 39.050 -76.880 39.050 -76.880 0.00 |
---|
177 | 301 28.675 46.438 1.000 39.590 -76.670 -999.000 -999.000 0.15 |
---|
178 | 401 12.030 38.804 1.000 39.400 -77.360 39.400 -77.360 0.30 |
---|
179 | |
---|
180 | |
---|
181 | With this report, the user can verify the WRF mapping of each reported observation. |
---|
182 | The report shows: |
---|
183 | |
---|
184 | (1) the real-valued WRF grid (I,J,K) location to which the obs is mapped, |
---|
185 | (2) the input obs latitude and longitude coordinate (OBS LAT, OBS LON), and |
---|
186 | (3) the corresponding model lat, lon coordinate (XLAT(I,J), XLONG(I,J)) for (I,J,K) |
---|
187 | (4) the input obs time in hours into the run |
---|
188 | |
---|
189 | Note that each processor produces a report (rsl.out.0000, rsl.out.0001, etc) for the |
---|
190 | same set of observations, but that full information for an individual observation is |
---|
191 | only available in the report from the processor whose grid "patch" contains that |
---|
192 | observation. A -999.000 entry in the XLAT and XLONG columns indicates that the |
---|
193 | observation is not located on the processor producing the report. In the example |
---|
194 | above, the rsl.out.0000 file indicates that OBS#1 for nest 3 is not located on the |
---|
195 | WRF patch handled by process 0. OBS#1 falls on the patch for process 1, and the |
---|
196 | report for nest 3 from the rsl.out.0001 file looks like: |
---|
197 | |
---|
198 | ++++++CALL ERROB AT KTAU = 0 AND INEST = 3: NSTA = 606 ++++++ |
---|
199 | |
---|
200 | REPORTING OBS MASS-PT LOCS FOR NEST 3 AT XTIME= 0.0 MINUTES |
---|
201 | FREQ= 100, MAX= 5 LOCS, NEWLY READ OBS ONLY, -999 => OBS OFF PROC |
---|
202 | |
---|
203 | OBS# I J K OBS LAT OBS LON XLAT(I,J) XLONG(I,J) TIME(hrs) |
---|
204 | 1 48.735 3.730 1.000 38.220 -76.040 38.220 -76.040 0.00 |
---|
205 | 101 10.646 25.032 -99.000 38.980 -77.460 -999.000 -999.000 0.00 |
---|
206 | 201 25.010 28.538 -99.000 39.050 -76.880 -999.000 -999.000 0.00 |
---|
207 | 301 28.675 46.438 1.000 39.590 -76.670 -999.000 -999.000 0.15 |
---|
208 | 401 12.030 38.804 1.000 39.400 -77.360 -999.000 -999.000 0.30 |
---|
209 | |
---|
210 | which confirms this. |
---|
211 | |
---|
212 | Note that the namelist variable obs_prt_max can be declared as large as desired, but |
---|
213 | a value larger than 10^4 might significantly affect performance. |
---|
214 | |
---|
215 | CAUTION! Depending on how many observations are in your obs-nudge input file, be |
---|
216 | aware that your diagnostic output can potentially produce obs_prt_max/obs_prt_freq |
---|
217 | lines of output for each domain, for each obs input step! |
---|
218 | |
---|
219 | 2) Option to input wind vectors in Earth coordinates |
---|
220 | |
---|
221 | In previous WRF versions, input wind vectors were required to be in WRF grid-relative |
---|
222 | coordinates (that is, already rotated from Earth coordinates to the WRF grid). In |
---|
223 | WRFV3.1, the user may specify winds in Earth coordinates and have the WRF model |
---|
224 | internally rotate them to the WRF grid. To activate this capability, the user must |
---|
225 | specify a u- and v-component QC flag value of 129 for each wind vector that is to be |
---|
226 | rotated. Otherwise, the model assumes the wind vector to be WRF grid-relative. For |
---|
227 | future releases, this option will possibly be activated by a namelist variable. |
---|
228 | |
---|
229 | 3) Option for Obs-in-height |
---|
230 | |
---|
231 | I previous WRF versions, the vertical model coordinate for an upper air observation |
---|
232 | is determined by its input pressure field. In WRFV3.1, the obs height field may be |
---|
233 | used instead. In the new implementation, if the obs pressure field contains "missing |
---|
234 | value" -888888 and the obs height field good, the vertical model coordinate for the |
---|
235 | obs is determined using a geopotential height calculation. |
---|
236 | |
---|
237 | 4) U-, V-, and T-ratios are calculated in all surface schemes |
---|
238 | |
---|
239 | In previous WRF versions, calculations for u-,v-, and t- ratios (from 10 meter winds |
---|
240 | and 2 meter temperatures) are only done in the SFCLAY surface scheme. These ratios |
---|
241 | are now calculated for all surface scheme options. (The ratios are used in the |
---|
242 | obs-nudging routine to correct obs to model sigma level using reverse similarity |
---|
243 | theory.) |
---|