watertap.flowsheets.flex_desal package

Submodules

watertap.flowsheets.flex_desal.flowsheet module

This module contains functions needed for the construction of flexible desalination flowsheet

watertap.flowsheets.flex_desal.flowsheet.add_delayed_startup_constraints(m)[source]

Adds the delayed startup constraints to the model

watertap.flowsheets.flex_desal.flowsheet.add_demand_and_fixed_costs(m)[source]

Adds variables and expressions/constraints for demand and fixed costs

watertap.flowsheets.flex_desal.flowsheet.add_operational_cost_expressions(blk, params: FlexDesalParams)[source]

Adds cost expressions to the flowsheet

watertap.flowsheets.flex_desal.flowsheet.add_useful_expressions(m)[source]

Defines useful expressions for custom objective functions

watertap.flowsheets.flex_desal.flowsheet.build_desal_flowsheet(blk, params: FlexDesalParams)[source]

Builds a flowsheet instance of the entire desalination process

Parameters:
  • blk (Block) – Pyomo Block instance

  • params (object) – Object containing model parameters

watertap.flowsheets.flex_desal.flowsheet.constrain_water_production(m, baseline_production: float | None = None)[source]

Constrains the total water production rate

watertap.flowsheets.flex_desal.params module

This module contains the default values of all the required parameters.

class watertap.flowsheets.flex_desal.params.Battery(energy_capacity: float = 0, power_capacity: float = 50, efficiency: float = 0.86, initial_soc: float = 0.5, minimum_soc: float = 0.2, maximum_soc: float = 0.95)[source]

Bases: object

Parameters for the battery

__init__(energy_capacity: float = 0, power_capacity: float = 50, efficiency: float = 0.86, initial_soc: float = 0.5, minimum_soc: float = 0.2, maximum_soc: float = 0.95) None
class watertap.flowsheets.flex_desal.params.BrineDischargeParams(energy_intensity: float = 0.1, allow_shutdown: bool = False, leakage_fraction: float = 0, minimum_flowrate: float | None = None, nominal_flowrate: float | None = None, maximum_flowrate: float | None = None, nominal_recovery: float | None = None, minimum_recovery: float | None = None, maximum_recovery: float | None = None, minimum_uptime: int | None = None, minimum_downtime: int | None = None, startup_delay: int | None = None)[source]

Bases: UnitParams

Parameters for the brine discharge unit

__init__(energy_intensity: float = 0.1, allow_shutdown: bool = False, leakage_fraction: float = 0, minimum_flowrate: float | None = None, nominal_flowrate: float | None = None, maximum_flowrate: float | None = None, nominal_recovery: float | None = None, minimum_recovery: float | None = None, maximum_recovery: float | None = None, minimum_uptime: int | None = None, minimum_downtime: int | None = None, startup_delay: int | None = None) None
class watertap.flowsheets.flex_desal.params.FlexDesalParams(start_date: str = '2022-07-05 00:00:00', end_date: str = '2022-07-06 00:00:00', timestep_hours: float = 0.25, product_water_price: float = 0, fixed_monthly_cost: float = 766000, customer_rate: float = 100, constrain_to_baseline_production: bool = False, curtailment_fraction: float = 0.0, annual_production_AF: float = 3125, production_constraint_to_objective: bool = False, production_constraint_penalty: float = 0.6, emissions_cost: float = 0, include_demand_response: bool = False, include_battery: bool = False, include_onsite_solar: bool = False, onsite_capacity: float = 0)[source]

Bases: object

Parameters for flexible desalination

__init__(start_date: str = '2022-07-05 00:00:00', end_date: str = '2022-07-06 00:00:00', timestep_hours: float = 0.25, product_water_price: float = 0, fixed_monthly_cost: float = 766000, customer_rate: float = 100, constrain_to_baseline_production: bool = False, curtailment_fraction: float = 0.0, annual_production_AF: float = 3125, production_constraint_to_objective: bool = False, production_constraint_penalty: float = 0.6, emissions_cost: float = 0, include_demand_response: bool = False, include_battery: bool = False, include_onsite_solar: bool = False, onsite_capacity: float = 0) None
class watertap.flowsheets.flex_desal.params.IntakeParams(energy_intensity: float = 0.157121734, allow_shutdown: bool = False, leakage_fraction: float = 0, minimum_flowrate: float = 1063.5, nominal_flowrate: float = 1063.5, maximum_flowrate: float = 1063.5, nominal_recovery: float | None = None, minimum_recovery: float | None = None, maximum_recovery: float | None = None, minimum_uptime: int | None = None, minimum_downtime: int | None = None, startup_delay: int | None = None)[source]

Bases: UnitParams

Parameters for the intake unit

__init__(energy_intensity: float = 0.157121734, allow_shutdown: bool = False, leakage_fraction: float = 0, minimum_flowrate: float = 1063.5, nominal_flowrate: float = 1063.5, maximum_flowrate: float = 1063.5, nominal_recovery: float | None = None, minimum_recovery: float | None = None, maximum_recovery: float | None = None, minimum_uptime: int | None = None, minimum_downtime: int | None = None, startup_delay: int | None = None) None
class watertap.flowsheets.flex_desal.params.PosttreatmentParams(energy_intensity: float = 0.41, allow_shutdown: bool = False, leakage_fraction: float = 0, minimum_flowrate: float | None = None, nominal_flowrate: float | None = None, maximum_flowrate: float | None = None, nominal_recovery: float | None = None, minimum_recovery: float | None = None, maximum_recovery: float | None = None, minimum_uptime: int | None = None, minimum_downtime: int | None = None, startup_delay: int | None = None)[source]

Bases: UnitParams

Parameters for the posttreatment unit

__init__(energy_intensity: float = 0.41, allow_shutdown: bool = False, leakage_fraction: float = 0, minimum_flowrate: float | None = None, nominal_flowrate: float | None = None, maximum_flowrate: float | None = None, nominal_recovery: float | None = None, minimum_recovery: float | None = None, maximum_recovery: float | None = None, minimum_uptime: int | None = None, minimum_downtime: int | None = None, startup_delay: int | None = None) None
class watertap.flowsheets.flex_desal.params.PretreatmentParams(energy_intensity: float = 0.01, allow_shutdown: bool = False, leakage_fraction: float = 0, minimum_flowrate: float | None = None, nominal_flowrate: float | None = None, maximum_flowrate: float | None = None, nominal_recovery: float | None = None, minimum_recovery: float | None = None, maximum_recovery: float | None = None, minimum_uptime: int | None = None, minimum_downtime: int = 0, startup_delay: int = 0)[source]

Bases: UnitParams

Parameters for the pretreatment unit

__init__(energy_intensity: float = 0.01, allow_shutdown: bool = False, leakage_fraction: float = 0, minimum_flowrate: float | None = None, nominal_flowrate: float | None = None, maximum_flowrate: float | None = None, nominal_recovery: float | None = None, minimum_recovery: float | None = None, maximum_recovery: float | None = None, minimum_uptime: int | None = None, minimum_downtime: int = 0, startup_delay: int = 0) None
class watertap.flowsheets.flex_desal.params.ROParams(energy_intensity: float | None = None, allow_shutdown: bool = True, leakage_fraction: float | None = None, minimum_flowrate: float | None = None, nominal_flowrate: float = 337.67, maximum_flowrate: float | None = None, nominal_recovery: float = 0.465, minimum_recovery: float = 0.4, maximum_recovery: float = 0.55, minimum_uptime: int = 1, minimum_downtime: int = 4, startup_delay: int = 8, num_ro_skids: int = 3, minimum_operating_skids: int = 2, allow_variable_recovery: bool = False)[source]

Bases: UnitParams

Parameters for the RO unit

__init__(energy_intensity: float | None = None, allow_shutdown: bool = True, leakage_fraction: float | None = None, minimum_flowrate: float | None = None, nominal_flowrate: float = 337.67, maximum_flowrate: float | None = None, nominal_recovery: float = 0.465, minimum_recovery: float = 0.4, maximum_recovery: float = 0.55, minimum_uptime: int = 1, minimum_downtime: int = 4, startup_delay: int = 8, num_ro_skids: int = 3, minimum_operating_skids: int = 2, allow_variable_recovery: bool = False) None
get_energy_intensity(recovery)[source]

Returns the energy intensity for a given recovery

get_energy_intensity_bounds(recovery_lb=None, recovery_ub=None)[source]

Returns the bounds on energy intensity based on the bounds of recovery

get_optimum_energy_intensity(recovery_lb, recovery_ub)[source]

Returns the optimum energy intensity if it exists inside the interval. Returns None if the optimum is at the bounds.

property surrogate_coeffs

Returs the coefficients of the surrogate model as a dictionary

property surrogate_type

Returns the surrogate type for RO energy intensity

class watertap.flowsheets.flex_desal.params.UnitParams(energy_intensity: float | None = None, allow_shutdown: bool = False, leakage_fraction: float | None = None, minimum_flowrate: float | None = None, nominal_flowrate: float | None = None, maximum_flowrate: float | None = None, nominal_recovery: float | None = None, minimum_recovery: float | None = None, maximum_recovery: float | None = None, minimum_uptime: int | None = None, minimum_downtime: int | None = None, startup_delay: int | None = None)[source]

Bases: object

Abstract dataclass for parameters of all units

__init__(energy_intensity: float | None = None, allow_shutdown: bool = False, leakage_fraction: float | None = None, minimum_flowrate: float | None = None, nominal_flowrate: float | None = None, maximum_flowrate: float | None = None, nominal_recovery: float | None = None, minimum_recovery: float | None = None, maximum_recovery: float | None = None, minimum_uptime: int | None = None, minimum_downtime: int | None = None, startup_delay: int | None = None) None
property get_leakage_fraction

Returns the leakage fraction value

property get_recovery

Returns the recovery value

update(value_map: dict)[source]

Updates the values of the specified attributes

watertap.flowsheets.flex_desal.unit_models module

This module contains unit models needed for flexible desalination analysis.

watertap.flowsheets.flex_desal.unit_models.brine_discharge_operation_model(blk, params: FlexDesalParams)[source]

Builds operation model for the brine discharge unit

Parameters:
  • blk (OperationModel) – IDAES OperationModel instance

  • params (object) – Input parameters needed for the model

watertap.flowsheets.flex_desal.unit_models.intake_operation_model(blk, params: IntakeParams)[source]

Builds operation model for the intake

Parameters:
  • blk (OperationModel) – IDAES OperationModel instance

  • params (object) – Input parameters needed for the model

watertap.flowsheets.flex_desal.unit_models.posttreatment_operation_model(blk, params: FlexDesalParams)[source]

Builds operation model for the posttreatment unit

Parameters:
  • blk (OperationModel) – IDAES OperationModel instance

  • params (object) – Input parameters needed for the model

watertap.flowsheets.flex_desal.unit_models.power_generation_operation_model(blk, params: FlexDesalParams)[source]

Builds the operation model for onsite power generation

Parameters:
  • blk (OperationModel) – Instance of IDAES OperationModel

  • design_blk (DesignModel) – Design model containing information on the peak capacity

watertap.flowsheets.flex_desal.unit_models.pretreatment_operation_model(blk, params: PretreatmentParams)[source]

Builds operation model for the pretreatment unit

Parameters:
  • blk (OperationModel) – IDAES OperationModel instance

  • params (object) – Input parameters needed for the model

watertap.flowsheets.flex_desal.unit_models.reverse_osmosis_operation_model(blk, params: ROParams)[source]

Builds operation model for the reverse osmosis unit

Parameters:
  • blk (OperationModel) – IDAES OperationModel instance

  • params (object) – Input parameters needed for the model

watertap.flowsheets.flex_desal.unit_models.ro_skid_operation_model(blk, params: ROParams)[source]

Builds operation model for an RO skid

Parameters:
  • blk (OperationModel) – IDAES OperationModel instance

  • params (object) – Input parameters needed for the model

watertap.flowsheets.flex_desal.utils module

This module contains some utility functions

watertap.flowsheets.flex_desal.utils.fix_recovery(m, recovery)[source]

Modifies the model for the fixed recovery case

watertap.flowsheets.flex_desal.utils.get_baseline_model(m)[source]

Returns a baseline model from the given model

watertap.flowsheets.flex_desal.utils.get_gurobi_solver_model(m, mip_gap=0.01, time_limit=3600, tee=True)[source]

Returns a Pyomo SolverFactory object that is compatible with Gurobi. This function is needed only when the RO recovery is a variable.

watertap.flowsheets.flex_desal.utils.update_recovery_bounds(m, lb, ub)[source]

Updates the bounds on the recovery variable

Module contents