The solution of the water surface elevation at all cross sections, storage areas, and 2D Flow Area cells follows this computational procedure:

  1. The solver makes an initial trial at the water surface, flows, derivatives etc… The unsteady flow equations are solved in the implicit finite difference matrix solver (we use a solver called the Skyline Matrix solver) for the 1D nodes. A 2D implicit finite volume solution algorithm is used for the 2D flow areas (See the 2D Theory section).
  2. All computational nodes (cross sections, storage areas, and now 2D cells) are checked to see if the computed water surface minus the previous values are less than the numerical solution tolerance.
  3. If the error is less than the numerical solution tolerance, then it is finished for that time step; it uses those answers as the correct solution for the time step, and moves on to the next time step.
  4. If the numerical error is greater than the tolerance at any node, it iterates, meaning it makes a new estimate of all the derivatives and solves the equations again.
  5. During the iteration process, if it comes up with a solution in which the numerical error is less than the tolerance at all locations, it is done and it uses that iteration as the correct answers, and goes on to the next time step.
  6. During the iteration (and even first trial) process, the program saves the trial with the least amount of numerical error as being the best solution so far. All water surfaces and flows are saved at all locations.
  7. Any iteration that produces a better answer, but does not meet the tolerance, is saved as the current best solution.
  8. If the solution goes to the maximum number of iterations (20 by default), then it prints out a warning. However it uses the trial/iteration that had the best answer. It also prints out the location that had the greatest amount of numerical error and the magnitude of that error.
  9. This happens even if one of the trials/iterations causes the matrix to go completely unstable. It still does this process and often can find a trial that is not unstable, but does not produce an error less than the numerical tolerance, so it goes with that iteration and moves on.