/*
 *  C program for the FES2012 prediction software.
 *
 *  File      : testfes.c
 *  Developer : CLS - CNRS/LEGOS
 *  Version   : 1.3
 *  Date      : 15 April 2013
 *
 * ----------------------------------------------------------------------
 *
 *  rc      : return code (problem if rc != 0)
 *  lat     : latitude
 *  lon     : longitude
 *  time    : time in CNES Julian days
 *  hour    : hour
 *  u,v     : short period tides (semi_diurnal and diurnal tides)
 *  lp      : long period tides : do not use for currents
 *
 *  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 INIU                "../data/fes_2012_u.ini"
#define INIV                "../data/fes_2012_v.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;
    double lp;
    double u;
    double v;
    FES u_tide;
    FES v_tide;

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

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

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

    printf("%12s %5s %9s %9s %9s %9s\n",
    "JulDay","Hour","Latitude","Longitude","u_tide","v_tide");

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

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

        printf("%12.5f %5d %9.3f %9.3f %9.3f %9.3f\n",
           time,
           hour,
           lat,
           lon,
           u,
           v);

    }

    fes_delete(u_tide);
    fes_delete(v_tide);

    return 0;

    on_error: return 1;
}
