Fat ray tomography #789
Replies: 3 comments 2 replies
-
When using the "fat ray" option, the forward calculation is NOT affected, but is still the same fastest ray approximation. Only the Jacobian matrix is changed in a way that a larger sensitive volume (the fresnel volume) is affected and should stabilize the inversion process but probably not lead to much different velocity models. The whole methodology is explained by Jordi et al. (2016) and exactly implemented in the source code under gimli/pygimli/physics/traveltime/modelling.py Line 154 in c8de564 |
Beta Was this translation helpful? Give feedback.
-
First 2. the Dijkstra algorithm in implemented in the C++ core so you can't see it. But it is just pure geometry, calculating the length of the ray through every cell. As to 1., it is exactly equation (4) of Jordi et al. (2016): the first term is the (dimensionless) weight and the second ratio is the traveltime between source and receiver divided by the slowness. It is nicely described and easily implemented. |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
Hi @halbmy,
Thanks for providing the details about fat ray tomography implementation.
I was trying fat ray tomography and following #563 #564 and the references mentioned. I'm a little confuse how the weights are assigned to traveltime inversion. I understood that the weights are calculated to obtained the Fresnel volume, but it is unclear how they are used in slowness estimation. Are there detailed equations/a description of how the slowness field s is calculated using
w
?In traveltime tomography the traveltime is calculated using
Where,$v$ is the velocity and $L_q$ the total travel path of this ray, $l_i$ are the individual ray paths in each cell, and $s_i$ are the discrete and constant slowness values. To do a forward computation, the traveltimes through each discrete cell can be determined geometrically and formulated in matrix notation as:
where,$t$ (i.e., first arrival traveltimes), are related to a set of model parameters $s$ (i.e., slowness),
Here, the cumulated traveltimes of all rays form the vector$t$ , the slowness values of all cells are located in s and the ray paths of every ray form the matrix $G$ . The matrix $G$ contains one row per ray and one column per model cell. Accordingly, measured traveltimes $t$ are associated with data vector $d$ , and slowness values s are associated with the model parameters m. In summary, in the ray-approximation, the Jacobian $(G)$ consists of the ray segments per model cell. Multiplying this with the slowness vector $(s)$ produces the total traveltime of the ray along each segment. And the ray segment in each model cell actually reflects the "sensitivity", as longer ray segments have a larger impact on the traveltime.
As given in Jordi et al [2016], "The main difference between the classical ray-based and fat ray tomography approaches is the calculation of the sensitivities. For ray tomography the sensitivities effectively are the lengths of the ray segments within the respective model cells. In the fat ray tomography scheme the sensitivities are calculated using fat rays without resorting to ray tracing." For a 2D fat ray in a discretized medium the sensitivity of the traveltime$t_i$ with respect to a change in slowness $s_k$ is given by:
Is this sensitivity refer to matrix${l_i}$
Furthermore, in Pygimli, fatray is implemented by weighting the Jacobian or senitivity, as,
The Jacobian (first command) contains the ray length in meters and the weight (
FresnelWeight
) is a dimensionless function summing to 1 that is being used to weight the jacobian.How did the "sensitivity", or "Jacobian" or "Frechet derivatives" incorporated in traveltime equation to obtain the slowness value? Could you refer me to the main source code?
Ref:
Beta Was this translation helpful? Give feedback.
All reactions