package org.opensha2.gmm;
import static java.lang.Math.log10;
import static java.lang.Math.sqrt;
import static org.opensha2.gmm.GmmInput.Field.MW;
import static org.opensha2.gmm.GmmInput.Field.RJB;
import static org.opensha2.gmm.GmmInput.Field.VS30;
import static org.opensha2.gmm.GmmUtils.BASE_10_TO_E;
import org.opensha2.gmm.GmmInput.Constraints;
import com.google.common.collect.Range;
/**
* Implementation of the Munson & Thurber (1997) ground motion model for
* horizontal peak ground acceleration (PGA) for the island of Hawaii. In
* keeping with prior NSHMP implementations of this older model, only lava sites
* are supported (V𝗌30 = 650 m/s).
*
* <p>For the 1998 Hawaii NSHM, maps were calculated for rock (Vs30 = 760 m/s)
* using the lava coefficients, as this was deemed close enough to the measured
* Vs30 = 650 m/s of the lava site velocity (C. Thurber, personal comm., 1998).
*
* <p><b>Note:</b> This GMM is only valid for PGA and 0.2 seconds. 0.2 is
* supported through the linear scaling of log PGA ground motion. Also,
* for larger magnitudes (M > 7), an additional magnitude term derived from
* Boore, Joyner, and Fumal 1993) is applied. See also the 1998 Hawaii NSHM
* <a href="http://earthquake.usgs.gov/hazards/products/hi/1998/documentation/">
* documentation</a>.
*
* <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> Munson, C.G., and Thurber, C.H., 1997, Analysis of the
* attenuation of strong ground motion on the island of Hawaii, Bulletin of the
* Seismological Society of America, v. 87, n. 4, pp. 945-960.
*
* <p><b>Component:</b> larger of the two horizontal
*
* @author Allison Shumway
* @author Peter Powers
* @see Gmm#MT_97
*/
public final class MunsonThurber_1997 implements GroundMotionModel {
static final String NAME = "Munson & Thurber (1997)";
static final Constraints CONSTRAINTS = Constraints.builder()
.set(MW, Range.closed(4.0, 8.0))
.set(RJB, Range.closed(0.0, 88.0))
.set(VS30, Range.closed(200.0, 760.0))
.build();
static final CoefficientContainer COEFFS = new CoefficientContainer("MT97.csv");
private static final double B0 = 0.518;
private static final double B1 = 0.387;
private static final double B1_BJF = 0.216;
private static final double B2 = -0.00256;
private static final double H2 = 11.29 * 11.29;
private static final double SIGMA = 0.237 * BASE_10_TO_E;
private final Imt imt;
MunsonThurber_1997(final Imt imt) {
this.imt = imt;
}
@Override
public ScalarGroundMotion calc(final GmmInput in) {
double μ = calcMean(in.Mw, in.rJB);
if (imt == Imt.SA0P02) {
μ *= 2.2;
}
return DefaultScalarGroundMotion.create(μ, SIGMA);
}
private final double calcMean(final double Mw, final double rJB) {
// Implementation is only of rsoft-rock/lava sites so ash
// term has been removed
double r = sqrt((rJB * rJB) + H2);
double μBase10 = B0 + magTerm(Mw) + (B2 * r) - log10(r);
return μBase10 * BASE_10_TO_E;
}
private static double magTerm(double Mw) {
if (Mw <= 7.0) {
return B1 * (Mw - 6.0);
} else if (Mw <=7.7) {
return B1 + B1_BJF * (Mw - 7.0);
} else {
return B1 + B1_BJF * 0.7;
}
}
}