Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Getting all traveltimes from 3D rectangular grid #74

Open
SquirrelKnight opened this issue Dec 20, 2024 · 0 comments
Open

Getting all traveltimes from 3D rectangular grid #74

SquirrelKnight opened this issue Dec 20, 2024 · 0 comments

Comments

@SquirrelKnight
Copy link

SquirrelKnight commented Dec 20, 2024

Hello,

I am currently working on deriving travel time grids for several different stations for a heterogenous velocity model. I am using the rgrid method to make a 3D grid. From there, I would like to get traveltimes for all nodes on the grid.

So far, I have attempted setting the source as the station, and the receiver as a random point in space within the grid. I get a result that makes sense using grid.raytrace. After doing this, I have attempted grid.get_traveltimes(), however the traveltimes at the same nodes do not match the output of the raytrace. For example, the location of the source should have a traveltime of 0.0 s, but it doesn't. Instead the 0.0s traveltime is located somewhere else entirely in the grid. I made sure to check that I was converting between the x, y, and z coordinates and the actual node points correctly, so that isn't the issue.

This initial test was performed using the FSM method. I was wondering if the only accurate way to get traveltimes to each node point is to actually set each node as a receiver. From what I understand in the documentation, it seems like the traveltimes should be propagated across the grid when first running the raytrace function, am I wrong in thinking so? Your advice is greatly appreciated!

Here is an example of my code, which uses a NonLinLoc velocity grid as the input:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from nllgrid import NLLGrid
import ttcrpy.rgrid as rg

nll_file = '/Volumes/SeaJade 2 Backup/ONC/endeavour_analysis/data/nll/model/END.P.mod.buf'
p_grd = NLLGrid(nll_file)

V = 1 / (p_grd.array / 0.2)

# Get number of grids in x, y, and z directons
nx, ny, nz = V.shape

# Get starting point in x, y, and z directions
x_orig, y_orig, z_orig = p_grd.x_orig, p_grd.y_orig, p_grd.z_orig

# Get spacing in x, y, and z directions
dx, dy, dz = p_grd.dx, p_grd.dy, p_grd.dz

x = np.arange(0,nx*dx,dx) + x_orig
y = np.arange(0,ny*dy,dy) + y_orig
z = np.arange(0,nz*dz,dz) + z_orig

grid = rg.Grid3d(x, y, z, cell_slowness=False, method='SPM')

src = np.array([[-1.0,0.0,0.0]])
rcv = np.array([[1.0,1.0,1.0]])

slowness = 1./V
tt, rays = grid.raytrace(src, rcv, slowness, return_rays=True)

grid_tt = np.array(grid.get_grid_traveltimes())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant