Closed adam-a-a closed 3 years ago
@andrewlee94 should this be a general IDAES capability or something specific to ProteusLib?
@dangunter This one sits around the border. It is probably something we can building into the generic reaction framework as an optional property.
We can use the eNRTL model to compute the activities of ions and subsequently compute the saturation ratio, probably by also assuming some value/relationship for the Ksp of key foulants.
Where this saturation ratio variable will live is of secondary concern for the time being. The top priority is to compute the saturation ratio with respect to potential foulants at least at the outlet of the RO feed channel (and possibly extending to all points along the membrane).
Saturation ratio is now being computed via the eNRTL model on our feature branch. At some point, saturation ratios should probably be part of the generic property model framework in IDAES. However, this issue was raised as a reminder to compute saturation ratios to set mineral scaling constraints in the full treatment train demonstration.
With regard to our full treatment trains, one way of demonstrating the value of pretreatment is by quantifying the need for removal of primary foulants such as CaSO4 (for membrane processes like RO).
Another example of where saturation ratios can come in handy is for the LSRRO model, where NaCl can theoretically approach its solubility limit at very high recovery rates.
If we consider a saturation ratio of the form
S = IAP/Ksp = (a_m * a_x) / (a_m,eq * a_x,eq)
where IAP is the ionic activity product, Ksp is the solubility product, a_m is activity of the cation, a_x the activity of the anion, and the subscript eq denoting equilibrium, we can merely set a constraint in a given unit model for the saturation ratio, S.When S = 1, the solution is saturated with respect to a given solute. Thus, for RO, we would want to ensure that S < 1 at any point along the membrane length (side note: may be cases with other technologies where we want S > 1 to promote precipitation). On the one hand we can set a constraint related to S at the membrane-interface of the RO outlet, since this is where we'd expect S to be at its maximum. On the other hand, we may want to allow for the flexibility to identify where S begins to exceed 1 along the membrane, i.e., compute S at every position in space.
Adding a variable to property models such as
saturation_ratio_comp
and the associated constraint for each solute of concern is something we should consider implementing, especially for use in full treatment trains that would incorporate multi-component feed compositions.