43 lines
1.0 KiB
Python
43 lines
1.0 KiB
Python
|
import numpy as np
|
||
|
|
||
|
# constants depending on source models
|
||
|
K_BRUNE = 0.37
|
||
|
K_MADARIAGA_P = 0.32
|
||
|
K_MADARIAGA_S = 0.21
|
||
|
# averages of radiation coefficients
|
||
|
G_P = 0.52
|
||
|
G_S = 0.63
|
||
|
|
||
|
|
||
|
def spectrum2moment(spectral_level, density, velocity, distance, g):
|
||
|
return spectral_level * 4.0 * np.pi * density * velocity ** 3 * distance / g
|
||
|
|
||
|
|
||
|
def damping(q_factor, frequencies, travel_time):
|
||
|
"""Exponential damping"""
|
||
|
return np.exp(np.pi * frequencies * travel_time / q_factor)
|
||
|
|
||
|
|
||
|
def mm(mo):
|
||
|
"""Calculate moment magnitude from the spectral level (Mo)
|
||
|
:return moment magnitude (float):
|
||
|
"""
|
||
|
return (np.log10(mo) - 9.1) / 1.5
|
||
|
|
||
|
|
||
|
def m0(mw):
|
||
|
"""Calculate the spectral level (Mo) from the moment magnitude (Mw)
|
||
|
:return spectral level (float):
|
||
|
"""
|
||
|
return 10 ** (mw * 1.5 + 9.1)
|
||
|
|
||
|
|
||
|
def calc_source_size(s_vel, corner_freq, k):
|
||
|
"""Calculate source radius"""
|
||
|
return k * s_vel / corner_freq
|
||
|
|
||
|
|
||
|
def calc_stress_drop(seismic_moment, source_radius):
|
||
|
"""Calculate stress drop"""
|
||
|
return 7 / 16 * seismic_moment / source_radius ** 3
|