-
Notifications
You must be signed in to change notification settings - Fork 1
/
pfm3d.py
143 lines (96 loc) · 3.31 KB
/
pfm3d.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#!/usr/bin/env python
import os
import sys, getopt
import numpy as np
def srclineno(isrc):
return int(6*isrc-5), int(6*isrc+1)
def reclineno(irec):
return int(4*irec-3), int(4*irec+1)
def Usage():
print "Usage:"
print "python pfm3d.py -n 12"
print "-n the number of CPUs or CPU cores"
if __name__=="__main__":
try:
opts, args = getopt.getopt(sys.argv[1:], "n:", ["ncpu="])
except getopt.GetoptError, err:
print str(err)
Usage()
sys.exit(2)
ncpu=0
print opts,args
for op, value in opts:
if op in ["-n", "--ncpu"]:
ncpu = int(value)
else:
Usage()
sys.exit(0)
print "number of CPUs or Cores:\t",ncpu
with open("sources.in", "r") as fpsrc:
srclst = fpsrc.readlines()
with open("receivers.in", "r") as fprec:
reclst = fprec.readlines()
nsrc = int(srclst[0])
print "number of sources:\t", nsrc
pnsrc = nsrc/ncpu+1
if nsrc-pnsrc*ncpu > ncpu/2:
pnsrc = pnsrc+1
print "number of sources for parallel:\t", pnsrc
# start and end shot number for each CPU core
psrc1 = np.zeros(ncpu)
psrc2 = np.zeros(ncpu)
for i in range(ncpu):
psrc1[i] = i*pnsrc+1
psrc2[i] = (i+1)*pnsrc
psrc2[-1]=nsrc
print "start and end shot number for each CPU core"
print psrc1
print psrc2
prec1 = np.zeros(ncpu)
prec2 = np.zeros(ncpu)
for i in range(3,len(reclst),4):
# print i,int(reclst[i]), i-2, i+2
srcno = int(reclst[i])
flag1 = True
for icpu in range(ncpu):
if srcno==psrc2[icpu]:
prec2[icpu] = int(i+2)
break
prec1[0] = int(1)
for icpu in range(1,ncpu):
prec1[icpu] = int(prec2[icpu-1])
# print prec1
# print prec2
# if i>50:
# os._exit(0)
fpsave = open("cpu", "w")
for i in range(ncpu):
pnsrc = int(psrc2[i]-psrc1[i]+1)
i2s = str(i).zfill(2)
if not os.path.exists(i2s):
os.system("mkdir %s" % i2s)
index1, index2 = srclineno(psrc1[i])
index3, index4 = srclineno(psrc2[i])
srcstr = ""
fpsrc = open(i2s+"/sources.in", "w")
srcstr += str(pnsrc)+"\n"
fpsrc.write("%s" % srcstr)
fpsrc.writelines(srclst[index1:index4])
fpsrc.close()
fprec = open(i2s+"/receivers.in", "w")
nrec = int((prec2[i]-prec1[i])/4)
fprec.write(str(nrec)+"\n")
index1 = int(prec1[i])
index2 = int(prec2[i])
#print index1, index2
lst = reclst[index1:index2]
for irec in range(2,len(lst),4):
isrc = int(lst[irec])-psrc1[i]+1
lst[irec] = " "+str(int(isrc))+"\n"
fprec.writelines(lst)
fprec.close()
fpsave.write("%d\t%d\t%d\t%d\n" % (psrc1[i],psrc2[i],prec1[i],prec2[i]))
cpfiles = "propgrid.in interfaces.in vgrids.in mode_set.in frechet.in"
os.system("cp %s %s" % (cpfiles, i2s))
fpsave.close()
pass