Options when using the ode23/45 solver

  • Thread starter Thread starter Hansi87
  • Start date Start date
  • Tags Tags
    Options
AI Thread Summary
The discussion focuses on creating a script for calculating ray paths in subsurface modeling using kinematic ray tracing with a 2D velocity model. The user is encountering difficulties with the ode23 function in MATLAB, specifically in setting up event options to stop the integration when the ray reaches the surface (Z = 0) or exits the grid in the X direction. Currently, the user employs an if/else statement to handle these conditions but seeks a more elegant solution using event functions. They express a need for clarity on implementing these events effectively, despite having reviewed examples. Assistance is requested to improve the script's functionality and streamline the code.
Hansi87
Messages
2
Reaction score
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
 
Last edited:
Physics news on Phys.org
I'm aware that my first post was slightly unclear and it was not easy to understand what I meant.

I want to set an event so that when the ray I shoot reaches the surface Z = 0 the ODE function stops.

I also want to implement the event so that it stops if the ray travels outside the grid in the x direction.

I know I need to use the event function but I'm unable to comprehend how to use it even after reading examples.

I would really appreciate some help in this matter.

Thanks in advance.
 
Back
Top