diff --git a/MPIparallel/paralleliteration.html b/MPIparallel/paralleliteration.html index 56327e3..004747a 100644 --- a/MPIparallel/paralleliteration.html +++ b/MPIparallel/paralleliteration.html @@ -57,7 +57,7 @@ - + @@ -504,7 +504,7 @@
Starting 4 engines with <class 'ipyparallel.cluster.launcher.MPIEngineSetLauncher'>
Very similar for other iteraton methods, such as Conjugate Gradients. The matrix operation goes from consistent to distributed without communication, the preconditioner does the cumulation. The inner products are between different vector types:
@@ -700,40 +700,40 @@The main idea is the following: Instead of calculating the \(H^{-1}\)-norm of \(r\), we compute a lifting \(\sigma^\Delta\) such that \(\operatorname{div} \sigma^\Delta = r\), and calculate the \(L_2\)-norm of \(\sigma^\Delta\). Since \(r\) is not a regular function, the equation must be posed in distributional form:
-$\(
+ The main idea is the following: Instead of calculating the \(H^{-1}\)-norm of \(r\), we compute a lifting \(\sigma^\Delta\) such that \(\operatorname{div} \sigma^\Delta = r\), and calculate the \(L_2\)-norm of \(\sigma^\Delta\). Since \(r\) is not a regular function, the equation must be posed in distributional form: Then, the residual can be estimated without envolving any generic constant:29.3. Equilibration in NGSolver2 = MoveTo(0.6,0.6).Rectangle(0.2,0.2).Face()
r2.faces.name='source'
-# r1 -= r2
-# shape = Glue( [r1,r2] )
-shape = r1
-mesh = Mesh(OCCGeometry(shape,dim=2).GenerateMesh(maxh=0.1))
+r1 -= r2
+shape = Glue( [r1,r2] )
+mesh = Mesh(OCCGeometry(shape,dim=2).GenerateMesh(maxh=0.1))
Draw (mesh);
construct \(\sigma\) such that \(\operatorname{div} \sigma = f + \Delta u_h\) from local contributions \(\sigma = \sum \sigma^V\):
Check equilibrium:
Thanks to orthogonality, the second and third term vanish !
-Thus, we get the error estimate
-$\(
+ Thus, we get the error estimate Using the triangle inequality for \(\sigma\), we get The flux error is as good as we can interpolate into the flux space. Since the finite element space for \(u_h\) is of lower order, the error \(u - u_h\) is in general of lower order. But, the filtered error \(\| u_h - P_h u_h \|\) has the better order. Since \(\nabla u = \lambda^{-1} \sigma\), we can reconstruct a better approximation \(\widetilde u\) by small, element-wise problems: This optimization problems can be written as a mixed variational problem: Find: \(\widetilde u \in P^{k+1,dc}\) and \(p_h \in P^0\): The scalar part of the solution: Now do the postprocessing. This requires to solve decoupled problems on every element, what is cheap. Since \(\nabla u = \lambda^{-1} \sigma\), we can reconstruct a better approximation \(\widetilde u\) by small, element-wise problems: This optimization problems can be written as a mixed variational problem: Find: \(\widetilde u \in P^{k+1,dc}\) and \(p_h \in P^0\): This requires to solve decoupled problems on every element, what is cheap. The \(BDM_k\) elements are defined as the degrees of freedom are \(\int_E \tau_n q_i \quad \quad \) with \(q_i\) basis for \(P^k(E)\) \(\int_T \opdiv \tau \, r_j \quad\) with \(r_j\) basis for \(P^{k-1}(T)/{\mathbb R}\) High order RT and BDM spaces are built by an hierarchical basis. The contain the lowest order \(RT_0\) basis functions. Then, basis functions on edges, faces (and cells) are added. See Dissertation Sabine Zaglmayr, page 81 for the triangle. With RT=True we get the Raviart-Thomas space, which is \([P^k]^d + P^k x\):49.1. Local post-processing#
-from ngsolve import *
@@ -605,7 +588,7 @@
49.1. Local post-processing
The flux
49.1. Local post-processing
-
49.1. Local post-processing#
+V2 = L2(mesh, order=order+1)
@@ -641,7 +642,7 @@
49.1. Local post-processing
-
48. Finite Elements in \(BDM_k\) elements are defined as
-$\(
+
48.1. Piola Transformation{"version_major": 2, "version_minor": 0, "model_id": "21c249a72b3a481cad6f8245fd85258b"}
48.1. Piola Transformation
dofs on edge 22: (22, 86, 87)
48.1. Piola Transformation
dofs on face 0: (126, 127, 128)