Source term bricks (and Neumann condition)

This brick adds a source term, i.e. a term which occurs only in the right hand side of the linear (tangent) system build by the model. If \(f\) denotes the value of the source term, the weak form of such a term is

\[\int_{\Omega} f v\ dx\]

where \(v\) is the test function. The value \(f\) can be constant or described on a finite element method.

It can also represent a Neumann condition if it is applied on a boundary of the domain.

The function to add a source term to a model is:

add_source_term_brick(md, mim,
                      varname, dataexpr, region = -1,
                      directdataname = std::string());

where md``is the model object, ``mim is the integration method, varname is the variable of the model for which the source term is added, dataexpr has to be a regular expression of GWFL, the generic weak form language (except for the complex version where it has to be a declared data of the model). It has to be scalar or vector valued depending on the fact that the variable is scalar or vector valued itself. region is a mesh region on which the term is added. If the region corresponds to a boundary, the source term will represent a Neumann condition. directdataname is an optional additional data which will directly be added to the right hand side without assembly.

The brick has a working complex version.

A slightly different brick, especially dedicated to deal with a Neumann condition, is added by the following function:

add_normal_source_term_brick(md, mim,
                             varname, dataexpr, region);

The difference compared to the basic source term brick is that the data should be a vector field (a matrix field if the variable varname is itself vector valued) and a scalar product with the outward unit normal is performed on it.