- #1
Hansi87
- 2
- 0
hi
I'm making a script for calculating ray paths in the subsurface using kinematic ray tracing.
To my disposition I have a velocity model given on a 2D grid.
I'm having troubles understanding how to use Options in order to specify the borders for when the ode23 function is supposed to stop(which is when it reaches the border of the grid).
At the moment i use the following:
[t,f] = ode23('raytrace', [0 10],[x0,z0,px0,pz0]);function dz =raytrace(t,z)
global v dx dz
dz = zeros(4,1);
if z(2) < 0;
vel = interp2(3.5:0.01:20,0:-0.01:-10,v,z(1),z(2),'*linear');
v2 = vel^2;
v1 = 1/vel;
vx = interp2(3.5:0.01:20,0:-0.01:-10,dx,z(1),z(2),'*linear');
vz = interp2(3.5:0.01:20,0:-0.01:-10,dz,z(1),z(2),'*linear');
dz(1) = v2*z(3);
dz(2) = v2*z(4);
dz(3) = -v1*vx;
dz(4) = -v1*vz;
elseif z(2) > 0;
return
end
end
My goal is to not have to use the if/else if sentence in order to make it a bit more elegant.
ty in advance
I'm making a script for calculating ray paths in the subsurface using kinematic ray tracing.
To my disposition I have a velocity model given on a 2D grid.
I'm having troubles understanding how to use Options in order to specify the borders for when the ode23 function is supposed to stop(which is when it reaches the border of the grid).
At the moment i use the following:
[t,f] = ode23('raytrace', [0 10],[x0,z0,px0,pz0]);function dz =raytrace(t,z)
global v dx dz
dz = zeros(4,1);
if z(2) < 0;
vel = interp2(3.5:0.01:20,0:-0.01:-10,v,z(1),z(2),'*linear');
v2 = vel^2;
v1 = 1/vel;
vx = interp2(3.5:0.01:20,0:-0.01:-10,dx,z(1),z(2),'*linear');
vz = interp2(3.5:0.01:20,0:-0.01:-10,dz,z(1),z(2),'*linear');
dz(1) = v2*z(3);
dz(2) = v2*z(4);
dz(3) = -v1*vx;
dz(4) = -v1*vz;
elseif z(2) > 0;
return
end
end
My goal is to not have to use the if/else if sentence in order to make it a bit more elegant.
ty in advance
Last edited: