Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Incorrect Geometry for Custom Elliptical Pipes #144

Open
LRossman opened this issue Sep 12, 2023 · 22 comments · May be fixed by #192
Open

Incorrect Geometry for Custom Elliptical Pipes #144

LRossman opened this issue Sep 12, 2023 · 22 comments · May be fixed by #192
Assignees
Labels
Milestone

Comments

@LRossman
Copy link
Collaborator

As noted recently on the Open SWMM Knowledge Base, SWMM produces inconsistent results for custom sized elliptical pipes. The problem stems from it using incorrect equations for the pipe's full flow area and hydraulic radius that came from SWMM 4.4. A corrected set of equations, derived from Table 4 of the Concrete Pipe Design Manual (American Concrete Pipe Association, 2011) are:

A = 0.8117 * (Height * Width)
Rh = 0.2448 * sqrt(Height * Width)

with all values in feet.

These equations should replace those used in lines 572-573 and 600-601 in file xsect.c, i.e.,

    xsect->aFull = 0.8117 * xsect->yFull * xsect->wMax;
    xsect->rFull = 0.2448 * sqrt(xsect->yFull * xsect->wMax);
@dickinsonre
Copy link

The mentioned code from the 2004 version of SWMM4 (OSU version)

C=======================================================================
CIM START <><><><><><><><><>
CIM THE FOLLOWING HOLD TRUE FOR INPUT ONLY, ARE MODIFIED
CIM TO INTERNAL NUMBERING SCHEME AT END OF INDAT1 SUBROUTINE
CIM Note: In revised internal numbering scheme,
cim o Conduit types 1 through 20 are reserved
cim for closed conduit types that use TWNORM, ANORM, and
cim HRNORM ARRAYS
cim o Conduit types 21 through 50 are special types including
cim rectangular pipes (22), and also includes parabolic and
cim irregular sections (24) that use QCURVE arrays.
cimbridge Now includes bridges type 25
cim o Conduit types 51 through 60 are reserved for equivalent
cim orifice types.
CIM
CIM NKLASS TYPE NEWKLASS
C 1 CIRCULAR PIPE
NEWKLASS(1)=1
C 2 RECTANGULAR PIPE
NEWKLASS(2)=21
C 3 HORSESHOE PIPE
NEWKLASS(3)=2
C 4 EGGSHAPED PIPE
NEWKLASS(4)=3
C 5 BASKETHANDLE PIPE
NEWKLASS(5)=4
C 6 TRAPEZOIDAL CHANNEL
NEWKLASS(6)=22
C 7 PARABOLIC CROSS-SECTION OR POWER
C FUNCTION CROSS SECTION
NEWKLASS(7)=23
C 8 IRREGULAR CROSS-SECTION
NEWKLASS(8)=24
C 9 HORIZONTAL ELLIPSE
C (LONG AXIS IS HORIZONTAL)
NEWKLASS(9)=5
C 10 VERTICAL ELLIPSE
NEWKLASS(10)=6
C 11 ARCH
NEWKLASS(11)=7
C 12 BRIDGE (TO BE IMPLEMENTED)
NEWKLASS(12)=25
CIM OOOOOOOOO
CIM THESE ARE OLD ASSIGNMENTS AND NEW ASSIGNMENTS FOR ORIFICE
CIM EQUIVALENT PIPES
C 9 SIDE OUTLET CIRCULAR ORIFICE 51
C 10 BOTTOM OUTLET CIRCULAR ORIFICE 52
C 11 SIDE OUTLET RECTANGULAR ORIFICE 53
C 12 BOTTOM OUTLET RECTANGULAR ORIFICE 54
CIM OOOOOOOOOO
CIM END <><><><><><><><><><><><>
C=======================================================================
KLASS = NKLASS(N)
CIM START <><><><><><><><>
CIM IF(KLASS.EQ.1.OR.KLASS.GE.9) THEN
CIM 9 WAS ORIFICE, DON'T KNOW DATA YET
c change this to select case
SELECT CASE (KLASS)
CASE (1)
CIM END <><><><><><>
RFULL(N) = DEEP(N)/4.0
AFULL(N) = (3.1415926/4.0)DEEP(N)**2
WIDE(N) = DEEP(N)
cim CALL SEDEPTH1 to adjust pipe if IPIPESED=1
IF (SEDEPTH(N).NE.0.0) THEN
CALL SEDEPTH1(N)
ELSE
SEDAREA(N) = 0.0
SEDPERI(N) = 0.0
SEDRAD(N) = 0.0
ENDIF
CASE (2)
RFULL(N) = (WIDE(N)DEEP(N))/(2.WIDE(N)+2.0DEEP(N))
AFULL(N) = WIDE(N)DEEP(N)
CASE (3)
RFULL(N) = 0.25381 * DEEP(N)
CASE (4)
RFULL(N) = 0.19311 * DEEP(N)
CASE (5)
RFULL(N) = 0.28800
DEEP(N)
CASE (6)
AFULL(N)=DEEP(N)
(WIDE(N)+DEEP(N)/2.
(STHETA(N)+SPHI(N)))
IF(WIDE(N).LE.0.0) WIDE(N) = 0.01
RFULL(N)=AFULL(N)/(WIDE(N)+DEEP(N)*
+ (SQRT(1.0+STHETA(N)2)+SQRT(1.0+SPHI(N)2)))
CASE (7)
IF(STHETA(N).EQ.0.0) THEN
AFULL(N) = 0.666666667WIDE(N)DEEP(N)
X = WIDE(N)/2.0
X1 = WIDE(N)**4/(64.0
DEEP(N)**2)
WETPER = 8.0
DEEP(N)/WIDE(N)2(X*SQRT(X1+X
2)
+ + X1*LOG(X+SQRT(X1+X
2)) -
+ X1LOG(SQRT(X1)))
RFULL(N) = AFULL(N)/WETPER
ELSE
AFULL(N) = WIDE(N)DEEP(N)(1.0 - 1.0/(STHETA(N)+1.0))
X = WIDE(N)/2.0
X1 = WIDE(N)**4/(64.0
DEEP(N)2)
WETPER = 8.0DEEP(N)/WIDE(N)*2(XSQRT(X1+X
2)
+ + X1*LOG(X+SQRT(X1+X
*2)) -
+ X1LOG(SQRT(X1)))
RFULL(N) = AFULL(N)/WETPER
ENDIF
CIM START <><><><><><><><>
CIM HORIZONTAL ELLIPSE
CASE (9)
C=======================================================================
C Approximations for elliptical pipe based on Table 4 "Elliptical
C Concrete Pipe," page 90, in Concrete Pipe Design Manual, American
C Concrete Pipe Assn., First Edition, 1970. Because ratio of minor
C to major axes is ~ constant, area formula works using just one
C axis. It works better than true area for ellipse (pi
a*b) since
C pipe is only approximately elliptical.
C=======================================================================
IF ((DEEP(N).LT.0.0).AND.(WIDE(N).LT.0.0)) THEN
DEEP(N) = - DEEP(N)
WIDE(N) = - WIDE(N)
AFULL(N) = 1.2692 * DEEP(N) * DEEP(N)
RFULL(N) = 0.3061 * DEEP(N)
ELSE
ISIZE = DEEP(N)
IF ((ISIZE.LE.0).OR.(ISIZE.GT.NUMELL)) THEN
IF (JCE.EQ.0) THEN
WRITE(N6,4070) NCOND(N)
ELSE
WRITE(N6,4071) ACOND(N)
ENDIF
ISTOP = ISTOP + 1
ISIZE = 1
END IF
Cwch, 2/12/01. Add metric conversions.
DEEP(N) = EMINOR(ISIZE)/CMET(12,METRIC)
WIDE(N) = EMAJOR(ISIZE)/CMET(12,METRIC)
AFULL(N) = EAREA(ISIZE)/CMET(13,METRIC)
RFULL(N) = ERADIUS(ISIZE)/CMET(1,METRIC)
END IF
CIM VERTICAL ELLIPSE
CASE (10)
Cwch (CIM), 7/20/04. Should be .LT. for both.
C IF ((DEEP(N).GT.0.0).AND.(WIDE(N).LT.0.0)) THEN
IF ((DEEP(N).LT.0.0).AND.(WIDE(N).LT.0.0)) THEN
DEEP(N) = - DEEP(N)
WIDE(N) = - WIDE(N)
AFULL(N) = 1.2692 * WIDE(N) * WIDE(N)
RFULL(N) = 0.3061 * WIDE(N)
ELSE
ISIZE = DEEP(N)
IF ((ISIZE.LE.0).OR.(ISIZE.GT.NUMELL)) THEN
IF (JCE.EQ.0) THEN
WRITE(N6,4070) NCOND(N)
ELSE
WRITE(N6,4071) ACOND(N)
ENDIF
ISTOP = ISTOP + 1
ISIZE = 1
END IF
Cwch, 2/12/01. Add metric conversions.
Cwch, 7/20/04. Major and minor sizes inverted.
C DEEP(N) = EMINOR(ISIZE)/CMET(12,METRIC)
C WIDE(N) = EMAJOR(ISIZE)/CMET(12,METRIC)
DEEP(N) = EMAJOR(ISIZE)/CMET(12,METRIC)
WIDE(N) = EMINOR(ISIZE)/CMET(12,METRIC)
AFULL(N) = EAREA(ISIZE)/CMET(13,METRIC)
RFULL(N) = ERADIUS(ISIZE)/CMET(1,METRIC)
END IF
CIM ARCH
CASE (11)
C=======================================================================
C Approximations for steel pipe based in part on tables from "Modern
C Sewer Design," by American Iron and Steel Institute, Fourth Ed.,
C 1999. But see also two web sites:
C http://www.lane-enterprises.com/cspFullFlow.htm
C http://www.lane-enterprises.com/sppFullFlow_p2.htm
C with hydraulic properties.
C=======================================================================
IF ((DEEP(N).LT.0.0).AND.(WIDE(N).LT.0.0)) THEN
DEEP(N) = - DEEP(N)
WIDE(N) = - WIDE(N)
Cwch, 7/20/04. Fix error noted by Mike Gregory in swmm-users, from
C 10/10/03. See his spreadsheet calcs.
C AFULL(N) = 0.7879 * DEEP(N) * DEEP(N)
AFULL(N) = 0.7879 * DEEP(N) * WIDE(N)
C
RFULL(N) = 0.2991 * DEEP(N)
ELSE
ISIZE = DEEP(N)
IF ((ISIZE.LE.0).OR.(ISIZE.GT.NUMARCH)) THEN
IF (JCE.EQ.0) THEN
WRITE(N6,4072) NCOND(N)
ELSE
WRITE(N6,4073) ACOND(N)
ENDIF
ISTOP = ISTOP + 1
ISIZE = 1
END IF
Cwch, 2/12/01. Add metric conversions.
DEEP(N) = AMINOR(ISIZE)/CMET(12,METRIC)
WIDE(N) = AMAJOR(ISIZE)/CMET(12,METRIC)
AFULL(N) = AAREA(ISIZE)/CMET(13,METRIC)
RFULL(N) = ARADIUS(ISIZE)/CMET(1,METRIC)
END IF
END SELECT
CIM BRIDGE (TO BE IMPLEMENTED)
cim IF(KLASS.EQ.12) THEN
cim END IF
CIM END <><><><><><><><><><>
260 CONTINUE
280 NC = N-1
NTC = NC

@dickinsonre
Copy link

Always hard to read the SWMM4 code but here ae the vertical ellipse only arfull and rfull

CIM VERTICAL ELLIPSE
CASE (10)
Cwch (CIM), 7/20/04. Should be .LT. for both.
C IF ((DEEP(N).GT.0.0).AND.(WIDE(N).LT.0.0)) THEN
IF ((DEEP(N).LT.0.0).AND.(WIDE(N).LT.0.0)) THEN
DEEP(N) = - DEEP(N)
WIDE(N) = - WIDE(N)
AFULL(N) = 1.2692 * WIDE(N) * WIDE(N)
RFULL(N) = 0.3061 * WIDE(N)

@LRossman
Copy link
Collaborator Author

I'm now having second thoughts about applying the aforementioned area and hydraulic radius formulas for custom elliptical pipes to any pair of of width (span) and height (rise) values. The formulas were derived from the following table for standard sizes of elliptical pipes (with rise and span in inches, area A in sq. ft, and hydraulic radius Rh in ft.):

Rise	Span    S/R	A	Rh
14	23	1.64	1.8	0.37
19	30	1.58	3.3	0.49
22	34	1.55	4.1	0.55
24	38	1.58	5.1	0.61
27	42	1.56	6.3	0.69
29	45	1.55	7.4	0.74
32	49	1.53	8.8	0.81
34	53	1.56	10.2	0.88
38	60	1.58	12.9	0.97
43	68	1.58	16.6	1.11
48	76	1.58	20.5	1.23
53	83	1.57	24.8	1.35
58	91	1.57	29.5	1.48
63	98	1.56	34.6	1.60
68	106	1.56	40.1	1.72
72	113	1.57	46.1	1.85
77	121	1.57	52.4	1.97
82	128	1.56	59.2	2.09
87	136	1.56	66.4	2.22
92	143	1.55	74	2.34
97	151	1.56	82	2.46
106	166	1.57	99.2	2.71
116	180	1.55	118.6   2.97

Note that the ratios of span to rise are mostly the same, averaging 1.56. Thus the area and hydraulic radius formulas fitted to the product of span and rise from this table only apply to ratios of around 1.56 and not to any arbitrary pair of values. What this implies is that the dimensions that SWMM should accept for a custom elliptical pipe must comply with the 1.56 ratio. The user should only be required to supply a single value for the rise (full depth) with the span being set to 1.56 that value for horizontal elliptical pipes and 1/1.56 for vertical elliptical pipes.

@cbuahin
Copy link
Collaborator

cbuahin commented Oct 5, 2023

The formula has been updated. However, longer term, we will update the GUI to either accept only rise or span and do the multiplication with 1.56 in the code.

@cbuahin cbuahin closed this as completed Oct 13, 2023
@cbuahin cbuahin added the addressed Issues that have been addressed. Pending merge before closing. label Jan 9, 2024
@cbuahin
Copy link
Collaborator

cbuahin commented Jan 11, 2024

The ratio is not always 1.56. I think it is best to leave it up to users to ensure they are using the correct rise and spans.

@cbuahin cbuahin self-assigned this Jan 11, 2024
@cbuahin cbuahin reopened this Jan 11, 2024
@cbuahin cbuahin closed this as completed Jan 11, 2024
@LRossman LRossman reopened this Jan 13, 2024
@cbuahin
Copy link
Collaborator

cbuahin commented Jan 13, 2024

@LRossman I presume you reopened this because I reopened the corresponding issue on the GUI side, correct? I will post the message I posted there here as well.

I set up a quick experiment using a 100ft pipe with 10ft sub-sections and slopes of 1% and 5% to see the impact of using the constant S/R ratio of 1.56 versus the correct ratio on depth and velocities given the same flows. The results showed some differences. There were larger deviations for the smaller pipes than for the larger pipes as one would expect.

image

Also, the deviations tended to be larger when depths approached the crowns of the pipes, which is also to be expected. Finally, the vertical ellipses showed larger deviations in depth than the horizontal ellipses as changes in flow lead to relatively larger changes in depth.

image

In light of these differences, it makes sense to me to keep the status-quo. Users have the option of selecting one of the standard sizes or they could prescribe their own rise and span values which will lead to more accurate and precise calculations.

@LRossman
Copy link
Collaborator Author

I wanted to reopen this issue because I still believe that the equations SWMM uses for full area and hydraulic radius in custom elliptical pipes only apply to dimensions where the span (S) over the rise (R) for a horizontal ellipse is 1.56 (or more precisely 1.56363). It would be the reciprocal of that for a vertical ellipse. The original equations appearing in SWMM 4.4A were

A = 1.2692 * R * R 
Rh = 0.3061 * R

They were documented in a file named SHAPE.DOC.TXT (last updated on 7/20/2004) that was part of the 4.4A 1999 release. They would make no sense if applied to any arbitrary set of span and rise dimensions since they totally ignore the span dimension. However look what happens if we substitute R = S / (S/R) = S / 1.56363 into them:

A = 0.8117 * R * S / (S/R) = 0.8117 / 1.56363 * R * S = 0.8117 * R * S
Rh = 0.3061 * sqrt(R * S / (S/R)) = 0.3061 / sqrt(1.56363) * sqrt(R * S) = 0.2448 * sqrt(R * S)

The coefficient 0.8117 is precisely the result obtained when the area in the table of standard elliptical pipes (shown several comments above or in Table D-1 of the SWMM 5 Hydraulics Reference Manual) is fitted to the R * S entries as shown below:
image
A similar result holds for the 0.2448 coefficient when the tabulated hydraulic radius is fitted to the square root of R * S. Thus the original 4.4A equations are correct only for S/R = 1.56363 as are the updated ones recently added to the bug_fixes branch. Since SWMM currently accepts any pair of R and S values for a custom elliptical pipe there will be some error introduced if a different S/R ratio applies. The confusion on this issue could have been avoided when writing SWMM 5, and input for a custom shape be restricted to just its rise dimension, if the SHAPE.DOC.TXT note had explicitly stated that its formulas for custom elliptical pipes only applied to a particular S/R.

@cbuahin
Copy link
Collaborator

cbuahin commented Jan 13, 2024

That makes a lot of sense to me now. So, do you have any reservations about me modifying the code (including the GUI) to enforce this ratio? On the GUI end, I could modify it to only accept the rise value and apply the ratio internally to estimate the span.

@LRossman
Copy link
Collaborator Author

There's the issue of backward compatibility to consider. People, especially contractors, get bent out of shape when a new release produces a different set of results than an earlier release did on their project files. So I can see several options to consider:

  1. As you proposed, use just the rise (max. depth) value for the ellipse and ignore the span if present in an input file, plus remove the corresponding Maximum Width input field in the GUI Cross-Section Editor dialog.
  2. As in option 1 but also issue a warning message when reading an input file (in both the engine and GUI) if a span value is found that doesn't satisfy the "std. ratio" when parsing the elliptical shape entry.
  3. Accept a span entry in the input file and leave the Max. Width field in the GUI, but allow the span to be 0 indicating that the "std. ratio" will be used for it. Also add a note to the Cross-Section Editor explaining this as well as the warning message mentioned in option 2 in case a non-zero span is entered.
  4. Leave everything as is but issue the warning message if span/rise doesn't match the "std. ratio".

I'm thinking that maybe option 3 might be best since it can use the correct S/R ratio but also satisfy backward compatibility with a warning that results might be inaccurate. You might want to discuss this issue on the SWMM Users Knowledge Base and ask for suggestions on how to resolve it. Maybe they will feel OK with option 1 and not care about backward compatibility.

Also note that depending on which option is selected, the Help file would need to be updated in the short run as well as the User Manual and Hydraulics Manual in the long run.

@cbuahin
Copy link
Collaborator

cbuahin commented Jan 13, 2024

Number 3 makes a lot of sense to me as well. As you know, updating the user manual requires an internal review that may prolong the the next release we are planning, but I think it is well worth the effort as this bug is an important one to address in the next release. I appreciate your inputs on this.

@cbuahin cbuahin removed the addressed Issues that have been addressed. Pending merge before closing. label Jan 13, 2024
@dickinsonre
Copy link

I would vote for option 4 if the user has an option to make a custom shape where the S/R can be different than 1.56. User would then use a custom shape instead of the custom option in the elliptical shape dialog.

@LRossman
Copy link
Collaborator Author

LRossman commented Jan 16, 2024

I think I found a better way to handle the custom elliptical cross section. That is to treat it as a true ellipse rather than use the area and hydraulic radius formulas derived from the table of standard elliptical pipes. As noted above, those formulas are only valid for S/R = 1.56 and don't represent a true ellipse (the full area formula derived from the table is A = 0.8117 * R * S while for a true ellipse it is A = 0.7854 * R * S (i.e. (PI/4)*R*S)).

If the custom elliptical shape is treated as a true ellipse then the full area (A) and hydraulic radius (Rh) formulas would be:

a = R/2
b = S/2
c = PI *(3.0*(a+b) - sqrt((3.0*a + b)*(a + 3.0*b)))  // Circumference
A = PI * a * b
Rh = A / c

After replacing the current formulas used in v5.2.4 with these I was able to eliminate the inconsistencies found by Bruno Bermedo as described in his Open SWMM Knowledge Base posting.. You can find the details in the attached zip file.

So I'm now thinking that the preferred option for handling a custom elliptical shape is:

  • if the user provides non-zero values for both R and S then use the true elliptical A and Rh formulas as shown above
  • if the user provides a zero value for S then apply the S/R value of 1.56 and use the A and Rh formulas derived from the standard table.

This will not necessarily preserve backward compatibility, but since doing so would perpetuate incorrect results I think it is a reasonable course of action to take.

P.S. Since the table for standard elliptical pipes applies to shapes with S/R of 1.56 and the areas in the table don't quite conform to a true ellipse the question arises as to what shape was used to derive the geometry tables for A/Afull, Rh/Rhfull, and W/Wmax for equally spaced Y/Yfull values. By looking at the W/Wmax table (where Wmax is S) I've confirmed that it is based on a true ellipse and not whatever shape is implied by the standard pipe table. I did this by using the following formula for the chord length W of a horizontal ellipse:

W = S * sqrt(1 - (2x/R)^2)

where x is the distance between the major axis and the chord. Adapting this formula to match the contents of a W/Wmax table we get:

W/Wmax = sqrt(1 - (1 - (2*Y/Yfull)^2)

When evaluated at 25 equally spaced Y/Yfull values it produces the same numbers seen in the W_HorizEllipse array appearing in the SWMM's xsect.dat file. We can thus assume that the area and hydraulic radius tables were also derived from a true ellipse shape.

Elliptical Pipe Comparisons.zip

@cbuahin
Copy link
Collaborator

cbuahin commented Jan 16, 2024

I hear you @LRossman. Definitely something to consider. However, if we are going to use actual formulas, my thinking is that this will be a good time to use formulas for all the cross-sectional shapes we have formulas for instead of the lookup tables. I can envision some performance gains from direct formulas instead of the lookups.

@cbuahin
Copy link
Collaborator

cbuahin commented Jan 16, 2024

Perhaps we can do this in two steps. The first step is to just implement the warning in the next patch and implement the more comprehensive direct formula approaches in a future minor release.

@LRossman
Copy link
Collaborator Author

@cbuahin please note that the formulas we are discussing here only apply to determining the area and hydraulic radius of a pipe flowing full. SWMM already uses analytic formulas for these quantities. For partly full pipes SWMM uses lookup tables only for circular, elliptical and arch pipes as well as the masonry shapes. Analytical formulas don't exist for the masonry shapes. The formulas for circular pipes involve trigonometric functions which are more expensive to compute than using a lookup table. For elliptical and arch shapes there are no simple formulas for partly full area and wetted perimeter.

Also please see the updated version of my previous posting where I confirm that the geometry tables in xsect.dat for elliptical pipes are based on a true ellipse rather than whatever kind of modified elliptical shape is implied by the table in the Concrete Pipe Design Manual.

As for just issuing a warning for custom elliptical shapes that don't conform to the standard S/R ratio, it would basically have to admit that the results one obtains are incorrect -- that's not a great look. I would rather see the bug corrected.

@cbuahin
Copy link
Collaborator

cbuahin commented Jan 16, 2024

@LRossman, I hear what you are saying. Let me confirm that the analytical formula does not render the A/Afull, Rh/Rhfull, and W/Wmax for equally spaced Y/Yfull values in the lookup tables incorrect on my end (not to dispute your findings but for my own sanity ☺ ) and then I will work on addressing the bug shortly.

@cbuahin
Copy link
Collaborator

cbuahin commented Jan 16, 2024

For the masonry shapes, I know there are no analytical formulas but I have been experimenting with replacing the tables with with polynomial functions with some degree of success and performance improvements. Would you have any reservations about those?

@cbuahin cbuahin modified the milestones: v5.2.5, v5.3.0 Jan 16, 2024
@LRossman
Copy link
Collaborator Author

If you can show performance improvements with the polynomial functions then I say go for it.

Regarding the elliptical lookup tables, I only checked the W/Wmax table using the analytical formula for chord width for a true ellipse and got perfect agreement with it. I don't think there are similarly simple formulas for partly filled area and hydraulic radius. In particular, I think the wetted perimeter (needed for hyd. radius) requires numerical integration (I have no idea how the SWMM hyd. radius table was constructed). If you look at the area table you will see that the increments are the same both below and above the Y/Yfull = 0.5 level which leads me to believe it applies to a true ellipse.

@dickinsonre
Copy link

dickinsonre commented Jan 30, 2024

(I have no idea how the SWMM hyd. radius table was constructed) - ,it was done in the 1990's by CDM or CDM Smith. I cannot find shapes.doc but it was added on 1/96

CIM THESE NEXT ARRAYS CONTAIN DATA FOR STANDARD ELLIPTICAL AND
CIM ARCH PIPE TYPES: MAJOR AXIS LENGTH, MINOR AXIS LENGTH,
CIM FULL FLOW AREA, FULL FLOW HYDRAULIC RADIUS.
CIM INITIALIZED IN EXTBLK.FOR
CIM SEE SHAPES.DOC FOR STANDARD ELLIPTICAL AND ARCH DIMENSIONS
PARAMETER(NUMELL=23)
COMMON /ELLIPSE/ EMAJOR(NUMELL),EMINOR(NUMELL),EAREA(NUMELL),
.ERADIUS(NUMELL)
PARAMETER(NUMARCH=102)
COMMON /ARCH/ AMAJOR(NUMARCH),AMINOR(NUMARCH),AAREA(NUMARCH),
.ARADIUS(NUMARCH)

@dickinsonre
Copy link

The SWMM4 code gives me a headache. Thanks so much for bringing it to C and writing beautiful code. Lew.

@dickinsonre
Copy link

Mitch gave me the shapes file - maybe it will help you
SHAPE.DOC.TXT

@michaeltryby
Copy link
Collaborator

michaeltryby commented Oct 8, 2024

Thinking on this has evolved over time ... to facilitate closing this issue and for ease of subsequent review, I suggest we consolidate all changes related to this issue into a dedicated PR.

PR coming forthwith ...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
4 participants