Академический Документы
Профессиональный Документы
Культура Документы
PRÁCTICA DE PROPAGACIÓN
DE OLEAJE EN UN PERFIL
TRANSVERSAL DE PLAYA
Índice general
Práctica de propagación de oleaje en un perfil transversal de playa ........................................... 1
Conocimientos previos .............................................................................................................. 2
Propagación de oleaje ............................................................................................................... 2
Longitud de onda ...................................................................................................................... 3
El método de Newton-Raphson para hallar raíces de una ecuación f(x)=0 .......................... 3
Interpretación geométrica ................................................................................................ 3
Formulación del método ................................................................................................... 4
Algoritmo........................................................................................................................... 4
Aplicación al caso de la longitud de onda ......................................................................... 5
Código Matlab ................................................................................................................... 5
EJERCICIO 1........................................................................................................................ 6
Modelización de la propagación de oleaje en diferencias finitas ............................................. 7
Diferencias finitas .................................................................................................................. 8
Introducción ...................................................................................................................... 8
Discretización del dominio ................................................................................................ 8
Aproximación por diferencias finitas .............................................................................. 10
Aplicación al perfil transversal de una playa ................................................................... 11
Código.............................................................................................................................. 12
Resultados ....................................................................................................................... 15
Preguntas ........................................................................................................................ 17
Conocimientos previos
Se deben repasar los conceptos de derivada y serie de Taylor. También los referentes a rectas
tangentes en geometría analítica. También deben conocerse los rudimentos de Matlab®.
Propagación de oleaje
Prescindiendo de pérdidas de energía debidas a rotura del oleaje, fricción con el fondo, etc., la
ecuación que gobierna la propagación de una ola hacia la costa, en teoría lineal, indica que el
flujo de energía es constante, es decir:
�����������⃗
𝐸𝐸 · 𝐶𝐶𝑔𝑔 = ������⃗
𝑐𝑐𝑐𝑐𝑐𝑐
�����������⃗
∇�𝐸𝐸 · 𝐶𝐶𝑔𝑔 � = 0
𝜕𝜕�𝐸𝐸 · 𝐶𝐶𝑔𝑔 �
=0
𝜕𝜕𝜕𝜕
Por otra parte, la energía por unidad de superficie de ola es:
1
𝐸𝐸 = 𝜌𝜌𝜌𝜌𝜌𝜌²
8
Y la celeridad de grupo:
C 2 · 𝑘𝑘 · 𝑑𝑑
𝐶𝐶𝑔𝑔 = 𝑛𝑛 · 𝐶𝐶 = �1 + �
2 𝑠𝑠𝑠𝑠𝑠𝑠ℎ(2 · 𝑘𝑘 · 𝑑𝑑)
Siendo k el número de onda:
2𝜋𝜋
𝑘𝑘 =
𝐿𝐿
Y d, la profundidad.
𝑔𝑔𝑔𝑔²
𝐿𝐿 = 𝑡𝑡𝑡𝑡𝑡𝑡ℎ(𝑘𝑘𝑘𝑘)
2𝜋𝜋
Imagínese una costa cuyo fondo presenta una pendiente m = 0.025. ¿Cómo se puede resolver
la propagación del oleaje en dicha costa?
𝑑𝑑 = 𝑥𝑥 · 𝑚𝑚
Por tanto, el perfil de la costa será el mostrado en la figura siguiente:
25
20
15
Profundidad [m]
10
0
0 100 200 300 400 500 600 700 800 900 1000
Longitud de onda
La ecuación de dispersión se ha de evaluar en cada punto, dado que depende de la profundidad.
Por otro lado, su resolución no puede ser directa, debiendo emplearse un método de
aproximaciones sucesivas. Se aprovechará este hecho para introducir el método de Newton-
Raphson.
Sea f(x) una función continuamente diferenciable dos veces en el intervalo [a, b], lo cual se
expresa: 𝑓𝑓 ∈ 𝐶𝐶 2 [𝑎𝑎, 𝑏𝑏].
𝑓𝑓′(𝑥𝑥) ≠ 0
�
|𝑥𝑥̅ − 𝑝𝑝| → 0
(𝑥𝑥 − 𝑥𝑥̅ )2
𝑓𝑓(𝑥𝑥) = 𝑓𝑓(𝑥𝑥̅ ) + (𝑥𝑥 − 𝑥𝑥̅ )𝑓𝑓 ′ (𝑥𝑥̅ ) + 𝑓𝑓′′(𝑥𝑥̅ )
2
Aquí sustituimos x = p, y, considerando:
𝑓𝑓(𝑝𝑝) = 0
�
(𝑝𝑝 − 𝑥𝑥̅ )² ≈ 0
0 ≈ 𝑓𝑓(𝑥𝑥̅ ) + (𝑝𝑝 − 𝑥𝑥̅ )𝑓𝑓 ′ (𝑥𝑥̅ )
Y despejando p, tenemos:
𝑓𝑓(𝑥𝑥̅ )
𝑝𝑝 ≈ 𝑥𝑥̅ −
𝑓𝑓′(𝑥𝑥̅ )
El método de Newton consiste en tomar una aproximación inicial, 𝑥𝑥̅ , y a continuación obtener
una aproximación más refinada mediante la formulación anterior. Es decir, se trata de
acercarnos a la raíz p por medio de la fórmula recursiva:
𝑓𝑓(𝑝𝑝𝑛𝑛−1 )
𝑝𝑝𝑛𝑛 = 𝑝𝑝𝑛𝑛−1 −
𝑓𝑓′(𝑝𝑝𝑛𝑛−1 )
Debe tomarse siempre un valor inicial tal que tanto el valor de la función como el de su derivada
segunda, particularizados para dicho valor, tengan el mismo signo, es decir:
Algoritmo
Para hallar una solución aproximada de f(x) = 0, dada una aproximación inicial p0.
1. Contador i = 1
𝑔𝑔𝑇𝑇 2 2𝜋𝜋𝜋𝜋
𝐿𝐿 − 𝑡𝑡𝑡𝑡𝑡𝑡ℎ � �=0
2𝜋𝜋 𝐿𝐿
La incógnita a resolver es L. Todos los demás valores son constantes. Es decir:
𝑔𝑔𝑇𝑇 2 2𝜋𝜋𝜋𝜋
𝑓𝑓(𝑥𝑥) = 𝑥𝑥 − 𝑡𝑡𝑡𝑡𝑡𝑡ℎ � �
2𝜋𝜋 𝑥𝑥
Es posible calcular la derivada con la ayuda de Matlab, si no se recuerda la derivada de tanh(x):
>> syms x d g T
>> f = x-(g*T^2/(2*pi))*tanh(2*pi*d/x) ;
>> g = diff(f,x)
g=
1 - (T^2*d*g*(tanh((2*pi*d)/x)^2 - 1))/x^2
>> pretty(g)
2 / / 2 pi d \2 \
T d g | tanh| ------ | - 1 |
\ \ x / /
1 - ------------------------------
2
x
>>
Es decir:
2𝜋𝜋𝜋𝜋
𝑇𝑇 2 · 𝑑𝑑 · 𝑔𝑔 �𝑡𝑡𝑡𝑡𝑡𝑡ℎ² � 𝑥𝑥 � − 1�
′ (𝑥𝑥)
𝑓𝑓 =1−
𝑥𝑥²
Código Matlab
El código Matlab® que se ha escrito para resolver el problema es el siguiente:
%% INICIALIZAR
g = 9.8182;
p_im1 = p;
%% ITERACIONES
for i=1:N
f = p_im1 - (g*T^2/2/pi)*tanh(2*pi*d/p_im1);
fp = 1-(T^2*d*g*((tanh(2*pi*d/p_im1))^2-1))/p_im1^2;
p_i = p_im1-f/fp;
if abs(p_i - p_im1) < eps
L = p_i;
i = N;
else
p_im1 = p_i;
end
end
Imagínese que se desea calcular la longitud de onda en profundidades indefinidas de una ola de
periodo T = 10 s, con un error de 0.001 m y un máximo de 50 iteraciones. Después, se calculará
también en d = 3.0 m. Se comienza a calcular con p0 = 156 m.
>> londa(5000,10,0.001,156,10)
ans =
156.2615
>> londa(3,10,0.001,156,10)
ans =
53.1790
>>
Para calcular L0 se ha dado una profundidad muy grande, con objeto de estar seguros de que se
trata de profundidades indefinidas.
EJERCICIO 1
Utilizando la función “londa”, escribir un código que proporcione, para una ola de T = 15.20 s,
los valores de la longitud de onda entre d0 y d = 3.0 m. Graficar la solución.
350
300
200
150
100
50
0 50 100 150 200 250
Profundidad [m]
𝜕𝜕�𝐸𝐸 · 𝐶𝐶𝑔𝑔 �
=0 [1]
𝜕𝜕𝜕𝜕
En esta ecuación está implícita la longitud de onda y el periodo del oleaje, a través del cálculo
de la celeridad de grupo, Cg, como se ha visto anteriormente.
4𝜋𝜋
1 1 · 𝑑𝑑 𝑔𝑔𝑔𝑔 2𝜋𝜋𝜋𝜋
𝜕𝜕 �8 ρgH² · 2 �1 + 𝐿𝐿 � 2𝜋𝜋 𝑡𝑡𝑡𝑡𝑡𝑡ℎ � 𝐿𝐿 ��
4𝜋𝜋
𝑠𝑠𝑠𝑠𝑠𝑠ℎ � 𝐿𝐿 · 𝑑𝑑�
=0
𝜕𝜕𝜕𝜕
Esta es la ecuación más sencilla que podemos emplear para analizar la propagación del oleaje
en un perfil transversal a la costa. Se observa que la única variable desconocida es H (la altura
de ola), dado que el resto de las variables son conocidas en cada punto (ya sea por ser dato,
como d, o por poderse calcular, como L). En otras palabras, podría escribirse la ecuación anterior
como:
𝜕𝜕(𝐻𝐻² · K)
=0 [2]
𝜕𝜕𝜕𝜕
Siendo
4𝜋𝜋
1 1
𝐾𝐾 = ρg · �1 + 𝐿𝐿 · 𝑑𝑑 �
𝑔𝑔𝑔𝑔
𝑡𝑡𝑡𝑡𝑡𝑡ℎ �
2𝜋𝜋𝜋𝜋
�
8 2 4𝜋𝜋
𝑠𝑠𝑠𝑠𝑠𝑠ℎ � · 𝑑𝑑� 2𝜋𝜋 𝐿𝐿
𝐿𝐿
un valor que conocemos a lo largo del perfil, mediante los conocimientos anteriormente
desarrollados.
La cuestión es cómo resolver la ecuación [1] por métodos numéricos. Se verá a continuación el
método de diferencias finitas.
Diferencias finitas
Introducción
Los métodos de Diferencias Finitas nos permiten obtener soluciones numéricas aproximadas a
Problemas de Valores Iniciales y de Contorno (modelos Matemáticos avanzados en Ingeniería)
resolviendo un sistema de ecuaciones lineales que se obtiene sustituyendo las derivadas que
aparecen en las ecuaciones diferenciales de gobierno por cocientes de diferencias y obligando
a la solución discreta así obtenida a satisfacer las condiciones iniciales y de contorno.
Los métodos de Diferencias Finitas pueden resultar adecuados para resolver Problemas elípticos
(por ejemplo, problemas de equilibrio) y parabólicos (por ejemplo, de difusión) aunque con
geometrías de los dominios y condiciones de contorno sencillas.
Estos métodos nos proporcionan soluciones discretas es decir valores de la solución buscada en
un número finito de puntos del dominio del problema.
Dependiendo de la complejidad del modelo, las mallas pueden ser cuadradas si sus celdas lo son
(∆x = ∆y) o rectangulares (∆x ≠ ∆y). También las celdas pueden ser exactamente iguales (malla
estructurada), o variar a lo largo del dominio (en cuyo caso se tendrá una malla no estructurada);
en modelos más avanzados, esto suele utilizarse para refinar la malla donde se prevé la
existencia de mayores gradientes en la variable que deseamos resolver. De momento, se
emplearán únicamente mallas estructuradas cuadradas.
En general, se designan las filas con el subíndice “j” y las columnas, con el “i” (Figura 4). Es decir,
el índice “i” crece a lo largo de las filas y el índica “j” lo hace a lo largo de las columnas.
Así, en dicha malla, tomando como base el punto 2, de coordenadas de malla (i,j), aumentando
una fila se tendrá el punto 5, de coordenadas de malla (i, j+1). Las coordenadas métricas serán
función de las coordenadas de malla. Así, para el ejemplo de la Figura 4, admitiendo que x1 = 0
e y1 = 0, se tendrán los valores que muestra la Tabla 1. Es decir, cada punto tiene sus
coordenadas (i,j) que lo sitúan en la malla y sus coordenadas (x,y,z), que lo sitúan en el mundo.
Los valores zi,j de cada punto serán, en este caso, las profundidades de la batimetría discretizada.
PUNTO COORDENADAS X Y
DE MALLA
0 0,0 0 0
1 i-1, j (i-1)·∆x j·∆y
2 i, j i·∆x j·∆y
3 i+1, j (i+1)·∆x j·∆y
4 i, j-1 i·∆x (j-1)·∆y
5 i, j+1 i·∆x (j+1)·∆y
Tabla 1 Coordenadas de los puntos de la malla
𝜕𝜕𝜕𝜕(𝑥𝑥, 𝑦𝑦) 2
𝜕𝜕 2 𝑢𝑢(𝑥𝑥, 𝑦𝑦)
𝑢𝑢(𝑥𝑥𝑖𝑖 + ∆𝑥𝑥, 𝑦𝑦) = 𝑢𝑢(𝑥𝑥𝑖𝑖 , 𝑦𝑦) + ∆𝑥𝑥 � � + (∆𝑥𝑥) � � +⋯
𝜕𝜕𝜕𝜕 𝑥𝑥=𝑥𝑥𝑖𝑖 𝜕𝜕𝑥𝑥 2 𝑥𝑥=𝑥𝑥𝑖𝑖
𝑛𝑛
𝜕𝜕 𝑛𝑛 𝑢𝑢(𝑥𝑥, 𝑦𝑦)
+ (∆𝑥𝑥) � �
𝜕𝜕𝑥𝑥 𝑛𝑛 𝑥𝑥=𝑥𝑥𝑖𝑖
En el desarrollo en serie de Taylor, pueden despreciarse los términos de índice n > 1, sin más
que hacer ∆x lo suficientemente pequeño, con lo cual:
𝜕𝜕𝜕𝜕(𝑥𝑥, 𝑦𝑦)
𝑢𝑢(𝑥𝑥𝑖𝑖 + ∆𝑥𝑥, 𝑦𝑦) ≈ 𝑢𝑢(𝑥𝑥𝑖𝑖 , 𝑦𝑦) + ∆𝑥𝑥 � �
𝜕𝜕𝜕𝜕 𝑥𝑥=𝑥𝑥𝑖𝑖
1
Así, en el punto �𝑖𝑖 + , 𝑗𝑗� puede aproximarse la derivada como:
2
Obsérvese que, dado que se va a trabajar en un perfil transversal de playa, no existe más que
una coordenada; Por ello desaparece “j”.
Finalmente:
𝐻𝐻²𝑖𝑖 𝐶𝐶𝐶𝐶𝑖𝑖
𝐻𝐻𝑖𝑖+1 = �
𝐶𝐶𝐶𝐶𝑖𝑖+1
Con esta primera aproximación, no se disipa ninguna energía, por lo que la ola no rompe. En un
ejercicio posterior se añadirá la disipación de energía.
Código
%% EJERCICIO 1
%% INICIALIZAR
clc;
clear all;
close all;
commandwindow;
T = 15.20;
H_0 = 5.0;
m = 0.025;
Dx = 5.0;
%% PERFIL DE PLAYA
%% CÁLCULOS
i = 1;
x(1) = 0;
L_0 = 1.56*T^2;
d_1 = L_0/1.5;
L(1) = L_0;
d(1) = d_1;
[Cg(1), C(1)] = CelGrup(d_1,T,L(1));
H(1) = H_0;
dc = d_1;
while dc > 0
i = i + 1;
for i = 2:N
if d(i)>0
L(i) = londa(d(i), T, 0.001, L(i-1), 10);
[Cg(i), C(i)] = CelGrup(d(i),T,L(i));
H(i) = sqrt((H(i-1))^2*Cg(i-1)/Cg(i));
else
L(i) = 0;
Cg(i) = 0;
C(i) = 0;
H(i)= 0;
end
end
%% DIBUJO
plot(x,-d)
grid on;
xlabel('Distancia [m]')
ylabel('Profundidad [m]')
titulo = sprintf('PERFIL TRANSVERSAL m = %3.3f', m);
title(titulo)
figure
[hAx,hLine1,hLine2] = plotyy(x,L,x,-d);
grid on;
xlabel('Distancia [m]')
ylabel(hAx(1),'Longitud de onda [m]')
ylabel(hAx(2),'Profundidad [m]')
titulo = sprintf('LONGITUD DE ONDA EN TEORÍA LINEAL PARA T = %3.2f s', T);
title(titulo)
figure
%[hAx,hLine1,hLine2] = plotyy([x,x],[C,Cg],x,-d);
plot(x,C,x,Cg);
grid on;
xlabel('Distancia [m]')
ylabel('Celeridad [m/s]')
%ylabel(hAx(1),'Celeridad [m/s]')
%ylabel(hAx(2),'Profundidad [m]')
figure
[hAx,hLine1,hLine2] = plotyy(x,H,x,-d);
grid on;
xlabel('Distancia [m]')
ylabel(hAx(1),'H [m]')
ylabel(hAx(2),'Profundidad [m]')
titulo = sprintf('ALTURA DE OLA EN TEORÍA LINEAL PARA T = %3.2f s', T);
title(titulo)
%% INICIALIZAR
g = 9.8182;
p_im1 = p;
%% ITERACIONES
for i=1:N
f = p_im1 - (g*T^2/2/pi)*tanh(2*pi*d/p_im1);
fp = 1-(T^2*d*g*((tanh(2*pi*d/p_im1))^2-1))/p_im1^2;
p_i = p_im1-f/fp;
if abs(p_i - p_im1) < eps
L = p_i;
i = N;
else
p_im1 = p_i;
end
end
%% CELGRUP
% Cálculo de la celeridad de grupo y celeridad de fase
%
% Variables
% d : Profundidad [m]
% T : Periodo [s]
% L : Longitud de onda [m]
%% CALCULO
C = L/T;
k = 2*pi/L;
n = (1/2)*(1+2*k*d/sinh(2*k*d));
Cg = n*C;
Resultados
Se muestran a continuación los resultados obtenidos.
PERFIL TRANSVERSAL m = 0.025
50
-50
Profundidad [m]
-100
-150
-200
-250
0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000
Distancia [m]
300 0
Profundidad [m]
200 -100
100 -200
0 -300
0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000
Distancia [m]
C
Cg
20
15
Celeridad [m/s]
10
0
0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000
Distancia [m]
20 0
Profundidad [m]
H [m]
10 -200
0 -400
0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000
Distancia [m]
Preguntas
1. Con los conocimientos de Matlab® que has adquirido, ¿qué cambios harías al código
para introducir un perfil transversal real?
2. ¿Cuál sería el paso a dar a continuación para obtener un modelo matemático más
próximo a la realidad?