Flash Unit#

The IDAES Flash model represents a unit operation where a single stream undergoes a flash separation into two phases. The Flash model supports multiple types of flash operations, including pressure changes and addition or removal of heat.

Degrees of Freedom#

Flash units generally have 2 degrees of freedom.

Typical fixed variables are:

  • heat duty or outlet temperature (see note),

  • pressure change or outlet pressure.

Note: When setting the outlet temperature of a Flash unit, it is best to set control_volume.properties_out[t].temperature. Setting the temperature in one of the outlet streams directly results in a much harder problem to solve, and may be degenerate or unbounded in some cases.

Model Structure#

The core Flash unit model consists of a single ControlVolume0DBlock (named control_volume) with one Inlet Port (named inlet) connected to a Separator unit model with two outlet Ports named ‘vap_outlet’ and ‘liq_outlet’. The Flash model utilizes the separator unit model in IDAES to split the outlets by phase flows to the liquid and vapor outlets respectively.

The Separator unit model supports both direct splitting of state variables and writing of full splitting constraints via the ideal_separation construction argument. Full details on the Separator unit model can be found in the documentation for that unit. To support direct splitting, the property package must use one of a specified set of state variables and support a certain set of property calacuations, as outlined in the table below.

State Variables

Required Properties

Material flow and composition

flow_mol & mole_frac

flow_mol_phase & mole_frac_phase

flow_mol_phase & mole_frac_phase

flow_mol_phase & mole_frac_phase

flow_mol_comp

flow_mol_phase_comp

flow_mol_phase_comp

flow_mol_phase_comp

flow_mass & mass_frac

flow_mass_phase & mass_frac_phase

flow_mass_phase & mass_frac_phase

flow_mass_phase & mass_frac_phase

flow_mass_comp

flow_mass_phase_comp

flow_mass_phase_comp

flow_mass_phase_comp

Energy state

temperature

temperature

enth_mol

enth_mol_phase

enth_mol_phase

enth_mol_phase

enth_mass

enth_mass_phase

enth_mass_phase

enth_mass_phase

Pressure state

pressure

pressure

Construction Arguments#

Flash units have the following construction arguments:

  • property_package - property package to use when constructing Property Blocks (default = ‘use_parent_value’). This is provided as a Property Parameter Block by the Flowsheet when creating the model. If a value is not provided, the Holdup Block will try to use the default property package if one is defined.

  • property_package_args - set of arguments to be passed to the Property Blocks when they are created.

Additionally, Flash units have the following construction arguments which are passed to the Holdup Block for determining which terms to construct in the balance equations.

Argument

Default Value

dynamic

False

include_holdup

False

material_balance_type

MaterialBalanceType.componentPhase

energy_balance_type

EnergyBalanceType.enthalpyTotal

momentum_balance_type

MomentumBalanceType.pressureTotal

has_phase_equilibrium

True

has_heat_transfer

True

has_pressure_change

True

Finally, Flash units also have the following arguments which are passed to the Separator block for determining how to split to two-phase mixture.

Argument

Default Value

ideal_separation

True

energy_split_basis

EnergySplittingType.equal_temperature

Additional Constraints#

Flash units write no additional Constraints beyond those written by the ControlVolume0DBlock and the Separator block.

Variables#

Name

Notes

heat_duty

Reference to control_volume.heat

deltaP

Reference to control_volume.deltaP

Flash Class#

class idaes.models.unit_models.flash.Flash(*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 = False. Flash units do not support dynamic behavior.

    has_holdup

    Indicates whether holdup terms should be constructed or not. default - False. Flash units do not have defined volume, thus this must be False.

    material_balance_type

    Indicates what type of mass balance should be constructed, default - MaterialBalanceType.useDefault. Valid values: { MaterialBalanceType.useDefault - refer to property package for default balance type **MaterialBalanceType.none - exclude material balances, MaterialBalanceType.componentPhase - use phase component balances, MaterialBalanceType.componentTotal - use total component balances, MaterialBalanceType.elementTotal - use total element balances, MaterialBalanceType.total - use total material balance.}

    energy_balance_type

    Indicates what type of energy balance should be constructed, default - EnergyBalanceType.useDefault. Valid values: { EnergyBalanceType.useDefault - refer to property package for default balance type **EnergyBalanceType.none - exclude energy balances, EnergyBalanceType.enthalpyTotal - single enthalpy balance for material, EnergyBalanceType.enthalpyPhase - enthalpy balances for each phase, EnergyBalanceType.energyTotal - single energy balance for material, EnergyBalanceType.energyPhase - energy balances for each phase.}

    momentum_balance_type

    Indicates what type of momentum balance should be constructed, default - MomentumBalanceType.pressureTotal. Valid values: { MomentumBalanceType.none - exclude momentum balances, MomentumBalanceType.pressureTotal - single pressure balance for material, MomentumBalanceType.pressurePhase - pressure balances for each phase, MomentumBalanceType.momentumTotal - single momentum balance for material, MomentumBalanceType.momentumPhase - momentum balances for each phase.}

    energy_split_basis

    Argument indicating basis to use for splitting energy this is not used for when ideal_separation == True. default - EnergySplittingType.equal_temperature. Valid values: { EnergySplittingType.equal_temperature - outlet temperatures equal inlet EnergySplittingType.equal_molar_enthalpy - outlet molar enthalpies equal inlet, EnergySplittingType.enthalpy_split - apply split fractions to enthalpy flows.}

    ideal_separation

    Argument indicating whether ideal splitting should be used. Ideal splitting assumes perfect separation of material, and attempts to avoid duplication of StateBlocks by directly partitioning outlet flows to ports, default - True. Valid values: { True - use ideal splitting methods. Cannot be combined with has_phase_equilibrium = True, False - use explicit splitting equations with split fractions.}

    has_heat_transfer

    Indicates whether terms for heat transfer should be constructed, default - False. Valid values: { True - include heat transfer terms, False - exclude heat transfer terms.}

    has_pressure_change

    Indicates whether terms for pressure change should be constructed, default - True. Valid values: { True - include pressure change terms, False - exclude pressure change terms.}

    property_package

    Property parameter object used to define property calculations, default - useDefault. Valid values: { useDefault - use default package from parent model or flowsheet, PropertyParameterObject - a PropertyParameterBlock object.}

    property_package_args

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

  • 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:

(Flash) New instance

FlashData Class#

class idaes.models.unit_models.flash.FlashData(component)[source]#

Standard Flash Unit Model Class

build()[source]#

Begin building model (pre-DAE transformation).

Parameters:

None

Returns:

None