
GAHM2026
Generalized Asymmetric Holland Model for tropical cyclone wind and pressure fields
Getting Started Derivation View on GitHub
GAHM2026 is a MATLAB codebase for computing parametric hurricane wind and pressure fields. Given tropical cyclone track data — best-track observations or forecasts — the model solves for the Generalized Asymmetric Holland Model parameters at each track time, generates azimuthally varying radial wind and pressure profiles, and interpolates them onto a regular longitude/latitude grid for output.
Paired with the companion SeparateEnvHur preprocessor, GAHM2026 blends its parametric vortex into large-scale environmental fields extracted from ERA5 reanalysis, producing complete tropical cyclone wind and pressure fields suitable for storm surge and coastal hazard modeling.
Developed by Rick Luettich (UNC/IMS/CNHR/EMES) and Brian Blanton (UNC/RENCI).
Key features
- Asymmetric wind profiles — a separate Holland $B_g$ parameter and radius of maximum winds in each quadrant (NE, SE, SW, NW) at up to three isotach levels (34, 50, 64 kt).
- Multiple track formats — IBTrACS, ATCF, and fort.22; IBTrACS is downloaded automatically if not present.
- Three environmental field options — ADCIRC/ASWIP translation velocity, Lin & Chavas (2012), or a gridded ERA5-derived field from SeparateEnvHur.
- Blending taper — hyperbolic tangent taper across the hurricane/environment boundary.
- Wind Adjustment Factor — optional land-roughness correction from a GeoTIFF raster or precomputed point file.
- NetCDF and point output — a gridded NetCDF4 file, or evaluation at arbitrary lon/lat pairs.
- Visualization toolkit — the
GAHM2026Plotterclass for contour maps, radial profiles, scatter comparisons, and GIF/MP4 animations.
The GAHM model
GAHM extends the classic Holland (1980) pressure profile by carrying the Coriolis effect through the gradient wind balance and letting the shape parameter $B_g$ vary by quadrant. The gradient wind at the top of the boundary layer is
\[V_{g}(r) = \sqrt{V_{\max}^{2}\left( 1 + R_{o}^{-1} \right)\left( \frac{R_{mw}}{r} \right)^{B_{g}}e^{\varphi\left[ 1 - \left( \frac{R_{mw}}{r} \right)^{B_{g}} \right]} + \left( \frac{rf}{2} \right)^{2}} - \frac{rf}{2}\]where $R_{o} = V_{\max}/(R_{mw} f)$ is the Rossby number and $\varphi$ follows from requiring $dV_g/dr = 0$ at $r = R_{mw}$. Given central pressure, ambient pressure, maximum sustained wind, and the radial distances to the 34/50/64 kt isotachs in four quadrants, the model solves for $B_g$ and $R_{mw}$ in each quadrant.
Two solver backends are selectable through GAHM_param_info.version: version 3 (iterative, no
toolbox required) and version 4 (MATLAB fsolve, requires the Optimization Toolbox).
The full development, including the implementation details, default conditions, blending, and the wind adjustment factor, is on the Derivation of GAHM2026 page.
Workflow
flowchart TB
subgraph INPUT["Input"]
cfg["config/config_*.m<br/>storm identity, model params,<br/>output settings"]
ibt["IBTrACS CSV<br/>(or ATCF / fort.22)"]
era5["ERA5 NetCDF<br/>u10, v10, msl"]
waf["WAF raster<br/>(land roughness)"]
end
subgraph SCRUB["SeparateEnvHur (env_info.type = 3 only)"]
scrub["SeparateEnvHur.m<br/>extract and low-pass filter<br/>the environmental field"]
envmat[".mat<br/>gridded env + hurricane fields"]
scrub --> envmat
end
run["run_GAHM2026.m<br/>load config, read track,<br/>auto-run SeparateEnvHur if needed"]
subgraph GAHM["GAHM2026.m orchestrator"]
direction TB
init["Phase A — sliceTrack, loadEnvFields"]
loop["Phase B — per track time:<br/>gahm2026Prep → gahm2026Consistency →<br/>gahm2026Solve → gahmVPradial →<br/>VEnvreg2radial2 → radialTaper2"]
grid["Phase C — radial2regular,<br/>applyWAFfromRaster, blend env + vortex"]
init --> loop --> grid
end
res["Result struct<br/>Reggrid_*, Trackdata,<br/>GAHM_out, VPrad"]
nc["writeGAHM2026NetCdf<br/>NetCDF4 (.nc)"]
plot["GAHM2026Plotter<br/>maps, profiles, animations"]
cfg --> run
cfg --> scrub
ibt --> run
era5 --> scrub
waf -.->|if WAF enabled| run
envmat -.->|if env_info.type = 3| run
run --> GAHM
GAHM --> res
res --> nc
res --> plot
Quick start
cd GAHM2026
R = run_GAHM2026; % default config/config_GAHM2026_default.m
R = run_GAHM2026('config_Florence'); % config/config_Florence.m (no path, no .m)
See Getting Started for requirements and a first run that needs no ERA5 data, and Examples for the shipped configurations.
Documentation map
| Page | Contents |
|---|---|
| Getting Started | Requirements, first run, regression tests, common gotchas |
| Derivation of GAHM2026 | Full derivation, implementation, default conditions, blending, WAF |
| Configuration | Every configuration parameter and output data structure |
| ERA5 Data | The reanalysis data GAHM2026 uses, and how to substitute your own |
| Examples | The shipped configurations and what each demonstrates |
| Input Track Files | fort.22 formats read and written |
| SeparateEnvHur | The vortex separation algorithm |
| Plotting | The GAHM2026Plotter class |
References
- Holland, G. J. (1980). An analytic model of the wind and pressure profiles in hurricanes. Monthly Weather Review, 108(8), 1212–1218.
- Gao, J. (2018). Generalized Asymmetric Holland Vortex Model. Ph.D. dissertation, Department of Marine Sciences, University of North Carolina at Chapel Hill.
- Lin, N. and Chavas, D. (2012). On hurricane parametric wind and applications in storm surge modeling. Journal of Geophysical Research, 117, D09120. doi:10.1029/2011JD017126
- Wang, S., Lin, N., and Gori, A. (2021). Investigation of tropical cyclone wind models with application to storm tide simulations. Journal of Geophysical Research: Atmospheres. doi:10.1029/2021JD036359
A complete reference list is at the end of the Derivation page.