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