3.4. Mesh Generation
Last updated
Was this helpful?
Last updated
Was this helpful?
In GASFLOW-MPI two coordinate systems are available:
Cartesian or rectangular system: the coordinate axes are x, y, and z, and their corresponding logical indices are i, j, and k.
Cylindrical system: the logical coordinate indices i,j, and k correspond, respectively, to the radial (r), azimuthal (θ), and axial direction (z).
The finite-difference mesh used for discretizing the geometry consists of computational cells that are logically ordered in three dimensions with indices i,j, and k. The maximum number of cells in each direction is designated imax, jmax, of kmax.
A layer of fictitious cells is used just beyond each boundary of the computational domain to accommodate general boundary condition treatment. The total number of real cells in the entire mesh is the product (imax-2)*(jmax-2)*(kmax-2).
The GASFLOW-MPI convention is that the i-th grid line refers to the cell face between a cell with index i and the next cell with index i+1.
Example. In the figure below is shown the computational cell scheme in i-direction with imax=7.
The fictitious boundary cells are shaded, i.e., cell numbers 1 and 7. The real fluid cells are numbered from 2 to 6. The physical computation volume ranges from cell face number 1 and cell face number 6.
Before generating mesh, the user must specify which coordinate system is to be used for the computation. The input variable for this is cyl (=0 for Cartesian coordinate system and =1 for Cylindrical coordinate system) in the NAMELIST group xput. The computational mesh is defined by one of two methods avaible (Direct or Automatic). Input variables for both methods are in the NAMELIST group meshgn.
Note that user only defines geometry for the real physics domain and fictitious boundary cells are assigned automatically by the code.
This method consists in the direct entering of the coordinate values of each grid point in each direction.
The input array variables xgrid, ygrid, and zgrid are used to specify grid point locations in the x-, y-, and z-directions in Cartesian coordinates.
Example.
xgrid = 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.,10.,
This specifies that the mesh in the x-direction goes from 0 to 10 cm and has nine cells. The first eight cells have a cell-width of 1 cm and the last one is 2 cm wide.
Note that in the figure above cells are 11, this because the first and the last cell are the fictitious boundary cells.
If cylindrical coordinates are used, then xgrid refers to grid point locations in the radial (r) direction, and ygrid (θ) and zgrid (z) refer respectively to the azimuthal and axial directions. The measure of θ should be in degrees.
Example.
ygrid = 0., 15., 30., 45., 60., 75., 90.,
This specifies a mesh that is a quadrant of a cylinder and has six layers of cells in the azimuthal direction, all evenly spaced 15° apart.
This method uses an automatic mesh generator which allows easy generation of a mesh composed of cells with either fixed or variable sizes. The basic idea is to build a mesh by stacking together a series of submeshes in each coordinate direction.
Definition:
nkx defines the total umber of subintervals in the x-direction.
xl(k) sets the location of the left boundary of subdivision k.
xc(k) sets the "convergence point" where the minimum cell spacing occurs in the subdivision k.
nxl(k) specifies the number of cells to the left of xc(k).
nxr(k) specifies the number of cells to the right of xc(k).
dxmn(k) specifies the minimum cell size in the x-direction in subdivision k.
The maximum number of mesh subdivisions allowed is 50.
Example.
Cartesian Mesh. The first example involves Cartesian geometry (cyl = 0.0). Here we show how to generate a uniform mesh in the z-direction extending from 0 to 12 cm containing 10 cells. In the x-direction, the mesh also extends from 0 to 12 cm and consists of 10 cells, but has a minimum cell size of 0.2 cm on both sides of the line x = 5 cm. The following input specifications in NAMELIST group meshgn will generate such a mesh for 3D block number 1, as shown in the figure below.
iblock = 1,
nkx = 1, nkz = 1,
xl(1) = 0, xc(1) = 5, nxl(1) = 5, nxr(1) = 5, dxmn(1) = 0.2, xl(2) = 12.,
zl(1) = 0, zc(1) = 0, nzl(1) = 0, nzr(1) = 10, dzmn(1) = 1.e9, zl(2) = 12.,
Example.
Cylindrical Mesh. The example shows the mesh in two dimensions generated by the following input in NAMELIST group meshgn.
iblock = 1,
nkx = 1, nky = 1,
xl(1) = 0, xc(1) = 15, nxl(1) = 10, nxr(1) = 0, dxmn(1) = 0.5, xl(2) = 15.,
yl(1) = 0, yc(1) = 0, nyl(1) = 0, nyr(1) = 24, dymn(1) = 1.e9, yl(2) = 360.,
The user can refine the mesh without changing anything else in the input file, such as the geometry, boundary conditions, points for outputs and so on. All these will be handled automatically inside the code.
Usefulness: Sensitivity analysis.
The input parameters in $xput for automatic mesh refinement are as follow:
xmrefactor Mesh refinement factor in x-direction, default = 1. Must be an integer.
ymrefactor Mesh refinement factor in y-direction, default = 1. Must be an integer.
zmrefactor Mesh refinement factor in z-direction, default = 1 Must be an integer.
The user can start a new calculation from 0 sec with the original mesh (refinement factors = 1), and then restart a calculation with a refined mesh.
Example. The mesh is refined 2 times in the x-direction, 3 times in the y-direction and 4 times in the z-directions.
xmrefactor = 2,
ymrefactor = 3,
zmrefactor = 4.
Be careful! After a calculation with a refined mesh it is not allowed to restart a calculation with a coarser mesh.
Note! Computational effort may increase dramatically when using automatic mesh refinement. Therefore, refine the mesh only when it is necessary.