Skip to content

Commit 3d1addf

Browse files
committed
Rework state initialization
1 parent 07c995e commit 3d1addf

File tree

1 file changed

+48
-40
lines changed

1 file changed

+48
-40
lines changed

CADETPythonSimulator/unit_operation.py

+48-40
Original file line numberDiff line numberDiff line change
@@ -1058,10 +1058,10 @@ def initialize_initial_values(self, t_zero: float):
10581058

10591059
Q_in = self.Q_in[0]
10601060
Q_out = self.Q_out[0]
1061-
c_feed = self.states['inlet']['c']
1061+
c_in = self.states['inlet']['c']
10621062

1063-
n_feed_dot = Q_in * c_feed
1064-
self.state_derivatives['inlet']['n_feed'] = n_feed_dot
1063+
n_in_dot = Q_in * c_in
1064+
self.state_derivatives['inlet']['n'] = n_in_dot
10651065

10661066
rejection = np.array(
10671067
[
@@ -1070,62 +1070,70 @@ def initialize_initial_values(self, t_zero: float):
10701070
]
10711071
)
10721072

1073-
n_cake_dot = rejection * n_feed_dot
1074-
self.state_derivatives['cake']['n_in'] = n_cake_dot
1075-
1076-
cake_vol = self.states['cake']['volume']
1073+
n_cake_dot = rejection * n_in_dot
1074+
self.state_derivatives['retentate']['n'] = n_cake_dot
1075+
self.state_derivatives['cake']['n'] = n_cake_dot
10771076

1078-
cake_vol_dot = molecular_weights * n_cake_dot / densities
1077+
vol_cake_dot = np.sum(molecular_weights * n_cake_dot / densities)
1078+
self.state_derivatives['cake']['V'] = vol_cake_dot
1079+
self.state_derivatives['retentate']['V'] = vol_cake_dot
10791080

1080-
self.state_derivatives['cake']['volume'] = cake_vol_dot
1081+
if vol_cake_dot > 1e-16:
1082+
self.states['retentate']['c'] = n_cake_dot/vol_cake_dot
1083+
else:
1084+
self.states['retentate']['c'][:] = 0.0
10811085

1082-
for i, cake_vol_dots in enumerate(cake_vol_dot):
1083-
if cake_vol_dots > 1e-16:
1084-
self.states['cake']['c_in'][i] = n_cake_dot[i]/cake_vol_dots
1085-
else:
1086-
self.states['cake']['c_in'][i] = 0.0
1086+
vol_cake = self.states['cake']['V']
1087+
n_cake = self.states['cake']['n']
10871088

1088-
n_permeate_dot = (1 - rejection) * n_feed_dot
1089-
self.state_derivatives['permeate_tank']['n_in'] = n_permeate_dot
1089+
if vol_cake > 1e-16:
1090+
self.states['cake']['c'] = n_cake
1091+
else:
1092+
self.states['cake']['c'][:] = 0
10901093

1094+
n_P_dot = (1 - rejection) * n_in_dot
1095+
self.state_derivatives['permeate']['n'] = n_P_dot
1096+
Q_P = np.sum(n_P_dot * molecular_weights / densities)
10911097

1092-
permeate_vol_dot = np.sum(n_permeate_dot * molecular_weights / densities)
1098+
self.state_derivatives['permeate']['V'] = Q_P
10931099

1094-
if permeate_vol_dot > 1e-16:
1095-
self.states['permeate_tank']['c_in'] = n_permeate_dot/permeate_vol_dot
1100+
if Q_P > 1e-16:
1101+
self.states['permeate']['c'] = n_P_dot / Q_P
10961102
else:
1097-
self.states['permeate_tank']['c_in'][:] = 0.0
1103+
self.states['permeate']['c'][:] = 0.0
10981104

1099-
cake_resistance = \
1100-
np.sum(specific_cake_resistance * densities * cake_vol/membrane_area)
1105+
c_PT = self.states['permeate_tank']['c']
1106+
V_PT = self.states['permeate_tank']['V']
11011107

1108+
self.states['permeate_tank']['n'] = c_PT * V_PT
11021109

1103-
cake_resistance = \
1104-
np.sum(specific_cake_resistance * densities * cake_vol/membrane_area)
1110+
V_PT_dot = Q_P - Q_out
11051111

1106-
if not np.sum(n_permeate_dot) < 1e-16:
1112+
c_PT_dot =\
1113+
(n_P_dot - Q_out * c_PT - V_PT_dot * c_PT) / V_PT
11071114

1108-
fractions = n_permeate_dot/sum(n_permeate_dot)
1115+
self.state_derivatives['permeate_tank']['c'] = c_PT_dot
11091116

1110-
viscosity =\
1111-
self.viscosity_model.get_mixture_viscosity(viscosities, fractions)
1117+
self.state_derivatives['permeate_tank']['V'] = V_PT_dot
11121118

1113-
self.states['cake']['pressure'] = \
1114-
viscosity * permeate_vol_dot\
1115-
*(membrane_resistance + cake_resistance) /membrane_area
1116-
else:
1117-
self.residuals['cake']['pressure'] = 0.0
1119+
if not np.sum(n_P_dot) < 1e-16:
11181120

1119-
c_tank = self.states['permeate_tank']['c']
1120-
tank_volume = self.states['permeate_tank']['volume']
1121-
tank_volume_dot = permeate_vol_dot - Q_out
1121+
fractions = n_P_dot/sum(n_P_dot)
11221122

1123-
c_tank_dot =\
1124-
(n_permeate_dot - Q_out * c_tank - tank_volume_dot * c_tank) / tank_volume
1123+
viscosity =\
1124+
self.viscosity_model.get_mixture_viscosity(viscosities, fractions)
11251125

1126-
self.state_derivatives['permeate_tank']['c'] = c_tank_dot
1126+
n_C = self.states['cake']['n']
1127+
component_volume = n_C * molecular_weights / densities
1128+
cake_resistance = np.sum(
1129+
specific_cake_resistance * densities * component_volume / membrane_area
1130+
)
11271131

1128-
self.state_derivatives['permeate_tank']['volume'] = tank_volume_dot
1132+
self.states['cake']['pressure'] = \
1133+
viscosity * Q_P * (membrane_resistance + cake_resistance)\
1134+
/ membrane_area
1135+
else:
1136+
self.states['cake']['pressure'] = 0
11291137

11301138

11311139

0 commit comments

Comments
 (0)