From ff7f0ee656091b28c3cfb4adf577dd9c6224a630 Mon Sep 17 00:00:00 2001 From: Gabriel Patron <g2patron@uwaterloo.ca> Date: Mon, 12 Aug 2024 05:19:52 -0400 Subject: [PATCH] Upload New File --- MPC_RAS_tempdist_git.py | 1995 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 1995 insertions(+) create mode 100644 MPC_RAS_tempdist_git.py diff --git a/MPC_RAS_tempdist_git.py b/MPC_RAS_tempdist_git.py new file mode 100644 index 0000000..dd70fe6 --- /dev/null +++ b/MPC_RAS_tempdist_git.py @@ -0,0 +1,1995 @@ + +# everything has been checked + +from pyomo.environ import * +from pyomo.dae import * +from pyomo.opt import SolverFactory +import numpy as mp +import matplotlib.pyplot as plt +import math +InitGUStates={0: 0.0004941262758492059, 1: 0.0026610418262743765, 2: 0.0005953489739768516, 3: 0.007999999921084513, 4: 0.008, 5: 0, 6: 0.0012704702721796658, 7: 0.0006551514887411368, 8: 0.024912867884266228, 9: 0.0004521422131039016, 10: 0.01048087596374192, 11: 0.0033743585516853034, 12: 0.021094991040364303, 13: 3.258529553051713e-05, 14: 0.2548137888637069, 15: 0.08203828436634969, 16: 0.002858920928472409, 17: 0.00032623896911251616, 18: 0.006184272269933473, 19: 0.019571519207748106, 20: 0.0004941262758492059, 21: 0.0026610418262743765, 22: 0.0005953489739768516, 23: 0.007999999921084513, 24: 0.008, 25: 0, 26: 0.0012704702721796658, 27: 0.0006551514887411368, 28: 0.024912867884266228, 29: 0.0004521422131039016, 30: 0.01048087596374192, 31: 0.0033743585516853034, 32: 0.021094991040364303, 33: 3.258529553051713e-05, 34: 0.2548137888637069, 35: 0.08203828436634969, 36: 0.002858920928472409, 37: 0.00032623896911251616, 38: 0.006184272269933473, 39: 0.019571519207748106, 40: 0.0006248485572695803, 41: 0.002697183223242683, 42: 0.0006262134488224627, 43: 0.007999999922041812, 44: 0.008, 45: 0.001476084484174653, 46: 0.0012976268154275138, 47: 0.024912867884244745, 48: 0.0008619423141437846, 49: 0, 50: 3.2301907373349344e-05, 51: 0.0033450122867474297, 52: 0.010389725435038574, 53: 0.020911531222781592, 54: 0.04707215999973613, 55: 0.019415519999952287, 56: 0.009498240000433996, 57: 0.06460622112977724, 58: 0.19318526906403832, 59: 0.06460622112967648, 60: 0.12351189333605922, 61: 0.0002822708778531383, 62: 0.0002822708778531383, 63: 0.0002798160125124163, 64: 0.00047569827657743363, 65: 0.00047569827657743363, 66: 0.0004715612068880054, 67: 0.011565295475379671, 68: 0.011565295475379671, 69: 45, 70: 2300} + + +def MPC_FISH(h,P,States,inputs,n_coll,flag,xsp,ghaza): + m=ConcreteModel() + m.t=ContinuousSet(bounds=(0,h*P)) + + m.F=Var(m.t,initialize=ghaza[1],bounds=(0,3)) #manipulated variable + m.kl=Var(m.t,bounds=(0,1),initialize=inputs[1]) #manipulated variable + m.klBR1=Var(m.t,bounds=(0,1),initialize=inputs[2]) #manipulated variable + m.klBR2=Var(m.t,bounds=(0,1),initialize=inputs[4]) #manipulated variable + m.Q4=Var(m.t,bounds=(0,3),initialize=inputs[3]) #manipulated variable + + m.n0=Param(initialize=States[70],mutable = True) # Number of fish when the fish size reaches 6 + m.agro=Param(initialize=0.4) + m.hgro=Param(initialize= 0.08) + m.T=Param(initialize=19.5, mutable = True) # Temperature (C) + m.Tmingro=Param(initialize=1) + m.Tmaxgro=Param(initialize=25) + m.Toptgro=Param(initialize=16) + m.ratioo=Param(initialize=1) + m.Q =Param(initialize=172.8 ) # 2*172.8 or the flow from the MBBs to the fish tank + m.Q1 =Param(initialize=345.6) + + def _tau(m): + return exp(-4.6*((m.T-m.Toptgro)/(m.Tmaxgro-m.Toptgro))**4) + m.tau=Expression(rule=_tau) + + m.jgro=Param(initialize=0.0132) + m.Kmingro=Param(initialize=0.00133) + m.mgro=Param(initialize=0.67) + m.ngro=Param(initialize=0.81) + m.Kgro=m.Kmingro*exp(m.jgro*(m.T-m.Tmingro)) + + + m.DOcritgro=Param(initialize=6.98) #DOmaxFI + m.DOmingro=Param(initialize=5.3 ) #LOS + + m.Acritgro=Param(initialize=0.0125) + m.Amaxgro=Param(initialize=1.4) + + m.fgro=Param(initialize=1) + + m.tav1=Param(initialize=0.211) #Feed residence time(day) + m.V=Param(initialize=5.5) # Fish tank volume (m3) + m.IBW=Param(initialize=45) # initial body weight of fish(g) + + ### Feed composition + m.prot=Param(initialize=0.45) + m.lip=Param(initialize=0.24) + m.NFE=Param(initialize=0.154) + m.fiber=Param(initialize=0.027) + + m.ADCprot=Param(initialize=0.94) + m.ADClip=Param(initialize=0.91) + m.ADCNFE=Param(initialize=0.66) + + + m.muh =Param(initialize=4) + m.bH=Param(initialize=0.3) + m.muAOB =Param(initialize=0.63) + m.muNOB=Param(initialize=1.04) + m.bAOB =Param(initialize=0.05) + m.bNOB =Param(initialize=0.05) + m.kh =Param(initialize=3) + m.Kx=Param(initialize=0.1) + + m.etano2=Param(initialize=0.8) + m.etano3=Param(initialize=0.8) + + # Kinetic paramters + m.KS=Param(initialize=10*(1e-3)) + m.KOH =Param(initialize=0.2*(1e-3),mutable=True) + m.KNOx=Param(initialize=0.5* (1e-3)) + m.KNO2=Param(initialize=1* (1e-3)) + m.etag =Param(initialize=0.8) + + m.Ka =Param(initialize=0.05*1000) + m.KNH =Param(initialize=1*(1e-3)) + m.KNHI =Param(initialize=5*(1e-3)) + + m.KOA=Param(initialize=0.4*(1e-3),mutable=True ) + + + # Stoichiometric parameters + m.YAOB =Param(initialize=0.21) + m.YNOB =Param(initialize=0.03) + + m.YH =Param(initialize=0.67) + m.fp=Param(initialize=0.08) + m.iXB=Param(initialize=0.08) + m.iXP=Param(initialize=0.06) + + # Inlet concentration + m.Hint=Param(initialize=0) + m.Aint=Param(initialize=0) + + + + + + # 0D-BFM parameters + m.icv =Param(initialize=1) + m.a=Param(initialize=0) + m.Vw1 =Param(initialize=0.4) + + + # Decision variables + m.kka=Param(initialize=300) + m.kkd=Param(initialize=0.9) + m.k=Param(initialize=7.48e-5 ) + m.loss=Param(initialize=0.03) + + def _nu(m,i): + return 1 + m.nu=Expression(m.t,rule=_nu) + + + m.pH=Param(initialize=7) + m.pKa=Param(initialize=9.245) + + m.cgro=Param(initialize=0.7) + m.dgro=Param(initialize=0.9) + m.epsgro=Param(initialize=0.05) + m.Tcgro=Param(initialize=130) + + m.ni0= Param(initialize=-1, mutable=True, within=Integers) + m.ni1= Param(initialize=-1, mutable=True, within=Integers) + m.ni2= Param(initialize=-1, mutable=True, within=Integers) + m.ni3= Param(initialize=-1, mutable=True, within=Integers) + m.ni4= Param(initialize=-1, mutable=True, within=Integers) + m.ni5= Param(initialize=-1, mutable=True, within=Integers) + m.ni6= Param(initialize=-1, mutable=True, within=Integers) + m.ni7= Param(initialize=-1, mutable=True, within=Integers) + m.ni8= Param(initialize=-1, mutable=True, within=Integers) + m.ni9= Param(initialize=-1, mutable=True, within=Integers) + m.ni10= Param(initialize=-1, mutable=True, within=Integers) + m.ni11= Param(initialize=-1, mutable=True, within=Integers) + m.ni12= Param(initialize=-1, mutable=True, within=Integers) + m.ni13= Param(initialize=-1, mutable=True, within=Integers) + m.ni14= Param(initialize=-1, mutable=True, within=Integers) + m.ni15= Param(initialize=-1, mutable=True, within=Integers) + m.ni16= Param(initialize=-1, mutable=True, within=Integers) + m.ni17= Param(initialize=-1, mutable=True, within=Integers) + m.ni18= Param(initialize=-1, mutable=True, within=Integers) + m.ni19= Param(initialize=-1, mutable=True, within=Integers) + m.ni20= Param(initialize=-1, mutable=True, within=Integers) + m.ni21= Param(initialize=-1, mutable=True, within=Integers) + m.ni22= Param(initialize=-1, mutable=True, within=Integers) + m.ni23= Param(initialize=-1, mutable=True, within=Integers) + m.ni24= Param(initialize=-1, mutable=True, within=Integers) + m.ni25= Param(initialize=-1, mutable=True, within=Integers) + m.ni26= Param(initialize=-1, mutable=True, within=Integers) + m.ni27= Param(initialize=-1, mutable=True, within=Integers) + m.ni28= Param(initialize=-1, mutable=True, within=Integers) + m.ni29= Param(initialize=-1, mutable=True, within=Integers) + m.ni30= Param(initialize=-1, mutable=True, within=Integers) + m.ni31= Param(initialize=-1, mutable=True, within=Integers) + m.ni32= Param(initialize=-1, mutable=True, within=Integers) + m.ni33= Param(initialize=-1, mutable=True, within=Integers) + m.ni34= Param(initialize=-1, mutable=True, within=Integers) + m.ni35= Param(initialize=-1, mutable=True, within=Integers) + m.ni36= Param(initialize=-1, mutable=True, within=Integers) + m.ni37= Param(initialize=-1, mutable=True, within=Integers) + m.ni38= Param(initialize=-1, mutable=True, within=Integers) + m.ni39= Param(initialize=-1, mutable=True, within=Integers) + m.ni40= Param(initialize=-1, mutable=True, within=Integers) + m.ni41= Param(initialize=-1, mutable=True, within=Integers) + m.ni42= Param(initialize=-1, mutable=True, within=Integers) + m.ni43= Param(initialize=-1, mutable=True, within=Integers) + m.ni44= Param(initialize=-1, mutable=True, within=Integers) + m.ni45= Param(initialize=-1, mutable=True, within=Integers) + m.ni46= Param(initialize=-1, mutable=True, within=Integers) + m.ni47= Param(initialize=-1, mutable=True, within=Integers) + m.ni48= Param(initialize=-1, mutable=True, within=Integers) + m.ni49= Param(initialize=-1, mutable=True, within=Integers) + m.ni50= Param(initialize=-1, mutable=True, within=Integers) + m.ni51= Param(initialize=-1, mutable=True, within=Integers) + m.ni52= Param(initialize=-1, mutable=True, within=Integers) + m.ni53= Param(initialize=-1, mutable=True, within=Integers) + m.ni54= Param(initialize=-1, mutable=True, within=Integers) + m.ni55= Param(initialize=-1, mutable=True, within=Integers) + m.ni56= Param(initialize=-1, mutable=True, within=Integers) + m.ni57= Param(initialize=-1, mutable=True, within=Integers) + m.ni58= Param(initialize=-1, mutable=True, within=Integers) + m.ni59= Param(initialize=-1, mutable=True, within=Integers) + m.ni60= Param(initialize=-1, mutable=True, within=Integers) + m.ni61= Param(initialize=-1, mutable=True, within=Integers) + m.ni62= Param(initialize=-1, mutable=True, within=Integers) + m.ni63= Param(initialize=-1, mutable=True, within=Integers) + m.ni64= Param(initialize=-1, mutable=True, within=Integers) + m.ni65= Param(initialize=-1, mutable=True, within=Integers) + m.ni66= Param(initialize=-1, mutable=True, within=Integers) + m.ni67= Param(initialize=-1, mutable=True, within=Integers) + m.ni68= Param(initialize=-1, mutable=True, within=Integers) + m.ni69= Param(initialize=-1, mutable=True, within=Integers) + + + m.z4=Param(initialize=0.008) + m.z5=Param(initialize=0.008) + m.z24=Param(initialize=0.008) + m.z25=Param(initialize=0.008) + m.z44=Param(initialize=0.008) + m.z49=Param(initialize=0.008) + + m.z0=Var(m.t,initialize=InitGUStates[0],within=NonNegativeReals) + m.z1=Var(m.t,initialize=InitGUStates[1],within=NonNegativeReals) + m.z2=Var(m.t,initialize=InitGUStates[2],within=NonNegativeReals) + m.z3=Var(m.t,initialize=InitGUStates[3],within=NonNegativeReals) + + m.z6=Var(m.t,initialize=InitGUStates[6],within=NonNegativeReals) + m.z7=Var(m.t,initialize=InitGUStates[7],within=NonNegativeReals) + m.z8=Var(m.t,initialize=InitGUStates[8],within=NonNegativeReals) + m.z9=Var(m.t,initialize=InitGUStates[9],within=NonNegativeReals) + m.z10=Var(m.t,initialize=InitGUStates[10],within=NonNegativeReals) + m.z11=Var(m.t,initialize=InitGUStates[11],within=NonNegativeReals) + m.z12=Var(m.t,initialize=InitGUStates[12],within=NonNegativeReals) + m.z13=Var(m.t,initialize=InitGUStates[13],within=NonNegativeReals) + m.z14=Var(m.t,initialize=InitGUStates[14],within=NonNegativeReals) + m.z15=Var(m.t,initialize=InitGUStates[15],within=NonNegativeReals) + m.z16=Var(m.t,initialize=InitGUStates[16],within=NonNegativeReals) + m.z17=Var(m.t,initialize=InitGUStates[17],within=NonNegativeReals) + m.z18=Var(m.t,initialize=InitGUStates[18],within=NonNegativeReals) + m.z19=Var(m.t,initialize=InitGUStates[19],within=NonNegativeReals) + m.z20=Var(m.t,initialize=InitGUStates[20],within=NonNegativeReals) + m.z21=Var(m.t,initialize=InitGUStates[21],within=NonNegativeReals) + m.z22=Var(m.t,initialize=InitGUStates[22],within=NonNegativeReals) + m.z23=Var(m.t,initialize=InitGUStates[23],within=NonNegativeReals) + + m.z26=Var(m.t,initialize=InitGUStates[26],within=NonNegativeReals) + m.z27=Var(m.t,initialize=InitGUStates[27],within=NonNegativeReals) + m.z28=Var(m.t,initialize=InitGUStates[28],within=NonNegativeReals) + m.z29=Var(m.t,initialize=InitGUStates[29],within=NonNegativeReals) + m.z30=Var(m.t,initialize=InitGUStates[30],within=NonNegativeReals) + m.z31=Var(m.t,initialize=InitGUStates[31],within=NonNegativeReals) + m.z32=Var(m.t,initialize=InitGUStates[32],within=NonNegativeReals) + m.z33=Var(m.t,initialize=InitGUStates[33],within=NonNegativeReals) + m.z34=Var(m.t,initialize=InitGUStates[34],within=NonNegativeReals) + m.z35=Var(m.t,initialize=InitGUStates[35],within=NonNegativeReals) + m.z36=Var(m.t,initialize=InitGUStates[36],within=NonNegativeReals) + m.z37=Var(m.t,initialize=InitGUStates[37],within=NonNegativeReals) + m.z38=Var(m.t,initialize=InitGUStates[38],within=NonNegativeReals) + m.z39=Var(m.t,initialize=InitGUStates[39],within=NonNegativeReals) + + m.z40=Var(m.t,initialize=InitGUStates[40],within=NonNegativeReals) + m.z41=Var(m.t,initialize=InitGUStates[41],within=NonNegativeReals) + m.z42=Var(m.t,initialize=InitGUStates[42],within=NonNegativeReals) + m.z43=Var(m.t,initialize=InitGUStates[43],within=NonNegativeReals) + m.z45=Var(m.t,initialize=InitGUStates[45],within=NonNegativeReals) + m.z46=Var(m.t,initialize=InitGUStates[46],within=NonNegativeReals) + m.z47=Var(m.t,initialize=InitGUStates[47],within=NonNegativeReals) + m.z48=Var(m.t,initialize=InitGUStates[48],within=NonNegativeReals) + m.z50=Var(m.t,initialize=InitGUStates[50],within=NonNegativeReals) + m.z51=Var(m.t,initialize=InitGUStates[51],within=NonNegativeReals) + m.z52=Var(m.t,initialize=InitGUStates[52],within=NonNegativeReals) + m.z53=Var(m.t,initialize=InitGUStates[53],within=NonNegativeReals) + m.z54=Var(m.t,initialize=InitGUStates[54],within=NonNegativeReals) + m.z55=Var(m.t,initialize=InitGUStates[55],within=NonNegativeReals) + m.z56=Var(m.t,initialize=InitGUStates[56],within=NonNegativeReals) + m.z57=Var(m.t,initialize=InitGUStates[57],within=NonNegativeReals) + m.z58=Var(m.t,initialize=InitGUStates[58],within=NonNegativeReals) + m.z59=Var(m.t,initialize=InitGUStates[59],within=NonNegativeReals) + m.z60=Var(m.t,initialize=InitGUStates[60],within=NonNegativeReals) + m.z61=Var(m.t,initialize=InitGUStates[61],within=NonNegativeReals) + m.z62=Var(m.t,initialize=InitGUStates[62],within=NonNegativeReals) + m.z63=Var(m.t,initialize=InitGUStates[63],within=NonNegativeReals) + m.z64=Var(m.t,initialize=InitGUStates[64],within=NonNegativeReals) + m.z65=Var(m.t,initialize=InitGUStates[65],within=NonNegativeReals) + m.z66=Var(m.t,initialize=InitGUStates[66],within=NonNegativeReals) + m.z67=Var(m.t,initialize=InitGUStates[67],within=NonNegativeReals) + m.z68=Var(m.t,initialize=InitGUStates[68],within=NonNegativeReals) + m.z69=Var(m.t,initialize=InitGUStates[69],within=NonNegativeReals) + m.z70=Var(m.t,initialize=InitGUStates[70],within=NonNegativeReals) + + + m.dNHdt= DerivativeVar(m.z0, wrt=m.t) + m.dSNDdt= DerivativeVar(m.z1, wrt=m.t) + m.dXNDdt= DerivativeVar(m.z2, wrt=m.t) + m.dz02= DerivativeVar(m.z3, wrt=m.t) + m.dzSdt= DerivativeVar(m.z6, wrt=m.t) + m.dzXdt= DerivativeVar(m.z7, wrt=m.t) + m.dzSIdt= DerivativeVar(m.z8, wrt=m.t) + m.dzXIdt= DerivativeVar(m.z9, wrt=m.t) + m.dXHdt= DerivativeVar(m.z10, wrt=m.t) + m.dAdt= DerivativeVar(m.z11, wrt=m.t) + m.dzNOdt= DerivativeVar(m.z12, wrt=m.t) + m.dXPdt= DerivativeVar(m.z13, wrt=m.t) + m.dXHbdt= DerivativeVar(m.z14, wrt=m.t) + m.dAbdt= DerivativeVar(m.z15, wrt=m.t) + m.dzXbdt= DerivativeVar(m.z16, wrt=m.t) + m.dXNDbdt= DerivativeVar(m.z17, wrt=m.t) + m.dzXIbdt= DerivativeVar(m.z18, wrt=m.t) + m.dXPbdt= DerivativeVar(m.z19, wrt=m.t) + + + + m.dNHdt2= DerivativeVar(m.z20, wrt=m.t) + m.dSNDdt2= DerivativeVar(m.z21, wrt=m.t) + m.dXNDdt2= DerivativeVar(m.z22, wrt=m.t) + m.dz022= DerivativeVar(m.z23, wrt=m.t) + m.dzSdt2= DerivativeVar(m.z26, wrt=m.t) + m.dzXdt2= DerivativeVar(m.z27, wrt=m.t) + m.dzSIdt2= DerivativeVar(m.z28, wrt=m.t) + m.dzXIdt2= DerivativeVar(m.z29, wrt=m.t) + m.dXHdt2= DerivativeVar(m.z30, wrt=m.t) + m.dAdt2= DerivativeVar(m.z31, wrt=m.t) + m.dzNOdt2= DerivativeVar(m.z32, wrt=m.t) + m.dXPdt2= DerivativeVar(m.z33, wrt=m.t) + m.dXHbdt2= DerivativeVar(m.z34, wrt=m.t) + m.dAbdt2= DerivativeVar(m.z35, wrt=m.t) + m.dzXbdt2= DerivativeVar(m.z36, wrt=m.t) + m.dXNDbdt2= DerivativeVar(m.z37, wrt=m.t) + m.dzXIbdt2= DerivativeVar(m.z38, wrt=m.t) + m.dXPbdt2= DerivativeVar(m.z39, wrt=m.t) + + + + m.dy1dt= DerivativeVar(m.z40, wrt=m.t) + m.dy2dt= DerivativeVar(m.z41, wrt=m.t) + m.dy3dt= DerivativeVar(m.z42, wrt=m.t) + m.dy4dt= DerivativeVar(m.z43, wrt=m.t) + m.dy6dt= DerivativeVar(m.z45, wrt=m.t) + m.dy7dt= DerivativeVar(m.z46, wrt=m.t) + m.dy8dt= DerivativeVar(m.z47, wrt=m.t) + m.dy9dt= DerivativeVar(m.z48, wrt=m.t) + m.dy11dt= DerivativeVar(m.z50, wrt=m.t) + m.dy12dt= DerivativeVar(m.z51, wrt=m.t) + m.dy13dt= DerivativeVar(m.z52, wrt=m.t) + m.dy14dt= DerivativeVar(m.z53, wrt=m.t) + + + m.dx1dt= DerivativeVar(m.z54, wrt=m.t) + m.dx2dt= DerivativeVar(m.z55, wrt=m.t) + m.dx3dt= DerivativeVar(m.z56, wrt=m.t) + m.dx6dt= DerivativeVar(m.z57, wrt=m.t) + m.dx7dt= DerivativeVar(m.z58, wrt=m.t) + m.dx8dt= DerivativeVar(m.z59, wrt=m.t) + m.dx9dt= DerivativeVar(m.z60, wrt=m.t) + + + + m.ddzNOdt= DerivativeVar(m.z61, wrt=m.t) + m.ddzNOdt2= DerivativeVar(m.z62, wrt=m.t) + m.ddy14dt= DerivativeVar(m.z63, wrt=m.t) + m.ddAdt= DerivativeVar(m.z64, wrt=m.t) + m.ddAdt2= DerivativeVar(m.z65, wrt=m.t) + m.ddy12dt= DerivativeVar(m.z66, wrt=m.t) + m.ddAbdt= DerivativeVar(m.z67, wrt=m.t) + m.ddAbdt2= DerivativeVar(m.z68, wrt=m.t) + m.dWdt= DerivativeVar(m.z69, wrt=m.t) + + def _delta(m,i): + return 1/(1+exp(-5*(m.z43[i]*1000-6.14))) + m.delta=Expression(m.t,rule=_delta) + + def _n(m,i): + return m.z70[i] == m.n0*exp(-(m.z69[i]**(-0.605))*i*0.0037) + m.n=Constraint(m.t,rule=_n) + + def _CODsolid(m): + return 1.77* m.prot * (1- m.ADCprot) + 2.88* m.lip * (1- m.ADClip) + 1.16* m.NFE * (1- m.ADCNFE) + 1.16 * m.fiber * (1- m.ADCNFE) + m.CODsolid=Expression(rule=_CODsolid) + + def _CODsolidactual(m): + return 0.9*m.CODsolid + m.CODsolidactual=Expression(rule=_CODsolidactual) + + def _CODfeed(m): + return 1.77* m.prot + 2.88* m.lip + 1.16* m.NFE + 1.16 * m.fiber + m.CODfeed=Expression(rule=_CODfeed) + + def _CODfeedactual(m): + return 0.74 * m.CODfeed + m.CODfeedactual=Expression(rule=_CODfeedactual) + + def _Ningested(m): + return m.prot/6.25 + m.Ningested=Expression(rule=_Ningested) + + def _biom(m,i): + return (m.z69[i]*m.z70[i])/1000 + m.biom=Expression(m.t,rule=_biom) + + def _DWN1(m,i): + return (1-m.loss)*m.F[i]* m.Ningested *0.337 + m.DWN1=Expression(m.t,rule=_DWN1) + + m.Loss1=Param(initialize=0) + + def _DWN2(m,i): + return (1-m.loss)*m.F[i]* m.Ningested *0.139 + m.DWN2=Expression(m.t,rule=_DWN2) + + def _Loss2(m,i): + return m.loss *m.F[i]* m.Ningested *0.29 + m.Loss2=Expression(m.t,rule=_Loss2) + + def _DWN3(m,i): + return (1-m.loss)* m.F[i]* m.Ningested *0.068 + m.DWN3=Expression(m.t,rule=_DWN3) + + def _Loss3(m,i): + return m.loss *m.F[i]* m.Ningested *0.71 + m.Loss3=Expression(m.t,rule=_Loss3) + + def _DWN6(m,i): + return (1-m.loss)* m.F[i]* 0.204 *m.CODsolidactual + m.DWN6=Expression(m.t,rule=_DWN6) + + def _Loss6(m,i): + return m.loss *m.F[i] *0.145 *m.CODfeedactual + m.Loss6=Expression(m.t,rule=_Loss6) + + def _DWN7(m,i): + return (1-m.loss)* m.F[i]* 0.61 *m.CODsolidactual + m.DWN7=Expression(m.t,rule=_DWN7) + + def _Loss7(m,i): + return m.loss *m.F[i]*0.435 *m.CODfeedactual + m.Loss7=Expression(m.t,rule=_Loss7) + + def _DWN8(m,i): + return (1-m.loss)* m.F[i]* 0.204 *m.CODsolidactual + m.DWN8=Expression(m.t,rule=_DWN8) + + def _Loss8(m,i): + return m.loss *m.F[i]*0.145 *m.CODfeedactual + m.Loss8=Expression(m.t,rule=_Loss8) + + def _DWN9(m,i): + return (1-m.loss)* m.F[i]* 0.39 *m.CODsolidactual + m.DWN9=Expression(m.t,rule=_DWN9) + + def _Loss9(m,i): + return m.loss *m.F[i]*0.275 *m.CODfeedactual + m.Loss9=Expression(m.t,rule=_Loss9) + + def _r1(m,i): + return m.muh * (m.z6[i]/(m.KS+m.z6[i]))*(m.z3[i]/(m.KOH+m.z3[i])) * m.z10[i] + m.r1=Expression(m.t,rule=_r1) + + def _r1b(m,i): + return m.muh * (m.z6[i]/(m.KS+m.z6[i]))*(m.z3[i]/(m.KOH+m.z3[i])) * m.z14[i] + m.r1b=Expression(m.t,rule=_r1b) + + + #On NO2 + def _r2(m,i): + return m.muh*m.etano2*(m.z6[i]/(m.KS+m.z6[i])) * (m.KOH/(m.KOH + m.z3[i])) * (m.z61[i]/(m.KNOx + m.z61[i])) * (m.z61[i]/(m.z12[i] + m.z61[i])) * m.z10[i] + m.r2=Expression(m.t,rule=_r2) + + def _r2b(m,i): + return m.muh*m.etano2*(m.z6[i]/(m.KS+m.z6[i])) * (m.KOH/(m.KOH + m.z3[i])) * (m.z61[i]/(m.KNOx + m.z61[i])) * (m.z61[i]/(m.z12[i] + m.z61[i]))* m.z14[i] + m.r2b=Expression(m.t,rule=_r2b) + + + #On NO3 + def _rr2(m,i): + return m.muh*m.etano3*(m.z6[i]/(m.KS+m.z6[i])) * (m.KOH/(m.KOH + m.z3[i])) * (m.z12[i]/(m.KNOx + m.z12[i])) * (m.z12[i]/(m.z12[i] + m.z61[i])) * m.z10[i] + m.rr2=Expression(m.t,rule=_rr2) + + def _rr2b(m,i): + return m.muh*m.etano3*(m.z6[i]/(m.KS+m.z6[i])) * (m.KOH/(m.KOH + m.z3[i])) * (m.z12[i]/(m.KNOx + m.z12[i])) * (m.z12[i]/(m.z12[i] + m.z61[i]))* m.z14[i] + m.rr2b=Expression(m.t,rule=_rr2b) + + + #growth of AOB + def _r3(m,i): + return m.muAOB*(m.z0[i]/(m.KNH+m.z0[i])) * (m.z3[i]/(m.KOA + m.z3[i])) * m.z11[i] + m.r3=Expression(m.t,rule=_r3) + + def _r3b(m,i): + return m.muAOB*(m.z0[i]/(m.KNH+m.z0[i])) * (m.z3[i]/(m.KOA + m.z3[i])) * m.z15[i] + m.r3b=Expression(m.t,rule=_r3b) + + + #growth of NOB + def _rr3(m,i): + return m.muNOB*(m.z61[i]/(m.KNO2+m.z61[i])) * (m.z3[i]/(m.KOA + m.z3[i])) * (m.KNHI/(m.KNHI + m.z0[i]))* m.z64[i] + m.rr3=Expression(m.t,rule=_rr3) + + def _rr3b(m,i): + return m.muNOB*(m.z61[i]/(m.KNO2+m.z61[i])) * (m.z3[i]/(m.KOA + m.z3[i])) * (m.KNHI/(m.KNHI + m.z0[i]))* m.z67[i] + m.rr3b=Expression(m.t,rule=_rr3b) + + + def _r4(m,i): + return m.bH*m.z10[i] + m.r4=Expression(m.t,rule=_r4) + + def _r4b(m,i): + return m.bH*m.z14[i] + m.r4b=Expression(m.t,rule=_r4b) + + + def _r5(m,i): + return m.bAOB*m.z11[i] + m.r5=Expression(m.t,rule=_r5) + + def _r5b(m,i): + return m.bAOB*m.z15[i] + m.r5b=Expression(m.t,rule=_r5b) + + def _rr5(m,i): + return m.bNOB*m.z64[i] + m.rr5=Expression(m.t,rule=_rr5) + + def _rr5b(m,i): + return m.bNOB*m.z67[i] + m.rr5b=Expression(m.t,rule=_rr5b) + + def _r6(m,i): + return m.Ka* m.z1[i]* (m.z10[i] + m.z14[i]) + m.r6=Expression(m.t,rule=_r6) + + def _r7(m,i): + return m.kh*((m.z7[i]/m.z10[i])/(m.Kx+(m.z7[i]/m.z10[i])) ) * ( (m.z3[i]/(m.KOH+m.z3[i])) + m.etag*(m.KOH/ (m.KOH + m.z3[i]))* ((m.z12[i]+m.z61[i])/(m.KNOx+m.z12[i]+m.z61[i]) ) )*m.z10[i] + m.r7=Expression(m.t,rule=_r7) + + def _r7b(m,i): + return m.kh*((m.z16[i]/m.z14[i])/(m.Kx+(m.z16[i]/m.z14[i])) ) * ( (m.z3[i]/(m.KOH+m.z3[i])) + m.etag*(m.KOH/ (m.KOH + m.z3[i]))* ((m.z12[i]+m.z61[i])/(m.KNOx+m.z12[i]+m.z61[i]) ) )*m.z14[i] + m.r7b=Expression(m.t,rule=_r7b) + + def _r8(m,i): + return m.r7[i]*(m.z2[i]/m.z7[i]) + m.r8=Expression(m.t,rule=_r8) + + def _r8b(m,i): + return m.r7b[i]*(m.z17[i]/m.z16[i]) + m.r8b=Expression(m.t,rule=_r8b) + + def _r9(m,i): + return m.kka*((m.z9[i]+m.z7[i]+m.z10[i]+m.z11[i]+m.z64[i]+m.z13[i])/m.icv+m.a)*m.z9[i] + m.r9=Expression(m.t,rule=_r9) + + def _r10(m,i): + return m.kka*((m.z9[i]+m.z7[i]+m.z10[i]+m.z11[i]+m.z64[i]+m.z13[i])/m.icv+m.a)*m.z7[i] + m.r10=Expression(m.t,rule=_r10) + + def _r11(m,i): + return m.kka*((m.z9[i]+m.z7[i]+m.z10[i]+m.z11[i]+m.z64[i]+m.z13[i])/m.icv+m.a)*m.z10[i] + m.r11=Expression(m.t,rule=_r11) + + def _r12(m,i): + return m.kka*((m.z9[i]+m.z7[i]+m.z10[i]+m.z11[i]+m.z64[i]+m.z13[i])/m.icv+m.a)*m.z11[i] + m.r12=Expression(m.t,rule=_r12) + + def _rr12(m,i): + return m.kka*((m.z9[i]+m.z7[i]+m.z10[i]+m.z11[i]+m.z64[i]+m.z13[i])/m.icv+m.a)*m.z64[i] + m.rr12=Expression(m.t,rule=_rr12) + + def _r13(m,i): + return m.kka*((m.z9[i]+m.z7[i]+m.z10[i]+m.z11[i]+m.z64[i]+m.z13[i])/m.icv+m.a)*m.z13[i] + m.r13=Expression(m.t,rule=_r13) + + def _r14(m,i): + return m.kka*((m.z9[i]+m.z7[i]+m.z10[i]+m.z11[i]+m.z64[i]+m.z13[i])/m.icv+m.a)*m.z2[i] + m.r14=Expression(m.t,rule=_r14) + + def _r15(m,i): + return m.kkd*((m.z18[i]+m.z16[i]+m.z14[i]+m.z15[i]+m.z67[i]+m.z19[i])/m.icv+m.a)*m.z18[i] + m.r15=Expression(m.t,rule=_r15) + + def _r16(m,i): + return m.kkd*((m.z18[i]+m.z16[i]+m.z14[i]+m.z15[i]+m.z67[i]+m.z19[i])/m.icv+m.a)*m.z16[i] + m.r16=Expression(m.t,rule=_r16) + + def _r17(m,i): + return m.kkd*((m.z18[i]+m.z16[i]+m.z14[i]+m.z15[i]+m.z67[i]+m.z19[i])/m.icv+m.a)*m.z14[i] + m.r17=Expression(m.t,rule=_r17) + + def _r18(m,i): + return m.kkd*((m.z18[i]+m.z16[i]+m.z14[i]+m.z15[i]+m.z67[i]+m.z19[i])/m.icv+m.a)*m.z15[i] + m.r18=Expression(m.t,rule=_r18) + + def _rr18(m,i): + return m.kkd*((m.z18[i]+m.z16[i]+m.z14[i]+m.z15[i]+m.z67[i]+m.z19[i])/m.icv+m.a)*m.z67[i] + m.rr18=Expression(m.t,rule=_rr18) + + def _r19(m,i): + return m.kkd*((m.z18[i]+m.z16[i]+m.z14[i]+m.z15[i]+m.z67[i]+m.z19[i])/m.icv+m.a)*m.z19[i] + m.r19=Expression(m.t,rule=_r19) + + def _r20(m,i): + return m.kkd*((m.z18[i]+m.z16[i]+m.z14[i]+m.z15[i]+m.z67[i]+m.z19[i])/m.icv+m.a)*m.z17[i] + m.r20=Expression(m.t,rule=_r20) + + + def _bgro(m,i): + sk1=m.z69[i]*0.006 + sk2=log(sk1) + return -0.7*sk2 + m.bgro=Expression(m.t,rule=_bgro) + + + ############ reaction terms ############ + + #Readily biodegradable organic matter + def _rs(m,i): + return -(1/m.YH)*(m.r1[i]+m.r2[i]+m.r1b[i]+m.r2b[i]+m.rr2[i]+m.rr2b[i]) + m.r7[i]+m.r7b[i] + m.rs=Expression(m.t,rule=_rs) + + + #Inert organic matter particulate + def _rIX(m,i): + return -m.r9[i] + m.r15[i] + m.rIX=Expression(m.t,rule=_rIX) + + + #Slowly biodegradable organic matter + def _rX(m,i): + return (1-m.fp)*(m.r4[i]+m.r5[i]+m.rr5[i]) -m.r7[i] -m.r10[i]+ m.r16[i] + m.rX=Expression(m.t,rule=_rX) + + + #Heterotrphps + def _rBH(m,i): + return m.r1[i]+m.r2[i]+m.rr2[i]-m.r4[i] -m.r11[i] + m.r17[i] + m.rBH=Expression(m.t,rule=_rBH) + + + + #AOB + def _rAOB(m,i): + return m.r3[i]-m.r5[i]-m.r12[i]+m.r18[i] + m.rAOB=Expression(m.t,rule=_rAOB) + + + #NOB + def _rNOB(m,i): + return m.rr3[i]-m.rr5[i]-m.rr12[i]+m.rr18[i] + m.rNOB=Expression(m.t,rule=_rNOB) + + + #Particulate products from biomass deccay + def _rP(m,i): + return m.fp*(m.r4[i]+m.r5[i]+m.rr5[i]) - m.r13[i] + m.r19[i] + m.rP=Expression(m.t,rule=_rP) + + + #Inert particulate biofilm + def _rIXb(m,i): + return m.r9[i]-m.r15[i] + m.rIXb=Expression(m.t,rule=_rIXb) + + + #Slowly biodegradable organic matter biofilm + def _rXb(m,i): + return (1-m.fp)*(m.r4b[i]+m.r5b[i]+m.rr5b[i]) -m.r7b[i] +m.r10[i] -m.r16[i] + m.rXb=Expression(m.t,rule=_rXb) + + + #Heterotrphps biofilm + def _rBHb(m,i): + return m.r1b[i]+m.r2b[i]+m.rr2b[i]-m.r4b[i] +m.r11[i] - m.r17[i] + m.rBHb=Expression(m.t,rule=_rBHb) + + + #AOB biofilm + def _rAOBb(m,i): + return m.r3b[i]-m.r5b[i]+m.r12[i]-m.r18[i] + m.rAOBb=Expression(m.t,rule=_rAOBb) + + #NOB + def _rNOBb(m,i): + return m.rr3b[i]-m.rr5b[i]+m.rr12[i]-m.rr18[i] + m.rNOBb=Expression(m.t,rule=_rNOBb) + + + #Particulate products from biomass deccay biofilm + def _rPb(m,i): + return m.fp*(m.r4b[i]+m.r5b[i]+m.rr5b[i]) + m.r13[i] - m.r19[i] + m.rPb=Expression(m.t,rule=_rPb) + + + #Nitrite + def _rNO2(m,i): + return ((1-1/m.YH)/(1.72))*(m.r2[i] + m.r2b[i]) + (1/m.YAOB)*(m.r3[i] +m.r3b[i])- (1/m.YNOB)*(m.rr3[i] +m.rr3b[i]) + m.rNO2=Expression(m.t,rule=_rNO2) + + + #Nitrate + def _rNO3(m,i): + return ((1-1/m.YH)/(2.86))*(m.rr2[i] + m.rr2b[i]) + (1/m.YNOB)*(m.rr3[i] +m.rr3b[i]) + m.rNO3=Expression(m.t,rule=_rNO3) + + + # Ammonia + def _ramm(m,i): + return -m.iXB*(m.r1[i]+m.r1b[i]+ m.r2[i] + m.r2b[i]+m.rr2[i] + m.rr2b[i]) - (m.iXB + (1/m.YAOB)) * (m.r3[i] + m.r3b[i]) - m.iXB*(m.rr3[i] + m.rr3b[i]) + m.r6[i] + m.ramm=Expression(m.t,rule=_ramm) + + + + #soluble organic nitrogen + def _rSND(m,i): + return -m.r6[i] + m.r8[i] + m.r8b[i] + m.rSND=Expression(m.t,rule=_rSND) + + + + #particulate organic nitrogen + def _rXND(m,i): + return (m.iXB-m.fp*m.iXP)*(m.r4[i]+m.r5[i]+m.rr5[i]) -m.r8[i] -m.r14[i] + m.r20[i] + m.rXND=Expression(m.t,rule=_rXND) + + + + #particulate organic nitrogen biofilm + def _rXNDb(m,i): + return (m.iXB-m.fp*m.iXP)*(m.r4b[i]+m.r5b[i]+m.rr5b[i]) -m.r8b[i] + m.r14[i] - m.r20[i] + m.rXNDb=Expression(m.t,rule=_rXNDb) + + + ###### second reactor + + # Reactions in the first reactor + def _rec1(m,i): + return m.muh * (m.z26[i]/(m.KS+m.z26[i]))*(m.z23[i]/(m.KOH+m.z23[i])) * m.z30[i] + m.rec1=Expression(m.t,rule=_rec1) + + def _rec1b(m,i): + return m.muh * (m.z26[i]/(m.KS+m.z26[i]))*(m.z23[i]/(m.KOH+m.z23[i])) * m.z34[i] + m.rec1b=Expression(m.t,rule=_rec1b) + + + #On NO2 + def _rec2(m,i): + return m.muh*m.etano2*(m.z26[i]/(m.KS+m.z26[i])) * (m.KOH/(m.KOH + m.z23[i])) * (m.z62[i]/(m.KNOx + m.z62[i])) * (m.z62[i]/(m.z32[i] + m.z62[i]))* m.z30[i] + m.rec2=Expression(m.t,rule=_rec2) + + def _rec2b(m,i): + return m.muh*m.etano2*(m.z26[i]/(m.KS+m.z26[i])) * (m.KOH/(m.KOH + m.z23[i])) * (m.z62[i]/(m.KNOx + m.z62[i])) * (m.z62[i]/(m.z32[i] + m.z62[i])) * m.z34[i] + + m.rec2b=Expression(m.t,rule=_rec2b) + + + #On NO3 + def _recrec2(m,i): + return m.muh*m.etano3*(m.z26[i]/(m.KS+m.z26[i])) * (m.KOH/(m.KOH + m.z23[i])) * (m.z32[i]/(m.KNOx + m.z32[i])) * (m.z32[i]/(m.z32[i] + m.z62[i]))* m.z30[i] + m.recrec2=Expression(m.t,rule=_recrec2) + + def _recrec2b(m,i): + return m.muh*m.etano3*(m.z26[i]/(m.KS+m.z26[i])) * (m.KOH/(m.KOH + m.z23[i])) * (m.z32[i]/(m.KNOx + m.z32[i])) * (m.z32[i]/(m.z32[i] + m.z62[i])) * m.z34[i] + m.recrec2b=Expression(m.t,rule=_recrec2b) + + + #growth of AOB + def _rec3(m,i): + return m.muAOB*(m.z20[i]/(m.KNH+m.z20[i])) * (m.z23[i]/(m.KOA + m.z23[i])) * m.z31[i] + m.rec3=Expression(m.t,rule=_rec3) + + def _rec3b(m,i): + return m.muAOB*(m.z20[i]/(m.KNH+m.z20[i])) * (m.z23[i]/(m.KOA + m.z23[i])) * m.z35[i] + m.rec3b=Expression(m.t,rule=_rec3b) + + + #growth of NOB + + def _recrec3(m,i): + return m.muNOB*(m.z62[i]/(m.KNO2+m.z62[i])) * (m.z23[i]/(m.KOA + m.z23[i])) * (m.KNHI/(m.KNHI + m.z20[i]))* m.z65[i] + m.recrec3=Expression(m.t,rule=_recrec3) + + def _recrec3b(m,i): + return m.muNOB*(m.z62[i]/(m.KNO2+m.z62[i])) * (m.z23[i]/(m.KOA + m.z23[i])) * (m.KNHI/(m.KNHI + m.z20[i]))* m.z68[i] + m.recrec3b=Expression(m.t,rule=_recrec3b) + + + def _rec4(m,i): + return m.bH*m.z30[i] + m.rec4=Expression(m.t,rule=_rec4) + + def _rec4b(m,i): + return m.bH*m.z34[i] + m.rec4b=Expression(m.t,rule=_rec4b) + + + def _rec5(m,i): + return m.bAOB*m.z31[i] + m.rec5=Expression(m.t,rule=_rec5) + + def _rec5b(m,i): + return m.bAOB*m.z35[i] + m.rec5b=Expression(m.t,rule=_rec5b) + + def _recrec5(m,i): + return m.bNOB*m.z65[i] + m.recrec5=Expression(m.t,rule=_recrec5) + + def _recrec5b(m,i): + return m.bNOB*m.z68[i] + m.recrec5b=Expression(m.t,rule=_recrec5b) + + def _rec6(m,i): + return m.Ka* m.z21[i]* (m.z30[i] + m.z34[i]) + m.rec6=Expression(m.t,rule=_rec6) + + def _rec7(m,i): + return m.kh*((m.z27[i]/m.z30[i])/(m.Kx+(m.z27[i]/m.z30[i])) ) * ( (m.z23[i]/(m.KOH+m.z23[i])) + m.etag*(m.KOH/ (m.KOH + m.z23[i]))* ((m.z32[i]+m.z62[i])/(m.KNOx+m.z32[i]+m.z62[i]) ) )*m.z30[i] + m.rec7=Expression(m.t,rule=_rec7) + + def _rec7b(m,i): + return m.kh*((m.z36[i]/m.z34[i])/(m.Kx+(m.z36[i]/m.z34[i])) ) * ( (m.z23[i]/(m.KOH+m.z23[i])) + m.etag*(m.KOH/ (m.KOH + m.z23[i]))* ((m.z32[i]+m.z62[i])/(m.KNOx+m.z32[i]+m.z62[i]) ) )*m.z34[i] + m.rec7b=Expression(m.t,rule=_rec7b) + + def _rec8(m,i): + return m.rec7[i]*(m.z22[i]/m.z27[i]) + m.rec8=Expression(m.t,rule=_rec8) + + def _rec8b(m,i): + return m.rec7b[i]*(m.z37[i]/m.z36[i]) + m.rec8b=Expression(m.t,rule=_rec8b) + + def _rec9(m,i): + return m.kka*((m.z29[i]+m.z27[i]+m.z30[i]+m.z31[i]+m.z65[i]+m.z33[i])/m.icv+m.a)*m.z29[i] + m.rec9=Expression(m.t,rule=_rec9) + + def _rec10(m,i): + return m.kka*((m.z29[i]+m.z27[i]+m.z30[i]+m.z31[i]+m.z65[i]+m.z33[i])/m.icv+m.a)*m.z27[i] + m.rec10=Expression(m.t,rule=_rec10) + + def _rec11(m,i): + return m.kka*((m.z29[i]+m.z27[i]+m.z30[i]+m.z31[i]+m.z65[i]+m.z33[i])/m.icv+m.a)*m.z30[i] + m.rec11=Expression(m.t,rule=_rec11) + + def _rec12(m,i): + return m.kka*((m.z29[i]+m.z27[i]+m.z30[i]+m.z31[i]+m.z65[i]+m.z33[i])/m.icv+m.a)*m.z31[i] + m.rec12=Expression(m.t,rule=_rec12) + + def _recrec12(m,i): + return m.kka*((m.z29[i]+m.z27[i]+m.z30[i]+m.z31[i]+m.z65[i]+m.z33[i])/m.icv+m.a)*m.z65[i] + m.recrec12=Expression(m.t,rule=_recrec12) + + def _rec13(m,i): + return m.kka*((m.z29[i]+m.z27[i]+m.z30[i]+m.z31[i]+m.z65[i]+m.z33[i])/m.icv+m.a)*m.z33[i] + m.rec13=Expression(m.t,rule=_rec13) + + def _rec14(m,i): + return m.kka*((m.z29[i]+m.z27[i]+m.z30[i]+m.z31[i]+m.z65[i]+m.z33[i])/m.icv+m.a)*m.z22[i] + m.rec14=Expression(m.t,rule=_rec14) + + def _rec15(m,i): + return m.kkd*((m.z38[i]+m.z36[i]+m.z34[i]+m.z35[i]+m.z68[i]+m.z39[i])/m.icv+m.a)*m.z38[i] + m.rec15=Expression(m.t,rule=_rec15) + + def _rec16(m,i): + return m.kkd*((m.z38[i]+m.z36[i]+m.z34[i]+m.z35[i]+m.z68[i]+m.z39[i])/m.icv+m.a)*m.z36[i] + m.rec16=Expression(m.t,rule=_rec16) + + def _rec17(m,i): + return m.kkd*((m.z38[i]+m.z36[i]+m.z34[i]+m.z35[i]+m.z68[i]+m.z39[i])/m.icv+m.a)*m.z34[i] + m.rec17=Expression(m.t,rule=_rec17) + + def _rec18(m,i): + return m.kkd*((m.z38[i]+m.z36[i]+m.z34[i]+m.z35[i]+m.z68[i]+m.z39[i])/m.icv+m.a)*m.z35[i] + m.rec18=Expression(m.t,rule=_rec18) + + def _recrec18(m,i): + return m.kkd*((m.z38[i]+m.z36[i]+m.z34[i]+m.z35[i]+m.z68[i]+m.z39[i])/m.icv+m.a)*m.z68[i] + m.recrec18=Expression(m.t,rule=_recrec18) + + def _rec19(m,i): + return m.kkd*((m.z38[i]+m.z36[i]+m.z34[i]+m.z35[i]+m.z68[i]+m.z39[i])/m.icv+m.a)*m.z39[i] + m.rec19=Expression(m.t,rule=_rec19) + + def _rec20(m,i): + return m.kkd*((m.z38[i]+m.z36[i]+m.z34[i]+m.z35[i]+m.z68[i]+m.z39[i])/m.icv+m.a)*m.z37[i] + m.rec20=Expression(m.t,rule=_rec20) + + + + ############ reaction terms ############ + + #Readily biodegradable organic matter + def _recs(m,i): + return -(1/m.YH)*(m.rec1[i]+m.rec2[i]+m.rec1b[i]+m.rec2b[i]+m.recrec2[i]+m.recrec2b[i]) + m.rec7[i]+m.rec7b[i] + m.recs=Expression(m.t,rule=_recs) + + + + #Inert organic matter particulate + def _recIX(m,i): + return -m.rec9[i] + m.rec15[i] + m.recIX=Expression(m.t,rule=_recIX) + + + #Slowly biodegradable organic matter + def _recX(m,i): + return (1-m.fp)*(m.rec4[i]+m.rec5[i]+m.recrec5[i]) -m.rec7[i] -m.rec10[i]+ m.rec16[i] + + m.recX=Expression(m.t,rule=_recX) + + + + #Heterotrphps + def _recBH(m,i): + return m.rec1[i]+m.rec2[i]+m.recrec2[i]-m.rec4[i] -m.rec11[i] + m.rec17[i] + m.recBH=Expression(m.t,rule=_recBH) + + + #AOB + def _recAOB(m,i): + return m.rec3[i]-m.rec5[i]-m.rec12[i]+m.rec18[i] + m.recAOB=Expression(m.t,rule=_recAOB) + + + + #NOB + def _recNOB(m,i): + return m.recrec3[i]-m.recrec5[i]-m.recrec12[i]+m.recrec18[i] + m.recNOB=Expression(m.t,rule=_recNOB) + + + #Particulate products from biomass deccay + def _recP(m,i): + return m.fp*(m.rec4[i]+m.rec5[i]+m.recrec5[i]) - m.rec13[i] + m.rec19[i] + m.recP=Expression(m.t,rule=_recP) + + + #Inert particulate biofilm + def _recIXb(m,i): + return m.rec9[i]-m.rec15[i] + m.recIXb=Expression(m.t,rule=_recIXb) + + + + #Slowly biodegradable organic matter biofilm + def _recXb(m,i): + return (1-m.fp)*(m.rec4b[i]+m.rec5b[i]+m.recrec5b[i]) -m.rec7b[i] +m.rec10[i] -m.rec16[i] + m.recXb=Expression(m.t,rule=_recXb) + + + #Heterotrphps biofilm + def _recBHb(m,i): + return m.rec1b[i]+m.rec2b[i]+m.recrec2b[i]-m.rec4b[i] +m.rec11[i] - m.rec17[i] + m.recBHb=Expression(m.t,rule=_recBHb) + + + #AOB biofilm + def _recAOBb(m,i): + return m.rec3b[i]-m.rec5b[i]+m.rec12[i]-m.rec18[i] + m.recAOBb=Expression(m.t,rule=_recAOBb) + + + #NOB + def _recNOBb(m,i): + return m.recrec3b[i]-m.recrec5b[i]+ m.recrec12[i]- m.recrec18[i] + m.recNOBb=Expression(m.t,rule=_recNOBb) + + + #Particulate products from biomass deccay biofilm + def _recPb(m,i): + return m.fp*(m.rec4b[i]+m.rec5b[i]+m.recrec5b[i]) + m.rec13[i] - m.rec19[i] + m.recPb=Expression(m.t,rule=_recPb) + + + def _rO(m,i): + return (1-(1/m.YH))*(m.r1[i] + m.r1b[i]) - ( (3.43-m.YAOB)/m.YAOB)*(m.r3[i] + m.r3b[i]) - ( (1.14-m.YNOB)/m.YNOB)*(m.rr3[i] + m.rr3b[i]) + m.rO=Expression(m.t,rule=_rO) + + def _recO(m,i): + return (1-(1/m.YH))*(m.rec1[i] + m.rec1b[i]) - ( (3.43-m.YAOB)/m.YAOB)*(m.rec3[i] + m.rec3b[i]) - ( (1.14-m.YNOB)/m.YNOB)*(m.recrec3[i] +m.recrec3b[i]) + m.recO=Expression(m.t,rule=_recO) + + + #Nitrite + def _recNO2(m,i): + return ((1-1/m.YH)/(1.72))*(m.rec2[i] + m.rec2b[i]) + (1/m.YAOB)*(m.rec3[i] +m.rec3b[i])- (1/m.YNOB)*(m.recrec3[i] +m.recrec3b[i]) + m.recNO2=Expression(m.t,rule=_recNO2) + + + #Nitrate + def _recNO3(m,i): + return ((1-1/m.YH)/(2.86))*(m.recrec2[i] + m.recrec2b[i]) + (1/m.YNOB)*(m.recrec3[i] +m.recrec3b[i]) + m.recNO3=Expression(m.t,rule=_recNO3) + + + # Ammonia + def _recamm(m,i): + return -m.iXB*(m.rec1[i]+m.rec1b[i]+ m.rec2[i] + m.rec2b[i]+m.recrec2[i] + m.recrec2b[i]) - (m.iXB + (1/m.YAOB)) * (m.rec3[i] + m.rec3b[i]) - m.iXB*(m.recrec3[i] + m.recrec3b[i]) + m.rec6[i] + m.recamm=Expression(m.t,rule=_recamm) + + + #soluble organic nitrogen + def _recSND(m,i): + return -m.rec6[i] + m.rec8[i] + m.rec8b[i] + m.recSND=Expression(m.t,rule=_recSND) + + + #particulate organic nitrogen + def _recXND(m,i): + return (m.iXB-m.fp*m.iXP)*(m.rec4[i]+m.rec5[i]+m.recrec5[i]) -m.rec8[i] -m.rec14[i] + m.rec20[i] + m.recXND=Expression(m.t,rule=_recXND) + + + #particulate organic nitrogen biofilm + def _recXNDb(m,i): + return (m.iXB-m.fp*m.iXP)*(m.rec4b[i]+m.rec5b[i]+m.recrec5b[i]) -m.rec8b[i] + m.rec14[i] - m.rec20[i] + m.recXNDb=Expression(m.t,rule=_recXNDb) + + + #### fish tanks ######## + def _c1(m,i): + if i==0: + return Constraint.Skip + else: + m.ni54=1+value(m.ni54) + + return m.dx1dt[i] +(1/m.tav1)*m.z54[i] - (1/m.tav1)*m.DWN1[i] ==0 + m.c1=Constraint(m.t, rule=_c1) + + + def _c2(m,i): + if i==0: + return Constraint.Skip + else: + m.ni40=1+value(m.ni40) + return m.dy1dt[i] - ((m.Q1)/m.V)*(0.5*m.z20[i]+0.5*m.z0[i]) + ((m.Q1+m.Q4[i])/m.V)*(m.z40[i]) - (1/m.V)* (m.z54[i]) ==0 + m.c2=Constraint(m.t, rule=_c2) + + def _c3(m,i): + if i==0: + return Constraint.Skip + else: + m.ni55=1+value(m.ni55) + return m.dx2dt[i] +(1/m.tav1)*m.z55[i]- (1/m.tav1)*m.DWN2[i] ==0 + m.c3=Constraint(m.t, rule=_c3) + + + def _c4(m,i): + if i==0: + return Constraint.Skip + else: + m.ni41=1+value(m.ni41) + return m.dy2dt[i] - ((m.Q1)/m.V)*(0.5*m.z21[i]+0.5*m.z1[i]) +((m.Q1+m.Q4[i])/m.V)*(m.z41[i]) - (1/m.V)* (m.z55[i]) - (1/m.V)* (m.Loss2[i] ) ==0 + m.c4=Constraint(m.t, rule=_c4) + + + def _c5(m,i): + if i==0: + return Constraint.Skip + else: + m.ni56=1+value(m.ni56) + return m.dx3dt[i] +(1/m.tav1)*m.z56[i]- (1/m.tav1)*m.DWN3[i]==0 + m.c5=Constraint(m.t, rule=_c5) + + def _c6(m,i): + if i==0: + return Constraint.Skip + else: + m.ni42=1+value(m.ni42) + return m.dy3dt[i] - ((m.Q1)/m.V)*(0.5*m.z22[i]+0.5*m.z2[i]) + ((m.Q1+m.Q4[i])/m.V)*(m.z42[i]) - (1/m.V)* (m.z56[i]) - (1/m.V)* (m.Loss3[i] ) ==0 + m.c6=Constraint(m.t, rule=_c6) + + + def _c7(m,i): + if i==0: + return Constraint.Skip + else: + m.ni57=1+value(m.ni57) + return m.dx6dt[i] + (1/m.tav1)*m.z57[i]- (1/m.tav1)*m.DWN6[i] ==0 + m.c7=Constraint(m.t, rule=_c7) + + + def _c8(m,i): + if i==0: + return Constraint.Skip + else: + m.ni45=1+value(m.ni45) + return m.dy6dt[i] - ((m.Q1)/m.V)*(0.5*m.z26[i]+0.5*m.z6[i]) +((m.Q1+m.Q4[i])/m.V)*(m.z45[i]) - (1/m.V)* (m.z57[i]) - (1/m.V)* (m.Loss6[i] ) ==0 + m.c8=Constraint(m.t, rule=_c8) + + + def _c9(m,i): + if i==0: + return Constraint.Skip + else: + m.ni58=1+value(m.ni58) + return m.dx7dt[i] +(1/m.tav1)*m.z58[i]- (1/m.tav1)*m.DWN7[i] ==0 + m.c9=Constraint(m.t, rule=_c9) + + + def _c10(m,i): + if i==0: + return Constraint.Skip + else: + m.ni46=1+value(m.ni46) + return m.dy7dt[i] - ((m.Q1)/m.V)*(0.5*m.z27[i]+0.5*m.z7[i]) + ((m.Q1+m.Q4[i])/m.V)*(m.z46[i]) - (1/m.V)* (m.z58[i]) - (1/m.V)* (m.Loss7[i] ) ==0 + m.c10=Constraint(m.t, rule=_c10) + + def _c11(m,i): + if i==0: + return Constraint.Skip + else: + m.ni59=1+value(m.ni59) + return m.dx8dt[i] + (1/m.tav1)*m.z59[i] - (1/m.tav1)*m.DWN8[i] ==0 + m.c11=Constraint(m.t, rule=_c11) + + + def _c12(m,i): + if i==0: + return Constraint.Skip + else: + m.ni47=1+value(m.ni47) +# m.ni47+=1 + return m.dy8dt[i] - ((m.Q1)/m.V)*(0.5*m.z28[i]+0.5*m.z8[i]) + ((m.Q1+m.Q4[i])/m.V)*(m.z47[i]) - (1/m.V)* (m.z59[i]) - (1/m.V)* (m.Loss8[i] )==0 + m.c12=Constraint(m.t, rule=_c12) + + def _c13(m,i): + if i==0: + return Constraint.Skip + else: +# m.ni60+=1 + m.ni60=1+value(m.ni60) + return m.dx9dt[i] + (1/m.tav1)*m.z60[i] - (1/m.tav1)*m.DWN9[i] ==0 + m.c13=Constraint(m.t, rule=_c13) + + def _c14(m,i): + if i==0: + return Constraint.Skip + else: + m.ni48=1+value(m.ni48) + return m.dy9dt[i] - ((m.Q1)/m.V)*(0.5*m.z29[i]+0.5*m.z9[i]) + ((m.Q1+m.Q4[i])/m.V)*(m.z48[i]) - (1/m.V)* (m.z60[i]) - (1/m.V)* (m.Loss9[i] ) ==0 + + m.c14=Constraint(m.t, rule=_c14) + + + + def _c15(m,i): + if i==0: + return Constraint.Skip + else: + m.ni50=1+value(m.ni50) + return m.dy11dt[i] - ((m.Q1)/m.V)*(0.5*m.z33[i]+0.5*m.z13[i]) + ((m.Q1+m.Q4[i])/m.V)*(m.z50[i]) ==0 + m.c15=Constraint(m.t, rule=_c15) + + #AOB + def _c16(m,i): + if i==0: + return Constraint.Skip + else: + m.ni51=1+value(m.ni51) + return m.dy12dt[i] - ((m.Q1)/m.V)*(0.5*m.z31[i]+0.5*m.z11[i]) + ((m.Q1+m.Q4[i])/m.V)*(m.z51[i]) - ((m.Q)/m.V)*(m.Aint) ==0 + + m.c16=Constraint(m.t, rule=_c16) + + + #NOB + + def _c17(m,i): + if i==0: + return Constraint.Skip + else: + m.ni66=1+value(m.ni66) + return m.ddy12dt[i] - ((m.Q1)/m.V)*(0.5*m.z65[i]+0.5*m.z64[i]) + ((m.Q1+m.Q4[i])/m.V)*(m.z66[i]) - ((m.Q)/m.V)*(m.Aint) ==0 + m.c17=Constraint(m.t, rule=_c17) + + def _c18(m,i): + if i==0: + return Constraint.Skip + else: + m.ni52=1+value(m.ni52) + return m.dy13dt[i] - ((m.Q1)/m.V)*(0.5*m.z30[i]+0.5*m.z10[i]) + ((m.Q1+m.Q4[i])/m.V)*(m.z52[i]) - ((m.Q)/m.V)*(m.Hint) ==0 + m.c18=Constraint(m.t, rule=_c18) + + #NO3 + def _c19(m,i): + if i==0: + return Constraint.Skip + else: + m.ni53=1+value(m.ni53) + return m.dy14dt[i] - ((m.Q1)/m.V)*(0.5*m.z32[i]+0.5*m.z12[i]) + ((m.Q1+m.Q4[i])/m.V)*(m.z53[i]) ==0 + m.c19=Constraint(m.t, rule=_c19) + + + #NO2 + def _c20(m,i): + if i==0: + return Constraint.Skip + else: + m.ni63=1+value(m.ni63) + return m.ddy14dt[i] - ((m.Q1)/m.V)*(0.5*m.z62[i]+0.5*m.z61[i]) + ((m.Q1+m.Q4[i])/m.V)*(m.z63[i]) ==0 + m.c20=Constraint(m.t, rule=_c20) + + + +################# wastewater treatment ################### + + #Inert soluble organic matter + def _cz1(m,i): + if i==0: + return Constraint.Skip + else: + m.ni63=1+value(m.ni63) + return m.dzSIdt[i] - (m.Q/m.Vw1)*(m.z47[i]-m.z8[i]) ==0 + m.cz1=Constraint(m.t, rule=_cz1) + + + # readily organic soluble + def _cz2(m,i): + if i==0: + return Constraint.Skip + else: + m.ni6=1+value(m.ni6) + return m.dzSdt[i] - (m.Q/m.Vw1)*(m.z45[i]-m.z6[i]) - m.rs[i] ==0 + m.cz2=Constraint(m.t, rule=_cz2) + + + #Inert particulate organic matter + def _cz3(m,i): + if i==0: + return Constraint.Skip + else: + m.ni9=1+value(m.ni9) + return m.dzXIdt[i] - (m.Q/m.Vw1)*(0.52*((m.Q1+m.Q4[i])/m.Q1)*m.z48[i]-m.z9[i]) - m.rIX[i] ==0 + m.cz3=Constraint(m.t, rule=_cz3) + + + #slowly organic matter + def _cz4(m,i): + if i==0: + return Constraint.Skip + else: + m.ni7=1+value(m.ni7) + return m.dzXdt[i] - (m.Q/m.Vw1)*(0.52*((m.Q1+m.Q4[i])/m.Q1)*m.z46[i]-m.z7[i]) - m.rX[i] ==0 + m.cz4=Constraint(m.t, rule=_cz4) + + + #Heterotrophic + def _cz5(m,i): + if i==0: + return Constraint.Skip + else: + m.ni10=1+value(m.ni10) + return m.dXHdt[i] - (m.Q/m.Vw1)*(m.z52[i]-m.z10[i]) - m.rBH[i] ==0 + m.cz5=Constraint(m.t, rule=_cz5) + + #AOB + def _cz6(m,i): + if i==0: + return Constraint.Skip + else: + m.ni11=1+value(m.ni11) + return m.dAdt[i] - (m.Q/m.Vw1)*(m.z51[i]-m.z11[i]) - m.rAOB[i] ==0 + m.cz6=Constraint(m.t, rule=_cz6) + + + #NOB + def _cz7(m,i): + if i==0: + return Constraint.Skip + else: + m.ni64=1+value(m.ni64) + return m.ddAdt[i] - (m.Q/m.Vw1)*(m.z66[i]-m.z64[i]) - m.rNOB[i] ==0 + m.cz7=Constraint(m.t, rule=_cz7) + + #Biomass decay + def _cz8(m,i): + if i==0: + return Constraint.Skip + else: + m.ni13=1+value(m.ni13) + return m.dXPdt[i] - (m.Q/m.Vw1)*(0.52*((m.Q1+m.Q4[i])/m.Q1)*m.z50[i]-m.z13[i]) - m.rP[i] ==0 + m.cz8=Constraint(m.t, rule=_cz8) + + + #Inert particulate organic matter biofilm + def _cz9(m,i): + if i==0: + return Constraint.Skip + else: + m.ni18=1+value(m.ni18) + return m.dzXIbdt[i] - m.rIXb[i] ==0 + m.cz9=Constraint(m.t, rule=_cz9) + + + #slowly organic matter biofilm + def _cz10(m,i): + if i==0: + return Constraint.Skip + else: + m.ni16=1+value(m.ni16) + return m.dzXbdt[i] - m.rXb[i] ==0 + m.cz10=Constraint(m.t, rule=_cz10) + + + #Heterotrophic biofilm + def _cz11(m,i): + if i==0: + return Constraint.Skip + else: + m.ni14=1+value(m.ni14) + return m.dXHbdt[i] - m.rBHb[i] ==0 + m.cz11=Constraint(m.t, rule=_cz11) + + + + #AOB biofilm + def _cz12(m,i): + if i==0: + return Constraint.Skip + else: + m.ni15=1+value(m.ni15) + return m.dAbdt[i] - m.rAOBb[i] ==0 + m.cz12=Constraint(m.t, rule=_cz12) + + + #NOB biofilm + def _cz13(m,i): + if i==0: + return Constraint.Skip + else: + m.ni67=1+value(m.ni67) + return m.ddAbdt[i] - m.rNOBb[i] ==0 + m.cz13=Constraint(m.t, rule=_cz13) + + + + #Biomass decay biofilm + def _cz14(m,i): + if i==0: + return Constraint.Skip + else: + m.ni19=1+value(m.ni19) + return m.dXPbdt[i] - m.rPb[i] ==0 + m.cz14=Constraint(m.t, rule=_cz14) + + + + #NO3 + def _cz16(m,i): + if i==0: + return Constraint.Skip + else: + m.ni12=1+value(m.ni12) + return m.dzNOdt[i] - (m.Q/m.Vw1)*(m.z53[i]-m.z12[i]) - m.rNO3[i] ==0 + m.cz16=Constraint(m.t, rule=_cz16) + + #NO2 + def _cz17(m,i): + if i==0: + return Constraint.Skip + else: + m.ni61=1+value(m.ni61) + return m.ddzNOdt[i] - (m.Q/m.Vw1)*(m.z63[i]-m.z61[i]) - m.rNO2[i] ==0 + m.cz17=Constraint(m.t, rule=_cz17) + + + #ammonia + def _cz18(m,i): + if i==0: + return Constraint.Skip + else: + m.ni0=1+value(m.ni0) + return m.dNHdt[i] - (m.Q/m.Vw1)* (m.z40[i] -m.z0[i]) - m.ramm[i] ==0 + m.cz18=Constraint(m.t, rule=_cz18) + + + + #organic nitrogen soluble + def _cz19(m,i): + if i==0: + return Constraint.Skip + else: + m.ni1=1+value(m.ni1) + return m.dSNDdt[i] - (m.Q/m.Vw1)* (m.z41[i] -m.z1[i]) - m.rSND[i] ==0 + m.cz19=Constraint(m.t, rule=_cz19) + + + + #organic nitrogen particulate + def _cz20(m,i): + if i==0: + return Constraint.Skip + else: + m.ni2=1+value(m.ni2) + return m.dXNDdt[i] - (m.Q/m.Vw1)*(m.z42[i]-m.z2[i]) - m.rXND[i]==0 + m.cz20=Constraint(m.t, rule=_cz20) + + + + #organic nitrogen particulate biofilm + def _cz21(m,i): + if i==0: + return Constraint.Skip + else: + m.ni17=1+value(m.ni17) + return m.dXNDbdt[i] - m.rXNDb[i] ==0 + m.cz21=Constraint(m.t, rule=_cz21) + + + + + # Inert soluble organic matter + def _cz22(m,i): + if i==0: + return Constraint.Skip + else: + m.ni28=1+value(m.ni28) + return m.dzSIdt2[i] - (m.Q/m.Vw1)*(m.z47[i]-m.z28[i]) ==0 + m.cz22=Constraint(m.t, rule=_cz22) + + + # readily organic soluble + def _cz23(m,i): + if i==0: + return Constraint.Skip + else: + m.ni26=1+value(m.ni26) + return m.dzSdt2[i] - (m.Q/m.Vw1)*(m.z45[i]-m.z26[i]) - m.recs[i] ==0 + m.cz23=Constraint(m.t, rule=_cz23) + + + #Inert particulate organic matter + def _cz24(m,i): + if i==0: + return Constraint.Skip + else: + m.ni29=1+value(m.ni29) + return m.dzXIdt2[i] - (m.Q/m.Vw1)*(0.52*((m.Q1+m.Q4[i])/m.Q1)*m.z48[i]-m.z29[i]) - m.recIX[i] ==0 + m.cz24=Constraint(m.t, rule=_cz24) + + #slowly organic matter + def _cz25(m,i): + if i==0: + return Constraint.Skip + else: + m.ni27=1+value(m.ni27) + return m.dzXdt2[i] - (m.Q/m.Vw1)*(0.52*((m.Q1+m.Q4[i])/m.Q1)*m.z46[i]-m.z27[i]) - m.recX[i] ==0 + m.cz25=Constraint(m.t, rule=_cz25) + + + #Heterotrophic + def _cz26(m,i): + if i==0: + return Constraint.Skip + else: + m.ni30=1+value(m.ni30) + return m.dXHdt2[i] - (m.Q/m.Vw1)*(m.z52[i]-m.z30[i]) - m.recBH[i] ==0 + m.cz26=Constraint(m.t, rule=_cz26) + + + #AOB + def _cz27(m,i): + if i==0: + return Constraint.Skip + else: + m.ni31=1+value(m.ni31) + return m.dAdt2[i] - (m.Q/m.Vw1)*(m.z51[i]-m.z31[i]) - m.recAOB[i] ==0 + m.cz27=Constraint(m.t, rule=_cz27) + + + #NOB + def _cz28(m,i): + if i==0: + return Constraint.Skip + else: + m.ni65=1+value(m.ni65) + return m.ddAdt2[i] - (m.Q/m.Vw1)*(m.z66[i]-m.z65[i]) - m.recNOB[i] ==0 + m.cz28=Constraint(m.t, rule=_cz28) + + + #Biomass decay + def _cz29(m,i): + if i==0: + return Constraint.Skip + else: + m.ni33=1+value(m.ni33) + return m.dXPdt2[i] - (m.Q/m.Vw1)*(0.52*((m.Q1+m.Q4[i])/m.Q1)*m.z50[i]-m.z33[i]) - m.recP[i] ==0 + m.cz29=Constraint(m.t, rule=_cz29) + + + #Inert particulate organic matter biofilm + def _cz30(m,i): + if i==0: + return Constraint.Skip + else: + m.ni38=1+value(m.ni38) + return m.dzXIbdt2[i] - m.recIXb[i] ==0 + m.cz30=Constraint(m.t, rule=_cz30) + + + + #slowly organic matter biofilm + def _cz31(m,i): + if i==0: + return Constraint.Skip + else: + m.ni36=1+value(m.ni36) + return m.dzXbdt2[i] - m.recXb[i] ==0 + m.cz31=Constraint(m.t, rule=_cz31) + + + #Heterotrophic biofilm + def _cz32(m,i): + if i==0: + return Constraint.Skip + else: + m.ni34=1+value(m.ni34) + return m.dXHbdt2[i] - m.recBHb[i] ==0 + m.cz32=Constraint(m.t, rule=_cz32) + + + #AOB biofilm + def _cz33(m,i): + if i==0: + return Constraint.Skip + else: + m.ni35=1+value(m.ni35) + return m.dAbdt2[i] - m.recAOBb[i] ==0 + m.cz33=Constraint(m.t, rule=_cz33) + + + #NOB biofilm + def _cz34(m,i): + if i==0: + return Constraint.Skip + else: + m.ni68=1+value(m.ni68) + return m.ddAbdt2[i] - m.recNOBb[i] ==0 + m.cz34=Constraint(m.t, rule=_cz34) + + + + #Biomass decay biofilm + def _cz35(m,i): + if i==0: + return Constraint.Skip + else: + m.ni39=1+value(m.ni39) + return m.dXPbdt2[i] - m.recPb[i] ==0 + m.cz35=Constraint(m.t, rule=_cz35) + + + #NO3 + def _cz37(m,i): + if i==0: + return Constraint.Skip + else: + m.ni32=1+value(m.ni32) + return m.dzNOdt2[i] - (m.Q/m.Vw1)*(m.z53[i] -m.z32[i]) - m.recNO3[i] ==0 + m.cz37=Constraint(m.t, rule=_cz37) + + + #NO2 + def _cz38(m,i): + if i==0: + return Constraint.Skip + else: + m.ni62=1+value(m.ni62) + return m.ddzNOdt2[i] - (m.Q/m.Vw1)*(m.z63[i] -m.z62[i]) - m.recNO2[i] ==0 + m.cz38=Constraint(m.t, rule=_cz38) + + + #ammonia + def _cz39(m,i): + if i==0: + return Constraint.Skip + else: + m.ni20=1+value(m.ni20) + return m.dNHdt2[i] - (m.Q/m.Vw1)* (m.z40[i]-m.z20[i]) - m.recamm[i] ==0 + m.cz39=Constraint(m.t, rule=_cz39) + + + + #organic nitrogen soluble + def _cz40(m,i): + if i==0: + return Constraint.Skip + else: + m.ni21=1+value(m.ni21) + return m.dSNDdt2[i] - (m.Q/m.Vw1)* (m.z41[i] -m.z21[i]) - m.recSND[i] ==0 + m.cz40=Constraint(m.t, rule=_cz40) + + + + #organic nitrogen particulate + def _cz41(m,i): + if i==0: + return Constraint.Skip + else: + m.ni22=1+value(m.ni22) + return m.dXNDdt2[i] - (m.Q/m.Vw1)*(m.z42[i]-m.z22[i]) - m.recXND[i] ==0 + m.cz41=Constraint(m.t, rule=_cz41) + + + #organic nitrogen particulate biofilm + def _cz42(m,i): + if i==0: + return Constraint.Skip + else: + m.ni37=1+value(m.ni37) + return m.dXNDbdt2[i] - m.recXNDb[i] ==0 + m.cz42=Constraint(m.t, rule=_cz42) + + def _weight(m,i): + if i==0: + return Constraint.Skip + else: + m.ni69=1+value(m.ni69) + return m.dWdt[i] - (1-m.agro)*m.bgro[i]*(m.tau*m.delta[i]*m.nu[i]*m.F[i]*1000/m.z70[i]) + m.Kgro * m.z69[i]**m.ngro == 0 + m.weight=Constraint(m.t, rule=_weight) + + def _coxy1(m,i): + if i==0: + return Constraint.Skip + else: + m.ni43=1+value(m.ni43) + return m.dy4dt[i] - ((m.Q1)/m.V)*(0.5*m.z23[i]+0.5*m.z3[i]) + ((m.Q1+m.Q4[i])/m.V)*(m.z43[i]) + (1/m.V)*(m.biom[i]*(3.05*10**(-6))* ((1.8* m.T + 32)**1.855)* (m.z69[i]/453.592)**(-0.138)) - m.kl[i] ==0 #O2 + m.coxy1=Constraint(m.t, rule=_coxy1) + + + def _coxy2(m,i): + if i==0: + return Constraint.Skip + else: + m.ni3=1+value(m.ni3) + return m.dz02[i] - (m.Q/m.Vw1)*(m.z43[i]-m.z3[i]) - m.klBR1[i] - m.rO[i] ==0 + m.coxy2=Constraint(m.t, rule=_coxy2) + + + def _coxy3(m,i): + if i==0: + return Constraint.Skip + else: + m.ni23=1+value(m.ni23) + return m.dz022[i] - (m.Q/m.Vw1)*(m.z43[i]-m.z23[i]) - m.klBR2[i] - m.recO[i] ==0 + m.coxy3=Constraint(m.t, rule=_coxy3) + + + if flag==1: + disc=TransformationFactory('dae.finite_difference') + disc.apply_to(m,nfe=P,wrt=m.t,scheme='BACKWARD') + else: + disc=TransformationFactory('dae.collocation') + disc.apply_to(m,nfe=P*h,ncp=n_coll,wrt=m.t,scheme='LAGRANGE-RADAU') + + + + + + + def _init0(m): + return m.z0[0] == States[0] + m.init0 = Constraint(rule=_init0) + + def _init1(m): + return m.z1[0] == States[1] + m.init1 = Constraint(rule=_init1) + + def _init2(m): + return m.z2[0] == States[2] + m.init2 = Constraint(rule=_init2) + + def _init6(m): + return m.z6[0] == States[6] + m.init6 = Constraint(rule=_init6) + + def _init7(m): + return m.z7[0] == States[7] + m.init7 = Constraint(rule=_init7) + + def _init8(m): + return m.z8[0] == States[8] + m.init8 = Constraint(rule=_init8) + + def _init9(m): + return m.z9[0] == States[9] + m.init9 = Constraint(rule=_init9) + + def _init10(m): + return m.z10[0] == States[10] + m.init10 = Constraint(rule=_init10) + + def _init11(m): + return m.z11[0] == States[11] + m.init11 = Constraint(rule=_init11) + + def _init12(m): + return m.z12[0] == States[12] + m.init12 = Constraint(rule=_init12) + + def _init13(m): + return m.z13[0] == States[13] + m.init13 = Constraint(rule=_init13) + + def _init14(m): + return m.z14[0] == States[14] + m.init14 = Constraint(rule=_init14) + + def _init15(m): + return m.z15[0] == States[15] + m.init15 = Constraint(rule=_init15) + + def _init16(m): + return m.z16[0] == States[16] + m.init16 = Constraint(rule=_init16) + + def _init17(m): + return m.z17[0] == States[17] + m.init17 = Constraint(rule=_init17) + + def _init18(m): + return m.z18[0] == States[18] + m.init18 = Constraint(rule=_init18) + + def _init19(m): + return m.z19[0] == States[19] + m.init19 = Constraint(rule=_init19) + + #Second reactor initial concentration + + def _init20(m): + return m.z20[0] == States[20] + m.init20 = Constraint(rule=_init20) + + def _init21(m): + return m.z21[0] == States[21] + m.init21 = Constraint(rule=_init21) + + def _init22(m): + return m.z22[0] == States[22] + m.init22 = Constraint(rule=_init22) + + def _init26(m): + return m.z26[0] == States[26] + m.init26 = Constraint(rule=_init26) + + def _init27(m): + return m.z27[0] == States[27] + m.init27 = Constraint(rule=_init27) + + def _init28(m): + return m.z28[0] == States[28] + m.init28 = Constraint(rule=_init28) + + def _init29(m): + return m.z29[0] == States[29] + m.init29= Constraint(rule=_init29) + + def _init30(m): + return m.z30[0] == States[30] + m.init30 = Constraint(rule=_init30) + + def _init31(m): + return m.z31[0] == States[31] + m.init31 = Constraint(rule=_init31) + + def _init32(m): + return m.z32[0] == States[32] + m.init32 = Constraint(rule=_init32) + + def _init33(m): + return m.z33[0] == States[33] + m.init33 = Constraint(rule=_init33) + + def _init34(m): + return m.z34[0] == States[34] + m.init34 = Constraint(rule=_init34) + + def _init35(m): + return m.z35[0] == States[35] + m.init35 = Constraint(rule=_init35) + + def _init36(m): + return m.z36[0] == States[36] + m.init36 = Constraint(rule=_init36) + + def _init37(m): + return m.z37[0] == States[37] + m.init37 = Constraint(rule=_init37) + + def _init38(m): + return m.z38[0] == States[38] + m.init38 = Constraint(rule=_init38) + + def _init39(m): + return m.z39[0] == States[39] + m.init39 = Constraint(rule=_init39) + + def _init40(m): + return m.z40[0] == States[40] + m.init40 = Constraint(rule=_init40) + + def _init41(m): + return m.z41[0] == States[41] + m.init41 = Constraint(rule=_init41) + + def _init42(m): + return m.z42[0] == States[42] + m.init42 = Constraint(rule=_init42) + + def _init45(m): + return m.z45[0] == States[45] + m.init45 = Constraint(rule=_init45) + + def _init46(m): + return m.z46[0] == States[46] + m.init46 = Constraint(rule=_init46) + + def _init47(m): + return m.z47[0] == States[47] + m.init47 = Constraint(rule=_init47) + + def _init48(m): + return m.z48[0] == States[48] + m.init48 = Constraint(rule=_init48) + + def _init50(m): + return m.z50[0] == States[50] + m.init50 = Constraint(rule=_init50) + + def _init51(m): + return m.z51[0] == States[51] + m.init51 = Constraint(rule=_init51) + + def _init52(m): + return m.z52[0] == States[52] + m.init52 = Constraint(rule=_init52) + + def _init53(m): + return m.z53[0] == States[53] + m.init53 = Constraint(rule=_init53) + + def _init54(m): + return m.z54[0] == States[54] + m.init54 = Constraint(rule=_init54) + + def _init55(m): + return m.z55[0] == States[55] + m.init55 = Constraint(rule=_init55) + + def _init56(m): + return m.z56[0] == States[56] + m.init56 = Constraint(rule=_init56) + + def _init57(m): + return m.z57[0] == States[57] + m.init57 = Constraint(rule=_init57) + + def _init58(m): + return m.z58[0] == States[58] + m.init58 = Constraint(rule=_init58) + + def _init59(m): + return m.z59[0] == States[59] + m.init59 = Constraint(rule=_init59) + + def _init60(m): + return m.z60[0] == States[60] + m.init60 = Constraint(rule=_init60) + + def _init61(m): + return m.z61[0] == States[61] + m.init61 = Constraint(rule=_init61) + + def _init62(m): + return m.z62[0] == States[62] + m.init62 = Constraint(rule=_init62) + + def _init63(m): + return m.z63[0] == States[63] + m.init63 = Constraint(rule=_init63) + + def _init64(m): + return m.z64[0] == States[64] + m.init64 = Constraint(rule=_init64) + + def _init65(m): + return m.z65[0] == States[65] + m.init65 = Constraint(rule=_init65) + + def _init66(m): + return m.z66[0] == States[66] + m.init66 = Constraint(rule=_init66) + + def _init67(m): + return m.z67[0] == States[67] + m.init67 = Constraint(rule=_init67) + + def _init68(m): + return m.z68[0] == States[68] + m.init68 = Constraint(rule=_init68) + + def _init69(m): + return m.z69[0] == States[69] + m.init69 = Constraint(rule=_init69) + + def _init3(m): + return m.z3[0] == States[3] + m.init3 = Constraint(rule=_init3) + + def _init23(m): + return m.z23[0] == States[23] + m.init23 = Constraint(rule=_init23) + + def _init43(m): + return m.z43[0] == States[43] + m.init43 = Constraint(rule=_init43) + + + def _addcon_kl(m,i): + if i==0: + return m.kl[i]-inputs[1]==0 + else: + return Constraint.Skip + m.addcon_kl=Constraint(m.t, rule=_addcon_kl) + + + + def _addcon_klBR1(m,i): + if i==0: + return m.klBR1[i]-inputs[2]==0 + else: + return Constraint.Skip + m.addcon_klBR1=Constraint(m.t, rule=_addcon_klBR1) + + + + def _addcon_klBR2(m,i): + if i==0: + return m.klBR2[i]-inputs[4]==0 + else: + return Constraint.Skip + m.addcon_klBR2=Constraint(m.t, rule=_addcon_klBR2) + + + def _addcon_Q4(m,i): + if i==0: + return m.Q4[i]-inputs[3]==0 + else: + return Constraint.Skip + m.addcon_Q4=Constraint(m.t, rule=_addcon_Q4) + + + + + + def _CVcons1(m,i): + return m.z3[i] >=0.007 + m.CVcons1= Constraint(m.t,rule=_CVcons1) + + def _CVcons2(m,i): + return m.z23[i] >=0.007 + m.CVcons2= Constraint(m.t,rule=_CVcons2) + + def _CVcons3(m,i): + return m.z43[i] >=0.007 + m.CVcons3= Constraint(m.t,rule=_CVcons3) + + + def _CVcons4(m,i): + return m.z12[i] <=0.075 + m.CVcons4= Constraint(m.t,rule=_CVcons4) + + def _CVcons5(m,i): + return m.z32[i] <=0.075 + m.CVcons5= Constraint(m.t,rule=_CVcons5) + + def _CVcons6(m,i): + return m.z53[i] <=0.075 + m.CVcons6= Constraint(m.t,rule=_CVcons6) + + + + def _CVcons7(m,i): + return m.z0[i] <=0.013 + m.CVcons7= Constraint(m.t,rule=_CVcons7) + + def _CVcons8(m,i): + return m.z20[i] <=0.013 + m.CVcons8= Constraint(m.t,rule=_CVcons8) + + def _CVcons9(m,i): + return m.z40[i] <=0.013 + m.CVcons9= Constraint(m.t,rule=_CVcons9) + + + m.obj=Objective(expr=(7.35-0.2)*m.z69[h*P]*m.z70[h*P]/1000 - sum(m.kl[i]*0.04*0.1 + 1.55*m.F[i]*0.1 for i in m.t) - sum( 0.0001*(m.kl[i]-m.kl[m.t.next(i)])**2 + 0.001*(m.F[i]-m.F[m.t.next(i)])**2 + 0.001*(m.Q4[i]-m.Q4[m.t.next(i)])**2 +0.0001*(m.klBR1[i]-m.klBR1[m.t.next(i)])**2+ 0.0001*(m.klBR2[i]-m.klBR2[m.t.next(i)])**2 for i in sorted(m.t)[:-1]) , sense = maximize) + + + return m + + + + \ No newline at end of file -- GitLab