-
Notifications
You must be signed in to change notification settings - Fork 0
/
README
210 lines (188 loc) · 9.39 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
Version 1.3.2 February 2012
Send comments and questions to Steve at decker@envsci.rutgers.edu
wrf2gem reads WRF output in netCDF format and produces a GEMPAK file according
to the specifications in convert.nl. Some diagnostics can be output on
isobaric surfaces, and GEMPAK can handle other diagnostics or interpolations.
wrf2gem is written in standard Fortran 90.
* Compilation Instructions *
Hopefully, it's just a matter of typing:
make
However, you may want or need to make changes to the Makefile. Things to watch
out for:
1) The FC setting should match your Fortran 90 compiler.
2) You may want other compiler flags (FFLAGS).
3) Your libnetcdf.a and gemlib.a may be in different locations than mine.
4) Depending on your GEMPAK version, you may need to link additional libraries
in addition to gemlib.a. I'm currently using version 5.7.2p2.
5) The module files created during compilation of your netCDF library need to
be findable by your compiler.
* Description of convert.nl *
Here are the variables you can set in the namelist:
numFiles -- number of WRF output filenames you would like to process
(i.e., the number of entries in fName)
fName -- WRF output filename(s) from which to read data
[&INITTIME no longer needed.]
gFName -- What your GEMPAK file is or should be called
maxGrd -- The maximum number of grids allowed in a new GEMPAK file
pack -- Store grids using 16-bit GRIB packing (.true.) or do not (.false.)
overwrite -- Add to and/or overwrite existing GEMPAK files (.true.) or do not
(.false.).
num -- The number of variables/diagnostics to output (i.e., the number of
entries in outFields)
outFields -- Which variables/diagnostics to output. The IDs are as follows:
Variables
1 - HGT: Terrain height (m)
2 - T2: 2-m temperature (K)
3 - Q2: 2-m water vapor mixing ratio (kg/kg)
4 - ZNU: Eta coordinate on mass (half) levels
5 - PB: Base state pressure (Pa)
6 - P: Perturbation pressure (Pa)
7 - T: Perterbation potential temperature (K)
8 - U: U component of wind (m/s)
9 - V: V component of wind (m/s)
10 - W: W component of wind (m/s)
11 - U10: U at 10 m (m/s)
12 - V10: V at 10 m (m/s)
13 - QVAPOR: Water vapor mixing ratio (kg/kg)
14 - QCLOUD: Cloud water mixing ratio (kg/kg)
15 - QICE: Ice mixing ratio (kg/kg)
16 - RAINC: Accumulated cumulus precip (mm)
17 - RAINNC: Accumulated grid-scale precip (mm)
18 - PH: Perturbation geopotential (m^2/s^2)
19 - PHB: Base-state geopotential (m^2/s^2)
20 - ZNW: Eta coordinate on w (full) levels
21 - LU_INDEX: Land use category
22 - MU: Perturbation dry air mass in column (Pa)
23 - MUB: Base-state dry air mass in column (Pa)
24 - TH2: 2-m potential temperature (K)
25 - QRAIN: Rain water mixing ratio (kg/kg)
26 - QSNOW: Snow mixing ratio (kg/kg)
27 - QGRAUP: Graupel mixing ratio (kg/kg)
28 - PBLH: PBL height (m)
29 - SST: Sea surface temperature (K)
30 - TSK: Surface skin temperature (K)
31 - SWDOWN: Downward short wave flux at ground surface (W/m^2)
32 - GLW: Downward long wave flux at ground surface (W/m^2)
33 - GRDFLX: Ground heat flux (W/m^2)
34 - HFX: Upward heat flux at the surface (W/m^2)
35 - QFX: Upward moisture flux at the surface (W/m^2)
36 - LH: Latent heat flux at the surface (W/m^2)
Some of these variables (like 4 and 20) don't make sense to output to a GEMPAK
file and will be ignored.
Diagnostics
101 - Surface pressure (hPa)
102 - Pressure at 2 m (hPa)
103 - Sea level pressure (hPa)
104 - Convective precipitation accumulated over one hour (mm)
105 - Total precipitation accumulated over one hour (mm)
106 - Total precipitation accumulated over three hours (mm)
107 - Total precipitation accumulated over six hours (mm)
108 - Total accumulated precipitation (mm)
109 - Pressure (hPa)
110 - Potential temperature (K)
111 - Unstaggered U component of wind (m/s)
112 - Unstaggered V component of wind (m/s)
113 - Cloud water + Ice mixing ratio (kg/kg)
114 - Unstaggered W component of wind (m/s)
115 - 2-m temperature including at initial time (K)
116 - 2-m water vapor mixing ratio including at initial time (kg/kg)
117 - U at 10 m including at initial time (m/s)
118 - V at 10 m including at initial time (m/s)
119 - Lifted Index using lowest 4 levels (K)
120 - Mean relative humidity (%) in 850-500-hPa layer
121 - Geopotential height (m) on w (full) levels
122 - 2-m specific humidity (kg/kg)
123 - Specific humidity (kg/kg)
124 - Temperature (K)
125 - Geopotential height (m) on half levels
126 - Dry air mass in column (Pa)
127 - Most unstable CAPE w/ virt. temp. correction (J/kg)
128 - Lifted parcel level of the most unstable parcel (m)
129 - Surface-based CAPE w/ virt. temp. correction (J/kg)
130 - Surface-based CIN w/ virt. temp. correction (J/kg)
131 - Mixed-layer CAPE w/ virt. temp. correction (J/kg)
132 - Mixed-layer CIN w/ virt. temp. correction (J/kg)
133 - Mixed-layer LCL (m)
134 - Mixed-layer LFC (m)
135 - U component of Bunkers storm motion (m/s)
136 - V component of Bunkers storm motion (m/s)
137 - 0-1-km storm relative helicity (m2/s2)
138 - Column integrated precipitable water (cm)
139 - Reflectivity (dBZ)
140 - Composite reflectivity (dBZ)
Diagnostics interpolated to isobaric levels
501 - Temperature (K)
502 - U component of wind (m/s)
503 - V component of wind (m/s)
504 - W component of wind (m/s)
505 - Geopotential height (m)
506 - Specific humidity (kg/kg)
pb -- Bottom pressure level for isobaric diagnostics
pt -- Top pressure level for isobaric diagnostics
dp -- Pressure interval for isobaric diagnostics
* Adding Diagnostics *
The conversion code is designed to be extended fairly easily (I hope). Here's
what you should do if you'd like to add a diagnostic or variable.
1) Determine if you're adding a variable (i.e., simply moving grids from the
WRF output to the GEMPAK file with no calculation whatsoever) or a
diagnostic (everything else).
2) The variable case is easy. Modify registry.f90 as follows:
a) Add a comment after this line:
! 36 - LH: Latent heat flux at the surface (W/m^2)
b) Increment the value of LastWRF in this line:
integer, parameter :: LastWRF = 36, FirstDiag = 101, LastDiag = 140, &
c) Insert an identifier for your variable after this line:
LaHeat = 36
d) Add an appropriate initialization statement after this line:
wrfVar(LaHeat) = wrf_var(1, 0, -1, None, "LH", "LH", .false.)
The wrf_var type definition (around line 195) will be helpful here.
3) For the diagnostic case, make modifications to registry.f90 as follows:
a) Add a comment after this line:
! 140 - Composite reflectivity (dBZ)
b) Increment the value of LastDiag in this line:
integer, parameter :: LastWRF = 36, FirstDiag = 101, LastDiag = 140, &
c) Insert an identifier for your diagnostic after this line:
CompRefl = 140
d) Add an appropriate initialization statement after this line:
diagVar(CompRefl) = diag_var(1, 0, -1, None, CompRefl, "CREF")
The diag_var type definition (around line 205) will be helpful here.
e) Add your diagnostic to the "select case (var%diagID)" block in subroutine
diag_out.
f) Write a simple function for your diagnostic and add it before the
"end module registry" line. Call it diag_identifier to match the others.
4) If your diagnostic is particularly complex, you may need to add functions
to diagnostics.f90 as well. If you do this, you'll need to make these
additional changes:
a) Add any new functions you call from your diag_identifier function to the
list of functions in the following statement in registry.f90:
use diagnostics, only: vint, hydro_interp, mix_ratio_to_spec_hum, &
temp_from_theta_p, surface_pres, density, sea_pres, &
lifted_index, mean_rh, unstag_hght, cape, &
sfcape => sbcape, mlcape, lcl_lfc, storm_motion, &
storm_rel_hel, calcdbz
b) Add your function name to the following statement in diagnostics.f90:
public :: vint, hydro_interp, mix_ratio_to_spec_hum, temp_from_theta_p, &
surface_pres, density, sea_pres, lifted_index, mean_rh, &
unstag_hght, cape, sbcape, mlcape, lcl_lfc, storm_motion, &
storm_rel_hel, calcdbz
Notice how this statement matches the corresponding statement from
registry.f90.
c) Add your new function(s) to diagnostics.f90. Public functions go first,
then private functions.
5) Recompile, and see if it works!
6) If you think your diagnostic should be a part of the "official" version of
wrf2gem, send me your new functions and I'll incorporate them.
7) Adding a diagnostic for output on isobaric surfaces is a bit more
complicated, but it follows a pattern similar to that for regular
diagnostics. Examine the pres_diag_out subroutine if you want to make an
addition here.
* Limitations *
1) The polar stereographic projection is not yet supported.
2) The x-hr precipitation accumulations (104-107) will be set to zero for times
at which the accumulation interval spans more than one history file.
Exception: If each history file contains only one output time, these
diagnostics work fine.
Workaround: Output total accumulated precip (108), then use, e.g.,
gfunc = sub(ptot^f27,ptot^f21) to get a 6-hr accumulation valid
at forecast hour 27 if each history file contains a day's worth
of data.