END-TO-END IMPACT CALCULATION

Goal of this tutorial

The goal of this tutorial is to show a full end-to-end impact computation. Note that this tutorial examplifies the work flow, but does not explore all possible features.

What is an Impact?

The impact is the combined effect of hazard events on a set of exposures mediated by a set of impact functions. By computing the impact for each event (historical and synthetic) and for each exposure value at each geographical location, the Impact class provides different risk measures, such as the expected annual impact per exposure, the probable maximum impact for different return periods, and the total average annual impact.

Impact class data structure

The impact class does not require any attributes to be defined by the user. All attributes are set by the method impact.calc(). This method requires three attributes: an Exposure, a Hazard, and an ImpactFuncSet. After calling impact.calc(Exposure, ImpactFuncSet, Hazard, save_mat=False), the Impact object has the following attributes:

Attributes from input

Data Type

Description

tag

(dict)

dictionary storing the tags of the inputs (Exposure.tag, ImpactFuncSet.tag Hazard.tag)

even_id

list(int)

id (>0) of each hazard event (Hazard.event_id)

event_name

(list(str))

name of each event (Hazard.event_name)

date

np.array

date of events (Hazard.date)

coord_exp

np.array

exposures coordinates [lat, lon] (in degrees) (Exposure.gdf.latidues, Exposure.gdf.longitude)

frequency

np.array

annual frequency of events (Hazard.frequency)

unit

str

value unit used (Exposure.value_unit)

csr

str

unit system for Exposure and Hazard geographical data (Exposure.csr)

Computed attributes

Data Type

Description

at_event

np.array

impact for each hazard event summed over all locations

eai_exp

np.array

expected annual impact for each locations, summed over all events weigthed by frequency

aai_agg

float

total annual average aggregated impact value (summed over events and locations)

impt_mat

sparse.csr_matrix

matrix (num_events X num_exp) with impact values (only filled if save_mat is True).

tot_value

float

total exposure value affected (sum of value all exposures locations affected by at least one hazard event)

All other methods compute values from the attributes set by Impact.cacl(). For example, one can compute the frequency exceedance curve, plot impact data, or compute traditional risk transfer over impact.

How do I compute an impact in CLIMADA?

In CLIMADA, impacts are computed using the Impact class. To computation of the impact requires an Exposure , an ImpactFuncSet, and a Hazard object. For details about how to define Exposures , Hazard, Impact Functions see the respective tutorials.

The steps of an impact caculations are typically:

  • Set exposure

  • Set hazard and hazard centroids

  • Set impact functions in impact function set

  • Compute impact

  • Visualize, save, use impact output

Hints: Before computing the impact of a given Exposure and Hazard, it is important to correctly match the Exposures' coordinates with the Hazard Centroids. Try to have similar resolutions in Exposures and Hazard. By the impact calculation the nearest neighbor for each Exposure to the Hazard's Centroids is searched.

Hint: Set first the Exposures and use its coordinates information to set a matching Hazard.

Hint: The configurable parameter max_matrix_size defined in the configuration file (located at /climada/conf/defaults.conf) controls the maximum matrix size contained in a chunk. You can decrease its value if you are having memory issues when using the Impact.calc() method. A high value will make the computation fast, but increase the memory use.

Structure of the tutorial

We begin with one very detailled example, and later present in quick and dirty examples.

Part1: Detailed impact calculation with Litpop and TropCyclone

Part2: Quick examples: raster and point exposures/hazards

Part3: Visualization methods

Detailed Impact calculation - LitPop + TropCyclone

We present a detailed example for the hazard Tropical Cyclones and the exposures from LitPop .

Define the exposure

Reminder: The exposures must be defined according to your problem either using CLIMADA exposures such as BlackMarble, LitPop,OSM, extracted from external sources (imported via csv, excel, api, …) or directly user defined. As a reminder, exposures are geopandas dataframes with at least columns ‘latitude’, ‘longitude’ and ‘value’ of exposures. For impact calculations, for each exposure value the corresponding impact function to use (defined by the column impf_) and the associated hazard centroids must be defined. This is done after defining the impact function(s) and the hazard(s). See tutorials on Exposures , Hazard, ImpactFuncSet for more details.

Exposures are either defined as a series of (latitude/longitude) points or as a raster of (latitude/longitude) points. Fundamentally, this changes nothing for the impact computations. Note that for larger number of points, consider using a raster which might be more efficient (computationally). For a low number of points, avoid using a raster if this adds a lot of exposures values equal to 0.

We shall here use a raster example.

[1]:
# Exposure from the module Litpop
# Note that the file gpw_v4_population_count_rev11_2015_30_sec.tif must be downloaded (do not forget to unzip) if
# you want to execute this cell on your computer.

%matplotlib inline
import numpy as np
from climada.entity import LitPop

# Cuba with resolution 10km and financial_mode = income group.
exp_lp = LitPop.from_countries(countries=['CUB'], res_arcsec=300, fin_mode='income_group')
exp_lp.check()
2021-10-19 16:49:06,420 - climada.entity.exposures.litpop.gpw_population - WARNING - Reference year: 2018. Using nearest available year for GPW data: 2020
[2]:
exp_lp.gdf.head()
[2]:
value geometry latitude longitude region_id impf_
0 4.730991e+10 POINT (-82.37500 23.12500) 23.125 -82.375000 192 1
1 2.990876e+10 POINT (-82.29167 23.12500) 23.125 -82.291667 192 1
2 6.839380e+09 POINT (-82.20833 23.12500) 23.125 -82.208333 192 1
3 1.925246e+09 POINT (-82.12500 23.12500) 23.125 -82.125000 192 1
4 2.422598e+08 POINT (-82.04167 23.12500) 23.125 -82.041667 192 1
[3]:
# not needed for impact calculations
# visualize the define exposure
exp_lp.plot_raster()
print('\n Raster properties exposures:', exp_lp.meta)
2021-04-30 13:11:13,034 - climada.util.coordinates - INFO - Raster from resolution 0.0833333333333286 to 0.0833333333333286.

 Raster properties exposures: {'width': 129, 'height': 41, 'crs': 'EPSG:4326', 'transform': Affine(0.0833333333333286, 0.0, -84.91666666666669,
       0.0, 0.0833333333333286, 19.833333333333336)}
../_images/tutorial_climada_engine_Impact_23_1.png

Define the hazard

Let us define a tropical cyclone hazard using the TropCyclone and TCTracks modules.

[4]:
from climada.hazard import TCTracks, TropCyclone, Centroids

# Load histrocial tropical cyclone tracks from ibtracs over the North Atlantic basin between 2010-2012
ibtracks_na = TCTracks.from_ibtracs_netcdf(provider='usa', basin='NA', year_range=(2010, 2012), correct_pres=True)
print('num tracks hist:', ibtracks_na.size)

ibtracks_na.equal_timestep(0.5)  # Interpolation to make the track smooth and to allow applying calc_perturbed_trajectories
# Add randomly generated tracks using the calc_perturbed_trajectories method (1 per historical track)
ibtracks_na.calc_perturbed_trajectories(nb_synth_tracks=1)
print('num tracks hist+syn:', ibtracks_na.size)
2021-10-19 16:49:12,745 - climada.hazard.tc_tracks - WARNING - `correct_pres` is deprecated. Use `estimate_missing` instead.
num tracks hist: 60
num tracks hist+syn: 120
[5]:
# not needed for calculations
# visualize tracks
ax = ibtracks_na.plot()
ax.get_legend()._loc = 2
../_images/tutorial_climada_engine_Impact_27_0.png

From the tracks, we generate the hazards (the tracks are only the coordinates of the center of the cyclones, the full cyclones however affects a region around the tracks).

First thing we define the set of centroids which are geographical points where the hazard has a defined value. In our case, we want to define windspeeds from the tracks.

Remember: In the impact computations, for each exposure geographical point, one must assign a centroid from the hazard. By default, each exposure is assigned to the closest centroid from the hazard. But one can also define manually which centroid is assigned to which exposure point.

Examples: - Define the exposures from a given source (e.g., raster of asset values from LitPop). Define the hazard centroids from the exposures’ geolocations (e.g. compute Tropical Cyclone windspeed at each raster point and assign centroid to each raster point). - Define the exposures from a given source (e.g. houses position and value). Define the hazard from a given source (e.g. where lanslides occur). Use a metric to assign to each exposures point a hazard centroid (all houses in a radius of 5km around the lanslide are assigned to this centroid, if a house is within 5km of two landslides, choose the closest one). - Define a geographical raster. Define the exposures value on this raster. Define the hazard centroids on the geographical raster.

We shall pursue with the first case (Litpop + TropicalCyclone)

Hint: computing the wind speeds in many locations for many tc tracks is a computationally costly operation. Thus, we should define centroids only where we also have an exposure.

[6]:
# Define the centroids from the exposures position
lat = exp_lp.gdf['latitude'].values
lon = exp_lp.gdf['longitude'].values
centrs = Centroids.from_lat_lon(lat, lon)
centrs.check()
[7]:
# Using the tracks, compute the windspeed at the location of the centroids
tc = TropCyclone.from_tracks(ibtracks_na, centroids=centrs)
tc.check()

Hint: The operation of computing the windspeed in different location is in general computationally expensive. Hence, if you have a lot of tropical cyclone tracks, you should first make sure that all your tropical cyclones actually affect your exposure (remove those that don’t). Then, be careful when defining the centroids. For a large country like China, there is no need for centroids 500km inlans (no tropical cyclones gets so far).

Impact function

For Tropical Cyclones, some calibrated default impact functions exist. Here we will use the one from Emanuel (2011).

[8]:
from climada.entity import ImpactFuncSet, ImpfTropCyclone
# impact function TC
impf_tc = ImpfTropCyclone.from_emanuel_usa()

# add the impact function to an Impact function set
impf_set = ImpactFuncSet()
impf_set.append(impf_tc)
impf_set.check()
2021-10-19 16:49:44,667 - climada.entity.impact_funcs.base - WARNING - For intensity = 0, mdd != 0 or paa != 0. Consider shifting the origin of the intensity scale. In impact.calc the impact is always null at intensity = 0.

Recall that the exposures, hazards and impact functions must be matched in the impact calculations. Here it is simple, since there is a single impact function for all the hazards. We must simply make sure that the exposure is assigned this impact function through renaming the impf_ column from the hazard type of the impact function in the impact function set and set the values of the column to the id of the impact function.

[9]:
# Get the hazard type and hazard id
[haz_type] = impf_set.get_hazard_types()
[haz_id] = impf_set.get_ids()[haz_type]
print(f"hazard type: {haz_type}, hazard id: {haz_id}")
hazard type: TC, hazard id: 1
[10]:
# Exposures: rename column and assign id
exp_lp.gdf.rename(columns={"impf_": "impf_" + haz_type}, inplace=True)
exp_lp.gdf['impf_' + haz_type] = haz_id
exp_lp.check()
exp_lp.gdf.head()
[10]:
value geometry latitude longitude region_id impf_TC
0 4.730991e+10 POINT (-82.37500 23.12500) 23.125 -82.375000 192 1
1 2.990876e+10 POINT (-82.29167 23.12500) 23.125 -82.291667 192 1
2 6.839380e+09 POINT (-82.20833 23.12500) 23.125 -82.208333 192 1
3 1.925246e+09 POINT (-82.12500 23.12500) 23.125 -82.125000 192 1
4 2.422598e+08 POINT (-82.04167 23.12500) 23.125 -82.041667 192 1

Impact computation

We are finally ready for the impact computation. This is the simplest step. Just give the exposure, impact function and hazard to the Impact.calc() method.

Note: we did not specifically assign centroids to the exposures. Hence, the default is used - each exposure is associated with the closest centroids. Since we defined the centroids from the exposures, this is a one-to-one mapping.

Note: we did not define an Entity in this impact calculations. Recall that Entity is a container class for Exposures, Impact Functions, Discount Rates and Measures. Since we had only one Exposure and one Impact Function, the container would not have added any value, but for more complex projects, the Entity class is very useful.

[11]:
# Compute impact
from climada.engine import Impact
imp = Impact()
imp.calc(exp_lp, impf_set, tc, save_mat=False) #Do not save the results geographically resolved (only aggregate values)
[12]:
exp_lp.gdf
[12]:
value geometry latitude longitude region_id impf_TC centr_TC
0 4.730991e+10 POINT (-82.37500 23.12500) 23.125000 -82.375000 192 1 0
1 2.990876e+10 POINT (-82.29167 23.12500) 23.125000 -82.291667 192 1 1
2 6.839380e+09 POINT (-82.20833 23.12500) 23.125000 -82.208333 192 1 2
3 1.925246e+09 POINT (-82.12500 23.12500) 23.125000 -82.125000 192 1 3
4 2.422598e+08 POINT (-82.04167 23.12500) 23.125000 -82.041667 192 1 4
... ... ... ... ... ... ... ...
1383 6.191982e+06 POINT (-78.29167 22.45833) 22.458333 -78.291667 192 1 1383
1384 8.882190e+05 POINT (-79.20833 22.62500) 22.625000 -79.208333 192 1 1384
1385 7.629772e+05 POINT (-79.62500 22.79167) 22.791667 -79.625000 192 1 1385
1386 9.065058e+05 POINT (-79.45833 22.70833) 22.708333 -79.458333 192 1 1386
1387 2.411896e+05 POINT (-80.79167 23.20833) 23.208333 -80.791667 192 1 1387

1388 rows × 7 columns

For example we can now obtain the aggregated average annual impact or plot the average annual impact in each exposure location.

[13]:
print(f"Aggregated average annual impact: {round(imp.aai_agg,0)} $")
Aggregated average annual impact: 563366225.0 $
[14]:
imp.plot_hexbin_eai_exposure(buffer=1)
[14]:
<GeoAxesSubplot:title={'center':'Expected annual impact'}>
../_images/tutorial_climada_engine_Impact_46_1.png
[15]:
# Compute exceedance frequency curve
freq_curve = imp.calc_freq_curve()
freq_curve.plot()
[15]:
<AxesSubplot:title={'center':'Exceedance frequency curve'}, xlabel='Return period (year)', ylabel='Impact (USD)'>
../_images/tutorial_climada_engine_Impact_47_1.png

Quick examples - points, raster, custom

User defined point exposure and Tropical Cyclone hazard

[16]:
%matplotlib inline
# EXAMPLE: POINT EXPOSURES WITH POINT HAZARD
import numpy as np
from climada.entity import Exposures, ImpactFuncSet, IFTropCyclone
from climada.hazard import Centroids, TCTracks, TropCyclone
from climada.engine import Impact

# Set Exposures in points
exp_pnt = Exposures(crs='epsg:4326') #set coordinate system
exp_pnt.gdf['latitude'] = np.array([21.899326, 21.960728, 22.220574, 22.298390, 21.787977, 21.787977, 21.981732])
exp_pnt.gdf['longitude'] = np.array([88.307422, 88.565362, 88.378337, 87.806356, 88.348835, 88.348835, 89.246521])
exp_pnt.gdf['value'] = np.array([1.0e5, 1.2e5, 1.1e5, 1.1e5, 2.0e5, 2.5e5, 0.5e5])
exp_pnt.check()
exp_pnt.plot_scatter(buffer=0.05)

# Set Hazard in Exposures points
# set centroids from exposures coordinates
centr_pnt = Centroids.from_lat_lon(exp_pnt.gdf.latitude.values, exp_pnt.gdf.longitude.values, exp_pnt.crs)
# compute Hazard in that centroids
tr_pnt = TCTracks.from_ibtracs_netcdf(storm_id='2007314N10093')
tc_pnt = TropCyclone.from_tracks(tr_pnt, centroids=centr_pnt)
tc_pnt.check()
ax_pnt = tc_pnt.centroids.plot(c=np.array(tc_pnt.intensity[0,:].todense()).squeeze()) # plot intensity per point
ax_pnt.get_figure().colorbar(ax_pnt.collections[0], fraction=0.0175, pad=0.02).set_label('Intensity (m/s)') # add colorbar

# Set impact function
impf_pnt = ImpactFuncSet()
impf_tc = ImpfTropCyclone.from_emanuel_usa()
impf_pnt.append(impf_tc)
impf_pnt.check()

# Get the hazard type and hazard id
[haz_type] = impf_set.get_hazard_types()
[haz_id] = impf_set.get_ids()[haz_type]
# Exposures: rename column and assign id
exp_lp.gdf.rename(columns={"impf_": "impf_" + haz_type}, inplace=True)
exp_lp.gdf['impf_' + haz_type] = haz_id
exp_lp.gdf.head()

# Compute Impact
imp_pnt = Impact()
imp_pnt.calc(exp_pnt, impf_pnt, tc_pnt)
# nearest neighbor of exposures to centroids gives identity
print('Nearest neighbor hazard.centroids indexes for each exposure:', exp_pnt.gdf.centr_TC.values)
imp_pnt.plot_scatter_eai_exposure(ignore_zero=False, buffer=0.05)
2021-10-19 16:49:49,046 - climada.entity.impact_funcs.base - WARNING - For intensity = 0, mdd != 0 or paa != 0. Consider shifting the origin of the intensity scale. In impact.calc the impact is always null at intensity = 0.
Nearest neighbor hazard.centroids indexes for each exposure: [0 1 2 3 4 5 6]
[16]:
<GeoAxesSubplot:title={'center':'Expected annual impact'}>
../_images/tutorial_climada_engine_Impact_50_2.png
../_images/tutorial_climada_engine_Impact_50_3.png
../_images/tutorial_climada_engine_Impact_50_4.png

Raster from file

[17]:
# EXAMPLE: RASTER EXPOSURES WITH RASTER HAZARD
from rasterio.warp import Resampling
from climada.entity import LitPop, ImpactFuncSet, ImpactFunc
from climada.hazard import Hazard
from climada.engine import Impact
from climada.util.constants import HAZ_DEMO_FL

# Exposures belonging to a raster (the raser information is contained in the meta attribute)
exp_ras = LitPop.from_countries(countries=['VEN'], res_arcsec=300, fin_mode='income_group')
exp_ras.gdf.reset_index()
exp_ras.check()
exp_ras.plot_raster()
print('\n Raster properties exposures:', exp_ras.meta)

# Initialize hazard object with haz_type = 'FL' (for Flood)
hazard_type='FL'
# Load a previously generated (either with CLIMADA or other means) hazard
# from file (HAZ_DEMO_FL) and resample the hazard raster to the exposures' ones
# Hint: check how other resampling methods affect to final impact
haz_ras = Hazard.from_raster([HAZ_DEMO_FL], haz_type=hazard_type, dst_crs=exp_ras.meta['crs'], transform=exp_ras.meta['transform'],
                             width=exp_ras.meta['width'], height=exp_ras.meta['height'],
                             resampling=Resampling.nearest)
haz_ras.intensity[haz_ras.intensity==-9999] = 0 # correct no data values
haz_ras.check()
haz_ras.plot_intensity(1)
print('Raster properties centroids:', haz_ras.centroids.meta)

# Set dummy impact function
impf_dum = ImpactFunc()
impf_dum.id = haz_id
impf_dum.name = 'dummy'
impf_dum.intensity_unit = 'm'
impf_dum.haz_type = hazard_type
impf_dum.intensity = np.linspace(0, 10, 100)
impf_dum.mdd = np.linspace(0, 10, 100)
impf_dum.paa = np.ones(impf_dum.intensity.size)
# Add the impact function to the impact function set
impf_ras = ImpactFuncSet()
impf_ras.append(impf_dum)
impf_ras.check()

# Exposures: rename column and assign id
exp_lp.gdf.rename(columns={"impf_": "impf_" + hazard_type}, inplace=True)
exp_lp.gdf['impf_' + haz_type] = haz_id
exp_lp.gdf.head()

# Compute impact
imp_ras = Impact()
imp_ras.calc(exp_ras, impf_ras, haz_ras, save_mat=False)
# nearest neighbor of exposures to centroids is not identity because litpop does not contain data outside the country polygon
print('\n Nearest neighbor hazard.centroids indexes for each exposure:', exp_ras.gdf.centr_FL.values)
imp_ras.plot_raster_eai_exposure()
2021-10-19 16:49:51,864 - climada.entity.exposures.litpop.gpw_population - WARNING - Reference year: 2018. Using nearest available year for GPW data: 2020

 Raster properties exposures: {'width': 163, 'height': 138, 'crs': <Geographic 2D CRS: EPSG:4326>
Name: WGS 84
Axis Info [ellipsoidal]:
- Lat[north]: Geodetic latitude (degree)
- Lon[east]: Geodetic longitude (degree)
Area of Use:
- undefined
Datum: World Geodetic System 1984
- Ellipsoid: WGS 84
- Prime Meridian: Greenwich
, 'transform': Affine(0.08333333000000209, 0.0, -73.41666666500001,
       0.0, -0.08333332999999987, 12.166666665)}
Raster properties centroids: {'driver': 'GSBG', 'dtype': 'float32', 'nodata': 1.701410009187828e+38, 'width': 163, 'height': 138, 'count': 1, 'crs': <Geographic 2D CRS: EPSG:4326>
Name: WGS 84
Axis Info [ellipsoidal]:
- Lat[north]: Geodetic latitude (degree)
- Lon[east]: Geodetic longitude (degree)
Area of Use:
- undefined
Datum: World Geodetic System 1984
- Ellipsoid: WGS 84
- Prime Meridian: Greenwich
, 'transform': Affine(0.08333333000000209, 0.0, -73.41666666500001,
       0.0, -0.08333332999999987, 12.166666665)}
2021-10-19 16:50:02,231 - climada.entity.impact_funcs.base - WARNING - For intensity = 0, mdd != 0 or paa != 0. Consider shifting the origin of the intensity scale. In impact.calc the impact is always null at intensity = 0.

 Nearest neighbor hazard.centroids indexes for each exposure: [  39   40   41 ... 3551 2721  594]
[17]:
<GeoAxesSubplot:title={'center':'Expected annual impact'}>
../_images/tutorial_climada_engine_Impact_52_2.png
../_images/tutorial_climada_engine_Impact_52_3.png
../_images/tutorial_climada_engine_Impact_52_4.png

VISUALIZATION

Making plots

The expected annual impact per exposure can be visualized through different methods: plot_hexbin_eai_exposure(), plot_scatter_eai_exposur(), plot_raster_eai_exposure() and plot_basemap_eai_exposure() (similarly as with Exposures).

[18]:
imp_pnt.plot_basemap_eai_exposure(buffer=5000)
[18]:
<GeoAxesSubplot:title={'center':'Expected annual impact'}>
../_images/tutorial_climada_engine_Impact_56_1.png

Making videos

Given a fixed exposure and impact functions, a sequence of hazards can be visualized hitting the exposures.

[19]:
# exposure
from climada.entity import add_sea
from climada_petals.entity import BlackMarble

exp_video = BlackMarble()
exp_video.set_countries(['Cuba'], 2016, res_km=2.5)
exp_video.check()

# impact function
impf_def = ImpfTropCyclone.from_emanuel_usa()
impfs_video = ImpactFuncSet()
impfs_video.append(impf_def)
impfs_video.check()

# compute sequence of hazards using TropCyclone video_intensity method
exp_sea = add_sea(exp_video, (100, 5))
centr_video = Centroids.from_lat_lon(exp_sea.gdf.latitude.values, exp_sea.gdf.longitude.values)
centr_video.check()

track_name = '2017242N16333'
tr_irma = TCTracks.from_ibtracs_netcdf(provider='usa', storm_id=track_name) # IRMA 2017

tc_video = TropCyclone()
tc_list, _ = tc_video.video_intensity(track_name, tr_irma, centr_video) # empty file name to not to write the video

# generate video of impacts
file_name='./results/irma_imp_fl.gif'
imp_video = Impact()
imp_list = imp_video.video_direct_impact(exp_video, impfs_video, tc_list, file_name)

2021-04-30 13:13:09,080 - climada.entity.exposures.base - INFO - meta set to default value {}
2021-04-30 13:13:09,086 - climada.entity.exposures.base - INFO - tag set to default value  File:
 Description:
2021-04-30 13:13:09,088 - climada.entity.exposures.base - INFO - ref_year set to default value 2018
2021-04-30 13:13:09,097 - climada.entity.exposures.base - INFO - value_unit set to default value USD
2021-04-30 13:13:09,100 - climada.entity.exposures.base - INFO - crs set to default value: EPSG:4326
2021-04-30 13:13:10,128 - climada.util.finance - INFO - GDP CUB 2016: 9.137e+10.
2021-04-30 13:13:10,197 - climada.util.finance - INFO - Income group CUB 2016: 3.
2021-04-30 13:13:10,198 - climada.entity.exposures.black_marble - INFO - Nightlights from NASA's earth observatory for year 2016.
2021-04-30 13:13:18,224 - climada.entity.exposures.black_marble - INFO - Processing country Cuba.
2021-04-30 13:13:19,316 - climada.entity.exposures.black_marble - INFO - Generating resolution of approx 2.5 km.
2021-04-30 13:13:19,478 - climada.entity.exposures.base - INFO - meta set to default value {}
2021-04-30 13:13:19,479 - climada.entity.exposures.base - INFO - tag set to default value  File:
 Description:
2021-04-30 13:13:19,480 - climada.entity.exposures.base - INFO - ref_year set to default value 2018
2021-04-30 13:13:19,481 - climada.entity.exposures.base - INFO - value_unit set to default value USD
2021-04-30 13:13:19,485 - climada.entity.exposures.base - INFO - crs set to default value: EPSG:4326
2021-04-30 13:13:19,511 - climada.entity.exposures.base - INFO - meta set to default value {}
2021-04-30 13:13:19,522 - climada.entity.exposures.base - INFO - Hazard type not set in impf_
2021-04-30 13:13:19,525 - climada.entity.exposures.base - INFO - category_id not set.
2021-04-30 13:13:19,528 - climada.entity.exposures.base - INFO - cover not set.
2021-04-30 13:13:19,529 - climada.entity.exposures.base - INFO - deductible not set.
2021-04-30 13:13:19,530 - climada.entity.exposures.base - INFO - geometry not set.
2021-04-30 13:13:19,532 - climada.entity.exposures.base - INFO - centr_ not set.
2021-04-30 13:13:19,534 - climada.entity.impact_funcs.base - WARNING - For intensity = 0, mdd != 0 or paa != 0. Consider shifting the origin of the intensity scale. In impact.calc the impact is always null at intensity = 0.
2021-04-30 13:13:19,536 - climada.entity.exposures.base - INFO - Adding sea at 5 km resolution and 100 km distance from coast.
2021-04-30 13:13:20,980 - climada.hazard.tc_tracks - INFO - Progress: 100%
2021-04-30 13:13:21,016 - climada.hazard.centroids.centr - INFO - Convert centroids to GeoSeries of Point shapes.
2021-04-30 13:13:33,062 - climada.util.coordinates - INFO - dist_to_coast: UTM 32616 (1/3)
2021-04-30 13:13:40,527 - climada.util.coordinates - INFO - dist_to_coast: UTM 32617 (2/3)
2021-04-30 13:14:01,057 - climada.util.coordinates - INFO - dist_to_coast: UTM 32618 (3/3)
2021-04-30 13:14:11,473 - climada.hazard.trop_cyclone - INFO - Mapping 1 tracks to 22776 coastal centroids.
2021-04-30 13:14:11,509 - climada.hazard.trop_cyclone - INFO - Progress: 100%
2021-04-30 13:14:11,527 - climada.hazard.trop_cyclone - INFO - Mapping 1 tracks to 25701 coastal centroids.
2021-04-30 13:14:11,563 - climada.hazard.trop_cyclone - INFO - Progress: 100%
2021-04-30 13:14:11,580 - climada.hazard.trop_cyclone - INFO - Mapping 1 tracks to 29239 coastal centroids.
2021-04-30 13:14:11,633 - climada.hazard.trop_cyclone - INFO - Progress: 100%
2021-04-30 13:14:11,648 - climada.hazard.trop_cyclone - INFO - Mapping 1 tracks to 32187 coastal centroids.
2021-04-30 13:14:11,691 - climada.hazard.trop_cyclone - INFO - Progress: 100%
2021-04-30 13:14:11,710 - climada.hazard.trop_cyclone - INFO - Mapping 1 tracks to 34921 coastal centroids.
2021-04-30 13:14:11,763 - climada.hazard.trop_cyclone - INFO - Progress: 100%
2021-04-30 13:14:11,777 - climada.hazard.trop_cyclone - INFO - Mapping 1 tracks to 37244 coastal centroids.
2021-04-30 13:14:11,831 - climada.hazard.trop_cyclone - INFO - Progress: 100%
2021-04-30 13:14:11,845 - climada.hazard.trop_cyclone - INFO - Mapping 1 tracks to 39418 coastal centroids.
2021-04-30 13:14:11,897 - climada.hazard.trop_cyclone - INFO - Progress: 100%
2021-04-30 13:14:11,910 - climada.hazard.trop_cyclone - INFO - Mapping 1 tracks to 42155 coastal centroids.
2021-04-30 13:14:11,966 - climada.hazard.trop_cyclone - INFO - Progress: 100%
2021-04-30 13:14:11,981 - climada.hazard.trop_cyclone - INFO - Mapping 1 tracks to 43662 coastal centroids.
2021-04-30 13:14:12,054 - climada.hazard.trop_cyclone - INFO - Progress: 100%
2021-04-30 13:14:12,067 - climada.hazard.trop_cyclone - INFO - Mapping 1 tracks to 45523 coastal centroids.
2021-04-30 13:14:12,132 - climada.hazard.trop_cyclone - INFO - Progress: 100%
2021-04-30 13:14:12,151 - climada.hazard.trop_cyclone - INFO - Mapping 1 tracks to 47105 coastal centroids.
2021-04-30 13:14:12,211 - climada.hazard.trop_cyclone - INFO - Progress: 100%
2021-04-30 13:14:12,227 - climada.hazard.trop_cyclone - INFO - Mapping 1 tracks to 48082 coastal centroids.
2021-04-30 13:14:12,291 - climada.hazard.trop_cyclone - INFO - Progress: 100%
2021-04-30 13:14:12,304 - climada.hazard.trop_cyclone - INFO - Mapping 1 tracks to 48019 coastal centroids.
2021-04-30 13:14:12,375 - climada.hazard.trop_cyclone - INFO - Progress: 100%
2021-04-30 13:14:12,389 - climada.hazard.trop_cyclone - INFO - Mapping 1 tracks to 47081 coastal centroids.
2021-04-30 13:14:12,457 - climada.hazard.trop_cyclone - INFO - Progress: 100%
2021-04-30 13:14:12,469 - climada.hazard.trop_cyclone - INFO - Mapping 1 tracks to 45784 coastal centroids.
2021-04-30 13:14:12,534 - climada.hazard.trop_cyclone - INFO - Progress: 100%
2021-04-30 13:14:12,547 - climada.hazard.trop_cyclone - INFO - Mapping 1 tracks to 44307 coastal centroids.
2021-04-30 13:14:12,598 - climada.hazard.trop_cyclone - INFO - Progress: 100%
2021-04-30 13:14:12,613 - climada.hazard.trop_cyclone - INFO - Mapping 1 tracks to 43081 coastal centroids.
2021-04-30 13:14:12,676 - climada.hazard.trop_cyclone - INFO - Progress: 100%
2021-04-30 13:14:12,691 - climada.hazard.trop_cyclone - INFO - Mapping 1 tracks to 42086 coastal centroids.
2021-04-30 13:14:12,751 - climada.hazard.trop_cyclone - INFO - Progress: 100%
2021-04-30 13:14:12,768 - climada.hazard.trop_cyclone - INFO - Mapping 1 tracks to 41313 coastal centroids.
2021-04-30 13:14:12,827 - climada.hazard.trop_cyclone - INFO - Progress: 100%
2021-04-30 13:14:12,844 - climada.hazard.trop_cyclone - INFO - Mapping 1 tracks to 40713 coastal centroids.
2021-04-30 13:14:12,896 - climada.hazard.trop_cyclone - INFO - Progress: 100%
2021-04-30 13:14:12,911 - climada.hazard.trop_cyclone - INFO - Mapping 1 tracks to 40023 coastal centroids.
2021-04-30 13:14:12,964 - climada.hazard.trop_cyclone - INFO - Progress: 100%
2021-04-30 13:14:12,978 - climada.entity.exposures.base - INFO - Matching 21923 exposures with 49817 centroids.
2021-04-30 13:14:13,046 - climada.engine.impact - INFO - Calculating damage for 14654 assets (>0) and 1 events.
2021-04-30 13:14:13,047 - climada.entity.exposures.base - INFO - No specific impact function column found for hazard TC. Using the anonymous 'impf_' column.
2021-04-30 13:14:13,054 - climada.engine.impact - INFO - Exposures matching centroids found in centr_TC
2021-04-30 13:14:13,059 - climada.engine.impact - INFO - Calculating damage for 14654 assets (>0) and 1 events.
2021-04-30 13:14:13,060 - climada.entity.exposures.base - INFO - No specific impact function column found for hazard TC. Using the anonymous 'impf_' column.
2021-04-30 13:14:13,067 - climada.engine.impact - INFO - Exposures matching centroids found in centr_TC
2021-04-30 13:14:13,071 - climada.engine.impact - INFO - Calculating damage for 14654 assets (>0) and 1 events.
2021-04-30 13:14:13,073 - climada.entity.exposures.base - INFO - No specific impact function column found for hazard TC. Using the anonymous 'impf_' column.
2021-04-30 13:14:13,082 - climada.engine.impact - INFO - Exposures matching centroids found in centr_TC
2021-04-30 13:14:13,085 - climada.engine.impact - INFO - Calculating damage for 14654 assets (>0) and 1 events.
2021-04-30 13:14:13,089 - climada.entity.exposures.base - INFO - No specific impact function column found for hazard TC. Using the anonymous 'impf_' column.
2021-04-30 13:14:13,097 - climada.engine.impact - INFO - Exposures matching centroids found in centr_TC
2021-04-30 13:14:13,100 - climada.engine.impact - INFO - Calculating damage for 14654 assets (>0) and 1 events.
2021-04-30 13:14:13,101 - climada.entity.exposures.base - INFO - No specific impact function column found for hazard TC. Using the anonymous 'impf_' column.
2021-04-30 13:14:13,109 - climada.engine.impact - INFO - Exposures matching centroids found in centr_TC
2021-04-30 13:14:13,117 - climada.engine.impact - INFO - Calculating damage for 14654 assets (>0) and 1 events.
2021-04-30 13:14:13,123 - climada.entity.exposures.base - INFO - No specific impact function column found for hazard TC. Using the anonymous 'impf_' column.
2021-04-30 13:14:13,132 - climada.engine.impact - INFO - Exposures matching centroids found in centr_TC
2021-04-30 13:14:13,135 - climada.engine.impact - INFO - Calculating damage for 14654 assets (>0) and 1 events.
2021-04-30 13:14:13,139 - climada.entity.exposures.base - INFO - No specific impact function column found for hazard TC. Using the anonymous 'impf_' column.
2021-04-30 13:14:13,147 - climada.engine.impact - INFO - Exposures matching centroids found in centr_TC
2021-04-30 13:14:13,151 - climada.engine.impact - INFO - Calculating damage for 14654 assets (>0) and 1 events.
2021-04-30 13:14:13,153 - climada.entity.exposures.base - INFO - No specific impact function column found for hazard TC. Using the anonymous 'impf_' column.
2021-04-30 13:14:13,163 - climada.engine.impact - INFO - Exposures matching centroids found in centr_TC
2021-04-30 13:14:13,168 - climada.engine.impact - INFO - Calculating damage for 14654 assets (>0) and 1 events.
2021-04-30 13:14:13,171 - climada.entity.exposures.base - INFO - No specific impact function column found for hazard TC. Using the anonymous 'impf_' column.
2021-04-30 13:14:13,180 - climada.engine.impact - INFO - Exposures matching centroids found in centr_TC
2021-04-30 13:14:13,184 - climada.engine.impact - INFO - Calculating damage for 14654 assets (>0) and 1 events.
2021-04-30 13:14:13,187 - climada.entity.exposures.base - INFO - No specific impact function column found for hazard TC. Using the anonymous 'impf_' column.
2021-04-30 13:14:13,198 - climada.engine.impact - INFO - Exposures matching centroids found in centr_TC
2021-04-30 13:14:13,202 - climada.engine.impact - INFO - Calculating damage for 14654 assets (>0) and 1 events.
2021-04-30 13:14:13,205 - climada.entity.exposures.base - INFO - No specific impact function column found for hazard TC. Using the anonymous 'impf_' column.
2021-04-30 13:14:13,214 - climada.engine.impact - INFO - Exposures matching centroids found in centr_TC
2021-04-30 13:14:13,218 - climada.engine.impact - INFO - Calculating damage for 14654 assets (>0) and 1 events.
2021-04-30 13:14:13,219 - climada.entity.exposures.base - INFO - No specific impact function column found for hazard TC. Using the anonymous 'impf_' column.
2021-04-30 13:14:13,228 - climada.engine.impact - INFO - Exposures matching centroids found in centr_TC
2021-04-30 13:14:13,233 - climada.engine.impact - INFO - Calculating damage for 14654 assets (>0) and 1 events.
2021-04-30 13:14:13,234 - climada.entity.exposures.base - INFO - No specific impact function column found for hazard TC. Using the anonymous 'impf_' column.
2021-04-30 13:14:13,247 - climada.engine.impact - INFO - Exposures matching centroids found in centr_TC
2021-04-30 13:14:13,251 - climada.engine.impact - INFO - Calculating damage for 14654 assets (>0) and 1 events.
2021-04-30 13:14:13,253 - climada.entity.exposures.base - INFO - No specific impact function column found for hazard TC. Using the anonymous 'impf_' column.
2021-04-30 13:14:13,262 - climada.engine.impact - INFO - Exposures matching centroids found in centr_TC
2021-04-30 13:14:13,266 - climada.engine.impact - INFO - Calculating damage for 14654 assets (>0) and 1 events.
2021-04-30 13:14:13,267 - climada.entity.exposures.base - INFO - No specific impact function column found for hazard TC. Using the anonymous 'impf_' column.
2021-04-30 13:14:13,276 - climada.engine.impact - INFO - Exposures matching centroids found in centr_TC
2021-04-30 13:14:13,279 - climada.engine.impact - INFO - Calculating damage for 14654 assets (>0) and 1 events.
2021-04-30 13:14:13,281 - climada.entity.exposures.base - INFO - No specific impact function column found for hazard TC. Using the anonymous 'impf_' column.
2021-04-30 13:14:13,288 - climada.engine.impact - INFO - Exposures matching centroids found in centr_TC
2021-04-30 13:14:13,291 - climada.engine.impact - INFO - Calculating damage for 14654 assets (>0) and 1 events.
2021-04-30 13:14:13,293 - climada.entity.exposures.base - INFO - No specific impact function column found for hazard TC. Using the anonymous 'impf_' column.
2021-04-30 13:14:13,300 - climada.engine.impact - INFO - Exposures matching centroids found in centr_TC
2021-04-30 13:14:13,304 - climada.engine.impact - INFO - Calculating damage for 14654 assets (>0) and 1 events.
2021-04-30 13:14:13,305 - climada.entity.exposures.base - INFO - No specific impact function column found for hazard TC. Using the anonymous 'impf_' column.
2021-04-30 13:14:13,314 - climada.engine.impact - INFO - Exposures matching centroids found in centr_TC
2021-04-30 13:14:13,320 - climada.engine.impact - INFO - Calculating damage for 14654 assets (>0) and 1 events.
2021-04-30 13:14:13,321 - climada.entity.exposures.base - INFO - No specific impact function column found for hazard TC. Using the anonymous 'impf_' column.
2021-04-30 13:14:13,328 - climada.engine.impact - INFO - Exposures matching centroids found in centr_TC
2021-04-30 13:14:13,332 - climada.engine.impact - INFO - Calculating damage for 14654 assets (>0) and 1 events.
2021-04-30 13:14:13,333 - climada.entity.exposures.base - INFO - No specific impact function column found for hazard TC. Using the anonymous 'impf_' column.
2021-04-30 13:14:13,342 - climada.engine.impact - INFO - Exposures matching centroids found in centr_TC
2021-04-30 13:14:13,345 - climada.engine.impact - INFO - Calculating damage for 14654 assets (>0) and 1 events.
2021-04-30 13:14:13,346 - climada.entity.exposures.base - INFO - No specific impact function column found for hazard TC. Using the anonymous 'impf_' column.
2021-04-30 13:14:13,355 - climada.engine.impact - INFO - Generating video ./results/irma_imp_fl.gif
22it [09:40, 26.39s/it]
../_images/tutorial_climada_engine_Impact_58_2.png