Skip to content
Snippets Groups Projects
Commit fd0e5feb authored by Altekruse, Jason Morgan's avatar Altekruse, Jason Morgan
Browse files

fix broken MA05 interpolation

parent f3735b90
No related branches found
No related tags found
1 merge request!410fix broken MA05 interpolation
package gov.usgs.earthquake.nshmp.gmm;
import static com.google.common.base.Preconditions.checkArgument;
import static gov.usgs.earthquake.nshmp.gmm.Gmm.BA_08_BASE;
import static gov.usgs.earthquake.nshmp.gmm.GmmInput.Field.MW;
import static gov.usgs.earthquake.nshmp.gmm.GmmInput.Field.RRUP;
......@@ -27,7 +28,6 @@ import static gov.usgs.earthquake.nshmp.gmm.Imt.SA1P0;
import static java.lang.Math.log10;
import static java.lang.Math.sqrt;
import java.util.EnumMap;
import java.util.Map;
import java.util.Optional;
......@@ -84,7 +84,7 @@ public class MotazedianAtkinson_2005 implements GroundMotionModel {
static final Constraints CONSTRAINTS = Constraints.builder()
.set(MW, Range.closed(4.0, 9.5))
.set(RRUP, Range.closed(0.0, 1000.0))
.set(VS30, Range.closedOpen(180.0, 1300.0))
.set(VS30, Range.closedOpen(150.0, 1500.0))
.build();
/*
......@@ -142,7 +142,7 @@ public class MotazedianAtkinson_2005 implements GroundMotionModel {
coeffs = new Coefficients(imt, COEFFS);
interpolated = INTERPOLATED_IMTS.containsKey(imt);
interpolatedGmm = interpolated
? new InterpolatedGmm(Gmm.MA_05, imt, INTERPOLATED_IMTS.get(imt))
? new InterpolatedGmm(Gmm.MA_05_BASE, imt, INTERPOLATED_IMTS.get(imt))
: null;
}
......@@ -179,7 +179,7 @@ public class MotazedianAtkinson_2005 implements GroundMotionModel {
double hingeFunction = getHingeFunction(r, Mw);
double μ = c.c1 + c.c2 * (Mw - 6) + c.c3 * (Mw - 6) * (Mw - 6) + hingeFunction + c.c4 * r;
// convert from base 10 to base 2 and from cm/s/s to g
// convert from base 10 to base e and from cm/s/s to g
return μ * BASE_10_TO_E - LN_G_CM_TO_M;
}
......@@ -215,15 +215,16 @@ public class MotazedianAtkinson_2005 implements GroundMotionModel {
static final String NAME = "Motazedian & Atkinson (2005) BETA";
/* MA05 non-MPRS IMTs. */
private static final Map<Imt, Range<Imt>> INTERPOLATED_SITE_IMTS =
new EnumMap<>(Map.of(
SA0P06, Range.closed(SA0P05, SA0P75),
SA0P08, Range.closed(SA0P75, SA1P0),
SA0P12, Range.closed(SA0P1, SA0P15),
SA0P16, Range.closed(SA0P15, SA0P2),
SA0P6, Range.closed(SA0P5, SA0P75),
SA0P8, Range.closed(SA0P75, SA1P0)));
Maps.immutableEnumMap(
ImmutableMap.<Imt, Range<Imt>> builder()
.put(SA0P06, Range.closed(SA0P05, SA0P075))
.put(SA0P08, Range.closed(SA0P075, SA0P1))
.put(SA0P12, Range.closed(SA0P1, SA0P15))
.put(SA0P16, Range.closed(SA0P15, SA0P2))
.put(SA0P6, Range.closed(SA0P5, SA0P75))
.put(SA0P8, Range.closed(SA0P75, SA1P0))
.build());
private final Coefficients coeffsPGA;
private final Optional<BooreAtkinson_2008> siteAmp;
......@@ -238,7 +239,9 @@ public class MotazedianAtkinson_2005 implements GroundMotionModel {
@Override
public LogicTree<GroundMotion> calc(GmmInput in) {
double μ = calcMean(super.coeffs, in.rRup, in.Mw);
// Get μ from MA_05_BASE for current IMT (interpolate if necessary)
double μ = GroundMotions.combine(super.calc(in)).mean();
double μPga = calcMean(coeffsPGA, in.rRup, in.Mw);
double site = siteAmp.isPresent()
? siteAmp.get().siteAmp(μPga, in.vs30)
......@@ -247,9 +250,14 @@ public class MotazedianAtkinson_2005 implements GroundMotionModel {
}
private static double calcInterpolatedSite(Imt imt, double μPga, double vs30) {
Range<Imt> imts = INTERPOLATED_SITE_IMTS.get(imt);
Imt imtLo = imts.lowerEndpoint();
Imt imtHi = imts.upperEndpoint();
Range<Imt> imtRange = INTERPOLATED_SITE_IMTS.get(imt);
Imt imtLo = imtRange.lowerEndpoint();
Imt imtHi = imtRange.upperEndpoint();
// basic checks following InterpolatedGmm to catch bad Range<Imt>
checkArgument(imtLo.isSA());
checkArgument(imtHi.isSA());
checkArgument(imtRange.contains(imt));
double tLo = imtLo.period();
double tHi = imtHi.period();
double tTarget = imt.period();
......
This diff is collapsed.
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment