watertap.examples.flowsheets.full_treatment_train.flowsheet_components.chemistry package

Submodules

watertap.examples.flowsheets.full_treatment_train.flowsheet_components.chemistry.PostTreatment_SimpleNaOCl_Chlorination module

Simple NaOCl Chlorination process

watertap.examples.flowsheets.full_treatment_train.flowsheet_components.chemistry.PreTreatment_Simple_Softening module

Simple Softening process with addition of Lime

watertap.examples.flowsheets.full_treatment_train.flowsheet_components.chemistry.SepRO_plus_Chlorination module

Simple example of a flowsheet containing an RO separator unit model and a simple NaOCl chlorination post-treatment unit model:

inlet ---> [RO Separator] ---> permeate ---> (Translator) ---> [Chlorination] ---> outlet
                |
                |
                v
            retentate (i.e., waste)

NOTE: The 2 unit models use a different set of state_vars. Thus, this will need to be resolved with some clever constraint formulation.

Both inlet and outlet streams use K for temperature and Pa for pressure (no change needed)

The flow from RO Separator uses kg/s for individual “species” (H2O and TDS)

The inlet for Chlorination uses a total molar flow rate in mol/s and mole fractions of individual species. To make the appropriate conversions, we will have to start by making some assumptions about the molecular weight of TDS.

MW H2O = 18e-3 kg/mol MW TDS = 58.4e-3 kg/mol

(just assume all as NaCl? : MW Na = 23 g/mol MW Cl = 35.4 g/mol)

Total Molar Flow = [ m.fs.RO.permeate.flow_mass_phase_comp[0, ‘Liq’, ‘H2O’]/(MW H2O) +

m.fs.RO.permeate.flow_mass_phase_comp[0, ‘Liq’, ‘TDS’]/(MW TDS) ]

Molefraction of Na –> Based on TDS

= [m.fs.RO.permeate.flow_mass_phase_comp[0, ‘Liq’, ‘TDS’]/(MW TDS)] / (Total Molar Flow)

Molefraction of Cl = Molefraction of Na (1:1 ratio in the salt)

Molefraction of H2O –> Whatever is remaining

———- NOTE: This is only an example ———

watertap.examples.flowsheets.full_treatment_train.flowsheet_components.chemistry.ZeroDRO_plus_Chlorination module

Simple example of a flowsheet containing an RO separator unit model and a simple NaOCl chlorination post-treatment unit model:

inlet ---> [  0D RO  ] ---> permeate ---> (Translator) ---> [Chlorination] ---> outlet
                |
                |
                v
            retentate (i.e., waste)

NOTE: The 2 unit models use a different set of state_vars. Thus, this will need to be resolved with some clever constraint formulation.

Both inlet and outlet streams use K for temperature and Pa for pressure (no change needed)

The flow from RO Separator uses kg/s for individual “species” [H2O and TDS]

The inlet for Chlorination uses a total molar flow rate in mol/s and mole fractions of individual species. To make the appropriate conversions, we will have to start by making some assumptions about the molecular weight of TDS.

MW H2O = 18e-3 kg/mol MW TDS = 58.4e-3 kg/mol

(just assume all as NaCl? : MW Na = 23 g/mol MW Cl = 35.4 g/mol)

Total Molar Flow = [ m.fs.RO.permeate.flow_mass_phase_comp[0, ‘Liq’, ‘H2O’]/(MW H2O) +

m.fs.RO.permeate.flow_mass_phase_comp[0, ‘Liq’, ‘TDS’]/(MW TDS) ]

Molefraction of Na –> Based on TDS

= [m.fs.RO.permeate.flow_mass_phase_comp[0, ‘Liq’, ‘TDS’]/(MW TDS)] / (Total Molar Flow)

Molefraction of Cl = Molefraction of Na (1:1 ratio in the salt)

Molefraction of H2O –> Whatever is remaining

———- NOTE: This is only an example ———

watertap.examples.flowsheets.full_treatment_train.flowsheet_components.chemistry.posttreatment_ideal_naocl_chlorination_block module

Ideal NaOCl Chlorination posttreatment process

This will build an ideal NaOCl pretreatment block as a combination of a Mixer (where NaOCl is added) and an EquilibriumReactor (where pH and free chlorine is calculated):

            NaOCl stream
                |
                V
inlet stream ---> [Mixer] --- outlet stream ---> [EquilibriumReactor] ---> exit stream (to distribution)

watertap.examples.flowsheets.full_treatment_train.flowsheet_components.chemistry.pretreatment_stoich_softening_block module

Stoichiometric Softening pretreatment process

This will build a stoichiometric pretreatment process unit by unit. The overall process is diagrammed below:

                Lime stream
                    |
                    V
inlet stream ---> [Mixer] --- outlet stream ---> [StoichiometricReactor] ---> mixed flow ... (see below)


...mixed flow ---> [Separator] ---> exit stream (to RO)
                       |
                       V
                   waste stream

Stoich Reactions:

Ca(HCO3)2 +   Ca(OH)2 --> 2 CaCO3 +  2 H2O
Mg(HCO3)2 + 2 Ca(OH)2 --> 2 CaCO3 + Mg(OH)2 +  2 H2O

watertap.examples.flowsheets.full_treatment_train.flowsheet_components.chemistry.test_chlorination_example module

Simple unit tests for example flowsheet of SepRO with Chlorination.

NOTE: That flowsheet is not meant to be viewed as a final product, but a sample of how to incorporate more complex chemistry into a simple flowsheet.

watertap.examples.flowsheets.full_treatment_train.flowsheet_components.chemistry.test_posttreatment module

Simple unit tests for example flowsheet of SepRO with Chlorination.

NOTE: That flowsheet is not meant to be viewed as a final product, but a sample of how to incorporate more complex chemistry into a simple flowsheet.

watertap.examples.flowsheets.full_treatment_train.flowsheet_components.chemistry.test_pretreatment module

Simple unit tests for example flowsheet of SepRO with Chlorination.

NOTE: That flowsheet is not meant to be viewed as a final product, but a sample of how to incorporate more complex chemistry into a simple flowsheet.

Module contents