modelMaterialStock

Reservoir that cannot be drained below zero

Extends from Interfaces.PartialStocks.BasicStock (Unrestricted reservoir to store information), Icons.MaterialStockIndicator (General Icon for stocks).

Information

This information is part of the Business Simulation Library (BSL). Please support this work and ► donate.

This is a restricted reservoir of the system dynamics methodology, which accumulates material  (i.e., countable entities, some form of matter) transported by flow components connected to the component's StockPorts. The MaterialStock can never become negative – we are not collecting "antimatter" – and will prevent connected flow components from draining its value below zero.

Implementation

The value of the stock will be set to zero if the calculated value x is less than a very small positive amount and if reinitializeStock = true is chosen in the Advanced tab:

  if reinitializeStock then
    when x < 0 then
      reinit(x, 0);
    end when;
  end if;

MaterialStock components will prevent connected flows from draining the stock via their →StockPort connectors' Boolean flags, should the calculated value x be less than a very small positive amount:

  inflow.stopOutflow = not x > small;
  outflow.stopOutflow = inflow.stopOutflow;

Notes

  • The inflow and outflow →StockPorts are only indicative; in general the reservoir may be filled or drained by flows connected to either port.

  • The parameters maxValue and minValue allow to define an admissable range. It can be monitored by an assert using useAssert = true in the Advanced tab. The switch causeError controls whether an error or a warning is to be raised.

  • The parameter init in the Advanced tab allows to select →InitializationOptions:

    • FixedValue (default) will use the parameter initialValue to determine the initial value.

    • SteadyState will introduce the equation der(x) = 0 in order to find an initial value that establishes equilibrium.
      (Note: Such a solution may not exist and to avoid trivial solution in many cases initialValue -- in this case used as a start value for numerical iteration -- should be set to a value different from zero.)

    • Free there will be no initial equation and thus the solver is free in solving the initial value problem.

See also

InformationLevel, CapacityRestrictedStock

Parameters

TypeNameDefaultDescription
OutputTypeinitialValue (from BasicStock)0Initial level (should be different from 0 to find non-trivial steady state solution)
OutputTypemaxValue (from BasicStock)infMaximum admissable value
OutputTypeminValue (from BasicStock)-infMinimum admissable value
Advanced
InitializationOptionsinit (from GenericStock)InitializationOptions.FixedValueProvide InitializationOptions (Free, FixedValue, SteadyState)
BooleanuseAssert (from BasicStock)false= true, if leaving the admissable range is to cause an error or warning
BooleancauseError (from BasicStock)true= true, if leaving the admissable range is to cause an error instead of simply a warning
BooleanreinitializeStockfalse= true, if the stock is to be reinitalized to guarante nonnegativity
Structural Parameters
BooleanhasStockInfoOutput (from GenericStock)false= true, if a StockInfoOutput should be added to the stock

Connectors

TypeNameDefaultDescription
StockPortinflow (from GenericStock)Inflow port of the stock
StockPortoutflow (from GenericStock)Outflow port of the stock
StockInfoOutputy_stockInfo (from GenericStock)Optional StockInfoOutput

Components

TypeNameDefaultDescription
RealOutputy (from ThreeSO)Level or rate information
RealOutputy1 (from ThreeSO)Level or rate information
RealOutputy2 (from ThreeSO)Level or rate information
ModelSettingsmodelSettings (from BasicStock)