On 6/8/21 3:33 AM, Corbin Foucart wrote:
I've written generic, implicit HDG/DG solvers that solve a second-order
diffusion type equation $\frac{du}{dt} - \nabla^2 u = f$ (where f is a generic
DG finite element field). As I'm expanding the code to a set of projection
methods, I'd like this $f$ to represent an explicitly computed advection term
on the right-hand side $\nabla\cdot (u^k \otimes u^k)$ at time $k+1$.
I'd like to assemble the weak form of the advection term, something like
$-(∇v, u^k\otimes u^k)_K +(v, F^*(u)\cdot n)_{\partial K}$ (where F^*(u) is
the convective numerical flux) on the right hand side for every element K and
store that as a DG field.
This is conceptually not the right approach. A finite element field is a
function of the form
u_h(x) = \sum_j U_j \psi_j(x)
where U_j is a vector of coefficients. But you don't have a field of this
form: You have a vector
F_j
= sum_K -(∇psi_j, u^k\otimes u^k)_K +(\psi_j, F^*(u)\cdot n)_{\partial K}
but this is a vector of (weighted) integrals of the previous solution, not a
vector of expansion coefficients.
In other words, your vector F_j is a vector alright, but it does *not*
corresponding to a finite element field, whether continuous or discontinuous.
To avoid breaking the abstraction of the implicit
solver classes, is it possible to compute this term outside the main solver
classes and pass it in as a DG Field represented as a Vector<double>?
What you plan to do is no different, really, than any of the other right hand
side vectors we assemble. For example, in step-4, we assemble a right hand
side vector ("system_rhs") in assemble_system(). The only difference is that
in your case, this right hand side vector depends on the previous solution,
but conceptually you're doing the same thing.
Of course, it may be the case that you're not doing any other assembly
operations in each time step, for example because you keep using the same
matrix every time. But you can always write a function of the form
assemble_rhs() that only assembles a rhs vector. As just one example, the new
step-77 program has a function compute_residual() that does essentially this.
Best
Wolfgang
--
------------------------------------------------------------------------
Wolfgang Bangerth email: [email protected]
www: http://www.math.colostate.edu/~bangerth/
--
The deal.II project is located at http://www.dealii.org/
For mailing list/forum options, see
https://groups.google.com/d/forum/dealii?hl=en
---
You received this message because you are subscribed to the Google Groups "deal.II User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/dealii/5e1dc97d-c4fb-7c63-cf04-c39a24cfd354%40colostate.edu.