Tropical cyclones are among the most complex and destructive atmospheric phenomena, characterized by intense precipitation, strong winds, and organized convective structures. Understanding the three-dimensional distribution of hydrometeors — cloud liquid water, rain, and graupel — within a TC is critical for improving our knowledge of storm dynamics, intensification processes, and microwave radiative transfer.
This project supports research into the internal structure of tropical cyclones by preparing NOAA MIRS satellite retrieval data for 3D visualization. Given a storm name, year, and a datetime cutoff, the script extracts and merges MIRS IMG and SND granule files before or after a specified time, combines them with IBTrACS storm track metadata, and outputs a single analysis-ready netCDF file. The resulting dataset is loaded into ParaView for volumetric 3D visualization of hydrometeor fields — enabling researchers to explore cloud structure and precipitation distribution within the storm at a specific point in its lifecycle.
This workflow was applied to Hurricane IDA (2021) around the time of its Gulf Coast landfall on August 29, 2021, when the storm reached Category 4 intensity.
IBTrACS CSV + MIRS IMG/SND granules
↓
Time-based filtering (before/after cutoff datetime)
↓
Merge IMG + SND + IBTrACS → netCDF output
↓
Load into ParaView → 3D hydrometeor visualization
git clone https://github.com/your-username/mirs-hydro-3d.git
cd mirs-hydro-3d
pip install -e .Update the user settings at the top of the script:
storm_name = "IDA"
storm_year = 2021
# Datetime cutoff — format: YYYYMMDDHHmmss
# e.g. 20210829150000 = August 29 2021, 15:00 UTC
date_to_pick = 20210829150000
# "before" → files with timestamps before the cutoff
# "after" → files with timestamps after the cutoff
before_or_after = "before"
dir_path = "/path/to/MIRS_IDA_2021-08-29/"
ibt_file = "/path/to/IBTrACS.ALL.v04r00.nc"
ibt_file_csv = "/path/to/ibtracs.ALL.list.v04r00.csv"Then run:
python mirs_hydro_3d.pyOutput: a netCDF file named IDA_2021_08-29_all_data_<cutoff>_<before/after>.nc
| File | Description | Source |
|---|---|---|
ibtracs.ALL.list.v04r00.csv |
IBTrACS storm track CSV | IBTrACS downloads |
IBTrACS.ALL.v04r00.nc |
IBTrACS storm track netCDF | IBTrACS downloads |
NPR-MIRS-IMG_*.nc |
MIRS IMG granules | NOAA MIRS |
NPR-MIRS-SND_*.nc |
MIRS SND granules | NOAA MIRS |
The following SND variables are retained in the output for 3D visualization:
| Variable | Description |
|---|---|
PClw |
Cloud liquid water profile |
PRain |
Rain water profile |
PGraupel |
Graupel profile |
PTemp |
Temperature profile |
PVapor |
Water vapor profile |
Plevel |
Pressure levels |
Player |
Layer index |
This script differs from tcmirs in how MIRS files are selected. Rather than matching granules spatially and temporally to each track point, files are selected by a datetime cutoff — all granules before or after a specified UTC timestamp. This approach is suited for studying a single snapshot of the storm (e.g. just before landfall) rather than the full lifecycle.
The ParaView pipeline script (paraview_trace.py) can be run directly via Tools → Python Shell → Run Script, or the steps below can be followed manually. The same netCDF file is loaded three times with different dimension configurations to render the 2D rain rate surface and two separate 3D hydrometeor contour clouds simultaneously.
Open the output .nc file three times via File → Open, creating three separate readers. Each needs a different dimension assignment:
| Reader | Dimensions | Purpose |
|---|---|---|
| Reader 1 | (Scanline, Field_of_view) |
2D rain rate slice |
| Reader 2 | (Scanline, Field_of_view, P_Layer) |
3D graupel contour |
| Reader 3 | (Scanline, Field_of_view, P_Layer) |
3D rain contour |
To set dimensions: select the reader in the Pipeline Browser → Properties panel → Dimensions dropdown.
- Select Reader 1 → change Representation to
Slice - Color by
RR(rain rate) - Click Rescale to Data Range
- This produces the horizontal rain rate map at the base of the visualization
- Select Reader 2 → Filters → Common → Contour
- Set Contour By to
PGraupel - Set isosurface value to
0.05(kg/kg) - Click Apply
- Color the contour by
PGraupel - Apply the Cold and Hot color preset (Color Map Editor → Presets)
- Click Rescale to Data Range
- Select Reader 3 → Filters → Common → Contour
- Set Contour By to
PRain - Set isosurface value to
0.01(kg/kg) - Click Apply
- Color the contour by
PRain - Apply the Cold and Hot color preset
- Click Rescale to Data Range
The two 3D contour clouds need to be repositioned relative to the 2D rain rate base so all three layers are visible together:
- Select the graupel contour → Filters → Alphabetical → Transform
- Set Translate to
[150, 15, -50]and Rotate to[0, -90, 0] - Repeat for the rain contour with the same transform values
- Hide the original contour objects; show only the transformed versions
- Move color bars to non-overlapping positions using the scalar bar placement controls
- Hide the orientation axes if desired (View → Orientation Axes)
- Use View → Reset Camera to fit all objects in view
- Save a screenshot via File → Save Screenshot
The values used in this study:
| Variable | Isosurface value | Unit |
|---|---|---|
PGraupel |
0.05 | kg/kg |
PRain |
0.01 | kg/kg |
These can be adjusted in the Contour filter properties to show more or less of the hydrometeor structure depending on the storm and time window selected.
- The datetime cutoff format is
YYYYMMDDHHmmssas an integer, extracted from characters 24–39 of the MIRS filename - IBTrACS 2021 data has incomplete WMO fields; the
if year != 2021condition handles this compat='override'is used inxr.merge()to resolve coordinate conflicts between IMG, SND, and IBTrACS datasets
Special thanks to the NOAA MIRS team for data access and scientific guidance.