Source code for climada_petals.entity.impact_funcs.wildfire

"""
This file is part of CLIMADA.

Copyright (C) 2017 ETH Zurich, CLIMADA contributors listed in AUTHORS.

CLIMADA is free software: you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free
Software Foundation, version 3.

CLIMADA is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.  See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along
with CLIMADA. If not, see <https://www.gnu.org/licenses/>.

---

Define impact functions for WildFires.
"""

__all__ = ['ImpfWildfire']

import logging
import numpy as np

from climada.entity.impact_funcs.base import ImpactFunc

LOGGER = logging.getLogger(__name__)

[docs] class ImpfWildfire(ImpactFunc): """Impact function for wildfire."""
[docs] def __init__(self, haz_type = 'WFsingle'): ImpactFunc.__init__(self) self.haz_type = haz_type LOGGER.warning('haz_type is set to %s.', self.haz_type)
[docs] @classmethod def from_default_FIRMS(cls, i_half=295.01, impf_id=1): """ This function sets the impact curve to a sigmoid type shape, as common in impact modelling. We adapted the function as proposed by Emanuel et al. (2011) which hinges on two parameters (intercept (i_thresh) and steepness (i_half) of the sigmoid). .. math:: f = \\frac{i^{3}}{1+i^{3}} with .. math:: i = \\frac{MAX[(i_{lat, lon}-i_{thresh}), 0]}{i_{half}-i_{thresh}} The intercept is defined at the minimum intensity of a FIRMS value (295K) which leaves the steepness (i_half) the only parameter that needs to be calibrated. Here, i_half is set to 295 K as a result of the calibration performed by Lüthi et al. (in prep). This value is suited for an exposure resolution of 1 km. Calibration was further performed for: - 4 km: resulting i_half = 409.4 K - 10 km: resulting i_half = 484.4 K Calibration has been performed globally (using EMDAT data) and is based on 84 damage records since 2001. Intensity range is set between 295 K and 500 K as this is the typical range of FIRMS intensities. Parameters ---------- i_half : float, optional, default = 295.01 steepnes of the IF, [K] at which 50% of max. damage is expected if_id : int, optional, default = 1 impact function id Returns ------- Impf : climada.entity.impact_funcs.ImpfWildfire instance """ Impf = cls() Impf.id = impf_id Impf.name = "wildfire default 1 km" Impf.intensity_unit = "K" Impf.intensity = np.arange(295, 500, 5) i_thresh = 295 i_n = (Impf.intensity-i_thresh)/(i_half-i_thresh) Impf.paa = i_n**3 / (1 + i_n**3) Impf.mdd = np.ones(len(Impf.intensity)) return Impf
[docs] def set_default_FIRMS(self, *args, **kwargs): """This function is deprecated, use ImpfWildfire.from_default_FIRMS instead.""" LOGGER.warning("The use of ImpfWildfire.set_default_FIRMS is deprecated." "Use ImpfWildfire.from_default_FIRMS .") self.__dict__ = ImpfWildfire.from_default_FIRMS(*args, **kwargs).__dict__