The Cahouet-Chabart preconditioner for the Navier-Stokes equations
#include "neumann-laplace-assembly.h"
form_diag dm (Qh, "mass");
csr<Float>
c = neumann_laplace_assembly (
a.uu, mh.u);
}
vec<Float>
solve (
const vec<Float>& Mp)
const {
vec<Float> q1 =
fact_m.solve(Mp);
vec<Float> Mp_e (Mp.size()+1);
for (size_t i = 0; i < Mp.size(); i++) Mp_e.at(i) = Mp.at(i);
Mp_e.at(Mp.size()) = 0;
vec<Float> q2_e =
fact_c.solve(Mp_e);
vec<Float> q2 (Mp.size());
for (size_t i = 0; i < q2.size(); i++) q2.at(i) = q2_e.at(i);
vec<Float> q = q1 +
lambda*q2;
return q;
}
};