1function jumps = ode_jumps_new(M, K, enabled, q_indices,
P, Kic)
2% JUMPS = ODE_JUMPS_NEW(M, K, MATCH, Q_INDICES,
P, KIC, STRATEGY)
4jumps = []; %returns state changes triggered by all the events
5jump = zeros( sum(sum(Kic)), 1 );
6for i = 1 : M %state changes from departures in service phases 2...
9 xic = q_indices(i,c); % index of x_ic
12 if P((i-1)*K+c,(j-1)*K+l) > 0
13 xjl = q_indices(j,l); % index of x_jl
14 for ki = 1 : Kic(i,c) % job can leave from any phase in i
15 for kj = 1 : Kic(j,l) % job can start from any phase in j
16 jump = 0*jump; % reuse same vector
for efficiency
17 jump(xic+ki-1) = jump(xic+ki-1) - 1; %type c in stat i completes service
18 jump(xjl+kj-1) = jump(xjl+kj-1) + 1; %type c job starts in stat j
19 jumps = [jumps jump;];
28for i = 1 : M %state changes:
"next service phase" transition
32 for ki = 1 : (Kic(i,c) - 1)
35 jump = 0*jump; % reuse same vector
for efficiency
36 jump(xic+ki-1) = jump(xic+ki-1) - 1;
37 jump(xic+kip-1) = jump(xic+kip-1) + 1;
38 jumps = [jumps jump;];