14
14
15
15
16
16
import org .opensha .commons .calc .magScalingRelations .magScalingRelImpl .WC1994_MagLengthRelationship ;
17
+ import org .opensha .commons .eq .MagUtils ;
17
18
import org .opensha .commons .geo .LocationList ;
18
19
import org .opensha .commons .geo .json .Feature ;
19
20
import org .opensha .sha .earthquake .ProbEqkSource ;
@@ -302,7 +303,7 @@ public static ArrayList<FaultSystemSolution> getFaultSystemSolutionList(String n
302
303
HashMap <Integer , Double > rakeForSrcIdMap = new HashMap <Integer , Double >();
303
304
HashMap <Integer , String > nameForSrcIdMap = new HashMap <Integer , String >();
304
305
for (int id :srcIDsList ) {
305
- mfdForSrcIdMap .put (id , new SummedMagFreqDist ( 5.05 , 40 , 0.1 ));
306
+ mfdForSrcIdMap .put (id , getBlankMFD ( ));
306
307
}
307
308
for (int s =0 ;s <erf .getNumSources ();s ++) {
308
309
NshmSource src = (NshmSource )erf .getSource (s );
@@ -376,7 +377,7 @@ else if (altSrcWtmap.keySet().contains(srcID)) // keep and set rateWt
376
377
377
378
// test total MFD
378
379
Boolean testPassed = true ;
379
- SummedMagFreqDist fssTotalMFD = new SummedMagFreqDist ( 5.05 , 40 , 0.1 );
380
+ SummedMagFreqDist fssTotalMFD = getBlankMFD ( );
380
381
for (int rup =0 ;rup <fss_floater .getRupSet ().getNumRuptures ();rup ++) {
381
382
double rate = fss_floater .getRateForRup (rup );
382
383
double mag = fss_floater .getRupSet ().getMagForRup (rup );
@@ -500,28 +501,33 @@ else if (altSrcWtmap.keySet().contains(srcID)) // keep and set rateWt
500
501
if (D ) { // test participation mfds for each fault section
501
502
502
503
// for FSS:
503
- Boolean testPassed = true ;
504
- SummedMagFreqDist fssTotalMFD = new SummedMagFreqDist ( 5.05 , 40 , 0.1 );
504
+ double fssTotalMomentRate = 0 ;
505
+ SummedMagFreqDist fssTotalMFD = getBlankMFD ( );
505
506
HashMap <Integer , SummedMagFreqDist > sectMfdMapFSS = new HashMap <Integer , SummedMagFreqDist >();
506
507
for (int rup =0 ;rup <bigFSS .getRupSet ().getNumRuptures ();rup ++) {
507
508
double rate = bigFSS .getRateForRup (rup );
508
509
double mag = bigFSS .getRupSet ().getMagForRup (rup );
510
+ fssTotalMomentRate += MagUtils .magToMoment (mag )*rate ;
509
511
int iMag = fssTotalMFD .getClosestXIndex (mag );
510
512
List <Integer > sectsForRupList = bigFSS .getRupSet ().getSectionsIndicesForRup (rup );
511
513
for (int i :sectsForRupList ) {
512
514
if (!sectMfdMapFSS .keySet ().contains (i )) {
513
- sectMfdMapFSS .put (i , new SummedMagFreqDist ( 5.05 , 40 , 0.1 ));
515
+ sectMfdMapFSS .put (i , getBlankMFD ( ));
514
516
}
515
517
sectMfdMapFSS .get (i ).add (iMag , rate );
516
518
}
517
519
fssTotalMFD .add (iMag , rate );
518
520
}
519
521
520
522
// From ERF:
521
- SummedMagFreqDist erfTotalMFD = new SummedMagFreqDist (5.05 ,40 ,0.1 );
523
+ double fssTotalMomentRate2 = 0 ;
524
+ double origTotalMomentRate = 0 ;
525
+ double aveDeltaMag =0 ;
526
+ double numMag =0 ;
527
+ SummedMagFreqDist erfTotalMFD = getBlankMFD ();
522
528
HashMap <Integer , SummedMagFreqDist > sectMfdMapERF = new HashMap <Integer , SummedMagFreqDist >();
523
529
for (int id :newFltIndexMap .keySet ()) {
524
- sectMfdMapERF .put (id , new SummedMagFreqDist ( 5.05 , 40 , 0.1 ));
530
+ sectMfdMapERF .put (id , getBlankMFD ( ));
525
531
}
526
532
for (int s =0 ;s <erf .getNumSources ();s ++) {
527
533
NshmSource src = (NshmSource )erf .getSource (s );
@@ -537,12 +543,25 @@ else if (altSrcWtmap.keySet().contains(srcID)) // keep and set rateWt
537
543
int iMag = erfTotalMFD .getClosestXIndex (mag );
538
544
double rate = src .getRupture (r ).getProbability ()*srcRateWtMap .get (srcID ); // rate approx equal to prob
539
545
erfTotalMFD .add (iMag , rate ); // this requires the exact x value (no tolerance)
546
+ origTotalMomentRate += MagUtils .magToMoment (mag )*rate ;
547
+ fssTotalMomentRate2 += MagUtils .magToMoment (erfTotalMFD .getX (iMag ))*rate ;
548
+ aveDeltaMag += erfTotalMFD .getX (iMag )-mag ;
549
+ numMag += 1 ;
540
550
for (int sectID :srcFltSectsMap .get (srcID )) {
541
551
SummedMagFreqDist mfd = sectMfdMapERF .get (sectID );
542
552
mfd .add (iMag , rate );
543
553
}
544
554
}
545
555
}
556
+
557
+ // compare moments
558
+ double tempRatio = fssTotalMomentRate /origTotalMomentRate ;
559
+ double testRatio = fssTotalMomentRate /fssTotalMomentRate2 ;
560
+ aveDeltaMag /= numMag ;
561
+ if (D ) System .out .println ("FSS:\n \t fssTotalMomentRate=" +(float )fssTotalMomentRate +
562
+ "\n \t origTotalMomentRate=" +(float )origTotalMomentRate +"\n \t ratio=" +tempRatio +
563
+ "\n \t testRatio=" +(float )testRatio +"\n \t aveDeltaMag=" +(float )aveDeltaMag );
564
+
546
565
// compare
547
566
for (int i =0 ;i <fssTotalMFD .size ();i ++) {
548
567
double val1 = fssTotalMFD .getY (i );
@@ -611,8 +630,12 @@ private static FaultSystemSolution getFaultSystemSolution(double rateWt,
611
630
}
612
631
613
632
// now compute full rup vs floater MFDs
614
- SummedMagFreqDist mfd_full = new SummedMagFreqDist (5.05 ,40 ,0.1 );
615
- SummedMagFreqDist mfd_float = new SummedMagFreqDist (5.05 ,40 ,0.1 );
633
+ double origTotalMoment = 0 ;
634
+ double fssTotalMoment = 0 ;
635
+ double aveDeltaMag =0 ;
636
+ double numMag =0 ;
637
+ SummedMagFreqDist mfd_full = getBlankMFD ();
638
+ SummedMagFreqDist mfd_float = getBlankMFD ();
616
639
for (int s =0 ;s <erf .getNumSources ();s ++) {
617
640
NshmSource src = (NshmSource )erf .getSource (s );
618
641
if (src .getNSHM_ID () == faultSection .getSectionId ()) {
@@ -621,6 +644,10 @@ private static FaultSystemSolution getFaultSystemSolution(double rateWt,
621
644
int iMag = mfd_full .getClosestXIndex (mag );
622
645
double rate = src .getRupture (r ).getProbability (); // rate approx equal to prob
623
646
double rupArea = src .getRupture (r ).getRuptureSurface ().getArea ();
647
+ origTotalMoment += MagUtils .magToMoment (mag )*rate ;
648
+ fssTotalMoment += MagUtils .magToMoment (mfd_full .getX (iMag ))*rate ;
649
+ aveDeltaMag += mfd_full .getX (iMag )-mag ;
650
+ numMag +=1 ;
624
651
if (rupArea > 0.99 *fullRupArea ) {
625
652
mfd_full .add (iMag , rate *rateWt );
626
653
}
@@ -631,6 +658,11 @@ private static FaultSystemSolution getFaultSystemSolution(double rateWt,
631
658
632
659
}
633
660
}
661
+ aveDeltaMag /= numMag ;
662
+ double tempRatio = fssTotalMoment /origTotalMoment ;
663
+ if (D ) System .out .println ("FSS:\n \t fssTotalMoment=" +(float )fssTotalMoment +
664
+ "\n \t origTotalMoment=" +(float )origTotalMoment +"\n \t ratio=" +tempRatio +
665
+ "\n |taveDeltaMag=" +(float )aveDeltaMag );
634
666
635
667
List <List <Integer >> sectionForRups = new ArrayList <>();
636
668
ArrayList <Double > magForRupList =new ArrayList <Double >();
@@ -976,6 +1008,10 @@ private static void getSrcIDsAndFaultSectionsLists(HashMap<Integer,int[]> srcFlt
976
1008
parseClusterSetFile (nshmModelDirPath +"stable-crust/fault/MO/New Madrid/usgs/west/cluster-in/all/cluster-set.json" , srcFltSectsMap );
977
1009
parseClusterSetFile (nshmModelDirPath +"stable-crust/fault/MO/New Madrid/usgs/west/cluster-in/center-south/cluster-set.json" , srcFltSectsMap );
978
1010
}
1011
+
1012
+ private static SummedMagFreqDist getBlankMFD () {
1013
+ return new SummedMagFreqDist (5.05 ,80 ,0.05 );
1014
+ }
979
1015
980
1016
981
1017
public static void main (String [] args ) {
0 commit comments