Skip to content

Commit 56bc1a1

Browse files
authored
[481] Joint Rupture Set Pipeline (#482)
1 parent 2d9a986 commit 56bc1a1

7 files changed

Lines changed: 145 additions & 45 deletions

File tree

src/main/java/nz/cri/gns/NZSHM22/opensha/inversion/joint/InversionRunner.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public static void main(String[] args) throws IOException, DocumentException {
5757

5858
// InversionRunner runner = new InversionRunner("crustal-reproducible.json");
5959
FaultSystemSolution solution = runner.run();
60-
solution.write(new File("/work/inversionSolution.zip"));
60+
solution.write(new File("/tmp/inversionSolution.zip"));
6161

6262
System.out.println(TraceTool.getTraces());
6363
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package nz.cri.gns.NZSHM22.opensha.ruptures.experimental;
2+
3+
import java.io.File;
4+
import java.io.IOException;
5+
import java.nio.file.Files;
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
import nz.cri.gns.NZSHM22.opensha.scripts.RupSetPropertyBackfill;
9+
import org.dom4j.DocumentException;
10+
import org.opensha.sha.earthquake.faultSysSolution.FaultSystemRupSet;
11+
import org.opensha.sha.earthquake.faultSysSolution.ruptures.multiRupture.RuptureMerger;
12+
13+
/** Joint Rupture Builder */
14+
public class Builder {
15+
16+
public static File makeTempFile(FaultSystemRupSet rupSet) throws IOException {
17+
File tempFile = Files.createTempFile("rupset", ".zip").toFile();
18+
rupSet.write(tempFile);
19+
return tempFile;
20+
}
21+
22+
/**
23+
* Takes a list of NZSHM22-style rupture sets and creates a joint rupture set. - backfills
24+
* properties if input sets are old - accumulates the sets into a single rupture set - applies
25+
* thinning (i.e. creates a thinning file for RuptureMerger) - calls RuptureMerger to create a
26+
* joint rupture set
27+
*
28+
* @param ruptureSets a list of rupture sets
29+
* @param backfill whether to backfill properties on the input rupture sets
30+
* @throws IOException
31+
* @throws DocumentException
32+
*/
33+
public static void buildJointRuptures(List<String> ruptureSets, boolean backfill)
34+
throws IOException, DocumentException {
35+
List<FaultSystemRupSet> rupSets = new ArrayList<>();
36+
for (String fileName : ruptureSets) {
37+
if (backfill) {
38+
rupSets.add(RupSetPropertyBackfill.backfill(fileName));
39+
} else {
40+
rupSets.add(FaultSystemRupSet.load(new File(fileName)));
41+
}
42+
}
43+
44+
FaultSystemRupSet accumulated = new RuptureAccumulator().addRupSets(rupSets).build();
45+
46+
File accumulatedFile = makeTempFile(accumulated);
47+
48+
Thinning.Config thinningConfig = new Thinning.Config();
49+
thinningConfig.ruptureSetFileName = accumulatedFile.getAbsolutePath();
50+
thinningConfig.outputFileName = Files.createTempFile("thinning", ".csv").toString();
51+
52+
Thinning.apply(thinningConfig);
53+
54+
RuptureMerger.Config ruptureMergerConfig = new RuptureMerger.Config();
55+
ruptureMergerConfig.ruptureSet = new File(thinningConfig.ruptureSetFileName);
56+
ruptureMergerConfig.filterFile = new File(thinningConfig.outputFileName);
57+
RuptureMerger.merge(ruptureMergerConfig);
58+
}
59+
}

src/main/java/nz/cri/gns/NZSHM22/opensha/ruptures/experimental/RuptureAccumulator.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,11 @@ public RuptureAccumulator add(FaultSystemRupSet rupSet) {
139139
return this;
140140
}
141141

142+
public RuptureAccumulator addRupSets(Collection<FaultSystemRupSet> rupSets) {
143+
rupSets.forEach(this::add);
144+
return this;
145+
}
146+
142147
static double[] toDoubleArray(List<Double> values) {
143148
double[] result = new double[values.size()];
144149
for (int i = 0; i < result.length; i++) {
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package nz.cri.gns.NZSHM22.opensha.ruptures.experimental;
2+
3+
import java.io.BufferedWriter;
4+
import java.io.File;
5+
import java.io.FileWriter;
6+
import java.io.IOException;
7+
import java.util.List;
8+
import org.opensha.sha.earthquake.faultSysSolution.FaultSystemRupSet;
9+
10+
/** Orchestrates thinning of crustal and subduction rupture sets as inputs for RuptureMerger */
11+
public class Thinning {
12+
13+
public static class Config {
14+
public String ruptureSetFileName;
15+
public String outputFileName;
16+
public boolean hikurangiPosition = true;
17+
public Double hikurangiSize = 0.1;
18+
public boolean puysegurPosition = true;
19+
public Double puysegurSize = 0.1;
20+
}
21+
22+
public static void apply(Config config) throws IOException {
23+
FaultSystemRupSet rupSet = FaultSystemRupSet.load(new File(config.ruptureSetFileName));
24+
25+
List<Integer> crustalIds = ThinningCrustal.filterCrustal(rupSet);
26+
27+
System.out.println("crustal after thinning " + crustalIds.size());
28+
29+
ThinningSubduction hikurangiThinning =
30+
new ThinningSubduction(rupSet, s -> s.startsWith("Hikurangi"));
31+
if (config.hikurangiPosition) {
32+
hikurangiThinning.filterByPosition();
33+
}
34+
if (config.hikurangiSize != null) {
35+
hikurangiThinning.filterBySize(config.hikurangiSize);
36+
}
37+
38+
System.out.println("hikurangi after thinning " + hikurangiThinning.getRuptures().size());
39+
40+
ThinningSubduction puysegurThinning =
41+
new ThinningSubduction(rupSet, s -> s.startsWith("Puysegur"));
42+
if (config.puysegurPosition) {
43+
puysegurThinning.filterByPosition();
44+
}
45+
if (config.puysegurSize != null) {
46+
puysegurThinning.filterBySize(config.puysegurSize);
47+
}
48+
49+
System.out.println("puysegur after thinning " + puysegurThinning.getRuptures().size());
50+
51+
BufferedWriter writer = new BufferedWriter(new FileWriter(config.outputFileName));
52+
for (Integer r : crustalIds) {
53+
writer.write("" + r);
54+
writer.newLine();
55+
}
56+
for (Integer r : hikurangiThinning.getIds()) {
57+
writer.write("" + r);
58+
writer.newLine();
59+
}
60+
for (Integer r : puysegurThinning.getIds()) {
61+
writer.write("" + r);
62+
writer.newLine();
63+
}
64+
writer.close();
65+
}
66+
67+
public static void main(String[] args) throws IOException {
68+
Config config = new Config();
69+
config.ruptureSetFileName = "C:\\Users\\volkertj\\Code\\ruptureSets\\nzshm22_merged.zip";
70+
config.outputFileName = "/tmp/filteredRuptures.txt";
71+
Thinning.apply(config);
72+
}
73+
}

src/main/java/nz/cri/gns/NZSHM22/opensha/ruptures/experimental/ThinningSubduction.java

Lines changed: 0 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
package nz.cri.gns.NZSHM22.opensha.ruptures.experimental;
22

33
import com.google.common.base.Preconditions;
4-
import java.io.BufferedWriter;
5-
import java.io.File;
6-
import java.io.FileWriter;
7-
import java.io.IOException;
84
import java.util.*;
95
import java.util.function.Predicate;
106
import java.util.regex.Matcher;
@@ -133,41 +129,4 @@ int getIndex() {
133129
return ruptureIndices.get(rupture);
134130
}
135131
}
136-
137-
public static void main(String[] args) throws IOException {
138-
FaultSystemRupSet combined =
139-
FaultSystemRupSet.load(
140-
new File("C:\\Users\\volkertj\\Code\\ruptureSets\\nzshm22_merged.zip"));
141-
142-
List<Integer> crustalIds = ThinningCrustal.filterCrustal(combined);
143-
144-
ThinningSubduction hikurangiThinning =
145-
new ThinningSubduction(combined, s -> s.startsWith("Hikurangi"));
146-
hikurangiThinning.filterByPosition();
147-
hikurangiThinning.filterBySize(0.1);
148-
149-
System.out.println("hikurangi after thinning " + hikurangiThinning.getRuptures().size());
150-
151-
ThinningSubduction puysegurThinning =
152-
new ThinningSubduction(combined, s -> s.startsWith("Puysegur"));
153-
puysegurThinning.filterByPosition();
154-
puysegurThinning.filterBySize(0.1);
155-
156-
System.out.println("puysegur after thinning " + puysegurThinning.getRuptures().size());
157-
158-
BufferedWriter writer = new BufferedWriter(new FileWriter("/tmp/filteredRuptures.txt"));
159-
for (Integer r : crustalIds) {
160-
writer.write("" + r);
161-
writer.newLine();
162-
}
163-
for (Integer r : hikurangiThinning.getIds()) {
164-
writer.write("" + r);
165-
writer.newLine();
166-
}
167-
for (Integer r : puysegurThinning.getIds()) {
168-
writer.write("" + r);
169-
writer.newLine();
170-
}
171-
writer.close();
172-
}
173132
}

src/main/java/nz/cri/gns/NZSHM22/opensha/scripts/RupSetPropertyBackfill.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,12 @@ public class RupSetPropertyBackfill {
3535
@SuppressWarnings("unchecked")
3636
public static FaultSystemRupSet backfill(String archiveFileName)
3737
throws IOException, DocumentException {
38-
3938
FaultSystemRupSet rupSet = FaultSystemRupSet.load(new File(archiveFileName));
39+
return backfill(rupSet);
40+
}
41+
42+
public static FaultSystemRupSet backfill(FaultSystemRupSet rupSet)
43+
throws IOException, DocumentException {
4044

4145
// Try to get fault model from logic tree branch for crustal lookups
4246
NZSHM22_LogicTreeBranch branch = rupSet.getModule(NZSHM22_LogicTreeBranch.class);

src/main/resources/parameters/NZSHM_config-parallel.jsonc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
{
2-
"ruptureSetPath": "C:\\runs\\NZSHM22_rupsets\\nzshm22_merged.zip",
2+
"ruptureSetPath": "C:\\runs\\run_4\\mergedRupset_15km_cffPatch2km_cff0SelfStiffness.zip",
33
// "ruptureSetPath": "C:\\runs\\run_1\\rupset\\mergedRupset_15km_cffPatch2km_cff0SelfStiffness.zip",
44
// "ruptureSetPath": "C:\\Users\\volkertj\\Code\\ruptureSets\\mergedRupset_5km_cffPatch2km_cff0SelfStiffness.zipprops2.zip",
55
// "ruptureSetPath": "C:\\Users\\volkertj\\Code\\ruptureSets\\NZSHM22_RuptureSet-UnVwdHVyZUdlbmVyYXRpb25UYXNrOjEwMDAzOA==.zipprops2.zip",
66
//"ruptureSetPath": "C:\\Users\\volkertj\\Code\\ruptureSets\\RupSet_Sub_FM(SBD_0_3_HKR_LR_30)_mnSbS(2)_mnSSPP(2)_mxSSL(0.5)_ddAsRa(2.0,5.0,5)_ddMnFl(0.1)_ddPsCo(0.0)_ddSzCo(0.0)_thFc(0.0).zipprops2.zip",
77
"annealing": {
8-
"inversionSecs": 60,
8+
"inversionSecs": 3600,
99
"selectionInterval": 10,
1010
"inversionAveragingIntervalSecs": 10,
1111
"inversionNumSolutionAverages": 4,

0 commit comments

Comments
 (0)