Академический Документы
Профессиональный Документы
Культура Документы
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 .............................................................................................................. 3
Propagación de oleaje ............................................................................................................... 3
Longitud de onda ...................................................................................................................... 4
El método de Newton-Raphson para hallar raíces de una ecuación f(x)=0 .......................... 4
Interpretación geométrica ................................................................................................ 4
Formulación del método ................................................................................................... 5
Algoritmo........................................................................................................................... 5
Aplicación al caso de la longitud de onda ......................................................................... 6
Código Matlab ................................................................................................................... 6
EJERCICIO 1........................................................................................................................ 7
Modelización de la propagación de oleaje en diferencias finitas ............................................. 8
Diferencias finitas .................................................................................................................. 9
Introducción ...................................................................................................................... 9
Discretización del dominio ................................................................................................ 9
Aproximación por diferencias finitas .............................................................................. 11
Aplicación al perfil transversal de una playa ................................................................... 12
Código.............................................................................................................................. 13
Resultados ....................................................................................................................... 16
Preguntas ........................................................................................................................ 18
Pérdidas de energía..................................................................................................................... 19
Rotura del oleaje ..................................................................................................................... 19
Modelización numérica ....................................................................................................... 20
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 MATLAB
%% 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?
Pérdidas de energía
Probablemente has contestado a la pregunta 2 del apartado anterior que la gráfica resultante
de altura de ola significante que muestra la Figura 4 es bastante irreal. En efecto, no se ha
considerado la pérdida de energía debido a la rotura del oleaje.
Vamos a considerar la rotura del oleaje y a introducirla en el modelo mediante una función que
vamos a denominar “breaker”.
Vamos a tomar, por ejemplo, el de Battjes (1975), que dice que el índice de rotura es:
0.21
𝐻𝐻𝑏𝑏 𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡
= 1.14 ⎛ ⎞
𝑑𝑑𝑏𝑏 𝐻𝐻0 [5]
�
⎝ 𝐿𝐿0 ⎠
Entonces, si la relación H/d es mayor o igual que el índice de rotura, la ola rompe.
En esta ecuación, κ es un coeficiente de decay, que hay que ajustar, F es el flujo de energía del
oleaje, que como sabemos es F = E·Cg, y Fs es el flujo de energía de la ola estable que, según
Horikawa y Kuo (1967), puede expresarse como:
𝐻𝐻𝑠𝑠 = Γ · 𝑑𝑑
[7]
Γ es un nuevo coeficiente, que ha de ajustarse, asimismo.
Dado que cuando la ola rompe se encuentra casi en profundidades reducidas, puede suponerse
que 𝐶𝐶𝑔𝑔 = 𝐶𝐶~�𝑔𝑔𝑔𝑔, y por tanto:
1
𝐹𝐹𝑠𝑠 = 𝜌𝜌𝜌𝜌𝐻𝐻𝑠𝑠 ²�𝑔𝑔𝑔𝑔
8 [8]
κ = 0.17
Γ = 0.40
Modelización numérica
La eq. [6] se puede escribir en diferencias finitas como:
6 0
Profundidad [m]
H [m]
4 -100
2 -200
0 -300
0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000
Distancia [m]
Código MATLAB
function F = breaker(H, Dx, d, Fa)
% Cálculo de la disipación de energía por rotura del oleaje
% H : Altura de ola en el nodo
% Hs : Altura de ola estable
% d : Profundidad en el nodo
% Dx : Ancho de malla
% kappa : Coeficiente empírico de decay
% Fs : Flujo de energía de la ola estable
% F : Flujo de energía de la ola en el tramo
% Fa : Flujo de energía en el tramo anterior
% G : Coeficiente de estabilidad
%% DALLY (1980)
% Valores recomendados
G = 0.40;
kappa = 0.17;
%% CALCULO
Hs = G * d;
Fs = (1/8)*1.026*Hs^2*(9.81*d)^(1/2);
F1 = (1/8)*1.026*H^2*(9.81*d)^(1/2);
F = Fa-(kappa/d)*(F1-Fs)*Dx;
F2 = (F+F1)/2;
F = Fa-(kappa/d)*(F2-Fs)*Dx;
F3 = (F+F2)/2;
F = Fa-(kappa/d)*(F3-Fs)*Dx;
En este caso, imagínese un perfil, obtenido de un cálculo realizado en clase, sobre la batimetría
de una playa en la provincia de Cádiz:
x [m] d [m]
0 12.0614882
9.99541921 12.0500504
60.0575093 11.9904747
106.818042 11.9314329
110.119599 11.9271247
160.18169 11.8590187
210.24378 11.7842
260.30587 11.699748
310.36796 11.600773
360.43005 11.478537
410.49214 11.3202575
460.55423 11.1148974
510.61632 10.8649053
560.67841 10.5953666
610.7405 10.3461894
660.802591 10.1486228
710.864681 10.0026838
760.926771 9.87301915
x [m] d [m]
810.988861 9.70929444
861.050951 9.46686655
911.113041 9.12622169
961.175131 8.70586402
1011.23722 8.25113562
1061.29931 7.80027833
1111.04763 7.3661786
1111.3614 7.36347523
1161.42349 6.92591782
1211.48558 6.45931517
1261.54767 5.93032621
1311.60976 5.31697666
1361.67185 4.63859322
1411.73394 3.9520549
1461.79603 3.48061175
1511.85812 2.723328
1561.92021 1.6381703
1611.9823 0.90426649
1662.04439 0.45396082
1712.10648 0.23143111
1762.16857 0.13729001
1812.23066 0.09268567
1862.29275 0.06017029
1912.35484 0.0330336
1962.41693 0.01440263
2012.47902 0.00479139
2018.55319 0.0042117
2100 0
2500 -1
Tabla 2 Perfil batimétrico
%% PERFIL DE PLAYA
perfil = xlsread('Playa.xlsx');
d = perfil(:,2);
x = perfil(:,1);
PERFIL TRANSVERSAL
2
-2
-4
Profundidad [m]
-6
-8
-10
-12
-14
0 500 1000 1500 2000 2500
Distancia [m]
Si damos una altura de ola inicial Hi = 3.50 m y T = 9 s, los resultados, empleando el criterio de
rotura de Miche (1944) se muestran a continuación:
3.5 0
3 -2
2.5 -4
Profundidad [m]
H [m]
2 -6
1.5 -8
1 -10
0.5 -12
0 -14
0 500 1000 1500 2000 2500
Di t i [ ]
Figura 8 Altura de ola
C
9
Cg
6
Celeridad [m/s]
0
0 500 1000 1500 2000 2500
Distancia [m]
Figura 9 Celeridad
Profundidad [m]
50 0
0 -20
0 500 1000 1500 2000 2500
Distancia [m]
Código MATLAB
El código se ha optimizado, pudiéndose elegir varios criterios de rotura. Queda según se muestra
seguidamente:
%% EJERCICIO 1
%
% En esta revisión, se cambia el perfil uniforme por un perfil real leido
% de un libro Excel
%% INICIALIZAR
clc;
clear all;
close all;
commandwindow;
T = 9;
H_0 = 3.50;
% rotura = 'Battjes_75';
% rotura = 'McCowan';
% rotura = 'Miche_93';
rotura = 'Miche_44';
%% PERFIL DE PLAYA
perfil = xlsread('Playa.xlsx');
d = perfil(:,2);
x = perfil(:,1);
N = size(x,1);
%% CALCULOS
i = 1;
L_0 = 1.56*T^2;
L(1) = londa(d(i), T, 0.001, L_0, 10);
[Cg(1), C(1)] = CelGrup(d(1),T,L(1));
H(1) = H_0;
rota(1) = 0;
%% MODELIZACION
fctrl = fopen('prop.log','w');
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));
% Comprobar rotura
switch rotura
case 'McCowan' % McGowan (1891)
IR_McCowan = H(i)/d(i);
if IR_McCowan > 0.76
rota(i) = 1;
else
rota(i) = 0;
end
otherwise
end
if rota(i) == 1
F(i) = breaker(H(i),x(i)-x(i-1),d(i), F(i-1));
H(i) = sqrt((8*F(i))/(1.026*sqrt(9.81*d(i))));
else
F(i) = (1/8)*1.026*H(i)^2*sqrt(9.81*d(i));
end
else
L(i) = 0;
Cg(i) = 0;
C(i) = 0;
H(i)= 0;
rota(i) = 1;
end
end
fclose(fctrl);
%% SALIDA
fsal = 1;
fprintf(fsal,'Rotura: %10s \n', rotura);
%% DIBUJO
plot(x,-d)
grid on;
xlabel('Distancia [m]')
ylabel('Profundidad [m]')
titulo = 'PERFIL TRANSVERSAL';
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]')
titulo = sprintf('CELERIDAD EN TEORÍA LINEAL PARA T = %3.2f s', T);
title(titulo)
legend('C','Cg')
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)
Otras optimizaciones
Se puede seguir optimizando el código, mejorando los criterios de rotura, cambiando el cálculo
de la pérdida de energía, introduciendo el porcentaje de olas rotas de Battjes & Janssen para
simular el comportamiento del oleaje irregular, etc.