/*
 *  C program for the FES2012 prediction software.
 *
 *  File      : testfes.c
 *  Developer : CLS - CNRS/LEGOS
 *  Version   : 2.0
 *  Date      : 15 April 2013
 *
 * ----------------------------------------------------------------------
 *
 *  rc      : return code (problem if rc != 0)
 *  lat     : latitude
 *  lon     : longitude
 *  time    : time in CNES Julian days
 *  hour    : hour
 *  tide    : short tides (semi_diurnal and diurnal tides)
 *  lp      : long period tides
 *  load    : loading effects for short tide
 *  loadlp  : loading effects for long period tides
              (is always equal to zero)
 *
 *  tide+lp             = pure tide (as seen by a tide gauge)
 *  tide+lp+load        = geocentric tide ((as seen by a satellite)
 *  CNES Julian day     = NASA Julian day + 2922
 *  CNES Julian day 0 is at midnight between the 31 December
 *                          and 01 January 1950 AD Gregorian
 *
 */

#include <stdlib.h>
#include <stdio.h>

#include "fes.h"

#define INI                 "../data/fes_2012.ini"
#define FES_DATA            "../data"

int main(void)
{
    int err;
    int hour;
    int	isData;
    double lon = -7.688;
    double lat = 59.195;
    double tide;
    double time, time_got;
    double lp;
    double load;
    double loadlp;
    FES short_tide;
    FES radial_tide;

#ifdef WIN32
    _putenv(FES_DATA);
#else
    setenv("FES_DATA", FES_DATA, 1);
#endif

    if (fes_new(&short_tide, FES_TIDE, FES_IO, INI))
    {
        printf("fes error : %s\n", fes_error(short_tide));
        goto on_error;
    }

    if (fes_new(&radial_tide, FES_RADIAL, FES_IO, INI))
    {
        printf("fes error : %s\n", fes_error(radial_tide));
        goto on_error;
    }

    printf("%12s %5s %9s %9s %9s %9s %9s %9s %9s\n",
    "JulDay","Hour","Latitude","Longitude",
    "Short_tid","LP_tid","Pure_Tide","Geo_Tide","Rad_Tide");

    for (hour = 0, time = 12053; hour < 24; hour++, time += 1 / 24.0)
    {
        /* Compute ocean tide */
        if (fes_core(short_tide, lat, lon, time, &tide, &lp))
        {
            if (fes_errno(short_tide) == FES_NO_DATA)
                continue;
            else
            {
                fprintf(stderr, "%s\n", fes_error(short_tide));
                goto on_error;
            }
        }

         /* Compute loading tide */
       if (fes_core(radial_tide, lat, lon, time, &load, &loadlp))
        {
            if (fes_errno(radial_tide) == FES_NO_DATA)
                continue;
            else
            {
                fprintf(stderr, "%s\n", fes_error(radial_tide));
                goto on_error;
            }
        }


        printf("%12.5f %5d %9.3f %9.3f %9.3f %9.3f %9.3f %9.3f %9.3f\n",
           time,
           hour,
           lat,
           lon,
           tide,
           lp,
           tide+lp,
           tide+lp+load,
           load);


    }

    fes_delete(short_tide);
    fes_delete(radial_tide);

    return 0;

    on_error: return 1;
}
