---
name: "integrate"
section: "3rheolef"
platform: "linux"
package: "librheolef-dev"
version: "7.2-4"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/integrate"
---

# integrate(3rheolef)

expression integration (rheolef-7.2)

## NAME

integrate - expression integration (rheolef-7.2)

## SYNOPSIS

```
    template <typename Expression>
    Value integrate (geo domain, Expression, integrate_option iopt);
```

## DESCRIPTION

This overloaded function is able to return either a scalar constant, a **field(2)** or a bilinear **form(2)**, depending upon its arguments.

- 1\.

  When the expression involves both `trial` and **test(2)** functions, the result is a bilinear **form(2)**

- 2\.

  When the expression involves either a `trial` or a **test(2)** function, the result is a linear form, represented by the **field(2)** class

- 3\.

  When the expression involves neither a `trial` nor a **test(2)** function, the result is a scalar constant

The general call involves three arguments:

- 1\.

  the **geo(2)** domain of integration

- 2\.

  the expression to integrate

- 3\.

  the **integrate\_option(3)**

Here is the overloaded synopsis:

```
    Float integrate (geo domain, Expression, integrate_option iopt);
    field integrate (geo domain, Expression, integrate_option iopt);
    form  integrate (geo domain, Expression, integrate_option iopt);
```

## OMITTED ARGUMENTS

Some argument could be omitted when the expression involves a **test(2)** function:

- •

  when the domain of integration is omitted, then it is taken as those of the **test(2)** function

The reduced synopsis is:

```
    field integrate (Expression, integrate_option iopt);
    form  integrate (Expression, integrate_option iopt);
```

- •

  when the **integrate\_option(3)** is omitted, then a Gauss quadrature formula is considered such that it integrates exactly `2*k+1` polynomials where `k` is the polynomial degree of the **test(2)** function. When a `trial` function is also involved, then this degree is `k1+k2+1` where `k1` and `k2` are the polynomial degree of the **test(2)** and `trial` functions.

The reduced synopsis is:

```
    field integrate (geo domain, Expression);
    form  integrate (geo domain, Expression);
```

 Both arguments could be omitted an the synopsis becomes:

```
    field integrate (Expression);
    form  integrate (Expression);
```

## INTEGRATION OVER A SUBDOMAIN

Let `omega` be a finite element mesh of a geometric domain, as described by the **geo(2)** class. A subdomain is defined by indexation, e.g. `omega['left']` and, when a **test(2)** function is involved, the `omega` could be omitted, and only the string `'left'` has to be present e.g.

```
    test v (Xh);
    field lh = integrate ('left', 2*v);
```

 is equivalent to

```
    field lh = integrate (omega['left'], 2*v);
```

## MEASURE OF A DOMAIN

Finally, when only the domain argument is provided, the `integrate` function returns its measure:

```
    Float integrate (geo domain);
```

## EXAMPLES

The computation of the measure of a domain:

```
    Float meas_omega = integrate (omega);
    Float meas_left  = integrate (omega['left']);
```

 The integral of a function:

```
    Float f (const point& x) { return exp(x[0]+x[1]); }
    ...
    integrate_option iopt;
    iopt.set_order (3);
    Float int_f = integrate (omega, f, iopt);
```

 The function can be replaced by any expression combining functions, class-functions and **field(2)**.

The right-hand-side involved by the variational formulation

```
    space Xh (omega, 'P1');
    test v (Xh);
    field lh = integrate (f*v);
```

 For a bilinear form:

```
    trial u (Xh);
    form m = integrate (u*v);
    form a = integrate (dot(grad(u),grad(v)));
```

 The expression can also combine functions, class-functions and **field(2)**.

## IMPLEMENTATION

This documentation has been generated from file main/lib/integrate.h

## AUTHOR

Pierre  Saramito  \<Pierre.Saramito@imag.fr\>

## COPYRIGHT

Copyright   (C)  2000-2018  Pierre  Saramito  \<Pierre.Saramito@imag.fr\> GPLv3+: GNU GPL version 3 or later  \<http://gnu.org/licenses/gpl.html\>. This  is  free  software:  you  are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.
