[docs]
class ZeroDimensional:
"""
Classe de Qualidade da Água em Reservatórios - Modelo 0D
Zero-Dimensional
"""
def __init__(self, volume, Qin, Qout, Cin, As, k, v, timestep):
"""
Initializes the ZeroD class.
Args:
volume (float): The volume of the system.
Qin (float): The inflow rate.
Qout (float): The outflow rate.
Cin (float): The concentration of the inflow.
As (float): The surface area of the system.
k (float): The reaction rate constant.
v (float): The reaction volume.
timestep (float): The time step for simulation.
"""
self.Input = ZeroDimensional.Input(volume, Qin, Qout, Cin, As)
self.SimCount = len(self.Input.Volume)
self.Output = ZeroDimensional.Output(self.SimCount)
self.Params = ZeroDimensional.Params(k, v)
self.Timestep = timestep
[docs]
class Output:
"""
Represents the output of a calculation.
Attributes:
ConcentrationOut (list): A list of concentration values.
"""
def __init__(self, size):
self.ConcentrationOut = [0 for _ in range(size)]
[docs]
class Params:
"""
Parameters of the 0D model
Reaction Coefficient - k
Settling Velocity - v
"""
def __init__(self, k, v):
self.ReactionCoefficient = k
self.SettlingVelocity = v
[docs]
def RunModel(self):
_in = self.Input
_out = self.Output
_param = self.Params
dt = self.Timestep
_out.ConcentrationOut[0] = 0
for i in range(1, self.SimCount):
_out.ConcentrationOut[i] = (
_out.ConcentrationOut[i - 1]
+ dt / _in.Volume[i] * _in.Inflow[i] * _in.ConcentrationIn[i]
) / (
1
+ dt
/ _in.Volume[i]
* (
_in.Outflow[i]
+ _param.ReactionCoefficient[i] * _in.Volume[i]
+ _param.SettlingVelocity[i] * _in.ContactArea[i]
+ (_in.Volume[i] - _in.Volume[i - 1]) / dt
)
)