From 2926c4ea6f9e34b8962a08dff372252537473bda Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sun, 28 Aug 2016 10:07:20 +0200 Subject: basis: disentangle the API from the global solver API --- eval.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) (limited to 'eval.c') diff --git a/eval.c b/eval.c index 98fd0a7..c8b4b95 100644 --- a/eval.c +++ b/eval.c @@ -36,8 +36,7 @@ int bd_eval_psi(const BDContext *bd, double *psi, unsigned int psi_stride) { BDPriv *s = bd->priv; - const double *sf = bd->basis_scale_factor; - double (*eval)(double coord, int idx, double sf); + enum BSEvalType type; double *basis_val_rho = NULL, *basis_val_z = NULL; @@ -62,26 +61,26 @@ int bd_eval_psi(const BDContext *bd, } switch (diff_order[0]) { - case 0: eval = s->basis[0]->eval; break; - case 1: eval = s->basis[0]->eval_diff1; break; - case 2: eval = s->basis[0]->eval_diff2; break; + case 0: type = BS_EVAL_TYPE_VALUE; break; + case 1: type = BS_EVAL_TYPE_DIFF1; break; + case 2: type = BS_EVAL_TYPE_DIFF2; break; } for (int i = 0; i < nb_coords_rho; i++) { double rrho = rho[i]; for (int j = 0; j < s->nb_coeffs[0]; j++) - basis_val_rho[i * s->nb_coeffs[0] + j] = eval(rrho, j, sf[0]); + basis_val_rho[i * s->nb_coeffs[0] + j] = bdi_basis_eval(s->basis[0], type, rrho, j); } switch (diff_order[1]) { - case 0: eval = s->basis[1]->eval; break; - case 1: eval = s->basis[1]->eval_diff1; break; - case 2: eval = s->basis[1]->eval_diff2; break; + case 0: type = BS_EVAL_TYPE_VALUE; break; + case 1: type = BS_EVAL_TYPE_DIFF1; break; + case 2: type = BS_EVAL_TYPE_DIFF2; break; } for (int i = 0; i < nb_coords_z; i++) { double zz = z[i]; for (int j = 0; j < s->nb_coeffs[1]; j++) - basis_val_z[i * s->nb_coeffs[1] + j] = eval(zz, j, sf[1]); + basis_val_z[i * s->nb_coeffs[1] + j] = bdi_basis_eval(s->basis[1], type, zz, j); } for (int i = 0; i < nb_coords_z; i++) { -- cgit v1.2.3