Skip to content

Commit 95c0984

Browse files
committed
Updated srf2stoch to handle mrf files
1 parent 20cd0b3 commit 95c0984

File tree

3 files changed

+133
-43
lines changed

3 files changed

+133
-43
lines changed

bbp/src/gp/StandRupFormat/srf2stoch.c

Lines changed: 69 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ char string[1024];
2424
struct standrupformat srf;
2525
int inbin = 0;
2626

27+
struct srf_apointvalues *apval_ptr;
28+
double dmom, dmu, darea, dslip;
29+
float dd;
30+
int mrf_flag = 0;
31+
2732
float target_dx = -1.0;
2833
float target_dy = -1.0;
2934

@@ -58,6 +63,10 @@ if(avgstk > -1.0e+14)
5863

5964
read_srf(&srf,infile,inbin);
6065

66+
mrf_flag = 0;
67+
if(strcmp(srf.src_format,"MOMENT") == 0)
68+
mrf_flag = 1;
69+
6170
if(strcmp(outfile,"stdout") == 0)
6271
fpw = stdout;
6372
else
@@ -73,6 +82,7 @@ sp = NULL;
7382
tr = NULL;
7483
ti = NULL;
7584

85+
apval_ptr = srf.srf_apnts.apntvals;
7686
noff = 0;
7787
for(i=0;i<srf.srf_prect.nseg;i++)
7888
{
@@ -158,40 +168,76 @@ fprintf(stderr,"id= %d is= %d kp= %d noff= %d\n",id,is,kp,noff);
158168
*/
159169

160170
tt = srf.srf_apnts.apntvals[kp].tinit;
161-
s1 = srf.srf_apnts.apntvals[kp].slip1;
162-
s2 = srf.srf_apnts.apntvals[kp].slip2;
163171

164-
rake = srf.srf_apnts.apntvals[kp].rake;
172+
if(mrf_flag == 1)
173+
{
174+
dmu = (apval_ptr[kp].vs)*(apval_ptr[kp].vs)*(apval_ptr[kp].den);
175+
darea = 1.0*((double)(apval_ptr[kp].area));
165176

166-
cosA = cos(rake*RPERD);
167-
sinA = sin(rake*RPERD);
177+
dmom = sqrt(0.5*apval_ptr[kp].mnn*apval_ptr[kp].mnn
178+
+ 0.5*apval_ptr[kp].mee*apval_ptr[kp].mee
179+
+ 0.5*apval_ptr[kp].mdd*apval_ptr[kp].mdd
180+
+ apval_ptr[kp].mne*apval_ptr[kp].mne
181+
+ apval_ptr[kp].mnd*apval_ptr[kp].mnd
182+
+ apval_ptr[kp].med*apval_ptr[kp].med);
168183

169-
xx = -s2*sinA + s1*cosA;
170-
yy = s2*cosA + s1*sinA;
184+
dslip = dmom/(dmu*darea);
185+
ss = dslip;
171186

172-
ss = sqrt(xx*xx + yy*yy);
187+
/* make a guess on rake based on fault dip */
173188

174-
rr = 90;
175-
if(yy < 0.0)
176-
rr = 270;
189+
dd = apval_ptr[kp].dip;
190+
while(dd < 0.0)
191+
dd = dd + 180.0;
192+
while(dd > 90.0)
193+
dd = 180.0 - dd;
177194

178-
if(xx != 0.0)
179-
{
180-
rr = DPERR*atan(yy/xx);
181-
if(xx < 0.0)
182-
rr = rr + 180;
195+
if(dd <= 45.0)
196+
rr = 90.0;
197+
else
198+
rr = 2.0*(dd-45.0) + 90.0;
199+
200+
tl = (srf.srf_apnts.apntvals[kp].dt)*(srf.srf_apnts.apntvals[kp].ntmr);
183201
}
202+
else
203+
{
204+
s1 = srf.srf_apnts.apntvals[kp].slip1;
205+
s2 = srf.srf_apnts.apntvals[kp].slip2;
206+
207+
rake = srf.srf_apnts.apntvals[kp].rake;
208+
209+
cosA = cos(rake*RPERD);
210+
sinA = sin(rake*RPERD);
184211

185-
while(rr < 0.0)
186-
rr = rr + 360.0;
187-
while(rr > 360.0)
188-
rr = rr - 360.0;
212+
xx = -s2*sinA + s1*cosA;
213+
yy = s2*cosA + s1*sinA;
214+
215+
ss = sqrt(xx*xx + yy*yy);
216+
217+
rr = 90;
218+
if(yy < 0.0)
219+
rr = 270;
220+
221+
if(xx != 0.0)
222+
{
223+
rr = DPERR*atan(yy/xx);
224+
if(xx < 0.0)
225+
rr = rr + 180;
226+
}
227+
228+
while(rr < 0.0)
229+
rr = rr + 360.0;
230+
while(rr > 360.0)
231+
rr = rr - 360.0;
232+
233+
tl = (srf.srf_apnts.apntvals[kp].dt)*(srf.srf_apnts.apntvals[kp].nt1);
234+
if(srf.srf_apnts.apntvals[kp].nt2 > srf.srf_apnts.apntvals[kp].nt1)
235+
tl = (srf.srf_apnts.apntvals[kp].dt)*(srf.srf_apnts.apntvals[kp].nt2);
236+
}
189237

190-
tl = (srf.srf_apnts.apntvals[kp].dt)*(srf.srf_apnts.apntvals[kp].nt1);
191-
if(srf.srf_apnts.apntvals[kp].nt2 > srf.srf_apnts.apntvals[kp].nt1)
192-
tl = (srf.srf_apnts.apntvals[kp].dt)*(srf.srf_apnts.apntvals[kp].nt2);
193238
if(tl < 0.0)
194239
tl = 0.0;
240+
195241
for(k=0;k<nydiv;k++)
196242
{
197243
for(j=0;j<nxdiv;j++)

bbp/src/gp/StandRupFormat/srf2stoch_sub.c

Lines changed: 63 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ int nx, ny, nxdiv, nydiv, nxsum, nysum;
2121
float shypo, dhypo, elon, elat, fac;
2222
char string[1024];
2323

24+
struct srf_apointvalues *apval_ptr;
25+
double dmom, dmu, darea, dslip;
26+
float dd;
27+
int mrf_flag = 0;
28+
2429
float target_dx = -1.0;
2530
float target_dy = -1.0;
2631

@@ -49,6 +54,9 @@ if(avgstk > -1.0e+14)
4954
avgstk = avgstk + 360.0;
5055
}
5156

57+
mrf_flag = 0;
58+
if(strcmp(srf->src_format,"MOMENT") == 0)
59+
mrf_flag = 1;
5260

5361
slip = NULL;
5462
trise = NULL;
@@ -150,6 +158,7 @@ for(i=0;i<srf->srf_prect.nseg;i++)
150158
tr = (float *) check_realloc (tr,nx*ny*sizeof(float));
151159
ti = (float *) check_realloc (ti,nx*ny*sizeof(float));
152160

161+
apval_ptr = srf->srf_apnts.apntvals;
153162
savg = 0.0;
154163
ravg = 0.0;
155164
for(id=0;id<ndip;id++)
@@ -163,34 +172,68 @@ fprintf(stderr,"id= %d is= %d kp= %d noff= %d\n",id,is,kp,noff);
163172
*/
164173

165174
tt = srf->srf_apnts.apntvals[kp].tinit;
166-
s1 = srf->srf_apnts.apntvals[kp].slip1;
167-
s2 = srf->srf_apnts.apntvals[kp].slip2;
168175

169-
rake = srf->srf_apnts.apntvals[kp].rake;
176+
if(mrf_flag == 1)
177+
{
178+
dmu = (apval_ptr[kp].vs)*(apval_ptr[kp].vs)*(apval_ptr[kp].den);
179+
darea = 1.0*((double)(apval_ptr[kp].area));
180+
181+
dmom = sqrt(0.5*apval_ptr[kp].mnn*apval_ptr[kp].mnn
182+
+ 0.5*apval_ptr[kp].mee*apval_ptr[kp].mee
183+
+ 0.5*apval_ptr[kp].mdd*apval_ptr[kp].mdd
184+
+ apval_ptr[kp].mne*apval_ptr[kp].mne
185+
+ apval_ptr[kp].mnd*apval_ptr[kp].mnd
186+
+ apval_ptr[kp].med*apval_ptr[kp].med);
170187

171-
cosA = cos(rake*RPERD);
172-
sinA = sin(rake*RPERD);
188+
dslip = dmom/(dmu*darea);
189+
ss = dslip;
173190

174-
xx = -s2*sinA + s1*cosA;
175-
yy = s2*cosA + s1*sinA;
191+
/* make a guess on rake based on fault dip */
176192

177-
ss = sqrt(xx*xx + yy*yy);
193+
dd = apval_ptr[kp].dip;
194+
while(dd < 0.0)
195+
dd = dd + 180.0;
196+
while(dd > 90.0)
197+
dd = 180.0 - dd;
178198

179-
rr = 90;
180-
if(yy < 0.0)
181-
rr = 270;
199+
if(dd <= 45.0)
200+
rr = 90.0;
201+
else
202+
rr = 2.0*(dd-45.0) + 90.0;
182203

183-
if(xx != 0.0)
184-
{
185-
rr = DPERR*atan(yy/xx);
186-
if(xx < 0.0)
187-
rr = rr + 180;
204+
tl = (srf->srf_apnts.apntvals[kp].dt)*(srf->srf_apnts.apntvals[kp].ntmr);
188205
}
206+
else
207+
{
208+
s1 = srf->srf_apnts.apntvals[kp].slip1;
209+
s2 = srf->srf_apnts.apntvals[kp].slip2;
210+
211+
rake = srf->srf_apnts.apntvals[kp].rake;
189212

190-
while(rr < 0.0)
191-
rr = rr + 360.0;
192-
while(rr > 360.0)
193-
rr = rr - 360.0;
213+
cosA = cos(rake*RPERD);
214+
sinA = sin(rake*RPERD);
215+
216+
xx = -s2*sinA + s1*cosA;
217+
yy = s2*cosA + s1*sinA;
218+
219+
ss = sqrt(xx*xx + yy*yy);
220+
221+
rr = 90;
222+
if(yy < 0.0)
223+
rr = 270;
224+
225+
if(xx != 0.0)
226+
{
227+
rr = DPERR*atan(yy/xx);
228+
if(xx < 0.0)
229+
rr = rr + 180;
230+
}
231+
232+
while(rr < 0.0)
233+
rr = rr + 360.0;
234+
while(rr > 360.0)
235+
rr = rr - 360.0;
236+
}
194237

195238
tl = (srf->srf_apnts.apntvals[kp].dt)*(srf->srf_apnts.apntvals[kp].nt1);
196239
if(srf->srf_apnts.apntvals[kp].nt2 > srf->srf_apnts.apntvals[kp].nt1)

bbp/src/gp/StandRupFormat/srf_subs.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2039,6 +2039,7 @@ for(i=0;i<mrf[0].srf_apnts.np;i++)
20392039
apval_out[i].dt = apval_in[i].dt;
20402040
apval_out[i].vp = apval_in[i].vp;
20412041
apval_out[i].vs = apval_in[i].vs;
2042+
apval_out[i].den = apval_in[i].den;
20422043

20432044
apval_out[i].stk = apval_in[i].stk;
20442045
apval_out[i].dip = apval_in[i].dip;

0 commit comments

Comments
 (0)