You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -45,13 +45,13 @@ patches yield a robust method.::
45
45
"ksp_type": "cg",
46
46
"pc_type": "mg",
47
47
"mg_levels": {
48
-
"ksp_type": "chebyshev",
49
-
"ksp_max_it": 1,
50
-
**relax
48
+
"ksp_type": "chebyshev",
49
+
"ksp_max_it": 1,
50
+
**relax
51
51
},
52
52
"mg_coarse": {
53
53
"ksp_type": "preonly",
54
-
"pc_type": "cholesky"
54
+
"pc_type": "cholesky"
55
55
}
56
56
}
57
57
@@ -65,27 +65,30 @@ patches yield a robust method.::
65
65
}
66
66
67
67
Hiptmair proposed a finer space decomposition for Nedelec elements using edge
68
-
patches and vertex patches on the gradient of a Lagrange space. The python type
69
-
preconditioner :class:`~.HiptmairPC` automatically sets up a two-level method
70
-
using the auxiliary Lagrange space in a multigrid hierarchy. ::
68
+
patches on the original Nedelec space and vertex patches on the gradient of a Lagrange space. The python type
69
+
preconditioner :class:`~.HiptmairPC` automatically sets up an additive two-level method
70
+
using the auxiliary Lagrange space in a multigrid hierarchy. Therefore, the overall multigrid relaxation composes the edge patches with the auxiliary space relaxation. For the latter, the residual on each level is restricted from the dual of H(curl) into the dual of H1 via the adjoint of the gradient, where a vertex patch relaxation is applied to obtain a correction that is prolonged from H1 into H(curl) via the gradient. ::
71
71
72
72
73
73
def hiptmair_params():
74
74
return {
75
-
"pc_type": "python",
76
-
"pc_python_type": "firedrake.HiptmairPC",
77
-
"hiptmair_mg_levels": asm_params(1),
78
-
"hiptmair_mg_coarse": asm_params(0),
75
+
"pc_type": "python",
76
+
"pc_python_type": "firedrake.HiptmairPC",
77
+
"hiptmair_mg_coarse": asm_params(0),
78
+
"hiptmair_mg_levels": asm_params(1),
79
+
"hiptmair_mg_levels_ksp_type": "richardson",
80
+
"hiptmair_mg_levels_ksp_max_it": 1,
81
+
"hiptmair_mg_coarse_ksp_type": "preonly",
79
82
}
80
83
81
84
82
85
Now, for each parameter choice, we report the iteration count for the Riesz map
83
-
over a range of meshes. We see that the auxiliary space approach gives lower
84
-
iteration counts than vertex patches, while being cheaper to invert.::
86
+
over a range of meshes. We see that vertex patches approach give lower
87
+
iteration counts than the Hiptmair approach, but they are more expensive.::
85
88
86
89
names = {
87
-
"Vertex Star": mg_params(asm_params(0)),
88
-
"Hiptmair": mg_params(hiptmair_params()),
90
+
"Vertex Star": mg_params(asm_params(0)),
91
+
"Hiptmair": mg_params(hiptmair_params()),
89
92
}
90
93
91
94
for name, parameters in names.items():
@@ -105,16 +108,16 @@ For vertex patches, we expect output like,
105
108
3 16
106
109
======== ============
107
110
108
-
and with Hiptmair (edge patches + vertex patches on gradients of H1)
111
+
and with Hiptmair (edge patches + vertex patches on gradients of Lagrange)
109
112
110
113
======== ============
111
114
Level Iterations
112
115
======== ============
113
-
1 10
114
-
2 12
115
-
3 13
116
+
1 18
117
+
2 20
118
+
3 21
116
119
======== ============
117
120
118
121
and additional mesh refinement will lead to these numbers leveling off.
119
122
120
-
A runnable python version of this demo can be found :demo:`here<hdiv_riesz_star.py>`.
123
+
A runnable python version of this demo can be found :demo:`here<hcurl_riesz_star.py>`.
0 commit comments