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 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;
int Nx, Ny, Nz;
int nxf, nyf, nzf;
G = malloc(1 * sizeof *G);
if (G != NULL)
{
G->dimensions = 3;
G->cartdims[0] = nx;
G->cartdims[1] = ny;
G->cartdims[2] = nz;
G = create_grid_empty();
Nx = nx+1;
Ny = ny+1;
Nz = nz+1;
if (G != NULL) {
/* Node fields ---------------------------------------- */
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;
G->number_of_faces = nxf+nyf+nzf;
G->number_of_nodes = Nx*Ny*Nz;
/* Face fields ---------------------------------------- */
nel = nfaces * (2 * (ndims - 1));
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));
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 * 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));
nel = 2 * nfaces;
G->face_cells = malloc(nel * sizeof *G->face_cells);
G->cell_faces = malloc(G->number_of_cells * 6 * 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 * 3 * sizeof *(G->cell_centroids));
G->cell_volumes = malloc(G->number_of_cells * 1 * sizeof *(G->cell_volumes));
nel = nfaces * ndims;
G->face_centroids = malloc(nel * sizeof *G->face_centroids);
G->global_cell = NULL;
G->cell_facetag = NULL;
nel = nfaces * ndims;
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) ||
(G->face_nodes == NULL) ||
@ -227,6 +234,45 @@ allocate_cart_grid_3d(int nx, int ny, int nz)
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
@ -506,15 +552,9 @@ allocate_cart_grid_2d(int nx, int ny)
int nxf, nyf;
int Nx , Ny ;
struct UnstructuredGrid *G;
int ncells, nfaces, nnodes;
G = malloc(1 * sizeof *G);
if (G != NULL)
{
G->dimensions = 2;
G->cartdims[0] = nx;
G->cartdims[1] = ny;
G->cartdims[2] = 1;
struct UnstructuredGrid *G;
Nx = nx + 1;
Ny = ny + 1;
@ -522,42 +562,22 @@ allocate_cart_grid_2d(int nx, int ny)
nxf = Nx * ny;
nyf = nx * Ny;
G->number_of_cells = nx*ny;
G->number_of_faces = nxf+nyf;
G->number_of_nodes = Nx*Ny;
ncells = nx * ny ;
nfaces = nxf + nyf;
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));
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 ) )
if (G != NULL)
{
destroy_grid(G);
G = NULL;
}
G->dimensions = 2 ;
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;