<a href="http://dx.doi.org/10.1016/j.jcp.2009.01.030">[DOI]</a>
</b>
-We consider the convection-diffusion equation:
+We consider the convection-diffusion equation over the domain $\Omega$
+with Dirichlet boundary $\partial \Omega_D$ and Neumann boundary
+$\partial \Omega_N$:
@f{eqnarray*}
\nabla \cdot (\mathbf{c} u) - \nabla \cdot (\kappa \nabla u) &=& f,
\quad \text{ in } \Omega, \\
and is the one for which we finally set up a globally coupled linear
system. As mentioned above, it is defined on the element faces and
discontinuous from one face to another.
+Values for $u$ and $\mathbf{q}$ appearing in the numerical trace function
+are taken to be the cell's interior solution restricted
+to the boundary $\partial K$.
The local stabilization parameter $\tau$ has effects on stability and accuracy
of HDG solutions; see the literature for a further discussion. A stabilization
We first have a look at the output generated by the program when run in 2D. In
the four images below, we show the solution for polynomial degree <i>p</i>=1
and cycles 2, 3, 4, and 8 of the program. In the plots, we overlay the data
-generated from the internal data (DG part) with the skeleton part (lambda)
+generated from the internal data (DG part) with the skeleton part ($\hat{u}$)
into the same plot. We had to generate two different data sets because cells
and faces represent different geometric entities, the combination of which in
the same file are not supported in the VTK output of deal.II.
// The 'local' solutions are interior to each element. These
// represent the primal solution field $u$ as well as the auxiliary
- // field $\mathbf{q} = -\nabla u$.
+ // field $\mathbf{q}$.
FESystem<dim> fe_local;
DoFHandler<dim> dof_handler_local;
Vector<double> solution_local;
}
// When @p trace_reconstruct=false, we are preparing assembling the
- // system for the skeleton variable $\lambda$. If this is the case,
+ // system for the skeleton variable $\hat{u}$. If this is the case,
// we must assemble all local matrices associated with the problem:
// local-local, local-face, face-local, and face-face. The
// face-face matrix is stored as @p TaskData::cell_matrix, so that
const unsigned int jj=scratch.fe_local_support_on_face[face][j];
scratch.ll_matrix(ii,jj) += tau_stab * scratch.u_phi[i] * scratch.u_phi[j] * JxW;
}
-
+
// When @p trace_reconstruct=true, we are solving for the local
// solutions on an element by element basis. The local
// right-hand-side is calculated by replacing the basis functions @p
// the skeleton of the triangulation. We treat it as such here, and the code is
// similar to that above.
DataOutFaces<dim> data_out_face(false);
- std::vector<std::string> face_name(1,"lambda");
+ std::vector<std::string> face_name(1,"u_hat");
std::vector<DataComponentInterpretation::DataComponentInterpretation>
face_component_type(1, DataComponentInterpretation::component_is_scalar);