Skip to content

Commit 07c995e

Browse files
committed
Rework residual equations
1 parent 37f284b commit 07c995e

File tree

1 file changed

+66
-58
lines changed

1 file changed

+66
-58
lines changed

CADETPythonSimulator/unit_operation.py

+66-58
Original file line numberDiff line numberDiff line change
@@ -894,28 +894,32 @@ def compute_residual(
894894
Q_in = self.Q_in[0]
895895
Q_out = self.Q_out[0]
896896

897-
c_feed = self.states['inlet']['c']
898-
899-
n_feed_dot = self.state_derivatives['inlet']['n_feed']
897+
c_in = self.states['inlet']['c']
898+
n_in_dot = self.state_derivatives['inlet']['n']
900899

901-
n_cake_dot = self.state_derivatives['cake']['n_in']
900+
c_R = self.states['retentate']['c']
901+
n_R_dot = self.state_derivatives['retentate']['n']
902+
Q_R = self.state_derivatives['retentate']['V']
902903

903-
c_cake_in = self.states['cake']['c_in']
904+
c_P = self.states['permeate']['c']
905+
n_P_dot = self.state_derivatives['permeate']['n']
906+
Q_P = self.state_derivatives['permeate']['V']
904907

905-
cake_vol = self.states['cake']['volume']
906-
cake_vol_dot = self.state_derivatives['cake']['volume']
907908

908-
n_permeate_dot = self.state_derivatives['permeate_tank']['n_in']
909909

910+
vol_cake = self.states['cake']['V']
911+
vol_cake_dot = self.state_derivatives['cake']['V']
912+
n_C_dot = self.state_derivatives['cake']['n']
913+
n_C = self.states['cake']['n']
914+
c_C = self.states['cake']['c']
915+
c_C_dot = self.state_derivatives['cake']['c']
910916
delta_p = self.states['cake']['pressure']
911917

912-
c_tank = self.states['permeate_tank']['c']
913-
c_tank_dot = self.state_derivatives['permeate_tank']['c']
914-
915-
c_tank_in = self.states['permeate_tank']['c_in']
916-
917-
tank_volume = self.states['permeate_tank']['volume']
918-
tank_volume_dot = self.state_derivatives['permeate_tank']['volume']
918+
c_PT = self.states['permeate_tank']['c']
919+
c_PT_dot = self.state_derivatives['permeate_tank']['c']
920+
n_PT = self.states['permeate_tank']['n']
921+
vol_PT = self.states['permeate_tank']['V']
922+
vol_PT_dot = self.state_derivatives['permeate_tank']['V']
919923

920924
# parameters
921925
molecular_weights = np.array(self.component_system.molecular_weights)
@@ -933,73 +937,77 @@ def compute_residual(
933937
]
934938
)
935939

936-
# Coupling residual equation
937-
self.residuals['inlet']['c'] -= c_feed
940+
# Inlet Equations
941+
self.residuals['inlet']['c'] -= c_in
942+
self.residuals['inlet']['n'] = n_in_dot - Q_in * c_in
938943

939-
# Number of Feed
944+
# Equations for permeate and retentate
940945

941-
self.residuals['inlet']['n_feed'] = n_feed_dot - Q_in * c_feed
946+
self.residuals['retentate']['n'] = n_R_dot - rejection * n_in_dot
947+
self.residuals['permeate']['n'] = n_P_dot - (1 - rejection) * n_in_dot
942948

943-
# Number of cake
949+
self.residuals['retentate']['V'] = \
950+
Q_R - np.sum(n_R_dot * molecular_weights / densities)
951+
self.residuals['permeate']['V'] = \
952+
Q_P - np.sum(n_P_dot * molecular_weights / densities)
944953

945-
self.residuals['cake']['n_in'] = n_cake_dot - rejection * n_feed_dot
954+
if Q_R > 1e-16:
955+
self.residuals['retentate']['c'] = \
956+
c_R - n_R_dot / Q_R
957+
else:
958+
self.residuals['retentate']['c'] = c_R
946959

947-
# Number of Permeate
960+
if Q_P > 1e-16:
961+
self.residuals['permeate']['c'] = \
962+
c_P - n_P_dot / Q_P
963+
else:
964+
self.residuals['permeate']['c'] = c_P
948965

949-
self.residuals['permeate_tank']['n_in'] =\
950-
n_permeate_dot - (1 - rejection) * n_feed_dot
951966

952-
# Incoming Cake Concentration
953-
for i, cake_vol_dots in enumerate(cake_vol_dot):
954-
if cake_vol_dots > 1e-16:
955-
self.residuals['cake']['c_in'][i] =\
956-
c_cake_in[i] - n_cake_dot[i]/cake_vol_dots
957-
else:
958-
self.residuals['cake']['c_in'][i] = c_cake_in[i]
967+
# Cake equations
959968

960-
# Cakevolume
969+
self.residuals['cake']['V'] = \
970+
vol_cake - np.sum(n_C * molecular_weights / densities)
971+
self.residuals['cake']['n'] = n_C_dot - n_R_dot
961972

962-
self.residuals['cake']['volume'] =\
963-
cake_vol_dot - n_cake_dot * molecular_weights / densities
973+
if vol_cake > 1e-16:
974+
self.residuals['cake']['c'] = \
975+
c_C_dot - (n_C_dot - c_C * vol_cake_dot) / vol_cake
976+
else:
977+
self.residuals['cake']['c'] = c_C_dot
964978

965-
# Permeate flow
979+
# Permeate tank equations
966980

967-
permeate_vol_dot = np.sum(n_permeate_dot * molecular_weights / densities)
981+
c_tank_dot_new =\
982+
(n_P_dot - Q_out * c_PT - vol_PT_dot * c_PT) / vol_PT
968983

969-
# Incoming Cake Concentration
970-
if permeate_vol_dot > 1e-16:
971-
self.residuals['permeate_tank']['c_in'] =\
972-
c_tank_in - n_permeate_dot/permeate_vol_dot
973-
else:
974-
self.residuals['permeate_tank']['c_in'] = c_tank_in
984+
self.residuals['permeate_tank']['c'] = c_PT_dot - c_tank_dot_new
975985

976-
# Pressure equation
986+
self.residuals['permeate_tank']['V'] =\
987+
vol_PT_dot - Q_P + Q_out
977988

978-
cake_resistance = \
979-
np.sum(specific_cake_resistance * densities * cake_vol/membrane_area)
989+
self.residuals['permeate_tank']['n'] = n_PT - c_PT * vol_PT
980990

981-
if not np.sum(n_permeate_dot) < 1e-16:
991+
#Pressure equation
982992

983-
fractions = n_permeate_dot/sum(n_permeate_dot)
993+
if not np.sum(n_P_dot) < 1e-16:
994+
995+
fractions = n_P_dot/sum(n_P_dot)
984996

985997
viscosity =\
986998
self.viscosity_model.get_mixture_viscosity(viscosities, fractions)
987999

1000+
component_volume = n_C * molecular_weights / densities
1001+
cake_resistance = np.sum(
1002+
specific_cake_resistance * densities * component_volume / membrane_area
1003+
)
1004+
9881005
self.residuals['cake']['pressure'] = \
989-
delta_p - viscosity * permeate_vol_dot\
990-
*(membrane_resistance + cake_resistance) /membrane_area
1006+
delta_p - viscosity * Q_P\
1007+
*(membrane_resistance + cake_resistance) / membrane_area
9911008
else:
9921009
self.residuals['cake']['pressure'] = delta_p
9931010

994-
# Tank equations
995-
996-
c_tank_dot_new =\
997-
(n_permeate_dot - Q_out * c_tank - tank_volume_dot * c_tank) / tank_volume
998-
999-
self.residuals['permeate_tank']['c'] = c_tank_dot - c_tank_dot_new
1000-
1001-
self.residuals['permeate_tank']['volume'] =\
1002-
tank_volume_dot - permeate_vol_dot + Q_out
10031011

10041012

10051013

0 commit comments

Comments
 (0)