1function out = ncDispatch(self, sn, options)
2% OUT = NCDISPATCH(SN, OPTIONS)
4% One inner solve of the normalizing-constant analyzer, in the contract that
5% @NetworkSolver/fjFixedPoint.m expects (see @SolverMVA/mvaDispatch.m). It
is
6% used on the fork-join path only: the MMT transformation returns a plain
7% mixed queueing network, so the specialised NC routes (order-independent,
8% cache, loss network, finite capacity regions) cannot apply to it, and the
9% load-dependent route
is selected here exactly as runAnalyzer does.
11% The auxiliary open classes that carry the parallelism start at an arrival
12% rate of GlobalConstants.FineTol. On an open transformed model the analyzer
13% resolves them with the exact open-network formulas, so no method
override is
14% needed; on a closed or mixed one the normalizing constant has to separate a
15% chain whose throughput
is ~1e-8, which
is where the accuracy of
this path
16% has to be judged (see the fork-join tests).
18% Copyright (c) 2012-2026, Imperial College London
22if ~isempty(sn.lldscaling) || ~isempty(sn.cdscaling) || ~isempty(sn.jdscaling)
23 [QN,UN,RN,TN,CN,XN,lG,runtime,lastiter,actualmethod] = solver_ncld_analyzer(sn, subopts);
25 [QN,UN,RN,TN,CN,XN,lG,runtime,lastiter,actualmethod] = solver_nc_analyzer(sn, subopts);
28out =
struct(
'QN', QN,
'UN', UN,
'RN', RN,
'TN', TN,
'CN', CN,
'XN', XN, ...
29 'lG', lG,
'runtime', runtime,
'lastiter', lastiter,
'method', options.method, ...
31if exist(
'actualmethod',
'var') && ~isempty(actualmethod)
32 out.actualmethod = actualmethod;