-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathhrrr_script_tips.html
439 lines (367 loc) · 28.1 KB
/
hrrr_script_tips.html
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
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
<!DOCTYPE html>
<html>
<head>
<title>HRRR Download Script Tips</title>
<script src="./js/site/siteopen.js"></script>
</head>
<body>
<a name="TOP"></a>
<script src="./js/site/sitemenu.js"></script>
<h1 align="center"><i class="fa fa-code fa-fw"></i> HRRR Download Scripting Tips</h1>
<script src='./js/HRRR_status.js'></script>
<div id="content">
<div class="alert alert-warning">
<a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>
<p style='font-size:15px'>If you have not already, please
<a class='alert-link' href="https://home.chpc.utah.edu/~u0553130/Brian_Blaylock/hrrr_download_register.html">register</a>
as a user before downloading data. Citation details can be found at the bottom of this page
</div>
<div class="row" id="content">
<div class=" col-md-3">
<a href="https://home.chpc.utah.edu/~u0553130/Brian_Blaylock/hrrr_download_register.html" class="btn btn-danger btn-block">
<i class="fa fa-user-plus"></i> Have you Registered?</a>
</div>
<div class="col-md-3">
<a href="https://home.chpc.utah.edu/~u0553130/Brian_Blaylock/hrrr_practices.html" class="btn btn-warning btn-block">
<i class="far fa-handshake"></i> Best Practices</a>
</div>
<div class="col-md-3">
<a href="https://home.chpc.utah.edu/~u0553130/Brian_Blaylock/hrrr_FAQ.html" class="btn btn-success btn-block">
<i class="fa fa-info-circle"></i> HRRR FAQ</a>
</div>
<div class="col-md-3">
<a href="https://home.chpc.utah.edu/~u0553130/Brian_Blaylock/cgi-bin/hrrr_download.cgi" class="btn btn-primary btn-block">
<i class="fa fa-cloud-download-alt"></i> Web Download Page</a>
</div>
</div>
<br>
<script src='./js/pando_status.js'></script>
<br>
<!-- Tabs -->
<ul class="nav nav-tabs">
<li class="active"><a data-toggle="tab" href="#tab1"><i class="fas fa-link"></i> URL structure</a></li>
<li><a data-toggle="tab" href="#tab2"><i class="fas fa-terminal"></i> cURL and wget</a></li>
<li><a data-toggle="tab" href="#tab3"><i class="fab fa-python"></i> Python</a></li>
<li><a data-toggle="tab" href="#tab4"><i class="far fa-clone"></i> rclone</a></li>
<li><a data-toggle="tab" href="#tab5">Other</a></li>
</ul>
<div class="tab-content" id="content">
<div id="tab1" class="tab-pane fade in active">
<br>
<p> You may write your own script to automate the download process,
but PLEASE do not download an excessive number of files in a short
period of time on multiple nodes (you agreed to not do this when you read the
Best Practices).
<p> HRRR GRIB2 files are large. sfc files are >100 MB and prs files are >380 MB each.
If you download a day's worth of prs analyses, thats over 9 GB!
<hr>
<p> <b>GRIB2</b> files are downloaded from the URL<br>
<div class="well well-sm">
<span style="font-family:monospace; padding-left:20px;">https://pando-rgw01.chpc.utah.edu/
<span style="color:red">[model type]</span>/
<span style="color:blue">[fields]</span>/
<span style="color:green">[YYYYMMDD]</span>/
<span style="color:darkorange">[file name]</span>
</div>
<p> <b>Metadata</b> for each file can be viewed from the same URL except with <b>.idx</b> appended to the grib2 file name<br>
<div class="well well-sm">
<span style="font-family:monospace; padding-left:20px;">https://pando-rgw01.chpc.utah.edu/
<span style="color:red">[model type]</span>/
<span style="color:blue">[fields]</span>/
<span style="color:green">[YYYYMMDD]</span>/
<span style="color:darkorange">[file name]</span>.idx
</div>
<p> The model type and variable fields available include:
<ul style="padding-left:40px">
<li><span style="color:red">[model type] <b>hrrr</b></span> for the operational HRRR
<ul style="padding-left:40px">
<li><span style="color:blue">[fields] <b>sfc</b></span>
<li><span style="color:blue">[fields] <b>prs</b></span>
<li><span style="color:blue">[fields] <b>subh</b></span> (sparse availability, if any)
<li><span style="color:blue">[fields] <b>nat</b></span> (sparse availability, if any)
</ul>
<li><span style="color:red">[model type] <b>hrrrX</b></span> for the experimental HRRR
<ul style="padding-left:40px">
<li><span style="color:blue">[fields] <b>sfc</b></span>
</ul>
<li><span style="color:red">[model type] <b>hrrrak</b></span> for HRRR Alaska
<ul style="padding-left:40px">
<li><span style="color:blue">[fields] <b>sfc</b><span>
<li><span style="color:blue">[fields] <b>prs</b></span>
</ul>
</ul>
<p> <span style="color:green">[YYYYMMDD]</span> represents the UTC date format (e.g. 20171228).
<p> <span style="color:darkorange">[file name]</span> is in the format <b><span style="color:red">[model type]</span>.t[00-23]z.wrf<span style="color:blue">[fields]</span>f[00-18].grib2</b><br>
where the two digit number following <b>t</b> is the model run hour and the two digit number following <b>f</b> is the model forecast hour.
<br><br>
<table style="max-width:800px" class="table table-hover" align='center'>
<tr><th>Model Name</th><th>Model Type</th><th>Model Cycle</th><th>Archived Forecasts</th></tr>
<tr><td>Operational HRRR</td><td>hrrr</td><td>Hourly<br>range(0,23)</td><td>sfc: f00-f18 or f00-f36<br>prs: f00</td></tr>
<tr><td>Experimental HRRR</td><td>hrrrX</td><td>Hourly<br>range(0,23)</td><td>sfc: f00</td></tr>
<tr><td>HRRR Alaska</td><td>hrrrak</td><td>Every 3 hours<br>range(0,23,3)</td><td>sfc: f00-18 or f00-f36</td></tr>
</table>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Example</h3>
</div>
<div class="panel-body" style="font-family:monospace">
<p>https://pando-rgw01.chpc.utah.edu/<span style="color:red">hrrr</span>/<span style="color:blue">sfc</span>/<span style="color:green">20180101</span>/<span style="color:darkorange">hrrr.t00z.wrfsfcf00.grib2</span>
<p>https://pando-rgw01.chpc.utah.edu/<span style="color:red">hrrr</span>/<span style="color:blue">sfc</span>/<span style="color:green">20180101</span>/<span style="color:darkorange">hrrr.t00z.wrfsfcf00.grib2.idx</span>
</div>
</div>
<div class="alert alert-info">
<i class="fas fa-info-circle fa-fw"></i> The <a class='alert-link' href="https://home.chpc.utah.edu/~u0553130/Brian_Blaylock/cgi-bin/generic_pando_download.cgi?BUCKET=hrrr" data-toggle="tooltip" title="Alternative HRRR Download Page"> alternative download page</a>
may help you better understand the URL structure
</div>
<!--
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">Special case: BUFR soundings</h3>
</div>
<div class="panel-body">
<p>You can download BUFR soundings for KSLC, KPVU, and KOGD
from the operational HRRR. For example:
<div class="well">https://pando-rgw01.chpc.utah.edu/hrrr/buf/YYYYMMDD/kslc_YYYYMMDDHH.buf</div>
</div>
</div>
-->
</div>
<div id="tab2" class="tab-pane fade">
<br>
<h4><b>cURL</b> download full file</h4>
<p><code>curl -O https://pando-rgw01.chpc.utah.edu/hrrr/sfc/20180101/hrrr.t00z.wrfsfcf00.grib2</code>
<hr>
<h4><b>cURL</b> download full file and rename</h4>
<p><code>curl -o hrrr20180101_00zf00.grib2 https://pando-rgw01.chpc.utah.edu/hrrr/sfc/20180101/hrrr.t00z.wrfsfcf00.grib2</code>
<hr>
<h4><b>wget</b> download full file</h4>
<p><code>wget https://pando-rgw01.chpc.utah.edu/hrrr/sfc/20180101/hrrr.t00z.wrfsfcf00.grib2</code>
<hr>
<h4><b>cURL</b> download single variable</h4>
<p>GRIB files are gridded binary. They are made of "messages" or "fields" stacked on top of each other. Each field contains the data for a variable at a specific level across the model domain. It is possible to download portions of the full GRIB2 file and what you get is a valid GRIB2 file.
<p style="text-align: center;"><img src='images/GRIB2_file_cURL.png' width=50%>
<p>If you know the byte range of the variable you want (found from the <code>.idx</code> file), you can retrieve that single variable. The <code>.idx</code>> files share the same URL as the grib2, except with <code>.idx</code>> appended to the end. For example, from the <a href="https://pando-rgw01.chpc.utah.edu/hrrr/sfc/20180101/hrrr.t00z.wrfsfcf00.grib2.idx"><code>.idx</code> file for F00 valid at 0000 UTC 1 January 2018</a>, we see that the byte range for <kbd>TMP:2 m</kbd> starts at <code>34884036</code> and ends at <code>36136433</code>.</p>
<pre>curl -o 20180101_00zf00_2mTemp.grib2 --range 34884036-36136433 https://pando-rgw01.chpc.utah.edu/hrrr/sfc/20180101/hrrr.t00z.wrfsfcf00.grib2</pre>
<p>After inspecting the downloaded file, you will see cURL has downloaded a valid GRIB2 file with only the 2 meter temperature variable.</p>
<p>You could repeat the steps for different byte ranges to get different variables and append the output to a file</p>
<p><code>curl --range ######-###### <URL> >> outFile.grib2</code></p>
<br>
<div class="panel panel-success">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-tint" aria-hidden="true"></i> Precipitation Variables</h3>
</div>
<div class="panel-body">
Most precipitation fields for the model analyses (F00) are zero. This is because precipitation is not an instantaneous variable like temperature or humidity--precipitation rate and accumulation is a measure over a period. <b>When you download precipitation fields like PRATE or APCP, download F01 or greater because F00 is all zeros.</b>
</div>
</div>
<div class="panel panel-warning">
<div class="panel-heading">
<h3 class="panel-title"><b>cURL</b> download several variables</h3>
</div>
<div class="panel-body">
<p>Unfortunately, the <span style="font-family:monospace">curl --range</span> function wont work if you
request more than one range. I don't know why this doesn't
work, but it must be a limitation of the Pando archive.
Fortunately, similar variables are usually grouped together,
like U and V wind compenents, so you can request a range
that spans the variables you want. This example gets
TMP, POT, SPFH, DPT, RH, UGRD, VGRD, WIND at 2 meters.
<p style="font-family:monospace">curl -o 20180101_00zf00_2mTemp2mDPT10mwind.grib2 --range 34884036-44863087 https://pando-rgw01.chpc.utah.edu/hrrr/sfc/20180101/hrrr.t00z.wrfsfcf00.grib2
</div>
</div>
</div>
<div id="tab3" class="tab-pane fade">
<br>
<p>Details on different methods to download HRRR data with Python are on GitHub.
<br><br>
<a class='btn btn-lg btn-primary' href='https://github.com/blaylockbk/HRRR_archive_download'><i class="fab fa-github"></i> Python HRRR Download Examples</a>
<br><br>
<p> I use Anaconda with Python version 3. You may use this <a href='https://github.com/blaylockbk/HRRR_archive_download/blob/master/environment.yml'>environment.yml</a> file and find instructions on creating the conda environment on <a href='https://github.com/blaylockbk/HRRR_archive_download#--anaconda-environment'>GitHub</a>. If you are unfamiliar with <a href="https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html">conda environments</a>, look at the <a href='https://github.com/blaylockbk/pyBKB_v3/blob/master/README.md'>README</a> for details on how to create my environment from the <code>environment.yml</code> file.
<p>Below is a summary of the examples.
<hr>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">How to download HRRR GRIB2 files</h3>
</div>
<div class="panel-body">
<p>If you just want to download a few files, the easiest way is with the <a href='https://home.chpc.utah.edu/~u0553130/Brian_Blaylock/cgi-bin/hrrr_download.cgi'> web download interface</a> which makes downloading files as easy as clicking a button.
<p>Most users, however, need to download a bunch of HRRR files. You will need to write a script for that. The most simple way to download a file from Pando is with <code>urllib.request</code>. Writing a script is as simple as changing the URL to get the files you want.
<pre>
import urllib.request
download_this = 'https://pando-rgw01.chpc.utah.edu/hrrr/sfc/20200624/hrrr.t01z.wrfsfcf17.grib2'
save_as = 'my_file.grib2'
urllib.request.urlretrieve(download_this, save_as)</pre>
<p>I made this Jupyter Notebook for you. It demonstrates how to use my <code>download_HRRR</code> function to download many files from the Pando (or NOMADS) HRRR archive. All you need to give the function is a list of datetimes and forecast hours.
<br><br>
<a class='btn btn-lg btn-success' href='https://github.com/blaylockbk/HRRR_archive_download/blob/master/notebooks/demo_download_hrrr_archive_part1.ipynb'><i class="fab fa-github"></i> Jupyter Notebook: Part 1</a>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">How to download select variables from a HRRR GRIB2 file</h3>
</div>
<div class="panel-body">
<p>Full HRRR files are very large (~150 MB) and that adds up quick if you need a lot of days and forecasts. Often, you only need some of the data in the file. Remember that GRIB2 data is based on messages made up of binary concatenated together. It is possible to download only the parts of the file for specific variables or "fields" that you want.
<p style="text-align: center;"><img src='images/GRIB2_file_cURL.png' width=50%>
<p>You will save a lot of disk space and improve download time if you download just the variables you need. The size of a single HRRR grid is about 1 MB.
<p>The challenge to downloading parts of the full GRIB2 file finding the byte range for a variable you want. The beginning byte of each variable is given in the index, or <code>.idx</code>, file.
<p>Partial downloads with cURL require a known byte range.
The grbi2.idx (
<a href="https://home.chpc.utah.edu/~u0553130/Brian_Blaylock/HRRR_archive/HRRR_v3_variables_SFC.pdf">
sfc example</a>
,
<a href="https://home.chpc.utah.edu/~u0553130/Brian_Blaylock/HRRR_archive/HRRR_v3_variables_PRS.pdf">
prs example</a>) files are metadata text files that contain the beginning byte of each field in the file. <b>Each grib2 file has a unique index file.</b> To find the byte range for a variable, the above function searches for the line that
contains the specified variable abbreviation and level.
<p style='text-align: center;'><img src='./images/HRRR_idx_description.png' width=75% title="grib2.idx file example">
<p> My Jupyter Notebook Part 3 shows you how I do this and provide a function to download a set of variables from a HRRR GRIB2 file. Part 3 combines the functions for downloading many files and downloading subsets.
<br><br>
<a class='btn btn-lg btn-success' href='https://github.com/blaylockbk/HRRR_archive_download/blob/master/notebooks/demo_download_hrrr_archive_part2.ipynb'><i class="fab fa-github"></i> Jupyter Notebook: Part 2</a>
<a class='btn btn-lg btn-success' href='https://github.com/blaylockbk/HRRR_archive_download/blob/master/notebooks/demo_download_hrrr_archive_part3.ipynb'><i class="fab fa-github"></i> Jupyter Notebook: Part 3</a>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">How to read GRIB2 data with Python</h3>
</div>
<div class="panel-body">
<p> When you have a GRIB2 file, there are two key packages that read GRIB2 files. Both can be installed via conda-forge.
<ol>
<li><b>pygrib</b> is what I started to learn and still use sometimes.
| <a href="https://youtu.be/yLoudFv3hAY"><i class="fab fa-youtube"></i> Video Demo</a>
| <a href='https://jswhit.github.io/pygrib/docs/index.html'><i class="fas fa-book"></i> Documentation</a>.</li>
<li><b>cfgrib</b> works well reading GRIB2 data as xarray datasets. Make sure you have the latest version (>0.9.8)
| <a href='https://github.com/ecmwf/cfgrib'><i class="fas fa-book"></i> Documentation</a></li>
<h4>Getting Started with <code>cfgrib</code></h4>
<div class='well'>
<p><code>import cfgrib
<p>a = cfgrib.open_datasets('hrrr.t00z.wrfsfcf08.grib2')</code>
</div>
<p>The loaded data is a list of xarray dataset objects. Each item in
the list is an xarray dataset for a different level. For example,
entire atmosphere, height above ground, isobaric level, surface, etc.
</ol>
I go over this, and give you a useful function that download and reads a HRRR file in my Jupyter Notebook #4
<br><br>
<a class='btn btn-lg btn-success' href='https://github.com/blaylockbk/HRRR_archive_download/blob/master/notebooks/demo_download_hrrr_archive_part4.ipynb'><i class="fab fa-github"></i> Jupyter Notebook: Part 4</a>
</div>
</div>
<p>A quick note on multi-threading your downloads. It probably isn't worth it. The archive bandwidth is limited, and will cause a bottleneck if you try downloading too much (and that makes it slow for us to put new data on the archive). I tried using multiprocessing and multi-threading and found that the download speed saturates around 3 or more threads.
<p style='text-align: center;'><img src="./images/fast_download.png" width="450px">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">List and download Pando objects with <code>s3fs</code></h3>
</div>
<div class="panel-body">
It is possible to access the Pando S3 "hrrr" buckets directly with <span style='font-family:monospace;'>s3fs</span>.
<b><a href='https://s3fs.readthedocs.io/en/latest/'>Documentation</a></b>.
The secret sauce is to set the correct <span style='font-family:monospace;'>endpoint_url</span>.
<div class='well' style='font-family:monospace;font-size:12px'>
import s3fs<br>
# Access Pando<br>
fs = s3fs.S3FileSystem(anon=True, client_kwargs={'endpoint_url':"https://pando-rgw01.chpc.utah.edu/"})<br>
<br>
# List objects in a path<br>
fs.ls('hrrr/sfc/20190101/')<br>
<br>
# Download the first file and rename it the same name (without the directory structure)<br>
files = fs.ls('hrrr/sfc/20190101/')<br>
fs.get(files[0], files[0].split('/')[-1])
</div>
<p>This is a good method to use if you don't know the file names on Pando (such as if you are looking at GOES files), but the HRRR file names are very predictable. The following examples show how to download the files with the straightforward <span style='font-family:monospace;'>urllib.request</span> and how to download a subset of a files
(single variable grid) by exploiting the byte range feature of cURL.
</div>
</div>
</div>
<div id="tab4" class="tab-pane fade">
<br>
<p>You can use <a href='https://rclone.org/'>rclone</a> to copy files from Pando to your own disk.
<p>Configure rclone with the following settings (this should be in your <code>.rclone.conf</code> file)...
<pre>
[publicPando]
type = s3
endpoint = https://pando-rgw01.chpc.utah.edu
</pre>
<p>Then you can list buckets and files with
<pre>
rclone lsd publicPando:hrrr/sfc # list a directory
rclone ls publicPando:hrrr/sfc/20190101/ # list all files in a directory
</pre> And rclone has ability to copy files from Pando to your home directory.
<br>
</div>
<div id="tab5" class="tab-pane fade">
<br>
<div class="panel panel-default">
<div class="panel-heading">How the .idx files are created</div>
<div class="panel-body" style="font-family:monospace">
wgrib2 hrrr.t09z.wrfsfcf17.grib2 -t -var -lev -ftime > hrrr.t09z.wrfsfcf17.grib2.idx
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">HRRR Projection Information</div>
<div class="panel-body">
Model projection is contained in the GRIB2 file, but it's kind of buried.
It can also be found on the <a href="https://rapidrefresh.noaa.gov/hrrr/HRRR/static/HRRRv4-Experimental/">
HRRR main webiste in the namelist.wps</a> file.
Here are the important pieces:
<div class="panel-body" style="font-family:monospace">
<p>dx = 3000,
<p>dy = 3000,
<p>map_proj = 'lambert',
<p>ref_lat = 38.5,
<p>ref_lon = -97.5,
<p>truelat1 = 38.5,
<p>truelat2 = 38.5,
<p>stand_lon = -97.5,
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">How do I get the latitude/longitude grid?</div>
<div class="panel-body">
<p>Latitude and longitude for every HRRR grid point is
defined as part of each grib message.
The values for each grid are not stored for each grid box (that would
take a lot of memory), but are calculated by the wgrib2 utility
with the stored projection information.
<p>If you are using pygrib, you can get the variable data,
latitude, and longitude like this:
<span style='font-family:monospace'>value, lat, lon = grbs[1].data()</span>
<p>For convenience and some unique applications, I
created an HDF5 file that contains just the HRRR latitude
and longitude grids.
<a class='btn btn-info' href="https://pando-rgw01.chpc.utah.edu/hrrr/HRRR_latlon.h5">HRRR_latlon.h5</a>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">List of missing and incomplete files</div>
<div class="panel-body">
<a class='btn btn-default btn-lg' href='https://home.chpc.utah.edu/~u0553130/Brian_Blaylock/HRRR_archive/PRS_missing_incomplete_files.txt'>
<i class="fab fa-firstdraft"></i>
List of Missing PRS Files</a>
<a class='btn btn-default btn-lg' href='https://home.chpc.utah.edu/~u0553130/Brian_Blaylock/HRRR_archive/SFC_missing_incomplete_files.txt'>
<i class="fab fa-firstdraft"></i>
List of Missing SFC Files</a>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">Wind Vectors: Grid Relative vs Earth Relative</div>
<div class="panel-body">
<p>If you are dealing with a vector quantity,
like wind direction, you need to convert the
U and V wind component from grid-relative to
earth-relative to correctly orient the wind vectors.
<p style='text-align:center'><a class='btn btn-primary' href="https://github.com/blaylockbk/pyBKB_v2/blob/master/demos/HRRR_earthRelative_vs_gridRelative_winds.ipynb">
<i class="fab fa-github"></i> Convert winds Grid-relative to Earth-Relative
</a>
</div>
</div>
</div>
</div> <!--tab-content-->
</div><!--container-->
<hr>
<script src='./js/climate_acknowledgement.js'></script>
<script src='./js/pando_citation.js'></script>
<script src="./js/site/siteclose.js"></script>
</body>
</html>