The models in the MARCA_Models collection may be modified in two distinct ways.
4 ** Number of buckets
100 100 100 100 ** Maximum values
0 0 0 100 ** Initial state
4 ** Buckets generating trans.
1 3 2 3 4 ** Transitions from bucket 1
2 1 1 ** bucket 2
3 1 1 ** bucket 3
4 1 1 ** bucket 4
**********************************************************************
*** EXPLANATION OF INPUT DATA FOR NCD EXAMPLE ***
**********************************************************************
This file contains ten data sets.
Observe the final data set immediately above,
and use its structure as an example. It is for N = 100
For each data set:
Only lines 2 and 3 vary.
Line 2 must have the values: N N N N
and line 3, the values 0 0 0 N
Therefore to change the number of customers, N, in this queueing
network, it is sufficient to change the values on lines 2 and 3.
If you wish to run larger examples that these, you will need
to increase the size of the work arrays in the main program.
**********************************************************************
Values of N, n and nz for the 10 datasets provided:
N n nz
10 286 1,606
20 1,771 11,011
30 5,456 35,216
40 12,341 81,221
50 23,426 156,026
60 39,711 266,631
70 62,196 420,036
80 91,881 623,241
90 129,766 883,246
100 176,851 1,207,051
**********************************************************************
Observe that the file ends by giving the number of states in the model, n,
and the number of nonzeros, nz, for each of the 10 different data sets
(i.e., for each of the 10 different numbers of customers in the network).
**********************************************************************
subroutine rate(L1,L2,istate,into,L,r,icomm,rcomm)
implicit double precision (a-h,o-z)
dimension istate(L),into(L)
dimension rcomm(*),icomm(*)
c *** This subroutine is called for each process, L1 ***
c *** Rates for process L1 ***
c *** r = 1/L1 for accessing resource, if available.
c *** r = 1*L1 for releasing resource.
c *** These may be modified by altering
c *** lines *+10 and/or *+17 below .
do 1 i=1,L
into(i)=istate(i)
1 continue
r=0.0d0
if (into(L1).eq.0 .and. into(1).gt.0) then
into(L1) = 1
into(1) = into(1)-1
r = 1.0d0/L1
return
end if
if (into(L1).eq.1) then
into(L1) = 0
into(1) = into(1)+1
r = 1.0d0*L1
return
end if
return
end
**********************************************************************
In this case, process L1 requests a unit of resource at rate 1/L1.
When in possession of a unit of resource, it releases it at rate L1.
(For example, process 2 requests a unit of resource at rate 0.5
per time unit, and releases it at a rate of 2.0 per time unit.)