UNIVERSIDAD DE CASTILLA - LA MANCHA
ESCUELA TÉCNICA SUPERIORDE 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. Con-
cretamente 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 em-
bargo, 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 resul-
tados 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 flui-
dos.
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 ac-
tú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 denomi-
na 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 a-
rrojado 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óri-
cos 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, ρU2, 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»:
Efectos de inercia
Efectos viscosos=
ρU2
µU/L=ρUL
µ(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 mo-
vimiento 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 tempera-
tura 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 tem-
peratura 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 propor-
cional al diámetro del tubo, confirmando así que el flujo laminar se empieza a alterar en un
valor definido por el parámetro ρUL/µ.
Estos ensayos, realizados con sumo cuidado en muchísimas condiciones distintas, le per-
mitieron 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 propor-
cional 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 =64
Re. (1.4)
1.3.3. 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√f
= −2,0 log10
(εr
3,7065+
2,5226
Re√f
). (1.5)
1.3.4. 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√f
= 2,0 log10
(Re√f
2, 51
). (1.6)
1.3.5. 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√f
= −2,0 log10
(εr
3, 71
). (1.7)
1.3.6. 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 experi-
mental 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. Habi-
tualmente 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 pro-
cedimiento están detallados en [5] y su expresión es la siguiente:
1√f
= −2,0 log10
(εr
3,7065−
− 5,0272
Relog10
{εr
3,827− 4,567
Relog10
[(εr
7,7918
)0,9924
−(
5,3326
208,815 +Re
)0,9345]}),
(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:
f = 8
[(8
Re
)12
+1
(A+B)1,5
]1/12, (1.9)
donde A y B toman la forma:
A =
{2,457 log
[1
( 7Re
)0,9 + 0,27εr
]}16
, (1.10)
B =
(37530
Re
)16
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 pre-
sentadas. 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 en-
tre 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 ex-
perimento 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 reuti-
lizada.
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 con-
tinuació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 trans-
curre 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
∆t[l/s] (2.1)
La presión relativa es medida por su relación con la altura de columna de agua, una conec-
tada a un punto de la instalación y otra conectada a otro. Esta presión es directamente propor-
cional 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 despla-
zado 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ítica-
mente, 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 25oC.
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 si-
guiente 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 Darcy-
Weisbach, 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] =fLV 2
2Dg
[m3/s2]
[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] =2DghfLV 2
[m3/s2]
[m3/s2]. (2.3)
Para calcular la rugosidad de la tubería, en este proyecto se utiliza la ecuación de Colebrook-
White:
1√f
= −2,0 log10
(εr
3,7065+
2,5226
Re√f
). (2.4)
Como observamos esta ecuación es una función implícita en el factor de fricción, sin em-
bargo se convierte en una función explícita al tener como única incógnita la rugosidad. Operan-
do 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ím-
plemente 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] =ε
D
[m]
[m]. (2.6)
Por lo que calculado directamente se obtiene:
εr =ε
D= 3,7065
(10−1√f − 2,5226
Re√f
). (2.7)
José Enrique Cabañas Ceballos 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, con-
cluyendo que los datos se ajustan de manera precisa al diagrama, por lo tanto se puede com-
parar 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−6m2/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 Número Factor Rugosidad
medio de carga (m/s) de de relativa
(l/s) (mm) Reynolds frición
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
Tabla 3.1: Resultados experimentales
Podemos observar como la instalación experimental del laboratorio tiene unas posibili-
dades 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 uti-
lizando 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 anterior-
mente 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, cuan-
do 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 eleva-
do, 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 turbu-
lento 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 Cole-
brook 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 complica-
dos 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 Cole-
brook 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: in-
terface 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 re-
sultados 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 Darcy-
Weisbach 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 compor-
tamiento 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 mante-
niendo 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 ru-
gosidad 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 fac-
tor 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 apli-
cació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 con-
tí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 aumen-
tando 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 pro-
cede 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 apli-
cació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 rea-
lizació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 fric-
tion 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 Bul-
letin 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écni-
ca 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 in-
tuitiva 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é selec-
cionada. 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 mostran-
do 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 estruc-
tura 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 aproximada-
mente 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 simple-
mente 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){
10 this.nombre = nom;
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(){
18 return this.nombre;
19 }
20 public void setNombre(String nombre){
21 this.nombre = nombre;
22 }
23 public double getDensidad(){
24 return this.densidad;
25 }
26 public void setDensidad(double den){
27 this.densidad = den;
28 }
29 public double getViscosidad(){
30 return this.viscosidad;
31 }
32 public void setViscosidad(double vis){
33 this.viscosidad = vis;
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 }
71 public static double getMedia(double a,double b,double c,double
Re,double e){
72 double media = 0;
73 if (e>0.00001){
74 media=(a+b)/2;
75 }
76 else{
77 media= (a+b+c)/3;
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 {
87 s=64/Re;
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 }
100 while(X>0.000001);
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 {
111 s=64/Re;
112 }
113
114 else //if (Re>2100)
115 {
116 if(e==0)
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))+
120 Math.pow((5.3326/(208.815+Re)),0.9345))));
121 s=1/(a*a);
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))+
125 Math.pow((5.3326/(208.815+Re)),0.9345))));
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 public static double getFactor2(double Re, double D, double e)
133 {
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);
136 a=Math.pow((2.457*Math.log(1/((Math.pow((7/Re),0.9))+(0.27*e
/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));
142 //s=8*Math.pow((Math.pow((8/Re),12)+(1/(Math.pow((a+b),1.5))
)),(1/12));
143 return s;
144 }
145 //Metodo que resuelve la ecuación de Prandtl del factor de
fricción.
146 public static double getFactor3(double Re)
147 {
José Enrique Cabañas Ceballos 58
B.1. CÁLCULOS
148 double f,x,X=0;
149 x=0.000000000001;
150 do
151 {
152 f=Math.pow(1/(2*Math.log10((Re*Math.sqrt(x))/2.51))
,2);
153 X=Math.abs(x-f);
154 x=x+0.000001;
155 }
156 while(X>0.000001);
157 return x;
158 }
159 //Metodo que resuelve la ecuación de Karman-Nikuradse del factor
de fricción.
160 public static double getFactor4(double D, double e,double Re)
161 {
162 double f,x,X=0;
163 f=1/Math.pow((-2*Math.log10(e/(3.71*D))),2);
164
165 return f;
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){
9 this.nombre = nom;
10 this.rugosidad = rugosidad;
11 }
12 public String getNombre(){
13 return this.nombre;
14 }
15 public void setNombre(String nombre){
16 this.nombre = nombre;
17 }
18 public double getRugosidad(){
19 return this.rugosidad;
20 }
21 public void setRugosidad(double vis){
22 this.rugosidad = vis;
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 /*
14 // Apertura del fichero y creacion de BufferedReader para
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 {
26 e.printStackTrace();
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 {
37 fr.close();
38 }
39 }
40 catch (Exception e2)
41 {
42 e2.printStackTrace();
43 }
44 }
45 int y=0;
46 for(int w=0;w<linea.length();w++)
47 {
48 //recorrer el String linea
49 if (linea.charAt(w) == ’;’)//condicion de que caracter
sea ";"
50 {
51 y=y+1;//contador de caracteres ";"para poder
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...
58 W[b]="";
59 }
60 int a=0;
61 for(int t=0;t<linea.length();t++)
62 {
63 //recorrer el String linea
64 if (linea.charAt(t) != ’;’)
65 {
66 W[a] = W[a]+ Character.toString(linea.charAt(t));
67 }
68 else// (linea.charAt(t) == ’;’)
69 {
70 a=a+1;
71 }
72 }
73
74 System.out.println("hay "+y+" ; en el archivo");
75
76 return W;
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 /*
16 // Apertura del fichero y creacion de BufferedReader para
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 {
28 e.printStackTrace();
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 {
39 fr.close();
40 }
41 }
42 catch (Exception e2)
43 {
44 e2.printStackTrace();
45 }
46 }
47 int y=0;
48 for(int w=0;w<linea.length();w++)
49 {
50 //recorrer el String linea
51 if (linea.charAt(w) == ’;’)//condicion de que caracter
sea ";"
52 {
53 y=y+1;//contador de caracteres ";"para poder
subdividir linea
54 }
55 }
56 String [] W=new String [y];
57
58 for(int b=0;b<y;b++)
59 {
60 W[b]="";
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 {
68 W[a] = W[a]+ Character.toString(linea.charAt(t));
69 }
70 else// (linea.charAt(t) == ’;’)
71 {
72 a=a+1;
73 }
74 }
75
76 System.out.println("hay "+y+" ; en el archivo");
77
78 return W;
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
() {
63 public void actionPerformed(ActionEvent e) {
64 statusMessageLabel.setText("");
65 }
66 });
67 messageTimer.setRepeats(false);
68 int busyAnimationRate = resourceMap.getInteger("StatusBar.
busyAnimationRate");
69 for (int i = 0; i < busyIcons.length; i++) {
70 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() {
73 public void actionPerformed(ActionEvent e) {
74 busyIconIndex = (busyIconIndex + 1) % busyIcons.
length;
75 statusAnimationLabel.setIcon(busyIcons[busyIconIndex
]);
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);
100 } else if ("message".equals(propertyName)) {
101 String text = (String)(evt.getNewValue());
102 statusMessageLabel.setText((text == null) ? "" :
text);
103 messageTimer.restart();
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() {
116 if (aboutBox == null) {
117 JFrame mainFrame = Factor_friccionApp.getApplication().
getMainFrame();
118 aboutBox = new Factor_friccionAboutBox(mainFrame);
119 aboutBox.setLocationRelativeTo(mainFrame);
120 }
121 Factor_friccionApp.getApplication().show(aboutBox);
122 }
123
124 /** This method is called from within the constructor to
125 * 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
() {
211 public void actionPerformed(java.awt.event.ActionEvent
evt) {
212 jButton1ActionPerformed(evt);
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() {
219 public void actionPerformed(java.awt.event.ActionEvent
evt) {
220 jComboBox1ActionPerformed(evt);
221 }
222 });
223
224 jCheckBox1.setText("DENSIDAD(kg/m3)");
225 jCheckBox1.setName("jCheckBox1"); // NOI18N
226 jCheckBox1.addActionListener(new java.awt.event.
ActionListener() {
227 public void actionPerformed(java.awt.event.ActionEvent
evt) {
228 jCheckBox1ActionPerformed(evt);
229 }
230 });
231
232 jCheckBox2.setText("VISCOSIDAD(m2/s)");
233 jCheckBox2.setName("jCheckBox2"); // NOI18N
234 jCheckBox2.addActionListener(new java.awt.event.
ActionListener() {
235 public void actionPerformed(java.awt.event.ActionEvent
evt) {
236 jCheckBox2ActionPerformed(evt);
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() {
243 public void actionPerformed(java.awt.event.ActionEvent
evt) {
244 jCheckBox3ActionPerformed(evt);
245 }
246 });
247
248 jCheckBox4.setText("RUGOSIDAD(mm)");
249 jCheckBox4.setName("jCheckBox4"); // NOI18N
250 jCheckBox4.addActionListener(new java.awt.event.
ActionListener() {
251 public void actionPerformed(java.awt.event.ActionEvent
evt) {
252 jCheckBox4ActionPerformed(evt);
253 }
254 });
255
256 jCheckBox5.setText("CAUDAL(m3/s)");
257 jCheckBox5.setName("jCheckBox5"); // NOI18N
258 jCheckBox5.addActionListener(new java.awt.event.
ActionListener() {
259 public void actionPerformed(java.awt.event.ActionEvent
evt) {
260 jCheckBox5ActionPerformed(evt);
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() {
267 public void actionPerformed(java.awt.event.ActionEvent
evt) {
268 jCheckBox6ActionPerformed(evt);
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() {
289 public void actionPerformed(java.awt.event.ActionEvent
evt) {
290 jComboBox2ActionPerformed(evt);
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() {
297 public void actionPerformed(java.awt.event.ActionEvent
evt) {
298 jCheckBox7ActionPerformed(evt);
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 (m)");
336 jLabel12.setName("jLabel12"); // NOI18N
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
()
351 .addGroup(mainPanelLayout.
createParallelGroup(javax.swing.
José Enrique Cabañas Ceballos 78
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
GroupLayout.Alignment.LEADING)
352 .addGroup(mainPanelLayout.
createSequentialGroup()
353 .addGroup(mainPanelLayout.
createParallelGroup(javax.swing.
GroupLayout.Alignment.TRAILING)
354 .addComponent(jCheckBox1, javax.
swing.GroupLayout.Alignment.
LEADING)
355 .addComponent(jCheckBox2, javax.
swing.GroupLayout.Alignment.
LEADING)
356 .addComponent(jCheckBox3, javax.
swing.GroupLayout.Alignment.
LEADING)
357 .addComponent(jCheckBox4, javax.
swing.GroupLayout.Alignment.
LEADING)
358 .addComponent(jCheckBox5, javax.
swing.GroupLayout.Alignment.
LEADING)
359 .addGroup(javax.swing.
GroupLayout.Alignment.LEADING
, mainPanelLayout.
createSequentialGroup()
360 .addComponent(jLabel1, javax
.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))
363 .addComponent(jButton1, javax.
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)
369 .addComponent(jLabel9, javax.swing.
GroupLayout.DEFAULT_SIZE, 397, Short.
MAX_VALUE)
370 .addComponent(jLabel10))
371 .addPreferredGap(javax.swing.LayoutStyle.
ComponentPlacement.RELATED)
372 .addGroup(mainPanelLayout.
createParallelGroup(javax.swing.
GroupLayout.Alignment.LEADING)
373 .addComponent(jLabel7, javax.swing.
GroupLayout.DEFAULT_SIZE, 216, Short.
MAX_VALUE)
José Enrique Cabañas Ceballos 80
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
374 .addGroup(mainPanelLayout.
createParallelGroup(javax.swing.
GroupLayout.Alignment.TRAILING, false
)
375 .addComponent(jTextField13, javax.
swing.GroupLayout.Alignment.
LEADING)
376 .addComponent(jTextField8, javax.
swing.GroupLayout.Alignment.
LEADING)
377 .addComponent(jTextField1, javax.
swing.GroupLayout.Alignment.
LEADING)
378 .addComponent(jTextField2, javax.
swing.GroupLayout.Alignment.
LEADING)
379 .addComponent(jTextField3, javax.
swing.GroupLayout.Alignment.
LEADING)
380 .addComponent(jTextField4, javax.
swing.GroupLayout.Alignment.
LEADING)
381 .addComponent(jTextField5, javax.
swing.GroupLayout.Alignment.
LEADING)
382 .addComponent(jTextField6, javax.
swing.GroupLayout.Alignment.
LEADING)
383 .addComponent(jTextField7, javax.
swing.GroupLayout.Alignment.
LEADING)
384 .addComponent(jTextField9, javax.
José Enrique Cabañas Ceballos 81
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
swing.GroupLayout.Alignment.
LEADING)
385 .addComponent(jTextField11, javax.
swing.GroupLayout.Alignment.
LEADING)
386 .addComponent(jTextField12, javax.
swing.GroupLayout.Alignment.
LEADING)
387 .addComponent(jComboBox2, javax.
swing.GroupLayout.Alignment.
LEADING, 0, 181, Short.MAX_VALUE)
388 .addComponent(jTextField14, javax.
swing.GroupLayout.Alignment.
LEADING))))
389 .addComponent(jLabel2, javax.swing.GroupLayout.
PREFERRED_SIZE, 128, javax.swing.GroupLayout.
PREFERRED_SIZE)
390 .addComponent(jLabel12))
391 .addContainerGap())
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 .addComponent(jLabel8))
446 .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 .addComponent(jLabel10))
454 .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 .addGroup(statusPanelLayout.createSequentialGroup()
504 .addGroup(statusPanelLayout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING)
José Enrique Cabañas Ceballos 88
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
505 .addGroup(statusPanelLayout.
createSequentialGroup()
506 .addContainerGap()
507 .addComponent(statusMessageLabel))
508 .addGroup(statusPanelLayout.
createSequentialGroup()
509 .addGap(72, 72, 72)
510 .addComponent(jLabel3, javax.swing.
GroupLayout.PREFERRED_SIZE, 142, javax.
swing.GroupLayout.PREFERRED_SIZE)))
511 .addPreferredGap(javax.swing.LayoutStyle.
ComponentPlacement.RELATED, 267, Short.MAX_VALUE)
512 .addComponent(progressBar, javax.swing.GroupLayout.
PREFERRED_SIZE, javax.swing.GroupLayout.
DEFAULT_SIZE, javax.swing.GroupLayout.
PREFERRED_SIZE)
513 .addPreferredGap(javax.swing.LayoutStyle.
ComponentPlacement.RELATED)
514 .addComponent(statusAnimationLabel)
515 .addContainerGap())
516 );
517 statusPanelLayout.setVerticalGroup(
518 statusPanelLayout.createParallelGroup(javax.swing.
GroupLayout.Alignment.LEADING)
519 .addGroup(statusPanelLayout.createSequentialGroup()
520 .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
523 .addGroup(statusPanelLayout.
createSequentialGroup()
524 .addGroup(statusPanelLayout.
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))
528 .addGap(3, 3, 3))
529 .addComponent(jLabel3, javax.swing.GroupLayout.
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(
537 jPanel1Layout.createParallelGroup(javax.swing.
GroupLayout.Alignment.LEADING)
538 .addGap(0, 100, Short.MAX_VALUE)
539 );
540 jPanel1Layout.setVerticalGroup(
541 jPanel1Layout.createParallelGroup(javax.swing.
GroupLayout.Alignment.LEADING)
542 .addGap(0, 100, Short.MAX_VALUE)
543 );
544
José Enrique Cabañas Ceballos 90
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
545 jLabel11.setText(resourceMap.getString("jLabel11.text")); //
NOI18N
546 jLabel11.setName("jLabel11"); // NOI18N
547
548 jTextField10.setText(resourceMap.getString("jTextField10.
text")); // NOI18N
549 jTextField10.setName("jTextField10"); // NOI18N
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 {
570 Den = 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 {
583 q = Double.parseDouble(jTextField5.getText
());
584 if (jCheckBox6.isSelected())
585 {
586 Re = Double.parseDouble(jTextField6.
getText());
587 if (jCheckBox7.isSelected())
588 {
589 vel = Double.parseDouble(jTextField7
.getText());
590 vel1=calculos.getVelocidad(q,D);
591 vel2=calculos.getVel(Re,D,vis);
592 if(vel1!=vel2)
593 {
594 jLabel7.setText("problemas de
compatibilidad!!! necesario
desmarcar alguna variable");
595 }
596 }
597 else
598 {
599 vel1=calculos.getVelocidad(q,D);
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 {
603 jLabel7.setText("sistema
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 {
613 vel = Double.parseDouble(jTextField7
.getText());
614 vel1 = Double.parseDouble(
jTextField7.getText());
615 vel2=calculos.getVelocidad(q,D);
616 if(vel1!=vel2)
617 {
618 jLabel7.setText("sistema
incompatible desmarca alguna
variable");
619 jTextField7.setText(""+vel1);
620
621 }
622 Re=calculos.getReynolds(D, vel, vis)
;
623 jTextField6.setText(""+Re);
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)
;
630 jTextField6.setText(""+Re);
631 }
632 }
633 }
634 else
635 {
636 if (jCheckBox6.isSelected())
637 {
638 Re = Double.parseDouble(jTextField6.
getText());
639 if (jCheckBox7.isSelected())
640 {
641 vel = Double.parseDouble(jTextField7
.getText());
642 Re1=calculos.getReynolds(D, vel, vis
);
643 if(Re!=Re1)
644 {
645 jLabel7.setText("problemas de
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 {
662 vel = Double.parseDouble(jTextField7
.getText());
663 q=calculos.getCaudal(D, vel);
664 jTextField5.setText(""+q);
665 Re=calculos.getReynolds(D, vel, vis)
;
666 jTextField6.setText(""+Re);
667 }
668 else
669 {
670
671 jLabel7.setText("datos insuficientes
");
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 {
683 Re = Double.parseDouble(jTextField6.
getText());
684 if (jCheckBox7.isSelected())
685 {
686 vel = Double.parseDouble(jTextField7
.getText());
687 jLabel7.setText("necesario dato
rugosidad");
688 }
689 else
690 {
691 jLabel7.setText("necesario dato
rugosidad");
692 }
693 }
694 else
695 {
696 if (jCheckBox7.isSelected())
697 {
698 vel = Double.parseDouble(jTextField7
.getText());
699 jLabel7.setText("necesario dato
rugosidad");
700 }
701 else
702 {
703 jLabel7.setText("necesario dato
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 {
711 Re = Double.parseDouble(jTextField6.
getText());
712 if (jCheckBox7.isSelected())
713 {
714 vel = Double.parseDouble(jTextField7
.getText());
715 jLabel7.setText("necesario dato
rugosidad");
716 }
717 else
718 {
719 jLabel7.setText("necesario dato
rugosidad");
720 }
721 }
722 else
723 {
724 if (jCheckBox7.isSelected())
725 {
726 vel = Double.parseDouble(jTextField7
.getText());
727 jLabel7.setText("necesario dato
rugosidad");
728 }
José Enrique Cabañas Ceballos 97
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
729 else
730 {
731 jLabel7.setText("necesario dato
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 {
744 q = Double.parseDouble(jTextField5.getText
());
745 if (jCheckBox6.isSelected())
746 {
747 Re = Double.parseDouble(jTextField6.
getText());
748 if (jCheckBox7.isSelected())
749 {
750 vel = Double.parseDouble(jTextField7
.getText());
751 D1=calculos.getD(Re, vis, vel);
752 D2=calculos.getD(q, vel);
753 if(D1!=D2){
754 jLabel7.setText("problemas de
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 {
772 vel = Double.parseDouble(jTextField7
.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 {
780 jLabel7.setText("datos insuficientes
");
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 {
788 Re = Double.parseDouble(jTextField6.
getText());
789 if (jCheckBox7.isSelected())
790 {
791 vel = Double.parseDouble(jTextField7
.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 {
799 jLabel7.setText("datos insuficientes
");
800 }
801 }
802 else
803 {
804 if (jCheckBox7.isSelected())
805 {
806 vel = Double.parseDouble(jTextField7
.getText());
807 jLabel7.setText("datos insuficientes
");
808 }
809 else
810 {
811 jLabel7.setText("datos insuficientes
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 {
823 Re = Double.parseDouble(jTextField6.
getText());
824 if (jCheckBox7.isSelected())
825 {
826 vel = Double.parseDouble(jTextField7
.getText());
827 jLabel7.setText("necesario dato
rugosidad");
828 }
829 else
830 {
831 jLabel7.setText("necesario dato
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
838 vel = Double.parseDouble(jTextField7
.getText());
839 jLabel7.setText("necesario dato
rugosidad");
840 }
841 else
842 {
843 jLabel7.setText("necesario dato
rugosidad");
844 }
845 }
846 }
847 else
848 {
849 if (jCheckBox6.isSelected())
850 {
851 Re = Double.parseDouble(jTextField6.
getText());
852 if (jCheckBox7.isSelected())
853 {
854 vel = Double.parseDouble(jTextField7
.getText());
855 jLabel7.setText("necesario dato
rugosidad");
856 }
857 else
858 {
859 jLabel7.setText("necesario dato
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 {
866 vel = Double.parseDouble(jTextField7
.getText());
867 jLabel7.setText("necesario dato
rugosidad");
868 }
869 else
870 {
871 jLabel7.setText("necesario dato
rugosidad");
872 }
873 }
874 }
875 }
876 }
877 }
878 else
879 {
880 if(jCheckBox3.isSelected())
881 {
882 D = Double.parseDouble(jTextField3.getText());
883 if(jCheckBox4.isSelected())
884 {
885 e = Double.parseDouble(jTextField4.getText());
886 if(jCheckBox5.isSelected())
887 {
888 q = 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
891 Re = Double.parseDouble(jTextField6.
getText());
892 if (jCheckBox7.isSelected())
893 {
894 vel = Double.parseDouble(jTextField7
.getText());
895 vel1=calculos.getVelocidad(q, D);
896 if(vel!=vel1){
897 jLabel7.setText("problemas de
compatibilidad!!! desmarca
alguna variable");
898 }
899 vis=calculos.getViscosidad(Re,D,vel)
;
900 jTextField2.setText(""+vis);
901 }
902 else
903 {
904 vel=calculos.getVelocidad(q, D);
905 jTextField7.setText(""+vel);
906 vis=calculos.getViscosidad(Re, D,
vel);
907 jTextField2.setText(""+vis);
908
909 }
910 }
911 else
912 {
913 if (jCheckBox7.isSelected())
914 {
915 vel = Double.parseDouble(jTextField7
.getText());
José Enrique Cabañas Ceballos 104
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
916 jLabel7.setText("datos infuficientes
");
917 }
918 else
919 {
920 jLabel7.setText("datos insuficientes"
);
921 }
922 }
923 }
924 else
925 {
926 if (jCheckBox6.isSelected())
927 {
928 Re = Double.parseDouble(jTextField6.
getText());
929 if (jCheckBox7.isSelected())
930 {
931 vel = Double.parseDouble(jTextField7
.getText());
932 q=calculos.getCaudal(D, vel);
933 jTextField5.setText(""+q);
934 vis=calculos.getViscosidad(Re, D,
vel);
935 jTextField2.setText(""+vis);
936 }
937 else
938 {
939 jLabel7.setText("datos insuficientes
");
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 {
946 vel = Double.parseDouble(jTextField7
.getText());
947 jLabel7.setText("datos insuficientes
");
948 }
949 else
950 {
951 jLabel7.setText("datos insuficientes
");
952 }
953 }
954 }
955 }
956 else
957 {
958 if(jCheckBox5.isSelected())
959 {
960 q = Double.parseDouble(jTextField5.getText
());
961 if (jCheckBox6.isSelected())
962 {
963 Re = Double.parseDouble(jTextField6.
getText());
964 if (jCheckBox7.isSelected())
965 {
966 vel = Double.parseDouble(jTextField7
.getText());
967 jLabel7.setText("necesario dato
José Enrique Cabañas Ceballos 106
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
rugosidad");
968 }
969 else
970 {
971 jLabel7.setText("necesario dato
rugosidad");
972 }
973 }
974 else
975 {
976 if (jCheckBox7.isSelected())
977 {
978 vel = Double.parseDouble(jTextField7
.getText());
979 jLabel7.setText("necesario dato
rugosidad");
980 }
981 else
982 {
983 jLabel7.setText("necesario dato
rugosidad");
984 }
985 }
986 }
987 else
988 {
989 if (jCheckBox6.isSelected())
990 {
991 Re = Double.parseDouble(jTextField6.
getText());
992 if (jCheckBox7.isSelected())
993 {
José Enrique Cabañas Ceballos 107
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
994 vel = Double.parseDouble(jTextField7
.getText());
995 jLabel7.setText("necesario dato
rugosidad");
996 }
997 else
998 {
999 jLabel7.setText("necesario dato
rugosidad");
1000 }
1001 }
1002 else
1003 {
1004 if (jCheckBox7.isSelected())
1005 {
1006 vel = Double.parseDouble(jTextField7
.getText());
1007 jLabel7.setText("necesario dato
rugosidad");
1008 }
1009 else
1010 {
1011 jLabel7.setText("necesario dato
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 {
1024 q = Double.parseDouble(jTextField5.getText
());
1025 if (jCheckBox6.isSelected())
1026 {
1027 Re = Double.parseDouble(jTextField6.
getText());
1028 if (jCheckBox7.isSelected())
1029 {
1030 vel = Double.parseDouble(jTextField7
.getText());
1031 D=calculos.getD(q, vel);
1032 jTextField3.setText(""+D);
1033 vis=calculos.getViscosidad(Re, D,
vel);
1034 jTextField2.setText(""+vis);
1035 }
1036 else
1037 {
1038 jLabel7.setText("datos insuficientes
");
1039 }
1040 }
1041 else
1042 {
1043 if (jCheckBox7.isSelected())
1044 {
1045 vel = Double.parseDouble(jTextField7
.getText());
José Enrique Cabañas Ceballos 109
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
1046 jLabel7.setText("datos insuficientes
");
1047 }
1048 else
1049 {
1050 jLabel7.setText("datos insuficientes
");
1051 }
1052 }
1053 }
1054 else
1055 {
1056 if (jCheckBox6.isSelected())
1057 {
1058 Re = Double.parseDouble(jTextField6.
getText());
1059 if (jCheckBox7.isSelected())
1060 {
1061 vel = Double.parseDouble(jTextField7
.getText());
1062 jLabel7.setText("datos insuficientes
");
1063 }
1064 else
1065 {
1066 jLabel7.setText("datos insuficientes
");
1067 }
1068 }
1069 else
1070 {
1071 if (jCheckBox7.isSelected())
José Enrique Cabañas Ceballos 110
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
1072 {
1073 vel = Double.parseDouble(jTextField7
.getText());
1074 jLabel7.setText("datos insuficientes
");
1075 }
1076 else
1077 {
1078 jLabel7.setText("datos insuficientes
");
1079 }
1080 }
1081 }
1082 }
1083 else
1084 {
1085 if(jCheckBox5.isSelected())
1086 {
1087 q = Double.parseDouble(jTextField5.getText
());
1088 if (jCheckBox6.isSelected())
1089 {
1090 Re = Double.parseDouble(jTextField6.
getText());
1091 if (jCheckBox7.isSelected())
1092 {
1093 vel = Double.parseDouble(jTextField7
.getText());
1094 jLabel7.setText("necesario dato
rugosidad");
1095 }
1096 else
José Enrique Cabañas Ceballos 111
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
1097 {
1098 jLabel7.setText("necesario dato
rugosidad");
1099 }
1100 }
1101 else
1102 {
1103 if (jCheckBox7.isSelected())
1104 {
1105 vel = Double.parseDouble(jTextField7
.getText());
1106 jLabel7.setText("necesario dato
rugosidad");
1107 }
1108 else
1109 {
1110 jLabel7.setText("necesario dato
rugosidad");
1111 }
1112 }
1113 }
1114 else
1115 {
1116 if (jCheckBox6.isSelected())
1117 {
1118 Re = Double.parseDouble(jTextField6.
getText());
1119 if (jCheckBox7.isSelected())
1120 {
1121 vel = Double.parseDouble(jTextField7
.getText());
1122 jLabel7.setText("necesario dato
José Enrique Cabañas Ceballos 112
B.5. CÓDIGO DE DE LA INTERFACE GRÁFICA
rugosidad");
1123 }
1124 else
1125 {
1126 jLabel7.setText("necesario dato
rugosidad");
1127 }
1128 }
1129 else
1130 {
1131 if (jCheckBox7.isSelected())
1132 {
1133 vel = Double.parseDouble(jTextField7
.getText());
1134 jLabel7.setText("necesario dato
rugosidad");
1135 }
1136 else
1137 {
1138 jLabel7.setText("necesario dato
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) {
1171 jLabel7.setText("Dicho fluido no existe");
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 {
1209 jTextField4.setText(Rug[i]);
1210 }
1211 catch(ArrayIndexOutOfBoundsException e) {
1212 jLabel7.setText("Dicho material no existe");
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. Factor_friccionApp.java
1 /*
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() {
19 show(new Factor_friccionView(this));
20 }
21
22 /**
José Enrique Cabañas Ceballos 118
B.7. FACTOR_FRICCIONABOUTBOX.JAVA
23 * This method is to initialize the specified window by
injecting resources.
24 * Windows shown in our application come fully initialized from
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 */
34 public static Factor_friccionApp getApplication() {
35 return Application.getInstance(Factor_friccionApp.class);
36 }
37
38 /**
39 * Main method launching the application.
40 */
41 public static void main(String[] args) {
42 launch(Factor_friccionApp.class, args);
43 }
44 }
B.7. Factor_friccionAboutBox.java
1 /*
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() {
18 dispose();
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()
94 .addGroup(layout.createParallelGroup(javax.
swing.GroupLayout.Alignment.LEADING)
95 .addComponent(versionLabel)
96 .addComponent(vendorLabel)
97 .addComponent(vendorLabel1))
98 .addPreferredGap(javax.swing.LayoutStyle.
ComponentPlacement.RELATED)
99 .addGroup(layout.createParallelGroup(javax.
swing.GroupLayout.Alignment.LEADING)
100 .addComponent(appVendorLabel1)
101 .addComponent(appVersionLabel)
José Enrique Cabañas Ceballos 123
B.7. FACTOR_FRICCIONABOUTBOX.JAVA
102 .addComponent(appVendorLabel))
103 .addGap(110, 110, 110)))
104 .addContainerGap())
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))
126 .addPreferredGap(javax.swing.LayoutStyle.
ComponentPlacement.RELATED, 33, Short.MAX_VALUE)
127 .addComponent(closeButton)
128 .addContainerGap())
129 );
130
131 pack();
132 }// </editor-fold>
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. Tratamiento de los datos experimentales.
1 %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)
22 Z1(i)=(caudal1(i)-cmedio1)^2;
23 end
24 ecmc1=sqrt(sum(Z1)/length(caudal1));
25 for i=1:length(AP1)
26 C1(i)=(AP1(i)-P1)^2;
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)
41 Z2(i)=(caudal2(i)-cmedio2)^2;
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)
45 C2(i)=(AP2(i)-P2)^2;
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)
60 Z3(i)=(caudal3(i)-cmedio3)^2;
61 end
62 ecmc3=sqrt(sum(Z3)/length(caudal3));
63 for i=1:length(AP3)
64 C3(i)=(AP3(i)-P3)^2;
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)
79 Z4(i)=(caudal4(i)-cmedio4)^2;
80 end
81 ecmc4=sqrt(sum(Z4)/length(caudal4));
82 for i=1:length(AP4)
83 C4(i)=(AP4(i)-P4)^2;
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)
98 Z5(i)=(caudal5(i)-cmedio5)^2;
99 end
100 ecmc5=sqrt(sum(Z5)/length(caudal5));
101 for i=1:length(AP5)
102 C5(i)=(AP5(i)-P5)^2;
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)
117 Z6(i)=(caudal6(i)-cmedio6)^2;
118 end
119 ecmc6=sqrt(sum(Z6)/length(caudal6));
120 for i=1:length(AP6)
121 C6(i)=(AP6(i)-P6)^2;
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)
136 Z7(i)=(caudal7(i)-cmedio7)^2;
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)
140 C7(i)=(AP7(i)-P7)^2;
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)
155 Z8(i)=(caudal8(i)-cmedio8)^2;
156 end
157 ecmc8=sqrt(sum(Z8)/length(caudal8));
158 for i=1:length(AP8)
159 C8(i)=(AP8(i)-P8)^2;
160 end
161 emcpc8=sqrt(sum(C8)/length(AP8));
162 epc8=std(AP8);
163 e8=std(tiempo8);
164
165 %creacion de los vectores de los parametros:
166 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
183 f(i)=PC(i)*cte/(velocidad(i)^2);
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 vari-
ables 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 %laminar
15 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. Representación gráfica de los modelos teóricos.
1 %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 %laminar
15 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