|
void prepare_edge_matrix_and_rhs( |
This function help solves the algebraic equations for time-dependent problems. A description can be found here: https://faculty.washington.edu/finlayso/ebook/pde/OC/OCFE.htm
We should keep this function specific to
- axisymmetric solutions with symmetry at the center-line
- fixed-length intervals
We should generalize this function to:
- arbitrary polynomial order; a little more effort now, but it will pay off
- general boundary conditions on the right side
We should adapt the function to capture general linear Robin boundary conditions:
$$
au + bu' = c
$$
// Either a or b must be nonzero, else the problem is undefined!
assert(a != 0.0 || b != 0.0);
if (b) {
if (a) {
// Robin
} else {
// Neumann
}
} else {
// Dirichlet
}
Open question remains how to deal with more general non-linear conditions of the form,
$$
a(t,x,u) + b(t,x)u' = c(t,x)
$$
or even non-local ones,
$$
\int_\Omega u(x) d\Omega = p(x,u(x))|_{\Gamma}
$$
I'm guessing in this case, the explicit ODE form is inappropriate anyways, and we need a solver that can deal with the more general DAE form $F(t,y,y') = 0$.