## 1. Mixed Poisson

### 1.1. Notations and units

 Notation Quantity $k$ conductivity $\Lambda$ resistivity

### 1.2. Equations

Mixed Poisson equations are

\begin{align} \boldsymbol{u} + k\nabla p &= \boldsymbol{f}\\ \nabla\cdot \boldsymbol{u} &= g \end{align}

completed by boundary conditions.

The conductivity $k$ can be non-linear. If it depends only on the primal variable $p$, it is already handle by the model, in other cases, one needs to provide the corresponding expression.

### 1.3. MixedPoisson Toolbox

The model is described in a json file which path is given by the option `mixedpoisson.model_json`. The construction of this file is detailed in the following sections.

#### 1.3.1. Models

The models are not considered for now.

Model section
``"Models": { "equations":"hdg" }``

#### 1.3.2. Materials

The definition of the conductivity $k$ depends on the material, it can be linear or non-linear. In the linear case, it is given in the material we work on by the keyword `cond` and in the non-linear case, by `condNL`.

Material section
``````"Materials":
{
"<marker>":
{
"name": "copper",
"cond": "1",
"condNL": "2*p:p"
}
}``````

The keywords `cond` and `condNL` can be changed respectively by the options `mixedpoisson.conductivity_json` and `mixedpoisson.conductivityNL_json`.

#### 1.3.3. Boundary Conditions

All boundary conditions are described in the same way

Listing : boundary conditions in json
``````"BoundaryConditions":
{
"<field>":
{
"<bc_type>":
{
"<marker>":
{
"<option1>":"<value1>",
"<option2>":"<value2>",
// ...
}
}
}
}``````

Different types of boundary condition are available.

##### Dirichlet condition
$p = g_D$
 Field Type Option Value `potential` `Dirichlet` `expr` $g_D$
##### Neumann condition
$-k\nabla p \cdot\boldsymbol{n} = g_N$
 Field Type Option Value `potential` `Neumann` `expr` $g_DN$ or $-k\nabla p$

The choice between $g_DN$ or $-k\nabla p$ is base on the dimension of the expression.

##### Robin condition
$-k\nabla p \cdot\boldsymbol{n} + g_R^1 p = g_R^2$
 Field Type Option Value `potential` `Robin` `expr1` $g_R^1$ `potential` `Robin` `expr2` $g_R^2$
##### Integral boundary condition
$\int_{\Gamma_I} \boldsymbol{u}\cdot\boldsymbol{n} = g_I$
 Field Type Option Value `flux` `Integral` `expr` $g_I$

#### 1.3.4. Source Terms

The source terms $f$ and $\boldsymbol{g}$ are treated as boundary condtions.

 Field Type Option Value `potential` `SourceTerm` `expr` $g$ `flux` `SourceTerm` `expr` $\boldsymbol{f}$

#### 1.3.5. Post Process

Two fields can be exported, the potential $p$ and the flux $\boldsymbol{u}$.

Post Process section
``````"PostProcess":
{
"Exports":
{
"fields":["potential","flux"]
}
}``````

### 1.4. Create applications

In order to solve linear problem, an application should contain at least

Minimal Linear case
``````    typedef FeelModels::MixedPoisson<FEELPP_DIM,FEELPP_ORDER> mp_type;
auto MP = mp_type::New("mixedpoisson");
MP->init();
MP->assembleAll();
MP->solve();
MP->exportResults();``````