We're currently working on developing an MSX model for Chlorine Decay that can account for wall decay as a factor of Biofilm growth (thus removing the need to specify wall decay for specific pipes throughout the network).
Unfortunately the equation for this relies on the mass transfer coefficient, which is dependent on the type of flow, as explained here: https://docs.bentley.com/LiveContent/web/Bentley%20WaterGEMS%20SS6-v1/en/GUID-D7D70292-50F6-4066-A30E-3B98BBB2BF7B.html.
This is built into the WaterGEMS standard pipe wall reaction calculations, however I need to know whether we can reference this coefficient in MSX, does anyone know whether this is possible? My understanding is that EPANET is capable of this so I assume WaterGEMS is capable as well, I just don’t know how.
For anyone wondering, the equations for Bulk decay are very simple. Below is a copy of what we use currently (no wall decay):
The Wall Decay equations are derived as follows (A&B are constants to be determined by trial and error, kw is what we need from WaterGEMS)
You would need access to the WaterObjects.NET functionality to use the "Mass Transfer Coefficient" used in the first order wall reaction rate.
Another approach would be to use Formula Based User Defined Extensions. From the formula provided develop an equation to calculate the mass transfer coefficient from the equations given. However, that would first require classification of flow based on Reynold's number.
You can develop an formula based UDX for Reynold's number and classify the flow as laminar or turbulent; then develop separate equations (using formula based UDX) for both the type of flows for the Sherwood number. It is best in this case that you create two separate selection sets for both the type of flows and work on them individually.
Once you have the Sherwood number values for both the flow use the equation to calculate mass transfer coefficient again using the formula based UDX.
This procedure is a bit complicated, but can be achieved.
Let me know if this helps.
Bentley Technical Support
Thank you for your assistance. I have absolutely no programming knowledge so I'm afraid that first suggestion is not an option.
Unfortunately I'm only a Civil engineer so my knowledge of the chemical reactions and their associated equations behind them is very limited. In order to be able to follow your workaround I need the following knowledge.
This would be a lot easier if WaterGEMS could simply calculate the mass transfer coefficient for me (as I assume it does this already for first order wall decay calculations).
The equation I provided is just a sample equation. You can choose whatever constants you like. In fact you have complete control over the full definition of any terms that you want/need.
With regards to "Additionally it doesn't allow for the changes in the coefficient that occur between laminar and turbulent flows." - Isn't that what Reynolds number is for? If not, can you please explain to me what is missing?
With regards to factoring in temperature, I guess you could model that as another species, though it sounds like a pretty challenging thing to attempt. Most people would just assume a constant temperature, is my guess.
In the screenshot in my above reply you'll see that the equation for Sherwoods number is different depending whether it's laminar or turbulent flow. This then means the equation for the Mass transfer coefficient is different whether it's laminar or turbulent flow. Which makes sense when you consider the difference in water flow patters between laminar and turbulent.
Temperature would be constant yes, but we do model for different temperatures at different times of the year. It would be preferable to have MSX coded so that we can enter temperature (in degrees Celsius) and it automatically calculates the constants for that temperature.
The tricky part, which I don't know how to solve at the moment. Is how to code the equations into MSX so that it recognizes the difference between laminar and turbulent flows and applies the variations in coefficients accordingly.
Likewise with Yashodhans UDX proposal, if I do work with the selection set issue, I also do not know how (or even if it's possible) to reference the UDX calculated values back into the MSX. Is MSX capable of that?
No it's not possible to use UDX with MSX in that way.
I guess I am confused as to why you are rejecting my answer as I am confident it provides you everything you need.
Let me know if there is anything I can clarify.
If you can explain how, within MSX, I can get it to apply different equations for mass transfer coefficient depending on whether the flow is laminar or turbulent, then that will provide me with the information I need.
You're answer doesn't provide that information, or any information that isn't already in the user guide.
If I could assume all flows in the system were turbulent at all times it wouldn't be a problem, I could use the one equation for Mass transfer and bobs-your-uncle it's done. But because large parts of the system will be under laminar flow conditions during night time when there's little demand I can't do this.
Here's a screenshot from a Bentley connect help page:
Now I just need the ability to apply these two different equations, depending on flow conditions, into MSX..
Or be able to directly reference the mass transfer coefficient (as calculated by watergems) into MSX
I think there has been some confusion in this thread for which I apologize.
The first thing to note is that the UDX route won't work, not because there is anything wrong with UDX (it's a cool feature), but because there is no way (currently) to plug in UDX fields into the input side of an MSX calculation. (It is possible to do that kind of thing for regular calculations with some programming knowledge, but that is outside the scope of this thread).
So to re-iterate, it is definitely possible to do what you want using the TERMS feature of MSX just as I initially stated. I think I understand now that what you were missing is not that the terms can be defined as a function of Reynold's number (and other pre-defined variables), but how to apply different behaviors based on different value ranges of Reynolds Number (i.e., different flow regimes). It wasn't clear to me that this was the stumbling block based on the way I was reading your responses.
The key to the application of different formulae to different value ranges of Reynolds Number, or indeed different value ranges of any different kind of variable is the STEP(x) function in MSX. An example of its usage is given on page 62 of the EPANET MSX 1.1 user manual, and it is described on page 63. If you think about it, a tool like MSX wouldn't have much value if this type of thing was not possible, since it would completely prevent the type of situation you are trying to model from being modeled.
The step function works as follows (example only; this is not implementing the actual mass transfer coefficient equations you want, just demonstrating the general mechanism by which it can be achieved using MSX).
Let's say that you had 3 flow regimes that you were interested in.
1: Re <= 1.0e52: 1.0e5 < Re <= 1.0e73: Re > 1.0e7
You could apply different sets of reaction equations subject to these three regimes.
First to capture the different flow regimes, you could define new TERMS as follows.
[TERMS]FR1 STEP(1.0e5 - Re) ; Re <= 1.0e5FR2 STEP(1.0e7 - Re) * (1 - FR1) ; Re <= 1.0e7FR3 STEP(1.0e9 - Re) * (1 - FR2) ; Re <= 1.0e9FR1M FR1FR2M FR2 * 10FR3M FR3 * 25
The first three terms (FR1, FR2, and FR3) are the flow regimes. These terms evaluate to 1 or 0 depending on whether the pipe flow is within the defined range of Reynolds Number. These could be used directly to "turn on" (or off) various parts of a decay equation thus enabling the ability to define reaction rates that involve different equations for different flow regimes.
The second three terms (FR1M, FR2M and FR3M) are simply terms (multipliers) that I created to demonstrate that the previous three terms work as expected. We will see how this works in a moment.
Then to implement the regimes in the equations you simply write equations that leverage the previous terms. (In my example the FR1M, FR2M and FR3M terms; in your case the FR1 FR2 and FR3 terms).
[PIPES];Free chlorine decayRATE CL2 FR1M*(-Ks20*TC*Cs*CL2-Kf20*TC*Cf*CL2-Km20*TC*Cm*CL2) + FR2M*(-Ks20*TC*Cs*CL2-Kf20*TC*Cf*CL2-Km20*TC*Cm*CL2)+ FR3M*(-Ks20*TC*Cs*CL2-Kf20*TC*Cf*CL2-Km20*TC*Cm*CL2)
What I am doing above in my example is modifying the CL2 decay rate for pipes subject to the flow regime. The equation above, simplified is:
RATE CL2 FR1M*Const + FR2M*Const + FR3M*Const, where Const is the result of all the terms that define the decay rate.
(In my example I am using the same equation for each multiplier and increasing the decay rate by a factor, but in your case you would likely stick to multipliers of 0 and 1 (FR1, FR2, FR3) to turn on/off parts of the decay rate equation that do not apply to the specific flow regime).
In my example, and referring to the simplified form of the equation, the outcomes are that:
...if the flow regime is such that Re < 1.0e5, then the decay rate is 1*Const....if the flow regime is such that Re > 1.0e5 and Re <= 1.0e7 then the decay rate is 10*Const...if the flow regime is such that Re > 1.0e7 and Re <= 1.0e9 then the decay rate is 25*Const
In other words, the higher the value of Re (subject to the stepwise evaluation within the defined ranges), the higher the decay rate.
I know this is not the specific equations you want to implement, but it's illustrating the underlying mechanism by which you, or anyone else, can do it, subject to an arbitrary number of different ranges in Reynolds number (or any other variable or term), and making it easy to clearly demonstrate that it works (by exaggerating the effects).
When I run the above equations in a model that uses the following combinations of multipliers...
... it is easy to see that the decay in the modeled system in my test model does vary depending on the defined factors, and thus varies depending on the decay function applied for the specific flow regime under consideration. In other words the evaluation of the step function is working as intended.
Given that MSX provides the ability for users to flexibly define their own constants, calculated terms and equations I am sure that the above is just one or many ways to approach this use case.
The only thing left to do is for you to write the actual equations you wish to use and apply them to the ranges of Reynolds number that you deem relevant to your system. If you run into any issue where you cannot access information that you need to define a specific equation, then please feel free to post again.
I hope this helps.
Answer Verified By: Ryan Catling