diff --git a/docs/technical_reference/unit_models/electrodialysis_1D.rst b/docs/technical_reference/unit_models/electrodialysis_1D.rst index c30cd10293..b2f19cdb18 100644 --- a/docs/technical_reference/unit_models/electrodialysis_1D.rst +++ b/docs/technical_reference/unit_models/electrodialysis_1D.rst @@ -120,7 +120,7 @@ are parameters that should be provided in order to fully solve the model. "Cell pair number", ":math:`n`", "cell_pair_num", "None", "dimensionless", 1 "Current utilization coefficient", ":math:`\xi`", "current_utilization", "None", "dimensionless", 1 "Channel height", ":math:`d`", "channel_height", "none", ":math:`m` ", 1 - "Membrane areal resistance independent on ion concentration", ":math:`r_{const}`", "membrane_areal_resistance_const", "['cem', 'aem']", ":math:`\Omega m^2`", 2 + "Membrane areal resistance at infinitive ion concentration", ":math:`r_{const}`", "membrane_areal_resistance", "['cem', 'aem']", ":math:`\Omega m^2`", 2 "Membrane areal resistance coefficient to the reciprocal of the ion concentration", ":math:`r_{coef}`", "membrane_areal_resistance_coef", "['cem', 'aem']", ":math:`\Omega mol m^{-1}`", 2 "Spacer conductivity coefficient", ":math:`\sigma`", "spacer_conductivity_coefficient", "None", "dimensionless", 1 "Cell width", ":math:`b`", "cell_width", "None", ":math:`\text{m}`", 1 diff --git a/watertap/flowsheets/electrodialysis/electrodialysis_1stack.py b/watertap/flowsheets/electrodialysis/electrodialysis_1stack.py index bc07ebca0c..1cb532fac9 100644 --- a/watertap/flowsheets/electrodialysis/electrodialysis_1stack.py +++ b/watertap/flowsheets/electrodialysis/electrodialysis_1stack.py @@ -205,8 +205,8 @@ def set_operating_conditions(m): m.fs.EDstack.cell_pair_num.fix(100) m.fs.EDstack.current_utilization.fix(1) m.fs.EDstack.channel_height.fix(2.7e-4) - m.fs.EDstack.membrane_areal_resistance_const["cem"].fix(1.89e-4) - m.fs.EDstack.membrane_areal_resistance_const["aem"].fix(1.77e-4) + m.fs.EDstack.membrane_areal_resistance["cem"].fix(1.89e-4) + m.fs.EDstack.membrane_areal_resistance["aem"].fix(1.77e-4) m.fs.EDstack.membrane_areal_resistance_coef["cem"].fix(0) m.fs.EDstack.membrane_areal_resistance_coef["aem"].fix(0) m.fs.EDstack.cell_width.fix(0.1) diff --git a/watertap/flowsheets/electrodialysis/electrodialysis_1stack_conc_recirc.py b/watertap/flowsheets/electrodialysis/electrodialysis_1stack_conc_recirc.py index 9781b4db90..e0828744b8 100644 --- a/watertap/flowsheets/electrodialysis/electrodialysis_1stack_conc_recirc.py +++ b/watertap/flowsheets/electrodialysis/electrodialysis_1stack_conc_recirc.py @@ -277,8 +277,8 @@ def _condition_base(m): m.fs.EDstack.water_trans_number_membrane["aem"].fix(4.3) m.fs.EDstack.water_permeability_membrane["cem"].fix(2.16e-14) m.fs.EDstack.water_permeability_membrane["aem"].fix(1.75e-14) - m.fs.EDstack.membrane_areal_resistance_const["cem"].fix(1.89e-4) - m.fs.EDstack.membrane_areal_resistance_const["aem"].fix(1.77e-4) + m.fs.EDstack.membrane_areal_resistance["cem"].fix(1.89e-4) + m.fs.EDstack.membrane_areal_resistance["aem"].fix(1.77e-4) m.fs.EDstack.membrane_areal_resistance_coef["cem"].fix(0) m.fs.EDstack.membrane_areal_resistance_coef["aem"].fix(0) m.fs.EDstack.solute_diffusivity_membrane["cem", "Na_+"].fix(3.28e-11) diff --git a/watertap/flowsheets/electrodialysis/electrodialysis_1stack_conc_recirc_ui.py b/watertap/flowsheets/electrodialysis/electrodialysis_1stack_conc_recirc_ui.py index a0c463795c..fc29bd1044 100644 --- a/watertap/flowsheets/electrodialysis/electrodialysis_1stack_conc_recirc_ui.py +++ b/watertap/flowsheets/electrodialysis/electrodialysis_1stack_conc_recirc_ui.py @@ -240,7 +240,7 @@ def export_variables(flowsheet=None, exports=None, build_options=None, **kwargs) ) exports.add( - obj=fs.EDstack.membrane_areal_resistance_const["cem"], + obj=fs.EDstack.membrane_areal_resistance["cem"], name="Areal resistnace of CEM", ui_units=pyunits.ohm * pyunits.meter**2, display_units="ohm m^2", @@ -251,7 +251,7 @@ def export_variables(flowsheet=None, exports=None, build_options=None, **kwargs) is_output=False, ) exports.add( - obj=fs.EDstack.membrane_areal_resistance_const["aem"], + obj=fs.EDstack.membrane_areal_resistance["aem"], name="Areal resistnace of AEM", ui_units=pyunits.ohm * pyunits.meter**2, display_units="ohm m^2", diff --git a/watertap/unit_models/electrodialysis_1D.py b/watertap/unit_models/electrodialysis_1D.py index 55d5d98219..cf8d897895 100644 --- a/watertap/unit_models/electrodialysis_1D.py +++ b/watertap/unit_models/electrodialysis_1D.py @@ -594,7 +594,7 @@ def build(self): units=pyunits.ohm * pyunits.meter**2, doc="Areal resistance of membrane", ) - self.membrane_areal_resistance_const = Var( + self.membrane_areal_resistance = Var( self.membrane_set, initialize=2e-4, bounds=(1e-6, 1), @@ -811,7 +811,7 @@ def eq_get_membrane_areal_resisance_x(self, t, memb, x): * self.config.property_package.charge_comp[j] for j in self.cation_set ) - == self.membrane_areal_resistance_const[memb] + == self.membrane_areal_resistance[memb] * sum( self.diluate.properties[t, x].conc_mol_phase_comp["Liq", j] * self.config.property_package.charge_comp[j] @@ -1909,7 +1909,9 @@ def eq_Re(self): ) def eq_Sc(self): - return self.N_Sc == self.visc_d * self.dens_mass**-1 * self.diffus_mass**-1 + return ( + self.N_Sc == self.visc_d * self.dens_mass**-1 * self.diffus_mass**-1 + ) @self.Constraint( doc="To calculate Sc", @@ -1979,7 +1981,10 @@ def eq_friction_factor(self): ): return ( self.friction_factor - == 4 * 50.6 * self.spacer_porosity**-7.06 * self.N_Re**-1 + == 4 + * 50.6 + * self.spacer_porosity**-7.06 + * self.N_Re**-1 ) elif ( self.config.friction_factor_method @@ -2054,24 +2059,24 @@ def initialize_build( in self[k].diluate.properties[set].define_state_vars() ): for ind in self[k].diluate.properties[set].flow_mol_phase_comp: - self[k].diluate.properties[set].flow_mol_phase_comp[ind] = ( - value( - self[k] - .diluate.properties[(0.0, 0.0)] - .flow_mol_phase_comp[ind] - ) + self[k].diluate.properties[set].flow_mol_phase_comp[ + ind + ] = value( + self[k] + .diluate.properties[(0.0, 0.0)] + .flow_mol_phase_comp[ind] ) if ( "flow_mass_phase_comp" in self[k].diluate.properties[set].define_state_vars() ): for ind in self[k].diluate.properties[set].flow_mass_phase_comp: - self[k].diluate.properties[set].flow_mass_phase_comp[ind] = ( - value( - self[k] - .diluate.properties[(0.0, 0.0)] - .flow_mass_phase_comp[ind] - ) + self[k].diluate.properties[set].flow_mass_phase_comp[ + ind + ] = value( + self[k] + .diluate.properties[(0.0, 0.0)] + .flow_mass_phase_comp[ind] ) if hasattr(self[k], "conc_mem_surf_mol_x"): for mem in self[k].membrane_set: @@ -2113,12 +2118,12 @@ def initialize_build( in self[k].concentrate.properties[set].define_state_vars() ): for ind in self[k].concentrate.properties[set].flow_mol_phase_comp: - self[k].concentrate.properties[set].flow_mol_phase_comp[ind] = ( - value( - self[k] - .concentrate.properties[(0.0, 0.0)] - .flow_mol_phase_comp[ind] - ) + self[k].concentrate.properties[set].flow_mol_phase_comp[ + ind + ] = value( + self[k] + .concentrate.properties[(0.0, 0.0)] + .flow_mol_phase_comp[ind] ) if ( "flow_mass_phase_comp" @@ -2145,8 +2150,8 @@ def initialize_build( ) self[k].total_areal_resistance_x[...].set_value( ( - self[k].membrane_areal_resistance_const["aem"] - + self[k].membrane_areal_resistance_const["cem"] + self[k].membrane_areal_resistance["aem"] + + self[k].membrane_areal_resistance["cem"] + self[k].channel_height * ( self[k].concentrate.properties[set].elec_cond_phase["Liq"] ** -1 @@ -2158,7 +2163,7 @@ def initialize_build( ) for memb in self[k].membrane_set: self[k].membrane_areal_resistance_x[memb, :].set_value( - self[k].membrane_areal_resistance_const[memb] + self[k].membrane_areal_resistance[memb] ) # --------------------------------------------------------------------- @@ -2221,12 +2226,10 @@ def calculate_scaling_factors(self): iscale.set_scaling_factor(self.membrane_thickness, 1e4) if ( - iscale.get_scaling_factor( - self.membrane_areal_resistance_const, warning=True - ) + iscale.get_scaling_factor(self.membrane_areal_resistance, warning=True) is None ): - iscale.set_scaling_factor(self.membrane_areal_resistance_const, 1e4) + iscale.set_scaling_factor(self.membrane_areal_resistance, 1e4) if ( iscale.get_scaling_factor(self.solute_diffusivity_membrane, warning=True) @@ -2352,7 +2355,7 @@ def calculate_scaling_factors(self): # No warnings if no providing. iscale.set_scaling_factor( self.membrane_areal_resistance_x, - iscale.get_scaling_factor(self.membrane_areal_resistance_const["cem"]), + iscale.get_scaling_factor(self.membrane_areal_resistance["cem"]), ) for ind in self.total_areal_resistance_x: if ( @@ -2362,9 +2365,7 @@ def calculate_scaling_factors(self): is None ): sf = ( - iscale.get_scaling_factor( - self.membrane_areal_resistance_const["cem"] - ) + iscale.get_scaling_factor(self.membrane_areal_resistance["cem"]) ** 2 + iscale.get_scaling_factor(self.channel_height) ** 2 * ( @@ -2935,7 +2936,7 @@ def _get_performance_contents(self, time_point=0): return { "vars": { - "Total electrical power consumption(Watt)": self.diluate.power_electrical_x[ + "Total electrical power consumption (W)": self.diluate.power_electrical_x[ time_point, self.diluate.length_domain.last() ], "Specific electrical power consumption, ED stack (kW*h/m**3)": self.specific_power_electrical[ diff --git a/watertap/unit_models/tests/test_electrodialysis_1D.py b/watertap/unit_models/tests/test_electrodialysis_1D.py index e4cdc395ba..403febd23f 100644 --- a/watertap/unit_models/tests/test_electrodialysis_1D.py +++ b/watertap/unit_models/tests/test_electrodialysis_1D.py @@ -100,7 +100,7 @@ def test_build_model(self, electrodialysis_1d_cell1): assert isinstance(m.fs.unit.ion_trans_number_membrane, Var) assert isinstance(m.fs.unit.water_trans_number_membrane, Var) assert isinstance(m.fs.unit.water_permeability_membrane, Var) - assert isinstance(m.fs.unit.membrane_areal_resistance_const, Var) + assert isinstance(m.fs.unit.membrane_areal_resistance, Var) assert isinstance(m.fs.unit.current_density_x, Var) assert isinstance(m.fs.unit.voltage_applied, Var) assert isinstance(m.fs.unit.voltage_x, Var) @@ -138,8 +138,8 @@ def test_stats_constant_vol(self, electrodialysis_1d_cell1): m.fs.unit.cell_pair_num.fix(10) m.fs.unit.current_utilization.fix(1) m.fs.unit.channel_height.fix(2.7e-4) - m.fs.unit.membrane_areal_resistance_const["cem"].fix(1.89e-4) - m.fs.unit.membrane_areal_resistance_const["aem"].fix(1.77e-4) + m.fs.unit.membrane_areal_resistance["cem"].fix(1.89e-4) + m.fs.unit.membrane_areal_resistance["aem"].fix(1.77e-4) m.fs.unit.membrane_areal_resistance_coef["cem"].fix(0) m.fs.unit.membrane_areal_resistance_coef["aem"].fix(0) m.fs.unit.cell_width.fix(0.1) @@ -264,7 +264,7 @@ def test_performance_contents(self, electrodialysis_1d_cell1): perform_dict = m.fs.unit._get_performance_contents() assert "vars" in perform_dict assert value( - perform_dict["vars"]["Total electrical power consumption(Watt)"] + perform_dict["vars"]["Total electrical power consumption (W)"] ) == pytest.approx(3.0, rel=5e-3) assert value( perform_dict["vars"][ @@ -387,7 +387,7 @@ def test_build_model(self, electrodialysis_1d_cell2): assert isinstance(m.fs.unit.ion_trans_number_membrane, Var) assert isinstance(m.fs.unit.water_trans_number_membrane, Var) assert isinstance(m.fs.unit.water_permeability_membrane, Var) - assert isinstance(m.fs.unit.membrane_areal_resistance_const, Var) + assert isinstance(m.fs.unit.membrane_areal_resistance, Var) assert isinstance(m.fs.unit.current_applied, Var) assert isinstance(m.fs.unit.current_density_x, Var) assert isinstance(m.fs.unit.voltage_x, Var) @@ -422,8 +422,8 @@ def test_stats_constant_vol(self, electrodialysis_1d_cell2): m.fs.unit.cell_pair_num.fix(10) m.fs.unit.current_utilization.fix(1) m.fs.unit.channel_height.fix(2.7e-4) - m.fs.unit.membrane_areal_resistance_const["cem"].fix(1.89e-4) - m.fs.unit.membrane_areal_resistance_const["aem"].fix(1.77e-4) + m.fs.unit.membrane_areal_resistance["cem"].fix(1.89e-4) + m.fs.unit.membrane_areal_resistance["aem"].fix(1.77e-4) m.fs.unit.membrane_areal_resistance_coef["cem"].fix(0) m.fs.unit.membrane_areal_resistance_coef["aem"].fix(0) m.fs.unit.cell_width.fix(0.1) @@ -543,7 +543,7 @@ def test_performance_contents(self, electrodialysis_1d_cell2): perform_dict = m.fs.unit._get_performance_contents() assert "vars" in perform_dict assert value( - perform_dict["vars"]["Total electrical power consumption(Watt)"] + perform_dict["vars"]["Total electrical power consumption (W)"] ) == pytest.approx(5.83, rel=5e-3) assert value( perform_dict["vars"][ @@ -604,7 +604,7 @@ def test_build_model(self, electrodialysis_1d_cell3): assert isinstance(m.fs.unit.ion_trans_number_membrane, Var) assert isinstance(m.fs.unit.water_trans_number_membrane, Var) assert isinstance(m.fs.unit.water_permeability_membrane, Var) - assert isinstance(m.fs.unit.membrane_areal_resistance_const, Var) + assert isinstance(m.fs.unit.membrane_areal_resistance, Var) assert isinstance(m.fs.unit.current_applied, Var) assert isinstance(m.fs.unit.current_density_x, Var) assert isinstance(m.fs.unit.voltage_x, Var) @@ -640,8 +640,8 @@ def test_stats_constant_vol(self, electrodialysis_1d_cell3): m.fs.unit.cell_pair_num.fix(10) m.fs.unit.current_utilization.fix(1) m.fs.unit.channel_height.fix(2.7e-4) - m.fs.unit.membrane_areal_resistance_const["cem"].fix(1.89e-4) - m.fs.unit.membrane_areal_resistance_const["aem"].fix(1.77e-4) + m.fs.unit.membrane_areal_resistance["cem"].fix(1.89e-4) + m.fs.unit.membrane_areal_resistance["aem"].fix(1.77e-4) m.fs.unit.membrane_areal_resistance_coef["cem"].fix(0) m.fs.unit.membrane_areal_resistance_coef["aem"].fix(0) m.fs.unit.cell_width.fix(0.1) @@ -775,7 +775,7 @@ def test_performance_contents(self, electrodialysis_1d_cell3): perform_dict = m.fs.unit._get_performance_contents() assert "vars" in perform_dict assert value( - perform_dict["vars"]["Total electrical power consumption(Watt)"] + perform_dict["vars"]["Total electrical power consumption (W)"] ) == pytest.approx(5.837, rel=5e-3) assert value( perform_dict["vars"][ @@ -836,7 +836,7 @@ def test_build_model(self, electrodialysis_1d_cell4): assert isinstance(m.fs.unit.ion_trans_number_membrane, Var) assert isinstance(m.fs.unit.water_trans_number_membrane, Var) assert isinstance(m.fs.unit.water_permeability_membrane, Var) - assert isinstance(m.fs.unit.membrane_areal_resistance_const, Var) + assert isinstance(m.fs.unit.membrane_areal_resistance, Var) assert isinstance(m.fs.unit.current_density_x, Var) assert isinstance(m.fs.unit.voltage_applied, Var) assert isinstance(m.fs.unit.voltage_x, Var) @@ -877,8 +877,8 @@ def test_stats_constant_vol(self, electrodialysis_1d_cell4): m.fs.unit.cell_pair_num.fix(10) m.fs.unit.current_utilization.fix(1) m.fs.unit.channel_height.fix(5e-4) - m.fs.unit.membrane_areal_resistance_const["cem"].fix(1.89e-4) - m.fs.unit.membrane_areal_resistance_const["aem"].fix(1.77e-4) + m.fs.unit.membrane_areal_resistance["cem"].fix(1.89e-4) + m.fs.unit.membrane_areal_resistance["aem"].fix(1.77e-4) m.fs.unit.membrane_areal_resistance_coef["cem"].fix(0) m.fs.unit.membrane_areal_resistance_coef["aem"].fix(0) m.fs.unit.cell_width.fix(0.1) @@ -1007,7 +1007,7 @@ def test_performance_contents(self, electrodialysis_1d_cell4): perform_dict = m.fs.unit._get_performance_contents() assert "vars" in perform_dict assert value( - perform_dict["vars"]["Total electrical power consumption(Watt)"] + perform_dict["vars"]["Total electrical power consumption (W)"] ) == pytest.approx(1.4735, rel=1e-3) assert value( perform_dict["vars"][ @@ -1071,7 +1071,7 @@ def test_build_model(self, electrodialysis_1d_cell5): assert isinstance(m.fs.unit.ion_trans_number_membrane, Var) assert isinstance(m.fs.unit.water_trans_number_membrane, Var) assert isinstance(m.fs.unit.water_permeability_membrane, Var) - assert isinstance(m.fs.unit.membrane_areal_resistance_const, Var) + assert isinstance(m.fs.unit.membrane_areal_resistance, Var) assert isinstance(m.fs.unit.current_density_x, Var) assert isinstance(m.fs.unit.voltage_applied, Var) assert isinstance(m.fs.unit.voltage_x, Var) @@ -1121,8 +1121,8 @@ def test_stats_constant_vol(self, electrodialysis_1d_cell5): m.fs.unit.cell_pair_num.fix(10) m.fs.unit.current_utilization.fix(1) m.fs.unit.channel_height.fix(5e-4) - m.fs.unit.membrane_areal_resistance_const["cem"].fix(1.89e-4) - m.fs.unit.membrane_areal_resistance_const["aem"].fix(1.77e-4) + m.fs.unit.membrane_areal_resistance["cem"].fix(1.89e-4) + m.fs.unit.membrane_areal_resistance["aem"].fix(1.77e-4) m.fs.unit.membrane_areal_resistance_coef["cem"].fix(0) m.fs.unit.membrane_areal_resistance_coef["aem"].fix(0) m.fs.unit.cell_width.fix(0.1) @@ -1224,7 +1224,7 @@ def test_performance_contents(self, electrodialysis_1d_cell5): perform_dict = m.fs.unit._get_performance_contents() assert "vars" in perform_dict assert value( - perform_dict["vars"]["Total electrical power consumption(Watt)"] + perform_dict["vars"]["Total electrical power consumption (W)"] ) == pytest.approx(1.3907, rel=1e-3) assert value( perform_dict["vars"][ @@ -1296,8 +1296,8 @@ def test_stats_constant_vol(self, edcell_ilim_empi, edcell_ilim_theo): m.fs.unit.cell_pair_num.fix(10) m.fs.unit.current_utilization.fix(1) m.fs.unit.channel_height.fix(5e-4) - m.fs.unit.membrane_areal_resistance_const["cem"].fix(1.89e-4) - m.fs.unit.membrane_areal_resistance_const["aem"].fix(1.77e-4) + m.fs.unit.membrane_areal_resistance["cem"].fix(1.89e-4) + m.fs.unit.membrane_areal_resistance["aem"].fix(1.77e-4) m.fs.unit.membrane_areal_resistance_coef["cem"].fix(0) m.fs.unit.membrane_areal_resistance_coef["aem"].fix(0) m.fs.unit.cell_width.fix(0.1) @@ -1468,7 +1468,7 @@ def test_build_model(self, electrodialysis_1d_cell6): assert isinstance(m.fs.unit.ion_trans_number_membrane, Var) assert isinstance(m.fs.unit.water_trans_number_membrane, Var) assert isinstance(m.fs.unit.water_permeability_membrane, Var) - assert isinstance(m.fs.unit.membrane_areal_resistance_const, Var) + assert isinstance(m.fs.unit.membrane_areal_resistance, Var) assert isinstance(m.fs.unit.current_density_x, Var) assert isinstance(m.fs.unit.current_applied, Var) assert isinstance(m.fs.unit.voltage_x, Var) @@ -1518,8 +1518,8 @@ def test_stats_constant_vol(self, electrodialysis_1d_cell6): m.fs.unit.cell_pair_num.fix(10) m.fs.unit.current_utilization.fix(1) m.fs.unit.channel_height.fix(5e-4) - m.fs.unit.membrane_areal_resistance_const["cem"].fix(1.89e-4) - m.fs.unit.membrane_areal_resistance_const["aem"].fix(1.77e-4) + m.fs.unit.membrane_areal_resistance["cem"].fix(1.89e-4) + m.fs.unit.membrane_areal_resistance["aem"].fix(1.77e-4) m.fs.unit.membrane_areal_resistance_coef["cem"].fix(0) m.fs.unit.membrane_areal_resistance_coef["aem"].fix(0) m.fs.unit.cell_width.fix(0.1) @@ -1621,7 +1621,7 @@ def test_performance_contents(self, electrodialysis_1d_cell6): perform_dict = m.fs.unit._get_performance_contents() assert "vars" in perform_dict assert value( - perform_dict["vars"]["Total electrical power consumption(Watt)"] + perform_dict["vars"]["Total electrical power consumption (W)"] ) == pytest.approx(12.904, rel=1e-3) assert value( perform_dict["vars"][ @@ -1803,8 +1803,8 @@ def test_deltaP_various_methods(self, ed_m0, ed_m1, ed_m2, ed_m3, ed_m4, ed_m5): m.fs.unit.cell_pair_num.fix(56) m.fs.unit.current_utilization.fix(1) m.fs.unit.channel_height.fix(7.1e-4) - m.fs.unit.membrane_areal_resistance_const["cem"].fix(1.89e-4) - m.fs.unit.membrane_areal_resistance_const["aem"].fix(1.77e-4) + m.fs.unit.membrane_areal_resistance["cem"].fix(1.89e-4) + m.fs.unit.membrane_areal_resistance["aem"].fix(1.77e-4) m.fs.unit.membrane_areal_resistance_coef["cem"].fix(0) m.fs.unit.membrane_areal_resistance_coef["aem"].fix(0) m.fs.unit.cell_width.fix(0.197)