NASA Logo
Ocean Color Science Software

ocssw V2022
par_utils.h
Go to the documentation of this file.
1 #ifndef _PARUTILS_H
2 #define _PARUTILS_H
3 
4 #include <math.h>
5 #include <stdio.h>
6 
7 #include "filehandle.h"
8 #include "l12_proto.h"
9 #include "l2_struc.h"
10 
11 // typedef int logical;
12 // #define FALSE 0
13 // #define TRUE 1
14 #define NMODEL 12
15 #define NPHASE 75
16 
17 #define EARTH_SURF_PRESSURE 1013.15f
18 #define TAU_550_LOW_BOUND 0.1f
19 #define ANGSTROM_DEFAULT_VALUE 0.2537f
20 #define MAXGLINT 0.05
21 #define MAXHOURS 48
22 #define EINSTEIN 1.193
23 #define MAX_SOLZEN 89.5f
24 #define PAR_0 176.323f
25 #define PAR_0_2023 176.41f
26 #define TAUCONS_LOW 15.0f
27 #define TAUCONS_HIGH 300.0f
28 
39 size_t search(const float *arr, size_t s, size_t e, float val, size_t *i_s,
40  size_t *i_e);
41 
48 float kasten_equation(float solz);
49 
50 typedef struct Temp_merra_data {
52  *lat, *lon;
54  size_t tstep, dim_x, dim_y;
55 } merra2_temp;
56 
69 float interpnd(size_t n_dims, const size_t *dims, const float *point,
70  float **grid, const float *lut);
71 
83 float interp4d(const size_t *dims, const float *point, float **grid,
84  const float *lut);
85 
97 float interp3d(const size_t *dims, const float *point, float **grid,
98  const float *lut);
99 
111 float interp1d(const size_t *dims, const float *point, float **grid,
112  const float *lut);
113 
125 float interp6d(const size_t *dims, const float *point, float **grid,
126  const float *lut);
127 
133 typedef struct Rho_dims {
139  float *wavelength;
140 
147 } rho_dims;
148 
149 typedef struct Td_dims {
150  float *wavelength;
151  float *air_mass;
154 
156  size_t dimair_mass;
159 } td_dims;
160 
161 typedef struct Tg_dims {
162  float *wavelength;
163  float *air_mass;
166 
168  size_t dimair_mass;
171 } tg_dims;
172 
173 typedef struct Dobson_dims {
174  float *days;
175  float *latitude;
176  size_t dimdays;
177  size_t dimlatitude;
178 } dobson_dims;
179 
180 typedef struct WaterVapor_dims {
181  float *days;
182  float *latitude;
183  size_t dimdays;
184  size_t dimlatitude;
185 } watervap_dims;
186 
187 typedef struct Surface_Ocean_Alebedo {
188  float *jwl, *achl, *wv1, *bw1, *wv3, *aw3, *wlt_reft, *reft;
190 } soa_luts;
191 
192 typedef struct Scalar_PAR_MU_Cosine {
196 
197 } scalar_par_luts;
198 
199 typedef struct Scalar_PAR_Inst {
202 } scalar_inst_par_luts;
203 
204 typedef struct LUTs_data {
205  float *lut_rho;
206  float *lut_tg;
207  float *lut_td;
208  rho_dims rhodims;
209  td_dims tddims;
210  tg_dims tgdims;
211  // small LUTs
212  float *lut_dobson;
213  dobson_dims ozonedims;
214  float *lut_watvap;
215  watervap_dims watvapdims;
216  soa_luts soa_lut;
217  scalar_par_luts scalar_luts;
218  scalar_inst_par_luts scalar_inst_luts;
219 } luts_par;
220 
248 void getcldalbe(float *TauCld, float *CF, float cosSZ, float t_obs,
249  float *t_range, float *albe_obs, float *TauCld_obs,
250  float *CF_obs, size_t t_step, float *wl, size_t bands_num);
251 
252 float getosa(float wl, float sza, float wind, float chl, float fr,
253  const luts_par *luts_data);
254 
255 void get_luts_data(l2str *l2rec, luts_par *luts_data);
256 
257 float calc_par(l2str *l2rec, int ip, int nbands, float *Lt, float taua,
258  float angstrom, float *wl, float *fo, float *ko3,
259  float *taumolbar);
260 
261 void calc_scalar_inst_par(l2str *l2rec, int ip, float par_above_ins,float * par_scalar_ins);
262 
263 void calc_scalar_par_mean_cosine(l2str *l2rec, int ip, float par_above,
264  float par_c, float *scalar_par,
265  float *mean_cosine);
266 
267 float calc_par_impl_of_2023(l2str *l2rec, int ip, int nbands, float *Lt,
268  float taua, float angstrom, float *wl, float *fo,
269  float *ko3, float *taumolbar, float *parb,
270  float *parc);
271 
272 void GetAerPhase(l2str *l2rec, int ip, int32_t nbands, float angstrom,
273  float *phasea, float *omegaa, float *modelAngstrom);
274 
275 void read_aerosol_par(l2str *l2rec, int32_t nbands, float *tablewavelengths,
276  float *tablephaseangles, float *tablealphas,
277  float *tableomegas, float *tableaerphasefunc);
278 
279 void *allocateMemoryPar(size_t numBytes, const char *name);
280 
281 float EstimateDobson(int32_t year, int32_t month, int32_t day, float lat);
282 
283 float EstimateWatVap(int32_t year, int32_t month, int32_t day, float lat);
284 
285 float varsol(int32_t jday);
286 
287 void triseset(int32_t jday, float xlon, float xlat, float *trise, float *tset);
288 
289 int Greg2Jul(int32_t year, int32_t month, int32_t day);
290 
291 // return solar zenith - ignore solar azimuth angle
292 float get_solz(int jday, float time, float lon, float lat);
293 
294 float interp_as_taulow(float csz, float tau);
295 
296 float interp_as_tauhigh(float csz);
297 
310 float SunGlint(float sz, float vz, float ra, float ws);
311 
312 #endif
scalar_par_luts scalar_luts
Definition: par_utils.h:217
float * optical_depth_at_550_nm
Definition: par_utils.h:138
float * view_zenith_angle
Definition: par_utils.h:135
size_t dimrelative_azimuth_angle
Definition: par_utils.h:143
float * air_mass
Definition: par_utils.h:163
float * days
Definition: par_utils.h:181
float * wind
Definition: par_utils.h:51
size_t dim_solz
Definition: par_utils.h:201
int32_t day
float * latitude
Definition: par_utils.h:182
float * lat
Definition: par_utils.h:52
size_t dimdays
Definition: par_utils.h:176
float * watVap
Definition: par_utils.h:51
float * days
Definition: par_utils.h:174
size_t dimdays
Definition: par_utils.h:183
float interp4d(const size_t *dims, const float *point, float **grid, const float *lut)
4-dimensional interpolation
Definition: par_utils.c:1749
float interp3d(const size_t *dims, const float *point, float **grid, const float *lut)
3-dimensional interpolation
Definition: par_utils.c:1795
float * water_vapor_pressure
Definition: par_utils.h:165
float * latitude
Definition: par_utils.h:175
float * angstrom_coefficients
Definition: par_utils.h:137
size_t tstep
Definition: par_utils.h:54
float * angstrom_coefficients
Definition: par_utils.h:152
float get_solz(int jday, float time, float lon, float lat)
void GetAerPhase(l2str *l2rec, int ip, int32_t nbands, float angstrom, float *phasea, float *omegaa, float *modelAngstrom)
Definition: par_utils.c:680
float * cf_pard_m
Definition: par_utils.h:200
float * wavelength
Definition: par_utils.h:139
tg_dims tgdims
Definition: par_utils.h:210
float * tau550
Definition: par_utils.h:51
void get_luts_data(l2str *l2rec, luts_par *luts_data)
Get the luts data object For now it includes the MERRA data. Should be moved after the merra data is ...
Definition: par_utils.c:244
soa_luts soa_lut
Definition: par_utils.h:216
float * air_mass
Definition: par_utils.h:151
float calc_par(l2str *l2rec, int ip, int nbands, float *Lt, float taua, float angstrom, float *wl, float *fo, float *ko3, float *taumolbar)
Definition: calc_par.c:192
float * lut_dobson
Definition: par_utils.h:212
td_dims tddims
Definition: par_utils.h:209
float * optical_depth_at_550_nm
Definition: par_utils.h:153
void getcldalbe(float *TauCld, float *CF, float cosSZ, float t_obs, float *t_range, float *albe_obs, float *TauCld_obs, float *CF_obs, size_t t_step, float *wl, size_t bands_num)
//
Definition: par_utils.c:1384
float * pard_m_cs
Definition: par_utils.h:200
float * wind_speed
Definition: par_utils.h:200
float * pard_m_oc
Definition: par_utils.h:200
int32_t jday(int16_t i, int16_t j, int16_t k)
Converts a calendar date to the corresponding Julian day starting at noon on the calendar date....
Definition: jday.c:14
size_t dimwavelength
Definition: par_utils.h:146
size_t dimangstrom_coefficients
Definition: par_utils.h:157
size_t dimsolar_zenith_angle
Definition: par_utils.h:141
float interp6d(const size_t *dims, const float *point, float **grid, const float *lut)
6-dimensional interpolation
Definition: par_utils.c:1675
dobson_dims ozonedims
Definition: par_utils.h:213
float SunGlint(float sz, float vz, float ra, float ws)
Definition: par_utils.c:1614
float start_time
Definition: par_utils.h:53
float EstimateDobson(int32_t year, int32_t month, int32_t day, float lat)
Definition: par_utils.c:876
size_t dimwavelength
Definition: par_utils.h:167
size_t dimair_mass
Definition: par_utils.h:168
float * wavelength
Definition: par_utils.h:162
size_t dim_cot
Definition: par_utils.h:201
float calc_par_impl_of_2023(l2str *l2rec, int ip, int nbands, float *Lt, float taua, float angstrom, float *wl, float *fo, float *ko3, float *taumolbar, float *parb, float *parc)
Definition: calc_par.c:613
void calc_scalar_par_mean_cosine(l2str *l2rec, int ip, float par_above, float par_c, float *scalar_par, float *mean_cosine)
Definition: calc_par.c:160
float interpnd(size_t n_dims, const size_t *dims, const float *point, float **grid, const float *lut)
N-dimensional interpolation.
Definition: par_utils.c:158
size_t search(const float *arr, size_t s, size_t e, float val, size_t *i_s, size_t *i_e)
Binary search algorithm.
Definition: par_utils.c:64
size_t dim_wind_speed
Definition: par_utils.h:201
float end_time
Definition: par_utils.h:53
float * ozone_concentration
Definition: par_utils.h:164
float time_set_max
Definition: par_utils.h:53
float * dobson
Definition: par_utils.h:51
float getosa(float wl, float sza, float wind, float chl, float fr, const luts_par *luts_data)
Definition: par_utils.c:1544
float interp_as_tauhigh(float csz)
Definition: par_utils.c:1349
size_t dimview_zenith_angle
Definition: par_utils.h:142
float * pard_p_cs
Definition: par_utils.h:200
size_t dimoptical_depth_at_550_nm
Definition: par_utils.h:145
float * cf_pard_p
Definition: par_utils.h:200
scalar_inst_par_luts scalar_inst_luts
Definition: par_utils.h:218
float * lut_rho
Definition: par_utils.h:205
float * cos_solz
Definition: par_utils.h:200
size_t dimangstrom_coefficients
Definition: par_utils.h:144
size_t dimlatitude
Definition: par_utils.h:184
size_t dimozone_concentration
Definition: par_utils.h:169
float * angstrom
Definition: par_utils.h:51
float * lon
Definition: par_utils.h:52
luts_par luts_data
Definition: calc_par.c:89
float * lut_watvap
Definition: par_utils.h:214
float * lut_tg
Definition: par_utils.h:206
look up tables for atmosphere intrinsic reflectance (rho), total gaseous absorption (tg) and total sc...
Definition: par_utils.h:133
float obs_time
Definition: par_utils.h:53
void read_aerosol_par(l2str *l2rec, int32_t nbands, float *tablewavelengths, float *tablephaseangles, float *tablealphas, float *tableomegas, float *tableaerphasefunc)
Definition: par_utils.c:802
watervap_dims watvapdims
Definition: par_utils.h:215
float * relative_azimuth_angle
Definition: par_utils.h:136
size_t dimlatitude
Definition: par_utils.h:177
float xlon[LAC_PIXEL_NUM]
Definition: l1a_seawifs.c:93
float * surfPress
Definition: par_utils.h:51
void triseset(int32_t jday, float xlon, float xlat, float *trise, float *tset)
Definition: par_utils.c:1131
size_t dim_x
Definition: par_utils.h:54
float EstimateWatVap(int32_t year, int32_t month, int32_t day, float lat)
Definition: par_utils.c:1002
int32_t nbands
size_t dimair_mass
Definition: par_utils.h:156
this program makes no use of any feature of the SDP Toolkit that could generate such a then geolocation is calculated at that and then aggregated up to Resolved feature request Bug by adding three new int8 SDSs for each high resolution offsets between the high resolution geolocation and a bi linear interpolation extrapolation of the positions This can be used to reconstruct the high resolution geolocation Resolved Bug by delaying cumulation of gflags until after validation of derived products Resolved Bug by setting Latitude and Longitude to the correct fill resolving to support Near Real Time because they may be unnecessary if use of entrained ephemeris and attitude data is turned resolving bug report Corrected to filter out Aqua attitude records with missing status helping resolve bug MOD_PR03 will still correctly write scan and pixel data that does not depend upon the start time
Definition: HISTORY.txt:248
float interp1d(const size_t *dims, const float *point, float **grid, const float *lut)
1-dimensional interpolation
Definition: par_utils.c:1827
float * cf
Definition: par_utils.h:51
float * lut_td
Definition: par_utils.h:207
float varsol(int32_t jday)
Definition: par_utils.c:1116
data_t s[NROOTS]
Definition: decode_rs.h:75
float kasten_equation(float solz)
Kasten eq to compute airmass.
Definition: par_utils.c:58
void calc_scalar_inst_par(l2str *l2rec, int ip, float par_above_ins, float *par_scalar_ins)
Definition: calc_par.c:123
float time_rise_min
Definition: par_utils.h:53
int Greg2Jul(int32_t year, int32_t month, int32_t day)
float * tauCld
Definition: par_utils.h:51
float interp_as_taulow(float csz, float tau)
Definition: par_utils.c:1258
size_t dimwavelength
Definition: par_utils.h:155
void * allocateMemoryPar(size_t numBytes, const char *name)
float * wavelength
Definition: par_utils.h:150
rho_dims rhodims
Definition: par_utils.h:208
size_t dimoptical_depth_at_550_nm
Definition: par_utils.h:158
float * solar_zenith_angle
Definition: par_utils.h:134
size_t dim_y
Definition: par_utils.h:54
size_t dimwater_vapor_pressure
Definition: par_utils.h:170