[Math] Numerical techniques for solving systems of first-order semi-linear hyperbolic PDEs in two variables

numerical methodspartial differential equationssystems of equations

I need to solve such systems of PDEs numerically and I'm wondering what the "standard" method (if there is one) is. The systems I'm interested in have the form:

$\frac{\partial F_i}{\partial t} + \lambda_i \frac{\partial F_i}{\partial x} = c(t,x,\mathbf{F})$

for $i = 1, \ldots, n$ and $\mathbf{F}(t,x) = (F_1(t,x),\ldots,F_n(t,x))$. The dependence of $c(t,x,\mathbf{F})$ on $\mathbf{F}$ (as well as on $t$ and $x$) may be non-linear. Initial conditions are given for $\mathbf{F}(0,x)$.

I'm fairly new to PDEs and what I've been doing is using some version of the method of characteristics, that is, I've been defining functions $G_i(a,b) := F_i(a,b+\lambda_i a)$, so that, holding $b$ fixed, I obtain coupled ordinary differential equations describing the evolution of the functions $G_i(\cdot,b)$. Fixing a grid in both dimensions, these can then be solved simultaneously in $a$, potentially interpolating between $b$ values on the grid where necessary. I think this approach is referred to as the "method of specified intervals". I'm not really sure if it's the best approach to be adopting… I don't know anything about its stability/convergence properties. Are there any good references for this?

Another approach I'm aware of is finite differencing, for example the Lax–Wendroff method. However, all of the books I have access to seem to suggest that it is not recommended in the non-linear case. Is this true? If so, what are my options? Again, does anyone have any appropriate references?

Many thanks!

Best Answer

If it is a regutanguar domain FDm may be the best choice, as you don't have to deal with unstructual mesh which involves jacobian to convert from global coordinate to local. For FDm, you can always use implicit method to iterate the nonlinear term. E.g. Assuming at the nonlinear term

f(n+1,1)[fisrst index means time step, second index means iteration]=f[n,last]+(f(n,last)+f(n-1,last))/2

Then you work out f(n+1,2), then put new f into nonlinear term and recalculate until the difference becomes smaller.

Related Question