# Basic unit

class CBaseUnit

  Basic class for dynamic and steady-state models.

  It describes a mathematical model. A somewhat misleading name of the class is kept for compatibility reasons.

  Public Functions

  void ConfigureUnitStructures(const CBaseUnit *_other)

    Sets pointers and values of all required internal data.

    Parameters:

      _other – Pointer to an existing unit.

  std::string GetUnitName() const

    Returns the name of the unit.

    Basic unit information

    Returns:

      Name of the unit.

  std::string GetAuthorName() const

    Returns the name of unit’s author.

    Returns:

      Name of unit’s author.

  size_t GetVersion() const

    Returns the version of the unit.

    Returns:

      Version of the unit.

  std::string GetUniqueID() const

    Returns the unique identifier of the unit.

    Returns:

      Unique identifier of the unit.

  std::string GetHelpLink() const

    Returns the help link of the unit.

    Returns:

      Help link of the unit.

  void SetUnitName(const std::string &_name)

    Sets the name of the unit.

    Should be used in CBaseUnit::CreateBasicInfo() function only.

    Parameters:

      _name – Name of the unit.

  void SetAuthorName(const std::string &_author)

    Sets the name of unit’s author.

    Should be used in CBaseUnit::CreateBasicInfo() function only.

    Parameters:

      _author – Author’s name

  void SetVersion(size_t _version)

    Sets the version of the unit.

    Should be used in CBaseUnit::CreateBasicInfo() function only.

    Parameters:

      _version – Unit’s version.

  void SetUniqueID(const std::string &_id)

    Sets the unique identifier of the unit.

    Should be used in CBaseUnit::CreateBasicInfo() function only.

    Parameters:

      _id – Identifier of the unit. Must be unique among all units in the library.

  void SetHelpLink(const std::string &_helpLink)

    Sets the help link of the unit.

    Parameters:

      _helpLink – Help link of the unit.

  const CPortsManager &GetPortsManager() const

    Returns a const reference to ports manager.

    Can be used for centralized access to ports.

    Returns:

      Const reference to ports manager.

  CUnitPort *AddPort(const std::string &_portName, EUnitPort _type)

    Adds a port to the unit.

    Should be used in CBaseUnit::CreateBasicInfo() function only. If the unit already has a port with the same name, a logic_error exception is thrown.

    Parameters:

      - _portName – Name of the port. Must be unique within the unit.

      - _type – Type of the port.

    Returns:

      Pointer to the created port.

  const CUnitPort *GetPort(const std::string &_portName) const

    Returns a const pointer to the specified port of the unit.

    If no such port exists, a logic_error exception is thrown.

    Parameters:

      _portName – Name of the port.

    Returns:

      Const pointer to the port.

  CUnitPort *GetPort(const std::string &_portName)

    Returns a pointer to the specified port of the unit.

    If no such port exists, a logic_error exception is thrown.

    Parameters:

      _portName – Name of the port.

    Returns:

      Pointer to the port.

  CStream *GetPortStream(const std::string &_portName) const

    Returns a pointer to the stream connected to this port.

    If such port does not exist or empty, a logic_error exception is thrown.

    Parameters:

      _portName – Name of the port.

    Returns:

      Pointer to the connected stream.

  CStream *AddFeed(const std::string &_name)

    Adds a new feed to the unit.

    Adds a new feed with the specified name to the unit. The structure of the feed will be the same as the global streams structure (MD dimensions, phases, grids, compounds etc.). Name should be unique within the unit. If a feed with the given name already exists in the unit, a logic_error exception is thrown. Should be used in the CBaseUnit::CreateStructure() function; then the feed will be automatically handled by the simulation system (saved and loaded during the simulation, cleared and removed after use). However, it is allowed to add feed outside CBaseUnit::CreateStructure() for temporal purposes, but you have to save, load (in the functions CBaseUnit::SaveState(), CBaseUnit::LoadState()) and remove this feed (by calling CBaseUnit::RemoveFeed()) manually. Otherwise, all such feeds will be removed at the end of the simulation. This function returns the pointer to a created feed. This pointer should not be used inside the CBaseUnit::CreateStructure() function, since all changes of the feed made through this pointer will be discarded during the initialization of the unit.

    Parameters:

      _name – Name of the feed.

    Returns:

      Pointer to the added feed.

  const CStream *GetFeed(const std::string &_name) const

    Returns a const pointer to the feed with the specified name.

    If such feed does not exist, a logic_error exception is thrown. The returned pointer should not be used inside the CBaseUnit::CreateStructure() function, since all changes of the feed made through this pointer will be discarded during the initialization of the unit.

    Parameters:

      _name – Name of the feed.

    Returns:

      Const pointer to the feed.

  CStream *GetFeed(const std::string &_name)

    Returns a pointer to the feed with the specified name.

    If such feed does not exist, a logic_error exception is thrown. The returned pointer should not be used inside the CBaseUnit::CreateStructure() function, since all changes of the feed made through this pointer will be discarded during the initialization of the unit.

    Parameters:

      _name – Name of the feed.

    Returns:

      Pointer to the feed.

  void RemoveFeed(const std::string &_name)

    Removes the feed with the specified name from the unit.

    If such feed does not exist, a logic_error exception is thrown. Should be used only for those feeds, which have been added to the unit outside the CBaseUnit::CreateStructure().

    Parameters:

      _name – Name of the feed.

  CHoldup *AddHoldup(const std::string &_name)

    Adds a new holdup to the unit.

    Adds a new holdup with the specified name to the unit. The structure of the holdup will be the same as the global streams structure (MD dimensions, phases, grids, compounds etc.). Name should be unique within the unit. If a holdup with the given name already exists in the unit, a logic_error exception is thrown. Should be used in the CBaseUnit::CreateStructure() function; then the holdup will be automatically handled by the simulation system (saved and loaded during the simulation, cleared and removed after use). However, it is allowed to add holdup outside CBaseUnit::CreateStructure() for temporal purposes, but you have to save, load (in the functions CBaseUnit::SaveState(), CBaseUnit::LoadState()) and remove this holdup (by calling CBaseUnit::RemoveFeed()) manually. Otherwise, all such holdups will be removed at the end of the simulation. This function returns the pointer to a created holdup. This pointer should not be used inside the CBaseUnit::CreateStructure() function, since all changes of the holdup made through this pointer will be discarded during the initialization of the unit.

    Parameters:

      _name – Name of the holdup.

    Returns:

      Pointer to the added holdup.

  const CHoldup *GetHoldup(const std::string &_name) const

    Returns a const pointer to the holdup with the specified name.

    If such holdup does not exist, a logic_error exception is thrown. The returned pointer should not be used inside the CBaseUnit::CreateStructure() function, since all changes of the holdup made through this pointer will be discarded during the initialization of the unit.

    Parameters:

      _name – Name of the holdup.

    Returns:

      Const pointer to the holdup.

  CHoldup *GetHoldup(const std::string &_name)

    Returns a pointer to the holdup with the specified name.

    If such holdup does not exist, a logic_error exception is thrown. The returned pointer should not be used inside the CBaseUnit::CreateStructure() function, since all changes of the holdup made through this pointer will be discarded during the initialization of the unit.

    Parameters:

      _name – Name of the holdup.

    Returns:

      Pointer to the holdup.

  void RemoveHoldup(const std::string &_name)

    Removes the holdup with the specified name from the unit.

    If such holdup does not exist, a logic_error exception is thrown. Should be used only for those holdups, which have been added to the unit outside the CBaseUnit::CreateStructure().

    Parameters:

      _name – Name of the holdup.

  CStream *AddStream(const std::string &_name)

    Adds a new stream to the unit.

    Adds a new stream with the specified name to the unit. The structure of the stream will be the same as the global streams structure (MD dimensions, phases, grids, compounds etc.). Name should be unique within the unit. If a stream with the given name already exists in the unit, a logic_error exception is thrown. Should be used in the CBaseUnit::CreateStructure() function; then the stream will be automatically handled by the simulation system (saved and loaded during the simulation, cleared and removed after use). However, it is allowed to add stream outside CBaseUnit::CreateStructure() for temporal purposes, but you have to save, load (in the functions CBaseUnit::SaveState(), CBaseUnit::LoadState()) and remove this stream (by calling CBaseUnit::RemoveFeed()) manually. Otherwise, all such streams will be removed at the end of the simulation. This function returns the pointer to a created stream. This pointer should not be used inside the CBaseUnit::CreateStructure() function, since all changes of the stream made through this pointer will be discarded during the initialization of the unit.

    Parameters:

      _name – Name of the stream.

    Returns:

      Pointer to the added stream.

  const CStream *GetStream(const std::string &_name) const

    Returns a const pointer to the stream with the specified name.

    If such stream does not exist, a logic_error exception is thrown. The returned pointer should not be used inside the CBaseUnit::CreateStructure() function, since all changes of the stream made through this pointer will be discarded during the initialization of the unit.

    Parameters:

      _name – Name of the stream.

    Returns:

      Const pointer to the stream.

  CStream *GetStream(const std::string &_name)

    Returns a pointer to the stream with the specified name.

    If such stream does not exist, a logic_error exception is thrown. The returned pointer should not be used inside the CBaseUnit::CreateStructure() function, since all changes of the stream made through this pointer will be discarded during the initialization of the unit.

    Parameters:

      _name – Name of the stream.

    Returns:

      Pointer to the stream.

  void RemoveStream(const std::string &_name)

    Removes the stream with the specified name from the unit.

    If such stream does not exist, a logic_error exception is thrown. Should be used only for those streams, which have been added to the unit outside the CBaseUnit::CreateStructure().

    Parameters:

      _name – Name of the stream.

  const CUnitParametersManager &GetUnitParametersManager() const

    Returns a const reference to unit parameters manager.

    Can be used for centralized access to unit parameters.

    Returns:

      Const reference to unit parameters manager.

  CConstRealUnitParameter *AddConstRealParameter(const std::string &_name, double _initValue, const std::string &_units, const std::string &_description, double _minValue = std::numeric_limits<double>::lowest(), double _maxValue = std::numeric_limits<double>::max())

    Adds a new real constant unit parameter to the unit.

    Should be used in the CBaseUnit::CreateStructure() function. Adds the possibility to specify one real value as a parameter. The name of the parameter should be unique within the unit. If the unit already has a parameter with the same name, logic_error exception is thrown. Boundary values are only a recommendation to the user, and going beyond them will only result in a warning to the user. Boundary values are optional; if they are not specified, the limits do not apply.

    Parameters:

      - _name – Name of the unit parameter.

      - _initValue – Initial value.

      - _units – Units of measurement.

      - _description – Extended parameter description.

      - _minValue – Minimum boundary value of the parameter.

      - _maxValue – Maximum boundary value of the parameter.

    Returns:

      Pointer to the added unit parameter.

  CConstIntUnitParameter *AddConstIntParameter(const std::string &_name, int64_t _initValue, const std::string &_units, const std::string &_description, int64_t _minValue = std::numeric_limits<int64_t>::lowest(), int64_t _maxValue = std::numeric_limits<int64_t>::max())

    Adds a new signed integer constant unit parameter to the unit.

    Should be used in the CBaseUnit::CreateStructure() function. Adds the possibility to specify one signed integer value as a parameter. The name of the parameter should be unique within the unit. If the unit already has a parameter with the same name, logic_error exception is thrown. Boundary values are only a recommendation to the user, and going beyond them will only result in a warning to the user. Boundary values are optional; if they are not specified, the limits do not apply.

    Parameters:

      - _name – Name of the unit parameter.

      - _initValue – Initial value.

      - _units – Units of measurement.

      - _description – Extended parameter description.

      - _minValue – Minimum boundary value of the parameter.

      - _maxValue – Maximum boundary value of the parameter.

    Returns:

      Pointer to the added unit parameter.

  CConstUIntUnitParameter *AddConstUIntParameter(const std::string &_name, uint64_t _initValue, const std::string &_units, const std::string &_description, uint64_t _minValue = std::numeric_limits<uint64_t>::lowest(), uint64_t _maxValue = std::numeric_limits<uint64_t>::max())

    Adds a new unsigned integer constant unit parameter to the unit.

    Should be used in the CBaseUnit::CreateStructure() function. Adds the possibility to specify one unsigned integer value as a parameter. The name of the parameter should be unique within the unit. If the unit already has a parameter with the same name, logic_error exception is thrown. Boundary values are only a recommendation to the user, and going beyond them will only result in a warning to the user. Boundary values are optional; if they are not specified, the limits do not apply.

    Parameters:

      - _name – Name of the unit parameter.

      - _initValue – Initial value.

      - _units – Units of measurement.

      - _description – Extended parameter description.

      - _minValue – Minimum boundary value of the parameter.

      - _maxValue – Maximum boundary value of the parameter.

    Returns:

      Pointer to the added unit parameter.

  CDependentUnitParameter *AddDependentParameter(const std::string &_valueName, double _valueInit, const std::string &_valueUnits, const std::string &_paramName, double _paramInit, const std::string &_paramUnits, const std::string &_description, double _valueMin = std::numeric_limits<double>::lowest(), double _valueMax = std::numeric_limits<double>::max(), double _paramMin = std::numeric_limits<double>::lowest(), double _paramMax = std::numeric_limits<double>::max())

    Adds a new dependent unit parameter to the unit.

    Should be used in the CBaseUnit::CreateStructure() function. Adds the possibility to specify dependency between two values. The name of the parameter should be unique within the unit. If the unit already has a parameter with the same name, logic_error exception is thrown. Boundary values are only a recommendation to the user, and going beyond them will only result in a warning to the user. Boundary values are optional; if they are not specified, the limits do not apply.

    Parameters:

      - _valueName – Name of the value and the unit parameter.

      - _valueInit – Initial value.

      - _valueUnits – Units of measurement of values.

      - _paramName – Name of the parameter.

      - _paramInit – Initial value of the parameter.

      - _paramUnits – Units of measurement of parameters.

      - _description – Extended parameter description.

      - _valueMin – Minimum boundary of the value.

      - _valueMax – Maximum boundary of the value.

      - _paramMin – Minimum boundary of the parameter.

      - _paramMax – Maximum boundary of the parameter.

    Returns:

      Pointer to the added unit parameter.

  CTDUnitParameter *AddTDParameter(const std::string &_name, double _initValue, const std::string &_units, const std::string &_description, double _minValue = std::numeric_limits<double>::lowest(), double _maxValue = std::numeric_limits<double>::max())

    Adds a new real time-dependent unit parameter to the unit.

    Should be used in the CBaseUnit::CreateStructure() function. Adds the possibility to specify multiple values at different time points as a parameter. The name of the parameter should be unique within the unit. If the unit already has a parameter with the same name, logic_error exception is thrown. Boundary values are only a recommendation to the user, and going beyond them will only result in a warning to the user. Boundary values are optional; if they are not specified, the limits do not apply.

    Parameters:

      - _name – Name of the unit parameter.

      - _initValue – Initial value.

      - _units – Units of measurement.

      - _description – Extended parameter description.

      - _minValue – Minimum boundary value of the parameter.

      - _maxValue – Maximum boundary value of the parameter.

    Returns:

      Pointer to the added unit parameter.

  CStringUnitParameter *AddStringParameter(const std::string &_name, const std::string &_initValue, const std::string &_description)

    Adds a new string unit parameter to the unit.

    Should be used in the CBaseUnit::CreateStructure() function. Adds the possibility to specify one string value as a parameter. The name of the parameter should be unique within the unit. If the unit already has a parameter with the same name, logic_error exception is thrown.

    Parameters:

      - _name – Name of the unit parameter.

      - _initValue – Initial value.

      - _description – Extended parameter description.

    Returns:

      Pointer to the added unit parameter.

  CCheckBoxUnitParameter *AddCheckBoxParameter(const std::string &_name, bool _initValue, const std::string &_description)

    Adds a new two-positional checkbox unit parameter to the unit.

    Should be used in the CBaseUnit::CreateStructure() function. Adds the possibility to specify one two-positional (yes/no) parameter. The name of the parameter should be unique within the unit. If the unit already has a parameter with the same name, logic_error exception is thrown.

    Parameters:

      - _name – Name of the unit parameter.

      - _initValue – Initial value.

      - _description – Extended parameter description.

    Returns:

      Pointer to the added unit parameter.

  CComboUnitParameter *AddComboParameter(const std::string &_name, size_t _initValue, const std::vector<size_t> &_items, const std::vector<std::string> &_itemsNames, const std::string &_description)

    Adds a new combobox unit parameter to the unit.

    Should be used in the CBaseUnit::CreateStructure() function. Adds the possibility to select a single value from the list. The name of the parameter should be unique within the unit. If the unit already has a parameter with the same name, logic_error exception is thrown.

    Parameters:

      - _name – Name of the unit parameter.

      - _initValue – Initial value.

      - _items – List of selectable items.

      - _itemsNames – List of names for each selectable item.

      - _description – Extended parameter description.

    Returns:

      Pointer to the added unit parameter.

  template<typename T, typename = std::enable_if_t<std::is_enum_v<T>>>
  CComboUnitParameter *AddComboParameter(const std::string &_name, T _initValue, const std::vector<T> &_items, const std::vector<std::string> &_itemsNames, const std::string &_description)

    Adds a new combobox unit parameter to the unit.

    Should be used in the CBaseUnit::CreateStructure() function. Adds the possibility to select a single value from the list. The name of the parameter should be unique within the unit. If the unit already has a parameter with the same name, logic_error exception is thrown.

    Parameters:

      - _name – Name of the unit parameter.

      - _initValue – Initial value.

      - _items – List of selectable items.

      - _itemsNames – List of names for each selectable item.

      - _description – Extended parameter description.

    Returns:

      Pointer to the added unit parameter.

  CCompoundUnitParameter *AddCompoundParameter(const std::string &_name, const std::string &_description)

    Adds a new compound combobox unit parameter to the unit.

    Should be used in the CBaseUnit::CreateStructure() function. Adds the possibility to select a single compound from the list of active compounds. The name of the parameter should be unique within the unit. If the unit already has a parameter with the same name, logic_error exception is thrown.

    Parameters:

      - _name – Name of the unit parameter.

      - _description – Extended parameter description.

    Returns:

      Pointer to the added unit parameter.

  CMDBCompoundUnitParameter *AddMDBCompoundParameter(const std::string &_name, const std::string &_description)

    Adds a new MDB compound combobox unit parameter to the unit.

    Should be used in the CBaseUnit::CreateStructure() function. Adds the possibility to select a single compound from the materials database. The name of the parameter should be unique within the unit. If the unit already has a parameter with the same name, logic_error exception is thrown.

    Parameters:

      - _name – Name of the unit parameter.

      - _description – Extended parameter description.

    Returns:

      Pointer to the added unit parameter.

  CReactionUnitParameter *AddReactionParameter(const std::string &_name, const std::string &_description)

    Adds a new reaction unit parameter to the unit.

    Should be used in the CBaseUnit::CreateStructure() function. Adds the possibility to specify one or several reactions. The name of the parameter should be unique within the unit. If the unit already has a parameter with the same name, logic_error exception is thrown.

    Parameters:

      - _name – Name of the unit parameter.

      - _description – Extended parameter description.

    Returns:

      Pointer to the added unit parameter.

  CListRealUnitParameter *AddListRealParameter(const std::string &_name, double _initValue, const std::string &_units, const std::string &_description, double _minValue = std::numeric_limits<double>::lowest(), double _maxValue = std::numeric_limits<double>::max())

    Adds a new real list unit parameter to the unit.

    Should be used in the CBaseUnit::CreateStructure() function. Adds the possibility to specify multiple real values as a parameter. The name of the parameter should be unique within the unit. If the unit already has a parameter with the same name, logic_error exception is thrown. Boundary values are only a recommendation to the user, and going beyond them will only result in a warning to the user. Boundary values are optional; if they are not specified, the limits do not apply.

    Parameters:

      - _name – Name of the unit parameter.

      - _initValue – Initial value.

      - _units – Units of measurement.

      - _description – Extended parameter description.

      - _minValue – Minimum boundary value of the parameter.

      - _maxValue – Maximum boundary value of the parameter.

    Returns:

      Pointer to the added unit parameter.

  CListIntUnitParameter *AddListIntParameter(const std::string &_name, int64_t _initValue, const std::string &_units, const std::string &_description, int64_t _minValue = std::numeric_limits<int64_t>::lowest(), int64_t _maxValue = std::numeric_limits<int64_t>::max())

    Adds a new signed integer list unit parameter to the unit.

    Should be used in the CBaseUnit::CreateStructure() function. Adds the possibility to specify multiple signed integer values as a parameter. The name of the parameter should be unique within the unit. If the unit already has a parameter with the same name, logic_error exception is thrown. Boundary values are only a recommendation to the user, and going beyond them will only result in a warning to the user. Boundary values are optional; if they are not specified, the limits do not apply.

    Parameters:

      - _name – Name of the unit parameter.

      - _initValue – Initial value.

      - _units – Units of measurement.

      - _description – Extended parameter description.

      - _minValue – Minimum boundary value of the parameter.

      - _maxValue – Maximum boundary value of the parameter.

    Returns:

      Pointer to the added unit parameter.

  CListUIntUnitParameter *AddListUIntParameter(const std::string &_name, uint64_t _initValue, const std::string &_units, const std::string &_description, uint64_t _minValue = std::numeric_limits<uint64_t>::lowest(), uint64_t _maxValue = std::numeric_limits<uint64_t>::max())

    Adds a new unsigned integer list unit parameter to the unit.

    Should be used in the CBaseUnit::CreateStructure() function. Adds the possibility to specify multiple unsigned integer values as a parameter. The name of the parameter should be unique within the unit. If the unit already has a parameter with the same name, logic_error exception is thrown. Boundary values are only a recommendation to the user, and going beyond them will only result in a warning to the user. Boundary values are optional; if they are not specified, the limits do not apply.

    Parameters:

      - _name – Name of the unit parameter.

      - _initValue – Initial value.

      - _units – Units of measurement.

      - _description – Extended parameter description.

      - _minValue – Minimum boundary value of the parameter.

      - _maxValue – Maximum boundary value of the parameter.

    Returns:

      Pointer to the added unit parameter.

  CSolverUnitParameter *AddSolverAgglomeration(const std::string &_name, const std::string &_description)

    Adds a new agglomeration solver unit parameter to the unit.

    Should be used in the CBaseUnit::CreateStructure() function. Adds the possibility to choose one of the available agglomeration solvers of this type. The name of the parameter should be unique within the unit. If the unit already has a parameter with the same name, logic_error exception is thrown. Boundary values are only a recommendation to the user, and going beyond them will only result in a warning to the user. Boundary values are optional; if they are not specified, the limits do not apply.

    Parameters:

      - _name – Name of the unit parameter.

      - _description – Extended parameter description.

    Returns:

      Pointer to the added unit parameter.

  void AddParametersToGroup(const std::string &_unitParamNameSelector, const std::string &_unitParamSelectedValueName, const std::vector<std::string> &_groupedParamNames)

    Groups the specified unit parameters.

    Allows to hide some parameters depending on the selected value of a combobox unit parameter. The parameter, its value and all the adding parameters must already exist. If something does not exist, logic_error exception is thrown.

    Parameters:

      - _unitParamNameSelector – Name of the target combobox unit parameter.

      - _unitParamSelectedValueName – Selected value of the target combobox unit parameter.

      - _groupedParamNames – Names of other unit parameters that will be shown if `_unitParamSelectedValueName` is selected.

  void AddParametersToGroup(const std::string &_unitParamNameSelector, const char *_unitParamSelectedValueName, const std::vector<std::string> &_groupedParamNames)

    Groups the specified unit parameters.

    Allows to hide some parameters depending on the selected value of a combobox unit parameter. The parameter, its value and all the adding parameters must already exist. If something does not exist, logic_error exception is thrown.

    Parameters:

      - _unitParamNameSelector – Name of the target combobox unit parameter.

      - _unitParamSelectedValueName – Selected value of the target combobox unit parameter.

      - _groupedParamNames – Names of other unit parameters that will be shown if `_unitParamSelectedValueName` is selected.

  void AddParametersToGroup(const std::string &_unitParamNameSelector, bool _unitParamSelectedValue, const std::vector<std::string> &_groupedParamNames)

    Groups the specified unit parameters.

    Allows to hide some parameters depending on the selected value of a checkbox unit parameter. The parameter, its value and all the adding parameters must already exist. If something does not exist, logic_error exception is thrown.

    Parameters:

      - _unitParamNameSelector – Name of the target checkbox unit parameter.

      - _unitParamSelectedValue – Selected value of the target checkbox unit parameter.

      - _groupedParamNames – Names of other unit parameters that will be shown if `_unitParamSelectedValue` is selected.

  void AddParametersToGroup(const CComboUnitParameter *_selector, size_t _selectedValue, const std::vector<CBaseUnitParameter*> &_groupedParams)

    Groups the specified unit parameters.

    Allows to hide some parameters depending on the selected value of a combobox unit parameter. The parameter, its value and all the adding parameters must already exist. If something does not exist, logic_error exception is thrown.

    Parameters:

      - _selector – Pointer to the target combobox unit parameter.

      - _selectedValue – Selected value of the target combobox unit parameter.

      - _groupedParams – Other unit parameters that will be shown if `_selectedValue` is selected.

  template<typename T, typename = std::enable_if_t<std::is_enum_v<T>>>
  void AddParametersToGroup(const CComboUnitParameter *_selector, T _selectedValue, const std::vector<CBaseUnitParameter*> &_groupedParams)

    Groups the specified unit parameters.

    Allows to hide some parameters depending on the selected value of a combobox unit parameter. The parameter, its value and all the adding parameters must already exist. If something does not exist, logic_error exception is thrown.

    Parameters:

      - _selector – Pointer to the target combobox unit parameter.

      - _selectedValue – Selected value of the target combobox unit parameter.

      - _groupedParams – Other unit parameters that will be shown if `_selectedValue` is selected.

  void AddParametersToGroup(const CCheckBoxUnitParameter *_selector, bool _selectedValue, const std::vector<CBaseUnitParameter*> &_groupedParams)

    Groups the specified unit parameters.

    Allows to hide some parameters depending on the selected value of a checkbox unit parameter. The parameter, its value and all the adding parameters must already exist. If something does not exist, logic_error exception is thrown.

    Parameters:

      - _selector – Pointer to the target checkbox unit parameter.

      - _selectedValue – Selected value of the target checkbox unit parameter.

      - _groupedParams – Other unit parameters that will be shown if `_selectedValue` is selected.

  double GetConstRealParameterValue(const std::string &_name) const

    Returns value of the real constant unit parameter.

    Throws logic_error exception if a unit parameter with the given name and type does not exist.

    Parameters:

      _name – Name of the unit parameter.

    Returns:

      Current value of the unit parameter.

  int64_t GetConstIntParameterValue(const std::string &_name) const

    Returns value of the signed integer constant unit parameter.

    Throws logic_error exception if a unit parameter with the given name and type does not exist.

    Parameters:

      _name – Name of the unit parameter.

    Returns:

      Current value of the unit parameter.

  uint64_t GetConstUIntParameterValue(const std::string &_name) const

    Returns value of the unsigned integer constant unit parameter.

    Throws logic_error exception if a unit parameter with the given name and type does not exist.

    Parameters:

      _name – Name of the unit parameter.

    Returns:

      Current value of the unit parameter.

  double GetDependentParameterValue(const std::string &_name, double _param) const

    Returns value of the dependent unit parameter at the given value of the parameter.

    If the selected parameter value has not been defined, linear interpolation or nearest-neighbor extrapolation will be performed. Throws logic_error exception if a unit parameter with the given name and type does not exist.

    Parameters:

      - _name – Name of the unit parameter.

      - _param – Target parameter value.

    Returns:

      Current value of the unit parameter at the given parameter value.

  double GetTDParameterValue(const std::string &_name, double _time) const

    Returns value of the real time-dependent unit parameter at the given time point.

    If the selected time point has not been defined, linear interpolation or nearest-neighbor extrapolation will be performed. Throws logic_error exception if a unit parameter with the given name and type does not exist.

    Parameters:

      - _name – Name of the unit parameter.

      - _time – Target time point.

    Returns:

      Current value of the unit parameter at the given time point.

  std::string GetStringParameterValue(const std::string &_name) const

    Returns value of the string unit parameter.

    Throws logic_error exception if a unit parameter with the given name and type does not exist.

    Parameters:

      _name – Name of the unit parameter.

    Returns:

      Current value of the unit parameter.

  bool GetCheckboxParameterValue(const std::string &_name) const

    Returns value of the checkbox unit parameter.

    Throws logic_error exception if a unit parameter with the given name and type does not exist.

    Parameters:

      _name – Name of the unit parameter.

    Returns:

      Current value of the unit parameter.

  size_t GetComboParameterValue(const std::string &_name) const

    Returns value of the combobox unit parameter.

    Throws logic_error exception if a unit parameter with the given name and type does not exist.

    Parameters:

      _name – Name of the unit parameter.

    Returns:

      Current value of the unit parameter.

  std::string GetCompoundParameterValue(const std::string &_name) const

    Returns value of the compound combobox unit parameter.

    Throws logic_error exception if a unit parameter with the given name and type does not exist.

    Parameters:

      _name – Name of the unit parameter.

    Returns:

      Unique key of the selected compound.

  std::string GetMDBCompoundParameterValue(const std::string &_name) const

    Returns value of the MDB compound combobox unit parameter.

    Throws logic_error exception if a unit parameter with the given name and type does not exist.

    Parameters:

      _name – Name of the unit parameter.

    Returns:

      Unique key of the selected compound.

  std::vector<CChemicalReaction> GetReactionParameterValue(const std::string &_name) const

    Returns value of the reaction unit parameter.

    Throws logic_error exception if a unit parameter with the given name and type does not exist.

    Parameters:

      _name – Name of the unit parameter.

    Returns:

      List of defined reactions.

  double GetListRealParameterValue(const std::string &_name, size_t _index) const

    Returns value of the real list unit parameter at the given index.

    If the selected index has not been defined, 0 is returned. Throws logic_error exception if a unit parameter with the given name and type does not exist.

    Parameters:

      - _name – Name of the unit parameter.

      - _index – Target index.

    Returns:

      Current value of the unit parameter at the given time point.

  int64_t GetListIntParameterValue(const std::string &_name, size_t _index) const

    Returns value of the signed integer list unit parameter at the given index.

    If the selected index has not been defined, 0 is returned. Throws logic_error exception if a unit parameter with the given name and type does not exist.

    Parameters:

      - _name – Name of the unit parameter.

      - _index – Target index.

    Returns:

      Current value of the unit parameter at the given time point.

  uint64_t GetListUIntParameterValue(const std::string &_name, size_t _index) const

    Returns value of the unsigned integer list unit parameter at the given index.

    If the selected index has not been defined, 0 is returned. Throws logic_error exception if a unit parameter with the given name and type does not exist.

    Parameters:

      - _name – Name of the unit parameter.

      - _index – Target index.

    Returns:

      Current value of the unit parameter at the given time point.

  CAgglomerationSolver *GetSolverAgglomeration(const std::string &_name) const

    Returns value of the agglomeration solver unit parameter.

    Throws logic_error exception if a unit parameter with the given name and type does not exist.

    Parameters:

      _name – Name of the unit parameter.

    Returns:

      Pointer to the selected agglomeration solver.

  CAgglomerationSolver *GetSolverAgglomeration(const CSolverUnitParameter *_param) const

    Returns value of the agglomeration solver unit parameter.

    Throws logic_error exception if the provided pointer to the unit parameter is of the wrong type.

    Parameters:

      _param – Pointer to the agglomeration solver unit parameter.

    Returns:

      Pointer to the selected agglomeration solver.

  const CStateVariablesManager &GetStateVariablesManager() const

    Returns a const reference to state variables manager.

    Can be used for centralized access to state variables.

    Returns:

      Const reference to state variables manager.

  CStateVariable *AddStateVariable(const std::string &_name, double _initValue)

    Adds a new state variable.

    Can be used to handle state-dependent values: all variables added with this function will be automatically saved and restored during the simulation. Can also store the history of changes during the simulation for further post-processing. The name must by unique within the unit. If the unit already has a state variable with the same name, logic_error exception is thrown. Should be used in the CBaseUnit::CreateStructure() function.

    Parameters:

      - _name – Name of the variable.

      - _initValue – Initial value of the variable.

    Returns:

      Pointer to the added state variable.

  double GetStateVariable(const std::string &_name) const

    Returns current value of the state variable.

    If a state variable with the given name does not exist in this unit, logic_error exception is thrown.

    Parameters:

      _name – Name of the variable.

    Returns:

      Current value of the state variable.

  void SetStateVariable(const std::string &_name, double _value)

    Sets a new value of the state variable.

    If a state variable with the given name does not exist in this unit, logic_error exception is thrown.

    Parameters:

      - _name – Name of the variable.

      - _value – Name value of the variable.

  void SetStateVariable(const std::string &_name, double _value, double _time)

    Sets a new value of the state variable and adds its value to the history.

    If a state variable with the given name does not exist in this unit, logic_error exception is thrown.

    Parameters:

      - _name – Name of the variable.

      - _value – Name value of the variable.

      - _time – Time point for which new value is added to the history.

  CPlot *AddPlot(const std::string &_plotName, const std::string &_labelX, const std::string &_labelY)

    Adds a new 2-dimensional plot to the unit.

    Adds a plot with the specified name and axes labels to the unit and returns a pointer to it. If the unit already has a plot with the same name, logic_error exception is thrown.

    Parameters:

      - _plotName – Name of the plot.

      - _labelX – Text label of the X-axis.

      - _labelY – Text label of the Y-axis.

    Returns:

      Pointer to the added plot.

  CPlot *AddPlot(const std::string &_plotName, const std::string &_labelX, const std::string &_labelY, const std::string &_labelZ)

    Adds a new 3-dimensional plot to the unit.

    Adds a plot with the specified name and axes labels to the unit and returns a pointer to it. If the unit already has a plot with the same name, logic_error exception is thrown.

    Parameters:

      - _plotName – Name of the plot.

      - _labelX – Text label of the X-axis.

      - _labelY – Text label of the Y-axis.

      - _labelZ – Text label of the Z-axis.

    Returns:

      Pointer to the added plot.

  CCurve *AddCurveOnPlot(const std::string &_plotName, const std::string &_curveName)

    Adds a new curve to a 2-dimensional plot.

    Adds a new curve with the specified name to the 2-dimensional plot with the given name and returns a pointer to it. If a plot with this name does not exist or it already contains a curve with the given name, logic_error exception is thrown.

    Parameters:

      - _plotName – Name of the plot.

      - _curveName – Name of the new curve.

    Returns:

      Pointer to the added curve.

  CCurve *AddCurveOnPlot(const std::string &_plotName, double _valueZ)

    Adds a new curve to a 3-dimensional plot.

    Adds a new curve with the specified Z-value to the 3-dimensional plot with the given name and returns a pointer to it. If a plot with this name does not exist or it already contains a curve with the given Z-value, logic_error exception is thrown.

    Parameters:

      - _plotName – Name of the plot.

      - _valueZ – Z-value of the new curve.

    Returns:

      Pointer to the added curve.

  void AddPointOnCurve(const std::string &_plotName, const std::string &_curveName, double _x, double _y)

    Adds a new point to the curve on the 2-dimensional plot.

    Adds a new point to the specified curve on the 2-dimensional plot. If a plot or a curve with these names do not exist, logic_error exception is thrown.

    Parameters:

      - _plotName – Name of the plot.

      - _curveName – Name of the curve on plot.

      - _x – X-value of the new point.

      - _y – Y-value of the new point.

  void AddPointOnCurve(const std::string &_plotName, double _valueZ, double _x, double _y)

    Adds a new point to the curve on the 3-dimensional plot.

    Adds a new point to the specified curve on the 2-dimensional plot. If a plot with this name or a curve with this Z-value do not exist, logic_error exception is thrown.

    Parameters:

      - _plotName – Name of the plot.

      - _valueZ – Z-value of the curve.

      - _x – X-value of the new point.

      - _y – Y-value of the new point.

  void AddPointsOnCurve(const std::string &_plotName, const std::string &_curveName, const std::vector<double> &_x, const std::vector<double> &_y)

    Adds new points to the curve on the 2-dimensional plot.

    Adds new points to the specified curve on the 2-dimensional plot. If a plot or a curve with these names do not exist, logic_error exception is thrown.

    Parameters:

      - _plotName – Name of the plot.

      - _curveName – Name of the curve on plot.

      - _x – X-values of the new points.

      - _y – Y-values of the new points.

  void AddPointsOnCurve(const std::string &_plotName, double _valueZ, const std::vector<double> &_x, const std::vector<double> &_y)

    Adds new points to the curve on the 3-dimensional plot.

    Adds new points to the specified curve on the 2-dimensional plot. If a plot with this name or a curve with this Z-value do not exist, logic_error exception is thrown.

    Parameters:

      - _plotName – Name of the plot.

      - _valueZ – Z-value of the curve.

      - _x – X-values of the new points.

      - _y – Y-values of the new points.

  void CopyStreamToPort(double _time, const CStream *_stream, CUnitPort *_port) const

    Copies all stream data from the given stream to the stream connected to the selected output port at the given time point.

    All data after the time point are removed from the destination stream. Throws logic_error exception on error.

    Parameters:

      - _time – Time point to copy.

      - _stream – Source stream.

      - _port – Destination port.

  void CopyStreamToPort(double _time, const CStream *_stream, const std::string &_portName)

    Copies all stream data from the given stream to the stream connected to the selected output port at the given time point.

    All data after the time point are removed from the destination stream. Throws logic_error exception on error.

    Parameters:

      - _time – Time point to copy.

      - _stream – Source stream.

      - _portName – Name of the destination port.

  void CopyStreamToPort(double _timeBeg, double _timeEnd, const CStream *_stream, CUnitPort *_port) const

    Copies all stream data from the given stream to the stream connected to the selected output port at the given time interval.

    All data after the end time point are removed from the destination stream. Throws logic_error exception on error.

    Parameters:

      - _timeBeg – Begin of the time interval to copy.

      - _timeEnd – End of the time interval to copy.

      - _stream – Source stream.

      - _port – Destination port.

  void CopyStreamToPort(double _timeBeg, double _timeEnd, const CStream *_stream, const std::string &_portName)

    Copies all stream data from the given stream to the stream connected to the selected output port at the given time interval.

    All data after the end time point are removed from the destination stream. Throws logic_error exception on error.

    Parameters:

      - _timeBeg – Begin of the time interval to copy.

      - _timeEnd – End of the time interval to copy.

      - _stream – Source stream.

      - _portName – Name of the destination port.

  void CopyPortToStream(double _time, const CUnitPort *_port, CStream *_stream) const

    Copies all stream data from the stream connected to the selected input port to the given stream at the given time point.

    All data after the time point are removed from the destination stream. Throws logic_error exception on error.

    Parameters:

      - _time – Time point to copy.

      - _port – Source port.

      - _stream – Destination stream.

  void CopyPortToStream(double _time, const std::string &_portName, CStream *_stream)

    Copies all stream data from the stream connected to the selected input port to the given stream at the given time point.

    All data after the time point are removed from the destination stream. Throws logic_error exception on error.

    Parameters:

      - _time – Time point to copy.

      - _portName – Name of the source port.

      - _stream – Destination stream.

  void CopyPortToStream(double _timeBeg, double _timeEnd, const CUnitPort *_port, CStream *_stream) const

    Copies all stream data from the stream connected to the selected input port to the given stream at the given time interval.

    All data after the end time point are removed from the destination stream. Throws logic_error exception on error.

    Parameters:

      - _timeBeg – Begin of the time interval to copy.

      - _timeEnd – End of the time interval to copy.

      - _port – Source port.

      - _stream – Destination stream.

  void CopyPortToStream(double _timeBeg, double _timeEnd, const std::string &_portName, CStream *_stream)

    Copies all stream data from the stream connected to the selected input port to the given stream at the given time interval.

    All data after the end time point are removed from the destination stream. Throws logic_error exception on error.

    Parameters:

      - _timeBeg – Begin of the time interval to copy.

      - _timeEnd – End of the time interval to copy.

      - _portName – Name of the source port.

      - _stream – Destination stream.

  std::vector<double> GetAllTimePoints() const

    Returns all time points at which input streams and time-dependent parameters are defined.

    Returns:

      Sorted vector of time points.

  std::vector<double> GetAllTimePoints(double _timeBeg, double _timeEnd) const

    Returns all time points in the specified time interval at which input streams and time-dependent parameters are defined.

    Parameters:

      - _timeBeg – Begin of the time interval.

      - _timeEnd – End of the time interval.

    Returns:

      Sorted vector of time points.

  std::vector<double> GetAllTimePointsClosed(double _timeBeg, double _timeEnd) const

    Returns all time points in the specified time interval at which input streams and time-dependent parameters are defined.

    Boundary time points are unconditionally included into result.

    Parameters:

      - _timeBeg – Begin of the time interval.

      - _timeEnd – End of the time interval.

    Returns:

      Sorted vector of time points.

  std::vector<double> GetInputTimePoints() const

    Returns all time points at which input streams are defined.

    Returns:

      Sorted vector of time points.

  std::vector<double> GetInputTimePoints(double _timeBeg, double _timeEnd) const

    Returns all time points in the specified time interval at which input streams are defined.

    Parameters:

      - _timeBeg – Begin of the time interval.

      - _timeEnd – End of the time interval.

    Returns:

      Sorted vector of time points.

  std::vector<double> GetInputTimePointsClosed(double _timeBeg, double _timeEnd) const

    Returns all time points in the specified time interval at which input streams are defined.

    Boundary time points are unconditionally included into result.

    Parameters:

      - _timeBeg – Begin of the time interval.

      - _timeEnd – End of the time interval.

    Returns:

      Sorted vector of time points.

  std::vector<double> GetStreamsTimePoints(const std::vector<CStream*> &_streams) const

    Returns all time points at which given streams are defined.

    Parameters:

      _streams – List of streams.

    Returns:

      Sorted vector of time points.

  std::vector<double> GetStreamsTimePoints(double _timeBeg, double _timeEnd, const std::vector<CStream*> &_streams) const

    Returns all time points in the specified time interval at which given streams are defined.

    Parameters:

      - _timeBeg – Begin of the time interval.

      - _timeEnd – End of the time interval.

      - _streams – List of streams.

    Returns:

      Sorted vector of time points.

  std::vector<double> GetStreamsTimePointsClosed(double _timeBeg, double _timeEnd, const std::vector<CStream*> &_streams) const

    Returns all time points in the specified time interval at which given streams are defined.

    Boundary time points are unconditionally included into result.

    Parameters:

      - _timeBeg – Begin of the time interval.

      - _timeEnd – End of the time interval.

      - _streams – List of streams.

    Returns:

      Sorted vector of time points.

  std::vector<double> GetTimePoints(double _timeBeg, double _timeEnd, const std::vector<CHoldup*> &_holdups, const std::vector<CStream*> &_streams) const

    Returns all time points in the time interval at which holdups and streams are defined.

    Parameters:

      - _timeBeg – Begin of the time interval.

      - _timeEnd – End of the time interval.

      - _holdups – List of holdups.

      - _streams – List of streams.

    Returns:

      Sorted vector of time points.

  std::string GetCompoundName(const std::string &_compoundKey) const

    Returns the name of the compound with the specified unique key.

    Returns empty string if such compound does not exist in the list of active compounds.

    Parameters:

      _compoundKey – Unique key of the compound.

    Returns:

      Name of the compound.

  std::string GetCompoundName(size_t _index) const

    Returns the name of the compound with the specified index.

    Indexing is done in the list of active compounds. Returns empty string if such compound does not exist.

    Parameters:

      _index – Index of the compound in the list of active compounds.

    Returns:

      Name of the compound.

  std::string GetCompoundKey(const std::string &_compoundName) const

    Returns the unique key of the compound with the specified name.

    Returns empty string if such compound does not exist in the list of active compounds.

    Parameters:

      _compoundName – Name of the compound.

    Returns:

      Unique key of the compound.

  std::string GetCompoundKey(size_t _index) const

    Returns the unique key of the compound with the specified index.

    Returns empty string if such compound does not exist in the list of active compounds.

    Parameters:

      _index – Index of the compound in the list of active compounds.

    Returns:

      Unique key of the compound.

  size_t GetCompoundIndex(const std::string &_compoundKey) const

    Returns index of the compound with the specified key.

    Returns -1 if such compound does not exist in the list of active compounds.

    Parameters:

      _compoundKey – Unique key of the compound.

    Returns:

      Index of the compound in the list of active compounds.

  size_t GetCompoundIndexByName(const std::string &_compoundName) const

    Returns index of the compound with the specified name.

    Returns -1 if such compound does not exist in the list of active compounds.

    Parameters:

      _compoundName – Name of the compound.

    Returns:

      Index of the compound in the list of active compounds.

  std::vector<std::string> GetAllCompounds() const

    Returns unique keys of all active compounds.

    Returns:

      Unique keys of all active compounds.

  std::vector<std::string> GetAllCompoundsNames() const

    Returns names of all active compounds.

    Returns:

      Unique keys of all active compounds.

  size_t GetCompoundsNumber() const

    Returns the number of active compounds.

    Returns:

      Number of active compounds.

  bool IsCompoundDefined(const std::string &_compoundKey) const

    Checks if a compound with the specified unique key is defined.

    Parameters:

      _compoundKey – Unique key of the compound.

    Returns:

      Whether a compound with the specified unique key is defined.

  bool IsCompoundNameDefined(const std::string &_compoundName) const

    Checks if a compound with the specified name is defined.

    Parameters:

      _compoundName – Name of the compound.

    Returns:

      Whether a compound with the specified unique name is defined.

  std::vector<EOverall> GetAllOverallProperties() const

    Returns keys of all overall properties.

    Returns:

      Keys of all active overall properties.

  std::string GetPhaseName(EPhase _phase) const

    Returns the name of the specified phase.

    Returns empty string if such phase does not exist in the list of active phases.

    Parameters:

      _phase – Phase type.

    Returns:

      Name of the phase.

  EPhase GetPhaseType(size_t _index) const

    Returns the type of the phase with the specified index.

    Returns EPhase::UNDEFINED if the phase with the given index does not exist.

    Parameters:

      _index – Index of the phase in the list of active phases.

    Returns:

      Phase type.

  std::vector<EPhase> GetAllPhases() const

    Returns types of all active phases.

    Returns:

      Types of all active phases.

  size_t GetPhasesNumber() const

    Returns the number of active phases.

    Returns:

      Number of active phases.

  bool IsPhaseDefined(EPhase _phase) const

    Checks if a phase of the specified type is in the list of active phases.

    Returns:

      Whether a phase of the specified type is defined.

  size_t GetDistributionsNumber() const

    Returns number of defined distributed properties of the solid phase.

    Returns:

      Number of distributed properties.

  std::vector<EDistrTypes> GetDistributionsTypes() const

    Returns types of all defined distributed properties of the solid phase.

    Returns:

      Types of all distributed properties.

  std::vector<size_t> GetDistributionsClasses() const

    Returns numbers of classes of all defined distributed properties of the solid phase.

    Returns:

      Number of classes of all distributed properties.

  EGridEntry GetDistributionGridType(EDistrTypes _distribution) const

    Returns type of grid entries of the given distributed property of the solid phase.

    Returns EGridEntry::GRID_UNDEFINED if the given distributed property is not defined.

    Parameters:

      _distribution – Type of the distributed property.

    Returns:

      Type of the grid entries.

  size_t GetClassesNumber(EDistrTypes _distribution) const

    Returns number of classes defined for the specified distributed property of the solid phase.

    Returns 0 if the given distributed property is not defined.

    Parameters:

      _distribution – Type of the distributed property.

    Returns:

      Number of classes.

  std::vector<double> GetNumericGrid(EDistrTypes _distribution) const

    Returns a numeric grid defined for the specified distributed property of the solid phase.

    Returns an empty vector if the distribution is not of numeric type.

    Parameters:

      _distribution – Type of the distributed property.

    Returns:

      Numeric grid.

  std::vector<std::string> GetSymbolicGrid(EDistrTypes _distribution) const

    Returns a symbolic grid defined for the specified distributed property of the solid phase.

    Returns empty vector if the distribution is not of symbolic type.

    Parameters:

      _distribution – Type of the distributed property.

    Returns:

      Symbolic grid.

  std::vector<double> GetClassesSizes(EDistrTypes _distribution) const

    Returns the sizes of classes defined in the grid of the specified distributed property of the solid phase.

    Returns an empty vector if the distribution is not of numeric type.

    Parameters:

      _distribution – Type of the distributed property.

    Returns:

      Sizes of classes.

  std::vector<double> GetClassesMeans(EDistrTypes _distribution) const

    Returns the mean values of classes defined in the grid of the specified distributed property of the solid phase.

    Returns an empty vector if the distribution is not of numeric type.

    Parameters:

      _distribution – Type of the distributed property.

    Returns:

      Mean values of classes.

  std::vector<double> GetPSDGridDiameters() const

    Returns a grid defined for the particle size distribution in terms of particle diameters.

    Returns an empty vector if DISTR_SIZE distribution has not been defined.

    Returns:

      Particle size grid as diameters.

  std::vector<double> GetPSDGridSurfaces() const

    Returns a grid defined for the particle size distribution in terms of particle surfaces.

    Returns an empty vector if DISTR_SIZE distribution has not been defined.

    Returns:

      Particle size grid as surfaces.

  std::vector<double> GetPSDGridVolumes() const

    Returns a grid defined for the particle size distribution in terms of particle volumes.

    Returns an empty vector if DISTR_SIZE distribution has not been defined.

    Returns:

      Particle size grid as volumes.

  std::vector<double> GetPSDMeanDiameters() const

    Returns mean values of classes defined for the particle size distribution in terms of particle diameters.

    Returns an empty vector if DISTR_SIZE distribution has not been defined.

    Returns:

      Particle mean diameters.

  std::vector<double> GetPSDMeanSurfaces() const

    Returns mean values of classes defined for the particle size distribution in terms of particle surfaces.

    Returns an empty vector if DISTR_SIZE distribution has not been defined.

    Returns:

      Particle mean surfaces.

  std::vector<double> GetPSDMeanVolumes() const

    Returns mean values of classes defined for the particle size distribution in terms of particle volumes.

    Returns an empty vector if DISTR_SIZE distribution has not been defined.

    Returns:

      Particle mean volumes.

  bool IsDistributionDefined(EDistrTypes _distribution) const

    Checks if the specified distributed property is defined.

    Parameters:

      _distribution – Type of the distributed property.

    Returns:

      Whether the distributed property is defined.

  double GetAbsTolerance() const

    Returns global absolute tolerance.

    See also: Convergence methods

    Returns:

      Absolute tolerance.

  double GetRelTolerance() const

    Returns global relative tolerance.

    See also: Convergence methods

    Returns:

      Relative tolerance.

  double GetCompoundProperty(const std::string &_compoundKey, ECompoundConstProperties _property) const

    Returns the value of the constant physical property of the specified compound.

    Gets data directly from the materials database. See also: Constant parameters

    Parameters:

      - _compoundKey – Unique key of the compound.

      - _property – Identifier of the constant material property.

    Returns:

      Property value.

  double GetCompoundProperty(const std::string &_compoundKey, ECompoundTPProperties _property, double _temperature = STANDARD_CONDITION_T, double _pressure = STANDARD_CONDITION_P) const

    Returns the value of the temperature/pressure-dependent physical property of the specified compound.

    Gets data directly from the materials database and calculates them for the given temperature [K] and pressure [Pa]. See also: Dependent parameters

    Parameters:

      - _compoundKey – Unique key of the compound.

      - _property – Identifier of the temperature/pressure-dependent material property.

      - _temperature – Temperature [K] for which the property should be calculated.

      - _pressure – Pressure [Pa] for which the property should be calculated.

    Returns:

      Property value.

  double GetCompoundProperty(const std::string &_compoundKey1, const std::string &_compoundKey2, EInteractionProperties _property, double _temperature = STANDARD_CONDITION_T, double _pressure = STANDARD_CONDITION_P) const

    Returns the value of the interaction physical property between the specified compounds.

    Gets data directly from the materials database and calculates them for the given temperature [K] and pressure [Pa]. See also: Interaction properties

    Parameters:

      - _compoundKey1 – Unique key of the first compound.

      - _compoundKey2 – Unique key of the second compound.

      - _property – Identifier of the temperature/pressure-dependent material property.

      - _temperature – Temperature [K] for which the property should be calculated.

      - _pressure – Pressure [Pa] for which the property should be calculated.

    Returns:

      Property value.

  bool IsPropertyDefined(ECompoundConstProperties _property) const

    Checks if a constant physical property with the specified key is present in the materials database.

    Parameters:

      _property – Identifier of the constant material property.

    Returns:

      Whether the property is defined.

  bool IsPropertyDefined(ECompoundTPProperties _property) const

    Checks if a temperature/pressure-dependent physical property with the specified key is present in the materials database.

    Parameters:

      _property – Identifier of the temperature/pressure-dependent material property.

    Returns:

      Whether the property is defined.

  bool IsPropertyDefined(EInteractionProperties _property) const

    Checks if an interaction physical property with the specified key is present in the materials database.

    Parameters:

      _property – Identifier of the temperature/pressure-dependent material property.

    Returns:

      Whether the property is defined.

  CMixtureEnthalpyLookup *GetEnthalpyCalculator() const

    Returns a pointer to a unit-specific enthalpy calculator.

    Returns:

      Pointer to an enthalpy calculator.

  double CalculateEnthalpyFromTemperature(double _temperature, const std::vector<double> &_fractions) const

    Calculates enthalpy of the mixture for the given temperature.

    Calculates enthalpy of the mixture of all defined compounds for the given temperature and compound fractions using a lookup table. Uses the values of enthalpy defined in the materials database.

    Parameters:

      - _temperature – Temperature [K].

      - _fractions – Mass fraction of all defined compounds.

    Returns:

      Enthalpy [J/kg].

  double CalculateTemperatureFromEnthalpy(double _enthalpy, const std::vector<double> &_fractions) const

    Calculates temperature of the mixture for the given enthalpy.

    Calculates temperature of the mixture of all defined compounds for the given enthalpy and compound fractions using a lookup table. Uses the values of enthalpy defined in the materials database.

    Parameters:

      - _enthalpy – Enthalpy [J/kg].

      - _fractions – Mass fraction of all defined compounds.

    Returns:

      Temperature [K].

  void HeatExchange(double _time, CBaseStream *_stream1, CBaseStream *_stream2, double _efficiency) const

    Performs a heat exchange between two streams.

    Performs a heat exchange between two streams at the specified time point with a specified efficiency.

    Parameters:

      - _time – Time point for which heat exchange is done.

      - _stream1 – Pointer to the first stream.

      - _stream2 – Pointer to the second stream.

      - _efficiency – Heat exchange efficiency (0..1].

  void RaiseError(const std::string &_message = "")

    Sets an error state of the unit, prints the message to the simulation log, and requests to stop simulation.

    Parameters:

      _message – Message to show in the simulation log.

  void RaiseWarning(const std::string &_message = "")

    Sets a warning state of the unit, and prints the message to the simulation log.

    Parameters:

      _message – Message to show in the simulation log.

  void ShowInfo(const std::string &_message)

    Prints the message to the simulation log.

    Parameters:

      _message – Message to show in the simulation log.

  bool HasError() const

    Checks if an error state is requested.

    Returns:

      Whether an error has occurred.

  bool HasWarning() const

    Checks if a warning state is requested.

    Returns:

      Whether a warning has occurred.

  bool HasInfo() const

    Checks if an info output is requested.

    Returns:

      Whether an info output is requested.

  std::string GetErrorMessage() const

    Returns a textual description of the last error.

    Returns:

      Actual error message.

  std::string GetWarningMessage() const

    Returns a textual description of the last warning.

    Returns:

      Actual warning message.

  std::string GetInfoMessage() const

    Returns a textual description of the last info.

    Returns:

      Actual info message.

  inline virtual void CreateBasicInfo()

    Setup basic parameters of the unit (name, author, key, version).

    This function must be defined in each unit. No information on the flowsheet structure and connected streams is available at this point.

  inline virtual void CreateStructure()

    Setup the structure of the unit (ports, unit parameters, holdups, internal streams).

    This function must be defined in each unit. Here, all GUI-relevant parts of the unit are described. No information on the flowsheet structure and connected streams is available at this point.

  inline virtual void Initialize(double _time)

    Initialize unit for at time point 0 before starting the simulation.

    This function can be defined in each unit. It is called once for each simulation. Here, some additional objects can be initialized (for example holdups, material streams or state variables).

  inline virtual void Simulate(double _time)

    Calculate the unit on the given time point.

    This function must be defined in each steady-state unit. Is called by the simulator iteratively for all time points for which this unit should be calculated. Should implement all main calculations of the model.

    Parameters:

      _time – Time point for which the model is calculated.

  inline virtual void Simulate(double _timeBeg, double _timeEnd)

    Calculate the unit on the given time interval.

    This function must be defined in each dynamic unit. Is called by the simulator iteratively for all time points for which this unit should be calculated. Should implement all main calculations of the model.

    Parameters:

      - _timeBeg – Start of the time interval for which the model is calculated.

      - _timeEnd – End of the time interval for which the model is calculated.

  inline virtual void Finalize()

    Finalize the unit after the calculation finishes.

    This function can be defined in each unit. It is called once at the end of the simulation. Here, closing and cleaning operations can be performed.

  inline virtual void SaveState()

    Save the current state of the unit.

    This function can be defined in each unit. Save the current state of all time-dependent parameters for a possible restart of the simulation from this time point. For flowsheets with recycled streams, it is called when the convergence on the current time window is reached.

  inline virtual void LoadState()

    Load the stored state of the unit.

    This function can be defined in each unit. Load the current state of all time-dependent parameters before a restart of the simulation from that time point. For flowsheets with recycled streams, it is called each time before the Simulate() function

  Public Static Functions

  static void CopyStreamToStream(double _time, const CStream *_srcStream, CStream *_dstStream)

    Copies all stream data from one stream to another at the given time point.

    All data after the time point are removed from the destination stream.

    Parameters:

      - _time – Time point to copy.

      - _srcStream – Source stream.

      - _dstStream – Destination stream.

  static void CopyStreamToStream(double _timeBeg, double _timeEnd, const CStream *_srcStream, CStream *_dstStream)

    Copies all stream data from one stream to another at the given time interval.

    All data after the end time point are removed from the destination stream.

    Parameters:

      - _timeBeg – Begin of the time interval to copy.

      - _timeEnd – End of the time interval to copy.

      - _srcStream – Source stream.

      - _dstStream – Destination stream.

  static void CalculateTM(EDistrTypes _distribution, const std::vector<double> &_inValue, const std::vector<double> &_outValue, CTransformMatrix &_matrix)

    Calculates a transformation matrix needed to obtain the output distribution from the input one.

    Calculates a transformation matrix for one-dimensional distribution according to input and output distributions. Obtained matrix can be applied to the stream instead of direct setting of distribution to retain secondary dimensions in multidimensional distribution. Following algorithm is applied to setup transformation matrix:

    1. Go through the classes of source and target distributions from left to right.

    2. The most left not empty class of the input distribution proceeds to the most left not empty class of the output distribution.

    3. Transition to the next class of the input distribution is performed if the current class is completely transferred to the output distribution.

    4. Transition to the next class of the output distribution is performed if the current class is already full.

    Parameters:

      - _distribution – Type of the distributed property.

      - _inValue – Input distribution.

      - _outValue – Output distribution.

      - _matrix – Resulting transformation matrix.

  Friends

  friend void swap(CBaseUnit &_first, CBaseUnit &_second) noexcept

    Swaps the content of two units.

    Parameters:

      - _first – First unit.

      - _second – Second unit.