2
########################################################
4
# Copyright (c) 2003-2010 by University of Queensland
5
# Earth Systems Science Computational Center (ESSCC)
6
# http://www.uq.edu.au/esscc
8
# Primary Business: Queensland, Australia
9
# Licensed under the Open Software License version 3.0
10
# http://www.opensource.org/licenses/osl-3.0.php
12
########################################################
14
__copyright__="""Copyright (c) 2003-2010 by University of Queensland
15
Earth Systems Science Computational Center (ESSCC)
16
http://www.uq.edu.au/esscc
17
Primary Business: Queensland, Australia"""
18
__license__="""Licensed under the Open Software License version 3.0
19
http://www.opensource.org/licenses/osl-3.0.php"""
20
__url__="https://launchpad.net/escript-finley"
24
generates dudley mesh simple vertical fault
26
THIS CODE CREATES RICH CONTACT ELEMENTS AND RICH FACE ELEMENTS
27
with fix for contact elements at FAULT ENDS
29
:var __author__: name of author
30
:var __copyright__: copyrights
31
:var __license__: licence agreement
32
:var __url__: url entry point on documentation
33
:var __version__: version
34
:var __date__: date of the version
37
__author__="Louise Kettle"
39
from esys.escript import *
40
from numpy import zeros,float64,array,size
42
#... generate domain ...
46
fstart=array([width/2.,7.*width/16.,3.*height/8.])
47
fend=array([width/2.,9.*width/16.,5.*height/8.])
49
def faultL(l0,l1, l2,ne0, ne1, ne2,contact=False,xstart=zeros(3),xend=zeros(3)):
50
meshfaultL=open('meshfault3D.fly','w')
52
FaultError1="ERROR: fault defined on or too close to an outer surface"
53
FaultError2="ERROR: the mesh is too coarse for fault"
58
if (N0<=N1 and N0<=N2):
73
elif (N1<=N2 and N1<=N0):
106
Element_Num=ne0*ne1*ne2
111
# define double (contact element) nodes on interior of fault
112
i0start=round(xstart[0]*ne0/l0)
113
i1start=round(xstart[1]*ne1/l1)
114
i2start=round(xstart[2]*ne2/l2)
115
i0end=round(xend[0]*ne0/l0)
116
i1end=round(xend[1]*ne1/l1)
117
i2end=round(xend[2]*ne2/l2)
118
n0double=int(i0end)-int(i0start)
119
n1double=int(i1end)-int(i1start)
120
n2double=int(i2end)-int(i2start)
121
if (i0start == 0) or (i1start==0) or (i2start==0):
124
if (i0end == ne0) or (i1end==ne1) or (i2end==ne2):
128
numNodes=N0*N1*N2+(n1double-1)*(n2double-1)
131
numNodes=N0*N1*N2+(n0double-1)*(n2double-1)
134
numNodes=N0*N1*N2+(n0double-1)*(n1double-1)
136
# define nodes for normal elements
137
# there are N0*N1*N2 normal nodes
139
Node=zeros([3,numNodes],float64)
140
Node_ref=zeros(numNodes,float64)
141
Node_DOF=zeros(numNodes,float64)
142
Node_tag=zeros(numNodes,float64)
144
meshfaultL.write("KettleFault\n")
146
meshfaultL.write("%dD-nodes %d\n"%(dim,numNodes))
149
for i1 in range (N1):
151
k= i0 + N0*i1 + N0*N1*i2 # M0*i0+M1*i1+M2*i2;
152
Node_ref[k]= i0 + N0*i1 + N0*N1*i2
153
# no periodic boundary conditions
154
Node_DOF[k]=Node_ref[k]
156
Node[0][k]=(i0)*l0/(N0-1)
157
Node[1][k]=(i1)*l1/(N1-1)
158
Node[2][k]=(i2)*l2/(N2-1)
160
# define double nodes on fault (will have same coordinates as some of nodes already defined)
161
# only get double nodes on INTERIOR of fault
166
if(n1double<=n2double):
173
for i2 in range(n2double-1):
174
for i1 in range(n1double-1):
176
k=Fault_NE+i1+(n1double-1)*i2
177
Node_ref[k]= k #Fault_NE + i1 + (n1double-1)*i2
178
Node_DOF[k]=Node_ref[k]
180
Node[0][k]=i0start*l0/ne0
181
Node[1][k]=i1start*l1/ne1 + (i1+1)*l1/ne1
182
Node[2][k]=i2start*l2/ne2 + (i2+1)*l2/ne2
185
print "fstart = ",[i0start*l0/ne0, i1start*l1/ne1 , i2start*l2/ne2]
186
print "fend = ", [i0start*l0/ne0 , i1start*l1/ne1 + n1double*l1/ne1, i2start*l2/ne2 + n2double*l2/ne2]
188
# write nodes to file
189
for i in range(numNodes):
190
meshfaultL.write("%d %d %d"%(Node_ref[i],Node_DOF[i],Node_tag[i]))
192
meshfaultL.write(" %lf"%Node[j][i])
193
meshfaultL.write("\n")
198
# defining interior elements
199
# there are ne0*ne1*ne2 interior elements
201
Element_Nodes=zeros([8,ne0*ne1*ne2],float64)
202
Element_ref=zeros(ne0*ne1*ne2,float64)
203
Element_tag=zeros(ne0*ne1*ne2,float64)
205
#print 'Interior elements'
207
print "M0,M1,M2",M0,M1,M2
209
for i2 in range(ne2):
210
for i1 in range (ne1):
211
for i0 in range(ne0):
212
k=i0 + ne0*i1 + ne0*ne1*i2;
213
# define corner node (node0)
214
node0=i0 + N0*i1 + N0*N1*i2;
217
# for hex8 the interior elements are specified by 8 nodes
219
Element_Nodes[0][k]=node0;
220
Element_Nodes[1][k]=node0+1;
221
Element_Nodes[2][k]=node0+N0+1;
222
Element_Nodes[3][k]=node0+N0;
223
Element_Nodes[4][k]=node0+N0*N1;
224
Element_Nodes[5][k]=node0+N0*N1+1;
225
Element_Nodes[6][k]=node0+N0*N1+N0+1;
226
Element_Nodes[7][k]=node0+N0*N1+N0;
236
#print "x0s,x1s,x2s,x0e,x1e,x2e", x0s,x1s,x2s,x0e,x1e,x2e
237
if (n1double==1) or (n2double==1):
239
for i2 in range(n2double):
240
for i1 in range(n1double):
241
# here the coordinates of kfault and kold are the same
242
# Ref for fault node (only on interior nodes of fault):
243
if (i1>0) and (i2>0):
244
kfault=Fault_NE+(i1-1.)+(n1double-1)*(i2-1.)
245
#print kfault , Node[0][int(kfault)],Node[1][int(kfault)],Node[2][int(kfault)]
248
# determine bottom corner node of each element
250
# Ref for normal interior node:
251
kold=int(i0start+N0*(i1start + i1) + (N0*N1)*(i2start+i2))
252
#print kold, Node[0][kold],Node[1][kold],Node[2][kold]
253
# Ref for interior element:
254
kint=int(i0start + ne0*(i1start+i1) + (ne0*ne1)*(i2start+i2))
255
#print kint, Element_Nodes[0][kint]
258
x1= (i1start+i1)*l1/ne1
259
x2= (i2start+i2)*l2/ne2
261
# for x0 > xstart we need to overwrite old Nodes in interior element references
264
# for the interior elements with x1<x1s and x2<x2s the only nodes need changing
266
if (i1==0) and (i2==0):
267
# nearest fault node:
268
kfaultref=int(Fault_NE+i1+(n1double-1)*i2)
271
kfaultref=int(Fault_NE+i1+(i2-1.)*(n1double-1))
274
kfaultref=int(Fault_NE+(i1-1.) + i2*(n1double-1))
276
# looking at element with fault node on bottom corner
277
kfaultref=int(kfault)
280
#print kold, Node[0][kold],Node[1][kold],Node[2][kold]
281
#print kfaultref, Node[0][kfaultref],Node[1][kfaultref],Node[2][kfaultref]
283
# overwrite 4 outer corner elements of fault (only one node changed)
284
if (i1==0 and i2==0):
285
#nodecheck=int(Element_Nodes[7][kint] )
286
#print nodecheck, Node[0][nodecheck],Node[1][nodecheck],Node[2][nodecheck]
288
Element_Nodes[7][kint]=kfaultref
290
#print kfaultref, Node[0][kfaultref],Node[1][kfaultref],Node[2][kfaultref]
293
elif (i1==0 and i2==n2double-1):
295
#nodecheck=int(Element_Nodes[3][kint] )
296
#print nodecheck, Node[0][nodecheck],Node[1][nodecheck],Node[2][nodecheck]
298
Element_Nodes[3][kint]=kfaultref
300
#print kfaultref, Node[0][kfaultref],Node[1][kfaultref],Node[2][kfaultref]
302
elif (i1==n1double-1 and i2==0):
303
#nodecheck=int(Element_Nodes[4][kint] )
304
#print nodecheck, Node[0][nodecheck],Node[1][nodecheck],Node[2][nodecheck]
306
Element_Nodes[4][kint]=kfaultref
307
#print kfaultref, Node[0][kfaultref],Node[1][kfaultref],Node[2][kfaultref]
309
elif (i1==n1double-1 and i2==n2double-1):
310
#nodecheck=int(Element_Nodes[0][kint] )
311
#print nodecheck, Node[0][nodecheck],Node[1][nodecheck],Node[2][nodecheck]
313
Element_Nodes[0][kint]=kfaultref
314
#print kfaultref, Node[0][kfaultref],Node[1][kfaultref],Node[2][kfaultref]
316
# overwrite 4 sides of fault (only 2 nodes changed)
319
#nodecheck=int(Element_Nodes[3][kint] )
320
#print nodecheck, Node[0][nodecheck],Node[1][nodecheck],Node[2][nodecheck]
321
#nodecheck=int(Element_Nodes[7][kint] )
322
#print nodecheck, Node[0][nodecheck],Node[1][nodecheck],Node[2][nodecheck]
324
Element_Nodes[3][kint]=kfaultref
325
kfaultref1=int(kfaultref+(n1double-1))
326
Element_Nodes[7][kint]=kfaultref1
328
#print kfaultref, Node[0][kfaultref],Node[1][kfaultref],Node[2][kfaultref]
329
#print kfaultref1, Node[0][kfaultref1],Node[1][kfaultref1],Node[2][kfaultref1]
333
elif (i1==n1double-1):
335
#nodecheck=int(Element_Nodes[0][kint] )
336
#print nodecheck, Node[0][nodecheck],Node[1][nodecheck],Node[2][nodecheck]
337
#nodecheck=int(Element_Nodes[4][kint] )
338
#print nodecheck, Node[0][nodecheck],Node[1][nodecheck],Node[2][nodecheck]
341
Element_Nodes[0][kint]=kfaultref
342
kfaultref1=kfaultref+(n1double-1)
343
Element_Nodes[4][kint]=kfaultref1
345
#print kfaultref, Node[0][kfaultref],Node[1][kfaultref],Node[2][kfaultref]
346
#print kfaultref1, Node[0][kfaultref1],Node[1][kfaultref1],Node[2][kfaultref1]
350
#nodecheck=int(Element_Nodes[4][kint] )
351
#print nodecheck, Node[0][nodecheck],Node[1][nodecheck],Node[2][nodecheck]
352
#nodecheck=int(Element_Nodes[7][kint] )
353
#print nodecheck, Node[0][nodecheck],Node[1][nodecheck],Node[2][nodecheck]
355
Element_Nodes[4][kint]=kfaultref
356
kfaultref1=kfaultref+1
357
Element_Nodes[7][kint]=kfaultref1
359
#print kfaultref, Node[0][kfaultref],Node[1][kfaultref],Node[2][kfaultref]
360
#print kfaultref1, Node[0][kfaultref1],Node[1][kfaultref1],Node[2][kfaultref1]
362
elif (i2==n2double-1):
364
#nodecheck=int(Element_Nodes[0][kint] )
365
#print nodecheck, Node[0][nodecheck],Node[1][nodecheck],Node[2][nodecheck]
366
#nodecheck=int(Element_Nodes[3][kint] )
367
#print nodecheck, Node[0][nodecheck],Node[1][nodecheck],Node[2][nodecheck]
369
Element_Nodes[0][kint]=kfaultref
370
kfaultref1=kfaultref+1
371
Element_Nodes[3][kint]=kfaultref1
373
#print kfaultref, Node[0][kfaultref],Node[1][kfaultref],Node[2][kfaultref]
374
#print kfaultref1, Node[0][kfaultref1],Node[1][kfaultref1],Node[2][kfaultref1]
376
# overwrite interior fault elements (4 nodes changed)
378
#nodecheck=int(Element_Nodes[0][kint] )
379
#print nodecheck, Node[0][nodecheck],Node[1][nodecheck],Node[2][nodecheck]
380
#print kfaultref, Node[0][kfaultref],Node[1][kfaultref],Node[2][kfaultref]
382
Element_Nodes[0][kint]=kfaultref
383
#if (x1<x1e and x2<x2e):
384
kfaultref1=kfaultref+1
385
kfaultref2=kfaultref+(n1double-1)
386
kfaultref3=kfaultref+1+(n1double-1)
388
#nodecheck=int(Element_Nodes[3][kint] )
389
#print nodecheck, Node[0][nodecheck],Node[1][nodecheck],Node[2][nodecheck]
390
#print kfaultref1, Node[0][kfaultref1],Node[1][kfaultref1],Node[2][kfaultref1]
392
#nodecheck=int(Element_Nodes[4][kint] )
393
#print nodecheck, Node[0][nodecheck],Node[1][nodecheck],Node[2][nodecheck]
394
#print kfaultref2, Node[0][kfaultref2],Node[1][kfaultref2],Node[2][kfaultref2]
396
#nodecheck=int(Element_Nodes[7][kint] )
397
#print nodecheck, Node[0][nodecheck],Node[1][nodecheck],Node[2][nodecheck]
398
#print kfaultref3, Node[0][kfaultref3],Node[1][kfaultref3],Node[2][kfaultref3]
401
Element_Nodes[3][kint]=kfaultref1
402
Element_Nodes[4][kint]=kfaultref2
403
Element_Nodes[7][kint]=kfaultref3
405
# kfaultref1=kfaultref+M1f
406
# Element_Nodes[3][kint]=kfaultref1
408
# kfaultref2=kfaultref+M2f
409
# Element_Nodes[4][kint]=kfaultref2
412
# print kint, kfaultref
414
# write interior elements to file
416
meshfaultL.write("%s %d\n"%(Element_Type,Element_Num))
418
for i in range(Element_Num):
419
meshfaultL.write("%d %d"%(Element_ref[i],Element_tag[i]))
420
for j in range(Element_numNodes):
421
meshfaultL.write(" %d"%Element_Nodes[j][i])
422
meshfaultL.write("\n")
425
FaceElement_Type='Hex8Face'
426
FaceElement_Num= 2*(ne0*ne1 + ne0*ne2 + ne1*ne2)
427
FaceElement_numNodes=8
429
meshfaultL.write("%s %d\n"%(FaceElement_Type,FaceElement_Num))
431
FaceElement_Nodes=zeros([FaceElement_numNodes,FaceElement_Num],float64)
432
FaceElement_ref=zeros(FaceElement_Num,float64)
433
FaceElement_tag=zeros(FaceElement_Num,float64)
437
# defining face elements on x2=0 face
438
for i1 in range (ne1):
439
for i0 in range(ne0):
441
k=i0 + ne0*i1 + ne0*ne1*i2;
442
# define corner node (node0)
443
node0=i0 + N0*i1 + N0*N1*i2;
444
FaceElement_ref[kcount]=kcount
445
FaceElement_tag[kcount]=3
446
# for hex8face the face elements are specified by 8 nodes
447
FaceElement_Nodes[0][kcount]=node0;
448
FaceElement_Nodes[1][kcount]=node0+1;
449
FaceElement_Nodes[2][kcount]=node0+N0+1;
450
FaceElement_Nodes[3][kcount]=node0+N0;
451
FaceElement_Nodes[4][kcount]=node0+N0*N1;
452
FaceElement_Nodes[5][kcount]=node0+N0*N1+1;
453
FaceElement_Nodes[6][kcount]=node0+N0*N1+N0+1;
454
FaceElement_Nodes[7][kcount]=node0+N0*N1+N0;
457
# defining face elements on x2=L face
458
for i1 in range (ne1):
459
for i0 in range(ne0):
461
k=i0 + ne0*i1 + ne0*ne1*i2;
462
# define corner node (node0)
463
node0=i0 + N0*i1 + N0*N1*i2;
464
FaceElement_ref[kcount]=kcount
465
FaceElement_tag[kcount]=3
466
# for hex8face the face elements are specified by 8 nodes
467
FaceElement_Nodes[0][kcount]=node0+N0*N1;
468
FaceElement_Nodes[1][kcount]=node0+N0*N1+1;
469
FaceElement_Nodes[2][kcount]=node0+N0*N1+N0+1;
470
FaceElement_Nodes[3][kcount]=node0+N0*N1+N0;
471
FaceElement_Nodes[4][kcount]=node0;
472
FaceElement_Nodes[5][kcount]=node0+1;
473
FaceElement_Nodes[6][kcount]=node0+N0+1;
474
FaceElement_Nodes[7][kcount]=node0+N0;
477
# defining face elements on x1=0 face
478
for i2 in range (ne2):
479
for i0 in range(ne0):
481
k=i0 + ne0*i1 + ne0*ne1*i2;
482
# define corner node (node0)
483
node0=i0 + N0*i1 + N0*N1*i2;
484
FaceElement_ref[kcount]=kcount
485
FaceElement_tag[kcount]=3
486
# for hex8face the face elements are specified by 8 nodes
487
FaceElement_Nodes[0][kcount]=node0;
488
FaceElement_Nodes[1][kcount]=node0+N0*N1;
489
FaceElement_Nodes[2][kcount]=node0+N0*N1+1;
490
FaceElement_Nodes[3][kcount]=node0+1;
491
FaceElement_Nodes[4][kcount]=node0+N0;
492
FaceElement_Nodes[5][kcount]=node0+N0*N1+N0;
493
FaceElement_Nodes[6][kcount]=node0+N0*N1+N0+1;
494
FaceElement_Nodes[7][kcount]=node0+N0+1;
497
# defining face elements on x1=L face
498
for i2 in range (ne2):
499
for i0 in range(ne0):
501
k=i0 + ne0*i1 + ne0*ne1*i2;
502
# define corner node (node0)
503
node0=i0 + N0*i1 + N0*N1*i2;
504
FaceElement_ref[kcount]=kcount
505
FaceElement_tag[kcount]=3
506
# for hex8face the face elements are specified by 8 nodes
507
FaceElement_Nodes[0][kcount]=node0+N0;
508
FaceElement_Nodes[1][kcount]=node0+N0*N1+N0;
509
FaceElement_Nodes[2][kcount]=node0+N0*N1+N0+1;
510
FaceElement_Nodes[3][kcount]=node0+N0+1;
511
FaceElement_Nodes[4][kcount]=node0;
512
FaceElement_Nodes[5][kcount]=node0+N0*N1;
513
FaceElement_Nodes[6][kcount]=node0+N0*N1+1;
514
FaceElement_Nodes[7][kcount]=node0+1;
517
# defining face elements on x0=0 face
518
for i2 in range (ne2):
519
for i1 in range(ne1):
521
k=i0 + ne0*i1 + ne0*ne1*i2;
522
# define corner node (node0)
523
node0=i0 + N0*i1 + N0*N1*i2;
524
FaceElement_ref[kcount]=kcount
525
FaceElement_tag[kcount]=3
526
# for hex8face the face elements are specified by 8 nodes
527
FaceElement_Nodes[0][kcount]=node0;
528
FaceElement_Nodes[1][kcount]=node0+N0;
529
FaceElement_Nodes[2][kcount]=node0+N0*N1+N0;
530
FaceElement_Nodes[3][kcount]=node0+N0*N1;
531
FaceElement_Nodes[4][kcount]=node0+1;
532
FaceElement_Nodes[5][kcount]=node0+N0+1;
533
FaceElement_Nodes[6][kcount]=node0+N0*N1+N0+1;
534
FaceElement_Nodes[7][kcount]=node0+N0*N1+1;
537
# defining face elements on x0=L face
538
for i2 in range (ne2):
539
for i1 in range(ne1):
541
k=i0 + ne0*i1 + ne0*ne1*i2;
542
# define corner node (node0)
543
node0=i0 + N0*i1 + N0*N1*i2;
544
FaceElement_ref[kcount]=kcount
545
FaceElement_tag[kcount]=3
546
# for hex8face the face elements are specified by 8 nodes
547
FaceElement_Nodes[0][kcount]=node0+1;
548
FaceElement_Nodes[1][kcount]=node0+N0+1;
549
FaceElement_Nodes[2][kcount]=node0+N0*N1+N0+1;
550
FaceElement_Nodes[3][kcount]=node0+N0*N1+1;
551
FaceElement_Nodes[4][kcount]=node0;
552
FaceElement_Nodes[5][kcount]=node0+N0;
553
FaceElement_Nodes[6][kcount]=node0+N0*N1+N0;
554
FaceElement_Nodes[7][kcount]=node0+N0*N1;
560
for i in range(FaceElement_Num):
561
meshfaultL.write("%d %d"%(FaceElement_ref[i],FaceElement_tag[i]))
562
for j in range(FaceElement_numNodes):
563
meshfaultL.write(" %d"%FaceElement_Nodes[j][i])
564
meshfaultL.write("\n")
568
ContactElement_Type='Hex8Face_Contact'
570
ContactElement_numNodes=16
571
# print contact elements on fault
574
ContactElement_Num=(n1double)*(n2double)
575
ContactElement_Nodes=zeros([ContactElement_numNodes,ContactElement_Num],float64)
576
ContactElement_ref=zeros(ContactElement_Num,float64)
577
ContactElement_tag=zeros(ContactElement_Num,float64)
578
#print ContactElement_Num
580
for i2 in range(n2double):
581
for i1 in range(n1double):
584
# define reference for interior elements with x0<=x0s
585
# here the nodes are the old interior nodes
586
kintold=int((i0start-1) + ne0*(i1start+i1) + ne0*ne1*(i2start+i2))
588
# define reference for interior elements with x0>x0s
589
# here the double nodes are the fault nodes
591
kintfault=int(i0start + ne0*(i1start+i1) + ne0*ne1*(i2start+i2))
593
#nodecheck=int(Element_Nodes[1][kintold] )
594
#print nodecheck, Node[0][nodecheck],Node[1][nodecheck],Node[2][nodecheck]
595
#nodecheck=int(Element_Nodes[0][kintfault] )
596
#print nodecheck, Node[0][nodecheck],Node[1][nodecheck],Node[2][nodecheck]
598
#nodecheck=int(Element_Nodes[2][kintold] )
599
#print nodecheck, Node[0][nodecheck],Node[1][nodecheck],Node[2][nodecheck]
600
#nodecheck=int(Element_Nodes[3][kintfault] )
601
#print nodecheck, Node[0][nodecheck],Node[1][nodecheck],Node[2][nodecheck]
603
#nodecheck=int(Element_Nodes[6][kintold] )
604
#print nodecheck, Node[0][nodecheck],Node[1][nodecheck],Node[2][nodecheck]
605
#nodecheck=int(Element_Nodes[7][kintfault] )
606
#print nodecheck, Node[0][nodecheck],Node[1][nodecheck],Node[2][nodecheck]
608
#nodecheck=int(Element_Nodes[5][kintold] )
609
#print nodecheck, Node[0][nodecheck],Node[1][nodecheck],Node[2][nodecheck]
610
#nodecheck=int(Element_Nodes[4][kintfault] )
611
#print nodecheck, Node[0][nodecheck],Node[1][nodecheck],Node[2][nodecheck]
613
ContactElement_ref[k]=k
614
ContactElement_tag[k]=2
616
ContactElement_Nodes[0][k]=Element_Nodes[1][kintold]
617
ContactElement_Nodes[1][k]=Element_Nodes[2][kintold]
618
ContactElement_Nodes[2][k]=Element_Nodes[6][kintold]
619
ContactElement_Nodes[3][k]=Element_Nodes[5][kintold]
620
ContactElement_Nodes[4][k]=Element_Nodes[0][kintold]
621
ContactElement_Nodes[5][k]=Element_Nodes[3][kintold]
622
ContactElement_Nodes[6][k]=Element_Nodes[7][kintold]
623
ContactElement_Nodes[7][k]=Element_Nodes[4][kintold]
625
ContactElement_Nodes[8][k]=Element_Nodes[0][kintfault]
626
ContactElement_Nodes[9][k]=Element_Nodes[3][kintfault]
627
ContactElement_Nodes[10][k]=Element_Nodes[7][kintfault]
628
ContactElement_Nodes[11][k]=Element_Nodes[4][kintfault]
629
ContactElement_Nodes[12][k]=Element_Nodes[1][kintfault]
630
ContactElement_Nodes[13][k]=Element_Nodes[2][kintfault]
631
ContactElement_Nodes[14][k]=Element_Nodes[6][kintfault]
632
ContactElement_Nodes[15][k]=Element_Nodes[5][kintfault]
634
meshfaultL.write("%s %d\n"%(ContactElement_Type,ContactElement_Num))
636
for i in range(ContactElement_Num):
637
meshfaultL.write("%d %d"%(ContactElement_ref[i],ContactElement_tag[i]))
638
for j in range(ContactElement_numNodes):
639
meshfaultL.write(" %d"%ContactElement_Nodes[j][i])
640
meshfaultL.write("\n")
642
# point sources (not supported yet)
644
meshfaultL.write("Point1 0")
651
ne_w=int((ne/height)*width+0.5)
652
mydomainfile = faultL(width,width, height,ne, ne, ne_w,contact=True,xstart=fstart,xend=fend)