Introduction
This custom import is for grid data from the NOAA Operational Model Archive and Distribution System (NOMADS) grib filter server. Commonly used NOMADS products include global NOAA GFS, GEFS, and WaveWatch III forecasts. In the past, it was possible to download NOMADS data from an OpenDAP server using the generic OpenDAP import functionality in Delft-FEWS. This server is being terminated on February 23, 2026.
As of February 6th 2026, this import module is available in Delft-FEWS versions 2023.02 and later.
Known issues
- NAM precipitation forecasts cannot yet be imported due to discrepancies between accumulation periods in the T0 = 0 and 12z and T0 = 6 and 18z forecasts. This is being investigated.
- Requesting the "Total precipitation" parameter from NOAA returns a Grib2 that contains two grids, for two different timesteps/accumulation periods (total since T0, and total since 3 or 6 hours earlier). The NomadsGribFilterServer import imports the first timestep (i.e. total precipitation since T0) and ignores the second timestep. The resulting import is consistent with the original OpenDAP import for parameter "apcpsf".
- WaveWatch-III swell parameters must be imported in separate <import> sections (can be in the same import module), because the coordinate ordered_sequence_of_data is not yet recognized by the import module.
Advice for migrating from OpenDAP to the Grib Filter
- Migrating existing imports should only require updates to the idMap and ModuleConfigFile.
- If the OpenDAP server is still running, first configure the new import alongside the old one, and compare imported data from both servers to make sure they are identical.
Step 1: Download and inspect an example grib file with your desired parameters
- On this page, open the "grib filter" link for the dataset you want to import. These are links for some of the most commonly-used datasets:
- GFS 0.25 Degree: https://nomads.ncep.noaa.gov/gribfilter.php?ds=gfs_0p25
- GFS 0.25 Degree Hourly: https://nomads.ncep.noaa.gov/gribfilter.php?ds=gfs_0p25_1hr
- GFS Wave: https://nomads.ncep.noaa.gov/gribfilter.php?ds=gfswave
- GFS Ensemble 0.5 Degree: https://nomads.ncep.noaa.gov/gribfilter.php?ds=gefs_atmos_0p50a
- This opens a tool which helps you generate an example URL which downloads the parameters at the desired level(s) you want to import in your FEWS import module.
- Pick an arbitrary "Available Data Date" and "Cycle" (if applicable) - these will be populated by date/time tags in FEWS.
- Select the correct "Subdirectory" (if applicable).
- Inspect the list of "Available Files" and select one of the forecast files (.fXXX) you are interested in.
- If you are interested in any accumulated (e.g. total rainfall) or average (e.g. solar radiation) parameters, select a timestep later than .f000, since these parameters are not available at time zero (.f000).
- Note whether the timestep changes over time. For many datasets the timestep starts e.g. hourly or 3-hourly and increases after a certain time to 3-hourly or 6-hourly.
- Select the parameters and corresponding level you want to import
- Click the parameter name to see which levels are available for that parameter (and vice versa).
- Check the box next to "make subregion".
- You can leave the default coordinates for now. These will be populated automatically by a tag in FEWS.
- Download an example Grib2 file ("Start download") and inspect the contents (e.g. using Panoply).
- Confirm it contains all the parameters and layers you are interested in.
- Keep this example file, you will use it to make your IdMap.
- Leave the download page open - it may come in handy later when setting up the import module.
Step 2: Make the IdMap
General advice on how to map the parameters depends on the type of variable you are trying to import:
- Parameters with time-independent variable names: use the main variable name in the Grib2 file
- Parameters with time-dependent variable names: use the Grib2_Parameter_Name attribute
- Example of accumulated variable: Total_precipitation_surface_X_Hour_Accumulation → use "Total Precipitation"
- Example of average variable: Downward_Short-Wave_Radiation_Flux_surface_X_Hour_Average → use "Downward Short-Wave Radiation Flux"
- Note: this option can also be used, with caution, for parameters with time-independent variable names (this can make it possible to configure only one <import> section, which speeds up the import). However, the Grib2_Parameter_Name is less specific than the main variable name, so you have to make sure you don't accidentally have multiple variables with this Grib2_Parameter_Name in the Grib2 file.
- Parameters with isobaric levels (*_isobaric): these parameters require an additional mapping to link grids in a location set to the correct index in the Grib2 file (see example IdMapFile)
Below are two example idMaps. These are referenced in the example import modules provided on this page.
Example: IdMapFromGfs
<!-- Parameters with time-independent variable names - use variable name --> <parameter internal="T.fcst" external="Temperature_height_above_ground"/> <parameter internal="WSu.fcst" external="u-component_of_wind_height_above_ground"/> <parameter internal="WSv.fcst" external="v-component_of_wind_height_above_ground"/> <parameter internal="Pmsl.fcst" external="Pressure_reduced_to_MSL_msl"/> <!-- Parameters with time-dependent variable names - use Grib2_Parameter_Name --> <parameter internal="P.fcst" external="Total precipitation"/> <parameter internal="Rs.fcst" external="Downward Short-Wave Radiation Flux"/> <!-- Isobaric parameters with time-independent variable names - use variable name and include location mapping --> <parameter internal="RH.fcst" external="Relative_humidity_isobaric"/> <locationIdFunction internalLocationSet="GfsLevels" externalLocationFunction="@LAYER_INDEX@"/>
Example: IdMapFromGefs
<!-- Parameters with time-dependent variable names - use Grib2_Parameter_Name --> <parameter internal="P.fcst" external="Total precipitation"/> <!-- To reduce the number of <import> sections, temperature is also imported with the Grib2_Parameter_Name in the ensemble example--> <parameter internal="T.fcst" external="Temperature"/> <!-- FYI: if importing variables with time-indedependent names, it's better to use the variable name, which is more unique (see IdMapFromGfs) -->
Step 3: Define the location(set)s and grids
Example locations
<!-- This location is used for parameters without a vertical coordinate, or for parameters only available in a single level. --> <location id="Gfs" name="Grid for GFS"> <x>0</x> <y>0</y> </location> <!-- This location is used for data available at 2 m above ground (e.g. temperature). --> <location id="Gfs2m" name="Grid for GFS (2 m above ground)"> <x>0</x> <y>0</y> <z>2</z> </location> <!-- This location is used for data available at 10 m above ground (e.g. wind). --> <location id="Gfs10m" name="Grid for GFS (10 m above ground)"> <x>0</x> <y>0</y> <z>10</z> </location>
Example locationSet and associated mapLayerFile for isobaric data
Isobaric data can be imported for multiple pressure levels at a time using a locationSet. This locationSet should contain exactly as many (no more, no less) locations as are requested via the serverUrl in the import module (see below).
- LAYER_INDEX_GRIB_FILTER: Sequential numbering from 0 to N, which matches the layers in the requested Grib2 file (check serverUrl and example grib file).
- LEVEL_MB: The isobar, in mb, associated with the corresponding level in the Grib2 file.
<locationSet id="GfsLevels"> <csvFile> <file>GfsLevels.csv</file> <geoDatum>WGS 1984</geoDatum> <id>Gfs.%LEVEL_MB%mb</id> <name>GFS (%LEVEL_MB% mb)</name> <parentLocationId>Gfs</parentLocationId> <x>0</x> <y>0</y> <z>-%LEVEL_MB%</z> <attribute id="LAYER_INDEX"> <text>%LAYER_INDEX%</text> </attribute> </csvFile> </locationSet>
GfsLevels.csv
LAYER_INDEX,LEVEL_MB
0,300
1,500
2,600
3,700
4,850
Example grids
All NOMADS grids are regular grids. In this example, all the grids have the same definition, but are linked to different locations (and in some cases different z-levels, as specified in the locationId, see above).
<regular locationId="Gfs"> <rows>136</rows> <columns>168</columns> <geoDatum>WGS 1984</geoDatum> <firstCellCenter> <x>112</x> <y>-10</y> </firstCellCenter> <xCellSize>0.25</xCellSize> <yCellSize>0.25</yCellSize> </regular> <regular locationId="Gfs2m"> <rows>136</rows> <columns>168</columns> <geoDatum>WGS 1984</geoDatum> <firstCellCenter> <x>112</x> <y>-10</y> </firstCellCenter> <xCellSize>0.25</xCellSize> <yCellSize>0.25</yCellSize> </regular> <regular locationId="Gfs10m"> <rows>136</rows> <columns>168</columns> <geoDatum>WGS 1984</geoDatum> <firstCellCenter> <x>112</x> <y>-10</y> </firstCellCenter> <xCellSize>0.25</xCellSize> <yCellSize>0.25</yCellSize> </regular>
Step 4: Configure the import module
Now you can configure your import module. You will most likely need a separate <import> section depending on the type of variable you want to import:
- 2D variables available at a single level in the Grib2 file (e.g. without *_height_above_ground or *_isobaric in the variable name)
- 2D variables with a time-dependent variable name (e.g. accumulated or average parameters)
- 3D variables at one* or more z-levels (i.e. with *_height_above_ground in the variable name)
- 3D variables at one* or more pressure levels (i.e. with *_isobaric in the variable name)
*Note: if you only want to import a 3D variable at a single level, it's also possible to ignore the z-level/isobar and import it as if it's a 2D variable. For this to work properly (and not accidentally import data at the wrong level), confirm that the serverUrl returns a grib2 file with only the level you're interested in, for each parameters. If you're requesting multiple parameters at different levels in a single request, it's possible that there may be more levels returned than you want to import. In that case, you would need to split the parameters with overlapping levels into different <imports>.
The sections below provide example configuration for each of the 4 <import> options. All four approaches require a <serverUrl>. The <serverUrl> will vary depending on the parameters and levels you want to import, so you can only copy it from another configuration if you're planning to import the exact same data as the other configuration. Below are the general steps to define your <serverUrl>. There is also an Excel tool available which automates most of these steps (serverUrl_configuration_tool_20260202.xlsx).:
- Using the example Grib2 file downloaded using the instructions at the top of this page, group the parameter/level combos based on which of the 4 import types will apply.
- Using the grib filter tool, produce a different example URL for each group of parameters/levels.
- Replace dates and times in the "dir" and "file" with e.g. %TIME_ZERO(yyyyMMdd)% and %TIME_ZERO(HH)%
- Replace the file timestep index (e.g. f001) with e.g. f%COUNTER(000-120-1)%, where 000 is the first timestep, 120 is the last timestep, and 1 is the incrementer.
- These timesteps are usually in hours.
- The last timestep will depend how much of the forecast you want to import.
- Pad the first number with the correct number of 0s
- Accumulated or average variables usually don't have data in the first timestep (f000) - for that <import> section, start with the first timestep with data (e.g. 001 for hourly data or 003 for 3-hourly data). Otherwise you will get an error that the import could not find the file.
- Some forecasts initially have smaller timesteps and, later switch to longer timesteps. If you want to import both parts of the forecast, you can configure a double counter, e.g: %COUNTER(000-120-1,123-384-3)%.
- Ensemble data: replace the ensemble member id with another counter, e.g. %COUNTER(01-30-1)%. Note that the 0 ensemble sometimes has a different URL. This requires a different <import> section and <serverUrl>.
- Pad the first number with the correct number of 0s
- Replace the coordinates with the tags %TOP_LAT%, %LEFT_LON%, %RIGHT_LON%, %BOTTOM_LAT%. These will automatically be populated with information from the grid definition.
- Make sure your URL does not include "&all_var=on" or "&all_lev=on". Only specify the parameters and levels you want to import. This can save a lot of time in the download.
- Replace & symbols with &
Compared to the previous OpenDAP import where all timesteps could be retrieved at once, the NOAA Grib Filter service is slower because each timestep of the forecast has to be requested and downloaded separately. It's therefore best to group as many parameters as possible in an <import> module rather than e.g. templating the import module. As mentioned above, certain types of parameters have to be imported in separate <import> sections because they require slightly different FEWS configurations (see below).
Example: 2D variables available at a single level in the Grib2 file
This example imports pressure (abbreviation = PRMSL) at mean sea level (level abbreviation = mean_sea_level) for the 5-day hourly GFS forecast.
<import> <general> <importType>NomadsGribFilterServer</importType> <serverUrl>https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25_1hr.pl?dir=%2Fgfs.%TIME_ZERO(yyyyMMdd)%%2F%TIME_ZERO(HH)%%2Fatmos&file=gfs.t%TIME_ZERO(HH)%z.pgrb2.0p25.f%COUNTER(000-120-1)%&var_PRMSL=on&lev_mean_sea_level=on&subregion=&toplat=%TOP_LAT%&leftlon=%LEFT_LON%&rightlon=%RIGHT_LON%&bottomlat=%BOTTOM_LAT%</serverUrl> <idMapId>IdMapFromGfs</idMapId> <unitConversionsId>ImportUnitConversions</unitConversionsId> <importTimeZone> <timeZoneName>GMT</timeZoneName> </importTimeZone> <dataFeedId>Noaa.Gfs</dataFeedId> </general> <timeSeriesSet> <moduleInstanceId>ImportGfs</moduleInstanceId> <valueType>grid</valueType> <parameterId>Pmsl.fcst</parameterId> <locationId>Gfs</locationId> <timeSeriesType>external forecasting</timeSeriesType> <timeStep unit="hour" multiplier="1"/> <readWriteMode>add originals</readWriteMode> </timeSeriesSet> <externUnit parameterId="Pmsl.fcst" unit="Pa"/> </import>
Example: 2D variables with a time-dependent variable name
This example imports total precipitation, which is an accumulated parameter with a variable name that changes at each timestep (e.g. Total_precipitation_surface_X_Hour_Accumulation), and downward shortwave radiation flux, which is an average parameter with a variable name that changes depending on the timestep (e.g. Downward_Short-Wave_Radiation_Flux_surface_X_Hour_Average).
- Configure the property "variable_identification_method" = "grib2_parameter_name"
- Configure the Grib2_Parameter_Name in the idMap rather than the variable name
- The Grib2_Parameter_Name is an attribute of the variable and can be found by opening the Grib2 in e.g. Panoply.
- e.g. use "Total precipitation" instead of "Total_precipitation_surface_X_Hour_Accumulation".
- The abbreviation for total precipitation is APCP, and for radiation flux its DSWRF. Both are only available at surface level ("surface").
- These parameters have no data in the first timestep (f000), so the counter starts at 001 in this example (for hourly data).
Use the grib2_parameter_name carefully! This property is not as unique as the variable name. If you accidentally request multiple variables with the same grib2_parameter_name (e.g. if you import at multiple levels that result in different variable names, or variants of a parameter, e.g. min/max temperature), you may not be importing the parameter you expect.
<import> <general> <importType>NomadsGribFilterServer</importType> <serverUrl>https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25_1hr.pl?dir=%2Fgfs.%TIME_ZERO(yyyyMMdd)%%2F%TIME_ZERO(HH)%%2Fatmos&file=gfs.t%TIME_ZERO(HH)%z.pgrb2.0p25.f%COUNTER(001-120-1)%&var_APCP=on&var_DSWRF=on&lev_surface=on&subregion=&toplat=%TOP_LAT%&leftlon=%LEFT_LON%&rightlon=%RIGHT_LON%&bottomlat=%BOTTOM_LAT%</serverUrl> <idMapId>IdMapFromGfs</idMapId> <unitConversionsId>ImportUnitConversions</unitConversionsId> <importTimeZone> <timeZoneName>GMT</timeZoneName> </importTimeZone> <dataFeedId>Noaa.Gfs</dataFeedId> </general> <properties> <string key="variable_identification_method" value="grib2_parameter_name"/> </properties> <timeSeriesSet> <moduleInstanceId>ImportGfs</moduleInstanceId> <valueType>grid</valueType> <parameterId>P.fcst</parameterId> <locationId>Gfs</locationId> <timeSeriesType>external forecasting</timeSeriesType> <timeStep unit="hour" multiplier="1"/> <readWriteMode>add originals</readWriteMode> </timeSeriesSet> <timeSeriesSet> <moduleInstanceId>ImportGfs</moduleInstanceId> <valueType>grid</valueType> <parameterId>Rs.fcst</parameterId> <locationId>Gfs</locationId> <timeSeriesType>external forecasting</timeSeriesType> <timeStep unit="hour" multiplier="1"/> <readWriteMode>add originals</readWriteMode> </timeSeriesSet> <externUnit parameterId="P.fcst" unit="mm" cumulativeSum="true"/> <externUnit parameterId="Rs.fcst" unit="Wm-2"/> </import>
Example: 2D variables with ensembles
This example imports temperature from GEFS, a product with 30 ensembles.
- This example imports data at a 6-hourly timestep for the full 16-day forecast.
- Use a second instance of COUNTER in the serverUrl to loop over all ensembles: %COUNTER(01-30-1)%
- Ensemble member 0 has a different URL than the rest of the ensembles, so two <import> sections are required.
- Specify the ensembleId in the timeSeriesSet. The import automatically identifies/reads the ensembleMemberId from the Grib2 file.
- Since this import includes total precipitation, which has a time-varying variable name, configure the property "variable_identification_method" = "grib2_parameter_name"
- Note the different idMapId: configure the Grib2_Parameter_Name in the idMap rather than the variable name (see example idMap above).
- The abbreviation for total precipitation is APCP, and for temperature its TMP. APCP is available at surface level ("surface") and TMP is requested for the 2 m level and imported on a grid with no height (optional, you could also import it on a grid with a height - then the <import> should be split, with one using the <maximumVerticalSnapDistance>, see 3D example).
<import> <general> <importType>NomadsGribFilterServer</importType> <serverUrl>https://nomads.ncep.noaa.gov/cgi-bin/filter_gefs_atmos_0p50a.pl?dir=%2Fgefs.%TIME_ZERO(yyyyMMdd)%%2F%TIME_ZERO(HH)%%2Fatmos%2Fpgrb2ap5&file=gep%COUNTER(01-30-1)%.t%TIME_ZERO(HH)%z.pgrb2a.0p50.f%COUNTER(000-384-6)%&var_APCP=on&var_TMP=on&lev_2_m_above_ground=on&lev_surface=on&subregion=&toplat=%TOP_LAT%&leftlon=%LEFT_LON%&rightlon=%RIGHT_LON%&bottomlat=%BOTTOM_LAT%</serverUrl> <idMapId>IdMapFromGefs</idMapId> <unitConversionsId>ImportUnitConversions</unitConversionsId> <importTimeZone> <timeZoneName>GMT</timeZoneName> </importTimeZone> <dataFeedId>Noaa.Gefs</dataFeedId> <expiryTime unit="day" multiplier="7"/> </general> <properties> <string key="variable_identification_method" value="grib2_parameter_name"/> </properties> <timeSeriesSet> <moduleInstanceId>ImportGefs</moduleInstanceId> <valueType>grid</valueType> <parameterId>P.fcst</parameterId> <locationId>Gefs</locationId> <timeSeriesType>external forecasting</timeSeriesType> <timeStep unit="hour" multiplier="6"/> <readWriteMode>add originals</readWriteMode> <ensembleId>Gefs</ensembleId> </timeSeriesSet> <timeSeriesSet> <moduleInstanceId>ImportGefs</moduleInstanceId> <valueType>grid</valueType> <parameterId>T.fcst</parameterId> <locationId>Gefs</locationId> <timeSeriesType>external forecasting</timeSeriesType> <timeStep unit="hour" multiplier="6"/> <readWriteMode>add originals</readWriteMode> <ensembleId>Gefs</ensembleId> </timeSeriesSet> <externUnit parameterId="P.fcst" unit="mm" cumulativeSum="true"/> <externUnit parameterId="T.fcst" unit="K"/> </import> <import> <general> <importType>NomadsGribFilterServer</importType> <serverUrl>https://nomads.ncep.noaa.gov/cgi-bin/filter_gefs_atmos_0p50a.pl?dir=%2Fgefs.%TIME_ZERO(yyyyMMdd)%%2F%TIME_ZERO(HH)%%2Fatmos%2Fpgrb2ap5&file=gec00.t%TIME_ZERO(HH)%z.pgrb2a.0p50.f%COUNTER(000-384-6)%&var_APCP=on&var_TMP=on&lev_2_m_above_ground=on&lev_surface=on&subregion=&toplat=%TOP_LAT%&leftlon=%LEFT_LON%&rightlon=%RIGHT_LON%&bottomlat=%BOTTOM_LAT%</serverUrl> <idMapId>IdMapFromGefs</idMapId> <unitConversionsId>ImportUnitConversions</unitConversionsId> <importTimeZone> <timeZoneName>GMT</timeZoneName> </importTimeZone> <dataFeedId>Noaa.Gefs</dataFeedId> </general> <properties> <string key="variable_identification_method" value="grib2_parameter_name"/> </properties> <timeSeriesSet> <moduleInstanceId>ImportGefs</moduleInstanceId> <valueType>grid</valueType> <parameterId>P.fcst</parameterId> <locationId>Gefs</locationId> <timeSeriesType>external forecasting</timeSeriesType> <timeStep unit="hour" multiplier="6"/> <readWriteMode>add originals</readWriteMode> <ensembleId>Gefs</ensembleId> </timeSeriesSet> <timeSeriesSet> <moduleInstanceId>ImportGefs</moduleInstanceId> <valueType>grid</valueType> <parameterId>T.fcst</parameterId> <locationId>Gefs</locationId> <timeSeriesType>external forecasting</timeSeriesType> <timeStep unit="hour" multiplier="6"/> <readWriteMode>add originals</readWriteMode> <ensembleId>Gefs</ensembleId> </timeSeriesSet> <externUnit parameterId="P.fcst" unit="mm" cumulativeSum="true"/> <externUnit parameterId="T.fcst" unit="K"/> </import>
Example: 3D variables at one or more z-levels (i.e. variable *_height_above_ground) - Import to grid without z-level
This example imports pressure at mean sea level (abbreviation = PRMSL, level = mean_sea_level) and wind speeds (abbreviation = UGRD, VGRD) at 10 m above ground (level = 10_m_above_ground) for the 5-day hourly GFS forecast.
- The data are imported onto a grid location without a z-level (i.e. a 2D grid in FEWS).
- When using this method (instead of "Grid with z-level"), you need to check that the Grib2 file you're requesting doesn't accidentally include multiple levels for the parameters you're trying to import. This can happen when you request multiple parameters that are available for overlapping levels, but you want to import them at different levels. In this example "pressure at mean sea level" is not available at 10 m above the ground (and vice versa for wind speeds), so none of the variables have multiple vertical levels in the Grib2 file.
- Both parameters are available in many more vertical levels than are requested in the <serverUrl>, but the import only requests the levels we want to import, and is therefore much faster than if we were to request all levels.
- Since the data are instantaneous, the counter starts at 000.
<import> <general> <importType>NomadsGribFilterServer</importType> <serverUrl>https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25_1hr.pl?dir=%2Fgfs.%TIME_ZERO(yyyyMMdd)%%2F%TIME_ZERO(HH)%%2Fatmos&file=gfs.t%TIME_ZERO(HH)%z.pgrb2.0p25.f%COUNTER(000-120-1)%&var_PRMSL=on&var_UGRD=on&var_VGRD=on&lev_mean_sea_level=on&lev_10_m_above_ground=on&subregion=&toplat=%TOP_LAT%&leftlon=%LEFT_LON%&rightlon=%RIGHT_LON%&bottomlat=%BOTTOM_LAT%</serverUrl> <idMapId>IdMapFromGfs</idMapId> <unitConversionsId>ImportUnitConversions</unitConversionsId> <importTimeZone> <timeZoneName>GMT</timeZoneName> </importTimeZone> <dataFeedId>Noaa.Gfs</dataFeedId> </general> <timeSeriesSet> <moduleInstanceId>ImportGfs</moduleInstanceId> <valueType>grid</valueType> <parameterId>Pmsl.fcst</parameterId> <locationId>Gfs</locationId> <timeSeriesType>external forecasting</timeSeriesType> <timeStep unit="hour" multiplier="1"/> <readWriteMode>add originals</readWriteMode> </timeSeriesSet> <timeSeriesSet> <moduleInstanceId>ImportGfs</moduleInstanceId> <valueType>grid</valueType> <parameterId>WSu.fcst</parameterId> <locationId>Gfs</locationId> <timeSeriesType>external forecasting</timeSeriesType> <timeStep unit="hour" multiplier="1"/> <readWriteMode>add originals</readWriteMode> </timeSeriesSet> <timeSeriesSet> <moduleInstanceId>ImportGfs</moduleInstanceId> <valueType>grid</valueType> <parameterId>WSv.fcst</parameterId> <locationId>Gfs</locationId> <timeSeriesType>external forecasting</timeSeriesType> <timeStep unit="hour" multiplier="1"/> <readWriteMode>add originals</readWriteMode> </timeSeriesSet> <externUnit parameterId="Pmsl.fcst" unit="Pa"/> <externUnit parameterId="WSu.fcst" unit="m/s"/> <externUnit parameterId="WSv.fcst" unit="m/s"/> </import>
Example: 3D variables at one or more z-levels (i.e. variable *_height_above_ground) - Import to grid with z-level
This example imports temperature (abbreviation = TMP) at 2 m above ground (level = 2_m_above_ground) and wind speeds (abbreviation = UGRD, VGRD) at 10 m above ground (level = 10_m_above_ground) for the 5-day hourly GFS forecast.
- Since the data are instantaneous, the counter starts at 000.
- The data are imported onto grid locations with corresponding z-levels of 2 and 10 m (as configured in Locations.xml).
- Configure the <maximumVerticalSnapDistance>. The value should be small enough to differentiate between the available vertical levels.
- Both parameters are available in many more vertical levels than are requested in the <serverUrl>, but the import only requests the levels we want to import, and is therefore much faster than if we were to request all levels.
<import> <general> <importType>NomadsGribFilterServer</importType> <serverUrl>https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25_1hr.pl?dir=%2Fgfs.%TIME_ZERO(yyyyMMdd)%%2F%TIME_ZERO(HH)%%2Fatmos&file=gfs.t%TIME_ZERO(HH)%z.pgrb2.0p25.f%COUNTER(000-120-1)%&var_TMP=on&var_UGRD=on&var_VGRD=on&lev_2_m_above_ground=on&lev_10_m_above_ground=on&subregion=&toplat=%TOP_LAT%&leftlon=%LEFT_LON%&rightlon=%RIGHT_LON%&bottomlat=%BOTTOM_LAT%</serverUrl> <idMapId>IdMapFromGfs</idMapId> <maximumVerticalSnapDistance>0.01</maximumVerticalSnapDistance> <unitConversionsId>ImportUnitConversions</unitConversionsId> <importTimeZone> <timeZoneName>GMT</timeZoneName> </importTimeZone> <dataFeedId>Noaa.Gfs</dataFeedId> </general> <timeSeriesSet> <moduleInstanceId>ImportGfs</moduleInstanceId> <valueType>grid</valueType> <parameterId>T.fcst</parameterId> <locationId>Gfs2m</locationId> <timeSeriesType>external forecasting</timeSeriesType> <timeStep unit="hour" multiplier="1"/> <readWriteMode>add originals</readWriteMode> </timeSeriesSet> <timeSeriesSet> <moduleInstanceId>ImportGfs</moduleInstanceId> <valueType>grid</valueType> <parameterId>WSu.fcst</parameterId> <locationId>Gfs10m</locationId> <timeSeriesType>external forecasting</timeSeriesType> <timeStep unit="hour" multiplier="1"/> <readWriteMode>add originals</readWriteMode> </timeSeriesSet> <timeSeriesSet> <moduleInstanceId>ImportGfs</moduleInstanceId> <valueType>grid</valueType> <parameterId>WSv.fcst</parameterId> <locationId>Gfs10m</locationId> <timeSeriesType>external forecasting</timeSeriesType> <timeStep unit="hour" multiplier="1"/> <readWriteMode>add originals</readWriteMode> </timeSeriesSet> <externUnit parameterId="T.fcst" unit="K"/> <externUnit parameterId="WSu.fcst" unit="m/s"/> <externUnit parameterId="WSv.fcst" unit="m/s"/> </import>
Example: 3D variables at one or more isobaric levels (i.e. with *_isobaric in the variable name)
This example imports relative humidity at 5 isobars (300, 500, 600, 700, and 850 mb) for 10 days of the 3-hourly GFS forecast.
- The abbreviation for relative humidity is "RH" and the abbreviation for the levels is "XXX_mb".
- Configure the property "layerIndexAsLocationId" = "true". This property tells FEWS to use the location attribute specified in the IdMap to know which layer in the Grib2 file maps to which locationId in FEWS.
- See above for how the locationSet Gfs.levels is defined to match the exact number of levels requested in the serverUrl.
<import> <general> <importType>NomadsGribFilterServer</importType> <serverUrl>https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_0p25.pl?dir=%2Fgfs.%TIME_ZERO(yyyyMMdd)%%2F%TIME_ZERO(HH)%%2Fatmos&file=gfs.t%TIME_ZERO(HH)%z.pgrb2.0p25.f%COUNTER(000-240-3)%&var_RH=on&lev_850_mb=on&lev_700_mb=on&lev_600_mb=on&lev_500_mb=on&lev_300_mb=on&subregion=&toplat=%TOP_LAT%&leftlon=%LEFT_LON%&rightlon=%RIGHT_LON%&bottomlat=%BOTTOM_LAT%</serverUrl> <idMapId>IdMapFromGfs</idMapId> <unitConversionsId>ImportUnitConversions</unitConversionsId> <importTimeZone> <timeZoneName>GMT</timeZoneName> </importTimeZone> <dataFeedId>Noaa.Gfs</dataFeedId> </general> <properties> <bool key="layerIndexAsLocationId" value="true"/> </properties> <timeSeriesSet> <moduleInstanceId>ImportGfs</moduleInstanceId> <valueType>grid</valueType> <parameterId>RH.fcst</parameterId> <locationSetId>GfsLevels</locationSetId> <timeSeriesType>external forecasting</timeSeriesType> <timeStep multiplier="3" unit="hour"/> <readWriteMode>add originals</readWriteMode> </timeSeriesSet> </import>