Refactor actual allocation out to new helper, allocate_cart_grid().

Re-implement allocate_cart_grid_?d() in terms of allocate_cart_grid().
This commit is contained in:
Bård Skaflestad 2012-04-25 18:58:58 +02:00
parent 8782a6202c
commit da29d12f2b

View File

@ -163,49 +163,56 @@ create_grid_tensor3d(int nx, int ny , int nz ,
/* Static functions follow: */ /* Static functions follow: */
/* --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- */
static struct UnstructuredGrid * static struct UnstructuredGrid *
allocate_cart_grid_3d(int nx, int ny, int nz) allocate_cart_grid(size_t ndims ,
size_t ncells,
size_t nfaces,
size_t nnodes)
{ {
size_t nel;
struct UnstructuredGrid *G; struct UnstructuredGrid *G;
int Nx, Ny, Nz;
int nxf, nyf, nzf;
G = malloc(1 * sizeof *G);
if (G != NULL)
{
G->dimensions = 3; G = create_grid_empty();
G->cartdims[0] = nx;
G->cartdims[1] = ny;
G->cartdims[2] = nz;
Nx = nx+1; if (G != NULL) {
Ny = ny+1; /* Node fields ---------------------------------------- */
Nz = nz+1; nel = nnodes * ndims;
G->node_coordinates = malloc(nel * sizeof *G->node_coordinates);
nxf = Nx*ny*nz;
nyf = nx*Ny*nz;
nzf = nx*ny*Nz;
G->number_of_cells = nx*ny*nz; /* Face fields ---------------------------------------- */
G->number_of_faces = nxf+nyf+nzf; nel = nfaces * (2 * (ndims - 1));
G->number_of_nodes = Nx*Ny*Nz; G->face_nodes = malloc(nel * sizeof *G->face_nodes);
G->node_coordinates = malloc(G->number_of_nodes * 3 * sizeof *(G->node_coordinates)); nel = nfaces + 1;
G->face_nodepos = malloc(nel * sizeof *G->face_nodepos);
G->face_nodes = malloc(G->number_of_faces * 4 * sizeof *(G->face_nodes)); nel = 2 * nfaces;
G->face_nodepos = malloc((G->number_of_faces+1) * sizeof *(G->face_nodepos)); G->face_cells = malloc(nel * sizeof *G->face_cells);
G->face_cells = malloc(G->number_of_faces * 2 * sizeof *(G->face_cells));
G->face_centroids = malloc(G->number_of_faces * 3 * sizeof *(G->face_centroids));
G->face_normals = malloc(G->number_of_faces * 3 * sizeof *(G->face_normals));
G->face_areas = malloc(G->number_of_faces * 1 * sizeof *(G->face_areas));
G->cell_faces = malloc(G->number_of_cells * 6 * sizeof *(G->cell_faces)); nel = nfaces * ndims;
G->cell_facepos = malloc((G->number_of_cells+1) * sizeof *(G->cell_facepos)); G->face_centroids = malloc(nel * sizeof *G->face_centroids);
G->cell_centroids = malloc(G->number_of_cells * 3 * sizeof *(G->cell_centroids));
G->cell_volumes = malloc(G->number_of_cells * 1 * sizeof *(G->cell_volumes));
G->global_cell = NULL; nel = nfaces * ndims;
G->cell_facetag = NULL; G->face_normals = malloc(nel * sizeof *G->face_normals);
nel = nfaces * 1;
G->face_areas = malloc(nel * sizeof *G->face_areas);
/* Cell fields ---------------------------------------- */
nel = ncells * (2 * ndims);
G->cell_faces = malloc(nel * sizeof *G->cell_faces);
nel = ncells + 1;
G->cell_facepos = malloc(nel * sizeof *G->cell_facepos);
nel = ncells * ndims;
G->cell_centroids = malloc(nel * sizeof *G->cell_centroids);
nel = ncells * 1;
G->cell_volumes = malloc(nel * sizeof *G->cell_volumes);
if ((G->node_coordinates == NULL) || if ((G->node_coordinates == NULL) ||
(G->face_nodes == NULL) || (G->face_nodes == NULL) ||
@ -227,6 +234,45 @@ allocate_cart_grid_3d(int nx, int ny, int nz)
return G; return G;
} }
static struct UnstructuredGrid*
allocate_cart_grid_3d(int nx, int ny, int nz)
{
struct UnstructuredGrid *G;
int Nx, Ny, Nz;
int nxf, nyf, nzf;
int ncells, nfaces, nnodes;
Nx = nx + 1;
Ny = ny + 1;
Nz = nz +1;
nxf = Nx * ny * nz;
nyf = nx * Ny * nz;
nzf = nx * ny * Nz;
ncells = nx * ny * nz ;
nfaces = nxf + nyf + nzf;
nnodes = Nx * Ny * Nz ;
G = allocate_cart_grid(3, ncells, nfaces, nnodes);
if (G != NULL)
{
G->dimensions = 3 ;
G->cartdims[0] = nx;
G->cartdims[1] = ny;
G->cartdims[2] = nz;
G->number_of_cells = ncells;
G->number_of_faces = nfaces;
G->number_of_nodes = nnodes;
}
return G;
}
/* --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- */
static void static void
@ -506,15 +552,9 @@ allocate_cart_grid_2d(int nx, int ny)
int nxf, nyf; int nxf, nyf;
int Nx , Ny ; int Nx , Ny ;
struct UnstructuredGrid *G; int ncells, nfaces, nnodes;
G = malloc(1 * sizeof *G); struct UnstructuredGrid *G;
if (G != NULL)
{
G->dimensions = 2;
G->cartdims[0] = nx;
G->cartdims[1] = ny;
G->cartdims[2] = 1;
Nx = nx + 1; Nx = nx + 1;
Ny = ny + 1; Ny = ny + 1;
@ -522,42 +562,22 @@ allocate_cart_grid_2d(int nx, int ny)
nxf = Nx * ny; nxf = Nx * ny;
nyf = nx * Ny; nyf = nx * Ny;
G->number_of_cells = nx*ny; ncells = nx * ny ;
G->number_of_faces = nxf+nyf; nfaces = nxf + nyf;
G->number_of_nodes = Nx*Ny; nnodes = Nx * Ny ;
G->node_coordinates = malloc(G->number_of_nodes * 2 * sizeof *(G->node_coordinates)); G = allocate_cart_grid(2, ncells, nfaces, nnodes);
G->face_nodes = malloc(G->number_of_faces * 2 * sizeof *(G->face_nodes)); if (G != NULL)
G->face_nodepos = malloc((G->number_of_faces+1) * sizeof *(G->face_nodepos));
G->face_cells = malloc(G->number_of_faces * 2 * sizeof *(G->face_cells));
G->face_centroids = malloc(G->number_of_faces * 2 * sizeof *(G->face_centroids));
G->face_normals = malloc(G->number_of_faces * 2 * sizeof *(G->face_normals));
G->face_areas = malloc(G->number_of_faces * 1 * sizeof *(G->face_areas));
G->cell_faces = malloc(G->number_of_cells * 4 * sizeof *(G->cell_faces));
G->cell_facepos = malloc((G->number_of_cells+1) * sizeof *(G->cell_facepos));
G->cell_centroids = malloc(G->number_of_cells * 2 * sizeof *(G->cell_centroids));
G->cell_volumes = malloc(G->number_of_cells * 1 * sizeof *(G->cell_volumes));
G->global_cell = NULL;
G->cell_facetag = NULL;
if ((G->node_coordinates == NULL ) ||
(G->face_nodes == NULL ) ||
(G->face_nodepos == NULL ) ||
(G->face_cells == NULL ) ||
(G->face_centroids == NULL ) ||
(G->face_normals == NULL ) ||
(G->face_areas == NULL ) ||
(G->cell_faces == NULL ) ||
(G->cell_facepos == NULL ) ||
(G->cell_centroids == NULL ) ||
(G->cell_volumes == NULL ) )
{ {
destroy_grid(G); G->dimensions = 2 ;
G = NULL; G->cartdims[0] = nx;
} G->cartdims[1] = ny;
G->cartdims[2] = 1 ;
G->number_of_cells = ncells;
G->number_of_faces = nfaces;
G->number_of_nodes = nnodes;
} }
return G; return G;