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]])
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)
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],