diff options
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 19 |
1 files changed, 9 insertions, 10 deletions
@@ -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++) { |