MaterialStockReservoir that cannot be drained below zero |
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.
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;
inflow
and outflow
→StockPorts are only indicative; in general the reservoir may be filled or drained by flows connected to either port.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.init
in the Advanced tab allows to select →InitializationOptions:initialValue
to determine the initial value.der(x) = 0
in order to find an initial value that establishes equilibrium. initialValue
-- in this case used as a start value for numerical iteration -- should be set to a value different from zero.)init |
Value: modelSettings.init Type: InitializationOptions Description: Provide InitializationOptions (Free, FixedValue, SteadyState) |
---|---|
hasStockInfoOutput |
Value: false Type: Boolean Description: = true, if a StockInfoOutput should be added to the stock |
initialValue |
Value: 0 Type: OutputType Description: Initial level (should be different from 0 to find non-trivial steady state solution) |
maxValue |
Value: inf Type: OutputType Description: Maximum admissable value |
minValue |
Value: zero Type: OutputType Description: Minimum admissable value |
useAssert |
Value: false Type: Boolean Description: = true, if leaving the admissable range is to cause an error or warning |
causeError |
Value: true Type: Boolean Description: = true, if leaving the admissable range is to cause an error instead of simply a warning |
reinitializeStock |
Value: false Type: Boolean Description: = true, if the stock is to be reinitalized to guarante nonnegativity |
y |
Type: RealOutput Description: Level or rate information |
|
---|---|---|
y1 |
Type: RealOutput Description: Level or rate information |
|
y2 |
Type: RealOutput Description: Level or rate information |
|
inflow |
Type: StockPort Description: Inflow port of the stock |
|
outflow |
Type: StockPort Description: Outflow port of the stock |
|
y_stockInfo |
Type: StockInfoOutput Description: Optional StockInfoOutput |
modelSettings |
Type: ModelSettings Description: Setting important global variables within a model |
|
---|---|---|
stockInfoSensor |
Type: StockInfo Description: Collect basic stock-related information for basic stocks |
|
rangeControl |
Type: RangeAssert Description: Use assert() to check admissable values |
BusinessSimulation.Examples A first example |
|
BusinessSimulation.Examples Extending the first example to include replacement purchases |
|
BusinessSimulation.Examples Further extending the first example to explain new product diffusion |
|
BusinessSimulation.Examples Classical epidemic model by Kermack and McKendrick |
|
BusinessSimulation.Examples Predator-prey dynamics |
|
LotkaVolterraEquationsRevisited BusinessSimulation.Examples Predator-prey dynamics with an additional predator |
|
BusinessSimulation.Examples Modeling a production process |
BusinessSimulation.CausalLoop Information level for CLD-mapping |