NASA Logo
Ocean Color Science Software

ocssw V2022
allocate5d.c
Go to the documentation of this file.
1 
7 #include "allocate5d.h"
8 
9 #include <stdio.h>
10 #include <stdlib.h>
11 
12 float *****allocate5d_float(size_t nq, size_t nr, size_t nz, size_t ny, size_t nx) {
13  float *x_ptr = (float*) malloc(nq * nr * nz * ny * nx * sizeof(float));
14  if (x_ptr == NULL) {
15  fprintf(stderr, "-E- %s line %d: Memory allocation of data block failed.n", __FILE__, __LINE__);
16  return NULL;
17  }
18  float **y_ptr = (float**) malloc(nq * nr * nz * ny * sizeof(float*));
19  if (y_ptr == NULL) {
20  fprintf(stderr, "-E- %s line %d: Memory allocation of y array failed.n", __FILE__, __LINE__);
21  return NULL;
22  }
23  float ***z_ptr = (float***) malloc(nq * nr * nz * sizeof(float**));
24  if (z_ptr == NULL) {
25  fprintf(stderr, "-E- %s line %d: Memory allocation of z array failed.n", __FILE__, __LINE__);
26  return NULL;
27  }
28  float ****r_ptr = (float****) malloc(nq * nr * sizeof(float***));
29  if (r_ptr == NULL) {
30  fprintf(stderr, "-E- %s line %d: Memory allocation of r array failed.n", __FILE__, __LINE__);
31  return NULL;
32  }
33  float *****q_ptr = (float*****) malloc(nq * sizeof(float****));
34  if (q_ptr == NULL) {
35  fprintf(stderr, "-E- %s line %d: Memory allocation of q array failed.n", __FILE__, __LINE__);
36  return NULL;
37  }
38 
39  for(size_t q=0; q<nq; q++) {
40  for(size_t r=0; r<nr; r++) {
41  for(size_t z=0; z<nz; z++) {
42  for(size_t y=0; y<ny; y++) {
43  y_ptr[y] = x_ptr;
44  x_ptr += nx;
45  }
46  z_ptr[z] = y_ptr;
47  y_ptr += ny;
48  }
49  r_ptr[r] = z_ptr;
50  z_ptr += nz;
51  }
52  q_ptr[q] = r_ptr;
53  r_ptr += nr;
54  }
55  return q_ptr;
56 }
57 
58 void free5d_float(float *****p) {
59  free(p[0][0][0][0]);
60  free(p[0][0][0]);
61  free(p[0][0]);
62  free(p[0]);
63  free(p);
64 }
65 
data_t q
Definition: decode_rs.h:74
int r
Definition: decode_rs.h:73
void free5d_float(float *****p)
Free a five-dimensional array created by allocate5d_float.
Definition: allocate5d.c:58
#define NULL
Definition: decode_rs.h:63
float ***** allocate5d_float(size_t nq, size_t nr, size_t nz, size_t ny, size_t nx)
Allocate a five-dimensional array of type float of a given size.
Definition: allocate5d.c:12
Utility functions for allocating and freeing five-dimensional arrays of various types.
float p[MODELMAX]
Definition: atrem_corl1.h:131