Skip to content
This repository was archived by the owner on May 28, 2019. It is now read-only.

Commit 3502eef

Browse files
committed
Merge pull request #18 from larsbutler/campbell-gmpe-stddev-bug
Campbell GMPE stddev bugfix [r=al-maisan] [f=942484]
2 parents b767fb8 + 641d07c commit 3502eef

2 files changed

Lines changed: 52 additions & 6 deletions

File tree

java/org/opensha/sha/imr/attenRelImpl/Campbell_2003_SHARE_AttenRel.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import org.opensha.commons.param.event.ParameterChangeWarningListener;
55
import org.opensha.sha.earthquake.EqkRupture;
66
import org.opensha.sha.imr.attenRelImpl.constants.AdjustFactorsSHARE;
7-
import org.opensha.sha.imr.attenRelImpl.constants.Campbell2003Constants;
87
import org.opensha.sha.imr.param.EqkRuptureParams.RakeParam;
98

109
/**
@@ -53,6 +52,10 @@ public class Campbell_2003_SHARE_AttenRel extends Campbell_2003_AttenRel {
5352

5453
private double rake;
5554

55+
public void setIper(int iper) {
56+
this.iper = iper;
57+
}
58+
5659
public Campbell_2003_SHARE_AttenRel(
5760
ParameterChangeWarningListener warningListener) {
5861
super(warningListener);
@@ -143,13 +146,13 @@ public double[] computeStyleOfFaultingTerm(final int iper, final double rake) {
143146
}
144147
return f;
145148
}
146-
149+
147150
public double getStdDev(){
148-
return getStdDev(iper, rake, stdDevType);
151+
return getStdDev(iper, mag, stdDevType);
149152
}
150-
151-
public double getStdDev(int iper, double rake, String stdDevType){
152-
double std = super.getStdDev(iper, rake, stdDevType);
153+
154+
public double getStdDev(int iper, double mag, String stdDevType){
155+
double std = super.getStdDev(iper, mag, stdDevType);
153156
return std * AdjustFactorsSHARE.sig_AFrock_CAMBPELL2003[iper];
154157
}
155158

java_tests/org/opensha/sha/imr/attenRelImpl/test/Campbell_2003_SHARE_test.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,14 @@
77
import org.junit.After;
88
import org.junit.Before;
99
import org.junit.Test;
10+
import org.opensha.commons.param.ParameterAPI;
11+
import org.opensha.commons.param.event.ParameterChangeEvent;
1012
import org.opensha.commons.param.event.ParameterChangeWarningEvent;
1113
import org.opensha.commons.param.event.ParameterChangeWarningListener;
14+
import org.opensha.sha.earthquake.EqkRupture;
1215
import org.opensha.sha.imr.attenRelImpl.Campbell_2003_SHARE_AttenRel;
1316
import org.opensha.sha.imr.attenRelImpl.constants.AdjustFactorsSHARE;
17+
import org.opensha.sha.imr.param.EqkRuptureParams.MagParam;
1418
import org.opensha.sha.imr.param.OtherParams.StdDevTypeParam;
1519

1620
/**
@@ -150,4 +154,43 @@ private void validateStdDev(String stdDevType, double[][] table) {
150154
@Override
151155
public void parameterChangeWarning(ParameterChangeWarningEvent event) {
152156
}
157+
158+
/**
159+
* This test was added to address
160+
* https://bugs.launchpad.net/openquake/+bug/942484.
161+
*
162+
* The wrong variable was being passed to getStdDev(int, double, String).
163+
* The 'rake' was being passed instead of 'mag'.
164+
*/
165+
@Test
166+
public void testGetStdDev() {
167+
168+
// Test data was sampled from test_data/Ca03_SIGMcorr.txt
169+
double mag = 5.0;
170+
final double [] expectedStdevs = {
171+
0.6, 0.6, 0.6, 0.623,
172+
0.633, 0.64, 0.649, 0.658,
173+
0.662, 0.686, 0.702, 0.7135,
174+
0.7135, 0.714, 0.7215, 0.731};
175+
176+
// First, set the stddev type and mag values:
177+
ParameterAPI magParam = ca03AttenRel.getParameter(MagParam.NAME);
178+
ParameterChangeEvent magParamChange = new ParameterChangeEvent(
179+
magParam, MagParam.NAME, null, mag);
180+
181+
ParameterAPI stddevParam = ca03AttenRel.getParameter(StdDevTypeParam.NAME);
182+
ParameterChangeEvent stddevParamChange = new ParameterChangeEvent(
183+
stddevParam, StdDevTypeParam.NAME, null, StdDevTypeParam.STD_DEV_TYPE_TOTAL);
184+
ca03AttenRel.parameterChange(magParamChange);
185+
ca03AttenRel.parameterChange(stddevParamChange);
186+
187+
// Sanity check: make sure
188+
// expecteStddevs and AFrock_CAMPBELL2003 (periods) have the same length.
189+
assertEquals(expectedStdevs.length, AdjustFactorsSHARE.sig_AFrock_CAMBPELL2003.length);
190+
191+
for (int iper = 0; iper < AdjustFactorsSHARE.sig_AFrock_CAMBPELL2003.length; iper++) {
192+
ca03AttenRel.setIper(iper);
193+
assertEquals(expectedStdevs[iper], ca03AttenRel.getStdDev() / AdjustFactorsSHARE.sig_AFrock_CAMBPELL2003[iper], 0.0009);
194+
}
195+
}
153196
}

0 commit comments

Comments
 (0)