---
name: "mass"
section: "3rheolef"
platform: "linux"
package: "librheolef-dev"
version: "6.1-2.1"
release: "Debian 7 (Wheezy)"
platforms: ["linux"]
url: "https://new.carta.tech/mass"
---

# mass(3rheolef)

## 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(2).

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

```

## SEE ALSO

form(2)
