1function [taggedModel, taggedJob] = tagChain(model, chain,
jobclass, suffix)
2% the tagged job will be removed from the initial
3% population of JOBCLASS
4if nargin<4 || isempty(suffix)
10I = model.getNumberOfNodes;
11R = model.getNumberOfClasses;
12taggedModel = model.copy;
14% we don
't use rtNodesByClass because it contains the
15% fictitious class switching nodes
16Plinked = taggedModel.getLinkedRoutingMatrix;
17if ~iscell(Plinked) || isempty(Plinked)
18 line_error(mfilename, 'getCdfRespT
requires the original model to be linked with a routing matrix defined as a cell array
P{r,s}
for every
class pair (r,s).');
21taggedModel.resetNetwork; % resets cs Nodes as well
22taggedModel.reset(
true);
24chainIndexes = cell2mat(chain.index);
26 % create a tagged
class
27 taggedModel.classes{end+1,1} = taggedModel.classes{r}.copy;
28 taggedModel.classes{end,1}.index=length(taggedModel.classes);
29 taggedModel.classes{end,1}.name=[taggedModel.classes{r,1}.name,suffix];
31 taggedModel.classes{end}.population = 1;
33 taggedModel.classes{end}.population = 0;
36 % clone station sections
for tagged
class
37 for m=1:length(taggedModel.nodes)
38 taggedModel.stations{m}.output.outputStrategy{end+1} = taggedModel.stations{m}.output.outputStrategy{r};
41 for m=1:length(taggedModel.stations)
42 if model.stations{m}.server.serviceProcess{r}{end}.isDisabled
43 taggedModel.stations{m}.serviceProcess{end+1} = taggedModel.stations{m}.server.serviceProcess{end}{end}.copy;
44 taggedModel.stations{m}.server.serviceProcess{end+1} = taggedModel.stations{m}.server.serviceProcess{r};
45 taggedModel.stations{m}.server.serviceProcess{end}{end}=taggedModel.stations{m}.server.serviceProcess{r}{end}.copy;
46 taggedModel.stations{m}.schedStrategyPar(end+1) = 0;
47 taggedModel.stations{m}.dropRule(1,end+1) = -1;
48 taggedModel.stations{m}.classCap(1,r) = 0;
49 taggedModel.stations{m}.classCap(1,end+1) = 0;
51 taggedModel.stations{m}.serviceProcess{end+1} = taggedModel.stations{m}.server.serviceProcess{r}{end}.copy;
52 taggedModel.stations{m}.server.serviceProcess{end+1} = taggedModel.stations{m}.server.serviceProcess{r};
53 taggedModel.stations{m}.server.serviceProcess{end}{end}=taggedModel.stations{m}.server.serviceProcess{r}{end}.copy;
54 taggedModel.stations{m}.schedStrategyPar(end+1) = taggedModel.stations{m}.schedStrategyPar(r);
55 taggedModel.stations{m}.classCap(1,end+1) = 1;
56 taggedModel.stations{m}.dropRule(1,end+1) = -1;
57 taggedModel.stations{m}.classCap(1,r) = taggedModel.stations{m}.classCap(r) - 1;
62taggedModel.classes{
jobclass.index,1}.population = taggedModel.classes{
jobclass.index}.population - 1;
64for ir=1:length(chainIndexes)
66 for is=1:length(chainIndexes)
68 Plinked{R+ir,R+
is} = Plinked{r,s};
71Rp = taggedModel.getNumberOfClasses;
74 if isempty(Plinked{r,s})
75 Plinked{r,s} = zeros(I);
80taggedModel.link(Plinked);
81taggedModel.reset(
true);
82taggedModel.refreshStruct(
true);
83taggedModel.initDefault;
84tchains = taggedModel.getChains;
85taggedJob = tchains{end};