1function [init_sol, state] = solver_fluid_initsol(sn, options) %#ok<INUSD>
2% [INIT_SOL, STATE] = SOLVER_FLUID_INITSOL(QN, OPTIONS) %#OK<INUSD>
4% Copyright (c) 2012-2026, Imperial College London
7if nargin<2 %~exist(
'options',
'var')
8 options = Solver.defaultOptions; %
#ok<NASGU>
14 isf = sn.nodeToStateful(ind);
15 ist = sn.nodeToStation(ind);
16 % Skip non-station stateful
nodes like Router
21 init_sol_i = []; % compared to state_i,
this does not track disabled
classes and removes Inf entries in the Sources
22 [~, nir, ~, kir_i] = State.toMarginal(sn, ind, sn.state{isf});
24 case {SchedStrategy.EXT}
25 state_i(:,1) = Inf; % fluid does not model infinite buffer?
27 for k=1:length(sn.mu{ist}{r})
28 state_i(:,end+1) = kir_i(:,r,k);
29 if ~isnan(sn.rates(ist,r))
30 init_sol_i(:,end+1) = kir_i(:,r,k);
34 case {SchedStrategy.FCFS, SchedStrategy.SIRO, SchedStrategy.PS, SchedStrategy.INF, SchedStrategy.DPS, SchedStrategy.HOL}
36 for k=1:length(sn.mu{ist}{r})
38 state_i(:,end+1) = nir(:,r) - sum(kir_i(:,r,2:end),3); % jobs in waiting buffer are re-started phase 1
39 if ~isnan(sn.rates(ist,r))
40 init_sol_i(:,end+1) = nir(:,r) - sum(kir_i(:,r,2:end),3); % jobs in waiting buffer are re-started phase 1
43 state_i(:,end+1) = kir_i(:,r,k);
44 if ~isnan(sn.rates(ist,r))
45 init_sol_i(:,end+1) = kir_i(:,r,k);
51 line_error(mfilename,sprintf(
'Unsupported scheduling policy at station %d',ist));
54 init_sol = [init_sol, init_sol_i];