finished generatePropgrid, changed getThetaPhiFromArray output to the right order
This commit is contained in:
parent
39a12bd1d1
commit
d611b8606e
@ -358,11 +358,11 @@ class SeisArray(object):
|
||||
measured_x, measured_y, measured_z = self.getAllMeasuredPointsLists()
|
||||
|
||||
# need to determine the delta to add two cushion nodes around the min/max values
|
||||
thetaDelta = (thetaN - thetaS) / (nTheta - 1)
|
||||
phiDelta = (phiE - phiW) / (nPhi - 1)
|
||||
deltaTheta = (thetaN - thetaS) / (nTheta - 1)
|
||||
deltaPhi = (phiE - phiW) / (nPhi - 1)
|
||||
|
||||
thetaGrid = np.linspace(thetaS - thetaDelta, thetaN + thetaDelta, num = nTheta + 2) # +2 cushion nodes
|
||||
phiGrid = np.linspace(phiW - phiDelta, phiE + phiDelta, num = nPhi + 2) # +2 cushion nodes
|
||||
thetaGrid = np.linspace(thetaS - deltaTheta, thetaN + deltaTheta, num = nTheta + 2) # +2 cushion nodes
|
||||
phiGrid = np.linspace(phiW - deltaPhi, phiE + deltaPhi, num = nPhi + 2) # +2 cushion nodes
|
||||
|
||||
nTotal = len(thetaGrid) * len(phiGrid); count = 0
|
||||
for theta in thetaGrid:
|
||||
@ -401,7 +401,7 @@ class SeisArray(object):
|
||||
nInterfaces = 2
|
||||
|
||||
# generate dimensions of the grid from array
|
||||
phiWE, thetaSN = self.getThetaPhiFromArray(cushionfactor)
|
||||
thetaSN, phiWE = self.getThetaPhiFromArray(cushionfactor)
|
||||
|
||||
thetaS, thetaN = thetaSN
|
||||
phiW, phiE = phiWE
|
||||
@ -410,14 +410,14 @@ class SeisArray(object):
|
||||
outfile = open(outfilename, 'w')
|
||||
|
||||
# determine the deltas
|
||||
thetaDelta = abs(thetaN - thetaS) / float((nTheta - 1))
|
||||
phiDelta = abs(phiE - phiW) / float((nPhi - 1))
|
||||
deltaTheta = abs(thetaN - thetaS) / float((nTheta - 1))
|
||||
deltaPhi = abs(phiE - phiW) / float((nPhi - 1))
|
||||
|
||||
# write header for interfaces grid file (in RADIANS)
|
||||
outfile.writelines('%10s\n' %(nInterfaces))
|
||||
outfile.writelines('%10s %10s\n' %(nTheta + 2, nPhi + 2)) # +2 cushion nodes
|
||||
outfile.writelines('%10s %10s\n' %(np.deg2rad(thetaDelta), np.deg2rad(phiDelta)))
|
||||
outfile.writelines('%10s %10s\n' %(np.deg2rad(thetaS - thetaDelta), np.deg2rad(phiW - phiDelta)))
|
||||
outfile.writelines('%10s %10s\n' %(np.deg2rad(deltaTheta), np.deg2rad(deltaPhi)))
|
||||
outfile.writelines('%10s %10s\n' %(np.deg2rad(thetaS - deltaTheta), np.deg2rad(phiW - deltaPhi)))
|
||||
|
||||
interface1 = self.interpolateTopography(nTheta, nPhi, thetaSN, phiWE, method = method)
|
||||
interface2 = self.interpolateOnRegularGrid(nTheta, nPhi, thetaSN, phiWE, -depthmax, method = method)
|
||||
@ -450,9 +450,9 @@ class SeisArray(object):
|
||||
cushionTheta = abs(theta_max - theta_min) * cushionfactor
|
||||
phiWE = (phi_min - cushionPhi, phi_max + cushionPhi)
|
||||
thetaSN = (theta_min - cushionTheta, theta_max + cushionTheta)
|
||||
return phiWE, thetaSN
|
||||
return thetaSN, phiWE
|
||||
|
||||
def generatePropgrid(self, nTheta, nPhi, nR, Rbt, cushionfactor = 0.1,
|
||||
def generatePropgrid(self, nTheta, nPhi, nR, Rbt, cushionpropgrid = 0.05,
|
||||
refinement = (5, 5), outfilename = 'propgrid.in'):
|
||||
'''
|
||||
Create a propergation grid file for FMTOMO using SeisArray boundaries
|
||||
@ -469,7 +469,8 @@ class SeisArray(object):
|
||||
:param: Rbt (bot, top) extensions of the model in km
|
||||
type: tuple
|
||||
|
||||
:param: cushionfactor, add some extra space to the model (default: 0.1 = 10%)
|
||||
:param: cushionpropogrid, cushionfactor for the propagationgrid (cushion direction
|
||||
opposing to vgrids cushionfactor)
|
||||
type: float
|
||||
|
||||
:param: refinement, (refinement factor, number of local cells for refinement) used by FMTOMO
|
||||
@ -477,22 +478,22 @@ class SeisArray(object):
|
||||
'''
|
||||
outfile = open(outfilename, 'w')
|
||||
|
||||
R = 6371.
|
||||
thetaSN, phiWE = self.getThetaPhiFromArray(cushionfactor = 0)
|
||||
|
||||
phiWE, thetaSN = self.getThetaPhiFromArray(cushionfactor)
|
||||
thetaS = thetaSN[0] + cushionpropgrid
|
||||
thetaN = thetaSN[1] - cushionpropgrid
|
||||
phiW = phiWE[0] + cushionpropgrid
|
||||
phiE = phiWE[1] - cushionpropgrid
|
||||
rbot = Rbt[0]
|
||||
rtop = Rbt[1]
|
||||
|
||||
thetaS, thetaN = thetaSN
|
||||
phiW, phiE = phiWE
|
||||
rbot = Rbt[0] + R
|
||||
rtop = Rbt[1] + R
|
||||
|
||||
thetaDelta = abs(thetaN - thetaS) / float((nTheta - 1))
|
||||
phiDelta = abs(phiE - phiW) / float((nPhi - 1))
|
||||
rDelta = abs(rbot - rtop) / float((nR - 1))
|
||||
deltaTheta = abs(thetaN - thetaS) / float(nTheta - 1)
|
||||
deltaPhi = abs(phiE - phiW) / float(nPhi - 1)
|
||||
deltaR = abs(rbot - rtop) / float(nR - 1)
|
||||
|
||||
outfile.writelines('%10s %10s %10s\n' %(nR, nTheta, nPhi))
|
||||
outfile.writelines('%10s %10s %10s\n' %(rDelta, thetaDelta, phiDelta))
|
||||
outfile.writelines('%10s %10s %10s\n' %(Rbt[1], thetaS, phiW))
|
||||
outfile.writelines('%10s %10s %10s\n' %(deltaR, deltaTheta, deltaPhi))
|
||||
outfile.writelines('%10s %10s %10s\n' %(rtop, thetaS, phiW))
|
||||
outfile.writelines('%10s %10s\n' %refinement)
|
||||
|
||||
outfile.close()
|
||||
@ -568,7 +569,7 @@ class SeisArray(object):
|
||||
|
||||
# generate dimensions of the grid from array
|
||||
if thetaSN is None and phiWE is None:
|
||||
phiWE, thetaSN = self.getThetaPhiFromArray()
|
||||
thetaSN, phiWE = self.getThetaPhiFromArray()
|
||||
|
||||
thetaS, thetaN = thetaSN
|
||||
phiW, phiE = phiWE
|
||||
@ -576,14 +577,14 @@ class SeisArray(object):
|
||||
rtop = Rbt[1] + R
|
||||
|
||||
# need to determine the delta to add two cushion nodes around the min/max values
|
||||
thetaDelta = abs(thetaN - thetaS) / float((nTheta - 1))
|
||||
phiDelta = abs(phiE - phiW) / float((nPhi - 1))
|
||||
rDelta = abs(rbot - rtop) / float((nR - 1))
|
||||
deltaTheta = abs(thetaN - thetaS) / float((nTheta - 1))
|
||||
deltaPhi = abs(phiE - phiW) / float((nPhi - 1))
|
||||
deltaR = abs(rbot - rtop) / float((nR - 1))
|
||||
|
||||
# create a regular grid including +2 cushion nodes in every direction
|
||||
thetaGrid = np.linspace(thetaS - thetaDelta, thetaN + thetaDelta, num = nTheta + 2) # +2 cushion nodes
|
||||
phiGrid = np.linspace(phiW - phiDelta, phiE + phiDelta, num = nPhi + 2) # +2 cushion nodes
|
||||
rGrid = np.linspace(rbot - rDelta, rtop + rDelta, num = nR + 2) # +2 cushion nodes
|
||||
thetaGrid = np.linspace(thetaS - deltaTheta, thetaN + deltaTheta, num = nTheta + 2) # +2 cushion nodes
|
||||
phiGrid = np.linspace(phiW - deltaPhi, phiE + deltaPhi, num = nPhi + 2) # +2 cushion nodes
|
||||
rGrid = np.linspace(rbot - deltaR, rtop + deltaR, num = nR + 2) # +2 cushion nodes
|
||||
|
||||
nTotal = len(rGrid) * len(thetaGrid) * len(phiGrid)
|
||||
print("Total number of grid nodes: %s"%nTotal)
|
||||
@ -591,8 +592,8 @@ class SeisArray(object):
|
||||
# write header for velocity grid file (in RADIANS)
|
||||
outfile.writelines('%10s %10s \n' %(1, 1))
|
||||
outfile.writelines('%10s %10s %10s\n' %(nR + 2, nTheta + 2, nPhi + 2))
|
||||
outfile.writelines('%10s %10s %10s\n' %(rDelta, np.deg2rad(thetaDelta), np.deg2rad(phiDelta)))
|
||||
outfile.writelines('%10s %10s %10s\n' %(rbot - rDelta, np.deg2rad(thetaS - thetaDelta), np.deg2rad(phiW - phiDelta)))
|
||||
outfile.writelines('%10s %10s %10s\n' %(deltaR, np.deg2rad(deltaTheta), np.deg2rad(deltaPhi)))
|
||||
outfile.writelines('%10s %10s %10s\n' %(rbot - deltaR, np.deg2rad(thetaS - deltaTheta), np.deg2rad(phiW - deltaPhi)))
|
||||
|
||||
surface = self.interpolateTopography(nTheta, nPhi, thetaSN, phiWE, method = method)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user