/*
 *  cpldosc_fast_gvf.c
 *
 *  GSL C file for the vector field named: cpldosc_fast
 *
 *  This file was generated by the program VFGEN (Version:Badfinger)
 *  Generated on 23-May-2005 at 15:23
 */

#include <math.h>
#include <gsl/gsl_errno.h>
#include <gsl/gsl_matrix.h>
#include <gsl/gsl_odeiv.h>

/*
 *  The vector field.
 */

int cpldosc_fast_vf(double t, const double y_[], double f_[], void *params)
    {
    double v1, v2;
    double sigma1, sigma2, omega, q1, q2;
    double f1, f2;
    double *p_;

    p_ = (double *) params;

    v1     = y_[0];
    v2     = y_[1];

    sigma1 = p_[0];
    sigma2 = p_[1];
    omega  = p_[2];
    q1     = p_[3];
    q2     = p_[4];

    f1 = 1.0/(exp(-40.0*v1+(8.0/15.0))+1.0);
    f2 = 1.0/(exp(-40.0*v2+(8.0/15.0))+1.0);

    f_[0] = -f2*omega*(v1+4.0)-q1-v1+tanh(sigma1*v1);
    f_[1] = tanh(v2*sigma2)-v2-q2-(v2+4.0)*omega*f1;

    return GSL_SUCCESS;
    }

/*
 *  The Jacobian.
 */

int cpldosc_fast_jac(double t, const double y_[], double *jac_, double *dfdt_, void *params)
    {
    double v1, v2;
    double sigma1, sigma2, omega, q1, q2;
    double *p_;

    p_ = (double *) params;

    v1     = y_[0];
    v2     = y_[1];

    sigma1 = p_[0];
    sigma2 = p_[1];
    omega  = p_[2];
    q1     = p_[3];
    q2     = p_[4];

    gsl_matrix_view dfdy_mat = gsl_matrix_view_array(jac_,2,2);
    gsl_matrix *m_ = &dfdy_mat.matrix;

    gsl_matrix_set(m_, 0, 0, -omega/(exp(-40.0*v2+(8.0/15.0))+1.0)+sigma1*(-pow(tanh(sigma1*v1),2.0)+1.0)-1.0);
    gsl_matrix_set(m_, 0, 1, -40.0*omega*exp(-40.0*v2+(8.0/15.0))/pow(exp(-40.0*v2+(8.0/15.0))+1.0,2.0)*(v1+4.0));
    gsl_matrix_set(m_, 1, 0, -40.0*(v2+4.0)/pow(exp(-40.0*v1+(8.0/15.0))+1.0,2.0)*exp(-40.0*v1+(8.0/15.0))*omega);
    gsl_matrix_set(m_, 1, 1, (-pow(tanh(v2*sigma2),2.0)+1.0)*sigma2-1.0/(exp(-40.0*v1+(8.0/15.0))+1.0)*omega-1.0);

    dfdt_[0] = 0.0;
    dfdt_[1] = 0.0;

    return GSL_SUCCESS;
    }

/*
 *  The Jacobian with respect to the parameters.
 */

int cpldosc_fast_jacp(double t, const double y_[], double *jacp_, void *params)
    {
    double v1, v2;
    double sigma1, sigma2, omega, q1, q2;
    double *p_;

    p_ = (double *) params;

    v1     = y_[0];
    v2     = y_[1];

    sigma1 = p_[0];
    sigma2 = p_[1];
    omega  = p_[2];
    q1     = p_[3];
    q2     = p_[4];

    gsl_matrix_view dfdp_mat = gsl_matrix_view_array(jacp_,2,5);
    gsl_matrix *m_ = &dfdp_mat.matrix;

    gsl_matrix_set(m_, 0, 0, v1*(-pow(tanh(sigma1*v1),2.0)+1.0));
    gsl_matrix_set(m_, 0, 1, 0.0);
    gsl_matrix_set(m_, 0, 2, -1.0*1.0/(exp(-40.0*v2+(8.0/15.0))+1.0)*(v1+4.0));
    gsl_matrix_set(m_, 0, 3, -1.0);
    gsl_matrix_set(m_, 0, 4, 0.0);
    gsl_matrix_set(m_, 1, 0, 0.0);
    gsl_matrix_set(m_, 1, 1, v2*(-pow(tanh(v2*sigma2),2.0)+1.0));
    gsl_matrix_set(m_, 1, 2, -1.0*(v2+4.0)/(exp(-40.0*v1+(8.0/15.0))+1.0));
    gsl_matrix_set(m_, 1, 3, 0.0);
    gsl_matrix_set(m_, 1, 4, -1.0);

    return GSL_SUCCESS;
    }

