def IterateFlow(flow, membrane, Js, Jw, side, vel): [dA] = membrane.GetDimensions(["dAm"]) P = flow.data.get("P") T = flow.data.get("T") rho = flow.data.get("density") rho_w = DensityWater(T) pc_wt = flow.data.get("pc_wt") m_w_i = flow.data.get("mass_water") m_NaCl_i = flow.data.get("mass_NaCl") if side == "draw": m_w_f = m_w_i + Jw * 24 * dA * rho_w m_NaCl_f = m_NaCl_i - Js * 24 * 1e-3 * dA else: m_w_f = m_w_i - Jw * 24 * dA * rho_w m_NaCl_f = m_NaCl_i + Js * 24 * 1e-3 * dA dP = PressureLoss(membrane, pc_wt, rho, side, vel) next_flow = cl.flow({ "P": P - dP, "T": T, "mass_water": m_w_f, "mass_NaCl": m_NaCl_f, "mass_total": m_w_f + m_NaCl_f }) next_flow.CalcPcWt() next_flow.CalcOsmoticProperties() next_flow.CalcFlow() return next_flow
def SizePond(A, D, evaporation, infiltration_loss, m_brine_w, m_brine_NaCl, rainfall, rho_w): h = 0 while h < D: H = [ cl.flow({ "P": P, "T": T, "mass_water": m_brine_w, "mass_NaCl": m_brine_NaCl, "mass_total": m_brine_w + m_brine_NaCl }) ] H[0].CalcPcWt() H[0].CalcOsmoticProperties() H[0].CalcFlow() d = 243 #1st September hh = np.array(H[0].data["flow"] / A) pc_wts = np.array([H[0].data["pc_wt"]]) iterations = 0 while (h < D and pc_wts[len(pc_wts) - 1] < 0.265): d += 1 previous_day = H[len(H) - 1] dd = d % 365 m_NaCl = previous_day.data["mass_NaCl"] m_w = previous_day.data["mass_water"] rho = previous_day.data.get("density") pc_wt = pc_wts[len(pc_wts) - 1] brine_water = m_brine_w brine_NaCl = m_brine_NaCl rain = rainfall[dd] * A * rho_w #kg evap = evaporation[dd] * A * rho_w #kg soil_loss_water = A * infiltration_losses[dd] * rho * ( 1 - pc_wt) if h > 0 else 0 seepage_NaCl = A * infiltration_losses[ dd] * rho * pc_wt if h > 0 else 0 m_w += max(brine_water + rain - evap - soil_loss_water, 0) m_NaCl += max(brine_NaCl - soil_loss_water, 0) m_t = m_w + m_NaCl pond = cl.pond({ "P": P, "T": T, "mass_water": m_w, "mass_NaCl": m_NaCl, "mass_total": m_t }) pond.CalcPcWt() pc_wts = np.append(pc_wts, pond.data["pc_wt"]) pond.CalcOsmoticProperties() pond.CalcVolume() H.append(pond) V = pond.data["V"] / 1 #L h = V / A hh = np.append(hh, h) iterations += 1 A *= 0.95 print(h, iterations, A) return [d, hh, iterations, pc_wts]
import MembraneFlow as mf import numpy as np import pandas as pd from pandas.plotting import register_matplotlib_converters register_matplotlib_converters() import Reporting as r T = 298.15 P = 1.01325 RO = { "recovery_rate": 0.4 } RO_water = cl.flow({ "pc_wt": 0.0001, "P": P, "T": T, "flow": 128e6 #L/d }) seawater = cl.flow({ "pc_wt": 0.035, "P": P, "T": T, "flow": RO_water.data["flow"] / RO["recovery_rate"] #MLD }) seawater.CalcOsmoticProperties() seawater.CalcMassRate() RO_water.CalcOsmoticProperties() RO_water.CalcMassRate() RO_brine = cl.flow({ "P": P, "T": T,
import json fs = open('environmental_data.json', 'r') data = json.loads(fs.read()) rainfall = data.get("rainfall") rainfall_avg = data.get("rainfall_avg") evaporation = data.get("evaporation") evaporation_avg = data.get("evaporation_avg") infiltration_losses = data.get("infiltration_losses") infiltration_losses_avg = data.get("infiltration_losses_avg") P = 1.01325 T = 273.15 + 25 brine_pc_wt = 0.057 #%wt brine = cl.flow({"P": P, "T": T, "pc_wt": brine_pc_wt, "flow": 192e6}) brine.CalcOsmoticProperties() brine.CalcMassRate() brine_water = brine.data.get("mass_water") brine_NaCl = brine.data.get("mass_NaCl") rho_brine = brine.data.get("density") m_t_brine = brine.data.get("mass_total") targ_diff_pc_wt = 0.15 #%wt targ_pond_pc_wt = targ_diff_pc_wt + brine_pc_wt #%wt print(targ_pond_pc_wt) #0.207 gamma_D = 0.3 gamma_F = 1 - gamma_D print(gamma_F) #0.7
s) membrane.CalcElementDimensions() [dAd, dA] = membrane.GetDimensions(["dAd", "dAm"]) #m^2 Qi = 100 #L/h Jw = 35 #L/h/m^2 Js = 5 #L/h/m^2 Qf = f.IDF(Qi, Jw, dA) print(Qi, Qf) P = 50 T = 273.15 pc_wt = 0.1 Vi = Qi / dAd / 1e3 / 3600 #m/s flow = cl.flow({"P": P, "T": T, "pc_wt": pc_wt, "flow": Qi}) flow.CalcOsmoticProperties() flow.CalcMassRate() Ci = flow.data.get("molar_concentration") Cf = f.IDC(Qi, Ci, Qf, Js, dA) print(Ci, Cf) # def IterateFlow(flow, Jw, Js, side, vel): # rho = flow.data.get("density") # rho_w = f.DensityWater(T) # m_w_i = flow.data.get("mass_water") # m_NaCl_i = flow.data.get("mass_NaCl") # if side == "draw": # m_w_f = m_w_i + Jw*dA*rho_w # m_NaCl_f = m_NaCl_i - Js*dA
from pandas.plotting import register_matplotlib_converters register_matplotlib_converters() Amax = 151 * 1e6 #m^2 T = 298.15 P = 1.01325 fs = open('environmental_data.json', 'r') data = json.loads(fs.read()) rainfall = data.get("rainfall") evaporation = data.get("evaporation") infiltration_losses = data.get("infiltration_losses") RO = {"recovery_rate": 0.4} RO_water = cl.flow({ "pc_wt": 0.0001, "P": P, "T": T, "flow": 128 #MLD }) seawater = cl.flow({ "pc_wt": 0.035, "P": P, "T": T, "flow": RO_water.data["flow"] / RO["recovery_rate"] #MLD }) seawater.CalcOsmoticProperties() seawater.CalcMassRate() RO_water.CalcOsmoticProperties() RO_water.CalcMassRate() brine_discharge = cl.flow({ "P": P, "T": T,
import json import math import matplotlib import matplotlib.pyplot as plt from matplotlib.colors import BoundaryNorm from matplotlib.ticker import MaxNLocator import MembraneFlow as mf import numpy as np T = 298.15 P = 1.01325 RO = {"recovery_rate": 0.4} RO_water = cl.flow({ "pc_wt": 0.0001, "P": P, "T": T, "flow": 128e6 #L/d }) seawater = cl.flow({ "pc_wt": 0.035, "P": P, "T": T, "flow": RO_water.data["flow"] / RO["recovery_rate"] #MLD }) seawater.CalcOsmoticProperties() seawater.CalcMassRate() RO_water.CalcOsmoticProperties() RO_water.CalcMassRate() RO_brine = cl.flow({ "P": P, "T": T,