Flujo de Couette entre dos tubos concéntricos (Grupo 29)
| Trabajo realizado por estudiantes | |
|---|---|
| Título | Flujo de Couette entre dos tubos concéntricos. Grupo 29 |
| Asignatura | Teoría de Campos |
| Curso | 2024-25 |
| Autores |
|
| Este artículo ha sido escrito por estudiantes como parte de su evaluación en la asignatura | |
Vamos a considerar el flujo de un fluido incompresible a través de dos cilindros concéntricos de manera que el interior se mueve con una velocidad angular constante en sentido antihorario mientras que el exterior se encuentra fijo. Suponiendo que ambos cilindros tienen su eje en [math]OX_3[/math] y pintamos la sección transversal [math](x_3 = 0)[/math] el cilindro exterior queda proyectado sobre la circunferencia [math]\rho = 2[/math] y el interior sobre la circunferencia [math]\rho = 1[/math]. La velocidad angular cilindro interior es [math]\omega \gt 0[/math].
Contenido
- 1 Mallado de la sección transversal
- 2 Calculo de velocidades. Ecuación de Navier-Stokes
- 3 Representación del campo de velocidades
- 4 Representación de las líneas de corriente
- 5 Velocidad máxima del fluido
- 6 Representación del rotacional de [math]\vec u[/math]
- 7 Campo de temperaturas
- 8 Gradiente de la temperatura
- 9 Caudal que pasa por una sección longitudinal
1 Mallado de la sección transversal
Para poder representar la sección principal usamos los parámetros proporcionados por el enunciado, que son los siguientes: [math](\rho, \theta) ∈ [0, 3] × [0, 2\pi][/math]
clear all % Limpiar la pantalla, espacio de trabajo y habilitar el modo de retención de gráficos
clc
hold on
radio_malla = 0:0.1:3; % Definir los parámetros para la malla de círculos
angulo_malla = 0:0.1:2*pi;
[R_mesh, A_mesh] = meshgrid(radio_malla, angulo_malla);
x_mesh = R_mesh.*cos(A_mesh); % Generar coordenadas para la malla de círculos
y_mesh = R_mesh.*sin(A_mesh);
mesh(x_mesh, y_mesh, 0*x_mesh); % Dibujar la malla de círculos en el plano xy
axis([-3, 3, -3, 3])
radio_externo = 2; % Parámetros para los cilindros internos y externos
radio_interno = 1;
X_externo = radio_externo.*cos(angulo_malla); % Coordenadas para el cilindro externo
Y_externo = radio_externo.*sin(angulo_malla);
X_interno = radio_interno.*cos(angulo_malla); % Coordenadas para el cilindro interno
Y_interno = radio_interno.*sin(angulo_malla);
plot(X_externo, Y_externo, 'k', 'LineWidth', 3); % Dibujar el cilindro externo
plot(X_interno, Y_interno, 'k', 'LineWidth', 3); % Dibujar el cilindro interno
view(2) % Establecer la vista en 2D
hold off % Desactivar el modo de retención de gráficos
La velocidad de las partículas del fluido viene dada por [math]\vec u(\rho,\theta)=f(\rho)\vec e_\theta[/math] y su presión [math]p[/math] constante. Además [math](\vec u, \rho)[/math] tiene que cumplir la ecuación de Navier-Stokes estacionaria:
Donde el primer término se desprecia y, por lo tanto, obtenemos la siguiente ecuación vectorial: [math]\mu\triangle\vec u=\vec 0[/math], siendo [math]\mu[/math] el coeficiente de viscosidad del fluido y [math]\triangle\vec u[/math] el laplaciano.
En cartesianas, el laplaciano de un campo se define como [math]\triangle\vec u= \triangle u_1\vec i + \triangle u_2\vec j + \triangle u_3\vec k[/math]. Pero como estamos trabajando en coordenadas cilíndricas haremos uso de la siguiente fórmula: [math]\triangle\vec u = \triangledown(\triangledown\cdot\vec u)-\triangledown\times(\triangledown\times\vec u)[/math]
2.1 Cálculo del laplaciano vectorial
2.1.1 Divergencia de [math]\vec u[/math]
[math]\triangledown\cdot\vec u=\frac{1}{\rho}[\frac{\partial}{\partial\rho}(\rho u_\rho)+{\frac{\partial}{\partial\theta}(u_\theta))}+\frac{\partial}{\partial z}(\rho u_z)]=\frac{1}{\rho}[{\frac{\partial}{\partial\theta}(u_\theta))}]=\frac{1}{\rho}[{\frac{\partial}{\partial\theta}(f(\rho))}]=0[/math]
Y, por lo tanto, el gradiente de la divergencia también es nulo. ([math]\triangledown(0)=\vec 0[/math]).
2.1.2 Rotacional del rotacional de [math]\vec u[/math]
Para ello calculamos primero el rotacional de [math]\vec u[/math]:
[math]\ \triangledown \times \vec{u}=\frac{1}{\rho} \left|\begin{matrix} \vec e_\rho & \rho\cdot \vec e_\theta & \vec e_z \\ \frac{\partial}{\partial \rho } & \frac{\partial}{\partial \theta} & \frac{\partial}{\partial z} \\ e_\rho & \rho u_\theta & u_z \end{matrix}\right| =\frac{1}{\rho} \left|\begin{matrix} \vec e_\rho & \rho\cdot \vec e_\theta & \vec e_z \\ \frac{\partial}{\partial \rho } & \frac{\partial}{\partial \theta} & \frac{\partial}{\partial z} \\ 0 & \rho\cdot f(\rho ) & 0 \end{matrix}\right| =\frac{1}{\rho} \left[ \frac{\partial}{\partial \rho} (\rho\cdot f(\rho)) \right] \vec{e_{z}}=\left ( \frac{f\left ( \rho \right )}{\rho } + {f}'\left ( \rho \right )\right ) \bar{e_{z}}[/math]
Ahora calculamos el rotacional del rotacional de [math]\vec u[/math]:
[math]\ \triangledown \times \left ( \triangledown \times \vec{u} \right )=\frac{1}{\rho }\begin{vmatrix} \vec{e}_{\rho }&\rho \cdot \vec{e} _{\theta } & \vec{e}_{z}\\ \frac{\partial }{\partial \rho } & \frac{\partial }{\partial \theta } & \frac{\partial }{\partial z} \\ 0& 0 &\frac{f\left ( \rho \right )}{\rho }+{f}'\left ( \rho \right ) \end{vmatrix}= -\frac{1}{\rho }\left [ -\frac{1}{\rho ^{2}}f\left ( \rho \right ) +\frac{{f}'\left ( \rho \right )}{\rho }+{f}''\left ( \rho \right )\right ] \rho\cdot \vec{e}_{\theta } = \left [\frac{1}{\rho ^{2}}f\left ( \rho \right )-\frac{1}{\rho} {f}'\left ( \rho \right )-{f}''\left ( \rho \right )\right ]\vec{e}_{\theta }[/math]
Finalmente, el laplaciano quedaría de la forma: [math]\ \triangle \vec{u}=0-\triangledown \times \triangledown \times \vec{u} =\left [{f}''(\rho)+\frac{1}{\rho}{f}'(\rho)-\frac{1}{\rho ^{2}}f(\rho)\right]\vec{e}_{\theta }[/math]
Una vez obtenido todos los términos, sustituimos en la ecuación de Navier-Stokes simplificada, obteniendo:
Trabajando solo con los módulos nos queda:
2.2 Ecuación diferencial propuesta
A continuación, el problema nos propone comprobar que [math]f(\rho)[/math] satisface la ecuación diferencial: [math]\frac{\partial}{\partial \rho} \left (\rho \frac {\partial f(\rho)}{\partial \rho} \right )=\frac{f(\rho)}{\rho} [/math]
Podemos afirmar que se cumple. Posteriormente, el enunciado nos pide comprobar si la función [math]f(\rho)=a\rho+\frac{b}{\rho}[/math] es solución. Para ello sustituimos la solución dentro de nuestra ecuación diferencial.
Después calculamos [math]f'(\rho)[/math] y [math]f''(\rho)[/math]
- [math]f'(\rho) = a-\frac{b}{\rho^2}[/math]
- [math]f''(\rho)=\frac{2b}{\rho^3} [/math]
Sustituimos estos datos en [math]f'(\rho)+\rho (f''(\rho))= \frac{f(\rho)}{\rho} [/math] y obtenemos: [math]a-\frac{b}{\rho^2} + \rho \frac{2b}{\rho^3}= \frac{a\rho+\frac{b}{\rho}}{\rho}[/math]. De esta manera, demostramos que es solución.
Para finalizar, el necesitamos hallar los valores de a y b concretos de nuestro ejercicio. Para ello utilizaremos las condiciones de nuestro enunciado, dando los valores de la frontera interior y exterior a [math]\rho[/math] llegando a un sistema de dos ecuaciones.
- En el interior: [math]\ \rho=1\rightarrow \vec{u}=w\vec{e_{\theta }} \rightarrow f(1)\vec{e_{\theta }}=w\vec{e_{\theta }}\rightarrow (a\cdot 1+\frac{b}{1})\vec{e_{\theta }}=w\vec{e_{\theta }}\rightarrow a+b=w [/math]
- En el exterior: [math]\ \rho=2\rightarrow \vec{u}=\vec{0} \rightarrow f(2)\vec{e_{\theta }}=\vec{0} \rightarrow (a\cdot 2+\frac{b}{2})\vec{e_{\theta }}=0\rightarrow 2a+\frac{b}{2}=0 [/math]
[math]\ a=w-b \rightarrow 2(w-b)+\frac{b}{2}=0\rightarrow \frac{3}{2}b=2w [/math]
- [math]\ a=\frac{-1}{3}w [/math]
- [math]\ b=\frac{4}{3}w [/math]
2.3 Condición de incompresibilidad
Sabemos que en los fluidos incompresibles, el gradiente del vector velocidad tiene que ser igual a 0. Como hemos demostrado al inicio del apartado 2.1, nuestro fluido cumple la condición de incompresibilidad dado que [math]∆\vec{u} =\vec{0}[/math]
3 Representación del campo de velocidades
Suponiendo que, [math] \omega = 1 [/math] y [math] \mu = 1 [/math] obtenemos:
- [math]\ a=\frac{-1}{3} [/math]
- [math]\ b=\frac{4}{3} [/math]
Sustituimos a y b en la ecuación [math]f(\rho)=a\rho+\frac{b}{\rho}[/math] dando lugar a [math]f(\rho)=\frac{-1}{3}\rho+\frac{4}{3\rho}\rightarrow f(\rho)=\frac{-1}{3}(\rho-\frac{4}{\rho})[/math]
Por lo tanto, nuestro campo es:
3.1 Representación gráfica
Para representarlo, hemos utilizado el siguiente código de Matlab, dando lugar a lo mostrado en la Figura 2.
clear all % Limpiar la pantalla y espacio de trabajo
clc
hold on % Habilitar retención de gráficos
radiodemalla = 1:0.1:2; % Paso 0.1 desde p=1 hasta p=2
angulodemalla = 0:0.1:2*pi; % Intervalo angular
[R_malla, A_malla] = meshgrid(radiodemalla, angulodemalla);% Representacion en la malla
x_malla = R_malla.*cos(A_malla); %Representación en coordenadas cartesianas
y_malla = R_malla.*sin(A_malla);
X = sin(A_malla).*((-4/3)*(R_malla-1./R_malla)); %Representacion del campo vectorial
Y = cos(A_malla).*((4/3)*(R_malla-1./R_malla));
quiver(x_malla, y_malla, X, Y); %Trazado del campo
hold off;4 Representación de las líneas de corriente
Para dibujar las líneas de corriente del campo [math]\vec u [/math] tenemos que calcular el campo [math]\vec v [/math] que en cada punto es ortogonal a [math]\vec u [/math] (tomar [math]\vec v =\vec k \times \vec u[/math])
4.1 Comprobación de irrotacionalidad
Comprobamos que el campo [math]\vec v[/math] es irrotacional debido a que la divergencia de [math]\vec u[/math] es nula. Aplicando la fórmula del rotacional obtenemos:
De esta manera hemos comprobado la irrotacionalidad.
4.2 Calculo de [math]\psi[/math]
A continuación vamos a calcular [math]\psi[/math]:
Despejamos [math]\psi[/math] y resolvemos la integral:
4.3 Representación gráfica
Para realizar la representación de las líneas de corriente del campo (Figura 3), hemos utilizado el siguiente código de Matlab.
clear all % Limpiar la pantalla
clc
ptos = 100; % Definir el número de puntos en la malla
densidad_radial = linspace(1, 2, ptos); % Generar valores para la densidad radial (rho) en el rango [1, 2]
theta = linspace(0, 2*pi, ptos); % Generar valores para el ángulo theta en el rango [0, 2*pi]
[RHO, THETA] = meshgrid(densidad_radial, theta); % Crear una malla 2D de coordenadas polares (rho, theta)
funcion_f = ((RHO.^2/6) - ((4*log(RHO))/3)); % Definir una función f en coordenadas polares
X = RHO .* cos(THETA); % Convertir coordenadas polares a coordenadas cartesianas
Y = RHO .* sin(THETA);
view(2); % Establecer la vista en 2D
contour(X, Y, funcion_f, 20); % Crear un gráfico de contorno de la función f en coordenadas cartesianas
colorbar; % Mostrar la barra de colores
axis([-3, 3, -3, 3]); % Establecer los límites del eje
colormap("cool"); % Establecer la colormap a 'cool'
5 Velocidad máxima del fluido
Para poder calcular los puntos del fluido donde su módulo de velocidad es máxima tenemos que calcular el módulo del campo de velocidades. Sabiendo que [math]\vec u(\rho,\theta)=f(\rho)\vec e_\theta[/math] (los campos de velocidades se calcularon en el apartado anterior a este) Entonces:
Tras esto calculamos su módulo
Ahora para calcular los puntos máximos derivamos el módulo respecto a \rho y se iguala a 0
Si despejamos \rho nos da un número imaginario.
Por lo tanto, analizamos los extremos del intervalo de la figura (dados por el enunciado) Teniendo que analizar cuando ρ es igual a 1 y cuando ρ es igual a 2
¿Qué podemos afirmar con esto? Que el punto máximo se encuentra cuando ρ tienda a 2. Esto se puede respaldar con el enunciado, que afirma que el cilindro exterior se mueve con velocidad angular constante(|u ⃗ (1)|) y que el cilindro interior está fijo (|u⃗ (2)|)
5.1 Representación gráfica
Para representar el campo escalar utilizaremos el siguiente código de Matlab, siendo la representación la Figura 4
clear all % Limpiar la pantalla, espacio de trabajo
clc
hold on
w = 1; % Parámetros iniciales
a = 2/3*w;
b = -2/3*w;
n = 35; % Número de puntos
r = linspace(1,2,n); % Crear mallas
theta = linspace(0,2*pi,n);
[R, TH] = meshgrid(r,theta);
x = R.*cos(TH); % Coordenadas en el espacio tridimensional
y = R.*sin(TH);
f = a*R+b./R; % Función que define la superficie en función de R y TH
surf(x,y,f); % Crear y visualizar la superficie tridimensional en 2D
colorbar; % Añade una barra de color para representar la magnitud de los vectores
colormap("cool");
axis([-3,3,-3,3]);
view(2);
6 Representación del rotacional de [math]\vec u[/math]
Como hemos calculado previamente, el rotacional de [math]\vec u[/math] es: [math]\ \triangledown \times \vec{u}= \frac{1}{\rho} \cdot \left|\begin{matrix} \vec e_\rho & \rho\cdot \vec e_\theta & \vec e_z \\ \frac{\partial}{\partial \rho } & \frac{\partial}{\partial \theta} & \frac{\partial}{\partial z} \\ 0 & \rho\cdot f(\rho ) & 0 \end{matrix}\right| = \left [ \frac{f\left ( \rho \right )}{\rho } + \frac{\partial \left ( f\left ( \rho \right ) \right )}{\partial \rho }\right ] \bar{e_{z}}= \frac{1}{\rho} \cdot \left [ f(\rho ) + \rho \cdot {f}'\left ( \rho \right )\right ] \bar{e_{z}} [/math]
También sabemos de apartados anteriores que:
- [math]f(\rho)=a\rho+\frac{b}{\rho}[/math]
- [math]f'(\rho) = a-\frac{b}{\rho^2}[/math]
- [math]\ a=\frac{-1}{3} [/math]
- [math]\ b=\frac{4}{3} [/math]
6.1 Representación gráfica
A continuación mostramos la representación gráfica del campo [math]\ \left | \bigtriangledown \times \vec u \right | [/math] (Figura 5), con el correspondiente código de Matlab utilizado para su obtención.
clear all % Limpiar la pantalla, espacio de trabajo
clc
r_val = 1:0.33:2; % Definición de valores para radio y ángulo
th_val = 0:0.33:2*pi;
[R, TH] = meshgrid(r_val,th_val); % Creación de una malla de putnos en coordenadas polares
x = R.*cos(TH);
y = R.*sin(TH);
z = zeros(size(x));
r_x = zeros(size(x)); % Definición del campo de rotación
r_y = zeros(size(x));
r_z = ones(size(y)).*(-2/3);
quiver3(x,y,z,r_x,r_y,r_z); % Representación gráfica del campo de rotación en 3D
axis([-3,3,-3,3]); % Configuración de límites en los ejes
xlabel('EJE X'); % Etiquetas para los ejes
ylabel('EJE Y');
zlabel('EJE Z');
7 Campo de temperaturas
La temperatura del fluido viene dada por el campo [math] T(\rho,\theta) = 1 + \rho^2 sin^2 \theta\cdot e^{−\left ( \rho − \frac{3}{2} \right ) ^2} [/math]
7.1 Representación gráfica
Dibujamos el campo de temperaturas y las curvas de nivel utilizando Matlab.
clear all % Limpiar la pantalla y el espacio de trabajo
clc
r=1:0.1:2; % Definición de los parámetros
th=0:0.1:2*pi;
[R,theta]=meshgrid(r,th); % Generación de matriz
Xcord=R.*cos(theta); % Conversión a coordenadas cartesianas
Ycord=R.*sin(theta);
temp=log10(1+R.^2).*(((cos(theta)).^2).*exp(-(R-(5/2)).^2)); % Expresión de la temperatura
figure(1) % Representación del campo 3D
mesh(Xcord,Ycord,temp)
surf(Xcord,Ycord,temp)
colormap("hot")
colorbar, xlabel('coordenada X'), ylabel('coordenada Y'), zlabel('temperatura');
figure(2)
contour(Xcord,Ycord,temp,30,'r');
axis([-3, 3, -3, 3]);
colormap("hot")
xlabel('coordenada X'), ylabel('coordenada Y');
8 Gradiente de la temperatura
8.1 Cálculo del gradiente
El gradiente de la temperatura en coordenadas cilíndricas queda definido por :8.2 Representación gráfica
Utilizamos el siguiente código de Matlab para obtener la representación grafica del gradiente de la temperatura, dando lugar a la Figura 9
clear all % Limpiar la pantalla y espacio de trabajo
clc
r=1:0.1:2; % Definición de parámetros
th=0:0.1:2*pi;
[R,theta]=meshgrid(r,th);
temp=log10(1+R.^2).*(((cos(theta)).^2).*exp(-(R-(5/2)).^2)); % Expresión de la temperatura
[Dx,Dy]=gradient(temp,r,th); % Gradiente de la temperatura con respecto r y th
figure; % Crea una figura y dibuja las curvas de nivel de Z
quiver(R,theta,Dx,Dy,'color','r'); % Dibuja un campo de vectores sobre las curvas de nivel
xlabel('r'), ylabel('\theta'), colorbar;
title('curvas de nivel en Coordenadas Polares');
hold on
contour(R,theta,temp,'b');
legend('campo de vectores', 'curvas de nivel'); % Leyenda para indicar el campod e vectores
hold off
Posteriormente, comprobamos que las curvas de nivel de la temperatura y el gradiente son ortogonales. Queda representado en la figura 10.