@@ -76,15 +76,17 @@ class CostBenefit():
7676 Value: dict with:
7777 'cost' (float): cost measure,
7878 'risk' (float): risk measurement,
79+ 'risk_transf' (float): annual expected risk transfer,
7980 'efc' (ImpactFreqCurve): impact exceedance freq
80- (optionally ) 'impact' (Impact): impact instance
81+ (optional ) 'impact' (Impact): impact instance
8182 imp_meas_present (dict): impact of each measure at present.
8283 Key: measure name ('no measure' used for case without measure),
8384 Value: dict with:
8485 'cost' (float): cost measure,
8586 'risk' (float): risk measurement,
87+ 'risk_transf' (float): annual expected risk transfer,
8688 'efc' (ImpactFreqCurve): impact exceedance freq
87- (optionally ) 'impact' (Impact): impact instance
89+ (optional ) 'impact' (Impact): impact instance
8890 """
8991
9092 def __init__ (self ):
@@ -345,20 +347,18 @@ def _calc_impact_measures(self, hazard, exposures, meas_set, imp_fun_set, \
345347 impact_meas ['no measure' ] = dict ()
346348 impact_meas ['no measure' ]['cost' ] = 0.0
347349 impact_meas ['no measure' ]['risk' ] = risk_func (imp_tmp )
350+ impact_meas ['no measure' ]['risk_transf' ] = 0.0
348351 impact_meas ['no measure' ]['efc' ] = imp_tmp .calc_freq_curve (DEF_RP )
349352 if save_imp :
350353 impact_meas ['no measure' ]['impact' ] = imp_tmp
351354
352355 # compute impact for each measure
353356 for measure in meas_set .get_measure ():
354- new_exp , new_ifs , new_haz = measure .apply (exposures , imp_fun_set ,
355- hazard )
356-
357- imp_tmp = Impact ()
358- imp_tmp .calc (new_exp , new_ifs , new_haz )
357+ imp_tmp , risk_transf = measure .calc_impact (exposures , imp_fun_set , hazard )
359358 impact_meas [measure .name ] = dict ()
360359 impact_meas [measure .name ]['cost' ] = measure .cost
361360 impact_meas [measure .name ]['risk' ] = risk_func (imp_tmp )
361+ impact_meas [measure .name ]['risk_transf' ] = risk_transf
362362 impact_meas [measure .name ]['efc' ] = imp_tmp .calc_freq_curve (DEF_RP )
363363 if save_imp :
364364 impact_meas [measure .name ]['impact' ] = imp_tmp
@@ -379,8 +379,7 @@ def _calc_cost_benefit(self, disc_rates, imp_time_depen=None):
379379 """
380380 LOGGER .info ('Computing cost benefit from years %s to %s.' ,
381381 str (self .present_year ), str (self .future_year ))
382- # TODO add risk transfer
383- # TODO add premium
382+
384383 if self .future_year - self .present_year + 1 <= 0 :
385384 LOGGER .error ('Wrong year range: %s - %s.' , str (self .present_year ),
386385 str (self .future_year ))
@@ -407,18 +406,25 @@ def _calc_cost_benefit(self, disc_rates, imp_time_depen=None):
407406 continue
408407
409408 fut_benefit = self .imp_meas_future ['no measure' ]['risk' ] - meas_val ['risk' ]
410-
409+ fut_risk_tr = meas_val [ 'risk_transf' ]
411410 if self .imp_meas_present :
412411 pres_benefit = self .imp_meas_present ['no measure' ]['risk' ] - \
413412 self .imp_meas_present [meas_name ]['risk' ]
414413 meas_ben = pres_benefit + (fut_benefit - pres_benefit ) * time_dep
414+
415+ pres_risk_tr = self .imp_meas_present [meas_name ]['risk_transf' ]
416+ risk_tr = pres_risk_tr + (fut_risk_tr - pres_risk_tr ) * time_dep
415417 else :
416418 meas_ben = time_dep * fut_benefit
419+ risk_tr = time_dep * fut_risk_tr
417420
421+ # discount
418422 meas_ben = disc_rates .net_present_value (self .present_year ,
419423 self .future_year , meas_ben )
424+ risk_tr = disc_rates .net_present_value (self .present_year ,
425+ self .future_year , risk_tr )
420426 self .benefit [meas_name ] = meas_ben
421- self .cost_ben_ratio [meas_name ] = meas_val ['cost' ]/ meas_ben
427+ self .cost_ben_ratio [meas_name ] = ( meas_val ['cost' ]+ risk_tr ) / meas_ben
422428
423429 def _time_dependency_array (self , imp_time_depen = None ):
424430 """ Construct time dependency array. Each year contains a value in [0,1]
0 commit comments