prommis.nanofiltration.nf_brine_plot#

Nanofiltration flowsheet for Donnan steric pore model with dielectric exclusion

prommis.nanofiltration.nf_brine_plot.add_objective(m)[source]#

Adds objective to the pyomo model

Parameters:

m – pyomo model

prommis.nanofiltration.nf_brine_plot.add_pressure_constraint(m, pressure_limit)[source]#

Adds feed pressure constraint to the pyomo model

Parameters:
  • m – pyomo model

  • pressure_limit – upper bound on the outlet pump pressure

prommis.nanofiltration.nf_brine_plot.add_recovery_constraint(m, recovery_limit)[source]#

Adds recovery constraint to the pyomo model

Parameters:
  • m – pyomo model

  • recovery_limit – upper bound on the volume recovery

prommis.nanofiltration.nf_brine_plot.build()[source]#

Builds the NF flowsheet

Returns:

pyomo model

Return type:

m

prommis.nanofiltration.nf_brine_plot.calculate_scale(value)[source]#

Calculates a default scaling value

prommis.nanofiltration.nf_brine_plot.collect_plot_data(m, area, li_rejection, mg_rejection, mg_li_ratio, feed_ratio, feed_pressure)[source]#

Stores the relevant information after each flowsheet solve to prepare plots

Parameters:
  • m – pyomo model

  • area – list to store optimal membrane area (m2)

  • li_rejection – list to store lithium rejection

  • mg_rejection – list to store magnesium rejection

  • mg_li_ratio – list to store Mg:Li mass ratio of the permeate

  • feed_ratio – list to store Mg:Li mass ratio of the feed

  • feed_pressure – list to store the optimal feed pressure (bar)

prommis.nanofiltration.nf_brine_plot.define_feed_composition()[source]#

Returns the ion properties needed for the DSPM-DE property package

Ions include lithium, magnesium, and chloride, assuming LiCl and MgCl2 salts

diffusivity: - https://www.aqion.de/site/diffusion-coefficients - very confident

molecular weights: - very confident

Stokes radius: - average values from https://www.sciencedirect.com/science/article/pii/S138358661100637X - medium confident (averaged values from multiple studies) - reasonable orders of magnitude

ion charge: - very confident

The activity coefficient options are ideal or davies

prommis.nanofiltration.nf_brine_plot.fix_initial_variables(m)[source]#

Fixes the initial variables needed to create 0 DOF

Parameters:

m – pyomo model

prommis.nanofiltration.nf_brine_plot.initialize(m, solver)[source]#

Initializes the flowsheet units

Parameters:
  • m – pyomo model

  • solver – optimization solver

prommis.nanofiltration.nf_brine_plot.initialize_sensitivity()[source]#

Makes plots to perform a sensitivity analysis on the nanofiltration flowsheet

Returns:

list to store optimal membrane area (m2) li_rejection: list to store lithium rejection mg_rejection: list to store magnesium rejection mg_li_ratio: list to store Mg:Li mass ratio of the permeate feed_ratio: list to store Mg:Li mass ratio of the feed feed_pressure: list to store the optimal feed pressure (bar) recovery_vals: list that holds the volume recovery values to test

Return type:

area

prommis.nanofiltration.nf_brine_plot.main()[source]#

Builds and solves the NF flowsheet

Returns:

pyomo model

Return type:

m

prommis.nanofiltration.nf_brine_plot.plot(area, li_rejection, mg_rejection, mg_li_ratio, feed_ratio, feed_pressure, recovery_vals)[source]#

Creates four subplots of the nanofiltration system, reporting ion rejection, Mg:Li ratio, membrane area, and feed pressure as the volume recovery of the membrane changes

Parameters:
  • area – list to store optimal membrane area (m2)

  • li_rejection – list to store lithium rejection

  • mg_rejection – list to store magnesium rejection

  • mg_li_ratio – list to store Mg:Li mass ratio of the permeate

  • feed_ratio – list to store Mg:Li mass ratio of the feed

  • feed_pressure – list to store the optimal feed pressure (bar)

  • recovery_vals – list that holds the volume recovery values to test

prommis.nanofiltration.nf_brine_plot.print_information(m)[source]#

Prints relevant information about the system

prommis.nanofiltration.nf_brine_plot.set_default_feed(m, solver)[source]#

Fixes the concentrations used to initialize the feed using the concentration of the Salar de Atacama (kg/m3 = g/L) Note: Cl- concentration will get overridden to enforce electroneutrality

Parameters:
  • m – pyomo model

  • solver – optimization solver

prommis.nanofiltration.nf_brine_plot.set_nf_feed(blk, solver, flow_mass_h2o, conc_mass_phase_comp)[source]#

Calculates the concentration of the feed solution in molar flow rate

Parameters:
  • blk – flowsheet block

  • solver – optimization solver

  • flow_mass_h2o – inlet water flow rate (feed)

  • conc_mass_phase_conc – mass concentration (feed)

prommis.nanofiltration.nf_brine_plot.set_nf_feed_scaling(blk)[source]#

Calculates the default scaling for the feed solution

prommis.nanofiltration.nf_brine_plot.solve_model(m, solver)[source]#

Optimizes the flowsheet

Parameters:
  • m – pyomo model

  • solver – optimization solver

prommis.nanofiltration.nf_brine_plot.unfix_optimization_variables(m)[source]#

Unfixes select variables to enable optimization with DOF>0

Parameters:

m – pyomo model