Post 2014 Blogs

You need to be a member of SWMM 5 or SWMM or EPASWMM - (not formally associated with EPA) to add comments!

Join SWMM 5 or SWMM or EPASWMM - (not formally associated with EPA)

Comments

  • SWMM 5.1 Update History
    =======================
    Engine Updates, more information and code shown on the EPA Website:
    1.   A new feature that provides monthly adjustments for
         temperature, evaporation rate, and rainfall was added.

    2.   Support for reading the new GHCN-Daily climate data
         files available from NCDC's Climate Data Online service
         was added.
    3.   In addition to lateral groundwater flow, a custom
         equation can now also be used for seepage flow to
         a deeper groundwater aquifer.

    4.   The [GW_FLOW] section of the project file was renamed
         to [GWF] and its format was changed to accommodate
         both lateral and deep groundwater flow equations.
    5.   A new Weir parameter was added that specifies if the
         weir can surcharge using an orifice equation or not.
         Surcharging was the only option in SWMM 5.0 but was
         switched to no surcharging in earlier 5.1 releases.
         This new parameter accommodates both closed top weirs
         that can surcharge and open channel weirs that cannot.

    6.   The formula used to recover infiltration capacity during
         dry periods for the Modified Horton method was revised.
    7.   The initial cumulative infiltration into the upper soil
         zone for Green-Ampt infiltration had been incorrectly
         set to the maximum value instead of zero.
    8.   All of the Green-Ampt infiltration functions were
         re-factored to make the code easier to follow.
    9.   The calculation of infiltration out of the bottom of a
         Bio-Retention Cell or Permeable Pavement LID unit with a
         zero-depth storage layer was corrected.
    10.  Most of the LID simulation routines were modified to
         provide more accurate results under flooded conditions.
    11.  Results written to the detailed LID results report now
         always correspond to a full reporting time step.
    12.  The name of the variable used to represent the height of
         the receiving channel bottom in a user-defined groundwater
         flow equation was corrected to match the name displayed
         in the GUI's Groundwater Editor dialog (Hcb).
    13.  A problem with the program crashing when a climate file
         was used to provide evaporation rates for open channels
         and storage nodes when runoff was not computed (as when
         there were no subcatchments in the project) was fixed.
    14.  Flow and pollutant routing mass balance accounting was
         modified to correctly handle negative external inflows.
    15.  The procedure for computing the area available for seepage
         out of a storage node that has a tabular storage curve was
         corrected.
    16.  Seepage from storage units can now be modeled using Green-
         Ampt infiltration, which makes the seepage rate a function
         of storage level. The constant seepage rate option can
         still be used by setting the G-A initial moisture deficit
         to 0.

    17.  The function that finds depth as a function of volume from
         a storage curve was corrected for the case where the depth
         falls within a portion of the curve where area is constant
         with depth (i.e., vertical side walls).
    GUI Updates:
    1.   The Object Toolbar was restored.

    2.   A new page was added to the Climatology Editor to edit
         values for monthly adjustments for temperature, evaporation,
         and rainfall.
    3.   A field for the new weir surcharge option was added to the
         Weir Property editor.
    4.   A problem with the current project being closed without
         asking if it should be saved first whenever a new style
         theme was selected from the Program Preferences dialog
         has been fixed.
    5.   The default seepage rate from an LID storage layer was changed.
    6.   The Infiltration Editor was restored for editing Green-Ampt
         parameters for storage unit seepage loss.
    7.   The Groundwater Flow Equation Editor was extended to accept

         equations for deep groundwater flow.
     
    History of EPA SWMM versions (from Wikipedia)
     
     
    • This is for Students who want to make their own customized version of the SWMM5 GUI Interface. You can use the Embarcadero Starter Version for XE2 to XE7.  Here are the main files you download from the EPA There may be a problem with teechart and the starter version - see the note here http://docwiki.embarcadero.com/RADStudio/XE7/en/FireMonkey_and_TeeC...




      CONTENTS OF SWMM5.1.007_GUI.ZIP
      =============================


      Note from the EPA: This archive contains source code for the Windows graphical user interface portion of Version 5.1.007 of the Storm Water Management Model (SWMM). The interface was written using Embarcadero's Delphi XE2 (www.embarcadero.com). The name of the Delphi project containing the code is Epaswmm5. All of the files for the project can be found in the GUI5_1_007.ZIP file within this archive.


      Before the Epaswmm5 project can be loaded into Delphi's Integrated Development Environment (IDE), several special components must be installed into the IDE's component pallette. The source code for these components is contained in the COMPONENTS.ZIP file in this archive. Consult the Delphi Users Guide for instructions on how to install these components. 


      My note:  The Delphi Starter versions for XE2 to XE7 also can create a customized SWMM5.1 GUI.  You can by the Embarcadero Starter Version for $209 USD.  As explained in the readme from the EPA Site, Delphi uses the Delphi Interface (Bullet 1), the F(form files), D(dialog files), U(Utility files), Txt (Interface Rules) as shown in Bullet 2 and Components that work with the Forms of the Delphi Compiler (Bullet 3).  See Figure 1 below for an example. 



      Figure 1. Delphi XE7 Interface for SWMM 5.1.007
      Here is how to use the Components



      CONTENTS OF COMPONENTS.ZIP
      ==========================
      This archive contains the source code for several 32-bit Delphi
      custom components. The components and the files used to install
      them are listed below.

      -------------------------------
      OpenTxtFileDialog (OpenDlg.pas)
      -------------------------------
      Windows standard Open File dialog with a preview window for text files.

      ---------------------
      NumEdit (NumEdit.pas)
      ---------------------
      Text box control that limits entries to valid numerical values.

      -----------------------------
      PageSetupDialog (PgSetup.pas)
      -----------------------------
      Dialog control that selects a printer and page orientation, margins,
      and headers/footers.

      -----------------------------
      VirtualListBox (VirtList.pas)
      -----------------------------
      Listbox control that allows an unlimited number of items.

      ---------------------------
      PrintControl (Xprinter.pas)
      ---------------------------
      Nonvisual control that handles printing of text, tables, and graphics.
      Includes a print preview feature. Documentation is provided in the file
      Xprinter.doc.

      What do the Components look like?
      Figure 2. Delphi Components on a Form


    • This is a code note about change 52 in the newer EPA SWMM 5.1.x C code

      52. Weekday and weekend hourly time patterns for Dry Weather inflows are now correctly applied in a mutually exclusive manner.
       
       Here is the code from SWMM 5.0.022
      double inflow_getDwfInflow(TDwfInflow* inflow, int month, int day, int hour)
      //
      //  Input:   inflow = dry weather inflow data structure
      //           month = current month of year of simulation
      //           day = current day of week of simulation
      //           hour = current hour of day of simulation
      //  Output:  returns value of dry weather inflow parameter
      //  Purpose: computes dry weather inflow value at a specific point in time.
      //
      {
          int    i,                          // pattern type index
                 p;                          // pattern index
          double f = 1.0;                    // pattern factor
          for (i=0; i<4 i="" o:p="">
          {
              p = inflow->patterns[i];
              if ( p >= 0 ) f *= inflow_getPatternFactor(p, month, day, hour);       //(5.0.019 - LR)
          }

          return f * inflow->avgValue;   
       
      Here is the new 2014+ code,  which adjusts the pattern  factor based on the day of the week.
       
      double inflow_getDwfInflow(TDwfInflow* inflow, int month, int day, int hour)
      //
      //  Input:   inflow = dry weather inflow data structure
      //           month = current month of year of simulation
      //           day = current day of week of simulation
      //           hour = current hour of day of simulation
      //  Output:  returns value of dry weather inflow parameter
      //  Purpose: computes dry weather inflow value at a specific point in time.
      //
      {
          int    p1, p2;                     // pattern index
          double f = 1.0;                    // pattern factor
          p1 = inflow->patterns[MONTHLY_PATTERN];
          if ( p1 >= 0 ) f *= inflow_getPatternFactor(p1, month, day, hour);   // Pattern f value is 1 * The Monthly Factor
          p1 = inflow->patterns[DAILY_PATTERN];
          if ( p1 >= 0 ) f *= inflow_getPatternFactor(p1, month, day, hour);   // Pattern f value is last f * The Daily Factor
          p1 = inflow->patterns[HOURLY_PATTERN];
          p2 = inflow->patterns[WEEKEND_PATTERN];
          if ( p2 >= 0 )
          {
              if ( day == 0 || day == 6 )
                  f *= inflow_getPatternFactor(p2, month, day, hour); // Pattern f value is last f * The Hourly Factor for Saturday and Sunday
              else if ( p1 >= 0 )
                  f *= inflow_getPatternFactor(p1, month, day, hour); // Pattern f value is last f * The Hourly Factor Monday to Friday
          }
          else if ( p1 >= 0 ) f *= inflow_getPatternFactor(p1, month, day, hour);  // Pattern f value is last f * The Hourly Factor
          return f * inflow->avgValue;
This reply was deleted.