implemented vgrids2VTK to surveyUtils
This commit is contained in:
parent
98df4db95d
commit
f7878cdb4a
@ -194,5 +194,115 @@ def findTracesInRanges(shot_dict, distancebin, pickbin):
|
||||
|
||||
return shots_found
|
||||
|
||||
def vgrids2VTK(inputfile = 'vgrids.in', outputfile = 'vgrids.vtk'):
|
||||
def getDistance(angle):
|
||||
PI = np.pi
|
||||
R = 6371.
|
||||
distance = angle / 180 * (PI * R)
|
||||
return distance
|
||||
|
||||
def readNumberOfPoints(filename):
|
||||
fin = open(filename, 'r')
|
||||
vglines = fin.readlines()
|
||||
|
||||
nR = int(vglines[1].split()[0])
|
||||
nTheta = int(vglines[1].split()[1])
|
||||
nPhi = int(vglines[1].split()[2])
|
||||
|
||||
fin.close()
|
||||
return nR, nTheta, nPhi
|
||||
|
||||
def readDelta(filename):
|
||||
fin = open(filename, 'r')
|
||||
vglines = fin.readlines()
|
||||
|
||||
dR = float(vglines[2].split()[0])
|
||||
dTheta = float(vglines[2].split()[1])
|
||||
dPhi = float(vglines[2].split()[2])
|
||||
|
||||
fin.close()
|
||||
return dR, dTheta, dPhi
|
||||
|
||||
def readStartpoints(filename):
|
||||
fin = open(filename, 'r')
|
||||
vglines = fin.readlines()
|
||||
|
||||
sR = float(vglines[3].split()[0])
|
||||
sTheta = float(vglines[3].split()[1])
|
||||
sPhi = float(vglines[3].split()[2])
|
||||
|
||||
fin.close()
|
||||
return sR, sTheta, sPhi
|
||||
|
||||
def readVelocity(filename):
|
||||
vel = []; count = 0
|
||||
fin = open(filename, 'r')
|
||||
vglines = fin.readlines()
|
||||
|
||||
for line in vglines:
|
||||
count += 1
|
||||
if count > 4:
|
||||
vel.append(float(line.split()[0]))
|
||||
|
||||
print("Read %d points out of file: %s" %(count - 4, filename))
|
||||
return vel
|
||||
|
||||
R = 6371 # earth radius
|
||||
outfile = open(outputfile, 'w')
|
||||
|
||||
# Theta, Phi in radians, R in km
|
||||
nR, nTheta, nPhi = readNumberOfPoints(inputfile)
|
||||
dR, dTheta, dPhi = readDelta(inputfile)
|
||||
sR, sTheta, sPhi = readStartpoints(inputfile)
|
||||
vel = readVelocity(inputfile)
|
||||
|
||||
nX = nPhi; nY = nTheta; nZ = nR
|
||||
|
||||
sZ = sR - R
|
||||
sX = getDistance(np.rad2deg(sPhi))
|
||||
sY = getDistance(np.rad2deg(sTheta))
|
||||
|
||||
dX = getDistance(np.rad2deg(dPhi))
|
||||
dY = getDistance(np.rad2deg(dTheta))
|
||||
|
||||
xGrid = np.linspace(sX, sX + (dX * nX), nX)
|
||||
yGrid = np.linspace(sZ, sZ + (nY * dY), nY)
|
||||
zGrid = np.linspace(sZ, sZ + (nR * dR), nR)
|
||||
nPoints = len(xGrid) * len(yGrid) * len(zGrid)
|
||||
|
||||
# write header
|
||||
print("Writing header for VTK file...")
|
||||
outfile.writelines('# vtk DataFile Version 3.1\n')
|
||||
outfile.writelines('Velocity on FMTOMO vgrids.in points\n')
|
||||
outfile.writelines('ASCII\n')
|
||||
outfile.writelines('DATASET POLYDATA\n')
|
||||
outfile.writelines('POINTS %15d float\n' %(nPoints))
|
||||
|
||||
# write coordinates
|
||||
print("Writing coordinates to VTK file...")
|
||||
for z in zGrid:
|
||||
for y in yGrid:
|
||||
for x in xGrid:
|
||||
outfile.writelines('%10f %10f %10f \n' %(x, y, z))
|
||||
|
||||
|
||||
outfile.writelines('VERTICES %15d %15d\n' %(nPoints, 2 * nPoints))
|
||||
|
||||
# write indices
|
||||
print("Writing indices to VTK file...")
|
||||
for index in range(nPoints):
|
||||
outfile.writelines('%10d %10d\n' %(1, index))
|
||||
|
||||
outfile.writelines('POINT_DATA %15d\n' %(nPoints))
|
||||
outfile.writelines('SCALARS velocity float %d\n' %(1))
|
||||
outfile.writelines('LOOKUP_TABLE default\n')
|
||||
|
||||
# write velocity
|
||||
print("Writing velocity values to VTK file...")
|
||||
for velocity in vel:
|
||||
outfile.writelines('%10f\n' %velocity)
|
||||
|
||||
outfile.close()
|
||||
print("Wrote velocity grid for %d points to file: %s" %(nPoints, outputfile))
|
||||
return
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user