NASA Logo
Ocean Color Science Software

ocssw V2022
alloc_l1.c
Go to the documentation of this file.
1 #include "l1.h"
2 
3 #include <stdio.h>
4 #include <stdlib.h>
5 
6 
7 void free_l1(l1str *l1rec) {
8  free((void *) l1rec->data);
9  if(l1rec->uncertainty)
10  free_uncertainty(l1rec->uncertainty);
11 }
12 
13 /* --------------------------------------------------------- */
14 /* alloc_l1() - allocates 1 level-1b record to hold data for */
15 /* a single scan of "npix" pixels. */
16 
17 /* --------------------------------------------------------- */
18 int32_t alloc_l1(filehandle* l1file, l1str *l1rec) {
19  char *p;
20  int32_t len;
21 
22  l1rec->l1file = l1file;
23 
24  int32_t nbands = l1file->nbands;
25  int32_t nbandsir = NBANDSIR;
26  int32_t npix = l1rec->npix = l1file->npix;
27 
28  /* */
29  /* allocate data block as contiguous bytes */
30  /* */
31  len = 34 * sizeof (float)*npix
32  + 23 * sizeof (float)*npix * nbands
33  + 2 * sizeof (float)*npix * nbandsir
34  + 1 * sizeof (float)*nbands
35  + 4 * sizeof (int32_t) * npix
36  + 2 * sizeof (short)*npix
37  + 15 * sizeof (char)*npix;
38 
39  /* Force to 4-byte increments for good measure */
40  len = (len / 4 + 1)*4;
41 
42  if ((p = (char *) malloc(len)) == NULL) {
43  fprintf(stderr,
44  "-E- %s line %d: Memory allocation failure.\n",
45  __FILE__, __LINE__);
46  return (0);
47  }
48 
49  /* Note: positional allocation is in order of datatype size, to
50  ensure that all 4-byte words start on 4-byte boundaries. Some
51  machines seem to have trouble if this is not done. */
52 
53  l1rec->length = len;
54  l1rec->data = p;
55 
56  // + 44*sizeof(float)*npix
57  l1rec->lon = (float *) p;
58  p += sizeof (float)*npix;
59  l1rec->lat = (float *) p;
60  p += sizeof (float)*npix;
61  l1rec->solz = (float *) p;
62  p += sizeof (float)*npix;
63  l1rec->sola = (float *) p;
64  p += sizeof (float)*npix;
65  l1rec->senz = (float *) p;
66  p += sizeof (float)*npix;
67  l1rec->sena = (float *) p;
68  p += sizeof (float)*npix;
69  l1rec->delphi = (float *) p;
70  p += sizeof (float)*npix;
71  l1rec->csolz = (float *) p;
72  p += sizeof (float)*npix;
73  l1rec->csenz = (float *) p;
74  p += sizeof (float)*npix;
75  l1rec->alpha = (float *) p;
76  p += sizeof (float)*npix;
77  l1rec->scattang = (float *) p;
78  p += sizeof (float)*npix;
79  l1rec->ws = (float *) p;
80  p += sizeof (float)*npix;
81  l1rec->wd = (float *) p;
82  p += sizeof (float)*npix;
83  l1rec->mw = (float *) p;
84  p += sizeof (float)*npix;
85  l1rec->zw = (float *) p;
86  p += sizeof (float)*npix;
87  l1rec->pr = (float *) p;
88  p += sizeof (float)*npix;
89  l1rec->oz = (float *) p;
90  p += sizeof (float)*npix;
91  l1rec->wv = (float *) p;
92  p += sizeof (float)*npix;
93  l1rec->rh = (float *) p;
94  p += sizeof (float)*npix;
95  l1rec->sfcp = (float *) p;
96  p += sizeof (float)*npix;
97  l1rec->sfcrh = (float *) p;
98  p += sizeof (float)*npix;
99  l1rec->sfct = (float *) p;
100  p += sizeof (float)*npix;
101  l1rec->icefr = (float *) p;
102  p += sizeof (float)*npix;
103  l1rec->no2_tropo = (float *) p;
104  p += sizeof (float)*npix;
105  l1rec->no2_strat = (float *) p;
106  p += sizeof (float)*npix;
107  l1rec->no2_frac = (float *) p;
108  p += sizeof (float)*npix;
109  l1rec->height = (float *) p;
110  p += sizeof (float)*npix;
111  l1rec->dem = (float *) p;
112  p += sizeof (float)*npix;
113  l1rec->glint_coef = (float *) p;
114  p += sizeof (float)*npix;
115  l1rec->cloud_albedo = (float *) p;
116  p += sizeof (float)*npix;
117  l1rec->aerindex = (float *) p;
118  p += sizeof (float)*npix;
119  l1rec->sstref = (float *) p;
120  p += sizeof (float)*npix;
121  l1rec->sssref = (float *) p;
122  p += sizeof (float)*npix;
123  l1rec->rho_cirrus = (float *) p;
124  p += sizeof (float)*npix;
125 
126  // + 23*sizeof(float)*npix*nbands
127  l1rec->Lt = (float *) p;
128  p += sizeof (float)*npix*nbands;
129  l1rec->t_h2o = (float *) p;
130  p += sizeof (float)*npix*nbands;
131  l1rec->t_o2 = (float *) p;
132  p += sizeof (float)*npix*nbands;
133  l1rec->tg_sol = (float *) p;
134  p += sizeof (float)*npix*nbands;
135  l1rec->tg_sen = (float *) p;
136  p += sizeof (float)*npix*nbands;
137  l1rec->tg = (float *) p;
138  p += sizeof (float)*npix*nbands;
139  l1rec->t_sol = (float *) p;
140  p += sizeof (float)*npix*nbands;
141  l1rec->t_sen = (float *) p;
142  p += sizeof (float)*npix*nbands;
143  l1rec->rhof = (float *) p;
144  p += sizeof (float)*npix*nbands;
145  l1rec->tLf = (float *) p;
146  p += sizeof (float)*npix*nbands;
147  l1rec->Lr = (float *) p;
148  p += sizeof (float)*npix*nbands;
149  l1rec->L_q = (float *) p;
150  p += sizeof (float)*npix*nbands;
151  l1rec->L_u = (float *) p;
152  p += sizeof (float)*npix*nbands;
153  l1rec->polcor = (float *) p;
154  p += sizeof (float)*npix*nbands;
155  l1rec->dpol = (float *) p;
156  p += sizeof (float)*npix*nbands;
157  l1rec->TLg = (float *) p;
158  p += sizeof (float)*npix*nbands;
159  l1rec->rhos = (float *) p;
160  p += sizeof (float)*npix*nbands;
161  l1rec->sw_n = (float *) p;
162  p += sizeof (float)*npix*nbands;
163  l1rec->sw_a = (float *) p;
164  p += sizeof (float)*npix*nbands;
165  l1rec->sw_bb = (float *) p;
166  p += sizeof (float)*npix*nbands;
167  l1rec->sw_a_avg = (float *) p;
168  p += sizeof (float)*npix*nbands;
169  l1rec->sw_bb_avg = (float *) p;
170  p += sizeof (float)*npix*nbands;
171  l1rec->radcor = (float *) p;
172  p += sizeof (float)*npix*nbands;
173 
174  // + 2*sizeof(float)*npix*nbandsir
175  l1rec->Ltir = (float *) p;
176  p += sizeof (float)*npix*nbandsir;
177  l1rec->Bt = (float *) p;
178  p += sizeof (float)*npix*nbandsir;
179 
180  // + 1*sizeof(float)*nbands
181  l1rec->Fo = (float *) p;
182  p += sizeof (float)*nbands;
183 
184  // + 4*sizeof(int32_t)*npix
185  l1rec->nobs = (int32_t*) p;
186  p += sizeof (int32_t) * npix;
187  l1rec->pixnum = (int32_t*) p;
188  p += sizeof (int32_t) * npix;
189  l1rec->flags = (int32_t*) p;
190  p += sizeof (int32_t) * npix;
191  l1rec->pixdet = (int32_t*) p;
192  p += sizeof (int32_t) * npix;
193 
194  // + 2*sizeof(short)*npix
195  l1rec->ancqc = (short *) p;
196  p += sizeof (short)*npix;
197  l1rec->ssttype = (short *) p;
198  p += sizeof (short)*npix;
199 
200  // + 15*sizeof(char )*npix
201  l1rec->mask = (char *) p;
202  p += sizeof (char)*npix;
203  l1rec->hilt = (char *) p;
204  p += sizeof (char)*npix;
205  l1rec->cloud = (char *) p;
206  p += sizeof (char)*npix;
207  l1rec->glint = (char *) p;
208  p += sizeof (char)*npix;
209  l1rec->land = (char *) p;
210  p += sizeof (char)*npix;
211  l1rec->swater = (char *) p;
212  p += sizeof (char)*npix;
213  l1rec->ice = (char *) p;
214  p += sizeof (char)*npix;
215  l1rec->solzmax = (char *) p;
216  p += sizeof (char)*npix;
217  l1rec->senzmax = (char *) p;
218  p += sizeof (char)*npix;
219  l1rec->stlight = (char *) p;
220  p += sizeof (char)*npix;
221  l1rec->absaer = (char *) p;
222  p += sizeof (char)*npix;
223  l1rec->navfail = (char *) p;
224  p += sizeof (char)*npix;
225  l1rec->navwarn = (char *) p;
226  p += sizeof (char)*npix;
227  l1rec->filter = (char *) p;
228  p += sizeof (char)*npix;
229  l1rec->slot = (char *) p;
230  p += sizeof (char)*npix;
231 
232  if ((len - (int32_t) (p - l1rec->data)) < 0) {
233  printf("%s Line %d: bad allocation on L1 record\n", __FILE__, __LINE__);
234  exit(1);
235  }
236 
237  l1rec->private_data = NULL;
238  l1rec->geom_per_band = NULL;
239  l1rec->anc_add = NULL;
240  l1rec->anc_aerosol = NULL;
241  l1rec->cld_dat = NULL;
242  l1rec->uncertainty = NULL;
243  l1rec->cld_rad = NULL;
244 
245  if (want_verbose)
246  printf("Allocated %d bytes in L1 record.\n", (int32_t) (p - l1rec->data));
247 
248  return (1);
249 }
250 
int32 l1file(int32 sdfid, int32 *nsamp, int32 *nscans, int16 *dtynum)
Definition: l1stat_chk.c:586
#define NBANDSIR
Definition: filehandle.h:23
#define NULL
Definition: decode_rs.h:63
read l1rec
void free_uncertainty(uncertainty_t *uncertainty)
Definition: uncertainty.c:270
int want_verbose
void free_l1(l1str *l1rec)
Definition: alloc_l1.c:7
int32_t nbands
int32_t alloc_l1(filehandle *l1file, l1str *l1rec)
Definition: alloc_l1.c:18
int npix
Definition: get_cmp.c:28
float p[MODELMAX]
Definition: atrem_corl1.h:131