Utopia 2
Framework for studying models of complex & adaptive systems.
|
#include <SandPile.hh>
Public Types | |
using | Base = Model< SandPile, SandPileTypes > |
The base model's type. | |
using | CellManager = Utopia::CellManager< CellTraits, SandPile > |
The type of the cell manager. | |
using | Cell = typename CellManager::Cell |
Cell type. | |
using | CellContainer = std::vector< std::shared_ptr< Cell > > |
Cell container type. | |
using | RuleFunc = typename CellManager::RuleFunc |
Supply a type for rule functions that are applied to cells. | |
using | DataSet = typename Base::DataSet |
Data type for a dataset. | |
using | UniformIntDist = typename std::uniform_int_distribution< std::size_t > |
The uniform integer distribution type to use. | |
![]() | |
using | Config = typename ModelTypes::Config |
Data type that holds the configuration. | |
using | DataManager = DataIO::Default::DefaultDataManager< SandPile > |
The data manager to use, specialized with the derived model. | |
using | DataGroup = typename ModelTypes::DataGroup |
Data type that is used for storing datasets. | |
using | DataSet = typename ModelTypes::DataSet |
Data type that is used for storing data. | |
using | RNG = typename ModelTypes::RNG |
Data type of the shared RNG. | |
using | Space = typename ModelTypes::Space |
Data type of the space this model resides in. | |
using | Time = typename ModelTypes::Time |
Data type for the model time. | |
using | Monitor = typename ModelTypes::Monitor |
Data type for the monitor. | |
using | MonitorManager = typename ModelTypes::MonitorManager |
Data type for the monitor manager. | |
using | Level = typename ModelTypes::Level |
Data type for the hierarchical level. | |
Public Member Functions | |
template<class ParentModel > | |
SandPile (const std::string &name, ParentModel &parent_model, const DataIO::Config &custom_cfg={}) | |
Construct the SandPile model. | |
void | perform_step () |
Perform an iteration step. | |
void | monitor () |
Supply monitor information to the frontend. | |
void | write_data () |
Write the cell slope and avalanche flag to the datasets. | |
![]() | |
Model (const std::string &name, const ParentModel &parent_model, const Config &custom_cfg={}, std::tuple< WriterArgs... > w_args={}, const DataIO::Default::DefaultDecidermap< SandPile > &w_deciders=DataIO::Default::default_deciders< SandPile >, const DataIO::Default::DefaultTriggermap< SandPile > &w_triggers=DataIO::Default::default_triggers< SandPile >) | |
Constructs a Model instance. | |
const std::shared_ptr< Space > & | get_space () const |
Return the space this model resides in. | |
Time | get_time () const |
Return the current time of this model. | |
Time | get_time_max () const |
Return the maximum time possible for this model. | |
Config | get_cfg () const |
Return the config node of this model. | |
std::string | get_name () const |
Return the name of this model instance. | |
std::string | get_full_name () const |
Return the full name of this model within the model hierarchy. | |
std::shared_ptr< DataGroup > | get_hdfgrp () const |
Return a pointer to the HDF group this model stores data in. | |
Time | get_write_start () const |
Return the parameter that controls when write_data is called first. | |
Time | get_write_every () const |
Return the parameter that controls how often write_data is called. | |
DataManager | get_datamanager () const |
return the datamanager | |
hsize_t | get_remaining_num_writes () const |
Return the number of remaining write_data calls this model will make. | |
std::shared_ptr< RNG > | get_rng () const |
Return a pointer to the shared RNG. | |
std::shared_ptr< spdlog::logger > | get_logger () const |
Return a pointer to the logger of this model. | |
Monitor | get_monitor () const |
Return the monitor of this model. | |
std::shared_ptr< MonitorManager > | get_monitor_manager () const |
Get the monitor manager of the root model. | |
Level | get_level () const |
Return the hierarchical level within the model hierarchy. | |
virtual void | prolog () |
A function that is called before starting model iteration. | |
virtual void | epilog () |
A function that is called after the last iteration of a model. | |
void | iterate () |
Iterate one (time) step of this model. | |
void | run () |
Run the model from the current time to the maximum time. | |
std::shared_ptr< DataSet > | create_dset (const std::string name, const std::shared_ptr< DataGroup > &hdfgrp, std::vector< hsize_t > add_write_shape, const std::size_t compression_level=1, const std::vector< hsize_t > chunksize={}) |
Create a new dataset within the given group. | |
std::shared_ptr< DataSet > | create_dset (const std::string name, const std::vector< hsize_t > add_write_shape, const std::size_t compression_level=1, const std::vector< hsize_t > chunksize={}) |
Create a new dataset within the model's base data group. | |
std::shared_ptr< DataSet > | create_cm_dset (const std::string name, const CellManager &cm, const std::size_t compression_level=1, const std::vector< hsize_t > chunksize={}) |
Create a dataset storing data from a CellManager. | |
std::shared_ptr< DataSet > | create_am_dset (const std::string name, const AgentManager &am, const std::size_t compression_level=1, const std::vector< hsize_t > chunksize={}) |
Create a dataset storing data from a AgentManager. | |
Private Member Functions | |
unsigned int | avalanche_size () const |
Calculate the avalanche size. | |
const std::shared_ptr< Cell > & | add_sand_grain () |
Select a random cell, add a grain of sand to it, and return it. | |
void | topple (const std::shared_ptr< Cell > &first_cell) |
Topple cells if the critical slope is exceeded. | |
Private Attributes | |
CellManager | _cm |
The grid manager. | |
const Slope | _critical_slope |
The critical slope of the cells. | |
const unsigned int | _topple_num_grains |
The number of grains that topple; depends on the neighborhood size. | |
const bool | _write_only_avalanche_size |
If true, will only store the avalanche size, not the spatial data. | |
UniformIntDist | _cell_distr |
A distribution to select a random cell. | |
const std::shared_ptr< DataSet > | _dset_slope |
Dataset to store the slopes of all cells for all time steps. | |
const std::shared_ptr< DataSet > | _dset_avalanche |
Dataset to store the avalanche state of all cells for all time steps. | |
const std::shared_ptr< DataSet > | _dset_avalanche_size |
Dataset to store the avalanche size for each time step. | |
RuleFunc | _reset |
Resets cells for the next iteration. | |
Additional Inherited Members | |
![]() | |
void | __perform_step () |
Perform the computation of a step. | |
void | __monitor () |
Monitor information in the terminal. | |
void | __write_data () |
Write data; calls the implementation's write_data method. | |
void | __write_initial_state () |
Write the initial state. | |
void | increment_time (const Time dt=1) |
Increment time. | |
void | __prolog () |
The default prolog of a model. | |
void | __epilog () |
The default epilog of a model. | |
SandPile & | impl () |
cast to the derived class | |
const SandPile & | impl () const |
const cast to the derived interface | |
![]() | |
const std::string | _name |
Name of the model instance. | |
const std::string | _full_name |
The full name within the model hierarchy. | |
const Level | _level |
The level within the model hierarchy. | |
const Config | _cfg |
Config node belonging to this model instance. | |
const std::shared_ptr< RNG > | _rng |
The RNG shared between models. | |
const std::shared_ptr< spdlog::logger > | _log |
The (model) logger. | |
std::shared_ptr< Space > | _space |
The space this model resides in. | |
Time | _time |
Model-internal current time stamp. | |
const Time | _time_max |
Model-internal maximum time stamp. | |
const std::shared_ptr< DataGroup > | _hdfgrp |
The HDF group this model instance should write its data to. | |
const Time | _write_start |
First time at which write_data is called. | |
const Time | _write_every |
How often to call write_data from iterate. | |
Monitor | _monitor |
The monitor. | |
DataManager | _datamanager |
Manager object for handling data output; see DataManager. | |
![]() | |
static constexpr WriteMode | _write_mode |
Which data-writing mode the base model should use. | |
The SandPile model simulates a sand pile under the influence of new grains of sand that get added every iteration. The sand reaches a critical state _critical_slope, after which it collapses, passing sand on to the neighboring cells
The base model's type.
using Utopia::Models::SandPile::SandPile::CellContainer = std::vector<std::shared_ptr<Cell> > |
Cell container type.
The type of the cell manager.
Data type for a dataset.
Supply a type for rule functions that are applied to cells.
using Utopia::Models::SandPile::SandPile::UniformIntDist = typename std::uniform_int_distribution<std::size_t> |
The uniform integer distribution type to use.
|
inline |
Construct the SandPile model.
name | Name of this model instance; is used to extract the configuration from the parent model and set up a HDFGroup for this instance |
parent_model | The parent model this model instance resides in |
custom_cfg | A custom configuration to use instead of the one extracted from the parent model using the instance name |
|
inlineprivate |
Select a random cell, add a grain of sand to it, and return it.
Calculate the avalanche size.
Counts all cells that are marked as in_avalanche
.
|
inline |
Supply monitor information to the frontend.
Provides 'avalanche_size' at the current time step
|
inline |
Perform an iteration step.
|
inlineprivate |
Topple cells if the critical slope is exceeded.
Starting from the first_cell, every time a cell topples the neighbors are also checked whether they need to topple. This is implemented by adding them into a queue and toppling until the queue is empty.
first_cell | The first cell from which the topple avalanche starts |
|
inline |
Write the cell slope and avalanche flag to the datasets.
|
private |
A distribution to select a random cell.
|
private |
The grid manager.
The critical slope of the cells.
Dataset to store the avalanche state of all cells for all time steps.
Dataset to store the avalanche size for each time step.
Dataset to store the slopes of all cells for all time steps.
|
private |
The number of grains that topple; depends on the neighborhood size.
If true, will only store the avalanche size, not the spatial data.