コード例 #1
0
import numpy

from safe.impact_functions.core import FunctionProvider
from safe.impact_functions.core import get_hazard_layer, get_exposure_layer

from safe.engine.utilities import MAXFLOAT
from safe.impact_functions.utilities import Damage_curve
from safe.storage.vector import Vector

#------------------------------------------------------------
# Define damage curves for tsunami structural building damage
#------------------------------------------------------------
struct_damage_curve = {
    'Double brick':
    Damage_curve([[-MAXFLOAT, 0.0], [0.0, 0.016], [0.1, 0.150], [0.3, 0.425],
                  [0.5, 0.449], [1.0, 0.572], [1.5, 0.582], [2.0, 0.587],
                  [2.5, 0.647], [MAXFLOAT, 64.7]]),
    'Brick veneer':
    Damage_curve([[-MAXFLOAT, 0.0], [0.0, 0.016], [0.1, 0.169], [0.3, 0.445],
                  [0.5, 0.472], [1.0, 0.618], [1.5, 0.629], [2.0, 0.633],
                  [2.5, 0.694], [MAXFLOAT, 69.4]]),
    'Timber':
    Damage_curve([[-MAXFLOAT, 0.0], [0.0, 0.016], [0.3, 0.645], [1.0, 0.818],
                  [2.0, 0.955], [MAXFLOAT, 99.4]])
}

contents_damage_curve = Damage_curve([[-MAXFLOAT, 0.0], [0.0, 0.013],
                                      [0.1, 0.102], [0.3, 0.381], [0.5, 0.500],
                                      [1.0, 0.970], [1.5, 0.976], [2.0, 0.986],
                                      [MAXFLOAT, 98.6]])
コード例 #2
0
    def test_damage_curve(self):
        """Damage curve class works
        """

        # Make data
        x = [1.0, 2.0, 4.0]

        # Define array with corresponding values
        A = numpy.zeros((len(x), 2), dtype='f')
        A[:, 0] = x

        # Define values for each x
        for i in range(len(x)):
            A[i, 1] = 2 * A[i, 0] + 3

        # Instantiate
        D = Damage_curve(A)

        # Check
        assert D(1.0) == 5
        assert D(1.5) == 6
        assert D(3.0) == 9

        # Check exceptions
        try:
            Damage_curve(None)
        except RuntimeError:
            pass
        else:
            msg = 'Damage_curve should have raised exception for None'
            raise Exception(msg)

        try:
            Damage_curve([[1, 2], [3, 4, 5]])
        except RuntimeError:
            pass
        else:
            msg = 'Damage_curve should have raised exception for invalid input'
            raise Exception(msg)

        try:
            Damage_curve(x)
        except RuntimeError:
            pass
        else:
            msg = 'Damage_curve should have raised exception for 1d array'
            raise Exception(msg)

        try:
            Damage_curve(numpy.zeros((3, 4, 5)))
        except RuntimeError:
            pass
        else:
            msg = ('Damage_curve should have raised exception for '
                   'more than two dimensions')
            raise Exception(msg)

        try:
            Damage_curve(numpy.zeros((3, 3)))
        except RuntimeError:
            pass
        else:
            msg = ('Damage_curve should have raised exception for '
                   'more than two colums')
            raise Exception(msg)
コード例 #3
0
from safe.impact_functions.utilities import Damage_curve
from safe.storage.vector import Vector
from safe.engine.interpolation import assign_hazard_values_to_exposure_data

# A maximum floating point number for this package
MAXFLOAT = float(sys.maxint)

#------------------------------------------------------------
# Define damage curves for tsunami structural building damage
#------------------------------------------------------------
struct_damage_curve = {'Double brick': Damage_curve([[-MAXFLOAT, 0.0],
                                                     [0.0, 0.016],
                                                     [0.1, 0.150],
                                                     [0.3, 0.425],
                                                     [0.5, 0.449],
                                                     [1.0, 0.572],
                                                     [1.5, 0.582],
                                                     [2.0, 0.587],
                                                     [2.5, 0.647],
                                                     [MAXFLOAT, 64.7]]),
                       'Brick veneer': Damage_curve([[-MAXFLOAT, 0.0],
                                                     [0.0, 0.016],
                                                     [0.1, 0.169],
                                                     [0.3, 0.445],
                                                     [0.5, 0.472],
                                                     [1.0, 0.618],
                                                     [1.5, 0.629],
                                                     [2.0, 0.633],
                                                     [2.5, 0.694],
                                                     [MAXFLOAT, 69.4]]),
                       'Timber': Damage_curve([[-MAXFLOAT, 0.0],