Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
examples/outputs
examples/data
tests/data/input
tests/data/output

# Created by https://www.gitignore.io/api/python
Expand Down
3 changes: 2 additions & 1 deletion stormevents/nhc/const.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ class PcFillMethod(Enum):
BETA_V20 = -0.0127
BETA_fR = -5.506
BETA_fRdV = 109.013
BETA_01 = -13.37
BETA_01 = 20.23
BETA_V11 = -1.54
BETA_V21 = -0.0157

# Bias correction values for the Rmax forecast
Expand Down
14 changes: 9 additions & 5 deletions stormevents/nhc/track.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
BETA_fR,
BETA_fRdV,
BETA_01,
BETA_V21,
BETA_V11,
)
from stormevents.utilities import subset_time_interval

Expand Down Expand Up @@ -640,6 +640,8 @@ def atcf(self, advisory: ATCF_Advisory = None) -> DataFrame:
atcf.loc[:, ["longitude", "latitude"]] * 10
)

# forward fill here first before integer replacement
atcf["background_pressure"] = atcf["background_pressure"].ffill()
float_columns = atcf.select_dtypes(include=["float"]).columns
integer_na_value = -99999
for column in float_columns:
Expand Down Expand Up @@ -692,7 +694,7 @@ def atcf(self, advisory: ATCF_Advisory = None) -> DataFrame:
atcf["isotach_radius_for_NWQ"].astype("string").str.pad(5)
)

atcf["background_pressure"] = atcf["background_pressure"].ffill().astype(int)
atcf["background_pressure"] = atcf["background_pressure"].astype(int)
atcf["central_pressure"] = atcf["central_pressure"].astype(int)

press_cond_nobg = ~atcf["central_pressure"].isna() & (
Expand Down Expand Up @@ -1273,6 +1275,7 @@ def chavas_2025_Pc(data: DataFrame):
Vmax = 0.5144 * (
data.max_sustained_wind_speed - 0.55 * data.speed
) # azimuthal mean Vmax [m/s]
Vmax[Vmax < 20] = 20 # ensure Vmax doesn't go below 20 m/s
isotach_radii = data[
[
"isotach_radius_for_NEQ",
Expand All @@ -1295,7 +1298,7 @@ def chavas_2025_Pc(data: DataFrame):
+ BETA_fRdV * fo2 * R34 / Vmax
) # [hPa]
# equation where R34 isn't available
deltaP[deltaP.isna()] = BETA_01 + BETA_V21 * Vmax * Vmax # [hPa]
deltaP[deltaP.isna()] = BETA_01 + BETA_V11 * Vmax # [hPa]
return data.background_pressure + 2 + deltaP # Pc


Expand All @@ -1314,6 +1317,7 @@ def courtney_knaff_2009_Pc(data: DataFrame):

Vmax = data.max_sustained_wind_speed # Vmax [kt]
Vsrm = Vmax - 1.5 * data.speed**0.63 # azimuthal mean Vmax [kt]
Vsrm[Vsrm < 25] = 25 # ensure Vsrm doesn't go below 25 kt
isotach_radii = data[
[
"isotach_radius_for_NEQ",
Expand All @@ -1328,13 +1332,13 @@ def courtney_knaff_2009_Pc(data: DataFrame):
# forward fill to fill in 50-kt and 64-kt rows with the R34 value as
R34[data.isotach_radius > 35] = pandas.NA
R34[data.isotach_radius > 35] = R34.ffill()[data.isotach_radius > 35]
V500 = R34 / 9 - 3 # wind speed at 500 km radius
V500 = R34.ffill().bfill() / 9 - 3 # wind speed at 500 km radius
lat = data.latitude # latitude [deg]
x = 0.1147 + 0.0055 * Vmax - 0.001 * (lat - 25)
Rmax = 66.785 - 0.09102 * Vmax + 1.0619 * (lat - 25)
V500c = Vmax * (Rmax / 500) ** x # climatological wind speed at 500 km radius
S = V500 / V500c # normalized storm size
S[(S < 0.4) | (S.isna())] = 0.4 # lower bound/default value of 0.4
S[S < 0.4] = 0.4 # lower bound value of 0.4
# equation for lat >= 18 deg
deltaP = (
23.286 - 0.483 * Vsrm - (Vsrm / 24.524) ** 2 - 12.587 * S - 0.483 * lat
Expand Down
35 changes: 35 additions & 0 deletions tests/data/input/test_pcfill/barry2019-bdeck.dat
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
AL, 02, 2019071012, , BEST, 0, 285N, 865W, 25, 1009, DB, 0, , 0, 0, 0, 0, 1013, 180, 80, 0, 0, , 0, , 233, 7, TWO,,,,,,,,
AL, 02, 2019071018, , BEST, 0, 281N, 871W, 30, 1009, DB, 0, , 0, 0, 0, 0, 1013, 180, 80, 0, 0, , 0, , 233, 7, TWO,,,,,,,,
AL, 02, 2019071100, , BEST, 0, 278N, 876W, 30, 1008, TD, 0, , 0, 0, 0, 0, 1013, 180, 80, 35, 0, L, 0, , 236, 5, TWO,,,,,,,,
AL, 02, 2019071106, , BEST, 0, 277N, 880W, 35, 1007, TS, 34, NEQ, 0, 0, 100, 0, 1013, 180, 80, 35, 0, L, 0, , 254, 4, TWO,,,,,,,,
AL, 02, 2019071112, , BEST, 0, 277N, 884W, 35, 1005, TS, 34, NEQ, 0, 100, 100, 0, 1012, 180, 80, 40, 0, L, 0, , 270, 4, TWO,,,,,,,,
AL, 02, 2019071118, , BEST, 0, 277N, 888W, 40, 1005, TS, 34, NEQ, 70, 120, 100, 0, 1013, 180, 70, 45, 0, L, 0, , 270, 4, BARRY,,,,,,,,
AL, 02, 2019071200, , BEST, 0, 278N, 892W, 45, 1001, TS, 34, NEQ, 70, 140, 100, 0, 1009, 200, 70, 50, 0, L, 0, , 286, 4, BARRY,,,,,,,,
AL, 02, 2019071206, , BEST, 0, 279N, 897W, 45, 1001, TS, 34, NEQ, 70, 150, 110, 0, 1009, 200, 70, 55, 0, L, 0, , 283, 5, BARRY,,,,,,,,
AL, 02, 2019071212, , BEST, 0, 281N, 902W, 50, 998, TS, 34, NEQ, 70, 150, 120, 0, 1009, 200, 70, 60, 0, L, 0, , 294, 5, BARRY,,,,,,,,
AL, 02, 2019071212, , BEST, 0, 281N, 902W, 50, 998, TS, 50, NEQ, 0, 90, 0, 0, 1009, 200, 70, 60, 0, L, 0, , 294, 5, BARRY,,,,,,,,
AL, 02, 2019071218, , BEST, 0, 284N, 907W, 55, 993, TS, 34, NEQ, 90, 150, 130, 70, 1009, 200, 60, 65, 0, L, 0, , 304, 5, BARRY,,,,,,,,
AL, 02, 2019071218, , BEST, 0, 284N, 907W, 55, 993, TS, 50, NEQ, 60, 90, 0, 0, 1009, 200, 60, 65, 0, L, 0, , 304, 5, BARRY,,,,,,,,
AL, 02, 2019071300, , BEST, 0, 286N, 911W, 60, 993, TS, 34, NEQ, 90, 150, 130, 70, 1006, 180, 60, 65, 0, L, 0, , 300, 4, BARRY,,,,,,,,
AL, 02, 2019071300, , BEST, 0, 286N, 911W, 60, 993, TS, 50, NEQ, 60, 90, 0, 0, 1006, 180, 60, 65, 0, L, 0, , 300, 4, BARRY,,,,,,,,
AL, 02, 2019071306, , BEST, 0, 289N, 915W, 60, 993, TS, 34, NEQ, 90, 150, 130, 70, 1006, 180, 60, 65, 0, L, 0, , 310, 5, BARRY,,,,,,,,
AL, 02, 2019071306, , BEST, 0, 289N, 915W, 60, 993, TS, 50, NEQ, 60, 90, 0, 0, 1006, 180, 60, 65, 0, L, 0, , 310, 5, BARRY,,,,,,,,
AL, 02, 2019071312, , BEST, 0, 293N, 919W, 65, 993, HU, 34, NEQ, 90, 150, 130, 70, 1007, 180, 40, 80, 0, L, 0, , 319, 5, BARRY,,,,,,,,
AL, 02, 2019071312, , BEST, 0, 293N, 919W, 65, 993, HU, 50, NEQ, 60, 90, 0, 0, 1007, 180, 40, 80, 0, L, 0, , 319, 5, BARRY,,,,,,,,
AL, 02, 2019071312, , BEST, 0, 293N, 919W, 65, 993, HU, 64, NEQ, 40, 40, 0, 0, 1007, 180, 40, 80, 0, L, 0, , 319, 5, BARRY,,,,,,,,
AL, 02, 2019071315, , BEST, 0, 296N, 922W, 65, 993, HU, 34, NEQ, 90, 150, 130, 70, 1007, 180, 40, 0, 0, , 0, , 319, 8, BARRY,,,,,,,,
AL, 02, 2019071315, , BEST, 0, 296N, 922W, 65, 993, HU, 50, NEQ, 60, 90, 0, 0, 1007, 180, 40, 0, 0, , 0, , 319, 8, BARRY,,,,,,,,
AL, 02, 2019071315, , BEST, 0, 296N, 922W, 65, 993, HU, 64, NEQ, 40, 40, 0, 0, 1007, 180, 40, 0, 0, , 0, , 319, 8, BARRY,,,,,,,,
AL, 02, 2019071318, , BEST, 0, 299N, 924W, 60, 996, TS, 34, NEQ, 0, 150, 130, 0, 1009, 180, 40, 75, 0, L, 0, , 330, 7, BARRY,,,,,,,,
AL, 02, 2019071318, , BEST, 0, 299N, 924W, 60, 996, TS, 50, NEQ, 0, 90, 0, 0, 1009, 180, 40, 75, 0, L, 0, , 330, 7, BARRY,,,,,,,,
AL, 02, 2019071400, , BEST, 0, 304N, 928W, 50, 999, TS, 34, NEQ, 0, 180, 0, 0, 1007, 180, 60, 60, 0, L, 0, , 325, 6, BARRY,,,,,,,,
AL, 02, 2019071400, , BEST, 0, 304N, 928W, 50, 999, TS, 50, NEQ, 0, 90, 0, 0, 1007, 180, 60, 60, 0, L, 0, , 325, 6, BARRY,,,,,,,,
AL, 02, 2019071406, , BEST, 0, 310N, 932W, 40, 1003, TS, 34, NEQ, 0, 180, 0, 0, 1008, 180, 110, 50, 0, L, 0, , 330, 7, BARRY,,,,,,,,
AL, 02, 2019071412, , BEST, 0, 316N, 935W, 35, 1005, TS, 34, NEQ, 0, 180, 0, 0, 1010, 180, 140, 50, 0, L, 0, , 337, 7, BARRY,,,,,,,,
AL, 02, 2019071418, , BEST, 0, 323N, 936W, 35, 1007, TS, 34, NEQ, 0, 180, 0, 0, 1011, 180, 150, 45, 0, L, 0, , 353, 7, BARRY,,,,,,,,
AL, 02, 2019071500, , BEST, 0, 330N, 936W, 25, 1008, TD, 0, , 0, 0, 0, 0, 1011, 180, 150, 0, 0, , 0, , 0, 7, BARRY,,,,,,,,
AL, 02, 2019071506, , BEST, 0, 339N, 936W, 25, 1008, TD, 0, , 0, 0, 0, 0, 1011, 180, 150, 0, 0, , 0, , 0, 9, BARRY,,,,,,,,
AL, 02, 2019071512, , BEST, 0, 347N, 936W, 20, 1008, LO, 0, , 0, 0, 0, 0, 1011, 180, 150, 0, 0, , 0, , 0, 8, BARRY,,,,,,,,
AL, 02, 2019071518, , BEST, 0, 355N, 935W, 20, 1008, LO, 0, , 0, 0, 0, 0, 1011, 180, 150, 0, 0, , 0, , 6, 8, BARRY,,,,,,,,
AL, 02, 2019071600, , BEST, 0, 363N, 933W, 15, 1009, LO, 0, , 0, 0, 0, 0, 1011, 180, 150, 0, 0, , 0, , 11, 8, BARRY,,,,,,,,
AL, 02, 2019071606, , BEST, 0, 372N, 929W, 15, 1010, LO, 0, , 0, 0, 0, 0, 1011, 180, 150, 0, 0, , 0, , 20, 10, BARRY,,,,,,,,
Loading
Loading