CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   Main CFD Forum (https://www.cfd-online.com/Forums/main/)
-   -   How to implement implicit TVD limiter? (https://www.cfd-online.com/Forums/main/74239-how-implement-implicit-tvd-limiter.html)

Kmlin March 27, 2010 05:05

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.

jed March 27, 2010 10:31

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,
  title={{Globalized Newton-Krylov-Schwarz algorithms and software for parallel implicit CFD}},
  author={Gropp, W. and Keyes, D. and Mcinnes, L.C. and Tidriri, MD},
  journal={International Journal of High Performance Computing Applications},
  volume={14},
  number={2},
  pages={102},
  year={2000}
}


Kmlin March 27, 2010 22:42

Quote:

Originally Posted by jed (Post 251964)
For a one dimensional scheme, it could be useful to assemble the matrix based on differentiating through the limiter

Thanks for your kindness reply.

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

jed March 28, 2010 08:52

Quote:

Originally Posted by Kmlin (Post 251997)
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?

This is just a chain rule, in the case of minmod, d\phi/dr = 1 if 0 < r < 1 else 0. Newton methods don't work great because the derivative is discontinuous, which is why you should probably use a C^1 limiter for implicit methods. Of course you have to differentiate again to get the derivative with respect to the jumps, and again to get a derivative with respect to the stencil (which is what you need to assemble a matrix). I recommend using automatic differentiation for this, it's not worth your time to work it out by hand for 20 different limiters. And I still recommend using a Jacobian-free method, in which case you don't have to do this differentiation at all, and you can precondition with a first-order scheme which is cheap to assemble.


All times are GMT -4. The time now is 03:29.