prommis.solvent_extraction.solvent_extraction#

Solvent Extraction Model


Author: Arkoprabho Dasgupta

The Solvent Extraction unit model is used to perform the solvent extraction unit operation. It represents a series of tanks, referred to as stages, through which the aqueous and organic phases are passed, and the desired components are extracted subsequently.

Configuration Arguments#

The user must specify the following configurations in a solvent extraction model to be able to use it.

The user must specify the aqueous feed input in the aqueous_stream configuration, with a configuration that describes the aqueous feed’s properties.

The user must specify the organic feed input in the organic_stream configuration, with a configuration that describes the organic feed’s properties.

The number of stages in the solvent extraction process has to be specified by the user through the number_of_finite_elements configuration. It takes an integer value.

The material transfer can happen from either of the phases to the other. To specify the direction of the transfer, the aqueous_to_organic configuration is to be used by the user. This is a boolean configuration. The default value is True, which means the material transfer is happening from the aqueous phase to the organic phase, like in the loading operation. For scrubbing and stripping, the reverse happens, so the value of the configuration will be False.

Stream configurations#

Each of the feed streams has to have a dictionary that specifies the property packages and other details as mentioned below.

The property_package configuration is the property package that describes the state conditions and properties of a particular stream.

The property_package_args configuration is any specific set of arguments that has to be passed to the property block for the unit operation.

The user can specify the direction of the flow of the stream through the stages through the configuration flow_direction. This is a configuration, that uses FlowDirection Enum, which can have two possible values.

Degrees of freedom#

When the solvent extraction model is operated in steady state, the number of degrees of freedom of the model is equal to the number of partition coefficients of the total components involved in the mass transfer operation, for all the stages.

If the model is operated in dynamic state, the number of degrees of freedom is equal to the sum of the partition coefficient of all components involved in the mass transfer operation, values of the state block variables of all the components of the system at the start of the operation, the volumes and the volume fractions, for all the stages.

Model structure#

The core model consists of a MSContactor model, with stream names hard coded as ‘aqueous’ and ‘organic’, and the stream dictionaries and number of finite elements are the same as those provided by the user.

This model defines the material transfer term defined in the MSContactor and expresses it as a function of the parameter of partition coefficient defined by the user.

class prommis.solvent_extraction.solvent_extraction.SolventExtraction(*args, **kwds)#
Parameters:
  • rule (function) – A rule function or None. Default rule calls build().

  • concrete (bool) – If True, make this a toplevel model. Default - False.

  • ctype (class) –

    Pyomo ctype of the block. Default - pyomo.environ.Block

    Config args

    dynamic

    Indicates whether this model will be dynamic or not, default = useDefault. Valid values: { useDefault - get flag from parent (default = False), True - set as a dynamic model, False - set as a steady-state model.}

    has_holdup

    Indicates whether holdup terms should be constructed or not. Must be True if dynamic = True, default - False. Valid values: { useDefault - get flag from parent (default = False), True - construct holdup terms, False - do not construct holdup terms}

    aqueous_stream

    Aqueous stream properties

    aqueous_stream
    property_package

    Property parameter object used to define property calculations for given stream, default - useDefault. Valid values: { useDefault - use default package from parent model or flowsheet, PhysicalParameterObject - a PhysicalParameterBlock object.}

    property_package_args

    A ConfigDict with arguments to be passed to property block(s) and used when constructing these, default - None. Valid values: { see property package for documentation.}

    flow_direction

    Direction of flow for stream

    has_energy_balance

    Bool indicating whether to include energy balance for stream. Default=False.

    has_pressure_balance

    Bool indicating whether to include pressure balance for stream. Default=False.

    organic_stream

    Organic stream properties

    organic_stream
    property_package

    Property parameter object used to define property calculations for given stream, default - useDefault. Valid values: { useDefault - use default package from parent model or flowsheet, PhysicalParameterObject - a PhysicalParameterBlock object.}

    property_package_args

    A ConfigDict with arguments to be passed to property block(s) and used when constructing these, default - None. Valid values: { see property package for documentation.}

    flow_direction

    Direction of flow for stream

    has_energy_balance

    Bool indicating whether to include energy balance for stream. Default=False.

    has_pressure_balance

    Bool indicating whether to include pressure balance for stream. Default=False.

    number_of_finite_elements

    Number of finite elements to use

    aqueous_to_organic

    Direction of the transfer between two phases

  • initialize (dict) – ProcessBlockData config for individual elements. Keys are BlockData indexes and values are dictionaries with config arguments as keys.

  • idx_map (function) – Function to take the index of a BlockData element and return the index in the initialize dict from which to read arguments. This can be provided to override the default behavior of matching the BlockData index exactly to the index in initialize.

Returns:

(SolventExtraction) New instance

class prommis.solvent_extraction.solvent_extraction.SolventExtractionData(component)[source]#
build()[source]#

General build method for UnitModelBlockData. This method calls a number of sub-methods which automate the construction of expected attributes of unit models.

Inheriting models should call super().build.

Parameters:

None

Returns:

None

class prommis.solvent_extraction.solvent_extraction.SolventExtractionInitializer(**kwargs)[source]#

This is a general purpose Initializer for the Solvent Extraction unit model.

This routine calls the initializer for the internal MSContactor model.

constraint_tolerance

Tolerance for checking constraint convergence

output_level

Set output level for logging messages

solver

Solver to use for initialization

solver_options

Dict of options to pass to solver

writer_config

Dict of writer_config arguments to pass to solver

default_submodel_initializer

Default Initializer object to use for sub-models. Only used if no Initializer defined in submodel_initializers.

initialize_main_model(model: Block)[source]#

Initialization routine for MSContactor Blocks.

Parameters:

model – model to be initialized

Returns:

None