diff --git a/src/main/java/gov/usgs/earthquake/nshmp/gmm/AbrahamsonEtAl_2014.java b/src/main/java/gov/usgs/earthquake/nshmp/gmm/AbrahamsonEtAl_2014.java index c72c5f633a233e64b4be7cc568bc5a6b4f32b875..45a5e060694422aa26c035dcfcc635eb3ad33d83 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/gmm/AbrahamsonEtAl_2014.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/gmm/AbrahamsonEtAl_2014.java @@ -33,8 +33,9 @@ import gov.usgs.earthquake.nshmp.tree.LogicTree; * * <p>For the 2023 NSHM, implementations were added that support CyberShake * informed modifications to basin amplification terms. This is a - * region-specific behavior and is managed through the use of flags that are - * passed in with {@code GmmInput}. + * region-specific behavior and is managed through the use of a gmm-region + * defined in the {@code data/site} directory of recent {@code nshm-conus} + * models. * * <p><b>Note:</b> Direct instantiation of {@code GroundMotionModel}s is * prohibited. Use {@link Gmm#instance(Imt)} to retrieve an instance for a @@ -157,8 +158,8 @@ public class AbrahamsonEtAl_2014 implements GroundMotionModel { return coeffs.imt; } - /* Use USGS deep basin amplification model. */ - boolean basin() { + /* Use USGS deep basin, long period amplification model. */ + boolean usgsBasin() { return false; } @@ -174,13 +175,13 @@ public class AbrahamsonEtAl_2014 implements GroundMotionModel { @Override public LogicTree<GroundMotion> calc(GmmInput in) { - return calc(coeffs, in, basin(), vsInferred(), cybershake()); + return calc(coeffs, in, usgsBasin(), vsInferred(), cybershake()); } private static final LogicTree<GroundMotion> calc( Coefficients c, GmmInput in, - boolean basin, + boolean usgsBasin, boolean vsInferred, boolean cybershake) { @@ -280,7 +281,7 @@ public class AbrahamsonEtAl_2014 implements GroundMotionModel { // Soil Depth Model -- Equation 17 double f10 = calcSoilTerm(c, vs30, in.z1p0, cybershake); - if (basin) { + if (usgsBasin) { f10 *= GmmUtils.deltaZ1scale(c.imt, in.z1p0); } @@ -420,7 +421,7 @@ public class AbrahamsonEtAl_2014 implements GroundMotionModel { } @Override - boolean basin() { + boolean usgsBasin() { return true; } } diff --git a/src/main/java/gov/usgs/earthquake/nshmp/gmm/AbrahamsonGulerce_2020.java b/src/main/java/gov/usgs/earthquake/nshmp/gmm/AbrahamsonGulerce_2020.java index 4f0a28078cbae8043a2a91ecf6f86b9657eec7fb..f64f389cea8418d52580d437ac7ad51fa99e3c6e 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/gmm/AbrahamsonGulerce_2020.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/gmm/AbrahamsonGulerce_2020.java @@ -50,7 +50,9 @@ import gov.usgs.earthquake.nshmp.tree.LogicTree; * <ul><li>Implementation currently supports a global median model, as well as * Alaska and Cascadia regional models. Following the Earthquake Spectra version * this implementation provides epistemic uncertainty on the median ground - * motion for the Alaska and Cascadia models, but not the global model.</li> + * motion for the Alaska and Cascadia models. Epistemic uncertainty for the + * global model was provided via personal communication with N. Abrahamson + * 5/11/23.</li> * * <li>Coefficients for 0.01s are used for PGA.</li> * @@ -58,9 +60,8 @@ import gov.usgs.earthquake.nshmp.tree.LogicTree; * * <li>Mean model does not include aftershock term.</li> * - * <li>{@code zTor} is interpreted as hypocentral depth and is only used for - * slab events; it is limited to 120 km, consistent with other subduction - * GMMs.</li> + * <li>{@code zTor} is only used for slab events and it is limited to 120 km, + * consistent with other subduction GMMs.</li> * * <li>Basin scaling only amplifies long period ground motion when z2.5 is * greater than the reference value computed from Vs30. If z2.5 is supplied, the @@ -87,6 +88,21 @@ import gov.usgs.earthquake.nshmp.tree.LogicTree; * <p><b>Component:</b> average horizontal (RotD50) * * @author U.S. Geological Survey + * @see Gmm#AG_20_GLOBAL_INTERFACE + * @see Gmm#AG_20_GLOBAL_INTERFACE_AK_ADJUSTED + * @see Gmm#AG_20_GLOBAL_SLAB + * @see Gmm#AG_20_CASCADIA_INTERFACE + * @see Gmm#AG_20_CASCADIA_INTERFACE_BASIN + * @see Gmm#AG_20_CASCADIA_INTERFACE_ADJUSTED + * @see Gmm#AG_20_CASCADIA_INTERFACE_ADJUSTED_BASIN + * @see Gmm#AG_20_CASCADIA_SLAB + * @see Gmm#AG_20_CASCADIA_SLAB_BASIN + * @see Gmm#AG_20_CASCADIA_SLAB_ADJUSTED + * @see Gmm#AG_20_CASCADIA_SLAB_ADJUSTED_BASIN + * @see Gmm#AG_20_ALASKA_INTERFACE + * @see Gmm#AG_20_ALASKA_INTERFACE_ADJUSTED + * @see Gmm#AG_20_ALASKA_SLAB + * @see Gmm#AG_20_ALASKA_SLAB_ADJUSTED */ public abstract class AbrahamsonGulerce_2020 implements GroundMotionModel { @@ -229,7 +245,7 @@ public abstract class AbrahamsonGulerce_2020 implements GroundMotionModel { } /* Use USGS deep basin, long period amplification model. */ - boolean basin() { + boolean usgsBasin() { return false; } @@ -254,11 +270,11 @@ public abstract class AbrahamsonGulerce_2020 implements GroundMotionModel { double pgaRock = 0.0; if (in.vs30 < coeffs.vlin) { pgaRock = exp(calcMean( - coeffsPGA, slab(), basin(), adjusted(), akBiasAdjusted(), + coeffsPGA, slab(), usgsBasin(), adjusted(), akBiasAdjusted(), 0.0, in.Mw, in.rRup, in.zTor, VS30_ROCK, Double.NaN)); } double μ = calcMean( - coeffs, slab(), basin(), adjusted(), akBiasAdjusted(), + coeffs, slab(), usgsBasin(), adjusted(), akBiasAdjusted(), pgaRock, in.Mw, in.rRup, in.zTor, in.vs30, in.z2p5); double σ = calcSigma(coeffs, coeffsPGA, pgaRock, in.rRup, in.vs30); @@ -273,7 +289,7 @@ public abstract class AbrahamsonGulerce_2020 implements GroundMotionModel { private static double calcMean( Coefficients c, boolean slab, - boolean basin, + boolean usgsBasin, boolean adjust, boolean akBiasAdjusted, double pgaRock, @@ -329,7 +345,7 @@ public abstract class AbrahamsonGulerce_2020 implements GroundMotionModel { double lnzPrime = calcLnzPrime(z2p5m, exp(lnZ2p5ref)); if (lnzPrime > 0) { - if (basin) { + if (usgsBasin) { // USGS T & shallow Z scaling; no need below b/c z2p5>6 lnzPrime *= GmmUtils.deltaZ25scale(c.imt, z2p5); } @@ -544,7 +560,7 @@ public abstract class AbrahamsonGulerce_2020 implements GroundMotionModel { } @Override - boolean basin() { + boolean usgsBasin() { return true; } } @@ -557,7 +573,7 @@ public abstract class AbrahamsonGulerce_2020 implements GroundMotionModel { } @Override - boolean basin() { + boolean usgsBasin() { return true; } } @@ -609,7 +625,7 @@ public abstract class AbrahamsonGulerce_2020 implements GroundMotionModel { } @Override - boolean basin() { + boolean usgsBasin() { return true; } } @@ -622,7 +638,7 @@ public abstract class AbrahamsonGulerce_2020 implements GroundMotionModel { } @Override - boolean basin() { + boolean usgsBasin() { return true; } } diff --git a/src/main/java/gov/usgs/earthquake/nshmp/gmm/AtkinsonMacias_2009.java b/src/main/java/gov/usgs/earthquake/nshmp/gmm/AtkinsonMacias_2009.java index b05ed6f3f701a6afc40ae9bd4cc95c5e7ba536d2..815f72a4b1c4c85c20d9f5e053acfb581999efc5 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/gmm/AtkinsonMacias_2009.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/gmm/AtkinsonMacias_2009.java @@ -52,22 +52,28 @@ import gov.usgs.earthquake.nshmp.tree.LogicTree; * <p><b>Implementation notes:</b><ul> * * <li>NSHM fortran implementation converts 0.13Hz to 7.7s; this implementation - * uses 7.5s instead.</li> + * uses 7.5s instead. * * <li>Model uses a magnitude dependent depth term and so does not impose 20km - * hypocentral depth as other subduction interface models do.</li> + * hypocentral depth as other subduction interface models do. * * <li>Support for spectral period 0.01s is provided using the same coefficients - * as PGA.</li> + * as PGA. * * <li>Support for spectral periods 0.02s, 0.03s, 0.075s, 0.15s, 0.25s, and 1.5s * is provided via interpolation of ground motion and sigma of adjacent periods - * for which there are coefficients.</li> + * for which there are coefficients. * * <li>Support for basin effects is provided per documentation of the 2018 * Conterminous U.S. NSHM update (<a - * href="https://doi.org/10.1177%2F8755293019878199">Petersen et al., - * 2020</a>).</li></ul> + * href="https://doi.org/10.1177%2F8755293019878199">Petersen et al., 2020</a>). + * Implementations include USGS developed depth tapering and restriction to long + * periods ({@code T ≥ 1 s}), as well as a Seattle-specific basin + * implementation that makes further adjustments based on M9 simulations for + * interface events at sites over the deepest depths ({@code Z2.5 > 6 km}) and + * at long periods ({@code T &qeq; 2 s}). These are region-specific behaviors + * and are managed through the use of a gmm-region defined in the + * {@code data/site} directory of recent {@code nshm-conus} models.</ul> * * <p><b>Reference:</b> Atkinson, G.M. and Macias, D.M., 2009, Predicted ground * motions for great interface earthquakes in the Cascadia subduction zone: @@ -81,6 +87,9 @@ import gov.usgs.earthquake.nshmp.tree.LogicTree; * @author U.S. Geological Survey * @see Gmm#AM_09_INTERFACE * @see Gmm#AM_09_INTERFACE_BASIN + * @see Gmm#AM_09_INTERFACE_BASIN_M9 + * @see Gmm#AM_09_INTERFACE_BASIN_CONUS_2018 + * @see Gmm#AM_09_INTERFACE_CONUS_2014 */ public class AtkinsonMacias_2009 implements GroundMotionModel { @@ -157,7 +166,7 @@ public class AtkinsonMacias_2009 implements GroundMotionModel { } /* Use USGS deep basin, long period amplification model. */ - boolean basin() { + boolean usgsBasin() { return false; } @@ -191,7 +200,7 @@ public class AtkinsonMacias_2009 implements GroundMotionModel { /* Add (possibly depth-tapered) CB14 deep basin term or M9 adjustment. */ double fb = 0.0; - if (basin()) { + if (usgsBasin()) { fb = cb14.deepBasinScaling(in.z2p5); if (m9() && in.z2p5 > 6.0 && (coeffs.imt.isSA() && coeffs.imt.period() > 1.9)) { fb = log(2.0); // M9 scaling @@ -232,7 +241,7 @@ public class AtkinsonMacias_2009 implements GroundMotionModel { } @Override - final boolean basin() { + final boolean usgsBasin() { return true; } } diff --git a/src/main/java/gov/usgs/earthquake/nshmp/gmm/BcHydro_2012.java b/src/main/java/gov/usgs/earthquake/nshmp/gmm/BcHydro_2012.java index 747e6921a453c3c73d3bc64df432665ba2520e7a..456da537c5b580fccac26e860ff4f0ab5840587f 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/gmm/BcHydro_2012.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/gmm/BcHydro_2012.java @@ -50,40 +50,46 @@ import gov.usgs.earthquake.nshmp.tree.LogicTree; * * <li>Added coefficients for 0.02s that are identical to PGA. 0.02s ground * motions had previously had been computed via interpolation between 0.01s and - * 0.05s.</li> + * 0.05s. * - * <li>Slab {@code zTor} adjusted from 125 km to 120 km.</li> + * <li>Slab {@code zTor} adjusted from 125 km to 120 km. * * <li>Changed interpolation of the {@code ΔC1} magnitude-scaling break term to * log spectral periods and linear values; prior implementation was linear; * change affects the following spectral periods: 0.4s, 0.6s (disabled), 0.75s, - * 1.5s, and 2.5s wherein the {@code ΔC1} value has decreased by 0.01</li></ul> + * 1.5s, and 2.5s wherein the {@code ΔC1} value has decreased by 0.01.</ul> * * <p><b>Implementation notes:</b><ul> * - * <li>Forearc/backarc term is considered.</li> + * <li>Forearc/backarc term is considered. * * <li>{@code zTor} is interpreted as hypocentral depth and is only used for * slab events; it is limited to 120 km, consistent with other subduction - * models.</li> + * models. * * <li>Only the middle branch of the {@code ΔC1} magnitude-scaling break term * for interface events is considered; the {@code ΔC1} term for slab events is - * fixed at -0.3.</li> + * fixed at -0.3. * * <li>Support for spectral period 0.01s is provided using the same coefficients - * as bounding periods PGA and 0.02s.</li> + * as bounding periods PGA and 0.02s. * * <li>Support for spectral periods 0.03s is provided via interpolation of - * ground motion and sigma of adjacent periods.</li></li> + * ground motion and sigma of adjacent periods. * * <li>Support for basin effects is provided per documentation of the 2018 * Conterminous U.S. NSHM update (<a - * href="https://doi.org/10.1177%2F8755293019878199">Petersen et al., - * 2020</a>).</li> + * href="https://doi.org/10.1177%2F8755293019878199">Petersen et al., 2020</a>). + * Implementations include USGS developed depth tapering and restriction to long + * periods ({@code T ≥ 1 s}), as well as a Seattle-specific basin + * implementation that makes further adjustments based on M9 simulations for + * interface events at sites over the deepest depths ({@code Z2.5 > 6 km}) and + * at long periods ({@code T &qeq; 2 s}). These are region-specific behaviors + * and are managed through the use of a gmm-region defined in the + * {@code data/site} directory of recent {@code nshm-conus} models. * * <li>Support for PGV is provided via the Abrahamson & Bhasin (2020) - * conditional PGV model for crustal earthquakes.</li></ul> + * conditional PGV model for crustal earthquakes.</ul> * * <p><b>Reference:</b> Abrahamson, N., Gregor, N., and Addo, K., 2016, BC Hydro * ground motion prediction equations for subduction earthquakes: Earthquake @@ -102,6 +108,7 @@ import gov.usgs.earthquake.nshmp.tree.LogicTree; * @see Gmm#BCHYDRO_12_INTERFACE * @see Gmm#BCHYDRO_12_SLAB * @see Gmm#BCHYDRO_12_INTERFACE_BASIN + * @see Gmm#BCHYDRO_12_INTERFACE_BASIN_M9 * @see Gmm#BCHYDRO_12_SLAB_BASIN * @see Gmm#BCHYDRO_12_INTERFACE_BACKARC * @see Gmm#BCHYDRO_12_SLAB_BACKARC @@ -198,7 +205,7 @@ public abstract class BcHydro_2012 implements GroundMotionModel { } /* Use USGS deep basin, long period amplification model. */ - boolean basin() { + boolean usgsBasin() { return false; } @@ -230,7 +237,7 @@ public abstract class BcHydro_2012 implements GroundMotionModel { calcMean(coeffs, slab(), pgaRock, in.Mw, in.rRup, in.zTor, in.vs30, backarc()); /* Add (possibly depth-tapered) CB14 deep basin term. */ - if (basin()) { + if (usgsBasin()) { μAsk += cb14.deepBasinScaling(in.z2p5); } @@ -319,7 +326,7 @@ public abstract class BcHydro_2012 implements GroundMotionModel { } @Override - boolean basin() { + boolean usgsBasin() { return true; } } @@ -345,7 +352,7 @@ public abstract class BcHydro_2012 implements GroundMotionModel { } @Override - boolean basin() { + boolean usgsBasin() { return true; } @@ -393,7 +400,7 @@ public abstract class BcHydro_2012 implements GroundMotionModel { } @Override - boolean basin() { + boolean usgsBasin() { return true; } } @@ -406,7 +413,7 @@ public abstract class BcHydro_2012 implements GroundMotionModel { } @Override - final boolean basin() { + final boolean usgsBasin() { return true; } diff --git a/src/main/java/gov/usgs/earthquake/nshmp/gmm/BooreEtAl_2014.java b/src/main/java/gov/usgs/earthquake/nshmp/gmm/BooreEtAl_2014.java index fbea3a55a8a15667405ce8bdf70165966fbf1152..ace036438803e1150d7413b64d60b3fd3fa8c678 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/gmm/BooreEtAl_2014.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/gmm/BooreEtAl_2014.java @@ -31,8 +31,9 @@ import gov.usgs.earthquake.nshmp.tree.LogicTree; * * <p>For the 2023 NSHM, implementations were added that support CyberShake * informed modifications to basin amplification terms. This is a - * region-specific behavior and is managed through the use of flags that are - * passed in with {@code GmmInput}. + * region-specific behavior and is managed through the use of a gmm-region + * defined in the {@code data/site} directory of recent {@code nshm-conus} + * models. * * <p><b>Note:</b> Direct instantiation of {@code GroundMotionModel}s is * prohibited. Use {@link Gmm#instance(Imt)} to retrieve an instance for a @@ -141,8 +142,8 @@ public class BooreEtAl_2014 implements GroundMotionModel { return coeffs.imt; } - /* Use USGS deep basin amplification model. */ - boolean basin() { + /* Use USGS deep basin, long period amplification model. */ + boolean usgsBasin() { return false; } @@ -153,17 +154,20 @@ public class BooreEtAl_2014 implements GroundMotionModel { @Override public LogicTree<GroundMotion> calc(GmmInput in) { - return calc(coeffs, coeffsPGA, in, basin(), cybershake()); + return calc(coeffs, coeffsPGA, in, usgsBasin(), cybershake()); } private static final LogicTree<GroundMotion> calc( - Coefficients c, Coefficients cPGA, - GmmInput in, boolean basin, boolean cybershake) { + Coefficients c, + Coefficients cPGA, + GmmInput in, + boolean usgsBasin, + boolean cybershake) { FaultStyle style = GmmUtils.rakeToFaultStyle_NSHMP(in.rake); double pgaRock = calcPGArock(cPGA, in.Mw, in.rJB, style); - double μ = calcMean(c, style, pgaRock, in, basin, cybershake); + double μ = calcMean(c, style, pgaRock, in, usgsBasin, cybershake); double σ = calcStdDev(c, in); return GroundMotions.createTree(μ, σ); @@ -315,7 +319,7 @@ public class BooreEtAl_2014 implements GroundMotionModel { } @Override - boolean basin() { + boolean usgsBasin() { return true; } } diff --git a/src/main/java/gov/usgs/earthquake/nshmp/gmm/CampbellBozorgnia_2014.java b/src/main/java/gov/usgs/earthquake/nshmp/gmm/CampbellBozorgnia_2014.java index 2119d48d8ffb6c0a4435e8efe048dd211c4c419f..67b5f3145f19086ce9d3d735550434e0889126c0 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/gmm/CampbellBozorgnia_2014.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/gmm/CampbellBozorgnia_2014.java @@ -39,8 +39,9 @@ import gov.usgs.earthquake.nshmp.tree.LogicTree; * * <p>For the 2023 NSHM, implementations were added that support CyberShake * informed modifications to basin amplification terms. This is a - * region-specific behavior and is managed through the use of flags that are - * passed in with {@code GmmInput}. + * region-specific behavior and is managed through the use of a gmm-region + * defined in the {@code data/site} directory of recent {@code nshm-conus} + * models. * * <p><b>Note:</b> Direct instantiation of {@code GroundMotionModel}s is * prohibited. Use {@link Gmm#instance(Imt)} to retrieve an instance for a @@ -57,10 +58,10 @@ import gov.usgs.earthquake.nshmp.tree.LogicTree; * <p><b>Component:</b> RotD50 (average horizontal) * * @author U.S. Geological Survey + * @see Gmm#CB_14_BASE * @see Gmm#CB_14 * @see Gmm#CB_14_BASIN * @see Gmm#CB_14_CYBERSHAKE - * @see Gmm#CB_14_CYBERSHAKE_ON */ public class CampbellBozorgnia_2014 implements GroundMotionModel { @@ -163,8 +164,8 @@ public class CampbellBozorgnia_2014 implements GroundMotionModel { return coeffs.imt; } - /* Use USGS deep basin amplification model. */ - boolean basin() { + /* Use USGS deep basin, long period amplification model. */ + boolean usgsBasin() { return false; } @@ -175,7 +176,7 @@ public class CampbellBozorgnia_2014 implements GroundMotionModel { @Override public LogicTree<GroundMotion> calc(GmmInput in) { - return calc(coeffs, coeffsPGA, in, in.vs30, in.z2p5, basin(), cybershake()); + return calc(coeffs, coeffsPGA, in, in.vs30, in.z2p5, usgsBasin(), cybershake()); } private static LogicTree<GroundMotion> calc( @@ -184,7 +185,7 @@ public class CampbellBozorgnia_2014 implements GroundMotionModel { GmmInput in, double vs30, double z2p5, - boolean basin, + boolean usgsBasin, boolean cybershake) { FaultStyle style = GmmUtils.rakeToFaultStyle_NSHMP(in.rake); @@ -193,14 +194,14 @@ public class CampbellBozorgnia_2014 implements GroundMotionModel { // TODO PGA short period so basin and cyber could be false // same below for short periods double pgaRock = (vs30 < c.k1) - ? exp(calcMean(cPGA, style, 1100.0, 0.398, 0.0, in, basin, false)) + ? exp(calcMean(cPGA, style, 1100.0, 0.398, 0.0, in, usgsBasin, false)) : 0.0; - double μ = calcMean(c, style, vs30, z2p5, pgaRock, in, basin, cybershake); + double μ = calcMean(c, style, vs30, z2p5, pgaRock, in, usgsBasin, cybershake); // prevent SA<PGA for short periods if (SHORT_PERIODS.contains(c.imt)) { - double pgaMean = calcMean(cPGA, style, vs30, z2p5, pgaRock, in, basin, false); + double pgaMean = calcMean(cPGA, style, vs30, z2p5, pgaRock, in, usgsBasin, false); μ = max(μ, pgaMean); } @@ -235,7 +236,7 @@ public class CampbellBozorgnia_2014 implements GroundMotionModel { double z2p5, double pgaRock, GmmInput in, - boolean basinAmpOnly, + boolean usgsBasin, boolean cybershake) { double Mw = in.Mw; @@ -313,7 +314,7 @@ public class CampbellBozorgnia_2014 implements GroundMotionModel { : (c.c11 + c.k2 * N) * log(vsk1); // Basin Response term -- Equation 20 - double Fsed = basinResponseTerm(c, vs30, z2p5, basinAmpOnly, cybershake); + double Fsed = basinResponseTerm(c, vs30, z2p5, usgsBasin, cybershake); // Hypocentral Depth term -- Equations 21, 22, 23 double zHyp = in.zHyp; @@ -342,7 +343,7 @@ public class CampbellBozorgnia_2014 implements GroundMotionModel { Coefficients c, double vs30, double z2p5, - boolean basin, + boolean usgsBasin, boolean cybershake) { /* Vs30 based depth model */ @@ -358,7 +359,7 @@ public class CampbellBozorgnia_2014 implements GroundMotionModel { // TODO revisit; CSIM is also modifying the zRef term outside the // zTerm depth scaling; doesn't this introduce a step function jump // in the basin term at 1km z2.5 depth? - if (basin) { + if (usgsBasin) { if (GmmUtils.checkBasin(c.imt, z2p5, GmmUtils.BASIN_Z2P5_UPPER)) { double zScale = GmmUtils.basinScale( z2p5, @@ -469,7 +470,7 @@ public class CampbellBozorgnia_2014 implements GroundMotionModel { } @Override - boolean basin() { + boolean usgsBasin() { return true; } } diff --git a/src/main/java/gov/usgs/earthquake/nshmp/gmm/ChiouYoungs_2014.java b/src/main/java/gov/usgs/earthquake/nshmp/gmm/ChiouYoungs_2014.java index 5f7cffb429af96712b0bbc8639ac3a6958838ccd..fbb1ae41aec6fb05c64e454549d10b135c58c0b3 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/gmm/ChiouYoungs_2014.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/gmm/ChiouYoungs_2014.java @@ -35,8 +35,9 @@ import gov.usgs.earthquake.nshmp.tree.LogicTree; * * <p>For the 2023 NSHM, implementations were added that support CyberShake * informed modifications to basin amplification terms. This is a - * region-specific behavior and is managed through the use of flags that are - * passed in with {@code GmmInput}. + * region-specific behavior and is managed through the use of a gmm-region + * defined in the {@code data/site} directory of recent {@code nshm-conus} + * models. * * <p><b>Note:</b> Direct instantiation of {@code GroundMotionModel}s is * prohibited. Use {@link Gmm#instance(Imt)} to retrieve an instance for a @@ -55,10 +56,11 @@ import gov.usgs.earthquake.nshmp.tree.LogicTree; * <p><b>Component:</b> RotD50 (average horizontal) * * @author U.S. Geological Survey + * @see Gmm#CY_14_BASE * @see Gmm#CY_14 * @see Gmm#CY_14_BASIN * @see Gmm#CY_14_CYBERSHAKE - * @see Gmm#CY_14_CYBERSHAKE_ON + * @see Gmm#CY_14_VS30_MEASURED */ public class ChiouYoungs_2014 implements GroundMotionModel { @@ -158,8 +160,8 @@ public class ChiouYoungs_2014 implements GroundMotionModel { return coeffs.imt; } - /* Use USGS deep basin amplification model. */ - boolean basin() { + /* Use USGS deep basin, long period amplification model. */ + boolean usgsBasin() { return false; } @@ -175,13 +177,13 @@ public class ChiouYoungs_2014 implements GroundMotionModel { @Override public LogicTree<GroundMotion> calc(GmmInput in) { - return calc(coeffs, in, basin(), vsInferred(), cybershake()); + return calc(coeffs, in, usgsBasin(), vsInferred(), cybershake()); } private static final LogicTree<GroundMotion> calc( Coefficients c, GmmInput in, - boolean basin, + boolean usgsBasin, boolean vsInferred, boolean cybershake) { @@ -189,7 +191,7 @@ public class ChiouYoungs_2014 implements GroundMotionModel { double saRef = calcSAref(c, in); double soilNonLin = calcSoilNonLin(c, in.vs30); - double μ = calcMean(c, in.vs30, in.z1p0, soilNonLin, saRef, basin, cybershake); + double μ = calcMean(c, in.vs30, in.z1p0, soilNonLin, saRef, usgsBasin, cybershake); double σ = calcStdDev(c, in.Mw, vsInferred, soilNonLin, saRef); return GroundMotions.createTree(μ, σ); @@ -253,8 +255,14 @@ public class ChiouYoungs_2014 implements GroundMotionModel { } // Mean ground motion model -- Equation 12 - private static final double calcMean(Coefficients c, double vs30, - double z1p0, double snl, double saRef, boolean basin, boolean cybershake) { + private static final double calcMean( + Coefficients c, + double vs30, + double z1p0, + double snl, + double saRef, + boolean usgsBasin, + boolean cybershake) { // Soil effect: linear response double sl = c.φ1 * min(log(vs30 / 1130.0), 0.0); @@ -268,7 +276,7 @@ public class ChiouYoungs_2014 implements GroundMotionModel { ? c.φ5cy * (1.0 - exp(-dZ1 / c.φ6cy)) + CY_CSIM : c.φ5 * (1.0 - exp(-dZ1 / PHI6)); - if (basin) { + if (usgsBasin) { rkdepth *= GmmUtils.deltaZ1scale(c.imt, z1p0); } @@ -344,7 +352,7 @@ public class ChiouYoungs_2014 implements GroundMotionModel { } @Override - boolean basin() { + boolean usgsBasin() { return true; } } 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 ebcc629d87cd10fc35fab899c18488a698c55382..825adffd4afad726441a7edc460b30cc5c8d1bd3 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 @@ -36,11 +36,12 @@ import gov.usgs.earthquake.nshmp.tree.LogicTree; * <ul><li>Implementations are provided for the global model as well as Cascadia * and Alaska regionalized models. Implementations include USGS developed depth * tapering and restriction to long periods ({@code T ≥ 1 s}), as well as a - * Seattle-specific basin implementation that makes further adjustments based on - * M9 simulations for interface events at sites over the deepest depths - * ({@code Z2.5 > 6 km}) and at long periods ({@code T &qeq; 2 s}). Specialized - * flags are now supported as GMM inputs and these may also trigger - * Seattle-specific behavior in the Cascadia interface implementation. + * Seattle-specific basin implementation that makes further adjustments to + * interface subclasses based on M9 simulations for interface events at sites + * over the deepest depths ({@code Z2.5 > 6 km}) and at long periods + * ({@code T &qeq; 2 s}). These are region-specific behaviors and are managed + * through the use of a gmm-region defined in the {@code data/site} directory of + * recent {@code nshm-conus} models. * * <li>Simplified epistemic uncertainty tables for the model were obtained from * <a href="https://github.com/nikuehn/KBCG20/tree/master/UNCERTAINTY"> @@ -50,13 +51,6 @@ import gov.usgs.earthquake.nshmp.tree.LogicTree; * if {@code z}-values are supplied then the general Cascadia basin term is * used. * - * <li>For the 2023 NSHM, implementations were added that support Seattle M9 - * interface simulation informed modifications to basin amplification terms. - * This is a region-specific behavior and is managed through the use of flags - * that are passed in with {@code GmmInput}. Note that the Cascadia model - * includes specialized behavior (no M9) by default for both slab and - * interface.</ul> - * * <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}. @@ -68,12 +62,23 @@ import gov.usgs.earthquake.nshmp.tree.LogicTree; * <p><b>Component:</b> average horizontal (RotD50) * * @author U.S. Geological Survey + * @see Gmm#KBCG_20_GLOBAL_INTERFACE + * @see Gmm#KBCG_20_GLOBAL_INTERFACE_AK_ADJUSTED + * @see Gmm#KBCG_20_GLOBAL_SLAB + * @see Gmm#KBCG_20_CASCADIA_INTERFACE + * @see Gmm#KBCG_20_CASCADIA_INTERFACE_BASIN + * @see Gmm#KBCG_20_CASCADIA_INTERFACE_SEATTLE_BASIN + * @see Gmm#KBCG_20_CASCADIA_INTERFACE_SEATTLE_BASIN_M9 + * @see Gmm#KBCG_20_CASCADIA_SLAB + * @see Gmm#KBCG_20_CASCADIA_SLAB_BASIN + * @see Gmm#KBCG_20_CASCADIA_SLAB_SEATTLE_BASIN + * @see Gmm#KBCG_20_ALASKA_INTERFACE + * @see Gmm#KBCG_20_ALASKA_SLAB */ public abstract class KuehnEtAl_2020 implements GroundMotionModel { /* - * * Developer notes: * * (Some of the issues noted below will likely be cleared up when an @@ -153,7 +158,6 @@ public abstract class KuehnEtAl_2020 implements GroundMotionModel { private static final class Coefficients { final Imt imt; - final SubductionZone zone; final double θ1; final double θ2; @@ -191,8 +195,8 @@ public abstract class KuehnEtAl_2020 implements GroundMotionModel { CoefficientContainer ccBias, SubductionZone zone, boolean slab) { + this.imt = imt; - this.zone = zone; Map<String, Double> coeffs = cc.get(imt); θ3 = coeffs.get("theta_3"); @@ -283,7 +287,7 @@ public abstract class KuehnEtAl_2020 implements GroundMotionModel { } /* Use USGS deep basin, long period amplification model. */ - boolean basin() { + boolean usgsBasin() { return false; } @@ -310,13 +314,13 @@ public abstract class KuehnEtAl_2020 implements GroundMotionModel { in.Mw, in.rRup, in.zTor)); double μ = calcMean( - coeffs, slab(), basin(), seattle(), m9(), akBiasAdjusted(), + coeffs, slab(), usgsBasin(), seattle(), m9(), akBiasAdjusted(), 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(), m9(), akBiasAdjusted(), + coeffsPGA, slab(), usgsBasin(), seattle(), m9(), akBiasAdjusted(), in.Mw, in.rRup, in.zTor, in.vs30, in.z2p5, pgaRef); μ = max(μ, μPga); } @@ -360,7 +364,7 @@ public abstract class KuehnEtAl_2020 implements GroundMotionModel { private static double calcMean( Coefficients c, boolean slab, - boolean basin, + boolean usgsBasin, boolean seattle, boolean m9, boolean akBiasAdjusted, @@ -376,7 +380,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, m9); + double fBasin = basinTerm(c, vs30, z2p5, slab, usgsBasin, seattle, m9); double μ = c.θ1 + fMag + fGeom + fDepth + fAtten + fSite + fBasin; if (!slab && akBiasAdjusted) { @@ -676,7 +680,7 @@ public abstract class KuehnEtAl_2020 implements GroundMotionModel { } @Override - boolean basin() { + boolean usgsBasin() { return true; } } @@ -729,7 +733,7 @@ public abstract class KuehnEtAl_2020 implements GroundMotionModel { } @Override - boolean basin() { + boolean usgsBasin() { return true; } } diff --git a/src/main/java/gov/usgs/earthquake/nshmp/gmm/ParkerEtAl_2020.java b/src/main/java/gov/usgs/earthquake/nshmp/gmm/ParkerEtAl_2020.java index 2505d3c20bd9a468eb2ab483051323e61361236e..bd2bfe915224c1a1df5c7ff1ed7bbf452cb4261b 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/gmm/ParkerEtAl_2020.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/gmm/ParkerEtAl_2020.java @@ -34,25 +34,20 @@ import gov.usgs.earthquake.nshmp.tree.LogicTree; * * <p><b>Implementation notes:</b> * - * <ul><li>Model currently uses {@code zTor} for intraslab depth scaling but - * authors recommend {@code zHyp}. + * <ul><li>Implementations are provided for the global model as well as Cascadia + * and Alaska regionalized models. + * + * <li>Model uses {@code zTor} adjusted to {@code zHyp} using the author + * recommended model and assuming a 6.5 km vertical thickness of oceanic crust. * * <li>The basin depth scaling model is that developed for Cascadia. * Implementations include USGS developed depth tapering and restriction to long * periods ({@code T ≥ 1 s}), as well as a Seattle-specific basin * implementation that makes further adjustments based on M9 simulations for * interface events at sites over the deepest depths ({@code Z2.5 > 6 km}) and - * at long periods ({@code T &qeq; 2 s}). Specialized flags are now supported as - * GMM inputs and these may also trigger Seattle-specific behavior in the - * Cascadia interface implementation. - * - * <li>Implementations are provided for the global model as well as Cascadia and - * Alaska regionalized models. - * - * <li>For the 2023 NSHM, implementations were added that support Seattle M9 - * interface simulation informed modifications to basin amplification terms. - * This is a region-specific behavior and is managed through the use of flags - * that are passed in with {@code GmmInput}.</ul> + * at long periods ({@code T &qeq; 2 s}). These are region-specific behaviors + * and are managed through the use of a gmm-region defined in the + * {@code data/site} directory of recent {@code nshm-conus} models. * * <p><b>Note:</b> Direct instantiation of {@code GroundMotionModel}s is * prohibited. Use {@link Gmm#instance(Imt)} to retrieve an instance for a @@ -71,6 +66,16 @@ import gov.usgs.earthquake.nshmp.tree.LogicTree; * <p><b>Component:</b> average horizontal (RotD50) * * @author U.S. Geological Survey + * @see Gmm#PSBAH_20_GLOBAL_INTERFACE + * @see Gmm#PSBAH_20_GLOBAL_INTERFACE_AK_ADJUSTED + * @see Gmm#PSBAH_20_GLOBAL_SLAB + * @see Gmm#PSBAH_20_CASCADIA_INTERFACE + * @see Gmm#PSBAH_20_CASCADIA_INTERFACE_BASIN + * @see Gmm#PSBAH_20_CASCADIA_INTERFACE_BASIN_M9 + * @see Gmm#PSBAH_20_CASCADIA_SLAB + * @see Gmm#PSBAH_20_CASCADIA_SLAB_BASIN + * @see Gmm#PSBAH_20_ALASKA_INTERFACE + * @see Gmm#PSBAH_20_ALASKA_SLAB */ public abstract class ParkerEtAl_2020 implements GroundMotionModel { @@ -281,7 +286,7 @@ public abstract class ParkerEtAl_2020 implements GroundMotionModel { } /* Use USGS deep basin, long period amplification model. */ - boolean basin() { + boolean usgsBasin() { return false; } @@ -302,7 +307,7 @@ public abstract class ParkerEtAl_2020 implements GroundMotionModel { coeffsPGA, slab(), akBiasAdjusted(), in)); double μ = calcMean( - coeffs, slab(), basin(), m9(), akBiasAdjusted(), pgaRef, in); + coeffs, slab(), usgsBasin(), m9(), akBiasAdjusted(), pgaRef, in); double Ï•Total = phiTotal(coeffs, in.rRup, in.vs30); double σ = Maths.hypot(coeffs.Ï„, Ï•Total); @@ -339,7 +344,7 @@ public abstract class ParkerEtAl_2020 implements GroundMotionModel { private static double calcMean( Coefficients c, boolean slab, - boolean basin, + boolean usgsBasin, boolean m9, boolean akBiasAdjusted, double pgaRef, @@ -353,7 +358,7 @@ public abstract class ParkerEtAl_2020 implements GroundMotionModel { /* Equation 7 */ double Fslin = siteTermLinear(c, in.vs30); double Fsnl = siteTermNonLinear(c, pgaRef, in.vs30); - double Fsb = siteBasinTerm(c, in.vs30, in.z2p5, slab, basin, m9); + double Fsb = siteBasinTerm(c, in.vs30, in.z2p5, slab, usgsBasin, m9); double Fs = Fslin + Fsnl + Fsb; double μ = c.c0 + Fp + Fm + Fd + Fs; @@ -442,7 +447,7 @@ public abstract class ParkerEtAl_2020 implements GroundMotionModel { double vs30, double z2p5, boolean slab, - boolean basin, + boolean usgsBasin, boolean m9) { if (Double.isNaN(z2p5)) { @@ -471,7 +476,7 @@ public abstract class ParkerEtAl_2020 implements GroundMotionModel { } } - if (basin) { + if (usgsBasin) { Fb *= GmmUtils.deltaZ25scale(c.imt, z2p5); } @@ -636,7 +641,7 @@ public abstract class ParkerEtAl_2020 implements GroundMotionModel { } @Override - boolean basin() { + boolean usgsBasin() { return true; } } @@ -675,7 +680,7 @@ public abstract class ParkerEtAl_2020 implements GroundMotionModel { } @Override - boolean basin() { + boolean usgsBasin() { return true; } } diff --git a/src/main/java/gov/usgs/earthquake/nshmp/gmm/ZhaoEtAl_2006.java b/src/main/java/gov/usgs/earthquake/nshmp/gmm/ZhaoEtAl_2006.java index b770ca9c7ae2525dcc6df0f5f3a77d648f56aff2..38c15b9bc2bd49771c645aca7589111a10616433 100644 --- a/src/main/java/gov/usgs/earthquake/nshmp/gmm/ZhaoEtAl_2006.java +++ b/src/main/java/gov/usgs/earthquake/nshmp/gmm/ZhaoEtAl_2006.java @@ -50,8 +50,8 @@ import gov.usgs.earthquake.nshmp.gmm.GmmInput.Constraints; import gov.usgs.earthquake.nshmp.tree.LogicTree; /** - * Abstract implementation of the subduction ground motion model by Zhao et al. - * (2006). This implementation matches that used in the USGS NSHM. + * Implementation of the subduction ground motion model by Zhao et al. (2006). + * This implementation matches that used in the USGS NSHM. * * <p>This model supports both slab and interface type events. In the 2008 * NSHMP, the 'interface' form is used with the Cascadia subduction zone models @@ -236,7 +236,7 @@ public abstract class ZhaoEtAl_2006 implements GroundMotionModel { } /* Use USGS deep basin, long period amplification model. */ - boolean basin() { + boolean usgsBasin() { return false; } @@ -268,7 +268,7 @@ public abstract class ZhaoEtAl_2006 implements GroundMotionModel { /* Add (possibly depth-tapered) CB14 deep basin term. */ double fb = 0.0; - if (basin()) { + if (usgsBasin()) { fb = cb14.deepBasinScaling(in.z2p5); if (m9() && in.z2p5 > 6.0 && (coeffs.imt.isSA() && coeffs.imt.period() > 1.9)) { fb = log(2.0); // M9 scaling @@ -358,7 +358,7 @@ public abstract class ZhaoEtAl_2006 implements GroundMotionModel { } @Override - final boolean basin() { + final boolean usgsBasin() { return true; } } @@ -401,7 +401,7 @@ public abstract class ZhaoEtAl_2006 implements GroundMotionModel { } @Override - final boolean basin() { + final boolean usgsBasin() { return true; } }