El tanque de tormentas de Arroyofresno (Grupo 71)
| Trabajo realizado por estudiantes | |
|---|---|
| Título | El tanque de tormentas de Arroyofresno. Grupo 71 |
| 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 | |
El tanque de tormentas de Arroyofresno, inaugurado en 2007, es una infraestructura subterránea clave para la protección de la ciudad de Madrid frente a episodios de lluvia intensa. Con una capacidad aproximada de 400 000 m³, este tanque permite almacenar temporalmente las primeras aguas de lluvia —las más contaminadas— antes de enviarlas a la estación depuradora.
Su funcionamiento se basa en laminar y retener los caudales punta que llegan a la red de saneamiento durante las tormentas, reduciendo el riesgo de inundaciones en superficie y evitando vertidos directos de aguas altamente contaminadas al medio receptor. De esta forma, el tanque contribuye tanto a la seguridad hidráulica como a la mejora de la calidad del agua en el sistema de saneamiento urbano.
En este trabajo se presenta un modelo geométrico simplificado del tanque de tormentas de Arroyofresno y se estudian distintos campos escalares asociados al agua y al hormigón armado: el campo de presión hidrostática, la distribución de contaminantes en profundidad, la infiltración en el hormigón y la corrosión de las armaduras. Para la representación gráfica y los cálculos utilizaremos el programa Matlab, siguiendo la metodología de la asignatura de Teoría de Campos.
Contenido
- 1 Funcionamiento del Tanque de Arroyofresno:
- 2 Presión y fuerzas estructurales sobre columnas
- 3 Infiltración y corrosión en columnas
- 3.1 Campo de concentración infiltrada:
- 3.2 Campo del gradiente de concentración infiltrada:
- 3.3 Función de concentración en la armadura en función de la profundidad:
- 3.4 Superficies de isoconcentración dentro de una columna:
- 3.5 Vida útil de la columna en la zona crítica:
- 3.6 Masa total de contaminantes infiltrados en una columna:
- 4 Decantación y distribución de contaminantes
1 Funcionamiento del Tanque de Arroyofresno:
El Tanque de Tormentas de Arroyofresno forma parte del Plan de Saneamiento de Madrid. Su principal función es reducir el riesgo de inundaciones y proteger el medio ambiente durante lluvias intensas. El tanque se activa automáticamente cuando la red de alcantarillado unitaria, que transporta aguas pluviales y residuales conjuntamente, supera su capacidad máxima. Los contaminantes arrastrados a los tanques de tormentas provienen principalmente: Los Sólidos en Suspensión (SS): Partículas de suciedad, arena y barro, responsables de la turbidez. Materia Orgánica; Metales Pesados: Zinc, plomo, cobre y cadmio, procedentes del tráfico y la corrosión; Nutrientes (Nitrógeno y Fósforo) y Agentes Específicos (Críticos para el Hormigón): Cloruros y Sulfatos. El agua contaminada permanece en el tanque de tormentas de forma temporal, el tiempo necesario para que los sólidos contaminantes decanten y para que la Estación Depuradora de Aguas Residuales pueda asumir el caudal restante. Una vez la red de saneamiento se normaliza, el agua se bombea gradualmente para su tratamiento final. Los tanques de tormentas son comunes en muchas grandes ciudades, especialmente aquellas con sistemas de alcantarillado unitario. Barcelona (España): Cuenta con numerosos tanques de tormentas (ej: el tanque de la Zona Franca, el de Litoral), para proteger el área metropolitana de las inundaciones mediterráneas. Berlín (Alemania): Utiliza un sistema mixto de tanques y canales de almacenamiento subterráneo para gestionar el agua de lluvia. París (Francia): Posee grandes infraestructuras subterráneas ("Grand Collecteur") que funcionan de manera similar para almacenar y regular los flujos de agua.
El almacenamiento de estas aguas sucias provoca que las columnas de hormigón estén expuestas a los agentes agresivos. Los principales mecanismos de daño a las estructuras son: Corrosión de la Armadura por Cloruros: El hormigón protege el acero, generando una capa pasivadora. Los cloruros, arrastrados por la infiltración de agua, penetran en el hormigón alcanzando el acero en la concentración crítica y rompe la capa pasivadora. Permitiendo la presencia de humedad y oxígeno, haciendo que se oxide. Al tener un volumen mayor al acero original, lo que genera tensiones internas que agrietan el recubrimiento de hormigón. Ataque por Sulfatos: Los sulfatos, provenientes de la descomposición orgánica, reaccionan con los componentes del cemento. Estas reacciones causan agrietamiento interno y, a largo plazo, la desintegración de la matriz de hormigón. Para garantizar la vida útil de estas estructuras críticas, se adoptan rigurosas medidas de protección: Diseño de Recubrimiento: Se aumenta el espesor del recubrimiento de hormigón para retrasar la llegada del frente de contaminantes; Hormigón de Baja Porosidad: Se utiliza hormigón de alta calidad para reducir la permeabilidad y la porosidad; Protección del Acero: En ambientes extremadamente agresivos, se opta por acero inoxidable para la armadura, proporcionando una barrera a la corrosión; Recubrimientos Superficiales: Se aplican membranas, pinturas o morteros especiales en las superficies del hormigón para crear una barrera física contra el agua contaminada
2 Presión y fuerzas estructurales sobre columnas
2.1 Representación del campo de presiones:
Cuando el tanque está lleno, el campo escalar de presión en el agua viene dado por:
donde \(P_0\) es la presión atmosférica, \(\rho_{\text{agua}}\) la densidad del agua y \(g\) la aceleración de la gravedad. Como \(P\) sólo depende de la coordenada vertical \(z\), en la superficie cilíndrica de una columna todos los puntos de una misma cota tienen la misma presión. A continuación representamos este campo como un mapa de colores sobre un cilindro de radio [math]r_c = 0{,}75 m[/math].
% Parámetros
rcolumna = 0.75; % en m
H = 22; % en m
Patm = 101325; % Pa
rhoagua = 1000; % kg/m^3
g = 9.81; % m/s^2
% Malla en coordenadas cilíndricas
ptostheta = 200;
ptosz = 200;
theta = linspace(0,2*pi,ptostheta);
z = linspace(-H,0,ptosz);
[Theta,Z] = meshgrid(theta,z);
% Coordenadas cartesianas de la superficie cilíndrica
R = rcolumna;
X = R*cos(Theta);
Y = R*sin(Theta);
% Campo de presión P(z)
P = Patm - rhoagua * g .* Z;
% Superficie con mapa de color según P
figure('Color','w','Position',[200 200 700 600]);
h = surf(X, Y, Z, P, 'EdgeColor','none');
colorbar_handle = colorbar;
colorbar_handle.Label.String = 'Presión (Pa)';
% Etiquetas
axis equal
xlabel('x (m)')
ylabel('y (m)')
zlabel('z (m)')
title('Campo de presión P(z) sobre la superficie cilíndrica de una columna')
view(40,20)
2.2 Gradiente de presión y representación como campo vectorial:
El gradiente del campo de presión se define como:
Para el campo hidrostático \(P(z) = P_0 - \rho_{\text{agua}} g z\) sólo hay dependencia en \(z\), de modo que:
Es un campo vectorial constante dirigido hacia abajo. A continuación lo representamos sobre la superficie cilíndrica de una columna.
% CAMPO DEL GRADIENTE DE PRESIÓN SOBRE UNA COLUMNA
% Datos
H = 22; % [m]
rcolumna = 0.75; % [m]
rhoagua = 1000; % [kg/m^3]
g = 9.81; % [m/s^2]
% Mallado cilíndrico
ptosTheta = 20;
ptosZ = 20;
theta = linspace(0, 2*pi, ptosTheta);
z = linspace(-H, 0, ptosZ);
[Theta, Z] = meshgrid(theta, z);
X = rcolumna*cos(Theta);
Y = rcolumna*sin(Theta);
% Gradiente de presión
Gx = zeros(size(X));
Gy = zeros(size(Y));
Gz = -ones(size(Z)); % en -z
% Representación
figure;
surf(X, Y, Z, 'FaceAlpha', 0.2, 'EdgeColor', 'none');
hold on;
quiver3(X, Y, Z, Gx, Gy, Gz, 0.7, 'k');
axis equal;
xlabel('x [m]');
ylabel('y [m]');
zlabel('z [m]');
title('Gradiente de presión sobre la superficie de una columna');
grid on;
hold off;
2.3 Fuerza total agua sobre columna:
Para calcular la fuerza total se va a trabajar con la presiones manométricas. Se debe saber que la presión atmosférica cuando se trabaja en manométricas tiene valor 0, por tanto se tomará [math] P_0 = 0 [/math] .
y la integramos sobre la superficie lateral de la columna de radio \(r_c\). En coordenadas cilíndricas, sobre \(r = r_c\) el elemento de área es \(dA = r_c\,d\theta\,dz\). La **fuerza total normal** (como magnitud escalar) es
Con los datos \(r_c = 0{,}75\ \text{m}\), \(H = 22\ \text{m}\), \(\rho_{\text{agua}} = 1000\ \text{kg/m}^3\) y \(g = 9{,}81\ \text{m/s}^2\):
3 Infiltración y corrosión en columnas
3.1 Campo de concentración infiltrada:
% Parámetros del problema
H = 22;
radiocolumna = 0.75;
radioarmadura = 0.65;
concentracionsup = 0.3;
alpha = 3;
lambda = 10;
% Mallado para la sección vertical (r,z)
nr = 300;
nz = 300;
r = linspace(0, radiocolumna, nr);
z = linspace(-H, 0, nz); % fondo a superficie
[R, Z] = meshgrid(r, z);
% Campo de concentración en agua
Cconagua = concentracionsup * (1 + alpha * abs(Z) / H);
% Campo infiltrado en columna
Cinfcol = Cconagua .* exp(-lambda * (radiocolumna - R));
% FIGURA 1: SECCIÓN VERTICAL
figure;
imagesc(r, z, Cinfcol); %muestra matriz como imagen
colorbar;
xlabel('r (m)');
ylabel('z (m)');
title('Campo de concentración infiltrada C_{col}(r,z) - Sección vertical');
% marcar la armadura
hold on;
plot([radioarmadura radioarmadura], [-H 0], 'k--', 'LineWidth', 2);
text(radioarmadura+0.02, -H+2, 'Armadura', 'Color','k');
% FIGURA 2: SECCIÓN TRANSVERSAL (x–y)
% malla en el plano transversal
nx = 300;
ny = 300;
x = linspace(-radiocolumna, radiocolumna, nx);
y = linspace(-radiocolumna, radiocolumna, ny);
[X, Y] = meshgrid(x, y);
R2 = sqrt(X.^2 + Y.^2); %distancia radial al eje de la columna
% seleccionamos una profundidad
profundidad = -H/2;
Conanguaenz = concentracionsup * (1 + alpha * abs(profundidad)/H); %concentracion del agua en z= -H/2 (profundidad)
Cinfcol_xy = Conanguaenz .* exp(-lambda * (radiocolumna - R2)); %concentración infiltrada dentro del hormigón en cada punto
% enmascarar puntos fuera del cilindro
Cinfcol_xy(R2 > radiocolumna) = NaN;
% figura
figure;
imagesc(x, y, Cinfcol_xy);
set(gca,'YDir','normal'); %en direccion normal
axis equal;
colorbar;
xlabel('x (m)');
ylabel('y (m)');
title(['C_{col}(x,y) a z = ' num2str(profundidad) ' m']);
% dibujar límite de la armadura
hold on;
th = linspace(0, 2*pi, 300);
plot(radioarmadura*cos(th), radioarmadura*sin(th), 'k--', 'LineWidth',2);
text(radioarmadura*1.1, 0, 'Armadura', 'Color','k');
3.2 Campo del gradiente de concentración infiltrada:
La concentración de contaminantes en el agua varía con la profundidad según
donde [math]C₀ = 0{,}3 kg/m³[/math] y [math]α = 3[/math]. En el interior del hormigón de la columna, la concentración infiltrada se modela como
con [math]ρₐ = 0{,}65 m[/math] (posición de la armadura) y [math]λ = 10 m⁻¹[/math] (coeficiente de atenuación en el hormigón).
El gradiente de esta concentración en coordenadas cilíndricas \((r,z)\) es
En una sección vertical que pasa por el eje de la columna (plano \(y=0\)), tomamos la coordenada horizontal \(x\) de manera que \(r = |x|\) y representamos el campo vectorial \(\nabla C_{\text{col}}(x,z)\).
% GRADIENTE DE LA CONCENTRACIÓN INFILTRADA EN UNA SECCIÓN VERTICAL
% Parámetros en SI
H = 22;
concentracionsup = 0.3;
alpha = 3;
lambda = 10;
rarmadura = 0.65;
% Mallado en la sección vertical (plano y = 0)
nx = 41;
nz = 41;
x = linspace(-rarmadura, rarmadura, nx);
z = linspace(-H, 0, nz);
[X, Z] = meshgrid(x, z);
R = abs(X);
% Máscara (Todo lo que esté fuera del radio de la columna se marcará como NaN)
mask = (R <= rarmadura);
% Concentración en el agua
Concentracionagua = concentracionsup*(1 + alpha*abs(Z)/H); % [kg/m^3]
% Concentración infiltrada en el hormigón
concentracionhorm = Concentracionagua .* exp(-lambda*(rarmadura - R)); % [kg/m^3]
% Derivadas analíticas en (r,z)
dC_dr = lambda .* concentracionhorm; %derivada parcial respecto de r
dC_dz = -(concentracionsup*alpha/H) .* exp(-lambda*(rarmadura - R)); %derivada parcial respecto de z
% Paso de componente radial a componente en x (en y=0)(ahora esta en
% direccion radial, para poder usar quiver necesitamos que este en
% coordenadas cartesianas)
signX = sign(X);
signX(signX == 0) = 1;
dC_dx = dC_dr .* signX;
% Aplicar máscara
dC_dx(~mask) = NaN;
dC_dz(~mask) = NaN;
% Representación del campo vectorial en la sección (x,z)
figure;
quiver(X, Z, dC_dx, dC_dz, 0.5, 'filled');
axis equal;
xlabel('x [m]');
ylabel('z [m]');
title('Gradiente de concentración \nabla C_{col}(x,z) en una sección vertical');
set(gca,'YDir','normal'); %coloca el z=0 mas arriba que z=-H
grid on;
3.3 Función de concentración en la armadura en función de la profundidad:
En la armadura de la columna (radio \(r = \rho_a\)), la concentración infiltrada coincide con la concentración del agua, ya que el factor exponencial vale 1:
Tomamos [math]C₀ = 0{,}3 kg/m³[/math], [math]α = 3[/math] y [math]H = 22 m[/math]. El umbral crítico para el inicio de la corrosión es
Dibujamos \(C_{\text{acero}}(z)\) en función de la profundidad \(|z|\) y añadimos la línea horizontal \(C_{\text{crit}}\). En este caso, como \(C_{\text{acero}}(z) > C_{\text{crit}}\) para toda la profundidad, toda la armadura se encuentra en zona de riesgo de corrosión.
% CONCENTRACIÓN EN LA ARMADURA Y UMBRAL CRÍTICO
% Parámetros (SI)
H = 22;
concentracionsup = 0.3;
alpha = 3;
umbralcritico= 0.05;
% Profundidad positiva desde la superficie hasta el fondo
nPts = 200;
p = linspace(0, H, nPts);
cacero = concentracionsup*(1 + alpha*p/H);
% Representación
figure;
plot(p, cacero, 'LineWidth', 2);
hold on;
yline(umbralcritico, 'r--', 'C_{crit}', 'LineWidth', 1.5);
xlabel('Profundidad [m]');
ylabel('C_{acero} [kg/m^3]');
title('Concentración en la armadura C_{acero}(z) y umbral crítico C_{crit}');
grid on;
% Comentario en la consola sobre la zona de riesgo
if all(cacero > umbralcritico)
disp('Toda la armadura está en zona de riesgo de corrosión (C_acero > C_crit para toda la profundidad).');
else
disp('Solo la parte de la armadura donde C_acero > C_crit está en zona de riesgo de corrosión.');
end
hold off;
3.4 Superficies de isoconcentración dentro de una columna:
% Isosuperficies 3D de C_col dentro de la columna
% Parámetros del enunciado
rcol = 0.75; % m (radio de la columna)
rarmd = 0.65; % m (radio de la armadura)
H = 22; % m (profundidad)
ConSup = 0.3; % kg/m3
alpha = 3;
lambda = 10; % 1/m
% Resolución del mallado
Nx = 80; Ny = 80; Nz = 120;
% Mallado cartesiano
x = linspace(-rcol, rcol, Nx);
y = linspace(-rcol, rcol, Ny);
z = linspace(-H, 0, Nz);
[X, Y, Z] = meshgrid(x, y, z);
% Coordenada radial
R = sqrt(X.^2 + Y.^2);
% Concentración en el agua: Cagua(z)
Cagua = ConSup * (1 + alpha * abs(Z) / H);
% Concentración infiltrada en columna: Ccol(r,z)
Ccol = Cagua .* exp(-lambda * (rcol - R));
% Fuera del cilindro no se representa
Ccol(R > rcol) = NaN;
% Valores de isosuperficies a mostrar
isoSup = [0.1 0.2 0.3 0.4];
% Colores (RGBA)
colores = [ ...
0.2 0.5 1.0 0.35; % azul
0.3 0.9 0.3 0.35; % verde
1.0 0.6 0.1 0.35; % naranja
0.7 0.2 0.7 0.35]; % morado
figure; hold on;
% Crear cada isosuperficie
for i = 1:length(isoSup)
val = isoSup(i);
% Extraer la isosuperficie
p = patch(isosurface(X, Y, Z, Ccol, val));
% Estética de la superficie
p.FaceColor = colores(i,1:3);
p.FaceAlpha = colores(i,4); %controla la opacidad
p.EdgeColor = 'none';
end
% Dibujar el cilindro de la armadura (rho = rho_a)
theta = linspace(0, 2*pi, 120);
z_cyl = linspace(-H, 0, 80);
[TH, ZZ] = meshgrid(theta, z_cyl);
Xc = rarmd * cos(TH);
Yc = rarmd * sin(TH);
Zc = ZZ;
surf(Xc, Yc, Zc, 'FaceColor', 'y', 'FaceAlpha', 0.95, 'EdgeColor', 'none');
% Ajustes de gráfico
xlabel('x (m)');
ylabel('y (m)');
zlabel('z (m)');
title('Isosuperficies 3D de C_{col} dentro de la columna');
axis equal;
view(3);
grid on;
3.5 Vida útil de la columna en la zona crítica:
Se tiene que el diámetro de las barras de armadura es [math] d_0 = 20 mm [/math] . Se considera como pérdida crítica cuando la barra pierde el 25% de su diámetro original. Calculamos la pérdida crítica debida a la corrosión:
Estos 5 mm son material total perdido respectó al diámetro de la barra y como la corrosión actua del exterior hacia el interior, se obtiene un radio de material corroído de 2.5 mm. La velocidad de corrosión dada es [math] v_c = 0.1 \frac{mm}{año} [/math]. Por último, calculamos el tiempo (t) que tarda en alcanzar esa perdida crítica del 25%.
3.6 Masa total de contaminantes infiltrados en una columna:
Para calcular la masa de contaminantes infiltrados en una columna se ha usado código matlab debido a la ayuda que ofrece para cálculos mas complejos como en este caso.
Tras ejecutar el código, se obtiene una masa de contaminantes infiltrados por columna de 6.74 kg (6.739290 kg). Así mismo obtenemos que la masa infiltrada para el mismo volumen de la columna pero en el agua es de 29.16 kg (29.157907 kg). Si se comparan se observa que es bastante mayor la masa infiltrada en agua que en la columna. [math] \frac{MasaColumna}{MasaAguaEquiv}= \frac{6.74}{29.16} [/math]
% Datos
rcolumna = 0.75; % m
H = 22.0; % m
C0 = 0.3; % kg/m^3
alpha = 3.0;
lambda = 10.0; % 1/m
% I_rho = rho_c/lambda - (1 - exp(-lambda*rho_c))/lambda^2
I_rho = rcolumna./lambda - (1 - exp(-lambda.*rcolumna))./(lambda.^2);
% J_z = C0 * H * (1 + alpha/2)
J_z = C0 .* H .* (1 + alpha./2);
% Masa contaminantes infiltrados en la columna
M_col = 2 * pi .* I_rho .* J_z; % [kg]
% Masa contaminantes en volumen equivalente de agua
M_agua_eq = pi .* rcolumna.^2 .* J_z; % [kg]
% Relacion contaminantes columna y contaminantes vol agua equiv
fraction = M_col ./ M_agua_eq;
percentage = fraction * 100;
% Resultados
fprintf('I_rho = %.12g (unidad: m^2)\n', I_rho);
fprintf('J_z = %.12g (unidad: kg/m^2 - resultado de int_z Cagua dz)\n', J_z);
fprintf('Masa infiltrada (M_col) = %.6f kg\n', M_col);
fprintf('Masa en agua equivalente (M_agua_eq) = %.6f kg\n', M_agua_eq);
fprintf('Fracción M_col / M_agua_eq = %.6f (%.3f%%)\n', fraction, percentage);
4 Decantación y distribución de contaminantes
4.1 Campo de concentración de contaminantes en el agua:
La concentración de contaminantes en el agua está gobernada por el proceso de decantación: las partículas más densas descienden con el tiempo y se acumulan en el fondo del tanque. La concentración solo depende de la profundidad z, según:
donde z=0 corresponde a la superficie y z=-H al fondo del tanque. Dado que en esta región z≤0, se cumple ∣z∣=-z, por lo que la expresión se convierte en:
El gráfico de C_"agua" (z)muestra una recta ascendente desde la superficie hasta el fondo. Esto refleja directamente el proceso de decantación: los contaminantes más pesados se acumulan abajo. Al representar, se observa: Colores más claros o intensos cerca del fondo (mayor concentración) y colores más suaves cerca de la superficie. Es decir, la concentración forma capas horizontales dentro del tanque, coherentes con un proceso de sedimentación estratificada.
% Concentración de contaminantes en el agua
clear; close all; clc;
% Parámetros del enunciado
C0 = 0.3; % kg/m^3
alpha = 3;
H = 22; % m
L = 290; % longitud de la pared del tanque (m)
% (a) Representación de la función Cagua(z)
z = linspace(-H, 0, 200);
Cz = C0 * (1 + alpha * abs(z)/H); % abs(z) = z
figure;
plot(z, Cz, 'LineWidth', 2);
xlabel('z (m)');
ylabel('C_{agua}(z) (kg/m^3)');
title('Concentración de contaminantes en el agua');
grid on;
% (b) Mapa de colores en una pared del tanque
% Mallado para pared vertical
nx = 60;
nz = 60;
x = linspace(0, L, nx); % dirección horizontal de la pared
z2 = linspace(0, -H, nz); % z=0 superficie, z=-H fondo
[X, Z] = meshgrid(x, z2);
% Concentración (solo depende de z)
C = C0 * (1 + alpha * abs(Z)/H);
figure;
pcolor(X, Z, C);
shading interp; % suaviza el color
colorbar;
xlabel('x (m)');
ylabel('z (m)');
title('Mapa de colores de la concentración C_{agua}(z)');
set(gca,'YDir','normal'); % para que 0 esté arriba
4.2 Gradiente de concentración de contaminante en el agua:
El gradiente de un campo escalar indica la dirección en la que la magnitud crece más rápidamente. Para esta situación:solo depende de la coordenada vertical z, por lo que el gradiente tendrá únicamente una componente en esa dirección:
Al derivar obtenemos:
Este valor es constante y negativo, lo que significa: La concentración aumenta hacia abajo. El gradiente apunta hacia la dirección donde la concentración crece, es decir, hacia el fondo del tanque. Físicamente, esto representa el flujo sedimentario de los contaminantes y la acumulación en zonas profundas.
%– Gradiente del campo de concentración
clear; close all; clc;
% Parámetros del problema
C0 = 0.3; % kg/m^3
alpha = 3;
H = 22; % m
L = 290; % longitud de la pared
% Gradiente analítico
dCdz = -C0*alpha/H; % constante
% Malla 2D para la pared vertical
nx = 60;
nz = 50;
x = linspace(0, L, nx);
z = linspace(0, -H, nz); % superficie 0 → fondo -H
[X, Z] = meshgrid(x, z);
% Campo de concentración (solo depende de z)
C = C0 * (1 + alpha*abs(Z)/H);
% Componentes del gradiente
U = zeros(size(X)); % dC/dx = 0
V = dCdz * ones(size(X)); % dC/dz = constante
% Representación gráfica
figure;
pcolor(X, Z, C);
shading interp;
colorbar;
hold on;
% Reducir densidad de flechas
skip = 3;
quiver(X(1:skip:end,1:skip:end), ...
Z(1:skip:end,1:skip:end), ...
U(1:skip:end,1:skip:end), ...
V(1:skip:end,1:skip:end), ...
'k', 'AutoScale', 'on');
xlabel('x (m)');
ylabel('z (m)');
title('Gradiente del campo de concentración \n \nabla C_{agua}');
set(gca,'YDir','normal'); % para que 0 esté arriba
4.3 Superficies de isoconcentración en el agua:
Concentración en función de la profundidad:α=3. Despejando z de la ecuación de concentración:
Eso significa que: C=0.4 aparecerá cerca de la superficie, C=1.0 aparecerá más cerca del fondo.
% Ejercicio 13 – Superficies de isoconcentración en el agua del tanque
clear; close all; clc;
% Dimensiones del tanque
L = 290; % longitud (m)
W = 140; % anchura (m)
H = 22; % profundidad (m)
% Parámetros de la concentración
C0 = 0.3; % concentración superficial (kg/m^3)
alpha = 3; % factor de incremento hacia el fondo
% Mallado 3D del tanque
Nx = 40; Ny = 40; Nz = 40;
x = linspace(-L/2, L/2, Nx);
y = linspace(-W/2, W/2, Ny);
z = linspace(-H, 0, Nz); % z va desde el fondo (-H) hasta superficie (0)
[X, Y, Z] = meshgrid(x, y, z);
% Campo de concentración Cagua(z)
Cagua = C0 .* (1 + alpha .* abs(Z) ./ H);
% Valores de isosuperficie
isoVals = [0.4, 0.6, 0.8, 1.0];
% Figura 3D
figure;
hold on;
colors = lines(length(isoVals));
for k = 1:length(isoVals)
p = patch(isosurface(X, Y, Z, Cagua, isoVals(k)));
isonormals(X, Y, Z, Cagua, p);
set(p, 'FaceColor', colors(k,:), 'EdgeColor', 'none', ...
'FaceAlpha', 0.35);
end
% Formato
xlabel('x (m)');
ylabel('y (m)');
zlabel('z (m)');
title('Superficies de isoconcentración en el tanque');
colormap turbo;
colorbar;
grid on;
view(45, 25);
camlight; lighting gouraud;
axis equal;
hold off;
4.4 Masa total de contaminantes en el agua del tanque:
Para estimar la masa total de contaminantes presentes en el agua del tanque, se divide la superficie horizontal en columnas de 15×15metros. El número aproximado de columnas viene dado por:
Con las dimensiones del tanque L=290m y W=140m:
Cada columna tiene un volumen: V_"col"=15m×15m×7m=1575m^3 La concentración de contaminante en el nivel del agua z=-7m viene dada por:
4.5 Caso pasadas 24 horas:
El campo de presión hidrostática en el tanque es
En la superficie cilíndrica de una columna de radio \(r_c\), el vector normal unitario saliente es
El campo vectorial de fuerza de presión por unidad de área queda entonces
dirigido hacia el interior de la columna.
% CAMPO VECTORIAL DE FUERZA DE PRESIÓN SOBRE UNA COLUMNA
% F = -P(z) * n, con n normal unitario saliente
% Datos (SI)
H = 22; % [m] profundidad del tanque
rc = 0.75; % [m] radio de la columna
rhoA = 1000; % [kg/m^3] densidad del agua
g = 9.81; % [m/s^2] gravedad
P0 = 101325; % [Pa] presión atmosférica
% Mallado cilíndrico en la superficie
nTheta = 20;
nZ = 20;
theta = linspace(0, 2*pi, nTheta);
z = linspace(-H, 0, nZ);
[Theta, Z] = meshgrid(theta, z);
% Coordenadas cartesianas de la superficie
X = rc*cos(Theta);
Y = rc*sin(Theta);
% Presión hidrostática
P = P0 - rhoA*g.*Z; % [Pa]
% Vector normal saliente n = (cosθ, sinθ, 0)
nx = cos(Theta);
ny = sin(Theta);
% Campo de fuerza de presión: F = -P * n
Fx = -P .* nx; % [N/m^2]
Fy = -P .* ny; % [N/m^2]
Fz = zeros(size(Z)); % [N/m^2]
% Representación
figure;
surf(X, Y, Z, 'FaceAlpha', 0.1, 'EdgeColor', 'none'); % cilindro semitransparente
hold on;
scale = 1e-5; % factor de escala para visualizar las flechas
quiver3(X, Y, Z, Fx, Fy, Fz, scale, 'k');
axis equal;
xlabel('x [m]');
ylabel('y [m]');
zlabel('z [m]');
title('Campo de fuerza de presión F = -P(z) n sobre la columna');
grid on;
hold off;