@@ -109,7 +109,6 @@ public abstract class BcHydro_2012 implements GroundMotionModel {
109109 private static final double SIGMA = 0.74 ;
110110 private static final double ΔC1_SLAB = -0.3 ;
111111 private static final double VS30_ROCK = 1000.0 ;
112- private static final double VS30_REF = 760.0 ; // refrence vs30 for CB basin Δ
113112
114113 private static final Map <Imt , Range <Imt >> INTERPOLATED_IMTS = Maps .immutableEnumMap (
115114 ImmutableMap .of (SA0P03 , Range .closed (SA0P02 , SA0P05 )));
@@ -141,7 +140,7 @@ private static final class Coefficients {
141140
142141 private final Coefficients coeffs ;
143142 private final Coefficients coeffsPGA ;
144- private final CampbellBozorgnia_2014 . BasinAmp cb14basinAmp ;
143+ private final CampbellBozorgnia_2014 cb14 ;
145144
146145 // interpolatedGmm = null if !interpolated
147146 private final boolean interpolated ;
@@ -150,7 +149,7 @@ private static final class Coefficients {
150149 BcHydro_2012 (final Imt imt , Gmm subtype ) {
151150 coeffs = new Coefficients (imt , COEFFS );
152151 coeffsPGA = new Coefficients (PGA , COEFFS );
153- cb14basinAmp = new CampbellBozorgnia_2014 . BasinAmp (imt );
152+ cb14 = new CampbellBozorgnia_2014 (imt );
154153 interpolated = INTERPOLATED_IMTS .containsKey (imt );
155154 interpolatedGmm = interpolated
156155 ? new InterpolatedGmm (subtype , imt , INTERPOLATED_IMTS .get (imt ))
@@ -166,22 +165,20 @@ public final ScalarGroundMotion calc(final GmmInput in) {
166165 double pgaRock = exp (calcMean (coeffsPGA , isSlab (), 0.0 , in .Mw , in .rRup , in .zTop , VS30_ROCK ));
167166 double μAsk = calcMean (coeffs , isSlab (), pgaRock , in .Mw , in .rRup , in .zTop , in .vs30 );
168167
169- if (!Double .isNaN (in .z2p5 ) && basinEffect ()) {
170-
171- double μRef = calcMean (coeffs , isSlab (), pgaRock , in .Mw , in .rRup , in .zTop , VS30_REF );
172- double cbBasin = cb14basinAmp .basinDelta (in , VS30_REF );
173- double μCb = μRef + cbBasin ;
174-
175- /* Short-circuit lower values and short periods. */
176- int imtId = coeffs .imt .ordinal ();
177- if ((μCb < μAsk ) || (imtId < Imt .SA0P75 .ordinal ())) {
178- return DefaultScalarGroundMotion .create (μAsk , SIGMA );
179- } else if (imtId < Imt .SA1P0 .ordinal ()) {
180- double μScaled = GmmUtils .scaleSubductionSiteAmp (coeffs .imt , μAsk , μCb );
181- return DefaultScalarGroundMotion .create (μScaled , SIGMA );
168+ /*
169+ * Add CB14 deep basin amplification term if (1) z2p5 is non-NaN, (2) this
170+ * instance is basin amplifying and (3) T>0.5s
171+ */
172+ if (!Double .isNaN (in .z2p5 ) &&
173+ basinEffect () &&
174+ coeffs .imt .ordinal () > Imt .SA0P5 .ordinal ()) {
175+ double cbBasinTerm = cb14 .deepBasinAmplification (in .z2p5 );
176+ if (coeffs .imt == Imt .SA0P75 ) {
177+ cbBasinTerm *= 0.585 ;// log T scaling at 0.75s
182178 }
183- return DefaultScalarGroundMotion . create ( μCb , SIGMA ) ;
179+ μAsk += cbBasinTerm ;
184180 }
181+
185182 return DefaultScalarGroundMotion .create (μAsk , SIGMA );
186183 }
187184
0 commit comments