salvus.mesh.attenuation
A class to handle attenuation parameters.
Classes
LinearSolid
LinearSolidclass LinearSolid(builtins.object):
def __init__(
self,
y_j: numpy.ndarray,
w_j: numpy.ndarray,
Q: float,
alpha: float = 1.0,
pl_f_ref: float = 1.0,
f_min: Optional[float] = None,
f_max: Optional[float] = None,
):
...Object representing a linear solid.
Parameters
y_jnumpy.ndarray — y_j as in van Driel et al 2014 eq 8w_jnumpy.ndarray — w_j as in van Driel et al 2014 eq 6-8Qfloat — target quality factor at reference frequencyalphafloat — alpha exponent for power law Qpl_f_reffloat — reference frequency for power law Qf_minOptional[float] — Minimum frequency for the optimization.f_maxOptional[float] — Maximum frequency for the optimization.
Methods
invert_linear_solids()
invert_linear_solids()def invert_linear_solids(
Q: float = 1.0,
f_min: float = 0.001,
f_max: float = 1.0,
N: int = 3,
nfsamp: int = 100,
maxiter: int = 1000,
fixfreq: bool = False,
freq_weight: bool = True,
pl_f_ref: float = 1.0,
alpha: float = 0.0,
ftol: float = 1e-10,
exact: bool = False,
) -> LinearSolid:
...Invert for the parameters of a linear solid.
Parameters
Qfloat — target qualtity factor at reference frequencyf_minfloat — frequency band (in Hz)f_maxfloat — frequency band (in Hz)Nint — number of standard linear solidsnfsampint — number of sampling frequencies for computation of the misfit (log spaced in freqeuncy band)maxiterint — number of iterationsfixfreqbool — use log spaced peak frequencies (fixed)freq_weightbool — use frequency weighting to ensure better fit at high frequenciespl_f_reffloat — reference frequency for power law Qalphafloat — exponent for power law Qftolfloat — tolerance for the optimizationexactbool — use exact relation, van Driel et al 2014 eq 7 or approximate, eq 18
Returns LinearSolid
get_Q()
get_Q()def get_Q(self, w: numpy.ndarray, exact: bool = False) -> numpy.ndarray:
...Get Q.
Parameters
wnumpy.ndarray — angular frequency omegaexactbool — use exact relation, van Driel et al 2014 eq 7 or approximate, eq 18
Returns numpy.ndarray
get_deltaM()
get_deltaM()def get_deltaM(self, M_f_ref: float, f_ref: float = 1.0) -> float:
...Get delta M = M_U - M_R, where M_U is the unrelaxed and M_R is the relaxed modulus as in eq 8, van Driel et al 2014.
Parameters
M_f_reffloat — Modulus at the reference frequency (real value)f_reffloat — reference frequency
Returns float
get_gamma()
get_gamma()def get_gamma(self, f_ref: float = 1.0) -> float:
...Get gamma as in eq 8, van Driel et al 2014.
Parameters
f_reffloat — reference frequency
Returns float
get_modulus()
get_modulus()def get_modulus(
self, w: numpy.ndarray, M_f_ref: float, f_ref: float = 1.0
) -> float:
...Get the modulus as a function of frequency as in eq 6, van Driel et al 2014.
Parameters
wnumpy.ndarray — array of angular frequenciesM_f_reffloat — Modulus at the reference frequency (real value)f_reffloat — reference frequency
Returns float
get_relaxed_modulus()
get_relaxed_modulus()def get_relaxed_modulus(self, M_f_ref: float, f_ref: float = 1.0) -> float:
...Get the unrelaxed and M_U as in eq 8, van Driel et al 2014.
Parameters
M_f_reffloat — Modulus at the reference frequency (real value)f_reffloat — reference frequency
Returns float
get_unrelaxed_modulus()
get_unrelaxed_modulus()def get_unrelaxed_modulus(self, M_f_ref: float, f_ref: float = 1.0) -> float:
...Get the unrelaxed and M_U as in eq 8, van Driel et al 2014.
Parameters
M_f_reffloat — Modulus at the reference frequency (real value)f_reffloat — reference frequency
Returns float
optimal_bandwidth()
optimal_bandwidth()def optimal_bandwidth(N: int) -> float:
...Bandwidth that results in about 1% error in fitting Q, see van Driel (2014), figure 4
Parameters
Nint — Number of linear solids
Returns float
plot()
plot()def plot(
self,
ffac: float = 10.0,
nfsamp: int = 1000,
errorlim: float = 1.1,
show: bool = True,
exact: bool = True,
f_ref: float = 1.0,
M_f_ref: float = 1.0,
) -> Optional[matplotlib.figure.Figure]:
...Plot the linear solid.
Parameters
ffacfloat — frequenc factor to extent the plotting range beyonde the limits used in the optimizationnfsampint — number of frequency sampleserrorlimfloat — indicate errorlimits by horizontal linesshowbool — return with a figure object or show the figure on screenexactbool — use exact relation, van Driel et al 2014 eq 7 or approximate, eq 18f_reffloat — reference frequencyM_f_reffloat — Modulus at the reference frequency (real value)
Returns Optional[matplotlib.figure.Figure]
power_law_Q()
power_law_Q()def power_law_Q(
Q: float, alpha: float, w: numpy.ndarray, pl_f_ref: float = 1.0
) -> numpy.ndarray:
...Parameters
Qfloat — target quality factor at reference frequencyalphafloat — alpha exponent for power law Qwnumpy.ndarray — angular frequency omegapl_f_reffloat — reference frequency for power law Q
Returns numpy.ndarray
q_linear_solid()
q_linear_solid()def q_linear_solid(
y_j: numpy.ndarray,
w_j: numpy.ndarray,
w: numpy.ndarray,
exact: bool = False,
) -> numpy.ndarray:
...Parameters
y_jnumpy.ndarray — y_j as in van Driel et al 2014 eq 8w_jnumpy.ndarray — w_j as in van Driel et al 2014 eq 6-8wnumpy.ndarray — angular frequency omegaexactbool — use exact relation, van Driel et al 2014 eq 7 or approximate, eq 18
Returns numpy.ndarray