1function nvars = refreshLocalVars(self)
2% NVARS = REFRESHLOCALVARS()
4R = self.getNumberOfClasses;
5nvars = zeros(self.getNumberOfNodes, 2*R+1);
6nodeparam = cell(self.getNumberOfNodes, 1);
7rtnodes = self.sn.rtnodes;
11% nodeToPlace = zeros(1, self.getNumberOfNodes);
12% nodeToTransition = zeros(1, self.getNumberOfNodes);
13% for ind=1:self.getNumberOfNodes
14% node = self.getNodeByIndex(ind);
18% nodeToPlace(ind) = length(isp);
21% nodeToTransition(ind) = length(ist);
26for ind=1:self.getNumberOfNodes
27 node = self.getNodeByIndex(ind);
30 nvars(ind,2*R+1) = sum(node.itemLevelCap);
31 nodeparam{ind} =
struct();
32 nodeparam{ind}.nitems = 0;
33 nodeparam{ind}.accost = node.accessProb;
34 for r=1:self.getNumberOfClasses
35 if length(node.popularity) >= r && isa(node.popularity{r},
'Distribution') && ~node.popularity{r}.isDisabled
36 nodeparam{ind}.nitems = max(nodeparam{ind}.nitems,node.popularity{r}.support(2));
39 nodeparam{ind}.itemcap = node.itemLevelCap;
40 nodeparam{ind}.pread = cell(1,self.getNumberOfClasses);
41 for r=1:self.getNumberOfClasses
42 if length(node.popularity) < r || ~isa(node.popularity{r},
'Distribution') || node.popularity{r}.isDisabled
43 nodeparam{ind}.pread{r} = NaN;
45 nodeparam{ind}.pread{r} = node.popularity{r}.evalPMF(1:nodeparam{ind}.nitems);
48 nodeparam{ind}.replacestrat = node.replacestrategy;
49 nodeparam{ind}.hitclass = zeros(1,self.getNumberOfClasses);
50 nodeparam{ind}.hitclass(1:length(node.server.hitClass)) = round(node.server.hitClass);
51 nodeparam{ind}.missclass = zeros(1,self.getNumberOfClasses);
52 nodeparam{ind}.missclass(1:length(node.server.missClass)) = round(node.server.missClass);
54 nodeparam{ind}.fanOut = node.output.tasksPerLink;
56 nodeparam{ind}.joinStrategy = node.input.joinStrategy;
57 nodeparam{ind}.fanIn = cell(1,self.getNumberOfClasses);
58 for r=1:self.getNumberOfClasses
59 nodeparam{ind}.fanIn{r} = node.input.joinRequired{r};
62 nodeparam{ind}.fileName = node.fileName;
63 nodeparam{ind}.filePath = node.filePath;
64 nodeparam{ind}.startTime = node.getStartTime;
65 nodeparam{ind}.loggerName = node.getLoggerName;
66 nodeparam{ind}.timestamp = node.getTimestamp;
67 nodeparam{ind}.jobID = node.getJobID;
68 nodeparam{ind}.jobClass = node.getJobClass;
69 nodeparam{ind}.timeSameClass = node.getTimeSameClass;
70 nodeparam{ind}.timeAnyClass = node.getTimeAnyClass;
72 for r=1:self.getNumberOfClasses
73 switch class(node.arrivalProcess{r})
75 nvars(ind,r) = nvars(ind,r) + 1;
76 case {
'Replayer',
'Trace'}
77 if isempty(nodeparam{ind})
78 nodeparam{ind} = cell(1,self.getNumberOfClasses);
80 if isempty(nodeparam{ind}{r})
81 nodeparam{ind}{r} =
struct();
83 nodeparam{ind}{r}.(node.arrivalProcess{r}.params{1}.paramName) = node.arrivalProcess{r}.params{1}.paramValue;
86 case {
'Queue',
'QueueingStation',
'Delay',
'DelayStation',
'Transition'}
87 for r=1:self.getNumberOfClasses
88 switch class(node.server.serviceProcess{r}{3})
90 nvars(ind,r) = nvars(ind,r) + 1;
91 case {
'Replayer',
'Trace'}
92 if isempty(nodeparam{ind})
93 nodeparam{ind} = cell(1,self.getNumberOfClasses);
95 if isempty(nodeparam{ind}{r})
96 nodeparam{ind}{r} =
struct();
98 nodeparam{ind}{r}.(node.server.serviceProcess{r}{3}.params{1}.paramName) = node.server.serviceProcess{r}{3}.params{1}.paramValue;
100 if ~isa(node,
'Delay') && ~isa(node,
'Transition') && ~isempty(node.setupTime) && ~isempty(node.setupTime{r})
101 if isempty(nodeparam{ind})
102 nodeparam{ind} = cell(1,self.getNumberOfClasses);
104 if isempty(nodeparam{ind}{r})
105 nodeparam{ind}{r} =
struct();
107 nodeparam{ind}{r}.setupTime = node.setupTime{r}.getProcess();
108 nodeparam{ind}{r}.delayoffTime = node.delayoffTime{r}.getProcess();
110 if (isa(node,
'Queue') || isa(node,
'QueueingStation'))
111 if isempty(nodeparam{ind}) && (~isempty(node.pollingType) || ~isempty(node.switchoverTime))
112 nodeparam{ind} = cell(1,self.getNumberOfClasses);
113 for s=1:self.getNumberOfClasses
114 nodeparam{ind}{s} =
struct();
117 if ~isempty(node.pollingType) && ~isempty(node.pollingType{r})
118 nodeparam{ind}{r}.pollingType = node.pollingType{r};
119 nodeparam{ind}{r}.pollingPar = node.pollingPar;
121 if ~isempty(node.switchoverTime) && ~isempty(node.switchoverTime{r})
122 if min(size(node.switchoverTime))==1
123 nodeparam{ind}{r}.switchoverTime = node.switchoverTime{r}.getProcess();
124 nodeparam{ind}{r}.switchoverProcId = ProcessType.toId(ProcessType.fromText(
class(node.switchoverTime{r})));
126 for t=1:length(node.switchoverTime)
127 nodeparam{ind}{r}.switchoverTime{t} = node.switchoverTime{r,t}.getProcess();
128 nodeparam{ind}{r}.switchoverProcId(t) = ProcessType.toId(ProcessType.fromText(
class(node.switchoverTime{r,t})));
137 switch sn.routing(ind,r)
138 case RoutingStrategy.KCHOICES
139 nodeparam{ind}{r}.k = node.output.outputStrategy{r}{3}{1};
140 nodeparam{ind}{r}.withMemory = node.output.outputStrategy{r}{3}{2};
141 case RoutingStrategy.WRROBIN
142 nvars(ind,R+r) = nvars(ind,R+r) + 1;
143 % save indexes of outgoing links
144 if isempty(nodeparam) || isempty(nodeparam{ind}) % reinstantiate
if not a cache
145 nodeparam{ind}{r} =
struct();
147 nodeparam{ind}{r}.weights = zeros(1,self.sn.nnodes);
148 nodeparam{ind}{r}.outlinks = find(self.sn.connmatrix(ind,:));
149 for c=1:size(node.output.outputStrategy{1, r}{3},2)
150 destination = node.output.outputStrategy{1, r}{3}{c}{1};
151 weight = node.output.outputStrategy{1, r}{3}{c}{2};
152 nodeparam{ind}{r}.weights(destination.index) = weight;
154 case RoutingStrategy.RROBIN
155 nvars(ind,R+r) = nvars(ind,R+r) + 1;
156 % save indexes of outgoing links
157 if isempty(nodeparam) || isempty(nodeparam{ind}) % reinstantiate
if not a cache
158 nodeparam{ind}{r} =
struct();
160 nodeparam{ind}{r}.outlinks = find(self.sn.connmatrix(ind,:));
165if ~isempty(self.sn) %&& isprop(self.sn,
'nvars')
166 self.sn.nvars = nvars;
167 self.sn.nodeparam = nodeparam;