Sunday, December 26, 2010

What is Link Bypass in SWMM 5?

Subject: What is Link Bypass in SWMM 5?
If a link has converged within two iterations then the hydraulic computations will be bypassed for new iterations. A link is deemed converged if BOTH the upstream and downstream nodes depth has converged between successive iterations as long as two iterations have occurred during the time step. This is simulation savings step as it my eliminate up to 75 percent of the computational time in a SWMM 5 simulation. The image below shows that for some links the flow in the link is converged within 2 iterations whereas for others it may take 3 or 4 iterations. Overall, 37 percent of the link computations are bypassed during the simulation of this particular hydraulic network.

Time Step Critical Elements in SWMM 5

Subject: Time Step Critical Elements in SWMM 5

The time step critical elements in the SWMM 5 report text output file tells you which elements were controlling the time step during the simulation. If no element was controlling the time step then the program will just use the maximum time step. For example, if the maximum time step was 10 seconds and the average time step was 9.8 then only a few time steps were set by a link or node that needed a smaller than maximum time step (Figure 1). If the maximum time step for the same simulation was 30 seconds then many links and nodes will set the time step (Figure 2).

Figure 1. Most of the time the simulation used the maximum time step of 10 seconds so only a few links were time step critical.
Figure 2. Most of the time the simulation used less than the maximum time step of 30 seconds so many links were time step critical.

Pump Power Usage in SWMM 5



Subject: Pump Power Usage in SWMM 5


The pumping summary table (Figure 1) includes a column that tells the user how much power was consumed by the pump in kilowatts by the head loss or head gain of the water flowing through the pump. The power usage equations are shown in Figure 2.

Figure 1. Pump Summary Table in SWMM 5.0.021




Figure 2. Pump Power Equations in SWMM in which dt is the time step.

Friday, December 24, 2010

Non Linear Term in the Saint Venant Equation of SWMM 5

Non Linear Term in the Saint Venant Equation of SWMM 5The flow equation has six components that have to be in balance at each time step:
1. The unsteady flow term or dQ/dt
2. The friction loss term (normally based on Manning's equation except for full force mains),
3. The bed slope term or dz/dx
4. The water surface slope term or dy/dx,
5. The non linear term or d(Q^2/A)/dx and
6. The entrance, exit and other loss terms.

All of these terms have to add up to zero at each time step. If the water surface slope becomes zero or negative then the only way the equation can be balanced is for the flow to decrease. If the spike is due to a change in the downstream head versus the upstream head then typically you will a dip in the flow graph as the water surface slope term becomes flat or negative, followed by a rise in the flow as the upstream head increases versus the downstream head.
You get more than the normal flow based on the head difference because in addition to the head difference you also get a push from the non linear terms or dq3 and dq4 in this graph.

If you use the Keep Inertial term option then you use all 5 terms at all times, if you use the Dampen option you use all five terms until the Froude number of the link greater than 1 and then you do not use terms dq3 and dq4, if you use the Ignore option then the dq3 and dq4 terms are not used at all for the calculation of the flow in the link.

Wednesday, December 22, 2010

The number of Hydraulic Iterations in Various Versions of SWMM 5


Subject: The number of Hydraulic Iterations in Various Versions of SWMM 5.

The maximum number of iterations was 4 before SWMM 5.0.021 and 8 iterations after SWMM 5.0.021. In InfoSWMM and H2OMAP SWMM you can have a a minimum of 2 iterations or a maximum of 8 iterations for compatibility to SWMM 5 and backwards compatibly with your earlier InfoSWMM models.

.

Time Step Selection in SWMM 5

Subject: Time Step Selection in SWMM 5
1st The time step you use in SWMM 5 is controlled from the top by the rainfall interval (Figure 1):
1. All of your time steps should be less than the rainfall interval,
2. The hydrology time step should be less than or equal to the smallest raingage rainfall interval in your network,
3. The hydraulic time step should be less than or equal to the hydrology time step and should be based on the hydraulic needs of the your network. Short length links, pump and weirs may require a smaller maximum hydraulic time step.
2nd The report time step controls what you see in the graphics output of SWMM 5. If you see a large difference between that you see in the graphics output and the report text file it is because you have a large difference between the report time step and the average time step used during the simulation.
Solution: If there is a large discrepancy in the graphics and report text file then the best solution is to reduce the maximum time hydraulic time step so it is closer to the average time step and also to make the report time step closer to the Maximum time step (Figure 2).

Figure 1: Relationship between the rainfall, hydrology and hydraulic time steps.

Figure 2: Relationship between the minimum, average and maximum simulation time steps and the report time step.

Tuesday, December 21, 2010

Pump Priorities in SWMM 5


The Startup and Shutoff depths are evaluated 1st followed by any Control Rules. The priority value is just to decide between two or more control rules that are both active at the current time step. The rule with the highest priority will be used or in the case of two rules with the same priority the last control rule evaluated will be used during the current time step.

Node Surcharge Summary in SWMM 5

In SWMM 5 (Storm Water Management Model), surcharging refers to a condition where water levels rise above the highest point, or crown, of the conduits (pipes) in the drainage network. This situation usually occurs when the system's capacity is exceeded due to high levels of stormwater or wastewater inflow.

The SWMM 5 report file (RPT file) includes a Node Surcharge Summary Table, which provides crucial details about the duration and extent of these surcharging events.

Node Surcharging:

A node is a point in the network where pipes connect. Surcharging can occur at a node in the following conditions:

  1. If the node cannot store additional water (i.e., it cannot 'pond') and the water depth at the node exceeds the crown elevation of the highest pipe connected to that node.

  2. If the node can store additional water (it can 'pond'), surcharging occurs when the water depth exceeds the crown elevation of the highest pipe connected to the node but remains below the full depth of the node.

Essentially, surcharging happens when the system cannot accommodate the excess water, leading to water levels rising above the pipe's topmost part but not yet reaching the full depth of the node.

Node Flooding:

Node flooding is a more extreme event that occurs when the water surface level reaches or surpasses the rim elevation of the node. This situation means that the water is spilling out of the system, potentially leading to surface flooding.

Node Surcharge Summary Table (Figure 1)

This table in the RPT file presents a summary of the surcharging events at each node, including the duration of surcharging.

Definition of Surcharging at a Node (Figure 2)

This figure would typically show a diagram or explanation illustrating the conditions under which a node is considered to be surcharging, visually demonstrating the situations described above.

Definition of the Height above Crown and Depth below Rim (Figure 3)

This figure would likely provide definitions or illustrations explaining the 'Height above Crown' and 'Depth below Rim' columns in the Node Surcharge Summary Table. 'Height above Crown' refers to how much higher the water level is compared to the crown of the highest pipe, while 'Depth below Rim' refers to the difference between the water level and the full depth of the node.

These details allow engineers to understand the behavior of the drainage system under various flow conditions and inform necessary adjustments or improvements to manage stormwater effectively.

Monday, December 20, 2010

Swamee and Jain approximation to the Colebrook-White equation in SWMM 5

Note: There is a function called ForceMain in SWMM5/InfoSWMM whose purpose is to compute the Darcy-Weisbach friction factor for a force main using the Swamee and Jain approximation to the Colebrook-White equation.
f = forcemain_getFricFactor(xsect.rBot, d/4.0, 1.0e12);
return sqrt(f/185.0) * pow(d, (1./6.));
double forcemain_getFricFactor(double e, double hrad, double re)
//// Input: e = roughness height (ft)
// hrad = hydraulic radius (ft)
// re = Reynolds number
// Output: returns a Darcy-Weisbach friction factor
// Purpose: computes the Darcy-Weisbach friction factor for a force main
// using the Swamee and Jain approximation to the Colebrook-White equation.
{ double f;
if ( re < 10.0 ) re = 10.0;
if ( re <= 2000.0 ) f = 64.0 / re;
else if ( re < 4000.0 )
{ f = forcemain_getFricFactor(e, hrad, 4000.0);
f = 0.032 + (f - 0.032) * ( re - 2000.0) / 2000.0; }
else { f = e/3.7/(4.0*hrad);
if ( re < 1.0e10 ) f += 5.74/pow(re, 0.9);
f = log10(f);
f = 0.25 / f / f; }
return f;}

From http://en.wikipedia.org/wiki/Darcy_friction_factor_formulae
http://www.swmm2000.com/profiles/blogs/swamee-and-jain-approximation

Saturday, December 18, 2010

Link Surcharging Definitions in SWMM 5

Subject: Link Surcharging Definitions in SWMM 5

The report or RPT text output file of SWMM 5 contains a table that lists the Surcharged Conduits during the simulation (Figure 1).
The 5 columns in the table are:
  1. Hours Both Ends Surcharged
  2. Hours Upstream End Surcharged
  3. Hours Downstream End Surcharged
  4. Hours Above Full Normal Flow
  5. Hours Capacity Limited
.the five columns are defined in Figure 2. Notice that if the midpoint of the link is full then the link and both end of the link are considered to be surcharged. If the midpoint is NOT full then the cross sectional area of the ends of the link determine wheter the ends of the link are considered surcharged. The end of a link can be considered surcharged based on either the depth at the midpoint or the cross sectional area at the end of the link.

Figure 1: The SWMM 5 Conduit Surcharge Table

Figure 2: The SWMM 5 Conduit Surcharge Table Definitions, the numbers in the 3rd column correspond to the columns in the Conduit Surcharge Table.

PID Control in SWMM 5 for an Orifice

Click here to download:
extran_pid_3_master.inp (47 KB)

Subject: PID Control in SWMM 5 for an Orifice

The blog http://swmm5.blogspot.com/2010/12/pid-control-in-swmm-5-for-type-3-pump.htmldescribes the Function getPIDSetting which returns the PID setting at each time step. The PID parameter set contains three values -- a proportional gain coefficient, an integral time (in minutes), and a derivative time (in minutes) which are kp, ki and kd, respectively. More about the theory of PID controllers can be found at http://en.wikipedia.org/wiki/PID_controller.

Here is an example PID Rule that will keep the node depth at 5 feet in a SWMM 5 model by changing the Orifice Setting. The Orifice setting opens and closes the orifice over time. The example file is attached in this blog. In this particular example, you can reduce the oscillations about the 5 foot rule level by lowering the integral time and derivative time coefficients in the PID control rule. An important note is that for Weirs and Orifices the setting is bounded to be between 0 and 1. If the Orifice or Weir cannot handle the upstream node inflow then the PID control will not be able to meet the depth goal in the node. For example, in the example file, an orifice depth of 2 feet is not enough to meet the upstream node depth goal of 5 feet but a 3 foot orifice is large enough for the PID control to meet its stated goal of 5 feet. The PID control will only work if the link doing the controller has enough flow and depth flexibility.

RULE PID_Orifice
; the PID controller adjusts the orifice opening to have a
; depth of 3 feet in Node 82309b
IF NODE 82309b DEPTH <> 5
THEN ORIFICE OR1@82309b-15009b SETTING = PID 10 -0.01 -0.01
; kp ki kd
PRIORITY 1


PID Control in SWMM 5 for a Weir

Subject: PID Control in SWMM 5 for a Weir
The blog http://swmm5.blogspot.com/2010/12/pid-control-in-swmm-5-for-type-3-pump.html describes theFunction getPIDSetting which returns the PID setting at each time step. The PID parameter set contains three values -- a proportional gain coefficient, an integral time (in minutes), and a derivative time (in minutes) which are kp, ki and kd, respectively. More about the theory of PID controllers can be found at http://en.wikipedia.org/wiki/PID_controller.
Here is an example PID Rule that will keep the node depth at 3 feet in a SWMM 5 model by changing the Weir Setting. The example file is attached in this blog. In this particular example, you can reduce the oscillations about the 3 foot rule level by lowering the integral time and derivative time coefficients in the PID control rule.
RULE PID_Weir
; the PID controller adjusts the weir height to have a
; depth of 3 feet in Node 82309e
IF NODE 82309c DEPTH <> 3
THEN WEIR WEIR1@82309c-15009c SETTING = PID 10 -.01 -.01
; kp ki kd
PRIORITY 1


PID Control in SWMM 5 for a Type 3 Pump

Subject: PID Control in SWMM 5 for a Type 3 Pump
Figure 2 shows the code in Function getPIDSetting which returns the PID setting at each time step. The PID parameter set defines the degree of control. The PID parameter set contains three values -- a proportional gain coefficient, an integral time (in minutes), and a derivative time (in minutes) which are kp, ki and kd, respectively. More about the theory of PID controllers can be found at http://en.wikipedia.org/wiki/PID_controllerand shown in Figure 3.
Here is an example PID Rule that will keep the node depth at 3 feet in a SWMM 5 model.
RULE PID1
; the PID controller adjusts the flow in the pump to have a
; depth of 3 feet in Node 82309e
IF NODE 82309e DEPTH <> 3
THEN PUMP PUMP1@82309e-15009e SETTING = PID 10 -1 -1
; kp ki kd
PRIORITY 1



Figure 1: SWMM 5.0.021 Simulation Results

Figure 2: Source code for getPIDSetting in SWMM 5.0.021

Figure 3: Image source for the Block Diagram of a PID Controller Pid-feedback-nct-int-correct.png

Wednesday, December 15, 2010

Total Surcharge Time vs Total Time Above Rim Elevation in InfoSWMM

Subject: Total Time Above Rim Elevation at a Node
1. Total Surcharge Time is the total time above the crown of the highest connecting pipe to a node.
2. Total Time Above Rim Elevation – this is the flooding time of the node and it includes flood time as well as ponding time. You can find this in the Junction Summary Report of InfoSWMM under the column Total Flood Time. The Total Flood Time is less than the Total Surcharge Time as the depth in the Node is higher.
  1. A node is flooded if the node depth equals the node rim elevation – the flooded time is the total time excess flow coming out the top of the manhole,
  2. A node is flooded if the node depth is above the rim elevation and you are using the Surface Ponding Option – the flooded time is the ponding time
  3. A node is flooded if the node depth equals the node surchage elevation – the flooded time is the total time excess flow coming out the top of the surcharged manhole.

Monday, December 13, 2010

IBM helps the City of Corpus Christi get smarter

IBM helps the City of Corpus Christi get smarter

IBM’s Guru Banavar discusses how Corpus Christi is getting smarter by tracking the city’s assets. In order to keep the citizens happy, you have to manage the city’s assets.


Wellington E Webb, the former mayor of Denver, Colorado, once said: “The 19th century was a century of empires, the 20th century was a century of nation states. The 21st century will be a century of cities.”

...

That’s why the cities need to be smarter. And to do this, each part of the infrastructure needs to be more intelligent. This means the cities need to start collecting data on everything including streets, bridges, parks, buildings, fire hydrants, water mains and storm water ditches. Link Here

Saturday, December 11, 2010

Calibration Concepts from Serendipity

From the blog Serendipity as useful discussion on calibration

..ask what is the purpose of a climate model. The second half of the George Box quote is “…but some models are useful”. Climate models are tools that allow scientists to explore their current understanding of climate processes, to build and test theories, and to explore the consequences of those theories. In other words we’re dealing with three distinct systems:

We're dealing with relationships between three different systems
There does not need to be any clear relationship between the calculational system and the observational system – I didn’t include such a relationship in my diagram. For example, climate models can be run in configurations that don’t match the real world at all: e.g. a waterworld with no landmasses, or a world in which interesting things are varied: the tilt of the pole, the composition of the atmosphere, etc. These models are useful, and the experiments performed with them may be perfectly valid, even though they differ deliberately from the observational system.

What really matters is the relationship between the theoretical system and the observational system: in other words, how well does our current understanding (i.e. our theories) of climate explain the available observations (and of course the inverse: what additional observations might we make to help test our theories). When we ask questions about likely future climate changes, we’re not asking this question of the the calculational system, we’re asking it of the theoretical system; the models are just a convenient way of probing the theory to provide answers.

By the way, when I use the term theory, I mean it in exactly the way it’s used in throughout all sciences: a theory is the best current explanation of a given set of phenomena. The word “theory” doesn’t mean knowledge that is somehow more tentative than other forms of knowledge; a theory is actually the kind of knowledge that has the strongest epistemological basis of any kind of knowledge, because it is supported by the available evidence, and best explains that evidence. A theory might not be capable of providing quantitative predictions (but it’s good when it does), but it must have explanatory power.


I redid the above graphic in Powerpoint

In terms of SWMM 5 and other models let me paraphrase the above:
We're dealing with relationships between three different systems
There does not need to be any clear relationship between the calculational system and the observational system – I didn’t include such a relationship in my diagram. For example, hydrology/hydraulic models can be run in configurations that don’t match the real world at all: e.g. a watershed without detail or simple assumptions, or a watershed in which interesting things are varied: the modeling detail for catchment complexity, slope, overland path length, impervious connections, soil and infiltration detail and methodology. You can also leave out important components such as ground water and water quality. These models are useful, and the experiments performed with them may be perfectly valid, even though they differ deliberately from the observational system.
What really matters is the relationship between the theoretical system and the observational system: in other words, how well does our current understanding (i.e. our theories) of hydrology/hydraulics explain the available observations (and of course the inverse: what additional observations might we make to help test our theories). When we ask questions about likely future watershed changes, we’re not asking this question of the the calculational system, we’re asking it of the theoretical system; the models are just a convenient way of probing the theory to provide answers.

Wednesday, December 8, 2010

How to Decide on a Time Step in InfoSWMM

Note: How to Decide on a Time Step in InfoSWMM

Step 1: Your first guess was 300 seconds which had a very large continuity and unstable links. If you look at the your average time step a good time step would be 10 seconds based on your average time step of 2.6 seconds.


Step 2: Run your model with a time step of 10 seconds and check the flows and the continuity error. In this case by using a maximum time step near the average time step you got rid of the continuity error and the unstable link flows.


Tuesday, December 7, 2010

Export from WeatherUnderground using the CSV File Export Option to InfoSWMM

Note: Export from WeatherUnderground using the CSV File Export Option to InfoSWMM
Weather Underground is a site that provides excellent local weather information in the form of graphs, tables and csv files. You can use the data very easily in InfoSWMM by copying from Excel to a time series in InfoSWMM. Here is the rainfall for a storm event in Tampa, Florida in September 11, 2010
Step 1: Export from WeatherUnderground using the CSV File Export Option

Step 2: The data imported from the csv file to Excel and after the text to columns tool is used looks like this in Excel. The data is now ready to be imported into InfoSWMM after the time column is adjusted to fall on even 5 minute intervals. In Excel you can use the formula @ROUND((B2)/"0:05:00",0)*"0:05:00" to round all of the time values to 5 minutes. If you do not do this step then you will have problems in InfoSWMM due to the rainfall interval not being equal to the defined raingage interval.


Step 3: You will need to format the new rounded time as a time format for import into a InfoSWMM time series. The time series is created in the operation tab of the attribute browser.


Step 4: Open up and make a new time series in InfoSWMM.


Step 5: Copy and then paste the date, rounded time column and rainfall column into the InfoSWMM time series columns.


Step 6: Make a raingage in the DB Table in InfoSWMM that will use the time series you just made. In the case of the Weather Underground data we will use inches, intensity, a rainfall interval of 5 minutes, time series and the name of the time series. SCF should be 1 for Snow conversion and do not need to include a Filename or Station name as we are not using an external file.

Flow Units In InfoSWMM may be different then the Output Link Flow Units

Note: Flow Units In InfoSWMM may be different then the Output Link Flow Units
The flows units selected in Run Manager determines the flow units of all incoming units including DWF, Inflow Time Series and other features in pump curves and other curves. The output unit manager determines what you see when you make a graph of the link flow. For example, you can have dry weather inflow of CFS and output units of GPM or MGD if you so request and set the correct flags in the interface.

Hysteresis Effect in the Link Flow versus Depth Relationship in SWMM 5

Subject: Hysteresis Effect in the Link Flow versus Depth Relationship in SWMM 5
You can often get a hysteresis effect for the Flow versus Depth relationship in SWMM 5 due to the five component St. Venant equation used to simulate the flows (http://swmm5.blogspot.com/2010/12/what-are-units-for-five-st-venant-flow.html) . A hysteresis effect is having two or more flow values for the same depth value in the link. For example, this image shows how the link 8100 has a different flow for the same depth in the rising and falling limb’s of the hydrograph. This is due to the different values for the upstream and downstream head, hydraulic radius and cross sectional area during the falling and rising hydrograph, respectively.

Monday, December 6, 2010

How is RHO computed for a Link in SWMM 5?

Subject: How is RHO computed for a Link in SWMM 5?
SWMM 5 uses a sliding metric to calculate the cross sectional area and hydraulic radius used in the simulation for the link dynamic flow. The area and hydraulic radius used moves from the Upstream End of the Link to the Midpoint of the Link based on the Froude number and a few other considerations (see Figure 1 for the other considerations).
The area and hydraulic radius used as a function of the Froude Number:
1. Upstream cross sectional area and upstream hydraulic radius is used when the Froude Number > 1
2. Midpoint sectional area and hydraulic radius is used then the Froude Number is < 0.5
3. An area and hydraulic radius between the upstream and midpoint sections is used then the Froude Number is between 0.5 and 1

Figure 1: How to compute RHO based on the Froude Number.

Figure 2: The computed value of the Froude Number and the value of RHO over time.

Figure 3: Relationship between the upstream area, midpoint area and the actual area used during the simulation.

Sunday, December 5, 2010

What are the Units for the five St. Venant Flow Terms in SWMM 5 and InfoSWMM?

Subject: What are the Units for the five St. Venant Flow Terms in SWMM 5 and InfoSWMM?

This is how the flow is calculated in a link in InfoSWMM.  It uses the
 ·         Upstream and downstream head,
·         The user input length,
·         The weighted cross sectional area and hydraulic radius as I explained in the previous email,
·         The Center velocity,
·         The Center Cross sectional area, and
·         The Upstream and Downstream Cross sectional area.

The slope as listed in the output file is more for reference and is actually not used in the St. Venant Solution.   The way the program usually works is that the friction slope lags the water surface head slope with the difference made up by the change in flow.  The two non linear terms are usually small and only affect the flow during reverse or backwater events.

The new flow (Q) calculated at during each iteration of time step as

(1)Q for the new iteration = (Q at the Old Time Step – DQ2 + DQ3 + DQ4 ) / ( 1.0 + DQ1 + DQ5)
In which DQ2, DQ3 and DQ4 all have units of flow (note internally SWMM 5 has units of CFS and the flows are converted to the user units in the output file, graphs and tables of SWMM 5).

The equations and units for DQ2, DQ3 and DQ4 are:

(2)Units of DQ2 = DT * GRAVITY * aWtd * ( H2 – H1) / Length = second * feet/second^2 * feet^2 * feet / feet = feet^3/second = CFS

(3)Units of DQ3 = 2 * Velocity * ( aMid – aOld) * Sigma = feet/second * feet^2 = feet^3/second = CFS

(4)Units of DQ4 = DT * Velocity * Velocity * ( aDownstream – aUpstream) * Sigma / Length = second * feet/second * feet/second * feet^2 / feet = feet^3/second = CFS


The equations and units for DQ1 and DQ5 are:

(5)Units of DQ1 = DT * GRAVITY * (n/PHI)^2 * Velocity / Hydraulic Radius^1.333 = second * feet/second^2 * second^2 * feet^1/3 * feet/second / feet^1.33 = Dimensionless

(6)Units of DQ5 = K * Q / Area / 2 / Length * DT = feet^3/second * 1/feet^2 * 1/feet * second = Dimensionless

The five components calculated at the each time step and at each iteration during a time step and together predict the new Link Flow (Q) in SWMM 5. The value of the different components can be seen over time in Figure 1 and as a component percentage in Figure 2 and 3.

Figure 1: The Five St. Venant Components over time.


Figure 2: The relative magnitude of the St Venant terms over time for the same for the same link as in Figure 1.

Figure 3: The relative magnitude of the St Venant terms over time for the same for the same link as in Figure 1 shown in an area chart normalized to 100 percent. Normally the DQ1 and DQ2 terms balance each other except for backwater conditions or reverse flow in which the terms DQ3 and DQ4 can dominate.

Thursday, December 2, 2010

Rain Gardens Are Sprouting Up Everywhere - Science Daily

Rain Gardens Are Sprouting Up Everywhere

ScienceDaily (Dec. 1, 2010) — Rain gardens are increasingly popular with homeowners and municipalities and are mandatory for many communities nationally. U.S. Department of Agriculture (USDA) scientists are finding ways to improve rain gardens so they not only reduce runoff, but also keep toxic metals out of storm drains.


ARS hydrologist Douglas Boyer (right) and Beckley Sanitary Board operations manager Jeremiah Johnson discuss the performance of a rain garden constructed from local materials. The rain garden is being tested for its ability to reduce storm water runoff, increase infiltration, and remove excess nutrients and other pollutants from the runoff water before it gets to streams or other bodies of water. (Credit: Photo by Stephen Ausmus)
More Here http://www.sciencedaily.com/releases/2010/12/101201151908.htm

AI Rivers of Wisdom about ICM SWMM

Here's the text "Rivers of Wisdom" formatted with one sentence per line: [Verse 1] 🌊 Beneath the ancient oak, where shadows p...