When I developed my gutter program, I found a big problem about the taper gutter. In case the ground elevation is quite flat, of course I shall use the taper gutter to make a suitable slope for the gutter design. I tried to search the relative books and websites, but I couldn't find the formulas for my program. Hence, I derived the formulas by myself, and let them become part of my program for the gutter's self-concentration time. Actually, all of them are very simple, and you can understand these formulas very soon.
In the beginning, I described the gutter sectional height by the slope, and then I took the fundamental relationship of the gutter length L and its velocity V to form the tiny time dL/dV. Of course, the next step was to integrate the tiny time from the upstream (UP) to downstream (DN) points, and then I got the integration formulas which couldn't obtain the analytical expressions. Consequently, I had to choose the numerical integration approach to solve it, and I adopted the free software, GNU Scientific Library, as my numerical analysis solution. I divide all of the derived formulas into 3 parts, and the formulas are as follows:
Part I. The fundamental formulas
The first formula is Manning formula, and the second formula is the water depth described by the slope. However, according to the Taiwanese Code, the design water depth is the gutter height multiplies 0.75. In the following formulas, yDN, yUP, and L are the water depth of the upstream position, the water depth of the downstream position and the gutter length respectively.
Part II. The derived formulas of the type U gutter
The first formula is the hydraulic radius of the type U gutter, and the second derived formula is the self-concentration time of the gutter. The third derived formula is calculated by the previous self-concentration time. In the following formulas, W, S, and yUP are the sectional width, the slope, and the water depth of the upstream position respectively.
Part III. The derived formulas of the type Rectangle gutter
The first formula is the hydraulic radius of the type Rectangle gutter, and the second derived formula is the self-concentration time of the gutter. The third derived formula is calculated by the previous self-concentration time. In the following formulas, W, S, and yUP are the sectional width, the slope, and the water depth of the upstream position respectively.
How do I make sure whether my formula is correct or not? In calculus, I adopted the formula’s limit to calculate the transient velocity so as to make sure the accuracy. I chose the algebra system Maxima, and I used W = 0.25m, H = 0.3m, and S = 0.005 for testing these derived formulas. After I inputted the formulas with the tiny length x =0.001m, I could get the following results.
Algebra System: Maxima
In the algebra system Maxima, the %i and %o are input and output data respectively. Both of (%i1) and (%i4) are the derived formulas of the self-concentration time, and the velocities are calculated by (%i2) and (%i5). By the Manning formula, the two different kinds of types can be calculated by (%i3) and (%i6). Compared with the results of Manning formula, the numerical results of the derived formulas are very close to them. Hence, I have proved to everybody that the derived formulas are right.
In the GSL numerical integration, I adopted the integrator QAGS to calculate the numerical results. Actually, the integrator QAGS is also adopted by Maxima, so that I can check whether the numerical results are correct or not. After I read the source code of gsl_integration.h, I know that GSL adopted the function pointer to point the target function, and the defined parameter is a (void *).
In my program, my parameter is the gutter structure, so that I let the (void *) point struct gutter. Both of the target functions have to change the type of params from (void *) to struct gutter, and return the functions of the numerical integration. I just show you the relative source code, and you should understand how it works. Of course, the copyrights of the derived formulas and C source code belongs to my company, Songyang Engineering Consultants Co., Ltd.
I have showed you the details of the taper gutter calculations, and you should understand how to calculate the taper gutter. Although all of the gutter calculations are very simple procedures, the taper gutter has not yet solved by the engineers. I have solved this engineering problem, and the whole development procedures shall be useful for you.
References
In the beginning, I described the gutter sectional height by the slope, and then I took the fundamental relationship of the gutter length L and its velocity V to form the tiny time dL/dV. Of course, the next step was to integrate the tiny time from the upstream (UP) to downstream (DN) points, and then I got the integration formulas which couldn't obtain the analytical expressions. Consequently, I had to choose the numerical integration approach to solve it, and I adopted the free software, GNU Scientific Library, as my numerical analysis solution. I divide all of the derived formulas into 3 parts, and the formulas are as follows:
Part I. The fundamental formulas
The first formula is Manning formula, and the second formula is the water depth described by the slope. However, according to the Taiwanese Code, the design water depth is the gutter height multiplies 0.75. In the following formulas, yDN, yUP, and L are the water depth of the upstream position, the water depth of the downstream position and the gutter length respectively.
Part II. The derived formulas of the type U gutter
The first formula is the hydraulic radius of the type U gutter, and the second derived formula is the self-concentration time of the gutter. The third derived formula is calculated by the previous self-concentration time. In the following formulas, W, S, and yUP are the sectional width, the slope, and the water depth of the upstream position respectively.
Part III. The derived formulas of the type Rectangle gutter
The first formula is the hydraulic radius of the type Rectangle gutter, and the second derived formula is the self-concentration time of the gutter. The third derived formula is calculated by the previous self-concentration time. In the following formulas, W, S, and yUP are the sectional width, the slope, and the water depth of the upstream position respectively.
How do I make sure whether my formula is correct or not? In calculus, I adopted the formula’s limit to calculate the transient velocity so as to make sure the accuracy. I chose the algebra system Maxima, and I used W = 0.25m, H = 0.3m, and S = 0.005 for testing these derived formulas. After I inputted the formulas with the tiny length x =0.001m, I could get the following results.
Algebra System: Maxima
(%i1) quad_qags(0.016/sqrt(0.005)*((0.75*(0.3+0.005*x)+0.25/8*(3.141592653589793-4))/(0.75*2/0.25*(0.3+0.005*x)
+0.5*(3.141592653589793-2)))^(-2/3),x,0,0.001);
(%o1) [0.0011835810258154,1.3140389063697352*10^-17,21,0]
(%i2) 0.001/0.0011835810258154;
(%o2) 0.84489357144862
(%i3) ((0.25*0.3*0.75-0.25^2/2+3.141592653589793*0.25^2/8)/(2*0.3*0.75-0.25+3.141592653589793*0.25/2))^(2/3)
*0.005^(1/2)/0.016;
(%o3) 0.84489180600393
(%i4) quad_qags(0.016/sqrt(0.005)*((0.25*0.75*(0.3+0.005*x))/(0.25+0.75*2*(0.3+0.005*x)))^(-2/3),x,0,0.001);
(%o4) [0.0012151161534,1.3490499310986567*10^-17,21,0]
(%i5) 0.001/0.0012151161534;
(%o5) 0.82296659228989
(%i6) ((0.25*0.3*0.75)/(0.25+2*0.3*0.75))^(2/3)*0.005^(1/2)/0.016;
(%o6) 0.82296495943672
+0.5*(3.141592653589793-2)))^(-2/3),x,0,0.001);
(%o1) [0.0011835810258154,1.3140389063697352*10^-17,21,0]
(%i2) 0.001/0.0011835810258154;
(%o2) 0.84489357144862
(%i3) ((0.25*0.3*0.75-0.25^2/2+3.141592653589793*0.25^2/8)/(2*0.3*0.75-0.25+3.141592653589793*0.25/2))^(2/3)
*0.005^(1/2)/0.016;
(%o3) 0.84489180600393
(%i4) quad_qags(0.016/sqrt(0.005)*((0.25*0.75*(0.3+0.005*x))/(0.25+0.75*2*(0.3+0.005*x)))^(-2/3),x,0,0.001);
(%o4) [0.0012151161534,1.3490499310986567*10^-17,21,0]
(%i5) 0.001/0.0012151161534;
(%o5) 0.82296659228989
(%i6) ((0.25*0.3*0.75)/(0.25+2*0.3*0.75))^(2/3)*0.005^(1/2)/0.016;
(%o6) 0.82296495943672
In the algebra system Maxima, the %i and %o are input and output data respectively. Both of (%i1) and (%i4) are the derived formulas of the self-concentration time, and the velocities are calculated by (%i2) and (%i5). By the Manning formula, the two different kinds of types can be calculated by (%i3) and (%i6). Compared with the results of Manning formula, the numerical results of the derived formulas are very close to them. Hence, I have proved to everybody that the derived formulas are right.
In the GSL numerical integration, I adopted the integrator QAGS to calculate the numerical results. Actually, the integrator QAGS is also adopted by Maxima, so that I can check whether the numerical results are correct or not. After I read the source code of gsl_integration.h, I know that GSL adopted the function pointer to point the target function, and the defined parameter is a (void *).
In my program, my parameter is the gutter structure, so that I let the (void *) point struct gutter. Both of the target functions have to change the type of params from (void *) to struct gutter, and return the functions of the numerical integration. I just show you the relative source code, and you should understand how it works. Of course, the copyrights of the derived formulas and C source code belongs to my company, Songyang Engineering Consultants Co., Ltd.
enum Verify Gutter_Design_Capacity(struct gutter *__gutter, double *_slope) {
...
_workspace = gsl_integration_workspace_alloc(1000);
_Self_Concentration_Time.function = _gutter_type == TYPE_U ?
&Self_Concentration_Time_Gutter_Type_U : &Self_Concentration_Time_Gutter_Type_Rec;
_Self_Concentration_Time.params = __gutter;
gsl_integration_qags(&_Self_Concentration_Time, 0, __gutter->length, 0, 1e-7, 1000, _workspace, &_TIME, &_error);
gsl_integration_workspace_free(_workspace);
__gutter->self_concentration_time = _TIME;
__gutter->velocity = __gutter->length / __gutter->self_concentration_time;
...
}
double Self_Concentration_Time_Gutter_Type_U(double x, void *params) {
struct gutter *__gutter = (struct gutter *)params;
return __gutter->roughness_coefficient / sqrt(__gutter->slope) * pow(
(__gutter->water_depth_ratio * (__gutter->upstream_section->height + __gutter->slope * x)
+ __gutter->upstream_section->width / 8. * (PI - 4)) / (__gutter->water_depth_ratio * 2
/ __gutter->upstream_section->width * (__gutter->upstream_section->height + __gutter->slope * x)
+ 0.5 * (PI - 2))
, -2. / 3);
}
double Self_Concentration_Time_Gutter_Type_Rec(double x, void *params) {
struct gutter *__gutter = (struct gutter *)params;
return __gutter->roughness_coefficient / sqrt(__gutter->slope) * pow(
(__gutter->upstream_section->width * __gutter->water_depth_ratio * (__gutter->upstream_section->height
+ __gutter->slope * x)) / (__gutter->upstream_section->width + __gutter->water_depth_ratio * 2
* (__gutter->upstream_section->height + __gutter->slope * x))
, -2. / 3);
}
...
_workspace = gsl_integration_workspace_alloc(1000);
_Self_Concentration_Time.function = _gutter_type == TYPE_U ?
&Self_Concentration_Time_Gutter_Type_U : &Self_Concentration_Time_Gutter_Type_Rec;
_Self_Concentration_Time.params = __gutter;
gsl_integration_qags(&_Self_Concentration_Time, 0, __gutter->length, 0, 1e-7, 1000, _workspace, &_TIME, &_error);
gsl_integration_workspace_free(_workspace);
__gutter->self_concentration_time = _TIME;
__gutter->velocity = __gutter->length / __gutter->self_concentration_time;
...
}
double Self_Concentration_Time_Gutter_Type_U(double x, void *params) {
struct gutter *__gutter = (struct gutter *)params;
return __gutter->roughness_coefficient / sqrt(__gutter->slope) * pow(
(__gutter->water_depth_ratio * (__gutter->upstream_section->height + __gutter->slope * x)
+ __gutter->upstream_section->width / 8. * (PI - 4)) / (__gutter->water_depth_ratio * 2
/ __gutter->upstream_section->width * (__gutter->upstream_section->height + __gutter->slope * x)
+ 0.5 * (PI - 2))
, -2. / 3);
}
double Self_Concentration_Time_Gutter_Type_Rec(double x, void *params) {
struct gutter *__gutter = (struct gutter *)params;
return __gutter->roughness_coefficient / sqrt(__gutter->slope) * pow(
(__gutter->upstream_section->width * __gutter->water_depth_ratio * (__gutter->upstream_section->height
+ __gutter->slope * x)) / (__gutter->upstream_section->width + __gutter->water_depth_ratio * 2
* (__gutter->upstream_section->height + __gutter->slope * x))
, -2. / 3);
}
I have showed you the details of the taper gutter calculations, and you should understand how to calculate the taper gutter. Although all of the gutter calculations are very simple procedures, the taper gutter has not yet solved by the engineers. I have solved this engineering problem, and the whole development procedures shall be useful for you.
References
- 余濬(2005)山坡地排水與滯洪設計,科技圖書股份有限公司。
- GSL - GNU Scientific Library, http://www.gnu.org/software/gsl/
- Maxima, a Computer Algebra System, http://maxima.sourceforge.net/