//$Id: bssn_rhs.h,v 1.6 2012/11/08 11:44:16 zjcao Exp $
#ifndef BSSN_H
#define BSSN_H

#ifdef fortran1
#define f_compute_rhs_bssn compute_rhs_bssn
#define f_compute_rhs_bssn_ss compute_rhs_bssn_ss
#define f_compute_rhs_bssn_escalar compute_rhs_bssn_escalar
#define f_compute_rhs_bssn_escalar_ss compute_rhs_bssn_escalar_ss
#define f_compute_rhs_Z4c compute_rhs_z4c
#define f_compute_rhs_Z4cnot compute_rhs_z4cnot
#define f_compute_rhs_Z4c_ss compute_rhs_z4c_ss
#define f_compute_constraint_fr compute_constraint_fr
#endif
#ifdef fortran2
#define f_compute_rhs_bssn COMPUTE_RHS_BSSN
#define f_compute_rhs_bssn_ss COMPUTE_RHS_BSSN_SS
#define f_compute_rhs_bssn_escalar COMPUTE_RHS_BSSN_ESCALAR
#define f_compute_rhs_bssn_escalar_ss COMPUTE_RHS_BSSN_ESCALAR_SS
#define f_compute_rhs_Z4c COMPUTE_RHS_Z4C
#define f_compute_rhs_Z4cnot COMPUTE_RHS_Z4CNOT
#define f_compute_rhs_Z4c_ss COMPUTE_RHS_Z4C_SS
#define f_compute_constraint_fr COMPUTE_CONSTRAINT_FR
#endif
#ifdef fortran3
#define f_compute_rhs_bssn compute_rhs_bssn_
#define f_compute_rhs_bssn_ss compute_rhs_bssn_ss_
#define f_compute_rhs_bssn_escalar compute_rhs_bssn_escalar_
#define f_compute_rhs_bssn_escalar_ss compute_rhs_bssn_escalar_ss_
#define f_compute_rhs_Z4c compute_rhs_z4c_
#define f_compute_rhs_Z4cnot compute_rhs_z4cnot_
#define f_compute_rhs_Z4c_ss compute_rhs_z4c_ss_
#define f_compute_constraint_fr compute_constraint_fr_
#endif
extern "C"
{
        int f_compute_rhs_bssn(int *, double &, double *, double *, double *,                                                      // ex,T,X,Y,Z
                               double *, double *,                                                                                 // chi, trK
                               double *, double *, double *, double *, double *, double *,                                         // gij
                               double *, double *, double *, double *, double *, double *,                                         // Aij
                               double *, double *, double *,                                                                       // Gam
                               double *, double *, double *, double *, double *, double *, double *,                               // Gauge
                               double *, double *,                                                                                 // chi, trK
                               double *, double *, double *, double *, double *, double *,                                         // gij
                               double *, double *, double *, double *, double *, double *,                                         // Aij
                               double *, double *, double *,                                                                       // Gam
                               double *, double *, double *, double *, double *, double *, double *,                               // Gauge
                               double *, double *, double *, double *, double *, double *, double *, double *, double *, double *, // stress-energy
                               double *, double *, double *, double *, double *, double *,                                         // Christoffel
                               double *, double *, double *, double *, double *, double *,                                         // Christoffel
                               double *, double *, double *, double *, double *, double *,                                         // Christoffel
                               double *, double *, double *, double *, double *, double *,                                         // Ricci
                               double *, double *, double *, double *, double *, double *, double *,                               // constraint violation
                               int &, int &, double &, int &);
}

extern "C"
{
        int f_compute_rhs_bssn_ss(int *, double &, double *, double *, double *,                                                      // ex,T,rho,sigma,R
                                  double *, double *, double *,                                                                       // X,Y,Z
                                  double *, double *, double *,                                                                       // drhodx,drhody,drhodz
                                  double *, double *, double *,                                                                       // dsigmadx,dsigmady,dsigmadz
                                  double *, double *, double *,                                                                       // dRdx,dRdy,dRdz
                                  double *, double *, double *, double *, double *, double *,                                         // drhodxx,drhodxy,drhodxz,drhodyy,drhodyz,drhodzz
                                  double *, double *, double *, double *, double *, double *,                                         // dsigmadxx,dsigmadxy,dsigmadxz,dsigmadyy,dsigmadyz,dsigmadzz
                                  double *, double *, double *, double *, double *, double *,                                         // dRdxx,dRdxy,dRdxz,dRdyy,dRdyz,dRdzz
                                  double *, double *,                                                                                 // chi, trK
                                  double *, double *, double *, double *, double *, double *,                                         // gij
                                  double *, double *, double *, double *, double *, double *,                                         // Aij
                                  double *, double *, double *,                                                                       // Gam
                                  double *, double *, double *, double *, double *, double *, double *,                               // Gauge
                                  double *, double *,                                                                                 // chi, trK
                                  double *, double *, double *, double *, double *, double *,                                         // gij
                                  double *, double *, double *, double *, double *, double *,                                         // Aij
                                  double *, double *, double *,                                                                       // Gam
                                  double *, double *, double *, double *, double *, double *, double *,                               // Gauge
                                  double *, double *, double *, double *, double *, double *, double *, double *, double *, double *, // stress-energy
                                  double *, double *, double *, double *, double *, double *,                                         // Christoffel
                                  double *, double *, double *, double *, double *, double *,                                         // Christoffel
                                  double *, double *, double *, double *, double *, double *,                                         // Christoffel
                                  double *, double *, double *, double *, double *, double *,                                         // Ricci
                                  double *, double *, double *, double *, double *, double *, double *,                               // constraint violation
                                  int &, int &, double &, int &, int &);
}

extern "C"
{
        int f_compute_rhs_bssn_escalar(int *, double &, double *, double *, double *,                                                      // ex,T,X,Y,Z
                                       double *, double *,                                                                                 // chi, trK
                                       double *, double *, double *, double *, double *, double *,                                         // gij
                                       double *, double *, double *, double *, double *, double *,                                         // Aij
                                       double *, double *, double *,                                                                       // Gam
                                       double *, double *, double *, double *, double *, double *, double *,                               // Gauge
                                       double *, double *,                                                                                 // Sphi, Spi
                                       double *, double *,                                                                                 // chi, trK
                                       double *, double *, double *, double *, double *, double *,                                         // gij
                                       double *, double *, double *, double *, double *, double *,                                         // Aij
                                       double *, double *, double *,                                                                       // Gam
                                       double *, double *, double *, double *, double *, double *, double *,                               // Gauge
                                       double *, double *,                                                                                 // Sphi, Spi
                                       double *, double *, double *, double *, double *, double *, double *, double *, double *, double *, // stress-energy
                                       double *, double *, double *, double *, double *, double *,                                         // Christoffel
                                       double *, double *, double *, double *, double *, double *,                                         // Christoffel
                                       double *, double *, double *, double *, double *, double *,                                         // Christoffel
                                       double *, double *, double *, double *, double *, double *,                                         // Ricci
                                       double *, double *, double *, double *, double *, double *, double *,                               // constraint violation
                                       int &, int &, double &, int &);
}

extern "C"
{
        int f_compute_rhs_bssn_escalar_ss(int *, double &, double *, double *, double *,                                                      // ex,T,rho,sigma,R
                                          double *, double *, double *,                                                                       // X,Y,Z
                                          double *, double *, double *,                                                                       // drhodx,drhody,drhodz
                                          double *, double *, double *,                                                                       // dsigmadx,dsigmady,dsigmadz
                                          double *, double *, double *,                                                                       // dRdx,dRdy,dRdz
                                          double *, double *, double *, double *, double *, double *,                                         // drhodxx,drhodxy,drhodxz,drhodyy,drhodyz,drhodzz
                                          double *, double *, double *, double *, double *, double *,                                         // dsigmadxx,dsigmadxy,dsigmadxz,dsigmadyy,dsigmadyz,dsigmadzz
                                          double *, double *, double *, double *, double *, double *,                                         // dRdxx,dRdxy,dRdxz,dRdyy,dRdyz,dRdzz
                                          double *, double *,                                                                                 // chi, trK
                                          double *, double *, double *, double *, double *, double *,                                         // gij
                                          double *, double *, double *, double *, double *, double *,                                         // Aij
                                          double *, double *, double *,                                                                       // Gam
                                          double *, double *, double *, double *, double *, double *, double *,                               // Gauge
                                          double *, double *,                                                                                 // Sphi,Spi
                                          double *, double *,                                                                                 // chi, trK
                                          double *, double *, double *, double *, double *, double *,                                         // gij
                                          double *, double *, double *, double *, double *, double *,                                         // Aij
                                          double *, double *, double *,                                                                       // Gam
                                          double *, double *, double *, double *, double *, double *, double *,                               // Gauge
                                          double *, double *,                                                                                 // Sphi,Spi
                                          double *, double *, double *, double *, double *, double *, double *, double *, double *, double *, // stress-energy
                                          double *, double *, double *, double *, double *, double *,                                         // Christoffel
                                          double *, double *, double *, double *, double *, double *,                                         // Christoffel
                                          double *, double *, double *, double *, double *, double *,                                         // Christoffel
                                          double *, double *, double *, double *, double *, double *,                                         // Ricci
                                          double *, double *, double *, double *, double *, double *, double *,                               // constraint violation
                                          int &, int &, double &, int &, int &);
}

extern "C"
{
        int f_compute_rhs_Z4c(int *, double &, double *, double *, double *,                        // ex,T,X,Y,Z
                              double *, double *,                                                   // chi, trK
                              double *, double *, double *, double *, double *, double *,           // gij
                              double *, double *, double *, double *, double *, double *,           // Aij
                              double *, double *, double *,                                         // Gam
                              double *, double *, double *, double *, double *, double *, double *, // Gauge
                              double *,                                                             // Z4
                              double *, double *,                                                   // chi, trK
                              double *, double *, double *, double *, double *, double *,           // gij
                              double *, double *, double *, double *, double *, double *,           // Aij
                              double *, double *, double *,                                         // Gam
                              double *, double *, double *, double *, double *, double *, double *, // Gauge
                              double *,                                                             // Z4
                              double *, double *, double *, double *, double *, double *, double *, double *, double *, double *,
                              double *, double *, double *, double *, double *, double *,
                              double *, double *, double *, double *, double *, double *,
                              double *, double *, double *, double *, double *, double *,
                              double *, double *, double *, double *, double *, double *,
                              double *, double *, double *, double *, double *, double *, double *,
                              int &, int &, double &, int &);
}

extern "C"
{
        int f_compute_rhs_Z4c_ss(int *, double &, double *, double *, double *,                                                      // ex,T,rho,sigma,R
                                 double *, double *, double *,                                                                       // X,Y,Z
                                 double *, double *, double *,                                                                       // drhodx,drhody,drhodz
                                 double *, double *, double *,                                                                       // dsigmadx,dsigmady,dsigmadz
                                 double *, double *, double *,                                                                       // dRdx,dRdy,dRdz
                                 double *, double *, double *, double *, double *, double *,                                         // drhodxx,drhodxy,drhodxz,drhodyy,drhodyz,drhodzz
                                 double *, double *, double *, double *, double *, double *,                                         // dsigmadxx,dsigmadxy,dsigmadxz,dsigmadyy,dsigmadyz,dsigmadzz
                                 double *, double *, double *, double *, double *, double *,                                         // dRdxx,dRdxy,dRdxz,dRdyy,dRdyz,dRdzz
                                 double *, double *,                                                                                 // chi, trK
                                 double *, double *, double *, double *, double *, double *,                                         // gij
                                 double *, double *, double *, double *, double *, double *,                                         // Aij
                                 double *, double *, double *,                                                                       // Gam
                                 double *, double *, double *, double *, double *, double *, double *,                               // Gauge
                                 double *,                                                                                           // TZ
                                 double *, double *,                                                                                 // chi, trK
                                 double *, double *, double *, double *, double *, double *,                                         // gij
                                 double *, double *, double *, double *, double *, double *,                                         // Aij
                                 double *, double *, double *,                                                                       // Gam
                                 double *, double *, double *, double *, double *, double *, double *,                               // Gauge
                                 double *,                                                                                           // TZ
                                 double *, double *, double *, double *, double *, double *, double *, double *, double *, double *, // stress-energy
                                 double *, double *, double *, double *, double *, double *,                                         // Christoffel
                                 double *, double *, double *, double *, double *, double *,                                         // Christoffel
                                 double *, double *, double *, double *, double *, double *,                                         // Christoffel
                                 double *, double *, double *, double *, double *, double *,                                         // Ricci
                                 double *, double *, double *, double *, double *, double *, double *,                               // constraint violation
                                 int &, int &, double &, int &, int &);
}

extern "C"
{
        int f_compute_rhs_Z4cnot(int *, double &, double *, double *, double *,                        // ex,T,X,Y,Z
                                 double *, double *,                                                   // chi, trK
                                 double *, double *, double *, double *, double *, double *,           // gij
                                 double *, double *, double *, double *, double *, double *,           // Aij
                                 double *, double *, double *,                                         // Gam
                                 double *, double *, double *, double *, double *, double *, double *, // Gauge
                                 double *,                                                             // Z4
                                 double *, double *,                                                   // chi, trK
                                 double *, double *, double *, double *, double *, double *,           // gij
                                 double *, double *, double *, double *, double *, double *,           // Aij
                                 double *, double *, double *,                                         // Gam
                                 double *, double *, double *, double *, double *, double *, double *, // Gauge
                                 double *,                                                             // Z4
                                 double *, double *, double *, double *, double *, double *, double *, double *, double *, double *,
                                 double *, double *, double *, double *, double *, double *,
                                 double *, double *, double *, double *, double *, double *,
                                 double *, double *, double *, double *, double *, double *,
                                 double *, double *, double *, double *, double *, double *,
                                 double *, double *, double *, double *, double *, double *, double *,
                                 int &, int &, double &, int &, double &);
}

extern "C"
{
        void f_compute_constraint_fr(int *, double *, double *, double *,                        // ex,X,Y,Z
                                     double *, double *, double *, double *,                     // chi, trK,rho,Sphi
                                     double *, double *, double *, double *, double *, double *, // gij
                                     double *, double *, double *, double *, double *, double *, // Aij
                                     double *, double *, double *, double *, double *, double *, // Rij
                                     double *, double *, double *, double *, double *, double *, // Sij
                                     double *);
} // FR_cons

#endif /* BSSN_H */
