análisis numérico y comprobación experimental de las

Anuncio
UNIVERSIDAD DE CASTILLA - LA MANCHA
ESCUELA TÉCNICA SUPERIOR
DE INGENIEROS INDUSTRIALES
CIUDAD REAL
PROYECTO FIN DE CARRERA No 10-12-200927
ANÁLISIS NUMÉRICO Y COMPROBACIÓN EXPERIMENTAL DE LAS
ECUACIONES BÁSICAS EN EL TRANSPORTE DE FLUIDOS
Autor:
JOSÉ ENRIQUE CABAÑAS CEBALLOS
Director de proyecto:
GONZALO RODRÍGUEZ PRIETO
Noviembre 2010
CAPÍTULO 1. OBJETIVOS, ANTECEDENTES Y...
Capítulo 1
OBJETIVOS, ANTECEDENTES Y
MOTIVACIÓN
El objetivo de este proyecto es crear un programa capaz de analizar la dependencia de la
pérdida de carga con otras variables elementales de un fluido al recorrer una tubería. Concretamente las variables elementales son la presión, la velocidad del fluido, la rugosidad y la
longitud de la tubería.
Hay varios modelos para obtener esta dependencia en rangos distintos de sus variables, por
lo que un primer paso es analizar en qué rangos es aplicable cada uno de ellos y asi se ha hecho
en este proyecto. Posteriormente y debido a la complejidad de estos modelos, se desarrolló
un programa informático, en el que con el conocimiento de algunas variables básicas de la
instalación, se calculan rápidamente el resto de parámetros usando los diversos modelos con
el ánimo de establecer una comparación entre los cálculos y los resultados experimentales.
La mayoria de los modelos analíticos de dinámica de fluidos en una tubería fueron obtenidos
durante los siglos XIX y XX, poseyendo una complejidad ya mencionada que favorece su
sustitución por modelos numericos informáticos, de mayor complejidad y precisión. Sin embargo, estos nuevos programas son todavía muy lentos, por lo que para poder realizar algunos
José Enrique Cabañas Ceballos
2
cálculos se recurre todavía a estos modelos analíticos.
Además de estos modelos, también se usó el conocido Diagrama de Moody, que consiste
en una recopilación experimental de datos sobre diversas tuberías expresados en función de
variables adimensionales.
De los modelos existentes los estudiados en este proyecto han sido:
Ecuación de Blasius [1]
Ecuación para régimen laminar [2]
Ecuación de Colebrook [2]
Ecuación de Prandtl [3]
Ecuación de Von Karman-Nikuradse [3]
Diagrama de Moody [4]
Ecuación Explícita [5]
Ecuación de Churchill [6]
Por lo tanto en este proyecto se ha desarrollado un programa informático que facilita resultados numéricos sobre las magnitudes principales del desplazamiento de un fluido a lo largo de
una tubería y sus cálculos han sido validados al compararlos tanto con el diagrama de Moody
como con datos experimentales obtenidos con una instalación de estudio hidrodinámico.
José Enrique Cabañas Ceballos
3
1.1. DISTINCIÓN ENTRE RÉGIMEN LAMINAR Y...
1.1.
Distinción entre régimen laminar y turbulento en fluidos.
Cuando entre dos partículas fluidas en movimiento existe un gradiente de velocidad, una
se mueve más rápido que la otra, se desarrollan fuerzas de fricción que actúan tangencialmente
a la dirección a las velocidades. Éstas fuerzas de fricción tratan de introducir un elemento de
rotación entre las partículas en movimiento, pero simultáneamente la viscosidad del fluido actúa en sentido contrario tratando de impedirlo. Dependiendo del valor relativo de estas fuerzas
se pueden producir diferentes estados de flujo.
Cuando el gradiente de velocidad es bajo, la fuerza de inercia debida al movimiento es
mayor que la de fricción, y las partículas se desplazan pero no rotan, o lo hacen pero con muy
poca energía. El resultado final es un movimiento en el cual las partículas siguen trayectorias
definidas y para el que todas las partículas que pasan por un punto en el campo del flujo siguen
la misma trayectoria. Este tipo de flujo fue identificado por O. Reynolds [8] y se denomina laminar, queriendo significar con ello que las partículas se desplazan en forma de capas
o láminas. Al aumentar el gradiente de velocidad se incrementa la fricción entre partículas
vecinas dentro del fluido y estas adquieren una energía de rotación apreciable. La viscosidad
pierde su efecto y debido a la rotación las partículas cambian de trayectoria. Al pasar de unas
trayectorias a otras, las partículas chocan entre sí y cambian de rumbo de forma errática. Éste
tipo de flujo se denomina turbulento.
Sus características principales son:
Las partículas del fluido no se mueven siguiendo trayectorias definidas.
La acción de la viscosidad es despreciable.
Las partículas del fluido poseen energía de rotación apreciable, y se mueven de forma
errática chocando unas con otras.
José Enrique Cabañas Ceballos
4
1.2. EL EXPERIMENTO DE REYNOLDS.
Así pues y para resumir la distinción entre los diversos regímenes de flujo, cuando las
fuerzas de inercia del fluido en movimiento son muy bajas, la viscosidad es la fuerza dominante
y el flujo es laminar, pero si predominan las fuerzas de inercia el flujo es turbulento. Existe un
parámetro adimensional que relaciona estos dos casos, el número de Reynolds. Para números
de Reynolds bajos el flujo es laminar, y para valores altos el flujo es turbulento.
Experimentalmente se ha encontrado que en tubos de sección circular cuando el número
de Reynolds pasa de 2400 se inicia la turbulencia en la zona central del tubo, sin embargo este
límite es muy variable y depende de las condiciones de estabilidad del conjunto. Para números
de Reynolds mayores de 4000 el flujo es turbulento. Al descender la velocidad se encuentra que
para números de Reynolds menores de 2100 el flujo es siempre laminar y cualquier turbulencia
que se produzca es eliminada por la acción de la viscosidad. Por lo tanto el paso de flujo
laminar a turbulento es un fenómeno gradual en el que inicialmente se produce turbulencia en
la zona central del tubo, donde la velocidad es mayor, pero queda una corona de flujo laminar
entre las paredes del tubo y el núcleo central. Al aumentar la velocidad media, el espesor de la
corona laminar disminuye gradualmente hasta desaparecer totalmente. Esta última condición
se consigue a altas velocidades cuando se obtiene turbulencia total en el flujo.
Para un flujo entre placas paralelas, si se toma como dimensión característica la separación
de éstas, el número de Reynolds máximo que garantiza flujo laminar es 1000. Para canales
rectangulares anchos y usando como dimensión característica la profundidad, este límite es de
500; y para esferas con el diámetro como dimensión característica el límite es la unidad.
1.2.
El experimento de Reynolds.
Osborne Reynolds en 1883 presentaba el siguiente dilema, en uno de sus extensos trabajos[8]:
«Aunque las ecuaciones de la hidrodinámica sean aplicables al movimiento laminar, o sea sin
remolinos, mostrando que entonces la resistencia es proporcional a la velocidad, no habían arrojado hasta ese entonces ninguna luz sobre las circunstancias de las cuales dicho movimiento
José Enrique Cabañas Ceballos
5
1.2. EL EXPERIMENTO DE REYNOLDS.
depende. Y, con todo y que en años recientes estas ecuaciones se habían aplicado a la teoría
del torbellino, no se habían aplicado en lo absoluto al movimiento del agua que es una masa de
remolinos, movimiento turbulento, ni habían ofrecido una pista para descubrir la causa de que
la resistencia a tal movimiento varíe como el cuadrado de la velocidad» y agregaba: «Mientras
que, cuando se aplican a olas y al movimiento del agua en tubos capilares, los resultados teóricos concuerdan con los experimentales, la teoría de la hidrodinámica había fracasado hasta la
fecha en proporcionar la más leve sugerencia acerca del porqué no logra explicar las leyes de
la resistencia encontrada por grandes cuerpos que se mueven a través del agua con velocidades
sensiblemente grandes, o por el agua en tuberías bastante anchas».
Como expresan los parrafos anteriores, Reynolds buscaba determinar si el movimiento del
agua era laminar o turbulento, y dilucidar las influencias de los parámetros básicos del fluido
en el cambio de un régimen a otro. Se sabía que cuando más viscoso fuera el fluido, menos
probable es que el movimiento regular o laminar se altere. Por otro lado tanto la velocidad
del fluido como el tamaño del sistema hidráulico son favorables a la inestabilidad, cuanto más
ancho sea el canal y más grande la velocidad mayor es la probabilidad de remolinos, una
indicación clara de turbulencia.
Utilizando el análisis dimensional y con las ecuaciones fundamentales del movimiento
Reynolds comenzó a resolver dichas dudas. A presión constante, pensó, en las ecuaciones
del movimiento de un fluido se equilibra el efecto de la inercia, representado por la energía
cinética contenida en la unidad de volumen, ρU 2 , con el efecto de la viscosidad, representado
por el esfuerzo de Newton, µU/L, donde U es la velocidad media, µ la viscosidad del fuido
y L una longitud característica de la corriente en estudio (el diámetro del tubo por ejemplo).
Ambos parámetros dieron origen al siguiente parámetro adimensional llamado «Número de
Reynolds»:
ρU 2
ρU L
Ef ectos de inercia
=
=
Ef ectos viscosos
µU/L
µ
(1.1)
Es un parámetro capaz de cuantificar la importancia relativa de las acciones mencionadas:
José Enrique Cabañas Ceballos
6
1.2. EL EXPERIMENTO DE REYNOLDS.
un valor pequeño indica que los efectos viscosos prevalecen, con lo que el movimiento será
laminar, mientras que un valor grande, implica que predominan las fuerzas de inercia, por
lo que tendremos un comportamiento turbulento. Debe pues existir un valor intermedio que
separe los dos regímenes y que identificará la relación entre velocidad, viscosidad y longitud
característica tal que alterando alguna de ellas, se pase de régimen laminar a turbulento o
viceversa.
Entonces se propuso determinar bajo qué condiciones experimentales se produce el movimiento laminar y el turbulento. Dado que este último se caracteriza por la presencia de
remolinos, la primera idea que se le ocurrió fue visualizar con colorante el movimiento de un
fluido en una tubería transparente. Así, usó un sifón de vidrio de 6 mm de diámetro (ABC)
lleno de agua con una entrada abocinada en A y una válvula de control en C e introdujo su
brazo corto AB en el agua de un vaso V. Por otro lado, instaló un depósito de líquido coloreado
D, provisto de un tubo EF, también de 6 mm, terminado en una angosta boquilla cónica que
penetraba en el centro de la boca A. El suministro de este líquido se controlaba por medio de
la pinza P como indica la figura 1.1.
Figura 1.1: Sifón utilizado por Reynolds. Imagen adaptada de [10]
Luego de dejar todo el sistema lleno de agua durante varias horas, para asegurarse que
José Enrique Cabañas Ceballos
7
1.2. EL EXPERIMENTO DE REYNOLDS.
todo movimiento interno cesara, se abría poco a poco la pinza P. El líquido coloreado salía de
la boquilla F, primero adquiriendo la forma de la llama de una vela, luego alargándose, hasta
volverse un filamento muy delgado que al desagüar por la apertura de la válvula C se extendía
por todo el sifón. A la válvula C se le daban aperturas siempre mayores, para que aumentara la
velocidad del agua en el sifón, y al mismo tiempo se incrementaba el suministro de colorante,
a fin de que el filamento se mantuviera visible. Contrariamente a lo previsto, con la máxima
abertura de la válvula, este último se mantenía todavía perfectamente claro y estable a lo largo
de todo el tubo, sin el menor asomo de perturbaciones en la corriente. Se prolongó el brazo BC
hasta casi tocar el suelo para aumentar aun más la velocidad pero el filamento no se alteraba
en lo más mínimo.
Evidentemente el diámetro de 6 milímetros era demasiado reducido por lo que el flujo
no pasaba de régimen laminar a turbulento. Entonces Reynolds decidió usar un tubo de 25,4
milímetros (una pulgada). Pero hacer un sifón de vidrio de este diámetro no era fácil y se
le ocurrió una solución mucho más simple, ver figura 1.2. Ésta moficicación se insertó en la
instalación de la figura 1.3.
Figura 1.2: Modificación del sifón utilizado por Reynolds. Imagen adaptada de [10]
José Enrique Cabañas Ceballos
8
1.2. EL EXPERIMENTO DE REYNOLDS.
Figura 1.3: Esquema de la instalación utilizada por Reynolds. Imagen adaptada de [8]
José Enrique Cabañas Ceballos
9
1.2. EL EXPERIMENTO DE REYNOLDS.
El tanque V, de 1,80 metros de largo, medio de ancho y otro tanto de profundidad, se ve
levantado 2 metros por encima del suelo, con el fín de alargar considerablemente el brazo
vertical de la tubería de hierro que prolongaba, al otro lado de la pared del tanque, el tubo de
vidrio AB donde se realizaba el experimento.
Para realizar el experimento, tras asegurarse de que el agua en el tanque V estuviese en
reposo se permitió al tinte fluir muy despacio, y se abrió un poco la válvula C. El filamento
coloreado se estableció como antes, fig. 1.4.a, y permaneció muy estable al crecer la velocidad
hasta que de repente con una leve apertura de la válvula, en un punto situado más o menos
medio metro antes del tubo de hierro, el filamento se expandió y se mezcló con el agua, hasta
llenar el resto del conducto con una nube coloreada, que a primera vista parecía como un tinte
uniforme, fig 1.4.b. Un examen más cuidadoso reveló la naturaleza de esa nube: moviendo el
ojo siguiendo el avance de la corriente, la expansión del filamento coloreado se vió conformada
por un movimiento ondulatorio bien definido, fig. 1.4.c. Al cerrar la válvula de nuevo los
remolinos desaparecieron y el filamento se reconstituyó.
Figura 1.4: Evolución del flujo. Imagen adaptada de [8]
Por lo tanto se produjeron en un mismo tubo los dos regímenes, laminar y turbulento, con
sólo variar la velocidad. Pero el mismo resultado debía obtenerse al calentar el agua, y así
reducir su viscosidad. El cuarto donde se realizaban los experimentos estaba a una temperatura de 8.3◦ C, y ésta era también la temperatura del agua. Con un chorro de vapor Reynolds
consiguió elevarla a 21◦ C, reduciendo 1.39 veces la viscosidad. Aumentando poco a poco la
José Enrique Cabañas Ceballos
10
1.3. MÉTODOS Y ECUACIONES DEL MOVIMIENTO...
velocidad, determinó en ambos casos el valor crítico con el cual empezaba a transformarse
el movimiento laminar y encontró que en el segundo caso la velocidad crítica era 1.45 veces
menor que en el primero.
Aunque esta concordancia fuera aceptable, Reynolds pensó que en el tanque calentado se
habían manifestado algunas perturbaciones adicionales debido tanto a la diferencia de temperatura entre el tanque y el medio ambiente como al gradiente de temperaturas en el tanque
mismo. Reynolds también enfrió el agua hasta su máxima densidad, 4◦ C, agregándole hielo.
Comprobó que en todos los casos existe una velocidad crítica y que varía en proporción directa
con la viscosidad del flujo. Por otro lado, ensayos realizados con otros dos tubos, de distinto
diámetro, permitieron concluir que la velocidad crítica mencionada es inversamente proporcional al diámetro del tubo, confirmando así que el flujo laminar se empieza a alterar en un
valor definido por el parámetro ρU L/µ.
Estos ensayos, realizados con sumo cuidado en muchísimas condiciones distintas, le permitieron confirmar que su previsión era correcta; aun cuando llego a la conclusión de que, para
flujo turbulento, la resistencia que el conducto ofrece al avance de la corriente no es proporcional al cuadrado de la velocidad, si no a una potencia de exponente 1,72.
1.3.
Métodos y ecuaciones del movimiento de un fluido en
una tubería de sección circular.
En este apartado se van a comentar los modelos estudiados y empleados en este proyecto.
Dichos modelos son relaciones experimentales de las distintas variables en el transporte de
fluidos en una tubería, de forma que se relaciona el número de Reynolds con la longitud,
diámetro interno y rugosidad de la tubería y el factor de frición. Estas variables toman la
forma de la ecuacion de Darcy-Weisbach [9]:
José Enrique Cabañas Ceballos
11
1.3. MÉTODOS Y ECUACIONES DEL MOVIMIENTO...
hf =
L · f · v2
2·D·g
(1.2)
Donde hf es la pérdida de carga, L es la longitud de la tubería en metros, f es el factor de
fricción, v es la velocidad del fluido, D el diámetro interno de la tubería y por último g es la
aceleración de la gravedad. Esta ecuación relaciona las magnitudes del transporte del fluido a
través de la tubería con la pérdida de carga. Hay que destacar que dicha pérdida de carga tiene
dimensiones de longitud y se calcula en metros si se utiliza el Sistema Internacional. Luego tan
sólo es necesario hallar una forma del factor de frición para poder hallar la pérdida de carga.
Para ello se emplean diversos modelos que se especifican a continuación.
1.3.1.
Ecuación de Blasius.
Blasius en 1911 propone una expresión en la que el factor de fricción viene dado sólo como
una función del número de Reynolds [1]. Dicha expresión es válida para tubos lisos, en los que
la rugosidad relativa r , (la relación entre el diámetro y la rugosidad media del tubo) no afecta
al flujo al tapar la subcapa laminar las irregularidades de la tubería.
Se puede expresar de la siguiente manera:
f = 0,3164 · Re−0,25 ,
(1.3)
y como se puede observar es un modelo muy simplificado en el que el factor de fricción
sólo depende del número de Reynolds.
José Enrique Cabañas Ceballos
12
1.3. MÉTODOS Y ECUACIONES DEL MOVIMIENTO...
1.3.2.
Ecuación para régimen laminar.
Esta ecuación es la más sencilla de todas y la única que se puede deducir de forma analítica,
pero sólo es válida en régimen laminar, es decir, con números de Reynolds por debajo de 4000,
si el sistema hidráulico es una tubería de sección circular. Se escribe como:
f=
1.3.3.
64
.
Re
(1.4)
Ecuación de Colebrook-White.
Esta ecuación es una de las más precisas para el cálculo del factor de fricción y en un
rango más amplio, pero tiene la desventaja de su complejidad al ser una función implícita.
Debe resolverse de forma iterativa hasta alcanzar una cota de error aceptable, con el coste
computacional y tiempo que ello conlleva. Fue propuesta por Colebrook y White en 1939 [2]
y es la más utilizada por ser la más precisa y universal.
Dicha fórmula es:
1
√ = −2,0 log10
f
1.3.4.
r
2,5226
√ .
+
3,7065 Re f
(1.5)
Ecuación de Prandtl.
La ecuación de Prandtl es más sencilla que la anterior, pero a costa de disminuir su rango de
validez al eliminar su dependencia con la rugosidad relativa. Fue propuesto en 1930, ampliando
el rango de validez del modelo de Blausius [3]. Su forma es la siguiente:
José Enrique Cabañas Ceballos
13
1.3. MÉTODOS Y ECUACIONES DEL MOVIMIENTO...
1
√ = 2,0 log10
f
1.3.5.
√ Re f
.
2, 51
(1.6)
Ecuación de von Karman-Nikuradse.
Este modelo es aun más sencillo, ya que como se puede observar no depende del número
de Reynolds, sólo de la rugosidad relativa de la tubería. Fue propuesto en 1933 para poder
utilizar una expresión similar a la ecuación de Prandtl con tuberías rugosas [3]. y su forma es:
1
√ = −2,0 log10
f
1.3.6.
r
.
3, 71
(1.7)
Diagrama de Moody.
Todas las expresiones y ecuaciones anteriores presentan inconvenientes que hacen gravoso
su uso, incluso con los avances en computacion y cálculo actuales. En 1944 el ingeniero
norteamericano Lewis F. Moody trató de solventar este problema con la búsqueda experimental de un diagrama en el que el factor de fricción se viera reflejado en función tanto del
número de Reynolds como de la rugosidad relativa de la tubería [4]. El diagrama obtenido,
llamado Diagrama de Moody en su nombre, fig. 1.5, permanece en uso actualmente. Habitualmente se emplea el Diagrama de Moody para obtener una solución inicial, que aunque no
es lo suficientemente precisa para utilizarla como solución final, es válida para poder realizar
iteraciones con la ecuacion de Colebrook-White y llegar rápidamente a la solución final con la
precisión requerida.
José Enrique Cabañas Ceballos
14
1.3. MÉTODOS Y ECUACIONES DEL MOVIMIENTO...
Figura 1.5: Diagrama de Moody. Imagen adaptada de [7]
1.3.7.
Ecuación Explícita.
Esta ecuación es uno de los métodos más sencillos para solucionar la dependencia de la
pérdida de carga con la rugosidad y el número de Reynolds. Su origen está en realizar una
aproximación numerica del diagrama de Moody, que es válida en un rango muy amplio de
números de Reynolds gracias a la gran cantidad de términos empleados. Los detalles del procedimiento están detallados en [5] y su expresión es la siguiente:
r
1
√ = −2,0 log10
−
3,7065
f
0,9924 0,9345 5,0272
r
4,567
r
5,3326
−
log10
−
log10
−
,
Re
3,827
Re
7,7918
208,815 + Re
(1.8)
donde Re es el número de Reynolds y r es la rugosidad relativa de la tubería como en
José Enrique Cabañas Ceballos
15
1.3. MÉTODOS Y ECUACIONES DEL MOVIMIENTO...
casos anteriores. Como se puede observar a pesar de ser una ecuación explícita lo que facilita
su resolución de una forma clara , sigue resultando una ecuación muy compleja.
1.3.8.
Ecuación de Churchill.
Este modelo fue propuesto por S. W. Churchill en 1977 [6]. Este modelo abarca tanto el
régimen turbulento como el laminar pero requiere una capacidad de cálculo muy importante,
por lo que es complicado conseguir la precisión necesaria en los cálculos implementándolo
en un programa de cálculo convencional ya que se cometen errores de redondeo y truncado,
aportando estas soluciones con un error superior al 50 % por lo que la solución obtenida no
es válida. Sin embargo utilizando un programa de cálculo avanzado como Matlab, se obtienen
resultados precisos.
Su fórmula es la siguiente:
12
1/12
8
1
f =8
+
,
Re
(A + B)1,5
(1.9)
donde A y B toman la forma:
A = 2,457 log
1
7 0,9
( Re ) + 0,27r
16
37530
B=
Re
16
,
(1.10)
Como se aprecia cláramente este metodo presenta importantes problemas de cálculo debido
a los redondeos ya que opera con valores muy próximos a cero. En el cálculo del factor de
frición trabaja con valores del orden de (1 · 10−4 )12 o lo que es lo mismo 1 · 10−48 . Debido a
esta dificultad de operación, no se ha podido implementar en el programa informático, aunque
se ha estudiado el método mediante el programa Matlab, y se han observado resultados muy
similares al modelo de Colebrook para el régimen turbulento. En el régimen laminar no se
José Enrique Cabañas Ceballos
16
1.3. MÉTODOS Y ECUACIONES DEL MOVIMIENTO...
han obtenido resultados concluyentes, debido a que no se han podido conseguir resultados
experimentales en esta zona por limitaciones en la instalación experimental.
José Enrique Cabañas Ceballos
17
CAPÍTULO 2. PROCEDIMIENTO EXPERIMENTAL
Capítulo 2
PROCEDIMIENTO EXPERIMENTAL
En este capítulo se describe la instalación experimental y el procedimiento para la toma
de medidas necesarias para la evaluación experimental de la expresiones previamente presentadas. La instalación experimental se describe en primer lugar, y después de definir los
principales puntos del método para la adquisición y toma de datos, el capítulo finaliza con las
expresiones empleadas en el cálculo del factor de fricción a partor de los datos adquiridos.
2.1.
Instalación Experimental.
La instalación experimental está compuesta por una serie de elementos que permiten la
circulación del fluido, en este caso agua, de forma controlada a través de ella. También posee
la posibilidad de medir parámetros importantes tales como el caudal y la presión relativa entre distintos puntos de la misma. Esta última es equivalente a la caida de presión debida al
rozamiento o pérdida de carga. Así la instalación posee un sistema experimental análogo al
de los experimentos de Reynolds. Esta instalación se utiliza para la realización de prácticas
de diversas asignaturas relacionadas con la mecánica de fluidos y se encuentra situada en el
laboratorio de Mecánica de Fluidos de la E.T.S.I.I. de Ciudad Real.
José Enrique Cabañas Ceballos
18
2.1. INSTALACIÓN EXPERIMENTAL.
La instalación esta compuesta por los siguientes componentes:
Depósito de agua. Tiene dos funciónes, almacenar y recoger el agua utilizada en el experimento de forma que se pueda cuantificar el caudal que atraviesa la instalación y
además evitar el derroche de agua ya que permite la recirculación.
Bomba hidráulica. Su misión es transportar el agua a través de la instalación. La absorbe
del depósito y la expulsa a través de una tubería que recorre la instalación experimental.
Válvulas. Estos componentes permiten regular el caudal que atraviesa la instalación,
llegando incluso a cortarlo si se encuentra totalmente cerrada.
Tubería. Conduce el agua desde la bomba, recorre toda la instalación pasando por las
válvulas y la retorna al depósito de nuevo.
Medidor de presión. Este componente mide la caída de presión entre dos puntos de
la tubería de manera que la medida es una presión relativa. Dicha caida de presión es
equivalente a la pérdida de carga debida al rozamiento del fluido con la tubería.
Desagüe. Su función es trasladar el agua de la tubería al depósito para poder ser reutilizada.
Su esquema es el de la figura 2.1, donde ∆P es el medidor de presión que mide la presión
relativa entre los puntos P1 y P2 separados entre sí una distancia L de 0,915 metros. B se
corresponde a la bomba hidráulica, D es el depósito de agua y por último V1 es la válvula
sobre la que se actúa para regular el caudal.
José Enrique Cabañas Ceballos
19
2.2. FUNCIONAMIENTO.
Figura 2.1: Esquema de la instalación. Imagen adaptada de [9]
2.2.
Funcionamiento.
Antes de la puesta en marcha, se deben inspeccionar algunos elementos para asegurar su
correcto funcionamiento y precisión en las medidas efectuadas:
Debemos asegurarnos de que al menos una de las válvulas esté abierta para evitar daños
a la bomba y a la instalación por sobrepresiones.
El nivel del depósito de agua debe encontrarse por encima de un nivel mínimo para
asegurar un caudal constante y evitar la entrada de aire al sistema.
Se debe medir la temperatura ambiente ya que esto afecta directamente a la viscosidad
del agua y por tanto a los resultados obtenidos.
Una vez hechas las comprobaciones y medidas anteriores podemos poner en marcha la
bomba. Es conveniente esperar unos segundos para alcanzar el régimen estacionario y a continuación se puede comenzar con la toma de medidas.
José Enrique Cabañas Ceballos
20
2.3. TOMA DE MEDIDAS.
Los parámetros que se pueden medir entre dos puntos de interés, en nuestro caso dos puntos
de una tubería separados en un metro son el caudal de agua que lleva la tubería y la presión
relativa entre esos dos puntos.
El caudal se mide símplemente mediante un nivel y cronometrando el tiempo que transcurre al cambiar dicho nivel entre diferentes marcas graduadas que se corresponden con un
volumen expresado en litros. Por tanto, el caudal se calcula como la relación entre el volumen
de líquido desplazado y el tiempo invertido por la bomba para moverlo:
Q[l/s] =
∆V
[l/s]
∆t
(2.1)
La presión relativa es medida por su relación con la altura de columna de agua, una conectada a un punto de la instalación y otra conectada a otro. Esta presión es directamente proporcional a la diferencia de alturas entre las dos columnas, por lo que será la cantidad a emplear
diréctamente como pérdida de carga sin realizar ninguna transformación posterior.
Dado que los datos de viscosidad, diámetro interno de la tubería, caudal (volumen desplazado y tiempo invertido) y pérdida de carga son datos conocidos, se pueden calcular el número
de Reynolds, el factor de fricción, la velocidad del fluido y la rugosidad efectiva analíticamente, usando las ecuaciones correspondientes que relacionan unas variables con las otras.
En el procedimiento de toma de datos, las medidas se efectuarán repetidas veces para
mejorar la precisión de las mismas y poder tener una cota estadística del error cometido.
2.3.
Toma de medidas.
Habiendo hecho las comprobaciones necesarias ponemos en funcionamiento la bomba y
esperamos el tiempo suficiente para que se estabilice el flujo, una vez que se ha alcanzado el
régimen estacionario, podemos comenzar con la toma de datos. De los datos necesarios, el
José Enrique Cabañas Ceballos
21
2.4. CÁLCULO DE LOS PARÁMETROS.
diámetro de la tubería es un parámetro conocido y de valor constante e igual a 13,6 mm. La
temperatura se puede medir fácilmente mediante un termómetro de laboratorio y también es un
parámetro invariable. En el momento de la adquisión de datos, se consideró un valor de 25o C.
La densidad del fluido, en nuestro caso agua, también se trata de un dato conocido y constante,
con un valor de 1000 kg/m3 . Debido a que la temperatura y la densidad son constantes, la
viscosidad tambien lo es y su valor es de 1,001 · 10−6 m2 /s. Con estos datos ya se puede
proceder a medir el caudal y la caída de presión en la sección de la tubería que hemos escogido
para la toma de datos experimentales. Esta toma de datos se hace de la siguiente forma: Una
vez alcanzado el régimen estacionario, se pone el cronómetro a cero e interrumpiendo el paso
del agua esperamos a que el nivel del depósito alcance la linea cero de la escala graduada.
Ponemos en marcha el cronómetro, y lo paramos cuando el nivel del depósito alcance la siguiente marca graduada de medida del volumen, así mismo anotamos la caída de presión inicial
y final. Repetiremos la toma de medidas aumentando en cada medida una línea de la escala
hasta llegar a la última linea de la escala graduada del depósito.
Con este procedimiento, obtenemos la primera serie de medidas, la cual debemos repetir
varias veces para poder hacer un análisis estadístico del error. Este procedimiento debe ser
repetido para diversas posiciones de la válvula que regula el caudal que circula por el sistema,
de forma que obtendremos medidas para distintos caudales. De esta forma se obtiene una nube
de puntos que se puede analizar para comprobar la dependencia del caudal con la perdida de
carga mediante el número de Reynolds, la viscosidad, el diámetro y la rugosidad de la tubería.
2.4.
Cálculo de los parámetros.
Como la pérdida de carga es un dato conocido porque lo hemos medido y asociado a un
caudal determinado, se puede calcular el factor de fricción empleando la ecuación de DarcyWeisbach, expresión que proviene de realizar un análisis dimensional sobre los parámetros de
los que depende la pérdida de carga [2]:
José Enrique Cabañas Ceballos
22
2.4. CÁLCULO DE LOS PARÁMETROS.
hf [m] =
f LV 2 [m3 /s2 ]
,
2Dg [m2 /s2 ]
(2.2)
donde hf es la pérdida de carga en metros, f corresponde al factor de frición que es un
parámetro adimensional, g a la aceleración de la gravedad que viene expresada en (m/s2 ), D y
L corresponden al diámetro y longitud de la tubería respectivamente expresados en metros, y
por último V es la velocidad del fluido (m/s).
Despejando el factor de frición, podemos observar su carácter adimensional y obtenerlo en
función de las medidas realizadas anteriormente
f [adimensional] =
2Dghf [m3 /s2 ]
.
LV 2 [m3 /s2 ]
(2.3)
Para calcular la rugosidad de la tubería, en este proyecto se utiliza la ecuación de ColebrookWhite:
1
√ = −2,0 log10
f
r
2,5226
√ .
+
3,7065 Re f
(2.4)
Como observamos esta ecuación es una función implícita en el factor de fricción, sin embargo se convierte en una función explícita al tener como única incógnita la rugosidad. Operando y despejando la rugosidad absoluta obtenemos:
= 3,7065 · D 10
−1
√
f
2,5226
√ ,
−
Re f
(2.5)
con la rugosidad absoluta de la tubería expresada en metros. Si se pretende calcular la
rugosidad relativa para poder emplear el diagrama de Moody y hacer comprobaciones, símplemente hay que dividir entre la longitud característica del sistema, es decir, el diámetro de la
tubería en metros también para ser dimensionalmente consistente:
José Enrique Cabañas Ceballos
23
2.4. CÁLCULO DE LOS PARÁMETROS.
r [adimensional] =
[m]
.
D [m]
(2.6)
Por lo que calculado directamente se obtiene:
−1
2,5226
√
√ .
r =
= 3,7065 10 f −
D
Re f
José Enrique Cabañas Ceballos
(2.7)
24
CAPÍTULO 3. RESULTADOS
Capítulo 3
RESULTADOS
En este capítulo se presentan los resultados obtenidos mediando el método descrito en
el capítulo anterior y se realiza una comprobación entre ellos y el diagrama de Moody, concluyendo que los datos se ajustan de manera precisa al diagrama, por lo tanto se puede comparar el resultado obtenido experimentalmente con las diversas ecuaciones presentadas para
poder apreciar cuál se ajusta mejor a la realidad, lo que se realiza en la última sección del
capítulo.
3.1.
Comparación entre los resultados experimentales y el
diagrama de Moody.
Una vez realizados los experimentos se ha procedido a su tratamiento estadístico, donde
se calculan la media y el error cuadrático medio, obteniendo los resultados presentados en la
tabla 3.1.
José Enrique Cabañas Ceballos
25
3.1. COMPARACIÓN ENTRE LOS RESULTADOS...
Los parámetros de la instalación y el líquido empleado son los siguientes, como ya se había
comentado en el capítulo anterior:
Agua: Viscosidad = 1.001·10−6 m2 /s
Diámetro interno de la tubería = 13,6 mm
Longitud de la tubería = 915 mm
Una vez que se ha calculado tanto el factor de frición como el número de Reynolds, se
puede proceder a su representación gráfica para su mejor comprensión y poder compararlos
con el diagrama de Moody que debe predecir los resultados obtenidos. Los datos obtenidos
con la instalación experimental del laboratorio cubren un reducido rango experimental, fig.
3.1, por lo que sólo se consigue analizar una pequeña parte del diagrama de Moody; ésta línea
roja representa los puntos experimentales en la figura 3.2.
Caudal
Pérdida Velocidad
medio
de carga
(l/s)
(mm)
0,300 ± 0,003
380 ± 2
2,07
28.266
0,0257
0,0008
0,283 ± 0,001
340 ± 2
1,95
26.521
0,0262
0,0008
0,263 ± 0,001
300 ± 2
1,81
24.627
0,0268
0,0010
0,220 ± 0,002
220 ± 2
1,52
20.697
0,0279
0,0010
0,165 ± 0,001
130 ± 2
1,13
15.434
0,0297
0,0012
0,114 ± 0,001
68 ± 3
0,78
10.711
0,0320
0,0011
0,097 ± 0,001
50 ± 2
0,66
9.088
0,0333
0,0012
0,090 ± 0,001
44 ± 2
0,62
8.437
0,0334
0,0008
(m/s)
Número
de
Factor Rugosidad
de
relativa
Reynolds frición
Tabla 3.1: Resultados experimentales
Podemos observar como la instalación experimental del laboratorio tiene unas posibilidades muy reducidas de acción y sólo se consigue analizar una pequeña parte del diagrama de
José Enrique Cabañas Ceballos
26
3.1. COMPARACIÓN ENTRE LOS RESULTADOS...
Figura 3.1: Factor de fricción obtenido experimentalmente frente a número de Reynolds.
José Enrique Cabañas Ceballos
27
3.1. COMPARACIÓN ENTRE LOS RESULTADOS...
Moody, realzada por el rectángulo rojo de la figura 3.2.
Figura 3.2: Zona estudiada del diagrama de Moody.
Se observa cláramente cómo los datos experimentales y los predichos por el diagrama de
Moody se corresponden con una diferencia muy reducida, del orden del 10 %. Así podemos
afirmar que la rugosidad relativa de la tubería posee un límite superior de 0.001 puesto que
estos son los datos que se corresponden con el diagrama de Moody, y su correspondecia con
la rugosidad absoluta se calcula fácilmente ya que el diámetro de la tubería es un parámetro
conocido. La rugosidad absoluta obtenida es 0,013 ± 0,002 mm. Además se puede ver cómo la
rugosidad se mantiene constante dentro del margen de error, ver fig. 3.3, excepto para números
de Reynolds bajos, donde se aprecia un pico en la gráfica. Este resultado es lógico ya que nos
encontramos en la zona de transición entre los regímenes laminar y turbulento, región para la
cual los datos experimentales no son concluyentes debido a la alta dispersión de los mismos y
a la dificultad de hallar puntos en esta región de transición.
José Enrique Cabañas Ceballos
28
3.1. COMPARACIÓN ENTRE LOS RESULTADOS...
Figura 3.3: Rugosidad relativa obtenida experimentalmente frente al número de Reynolds utilizando el modelo de Colebrook.
José Enrique Cabañas Ceballos
29
3.2. DISCUSIÓN DE LAS DIVERSAS ECUACIONES...
3.2.
Discusión de las diversas ecuaciones presentadas y su
validez.
En esta sección se compararán gráficamente los distintos modelos mencionados anteriormente con los resultados experimentales para poder comprobar el rango de validez de dichos
modelos.
En la figura 3.4 se grafica el factor de fricción frente al número de Reynolds para distintas
rugosidades. Como se puede apreciar, a medida que el número de Reynolds aumenta el factor
de fricción disminuye. Esto sucede hasta un valor a partir del cual se mantiene constante, cuando el flujo está totalmente dominado por la rugosidad. Además se observa como a medida que
hacemos que la tubería sea más lisa, es decir menos rugosa, el factor de fricción se convierte
en un valor constante para un número de Reynolds cada vez mayor. Así, siguiendo una de las
curvas del factor de fricción, para bajos números de Reynolds, el factor de fricción es elevado, y a medida que aumenta la turbulencia, es decir el número de Reynolds se incrementa, el
factor de fricción disminuye hasta alcanzar un valor constante e independiente del número de
Reynolds.
Y este factor de frición constante depende de la rugosidad de la tubería como ya se había
dicho, ya que para rugosidades altas, es más grande y se alcanza a números de Reynolds más
bajos.
3.2.1.
Tubería lisa.
En una tubería lisa, el flujo necesita un número de Reynolds muy alto para desarrollar
completamente la turbulencia, fig. 3.5. Analizando los distintos modelos, se ve que la ecuación
de Von Karman-Nikuradse no es válida en este caso ya que sólo se puede aplicar para el flujo
turbulento totalmente desarrollado, donde el factor de fricción es independiente del número de
Reynolds, situación muy difícil de alcanzar en una tubería lisa.
José Enrique Cabañas Ceballos
30
3.2. DISCUSIÓN DE LAS DIVERSAS ECUACIONES...
Figura 3.4: Dependencia del factor de fricción con la rugosidad
José Enrique Cabañas Ceballos
31
3.2. DISCUSIÓN DE LAS DIVERSAS ECUACIONES...
Por otro lado, tanto las ecuaciones explícita,como las de Colebrook y Prandtl sí modelizan
con precisión el factor de fricción en estas condiciones. Comparando la expresión del régimen
laminar con el resto de modelos, se observan discrepancias significativas. Esto es debido a que
este modelo es específico para régimen laminar, mientras que los otros son más generales lo
que en estas condiciones de flujo les lleva a cometer errores importantes debido a la dificultad
de integrar en un único modelo el amplio rango de números de Reynolds deseado.
Figura 3.5: Factor de fricción para tubería lisa. Rugosidad relativa 1 · 10−8
3.2.2.
Rugosidad relativa de 1 · 10−5 .
En este caso nos encontramos con una rugosidad muy pequeña, para la cual el flujo turbulento se desarrolla completamente a partir de un número de Reynolds en torno a 106 . A partir
de este punto el factor de fricción es independiente del número de Reynols, fig. 3.6. Por otro
lado se observa como los modelos de Prandtl, Colebrook y el explícito son coincidentes y una
José Enrique Cabañas Ceballos
32
3.2. DISCUSIÓN DE LAS DIVERSAS ECUACIONES...
vez desarrollado completamente el flujo turbulento, estos modelos tienden asintóticamente al
modelo de von Karman-Nikuradse. A partir del mismo número de Reynolds en el que el flujo
turbulento está completamente desarrollado, el modelo de Prandtl deja de ser válido debido a
que no depende del número de Reynolds ni de la rugosidad de la tubería.
Figura 3.6: Factor de fricción con una rugosidad relativa de 1 · 10−5
3.2.3.
Rugosidad relativa de 1 · 10−3 .
La rugosidad sigue tomando importancia a medida que aumenta, lo cual pone a prueba
la validez de los modelos. El modelo de Prandtl sólo es válido en la zona laminar, mientras
que el de von Karman-Nikuradse se puede emplear en la zona turbulenta una vez que se ha
desarrollado completamente el flujo. Por otro lado podemos decir que los modelos de Colebrook y el Explícito tienden asintóticamente por los extremos a los modelos de Prandtl y von
Karman-Nikuradse, como indica la figura 3.7.
José Enrique Cabañas Ceballos
33
3.2. DISCUSIÓN DE LAS DIVERSAS ECUACIONES...
Figura 3.7: Factor de fricción con una rugosidad relativa de 1 · 10−3
José Enrique Cabañas Ceballos
34
3.2. DISCUSIÓN DE LAS DIVERSAS ECUACIONES...
3.2.4.
Rugosidad relativa de 0,01.
En este caso la rugosidad representa un orden de magnitud de un 1 % del diámetro de
la tubería. El modelo de Prandtl se puede descartar ya que no es válido con la excepcion de
números de Reynolds realmente pequeños por debajo de 300, fig. 3.8, los cuales son complicados de conseguir en las condiciones habituales en el transporte de fluidos. El resto de modelos
son coincidentes una vez que se ha desarrollado completamente el flujo, en torno a un número
de Reynolds de 5 · 104 .
Figura 3.8: Factor de fricción con una rugosidad relativa de 0,01
3.2.5.
Rugosidad relativa de 0,05.
En este caso la rugosidad es macroscópica, apreciable a simple vista. El régimen turbulento
se desarrolla completamente para valores de número de Reynolds muy bajos, del orden de 104 .
José Enrique Cabañas Ceballos
35
3.2. DISCUSIÓN DE LAS DIVERSAS ECUACIONES...
El modelo de Prandtl no es válido ya que fue pensado para tuberías lisas y la rugosidad es un
parámetro con gran importancia en este caso, ver fig. 3.9. El modelo de von Karman-Nikuradse
toma validez una vez desarrollada la turbulencia, como siempre, tendiendo asintóticamente a
éste último tanto el modelo Explícito como el de Colebrook.
Figura 3.9: Factor de fricción si la rugosidad relativa es de 0,05
3.2.6.
Rugosidad relativa de 1.
Este es un caso hipotético en el cual la rugosidad es del mismo orden de magnitud que el
diámetro de la tubería y se aprecia cláramente como el modelo de Prandtl no es válido. Sin
embargo, el de von Karman-Nikuradse tiende asintóticamente desde un principio al de Colebrook y al Explícito, fig. 3.10. Al aumentar la rugosidad el régimen turbulento se desarrolla
completamente para números de Reynolds muy bajos, del orden de 103 .
José Enrique Cabañas Ceballos
36
3.2. DISCUSIÓN DE LAS DIVERSAS ECUACIONES...
Figura 3.10: Factor de fricción con rugosidad relativa de 1
José Enrique Cabañas Ceballos
37
3.3. EXPLICACIÓN DEL PROGRAMA.
3.3.
Explicación del programa.
El programa informático se ha desarrollado a partir de las necesidades demandadas: interface visual, sencillez de manejo, empleo de bases de datos con las características de los
fluidos y materiales de las tuberías, flexibilidad al operar con los datos, presentación de resultados claros, empleo de distintos modelos de transporte de fluidos y comparación entre los
resultados.
Lo primero que se programó fue la forma de resolver un sistema de ecuaciones capaz de
proporcionar los valores de los parámetros de la instalación de forma que sean cuales quiera
tanto los datos conocidos como las incognitas, con la excepción de la rugosidad que debe
ser un parámetro conocido puesto que la única forma de calcularla es resolver el modelo de
Colebrook teniendo como única incógnita la rugosidad una vez conocidos todos los datos y
calculada la pérdida de carga y el factor de frición.
Por otro lado, se buscó dotar al programa de flexibilidad puesto que aunque existe una base
de datos de la cual se leen los datos de viscosidad de diferentes fluidos y las rugosidades de
los distintos materiales en las tuberías, es posible emplear otros parámetros. La flexibilidad
también se hace notable al poder elegir cualquier combinación de variables para ser incógnitas
o parámetros conocidos para calcular los restantes. Por este motivo es necesario desplegar un
árbol de variables para tener en cuenta todas las combinaciones posibles y posteriormente,
mediante una serie de if anidados se programa su resolución en función de las incógnitas y los
parámetros conocidos. Cómo es lógico, algunas combinaciones de variables no son posibles,
por lo que el programa advertirá este hecho enviando mensajes de error tales como «datos
insuficientes» o «sistema incompatible».
Los resultados del factor de fricción se redondean a 6 cifras significativas con el objetivo de
ser más manejables. Así mismo se presentan los resultados de cada modelo por separado para
poder compararlos y posteriormente se elabora una media ponderada de ellos para presentar
un factor de frición medio. La pérdida de carga se calcula mediante la ecuación de DarcyWeisbach empleando este factor de fricción medio.
José Enrique Cabañas Ceballos
38
3.4. CÁLCULOS MEDIANTE MATLAB.
El programa se ha escrito en Java y su código se presenta en el Anexo B. Del mismo modo
se ha elaborado un manual de usuario presentado en el Anexo A.
3.4.
Cálculos mediante Matlab.
Los cálculos del factor de fricción con diversas rugosidades y los cálculos estadísticos
presentados en las secciones precedentes se han realizado con el programa Matlab y estan
presentados en el Anexo C.
Una vez obtenidos los datos experimentales se analizan estadísticamente, calculando la
media, el error cuadrático medio y la desviación típica para otener una dispersión del error de
las medidas. A su vez se calculan el resto de parámetros y se representan gráficamente para
su mejor compresión y análisis. De esta forma se puede representar el factor de fricción y la
rugosidad frente al número de Reynolds y comparar los resultados con el diagrama de Moody.
Por otro lado, se representan gráficamente los distintos modelos que explican el comportamiento del transporte de fluidos a lo largo de una tubería y se analiza lo que ocurre variando
el número de Reynolds y la rugosidad de forma independiente, es decir se obtienen curvas de
nivel de estas funciones. De esta forma se puede analizar el comportamiento del fluido manteniendo todas las variables de las que depende el transporte a lo largo de la tubería constantes
y variando sólo una, la variable objeto de estudio. Esto se realiza de dos formas, mediante la
representación gráfica de todos los modelos frente al número de Reynolds para una misma rugosidad y analizando un método en todo el rango de números de Reynolds, pero representando
gráficamente distintas rugosidades, como ya se ha hecho en párrafos anteriores.
José Enrique Cabañas Ceballos
39
CAPÍTULO 4. CONCLUSIONES
Capítulo 4
CONCLUSIONES
El transporte de fluidos hasta el siglo XIX era un procedimiento totalmente artesanal. Se
sabía de la existencia de turbulencias, pérdidas de carga, etc, pero no se conocían sus causas
ni la forma de cuantificarlas, por lo que había que recurrir a la experiencia y utilizar amplios
márgenes de seguridad en las instalaciones hidráulicas.
Los experimentos de Reynolds, Prandtl, Colebrook, White y muchos otros, esclarecieron
la compleja naturaleza de estos fenómenos. A pesar de haber conseguido desarrollar unos
modelos que predicen el comportamiento del fluido bajo diversas condiciones de flujo para
poder aplicarlos, hay que tener en cuenta la variabilidad de las medidas, y que estos modelos
no dejan de ser aproximaciones a la compleja realidad de comportamiento de los fluidos en el
transporte, por tanto cometen un error alrededor del 20 % en muchas ocaciones.
Los modelos estudiados aproximan el comportamiendo del fluido, de forma que el factor de fricción disminuye a medida que aumenta el número de Reynolds, hasta alcanzar un
valor constante e independiente del número de Reynolds un vez desarrollado completamente
el régimen turbulento. Además, este valor de número de Reynolds a partir del cual el factor
de fricción permanece constante depende de la rugosidad de la tubería, alcanzando valores
mayores a medida que la rugosidad disminuye, es decir la tubería es más lisa. Todo esto se
José Enrique Cabañas Ceballos
40
ha graficado para poder comparar visualmente dichos modelos y comprobar el rango de aplicación de los mismos. Además se han ajustado a la misma escala que el diagrama de Moody
para tomarlo como referencia.
Los experimentos realizados en el laboratorio se corresponden con estos modelos y su
precisión. Y, a pesar de intentar mantener todo invariable y esperar el tiempo necesario para
alcanzar el régimen estacionario en el sistema al realizar las mediciones, se observa como
hay fluctuaciones en los parámetros del sistema. El caudal proporcionado por la bomba oscila
debido a oscilaciones en la red eléctrica y a que estamos utilizando un depósito de agua de
pequeñas dimensiones, por lo cual a medida que la bomba extrae agua del sistema, la presión
a la entrada de la bomba disminuye.
En la modelización de la tubería se ha utilizado como hipótesis que su rugosidad es contínua, aleatoria y estable, pero se conoce la existencia de cal y otras sustancias que se adhieren
a las paredes de la misma añadiendo rugosidad al sistema que no cumplen estas condiciones.
La temperatura tampoco es un factor que permanece constante ya que a medida que la bomba
trabaja, hay rozamiento y por tanto se genera calor, el cual es absorbido por el agua aumentando su temperatura. Esta variación afecta la densidad y viscosidad del fluido. Las medidas a
su vez tienen una variabilidad intrínseca al ser observadas en escalas graduadas con pequeñas
oscilaciones y por tanto están sujetas al error cometido por el observador. Pero a pesar de todas
las fuentes de error y variación en los parámetros medidos, con los resultados obtenidos y una
vez tratados estadísticamente, al compararlos con el diagrama de Moody, la referencia en este
proyecto, se comete un error por debajo del 10 %.
Una vez analizados los modelos, y comparados con los resultados experimentales, se procede a la elaboración del programa informático. En él se ponderan los resultados de dichos
modelos en función de su rango de aplicación, de tal forma que se obtenga el mejor resultado
posible. En este proceso se llega incluso a desechar puntualmente alguno de los modelos a
la hora de calcular los parámetros si fuera necesario por encontrarse fuera del rango de aplicación con las variables dadas. Dicho programa, conocidos algunos datos de la instalación,
calcula el resto de los parámetros, asi como el factor de frición que predice cada modelo, el
José Enrique Cabañas Ceballos
41
factor de fricción ponderado y la perdida de carga del sistema, dando avisos en caso de errores
puntuales.
Figura 4.1: Resultados experimentales
Como se aprecia en la figura 4.1, los modelos de Colebrook y el Explícito son coincidentes
entre sí y reproducen los datos experimentales fielmente en el rango de números de Reynolds
que permite estudiar la instalacion hidraúlica del laboratorio. El modelo de Prandtl también se
ajusta a los resultados obtenidos pero comete un error mayor que los métodos anteriores, por
lo que este modelo se desecha a la hora de implementar el programa informático. El modelo
para régimen laminar se encuentra fuera de rango, por lo que no es válido y es desechado del
mismo modo y el modelo de von Karman-Nikuradse vemos que no es aplicable en este rango
de números de Reynolds, aunque se ha estudiado que tiende asintóticamente a los modelos
anteriores para números de Reynolds superiores a 107 .
El programa se ha diseñado proporcionando cierta flexibilidad a la hora de introducir los
José Enrique Cabañas Ceballos
42
datos dado que se eligen mediante una lista desplegable extraida de una base de datos. Ésta
base de datos puede modificarse fácilmente en cualquier momento mediante un programa de
edición de texto plano, véase el manual en los apéndices. Del mismo modo y a pesar de haber
seleccionado alguna de las opciones de la lista desplegable, se pueden cambiar los valores
predeterminados para obtener valores de la pérdida de carga mas adecuados.
Debido a la gran complejidad de los cálculos por ser modelos implícitos, se decidió la realización del programa informatico para aprovechar la gran capacidad de calculo de cualquier
ordenador de sobremesa convencional. Comparando la resolución de forma tradicional de estos
problemas con la resolución mediante el programa informático, se observa como se gana en
velocidad, precisión del cálculo al poder utilizar varios modelos y estar seleccionados segun
el rango de aplicación de los mismos y fiabilidad al cometer menos errores de cálculo que de
forma manual. Además es fácil representar gráficamente la solución obtenida de forma que se
pueden analizar los resultados obtenidos y encontrar los posibles errores visualmente.
José Enrique Cabañas Ceballos
43
BIBLIOGRAFÍA
Bibliografía
[1] V. L. Streeter, Mecánica de los fluidos, McGraw-Hill (2004).
[2] F. White, Mecánica de fluidos, McGraw-Hill (2001).
[3] Langelandsvik, An evaluation of the friction factor formula based on operational data.
Presentado en la conferencia PSIG 2005 (2005).
[4] L. F. Moody, Friction factor for pipe flow. Trans. Am. Soc. Mech. Engrs vol. 66, p. 671
(1944).
[5] A. Monzón, Short communication: improved explicit equations for estimation of the friction factor in rough and smooth pipes. Chemical Engineering Journal vol. 86 pp. 369-374
(2002).
[6] H. M. Hathoot, Unsteady flow through a pipe connecting tow reservoirs. Research Bulletin No. 80, Agric. Res. Center, King Saud Univ., pp. 5-25 (1999).
[7] V. T. Chow, Hidráulica de los canales abiertos, McGraw-Hill (2004).
[8] O. Reynolds, An experimental investigation of the circumstances which determine
whether the motion of water in parallel channels shall be direct or sinuous and of the law
of resistance in parallel channels. Royal Society Phil. Trans. vol. 40 is.29 pp.56 (1883).
[9] Asociación Técnica Española de Climatización y Refrigeración (ATECYR), Guía técnica de selección de equipos de transporte de fluidos, Ahorro y eficiencia energética en
climatización , IDAE (Instituto para la Diversificación y Ahorro de la Energía), vol. 10,
2010.
José Enrique Cabañas Ceballos
44
BIBLIOGRAFÍA
[10] Iñaki Carrascal Mozo. Ciencias Físicas, Vicens Vives (1988)
José Enrique Cabañas Ceballos
45
ANEXO A. MANUAL DEL PROGRAMA DE...
Anexo A
MANUAL DEL PROGRAMA DE
CÁLCULO
A.1.
Aplicaciones.
Este programa informático ha sido diseñado para calcular de forma rápida, sencilla e intuitiva el factor de fricción, la pérdida de carga y una serie de parámetros en función de unos
datos básicos de la instalación experimental, tarea que si se realizase a mano sería larga y
compleja.
A.2.
Requisitos mínimos de sistema para la instalación.
RAM: 256 Mb o superior.
PROCESADOR: 300 MHz o superior.
SISTEMA OPERATIVO: Win2000/XP/2003/Vista/7/Linux/Macintosh.
ESPACIO LIBRE EN DISCO DURO: 100 MB.
José Enrique Cabañas Ceballos
46
A.3. REQUISITOS DE SOFTWARE.
A.3.
Requisitos de Software.
Es necesario tener instalado una plataforma JDK de Java.
NetBeans IDE funciona en el kit de desarrollo de Java SE (JDK), que consta del entorno
de ejecución de Java y de herramientas para desarrolladores para la compilación, depuración
y ejecución de aplicaciones escritas en lenguaje Java.
Para instalar y ejecutar los paquetes de NetBeans, sólo se necesita los entornos de ejecución
de Java 5 ó 6.
Puede descargar JDK para la plataforma que desee desde:
http://java.sun.com/javase/downloads/index.jsp
A.4.
Instalación del programa.
Para instalar el programa, sólo es necesario descomprimir el archivo DIST.zip y ejecutar el
archivo factor_fricion.jar detro del entorno de ejecución de Java.
A.5.
Introducción de datos.
Para iniciar la aplicación, es necesario seleccionar los parámetros conocidos, y el programa
informático calculará el resto de los datos.
En el caso de conocer un dato, se debe marcar la casilla correspondiente y escribir el
valor a continuación. Si por el contrario no se conoce, símplemente hay que dejar la casilla
desmarcada. Es importante en este punto mencionar que si el dato es un número decimal, el
José Enrique Cabañas Ceballos
47
A.6. MENSAJES DE ERROR.
caracter que separa la parte entera de la decimal es un punto y NO una coma.
Hay que puntualizar que el programa SÓLO utilizará los datos cuya casilla esté seleccionada. En caso de estar desactivada, la aplicación lo considerará una incógnita a calcular aun
estando escrita.
Algunos datos como son la rugosidad del material de la tuberia, o la densidad y viscosidad
del fluido, pueden ser seleccionados de una base de datos, la cual esta integrada en la aplicación
mediante listas desplegables. Pero como se ha mencionado anteriormente aun seleccionando
el valor de la lista, es necesario marcar dicha casilla para indicar al programa que utilice ese
valor y no considere el parámetro como una incógnita a calcular.
A.6.
Mensajes de error.
Para los mensajes de error hay que tener en cuenta que el parámetro de rugosidad absoluta
es necesario conocerlo de antemano ya que de otra forma es imposible calcular el factor de
frición por ser una variable independiente.
Del mismo modo, se destaca que el resto de los parámetros se podrán calcular a partir
de cualquier combinación de estos tal que se obtenga un sistema compatible determinado, es
decir, haya el mismo numero incógnitas que ecuaciones. Por lo tanto si no proporcionamos
un sistema compatible determinado, la aplicación emitirá mensajes de error avisando de esta
situación.
Si el parámetro de la rugosidad no está seleccionado, entonces la aplicación avisa mostrando el siguiente mensaje: «necesario el dato de rugosidad». Para corregirlo simplemente hay
que seleccionar la casilla de dicho parámetro y escribir a continuación su valor si se conoce,
o elegir uno de los materiales de tuberías en la lista desplegable mencionada anteriormente.
Otro mensaje de error frecuente es el de: «datos insuficientes». Esto ocurre porque existen más
incógnitas que ecuaciones. La solución es añadir los datos que sean necesarios hasta obtener
José Enrique Cabañas Ceballos
48
A.7. USO.
un sistema compatible. También es posible encontrar el error: «sistema incompatible». Este
error sucede cuando se han seleccionado más parámetros de los necesarios, de tal forma que
hay más ecuaciones que incognitas y no es posible el cálculo debido a las incongruencias. La
solución es eliminar algun parámetro para permitir un grado más de libertad.
A.7.
Uso.
Tras introducir los datos, y pulsando al botón de «calcular», una vez corregidos los errores
mencionados anteriormente, aparecerá el mensaje: «parámetros calculados correctamente».
Este mensaje símplemente indica que hemos seleccionado adecuadamente los parámetros para
el cálculo y las operaciones se han realizado satisfactoriamente, apareciendo impresos los parámentros no conocidos, los factores de fricción según distintos métodos de cálculo y además un
factor de frición medio ponderado, asi como la pérdida de carga observada para dicho «factor
de frición medio».
A.8.
Modificación de la base de datos.
La base de datos de la aplicación recoge valores tanto de la rugosidad absoluta de distintos
materiales de tuberias, como de viscosidad y densidad de algunos fluidos típicos de trabajo.
Estas bases de datos están escritas con una codificacion ASCII, extensión .txt y su estructura es la siguiente:
materiales:
material1;rugosidad1;material2;rugosidad2; etc
José Enrique Cabañas Ceballos
49
A.9. EJEMPLO PRÁCTICO DE USO DE LA...
fluidos:
fluido1;densidad1;viscosidad1;fluido2;densidad2;viscosidad2; etc
De tal forma que si se quiere añadir un nuevo material o fluido, simplemente hay que
abrir el archivo .txt correspondiente y escribir a continuación de los datos existentes el nombre
del material o fluido nuevo seguido de un ; y el valor del campo correspondiente acabado en
; siguiendo la estructura anteriormente descrita, sin espacios en blancos ni saltos de linea y
siempre usando las unidades del sistema internacional tal como indica la primera línea del
código.
A.9.
Ejemplo práctico de uso de la aplicación.
Para que la demostración sea lo más completa posible, supondremos los siguientes datos:
Diámetro de la tuberia = 50 mm
Número de Reynolds = 50.000
Fluido es agua
Si se probase a calcular, aparecerá el error «dato de rugosidad necesario». La forma de
corregirlo es sencilla, se va a resolver en este caso, marcando la casilla que pone «rugosidad».
A continuación se procede a escribir su valor.
Rugosidad = 0.046 mm
Una vez solucionado este error, si se intenta calcular de nuevo, aparecerá el mensaje «datos
insuficientes». Esto es debido a que aun no hemos introducido los datos necesarios. En esta
José Enrique Cabañas Ceballos
50
A.9. EJEMPLO PRÁCTICO DE USO DE LA...
ocasión, añadiremos la viscosidad, seleccionandola de la base de datos, la cual se maneja
mediante una lista desplegable en la parte superior de la ventana de la aplicación tal como
indica la figura A.1.
Figura A.1: Ejemplo de uso de la base de datos si el fluido es agua.
Como se mencionó anteriormente, aunque hayamos seleccionado el valor, es necesario
marcar la casilla correspondiente para que la aplicación lo tenga en cuenta a la hora de calcular.
Llegados a este punto, vemos que se han calculado los valores del caudal de aproximadamente 2 litros por segundo, la velocidad del flujo de 1 metro por segundo, además se han
obtenido los factores de fricción y por último la pérdida de carga por metro de tubería de
0.0238 y 0.024 respectivamente como indica la figura A.2.
En estas condiciones de flujo la pérdida de carga no es significativa, sin embargo simplemente cambiando el fluido por aceite SAE 30, cuya viscosidad es mucho mayor, el valor de la
pérdida de carga es 1.890 metros por metro de tubería ya que es necesario un caudal de 547
litros por segundo en una tubería de tan sólo 50 mm de diámetro.
José Enrique Cabañas Ceballos
51
A.9. EJEMPLO PRÁCTICO DE USO DE LA...
Figura A.2: Ejemplo de resultados obtenidos
José Enrique Cabañas Ceballos
52
ANEXO B. CÓDIGO DEL PROGRAMA...
Anexo B
CÓDIGO DEL PROGRAMA
INFORMÁTICO
En este apartado se presenta el código fuente de la aplicación informática desarrollada para
el cálculo del factor de fricción, la pérdida de carga y las variables de la instalación hidráulica.
El capítulo está dividido en varias secciones, donde cada una se corresponde con el fichero
.java necesario para la aplicación.
B.1.
Cálculos
Esta sección se corresponde con el archivo del mismo nombre: calculos.java.
1
package factor_friccion;
2
/** Metodos que realizan las operaciones necesarias para gestionar
los datos
3
* de las propiedades del flujo y devuelve como resultado el factor
de friccion
4
*/
José Enrique Cabañas Ceballos
53
B.1. CÁLCULOS
5
public class calculos {
6
private String nombre;
7
private double densidad; /* km/m3 */
8
private double viscosidad; /* m2/s */
9
public calculos(String nom){
this.nombre = nom;
10
11
}
12
public calculos(String nom, double densidad, double viscosidad){
13
this.nombre = nom;
14
this.densidad = densidad;
15
this.viscosidad = viscosidad;
16
}
17
public String getNombre(){
return this.nombre;
18
19
}
20
public void setNombre(String nombre){
this.nombre = nombre;
21
22
}
23
public double getDensidad(){
return this.densidad;
24
25
}
26
public void setDensidad(double den){
this.densidad = den;
27
28
}
29
public double getViscosidad(){
return this.viscosidad;
30
31
}
32
public void setViscosidad(double vis){
this.viscosidad = vis;
33
34
}
35
public static double getVelocidad (double q, double D){
36
double A=3.1415926*D*D*(1e-6)/4;
José Enrique Cabañas Ceballos
54
B.1. CÁLCULOS
37
double vel=q/A;
38
return vel;
39
}
40
public static double getReynolds(double L, double vel, double
vis) {
41
double Re=L*(1e-3)*vel/vis;
42
return Re;
43
}
44
public static double getViscosidad(double Re, double D, double
vel) {
45
double vis=vel*D*1e-3/Re;
46
return vis;
47
}
48
public static double getCaudal(double D,double vel){
49
double A=3.1415926*D*D*(1e-6)/4;
50
double q=vel*A;
51
return q;
52
}
53
public static double getVel(double Re,double D,double vis){
54
double vel=Re*vis/(D*1e-3);
55
return vel;
56
}
57
public static double getD(double Re,double vis,double vel){
58
double D=Re*vis*1000/vel;
59
return D;
60
}
61
public static double getD1(double Re,double vis,double q){
62
double D=4000*q/(3.1415926*Re*vis);
63
return D;
64
}
65
public static double getD(double q,double vel){
66
double A=q/vel;
José Enrique Cabañas Ceballos
55
B.1. CÁLCULOS
67
double Dm=2*Math.sqrt(A/3.1415926);
68
double D=Dm*1e3;
69
return D;
70
}
public static double getMedia(double a,double b,double c,double
71
Re,double e){
72
double media = 0;
73
if (e>0.00001){
media=(a+b)/2;
74
75
}
76
else{
media= (a+b+c)/3;
77
78
}
79
return media;
80
}
81
//Metodo que resuelve la ecuacion de Colebrook del factor de
friccion.
82
public static double getFactor(double Re, double D, double e)
83
{
84
double f,x,X,s,a,b=0;
85
if(Re<=5000)
86
{
s=64/Re;
87
88
}
89
else //if (Re>2100)
90
{
91
x=0.000000000001;
92
do
93
{
94
f=-2.0*Math.log10((e/(D*3.7065))+(2.5226/(Re*Math.
sqrt(x))));
95
a=1/(f*f);
José Enrique Cabañas Ceballos
56
B.1. CÁLCULOS
96
X=Math.abs(x-a);
97
s=x;
98
x=x+0.000001;
}
99
while(X>0.000001);
100
101
}
102
return s;
103
}
104
//Metodo que resuelve la ecuacion de explicita del factor de
fricción.
105
public static double getFactor1(double Re, double D, double e)
106
{
107
double f,x,X,s,a,b=0;
108
s=0;
109
if(Re<=5000)
110
{
s=64/Re;
111
112
}
113
114
else //if (Re>2100)
115
{
if(e==0)
116
117
{
118
e=0.0000000001;
119
a=-2.0*Math.log10(((e/D)/3.7065)-(5.0272/Re)*Math.log10
(((e/D)/3.827)-(4.567/Re)*Math.log10((Math.pow((e/D)
/7.7918,0.9924))+
Math.pow((5.3326/(208.815+Re)),0.9345))));
120
s=1/(a*a);
121
122
}
123
else{
124
a=-2.0*Math.log10(((e/D)/3.7065)-(5.0272/Re)*Math.log10
José Enrique Cabañas Ceballos
57
B.1. CÁLCULOS
(((e/D)/3.827)-(4.567/Re)*Math.log10((Math.pow((e/D)
/7.7918,0.9924))+
Math.pow((5.3326/(208.815+Re)),0.9345))));
125
126
s=1/(a*a);
127
}
128
}
129
return s;
130
}
131
//Metodo que resuelve la ecuacion explicita árabe del factor de
fricción.
132
133
public static double getFactor2(double Re, double D, double e)
{
134
double f,x,X,s,a,b=0;
135
//a=Math.pow((2.457*Math.log10(1/(Math.pow((7/Re),0.9)
+0.27*(e/D)))),16);
a=Math.pow((2.457*Math.log(1/((Math.pow((7/Re),0.9))+(0.27*e
136
/D)))),16);
137
b=Math.pow((37530/Re),16);
138
s=8*Math.pow(((Math.pow((8/Re),12))+(1/(Math.pow((a+b),1.5))
)),(1/12));
139
System.out.println("a = "+a);
140
System.out.println("b = "+b);
141
//s=8*Math.pow((1/Math.pow((a+b),1.5))+(Math.pow((8/Re),12))
,(1/12));
//s=8*Math.pow((Math.pow((8/Re),12)+(1/(Math.pow((a+b),1.5))
142
)),(1/12));
return s;
143
144
145
}
//Metodo que resuelve la ecuación de Prandtl del factor de
fricción.
146
147
public static double getFactor3(double Re)
{
José Enrique Cabañas Ceballos
58
B.1. CÁLCULOS
148
double f,x,X=0;
149
x=0.000000000001;
150
do
151
{
f=Math.pow(1/(2*Math.log10((Re*Math.sqrt(x))/2.51))
152
,2);
153
X=Math.abs(x-f);
154
x=x+0.000001;
155
}
156
while(X>0.000001);
return x;
157
}
158
//Metodo que resuelve la ecuación de Karman-Nikuradse del factor
159
de fricción.
public static double getFactor4(double D, double e,double Re)
160
{
161
162
double f,x,X=0;
163
f=1/Math.pow((-2*Math.log10(e/(3.71*D))),2);
164
return f;
165
}
166
167
//CALCULO DE PERDIDA DE CARGA MEDIANTE ECUACION DARCY-WEISBACH
168
public static double getPC(double D,double vel,double media)
169
{
170
double g=9.81;
171
double PC=media*vel*vel/(2*g*(0.001*D));
172
return PC;
}
173
174
}
José Enrique Cabañas Ceballos
59
B.2. CAMPOS DE LA BASE DE DATOS
B.2.
Campos de la base de datos
Esta sección se corresponde con el archivo: campos.java
1
package factor_friccion;
2
public class campos {
3
private String nombre;
4
private double rugosidad; /* mm */
5
public campos(String nom){
6
this.nombre = nom;
7
}
8
public campos(String nom,
double rugosidad){
this.nombre = nom;
9
this.rugosidad = rugosidad;
10
11
}
12
public String getNombre(){
return this.nombre;
13
14
}
15
public void setNombre(String nombre){
this.nombre = nombre;
16
17
}
18
public double getRugosidad(){
return this.rugosidad;
19
20
}
21
public void setRugosidad(double vis){
this.rugosidad = vis;
22
}
23
24
}
José Enrique Cabañas Ceballos
60
B.3. BASE DE DATOS DE FLUIDOS
B.3.
Base de datos de fluidos
Esta sección se corresponde con el archivo: leerfluidos.java
1
package factor_friccion;
2
import java.io.*;
3
public class leerfluidos {
4
public static String[] leerfichero()
5
{
6
File archivo = null;
7
FileReader fr = null;
8
BufferedReader br = null;
9
String linea=null;
10
String z[]=null;
11
try
12
{
/*
13
// Apertura del fichero y creacion de BufferedReader para
14
poder
15
//hacer una lectura comoda (disponer del metodo readLine())
16
*/
17
archivo = new File ("listafluidos.txt");
18
fr = new FileReader (archivo);
19
br = new BufferedReader(fr);
20
// Lectura del fichero
21
while((linea=br.readLine())==null)
22
System.out.println("");
23
}
24
catch(Exception e)
25
{
e.printStackTrace();
26
27
}
José Enrique Cabañas Ceballos
61
B.3. BASE DE DATOS DE FLUIDOS
28
finally
29
{
30
// En el finally cerramos el fichero, para asegurarnos
31
// que se cierra tanto si todo va bien como si salta
32
// una excepcion.
33
try
34
{
35
if( null != fr )
36
{
fr.close();
37
}
38
39
}
40
catch (Exception e2)
41
{
e2.printStackTrace();
42
}
43
44
}
45
int y=0;
46
for(int w=0;w<linea.length();w++)
47
{
//recorrer el String linea
48
if (linea.charAt(w) == ’;’)//condicion de que caracter
49
sea ";"
{
50
y=y+1;//contador de caracteres ";"para poder
51
subdividir linea
}
52
53
54
}
String [] W=new String [y];
55
56
for(int b=0;b<y;b++)
57
{
José Enrique Cabañas Ceballos
62
B.4. BASE DE DATOS DE MATERIALES DE...
W[b]="";
58
59
}
60
int a=0;
61
for(int t=0;t<linea.length();t++)
{
62
//recorrer el String linea
63
64
if (linea.charAt(t) != ’;’)
65
{
W[a] = W[a]+ Character.toString(linea.charAt(t));
66
67
}
68
else// (linea.charAt(t) == ’;’)
69
{
a=a+1;
70
}
71
}
72
73
System.out.println("hay "+y+" ; en el archivo");
74
75
return W;
76
}
77
78
}
B.4.
Base de datos de materiales de tuberías
Esta sección se corresponde con el archivo: Leermateriales.java
1
package factor_friccion;
2
import java.io.*;
3
//import java.util.StringTokenizer;
4
public class Leermateriales
José Enrique Cabañas Ceballos
63
B.4. BASE DE DATOS DE MATERIALES DE...
5
{
6
public static String[] leerfichero()
7
{
8
File archivo = null;
9
FileReader fr = null;
10
BufferedReader br = null;
11
String linea=null;
12
String z[]=null;
13
try
14
{
/*
15
// Apertura del fichero y creacion de BufferedReader para
16
poder
17
//hacer una lectura comoda (disponer del metodo readLine())
18
*/
19
archivo = new File ("listamateriales.txt");
20
fr = new FileReader (archivo);
21
br = new BufferedReader(fr);
22
// Lectura del fichero
23
while((linea=br.readLine())==null)
24
System.out.println("");
25
}
26
catch(Exception e)
27
{
e.printStackTrace();
28
29
}
30
finally
31
{
32
// En el finally cerramos el fichero, para asegurarnos
33
// que se cierra tanto si todo va bien como si salta
34
// una excepcion.
35
try
José Enrique Cabañas Ceballos
64
B.4. BASE DE DATOS DE MATERIALES DE...
{
36
37
if( null != fr )
38
{
fr.close();
39
}
40
41
}
42
catch (Exception e2)
43
{
e2.printStackTrace();
44
}
45
46
}
47
int y=0;
48
for(int w=0;w<linea.length();w++)
49
{
//recorrer el String linea
50
if (linea.charAt(w) == ’;’)//condicion de que caracter
51
sea ";"
{
52
y=y+1;//contador de caracteres ";"para poder
53
subdividir linea
}
54
55
56
}
String [] W=new String [y];
57
58
for(int b=0;b<y;b++)
59
{
W[b]="";
60
61
}
62
int a=0;
63
for(int t=0;t<linea.length();t++)
64
65
{
//recorrer el String linea
José Enrique Cabañas Ceballos
65
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
66
if (linea.charAt(t) != ’;’)
67
{
W[a] = W[a]+ Character.toString(linea.charAt(t));
68
69
}
70
else// (linea.charAt(t) == ’;’)
71
{
a=a+1;
72
}
73
}
74
75
System.out.println("hay "+y+" ; en el archivo");
76
77
return W;
78
}
79
80
}
B.5.
Código de de la interface gráfica
Esta sección se corresponde con el archivo: Factor_friccionView.java
1
/*
2
* Factor_friccionView.java
3
*/
4
5
package factor_friccion;
6
7
import org.jdesktop.application.Action;
8
import org.jdesktop.application.ResourceMap;
9
import org.jdesktop.application.SingleFrameApplication;
10
import org.jdesktop.application.FrameView;
José Enrique Cabañas Ceballos
66
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
11
import org.jdesktop.application.TaskMonitor;
12
import java.awt.event.ActionEvent;
13
import java.awt.event.ActionListener;
14
import javax.swing.DefaultComboBoxModel;
15
import javax.swing.Timer;
16
import javax.swing.Icon;
17
import javax.swing.JDialog;
18
import javax.swing.JFrame;
19
import java.text.DecimalFormat;
20
21
/**
22
* The application’s main frame.
23
*/
24
public class Factor_friccionView extends FrameView {
25
DecimalFormat formateador = new DecimalFormat("0.000000");
26
String Z[]=Leermateriales.leerfichero();
27
int q=Z.length;
28
int y=1+(q/2);
29
public String Nombres[]=new String[y-1];
30
public String Rug[]=new String[y-1];
31
String W[]=leerfluidos.leerfichero();
32
int r=W.length;
33
int p=r/3;
34
public String Nombres1[]=new String[p];
35
public String Vis[]=new String[p];
36
public String Den[]=new String[p];
37
public DefaultComboBoxModel model;
38
public DefaultComboBoxModel model1;
39
40
public Factor_friccionView(SingleFrameApplication app) {
41
super(app);
42
for (int a=1;a<y-1;a++)
José Enrique Cabañas Ceballos
67
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
43
{
44
Nombres[a]=Z[2*a];
45
Rug[a]=Z[(2*a)+1];
46
//System.out.print(Nombres[a]);
47
}
48
for (int b=1;b<p-1;b++)
49
{
50
Nombres1[b]=W[3*b];
51
Vis[b]=W[(3*b)+2];
52
Den[b]=W[(3*b)+1];
53
//System.out.print(Nombres[b]);
54
}
55
model = new DefaultComboBoxModel(Nombres);
56
model1 = new DefaultComboBoxModel(Nombres1);
57
initComponents();
58
59
// status bar initialization - message timeout, idle icon
and busy animation, etc
60
ResourceMap resourceMap = getResourceMap();
61
int messageTimeout = resourceMap.getInteger("StatusBar.
messageTimeout");
62
messageTimer = new Timer(messageTimeout, new ActionListener
() {
public void actionPerformed(ActionEvent e) {
63
statusMessageLabel.setText("");
64
}
65
66
});
67
messageTimer.setRepeats(false);
68
int busyAnimationRate = resourceMap.getInteger("StatusBar.
busyAnimationRate");
69
70
for (int i = 0; i < busyIcons.length; i++) {
busyIcons[i] = resourceMap.getIcon("StatusBar.busyIcons[
José Enrique Cabañas Ceballos
68
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
" + i + "]");
71
}
72
busyIconTimer = new Timer(busyAnimationRate, new
ActionListener() {
public void actionPerformed(ActionEvent e) {
73
busyIconIndex = (busyIconIndex + 1) % busyIcons.
74
length;
statusAnimationLabel.setIcon(busyIcons[busyIconIndex
75
]);
}
76
77
});
78
idleIcon = resourceMap.getIcon("StatusBar.idleIcon");
79
statusAnimationLabel.setIcon(idleIcon);
80
progressBar.setVisible(false);
81
82
// connecting action tasks to status bar via TaskMonitor
83
TaskMonitor taskMonitor = new TaskMonitor(getApplication().
getContext());
84
taskMonitor.addPropertyChangeListener(new java.beans.
PropertyChangeListener() {
85
public void propertyChange(java.beans.
PropertyChangeEvent evt) {
86
String propertyName = evt.getPropertyName();
87
if ("started".equals(propertyName)) {
88
if (!busyIconTimer.isRunning()) {
89
statusAnimationLabel.setIcon(busyIcons[0]);
90
busyIconIndex = 0;
91
busyIconTimer.start();
92
}
93
progressBar.setVisible(true);
94
progressBar.setIndeterminate(true);
95
} else if ("done".equals(propertyName)) {
José Enrique Cabañas Ceballos
69
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
96
busyIconTimer.stop();
97
statusAnimationLabel.setIcon(idleIcon);
98
progressBar.setVisible(false);
99
progressBar.setValue(0);
} else if ("message".equals(propertyName)) {
100
101
String text = (String)(evt.getNewValue());
102
statusMessageLabel.setText((text == null) ? "" :
text);
messageTimer.restart();
103
104
} else if ("progress".equals(propertyName)) {
105
int value = (Integer)(evt.getNewValue());
106
progressBar.setVisible(true);
107
progressBar.setIndeterminate(false);
108
progressBar.setValue(value);
}
109
}
110
});
111
112
}
113
114
@Action
115
public void showAboutBox() {
if (aboutBox == null) {
116
JFrame mainFrame = Factor_friccionApp.getApplication().
117
getMainFrame();
118
aboutBox = new Factor_friccionAboutBox(mainFrame);
119
aboutBox.setLocationRelativeTo(mainFrame);
120
}
121
Factor_friccionApp.getApplication().show(aboutBox);
122
}
123
124
125
/** This method is called from within the constructor to
* initialize the form.
José Enrique Cabañas Ceballos
70
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
126
* WARNING: Do NOT modify this code. The content of this method
is
127
* always regenerated by the Form Editor.
128
*/
129
@SuppressWarnings("unchecked")
130
// <editor-fold defaultstate="collapsed" desc="Generated Code">
131
private void initComponents() {
132
133
mainPanel = new javax.swing.JPanel();
134
jLabel1 = new javax.swing.JLabel();
135
jTextField1 = new javax.swing.JTextField();
136
jTextField2 = new javax.swing.JTextField();
137
jTextField3 = new javax.swing.JTextField();
138
jTextField4 = new javax.swing.JTextField();
139
jTextField5 = new javax.swing.JTextField();
140
jButton1 = new javax.swing.JButton();
141
jComboBox1 = new javax.swing.JComboBox();
142
jCheckBox1 = new javax.swing.JCheckBox();
143
jCheckBox2 = new javax.swing.JCheckBox();
144
jCheckBox3 = new javax.swing.JCheckBox();
145
jCheckBox4 = new javax.swing.JCheckBox();
146
jCheckBox5 = new javax.swing.JCheckBox();
147
jCheckBox6 = new javax.swing.JCheckBox();
148
jTextField6 = new javax.swing.JTextField();
149
jTextField7 = new javax.swing.JTextField();
150
jLabel2 = new javax.swing.JLabel();
151
jLabel4 = new javax.swing.JLabel();
152
jComboBox2 = new javax.swing.JComboBox();
153
jCheckBox7 = new javax.swing.JCheckBox();
154
jTextField8 = new javax.swing.JTextField();
155
jLabel5 = new javax.swing.JLabel();
156
jLabel6 = new javax.swing.JLabel();
José Enrique Cabañas Ceballos
71
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
157
jTextField9 = new javax.swing.JTextField();
158
jLabel7 = new javax.swing.JLabel();
159
jTextField11 = new javax.swing.JTextField();
160
jTextField12 = new javax.swing.JTextField();
161
jLabel8 = new javax.swing.JLabel();
162
jLabel9 = new javax.swing.JLabel();
163
jTextField13 = new javax.swing.JTextField();
164
jLabel10 = new javax.swing.JLabel();
165
jLabel12 = new javax.swing.JLabel();
166
jTextField14 = new javax.swing.JTextField();
167
menuBar = new javax.swing.JMenuBar();
168
javax.swing.JMenu fileMenu = new javax.swing.JMenu();
169
javax.swing.JMenuItem exitMenuItem = new javax.swing.
JMenuItem();
170
javax.swing.JMenu helpMenu = new javax.swing.JMenu();
171
javax.swing.JMenuItem aboutMenuItem = new javax.swing.
JMenuItem();
172
statusPanel = new javax.swing.JPanel();
173
javax.swing.JSeparator statusPanelSeparator = new javax.
swing.JSeparator();
174
statusMessageLabel = new javax.swing.JLabel();
175
statusAnimationLabel = new javax.swing.JLabel();
176
progressBar = new javax.swing.JProgressBar();
177
jLabel3 = new javax.swing.JLabel();
178
jPanel1 = new javax.swing.JPanel();
179
jLabel11 = new javax.swing.JLabel();
180
jTextField10 = new javax.swing.JTextField();
181
182
mainPanel.setName("mainPanel"); // NOI18N
183
mainPanel.setPreferredSize(new java.awt.Dimension(600, 400))
;
184
José Enrique Cabañas Ceballos
72
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
185
jLabel1.setText("FLUIDOS");
186
jLabel1.setName("jLabel1"); // NOI18N
187
188
jTextField1.setText("");
189
jTextField1.setEnabled(false);
190
jTextField1.setName("jTextField1"); // NOI18N
191
192
jTextField2.setText("");
193
jTextField2.setEnabled(false);
194
jTextField2.setName("jTextField2"); // NOI18N
195
196
jTextField3.setText("");
197
jTextField3.setEnabled(false);
198
jTextField3.setName("jTextField3"); // NOI18N
199
200
jTextField4.setText("");
201
jTextField4.setEnabled(false);
202
jTextField4.setName("jTextField4"); // NOI18N
203
204
jTextField5.setText("");
205
jTextField5.setEnabled(false);
206
jTextField5.setName("jTextField5"); // NOI18N
207
208
jButton1.setText("CALCULAR");
209
jButton1.setName("jButton1"); // NOI18N
210
jButton1.addActionListener(new java.awt.event.ActionListener
() {
public void actionPerformed(java.awt.event.ActionEvent
211
evt) {
jButton1ActionPerformed(evt);
212
}
213
214
});
José Enrique Cabañas Ceballos
73
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
215
216
jComboBox1.setModel(model1);
217
jComboBox1.setName("jComboBox1"); // NOI18N
218
jComboBox1.addActionListener(new java.awt.event.
ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent
219
evt) {
jComboBox1ActionPerformed(evt);
220
}
221
222
});
223
224
jCheckBox1.setText("DENSIDAD(kg/m3)");
225
jCheckBox1.setName("jCheckBox1"); // NOI18N
226
jCheckBox1.addActionListener(new java.awt.event.
ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent
227
evt) {
jCheckBox1ActionPerformed(evt);
228
}
229
230
});
231
232
jCheckBox2.setText("VISCOSIDAD(m2/s)");
233
jCheckBox2.setName("jCheckBox2"); // NOI18N
234
jCheckBox2.addActionListener(new java.awt.event.
ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent
235
evt) {
jCheckBox2ActionPerformed(evt);
236
}
237
238
});
239
240
jCheckBox3.setText("DIÁMETRO TUBERIA(mm)");
José Enrique Cabañas Ceballos
74
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
241
jCheckBox3.setName("jCheckBox3"); // NOI18N
242
jCheckBox3.addActionListener(new java.awt.event.
ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent
243
evt) {
jCheckBox3ActionPerformed(evt);
244
}
245
246
});
247
248
jCheckBox4.setText("RUGOSIDAD(mm)");
249
jCheckBox4.setName("jCheckBox4"); // NOI18N
250
jCheckBox4.addActionListener(new java.awt.event.
ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent
251
evt) {
jCheckBox4ActionPerformed(evt);
252
}
253
254
});
255
256
jCheckBox5.setText("CAUDAL(m3/s)");
257
jCheckBox5.setName("jCheckBox5"); // NOI18N
258
jCheckBox5.addActionListener(new java.awt.event.
ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent
259
evt) {
jCheckBox5ActionPerformed(evt);
260
}
261
262
});
263
264
jCheckBox6.setText("REYNOLDS");
265
jCheckBox6.setName("jCheckBox6"); // NOI18N
266
jCheckBox6.addActionListener(new java.awt.event.
José Enrique Cabañas Ceballos
75
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent
267
evt) {
jCheckBox6ActionPerformed(evt);
268
}
269
270
});
271
272
jTextField6.setText("");
273
jTextField6.setEnabled(false);
274
jTextField6.setName("jTextField6"); // NOI18N
275
276
jTextField7.setText("");
277
jTextField7.setEnabled(false);
278
jTextField7.setName("jTextField7"); // NOI18N
279
280
jLabel2.setText("");
281
jLabel2.setName("jLabel2"); // NOI18N
282
283
jLabel4.setText("MATERIAL DE LA TUBERIA");
284
jLabel4.setName("jLabel4"); // NOI18N
285
286
jComboBox2.setModel(model);
287
jComboBox2.setName("jComboBox2"); // NOI18N
288
jComboBox2.addActionListener(new java.awt.event.
ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent
289
evt) {
jComboBox2ActionPerformed(evt);
290
}
291
292
});
293
294
jCheckBox7.setText("VELOCIDAD (m/s)");
José Enrique Cabañas Ceballos
76
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
295
jCheckBox7.setName("jCheckBox7"); // NOI18N
296
jCheckBox7.addActionListener(new java.awt.event.
ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent
297
evt) {
jCheckBox7ActionPerformed(evt);
298
}
299
300
});
301
302
jTextField8.setText("");
303
jTextField8.setName("jTextField8"); // NOI18N
304
305
jLabel5.setText("f Colebrook");
306
jLabel5.setName("jLabel5"); // NOI18N
307
308
jLabel6.setText("f explícita");
309
jLabel6.setName("jLabel6"); // NOI18N
310
311
jTextField9.setText("");
312
jTextField9.setName("jTextField9"); // NOI18N
313
314
jLabel7.setText("");
315
jLabel7.setName("jLabel7"); // NOI18N
316
317
jTextField11.setText("");
318
jTextField11.setName("jTextField11"); // NOI18N
319
320
jTextField12.setText("");
321
jTextField12.setName("jTextField12"); // NOI18N
322
323
jLabel8.setText("f Prandtl");
324
jLabel8.setName("jLabel8"); // NOI18N
José Enrique Cabañas Ceballos
77
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
325
326
jLabel9.setText("f von Karman-Nikuradse");
327
jLabel9.setName("jLabel9"); // NOI18N
328
329
jTextField13.setText("");
330
jTextField13.setName("jTextField13"); // NOI18N
331
332
jLabel10.setText("factor fricción medio");
333
jLabel10.setName("jLabel10"); // NOI18N
334
335
jLabel12.setText("Pérdida de Carga/metro
336
jLabel12.setName("jLabel12"); // NOI18N
(m)");
337
338
jTextField14.setText("");
339
jTextField14.setName("jTextField14"); // NOI18N
340
341
javax.swing.GroupLayout mainPanelLayout = new javax.swing.
GroupLayout(mainPanel);
342
mainPanel.setLayout(mainPanelLayout);
343
mainPanelLayout.setHorizontalGroup(
344
mainPanelLayout.createParallelGroup(javax.swing.
GroupLayout.Alignment.LEADING)
345
.addGroup(mainPanelLayout.createSequentialGroup()
346
.addContainerGap()
347
.addGroup(mainPanelLayout.createParallelGroup(javax.
swing.GroupLayout.Alignment.LEADING)
348
.addComponent(jCheckBox7)
349
.addComponent(jCheckBox6)
350
.addGroup(mainPanelLayout.createSequentialGroup
()
.addGroup(mainPanelLayout.
351
createParallelGroup(javax.swing.
José Enrique Cabañas Ceballos
78
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
GroupLayout.Alignment.LEADING)
.addGroup(mainPanelLayout.
352
createSequentialGroup()
.addGroup(mainPanelLayout.
353
createParallelGroup(javax.swing.
GroupLayout.Alignment.TRAILING)
.addComponent(jCheckBox1, javax.
354
swing.GroupLayout.Alignment.
LEADING)
.addComponent(jCheckBox2, javax.
355
swing.GroupLayout.Alignment.
LEADING)
.addComponent(jCheckBox3, javax.
356
swing.GroupLayout.Alignment.
LEADING)
.addComponent(jCheckBox4, javax.
357
swing.GroupLayout.Alignment.
LEADING)
.addComponent(jCheckBox5, javax.
358
swing.GroupLayout.Alignment.
LEADING)
.addGroup(javax.swing.
359
GroupLayout.Alignment.LEADING
, mainPanelLayout.
createSequentialGroup()
.addComponent(jLabel1, javax
360
.swing.GroupLayout.
PREFERRED_SIZE, 71, javax
.swing.GroupLayout.
PREFERRED_SIZE)
361
.addGap(18, 18, 18)
362
.addComponent(jComboBox1,
José Enrique Cabañas Ceballos
79
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
javax.swing.GroupLayout.
PREFERRED_SIZE, 136,
javax.swing.GroupLayout.
PREFERRED_SIZE))
.addComponent(jButton1, javax.
363
swing.GroupLayout.Alignment.
LEADING, javax.swing.
GroupLayout.PREFERRED_SIZE,
123, javax.swing.GroupLayout.
PREFERRED_SIZE))
364
.addGap(18, 18, 18)
365
.addComponent(jLabel4, javax.swing.
GroupLayout.PREFERRED_SIZE, 154,
javax.swing.GroupLayout.
PREFERRED_SIZE))
366
.addComponent(jLabel6)
367
.addComponent(jLabel5)
368
.addComponent(jLabel8, javax.swing.
GroupLayout.DEFAULT_SIZE, 397, Short.
MAX_VALUE)
.addComponent(jLabel9, javax.swing.
369
GroupLayout.DEFAULT_SIZE, 397, Short.
MAX_VALUE)
.addComponent(jLabel10))
370
.addPreferredGap(javax.swing.LayoutStyle.
371
ComponentPlacement.RELATED)
.addGroup(mainPanelLayout.
372
createParallelGroup(javax.swing.
GroupLayout.Alignment.LEADING)
.addComponent(jLabel7, javax.swing.
373
GroupLayout.DEFAULT_SIZE, 216, Short.
MAX_VALUE)
José Enrique Cabañas Ceballos
80
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
.addGroup(mainPanelLayout.
374
createParallelGroup(javax.swing.
GroupLayout.Alignment.TRAILING, false
)
.addComponent(jTextField13, javax.
375
swing.GroupLayout.Alignment.
LEADING)
.addComponent(jTextField8, javax.
376
swing.GroupLayout.Alignment.
LEADING)
.addComponent(jTextField1, javax.
377
swing.GroupLayout.Alignment.
LEADING)
.addComponent(jTextField2, javax.
378
swing.GroupLayout.Alignment.
LEADING)
.addComponent(jTextField3, javax.
379
swing.GroupLayout.Alignment.
LEADING)
.addComponent(jTextField4, javax.
380
swing.GroupLayout.Alignment.
LEADING)
.addComponent(jTextField5, javax.
381
swing.GroupLayout.Alignment.
LEADING)
.addComponent(jTextField6, javax.
382
swing.GroupLayout.Alignment.
LEADING)
.addComponent(jTextField7, javax.
383
swing.GroupLayout.Alignment.
LEADING)
.addComponent(jTextField9, javax.
384
José Enrique Cabañas Ceballos
81
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
swing.GroupLayout.Alignment.
LEADING)
.addComponent(jTextField11, javax.
385
swing.GroupLayout.Alignment.
LEADING)
.addComponent(jTextField12, javax.
386
swing.GroupLayout.Alignment.
LEADING)
.addComponent(jComboBox2, javax.
387
swing.GroupLayout.Alignment.
LEADING, 0, 181, Short.MAX_VALUE)
.addComponent(jTextField14, javax.
388
swing.GroupLayout.Alignment.
LEADING))))
.addComponent(jLabel2, javax.swing.GroupLayout.
389
PREFERRED_SIZE, 128, javax.swing.GroupLayout.
PREFERRED_SIZE)
.addComponent(jLabel12))
390
.addContainerGap())
391
392
);
393
mainPanelLayout.setVerticalGroup(
394
mainPanelLayout.createParallelGroup(javax.swing.
GroupLayout.Alignment.LEADING)
395
.addGroup(mainPanelLayout.createSequentialGroup()
396
.addContainerGap(javax.swing.GroupLayout.
DEFAULT_SIZE, Short.MAX_VALUE)
397
.addGroup(mainPanelLayout.createParallelGroup(javax.
swing.GroupLayout.Alignment.BASELINE)
398
.addComponent(jLabel1, javax.swing.GroupLayout.
PREFERRED_SIZE, 37, javax.swing.GroupLayout.
PREFERRED_SIZE)
399
.addComponent(jComboBox1, javax.swing.
José Enrique Cabañas Ceballos
82
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
GroupLayout.PREFERRED_SIZE, 26, javax.swing.
GroupLayout.PREFERRED_SIZE)
400
.addComponent(jLabel4)
401
.addComponent(jComboBox2, javax.swing.
GroupLayout.PREFERRED_SIZE, 29, javax.swing.
GroupLayout.PREFERRED_SIZE))
402
.addGap(24, 24, 24)
403
.addGroup(mainPanelLayout.createParallelGroup(javax.
swing.GroupLayout.Alignment.BASELINE)
404
.addComponent(jCheckBox1)
405
.addComponent(jTextField1, javax.swing.
GroupLayout.PREFERRED_SIZE, javax.swing.
GroupLayout.DEFAULT_SIZE, javax.swing.
GroupLayout.PREFERRED_SIZE))
406
.addPreferredGap(javax.swing.LayoutStyle.
ComponentPlacement.UNRELATED)
407
.addGroup(mainPanelLayout.createParallelGroup(javax.
swing.GroupLayout.Alignment.BASELINE)
408
.addComponent(jCheckBox2)
409
.addComponent(jTextField2, javax.swing.
GroupLayout.PREFERRED_SIZE, javax.swing.
GroupLayout.DEFAULT_SIZE, javax.swing.
GroupLayout.PREFERRED_SIZE))
410
.addPreferredGap(javax.swing.LayoutStyle.
ComponentPlacement.UNRELATED)
411
.addGroup(mainPanelLayout.createParallelGroup(javax.
swing.GroupLayout.Alignment.BASELINE)
412
.addComponent(jCheckBox3)
413
.addComponent(jTextField3, javax.swing.
GroupLayout.PREFERRED_SIZE, javax.swing.
GroupLayout.DEFAULT_SIZE, javax.swing.
GroupLayout.PREFERRED_SIZE))
José Enrique Cabañas Ceballos
83
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
414
.addPreferredGap(javax.swing.LayoutStyle.
ComponentPlacement.UNRELATED)
415
.addGroup(mainPanelLayout.createParallelGroup(javax.
swing.GroupLayout.Alignment.BASELINE)
416
.addComponent(jCheckBox4)
417
.addComponent(jTextField4, javax.swing.
GroupLayout.PREFERRED_SIZE, javax.swing.
GroupLayout.DEFAULT_SIZE, javax.swing.
GroupLayout.PREFERRED_SIZE))
418
.addPreferredGap(javax.swing.LayoutStyle.
ComponentPlacement.UNRELATED)
419
.addGroup(mainPanelLayout.createParallelGroup(javax.
swing.GroupLayout.Alignment.BASELINE)
420
.addComponent(jCheckBox5)
421
.addComponent(jTextField5, javax.swing.
GroupLayout.PREFERRED_SIZE, javax.swing.
GroupLayout.DEFAULT_SIZE, javax.swing.
GroupLayout.PREFERRED_SIZE))
422
.addPreferredGap(javax.swing.LayoutStyle.
ComponentPlacement.UNRELATED)
423
.addGroup(mainPanelLayout.createParallelGroup(javax.
swing.GroupLayout.Alignment.BASELINE)
424
.addComponent(jCheckBox6)
425
.addComponent(jTextField6, javax.swing.
GroupLayout.PREFERRED_SIZE, javax.swing.
GroupLayout.DEFAULT_SIZE, javax.swing.
GroupLayout.PREFERRED_SIZE))
426
.addPreferredGap(javax.swing.LayoutStyle.
ComponentPlacement.UNRELATED)
427
.addGroup(mainPanelLayout.createParallelGroup(javax.
swing.GroupLayout.Alignment.BASELINE)
428
.addComponent(jCheckBox7)
José Enrique Cabañas Ceballos
84
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
429
.addComponent(jTextField7, javax.swing.
GroupLayout.PREFERRED_SIZE, 22, javax.swing.
GroupLayout.PREFERRED_SIZE))
430
.addGap(28, 28, 28)
431
.addGroup(mainPanelLayout.createParallelGroup(javax.
swing.GroupLayout.Alignment.BASELINE)
432
.addComponent(jButton1, javax.swing.GroupLayout.
PREFERRED_SIZE, 35, javax.swing.GroupLayout.
PREFERRED_SIZE)
433
.addComponent(jLabel7))
434
.addGap(34, 34, 34)
435
.addGroup(mainPanelLayout.createParallelGroup(javax.
swing.GroupLayout.Alignment.BASELINE)
436
.addComponent(jLabel5)
437
.addComponent(jTextField8, javax.swing.
GroupLayout.PREFERRED_SIZE, javax.swing.
GroupLayout.DEFAULT_SIZE, javax.swing.
GroupLayout.PREFERRED_SIZE))
438
.addPreferredGap(javax.swing.LayoutStyle.
ComponentPlacement.RELATED)
439
.addGroup(mainPanelLayout.createParallelGroup(javax.
swing.GroupLayout.Alignment.BASELINE)
440
.addComponent(jLabel6)
441
.addComponent(jTextField9, javax.swing.
GroupLayout.PREFERRED_SIZE, javax.swing.
GroupLayout.DEFAULT_SIZE, javax.swing.
GroupLayout.PREFERRED_SIZE))
442
.addPreferredGap(javax.swing.LayoutStyle.
ComponentPlacement.RELATED)
443
.addGroup(mainPanelLayout.createParallelGroup(javax.
swing.GroupLayout.Alignment.LEADING)
444
.addComponent(jTextField11, javax.swing.
José Enrique Cabañas Ceballos
85
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
GroupLayout.PREFERRED_SIZE, javax.swing.
GroupLayout.DEFAULT_SIZE, javax.swing.
GroupLayout.PREFERRED_SIZE)
445
446
.addComponent(jLabel8))
.addPreferredGap(javax.swing.LayoutStyle.
ComponentPlacement.RELATED)
447
.addGroup(mainPanelLayout.createParallelGroup(javax.
swing.GroupLayout.Alignment.LEADING)
448
.addComponent(jTextField12, javax.swing.
GroupLayout.PREFERRED_SIZE, javax.swing.
GroupLayout.DEFAULT_SIZE, javax.swing.
GroupLayout.PREFERRED_SIZE)
449
.addComponent(jLabel9))
450
.addGap(33, 33, 33)
451
.addGroup(mainPanelLayout.createParallelGroup(javax.
swing.GroupLayout.Alignment.BASELINE)
452
.addComponent(jTextField13, javax.swing.
GroupLayout.PREFERRED_SIZE, javax.swing.
GroupLayout.DEFAULT_SIZE, javax.swing.
GroupLayout.PREFERRED_SIZE)
453
454
.addComponent(jLabel10))
.addPreferredGap(javax.swing.LayoutStyle.
ComponentPlacement.RELATED)
455
.addGroup(mainPanelLayout.createParallelGroup(javax.
swing.GroupLayout.Alignment.BASELINE)
456
.addComponent(jLabel12)
457
.addComponent(jTextField14, javax.swing.
GroupLayout.PREFERRED_SIZE, javax.swing.
GroupLayout.DEFAULT_SIZE, javax.swing.
GroupLayout.PREFERRED_SIZE))
458
.addGap(18, 18, 18)
459
.addComponent(jLabel2, javax.swing.GroupLayout.
José Enrique Cabañas Ceballos
86
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
PREFERRED_SIZE, 28, javax.swing.GroupLayout.
PREFERRED_SIZE))
460
);
461
462
menuBar.setName("menuBar"); // NOI18N
463
464
org.jdesktop.application.ResourceMap resourceMap = org.
jdesktop.application.Application.getInstance(
factor_friccion.Factor_friccionApp.class).getContext().
getResourceMap(Factor_friccionView.class);
465
fileMenu.setText(resourceMap.getString("fileMenu.text")); //
NOI18N
466
fileMenu.setName("fileMenu"); // NOI18N
467
468
javax.swing.ActionMap actionMap = org.jdesktop.application.
Application.getInstance(factor_friccion.
Factor_friccionApp.class).getContext().getActionMap(
Factor_friccionView.class, this);
469
exitMenuItem.setAction(actionMap.get("quit")); // NOI18N
470
exitMenuItem.setName("exitMenuItem"); // NOI18N
471
fileMenu.add(exitMenuItem);
472
473
menuBar.add(fileMenu);
474
475
helpMenu.setText(resourceMap.getString("helpMenu.text")); //
NOI18N
476
helpMenu.setName("helpMenu"); // NOI18N
477
478
aboutMenuItem.setAction(actionMap.get("showAboutBox")); //
NOI18N
479
aboutMenuItem.setName("aboutMenuItem"); // NOI18N
480
helpMenu.add(aboutMenuItem);
José Enrique Cabañas Ceballos
87
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
481
482
menuBar.add(helpMenu);
483
484
statusPanel.setName("statusPanel"); // NOI18N
485
486
statusPanelSeparator.setName("statusPanelSeparator"); //
NOI18N
487
488
statusMessageLabel.setName("statusMessageLabel"); // NOI18N
489
490
statusAnimationLabel.setHorizontalAlignment(javax.swing.
SwingConstants.LEFT);
491
statusAnimationLabel.setName("statusAnimationLabel"); //
NOI18N
492
493
progressBar.setName("progressBar"); // NOI18N
494
495
jLabel3.setText(resourceMap.getString("jLabel3.text")); //
NOI18N
496
jLabel3.setName("jLabel3"); // NOI18N
497
498
javax.swing.GroupLayout statusPanelLayout = new javax.swing.
GroupLayout(statusPanel);
499
statusPanel.setLayout(statusPanelLayout);
500
statusPanelLayout.setHorizontalGroup(
501
statusPanelLayout.createParallelGroup(javax.swing.
GroupLayout.Alignment.LEADING)
502
.addComponent(statusPanelSeparator, javax.swing.
GroupLayout.DEFAULT_SIZE, 641, Short.MAX_VALUE)
503
504
.addGroup(statusPanelLayout.createSequentialGroup()
.addGroup(statusPanelLayout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
José Enrique Cabañas Ceballos
88
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
.addGroup(statusPanelLayout.
505
createSequentialGroup()
506
.addContainerGap()
507
.addComponent(statusMessageLabel))
.addGroup(statusPanelLayout.
508
createSequentialGroup()
509
.addGap(72, 72, 72)
510
.addComponent(jLabel3, javax.swing.
GroupLayout.PREFERRED_SIZE, 142, javax.
swing.GroupLayout.PREFERRED_SIZE)))
.addPreferredGap(javax.swing.LayoutStyle.
511
ComponentPlacement.RELATED, 267, Short.MAX_VALUE)
.addComponent(progressBar, javax.swing.GroupLayout.
512
PREFERRED_SIZE, javax.swing.GroupLayout.
DEFAULT_SIZE, javax.swing.GroupLayout.
PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.
513
ComponentPlacement.RELATED)
514
.addComponent(statusAnimationLabel)
515
.addContainerGap())
516
);
517
statusPanelLayout.setVerticalGroup(
518
statusPanelLayout.createParallelGroup(javax.swing.
GroupLayout.Alignment.LEADING)
519
520
.addGroup(statusPanelLayout.createSequentialGroup()
.addComponent(statusPanelSeparator, javax.swing.
GroupLayout.PREFERRED_SIZE, 2, javax.swing.
GroupLayout.PREFERRED_SIZE)
521
.addPreferredGap(javax.swing.LayoutStyle.
ComponentPlacement.RELATED)
522
.addGroup(statusPanelLayout.createParallelGroup(
javax.swing.GroupLayout.Alignment.TRAILING)
José Enrique Cabañas Ceballos
89
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
.addGroup(statusPanelLayout.
523
createSequentialGroup()
.addGroup(statusPanelLayout.
524
createParallelGroup(javax.swing.
GroupLayout.Alignment.BASELINE)
525
.addComponent(statusMessageLabel)
526
.addComponent(statusAnimationLabel)
527
.addComponent(progressBar, javax.swing.
GroupLayout.PREFERRED_SIZE, javax.
swing.GroupLayout.DEFAULT_SIZE, javax
.swing.GroupLayout.PREFERRED_SIZE))
.addGap(3, 3, 3))
528
.addComponent(jLabel3, javax.swing.GroupLayout.
529
DEFAULT_SIZE, 17, Short.MAX_VALUE)))
530
);
531
532
jPanel1.setName("jPanel1"); // NOI18N
533
534
javax.swing.GroupLayout jPanel1Layout = new javax.swing.
GroupLayout(jPanel1);
535
jPanel1.setLayout(jPanel1Layout);
536
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.
537
GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE)
538
539
);
540
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.
541
GroupLayout.Alignment.LEADING)
.addGap(0, 100, Short.MAX_VALUE)
542
543
);
544
José Enrique Cabañas Ceballos
90
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
jLabel11.setText(resourceMap.getString("jLabel11.text")); //
545
NOI18N
jLabel11.setName("jLabel11"); // NOI18N
546
547
jTextField10.setText(resourceMap.getString("jTextField10.
548
text")); // NOI18N
jTextField10.setName("jTextField10"); // NOI18N
549
550
551
setComponent(mainPanel);
552
setMenuBar(menuBar);
553
setStatusBar(statusPanel);
554
}// </editor-fold>
555
/** Este método recoge los datos y gestiona las operaciones
556
* llamando a los metodos necesarios para calcular el factor de
friccion
557
*/
558
559
private void jButton1ActionPerformed(java.awt.event.ActionEvent
evt) {
560
// TODO add your handling code here:
561
double D,e,vis,vel,Re,q,vel1,vel2,Re1,Re2,D1,D2,Den;
562
D=0;
563
e=0;
564
Re=0;
565
vel=0;
566
vis=0;
567
q=0;
568
if(jCheckBox1.isSelected())
569
{
Den =
570
Double.parseDouble(jTextField1.getText());
571
}
572
if(jCheckBox2.isSelected())
José Enrique Cabañas Ceballos
91
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
573
{
574
vis =
Double.parseDouble(jTextField2.getText());
575
if(jCheckBox3.isSelected())
576
{
577
D =
Double.parseDouble(jTextField3.getText());
578
if(jCheckBox4.isSelected())
579
{
580
e =
Double.parseDouble(jTextField4.getText());
581
if(jCheckBox5.isSelected())
582
{
q =
583
Double.parseDouble(jTextField5.getText
());
584
if (jCheckBox6.isSelected())
585
{
Re = Double.parseDouble(jTextField6.
586
getText());
587
if (jCheckBox7.isSelected())
588
{
vel = Double.parseDouble(jTextField7
589
.getText());
590
vel1=calculos.getVelocidad(q,D);
591
vel2=calculos.getVel(Re,D,vis);
592
if(vel1!=vel2)
593
{
jLabel7.setText("problemas de
594
compatibilidad!!! necesario
desmarcar alguna variable");
}
595
596
}
597
else
598
{
vel1=calculos.getVelocidad(q,D);
599
José Enrique Cabañas Ceballos
92
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
600
vel2=calculos.getVel(Re,D,vis);
601
if(vel1!=vel2)
602
{
jLabel7.setText("sistema
603
incompatible desmarca alguna
variable");
604
jTextField7.setText(""+vel1);
605
vel = Double.parseDouble(
jTextField7.getText());
}
606
}
607
608
}
609
else
610
{
611
if (jCheckBox7.isSelected())
612
{
vel = Double.parseDouble(jTextField7
613
.getText());
vel1 = Double.parseDouble(
614
jTextField7.getText());
vel2=calculos.getVelocidad(q,D);
615
if(vel1!=vel2)
616
{
617
jLabel7.setText("sistema
618
incompatible desmarca alguna
variable");
jTextField7.setText(""+vel1);
619
620
621
}
622
Re=calculos.getReynolds(D, vel, vis)
;
jTextField6.setText(""+Re);
623
José Enrique Cabañas Ceballos
93
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
624
}
625
else
626
{
627
vel=calculos.getVelocidad(q,D);
628
jTextField7.setText(""+vel);
629
Re=calculos.getReynolds(D, vel, vis)
;
jTextField6.setText(""+Re);
630
}
631
}
632
633
}
634
else
635
{
636
if (jCheckBox6.isSelected())
637
{
Re = Double.parseDouble(jTextField6.
638
getText());
639
if (jCheckBox7.isSelected())
640
{
vel = Double.parseDouble(jTextField7
641
.getText());
Re1=calculos.getReynolds(D, vel, vis
642
);
643
if(Re!=Re1)
644
{
jLabel7.setText("problemas de
645
compatibilidad desmarca
alguna variable");
646
}
647
q=calculos.getCaudal(D, vel);
648
jTextField5.setText(""+q);
}
649
José Enrique Cabañas Ceballos
94
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
650
else
651
{
652
vel=calculos.getVel(Re,D,vis);
653
jTextField7.setText(""+vel);
654
q=calculos.getCaudal(D,vel);
655
jTextField5.setText(""+q);
}
656
657
}
658
else
659
{
660
if (jCheckBox7.isSelected())
661
{
vel = Double.parseDouble(jTextField7
662
.getText());
663
q=calculos.getCaudal(D, vel);
664
jTextField5.setText(""+q);
665
Re=calculos.getReynolds(D, vel, vis)
;
jTextField6.setText(""+Re);
666
667
}
668
else
669
{
670
jLabel7.setText("datos insuficientes
671
");
}
672
}
673
}
674
675
}
676
else
677
{
678
if(jCheckBox5.isSelected())
José Enrique Cabañas Ceballos
95
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
679
{
680
q =
Double.parseDouble(jTextField5.getText
());
681
if (jCheckBox6.isSelected())
682
{
Re = Double.parseDouble(jTextField6.
683
getText());
684
if (jCheckBox7.isSelected())
685
{
vel = Double.parseDouble(jTextField7
686
.getText());
jLabel7.setText("necesario dato
687
rugosidad");
688
}
689
else
690
{
jLabel7.setText("necesario dato
691
rugosidad");
}
692
693
}
694
else
695
{
696
if (jCheckBox7.isSelected())
697
{
vel = Double.parseDouble(jTextField7
698
.getText());
jLabel7.setText("necesario dato
699
rugosidad");
700
}
701
else
702
{
jLabel7.setText("necesario dato
703
José Enrique Cabañas Ceballos
96
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
rugosidad");
}
704
}
705
706
}
707
else
708
{
709
if (jCheckBox6.isSelected())
710
{
Re = Double.parseDouble(jTextField6.
711
getText());
712
if (jCheckBox7.isSelected())
713
{
vel = Double.parseDouble(jTextField7
714
.getText());
jLabel7.setText("necesario dato
715
rugosidad");
716
}
717
else
718
{
jLabel7.setText("necesario dato
719
rugosidad");
}
720
721
}
722
else
723
{
724
if (jCheckBox7.isSelected())
725
{
vel = Double.parseDouble(jTextField7
726
.getText());
jLabel7.setText("necesario dato
727
rugosidad");
}
728
José Enrique Cabañas Ceballos
97
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
729
else
730
{
jLabel7.setText("necesario dato
731
rugosidad");
}
732
}
733
}
734
}
735
736
}
737
else
738
{
739
if(jCheckBox4.isSelected())
740
{
741
e =
Double.parseDouble(jTextField4.getText());
742
if(jCheckBox5.isSelected())
743
{
q =
744
Double.parseDouble(jTextField5.getText
());
745
if (jCheckBox6.isSelected())
746
{
Re = Double.parseDouble(jTextField6.
747
getText());
748
if (jCheckBox7.isSelected())
749
{
vel = Double.parseDouble(jTextField7
750
.getText());
751
D1=calculos.getD(Re, vis, vel);
752
D2=calculos.getD(q, vel);
753
if(D1!=D2){
jLabel7.setText("problemas de
754
compatibilidad!!! desmarca
alguna variable");
José Enrique Cabañas Ceballos
98
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
755
}
756
D=D2;
757
jTextField3.setText(""+D);
758
759
}
760
else
761
{
762
D=calculos.getD1(Re, vis, q);
763
jTextField3.setText(""+D);
764
vel=calculos.getVelocidad(q, D);
765
jTextField7.setText(""+vel);
}
766
767
}
768
else
769
{
770
if (jCheckBox7.isSelected())
771
{
vel = Double.parseDouble(jTextField7
772
.getText());
773
D=calculos.getD(q, vel);
774
jTextField3.setText(""+D);
775
Re=calculos.getReynolds(D,vel,vis);
776
jTextField6.setText(""+Re);
777
}
778
else
779
{
jLabel7.setText("datos insuficientes
780
");
}
781
}
782
783
}
784
else
José Enrique Cabañas Ceballos
99
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
785
{
786
if (jCheckBox6.isSelected())
787
{
Re = Double.parseDouble(jTextField6.
788
getText());
789
if (jCheckBox7.isSelected())
790
{
vel = Double.parseDouble(jTextField7
791
.getText());
792
D=calculos.getD(Re,vel,vis);
793
jTextField3.setText(""+D);
794
q=calculos.getCaudal(D, vel);
795
jTextField5.setText(""+q);
796
}
797
else
798
{
jLabel7.setText("datos insuficientes
799
");
}
800
801
}
802
else
803
{
804
if (jCheckBox7.isSelected())
805
{
vel = Double.parseDouble(jTextField7
806
.getText());
jLabel7.setText("datos insuficientes
807
");
808
}
809
else
810
{
jLabel7.setText("datos insuficientes
811
José Enrique Cabañas Ceballos
100
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
");
}
812
}
813
}
814
815
}
816
else
817
{
818
if(jCheckBox5.isSelected())
819
{
820
q =
Double.parseDouble(jTextField5.getText
());
821
if (jCheckBox6.isSelected())
822
{
Re = Double.parseDouble(jTextField6.
823
getText());
824
if (jCheckBox7.isSelected())
825
{
vel = Double.parseDouble(jTextField7
826
.getText());
jLabel7.setText("necesario dato
827
rugosidad");
828
}
829
else
830
{
jLabel7.setText("necesario dato
831
rugosidad");
}
832
833
}
834
else
835
{
836
if (jCheckBox7.isSelected())
837
{
José Enrique Cabañas Ceballos
101
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
vel = Double.parseDouble(jTextField7
838
.getText());
jLabel7.setText("necesario dato
839
rugosidad");
840
}
841
else
842
{
jLabel7.setText("necesario dato
843
rugosidad");
}
844
}
845
846
}
847
else
848
{
849
if (jCheckBox6.isSelected())
850
{
Re = Double.parseDouble(jTextField6.
851
getText());
852
if (jCheckBox7.isSelected())
853
{
vel = Double.parseDouble(jTextField7
854
.getText());
jLabel7.setText("necesario dato
855
rugosidad");
856
}
857
else
858
{
jLabel7.setText("necesario dato
859
rugosidad");
}
860
861
}
862
else
José Enrique Cabañas Ceballos
102
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
{
863
864
if (jCheckBox7.isSelected())
865
{
vel = Double.parseDouble(jTextField7
866
.getText());
jLabel7.setText("necesario dato
867
rugosidad");
868
}
869
else
870
{
jLabel7.setText("necesario dato
871
rugosidad");
}
872
}
873
}
874
}
875
}
876
877
}
878
else
879
{
880
881
if(jCheckBox3.isSelected())
{
882
D =
Double.parseDouble(jTextField3.getText());
883
if(jCheckBox4.isSelected())
884
{
885
e =
Double.parseDouble(jTextField4.getText());
886
if(jCheckBox5.isSelected())
887
{
q =
888
Double.parseDouble(jTextField5.getText
());
889
if (jCheckBox6.isSelected())
890
{
José Enrique Cabañas Ceballos
103
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
Re = Double.parseDouble(jTextField6.
891
getText());
892
if (jCheckBox7.isSelected())
893
{
vel = Double.parseDouble(jTextField7
894
.getText());
895
vel1=calculos.getVelocidad(q, D);
896
if(vel!=vel1){
jLabel7.setText("problemas de
897
compatibilidad!!! desmarca
alguna variable");
898
}
899
vis=calculos.getViscosidad(Re,D,vel)
;
jTextField2.setText(""+vis);
900
901
}
902
else
903
{
904
vel=calculos.getVelocidad(q, D);
905
jTextField7.setText(""+vel);
906
vis=calculos.getViscosidad(Re, D,
vel);
jTextField2.setText(""+vis);
907
908
}
909
910
}
911
else
912
{
913
if (jCheckBox7.isSelected())
914
{
vel = Double.parseDouble(jTextField7
915
.getText());
José Enrique Cabañas Ceballos
104
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
jLabel7.setText("datos infuficientes
916
");
917
}
918
else
919
{
jLabel7.setText("datos insuficientes"
920
);
}
921
}
922
923
}
924
else
925
{
926
if (jCheckBox6.isSelected())
927
{
Re = Double.parseDouble(jTextField6.
928
getText());
929
if (jCheckBox7.isSelected())
930
{
vel = Double.parseDouble(jTextField7
931
.getText());
932
q=calculos.getCaudal(D, vel);
933
jTextField5.setText(""+q);
934
vis=calculos.getViscosidad(Re, D,
vel);
jTextField2.setText(""+vis);
935
936
}
937
else
938
{
jLabel7.setText("datos insuficientes
939
");
}
940
}
941
José Enrique Cabañas Ceballos
105
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
942
else
943
{
944
if (jCheckBox7.isSelected())
945
{
vel = Double.parseDouble(jTextField7
946
.getText());
jLabel7.setText("datos insuficientes
947
");
948
}
949
else
950
{
jLabel7.setText("datos insuficientes
951
");
}
952
}
953
}
954
955
}
956
else
957
{
958
if(jCheckBox5.isSelected())
959
{
960
q =
Double.parseDouble(jTextField5.getText
());
961
if (jCheckBox6.isSelected())
962
{
Re = Double.parseDouble(jTextField6.
963
getText());
964
if (jCheckBox7.isSelected())
965
{
vel = Double.parseDouble(jTextField7
966
.getText());
jLabel7.setText("necesario dato
967
José Enrique Cabañas Ceballos
106
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
rugosidad");
968
}
969
else
970
{
jLabel7.setText("necesario dato
971
rugosidad");
}
972
973
}
974
else
975
{
976
if (jCheckBox7.isSelected())
977
{
vel = Double.parseDouble(jTextField7
978
.getText());
jLabel7.setText("necesario dato
979
rugosidad");
980
}
981
else
982
{
jLabel7.setText("necesario dato
983
rugosidad");
}
984
}
985
986
}
987
else
988
{
989
if (jCheckBox6.isSelected())
990
{
Re = Double.parseDouble(jTextField6.
991
getText());
992
if (jCheckBox7.isSelected())
993
{
José Enrique Cabañas Ceballos
107
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
vel = Double.parseDouble(jTextField7
994
.getText());
jLabel7.setText("necesario dato
995
rugosidad");
996
}
997
else
998
{
jLabel7.setText("necesario dato
999
rugosidad");
}
1000
1001
}
1002
else
1003
{
1004
if (jCheckBox7.isSelected())
1005
{
vel = Double.parseDouble(jTextField7
1006
.getText());
jLabel7.setText("necesario dato
1007
rugosidad");
1008
}
1009
else
1010
{
jLabel7.setText("necesario dato
1011
rugosidad");
}
1012
}
1013
}
1014
}
1015
1016
}
1017
else
1018
{
1019
if(jCheckBox4.isSelected())
José Enrique Cabañas Ceballos
108
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
1020
{
1021
e =
Double.parseDouble(jTextField4.getText());
1022
if(jCheckBox5.isSelected())
1023
{
q =
1024
Double.parseDouble(jTextField5.getText
());
1025
if (jCheckBox6.isSelected())
1026
{
Re = Double.parseDouble(jTextField6.
1027
getText());
1028
if (jCheckBox7.isSelected())
1029
{
vel = Double.parseDouble(jTextField7
1030
.getText());
1031
D=calculos.getD(q, vel);
1032
jTextField3.setText(""+D);
1033
vis=calculos.getViscosidad(Re, D,
vel);
jTextField2.setText(""+vis);
1034
1035
}
1036
else
1037
{
jLabel7.setText("datos insuficientes
1038
");
}
1039
1040
}
1041
else
1042
{
1043
if (jCheckBox7.isSelected())
1044
{
vel = Double.parseDouble(jTextField7
1045
.getText());
José Enrique Cabañas Ceballos
109
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
jLabel7.setText("datos insuficientes
1046
");
1047
}
1048
else
1049
{
jLabel7.setText("datos insuficientes
1050
");
}
1051
}
1052
1053
}
1054
else
1055
{
1056
if (jCheckBox6.isSelected())
1057
{
Re = Double.parseDouble(jTextField6.
1058
getText());
1059
if (jCheckBox7.isSelected())
1060
{
vel = Double.parseDouble(jTextField7
1061
.getText());
jLabel7.setText("datos insuficientes
1062
");
1063
}
1064
else
1065
{
jLabel7.setText("datos insuficientes
1066
");
}
1067
1068
}
1069
else
1070
{
if (jCheckBox7.isSelected())
1071
José Enrique Cabañas Ceballos
110
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
{
1072
vel = Double.parseDouble(jTextField7
1073
.getText());
jLabel7.setText("datos insuficientes
1074
");
1075
}
1076
else
1077
{
jLabel7.setText("datos insuficientes
1078
");
}
1079
}
1080
}
1081
1082
}
1083
else
1084
{
1085
if(jCheckBox5.isSelected())
1086
{
1087
q =
Double.parseDouble(jTextField5.getText
());
1088
if (jCheckBox6.isSelected())
1089
{
Re = Double.parseDouble(jTextField6.
1090
getText());
1091
if (jCheckBox7.isSelected())
1092
{
vel = Double.parseDouble(jTextField7
1093
.getText());
jLabel7.setText("necesario dato
1094
rugosidad");
1095
}
1096
else
José Enrique Cabañas Ceballos
111
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
{
1097
jLabel7.setText("necesario dato
1098
rugosidad");
}
1099
1100
}
1101
else
1102
{
1103
if (jCheckBox7.isSelected())
1104
{
vel = Double.parseDouble(jTextField7
1105
.getText());
jLabel7.setText("necesario dato
1106
rugosidad");
1107
}
1108
else
1109
{
jLabel7.setText("necesario dato
1110
rugosidad");
}
1111
}
1112
1113
}
1114
else
1115
{
1116
if (jCheckBox6.isSelected())
1117
{
Re = Double.parseDouble(jTextField6.
1118
getText());
1119
if (jCheckBox7.isSelected())
1120
{
vel = Double.parseDouble(jTextField7
1121
.getText());
jLabel7.setText("necesario dato
1122
José Enrique Cabañas Ceballos
112
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
rugosidad");
1123
}
1124
else
1125
{
jLabel7.setText("necesario dato
1126
rugosidad");
}
1127
1128
}
1129
else
1130
{
1131
if (jCheckBox7.isSelected())
1132
{
vel = Double.parseDouble(jTextField7
1133
.getText());
jLabel7.setText("necesario dato
1134
rugosidad");
1135
}
1136
else
1137
{
jLabel7.setText("necesario dato
1138
rugosidad");
}
1139
}
1140
}
1141
}
1142
}
1143
1144
1145
}
if(D!=0&&e!=0&&vel!=0&&q!=0&&Re!=0&&vis!=0){
1146
double f=calculos.getFactor(Re, D, e);//colebrook
1147
double s=calculos.getFactor1(Re, D, e);//explicita
1148
//double g=Fluido.getFactor2(Re, D, e);//explicita arabe
1149
double k=calculos.getFactor3(Re);//prandtl
José Enrique Cabañas Ceballos
113
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
1150
double h=calculos.getFactor4(D,e,Re);//Karman-Nikuradse
1151
double m=calculos.getMedia(f,s,k,Re,D);//Media de los
factores de fricción
1152
double PC=calculos.getPC(D, vel, m);
1153
jTextField14.setText(""+formateador.format(PC));
1154
jTextField8.setText(""+formateador.format(f));
1155
jTextField9.setText(""+formateador.format(s));
1156
jTextField11.setText(""+formateador.format(k));
1157
jTextField12.setText(""+formateador.format(h));
1158
jTextField13.setText(""+formateador.format(m));
1159
jLabel7.setText("PARÁMETROS CALCULADOS CORRECTAMENTE");
}
1160
1161
}
1162
1163
private void jComboBox1ActionPerformed(java.awt.event.
ActionEvent evt) {
1164
// TODO add your handling code here:
1165
int i = jComboBox1.getSelectedIndex();
1166
try {
1167
jTextField1.setText(Den[i]);
1168
jTextField2.setText(Vis[i]);
1169
}
1170
catch(ArrayIndexOutOfBoundsException e) {
jLabel7.setText("Dicho fluido no existe");
1171
}
1172
1173
}
1174
1175
private void jCheckBox1ActionPerformed(java.awt.event.
ActionEvent evt) {
1176
// TODO add your handling code here:
1177
jTextField1.setEnabled(jCheckBox1.isSelected());
1178
}
José Enrique Cabañas Ceballos
114
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
1179
1180
private void jCheckBox2ActionPerformed(java.awt.event.
ActionEvent evt) {
1181
// TODO add your handling code here:
1182
jTextField2.setEnabled(jCheckBox2.isSelected());
1183
}
1184
1185
private void jCheckBox3ActionPerformed(java.awt.event.
ActionEvent evt) {
1186
// TODO add your handling code here:
1187
jTextField3.setEnabled(jCheckBox3.isSelected());
1188
}
1189
1190
private void jCheckBox4ActionPerformed(java.awt.event.
ActionEvent evt) {
1191
// TODO add your handling code here:
1192
jTextField4.setEnabled(jCheckBox4.isSelected());
1193
}
1194
1195
private void jCheckBox5ActionPerformed(java.awt.event.
ActionEvent evt) {
1196
// TODO add your handling code here:
1197
jTextField5.setEnabled(jCheckBox5.isSelected());
1198
}
1199
1200
private void jCheckBox6ActionPerformed(java.awt.event.
ActionEvent evt) {
1201
// TODO add your handling code here:
1202
jTextField6.setEnabled(jCheckBox6.isSelected());
1203
}
1204
1205
private void jComboBox2ActionPerformed(java.awt.event.
José Enrique Cabañas Ceballos
115
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
ActionEvent evt) {
1206
// TODO add your handling code here:
1207
int i = jComboBox2.getSelectedIndex();
1208
try {
jTextField4.setText(Rug[i]);
1209
}
1210
catch(ArrayIndexOutOfBoundsException e) {
1211
jLabel7.setText("Dicho material no existe");
1212
}
1213
1214
}
1215
1216
private void jCheckBox7ActionPerformed(java.awt.event.
ActionEvent evt) {
1217
// TODO add your handling code hre:
1218
jTextField7.setEnabled(jCheckBox7.isSelected());
1219
}
1220
1221
// Variables declaration - do not modify
1222
private javax.swing.JButton jButton1;
1223
private javax.swing.JCheckBox jCheckBox1;
1224
private javax.swing.JCheckBox jCheckBox2;
1225
private javax.swing.JCheckBox jCheckBox3;
1226
private javax.swing.JCheckBox jCheckBox4;
1227
private javax.swing.JCheckBox jCheckBox5;
1228
private javax.swing.JCheckBox jCheckBox6;
1229
private javax.swing.JCheckBox jCheckBox7;
1230
private javax.swing.JComboBox jComboBox1;
1231
private javax.swing.JComboBox jComboBox2;
1232
private javax.swing.JLabel jLabel1;
1233
private javax.swing.JLabel jLabel10;
1234
private javax.swing.JLabel jLabel11;
1235
private javax.swing.JLabel jLabel12;
José Enrique Cabañas Ceballos
116
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
1236
private javax.swing.JLabel jLabel2;
1237
private javax.swing.JLabel jLabel3;
1238
private javax.swing.JLabel jLabel4;
1239
private javax.swing.JLabel jLabel5;
1240
private javax.swing.JLabel jLabel6;
1241
private javax.swing.JLabel jLabel7;
1242
private javax.swing.JLabel jLabel8;
1243
private javax.swing.JLabel jLabel9;
1244
private javax.swing.JPanel jPanel1;
1245
private javax.swing.JTextField jTextField1;
1246
private javax.swing.JTextField jTextField10;
1247
private javax.swing.JTextField jTextField11;
1248
private javax.swing.JTextField jTextField12;
1249
private javax.swing.JTextField jTextField13;
1250
private javax.swing.JTextField jTextField14;
1251
private javax.swing.JTextField jTextField2;
1252
private javax.swing.JTextField jTextField3;
1253
private javax.swing.JTextField jTextField4;
1254
private javax.swing.JTextField jTextField5;
1255
private javax.swing.JTextField jTextField6;
1256
private javax.swing.JTextField jTextField7;
1257
private javax.swing.JTextField jTextField8;
1258
private javax.swing.JTextField jTextField9;
1259
private javax.swing.JPanel mainPanel;
1260
private javax.swing.JMenuBar menuBar;
1261
private javax.swing.JProgressBar progressBar;
1262
private javax.swing.JLabel statusAnimationLabel;
1263
private javax.swing.JLabel statusMessageLabel;
1264
private javax.swing.JPanel statusPanel;
1265
// End of variables declaration
1266
private final Timer messageTimer;
1267
private final Timer busyIconTimer;
José Enrique Cabañas Ceballos
117
B.6. FACTOR_FRICCIONAPP.JAVA
1268
private final Icon idleIcon;
1269
private final Icon[] busyIcons = new Icon[15];
1270
private int busyIconIndex = 0;
1271
private JDialog aboutBox;
1272
}
B.6.
1
Factor_friccionApp.java
/*
2
* Factor_friccionApp.java
3
*/
4
5
package factor_friccion;
6
7
import org.jdesktop.application.Application;
8
import org.jdesktop.application.SingleFrameApplication;
9
10
/**
11
* The main class of the application.
12
*/
13
public class Factor_friccionApp extends SingleFrameApplication {
14
15
/**
16
* At startup create and show the main frame of the application.
17
*/
18
@Override protected void startup() {
show(new Factor_friccionView(this));
19
20
}
21
22
/**
José Enrique Cabañas Ceballos
118
B.7. FACTOR_FRICCIONABOUTBOX.JAVA
* This method is to initialize the specified window by
23
injecting resources.
* Windows shown in our application come fully initialized from
24
the GUI
25
* builder, so this additional configuration is not needed.
26
*/
27
@Override protected void configureWindow(java.awt.Window root) {
28
}
29
/**
30
31
* A convenient static getter for the application instance.
32
* @return the instance of Factor_friccionApp
33
*/
public static Factor_friccionApp getApplication() {
34
return Application.getInstance(Factor_friccionApp.class);
35
}
36
37
/**
38
39
* Main method launching the application.
40
*/
public static void main(String[] args) {
41
launch(Factor_friccionApp.class, args);
42
}
43
44
}
B.7.
1
Factor_friccionAboutBox.java
/*
2
* Factor_friccionAboutBox.java
3
*/
José Enrique Cabañas Ceballos
119
B.7. FACTOR_FRICCIONABOUTBOX.JAVA
4
5
package factor_friccion;
6
7
import org.jdesktop.application.Action;
8
9
public class Factor_friccionAboutBox extends javax.swing.JDialog {
10
11
public Factor_friccionAboutBox(java.awt.Frame parent) {
12
super(parent);
13
initComponents();
14
getRootPane().setDefaultButton(closeButton);
15
}
16
17
@Action public void closeAboutBox() {
dispose();
18
19
}
20
21
/** This method is called from within the constructor to
22
* initialize the form.
23
* WARNING: Do NOT modify this code. The content of this method
is
24
* always regenerated by the Form Editor.
25
*/
26
// <editor-fold defaultstate="collapsed" desc="Generated Code">
27
private void initComponents() {
28
29
closeButton = new javax.swing.JButton();
30
javax.swing.JLabel appTitleLabel = new javax.swing.JLabel();
31
javax.swing.JLabel versionLabel = new javax.swing.JLabel();
32
javax.swing.JLabel appVersionLabel = new javax.swing.JLabel
();
33
javax.swing.JLabel vendorLabel = new javax.swing.JLabel();
José Enrique Cabañas Ceballos
120
B.7. FACTOR_FRICCIONABOUTBOX.JAVA
34
javax.swing.JLabel appVendorLabel = new javax.swing.JLabel()
;
35
javax.swing.JLabel appDescLabel = new javax.swing.JLabel();
36
javax.swing.JLabel imageLabel = new javax.swing.JLabel();
37
javax.swing.JLabel vendorLabel1 = new javax.swing.JLabel();
38
javax.swing.JLabel appVendorLabel1 = new javax.swing.JLabel
();
39
40
setDefaultCloseOperation(javax.swing.WindowConstants.
DISPOSE_ON_CLOSE);
41
setTitle("CALCULAR FACTOR DE FRICCIÓN Y PÉRDIDA DE CARGA");
42
setModal(true);
43
setName("aboutBox"); // NOI18N
44
setResizable(false);
45
46
javax.swing.ActionMap actionMap = org.jdesktop.application.
Application.getInstance(factor_friccion.
Factor_friccionApp.class).getContext().getActionMap(
Factor_friccionAboutBox.class, this);
47
closeButton.setAction(actionMap.get("closeAboutBox")); //
NOI18N
48
closeButton.setName("closeButton"); // NOI18N
49
50
appTitleLabel.setFont(appTitleLabel.getFont().deriveFont(
appTitleLabel.getFont().getStyle() | java.awt.Font.BOLD,
appTitleLabel.getFont().getSize()+4));
51
appTitleLabel.setText("CALCULAR FACTOR DE FRICCIÓN EN
TUBERÍAS");
52
appTitleLabel.setName("appTitleLabel"); // NOI18N
53
54
versionLabel.setFont(versionLabel.getFont().deriveFont(
versionLabel.getFont().getStyle() | java.awt.Font.BOLD));
José Enrique Cabañas Ceballos
121
B.7. FACTOR_FRICCIONABOUTBOX.JAVA
55
org.jdesktop.application.ResourceMap resourceMap = org.
jdesktop.application.Application.getInstance(
factor_friccion.Factor_friccionApp.class).getContext().
getResourceMap(Factor_friccionAboutBox.class);
56
versionLabel.setText(resourceMap.getString("versionLabel.
text")); // NOI18N
57
versionLabel.setName("versionLabel"); // NOI18N
58
59
appVersionLabel.setText(" 1.1 ");
60
appVersionLabel.setName("appVersionLabel"); // NOI18N
61
62
vendorLabel.setFont(vendorLabel.getFont().deriveFont(
vendorLabel.getFont().getStyle() | java.awt.Font.BOLD));
63
vendorLabel.setText("Autor");
64
vendorLabel.setName("vendorLabel"); // NOI18N
65
66
appVendorLabel.setText("José Enrique Cabañas Ceballos");
67
appVendorLabel.setName("appVendorLabel"); // NOI18N
68
69
appDescLabel.setText("A simple Java desktop application
based on Swing Application Framework.");
70
appDescLabel.setName("appDescLabel"); // NOI18N
71
72
imageLabel.setIcon(resourceMap.getIcon("imageLabel.icon"));
// NOI18N
73
imageLabel.setName("imageLabel"); // NOI18N
74
75
vendorLabel1.setFont(vendorLabel1.getFont().deriveFont(
vendorLabel1.getFont().getStyle() | java.awt.Font.BOLD));
76
vendorLabel1.setText("Fecha última modidicación");
77
vendorLabel1.setName("vendorLabel1"); // NOI18N
78
José Enrique Cabañas Ceballos
122
B.7. FACTOR_FRICCIONABOUTBOX.JAVA
79
appVendorLabel1.setText("08/03/2010");
80
appVendorLabel1.setName("appVendorLabel1"); // NOI18N
81
82
javax.swing.GroupLayout layout = new javax.swing.GroupLayout
(getContentPane());
83
getContentPane().setLayout(layout);
84
layout.setHorizontalGroup(
85
layout.createParallelGroup(javax.swing.GroupLayout.
Alignment.LEADING)
86
.addGroup(layout.createSequentialGroup()
87
.addComponent(imageLabel)
88
.addGap(18, 18, 18)
89
.addGroup(layout.createParallelGroup(javax.swing.
GroupLayout.Alignment.LEADING)
90
.addComponent(appTitleLabel)
91
.addComponent(appDescLabel, javax.swing.
GroupLayout.DEFAULT_SIZE, 280, Short.
MAX_VALUE)
92
.addComponent(closeButton, javax.swing.
GroupLayout.Alignment.TRAILING)
93
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.
94
swing.GroupLayout.Alignment.LEADING)
95
.addComponent(versionLabel)
96
.addComponent(vendorLabel)
97
.addComponent(vendorLabel1))
.addPreferredGap(javax.swing.LayoutStyle.
98
ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.
99
swing.GroupLayout.Alignment.LEADING)
100
.addComponent(appVendorLabel1)
101
.addComponent(appVersionLabel)
José Enrique Cabañas Ceballos
123
B.7. FACTOR_FRICCIONABOUTBOX.JAVA
.addComponent(appVendorLabel))
102
.addGap(110, 110, 110)))
103
.addContainerGap())
104
105
);
106
layout.setVerticalGroup(
107
layout.createParallelGroup(javax.swing.GroupLayout.
Alignment.LEADING)
108
.addComponent(imageLabel, javax.swing.GroupLayout.
PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
109
.addGroup(layout.createSequentialGroup()
110
.addContainerGap()
111
.addComponent(appTitleLabel)
112
.addPreferredGap(javax.swing.LayoutStyle.
ComponentPlacement.RELATED)
113
.addComponent(appDescLabel)
114
.addPreferredGap(javax.swing.LayoutStyle.
ComponentPlacement.RELATED)
115
.addGroup(layout.createParallelGroup(javax.swing.
GroupLayout.Alignment.BASELINE)
116
.addComponent(versionLabel)
117
.addComponent(appVersionLabel))
118
.addPreferredGap(javax.swing.LayoutStyle.
ComponentPlacement.RELATED)
119
.addGroup(layout.createParallelGroup(javax.swing.
GroupLayout.Alignment.BASELINE)
120
.addComponent(vendorLabel)
121
.addComponent(appVendorLabel))
122
.addPreferredGap(javax.swing.LayoutStyle.
ComponentPlacement.RELATED)
123
.addGroup(layout.createParallelGroup(javax.swing.
GroupLayout.Alignment.BASELINE)
José Enrique Cabañas Ceballos
124
B.7. FACTOR_FRICCIONABOUTBOX.JAVA
124
.addComponent(vendorLabel1)
125
.addComponent(appVendorLabel1))
.addPreferredGap(javax.swing.LayoutStyle.
126
ComponentPlacement.RELATED, 33, Short.MAX_VALUE)
127
.addComponent(closeButton)
128
.addContainerGap())
);
129
130
pack();
131
}// </editor-fold>
132
133
134
// Variables declaration - do not modify
135
private javax.swing.JButton closeButton;
136
// End of variables declaration
137
138
}
José Enrique Cabañas Ceballos
125
ANEXO C. CÁLCULOS MEDIANTE MATLAB
Anexo C
CÁLCULOS MEDIANTE MATLAB
En este apéndice se exponen los programas de Matlab utilizados para la modelización de
las ecuaciones, representacion gráfica y cálculo de los parámetros del flujo:
C.1.
1
Tratamiento de los datos experimentales.
%declaracion de constantes:
2
3
diametro=13.6e-3; %metros
4
volumen=15; %litros
5
longitud=0.915; %metros
6
viscosidad=1e-6; %m^2/s
7
area=3.1415926*(diametro/2)^2; %m^2
8
areamm=3.1415926*(diametro*1000/2)^2; %mm^2
9
10
%definicion de los vectores de los tiempos medidos, y caidas de
presion y caudal
11
%calculo de la media y el error cometido(error cuadratico medio,
desviacion tipica):
José Enrique Cabañas Ceballos
126
C.1. TRATAMIENTO DE LOS DATOS...
12
13
tiempo1=[49.88, 49.43, 49.08, 49.25, 49.13, 49.7, 49.43, 49.63,
49.55, 49.67, 50.58, 50.13, 50.18, 49.91];
14
tmedio1=sum(tiempo1)/length(tiempo1);
15
caudal1=volumen./tiempo1;
16
cmedio1=sum(caudal1)/length(caudal1);
17
p1a=[525,525,525,525,525,525,525,525,525,525,530,530,530,530];
18
p1b=[140,140,145,145,145,145,145,145,145,145,150,150,150,150];
19
AP1=p1a-p1b;
20
P1=sum(AP1)/length(AP1);
21
for i=1:length(caudal1)
Z1(i)=(caudal1(i)-cmedio1)^2;
22
23
end
24
ecmc1=sqrt(sum(Z1)/length(caudal1));
25
for i=1:length(AP1)
C1(i)=(AP1(i)-P1)^2;
26
27
end
28
emcpc1=sqrt(sum(C1)/length(AP1));
29
epc1=std(AP1);
30
e1=std(tiempo1);
31
32
tiempo2=[53, 52.89, 52.78, 52.95, 53.13];
33
tmedio2=sum(tiempo2)/length(tiempo2);
34
caudal2=volumen./tiempo2;
35
cmedio2=sum(caudal2)/length(caudal2);
36
p2a=[525,525,525,525,530];
37
p2b=[185,185,185,185,185];
38
AP2=p2a-p2b;
39
P2=sum(AP2)/length(AP2);
40
for i=1:length(caudal2)
Z2(i)=(caudal2(i)-cmedio2)^2;
41
42
end
José Enrique Cabañas Ceballos
127
C.1. TRATAMIENTO DE LOS DATOS...
43
ecmc2=sqrt(sum(Z2)/length(caudal2));
44
for i=1:length(AP2)
C2(i)=(AP2(i)-P2)^2;
45
46
end
47
emcpc2=sqrt(sum(C2)/length(AP2));
48
epc2=std(AP2);
49
e2=std(tiempo2);
50
51
tiempo3=[57.25, 56.7, 56.98, 57.05, 57.13];
52
tmedio3=sum(tiempo3)/length(tiempo3);
53
caudal3=volumen./tiempo3;
54
cmedio3=sum(caudal3)/length(caudal3);
55
p3a=[520,520,520,520,525];
56
p3b=[220,220,220,220,220];
57
AP3=p3a-p3b;
58
P3=sum(AP3)/length(AP3);
59
for i=1:length(caudal3)
Z3(i)=(caudal3(i)-cmedio3)^2;
60
61
end
62
ecmc3=sqrt(sum(Z3)/length(caudal3));
63
for i=1:length(AP3)
C3(i)=(AP3(i)-P3)^2;
64
65
end
66
emcpc3=sqrt(sum(C3)/length(AP3));
67
epc3=std(AP3);
68
e3=std(tiempo3);
69
70
tiempo4=[67.17, 68.48, 67.36, 68.23, 68.01];
71
tmedio4=sum(tiempo4)/length(tiempo4);
72
caudal4=volumen./tiempo4;
73
cmedio4=sum(caudal4)/length(caudal4);
74
p4a=[510,510,515,510,510];
José Enrique Cabañas Ceballos
128
C.1. TRATAMIENTO DE LOS DATOS...
75
p4b=[290,290,290,290,290];
76
AP4=p4a-p4b;
77
P4=sum(AP4)/length(AP4);
78
for i=1:length(caudal4)
Z4(i)=(caudal4(i)-cmedio4)^2;
79
80
end
81
ecmc4=sqrt(sum(Z4)/length(caudal4));
82
for i=1:length(AP4)
C4(i)=(AP4(i)-P4)^2;
83
84
end
85
emcpc4=sqrt(sum(C4)/length(AP4));
86
epc4=std(AP4);
87
e4=std(tiempo4);
88
89
tiempo5=[89.86, 91.28, 91.41, 91.86, 90.53];
90
tmedio5=sum(tiempo5)/length(tiempo5);
91
caudal5=volumen./tiempo5;
92
cmedio5=sum(caudal5)/length(caudal5);
93
p5a=[505,500,500,500,500];
94
p5b=[370,370,370,370,370];
95
AP5=p5a-p5b;
96
P5=sum(AP5)/length(AP5);
97
for i=1:length(caudal5)
Z5(i)=(caudal5(i)-cmedio5)^2;
98
99
end
100
ecmc5=sqrt(sum(Z5)/length(caudal5));
101
for i=1:length(AP5)
C5(i)=(AP5(i)-P5)^2;
102
103
end
104
emcpc5=sqrt(sum(C5)/length(AP5));
105
epc5=std(AP5);
106
e5=std(tiempo5);
José Enrique Cabañas Ceballos
129
C.1. TRATAMIENTO DE LOS DATOS...
107
108
tiempo6=[131.84, 130.21, 131.97, 130.59, 130.91];
109
tmedio6=sum(tiempo6)/length(tiempo6);
110
caudal6=volumen./tiempo6;
111
cmedio6=sum(caudal6)/length(caudal6);
112
p6a=[495,495,495,490,490];
113
p6b=[425,425,425,425,425];
114
AP6=p6a-p6b;
115
P6=sum(AP6)/length(AP6);
116
for i=1:length(caudal6)
Z6(i)=(caudal6(i)-cmedio6)^2;
117
118
end
119
ecmc6=sqrt(sum(Z6)/length(caudal6));
120
for i=1:length(AP6)
C6(i)=(AP6(i)-P6)^2;
121
122
end
123
emcpc6=sqrt(sum(C6)/length(AP6));
124
epc6=std(AP6);
125
e6=std(tiempo6);
126
127
tiempo7=[155.96, 154.56, 153.28, 154.92, 153.88];
128
tmedio7=sum(tiempo7)/length(tiempo7);
129
caudal7=volumen./tiempo7;
130
cmedio7=sum(caudal7)/length(caudal7);
131
p7a=[490,490,490,490,495];
132
p7b=[440,440,440,440,440];
133
AP7=p7a-p7b;
134
P7=sum(AP7)/length(AP7);
135
for i=1:length(caudal7)
Z7(i)=(caudal7(i)-cmedio7)^2;
136
137
end
138
ecmc7=sqrt(sum(Z7)/length(caudal7));
José Enrique Cabañas Ceballos
130
C.1. TRATAMIENTO DE LOS DATOS...
139
for i=1:length(AP7)
C7(i)=(AP7(i)-P7)^2;
140
141
end
142
emcpc7=sqrt(sum(C7)/length(AP7));
143
epc7=std(AP7);
144
e7=std(tiempo7);
145
146
tiempo8=[167.55, 165.36, 166.45, 165.94, 166.91];
147
tmedio8=sum(tiempo8)/length(tiempo8);
148
caudal8=(volumen./tiempo8);
149
cmedio8=sum(caudal8)/length(caudal8);
150
p8a=[485,485,485,480,485];
151
p8b=[440,440,440,440,440];
152
AP8=p8a-p8b;
153
P8=sum(AP8)/length(AP8);
154
for i=1:length(caudal8)
Z8(i)=(caudal8(i)-cmedio8)^2;
155
156
end
157
ecmc8=sqrt(sum(Z8)/length(caudal8));
158
for i=1:length(AP8)
C8(i)=(AP8(i)-P8)^2;
159
160
end
161
emcpc8=sqrt(sum(C8)/length(AP8));
162
epc8=std(AP8);
163
e8=std(tiempo8);
164
165
166
%creacion de los vectores de los parametros:
ecmpc=[emcpc1,emcpc2,emcpc3,emcpc4,emcpc5,emcpc6,emcpc7,emcpc8]; %
error cuadratico medio perdida de carga
167
ecmc=[ecmc1,ecmc2,ecmc3,ecmc4,ecmc5,ecmc6,ecmc7,ecmc8]; %error
cuadratico medio caudal
168
errort=[e1,e2,e3,e4,e5,e6,e7,e8]; %desviacion tipica caudal
José Enrique Cabañas Ceballos
131
C.1. TRATAMIENTO DE LOS DATOS...
169
errorpc=[epc1,epc2,epc3,epc4,epc5,epc6,epc7,epc8]; %desviacion tipica
perdida de carga
170
pc=[P1,P2,P3,P4,P5,P6,P7,P8]; %milimetros
171
PC=0.001.*pc; %metros
172
PCM=1./longitud.*PC; %perdida de carga por metro de longitud
expresada en metros
173
tiempo=[tmedio1,tmedio2,tmedio3,tmedio4,tmedio5,tmedio6,tmedio7,
tmedio8]; %vector de tiempos medios
174
caudal=[cmedio1,cmedio2,cmedio3,cmedio4,cmedio5,cmedio6,cmedio7,
cmedio8]; %litros/s
175
caudalm3=0.001.*caudal; %m^3/s
176
velocidad=(1/area).*caudalm3; %m/s
177
Re=(diametro/viscosidad).*velocidad;
178
flam=64./Re;
179
180
% Aplicando el modelo de Darcy-Weisbach (1875):
181
cte=(2*9.81*diametro/longitud);
182
for i=1:8
f(i)=PC(i)*cte/(velocidad(i)^2);
183
184
end
185
f;
186
187
% Para el calculo de la rugosidad aplicaremos el modelo de colebrook
188
for i=1:8
189
r(i)=3.71*diametro*(10^(-1/(2*sqrt(f(i))))-2.51/(Re(i)*sqrt(f(i))));
%rugosidad absoluta en metros
190
rr(i)=r(i)/diametro; %rugosidad relativa
191
end
192
r;
193
rr;
José Enrique Cabañas Ceballos
132
C.2. REPRESENTACIÓN GRÁFICA DE LA...
C.2.
Representación gráfica de la dependencia de las variables respecto al número de Reynolds.
1
%VARIABLES
2
3
Re1=[100:100:10000];
4
Re2=[10000:1000:10e8];
5
Re=[Re1 Re2];
6
f=[0:0.001:1];
7
e1=0.0000001;
8
e3=0.00001;
9
e4=0.0001;
10
e6=0.01;
11
12
%ECUACIONES
13
14
15
%laminar
laminar=64./Re;
16
17
%explicita
18
19
explicita1=1./(-2.*log10(e1/3.7065-(5.0272./Re).*log10(e1
/3.827-(4.567./Re).*log10((e1/7.7918)^0.9924+(5.3326./(Re
+208.815)).^0.9345)))).^2;
20
21
%=1./(-2.*log10(e2/3.7065-(5.0272./Re).*log10(e2/3.827-(4.567./Re).*
log10((e2/7.7918)^0.9924+(5.3326./(Re+208.815)).^0.9345)))).^2;
22
23
explicita3=1./(-2.*log10(e3/3.7065-(5.0272./Re).*log10(e3
/3.827-(4.567./Re).*log10((e3/7.7918)^0.9924+(5.3326./(Re
+208.815)).^0.9345)))).^2;
José Enrique Cabañas Ceballos
133
C.3. REPRESENTACIÓN GRÁFICA DE LOS...
24
25
explicita4=1./(-2.*log10(e4/3.7065-(5.0272./Re).*log10(e4
/3.827-(4.567./Re).*log10((e4/7.7918)^0.9924+(5.3326./(Re
+208.815)).^0.9345)))).^2;
26
27
%explicita5=1./(-2.*log10(e5/3.7065-(5.0272./Re).*log10(e5
/3.827-(4.567./Re).*log10((e5/7.7918)^0.9924+(5.3326./(Re
+208.815)).^0.9345)))).^2;
28
29
explicita6=1./(-2.*log10(e6/3.7065-(5.0272./Re).*log10(e6
/3.827-(4.567./Re).*log10((e6/7.7918)^0.9924+(5.3326./(Re
+208.815)).^0.9345)))).^2;
30
31
%GRAFICOS
32
33
plot(Re,laminar,’g’);
34
hold on
35
plot(Re,explicita1,’b’);
36
%plot(Re,explicita2,’r’);
37
plot(Re,explicita3,’k’);
38
plot(Re,explicita4,’c’);
39
%plot(Re,explicita5,’r’);
40
plot(Re,explicita6,’r’);
41
hold off
C.3.
1
Representación gráfica de los modelos teóricos.
%VARIABLES
2
3
Re1=[100:100:10000];
José Enrique Cabañas Ceballos
134
C.3. REPRESENTACIÓN GRÁFICA DE LOS...
4
Re2=[10000:1000:10e8];
5
Re=[Re1 Re2];
6
f=[0:0.001:1];
7
e1=0.0000001;
8
e3=0.00001;
9
e4=0.0001;
10
e6=0.01;
11
12
%ECUACIONES
13
14
15
%laminar
laminar=64./Re;
16
17
%explicita
18
19
explicita1=1./(-2.*log10(e1/3.7065-(5.0272./Re).*log10(e1
/3.827-(4.567./Re).*log10((e1/7.7918)^0.9924+(5.3326./(Re
+208.815)).^0.9345)))).^2;
20
21
%=1./(-2.*log10(e2/3.7065-(5.0272./Re).*log10(e2/3.827-(4.567./Re).*
log10((e2/7.7918)^0.9924+(5.3326./(Re+208.815)).^0.9345)))).^2;
22
23
explicita3=1./(-2.*log10(e3/3.7065-(5.0272./Re).*log10(e3
/3.827-(4.567./Re).*log10((e3/7.7918)^0.9924+(5.3326./(Re
+208.815)).^0.9345)))).^2;
24
25
explicita4=1./(-2.*log10(e4/3.7065-(5.0272./Re).*log10(e4
/3.827-(4.567./Re).*log10((e4/7.7918)^0.9924+(5.3326./(Re
+208.815)).^0.9345)))).^2;
26
27
%explicita5=1./(-2.*log10(e5/3.7065-(5.0272./Re).*log10(e5
/3.827-(4.567./Re).*log10((e5/7.7918)^0.9924+(5.3326./(Re
José Enrique Cabañas Ceballos
135
C.3. REPRESENTACIÓN GRÁFICA DE LOS...
+208.815)).^0.9345)))).^2;
28
29
explicita6=1./(-2.*log10(e6/3.7065-(5.0272./Re).*log10(e6
/3.827-(4.567./Re).*log10((e6/7.7918)^0.9924+(5.3326./(Re
+208.815)).^0.9345)))).^2;
30
31
%GRAFICOS
32
33
plot(Re,laminar,’g’);
34
hold on
35
plot(Re,explicita1,’b’);
36
%plot(Re,explicita2,’r’);
37
plot(Re,explicita3,’k’);
38
plot(Re,explicita4,’c’);
39
%plot(Re,explicita5,’r’);
40
plot(Re,explicita6,’r’);
41
hold off
José Enrique Cabañas Ceballos
136
Descargar