GeoscienceAustralia / tcrm

A statistical-parametric model for assessing wind hazard from tropical cyclones
http://geoscienceaustralia.github.io/tcrm
Other
81 stars 52 forks source link

Blotchy return period wind hazard maps #105

Open richsdixon opened 3 years ago

richsdixon commented 3 years ago

Hi - like another poster I am looking at Atlantic wind hazard - I've started running the tool (I've included the .ini file below) but I'm finding the return period maps are quite "blotchy" and - as suggested in another "issue" - the hazard is pretty low, however I don't get the smoothness of output that the other person is getting.

Is anyone able to offer any advice as to why this is so "blotchy"? My only guess is that it's a function of running only 1000 years of simulation: however in those 1000 years I would hope that I'm still seeing a return period well above 30 m/s in most places for the 50-year wind hazard. Thanks in advance for any help here.

image

[Actions] ; TCRM modules to execute DataProcess=True ExecuteStat=True ExecuteTrackGenerator=True ExecuteWindfield=True ExecuteHazard=True CreateDatabase=True PlotHazard=True

PlotData=False

ExecuteEvaluate=False DownloadData=False

[DataProcess] InputFile=ibtracs.NA.list.v04r00.csv Source=IBTRACS StartSeason=1970 FilterSeasons=True

[Region] ; Domain for windfield and hazard calculation gridLimit={'xMin':275.0,'xMax':285.0,'yMin':24.0,'yMax':34.0} gridSpace={'x':1.0,'y':1.0} gridInc={'x':1.0,'y':0.5} LocalityID=250913860 LocalityName=Florida, USA

[StatInterface] kdeType=gau kde2DType=Gaussian kdeStep=0.2

[TrackGenerator] NumSimulations=1000 YearsPerSimulation=1 SeasonSeed=403943 TrackSeed=89333

[WindfieldInterface] ;TrackPath=./output/florida6/tracks Margin=5.0 Resolution=0.02 Source=TCRM profileType=holland windFieldType=kepert

[Hazard] ; Years to calculate return period wind speeds InputPath=./output/florida6/windfield ;Resolution=0.05 Years=2,5,10,50 MinimumRecords=10 CalculateCI=False

[Input]

LocationFile = input/USZipShapefile.shp

LocationFile = input/stationlist.shp landmask = input/landmask.nc mslpfile = MSLP/slp.day.ltm.nc datasets = IBTRACS,LTMSLP MSLPGrid=1,2,3,4,12

[Output] Path=./output/florida6

[Logging] LogFile=./output/florida6/log/florida6.log LogLevel=INFO Verbose=False

[Process] ExcludePastProcessed=True DatFile=./output/florida6/process/dat/florida6.dat

[RMW] GetRMWDistFromInputData=False mean=50.0 sigma=0.6

[TCRM] ; Output track files settings Columns=index,age,lon,lat,speed,bearing,pressure,penv,rmax FieldDelimiter=, NumberOfHeadingLines=1 SpeedUnits=kph PressureUnits=hPa

[IBTRACS] ; Input data file settings ; url = ftp://eclipse.ncdc.noaa.gov/pub/ibtracs/v03r10/wmo/csv/Allstorms.ibtracs_wmo.v03r10.csv.gz ;url = https://www.ncei.noaa.gov/data/international-best-track-archive-for-climate-stewardship-ibtracs/v04r00/access/csv/ibtracs.ALL.list.v04r00.csv path = input filename = ibtracs.NA.list.v04r00.csv columns = tcserialno,season,num,skip,skip,skip,date,skip,lat,lon,skip,pressure fielddelimiter = , numberofheadinglines = 2 pressureunits = hPa lengthunits = km dateformat = %Y-%m-%d %H:%M:%S speedunits = mph

[LTMSLP] ; MSLP climatology file settings URL = ftp://ftp.cdc.noaa.gov/Datasets/ncep.reanalysis.derived/surface/slp.day.1981-2010.ltm.nc path = MSLP filename = slp.day.ltm.nc

wcarthur commented 3 years ago

There is a 1 degree smoothing filter applied to the data before plotting (the underlying data in the hazard/hazard.nc file is unchanged). The smoothing filter propagates missing values. In the case of the example simulations, the likelihood of a grid point not recording a wind speed is moderate, leading to the blotchiness. We've implemented the filter to avoid

Solutions include increasing the Margin setting and increasing the number of simulations NumSimulations. Alternatively, you can comment out the firt three lines in the HazardMap.plot method in PlotInterface/maps.py

class HazardMap(FilledContourMapFigure):
    """
    A map for presenting return level data. 

    """
    def plot(self, data, xgrid, ygrid, title, lvls, cbarlab, map_kwargs):
        #dx = np.mean(np.diff(xgrid))
        #dmask = data.mask
        #data = ma.array(data, mask=dmask)
        self.add(data, xgrid, ygrid, title, lvls, cbarlab, map_kwargs)
        self.cmap = sns.light_palette("orange", as_cmap=True)
        super(HazardMap, self).plot()