Parametrización de la Presa de El Atazar (Grupo 31)
| Trabajo realizado por estudiantes | |
|---|---|
| Título | Parametrización de la Presa de El Atazar. Grupo 31 |
| 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 | |
Contenido
1 Introducción
La Presa de El Atazar es la mayor presa de la Comunidad de Madrid, y es considerada una de las mayores obras de la ingeniería española. Está situada en la corriente del río Lozoya, un afluente del Tajo, y en su interior almacena 426 hm³, los cúales corrsponden al 46% del volumen de agua embalsada de la comunidad.
1.1 Historia
La construcción de la presa empezó en 1965 con un coste inicial de mil millones de pesetas, que acabó ascendiendo a una cifra en torno 3000 y 3500 millones. Hoy en día contando con la inflación equivaldría a 388 millones de euros aproxidamente. El principal objetivo de la obra fue dotar a la región de un suministro permanente de agua durante todo el año, y además se pudó regularizar el caudal del río Lozoya. Otra de sus funciones es actuar como gran reserva de embalses más pequeños de la zona. En 1992 la presa fue incluida en el Plan Integral de Aprovechamiento del Recurso Hidroeléctrico del Canal de Isabel II para aprovechar la energía hidroeléctrica que genera. Finalmente, tras alguna complicación debido a la litología del terreno, fue inagurada en 1972.
2 Superficie parametrizada de la presa en su cara aguas arriba
Primero se definen las dimensiones de la presa y se crea la malla base para la fachada. Después, se obtiene el valor de 𝜌 utilizando la ecuación: [math]\rho = \rho_0 + b \left( 1 - \frac{z^2}{H^2} \right)[/math] Por último, se convierten las coordenadas para graficar la figura resultante con el comando surf.
H = 134; % Altura
rho0 = 150; % Radio
b = 40; % Parámetro de curvatura
% Definimos la alrura de 0 a H
z = linspace(0, H, 50);
theta = linspace(2*pi/3, 4*pi/3, 50);
% Creamos la malla
[Z, TH] = meshgrid(z, theta);
% Calculamos Rho:
Rho = rho0 + b * (1 - (Z.^2) / (H^2));
% Convertimos de cilíndricas a (X, Y, Z)
X = Rho .* cos(TH);
Y = Rho .* sin(TH);
figure;
surf(X, Y, Z);
% Estética del gráfico
title('Representación de la Presa de El Atazar (Cara Aguas Arriba)');
xlabel('X metros');
ylabel('Y metros');
zlabel('Z Altura en metros');
axis equal;
shading interp;
colormap summer;
colorbar;
grid on;
3 Campo escalar de presión
La distribución hidrostática de presiones sobre la superficie aguas arriba puede describirse mediante la expresión
[math] P(z)=\rho\, g\, h(z), [/math]
donde
𝜌 ρ representa la densidad del agua,
𝑔 g es la aceleración debida a la gravedad,
ℎ ( 𝑧 ) h(z) corresponde a la columna de agua situada por encima de la cota 𝑧 z.
Esta función permite visualizar la variación de presión a lo largo del paramento mojado, identificando claramente las zonas sometidas a mayores solicitaciones. En la representación gráfica se distinguen dos gamas cromáticas: los colores fríos, asociados a regiones donde la presión es menor, y los colores cálidos, que indican los puntos de presión más elevada. Este comportamiento concuerda con la teoría hidrostática, pues la presión aumenta con la profundidad y alcanza su valor máximo en la base de la presa, disminuyendo gradualmente hacia la coronación.
% Parámetros de la presa
H = 134;
rho0 = 150;
b = 40;
theta = linspace(2*pi/3, 4*pi/3, 100);
z = linspace(0, H, 100);
[Theta, Z] = meshgrid(theta, z);
% Coordenadas cilíndricas de la superficie
Rho = rho0 + b*(1 - (Z.^2)/H^2);
X = Rho .* cos(Theta);
Y = Rho .* sin(Theta);
% Parámetros del campo de presión
H_agua = 125;
rho_agua = 1000;
g = 9.81;
P0 = 1.013e5;
% Campo de presión hidrostática
P = P0 + rho_agua * g * (H_agua - Z);
% Representación de la superficie con presión
figure('Color','k'); hold on % Fondo negro
surf(X, Y, Z, P, 'EdgeColor','none')
colormap(jet)
colorbar
xlabel('X [m]', 'Color','w'); ylabel('Y [m]', 'Color','w'); zlabel('Z [m]', 'Color','w')
title('Campo de presión hidrostática sobre la presa', 'Color','w')
view(3); axis equal
shading interp
ax = gca;
ax.XColor = 'w'; ax.YColor = 'w'; ax.ZColor = 'w';
ax.GridColor = [1 1 1]; ax.GridAlpha = 0.5;
grid on
4 Cálculo de la fuerza de presión total y la presión por unidad de superficie
En este apartado se determinarán la fuerza total debida a la presión y la presión distribuida por unidad de superficie para dos valores diferentes del parámetro de curvatura: 𝑏 = 40 m, correspondiente al caso de doble curvatura, y 𝑏 = 0 m, que representa el caso de curvatura simple. Se analizará cuál de estas dos configuraciones presenta una mejor capacidad de resistencia frente a la presión y la fuerza.
Los datos empleados para la realización de los cálculos son los siguientes;
Datos dados sobre la presa:
H = 134m , altura de la presa;
𝜌0 = 150 , radio en la coronación(altura máxima);
Curvaturas parabólicas:
1er Caso b = 40;
2o Caso b = 0;
Tomamos datos físicos que usaremos:
𝜌 = 1000(kg/m^3): densidad del agua;
g = 9.81(m/s^2): aceleración de la gravedad;
r0 = 968/pi(m): radio en la altura máxima.
4.1 Caso 1. Caso de doble curvatura(b=40)
En este caso usaremos el parámetro de curvatura b=40m, que es el caso de doble curvatura, cuya representación es la siguiente:
% Caso 1 - CASO DE DOBLE CURVATURA
% Parámetro de curvatura:
b = 40;
% Parámetros geométricos y físicos
r0 = 150; % Radio inicial (m)
h = 134; % Altura de la presa (m)
rho = 1000; % Densidad del agua (kg/m³)
g = 9.81; % Aceleración de la gravedad (m/s²)
% Coordenadas cilíndricas
theta = linspace(3*pi/4, 5*pi/4, 40);
z = linspace(0, h, 40);
[Theta, Z] = meshgrid(theta, z);
% Radio en función de la altura
R = r0 + b * (1 - Z.^2 / h^2);
% Transformación a coordenadas cartesianas
X = R .* cos(Theta);
Y = R .* sin(Theta);
% Derivadas para la normal
dr_dz = -2 * b * Z / h^2;
n_r = 1 ./ sqrt(1 + dr_dz.^2);
n_x = n_r .* cos(Theta);
n_y = n_r .* sin(Theta);
% Campo de presión hidrostática
P = rho * g * (h - Z);
% Componentes de fuerza por presión
F_x = -P .* n_x;
F_y = -P .* n_y;
% Representación gráfica con fondo negro
fig = figure('Color', 'black');
ax = axes('Parent', fig, 'Color', 'black');
q = quiver3(X, Y, Z, F_x, F_y, zeros(size(F_x)), 1.2, ...
'Color', 'cyan', 'LineWidth', 1.3);
q.MaxHeadSize = 2;
title('Fuerza de presión en presa de doble curvatura (3D)', 'Color', 'white');
xlabel('X (m)', 'Color', 'white');
ylabel('Y (m)', 'Color', 'white');
zlabel('Z (m)', 'Color', 'white');
grid on;
axis equal;
set(gca, 'XColor', 'white', 'YColor', 'white', 'ZColor', 'white', ...
'GridColor', [0.6 0.6 0.6], 'GridAlpha', 0.4);
4.2 Caso 2. Caso curvatura simple (b=0)
En este segundo caso usaremos el parámetro de curvatura b=0, curvatura simple, con la siguiente representación:
% Caso 2 - CASO DE CURVATURA SIMPLE
% Parámetro de curvatura:
b = 0;
% Parámetros geométricos y físicos (mismos que el caso anterior)
r0 = 150; % Radio inicial (m)
h = 134; % Altura de la presa (m)
rho = 1000; % Densidad del agua (kg/m³)
g = 9.81; % Aceleración de la gravedad (m/s²)
% Coordenadas cilíndricas
theta = linspace(3*pi/4, 5*pi/4, 40);
z = linspace(0, h, 40);
[Theta, Z] = meshgrid(theta, z);
% Radio constante (b = 0)
R = r0 + b * (1 - Z.^2 / h^2);
% Transformación a coordenadas cartesianas
X = R .* cos(Theta);
Y = R .* sin(Theta);
% Derivadas para la normal
dr_dz = -2 * b * Z / h^2;
n_r = 1 ./ sqrt(1 + dr_dz.^2);
n_x = n_r .* cos(Theta);
n_y = n_r .* sin(Theta);
% Presión hidrostática
P = rho * g * (h - Z);
% Componentes de fuerza por presión
F_x = -P .* n_x;
F_y = -P .* n_y;
% Gráfica con fondo negro (misma apariencia que la primera)
fig = figure('Color', 'black');
ax = axes('Parent', fig, 'Color', 'black');
q = quiver3(X, Y, Z, F_x, F_y, zeros(size(F_x)), 1.2, ...
'Color', 'cyan', 'LineWidth', 1.3);
q.MaxHeadSize = 2;
title('Fuerza de presión en presa de curvatura simple (3D)', 'Color', 'white');
xlabel('X (m)', 'Color', 'white');
ylabel('Y (m)', 'Color', 'white');
zlabel('Z (m)', 'Color', 'white');
grid on;
axis equal;
set(gca, 'XColor', 'white', 'YColor', 'white', 'ZColor', 'white', ...
'GridColor', [0.6 0.6 0.6], 'GridAlpha', 0.4);
4.3 Conclusión
En la primera opción (b=40) la presa tiene forma de arco tanto en horizontal como en vertical. Esto permite que la presión del agua se distribuya hacia los lados, hacia los estribos o montañas, reduciendo la carga directa sobre el cuerpo de la presa. Es estructuralmente muy eficiente y soporta bien la presión.
En la segunda (b=0) opción la presa es vertical y plana, sin variación de radio con la altura. La presión del agua se transmite directamente al cuerpo de la presa, concentrando la fuerza en la estructura y haciendo que sea menos eficiente frente a la misma carga.
En conclusión, la presa de doble curvatura (b = 40 m) es estructuralmente superior, ya que distribuye la presión del agua hacia los lados y reduce tanto la fuerza total como la presión media sobre la estructura. En cambio, la presa de curvatura simple (b = 0 m) concentra la presión directamente en el cuerpo de la presa, haciéndola menos eficiente. Por ello, la configuración de doble curvatura es la mejor opción para soportar la presión del embalse.
5 Opción 1. Sedimentación en el embalse
5.1 Representación del campo S(x,y)
%Parámetros
S0 = 50;
alpha = 3;
L = 500;
%Creación de la malla
x = linspace(-1000,1000,200);
y = linspace(-1000,1000,200);
[X,Y] = meshgrid(x,y);
%Campo escalar S(x,y)
S = S0*(1+ alpha*exp(-(X.^2 + Y.^2)/L^2));
%Representación gráfica
figure('Units', 'normalized', 'Position', [0.05 0.05 0.8 0.8])
c = pcolor(X, Y, S);
set (c, 'EdgeColor', 'none');
axis equal;
colorbar;
colormap summer;
ylabel('y (m)');
xlabel('x (m)');
title("S(x,y)") ;
subtitle('Representación del campo escalar de la sedimentación')
5.2 Gradiente de sedimentación ∇S
%Parámetros
S0 = 50;
alpha = 3;
L = 500;
%Creación de la malla
x = linspace(-1000, 1000, 200);
y = linspace(-1000, 1000, 200);
[X, Y] = meshgrid(x, y);
% Campo escalar S(x,y)
S = S0*(1+ alpha*exp(-(X.^2 + Y.^2)/L^2));
% Cálculo del gradiente de sedimentación ∇S
[dx, dy] = gradient(S, x, y);
% Representación del campo vector
figure('Units','normalized','Position',[0.2 0.2 0.5 0.5])
c = pcolor(X, Y, S);
set (c, 'EdgeColor', 'none');
colorbar;
colormap summer;
hold on
axis equal
xlabel('x (m)');
ylabel('y (m)');
title('Gradiente sobre S(x,y)');
grid on
m = 6;
quiver(X(1:m:end,1:m:end), Y(1:m:end,1:m:end),...
dx(1:m:end,1:m:end),dy(1:m:end,1:m:end),'y');
hold off5.3 Calculo de la masa total de los sedimentos, el volumen que ocupan y el porcentaje de la capacidad del embalse que representan
Para calcular la masa total de sedimentos integraremos la función de concentración de sedimentos S(x,y) por el área del fondo del embalse. Para simplificar el cálculo consideraremos el fondo del embalse como plano en z=0 y con forma de sector circular centrado en el valle, delimitado por el arco de la presa en su base.
[math] M = \iint_{A} S(x,y)\, dA = \iint_{A} S_0 \left( 1 + \alpha e^{\frac{-(x^2+y^2)}{L^2}} \right) [/math]
Vamos a simplificar el cálculo pasando de coordenadas cartesianas a polares, ya que el fondo tiene forma circular.
Sabemos que [math] x^2+y^2 = r^2 [/math] y que el área diferencial en coordenadas polares es [math]dA=r\, dr\, d\theta [/math]
Por lo que nos quedaría la siguiente integral: [math] M = \int_{\theta_0}^{\theta_1}\int_{0}^{R}S_0\left(1+\alpha e^{\frac{-r^2}{L^2}}\right)\, r \, dr \, d\theta [/math]
Dividimos la integral en [math] S_0\int_{\theta_0}^{\theta_1}\left( \int_{0}^{R} r\, dr\, +\, \int_{0}^{R}r\, \alpha\, e^{\frac{-r^2}{L^2}}\, dr \right)d\theta[/math] y resolvemos las partes de la integral con la variable [math]r[/math] por separado.
[math] \int_{0}^{R} r\, dr\, = {\frac{R^2}{2}}[/math]
[math] \int_{0}^{R}r\, \alpha\, e^{\frac{-r^2}{L^2}}\, =\, ({\frac{-L^2}{2}}\,)\, e^{\frac{-R^2}{L^2}}\alpha [/math]
De lo que llegamos a:
[math] \int_{\theta_0}^{\theta_1} ({\frac{R^2}{2}}\, +\,({-L^2/2}\,)\, e^{\frac{-R^2}{L^2}}\alpha)d\theta [/math]
Como la variable [math]\theta[/math] no está presente dentro de la integral podemos definir esta de la siguiente forma:[math] \int_{\theta_0}^{\theta_1}d\theta\, \,({R^2/2}\, +\,({-L^2/2}\,)\, e^{\frac{-R^2}{L^2}}\alpha) [/math]
Donde [math]\int_{\theta_0}^{\theta_1}d\theta \,=\, \Delta\theta [/math]
Así que nos quedaría [math]M\,=S_0\, \Delta\theta\,({\frac{R^2}{2}}\, +\,({\frac{-L^2}{2}}\,)\, e^{\frac{-R^2}{L^2}}\alpha) [/math]
Sustituyendo los valores por [math]\Delta\theta={\frac{2\pi}{3}} [/math] , [math]\alpha=3 [/math] , [math]L=500 [/math]
5.4 Curvas de isoconcentración de S(x,y)
Se representan las curvas de isoconcentración con S(x,y)=cte para el campo:
[math] S(x,y) = S_0 \left( 1 + \alpha e^{-\frac{x^2+y^2}{L^2}} \right) [/math]
S0 = 50;
alpha = 3;
L = 500;
x = linspace(-500, 500, 300);
y = linspace(-500, 500, 300);
[X, Y] = meshgrid(x, y);
% Campo escalar
S = S0 * (1 + alpha * exp(-(X.^2 + Y.^2)/L^2));
% Curvas
figure;
contour(X, Y, S, 10, 'LineWidth', 1.5);
colorbar;
xlabel('x (m)');
ylabel('y (m)');
title('Curvas de isoconcentración de S(x,y)');
axis equal;
grid on;
colormap("summer");
6 Opción 2.Estratificación térmica
6.1 Representación gráfica del perfil de temperatura 𝑇(𝑧) para 𝑧 ∈ [0, 𝐻agua] con Δ𝑇𝜃 = 0 °C
Al ejecutar el primer bloque del código, obtendrás una gráfica de T frente a la profundidad z.
- Epilimnio: Es la zona superior (cerca de z=125 m). En la gráfica se ve que la temperatura es alta (aprox 23ºC) y bastante uniforme en los primeros metros antes de empezar a caer.
- Termoclino (Metalimnio): Es la zona intermedia. En la gráfica es la sección con mayor pendiente, donde la temperatura baja rápidamente de caliente a fría. Ocurre aproximadamente entre z=100 y z=80.
- Hipolimnio: Es la zona inferior (fondo, z < 80 m aprox). Aquí la curva se aplana en 8ºC.
TempF = 8;
DTz = 15;
d = 15;
Hagua = 125;
z = linspace(0, Hagua, 500);
% Ecuación T(z)
Tz = Tfondo + DTz .* (1 - exp(-(Hagua - z).^2 ./ (2*d^2)));
%No ponemos la segunda parte de la ecuacion ya que dT0=0%
% Gráfica
figure;
plot(z, Tz, 'g','LineWidth', 2);
xlabel('Profundidad z (m)');
ylabel('Temperatura °C');
title('Perfil vertical de temperatura en el embalse');
grid on;
6.2 Δ𝑇𝜃 = 3 °C. Cálculo de nuevo gradiente
Ahora con Δ𝑇𝜃 = 3 °C calculamos el gradiente de temperatura.
Representación gráfica:
%Parámetros
% Parámetros
Hagua = 125;
Tfondo = 8;
DeltaTz = 15;
d = 15;
DeltaTtheta = 3;
theta_sol = 5*pi/6;
hsuper = 4;
% Profundidad
z = linspace(0, Hagua, 500);
% Gradiente de temperatura
theta = theta_sol;
dTdz = DeltaTz*(Hagua - z)/d^2 .* exp(-(Hagua - z).^2/(2*d^2)) + ...
DeltaTtheta/hsuper * cos(theta - theta_sol) .* exp(-(Hagua - z)/hsuper);
[grad_max, idx_max] = max(dTdz);
z_max = z(idx_max); o
termoclino_z = [z_max-10, z_max+10];
figure('Color', 'k');
plot(dTdz, z, 'LineWidth', 2, 'Color', 'g');
set(gca, 'YDir', 'reverse', 'Color', 'k', 'XColor', 'w', 'YColor', 'w');
xlabel('Gradiente de temperatura (°C/m)', 'Color', 'w');
ylabel('Profundidad (m)', 'Color', 'w');
title('Gradiente vertical de temperatura con variación superficial', 'Color', 'w');
grid on;
El gradiente máximo se alcanza en el termoclino. En esta región ocurre el cambio más brusco de temperatura con la profundidad, por lo que el gradiente vertical
dT/dz alcanza su valor más alto allí. Este punto está marcado en rojo en la representación.
6.3 Representación de 5 superficies isotérmicas para diferentes valores de temperatura
Vamos a usar la temperaturas 𝑇 = 10, 13, 16, 19 y 22 °C; por Δ𝑇𝜃 = 0 °C y Δ𝑇𝜃 = 3 °C. Esta es la representación de las 5 superficies para el Δ𝑇𝜃 = 0 °C y para Δ𝑇𝜃 = 3 °C :
% Parámetros
T0 = 8; H = 125; D = 15;
T = [10 13 16 19 22];
dT = 3; th = 5*pi/6; h = 4;
c = [0 0 1; 0 1 0; 1 1 0; 1 0.5 0; 1 0 0];
t = linspace(0,2*pi,100); r = linspace(0,50,100);
[Th,R] = meshgrid(t,r);
X = R.*cos(Th); Y = R.*sin(Th);
% ΔTθ = 0
Z0 = H - sqrt(-2*D^2*log(1-(T-T0)'/15));
Z0 = repmat(Z0,1,100,100); Z0 = permute(Z0,[3 2 1]);
figure('Color','k'); hold on
for k=1:5
surf(X,Y,Z0(:,:,k),'FaceColor',c(k,:),'EdgeColor','none','FaceAlpha',0.7)
end
title('ΔTθ = 0','Color','w'); view(3); axis tight
xlabel('X','Color','w'); ylabel('Y','Color','w'); zlabel('Z','Color','w')
grid on; ax=gca;
shading interp;
%ΔTθ = 3
Z3 = zeros(size(X,1),size(X,2),5);
for k=1:5
for i=1:size(X,1)
for j=1:size(X,2)
f=@(z) T0+15*(1-exp(-(H-z)^2/(2*D^2))) + dT*cos(Th(i,j)-th)*exp(-(H-z)/h) - T(k);
Z3(i,j,k) = fzero(f,H/2);
end
end
end
figure('Color','k'); hold on
for k=1:5
surf(X,Y,Z3(:,:,k),'FaceColor',c(k,:),'EdgeColor','none','FaceAlpha',0.7)
end
title('ΔTθ = 3','Color','w'); view(3); axis tight
xlabel('X','Color','w'); ylabel('Y','Color','w'); zlabel('Z','Color','w')
grid on; ax.GridColor=[1 1 1];
shading interp; lighting phong;
endEn el caso de ΔTθ = 0 °C. Tiene superficies isotérmicas planas y horizontales, paralelas a la superficie del agua.
En el caso de ΔTθ = 3 °C. Tiene superficies isotérmicas deformadas, con ondulación superficial orientada hacia la dirección de máxima insolación, pero profundas siguen casi horizontales.
6.4 Sección vertical rectangular del embalse.
Se representa el campo escalar 𝑇(𝑧) como un mapa de colores sobre esta sección, por Δ𝑇𝜃 = 0 °C y Δ𝑇𝜃 = 3°C.
clear;
clc;
% Parámetros
Tfondo = 8;
DTz = 15;
d = 15;
Hagua = 125;
hsuper = 4;
DTtheta_vals = [0, 3];
rho = linspace(0, 200, 200);
z = linspace(0, Hagua, 200);
[R,Z] = meshgrid(rho, z);
% Ángulos
theta = pi/2;
thetasol = 5*pi/6;
for k = 1:2
DTtheta = DTtheta_vals(k);
%T(rho,z)
T = Tfondo + DTz*(1 - exp(-(Hagua - Z).^2/(2*d^2))) ...
+ DTtheta*cos(theta - thetasol).*exp(-(Hagua - Z)/hsuper);
% Gráfico
figure;
contourf(R, Z, T, 30, 'LineColor', 'none');
colorbar;
colormap(summer);
xlabel('\rho (m)');
ylabel('z (m)');
title(['T(\rho,z) con \DeltaT_\theta = ', num2str(DTtheta), ' °C']);
end