package org.opensha2.gmm;
import static java.lang.Math.log10;
import static java.lang.Math.max;
import static java.lang.Math.pow;
import static java.lang.Math.sqrt;
import static org.opensha2.gmm.GmmInput.Field.MW;
import static org.opensha2.gmm.GmmInput.Field.RRUP;
import static org.opensha2.gmm.GmmInput.Field.VS30;
import static org.opensha2.gmm.GmmUtils.BASE_10_TO_E;
import static org.opensha2.gmm.GmmUtils.LN_G_CM_TO_M;
import org.opensha2.gmm.GmmInput.Constraints;
import com.google.common.collect.Range;
import java.util.Map;
/**
* Implementation of the ground motion model by Atkinson (2015) for induced
* seismicity.
*
* <p><b>Note:</b> Direct instantiation of {@code GroundMotionModel}s is
* prohibited. Use {@link Gmm#instance(Imt)} to retrieve an instance for a
* desired {@link Imt}.
*
* <p><b>Reference:</b> Atkinson, G.M., 2015, Ground-motion prediction equation
* for small-to-moderate events at short hypocentral distances, with application
* to induced-seismicity hazards: Bulletin of the Seismological Society of
* America, v. 105, p. 981-992.
*
* <p><b>doi:</b><a href="http://dx.doi.org/10.1785/0120140142">
* 10.1785/0120140142</a>
*
* <p><b>Component:</b> orientation-independent horizontal
*
* @author Peter Powers
* @see Gmm#ATKINSON_15
*/
public final class Atkinson_2015 implements GroundMotionModel {
static final String NAME = "Atkinson (2015)";
// TODO
static final Constraints CONSTRAINTS = Constraints.builder()
.set(MW, Range.closed(3.0, 6.0))
.set(RRUP, Range.closed(0.0, 300.0))
.set(VS30, Range.singleton(760.0))
.build();
static final CoefficientContainer COEFFS = new CoefficientContainer("Atkinson15.csv");
private static final class Coefficients {
final Imt imt;
final double c0, c1, c2, c3, c4, φ, τ, σ;
Coefficients(Imt imt, CoefficientContainer cc) {
this.imt = imt;
Map<String, Double> coeffs = cc.get(imt);
c0 = coeffs.get("c0");
c1 = coeffs.get("c1");
c2 = coeffs.get("c2");
c3 = coeffs.get("c3");
c4 = coeffs.get("c4");
φ = coeffs.get("phi");
τ = coeffs.get("tau");
σ = coeffs.get("sigma");
}
}
private final Coefficients coeffs;
Atkinson_2015(final Imt imt) {
coeffs = new Coefficients(imt, COEFFS);
}
@Override
public final ScalarGroundMotion calc(final GmmInput in) {
double μ = calcMean(coeffs, in);
double σ = coeffs.σ * BASE_10_TO_E;
return DefaultScalarGroundMotion.create(GmmUtils.ceusMeanClip(coeffs.imt, μ), σ);
}
private static final double calcMean(final Coefficients c, final GmmInput in) {
double Mw = in.Mw;
double rRup = in.rRup;
double h_eff = max(1, pow(10, -1.72 + 0.43 * Mw));
double r = sqrt(rRup * rRup + h_eff * h_eff);
double μ = c.c0 + c.c1 * Mw + c.c2 * Mw * Mw + c.c3 * log10(r) + c.c4 * r;
return μ * BASE_10_TO_E - LN_G_CM_TO_M;
}
}