1- #!/usr/bin/env python
1+ #!/usr/bin/env python3
22"""
33BSD 3-Clause License
44
5- Copyright (c) 2021 , University of Southern California
5+ Copyright (c) 2025 , University of Southern California
66All rights reserved.
77
88Redistribution and use in source and binary forms, with or without
@@ -57,7 +57,7 @@ class Genslip(object):
5757
5858 def __init__ (self , i_r_velmodel , i_r_srcfile ,
5959 o_r_srffile , i_vmodel_name , sim_id = 0 ,
60- ** kwargs ):
60+ output_mrf = False , ** kwargs ):
6161 """
6262 Initialize class variables
6363 """
@@ -75,6 +75,9 @@ def __init__(self, i_r_velmodel, i_r_srcfile,
7575 self .slip_sigma = None
7676 self .range_fwidth_frac = None
7777 self .r_srcfiles = []
78+ self .output_mrf = output_mrf
79+ self .ncoarsestk = None
80+ self .ncoarsedip = None
7881
7982 # Get all src files that were passed to us
8083 if kwargs is not None and len (kwargs ) > 0 :
@@ -260,7 +263,7 @@ def run(self):
260263 a_fault_seg_in = os .path .join (a_tmpdir , "fault_seg.in" )
261264 a_gsftmp = os .path .join (a_tmpdir , r_gsftmp )
262265
263- r_outroot = "m%.2f-%.2fx%.2f_s%d-v5.4.1 " % (cfg .CFGDICT [0 ]["magnitude" ],
266+ r_outroot = "m%.2f-%.2fx%.2f_s%d-v5.5.2 " % (cfg .CFGDICT [0 ]["magnitude" ],
264267 cfg .CFGDICT [0 ]["dlen" ],
265268 cfg .CFGDICT [0 ]["dwid" ],
266269 cfg .CFGDICT [0 ]["seed" ])
@@ -333,6 +336,37 @@ def run(self):
333336 "> %s 2>> %s" % (a_srffile , self .log ))
334337 bband_utils .runprog (progstring )
335338
339+ # Start with default values
340+ self .ncoarsestk = int (cfg .NCOARSESTK )
341+ self .ncoarsedip = int (cfg .NCOARSEDIP )
342+
343+ # Check if user wants to use the srf_downsample feature
344+ if 'ncoarsestk' in cfg .CFGDICT [0 ]:
345+ self .ncoarsestk = int (cfg .CFGDICT [0 ]["ncoarsestk" ])
346+ if 'ncoarsedip' in cfg .CFGDICT [0 ]:
347+ self .ncoarsedip = int (cfg .CFGDICT [0 ]["ncoarsedip" ])
348+
349+ if self .ncoarsestk != 1 or self .ncoarsedip != 1 :
350+ # Run downsampler if ncoarsestk/ncoarsedip != 1
351+ print ("Downsampling the SRF file..." )
352+ print ("ncoarsestk = %d, ncoarsedip = %d" %
353+ (self .ncoarsestk , self .ncoarsedip ))
354+ srf_downsample_bin = os .path .join (install .A_GP_BIN_DIR ,
355+ "srf_downsample" )
356+ b_srffile = os .path .join (a_indir , "%s_dsmp%dx%d.srf" %
357+ (r_outroot , self .ncoarsestk ,
358+ self .ncoarsedip ))
359+ progstring = ("%s ncoarsestk=%d ncoarsedip=%d < %s > %s 2>> %s\n " %
360+ (srf_downsample_bin , self .ncoarsestk ,
361+ self .ncoarsedip , a_srffile , b_srffile ,
362+ self .log ))
363+ bband_utils .runprog (progstring )
364+ # From now on, switch to use our newly created b_srffile,
365+ # note that both original srf file from genslip and the
366+ # downsampled srf file from the downsampler are saved
367+ # in the indata folder
368+ a_srffile = b_srffile
369+
336370 #
337371 # mv result to outputfile
338372 #
@@ -343,6 +377,25 @@ def run(self):
343377 progstring = "cp %s %s" % (a_srffile , os .path .join (a_outdir , self .r_srffile ))
344378 bband_utils .runprog (progstring )
345379
380+ # Generate MRF file if needed
381+ if self .output_mrf :
382+ src_base = os .path .basename (self .r_srcfile )
383+ r_mrf_file = "%s.mrf" % (src_base [0 :src_base .rfind ('.' )])
384+ a_mrf_file = os .path .join (a_indir , r_mrf_file )
385+ srf2mrf_bin = os .path .join (install .A_GP_BIN_DIR , "srf2mrf" )
386+ progstring = ("%s velfile=%s < %s > %s 2>> %s\n " %
387+ (srf2mrf_bin , a_velfile ,
388+ a_srffile , a_mrf_file , self .log ))
389+ bband_utils .runprog (progstring )
390+
391+ # Copy MRF file to outdata and tmpdata
392+ progstring = "cp %s %s" % (a_mrf_file ,
393+ os .path .join (a_tmpdir , r_mrf_file ))
394+ bband_utils .runprog (progstring )
395+ progstring = "cp %s %s" % (a_mrf_file ,
396+ os .path .join (a_outdir , r_mrf_file ))
397+ bband_utils .runprog (progstring )
398+
346399 # Plot SRF
347400 plot_srf .run (self .r_srffile , sim_id = self .sim_id )
348401
0 commit comments