**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. / | m(u,v) = | u v dx | / Omega The V space may be either aP0,P1,P2,bubble,P1dandP1dfinite 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 forP0andP1approximations. Notes that when dealing with discontinuous finite element space, i.e.P0andP1d, the corresponding mass matrix is block diagonal, and theinv_massform 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. / | m(q,v) = | q v dx | / Omega for all q in M and v in V. 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 themassform: 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");

**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. / | m(u,v) = | u v dx | / Gamma for all u, v in W. Let V a space of functions defined on Omega and gamma the trace operator from V into W. For all u in W and v in V: / | mb(u,v) = | u gamma(v) dx | / Gamma For all u and v in V: / | ab(u,v) = | gamma(u) gamma(v) dx | / Gamma

**EXAMPLE**

The following piece of code build forms for the P1 approximation, assuming that the mesh contains a domain namedboundary: 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);

**SEE** **ALSO**

form(3)