LINE Solver (C++)
Templated C++ port of the LINE queueing solver
Loading...
Searching...
No Matches
mfq_fluflu_sojourn.h File Reference

Sojourn-time distribution of a fluid queue whose SERVICE is itself a Markov-modulated fluid flow, as an ME or PH representation (alpha, A). More...

#include <cstddef>
#include <vector>
#include "line/api/mam/mfq_solve.h"
#include "line/api/mam/mfq_sojourn.h"
#include "line/api/mam/mmap_lambda.h"
#include "line/api/mc/ctmc_solve.h"
#include "line/num/number.h"
#include "line/util/error.h"
#include "line/util/linalg.h"
#include "line/util/matrix.h"
Include dependency graph for mfq_fluflu_sojourn.h:

Go to the source code of this file.

Namespaces

namespace  line
namespace  line::mam

Functions

template<class T>
MeRepresentation< T > line::mam::mfq_fluflu_sojourn (const Matrix< T > &Qin, const Matrix< T > &Rin, const Matrix< T > &Qout, const Matrix< T > &Rout, bool srv0stop, bool transToPH, const T &prec)
 Sojourn time of a drop in a fluid queue with fluid-modulated service.
template<class T>
MeRepresentation< T > line::mam::mfq_fluflu_sojourn (const Matrix< T > &Qin, const Matrix< T > &Rin, const Matrix< T > &Qout, const Matrix< T > &Rout, bool srv0stop)
 mfq_fluflu_sojourn with an ME representation and prec = 1e-14.

Detailed Description

Sojourn-time distribution of a fluid queue whose SERVICE is itself a Markov-modulated fluid flow, as an ME or PH representation (alpha, A).

Port of matlab/src/api/mam/mfq_fluflu_sojourn.m and the BUTools FluFluSTD it wraps. Arrivals are a fluid flow modulated by (Qin, Rin) and the server drains fluid at a rate modulated by an independent (Qout, Rout).

CONSTRUCTION. The two modulating chains are combined on the product space, but NOT as a plain Kronecker sum: because the two flows run on different clocks, the combined model is the TIME-CHANGED fluid queue

Rh = kron(Rin, I) - kron(I, Rout),
Qh = kron(Qin, Rout) + kron(Rin, Qout),

in which each chain's generator is weighted by the OTHER flow's rate. Qh is therefore not a generator, and mfq_general_solve does not require it to be: its algebra is generic. Solving that fluid model gives the level law of the queue, and the sojourn-time representation follows from it exactly as in mfq_sojourn, with the closing vector weighted by kron(Rin, I) when service continues while the server's own fluid level is at zero, and by kron(Rin, Rout)/mu when service stops there. That is the srv0stop flag, and it is the only place where the two conventions differ.

ARITHMETIC. Gated on num_traits<T>::has_transcendental through mfq_general_solve.

Definition in file mfq_fluflu_sojourn.h.