I have personally used CFD-GEOM, Gridgen, and Gridpro for generating meshes. Most grid generation packages (CFD-GEOM, Gridgen, and many others) work based on the same principals of "bottom up" grid generation. In this system the user must first generate the geometry (either in the grid generation package, or in a CAD package). Then the user defines mesh primatives such as edges and faces of grid. Finally, the faces are used to generate either structured (hex) or unstructured (tet, prism, or hex) volume grids.

Generally speaking, there is not a great deal of difference between these grid generation packages. Personal preference plays a large role in which one you think is "best". I may think that one is better because the controls are more intuitively laid out. John may think that the layout of the one I like is confusing, and he may perfer another because it has a wider range of features.

GridPro is the only one that is significantly different, and when I worked at Electric Boat we worked fairly closely with the developers to make significant improvements. In 1995-ish when I first used this code it was almost impossible to get a good grid. By 1997, it just took a long time. To generate a grid in Gridpro, the user defines the basic shape of the grid, and reads in surfaces that the grid should conform to. The grid is actually generated by an iterative projection and smoothing technique. It can generate nicely smoothed, conformal grids, but the iterative nature of the process requires patience on the part of the user. I'd also like to qualify this by saying that it's been several years since I've last used Gridpro.

(1). In 3-D, to create a four-sided tet-cell, you need to define four points. You can put three points on the boundary and grow the cell by adding the last point in the flow field. (2). Once you have that, you can connect lines between points to form a cell. I think, you can teach any high school kid to do that easily. All you need is the location of the four points, (x1,y1,z1), (x2,y2,z2), (x3,y3,z3) and (x4,y4,z4). (3). You can also fix the distance between two points and build the cell one-by-one until you reach the other boundary. At that point, you can change the size.(4). For six-sided hexa cell, you can combine several tet-cells to form one hexa cell. Or you can define eight points to create a new one. The process is like the kids toy "lego". (5). Beyond that point (the toy exercise), you have additional requirements such as the accuracy of mesh at the boundary wall(a straight line of the cell can not represent the curved line of the boundary or walls) and the consistency with the solution (which is still an unknown),etc... (6). So, the mesh itself is an approximation to the real geometry and a starting point to a solution. Before you reach the mesh independent solution, there is a long way to go. Mesh generation? ask Lego kids.