MATLAB: Trying to stop ODE Solver by using event funktion for multidimensional DGL-System

event funktionstop ode solver

Hi,
I'm using the ode23tb Solver (in MATLAB R2020a) to solve a System of 9 DGL's. I want to use event location to stop the ode-Solver, when m(:,1) reaches a specific value.
The ode Solver:
t_max=1;
start=[0; R_0; T_0;Pos_01_x;49;Pos_01_y;4;Pos_01_z;1];
options = odeset('Events',@StopEvent,'Refine', 1);
[t,m] = ode23tb(@m_DGL,[0 t_max],start, options, T_amb, p_amb,comp, M_sp, M_amb, Y_sp_inf, visk_amb, rho_amb,omega_amb_x, omega_amb_y, omega_amb_z, K);
The funktion m_DGL:
function dm = m_DGL(~,m , T_amb, p_amb, comp, M_sp, M_amb, Y_sp_inf, visk_amb, rho_amb,omega_amb_x, omega_amb_y, omega_amb_z, K)
%...

% Definition of Variables for Calculation below
%...
dm= zeros(9,1);
dm(1)= 4*pi*rho_r*D*m(2) * log(1+B_M)*(1 + 0.552*sqrt(2)/2 * Sc^(1/3)*Re^(1/2)/((1+B_M)^(0.7)*log(1+B_M)/B_M));
dm(2)= -rho_r*D/(rho_sp*m(2)) * log(1+B_M)*(1 + 0.552*sqrt(2)/2 * Sc^(1/3)*Re^(1/2)/((1+B_M)^0.7*log(1+B_M)/B_M));
dm(3)= dm(1)/(c_sp * rho_sp * 4/3*pi*m(2)^3)*(h_eff - h_sp_ev);
dm(4)= m(5);
dm(5)= 18*visk_amb*rho_amb/(abs(m(5)-omega_amb_x)*(2*m(2))^2*rho_sp*(1+B_M))*(1+1/6*(2*m(2)*abs(m(5)-omega_amb_x)/visk_amb)^(2/3))*(K(1)*omega_amb_x^2-m(5)*abs(m(5)));
dm(6)= m(7);
dm(7)=18*visk_amb*rho_amb/(abs(m(7)-omega_amb_y)*(2*m(2))^2*rho_sp*(1+B_M))*(1+1/6*(2*m(2)*abs(m(7)-omega_amb_y)/visk_amb)^(2/3))*(K(2)*omega_amb_y^2-m(7)*abs(m(7)));
dm(8)= m(9);
dm(9)=18*visk_amb*rho_amb/(abs(m(9)-omega_amb_z)*(2*m(2))^2*rho_sp*(1+B_M))*(1+1/6*(2*m(2)*abs(m(9)-omega_amb_z)/visk_amb)^(2/3))*(K(3)*omega_amb_z^2-m(9)*abs(m(9)))+9.81*(rho_amb-rho_sp)/rho_sp;
end
The funktion StopEvent:
function [position,isterminal,direction] = StopEvent(~,m)
n=m(:,1);
position = n(1)>=5e-8;
isterminal = 1;
direction = 0;
I've tryed differnt versions but always got the same error message:
Error using StopEvent
Too many input arguments.
Error in odeevents (line 28)
eventValue = feval(eventFcn,t0,y0,eventArgs{:});
Error in ode23tb (line 168)
odeevents(FcnHandlesUsed,odeFcn,t0,y0,options,varargin);
Error in Evaporation (line 13)
[t,m] = ode23tb(@m_DGL,[0 t_max],start, options, T_amb, p_amb,comp, M_sp, M_amb, Y_sp_inf, visk_amb, rho_amb,omega_amb_x, omega_amb_y,
omega_amb_z, K);
I hope someone can help! Thank you in advance!

Best Answer

I've found a Solution by myself.
I've replaced the following lines:
options = odeset('Events',@(t,m, T_amb, p_amb,comp, M_sp, M_amb, Y_sp_inf, visk_amb, rho_amb,omega_amb_x, omega_amb_y, omega_amb_z, K) StopEvent(t,m, T_amb, p_amb,comp, M_sp, M_amb, Y_sp_inf, visk_amb, rho_amb,omega_amb_x, omega_amb_y, omega_amb_z, K),'Refine', 1);
function [position,isterminal,direction] = StopEvent(~,m, ~, ~,~, ~, ~, ~, ~, ~,~, ~, ~, ~)
position = m(1)>=5e-8;
isterminal = 1;
direction = 0;
Related Question