Department of Scientific Computing   
Institute for Numerical Simulation   
University of Bonn   
Documentation
Download
Programming References
Bug Reports / Suggestions
FAQ
Authors
next up previous
Next: Runtime Consistency Checks Up: Boundary Conditions Previous: Dirichlet boundary conditions


Neumann boundary conditions

Again, we consider the two-dimensional case, only. The extension to higher dimensions follows the same lines, but is, however, not really straightforward.

Assume the Neumann values on the face $\Gamma=\{(1,y)\}$ are given by means of $v(y)$. Similar to the Dirichlet case we can define a simple function $\bar{u}(x,y)$ which takes the Neumann values $v(y)$ on $\Gamma$ via the wavelet coefficients $v_{l,t}$ of $v$. Then,

\begin{displaymath}
\bar{u}(x,y):=\sum_{(l,t)\in {\cal{T}}_0} v_{l,t} \frac{1}{\...
...x \psi_{L_0,2^{L_0}}(1)} \psi_{L_0,2^{L_0}}(x) \psi_{l,t}(y) .
\end{displaymath}

Clearly,

\begin{displaymath}
\partial_x \bar{u}(1,y) = \sum_{(l,t)\in {\cal{T}}_0} v_{l,t...
...i_{l,t}(y)
= \sum_{(l,t)\in {\cal{T}}_0} v_{l,t} \psi_{l,t}(y)
\end{displaymath}

For a level 5 regular sparse or full grid, Neumann values as shown below(left), the resulting function $\bar{u}$ looks like

1354         1355

The above situation represents a very simple case, as there are no other faces with Neumann BC. To explain the difficulties involved then, we consider the case of Neumann BC $v_1(y)$ at the face $\Gamma_1:=\{(1,y)\}$ and $v_2(x)$ at $\Gamma_2:=\{(x,1)\}$, respectively. The Neumann values are shown below:

1356         1357

A simple idea to obtain $\bar{u}$ would be to generate two functions $\bar{u}_1$ and $\bar{u}_2$ in the same fashion as in (5.3) which take the Neumann BC on just $\Gamma_1$ and $\Gamma_2$, respectively, and to add these two functions. In general $\bar{u}_1 + \bar{u}_2$ does not take the desired boundary values, e.g.

\begin{displaymath}
\partial_x (\bar{u}_1 + \bar{u}_2)(1,1)=\partial_x \bar{u}_1...
...u}_2(1,1) = v_1(1) + \underbrace{\partial_x v_2(1)}_{=0 ???} .
\end{displaymath}

If $\partial_x v_2(1) =0$, then our approach would work. Analogously, we obtain from $\partial_y(\bar{u}_1 + \bar{u}_2)(1,1)=v_2(1)$ the condition $\partial_y v_1(1)=0$. Of course, we cannot expect that the Neumann values meet these constraints, in general. Nevertheless, it is possible to remedy this problem in the following way:

The idea ist to find a function $w(x,y)$ which is non zero in a neighbourhood of the critical point $(1,1)$ only. In the vicinity of $(1,1)$, this function behaves like

\begin{displaymath}
w(x,y)=v_1(1)x + v_2(1)y + \frac{1}{2}(\partial_x v_2(1) + \partial_y v_1(1))(x-1)(y-1)
\end{displaymath}

One easily verifies that

\begin{displaymath}
\partial_x w(1,1)=v_1(1) \quad\quad\quad\mbox{ and }\quad\quad\quad \partial_y w(1,1)=v_2(1) .
\end{displaymath}

Now, the clou is that under the additional constraint that
\begin{displaymath}
\partial_x v_2(1) = \partial_y v_1(1)
\end{displaymath} (5.3)

the modified Neumann-values $v^1_1(y):=v_1(y)-\partial_x w(1,y)$ and $v^1_2(x):=v_2(x)-\partial_y w(x,1)$ fulfill the conditions for the above simple scheme, i.e. $\partial_y v^1_1(1) = 0$ and $\partial_x v^1_2(1) = 0$. Then, if the functions $\bar{u}_1$ and $\bar{u}_2$ are defined using the modified Neumann values, $\bar{u}:=w+\bar{u}_1+\bar{u}_2$ exactly takes the Neumann values.

Remark: (5.3) is simply the necessary condition on the Neumann values to allow for the existence of a function $\bar{u}$ which is two times differentiable in (1,1).

In the high dimensional case we proceed in a similar fashion. First, some auxiliary functions are computed which are defined in the vicinity of e.g. corners only where several Neumann faces touch. E.g. in the three dimensional case and a Neumann-Neumann-Neumann-corner these functions look like

\begin{displaymath}
v_1(1,1)x + v_2(1,1)y + v_3(1,1)z  +  
\frac{1}{2}({\partia...
..._1 + \partial_{xz}v_2 + \partial_{xy} v_3)(1,1)(x-1)(y-1)(z-1)
\end{displaymath}

As you see, the whole thing gets more and more involved the higher the dimension is. For this reason the current implementation of AdaptiveData<D>::SetBoundaryValueFunction handles two- and three-dimensional cases, only.


next up previous
Next: Runtime Consistency Checks Up: Boundary Conditions Previous: Dirichlet boundary conditions
koster 2003-07-29