Análisis de armónicos de marea astronómica con T_TIDE

Hace unos días recuperé un antiguo script de Matlab para realizar un análisis de armónicos de marea astronómica con la sorpresa de que, al ejecutarlo, obtenía un error donde antes no había problema. Por tanto, decidí buscar en la red algún otro script, guía o foro para solucionarlo, sin mucho éxito y sin encontrar apenas información. Finalmente conseguí solucionarlo y me motivé para dejar a medias la entrada que estaba preparando y abordar este tema en una nueva entrada en el blog.

La descripción y análisis de la marea resulta imprescindible en la mayoría de los estudios costeros, siendo especialmente interesante en los estudios de estuarios y desembocaduras. El objetivo de este post consiste en ofrecer una guía rápida y sencilla para realizar un análisis de armónicos de la marea astronómica usando la herramienta T_TIDE [1,3] en Matlab (que además es libre).

Marismas de San Vicente de la Barquera

Puesta a punto antes de comenzar

El nivel de marea se puede definir como el nivel del mar sin tener en cuenta la acción del oleaje, y resulta al considerar la marea astronómica y la marea meteorológica.

La marea meteorológica es de tipo aleatorio y se define como la oscilación del nivel del mar inducida por la acción de gradientes de presión atmosférica (marea barotrópica) o por la tensión tangencial del viento sobre la superficie del agua.

La marea astronómica es de carácter determinista y se define como la oscilación periódica del nivel del mar inducida por fuerzas gravitacionales que actúan sobre las partículas de agua en la superficie de la Tierra.

El estudio de la marea astronómica puede abordarse desde tres puntos de vista:

a)      Teoría de equilibrio de Newton (1686) basado en las fuerzas generadoras de la marea.

b)      Teoría dinámica (Laplace, Bernouilli, Euler): Resolución de las ecuaciones fundamentales de la hidrodinámica.

c)       Análisis armónico: Basado en las componentes periódicas de la marea.

El análisis de armónicos es el método más práctico para el estudio de la marea astronómica. Se basa en el conocimiento de que la marea observada está formada por un número de componentes armónicas cuyos periodos han sido perfectamente establecidos y que coinciden con los períodos de algunos de los movimientos astronómicos relativos entre tierra-sol-luna.

La marea astronómica se aproxima por:

formula_mareaastronomica

donde:

formula_marea

suma_armonicos

Esquema de la predicción de la serie temporal de marea astronómica mediante suma de componentes armónicas. Realizado a partir de gráficas del documento [2]

En la siguiente tabla se muestran los componentes armónicos principales:

componentes_principales

Partiendo de un registro del nivel del mar y de la elección de N componente (mediante un análisis espectral), el análisis de armónicos consiste en realizar un ajuste por mínimos cuadrados, es decir, calcular  minimizando el cuadrado de las diferencias entre los niveles observados y los estimados en el método [1].

A continuación se detallan los pasos para realizar un análisis espectral de marea astronómica de forma sencilla y eficaz mediante la herramienta T_TIDE.

Pasos de un análisis de armónicos con T_TIDE

1. Definimos los objetivos que se conseguirán tras el análisis:

  • Descomposición de la variación del nivel del mar en la componente astronómica y la componente meteorológica.
  • Descomposición de la marea astronómica en sus componentes armónicas
  •  Selección de los armónicos principales

2. Obtención de la herramienta

Descargamos la herramienta T_TIDE en la siguiente dirección:  http://www.eos.ubc.ca/~rich/t_tide/t_tide_v1.1.zip

3. Obtención de los datos de entrada

La entrada de esta herramienta consiste en la variación del nivel del mar de la zona de estudio.

Puertos del estado posee una red de mareógrafos de con información de nivel del mar en diferentes puntos alrededor de la península y de diferentes años.

A nivel global, el Centro de Variación del Nivel del Mar de la Universidad de Hawaii posee información de mareógrafos de todo el mundo.

El ejemplo que se analiza en este post corresponde a datos del mareógrafo de Valencia del año 1997 (pinche aquí para descargarlo).

4. Realizamos un script en Matlab para el pre y prostproceso

Utilizar la función T_TIDE en Matlab es muy sencillo. Siguiendo las instrucciones de sus autores, básicamente hay que llamar a la función de la siguiente forma:

[NAME,FREQ,TIDECON,XOUT]=T_TIDE(XIN])

o de la siguiente forma para que lo almacene en un archivo:

[NAME,FREQ,TIDECON,XOUT]=T_TIDE(XIN,’output’,’nombrefichero.txt’)

NAME es nombre del armónico

FREQ es la frecuencia

TIDECON la amplitud y fase con sus respectivos errores

XOUT la serie temporal de marea astronómica

XIN la serie temporal de variación de nivel del mar (los datos de entrada del mareógrafo)

Cada uno puede elaborarse su script de pre y postproceso para analizar los resultados. A continuación os ofrezco mi script con explicaciones detalladas de su uso (pinche aquí para descargar el script). Para usarlo, únicamente hay que modificar los directorios de las carpetas y los nombres de los ficheros.  Los apartados a modificar se señalan de la siguiente forma:

%%%%%%%%%%%%%%%%%%%Modificar%%%%%%%%%%%%%%%%%%%%

cosas a modificar…

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

No olviden que hay que guardar este script dentro de la carpeta t_tide_v1.1 para llamar a la función T_TIDE.

5. Obtención de resultados

–          Documento con la lista completa de armónicos, donde se detalla el nombre,  frecuencia, amplitud y fase.

(pinchar aquí para descargar los resultados del ejemplo propuesto)

–          Representación gráfica de las series temporales de variación del nivel del mar, merea astronómica y marea meteorológica.

resultados_t_tide

Con la frecuencia, amplitud y fase de los armónicos más representativos, representamos la marea astronómica como la suma de armónicos.

formula_mareaastronomica

Además, A partir de la amplitud de los principales armónicos diurnos (K1 y O1) y semidirunos (M2 y S2) es posible calcular un parámetro denominado factor de forma (F) que define que tipo de componentes dominan la marea.

F

En función del valor del factor de forma F, la marea astronómica suele clasificarse en: marea de

tipo semidiurno (F≤0,25), marea de tipo mixto con predominio semidiurno (0,25 < F < 1,5),

marea de tipo mixto con predominio diurno (1,5<F<3) y marea de tipo diurna (F>3).

En este caso, tenemos una marea de tipo diurno, con un factor de forma F=2,3. El armónico principal es el K1 (24h).

Para cualquier duda no duden en escribirme 😉

¡Y si os ha sido útil también! ¡¡Que me pongo muy contenta!! 😀

Anexo: El error que antes no ocurría

Como expliqué al principio, la motivación para escribir esta entrada fue la aparición de un error al llamar a la función T_TIDE que antes no ocurría. Supuse que podría ser de la versión de Matlab. Aún no sé exactamente si la causa es esa, pero si al utilizar T_TIDE os da un error al utilizar debido a “finite”, no hay nada más que entrar en el código T_TIDE y sustituir todos los “finite” por “isfinite”, de este modo se soluciona el problema y el programa funcionará correctamente.

Referencias:

[1]  R. Pawlowicz, B. Beardsley, and S. Lentz, “Classical tidal harmonic analysis including error estimates in MATLAB using T_TIDE”, Computers and Geosciences 28 (2002), 929-937.

[2] Atlas de inundación del litoral peninsular español. Grupo de Ingeniería Oceanográfica y Costas, Universidad de Cantabria.

[3] Web T_TIDE: Rich Pawlowicz’s Matlab Stuff

Anuncios
Comments
42 Responses to “Análisis de armónicos de marea astronómica con T_TIDE”
  1. Nell dice:

    I personally seem to go along with all the stuff that
    ended up being put into writing throughout Bamboo Shades “Análisis de armónicos de marea astronómica con T_TIDE | Fluyendo Libre-mente”.
    I am grateful for all the actual info.Thank you,Freddie

  2. Sebastian dice:

    Hola Isabel Como es el formato del archivo .txt para que el matlab reconosca fecha y desnivelaciones?
    Saludos

    • ijalonrojas dice:

      Hola Sebastian, muchas gracias por tu comentario porque había un error en el enlace del fichero de entrada que estaba enlazado con el de salida, ya está corregido. Ahora puedes ver cual es el formato del archivo .txt de fechas y variaciones del nivel del mar. Un saludos.

  3. sherman dice:

    Excelente post! fácil de entender y con ejemplo.

  4. Juampe dice:

    Muchas gracias Isabel!!!…..soy un estudiante de doctorado, y buscando por la red he caído en tu blog como el que cae en un paraíso…el tutorial de T_Tide es exactamente lo que necesitaba!

    Espero poder ayudar a alguien algún día con lo que hago como tu has hecho conmigo!…hay algo más bonito que eso?

    Muchas gracias de nuevo!

    Saludos!

  5. diego garcia dice:

    Isabel, muchas gracias por tu aporte, nos ayudaste a resolver un inconveniente que teníamos para poder correr la rutina

  6. Fernando dice:

    Excelente, gran aporte

  7. Albert dice:

    Buenas! estoy realizando una tesina sobre el analisis de las columnas de agua medidas por unos correntimetros en la desembocadura del río Nervión, en el puerto de Bilbao y sus alrededores y me han surgido unas dudas con los resultados de un conrrentimetro. Esta fondeado ya en aguas abiertas justo delante de la desembocadura y fuera del puerto a unos 67m de profundidad. El caso es que los resultados obtenidos muestran un giro a la izquierda de la columna de agua, contrariamente a lo establecido por la espiral de Ekman, que deberia girar a la derecha por estar en Hemisferio Norte. Para el analisis he utilizado el tutorial de MATLAB WORLD CURRENTS, muy parecido al WORLD TIDES pero lee velocidades en lugar de datos de superficie.

    Cualquier idea puede ser de gran ayuda! Mil gracias!

    • Carlos dice:

      Hola Albert, en la desembocadura, puede haber efecto de la escorrentía del flujo de agua dulce hacia el mar, es importante saber si hay variaciones estacionales en el flujo de la desembocadura. Sin dudas pueden haber importantes forzantes mareales, pero se debe tener claro a que profundidad de superficie y del fondo quedó el equipo. Si está cerca de superficie puede haber inducción de movimiento por forzamiento superficial (Shear stress del viento), si quedó próxima a fondo incluso podrían existir contracorrientes por stress sobre el fondo de la propia corriente.

      Saludos

  8. Juan Salaza dice:

    Hola, tengo una consulta. Si la serie original quiero quitarle todos los armónicos de la marea, que tendría hacer.

    saludos

    • ijalonrojas dice:

      Hola Juan, no sé por qué pero no había visto tu mensaje hasta ahora, lo siento, la verdad es que suelo contestar bastante rápido. Aunque sea un poco tarde te respondo: si quitamos todos los armónicos a la serie original lo que estamos haciendo es quitar la componente astronómica o determinística y calculando la marea meteorológica. Para eso hay un paso en el script, es el paso 5 (variable meteo). Espero poderte haber ayudado aunque sea con tanto retraso. Un saludo!

      • Juan Salaza dice:

        Hola, gracias por la ayuda. Tengo una consulta adicional.
        A la serie del mareógrafo quiero remover o quitar la marea astronómica (esto lo realizo t_tide) y la marea meteorológica, mi consulta es: como quito el efecto de la marea meteorológica a los datos del mareografo?

      • ijalonrojas dice:

        Hola Juan, pues si quitamos la marea meteorológica a los datos del mareógrafo solo quedaría la astronómica, que nos lo da ya T_TIDE (variable XOUT del script). Si esa no era tu pregunta me vuelves a escribir. Saludos!

  9. cesar dice:

    hola isabel, yo estoy tratando de hacer un análisis de armónicos con la funcion T_Tide en matlab, la verdad es que soy nuevo usando matlab, en esta parte %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Modificar%%%%%%%%%%%
    path_par=’F:\t_tide_v1.1\’; %directorio del fichero de entrada
    fichero=’REMAR_HOR_HIS_Valencia97.txt’; %nombre del fichero de entrada
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% que debo poner yo ?
    en realidad quiero hacer un script propio para mis zona de estudio y estoy un poco en blanco..
    cualquier ayuda eternamente agradecido …

    • ijalonrojas dice:

      Hola César, en “path_par” deberías poner el directorio de la carpeta donde guardas el fichero de tus datos de partida, y en “fichero” el nombre del fichero que almacena tus propios datos. Si es un fichero que viene de la red REDMAR al igual que el mío, mi script puede servirte sin modificar prácticamente nada. En caso contrario, si tienes problemas, puedes volverme a escribir para ver si puedo echarte una mano. Ya me cuentas qué tal te va. ¡Saludos!

  10. Katherine dice:

    Muchas Gracias por el aporte, me ha servido mucho para mi trabajo. Solo tengo una pequeña duda, cuando explicas sobre las variables de T_TIDE mencionas que la salida XOUT es la serie temporal de marea meteorológica, pero en tus comentarios explicas que T_TIDE te da la marea astronómica lo cual sería la salida XOUT. Además en el script pones “meteo = nivelmar-XOUT”. Entonces XOUT es la serie temporal de marea astronómica????

    • ijalonrojas dice:

      Muchas gracias por tu comentario Katherine, efectivamente hay un error en la explicación de las variables. XOUT es la serie temporal de marea astronómica y no meteorológica, el error ya está corregido 😉 Saludos!!

      • Hola Isabel, excelente blog, es de gran utilidad. Respecto a la salida denominada XOUT, he visto que está corregido en el cuerpo del blog, sin embargo en el script que anexas sigue diciendo que “En XOUT se guarda la serie temporal de marea meteorológica”, lo que podría ocasionar confusión. Muchas gracias por tu ayuda.

      • ijalonrojas dice:

        Hola Lida, gracias por tu comentario, intentaré corregirlo lo antes posible. Saludos

  11. Alberto dice:

    Hola, Isabel. Muchas gracias por toda información.

    Tan sólo una consulta. Respecto al análisis general de series temporales, se recomienda que sea de al menos 1 año para que sea “representativo”. ¿Es posible el uso de la función t_tide para series temporales de sólo meses y no es representativo? Mi intención es filtrar el efecto de los componentes mayoritarios de la marea de mis datos.

    Gracias y un cordial saludo,
    Alberto.

    • ijalonrojas dice:

      Hola Alberto,
      gracias por tu comentario. Pues como bien dices, mientras más larga sea la serie temporal, más “representativa” es la descomposición de armónicos. Aún así puedes usarla para menos tiempo, asumiendo las limitaciones que pueden suponer, como el filtrado de los armónicos de gran periodo.

      Por otro lado, si tu objetivo es comparar los armónicos de dos periodos distintos de un mismo año, ahora hay algoritmos más sofisticados que hacen análisis de armónicos no estacionarios (NS_TIDE), es decir, te dan la variación temporal de la amplitud y fase de los armónicos. Te dejo la referencia por si pudiera interesarte. Matte, P., Jay, D.A., Zaron, E.D., 2013. Adaptation of classical tidal harmonic analysis to nonstationary tides, with application to river tides. J. Atmos. Ocean. Technol. 30, 569–589. doi:10.1175/JTECH-D-12-00016.1

      En esta artículo por ejemplo, aplican T_TIDE en cortos periodos de tiempo, así como el NS_TIDE: Guo, L., Van-der-Wegen, M., Jay, D.A., Matte, P., Wang, Z.B., Roelvink, D., He, Q., 2015. River-tide dynamics: Exploration of nonstationary and nonlinear tidal behavior in the Yangtze River estuary. J. Geophys. Res. – Ocean. 120, 3499–3521. doi:10.1002/2014JC010491

      Espero haberte podido ayudar.
      Saludos,
      Isabel

  12. Michelle Gallardo Syriani dice:

    Holaaa, quería consultar si sabes como incorporar las constituyentes de aguas someras, mediante “shallow”.

    • ijalonrojas dice:

      Hola Michelle, creo que respondo a tu pregunta un poco tarde, no vi pasar en mi correo la notificación y hasta ahora no me he dado cuenta. Lo siento. Pues para incluir los componentes de aguas someras sólo tienes que incluir la propiedad ‘shallow’ como bien indicas y a continuación la lista componentes a incluir entre corchetes. Ahí va un ejemplo:

      [NAME,FREQ,TIDECON,XOUT]=t_tide(nivelmar,’shallow’,{‘M10});

      Siento de nuevo el retraso.
      Un saludo

  13. Fernando dice:

    Saludos si alguien podría darme el Link para descargar el software Open source Gnotide…Saludos desde Costa Rica…..

    • Juampe dice:

      Hola a tod@s!

      Hace ya un tiempo le pregunté a Isabel sobre esta magnífica ayuda. Me sirvió de mucho en su día, y me abrió más puertas de investigación. En cuanto a esto, he utilizado otros códigos, como el NS_TIDE que comenta Isabel, pero Alberto, si lo que quieres es usar directamente tus datos de velocidades y direcciones, te aconsejo U_TIDE:

      http://www.po.gso.uri.edu/~codiga/utide/utide.htm

      Está basado en T_TIDE, pero incluye varias mejoras y además te permite trabajar con velocidad y dirección. Además, tiene un archivo PDF (U_TIDE Report, Codiga 2011) muy bien explicado.

      Espero haber ayudado, al igual que Isabel me ayudó a mi!

      Saludos.

      • ijalonrojas dice:

        Gracias por tu comentario Juampe, sin ninguna duda actualmente es mucho mejor utilizar U_TIDE que como dices contiene varias mejoras. Yo aún no lo he usado porque no me ha vuelto a hacer falta utilizar un análisis de armónicos estacionario (ahora estudio estuarios para los que es mucho más útil utilizar análisis no estacionarios) pero me consta que se usa de manera similar a T_TIDE, así que al igual que Juampe os animo a utilizar esta nueva versión de análisis de armónicos. Y por supuesto mi blog está disponible para todo comentario al respecto 😉

      • Juampe dice:

        Gracias Isabel!

        En cuanto a procesos no estacionarios, has utilizado Continuous Wavelet Transform?

        Yo lo estoy utilizando como herramienta de filtrado para datos de nivel piezométrico afectado por la marea. De momento me ha resultado muy útil, aunque he tenido que desarrollar algunos scripts para adaptarlo a este fin, y que aún tengo en desarrollo.

        Era solo eso, por si te sirve de algo la idea. Y si tienes conocimiento de algún trabajo en especial que exista sobre esto, me vendría bien saberlo!

        Gracias de nuevo!

        Juampe.

      • ijalonrojas dice:

        Pues precisamente en mi último artículo he probado varias técnicas espectrales para el análisis de series temporales de alta frecuencia en medio acuáticos, entre ellas la CWT. Te adjunto el link. Si no tienes acceso al documento completo y te interesa puedo enviártelo por email. A ver si cuando acabe la tesis me tomo unas vacaciones y hago tutoriales sobre todas estas técnicas.

        http://onlinelibrary.wiley.com/doi/10.1002/lom3.10097/abstract

        Saludos!!

  14. Buenas noches Isabel, muy interesante tu blog, una excelente iniciativa.

    Aprovecho para hacerte una consulta. El script t_readme de T_tide indica que las correcciones nodales realizadas con la aplicación no pueden ser demasiado precisas para series temporales mayores a 1 año, y sugiere por tanto que si se necesita realizar correcciones nodales (periodos inferiores a 19 años) es preciso partir la serie en secciones anuales; y que si no se necesitan las correcciones por contar con series más largas de lo indicado debe reescribirse el código para que todos los componentes se analicen sin corrección nodal.

    Debo analizar una serie superior a 19 años y no sé qué parte del código de T_tide se debe modificar para realizar el análisis con la serie completa.

    Te agradecería si me pudieras ayudar,

    Saludos,

    • ijalonrojas dice:

      Hola Lida,
      muchas gracias por tu comentario. Nunca he utilizado series temporales tan largas y por tanto nunca he necesitado la corrección nodal, pero creo que hay que incluir dos opciones adicionales cuando llamamos a la función t_tide: la fecha (en formato matlab, datenum) del inicio de la serie temporal y la latitud de tus datos. Te escribo la descripción literal de los autores:

      % ‘start time’ [year,month,day,hour,min,sec]
      % – min,sec are optional OR
      % decimal day (matlab DATENUM scalar)
      % ‘latitude’ decimal degrees (+north) (default: none).

      Te pongo un ejemplo:

      fecha_ini=datenum([2016 7 4 10 0 0]); %imaginemos que ésta es la fecha inicial de tus medidas
      [NAME,FREQ,TIDECON,XOUT]=t_tide(nivelmar,’start time’,fecha_ini,’latitude’,45);

      o bien

      [NAME,FREQ,TIDECON,XOUT]=t_tide(nivelmar,’start time’,[2016 7 4 10 0 0],’latitude’,45);

      Espero que te funcione. Suerte y saludos!
      Isabel

  15. Alberto dice:

    Hola Isabel, quería hacerte una pregunta.

    Has descrito el uso de la función “t_tide” de Pawlowicz & cia. para describir y analizar las mareas. Dices claramente que la XOUT constituye la “marea astronómica”, por tanto si la restamos de nuestra señal original, obtendremos la “marea meteorológica”. He estado leyendo literatura al respecto y nombran mucho los “residuals” y en la mayoría de fuentes afirman que es simplemente la resta de la “señal original” – la “predicción” = ¿marea meteorológica?

    Además de niveles de marea, estoy trabajando con datos de velocidades de corriente provenientes de Gliders. He visto que algunos autores han sido capaces de extraer los efectos de los constituyentes de marea en sus datos de velocidades. Mi pregunta es, ¿se podría seguir el mismo procedimiento para aislar los componentes principales de las mareas de mis datos de velocidad tal y como muestras con datos del nivel del mar con el método de Análisis Harmónico? ¿O es necesario algún otro procedimiento adicional?

    Muchas gracias de antemano, un cordial saludo.

    • ijalonrojas dice:

      Hola Alberto,
      gracias por tu comentario. Efectivamente la resta de la señal original menos la predicción (xout=marea astronómica) es el residual más bien que la marea meteorológica. En su día lo describí así ya que así fue como me lo enseñaron, pero efectivamente no podemos hablar de marea meteorológica ya que la metodología no es capaz de predecir toda la marea astronómica. Intentaré cambiarlo en el post cuando tenga un momento libre.

      Por otro lado creo que no debería haber problema en utilizar esta metodología en datos de velocidad, sobre todo si es solo para discutir los componentes principales (M2, M4,…). Yo he descompuesto señales de velocidad en diferentes frecuencias a través de la “Demodulación compleja” (me gustaría hacer un post sobre eso así como sobre tantas otras cosas…) pero ahora mismo no veo inconveniente para utilizar el análisis de armónicos. Aún así intentaré discutir este tema con algunos compañeros y si tengo una respuesta mejor te comento.

      Saludos!!

  16. Hola, a tod@s,

    Alguien sabe como usar la función T_PREDICT de T_TIDE ?.

  17. Mariana dice:

    Muchísimas gracias por este post.
    A mi me da este error al correr t_tide:
    ndefined function or variable ‘msg’.

    Error in t_tide (line 191)
    if fid==-1, error(msg); end;

    Le pasa a alguien más?

  18. UNIVERSIDAD AUTONOMA DEL CARMEN dice:

    muy buenas tardes. primeramente, gracias por explicar todo muy bien y por tomarse el tiempo de subir este trabajo, escribo este mensaje para comentarte que abro los links de descarga y me indican que los archivos ya no existen, me gustaria saber como poder descargar esos archivos.sin mas por el momento me despido y buen dia

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Plataforma contra el Fracking en Porcuna

Plataforma contra el Fracking en Porcuna

A %d blogueros les gusta esto: