static void apply_projected_matrix(double *v, double shift, double *Q, int dimQ, double *result, double *rwork, primme_params *primme) { int ONE = 1; /* For passing it by reference in matrixMatvec */ (*primme->matrixMatvec)(v, result, &ONE, primme); Num_axpy_dprimme(primme->nLocal, -shift, v, 1, result, 1); if (dimQ > 0) apply_projector(Q, dimQ, result, rwork, primme); primme->stats.numMatvecs += 1; }
static void apply_projected_matrix(Complex_Z *v, double shift, Complex_Z *Q, int dimQ, Complex_Z *result, Complex_Z *rwork, primme_params *primme) { int ONE = 1; /* For passing it by reference in matrixMatvec */ Complex_Z ztmp; (*primme->matrixMatvec)(v, result, &ONE, primme); {ztmp.r = -shift; ztmp.i = 0.0L;} Num_axpy_zprimme(primme->nLocal, ztmp, v, 1, result, 1); if (dimQ > 0) apply_projector(Q, dimQ, result, rwork, primme); primme->stats.numMatvecs += 1; }