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