Sei sulla pagina 1di 388

Universidad Nacional San Crist

obal de Huamanga
Facultad de Ingenier

a de Minas, Geolog

a y Civil
Escuela Profesional de Ingenier

a Civil
Tesis Para Optar el T

tulo de Ingeniero Civil


Programa Lluvia Escorrenta Para Simulacion de
Defensas Ribere nas con ObjectARX C++
Presentado por : Ayala Bizarro, Iv an Arturo
Ayacucho Per

u
2009
PRESENTACI

ON
La presente tesis lleva por ttulo Programa Lluvia Escorrenta Para Simulacion de De-
fensas Ribere nas con ObjectARX C++, como una contribuci on a la investigaci on y pro-
gramacion en el area de la ingeniera hidraulica. La realizacion de esta investigaci on sale
a luz luego de haber trabajado en m ultiples problemas relacionados con el estudio de
defensas ribere nas y tr ansito de ujos en cauces naturales, con el af an de plasmar me-
diante un programa informatico que involucre an alisis hidrologico, an alisis hidr aulico y
nalmente hidr aulica uvial, se plantea el desarrollo informatico mediante el lenguaje de
programaci on C++ y ObjectARX. Esperando que su aplicaci on sirva a todos aquellos
profesionales y estudiantes inmersos a la hidraulica.
Ayala Bizarro, Ivan Arturo
ayalabizarro@gmail.com
Escuela Profesional de Ingeniera Civil
Universidad Nacional San Crist obal de Huamanga
Ayacucho, Agosto de 2009.
i
DEDICATORIA
A DIOS por iluminar y bendecir mi camino. A mis
padres, Manuel Ayala Toscano y Mara Bizarro Ortz,
quienes me apoyaron de manera incondicional en mi for-
macion academica; gracias a ustedes por apostar siem-
pre en la educacion. A mis hermanos y a ti Jessica por
darme una felicidad y alegra incomparable.
ii
AGRADECIMIENTOS
A los docentes de la Universidad Nacional de San Cristobal de Huamanga -
Facultad de Ingeniera de Minas Geologa y Civil, por su contribucion durante
mi desarrollo academico y profesional.
Al Ingeniero Joel Ore Iwanaga, que durante mi formacion profesional no solo
se ha dedicado a incentivarme en la investigacion de la ingeniera hidraulica,
sino que tambien oriento mi futuro academico y personal, a quien considero un
modelo de docente universitario, y muy aparte de ser mi asesor en el presente
proyecto de investigacion es un gran amigo.
Como dejar de agradecer al Ingeniero Cristian Castro Perez, talentoso ami-
go, con muchas ganas de compartir informaciones a todos aquellos que estan
interesados en la investigacion; sus conocimientos son dignos de admiracion.
A la Ingeniera Jessica Z u niga Mendoza, por su colaboracion en la realizacion
de la presente tesis, muchos detalles importantes y primordiales de la presente
investigacion son gracias a sus cualidades de las que no cuento. Gracias por
tu ayuda y tu tiempo desinteresado.
Al Ingeniero Ernesto Estrada Cardenas, por su colaboracion y orientacion y
por permitirme conocer a esa gran persona que hay detras del profesional que
nos muestra.
iii
Al Ingeniero Jaime Bendez u Prado, por su entusiasmo, dinamismo y sobre
todo empe no en las clases academicas.
A mis compa neros de la Universidad Nacional de San Cristobal de Huamanga:
Juan Luis Taype Carrasco, Edmundo Canchari Gutierrez, Cesar Yupanqui,
Odiger Tacas, por compartir muchos momentos agradables durante nuestra
permanencia en la Universidad.
A la Universidad Nacional de San Cristobal de Huamanga, alma mater, del
cual me siento muy orgulloso haber pertenecido y egresado de sus aulas.
Al Dr. Hugo Scaletti, Dr. Julio Kuroiwa, Dr. Jorge Abad, personas de gran
conocimiento y sobre todo demostrando sencillez, a ellos por atender mis con-
sultas y despejar mis dudas en mi formacion profesional.
Al Dr. Arturo Leon Cuba por apoyar en la investigacion y brindar oportu-
nidades al respecto.
A mis compa neros de la Maestra de la Universidad Nacional de Ingeniera:
Juan Carlos Rodriguez, Freddy Velazquez, Edwin Arapa, grandes amigos y
compa neros de carpeta.
En general, agradecer a todos aquellos que no menciono, pero s contribuyeron
con sus palabras de animos y consejos para seguir siempre adelante, como la
Sra. Cecilia.
RESUMEN
Este proyecto de investigaci on nace con el objetivo de contribuir a la Ingeniera Civil
dentro del area de hidraulica y su desarrollo concierne a trabajos hidrologicos, hidraulicos
e hidraulica uvial, para ello se crea una herramienta, pretendiendo facilitar y disminuir
aquellos procedimientos tediosos que se nos presentan al momento de realizar el analisis
en los tres par ametros mencionados anteriormente.
Especcamente, la tesis trata del desarrollo de un programa llamado PLEDER, que viene
a ser las iniciales del nombre de la investigacion realizada. EL lenguaje de programaci on
utilizado es C++ con enlaces de libreras ObjectARX, el cual facilita el acceso a las
estructuras de la base de datos de AutoCAD, siendo el acceso directo, tambien facilita
el acceso al sistema gr aco, permitiendo denir comandos nativos dentro de programa
AutoCAD, adem as crea objetos personalizados en la base de datos para las aplicaciones
especicas.
El contenido te orico de la presente tesis de investigaci on, explica los pasos y los procedi-
mientos a seguir mediante la utilizaci on de los diferentes metodos que se desarrollan en los
captulos 2, 3, 4 y 5, mas adelante se resume el contenido de estos captulos divididos en
etapas. En el captulo 6, se hace referencia a la aplicacion practica mediante el programa
elaborado, el cual permitir a comprobar la relaci on te orico-pr actico. Finalmente se adjunta
los diagramas de ujo y el codigo fuente del programa.
v
En la etapa Hidrologica, se desarrolla la programacion de los modelos matem aticos para
simulaci on precipitaci on escorrenta desde generaci on de hietogramas, en el cual se utiliza
dos metodologas como el metodo de IILA-SENAMHI-UNI mediante el metodo del bloque
alterno propuesto por Ven Te Chow, metodo de los hietogramas sinteticos de tormentas
desarrollado por el Servicio de Conservaci on de Suelos del Departamento de Agricultura
de los EEUU (1986), en la actualidad (NRCS). Determinacion de abstracciones, mediante
el modelo del n umero de curva propuesto por el NRCS de los EEUU. Determinacion de
hidrogramas unitarios, donde se emplea los modelos del Hidrograma Unitario Sintetico de
Snyder y del NRCS. Determinaci on de hidrogramas de m aximas avenidas: Esta etapa se
desarrollara mediante el metodo de convoluci on directa.
La etapa Hidraulica, es la parte fundamental de la presente investigacion, que consiste
en transitar los caudales de m aximas avenidas a traves de las secciones transversales
naturales, considerando para el caso ujo permanente gradualmente variado y su soluci on
numerica mediante el metodo del paso estandar. La etapa hidr aulica permite conocer las
caractersticas hidr aulicas de dise no como son el tirante, velocidades maximas en el canal
principal y las llanuras izquierdo y derecho.
En la etapa Hidraulica Fluvial, corresponde a obtener las socavaciones generales en cada
una de las secciones transversales incluyendo para ello las partculas inherentes en la zona
en estudio, permitiendo realizar su graco correspondiente.
Se debe tener en cuenta que la programacion realizada en la presente tesis es a nivel
general, es decir, se puede aplicar a cualquier zona de nuestro pas o fuera de ella, solamente
se necesita tener criterios prudentes en el ingreso de datos.

Indice general
Portada
Presentaci on I
Dedicatoria II
Agradecimientos III
Resumen V

Indice General VII

Indice de Cuadros XII

Indice de Figuras XV
1. INTRODUCCI

ON 1
1.1. Antecedentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Necesidad o motivacion de la investigaci on . . . . . . . . . . . . . . . . . . 2
1.3. Objetivos de la tesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
vii

INDICE GENERAL
1.3.1. Generales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3.2. Especcos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4. Organizaci on de la tesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2. TEOR

IA HIDROL

OGICA Y DIAGRAMAS DE FLUJO 7


2.1. Introducci on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2. Desarrollo de Hietogramas de dise no . . . . . . . . . . . . . . . . . . . . . 8
2.2.1. IILA-SENAMHI-UNI . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.2. Hietogramas sinteticos del NRCS . . . . . . . . . . . . . . . . . . . 9
2.3. Tasas de Inltraci on - Metodo del NRCS . . . . . . . . . . . . . . . . . . . 12
2.4. Hidrogramas Unitarios Sinteticos: NRCS y Snyder . . . . . . . . . . . . . . 18
2.4.1. Hidrograma Unitario . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.4.2. Hidrograma Unitario Sintetico . . . . . . . . . . . . . . . . . . . . . 21
2.5. Metodo de Convoluci on discreta para transformaci on precipitacion-
escorrenta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.5.1. Sistema Lineal en el tiempo continuo . . . . . . . . . . . . . . . . . 28
2.5.2. Sistema Lineal en tiempo discreto . . . . . . . . . . . . . . . . . . . 29
2.5.3. Funci on respuesta de pulso discreto y Ecuacion de Convoluci on Dis-
creta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.6. Diagramas de Flujo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
viii

INDICE GENERAL
3. TEOR

IA HIDR

AULICA Y SECCIONES TRANSVERSALES EN


R

IOS 42
3.1. Introducci on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.2. Bases te oricos para el calculo de ujo unidimensional . . . . . . . . . . . . 43
3.2.1. Ecuaci on de Movimiento General. . . . . . . . . . . . . . . . . . . . 43
3.2.2. Ecuaci on de Movimiento del ujo. . . . . . . . . . . . . . . . . . . . 44
3.2.3. Flujo Permanente. . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.2.4. Flujo Uniforme. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.3. Secciones Transversales en Cauces Naturales y C alculo Numerico. . . . . . 48
3.4. Calculo del Tirante Normal . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.4.1. C alculo Numerico . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.5. Caractersticas y Clasicaci on de los Perles del Flujo Gradualmente Variado 60
3.6. Ecuaciones para el c alculo de perles basicos. . . . . . . . . . . . . . . . . 64
4. MODELOS NUM

ERICOS EN R

IOS Y DIAGRAMAS DE FLUJO 68


4.1. Introducci on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
4.2. Formulacion de Flujos en 1D . . . . . . . . . . . . . . . . . . . . . . . . . . 69
4.2.1. Ecuaciones Hidrodinamicas 1D . . . . . . . . . . . . . . . . . . . . 69
4.2.2. Propiedades Hidraulicas Compuestas . . . . . . . . . . . . . . . . . 71
4.2.3. Propiedades Hidraulicas Compuestas . . . . . . . . . . . . . . . . . 76
4.3. Calculos Uni-dimensionales para ujos en canales o cauces abiertos . . . . 77
4.3.1. C alculos de Flujos Permanentes 1-D . . . . . . . . . . . . . . . . . 77
4.3.2. Resumen de ecuaciones empleados en el programa PLEDER . . . . 82
4.4. Diagramas de ujo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
ix

INDICE GENERAL
5. SOCAVACI

ON EN R

IOS Y DIAGRAMAS DE FLUJO 95


5.1. Introducci on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
5.2. Clasicacion de los Ros . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
5.2.1. Cauce principal denido . . . . . . . . . . . . . . . . . . . . . . . . 96
5.2.2. Cauce principal indenido . . . . . . . . . . . . . . . . . . . . . . . 96
5.3. Socavacion General en cauces denidos . . . . . . . . . . . . . . . . . . . . 97
5.3.1. Socavaci on General para Suelos Cohesivos . . . . . . . . . . . . . . 97
5.3.2. Socavaci on General para Suelos No Cohesivos . . . . . . . . . . . . 102
5.4. Diagramas de ujo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
6. APLICACI

ON PR

ACTICA DEL PROGRAMA DESARROLLADO 110


6.1. Introducci on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
6.2. Descripci on General de Programa PLEDER . . . . . . . . . . . . . . . . . 111
6.3. Calculos y Resultados Hidrol ogicos . . . . . . . . . . . . . . . . . . . . . . 115
6.3.1. Parametro Cuenca [U] . . . . . . . . . . . . . . . . . . . . . . . . . 116
6.3.2. Parametro Precipitaci on [P] . . . . . . . . . . . . . . . . . . . . . . 118
6.3.3. Parametro Tiempo [T] . . . . . . . . . . . . . . . . . . . . . . . . . 119
6.3.4. Hidrogramas de Salida . . . . . . . . . . . . . . . . . . . . . . . . . 119
6.4. Calculos y Resultados Hidraulicos . . . . . . . . . . . . . . . . . . . . . . . 122
6.4.1. Secciones Transversales . . . . . . . . . . . . . . . . . . . . . . . . . 123
6.4.2. Flujo Permanente . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
6.4.3. Resultados y Perl de supercie libre . . . . . . . . . . . . . . . . . 125
6.5. Calculos y Resultados de Socavaciones Generales . . . . . . . . . . . . . . 127
x

INDICE GENERAL
7. CONCLUSIONES Y RECOMENDACIONES 129
7.1. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
7.2. Recomendaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Bibliografa 132
A. HIDROLOG

IA C

ODIGO FUENTE C++ 137


B. HIDR

AULICA C

ODIGO FUENTE C++ 201


C. HIDR

AULICA FLUVIAL C

ODIGO FUENTE C++ 313


D. RESULTADOS DEL PROGRAMA 329
E. PLANOS 370
xi

Indice de cuadros
2.1. Par ametro regional b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2. Clasicacion de clases antecedentes de humedad (AMC) para el metodo de
abstracciones de lluvia del NRCS . . . . . . . . . . . . . . . . . . . . . . . 17
2.3. Grupo de suelo hidrologico, para el c alculo del CN . . . . . . . . . . . . . 18
5.1. Valores del coeciente . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
5.2. Valores de X , para suelos cohesivos y no cohesivos . . . . . . . . . . . . . 99
6.1. Datos de la cuenca principal . . . . . . . . . . . . . . . . . . . . . . . . . 115
6.2. Caudales m aximos para diferentes Perodos de Retorno . . . . . . . . . . . 122
D.1. Coordenadas hidrograma T
R
= 50 a nos . . . . . . . . . . . . . . . . . . . . 329
D.1. Continuaci on de la tabla Coordenadas hidrograma T
R
= 50 a nos . . . . . . 330
D.1. Continuaci on de la tabla Coordenadas hidrograma T
R
= 50 a nos . . . . . . 331
D.1. Continuaci on de la tabla Coordenadas hidrograma T
R
= 50 a nos . . . . . . 332
D.1. Continuaci on de la tabla Coordenadas hidrograma T
R
= 50 a nos . . . . . . 333
D.2. Coordenadas hidrograma T
R
= 100 a nos . . . . . . . . . . . . . . . . . . . 333
D.2. Continuaci on de la tabla Coordenadas hidrograma T
R
= 100 a nos . . . . . 334
xii

INDICE DE CUADROS
D.2. Continuaci on de la tabla Coordenadas hidrograma T
R
= 100 a nos . . . . . 335
D.2. Continuaci on de la tabla Coordenadas hidrograma T
R
= 100 a nos . . . . . 336
D.2. Continuaci on de la tabla Coordenadas hidrograma T
R
= 100 a nos . . . . . 337
D.3. Coordenadas hidrograma T
R
= 200 a nos . . . . . . . . . . . . . . . . . . . 337
D.3. Continuaci on de la tabla Coordenadas hidrograma T
R
= 200 a nos . . . . . 338
D.3. Continuaci on de la tabla Coordenadas hidrograma T
R
= 200 a nos . . . . . 339
D.3. Continuaci on de la tabla Coordenadas hidrograma T
R
= 200 a nos . . . . . 340
D.3. Continuaci on de la tabla Coordenadas hidrograma T
R
= 200 a nos . . . . . 341
D.4. Coordenadas hidrograma T
R
= 500 a nos . . . . . . . . . . . . . . . . . . . 341
D.4. Continuaci on de la tabla Coordenadas hidrograma T
R
= 500 a nos . . . . . 342
D.4. Continuaci on de la tabla Coordenadas hidrograma T
R
= 500 a nos . . . . . 343
D.4. Continuaci on de la tabla Coordenadas hidrograma T
R
= 500 a nos . . . . . 344
D.4. Continuaci on de la tabla Coordenadas hidrograma T
R
= 500 a nos . . . . . 345
D.5. Resultados par ametros hidr aulicos T
R
= 50 a nos . . . . . . . . . . . . . . . 345
D.5. Continuaci on de la tabla parametros hidr aulicos T
R
= 50 a nos . . . . . . . 346
D.5. Continuaci on de la tabla parametros hidr aulicos T
R
= 50 a nos . . . . . . . 347
D.5. Continuaci on de la tabla parametros hidr aulicos T
R
= 50 a nos . . . . . . . 348
D.5. Continuaci on de la tabla parametros hidr aulicos T
R
= 50 a nos . . . . . . . 349
D.5. Continuaci on de la tabla parametros hidr aulicos T
R
= 50 a nos . . . . . . . 350
D.5. Continuaci on de la tabla parametros hidr aulicos T
R
= 50 a nos . . . . . . . 351
D.6. Resultados par ametros hidr aulicos T
R
= 100 a nos . . . . . . . . . . . . . . 351
D.6. Continuaci on de la tabla parametros hidr aulicos T
R
= 100 a nos . . . . . . . 352
xiii

INDICE DE CUADROS
D.6. Continuaci on de la tabla parametros hidr aulicos T
R
= 100 a nos . . . . . . . 353
D.6. Continuaci on de la tabla parametros hidr aulicos T
R
= 100 a nos . . . . . . . 354
D.6. Continuaci on de la tabla parametros hidr aulicos T
R
= 100 a nos . . . . . . . 355
D.6. Continuaci on de la tabla parametros hidr aulicos T
R
= 100 a nos . . . . . . . 356
D.6. Continuaci on de la tabla parametros hidr aulicos T
R
= 100 a nos . . . . . . . 357
D.7. Resultados par ametros hidr aulicos T
R
= 200 a nos . . . . . . . . . . . . . . 357
D.7. Continuaci on de la tabla parametros hidr aulicos T
R
= 200 a nos . . . . . . . 358
D.7. Continuaci on de la tabla parametros hidr aulicos T
R
= 200 a nos . . . . . . . 359
D.7. Continuaci on de la tabla parametros hidr aulicos T
R
= 200 a nos . . . . . . . 360
D.7. Continuaci on de la tabla parametros hidr aulicos T
R
= 200 a nos . . . . . . . 361
D.7. Continuaci on de la tabla parametros hidr aulicos T
R
= 200 a nos . . . . . . . 362
D.7. Continuaci on de la tabla parametros hidr aulicos T
R
= 200 a nos . . . . . . . 363
D.8. Resultados par ametros hidr aulicos T
R
= 500 a nos . . . . . . . . . . . . . . 363
D.8. Continuaci on de la tabla parametros hidr aulicos T
R
= 500 a nos . . . . . . . 364
D.8. Continuaci on de la tabla parametros hidr aulicos T
R
= 500 a nos . . . . . . . 365
D.8. Continuaci on de la tabla parametros hidr aulicos T
R
= 500 a nos . . . . . . . 366
D.8. Continuaci on de la tabla parametros hidr aulicos T
R
= 500 a nos . . . . . . . 367
D.8. Continuaci on de la tabla parametros hidr aulicos T
R
= 500 a nos . . . . . . . 368
D.8. Continuaci on de la tabla parametros hidr aulicos T
R
= 500 a nos . . . . . . . 369
xiv

Indice de guras
2.1. Hietograma: Intensidad-Tiempo . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2. Distribuci on de tormenta de 24 horas NRCS . . . . . . . . . . . . . . . . . 11
2.3. Distribuci on de tormenta de los cuatro tipos NRCS . . . . . . . . . . . . . 12
2.4. Soluci on graca de la ecuaci on P
e
=
(P0,2S)
2
P+0,8S
, (Fuente: Chapter 10 Esti-
mation of Direct Runo from Storm Rainfall ) . . . . . . . . . . . . . . . . 16
2.5. Hidrograma Unitario: Principio de Proporcionalidad . . . . . . . . . . . . . 20
2.6. Hidrograma Unitario Sintetico del NRCS . . . . . . . . . . . . . . . . . . . 22
2.7. a) Hidrograma Unitario est andar (t
p
= 5,5t
r
); b) Hidrograma Unitario
requerido (t
p
= 5,5t
r
). Fuente [11] . . . . . . . . . . . . . . . . . . . . . . . 23
2.8. PLEDER: Coordenadas del Hidrograma Unitario Sintetico Snyder . . . . 25
2.9. Sistema hidrologico: continuidad de agua almacenada. . . . . . . . . . . . . 28
3.1. Fuerza Actuante en un Fluido . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.2. Secci on Transversal en Cauces Naturales . . . . . . . . . . . . . . . . . . . 49
3.3. Elementos geometricos de las Secciones Transversales en: i, j, k . . . . . . . 49
3.4. Pendiente del banco izquierdo a la supercie libre . . . . . . . . . . . . . . 57
3.5. Pendiente del banco derecho a la supercie libre . . . . . . . . . . . . . . . 57
xv

INDICE DE FIGURAS
3.6. Esquema para supercie libre de agua . . . . . . . . . . . . . . . . . . . . . 60
3.7. Sistema de clasicacion de perles de ujo gradualmente variado . . . . . . 62
3.8. Balance de Energa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.1. Representaci on de la secci on transversal en el Metodo Alpha . . . . . . . . 72
4.2. Secci on transversal compuesta con llanuras de inundaci on . . . . . . . . . . 75
4.3. Malla Uni-dimensional, Modelo de cauce en 1D . . . . . . . . . . . . . . . 79
5.1. Secci on transversal en cauce principal denido . . . . . . . . . . . . . . . . 96
5.2. Secci on transversal en cauce principal indenido . . . . . . . . . . . . . . . 96
5.3. Secci on transversal, Socavaci on general . . . . . . . . . . . . . . . . . . . . 100
5.4. Franja en estudio para la socavacion . . . . . . . . . . . . . . . . . . . . . 100
6.1.

Icono: PLIILA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
6.2.

Icono: PLNRCS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
6.3.

Icono: PLLLES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
6.4.

Icono: PLCNC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
6.5.

Icono: PLHU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
6.6.

Icono: PLHSTC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
6.7.

Icono: PLHCAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
6.8.

Icono: PLHPSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
6.9.

Icono: PLHTST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
6.10.

Icono: PLHRES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114


6.11.

Icono: PLHDEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114


xvi

INDICE DE FIGURAS
6.12.

Icono: PLHSOC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114


6.13.

Icono: PLHSCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115


6.14. PLEDER, paneles Ribbon . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
6.15. PLEDER, datos Transformaci on Lluvia Escorrenta . . . . . . . . . . . . . 116
6.16. PLEDER, area desde una polilnea . . . . . . . . . . . . . . . . . . . . . . 117
6.17. PLEDER, curva N umero Compuesto . . . . . . . . . . . . . . . . . . . . . 117
6.18. PLEDER, c alculo del tiempo de retardo . . . . . . . . . . . . . . . . . . . 118
6.19. PLEDER, modelo meteorologico NRCS . . . . . . . . . . . . . . . . . . . . 119
6.20. Hidrograma T
R
= 50 a nos . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
6.21. Hidrograma T
R
= 100 a nos . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
6.22. Hidrograma T
R
= 200 a nos . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
6.23. Hidrograma T
R
= 500 a nos . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
6.24. Planta Ro Huallaga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
6.25. PLEDER, secciones transversales . . . . . . . . . . . . . . . . . . . . . . . 123
6.26. AutoCAD secciones transversales . . . . . . . . . . . . . . . . . . . . . . . 124
6.27. PLEDER, c alculo del ujo permanente . . . . . . . . . . . . . . . . . . . . 125
6.28. PLEDER, resultados-par ametros hidraulicos . . . . . . . . . . . . . . . . . 126
6.29. Niveles de supercie libre en las secciones transversales . . . . . . . . . . . 126
6.30. PLEDER, par ametros socavaci on general . . . . . . . . . . . . . . . . . . . 127
6.31. Socavaciones en las secciones transversales . . . . . . . . . . . . . . . . . . 128
xvii
Captulo 1
INTRODUCCI

ON
1.1. Antecedentes
A inicios de los a nos 60, con la aparici on de las primeras computadoras se realizaron
numerosos programas para calcular y/o transformar la lluvia-escorrenta y tr ansito de
ujos en canales, aplicando distintas metodologas, pero en estos a nos, a un era limitado
desarrollar programas con variables m ultiples debido a las limitaciones de las memorias
que ofrecan en ese entonces; tal es el caso del desarrollo de programas para la hidrologa
determinstica y algunos estocasticos con series limitadas debido a las dimensiones cortas
de sus matrices. Conforme pasaron los tiempos y paralelo al avance de la tecnologa, se
mejoro considerablemente metodologas computacionales dentro del area de hidr aulica e
hidrologa, realizando softwares en su m axima expresi on, considerando modelos tridimen-
sionales en el espacio y no permanentes en el tiempo, con soluciones numericas avanzadas
tales como el Metodo de los Elementos Finitos y/o soluciones mediante la utilizacion de
Inteligencia Articial, tales como Algoritmos Geneticos, Redes Neuronales Articiales,
entre otros.
1
1.2. Necesidad o motivaci on de la investigacion
En la actualidad, existen numerosos programas de otras latitudes, tales como el HEC
RAS, HEC HMS, GSTAR, MIKE 11, RIVER CAD y muchos m as, los mismos que se
utilizan directamente sin conocer el fundamento te orico al detalle, lo que nos conlleva en
muchos casos a una interpretaci on inadecuada. Problemas que surgen debido a que estos
programas en su gran mayora se encuentran en idioma extranjero y algunos casos con
par ametros de acuerdo a su zona de estudio.
PLEDER, en su primera versi on trata de mejorar muchas dicultades como es la recepcion
de datos dentro del programa AutoCAD, aprovechando las bondades y herramientas que
ofrece este programa, tales como creaci on de secciones transversales a partir de polilneas,
c alculo de area de un polgono (cuencas hidrologicas), calculos de distancias automaticas
a escalas reales, puntos de referencia en coordenadas UTM y m as. Todo esto es posible
gracias a que PLEDER esta programado en el lenguaje C++ y libreras ObjectARX,
facilitando de manera directa el enlace con el programa AutoCAD.
Se espera que el trabajo constituya una herramienta util, no s olo para profesionales in-
mersos en el area de hidraulica e hidrologa, sino que tambien se convierta en una ayuda
para los estudiantes interesados en el tema.
1.2. Necesidad o motivaci on de la investigaci on
Este tema de investigacion, surge con la necesidad de contar con una herramienta de tra-
bajo con m ultiples opciones, de tal forma que faciliten la elaboraci on de diversos proyectos
como es el caso de obras hidr aulicas e hidrol ogicas propios de la Ingeniera Civil; por otro
lado el interes de ampliar y profundizar mis conocimientos de programaci on aplicada,
permitieron hacer una realidad y lograr el producto nal como es PLEDER en su primera
versi on.
2
1.3. Objetivos de la tesis
1.3. Objetivos de la tesis
1.3.1. Generales
Contribuir con las investigaciones de la ingeniera hidr aulica, desarrollando un pro-
grama que incluya el estudio hidrologico, hidraulico e hidr aulica uvial para de-
terminar los niveles de la supercie libre de agua en cauces naturales. La etapa
hidrol ogica se desarrolla teniendo en cuenta la programacion desde la generacion
de hietogramas hasta la obtenci on de hidrogramas de m aximas avenidas. La eta-
pa hidraulica tiene un acercamiento al modelo HEC 2 (en la actualidad HECRAS),
pero en versi on nacional de la Escuela de Ingeniera Civil de la Universidad Nacional
de San Crist obal de Huamanga. Finalmente la etapa de Hidr aulica Fluvial, permite
determinar la socavacion general de tal manera que se pueda instalar una estructura
uvial como gaviones o enrocado de manera eciente y segura.
1.3.2. Especcos
El objetivo de la presentaci on de la tesis Programa Lluvia Escorrenta Para Si-
mulacion de Defensas Ribere nas con ObjectARX C++, es el de obtener el Ttulo
Profesional de Ingeniero Civil.
Realizar la programaci on en a nivel hidrol ogico, considerando para ello la transfor-
macion lluvia escorrenta a traves de los siguientes modelos:
Generaci on de Hietogramas: IILA - SENAMHI - UNI y Hietograma sintetico
del SCS.
Generaci on de Hidrogramas unitarios sinteticos: SCS y Snyder.
Generaci on de Hidrogama de m aximas avenidas: Metodo de convolucion dis-
creta
3
1.4. Organizacion de la tesis
Realizar la programaci on a nivel hidraulico considerando para ello la programaci on
de un metodo adecuado para la simulacion de ujo permanente gradualmente va-
riado, teniendo en cuenta lo siguiente:
Programaci on del metodo del paso est andar para simulaci on de cauces aluviales
en ujo permanente gradualmente variado a traves de n secciones transversales
de un ro.
Incorporaci on de coecientes de rugosidad de manning por tramos en la secci on
transversal que permita acercarse mas a una situaci on real de tr ansito del ujo
a traves de un ro.
Perdidas por contraccion y expansion.
Realizar la programacion a nivel de hidraulica uvial, que permita obtener la so-
cavaci on general en cada una de las secciones transversales naturales de un rio,
considerando para ello los datos del material que lo conforman cada una de las
secciones.
Todos los tres aspectos anteriores ser an enlazados de tal manera de contar con una
herramienta de programacion sumamente util que permita dise nar en forma segura
y optima una defensa ribere na.
1.4. Organizacion de la tesis
El Captulo 1, describe en forma general la tesis en introduccion, motivaci on de la
investigaci on, los objetivos de la tesis y la organizaci on de la presente investigacion.
En el Captulo 2, se presenta conceptos hidrologicos y diagramas de ujos de la
programaci on realizada. Este captulo resume los metodo empleados en el progra-
ma, as como la teora necesaria tales como hietogramas IILA, NRCS, hidrogramas
4
1.4. Organizacion de la tesis
unitarios sinteticos del NRCS, Snyder y el metodo de convolucion para realizar la
transformacion Lluvia - Escorrenta.
El Captulo 3, enfoca la teora basica y esencial de la hidr aulica, desde conceptos
b asicos necesarios para la interpretaci on de los ujos en cauces naturales o ros, tales
como la ecuaci on de movimiento y tipos de ujo. As mismo, contiene el an alisis de
las secciones transversales en cauces naturales principalmente para calcular tirantes
normales en secciones complejas mediante el metodo de Newton Raphson. Estos
resultados son importantes para la ejecuci on del perl de la supercie libre de agua
(ver captulo 4) como condicion de borde, ya sea para ujos subcrticos (downstream)
o ujos supercrticos (upstream).
El Captulo 4, emprende la teora de los modelos numericos y los diagramas de
ujo del componente hidr aulico, conteniendo la formulaci on de los ujos 1D con
propiedades hidr aulicas compuestas del ro. Es este captulo se discretizan las ecua-
ciones no lineales de la supercie libre de agua, indicando el metodo de soluci on.
El Captulo 5, corresponde a la teora del componente hidr aulica uvial y su res-
pectivo diagrama de ujo. Se establecen las ecuaciones de las socavaciones generales
mediante el criterio propuesto por Lischtvan-Lebeviev, teniendo en cuenta los m ulti-
ples parametros o datos necesarios para este n.
El Captulo 6, es la aplicaci on pr actica de la herramienta en los tres componentes
mencionados, especicando las distintas funciones para su correcto uso. Se detalla La
aplicacion pr actica desde el ingreso de los datos, ejecuci on del programa y obtenci on
de los resultados en los tres componentes.
El Captulo 7, abarca las conclusiones que se obtuvieron durante la realizaci on
de la presente investigaci on, as mismo las recomendaciones seg un las experiencias
adquiridas.
5
1.4. Organizacion de la tesis
Bibliografa, Ofrece una amplia relaci on de bibliografa empleada para la realiza-
ci on de la investigacion, en los componentes Hidrologa, Hidraulica, Metodo Numeri-
cos, Programacion C++, Matem aticas Avanzadas, Papers, Journals, Manuales de
Aplicaci on y algunos Apuntes de Clase.
Apendice A, presenta el contenido del c odigo fuente C++ en el componente
Hidrol ogico.
Apendice B, presenta el contenido del c odigo fuente C++ en el componente
Hidraulico.
Apendice C, presenta el contenido del codigo fuente C++ en el componente
Hidraulica Fluvial.
Apendice D, contiene los resultados de la aplicacion practica del programa.
Apendice E, corresponde a los planos, cartogr acos, red topol ogico, altitudinal,
perles longitudinales y los planos planta-perl del ro Huallaga.
6
Captulo 2
TEOR

IA HIDROL

OGICA Y
DIAGRAMAS DE FLUJO
2.1. Introducci on
En la mayora de los proyectos de sistema de recursos hdricos, tales como analisis o
simulaci on de cuenca, prevenci on de avenidas, dise no de embalses, aliviaderos, entre otros
muchos, conllevan a sustentar un sistema hidrologico que comprende desde la entrada de
datos tales como precipitaciones y/o caudales de registro en el punto de interes, circulaci on
o propagaci on de ujos (cuenca, tramo del canal, embalse) y nalmente el caudal de salida,
que es el par ametro importante para los dise nos de prevenci on o simulaciones descritas.
En hidrologa supercial el objetivo central es la de obtener estos caudales de las corrientes
superciales, para este n se emplea varios metodos garantizandonos y/o acerc andonos lo
m as real posible.
En este captulo se hace referencia los datos necesarios que considera el programa para
transformar la lluvia o precipitaciones netas en caudales (hidrogramas) para distintas
variaciones de tiempo, as mismo, se detalla mediante diagramas de ujo el procedimiento
7
2.2. Desarrollo de Hietogramas de dise no
o comportamiento que realiza PLEDER en esta transformaci on, obteniendo los resultados
en tablas dinamicas que facilitan su exportacion a extensiones tipo excel y resultados
gr acos del hidrograma.
2.2. Desarrollo de Hietogramas de dise no
La palabra Hietograma proviene del termino griego Hietos, que signica lluvia. Es un
resumen gr aco escalonado de un conjunto de datos, donde nos permite ver pautas que
son difciles de observar en una simple tabla numerica (expresa precipitacion en funci on
del tiempo). En ordenadas puede gurar la precipitacion cada (mm), o bien la intensidad
de precipitacion (mm/hora). Generalmente se representa como un histograma (graco
barras), aunque a veces tambien se expresa como un gr aco de lneas.
Figura 2.1: Hietograma: Intensidad-Tiempo
8
2.2. Desarrollo de Hietogramas de dise no
2.2.1. IILA-SENAMHI-UNI
Las precipitaciones maximas e intensidades m aximas de tormentas han sido estudiadas
regionalmente por el Instituto Italiano Latino Americano IILA (Convenio Internacional
IILA-SENAMHI-UNI) Estudio de la Hidrologa del Per u 1983, cuyas f ormulas son:
para 3 t 24 horas:
P
t,T
= a (1 +KLogT) t
n
(2.2.1)
i
t,T
= a (1 +KLogT) t
n1
(2.2.2)
para t 3 horas:
P
t,T
= a (1 +KLogT) (t +b)
n1
t (2.2.3)
i
t,T
= a (1 +KLogT) (t +b)
n1
(2.2.4)
Donde P
t,T
, i
t,T
son la precipitacion y la intensidad de tormenta para una duracion t (en
horas) y de periodo de retorno T (en a nos) dados; a,K y n son constantes regionales. El
par ametro b se clasica seg un las regiones naturales del Per u
Cuadro 2.1: Par ametro regional b
Regi on Parametro b
Costa, Centro y Sur 0.50
Sierra 0.40
Costa Norte y selva 0.20
El valor 0.40 horas (sierra), fue determinado en base a estudios de pluvi ografos en las
estaciones de Abancay y Chuquibamba.
2.2.2. Hietogramas sinteticos del NRCS
El Natural Resources Conservation Service del US (NRCS) o conocido antes como (SCS)
Soil Conservation Service, desarroll o hidrogramas sinteticos de tormentas para utilizarse
9
2.2. Desarrollo de Hietogramas de dise no
en los Estados Unidos con duraciones de tormentas de 6 y 24 horas. Estos hietogramas se
dedujeron al utilizar la informacion presentada por Hersheld (1961) y Miller Frederick y
Tracey (1973) y datos de tormentas adicionales (Fuente [11]).
La distribuci on de precipitaciones SCS tiene una larga historia y este ha demostrado tener
exito a traves de los a nos. Se ha desarrollado cuatro tipos de hietogramas Tipo I, Tipo
IA, Tipo II y nalmente el Tipo III, cuyas distribuciones son para 6 y 24 horas, tambien
se incluye un hietograma de 48 horas para el Tipo II.
Los tipos I y IA corresponde al clima martimo del pacco con inviernos h umedos y
veranos secos, el tipo III representa zonas a lo largo del Golfo de Mexico y de las zonas
costeras del Atl antico, donde las tormentas tropicales a las 24 horas del da son grandes
cantidades de precipitacion, y el tipo II representa el resto del pas (NRCS,1986).
10
2.2. Desarrollo de Hietogramas de dise no
0 2 4 6 8 10 12 14 16 18 20 22 24
0
0.2
0.4
0.6
0.8
1
TORMENTA TIPO IA
0 2 4 6 8 10 12 14 16 18 20 22 24
0
0.2
0.4
0.6
0.8
1
TORMENTA TIPO II
0 2 4 6 8 10 12 14 16 18 20 22 24
0
0,2
0,4
0,6
0,8
1
TORMENTA TIPO III
0 2 4 6 8 10 12 14 16 18 20 22 24
0
0.2
0.4
0.6
0.8
1
TORMENTA TIPO I
Tiempo (horas)
Tiempo (horas)
Tiempo (horas)
Tiempo (horas)
Pt/P24
Pt/P24
Pt/P24 Pt/P24
Figura 2.2: Distribuci on de tormenta de 24 horas NRCS
En la gura, cada tipo de tormenta se distribuye en 24 horas que permite compararlos, en
particular, en las pendientes de las curva durante intervalos de tiempo determinados nos
indica la intensidad de la precipitaci on media de ese intervalo de tiempo. Por ejemplo, la
tormenta del tipo tipo IA es la menos intensa, mientras que el tipo II es la mas intensa.
11
2.3. Tasas de Inltracion - Metodo del NRCS
0 2 4 6 8 10 12 14 16 18 20 22 24
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1


Tipo I
Tipo IA
Tipo II
Tipo III
Tiempo (horas)
Pt/P24
Figura 2.3: Distribuci on de tormenta de los cuatro tipos NRCS
2.3. Tasas de Inltraci on - Metodo del NRCS
El objetivo de esta secci on es conseguir la precipitaci on neta
1
o precipitaci on efectiva la
que produce escorrenta directa, por lo tanto, previamente debemos separar, que parte de
la precipitacion total va a generar escorrenta directa. As mismo identicar el resto de la
precipitacion que se ha inltrado o una peque na parte pudo haberse quedado retenida en
depresiones superciales.
Para obtener estas precipitaciones, empleamos el metodo del NRCS, cuyo procedimiento
1
Precipitacion Neta: generalmente se utiliza para la precipitacion que produce escorrenta directa,
aunque en otros estudios se reere a la diferencia precipitacion - evaporacion
12
2.3. Tasas de Inltracion - Metodo del NRCS
se estableci o empricamente USA (1964). Este metodo fue producto de investigacion de
a nos, donde participaron numerosos investigadores tales como Mockus 1949, Sherman
1942, Andrews 1954 y Ogrosky 1956.
2
.
La ecuacion de la escorrenta efectiva cuando P > I
a
es:
P
e
=
(P I
a
)
2
(P I
a
) +S
(2.3.1)
y cuando P I
a
P
e
= 0 (2.3.2)
Donde:
P
e
= Profundidad en exceso de precipitacion o escorrenta directa.
P = Profundidad de precipitaci on.
I
a
= Abstracci on inicial.
S = Potencial de retencion m axima.
Estas relaciones son basados en la conservaci on de masa (Mockus) La escorrenta directa P
e
es siempre menor o igual a la profundidad de precipitacion P, de manera similar, despues
de que la escorrenta se inicia, la profundidad adicional del agua retenida en la cuenca
F
a
es menor o igual a alguna retenci on potencial maxima S. Existe una cierta cantidad
de precipitaci on I
a
(Abstraccion inicial antes del estrechamiento) en donde no ocurrir a
escorrenta, luego la escorrenta potencial es P I
a
. La hipotesis del metodo de NRCS,
consiste en que las relaciones de las dos cantidades reales y las dos cantidades potenciales
sean iguales. Mockus determino estas relaciones primero, considerando la condici on en
que la abstracci on inicial I
a
= 0 y obtuvo.
2
Chapter 10. Estimation of Direct Runo from Storm Rainfall
13
2.3. Tasas de Inltracion - Metodo del NRCS
F
a
S
=
P
e
P
(2.3.3)
Donde:
F
a
= Retencion actual despues de la escorrenta dada.
Para satisfacer la conservaci on de masa se tiene.
F
a
= P P
e
(2.3.4)
Sustituyendo la ecuaci on 2.3.4 en 2.3.3 se tiene.
P P
e
S
=
P
e
P
(2.3.5)
Despejando P
e
P
e
=
P
2
P +S
(2.3.6)
Este es la relaci on precipitacion-escorrenta bajo la condici on de que la abstracci on inicial
es cero (I
a
= 0).
Cuando la abstraccion inicial no es cero, la cantidad de la precipitaci on disponible para
la escorrenta es (P I
a
) en lugar de P . Sustituyendo (P I
a
) para P en la ecuaci on
2.3.3 resulta.
F
a
S
=
P
e
P I
a
(2.3.7)
Donde:
14
2.3. Tasas de Inltracion - Metodo del NRCS
F
a
S y P
e
(P I
a
)
Para este caso la conservacion de masa es dado por:
F = (P I
a
) P
e
(2.3.8)
Sustituyendo la ecuaci on 2.3.8 en 2.3.7.
(P I
a
) P
e
S
=
P
e
P I
a
(2.3.9)
Resolviendo para la profundidad en exceso de precipitacion o escorrenta directa P
e
.
P
e
=
(P I
a
)
2
(P I
a
) +S
(2.3.10)
Es la ecuaci on b asica para estimar la profundidad en exceso de precipitacion o escorren-
ta directa de una tormenta utilizando el metodo NRCS. La abstracci on inicial consiste
principalmente en intercepci on, inltraci on durante los comienzos de la tormenta, y las
depresiones o almacenamientos en la supercie. Establecen una relacion emprica
1
para
estimar esta abstraccion inicial I
a
, que est a en funci on al potencial maximo de retencion
S.
I
a
= 0,2S (2.3.11)
Reemplazando en la ecuaci on 2.3.10.
P
e
=
(P 0,2S)
2
P + 0,8S
(2.3.12)
1
Resultado obtenido al estudiar muchas cuencas experimentales peque nas
15
2.3. Tasas de Inltracion - Metodo del NRCS
AL presentar en gracas la informaci on de P y P
e
para muchas cuencas, el NRCS encontr o
curvas como las que se muestra en la gura 2.4. Para estandarizar estas curvas, se dene un
n umero adimensional de curva CN, tal que 0 CN 100. Para supercies impermeables
y supercies de agua CN = 100, para supercies naturales CN < 100.
Figura 2.4: Soluci on gr aca de la ecuaci on P
e
=
(P0,2S)
2
P+0,8S
, (Fuente: Chapter 10 Estimation
of Direct Runo from Storm Rainfall )
El N umero de Curva CN en relaci on a S en pulgadas (in).
S =
1000
CN
10 (2.3.13)
El N umero de Curva CN en relaci on a S en milmetros (mm).
16
2.3. Tasas de Inltracion - Metodo del NRCS
CN =
25400
254 +S
(2.3.14)
Los n umeros de curva que se muestran en la gura 2.4 se aplican para condiciones an-
tecedentes de Humedad (AMC, por sus siglas en ingles) normales (AMC II). Para condi-
ciones secas (AMC I) o condiciones h umedas (AMC III), los n umeros de curva equivalente
pueden calcularse por
CN(I) =
4,2CN(II)
10 0,058CN(II)
(2.3.15)
CN(III) =
23CN(II)
10 0,13CN(II)
(2.3.16)
Cuadro 2.2: Clasicacion de clases antecedentes de humedad (AMC) para el metodo de
abstracciones de lluvia del NRCS
Lluvia antecedente total de 5 das (pulg)
Grupo AMC Estaci on Estaci on
Inactiva de crecimiento
I Menor que 0.5 Menor que 1.4
II 0.5 a 1.1 1.4 a 2.1
III Sobre 1.1 Sobre 2.1
(Fuente: NRCS, 1972.)
En el cuadro 2.2 se muestra el rango para las condiciones antecedentales de humedad para
cada clase. Los n umeros de curva han sido tabulados por el NRCS con base en el tipo de
suelo y uso de la tierra. Se denen cuatro tipos de suelo( ver tabla 2.3). Los valores de
CN para varios tipos de uso de tierra en estos tipos de suelo, se pueden obtener la tabla
5.5.2 Hidrologa Aplicada Vent Te Chow, Pag. 154.
17
2.4. Hidrogramas Unitarios Sinteticos: NRCS y Snyder
Cuadro 2.3: Grupo de suelo hidrologico, para el c alculo del CN
GRUPOS DESCRIPCI

ON
Grupo A : Bajo potencial de escurrimiento. Suelos que tienen al-
tas velocidades de inltraci on cuando est an mojados y
consisten principalmente de arena y gravas profundas,
con bueno a exceso drenaje. Estos suelos tienen altas
velocidades de transmision del agua.
Grupo B : Suelos con moderada velocidad de inltracion cuando
est an mojados y consisten principalmente de suelos con
cantidades moderadas de texturas nas y gruesas, con
drenaje medio y algo profundo. Son basicamente suelos
arenosos.
Grupo C : Suelos que tienen bajas velocidades de inltracion cuan-
do estan mojados, consisten principalmente de suelos
que tienen un estrato que impide el ujo del agua.
Son suelos con texturas nas (margas arcillosas, mar-
gas arenosas poco profundas). Estos suelos tienen bajas
velocidades de transmision.
Grupo D : Alto potencial de escurrimiento. Suelos que tienen muy
bajas velocidades de inltraci on cuando estan mojados
y consisten principalmente de suelos arcillosos con alto
potencial de hinchamiento, suelos con nivel fre atico y
permanente, suelos con estratos arcillosos cerca de sus
supercie, o bien, suelos someros sobre horizontes im-
permeables.
2.4. Hidrogramas Unitarios Sinteticos: NRCS y Sny-
der
2.4.1. Hidrograma Unitario
El Hidrograma Unitario es ampliamente utilizado como algoritmo de soluci on para la
transformacion lluvia escorrenta o lluvia efectiva en caudal. El hidrograma unitarios
1
es el hidrograma de escurrimiento supercial que resulta de una lluvia efectiva en exceso
1
Conocido originalmente como graca unitaria. Fue Propuesto por primera vez por Sherman en 1932.
18
2.4. Hidrogramas Unitarios Sinteticos: NRCS y Snyder
unitaria, distribuida uniformemente durante un perodo de tiempo especicado, en un
punto de un curso de agua.
Este metodo se basa en dos hip otesis:
1. La respuesta de la cuenca ante el proceso de escorrenta directa presenta un com-
portamiento lineal, emple andose los principios de proporcionalidad y superposici on.
2. No se tiene en cuenta la variabilidad temporal de las caractersticas de la cuenca,
de manera que una misma lluvia efectiva produce siempre el mismo hidrograma de
escorrenta directa.
Est as hipotesis presenta las siguientes condiciones:
La lluvia en exceso o lluvia efectiva es de intensidad constante dentro de una duracion
efectiva, exigiendo que las tormentas sean de corta duraci on (tiempo base corto y
un caudal pico unico).
La lluvia en exceso esta distribuida de manera uniforme sobre toda el area de drena-
je. El area de drenaje no debe ser muy grande o bien deber a ser subdividida en
subcuencas de modo que se cumpla esta suposici on
2
La duraci on del escurrimiento directo (tiempo base del hidrograma unitario) que
resulta del exceso de lluvia de duracion conocida es constante.
El hidrograma unitario de una duraci on determinada es unico para una cuenca e
invariante en el tiempo. las caractersticas del cauce no deben tener cambios y la
cuenca no debe tener almacenamientos apreciables (no debe tener embalses).
2
El orden de magnitud del lmite superior que se maneja es de 300 a 400 km
2
(Martnez Martn 1994)
19
2.4. Hidrogramas Unitarios Sinteticos: NRCS y Snyder
Principios Basicos
La derivaci on y aplicaci on del Hidrograma Unitario esta basada en una teora emprica
que est a conformada por dos teoremas o principios basicos que se aplican en todos los
casos:
Principio de Proporcionalidad: Para una lluvia efectiva de una duraci on dada, el
volumen de lluvia, que es igual al volumen de escorrenta directa, es proporcional a la
intensidad de dicha lluvia. Como los hidrogramas de escorrenta directa correspondiente
a lluvias efectivas de la misma duracion, tienen el mismo tiempo base, se concluye que las
ordenadas de dichos hidrogramas seran proporcionales a la intensidad de la lluvia efectiva
(gura 2.5).
Figura 2.5: Hidrograma Unitario: Principio de Proporcionalidad
20
2.4. Hidrogramas Unitarios Sinteticos: NRCS y Snyder
P
e
1
P
e
2
=
i
e
1
i
e
2
=
Q
e
1
Q
e
2
= k (2.4.1)
Donde P
e
es el volumen de lluvia efectiva, i
e
la intensidad efectiva y Q
e
, el caudal de
escorrenta directa.
Principio de Superposicion: Los caudales de un hidrograma total de escorrenta direc-
ta producidos por lluvias efectivas sucesivas pueden ser hallados sumando los caudales de
los hidrogramas de escorrenta directa correspondientes a las lluvias efectivas individuales,
teniendo en cuenta los tiempos en que ocurren tales lluvias.
2.4.2. Hidrograma Unitario Sintetico
Para emplear el metodo del hidrograma unitario es necesario conocer los registros de pre-
cipitacion y tener al menos un hidrograma medido a la salida de la cuenca. Sin embargo
en la mayora de las cuencas, especialmente en nuestro pas, no se cuenta con estaciones
hidrometricas o registros pluviogr acos que sirven para generar dicho dato importante en
la utilizacion del metodo hidrograma unitario. Para estos casos, podemos utilizar algu-
nas formulas empricas que, basandose en las caractersticas fsicas de la cuenca (super-
cie, pendiente media, longitud del cauce, etc.) proporcionan una idea del hidrograma
resultante. Los hidrogramas unitarios obtenidos de esta forma se denominan hidrogramas
unitarios sinteticos.
Hidrograma Unitario Sintetico NRCS
Tambien conocido como el hidrograma adimensional del NRCS, es un hidrograma en el
cual se expresa por la relacion del caudal q con respecto al caudal pico q
p
y el tiempo por
la relaci on del tiempo t con respecto al tiempo de ocurrencia del pico en el hidrograma
unitario, T
p
. Para este metodo es necesario conocer el caudal pico y el tiempo de retardo
21
2.4. Hidrogramas Unitarios Sinteticos: NRCS y Snyder
para la duracion de exceso de precipitacion, as se construye el hidrograma unitario a
partir del hidrograma sintetico adimensional para la cuenca dada.
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
t/Tp
q
/
q
p
Figura 2.6: Hidrograma Unitario Sintetico del NRCS
La gura 2.6 muestra uno de estos hidrogramas adimensionales, con una forma similar a la
que puede esperarse en una cuenca real. Basandose en una gran cantidad de hidrogramas
unitarios, el NRCS sugiere que el tiempo de recesi on puede aproximarse a 1,67T
p
. Como
el area del hidrograma es igual a 1cm, se demuestra que:
q
p
=
2,08A
T
p
(2.4.2)
Donde q
p
es el caudal pico [m
3
/s cm], A es el area de drenaje [km
2
] y T
p
es el tiempo
pico [h]. Un estudio de muchas cuencas rurales grandes y peque nas indica que el tiempo
de retardo o tambien llamado t
lag
es igual al 60 % del tiempo de concentraci on.
t
p
= t
lag
= 0,60T
c
(2.4.3)
Bajo esta condicion se obtiene el tiempo de ocurrencia del pico T
p
que se expresa en
terminos del tiempo de retardo t
p
y de la duraci on de la lluvia efectiva t
r
.
22
2.4. Hidrogramas Unitarios Sinteticos: NRCS y Snyder
T
p
=
t
r
2
+t
p
(2.4.4)
Hidrograma Unitario Sintetico de Snyder
Snyder (1938), realizo estudios en cuencas de los Montes Apalaches (USA), con areas
de 30 a 30000 km
2
y encontro relaciones sinteticas de un hidrograma unitarios sintetico
estandar, como se muestra en la gura 2.7a, a partir de las cuales pueden calcularse las
caractersticas de un hidrograma unitarios requerido 2.7b.
Figura 2.7: a) Hidrograma Unitario est andar (t
p
= 5,5t
r
); b) Hidrograma Unitario re-
querido (t
p
= 5,5t
r
). Fuente [11]
Para una duraci on de lluvia efectiva determinada, los par ametros del hidrograma unitario
requerido son:
Retardo de la cuenca, t
pR
: diferencia de tiempo entre el centroide del hietograma
efectivo y el pico del hidrograma unitario.
Caudal punta o pico por unidad de area de la cuenca, q
pR
.
Tiempo base, t
b
.
23
2.4. Hidrogramas Unitarios Sinteticos: NRCS y Snyder
Ancho W
50
[T] del tiempo unitario al 50 % del caudal pico.
Ancho W
75
[T] del tiempo unitario al 75 % del caudal pico.
Snyder deni o el hidrograma unitario estandar como aquel que cumple que:
t
r
=
t
p
5,5
(2.4.5)
donde t
r
es la duraci on de la lluvia efectiva y t
p
el tiempo de retardo, ambos del hidrograma
unitario estandard. Ademas encontr o que para un hidrograma unitario est andar el tiempo
de retardo en horas es:
t
p
= 0,75C
t
(LL
c
)
0,3
(2.4.6)
Donde L es la longitud del cauce principal hasta la divisoria de aguas arriba [km], L
c
es
la distancia desde la salida de la cuenca hasta el punto del cauce principal m as cercano al
centroide del area de la cuenca [km] y C
t
es un coeciente que vara entre 1.35 (pendientes
altas) y 1.65 (pendientes bajas). Tambien para el hidrograma unitario estandar se encontro
que el caudal pico por unidad de area [m
3
/s km
2
] es:
q
p
=
2,75C
p
t
p
(2.4.7)
Una forma de calcular los par ametros C
t
y C
p
, es a partir de los datos: area de cuenca A
[km
2
], longitud del cauce principal L [km], Longitud hasta el centroide de la cuenca L
c
[km], duraci on t
R
[h], retardo de la cuenca t
pR
[h] y Q
p
[m
3
/s/cm], donde:
Si t
pR
= 5,5t
R
_

_
t
R
= t
r
t
pR
= t
P
q
pR
= q
p
(2.4.8)
24
2.4. Hidrogramas Unitarios Sinteticos: NRCS y Snyder
Si t
pR
= 5,5t
R
_

_
t
p
= t
pR
+
trt
R
4
, con t
r
=
t
pR
0,25t
R
5,25
t
pR
= t
P
q
pR
= q
p
(2.4.9)
Para ambos casos C
t
y C
p
son calculados mediante las ecuaciones 2.4.6 y 2.4.7.
El programa PLEDER, emplea ecuaciones para cada intervalo de tiempo, seg un la gura
2.8, cuyo hidrograma se divide en 6 intervalos (siete vertices).
Figura 2.8: PLEDER: Coordenadas del Hidrograma Unitario Sintetico Snyder
25
2.4. Hidrogramas Unitarios Sinteticos: NRCS y Snyder
Calculo de las ecuaciones lineales para cada tramo del hidrograma unitario
sintetico Snyder
PLEDER, eval ua para cada tramo mediante la ecuacion de la recta Y Y
1
= m(X X
1
)
en el hidrograma dado.
Tramo AB: 0 T
t
R
2
+t
pR

1
3
W
50
Q =
0,5Q
pR
t
R
2
+t
pR

1
3
W
50
T (2.4.10)
Tramo BC:
t
R
2
+t
pR

1
3
W
50
< T
t
R
2
+t
pR

1
3
W
75
Q = 0,5Q
pR
+
3Q
pR
4(W
50
W
75
)
_
T
t
R
2
t
pR
+
1
3
W
50
_
(2.4.11)
Tramo CD:
t
R
2
+t
pR

1
3
W
75
< T
t
R
2
+t
pR
Q = 0,75Q
pR
+
3Q
pR
4W
75
_
T
t
R
2
t
pR
+
1
3
W
75
_
(2.4.12)
Tramo DE:
t
R
2
+t
pR
< T
t
R
2
+t
pR
+
2
3
W
75
Q = Q
pR

3Q
pR
8W
75
_
T
t
R
2
t
pR
_
(2.4.13)
Tramo EF:
t
R
2
+t
pR
+
2
3
W
75
< T
t
R
2
+t
pR
+
2
3
W
50
Q = 0,75Q
pR

3Q
pR
8(W
50
W
75
)
_
T
t
R
2
t
pR

2
3
W
75
_
(2.4.14)
Tramo FG:
t
R
2
+t
pR
+
2
3
W
50
< T t
b
26
2.5. Metodo de Convoluci on discreta para transformacion precipitaci on-escorrenta
Q = 0,50Q
pR

0,5Q
pR
t
b

t
R
2
t
pR

2
3
W
50
_
T
t
R
2
t
pR

2
3
W
50
_
(2.4.15)
Donde: T, es el tiempo que se distribuye a lo ancho del tiempo base t
b
con un intervalo
jo en horas.
Q, es la ordenada del hidrograma unitarios sintetico.
2.5. Metodo de Convoluci on discreta para transfor-
macion precipitacion-escorrenta
Antes de demostrar la ecuaci on de la convoluci on, es necesario conocer la circulaci on
hidrol ogica del ujo o tambien conocida como Circulacion de ujos a traves de sistemas
globales.

Este se reere a que el agua almacenada en sistema hidrol ogico S, puede rela-
cionarse a los caudales de entrada I y de salida Q, mediante la ecuacion de continuidad.
dS
dt
= I Q (2.5.1)
El almacenamiento S, en cualquier instante, puede expresarse por una funci on de al-
macenamiento (CHOW and VENT T [11]) , donde S vara en ascenso y/o descen-
so con el tiempo en la respuesta a I y Q y a sus variaciones con respecto al tiempo
dI/dt, d
2
I/dt
2
, ...dQ/dt, d
2
Q/dt
2
, ....
S = f
_
I,
dI
dt
,
d
2
I
dt
2
, ...Q,
dQ
dt
,
d
2
Q
dt
2
_
(2.5.2)
27
2.5. Metodo de Convoluci on discreta para transformacion precipitaci on-escorrenta
Figura 2.9: Sistema hidrologico: continuidad de agua almacenada.
2.5.1. Sistema Lineal en el tiempo continuo
La funci on de almacenamiento, ecuacion 2.5.2, puede expresarse por la ecuaci on diferencial
lineal con coecientes constantes
S = a
1
I +a
2
dI
dt
+a
3
d
2
I
dt
2
+... +a
n
d
n1
I
dt
n1
+b
1
Q+b
2
dQ
dt
+b
3
d
2
Q
dt
2
+... +b
m
d
m1
Q
dt
m1
(2.5.3)
Donde a
1
, a
2
, ...a
n
, b
1
, b
2
, ...b
m
, son constantes y las derivadas de orden superior se despre-
cian.
Diferenciando esta ecuacion 2.5.3 y reemplazando en la ecuacion de continuidad 2.5.1.
a
n
d
n
I
dt
n
+... +a
n1
d
n1
I
dt
n1
+... +a
2
d
2
I
dt
2
+a
1
dI
dt
I+
b
m
d
m
Q
dt
m
+... +b
m1
d
m1
Q
dt
m1
+... +b
2
d
2
Q
dt
2
+b
1
dQ
dt
+Q = 0
(2.5.4)
simplicando terminos en las operaciones diferenciales se tiene.
N(D) = a
n
d
n
dt
n
+... +a
n1
d
n1
dt
n1
+... +a
2
d
2
dt
2
+a
1
d
dt
1
28
2.5. Metodo de Convoluci on discreta para transformacion precipitaci on-escorrenta
y
M(D) = b
m
d
m
dt
m
... b
m1
d
m1
dt
m1
... b
2
d
2
dt
2
b
1
d
dt
1
por lo tanto la ecuacion 2.5.4 en forma compacta es.
N(D)I M(D)Q = 0 (2.5.5)
Resolviendo queda.
Q(t) =
N(D)
M(D)
I(t) (2.5.6)
La relacion N(D)/M(D) es llamado funcion de transferencia del sistema, que describe la
respuesta de la salida a una secuencia de entrada dada (CHOW and VENT T [11]), as
mismo la ecuacion 2.5.4, representa el modelo general del sistema hidrol ogico.
1
2.5.2. Sistema Lineal en tiempo discreto
En Las aplicaciones practicas, las salidas de los resultados se requieren en intervalos tiempo
discretos
2
, ya que la entrada al sistema se especica como una funci on de tiempo discreto,
por ejemplo, un hietograma de lluvia efectiva que se dan en intervalos de tiempos t; Es
decir, los datos de la lluvia se dan como un conjunto de datos pulso (sistema de informacion
por pulso).

Este sistema se utiliza para la precipitacion y el valor de su funci on de entrada
discreta para el m-esimo intervalo de tiempo es:
P
m
=
_
mt
(m1)t
I()dt , m = 1, 2, 3, ... (2.5.7)
1
Presentada por Chow y Kulandaiswamy
2
Debido a que la mayor parte de la informacion hidrologica solamente esta disponible en intervalos de
tiempo discretos.
29
2.5. Metodo de Convoluci on discreta para transformacion precipitaci on-escorrenta
P
m
es la profundidad de la precipitaci on que cae durante el intervalo de tiempo [L]. El
valor de la salida del sistema en el n-esimo intervalo de tiempo (t = nt) es:
Q
n
= Q(nt) , n = 1, 2, 3, ... (2.5.8)
Q
n
es el valor instantaneo de la tasa de ujo al nal de n-esimo intervalo de tiempo
[L
3
T
1
]. El efecto de un pulso de entrada de duraci on t que empieza en el tiempo
(m1)t sobre la salida en el tiempo t = nt, se mide utilizando el valor de la funci on
de respuesta de pulso unitario h[t (m1)t] = h[nt (m1)t] = h[(nm+1)t].
h[(n m + 1)t] =
1
t
_
(nm+1)t
(nm)t
u(l)dl (2.5.9)
Para el pulso m
I() =
P
m
t
, (m1)t mt
I() = 0 , > Mt
De la integral de convoluci on y separando la integral
Q
n
=
_
nt
0
I()u(nt )d
=
P
1
t
_
t
0
u(nt )d +
P
2
t
_
2t
t
u(nt )d +...
=
P
m
t
_
mt
(m1)
u(n)d +... +
P
M
t
_
Mt
(M1)t
u(nt )d
(2.5.10)
Realizando la sustituci on de l = nt luego d = dl. La m-esima integral en la
ecuaci on 2.5.10 se escribe como
30
2.5. Metodo de Convoluci on discreta para transformacion precipitaci on-escorrenta
P
m
t
_
mt
(m1)t
u(nt )d =
P
m
t
_
(nm)t
(nm+1)t
u(l)dl
=
P
m
t
_
(nm+1)t
(nm)
u(l)dl
= P
m
h[(n m + 1)t]
(2.5.11)
Reemplazando de la ecuaci on 2.5.8 y 2.5.10 se obtiene
Q
n
= P
1
h[(nt)] +P
2
h[(n1)t] +P
m
h[(nm+1)t] +P
M
h[(nM +1)t] (2.5.12)

Esta representa la ecuaci on de convolucion con entrada P


m
en pulsos y salida Q
n
como
una funci on temporal de informaci on por muestra.
2.5.3. Funcion respuesta de pulso discreto y Ecuaci on de Con-
voluci on Discreta
La funci on de datos instant aneos de la salida o respuesta a un pulso de volumen unitario
viene expresado por:
U
nm+1
= h[(n m + 1)t] (2.5.13)
Se entiende que U
n
= h[nt], U
n1
= h[(n1)t]... y U
nM+1
= h[(nM+1)t]. Reem-
plazando en la ecuacion 2.5.12 la version en tiempo discreto de la integral de convoluci on
es:
31
2.5. Metodo de Convoluci on discreta para transformacion precipitaci on-escorrenta
Q
n
= P
1
U
n
+P
2
U
n1
+... +P
m
U
nm+1
+.. +P
M
U
nM+1
=
M

m=1
P
m
U
nm+1
(2.5.14)
Donde M es el n umero de pulsos de intensidad constante, de la funcion de entrada, es
decir, el n umero de datos de pulso del hietograma. El resultado nal es la ecuacion de
convolucion discreta para un sistema lineal.
Q
n
=
nM

m=1
P
m
U
nm+1
(2.5.15)
Donde Q
n
es el caudal de escorrenta directa en el instante n ;P
m
la precipitacion efectiva
del bloque m y U
n+m+1
los caudales por unidad de precipitaci on efectiva del hidrograma
unitario. El lmite superior n M indica que los terminos han de sumarse para m =
1, 2, 3, ...n, siempre que n > M y estando limitada la suma a m = 1, 2, 3, ...M, cuando
n > M.
La misma expresi on 2.5.15 se puede expresar de la forma siguiente:
Q
n
=
min(n,M)

m=max(1,nnU+1)
P
m
U
nm+1
(2.5.16)
Est a ecuacion facilita la solucion numerica, as mismo cabe se nalar que dicha ecuacion
es generalizada para resolver problemas que involucren el metodo de convoluci on, por
ejemplo, Matlab contiene el algoritmo (conv.m) para la convoluci on discreta, el cual usa
la ecuacion 2.5.16. El programa PLEDER, emplea el mismo algoritmo, mediante la clase
convolucion, con el objetivo de resolver la transformacion lluvia escorrenta mediante esta
ecuaci on.
32
2.6. Diagramas de Flujo
2.6. Diagramas de Flujo
A continuacion se presenta la esquematizacion graca que corresponde a la programacion
hidrol ogica.
Diagrama de ujo General: Muestra la organizaci on del programa en forma
general. El objetivo de este diagrama es obtener los caudales totales (transformaci on
lluvia escorrenta), a partir de los datos de precipitaciones y datos de la cuenca.
Diagrama de ujo Hietograma IILA SENAMHI: El objetivo es calcular las
precipitaciones alternas (mm) a partir de los datos regionales, empleando el metodo
del bloque alterno.
Diagrama de ujo Hietograma NRCS: Recibe como datos, la precipitacion
m axima de 24 horas (obtenidas ya sea mediante an alisis de frecuencias) y el tipo de
tormenta (Tipo I, IA, II, III); realizando una multiplicacion directa con las ordenadas
de la tormenta, se obtienen las precipitaciones incrementales (mm).
Diagrama de ujo Hidrograma Unitario Sintetico NRCS: El objetivo es cal-
cular las ordenas del hidrograma unitario, tomando los datos del tiempo de retraso
(tlag) y las variaciones de los tiempos (hietograma - hidrograma); realizando inter-
polaciones lineales para cada intervalo o variacion de tiempo del hidrograma, donde
se obtienen las ordenadas del hidrograma Unitario Sintetico.
Diagrama de ujo Hidrograma Unitario Sintetico Snyder: Es el mismo ob-
jetivo que el anterior, recibiendo los datos de los coecientes t
p
, C
p
, variaci on del
tiempo y el area de la cuenca para calcular las siete coordenadas (A, B, C, D, E, F y
G de la gura 2.8) del hidrograma unitario, as obtener las ordenadas del hidrograma
unitarios sintetico mediante interpolaciones lineales para cada intervalo o variaci on
del tiempo a lo largo del tiempo base (t
b
).
33
2.6. Diagramas de Flujo
Diagrama de ujo Abstracciones NRCS: EL programa PLEDER separa la pre-
cipitacion total de las inltraciones o retenciones dadas, seg un el metodo NRCS, que
depende directamente como dato de valor Curva Numero, este factor es dependiente
del las caractersticas de la cuenca, tal como se explica en este captulo. Bajo este
dato se obtienen las precipitaciones directas o en exceso que tambien se les llama
pulsos de ingreso.
Diagrama de ujo Convolucion discreta: Transforma la lluvia en escorrenta
directa, a partir de las ordenadas del hidrograma unitarios (U) y los pulsos de ingreso
(P).
34
2.6. Diagramas de Flujo

H
i
e
t
o
g
r
a
m
a

I
I
L
A

S
E
N
A
M
H
I

H
i
e
t
o
g
r
a
m
a

N
R
C
S

P
a
r

m
e
t
r
o
s

r
e
g
i
o
n
a
l
e
s

a
,

b
,

k
,

n
,

t
,

t
,

p
e
r

o
d
o

d
e

r
e
t
o
r
n
o

t
r
.
I
N
I
C
I
O

P
L
E
D
E
R

H
I
D
R
O
L
O
G
I
A
T

h
o
r
a
s

E
c
u
a
c
i

2
.
2
.
3
.

l
c
u
l
o

d
e

p
r
e
c
i
p
i
t
a
c
i
o
n
e
s

a
c
u
m
u
l
a
d
a
s
,

i
n
c
r
e
m
e
n
t
a
l
e
s

a
l
t
e
r
n
a
s
.
E
c
u
a
c
i

2
.
2
.
1
.

l
c
u
l
o

d
e

p
r
e
c
i
p
i
t
a
c
i
o
n
e
s

a
c
u
m
u
l
a
d
a
s
,

i
n
c
r
e
m
e
n
t
a
l
e
s

a
l
t
e
r
n
a
s
.
E
x
p
o
r
t
a
r

.
c
s
v

P
r
e
c
i
p
i
t
a
c
i
o
n
e
s

x
i
m
a
s

d
e

2
4

h
o
r
a
s

(
P
2
4
)
,

T
i
p
o

d
e

t
o
r
m
e
n
t
a
.

T
i
p
o

d
e

T
o
r
m
e
n
t
a

T
i
p
o

T
i
p
o

I
A

T
i
p
o

I
I

T
i
p
o
I
I
I

P
r
e
c
i
p
i
t
a
c
i
o
n
e
s

a
c
u
m
u
l
a
d
a
s
,

i
n
c
r
e
m
e
n
t
a
l
e
s

E
x
p
o
r
t
a
r

.
c
s
v

l
c
u
l
o

L
l
u
v
i
a

E
s
c
o
r
r
e
n
t

a
.
C

l
c
u
l
o

d
e

P
u
l
s
o
s

e
s
c
o
r
r
e
n
t

d
i
r
e
c
t
a
.

l
c
u
l
o

d
e

h
i
d
r
o
g
r
a
m
a
s

U
n
i
t
a
r
i
o
s

S
i
n
t

t
i
c
o
s

M
o
d
e
l
o
s

M
e
t
e
o
r
o
l

g
i
c
o
s
.

T
o
r
m
e
n
t
a

N
R
C
S

I
I
L
A

S
E
N
A
M
H
I

P
r
e
c
i
p
i
t
a
c
i
o
n
e
s

x
i
m
a
s

d
e

2
4

h
o
r
a
s

(
P
2
4
)
,

T
i
p
o

d
e

t
o
r
m
e
n
t
a
.

P
a
r

m
e
t
r
o
s

r
e
g
i
o
n
a
l
e
s

a
,

b
,

k
,

n
,

t
,

t
,

p
e
r

o
d
o

d
e

r
e
t
o
r
n
o
t
r
.
A
b
s
t
r
a
c
c
i
o
n
e
s

m
e
d
i
a
n
t
e

e
l

t
o
d
o

N
R
C
S
P
u
l
s
o
s

(
P
)

e
s
c
o
r
r
e
n
t

d
i
r
e
c
t
a

n
=

P
m
M
i
n
(
n
,
M
)
m
=
M

x
(
1
,
n
-
n
0
+
1
)
0
n
-
m
+
1

C
o
n
v
o
l
u
c
i

D
i
s
c
r
e
t
a

C
a
u
d
a
l
e
s

(
m

/
s
)

F
I
N

P
L
E
D
E
R

H
I
D
R
O
L
O
G
I
A

H
i
d
r
o
g
r
a
m
a

U
n
i
t
a
r
i
o

S
i
n
t

t
i
c
o

H
.
U
.
S
.

N
R
C
S

H
.
U
.
S
.

S
N
Y
D
E
R

T
i
e
m
p
o

d
e

r
e
t
a
r
d
o

(
T
l
a
g
)
T
i
e
m
p
o

d
e

r
e
t
a
r
d
o

C
o
e
f
i
c
i
e
n
t
e

C
p

O
r
d
e
n
a
d
a
s

d
e
l

H
i
d
r
o
g
r
a
m
a

U
n
i
t
a
r
i
o

(
U
)

35
2.6. Diagramas de Flujo

INICIOHIETOGRAMAIILASENAMHI
N,a,b,k,n,dt,Var,Tr,D
i=1,hastaN,
i=i+1
|i] = Ior x i
Jt S
Pocum|i] = o (1 + KIogI) (t + b)
n-1
t Pocum|i] = o (1 + KIogI) t
n
i =1,hastaN,
i=i+1
i N2
] = N + 1 -2 x i
Poltc|i] = Pincr|]]
] = 2 x i - N
Poltc|i] = Pincr|]]
Precipitaciones
Alternas(mm)
FINHIETOGRAMAIILASENAMHI
V F
V F
36
2.6. Diagramas de Flujo

INICIOHIETOGRAMANRCS
P24,Ndt,Tormenta
N =
24
NJt6u

Jt =
24
N

Precipitaciones
Incrementales(mm)
FINHIETOGRAMANRCS
i=0,hastaN+1,
i=i+1
NPocum
|
i + 1
]
= P24 x IipoI|i + 1]
NPincr
|
i + 1
]
= NPocum
|
i + 1
]
- NPocum|i]

Batos hiuiologicos,
Toimenta NRCS
37
2.6. Diagramas de Flujo

INICIOHIDROGRAMAUNITARIO
SINTTICONRCS
Tlag,DT,dt
I
p
=
I
2
+ Ilog
q
p
=
12.48A
I
p

DatosHidrogramaUnitario
adimensionalNRCS
i=1,hastanU,
i=i+1
u|i] = Intcrpolocion Iincol (n0, q, t, BT x i )
Ordenadasdel
HidrogramaUnitario
FINHIDROGRAMAUNITARIO
SINTTICONRCS
38
2.6. Diagramas de Flujo

INICIOHIDROGRAMAUNITARIO
SINTTICOSNYDER
t
p
, C
p
, I, A,
t
R
= I
t
pR
= t
p
+
t

-t
R
4

q
p
= 2.7SC
p
t
p

q
pR
=
q
p
t
p
t
pR

w
50
= 2.14q
pR
-1.08

w
75
= 1.22q
pR
-1.08

pR
= q
pR
A
i=1,hastanU,
i=i+1
I = Ix i6u
u
|
i
]
= Ecuocioncs SnyJcr(I, t
R
, t
pR
,
pR
, w
50
, w
75
)
Ordenadasdel
HidrogramaUnitario
FINHIDROGRAMAUNITARIO
SINTTICONRCS
39
2.6. Diagramas de Flujo

V F

V F

INICIOABSTRACCIONESNRCS
FINABSTRACCIONESNRCS
Palterna,CN,nP
S =
2S4uu -2S4CN
CN
Ioi = u.2S

i=1,hastanP,
i=i+1
Pocum|i] = Pocum|i -1] + Palteina|i]

Pacum|i] < Ioi
Io|i] = Pocum|i]

Io|i] = Ioi

Io|i] < Ioi


Fo|i] = u.u

Fo|i] =
S(Pocum|i] -Io|i])
Pocum|i] -Io|i] +S

Pcxccso = PcxccsoAcum|i] - PcxccsoAcum|i - 1]

PcxccsoAcum = Pocum|i] -(Io|i] +Fo|i])


Precipitacinen
Exceso(mm)
40
2.6. Diagramas de Flujo

INICIOCONVOLUCINDISCRETA
OrdenadasHidrograma
Unitario[U],Pulsos[P],nP,nU
M=nP
nQ=M+nU1
A=mx(1,nnU+1)
B=mn(n,M)
Caudales(m/s)
FINCONVOLUCINDISCRETA
n=1,hastanQ,
n=n+1
m=A,hastaB,
m=m+1

n
= P|m]x0|n - m+1]

sum
= u.u

|n] =
sum

41
Captulo 3
TEOR

IA HIDR

AULICA Y
SECCIONES TRANSVERSALES
EN R

IOS
3.1. Introducci on
Para conocer el comportamiento del ujo en cauces naturales o simplemente en canales
con secciones conocidas, es necesario contar con la teora basica de la hidr aulica y las
leyes fsicas que gobiernan su comportamiento. De las ecuaciones basicas y los principios
fsicos de movimiento de uidos, se aplican a la solucion del ujo gradualmente variado,
obteniendo como resultados los niveles o tirantes a lo largo del cauce. Tambien es nece-
sario contar con metodologas para calcular el area y el permetro mojado en una seccion
transversal. El proposito de esta secci on es revisar las deniciones basicas, principios y
leyes con la intencion de aplicarlos en los captulos posteriores al estudio de tr ansito de
ujos en ros.
42
3.2. Bases teoricos para el c alculo de ujo unidimensional
3.2. Bases te oricos para el calculo de ujo unidimen-
sional
Se entiende por ujo unidimensional cuando se ignora las variaciones de los cambios en la
velocidad y la presion en el sentido perpendicular a la direcci on principal del ujo. Para
su soluci on numerica se tiene como base fundamental los tres principios derivados de la
fsica:
Conservacion de la Masa.
Conservacion de la Energa.
Impulso-Cantidad de Movimiento: Conservacion del Momentum
3.2.1. Ecuacion de Movimiento General.
Es importante mencionar las ecuaciones que provocan el movimiento de una masa ele-
mental, para caso nuestro la masa elemental es el uido. De la segunda ley de Newton se
sabe que la fuerza es igual a la masa por la aceleracion (resultado vectorial):
F = ma (3.2.1)
Multiplicando ambos miembros por la componente longitud s paralela a la direccion
de la fuerza y la aceleraci on, e integrando estas expresiones se tiene como resultado la
Ecuaci on de Energa (expresion escalar):
_
s
2
s
1
Fds = m
_
s
2
s
1
ads =
1
2
m(v
2
2
v
2
1
) (3.2.2)
43
3.2. Bases teoricos para el c alculo de ujo unidimensional
De la misma forma multiplicando ambos miembros por el factor tiempo a la ecuacion
(3.2.1), e integrando se tiene la Ecuacion de Momentum.
_
t
2
t
1
Fdt = m
_
t
2
t
1
adt =
1
2
m(v
2
v
1
) (3.2.3)
Esta ultima expresi on muestra que el impulso (fuerza por tiempo) aplicado a un cuerpo
es igual al momentum (masa por velocidad).
Estos enfoques son importantes en las aplicaciones para el movimiento de los ujos
(Ecuaci on de la Energa, Ecuaci on de Momentum).
3.2.2. Ecuacion de Movimiento del ujo.
Considerando un uido elemental a lo largo de una lnea de corriente, donde la longitud de
este cuerpo es S, normal a la lnea de corriente es n y el espesor unitario (perpendicular
al plano del papel). Para analizar el movimiento del ujo se considera que el ujo es No
viscoso, por lo que no se presentan fuerzas de resistencia en el uido.
Figura 3.1: Fuerza Actuante en un Fluido
44
3.2. Bases teoricos para el c alculo de ujo unidimensional
Si p es igual a la intensidad de la presion en la secci on 1, entonces la presi on en la secci on
2 es p + (
p
s
)s. As mismo la Fuerza actuante en cara aguas arriba es:
pn (3.2.4)
y la fuerza que act ua en la cara aguas abajo es:
(p +
p
s
s)n (3.2.5)
El peso del uido es:
gsn (3.2.6)
La componente de este peso en la direcci on

s

es
gsnsin() (3.2.7)
De la gura (3.1) se deduce que sen() =
Z
s
, donde Z es la cota superior medido a
partir del datum (positivo hacia arriba). Por lo tanto la Fuerza Resultante que act ua en
el elemento en la direcci on aguas abajo es:
F
r
= pn (p +
p
s
s)n gsn
Z
s
(3.2.8)
Simplicando la ecuaci on se tiene:
F
r
=
p
s
sn gsn
Z
s
(3.2.9)
Aplicando la segunda ley de movimiento, la fuerza resultante es igual a la masa del uido
45
3.2. Bases teoricos para el c alculo de ujo unidimensional
por una aceleracion a
s
sna
s
=
P
s
s gsn
Z
s
(3.2.10)
Simplicando
a
s
=
p
s
g
Z
s
=

s
(p +Z) (3.2.11)
la aceleraci on a
s
es fundamental en el ujo ya que aparece al aplicar la segunda ley de
Newton a un sistema uido innitesimal. Por lo tanto se necesita calcular la derivada del
vector velocidad con respecto al tiempo.
a
s
=
dV
s
dt
=
V
s
t
+
V
s
s
ds
dt
=
V
s
t
..
Local
+ V
s
V
s
s
. .
Convectiva
(3.2.12)
El termino
Vs
t
se denomina aceleracion local y se anula cuando el ujo es Permanente
o Estacionario, es decir, independiente del tiempo. El termino siguiente forma la acel-
eracion convectiva, que aparece cuando la partcula se mueve a traves de regiones donde
la velocidad vara.
Sustituyendo las ecuaci on 3.2.12 en la ecuaci on 3.2.11 se tiene:
(
V
s
t
+V
s
V
s
s
) +

s
(p +Z) = 0 (3.2.13)
La ecuaci on 3.2.13, es la conocida ecuaci on propuesta en el siglo XVIII, por el matematico
suizo Leonardo Euler y reconocida universalmente como la ecuacion de Euler. En la tesis
est a ecuaci on se simplica la aceleracion local, debido a que el an alisis es para ujos
Permanentes.
46
3.2. Bases teoricos para el c alculo de ujo unidimensional
3.2.3. Flujo Permanente.
Los ujos permanentes ocurren cuando las aceleraciones locales, son cero, esto es, si
Vs
t
es cero, por lo que en un punto no se tienen cambios en el tiempo, aunque la velocidad
puede variar de un punto a otro, si la velocidad cambia en un punto, el ujo se conoce
como transitorio. Por lo tanto la ecuaci on 3.2.13 se reduce una funci on que solo depende
de s, entonces las derivadas parciales se pueden expresar como derivadas ordinarias.
V
s
dV
s
ds
+
d
ds
(p +Z) = 0 (3.2.14)
Multiplicando por el factor ds a toda la expresi on e integrando se tiene:
1
2
V
2
s
+p +Z = Constante (3.2.15)
Dividiendo entre
Z +
p

+
V
2
s
2g
= H = Constante (3.2.16)
Es una de las formas alternativas de la ecuacion de Bernoulli. Esta ecuaci on puede apli-
carse a lo largo de una lnea de corriente, en un uido ideal sin rozamiento, pero la
aplicacion de la misma en otra direcci on exige que el uido sea irrotacional.
1
3.2.4. Flujo Uniforme.
En una supercie libre se presenta el ujo uniforme, cuando en sus diferentes secciones,
las caractersticas de circulaci on, velocidad, distribuci on de presiones, profundidad de
circulaci on, etc son iguales. En los cauces naturales, que corresponde a la aplicaci on de
esta tesis, en algunos casos puede considerarse la existencia del regimen uniforme en
1
Flujo Irrotacional: Se da cuando la vorticidad resulta cero, la velocidad debe de ser igual a la
gradiente de un escalar, , conocido como potencial de velocidad: x() = 0
47
3.3. Secciones Transversales en Cauces Naturales y Calculo Numerico.
ciertos tramos donde se ha alcanzado un equilibrio en la secci on transversal y esta es
sensiblemente constante en una zona recta y sin obstaculos, lo cual posibilita el estudio
de estas conducciones con resultados satisfactorios.
En el ujo uniforme, la aceleracion local y convectiva son cero, por lo tanto, la ecuaci on
3.2.13 se reduce.
d
ds
(p +Z) = 0 (3.2.17)
Integrando se tiene.
p

+Z = Constante (3.2.18)
Esta ecuacion representa a la distribuci on de la Presion Hidrostatica, donde el termino
P

+Z, es la altura piezometrica (piezometric head).


En resumen, el ujo Uniforme ocurre cuando:
EL Tirante, el area hidr aulica y la velocidad en cada secciones transversal, son
constantes.
La lnea de gradiente de energa, la supercie del agua, y el fondo o terreno ( plantilla
del canal), son todos paralelos: esto es S
f
= S
w
= S
0
, donde S
f
= pendiente de la
lnea de energa, S
w
= Pendiente de la supercie del agua, y S
0
= pendiente del
fondo o plantilla del canal.
3.3. Secciones Transversales en Cauces Naturales y
Calculo Numerico.
El estudio de las propiedades de las secciones transversales en cauces naturales tiene
singular importancia ya que dicha secci on es la que dene muchas de las caractersticas
de la conducci on. Estas secciones representan la geometra del cauce que estan formados
48
3.3. Secciones Transversales en Cauces Naturales y Calculo Numerico.
por una serie de puntos o coordenadas (X ,Y), cuyos valores de X forman la longitud de la
seccion transversal y los valor de Y las alturas con respecto a un DATUM. En principio,
las formas de estas secciones pueden variar a lo largo del canal (canal no prismatico).
Figura 3.2: Seccion Transversal en Cauces Naturales
El programa PLEDER, divide las secciones transversales en tres partes (i, j, k), donde i
representa las caractersticas geometricas de la seccion margen izquierda, j los trapecios
conformados por los puntos sucesivos con el lmite de la supercie libre de agua o cota
tirante, nalmente k representa la geometra de las seccion en la margen derecha.
Figura 3.3: Elementos geometricos de las Secciones Transversales en: i, j, k
49
3.3. Secciones Transversales en Cauces Naturales y Calculo Numerico.
En una secci on transversal natural de los cauces, es importantes representar de esta mane-
ra, ya que simplica las operaciones matem aticas para obtener los resultados geometricos
de cada secci on transversal que mas adelante se presenta. En la gura anterior se mues-
tra que, en los extremos se forman triangulos (i, k), esto ocurre cuando existe un angulo
entre la lnea del terreno (plantilla del canal) y la supercie libre. En la parte central se
forman trapecios, cuya area hidraulica y permetro hidr aulico se obtienen despues de una
sumatoria en cada una de ellas.
Las formulas para cada elemento geometricos de la gura son.
Analizando en el Tri angulo Izquierdo (A,P):
A = A
i
=
1
2
_
(Y Y
i+1
)
2
_
X
i+1
X
i
Y
i
Y
i+1
__
(3.3.1)
P = P
i
=

(Y Y
i+1
)
2
+
_
(Y Y
i+1
)(X
i+1
X
i
)
Y
i
Y
i+1
_
2
(3.3.2)
An alisis de los Trapecios (A,P):
A =

A
j
=

1
2
[(Y Y
j
) + (Y Y
j+1
)] (X
j+1
X
j
) (3.3.3)
P =

P
j
=

_
(X
j+1
X
j
)
2
+ (Y
j+1
Y
j
)
2
(3.3.4)
An alisis del Triangulo Derecho(A,P):
A = A
k
=
1
2
_
(Y Y
k
)
2
_
X
k+1
X
k
Y
k+1
Y
k
__
(3.3.5)
50
3.4. C alculo del Tirante Normal
P = P
k
=

(Y Y
k
)
2
+
_
(Y Y
k
)(X
k+1
X
k
)
Y
k+1
Y
k
_
2
(3.3.6)
3.4. Calculo del Tirante Normal
Para el an alisis y dise no de canales abiertos es necesario conocer el Tirante Normal, que
forma parte de las caractersticas hidr aulicas de un canal. En la mayora de los textos
exponen los c alculos numericos solo para canales con secciones transversales conocidos
tales como rectangulares, triangulares, trapezoidales, parab olicos y otros que derivan a
ecuaciones lineales en la solucion del tirante normal, entonces, para el analisis en cauces
naturales aproximan a estas secciones mencionadas perdiendo precisi on y garanta en
la obtencion de sus resultados. La mejor forma de representar es a traves de los puntos
coordenados, as se puede generalizar estas secciones transversales obteniendose resultados
mas precisos y m as compactos. Parte del objetivo de esta tesis es tratar en lo posible de
generalizar las ecuaciones, en tal forma que sus resultados cumplan para todo tipo de
secciones transversales (desde los mas comunes hasta las m as complejas).
3.4.1. Calculo Numerico
Para la solucion del tirante normal se tomar a en cuenta las ecuaciones de Manning Strick-
ler, Chezy (Antoine de Chezy) y Darcy-Weisbach.
v =
R
2/3
S
1/2
f
n
(3.4.1)
v = C
_
RS
f
(3.4.2)
51
3.4. C alculo del Tirante Normal
v = (32gRS
f
)
1/2
log
_
k
s
14,8R
+
1,255
R(32gRS
f
)
1/2
_
(3.4.3)
Estas tres ecuaciones presentan ecuaciones no lineales, que para su soluci on en cauces
naturales requieren de metodos numericos avanzados. Existen varios metodos para resolver
ecuaciones no lineales, tales como el Metodo de Bisecci on, Metodo de Aproximaciones
Sucesivas, Metodo de Newton Raphson, entre otros mas y menos ecientes. En esta tesis
usamos el Metodo de Newton Raphson, cuya sintaxis es la siguiente.
F(y) = 0 (3.4.4)
y = Y + Y (3.4.5)
Y =
F(y)
F

(y)
(3.4.6)
El prop osito en esta seccion es ampliar la aplicacion del metodo de Newton-Raphson
aplicado a las ecuaciones anteriores. Donde F(y) es la funcion principal cuya variable
dependiente es el valor de y (Para este caso Tirante Normal) y F

(y) es la primera
derivada de la funcion principal. Este metodo es iterativo hasta que el valor de (3.4.6)
tienda a cero o que se eval ue a un error permisible que el usuarios asigna como conveniente.
Manning Strickler
La Ecuacion de Manning Strickler representado en funci on al caudal viene a ser:
Q =
A
5/3
P
2/3
S
1/2
n
(3.4.7)
52
3.4. C alculo del Tirante Normal
Despejando las variables constantes, para formar la Funci on principal.
F(Y ) = A
5/3
P
2/3

nQ

S
..
Constante
= 0 (3.4.8)
Derivando la funcion F(Y) con respecto a Y (
dF
dY
)se tiene:
dF
dY
=
d
dy
_
A
5/3
P
2/3

nQ

S
_
=
5
3
P
2/3
A
2/3
_
dA
dY
_

2
3
A
5/3
P
5/3
_
dP
dY
_
(3.4.9)
En la seccion transversal, el Area Total es:
A = A
i
+

A
j
+A
k
(3.4.10)
Cuya derivada del

Area Total en funcion del tirante Y.
_
dA
dY
_
=
_
dA
i
dY
_
+
_
d
dY

A
j
_
+
_
dA
k
dY
_
(3.4.11)
C alculo de
_
dA
i
dY
_
_
dA
i
dY
_
=
d
dY
_
1
2
_
(Y Y
i+1
)
2
_
X
i+1
X
i
Y
i
Y
i+1
___
=
1

`
2
_

`
2 (Y Y
i+1
)
_
X
i+1
X
i
Y
i
Y
i+1
__
=
_
(Y Y
i+1
)
_
X
i+1
X
i
Y
i
Y
i+1
__
(3.4.12)
Es muy importante simplicar expresiones al mnimo, de esta forma se logra opti-
mizar el tiempo de ejecuci on (runtime). Por lo tanto, la ecuacion anterior se puede
53
3.4. C alculo del Tirante Normal
representar en funcion al area del tri angulo izquierdo (A
i
), este se obtendr a dividi-
endo la expresion (3.4.12)con (3.3.1).
_
dA
i
dY
_
A
i
=
(Y Y
i+1
)
_
X
i+1
X
i
Y
i
Y
i+1
_
1
2
(Y Y
i+1
)
2
_
X
i+1
X
i
Y
i
Y
i+1
_ =
2
.
.
.
.
.
..
(Y
i
Y
i+1
)
.
.
.
.
.
..
(Y Y
i+1
)
.
.
.
.
.
.
.
(X
i+1
X
i
)
(Y Y
i+1
)

`
1
2
.
.
.
.
.
.
.
(X
i+1
X
i
)
.
.
.
.
.
..
(Y
i
Y
i+1
)
_
dA
i
dY
_
=
2A
i
(Y Y
i+1
)
(3.4.13)
C alculo de
_
d
dY

A
j
_
_
d
dY

A
j
_
=
d
dY
_

1
2
[(Y Y
j
) + (Y Y
j+1
)] (X
j+1
X
j
)
_
_
d
dY

A
j
_
=

(X
j+1
X
j
) (3.4.14)
C alculo de
_
dA
k
dY
_
_
dA
k
dY
_
=
d
dY
1
2
_
(Y Y
k
)
2
_
X
k+1
X
k
Y
k+1
Y
k
__
=
1

`
2
_

`
2 (Y Y
k
)
_
X
k+1
X
k
Y
k+1
Y
k
__
=
_
(Y Y
k
)
_
X
k+1
X
k
Y
k+1
Y
k
__
(3.4.15)
Para simplicar dividimos (3.4.15) entre (3.3.5).
_
dA
k
dY
_
A
k
=
(Y Y
k
)
_
X
k+1
X
k
Y
k+1
Y
k
_
1
2
(Y Y
k
)
2
_
X
k+1
X
k
Y
k+1
Y
k
_ =
2
.
.
.
.
.
.
.
(Y
k+1
Y
k
)
.
.
.
.
..
(Y Y
k
)
.
.
.
.
.
.
..
(X
k+1
X
k
)
(Y Y
k
)

`
1
2
.
.
.
.
.
.
..
(X
k+1
X
k
)
.
.
.
.
.
.
.
(Y
k+1
Y
k
)
(3.4.16)
54
3.4. C alculo del Tirante Normal
_
dA
k
dY
_
=
2A
k
(Y Y
k
)
(3.4.17)
Reemplazando en la ecuaci on (3.4.11) se obtendr a la derivada del

Area total:
_
dA
dY
_
=
2A
i
(Y Y
i+1
)
+

(X
j+1
X
j
) +
2A
k
(Y Y
k
)
(3.4.18)
De la misma forma calculamos la derivada del Permetro mojando con respecto al tirante
Y (
dP
dY
)
_
dP
dY
_
=
_
dP
i
dY
_
+
>
>
>
>
>
>
>
>
0
_
d
dY

P
j
_
+
_
dP
k
dY
_
_
dP
dY
_
=
_
dP
i
dY
_
+
_
dP
k
dY
_
(3.4.19)
C alculo de
_
dP
i
dY
_
_
dP
i
dY
_
=
d
dY
_
_

(Y Y
i+1
)
2
+
_
(Y Y
i+1
)(X
i+1
X
i
)
Y
i
Y
i+1
_
2
_
_
=

2 (Y Y
i+1
) +

2
(Y Y
i+1
)(X
i+1
X
i
)
.
.
.
.
.
(Y
i
Y
i+1
)(X
i+1
X
i
)
.
.
.
.
.
(Y
i
Y
i+1
)(Y
i
Y
i+1
)
2

(Y Y
i+1
)
2
+
_
(Y Y
i+1
)(X
i+1
X
i
)
Y
i
Y
i+1
_
2
. .
Perimetro(P
i
)
=
(Y Y
i+1
) +
(Y Y
i+1
)(X
i+1
X
i
)
2
(Y
i
Y
i+1
)
2
P
i
_
dP
i
dY
_
=
(Y Y
i+1
) (Y
i
Y
i+1
)
2
+ (Y Y
i+1
) (X
i+1
X
i
)
2
P
i
(Y
i
Y
i+1
)
2
(3.4.20)
55
3.4. C alculo del Tirante Normal
Esta ecuaci on a un es posible simplicar haciendo algunos arreglos
Se sabe que: P
i
=
_
(Y Y
i+1
)
2
+
_
(Y Y
i+1
)(X
i+1
X
i
)
Y
i
Y
i+1
_
2
,
donde
(P
i
)
2
= (Y Y
i+1
)
2
+
_
(Y Y
i+1
)(X
i+1
X
i
)
Y
i
Y
i+1
_
2
=
(Y Y
i+1
)
2
(Y
i
Y
i+1
)
2
+ (Y Y
i+1
)
2
(X
i+1
X
i
)
2
(Y
i
Y
i+1
)
2
Dividiendo la expresi on anterior entre (P
i
) (Y Y
i+1
)
(P
i
)

`
1
2
>
>
>
(P
i
) (Y Y
i+1
)
=
(Y Y
i+1
) (Y
i
Y
i+1
)
2
+ (Y Y
i+1
) (X
i+1
X
i
)
2
(P
i
) (Y
i
Y
i+1
)
2
(3.4.21)
Note que la expresion de la derecha viene a ser igual a la ecuacion (3.4.20), por lo
tanto reemplazando se tiene.
P
i
(Y Y
i+1
)
=
_
dP
i
dY
_
Esta ecuacion, tambien podra ser representada en funci on trigonometrica, seg un la
gura que se muestra:
_
dP
i
dY
_
=
P
i
(Y Y
i+1
)
= cosec (1) (3.4.22)
C alculo de
_
dP
k
dY
_
An alogamente:
56
3.4. C alculo del Tirante Normal
Figura 3.4: Pendiente del banco izquierdo a la supercie libre
P
k
(Y Y
i
)
=
_
dP
k
dY
_
Figura 3.5: Pendiente del banco derecho a la supercie libre
_
dP
k
dY
_
=
P
k
(Y Y
k
)
= cosec (2) (3.4.23)
Reemplazando en la ecuaci on (3.4.19) se obtendr a la derivada del Permetro total:
_
dP
dY
_
=
P
i
(Y Y
i+1
)
+
P
k
(Y Y
k
)
= cosec (1) +cosec (2) (3.4.24)
57
3.4. C alculo del Tirante Normal
Chezy
La Ecuacion de Chezy en terminos de caudal:
Q = AC
_
RS
f
(3.4.25)
Despejando las variables constantes, para formar la Funci on principal F(Y).
F(Y ) = A
3/2
P
1/2

Q
C
_
S
f
. .
Constante
= 0 (3.4.26)
Derivando la funcion F(Y) con respecto a Y (
dF
dY
)se tiene:
dF
dY
=
d
dy
_
A
3/2
P
1/2

Q
C
_
S
f
_
=
3
2
P
1/2
A
1/2
_
dA
dY
_

1
2
A
3/2
P
3/2
_
dP
dY
_
(3.4.27)
Darcy-Weisbach
Dada la ecuacion de Darcy en funci on del caudal se tiene:
Q = A(32gRS
f
)
1/2
log
_
k
s
14,8R
+
1,255
R(32gRS
f
)
1/2
_
(3.4.28)
Despejando las variables constantes, para formar la Funci on principal F(Y), e igualando
esta funci on cero.
F(Y ) = A(R)
1/2
log
_
k
s
14,8R
+
1,255
R(32gRS
f
)
1/2
_

Q
(32gRS
f
)
1/2
= 0 (3.4.29)
58
3.4. C alculo del Tirante Normal
Derivando la funcion F(Y) con respecto a Y (
dF
dY
)se tiene:
dF
dY
=
A

Rlog(C)
1
2
RLn(C)
_
dA
dY
R
dP
dY
_

RLn(10)

R(D)
CLn(10)
(3.4.30)
Donde:
R: Radio Hidr aulico R =
A
P
C, D: Constantes.
C =
5K
s
74R
+
251
6400
v

32
R
3/2
_
gS
f
_
dA
dY
P
A
dP
dY
P
2
_
=
5K
s
74R
+
251
6400

Rv

32
AR

3/2
_
gS
f
_
dA
dY
R
dP
dY
_
Donde:
C =
5K
s
74R
+
251
6400
v

32
A
_
RgS
f
_
dA
dY
R
dP
dY
_
(3.4.31)
D =
5
74
K
s
P
dA
dY
A
2
+
5
74
K
s
dP
dY
A

753
12800
v

32
_
dA
dY
P
A
dP
dY
P
2
_
R
5/2

gs
=
5
74
K
s
dA
dY
RA
+
5
74
K
s
dP
dY
A

753
12800
v

32
R
A
_
dA
dY
R
dP
dY
_
R
5/2

gs
Donde:
D =
5K
s
74A
_
dP
dY

1
R
dA
dy
_

753
12800
v

32
_
dA
dY
R
dP
dY
_
AR
3/2
_
gS
f
(3.4.32)
59
3.5. Caractersticas y Clasicaci on de los Perles del Flujo Gradualmente Variado
3.5. Caractersticas y Clasicaci on de los Perles del
Flujo Gradualmente Variado
Al examinar el c omputo de perles de ujo gradualmente variado, se necesita primero
desarrollar un metodo sistematico para clasicar los perles que pueden presentarse en
un cauce dado.
Figura 3.6: Esquema para supercie libre de agua
De la gura 3.6, se deduce las ecuaciones:
H = Z +Y +
V
2
2g
(3.5.1)
Diferenciando con respecto a X y las velocidad V expresando en funci on del caudal Q
dH
dX
=
dZ
dX
+
dY
dX
+
Q
2
2g
d
dX
_
1
A
2
_
(3.5.2)
60
3.5. Caractersticas y Clasicaci on de los Perles del Flujo Gradualmente Variado
Ahora, por denicion.
dH
dX
= S
f
(3.5.3)
dZ
dX
= S
0
(3.5.4)
Donde S
f
es la pendiente de la gradiente de energa y S
0
es la pendiente del fondo del
cauce.
d
dX
_
1
A
2
_
=
d
dA
_
1
A
2
_
dA
dX
=
d
dA
_
1
A
2
_
dA
dY
dY
dX
=
2B
A
3
dY
dX
(3.5.5)
Donde dA/dY = B. De las ecuaciones anteriores se tiene la ecuaci on de la variaci on del
tirante Y con respecto a la distancia X.
dY
dX
=
S
0
S
f
1 (BQ
2
)/(gA
3
)
(3.5.6)
Donde:
F
2
=
BQ
2
gA
3
=
(Q/A)
2
(gA)/(B)
(3.5.7)
dY
dX
=
S
0
S
f
1 F
2
(3.5.8)
Para un valor de Q, y S
f
son funciones del tirante Y y en un canal ancho F y S
f
varan
casi en la misma forma que Y dado que P = B y tanto S
f
como F tienen una fuerte
61
3.5. Caractersticas y Clasicaci on de los Perles del Flujo Gradualmente Variado
dependencia inversa en el area de ujo. Ademas, al aumentar Y , F y S
f
decreceran. Por
denici on S
f
= S
f
cuando Y = Y
n
, por ende el siguiente juego de desigualdades debe
cumplirse:
Figura 3.7: Sistema de clasicaci on de perles de ujo gradualmente variado
S
f
S
0
Correspondiente a Y Y
n
(3.5.9)
F 1 Correspondiente a Y Y
c
(3.5.10)
Estas desigualdades dividen al canal en tres secciones en la dimensi on vertical, tal como se
62
3.5. Caractersticas y Clasicaci on de los Perles del Flujo Gradualmente Variado
muestra en la gura 3.7. Por convencion, estas secciones se enumeran del 1 al 3 empezando
desde arriba.
Los perles del ujo gradualmente variado, se clasica en cinco categoras:
Suave (Mild): Corresponde al perl M, se reere a canales con pendientes suaves o
subcrticas. Se obtiene los siguientes resultados donde Y es el tirante real del ujo:
Zona 1: Y > Y
n
> Y
c
; S
0
> S
f
, F < 1; dY/dX > 0
Zona 2: Y
n
> Y > Y
c
; S
0
< S
f
, F < 1; dY/dX < 0
Zona 3: Y
n
> Y
c
> Y ; S
0
< S
f
, F > 1; dY/dX > 0
Fuerte (Steep): Corresponde al perl S. En estos perles, S
0
> S
c
y Y
n
< Y
c
. El
perl S1 por lo general comienza con un salto en la frontera de aguas arriba y
termina con un perl tangente a la horizontal en la frontera aguas abajo. El perl
S2 es una curva de r apida que es com unmente muy corta. En la frontera de aguas
abajo, este perl es tangente al tirante normal. El perl S3 es tambien transicional
ya que conecta un ujo supercrtico con el tirante normal.
Crtica (Critical): Corresponde al perl C. En estos perles, S
0
= S
c
y Y
n
= Y
c
. El
perl C1 es asintotico a una linea horizontal, por ejemplo un perl que conecta a
un canal de pendiente crtica con un canal de pendiente suave. El perl C3 puede
conectar un ujo supercrtico con un almacenamiento en una pendiente crtica.
Horizontal (pendiente cero): Corresponde al perl H. En este caso S
0
= 0, y los
perles H pueden considerarse como un caso lmite de los M. El perl de la curva
de abatimiento H2 puede encontrarse aguas arriba de una cada libre, mientras que
el perl H3 puede conectar un ujo supercrtico bajo una compuerta con un nivel
en vaso.
63
3.6. Ecuaciones para el calculo de perles basicos.
Adverso (Adverse): Corresponde al perl A. En estos perles S
0
< 0, En general los
perles A2 y A3 se presentan con poca frecuencia y son similares a los H2 y H3.
3.6. Ecuaciones para el calculo de perles basicos.
Estos datos son necesarios para calcular los tirantes del cauce, empleando el metodo del
paso estandar.
Flujo Gradualmente Variado: Metodo del paso Estandar
Figura 3.8: Balance de Energa
De la ecuacion de energa se tiene:
Z
1
+Y
1
+

1
V
2
1
2g
= Z
2
+Y
2
+

2
V
2
2
2g
+h
f
(3.6.1)
Para un caudal dado, el tirante Y
1
es conocido en la secci on 01. El metodo del paso
Est andar consiste en determinar el tirante en la secci on 02 a una distancia X
2
. Primero
64
3.6. Ecuaciones para el calculo de perles basicos.
determinamos la velocidad V
1
en la secci on 01, V =
Q
A
, y en la ecuacion de la energa (Ec.
3.6.1) representamos de la forma siguiente:
H
1
= Z
1
+Y
1
+

1
V
2
1
2g
(3.6.2)
H
2
= H
1
h
f
(3.6.3)
Donde h
f
, corresponde a la perdida total
1
entre las secciones 1 y 2
As mismo se conoce
h
f
=
1
2
(Sf
1
+Sf
2
)(X
2
X
1
) (3.6.4)
Reemplazando en la ecuaci on 3.6.3 tenemos
H
2
= H
1

1
2
(Sf
1
+Sf
2
)(X
2
X
1
) (3.6.5)
Sustituyendo las ecuaciones
Z
2
+Y
2
+

2
Q
2
2gA
2
2
+
1
2
(Sf
1
+Sf
2
)(X
2
X
1
) H
1
= 0
Y
2
+

2
Q
2
2gA
2
2
+
1
2
Sf
2
(X
2
X
1
) +Z
2
H
1
+
1
2
Sf
1
(X
2
X
1
) = 0 (3.6.6)
En la ecuaci on 3.6.6, A
2
y Sf
2
son funciones de Y
2
y todos los terminos restantes son
conocidos (calculados en la seccion 01). El tirante Y
2
puede ser determinado, resolviendo
la siguiente ecuaci on algebraica NO-LINEAL con metodo conocidos tales como Bisecci on
o el metodo de Newton Raphson.
1
Perdida por friccion + perdida local
65
3.6. Ecuaciones para el calculo de perles basicos.
F(Y
2
) = Y
2
+

2
Q
2
2gA
2
2
+
1
2
Sf
2
(X
2
X
1
) +Z
2
H
1
+
1
2
Sf
1
(X
2
X
1
) = 0 (3.6.7)
Para usa el metodo de Newton Raphson, es necesario contar la derivada de la funcion con
respecto al tirantes por conocer (Y
2
).

Este se obtiene al diferenciar la expresi on 3.6.7


dF
dY
2
= 1

2
Q
2
gA
3
2
dA
2
dY
2
+
1
2
(X
2
X
1
)
dSf
2
dY
2
+ 0 0 + 0
Tambien se sabe:
Sf
2
=
Q
2
n
2
A
2
2
R
4/3
2
dF
dY
2
= 1

2
Q
2
gA
3
2
dA
2
dY
2
+
1
2
(X
2
X
1
)
d
dY
2
_
Q
2
n
2
A
2
2
R
4/3
2
_
(3.6.8)
d
dY
2
_
Q
2
n
2
A
2
2
R
4/3
2
_
=
2Q
2
n
2
A
3
2
R
4/3
2
dA
2
dY
2

4Q
2
n
2
3A
2
2
R
7/3
2
dR
2
dY
2
=
2
A
2
Q
2
n
2
A
2
2
R
4/3
2
. .
Sf
2
dA
2
dY
2

4
3R
2
Q
2
n
2
A
2
2
R
4/3
2
. .
Sf
2
dR
2
dY
2
=
2
A
2
Sf
2
dA
2
dY
2

4
3R
2
Sf
2
dR
2
dY
2
= 2
_
Sf
2
A
2
dA
2
dY
2
+
2Sf
2
3R
2
dR
2
dY
2
_
(3.6.9)
Reemplazando la ecuacion 3.6.9 en 3.6.8
dF
dY
2
= 1

2
Q
2
gA
3
2
dA
2
dY
2
+
1
2
(X
2
X
1
)(2)
_
Sf
2
A
2
dA
2
dY
2
+
2Sf
2
3R
2
dR
2
dY
2
_
dF
dY
2
= 1

2
Q
2
gA
3
2
dA
2
dY
2
(X
2
X
1
)
_
Sf
2
A
2
dA
2
dY
2
+
2Sf
2
3R
2
dR
2
dY
2
_
(3.6.10)
66
3.6. Ecuaciones para el calculo de perles basicos.
La expresion
dR
2
dY
2
puede ser reemplazado en funcion del area y el permetro. As:
R =
A
P
dR
2
dY
2
=
d
dY
2
_
A
2
P
2
_
=
1
P
2
dA
2
dY
2
+A
2
d
dY
2
_
1
P
2
_
=
1
P
2
_
dA
2
dY
2
_

A
2
P
2
2
_
dP
2
dY
2
_ (3.6.11)
Reemplazando la derivada dA
2
/dY
2
= B
2
dF
dY
2
= 1

2
Q
2
gA
3
2
B
2
(X
2
X
1
)
_
Sf
2
B
2
A
2
+
2
3
Sf
2
_
P
2
A
2
__
B
2
P
2

A
2
dP
2
P
2
2
dY
2
__
dF
dY
2
= 1

2
Q
2
gA
3
2
B
2
(X
2
X
1
)
_
Sf
2
B
2
A
2
+
2
3
Sf
2
A
2
_
B
2

A
2
P
2
dP
2
dY
2
__
dF
dY
2
= 1

2
Q
2
gA
3
2
B
2

1
3
Sf
2
(X
2
X
1
)
_
5
B
2
A
2

2
P
2
dP
2
dY
2
_
(3.6.12)
Estas ecuaciones sirven para calcular la supercie libre de agua (curva de remanso en un
ujo gradualmente variado) en secciones prism aticas y no prism aticas.
67
Captulo 4
MODELOS NUM

ERICOS EN R

IOS
Y DIAGRAMAS DE FLUJO
4.1. Introducci on
En la actualidad existen diversos modelos numericos para simulaciones de ujos en ros,
desde modelos simples hasta modelos complejos. En este captulo se describe los modelos
cl asicos tales como el modelo de la onda din amica, modelo de la onda de difusion y el
modelo de la onda cinematica, como tambien se describe las propiedades hidr aulicas y los
c alculos unidimensionales para los ujos permanentes, discretizando las ecuaciones para
su programaci on computacional.
68
4.2. Formulaci on de Flujos en 1D
4.2. Formulacion de Flujos en 1D
4.2.1. Ecuaciones Hidrodinamicas 1D
Modelo de la Onda Dinamica
El modelo de la onda din amica en 1D, para ujos en canales abiertos son gobernados por
las ecuaciones de Barre Saint Venant considerando ujos laterales (inow/outow). Se
tiene:
A
t
+
Q
x
= q
l
(4.2.1)
A
t
+

x
_
Q
2
A
_
+gA
Z
s
x
+gAS
f
= q
l
U
x
(4.2.2)
La variable x representa la distancia a lo largo de la misma coordenada espacial, A es
el area mojada de la secci on transversal del ujo y Q viene a ser la descarga del ujo
denido como Q = AU, siendo U la velocidad promedio, sobre la seccion transversal;
Z
s
es la estaci on del agua; es el factor de correccion para el momentum debido a la
uniformidad de las (corrientes) distribuciones de velocidades sobre al seccion transversal;
q
l
es el ujo lateral por unidad de largo del canal. U
x
es la velocidad de los ujos laterales
en la direccion del eje x
i
y S
f
es la pendiente de friccion, denominado o representado
como:
S
f
=
Q|Q|
K
2
(4.2.3)
Donde K viene a ser la conductividad. Para una simple secci on transversal, K =
AR
2/3
n
;
con R Radio Hidraulico y n el coeciente de rugosidad de Manning del canal.
69
4.2. Formulaci on de Flujos en 1D
Para una seccion transversal compuesta.
K
j
=
A
j
R
2/3
j
n
j
(4.2.4)
Modelo de la Onda Difusi on
El modelo de la onda de difusi on asume que las aceleraciones local y convectiva en la
ecuaci on del momentum son insignicantes, por lo tanto se tiene:
gA
Z
s
x
+gAS
f
= q
l
U
x
(4.2.5)
La ecuacion de continuidad, aun se usa en este modelo.
Este modelo es mas Estable que el modelo de la onda din amica, pero este ultimo es m as
exacto y puede ser aplicado en rangos amplios de condiciones de ujo.
Modelo de la Onda Cinematica
Para este modelo, las variaciones en la velocidad del ujo y el tirante son Insignicantes en
comparaci on con la variaci on en la elevaci on del lecho del cauce y por lo tanto la ecuacion
de momentum puede ser simplicado como:
S
f
= S
0
(4.2.6)
Donde S
o
es la pendiente del fondo del canal en la direcci on longitudinal.
Usando la ecuaci on de Manning, la ecuaci on 4.2.6 puede ser reescrito.
Q =
A
n
R
2/3
S
1/2
0
(4.2.7)
70
4.2. Formulaci on de Flujos en 1D
La ecuacion de continuidad 4.2.1 a un es usada en este modelo de la onda cinematica.
Este modelo generalmente se aplica si se cumple que:
g
_
S
0
U
2
> 10 (4.2.8)
Donde
_
, representa la longitud del canal en estudio y U es la velocidad promedio del ujo
uniforme. La Ecuaci on 4.2.8 implica que el modelo de la onda cinem atica sea aplicado en
canales empinados o pronunciados (steep).
4.2.2. Propiedades Hidraulicas Compuestas
Si las propiedades hidraulicas, tales como rugosidad, conduccion, no son uniformes, a
traves del canal, sus valores compuestos necesitan ser calculados. Existen varios metodos
que se usan frecuentemente, tales como: El metodo Alpha, Metodo de la divisi on Radio
Hidraulico, Metodo de la division de la pendiente energa y el metodo de la conduccion o
transportabilidad.
Metodo Alpha
En el metodo Alpha, la secci on transversal es dividida dentro de paneles o franjas entre
dos puntos de coordenadas (estaciones) tal como se muestra en la gura 4.1. La divisi on
entre los paneles son asumidos para ser verticales. En este metodo la seccion transversal
no se distingue entre el canal principal y los bancos de inundaci on.
A
j
=
_
Z
s

1
2
(Z
b,j
+Z
b,j+1
)
_
y
j
(4.2.9)
P
j
=
_
(Z
b,j
Z
b,j+1
)
2
+ y
2
j
(4.2.10)
71
4.2. Formulaci on de Flujos en 1D
Figura 4.1: Representaci on de la secci on transversal en el Metodo Alpha
R
j
=
A
j
P
j
(4.2.11)
Donde A
j
es el area del ujo P
j
, permetro mojado, R
j
Radio hidr aulico. Para K
j
de la
franja j, son calculados por las ecuaciones 4.2.9, 4.2.10, 4.2.11 y:
K
j
=
A
j
R
2/3
j
n
j
(4.2.12)
Donde Z
b,j
, es la elevaci on del fondo en la estacion j, y
j
es la distancia entre estaciones
j, j + 1, n
j
es coeciente de la rugosidad de manning en la franja j.
La secci on transversal compuesta del area del ujo, es denido como la sumatoria de todos
las franjas (sub areas en los paneles).
La velocidad compuesta es denida como la divisi on de la descarga total entre el area de la
seccion conservando continuidad. El radio hidr aulico compuesto (transporte ponderado):
R =
M

j=1
R
j
K
j

M
j=1
K
j
(4.2.13)
Donde M es el n umero de franjas mojadas.
72
4.2. Formulaci on de Flujos en 1D
El Metodo Alpha se limita debido a que ignora el efecto de los muros verticales, lo cual
no es adecuado en situaciones donde existen supercies laterales verticales o pendientes
empinadas, pronunciados en los bancos.
Divisi on de Radio Hidraulico
Propuesto por Einstein (1950), es un metodo m as adecuado para determinar las
propiedades hidr aulicas compuestas para la seccion transversal con supercies verticales
rugosos o pendientes pronunciados en los bancos basados en la divisi on del radio hidr auli-
co. Este metodo asume velocidades iguales en todas las franjas y calcula todas las variables
hidraulicas en un modo normal, excepto para el coeciente de la rugosidad de Manning.
El esfuerzo de corte en la secci on transversal puede ser calculado como:
X

=
M

j=1
P
j

j
(4.2.14)
Donde:
P = Permetro mojado.
El metodo de Einstein determina:
= RS
f
(4.2.15)

j
= R
j
S
f
(4.2.16)
Aplicando y asumiendo las velocidades iguales y la ecuaci on de Manning en la secci on
transversal entera y para cada franja se tiene:
73
4.2. Formulaci on de Flujos en 1D
R =
_
nU
S
1/2
f
_
3/2
, R
j
=
_
n
j
U
S
1/2
f
_
3/2
(4.2.17)
Insertando las ecuaciones 4.2.15y 4.2.17 en la ecuaci on 4.2.14 se tiene:
n =
_
M

j=1
P
j
n
3/2
j
P
_
2/3
(4.2.18)
Metodo de la divisi on pendiente Energa
Este metodo es basado en la divisi on de la pendiente energa originado por Engelund
(1966), es otra opcion para determinar las propiedades hidraulicas compuestas para una
seccion transversal con supercies laterales verticales rugosas o pendientes pronunciadas
en los bancos.
Este metodo da:

j
= RS
f,j
(4.2.19)
Y aplica la asunci on de la velocidad igual y la ecuacion de Manning en la seccion transver-
sal entera y cada franja es:
S
f
=
_
nU
R
2/3
_
2
, S
f,j
=
_
n
j
U
R
2/3
_
2
(4.2.20)
Insertando las ecuaciones 4.2.15, 4.2.19 y 4.2.20 en la ecuaci on 4.2.14 se tiene la siguiente
ecuaci on para un Manning n compuesto.
n =
_
M

j=1
_
P
j
n
2
j
P
_
_
1/2
(4.2.21)
74
4.2. Formulaci on de Flujos en 1D
Metodo de la Transportabilidad - Conveyance
La asunci on de las velocidades iguales usados en los metodos anteriores, basado en la
divisi on de cualquiera de los dos radios hidraulicos o pendiente de energa es solamente
aplicable en canales o cauces simples.
Para un canal compuesto con inundaciones, las velocidades en el canal principal y playas de
inundacion pueden ser signicativamente diferentes. Una forma o un metodo m as adecuado
para determinar las propiedades hidraulicas compuestas en canales complejos es el metodo
de transporte (Conveyence Method).
Este metodo divide la secci on transversal en sub secciones de tal forma, que la asunci on
de las velocidades iguales puede ser aproximadamente valida en cada sub secci on. Y
estas sub secciones pueden aun ser ser dividido entre mas franjas. El area del ujo, el
permetro mojado y la conduccion de cada sub secci on puede ser calculada de manera
normal. Las conducciones de todas las sub secciones se suman para establecer el total de
la transportabilidad para la secci on transversal entera.
Por ejemplo en una secci on transversal compleja.
Figura 4.2: Seccion transversal compuesta con llanuras de inundacion
En la gura 4.2 se divide en tres secciones canal principal, llanura de inundaci on izquierda
y llanura de inundaci on derecha; y el total de la transportabilidad K es determinado por:
75
4.2. Formulaci on de Flujos en 1D
K =
A
5/3
LF
n
LF
P
2/3
LF
+
A
5/3
MC
n
MC
P
2/3
MC
+
A
5/3
RF
n
RF
P
2/3
RF
(4.2.22)
Donde los subndices LF denota llanura de inundaci on izquierda (Left Foodplain), MC
el canal o cauce principal (Main channel) y RF llanura de inundacion derecha (Right
Floodplain).
Para cada sub secci on, el coeciente de rugosidad de Manning puede ser determinado
usando el radio hidraulico o el metodo de la division pendiente energa (energy slope
division method).
Para el ejemplo el coeciente de rugosidad de Manning n en el canal principal es deter-
minado usando estos dos metodos como sigue:
n
MC
=
_
j=RCB

j=LCB
P
j
n
3/2
j
/P
MC
_
(4.2.23)
Donde: LCB y RCB representan franjas adyacentes del canal principal hacia la izquierda
y derecha bordes de las llanuras de inundaci on (denominados como en LF y RF seg un la
gura 4.2).
4.2.3. Propiedades Hidraulicas Compuestas
El factor de correcci on para la ecuaci on del momentum en la ecuaci on 4.2.2 es consid-
erado solo para una secci on transversal simple. Para una seccion transversal compuesta,
tal como en la gura anterior, el factor es determinado por:
=
1
QU
_ _
A
u
2
dA =
1
QA
(Q
LF
U
LF
+Q
MC
U
MC
+Q
RF
U
RF
) (4.2.24)
76
4.3. C alculos Uni-dimensionales para ujos en canales o cauces abiertos
=
A
K
2
_
K
2
LF
A
LF
+
K
2
MC
A
MC
+
K
2
RF
A
RF
_
(4.2.25)
4.3. Calculos Uni-dimensionales para ujos en
canales o cauces abiertos
.
4.3.1. Calculos de Flujos Permanentes 1-D
Discretizacion de ecuaciones para Flujos Permanentes
Para ujos permanentes en canales abiertos sin considerar ingresos y/o salidas de ujos
laterales, la ecuaci on 4.2.1 se reduce a:
Q
x
= 0 (4.3.1)
Y da lugar a una descarga del ujo constante. Mientras la ecuaci on 4.2.2 puede ser reescrito
como la ecuaci on de la Energa.

x
_

Q
2
2A
2
_
+g
Z
s
x
+g
Q|Q|
K
2
= 0 (4.3.2)
Donde

es el factor de correcci on de la energa cinetica debido a la no uniformidad de la


direcci on de la corriente en la secci on transversal. Para una seccion transversal compleja
como se muestra en la gura anterior,

puede ser determinado mediante el promedio de


la descarga ponderada de la energa cinetica.
77
4.3. C alculos Uni-dimensionales para ujos en canales o cauces abiertos

=
1
QU
2
_
Q
LF
U
2
LF
+Q
MC
U
2
MC
+Q
RF
U
2
RF
_
(4.3.3)

=
A
2
K
3
_
K
3
LF
A
2
LF
+
K
3
MC
A
2
MC
+
K
3
RF
A
2
RF
_
(4.3.4)
Donde todos los par ametros son iguales que en la ecuaci on 4.2.25
Asumimos que el dominio computacional de un canal simple es dividido en I 1 tramos
por I secciones transversales (puntos computacionales) como se muestra en la gura 4.3.
Las secciones transversales son numeradas en la direccion aguas abajo desde 1 hasta I.
Cada seccion transversal es representado por un n umero adecuado de puntos (estaciones)
como se muestra en la gura 3.2, con cada punto caracterizado por un par de valores o
coordenadas locales (z, y) distancia elevacion del fondo.
Para un canal simple, la longitud de alcance mide la ruta del ujo principal o canal
Thalweg
1
. Para un canal complejo, las rutas del ujo en el canal principal y llanuras de
inundacion pueden ser signicativamente diferentes y un promedio (tal como el promedio
de la descarga ponderada) de sus longitudes pueden ser usados como la longitud del
alcance.
Aplicando el metodo del paso standard para discretizar la ecuacion 4.3.2 se tiene.

i
Q
2
i
2gA
2
i
+Z
s,i
=

i+1
Q
2
i+1
2gA
2
i+1
+Z
s,i+1
+
x
i+1/2
2
_
Q
i+1
|Q
i+1
|
K
2
i+1
+
Q
i
|Q
i
|
K
2
i
_
(4.3.5)
Donde x
i
+1/2 representa la longitud de cada tramo entre las secciones transversales i y
i + 1.
1
En terminos cientcos se utiliza el nombre de Thalweg, voz procedente del aleman que signica
camino del valle, esta lnea que se encuentra en medio de la parte mas profunda del ro y donde la
corriente es mas rapida.
78
4.3. C alculos Uni-dimensionales para ujos en canales o cauces abiertos
Figura 4.3: Malla Uni-dimensional, Modelo de cauce en 1D
En la ecuaci on 4.3.5 la pendiente de fricci on es representado por la media aritmetica entre
las secciones transversales i e i + 1. Este puede ser representado por:
Media Aritmetica.
S
f,i+1/2
=
1
2
_
Q
i+1
|Q
i+1
|
K
2
i+1
+
Q
i
|Q
i
|
K
2
i
_
(4.3.6)
Media Armonica.
S
f,i+1/2
= 2/
_
K
2
i+1
Q
i+1
|Q
i+1
|
+
K
2
i
Q
i
|Q
i
|
_
(4.3.7)
Media Geometrica.
S
f,i+1/2
=
_
Q
i+1
|Q
i+1
|
K
2
i+1
Q
i
|Q
i
|
K
2
i
_
1/2
(4.3.8)
Transporte Medio.
S
f,i+1/2
=
_
Q
i+1
+Q
i
K
i+1
+K
i
_
2
(4.3.9)
Si las secciones transversales del estudio, presentan contracciones y/o expansiones, una
perdida local es considerado en la ecuacion 4.3.5, el cual la ecuacion nal se tiene:
79
4.3. C alculos Uni-dimensionales para ujos en canales o cauces abiertos

i
Q
2
i
2gA
2
i
+Z
s,i
=

i+1
Q
2
i+1
2gA
2
i+1
+Z
s,i+1
+
x
i+1/2
2
_
Q
i+1
|Q
i+1
|
K
2
i+1
+
Q
i
|Q
i
|
K
2
i
_
+
i+1/2

i+1
Q
2
i+1
2gA
2
i+1

i
Q
2
i
2gA
2
i

(4.3.10)
Donde
i+1/2
es el coeciente de la perdida local debido a la expansion o contraccion en
el tramo entre las secciones transversales i y i + 1.
Solucion de las Ecuaciones del Flujo Permanente Discretizados
La soluci on para la ecuacion 4.3.10 diere en casos de ujos sub crticos y super crticos.
Para el ujo Subcrtico: Una descarga del ujo es usualmente especicado en el ingreso y
una estacion del agua es especicado en la salida. Consecuentemente la descarga del ujo
es calculando aplicando la continuidad de masa y la estaci on del agua (tirante) puede ser
determinado por c alculos de remanso usando la ecuaci on 4.3.10. Como se ve, esta ecuaci on
es no lineal, por lo tanto, necesita ser resuelto iterativamente bajo un margen de error.
Denimos la siguiente funcion:
F =

i+1
Q
2
i+1
2gA
2
i+1

i
Q
2
i
2gA
2
i
+Z
s,i+1
Z
s,i
+
x
i+1/2
2
_
Q
i+1
|Q
i+1
|
K
2
i+1
Q
i
|Q
i
|
K
2
i
_
(4.3.11)
Puesto que Z
s,i+1
y la correspondiente A
i+1
y K
i+1
en la secci on transversal i+1 se obtuvo
del c alculo previo en el tramo entre las secciones i +1 y i +2 o del tirante (o estaci on del
agua) dado en la salida, ahora el problema es determinar Z
s,i
y la correspondiente area
A
i
y K
i
, garantizando F = 0. Aqu se usa el metodo de Bisecci on.
Para el ujo Supercrtico: La descarga del ujo y la estaci on del agua (tirante) son ingre-
sadas usualmente en el ingreso (upstream). El procedimiento para los calculos es el mismo
del ujo subcrtico, con la diferencia del sentido de calculo (upstream - downstream).
80
4.3. C alculos Uni-dimensionales para ujos en canales o cauces abiertos
Metodo de Biseccion
Es un metodo de b usqueda incremental que divide el intervalo siempre en 2. Si la funcion
cambia de signo un intervalo, se eval ua el valor de la funcion en el punto medio. La
posici on de la raz se determina situ andola en el punto medio del sub intervalo, donde
exista cambio de signo. El proceso se repite hasta mejorar la aproximacion.
Encontrar un segmento, eligiendo los valores iniciales [Z
lower
, Z
upper
], en el cual la
seccion de Z
s,i
existan, por ejemplo: F
upper
F
lower
< 0, con F
upper
y F
lower
, siendo los
valores de F correspondiente a Z
upper
y Z
lower
, respectivamente.
Los Z
middle
= (Z
upper
+Z
lower
)/2 y se calcula F
middle
. Los valores de F correspondi-
ente a Z
middle
(Z
intermedio
).
Si F
middle
= 0 (o inferior a la tolerancia prudente), Z
middle
es la soluci on de Z
s,i
y si
F
upper
F
middle
< 0, entonces el Z
lower
= Z
middle
.
Si Z
upper
Z
lower
es inferior a la tolerancia razonable, entonces (Z
upper
+ Z
lower
)/2
puede ser la soluci on de Z
s,i
y para la iteracion; de otro modo repetir desde el paso
(2) hasta que la soluci on converja.
Note que la b usqueda en el paso (1) para los lmites inferior y superior (lower, upper)
Z
lower
y Z
upper
del segmento inicial donde las soluciones existan puedan estar desde
cualquier elevacion o fondo del canal Z
s,i+1
.
81
4.3. C alculos Uni-dimensionales para ujos en canales o cauces abiertos
4.3.2. Resumen de ecuaciones empleados en el programa PLE-
DER
F =

i+1
Q
2
i+1
2gA
2
i+1

i
Q
2
i
2gA
2
i
+Z
s,i+1
Z
s,i
+
x
i+1/2
2
_
Q
i+1
|Q
i+1
|
K
2
i+1
Q
i
|Q
i
|
K
2
i
_
(4.3.12)
S
f,i+1/2
=
_

_
Media Aritmetica:
1
2
_
Q
i+1
|Q
i+1
|
K
2
i+1
+
Q
i
|Q
i
|
K
2
i
_
Media Armonica : 2/
_
K
2
i+1
Q
i+1
|Q
i+1
|
+
K
2
i
Q
i
|Q
i
|
_
Media Geometrica:
_
Q
i+1
|Q
i+1
|
K
2
i+1
Q
i
|Q
i
|
K
2
i
_
1/2
Transporte Medio:
_
Q
i+1
+Q
i
K
i+1
+K
i
_
2
(4.3.13)
h
f,i+1/2
= x
i+1/2
S
f,i+1/2
(4.3.14)
h
c,i+1/2
=
i+1/2

i+1
Q
2
i+1
2gA
2
i+1

i
Q
2
i
2gA
2
i

(4.3.15)
K
i
=
A
5/3
LF,i
n
LF,i
P
2/3
LF,i
+
A
5/3
MC,i
n
MC,i
P
2/3
MC,i
+
A
5/3
RF,i
n
RF,i
P
2/3
RF,i
(4.3.16)

i
=
A
2
i
K
3
i
_
K
3
LF,i
A
2
LF,i
+
K
3
MC,i
A
2
MC,i
+
K
3
RF,i
A
2
RF,i
_
(4.3.17)
82
4.4. Diagramas de ujo
4.4. Diagramas de ujo
Para este componente (Hidr aulica) se emplea objetos personalizados con aplicaciones de
ObjectDBX.

Este es una librera dinamica DLL, que es cargado dentro del ambiente
AutoCAD, permitiendo el acceso de los objetos o recurso CAD.
ObjectBDX, es el nombre del API Autodesk que sirve para los desarroladores que usan
la lectura y escritura del autoCAD DWG, DXF, incluyendo soportes para crear entidades
personalizadas.
Los diagramas de ujos son:
Diagrama de ujo Calculo de la Supercie Libre Metodo del Paso Estan-
dar: Recibe los datos de las secciones transversales, geometra, caudal de dise no,
condici on de borde inicial dependiendo del tipo de ujo. Para el Flujo Subcrtico,
las condiciones iniciales son aguas abajo (downstream) y para el Flujo Supercrtico
las condiciones iniciales son aguas arriba (upstream).
Diagrama de ujo Condiciones Aguas Abajo: Viene a ser la eleccion del ujo
Subcrtico, donde los calculos son a partir de la ultima secci on transversal hasta
la primera secci on. En el diagrama se toma como dato al tirante hidraulico, area
hidraulica, permetro mojado y demas caractersticas que se muestra. As mismo
contiene una funci on para calcular los niveles mediante el metodo bisecci on que se
detalla posteriormente.
Diagrama de ujo Condiciones Aguas Arriba: El diagrama corresponde al
ujo Supercrtico. El mecanismo es el mismo del anterior, con la unica diferencia de
que el an alisis es desde la primera secci on transversal (upstream) hasta la ultima
seccion.
83
4.4. Diagramas de ujo
Diagrama de ujo Calculo del

Area y Permetro hidraulico: A partir del
tirante asignado o calculado (nivel de supercie libre), en cada secci on transversal
se obtiene las areas y los permetros. El metodo que emplea es mediante franjas
verticales entre vertices adyacentes. En los extremos de la seccion transversal, se
forman tri angulos y en el intermedio peque nos trapecios, donde la sumatoria de ellos
representa el area y el permetro seg un corresponda. El metodo es muy adecuado
para secciones transversales complejas controlando inundaciones laterales (izquierda,
derecha) en cada secci on transversal.
Diagrama de ujo Calculo del Factor de Transporte K: El metodo para cal-
cular el factor de transporte es una fracci on entre el area y el permetro multiplicado
por el coeciente de manning. En programacion es recomendable no tener valores
nulos o ceros en el denominador de una fracci on. El diagrama controla este posible
error.
Diagrama de ujo Calculo del Factor de correccion

: Calcula el factor de
correcci on

en cada secci on transversal, previniendo los posibles valores nulos en


los denominadores de las fracciones.
Diagrama de ujo Metodo de la Biseccion: El metodo de la Biseccion tambien
es conocido como el metodo de partici on en dos intervalos iguales. Este metodo busca
la raz de una funcion en un intervalo propuesto, usando la tecnica de b usqueda
incremental, para encontrar donde la funcion cambie de signo, o sea, cuando la
funci on cruza el eje de la coordenada x, por lo tanto, sera el valor de la raz buscada.
Diagrama de ujo Funci on F: Este diagrama corresponde al calcular en forma
directa la funcion F, que es la ecuaci on del balance de energa.
Los resultados son:
84
4.4. Diagramas de ujo
Gr acos, que corresponde a los niveles de supercie libre de agua, tanto en las secciones
transversales como en los perles longitudinales.
Tabulares, (tablas) resumen de las caractersticas hidraulicas del ujo, tales como, caudal
de dise no, tirante, area, permetro, velocidad, n umero de froude, ancho o espejo de agua,
etc.
85

INICIOCLCULODELASUPERFICIELIBRE
METODODELPASOESTANDARD
Datosdelassecciones
transversales(geometra)
Ordenarconsecutivamente
lasseccionestransversales
nST=Nmerodesecciones
transversales.
TipodeFlujo,Caudaldediseo
(m3/s),Nivelinicial(m)
TipodeFlujo
F.Subcrtico F.Supercrtico F. Mixto
Condicin
Aguas Abajo *(A)
Condicin
Aguas Arriba *(B)
CondicinAguasArriba
y Aguas Abajo
FINCLCULODELASUPERFICIE
Nivelesdelasuperficielibre
deaguaylascaractersticas
hidrulicas.
4.4. Diagramas de ujo
86

(A)INICIOCONDICIN
AGUASABAJO
i=nST1,hastai=0,
i=i1
Zsi = Cota tiiante
|Aiea, Peiimetio] = uetAieaPeiimetei *(C).
K = uetConveyanceK *(B).
Beta = uetCoiiectionFactoiBeta *(E)

Zlowei = Cota minima ue la seccion actual.
Zuppei = Zsi + valoi supeiioi.

Batos ueomtiicos ue la seccion tiansveisal:

BL = vitice llanuia izquieiua.
BR= vitice llanuia ueiecha.
nL = Coeficiente ue Nanning llanuia izquieiua.
nC = Coeficiente ue Nanning canal cential.
nR = Coeficiente ue Nanning llanuia ueiecha.
LL = Longituu poi la llanuia izquieiua.
LC = Longituu poi el canal cential.
LR = Longituu poi la llanuia ueiecha.
CC = Coeficiente ue contiaccion.
CE = Coeficiente ue expansion.

ClculomtododeBiseccin *(F)

Reasignai valoies:
Beta = Clculos|Beta]
Aiea = Clculos|Aiea]
Zsi = Clculos|Zsi]
K = Clculos|K]
FINCONDICINAGUASABAJO
Nivelesdelasuperficielibre
deaguaylascaractersticas
hidrulicas.
4.4. Diagramas de ujo
87

i=1,hastai=nST,
i=i+1
Zsi = Cota tiiante
|Aiea, Peiimetio] = uetAieaPeiimetei *(C).
K = uetConveyanceK *(B).
Beta = uetCoiiectionFactoiBeta *(E)

Zlowei = Cota minima ue la seccion actual.
Zuppei = Zsi + valoi supeiioi.

Batos ueomtiicos ue la seccion tiansveisal:

BL = vitice llanuia izquieiua.
BR= vitice llanuia ueiecha.
nL = Coeficiente ue Nanning llanuia izquieiua.
nC = Coeficiente ue Nanning canal cential.
nR = Coeficiente ue Nanning llanuia ueiecha.
LL = Longituu poi la llanuia izquieiua.
LC = Longituu poi el canal cential.
LR = Longituu poi la llanuia ueiecha.
CC = Coeficiente ue contiaccion.
CE = Coeficiente ue expansion.

ClculomtododeBiseccin *(F)

Reasignai valoies:
Beta = Clculos|Beta]
Aiea = Clculos|Aiea]
Zsi = Clculos|Zsi]
K = Clculos|K]
FINCONDICINAGUASARRIBA
Nivelesdelasuperficielibre
deaguaylascaractersticas
hidrulicas.
(B)INICIOCONDICIN
AGUASARRIBA
4.4. Diagramas de ujo
88


VF

V F

(C)INICIO
uETAREAPERINETER
CotaTirante,Vrticesdela
seccintransversal,BL,BR.
Inundacinvrticederecho=falso.
Inundacinvrticeizquierdo=falso.
CotaTirante>
PrimerVrtice[Y]
Incrementarunvrticeinicialcon
coordenadas:
X=PrimerVrtice[X].
Y=CotaTirante.
Inundacinvrticeizquierdo=verdadero.
CotaTirante>
PrimerVrtice[Y]
IncrementarunvrticeFinalcon
coordenadas:
X=ltimoVrtice[X].
Y=CotaTirante.
Inundacinvrticederecho=verdadero.
(1)
4.4. Diagramas de ujo
89

V F

...(1)
Area(m2),Permetro(m)
j=1,hastaNde
Vrtices,j=j+1
CotaTirante<=
Vertices[j].y
Y=CotaTirante
A

=
1
2
j( -
+1
)
2
[
-X
i

i
-
i+1
[ X
+1
P

= _( -
+1
)
2
+ j
(-
i+1
)(X
i+1
-X
i
)

i
-
i+1
[
2
Condicin=Verdadero
Condicin=Verdadero
A
]
=
1
2
|( -
]
) + ( -
]+1
)] (X
]+1
- X
]
)
P
]
=
_
(X
]+1
-X
]
)
2
+(
]+1
-
]
)
2
J=J+1
A
k
=
1
2
j( -
k
)
2
[
X
k+1
-X
k

k+1
-
k
[
P
k
= _( -
k
)
2
+ j
(-
k
)(X
k+1
-X
k
)

k+1
-
k
[
2

Vertices[j+1].y
>= Cota Tirante
Vertices[j+1].y
< Cota Tirante
Condicin=Verdadero
Condicin=Falso
V
F
V F
V F
FINuETAREAPERINETER
4.4. Diagramas de ujo
90

(D)INICIO
uETC0NvEYANCEK
ALF =reallanuraizquierda.
AMC =reaCanalCentral.
ALR =reallanuraderecha.
PLF =Permetrollanuraizquierda.
PMC =PermetroCanalCentral.
PLR =Permetrollanuraderecha.
nLF =CoeficientedeManningllanuraizquierda.
nMC =CoeficientedeManningCanalCentral.
nLR =CoeficientedeManningllanuraderecha.

KLF=KMC=KRF=0.0
PLF!=0.0
KIF =
ALP
S3
nLP PLP
23

PMC!=0.0
KHC =
AMC
S3
nMC PMC
23
PRF!=0.0
KRF =
ARP
S3
nRP PRP
23
K=KLF+KMC+KRF
FINuETC0NvEYANCEK
V
V
V
F
F
F
4.4. Diagramas de ujo
91

(E)INICIO
uETC0RRECTI0NFACT0RBETA
ALF!=0.0
BetaLF =
KLP
3
ALP
2

AMC!=0.0
ARF!=0.0
' =
A
2
K
3
(BetaLF + BetaNC + BetaRF)
FINuETC0RRECTI0NFACT0RBETA
ALF =reallanuraizquierda.
AMC =reaCanalCentral.
ALR =reallanuraderecha.
KLF =Permetrollanuraizquierda.
KMC =PermetroCanalCentral.
KLR =Permetrollanuraderecha.
K =KLF+KMC+KRF
A =ALF+AMC+ARF
BetaLF =0.0
BetaMC=0.0
BetaRF =0.0
BetaNC =
KMC
3
AMC
2

BetaRF =
KRP
3
ARP
2
F
F
F
V
V
V
4.4. Diagramas de ujo
92

(F)INICIONET0B0 BE
BISECCI0N
Zlower =Extremovalorinferior.
Zupper =Extremovalorsuperior.
Variableshidrulicas.
NoEncontrado=verdadero
NoEncontrado = Verdadero
ZmiJJlc =
zIowc+zuppc
2
|Aiea, Peiimetio] = uetAieaPeiimetei *(C).
K = uetConveyanceK *(B).
Beta = uetCoiiectionFactoiBeta *(E)
Fmiuule = FuncionF *(u)
V
F
Abs(Fmiddle)<TOL
V
Nivel=Zmiddle
NoEncontrado=falso
F
Abs(Fmiddle)<TOL
V
Zupper=Zmiddle
F
Zlower=Zmiddle
Abs(ZupperZlower)
<TOL
V
Ni:cl =
zIowc+zuppc
2

NoEncontrado=falso
Nivelesdesuperficielibre
VariablesHidrulicas
FINNET0B0 BE BISECCI0N
Flowei = FuncionF
Fuppei = FuncionF
F
4.4. Diagramas de ujo
93

(G)INICIOF0NCI0NF
F =
['
+1

+1
2
2gA
+1
2
-
['

2
2gA

2
+Z
s,+1
- Z
s,
+
X
+12
2
_

+1
|
+1
|
K
+1
2

|
K

2
_
Bi1 =FactordeCorrecinBetaenlaestacini+1.
Bi =FactordeCorrecinBetaenlaestacini.
Qi1 =Descargadelflujoenlaestacini+1.
Qi =Descargadelflujoenlaestacini
Ai1 =Areadelaseccintransversalenlaestacini+1.
Ai =Areadelaseccintransversalenlaestacini.
Zi1 =Cotadelniveldeaguaenlaestacini+1.(valoraencontrar)
Zi =Cotadelniveldeaguaenlaestacini.
hfi12 =Prdidaporfriccineneltramoi+1/2.
hci12 =PrdidaLocaleneltramoi+1/2.

F
FINF0NCI0NF
4.4. Diagramas de ujo
94
Captulo 5
SOCAVACI

ON EN R

IOS Y
DIAGRAMAS DE FLUJO
5.1. Introducci on
El fenomeno de la socavacion en cauces naturales, ocurre generalmente en presencia de las
m aximas avenidas (Max Flood), produciendo alteraciones de la geometra de las secciones
transversales tanto en el fondo como en las riberas del cauce. El programa PLEDER, para
determinar la socavaci on general utiliza el criterio propuesto por Lischtvan-Lebeviev, para
el cual es necesario conocer las clasicaciones de los cauces de los ros y de los materiales
que estos lo conforman.
5.2. Clasicacion de los Ros
Se clasica en cauce principal denido y cauce principal indenido.
95
5.2. Clasicaci on de los Ros
5.2.1. Cauce principal denido
Se trata de cauces con tres elementos bien denidos, canal principal (main channel),
llanura de inundaci on izquierda (Left Floodplain), llanura de inundacion derecha (Right
Floodplain).
Figura 5.1: Seccion transversal en cauce principal denido
En periodos de estiaje, las llanuras de inundaci on en muchas ocasiones suelen estar cu-
biertas de vegetacion o arbustos de peque na estatura. El canal principal es por lo general
estable y algo profundo entres las llanuras.
5.2.2. Cauce principal indenido
Este cauce es cuando existe una supercie casi plana donde el ro escurre por varias partes
al mismo tiempo.
Figura 5.2: Secci on transversal en cauce principal indenido
96
5.3. Socavaci on General en cauces denidos
En muchos casos se tiene aguas estancadas debido al cambio en el caudal y a la topografa
del cauce.
5.3. Socavacion General en cauces denidos
El criterio de erosion es producto del incremento del caudal del ujo (mayor velocidad,
siempre en cuando se mantiene el area de la seccion transversal mojada), aumentando la
capacidad de arrastre de la corriente, con la que se inicia a degradar el material de fondo
(generalmente en la lnea de thalweg). Ahora, al descender el fondo, aumenta gradualmente
el area hidraulica, donde se reduce paulatinamente el valor medio de la velocidad de la
corriente y por ende la capacidad de arrastre, hasta el momento en que se alcanza un
estado de equilibrio.
Este equilibrio, existe cuando son iguales la velocidad media real de la corriente U
r
, y
la velocidad media que se requiere para que un material de caractersticas dadas sea
arrastrado U
e
.
La velocidad U
r
, esta dada en funci on de las caractersticas hidr aulicas del cauce (pen-
diente, tirante, ujo, rugosidad, etc.). Con respecto a la velocidad U
e
est a en funci on de
las caractersticas del material del fondo y del tirante del ujo. Para valuarla, las caracte-
rsticas representativas que se toman en cuenta tratandose de material no cohesivo, es el
di ametro medio d
m
. No se considera el peso especco, ya que se supone que para todas
las arenas y gravas una densidad uniforme. Si el suelo es cohesivo, se toma en cuenta el
peso especco del material seco.
5.3.1. Socavacion General para Suelos Cohesivos
La magnitud de la erosion es suelos limosos y arcillosos dependen principalmente del peso
volumetrico del suelo seco. El valor de la velocidad media que se requiere para degradar
97
5.3. Socavaci on General en cauces denidos
el fondo esta dado por la ecuacion.
U
e
= 0,60
1,18
s
H
X
s
(5.3.1)
Donde:
H
s
: Tirante considerado a cuya profundidad se desea conocer que valor de U
e
se requiere
para arrastrar y levantar el material.
X: Exponente variable esta en funcion del
s
, el cual se encuentra en el cuadro 5.2. Se
indica el valor del coeciente X.
: Coeciente de paso, que depende de la frecuencia con que se repite la avenida que se
estudia y cuyo valor se dan en en cuadro 5.1.

s
: Peso volumetrico del material seco que se encuentra a la profundidad H
s
(ton/m
3
)
Cuadro 5.1: Valores del coeciente
Probabilidad en%,
que se presente Coeciente
el gasto de dise no
100 0.77
50 0.82
20 0.86
10 0.90
5 0.94
2 0.97
1 1.00
0.3 1.03
0.2 1.05
0.1 1.07
98
5.3. Socavaci on General en cauces denidos
Cuadro 5.2: Valores de X , para suelos cohesivos y no cohesivos
SUELOS COHESIVOS SUELOS NO COHESIVOS

s
X d
m
X
0.80 0.52 0.05 0.43
0.83 0.51 0.15 0.42
0.86 0.50 0.50 0.41
0.88 0.49 1.00 0.40
0.90 0.48 1.50 0.39
0.93 0.47 2.50 0.38
0.96 0.46 4.00 0.37
0.98 0.45 6.00 0.36
1.00 0.44 8.00 0.35
1.04 0.43 10.00 0.34
1.08 0.42 15.00 0.33
1.12 0.41 20.00 0.32
1.16 0.40 25.00 0.31
1.20 0.39 40.00 0.30
1.24 0.38 60.00 0.29
1.28 0.37 90.00 0.28
1.34 0.36 140.00 0.27
1.40 0.35 190.00 0.26
1.46 0.34 250.00 0.25
1.52 0.33 310.00 0.24
1.58 0.32 370.00 0.23
1.64 0.31 450.00 0.22
1.71 0.30 570.00 0.21
1.80 0.29 750.00 0.20
1.89 0.28 1000.00 0.19
2.00 0.27
La variacion de la velocidad media U
r
de la corriente en funcion de la profundidad y para
cada punto de la secci on transversal, puede ser obtenida analizando una franja vertical.
La hipotesis que se formula para realizar el calculo es que el gasto unitario es cada franja
permanece constante mientras dura el proceso de erosion.
Donde:
B, representa el ancho de la supercie, H
0
tirante en el punto P antes de la erosi on, H
s
tirante supuesto, para el cual se desea conocer el muevo valor de la velocidad, P punto
99
5.3. Socavaci on General en cauces denidos
Figura 5.3: Secci on transversal, Socavaci on general
cualquiera, en el cual se desea conocer el cambio de velocidad al aumentar el tirante.
Ecuaciones para la socavaci on general
Desde la franja considera en la gura 5.3 con espesor B, el caudal del ujo que pasa por
esta seccion est a dada seg un la ecuaci on de Manning.
Q = UA =
1
n
S
1/2
f
H
5/3
0
B (5.3.2)
Donde para H
0
=
H
j
+H
j+1
2
Figura 5.4: Franja en estudio para la socavaci on
Algunos textos para simplicar operaciones, asumen en las secciones transversales como
rectangulares o trapezoidales, de tal forma que el area del ujo es el ancho de la supercie
por una altura media. Estos criterios son manejados debido a las geometras complejas
que se presentan en los cauces naturales.
100
5.3. Socavaci on General en cauces denidos
A continuaci on se muestra las ecuaciones sin alterar estas caractersticas, por lo tanto:
Q =

n
S
1/2
f
A
5/3
P
2/3
(5.3.3)
Donde:
, es el coeciente de contracci on por las turbulencias que se presentan. A, es el area total
del ujo en la seccion transversal. P, permetro total de la seccion transversal.
De las ecuaciones 5.3.2 y 5.3.3 se tiene.
S
1/2
f
n
=
QP
2/3
A
5/3
(5.3.4)
De las ecuaciones 5.3.4 y 5.3.2, se tiene
Q =
S
1/2
f
n
H
5/3
0
B =
QP
2/3
A
5/3
H
5/3
0
B
Q =
QP
2/3
H
5/3
0
B
A
5/3
(5.3.5)
De la gura 5.4 en la franja en estudio, al incrementarse H
0
y al alcanzar un valor
cualquiera H
s
, la velocidad disminuye a un nuevo valor U
r
. El caudal del ujo Q en la
misma franja, est a en funcion (directamente proporcional) de esta velocidad y el tirante
se expresa por:
Q = U
r
H
s
B (5.3.6)
igualando la ecuaci on 5.3.5 y 5.3.6
101
5.3. Socavaci on General en cauces denidos
QP
2/3
H
5/3
0
B
A
5/3
= U
r
H
s
B (5.3.7)
Donde se tiene:
U
r
=
QP
2/3
H
5/3
0
A
5/3
H
s
(5.3.8)
Lo que indica que la erosi on se detendr a cuando a una profundidad cualquiera alcanzada,
el valor de U
r
, velocidad de la corriente capaz de producir arrastre, y U
e
, velocidad que
se necesita para que el fondo se degrade sean iguales (Condicion de equilibrio).
U
e
= U
r
(5.3.9)
Por lo tanto
0,60
1,18
s
H
X
s
=
QP
2/3
H
5/3
0
A
5/3
H
s
H
1+X
s
=
QP
2/3
H
5/3
0
0,60A
5/3

1,18
s
H
s
=
_
QP
2/3
H
5/3
0
0,60A
5/3

1,18
s
_ 1
1+X
(5.3.10)
Esta ecuaci on 5.3.10, cumple para suelos Homogeneos.
5.3.2. Socavacion General para Suelos No Cohesivos
El fen omeno fsico es el mismo para estos tipos de suelos (granos sueltos, arena, gravas,
etc), manteniendo la misma f ormula para la velocidad real, lo que s cambia es la velocidad
media que se requiere para degradar el fondo U
e
U
e
= 0,68d
0,28
m
H
X
s
(5.3.11)
102
5.3. Socavaci on General en cauces denidos
Donde:
d
m
, di ametro medio de los granos del fondo, obtenidos seg un la expresi on (mm).
d
m
= 0,01

(d
i
P
i
) (5.3.12)
Donde:
d
i
, diametro de una fracci on en una curva granulometrica de la muestra total que se analiza
(mm). P
i
, porcentaje del peso de esta misma porci on, comparada con el peso total de la
muestra. Las fracciones escogidas no deben ser necesariamente iguales entre s.
Usando el mismo criterio de equilibrio de velocidades U
e
= U
r
, se tiene:
0,68d
0,28
m
H
X
s
=
QP
2/3
H
5/3
0
A
5/3
H
s
H
1+X
s
=
QP
2/3
H
5/3
0
0,68A
5/3
d
0,28
m
H
s
=
_
QP
2/3
H
5/3
0
0,68A
5/3
d
0,28
m
_ 1
1+X
(5.3.13)
103
5.4. Diagramas de ujo
5.4. Diagramas de ujo
Diagrama de ujo Calculo de la Socavacion General: El diagrama, corres-
ponde al c alculo de la socavaci on general mediante el metodo de Lischtvan-Lebeviev
para cada secci on transversal considerado. Para calcular la socavacion general, es
necesario como dato principal las caractersticas fsicas del las secciones transversales
y las caractersticas hidr aulicas tales como el area hidr aulica, permetro mojado y el
caudal de dise no. Finalmente obtiene las coordenadas de la nueva secci on transversal
socavada y las alturas en cada vertice.
Diagrama de ujo Coeciente X: El coeciente X, es un dato importante que
se emplea en la soluci on de la altura de socavacion en lecho cohesivo y no cohesivo
(ecuaci on 5.3.10, 5.3.13). El diagrama, depende de dos tipos de materiales (cohesivo
y no cohesivo). Para el material cohesivos, como dato principal es el peso especco
del material ingresados en ton/m
3
y para el material no cohesivo es el diametro medio
d
m
de las partculas en mm. Para cada intervalo se realizo ajustes polinomicas, con
coecientes de regresion muy aceptables (R
2
= 0,99).
Diagrama de ujo Lischtvan-Lebeviev: Corresponde a las aplicaci on directa
de las ecuaciones 5.3.10 y 5.3.13, dependiendo del tipo de material asignado en la
seccion transversal.
Los resultados son:
Gr acos, (polilneas) en casa una de las secciones transversales.
Tabulares, (tablas) altura de socavacion en cada vertice de la seccion transversal.
104

i=1,hastai=nST,
i=i+1
Nivelesdelasuperficielibredeaguaylas
caractersticashidrulicas.
Tipodematerial.
%deprobabilidaddegasto.

ClculodelcoeficienteX:CoeficienteX*(H)
ClculosocavacinporLischtvanLebeviev:
LischtvanLebeviev*(I)
INICIOCLCULODELA
SOCAVACINGENERAL
FINCLCULODELA
SOCAVACINGENERAL
Alturadesocavacindelas
seccionestransversales
5.4. Diagramas de ujo
105

(H)INICIOCLCULODEL
COEFICIENTE X
C=MaterialCohesivos(Ton/m3) NC=MaterialNoCohesivos(mm)
TipodeMaterial
Cohesivo NoCohesivo
(1) (2)
FINCLCULODEL
COEFICIENTE X
ValordelcoeficienteX
J
5.4. Diagramas de ujo
106

0<C<0.80
0.8C2.00
X=Interpolacin(C)
F
F
V
V
C >2.00
J
F V
...(1)
X = -u.u97SC
3
+ u.SS9C
2
- 1.11SC +1.117
X = -u.u97SC
3
+ u.SS9NC
2
-1.11SC +1.117
5.4. Diagramas de ujo
107

0<NC<0.05
X = u.4S

0.05 NC 1000
X=Interpolacin(NC)
F
F
V
V
NC >1000
J
X = 1.Sux1u
-7
NC
2
- 2.44x1u
-4
NC + u.Su4
F V
...(2)
5.4. Diagramas de ujo
108

(I)INICIOCLCULOSOCAVACIN
LISCHTVANLEBEVIEV
MaterialCohesivos MaterialNoCohesivos
TipodeMaterial
Cohesivo NoCohesivo
E
s
= _
P
23
E
0
53
u.6upA
53
y
s
1.18
_
1
1+X
FINCLCULOSOCAVACIN
LISCHTVANLEBEVIEV
Niveles de socavacin en
cada vrtice de la seccin
transversal
E
s
= _
P
23
E
0
53
u.68pA
53
J
m
0.28
_
1
1+X
5.4. Diagramas de ujo
109
Captulo 6
APLICACI

ON PR

ACTICA DEL
PROGRAMA DESARROLLADO
6.1. Introducci on
La aplicacion pr actica hace referencia al proyecto Construccion de la Defensa Ribere na
Ro Huallaga-Huariaca en el estudio hidrol ogico - hidraulico e hidr aulica uvial, con el
objetivo de determinar los caudales de maximas avenidas para realizar los dimension-
amientos adecuados y optimos de la defensa ribere na de la ciudad de Huariaca que se
ubica adyacente al Ro Huallaga en 2.5 km.
El estudio Hidrologico, corresponde a determinar el caudal de m aximas avenidas a partir
de datos de precipitaci on m axima de 24 horas registrados en la estacion Yanahuanca,
latitud 10

29S, longitud 76

30W y altitud 3473 m.s.n.m., en el departamento de Pasco,


provincia Daniel A. Carri on y distrito Yanahuanca.
El estudio Hidraulico, concierne a transitar el caudal de dise no para un perodo de re-
torno asignado, a traves de las 125 secciones transversales del cauce, espaciadas cada 20.0
metros en tramos longitudinales rectos a traves de la lnea thalweg. El tr ansito del caudal
110
6.2. Descripcion General de Programa PLEDER
m aximo determina encontrar el perl de la supercie libre de agua, incluyendo par ametros
hidraulicos de dise no en cada una de las secciones transversales, a partir de los cuales se
podr a proyectarse ecientemente las estructuras hidr aulicas de protecci on.
El estudio de Hidr aulica Fluvial, permite determinar el ancho estable del cauce, transporte
de sedimentos, socavaciones generales.
Cada uno de estos componentes, ser an llevados a cabo mediante el programa PLEDER,
obteniendo los resultados nales gr acas y tabulares, que son necesarios para su inter-
pretacion.
6.2. Descripcion General de Programa PLEDER
El programa Lluvia Escorrenta para Simulaci on de Defensas Ribere nas (PLEDER), rea-
liza el proceso hidrol ogico, hidraulico e hidr aulica uvial, este ultimo abarca las socava-
ciones generales de las secciones transversales, en el ambiente AutoCAD. PLEDER en su
primera versi on contiene 13 commandos, 5 en el componente hidrol ogico, 6 en el compo-
nente hidr aulico y 2 comandos en hidraulica uvial.
PLIILA: Componente Hidrol ogico, muestra la ventana para calcular Hietogramas
mediante el metodo IILA SENAMHI UNI.
Figura 6.1:

Icono: PLIILA
PLNRCS: Componente Hidrol ogico, muestra la ventana para calcular Hietogramas
mediante el metodo NRCS.
111
6.2. Descripcion General de Programa PLEDER
Figura 6.2:

Icono: PLNRCS
PLLLES: Componente Hidrol ogico, comando principal que muestra la ventana para
calcular la transformaci on Lluvia - Escorrenta.
Figura 6.3:

Icono: PLLLES
PLCNC: Componente Hidrologico, comando alternativo para calcular el N umero
de Curva Compuesto.
Figura 6.4:

Icono: PLCNC
PLHU: Componente Hidrologico, importar los datos de las coordenadas hidrograma
unitario [U] y y pulso [P], para realizar la convoluci on discreta.
Figura 6.5:

Icono: PLHU
PLHSTC: Componente Hidr aulico, comando principal para crear y almace-
nar los vertices de las secciones transversales, a partir de una polilnea. Medi-
ante este comando, el programa PLEDER, crear el objeto personalizado llamado
112
6.2. Descripcion General de Programa PLEDER
CPLEDERCROSSSECTIONS, quien contiene la base de datos de los par ametros
de ingreso en las secciones transversales.
Figura 6.6:

Icono: PLHSTC
PLHCAL: Componente Hidraulico, calcula los par ametros hidr aulicos y los niveles
de la supercie libre, mediante el metodo del paso est andar en ujo permanente.
El comando crea el segundo objeto personalizado PLEDERHYDRAULICRESULT,
donde los resultados se almacena en su base de datos.
Figura 6.7:

Icono: PLHCAL
PLHPSL: Componente Hidraulico, plotea la supercie libre de agua en un punto
especicado por el usuario en coordenadas y escalas inalteradas. Este comando es
habilitado, una vez computado o calculado los niveles de las secciones transversales.
Figura 6.8:

Icono: PLHPSL
PLHTST: Componente Hidr aulico, comando alternativo y utilitario para realizar
informes de las secciones transversales en tablas editables y con opciones a ser ex-
portado a archivos con extensi on csv.
113
6.2. Descripcion General de Programa PLEDER
Figura 6.9:

Icono: PLHTST
PLHRES: Componente Hidr aulico, muestra en un cuadro de dialogo los resultados
o par ametros hidraulicos calculados en cada seccion transversal.
Figura 6.10:

Icono: PLHRES
PLHDEL: Componente Hidr aulico, elimina los niveles calculados en
las secciones transversales y la base de datos del objeto personalizado
PLEDERHYDRAULICRESULT.
Figura 6.11:

Icono: PLHDEL
PLHSOC: Componente Hidr aulica Fluvial, este comando permite ingresar los datos
de las secciones transversales para calcular las socavaciones generales.
Figura 6.12:

Icono: PLHSOC
PLHSCC: Componente Hidraulica Fluvial, comando principal para calcular las
socavaciones generales en las secciones transversales.

Este comando plotea y muestra
los resultados tabulares de las socavaciones en cada una de las secciones.
114
6.3. C alculos y Resultados Hidrol ogicos
Figura 6.13:

Icono: PLHSCC
PLEDER, organizada los comandos descritos dentro del AutoCAD en men us, toolbars y
paneles Ribbon. La opci on Ribbon se utiliza a partir de la versi on 2009, quien muestra
una mejor organizaci on, visualizaci on en los comandos personalizados.
Figura 6.14: PLEDER, paneles Ribbon
6.3. Calculos y Resultados Hidrol ogicos
De las informaciones cartogr acas, pluviometrica de la zona de estudio, se determina el
caudal de m aximas avenidas para diferentes perodos de retorno, considerando para este
caso los hietogramas sinteticos elaborados por el NRCS en la curva tipo II.
Los datos de la cuenca se resume en la tabla 6.1, as tambien se adjunta en el apendice E
la cartografa, red topol ogica, altitud y el perl longitudinal del cauce principal.
Cuadro 6.1: Datos de la cuenca principal
Descripci on Medida

Area de la cuenca 581.587 km


2
.
Permetro de la cuenca 128.713 km.
Longitud del cauce 47.110 km.
Cota m as baja 2970.000 m.s.n.m.
Cota m as alta 4500.000 m.s.n.m.
Tiempo de Concentraci on 289.350 min
115
6.3. C alculos y Resultados Hidrol ogicos
Mediante el comando PLLLES o el cono de la gura 6.3, muestra el interfaz gr aco para
calcular la transformaci on de lluvia - escorrenta. Contiene 3 parametros importantes de
ingreso:
6.3.1. Parametro Cuenca [U]
Parametro Cuenca [U] corresponde a la obtenci on de las coordenadas del hidrograma
unitario, mediante las caractersticas fsicas de la cuenca y el tipo del hidrograma unitario
sintetico (hidrograma unitario NRCS e hidrograma unitario Snyder).

Figura 6.15: PLEDER, datos Transformaci on Lluvia Escorrenta


Dentro de este parametro, PLEDER presenta utilitarios tales como el calcular las areas
mediante polilneas cerradas, distancias longitudinales, puntos de referencia en coorde-
nadas UTM, dentro del ambiente AutoCAD.
116
6.3. C alculos y Resultados Hidrol ogicos

Figura 6.16: PLEDER, area desde una polilnea


El programa contiene una herramienta para calcular en N umero de Curva Compuesto
(expuestos en el capitulo 2), que en una mayora de las cuencas la uniformidad de la
vegetaci on o tipo de suelo no se presenta en su totalidad, por lo tanto, la subdivision de
las cuencas con las mismas caractersticas son necesarios para ponderar y obtener este
valor compuesto.

Figura 6.17: PLEDER, curva N umero Compuesto


117
6.3. C alculos y Resultados Hidrol ogicos
La sumatoria de las areas tiene que ser igual al area de la cuenca. En la gura 6.17,
PLEDER presenta hasta 6 subdivisiones para calcular La Curva n umero Compuesto.
En la presente aplicaci on se usa el hidrograma unitario sintetico NRCS, cuyos datos son el
area de la cuenca y el tiempo de retardo que esta en funcion al tiempo de concentracion de
la cuenca. La Figura 6.18 muestra el c alculo de tiempo de retardo, bajo dato o resultado
del tiempo de concentraci on. El tiempo de concentracion se puede calcular mediante la
f ormula de Kirpich o tambien este valor lo puede asignar directamente el usuario. Por lo
tanto, cabe resaltar que el tiempo de concentraci on viene a ser resultado, si es calculado
mediante la formula de Kirpich y por otro lado es dato si es asignado por el usuario.

Figura 6.18: PLEDER, c alculo del tiempo de retardo


6.3.2. Parametro Precipitacion [P]
Corresponde a asignar el modelo meteorol ogico (Tormenta NRCS, IILA SENAMHI).
El modelo meteorol ogico elegido es la tormenta NRCS, tal como se muestra en la gura
6.19, donde la distribuci on de tormenta es el tipo II en intervalos de una hora (60 minutos),
con un precipitacion maxima de 24 horas igual a 64.54 mm, calculados para un perodo
de retorno de 100 a nos y ajustando a una distribucion probabilstica de Gumbel para un
95 % de probabilidad (Smirnov-Kolmogorov).
118
6.3. C alculos y Resultados Hidrol ogicos

Figura 6.19: PLEDER, modelo meteorol ogico NRCS


6.3.3. Parametro Tiempo [T]
Es el intervalo de tiempo para calcular lluvia escorrenta.

Esta opcion indica el incremento
de tiempo para que el programa tenga que realizar los c alculos cada 10 minutos seg un la
gura 6.15.
El programa controla los posible errores de entrada de los datos ([U], [P] y [T]), especi-
cando dentro de la consola del AutoCAD el tipo de error o el ingreso de dato incorrecto.
6.3.4. Hidrogramas de Salida
Mediante el bot on aceptar y asignado el punto de referencia para los resultados, pro-
cedemos a calcular el hidrograma de salida y el caudal m aximo de dise no para los datos
ingresados. Las guras 6.20, 6.21, 6.22 y 6.23 corresponden a los hidrogramas de salida
para los perodos de retorno 50, 100, 200 y 500 respectivamente.
Los resultados de las coordenadas del hidrograma para los distintos perodos de retorno
mencionados se adjunta en el apendice D.
119
6.3. C alculos y Resultados Hidrol ogicos
Figura 6.20: Hidrograma T
R
= 50 a nos
Figura 6.21: Hidrograma T
R
= 100 a nos
120
6.3. C alculos y Resultados Hidrol ogicos
Figura 6.22: Hidrograma T
R
= 200 a nos
Figura 6.23: Hidrograma T
R
= 500 a nos
121
6.4. C alculos y Resultados Hidraulicos
6.4. Calculos y Resultados Hidraulicos

Esta seccion corresponde a transitar el caudal de dise no (Q


TR=100
= 340m
3
/s), para
determinar el perl de la supercie libre de agua, los mismos en cada una de las secciones
transversales. En realidad el transito de caudales ser a para los 4 perodos de retorno
considerados en la determinaci on de los hidrogramas.
Cuadro 6.2: Caudales m aximos para diferentes Perodos de Retorno
T
R
Caudal (m
3
/s)
50 240.69
100 339.23
200 449.19
500 609.92
La batimetra del proyecto viene a ser el dato m as importante y primordial para esta
seccion; con ella representamos el proyecto fsico a escala normal en un proyecto digital y
a escala conveniente para realizar todos los c alculos correspondientes. El proyecto cuenta
con una batimetra minuciosa con densos puntos topogr acos y sobre todo dirigidos con
propiedad y conocimientos hidr aulicos durante el levantamiento.
Figura 6.24: Planta Ro Huallaga
En la gura 6.24, muestra la planta del ro Huallaga con las 125 secciones transversales dis-
tribuidos cada 20 metros en 2480 metros lineales del cauce. La estacion 0+00 corresponde
al puente Acobamba y la estaci on 2 + 480 al centro poblado Yanacocha.
122
6.4. C alculos y Resultados Hidraulicos
6.4.1. Secciones Transversales
Mediante la opci on de las secciones transversales, se ingresan los datos fsicos del proyec-
to, tales como las coordenadas de los vertices que lo conforman, lmites de las llanuras de
inundacion, longitudes izquierda, central y derecha, coecientes de Manning y los coe-
cientes de contracci on y expansi on; todo ello para cada una de las secciones transversales
del cauce.
El programa PLEDER, presenta opciones gr acas muy ecientes para crear las secciones
transversales a partir de polilneas, asignando los puntos de referencia tales como estaci on,
elevaci on y permitiendo calcular las coordenadas locales de cada uno de los vertices, tal
como se muestra en la gura 6.25.

Figura 6.25: PLEDER, secciones transversales


Quiza esta opci on de crear las secciones transversales, diferencia mucho de los programas
comerciales existentes en la actualidad, ya que estos programas dependen de otros para
123
6.4. C alculos y Resultados Hidraulicos
facilitar los datos que en este caso viene a ser los vertices locales de cada una de las
secciones transversales.
Figura 6.26: AutoCAD secciones transversales
Cada vertice es enumerado de izquierda a derecha, con el n de almacenar en una ma-
triz ordenada, adem as elegir los lmites de inundacion izquierda derecha mediante la nu-
meracion de los vertices.
En la gura 6.25, la ventana presenta multiples opciones y utilitarios de enlace gr aco
con el ambiente AutoCAD, tales como calcular las distancias autom aticas, selector de
polilneas, puntos de referencia entre otros. As tambien, el bot on Aplicar guarda los
par ametros de la ventana actual, en la base de datos del objeto personalizado dentro del
AutoCAD. De esta manera se crea las 125 secciones transversales de la aplicaci on, tal
como se muestra en los planos del apendice E.
6.4.2. Flujo Permanente
La ventana del graco 6.27, muestra las opciones de los par ametros de borde y la asig-
nacion del caudal de dise no para transitar el ujo a traves de las secciones transversales
124
6.4. C alculos y Resultados Hidraulicos
descritas anteriormente. Para la aplicacion se analiza como ujo subcrtico, por la tanto
la opci on del tirante aguas abajo es habilitado.

Figura 6.27: PLEDER, c alculo del ujo permanente


Los procedimiento para calcular los niveles de la supercie libre de agua se describe
mediante diagramas de ujo en el captulo 4, tanto para los ujo subcrticos y supercrticos.
6.4.3. Resultados y Perl de supercie libre
Los resultados son presentados en ventanas independientes de programa AutoCAD y en el
mismo Autocad con opciones de exportaci on a otros archivos. PLEDER, presenta dos tipos
de resultados, resultados numericos que son los parametros hidr aulicos en cada uno de las
secciones transversales y los resultados gr acos que viene a ser el perl de la supercie
libre de agua a escala normal y los niveles en cada secci on transversal (gura 6.29). Para
el perl, la cota de terreno es la cota mnima de la secci on transversal o en otros terminos
es cota de la lnea thalweg, por lo tanto para la construcci on del perl, la longitud del
canal central de las secciones es acumulado.
125
6.4. C alculos y Resultados Hidraulicos

Figura 6.28: PLEDER, resultados-par ametros hidraulicos


Figura 6.29: Niveles de supercie libre en las secciones transversales
126
6.5. C alculos y Resultados de Socavaciones Generales
6.5. Calculos y Resultados de Socavaciones Genera-
les
Para calcular las socavaciones generales en las secciones transversales, es necesario conocer
el tipo de material (cohesivo y no cohesivo) y el coeciente seg un la probabilidad de
gasto. Para la aplicacion se realiz o las curva granulometricas de los materiales incluyendo
cantos rodados y guijarros, de los cuales se obtuvo como resultados los di ametro medios
aproximadamente 150 mm y 180 mm.
Es importante mencionar que el programa PLEDER, habilita la ventana de la gura 6.30,
s olo si existe el objeto personalizado de los niveles de la supercie libre de agua dentro
del AutoCAD, es decir, si el calculos de los niveles fueron ejecutados.

Figura 6.30: PLEDER, par ametros socavaci on general


Una vez completado estos datos, se puede calcular las socavaciones mediante el cono de la
gura 6.13 o equivalente al comando PLHSCC, cuyos resultados son gr acos (lnea de la
127
6.5. C alculos y Resultados de Socavaciones Generales
nueva seccion transversal socavada) y tabulares (nuevos vertices de las secciones transver-
sales). Estos resultados son necesarios para estimar la profundidad de las cimentaciones
de las estructuras hidr aulicas o estructuras de protecci on ante avenidas maximas, y siendo
m as especcos en la instalacion de gaviones y enrocados (riprap) representa la profundi-
dad del colchon reno y la profundidad de las u nas respectivamente.
Figura 6.31: Socavaciones en las secciones transversales
128
Captulo 7
CONCLUSIONES Y
RECOMENDACIONES
7.1. Conclusiones
La investigacion desarrollada en esta tesis ha llegado a las siguientes conclusiones :
1. Se ha elaborado un programa (PLEDER) que permite calcular los componentes
hidrol ogicos, hidraulicos e hidr aulica uvial, en un ambiente totalmente organizado,
amigable y sobre todo gr aco (AutoCAD).
2. Las caractersticas de la herramienta, permite disponer de diferentes comandos para
cada componente.
3. Importancia de la asignacion del N umero de Curva, dependiente del tipo o las ca-
ractersticas de suelo.
4. Para emplear el metodo de la convolucion discreta, el factor tiempo o intervalo de
tiempo, selecciona los pulso de entrada y salida mediante interpolaciones lineales.
El cual es determinante y se exige el buen criterio de su elecci on.
129
7.1. Conclusiones
5. Las precipitaciones acumuladas seg un la ecuacion regional IILA SENAMHI muestra
un incremento tipo exponencial, que facilita el procedimiento del bloque alterno
propuesto por Ven Te Chow.
6. En las tormentas NRCS (Tipo II), las precipitaciones acumuladas no se ajustan
con exito (R
2
1) a ninguna funci on conocida, as se eleve el grado del polinomio
(aunque no siempre los resultados del ajuste son mejores a mayor grado polin omi-
co), lo que exige a realizar interpolaciones para obtener las ordenadas de diferentes
duraciones de tiempo.
7. Si C =
dTVariacion del tiempo en el hidrograma.
dtVariacion del tiempo en el hietograma.
1, se obtiene los Pulsos de ingreso di-
rectamente si C = 1 o en forma acumulativa si C > 1. Si C 1, se interpolan las
precipitaciones totales, y se obtienen las precipitaciones en exceso, donde la canti-
dad de elementos o variaci on de tiempo en el hietograma sera siempre igual a la
variaci on del tiempo en el hidrograma (C = 1).
8. En todo Hidrograma Unitarios Sintetico, un factor importante es el tiempo de re-
tardo de la cuenca drenante, denido como el tiempo desde el centro de gravedad
del hietograma de lluvia hasta el pico del hidrograma.
9. En el Hidrograma Unitario Sintetico de Snyder, la mejor manera de emplear estas
ecuaciones, es deducir valores de C
t
y C
p
, a partir de los hidrogramas unitarios de
cuencas medidas (cuencas instrumentadas) de caractersticas similares a la cuenca
problema (cuenca no instrumentada).
10. Los perles de supercie libre de agua, determinan el dimensionamiento de las es-
tructuras hidr aulicas de protecci on.
11. Las ecuaciones discretizadas para los c alculos de los perles de la supercie libre de
agua, son ecuaciones no lineales, por lo tanto, se emplean tecnicas numericas tales
130
7.2. Recomendaciones
como el Metodo de la Secante (HECRAS), Newton Raphson (GSTAR), Metodo de
Bisecci on (PLEDER) , entre otros.
12. La socavaci on general en cauces naturales depender a mucho del tipo de material
que lo conforma en cada estaci on del cauce, por lo general, se uniformiza en una
estaci on.
13. Para calcular la socavacion general del cauce se necesita utilizar criterios prudentes,
ya que existe mucha incertidumbre involucrada en los modelos que se emplea.
7.2. Recomendaciones
1. Para componer artculos cientcos o la propia tesis, emplear programas de com-
posici on de textos tal como L
A
T
E
X o similares, de modo que los textos presenten
alta calidad para publicaciones de todo tipo. Los documentos que producen tienen
una calidad inmejorable, equivalente a la obtenida con las mejores herramientas de
edici on profesionales.
2. Realizar libreras o clases para las distintas aplicaciones ingenieriles en el lenguaje
de programacion C++, as facilita los diversos procedimientos que en muchos casos
son repetitivos y de uso perenne.
3. Importancia en el empleo de la programaci on y metodos numericos aplicados en
la ingeniera. De preferencia usar programas orientado a objetos, generando clases
abstractas de lo que uno quiere automatizar o controlar con un programa.
131
Bibliografa
[1] A. OSMAN AKAN. Open Channel Hydraulics. Elsevier Ltd, Oxford UK, 2006.
[2] FRANCISCO JAVIER APARACIO. Fundamentos de Hidrolola de Supercie.
Mimusa Noriega Editores Mexico,D.F., 2003.
[3] AUTODESK. ObjectARX Developers Guide. Autodesk Developer Center EEUU,
1999.
[4] JHON BIRD. Higher Engineering Mathematics. Elsevier Ltd, 2006.
[5] JOS

E LUIS SANCHEZ BRIBIESCA. Doce algoritmos para resolver problemas de


hidraulica. Universidad Nacional Autonoma de Mexico, Agosto 1978.
[6] GARY W. BRUNNER. Hec-Ras River Analysis System Users Manual. US Army
Corps of Engineers EEUU, 2001.
[7] JR C. R. WYLIE. Advanced Engineering Mathematics. McGraw-Hill, Inc. New york
USA, 1960.
[8] STEVEN C. CHAPRA RAYMOND P. CANALE. Metodos numericos para inge-
nieros. McGraw-Hill Mexico, 1999.
[9] HUBERT CHANSON. Hidraulica del Flujo en Canales Abiertos. McGraw-Hill In-
teramericana, S.A., 2002.
132
BIBLIOGRAF

IA
[10] M. HANIF CHAUDHRY. Open - Channel Flow. Springer Science+Business Media,
LLC. New York, USA, 2008.
[11] CHOW, VENT T., MAIDMENT, D.R., and MAYS L. Hidrologa Aplicada. Mac
Graw Hill Interamericana S.A. Santafe de Bogot a, 1994.
[12] VENT TE CHOW. Hidraulica de canales abiertos. Mac Graw Hill Interamericana
S.A. Colombia, 2000.
[13] JAIME SU

AREZ D

IAS. Control de erosi on en zonas tropicales. Instituto de Inves-


tigaciones sobre Erosion y Deslizamientos-Ingeniera de suelos, Noviembre, 2001.
[14] ROSENDO CH

AVEZ D

IAS. Hidrologa para Ingenieros. Fondo Editorial de la Pon-


ticia Universidad. Lima Per u, 1994.
[15] ANIL W. DATE. Introduction Computational Fluid Dynamics. Cambridge University
Press, 2005.
[16] RICHARD H. FRENCH. Hidraulica del Canales Abiertos. McGraw-Hill Interamerica
de Mexico, S.A. de C.V., 1988.
[17] F. M. HENDERSON. Open Channel Flow. Macmillan Publishing Co., Inc. New York
USA, 1966.
[18] CHARLES HIRSCH. Numerical Computation of Internal and External Flows. John
Wiley and Sons Ltd, 2007.
[19] IVOR HORTON. Beginning Visual C++ 2005. Wiley Publishing USA, 2006.
[20] JOEL ORE IWANAGA. Apuntes de clase hidroga general. Universidad Nacional
de San Cristobal de Huamanga, 2004.
[21] JOEL ORE IWANAGA. Apuntes de clase estructuras hidr aulicas. Universidad Na-
cional de San Cristobal de Huamanga, Noviembre, 2006.
133
BIBLIOGRAF

IA
[22] PIERRE Y. JULIEN. Erosion and Sedimentation. Cambrigde University Press. USA,
1995.
[23] PIERRE Y. JULIEN. River Mechanics. Cambrigde University Press. USA, 2002.
[24] TSUTOMU KAMBE. Elementary Fluid Mechanics. World Scientidic Publishing,
2007.
[25] JAAN KIUSALAAS. Numerical Methods in Engineering with Matlab. Cambridge
University Press, 2005.
[26] NICHOLAS A. SOLTER-SCOTT J. KLEPER. Professional C++. Wiley Publishing
USA, 2005.
[27] ERWIN KREYSZIG. Advanced Engineering Mathematics. John Wiley & Sons, Inc.
USA, 2006.
[28] CUI-LEUNG LU, ZHANG. A numerical analysis of free surface ow in curved
open channel with velocity-pressure-free-surface correction. Computation Mechan-
ics Springer Verlag, 2003.
[29] M. MORENA G. GRANDE G. FERR

ANDEZ M. VIDE, L. QUEROL. Uso de


modelos uni-y bidimensionales en llanuras de inundaci on, aplicacion del ro tajo en
talavera de la reina. Ingeniera del Agua Vol 10, Marzo 2003.
[30] HERON MORALES MARCHENA. Matlab, Metodos numericos y visualizacion gra-
ca. Editorial Megabyte Per u, 1999.
[31] ADRIAN ILINCA MARECELO REGGIO, ANDR

E HESS. 3-d m ultiple-level simu-


lation of free surface ows. Journal of Hydraulic Research, Vol 40, December, 2002.
[32] ANTONIO CRESPO MART

INEZ. Mecanica de Fluidos. Thomson Editores, 2006.


[33] RICHARD H. McCUEN. Hydrologic Analysis and Design. Person Education, 1998.
134
BIBLIOGRAF

IA
[34] NATURAL RESOURSES CONSERVATION SERVICE (NRCS). Hydrology national
engineering hanbook, chapter 10, estimation of direct runo from storm rainfall.
USDA-NRCS, July, 2004.
[35] JULIAN AGUIRRE PE. Hidraulica de Canales. CIDIAT. Merida, Venezuela, 1974.
[36] JOS

E RAM

ON T

EMEZ PEL

AEZ. Facetas del calculo hidrometeorol ogico y estads-


tico de maximos caudales. Revista de Obras P ublicas, Febrero, 2003.
[37] VICTOR MIGUEL PONCE. Engineering Hydrology Principles and Practices. Pren-
tice Hall, 1989.
[38] CRISTIAN CASTRO P

EREZ. Apuntes de clase programaci on digital. Universidad


Nacional de San Cristobal de Huamanga, 2002.
[39] CRISTIAN CASTRO P

EREZ. Apuntes de clase metodos numericos aplicados. Uni-


versidad Nacional de San Cristobal de Huamanga, Noviembre, 2003.
[40] JEFF PROSISE. Programming Windows with MFC. Microsoft Press USA, 1999.
[41] H. M. RAGHUNATH. Hydrology Principles Analysis Design. New Age International
Publishers, 2006.
[42] DAVID G. RHODES. Gradually varied ow solutions in newton raphson form. Jour-
nal of Irrigation and Drainage Engineering, July/August, 1998.
[43] LEO C. VAN RIJN. Principles of Sediment Transport in River Estuaries and Coastal
Seas. Aqua Publications. The Netherlands, 1993.
[44] DAVID HANSEN RIZWANUL BARL. Application of gradually-varied ow algo-
rithms to simulate buried streams. Journal of Hydraulic Research, Vol 40, April,
2002.
135
BIBLIOGRAF

IA
[45] MICHAEL SCHAFER. Computational Engineering-Introduction to Numerical Meth-
ods. Springer-Verlag Berlin Heidelberg, 2006.
[46] DARLY B. SIMONS and FUAT SENT

URK. Sediment Transport Technology. Water


Resources Publications. USA, 1976.
[47] BJARNE STROUSTRUP. The C++ Programming Language. Addisn Wesley USA,
1997.
[48] TERRY W. STURM. Open Channel Hydraulics. McGraw-Hill Books, 2001.
[49] K.T. TANG. Mathematical Methods for Engineers and Scientists. Springer-Verlag
Berlin Heidelberg. USA, 2007.
[50] JUAN P. MARTIN VIDE. Ingeniera de Ros. Alfa Omega Grupo Editor S.A. de
C.A. Mexico, 2003.
[51] FRANK M. WHITE. Mecanica de Fluidos. McGraw-Hill Interamericana de Espa na,
S.A.U., 2003.
[52] YORICK HARDY WILLI HANS STEEB. Problems and Solutions in Scientic Com-
puting with C++ and Java simulations. World Scientic Publishing Co. Pte Ltd,
2004.
[53] WEIMING WU. Computational River Dynamics. Taylor & Francis Group, London,
UK, 2008.
[54] CHIH TED YANG. Sediment Transport theory of practice. The McGraw-Hill Com-
panies, Inc, USA, 1996.
136
Apendice A
HIDROLOG

IA C

ODIGO FUENTE
C++
EL componente Hidrologico se organiza en 10 libreras con m ultiples funciones y 07 ven-
tanas gracas
137
ARCHIVOS DE CABECERA:

PLEDERCurvaNumeroDlg.h

#pragma once
#include "resource.h"

// Cuadro de dilogo de CPLEDERCurvaNumeroDlg

class CPLEDERCurvaNumeroDlg : public CAdUiDialog
{
DECLARE_DYNAMIC(CPLEDERCurvaNumeroDlg)

public:
CPLEDERCurvaNumeroDlg(CWnd *pParent =NULL, HINSTANCE hInstance
=NULL); // Constructor estndar
virtual ~CPLEDERCurvaNumeroDlg();

// Datos del cuadro de dilogo
enum { IDD = IDD_HIDRO_PLCN };

//Declaramos variables del cuadro de dilogo.

// Cajas de texto
CAcUiNumericEdit m_Edit_AREA1;
CString m_a1;

CAcUiNumericEdit m_Edit_CN1;
CString m_cn1;

CAcUiNumericEdit m_Edit_AREA2;
CString m_a2;

CAcUiNumericEdit m_Edit_CN2;
CString m_cn2;

CAcUiNumericEdit m_Edit_AREA3;
CString m_a3;

CAcUiNumericEdit m_Edit_CN3;
CString m_cn3;

CAcUiNumericEdit m_Edit_AREA4;
CString m_a4;

CAcUiNumericEdit m_Edit_CN4;
CString m_cn4;

CAcUiNumericEdit m_Edit_AREA5;
CString m_a5;

CAcUiNumericEdit m_Edit_CN5;
CString m_cn5;

CAcUiNumericEdit m_Edit_AREA6;
CString m_a6;

CAcUiNumericEdit m_Edit_CN6;
CString m_cn6;

CAcUiNumericEdit m_Edit_CNC;
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


138
CString m_cnc;

protected:
virtual void DoDataExchange(CDataExchange* pDX);
afx_msg LRESULT OnAcadKeepFocus (WPARAM, LPARAM) ;

// Cajas de texto para controlar mensajes
afx_msg void OnKillfocusEdit_AREA1();
afx_msg void OnKillfocusEdit_AREA2();
afx_msg void OnKillfocusEdit_AREA3();
afx_msg void OnKillfocusEdit_AREA4();
afx_msg void OnKillfocusEdit_AREA5();
afx_msg void OnKillfocusEdit_AREA6();

afx_msg void OnKillfocusEdit_CN1();
afx_msg void OnKillfocusEdit_CN2();
afx_msg void OnKillfocusEdit_CN3();
afx_msg void OnKillfocusEdit_CN4();
afx_msg void OnKillfocusEdit_CN5();
afx_msg void OnKillfocusEdit_CN6();

public:
virtual BOOL OnInitDialog();
afx_msg void OnBnClickedOk();

// Funciones de los botones en el cuadro de dilogo
virtual void onCALCLimpiar();
virtual void onCALCCalcularCNC();

DECLARE_MESSAGE_MAP()
};

PLEDERHidrogramaUnitariosDlg.h

#pragma once
#include "adui.h"
#include "resource.h"

// Cuadro de dilogo de CPLEDERHidrogramaUnitariosDlg

class CPLEDERHidrogramaUnitariosDlg : public CAdUiDialog
{
DECLARE_DYNAMIC(CPLEDERHidrogramaUnitariosDlg)

public:
CPLEDERHidrogramaUnitariosDlg(CWnd *pParent =NULL, HINSTANCE
hInstance =NULL); // Constructor estndar
virtual ~CPLEDERHidrogramaUnitariosDlg();
enum { IDD = IDD_PLHU };

protected:
virtual void DoDataExchange(CDataExchange* pDX);
afx_msg LRESULT OnAcadKeepFocus (WPARAM, LPARAM) ;

//Botones
afx_msg void OnButtonImportarHU();
afx_msg void OnButtonImportarPulsos();

public:
virtual BOOL OnInitDialog();
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


139
afx_msg void OnBnClickedOk();
DECLARE_MESSAGE_MAP()
};


PLEDERHidrologiaBufer.h

#pragma once
//Clases Bufer para hidrologia
class HidrogramaUnitarioBufer
{
public:

HidrogramaUnitarioBufer();
HidrogramaUnitarioBufer (int n, double HU, double PULSO);

public:

HidrogramaUnitarioBufer *ObtenerSiguiente();
void PonerSiguiente(HidrogramaUnitarioBufer *p);
virtual ~HidrogramaUnitarioBufer();
public:
HidrogramaUnitarioBufer *Siguiente;
int n;
double HU, PULSO;

};



PLEDERHidrologiaCalculos.h

#pragma once

class CPLEDERHidrologiaCalculos
{
public:
CPLEDERHidrologiaCalculos(void);
public:
~CPLEDERHidrologiaCalculos(void);

public:
// Calcula las precipitaciones acumulas, incrementales y
alternas segn IILA SENAMHI-UNI.
float HietogramaIILA(int N, float a, float b, float k, float n,
float dt, float var, float Tr, float* D, float* Pacum, float*
Pincr, float* Palte);

// Calcula las precipitaciones acumulas, incrementales y
alternas segn NRCS.
float HietogramaNRCS(float P24, float Ndt, int Tormenta, float*
ND, float* TipoT, float* NPacum, float* NPincr);

// Calcula las abstracciones y el hietograma de exceso segn
NRCS.
float AbstraccionesHietogramaNRCS(int NP,int CN, float* Palt,
float* Pacum, float* Ia, float* Fa, float* PexcesoAcum, float*
Pexceso);

// Clculo los Pulsos de ingreso.
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


140
float PulsosP(int NP, int DT, int dt, float* Pexceso, float*
Pulsos, int *nP);

// Clculos mediante la convolucin discreta Q = PU.
int Convolucion(int nP, int nU, float *P, float *U, float *Q);

};



PLEDERHidrologiaDatos.h


#pragma once

#define PUNFILEEXTHU _T("hu;abia;txt")
#define DCEXP 3
#define GETLINEMAXBUFF 1024
#define PUNFILESEP " ,\t\n"
class HidrogramaUnitarioBufer;
/*------------------------------------------------------------------*/
class CPLEDERHidrologiaDatos
{

public:
CPLEDERHidrologiaDatos(void);
public:
~CPLEDERHidrologiaDatos(void);

public:

// Clculo de la escorrenta directa, de datos HU versus pulsos
int EscorrentiaDirecta1(HidrogramaUnitarioBufer *pPrimerHU);

// Importar las ordenadas del Hidrolograma Unitario
int ImportarHidrogramaUnitario(const TCHAR *pNombreArchivo,long
*NumeroVertHU);

// Datos de la distribucin de Tormentas segn el NRCS.
float TormentasNRCS(int Tormenta, float *TipoT, float Ndt);

// Datos Hidrograma Sinttico NRCS.
float HidrogramaSinteticoNRCS(float Tp, float qp,float *t, float
*q);

// Datos Hidrograma Sinttico SNYDER
float HidrogramaSinteticoSnyder(float T ,float tR, float tpR,
float tb,

float QpR, float W50, float W75);

//Libera el buffer en ristra HU
void LiberarBufferHidrogramaUnitario();

public:

HidrogramaUnitarioBufer* pPrimerHU; //Puntero primer
elemento HU. a la clase HidrogramaUnitarioBufer.

public:
// Variables HU
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


141
float *P, // Lista de Pulsos.
*U, // Lista de Funcin respuesta al Pulso.
*Q; // Lista de Caudal de escorrentia directa
(SALIDA)


};
/*------------------------------------------------------------------*/



PLEDERHietogramaIilaSenamhiDlg.h

#pragma once

#include "resource.h"

// Cuadro de dilogo de CPLEDERIilaSenamhiDlg

class CPLEDERIilaSenamhiDlg : public CAdUiDialog
{
DECLARE_DYNAMIC(CPLEDERIilaSenamhiDlg)

public:
CPLEDERIilaSenamhiDlg(CWnd *pParent =NULL, HINSTANCE hInstance
=NULL); // Constructor estndar
virtual ~CPLEDERIilaSenamhiDlg();

// Datos del cuadro de dilogo
enum { IDD = IDD_HIDRO_IILA };

//Declaramos variables del cuadro de dilogo.

CAcUiNumericEdit m_Edit_a;
CString m_a;

CAcUiNumericEdit m_Edit_k;
CString m_k;

CAcUiNumericEdit m_Edit_n;
CString m_n;

CAcUiNumericEdit m_Edit_duracion;
CString m_duracion;

CAcUiNumericEdit m_Edit_tr;
CString m_tr;

CAcUiNumericEdit m_Edit_PX;
CString m_PX;

CAcUiNumericEdit m_Edit_PY;
CString m_PY;

// Combo Box
CComboBox m_Combo_b;
CString m_b;

CComboBox m_Combo_Var;
CString m_variacion;

Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


142
// Botones
CAcUiPickButton m_PickButton_PUNTO;

protected:
virtual void DoDataExchange(CDataExchange* pDX);
afx_msg LRESULT OnAcadKeepFocus (WPARAM, LPARAM) ;
afx_msg void OnKillfocusEdit_a();
afx_msg void OnKillfocusEdit_k();
afx_msg void OnKillfocusEdit_n();
afx_msg void OnKillfocusEdit_duracion();
afx_msg void OnKillfocusEdit_tr();

afx_msg void OnKillfocusCombob();
afx_msg void OnKillfocusComboVar();

afx_msg void OnButtonPUNTO();

public:
virtual BOOL OnInitDialog();
afx_msg void OnBnClickedOk();

DECLARE_MESSAGE_MAP()

};

PLEDERHietogramaNrcsDlg.h

#pragma once
#include "resource.h"


// Cuadro de dilogo de CPLEDERNRCSDlg

class CPLEDERNrcsDlg : public CAdUiDialog
{
DECLARE_DYNAMIC(CPLEDERNrcsDlg)

public:
CPLEDERNrcsDlg(CWnd *pParent =NULL, HINSTANCE hInstance =NULL);
// Constructor estndar
virtual ~CPLEDERNrcsDlg();

// Datos del cuadro de dilogo
enum { IDD = IDD_HIDRO_NRCS };

//Declaramos variables del cuadro de dilogo.

CAcUiNumericEdit m_Edit_P24;
CString m_P24;

CAcUiNumericEdit m_Edit_NPX;
CString m_NPX;

CAcUiNumericEdit m_Edit_NPY;
CString m_NPY;

// Combo Box
CComboBox m_Combo_Ndt;
CString m_Ndt;

CComboBox m_Combo_Tormenta;
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


143
CString m_Tipo;
int m_Tormenta;

//Botones
CAcUiPickButton m_PickButton_NPUNTO;

protected:
virtual void DoDataExchange(CDataExchange* pDX); //
Compatibilidad con DDX/DDV
afx_msg LRESULT OnAcadKeepFocus (WPARAM, LPARAM) ;

afx_msg void OnKillfocusEdit_P24();

afx_msg void OnKillfocusComboNdt();
afx_msg void OnKillfocusComboTormenta();

afx_msg void OnButtonNPUNTO();

public:
virtual BOOL OnInitDialog();
afx_msg void OnBnClickedOk();

DECLARE_MESSAGE_MAP()
};



PLEDERHUNRCSDlg.h

#pragma once
#include "resource.h"

// Cuadro de dilogo de CPLEDERTiempoRetrasoDlg

class CPLEDERHUNRCSDlg : public CAdUiDialog
{
DECLARE_DYNAMIC(CPLEDERHUNRCSDlg)

public:
CPLEDERHUNRCSDlg(CWnd *pParent =NULL, HINSTANCE hInstance
=NULL); // Constructor estndar
virtual ~CPLEDERHUNRCSDlg();

// Datos del cuadro de dilogo
enum { IDD = IDD_HIDRO_HUNRCS };

int m_TipoTc;

// Cajas de texto
CAcUiNumericEdit m_Edit_long;
CString m_long;

CAcUiNumericEdit m_Edit_pend;
CString m_pend;

CAcUiNumericEdit m_Edit_tc;
CString m_tc;

CAcUiNumericEdit m_Edit_tlag1;
CString m_tlag1;

Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


144
// Botones (CAD)
CAcUiPickButton m_PickButton_Long;
CAcUiPickButton m_PickButton_Pend;

protected:
virtual void DoDataExchange(CDataExchange* pDX); //
Compatibilidad con DDX/DDV
afx_msg LRESULT OnAcadKeepFocus (WPARAM, LPARAM) ;

// Radio (Cuando existan cambios en el radio)
afx_msg void OnRadioKirpich();
afx_msg void OnRadioUsuario();

// Cajas de texto
afx_msg void OnKillfocusEdit_long();
afx_msg void OnKillfocusEdit_pend();
afx_msg void OnKillfocusEdit_tc();

// Botones
afx_msg void OnButtonLong();
afx_msg void OnButtonPend();

public:
virtual BOOL OnInitDialog();
afx_msg void OnBnClickedOk();

// Funciones para realizar clculos.
virtual void onCalcularTc();
virtual void onCalcularTlag();

DECLARE_MESSAGE_MAP()
};


PLEDERHUSnyderDlg.h
#pragma once
#include "resource.h"

// Cuadro de dilogo de CPLEDERHUSNYDERDlg

class CPLEDERHUSNYDERDlg : public CAdUiDialog
{
DECLARE_DYNAMIC(CPLEDERHUSNYDERDlg)

public:
CPLEDERHUSNYDERDlg(CWnd *pParent =NULL, HINSTANCE hInstance
=NULL); // Constructor estndar
virtual ~CPLEDERHUSNYDERDlg();

// Datos del cuadro de dilogo
enum { IDD = IDD_HIDRO_HUSNYDER };

int m_TipoCalc;

// Cajas de texto
CAcUiNumericEdit m_Edit_Area;
CString m_area;

CAcUiNumericEdit m_Edit_L;
CString m_L;

Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


145
CAcUiNumericEdit m_Edit_Lc;
CString m_Lc;

CAcUiNumericEdit m_Edit_TR;
CString m_TR;

CAcUiNumericEdit m_Edit_TpR;
CString m_TpR;

CAcUiNumericEdit m_Edit_Qp;
CString m_Qp;

CAcUiNumericEdit m_Edit_Ct;
CString m_Ct;

CAcUiNumericEdit m_Edit_tp;
CString m_tp;

CAcUiNumericEdit m_Edit_Cp;
CString m_Cp;

protected:
virtual void DoDataExchange(CDataExchange* pDX); //
Compatibilidad con DDX/DDV
afx_msg LRESULT OnAcadKeepFocus (WPARAM, LPARAM) ;

// Radio (Cuando existan cambios en el radio)
afx_msg void OnRadioCalcularC();
afx_msg void OnRadioUsuarioC();

// Cajas de texto
afx_msg void OnKillfocusEdit_Area();
afx_msg void OnKillfocusEdit_L();
afx_msg void OnKillfocusEdit_Lc();
afx_msg void OnKillfocusEdit_TR();
afx_msg void OnKillfocusEdit_TpR();
afx_msg void OnKillfocusEdit_Qp();
afx_msg void OnKillfocusEdit_Ct();
afx_msg void OnKillfocusEdit_tp();
afx_msg void OnKillfocusEdit_Cp();

public:
virtual BOOL OnInitDialog();
afx_msg void OnBnClickedOk();

// Funciones para realizar clculos.
virtual void onCalcularCtCp();
virtual void onMensajesCp();

DECLARE_MESSAGE_MAP()
};


PLEDERLluviaEscorrentiaDlg.h

#pragma once
#include "resource.h"

// Cuadro de dilogo de CPLEDERLluviaEscorrentiaDlg


Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


146
class CPLEDERLluviaEscorrentiaDlg : public CAdUiDialog
{
DECLARE_DYNAMIC(CPLEDERLluviaEscorrentiaDlg)

public:
CPLEDERLluviaEscorrentiaDlg(CWnd *pParent =NULL, HINSTANCE
hInstance =NULL); // Constructor estndar
virtual ~CPLEDERLluviaEscorrentiaDlg();

// Datos del cuadro de dilogo
enum { IDD = IDD_HIDRO_HPLEDER };

//Declaramos variables del cuadro de dilogo.

// Cajas de texto
CAcUiNumericEdit m_Edit_AREA;
CString m_area;

CAcUiNumericEdit m_Edit_QB;
CString m_qb;

CAcUiNumericEdit m_Edit_CN;
CString m_cn;

CAcUiNumericEdit m_Edit_PPX;
CString m_ppx;

CAcUiNumericEdit m_Edit_PPY;
CString m_ppy;

// Combo Box
CComboBox m_Combo_HUS;
int m_hus;

CComboBox m_Combo_MM;
int m_mm;

CComboBox m_Combo_INTERT;
CString m_intert;

// Botones (Slo CAD)
CAcUiPickButton m_PickButton_AREA;
CAcUiPickButton m_PickButton_PPUNTO;

// Botones (Dialogo general)
CButton m_Button_HUS;


// Variables extras de clculos
int pNP, // Nmero de datos en la lista de precipitaciones.
Duracion; // Variacin de tiempo de las precipitaciones

float Palternaincremental[1441]; // Lista de precipitaciones
alternas o incrementales.
float PaltAcum[1441];// Lista de precipitaciones alternas
acumuladas

float Tretardo; // Tiempo de retardo. datos HUS NRCS
float tp, Cp; // Coeficientes tp, Cp, SNYDER

Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


147
bool computadoMM; // Boleano para verificar si se calcul metodos
meteorolgicos.
bool computadoHU; // Boleano que verifica si se calcul los H.U.

protected:

virtual void DoDataExchange(CDataExchange* pDX); //
Compatibilidad con DDX/DDV
afx_msg LRESULT OnAcadKeepFocus (WPARAM, LPARAM) ;

afx_msg void OnKillfocusEdit_CN();

// Combo Box (Cuando existan cambios en el combo)
afx_msg void OnKillfocusComboHUS();
afx_msg void OnKillfocusComboMM();
afx_msg void OnKillfocusComboINTERT();

// Botones (Slo CAD)
afx_msg void OnButtonAREA();
afx_msg void OnButtonPPUNTO();

public:
virtual BOOL OnInitDialog();
afx_msg void OnBnClickedOk();

// Funciones de los botones en el cuadro de dilogo
virtual void OnCALCCurvaNumero();
virtual void OnCALCHidrogramaUnitario();
virtual void OnCALCPrecipitaciones();

DECLARE_MESSAGE_MAP()

};




























Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


148
ARCHIVOS Cpp:


PLEDERCurvaNumeroDlg.cpp

/*--------------------------------------------------------------------
PLEDERCurvaNumeroDlg.cpp: archivo de implementacin
Cuadro de dilogo de CPLEDERCurvaNumeroDlg -> Calcula el nmero de
curva compuesto.
--------------------------------------------------------------------*/

#include "stdafx.h"
#include "PLEDERCurvaNumeroDlg.h"

/*------------------------------------------------------------------*/
IMPLEMENT_DYNAMIC(CPLEDERCurvaNumeroDlg, CAdUiDialog)

CPLEDERCurvaNumeroDlg::CPLEDERCurvaNumeroDlg(CWnd *pParent
/*=NULL*/,HINSTANCE hInstance /*=NULL*/)
: CAdUiDialog (CPLEDERCurvaNumeroDlg::IDD, pParent, hInstance)
{
m_a1 = _T("0.0");
m_cn1 = _T("0.0");
m_a2 = _T("0.0");
m_cn2 = _T("0.0");
m_a3 = _T("0.0");
m_cn3 = _T("0.0");
m_a4 = _T("0.0");
m_cn4 = _T("0.0");
m_a5 = _T("0.0");
m_cn5 = _T("0.0");
m_a6 = _T("0.0");
m_cn6 = _T("0.0");
m_cnc = _T("0.0");
}

CPLEDERCurvaNumeroDlg::~CPLEDERCurvaNumeroDlg()
{

}

BEGIN_MESSAGE_MAP(CPLEDERCurvaNumeroDlg, CAdUiDialog)

// Cajas de Texto
ON_EN_KILLFOCUS(IDC_EDIT_a1, OnKillfocusEdit_AREA1)
ON_EN_KILLFOCUS(IDC_EDIT_a2, OnKillfocusEdit_AREA2)
ON_EN_KILLFOCUS(IDC_EDIT_a3, OnKillfocusEdit_AREA3)
ON_EN_KILLFOCUS(IDC_EDIT_a4, OnKillfocusEdit_AREA4)
ON_EN_KILLFOCUS(IDC_EDIT_a5, OnKillfocusEdit_AREA5)
ON_EN_KILLFOCUS(IDC_EDIT_a6, OnKillfocusEdit_AREA6)

ON_EN_KILLFOCUS(IDC_EDIT_cn1, OnKillfocusEdit_CN1)
ON_EN_KILLFOCUS(IDC_EDIT_cn2, OnKillfocusEdit_CN2)
ON_EN_KILLFOCUS(IDC_EDIT_cn3, OnKillfocusEdit_CN3)
ON_EN_KILLFOCUS(IDC_EDIT_cn4, OnKillfocusEdit_CN4)
ON_EN_KILLFOCUS(IDC_EDIT_cn5, OnKillfocusEdit_CN5)
ON_EN_KILLFOCUS(IDC_EDIT_cn6, OnKillfocusEdit_CN6)

// Botones incluidos cad
ON_BN_CLICKED(IDC_BUTTON_limpiar, onCALCLimpiar)

Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


149
ON_BN_CLICKED(IDOK, &CPLEDERCurvaNumeroDlg::OnBnClickedOk)


END_MESSAGE_MAP()

void CPLEDERCurvaNumeroDlg::DoDataExchange(CDataExchange* pDX)
{
CAdUiDialog::DoDataExchange(pDX);

// Cajas de Texto.
DDX_Control(pDX, IDC_EDIT_a1, m_Edit_AREA1);
DDX_Control(pDX, IDC_EDIT_cn1, m_Edit_CN1);
DDX_Control(pDX, IDC_EDIT_a2, m_Edit_AREA2);
DDX_Control(pDX, IDC_EDIT_cn2, m_Edit_CN2);
DDX_Control(pDX, IDC_EDIT_a3, m_Edit_AREA3);
DDX_Control(pDX, IDC_EDIT_cn3, m_Edit_CN3);
DDX_Control(pDX, IDC_EDIT_a4, m_Edit_AREA4);
DDX_Control(pDX, IDC_EDIT_cn4, m_Edit_CN4);
DDX_Control(pDX, IDC_EDIT_a5, m_Edit_AREA5);
DDX_Control(pDX, IDC_EDIT_cn5, m_Edit_CN5);
DDX_Control(pDX, IDC_EDIT_a6, m_Edit_AREA6);
DDX_Control(pDX, IDC_EDIT_cn6, m_Edit_CN6);
DDX_Control(pDX, IDC_EDIT_cnc, m_Edit_CNC);
}

BOOL CPLEDERCurvaNumeroDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Inicializa Cajas de texto
m_Edit_AREA1.SetWindowText(m_a1);
m_Edit_AREA2.SetWindowText(m_a2);
m_Edit_AREA3.SetWindowText(m_a3);
m_Edit_AREA4.SetWindowText(m_a4);
m_Edit_AREA5.SetWindowText(m_a5);
m_Edit_AREA6.SetWindowText(m_a6);

m_Edit_CN1.SetWindowText(m_cn1);
m_Edit_CN1.SetRange(0, 100);

m_Edit_CN2.SetWindowText(m_cn2);
m_Edit_CN2.SetRange(0, 100);

m_Edit_CN3.SetWindowText(m_cn3);
m_Edit_CN3.SetRange(0, 100);

m_Edit_CN4.SetWindowText(m_cn4);
m_Edit_CN4.SetRange(0, 100);

m_Edit_CN5.SetWindowText(m_cn5);
m_Edit_CN5.SetRange(0, 100);

m_Edit_CN6.SetWindowText(m_cn6);
m_Edit_CN6.SetRange(0, 100);

m_Edit_CNC.SetWindowText(m_cnc);

return TRUE;
}

void CPLEDERCurvaNumeroDlg::OnKillfocusEdit_AREA1()
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


150
{
onCALCCalcularCNC();
}
void CPLEDERCurvaNumeroDlg::OnKillfocusEdit_AREA2()
{
onCALCCalcularCNC();
}
void CPLEDERCurvaNumeroDlg::OnKillfocusEdit_AREA3()
{
onCALCCalcularCNC();
}
void CPLEDERCurvaNumeroDlg::OnKillfocusEdit_AREA4()
{
onCALCCalcularCNC();
}
void CPLEDERCurvaNumeroDlg::OnKillfocusEdit_AREA5()
{
onCALCCalcularCNC();
}
void CPLEDERCurvaNumeroDlg::OnKillfocusEdit_AREA6()
{
onCALCCalcularCNC();
}

void CPLEDERCurvaNumeroDlg::OnKillfocusEdit_CN1()
{
m_Edit_CN1.Convert();
if (!m_Edit_CN1.Validate())
{
::AfxMessageBox(_T("Curva Nmero no vlida, \nrango = 1 @
100"));
m_Edit_CN1.SetFocus();
m_Edit_CN1.SetSel(0, -1);
}
CString str;
m_Edit_CN1.GetWindowText(m_cn1);
acdbRToS(::_wtof(m_cn1), 2, 0, str.GetBuffer(80));
m_Edit_CN1.SetWindowText(str);
onCALCCalcularCNC();
}

void CPLEDERCurvaNumeroDlg::OnKillfocusEdit_CN2()
{
m_Edit_CN2.Convert();
if (!m_Edit_CN2.Validate())
{
::AfxMessageBox(_T("Curva Nmero no vlida, \nrango = 1 @
100"));
m_Edit_CN2.SetFocus();
m_Edit_CN2.SetSel(0, -1);
}
CString str;
m_Edit_CN2.GetWindowText(m_cn2);
acdbRToS(::_wtof(m_cn2), 2, 0, str.GetBuffer(80));
-- m_Edit_CN2.SetWindowText(str);
onCALCCalcularCNC();
}
void CPLEDERCurvaNumeroDlg::OnKillfocusEdit_CN3()
{
m_Edit_CN3.Convert();
if (!m_Edit_CN3.Validate())
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


151
{
::AfxMessageBox(_T("Curva Nmero no vlida, \nrango = 1 @
100"));
m_Edit_CN3.SetFocus();
m_Edit_CN3.SetSel(0, -1);
}
CString str;
m_Edit_CN3.GetWindowText(m_cn3);
acdbRToS(::_wtof(m_cn3), 2, 0, str.GetBuffer(80));
m_Edit_CN3.SetWindowText(str);
onCALCCalcularCNC();
}
void CPLEDERCurvaNumeroDlg::OnKillfocusEdit_CN4()
{
m_Edit_CN4.Convert();
if (!m_Edit_CN4.Validate())
{
::AfxMessageBox(_T("Curva Nmero no vlida, \nrango = 1 @
100"));
m_Edit_CN4.SetFocus();
m_Edit_CN4.SetSel(0, -1);
}
CString str;
m_Edit_CN4.GetWindowText(m_cn4);
acdbRToS(::_wtof(m_cn4), 2, 0, str.GetBuffer(80));
m_Edit_CN4.SetWindowText(str);
onCALCCalcularCNC();
}
void CPLEDERCurvaNumeroDlg::OnKillfocusEdit_CN5()
{
m_Edit_CN5.Convert();
if (!m_Edit_CN5.Validate())
{
::AfxMessageBox(_T("Curva Nmero no vlida, \nrango = 1 @
100"));
m_Edit_CN5.SetFocus();
m_Edit_CN5.SetSel(0, -1);
}
CString str;
m_Edit_CN5.GetWindowText(m_cn5);
acdbRToS(::_wtof(m_cn5), 2, 0, str.GetBuffer(80));
m_Edit_CN5.SetWindowText(str);
onCALCCalcularCNC();
}
void CPLEDERCurvaNumeroDlg::OnKillfocusEdit_CN6()
{
m_Edit_CN6.Convert();
if (!m_Edit_CN6.Validate())
{
::AfxMessageBox(_T("Curva Nmero no vlida, \nrango = 1 @
100"));
m_Edit_CN6.SetFocus();
m_Edit_CN6.SetSel(0, -1);
}
CString str;
m_Edit_CN6.GetWindowText(m_cn6);
acdbRToS(::_wtof(m_cn6), 2, 0, str.GetBuffer(80));
m_Edit_CN6.SetWindowText(str);
onCALCCalcularCNC();
}

Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


152
void CPLEDERCurvaNumeroDlg::onCALCLimpiar()
{

m_Edit_AREA1.SetWindowText(_T("0.0"));
m_Edit_AREA2.SetWindowText(_T("0.0"));
m_Edit_AREA3.SetWindowText(_T("0.0"));
m_Edit_AREA4.SetWindowText(_T("0.0"));
m_Edit_AREA5.SetWindowText(_T("0.0"));
m_Edit_AREA6.SetWindowText(_T("0.0"));
m_Edit_CN1.SetWindowText(_T("0.0"));
m_Edit_CN2.SetWindowText(_T("0.0"));
m_Edit_CN3.SetWindowText(_T("0.0"));
m_Edit_CN4.SetWindowText(_T("0.0"));
m_Edit_CN5.SetWindowText(_T("0.0"));
m_Edit_CN6.SetWindowText(_T("0.0"));
m_Edit_CNC.SetWindowText(_T("0.0"));

}
void CPLEDERCurvaNumeroDlg::onCALCCalcularCNC()
{
m_Edit_AREA1.GetWindowText(m_a1);
m_Edit_CN1.GetWindowText(m_cn1);
m_Edit_AREA2.GetWindowText(m_a2);
m_Edit_CN2.GetWindowText(m_cn2);
m_Edit_AREA3.GetWindowText(m_a3);
m_Edit_CN3.GetWindowText(m_cn3);
m_Edit_AREA4.GetWindowText(m_a4);
m_Edit_CN4.GetWindowText(m_cn4);
m_Edit_AREA5.GetWindowText(m_a5);
m_Edit_CN5.GetWindowText(m_cn5);
m_Edit_AREA6.GetWindowText(m_a6);
m_Edit_CN6.GetWindowText(m_cn6);

float a1, a2, a3,a4, a5,a6, AT, cnc;
int cn1, cn2, cn3, cn4, cn5, cn6;

a1 = _wtof(m_a1);
a2 = _wtof(m_a2);
a3 = _wtof(m_a3);
a4 = _wtof(m_a4);
a5 = _wtof(m_a5);
a6 = _wtof(m_a6);

cn1 = _wtof(m_cn1);
cn2 = _wtof(m_cn2);
cn3 = _wtof(m_cn3);
cn4 = _wtof(m_cn4);
cn5 = _wtof(m_cn5);
cn6 = _wtof(m_cn6);

//Clculo de CNC

AT = a1+a2+a3+a4+a5+a6;

if(AT > 0)
{
cnc = (a1*cn1 +a2*cn2+a3*cn3+a4*cn4+a5*cn5+a6*cn6)/AT;

CString str;
m_cnc.Format(_T("%g"), cnc);
acdbRToS(::_wtof(m_cnc), 2, 0, str.GetBuffer(80));
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


153
m_Edit_CNC.SetWindowText(str);
}
else
{
m_Edit_CNC.SetWindowText(_T("0"));

}

}



void CPLEDERCurvaNumeroDlg::OnBnClickedOk()
{
// Coge los valores despues de pulsar OK

// Cajas de texto
m_Edit_AREA1.GetWindowText(m_a1);
m_Edit_CN1.GetWindowText(m_cn1);
m_Edit_AREA2.GetWindowText(m_a2);
m_Edit_CN2.GetWindowText(m_cn2);
m_Edit_AREA3.GetWindowText(m_a3);
m_Edit_CN3.GetWindowText(m_cn3);
m_Edit_AREA4.GetWindowText(m_a4);
m_Edit_CN4.GetWindowText(m_cn4);
m_Edit_AREA5.GetWindowText(m_a5);
m_Edit_CN5.GetWindowText(m_cn5);
m_Edit_AREA6.GetWindowText(m_a6);
m_Edit_CN6.GetWindowText(m_cn6);
m_Edit_CNC.GetWindowText(m_cnc);

CDialog::OnOK();
}


PLEDERHidrogramaUnitariosDlg.cpp

/*--------------------------------------------------------------------
PLEDERHidrogramaUnitariosDlg.cpp: archivo de implementacin
Cuadro de dilogo de CPLEDERHidrogramaUnitariosDlg
--------------------------------------------------------------------*/
#include "stdafx.h"
#include "PLEDERHidrogramaUnitariosDlg.h"
#include "PLEDERHidrologiaDatos.h"
#include "PLEDERRecursosCad.h"

/*------------------------------------------------------------------*/
//Creando objetos
CPLEDERHidrologiaDatos HU;
CRecursosCad RecursosHU;

/*------------------------------------------------------------------*/
IMPLEMENT_DYNAMIC(CPLEDERHidrogramaUnitariosDlg, CDialog)

BEGIN_MESSAGE_MAP(CPLEDERHidrogramaUnitariosDlg, CDialog)

//ON_EN_KILLFOCUS(IDC_EDIT_t, OnKillfocusEdit_t)

ON_BN_CLICKED(IDC_BUTTON_HU, OnButtonImportarHU)
ON_BN_CLICKED(IDC_BUTTON_PULSOS, OnButtonImportarPulsos)

Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


154
ON_BN_CLICKED(IDOK,
&CPLEDERHidrogramaUnitariosDlg::OnBnClickedOk)

END_MESSAGE_MAP()

/*------------------------------------------------------------------*/
CPLEDERHidrogramaUnitariosDlg::CPLEDERHidrogramaUnitariosDlg (CWnd
*pParent /*=NULL*/, HINSTANCE hInstance /*=NULL*/) : CAdUiDialog
(CPLEDERHidrogramaUnitariosDlg::IDD, pParent, hInstance)

{
//m_t = _T("6.0");

}

CPLEDERHidrogramaUnitariosDlg::~CPLEDERHidrogramaUnitariosDlg()
{

}

/*------------------------------------------------------------------*/

void CPLEDERHidrogramaUnitariosDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);

}

/*------------------------------------------------------------------*/

BOOL CPLEDERHidrogramaUnitariosDlg::OnInitDialog()
{
CDialog::OnInitDialog();
return TRUE;
}

/*------------------------------------------------------------------*/
void CPLEDERHidrogramaUnitariosDlg::OnButtonImportarHU()
{
// mensaje de consola
acutPrintf(_T("\nPLEDER: Importar datos de Hidrogramas
Unitarios."));
long NumeroVertHU; //Nmero de ordenadas del H.U.
struct resbuf *rb; // resbufs

// crear un buffer para el nombre del fichero
rb = acutNewRb(RTSTR);

if (!rb)
{
//MDITopoLGCAD.RestSystemVars();
acdbFail(_T("\nError de asignacin de memoria [IMPORTAR
HU][rb]."));
return;
}

// solicitar el nombre del fichero
if (acedGetFileD(_T("Fichero de Hidrogramas Unitarios"), NULL,
PUNFILEEXTHU, 4, rb) == RTERROR)
{
// se cancel
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


155
acutRelRb(rb);
//MDITopoLGCAD.RestSystemVars();
return;
}

TCHAR *pNombreArchivo; // fichero

// tomar la ruta del fichero
pNombreArchivo = (TCHAR*)acad_malloc((_tcslen(rb-
>resval.rstring) + 1) * sizeof(TCHAR));

if (!pNombreArchivo)
{
acutRelRb(rb);
//MDITopoLGCAD.RestSystemVars();
acdbFail(_T("\nError de asignacin de memoria [IMPORTAR
HU][pNombreArchivo]."));
return;
}

::memset(pNombreArchivo, '\0', _tcslen(rb->resval.rstring) + 1);
_tcscpy(pNombreArchivo, rb->resval.rstring);

acutRelRb(rb);

// importar los ordenadas

if (HU.ImportarHidrogramaUnitario(pNombreArchivo, &NumeroVertHU)
!= RTNORM)
{
if (pNombreArchivo)
{
acad_free(pNombreArchivo);
}
//MDITopoLGCAD.RestSystemVars();
return;
}

if (pNombreArchivo)
{
acad_free(pNombreArchivo);
}

acutPrintf(_T("\n%d Ordenadas Importadas."), NumeroVertHU);

}


/*------------------------------------------------------------------*/
void CPLEDERHidrogramaUnitariosDlg::OnButtonImportarPulsos()
{
acutPrintf(_T("\nPLEDER: Importa datos de Pulsos."));

}

/*------------------------------------------------------------------*/
void CPLEDERHidrogramaUnitariosDlg::OnBnClickedOk()
{

//Inicializa las variables de sistema.
RecursosHU.InicializarVariables();
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


156

if ( HU.EscorrentiaDirecta1(HU.pPrimerHU) != RTNORM)
{
RecursosHU.RestaurarVariables();
acdbFail(_T("\nError: Escorrentia directa"));
return;
}
RecursosHU.RestaurarVariables();

CDialog::OnOK();
}
/*------------------------------------------------------------------*/


PLEDERHidrologiaBufer.cpp

#include "StdAfx.h"
#include "PLEDERHidrologiaBufer.h"

/*------------------------------------------------------------------*/
HidrogramaUnitarioBufer::HidrogramaUnitarioBufer()
{
Siguiente = NULL;
}
//Constructor que inicializa a CoorXX, CoordYY, ns y siguiente = NULL
HidrogramaUnitarioBufer::HidrogramaUnitarioBufer(int nn, double HUU,
double PULSOP)
{
Siguiente = NULL;
n = nn;
HU = HUU;
PULSO = PULSOP;
}

//Destructor
HidrogramaUnitarioBufer::~HidrogramaUnitarioBufer() {}

// Obtiene una copia del atributo Siguiente.
HidrogramaUnitarioBufer* HidrogramaUnitarioBufer::ObtenerSiguiente()
{
return Siguiente;
}

//Pone el atributo Siguiente a p
void HidrogramaUnitarioBufer::PonerSiguiente(HidrogramaUnitarioBufer
*p)
{
Siguiente = p;
}


PLEDERHidrologiaCalculos.cpp

#include "StdAfx.h"
#include "PLEDERHidrologiaCalculos.h"
#include "PLEDERHidrologiaDatos.h"

// objetos
CPLEDERHidrologiaDatos HidrologiaDatos;

CPLEDERHidrologiaCalculos::CPLEDERHidrologiaCalculos(void)
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


157
{
}

CPLEDERHidrologiaCalculos::~CPLEDERHidrologiaCalculos(void)
{
}


float CPLEDERHidrologiaCalculos::HietogramaIILA(int N, float a, float
b, float k, float n, float dt, float var, float Tr, float* D, float*
Pacum, float* Pincr, float* Palte)
/*--------------------------------------------------------------------
Ingreso : N = Nmero de intervalos de tiempo.
a = Parmetro regional IILA.
b = Parmetro regional IILA.
k = Parmetro regional IILA.
n = Parmetro regional IILA.
dt = Duracin de la tormneta.
var = Variacin del tiempo.
Tr = Perodo de retorno en aos.
D = Lista de duracin o tiempo (min).
Salida : Pacum = Lista de Precipitaciones acumuladas (mm).
Pincr = Lista de Precipitaciones incrementales (mm).
Palte = Lista de precipitaciones alternales (mm) ->
Hietograma
RTNORM si no se produce ningn error.

Propsito : Calcula las precipitaciones acumulas, incrementales y
alternas segn la ecuacin IILA SENAMHI-UNI
--------------------------------------------------------------------*/
{
int i,j;
Pacum[0]= 0.0;
//Condicion Inicial


for (i =1; i <= N; i++ )
{
D[i]=var*i;
//Duracion en minutos

if (dt <= 3)
{
Pacum[i]=a*(1+k*log10(Tr))* pow((D[i]/60+b),(n-
1))*D[i]/60;
}
else

{
Pacum[i]=a*(1+k*log10(Tr))* pow((D[i]/60),n);
}

Pincr[i]=Pacum[i]-Pacum[i-1];
//Precipitacin Incremental

} //For i

for (i =1; i <= N; i++ )
{
if ( i<=N/2)

Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


158
{
j =N+1-2*i;
Palte[i]=Pincr[j];
//Precipitacion Alterna
}
else

{
j =2*i-N;
Palte[i]=Pincr[j];
//Precipitacion Alterna
}
//acutPrintf (_T("\n Palte[%d] %0.3f"), i , Palte[i]);
} //For i


return RTNORM;
}

float CPLEDERHidrologiaCalculos::HietogramaNRCS(float P24, float Ndt,
int Tormenta, float* ND, float* TipoT, float* NPacum, float* NPincr)
/*--------------------------------------------------------------------
Ingreso : P24 = Precipitacin mxima de 24 horas.
Ndt = Intervalo de tiempo de la lluvia (min)
Tormenta = Tipo de tormenta
0 : Tipo I
1 : Tipo IA
2 : Tipo II
3 : Tipo III
Salida : ND = Lista de duracin o tiempo (min).
TipoT = Lista del tipo de distribucin (P/P24).
NPacum = Lista de Precipitaciones acumuladas
(mm).
NPincr = Lista de Precipitaciones incrementales
(mm).
RTNORM si no se produce ningn error.

Propsito : Calcula las precipitaciones acumulas, incrementales
(Hietogramas) segn el tipo de tormenta del NRCS.
--------------------------------------------------------------------*/
{
float N = 24/(Ndt/60); // Cantidad de elementos en la lista

// Toma los datos segun el tipo de tormenta.
if (HidrologiaDatos.TormentasNRCS(Tormenta, TipoT, N)!= RTNORM)
{
acdbFail(_T("\nPLEDER: !ERROR!\nHietogramaNRCS
[TormentasNRCS]"));
return RTERROR;
}

NPacum[0]= 0.0;
//Condicion Inicial

float dt = 24/N;

for (int i =0; i <= N+1; i++ )
{
ND[i+1]=dt*i;
//Duracin en minutos
NPacum[i+1]=P24*TipoT[i+1];
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


159
NPincr[i+1]=NPacum[i+1]-NPacum[i];
//Precipitacin Incremental
} //For i

return RTNORM;
}


float CPLEDERHidrologiaCalculos::AbstraccionesHietogramaNRCS(int NP,
int CN, float *Palt, float* Pacum, float* Ia, float* Fa, float*
PexcesoAcum, float* Pexceso)
/*--------------------------------------------------------------------
Ingreso : NP = Nmero de datos en la lista de
precipitaciones.
Palt = Precipitaciones alternas o acumuladas
(mm).
CN = Curva Nmero

Salida : Pacum = Lista de Precipitaciones acumuladas
(mm).
Ia = Lista de Abstracciones Iniciales segn
NRCS (mm).
Fa = Lista de Abstracciones continuas segn
NRCS (mm).
PexcesoAcum = Lista de Exceso de lluvia acumulada en
(mm) = Pacum -(Ia+Fa).
Pexceso = Lista de Exceso de lluvia (mm) o PULSOS
(incluyen ceros).
RTNORM si no se produce ningn error.

Propsito : Calcula las abstracciones segn el NRCS y las
precipitaciones en exceso o PULSOS de ingreso.
--------------------------------------------------------------------*/

{
int i;
float Iai, S;

S = (25400.0-254.0*CN)/CN; // Retencin Potencial mxima (mm)

Iai = 0.2*S; // Abstraccin inicial constante (mm)
Pacum[0]= 0.0; // Condiciones iniciales
Palt[0] = 0.0;
PexcesoAcum[0] = 0.0;

for (i =1; i<= NP+1; i++ )
{
// Lista Acumulada de la precipitacin (mm)
Pacum[i] = Pacum[i-1] + Palt[i];

// Lista de la abstracin Inicial (mm)
if (Pacum[i]<Iai)
{
Ia[i]=Pacum[i];
}

else
{
Ia[i]=Iai;
}

Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


160
//Lista de la abstracin continuada (mm)
if (Ia[i] == Iai)
{
Fa[i]=(S*(Pacum[i]-Ia[i]))/(Pacum[i]-Ia[i]+S);
}
else
{
Fa[i]=0.0;
}

// Lista de exceso de precipitacin acumulada (mm)
PexcesoAcum[i]= Pacum[i]-(Ia[i]+Fa[i]);

//Lista de exceso de precipitacin (mm)
Pexceso[i] = PexcesoAcum[i]-PexcesoAcum[i-1];


} //for i

return RTNORM;
}


float CPLEDERHidrologiaCalculos::PulsosP(int NP, int DT, int dt,
float* Pexceso, float* Pulsos, int *nP)
/*--------------------------------------------------------------------
Ingreso : NP = Nmero de datos en la lista de
precipitaciones.
DT = Variacin del tiempo para interpolar
los pulsos.
dt = Variacin del tiempo de las
precipitaciones en exceso.
Pexceso = Lista de Exceso de lluvia (mm) o PULSOS
(incluyen ceros).

Salida : Pulsos = Lista de Pulso Precipitacin Efectiva
-> exceso de lluvia.
nP = Nmero de pulsos.
RTNORM si no se produce ningn error.
Propsito : Calcula los pulsos directos de entrada a partir de las
precipitaciones en exceso (Pexceso -> dato) realizando
interpolaciones segn el intervalo de tiempo asignado. C -> es la
relacin por el cual controla si se suma los valores (C>=1) o se
realizan interpolaciones (C<1).
--------------------------------------------------------------------*/
{
int i, j, k, d, cont =0; // Contadores.
float C = DT/dt, // Relacin de variacin de tiempo.
PulsoSum; // Pulso adicional para acumular las sumas.

j=1;
k = 2;

for (i=1; i<= NP/C ; i++)
{
PulsoSum = Pexceso[k];

for (j=1; j< C; j++)
{
PulsoSum = PulsoSum + Pexceso[k+1];
k++;
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


161
}// for j

Pulsos[i]=PulsoSum;

k++;
//acutPrintf(_T("\nPulsos[%d]: %0.5f"),i, Pulsos[i]);
cont++; // Contador del nmero de pulsos.

}//for i
*nP = cont;

return RTNORM;

}
int CPLEDERHidrologiaCalculos::Convolucion(int nP, int nU, float *P,
float *U, float *Q)
/*--------------------------------------------------------------------
Ingreso : nP = Cantidad de Pulsos en la lista [P].
nU = Cantidad de ordenadas de la lista [U].
P = Lista de Pulso Precipitacin Efectiva
-> exceso de lluvia.
U = Lista de la funcin respuesta a un
pulso (HU) o los caudales por unidad de
precipitacin efectiva del Hidrograma
Unitario
Salida : Q = Lista de Caudal de escorrentia directa
(SALIDA)
RTNORM si no se produce ningn error.
Propsito : Calcula los caudales de escorrenta directa mediante en
mtodo de convolucin discreta de la ecuacin 2.5.15. Q = suma(PxU)
--------------------------------------------------------------------*/
{
float Qsum;
int n, m, nQ, M;
M = nP;
nQ = M + nU - 1;

for(n =1; n<= nQ; n++)
{
Qsum = 0.0;

for (m = max(1,n-nU+1); m <= min(n,M); m++ )
{
Qsum = Qsum + P[m]*U[n-m+1];
} // For m

Q[n] = Qsum;

//acutPrintf (_T("\n Q[%d] %0.3f"), n , Q[n]);

} //for n

return RTNORM;
}



PLEDERHidrologiaDatos.cpp

#include "StdAfx.h"
#include "PLEDERHidrologiaDatos.h"
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


162
#include "PLEDERRecursosCad.h"

#include "PLEDERHidrologiaBufer.h"
#include "PLEDERHidrologiaCalculos.h"

#include <iostream>
#include <fstream> // Para exportar atributos
#include <cstdlib>
#include <new>
/*------------------------------------------------------------------*/
//Creando objetos
CPLEDERHidrologiaCalculos CalcHidrologia;

/*------------------------------------------------------------------*/


CPLEDERHidrologiaDatos::CPLEDERHidrologiaDatos(void)
{

}

CPLEDERHidrologiaDatos::~CPLEDERHidrologiaDatos(void)
{
delete [] P;
delete [] U;
delete [] Q;
}

int
CPLEDERHidrologiaDatos::EscorrentiaDirecta1(HidrogramaUnitarioBufer
*pPrimerHU)
/*-------------------------------------------------------------------
Ingreso : pPrimerHU = Puntero al primer elemento del
buffer(HidrogramaUnitarioBufer).
Salida : RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Calcula la escorrenta directa a partir del Hidrograma
Unitario y pusos o escorrentia directa
--------------------------------------------------------------------*/
{
// Verificar los argumentos
if (!pPrimerHU)
{
acdbFail(_T("\nPuntero Nulo de la importacin"));
return RTERROR;
}

// Conteo de los datos importados
int nU = 0, // Nmero de ordenadas de los U.
nP = 0; // Nmero de Pulsos P.

HidrogramaUnitarioBufer *pHU;
pPrimerHU = pPrimerHU->Siguiente;

for (pHU = pPrimerHU; pHU != NULL; pHU = pHU->Siguiente)
{
nU++;

/*Cuenta la columna de pulsos distintos de cero, ya que se
el ingreso fue de relleno con ceros */
if (pHU->PULSO != 0)
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


163
{
nP++;

}
}
int nQ = nP+nU-1;

//acutPrintf(_T("\n NU: %d, NP: %d"), nU, nP);

P = new float[nP+1];
U = new float[nU+1];
Q = new float[nQ+1];

// Obtencin de los datos [P] y [U] en listas
int i = 1;
for (pHU = pPrimerHU; pHU != NULL; pHU = pHU->Siguiente)
{
P[i] = pHU->PULSO;
U[i] = pHU->HU;
i++;
acutPrintf (_T("\n P %0.3f, U %0.3f "), pHU->PULSO , pHU-
>HU);

}

// Captura en una lista (nVert) los nmeros de Vrtices para
cada S.T.
if ( CalcHidrologia.Convolucion(nP, nU, P, U, Q) != RTNORM)
{
acdbFail(_T("\nError [Convolucion]"));
return RTERROR;
}

// Etiqueta de los resultados
acutPrintf (_T("\nResultado de la Convolucin Discreta: "));

for( i = 1; i<= nQ; i++)
{
acutPrintf (_T("\nQ[%d]: %0.3f"), i, Q[i]);
}

return RTNORM;
}

int CPLEDERHidrologiaDatos::ImportarHidrogramaUnitario(const TCHAR
*pNombreArchivo, long *NumeroVertHU )
/*-------------------------------------------------------------------
Ingreso : pNombreArchivo = Puntero a una zero terminated
string con el nombre del archivo.
NumeroVertHU = Numero de vrtices de las
ordenadas del H.U.
Salida : RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Importar las ordenadas del Hidrograma Unitario, a partir
de un archivo. Guarda los datos en el Buffer
HidrogramaUnitarioBufer, para luego llamar desde cualquier funcin.
-------------------------------------------------------------------*/
{
std::ifstream infile;
char *buffer = NULL;
char *token = NULL;
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


164
char seps[] = PUNFILESEP;
int n;
long np = 0;
double x=0, y = 0;

if (!pNombreArchivo)
{
acdbFail(_T("\nArgumento de funcin no vlido
[ImportarHidrogramaUnitario]."));
return RTERROR;
}

acutPrintf(_T("\nLeyendo el fichero ascii ...\n"));

// abrir el fichero para lectura
infile.open(pNombreArchivo);

if (infile.fail() != 0)
{
*NumeroVertHU = 0;
acdbFail(_T("\nError de E/S al abrir el fichero
[IImportarHidrogramaUnitario][open]."));
return RTERROR;
}

// crear un buffer para la lectura del fichero
buffer = (char*)acad_malloc(GETLINEMAXBUFF * sizeof(char));

if (!buffer)
{
*NumeroVertHU = 0;
infile.close();
acdbFail(_T("\nError de asignacin de memoria [Importar
HU][buffer]."));
return RTERROR;
}

// tomar primero el nmero de puntos que contiene el fichero
// para poder valorar la longitud de la barra de progeso

while (!infile.eof())
{
infile.getline(buffer, GETLINEMAXBUFF, '\n');

if (infile.eof())
{
// limpiar el flag eof
infile.clear();
break;
}
np++;
}

// mover el puntero al principio del fichero
infile.seekg(0, std::ios_base::beg);

// colocar una barra de progreso
acedSetStatusBarProgressMeter(_T("Insertando las ordenadas del
HU: "), 0, (int)np);

np = 0;
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


165

// crear el buffer y aadir el primer Vrtice como puntero
try
{
pPrimerHU = new HidrogramaUnitarioBufer();
}

catch(const std::bad_alloc&)
{
acedRestoreStatusBar();
acdbFail(_T("\nError de asignacin de memoria [Importar
HU][pPrimerHU]."));
return RTERROR;
}

HidrogramaUnitarioBufer *nHU, *nbprevious = pPrimerHU;

// recorrer el fichero
while (!infile.eof())
{
// leer una lnea del fichero
infile.getline(buffer, GETLINEMAXBUFF, '\n');

if (infile.eof())
break;

// separar los campos
token = ::strtok(buffer, seps);

if (!token)
{
*NumeroVertHU = np;
infile.close();
acad_free(buffer);
acedRestoreStatusBar();
acdbFail(_T("\nFichero de Hidrograma Unitario No
vlido [Importar HU]"));
return RTERROR;
}

n = atoi(token);

// Ordenada del HU
token = ::strtok(NULL, seps);
if (!token)
{
*NumeroVertHU = np;
infile.close();
acad_free(buffer);
acedRestoreStatusBar();
acdbFail(_T("\nFichero de Hidrograma Unitario No
vlido -n- [Importar HU]"));
return RTERROR;
}

x = atof(token);

// PULSOS
token = ::strtok(NULL, seps);
if (!token)
{
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


166
*NumeroVertHU = np;
infile.close();
acad_free(buffer);
acedRestoreStatusBar();
acdbFail(_T("\nFichero de Hidrograma Unitario No
vlido -n- [Importar HU]"));
return RTERROR;
}

y = atof(token);
int contador = 1;

// aadir los vrtices de las secciones transv. al buffer
try
{
nHU = new HidrogramaUnitarioBufer(n, x, y);
}

catch(const std::bad_alloc&)
{
LiberarBufferHidrogramaUnitario();
acedRestoreStatusBar();
acdbFail(_T("\nError de asignacin de memoria
[Importar HU][nHU]."));
return RTERROR;
}

nbprevious->Siguiente = nHU;
nbprevious = nHU;

// actualizar la barra de progreso
acedSetStatusBarProgressMeterPos((int)np++);

} // while

infile.close();

acad_free(buffer);

acedRestoreStatusBar();

*NumeroVertHU = np; //Nmero de vrtices totales

return RTNORM;
}

float CPLEDERHidrologiaDatos::TormentasNRCS(int Tormenta, float
*TipoT, float N)
/*--------------------------------------------------------------------
Ingreso : Tormenta = Valor entero que coge el tipo de
tormenta
0 : Tipo I
1 : Tipo IA
2 : Tipo II
3 : Tipo III
Salida : Tormenta Elegida.
RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Retorna la tormenta elegida
-------------------------------------------------------------------*/

Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


167
{
// Distribucin Tipo I
float TipoI[241]=
{0.0,0.00174,0.00348,0.00522,0.00697,0.00871,0.01046,0.0122,0.01
395,0.0157,0.01745,0.0192,0.02095,0.0227,0.02446,0.02621,0.02797
,0.02972,0.03148,0.03324,0.035,0.03677,0.03858,0.04041,0.04227,0
.04416,0.04608,0.04803,0.05001,0.05201,0.05405,0.05611,0.05821,0
.06033,0.06248,0.06466,0.06687,0.06911,0.07138,0.07367,0.076,0.0
7835,0.0807,0.08307,0.08545,0.08784,0.09024,0.09265,0.09507,0.09
751,0.09995,0.10241,0.10487,0.10735,0.10984,0.11234,0.11485,0.11
737,0.1199,0.12245,0.125,0.12761,0.13034,0.13317,0.1361,0.13915,
0.1423,0.14557,0.14894,0.15241,0.156,0.15966,0.16334,0.16706,0.1
7082,0.1746,0.17842,0.18226,0.18614,0.19006,0.194,0.19817,0.2027
5,0.20775,0.21317,0.219,0.22523,0.23185,0.23885,0.24623,0.254,0.
26233,0.27139,0.28119,0.29173,0.303,0.31942,0.34542,0.38784,0.46
316,0.515,0.5322,0.5476,0.5612,0.573,0.583,0.59188,0.60032,0.608
32,0.61588,0.623,0.62982,0.63648,0.64298,0.64932,0.6555,0.66152,
0.66738,0.67308,0.67862,0.684,0.68925,0.6944,0.69945,0.7044,0.70
925,0.714,0.71865,0.7232,0.72765,0.732,0.73625,0.7404,0.74445,0.
7484,0.75225,0.756,0.75965,0.7632,0.76665,0.77,0.77329,0.77656,0
.77981,0.78304,0.78625,0.78944,0.79261,0.79576,0.79889,0.802,0.8
0509,0.80816,0.81121,0.81424,0.81725,0.82024,0.82321,0.82616,0.8
2909,0.832,0.83489,0.83776,0.84061,0.84344,0.84625,0.84904,0.851
81,0.85456,0.85729,0.86,0.86269,0.86536,0.86801,0.87064,0.87325,
0.87584,0.87841,0.88096,0.88349,0.886,0.88849,0.89096,0.89341,0.
89584,0.89825,0.90064,0.90301,0.90536,0.90769,0.91,0.91229,0.914
56,0.91681,0.91904,0.92125,0.92344,0.92561,0.92776,0.92989,0.932
,0.93409,0.93616,0.93821,0.94024,0.94225,0.94424,0.94621,0.94816
,0.95009,0.952,0.95389,0.95576,0.95761,0.95944,0.96125,0.96304,0
.96481,0.96656,0.96829,0.97,0.97169,0.97336,0.97501,0.97664,0.97
825,0.97984,0.98141,0.98296,0.98449,0.986,0.98749,0.98896,0.9904
1,0.99184,0.99325,0.99464,0.99601,0.99736,0.99869,1.0};

// Distribucin Tipo IA
float TipoIA[241]=
{0.0,0.00224,0.00432,0.00628,0.00816,0.01,0.01184,0.01372,0.0156
8,0.01776,0.02,0.02276,0.02568,0.02872,0.03184,0.035,0.03797,0.0
4095,0.04394,0.04695,0.05,0.05315,0.05633,0.05954,0.06276,0.066,
0.0692,0.0724,0.0756,0.0788,0.082,0.08514,0.08829,0.09147,0.0947
1,0.098,0.10147,0.10502,0.10862,0.11229,0.116,0.11969,0.12342,0.
12721,0.13107,0.135,0.13901,0.1431,0.14729,0.15159,0.156,0.16059
,0.1653,0.17011,0.17501,0.18,0.18494,0.18999,0.19517,0.20049,0.2
06,0.21196,0.21808,0.22432,0.23064,0.237,0.24285,0.24878,0.2549,
0.26127,0.268,0.27517,0.28287,0.29118,0.30019,0.31,0.33142,0.354
69,0.37876,0.40255,0.425,0.43936,0.45168,0.46232,0.47164,0.48,0.
48904,0.49752,0.50548,0.51296,0.52,0.52664,0.53292,0.53888,0.544
56,0.55,0.55564,0.56116,0.56656,0.57184,0.577,0.58198,0.58685,0.
59163,0.59635,0.601,0.60576,0.61044,0.61504,0.61956,0.624,0.6283
6,0.63264,0.63684,0.64096,0.645,0.64889,0.65272,0.65651,0.66026,
0.664,0.66773,0.67148,0.67527,0.6791,0.683,0.68665,0.69027,0.693
86,0.69744,0.701,0.70473,0.70838,0.71198,0.71551,0.719,0.72245,0
.72586,0.72926,0.73263,0.736,0.73939,0.74277,0.74613,0.74948,0.7
5281,0.75613,0.75943,0.76271,0.76598,0.76924,0.77248,0.77571,0.7
7892,0.78211,0.78529,0.78845,0.7916,0.79474,0.79786,0.80096,0.80
405,0.80712,0.81018,0.81322,0.81625,0.81926,0.82226,0.82524,0.82
821,0.83116,0.8341,0.83702,0.83992,0.84281,0.84569,0.84855,0.851
4,0.85423,0.85704,0.85984,0.86262,0.86539,0.86815,0.87089,0.8736
1,0.87632,0.87901,0.88169,0.88435,0.887,0.88963,0.89225,0.89485,
0.89744,0.90001,0.90257,0.90511,0.90763,0.91014,0.91264,0.91512,
0.91759,0.92004,0.92247,0.92489,0.92729,0.92968,0.93206,0.93442,
0.93676,0.93909,0.9414,0.9437,0.94598,0.94825,0.9505,0.95274,0.9
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


168
5496,0.95717,0.95936,0.96154,0.9637,0.96584,0.96797,0.97009,0.97
219,0.97428,0.97635,0.9784,0.98044,0.98246,0.98447,0.98647,0.988
45,0.99041,0.99236,0.99429,0.99621,0.99811,1.0};

// Distribucin Tipo II
float TipoII[241]=
{0.0,0.00101,0.00202,0.00305,0.00408,0.00513,0.00618,0.00725,0.0
0832,0.00941,0.0105,0.01161,0.01272,0.01385,0.01498,0.01613,0.01
728,0.01845,0.01962,0.02081,0.022,0.02321,0.02442,0.02565,0.0268
8,0.02813,0.02938,0.03065,0.03192,0.03321,0.0345,0.03581,0.03712
,0.03845,0.03978,0.04113,0.04248,0.04385,0.04522,0.04661,0.048,0
.04941,0.05084,0.05229,0.05376,0.05525,0.05676,0.05829,0.05984,0
.06141,0.063,0.06461,0.06624,0.06789,0.06956,0.07125,0.07296,0.0
7469,0.07644,0.07821,0.08,0.08181,0.08364,0.08549,0.08736,0.0892
5,0.09116,0.09309,0.09504,0.09701,0.099,0.10101,0.10304,0.10509,
0.10716,0.10925,0.11136,0.11349,0.11564,0.11781,0.12,0.12225,0.1
246,0.12705,0.1296,0.13225,0.135,0.13785,0.1408,0.14385,0.147,0.
1502,0.1534,0.1566,0.1598,0.163,0.16628,0.16972,0.17332,0.17708,
0.181,0.18512,0.18948,0.19408,0.19892,0.204,0.2094,0.2152,0.2214
,0.228,0.235,0.24268,0.25132,0.26092,0.27148,0.283,0.30684,0.354
36,0.43079,0.56786,0.663,0.68196,0.69864,0.71304,0.72516,0.735,0
.74344,0.75136,0.75876,0.76564,0.772,0.77796,0.78364,0.78904,0.7
9416,0.799,0.8036,0.808,0.8122,0.8162,0.82,0.82367,0.82726,0.830
79,0.83424,0.83763,0.84094,0.84419,0.84736,0.85047,0.8535,0.8564
7,0.85936,0.86219,0.86494,0.86763,0.87024,0.87279,0.87526,0.8776
7,0.88,0.88229,0.88455,0.88679,0.889,0.89119,0.89335,0.89549,0.8
976,0.89969,0.90175,0.90379,0.9058,0.90779,0.90975,0.91169,0.913
6,0.91549,0.91735,0.91919,0.921,0.92279,0.92455,0.92629,0.928,0.
92969,0.93135,0.93299,0.9346,0.93619,0.93775,0.93929,0.9408,0.94
229,0.94375,0.94519,0.9466,0.94799,0.94935,0.95069,0.952,0.9533,
0.95459,0.95588,0.95716,0.95844,0.95971,0.96098,0.96224,0.9635,0
.96475,0.966,0.96724,0.96848,0.96971,0.97094,0.97216,0.97338,0.9
7459,0.9758,0.977,0.9782,0.97939,0.98058,0.98176,0.98294,0.98411
,0.98528,0.98644,0.9876,0.98875,0.9899,0.99104,0.99218,0.99331,0
.99444,0.99556,0.99668,0.99779,0.9989,1.0};

// Distribucin Tipo III
float TipoIII[241]=
{0.0,0.001,0.002,0.003,0.004,0.005,0.006,0.007,0.008,0.009,0.01,
0.011,0.012,0.013,0.014,0.015,0.016,0.017,0.018,0.019,0.02,0.021
01,0.02203,0.02307,0.02412,0.02519,0.02627,0.02737,0.02848,0.029
61,0.03075,0.03191,0.03308,0.03427,0.03547,0.03669,0.03792,0.039
17,0.04043,0.04171,0.043,0.04431,0.04563,0.04697,0.04832,0.04969
,0.05107,0.05247,0.05388,0.05531,0.05675,0.05821,0.05968,0.06117
,0.06267,0.06419,0.06572,0.06727,0.06883,0.07041,0.072,0.07363,0
.0753,0.07703,0.0788,0.08063,0.0825,0.08443,0.0864,0.08843,0.090
5,0.09263,0.0948,0.09703,0.0993,0.10163,0.104,0.10643,0.1089,0.1
1143,0.114,0.11666,0.11943,0.12232,0.12532,0.12844,0.13167,0.135
02,0.13848,0.14206,0.14575,0.14956,0.15348,0.15752,0.16167,0.165
94,0.17032,0.17482,0.17943,0.18416,0.189,0.19402,0.19928,0.20478
,0.21052,0.2165,0.22272,0.22918,0.23588,0.24282,0.25,0.25776,0.2
6644,0.27604,0.28656,0.298,0.3143,0.3394,0.3733,0.416,0.5,0.584,
0.6267,0.6606,0.6857,0.702,0.71344,0.72396,0.73356,0.74224,0.75,
0.75718,0.76412,0.77082,0.77728,0.7835,0.78948,0.79522,0.80072,0
.80598,0.811,0.81584,0.82057,0.82518,0.82968,0.83406,0.83833,0.8
4248,0.84652,0.85044,0.85425,0.85794,0.86152,0.86498,0.86833,0.8
7156,0.87468,0.87768,0.88057,0.88334,0.886,0.88858,0.8911,0.8935
8,0.896,0.89838,0.9007,0.90298,0.9052,0.90738,0.9095,0.91158,0.9
136,0.91558,0.9175,0.91938,0.9212,0.92298,0.9247,0.92638,0.928,0
.92959,0.93117,0.93273,0.93428,0.93581,0.93733,0.93883,0.94032,0
.94179,0.94325,0.94469,0.94612,0.94753,0.94893,0.95031,0.95168,0
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


169
.95303,0.95437,0.95569,0.957,0.95829,0.95958,0.96085,0.96211,0.9
6336,0.9646,0.96582,0.96704,0.96824,0.96944,0.97062,0.97179,0.97
295,0.9741,0.97523,0.97636,0.97747,0.97858,0.97967,0.98075,0.981
82,0.98288,0.98392,0.98496,0.98598,0.987,0.988,0.98899,0.98997,0
.99094,0.99189,0.99284,0.99377,0.9947,0.99561,0.99651,0.9974,0.9
9828,0.99914,1.0};

int i, // Contador for
j=0, // Contador temporal
cont; // Valor entero para como contador.

float dt; // Variacin del tiempo.

dt = 24/N;
cont = dt*10; // Los datos del hietograma estan en relacion a
1/10

switch (Tormenta)
{
case 0: // Tormenta tipo I
{
for (i = 1; i <= N+1; i++ )
{
TipoT[i] = TipoI[j];
j = j + cont;
}
break;
}

case 1: // Tormenta tipo IA
{
for (i = 1; i <= N+1; i++ )
{
TipoT[i] = TipoIA[j];
j = j + cont;
}
break;
}

case 2: // Tormenta tipo II
{
for (i = 1; i <=N+1; i++ )
{
TipoT[i] = TipoII[j];
j = j + cont;
//acutPrintf (_T("\n TipoT[%d]
%0.5f"), i , TipoT[i]);
}
break;
}

case 3: //Tormenta tipo III
{
for (i = 1; i <= N+1; i++ )
{
TipoT[i] = TipoIII[j];
j = j + cont;
}
break;
}
default:
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


170
acutPrintf(_T("\nFuera de Rango"));

} //switch (Tormenta)

return RTNORM;

}


float CPLEDERHidrologiaDatos::HidrogramaSinteticoNRCS(float Tp, float
qp,float *t, float *q)
/*--------------------------------------------------------------------
Ingreso : Tp = Tiempo de ocurrencia del pico (min)
qp = Caudal pico HU (m3/s/mm)
Salida : t = Lista de tiempos (min)
q = Lista de caudales (m3/s/mm)
RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Retorna los datos del tiempo (t) y caudal (q) del
Hidrograma Unitario t = Tp* (t/Tp); q = qp*(q/qp).
--------------------------------------------------------------------*/
{

float t_Tp[33] =
{0.00,0.10,0.20,0.30,0.40,0.50,0.60,0.70,0.80,0.90,1.00,1.10,1.2
0,1.30,1.40,1.50,1.60,1.70,1.80,1.90,2.00,2.20,2.40,2.60,2.80,3.
00,3.20,3.40,3.6,3.8,4,4.5,5};
float q_qp[33] =
{0.00,0.030,0.100,0.190,0.310,0.470,0.660,0.820,0.930,0.990,1.00
0,0.990,0.930,0.860,0.780,0.680,0.560,0.460,0.390,0.330,0.280,0.
207,0.147,0.107,0.077,0.055,0.040,0.029,0.021,0.015,0.011,0.005,
0};

for(int i=1; i <= 33; i++)
{
t[i] = t_Tp[i-1] * Tp;
q[i] = q_qp[i-1] * qp;
}

return RTNORM;
}

float CPLEDERHidrologiaDatos::HidrogramaSinteticoSnyder(float T ,float
tR, float tpR, float tb, float QpR, float W50, float W75)
/*--------------------------------------------------------------------
Ingreso : Tp = Tiempo de ocurrencia del pico (min)
qp = Caudal pico HU (m3/s/mm)
Salida : t = Lista de tiempos (min)
q = Lista de caudales (m3/s/mm)
RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Retorna los datos del tiempo (t) y caudal (q) del
Hidrograma Unitario t = Tp* (t/Tp); q = qp*(q/qp).
-------------------------------------------------------------------*/
{
int i;
float P = tR/2 +tpR, Q;

// Tramo AB
if ( T>=0 && T <= P-(1.0/3.0)*W50)
{
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


171
Q = (0.5*QpR/(P-(1.0/3.0)*W50))*T;
Q = Q/10.0; // [ m/(sxmm)]
}

// Tramo BC
if ( T> P-(1.0/3.0)*W50 && T <= P-(1.0/3.0)*W75)
{
Q = 0.5*QpR + (0.75*QpR/(W50-W75))*(T-P+(1.0/3.0)*W50);
Q = Q/10.0; // [ m/(sxmm)]
}

// Tramo CD
if ( T > P-(1.0/3.0)*W75 && T <= P)
{
Q = 0.75*QpR + (0.75*QpR/W75)*(T-P+(1.0/3.0)*W75);
Q = Q/10.0; // [ m/(sxmm)]
}

// Tramo DE
if ( T > P && T <= P + (2.0/3.0)*W75)
{
Q = QpR - 3*QpR/(8*W75)*(T-P);
Q = Q/10.0; // [ m/(sxmm)]
}

// Tramo EF
if ( T > P + (2.0/3.0)*W75 && T <= P + (2.0/3.0)*W50)
{
Q = 0.75*QpR - 3*QpR/(8*(W50-W75))*(T-P-(2.0/3.0)*W75);
Q = Q/10.0; // [ m/(sxmm)]
}

// Tramo FG
if ( T > P + (2.0/3.0)*W50 && T <= tb)
{
Q = 0.50*QpR - (0.5*QpR/(tb-P-(2.0/3.0)*W50))*(T-P-
(2.0/3.0)*W50);
Q = Q/10.0; // [ m/(sxmm)]
}

return Q;
}

void CPLEDERHidrologiaDatos::LiberarBufferHidrogramaUnitario()
/*--------------------------------------------------------------------
Ingreso : Vaco.
Salida : Vaco.
Propsito : Libera el buffer en ristra HidrogramaUnitarioBufer al que
apunta el miembro pPrimerHU. Llamar a esta funcin para liberar
el buffer con las ordenasas del HU , obtenidos mediante una llamada a
la funcin ImportarHidrogramaUnitario().
--------------------------------------------------------------------*/
{
if (!pPrimerHU)
return;

HidrogramaUnitarioBufer *nHU = pPrimerHU;
HidrogramaUnitarioBufer *Siguiente = NULL;

// liberar la ristra
while (Siguiente = nHU->Siguiente)
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


172
{
delete nHU;
nHU = Siguiente;
}

delete nHU;

pPrimerHU = NULL;
}


PLEDERHietogramaIilaSenamhiDlg.cpp

/*--------------------------------------------------------------------
PLEDERIilaSenamhiDlg.cpp: archivo de implementacin
Cuadro de dilogo CPLEDERIilaSenamhiDlg -> para obtener Hietogramas
mediante el mtodo IILA SENAMHI UNI
-------------------------------------------------------------------*/
#include "stdafx.h"
#include "resource.h"
#include "PLEDERHietogramaIilaSenamhiDlg.h"
#include "PLEDERHidrologiaDatos.h"
#include "PLEDERRecursosCad.h"

/*-----------------------------------------------------------------*/
//Creando objetos
CRecursosCad RecursosIILA;

/*-----------------------------------------------------------------*/

IMPLEMENT_DYNAMIC(CPLEDERIilaSenamhiDlg, CAdUiDialog)

CPLEDERIilaSenamhiDlg::CPLEDERIilaSenamhiDlg (CWnd *pParent /*=NULL*/,
HINSTANCE hInstance /*=NULL*/) :
CAdUiDialog (CPLEDERIilaSenamhiDlg::IDD, pParent, hInstance)
{
m_a = _T("12.12");
m_k = _T("0.533");
m_n = _T("0.254");
m_duracion = _T("3.0");
m_tr = _T("100.0");

m_PX = _T("0.00");
m_PY = _T("0.00");

}

CPLEDERIilaSenamhiDlg::~CPLEDERIilaSenamhiDlg()
{
}
/*------------------------------------------------------------------*/
BEGIN_MESSAGE_MAP(CPLEDERIilaSenamhiDlg, CAdUiDialog)

ON_EN_KILLFOCUS(IDC_EDIT_a, OnKillfocusEdit_a)
ON_EN_KILLFOCUS(IDC_EDIT_k, OnKillfocusEdit_k)
ON_EN_KILLFOCUS(IDC_EDIT_n, OnKillfocusEdit_n)
ON_EN_KILLFOCUS(IDC_EDIT_dt, OnKillfocusEdit_duracion)
ON_EN_KILLFOCUS(IDC_EDIT_Tr, OnKillfocusEdit_tr)


//Funcion para los cambios en el ComboBox
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


173
//ON_CBN_SELCHANGE(IDC_COMB_b, OnKillfocusCombob)

// Botones
ON_BN_CLICKED(IDC_BUTTON_Punto, OnButtonPUNTO)

ON_BN_CLICKED(IDOK, &CPLEDERIilaSenamhiDlg::OnBnClickedOk)


END_MESSAGE_MAP()

/*------------------------------------------------------------------*/
void CPLEDERIilaSenamhiDlg::DoDataExchange (CDataExchange *pDX)
{
CAdUiDialog::DoDataExchange (pDX) ;

DDX_Control(pDX, IDC_EDIT_a, m_Edit_a);
DDX_Control(pDX, IDC_EDIT_k, m_Edit_k);
DDX_Control(pDX, IDC_EDIT_n, m_Edit_n);
DDX_Control(pDX, IDC_EDIT_dt, m_Edit_duracion);
DDX_Control(pDX, IDC_EDIT_Tr, m_Edit_tr);

DDX_Control(pDX, IDC_EDIT_PX, m_Edit_PX);
DDX_Control(pDX, IDC_EDIT_PY, m_Edit_PY);

//Botones
DDX_Control(pDX, IDC_BUTTON_Punto, m_PickButton_PUNTO);

//ComboBox
DDX_Control(pDX, IDC_COMB_b, m_Combo_b);
DDX_Control(pDX, IDC_COMB_Var, m_Combo_Var);

}
/*------------------------------------------------------------------*/
// Controladores de mensajes de CALC_HIDRAULIC_DLG

BOOL CPLEDERIilaSenamhiDlg::OnInitDialog()
{
CDialog::OnInitDialog();

m_Edit_a.SetWindowText(m_a);
m_Edit_a.SetRange(0, 1000.0);

m_Edit_k.SetWindowText(m_k);
m_Edit_k.SetRange(0, 1000);

m_Edit_n.SetWindowText(m_n);
m_Edit_n.SetRange(0, 1000);

m_Edit_duracion.SetWindowText(m_duracion);
m_Edit_duracion.SetRange(0, 24);

m_Edit_tr.SetWindowText(m_tr);
m_Edit_tr.SetRange(0, 100000.0);

m_Edit_PX.SetWindowText(m_PX);
m_Edit_PY.SetWindowText(m_PY);

m_PickButton_PUNTO.AutoLoad();

m_Combo_b.SetCurSel(1);
m_Combo_Var.SetCurSel(3);
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


174

return TRUE;
}


void CPLEDERIilaSenamhiDlg::OnKillfocusEdit_a()
{
m_Edit_a.Convert();
if (!m_Edit_a.Validate())
{
::AfxMessageBox(_T("Entrada no vlida, rango = 1 @
1000.0"));
m_Edit_a.SetFocus();
m_Edit_a.SetSel(0, -1);
}
CString str;
m_Edit_a.GetWindowText(m_a);
acdbRToS(::_wtof(m_a), 2, 3, str.GetBuffer(80));
m_Edit_a.SetWindowText(str);
}


void CPLEDERIilaSenamhiDlg::OnKillfocusEdit_k()
{
m_Edit_k.Convert();
if (!m_Edit_k.Validate())
{
::AfxMessageBox(_T("Entrada no vlida, rango = 1 @
1000.0"));
m_Edit_k.SetFocus();
m_Edit_k.SetSel(0, -1);
}
CString str;
m_Edit_k.GetWindowText(m_k);
acdbRToS(::_wtof(m_k), 2, 3, str.GetBuffer(80));
m_Edit_k.SetWindowText(str);
}

void CPLEDERIilaSenamhiDlg::OnKillfocusEdit_n()
{
m_Edit_n.Convert();
if (!m_Edit_n.Validate())
{
::AfxMessageBox(_T("Entrada no vlida, rango = 1 @
1000.0"));
m_Edit_n.SetFocus();
m_Edit_n.SetSel(0, -1);
}
CString str;
m_Edit_n.GetWindowText(m_n);
acdbRToS(::_wtof(m_n), 2, 3, str.GetBuffer(80));
m_Edit_n.SetWindowText(str);
}


void CPLEDERIilaSenamhiDlg::OnKillfocusEdit_duracion()
{
m_Edit_duracion.Convert();
if (!m_Edit_duracion.Validate())
{
::AfxMessageBox(_T("Entrada no vlida, rango = 1 @ 24"));
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


175
m_Edit_duracion.SetFocus();
m_Edit_duracion.SetSel(0, -1);
}
CString str;
m_Edit_duracion.GetWindowText(m_duracion);
acdbRToS(::_wtof(m_duracion), 2, 3, str.GetBuffer(80));
m_Edit_duracion.SetWindowText(str);
}

void CPLEDERIilaSenamhiDlg::OnKillfocusEdit_tr()
{
m_Edit_tr.Convert();
if (!m_Edit_tr.Validate())
{
::AfxMessageBox(_T("Entrada no vlida, rango = 1 @
1000.0"));
m_Edit_tr.SetFocus();
m_Edit_tr.SetSel(0, -1);
}
CString str;
m_Edit_tr.GetWindowText(m_tr);
acdbRToS(::_wtof(m_tr), 2, 3, str.GetBuffer(80));
m_Edit_tr.SetWindowText(str);
}


void CPLEDERIilaSenamhiDlg::OnButtonPUNTO()
{
//Clase que habilita CAD
//AcAxDocLock docLock;

CAcModuleResourceOverride resourceOverride;
// Esconde el dilogo
BeginEditorCommand();

ads_point p1;

// Coge el Punto P1
if (acedGetPoint (NULL, _T("\nPique un Punto para la tabla
[Resultados IILA]"), p1) != RTNORM )
{
acutPrintf(_T("\nError al ingresar el Punto"));
// si no cancela el comando(incluyendo el dilogo)
// CancelEditorCommand();
CompleteEditorCommand();
return;
}

CompleteEditorCommand();

m_PX.Format(_T("%g"), p1[X] );
m_Edit_PX.SetWindowText(m_PX);

m_PY.Format(_T("%g"), p1[Y] );
m_Edit_PY.SetWindowText(m_PY);
}

void CPLEDERIilaSenamhiDlg::OnBnClickedOk()
{
// TODO : Add extra validation here
m_Edit_a.GetWindowText(m_a);
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


176
m_Edit_k.GetWindowText(m_k);
m_Edit_n.GetWindowText(m_n);
m_Edit_duracion.GetWindowText(m_duracion);
m_Edit_tr.GetWindowText(m_tr);

m_Edit_PX.GetWindowText(m_PX);
m_Edit_PY.GetWindowText(m_PY);


int nIndex = m_Combo_b.GetCurSel();
m_Combo_b.GetLBText(nIndex,m_b);

nIndex = m_Combo_Var.GetCurSel();
m_Combo_Var.GetLBText(nIndex,m_variacion);

CDialog::OnOK();


}

PLEDERHietogramaNrcsDlg.cpp

/*--------------------------------------------------------------------
PLEDERNRCSDlg.cpp: archivo de implementacin
Cuadro de dilogo CPLEDERNrcsDlg -> para obtener Hietogramas
mediante el mtodo NRCS
--------------------------------------------------------------------*/

#include "stdafx.h"
#include "PLEDERHietogramaNrcsDlg.h"
#include "PLEDERRecursosCad.h"

#include "PLEDERHidrologiaCalculos.h"

/*------------------------------------------------------------------*/
//Creando objetos
CRecursosCad RecursosNRCS;
CPLEDERHidrologiaCalculos HidrologiaNRCS;
/*------------------------------------------------------------------*/

IMPLEMENT_DYNAMIC(CPLEDERNrcsDlg, CAdUiDialog)

CPLEDERNrcsDlg::CPLEDERNrcsDlg (CWnd *pParent /*=NULL*/, HINSTANCE
hInstance /*=NULL*/) : CAdUiDialog (CPLEDERNrcsDlg::IDD, pParent,
hInstance)

{
m_P24 = _T("56.75");
m_NPX = _T("0.00");
m_NPY = _T("0.00");

}

CPLEDERNrcsDlg::~CPLEDERNrcsDlg()
{
}

BEGIN_MESSAGE_MAP(CPLEDERNrcsDlg, CAdUiDialog)

ON_EN_KILLFOCUS(IDC_EDIT_P24, OnKillfocusEdit_P24)

Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


177
// Botones
ON_BN_CLICKED(IDC_BUTTON_Npunto, OnButtonNPUNTO)

ON_BN_CLICKED(IDOK, &CPLEDERNrcsDlg::OnBnClickedOk)

END_MESSAGE_MAP()

void CPLEDERNrcsDlg::DoDataExchange(CDataExchange* pDX)
{
CAdUiDialog::DoDataExchange (pDX) ;
DDX_Control(pDX, IDC_EDIT_P24, m_Edit_P24);
DDX_Control(pDX, IDC_EDIT_NPX, m_Edit_NPX);
DDX_Control(pDX, IDC_EDIT_NPY, m_Edit_NPY);

//ComboBox
DDX_Control(pDX, IDC_COMBO_Ndt, m_Combo_Ndt);
DDX_Control(pDX, IDC_COMBO_Ntormenta, m_Combo_Tormenta);

//Botones
DDX_Control(pDX, IDC_BUTTON_Npunto, m_PickButton_NPUNTO);
}


BOOL CPLEDERNrcsDlg::OnInitDialog()
{
CDialog::OnInitDialog();

m_Edit_P24.SetWindowText(m_P24);
m_Edit_P24.SetRange(0, 10000.0);

m_Edit_NPX.SetWindowText(m_NPX);
m_Edit_NPY.SetWindowText(m_NPY);
m_PickButton_NPUNTO.AutoLoad();

m_Combo_Ndt.SetCurSel(3);
m_Combo_Tormenta.SetCurSel(2);

return TRUE;
}


void CPLEDERNrcsDlg::OnKillfocusEdit_P24()
{
m_Edit_P24.Convert();
if (!m_Edit_P24.Validate())
{
::AfxMessageBox(_T("Entrada no vlida, rango = 1 @
10000.0"));
m_Edit_P24.SetFocus();
m_Edit_P24.SetSel(0, -1);
}
CString str;
m_Edit_P24.GetWindowText(m_P24);
acdbRToS(::_wtof(m_P24), 2, 3, str.GetBuffer(80));
m_Edit_P24.SetWindowText(str);
}


void CPLEDERNrcsDlg::OnButtonNPUNTO()
{
//Clase que habilita CAD
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


178
//AcAxDocLock docLock;

CAcModuleResourceOverride resourceOverride;
// Esconde el dilogo
BeginEditorCommand();

ads_point p1;

// Coge el Punto P1
if (acedGetPoint (NULL, _T("\nPique un Punto para la tabla
[Resultados NRCS]"), p1) != RTNORM )
{
acutPrintf(_T("\nError al ingresar el Punto"));
// si no cancela el comando(incluyendo el dilogo)
// CancelEditorCommand();
CompleteEditorCommand();
return;
}

CompleteEditorCommand();

m_NPX.Format(_T("%g"), p1[X] );
m_Edit_NPX.SetWindowText(m_NPX);

m_NPY.Format(_T("%g"), p1[Y] );
m_Edit_NPY.SetWindowText(m_NPY);
}


void CPLEDERNrcsDlg::OnBnClickedOk()
{
// TODO : Add extra validation here
m_Edit_P24.GetWindowText(m_P24);

m_Edit_NPX.GetWindowText(m_NPX);
m_Edit_NPY.GetWindowText(m_NPY);


int nIndexNdt = m_Combo_Ndt.GetCurSel();
m_Combo_Ndt.GetLBText(nIndexNdt,m_Ndt);
m_Combo_Tormenta.GetLBText(nIndexNdt,m_Tipo);

m_Tormenta = m_Combo_Tormenta.GetCurSel(); // Coge la posisin
del combo Tormenta

CDialog::OnOK();

}


PLEDERHUNRCSDlg.cpp


// PLEDERHUNRCSDlg.cpp: archivo de implementacin
//

#include "stdafx.h"
#include "PLEDERHUNRCSDlg.h"


// Cuadro de dilogo de PLEDERHUNRCSDlg
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


179

IMPLEMENT_DYNAMIC(CPLEDERHUNRCSDlg, CDialog)

CPLEDERHUNRCSDlg::CPLEDERHUNRCSDlg(CWnd *pParent /*=NULL*/, HINSTANCE
hInstance /*=NULL*/)
: CAdUiDialog (CPLEDERHUNRCSDlg::IDD, pParent, hInstance)
{
m_TipoTc = 0;
m_long = _T("103.38");
m_pend = _T("23.00");
m_tc = _T("42.24");
m_tlag1 = _T("25.35");
}

CPLEDERHUNRCSDlg::~CPLEDERHUNRCSDlg()
{
}

BEGIN_MESSAGE_MAP(CPLEDERHUNRCSDlg, CAdUiDialog)

// Cajas de texto
ON_EN_KILLFOCUS(IDC_EDIT_long, OnKillfocusEdit_long)
ON_EN_KILLFOCUS(IDC_EDIT_pend, OnKillfocusEdit_pend)
ON_EN_KILLFOCUS(IDC_EDIT_tc, OnKillfocusEdit_tc)

// Botones
ON_BN_CLICKED(IDC_BUTTON_Long, OnButtonLong)
ON_BN_CLICKED(IDC_BUTTON_Pend, OnButtonPend)

// Radios (cambios en los Radios)
ON_BN_CLICKED(IDC_RADIO_Kirpich, OnRadioKirpich)
ON_BN_CLICKED(IDC_RADIO_usuario, OnRadioUsuario)

ON_BN_CLICKED(IDOK, &CPLEDERHUNRCSDlg::OnBnClickedOk)


END_MESSAGE_MAP()

void CPLEDERHUNRCSDlg::DoDataExchange(CDataExchange* pDX)
{
CAdUiDialog::DoDataExchange(pDX);

// Cajas de Texto.
DDX_Control(pDX, IDC_EDIT_long, m_Edit_long);
DDX_Control(pDX, IDC_EDIT_pend, m_Edit_pend);
DDX_Control(pDX, IDC_EDIT_tc, m_Edit_tc);
DDX_Control(pDX, IDC_EDIT_tlag1, m_Edit_tlag1);

// Radio
DDX_Radio(pDX, IDC_RADIO_Kirpich, m_TipoTc);

// Botones (CAD)
DDX_Control(pDX, IDC_BUTTON_Long, m_PickButton_Long);
DDX_Control(pDX, IDC_BUTTON_Pend, m_PickButton_Pend);

}

BOOL CPLEDERHUNRCSDlg::OnInitDialog()
{
CDialog::OnInitDialog();

Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


180
// Activar radio Kirpich
CButton *pTipoTc;
pTipoTc = (CButton *)GetDlgItem(IDC_RADIO_Kirpich);
pTipoTc->SetCheck(1);
m_TipoTc = 0;

// Inicializa Cajas de texto
m_Edit_long.SetWindowText(m_long);
m_Edit_pend.SetWindowText(m_pend);

m_Edit_tc.SetWindowText(m_tc);
m_Edit_tlag1.SetWindowText(m_tlag1);


// Inicializa el boton tipo Cad
m_PickButton_Long.AutoLoad();
m_PickButton_Pend.AutoLoad();

return TRUE;
}

void CPLEDERHUNRCSDlg::OnKillfocusEdit_long()
{
CString str;
m_Edit_long.GetWindowText(m_long);
acdbRToS(::_wtof(m_long), 2, 3, str.GetBuffer(80));
m_Edit_long.SetWindowText(str);

// Calcula el Tiempo de Concentracin
onCalcularTc();

// Calcula el Tiempo de retardo (tlag)
m_Edit_tc.GetWindowText(m_tc);

float Tlag, Tc;
Tc = _wtof(m_tc);

Tlag = 0.6*Tc;

m_tlag1.Format(_T("%g"), Tlag);
m_Edit_tlag1.SetWindowText(m_tlag1);

}

void CPLEDERHUNRCSDlg::OnKillfocusEdit_pend()
{
CString str;
m_Edit_pend.GetWindowText(m_pend);
acdbRToS(::_wtof(m_pend), 2, 5, str.GetBuffer(80));
m_Edit_pend.SetWindowText(str);

// Calcula el Tiempo de Concentracin
onCalcularTc();

// Calcula el Tiempo de retardo (tlag)
m_Edit_tc.GetWindowText(m_tc);

float Tlag, Tc;
Tc = _wtof(m_tc);

Tlag = 0.6*Tc;
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


181

m_tlag1.Format(_T("%g"), Tlag);
m_Edit_tlag1.SetWindowText(m_tlag1);

}

void CPLEDERHUNRCSDlg::OnKillfocusEdit_tc()
{
// Calcula el Tiempo de retardo (tlag)
m_Edit_tc.GetWindowText(m_tc);

float Tlag, Tc;
Tc = _wtof(m_tc);

Tlag = 0.6*Tc;

m_tlag1.Format(_T("%g"), Tlag);
m_Edit_tlag1.SetWindowText(m_tlag1);

}

void CPLEDERHUNRCSDlg::OnRadioKirpich()
{
// Activa las casillas de la ventana
m_Edit_long.EnableWindow(1);
m_Edit_pend.EnableWindow(1);

CStatic *pPend;
pPend = (CStatic *)GetDlgItem(IDC_STATIC_pend);
pPend->EnableWindow(1);

CStatic *pLong;
pLong = (CStatic *)GetDlgItem(IDC_STATIC_long);
pLong->EnableWindow(1);

CButton *pBLong;
pBLong = (CButton *)GetDlgItem(IDC_BUTTON_Long);
pBLong->EnableWindow(1);

CButton *pBPend;
pBPend = (CButton *)GetDlgItem(IDC_BUTTON_Pend);
pBPend->EnableWindow(1);

// Desactiva la caja de texto tc
m_Edit_tc.EnableWindow(0);
}

void CPLEDERHUNRCSDlg::OnRadioUsuario()
{
// Desactiva las casillas de la ventana
m_Edit_long.EnableWindow(0);
m_Edit_pend.EnableWindow(0);

CStatic *pPend;
pPend = (CStatic *)GetDlgItem(IDC_STATIC_pend);
pPend->EnableWindow(0);

CStatic *pLong;
pLong = (CStatic *)GetDlgItem(IDC_STATIC_long);
pLong->EnableWindow(0);

Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


182
CButton *pBLong;
pBLong = (CButton *)GetDlgItem(IDC_BUTTON_Long);
pBLong->EnableWindow(0);

CButton *pBPend;
pBPend = (CButton *)GetDlgItem(IDC_BUTTON_Pend);
pBPend->EnableWindow(0);

// Activa la caja de texto tc
m_Edit_tc.EnableWindow(1);

}

void CPLEDERHUNRCSDlg::OnButtonLong()
{
//Esconde el dilogo
BeginEditorCommand();

int rc;
double area;
ads_point punto; ads_name nombrep;


if (acedEntSel(_T("\nSelecione el curso principal de la cuenca
[Polilinea]:\n"), nombrep , punto) != RTNORM)
{
acutPrintf(_T("\nPLEDER: !ERROR!\nal
seleccionar la Polilinea"));
CompleteEditorCommand();
return;
}

AcDbObjectId ID;
AcDbEntity *pEnt;

// cambiar el nombre por el ObjectId
if (acdbGetObjectId(ID, nombrep) != Acad::eOk)
{
CompleteEditorCommand();
return acdbFail(_T("\nPLEDER: !ERROR!\nal tomar el
ObjectId de la entidad [acdbGetObjectId]."));
}

// abrir el objeto para lectura
if (acdbOpenObject(pEnt, ID, AcDb::kForRead) != Acad::eOk)
{
CompleteEditorCommand();
return acdbFail(_T("\nPLEDER: !ERROR!\nal abrir el Objeto
"));
}

// chequear el tipo de objeto
if (pEnt->isKindOf(AcDbPolyline::desc()) != Adesk::kTrue)
{
pEnt->close();
CompleteEditorCommand();
return acdbFail(_T("\nTipo de entidad inesperada "));
}

//Retorna al dilogo
CompleteEditorCommand();
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


183

AcDbPolyline *pPolyline = (AcDbPolyline*)pEnt;

// chequear si la Polyline tiene elevacin cero
if (pPolyline->elevation() != 0)
{
pPolyline->close();
CompleteEditorCommand();
acutPrintf(_T("\nLa polyline no tiene elevacin 0."));
}

unsigned int numVerts;

// Tomar el nmero de vrtices de la polyline
numVerts = pPolyline->numVerts();

if (numVerts <= 2)
{
pPolyline->close();
CompleteEditorCommand();
return acdbFail(_T("\nPLEDER: !ERROR!\nPolyline no vlida
"));
}

AcGeLineSeg2d ls;
AcGePoint2d start, end;
ads_point v0, v1;
unsigned int i;
double Lc=0.00; //longitud de la cuenca
v0[Z] = v1[Z] = 0;

// recorrer los vrtices y calcular la distancia
for (i = 0; i < numVerts - 1; i++)
{
pPolyline->getLineSegAt(i, ls);
start = ls.startPoint();
end = ls.endPoint();

v0[X] = start.x;
v0[Y] = start.y;
v1[X] = end.x;
v1[Y] = end.y;
Lc = Lc + acutDistance(v0 , v1);
}
pPolyline->close();

m_long.Format(_T("%g"),Lc/1000.0); //Conversion a km2
m_Edit_long.SetWindowText(m_long);
}

void CPLEDERHUNRCSDlg::OnButtonPend()
{
//Esconde el dilogo
BeginEditorCommand();

ads_point p1, p2;

//Coge el Primer Punto P1
if (acedGetPoint (NULL, _T("\nIngrese el primer Punto [cota
menor]"), p1) != RTNORM )
{
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


184
acutPrintf(_T("\nPLEDER: !ERROR!\nal ingresar el Punto"));
// si no cancela el comando(incluyendo el dilogo)
//CancelEditorCommand();
CompleteEditorCommand();
return;
}

int contador =0;
double angle, s, l, S =0.0, L=0.0 , ls=0.0;

while (true)
{
// Cogen los puntos siguienes
if (acedGetPoint(p1, _T("\nSiguiente punto: "), p2) !=
RTNORM)
{
// se cancel o puls enter

// cancela el comando (incluyendo el dilogo)
//CancelEditorCommand();
CompleteEditorCommand();
if(contador == 0)
{
S=0.0;
}
else
{
S=S*100.0;
}
m_pend.Format(_T("%g"), S );
m_Edit_pend.SetWindowText(m_pend);
return;
}
contador++; // siguiente

//Calculo de la pendiente del curso principal
//empleando la ecuacin de taylor y Schwarz

s = abs((p1[Y]-p2[Y]))/abs((p2[X]-p1[X]));

acutPrintf(_T("Pendiente %d: %0.2f%s"), contador, s*100.0,
"%");

ls = (1.0/sqrt(s))+ ls;
S = pow((contador/ls),2.0);

p1[X]=p2[X];
p1[Y]=p2[Y];
p1[Z]=0.0;

}//while

}

// Clculo del tiempo de concentracin Kirpich
void CPLEDERHUNRCSDlg::onCalcularTc()
{
m_Edit_long.GetWindowText(m_long);
m_Edit_pend.GetWindowText(m_pend);

float L, S, Tc, exp1 =0.77, exp2 =0.385;
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


185

L = _wtof(m_long);
S = _wtof(m_pend);

//Clculo del tiempo de concentracin
Tc = 3.97*pow(L,exp1)/(pow(S, exp2));
m_tc.Format(_T("%g"), Tc);
m_Edit_tc.SetWindowText(m_tc);

}

void CPLEDERHUNRCSDlg::onCalcularTlag()
{
m_Edit_long.GetWindowText(m_long);
m_Edit_pend.GetWindowText(m_pend);

float L, S, Tc, exp1 =0.77, exp2 =0.385;

L = _wtof(m_long);
S = _wtof(m_pend);

//Clculo del tiempo de concentracin
Tc = 3.97*pow(L,exp1)/(pow(S, exp2));
m_tc.Format(_T("%g"), Tc);
m_Edit_tc.SetWindowText(m_tc);

}

void CPLEDERHUNRCSDlg::OnBnClickedOk()
{
// TODO : Add extra validation here
m_Edit_long.GetWindowText(m_long);

m_Edit_pend.GetWindowText(m_pend);
m_Edit_tc.GetWindowText(m_tc);

CDialog::OnOK();

}



PLEDERHUSnyderDlg.cpp

// PLEDERHUSNYDERDlg.cpp: archivo de implementacin
//

#include "stdafx.h"
#include "PLEDERHUSnyderDlg.h"


// Cuadro de dilogo de CPLEDERHUSNYDERDlg

IMPLEMENT_DYNAMIC(CPLEDERHUSNYDERDlg, CDialog)

CPLEDERHUSNYDERDlg::CPLEDERHUSNYDERDlg(CWnd *pParent /*=NULL*/,
HINSTANCE hInstance /*=NULL*/)
: CAdUiDialog (CPLEDERHUSNYDERDlg::IDD, pParent, hInstance)
{
m_TipoCalc = 0;
m_area = _T("3500.00");
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


186
m_L = _T("150.00");
m_Lc = _T("75.00");
m_TR = _T("12.00");
m_TpR = _T("34.00");
m_Qp = _T("157.50");
m_Ct = _T("2.64");
m_tp = _T("32.51");
m_Cp = _T("0.56");

}

CPLEDERHUSNYDERDlg::~CPLEDERHUSNYDERDlg()
{
}

BEGIN_MESSAGE_MAP(CPLEDERHUSNYDERDlg, CAdUiDialog)

// Cajas de texto
ON_EN_KILLFOCUS(IDC_EDIT_SNa, OnKillfocusEdit_Area)
ON_EN_KILLFOCUS(IDC_EDIT_SNl, OnKillfocusEdit_L)
ON_EN_KILLFOCUS(IDC_EDIT_SNlc, OnKillfocusEdit_Lc)
ON_EN_KILLFOCUS(IDC_EDIT_SNtr, OnKillfocusEdit_TR)
ON_EN_KILLFOCUS(IDC_EDIT_SNtpr, OnKillfocusEdit_TpR)
ON_EN_KILLFOCUS(IDC_EDIT_SNqp, OnKillfocusEdit_Qp)
ON_EN_KILLFOCUS(IDC_EDIT_SNct, OnKillfocusEdit_Ct)
ON_EN_KILLFOCUS(IDC_EDIT_SNtp, OnKillfocusEdit_tp)
ON_EN_KILLFOCUS(IDC_EDIT_SNcp, OnKillfocusEdit_Cp)

// Radios (cambios en los Radios)
ON_BN_CLICKED(IDC_RADIO_SNcalcular, OnRadioCalcularC)
ON_BN_CLICKED(IDC_RADIO_SNusuario, OnRadioUsuarioC)

ON_BN_CLICKED(IDOK, &CPLEDERHUSNYDERDlg::OnBnClickedOk)

END_MESSAGE_MAP()

void CPLEDERHUSNYDERDlg::DoDataExchange(CDataExchange* pDX)
{
CAdUiDialog::DoDataExchange(pDX);

// Cajas de Texto.
DDX_Control(pDX, IDC_EDIT_SNa, m_Edit_Area);
DDX_Control(pDX, IDC_EDIT_SNl, m_Edit_L);
DDX_Control(pDX, IDC_EDIT_SNlc, m_Edit_Lc);
DDX_Control(pDX, IDC_EDIT_SNtr, m_Edit_TR);
DDX_Control(pDX, IDC_EDIT_SNtpr, m_Edit_TpR);
DDX_Control(pDX, IDC_EDIT_SNqp, m_Edit_Qp);
DDX_Control(pDX, IDC_EDIT_SNct, m_Edit_Ct);
DDX_Control(pDX, IDC_EDIT_SNtp, m_Edit_tp);
DDX_Control(pDX, IDC_EDIT_SNcp, m_Edit_Cp);

// Radio
DDX_Radio(pDX, IDC_RADIO_SNcalcular, m_TipoCalc);
}

BOOL CPLEDERHUSNYDERDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Activar radio Kirpich
CButton *pTipoCalc;
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


187
pTipoCalc = (CButton *)GetDlgItem(IDC_RADIO_SNcalcular);
pTipoCalc->SetCheck(1);
m_TipoCalc = 0;

// Inicializa Cajas de texto
m_Edit_Area.SetWindowText(m_area);
m_Edit_L.SetWindowText(m_L);
m_Edit_Lc.SetWindowText(m_Lc);
m_Edit_TR.SetWindowText(m_TR);
m_Edit_TpR.SetWindowText(m_TpR);
m_Edit_Qp.SetWindowText(m_Qp);
m_Edit_Ct.SetWindowText(m_Ct);
m_Edit_tp.SetWindowText(m_tp);

m_Edit_Cp.SetWindowText(m_Cp);
m_Edit_Cp.SetRange(0.1, 1);

return TRUE;
}

void CPLEDERHUSNYDERDlg::OnKillfocusEdit_Area()
{
CString str;
m_Edit_Area.GetWindowText(m_area);
acdbRToS(::_wtof(m_area), 2, 3, str.GetBuffer(80));
m_Edit_Area.SetWindowText(str);

// Calcula los Coeficientes Ct y Cp
onCalcularCtCp();
}

void CPLEDERHUSNYDERDlg::OnKillfocusEdit_L()
{
CString str;
m_Edit_L.GetWindowText(m_L);
acdbRToS(::_wtof(m_L), 2, 3, str.GetBuffer(80));
m_Edit_L.SetWindowText(str);

// Calcula los Coeficientes Ct y Cp
onCalcularCtCp();

}

void CPLEDERHUSNYDERDlg::OnKillfocusEdit_Lc()
{
CString str;
m_Edit_Lc.GetWindowText(m_Lc);
acdbRToS(::_wtof(m_Lc), 2, 3, str.GetBuffer(80));
m_Edit_Lc.SetWindowText(str);

// Calcula los Coeficientes Ct y Cp
onCalcularCtCp();

}

void CPLEDERHUSNYDERDlg::OnKillfocusEdit_TR()
{
CString str;
m_Edit_TR.GetWindowText(m_TR);
acdbRToS(::_wtof(m_TR), 2, 3, str.GetBuffer(80));
m_Edit_TR.SetWindowText(str);
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


188

// Calcula los Coeficientes Ct y Cp
onCalcularCtCp();

}

void CPLEDERHUSNYDERDlg::OnKillfocusEdit_TpR()
{
CString str;
m_Edit_TpR.GetWindowText(m_TpR);
acdbRToS(::_wtof(m_TpR), 2, 3, str.GetBuffer(80));
m_Edit_TpR.SetWindowText(str);
// Calcula los Coeficientes Ct y Cp
onCalcularCtCp();

}

void CPLEDERHUSNYDERDlg::OnKillfocusEdit_Qp()
{
CString str;
m_Edit_Qp.GetWindowText(m_Qp);
acdbRToS(::_wtof(m_Qp), 2, 3, str.GetBuffer(80));
m_Edit_Qp.SetWindowText(str);

// Calcula los Coeficientes Ct y Cp
onCalcularCtCp();


}

void CPLEDERHUSNYDERDlg::OnKillfocusEdit_Ct()
{
CString str;
m_Edit_Ct.GetWindowText(m_Ct);
acdbRToS(::_wtof(m_Ct), 2, 3, str.GetBuffer(80));
m_Edit_Ct.SetWindowText(str);

}

void CPLEDERHUSNYDERDlg::OnKillfocusEdit_tp()
{
CString str;
m_Edit_tp.GetWindowText(m_tp);
acdbRToS(::_wtof(m_tp), 2, 3, str.GetBuffer(80));
m_Edit_tp.SetWindowText(str);
}

void CPLEDERHUSNYDERDlg::OnKillfocusEdit_Cp()
{
m_Edit_Cp.Convert();
if (!m_Edit_Cp.Validate())
{
::AfxMessageBox(_T("Coeficiente Cp no Vlido, \nrango = 0.1
@ 1"));
m_Edit_Cp.SetFocus();
m_Edit_Cp.SetSel(0, -1);
}

CString str;
m_Edit_Cp.GetWindowText(m_Cp);
acdbRToS(::_wtof(m_Cp), 2, 3, str.GetBuffer(80));
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


189
m_Edit_Cp.SetWindowText(str);


}


// Clculo del tiempo de concentracin Kirpich
void CPLEDERHUSNYDERDlg::onCalcularCtCp()
{
m_Edit_Area.GetWindowText(m_area);
m_Edit_L.GetWindowText(m_L);
m_Edit_Lc.GetWindowText(m_Lc);
m_Edit_TR.GetWindowText(m_TR);
m_Edit_TpR.GetWindowText(m_TpR);
m_Edit_Qp.GetWindowText(m_Qp);


float A, L, Lc, tR, tpR, Qp, Ct, Cp, exp1 = 0.30;
float qp, tp, tr, qpR;

A = _wtof(m_area);
L = _wtof(m_L);
Lc = _wtof(m_Lc);
tR = _wtof(m_TR);
tpR = _wtof(m_TpR);
Qp = _wtof(m_Qp);


qp = Qp/A;

if (tpR == 5.5*tR)
{
tr = tR;
tp = tpR;

Ct = tp/(0.75*pow(L*Lc,exp1));

qpR = qp;

Cp = qpR*tpR/2.75;


}
else
{
tr = (tpR - 0.25*tR)/5.25;
tp = 5.5*tr;

Ct = tp/(0.75*pow(L*Lc,exp1));

qpR = qp;

Cp = qpR*tpR/2.75;
}
m_Ct.Format(_T("%g"), Ct);
m_Edit_Ct.SetWindowText(m_Ct);

m_tp.Format(_T("%g"), tp);
m_Edit_tp.SetWindowText(m_tp);

m_Cp.Format(_T("%g"), Cp);
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


190
m_Edit_Cp.SetWindowText(m_Cp);

}

void CPLEDERHUSNYDERDlg::onMensajesCp()
{
float Cp = _wtof(m_Cp);

if ( Cp < 0.1 | Cp > 1 )
{
::AfxMessageBox(_T("coefieinte Cp no Vlido, \nrango = 0.1
@ 1"));
}
}

void CPLEDERHUSNYDERDlg::OnRadioCalcularC()
{
// Activa las casillas de la ventana
m_Edit_Area.EnableWindow(1);
m_Edit_L.EnableWindow(1);
m_Edit_Lc.EnableWindow(1);
m_Edit_TR.EnableWindow(1);
m_Edit_TpR.EnableWindow(1);
m_Edit_Qp.EnableWindow(1);

// Desactiva la caja de texto tc
m_Edit_Ct.EnableWindow(0);
m_Edit_tp.EnableWindow(0);
m_Edit_Cp.EnableWindow(0);
}

void CPLEDERHUSNYDERDlg::OnRadioUsuarioC()
{
// Activa las casillas de la ventana
m_Edit_Area.EnableWindow(0);
m_Edit_L.EnableWindow(0);
m_Edit_Lc.EnableWindow(0);
m_Edit_TR.EnableWindow(0);
m_Edit_TpR.EnableWindow(0);
m_Edit_Qp.EnableWindow(0);

// Desactiva la caja de texto tc
m_Edit_Ct.EnableWindow(0);
m_Edit_tp.EnableWindow(1);
m_Edit_Cp.EnableWindow(1);
}


void CPLEDERHUSNYDERDlg::OnBnClickedOk()
{
// TODO : Add extra validation here

m_Edit_Ct.GetWindowText(m_Ct);
m_Edit_Cp.GetWindowText(m_Cp);

CDialog::OnOK();

m_Edit_Cp.GetWindowText(m_Cp);

float Cp = _wtof(m_Cp);

Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


191
if ( Cp < 0.1 | Cp > 1 )
{
::AfxMessageBox(_T("Verifique el Coeficiente Cp, \nrango =
0.1 @ 1"));
}


}


PLEDERLluviaEscorrentiaDlg.cpp

/*--------------------------------------------------------------------
PLEDERLluviaEscorrentiaDlg.cpp: archivo de implementacin
Cuadro de dilogo CPLEDERLluviaEscorrentiaDlg -> Calcula la
transformacin de la lluvia escorrenta (hietogramas -> Hidrogramas)
-------------------------------------------------------------------*/

#include "stdafx.h"
#include "PLEDERLluviaEscorrentiaDlg.h"
#include "PLEDERRecursosCad.h"

#include "PLEDERHidrologiaCalculos.h"

#include "PLEDERHUNRCSDlg.h"
#include "PLEDERHUSnyderDlg.h"
#include "PLEDERHidrologiaDatos.h"
#include "PLEDERCurvaNumeroDlg.h"
#include "PLEDERHietogramaNrcsDlg.h"
#include "PLEDERHietogramaIilaSenamhiDlg.h"


/*------------------------------------------------------------------*/
//Creando objetos
CRecursosCad RecursosLLES;
CPLEDERHidrologiaCalculos HidrologiaLLES;

/*------------------------------------------------------------------*/

IMPLEMENT_DYNAMIC(CPLEDERLluviaEscorrentiaDlg, CAdUiDialog)

CPLEDERLluviaEscorrentiaDlg::CPLEDERLluviaEscorrentiaDlg(CWnd *pParent
/*=NULL*/, HINSTANCE hInstance /*=NULL*/)
: CAdUiDialog (CPLEDERLluviaEscorrentiaDlg::IDD, pParent, hInstance)
{
m_area = _T("1810.34");
m_qb = _T("0.00");
m_cn = _T("73");
m_ppx = _T("0.0");
m_ppy = _T("0.0");

computadoMM = false;
computadoHU = false;

}
CPLEDERLluviaEscorrentiaDlg::~CPLEDERLluviaEscorrentiaDlg()
{

}

BEGIN_MESSAGE_MAP(CPLEDERLluviaEscorrentiaDlg, CAdUiDialog)
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


192

// Cajas de Texto
//ON_EN_KILLFOCUS(IDC_EDIT_area, OnKillfocusEdit_AREA)
//ON_EN_KILLFOCUS(IDC_EDIT_qb, OnKillfocusEdit_QB)
ON_EN_KILLFOCUS(IDC_EDIT_cn, OnKillfocusEdit_CN)

// Combo Box
ON_CBN_SELCHANGE(IDC_COMBO_hus, OnKillfocusComboHUS)
ON_CBN_SELCHANGE(IDC_COMBO_mm, OnKillfocusComboMM)
ON_CBN_SELCHANGE(IDC_COMBO_intert, OnKillfocusComboINTERT)

// Botones incluidos cad
ON_BN_CLICKED(IDC_BUTTON_area, OnButtonAREA)
ON_BN_CLICKED(IDC_BUTTON_PPunto, OnButtonPPUNTO)

ON_BN_CLICKED(IDC_BUTTON_cn, OnCALCCurvaNumero)
ON_BN_CLICKED(IDC_BUTTON_hus, OnCALCHidrogramaUnitario)
ON_BN_CLICKED(IDC_BUTTON_mm, OnCALCPrecipitaciones)

ON_BN_CLICKED(IDOK, &CPLEDERLluviaEscorrentiaDlg::OnBnClickedOk)

END_MESSAGE_MAP()


void CPLEDERLluviaEscorrentiaDlg::DoDataExchange(CDataExchange* pDX)
{
CAdUiDialog::DoDataExchange(pDX);

// Cajas de Texto.
DDX_Control(pDX, IDC_EDIT_area, m_Edit_AREA);
DDX_Control(pDX, IDC_EDIT_qb, m_Edit_QB);
DDX_Control(pDX, IDC_EDIT_cn, m_Edit_CN);

DDX_Control(pDX, IDC_EDIT_PPX, m_Edit_PPX);
DDX_Control(pDX, IDC_EDIT_PPY, m_Edit_PPY);

//ComboBox.
DDX_Control(pDX, IDC_COMBO_hus, m_Combo_HUS);
DDX_Control(pDX, IDC_COMBO_mm, m_Combo_MM);
DDX_Control(pDX, IDC_COMBO_intert, m_Combo_INTERT);

// Botones (Slo CAD)
DDX_Control(pDX, IDC_BUTTON_area, m_PickButton_AREA);
DDX_Control(pDX, IDC_BUTTON_PPunto, m_PickButton_PPUNTO);

// Botones (Dilogo)
DDX_Control(pDX, IDC_BUTTON_hus, m_Button_HUS);

}

BOOL CPLEDERLluviaEscorrentiaDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Inicializa Cajas de texto
m_Edit_AREA.SetWindowText(m_area);

m_Edit_QB.SetWindowText(m_qb);

m_Edit_CN.SetWindowText(m_cn);
m_Edit_CN.SetRange(1, 100);
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


193

m_Edit_PPX.SetWindowText(m_ppx);
m_Edit_PPY.SetWindowText(m_ppy);

// Inicializa Bombo box
m_Combo_HUS.SetCurSel(0);
m_Combo_MM.SetCurSel(0);
m_Combo_INTERT.SetCurSel(3);

// Inicializa el boton tipo Cad
m_PickButton_AREA.AutoLoad();
m_PickButton_PPUNTO.AutoLoad();

return

TRUE;
}

void CPLEDERLluviaEscorrentiaDlg::OnKillfocusEdit_CN()
{
m_Edit_CN.Convert();
if (!m_Edit_CN.Validate())
{
::AfxMessageBox(_T("Entrada no vlida, rango = 1 @
100.0"));
m_Edit_CN.SetFocus();
m_Edit_CN.SetSel(0, -1);
}
CString str;
m_Edit_CN.GetWindowText(m_cn);
acdbRToS(::_wtof(m_cn), 2, 0, str.GetBuffer(80));
m_Edit_CN.SetWindowText(str);
}

void CPLEDERLluviaEscorrentiaDlg::OnKillfocusComboHUS()
{



}


void CPLEDERLluviaEscorrentiaDlg::OnKillfocusComboMM()
{



}
void CPLEDERLluviaEscorrentiaDlg::OnKillfocusComboINTERT()
{

}



void CPLEDERLluviaEscorrentiaDlg::OnButtonAREA()
{
//Esconde el dilogo
BeginEditorCommand();

int rc;
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


194
double area;
ads_point punto; ads_name nombrep;


if (acedEntSel(_T("\nSelecione La Cuenca [Polilinea]:\n"),
nombrep , punto) != RTNORM)
{
acutPrintf(_T("\nError al seleccionar la
Polilinea"));
CompleteEditorCommand();
return;
}
AcDbObjectId ID;
AcDbEntity *pEnt;

// cambiar el nombre por el ObjectId
if (acdbGetObjectId(ID, nombrep) != Acad::eOk)
{
CompleteEditorCommand();
return acdbFail(_T("\nError al tomar el ObjectId de la
entidad [acdbGetObjectId]."));
}

// abrir el objeto para lectura
if (acdbOpenObject(pEnt, ID, AcDb::kForRead) != Acad::eOk)
{
CompleteEditorCommand();
return acdbFail(_T("\nError al abrir el Objeto "));
}

// chequear el tipo de objeto
if (pEnt->isKindOf(AcDbPolyline::desc()) != Adesk::kTrue)
{
pEnt->close();
CompleteEditorCommand();
return acdbFail(_T("\nTipo de entidad inesperada "));
}

//Retorna al dilogo
CompleteEditorCommand();

AcDbPolyline *pPolyline = (AcDbPolyline*)pEnt;

pPolyline->getArea(area);
pPolyline->close();

m_area.Format(_T("%g"),area/1000000.0);//Conversin a km2

m_Edit_AREA.SetWindowText(m_area);
}

void CPLEDERLluviaEscorrentiaDlg::OnButtonPPUNTO()
{
//Clase que habilita CAD
//AcAxDocLock docLock;

CAcModuleResourceOverride resourceOverride;
// Esconde el dilogo
BeginEditorCommand();

ads_point p1;
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


195

// Coge el Punto P1
if (acedGetPoint (NULL, _T("\nPique un Punto para la tabla
[Resultados PLEDER]"), p1) != RTNORM )
{
acutPrintf(_T("\nError al ingresar el Punto"));
// si no cancela el comando(incluyendo el dilogo)
// CancelEditorCommand();
CompleteEditorCommand();
return;
}

CompleteEditorCommand();

m_ppx.Format(_T("%g"), p1[X] );
m_Edit_PPX.SetWindowText(m_ppx);

m_ppy.Format(_T("%g"), p1[Y] );
m_Edit_PPY.SetWindowText(m_ppy);
}



void CPLEDERLluviaEscorrentiaDlg::OnCALCCurvaNumero()
{
//Declaracion de Objetos dilogos
CPLEDERCurvaNumeroDlg
dlgCNC(CWnd::FromHandle(adsw_acadMainWnd()));
if (dlgCNC.DoModal() != IDOK)
{
acutPrintf(_T("\nPLEDER: Se Cancel la Operacin"));
return;
}
m_Edit_CN.SetWindowText(dlgCNC.m_cnc);

}

void CPLEDERLluviaEscorrentiaDlg::OnCALCHidrogramaUnitario()
{
m_hus = m_Combo_HUS.GetCurSel(); // Coge la posicin del combo
hus

switch (m_hus)
{
case 0: // HUS NRCS
{
//Declaracion de Objetos dilogos
CPLEDERHUNRCSDlg
dlgHUNRCS(CWnd::FromHandle(adsw_acadMainWnd()));
if (dlgHUNRCS.DoModal() != IDOK)
{
acutPrintf(_T("\nPLEDER: Se Cancel la
Operacin[HUS NRCS]"));
return;
}

Tretardo = _wtof(dlgHUNRCS.m_tlag1);
computadoHU = true;

break;
}
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


196

case 1: // HUS Snyder
{
//Declaracion de Objetos dilogos
CPLEDERHUSNYDERDlg
dlgHUSN(CWnd::FromHandle(adsw_acadMainWnd()));
if (dlgHUSN.DoModal() != IDOK)
{
acutPrintf(_T("\nPLEDER: Se Cancel la
Operacin[HUS SNYDER]"));
return;
}
tp = _wtof(dlgHUSN.m_tp);
Cp = _wtof(dlgHUSN.m_Cp);

computadoHU = true;
break;
}
default:
acutPrintf(_T("\nFuera de Rango"));

} //switch (m_hus)
}
void CPLEDERLluviaEscorrentiaDlg::OnCALCPrecipitaciones()
{
pNP = 0;

m_mm = m_Combo_MM.GetCurSel(); // Coge la posicin del combo mm

switch (m_mm)
{
case 0: // Tormenta NRCS
{
CPLEDERNrcsDlg
dlgNRCS(CWnd::FromHandle(adsw_acadMainWnd()));
if (dlgNRCS.DoModal() != IDOK)
{
pNP = 0; // Una forma de saber si se calcul
o no
acutPrintf(_T("\nPLEDER: Se Cancel la
Operacin"));
return;
}
// Variables Hietograma NRCS
float P24, // Precipitacin mxima de 24 horas.
Ndt, // Intervalo de tiempo de la lluvia (min)
PX, // Punto de referencia X.
PY; // Punto de referencia Y.

int Tormenta; // Tipo de tormenta
// 0 : Tipo I
// 1 : Tipo IA
// 2 : Tipo II
// 3 : Tipo III

//Coge las variables del dilogo IILA

P24 = _wtof(dlgNRCS.m_P24);
Ndt = _wtof(dlgNRCS.m_Ndt);
Tormenta =dlgNRCS.m_Tormenta;
PX =_wtof(dlgNRCS.m_NPX);
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


197
PY =_wtof(dlgNRCS.m_NPY);

// Variables para los reesultados. Max = 241 valores
para Ndt 10 minutos.
float *ND= new float[241]; // Lista de duracin o
tiempo (min).
float *TipoT = new float[241];// Lista de la
distribucin de la tormenta elegida
float *NPacum = new float[241]; // Lista de
Precipitaciones acumuladas (mm).
float *NPincr = new float[241]; // Lista de
Precipitaciones incrementales (mm).

// hietogramas mediante la distribucin NRCS
if ( HidrologiaLLES.HietogramaNRCS(P24, Ndt,
Tormenta, ND, TipoT, NPacum, NPincr)!= RTNORM)
{
acdbFail(_T("\nError: HietogramaNRCS"));
return;
}

// Traspasa los resultados a la variable global
//PaltAcum[0] = 0.0;
PaltAcum[1] = 0.0;

for (int i =1; i <= 24/(Ndt/60)+1; i++ )
{
Palternaincremental[i] = NPincr[i]; //
Precipitacin alterna
PaltAcum[i+1] = PaltAcum[i]+ NPincr[i+1]; //
Precipitacin alterna acumulada
}// For i

pNP = 24/(Ndt/60); // nmero de elementos de la lista
de precipitaciones
Duracion = Ndt;

computadoMM = true;

delete [] ND;
delete [] TipoT;
delete [] NPacum;
delete [] NPincr;

break;
}

case 1: // IILA
{
CPLEDERIilaSenamhiDlg
dlgIILA(CWnd::FromHandle(adsw_acadMainWnd()));
if (dlgIILA.DoModal() != IDOK)
{
pNP = 0; // Una forma de saber si se calcul
o no
acutPrintf(_T("\nPLEDER: Se Cancel la
Operacin"));
return;
}

//Variables Parmetros regionales
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


198
float a, //Parmetro regional
k, //Parmetro regional
b, //Parmetro regional: 0.5 horas Costa
//: 0.4 horas Sierra
//: 0.2 horas Costa Norte y selava
n, //Parmetro regional
dt, //Duracin de la lluvia (hr)
var, //Variacin (min)
Tr, //Periodo de retorno (aos)
PX, //Punto de referencia X.
PY; //Punto de referencia Y.
//Coge las variables del dilogo IILA

a = _wtof(dlgIILA.m_a);
k = _wtof(dlgIILA.m_k);
b = _wtof(dlgIILA.m_b);
n = _wtof(dlgIILA.m_n);
dt = _wtof(dlgIILA.m_duracion);
var =_wtof(dlgIILA.m_variacion);
Tr =_wtof(dlgIILA.m_tr);
PX =_wtof(dlgIILA.m_PX);
PY =_wtof(dlgIILA.m_PY);

int N =dt*60/var; // Nmero de intervalos de tiempo.

float *D= new float[N+1];// Lista de duracin o
tiempo (min).
float *Pacum = new float[N+1];// Lista de
Precipitaciones acumuladas (mm).
float *Pincr = new float[N+1];// Lista de
Precipitaciones incrementales (mm).
float *Palte = new float[N+1];// Lista de
precipitaciones alternales (mm) -> Hietograma

//Precipitaciones Totales mediante el metodo de IILA
SENAMHI UNI
if (
HidrologiaLLES.HietogramaIILA(N,a,b,k,n,dt,var,Tr, D, Pacum, Pincr,
Palte)!= RTNORM)
{
acdbFail(_T("\nError: HietogramaIILA"));
return;
}

PaltAcum[1] = 0.0;
Palternaincremental[1] = 0.0;
// Traspasa los resultados a la variable global

for (int i =1; i <= N+1; i++ )
{
Palternaincremental[i+1] = Palte[i];
PaltAcum[i+1] = PaltAcum[i]+
Palternaincremental[i+1]; // Precipitacin alterna acumulada

}// For i

pNP = N;// nmero de elementos de la lista de
precipitaciones
Duracion = var;

computadoMM = true;
Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


199

delete [] D;
delete [] Pacum;
delete [] Pincr;
delete [] Palte;

break;
}
case 2: // Especificado por el usuario
{
break;
}

default:
acutPrintf(_T("\nFuera de Rango"));

} //switch (m_mm)

}

void CPLEDERLluviaEscorrentiaDlg::OnBnClickedOk()
{
// Coge los valores despues de pulsar OK

// Cajas de texto
m_Edit_AREA.GetWindowText(m_area);
m_Edit_QB.GetWindowText(m_qb);
m_Edit_CN.GetWindowText(m_cn);

m_Edit_PPX.GetWindowText(m_ppx);
m_Edit_PPY.GetWindowText(m_ppy);

// Combo Box , Coge la posisin de los combos
m_hus = m_Combo_HUS.GetCurSel();
m_mm = m_Combo_MM.GetCurSel();

// Coge el valor como un string
int nIndexNdt = m_Combo_INTERT.GetCurSel();
m_Combo_INTERT.GetLBText(nIndexNdt,m_intert);

CDialog::OnOK();
}





Apendice A. HIDROLOG

IA C

ODIGO FUENTE C++


200
Apendice B
HIDR

AULICA C

ODIGO FUENTE
C++
EL componente Hidr aulico se organiza en 09 libreras con m ultiples funciones y 03 ven-
tanas gracas
201
ARCHIVOS DE CABECERA:

PLEDERFlujoPermanente.h
#pragma once

//class polilineabuffer;
class CrossSectionsBufer;
class FGVResultadosBufer;

class CPLEDERFlujoPermanente
{
public:
CPLEDERFlujoPermanente(void);
~CPLEDERFlujoPermanente(void);

public:

//Clculo del Flujo G. V. en estado subrtico.
int FGVFlujoSubcritico(float Q, float h);

//Clculo del Flujo G. V. en estado supercrtico.
int FGVFlujoSupercritico(float Q, float h);

// Clculo mediante el mtodo de la Biseccin
int FGVBiseccionMethod(double Zlower, double Zupper,
AcGePoint3dArray Vertices,long BL, long BR, double nLF, double
nMC, double nRF, double LLF, double LMC, double LRF, double CC,
double CE,double Betai, double Qi, double Ai, double Zsi, double
Ki, double *RHidraulicos);

// Obtiene la conductividad laterales y centrales
int FGVGetConveyanceK(double ALF, double AMC, double ARF, double
PLF, double PMC, double PRF, double nLF, double nMC, double nRF,
double *KLF, double *KMC, double *KRF, double *K);

// Factor de correcin Beta
int FGVGetCorrectionFactorBeta(double ALF, double AMC, double
ARF, double KLF, double KMC, double KRF, double *Betai);

// Obtiene la longitud ponderada del tramo i-i+1
int FGVGetLenghtDeltaX(double LLF, double LMC, double LRF,
double ALF, double AMC, double ARF, double *dX);

// Obtiene la prdida de friccin en el tramo i-i+1 (hf12)
int FGVGetFrictionLosshf(double dX, double Qi1, double Qi,
double Ki, double Ki1, double *hfi12);

// Funcin F del Flujo Gradualmente Variado
float FGVFuncionF(double Bi1, double Bi, double Qi1, double Qi,
double Ai1, double Ai, double Zsi1, double Zsi, double hfi12,
double hci12);

// Dibuja los niveles de la superficie libre en las secciones
transversales.
int FGVPlotLevelFreeSurface(double Zsi, double IdST, double Q,
double h, AcGePoint2dArray& CSPoligon, double *TopWith);

// Libera el burfer de los resultados
void FreeAllFGVResultadosBufer(FGVResultadosBufer
*theFirstResult);

Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


202
public:
//struct CrossSection* m_pSections; // buffer con las
secciones transv.
struct Vertex* m_pSections; //
buffer con las secciones transv.
long m_Sections_len;
int m_MetodoSf; //
Mtodo para calcular la pendiente de friccin
float m_htexto;
bool computado;

public:
//FGVResultadosBufer* m_theFirstR;


};


PLEDERFlujoPermanenteDlg.h

#pragma once
#include "resource.h"

// Cuadro de dilogo de CPLEDERFlujoPermanenteDlg

class CPLEDERFlujoPermanenteDlg : public CAdUiDialog
{
DECLARE_DYNAMIC(CPLEDERFlujoPermanenteDlg)

public:
CPLEDERFlujoPermanenteDlg(CWnd* pParent = NULL); //
Constructor estndar
virtual ~CPLEDERFlujoPermanenteDlg();

// Datos del cuadro de dilogo
enum { IDD = IDD_HIDRA_CALC1D };

// Cajas de texto
CAcUiNumericEdit m_Edit_Ydowstream;
CString m_Ydowstream;

CAcUiNumericEdit m_Edit_Yupstream;
CString m_Yupstream;

CAcUiNumericEdit m_Edit_Caudal;
CString m_Caudal;

int m_TipoFlujo;

protected:
virtual void DoDataExchange(CDataExchange* pDX); //
Compatibilidad con DDX/DDV
afx_msg LRESULT OnAcadKeepFocus (WPARAM, LPARAM) ;

// Radio (Cuando existan cambios en el radio)
afx_msg void OnRadioFlujoSubcritico();
afx_msg void OnRadioFlujoSupercritico();
afx_msg void OnRadioFlujoMixto();

// Cajas de texto

Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


203
public:
virtual BOOL OnInitDialog();
afx_msg void OnBnClickedOk();

DECLARE_MESSAGE_MAP()
};



PLEDERHidraB#pragma once

// Estructura para calcular Socavaciones
struct SocavacionST
{
double IdST; // Id
int Material, // Tipo de material, Cohesivo = 0,
No Cohesivo = 1.
CoefProb; // Coeficiente de probabilidad de gasto.
double CoefMaterial;// Peso especfico dimetro medio del
material de fondo.
};

// Estructura para datos Socavaciones hidrulicas.
struct Socavacion
{
int nV; // Nmero de vrtices calculados.
double IdST, // Id
Zs, // Cota Tirante.
At, // Area Total.
Pt, // Permetro Total.
Q; // Descarga del flujo.

AcGePoint3d GVerticeFlow[MAX_VERTICES]; // Vrtices de la
seccin hidrulica (mojada).

};

// Estructura para los perfiles
struct Perfiles
{
double IdST, // Id
h, // Tirante.
Zs, // Cota Tirante.
At, // Area Total.
Q, // Descarga del flujo.
LMC; // Length main channel
};

// Estructura para los resultados
struct Resultados
{

double IdST, // Id
h, // Tirante.
Zs, // Cota Tirante.
Beta, // Coeciente de correccin.
ALF, // Area llanura Izquierda.
AMC, // Area Canal central.
ARF, // Area llanura derecha.
PLF, // Permetro llanura izquierdo.
PMC, // Permetro canal central.
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


204
PRF, // Permetro llanura derecho
KLF, // Conductividad llanura izquierdo.
KMC, // Conductividad canal central.
KRF, // Conductividad llanura derecho
Q, // Descarga del flujo.
hf12, // Prdida por firccin.
hc12, // Prdida local.
TopW; // Espejo de Agua.

};


// Estructura para las secciones transversales
struct Vertex
{
double HminG, // Vrtice mnimo global.
HminL; // Vrtice mnimo Local.

double IdST; // ID seccin transversal
long nVST; // Nmero de vrtices de la seccin
transversal

double LL, // Longitud izquierdo.
LC, // Longitud central.
LR, // Longitud derecho.
nL, //Coeficiente de manning banco izquierdo.
nC, // Coeficiente de manning canal central.
nR, // Coeficiente de manning banco derecho
CC, // Coeficiente de contraccin.
CE; // Coeficiente de expansin.

long BL, // Lmite banco izquierdo.
BR; // Lmite banco derecho.

AcGePoint3d Vertice[MAX_VERTICES];
};

//Clase CrossSectionsBufer: Bufer para secciones transversales
class CrossSectionsBufer
{
public:

CrossSectionsBufer(); //Constructor por defecto, pone Siguiente
= NULL;
CrossSectionsBufer(AcGePoint2d P1, double X1, double Y1, double
IdST, long nVST, AcGePoint2dArray Vertice, double HminG, double HminL,
double LL, double LC, double LR, double NL, double NC, double NR,
long BL, long BR, double CC, double CE);

virtual ~CrossSectionsBufer(); // Destructor

public:
CrossSectionsBufer *nbnext; // siguiente

AcGePoint2d m_P1; // Punto de referecia para los
vrtices locales.
double m_X1, // Distancia de referencia en X.
m_Y1, // Cota de referencia en Y.
m_HminG, // Vrtice mnimo global.
m_HminL; // Vrtice mnimo Local.

Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


205
double m_IdST; // ID seccin transversal
long m_nVST; // Nmero de vrtices de la
seccin transversal

double m_LL, // Longitud izquierdo.
m_LC, // Longitud central.
m_LR, // Longitud derecho.
m_NL, // Coeficiente de manning banco
izquierdo.
m_NC, // Coeficiente de manning canal
central.
m_NR, // Coeficiente de manning banco
derecho
m_CC, // Coeficiente de contraccin.
m_CE; // Coeficiente de expansin.

long m_BL, // Lmite banco izquierdo.
m_BR; // Lmite banco derecho.

AcGePoint3d m_GlobalVertice[MAX_VERTICES]; // Vrtices de las
secciones transversales globales
AcGePoint3d m_LocalVertice[MAX_VERTICES]; // Vrtices de las
secciones transversales locales

};

//Clase CrossSectionsSocavacionBufer: Bufer para Socavaciones
class CrossSectionsSocavacionBufer
{
public:

CrossSectionsSocavacionBufer(); //Constructor por defecto,
pone Siguiente = NULL;
CrossSectionsSocavacionBufer(double IdST, int Material, int
CoefProb, double CoefMaterial);
virtual ~CrossSectionsSocavacionBufer(); // Destructor

public:
CrossSectionsSocavacionBufer *nbnext; // siguiente

// Parmetros para socavacin
int m_Material, // Tipo de material, Cohesivo = 0,
No Cohesivo = 1.
m_CoefProb; // Coeficiente de probabilidad de gasto.

double m_CoefMaterial; // Peso especfico dimetro medio del
material de fondo.
double m_IdST; // ID seccin transversal
};


//Clase FGVResultadosBufer: Bufer para los resultados del flujo
class FGVResultadosBufer
{
public:

FGVResultadosBufer (); //Constructor por defecto, pone Siguiente
= NULL;
FGVResultadosBufer (int nV,AcGePoint2dArray Vertice, double
IdST, double h, double Zs, double Beta, double ALF, double
AMC,double ARF, double PLF, double PMC, double PRF, double KLF,
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


206
double KMC,double KRF, double Q, double hf12, double hc12,
double TopW, double LMC);

virtual ~FGVResultadosBufer(); // Destructor

public:
FGVResultadosBufer *pRnext; // siguiente

public:
double m_IdST; // Id
int m_nV;
double
m_h, // Tirante.
m_Zs, // Cota Tirante.
m_Beta, // Coeciente de correccin.
m_ALF, // Area llanura Izquierda.
m_AMC, // Area Canal central.
m_ARF, // Area llanura derecha.
m_PLF, // Permetro llanura izquierdo.
m_PMC, // Permetro canal central.
m_PRF, // Permetro llanura derecho
m_KLF, // Conductividad llanura izquierdo.
m_KMC, // Conductividad canal central.
m_KRF, // Conductividad llanura derecho
m_Q, // Descarga del flujo.
m_hf12, // Prdida por firccin.
m_hc12, // Prdida local.
m_TopW, // Espejo de Agua.
m_LMC; // Longitud del canal central.

AcGePoint3d m_ResultVertice[MAX_VERTICES]; // Vrtices de las
secciones transversales resultados

};


//Clase SeccionesBufer: Bufer para seciones transversales desde
importacion Excel
class SeccionesBufer
{
public:

SeccionesBufer ();//Constructor por defecto, pone Siguiente =
NULL;
SeccionesBufer (int nss, double CoordX, double CoordY, double
manning);

public:

SeccionesBufer *ObtenerSiguiente(); // Obtener siguiente
void PonerSiguiente(SeccionesBufer *p);// Poner siguiente

virtual ~SeccionesBufer(); // Destructor

public:

SeccionesBufer *Siguiente;// Puntero a SeccionesBufer Siguiente
int ns;
// Nmero de secciones
double CoordX, CoordY , manning; // Cordenadas X y Y, manning
};
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


207

class PerfilesBufer
{
public:
PerfilesBufer(); //Constructor por defecto
PerfilesBufer(int nST, ads_point v0, ads_point v1);
virtual ~PerfilesBufer(); // Destructor

public:
PerfilesBufer *SiguienteP;// Puntero a SeccionesBufer Siguiente
float nST;
ads_point start; // inicio
ads_point end; // final




};


uffer.h



PLEDERHidraSecTrasnv.h

#pragma once

#define PUNFILEEXT _T("st;sec;abia;txt") // Extensiones para el
fichero de Secciones Transversales
#define DCEXP 3 //
Decimales para las Secciones Trasnversales exportados
#define GETLINEMAXBUFF 1024 // 1 kB Tamao de buffer de lectura
lneas de ficheros
#define PUNFILESEP" ,\t\n" // Separador de campos en el fichero de
Secciones Trasnversales

//class polilineabuffer;
class SeccionesBufer;

//Clase HidraSecTrasnv
class HidraSecTrasnv
{
public:
HidraSecTrasnv(void);
public:
~HidraSecTrasnv(void);
public:

// Retorna EL Nmero de Vrtices de una polilinea
int NumeroVerticesPolilinea(ads_name nombrep, long *nVST);

// Almacena las coordenadas de una polilinea (ST) en la consola
en coordenadas locales
int LeerVerticesPolilineaConsola(ads_name nombrep, ads_point
p1,double X1, double Y1, int contador);

// Almacena las coordenadas de una polilinea (ST) en listas en
coordenadas locales
int LeerVerticesPolilineaLista(ads_name nombrep, ads_point
p1,double X1, double Y1, double* CX, double* CY);
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


208

// Almacena las coordenadas de una polilinea (ST) en listas sin
alteraciones de coordenadas
int LeerVerticesPolilinea(ads_name nombrep, double* CX, double*
CY);

// Importar las Secciones Transversales desde un archivo
int ImportarSeccionesTransversales(const TCHAR
*pNombreArchivo,long *NumeroVertST);

// Obtiene los datos del buffer SeccionesBufer
int ObtenerSeccionesTransversales();

//Libera el buffer en ristra SeccionesBufer
void LiberarBufferSeccionesTransv();

public:

SeccionesBufer* pPrimerST; //Puntero primer elemento ST.
a la clase SeccionesBufer.



};



PLEDERRecursosSuperficieLibre.h

#pragma once
#include "PLEDERSuperficieLibre.h"

class CRecursosSuperficieLibre
{
public:
CRecursosSuperficieLibre(void);
public:
~CRecursosSuperficieLibre(void);

public:

// Calcula el nmeros de vrtices para cada Seccin Transversal.
int NumeroVerticesCadaST(float *V, int n, int nST, float
*nVert);

// Calcula los Vrtices Mximos y Mnimos.
int VerticesMaximosMinimos(float *CY, int nST, float *nVert,
float *Vmin, float *Vmax);

// Pediente Motriz I12(Sfm)
double PendienteMotrizSfm(float K1,float K2, float Q, float nn,
int MetodoSfm);

float CRecursosSuperficieLibre::NumeroFroude(float Q, float A,
float dA );

public:
// Calcula el Area y el Permetro.
int AreaPerimetro(int inicio, int fin, float CotaTirante, float
*CX, float *CY, double *Area, double *Perimetro);

Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


209
// Calcula el Area , Permetro, Derivada del Area y Derivada del
Permetro.
int AreaPerimetroDerivadas(int inicio, int fin, float
CotaTirante, float *CX, float *CY, double *Area, double
*Perimetro,double *dArea, double *dPerimetro);
};



PLEDERResutadosDlg.h

#pragma once

//--------------------------------------------------------------------
class FGVResultadosBufer;
#include "adui.h"
#include "PLEDERReportCtrl.h"
#include "resource.h"
//--------------------------------------------------------------------
class CPLEDERResutadosDlg : public CAdUiDialog
{
DECLARE_DYNAMIC (CPLEDERResutadosDlg)

public:
static BOOL CALLBACK ItemdataProc(DWORD dwData, LPARAM lParam);
CPLEDERResutadosDlg (CWnd *pParent =NULL, HINSTANCE hInstance
=NULL) ;
virtual ~CPLEDERResutadosDlg();

// Datos del cuadro de dilogo
enum { IDD = IDD_HIDRA_RESULT} ;

// DAtos Tabla
CReportCtrl m_wndListR;
BOOL m_bFullRow;
BOOL m_bGridLines;
BOOL m_bCheckboxes;

// Cajas de texto
CAcUiNumericEdit m_Edit_Rx;
CString m_Rx;

CAcUiNumericEdit m_Edit_Ry;
CString m_Ry;

// Botones (Slo CAD)
CAcUiPickButton m_PickButton_RPunto;

protected:
virtual void DoDataExchange (CDataExchange *pDX) ;
afx_msg LRESULT OnAcadKeepFocus (WPARAM, LPARAM) ;
afx_msg void OnButtonRPunto();

public:
virtual BOOL OnInitDialog();
afx_msg void OnBnClickedOk();

public:
FGVResultadosBufer* m_theFirstR;
struct Resultados* m_pRHidraulicos; // Struct buffer para
los resultados.
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


210
long m_Result_len;

DECLARE_MESSAGE_MAP()

//--------------------------------------------------------------------
// Funciones extras para los resultados
public:
// Libera los datos de los niveles calculados
void FreeAllResultBufs();

// Adquirir o tomar los niveles calculados
int AcquireLevelFreeSurface(long *numberL);

// Eliminar los niveles calculados
int DeleteLevelFreeSurface(bool prompt);
} ;


PLEDERSeccionesTransversales.h

#pragma once

class CrossSectionsBufer;
class CrossSectionsSocavacionBufer;

class CPLEDERSeccionesTransversales
{
public:
CPLEDERSeccionesTransversales(void);
~CPLEDERSeccionesTransversales(void);

public:

// Libera los datos de las secciones transversales
void FreeAllCrossSectionsBufs();

// Libera los datos de las socavaciones
void FreeAllCrossSectionsSocavacionBufs();

// Adquirir o tomar las secciones transversales
int AcquireCrossSections(long *numberof);

// Adquirir o tomar las secciones transversales con socavaciones
int AcquireCrossSectionsSocavacion(long *numberof);

// Busca en forma ordenada, la primera S.T.
int GetFirstNumberCrossSections(long *nfirst);

// Busca el ltimo nmero ST.
int GetLastNumberCrossSections(long *nlast);

// Contabiliza el nmero de las S.T.
int GetNumberofCrossSections(long *numberof);

// Obtiene los atributos de la S.T.
int GetCrossSectionsAttributes();

// Encuadra la S.T. a paritr de su ID
int ZoomCrossSections(double IdnST);

// Obtiene los atributos de la S.T. a partir de su ID
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


211
int GetIdCrossSectionsAttributes(double IdST, long *nVST,
AcGePoint2dArray& LvertexArray,AcGePoint2dArray& GvertexArray,
double *LL, double *LC, double *LR, double *NL,double *NC, double
*NR, long *BL, long *BR, double *CC, double *CE);

// Obtiene los atributos de la S.T. a partir de su ID
int GetIdCrossSectionsAttributesSocavacion(double IdST, int
*Material, int *CoefProb, double *CoefMaterial);

// Obtiene el vrtice mnino
int GetMinVertice(double *VerticeY, long nVert, double *Hmin);

// Obtener las reas-permetros laterales y rea-permetro
central.
int GetAreaPerimeter(double CotaTirante, AcGePoint3dArray
LvertexArray,long BL, long BR, double *ALF , double *AMC, double
*ARF,double *PLF, double *PMC, double *PRF, double *A, double
*P);

int GetAreaPoligon(AcGePoint2dArray VerticesPoligon, double
*Area);

public:
CrossSectionsBufer* m_theFirstST;
CrossSectionsSocavacionBufer* m_theFirstSOC;
double m_STTextHeight;
double m_STDiameter;

};





PLEDERSeccionesTransversalesDlg.h

#pragma once

#include "PLEDERReportCtrl.h"
#include "PLEDERSeccionesTransversales.h"
#include "resource.h"

// Cuadro de dilogo de CPLEDERSeccionesTransversalesDlg

class CPLEDERSeccionesTransversalesDlg : public CAdUiDialog
{
DECLARE_DYNAMIC(CPLEDERSeccionesTransversalesDlg)

public:
static BOOL CALLBACK ItemdataProc(DWORD dwData, LPARAM lParam);
CPLEDERSeccionesTransversalesDlg(CWnd* pParent = NULL); //
Constructor estndar
virtual ~CPLEDERSeccionesTransversalesDlg();

// Datos del cuadro de dilogo
enum { IDD = IDD_HIDRA_ST };

// DAtos Tabla
CReportCtrl m_wndList;
BOOL m_bFullRow;
BOOL m_bGridLines;
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


212
BOOL m_bCheckboxes;

// Cajas de texto
CAcUiNumericEdit m_Edit_LI;
CString m_LI;

CAcUiNumericEdit m_Edit_LC;
CString m_LC;

CAcUiNumericEdit m_Edit_LD;
CString m_LD;

CAcUiNumericEdit m_Edit_BI;
CString m_BI;

CAcUiNumericEdit m_Edit_BD;
CString m_BD;

CAcUiNumericEdit m_Edit_NI;
CString m_NI;

CAcUiNumericEdit m_Edit_NC;
CString m_NC;

CAcUiNumericEdit m_Edit_ND;
CString m_ND;

CAcUiNumericEdit m_Edit_CC;
CString m_CC;

CAcUiNumericEdit m_Edit_CE;
CString m_CE;

// Combo Box
CComboBox m_Combo_ST;
CString m_Id_ST;
double m_IdST;

// Botones (Slo CAD)
CAcUiPickButton m_PickButton_ST;

CAcUiPickButton m_PickButton_LI;
CAcUiPickButton m_PickButton_LC;
CAcUiPickButton m_PickButton_LD;

CAcUiPickButton m_PickButton_BI;
CAcUiPickButton m_PickButton_BD;

// Botones (Dialogo general)


protected:

virtual void DoDataExchange(CDataExchange* pDX); //
Compatibilidad con DDX/DDV
afx_msg LRESULT OnAcadKeepFocus (WPARAM, LPARAM) ;

afx_msg void OnKillfocusEdit_BI();
afx_msg void OnKillfocusEdit_BD();

afx_msg void OnKillfocusEdit_CC();
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


213
afx_msg void OnKillfocusEdit_CE();

// Combo Box (Cuando existan cambios en el combo)
afx_msg void OnKillfocusComboST();

// Botones (Slo CAD)
afx_msg void OnButtonST();

afx_msg void OnButtonLI();
afx_msg void OnButtonLC();
afx_msg void OnButtonLD();

afx_msg void OnButtonBI();
afx_msg void OnButtonBD();

// Botones
afx_msg void OnCommandAPLICAR();

// Botones Men
afx_msg void OnCommandSTN();

public:
virtual BOOL OnInitDialog();

public:
double OnButtonDistancia();

public:
struct Vertex* m_pSections;// buffer con las secciones transv.
long m_Sections_len;

// Variables Socavacin
Adesk::Int32 m_Material, // Tipo de material, Cohesivo
= 0, No Cohesivo = 1.
m_CoefProb; // Ubicacin en la lista (combo)
coeficiente de probabilidad de gasto.
double m_CoefMaterial; // Peso especfico dimetro medio
del material de fondo.

DECLARE_MESSAGE_MAP()

};


/*------------------------------------------------------------------*/

// Cuadro de dilogo de CPLEDERST1Dlg

class CPLEDERST1Dlg : public CDialog
{
DECLARE_DYNAMIC(CPLEDERST1Dlg)

public:
CPLEDERST1Dlg(CWnd* pParent = NULL); // Constructor estndar
virtual ~CPLEDERST1Dlg();

// Datos del cuadro de dilogo
enum { IDD = IDD_HIDRA_NST };

// Cajas de texto
CAcUiNumericEdit m_Edit_NST;
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


214
CString m_NST;
protected:
virtual void DoDataExchange(CDataExchange* pDX); //
Compatibilidad con DDX/DDV

public:
afx_msg void OnBnClickedOk();

DECLARE_MESSAGE_MAP()
};



















































Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


215
ARCHIVOS Cpp:


PLEDERFlujoPermanente.cpp

#include "StdAfx.h"
#include "PLEDERFlujoPermanente.h"
#include "PLEDERSeccionesTransversales.h"
#include "PLEDERHidraBuffer.h"
#include "PLEDERRecursosCad.h"

CPLEDERSeccionesTransversales CST;
CRecursosCad RecursosFGV;
CPLEDERFlujoPermanente::CPLEDERFlujoPermanente(void)
{
m_MetodoSf = 0; // Por defecto, mtodo de la media aritmtica.
m_htexto = 0.50;
}

CPLEDERFlujoPermanente::~CPLEDERFlujoPermanente(void)
{
}

int CPLEDERFlujoPermanente::FGVFlujoSubcritico(float Q, float h)
/*--------------------------------------------------------------------
Ingreso : Q = Descarga del flujo a transitar.
h = Tirante Inicial de las secciones
transversales.

Salida : RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Calcula los miveles de la superficie libre mediante el
fluijo subcrtico. Observacin: Los resultado los alamceno en una
matriz cuya notacin es como sigue:
RHidraulicos[0] = HminL
RHidraulicos[1] = Zsi1 -> Tirante del agua
calculado.
RHidraulicos[2] = Betai1.
RHidraulicos[3] = ALF.
RHidraulicos[4] = AMC.
RHidraulicos[5] = ARF.
RHidraulicos[6] = PLF.
RHidraulicos[7] = PMC.
RHidraulicos[8] = PRF.
RHidraulicos[9] = KLF.
RHidraulicos[10] = KMC.
RHidraulicos[11] = KRF.
RHidraulicos[12] = Qi.
RHidraulicos[13] = hfi12.
RHidraulicos[14] = hci12.
--------------------------------------------------------------------*/
{
double Ai, ALF, AMC, ARF, Pi, PLF, PMC, PRF, Ki, KLF, KMC,
KRF, Betai, Qi;
double Ai1, Pi1, Ki1, Betai1, Qi1, hfi12, hci12, Zlower,
Zupper, Zsi, Zsi1;
double nL, nC, nR, LL, LC, LR, CC, CE;
long BL, BR;
int i, j;
double RHidraulicos[16], TextHight = 0.16, TopWith;
AcGePoint3dArray Vertices;
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


216
AcGePoint3d Vertex;
AcGePoint2dArray Poligon; // Poligono de la S.T.

// Clculos en la primera seccin transversal (Dowstream)
Qi = Q;

for (i = 0; i < (m_pSections + m_Sections_len-1)->nVST ; i++)
{
// Vrtices
Vertex[X] = (m_pSections + m_Sections_len-1)->Vertice[i].x;
Vertex[Y] = (m_pSections + m_Sections_len-1)->Vertice[i].y;
Vertices.append(Vertex);
}
BL = (m_pSections + m_Sections_len-1)->BL;
BR = (m_pSections + m_Sections_len-1)->BR;
nL = (m_pSections + m_Sections_len-1)->nL;
nC = (m_pSections + m_Sections_len-1)->nC;
nR = (m_pSections + m_Sections_len-1)->nR;

Zsi = (m_pSections + m_Sections_len-1)->HminL +h; // Cota del
tirante
CST.GetAreaPerimeter(Zsi, Vertices, BL, BR, &ALF, &AMC, &ARF,
&PLF, &PMC, &PRF, &Ai, &Pi);

// Clculo de K laterales y central
FGVGetConveyanceK(ALF, AMC, ARF, PLF, PMC, PRF,nL, nC, nR, &KLF,
&KMC, &KRF , &Ki);

// Clculo del Coeficiente de Correccin (Betai)
FGVGetCorrectionFactorBeta(ALF, AMC, ARF, KLF, KMC, KRF,
&Betai);

acutPrintf(_T("\nZsi = %0.3f"),Zsi);
Poligon.removeAll();
FGVPlotLevelFreeSurface(Zsi, (m_pSections + m_Sections_len-1)-
>IdST , Q, Zsi - (m_pSections + m_Sections_len-1)->HminL,
Poligon, &TopWith);

acutPrintf(_T("\nSeccion = %0.3f"),(m_pSections +
m_Sections_len-1)->IdST);

// Guardo los valores en la matriz
RHidraulicos[0] = (m_pSections + m_Sections_len-1)->HminL;
RHidraulicos[1] = Zsi;
RHidraulicos[2] = Betai;
RHidraulicos[3] = ALF;
RHidraulicos[4] = AMC;
RHidraulicos[5] = ARF;
RHidraulicos[6] = PLF;
RHidraulicos[7] = PMC;
RHidraulicos[8] = PRF;
RHidraulicos[9] = KLF;
RHidraulicos[10]= KMC;
RHidraulicos[11]= KRF;
RHidraulicos[12]= Qi;
RHidraulicos[13]= 0.0; // Prdida por firccin.
RHidraulicos[14]= 0.0; // Prdida local.
RHidraulicos[15]= TopWith; // Espejo del Agua

LC = (m_pSections + m_Sections_len-1)->LC;

Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


217
// Crea la entidad personalizada PLEDERHydraulicResult desde
ObjectDBX
CPLEDERHydraulicResult *pResultados;

// crear la nueva entidad
try
{
pResultados = new CPLEDERHydraulicResult((m_pSections +
m_Sections_len-1)->IdST, Poligon, RHidraulicos,LC, TextHight);
}

catch(const std::bad_alloc&)
{
acdbFail(_T("\nError de asignacin de memoria."));
return RTERROR;
}

AcDbObjectId ID;

// aadirla a la base de datos de AutoCAD
if
(RecursosFGV.AadirEntidadBlockTableRecord((AcDbEntity*)pResulta
dos, ID) != Acad::eOk)
{
if (pResultados)
{
delete pResultados;
}

acdbFail(_T("\nError al aadir la entidad a la Base de
Datos [AadirEntidadBlockTableRecord]."));
return RTERROR;
}


// Restaurando los valores
ALF = AMC = ARF = PLF = PMC = PRF = KLF = KMC = KRF =0.0;

// Iterar en las siguientes secciones transversales.
for (j = m_Sections_len - 2; j >= 0; j--)
{
Vertices.removeAll();
acutPrintf(_T("\nID Seccin transversal N:
%0.3f"),(m_pSections + j)->IdST);
for (i = 0; i < (m_pSections + j)->nVST; i++)
{
// Vrtices
Vertex[X] = (m_pSections + j)->Vertice[i].x;
Vertex[Y] = (m_pSections + j)->Vertice[i].y;
Vertices.append(Vertex);
} // for i

Zlower = (m_pSections + j)->HminL; // Cota mnima.
Zupper = Zsi + 5; // Corregir
BL = (m_pSections + j)->BL; BR = (m_pSections + j)->BR;
nL = (m_pSections + j)->nL; nC = (m_pSections + j)->nC; nR
= (m_pSections + j)->nR;
LL = (m_pSections + j)->LL; LC = (m_pSections + j)->LC; LR
= (m_pSections + j)->LR;
CC = (m_pSections + j)->CC; CE = (m_pSections + j)->CE;

Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


218
RHidraulicos[0] = Zlower;
FGVBiseccionMethod(Zlower, Zupper, Vertices, BL, BR, nL,
nC, nR, LL, LC, LR, CC, CE, Betai, Qi,Ai, Zsi, Ki,
RHidraulicos);

// Reasigna los nuevos valores, para las sigueintes
iteraciones.
Betai = RHidraulicos[2]; // Betai1
Ai = RHidraulicos[3]+ RHidraulicos[4]+ RHidraulicos[5]; //
ALF+AMC+ARF
Zsi = RHidraulicos[1]; // Zsi1;
Ki = RHidraulicos[9]+ RHidraulicos[10]+ RHidraulicos[11];//
KLF+KMC+KRF

acutPrintf(_T("\nZsi = %0.3f"),Zsi);
Poligon.removeAll(); // Eliminar todos lo datos de esta
natriz

// Captura los vrtices de la secciones transversal
calculado
FGVPlotLevelFreeSurface(Zsi, (m_pSections + j)->IdST, Q ,
Zsi-(m_pSections + j)->HminL, Poligon, &TopWith);

RHidraulicos[15]= TopWith; // Espejo del Agua

// Crea la entidad personalizada PLEDERHydraulicResult
desde ObjectDBX
CPLEDERHydraulicResult *pResultados;
// crear la nueva entidad
try
{
pResultados = new CPLEDERHydraulicResult((m_pSections
+ j)->IdST, Poligon, RHidraulicos,LC, TextHight);
}

catch(const std::bad_alloc&)

{
acdbFail(_T("\nError de asignacin de memoria."));
return RTERROR;
}

AcDbObjectId ID;

// aadirla a la base de datos de AutoCAD
if
(RecursosFGV.AadirEntidadBlockTableRecord((AcDbEntity*)pRe
sultados, ID) != Acad::eOk)
{
if (pResultados)
{
delete pResultados;
}

acdbFail(_T("\nError al aadir la entidad a la Base
de Datos [AadirEntidadBlockTableRecord]."));
return RTERROR;
}


} // for j
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


219

return RTNORM;
}

int CPLEDERFlujoPermanente::FGVFlujoSupercritico(float Q, float h)
/*--------------------------------------------------------------------
Ingreso : Q = Descarga del flujo a transitar.
h = Tirante Inicial de las secciones
transversales.

Salida : RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Calcula los miveles de la superficie libre mediante el
fluijo supercrtico. Observacin: Los resultado los alamceno en una
matriz cuya notacin es como sigue:
RHidraulicos[0] = HminL
RHidraulicos[1] = Zsi1 -> Tirante del agua
calculado.
RHidraulicos[2] = Betai1.
RHidraulicos[3] = ALF.
RHidraulicos[4] = AMC.
RHidraulicos[5] = ARF.
RHidraulicos[6] = PLF.
RHidraulicos[7] = PMC.
RHidraulicos[8] = PRF.
RHidraulicos[9] = KLF.
RHidraulicos[10] = KMC.
RHidraulicos[11] = KRF.
RHidraulicos[12] = Qi.
RHidraulicos[13] = hfi12.
RHidraulicos[14] = hci12.
--------------------------------------------------------------------*/
{
double Ai, ALF, AMC, ARF, Pi, PLF, PMC, PRF, Ki, KLF, KMC,
KRF, Betai, Qi;
double Ai1, Pi1, Ki1, Betai1, Qi1, hfi12, hci12, Zlower,
upper, Zsi, Zsi1;
double nL, nC, nR, LL, LC, LR, CC, CE;
long BL, BR;
int i, j;
double RHidraulicos[16], TextHight = 0.16, TopWith;
AcGePoint3dArray Vertices;
AcGePoint3d Vertex;
AcGePoint2dArray Poligon; // Poligono de la S.T.

// Clculos en la primera seccin transversal (Upstream)
Qi = Q;

for (i = 0; i < (m_pSections + m_Sections_len-1)->nVST ; i++)
{
// Vrtices
Vertex[X] = m_pSections->Vertice[i].x;
Vertex[Y] = m_pSections->Vertice[i].y;
Vertices.append(Vertex);
}

BL = m_pSections->BL;
BR = m_pSections->BR;
nL = m_pSections->nL;
nC = m_pSections->nC;
nR = m_pSections->nR;
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


220

Zsi = m_pSections->HminL +h; // Cota del tirante
CST.GetAreaPerimeter(Zsi, Vertices, BL, BR, &ALF, &AMC, &ARF,
&PLF, &PMC, &PRF, &Ai, &Pi);

// Clculo de K laterales y central
FGVGetConveyanceK(ALF, AMC, ARF, PLF, PMC, PRF,nL, nC, nR, &KLF,
&KMC, &KRF , &Ki);

// Clculo del Coeficiente de Correccin (Betai)
FGVGetCorrectionFactorBeta(ALF, AMC, ARF, KLF, KMC, KRF,
&Betai);

acutPrintf(_T("\nZsi = %0.3f"),Zsi);
Poligon.removeAll();
FGVPlotLevelFreeSurface(Zsi, m_pSections->IdST , Q, Zsi -
m_pSections->HminL, Poligon, &TopWith);

acutPrintf(_T("\nSeccion = %0.3f"),m_pSections->IdST);

// Guardo los valores en la matriz
RHidraulicos[0] = m_pSections->HminL;
RHidraulicos[1] = Zsi;
RHidraulicos[2] = Betai;
RHidraulicos[3] = ALF;
RHidraulicos[4] = AMC;
RHidraulicos[5] = ARF;
RHidraulicos[6] = PLF;
RHidraulicos[7] = PMC;
RHidraulicos[8] = PRF;
RHidraulicos[9] = KLF;
RHidraulicos[10]= KMC;
RHidraulicos[11]= KRF;
RHidraulicos[12]= Qi;
RHidraulicos[13]= 0.0; // Prdida por firccin.
RHidraulicos[14]= 0.0; // Prdida local.
RHidraulicos[15]= TopWith; // Espejo del Agua

LC = m_pSections->LC;

// Crea la entidad personalizada PLEDERHydraulicResult desde
ObjectDBX
CPLEDERHydraulicResult *pResultados;

// crear la nueva entidad
try
{
pResultados = new CPLEDERHydraulicResult(m_pSections->IdST,
Poligon, RHidraulicos,LC, TextHight);
}

catch(const std::bad_alloc&)
{
acdbFail(_T("\nError de asignacin de memoria."));
return RTERROR;
}

AcDbObjectId ID;

// aadirla a la base de datos de AutoCAD
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


221
if
(RecursosFGV.AadirEntidadBlockTableRecord((AcDbEntity*)pResultados,
ID) != Acad::eOk)
{
if (pResultados)
{
delete pResultados;
}

acdbFail(_T("\nError al aadir la entidad a la Base de
Datos [AadirEntidadBlockTableRecord]."));
return RTERROR;
}

// Restaurando los valores
ALF = AMC = ARF = PLF = PMC = PRF = KLF = KMC = KRF =0.0;

// Iterar en las siguientes secciones tranversales.
for (j = 1; j < m_Sections_len; j++)
{
Vertices.removeAll();
acutPrintf(_T("\nID Seccin transversal N:
%0.3f"),(m_pSections + j)->IdST);
for (i = 0; i < (m_pSections + j)->nVST; i++)
{
// Vrtices
Vertex[X] = (m_pSections + j)->Vertice[i].x;
Vertex[Y] = (m_pSections + j)->Vertice[i].y;
Vertices.append(Vertex);
} // for i

Zlower = (m_pSections + j)->HminL; // Cota mnima.
Zupper = Zsi + 5; // Corregir
BL = (m_pSections + j)->BL; BR = (m_pSections + j)->BR;
nL = (m_pSections + j)->nL; nC = (m_pSections + j)->nC; nR
= (m_pSections + j)->nR;
LL = (m_pSections + j)->LL; LC = (m_pSections + j)->LC; LR
= (m_pSections + j)->LR;
CC = (m_pSections + j)->CC; CE = (m_pSections + j)->CE;

RHidraulicos[0] = Zlower;
FGVBiseccionMethod(Zlower, Zupper, Vertices, BL, BR, nL,
nC, nR, LL, LC, LR, CC, CE, Betai, Qi,
Ai, Zsi, Ki, RHidraulicos);

// Reasigna los nuevos valores, para las sigueintes
iteraciones.
Betai = RHidraulicos[2]; // Betai1
Ai = RHidraulicos[3]+ RHidraulicos[4]+ RHidraulicos[5]; //
ALF+AMC+ARF
Zsi = RHidraulicos[1]; // Zsi1;
Ki = RHidraulicos[9]+ RHidraulicos[10]+ RHidraulicos[11];//
KLF+KMC+KRF

acutPrintf(_T("\nZsi = %0.3f"),Zsi);
Poligon.removeAll(); // Eliminar todos lo datos de esta
natriz

// Captura los vrtices de la secciones transversal
calculado
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


222
FGVPlotLevelFreeSurface(Zsi, (m_pSections + j)->IdST, Q ,
Zsi-(m_pSections + j)->HminL, Poligon, &TopWith);

RHidraulicos[15]= TopWith; // Espejo del Agua

// Crea la entidad personalizada PLEDERHydraulicResult
desde ObjectDBX
CPLEDERHydraulicResult *pResultados;
// crear la nueva entidad
try
{
pResultados = new CPLEDERHydraulicResult((m_pSections
+ j)->IdST, Poligon, RHidraulicos,LC, TextHight);
}

catch(const std::bad_alloc&)

{
acdbFail(_T("\nError de asignacin de memoria."));
return RTERROR;
}

AcDbObjectId ID;

// aadirla a la base de datos de AutoCAD
if
(RecursosFGV.AadirEntidadBlockTableRecord((AcDbEntity*)pRe
sultados, ID) != Acad::eOk)
{
if (pResultados)
{
delete pResultados;
}

acdbFail(_T("\nError al aadir la entidad a la Base
de Datos [AadirEntidadBlockTableRecord]."));
return RTERROR;
}


} // for j

return RTNORM;
}


int CPLEDERFlujoPermanente::FGVBiseccionMethod(double Zlower, double
Zupper, AcGePoint3dArray Vertices,long BL, long BR, double nLF,
double nMC, double nRF, double LLF, double LMC, double LRF, double CC,
double CE, double Betai, double Qi, double Ai, double Zsi, double Ki,
double *RHidraulicos)
/*--------------------------------------------------------------------
Ingreso : Zlower = Extremo valor inferior ( Nivel mnimo
del agua)
Zupper = Extremo valor superior
Salida : RHidraulicos[0] = HminL
RHidraulicos[1] = Zsi1 -> Tirante del agua
calculado.
RHidraulicos[2] = Betai1.
RHidraulicos[3] = ALF.
RHidraulicos[4] = AMC.
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


223
RHidraulicos[5] = ARF.
RHidraulicos[6] = PLF.
RHidraulicos[7] = PMC.
RHidraulicos[8] = PRF.
RHidraulicos[9] = KLF.
RHidraulicos[10] = KMC.
RHidraulicos[11] = KRF.
RHidraulicos[12] = Qi.
RHidraulicos[13] = hfi12.
RHidraulicos[14] = hci12.
RHidraulicos[14] = TopWith.
Propsito : Calcula El nivel del agua mediante el mtodo de
Biseccin.
--------------------------------------------------------------------*/
{
double Zmiddle, // Cota promedio entre ambos cotas
estremas de ingreso.
Flower, // Cota inferior (siempre inicia
desde la cota mnima o thalweg)
Fmiddle, // Funcin que se evala con la cota
promedio.
Fupper, // Funcin que se evala con la cota
superior

hfi12, // Prdida por friccin
hci12, // Prdida local
Qi1,
dX;

double ALF, AMC, ARF, Ai1, PLF, PMC, PRF, Pi1, KLF, KMC, KRF,
Ki1, Betai1;
double Zsi1;
Qi1 = Qi; // para este caso

bool NOencontrado = true;
int cont = 0;

while(NOencontrado)
{
cont++;
//acutPrintf(_T("\nIteracion en Biseccion = %d"),cont);
Zmiddle = (Zlower + Zupper)/2;

CST.GetAreaPerimeter(Zmiddle, Vertices, BL, BR, &ALF,
&AMC,&ARF, &PLF, &PMC, &PRF , &Ai1, &Pi1);
FGVGetConveyanceK(ALF, AMC, ARF, PLF, PMC, PRF, nLF, nMC,
nRF, &KLF, &KMC, &KRF , &Ki1);
FGVGetCorrectionFactorBeta(ALF, AMC, ARF, KLF, KMC, KRF,
&Betai1);
FGVGetLenghtDeltaX(LLF, LMC, LRF, ALF, AMC, ARF, &dX);
FGVGetFrictionLosshf(dX, Qi1, Qi, Ki, Ki1, &hfi12);

hci12 = 0.0; // Por el momento.

Fmiddle = FGVFuncionF(Betai1, Betai, Qi1, Qi, Ai1, Ai,
Zmiddle, Zsi, hfi12, hci12);

// Primera verificacin
if (abs(Fmiddle) < TOL)
{
Zsi1 = Zmiddle;
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


224
NOencontrado = false;
acutPrintf(_T("\nLo encontre en 01, en %d
iteraciones"), cont);
}

// Preparando para la siguiente iteracin
Flower = FGVFuncionF(Betai1, Betai, Qi1, Qi, Ai1, Ai,
Zlower , Zsi, hfi12, hci12);
Fupper = FGVFuncionF(Betai1, Betai, Qi1, Qi, Ai1, Ai,
Zupper , Zsi, hfi12, hci12);
if( Fmiddle*Flower < 0.0)
{
Zupper = Zmiddle;
}
else
{
Zlower = Zmiddle;
}
// Segunda verificacin
if (abs(Zupper - Zlower) < TOL)
{
Zsi1 = (Zupper + Zlower)/2;
NOencontrado = false;
acutPrintf(_T("\nLo encontre en 02, en %d
iteraciones"), cont);
}

} // While

// Guardando los resultados en la matriz definida
RHidraulicos[1] = Zsi1;
RHidraulicos[2] = Betai1;
RHidraulicos[3] = ALF;
RHidraulicos[4] = AMC;
RHidraulicos[5] = ARF;
RHidraulicos[6] = PLF;
RHidraulicos[7] = PMC;
RHidraulicos[8] = PRF;
RHidraulicos[9] = KLF;
RHidraulicos[10]= KMC;
RHidraulicos[11]= KRF;
RHidraulicos[12]= Qi;
RHidraulicos[13]= hfi12;
RHidraulicos[14]= hci12;

return RTNORM;
}

int CPLEDERFlujoPermanente::FGVGetConveyanceK(double ALF, double AMC,
double ARF, double PLF, double PMC,
double PRF, double nLF, double nMC,
double nRF, double *KLF, double *KMC, double *KRF,
double *K)
/*--------------------------------------------------------------------
Ingreso : ALF = Area Left Floodplain.
AMC = Area Main Channel.
ARF = Area Right Floodplain.
PLF = Permetro Left Floodplain.
PMC = Permetro Main Channel.
PRF = Permetro Right Floodplain.
nLF = Manning Left.
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


225
nMC = Manning Center.
nRF = Manning Right.

Salida : KLF = Conductividad Left Floodplain.
KMC = Conductividad Main Channel.
KRF = Conductividad Right Floodplain.
K = Conductividad Total
RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Calcula la conductividad
--------------------------------------------------------------------*/
{
double exp53 = 5.0/3.0, exp23 = 2.0/3.0;

*KLF = 0.0; *KMC = 0.0; *KRF = 0.0;

// Clculo de la Conductividad KLF (Izquierdo)
if (PLF != 0.0)
{
*KLF = pow(ALF,exp53)/ (nLF * pow(PLF,exp23));
}

// Clculo de la Conductividad KMC (Principal)
if (PMC != 0.0)
{
*KMC = pow(AMC,exp53)/ (nMC * pow(PMC,exp23));
}

// Clculo de la Conductividad KRF (Derecha)
if (PRF != 0.0)
{
*KRF = pow(ARF,exp53)/ (nRF * pow(PRF,exp23));
}

// Conductividad Total (K)
*K = *KLF + *KMC + *KRF;

return RTNORM;
}

int CPLEDERFlujoPermanente::FGVGetCorrectionFactorBeta(double ALF,
double AMC, double ARF, double KLF,
double KMC, double KRF, double *Betai)
/*--------------------------------------------------------------------
Ingreso : ALF = Area Left Floodplain.
AMC = Area Main Channel.
ARF = Area Right Floodplain.
KLF = Conductividad Left Floodplain.
KMC = Conductividad Main Channel.
KRF = Conductividad Right Floodplain.

Salida : Betai = Factor decorrecin Beta (ver la teora)
RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Calcula El factor de correcin Beta
--------------------------------------------------------------------*/

{
double BetaLF = 0.0, BetaMC = 0.0, BetaRF = 0.0,
Ai = ALF + AMC + ARF,
Ki = KLF + KMC + KRF;
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


226

// (Izquierdo)
if (ALF != 0.0)
{
BetaLF = pow(KLF,3.0) / pow(ALF,2.0);
}

// (Principal)
if (AMC != 0.0)
{
BetaMC = pow(KMC,3.0) / pow(AMC,2.0);
}

// (Derecha)
if (ARF != 0.0)
{
BetaRF = pow(KRF,3.0) / pow(ARF,2.0);
}

*Betai = pow(Ai,2.0)/pow(Ki,3.0) * (BetaLF + BetaMC + BetaRF);

return RTNORM;
}

int CPLEDERFlujoPermanente::FGVGetLenghtDeltaX(double LLF, double LMC,
double LRF, double ALF, double AMC,

double ARF, double *dX)
/*--------------------------------------------------------------------
Ingreso : LLF = Longitud del banco izquierdo (Left bank
length ).
LMC = Longitud del canal central (Main Channel
length).
LRF = Longitud del banco derecho (Right banl
length)
ALF = Area Left Floodplain.
AMC = Area Main Channel.
ARF = Area Right Floodplain.
Salida : dX = Es la distancia ponderada de la seccin
transversal
RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Calcula la distancia ponderada entre una seccin
transversal. Promedia bajo el area de cada tramo (tres tramos) bajo el
rea total del flujo.
--------------------------------------------------------------------*/
{
*dX = (LLF*ALF + LMC*AMC + LRF*ARF) /(ALF + AMC + ARF);

return RTNORM;
}


int CPLEDERFlujoPermanente::FGVGetFrictionLosshf(double dX, double
Qi1, double Qi, double Ki,

double Ki1, double *hfi12)
/*--------------------------------------------------------------------
Ingreso : dX = Longitud ponderado para el tramo.
Qi1 = Descarga del flujo en la estacin i+1.
Qi = Descarga del flujo en la estacin i.
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


227
Ki1 = Factor de conductividad en la estacin i+1.
Ki = Factor de conductividad en la estacin i.
Salida : hfi12 = La prdida de friccin calculado para este
tramo.
RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Calcula la prdida de friccin en el tramo i-i+1 (hf12)

--------------------------------------------------------------------*/
{

switch (m_MetodoSf)
{
case 0: // Media Aritmtica.
{
*hfi12 = 0.5*dX*( Qi1*abs(Qi1)/(Ki1*Ki1)
+ Qi*abs(Qi)/(Ki*Ki));
break;
}

case 1: // Media Armnica.
{
*hfi12 = 2.0*dX/(Ki1*Ki1 /(Qi1*abs(Qi1))
+ Ki*Ki /(Qi*abs(Qi)));
break;
}

case 2: // Ecuacin de Factor de transporte Medio.
{
*hfi12 = dX*pow((Qi1 + Qi)/(Ki1 +
Ki),2.0);
break;
}

case 3: // Media Geomtrica.
{
*hfi12 = dX *pow(
Qi1*abs(Qi1)*Qi*abs(Qi)/(Ki1*Ki1 + Ki*Ki),0.5);
break;
}
default:
acutPrintf(_T("\nFuera de Rango"));

} //switch (m_MetodoSf))
return RTNORM;
}


float CPLEDERFlujoPermanente::FGVFuncionF(double Bi1, double Bi,
double Qi1, double Qi, double Ai1,
double
Ai, double Zsi1, double Zsi, double hfi12, double hci12)
/*--------------------------------------------------------------------
Ingreso : Bi1 = Factor de Correcin Beta en la estacin i+1.
Bi = Factor de Correcin Beta en la estacin i.
Qi1 = Descarga del flujo en la estacin i+1.
Qi = Descarga del flujo en la estacin i
Ai1 = Area de la seccin transversal en la estacin
i+1.
Ai =Area de la seccin transv. en la estacin i.
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


228
Zi1 = Cota del nivel de agua en la estacin i+1.
(valor a encontrar)
Zi = Cota del nivel de agua en la estacin i.
hfi12 = Prdida por friccin en el tramo i+1/2.
hci12 = Prdida Local en el tramo i+1/2.
Salida : F = Funcin del Flujo gradualmente variado.
Propsito : Calcula la funcin F para la iteracin utilizando el
mtodo de Biseccin.
--------------------------------------------------------------------*/
{
double F;

F = Bi1*Qi1*Qi1/(2*g*Ai1*Ai1) - Bi*Qi*Qi/(2*g*Ai*Ai) + Zsi1 -Zsi
+ hfi12 + hci12;

return F;
}

int CPLEDERFlujoPermanente::FGVPlotLevelFreeSurface(double Zsi, double
IdST, double Q, double h, AcGePoint2dArray& CSPoligon, double
*TopWith)
/*--------------------------------------------------------------------
Ingreso : Zis = Cota del nivel de agua en la estacin i.
IdST = Id de la seccin transversal
Q = Descarga del flujo (m3/s)
h = Tirante (m)


Salida : CSPoligon = Array para almacenar los datos del poligono o
seccin hidrulico.
TopWith = Espejo de agua
RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Dibuja los niveles de la superficie libre de las
secciones transversales
--------------------------------------------------------------------*/
{
// Inicializa las variables de sistema.
RecursosFGV.InicializarVariables();

// crear las capas del proyecto
if (RecursosFGV.PlederCapas() != RTNORM)
{
RecursosFGV.RestaurarVariables();
return RTERROR;
}

double X1, Y1, LL, LC, LR, NL, NC, NR, CC, CE;
long BL, BR, nVST;
double CxL, CxG, CyG, Tw =0.0;
TCHAR str[100] , strQ[100], strh[100];
AcGePoint2dArray GlobalVertices;
AcGePoint2dArray LocalVertices;
ads_point p1, p2, p3; p1[Z] = p2[Z] = p3[Z]= 0.0;

// Coger los atributos de la S.T. desde su id
CST.GetIdCrossSectionsAttributes(IdST, &nVST, LocalVertices,
GlobalVertices, &LL, &LC, &LR, &NL, &NC,
&NR, &BL, &BR,
&CC, &CE);
int j,k;
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


229

AcGePoint2dArray LVertices; // Variable
local para reasignar los vrtices.
AcGePoint2dArray GVertices; // Variable
Global para reasignar los vrtices.
AcGePoint2d Vertex;

// Traslada los valores hacia la nueva lista YY, XX
for (k = 0; k < LocalVertices.length(); k++)
{
Vertex[X] = LocalVertices[k].x;
Vertex[Y] = LocalVertices[k].y;

LVertices.append(Vertex);

Vertex[X] = GlobalVertices[k].x;
Vertex[Y] = GlobalVertices[k].y;

GVertices.append(Vertex);
}

bool InundIzquierdo = false; // Por defecto NO Existe Inundacin
bool InundDerecho = false; // Por defecto NO Existe Inundacin

// Son condiciones para agregar vrtices si el tirante es mayor
a los
// vrtices de las S. T. (casos de inundaciones)

// Inundacin Margen Izquierda?
if (Zsi > LocalVertices[0].y)
{
LVertices.removeAll();
GVertices.removeAll();

Vertex[X] = LocalVertices[0].x;
Vertex[Y] = Zsi;

LVertices.append(Vertex);

Vertex[X] = GlobalVertices[0].x;
Vertex[Y] = GlobalVertices[0].y + (Zsi -
LocalVertices[0].y);

GVertices.append(Vertex);

for (k =0; k < LocalVertices.length(); k++)
{
Vertex[X] = LocalVertices[k].x;
Vertex[Y] = LocalVertices[k].y;

LVertices.append(Vertex);

Vertex[X] = GlobalVertices[k].x;
Vertex[Y] = GlobalVertices[k].y;

GVertices.append(Vertex);
}
InundIzquierdo = true;
}

// Inundacin Margen Derecha?
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


230
if (Zsi > LocalVertices[LocalVertices.length()-1].y)
{
Vertex[X] = LocalVertices[LocalVertices.length()-1].x;
Vertex[Y] = Zsi;

LVertices.append(Vertex);

Vertex[X] = GlobalVertices[GlobalVertices.length()-1].x;
Vertex[Y] = GlobalVertices[GlobalVertices.length()-1].y +
(Zsi - LocalVertices[0].y);

GVertices.append(Vertex);

InundDerecho = true;
}

// Buscar los vrtices (interpolando) recorrido con el mismo m
todo para el rea
// Inicio del recorrido de los vrtices.
for (int j = 0; j < LVertices.length()-1; j++)
{

// Condicin para el extremo izquierdo
if ((Zsi <= LVertices[j].y) && (Zsi >= LVertices[j+1].y))
{
// Coordenada X En el extremo izquierdo
CxL = LVertices[j+1].x - ((LVertices[j+1].x -
LVertices[j].x )/(LVertices[j].y - LVertices[j+1].y))*(Zsi -
LVertices[j+1].y);
// Interpolacin simple.
if(InundIzquierdo)
{
CyG = GVertices[0].y;
CxG = GVertices[0].x;
}
else
{
CyG = GVertices[j+1].y + ((GVertices[j].y -
GVertices[j+1].y)/(LVertices[j].y - LVertices[j+1].y))*(Zsi-
LVertices[j+1].y);
CxG = GVertices[j+1].x + ((GVertices[j].x -
GVertices[j+1].x)/(LVertices[j].x - LVertices[j+1].x))*(CxL-
LVertices[j+1].x);
}
Vertex[X] = p1[X] = CxG; Vertex[Y] = p1[Y] = CyG;

CSPoligon.append(Vertex);

bool condicion = true;
while (condicion)
{
j++;

// Condicin para los trapecios.
//if (LVertices[j+1].y <= Zsi)
//{
Vertex[X] = GVertices[j].x; Vertex[Y] =
GVertices[j].y;
CSPoligon.append(Vertex);
//}

Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


231

// Condicin para el extremo derecho.
if (LVertices[j+1].y >= Zsi)
{

// Coordenada X En el extremo derecho
CxL = LVertices[j].x + ((LVertices[j+1].x
- LVertices[j].x )/(LVertices[j+1].y - LVertices[j].y))*(Zsi -
LVertices[j].y);
// Interpolacin simple.
if(InundDerecho)
{
CxG = GVertices[GVertices.length()-
1].x;
}
else
{
CxG = GVertices[j].x +
((GVertices[j+1].x - GVertices[j].x)/(LVertices[j+1].x -
LVertices[j].x))*(CxL- LVertices[j].x);
}
Vertex[X] = p2[X] = CxG; Vertex[Y] =
p2[Y] = p1[Y];
CSPoligon.append(Vertex);
}

if (LVertices[j+1].y < Zsi) {condicion = true;
}
else {condicion = false;}


}//While

//RecursosFGV.DibujarLinea(p1,p2,PLEDER_CAPA_NIVELES);

//calcula el ancho o espejo de agua
Tw = Tw + acutDistance(p1,p2);

// Inserta el texto (caudal)
p3[X] = (p1[X] + p2[X])/2;
p3[Y] = p1[Y] + m_htexto/1.5;
acdbRToS(Q, 2, 2, strQ); //Concatena el texto
con 2 decimales.
acdbRToS(h, 2, 2, strh);
_stprintf(str, _T("h:%s%s, Q:%s%s" ), strh, _T("m"),
strQ, _T("m3/s"));
//RecursosFGV.DibujarTexto(p3, PLEDER_CAPA_NIVELES_TX, str, m_htexto,
false, 1);
} //if
}//For j

*TopWith = Tw;
RecursosFGV.RestaurarVariables();

return RTNORM;
}


void
CPLEDERFlujoPermanente::FreeAllFGVResultadosBufer(FGVResultadosBufer
*theFirstResult)
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


232
/*--------------------------------------------------------------------
Ingreso : theFirstResult = puntero al primer elemento del buffer.
Salida : Vaco.
Propsito : Llamar a esta funcin para liberar un buffer
FGVResultadosBufer
--------------------------------------------------------------------*/
{
if (!theFirstResult)
return;

FGVResultadosBufer *pResult = theFirstResult;
FGVResultadosBufer *pResulNext = NULL;

// liberar la ristra
while (pResulNext = pResult->pRnext)
{
delete pResult;
pResult = pResulNext;
}

delete pResult;

theFirstResult = NULL;
}


PLEDERFlujoPermanenteDlg.cpp

// PLEDERFlujoPermanenteDlg.cpp: archivo de implementacin
//

#include "stdafx.h"
#include "PLEDERFlujoPermanenteDlg.h"

// Cuadro de dilogo de CPLEDERFlujoPermatenteDlg

IMPLEMENT_DYNAMIC(CPLEDERFlujoPermanenteDlg, CDialog)

CPLEDERFlujoPermanenteDlg::CPLEDERFlujoPermanenteDlg(CWnd* pParent
/*=NULL*/)
: CAdUiDialog(CPLEDERFlujoPermanenteDlg::IDD, pParent)
{
m_TipoFlujo = 0;
m_Ydowstream = _T("1.25");
m_Yupstream = _T("1.30");
m_Caudal = _T("100.00");
}

CPLEDERFlujoPermanenteDlg::~CPLEDERFlujoPermanenteDlg()
{
}

void CPLEDERFlujoPermanenteDlg::DoDataExchange(CDataExchange* pDX)
{
CAdUiDialog::DoDataExchange(pDX);

// Cajas de Texto.
DDX_Control(pDX, IDC_EDIT_TDOW, m_Edit_Ydowstream);
DDX_Control(pDX, IDC_EDIT_TUPS, m_Edit_Yupstream);
DDX_Control(pDX, IDC_EDIT_CAUDAL, m_Edit_Caudal);

Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


233
// Radio
DDX_Radio(pDX, IDC_RADIO_FSUB, m_TipoFlujo);
}

BEGIN_MESSAGE_MAP(CPLEDERFlujoPermanenteDlg, CAdUiDialog)

// Radios (cambios en los Radios)
ON_BN_CLICKED(IDC_RADIO_FSUB, OnRadioFlujoSubcritico)
ON_BN_CLICKED(IDC_RADIO_FSUP, OnRadioFlujoSupercritico)
ON_BN_CLICKED(IDC_RADIO_FMIX, OnRadioFlujoMixto)

ON_BN_CLICKED(IDOK, &CPLEDERFlujoPermanenteDlg::OnBnClickedOk)
END_MESSAGE_MAP()

// Controladores de mensajes de CPLEDERFlujoPermanenteDlg
BOOL CPLEDERFlujoPermanenteDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Activar radio Fjujo Supcrtico
CButton *pTipoFlujo;
pTipoFlujo = (CButton *)GetDlgItem(IDC_RADIO_FSUB);
pTipoFlujo->SetCheck(1);

// Activa y desactiva para f. Sub por defecto
m_Edit_Ydowstream.EnableWindow(1);
m_Edit_Yupstream.EnableWindow(0);
m_TipoFlujo = 0;

// Inicializa Cajas de texto
m_Edit_Ydowstream.SetWindowText(m_Ydowstream);
m_Edit_Yupstream.SetWindowText(m_Yupstream);
m_Edit_Caudal.SetWindowText(m_Caudal);

return TRUE;
}

void CPLEDERFlujoPermanenteDlg::OnRadioFlujoSubcritico()
{
// Activa y desactiva las casillas de la ventana
m_Edit_Ydowstream.EnableWindow(1);
m_Edit_Yupstream.EnableWindow(0);
m_TipoFlujo = 0;
}

void CPLEDERFlujoPermanenteDlg::OnRadioFlujoSupercritico()
{
// Activa las casillas de la ventana
m_Edit_Ydowstream.EnableWindow(0);
m_Edit_Yupstream.EnableWindow(1);
m_TipoFlujo = 1;
}

void CPLEDERFlujoPermanenteDlg::OnRadioFlujoMixto()
{
// Activa las casillas de la ventana
m_Edit_Ydowstream.EnableWindow(1);
m_Edit_Yupstream.EnableWindow(1);
m_TipoFlujo = 2;
}

Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


234
void CPLEDERFlujoPermanenteDlg::OnBnClickedOk()
{
// TODO : Add extra validation here
m_Edit_Ydowstream.GetWindowText(m_Ydowstream);
m_Edit_Yupstream.GetWindowText(m_Yupstream);
m_Edit_Caudal.GetWindowText(m_Caudal);

CDialog::OnOK();
}


PLEDERHidraBuffer.cpp

#include "StdAfx.h"
#include "PLEDERHidraBuffer.h"

/*Clase CrossSectionsBufer: Bufer para seciones transversales que se
desaloja mediante la funcin FreeAllCrossSections()*/
CrossSectionsBufer::CrossSectionsBufer()
{
nbnext = NULL;

m_IdST = 0;
m_nVST = 0;

}

CrossSectionsBufer::CrossSectionsBufer(AcGePoint2d P1, double X1,
double Y1, double IdST, long nVST, AcGePoint2dArray Vertice,
double HminG,
double HminL, double LL, double LC, double LR, double NL, double NC,
double NR,
long BL, long BR, double CC, double CE)
{
nbnext = NULL;

m_P1[X] = P1[X]; m_P1[Y] = P1[Y];
m_X1 = X1;
m_Y1 = Y1;

m_HminG = HminG;
m_HminL = HminL;

m_IdST = IdST;
m_nVST = nVST;

m_LL = LL;
m_LC = LC;
m_LR = LR;

m_NL = NL;
m_NC = NC;
m_NR = NR;

m_BL = BL;
m_BR = BR;

m_CC = CC;
m_CE = CE;

// Vrtices globales
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


235
for(int i=0; i <m_nVST; i++)
{
m_GlobalVertice[i].x = Vertice[i].x;
m_GlobalVertice[i].y = Vertice[i].y;
m_GlobalVertice[i].z = 0.0;

}

ads_point v1;

// Vrtices locales
for(int i=0; i <m_nVST; i++)
{
v1[X]= X1 + (m_GlobalVertice[i].x - P1[X]); // Suma la
posicin inicial X + la distancia X
v1[Y]= Y1 - (P1[Y] - m_GlobalVertice[i].y); // Resta la
posicin inicial Y - la distancia Y

m_LocalVertice[i].x = v1[X];
m_LocalVertice[i].y = v1[Y];
m_LocalVertice[i].z = 0.0;

X1 = v1[X];
Y1 = v1[Y];
P1[X]= m_GlobalVertice[i].x;
P1[Y]= m_GlobalVertice[i].y;
}
}


CrossSectionsBufer::~CrossSectionsBufer()
{

}

//-------------------------------------------------------------------
/*Clase CrossSectionsSocavacionBufer: Bufer para seciones
transversales que se desaloja mediante la funcin
FreeAllCrossSectionsSocavacion()*/
CrossSectionsSocavacionBufer::CrossSectionsSocavacionBufer()
{
nbnext = NULL;
}

CrossSectionsSocavacionBufer::CrossSectionsSocavacionBufer(double
IdST, int Material, int CoefProb, double CoefMaterial)
{
nbnext = NULL;

m_IdST = IdST;
m_Material = Material;
m_CoefMaterial = CoefMaterial;
m_CoefProb = CoefProb;
}

CrossSectionsSocavacionBufer::~CrossSectionsSocavacionBufer()
{

}


Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


236
//-------------------------------------------------------------------
/*Clase FGVResultadosBufer: Bufer los resultados que se desaloja
mediante la funcin FreeAllResultados()*/
FGVResultadosBufer::FGVResultadosBufer()
{
pRnext = NULL;
}


FGVResultadosBufer::FGVResultadosBufer(int nV, AcGePoint2dArray
Vertice, double IdST, double h, double Zs, double Beta, double ALF,
double AMC,
double ARF,
double PLF, double PMC, double PRF, double KLF, double KMC,
double KRF,
double Q, double hf12, double hc12, double TopW, double LMC)
{
pRnext = NULL;

m_IdST = IdST;
m_nV = nV;
m_h = h; // Tirante.
m_Zs = Zs; // Cota Tirante.
m_Beta = Beta; // Coeciente de correccin.
m_ALF = ALF; // Area llanura Izquierda.
m_AMC = AMC; // Area Canal central.
m_ARF = ARF; // Area llanura derecha.
m_PLF = PLF; // Permetro llanura izquierdo.
m_PMC = PMC; // Permetro canal central.
m_PRF = PRF; // Permetro llanura derecho
m_KLF = KLF; // Conductividad llanura izquierdo.
m_KMC = KMC; // Conductividad canal central.
m_KRF = KRF; // Conductividad llanura derecho
m_Q = Q ; // Descarga del flujo.
m_hf12 = hf12; // Prdida por firccin.
m_hc12 = hc12; // Prdida local.
m_TopW = TopW; // Espejo de agua
m_LMC = LMC; // Longitud del canal central.

// Vrtices Calculados
for(int i = 0; i < m_nV; i++)
{
m_ResultVertice[i].x = Vertice[i].x;
m_ResultVertice[i].y = Vertice[i].y;
m_ResultVertice[i].z = 0.0;
//acutPrintf(_T("\nm_ResultVertice[%d], X = %0.3f , Y =
%0.3f"), i, m_ResultVertice[i].x, m_ResultVertice[i].y );
}


}

// Destructor
FGVResultadosBufer::~FGVResultadosBufer()
{

}

//-------------------------------------------------------------------
SeccionesBufer::SeccionesBufer()
{
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


237
Siguiente = NULL;
}
//Constructor que inicializa a CoorXX, CoordYY, ns y siguiente = NULL
SeccionesBufer::SeccionesBufer(int nss, double CoordXX, double
CoordYY, double Coefmanning)
{
Siguiente = NULL;

ns = nss;
CoordX = CoordXX;
CoordY = CoordYY;
manning = Coefmanning;
}

//Destructor
SeccionesBufer::~SeccionesBufer() {}

// Obtiene una copia del atributo Siguiente.
SeccionesBufer* SeccionesBufer::ObtenerSiguiente()
{
return Siguiente;
}

//Pone el atributo Siguiente a p
void SeccionesBufer::PonerSiguiente(SeccionesBufer *p)
{
Siguiente = p;
}


PerfilesBufer::PerfilesBufer()
{
SiguienteP = NULL;
}
PerfilesBufer::PerfilesBufer(int nST, ads_point v0, ads_point v1)
{
SiguienteP = NULL;

start[X] = v0[X];
start[Y] = v0[Y];
start[Z] = v0[Z];

end[X] = v1[X];
end[Y] = v1[Y];
end[Z] = v1[Z];

}
PerfilesBufer::~PerfilesBufer()
{

}



PLEDERHidraSecTrasnv.cpp

#include "StdAfx.h"
#include "PLEDERHidraSecTrasnv.h"
#include "PLEDERHidraBuffer.h"
#include "PLEDERRecursosCad.h"

Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


238
#include <iostream>
#include <fstream> // Para exportar atributos
#include <cstdlib>
#include <new>

//Constructor
HidraSecTrasnv::HidraSecTrasnv(void)
{
// inicializar la clase
pPrimerST = NULL;
}

//Destructor
HidraSecTrasnv::~HidraSecTrasnv(void)
{
LiberarBufferSeccionesTransv();
}

int HidraSecTrasnv::NumeroVerticesPolilinea(ads_name nombrep, long
*nVST)
/*--------------------------------------------------------------------
-------------------
Ingreso : nombrep = Nombre de la entidad polyline.

Salida : Nmero de Vrtices de una polilinea.
RTCAN si la entidad no es una polyline o
RTERROR en otro caso.
Propsito : Retorna EL Nmero de Vrtices de una polilinea
----------------------------------------------------------------------
-----------------*/

{
unsigned int k, numVerts;
AcDbObjectId ID;
AcDbEntity *pEnt;
*nVST = 0;

// cambiar el nombre por el ObjectId
if (acdbGetObjectId(ID, nombrep) != Acad::eOk)
{
acdbFail(_T("\nError al tomar el ObjectId de la entidad
[acdbGetObjectId]."));
return RTERROR;
}

// abrir el objeto para lectura
if (acdbOpenObject(pEnt, ID, AcDb::kForRead) != Acad::eOk)
{
acdbFail(_T("\nError al abrir el Objeto "));
return RTERROR;
}

// chequear el tipo de objeto
if (pEnt->isKindOf(AcDbPolyline::desc()) != Adesk::kTrue)
{
pEnt->close();
acdbFail(_T("\nTipo de entidad inesperada "));
return RTCAN;
}

AcDbPolyline *pPolyline = (AcDbPolyline*)pEnt;
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


239

*nVST = pPolyline->numVerts(); // Toma el nmero de vrtices de
la polyline
pPolyline->close();

return RTNORM;
}

int HidraSecTrasnv::LeerVerticesPolilineaConsola(ads_name nombrep,
ads_point p1,
double X1,
double Y1, int contador)
/*--------------------------------------------------------------------
-------------------
Ingreso : nombrep = Nombre de la entidad polyline.
p1 = Punto de referencia para
relacionar las coordenadas.
X1 = Distancia X de la ST
Y1 = Cota de la ST,
contador = Para el conteo de nmero de
secciones transversales (ST).
para este caso no se da
uso.
Salida : RTNORM si no se produce ningn error.
RTCAN si la entidad no es una polyline o
RTERROR en otro caso.
Propsito : Almacena las coordenadas de una polilinea (ST) en
la consola con con
transformaciones de coordenadas locales.
----------------------------------------------------------------------
-----------------*/

{
ads_point v1, v2 ;
v2[Z] = 0.0;
AcGePoint2d pt ;
unsigned int k, numVerts;
long numof = 0;
TCHAR str[256], str2[256];
double htexto = 0.2;
double radio = 0.2;

AcDbObjectId ID;
AcDbEntity *pEnt;
CRecursosCad Cad;

// cambiar el nombre por el ObjectId
if (acdbGetObjectId(ID, nombrep) != Acad::eOk)
{
acdbFail(_T("\nError al tomar el ObjectId de la entidad
[acdbGetObjectId]."));
return RTERROR;
}

// abrir el objeto para lectura
if (acdbOpenObject(pEnt, ID, AcDb::kForRead) != Acad::eOk)
{

acdbFail(_T("\nError al abrir el Objeto "));
return RTERROR;
}
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


240

// chequear el tipo de objeto
if (pEnt->isKindOf(AcDbPolyline::desc()) != Adesk::kTrue)
{
pEnt->close();
acdbFail(_T("\nTipo de entidad inesperada "));
return RTCAN;
}

AcDbPolyline *pPolyline = (AcDbPolyline*)pEnt;

// chequear si la Polyline tiene elevacin cero
if (pPolyline->elevation() != 0)
{
pPolyline->close();
acutPrintf(_T("\nLa polyline no tiene elevacin 0."));
return RTCAN;
}

numVerts = pPolyline->numVerts(); // Toma el nmero de vrtices
de la polyline

if (numVerts <= 2)
{
pPolyline->close();
acdbFail(_T("\nPolyline no vlida "));
return RTERROR;
}

//Accede a los vrtices de la polilinea
for (k = 0; k < numVerts; k++)
{
// Coge la coordenada en el punto pt
pPolyline->getPointAt(k,pt) ;

v1[X]= X1 + (pt[X] - p1[X]); // Suma la posicin inicial X
+ la distancia X
v1[Y]= Y1 - (p1[Y] - pt[Y]); // Resta la posicin inicial Y
- la distancia Y

Cad.DibujarCirculos(pt[X], pt[Y], 0.00,
PLEDER_CAPA_VERTICES, radio);

v2[X]=pt[X];
v2[Y]=pt[Y]+ radio + htexto/2; //Configura el punto a ser
insertado el texto
acdbRToS(k+1, 2, 0, str); //Concatena el texto
con 0 decimales
Cad.DibujarTexto(v2, PLEDER_CAPA_VERTICES_TX, str, htexto,
false, 1);

acutPrintf (_T("\n%d %0.3f %0.3f"), k+1, v1[X], v1[Y] );

X1= v1[X];
Y1= v1[Y];

p1[X]= pt[X];
p1[Y]= pt[Y];

numof++;

Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


241
} // for k

pPolyline->close();

return RTNORM;
}


int HidraSecTrasnv::LeerVerticesPolilineaLista(ads_name nombrep,
ads_point p1,
double X1,
double Y1, double* CX, double* CY)
/*--------------------------------------------------------------------
Ingreso : nombrep = Nombre de la entidad polyline.
p1 = Punto de referencia para relacionar las
coordenadas.
X1 = Distancia X de la ST
Y1 = Cota de la ST,

Salida : CX = Lista de las coordenadas X
CY = Lista de las coordenadas Y
RTNORM si no se produce ningn error.
RTCAN si la entidad no es una polyline o
RTERROR en otro caso.
Propsito : Almacena las coordenadas de una polilinea (ST) en listas
con transformaciones de coordenadas locales.
-------------------------------------------------------------------*/

{
ads_point v1, v2 ;
v2[Z] = 0.0;
AcGePoint2d pt ;
unsigned int k, numVerts;
long numof = 0;
TCHAR str[256], str2[256];
double htexto = 0.2;
double radio = 0.2;

AcDbObjectId ID;
AcDbEntity *pEnt;
CRecursosCad Cad;

// cambiar el nombre por el ObjectId
if (acdbGetObjectId(ID, nombrep) != Acad::eOk)
{
acdbFail(_T("\nError al tomar el ObjectId de la entidad
[acdbGetObjectId]."));
return RTERROR;
}

// abrir el objeto para lectura
if (acdbOpenObject(pEnt, ID, AcDb::kForRead) != Acad::eOk)
{

acdbFail(_T("\nError al abrir el Objeto "));
return RTERROR;
}

// chequear el tipo de objeto
if (pEnt->isKindOf(AcDbPolyline::desc()) != Adesk::kTrue)
{
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


242
pEnt->close();
acdbFail(_T("\nTipo de entidad inesperada "));
return RTCAN;
}

AcDbPolyline *pPolyline = (AcDbPolyline*)pEnt;

// chequear si la Polyline tiene elevacin cero
if (pPolyline->elevation() != 0)
{
pPolyline->close();
acutPrintf(_T("\nLa polyline no tiene elevacin 0."));
return RTCAN;
}

numVerts = pPolyline->numVerts(); // Toma el nmero de vrtices
de la polyline

if (numVerts <= 2)
{
pPolyline->close();
acdbFail(_T("\nPolyline no vlida "));
return RTERROR;
}

//Accede a los vrtices de la polilinea
for (k = 0; k < numVerts; k++)
{
// Coge la coordenada en el punto pt
pPolyline->getPointAt(k,pt) ;

v1[X]= X1 + (pt[X] - p1[X]); // Suma la posicin inicial X
+ la distancia X
v1[Y]= Y1 - (p1[Y] - pt[Y]); // Resta la posicin inicial Y
- la distancia Y

Cad.DibujarCirculos(pt[X], pt[Y], 0.00,
PLEDER_CAPA_VERTICES, radio);

v2[X]=pt[X];
v2[Y]=pt[Y]+ radio + htexto/2; //Configura el punto a ser
insertado el texto
acdbRToS(k+1, 2, 0, str); //Concatena el texto
con 0 decimales
Cad.DibujarTexto(v2, PLEDER_CAPA_VERTICES_TX, str, htexto,
false, 1);

//acutPrintf (_T("\n%d %0.3f %0.3f"), k+1, v1[X], v1[Y]
);
CX[k+1] = v1[X];
CY[k+1] = v1[Y];

X1= v1[X];
Y1= v1[Y];

p1[X]= pt[X];
p1[Y]= pt[Y];

numof++;

} // for k
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


243

pPolyline->close();

return RTNORM;
}

int HidraSecTrasnv::LeerVerticesPolilinea(ads_name nombrep, double*
CX, double* CY)
/*--------------------------------------------------------------------
Ingreso : nombrep = Nombre de la entidad polyline.
p1 = Punto de referencia para relacionar las
coordenadas.
Salida : CX = Lista de las coordenadas X
CY = Lista de las coordenadas Y
RTNORM si no se produce ningn error.
RTCAN si la entidad no es una polyline o
RTERROR en otro caso.
Propsito : Almacena las coordenadas de una polilinea (ST) en listas
sin transformaciones de coordenadas.
--------------------------------------------------------------------*/

{
ads_point v1, v2 ;
v2[Z] = 0.0;
AcGePoint2d pt ;
unsigned int k, numVerts;

AcDbObjectId ID;
AcDbEntity *pEnt;
CRecursosCad Cad;

// cambiar el nombre por el ObjectId
if (acdbGetObjectId(ID, nombrep) != Acad::eOk)
{
acdbFail(_T("\nError al tomar el ObjectId de la entidad
[acdbGetObjectId]."));
return RTERROR;
}

// abrir el objeto para lectura
if (acdbOpenObject(pEnt, ID, AcDb::kForRead) != Acad::eOk)
{

acdbFail(_T("\nError al abrir el Objeto "));
return RTERROR;
}

// chequear el tipo de objeto
if (pEnt->isKindOf(AcDbPolyline::desc()) != Adesk::kTrue)
{
pEnt->close();
acdbFail(_T("\nTipo de entidad inesperada "));
return RTCAN;
}

AcDbPolyline *pPolyline = (AcDbPolyline*)pEnt;

// chequear si la Polyline tiene elevacin cero
if (pPolyline->elevation() != 0)
{
pPolyline->close();
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


244
acutPrintf(_T("\nLa polyline no tiene elevacin 0."));
return RTCAN;
}

numVerts = pPolyline->numVerts(); // Toma el nmero de vrtices
de la polyline

if (numVerts <= 2)
{
pPolyline->close();
acdbFail(_T("\nPolyline no vlida "));
return RTERROR;
}

//Accede a los vrtices de la polilinea
for (k = 0; k < numVerts; k++)
{
// Coge la coordenada en el punto pt
pPolyline->getPointAt(k,pt) ;

CX[k+1] = pt[X];
CY[k+1] = pt[Y];

} // for k

pPolyline->close();

return RTNORM;
}

int HidraSecTrasnv::ImportarSeccionesTransversales(const TCHAR
*pNombreArchivo, long *NumeroVertST )
/*-------------------------------------------------------------------
Ingreso : pNombreArchivo = Puntero a una zero terminated string
con el nombre del archivo.
NumeroVertST = Numero de vrtices de las secciones
transversales.
Salida : RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Importar las Secciones Transversales desde un archivo.
Guarda los datos en el Buffer SeccionesBufer, para luego llamar desde
cualquier funcin.
--------------------------------------------------------------------*/
{
std::ifstream infile;
char *buffer = NULL;
char *token = NULL;
char seps[] = PUNFILESEP;
int n;
long np = 0;
double x=0, y=0, manning=0;

if (!pNombreArchivo)
{
acdbFail(_T("\nArgumento de funcin no vlido
[ImportarSeccionesTransversales]."));
return RTERROR;
}

acutPrintf(_T("\nLeyendo el fichero ascii ...\n"));

Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


245
// abrir el fichero para lectura
infile.open(pNombreArchivo);

if (infile.fail() != 0)
{
*NumeroVertST = 0;
acdbFail(_T("\nError de E/S al abrir el fichero
[ImportarSeccionesTransversales][open]."));
return RTERROR;
}

// crear un buffer para la lectura del fichero
buffer = (char*)acad_malloc(GETLINEMAXBUFF * sizeof(char));

if (!buffer)
{
*NumeroVertST = 0;
infile.close();
acdbFail(_T("\nError de asignacin de memoria [Importar
ST][buffer]."));
return RTERROR;
}

// tomar primero el nmero de puntos que contiene el fichero
// para poder valorar la longitud de la barra de progeso

while (!infile.eof())
{
infile.getline(buffer, GETLINEMAXBUFF, '\n');

if (infile.eof())
{
// limpiar el flag eof
infile.clear();
break;
}
np++;
}

// mover el puntero al principio del fichero
infile.seekg(0, std::ios_base::beg);

// colocar una barra de progreso
acedSetStatusBarProgressMeter(_T("Insertando las secciones
transversales: "), 0, (int)np);

np = 0;

// crear el buffer y aadir el primer Vrtice como puntero
try
{
pPrimerST = new SeccionesBufer();
}

catch(const std::bad_alloc&)
{
acedRestoreStatusBar();
acdbFail(_T("\nError de asignacin de memoria [Importar
ST][pPrimerST]."));
return RTERROR;
}
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


246

SeccionesBufer *nST, *nbprevious = pPrimerST;

// recorrer el fichero
while (!infile.eof())
{
// leer una lnea del fichero
infile.getline(buffer, GETLINEMAXBUFF, '\n');

if (infile.eof())
break;

// separar los campos
token = ::strtok(buffer, seps);

if (!token)
{
*NumeroVertST = np;
infile.close();
acad_free(buffer);
acedRestoreStatusBar();
acdbFail(_T("\nFichero de Secciones Trasnv. No vlido
[Importar ST]"));
return RTERROR;
}

n = atoi(token);

// Coordenada x
token = ::strtok(NULL, seps);
if (!token)
{
*NumeroVertST = np;
infile.close();
acad_free(buffer);
acedRestoreStatusBar();
acdbFail(_T("\nFichero de Secciones Trasnv. No vlido
-n- [Importar ST]"));
return RTERROR;
}

x = atof(token);

// Coordenada y o Cota
token = ::strtok(NULL, seps);
if (!token)
{
*NumeroVertST = np;
infile.close();
acad_free(buffer);
acedRestoreStatusBar();
acdbFail(_T("\nFichero de Secciones Trasnv. No vlido
-x- [Importar ST]"));
return RTERROR;
}

y = atof(token);

// Coeficiente de Manning
token = ::strtok(NULL, seps);
if (!token)
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


247
{
*NumeroVertST = np;
infile.close();
acad_free(buffer);
acedRestoreStatusBar();
acdbFail(_T("\nFichero de Secciones Trasnv. No vlido
-manning- [Importar ST]"));
return RTERROR;
}

manning = atof(token);

int contador = 1;

// aadir los vrtices de las secciones transv. al buffer
try
{
nST = new SeccionesBufer(n, x, y, manning);
}

catch(const std::bad_alloc&)
{
LiberarBufferSeccionesTransv();
acedRestoreStatusBar();
acdbFail(_T("\nError de asignacin de memoria
[Importar ST][nST]."));
return RTERROR;
}

nbprevious->Siguiente = nST;
nbprevious = nST;

// actualizar la barra de progreso
acedSetStatusBarProgressMeterPos((int)np++);

} // while

infile.close();

acad_free(buffer);

acedRestoreStatusBar();

*NumeroVertST = np; //Nmero de vrtices totales

return RTNORM;
}

int HidraSecTrasnv::ObtenerSeccionesTransversales()
/*--------------------------------------------------------------------
Ingreso : Vaco.
Salida : RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Capta los datos del buffer SeccionesBufer, obtenidos al
importar los datos de las secciones transversales.
--------------------------------------------------------------------*/
{
//Chequear los argumentos
if (!pPrimerST)
{
acdbFail(_T("\nPuntero Nulo de la importacin"));
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


248
return RTERROR;
}

SeccionesBufer *pSeccTrasv;
pPrimerST = pPrimerST->Siguiente;

for (pSeccTrasv = pPrimerST; pSeccTrasv != NULL; pSeccTrasv =
pSeccTrasv->Siguiente)
{
acutPrintf (_T("\n%d,%0.3f, %0.3f, %0.3f "), pSeccTrasv->ns
, pSeccTrasv->CoordX, pSeccTrasv->CoordY, pSeccTrasv->manning);
}

return RTNORM;
}

void HidraSecTrasnv::LiberarBufferSeccionesTransv()
/*-------------------------------------------------------------------
Ingreso : Vaco.
Salida : Vaco.
Propsito : Libera el buffer en ristra SeccionesBufer al que apunta
el miembro pPrimerST. Llamar a esta funcin para liberar el
buffer con los vrtives de las secciones transversales obtenidos
mediante una llamada a la funcin ImportarSeccionesTransversales().
--------------------------------------------------------------------*/
{
if (!pPrimerST)
return;

SeccionesBufer *nST = pPrimerST;
SeccionesBufer *Siguiente = NULL;

// liberar la ristra
while (Siguiente = nST->Siguiente)
{
delete nST;
nST = Siguiente;
}

delete nST;

pPrimerST = NULL;
}

PLEDERRecursosSuperficieLibre.cpp
#include "StdAfx.h"
#include "PLEDERRecursosSuperficieLibre.h"


CRecursosSuperficieLibre::CRecursosSuperficieLibre(void)
{

}

CRecursosSuperficieLibre::~CRecursosSuperficieLibre(void)
{

}

int CRecursosSuperficieLibre::NumeroVerticesCadaST(float *V, int n,
int nST, float *nVert)
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


249
/*--------------------------------------------------------------------
Ingreso : V = Lista de Vrtices de las S. T. Totales
n = Nmero de vrtices de las secciones transversales.
nST = Nmero de Secciones Transversales.
nVert = Lista de Nmeros de los Vrtices de las Secciones
Transversales. Ingresa vaco, para luego ser
almacenado (leer Propsito).
Salida : RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Calcula los nmeros de los Vrtices para cada Secciones
Transversales y los almacena en una lista (nVert) de dimensiones nST.
-------------------------------------------------------------------*/
{
int i, cont = 1, contador = 1;

for( i = 2; i < n; i++)
{
if (V[i] ==1)
{
nVert[contador]= cont;
contador++;
cont = 0;
}
cont++;
} //For i

nVert[nST] = V[n]; // Lista que contiene los
nmeros de vrtices.

return RTNORM;
}

int CRecursosSuperficieLibre::VerticesMaximosMinimos(float *ListaC,
int nST, float *nVert, float *Vminimo, float *Vmaximo)
/*--------------------------------------------------------------------
Ingreso : ListaC= Lista de Coordenadas de las S. T. Totales
nST = Nmero de Secciones Transversales.
nVert = Lista de Nmeros de los Vrtices de las Secciones
Transversales.
Vmin = Lista de Los Vrtices Mnimos de las S. T.
Vmax = Lista de Los Vrtices Mximos de las S. T.
Salida : RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Busca los Vrtices Mnimos y Mximos de una lista. Los
almacena en las listas Vmin[] y Vmax[], de dimensin nST.
--------------------------------------------------------------------*/
{
int i, j,
inicio = 1, // Principio para la interacin.
fin = nVert[1]; // Final de la iteracin.
float Mayor, Menor;

for (i = 1; i <= nST; i++)
{
inicio = inicio;
fin = fin;

Mayor = ListaC[inicio];
Menor = ListaC[inicio];

for (j = (inicio +1); j <= fin; j++)
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


250
{
if ( Menor > ListaC[j])
{
Menor = ListaC[j];
}

if(Mayor < ListaC[j])
{
Mayor = ListaC[j];
}
Vminimo[i] = Menor;// Lista que contiene los vrtices
mnimos.
Vmaximo[i] = Mayor; // Lista que contiene los
vrtices mximos.

}//For j

inicio = inicio + nVert[i];

if (i < nST)// Prevee que en la ltima iteracin tome un
valor NULO
{
fin = fin + nVert[i+1];
}
}//For i

return RTNORM;
}


double CRecursosSuperficieLibre::PendienteMotrizSfm(float K1,float K2,
float Q, float nn, int MetodoSfm)

/*--------------------------------------------------------------------
Ingreso : K1 = Factor de Transporte en la primera seccin de
anlisis.
K2 = Factor de Transporte en la segunda seccin de
anlisis.
Q = Caudal del flujo.
nn = Coeficiente de Manning.
MetodoSfm = Mtodo a usar
Salida : Sfm = Pendiente Motriz.
Propsito : Calcula la Pendiente Motriz entre dos secciones
transversales por los para los cuatro mtodos.
--------------------------------------------------------------------*/
{
double Sfm, I1, I2;
I1 = pow(Q/K1,2);
I2 = pow(Q/K2,2);

switch (MetodoSfm)
{
case 1: // Ecuacin de Factor de transporte Medio.
{
Sfm = pow(((Q+Q)/(K1+K2)),2);
break;
}

case 2: // Media Aritmtica.
{
Sfm = (I1+I2)/2;
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


251
break;
}

case 3: // Media Geomtrica.
{
Sfm = sqrt(I1*I2);
break;
}

case 4: // Media Armnica.
{
Sfm = 2*I1*I2/(I1+I2);
break;
}
default:
acutPrintf(_T("\nFuera de Rango"));

} //switch (MetodoSfm)


return Sfm;
}

float CRecursosSuperficieLibre::NumeroFroude(float Q, float A, float
dA )
/*--------------------------------------------------------------------
Ingreso : Q = Caudal del flujo.
A = rea Transversal de la seccin.
dA = Derivada del rea Transversal de la seccin.
Salida : NF = Nmero de Froude.
Propsito : Calcula el Nmero de Froude
--------------------------------------------------------------------*/
{
float NF;
NF = (Q*Q / g*A*A*A)*dA;
return NF;
}

int CRecursosSuperficieLibre::AreaPerimetro(int inicio, int fin, float
CotaTirante,
float
*CX, float *CY, double *Area, double *Perimetro)


/*--------------------------------------------------------------------
Ingreso : inicio = Principio para la interacin.
fin = Final de la iteracin.
CotaTirante = Cota del tirante de la seccin transversal.
Dato importante para determinar el rea y
el permetro de la S.T.
CX = Datos de las Distancicias (eje X).
CY = Datos de las cotas (eje Y).
Salida : Area = rea Transversal para un tirante que se
ingres (CotaTirante).
Permetro = Permetro Transversal para un tirante que
se ingres (CotaTirante).
RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Calcula el rea y el Permetro de una seccin transversal
a partir de una cota tirante.
-------------------------------------------------------------------*/
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


252

{
int j,k;
float Xi, Xd;

double Ai = 0, // rea en la seccin Izquierda.
At = 0, // rea en los trapecios.
Ad = 0, // rea en la seccin derecha.

Pi = 0, // Permetro en la seccin Izquierda.
Pt = 0, // Permetro en los trapecios.
Pd = 0; // Permetro en la seccin derecha.


float YY[1000]; // Variable local para reasignar las
coordenadas en Y
float XX[1000]; // Variable local para reasignar las
coordenadas en X

int star = 1, end, cont;
end = fin - inicio + 1;

// Traslada los valores hacia la nueva lista YY , XX
cont = inicio;
for (k = star; k <= end; k++)
{
YY[k] = CY[cont];
XX[k] = CX[cont];
cont++;
}

bool InundIzquierdo = false; // Por defecto NO Existe Inundacin
bool InundDerecho = false; // Por defecto NO Existe Inundacin

// Son condiciones para agregar vrtices si el tirante es mayor
a los
// vrtices de las S. T. (casos de inundaciones)

// Inundacin Margen Izquierda?
if (CotaTirante > CY[inicio])
{
YY[1] = CotaTirante;
XX[1] = CX[inicio];

cont = 2;
for (k =inicio; k <= fin; k++)
{
YY[cont] = CY[k];
XX[cont] = CX[k];
cont++;
}
end++;
InundIzquierdo = true;
}
// Inundacin Margen Derecha?
if (CotaTirante > CY[fin])
{
YY[end+1] = CotaTirante;
XX[end+1] = CX[fin];
//acutPrintf(_T("\nNuevos Valores de Y: %0.3f"), Y[k-1]);
end++;
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


253
InundDerecho = true;
}

// Inicio del recorrido de los vrtices.
for (j = star; j <= (end - 1); j++)
{
// Condicin para calcular en el tringulo izquierdo
if ((CotaTirante <= YY[j]) && (CotaTirante >= YY[j+1]))
{

// Clculo: Area del tringulo izquierdo
Ai = Ai + pow((CotaTirante-YY[j+1]),2)*(XX[j+1]-
XX[j])/(2.0*(YY[j]-YY[j+1]));

// Clculo: Permetro del tringulo izquierdo
Pi = Pi + sqrt(pow((CotaTirante - YY[j+1]),2)+
pow((CotaTirante-YY[j+1])*(XX[j+1]-XX[j])/(YY[j]-YY[j+1]),2));

bool condicion = true;
while (condicion)
{
j++;

// Condicin para calcular en los trapecios.

if (YY[j+1] <= CotaTirante)
{
// Clculo: Area del trapecio
At= At + ((2.0*CotaTirante - YY[j]-
YY[j+1])/2.0)*(XX[j+1]-XX[j]);

// Clculo: Permetro del trapecio
Pt = Pt + sqrt(pow((XX[j+1]- XX[j]),2) +
pow((YY[j+1] - YY[j]),2));

}

// Condicin para calcular en el tringulo derecho.
if (YY[j+1] >= CotaTirante)
{

// Clculo: Area del tringulo derecho.
Ad = Ad + pow((CotaTirante-YY[j]),2)*(XX[j+1]-
XX[j])/(2.0*(YY[j+1]-YY[j]));
//acutPrintf(_T("\nValores de Area
Derecha: %0.6f"), Ad);

// Clculo: Permetro del tringulo derecho.
Pd = Pd + sqrt(pow((CotaTirante - YY[j]),2)+
pow((CotaTirante-YY[j])*(XX[j+1]-XX[j])/(YY[j+1]-YY[j]),2));

}

if (YY[j+1] < CotaTirante)
{
condicion = true;
}
else
{
condicion = false;
}
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


254

}//While
} //if
}//For j

*Area = Ai + At + Ad; // Area Total
*Perimetro = Pi + Pt + Pd; // Permetro Total


return RTNORM;
}

int CRecursosSuperficieLibre::AreaPerimetroDerivadas(int inicio, int
fin, float CotaTirante,

float *CX, float *CY, double *Area, double *Perimetro,

double *dArea, double *dPerimetro)
/*--------------------------------------------------------------------
Ingreso : inicio = Principio para la interacin.
fin = Final de la iteracin.
CotaTirante = Cota del tirante de la seccin transversal.
Dato importante para determinar el rea y el permetro de la S.T.
CX = Datos de las Distancicias (eje X).
CY = Datos de las cotas (eje Y).
Salida : Area = rea Transversal para un tirante que se
ingres (CotaTirante).
dArea = Derivada del rea Transversal.
Permetro = Permetro Transversal para un tirante que
se ingres (CotaTirante).
dPermetro = Derivada del Permetro Transversal.
RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Calcula el rea,el Permetro, la derivada del rea y la
derivada del permetro de una seccin transversal a partir de una
cota tirante.
--------------------------------------------------------------------*/

{

int j,k;
float Xi, Xd;

double Ai = 0, // rea en la seccin Izquierda.
At = 0, // rea en los trapecios.
Ad = 0, // rea en la seccin derecha.

dAi = 0, // Derivada del rea en la seccin
Izquierda.
dAt = 0, // Derivada del rea en los trapecios.
dAd = 0, // Derivada del rea en la seccin
derecha.


Pi = 0, // Permetro en la seccin Izquierda.
Pt = 0, // Permetro en los trapecios.
Pd = 0, // Permetro en la seccin derecha.

dPi = 0, // Derivada del Permetro en la seccin
Izquierda.
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


255
dPt = 0, // Derivada del Permetro en los
trapecios.
dPd = 0; // Derivada del Permetro en la seccin
derecha.

float YY[1000]; // Variable local para reasignar las
coordenadas en Y
float XX[1000]; // Variable local para reasignar las
coordenadas en X

int star = 1, end, cont;
end = fin - inicio + 1;

// Traslada los valores hacia la nueva lista YY , XX
cont = inicio;
for (k = star; k <= end; k++)
{
YY[k] = CY[cont];
XX[k] = CX[cont];
cont++;
//acutPrintf(_T("\nNuevos Valores de Y: %0.3f"), Y[k-1]);
}

bool InundIzquierdo = false; // Por defecto NO Existe Inundacin
bool InundDerecho = false; // Por defecto NO Existe Inundacin

// Son condiciones para agregar vrtices si el tirante es mayor
a los
// vrtices de las S. T. (casos de inundaciones)

// Inundacin Margen Izquierda?
if (CotaTirante > CY[inicio])
{
YY[1] = CotaTirante;
XX[1] = CX[inicio];

cont = 2;
for (k =inicio; k <= fin; k++)
{
YY[cont] = CY[k];
XX[cont] = CX[k];
cont++;
}
end++;
InundIzquierdo = true;
}
// Inundacin Margen Derecha?
if (CotaTirante > CY[fin])
{
YY[end+1] = CotaTirante;
XX[end+1] = CX[fin];
//acutPrintf(_T("\nNuevos Valores de Y: %0.3f"), Y[k-1]);
end++;
InundDerecho = true;
}

// Inicio del recorrido de los vrtices.
for (j = star; j <= (end - 1); j++)
{
// Condicin para calcular en el tringulo izquierdo
if ((CotaTirante <= YY[j]) && (CotaTirante >= YY[j+1]))
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


256
{

// Interpolacin para el trigulo izquierdo 'Xi'
//Xi = XX[j+1] -(XX[j+1]-XX[j])*(CotaTirante-
YY[j+1])/(YY[j]-YY[j+1]);

// Clculo: Area del tringulo izquierdo
Ai = Ai + pow((CotaTirante-YY[j+1]),2)*(XX[j+1]-
XX[j])/(2.0*(YY[j]-YY[j+1]));
//acutPrintf(_T("\nValores de Area Izquierdo:
%0.6f"), Ai);

// Clculo: Derivada del Area con respecto a Y del
tringulo izquierdo
dAi = dAi + 2.0*Ai/(CotaTirante - YY[j+1]);

// Clculo: Permetro del tringulo izquierdo
Pi = Pi + sqrt(pow((CotaTirante - YY[j+1]),2)+
pow((CotaTirante-YY[j+1])*(XX[j+1]-XX[j])/(YY[j]-YY[j+1]),2));

// Clculo: Derivada del Permetro con respecto a Y del
tringulo izquierdo
dPi = dPi + Pi/(CotaTirante - YY[j+1]);

bool condicion = true;
while (condicion)
{
j++;

// Condicin para calcular en los trapecios.

if (YY[j+1] <= CotaTirante)
{
// Clculo: Area del trapecio
At= At + ((2.0*CotaTirante - YY[j]-
YY[j+1])/2.0)*(XX[j+1]-XX[j]);
//acutPrintf(_T("\nValores de Area
Trapecio: %0.6f"), At);

// Clculo: Derivada del Area con respecto a Y de
los trapecios
dAt = dAt + XX[j+1] - XX[j];

// Clculo: Permetro del trapecio
Pt = Pt + sqrt(pow((XX[j+1]- XX[j]),2) +
pow((YY[j+1] - YY[j]),2));

}

// Condicin para calcular en el tringulo derecho.
if (YY[j+1] >= CotaTirante)
{

// Interpolacin para el trigulo derecho 'Xd'
//Xd = XX[j] +(XX[j+1]- XX[j])*(CotaTirante -
YY[j])/(YY[j+1]-YY[j]);

// Interpolacin de segmento derecho
// |(Xi+1 - Xi)(Y - Yi) |
// X = |---------------------| + Xi
/ | (Yi+1 - Yi) |
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


257

// Clculo: Area del tringulo derecho.
Ad = Ad + pow((CotaTirante-YY[j]),2)*(XX[j+1]-
XX[j])/(2.0*(YY[j+1]-YY[j]));
//acutPrintf(_T("\nValores de Area
Derecha: %0.6f"), Ad);

// Clculo: Derivada del Area con respecto a Y del
tringulo derecho
dAd = dAd + 2.0*Ad/(CotaTirante - YY[j]);

// Clculo: Permetro del tringulo derecho.
Pd = Pd + sqrt(pow((CotaTirante - YY[j]),2)+
pow((CotaTirante-YY[j])*(XX[j+1]-XX[j])/(YY[j+1]-YY[j]),2));

// Clculo: Derivada del Perimetro con respecto a
Y del tringulo derecho
dPd = dPd + Pd/(CotaTirante - YY[j]);
}

if (YY[j+1] < CotaTirante)
{
condicion = true;
}
else
{
condicion = false;
}

}//While
} //if
}//For j

*Area = Ai + At + Ad; // Area Total
*dArea = dAi + dAt + dAd; // Derivada del Area Total

*Perimetro = Pi + Pt + Pd; // Permetro Total
*dPerimetro = dPi + dPt + dPd; // Derivada del Permetro Total

return RTNORM;
}




PLEDERResutadosDlg.cpp

#include "StdAfx.h"
#include "resource.h"
#include "PLEDERResutadosDlg.h"
#include "PLEDERHidraBuffer.h"
#include "PLEDERRecursosCad.h"
#include "axlock.h" // Tabla

CRecursosCad RecursosR;
//--------------------------------------------------------------------
IMPLEMENT_DYNAMIC (CPLEDERResutadosDlg, CAdUiDialog)

//--------------------------------------------------------------------
CPLEDERResutadosDlg::CPLEDERResutadosDlg (CWnd *pParent /*=NULL*/,
HINSTANCE hInstance /*=NULL*/)
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


258
: CAdUiDialog (CPLEDERResutadosDlg::IDD, pParent, hInstance)
{
m_bFullRow = TRUE;
m_bGridLines = TRUE;
m_bCheckboxes = TRUE;

m_Rx = _T("0.00");
m_Ry = _T("0.00");

}

CPLEDERResutadosDlg::~CPLEDERResutadosDlg()
{
}
//--------------------------------------------------------------------
void CPLEDERResutadosDlg::DoDataExchange (CDataExchange *pDX)
{
CAdUiDialog::DoDataExchange (pDX) ;

// Cajas de Texto.
DDX_Control(pDX, IDC_EDIT_Rx, m_Edit_Rx);
DDX_Control(pDX, IDC_EDIT_Ry, m_Edit_Ry);

// List
DDX_Control(pDX, IDC_LIST_RESULTADOS, m_wndListR);

// Botones (Slo CAD)
DDX_Control(pDX, IDC_BUTTON_RPunto, m_PickButton_RPunto);
}

LRESULT CPLEDERResutadosDlg::OnAcadKeepFocus (WPARAM, LPARAM)
{
return (TRUE);
}

BEGIN_MESSAGE_MAP(CPLEDERResutadosDlg, CAdUiDialog)
ON_MESSAGE(WM_ACAD_KEEPFOCUS, OnAcadKeepFocus)

// Botones incluidos cad
ON_BN_CLICKED(IDC_BUTTON_RPunto, OnButtonRPunto)
ON_BN_CLICKED(IDOK, &CPLEDERResutadosDlg::OnBnClickedOk)

END_MESSAGE_MAP()

BOOL CPLEDERResutadosDlg::OnInitDialog()
{
CDialog::OnInitDialog();

m_Edit_Rx.SetWindowText(m_Rx);
m_Edit_Ry.SetWindowText(m_Ry);

m_PickButton_RPunto.AutoLoad();

// Insertando las grillas
m_wndListR.SetHeadings(_T("ID, 50; Caudal(m3/s), 90; Tirante(m),
80; Cota Tirante(m), 100; Area Total(m2), 90; ALF(m2), 80; AMC(m2),
80; ARF(m2), 80; Permetro(m), 100; Velocidad(m/s), 100; N Froude ,
100; Espejo(m), 90; K , 80; Beta , 80; Hf (m/m), 80; hc,80 "));
for (int i = 0; i < 500; i++)

Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


259


{
m_wndListR.InsertItem(0, _T(""), _T(""),_T(""),_T(""),
_T(""), _T(""),_T(""),_T(""), _T(""), _T(""),_T(""),_T(""), _T(""),
_T(""),_T(""),_T(""), _T(""), _T(""),_T(""),_T(""));
}

m_wndListR.SetGridLines(TRUE);
//m_wndListR.SetCheckboxes(TRUE);


// Borra todo los datos de la grilla.
m_wndListR.DeleteAllItems(ItemdataProc, (LPARAM)this);

double Kt, At, Pt, Vm, Fr;
TCHAR strId[10], strQ[10], strh[10], strZs[10], strA[10],
strALF[10], strAMC[10],
strARF[10], strP[10], strPLF[10], strPMC[10],
strPRF[10], strV[10], strF[10],
strT[10], strK[10], strKLF[10], strKMC[10],
strKRF[10], strBeta[10], strhf12[10],
strhc12[10];


// Inserta los resultado en la grilla
for (int i=0; i< m_Result_len; i++)
{
At = (m_pRHidraulicos + i)->ALF +(m_pRHidraulicos + i)->AMC
+ (m_pRHidraulicos + i)->ARF;
Pt = (m_pRHidraulicos + i)->PLF +(m_pRHidraulicos + i)->PMC
+ (m_pRHidraulicos + i)->PRF;
Kt = (m_pRHidraulicos + i)->KLF +(m_pRHidraulicos + i)->KMC
+ (m_pRHidraulicos + i)->KRF;

// Clculo de la velocidad media
Vm = ((m_pRHidraulicos + i)->Q) / At;

// Clculo del Nmero de Froude
Fr = Vm/ pow(g*(m_pRHidraulicos + i)->h , 0.5);

acdbRToS((m_pRHidraulicos + i)->IdST , 2, 3, strId);
acdbRToS((m_pRHidraulicos + i)->Q , 2, 3, strQ);
acdbRToS((m_pRHidraulicos + i)->h , 2, 3, strh);
acdbRToS((m_pRHidraulicos + i)->Zs , 2, 3, strZs);
acdbRToS(At , 2, 3, strA);

acdbRToS((m_pRHidraulicos + i)->ALF , 2, 3, strALF);
acdbRToS((m_pRHidraulicos + i)->AMC , 2, 3, strAMC);
acdbRToS((m_pRHidraulicos + i)->ARF , 2, 3, strARF);
acdbRToS(Pt , 2, 3, strP);


acdbRToS(Vm , 2, 3, strV);
acdbRToS(Fr , 2, 3, strF);

acdbRToS((m_pRHidraulicos + i)->TopW , 2, 3, strT);

acdbRToS(Kt , 2, 3, strK);
//acdbRToS((m_pRHidraulicos + i)->KLF , 2, 3, strKLF);
//acdbRToS((m_pRHidraulicos + i)->KMC , 2, 3, strKMC);
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


260
//acdbRToS((m_pRHidraulicos + i)->KRF , 2, 3, strKRF);

acdbRToS((m_pRHidraulicos + i)->Beta , 2, 3, strBeta);
acdbRToS((m_pRHidraulicos + i)->hf12 , 2, 5, strhf12);
acdbRToS((m_pRHidraulicos + i)->hc12 , 2, 3, strhc12);

m_wndListR.InsertItem( m_Result_len, strId, strQ, strh,
strZs, strA,
strALF, strAMC, strARF,
strP, strV, strF, strT,
strK, strBeta, strhf12,
strhc12);


}

return TRUE;
}

void CPLEDERResutadosDlg::OnButtonRPunto()
{
//Clase que habilita CAD
//AcAxDocLock docLock;

CAcModuleResourceOverride resourceOverride;
// Esconde el dilogo
BeginEditorCommand();

ads_point p1;

// Coge el Punto P1
if (acedGetPoint (NULL, _T("\nPique un Punto para la tabla
[Resultados PLEDER]"), p1) != RTNORM )
{
acutPrintf(_T("\nError al ingresar el Punto"));
// si no cancela el comando(incluyendo el dilogo)
// CancelEditorCommand();
CompleteEditorCommand();
return;
}

CompleteEditorCommand();

m_Rx.Format(_T("%g"), p1[X] );
m_Edit_Rx.SetWindowText(m_Rx);

m_Ry.Format(_T("%g"), p1[Y] );
m_Edit_Ry.SetWindowText(m_Ry);
}

BOOL CPLEDERResutadosDlg::ItemdataProc(DWORD dwData, LPARAM lParam)
{
// TODO: Process your item data here

// Please return TRUE to proceed the deletion, return FALSE to
abort.
return TRUE;
}
void CPLEDERResutadosDlg::OnBnClickedOk()
{
// Coge los valores despues de pulsar OK
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


261

// Cajas de texto
m_Edit_Rx.GetWindowText(m_Rx);
m_Edit_Ry.GetWindowText(m_Ry);

CDialog::OnOK();
RecursosR.T_pRHidraulicos = m_pRHidraulicos;


//...............RESULTADOS
TABLA..........................................
float PX, PY;
PX =_wtof(m_Rx);
PY =_wtof(m_Ry);

ads_point p1;
p1[X] = PX; p1[Y] = PY; p1[Z] = 0.0;

//Clase que habilita CAD
AcAxDocLock docLock;

CString strTableStyle = _T("Standard");
strTableStyle.ReleaseBuffer();

CString strNameBlock = _T("RESULTADOS HIDRAULICOS");
strNameBlock.ReleaseBuffer();

// Para almacenar los datos de la tabla
RowData *pRwData = new RowData();

if (Acad::eOk ==
RecursosR.GenerarTablaHidraulicodesdeBlock((TCHAR
*)strNameBlock.GetBuffer(), pRwData, m_Result_len))
{
// Crear la tabla
AcDbTable *pTbl = NULL;

// Notar que la primera, segunda columna contiene datos
para los ttulos y cabecera
// Aqu usa la tercera fila para la correcta longitud de la
columna.
if(Acad::eOk == RecursosR.CrearTabla(pTbl,(TCHAR
*)strTableStyle.GetBuffer(),pRwData->at(2)->length(),pRwData-
>length()))
{
// Habilitar la tabla con datos
RecursosR.HabilitarTabla(pTbl, pRwData);

// Agrega el Object Table hacia el Model Space del
actual dibujo.
if(Acad::eOk ==
RecursosR.AgregarEnDwg(acdbHostApplicationServices()-
>workingDatabase(),pTbl))
{
// Unir las Celdas
//mergeCellsForTitleAndHeader(pTbl,pBlkName);

// Ajustar las columnas.
RecursosR.AjustarAnchoColumna(pTbl,200); // 200 -
valor arbitrario limite superior.

Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


262
// Ajustar las filas.
RecursosR.AjustarAlturaFila(pTbl,50); // 50 -
valor arbitrario limite superior.

pTbl->setPosition(AcGePoint3d(p1[X], p1[Y],
p1[Z]));

// Cierra la tabla
pTbl->close();

} //if

else
{
// Limpiar, si pTbl no es agregado al model
space
delete pTbl;
}

} //if

else
{
acutPrintf(_T("\nNo se pudo crear la tabla"));
}

} //if

acedRestoreStatusBar();
}

//--------------------------------------------------------------------
// Funciones extras para los resultados

void CPLEDERResutadosDlg::FreeAllResultBufs()
/*--------------------------------------------------------------------
Ingreso : theFirstResult = puntero al primer elemento del
buffer.
Salida : Vaco.
Propsito : Llamar a esta funcin para liberar un buffer
FGVResultadosBufer
--------------------------------------------------------------------*/
{
if (!m_theFirstR)
return;

FGVResultadosBufer *pResult = m_theFirstR;
FGVResultadosBufer *pResulNext = NULL;

// liberar la ristra
while (pResulNext = pResult->pRnext)
{
delete pResult;
pResult = pResulNext;
}

delete pResult;

m_theFirstR = NULL;
}

Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


263
int CPLEDERResutadosDlg::AcquireLevelFreeSurface(long *numberL)
/*--------------------------------------------------------------------
Ingreso : numberof = Puntero a Long para sobreescribir el
Resultado
Salida : numberof = Representa el nmero de Secciones
Transversales que se encontraron.
RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Lee el conjunto de Secciones transversales definidas en
el drawing. Llamar a esta funcin para obtener el puntero al buffer
CrossSectionsBuf con la nube de S.T. El buffer quedar apuntado por
el miembro m_theFirstST. Para desalojar el buffer se deber llamar a
la funcin FreeAllCrossSectionsBufs(). Las S.T. que se aadan al
buffer no estarn ordenados por su nmero de orden. Se toman las S.T.
en bruto.
-------------------------------------------------------------------*/
{
FreeAllResultBufs();

struct resbuf *filter; // resbufs

// preparar el filtro para los niveles calculados
filter = acutBuildList(
RTDXF0, _T("PLEDERHydraulicResult"),
8, PLEDER_CAPA_NIVELES,
0);

if (filter == NULL)
{
acdbFail(_T("\nError al construir el filtro
[AcquireLevelFreeSurface][acutBuildList]."));
return RTERROR;
}

ads_name ss; // ss
long sslen = 0; // longitud del ss

// seleccionar las secciones transversales definidas
if (acedSSGet(_T("_X"), NULL, NULL, filter, ss) != RTNORM)
{
//acutPrintf(_T("\nNo hay Niveles calculados en el
drawing"));
*numberL = 0;
acutRelRb(filter);
return RTNORM;
}

acutRelRb(filter);

// tomar la longitud del ss
if (acedSSLength(ss, &sslen) != RTNORM)
{
acedSSFree(ss);
acdbFail(_T("\nError al tomar la longitud del conjunto de
seleccin [AcquireLevelFreeSurface][acedSSLength]."));
return RTERROR;
}

CPLEDERHydraulicResult *pResult;
ads_name ename;
AcDbObjectId ID;
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


264
long nL = 0;

AcGePoint2d P1;

// colocar una barra de progreso
acedSetStatusBarProgressMeter(_T("Adquiriendo los niveles
calculados: "), 0, (int)sslen);

// tomar el nombre de la primera entidad
if (acedSSName(ss, 0, ename) != RTNORM)
{
acedSSFree(ss);
acedRestoreStatusBar();
acdbFail(_T("\nError al tomar el nombre de la entidad
CPLEDERHydraulicResult [AcquireLevelFreeSurface][acedSSName]."));
return RTERROR;
}

// cambiar el nombre por el ObjectId
if (acdbGetObjectId(ID, ename) != Acad::eOk)
{
acedSSFree(ss);
acedRestoreStatusBar();
acdbFail(_T("\nError al tomar el ObjectId de la entidad
CPLEDERCrossSections [AcquireCrossSections][acdbGetObjectId]."));
return RTERROR;
}

// abrir el objeto para lectura
if (acdbOpenObject(pResult, ID, AcDb::kForRead) != Acad::eOk)
{
acedSSFree(ss);
acedRestoreStatusBar();
acdbFail(_T("\nError al abrir el Objeto
CPLEDERCrossSections [AcquireCrossSections][acdbOpenObject]."));
return RTERROR;
}

Adesk::Int32 nV;
double IdST; // Id
double h, // Tirante.
Zs, // Cota Tirante.
Beta, // Coeciente de correccin.
ALF, // Area llanura Izquierda.
AMC, // Area Canal central.
ARF, // Area llanura derecha.
PLF, // Permetro llanura
izquierdo.
PMC, // Permetro canal central.
PRF, // Permetro llanura derecho
KLF, // Conductividad llanura
izquierdo.
KMC, // Conductividad canal
central.
KRF, // Conductividad llanura
derecho
Q, // Descarga del flujo.
hf12, // Prdida por firccin.
hc12, // Prdida local.
TopW, // Espejo de agua
LMC; // Longitud del canal central
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


265

// tomar las propiedades
pResult->IdCrossSections(IdST);
pResult->NumberVertex(nV);

pResult->Depth(h);
pResult->WaterElevation(Zs);
pResult->BetaCoeficient(Beta);
pResult->LeftArea(ALF);
pResult->MainArea(AMC);
pResult->RightArea(ARF);
pResult->LeftPerimeter(PLF);
pResult->MainPerimeter(PMC);
pResult->RightPerimeter(PRF);
pResult->LeftConveyance(KLF);
pResult->MainConveyance(KMC);
pResult->RightConveyance(KRF);
pResult->WaterFlow(Q);
pResult->FrictionLess(hf12);
pResult->LocalLess(hc12);
pResult->TopWidth(TopW);
pResult->LengthMainChannel(LMC);

AcGePoint2dArray vertexArray;
AcGePoint2d vertex;

//for(int i =0; i< pResult->m_nV; i++)
for(int i =0; i< nV; i++)
{
vertex[X] = pResult->m_GVerts[i].x;
vertex[Y] = pResult->m_GVerts[i].y;
vertexArray.append(vertex);

}


pResult->close();


// crear el buffer y aade la primera seccin transversal
try
{
m_theFirstR = new FGVResultadosBufer(nV, vertexArray, IdST,
h, Zs, Beta, ALF, AMC, ARF, PLF, PMC, PRF,
KLF,
KMC, KRF, Q, hf12, hc12, TopW, LMC);
}
catch(const std::bad_alloc&)
{
acedSSFree(ss);
acedRestoreStatusBar();
acdbFail(_T("\nError de asignacin de memoria
[AcquireCrossSections][m_theFirstNode]."));
return RTERROR;
}

FGVResultadosBufer *nR, *nRprevious = m_theFirstR;

// actualizar la barra de progreso
acedSetStatusBarProgressMeterPos((int)nL++);

Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


266
vertexArray.removeAll();
// recorrer el ss
for (int i = 1; i < sslen; i++)
{
// tomar el nombre de la entidad
if (acedSSName(ss, i, ename) != RTNORM)
{
acedSSFree(ss);
FreeAllResultBufs();
acedRestoreStatusBar();
acdbFail(_T("\nError al tomar el nombre de la entidad
PLEDERCrossSections [AcquireCrossSections][acedSSName]."));
return RTERROR;
}

// cambiar el nombre por el ObjectId
if (acdbGetObjectId(ID, ename) != Acad::eOk)
{
acedSSFree(ss);
FreeAllResultBufs();
acedRestoreStatusBar();
acdbFail(_T("\nError al tomar el ObjectId de la
entidad PLEDERCrossSections
[AcquireCrossSections][acdbGetObjectId]."));
return RTERROR;
}

// abrir el objeto para lectura
if (acdbOpenObject(pResult, ID, AcDb::kForRead) !=
Acad::eOk)
{
acedSSFree(ss);
FreeAllResultBufs();
acedRestoreStatusBar();
acdbFail(_T("\nError al abrir el Objeto
PLEDERCrossSections [AcquireCrossSections][acdbOpenObject]."));
return RTERROR;
}

// tomar las propiedades
pResult->IdCrossSections(IdST);
pResult->NumberVertex(nV);

pResult->Depth(h);
pResult->WaterElevation(Zs);
pResult->BetaCoeficient(Beta);
pResult->LeftArea(ALF);
pResult->MainArea(AMC);
pResult->RightArea(ARF);
pResult->LeftPerimeter(PLF);
pResult->MainPerimeter(PMC);
pResult->RightPerimeter(PRF);
pResult->LeftConveyance(KLF);
pResult->MainConveyance(KMC);
pResult->RightConveyance(KRF);
pResult->WaterFlow(Q);
pResult->FrictionLess(hf12);
pResult->LocalLess(hc12);
pResult->TopWidth(TopW);
pResult->LengthMainChannel(LMC);

Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


267
for(int i =0; i< nV; i++)
{
vertex[X] = pResult->m_GVerts[i].x;
vertex[Y] = pResult->m_GVerts[i].y;
vertexArray.append(vertex);

}

pResult->close();

// aadir las secciones transversales al buffer
try
{
nR = new FGVResultadosBufer(nV, vertexArray, IdST, h,
Zs, Beta, ALF, AMC, ARF, PLF, PMC, PRF,
KLF,
KMC, KRF, Q, hf12, hc12, TopW, LMC);
}
catch(const std::bad_alloc&)
{
acedSSFree(ss);
FreeAllResultBufs();
acedRestoreStatusBar();
acdbFail(_T("\nError de asignacin de memoria
[AcquireCrossSections][nb]."));
return RTERROR;
}

nRprevious->pRnext = nR;
nRprevious = nR;

// actualizar la barra de progreso
acedSetStatusBarProgressMeterPos((int)nL++);
vertexArray.removeAll();

} // for i

acedSSFree(ss);

acedRestoreStatusBar();

*numberL = nL;

return RTNORM;
}


// Adquirir o tomar los niveles calculados
int CPLEDERResutadosDlg::DeleteLevelFreeSurface(bool prompt)
/*--------------------------------------------------------------------
Ingreso : prompt = si es verdadero solicita confimacin.
Salida : RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Elimina los niveles calculados
--------------------------------------------------------------------*/
{
TCHAR result[131];

// si procede preguntar al usuario si desea eliminar los niveles
if (prompt)
{
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


268
acedInitGet(RSG_NONULL, _T("S N"));

if (acedGetKword(_T("\nSeguro que desea eliminar los
niveles S/N? : "), result) == RTCAN)
return RTCAN;

if ((result[0] == 'n') || (result[0] == 'N'))
return RTCAN;
}

struct resbuf *filter; // resbufs

// preparar el filtro para seleccionar los niveles
filter = acutBuildList(
RTDXF0, _T("PLEDERHydraulicResult"),
8, PLEDER_CAPA_NIVELES,
0);


if (!filter)
{
acdbFail(_T("\nError al construir el filtro
[DeleteLevelFreeSurface][acutBuildList]."));
return RTERROR;
}

ads_name ss; // ss
long sslen = 0; // longitud del ss

// seleccionar los niveles definidos
if (acedSSGet(_T("_X"), NULL, NULL, filter, ss) != RTNORM)
{
// no hay niveles en el drawing
acutRelRb(filter);
return RTNORM;
}

acutRelRb(filter);

// tomar la longitud del ss
if (acedSSLength(ss, &sslen) != RTNORM)
{
acedSSFree(ss);
acdbFail(_T("\nError al tomar la longitud del conjunto de
seleccin [acedSSLength]."));
return RTERROR;
}

CPLEDERHydraulicResult *pResult;
ads_name ename;
AcDbObjectId ID;
long n, np, progress = 0;

np = 100;

// colocar una barra de progreso
acedSetStatusBarProgressMeter(_T("Eliminando los niveles: "), 0,
(int)np);


// recorrer el ss
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


269
for (int i = 0; i < sslen; i++)
{
// tomar el nombre de la entidad
if (acedSSName(ss, i, ename) != RTNORM)
{
acedSSFree(ss);
acedRestoreStatusBar();
acdbFail(_T("\nError al tomar el nombre de la entidas
[acedSSName]."));
return RTERROR;
}

// cambiar el nombre por el ObjectId
if (acdbGetObjectId(ID, ename) != Acad::eOk)
{
acedSSFree(ss);
acedRestoreStatusBar();
acdbFail(_T("\nError al tomar el ObjectId de la
entidad [acdbGetObjectId]."));
return RTERROR;
}

// abrir el objeto para lectura
if (acdbOpenObject(pResult, ID, AcDb::kForRead) !=
Acad::eOk)
{
acedSSFree(ss);
acedRestoreStatusBar();
acdbFail(_T("\nError al abrir el Objeto
[acdbOpenObject]."));
return RTERROR;
}

pResult->close();

// borrar la entidad
acdbEntDel(ename);

// actualizar la barra de progreso
acedSetStatusBarProgressMeterPos((int)progress++);

} // for i

acedSetStatusBarProgressMeterPos((int)np);

acedSSFree(ss);
acedRestoreStatusBar();

return RTNORM;
}


PLEDERSeccionesTransversales.cpp

#include "StdAfx.h"
#include "PLEDERSeccionesTransversales.h"

#include "PLEDERRecursosCad.h"
#include "PLEDERHidraBuffer.h"

CPLEDERSeccionesTransversales::CPLEDERSeccionesTransversales(void)
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


270
{
// inicializar la clase
m_theFirstST = NULL;
m_theFirstSOC = NULL;
m_STTextHeight = 0.20;
m_STDiameter = 0.20;

}

CPLEDERSeccionesTransversales::~CPLEDERSeccionesTransversales(void)
{
FreeAllCrossSectionsBufs();
FreeAllCrossSectionsSocavacionBufs();
}

void CPLEDERSeccionesTransversales::FreeAllCrossSectionsBufs()
/*--------------------------------------------------------------------
Ingreso : Vaco.
Salida : Vaco.
Propsito : Libera el buffer en ristra CrossSectionsBuf al que apunta
el miembro m_theFirstST. Llamar a esta funcin para liberar el
buffer con las S.T. obtenidas mediante una llamada a la funcin
AcquireCrossSections().
-------------------------------------------------------------------*/
{

if (!m_theFirstST)
return;

CrossSectionsBufer *nb = m_theFirstST;
CrossSectionsBufer *nbnext = NULL;

// liberar la ristra
while (nbnext = nb->nbnext)
{
delete nb;
nb = nbnext;
}

delete nb;

m_theFirstST = NULL;
}

void
CPLEDERSeccionesTransversales::FreeAllCrossSectionsSocavacionBufs()
/*--------------------------------------------------------------------
Ingreso : Vaco.
Salida : Vaco.
Propsito : Libera el buffer en ristra CrossSectionsSocavacionBuf al
que apunta el miembro m_theFirstSOC. Llamar a esta funcin para
liberar el buffer con las S.T. obtenidas mediante una llamada a la
funcin AcquireCrossSectionsSocavacion().
--------------------------------------------------------------------*/
{

if (!m_theFirstSOC)
return;

CrossSectionsSocavacionBufer *nb = m_theFirstSOC;
CrossSectionsSocavacionBufer *nbnext = NULL;
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


271

// liberar la ristra
while (nbnext = nb->nbnext)
{
delete nb;
nb = nbnext;
}

delete nb;

m_theFirstSOC = NULL;
}



int CPLEDERSeccionesTransversales::AcquireCrossSections(long
*numberof)
/*--------------------------------------------------------------------
Ingreso : numberof = Puntero a Long para sobreescribir el
resultado
Salida : numberof = Representa el nmero de Secciones
Transversales que se encontraron.
RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Lee el conjunto de Secciones transversales definidas en
el drawing. Llamar a esta funcin para obtener el puntero al buffer
CrossSectionsBuf con la nube de S.T. El buffer quedar apuntado por
el miembro m_theFirstST. Para desalojar el buffer se deber llamar a
la funcin FreeAllCrossSectionsBufs(). Las S.T. que se aadan al
buffer no estarn ordenados por su nmero de orden. Se toman las S.T.
en bruto.
-------------------------------------------------------------------*/
{
FreeAllCrossSectionsBufs();

struct resbuf *filter; // resbufs

// preparar el filtro para seleccionar las S.T.
filter = acutBuildList(
RTDXF0, _T("CPLEDERCrossSections"),
8, PLEDER_CAPA_SECCIONTRANSVERSAL,
0);

if (filter == NULL)
{
acdbFail(_T("\nError al construir el filtro
[AcquireCrossSections][acutBuildList]."));
return RTERROR;
}

ads_name ss; // ss
long sslen = 0; // longitud del ss

// seleccionar las secciones transversales definidas
if (acedSSGet(_T("_X"), NULL, NULL, filter, ss) != RTNORM)
{
// no hay Secciones Transv. en el drawing
*numberof = 0;
acutRelRb(filter);
return RTNORM;
}
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


272

acutRelRb(filter);

// tomar la longitud del ss
if (acedSSLength(ss, &sslen) != RTNORM)
{
acedSSFree(ss);
acdbFail(_T("\nError al tomar la longitud del conjunto de
seleccin [AcquireCrossSections][acedSSLength]."));
return RTERROR;
}

CPLEDERCrossSections *pSecciones;
ads_name ename;
AcDbObjectId ID;
long nVST, np = 0;
double IdST;

AcGePoint2d P1;
double X1, Y1, LL, LC, LR, NL, NC, NR, CC, CE, HminG, HminL;

long BL, BR;

// colocar una barra de progreso
acedSetStatusBarProgressMeter(_T("Adquiriendo las secciones
transverales: "), 0, (int)sslen);

// tomar el nombre de la primera entidad
if (acedSSName(ss, 0, ename) != RTNORM)
{
acedSSFree(ss);
acedRestoreStatusBar();
acdbFail(_T("\nError al tomar el nombre de la entidad
CPLEDERCrossSections [AcquireCrossSections][acedSSName]."));
return RTERROR;
}

// cambiar el nombre por el ObjectId
if (acdbGetObjectId(ID, ename) != Acad::eOk)
{
acedSSFree(ss);
acedRestoreStatusBar();
acdbFail(_T("\nError al tomar el ObjectId de la entidad
CPLEDERCrossSections [AcquireCrossSections][acdbGetObjectId]."));
return RTERROR;
}

// abrir el objeto para lectura
if (acdbOpenObject(pSecciones, ID, AcDb::kForRead) != Acad::eOk)
{
acedSSFree(ss);
acedRestoreStatusBar();
acdbFail(_T("\nError al abrir el Objeto
CPLEDERCrossSections [AcquireCrossSections][acdbOpenObject]."));
return RTERROR;
}

// tomar las propiedades
pSecciones->ReferencePoint(P1);
pSecciones->ReferenceX(X1);
pSecciones->ReferenceY(Y1);
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


273

pSecciones->MinVerticeGlobal(HminG);
pSecciones->MinVerticeLocal(HminL);


pSecciones->IdCrossSections(IdST);
pSecciones->nVST(nVST);

pSecciones->LengthLeft(LL);
pSecciones->LengthCenter(LC);
pSecciones->LengthRight(LR);

pSecciones->ManningLeft(NL);
pSecciones->ManningCenter(NC);
pSecciones->ManningRight(NR);

pSecciones->BankLeft(BL);
pSecciones->BankRight(BR);

pSecciones->CoeficentCont(CC);
pSecciones->CoeficentExp(CE);

AcGePoint2dArray vertexArray;
AcGePoint2d vertex;

for(int i =0; i<nVST; i++)
{
vertex[X] = pSecciones->pVerts[i].x;
vertex[Y] = pSecciones->pVerts[i].y;
vertexArray.append(vertex);
}


pSecciones->close();

// crear el buffer y aade la primera seccin transversal
try
{
m_theFirstST = new CrossSectionsBufer(P1, X1, Y1, IdST,
nVST, vertexArray, HminG, HminL, LL, LC, LR,

NL, NC, NR, BL, BR, CC, CE);
}
catch(const std::bad_alloc&)
{
acedSSFree(ss);
acedRestoreStatusBar();
acdbFail(_T("\nError de asignacin de memoria
[AcquireCrossSections][m_theFirstNode]."));
return RTERROR;
}

CrossSectionsBufer *nb, *nbprevious = m_theFirstST;

// actualizar la barra de progreso
acedSetStatusBarProgressMeterPos((int)np++);

vertexArray.removeAll();

// recorrer el ss
for (int i = 1; i < sslen; i++)
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


274
{
// tomar el nombre de la entidad
if (acedSSName(ss, i, ename) != RTNORM)
{
acedSSFree(ss);
FreeAllCrossSectionsBufs();
acedRestoreStatusBar();
acdbFail(_T("\nError al tomar el nombre de la entidad
PLEDERCrossSections [AcquireCrossSections][acedSSName]."));
return RTERROR;
}

// cambiar el nombre por el ObjectId
if (acdbGetObjectId(ID, ename) != Acad::eOk)
{
acedSSFree(ss);
FreeAllCrossSectionsBufs();
acedRestoreStatusBar();
acdbFail(_T("\nError al tomar el ObjectId de la
entidad PLEDERCrossSections
[AcquireCrossSections][acdbGetObjectId]."));
return RTERROR;
}

// abrir el objeto para lectura
if (acdbOpenObject(pSecciones, ID, AcDb::kForRead) !=
Acad::eOk)
{
acedSSFree(ss);
FreeAllCrossSectionsBufs();
acedRestoreStatusBar();
acdbFail(_T("\nError al abrir el Objeto
PLEDERCrossSections [AcquireCrossSections][acdbOpenObject]."));
return RTERROR;
}

// tomar las propiedades
pSecciones->ReferencePoint(P1);
pSecciones->ReferenceX(X1);
pSecciones->ReferenceY(Y1);

pSecciones->MinVerticeGlobal(HminG);
pSecciones->MinVerticeLocal(HminL);

pSecciones->IdCrossSections(IdST);
pSecciones->nVST(nVST);

pSecciones->LengthLeft(LL);
pSecciones->LengthCenter(LC);
pSecciones->LengthRight(LR);

pSecciones->ManningLeft(NL);
pSecciones->ManningCenter(NC);
pSecciones->ManningRight(NR);

pSecciones->BankLeft(BL);
pSecciones->BankRight(BR);

pSecciones->CoeficentCont(CC);
pSecciones->CoeficentExp(CE);

Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


275
for(int j =0; j<nVST; j++)
{
vertex[X] = pSecciones->pVerts[j].x;
vertex[Y] = pSecciones->pVerts[j].y;
vertexArray.append(vertex);
}

pSecciones->close();
// aadir las secciones transversales al buffer
try
{
nb = new CrossSectionsBufer(P1, X1, Y1, IdST, nVST,
vertexArray, HminG, HminL, LL,
LC, LR, NL,
NC, NR, BL, BR, CC, CE);
}
catch(const std::bad_alloc&)
{
acedSSFree(ss);
FreeAllCrossSectionsBufs();
acedRestoreStatusBar();
acdbFail(_T("\nError de asignacin de memoria
[AcquireCrossSections][nb]."));
return RTERROR;
}

nbprevious->nbnext = nb;
nbprevious = nb;

// actualizar la barra de progreso
acedSetStatusBarProgressMeterPos((int)np++);
vertexArray.removeAll();
} // for i

acedSSFree(ss);

acedRestoreStatusBar();

*numberof = np;

return RTNORM;
}

int CPLEDERSeccionesTransversales::AcquireCrossSectionsSocavacion(long
*numberof)
/*--------------------------------------------------------------------
Ingreso : numberof = Puntero a Long para sobreescribir el
resultado
Salida : numberof = Representa el nmero de Secciones
Transversales que se encontraron.
RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Lee el conjunto de Secciones transversales definidas en
el drawing. Llamar a esta funcin para obtener el puntero al buffer
CrossSectionsBuf con la nube de S.T. El buffer quedar apuntado por
el miembro m_theFirstST. Para desalojar el buffer se deber llamar a
la funcin FreeAllCrossSectionsBufs(). Las S.T. que se aadan al
buffer no estarn ordenados por su nmero de orden. Se toman las S.T.
en bruto.
-------------------------------------------------------------------*/
{
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


276
FreeAllCrossSectionsSocavacionBufs();

struct resbuf *filter; // resbufs

// preparar el filtro para seleccionar las S.T.
filter = acutBuildList(
RTDXF0, _T("CPLEDERCrossSections"),
8, PLEDER_CAPA_SECCIONTRANSVERSAL,
0);

if (filter == NULL)
{
acdbFail(_T("\nError al construir el filtro
[AcquireCrossSections][acutBuildList]."));
return RTERROR;
}

ads_name ss; // ss
long sslen = 0; // longitud del ss

// seleccionar las secciones transversales definidas
if (acedSSGet(_T("_X"), NULL, NULL, filter, ss) != RTNORM)
{
// no hay Secciones Transv. en el drawing
*numberof = 0;
acutRelRb(filter);
return RTNORM;
}

acutRelRb(filter);

// tomar la longitud del ss
if (acedSSLength(ss, &sslen) != RTNORM)
{
acedSSFree(ss);
acdbFail(_T("\nError al tomar la longitud del conjunto de
seleccin [AcquireCrossSections][acedSSLength]."));
return RTERROR;
}

CPLEDERCrossSections *pSecciones;
ads_name ename;
AcDbObjectId ID;
long nVST, np = 0;
double IdST;

Adesk::Int32 Material,
CoefProb;
double CoefMaterial;

// colocar una barra de progreso
acedSetStatusBarProgressMeter(_T("Adquiriendo las secciones
transverales: "), 0, (int)sslen);

// tomar el nombre de la primera entidad
if (acedSSName(ss, 0, ename) != RTNORM)
{
acedSSFree(ss);
acedRestoreStatusBar();
acdbFail(_T("\nError al tomar el nombre de la entidad
CPLEDERCrossSections [AcquireCrossSections][acedSSName]."));
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


277
return RTERROR;
}

// cambiar el nombre por el ObjectId
if (acdbGetObjectId(ID, ename) != Acad::eOk)
{
acedSSFree(ss);
acedRestoreStatusBar();
acdbFail(_T("\nError al tomar el ObjectId de la entidad
CPLEDERCrossSections [AcquireCrossSections][acdbGetObjectId]."));
return RTERROR;
}

// abrir el objeto para lectura
if (acdbOpenObject(pSecciones, ID, AcDb::kForRead) != Acad::eOk)
{
acedSSFree(ss);
acedRestoreStatusBar();
acdbFail(_T("\nError al abrir el Objeto
CPLEDERCrossSections [AcquireCrossSections][acdbOpenObject]."));
return RTERROR;
}

// tomar las propiedades
pSecciones->IdCrossSections(IdST);
pSecciones->TipoMaterial(Material);
pSecciones->CoeficienteProb(CoefProb);
pSecciones->CoeficienteMaterial(CoefMaterial);



pSecciones->close();

// crear el buffer y aade la primera seccin transversal
try
{
m_theFirstSOC = new CrossSectionsSocavacionBufer(IdST,
Material, CoefProb , CoefMaterial);
}
catch(const std::bad_alloc&)
{
acedSSFree(ss);
acedRestoreStatusBar();
acdbFail(_T("\nError de asignacin de memoria
[AcquireCrossSections][m_theFirstNode]."));
return RTERROR;
}

CrossSectionsSocavacionBufer *nb, *nbprevious = m_theFirstSOC;

// actualizar la barra de progreso
acedSetStatusBarProgressMeterPos((int)np++);

// recorrer el ss
for (int i = 1; i < sslen; i++)
{
// tomar el nombre de la entidad
if (acedSSName(ss, i, ename) != RTNORM)
{
acedSSFree(ss);
FreeAllCrossSectionsSocavacionBufs();
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


278
acedRestoreStatusBar();
acdbFail(_T("\nError al tomar el nombre de la entidad
PLEDERCrossSections [AcquireCrossSections][acedSSName]."));
return RTERROR;
}

// cambiar el nombre por el ObjectId
if (acdbGetObjectId(ID, ename) != Acad::eOk)
{
acedSSFree(ss);
FreeAllCrossSectionsSocavacionBufs();
acedRestoreStatusBar();
acdbFail(_T("\nError al tomar el ObjectId de la
entidad PLEDERCrossSections
[AcquireCrossSections][acdbGetObjectId]."));
return RTERROR;
}

// abrir el objeto para lectura
if (acdbOpenObject(pSecciones, ID, AcDb::kForRead) !=
Acad::eOk)
{
acedSSFree(ss);
FreeAllCrossSectionsSocavacionBufs();
acedRestoreStatusBar();
acdbFail(_T("\nError al abrir el Objeto
PLEDERCrossSections [AcquireCrossSections][acdbOpenObject]."));
return RTERROR;
}

// tomar las propiedades
pSecciones->IdCrossSections(IdST);
pSecciones->TipoMaterial(Material);
pSecciones->CoeficienteProb(CoefProb);
pSecciones->CoeficienteMaterial(CoefMaterial);

pSecciones->close();

// aadir las secciones transversales al buffer
try
{
nb = new CrossSectionsSocavacionBufer(IdST, Material,
CoefProb, CoefMaterial);
}
catch(const std::bad_alloc&)
{
acedSSFree(ss);
FreeAllCrossSectionsSocavacionBufs();
acedRestoreStatusBar();
acdbFail(_T("\nError de asignacin de memoria
[AcquireCrossSections][nb]."));
return RTERROR;
}

nbprevious->nbnext = nb;
nbprevious = nb;

// actualizar la barra de progreso
acedSetStatusBarProgressMeterPos((int)np++);

} // for i
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


279

acedSSFree(ss);

acedRestoreStatusBar();

*numberof = np;

return RTNORM;
}

int CPLEDERSeccionesTransversales::GetFirstNumberCrossSections(long
*nfirst)
/*--------------------------------------------------------------------
Ingreso : nfirst = Puntero a Long para sobreescribir el
resultado
Salida : nfirst = nmero de orden de la primera S.T. Si
no hay Secciones Transv. definidos tomar el valor de cero.
RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Busca el nmero de orden el ltimo nombre de la S.T. en
el Drawing. Nos podramos basar en el buffer, pero para asegurar la
bsqueda nos basaremos en el drawing, ya que el buffer puede no estar
actualizado
-------------------------------------------------------------------*/
{
struct resbuf *filter; // resbufs

// preparar el filtro para seleccionar las S.T.
filter = acutBuildList(
RTDXF0, _T("CPLEDERCrossSections"),
8, PLEDER_CAPA_SECCIONTRANSVERSAL,
0);

if (filter == NULL)
{
acdbFail(_T("\nError al construir el filtro
[GetFirstNumberCrossSections][acutBuildList]."));
return RTERROR;
}

ads_name ss; // ss
long sslen = 0; // longitud del ss

// seleccionar las secciones transversales definidas
if (acedSSGet(_T("X"), NULL, NULL, filter, ss)!= RTNORM)
{
acdbFail(_T("\nNo hay Secciones Transversales definifos en
el drawinG"));
*nfirst = 0;
acutRelRb(filter);
return RTNORM;
}
acutRelRb(filter);

// tomar la longitud del ss
if (acedSSLength(ss, &sslen) != RTNORM)
{
acedSSFree(ss);
acdbFail(_T("\nError al tomar la longitud del conjunto de
seleccin [GetFirstNumberCrossSections][acedSSLength]."));
return RTERROR;
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


280
}

CPLEDERCrossSections *pSecciones;
ads_name ename;
AcDbObjectId ID;
long np = 0;
double n;

// tomar la ltima seccin transversal
if (GetLastNumberCrossSections(&np) != RTNORM)
{
acedSSFree(ss);
return RTERROR;
}

// recorrer el ss
for (int i = 0; i < sslen; i++)
{
// tomar el nombre de la entidad
if (acedSSName(ss, i, ename) != RTNORM)
{
acedSSFree(ss);
acdbFail(_T("\nError al tomar el nombre de la entidad
CPLEDERCrossSections [GetFirstNumberCrossSections][acedSSName]."));
return RTERROR;
}

// cambiar el nombre por el ObjectId
if (acdbGetObjectId(ID, ename) != Acad::eOk)
{
acedSSFree(ss);
acdbFail(_T("\nError al tomar el ObjectId de la
entidad CPLEDERCrossSections
[GetFirstNumberCrossSections][acdbGetObjectId]."));
return RTERROR;
}

// abrir el objeto para lectura
if (acdbOpenObject(pSecciones, ID, AcDb::kForRead) !=
Acad::eOk)
{
acedSSFree(ss);
acdbFail(_T("\nError al abrir el Objeto
CPLEDERCrossSections
[GetFirstNumberCrossSections][acdbOpenObject]."));
return RTERROR;
}

// tomar el nmero de orden
pSecciones->IdCrossSections(n);
pSecciones->close();

// chequearlo
if (n > np)
np = n;

} // for i

acedSSFree(ss);

*nfirst = np;
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


281

return RTNORM;

}

int CPLEDERSeccionesTransversales::GetLastNumberCrossSections(long
*nlast)
/*--------------------------------------------------------------------
Ingreso : nlast= Puntero a Long para sobreescribir el resultado
Salida : nlast= nmero de orden del ltimo S.T. Si no hay
Secciones Transv. definidos tomar el valor de cero.
RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Busca el nmero de orden el ltimo nombre de la S.T. en
el Drawing.
-------------------------------------------------------------------*/
{
struct resbuf *filter; // resbufs

// preparar el filtro para seleccionar las S.T.
filter = acutBuildList(
RTDXF0, _T("CPLEDERCrossSections"),
8, PLEDER_CAPA_SECCIONTRANSVERSAL,
0);

if (filter == NULL)
{
acdbFail(_T("\nError al construir el filtro
[GetLastNumberCrossSections][acutBuildList]."));
return RTERROR;
}

ads_name ss; // ss
long sslen = 0; // longitud del ss

// seleccionar los puntos definidos
if (acedSSGet(_T("_X"), NULL, NULL, filter, ss) != RTNORM)
{
// no hay Secciones Transversales definifos en el drawing
*nlast = 0;
acutRelRb(filter);
return RTNORM;
}

acutRelRb(filter);

// tomar la longitud del ss
if (acedSSLength(ss, &sslen) != RTNORM)
{
acedSSFree(ss);
acdbFail(_T("\nError al tomar la longitud del conjunto de
seleccin [GetLastNumberCrossSections][acedSSLength]."));
return RTERROR;
}

CPLEDERCrossSections *pSecciones;
ads_name ename;
AcDbObjectId ID;
long np = 0;
double n;

Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


282
// recorrer el ss
for (int i = 0; i < sslen; i++)
{
// tomar el nombre de la entidad
if (acedSSName(ss, i, ename) != RTNORM)
{
acedSSFree(ss);
acdbFail(_T("\nError al tomar el nombre de la entidad
CPLEDERCrossSections [GetLastNumberCrossSections][acedSSName]."));
return RTERROR;
}

// cambiar el nombre por el ObjectId
if (acdbGetObjectId(ID, ename) != Acad::eOk)
{
acedSSFree(ss);
acdbFail(_T("\nError al tomar el ObjectId de la
entidad CPLEDERCrossSections
[GetLastNumberCrossSections][acdbGetObjectId]."));
return RTERROR;
}

// abrir el objeto para lectura
if (acdbOpenObject(pSecciones, ID, AcDb::kForRead) !=
Acad::eOk)
{
acedSSFree(ss);
acdbFail(_T("\nError al abrir el Objeto
CPLEDERCrossSections [GetLastNumberCrossSections][acdbOpenObject]."));
return RTERROR;
}

// tomar el nmero de orden
pSecciones->IdCrossSections(n);
pSecciones->close();

// chequearlo
if (n > np)
np = n;

} // for i

acedSSFree(ss);

*nlast = np;

return RTNORM;

}


int CPLEDERSeccionesTransversales::GetNumberofCrossSections(long
*numberof)
/*--------------------------------------------------------------------
Ingreso : numberof = Puntero a Long para sobreescribir el
resultado
Salida : numberof = (Out) el nmero de secciones
transversales que se encontraron.
RTNORM si no se produce ningn error.
RTERROR en otro caso.
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


283
Propsito : Contabiliza el nmero de Secciones Transversales en el
Drawing. Nos podramos basar en el buffer, pero para asegurar la
bsqueda nos basaremos en el Drawing,ya que el buffer puede no estar
actualizado.
-------------------------------------------------------------------*/
{

struct resbuf *filter; // resbufs

// preparar el filtro para seleccionar las secciones
transversales.
filter = acutBuildList(
RTDXF0, _T("CPLEDERCrossSections"),
8, PLEDER_CAPA_SECCIONTRANSVERSAL,
0);

if (filter == NULL)
{
acdbFail(_T("\nError al construir el filtro
[GetNumberofCrossSections][acutBuildList]."));
return RTERROR;
}
ads_name ss; // ss
long sslen = 0; // longitud del ss

// seleccionar las secciones transversales definidos
if (acedSSGet(_T("_X"), NULL, NULL, filter, ss) != RTNORM)
{
// no hay secciones transversales definifos en el drawing
*numberof = 0;
acutRelRb(filter);
return RTNORM;
}

acutRelRb(filter);

// tomar la longitud del ss
if (acedSSLength(ss, &sslen) != RTNORM)
{
acedSSFree(ss);
acdbFail(_T("\nError al tomar la longitud del conjunto de
seleccin [GetNumberofCrossSections][acedSSLength]."));
return RTERROR;
}

acedSSFree(ss);

*numberof = sslen;

return RTNORM;
}

int CPLEDERSeccionesTransversales::GetCrossSectionsAttributes()
/*--------------------------------------------------------------------
Ingreso : vaco
Salida : RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Obtiene el valor del dimetro de los crculos y la altura
del texto de las entidades Secciones transversales. Los valores son
alojados en las variables miembro m_STDiameter y m_STTextHeight.
-------------------------------------------------------------------*/
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


284
{

struct resbuf *filter; // resbufs

// preparar el filtro para seleccionar las secciones
transversales.
filter = acutBuildList(
RTDXF0, _T("CPLEDERCrossSections"),
8, PLEDER_CAPA_SECCIONTRANSVERSAL,
0);

if (filter == NULL)
{
acdbFail(_T("\nError al construir el filtro
[GetCrossSectionsAttributes][acutBuildList]."));
return RTERROR;
}

ads_name ss; // ss
long sslen = 0; // longitud del ss

// seleccionar las secciones transversales definidos
if (acedSSGet(_T("_X"), NULL, NULL, filter, ss) != RTNORM)
{
// no hay secciones transversales definifos en el drawing
m_STTextHeight = 0.2;
m_STDiameter = 0.2;
acutRelRb(filter);
return RTNORM;
}

acutRelRb(filter);

// tomar la longitud del ss
if (acedSSLength(ss, &sslen) != RTNORM)
{
acedSSFree(ss);
acdbFail(_T("\nError al tomar la longitud del conjunto de
seleccin [GetCrossSectionsAttributes][acedSSLength]."));
return RTERROR;
}

CPLEDERCrossSections *pSecciones;
ads_name ename;
AcDbObjectId ID;


// tomar el valor de los atributos de la primera S.T.

// tomar el nombre de la entidad
if (acedSSName(ss, 0, ename) != RTNORM)
{
acedSSFree(ss);
acdbFail(_T("\nError al tomar el nombre de la entidad
CPLEDERCrossSections [GetCrossSectionsAttributes][acedSSName]."));
return RTERROR;
}

acedSSFree(ss);

// cambiar el nombre por el ObjectId
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


285
if (acdbGetObjectId(ID, ename) != Acad::eOk)
{
acdbFail(_T("\nError al tomar el ObjectId de la entidad
CPLEDERCrossSections
[GetCrossSectionsAttributes][acdbGetObjectId]."));
return RTERROR;
}

// abrir el objeto para lectura
if (acdbOpenObject(pSecciones, ID, AcDb::kForRead) != Acad::eOk)
{
acdbFail(_T("\nError al abrir el Objeto
CPLEDERCrossSections [GetCrossSectionsAttributes][acdbOpenObject]."));
return RTERROR;
}

// tomar el Dimetro
if (pSecciones->diameter(m_STDiameter) != Acad::eOk)
{
pSecciones->close();
acdbFail(_T("\nError al tomar los atributos del nodo
[GetCrossSectionsAttributes]."));
return RTERROR;
}

// tomar la altura del texto
if (pSecciones->textHeight(m_STTextHeight) != Acad::eOk)
{
pSecciones->close();
acdbFail(_T("\nError al tomar los atributos del nodo
[GetCrossSectionsAttributes]."));
return RTERROR;
}

pSecciones->close();

return RTNORM;
}

int CPLEDERSeccionesTransversales::ZoomCrossSections(double IdnST)
/*--------------------------------------------------------------------
Ingreso : IdnST: Nombre o Id de la seccin trasnversal
Salida : RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Realiza un encuadre o zoom de la seccin transversal
solicitada.
-------------------------------------------------------------------*/
{
long numof;

// Adquirir las secciones transverales
if (AcquireCrossSections(&numof) != RTNORM)
{
acutPrintf(_T("\nERROR PLEDER: [AcquireCrossSections]"));
return RTERROR;
}

if (!m_theFirstST)
{
acutPrintf(_T("\nERROR PLEDER: No hay secciones
transversales definidos."));
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


286
return RTERROR;
}

CrossSectionsBufer *nb;
bool encontrado;

encontrado = false;

// Buscar la seccin transversal
for (nb = m_theFirstST; nb != NULL; nb = nb->nbnext)
{
if (nb->m_IdST == IdnST)
{
encontrado = true;
break;
}
}

if (!encontrado)
{
acutPrintf(_T("\nPLEDER ERROR: Seccin transveral no
encontrado."));
FreeAllCrossSectionsBufs();
return RTERROR;
}

// Encuadrar la secin transversal en una ventana +- 2 metros

ads_point p1, p2;

p1[X] = (nb->m_GlobalVertice[0].x - 5);
p1[Y] = (nb->m_GlobalVertice[0].y + 2);
p2[X] = (nb->m_GlobalVertice[nb->m_nVST-1].x + 5);
p2[Y] = nb->m_HminG -2; // Punto mnimo.

struct resbuf *rb;

// Invocar el comando zoom window
rb = acutBuildList (
RTSTR, _T("_zoom"),
RTSTR, _T("_w"),
RTPOINT, p1,
RTPOINT, p2,
0);

if (rb != NULL)
{
acedCmd(rb);
acutRelRb(rb);
}

FreeAllCrossSectionsBufs();

return RTNORM;
}

int CPLEDERSeccionesTransversales::GetIdCrossSectionsAttributes(double
IdST, long *nVST, AcGePoint2dArray& LvertexArray,

AcGePoint2dArray& GvertexArray, double *LL,
double *LC, double *LR,
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


287

double *NL,double *NC, double *NR, long *BL,
long *BR, double *CC, double *CE)
/*--------------------------------------------------------------------
Ingreso : IdnST: Nombre o Id de la seccin transversal
Salida : RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Recepciona los atributos de la seccin transversal desde
su ID
--------------------------------------------------------------------*/
{
long numof;

// Adquirir las secciones transverales
if (AcquireCrossSections(&numof) != RTNORM)
{
acutPrintf(_T("\nERROR PLEDER:[AcquireCrossSections]"));
return RTERROR;
}

if (!m_theFirstST)
{
acutPrintf(_T("\nERROR PLEDER: No hay secciones
transversales definidos."));
return RTERROR;
}

CrossSectionsBufer *nb;
bool encontrado;

encontrado = false;

// Buscar la seccin transversal
for (nb = m_theFirstST; nb != NULL; nb = nb->nbnext)
{
if (nb->m_IdST == IdST)
{
encontrado = true;
break;
}
}

if (!encontrado)
{
acutPrintf(_T("\nPLEDER ERROR: Seccin Transversal no
encontrado."));
FreeAllCrossSectionsBufs();
return RTERROR;
}

// Guarda los atributos de la seccin transversal de la posicin
encontrada (nb)

*nVST = nb->m_nVST;

*LL = nb->m_LL;
*LC = nb->m_LC;
*LR = nb->m_LR;

*NL = nb->m_NL;
*NC = nb->m_NC;
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


288
*NR = nb->m_NR;

*BL = nb->m_BL;
*BR = nb->m_BR;

*CC = nb->m_CC;
*CE = nb->m_CE;

AcGePoint2d vertex;

// Guardar los vrtices
for(int i =0; i < *nVST; i++)
{
// Vrtices globales
vertex[X] = nb->m_GlobalVertice[i].x;
vertex[Y] = nb->m_GlobalVertice[i].y;
GvertexArray.append(vertex);

// Vrtices locales
vertex[X] = nb->m_LocalVertice[i].x;
vertex[Y] = nb->m_LocalVertice[i].y;
LvertexArray.append(vertex);
}

FreeAllCrossSectionsBufs();

return RTNORM;
}

int
CPLEDERSeccionesTransversales::GetIdCrossSectionsAttributesSocavacion(
double IdST, int *Material, int *CoefProb,

double *CoefMaterial)
/*--------------------------------------------------------------------
Ingreso : IdnST: Nombre o Id de la seccin transversal
Salida : RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Recepciona los atributos de la seccin transversal desde
su ID
-------------------------------------------------------------------*/
{
long numof;

// Adquirir las secciones transverales
if (AcquireCrossSectionsSocavacion(&numof) != RTNORM)
{
acutPrintf(_T("\nERROR
PLEDER:[AcquireCrossSectionsSocavacion]"));
return RTERROR;
}

if (!m_theFirstSOC)

{
acutPrintf(_T("\nERROR PLEDER: No hay secciones
transversales definidos."));
return RTERROR;
}
CrossSectionsSocavacionBufer *nb;
bool encontrado = false;
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


289

// Buscar la seccin transversal
for (nb = m_theFirstSOC; nb != NULL; nb = nb->nbnext)
{
if (nb->m_IdST == IdST)
{
encontrado = true;
break;
}
}

if (!encontrado)
{
acutPrintf(_T("\nPLEDER ERROR: Seccin Transversal no
encontrado."));
FreeAllCrossSectionsSocavacionBufs();
return RTERROR;
}

// Guarda los atributos de la seccin transversal de la posicin
encontrada (nb)
*Material = nb->m_Material;
*CoefProb = nb->m_CoefProb;
*CoefMaterial = nb->m_CoefMaterial;

FreeAllCrossSectionsSocavacionBufs();
return RTNORM;
}

int CPLEDERSeccionesTransversales::GetMinVertice(double *VerticeY,
long nVert, double *Hmin)
/*--------------------------------------------------------------------
Ingreso : VerticeY = Lista de Coordenadas de las S. T. Totales
nVert = Lista de Nmeros de los Vrtices de las Secciones
Transversales.
Hmin = Lista de Los Vrtices Mnimos de las S. T.
Salida : RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Busca los Vrtices Mnimos y Mximos de una lista.
-------------------------------------------------------------------*/
{
int j;
float Mayor, Menor;

Mayor = VerticeY[1];
Menor = VerticeY[1];

for (j = 1; j <= nVert; j++)
{
if ( Menor > VerticeY[j])
{
Menor = VerticeY[j];
}

if(Mayor < VerticeY[j])
{
Mayor = VerticeY[j];
}
*Hmin = Menor; // vrtice mnimo.
//Hmax = Mayor; //

Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


290
}//For j

return RTNORM;
}

int CPLEDERSeccionesTransversales::GetAreaPerimeter(double
CotaTirante, AcGePoint3dArray LvertexArray,

long BL, long BR, double *ALF , double *AMC, double *ARF,

double *PLF, double *PMC, double *PRF, double *A, double *P)
/*--------------------------------------------------------------------
Ingreso : CotaTirante = Cota del tirante de la seccin
transversal. Dato importante para determinar el rea y el permetro
de la S.T.
LvertexArray = Vrtices de la seccin transversal (X, Y,
Manning)

Salida : Area = rea Transversal para un tirante que se ingres
(CotaTirante).
Permetro = Permetro Transversal para un tirante que se ingres
(CotaTirante).
K = Factor de transportabilidad.
Beta = Factor de correcin.
RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Calcula el rea y el Permetro de una seccin transversal
a partir de una cota tirante.
--------------------------------------------------------------------*/

{
int j,k;
double Ai = 0.0, At = 0.0, Ad = 0.0, // reas
: Izquierda, trapecios, y derecha.
Pi = 0.0, Pt = 0.0, Pd = 0.0; // Permetros
: Izquierda, trapecios y derecha.

*ALF= 0.0, *AMC= 0.0, *ARF= 0.0, // Areas: Left, Central y
Right.
*PLF= 0.0, *PMC= 0.0, *PRF= 0.0; // Perimentro: Left, Central
y Right.


AcGePoint3dArray Vertices; // Variable local para reasignar
los vrtices.
AcGePoint3d Vertex;

// Traslada los valores hacia la nueva lista YY , XX
for (k = 0; k < LvertexArray.length(); k++)
{
Vertex[X] = LvertexArray[k].x;
Vertex[Y] = LvertexArray[k].y;
Vertex[Z] = LvertexArray[k].z;

Vertices.append(Vertex);
}

bool InundIzquierdo = false; // Por defecto NO Existe Inundacin
bool InundDerecho = false; // Por defecto NO Existe Inundacin


Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


291
// Inundacin Margen Izquierda?
if (CotaTirante > LvertexArray[0].y)
{
Vertices.removeAll();

Vertex[X] = LvertexArray[0].x;
Vertex[Y] = CotaTirante;
Vertex[Z] = LvertexArray[0].z;

Vertices.append(Vertex);
for (k =0; k < LvertexArray.length(); k++)
{
Vertex[X] = LvertexArray[k].x;
Vertex[Y] = LvertexArray[k].y;
Vertex[Z] = LvertexArray[k].z;

Vertices.append(Vertex);
}
InundIzquierdo = true;
}

// Inundacin Margen Derecha?
if (CotaTirante > LvertexArray[LvertexArray.length()-1].y)
{
Vertex[X] = LvertexArray[LvertexArray.length()-1].x;
Vertex[Y] = CotaTirante;
Vertex[Z] = LvertexArray[LvertexArray.length()-1].z;

Vertices.append(Vertex);
InundDerecho = true;
}

// Inicio del recorrido de los vrtices.
for (j = 0; j < Vertices.length()-1; j++)
{
// Condicin para calcular en el tringulo izquierdo
if ((CotaTirante <= Vertices[j].y) && (CotaTirante >=
Vertices[j+1].y))
{
// Clculo: Area del tringulo izquierdo
Ai = Ai + pow((CotaTirante-
Vertices[j+1].y),2)*(Vertices[j+1].x-
Vertices[j].x)/(2.0*(Vertices[j].y-Vertices[j+1].y));

// Clculo: Permetro del tringulo izquierdo
Pi = Pi + sqrt(pow((CotaTirante -
Vertices[j+1].y),2)+ pow((CotaTirante-
Vertices[j+1].y)*(Vertices[j+1].x-Vertices[j].x)/(Vertices[j].y-
Vertices[j+1].y),2));

// Condiciones para las reas y permetros en los
bancos y central
if (j+1 < BL)
{
*ALF = *ALF + Ai + At + Ad; *PLF = *PLF + Pi +
Pt + Pd;
Ai = 0.0; At = 0.0; Ad = 0.0; Pi = 0.0; Pt =
0.0; Pd = 0.0;
}
if (j+1 >= BL && j+1 < BR)
{
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


292
*AMC = *AMC + Ai + At + Ad; *PMC = *PMC + Pi +
Pt + Pd;
Ai = 0.0; At = 0.0; Ad = 0.0; Pi = 0.0; Pt =
0.0; Pd = 0.0;
}
if (j+1 >= BR )
{
*ARF = *ARF + Ai + At + Ad; *PRF = *PRF + Pi +
Pt + Pd;
Ai = 0.0; At = 0.0; Ad = 0.0; Pi = 0.0; Pt =
0.0; Pd = 0.0;
}

bool condicion = true;
while (condicion)
{
j++;

// Condicin para calcular en los trapecios.
if (Vertices[j+1].y <= CotaTirante)
{
// Clculo: Area del trapecio
At= At + ((2.0*CotaTirante -
Vertices[j].y- Vertices[j+1].y)/2.0)*(Vertices[j+1].x-Vertices[j].x);

// Clculo: Permetro del trapecio
Pt = Pt + sqrt(pow((Vertices[j+1].x-
Vertices[j].x),2) + pow((Vertices[j+1].y - Vertices[j].y),2));

// Condiciones para las reas y
permetros en los bancos y central
if (j+1 < BL)
{
*ALF = *ALF + Ai + At + Ad; *PLF =
*PLF + Pi + Pt + Pd;
Ai = 0.0; At = 0.0; Ad = 0.0; Pi =
0.0; Pt = 0.0; Pd = 0.0;
}
if (j+1 >= BL && j+1 < BR)
{
*AMC = *AMC + Ai + At + Ad; *PMC =
*PMC + Pi + Pt + Pd;
Ai = 0.0; At = 0.0; Ad = 0.0; Pi =
0.0; Pt = 0.0; Pd = 0.0;
}
if (j+1 >= BR )
{
*ARF = *ARF + Ai + At + Ad; *PRF =
*PRF + Pi + Pt + Pd;
Ai = 0.0; At = 0.0; Ad = 0.0; Pi =
0.0; Pt = 0.0; Pd = 0.0;
}
}

// Condicin para calcular en el tringulo derecho.
if (Vertices[j+1].y >= CotaTirante)
{
// Clculo: Area del tringulo derecho.
Ad = Ad + pow((CotaTirante-
Vertices[j].y),2)*(Vertices[j+1].x-
Vertices[j].x)/(2.0*(Vertices[j+1].y-Vertices[j].y));
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


293
//acutPrintf(_T("\nValores de Area
Derecha: %0.6f"), Ad);

// Clculo: Permetro del tringulo derecho.
Pd = Pd + sqrt(pow((CotaTirante -
Vertices[j].y),2)+ pow((CotaTirante-Vertices[j].y)*(Vertices[j+1].x-
Vertices[j].x)/(Vertices[j+1].y-Vertices[j].y),2));

// Condiciones para las reas y
permetros en los bancos y central
if (j+1 < BL)
{
*ALF = *ALF + Ai + At + Ad; *PLF =
*PLF + Pi + Pt + Pd;
Ai = 0.0; At = 0.0; Ad = 0.0; Pi =
0.0; Pt = 0.0; Pd = 0.0;
}
if (j+1 >= BL && j+1 < BR)
{
*AMC = *AMC + Ai + At + Ad; *PMC =
*PMC + Pi + Pt + Pd;
Ai = 0.0; At = 0.0; Ad = 0.0; Pi =
0.0; Pt = 0.0; Pd = 0.0;
}
if (j+1 >= BR )
{
*ARF = *ARF + Ai + At + Ad; *PRF =
*PRF + Pi + Pt + Pd;
Ai = 0.0; At = 0.0; Ad = 0.0; Pi =
0.0; Pt = 0.0; Pd = 0.0;
}
}

if (Vertices[j+1].y < CotaTirante)
{
condicion = true;
}
else
{
condicion = false;
}

}//While
} //if
}//For j

// Area y permetro total (A,P)
*A = *ALF + *AMC + *ARF;
*P = *PLF + *PMC + *PRF;
return RTNORM;
}
int CPLEDERSeccionesTransversales::GetAreaPoligon(AcGePoint2dArray
VPoligon, double *Area)
/*--------------------------------------------------------------------
Ingreso : VPoligon = Vrtices de un poligono
Salida : Area = rea Transversal de un polgono

RTNORM si no se produce ningn error.
RTERROR en otro caso.
Propsito : Calcula el rea de un polgono
--------------------------------------------------------------------*/
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


294

{
*Area = 0.0;
long N = VPoligon.length();

for(int i = 0; i < N -1; i++)
{
*Area = *Area + VPoligon[i].x * VPoligon[i+1].y -
VPoligon[i].y * VPoligon[i+1].x;
}

*Area = 0.5* (*Area + VPoligon[N-1].x * VPoligon[0].y -
VPoligon[N-1].y * VPoligon[0].x);

acutPrintf(_T("\n El area es= %0.3f "), *Area);

return RTNORM;
}



PLEDERSeccionesTransversalesDlg.cpp

// PLEDERSeccionesTransversalesDlg.cpp: archivo de implementacin
//
#include "stdafx.h"
#include "PLEDERSeccionesTransversales.h"
#include "PLEDERSeccionesTransversalesDlg.h"
#include "PLEDERHidraBuffer.h"

#include "PLEDERRecursosCad.h"
#include "PLEDERHidraSecTrasnv.h"

//Objetos PLEDER
CRecursosCad RecursosST;
CPLEDERSeccionesTransversales CS;
HidraSecTrasnv GeometriaST;


// Cuadro de dilogo de CPLEDERSeccionesTransversalesDlg

IMPLEMENT_DYNAMIC(CPLEDERSeccionesTransversalesDlg, CAdUiDialog)

CPLEDERSeccionesTransversalesDlg::CPLEDERSeccionesTransversalesDlg(CWn
d* pParent /*=NULL*/)
: CAdUiDialog(CPLEDERSeccionesTransversalesDlg::IDD, pParent)
{
m_bFullRow = TRUE;
m_bGridLines = TRUE;
m_bCheckboxes = TRUE;

m_LI = _T("20.00");
m_LC = _T("20.00");
m_LD = _T("20.00");

m_BI = _T("1");
m_BD = _T("");

m_NI = _T("0.025");
m_NC = _T("0.017");
m_ND = _T("0.025");
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


295

m_CC = _T("0.1");
m_CE = _T("0.3");

m_Material = 1; // Tipo de material, Cohesivo = 0, No
Cohesivo = 1.
m_CoefProb = 6; // Coeficiente de probabilidad de gasto.
(Ubicacin)
m_CoefMaterial = 0.0; // Peso especfico dimetro medio
del material de fondo.
}

CPLEDERSeccionesTransversalesDlg::~CPLEDERSeccionesTransversalesDlg()
{
}

void CPLEDERSeccionesTransversalesDlg::DoDataExchange(CDataExchange*
pDX)
{
CAdUiDialog::DoDataExchange(pDX);
// List
DDX_Control(pDX, IDC_LIST1, m_wndList);

// Cajas de Texto.
DDX_Control(pDX, IDC_EDIT_LI, m_Edit_LI);
DDX_Control(pDX, IDC_EDIT_LC, m_Edit_LC);
DDX_Control(pDX, IDC_EDIT_LD, m_Edit_LD);

DDX_Control(pDX, IDC_EDIT_BI, m_Edit_BI);
DDX_Control(pDX, IDC_EDIT_BD, m_Edit_BD);

DDX_Control(pDX, IDC_EDIT_NI, m_Edit_NI);
DDX_Control(pDX, IDC_EDIT_NC, m_Edit_NC);
DDX_Control(pDX, IDC_EDIT_ND, m_Edit_ND);

DDX_Control(pDX, IDC_EDIT_CC, m_Edit_CC);
DDX_Control(pDX, IDC_EDIT_CE, m_Edit_CE);

//ComboBox.
DDX_Control(pDX, IDC_COMBO_ST, m_Combo_ST);

// Botones (CAD)
DDX_Control(pDX, IDC_BUTTON_ST, m_PickButton_ST);

DDX_Control(pDX, IDC_BUTTON_LI, m_PickButton_LI);
DDX_Control(pDX, IDC_BUTTON_LC, m_PickButton_LC);
DDX_Control(pDX, IDC_BUTTON_LD, m_PickButton_LD);

DDX_Control(pDX, IDC_BUTTON_BI, m_PickButton_BI);
DDX_Control(pDX, IDC_BUTTON_BD, m_PickButton_BD);

// Botones Men
//DDX_Control(pDX, IDR_MENU_ST, OnCommandSTN);

}

BEGIN_MESSAGE_MAP(CPLEDERSeccionesTransversalesDlg, CAdUiDialog)

ON_EN_KILLFOCUS(IDC_EDIT_BI, OnKillfocusEdit_BI)
ON_EN_KILLFOCUS(IDC_EDIT_BD, OnKillfocusEdit_BD)

Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


296
ON_EN_KILLFOCUS(IDC_EDIT_CC, OnKillfocusEdit_CC)
ON_EN_KILLFOCUS(IDC_EDIT_CE, OnKillfocusEdit_CE)

// Combo Box
ON_CBN_SELCHANGE(IDC_COMBO_ST, OnKillfocusComboST)


// Botones incluidos cad
ON_BN_CLICKED(IDC_BUTTON_ST, OnButtonST)

ON_BN_CLICKED(IDC_BUTTON_LI, OnButtonLI)
ON_BN_CLICKED(IDC_BUTTON_LC, OnButtonLC)
ON_BN_CLICKED(IDC_BUTTON_LD, OnButtonLD)

ON_BN_CLICKED(IDC_BUTTON_BI, OnButtonBI)
ON_BN_CLICKED(IDC_BUTTON_BD, OnButtonBD)

// Botones
ON_BN_CLICKED(IDC_BUTTON_APLICAR, OnCommandAPLICAR)

// Botones, incluido del men
ON_COMMAND(ID_ST_NUEVO, OnCommandSTN)

//ON_BN_CLICKED(IDOK,
&CPLEDERLluviaEscorrentiaDlg::OnBnClickedOk)
END_MESSAGE_MAP()


// Controladores de mensajes de CPLEDERSeccionesTransversalesDlg

BOOL CPLEDERSeccionesTransversalesDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Insertando las grillas
m_wndList.SetHeadings(_T("N, 30; Estacin, 80; Elevacin,
80"));
for (int i = 0; i < 500; i++)
{
m_wndList.InsertItem(0, _T(""), _T(""),_T(""));
}

m_wndList.SetGridLines(TRUE);
//m_wndList.SetCheckboxes(TRUE);

// Inicializa Cajas de texto
m_Edit_LI.SetWindowText(m_LI);
m_Edit_LC.SetWindowText(m_LC);
m_Edit_LD.SetWindowText(m_LD);

m_Edit_BI.SetWindowText(m_BI);
m_Edit_BI.SetRange(1, MAX_VERTICES);
m_Edit_BD.SetWindowText(m_BD);
m_Edit_BD.SetRange(1, MAX_VERTICES);

m_Edit_NI.SetWindowText(m_NI);
m_Edit_NC.SetWindowText(m_NC);
m_Edit_ND.SetWindowText(m_ND);

m_Edit_CC.SetWindowText(m_CC);
m_Edit_CC.SetRange(0, 1);
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


297

m_Edit_CE.SetWindowText(m_CE);
m_Edit_CE.SetRange(0, 1);

// Inicializa Bombo box
//m_Combo_ST.SetCurSel(0);

// Inicializa el boton tipo Cad
m_PickButton_ST.AutoLoad();

m_PickButton_LI.AutoLoad();
m_PickButton_LC.AutoLoad();
m_PickButton_LD.AutoLoad();

m_PickButton_BI.AutoLoad();
m_PickButton_BD.AutoLoad();

if (!m_pSections)
{
// Sin secciones transversales
return TRUE;
}

long i;
CString str_IdST;

// Cargar los valores a la ventana
for (i = 0; i < m_Sections_len; i++)
{
// Preparar las cadenas
acdbRToS((m_pSections + i)->IdST, 2, 2,
str_IdST.GetBuffer(80));

// Insertar el Id de la S.T. al combo de la ventana
m_Combo_ST.AddString(str_IdST);
m_Combo_ST.SetCurSel(i);
}

// Verificar si existe S.T. en el Drawing
if (m_Sections_len <= 0)
{
acutPrintf(_T("\nNo Existen Secciones Transversales
definidos."));
return TRUE;
}

// Llama a los atributos de la S.T.
OnKillfocusComboST();

return TRUE;
}

void CPLEDERSeccionesTransversalesDlg::OnKillfocusEdit_BI()
{
m_Edit_BI.Convert();
if (!m_Edit_BI.Validate())
{
::AfxMessageBox(_T("Entrada no vlida, Fuera de rango"));
m_Edit_BI.SetFocus();
m_Edit_BI.SetSel(0, -1);
}
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


298
CString str;
m_Edit_BI.GetWindowText(m_BI);
acdbRToS(::_wtof(m_BI), 2, 0, str.GetBuffer(80));
m_Edit_BI.SetWindowText(str);
}

void CPLEDERSeccionesTransversalesDlg::OnKillfocusEdit_BD()
{
m_Edit_BD.Convert();
if (!m_Edit_BD.Validate())
{
::AfxMessageBox(_T("Entrada no vlida, Fuera de rango"));
m_Edit_BD.SetFocus();
m_Edit_BD.SetSel(0, -1);
}
CString str;
m_Edit_BD.GetWindowText(m_BD);
acdbRToS(::_wtof(m_BD), 2, 0, str.GetBuffer(80));
m_Edit_BD.SetWindowText(str);
}

void CPLEDERSeccionesTransversalesDlg::OnKillfocusEdit_CC()
{
m_Edit_CC.Convert();
if (!m_Edit_CC.Validate())
{
::AfxMessageBox(_T("Entrada no vlida, rango = 0 @ 1"));
m_Edit_CC.SetFocus();
m_Edit_CC.SetSel(0, -1);
}
CString str;
m_Edit_CC.GetWindowText(m_CC);
acdbRToS(::_wtof(m_CC), 2, 2, str.GetBuffer(80));
m_Edit_CC.SetWindowText(str);
}

void CPLEDERSeccionesTransversalesDlg::OnKillfocusEdit_CE()
{
m_Edit_CE.Convert();
if (!m_Edit_CE.Validate())
{
::AfxMessageBox(_T("Entrada no vlida, rango = 0 @ 1"));
m_Edit_CE.SetFocus();
m_Edit_CE.SetSel(0, -1);
}
CString str;
m_Edit_CE.GetWindowText(m_CE);
acdbRToS(::_wtof(m_CE), 2, 2, str.GetBuffer(80));
m_Edit_CE.SetWindowText(str);
}

void CPLEDERSeccionesTransversalesDlg::OnKillfocusComboST()
{
double Id_ST;
// Obtener el valor del combo seleccionado
int nIndex = m_Combo_ST.GetCurSel();
m_Combo_ST.GetLBText(nIndex,m_Id_ST);
Id_ST = _wtof(m_Id_ST);

double X1, Y1, LL, LC, LR, NL, NC, NR, CC, CE;
long BL, BR, nVST;
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


299

AcGePoint2dArray GlobalVertices;
AcGePoint2dArray LocalVertices;

// Coger los atributos de la S.T. desde su id
CS.GetIdCrossSectionsAttributes(Id_ST, &nVST, LocalVertices,
GlobalVertices, &LL, &LC, &LR, &NL, &NC,
&NR, &BL, &BR,
&CC, &CE);

// Borra todo los datos de la grilla.
m_wndList.DeleteAllItems(ItemdataProc, (LPARAM)this);

TCHAR strN[100];
TCHAR strX[100];
TCHAR strY[100];

// Inserta los valores de los vrtices en la grilla
for (int i=0; i< nVST; i++)
{
acdbRToS(i+1 , 2, 0, strN);
acdbRToS(LocalVertices[i].x , 2, 3, strX);
acdbRToS(LocalVertices[i].y , 2, 3, strY);
m_wndList.InsertItem(nVST, strN, strX, strY);
}

// Inserta los valores de la S.T. en la ventana
m_LI.Format(_T("%g"), LL ); m_Edit_LI.SetWindowText(m_LI);
m_LC.Format(_T("%g"), LC ); m_Edit_LC.SetWindowText(m_LC);
m_LD.Format(_T("%g"), LR ); m_Edit_LD.SetWindowText(m_LD);

m_NI.Format(_T("%g"), NL ); m_Edit_NI.SetWindowText(m_NI);
m_NC.Format(_T("%g"), NC ); m_Edit_NC.SetWindowText(m_NC);
m_ND.Format(_T("%g"), NR ); m_Edit_ND.SetWindowText(m_ND);

m_BI.Format(_T("%d"), BL ); m_Edit_BI.SetWindowText(m_BI);
m_BD.Format(_T("%d"), BR ); m_Edit_BD.SetWindowText(m_BD);

m_CC.Format(_T("%g"), CC ); m_Edit_CC.SetWindowText(m_CC);
m_CE.Format(_T("%g"), CE ); m_Edit_CE.SetWindowText(m_CE);

// Realizar un Zoom a la seccin transversal
CS.ZoomCrossSections(Id_ST);
}

void CPLEDERSeccionesTransversalesDlg::OnButtonST()
{
if(m_Combo_ST.GetCount() == 0)
{
::AfxMessageBox(_T("PLEDER ERROR: \n Ingresar Una Nueva
seccin"));
return;
}
//Esconde el dilogo
BeginEditorCommand();

// Coge el valor del combo para asignar el nombre de la S.T.
int nIndex = m_Combo_ST.GetCurSel();
m_Combo_ST.GetLBText(nIndex,m_Id_ST);
m_IdST = _wtof(m_Id_ST);

Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


300
// Coge los atributos de los textos de la ventana.
double LI, // Longitud izquierdo.
LC, // Longitud central.
LD, // Longitud derecho.
NI, // Coeficiente de manning Banco izquierdo.
NC, // Coeficiente de manning canal central.
ND, // Coeficiente de manning Banco derecho
CC, // Coeficiente de contraccin.
CE; // Coeficiente de expansin.
Adesk::Int32 BI, // Lmite banco izquierdo.
BD; // lmite banco derecho.

m_Edit_LI.GetWindowTextW(m_LI);
LI = _wtof(m_LI);
m_Edit_LD.GetWindowTextW(m_LD);
LD = _wtof(m_LD);
m_Edit_LC.GetWindowTextW(m_LC);
LC = _wtof(m_LC);

m_Edit_NI.GetWindowTextW(m_NI);
NI = _wtof(m_NI);
m_Edit_NC.GetWindowTextW(m_NC);
NC = _wtof(m_NC);
m_Edit_ND.GetWindowTextW(m_ND);
ND = _wtof(m_ND);

m_Edit_CC.GetWindowTextW(m_CC);
CC = _wtof(m_CC);
m_Edit_CE.GetWindowTextW(m_CE);
CE = _wtof(m_CE);

m_Edit_BI.GetWindowTextW(m_BI);
BI = _wtof(m_BI);
m_Edit_BD.GetWindowTextW(m_BD);
BD = _wtof(m_BD);


ads_point punto, p1;
ads_name nombrep;
int retval, valor1, valor2;
double X1, Y1, area, elevacion;
double Diametro = 0.2;
double AlturaTexto = 0.2;

//Inicializa las variables de sistema.
RecursosST.InicializarVariables();

// crear las capas del proyecto
if (RecursosST.PlederCapas() != RTNORM)
{
RecursosST.RestaurarVariables();
CompleteEditorCommand();
return;
}

// Selecciona la polilinea
if (acedEntSel(_T("\nSeleccionar Polilinea: "), nombrep, punto)
!= RTNORM)
{
RecursosST.RestaurarVariables();
acutPrintf(_T("\nError al seleccionar la Polilinea"));
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


301
CompleteEditorCommand();
return;
}

// Llama al punto de referencia en la seccion transversal
if (acedGetPoint (NULL, _T("\nIngrese un Punto de Referencia"),
p1) != RTNORM )
{
RecursosST.RestaurarVariables();
acutPrintf(_T("\nError al ingresar el Punto"));
CompleteEditorCommand();
return;
}

acedInitGet (RSG_NONULL | RSG_NOZERO, _T(""));

// Ingreso del valor Distancia X
valor1 = acedGetReal( _T("\nDistancia X: " ), &X1);
switch (valor1)
{
case RTCAN: //Puls ESC
{
RecursosST.RestaurarVariables();
acutPrintf(_T("\nError al ingresar el Punto X"));
CompleteEditorCommand();
return;
}
case RTNONE: //Puls solamente ENTER
{
RecursosST.RestaurarVariables();
acutPrintf(_T("\nError al ingresar el Punto X"));
CompleteEditorCommand();
return;
}
case RTKWORD: //Ingres un texto
{
RecursosST.RestaurarVariables();
acutPrintf(_T("\nError al ingresar el Punto X"));
CompleteEditorCommand();
return;
}

case RTNORM: //Puls valor correcto
break;
default:
return;
}//switch (valor1)

// Ingreso del valor Cota Y
valor2 = acedGetReal(_T("\nCota Y: " ), &Y1);
switch (valor2)
{
case RTCAN: //Puls ESC
{
RecursosST.RestaurarVariables();
acutPrintf(_T("\nError al ingresar el Punto Y"));
CompleteEditorCommand();
return;
}
case RTNONE: //Puls solamente ENTER
{
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


302
RecursosST.RestaurarVariables();
acutPrintf(_T("\nError al ingresar el Punto Y"));
CompleteEditorCommand();
return;
}
case RTKWORD: //Ingres un texto
{
RecursosST.RestaurarVariables();
acutPrintf(_T("\nError al ingresar el Punto Y"));
CompleteEditorCommand();
return;
}

case RTNORM: //Puls valor correcto
break;

default:
return;
} //switch (valor2)

long nVST = 0;
if ( GeometriaST.NumeroVerticesPolilinea(nombrep, &nVST) !=
RTNORM)
{
acdbFail(_T("\nError [NumeroVerticesPolilinea()]"));
CompleteEditorCommand();
return;
}

// Inserta a la caja texto en la valor de nVST
m_BD.Format(_T("%d"), nVST );
m_Edit_BD.SetWindowText(m_BD);
BD = nVST;

double *CX= new double[nVST+1]; // Lista de Coordenadas X
(Estacin)
double *CY= new double[nVST+1]; // Lista de Coordenadas Y
(Elevacin)

if ( GeometriaST.LeerVerticesPolilinea(nombrep, CX, CY) !=
RTNORM)
{
acdbFail(_T("\nError [NumeroVerticesPolilinea()]"));
CompleteEditorCommand();
return;
}

double HminG = 0, HminL;
// Vrtice mnimo global
if (CS.GetMinVertice(CY, nVST, &HminG)!= RTNORM)
{
acdbFail(_T("\nError [GetMinVertice]"));
CompleteEditorCommand();
return;
}

// Vrtice mnimo local
HminL = Y1-(p1[Y] - HminG);

// Crea la entidad personalizada PLEDERCrossSections desde
ObjectDBX
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


303
CPLEDERCrossSections *pPolilinea;
// crear la nueva entidad
try
{
pPolilinea = new CPLEDERCrossSections(p1, X1, Y1, m_IdST,
nVST, CX, CY, HminG, HminL, Diametro, AlturaTexto,
LI,
LC, LD, NI, NC, ND, BI, BD, CC, CE, m_Material,

m_CoefProb, m_CoefMaterial);
}
catch(const std::bad_alloc&)
{
acdbFail(_T("\nError de asignacin de memoria
[pPolilinea]."));
return ;
}

AcDbObjectId ID;

// aadirla a la base de datos de AutoCAD
if
(RecursosST.AadirEntidadBlockTableRecord((AcDbEntity*)pPolilinea, ID)
!= Acad::eOk)
{
if (pPolilinea)
{
delete pPolilinea;
}

acdbFail(_T("\nError al aadir la entidad a la Base de
Datos [AadirEntidadBlockTableRecord]."));
return ;
}

//Alimenta los datos a la grilla.
TCHAR strN[100];
TCHAR strX[100];
TCHAR strY[100];

// Borra todo los datos de la grilla.
m_wndList.DeleteAllItems(ItemdataProc, (LPARAM)this);

ads_point v1;
for (int i = 1; i<= nVST; i++)
{
v1[X]= X1 + (CX[i] - p1[X]); // Suma la posicin inicial X
+ la distancia X
v1[Y]= Y1 - (p1[Y] - CY[i]); // Resta la posicin inicial Y
- la distancia Y

acdbRToS(i , 2, 0, strN);
acdbRToS(v1[X], 2, 3, strX);
acdbRToS(v1[Y], 2, 3, strY);
m_wndList.InsertItem(nVST, strN,strX,strY);

X1= v1[X]; Y1= v1[Y];
p1[X]= CX[i]; p1[Y]= CY[i];
}

Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


304
RecursosST.RestaurarVariables(); //Restaura las variables de
sistema

//Retorna al dilogo
CompleteEditorCommand();

delete [] CX;
delete [] CY;
}

void CPLEDERSeccionesTransversalesDlg::OnButtonLI()
{
double L = OnButtonDistancia();
m_LI.Format(_T("%g"), L );
m_Edit_LI.SetWindowText(m_LI);

}

void CPLEDERSeccionesTransversalesDlg::OnButtonLC()
{
double L = OnButtonDistancia();
m_LC.Format(_T("%g"), L );
m_Edit_LC.SetWindowText(m_LC);
}


void CPLEDERSeccionesTransversalesDlg::OnButtonLD()
{
double L = OnButtonDistancia();
m_LD.Format(_T("%g"), L );
m_Edit_LD.SetWindowText(m_LD);
}

void CPLEDERSeccionesTransversalesDlg::OnButtonBI()
{
double Id_ST;
// Obtener el valor del combo seleccionado
int nIndex = m_Combo_ST.GetCurSel();
m_Combo_ST.GetLBText(nIndex,m_Id_ST);
Id_ST = _wtof(m_Id_ST);

double X1, Y1, LL, LC, LR, NL, NC, NR, CC, CE;
long BL, BR;

AcGePoint2dArray GlobalVertices;
AcGePoint2dArray LocalVertices;
long nVST;

// Coger los atributos de la S.T. desde su id
CS.GetIdCrossSectionsAttributes(Id_ST, &nVST, LocalVertices,
GlobalVertices, &LL, &LC, &LR, &NL, &NC,
&NR, &BL, &BR,
&CC, &CE);

//Esconde el dilogo
BeginEditorCommand();

int nV;
acedInitGet(RSG_NONULL, NULL);

// Solicitar el nmero de Vrtice
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


305
if (acedGetInt(_T("\nVrtice del banco izquierdo: "), &nV) !=
RTNORM)
{
CompleteEditorCommand();
return;
}

// No se permite nV = 0
if (nV <= 0)
{
::AfxMessageBox(_T("\nEntrada no vlida."));
CompleteEditorCommand();
return;
}

// Verifica si esta dentro del rango de vrtices
if (nV > nVST)
{
::AfxMessageBox(_T("\nEntrada no vlida. \nFuera de
rango"));
CompleteEditorCommand();
return;
}

// Si todo es correcto
CompleteEditorCommand();

m_BI.Format(_T("%d"), nV );
m_Edit_BI.SetWindowText(m_BI);
}

void CPLEDERSeccionesTransversalesDlg::OnButtonBD()
{
double Id_ST;
// Obtener el valor del combo seleccionado
int nIndex = m_Combo_ST.GetCurSel();
m_Combo_ST.GetLBText(nIndex,m_Id_ST);
Id_ST = _wtof(m_Id_ST);

double X1, Y1, LL, LC, LR, NL, NC, NR, CC, CE;
long BL, BR;

AcGePoint2dArray GlobalVertices;
AcGePoint2dArray LocalVertices;
long nVST;

// Coger los atributos de la S.T. desde su id
CS.GetIdCrossSectionsAttributes(Id_ST, &nVST, LocalVertices,
GlobalVertices, &LL, &LC, &LR, &NL, &NC,
&NR, &BL, &BR,
&CC, &CE);

//Esconde el dilogo
BeginEditorCommand();

int nVD;
acedInitGet(RSG_NONULL, NULL);

// Solicitar el nmero de Vrtice
if (acedGetInt(_T("\nVrtice del banco derecho: "), &nVD) !=
RTNORM)
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


306
{
CompleteEditorCommand();
return;
}

// No se permite nVD = 0
if (nVD <= 0)
{
::AfxMessageBox(_T("\nEntrada no vlida."));
CompleteEditorCommand();
return;
}

// Verifica si est dentro del rango de vrtices
if (nVD > nVST)
{
::AfxMessageBox(_T("\nEntrada no vlida. \nFuera de
rango"));
CompleteEditorCommand();
return;
}

// Verifica si el nV (derecho) > nV (izquierdo)
m_Edit_BI.GetWindowText(m_BI);

if( _wtof(m_BI) >= nVD)
{
::AfxMessageBox(_T("\nEntrada no vlida. \nN de vrtice
Izq. > N de vrtice Der.)"));
CompleteEditorCommand();
return;
}

// Si todo es correcto
CompleteEditorCommand();

m_BD.Format(_T("%d"), nVD );
m_Edit_BD.SetWindowText(m_BD);

}

// Nueva Seccin Transversal
void CPLEDERSeccionesTransversalesDlg::OnCommandSTN()
{
//Declaracion de Objetos dilogos
CPLEDERST1Dlg dlgSTN(CWnd::FromHandle(adsw_acadMainWnd()));
if (dlgSTN.DoModal() != IDOK)
{
acutPrintf(_T("\nPLEDER: Se Cancel la Operacin"));
return;
}

double IdST, iST;
IdST = _wtof(dlgSTN.m_NST);

for(int i = 0; i < m_Combo_ST.GetCount(); i++)
{
m_Combo_ST.GetLBText(i,m_Id_ST);
iST = _wtof(m_Id_ST);

// Verifica si hay duplicidad
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


307
if (IdST == iST)
{
::AfxMessageBox(_T("PLEDER ERROR: \nNo se permite
duplicar"));
acutPrintf(_T("\nNo se permite duplicar"));
return;
}
}
m_Combo_ST.AddString(dlgSTN.m_NST);

int pos = 0;
// Buscar la posicion para la selecin actual
for(int i = 0; i < m_Combo_ST.GetCount(); i++)
{
m_Combo_ST.GetLBText(i,m_Id_ST); iST = _wtof(m_Id_ST);
if (IdST == iST) { break;}
pos++;
}
m_Combo_ST.SetCurSel(pos);

// Borra todo los datos de la grilla.
m_wndList.DeleteAllItems(ItemdataProc, (LPARAM)this);

}

double CPLEDERSeccionesTransversalesDlg::OnButtonDistancia()
/*--------------------------------------------------------------------
Ingreso : Vaco.
Salida : Vaco
Propsito : Calcula la distancia entre varios puntos
--------------------------------------------------------------------*/
{
//Esconde el dilogo
BeginEditorCommand();

ads_point p1, p2;
int contador =0;
double L=0.0 , ls=0.0;

//Coge el Primer Punto P1
if (acedGetPoint (NULL, _T("\nIngrese el primer Punto [cota
menor]"), p1) != RTNORM )
{
acutPrintf(_T("\nPLEDER: !ERROR!\nal ingresar el Punto"));
CompleteEditorCommand();
return RTERROR;
}

while (true)
{
// Cogen los puntos siguienes
if (acedGetPoint(p1, _T("\nSiguiente punto: "), p2) !=
RTNORM)
{
CompleteEditorCommand();
return L;
}
contador++; // siguiente

ls = acutDistance(p1,p2);
L = L + ls;
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


308
acutPrintf(_T("\nDistancia %d: %0.3f"), contador, ls);
p1[X]=p2[X]; p1[Y]=p2[Y]; p1[Z]=0.0;

}//while
return RTNORM;
}

void CPLEDERSeccionesTransversalesDlg::OnCommandAPLICAR()
{
// Coge los atributos de los textos de la ventana.
Double LL, // Longitud izquierdo.
LC, // Longitud central.
LR, // Longitud derecho.
NL, // Coeficiente de manning Banco izquierdo.
NC, // Coeficiente de manning canal central.
NR, // Coeficiente de manning Banco derecho
CC, // Coeficiente de contraccin.
CE; // Coeficiente de expansin.

Adesk::Int32 BL, // Lmite banco izquierdo.
BR; // Lmite banco derecho.
double IdST; // Id Seccion Transversal

// Obtener los valores de las cajas de texto
m_Edit_LI.GetWindowTextW(m_LI); LL = _wtof(m_LI);
m_Edit_LC.GetWindowTextW(m_LC); LC = _wtof(m_LC);
m_Edit_LD.GetWindowTextW(m_LD); LR = _wtof(m_LD);

m_Edit_NI.GetWindowTextW(m_NI); NL = _wtof(m_NI);
m_Edit_NC.GetWindowTextW(m_NC); NC = _wtof(m_NC);
m_Edit_ND.GetWindowTextW(m_ND); NR = _wtof(m_ND);

m_Edit_CC.GetWindowTextW(m_CC); CC = _wtof(m_CC);
m_Edit_CE.GetWindowTextW(m_CE); CE = _wtof(m_CE);

m_Edit_BI.GetWindowTextW(m_BI); BL = _wtof(m_BI);
m_Edit_BD.GetWindowTextW(m_BD); BR = _wtof(m_BD);

if(BL >= BR)
{
::AfxMessageBox(_T("PLEDER ERROR: \nVrtices del banco
izquierdo >= al derecho"));
//acutPrintf(_T("\n....La Aplicacin de datos no fue
exitosa...."));
return;
}

// Obtener el valor del combo seleccionado
int nIndex = m_Combo_ST.GetCurSel();
m_Combo_ST.GetLBText(nIndex,m_Id_ST); IdST = _wtof(m_Id_ST);

struct resbuf *filter; // resbufs

// Preparar el filtro para seleccionar las S.T.
filter = acutBuildList(
RTDXF0, _T("CPLEDERCrossSections"),
8, PLEDER_CAPA_SECCIONTRANSVERSAL,
0);

if (!filter)
{
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


309
acdbFail(_T("\nError al construir el filtro
[acutBuildList]."));
return ;
}

ads_name ss; // ss
long sslen = 0; // longitud del ss

// seleccionar las secciones transversales definidas
if (acedSSGet(_T("_X"), NULL, NULL, filter, ss) != RTNORM)
{
acutPrintf(_T("\nNo hay secciones transversales definidas
en el drawing"));
acutRelRb(filter);
return;
}

acutRelRb(filter);

// tomar la longitud del ss
if (acedSSLength(ss, &sslen) != RTNORM)
{
acedSSFree(ss);
acdbFail(_T("\nError al tomar la longitud del conjunto de
seleccin [acedSSLength]."));
return;
}

CPLEDERCrossSections *pSecciones;
ads_name ename;
AcDbObjectId ID;

// recorrer el ss
for (int i = 0; i < sslen; i++)
{
// tomar el nombre de la entidad
if (acedSSName(ss, i, ename) != RTNORM)
{
acedSSFree(ss);
acdbFail(_T("\nError al tomar el nombre de la entidad
CPLEDERCrossSections [acedSSName]."));
return;
}

// cambiar el nombre por el ObjectId
if (acdbGetObjectId(ID, ename) != Acad::eOk)
{
acedSSFree(ss);
acdbFail(_T("\nError al tomar el ObjectId de la
entidad CPLEDERCrossSections [acdbGetObjectId]."));
return;
}

// abrir el objeto para escritura
if (acdbOpenObject(pSecciones, ID, /*AcDb::kForRead*/
AcDb::kForWrite) != Acad::eOk)
{
acedSSFree(ss);
acdbFail(_T("\nError al abrir el Objeto
CPLEDERCrossSections [acdbOpenObject]."));
return ;
Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


310
}

// chequear el tipo de objeto
if (pSecciones->isKindOf(CPLEDERCrossSections::desc()) !=
Adesk::kTrue)
{
pSecciones->close();
acedSSFree(ss);
acdbFail(_T("\nError Objeto CPLEDERCrossSections "));
return;
}

double Id_Seccion;

// Tomar el ID para comparar
pSecciones->IdCrossSections(Id_Seccion);

// Si procede, actualizar los datos de la S.T.
if (Id_Seccion == IdST)
{
pSecciones->SetLengthLeft(LL);
pSecciones->SetLengthCenter(LC);
pSecciones->SetLengthRight(LR);

pSecciones->SetManningLeft(NL);
pSecciones->SetManningCenter(NC);
pSecciones->SetManningRight(NR);

pSecciones->SetBankLeft(BL);
pSecciones->SetBankRight(BR);

pSecciones->SetCoeficentCont(CC);
pSecciones->SetCoeficentExp(CE);

}// if

pSecciones->close();

} // for i

acedSSFree(ss);
acutPrintf(_T("\n....Datos modificados en forma Exitosa...."));
return;
}

BOOL CPLEDERSeccionesTransversalesDlg::ItemdataProc(DWORD dwData,
LPARAM lParam)
{
// TODO: Process your item data here

// Please return TRUE to proceed the deletion, return FALSE to
abort.
return TRUE;
}

/*-----------------------------------------------------------------
------------------------------------------------------------------*/
// PLEDERST1Dlg.cpp: archivo de implementacin

// Cuadro de dilogo de CPLEDERST1Dlg

Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


311
IMPLEMENT_DYNAMIC(CPLEDERST1Dlg, CDialog)

CPLEDERST1Dlg::CPLEDERST1Dlg(CWnd* pParent /*=NULL*/)
: CDialog(CPLEDERST1Dlg::IDD, pParent)
{
m_Edit_NST.SetFocus();
//m_Edit_NST.SetSel(0, -1);
}

CPLEDERST1Dlg::~CPLEDERST1Dlg()
{

}

void CPLEDERST1Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
// Cajas de Texto.
DDX_Control(pDX, IDC_EDIT_NST, m_Edit_NST);
}


BEGIN_MESSAGE_MAP(CPLEDERST1Dlg, CDialog)
ON_BN_CLICKED(IDOK, &CPLEDERST1Dlg::OnBnClickedOk)
END_MESSAGE_MAP()


// Controladores de mensajes de CPLEDERST1Dlg
void CPLEDERST1Dlg::OnBnClickedOk()
{
// Coge los valores despues de pulsar OK

// Cajas de texto
m_Edit_NST.GetWindowText(m_NST);

CDialog::OnOK();
//algo.EnableWindow( FALSE );
}

Apendice B. HIDR

AULICA C

ODIGO FUENTE C++


312
Apendice C
HIDR

AULICA FLUVIAL C

ODIGO
FUENTE C++
EL componente Hidraulica Fluvial se organiza en 02 libreras con m ultiples funciones y
01 ventana graca
313
ARCHIVOS DE CABECERA:


PLEDERSocavacionGeneral.h

#pragma once

class CPLEDERSocavacionGeneral
{
public:
CPLEDERSocavacionGeneral(void);
~CPLEDERSocavacionGeneral(void);

public:

// Clculo de los datos para el coeficiente X.
int SGDatosMaterial(int Material, float *DatosMaterialX, float
*DatosMaterialY);

// Clculo de la variable X.
int SGCoeficienteX(int Material, float CoefMaterial, float *X);

// Clculo del tirante medio H0 encada vrtice de la seccin
transversal
int SGVerticesH0(AcGePoint2dArray Vertices, AcGePoint2dArray&
VerticesH0);

// Clculo de la socavacin mediante el mtodo de Lischtvan-
Lebeviev.
int SGLischtvanLebeviev(float Q, float A, float P,
AcGePoint2dArray VerticesH0, int Material, int CoefProb, float
CoefMaterial, float X, AcGePoint2dArray& VerticesSoc);

};


PLEDERSocavacionGeneralDlg.h

//--------------------------------------------------------------------
//----- PLEDERSocavacionGeneralDlg.h : Declaration of the
CPLEDERSocavacionGeneralDlg
//--------------------------------------------------------------------
#pragma once

//--------------------------------------------------------------------
class FGVResultadosBufer;
#include "adui.h"
#include "PLEDERReportCtrl.h"
#include "resource.h"

//--------------------------------------------------------------------
class CPLEDERSocavacionGeneralDlg : public CAdUiDialog
{
DECLARE_DYNAMIC (CPLEDERSocavacionGeneralDlg)

public:
static BOOL CALLBACK ItemdataProc(DWORD dwData, LPARAM lParam);
CPLEDERSocavacionGeneralDlg (CWnd *pParent =NULL, HINSTANCE
hInstance =NULL) ;
virtual ~CPLEDERSocavacionGeneralDlg();

Apendice C. HIDR

AULICA FLUVIAL C

ODIGO FUENTE C++


314
enum { IDD = IDD_HFLUVIAL_SOC} ;

// Cajas de texto
CAcUiNumericEdit m_Edit_SOCPes;
CString m_SOCPes;

CAcUiNumericEdit m_Edit_SOCDm;
CString m_SOCDm;

CAcUiNumericEdit m_Edit_SOCCoef;
CString m_SOCCoef;

// Combo Box
CComboBox m_Combo_SOCId;
CString m_SOCId;
double m_STSOCId;

CComboBox m_Combo_SOCProbg;
CString m_SOCProbg;

// Radio
CButton m_Button_MaterialNoCoh;
CButton m_Button_MaterialCoh;
int m_Material;

protected:
virtual void DoDataExchange (CDataExchange *pDX) ;
afx_msg LRESULT OnAcadKeepFocus (WPARAM, LPARAM) ;
afx_msg void OnButtonTRPunto();

afx_msg void OnKillfocusEdit_SOCPes();
afx_msg void OnKillfocusEdit_SOCDm();

// Radio (Cuando existan cambios en el radio)
afx_msg void OnRadioMaterialCohesivo();
afx_msg void OnRadioMaterialNoCohesivo();

// Para los combos
afx_msg void OnKillfocusComboSOCId();
afx_msg void OnKillfocusComboSOCProbg();

// Botones
afx_msg void OnCommandSOCAPLICAR();

public:
virtual BOOL OnInitDialog();

public:
FGVResultadosBufer* m_theFirstT;
struct Socavacion* m_pSocavacion; // Struct buffer para
los resultados.
long m_Socavacion_len;

DECLARE_MESSAGE_MAP()
afx_msg void OnEnChangeEditSoccoef();
};





Apendice C. HIDR

AULICA FLUVIAL C

ODIGO FUENTE C++


315

ARCHIVOS Cpp:

PLEDERSocavacionGeneral.cpp
#include "StdAfx.h"
#include "PLEDERSocavacionGeneral.h"
#include "PLEDERMetodosNumericos.h"

CMetodosNumericos CN;

CPLEDERSocavacionGeneral::CPLEDERSocavacionGeneral(void)
{

}

CPLEDERSocavacionGeneral::~CPLEDERSocavacionGeneral(void)
{

}
int CPLEDERSocavacionGeneral::SGDatosMaterial(int Material, float
*DatosMaterialX, float *DatosMaterialY)
/*--------------------------------------------------------------------
Ingreso : Material = Tipo de material del lecho
1 -> No cohesivo.
0 -> Cohesivo.
Salida : DatosMaterialX = Recibe en una lista los valores de las
coordenadas X. Dependiendo del tipo del
material.
DatosMaterialX = Recibe en una lista los valores de las
coordenadas Y. Dependiendo del tipo del
material.
Propsito : Prepara los datos en listas, dependiendo del tipo de
material del lecho
.------------------------------------------------------------------ */
{
int i;
float Coh_X[26] =
{0.80,0.83,0.86,0.88,0.90,0.93,0.96,0.98,1.00,1.04,1.08,1.12,1.1
6,1.20,1.24,1.28,1.34,1.40,1.46,1.52,1.58,1.64,1.71,1.80,1.89,2.
00};
float Coh_Y[26] =
{0.52,0.51,0.50,0.49,0.48,0.47,0.46,0.45,0.44,0.43,0.42,0.41,0.4
0,0.39,0.38,0.37,0.36,0.35,0.34,0.33,0.32,0.31,0.30,0.29,0.28,0.
27};
float NoCoh_X[25] =
{0.05,0.15,0.50,1.00,1.50,2.50,4.00,6.00,8.00,10.00,15.00,20.00,
25.00,40.00,60.00,90.00,140.00,190.00,250.00,310.00,370.00,450.0
0,570.00,750.00,1000.00};
float NoCoh_Y[25] =
{0.43,0.42,0.41,0.40,0.39,0.38,0.37,0.36,0.35,0.34,0.33,0.32,0.3
1,0.30,0.29,0.28,0.27,0.26,0.25,0.24,0.23,0.22,0.21,0.20,0.19};

if(Material == 1) // material no Cohesivo.
{
for (i=1; i<= 25; i++)
{
DatosMaterialX[i] = NoCoh_X[i-1];
DatosMaterialY[i] = NoCoh_Y[i-1];

}
} // if 1
Apendice C. HIDR

AULICA FLUVIAL C

ODIGO FUENTE C++


316

if(Material == 0) // material Cohesivo.
{
for (i=1; i<= 26; i++)
{
DatosMaterialX[i] = Coh_X[i-1];
DatosMaterialY[i] = Coh_Y[i-1];

}
} // if 0

return RTNORM;
}

int CPLEDERSocavacionGeneral::SGCoeficienteX(int Material, float
CoefMaterial, float *X)
/*--------------------------------------------------------------------
Ingreso : Material = Tipo de material del lecho.
1 -> No cohesivo.
0 -> Cohesivo.
CoefMaterial = Coeficiente o dato del material del
lecho.
Salida : X = Valor interpolado linealmente, segn la tabla que
se expone en la teora (Captulo V)
Propsito : Calcula el coeficiente X, necesario para la frmula de la
socavacin.
-------------------------------------------------------------------*/
{
int i;
float Y;
float *DatosMaterialX = new float[28];
float *DatosMaterialY = new float[28];

if(Material == 1) // Material No Cohesivo.
{
if(CoefMaterial > 0.0 & CoefMaterial < 0.05) // mm
{
// Se ajusta a un slo valor = 0.43
*X = 0.43;
}

if(CoefMaterial >= 0.05 & CoefMaterial <= 1000.0) // mm
{
// Recibe los datos del material para una
interpolacin,
SGDatosMaterial(Material, DatosMaterialX,
DatosMaterialY);

// Interpolaciones lineales.
*X =
CN.InterpolacionLineal(25,DatosMaterialY,DatosMaterialX,
CoefMaterial);
}

if(CoefMaterial > 1000.0) // mm
{
// Para R2 = 0.99 (polinmica)
*X = 0.00000013*CoefMaterial*CoefMaterial -
0.00024369*CoefMaterial + 0.30353418;
}
} // if 1
Apendice C. HIDR

AULICA FLUVIAL C

ODIGO FUENTE C++


317

if(Material == 0) // Material Cohesivo.
{
if(CoefMaterial > 0.0 & CoefMaterial < 0.80) // Ton/m3
{
// Para R2 = 0.99 (polinmica) y = -0.097311x3 +
0.538865x2 - 1.113115x + 1.116961
*X = -0.097311*CoefMaterial*CoefMaterial*CoefMaterial
+ 0.538865*CoefMaterial*CoefMaterial -
1.113115*CoefMaterial + 1.116961;
}

if(CoefMaterial >= 0.80 & CoefMaterial <= 2.00) // Ton/m3
{
// Recibe los datos del material para una
interpolacin,
SGDatosMaterial(Material, DatosMaterialX,
DatosMaterialY);

// Interpolaciones lineales.
*X =
CN.InterpolacionLineal(25,DatosMaterialY,DatosMateria
lX, CoefMaterial);
}

if(CoefMaterial > 2.0) // Ton/m3
{
// Para R2 = 0.99 (polinmica) y = -0.097311x3 +
0.538865x2 - 1.113115x + 1.116961
*X = -0.097311*CoefMaterial*CoefMaterial*CoefMaterial
+ 0.538865*CoefMaterial*CoefMaterial -
1.113115*CoefMaterial+ 1.116961;
}
} // if 0


delete [] DatosMaterialX;
delete [] DatosMaterialY;

return RTNORM;
}

int CPLEDERSocavacionGeneral::SGVerticesH0(AcGePoint2dArray Vertices,
AcGePoint2dArray& VerticesH0)
{
int k;
AcGePoint2d Vertex;

// Calculo de los tirantes medios (H0)
for (k = 0; k < Vertices.length()-1; k++)
{
Vertex[X] = (2*Vertices[0].y - Vertices[k].y -
Vertices[k+1].y )/2.0;
Vertex[Y] = 0.0;
VerticesH0.append(Vertex);

//acutPrintf(_T("\nH0[%d]: %0.3f"), k, VerticesH0[k].x );
}

return RTNORM;
}
Apendice C. HIDR

AULICA FLUVIAL C

ODIGO FUENTE C++


318
int CPLEDERSocavacionGeneral::SGLischtvanLebeviev(float Q, float A,
float P, AcGePoint2dArray VerticesH0, int Material, int CoefProb,

float CoefMaterial, float X,AcGePoint2dArray& VerticesSoc)
/*-------------------------------------------------------------------
Ingreso : Q = Caudal del flujo (m3/s)
A = Area del flujo calculado en la seccin
transversal.
P = Permetro del flujo calculado en la seccin
transversal.
VerticesH0;= Vrtices de H0 = (Hj+ Hj+1)/2
Material = Tipo de material del lecho.
1 -> No cohesivo.
0 -> Cohesivo.
CoefProb = Coeficiente de probabilidad de ocurrencia del
flujo.
CoefMaterial= Coeficiente o dato del material del lecho.
X = Valor interpolado linealmente, segn la tabla
Salida :
Propsito : Calcula la altura de la socavacin general en la seccin
transversal.
--------------------------------------------------------------------*/
{
float v, // Coeficiente de
probabilidad de gasto
Exp23 = 2.0/3.0,
Exp53 = 5.0/3.0,
ExpMatNc= 0.28,
ExpMatC = 1.18,
Exp1X = 1.0/(1.0+X);

int k;
AcGePoint2d Vertex;

switch (CoefProb)
{
case 0:
{
v = 0.77;
break;
}

case 1:
{
v = 0.82;
break;
}

case 2:
{
v = 0.86;
break;
}

case 3:
{
v = 0.90;
break;
}

case 4:
Apendice C. HIDR

AULICA FLUVIAL C

ODIGO FUENTE C++


319
{
v = 0.94;
break;
}

case 5:
{
v = 0.97;
break;
}

case 6:
{
v = 1.00;
break;
}

case 7:
{
v = 1.03;
break;
}

case 8:
{
v = 1.05;
break;
}

case 9:
{
v = 1.07;
break;
}
default:
acutPrintf(_T("\nFuera de Rango"));

} //switch (CoefProb)


float H0, Hs;

if (Material == 1) // Frmula para un lecho No Cohesivo
{
for (k = 0; k < VerticesH0.length(); k++)
{
H0 = VerticesH0[k].x;
Hs = Q*pow(P,Exp23)*pow(H0, Exp53)/
(0.68*v*pow(A,Exp53)*pow(CoefMaterial,ExpMatNc));
Hs = pow(Hs,Exp1X);

Vertex[X] = 0.0;
Vertex[Y] = Hs;
VerticesSoc.append(Vertex);
} // for k
} //if

if (Material == 0) // Frmula para lecho Cohesivo
{
for (k = 0; k < VerticesH0.length(); k++)
{
Apendice C. HIDR

AULICA FLUVIAL C

ODIGO FUENTE C++


320
H0 = VerticesH0[k].x;
Hs = Q*pow(P,Exp23)*pow(H0,Exp53)/
(0.60*v*pow(A,Exp53)*pow(CoefMaterial,ExpMatC));
Hs = pow(Hs,Exp1X);
Vertex[X] = 0.0;
Vertex[Y] = Hs;
VerticesSoc.append(Vertex);
} // For k
} // if

return RTNORM;
}


PLEDERSocavacionGeneralDlg.cpp


//--------------------------------------------------------------------
//----- PLEDERTranSediFormaFondoDlg.cpp : Implementation of
CPLEDERTranSediFormaFondoDlg
//--------------------------------------------------------------------
#include "StdAfx.h"
#include "resource.h"
#include "PLEDERSocavacionGeneralDlg.h"
#include "PLEDERSeccionesTransversales.h"
#include "PLEDERHidraBuffer.h"
#include "PLEDERRecursosCad.h"
#include "axlock.h" // Tabla

CRecursosCad RSOC;
CPLEDERSeccionesTransversales STSOC;


//--------------------------------------------------------------------
---------
IMPLEMENT_DYNAMIC (CPLEDERSocavacionGeneralDlg, CAdUiDialog)

BEGIN_MESSAGE_MAP(CPLEDERSocavacionGeneralDlg, CAdUiDialog)
ON_MESSAGE(WM_ACAD_KEEPFOCUS, OnAcadKeepFocus)

ON_EN_KILLFOCUS(IDC_EDIT_SOCPes, OnKillfocusEdit_SOCPes)
ON_EN_KILLFOCUS(IDC_EDIT_SOCDm, OnKillfocusEdit_SOCDm)

// Botones incluidos cad
ON_BN_CLICKED(IDC_BUTTON_SOCApl, OnCommandSOCAPLICAR)


// Radios (cambios en los Radios)
ON_BN_CLICKED(IDC_RADIO_SOCCoh, OnRadioMaterialCohesivo)
ON_BN_CLICKED(IDC_RADIO_SOCNocoh, OnRadioMaterialNoCohesivo)

// Combo Box
ON_CBN_SELCHANGE(IDC_COMBO_SOCId, OnKillfocusComboSOCId)
ON_CBN_SELCHANGE(IDC_COMBO_SOCProbg, OnKillfocusComboSOCProbg)

ON_EN_CHANGE(IDC_EDIT_SOCCoef,
&CPLEDERSocavacionGeneralDlg::OnEnChangeEditSoccoef)
END_MESSAGE_MAP()


//--------------------------------------------------------------------
Apendice C. HIDR

AULICA FLUVIAL C

ODIGO FUENTE C++


321
CPLEDERSocavacionGeneralDlg::CPLEDERSocavacionGeneralDlg (CWnd
*pParent /*=NULL*/, HINSTANCE hInstance /*=NULL*/) : CAdUiDialog
(CPLEDERSocavacionGeneralDlg::IDD, pParent, hInstance)
{
m_Material = 0;
m_SOCPes = _T("0.0");
m_SOCDm = _T("0.0");
m_SOCCoef = _T("1.00");

}
CPLEDERSocavacionGeneralDlg::~CPLEDERSocavacionGeneralDlg()
{
}

//--------------------------------------------------------------------
void CPLEDERSocavacionGeneralDlg::DoDataExchange (CDataExchange *pDX)
{
CAdUiDialog::DoDataExchange (pDX) ;

// Cajas de Texto.
DDX_Control(pDX, IDC_EDIT_SOCPes, m_Edit_SOCPes);
DDX_Control(pDX, IDC_EDIT_SOCDm, m_Edit_SOCDm);
DDX_Control(pDX, IDC_EDIT_SOCCoef, m_Edit_SOCCoef);

// Radio
DDX_Control(pDX, IDC_RADIO_SOCNocoh, m_Button_MaterialNoCoh);
DDX_Control(pDX, IDC_RADIO_SOCCoh, m_Button_MaterialCoh);
//DDX_Radio(pDX, IDC_RADIO_SOCNocoh, m_Material);

//ComboBox
DDX_Control(pDX, IDC_COMBO_SOCId, m_Combo_SOCId);
DDX_Control(pDX, IDC_COMBO_SOCProbg, m_Combo_SOCProbg);

}

//--------------------------------------------------------------------
//----- Needed for modeless dialogs to keep focus.
//----- Return FALSE to not keep the focus, return TRUE to keep the
focus
LRESULT CPLEDERSocavacionGeneralDlg::OnAcadKeepFocus (WPARAM, LPARAM)
{
return (TRUE) ;
}

BOOL CPLEDERSocavacionGeneralDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Inicializar cajas de texto
m_Edit_SOCPes.SetWindowText(m_SOCPes);
m_Edit_SOCPes.SetRange(0,100);

m_Edit_SOCDm.SetWindowText(m_SOCDm);
m_Edit_SOCDm.SetRange(0,10000);

m_Edit_SOCCoef.SetWindowText(m_SOCCoef);
// Activar radio Material No Cohesivo
m_Button_MaterialNoCoh.SetCheck(1);

// Activa y desactiva para material Cohesivo.
m_Edit_SOCPes.EnableWindow(0);
Apendice C. HIDR

AULICA FLUVIAL C

ODIGO FUENTE C++


322
m_Edit_SOCDm.EnableWindow(1);
m_Material = 1;


// Por defecto en la posicin 6 (1%)
m_Combo_SOCProbg.SetCurSel(6);

// Cargar los Ids de las secciones transversales.
if (!m_pSocavacion)
{
// Sin secciones transversales
return TRUE;
}

long i;
CString str_IdST;

// Cargar los valores a la ventana
for (i = 0; i < m_Socavacion_len; i++)
{
// Preparar las cadenas
acdbRToS((m_pSocavacion + i)->IdST, 2, 3,
str_IdST.GetBuffer(80));

// Insertar el Id de la S.T. al combo de la ventana
m_Combo_SOCId.AddString(str_IdST);
m_Combo_SOCId.SetCurSel(i);
}

// Verificar si existe S.T. en el Drawing
if (m_Socavacion_len <= 0)
{
acutPrintf(_T("\nNo Existen Secciones Transversales
definidos."));
return TRUE;
}

// Llama a los atributos de la S.T.
OnKillfocusComboSOCId();

return TRUE;
}

void CPLEDERSocavacionGeneralDlg::OnKillfocusEdit_SOCPes()
{
m_Edit_SOCPes.Convert();
if (!m_Edit_SOCPes.Validate())
{
::AfxMessageBox(_T("Entrada no vlida, Fuera de rango"));
m_Edit_SOCPes.SetFocus();
m_Edit_SOCPes.SetSel(0, -1);
}
CString str;
m_Edit_SOCPes.GetWindowText(m_SOCPes);
acdbRToS(::_wtof(m_SOCPes), 2, 3, str.GetBuffer(80));
m_Edit_SOCPes.SetWindowText(str);
}

void CPLEDERSocavacionGeneralDlg::OnKillfocusEdit_SOCDm()
{
m_Edit_SOCDm.Convert();
Apendice C. HIDR

AULICA FLUVIAL C

ODIGO FUENTE C++


323
if (!m_Edit_SOCDm.Validate())
{
::AfxMessageBox(_T("Entrada no vlida, Fuera de rango"));
m_Edit_SOCDm.SetFocus();
m_Edit_SOCDm.SetSel(0, -1);
}
CString str;
m_Edit_SOCDm.GetWindowText(m_SOCDm);
acdbRToS(::_wtof(m_SOCDm), 2, 3, str.GetBuffer(80));
m_Edit_SOCDm.SetWindowText(str);
}

void CPLEDERSocavacionGeneralDlg::OnRadioMaterialCohesivo()
{
// Activa y desactiva las casillas de la ventana
m_Edit_SOCPes.EnableWindow(1);
m_Edit_SOCDm.EnableWindow(0);
m_Material = 0;
}

void CPLEDERSocavacionGeneralDlg::OnRadioMaterialNoCohesivo()
{
// Activa las casillas de la ventana
m_Edit_SOCPes.EnableWindow(0);
m_Edit_SOCDm.EnableWindow(1);
m_Material = 1;
}

void CPLEDERSocavacionGeneralDlg::OnEnChangeEditSoccoef()
{
// TODO: Si ste es un control RICHEDIT, el control no
// enviar esta notificacin a menos que se invalide
CAdUiDialog::OnInitDialog()
// funcin y llamada CRichEditCtrl().SetEventMask()
// con el marcador ENM_CHANGE ORed en la mscara.

// TODO: Agregue aqu el controlador de notificacin de
controles
}


void CPLEDERSocavacionGeneralDlg::OnCommandSOCAPLICAR()
{
// Parmetros para socavacin
int Material, // Tipo de material, Cohesivo = 0, No
Cohesivo = 1.
CoefProb; // Coeficiente de probabilidad de gasto.
double CoefMaterial; // Peso especfico dimetro medio
del material de fondo.

double IdST; // id Seccion Transversal

// Obtener el valor del combo seleccionado
int nIndex = m_Combo_SOCId.GetCurSel();
m_Combo_SOCId.GetLBText(nIndex,m_SOCId);
IdST = _wtof(m_SOCId);

CoefProb = m_Combo_SOCProbg.GetCurSel();

// Obtener los atributos de la ventana
Material = m_Material;
Apendice C. HIDR

AULICA FLUVIAL C

ODIGO FUENTE C++


324
if(Material == 1) // Material No cohesivo
{
m_Edit_SOCDm.GetWindowTextW(m_SOCDm);
CoefMaterial = _wtof(m_SOCDm);
}
else // Material cohesivo
{
m_Edit_SOCPes.GetWindowTextW(m_SOCPes);
CoefMaterial = _wtof(m_SOCPes);
}

// Verificando los datos correctos
if(CoefMaterial <= 0.0)
{
acutPrintf(_T("\nLos datos de la seccion: %0.3f, no fueron
cargados correctamente"), IdST );
return;
}

struct resbuf *filter; // resbufs

// Preparar el filtro para seleccionar las S.T.
filter = acutBuildList(
RTDXF0, _T("CPLEDERCrossSections"),
8, PLEDER_CAPA_SECCIONTRANSVERSAL,
0);

if (!filter)
{
acdbFail(_T("\nError al construir el filtro
[acutBuildList]."));
return ;
}

ads_name ss; // ss
long sslen = 0; // longitud del ss

// seleccionar las secciones transversales definidas
if (acedSSGet(_T("_X"), NULL, NULL, filter, ss) != RTNORM)
{
acutPrintf(_T("\nNo hay secciones transversales definidas
en el drawing"));
acutRelRb(filter);
return;
}

acutRelRb(filter);

// tomar la longitud del ss
if (acedSSLength(ss, &sslen) != RTNORM)
{
acedSSFree(ss);
acdbFail(_T("\nError al tomar la longitud del conjunto de
seleccin [acedSSLength]."));
return;
}

CPLEDERCrossSections *pSecciones;
ads_name ename;
AcDbObjectId ID;

Apendice C. HIDR

AULICA FLUVIAL C

ODIGO FUENTE C++


325
// recorrer el ss
for (int i = 0; i < sslen; i++)
{
// tomar el nombre de la entidad
if (acedSSName(ss, i, ename) != RTNORM)
{
acedSSFree(ss);
acdbFail(_T("\nError al tomar el nombre de la entidad
CPLEDERCrossSections [acedSSName]."));
return;
}
// cambiar el nombre por el ObjectId
if (acdbGetObjectId(ID, ename) != Acad::eOk)
{
acedSSFree(ss);
acdbFail(_T("\nError al tomar el ObjectId de la
entidad CPLEDERCrossSections [acdbGetObjectId]."));
return;
}
// abrir el objeto para escritura
if (acdbOpenObject(pSecciones, ID, /*AcDb::kForRead*/
AcDb::kForWrite) != Acad::eOk)
{
acedSSFree(ss);
acdbFail(_T("\nError al abrir el Objeto
CPLEDERCrossSections [acdbOpenObject]."));
return ;
}
// chequear el tipo de objeto
if (pSecciones->isKindOf(CPLEDERCrossSections::desc()) !=
Adesk::kTrue)
{
pSecciones->close();
acedSSFree(ss);
acdbFail(_T("\nError Objeto CPLEDERCrossSections "));
return;
}
double Id_Seccion;

// Tomar el ID para comparar
pSecciones->IdCrossSections(Id_Seccion);

// Si procede, actualizar los datos de la S.T.
if (Id_Seccion == IdST)
{
pSecciones->SetTipoMaterial(Material);
pSecciones->SetCoeficienteProb(CoefProb);
pSecciones->SetCoeficienteMaterial(CoefMaterial);

}// if

pSecciones->close();

} // for i

acedSSFree(ss);
acutPrintf(_T("\n....Datos modificados en forma Exitosa...."));

return;
}

Apendice C. HIDR

AULICA FLUVIAL C

ODIGO FUENTE C++


326
void CPLEDERSocavacionGeneralDlg::OnKillfocusComboSOCId()
{
double Id_ST;
// Obtener el valor del combo seleccionado
int nIndex = m_Combo_SOCId.GetCurSel();
m_Combo_SOCId.GetLBText(nIndex,m_SOCId);
Id_ST = _wtof(m_SOCId);

// Realizar un Zoom a la seccin transversal
STSOC.ZoomCrossSections(Id_ST);

int Material, // Tipo de material, Cohesivo = 0,
No Cohesivo = 1.
CoefProb; // Coeficiente de probabilidad de gasto.
(Posicin del combo)
double CoefMaterial; // Peso especfico dimetro medio
del material de fondo.
if (STSOC.GetIdCrossSectionsAttributesSocavacion(Id_ST,
&Material, &CoefProb, &CoefMaterial) != RTNORM)
{
acutPrintf(_T("\nERROR
PLEDER:[GetIdCrossSectionsAttributesSocavacion]"));
return;
}
// Inserta el valor del material en la ventana
if(Material == 1) // Material No cohesivo
{
// Activar radio
m_Button_MaterialNoCoh.SetCheck(1);
m_Button_MaterialCoh.SetCheck(0);

// Activa y desactiva las casillas de la ventana
m_Edit_SOCPes.EnableWindow(0);
m_Edit_SOCDm.EnableWindow(1);

m_SOCDm.Format(_T("%g"), CoefMaterial);
m_Edit_SOCDm.SetWindowText(m_SOCDm);
}
else // Material cohesivo
{
// Activar radio
m_Button_MaterialNoCoh.SetCheck(0);
m_Button_MaterialCoh.SetCheck(1);

// Activa y desactiva las casillas de la ventana
m_Edit_SOCPes.EnableWindow(1);
m_Edit_SOCDm.EnableWindow(0);

m_SOCPes.Format(_T("%g"), CoefMaterial);
m_Edit_SOCPes.SetWindowText(m_SOCPes);
}

// Activa el combo, en la posicin indicada.
m_Combo_SOCProbg.SetCurSel(CoefProb);
OnKillfocusComboSOCProbg();

}
void CPLEDERSocavacionGeneralDlg::OnKillfocusComboSOCProbg()
{
switch (m_Combo_SOCProbg.GetCurSel())
{
Apendice C. HIDR

AULICA FLUVIAL C

ODIGO FUENTE C++


327
case 0:
{
m_Edit_SOCCoef.SetWindowText(_T("0.77"));
break;
}
case 1:
{
m_Edit_SOCCoef.SetWindowText(_T("0.82"));
break;
}

case 2:
{
m_Edit_SOCCoef.SetWindowText(_T("0.86"));
break;
}

case 3:
{
m_Edit_SOCCoef.SetWindowText(_T("0.90"));
break;
}

case 4:
{
m_Edit_SOCCoef.SetWindowText(_T("0.94"));
break;
}

case 5:
{
m_Edit_SOCCoef.SetWindowText(_T("0.97"));
break;
}

case 6:
{
m_Edit_SOCCoef.SetWindowText(_T("1.00"));
break;
}

case 7:
{
m_Edit_SOCCoef.SetWindowText(_T("1.03"));
break;
}
case 8:
{
m_Edit_SOCCoef.SetWindowText(_T("1.05"));
break;
}
case 9:
{
m_Edit_SOCCoef.SetWindowText(_T("1.07"));
break;
}
default:
acutPrintf(_T("\nFuera de Rango"));

} //switch (m_Combo_SOCProbg.GetCurSel())
}
Apendice C. HIDR

AULICA FLUVIAL C

ODIGO FUENTE C++


328
Apendice D
RESULTADOS DEL PROGRAMA
Cuadro D.1: Coordenadas hidrograma T
R
= 50 a nos
Duraci on (min) Q total (m
3
/s) Duraci on (min) Q total (m
3
/s)
0 0.000 830 57.605.000
10 0.052 840 56.334
20 0.379 850 54.912
30 1.289 860 53.328
40 3.242 870 51.546
50 6.727 880 49.576
60 11.577 890 47.44
70 18.078 900 45.169
80 26.022 910 42.795
90 35.761 920 40.367
100 47.589 930 37.908
110 61.651 940 35.478
120 77.933 950 33.07
(sigue en la pagina siguiente)
329
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.1: Continuacion de la tabla Coordenadas hidro-
grama T
R
= 50 a nos
Duraci on (min) Q total (m
3
/s) Duraci on (min) Q total (m
3
/s)
130 95.729 960 30.698
140 114.508 970 28.382
150 133.167 980 26.160
160 151.154 990 24.039
170 168.116 1000 22.023
180 183.685 1010 20.116
190 197.508 1020 18.318
200 209.631 1030 16.652
210 219.584 1040 15.121
220 227.751 1050 13.744
230 233.851 1060 12.510
240 237.903 1070 11.404
250 239.997 1080 10.402
260 240.694 1090 9.491
270 239.867 1100 8.659
280 237.561 1110 7.903
290 233.693 1120 7.213
300 228.224 1130 6.582
310 221.655 1140 6.000
320 214.426 1150 5.465
330 207.160 1160 4.977
340 200.063 1170 4.530
(sigue en la pagina siguiente)
330
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.1: Continuacion de la tabla Coordenadas hidro-
grama T
R
= 50 a nos
Duraci on (min) Q total (m
3
/s) Duraci on (min) Q total (m
3
/s)
350 193.204 1180 4.122
360 186.441 1190 3.753
370 179.850 1200 3.419
380 173.505 1210 3.113
390 167.59 1220 2.831
400 162.017 1230 2.576
410 156.773 1240 2.342
420 151.649 1250 2.129
430 146.678 1260 1.934
440 141.917 1270 1.758
450 137.373 1280 1.597
460 133.049 1290 1.45
470 128.985 1300 1.317
480 125.160 1310 1.196
490 121.450 1320 1.086
500 117.898 1330 0.984
510 114.523 1340 0.893
520 111.299 1350 0.809
530 108.211 1360 0.732
540 105.260 1370 0.662
550 102.444 1380 0.599
560 99.720 1390 0.540
(sigue en la pagina siguiente)
331
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.1: Continuacion de la tabla Coordenadas hidro-
grama T
R
= 50 a nos
Duraci on (min) Q total (m
3
/s) Duraci on (min) Q total (m
3
/s)
570 97.109 1400 0.487
580 94.623 1410 0.439
590 92.246 1420 0.395
600 89.947 1430 0.355
610 87.736 1440 0.319
620 85.620 1450 0.286
630 83.583 1460 0.255
640 81.632 1470 0.228
650 79.769 1480 0.202
660 77.987 1490 0.179
670 76.275 1500 0.157
680 74.647 1510 0.137
690 73.106 1520 0.118
700 71.648 1530 0.101
710 70.272 1540 0.085
720 68.975 1550 0.071
730 67.758 1560 0.058
740 66.612 1570 0.046
750 65.544 1580 0.036
760 64.550 1590 0.028
770 63.621 1600 0.020
780 62.706 1610 0.014
(sigue en la pagina siguiente)
332
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.1: Continuacion de la tabla Coordenadas hidro-
grama T
R
= 50 a nos
Duraci on (min) Q total (m
3
/s) Duraci on (min) Q total (m
3
/s)
790 61.793 1620 0.009
800 60.840 1630 0.005
810 59.836 1640 0.002
820 58.766 1650 0.00
(Fin de la tabla)
Cuadro D.2: Coordenadas hidrograma T
R
= 100 a nos
Duraci on (min) Q total (m
3
/s) Duraci on (min) Q total (m
3
/s)
0 0.000 840 72.931
10 0.007 850 71.284
20 0.223 860 69.450
30 0.972 870 67.414
40 2.766 880 65.130
50 6.202 890 62.611
60 11.903 900 59.887
70 19.653 910 56.995
80 29.816 920 53.981
90 42.190 930 50.905
100 57.210 940 47.794
110 75.301 950 44.723
120 96.525 960 41.683
(sigue en la pagina siguiente)
333
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.2: Continuacion de la tabla Coordenadas hidro-
grama T
R
= 100 a nos
Duraci on (min) Q total (m
3
/s) Duraci on (min) Q total (m
3
/s)
130 120.681 970 38.689
140 146.671 980 35.767
150 173.676 990 32.965
160 200.117 1000 30.29
170 225.280 1010 27.749
180 248.604 1020 25.345
190 269.689 1030 23.079
200 288.119 1040 20.979
210 303.981 1050 19.050
220 316.610 1060 17.315
230 326.597 1070 15.761
240 333.632 1080 14.367
250 337.786 1090 13.105
260 339.232 1100 11.956
270 338.679 1110 10.907
280 335.974 1120 9.955
290 331.147 1130 9.085
300 324.176 1140 8.291
310 315.106 1150 7.557
320 304.711 1160 6.883
330 293.614 1170 6.268
340 282.652 1180 5.705
(sigue en la pagina siguiente)
334
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.2: Continuacion de la tabla Coordenadas hidro-
grama T
R
= 100 a nos
Duraci on (min) Q total (m
3
/s) Duraci on (min) Q total (m
3
/s)
350 272.056 1190 5.191
360 261.912 1200 4.726
370 252.005 1210 4.306
380 242.447 1220 3.920
390 233.303 1230 3.565
400 224.790 1240 3.243
410 216.787 1250 2.949
420 209.268 1260 2.680
430 201.941 1270 2.435
440 194.849 1280 2.214
450 188.096 1290 2.011
460 181.680 1300 1.825
470 175.588 1310 1.658
480 169.879 1320 1.506
490 164.522 1330 1.366
500 159.343 1340 1.239
510 154.390 1350 1.124
520 149.702 1360 1.018
530 145.237 1370 0.921
540 140.968 1380 0.833
550 136.900 1390 0.753
560 133.033 1400 0.680
(sigue en la pagina siguiente)
335
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.2: Continuacion de la tabla Coordenadas hidro-
grama T
R
= 100 a nos
Duraci on (min) Q total (m
3
/s) Duraci on (min) Q total (m
3
/s)
570 129.306 1410 0.613
580 125.740 1420 0.552
590 122.356 1430 0.497
600 119.130 1440 0.447
610 116.017 1450 0.401
620 113.029 1460 0.359
630 110.178 1470 0.321
640 107.438 1480 0.286
650 104.817 1490 0.254
660 102.320 1500 0.225
670 99.935 1510 0.197
680 97.647 1520 0.172
690 95.473 1530 0.148
700 93.419 1540 0.126
710 91.479 1550 0.107
720 89.648 1560 0.089
730 87.925 1570 0.073
740 86.311 1580 0.058
750 84.794 1590 0.046
760 83.379 1600 0.035
770 82.063 1610 0.025
780 80.831 1620 0.017
(sigue en la pagina siguiente)
336
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.2: Continuacion de la tabla Coordenadas hidro-
grama T
R
= 100 a nos
Duraci on (min) Q total (m
3
/s) Duraci on (min) Q total (m
3
/s)
790 79.619 1630 0.011
800 78.411 1640 0.006
810 77.155 1650 0.002
820 75.838 1660 0.000
830 74.441
(Fin de la tabla)
Cuadro D.3: Coordenadas hidrograma T
R
= 200 a nos
Duraci on (min) Q total (m
3
/s) Duraci on (min) Q total (m
3
/s)
0 0.000 840 88.784
10 0.076 850 86.743
20 0.574 860 84.477
30 1.962 870 81.967
40 4.943 880 79.159
50 10.246 890 76.068
60 18.657 900 72.731
70 29.893 910 69.197
80 44.441 920 65.520
90 62.073 930 61.773
100 83.334 940 57.990
110 108.728 950 54.257
(sigue en la pagina siguiente)
337
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.3: Continuacion de la tabla Coordenadas hidro-
grama T
R
= 200 a nos
Duraci on (min) Q total (m
3
/s) Duraci on (min) Q total (m
3
/s)
120 138.167 960 50.564
130 171.228 970 46.929
140 206.377 980 43.382
150 242.462 990 39.980
160 277.426 1000 36.735
170 310.335 1010 33.651
180 340.464 1020 30.736
190 367.389 1030 27.988
200 390.620 1040 25.441
210 410.264 1050 23.101
220 425.492 1060 20.997
230 437.138 1070 19.112
240 444.861 1080 17.422
250 448.802 1090 15.890
260 449.191 1100 14.497
270 446.913 1110 13.225
280 441.775 1120 12.070
290 433.832 1130 11.016
300 423.153 1140 10.052
310 409.895 1150 9.162
320 395.123 1160 8.345
330 379.643 1170 7.599
(sigue en la pagina siguiente)
338
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.3: Continuacion de la tabla Coordenadas hidro-
grama T
R
= 200 a nos
Duraci on (min) Q total (m
3
/s) Duraci on (min) Q total (m
3
/s)
340 364.507 1180 6.916
350 349.978 1190 6.293
360 336.15 1200 5.729
370 322.744 1210 5.220
380 309.887 1220 4.751
390 297.631 1230 4.322
400 286.232 1240 3.931
410 275.532 1250 3.575
420 265.486 1260 3.248
430 255.712 1270 2.951
440 246.283 1280 2.683
450 237.338 1290 2.437
460 228.859 1300 2.212
470 220.825 1310 2.009
480 213.313 1320 1.825
490 206.277 1330 1.656
500 199.487 1340 1.501
510 193.004 1350 1.362
520 186.884 1360 1.233
530 181.065 1370 1.116
540 175.510 1380 1.009
550 170.230 1390 0.913
(sigue en la pagina siguiente)
339
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.3: Continuacion de la tabla Coordenadas hidro-
grama T
R
= 200 a nos
Duraci on (min) Q total (m
3
/s) Duraci on (min) Q total (m
3
/s)
560 165.225 1400 0.824
570 160.409 1410 0.742
580 155.813 1420 0.669
590 151.461 1430 0.602
600 147.319 1440 0.541
610 143.328 1450 0.485
620 139.505 1460 0.435
630 135.865 1470 0.389
640 132.371 1480 0.346
650 129.032 1490 0.308
660 125.857 1500 0.272
670 122.827 1510 0.239
680 119.923 1520 0.208
690 117.167 1530 0.179
700 114.567 1540 0.153
710 112.112 1550 0.129
720 109.797 1560 0.107
730 107.622 1570 0.088
740 105.587 1580 0.071
750 103.675 1590 0.055
760 101.892 1600 0.042
770 100.233 1610 0.031
(sigue en la pagina siguiente)
340
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.3: Continuacion de la tabla Coordenadas hidro-
grama T
R
= 200 a nos
Duraci on (min) Q total (m
3
/s) Duraci on (min) Q total (m
3
/s)
780 98.679 1620 0.021
790 97.151 1630 0.013
800 95.631 1640 0.007
810 94.053 1650 0.003
820 92.405 1660 0.001
830 90.661
(Fin de la tabla)
Cuadro D.4: Coordenadas hidrograma T
R
= 500 a nos
Duraci on (min) Q total (m
3
/s) Duraci on (min) Q total (m
3
/s)
0 0.000 840 112.708
10 0.002 850 110.322
20 0.277 860 107.737
30 1.317 870 104.876
40 3.870 880 101.716
50 8.838 890 98.190
60 17.143 900 94.315
70 29.816 910 90.142
80 46.456 920 85.734
90 67.794 930 81.156
100 93.489 940 76.499
(sigue en la pagina siguiente)
341
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.4: Continuacion de la tabla Coordenadas hidro-
grama T
R
= 500 a nos
Duraci on (min) Q total (m
3
/s) Duraci on (min) Q total (m
3
/s)
110 124.302 950 71.801
120 160.724 960 67.172
130 202.402 970 62.594
140 248.566 980 58.089
150 297.059 990 53.695
160 346.221 1000 49.482
170 393.389 1010 45.463
180 437.220 1020 41.646
190 476.885 1030 38.037
200 511.901 1040 34.635
210 541.683 1050 31.483
220 566.321 1060 28.587
230 584.842 1070 25.983
240 598.431 1080 23.650
250 606.703 1090 21.558
260 609.916 1100 19.663
270 608.331 1110 17.938
280 603.121 1120 16.364
290 594.002 1130 14.935
300 581.142 1140 13.629
310 564.757 1150 12.437
320 545.201 1160 11.336
(sigue en la pagina siguiente)
342
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.4: Continuacion de la tabla Coordenadas hidro-
grama T
R
= 500 a nos
Duraci on (min) Q total (m
3
/s) Duraci on (min) Q total (m
3
/s)
330 523.924 1170 10.324
340 501.983 1180 9.401
350 480.705 1190 8.557
360 460.417 1200 7.786
370 441.207 1210 7.087
380 422.719 1220 6.458
390 405.074 1230 5.877
400 388.300 1240 5.346
410 372.718 1250 4.863
420 358.110 1260 4.422
430 344.395 1270 4.018
440 331.075 1280 3.650
450 318.281 1290 3.318
460 306.183 1300 3.014
470 294.736 1310 2.736
480 283.915 1320 2.485
490 273.818 1330 2.257
500 264.375 1340 2.048
510 255.272 1350 1.857
520 246.608 1360 1.684
530 238.443 1370 1.525
540 230.692 1380 1.380
(sigue en la pagina siguiente)
343
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.4: Continuacion de la tabla Coordenadas hidro-
grama T
R
= 500 a nos
Duraci on (min) Q total (m
3
/s) Duraci on (min) Q total (m
3
/s)
550 223.304 1390 1.248
560 216.303 1400 1.128
570 209.684 1410 1.018
580 203.324 1420 0.918
590 197.270 1430 0.827
600 191.550 1440 0.744
610 186.114 1450 0.669
620 180.885 1460 0.600
630 175.886 1470 0.538
640 171.136 1480 0.481
650 166.581 1490 0.428
660 162.235 1500 0.381
670 158.108 1510 0.336
680 154.175 1520 0.295
690 150.408 1530 0.257
700 146.837 1540 0.222
710 143.473 1550 0.189
720 140.300 1560 0.159
730 137.311 1570 0.133
740 134.506 1580 0.109
750 131.885 1590 0.087
760 129.423 1600 0.068
(sigue en la pagina siguiente)
344
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.4: Continuacion de la tabla Coordenadas hidro-
grama T
R
= 500 a nos
Duraci on (min) Q total (m
3
/s) Duraci on (min) Q total (m
3
/s)
770 127.128 1610 0.052
780 124.991 1620 0.038
790 122.988 1630 0.026
800 121.020 1640 0.016
810 119.063 1650 0.009
820 117.039 1660 0.004
830 114.931 1670 0.001
(Fin de la tabla)
Cuadro D.5: Resultados parametros hidr aulicos T
R
= 50
a nos
Sta Q (m
3
/s) Elev (m) Area(m
2
) Perm (m) V(m/s) Froude Ancho (m)
1 240.69 2971.691 35.645 20.133 6.752 1.33 16.653
2 240.69 2971.074 34.848 20.354 6.907 1.555 17.268
3 240.69 2972.111 58.332 29.553 4.126 0.754 35.272
4 240.69 2972.694 101.202 45.492 2.378 0.398 37.882
5 240.69 2970.189 31.792 23.108 7.571 1.657 20.926
6 240.69 2971.574 83.349 38.843 2.888 0.492 33.108
7 240.69 2969.627 34.53 23.986 6.971 1.779 21.733
8 240.69 2969.325 35.701 23.921 6.742 1.431 22.049
9 240.69 2971.118 95.874 38.898 2.51 0.398 32.936
(sigue en la pagina siguiente)
345
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.5: Continuacion de la tabla par ametros
hidraulicos T
R
= 50 a nos
Sta Q (m
3
/s) Elev (m) Area(m
2
) Perm (m) V(m/s) Froude Ancho (m)
10 240.69 2971.165 101.04 41.111 2.382 0.376 36.091
11 240.69 2968.727 32.301 22.286 7.451 1.844 20.682
12 240.69 2968.723 37.296 25.325 6.453 1.599 23.843
13 240.69 2968.708 42.705 26.662 5.636 1.106 24.523
14 240.69 2968.119 36.628 26.865 6.571 1.463 25.921
15 240.69 2969.294 82.557 31.765 2.915 0.518 29.985
16 240.69 2967.408 36.003 24.831 6.685 1.394 24.189
17 240.69 2969.447 97.741 37.378 2.463 0.376 35.32
18 240.69 2969.406 94.376 39.959 2.55 0.391 37.722
19 240.69 2969.375 87.588 35.585 2.748 0.381 32.367
20 240.69 2969.14 73.191 27.95 3.289 0.466 24.429
21 240.69 2967.831 41.464 19.179 5.805 0.955 15.555
22 240.69 2966.601 54.955 24.51 4.38 0.743 22.578
23 240.69 2965.141 45.527 28.271 5.287 1.171 27.446
24 240.69 2966.379 93.467 31.266 2.575 0.396 27.676
25 240.69 2966.273 80.369 28.997 2.995 0.466 22.521
26 240.69 2963.511 29.868 16.506 8.058 1.644 13.661
27 240.69 2965.86 79.178 27.029 3.04 0.443 21.594
28 240.69 2962.61 28.492 17.053 8.447 1.69 14.308
29 240.69 2965.257 79.95 25.051 3.011 0.422 19.941
30 240.69 2961.762 26.873 16.991 8.957 2.193 14.559
31 240.69 2961.864 36.064 18.556 6.674 1.273 16.164
(sigue en la pagina siguiente)
346
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.5: Continuacion de la tabla par ametros
hidraulicos T
R
= 50 a nos
Sta Q (m
3
/s) Elev (m) Area(m
2
) Perm (m) V(m/s) Froude Ancho (m)
32 240.69 2961.536 37.109 18.774 6.486 1.207 16.609
33 240.69 2961.442 40.877 19.784 5.888 1.114 17.402
34 240.69 2961.191 40.701 18.911 5.914 0.996 16.343
35 240.69 2962.188 82.727 33.607 2.909 0.433 29.928
36 240.69 2959.703 31.652 21.212 7.604 1.672 19.55
37 240.69 2961.033 70.602 36.291 3.409 0.587 35.937
38 240.69 2959.258 35.39 22.888 6.801 1.683 21.48
39 240.69 2959.253 41.397 25.19 5.814 1.138 43.862
40 240.69 2958.688 38.641 23.678 6.229 1.374 22.38
41 240.69 2959.972 78.325 40.091 3.073 0.469 35.542
42 240.69 2959.193 45.147 20.169 5.331 0.897 16.837
43 240.69 2957.793 40.275 24.296 5.976 1.287 23.199
44 240.69 2959.394 105.062 36.402 2.291 0.375 32.852
45 240.69 2959.389 108.849 38.236 2.211 0.322 33.454
46 240.69 2956.355 29.186 23.937 8.247 1.984 22.545
47 240.69 2956.64 41.236 24.795 5.837 1.303 22.658
48 240.69 2957.782 72.929 26.939 3.3 0.515 24.007
49 240.69 2956.276 37.283 20.989 6.456 1.258 19.824
50 240.69 2955.749 36.101 21.931 6.667 1.45 20.631
51 240.69 2957.217 77.161 28.24 3.119 0.523 25.344
52 240.69 2957.353 93.682 34.95 2.569 0.423 32.609
53 240.69 2957.376 99.914 35.244 2.409 0.352 32.883
(sigue en la pagina siguiente)
347
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.5: Continuacion de la tabla par ametros
hidraulicos T
R
= 50 a nos
Sta Q (m
3
/s) Elev (m) Area(m
2
) Perm (m) V(m/s) Froude Ancho (m)
54 240.69 2954.858 31.561 19.237 7.626 1.738 17.589
55 240.69 2955.745 51.371 24.61 4.685 0.763 21.494
56 240.69 2954.595 43.196 28.408 5.572 1.083 27.147
57 240.69 2954.093 37.679 26.607 6.388 1.376 25.531
58 240.69 2955.687 78.832 29.317 3.053 0.501 26.399
59 240.69 2953.486 32.514 24.896 7.403 1.874 24.175
60 240.69 2953.259 34.833 24.198 6.91 1.435 23.478
61 240.69 2955.349 91.238 30.07 2.638 0.399 26.808
62 240.69 2955.413 99.505 28.713 2.419 0.329 23.037
63 240.69 2955.347 89.271 31.189 2.696 0.369 25.447
64 240.69 2953.285 35.414 28.569 6.796 1.036 37.963
65 240.69 2952.675 30.435 15.621 7.908 1.299 10.665
66 240.69 2953.974 62.018 36.252 3.881 0.55 29.78
67 240.69 2951.19 27.954 17.303 8.61 1.815 14.974
68 240.69 2953.073 74.809 25.336 3.217 0.452 20.097
69 240.69 2952.956 66.697 26.844 3.609 0.512 23.629
70 240.69 2953.116 81.662 34.305 2.947 0.412 31.667
71 240.69 2950.45 29.959 18.67 8.034 1.605 17.545
72 240.69 2953.113 114.584 37.902 2.101 0.294 35.491
73 240.69 2949.656 28.591 19.605 8.418 1.702 18.544
74 240.69 2952.143 97.985 32.007 2.456 0.351 27.617
75 240.69 2952.063 98.144 33.166 2.452 0.354 28.131
(sigue en la pagina siguiente)
348
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.5: Continuacion de la tabla par ametros
hidraulicos T
R
= 50 a nos
Sta Q (m
3
/s) Elev (m) Area(m
2
) Perm (m) V(m/s) Froude Ancho (m)
76 240.69 2949.432 30.709 19.025 7.838 1.661 17.687
77 240.69 2951.247 70.532 26.021 3.413 0.483 23.406
78 240.69 2949.39 33.685 16.512 7.145 1.27 14.028
79 240.69 2949.773 48.018 20.325 5.013 0.842 17.719
80 240.69 2948.387 35.346 19.099 6.809 1.457 17.184
81 240.69 2950.067 69.216 25.042 3.477 0.501 20.991
82 240.69 2947.901 32.134 16.926 7.49 1.445 14.255
83 240.69 2947.47 32.891 17.799 7.318 1.538 15.538
84 240.69 2949.398 80.27 30.764 2.998 0.418 27.277
85 240.69 2949.565 103.449 36.83 2.327 0.32 32.25
86 240.69 2949.662 117.682 35.954 2.045 0.278 31.564
87 240.69 2945.417 25.199 16.149 9.552 2.03 13.674
88 240.69 2947.188 58.284 21.742 4.13 0.588 16.096
89 240.69 2944.605 28.728 16.312 8.378 1.442 13.134
90 240.69 2945.346 39.491 17.364 6.095 0.951 13.605
91 240.69 2944.532 38.774 21.322 6.208 1.08 19.946
92 240.69 2945.151 55.589 23.405 4.33 0.692 21.141
93 240.69 2944.143 50.041 21.215 4.81 0.77 18.668
94 240.69 2943.125 43.924 20.581 5.48 1.016 18.544
95 240.69 2943.067 50.052 20.157 4.809 0.777 16.306
96 240.69 2941.974 52.45 21.956 4.589 0.834 18.668
97 240.69 2940.062 41.141 20.758 5.85 1.097 17.953
(sigue en la pagina siguiente)
349
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.5: Continuacion de la tabla par ametros
hidraulicos T
R
= 50 a nos
Sta Q (m
3
/s) Elev (m) Area(m
2
) Perm (m) V(m/s) Froude Ancho (m)
98 240.69 2939.898 49.988 21.93 4.815 0.795 19.29
99 240.69 2938.635 46.809 23.568 5.142 1.044 21.847
100 240.69 2937.761 43.339 23.695 5.554 1.1 22.254
101 240.69 2937.096 39.138 22.803 6.15 1.325 21.606
102 240.69 2938.689 100.21 37.138 2.402 0.394 34.44
103 240.69 2938.834 130.319 41.017 1.847 0.265 36.949
104 240.69 2936.532 33.939 17.944 7.092 1.188 13.674
105 240.69 2935.166 34.456 16.99 6.986 1.234 14.394
106 240.69 2935.613 56.24 31.952 4.28 0.709 28.339
107 240.69 2934.328 53.457 24.915 4.502 0.776 23.259
108 240.69 2932.757 40.73 22.464 5.909 1.116 20.951
109 240.69 2932.523 45.69 24.631 5.268 1.038 22.114
110 240.69 2931.897 39.577 22.819 6.082 1.374 21.191
111 240.69 2932.895 65.445 32.83 3.678 0.587 29.759
112 240.69 2931.892 48.063 31.692 5.008 0.924 29.524
113 240.69 2931.881 56.166 34.609 4.285 0.792 32.61
114 240.69 2931.853 60.348 33.829 3.988 0.64 31.009
115 240.69 2930.808 52.325 31.798 4.6 0.861 30.012
116 240.69 2930.658 86.159 36.193 2.794 0.537 32.67
117 240.69 2930.847 114.987 39.829 2.093 0.336 35.549
118 240.69 2928.601 34.213 28.969 7.035 1.722 27.722
119 240.69 2928.709 49.088 29.784 4.903 0.934 28.275
(sigue en la pagina siguiente)
350
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.5: Continuacion de la tabla par ametros
hidraulicos T
R
= 50 a nos
Sta Q (m
3
/s) Elev (m) Area(m
2
) Perm (m) V(m/s) Froude Ancho (m)
120 240.69 2928.395 59.788 35.19 4.026 0.814 33.719
121 240.69 2927.556 46.248 35.251 5.204 1.291 34.58
122 240.69 2927.528 55.414 38.667 4.344 1.086 37.851
123 240.69 2927.419 61.383 40.272 3.921 0.789 39.406
124 240.69 2926.62 47.626 33.143 5.054 1.23 32.024
125 240.69 2926.788 60.527 34.073 3.977 0.747 30.648
(Fin de la tabla)
Cuadro D.6: Resultados par ametros hidr aulicos T
R
= 100
a nos
Sta Q (m
3
/s) Elev (m) Area(m
2
) Perm (m) V(m/s) Froude Ancho (m)
1 339.23 2973.042 66.33 35.22 5.114 0.819 29.703
2 339.23 2972.023 52.4 25.699 6.474 1.201 21.468
3 339.23 2971.959 54.836 26.327 6.186 1.16 21.525
4 339.23 2971.789 67.909 39.74 4.995 0.966 34.336
5 339.23 2971.335 64.743 35.995 5.24 0.925 31.634
6 339.23 2971.792 90.596 39.701 3.744 0.619 33.471
7 339.23 2970.202 49.233 33.314 6.89 1.504 30.032
8 339.23 2971.624 104.383 40.856 3.25 0.486 34.123
9 339.23 2969.468 45.848 25.622 7.399 1.523 23.19
10 339.23 2971.688 120.167 43.271 2.823 0.419 37.075
(sigue en la pagina siguiente)
351
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.6: Continuacion de la tabla par ametros
hidraulicos T
R
= 100 a nos
Sta Q (m
3
/s) Elev (m) Area(m
2
) Perm (m) V(m/s) Froude Ancho (m)
11 339.23 2969.37 45.775 23.724 7.411 1.557 21.252
12 339.23 2971.296 108.622 35.816 3.123 0.485 28.745
13 339.23 2971.432 125.638 41.691 2.7 0.372 34.479
14 339.23 2971.558 152.433 43.598 2.225 0.303 36.833
15 339.23 2971.564 164.8 44.695 2.058 0.28 40
16 339.23 2971.573 185.169 47.002 1.832 0.229 40
17 339.23 2971.604 182.007 47.078 1.864 0.233 40
18 339.23 2971.591 181.327 48.139 1.871 0.234 39.941
19 339.23 2971.577 173.8 48.562 1.952 0.227 39.714
20 339.23 2971.494 156.071 47.734 2.174 0.255 40
21 339.23 2967.829 41.433 19.171 8.187 1.347 15.548
22 339.23 2966.597 54.866 24.494 6.183 1.05 22.564
23 339.23 2967.49 117.825 36.25 2.879 0.437 33.252
24 339.23 2964.359 39.575 26.226 8.572 1.806 25.037
25 339.23 2966.254 79.931 28.836 4.244 0.662 22.401
26 339.23 2965.062 52.156 19.976 6.504 1.038 15.073
27 339.23 2964.063 45.794 19.672 7.408 1.365 15.782
28 339.23 2964.067 50.336 21.482 6.739 1.075 16.825
29 339.23 2963.074 41.337 19.062 8.207 1.51 16.1
30 339.23 2963.094 47.604 20.437 7.126 1.307 16.662
31 339.23 2963.149 58.416 22.336 5.807 0.917 18.876
32 339.23 2962.238 49.136 20.584 6.904 1.155 17.684
(sigue en la pagina siguiente)
352
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.6: Continuacion de la tabla par ametros
hidraulicos T
R
= 100 a nos
Sta Q (m
3
/s) Elev (m) Area(m
2
) Perm (m) V(m/s) Froude Ancho (m)
33 339.23 2963.313 88.641 36.102 3.827 0.563 30.485
34 339.23 2961.618 47.837 20.081 7.091 1.129 17.092
35 339.23 2963.326 117.187 37.215 2.895 0.386 30.619
36 339.23 2960.149 40.441 22.152 8.388 1.675 19.812
37 339.23 2962.819 133.342 44.513 2.544 0.355 37.017
38 339.23 2962.923 160.24 47.289 2.117 0.293 36.015
39 339.23 2959.074 37.375 23.354 9.076 1.84 22.088
40 339.23 2961.517 141.772 47.726 2.393 0.344 40
41 339.23 2961.415 133.517 47.919 2.541 0.336 40
42 339.23 2959.406 49.087 24.726 6.911 1.13 21.236
43 339.23 2958.219 50.393 25.659 6.732 1.326 24.261
44 339.23 2957.597 48.013 32.134 7.065 1.594 31.303
45 339.23 2958.609 83.291 36.147 4.073 0.649 32.15
46 339.23 2958.74 85.764 31.021 3.955 0.62 26.532
47 339.23 2956.844 45.872 25.281 7.395 1.574 22.885
48 339.23 2958.596 93.364 31.226 3.633 0.519 27.555
49 339.23 2958.544 89.36 29.954 3.796 0.545 27.251
50 339.23 2956.021 41.78 22.632 8.119 1.664 21.072
51 339.23 2958.307 109.226 38.389 3.106 0.457 34.274
52 339.23 2958.431 130.778 40.233 2.594 0.377 36.103
53 339.23 2958.442 137.865 41.95 2.461 0.325 37.938
54 339.23 2955.35 40.51 20.78 8.374 1.707 18.755
(sigue en la pagina siguiente)
353
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.6: Continuacion de la tabla par ametros
hidraulicos T
R
= 100 a nos
Sta Q (m
3
/s) Elev (m) Area(m
2
) Perm (m) V(m/s) Froude Ancho (m)
55 339.23 2957.715 102.887 37.217 3.297 0.436 33.357
56 339.23 2954.406 38.13 27.723 8.897 1.793 26.62
57 339.23 2956.938 117.967 35.968 2.876 0.409 31.73
58 339.23 2954.287 43.003 25.965 7.889 1.629 24.782
59 339.23 2956.461 109.719 31.949 3.092 0.462 27.544
60 339.23 2956.583 127.33 35.313 2.664 0.357 30.697
61 339.23 2956.586 125.133 32.809 2.711 0.363 27.88
62 339.23 2956.607 128.702 34.999 2.636 0.325 27.883
63 339.23 2956.565 121.482 38.039 2.792 0.345 29.368
64 339.23 2953.718 46.742 34.173 7.257 1.055 27.246
65 339.23 2953.54 41.701 28.892 8.135 1.205 37.253
66 339.23 2953.184 45.53 19.145 7.451 1.149 13.83
67 339.23 2952.472 48.685 20.935 6.968 1.177 16.843
68 339.23 2953.433 82.533 29.235 4.11 0.558 23.425
69 339.23 2952.522 56.803 24.758 5.972 0.887 21.762
70 339.23 2952.148 56.447 24.588 6.01 0.931 22.212
71 339.23 2951.401 48.683 23.686 6.968 1.189 21.715
72 339.23 2950.907 47.372 25.064 7.161 1.318 23.869
73 339.23 2950.927 59.61 30.254 5.691 0.936 28.699
74 339.23 2952.206 99.743 32.148 3.401 0.483 27.661
75 339.23 2951.997 96.283 33.019 3.523 0.512 28.084
76 339.23 2952.11 93.478 31.305 3.629 0.521 28.547
(sigue en la pagina siguiente)
354
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.6: Continuacion de la tabla par ametros
hidraulicos T
R
= 100 a nos
Sta Q (m
3
/s) Elev (m) Area(m
2
) Perm (m) V(m/s) Froude Ancho (m)
77 339.23 2951.945 87.739 28.87 3.866 0.513 25.86
78 339.23 2950.323 47.612 19.112 7.125 1.115 15.83
79 339.23 2952.26 102.329 31.982 3.315 0.429 27.85
80 339.23 2948.429 36.076 19.204 9.403 1.993 17.245
81 339.23 2950.236 72.844 25.92 4.657 0.66 21.779
82 339.23 2949.21 52.445 21.709 6.468 1.026 17.941
83 339.23 2948.26 45.722 19.917 7.419 1.346 16.941
84 339.23 2948.426 56.938 23.641 5.958 0.921 20.607
85 339.23 2947.691 50.915 24.366 6.663 1.132 21.65
86 339.23 2947.232 49.707 24.934 6.825 1.244 22.189
87 339.23 2947.351 54.398 22.046 6.236 0.973 17.698
88 339.23 2946.541 48.223 19.913 7.035 1.073 14.98
89 339.23 2945.922 46.214 18.964 7.34 1.074 13.419
90 339.23 2945.683 44.122 18.082 7.688 1.154 13.848
91 339.23 2945.207 52.714 23.302 6.435 1.022 21.374
92 339.23 2945.409 61.185 24.677 5.544 0.859 22.269
93 339.23 2944.658 60.14 23.246 5.641 0.849 20.391
94 339.23 2944.156 64.654 24.386 5.247 0.838 21.679
95 339.23 2943.153 51.457 20.411 6.592 1.054 16.486
96 339.23 2942.145 55.673 22.397 6.093 1.078 18.933
97 339.23 2940.405 47.385 21.64 7.159 1.269 18.467
98 339.23 2940.812 69.219 30.122 4.901 0.726 26.725
(sigue en la pagina siguiente)
355
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.6: Continuacion de la tabla par ametros
hidraulicos T
R
= 100 a nos
Sta Q (m
3
/s) Elev (m) Area(m
2
) Perm (m) V(m/s) Froude Ancho (m)
99 339.23 2940.464 91.327 34.227 3.714 0.572 30.411
100 339.23 2937.594 39.666 23.119 8.552 1.75 21.797
101 339.23 2939.897 120.758 39.782 2.809 0.401 35.682
102 339.23 2940.031 147.878 42.391 2.294 0.323 36.632
103 339.23 2940.146 179.767 45.598 1.887 0.241 38.398
104 339.23 2937.091 41.98 21.774 8.081 1.26 46.087
105 339.23 2936.284 51.395 20.158 6.6 1.006 16.39
106 339.23 2935.669 57.845 32.132 5.865 0.964 28.376
107 339.23 2936.955 131.495 39.97 2.58 0.335 33.109
108 339.23 2932.433 34.067 21.378 9.958 1.997 20.11
109 339.23 2935.038 118.904 43.288 2.853 0.402 80
110 339.23 2931.907 39.778 22.846 8.528 1.922 21.211
111 339.23 2932.933 66.573 32.937 5.096 0.81 29.817
112 339.23 2931.967 50.305 31.94 6.743 1.229 29.679
113 339.23 2932.083 62.808 35.382 5.401 0.966 33.143
114 339.23 2932.392 77.348 35.589 4.386 0.661 32.105
115 339.23 2931.885 85.463 34.714 3.969 0.635 31.502
116 339.23 2930.873 93.208 36.756 3.64 0.674 32.943
117 339.23 2928.831 46.158 34.344 7.349 1.688 32.726
118 339.23 2929.629 63.087 31.252 5.377 1.039 28.442
119 339.23 2929.181 62.569 31.047 5.422 0.956 28.91
120 339.23 2929.652 103.048 38.31 3.292 0.543 35.092
(sigue en la pagina siguiente)
356
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.6: Continuacion de la tabla par ametros
hidraulicos T
R
= 100 a nos
Sta Q (m
3
/s) Elev (m) Area(m
2
) Perm (m) V(m/s) Froude Ancho (m)
121 339.23 2927.61 48.136 35.489 7.047 1.72 34.755
122 339.23 2927.746 63.737 39.619 5.322 1.25 38.552
123 339.23 2928.29 96.216 43.397 3.526 0.611 40
124 339.23 2926.668 49.15 33.367 6.902 1.657 32.145
125 339.23 2926.978 66.42 35.207 5.107 0.929 31.378
(Fin de la tabla)
Cuadro D.7: Resultados par ametros hidr aulicos T
R
= 200
a nos
Sta Q (m
3
/s) Elev (m) Area(m
2
) Perm (m) V(m/s) Froude Ancho (m)
1 449.19 2976.109 186.375 54.084 2.41 0.29 39.788
2 449.19 2971.686 45.608 22.762 9.849 1.941 18.817
3 449.19 2974.559 149.519 50.818 3.004 0.409 38.445
4 449.19 2971.285 51.374 35.175 8.744 1.873 41.539
5 449.19 2972.955 123.434 46.667 3.639 0.525 38.412
6 449.19 2973.169 139.959 47.349 3.209 0.453 37.701
7 449.19 2973.234 146.753 48.369 3.061 0.43 37.494
8 449.19 2973.344 167.409 49.005 2.683 0.342 38.265
9 449.19 2969.605 49.18 27.928 9.134 1.829 25.363
10 449.19 2972.237 140.806 45.539 3.19 0.448 38.107
11 449.19 2970.025 60.515 30.104 7.423 1.377 26.921
(sigue en la pagina siguiente )
357
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.7: Continuacion de la tabla par ametros
hidraulicos T
R
= 200 a nos
Sta Q (m
3
/s) Elev (m) Area(m
2
) Perm (m) V(m/s) Froude Ancho (m)
12 449.19 2969.965 70.521 31.801 6.37 1.194 28.511
13 449.19 2969.805 73.324 34.604 6.126 1.011 31.532
14 449.19 2971.044 133.67 41.818 3.36 0.481 36.284
15 449.19 2968.558 61.158 29.426 7.345 1.484 28.169
16 449.19 2971.05 164.234 45.432 2.735 0.357 40
17 449.19 2971.129 163.014 45.654 2.756 0.357 40
18 449.19 2971.096 161.552 46.654 2.78 0.361 39.941
19 449.19 2971.058 153.175 47.004 2.933 0.354 39.714
20 449.19 2970.746 126.152 45.49 3.561 0.44 40
21 449.19 2969.877 83.894 34.864 5.354 0.709 30.06
22 449.19 2966.816 59.903 25.428 7.499 1.236 23.388
23 449.19 2965.571 57.57 29.654 7.803 1.573 28.494
24 449.19 2968.102 143.27 36.361 3.135 0.407 30.824
25 449.19 2968.038 132.928 45.502 3.379 0.441 34.991
26 449.19 2965.217 54.504 20.323 8.241 1.291 15.214
27 449.19 2964.374 50.728 20.356 8.855 1.554 16.04
28 449.19 2964.894 65.339 24.825 6.875 0.999 19.56
29 449.19 2964.728 69.862 23.111 6.43 0.951 18.416
30 449.19 2964.394 71.585 24.889 6.275 0.963 20.226
31 449.19 2963.727 69.72 24.165 6.443 0.953 20.292
32 449.19 2963.392 75.411 30.58 5.957 0.868 27.13
33 449.19 2963.191 84.955 35.69 5.287 0.787 30.366
(sigue en la pagina siguiente )
358
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.7: Continuacion de la tabla par ametros
hidraulicos T
R
= 200 a nos
Sta Q (m
3
/s) Elev (m) Area(m
2
) Perm (m) V(m/s) Froude Ancho (m)
34 449.19 2962.79 79.386 36.208 5.658 0.793 30.63
35 449.19 2962.987 106.852 36.142 4.204 0.578 30.413
36 449.19 2963.177 124.737 40.243 3.601 0.487 33.113
37 449.19 2963.366 154.063 47.383 2.916 0.387 38.707
38 449.19 2963.491 180.721 48.995 2.486 0.327 36.015
39 449.19 2963.571 199.61 51.736 2.25 0.272 37.18
40 449.19 2963.656 227.326 54.142 1.976 0.237 40
41 449.19 2963.608 221.238 54.498 2.03 0.229 40
42 449.19 2959.342 47.79 22.895 9.399 1.55 19.444
43 449.19 2958.092 47.316 25.251 9.493 1.918 23.943
44 449.19 2960.588 146.079 40.548 3.075 0.439 35.805
45 449.19 2960.55 148.835 41.413 3.018 0.395 35.477
46 449.19 2960.491 135.217 36.196 3.322 0.437 30.264
47 449.19 2960.607 148.065 44.278 3.034 0.395 80
48 449.19 2960.664 164.093 47.596 2.737 0.329 40
49 449.19 2960.652 166.058 47.487 2.705 0.325 40
50 449.19 2956.176 45.064 23.031 9.968 1.98 21.323
51 449.19 2958.926 131.642 42.636 3.412 0.472 37.194
52 449.19 2956 53.279 28.563 8.431 1.735 27.057
53 449.19 2958.221 129.589 40.598 3.466 0.467 37.054
54 449.19 2958.378 132.073 41.086 3.401 0.464 36.156
55 449.19 2958.234 121.089 41.487 3.71 0.471 41.281
(sigue en la pagina siguiente )
359
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.7: Continuacion de la tabla par ametros
hidraulicos T
R
= 200 a nos
Sta Q (m
3
/s) Elev (m) Area(m
2
) Perm (m) V(m/s) Froude Ancho (m)
56 449.19 2958.682 179.563 45.357 2.502 0.307 40
57 449.19 2958.675 176.738 41.7 2.542 0.312 35.34
58 449.19 2958.639 166.284 40.121 2.701 0.332 33.571
59 449.19 2958.714 183.076 41.375 2.454 0.3 34.352
60 449.19 2958.77 202.518 43.826 2.218 0.252 36.024
61 449.19 2958.772 203.284 46.773 2.21 0.251 38.622
62 449.19 2958.774 207.988 49.391 2.16 0.231 39.416
63 449.19 2958.78 208.559 55.131 2.154 0.231 40
64 449.19 2953.78 48.455 34.428 9.27 1.339 27.36
65 449.19 2953.665 45.005 34.275 9.981 1.459 27.429
66 449.19 2953.435 49.058 19.912 9.156 1.372 14.294
67 449.19 2952.974 57.348 22.277 7.833 1.239 17.684
68 449.19 2954.771 120.583 40.344 3.725 0.454 31.857
69 449.19 2952.613 58.817 25.269 7.637 1.123 22.234
70 449.19 2952.331 60.61 25.702 7.411 1.124 23.258
71 449.19 2951.767 56.915 25.39 7.892 1.281 23.244
72 449.19 2953.219 118.363 38.224 3.795 0.525 35.679
73 449.19 2953.189 128.768 36.757 3.488 0.454 32.296
74 449.19 2953.489 135.779 34.986 3.308 0.42 28.542
75 449.19 2953.303 133.617 36.05 3.362 0.433 29.196
76 449.19 2953.463 134.784 35.795 3.333 0.424 31.675
77 449.19 2953.402 129.156 34.84 3.478 0.413 30.965
(sigue en la pagina siguiente )
360
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.7: Continuacion de la tabla par ametros
hidraulicos T
R
= 200 a nos
Sta Q (m
3
/s) Elev (m) Area(m
2
) Perm (m) V(m/s) Froude Ancho (m)
78 449.19 2950.787 55.203 20.604 8.137 1.208 16.98
79 449.19 2950.413 60.123 23.054 7.471 1.157 20.116
80 449.19 2952.502 136.1 37.222 3.3 0.419 32.836
81 449.19 2952.379 130.639 37.535 3.438 0.409 32.082
82 449.19 2949.143 51.253 21.352 8.764 1.402 17.615
83 449.19 2950.781 103.377 34.286 4.345 0.585 29.776
84 449.19 2948.184 52.184 21.713 8.608 1.37 18.79
85 449.19 2949.892 114.047 37.978 3.939 0.525 32.621
86 449.19 2950.248 137.622 42.272 3.264 0.422 36.658
87 449.19 2947.388 55.063 22.186 8.158 1.267 17.814
88 449.19 2946.616 49.35 20.125 9.102 1.377 15.109
89 449.19 2946.072 48.228 19.266 9.314 1.342 13.451
90 449.19 2945.983 48.305 18.719 9.299 1.352 14.062
91 449.19 2945.806 65.91 25.156 6.815 1.01 22.747
92 449.19 2945.452 62.142 24.888 7.228 1.114 22.456
93 449.19 2944.744 61.898 23.559 7.257 1.082 20.652
94 449.19 2944.328 68.412 25.023 6.566 1.027 22.207
95 449.19 2943.495 57.228 21.424 7.849 1.204 17.207
96 449.19 2942.83 69.006 24.159 6.509 1.047 19.992
97 449.19 2941.775 75.619 30.652 5.94 0.883 26.201
98 449.19 2941.389 86.428 34.903 5.197 0.726 30.574
99 449.19 2941.619 126.947 38.005 3.538 0.484 31.32
(sigue en la pagina siguiente )
361
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.7: Continuacion de la tabla par ametros
hidraulicos T
R
= 200 a nos
Sta Q (m
3
/s) Elev (m) Area(m
2
) Perm (m) V(m/s) Froude Ancho (m)
100 449.19 2941.959 172.648 43.076 2.602 0.319 34.728
101 449.19 2942.041 201.439 48.504 2.23 0.266 39.561
102 449.19 2942.127 228.582 50.752 1.965 0.233 40
103 449.19 2942.17 259.558 52.378 1.731 0.192 40
104 449.19 2937.17 43.386 23.93 10.353 1.6 47.434
105 449.19 2936.443 54.105 21.811 8.302 1.244 17.953
106 449.19 2935.988 66.91 33.147 6.713 1.06 28.581
107 449.19 2935.077 72.182 30.513 6.223 0.972 32.46
108 449.19 2934.257 75.519 28.833 5.948 0.91 26.42
109 449.19 2933.616 72.986 30.683 6.154 1.019 27.351
110 449.19 2934.812 128.369 38.991 3.499 0.504 33.537
111 449.19 2933.138 72.719 33.559 6.177 0.958 30.179
112 449.19 2932.377 62.652 33.322 7.17 1.227 30.56
113 449.19 2933.176 99.995 38.437 4.492 0.694 34.76
114 449.19 2932.181 70.633 34.901 6.359 0.981 31.677
115 449.19 2931.464 72.32 33.575 6.211 1.05 30.919
116 449.19 2930.03 65.912 34.551 6.815 1.49 31.872
117 449.19 2931.428 135.883 41.41 3.306 0.496 36.363
118 449.19 2929.872 70.018 31.791 6.415 1.188 28.612
119 449.19 2929.829 81.581 32.782 5.506 0.887 29.783
120 449.19 2928.759 72.154 36.095 6.225 1.175 34.117
121 449.19 2928.528 80.939 38.274 5.55 1.093 36.331
(sigue en la pagina siguiente )
362
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.7: Continuacion de la tabla par ametros
hidraulicos T
R
= 200 a nos
Sta Q (m
3
/s) Elev (m) Area(m
2
) Perm (m) V(m/s) Froude Ancho (m)
122 449.19 2927.911 70.125 40.338 6.406 1.442 39.082
123 449.19 2928.949 122.546 45.372 3.665 0.582 40
124 449.19 2927.033 61.052 35.092 7.357 1.608 33.07
125 449.19 2928.438 116.323 43.919 3.862 0.579 36.983
(Fin de la tabla)
Cuadro D.8: Resultados par ametros hidr aulicos T
R
= 500
a nos
Sta Q (m
3
/s) Elev (m) Area(m
2
) Perm (m) V(m/s) Froude Ancho (m)
1 609.92 2973.869 97.25 47.364 6.272 0.913 39.788
2 609.92 2973.677 110.277 46.841 5.531 0.822 39.116
3 609.92 2973.294 100.866 47.021 6.047 0.939 38.445
4 609.92 2973.736 140.678 48.618 4.336 0.64 37.882
5 609.92 2971.748 78.357 39.552 7.784 1.295 34.335
6 609.92 2972.892 129.515 46.517 4.709 0.684 37.701
7 609.92 2971.227 80.079 36.756 7.616 1.367 30.487
8 609.92 2971.503 100.283 40.221 6.082 0.922 33.75
9 609.92 2970.945 90.215 38.037 6.761 1.095 32.451
10 609.92 2972.418 147.756 46.289 4.128 0.57 38.449
11 609.92 2970.843 87.746 40.802 6.951 1.141 35.79
12 609.92 2970.706 91.682 34.032 6.653 1.113 28.623
(sigue en la pagina siguiente)
363
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.8: Continuacion de la tabla par ametros
hidraulicos T
R
= 500 a nos
Sta Q (m
3
/s) Elev (m) Area(m
2
) Perm (m) V(m/s) Froude Ancho (m)
13 609.92 2971.78 137.925 43.97 4.422 0.591 36.021
14 609.92 2972.156 175.43 48.473 3.477 0.45 40
15 609.92 2972.189 189.826 46.572 3.213 0.414 40
16 609.92 2972.192 209.946 48.86 2.905 0.347 40
17 609.92 2972.283 209.158 49.115 2.916 0.347 40
18 609.92 2972.247 207.511 50.106 2.939 0.35 39.941
19 609.92 2972.209 198.88 50.456 3.067 0.343 39.714
20 609.92 2969.719 88.234 31.616 6.913 0.928 27.745
21 609.92 2970.376 100.208 40.074 6.087 0.773 34.874
22 609.92 2967.481 76.266 28.163 7.997 1.215 25.768
23 609.92 2969.847 202.644 45.997 3.01 0.369 40
24 609.92 2969.971 214.766 50.118 2.84 0.322 40
25 609.92 2969.961 206.841 56.018 2.949 0.335 40
26 609.92 2965.808 63.67 21.751 9.579 1.404 15.962
27 609.92 2968.719 158.075 42.233 3.858 0.445 30.896
28 609.92 2964.983 67.089 25.2 9.091 1.309 19.87
29 609.92 2964.905 73.154 23.547 8.338 1.21 18.667
30 609.92 2964.749 78.937 26.093 7.727 1.14 21.185
31 609.92 2964.437 85.384 28.82 7.143 0.984 24.57
32 609.92 2964.812 119.045 37.969 5.123 0.656 32.169
33 609.92 2965.408 154.683 43.227 3.943 0.482 32.537
34 609.92 2962.465 69.499 35.023 8.776 1.27 30.206
(sigue en la pagina siguiente)
364
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.8: Continuacion de la tabla par ametros
hidraulicos T
R
= 500 a nos
Sta Q (m
3
/s) Elev (m) Area(m
2
) Perm (m) V(m/s) Froude Ancho (m)
35 609.92 2962.337 87.208 34.081 6.994 1.025 30.019
36 609.92 2962.082 89.591 35.711 6.808 1.026 31.043
37 609.92 2961.571 88.947 39.23 6.857 1.098 34.559
38 609.92 2963.201 170.267 48.124 3.582 0.483 36.015
39 609.92 2963.403 193.367 51.233 3.154 0.386 37.18
40 609.92 2963.589 224.656 53.942 2.715 0.328 40
41 609.92 2963.487 216.4 54.135 2.818 0.32 40
42 609.92 2960.579 83.965 38.328 7.264 1.039 33.834
43 609.92 2960.565 116.887 35.776 5.218 0.747 32.424
44 609.92 2960.538 144.262 40.372 4.228 0.607 35.679
45 609.92 2960.437 144.857 41.095 4.211 0.556 35.267
46 609.92 2958.476 78.884 29.536 7.732 1.253 25.281
47 609.92 2959.949 126.323 35.593 4.828 0.666 30.697
48 609.92 2960.206 145.781 45.67 4.184 0.52 80
49 609.92 2958.057 76.823 26.96 7.939 1.2 24.454
50 609.92 2957.522 75.51 27.3 8.077 1.301 24.464
51 609.92 2959.07 137.008 43.279 4.452 0.607 37.519
52 609.92 2959.419 168.873 46.558 3.612 0.478 40
53 609.92 2956.67 77.851 31.626 7.834 1.239 29.594
54 609.92 2958.465 135.399 45.226 4.505 0.61 40
55 609.92 2958.079 115.54 39.612 5.279 0.678 35.537
56 609.92 2959.039 193.826 46.426 3.147 0.376 40
(sigue en la pagina siguiente)
365
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.8: Continuacion de la tabla par ametros
hidraulicos T
R
= 500 a nos
Sta Q (m
3
/s) Elev (m) Area(m
2
) Perm (m) V(m/s) Froude Ancho (m)
57 609.92 2959.015 188.813 42.502 3.23 0.387 35.653
58 609.92 2958.948 176.709 40.795 3.452 0.415 33.762
59 609.92 2959.078 195.615 42.161 3.118 0.372 34.566
60 609.92 2959.171 216.989 44.645 2.811 0.312 36.142
61 609.92 2959.177 218.979 47.662 2.785 0.309 38.887
62 609.92 2959.179 224.006 50.309 2.723 0.285 39.732
63 609.92 2959.194 225.092 56.371 2.71 0.284 40
64 609.92 2954.194 59.919 36.114 10.179 1.412 28.113
65 609.92 2954.492 68.273 37.583 8.934 1.206 28.863
66 609.92 2955.088 96.312 40.774 6.333 0.813 31.785
67 609.92 2956.28 147.8 46.496 4.127 0.485 35.411
68 609.92 2956.703 184.68 53.162 3.303 0.355 40
69 609.92 2952.863 64.514 26.52 9.454 1.355 23.365
70 609.92 2952.83 73.139 30.525 8.339 1.199 27.941
71 609.92 2952.764 82.675 32.928 7.377 1.068 30.366
72 609.92 2954.023 148.279 41.906 4.113 0.531 38.372
73 609.92 2953.841 150.163 38.593 4.062 0.502 33.284
74 609.92 2954.249 157.677 36.669 3.868 0.464 29.064
75 609.92 2953.949 152.709 37.648 3.994 0.489 29.895
76 609.92 2954.243 159.86 37.835 3.815 0.458 32.665
77 609.92 2951.646 80.154 27.646 7.609 1.037 24.804
78 609.92 2952.132 80.387 25.016 7.587 0.991 20.462
(sigue en la pagina siguiente)
366
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.8: Continuacion de la tabla par ametros
hidraulicos T
R
= 500 a nos
Sta Q (m
3
/s) Elev (m) Area(m
2
) Perm (m) V(m/s) Froude Ancho (m)
79 609.92 2953.104 127.205 35.694 4.795 0.581 31.142
80 609.92 2953.68 176.314 40.773 3.459 0.403 35.484
81 609.92 2953.499 168.111 41.073 3.628 0.401 34.822
82 609.92 2950.078 69.8 26.163 8.738 1.258 21.953
83 609.92 2949.997 81.799 29.102 7.456 1.083 25.017
84 609.92 2951.215 137.158 39.726 4.447 0.535 33.17
85 609.92 2951.772 183.146 49.922 3.33 0.385 40
86 609.92 2951.873 201.926 50.077 3.021 0.347 40
87 609.92 2951.633 174.743 48.671 3.49 0.383 40
88 609.92 2946.633 49.607 20.173 12.295 1.857 15.138
89 609.92 2946.106 48.697 19.943 12.525 1.799 14.073
90 609.92 2946.051 49.261 18.863 12.381 1.788 14.11
91 609.92 2945.942 69.035 25.79 8.835 1.29 23.295
92 609.92 2945.724 68.401 26.227 8.917 1.333 23.644
93 609.92 2948.329 166.587 42.838 3.661 0.409 33.696
94 609.92 2948.46 189.448 42.77 3.219 0.357 32.306
95 609.92 2943.46 56.621 21.319 10.772 1.659 17.133
96 609.92 2942.76 67.596 23.977 9.023 1.464 19.883
97 609.92 2941.633 71.975 29.686 8.474 1.279 25.302
98 609.92 2941.106 77.802 34.003 7.839 1.126 30.396
99 609.92 2941.053 109.353 36.143 5.578 0.805 30.858
100 609.92 2940.945 137.884 39.737 4.423 0.587 33.893
(sigue en la pagina siguiente)
367
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.8: Continuacion de la tabla par ametros
hidraulicos T
R
= 500 a nos
Sta Q (m
3
/s) Elev (m) Area(m
2
) Perm (m) V(m/s) Froude Ancho (m)
101 609.92 2941.314 173.14 45.545 3.523 0.444 38.246
102 609.92 2941.492 203.275 48.45 3 0.373 39.397
103 609.92 2941.686 240.178 50.924 2.539 0.291 40
104 609.92 2941.45 205.149 56.747 2.973 0.325 40
105 609.92 2936.45 54.233 22.011 11.246 1.683 18.148
106 609.92 2936.002 67.317 33.193 9.06 1.428 28.59
107 609.92 2935.106 72.988 31.018 8.356 1.301 32.823
108 609.92 2934.314 77.031 29.157 7.918 1.203 26.723
109 609.92 2933.73 76.113 31.301 8.013 1.307 27.871
110 609.92 2935.116 138.639 40.545 4.399 0.615 34.709
111 609.92 2934.492 115.565 38.131 5.278 0.713 33.098
112 609.92 2935.086 153.312 42.455 3.978 0.511 36.385
113 609.92 2935.339 179.518 45.425 3.398 0.427 39.058
114 609.92 2932.248 72.763 35.12 8.382 1.283 31.813
115 609.92 2931.598 76.48 33.938 7.975 1.324 31.105
116 609.92 2930.299 74.509 35.253 8.186 1.687 32.213
117 609.92 2932.501 175.553 44.022 3.474 0.469 37.453
118 609.92 2930.336 83.358 32.821 7.317 1.26 28.936
119 609.92 2929.755 79.404 32.586 7.681 1.249 29.684
120 609.92 2931.184 158.102 42.111 3.858 0.536 36.766
121 609.92 2928.356 74.733 37.848 8.161 1.662 36.142
122 609.92 2930.732 182.649 48.464 3.339 0.485 40
(sigue en la pagina siguiente)
368
Apendice D. RESULTADOS DEL PROGRAMA
Cuadro D.8: Continuacion de la tabla par ametros
hidraulicos T
R
= 500 a nos
Sta Q (m
3
/s) Elev (m) Area(m
2
) Perm (m) V(m/s) Froude Ancho (m)
123 609.92 2930.857 198.862 51.096 3.067 0.401 40
124 609.92 2927.198 66.543 35.871 9.166 1.93 33.488
125 609.92 2929.098 141.768 48.547 4.302 0.602 40
(Fin de la tabla)
369
Apendice E
PLANOS
Los planos corresponden a:
Componente hidrologico
Plano Cartograco del cuenca
Plano Red Topologico de la cuenca
Plano Altitudinal de la cuenca.
Plano perl longitudinal del cauce principal
Componente hidraulico
Planos planta y secciones transversales del ro Huallaga.
370

Potrebbero piacerti anche