Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Defensas Ribere
nas con ObjectARX C++
Ayacucho
Peru
2009
PRESENTACION
La presente tesis lleva por ttulo Programa Lluvia Escorrenta Para Simulacion de De-
fensas Ribere
nas con ObjectARX C++, como una contribucion a la investigacion y pro-
gramacion en el area de la ingeniera hidraulica. La realizacion de esta investigacion sale
a luz luego de haber trabajado en m
ultiples problemas relacionados con el estudio de
defensas ribere
nas y transito de flujos en cauces naturales, con el afan de plasmar me-
diante un programa informatico que involucre analisis hidrologico, analisis hidraulico y
finalmente hidraulica fluvial, se plantea el desarrollo informatico mediante el lenguaje de
programacion C++ y ObjectARX. Esperando que su aplicacion sirva a todos aquellos
profesionales y estudiantes inmersos a la hidraulica.
i
DEDICATORIA
ii
AGRADECIMIENTOS
A la Ingeniera Jessica Z
uniga 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.
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.
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.
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.
Especficamente, 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 programacion
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 grafico, permitiendo definir comandos nativos dentro de programa
AutoCAD, ademas crea objetos personalizados en la base de datos para las aplicaciones
especificas.
El contenido teorico de la presente tesis de investigacion, explica los pasos y los procedi-
mientos a seguir mediante la utilizacion 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 permitira comprobar la relacion teorico-practico. Finalmente se adjunta
los diagramas de flujo y el codigo fuente del programa.
v
En la etapa Hidrologica, se desarrolla la programacion de los modelos matematicos para
simulacion precipitacion escorrenta desde generacion 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 Conservacion 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. Determinacion de hidrogramas de maximas avenidas: Esta etapa se
desarrollara mediante el metodo de convolucion directa.
Portada
Presentaci
on I
Dedicatoria II
Agradecimientos III
Resumen V
Indice de Figuras XV
1. INTRODUCCION 1
1.1. Antecedentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
vii
INDICE GENERAL
1.3.1. Generales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3.2. Especficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. TEORIA HIDROLOGICA
Y DIAGRAMAS DE FLUJO 7
2.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.1. IILA-SENAMHI-UNI . . . . . . . . . . . . . . . . . . . . . . . . . . 9
viii
INDICE GENERAL
3. TEORIA HIDRAULICA
Y SECCIONES TRANSVERSALES EN
RIOS 42
3.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4. MODELOS NUMERICOS EN RIOS Y DIAGRAMAS DE FLUJO 68
4.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
ix
INDICE GENERAL
5.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
PRACTICA
6. APLICACION DEL PROGRAMA DESARROLLADO 110
x
INDICE GENERAL
Bibliografa 132
A. HIDROLOGIA CODIGO
FUENTE C++ 137
B. HIDRAULICA
CODIGO FUENTE C++ 201
C. HIDRAULICA
FLUVIAL CODIGO FUENTE C++ 313
E. PLANOS 370
xi
Indice de cuadros
xii
INDICE DE CUADROS
xiii
INDICE DE CUADROS
xiv
Indice de figuras
(P 0,2S)2
2.4. Solucion grafica de la ecuacion Pe = P +0,8S
, (Fuente: Chapter 10 Esti-
mation of Direct Runoff from Storm Rainfall ) . . . . . . . . . . . . . . . . 16
xv
INDICE DE FIGURAS
xvi
INDICE DE FIGURAS
6.20. Hidrograma TR = 50 a
nos . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
xvii
Captulo 1
INTRODUCCION
1.1. Antecedentes
A inicios de los a
nos 60, con la aparicion de las primeras computadoras se realizaron
numerosos programas para calcular y/o transformar la lluvia-escorrenta y transito de
flujos 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 hidraulica e
hidrologa, realizando softwares en su maxima expresion, 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 Artificial, tales como Algoritmos Geneticos, Redes Neuronales Artificiales,
entre otros.
1
1.2. Necesidad o motivacion de la investigacion
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 elaboracion de diversos proyectos
como es el caso de obras hidraulicas e hidrologicas propios de la Ingeniera Civil; por otro
lado el interes de ampliar y profundizar mis conocimientos de programacion aplicada,
permitieron hacer una realidad y lograr el producto final como es PLEDER en su primera
version.
2
1.3. Objetivos de la tesis
1.3.1. Generales
1.3.2. Especficos
3
1.4. Organizacion de la tesis
Programacion del metodo del paso estandar para simulacion de cauces aluviales
en flujo permanente gradualmente variado a traves de n secciones transversales
de un ro.
Todos los tres aspectos anteriores seran enlazados de tal manera de contar con una
herramienta de programacion sumamente u
til que permita dise
nar en forma segura
y optima una defensa ribere
na.
1.4. Organizaci
on de la tesis
4
1.4. Organizacion de la tesis
5
1.4. Organizacion de la tesis
Ap
endice A, presenta el contenido del codigo fuente C++ en el componente
Hidrologico.
Ap
endice B, presenta el contenido del codigo fuente C++ en el componente
Hidraulico.
Ap
endice C, presenta el contenido del codigo fuente C++ en el componente
Hidraulica Fluvial.
Ap
endice D, contiene los resultados de la aplicacion practica del programa.
Ap
endice E, corresponde a los planos, cartograficos, red topologico, altitudinal,
perfiles longitudinales y los planos planta-perfil del ro Huallaga.
6
Captulo 2
TEORIA HIDROLOGICA
Y
DIAGRAMAS DE FLUJO
2.1. Introducci
on
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 flujo el procedimiento
7
2.2. Desarrollo de Hietogramas de dise
no
La palabra Hietograma proviene del termino griego Hietos, que significa lluvia. Es un
resumen grafico escalonado de un conjunto de datos, donde nos permite ver pautas que
son difciles de observar en una simple tabla numerica (expresa precipitacion en funcion
del tiempo). En ordenadas puede figurar la precipitacion cada (mm), o bien la intensidad
de precipitacion (mm/hora). Generalmente se representa como un histograma (grafico
barras), aunque a veces tambien se expresa como un grafico de lneas.
8
2.2. Desarrollo de Hietogramas de dise
no
2.2.1. IILA-SENAMHI-UNI
para 3 t 24 horas:
Pt,T = a (1 + KLogT ) tn (2.2.1)
para t 3 horas:
Pt,T = a (1 + KLogT ) (t + b)n1 t (2.2.3)
Donde Pt,T , it,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
parametro b se clasifica seg
un las regiones naturales del Per
u
El valor 0.40 horas (sierra), fue determinado en base a estudios de pluviografos en las
estaciones de Abancay y Chuquibamba.
El Natural Resources Conservation Service del US (NRCS) o conocido antes como (SCS)
Soil Conservation Service, desarrollo hidrogramas sinteticos de tormentas para utilizarse
9
2.2. Desarrollo de Hietogramas de dise
no
10
2.2. Desarrollo de Hietogramas de dise
no
0.8 0.8
0.6 0.6
0.4 0.4
0.2 0.2
0 0
0 2 4 6 8 10 12 14 16 18 20 22 24 0 2 4 6 8 10 12 14 16 18 20 22 24
Tiempo (horas) Tiempo (horas)
Pt/P24 Pt/P24
TORMENTA TIPO II TORMENTA TIPO III
1 1
0.8 0,8
0.6 0,6
0.4 0,4
0.2 0,2
0 0
0 2 4 6 8 10 12 14 16 18 20 22 24 0 2 4 6 8 10 12 14 16 18 20 22 24
Tiempo (horas) Tiempo (horas)
11
2.3. Tasas de Infiltracion - Metodo del NRCS
Pt/P24
1
0.9
0.8
0.7
0.6
0.5
0.4
0.3
Tipo I
Tipo IA
0.2
Tipo II
Tipo III
0.1
0
0 2 4 6 8 10 12 14 16 18 20 22 24
Tiempo (horas)
Para obtener estas precipitaciones, empleamos el metodo del NRCS, cuyo procedimiento
1
Precipitaci
on Neta: generalmente se utiliza para la precipitacion que produce escorrenta directa,
aunque en otros estudios se refiere a la diferencia precipitacion - evaporacion
12
2.3. Tasas de Infiltracion - Metodo del NRCS
(P Ia )2
Pe = (2.3.1)
(P Ia ) + S
y cuando P Ia
Pe = 0 (2.3.2)
Donde:
13
2.3. Tasas de Infiltracion - Metodo del NRCS
Fa Pe
= (2.3.3)
S P
Donde:
F a = P Pe (2.3.4)
P Pe Pe
= (2.3.5)
S P
Despejando Pe
P2
Pe = (2.3.6)
P +S
Fa Pe
= (2.3.7)
S P Ia
Donde:
14
2.3. Tasas de Infiltracion - Metodo del NRCS
Fa S y Pe (P Ia )
F = (P Ia ) Pe (2.3.8)
(P Ia ) Pe Pe
= (2.3.9)
S P Ia
(P Ia )2
Pe = (2.3.10)
(P Ia ) + S
Ia = 0,2S (2.3.11)
(P 0,2S)2
Pe = (2.3.12)
P + 0,8S
1
Resultado obtenido al estudiar muchas cuencas experimentales peque
nas
15
2.3. Tasas de Infiltracion - Metodo del NRCS
(P 0,2S)2
Figura 2.4: Solucion grafica de la ecuacion Pe = P +0,8S
, (Fuente: Chapter 10 Estimation
of Direct Runoff from Storm Rainfall )
El N
umero de Curva CN en relacion a S en pulgadas (in).
1000
S= 10 (2.3.13)
CN
El N
umero de Curva CN en relacion a S en milmetros (mm).
16
2.3. Tasas de Infiltracion - Metodo del NRCS
25400
CN = (2.3.14)
254 + S
Los n
umeros de curva que se muestran en la figura 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
4,2CN (II)
CN (I) = (2.3.15)
10 0,058CN (II)
23CN (II)
CN (III) = (2.3.16)
10 0,13CN (II)
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 definen 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
der
18
2.4. Hidrogramas Unitarios Sinteticos: NRCS y Snyder
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 debera ser subdividida en
2
subcuencas de modo que se cumpla esta suposicion
La duracion del escurrimiento directo (tiempo base del hidrograma unitario) que
resulta del exceso de lluvia de duracion conocida es constante.
19
2.4. Hidrogramas Unitarios Sinteticos: NRCS y Snyder
Principios B
asicos
La derivacion y aplicacion del Hidrograma Unitario esta basada en una teora emprica
que esta conformada por dos teoremas o principios basicos que se aplican en todos los
casos:
20
2.4. Hidrogramas Unitarios Sinteticos: NRCS y Snyder
Pe1 ie Qe
= 1 = 1 =k (2.4.1)
Pe2 ie2 Qe2
Principio de Superposici
on: 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.
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 pluviograficos 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-
ficie, pendiente media, longitud del cauce, etc.) proporcionan una idea del hidrograma
resultante. Los hidrogramas unitarios obtenidos de esta forma se denominan hidrogramas
unitarios sinteticos.
21
2.4. Hidrogramas Unitarios Sinteticos: NRCS y Snyder
0.9
0.8
0.7
0.6
q/qp
0.5
0.4
0.3
0.2
0.1
0
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
t/Tp
La figura 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 recesion puede aproximarse a 1,67Tp . Como
el area del hidrograma es igual a 1cm, se demuestra que:
2,08A
qp = (2.4.2)
Tp
Bajo esta condicion se obtiene el tiempo de ocurrencia del pico Tp que se expresa en
terminos del tiempo de retardo tp y de la duracion de la lluvia efectiva tr .
22
2.4. Hidrogramas Unitarios Sinteticos: NRCS y Snyder
tr
Tp = + tp (2.4.4)
2
Snyder (1938), realizo estudios en cuencas de los Montes Apalaches (USA), con areas
de 30 a 30000 km2 y encontro relaciones sinteticas de un hidrograma unitarios sintetico
estandar, como se muestra en la figura 2.7a, a partir de las cuales pueden calcularse las
caractersticas de un hidrograma unitarios requerido 2.7b.
Figura 2.7: a) Hidrograma Unitario estandar (tp = 5,5tr ); b) Hidrograma Unitario re-
querido (tp 6= 5,5tr ). Fuente [11]
Para una duracion de lluvia efectiva determinada, los parametros del hidrograma unitario
requerido son:
Tiempo base, tb .
23
2.4. Hidrogramas Unitarios Sinteticos: NRCS y Snyder
Snyder definio el hidrograma unitario estandar como aquel que cumple que:
tp
tr = (2.4.5)
5,5
Donde L es la longitud del cauce principal hasta la divisoria de aguas arriba [km], Lc es
la distancia desde la salida de la cuenca hasta el punto del cauce principal mas cercano al
centroide del area de la cuenca [km] y Ct es un coeficiente 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 [m3 /s km2 ] es:
2,75Cp
qp = (2.4.7)
tp
Una forma de calcular los parametros Ct y Cp , es a partir de los datos: area de cuenca A
[km2 ], longitud del cauce principal L [km], Longitud hasta el centroide de la cuenca Lc
[km], duracion tR [h], retardo de la cuenca tpR [h] y Qp [m3 /s/cm], donde:
tR = tr
Si tpR = 5,5tR tpR = tP (2.4.8)
qpR = qp
24
2.4. Hidrogramas Unitarios Sinteticos: NRCS y Snyder
tr tR tpR 0,25tR
tp = tpR + , con tr =
4 5,25
Si tpR 6= 5,5tR tpR = tP (2.4.9)
qpR = qp
Para ambos casos Ct y Cp son calculados mediante las ecuaciones 2.4.6 y 2.4.7.
25
2.4. Hidrogramas Unitarios Sinteticos: NRCS y Snyder
C
alculo de las ecuaciones lineales para cada tramo del hidrograma unitario
sint
etico Snyder
tR
Tramo AB: 0 T 2
+ tpR 31 W50
0,5QpR
Q= tR T (2.4.10)
2
+ tpR 13 W50
tR tR
Tramo BC: 2
+ tpR 13 W50 < T 2
+ tpR 31 W75
3QpR tR 1
Q = 0,5QpR + T tpR + W50 (2.4.11)
4(W50 W75 ) 2 3
tR tR
Tramo CD: 2
+ tpR 31 W75 < T 2
+ tpR
3QpR tR 1
Q = 0,75QpR + T tpR + W75 (2.4.12)
4W75 2 3
tR tR
Tramo DE: 2
+ tpR < T 2
+ tpR + 32 W75
3QpR tR
Q = QpR T tpR (2.4.13)
8W75 2
tR tR
Tramo EF: 2
+ tpR + 23 W75 < T 2
+ tpR + 23 W50
3QpR tR 2
Q = 0,75QpR T tpR W75 (2.4.14)
8(W50 W75 ) 2 3
tR
Tramo FG: 2
+ tpR + 32 W50 < T tb
26
2.5. Metodo de Convolucion discreta para transformacion precipitacion-escorrenta
0,5QpR tR 2
Q = 0,50QpR tR T tpR W50 (2.4.15)
tb 2 tpR 23 W50 2 3
Donde: T , es el tiempo que se distribuye a lo ancho del tiempo base tb con un intervalo
fijo en horas.
Q, es la ordenada del hidrograma unitarios sintetico.
2.5. M
etodo de Convoluci
on discreta para transfor-
maci
on precipitaci
on-escorrenta
dS
=I Q (2.5.1)
dt
dI d2 I dQ d2 Q
S = f I, , 2 , ...Q, , (2.5.2)
dt dt dt dt2
27
2.5. Metodo de Convolucion discreta para transformacion precipitacion-escorrenta
dI d2 I dn1 I dQ d2 Q dm1 Q
S = a1 I + a2 + a3 2 + ... + an n1 + b1 Q + b2 + b3 2 + ... + bm m1 (2.5.3)
dt dt dt dt dt dt
Donde a1 , a2 , ...an , b1 , b2 , ...bm , son constantes y las derivadas de orden superior se despre-
cian.
dn I dn1 I d2 I dI
an n
+ ... + a n1 n1
+ ... + a 2 2
+ a1 I+
dt dt dt dt (2.5.4)
dm Q dm1 Q d2 Q dQ
bm m + ... + bm1 m1 + ... + b2 2 + b1 +Q=0
dt dt dt dt
dn dn1 d2 d
N (D) = an n
+ ... + a n1 n1
+ ... + a 2 2
+ a1 1
dt dt dt dt
28
2.5. Metodo de Convolucion discreta para transformacion precipitacion-escorrenta
y
dm dm1 d2 d
M (D) = bm m
... b m1 m1
... b 2 2
b1 1
dt dt dt dt
Resolviendo queda.
N (D)
Q(t) = I(t) (2.5.6)
M (D)
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
1
mismo la ecuacion 2.5.4, representa el modelo general del sistema hidrologico.
En Las aplicaciones practicas, las salidas de los resultados se requieren en intervalos tiempo
discretos 2 , ya que la entrada al sistema se especifica como una funcion 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 funcion de entrada
discreta para el m-esimo intervalo de tiempo es:
Z mt
Pm = I( )dt , m = 1, 2, 3, ... (2.5.7)
(m1)t
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 Convolucion discreta para transformacion precipitacion-escorrenta
Z (nm+1)t
1
h[(n m + 1)t] = u(l)dl (2.5.9)
t (nm)t
Para el pulso m
Pm
I( ) = , (m 1)t mt
t
I( ) = 0 , > M t
Z nt
Qn = I( )u(nt )d
0
P1 t P2 2t
Z Z
= u(nt )d + u(nt )d + ... (2.5.10)
t 0 t t
Pm mt PM M t
Z Z
= u(n )d + ... + u(nt )d
t (m1) t (M 1)t
30
2.5. Metodo de Convolucion discreta para transformacion precipitacion-escorrenta
Z mt Z (nm)t
Pm Pm
u(nt )d = u(l)dl
t (m1)t t (nm+1)t
Z (nm+1)t
Pm (2.5.11)
= u(l)dl
t (nm)
= Pm h[(n m + 1)t]
2.5.3. Funci
on respuesta de pulso discreto y Ecuaci
on de Con-
voluci
on Discreta
Se entiende que Un = h[nt], Un1 = h[(n 1)t]... y UnM +1 = h[(n M + 1)t]. Reem-
plazando en la ecuacion 2.5.12 la version en tiempo discreto de la integral de convolucion
es:
31
2.5. Metodo de Convolucion discreta para transformacion precipitacion-escorrenta
M
X
Qn = P1 Un + P2 Un1 + ... + Pm Unm+1 + .. + PM UnM +1 = Pm Unm+1 (2.5.14)
m=1
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 final es la ecuacion de
convolucion discreta para un sistema lineal.
nM
X
Qn = Pm Unm+1 (2.5.15)
m=1
min(n,M )
X
Qn = Pm Unm+1 (2.5.16)
m=max(1,nnU +1)
32
2.6. Diagramas de Flujo
33
2.6. Diagramas de Flujo
34
HietogramaIILA HietogramaNRCS
SENAMHI
INICIOPLEDERHIDROLOGIA
Parmetrosregionalesa,b,k, Precipitacionesmximasde24
n, t,t,perododeretornotr. horas(P24),Tipodetormenta.
V
T3horas F TipodeTormenta
TipoI TipoIA TipoIITipo III
Ecuacin2.2.3.Clculode Ecuacin2.2.1.Clculode
precipitacionesacumuladas, precipitacionesacumuladas,
incrementalesyalternas. incrementalesyalternas. Precipitacionesacumuladas,incrementales
Exportara.csv
Exportara.csv
ClculodePulsoso ClculoLluvia
Clculodehidrogramas
escorrentadirecta. Escorrenta. UnitariosSintticos
ModelosMeteorolgicos.
HidrogramaUnitarioSinttico
TormentaNRCSIILASENAMHI
H.U.S.NRCSH.U.S.SNYDER
Precipitacionesmximasde24 Parmetrosregionalesa,b,k,
Tiempode Tiempoderetardo
horas(P24),Tipodetormenta. n, t,t,perododeretorno tr.
retardo(Tlag) CoeficienteCp
Abstraccionesmediante ConvolucinDiscreta
elmtodoNRCS OrdenadasdelHidrogramaUnitario(U)
,
P U
Pulsos(P) ,
escorrentadirecta
Caudales(m/s)
35
2.6. Diagramas de Flujo
FINPLEDERHIDROLOGIA
2.6. Diagramas de Flujo
INICIOHIETOGRAMAIILASENAMHI
N,a,b,k,n,dt,Var,Tr,D
i=1,hastaN,
i=i+1
V F
3
1 1
i =1,hastaN,
i=i+1
V F
/2
1 2 2
Precipitaciones
Alternas(mm)
FINHIETOGRAMAIILASENAMHI
36
2.6. Diagramas de Flujo
INICIOHIETOGRAMANRCS
P24,Ndt,Tormenta
24
/60
24
Datos hidrolgicos,
Tormenta NRCS
i=0,hastaN+1,
i=i+1
1 24 1
1 1
Precipitaciones
Incrementales(mm)
FINHIETOGRAMANRCS
37
2.6. Diagramas de Flujo
INICIOHIDROGRAMAUNITARIO
SINTTICONRCS
Tlag,DT,dt
2
12.48
DatosHidrogramaUnitario
adimensionalNRCS
i=1,hastanU,
i=i+1
nU, q, t, DT x i
Ordenadasdel
HidrogramaUnitario
FINHIDROGRAMAUNITARIO
SINTTICONRCS
38
2.6. Diagramas de Flujo
INICIOHIDROGRAMAUNITARIO
SINTTICOSNYDER
, , , ,
4
2.75
2.14 .
1.22 .
i=1,hastanU,
i=i+1
/60
, , , , ,
Ordenadasdel
HidrogramaUnitario
FINHIDROGRAMAUNITARIO
SINTTICONRCS
39
Palterna,CN,nP
25400 254
0.2
i=1,hastanP,
i=i+1
1 alterna
V F
Pacum i
V F
i
0.0
)
1
Precipitacinen
Exceso(mm)
FINABSTRACCIONESNRCS
40
INICIOCONVOLUCINDISCRETA
OrdenadasHidrograma
Unitario[U],Pulsos[P],nP,nU
M=nP
nQ=M+nU1
A=mx(1,nnU+1)
B=mn(n,M)
n=1,hastanQ,
n=n+1
0.0
m=A,hastaB,
m=m+1
P m xU n m 1
Caudales(m/s)
FINCONVOLUCINDISCRETA
41
Captulo 3
TEORIA HIDRAULICA
Y
SECCIONES TRANSVERSALES
EN RIOS
3.1. Introducci
on
42
3.2. Bases teoricos para el calculo de flujo unidimensional
3.2. Bases te
oricos para el c
alculo de flujo unidimen-
sional
Se entiende por flujo unidimensional cuando se ignora las variaciones de los cambios en la
velocidad y la presion en el sentido perpendicular a la direccion principal del flujo. Para
su solucion numerica se tiene como base fundamental los tres principios derivados de la
fsica:
Conservacion de la Masa.
Conservacion de la Energa.
3.2.1. Ecuaci
on 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 fluido. 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)
Z s2 Z s2
1
F ds = m ads = m(v22 v12 ) (3.2.2)
s1 s1 2
43
3.2. Bases teoricos para el calculo de flujo unidimensional
Z t2 Z t2
1
F dt = m adt = m(v2 v1 ) (3.2.3)
t1 t1 2
Esta u
ltima expresion 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 flujos
(Ecuacion de la Energa, Ecuacion de Momentum).
3.2.2. Ecuaci
on de Movimiento del flujo.
44
3.2. Bases teoricos para el calculo de flujo unidimensional
pn (3.2.4)
p
(p + s)n (3.2.5)
s
gsnsin() (3.2.7)
p Z
Fr = pn (p + s)n gsn (3.2.8)
s s
p Z
Fr = sn gsn (3.2.9)
s s
Aplicando la segunda ley de movimiento, la fuerza resultante es igual a la masa del fluido
45
3.2. Bases teoricos para el calculo de flujo unidimensional
P Z
snas = s gsn (3.2.10)
s s
Simplificando
p Z
as = g = (p + Z) (3.2.11)
s s s
dVs Vs Vs ds Vs Vs
as = = + = + Vs (3.2.12)
dt t s dt |{z}
t | {zs}
Local Convectiva
Vs
El termino t
se denomina aceleracion local y se anula cuando el flujo 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.
Vs Vs
( + Vs ) + (p + Z) = 0 (3.2.13)
t s s
46
3.2. Bases teoricos para el calculo de flujo unidimensional
Vs
Los flujos permanentes ocurren cuando las aceleraciones locales, son cero, esto es, si t
dVs d
Vs + (p + Z) = 0 (3.2.14)
ds ds
1 2
V + p + Z = Constante (3.2.15)
2 s
Dividiendo entre
p Vs2
Z+ + = H = Constante (3.2.16)
2g
Es una de las formas alternativas de la ecuacion de Bernoulli. Esta ecuacion puede apli-
carse a lo largo de una lnea de corriente, en un fluido ideal sin rozamiento, pero la
1
aplicacion de la misma en otra direccion exige que el fluido sea irrotacional.
En una superficie libre se presenta el flujo uniforme, cuando en sus diferentes secciones,
las caractersticas de circulacion, velocidad, distribucion de presiones, profundidad de
circulacion, etc son iguales. En los cauces naturales, que corresponde a la aplicacion 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.
En el flujo uniforme, la aceleracion local y convectiva son cero, por lo tanto, la ecuacion
3.2.13 se reduce.
d
(p + Z) = 0 (3.2.17)
ds
Integrando se tiene.
p
+ Z = Constante (3.2.18)
C
alculo Num
erico.
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).
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 superficie libre de agua o cota
tirante, finalmente k representa la geometra de las seccion en la margen derecha.
49
3.3. Secciones Transversales en Cauces Naturales y Calculo Numerico.
En una seccion transversal natural de los cauces, es importantes representar de esta mane-
ra, ya que simplifica las operaciones matematicas para obtener los resultados geometricos
de cada seccion transversal que mas adelante se presenta. En la figura 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 superficie libre. En la parte central se
forman trapecios, cuya area hidraulica y permetro hidraulico se obtienen despues de una
sumatoria en cada una de ellas.
1 2 Xi+1 Xi
A = Ai = (Y Yi+1 ) (3.3.1)
2 Yi Yi+1
s 2
(Y Yi+1 )(Xi+1 Xi )
P = Pi = (Y Yi+1 )2 + (3.3.2)
Yi Yi+1
X X1
A= Aj = [(Y Yj ) + (Y Yj+1 )] (Xj+1 Xj ) (3.3.3)
2
X Xq
P = Pj = (Xj+1 Xj )2 + (Yj+1 Yj )2 (3.3.4)
1 2 Xk+1 Xk
A = Ak = (Y Yk ) (3.3.5)
2 Yk+1 Yk
50
3.4. Calculo del Tirante Normal
s 2
(Y Yk )(Xk+1 Xk )
P = Pk = (Y Yk )2 + (3.3.6)
Yk+1 Yk
3.4. C
alculo del Tirante Normal
3.4.1. C
alculo Num
erico
Para la solucion del tirante normal se tomara en cuenta las ecuaciones de Manning Strick-
ler, Chezy (Antoine de Chezy) y Darcy-Weisbach.
1/2
R2/3 Sf
v= (3.4.1)
n
p
v=C RSf (3.4.2)
51
3.4. Calculo del Tirante Normal
1/2 ks 1,255
v = (32gRSf ) log + (3.4.3)
14,8R R(32gRSf )1/2
Estas tres ecuaciones presentan ecuaciones no lineales, que para su solucion en cauces
naturales requieren de metodos numericos avanzados. Existen varios metodos para resolver
ecuaciones no lineales, tales como el Metodo de Biseccion, Metodo de Aproximaciones
Sucesivas, Metodo de Newton Raphson, entre otros mas y menos eficientes. 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)
F (y)
Y = (3.4.6)
F 0 (y)
Manning Strickler
52
3.4. Calculo del Tirante Normal
nQ
F (Y ) = A5/3 P 2/3 =0 (3.4.8)
S
|{z}
Constante
dF
Derivando la funcion F(Y) con respecto a Y ( dY )se tiene:
dF d 5/3 2/3 nQ 5 2/3 2/3 dA 2 5/3 5/3 dP
= A P = P A A P (3.4.9)
dY dy S 3 dY 3 dY
X
A = Ai + Aj + Ak (3.4.10)
Cuya derivada del Area Total en funcion del tirante Y.
dA dAi d X dAk
= + Aj + (3.4.11)
dY dY dY dY
dAi
Calculo de dY
dAi d 1 2 Xi+1 Xi
= (Y Yi+1 )
dY dY 2 Yi Yi+1
1 Xi+1 Xi
= 2 (Y Yi+1 ) (3.4.12)
Yi Yi+1
2
Xi+1 Xi
= (Y Yi+1 )
Yi Yi+1
53
3.4. Calculo del Tirante Normal
representar en funcion al area del triangulo izquierdo (Ai ), este se obtendra dividi-
endo la expresion (3.4.12)con (3.3.1).
Xi+1 Xi
dAi (Y Yi+1 )
:
:
:
2 i
(Y Yi+1 (Y
) Yi+1 )
(Xi+1 Xi )
dY Yi Yi+1
= = 1
Ai 1
(Y Yi+1 ) 2 Xi+1 Xi
Yi+1 )2
: :
2 Yi Yi+1 (Y (Xi+1
Xi ) i
(Y Yi+1
)
dAi 2Ai
= (3.4.13)
dY (Y Yi+1 )
d
P
Calculo de dY
Aj
d X d X1
Aj = [(Y Yj ) + (Y Yj+1 )] (Xj+1 Xj )
dY dY 2
X
d X
Aj = (Xj+1 Xj ) (3.4.14)
dY
dAk
Calculo de dY
dAk d 1 2 Xk+1 Xk
= (Y Yk )
dY dY 2 Yk+1 Yk
1 Xk+1 Xk
= 2 (Y Yk )
(3.4.15)
2
Yk+1 Yk
Xk+1 Xk
= (Y Yk )
Yk+1 Yk
Xk+1 Xk
dAk (Y Yk ) :
:
(Y Xk )
:
dY Yk+1 Yk 2
(Y
k+1 Yk ) Yk )
(Xk+1
= = 1 (3.4.16)
Ak 1
(Y Yk )2 Xk+1 Xk
2 : :
2 Yk+1 Yk (Y Yk ) (X
k+1
X
k )
(Y
k+1
Yk )
54
3.4. Calculo del Tirante Normal
dAk 2Ak
= (3.4.17)
dY (Y Yk )
Reemplazando en la ecuacion (3.4.11) se obtendra la derivada del Area total:
dA 2Ai X 2Ak
= + (Xj+1 Xj ) + (3.4.18)
dY (Y Yi+1 ) (Y Yk )
De la misma forma calculamos la derivada del Permetro mojando con respecto al tirante
dP
Y ( dY )
*0
dP dPi d X dPk
= + Pj +
dY dY dY
dY
dP dPi dPk
= + (3.4.19)
dY dY dY
dPi
Calculo de dY
s
2
dPi d (Y Yi+1 )(Xi+1 Xi )
= (Y Yi+1 )2 +
dY dY Yi Yi+1
:
2 (Y Yi+1 ) + 2 (Y Yi+1 )(X i+1 Xi ) Y X )
(Y )(X
: i i+1 2 i+1 i
Y i+1 )(Yi Yi+1 )
(Yi
= s
2
2
(Y Yi+1 )(Xi+1 Xi )
2 (Y Yi+1 ) +
Yi Yi+1
| {z }
P erimetro(Pi )
(Y Yi+1 )(Xi+1 Xi )2
(Y Yi+1 ) + (Yi Yi+1 )2
=
Pi
55
3.4. Calculo del Tirante Normal
Esta ecuacion a
un r
es posible simplificar haciendo algunos arreglos
h i2
Se sabe que: Pi = (Y Yi+1 )2 + (Y Yi+1 )(Xi+1 Xi )
Yi Yi+1
,
donde
2
2 (Y Yi+1 )(Xi+1 Xi )
2
(Pi ) = (Y Yi+1 ) +
Yi Yi+1
(Y Yi+1 )2 (Yi Yi+1 )2 + (Y Yi+1 )2 (Xi+1 Xi )2
=
(Yi Yi+1 )2
Note que la expresion de la derecha viene a ser igual a la ecuacion (3.4.20), por lo
tanto reemplazando se tiene.
Pi dPi
=
(Y Yi+1 ) dY
dPi Pi
= = cosec (1) (3.4.22)
dY (Y Yi+1 )
dPk
Calculo de dY
Analogamente:
56
3.4. Calculo del Tirante Normal
Pk dPk
=
(Y Yi ) dY
dPk Pk
= = cosec (2) (3.4.23)
dY (Y Yk )
dP Pi Pk
= + = cosec (1) + cosec (2) (3.4.24)
dY (Y Yi+1 ) (Y Yk )
57
3.4. Calculo del Tirante Normal
Chezy
p
Q = AC RSf (3.4.25)
Q
F (Y ) = A3/2 P 1/2 p =0 (3.4.26)
C Sf
| {z }
Constante
dF
Derivando la funcion F(Y) con respecto a Y ( dY )se tiene:
!
dF d Q 3 dA 1 dP
= A3/2 P 1/2 p = P 1/2 A1/2 A3/2 P 3/2
dY dy C Sf 2 dY 2 dY
(3.4.27)
Darcy-Weisbach
1/2 ks 1,255
Q = A(32gRSf ) log + (3.4.28)
14,8R R(32gRSf )1/2
Despejando las variables constantes, para formar la Funcion principal F(Y), e igualando
esta funcion cero.
1/2 ks 1,255 Q
F (Y ) = A(R) log + 1/2
=0 (3.4.29)
14,8R R(32gRSf ) (32gRSf )1/2
58
3.4. Calculo del Tirante Normal
dF
Derivando la funcion F(Y) con respecto a Y ( dY )se tiene:
A Rlog(C) 12 RLn(C) dA dP
dF dY
R dY A R(D)
= (3.4.30)
dY RLn(10) CLn(10)
Donde:
A
R: Radio Hidraulico R = P
C, D: Constantes.
dA dP
!
5Ks 251 v 32 dY
C= + p A dY2
74R 6400 R 3/2 gSf P P
5Ks 251 Rv 32 dA dP
= + R
74R 6400 AR >p
3/2
gSf dY dY
Donde:
5Ks 251 v 32 dA dP
C= + p R (3.4.31)
74R 6400 A RgSf dY dY
dA dP
753 v 32 P A
dA dP dY dY
5 Ks P dY 5 Ks dY P2
D= +
74 A2 74
A 12800 R5/2 gs
dA dP
753 v 32 R dA dP
5 Ks dY 5 Ks dY A dY
R dY
= +
74 RA 74 A 12800 R5/2 gs
Donde:
dA dP
R dY
5Ks dP 1 dA 753 v 32 dY
D= p (3.4.32)
74A dY R dy 12800 AR3/2 gSf
59
3.5. Caractersticas y Clasificacion de los Perfiles del Flujo Gradualmente Variado
V 2
H =Z +Y + (3.5.1)
2g
Q2 d
dH dZ dY 1
= + + (3.5.2)
dX dX dX 2g dX A2
60
3.5. Caractersticas y Clasificacion de los Perfiles del Flujo Gradualmente Variado
dH
= Sf (3.5.3)
dX
dZ
= S0 (3.5.4)
dX
d 1 d 1 dA
=
dX A2 dA A dX2
d 1 dA dY
= (3.5.5)
dA A2 dY dX
2B dY
= 3
A dX
dY S0 Sf
= (3.5.6)
dX 1 (BQ2 )/(gA3 )
Donde:
2BQ2 (Q/A)2
F = = (3.5.7)
gA3 (gA)/(B)
dY S0 Sf
= (3.5.8)
dX 1 F2
61
3.5. Caractersticas y Clasificacion de los Perfiles del Flujo Gradualmente Variado
Sf S0 Correspondiente a Y Yn (3.5.9)
F 1 Correspondiente a Y Yc (3.5.10)
Estas desigualdades dividen al canal en tres secciones en la dimension vertical, tal como se
62
3.5. Caractersticas y Clasificacion de los Perfiles del Flujo Gradualmente Variado
muestra en la figura 3.7. Por convencion, estas secciones se enumeran del 1 al 3 empezando
desde arriba.
63
3.6. Ecuaciones para el calculo de perfiles basicos.
Estos datos son necesarios para calcular los tirantes del cauce, empleando el metodo del
paso estandar.
1 V12 2 V22
Z 1 + Y1 + = Z 2 + Y2 + + hf (3.6.1)
2g 2g
Para un caudal dado, el tirante Y1 es conocido en la seccion 01. El metodo del paso
Estandar consiste en determinar el tirante en la seccion 02 a una distancia X2 . Primero
64
3.6. Ecuaciones para el calculo de perfiles basicos.
Q
determinamos la velocidad V1 en la seccion 01, V = A
, y en la ecuacion de la energa (Ec.
3.6.1) representamos de la forma siguiente:
1 V12
H1 = Z1 + Y1 + (3.6.2)
2g
H2 = H1 hf (3.6.3)
1
Donde hf , corresponde a la perdida total entre las secciones 1 y 2
As mismo se conoce
1
hf = (Sf1 + Sf2 )(X2 X1 ) (3.6.4)
2
1
H2 = H1 (Sf1 + Sf2 )(X2 X1 ) (3.6.5)
2
2 Q2 1
Z 2 + Y2 + + (Sf1 + Sf2 )(X2 X1 ) H1 = 0
2gA22 2
2 Q2 1 1
Y2 + 2
+ Sf2 (X2 X1 ) + Z2 H1 + Sf1 (X2 X1 ) = 0 (3.6.6)
2gA2 2 2
En la ecuacion 3.6.6, A2 y Sf2 son funciones de Y2 y todos los terminos restantes son
conocidos (calculados en la seccion 01). El tirante Y2 puede ser determinado, resolviendo
la siguiente ecuacion algebraica NO-LINEAL con metodo conocidos tales como Biseccion
o el metodo de Newton Raphson.
1
Perdida por fricci
on + perdida local
65
3.6. Ecuaciones para el calculo de perfiles basicos.
2 Q 2 1 1
F (Y2 ) = Y2 + 2
+ Sf2 (X2 X1 ) + Z2 H1 + Sf1 (X2 X1 ) = 0 (3.6.7)
2gA2 2 2
Para usa el metodo de Newton Raphson, es necesario contar la derivada de la funcion con
respecto al tirantes por conocer (Y2 ).Este se obtiene al diferenciar la expresion 3.6.7
dF 2 Q2 dA2 1 dSf2
=1 3
+ (X2 X1 ) +00+0
dY2 gA2 dY2 2 dY2
Tambien se sabe:
Q2 n2
Sf2 = 4/3
A22 R2
!
dF 2 Q2 dA2 1 d Q2 n2
=1 3
+ (X2 X1 ) 4/3
(3.6.8)
dY2 gA2 dY2 2 dY2 A22 R2
!
d Q 2 n2 2Q2 n2 dA2 4Q2 n2 dR2
4/3
= 4/3
7/3
dY2 A22 R2 A32 R2 dY2 3A22 R2 dY2
2 Q2 n2 dA2 4 Q2 n2 dR2
=
A2 A22 R24/3 dY2 3R2 A22 R24/3 dY2
| {z } | {z } (3.6.9)
Sf2 Sf2
2 dA2 4 dR2
= Sf2 Sf2
A2 dY2 3R2 dY2
Sf2 dA2 2Sf2 dR2
= 2 +
A2 dY2 3R2 dY2
2 Q2 dA2 1
dF Sf2 dA2 2Sf2 dR2
=1 + (X2 X1 )(2) +
dY2 gA32 dY2 2 A2 dY2 3R2 dY2
2 Q2 dA2
dF Sf2 dA2 2Sf2 dR2
=1 (X2 X1 ) + (3.6.10)
dY2 gA32 dY2 A2 dY2 3R2 dY2
66
3.6. Ecuaciones para el calculo de perfiles basicos.
dR2
La expresion dY2
puede ser reemplazado en funcion del area y el permetro. As:
A
R=
P
dR2 d A2 1 dA2 d 1
= = + A2
dY2 dY2 P2 P2 dY2 dY2 P2
(3.6.11)
1 dA2 A2 dP2
= 2
P2 dY2 P2 dY2
2 Q 2
dF B2 2 P2 B2 A2 dP2
=1 B2 (X2 X1 ) Sf2 + Sf2 2
dY2 gA32 A2 3 A2 P2 P2 dY2
2 Q2
dF B2 2 Sf2 A2 dP2
=1 B2 (X2 X1 ) Sf2 + B2
dY2 gA32 A2 3 A2 P2 dY2
2 Q2
dF 1 B2 2 dP2
=1 B2 Sf2 (X2 X1 ) 5 (3.6.12)
dY2 gA32 3 A2 P2 dY2
Estas ecuaciones sirven para calcular la superficie libre de agua (curva de remanso en un
flujo gradualmente variado) en secciones prismaticas y no prismaticas.
67
Captulo 4
MODELOS NUMERICOS EN RIOS
Y DIAGRAMAS DE FLUJO
4.1. Introducci
on
68
4.2. Formulacion de Flujos en 1D
4.2. Formulaci
on de Flujos en 1D
El modelo de la onda dinamica en 1D, para flujos en canales abiertos son gobernados por
las ecuaciones de Barre Saint Venant considerando flujos laterales (inflow/outflow). Se
tiene:
A Q
+ = ql (4.2.1)
t x
Q2
A Zs
+ + gA + gASf = ql Ux (4.2.2)
t x A x
Q|Q|
Sf = (4.2.3)
K2
AR2/3
Donde K viene a ser la conductividad. Para una simple seccion transversal, K = n
;
con R Radio Hidraulico y n el coeficiente de rugosidad de Manning del canal.
69
4.2. Formulacion de Flujos en 1D
2/3
Aj Rj
Kj = (4.2.4)
nj
Zs
gA + gASf = ql Ux (4.2.5)
x
Este modelo es mas Estable que el modelo de la onda dinamica, pero este u
ltimo es mas
exacto y puede ser aplicado en rangos amplios de condiciones de flujo.
Para este modelo, las variaciones en la velocidad del flujo y el tirante son Insignificantes en
comparacion con la variacion en la elevacion del lecho del cauce y por lo tanto la ecuacion
de momentum puede ser simplificado como:
Sf = S0 (4.2.6)
A 2/3 1/2
Q= R S0 (4.2.7)
n
70
4.2. Formulacion de Flujos en 1D
V
g S0
> 10 (4.2.8)
U2
V
Donde , representa la longitud del canal en estudio y U es la velocidad promedio del flujo
uniforme. La Ecuacion 4.2.8 implica que el modelo de la onda cinematica sea aplicado en
canales empinados o pronunciados (steep).
M
etodo Alpha
1
Aj = Zs (Zb,j + Zb,j+1 ) yj (4.2.9)
2
q
Pj = (Zb,j Zb,j+1 )2 + yj2 (4.2.10)
71
4.2. Formulacion de Flujos en 1D
Aj
Rj = (4.2.11)
Pj
2/3
Aj Rj
Kj = (4.2.12)
nj
La seccion transversal compuesta del area del flujo, es definido como la sumatoria de todos
las franjas (sub areas en los paneles).
M
X Rj Kj
R= PM (4.2.13)
j=1 j=1 Kj
Donde M es el n
umero de franjas mojadas.
72
4.2. Formulacion 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 superficies laterales verticales o pendientes
empinadas, pronunciados en los bancos.
Divisi
on de Radio Hidr
aulico
Propuesto por Einstein (1950), es un metodo mas adecuado para determinar las
propiedades hidraulicas compuestas para la seccion transversal con superficies verticales
rugosos o pendientes pronunciados en los bancos basados en la division del radio hidrauli-
co. Este metodo asume velocidades iguales en todas las franjas y calcula todas las variables
hidraulicas en un modo normal, excepto para el coeficiente de la rugosidad de Manning.
M
X
X = Pj j (4.2.14)
j=1
Donde:
P = Permetro mojado.
= RSf (4.2.15)
j = Rj Sf (4.2.16)
73
4.2. Formulacion de Flujos en 1D
!3/2 !3/2
nU nj U
R= 1/2
, Rj = 1/2
(4.2.17)
Sf Sf
M 3/2
!2/3
X Pj nj
n= (4.2.18)
j=1
P
M
etodo de la divisi
on pendiente Energa
j = RSf,j (4.2.19)
2 2
nU nj U
Sf = , Sf,j = (4.2.20)
R2/3 R2/3
Insertando las ecuaciones 4.2.15, 4.2.19 y 4.2.20 en la ecuacion 4.2.14 se tiene la siguiente
ecuacion para un Manning n compuesto.
"M #1/2
X Pj n2j
n= (4.2.21)
j=1
P
74
4.2. Formulacion de Flujos en 1D
M
etodo de la Transportabilidad - Conveyance
Para un canal compuesto con inundaciones, las velocidades en el canal principal y playas de
inundacion pueden ser significativamente diferentes. Una forma o un metodo mas adecuado
para determinar las propiedades hidraulicas compuestas en canales complejos es el metodo
de transporte (Conveyence Method).
Este metodo divide la seccion transversal en sub secciones de tal forma, que la asuncion
de las velocidades iguales puede ser aproximadamente valida en cada sub seccion. Y
estas sub secciones pueden aun ser ser dividido entre mas franjas. El area del flujo, el
permetro mojado y la conduccion de cada sub seccion puede ser calculada de manera
normal. Las conducciones de todas las sub secciones se suman para establecer el total de
la transportabilidad para la seccion transversal entera.
En la figura 4.2 se divide en tres secciones canal principal, llanura de inundacion izquierda
y llanura de inundacion derecha; y el total de la transportabilidad K es determinado por:
75
4.2. Formulacion de Flujos en 1D
Para cada sub seccion, el coeficiente de rugosidad de Manning puede ser determinado
usando el radio hidraulico o el metodo de la division pendiente energa (energy slope
division method).
j=RCB
!
X 3/2
nM C = Pj nj /PM C (4.2.23)
j=LCB
Donde: LCB y RCB representan franjas adyacentes del canal principal hacia la izquierda
y derecha bordes de las llanuras de inundacion (denominados como en LF y RF seg
un la
figura 4.2).
Z Z
1 1
= u2 dA = (QLF ULF + QM C UM C + QRF URF ) (4.2.24)
QU A QA
76
4.3. Calculos Uni-dimensionales para flujos en canales o cauces abiertos
2
K2 K2
A KLF
= 2 + M C + RF (4.2.25)
K ALF AM C ARF
4.3. C
alculos Uni-dimensionales para flujos en
4.3.1. C
alculos de Flujos Permanentes 1-D
Discretizaci
on de ecuaciones para Flujos Permanentes
Para flujos permanentes en canales abiertos sin considerar ingresos y/o salidas de flujos
laterales, la ecuacion 4.2.1 se reduce a:
Q
=0 (4.3.1)
x
Y da lugar a una descarga del flujo constante. Mientras la ecuacion 4.2.2 puede ser reescrito
como la ecuacion de la Energa.
0 Q2
Zs Q|Q|
+g +g 2 =0 (4.3.2)
x 2A2 x K
77
4.3. Calculos Uni-dimensionales para flujos en canales o cauces abiertos
1
0 = 2 2 2
2
QLF ULF + QM C UM C + QRF URF (4.3.3)
QU
A2 3 3 3
0 KLF KM C KRF
= 3 + + (4.3.4)
K A2LF A2M C A2RF
Para un canal simple, la longitud de alcance mide la ruta del flujo principal o canal
Thalweg 1 . Para un canal complejo, las rutas del flujo en el canal principal y llanuras de
inundacion pueden ser significativamente 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.
0
i0 Q2i Q2i+1
i+1 xi+1/2 Qi+1 |Qi+1 | Qi |Qi |
2
+ Zs,i = 2
+ Zs,i+1 + 2
+ (4.3.5)
2gAi 2gAi+1 2 Ki+1 Ki2
Donde xi + 1/2 representa la longitud de cada tramo entre las secciones transversales i y
i + 1.
1
En terminos cientficos se utiliza el nombre de Thalweg, voz procedente del aleman que significa
camino del valle, esta lnea que se encuentra en medio de la parte mas profunda del ro y donde la
corriente es m
as r
apida.
78
4.3. Calculos Uni-dimensionales para flujos en canales o cauces abiertos
Media Aritmetica.
1 Qi+1 |Qi+1 | Qi |Qi |
Sf,i+1/2 = 2
+ (4.3.6)
2 Ki+1 Ki2
Media Armonica.
2
Ki2
Ki+1
Sf,i+1/2 = 2/ + (4.3.7)
Qi+1 |Qi+1 | Qi |Qi |
Media Geometrica.
1/2
Qi+1 |Qi+1 | Qi |Qi |
Sf,i+1/2 = 2
(4.3.8)
Ki+1 Ki2
Transporte Medio.
2
Qi+1 + Qi
Sf,i+1/2 = (4.3.9)
Ki+1 + Ki
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 final se tiene:
79
4.3. Calculos Uni-dimensionales para flujos en canales o cauces abiertos
0
i0 Q2i Q2i+1
i+1 xi+1/2 Qi+1 |Qi+1 | Qi |Qi |
2
+ Zs,i = 2
+ Zs,i+1 + 2
+
2gAi 2gAi+1 2 Ki+1 Ki2
0 2 0 2
(4.3.10)
i+1 Qi+1 i Qi
+ i+1/2
2gA2
i+1 2gA2
i
Soluci
on de las Ecuaciones del Flujo Permanente Discretizados
La solucion para la ecuacion 4.3.10 difiere en casos de flujos sub crticos y super crticos.
Para el flujo Subcrtico: Una descarga del flujo es usualmente especificado en el ingreso y
una estacion del agua es especificado en la salida. Consecuentemente la descarga del flujo
es calculando aplicando la continuidad de masa y la estacion del agua (tirante) puede ser
determinado por calculos de remanso usando la ecuacion 4.3.10. Como se ve, esta ecuacion
es no lineal, por lo tanto, necesita ser resuelto iterativamente bajo un margen de error.
0 Q2 0 Q2
xi+1/2 Qi+1 |Qi+1 | Qi |Qi |
F = i+1 2 i+1 i i2 + Zs,i+1 Zs,i + 2
(4.3.11)
2gAi+1 2gAi 2 Ki+1 Ki2
Puesto que Zs,i+1 y la correspondiente Ai+1 y Ki+1 en la seccion transversal i+1 se obtuvo
del calculo previo en el tramo entre las secciones i + 1 y i + 2 o del tirante (o estacion del
agua) dado en la salida, ahora el problema es determinar Zs,i y la correspondiente area
Ai y Ki , garantizando F = 0. Aqu se usa el metodo de Biseccion.
Para el flujo Supercrtico: La descarga del flujo y la estacion del agua (tirante) son ingre-
sadas usualmente en el ingreso (upstream). El procedimiento para los calculos es el mismo
del flujo subcrtico, con la diferencia del sentido de calculo (upstream - downstream).
80
4.3. Calculos Uni-dimensionales para flujos en canales o cauces abiertos
M
etodo de Bisecci
on
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
posicion de la raz se determina situandola en el punto medio del sub intervalo, donde
exista cambio de signo. El proceso se repite hasta mejorar la aproximacion.
Los Zmiddle = (Zupper + Zlower )/2 y se calcula Fmiddle . Los valores de F correspondi-
ente a Zmiddle (Zintermedio ).
Note que la b
usqueda en el paso (1) para los lmites inferior y superior (lower, upper)
Zlower y Zupper del segmento inicial donde las soluciones existan puedan estar desde
cualquier elevacion o fondo del canal Zs,i+1 .
81
4.3. Calculos Uni-dimensionales para flujos en canales o cauces abiertos
DER
0 Q2 0 Q2
xi+1/2 Qi+1 |Qi+1 | Qi |Qi |
F = i+1 2 i+1 i i2 + Zs,i+1 Zs,i + 2
(4.3.12)
2gAi+1 2gAi 2 Ki+1 Ki2
1 Qi+1 |Qi+1 | Qi |Qi |
Media Aritmetica: 2 2
Ki+1
+ Ki2
2
Media Armonica : Ki+1 K2
2/ + Qi |Qi i |
Qi+1 |Qi+1 |
Sf,i+1/2 = 1/2 (4.3.13)
Qi+1 |Qi+1 | Qi |Qi |
Media Geometrica: 2
Ki+1 K2
2 i
Transporte Medio: Qi+1 +Qi
Ki+1 +Ki
0 0 2
i+1 Q2i+1
i Qi
hc,i+1/2 = i+1/2 (4.3.15)
2gA2i+1 2gA2i
!
3 3 3
A2i KLF,i KM C,i KRF,i
i0 = + 2 + 2 (4.3.17)
Ki3 A2LF,i AM C,i ARF,i
82
4.4. Diagramas de flujo
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.
Diagrama de flujo C
alculo de la Superficie Libre M
etodo del Paso Est
an-
dar: Recibe los datos de las secciones transversales, geometra, caudal de dise
no,
condicion de borde inicial dependiendo del tipo de flujo. 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 flujo Condiciones Aguas Abajo: Viene a ser la eleccion del flujo
Subcrtico, donde los calculos son a partir de la u
ltima seccion transversal hasta
la primera seccion. En el diagrama se toma como dato al tirante hidraulico, area
hidraulica, permetro mojado y demas caractersticas que se muestra. As mismo
contiene una funcion para calcular los niveles mediante el metodo biseccion que se
detalla posteriormente.
83
4.4. Diagramas de flujo
Diagrama de flujo C
alculo del Area y Permetro hidr
aulico: A partir del
tirante asignado o calculado (nivel de superficie libre), en cada seccion 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 triangulos 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 seccion transversal.
Diagrama de flujo C
alculo del Factor de Transporte K: El metodo para cal-
cular el factor de transporte es una fraccion entre el area y el permetro multiplicado
por el coeficiente de manning. En programacion es recomendable no tener valores
nulos o ceros en el denominador de una fraccion. El diagrama controla este posible
error.
Diagrama de flujo M
etodo de la Bisecci
on: El metodo de la Biseccion tambien
es conocido como el metodo de particion 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
funcion cruza el eje de la coordenada x, por lo tanto, sera el valor de la raz buscada.
84
4.4. Diagramas de flujo
Graficos, que corresponde a los niveles de superficie libre de agua, tanto en las secciones
transversales como en los perfiles longitudinales.
Tabulares, (tablas) resumen de las caractersticas hidraulicas del flujo, tales como, caudal
de dise
no, tirante, area, permetro, velocidad, n
umero de froude, ancho o espejo de agua,
etc.
85
4.4. Diagramas de flujo
INICIOCLCULODELASUPERFICIELIBRE
METODODELPASOESTANDARD
Datosdelassecciones
transversales(geometra)
Ordenarconsecutivamente
lasseccionestransversales
nST=Nmerodesecciones
transversales.
TipodeFlujo,Caudaldediseo
(m3/s),Nivelinicial(m)
TipodeFlujo
Nivelesdelasuperficielibre
deaguaylascaractersticas
hidrulicas.
FINCLCULODELASUPERFICIE
86
4.4. Diagramas de flujo
(A)INICIOCONDICIN
AGUASABAJO
i=nST1,hastai=0,
i=i1
Zsi Cotatirante
Area,Permetro GetAreaPerimeter * C .
K GetConveyanceK* D .
Beta GetCorrectionFactorBeta* E
Zlower Cotamnimadelaseccinactual.
Zupper Zsi Valorsuperior.
DatosGeomtricosdelaseccintransversal:
BL Vrticellanuraizquierda.
BR Vrticellanuraderecha.
nL CoeficientedeManningllanuraizquierda.
nC CoeficientedeManningcanalcentral.
nR CoeficientedeManningllanuraderecha.
LL Longitudporlallanuraizquierda.
LC Longitudporelcanalcentral.
LR Longitudporlallanuraderecha.
CC Coeficientedecontraccin.
CE Coeficientedeexpansin.
ClculomtododeBiseccin * F
Reasignarvalores:
Beta Clculos Beta
Area Clculos Area
Zsi Clculos Zsi
K Clculos K
Nivelesdelasuperficielibre
deaguaylascaractersticas
hidrulicas.
FINCONDICINAGUASABAJO
87
4.4. Diagramas de flujo
(B)INICIOCONDICIN
AGUASARRIBA
i=1,hastai=nST,
i=i+1
Zsi Cotatirante
Area,Permetro GetAreaPerimeter * C .
K GetConveyanceK* D .
Beta GetCorrectionFactorBeta* E
Zlower Cotamnimadelaseccinactual.
Zupper Zsi Valorsuperior.
DatosGeomtricosdelaseccintransversal:
BL Vrticellanuraizquierda.
BR Vrticellanuraderecha.
nL CoeficientedeManningllanuraizquierda.
nC CoeficientedeManningcanalcentral.
nR CoeficientedeManningllanuraderecha.
LL Longitudporlallanuraizquierda.
LC Longitudporelcanalcentral.
LR Longitudporlallanuraderecha.
CC Coeficientedecontraccin.
CE Coeficientedeexpansin.
ClculomtododeBiseccin * F
Reasignarvalores:
Beta Clculos Beta
Area Clculos Area
Zsi Clculos Zsi
K Clculos K
Nivelesdelasuperficielibre
deaguaylascaractersticas
hidrulicas.
FINCONDICINAGUASARRIBA
88
4.4. Diagramas de flujo
(C)INICIO
GETAREAPERIMETER
CotaTirante,Vrticesdela
seccintransversal,BL,BR.
Inundacinvrticederecho=falso.
Inundacinvrticeizquierdo=falso.
CotaTirante>
VF
PrimerVrtice[Y]
Incrementarunvrticeinicialcon
coordenadas:
X=PrimerVrtice[X].
Y=CotaTirante.
Inundacinvrticeizquierdo=verdadero.
V F
CotaTirante>
PrimerVrtice[Y]
IncrementarunvrticeFinalcon
coordenadas:
X=ltimoVrtice[X].
Y=CotaTirante.
Inundacinvrticederecho=verdadero.
89
4.4. Diagramas de flujo
... 1
j=1,hastaNde
Vrtices,j=j+1
CotaTirante<=
V
Vertices[j].y F
Y=CotaTirante
Condicin=Verdadero
F
Condicin=Verdadero
V
J=J+1
V Vertices[j+1].y F
V Vertices[j+1].y F
< Cota Tirante
Condicin=Verdadero Condicin=Falso
Area(m2),Permetro(m)
FINGETAREAPERIMETER
90
4.4. Diagramas de flujo
(D)INICIO
GETCONVEYANCEK
ALF =reallanuraizquierda.
AMC =reaCanalCentral.
ALR =reallanuraderecha.
PLF =Permetrollanuraizquierda.
PMC =PermetroCanalCentral.
PLR =Permetrollanuraderecha.
nLF =CoeficientedeManningllanuraizquierda.
nMC =CoeficientedeManningCanalCentral.
nLR =CoeficientedeManningllanuraderecha.
KLF=KMC=KRF=0.0
V PLF!=0.0 F
/
/
V PMC!=0.0 F
/
/
V PRF!=0.0 F
/
/
K=KLF+KMC+KRF
FINGETCONVEYANCEK
91
4.4. Diagramas de flujo
(E)INICIO
GETCORRECTIONFACTORBETA
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
V ALF!=0.0 F
BetaLF
V F
AMC!=0.0
BetaMC
V ARF!=0.0 F
BetaRF
FINGETCORRECTIONFACTORBETA
92
4.4. Diagramas de flujo
(F)INICIOMTODODE
BISECCIN
Zlower =Extremovalorinferior.
Zupper =Extremovalorsuperior.
Variableshidrulicas.
NoEncontrado=verdadero
F
NoEncontrado = Verdadero
Area,Permetro GetAreaPerimeter* C .
K GetConveyanceK* D .
Beta GetCorrectionFactorBeta* E
Fmiddle FuncionF* G
V Abs(Fmiddle)<TOL F
Nivel=Zmiddle
NoEncontrado=falso
Flower FuncionF
Fupper FuncionF
V Abs(Fmiddle)<TOL
F
Zupper=Zmiddle Zlower=Zmiddle
V Abs(ZupperZlower) F
<TOL
NoEncontrado=falso
Nivelesdesuperficielibre
VariablesHidrulicas
FINMTODODEBISECCIN
93
4.4. Diagramas de flujo
(G)INICIOFUNCINF
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.
/ | | | |
, ,
2 2 2
FINFUNCINF
94
Captulo 5
EN RIOS Y
SOCAVACION
DIAGRAMAS DE FLUJO
5.1. Introducci
on
5.2. Clasificaci
on de los Ros
95
5.2. Clasificacion de los Ros
Se trata de cauces con tres elementos bien definidos, canal principal (main channel),
llanura de inundacion izquierda (Left Floodplain), llanura de inundacion derecha (Right
Floodplain).
En periodos de estiaje, las llanuras de inundacion 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.
Este cauce es cuando existe una superficie casi plana donde el ro escurre por varias partes
al mismo tiempo.
96
5.3. Socavacion General en cauces definidos
5.3. Socavaci
on General en cauces definidos
El criterio de erosion es producto del incremento del caudal del flujo (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 Ur , y
la velocidad media que se requiere para que un material de caractersticas dadas sea
arrastrado Ue .
La velocidad Ur , esta dada en funcion de las caractersticas hidraulicas del cauce (pen-
diente, tirante, flujo, rugosidad, etc.). Con respecto a la velocidad Ue esta en funcion de
las caractersticas del material del fondo y del tirante del flujo. Para valuarla, las caracte-
rsticas representativas que se toman en cuenta tratandose de material no cohesivo, es el
diametro medio dm . No se considera el peso especfico, 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 especfico del material seco.
5.3.1. Socavaci
on General para Suelos Cohesivos
97
5.3. Socavacion General en cauces definidos
Donde:
: Coeficiente 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.
98
5.3. Socavacion General en cauces definidos
Donde:
99
5.3. Socavacion General en cauces definidos
Desde la franja considera en la figura 5.3 con espesor B, el caudal del flujo que pasa por
esta seccion esta dada seg
un la ecuacion de Manning.
1 1/2 5/3
Q = U A = S H0 B (5.3.2)
n f
Hj +Hj+1
Donde para H0 = 2
Algunos textos para simplificar operaciones, asumen en las secciones transversales como
rectangulares o trapezoidales, de tal forma que el area del flujo es el ancho de la superficie
por una altura media. Estos criterios son manejados debido a las geometras complejas
que se presentan en los cauces naturales.
100
5.3. Socavacion General en cauces definidos
A continuacion se muestra las ecuaciones sin alterar estas caractersticas, por lo tanto:
Donde:
1/2
Sf QP 2/3
= (5.3.4)
n A5/3
1/2
Sf 5/3 QP 2/3 5/3
Q = H0 B = H B
n A5/3 0
5/3
QP 2/3 H0 B
Q = (5.3.5)
A5/3
Q = Ur Hs B (5.3.6)
101
5.3. Socavacion General en cauces definidos
5/3
QP 2/3 H0 B
= Ur Hs B (5.3.7)
A5/3
Donde se tiene:
5/3
QP 2/3 H0
Ur = (5.3.8)
A5/3 Hs
Lo que indica que la erosion se detendra cuando a una profundidad cualquiera alcanzada,
el valor de Ur , velocidad de la corriente capaz de producir arrastre, y Ue , velocidad que
se necesita para que el fondo se degrade sean iguales (Condicion de equilibrio).
Ue = Ur (5.3.9)
Por lo tanto
5/3
QP 2/3 H0
0,60s1,18 HsX =
A5/3 Hs
5/3
QP 2/3 H0
Hs1+X =
0,60A5/3 s1,18
1
! 1+X
5/3
2/3
QP H0
Hs = (5.3.10)
0,60A5/3 s1,18
5.3.2. Socavaci
on General para Suelos No Cohesivos
El fenomeno fsico es el mismo para estos tipos de suelos (granos sueltos, arena, gravas,
etc), manteniendo la misma formula para la velocidad real, lo que s cambia es la velocidad
media que se requiere para degradar el fondo Ue
Ue = 0,68d0,28
m Hs
X
(5.3.11)
102
5.3. Socavacion General en cauces definidos
Donde:
X
dm = 0,01 (di Pi ) (5.3.12)
Donde:
di , diametro de una fraccion en una curva granulometrica de la muestra total que se analiza
(mm). Pi , porcentaje del peso de esta misma porcion, comparada con el peso total de la
muestra. Las fracciones escogidas no deben ser necesariamente iguales entre s.
5/3
0,28 X QP 2/3 H0
0,68dm Hs =
A5/3 Hs
5/3
QP 2/3 H0
Hs1+X =
0,68A5/3 d0,28
m
1
! 1+X
5/3
QP 2/3 H0
Hs = (5.3.13)
0,68A5/3 d0,28
m
103
5.4. Diagramas de flujo
Diagrama de flujo C
alculo de la Socavaci
on General: El diagrama, corres-
ponde al calculo de la socavacion general mediante el metodo de Lischtvan-Lebeviev
para cada seccion transversal considerado. Para calcular la socavacion general, es
necesario como dato principal las caractersticas fsicas del las secciones transversales
y las caractersticas hidraulicas tales como el area hidraulica, permetro mojado y el
caudal de dise
no. Finalmente obtiene las coordenadas de la nueva seccion transversal
socavada y las alturas en cada vertice.
104
5.4. Diagramas de flujo
INICIOCLCULODELA
SOCAVACINGENERAL
i=1,hastai=nST,
i=i+1
Nivelesdelasuperficielibredeaguaylas
caractersticashidrulicas.
Tipodematerial.
%deprobabilidaddegasto.
ClculodelcoeficienteX:CoeficienteX*(H)
ClculosocavacinporLischtvanLebeviev:
LischtvanLebeviev*(I)
Alturadesocavacindelas
seccionestransversales
FINCLCULODELA
SOCAVACINGENERAL
105
5.4. Diagramas de flujo
(H)INICIOCLCULODEL
COEFICIENTE X
TipodeMaterial
Cohesivo NoCohesivo
C=MaterialCohesivos(Ton/m3) NC=MaterialNoCohesivos(mm)
1 2
ValordelcoeficienteX
FINCLCULODEL
COEFICIENTE X
106
5.4. Diagramas de flujo
... 1
V 0<C<0.80 F
V 0.8C2.00
F
X=Interpolacin(C)
V F
C >2.00
107
5.4. Diagramas de flujo
... 2
V 0<NC<0.05 F
0.43
V 0.05 NC 1000
F
X=Interpolacin(NC)
V F
NC >1000
108
5.4. Diagramas de flujo
(I)INICIOCLCULOSOCAVACIN
LISCHTVANLEBEVIEV
TipodeMaterial
Cohesivo NoCohesivo
MaterialCohesivos MaterialNoCohesivos
/ / / /
0.60 / .
0.68 / .
Niveles de socavacin en
cada vrtice de la seccin
transversal
FINCLCULOSOCAVACIN
LISCHTVANLEBEVIEV
109
Captulo 6
PRACTICA
APLICACION DEL
PROGRAMA DESARROLLADO
6.1. Introducci
on
110
6.2. Descripcion General de Programa PLEDER
El estudio de Hidraulica Fluvial, permite determinar el ancho estable del cauce, transporte
de sedimentos, socavaciones generales.
Cada uno de estos componentes, seran llevados a cabo mediante el programa PLEDER,
obteniendo los resultados finales graficas y tabulares, que son necesarios para su inter-
pretacion.
6.2. Descripci
on General de Programa PLEDER
111
6.2. Descripcion General de Programa PLEDER
112
6.2. Descripcion General de Programa PLEDER
113
6.2. Descripcion General de Programa PLEDER
PLHSOC: Componente Hidraulica Fluvial, este comando permite ingresar los datos
de las secciones transversales para calcular las socavaciones generales.
114
6.3. Calculos y Resultados Hidrologicos
6.3. C
alculos y Resultados Hidrol
ogicos
115
6.3. Calculos y Resultados Hidrologicos
Mediante el comando PLLLES o el cono de la figura 6.3, muestra el interfaz grafico para
calcular la transformacion de lluvia - escorrenta. Contiene 3 parametros importantes de
ingreso:
6.3.1. Par
ametro Cuenca [U]
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. Calculos y Resultados Hidrologicos
117
6.3. Calculos y Resultados Hidrologicos
La sumatoria de las areas tiene que ser igual al area de la cuenca. En la figura 6.17,
PLEDER presenta hasta 6 subdivisiones para calcular La Curva n
umero Compuesto.
En la presente aplicacion 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 calculo de tiempo de retardo, bajo dato o resultado
del tiempo de concentracion. El tiempo de concentracion se puede calcular mediante la
formula de Kirpich o tambien este valor lo puede asignar directamente el usuario. Por lo
tanto, cabe resaltar que el tiempo de concentracion viene a ser resultado, si es calculado
mediante la formula de Kirpich y por otro lado es dato si es asignado por el usuario.
6.3.2. Par
ametro Precipitaci
on [P]
118
6.3. Calculos y Resultados Hidrologicos
6.3.3. Par
ametro 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 calculos cada 10 minutos seg
un la
figura 6.15.
El programa controla los posible errores de entrada de los datos ([U], [P] y [T]), especifi-
cando dentro de la consola del AutoCAD el tipo de error o el ingreso de dato incorrecto.
Mediante el boton aceptar y asignado el punto de referencia para los resultados, pro-
cedemos a calcular el hidrograma de salida y el caudal maximo de dise
no para los datos
ingresados. Las figuras 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. Calculos y Resultados Hidrologicos
120
6.3. Calculos y Resultados Hidrologicos
121
6.4. Calculos y Resultados Hidraulicos
6.4. C
alculos y Resultados Hidr
aulicos
La batimetra del proyecto viene a ser el dato mas 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 calculos correspondientes. El proyecto cuenta
con una batimetra minuciosa con densos puntos topograficos y sobre todo dirigidos con
propiedad y conocimientos hidraulicos durante el levantamiento.
En la figura 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 estacion 2 + 480 al centro poblado Yanacocha.
122
6.4. Calculos y Resultados Hidraulicos
Mediante la opcion 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, coeficientes de Manning y los coefi-
cientes de contraccion y expansion; todo ello para cada una de las secciones transversales
del cauce.
El programa PLEDER, presenta opciones graficas muy eficientes para crear las secciones
transversales a partir de polilneas, asignando los puntos de referencia tales como estacion,
elevacion y permitiendo calcular las coordenadas locales de cada uno de los vertices, tal
como se muestra en la figura 6.25.
Quiza esta opcion 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. Calculos y Resultados Hidraulicos
facilitar los datos que en este caso viene a ser los vertices locales de cada una de las
secciones transversales.
Cada vertice es enumerado de izquierda a derecha, con el fin de almacenar en una ma-
triz ordenada, ademas elegir los lmites de inundacion izquierda derecha mediante la nu-
meracion de los vertices.
La ventana del grafico 6.27, muestra las opciones de los parametros de borde y la asig-
nacion del caudal de dise
no para transitar el flujo a traves de las secciones transversales
124
6.4. Calculos y Resultados Hidraulicos
descritas anteriormente. Para la aplicacion se analiza como flujo subcrtico, por la tanto
la opcion del tirante aguas abajo es habilitado.
Los procedimiento para calcular los niveles de la superficie libre de agua se describe
mediante diagramas de flujo en el captulo 4, tanto para los flujo subcrticos y supercrticos.
125
6.4. Calculos y Resultados Hidraulicos
126
6.5. Calculos y Resultados de Socavaciones Generales
6.5. C
alculos 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 coeficiente seg
un la probabilidad de
gasto. Para la aplicacion se realizo las curva granulometricas de los materiales incluyendo
cantos rodados y guijarros, de los cuales se obtuvo como resultados los diametro medios
aproximadamente 150 mm y 180 mm.
Una vez completado estos datos, se puede calcular las socavaciones mediante el cono de la
figura 6.13 o equivalente al comando PLHSCC, cuyos resultados son graficos (lnea de la
127
6.5. Calculos 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 hidraulicas o estructuras de proteccion ante avenidas maximas, y siendo
mas especficos en la instalacion de gaviones y enrocados (riprap) representa la profundi-
dad del colchon reno y la profundidad de las u
nas respectivamente.
128
Captulo 7
CONCLUSIONES Y
RECOMENDACIONES
7.1. Conclusiones
129
7.1. Conclusiones
dT Variaci
on del tiempo en el hidrograma.
7. Si C = 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 variacion de tiempo en el hietograma sera siempre igual a la
variacion del tiempo en el hidrograma (C = 1).
10. Los perfiles de superficie libre de agua, determinan el dimensionamiento de las es-
tructuras hidraulicas de proteccion.
11. Las ecuaciones discretizadas para los calculos de los perfiles de la superficie libre de
agua, son ecuaciones no lineales, por lo tanto, se emplean tecnicas numericas tales
130
7.2. Recomendaciones
12. La socavacion general en cauces naturales dependera mucho del tipo de material
que lo conforma en cada estacion del cauce, por lo general, se uniformiza en una
estacion.
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
131
Bibliografa
[1] A. OSMAN AKAN. Open Channel Hydraulics. Elsevier Ltd, Oxford UK, 2006.
[6] GARY W. BRUNNER. Hec-Ras River Analysis System Users Manual. US Army
Corps of Engineers EEUU, 2001.
[9] HUBERT CHANSON. Hidraulica del Flujo en Canales Abiertos. McGraw-Hill In-
teramericana, S.A., 2002.
132
BIBLIOGRAFIA
[11] CHOW, VENT T., MAIDMENT, D.R., and MAYS L. Hidrologa Aplicada. Mac
Graw Hill Interamericana S.A. Santafe de Bogota, 1994.
[12] VENT TE CHOW. Hidraulica de canales abiertos. Mac Graw Hill Interamericana
S.A. Colombia, 2000.
[13] JAIME SUAREZ DIAS. Control de erosion en zonas tropicales. Instituto de Inves-
tigaciones sobre Erosion y Deslizamientos-Ingeniera de suelos, Noviembre, 2001.
[14] ROSENDO CHAVEZ DIAS. Hidrologa para Ingenieros. Fondo Editorial de la Pon-
tificia Universidad. Lima Per
u, 1994.
[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 hidraulicas. Universidad Na-
cional de San Cristobal de Huamanga, Noviembre, 2006.
133
BIBLIOGRAFIA
[22] PIERRE Y. JULIEN. Erosion and Sedimentation. Cambrigde University Press. USA,
1995.
[23] PIERRE Y. JULIEN. River Mechanics. Cambrigde University Press. USA, 2002.
[27] ERWIN KREYSZIG. Advanced Engineering Mathematics. John Wiley & Sons, Inc.
USA, 2006.
[28] CUI-LEUNG LU, ZHANG. A numerical analysis of free surface flow in curved
open channel with velocity-pressure-free-surface correction. Computation Mechan-
ics Springer Verlag, 2003.
[29] M. MORENA G. GRANDE G. FERRANDEZ M. VIDE, L. QUEROL. Uso de
modelos uni-y bidimensionales en llanuras de inundacion, aplicacion del ro tajo en
talavera de la reina. Ingeniera del Agua Vol 10, Marzo 2003.
HESS. 3-d m
[31] ADRIAN ILINCA MARECELO REGGIO, ANDRE ultiple-level simu-
lation of free surface flows. Journal of Hydraulic Research, Vol 40, December, 2002.
[33] RICHARD H. McCUEN. Hydrologic Analysis and Design. Person Education, 1998.
134
BIBLIOGRAFIA
[35] JULIAN AGUIRRE PE. Hidraulica de Canales. CIDIAT. Merida, Venezuela, 1974.
RAMON
[36] JOSE TEMEZ
PELAEZ. Facetas del calculo hidrometeorologico 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 PEREZ. Apuntes de clase programacion digital. Universidad
Nacional de San Cristobal de Huamanga, 2002.
[39] CRISTIAN CASTRO PEREZ. 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.
[42] DAVID G. RHODES. Gradually varied flow 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.
135
BIBLIOGRAFIA
[46] DARLY B. SIMONS and FUAT SENTURK. Sediment Transport Technology. Water
Resources Publications. USA, 1976.
[47] BJARNE STROUSTRUP. The C++ Programming Language. Addisn Wesley USA,
1997.
[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.
[52] YORICK HARDY WILLI HANS STEEB. Problems and Solutions in Scientific Com-
puting with C++ and Java simulations. World Scientific 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
Ap
endice A
HIDROLOGIA CODIGO
FUENTE
C++
137
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
ARCHIVOS DE CABECERA:
PLEDERCurvaNumeroDlg.h
#pragma once
#include "resource.h"
public:
CPLEDERCurvaNumeroDlg(CWnd *pParent =NULL, HINSTANCE hInstance
=NULL); // Constructor estndar
virtual ~CPLEDERCurvaNumeroDlg();
// 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;
138
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
CString m_cnc;
protected:
virtual void DoDataExchange(CDataExchange* pDX);
afx_msg LRESULT OnAcadKeepFocus (WPARAM, LPARAM) ;
public:
virtual BOOL OnInitDialog();
afx_msg void OnBnClickedOk();
DECLARE_MESSAGE_MAP()
};
PLEDERHidrogramaUnitariosDlg.h
#pragma once
#include "adui.h"
#include "resource.h"
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();
139
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
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);
140
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
float PulsosP(int NP, int DT, int dt, float* Pexceso, float*
Pulsos, int *nP);
};
PLEDERHidrologiaDatos.h
#pragma once
public:
CPLEDERHidrologiaDatos(void);
public:
~CPLEDERHidrologiaDatos(void);
public:
public:
public:
// Variables HU
141
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
};
/*------------------------------------------------------------------*/
PLEDERHietogramaIilaSenamhiDlg.h
#pragma once
#include "resource.h"
public:
CPLEDERIilaSenamhiDlg(CWnd *pParent =NULL, HINSTANCE hInstance
=NULL); // Constructor estndar
virtual ~CPLEDERIilaSenamhiDlg();
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;
142
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
// 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();
public:
virtual BOOL OnInitDialog();
afx_msg void OnBnClickedOk();
DECLARE_MESSAGE_MAP()
};
PLEDERHietogramaNrcsDlg.h
#pragma once
#include "resource.h"
public:
CPLEDERNrcsDlg(CWnd *pParent =NULL, HINSTANCE hInstance =NULL);
// Constructor estndar
virtual ~CPLEDERNrcsDlg();
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;
143
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
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) ;
public:
virtual BOOL OnInitDialog();
afx_msg void OnBnClickedOk();
DECLARE_MESSAGE_MAP()
};
PLEDERHUNRCSDlg.h
#pragma once
#include "resource.h"
public:
CPLEDERHUNRCSDlg(CWnd *pParent =NULL, HINSTANCE hInstance
=NULL); // Constructor estndar
virtual ~CPLEDERHUNRCSDlg();
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;
144
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
// 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) ;
// 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();
DECLARE_MESSAGE_MAP()
};
PLEDERHUSnyderDlg.h
#pragma once
#include "resource.h"
public:
CPLEDERHUSNYDERDlg(CWnd *pParent =NULL, HINSTANCE hInstance
=NULL); // Constructor estndar
virtual ~CPLEDERHUSNYDERDlg();
int m_TipoCalc;
// Cajas de texto
CAcUiNumericEdit m_Edit_Area;
CString m_area;
CAcUiNumericEdit m_Edit_L;
CString m_L;
145
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
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) ;
// 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();
DECLARE_MESSAGE_MAP()
};
PLEDERLluviaEscorrentiaDlg.h
#pragma once
#include "resource.h"
146
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
public:
CPLEDERLluviaEscorrentiaDlg(CWnd *pParent =NULL, HINSTANCE
hInstance =NULL); // Constructor estndar
virtual ~CPLEDERLluviaEscorrentiaDlg();
// 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;
147
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
protected:
public:
virtual BOOL OnInitDialog();
afx_msg void OnBnClickedOk();
DECLARE_MESSAGE_MAP()
};
148
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
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)
149
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
ON_BN_CLICKED(IDOK, &CPLEDERCurvaNumeroDlg::OnBnClickedOk)
END_MESSAGE_MAP()
// 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();
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()
150
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
{
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())
151
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
{
::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();
}
152
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
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);
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));
153
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
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)
154
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
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()
{
/*------------------------------------------------------------------*/
/*------------------------------------------------------------------*/
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
if (!rb)
{
//MDITopoLGCAD.RestSystemVars();
acdbFail(_T("\nError de asignacin de memoria [IMPORTAR
HU][rb]."));
return;
}
155
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
acutRelRb(rb);
//MDITopoLGCAD.RestSystemVars();
return;
}
if (!pNombreArchivo)
{
acutRelRb(rb);
//MDITopoLGCAD.RestSystemVars();
acdbFail(_T("\nError de asignacin de memoria [IMPORTAR
HU][pNombreArchivo]."));
return;
}
acutRelRb(rb);
if (HU.ImportarHidrogramaUnitario(pNombreArchivo, &NumeroVertHU)
!= RTNORM)
{
if (pNombreArchivo)
{
acad_free(pNombreArchivo);
}
//MDITopoLGCAD.RestSystemVars();
return;
}
if (pNombreArchivo)
{
acad_free(pNombreArchivo);
}
/*------------------------------------------------------------------*/
void CPLEDERHidrogramaUnitariosDlg::OnButtonImportarPulsos()
{
acutPrintf(_T("\nPLEDER: Importa datos de Pulsos."));
/*------------------------------------------------------------------*/
void CPLEDERHidrogramaUnitariosDlg::OnBnClickedOk()
{
156
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
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() {}
PLEDERHidrologiaCalculos.cpp
#include "StdAfx.h"
#include "PLEDERHidrologiaCalculos.h"
#include "PLEDERHidrologiaDatos.h"
// objetos
CPLEDERHidrologiaDatos HidrologiaDatos;
CPLEDERHidrologiaCalculos::CPLEDERHidrologiaCalculos(void)
157
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
{
}
CPLEDERHidrologiaCalculos::~CPLEDERHidrologiaCalculos(void)
{
}
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
158
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
{
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;
}
NPacum[0]= 0.0;
//Condicion Inicial
float dt = 24/N;
159
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
NPincr[i+1]=NPacum[i+1]-NPacum[i];
//Precipitacin Incremental
} //For i
return RTNORM;
}
{
int i;
float Iai, S;
else
{
Ia[i]=Iai;
}
160
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
} //for i
return RTNORM;
}
j=1;
k = 2;
161
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
}// 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;
Q[n] = Qsum;
} //for n
return RTNORM;
}
PLEDERHidrologiaDatos.cpp
#include "StdAfx.h"
#include "PLEDERHidrologiaDatos.h"
162
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
#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;
}
HidrogramaUnitarioBufer *pHU;
pPrimerHU = pPrimerHU->Siguiente;
163
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
{
nP++;
}
}
int nQ = nP+nU-1;
P = new float[nP+1];
U = new float[nU+1];
Q = new float[nQ+1];
return RTNORM;
}
164
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
if (!pNombreArchivo)
{
acdbFail(_T("\nArgumento de funcin no vlido
[ImportarHidrogramaUnitario]."));
return RTERROR;
}
if (infile.fail() != 0)
{
*NumeroVertHU = 0;
acdbFail(_T("\nError de E/S al abrir el fichero
[IImportarHidrogramaUnitario][open]."));
return RTERROR;
}
if (!buffer)
{
*NumeroVertHU = 0;
infile.close();
acdbFail(_T("\nError de asignacin de memoria [Importar
HU][buffer]."));
return RTERROR;
}
while (!infile.eof())
{
infile.getline(buffer, GETLINEMAXBUFF, '\n');
if (infile.eof())
{
// limpiar el flag eof
infile.clear();
break;
}
np++;
}
np = 0;
165
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
catch(const std::bad_alloc&)
{
acedRestoreStatusBar();
acdbFail(_T("\nError de asignacin de memoria [Importar
HU][pPrimerHU]."));
return RTERROR;
}
// recorrer el fichero
while (!infile.eof())
{
// leer una lnea del fichero
infile.getline(buffer, GETLINEMAXBUFF, '\n');
if (infile.eof())
break;
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)
{
166
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
*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;
catch(const std::bad_alloc&)
{
LiberarBufferHidrogramaUnitario();
acedRestoreStatusBar();
acdbFail(_T("\nError de asignacin de memoria
[Importar HU][nHU]."));
return RTERROR;
}
nbprevious->Siguiente = nHU;
nbprevious = nHU;
} // while
infile.close();
acad_free(buffer);
acedRestoreStatusBar();
return RTNORM;
}
167
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
{
// 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
168
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
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};
169
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
.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};
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;
}
170
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
acutPrintf(_T("\nFuera de Rango"));
} //switch (Tormenta)
return RTNORM;
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};
return RTNORM;
}
// Tramo AB
if ( T>=0 && T <= P-(1.0/3.0)*W50)
{
171
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
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;
// liberar la ristra
while (Siguiente = nHU->Siguiente)
172
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
{
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)
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)
173
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
//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) ;
//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);
174
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
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"));
175
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
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);
176
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
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);
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)
{
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)
177
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
// Botones
ON_BN_CLICKED(IDC_BUTTON_Npunto, OnButtonNPUNTO)
ON_BN_CLICKED(IDOK, &CPLEDERNrcsDlg::OnBnClickedOk)
END_MESSAGE_MAP()
//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
178
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
//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);
CDialog::OnOK();
PLEDERHUNRCSDlg.cpp
#include "stdafx.h"
#include "PLEDERHUNRCSDlg.h"
179
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
IMPLEMENT_DYNAMIC(CPLEDERHUNRCSDlg, CDialog)
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)
ON_BN_CLICKED(IDOK, &CPLEDERHUNRCSDlg::OnBnClickedOk)
END_MESSAGE_MAP()
// 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();
180
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
m_Edit_tc.SetWindowText(m_tc);
m_Edit_tlag1.SetWindowText(m_tlag1);
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);
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);
Tlag = 0.6*Tc;
181
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
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);
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);
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);
182
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
CButton *pBLong;
pBLong = (CButton *)GetDlgItem(IDC_BUTTON_Long);
pBLong->EnableWindow(0);
CButton *pBPend;
pBPend = (CButton *)GetDlgItem(IDC_BUTTON_Pend);
pBPend->EnableWindow(0);
void CPLEDERHUNRCSDlg::OnButtonLong()
{
//Esconde el dilogo
BeginEditorCommand();
int rc;
double area;
ads_point punto; ads_name nombrep;
AcDbObjectId ID;
AcDbEntity *pEnt;
//Retorna al dilogo
CompleteEditorCommand();
183
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
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;
v0[X] = start.x;
v0[Y] = start.y;
v1[X] = end.x;
v1[Y] = end.y;
Lc = Lc + acutDistance(v0 , v1);
}
pPolyline->close();
void CPLEDERHUNRCSDlg::OnButtonPend()
{
//Esconde el dilogo
BeginEditorCommand();
184
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
while (true)
{
// Cogen los puntos siguienes
if (acedGetPoint(p1, _T("\nSiguiente punto: "), p2) !=
RTNORM)
{
// se cancel o puls enter
s = abs((p1[Y]-p2[Y]))/abs((p2[X]-p1[X]));
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
185
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
L = _wtof(m_long);
S = _wtof(m_pend);
void CPLEDERHUNRCSDlg::onCalcularTlag()
{
m_Edit_long.GetWindowText(m_long);
m_Edit_pend.GetWindowText(m_pend);
L = _wtof(m_long);
S = _wtof(m_pend);
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
#include "stdafx.h"
#include "PLEDERHUSnyderDlg.h"
IMPLEMENT_DYNAMIC(CPLEDERHUSNYDERDlg, CDialog)
186
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
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)
ON_BN_CLICKED(IDOK, &CPLEDERHUSNYDERDlg::OnBnClickedOk)
END_MESSAGE_MAP()
// 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();
187
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
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);
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);
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);
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);
188
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
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);
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));
189
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
m_Edit_Cp.SetWindowText(str);
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);
190
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
m_Edit_Cp.SetWindowText(m_Cp);
void CPLEDERHUSNYDERDlg::onMensajesCp()
{
float Cp = _wtof(m_Cp);
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);
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);
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);
191
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
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)
192
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
// 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)
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()
// 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);
//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 (Dilogo)
DDX_Control(pDX, IDC_BUTTON_hus, m_Button_HUS);
BOOL CPLEDERLluviaEscorrentiaDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_Edit_QB.SetWindowText(m_qb);
m_Edit_CN.SetWindowText(m_cn);
m_Edit_CN.SetRange(1, 100);
193
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
m_Edit_PPX.SetWindowText(m_ppx);
m_Edit_PPY.SetWindowText(m_ppy);
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;
194
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
double area;
ads_point punto; ads_name nombrep;
//Retorna al dilogo
CompleteEditorCommand();
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;
195
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
// 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;
}
196
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
computadoHU = true;
break;
}
default:
acutPrintf(_T("\nFuera de Rango"));
} //switch (m_hus)
}
void CPLEDERLluviaEscorrentiaDlg::OnCALCPrecipitaciones()
{
pNP = 0;
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.
P24 = _wtof(dlgNRCS.m_P24);
Ndt = _wtof(dlgNRCS.m_Ndt);
Tormenta =dlgNRCS.m_Tormenta;
PX =_wtof(dlgNRCS.m_NPX);
197
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
PY =_wtof(dlgNRCS.m_NPY);
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;
}
198
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
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);
PaltAcum[1] = 0.0;
Palternaincremental[1] = 0.0;
// Traspasa los resultados a la variable global
}// For i
computadoMM = true;
199
Apendice A. HIDROLOGIA CODIGO
FUENTE C++
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);
CDialog::OnOK();
}
200
Ap
endice B
HIDRAULICA
CODIGO FUENTE
C++
201
Apendice B. HIDRAULICA
CODIGO FUENTE C++
ARCHIVOS DE CABECERA:
PLEDERFlujoPermanente.h
#pragma once
//class polilineabuffer;
class CrossSectionsBufer;
class FGVResultadosBufer;
class CPLEDERFlujoPermanente
{
public:
CPLEDERFlujoPermanente(void);
~CPLEDERFlujoPermanente(void);
public:
202
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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"
public:
CPLEDERFlujoPermanenteDlg(CWnd* pParent = NULL); //
Constructor estndar
virtual ~CPLEDERFlujoPermanenteDlg();
// 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) ;
// Cajas de texto
203
Apendice B. HIDRAULICA
CODIGO FUENTE C++
public:
virtual BOOL OnInitDialog();
afx_msg void OnBnClickedOk();
DECLARE_MESSAGE_MAP()
};
PLEDERHidraB#pragma once
};
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.
204
Apendice B. HIDRAULICA
CODIGO FUENTE C++
};
AcGePoint3d Vertice[MAX_VERTICES];
};
public:
CrossSectionsBufer *nbnext; // siguiente
205
Apendice B. HIDRAULICA
CODIGO FUENTE C++
};
public:
CrossSectionsSocavacionBufer *nbnext; // siguiente
206
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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.
};
public:
public:
207
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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
//class polilineabuffer;
class SeccionesBufer;
//Clase HidraSecTrasnv
class HidraSecTrasnv
{
public:
HidraSecTrasnv(void);
public:
~HidraSecTrasnv(void);
public:
208
Apendice B. HIDRAULICA
CODIGO FUENTE C++
public:
};
PLEDERRecursosSuperficieLibre.h
#pragma once
#include "PLEDERSuperficieLibre.h"
class CRecursosSuperficieLibre
{
public:
CRecursosSuperficieLibre(void);
public:
~CRecursosSuperficieLibre(void);
public:
public:
// Calcula el Area y el Permetro.
int AreaPerimetro(int inicio, int fin, float CotaTirante, float
*CX, float *CY, double *Area, double *Perimetro);
209
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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 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;
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.
210
Apendice B. HIDRAULICA
CODIGO FUENTE C++
long m_Result_len;
DECLARE_MESSAGE_MAP()
//--------------------------------------------------------------------
// Funciones extras para los resultados
public:
// Libera los datos de los niveles calculados
void FreeAllResultBufs();
PLEDERSeccionesTransversales.h
#pragma once
class CrossSectionsBufer;
class CrossSectionsSocavacionBufer;
class CPLEDERSeccionesTransversales
{
public:
CPLEDERSeccionesTransversales(void);
~CPLEDERSeccionesTransversales(void);
public:
211
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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"
public:
static BOOL CALLBACK ItemdataProc(DWORD dwData, LPARAM lParam);
CPLEDERSeccionesTransversalesDlg(CWnd* pParent = NULL); //
Constructor estndar
virtual ~CPLEDERSeccionesTransversalesDlg();
// DAtos Tabla
CReportCtrl m_wndList;
BOOL m_bFullRow;
BOOL m_bGridLines;
212
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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;
CAcUiPickButton m_PickButton_LI;
CAcUiPickButton m_PickButton_LC;
CAcUiPickButton m_PickButton_LD;
CAcUiPickButton m_PickButton_BI;
CAcUiPickButton m_PickButton_BD;
protected:
213
Apendice B. HIDRAULICA
CODIGO FUENTE C++
// 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()
};
/*------------------------------------------------------------------*/
public:
CPLEDERST1Dlg(CWnd* pParent = NULL); // Constructor estndar
virtual ~CPLEDERST1Dlg();
// Cajas de texto
CAcUiNumericEdit m_Edit_NST;
214
Apendice B. HIDRAULICA
CODIGO FUENTE C++
CString m_NST;
protected:
virtual void DoDataExchange(CDataExchange* pDX); //
Compatibilidad con DDX/DDV
public:
afx_msg void OnBnClickedOk();
DECLARE_MESSAGE_MAP()
};
215
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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)
{
}
216
Apendice B. HIDRAULICA
CODIGO FUENTE C++
AcGePoint3d Vertex;
AcGePoint2dArray Poligon; // Poligono de la S.T.
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);
LC = (m_pSections + m_Sections_len-1)->LC;
217
Apendice B. HIDRAULICA
CODIGO FUENTE C++
catch(const std::bad_alloc&)
{
acdbFail(_T("\nError de asignacin de memoria."));
return RTERROR;
}
AcDbObjectId ID;
218
Apendice B. HIDRAULICA
CODIGO FUENTE C++
RHidraulicos[0] = Zlower;
FGVBiseccionMethod(Zlower, Zupper, Vertices, BL, BR, nL,
nC, nR, LL, LC, LR, CC, CE, Betai, Qi,Ai, Zsi, Ki,
RHidraulicos);
acutPrintf(_T("\nZsi = %0.3f"),Zsi);
Poligon.removeAll(); // Eliminar todos lo datos de esta
natriz
catch(const std::bad_alloc&)
{
acdbFail(_T("\nError de asignacin de memoria."));
return RTERROR;
}
AcDbObjectId ID;
} // for j
219
Apendice B. HIDRAULICA
CODIGO FUENTE C++
return RTNORM;
}
BL = m_pSections->BL;
BR = m_pSections->BR;
nL = m_pSections->nL;
nC = m_pSections->nC;
nR = m_pSections->nR;
220
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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);
LC = m_pSections->LC;
catch(const std::bad_alloc&)
{
acdbFail(_T("\nError de asignacin de memoria."));
return RTERROR;
}
AcDbObjectId ID;
221
Apendice B. HIDRAULICA
CODIGO FUENTE C++
if
(RecursosFGV.AadirEntidadBlockTableRecord((AcDbEntity*)pResultados,
ID) != Acad::eOk)
{
if (pResultados)
{
delete pResultados;
}
RHidraulicos[0] = Zlower;
FGVBiseccionMethod(Zlower, Zupper, Vertices, BL, BR, nL,
nC, nR, LL, LC, LR, CC, CE, Betai, Qi,
Ai, Zsi, Ki, RHidraulicos);
acutPrintf(_T("\nZsi = %0.3f"),Zsi);
Poligon.removeAll(); // Eliminar todos lo datos de esta
natriz
222
Apendice B. HIDRAULICA
CODIGO FUENTE C++
catch(const std::bad_alloc&)
{
acdbFail(_T("\nError de asignacin de memoria."));
return RTERROR;
}
AcDbObjectId ID;
} // for j
return RTNORM;
}
223
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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
double ALF, AMC, ARF, Ai1, PLF, PMC, PRF, Pi1, KLF, KMC, KRF,
Ki1, Betai1;
double Zsi1;
Qi1 = Qi; // para este caso
while(NOencontrado)
{
cont++;
//acutPrintf(_T("\nIteracion en Biseccion = %d"),cont);
Zmiddle = (Zlower + Zupper)/2;
// Primera verificacin
if (abs(Fmiddle) < TOL)
{
Zsi1 = Zmiddle;
224
Apendice B. HIDRAULICA
CODIGO FUENTE C++
NOencontrado = false;
acutPrintf(_T("\nLo encontre en 01, en %d
iteraciones"), cont);
}
} // While
return RTNORM;
}
225
Apendice B. HIDRAULICA
CODIGO FUENTE C++
return RTNORM;
}
{
double BetaLF = 0.0, BetaMC = 0.0, BetaRF = 0.0,
Ai = ALF + AMC + ARF,
Ki = KLF + KMC + KRF;
226
Apendice B. HIDRAULICA
CODIGO FUENTE C++
// (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);
}
return RTNORM;
}
return RTNORM;
}
227
Apendice B. HIDRAULICA
CODIGO FUENTE C++
--------------------------------------------------------------------*/
{
switch (m_MetodoSf)
{
case 0: // Media Aritmtica.
{
*hfi12 = 0.5*dX*( Qi1*abs(Qi1)/(Ki1*Ki1)
+ Qi*abs(Qi)/(Ki*Ki));
break;
}
} //switch (m_MetodoSf))
return RTNORM;
}
228
Apendice B. HIDRAULICA
CODIGO FUENTE C++
return F;
}
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;
229
Apendice B. HIDRAULICA
CODIGO FUENTE C++
LVertices.append(Vertex);
Vertex[X] = GlobalVertices[k].x;
Vertex[Y] = GlobalVertices[k].y;
GVertices.append(Vertex);
}
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);
LVertices.append(Vertex);
Vertex[X] = GlobalVertices[k].x;
Vertex[Y] = GlobalVertices[k].y;
GVertices.append(Vertex);
}
InundIzquierdo = true;
}
230
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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;
}
CSPoligon.append(Vertex);
231
Apendice B. HIDRAULICA
CODIGO FUENTE C++
}//While
//RecursosFGV.DibujarLinea(p1,p2,PLEDER_CAPA_NIVELES);
*TopWith = Tw;
RecursosFGV.RestaurarVariables();
return RTNORM;
}
void
CPLEDERFlujoPermanente::FreeAllFGVResultadosBufer(FGVResultadosBufer
*theFirstResult)
232
Apendice B. HIDRAULICA
CODIGO FUENTE C++
/*--------------------------------------------------------------------
Ingreso : theFirstResult = puntero al primer elemento del buffer.
Salida : Vaco.
Propsito : Llamar a esta funcin para liberar un buffer
FGVResultadosBufer
--------------------------------------------------------------------*/
{
if (!theFirstResult)
return;
// liberar la ristra
while (pResulNext = pResult->pRnext)
{
delete pResult;
pResult = pResulNext;
}
delete pResult;
theFirstResult = NULL;
}
PLEDERFlujoPermanenteDlg.cpp
#include "stdafx.h"
#include "PLEDERFlujoPermanenteDlg.h"
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()
{
}
// 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);
233
Apendice B. HIDRAULICA
CODIGO FUENTE C++
// Radio
DDX_Radio(pDX, IDC_RADIO_FSUB, m_TipoFlujo);
}
BEGIN_MESSAGE_MAP(CPLEDERFlujoPermanenteDlg, CAdUiDialog)
ON_BN_CLICKED(IDOK, &CPLEDERFlujoPermanenteDlg::OnBnClickedOk)
END_MESSAGE_MAP()
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;
}
234
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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"
m_IdST = 0;
m_nVST = 0;
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
235
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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()
{
236
Apendice B. HIDRAULICA
CODIGO FUENTE C++
//-------------------------------------------------------------------
/*Clase FGVResultadosBufer: Bufer los resultados que se desaloja
mediante la funcin FreeAllResultados()*/
FGVResultadosBufer::FGVResultadosBufer()
{
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()
{
237
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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() {}
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"
238
Apendice B. HIDRAULICA
CODIGO FUENTE C++
#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();
}
{
unsigned int k, numVerts;
AcDbObjectId ID;
AcDbEntity *pEnt;
*nVST = 0;
239
Apendice B. HIDRAULICA
CODIGO FUENTE C++
return RTNORM;
}
{
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;
240
Apendice B. HIDRAULICA
CODIGO FUENTE C++
if (numVerts <= 2)
{
pPolyline->close();
acdbFail(_T("\nPolyline no vlida "));
return RTERROR;
}
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);
X1= v1[X];
Y1= v1[Y];
p1[X]= pt[X];
p1[Y]= pt[Y];
numof++;
241
Apendice B. HIDRAULICA
CODIGO FUENTE C++
} // for k
pPolyline->close();
return RTNORM;
}
{
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;
242
Apendice B. HIDRAULICA
CODIGO FUENTE C++
pEnt->close();
acdbFail(_T("\nTipo de entidad inesperada "));
return RTCAN;
}
if (numVerts <= 2)
{
pPolyline->close();
acdbFail(_T("\nPolyline no vlida "));
return RTERROR;
}
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);
X1= v1[X];
Y1= v1[Y];
p1[X]= pt[X];
p1[Y]= pt[Y];
numof++;
} // for k
243
Apendice B. HIDRAULICA
CODIGO FUENTE C++
pPolyline->close();
return RTNORM;
}
{
ads_point v1, v2 ;
v2[Z] = 0.0;
AcGePoint2d pt ;
unsigned int k, numVerts;
AcDbObjectId ID;
AcDbEntity *pEnt;
CRecursosCad Cad;
244
Apendice B. HIDRAULICA
CODIGO FUENTE C++
if (numVerts <= 2)
{
pPolyline->close();
acdbFail(_T("\nPolyline no vlida "));
return RTERROR;
}
CX[k+1] = pt[X];
CY[k+1] = pt[Y];
} // for k
pPolyline->close();
return RTNORM;
}
if (!pNombreArchivo)
{
acdbFail(_T("\nArgumento de funcin no vlido
[ImportarSeccionesTransversales]."));
return RTERROR;
}
245
Apendice B. HIDRAULICA
CODIGO FUENTE C++
if (infile.fail() != 0)
{
*NumeroVertST = 0;
acdbFail(_T("\nError de E/S al abrir el fichero
[ImportarSeccionesTransversales][open]."));
return RTERROR;
}
if (!buffer)
{
*NumeroVertST = 0;
infile.close();
acdbFail(_T("\nError de asignacin de memoria [Importar
ST][buffer]."));
return RTERROR;
}
while (!infile.eof())
{
infile.getline(buffer, GETLINEMAXBUFF, '\n');
if (infile.eof())
{
// limpiar el flag eof
infile.clear();
break;
}
np++;
}
np = 0;
catch(const std::bad_alloc&)
{
acedRestoreStatusBar();
acdbFail(_T("\nError de asignacin de memoria [Importar
ST][pPrimerST]."));
return RTERROR;
}
246
Apendice B. HIDRAULICA
CODIGO FUENTE C++
// recorrer el fichero
while (!infile.eof())
{
// leer una lnea del fichero
infile.getline(buffer, GETLINEMAXBUFF, '\n');
if (infile.eof())
break;
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)
247
Apendice B. HIDRAULICA
CODIGO FUENTE C++
{
*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;
catch(const std::bad_alloc&)
{
LiberarBufferSeccionesTransv();
acedRestoreStatusBar();
acdbFail(_T("\nError de asignacin de memoria
[Importar ST][nST]."));
return RTERROR;
}
nbprevious->Siguiente = nST;
nbprevious = nST;
} // while
infile.close();
acad_free(buffer);
acedRestoreStatusBar();
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"));
248
Apendice B. HIDRAULICA
CODIGO FUENTE C++
return RTERROR;
}
SeccionesBufer *pSeccTrasv;
pPrimerST = pPrimerST->Siguiente;
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;
// 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)
{
249
Apendice B. HIDRAULICA
CODIGO FUENTE C++
/*--------------------------------------------------------------------
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;
return RTNORM;
}
Mayor = ListaC[inicio];
Menor = ListaC[inicio];
250
Apendice B. HIDRAULICA
CODIGO FUENTE C++
{
if ( Menor > ListaC[j])
{
Menor = ListaC[j];
}
}//For j
return RTNORM;
}
/*--------------------------------------------------------------------
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;
}
251
Apendice B. HIDRAULICA
CODIGO FUENTE C++
break;
}
} //switch (MetodoSfm)
return Sfm;
}
/*--------------------------------------------------------------------
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.
-------------------------------------------------------------------*/
252
Apendice B. HIDRAULICA
CODIGO FUENTE C++
{
int j,k;
float Xi, Xd;
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++;
253
Apendice B. HIDRAULICA
CODIGO FUENTE C++
InundDerecho = true;
}
254
Apendice B. HIDRAULICA
CODIGO FUENTE C++
}//While
} //if
}//For j
return RTNORM;
}
int j,k;
float Xi, Xd;
255
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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;
}
256
Apendice B. HIDRAULICA
CODIGO FUENTE C++
257
Apendice B. HIDRAULICA
CODIGO FUENTE C++
}//While
} //if
}//For j
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*/)
258
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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);
BEGIN_MESSAGE_MAP(CPLEDERResutadosDlg, CAdUiDialog)
ON_MESSAGE(WM_ACAD_KEEPFOCUS, OnAcadKeepFocus)
END_MESSAGE_MAP()
BOOL CPLEDERResutadosDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_Edit_Rx.SetWindowText(m_Rx);
m_Edit_Ry.SetWindowText(m_Ry);
m_PickButton_RPunto.AutoLoad();
259
Apendice B. HIDRAULICA
CODIGO FUENTE C++
{
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);
acdbRToS(Vm , 2, 3, strV);
acdbRToS(Fr , 2, 3, strF);
acdbRToS(Kt , 2, 3, strK);
//acdbRToS((m_pRHidraulicos + i)->KLF , 2, 3, strKLF);
//acdbRToS((m_pRHidraulicos + i)->KMC , 2, 3, strKMC);
260
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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);
}
261
Apendice B. HIDRAULICA
CODIGO FUENTE C++
// 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;
if (Acad::eOk ==
RecursosR.GenerarTablaHidraulicodesdeBlock((TCHAR
*)strNameBlock.GetBuffer(), pRwData, m_Result_len))
{
// Crear la tabla
AcDbTable *pTbl = NULL;
262
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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;
// liberar la ristra
while (pResulNext = pResult->pRnext)
{
delete pResult;
pResult = pResulNext;
}
delete pResult;
m_theFirstR = NULL;
}
263
Apendice B. HIDRAULICA
CODIGO FUENTE C++
if (filter == NULL)
{
acdbFail(_T("\nError al construir el filtro
[AcquireLevelFreeSurface][acutBuildList]."));
return RTERROR;
}
ads_name ss; // ss
long sslen = 0; // longitud del ss
acutRelRb(filter);
CPLEDERHydraulicResult *pResult;
ads_name ename;
AcDbObjectId ID;
264
Apendice B. HIDRAULICA
CODIGO FUENTE C++
long nL = 0;
AcGePoint2d P1;
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
265
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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;
pResult->close();
266
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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;
}
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);
267
Apendice B. HIDRAULICA
CODIGO FUENTE C++
pResult->close();
nRprevious->pRnext = nR;
nRprevious = nR;
} // for i
acedSSFree(ss);
acedRestoreStatusBar();
*numberL = nL;
return RTNORM;
}
268
Apendice B. HIDRAULICA
CODIGO FUENTE C++
if (!filter)
{
acdbFail(_T("\nError al construir el filtro
[DeleteLevelFreeSurface][acutBuildList]."));
return RTERROR;
}
ads_name ss; // ss
long sslen = 0; // longitud del ss
acutRelRb(filter);
CPLEDERHydraulicResult *pResult;
ads_name ename;
AcDbObjectId ID;
long n, np, progress = 0;
np = 100;
// recorrer el ss
269
Apendice B. HIDRAULICA
CODIGO FUENTE C++
pResult->close();
// borrar la entidad
acdbEntDel(ename);
} // 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)
270
Apendice B. HIDRAULICA
CODIGO FUENTE C++
{
// 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;
// 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;
271
Apendice B. HIDRAULICA
CODIGO FUENTE C++
// 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();
if (filter == NULL)
{
acdbFail(_T("\nError al construir el filtro
[AcquireCrossSections][acutBuildList]."));
return RTERROR;
}
ads_name ss; // ss
long sslen = 0; // longitud del ss
272
Apendice B. HIDRAULICA
CODIGO FUENTE C++
acutRelRb(filter);
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;
273
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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;
pSecciones->close();
vertexArray.removeAll();
// recorrer el ss
for (int i = 1; i < sslen; i++)
274
Apendice B. HIDRAULICA
CODIGO FUENTE C++
{
// 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;
}
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);
275
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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;
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.
-------------------------------------------------------------------*/
{
276
Apendice B. HIDRAULICA
CODIGO FUENTE C++
FreeAllCrossSectionsSocavacionBufs();
if (filter == NULL)
{
acdbFail(_T("\nError al construir el filtro
[AcquireCrossSections][acutBuildList]."));
return RTERROR;
}
ads_name ss; // ss
long sslen = 0; // longitud del ss
acutRelRb(filter);
CPLEDERCrossSections *pSecciones;
ads_name ename;
AcDbObjectId ID;
long nVST, np = 0;
double IdST;
Adesk::Int32 Material,
CoefProb;
double CoefMaterial;
277
Apendice B. HIDRAULICA
CODIGO FUENTE C++
return RTERROR;
}
pSecciones->close();
// 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();
278
Apendice B. HIDRAULICA
CODIGO FUENTE C++
acedRestoreStatusBar();
acdbFail(_T("\nError al tomar el nombre de la entidad
PLEDERCrossSections [AcquireCrossSections][acedSSName]."));
return RTERROR;
}
pSecciones->close();
nbprevious->nbnext = nb;
nbprevious = nb;
} // for i
279
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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
if (filter == NULL)
{
acdbFail(_T("\nError al construir el filtro
[GetFirstNumberCrossSections][acutBuildList]."));
return RTERROR;
}
ads_name ss; // ss
long sslen = 0; // longitud del ss
280
Apendice B. HIDRAULICA
CODIGO FUENTE C++
CPLEDERCrossSections *pSecciones;
ads_name ename;
AcDbObjectId ID;
long np = 0;
double n;
// 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;
}
// chequearlo
if (n > np)
np = n;
} // for i
acedSSFree(ss);
*nfirst = np;
281
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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
if (filter == NULL)
{
acdbFail(_T("\nError al construir el filtro
[GetLastNumberCrossSections][acutBuildList]."));
return RTERROR;
}
ads_name ss; // ss
long sslen = 0; // longitud del ss
acutRelRb(filter);
CPLEDERCrossSections *pSecciones;
ads_name ename;
AcDbObjectId ID;
long np = 0;
double n;
282
Apendice B. HIDRAULICA
CODIGO FUENTE C++
// 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;
}
// 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.
283
Apendice B. HIDRAULICA
CODIGO FUENTE C++
if (filter == NULL)
{
acdbFail(_T("\nError al construir el filtro
[GetNumberofCrossSections][acutBuildList]."));
return RTERROR;
}
ads_name ss; // ss
long sslen = 0; // longitud del ss
acutRelRb(filter);
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.
-------------------------------------------------------------------*/
284
Apendice B. HIDRAULICA
CODIGO FUENTE C++
if (filter == NULL)
{
acdbFail(_T("\nError al construir el filtro
[GetCrossSectionsAttributes][acutBuildList]."));
return RTERROR;
}
ads_name ss; // ss
long sslen = 0; // longitud del ss
acutRelRb(filter);
CPLEDERCrossSections *pSecciones;
ads_name ename;
AcDbObjectId ID;
acedSSFree(ss);
285
Apendice B. HIDRAULICA
CODIGO FUENTE C++
// tomar el Dimetro
if (pSecciones->diameter(m_STDiameter) != Acad::eOk)
{
pSecciones->close();
acdbFail(_T("\nError al tomar los atributos del nodo
[GetCrossSectionsAttributes]."));
return RTERROR;
}
pSecciones->close();
return RTNORM;
}
if (!m_theFirstST)
{
acutPrintf(_T("\nERROR PLEDER: No hay secciones
transversales definidos."));
286
Apendice B. HIDRAULICA
CODIGO FUENTE C++
return RTERROR;
}
CrossSectionsBufer *nb;
bool encontrado;
encontrado = false;
if (!encontrado)
{
acutPrintf(_T("\nPLEDER ERROR: Seccin transveral no
encontrado."));
FreeAllCrossSectionsBufs();
return RTERROR;
}
if (rb != NULL)
{
acedCmd(rb);
acutRelRb(rb);
}
FreeAllCrossSectionsBufs();
return RTNORM;
}
int CPLEDERSeccionesTransversales::GetIdCrossSectionsAttributes(double
IdST, long *nVST, AcGePoint2dArray& LvertexArray,
287
Apendice B. HIDRAULICA
CODIGO FUENTE C++
if (!m_theFirstST)
{
acutPrintf(_T("\nERROR PLEDER: No hay secciones
transversales definidos."));
return RTERROR;
}
CrossSectionsBufer *nb;
bool encontrado;
encontrado = false;
if (!encontrado)
{
acutPrintf(_T("\nPLEDER ERROR: Seccin Transversal no
encontrado."));
FreeAllCrossSectionsBufs();
return RTERROR;
}
*nVST = nb->m_nVST;
*LL = nb->m_LL;
*LC = nb->m_LC;
*LR = nb->m_LR;
*NL = nb->m_NL;
*NC = nb->m_NC;
288
Apendice B. HIDRAULICA
CODIGO FUENTE C++
*NR = nb->m_NR;
*BL = nb->m_BL;
*BR = nb->m_BR;
*CC = nb->m_CC;
*CE = nb->m_CE;
AcGePoint2d 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;
if (!m_theFirstSOC)
{
acutPrintf(_T("\nERROR PLEDER: No hay secciones
transversales definidos."));
return RTERROR;
}
CrossSectionsSocavacionBufer *nb;
bool encontrado = false;
289
Apendice B. HIDRAULICA
CODIGO FUENTE C++
if (!encontrado)
{
acutPrintf(_T("\nPLEDER ERROR: Seccin Transversal no
encontrado."));
FreeAllCrossSectionsSocavacionBufs();
return RTERROR;
}
FreeAllCrossSectionsSocavacionBufs();
return RTNORM;
}
Mayor = VerticeY[1];
Menor = VerticeY[1];
290
Apendice B. HIDRAULICA
CODIGO FUENTE C++
}//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)
{
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.
Vertices.append(Vertex);
}
291
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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;
}
Vertices.append(Vertex);
InundDerecho = true;
}
292
Apendice B. HIDRAULICA
CODIGO FUENTE C++
293
Apendice B. HIDRAULICA
CODIGO FUENTE C++
//acutPrintf(_T("\nValores de Area
Derecha: %0.6f"), Ad);
}//While
} //if
}//For j
294
Apendice B. HIDRAULICA
CODIGO FUENTE C++
{
*Area = 0.0;
long N = VPoligon.length();
return RTNORM;
}
PLEDERSeccionesTransversalesDlg.cpp
#include "PLEDERRecursosCad.h"
#include "PLEDERHidraSecTrasnv.h"
//Objetos PLEDER
CRecursosCad RecursosST;
CPLEDERSeccionesTransversales CS;
HidraSecTrasnv GeometriaST;
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");
295
Apendice B. HIDRAULICA
CODIGO FUENTE C++
m_CC = _T("0.1");
m_CE = _T("0.3");
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);
//ComboBox.
DDX_Control(pDX, IDC_COMBO_ST, m_Combo_ST);
// Botones (CAD)
DDX_Control(pDX, IDC_BUTTON_ST, m_PickButton_ST);
// 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)
296
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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)
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)
//ON_BN_CLICKED(IDOK,
&CPLEDERLluviaEscorrentiaDlg::OnBnClickedOk)
END_MESSAGE_MAP()
BOOL CPLEDERSeccionesTransversalesDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_wndList.SetGridLines(TRUE);
//m_wndList.SetCheckboxes(TRUE);
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);
297
Apendice B. HIDRAULICA
CODIGO FUENTE C++
m_Edit_CE.SetWindowText(m_CE);
m_Edit_CE.SetRange(0, 1);
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;
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);
}
298
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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;
299
Apendice B. HIDRAULICA
CODIGO FUENTE C++
AcGePoint2dArray GlobalVertices;
AcGePoint2dArray LocalVertices;
TCHAR strN[100];
TCHAR strX[100];
TCHAR strY[100];
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);
void CPLEDERSeccionesTransversalesDlg::OnButtonST()
{
if(m_Combo_ST.GetCount() == 0)
{
::AfxMessageBox(_T("PLEDER ERROR: \n Ingresar Una Nueva
seccin"));
return;
}
//Esconde el dilogo
BeginEditorCommand();
300
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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);
// Selecciona la polilinea
if (acedEntSel(_T("\nSeleccionar Polilinea: "), nombrep, punto)
!= RTNORM)
{
RecursosST.RestaurarVariables();
acutPrintf(_T("\nError al seleccionar la Polilinea"));
301
Apendice B. HIDRAULICA
CODIGO FUENTE C++
CompleteEditorCommand();
return;
}
302
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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;
}
default:
return;
} //switch (valor2)
long nVST = 0;
if ( GeometriaST.NumeroVerticesPolilinea(nombrep, &nVST) !=
RTNORM)
{
acdbFail(_T("\nError [NumeroVerticesPolilinea()]"));
CompleteEditorCommand();
return;
}
303
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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;
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);
304
Apendice B. HIDRAULICA
CODIGO FUENTE C++
//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;
//Esconde el dilogo
BeginEditorCommand();
int nV;
acedInitGet(RSG_NONULL, NULL);
305
Apendice B. HIDRAULICA
CODIGO FUENTE C++
// No se permite nV = 0
if (nV <= 0)
{
::AfxMessageBox(_T("\nEntrada no vlida."));
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;
//Esconde el dilogo
BeginEditorCommand();
int nVD;
acedInitGet(RSG_NONULL, NULL);
306
Apendice B. HIDRAULICA
CODIGO FUENTE C++
{
CompleteEditorCommand();
return;
}
// No se permite nVD = 0
if (nVD <= 0)
{
::AfxMessageBox(_T("\nEntrada no vlida."));
CompleteEditorCommand();
return;
}
// Si todo es correcto
CompleteEditorCommand();
m_BD.Format(_T("%d"), nVD );
m_Edit_BD.SetWindowText(m_BD);
307
Apendice B. HIDRAULICA
CODIGO FUENTE C++
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);
double CPLEDERSeccionesTransversalesDlg::OnButtonDistancia()
/*--------------------------------------------------------------------
Ingreso : Vaco.
Salida : Vaco
Propsito : Calcula la distancia entre varios puntos
--------------------------------------------------------------------*/
{
//Esconde el dilogo
BeginEditorCommand();
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;
308
Apendice B. HIDRAULICA
CODIGO FUENTE C++
}//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.
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 (!filter)
{
309
Apendice B. HIDRAULICA
CODIGO FUENTE C++
ads_name ss; // ss
long sslen = 0; // longitud del ss
acutRelRb(filter);
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;
}
310
Apendice B. HIDRAULICA
CODIGO FUENTE C++
double Id_Seccion;
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;
}
/*-----------------------------------------------------------------
------------------------------------------------------------------*/
// PLEDERST1Dlg.cpp: archivo de implementacin
311
Apendice B. HIDRAULICA
CODIGO FUENTE C++
IMPLEMENT_DYNAMIC(CPLEDERST1Dlg, CDialog)
CPLEDERST1Dlg::~CPLEDERST1Dlg()
{
BEGIN_MESSAGE_MAP(CPLEDERST1Dlg, CDialog)
ON_BN_CLICKED(IDOK, &CPLEDERST1Dlg::OnBnClickedOk)
END_MESSAGE_MAP()
// Cajas de texto
m_Edit_NST.GetWindowText(m_NST);
CDialog::OnOK();
//algo.EnableWindow( FALSE );
}
312
Ap
endice C
HIDRAULICA
FLUVIAL CODIGO
FUENTE C++
313
Apendice C. HIDRAULICA
FLUVIAL CODIGO FUENTE C++
ARCHIVOS DE CABECERA:
PLEDERSocavacionGeneral.h
#pragma once
class CPLEDERSocavacionGeneral
{
public:
CPLEDERSocavacionGeneral(void);
~CPLEDERSocavacionGeneral(void);
public:
// Clculo de la variable X.
int SGCoeficienteX(int Material, float CoefMaterial, float *X);
};
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();
314
Apendice C. HIDRAULICA
FLUVIAL CODIGO FUENTE C++
// 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();
// 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();
};
315
Apendice C. HIDRAULICA
FLUVIAL CODIGO FUENTE C++
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 1
316
Apendice C. HIDRAULICA
FLUVIAL CODIGO FUENTE C++
}
} // if 0
return RTNORM;
}
// Interpolaciones lineales.
*X =
CN.InterpolacionLineal(25,DatosMaterialY,DatosMaterialX,
CoefMaterial);
}
317
Apendice C. HIDRAULICA
FLUVIAL CODIGO FUENTE C++
// Interpolaciones lineales.
*X =
CN.InterpolacionLineal(25,DatosMaterialY,DatosMateria
lX, CoefMaterial);
}
delete [] DatosMaterialX;
delete [] DatosMaterialY;
return RTNORM;
}
return RTNORM;
}
318
Apendice C. HIDRAULICA
FLUVIAL CODIGO FUENTE C++
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:
319
Apendice C. HIDRAULICA
FLUVIAL CODIGO FUENTE C++
{
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)
Vertex[X] = 0.0;
Vertex[Y] = Hs;
VerticesSoc.append(Vertex);
} // for k
} //if
320
Apendice C. HIDRAULICA
FLUVIAL CODIGO FUENTE C++
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)
// 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()
//--------------------------------------------------------------------
321
Apendice C. HIDRAULICA
FLUVIAL CODIGO FUENTE C++
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();
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);
322
Apendice C. HIDRAULICA
FLUVIAL CODIGO FUENTE C++
m_Edit_SOCDm.EnableWindow(1);
m_Material = 1;
long i;
CString str_IdST;
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();
323
Apendice C. HIDRAULICA
FLUVIAL CODIGO FUENTE C++
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.
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.
CoefProb = m_Combo_SOCProbg.GetCurSel();
324
Apendice C. HIDRAULICA
FLUVIAL CODIGO FUENTE C++
if (!filter)
{
acdbFail(_T("\nError al construir el filtro
[acutBuildList]."));
return ;
}
ads_name ss; // ss
long sslen = 0; // longitud del ss
acutRelRb(filter);
CPLEDERCrossSections *pSecciones;
ads_name ename;
AcDbObjectId ID;
325
Apendice C. HIDRAULICA
FLUVIAL CODIGO FUENTE C++
// 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;
}// if
pSecciones->close();
} // for i
acedSSFree(ss);
acutPrintf(_T("\n....Datos modificados en forma Exitosa...."));
return;
}
326
Apendice C. HIDRAULICA
FLUVIAL CODIGO FUENTE C++
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);
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);
m_SOCPes.Format(_T("%g"), CoefMaterial);
m_Edit_SOCPes.SetWindowText(m_SOCPes);
}
}
void CPLEDERSocavacionGeneralDlg::OnKillfocusComboSOCProbg()
{
switch (m_Combo_SOCProbg.GetCurSel())
{
327
Apendice C. HIDRAULICA
FLUVIAL CODIGO FUENTE C++
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())
}
328
Ap
endice D
Duracion (min) Q total (m3 /s) Duracion (min) Q total (m3 /s)
Duracion (min) Q total (m3 /s) Duracion (min) Q total (m3 /s)
330
Apendice D. RESULTADOS DEL PROGRAMA
Duracion (min) Q total (m3 /s) Duracion (min) Q total (m3 /s)
331
Apendice D. RESULTADOS DEL PROGRAMA
Duracion (min) Q total (m3 /s) Duracion (min) Q total (m3 /s)
332
Apendice D. RESULTADOS DEL PROGRAMA
Duracion (min) Q total (m3 /s) Duracion (min) Q total (m3 /s)
(Fin de la tabla)
Duracion (min) Q total (m3 /s) Duracion (min) Q total (m3 /s)
333
Apendice D. RESULTADOS DEL PROGRAMA
Duracion (min) Q total (m3 /s) Duracion (min) Q total (m3 /s)
334
Apendice D. RESULTADOS DEL PROGRAMA
Duracion (min) Q total (m3 /s) Duracion (min) Q total (m3 /s)
335
Apendice D. RESULTADOS DEL PROGRAMA
Duracion (min) Q total (m3 /s) Duracion (min) Q total (m3 /s)
336
Apendice D. RESULTADOS DEL PROGRAMA
Duracion (min) Q total (m3 /s) Duracion (min) Q total (m3 /s)
(Fin de la tabla)
Duracion (min) Q total (m3 /s) Duracion (min) Q total (m3 /s)
337
Apendice D. RESULTADOS DEL PROGRAMA
Duracion (min) Q total (m3 /s) Duracion (min) Q total (m3 /s)
338
Apendice D. RESULTADOS DEL PROGRAMA
Duracion (min) Q total (m3 /s) Duracion (min) Q total (m3 /s)
339
Apendice D. RESULTADOS DEL PROGRAMA
Duracion (min) Q total (m3 /s) Duracion (min) Q total (m3 /s)
340
Apendice D. RESULTADOS DEL PROGRAMA
Duracion (min) Q total (m3 /s) Duracion (min) Q total (m3 /s)
(Fin de la tabla)
Duracion (min) Q total (m3 /s) Duracion (min) Q total (m3 /s)
341
Apendice D. RESULTADOS DEL PROGRAMA
Duracion (min) Q total (m3 /s) Duracion (min) Q total (m3 /s)
342
Apendice D. RESULTADOS DEL PROGRAMA
Duracion (min) Q total (m3 /s) Duracion (min) Q total (m3 /s)
343
Apendice D. RESULTADOS DEL PROGRAMA
Duracion (min) Q total (m3 /s) Duracion (min) Q total (m3 /s)
344
Apendice D. RESULTADOS DEL PROGRAMA
Duracion (min) Q total (m3 /s) Duracion (min) Q total (m3 /s)
(Fin de la tabla)
Sta Q (m3 /s) Elev (m) Area(m2 ) Perm (m) V(m/s) Froude Ancho (m)
345
Apendice D. RESULTADOS DEL PROGRAMA
Sta Q (m3 /s) Elev (m) Area(m2 ) Perm (m) V(m/s) Froude Ancho (m)
346
Apendice D. RESULTADOS DEL PROGRAMA
Sta Q (m3 /s) Elev (m) Area(m2 ) Perm (m) V(m/s) Froude Ancho (m)
347
Apendice D. RESULTADOS DEL PROGRAMA
Sta Q (m3 /s) Elev (m) Area(m2 ) Perm (m) V(m/s) Froude Ancho (m)
348
Apendice D. RESULTADOS DEL PROGRAMA
Sta Q (m3 /s) Elev (m) Area(m2 ) Perm (m) V(m/s) Froude Ancho (m)
349
Apendice D. RESULTADOS DEL PROGRAMA
Sta Q (m3 /s) Elev (m) Area(m2 ) Perm (m) V(m/s) Froude Ancho (m)
350
Apendice D. RESULTADOS DEL PROGRAMA
Sta Q (m3 /s) Elev (m) Area(m2 ) Perm (m) V(m/s) Froude Ancho (m)
(Fin de la tabla)
Sta Q (m3 /s) Elev (m) Area(m2 ) Perm (m) V(m/s) Froude Ancho (m)
351
Apendice D. RESULTADOS DEL PROGRAMA
Sta Q (m3 /s) Elev (m) Area(m2 ) Perm (m) V(m/s) Froude Ancho (m)
352
Apendice D. RESULTADOS DEL PROGRAMA
Sta Q (m3 /s) Elev (m) Area(m2 ) Perm (m) V(m/s) Froude Ancho (m)
353
Apendice D. RESULTADOS DEL PROGRAMA
Sta Q (m3 /s) Elev (m) Area(m2 ) Perm (m) V(m/s) Froude Ancho (m)
354
Apendice D. RESULTADOS DEL PROGRAMA
Sta Q (m3 /s) Elev (m) Area(m2 ) Perm (m) V(m/s) Froude Ancho (m)
355
Apendice D. RESULTADOS DEL PROGRAMA
Sta Q (m3 /s) Elev (m) Area(m2 ) Perm (m) V(m/s) Froude Ancho (m)
356
Apendice D. RESULTADOS DEL PROGRAMA
Sta Q (m3 /s) Elev (m) Area(m2 ) Perm (m) V(m/s) Froude Ancho (m)
(Fin de la tabla)
Sta Q (m3 /s) Elev (m) Area(m2 ) Perm (m) V(m/s) Froude Ancho (m)
357
Apendice D. RESULTADOS DEL PROGRAMA
Sta Q (m3 /s) Elev (m) Area(m2 ) Perm (m) V(m/s) Froude Ancho (m)
358
Apendice D. RESULTADOS DEL PROGRAMA
Sta Q (m3 /s) Elev (m) Area(m2 ) Perm (m) V(m/s) Froude Ancho (m)
359
Apendice D. RESULTADOS DEL PROGRAMA
Sta Q (m3 /s) Elev (m) Area(m2 ) Perm (m) V(m/s) Froude Ancho (m)
360
Apendice D. RESULTADOS DEL PROGRAMA
Sta Q (m3 /s) Elev (m) Area(m2 ) Perm (m) V(m/s) Froude Ancho (m)
361
Apendice D. RESULTADOS DEL PROGRAMA
Sta Q (m3 /s) Elev (m) Area(m2 ) Perm (m) V(m/s) Froude Ancho (m)
362
Apendice D. RESULTADOS DEL PROGRAMA
Sta Q (m3 /s) Elev (m) Area(m2 ) Perm (m) V(m/s) Froude Ancho (m)
(Fin de la tabla)
Sta Q (m3 /s) Elev (m) Area(m2 ) Perm (m) V(m/s) Froude Ancho (m)
363
Apendice D. RESULTADOS DEL PROGRAMA
Sta Q (m3 /s) Elev (m) Area(m2 ) Perm (m) V(m/s) Froude Ancho (m)
364
Apendice D. RESULTADOS DEL PROGRAMA
Sta Q (m3 /s) Elev (m) Area(m2 ) Perm (m) V(m/s) Froude Ancho (m)
365
Apendice D. RESULTADOS DEL PROGRAMA
Sta Q (m3 /s) Elev (m) Area(m2 ) Perm (m) V(m/s) Froude Ancho (m)
366
Apendice D. RESULTADOS DEL PROGRAMA
Sta Q (m3 /s) Elev (m) Area(m2 ) Perm (m) V(m/s) Froude Ancho (m)
367
Apendice D. RESULTADOS DEL PROGRAMA
Sta Q (m3 /s) Elev (m) Area(m2 ) Perm (m) V(m/s) Froude Ancho (m)
368
Apendice D. RESULTADOS DEL PROGRAMA
Sta Q (m3 /s) Elev (m) Area(m2 ) Perm (m) V(m/s) Froude Ancho (m)
(Fin de la tabla)
369
Ap
endice E
PLANOS
Componente hidrologico
Componente hidraulico
370