4
const Float epsilon = 0.01;
6
int main(int argc, char**argv) {
8
space Vh (omega, "P1");
9
if (omega.dimension() <= 2) {
10
Vh.block ("left"); Vh.block ("right");
12
Vh.block ("back"); Vh.block ("front");
15
if (omega.dimension() <= 2)
16
uh["left"] = uh["right"] = 0;
18
uh["back"] = uh["front"] = 0;
21
space Qh (omega, "P0", "vector");
24
eta ["west"] = epsilon;
26
form grad (Vh, Qh, "grad");
27
form m (Vh, Vh, "mass");
28
form inv_m (Qh, Qh, "inv_mass");
29
form a = trans(grad)*(inv_m*d)*grad;
30
ssk<Float> fact = ldlt(a.uu);
31
uh.u = fact.solve (m.uu*fh.u + m.ub*fh.b - a.ub*uh.b);
32
cout << setprecision(numeric_limits<Float>::digits10)
33
<< catchmark("epsilon") << epsilon << endl
34
<< catchmark("u") << uh;