Source code for shakelib.conversions.imt.bommer_alarcon_2006

# Local imports
from shakelib.conversions.convert_imt import IMTConverter


[docs]class BommerAlarcon2006(IMTConverter): """ Class for conversion between PGV (units of cm/s) and PSA05 (units of g) by Bommer and Alarcon (2006). - PSA05 stands for spectral acceleration with oscillator period of 0.5 sec - PGV is peak ground velocity. References: Bommer, J. J., & Alarcon, J. E. (2006). The prediction and use of peak ground velocity. Journal of Earthquake Engineering, 10(01), 1-31. `[link] <http://www.worldscientific.com/doi/abs/10.1142/S1363246906002463>`__ """ def __init__(self): super().__init__() # output_input dictionary where the key is the output # and the value is a list of the possible inputs self.output_input = {"PGV": ["PSA05"], "PSA05": ["PGV"]} self.conversion_factor = 1.0 / (20.0) * 100.0 * 9.81
[docs] def convertAmps(self, imt_in, imt_out, imt): """ Returns an array of converted IMT amplitude values. Args: imt_in (str): OQ intensity measure type. Same as type as the input values defined by the imt variable. imt_out (str): OQ intensity measure type that the values will be converted to. imt (OpenQuake IMT): The intensity measurements of the input ground motions. Valid IMTs are PGV, and SA. Returns: array: Numpy array of amps converted from imt_in to imt_out. Raises: ValueError: If not a valid conversion. """ # Verify that this is a valid conversion self._verifyConversion(imt_in, imt_out) imt_in = imt_in.upper().strip() imt_out = imt_out.upper().strip() conversion_factor = self.conversion_factor # Check which method to use if imt_in == "PSA05" and imt_out == "PGV": new_imt = self._convertToPGV(imt, conversion_factor) elif imt_in == "PGV" and imt_out == "PSA05": new_imt = self._convertToPSA05(imt, conversion_factor) else: raise ValueError(f"No conversion available from {imt_in!r} to {imt_out!r}") return new_imt
@staticmethod def _convertToPGV(psa05, conversion_factor): """ Convert PSA05 (spectral acceleration with oscillator period of 0.5 sec) in g to PGV cm/s. **Important:** PSA10 must be linear units. Args: psa05 (array): Numpy array or float of PSA05 values; linear units. Returns array: Numpy array or float of PGV converted from psa05. """ return psa05 * conversion_factor @staticmethod def _convertToPSA05(pgv, conversion_factor): """ Convert PGV in cm/s to PSA05 in g. **Important:** PGV must be linear units. Args: pgv (array): Numpy array or float of PGV values; linear units. Returns: array: Numpy array or float of PSA05 (spectral acceleration with oscillator period of 0.5 sec) converted from PGV. """ return pgv / conversion_factor