Pressure Changer

The IDAES Pressure Changer model represents a unit operation with a single stream of material which undergoes a change in pressure due to the application of a work. The Pressure Changer model contains support for a number of different thermodynamic assumptions regarding the working fluid.

Degrees of Freedom

Pressure Changer units generally have one or more degrees of freedom, depending on the thermodynamic assumption used.

Typical fixed variables are:

  • outlet pressure, \(P_{ratio}\) or \(\Delta P\),
  • unit efficiency (isentropic or pump assumption).

Model Structure

The core Pressure Changer unit model consists of a single Holdup0D (named holdup) with one Inlet Port (named inlet) and one Outlet Port (named outlet).

Construction Arguments

Pressure Changers have the following construction arguments:

  • compressor - argument indicates whether the unit should be considered a compressor (True, default) or an expander/turbine (False). This determines how unit efficiency is calculated.

  • thermodynamic_assumption - indicates which thermodynamic assumption should be used when constructing the model. Options are:

    • ‘isothermal’ - (default) assumes no temperature change occurs between the inlet and outlet of the unit.
    • ‘isentropic’ - assumes isentropic behavior. This requires an additional set of property calculations for the isentropic outlet conditions.
    • ‘pump’ - assumes that the fluid work is proportional to the pressure difference and flow rate of fluid. This is suitable for incompressible fluids.
  • 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.

  • inlet_list - list of names to be passed to the build_inlets method (default = None).

  • num_inlets - number of inlets argument to be passed to the build_inlets method (default = None).

  • outlet_list - list of names to be passed to the build_outlets method (default = None).

  • num_outlets - number of outlets argument to be passed to the build_outlets method (default = None).

Additionally, Pressure Changers 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
material_balance_type ‘component_phase’
energy_balance_type ‘total’
momentum_balance_type ‘total’
dynamic False
include_holdup False
has_rate_reactions False
has_equilibrium_reactions False
has_phase_equilibrium True
has_mass_transfer False
has_heat_transfer False
has_work_transfer True
has_pressure_change True

Additional Constraints

In addition to the Constraints written by the Holdup Block, Pressure Changer writes additional Constraints which depend on the thermodynamic assumption chosen. All Pressure Changers add the following Constraint to calculate the pressure ratio:

\[P_{ratio,t} \times P_{in,t} = P_{out,t}\]

Isothermal Assumption

The isothermal assumption writes one additional Constraint:

\[T_{out} = T_{in}\]

Isentropic Assumption

The isentropic assumption creates an additional set of Property Blocks (indexed by time) for the isentropic fluid calculations (named properties_isentropic). This requires a set of balance equations relating the inlet state to the isentropic conditions, which are shown below:

\[F_{in,t,p,j} = F_{out,t,p,j}\]
\[s_{in,t} = s_{isentropic,t}\]
\[P_{in,t} \times P_{ratio,t} = P_{isentropic,t}\]

where \(F_{t,p,j}\) is the flow of component \(j\) in phase \(p\) at time \(t\) and \(s\) is the specific entropy of the fluid at time \(t\).

Next, the isentropic work is calculated as follows:

\[W_{isentropic,t} = \sum_p{H_{isentropic,t,p}} - \sum_p{H_{in,t,p}}\]

where \(H_{t,p}\) is the total energy flow of phase \(p\) at time \(t\). Finally, a constraint which relates the fluid work to the actual mechanical work via an efficiency term \(\eta\).

If compressor is True, \(W_{isentropic,t} = W_{mechanical,t} \times \eta_t\)

If compressor is False, \(W_{isentropic,t} \times \eta_t = W_{mechanical,t}\)

Pump (Incompressible Fluid) Assumption

The incompressible fluid assumption writes two additional constraints. Firstly, a Constraint is written which relates fluid work to the pressure change of the fluid.

\[W_{fluid,t} = (P_{out,t}-P_{in,t})\times F_{vol,t}\]

where \(F_{vol,t}\) is the total volumetric flowrate of material at time \(t\) (from the outlet Property Block). Secondly, a constraint which relates the fluid work to the actual mechanical work via an efficiency term \(\eta\).

If compressor is True, \(W_{fluid,t} = W_{mechanical,t} \times \eta_t\)

If compressor is False, \(W_{fluid,t} \times \eta_t = W_{mechanical,t}\)

Variables

Pressure Changers contain the following Variables (not including those contained within the Holdup Block):

Variable Name Notes
\(P_{ratio}\) ratioP  
\(V_t\) volume Only if has_rate_reactions = True, reference to holdup.rate_reaction_extent
\(W_{mechanical,t}\) work_mechanical Reference to holdup.work
\(W_{fluid,t}\) work_fluid Pump assumption only
\(\eta_{pump,t}\) efficiency_pump Pump assumption only
\(W_{isentropic,t}\) work_isentropic Isentropic assumption only
\(\eta_{isentropic,t}\) efficiency_isentropic Isentropic assumption only

Isentropic Pressure Changers also have an additional Property Block named properties_isentropic (attached to the Unit Model, not the Holdup Block).

PressureChangerData Class

class idaes.models.pressure_changer.PressureChangerData(component)[source]

Compressor/Expander Unit Class

build()[source]

Begin building model (pre-DAE transformation)

Parameters:None
Returns:None
init_isentropic(state_args, outlvl, solver, optarg)[source]

Initialisation routine for unit (default solver ipopt)

Keyword Arguments:
 
  • state_args – a dict of arguments to be passed to the property package(s) to provide an initial state for initialization (see documentation of the specific property package) (default = {}).
  • outlvl

    sets output level of initialisation routine

    • 0 = no output (default)
    • 1 = return solver state for each step in routine
    • 2 = return solver state for each step in subroutines
    • 3 = include solver output infomation (tee=True)
  • optarg – solver options dictionary object (default={‘tol’: 1e-6})
  • solver – str indicating whcih solver to use during initialization (default = ‘ipopt’)
Returns:

None

initialize(state_args={}, routine=None, outlvl=0, solver='ipopt', optarg={'tol': 1e-06})[source]

General wrapper for pressure changer initialisation routines

Keyword Arguments:
 
  • routine – str stating which initialization routine to execute * None - use routine matching thermodynamic_assumption * ‘isentropic’ - use isentropic initialization routine * ‘isothermal’ - use isothermal initialization routine
  • state_args – a dict of arguments to be passed to the property package(s) to provide an initial state for initialization (see documentation of the specific property package) (default = {}).
  • outlvl

    sets output level of initialisation routine

    • 0 = no output (default)
    • 1 = return solver state for each step in routine
    • 2 = return solver state for each step in subroutines
    • 3 = include solver output infomation (tee=True)
  • optarg – solver options dictionary object (default={‘tol’: 1e-6})
  • solver – str indicating whcih solver to use during initialization (default = ‘ipopt’)
Returns:

None

model_check()[source]

Check that pressure change matches with compressor argument (i.e. if compressor = True, pressure should increase or work should be positive)

Parameters:None
Returns:None
post_transform_build()[source]

Continue model construction after DAE transformation

Parameters:None
Returns:None