|
new file 100644
|
|
|
/* 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);
|
|
|
}
|
|
|
}
|
|
|
|