diff --git a/fish90/src/hstcyl_wrap.c b/fish90/src/hstcyl_wrap.c new file mode 100644 index 0000000000000000000000000000000000000000..7caf2fb6776ff0a6212385e8cc2e40298913c73d --- /dev/null +++ b/fish90/src/hstcyl_wrap.c @@ -0,0 +1,78 @@ +/* Wrapper for the HSTCYL function. + Alejandro Luque Estepa - 2006 +*/ + +#include "stdlib.h" +#include "stdio.h" +#include "../include/fishpack.h" +#include "math.h" +#include "assert.h" + +const char *hstcyl_error_str[FISH_ERROR_MAX] = + {"No error", + "A .LT. 0", + "A .GE. B", + "MBDCND .LT. 1 OR MBDCND .GT. 6", + "C .GE. D", + "N .LE. 2", + "NBDCND .LT. 0 OR NBDCND .GT. 4", + "A = 0 AND MBDCND = 1,2,3, OR 4", + "A .GT. 0 AND MBDCND .GE. 5", + "M .LE. 2", + "IDIMF .LT. M", + "LAMBDA .GT. 0", + "A=0, MBDCND .GE. 5, ELMBDA .NE. 0"}; + +int number=0; + +void mhstcyl_(double *r0, double *r1, int *nr, int *rbndcnd, + double *bcr0, double *bcr1, + double *z0, double *z1, int *nz, int *zbndcnd, + double *bcz0, double *bcz1, + double *lambda, double *s, double *f, + int *idimf, double *pertrb, int *ierror); + +/* Calls hstcyl and checks for errors. If an error occurs, prints the + corresponding message and exists. */ +void +fish_hstcyl (double r0, double r1, int nr, + int rbndcnd, double *bcr0, double *bcr1, + double z0, double z1, int nz, + int zbndcnd, double *bcz0, double *bcz1, + double lambda, double s, double *f, int idimf) +{ + double pertrb; + int ierror; + + mhstcyl_(&r0, &r1, &nr, &rbndcnd, bcr0, bcr1, + &z0, &z1, &nz, &zbndcnd, bcz0, bcz1, + &lambda, &s, f, &idimf, &pertrb, &ierror); + number+=1; + +/* fprintf(stderr, "# calls mhstcyl =%d\n",number); */ + if (pertrb != 0.0) { + fprintf (stderr, "%s: ERROR: Undefined solution to the Poisson equation.", + __func__); + fprintf (stderr, "\nTry to change your boundary conditions.\n"); + exit(-1); + } + + if (0 != ierror) { + if (ierror <= FISH_ERROR_MAX) { + fprintf (stderr, "%s: ERROR: %s\n", __func__, hstcyl_error_str[ierror]); + fprintf (stderr, "The call to fishpack was\n"); + fprintf (stderr, "mhstcyl_ (A = %f, B = %f, M = %d,\n", r0, r1, nr); + fprintf (stderr, " MBDCND = %d, ...\n", rbndcnd); + fprintf (stderr, " C = %f, D = %f, N = %d,\n", z0, z1, nz); + fprintf (stderr, " NBDCND = %d, ...\n", zbndcnd); + fprintf (stderr, " ELMBDA = %f, ...\n", lambda); + fprintf (stderr, " ES = %f, ...\n", s); + fprintf (stderr, " IDIMF = %d, ...)\n", idimf); + } else { + fprintf (stderr, "%s: Unknown error #%d\n", __func__, ierror); + } + + exit(-1); + } +} +