1function lqn=QN2LQN(model)
3lqn = LayeredNetwork(model.getName());
6PH = Host(lqn, model.getName(), Inf, SchedStrategy.INF); % pseudo host
8 inchain = sn.inchain{c};
9 RT{c} = Task(lqn,[
'RefTask_',num2str(c)], sum(sn.njobs(inchain)), SchedStrategy.REF).on(PH); % reference task
for chain c
10 RE{c} = Entry(lqn,[
'Chain_',num2str(c)]).on(RT{c}); % entry on reference task
for chain c
15 case {NodeType.Queue, NodeType.Delay}
16 P{i} = Host(lqn, sn.nodenames{i}, sn.nservers(sn.nodeToStation(i)), SchedStrategy.fromId(sn.sched(sn.nodeToStation(i))));
17 T{i} = Task(lqn,[
'T_',sn.nodenames{i}], Inf, SchedStrategy.INF).on(
P{i});
19 c = find(sn.chains(:,r)); % chain of
class r
21 E{i,r} = Entry(lqn, [
'E',num2str(i),
'_',num2str(r)]).on(T{i});
22 A{i,r} = Activity(lqn, [
'Q',num2str(i),
'_',num2str(r)], model.nodes{i}.getServiceProcess(model.classes{r})).on(T{i}).boundTo(E{i,r}).repliesTo(E{i,r});
25 case NodeType.ClassSwitch
28 line_error(mfilename,sprintf(
'Node type %s is not yet supported.\n',NodeType.toText(sn.nodetype(i))));
32boundToRE = cell(1,sn.nchains);
35 case {NodeType.ClassSwitch}
37 c = find(sn.chains(:,r)); % chain of
class r
38 if any(sn.rtnodes(:, ((i-1)*sn.nclasses + r))>0)
39 PA{c,i,r} = Activity(lqn, [
'CS',
'_',num2str(c),
'_',num2str(i),
'_',num2str(r)], Immediate()).on(RT{c}); % pseudo-activity in ref task
42 case {NodeType.Queue, NodeType.Delay}
44 c = find(sn.chains(:,r)); % chain of
class r
46 inchain = sn.inchain{c};
47 if i == sn.refstat(inchain(1)) && r == inchain(1)
48 PA{c,i,r} = Activity(lqn, [
'A',num2str(i),
'_',num2str(r)], Immediate()).on(RT{c}).boundTo(RE{c}).synchCall(E{i,r}); % pseudo-activity in ref task
51 PA{c,i,r} = Activity(lqn, [
'A',num2str(i),
'_',num2str(r)], Immediate()).on(RT{c}).synchCall(E{i,r}); % pseudo-activity in ref task
53 %RT{c}.addPrecedence(ActivityPrecedence.Serial(PN{c,i},PA{i,r}));
56 case NodeType.ClassSwitch
59 line_error(mfilename,sprintf(
'Node type %s is not yet supported.\n',NodeType.toText(sn.nodetype(i))));
63usedInORFork = zeros(sn.nnodes,sn.nclasses);
65 inchain = sn.inchain{c};
66 %refstat = sn.refstat(inchain(1));
69 case {NodeType.Queue, NodeType.Delay,NodeType.ClassSwitch}
75 case {NodeType.Queue, NodeType.Delay,NodeType.ClassSwitch}
77 pr = sn.rtnodes((i-1)*sn.nclasses + r, (j-1)*sn.nclasses + s);
78 if pr>0 && any(sn.rtnodes(:, ((i-1)*sn.nclasses + r))>0)
79 if ~isempty(boundToRE{c})
80 if boundToRE{c}(1)==j && boundToRE{c}(2)==s
81 if ~isempty(PA{c,i,r})
82 orfork_prec{end+1} = Activity(lqn, [
'End_',num2str(c),
'_',num2str(i),
'_',num2str(r)], Immediate()).on(RT{c});
83 orfork_prob(end+1)= pr;
86 orfork_prec{end+1} = PA{c,j,s};
87 orfork_prob(end+1) = pr;
94 if ~isempty(orfork_prec)
95 if ~isempty(PA{c,i,r})
96 RT{c}.addPrecedence(ActivityPrecedence.OrFork(PA{c,i,r}, orfork_prec, orfork_prob));
97 usedInORFork(i,r) = usedInORFork(i,r) + 1;