diff --git a/src/main/java/gov/usgs/earthquake/nshmp/gmm/Gmm.java b/src/main/java/gov/usgs/earthquake/nshmp/gmm/Gmm.java index 576dc2802472e64d3c41f0e0f9b9636bd71c8c45..ccda396eb237c85f036eb9b77aa25042f0d12f01 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/gmm/Gmm.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/gmm/Gmm.java @@ -547,6 +547,13 @@ public enum Gmm { KuehnEtAl_2020.COEFFS, KuehnEtAl_2020.CONSTRAINTS_INTERFACE), + /** @see KuehnEtAl_2020 */ + KBCG_20_SEATTLE_INTERFACE_BASIN( + KuehnEtAl_2020.SeattleInterfaceBasinNoM9.class, + KuehnEtAl_2020.SeattleInterfaceBasinNoM9.NAME, + KuehnEtAl_2020.COEFFS, + KuehnEtAl_2020.CONSTRAINTS_INTERFACE), + /** @see KuehnEtAl_2020 */ KBCG_20_CASCADIA_SLAB_BASIN( KuehnEtAl_2020.CascadiaSlabBasin.class, @@ -1430,6 +1437,7 @@ public enum Gmm { KBCG_20_CASCADIA_INTERFACE, KBCG_20_CASCADIA_SLAB, KBCG_20_CASCADIA_INTERFACE_BASIN, + KBCG_20_SEATTLE_INTERFACE_BASIN, KBCG_20_SEATTLE_M9_INTERFACE_BASIN, KBCG_20_CASCADIA_SLAB_BASIN, KBCG_20_ALASKA_INTERFACE, diff --git a/src/main/java/gov/usgs/earthquake/nshmp/gmm/KuehnEtAl_2020.java b/src/main/java/gov/usgs/earthquake/nshmp/gmm/KuehnEtAl_2020.java index e8579665bd42dbebd3607d29747956799f0a96c6..e1d5bcef0c149a88d79ba3547b402d9e83f12c18 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/gmm/KuehnEtAl_2020.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/gmm/KuehnEtAl_2020.java @@ -234,16 +234,18 @@ public abstract class KuehnEtAl_2020 implements GroundMotionModel { /* Only true for interface */ abstract boolean seattle(); + abstract boolean seattleNoM9(); + @Override public LogicTree<GroundMotion> calc(GmmInput in) { double pgaRef = exp(calcPgaRef(coeffsPGA, in.Mw, in.rRup, in.zTor)); - double μ = calcMean(coeffs, slab(), basin(), seattle(), + double μ = calcMean(coeffs, slab(), basin(), seattle(), seattleNoM9(), in.Mw, in.rRup, in.zTor, in.vs30, in.z2p5, pgaRef); // short periods can't be lower than PGA if (coeffs.imt.isSA() && coeffs.imt.period() <= 0.1) { - double μPga = calcMean(coeffsPGA, slab(), basin(), seattle(), + double μPga = calcMean(coeffsPGA, slab(), basin(), seattle(), seattleNoM9(), in.Mw, in.rRup, in.zTor, in.vs30, in.z2p5, pgaRef); μ = max(μ, μPga); } @@ -277,6 +279,7 @@ public abstract class KuehnEtAl_2020 implements GroundMotionModel { boolean slab, boolean basin, boolean seattle, + boolean seattleNoM9, double Mw, double rRup, double zTor, @@ -289,7 +292,7 @@ public abstract class KuehnEtAl_2020 implements GroundMotionModel { double fDepth = depthTerm(c, zTor); double fAtten = arcCrossingTerm(c, rRup); double fSite = siteAmpTerm(c, vs30, pgaRef); - double fBasin = basinTerm(c, vs30, z2p5, slab, basin, seattle); + double fBasin = basinTerm(c, vs30, z2p5, slab, basin, seattle, seattleNoM9); return c.θ1 + fMag + fGeom + fDepth + fAtten + fSite + fBasin; } @@ -364,7 +367,8 @@ public abstract class KuehnEtAl_2020 implements GroundMotionModel { double z2p5, boolean slab, boolean basin, - boolean seattle) { + boolean seattle, + boolean seattleNoM9) { if (Double.isNaN(z2p5)) { return 0.0; @@ -379,10 +383,17 @@ public abstract class KuehnEtAl_2020 implements GroundMotionModel { } double fb = 0.0; - if (basin && seattle) { + + if (seattle) { fb = c.θ11S; - if (!slab && z2p5 > 6.0 && (c.imt.isSA() && c.imt.period() > 1.9)) { - fb = log(2.0); // M9 scaling + if (!seattleNoM9) { + if (!slab && z2p5 > 6.0 && (c.imt.isSA() && c.imt.period() > 1.9)) { + fb = log(2.0); // M9 scaling + } + } + if (basin) { + // need to scale because independent of δlnZ + fb *= GmmUtils.deltaZ25scale(c.imt, z2p5); } } else { fb = Math.min(c.θ11 + c.θ12 * δlnZ, c.θ11S); // Seattle cap @@ -422,6 +433,11 @@ public abstract class KuehnEtAl_2020 implements GroundMotionModel { boolean seattle() { return false; } + + @Override + boolean seattleNoM9() { + return false; + } } private static abstract class Cascadia extends KuehnEtAl_2020 { @@ -446,6 +462,11 @@ public abstract class KuehnEtAl_2020 implements GroundMotionModel { boolean seattle() { return false; } + + @Override + boolean seattleNoM9() { + return false; + } } private static abstract class Alaska extends KuehnEtAl_2020 { @@ -470,6 +491,11 @@ public abstract class KuehnEtAl_2020 implements GroundMotionModel { boolean seattle() { return false; } + + @Override + boolean seattleNoM9() { + return false; + } } static class GlobalInterface extends Global { @@ -545,6 +571,30 @@ public abstract class KuehnEtAl_2020 implements GroundMotionModel { } } + @Deprecated // for demo purposes only + static final class SeattleInterfaceBasinNoM9 extends CascadiaInterface { + static final String NAME = CascadiaInterface.NAME + " (Seattle basin)"; + + SeattleInterfaceBasinNoM9(Imt imt) { + super(imt); + } + + @Override + boolean basin() { + return true; + } + + @Override + boolean seattle() { + return true; + } + + @Override + boolean seattleNoM9() { + return true; + } + } + static final class CascadiaSlabBasin extends CascadiaSlab { static final String NAME = CascadiaSlab.NAME + " (basin)";