Flujo alrededor de un obstáculo circular (Grupo 26)
| Trabajo realizado por estudiantes | |
|---|---|
| Título | Flujo alrededor de un obstáculo circular (Grupo 26) |
| Asignatura | Teoría de Campos |
| Curso | 2025-26 |
| Autores |
|
| Este artículo ha sido escrito por estudiantes como parte de su evaluación en la asignatura | |
Vamos a estudiar el flujo de un fluido incompresible alrededor de un obstáculo circular, trabajando en el plano y utilizando coordenadas cilíndricas (polares) para describir el campo de velocidades y las condiciones en la superficie del cilindro. Este enfoque permite formular de manera directa las ecuaciones del flujo potencial y analizar cómo la presencia del obstáculo modifica la distribución de velocidades y presiones. A partir de este planteamiento se desarrollarán las cuestiones que se piden a continuación.
Contenido
1 . Representación del mallado
En este primer apartado representaremos la región ocupada por el fluido, que corresponde al exterior del círculo unidad. Para ello construiremos un mallado en coordenadas polares que cubra el anillo comprendido entre los radios 1 y 5, con centro en el origen. Este mallado permitirá visualizar los puntos interiores de la zona de estudio y establecer la geometría sobre la que se formulará posteriormente el problema del flujo. Para completar la representación, dibujaremos también los ejes cartesianos en el dominio [−4,4]×[−4,4], lo que facilitará interpretar la posición del obstáculo circular y la extensión del fluido respecto al sistema de referencia.
Con el siguiente código ejecutado en Matlab, obtenemos el mallado de trabajo:
% Trabajo P - Apartado (1)
% Mallado del anillo 1 <= r <= 5 en coordenadas polares
clear; clc; close all;
R1 = 1; % radio interior (obstáculo)
R2 = 5; % radio exterior del fluido
Nr = 25; % número de divisiones radiales
Nth = 80; % número de divisiones angulares
rho = linspace(R1, R2, Nr);
theta = linspace(0, 2*pi, Nth);
[RHO, TH] = meshgrid(rho, theta);
X = RHO .* cos(TH);
Y = RHO .* sin(TH);
Z = 0.*RHO;
figure; hold on;
% Líneas radiales (theta = constante)
for i = 1:Nth
plot(X(i,:), Y(i,:), 'g');
end
% Circunferencias (r = constante)
for j = 1:Nr
plot(X(:,j), Y(:,j), 'g');
end
% Obstáculo circular (r = 1) representado solo con contorno
th_circ = linspace(0, 2*pi, 400);
x_circ = R1 * cos(th_circ);
y_circ = R1 * sin(th_circ);
plot(x_circ, y_circ, 'k', 'LineWidth', 2); % obstáculo circular
axis equal;
xlim([-4 4]);
ylim([-4 4]);
xlabel('x');
ylabel('y');
title('Mallado en el anillo 1 \leq r \leq 5 (flujo alrededor de un cilindro)');
grid off;
hold off;
Efectivamente, observamos la región ocupada por el fluido, rodeando el obstáculo.
2 . Función potencial y campo de velocidades del fluido
En este apartado analizaremos la velocidad de las partículas dada por el gradiente de la siguiente función potencial:
2.1 . Representación de la Función potencial
Primero representaremos la función potencial que describe el flujo asociado al movimiento de un fluido incompresible alrededor de un obstáculo circular. Representaremos gráficamente la función potencial en el dominio exterior al círculo unidad para visualizar cómo varía en el plano y cómo organiza la estructura del flujo alrededor del cilindro.
% Trabajo P - Apartado (2)
% Función potencial y campo de velocidades para
% phi(rho,theta) = (rho + 1/rho) * cos(theta)
clear; clc; close all;
% Parámetros del dominio
R1 = 1; % radio del cilindro
R2 = 5; % radio exterior
Nr = 40; % puntos radiales
Nth = 120; % puntos angulares
rho = linspace(R1, R2, Nr);
theta = linspace(0, 2*pi, Nth);
[RHO, TH] = meshgrid(rho, theta);
% Coordenadas cartesianas
X = RHO .* cos(TH);
Y = RHO .* sin(TH);
% Función potencial phi(rho,theta) = (rho + 1/rho) cos(theta)
phi = (RHO + 1./RHO) .* cos(TH);
% Campo de velocidades u = grad(phi)
% En polares: u_rho = dphi/drho, u_th = (1/rho) dphi/dth
u_rho = (1 - 1./RHO.^2) .* cos(TH);
u_th = -(1 + 1./RHO.^2) .* sin(TH);
% Pasamos a componentes cartesianas:
u_x = u_rho .* cos(TH) - u_th .* sin(TH);
u_y = u_rho .* sin(TH) + u_th .* cos(TH);
% Puntos del contorno del obstáculo (rho = 1)
th_circ = linspace(0, 2*pi, 400);
x_circ = R1 * cos(th_circ);
y_circ = R1 * sin(th_circ);
%Dibujamos las curvas de nivel del potencial
figure;
contour(X, Y, phi, 30); % 30 niveles de phi
hold on;
plot(x_circ, y_circ, 'k', 'LineWidth', 2); % cilindro
axis equal;
xlim([-4 4]); ylim([-4 4]);
xlabel('x'); ylabel('y');
title('Curvas de nivel de la función potencial \phi');
hold off;
La gráfica nos indica cómo se organiza y se redistribuye el flujo alrededor del obstáculo. Vemos como el fluido se bifurca al aproximarse al cilindro y vuelve a reorganizarse aguas abajo. Se produce una perturbación clara del campo de potencial en el entorno inmediato del obstáculo. Cuanto mas juntas están las líneas se tiene mas intensidad de flujo por lo que tiene mayor velocidad. También observamos que existe simetría superior-inferior lo que confirma un régimen estable, sin pérdidas ni efectos viscosos en el modelo.
2.2 . Representación del campo de velocidades
A partir de la función potencial, la velocidad del fluido se determina mediante su gradiente, [math]\vec{u}[/math] =∇φ, estando éste definido como:
El campo de velocidades será:
Aquí representaremos el campo de velocidades resultante y analizaremos la dirección y magnitud del movimiento de las partículas del fluido, donde podremos observar que la velocidad es ortogonal a las curvas de nivel de φ.
El campo [math] \vec u [/math] lo hemos pasado manualmente a coordenadas cartesianas con la matriz de cambio de base para añadirlo directamente a nuestro código de Matlab. Dándonos como resultado:
clear; clc;clear all;
% Parámetros del dominio
R1 = 1; % radio del cilindro
R2 = 5; % radio exterior
Nr = 10; % puntos radiales
Nth = 70; % puntos angulares
rho = linspace(R1, R2, Nr);
theta = linspace(0, 2*pi, Nth);
[RHO, TH] = meshgrid(rho, theta);
% Coordenadas cartesianas
X = RHO .* cos(TH);
Y = RHO .* sin(TH);
%Definimos función potencial y la aplicamos a Z
f=@(rho,theta)(rho+(1./rho)).*cos(theta);
Z=f(RHO,TH);
%Dibujamos las curvas de nivel
contour(X,Y,Z,15);
hold on
%Definimos las componentes X e Y del gradiente
Gx=(1-(1./RHO.^2)).*cos(TH).^2+(1+(1./RHO.^2)).*sin(TH).^2;
Gy=(1-(1./RHO.^2)).*sin(TH).*cos(TH)-(1+(1./RHO.^2)).*sin(TH).*cos(TH);
%Dibujamos el campo de velocidades
quiver(X,Y,Gx,Gy);
% Representamos nuestro obstáculo
plot(1*cos(theta),1*sin(theta),'k','lineWidth',1);
axis([-4,4,-4,4]);
colorbar;
title ('Campo de velocidades');
xlabel ('EJE X');
ylabel ('EJE Y');
axis equal
hold off
Y como queríamos demostrar, observamos que la velocidad es ortogonal a las curvas de nivel de
φ.
3 . Comprobación rotacional y divergencia nulos
A partir del campo de velocidades calculado en el apartado anterior, calculamos su rotacional y su divergencia para conocer las características del fluido.
3.1 . Comprobación del rotacional nulo
Conociendo la fórmula del rotacional calculamos:
Obtenemos un rotacional nulo, es decir, se trata de un fluido irrotacional, por lo tanto, podemos deducir que las partículas del fluido no giran.
3.2 . Comprobación de la divergencia nula
Conociendo la fórmula de la divergencia calculamos:
Obtenemos una divergencia nula, es decir, significa que el fluido mantiene su volumen constante (ni se expande ni se contrae).
4 . Líneas de corriente
Primero calcularemos el campo [math]\vec{v}[/math], que en cada punto es ortogonal a [math]\vec{u}[/math], ([math]\vec{v}[/math] = [math]\vec{k}\times\vec{u}[/math], donde [math]\vec{k}[/math]=[math]\vec {e}_{z}[/math]). Conocido nuestro campo de velocidades [math]\vec{u}[/math] previamente calculado:
Comprobamos que [math]\vec{v}[/math] es irrotacional:
A continuación calculamos [math]\psi[/math], para ello resolveremos el sistema de ecuaciones [math]\nabla\cdot\psi=\vec v[/math]
De ello se obtendrá la siguiente igualdad, que representa el potencial escalar, y se conoce como función de corriente de [math]\vec{u}[/math].
A continuación, se representa el campo y el potencial escalar, gracias al siguiente código implementado en Matlab:
u = linspace(1,5,250);
v = linspace(0,2*pi,250);
[rho,th] = meshgrid(u,v);
Mx = rho.*cos(th);
My = rho.*sin(th);
% Circulación
Gamma = 1/2;
psi = (rho - 1./rho).*sin(th) - (Gamma/(2*pi))*log(rho);
% Velocidades en polares
u_r = (1 - 1./rho.^2).*cos(th);
u_th = -(1 + 1./rho.^2).*sin(th) + Gamma./(2*pi*rho);
% Velocidades en cartesianas
Ux = u_r.*cos(th) - u_th.*sin(th);
Uy = u_r.*sin(th) + u_th.*cos(th);
% quitar flechas
step = 12;
Mx_q = Mx(1:step:end, 1:step:end);
My_q = My(1:step:end, 1:step:end);
Ux_q = Ux(1:step:end, 1:step:end);
Uy_q = Uy(1:step:end, 1:step:end);
figure;
hold on;
contour(Mx, My, psi, 80);
quiver(Mx_q, My_q, Ux_q, Uy_q, 'k');
axis equal;
xlabel
Gracias a esta representación observamos que el potencial escalar y campo de velocidades son paralelos y tangentes en cada punto, concluyendo que son efectivamente líneas de corriente de [math]\vec{u}[/math].
5 . Puntos de la frontera S
Los puntos de la frontera S son aquellos donde la velocidad es mayor y menor.
Nuestras componentes del campo de velocidades son:
En la frontera del cilindro se tiene [math]\rho = 1[/math], así que particularizamos en [math]\rho = 1[/math]:
El módulo de la velocidad en la frontera es:
La velocidad es máxima cuando: [math]
\lvert \sin\theta\rvert = 1[/math], es decir, cuando
[math]\theta = \frac{\pi}{2},\ \frac{3\pi}{2}.
[/math]
Coordenadas sobre el cilindro:[math] (0,1), \qquad (0,-1). [/math]
La velocidad es mínima cuando:[math]
\lvert \sin\theta\rvert = 0[/math], es decir, cuando
[math]\theta = 0,\ \pi.
[/math]
Coordenadas:[math] (1,0) \quad\text{y}\quad (-1,0). [/math]
5.1 . Puntos de remanso
Los puntos de remanso son aquellos donde la velocidad del fluido se reduce a cero. Procederemos a hallar estos puntos con la siguiente igualdad: [math]|\vec u|=0[/math]
Obtenemos que
Por tanto, los puntos de remanso son:[math] (1,0) \quad\text{y}\quad (-1,0). [/math]
6 Presión del fluido
Partimos de la ecuación de Bernoulli dada en el enunciado la cual es:
Para que esta expresión pueda aplicarse, el fluido debe ser incompresible, no viscoso y fluir en régimen estacionario (la velocidad en un punto determinado no varía con el tiempo). Se supondrá que el fluido cumple estas condiciones.
Suponiendo que el fluido efectivamente cumple la ecuación de Bernouilli, que posee una densidad constante de d=2 y tomando como cte=15, se calculará la presión del fluido.
Por lo tanto:
Calculamos el módulo de nuestro campo de velocidades:
Por lo tanto, la presión que define la presión del fluido es:
A continuación, ejecutamos el siguiente código para una hacer una representación de la presión del fluido y poder calcular los puntos de máxima y mínima presión.
u=linspace(1,5,50);
v=linspace(0,2*pi,50);
[rho,th]=meshgrid(u,v);
Mx=rho.*cos(th);
My=rho.*sin(th);
Mz=zeros(size(Mx));
f=15-((cos(th).^2).*(1+(1./rho.^4)-(1./rho.^2))+((sin(th).^2).*(1+(1./(rho.^4))+((2)./(rho.^2)))));
hold on
surf(Mx,My,f); colorbar
axis([-5,5,-5,5]);
view(2);
hold off
Pmax=max(max(f))
Pmin=min(min(f))
Obtenemos que los puntos de presión máxima y mínima para cte=15 son 14.25 y 11.0031.
Las zonas amarillas representan las presiones mas altas donde se consideran las velocidades mínimas son los puntos [math]\theta = 0,\ \pi.
[/math]. Los consideramos puntos de remanso, lugar donde la velocidad cae a cero y la presión sube al máximo .
Las zonas azul y verde representan la zona de menor presión donde las velocidades máximas son [math]\theta = \frac{\pi}{2},\ \frac{3\pi}{2}.
[/math] .El fluido en este caso acelera para bordear el cilindro luego llega a velocidad máxima y presión mínima.
7 Partícula del fluido
En este apartado analizamos la trayectoria que seguiría una partícula del fluido y cómo cambian la velocidad y la presión al rodear el obstáculo.
7.1 Trayectorias y líneas de corriente
En un flujo estacionario e incompresible, las trayectorias de las partículas coinciden con las líneas de corriente. Por tanto, una partícula del fluido seguirá exactamente las curvas que verifican:
donde la función corriente es
Estas líneas describen las trayectorias del fluido alrededor del cilindro y muestran cómo la partícula se desvía en torno al obstáculo siguiendo la geometría del flujo potencial.
7.2 Variación de la velocidad al rodear el cilindro
La velocidad del fluido viene dada por
En la superficie del cilindro ([math]\rho = 1[/math]) se simplifica a
Por tanto:
A partir de esta relación, y analizando la variación de la velocidad que se da en el apartado 5, la velocidad cambia de la siguiente manera al rodear el obstáculo (en la superficie [math]\rho=1[/math]):
Puntos de Remanso ([math]\theta = 0[/math] y [math]\theta = \pi[/math]): En estos puntos (el frontal y el trasero del obstáculo), la velocidad del fluido es nula ([math]|\vec{u}|=0[/math]). Estos se conocen como puntos de remanso. Aceleración (De [math]\theta = 0[/math] a [math]\theta = \pi/2[/math]): Al desplazarse desde el punto frontal (\theta=0) hacia la parte superior ([math]\theta=\pi/2[/math]), el fluido se acelera (su velocidad aumenta).
Puntos de Mayor Velocidad ([math]\theta = \pi/2[/math] y [math]\theta = 3\pi/2[/math]): En la parte superior e inferior del obstáculo, la velocidad es máxima ([math]|\vec{u}| = 2\sin(\theta)[/math], que es máximo cuando [math]\sin\theta=1[/math]).
Desaceleración (De [math]\theta = \pi/2[/math] a [math]\theta = \pi[/math]):
Al pasar de la parte superior ([math]\theta=\pi/2[/math]) hacia la parte trasera ([math]\theta=\pi[/math]), el fluido se frena (su velocidad disminuye).
7.3 Variación de la presión
Según Bernoulli,
Y teniendo en cuenta la gráfica del apartado 6:
Puntos de Remanso ([math]\theta = 0[/math] y [math]\theta = \pi[/math]): Como la velocidad es mínima (cero), la presión es máxima.
Aceleración (De [math]\theta = 0[/math] a [math]\theta = \pi/2[/math]): Consecuentemente, la presión sobre la superficie disminuye.
Puntos de Mayor Velocidad ([math]\theta = \pi/2[/math] y [math]\theta = 3\pi/2[/math]): Como la velocidad es máxima, la presión es mínima.
Desaceleración (De [math]\theta = \pi/2[/math] a [math]\theta = \pi[/math]): Como la velocidad disminuye, la presión sobre la superficie aumenta hasta alcanzar su valor máximo de nuevo en el punto de remanso trasero ([math]\theta=\pi[/math]).
En resumen, la presión disminuye desde el frente hasta los lados del obstáculo, y luego aumenta desde los lados hasta la parte trasera.
8 Circulación del campo
En este apartado comprobamos que la circulación del campo de velocidades alrededor de una circunferencia de radio 1 es nula en el caso sin circulación añadida. Asimismo, se explica la relación entre este hecho, la fuerza ejercida por el fluido y la paradoja de D’Alembert.
8.1 Circulación del campo de velocidades
La circulación alrededor de una curva cerrada [math]C[/math] se define como:
Tomamos como curva de referencia la circunferencia de radio 1: [math]\rho = 1[/math]. El campo de velocidades sobre el cilindro es:
Sobre la circunferencia, el elemento de arco es
Por tanto, la circulación es:
Como la integral de [math]\sin\theta[/math] en un período completo es cero, obtenemos:
8.2 Relación con la fuerza sobre el cilindro
Lo relacionamos directamente con la circulación mediante el teorema de Kutta–Joukowski:
Como en este caso [math]\Gamma = 0[/math], la fuerza resultante es:
Es decir, a pesar de que el fluido se desvía alrededor del cilindro no aparece fuerza neta sobre él.
Este resultado es una manifestación de la paradoja de D’Alembert en un flujo potencial ideal y sin viscosidad la fuerza sobre un obstáculo fijo es exactamente cero, lo cual contradice la experiencia real.
9 . Nueva función potencial
9.1 . Nueva representación del Potencial y del campo de velocidades
Ahora supondremos que la velocidad de las partículas del fluido viene dada por el gradiente de la siguiente función potencial:
A continuación repetiremos el mismo proceso anterior. Primero representaremos la función potencial.
% Función potencial y campo de velocidades para
% phi(rho,theta) = (rho + 1/rho) * cos(theta) + theta/4*pi
clear; clc; close all;
% Parámetros del dominio
R1 = 1; % radio del cilindro
R2 = 5; % radio exterior
Nr = 40; % puntos radiales
Nth = 120; % puntos angulares
rho = linspace(R1, R2, Nr);
theta = linspace(0, 2*pi, Nth);
[RHO, TH] = meshgrid(rho, theta);
% Coordenadas cartesianas
X = RHO .* cos(TH);
Y = RHO .* sin(TH);
% Función potencial phi(r,theta) = (r + 1/r) cos(theta)+ theta/4*pi
phi = (RHO + 1./RHO) .* cos(TH) + TH./(4*pi);
% Campo de velocidades u = grad(phi)
% En polares: u_rho = dphi/drho, u_th = (1/rho) dphi/dth
u_rho = (1 - 1./RHO.^2) .* cos(TH);
% dphi/dtheta
dphi_dtheta = -(RHO + 1./RHO) .* sin(TH) + 1/(4*pi);
% u_theta = (1/r)*dphi/dtheta
u_th = (1./RHO) .* dphi_dtheta;
% Pasamos a componentes cartesianas:
u_x = u_rho .* cos(TH) - u_th .* sin(TH);
u_y = u_rho .* sin(TH) + u_th .* cos(TH);
% Puntos del contorno del obstáculo (r = 1)
th_circ = linspace(0, 2*pi, 400);
x_circ = R1 * cos(th_circ);
y_circ = R1 * sin(th_circ);
%Dibujamos las curvas de nivel del potencial
figure;
contour(X, Y, phi, 30); % 30 niveles de phi
hold on;
plot(x_circ, y_circ, 'k', 'LineWidth', 2); % cilindro
axis equal;
xlim([-4 4]); ylim([-4 4]);
xlabel('x'); ylabel('y');
title('Curvas de nivel de la función potencial \phi');
hold off;
A partir de la función potencial, la velocidad del fluido se determina mediante su gradiente, [math]\vec{u}[/math]
=∇φ.
Aquí representaremos el campo de velocidades resultante y analizaremos la dirección y magnitud del movimiento de las partículas del fluido.
clear; clc; close all;
% Parámetros del dominio
R1 = 1; % radio del cilindro (zona excluida)
R2 = 5; % radio exterior
Nr = 150; % puntos radiales
Nth = 300; % puntos angulares
rho = linspace(R1, R2, Nr);
theta = linspace(0, 2*pi, Nth);
[TH, RHO] = meshgrid(theta, rho); % ojo: orden (theta, rho) para facilidad
% Recalcula X,Y (mismo tamaño que RHO,TH)
X = RHO.*cos(TH);
Y = RHO.*sin(TH);
% Potencial
phi = (RHO + 1./RHO).*cos(TH) + TH./(4*pi);
% Gradiente en polares
ur = (1 - 1./RHO.^2).*cos(TH); % dphi/dr
dphi_dtheta = - (RHO + 1./RHO).*sin(TH) + 1./(4*pi); % dphi/dtheta
ut = dphi_dtheta ./ RHO; % (1/r)*dphi/dtheta
% Transformación a componentes cartesianas
Ux = ur.*cos(TH) - ut.*sin(TH);
Uy = ur.*sin(TH) + ut.*cos(TH);
step = 7; % menor step → más flechas
Xq = X(1:step:end, 1:step:end);
Yq = Y(1:step:end, 1:step:end);
Uxq = Ux(1:step:end, 1:step:end);
Uyq = Uy(1:step:end, 1:step:end);
% Graficar
figure('Position',[100 100 800 700]);
contour(X, Y, phi, 30, 'LineWidth', 1); hold on;
axis equal; xlim([-R2 R2]); ylim([-R2 R2]);
quiver(Xq, Yq, Uxq, Uyq, 2, 'AutoScale','on');
plot(1*cos(theta),1*sin(theta),'k','lineWidth',1); % borde del cilindro
title('Curvas de nivel y campo','Interpreter','latex');
xlabel('x'); ylabel('y');
Observamos como nuestro campo es ortogonal a las curvas de nivel.
9.2 . Comprobación rotacional y divergencia nulos
A continuación, comprobaremos que el rotacional y la divergencia sean nulos:
Conociendo el campo de velocidades calculado anteriormente:
Comprobamos el rotacional nulo:
Obtenemos un rotacional nulo, por lo que el flujo sigue siendo irrotacional y las partículas de fluido no giran localmente.
Comprobamos la divergencia nula:
Obtenemos una divergencia nula, es decir, significa que el fluido mantiene su volumen constante (ni se expande ni se contrae), de modo que se trata de un flujo incompresible.
9.3 . Nuevas líneas de corriente
Primero calcularemos el nuevo campo [math]\vec{v}[/math], que en cada punto es ortogonal a nuestro nuevo [math]\vec{u}[/math], ([math]\vec{v}[/math] = [math]\vec{k}\times\vec{u}[/math], donde [math]\vec{k}[/math]=[math]\vec {e}_{z}[/math]).
Comprobamos que [math]\vec v[/math] es irrotacional:
A continuación calculamos [math]\psi[/math], para ello resolveremos el sistema de ecuaciones: [math] \nabla \psi = \vec v. [/math]
Primera ecuación
Igualando expresiones:
u = linspace(1,5,250);
v = linspace(0,2*pi,250);
[rho,th] = meshgrid(u,v);
Mx = rho.*cos(th);
My = rho.*sin(th);
Gamma = 1/2; % porque theta/(4*pi) = (Gamma/(2*pi))*theta
psi = (rho - 1./rho).*sin(th) - (Gamma/(2*pi))*log(rho);
u_r = (1 - 1./rho.^2).*cos(th);
u_th = -(1 + 1./rho.^2).*sin(th) + Gamma./(2*pi*rho);
v_r = -u_th;
v_th = u_r;
% === Transformación a cartesianas ===
v_x = v_r.*cos(th) - v_th.*sin(th);
v_y = v_r.*sin(th) + v_th.*cos(th);
figure;
hold on;
contour(Mx, My, psi, 80);
step = 12;
Mx_q = Mx(1:step:end,1:step:end);
My_q = My(1:step:end,1:step:end);
vx_q = v_x(1:step:end,1:step:end);
vy_q = v_y(1:step:end,1:step:end);
quiver(Mx_q, My_q, vx_q, vy_q, 'k');
axis equal;
xlabel('x');
ylabel('y');
title('LÃneas de corriente con circulación');
hold off;
10 . Póster
A continuación, insertamos acceso al póster resumen del trabajo: