aboutsummaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2016-08-28 10:07:20 +0200
committerAnton Khirnov <anton@khirnov.net>2016-08-28 11:14:30 +0200
commit2926c4ea6f9e34b8962a08dff372252537473bda (patch)
treeb64afad877bf5dff429c704af4e484cf57ee2dae /eval.c
parent63b25eca76d8481a0fdad339464d1eb617826583 (diff)
basis: disentangle the API from the global solver API
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c19
1 files changed, 9 insertions, 10 deletions
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++) {