| 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.) |
|---|