mass(7)
NAME
mass -- L2 scalar product
SYNOPSIS
form(const space& V, const space& V, "mass"); form(const space& M, const space& V, "mass"); form (const space& V, const space& V, "mass", const domain& gamma); form_diag(const space& V, "mass");
DESCRIPTION
Assembly the matrix associated to the L2 scalar product of the finite
element space V. @tex $$ m(u,v) = int_ega u v dx $$ for all $u,v in
V$. @end tex
The V space may be either a `P0', `P1', `P2', `bubble', `P1d' and `P1d'
finite element spaces for building a form see form(3).
The use of quadrature formulae is sometime usefull for building diagonal matrix. These approximate matrix are eay to invert. This procedure is available for `P0' and `P1' approximations.
Notes that when dealing with discontinuous finite element space, i.e.
`P0' and `P1d', the corresponding mass matrix is block diagonal, and
the `inv_mass' form may be usefull.
When two different space M and V are supplied, assembly the matrix
associated to the projection operator from one finite element space M
to space V. @tex $$ m(q,v) = int_ega q v dx $$ for all $q in M$ and
$v in V$. @end tex
This form is usefull for instance to convert discontinuous gradient
components to a continuous approximation. The transpose operator may
also be usefull to performs the opposite operation.
The following $V$ and $M$ space approximation combinations are supported for the `mass' form: P0-P1, P0-P1d, P1d-P2, P1-P1d and P1-P2.
EXAMPLE
- The following piece of code build the mass matrix associated to the P1
approximation:
- geo g("square");
space V(g, "P1");
form m(V, V, "mass"); - The use of lumped mass form write also:
form_diag md(V, "mass");- The following piece of code build the projection form:
geo g("square");
space V(g, "P1");
space M(g, "P0");
form m(M, V, "mass");- L2 SCALAR PRODUCT ON THE BOUNDARY: Assembly the matrix associated to the L2 scalar product related to a boundary domain of a mesh and a specified polynomial approximation. These forms are usefull when defining non-homogeneous Neumann or Robin boundary conditions.
- Let W be a space of functions defined on Gamma, a subset of the boundary of the whole domain Omega. @tex $$ m(u,v) = int_Gamma u v ds,
- rall u, v in W $$ Let $V$ a space of functions defined on $ega$ and
- $mma$ the trace operator from $V$ into $W$. $$ mb(u,v) = int_Gamma u mma v ds, rall u in W, v in V $$ $$ ab(u,v) = int_Gamma mma u mma v ds, rall u, v in V $$ @end tex
EXAMPLE
- The following piece of code build forms for the P1 approximation, assuming that the mesh contains a domain named boundary:
- geo omega ("square");
domain gamma = omega.boundary();
space V (omega, "P1");
space W (omega, gamma, "P1");
form m (W, W, "mass");
form mb (W, V, "mass");
form ab (V, V, "mass", gamma);