How to implement implicit TVD limiter?
Hi everyone,
As title, my question is how to implement the TVD scheme (Flux/Slope limiters) implicitly. For example, If we define F(n+1, j+1) as the function at n+1 time step and j+1 cell, we can represent the general one-parameter family of explicit and implicit schemes of the following form u(n+1, j) + lamda*theda*[ h(n+1,j+1/2) - h(n+1,j-1/2)] = u(n,j) - lamda(1-theda)[ h(n,j+1/2) - h(n,j-1/2) ] where "lamda" is a constant, "theda" is used to control the scheme is explicit or implicit, and "h" is the flux function containing limiter such as MINMOD. My question is how to implement the MINMOD in h(n+1, j+1/2) in the implicit scheme. Should I just use the information of previous time step and evaluate it explicitly? Thanks. |
Jacobian-free method
For a one dimensional scheme, it could be useful to assemble the matrix based on differentiating through the limiter, but in 2D and especially 3D, this will produce a Jacobian that's just too expensive to work with. Actually computing the stencil is somewhat messy to do by hand, so you may want to consider automatic or symbolic differentiation. I would recommend using a Jacobian-free method preconditioned by a first-order operator. Use of differentiable limiters is useful in this context. A good paper on this:
Code:
@article{gropp2000globalized, |
Quote:
If possible, would you please show a little bit more explicit on the formulation of MINMOD (or some other limiters)? I have totally no idea how to formulate a function with "max(0, min(1,r)" or (r+|r|) / (1+|r|) which is the flux limiter? I have found dozens of papers talking about limiters, but none of which shows how to do this formulation. Or where I can find some useful materials on this? Thanks Kmlin |
All times are GMT -4. The time now is 03:29. |