Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • ghsc/nshmp/nshmp-lib
1 result
Show changes
Commits on Source (17)
......@@ -53,6 +53,18 @@ public enum Gmm {
* argument.
*/
MA_05_BASE(
MotazedianAtkinson_2005.class,
MotazedianAtkinson_2005.NAME,
MotazedianAtkinson_2005.COEFFS,
MotazedianAtkinson_2005.CONSTRAINTS),
MA_05(
MotazedianAtkinson_2005.Usgs.class,
MotazedianAtkinson_2005.NAME,
MotazedianAtkinson_2005.COEFFS,
MotazedianAtkinson_2005.CONSTRAINTS),
/*
* Active continent NGA-West1 WUS 2008.
*
......
package gov.usgs.earthquake.nshmp.gmm;
import static gov.usgs.earthquake.nshmp.gmm.Gmm.BA_08_BASE;
import static gov.usgs.earthquake.nshmp.gmm.GmmInput.Field.MW;
import static gov.usgs.earthquake.nshmp.gmm.GmmInput.Field.RRUP;
import static gov.usgs.earthquake.nshmp.gmm.GmmInput.Field.VS30;
import static gov.usgs.earthquake.nshmp.gmm.GmmUtils.BASE_10_TO_E;
import static gov.usgs.earthquake.nshmp.gmm.GmmUtils.LN_G_CM_TO_M;
import static gov.usgs.earthquake.nshmp.gmm.Imt.PGA;
import static gov.usgs.earthquake.nshmp.gmm.Imt.SA0P01;
import static gov.usgs.earthquake.nshmp.gmm.Imt.SA0P02;
import static gov.usgs.earthquake.nshmp.gmm.Imt.SA0P03;
import static gov.usgs.earthquake.nshmp.gmm.Imt.SA0P05;
import static gov.usgs.earthquake.nshmp.gmm.Imt.SA0P06;
import static gov.usgs.earthquake.nshmp.gmm.Imt.SA0P075;
import static gov.usgs.earthquake.nshmp.gmm.Imt.SA0P08;
import static gov.usgs.earthquake.nshmp.gmm.Imt.SA0P1;
import static gov.usgs.earthquake.nshmp.gmm.Imt.SA0P12;
import static gov.usgs.earthquake.nshmp.gmm.Imt.SA0P15;
import static gov.usgs.earthquake.nshmp.gmm.Imt.SA0P16;
import static gov.usgs.earthquake.nshmp.gmm.Imt.SA0P2;
import static gov.usgs.earthquake.nshmp.gmm.Imt.SA0P5;
import static gov.usgs.earthquake.nshmp.gmm.Imt.SA0P6;
import static gov.usgs.earthquake.nshmp.gmm.Imt.SA0P75;
import static gov.usgs.earthquake.nshmp.gmm.Imt.SA0P8;
import static gov.usgs.earthquake.nshmp.gmm.Imt.SA1P0;
import static java.lang.Math.log10;
import static java.lang.Math.sqrt;
import java.util.EnumMap;
import java.util.Map;
import java.util.Optional;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import com.google.common.collect.Range;
import gov.usgs.earthquake.nshmp.data.Interpolator;
import gov.usgs.earthquake.nshmp.gmm.GmmInput.Constraints;
import gov.usgs.earthquake.nshmp.tree.LogicTree;
/**
* Implementation of the ground motion relations for Puerto Rico by Motazedian
* and Atkinson (2005) in order to evaluate the model for use in the 2025 Puerto
* Rico and U.S. Virgin Islands NSHM.
*
* <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}.
*
* <p><b>Implementation notes:</b><ul>
*
* <li>Published coefficients are defined in frequency-space. Frequencies are
* converted to the closest existing spectral period in IMT.</li>
*
* <li>Support for spectral period 0.01s is provided using the same coefficients
* as PGA.</li>
*
* <li>Support for spectral periods 0.02, 0.03, 0.05, 0.075, 0.15, and 0.75 s is
* provided via interpolation of ground motion and sigma of adjacent periods for
* which there are coefficients.</li>
*
* <li>Base model is for soft rock site classes only (Vs30 = 760 m/s).</li>
*
* <li>USGS subclass adds site-scaling model of BA08.</li>
*
* <p><b>Reference:</b> Motazedian, D. and Atkinson, G., 2005, Ground-motion
* relations for Puerto Rico, in Mann, P., ed., Active tectonics and seismic
* hazards of Puerto Rico, the Virgin Islands, and offshore areas: Geological
* Society of America Special Paper 385, p. 61-80.
*
* <p><b>doi: </b> <a href="https://doi.org/10.1130/SPE385">10.1130/SPE385</a>
*
* <p><b>Component:</b> Geometric mean of two horizontal components
*
* @author U.S. Geological Survey
* @see Gmm#MA_05_BASE
* @see Gmm#MA_05
*/
public class MotazedianAtkinson_2005 implements GroundMotionModel {
static final String NAME = "Motazedian & Atkinson (2005) BETA";
static final Constraints CONSTRAINTS = Constraints.builder()
.set(MW, Range.closed(4.0, 9.5))
.set(RRUP, Range.closed(0.0, 1000.0))
.set(VS30, Range.singleton(760.0))
.build();
/*
* Published coefficients are given for frequency (Hz). These are converted to
* the closest available IMT period. Published PGA coefficients are duplicated
* for 0.01 sec. Non-MPRS coefficients for 1.25, 2.5, and 6 s commented out.
*/
static final CoefficientContainer COEFFS =
new CoefficientContainer("MotazedianAtkinson05_interp.csv");
/* Interpolated IMTs to support MPRS. */
private static final Map<Imt, Range<Imt>> INTERPOLATED_IMTS =
Maps.immutableEnumMap(
ImmutableMap.<Imt, Range<Imt>> builder()
.put(SA0P02, Range.closed(SA0P01, SA0P06))
.put(SA0P03, Range.closed(SA0P01, SA0P06))
.put(SA0P05, Range.closed(SA0P01, SA0P06))
.put(SA0P075, Range.closed(SA0P06, SA0P08))
.put(SA0P15, Range.closed(SA0P12, SA0P16))
.put(SA0P75, Range.closed(SA0P6, SA0P8))
.build());
// distance centering coefficients
private static final double C5 = -7.333;
private static final double C6 = 2.333;
// hinge function coefficients
private static final double C7 = -1.8;
private static final double C8 = 0.1;
private static final double DIST_HINGE_LOWER = 75.0;
private static final double DIST_HINGE_UPPER = 100.0;
// convert log10 sigma to ln
private static final double SIGMA = 0.28 * BASE_10_TO_E;
private static final class Coefficients {
final Imt imt;
final double c1, c2, c3, c4;
Coefficients(Imt imt, CoefficientContainer cc) {
this.imt = imt;
Map<String, Double> coeffs = cc.get(imt);
c1 = coeffs.get("c1");
c2 = coeffs.get("c2");
c3 = coeffs.get("c3");
c4 = coeffs.get("c4");
}
}
private final Coefficients coeffs;
private final boolean interpolated;
private final GroundMotionModel interpolatedGmm;
MotazedianAtkinson_2005(Imt imt) {
coeffs = new Coefficients(imt, COEFFS);
interpolated = INTERPOLATED_IMTS.containsKey(imt);
interpolatedGmm = interpolated
? new InterpolatedGmm(Gmm.MA_05, imt, INTERPOLATED_IMTS.get(imt))
: null;
}
@Override
public Imt imt() {
return coeffs.imt;
}
@Override
public LogicTree<GroundMotion> calc(GmmInput in) {
if (interpolated) {
return interpolatedGmm.calc(in);
}
return calc(coeffs, in);
}
private static LogicTree<GroundMotion> calc(
Coefficients c,
GmmInput in) {
double μ = calcMean(c, in.rRup, in.Mw);
return GroundMotions.createTree(μ, SIGMA);
}
private static final double calcMean(
Coefficients c,
double rRup,
double Mw) {
/* Eq. 6, log10(PSA) in cm/s/s */
double r = getR(rRup, Mw);
double hingeFunction = getHingeFunction(r, Mw);
double μ = c.c1 + c.c2 * (Mw - 6) + c.c3 * (Mw - 6) * (Mw - 6) + hingeFunction + c.c4 * r;
// convert from base 10 to base 2 and from cm/s/s to g
return μ * BASE_10_TO_E - LN_G_CM_TO_M;
}
private static final double getR(double rRup, double Mw) {
// Equation and coefficients defined in Table 2 caption
double delta = C5 + C6 * Mw;
return sqrt(rRup * rRup + delta * delta);
}
private static final double getHingeFunction(double dist, double Mw) {
// Equation and coefficients defined in Table 2 caption
double mFac = C7 + C8 * Mw;
if (dist <= DIST_HINGE_LOWER) {
// R <= 75 km
return mFac * log10(dist);
} else if (dist <= DIST_HINGE_UPPER) {
// 75 km < R <= 100 km
return mFac * log10(DIST_HINGE_LOWER);
} else {
// R >= 100 km
return mFac * log10(DIST_HINGE_LOWER) - 0.5 * log10(dist / DIST_HINGE_UPPER);
}
}
/*
* USGS implementation that adds site scaling using BA08 model.
*
* MA05 supports a variety of non-MPRS spectral periods required for
* interpolation that are, in turn, not supported by BA08. We therefore
* interpolate site terms as needed for the six IMTs missing from BA08.
*/
static class Usgs extends MotazedianAtkinson_2005 {
/* MA05 non-MPRS IMTs. */
private static final Map<Imt, Range<Imt>> INTERPOLATED_SITE_IMTS =
new EnumMap<>(Map.of(
SA0P06, Range.closed(SA0P05, SA0P75),
SA0P08, Range.closed(SA0P75, SA1P0),
SA0P12, Range.closed(SA0P1, SA0P15),
SA0P16, Range.closed(SA0P15, SA0P2),
SA0P6, Range.closed(SA0P5, SA0P75),
SA0P8, Range.closed(SA0P75, SA1P0)));
private final Coefficients coeffsPGA;
private final Optional<BooreAtkinson_2008> siteAmp;
Usgs(Imt imt) {
super(imt);
coeffsPGA = new Coefficients(PGA, COEFFS);
siteAmp = BooreAtkinson_2008.COEFFS.imts().contains(imt)
? Optional.of((BooreAtkinson_2008) BA_08_BASE.instance(imt))
: Optional.empty();
}
@Override
public LogicTree<GroundMotion> calc(GmmInput in) {
double μ = calcMean(super.coeffs, in.rRup, in.Mw);
double μPga = calcMean(coeffsPGA, in.rRup, in.Mw);
double site = siteAmp.isPresent()
? siteAmp.get().siteAmp(μPga, in.vs30)
: calcInterpolatedSite(super.coeffs.imt, μPga, in.vs30);
return GroundMotions.createTree(μ + site, SIGMA);
}
private static double calcInterpolatedSite(Imt imt, double μPga, double vs30) {
Range<Imt> imts = INTERPOLATED_SITE_IMTS.get(imt);
Imt imtLo = imts.lowerEndpoint();
Imt imtHi = imts.upperEndpoint();
double tLo = imtLo.period();
double tHi = imtHi.period();
double tTarget = imt.period();
BooreAtkinson_2008 ba08lo = (BooreAtkinson_2008) BA_08_BASE.instance(imtLo);
BooreAtkinson_2008 ba08hi = (BooreAtkinson_2008) BA_08_BASE.instance(imtHi);
double siteLo = ba08lo.siteAmp(μPga, vs30);
double siteHi = ba08hi.siteAmp(μPga, vs30);
return Interpolator.findY(tLo, siteLo, tHi, siteHi, tTarget);
}
}
}
......@@ -688,8 +688,8 @@ public class GridRuptureSet extends AbstractRuptureSet<PointSource> {
* Row count reflects the number of rows used in a DataTable when building
* sources. Although this will likely be the same as sources.size(), it may
* not be. For example, when using multi-mechs many more sources are created
* because the different focal mechs arce (can) not be combined given
* bpossibly varying rates across different magnitudes.
* because the different focal mechs are (can) not be combined given
* possibly varying rates across different magnitudes.
*/
private int rowCount;
private int maximumSize;
......@@ -789,11 +789,6 @@ public class GridRuptureSet extends AbstractRuptureSet<PointSource> {
double mMin = mags[0] - ΔmBy2;
double mMax = mags[mags.length - 1] + ΔmBy2;
// table keys are specified as lowermost and uppermost bin edges
// double Δm = parent.Δm;
// double ΔmBy2 = Δm / 2.0;
// double mMin = parent.magMaster[0] - ΔmBy2;
// double mMax = parent.magMaster[parent.magMaster.length - 1] + ΔmBy2;
double rMax = parent.gmmTree().maxDistance().orElseThrow();
double distanceBin = parent.distanceBin.orElseThrow();
double[] smoothingOffsets = smoothingOffsets(
......@@ -856,10 +851,6 @@ public class GridRuptureSet extends AbstractRuptureSet<PointSource> {
double mMin = mags[0] - ΔmBy2;
double mMax = mags[mags.length - 1] + ΔmBy2;
// double Δm = parent.Δm;
// double ΔmBy2 = Δm / 2.0;
// double mMin = parent.magMaster[0] - ΔmBy2;
// double mMax = parent.magMaster[parent.magMaster.length - 1] + ΔmBy2;
double rMax = parent.gmmTree().maxDistance().orElseThrow();
double distanceBin = parent.distanceBin.orElseThrow();
double[] smoothingOffsets = smoothingOffsets(
......@@ -878,30 +869,13 @@ public class GridRuptureSet extends AbstractRuptureSet<PointSource> {
.rows(0.0, rMax, distanceBin)
.columns(mMin, mMax, Δm);
// XySequence srcMfdSum = null;
for (PointSource source : parent.iterableForLocation(origin)) {
double r = Locations.horzDistanceFast(origin, source.loc);
// if (srcMfdSum == null) {
// srcMfdSum = XySequence.emptyCopyOf(source.mfd);
// }
// srcMfdSum.add(source.mfd);
Mfd ssMfd = Mfd.Builder.from(source.mfd).scale(source.mechWtMap.get(STRIKE_SLIP)).build();
Mfd rMfd = Mfd.Builder.from(source.mfd).scale(source.mechWtMap.get(REVERSE)).build();
Mfd nMfd = Mfd.Builder.from(source.mfd).scale(source.mechWtMap.get(NORMAL)).build();
// XySequence ssMfd =
// MutableXySequence.copyOf(source.mfd.data()).multiply(
// source.mechWtMap.get(STRIKE_SLIP));
// XySequence rMfd =
// MutableXySequence.copyOf(source.mfd.data()).multiply(
// source.mechWtMap.get(REVERSE));
// XySequence nMfd =
// MutableXySequence.copyOf(source.mfd.data()).multiply(
// source.mechWtMap.get(NORMAL));
if (smoothed && r < parent.smoothingLimit) {
addSmoothed(ssTableBuilder, origin, source.loc, ssMfd, smoothingOffsets);
addSmoothed(rTableBuilder, origin, source.loc, rMfd, smoothingOffsets);
......@@ -911,31 +885,28 @@ public class GridRuptureSet extends AbstractRuptureSet<PointSource> {
rTableBuilder.add(r, rMfd.data());
nTableBuilder.add(r, nMfd.data());
}
parentCount++;
}
IntervalTable ssTable = ssTableBuilder.build();
// System.out.println("SS Table:" + TextUtils.NEWLINE + ssTable);
// System.out.println("SS Table:" + Text.NEWLINE + ssTable);
IntervalTable rTable = rTableBuilder.build();
// System.out.println("R Table:" + TextUtils.NEWLINE + rTable);
// System.out.println("R Table:" + Text.NEWLINE + rTable);
IntervalTable nTable = nTableBuilder.build();
// System.out.println("N Table:" + TextUtils.NEWLINE + nTable);
// System.out.println("N Table:" + Text.NEWLINE + nTable);
// DataTable tableSum = DataTable.Builder.fromModel(ssTable)
// .add(ssTable)
// .add(rTable)
// .add(nTable)
// .build();
//
// XySequence tableMfdSum =
// XySequence.emptyCopyOf(tableSum.row(0.1));
// for (double row : tableSum.rows()) {
// tableMfdSum.add(tableSum.row(row));
// }
// System.out.println("sourcesMfd:");
// System.out.println(srcMfdSum);
//
// System.out.println("tableMfd:");
// System.out.println(tableMfdSum);
......@@ -947,49 +918,46 @@ public class GridRuptureSet extends AbstractRuptureSet<PointSource> {
boolean tableRowUsed = false;
Mfd ssMfd = Mfd.create(ssTable.row(r));
if (ssMfd.data().isClear()) {
continue;
if (ssMfd.data().y(0) > 0.0 || !ssMfd.data().isClear()) {
b.add(new PointSourceFinite(
parent,
parent.type(),
loc,
ssMfd,
parent.mechMaps.get(0),
parent.rupScaling,
parent.depthModel,
Optional.empty()));
tableRowUsed = true;
}
b.add(new PointSourceFinite(
parent,
parent.type(),
loc,
ssMfd,
parent.mechMaps.get(0),
parent.rupScaling,
parent.depthModel,
Optional.empty()));
tableRowUsed = true;
Mfd rMfd = Mfd.create(rTable.row(r));
if (rMfd.data().isClear()) {
continue;
if (rMfd.data().y(0) > 0.0 || !rMfd.data().isClear()) {
b.add(new PointSourceFinite(
parent,
parent.type(),
loc,
rMfd,
parent.mechMaps.get(0),
parent.rupScaling,
parent.depthModel,
Optional.empty()));
tableRowUsed = true;
}
b.add(new PointSourceFinite(
parent,
parent.type(),
loc,
rMfd,
parent.mechMaps.get(0),
parent.rupScaling,
parent.depthModel,
Optional.empty()));
tableRowUsed = true;
Mfd nMfd = Mfd.create(nTable.row(r));
if (nMfd.data().isClear()) {
continue;
if (nMfd.data().y(0) > 0.0 || !nMfd.data().isClear()) {
b.add(new PointSourceFinite(
parent,
parent.type(),
loc,
nMfd,
parent.mechMaps.get(0),
parent.rupScaling,
parent.depthModel,
Optional.empty()));
tableRowUsed = true;
}
b.add(new PointSourceFinite(
parent,
parent.type(),
loc,
nMfd,
parent.mechMaps.get(0),
parent.rupScaling,
parent.depthModel,
Optional.empty()));
tableRowUsed = true;
if (tableRowUsed) {
rowCount++;
......@@ -998,14 +966,6 @@ public class GridRuptureSet extends AbstractRuptureSet<PointSource> {
return List.copyOf(b);
}
/*
* Return a distance dependent discretization. Currently this is fixed at
* 1km for r<400km and 5km for r>= 400km
*/
// private static double distanceDiscretization(double r) {
// return r < 400.0 ? 1.0 : 5.0;
// }
private static double[] smoothingOffsets(int density, double spacing) {
return offsets(spacing, (density == 4)
? OFFSET_SCALE_4
......
T, f, c1, c2, c3, c4
10, 0.10, 1.62, 0.91212, -0.10486, -0.00092
7.5, 0.13, 1.80, 0.90635, -0.11886, -0.00081
#6, 0.16, 1.98, 0.89009, -0.13157, -0.00064
5, 0.20, 2.16, 0.87177, -0.14444, -0.00052
4, 0.25, 2.36, 0.84583, -0.15306, -0.00048
3, 0.32, 2.55, 0.81112, -0.16625, -0.00044
#2.5, 0.40, 2.74, 0.78035, -0.17792, -0.00050
2, 0.50, 2.89, 0.73416, -0.17060, -0.00056
1.5, 0.63, 3.04, 0.67664, -0.15973, -0.00061
#1.25, 0.79, 3.20, 0.63441, -0.15706, -0.00080
1, 1.00, 3.35, 0.56986, -0.14377, -0.00086
0.8, 1.26, 3.47, 0.49700, -0.11945, -0.00105
0.75, 0, 0, 0, 0, 0
0.6, 1.59, 3.58, 0.47303, -0.11486, -0.00118
0.5, 2.00, 3.68, 0.44246, -0.10831, -0.00126
0.4, 2.51, 3.74, 0.40472, -0.08864, -0.00139
0.3, 3.16, 3.83, 0.38087, -0.09045, -0.00159
0.25, 3.98, 3.88, 0.35932, -0.07932, -0.00185
0.2, 5.01, 3.94, 0.33077, -0.06816, -0.00204
0.16, 6.31, 3.97, 0.33046, -0.07344, -0.00219
0.15, 0, 0, 0, 0, 0
0.12, 7.94, 3.98, 0.32515, -0.07216, -0.00234
0.1, 10.00, 3.96, 0.32088, -0.06542, -0.00244
0.08, 12.59, 3.94, 0.32165, -0.06523, -0.00253
0.075, 0, 0, 0, 0, 0
0.06, 15.85, 3.88, 0.33249, -0.06818, -0.00251
0.05, 0, 0, 0, 0, 0
0.03, 0, 0, 0, 0, 0
0.02, 0, 0, 0, 0, 0
0.01, 0.01, 3.60, 0.35181, -0.06926, -0.00201
PGA, 0.00, 3.60, 0.35181, -0.06926, -0.00201
PGV, -1.00, 2.35, 0.54828, -0.06350, -0.00107
#0.8, 0, 0, 0, 0, 0x
#0.6, 0, 0, 0, 0, 0x
#0.16, 0, 0, 0, 0, 0x
#0.12, 0, 0, 0, 0, 0x
#0.08, 0, 0, 0, 0, 0x
#0.06, 0, 0, 0, 0, 0x
package gov.usgs.earthquake.nshmp.gmm;
import static gov.usgs.earthquake.nshmp.gmm.Gmm.MA_05;
import java.io.IOException;
import java.util.EnumSet;
import java.util.Set;
import java.util.stream.Stream;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.ArgumentsProvider;
import org.junit.jupiter.params.provider.ArgumentsSource;
public class MotazedianAtkinson_2005_tests implements ArgumentsProvider {
private static String GMM_INPUTS = "/gmm/motazedian-atkinson-2005-inputs.csv";
private static String GMM_RESULTS = "/gmm/motazedian-atkinson-2005-results.csv";
@ParameterizedTest(name = "({index}) {0} {2} {1}")
@ArgumentsSource(MotazedianAtkinson_2005_tests.class)
void test(int index, Gmm gmm, Imt imt, double exMedian, double exSigma, String inputs) {
GmmTest.test(index, gmm, imt, exMedian, exSigma, inputs);
}
@Override
public Stream<? extends Arguments> provideArguments(ExtensionContext context) throws Exception {
return GmmTest.loadResults(GMM_RESULTS, GMM_INPUTS);
}
/* Result generation sets */
private static Set<Gmm> gmms = EnumSet.of(MA_05);
private static Set<Imt> imts = MotazedianAtkinson_2005.COEFFS.imts();
public static void main(String[] args) throws IOException {
GmmTest.generateResults(gmms, imts, GMM_INPUTS, GMM_RESULTS);
System.out.println("Done");
}
}
#Mw,rjB,rRup,rX,dip,width,zTor,zHyp,rake,vs30,z1p0,z2p5,zSed
5.0,0,2,0,90,5,1,1,1,760,NaN,NaN,NaN
5.0,0,3,0,90,5,1,1,1,760,NaN,NaN,NaN
5.0,0,4,0,90,5,1,1,1,760,NaN,NaN,NaN
5.0,0,5,0,90,5,1,1,1,760,NaN,NaN,NaN
5.0,0,6,0,90,5,1,1,1,760,NaN,NaN,NaN
5.0,0,8,0,90,5,1,1,1,760,NaN,NaN,NaN
5.0,0,10,0,90,5,1,1,1,760,NaN,NaN,NaN
5.0,0,15,0,90,5,1,1,1,760,NaN,NaN,NaN
5.0,0,20,0,90,5,1,1,1,760,NaN,NaN,NaN
5.0,0,30,0,90,5,1,1,1,760,NaN,NaN,NaN
5.0,0,40,0,90,5,1,1,1,760,NaN,NaN,NaN
5.0,0,50,0,90,5,1,1,1,760,NaN,NaN,NaN
5.0,0,60,0,90,5,1,1,1,760,NaN,NaN,NaN
5.0,0,80,0,90,5,1,1,1,760,NaN,NaN,NaN
5.0,0,100,0,90,5,1,1,1,760,NaN,NaN,NaN
5.0,0,150,0,90,5,1,1,1,760,NaN,NaN,NaN
5.0,0,200,0,90,5,1,1,1,760,NaN,NaN,NaN
5.0,0,300,0,90,5,1,1,1,760,NaN,NaN,NaN
5.0,0,500,0,90,5,1,1,1,760,NaN,NaN,NaN
6.0,0,2,0,90,5,1,1,1,760,NaN,NaN,NaN
6.0,0,3,0,90,5,1,1,1,760,NaN,NaN,NaN
6.0,0,4,0,90,5,1,1,1,760,NaN,NaN,NaN
6.0,0,5,0,90,5,1,1,1,760,NaN,NaN,NaN
6.0,0,6,0,90,5,1,1,1,760,NaN,NaN,NaN
6.0,0,8,0,90,5,1,1,1,760,NaN,NaN,NaN
6.0,0,10,0,90,5,1,1,1,760,NaN,NaN,NaN
6.0,0,15,0,90,5,1,1,1,760,NaN,NaN,NaN
6.0,0,20,0,90,5,1,1,1,760,NaN,NaN,NaN
6.0,0,30,0,90,5,1,1,1,760,NaN,NaN,NaN
6.0,0,40,0,90,5,1,1,1,760,NaN,NaN,NaN
6.0,0,50,0,90,5,1,1,1,760,NaN,NaN,NaN
6.0,0,60,0,90,5,1,1,1,760,NaN,NaN,NaN
6.0,0,80,0,90,5,1,1,1,760,NaN,NaN,NaN
6.0,0,100,0,90,5,1,1,1,760,NaN,NaN,NaN
6.0,0,150,0,90,5,1,1,1,760,NaN,NaN,NaN
6.0,0,200,0,90,5,1,1,1,760,NaN,NaN,NaN
6.0,0,300,0,90,5,1,1,1,760,NaN,NaN,NaN
6.0,0,500,0,90,5,1,1,1,760,NaN,NaN,NaN
7.0,0,2,0,90,5,1,1,1,760,NaN,NaN,NaN
7.0,0,3,0,90,5,1,1,1,760,NaN,NaN,NaN
7.0,0,4,0,90,5,1,1,1,760,NaN,NaN,NaN
7.0,0,5,0,90,5,1,1,1,760,NaN,NaN,NaN
7.0,0,6,0,90,5,1,1,1,760,NaN,NaN,NaN
7.0,0,8,0,90,5,1,1,1,760,NaN,NaN,NaN
7.0,0,10,0,90,5,1,1,1,760,NaN,NaN,NaN
7.0,0,15,0,90,5,1,1,1,760,NaN,NaN,NaN
7.0,0,20,0,90,5,1,1,1,760,NaN,NaN,NaN
7.0,0,30,0,90,5,1,1,1,760,NaN,NaN,NaN
7.0,0,40,0,90,5,1,1,1,760,NaN,NaN,NaN
7.0,0,50,0,90,5,1,1,1,760,NaN,NaN,NaN
7.0,0,60,0,90,5,1,1,1,760,NaN,NaN,NaN
7.0,0,80,0,90,5,1,1,1,760,NaN,NaN,NaN
7.0,0,100,0,90,5,1,1,1,760,NaN,NaN,NaN
7.0,0,150,0,90,5,1,1,1,760,NaN,NaN,NaN
7.0,0,200,0,90,5,1,1,1,760,NaN,NaN,NaN
7.0,0,300,0,90,5,1,1,1,760,NaN,NaN,NaN
7.0,0,500,0,90,5,1,1,1,760,NaN,NaN,NaN
5.0,0,100,0,90,5,1,1,1,365,NaN,NaN,NaN
5.0,0,100,0,90,5,1,1,1,1500,NaN,NaN,NaN
6.0,0,100,0,90,5,1,1,1,365,NaN,NaN,NaN
6.0,0,100,0,90,5,1,1,1,1500,NaN,NaN,NaN
7.0,0,100,0,90,5,1,1,1,365,NaN,NaN,NaN
7.0,0,100,0,90,5,1,1,1,1500,NaN,NaN,NaN
#
#4.0,0,5,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.0,0,5,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.0,0,5,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.0,0,5,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.0,0,6,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.0,0,6,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.0,0,6,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.0,0,6,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.0,0,8,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.0,0,8,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.0,0,8,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.0,0,8,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.0,0,10,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.0,0,10,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.0,0,10,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.0,0,10,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.0,0,15,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.0,0,15,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.0,0,15,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.0,0,15,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.0,0,20,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.0,0,20,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.0,0,20,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.0,0,20,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.0,0,30,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.0,0,30,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.0,0,30,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.0,0,30,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.0,0,40,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.0,0,40,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.0,0,40,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.0,0,40,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.0,0,50,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.0,0,50,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.0,0,50,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.0,0,50,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.0,0,60,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.0,0,60,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.0,0,60,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.0,0,60,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.0,0,80,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.0,0,80,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.0,0,80,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.0,0,80,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.0,0,100,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.0,0,100,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.0,0,100,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.0,0,100,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.7,0,5,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.7,0,5,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.7,0,5,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.7,0,5,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.7,0,6,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.7,0,6,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.7,0,6,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.7,0,6,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.7,0,8,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.7,0,8,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.7,0,8,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.7,0,8,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.7,0,10,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.7,0,10,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.7,0,10,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.7,0,10,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.7,0,15,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.7,0,15,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.7,0,15,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.7,0,15,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.7,0,20,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.7,0,20,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.7,0,20,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.7,0,20,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.7,0,30,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.7,0,30,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.7,0,30,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.7,0,30,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.7,0,40,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.7,0,40,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.7,0,40,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.7,0,40,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.7,0,50,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.7,0,50,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.7,0,50,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.7,0,50,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.7,0,60,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.7,0,60,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.7,0,60,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.7,0,60,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.7,0,80,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.7,0,80,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.7,0,80,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.7,0,80,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.7,0,100,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.7,0,100,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.7,0,100,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.7,0,100,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.8,0,5,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.8,0,5,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.8,0,5,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.8,0,5,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.8,0,6,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.8,0,6,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.8,0,6,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.8,0,6,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.8,0,8,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.8,0,8,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.8,0,8,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.8,0,8,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.8,0,10,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.8,0,10,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.8,0,10,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.8,0,10,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.8,0,15,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.8,0,15,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.8,0,15,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.8,0,15,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.8,0,20,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.8,0,20,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.8,0,20,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.8,0,20,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.8,0,30,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.8,0,30,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.8,0,30,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.8,0,30,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.8,0,40,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.8,0,40,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.8,0,40,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.8,0,40,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.8,0,50,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.8,0,50,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.8,0,50,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.8,0,50,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.8,0,60,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.8,0,60,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.8,0,60,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.8,0,60,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.8,0,80,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.8,0,80,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.8,0,80,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.8,0,80,0,90,5,1,1,1,760,NaN,NaN,NaN
#4.8,0,100,0,90,5,1,1,1,150,NaN,NaN,NaN
#4.8,0,100,0,90,5,1,1,1,250,NaN,NaN,NaN
#4.8,0,100,0,90,5,1,1,1,450,NaN,NaN,NaN
#4.8,0,100,0,90,5,1,1,1,760,NaN,NaN,NaN
#5.0,0,10,0,90,5,1,1,1,150,NaN,NaN,NaN
#5.0,0,10,0,90,5,1,1,1,250,NaN,NaN,NaN
#5.0,0,10,0,90,5,1,1,1,450,NaN,NaN,NaN
#5.0,0,10,0,90,5,1,1,1,760,NaN,NaN,NaN
#5.0,0,15,0,90,5,1,1,1,150,NaN,NaN,NaN
#5.0,0,15,0,90,5,1,1,1,250,NaN,NaN,NaN
#5.0,0,15,0,90,5,1,1,1,450,NaN,NaN,NaN
#5.0,0,15,0,90,5,1,1,1,760,NaN,NaN,NaN
#5.0,0,20,0,90,5,1,1,1,150,NaN,NaN,NaN
#5.0,0,20,0,90,5,1,1,1,250,NaN,NaN,NaN
#5.0,0,20,0,90,5,1,1,1,450,NaN,NaN,NaN
#5.0,0,20,0,90,5,1,1,1,760,NaN,NaN,NaN
#5.0,0,30,0,90,5,1,1,1,150,NaN,NaN,NaN
#5.0,0,30,0,90,5,1,1,1,250,NaN,NaN,NaN
#5.0,0,30,0,90,5,1,1,1,450,NaN,NaN,NaN
#5.0,0,30,0,90,5,1,1,1,760,NaN,NaN,NaN
#5.0,0,40,0,90,5,1,1,1,150,NaN,NaN,NaN
#5.0,0,40,0,90,5,1,1,1,250,NaN,NaN,NaN
#5.0,0,40,0,90,5,1,1,1,450,NaN,NaN,NaN
#5.0,0,40,0,90,5,1,1,1,760,NaN,NaN,NaN
#5.0,0,50,0,90,5,1,1,1,150,NaN,NaN,NaN
#5.0,0,50,0,90,5,1,1,1,250,NaN,NaN,NaN
#5.0,0,50,0,90,5,1,1,1,450,NaN,NaN,NaN
#5.0,0,50,0,90,5,1,1,1,760,NaN,NaN,NaN
#5.0,0,60,0,90,5,1,1,1,150,NaN,NaN,NaN
#5.0,0,60,0,90,5,1,1,1,250,NaN,NaN,NaN
#5.0,0,60,0,90,5,1,1,1,450,NaN,NaN,NaN
#5.0,0,60,0,90,5,1,1,1,760,NaN,NaN,NaN
#5.0,0,80,0,90,5,1,1,1,150,NaN,NaN,NaN
#5.0,0,80,0,90,5,1,1,1,250,NaN,NaN,NaN
#5.0,0,80,0,90,5,1,1,1,450,NaN,NaN,NaN
#5.0,0,80,0,90,5,1,1,1,760,NaN,NaN,NaN
#5.0,0,100,0,90,5,1,1,1,150,NaN,NaN,NaN
#5.0,0,100,0,90,5,1,1,1,250,NaN,NaN,NaN
#5.0,0,100,0,90,5,1,1,1,450,NaN,NaN,NaN
#5.0,0,100,0,90,5,1,1,1,760,NaN,NaN,NaN
#5.0,0,200,0,90,5,1,1,1,150,NaN,NaN,NaN
#5.0,0,200,0,90,5,1,1,1,250,NaN,NaN,NaN
#5.0,0,200,0,90,5,1,1,1,450,NaN,NaN,NaN
#5.0,0,200,0,90,5,1,1,1,760,NaN,NaN,NaN
#5.0,0,300,0,90,5,1,1,1,150,NaN,NaN,NaN
#5.0,0,300,0,90,5,1,1,1,250,NaN,NaN,NaN
#5.0,0,300,0,90,5,1,1,1,450,NaN,NaN,NaN
#5.0,0,300,0,90,5,1,1,1,760,NaN,NaN,NaN
#5.0,0,500,0,90,5,1,1,1,150,NaN,NaN,NaN
#5.0,0,500,0,90,5,1,1,1,250,NaN,NaN,NaN
#5.0,0,500,0,90,5,1,1,1,450,NaN,NaN,NaN
#5.0,0,500,0,90,5,1,1,1,760,NaN,NaN,NaN
#6.0,0,10,0,90,5,1,1,1,150,NaN,NaN,NaN
#6.0,0,10,0,90,5,1,1,1,250,NaN,NaN,NaN
#6.0,0,10,0,90,5,1,1,1,450,NaN,NaN,NaN
#6.0,0,10,0,90,5,1,1,1,760,NaN,NaN,NaN
#6.0,0,15,0,90,5,1,1,1,150,NaN,NaN,NaN
#6.0,0,15,0,90,5,1,1,1,250,NaN,NaN,NaN
#6.0,0,15,0,90,5,1,1,1,450,NaN,NaN,NaN
#6.0,0,15,0,90,5,1,1,1,760,NaN,NaN,NaN
#6.0,0,20,0,90,5,1,1,1,150,NaN,NaN,NaN
#6.0,0,20,0,90,5,1,1,1,250,NaN,NaN,NaN
#6.0,0,20,0,90,5,1,1,1,450,NaN,NaN,NaN
#6.0,0,20,0,90,5,1,1,1,760,NaN,NaN,NaN
#6.0,0,30,0,90,5,1,1,1,150,NaN,NaN,NaN
#6.0,0,30,0,90,5,1,1,1,250,NaN,NaN,NaN
#6.0,0,30,0,90,5,1,1,1,450,NaN,NaN,NaN
#6.0,0,30,0,90,5,1,1,1,760,NaN,NaN,NaN
#6.0,0,40,0,90,5,1,1,1,150,NaN,NaN,NaN
#6.0,0,40,0,90,5,1,1,1,250,NaN,NaN,NaN
#6.0,0,40,0,90,5,1,1,1,450,NaN,NaN,NaN
#6.0,0,40,0,90,5,1,1,1,760,NaN,NaN,NaN
#6.0,0,50,0,90,5,1,1,1,150,NaN,NaN,NaN
#6.0,0,50,0,90,5,1,1,1,250,NaN,NaN,NaN
#6.0,0,50,0,90,5,1,1,1,450,NaN,NaN,NaN
#6.0,0,50,0,90,5,1,1,1,760,NaN,NaN,NaN
#6.0,0,60,0,90,5,1,1,1,150,NaN,NaN,NaN
#6.0,0,60,0,90,5,1,1,1,250,NaN,NaN,NaN
#6.0,0,60,0,90,5,1,1,1,450,NaN,NaN,NaN
#6.0,0,60,0,90,5,1,1,1,760,NaN,NaN,NaN
#6.0,0,80,0,90,5,1,1,1,150,NaN,NaN,NaN
#6.0,0,80,0,90,5,1,1,1,250,NaN,NaN,NaN
#6.0,0,80,0,90,5,1,1,1,450,NaN,NaN,NaN
#6.0,0,80,0,90,5,1,1,1,760,NaN,NaN,NaN
#6.0,0,100,0,90,5,1,1,1,150,NaN,NaN,NaN
#6.0,0,100,0,90,5,1,1,1,250,NaN,NaN,NaN
#6.0,0,100,0,90,5,1,1,1,450,NaN,NaN,NaN
#6.0,0,100,0,90,5,1,1,1,760,NaN,NaN,NaN
#6.0,0,200,0,90,5,1,1,1,150,NaN,NaN,NaN
#6.0,0,200,0,90,5,1,1,1,250,NaN,NaN,NaN
#6.0,0,200,0,90,5,1,1,1,450,NaN,NaN,NaN
#6.0,0,200,0,90,5,1,1,1,760,NaN,NaN,NaN
#6.0,0,300,0,90,5,1,1,1,150,NaN,NaN,NaN
#6.0,0,300,0,90,5,1,1,1,250,NaN,NaN,NaN
#6.0,0,300,0,90,5,1,1,1,450,NaN,NaN,NaN
#6.0,0,300,0,90,5,1,1,1,760,NaN,NaN,NaN
#6.0,0,500,0,90,5,1,1,1,150,NaN,NaN,NaN
#6.0,0,500,0,90,5,1,1,1,250,NaN,NaN,NaN
#6.0,0,500,0,90,5,1,1,1,450,NaN,NaN,NaN
#6.0,0,500,0,90,5,1,1,1,760,NaN,NaN,NaN
This diff is collapsed.