From b134d367cfa9a5da5dbb36fe88547ea04b0ac066 Mon Sep 17 00:00:00 2001
From: Peter Powers <pmpowers@usgs.gov>
Date: Wed, 8 Nov 2023 15:28:57 -0700
Subject: [PATCH] added ak specific cb03

---
 .../nshmp/gmm/CampbellBozorgnia_2003.java     | 54 ++++++++++++++++++-
 .../gov/usgs/earthquake/nshmp/gmm/Gmm.java    |  7 +++
 2 files changed, 60 insertions(+), 1 deletion(-)

diff --git a/src/main/java/gov/usgs/earthquake/nshmp/gmm/CampbellBozorgnia_2003.java b/src/main/java/gov/usgs/earthquake/nshmp/gmm/CampbellBozorgnia_2003.java
index b9eb05a6..52ac7268 100755
--- a/src/main/java/gov/usgs/earthquake/nshmp/gmm/CampbellBozorgnia_2003.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/gmm/CampbellBozorgnia_2003.java
@@ -136,7 +136,7 @@ public class CampbellBozorgnia_2003 implements GroundMotionModel {
     return GroundMotions.createTree(μ, σ);
   }
 
-  private final double calcMean(
+  double calcMean(
       Coefficients c,
       GmmInput in) {
 
@@ -173,4 +173,56 @@ public class CampbellBozorgnia_2003 implements GroundMotionModel {
     return c16 - ((Mw < 7.4) ? 0.07 * Mw : 0.518);
   }
 
+  /**
+   * Custom version of Campbell &amp; Bozorgnia (2003) designed to match the
+   * fortran hazFX version used with the Alaska 2007 NSHM. All crustal faults in
+   * the AK NSHM are strike slip so we don't need to worry about style of
+   * faulting and hanging wall terms. Also removes dependence on BJF97 for site
+   * scaling.
+   */
+  public class Alaska extends CampbellBozorgnia_2003 {
+    static final String NAME = CampbellBozorgnia_2003.NAME + " : Alaska";
+
+    Alaska(Imt imt) {
+      super(imt);
+    }
+
+    @Override
+    final double calcMean(
+        Coefficients c,
+        GmmInput in) {
+
+      double Mw = in.Mw;
+
+      // magnitude scaling
+      double mTerm = (8.5 - Mw) * (8.5 - Mw);
+      double f1 = c.c2 * Mw + c.c3 * mTerm;
+
+      // distance scaling - per verbal communication with Ken Campbell it
+      // is ok to approximate rSeis by constraining rRup to be >= 3.0 km.
+      // (see also Campbell 1997)
+      double rSeis = max(in.rRup, 3.0);
+      double rTerm = gS * exp(c.c8 * Mw + c.c9 * mTerm);
+      double f2 = rSeis * rSeis + rTerm * rTerm;
+
+      // focal mechanism
+      // FaultStyle style = GmmUtils.rakeToFaultStyle_NSHMP(in.rake);
+      // double f3 = (style == REVERSE) ? revStyleTerm : (style == UNKNOWN) ?
+      // unkStyleTerm : 0.0;
+
+      // far-source effect of local site conditions
+      // (pre-calculated)
+
+      // // hanging-wall effect
+      // double HW = (in.rJB < 5.0 && in.dip <= 70.0) ? (5.0 - in.rJB) / 5.0 :
+      // 0.0;
+      // double hwM = (Mw > 6.5) ? 1.0 : (Mw >= 5.5) ? Mw - 5.5 : 0.0;
+      // double hwR = (rSeis < 8.0) ? c.c15 * (rSeis / 8.0) : c.c15;
+      // double f5 = HW * f3 * hwM * hwR;
+
+      // return c.c1 + f1 + c.c4 * log(sqrt(f2)) + f3 + f4 + f5;
+      return c.c1 + f1 + c.c4 * log(sqrt(f2)) + c.c14;
+    }
+
+  }
 }
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 57c0f7c1..5f65c4f0 100644
--- a/src/main/java/gov/usgs/earthquake/nshmp/gmm/Gmm.java
+++ b/src/main/java/gov/usgs/earthquake/nshmp/gmm/Gmm.java
@@ -286,6 +286,13 @@ public enum Gmm {
       CampbellBozorgnia_2003.COEFFS,
       CampbellBozorgnia_2003.CONSTRAINTS),
 
+  /** @see CampbellBozorgnia_2003 */
+  CB_03_ALASKA(
+      CampbellBozorgnia_2003.Alaska.class,
+      CampbellBozorgnia_2003.Alaska.NAME,
+      CampbellBozorgnia_2003.COEFFS,
+      CampbellBozorgnia_2003.CONSTRAINTS),
+
   /** @see MunsonThurber_1997 */
   MT_97(
       MunsonThurber_1997.class,
-- 
GitLab