CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   Main CFD Forum (https://www.cfd-online.com/Forums/main/)
-   -   3D Hyperbolic Grid Generation - Help Requested... (https://www.cfd-online.com/Forums/main/6741-3d-hyperbolic-grid-generation-help-requested.html)

 Marcus Lobbia October 23, 2003 23:24

3D Hyperbolic Grid Generation - Help Requested...

I'm currently developing an automated grid generation program for complex 3D configurations using overset grids (it will be generating grids for my 3D Euler/NS compressible flow solver). Anyway, I'm having some difficulties getting the 3D field grids generated using hyperbolic methods. [For reference, I'm attempting to code the algorithm from "Handbook of Grid Generation" pp. 5.3-5.10, and "Enhancements of a Three-Dimensional Hyperbolic Grid Generation Scheme" by Chan & Steger, App. Math. and Comp. Vol. 51 pp. 181-205].

I'm using a block tridiagonal solver to integrate the linearized system of equations. However, I'm having problems with stability (especially on highly-clustered surface grids). Any suggestions or comments from anyone with experience in developing these types of programs is appreciated.

Also, if anyone can point me in the direction of some source code for setting up the block-tridiagonal system (or for the algorithm in general), I'd appreciate it - it might help me figure out some of the problems in my own code.

 John Chawner November 8, 2003 13:12

Re: 3D Hyperbolic Grid Generation - Help Requested

Hello, Marcus. We've worked in this area also. The good news is that the work of Chan & Steger is the best you can find on this topic. Chan's OVERGRID and HYPGEN programs are very, very good. Our Gridgen software may be the only implementation of the hyperbolic method in a commercial mesher and I was fortunate (?) enough to write the initial implementation many years ago.

As you've found out, stability is the biggest problem with respect to the hyperbolic method. Balancing the implicit and explicit smoothing is key. But also, if you have concave regions you'll probably also need to implement the smoothing technique of Kinsey & Barth in addition to the method's built-in implicit and explicit smoothing. I can look up the K&B reference if you'd like.

Another technique that comes in handy is something called volume smoothing. I don't recall who originally introduced this idea (it may have been Steger), but it slightly averages the volumes on each marching step so that you can dissipate clustering along the marching front as you march outward. This tends to improve stability by ensuring that your cells don't develop very high aspect ratios in the marching direction.

Finally, a good source of a block tridiagonal algorithm (as long as you don't mind typing) is the classic CFD textbook by Anderson, Tannehill, and Pletcher - there's one in the appendix.

I hope this helps.

 Marcus Lobbia November 9, 2003 05:53

Re: 3D Hyperbolic Grid Generation - Help Requested

John, thanks for the reply. Your comments are appreciated, and they helped me to focus on investigating the dissipation factors in regards to debugging my code. Anyway, it is working great now - generating nice 3D grids around wing/body configurations (which include a concave corner of about 45 deg. and a very sharp convex corner at the leading edge). As for my request on setting up the tridiagonal system, I was referring to the tridiagonal block elements of the hyperbolic system - I already have a block tridiagonal solver I wrote a while back for an Euler/NS solver which used the Beam-Warming ADI method. Thanks for the suggestion, though. ;-)

The references on hyperbolic field grid generation for those interested ([1] is required reading; [2] is more of a summary of [1]):

[1] Chan, W. M. and Steger, J. L., "Enhancements of a Three-Dimensional Hyperbolic Grid Generation Scheme," Applied Mathematics and Computation, Vol. 51, pp. 181-205, 1992.

[2] Chan, W. M., "Handbook of Grid Generation," pp. 5.3-5.10.

Anyway, some comments on my experience with this method:

1) Maybe I read it wrong, but the major bug in my program was that the user-specified dissipation coefficient ("epsilon_c" in the references I listed) needs to be negative on the explicit side and positive in the implicit factors. If this is not implemented, the dissipation has an opposite effect - causing the grid lines to converge at concave corners.

2) As John mentioned, the dissipation factors are very important. Playing around with a variety of settings, I found that setting "epsilon_c" between 0.5 and 0.8 works well for even complex topologies. For grids with a large marching distance (relative to the transverse grid spacing), the higher "epsilon_c" value can help stabilize the solution.

3) Using subiterations is _extremely_ useful in stablizing the algorithm (this was actually suggested to my by William Chan - yes, I emailed him for some help earlier). For example, when creating a grid with 30 points in the marching direction, it is beneficial to divide each step into a number of subiterations, and solve the hyperbolic system for each subiteration. For difficult grids with sharp concave/convex corners, or for grids with highly-clustered and/or skewed surface topologies, this can be a requirement to obtain a solution. In practice, I've seen that about 10-20 subiterations per step can be helpful.

4) The Kinsey-Barth dissipation coefficients ("theta_xi" and "theta_eta") are useful to smooth the grid, but not necessarily required. For my complex grid, setting both coefficients to 3.0 worked well.

5) The specified marching distance is an important consideration - initially, I had problems when I used a constant marching distance for all grid points, even though my surface topology had some very sharp convex corners (i.e., wing leading edges). This made it difficult to get a stable solution - reducing the marching distance near these corners, however, allowed relatively-smooth solutions to be generated. Anyway, keep this in mind if you have problems getting your grid generator to work on some configurations.

 All times are GMT -4. The time now is 17:38.