go to> form(3)
Homepage > Man Pages > Category > Macros and Conventions
Homepage > Man Pages > Name > M

# mass

## man page of mass

### mass: L2 scalar product

```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 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.

/
|
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 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");

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 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);

form(3)

MASS(7)
```