ocssw V2020
get_atrem_cor3.c
Go to the documentation of this file.
1 /*
2  * get_atrem_cor2.c
3  *
4  * Created on: Feb 19, 2015
5  * Author: rhealy
6  *
7  * * Notes about water vapor VMRS and related quantities: *
8  * *
9  * VAPVRT(60) - a table containing 60 column vapor values (in unit of cm) *
10  * *
11  * VAP_SLANT(I) = VAPVRT(I) * 2.0, VAP_SLANT is a new table for containing *
12  * two-way total vapor amounts. Here the number "2" can be *
13  * changed to other numbers, e.g., 2.5, without major *
14  * effects on retrieved water vapor values. *
15  * *
16  * G_VAP(I = 1,..., NL) = true vapor geometric factor for each layer in *
17  * the model atmosphere (after adjusting for the elevated *
18  * surface. *
19  * *
20  * VMRM(I) = VMRM(I)*G_VAP(I). The VMRS are multiplied by the geometrical *
21  * factor. We can calculate the vapor transmittance on the *
22  * Sun-surface-sensor path by assuming a vertical path in *
23  * the model atmosphere with geometric-factor-adjusted VMRS. *
24  * *
25  * CLMVAP = vertical column amount from ground to space in model atmosphere*
26  * CLMVAPP = vertical column amount from ground to aircraft or satellite *
27  * sensor in model atmosphere *
28  * Q = 2.152E25 = # of molecules above the surface at one atmosphere *
29  * (in unit of molecules/cm**2) *
30  * *
31  * VAP_SLANT_MDL= CLMVAP/COS(SOLZNI) + CLMVAPP/COS(OBSZNI) = total amount *
32  * of water vapor in the model atmosphere in the L-shaped *
33  * Sun-surface-plane ray path. *
34  * *
35  * G_VAP_EQUIV = VAP_SLANT_MDL / CLMVAP = the "equivalent" geometrical *
36  * factor corresponding to the total slant vapor amount *
37  * VAP_SLANT_MDL and the column vapor amount CLMVAP. *
38  * *
39  * SSH2O(I) (I = 1, ..., 60) - a pure scaling factor relative to the total *
40  * slant vapor amount of VAP_SLANT_MDL, and *
41  * SSH2O(I) = VAP_SLANT(I) / VAP_SLANT_MDL *
42  * *
43  * SH2O = one value of SSH2O(I). SH2O is used during generation of the *
44  * look-up table. *
45  * *
46  * VAPTT = VAP_SLANT_MDL*SH2O, is the absolute total vapor amount on the *
47  * L-shaped path corresponding to a spectrum stored in the *
48  * look-up table. *
49  * *
50  * CLMWVP = 0.5*(VAPTTA+VAPTTB)/G_VAP_EQUIV, is the retrieved column water *
51  * vapor amount from imaging spectrometer data. *
52  ********************************************************************************
53  *
54  */
55
56 /* compile this code with:
57  gcc -O1 -Wpadded -Wpacked -malign-double -mpreferred-stack-boundary=8 -o get_atrem_cor3 \
58  get_atrem_cor3.c atrem_app_refl_plus_gas_removal_for_l2gen3.o cubeio.o \
59  tpvmr_init.o solar_irr_PC.o bndprms.o -lgfortran \
60  -L/disk01/home/rhealy/ocssw/build/cbuild/src/libgenutils -lgenutils \
61  -L/disk01/home/rhealy/ocssw/build/lib3/src/netcdf/netcdf-fortran-4.2/fortran/.libs \
62  -lnetcdff -L/disk01/home/rhealy/ocssw/build/lib3/src/netcdf/netcdf-4.3.1.1/liblib/.libs -lnetcdf \
63  -L/disk01/home/rhealy/ocssw/build/lib3/src/hdf5/hdf5-1.8.10-patch1/src/.libs -lhdf5 \
64  -L/disk01/home/rhealy/ocssw/build/lib3/src/hdf5/hdf5-1.8.10-patch1/hl/src/.libs -lhdf5_hl \
65  -L/disk01/home/rhealy/ocssw/build/lib3/src/netcdf/netcdf-4.3.1.1/libsrc4/.libs -lnetcdf4 -lz \
66  -L/disk01/home/rhealy/ocssw/build/lib3/src/hdf5/hdf5-1.8.10-patch1/src/.libs -lhdf5
67
68  * compile fortran routines:
69  gfortran -malign-double -c atrem_app_refl_plus_gas_removal_for_l2gen2.f90 cubeio.f90 \
70  bndprms.f solar_irr_PC.f tpvmr_init.f
71
72 ---- Previous version without netcdf -----
73
74  gcc -Wpadded -Wpacked -malign-double -mpreferred-stack-boundary=8 -o get_atrem_cor \
75  get_atrem_cor.c atrem_app_refl_plus_gas_removal_for_l2gen.o cubeio.o \
76  tpvmr_init.o solar_irr_PC.o bndprms.o -lgfortran -L/disk01/home/rhealy/ocssw/build/cbuild/src/libgenutils -lgenutils
77  *
78  * compile fortran routines:
79  gfortran -malign-double -I/disk01/home/rhealy/ocssw/build/lib3/src/netcdf/netcdf-fortran-4.2/fortran -c atrem_app_refl_plus_gas_removal_for_l2gen3.f90 cubeio.f90 \
80  bndprms.f solar_irr_PC.f tpvmr_init.f
81
82  Example:
83  get_atrem_cor2 < input/test_input.txt > cor2_test90b.out
84  */
85 #include "atrem_cor.h"
86 #define BUFSZ 100
87
88 int main(int argc, char *argv[]) {
89
90  FILE *fp;
91  char *fname;
92  char line[BUFSZ];
93  paramstr P;
94  double *YY;
95  int cnt = 0, i, j, k, l;
96  double start_time, tot_time = 0;
97
98  // char *f_rad = "atrem_yy_pix2line3_before.txt";
100  if (argc == 2) {
102  // }else{
103  // fprintf(stderr,"%s: Please supply a file name\n",argv);
104  // exit(1);
105  }
106  // P.r0p94 = (float *) calloc(TBLMAX,sizeof(float));
107  // P.r1p14 = (float *) calloc(TBLMAX,sizeof(float));
108  // P.finst2 = (float *) calloc(FINSTMAX,sizeof(float));
109  // P.vaptot = (float *) calloc(TBLMAX,sizeof(float));
110  // P.trntbl = (float *) calloc(TBLMAX,sizeof(t_array));
111
112  /* call fortran routines and transfer parameters over to C struct */
113  start_time = now();
114  printf("\nBegin get_atrem_cor processing at %s\n\n", ydhmsf(start_time, 'L'));
115
116  get_input_();
117  printf("Processed get_input after %6.0f seconds\n", now() - start_time);
119  printf("Processed model_adj after %6.0f seconds\n", now() - start_time);
120  geometry_();
121  printf("Processed geometry after %6.0f seconds\n", now() - start_time);
122  init_speccal_();
123  printf("Processed init_speccal after %6.0f seconds\n", now() - start_time);
124  solar_irr_pc_();
125  printf("Processed solar_irr_pc after %6.0f seconds\n", now() - start_time);
126  tran_table_();
127  printf("Processed tran_table after %6.0f seconds\n", now() - start_time);
128
129  P.nb1 = getinput7_.nb1;
130  P.nb2 = getinput7_.nb2;
131  P.nb3 = getinput7_.nb3;
132  P.nb4 = getinput7_.nb4;
133  P.nbp94 = getinput7_.nbp94;
134  P.nb1p14 = getinput7_.nb1p14;
135  P.nh2o = init_speccal3_.nh2o;
136  P.nobs = getinput5_.nobs;
137  P.delta = getinput5_.dlt;
138  P.delta2 = getinput5_.dlt2;
139  P.start_ndx = init_speccal6_.ist1 - 1;
140  P.start_ndx = init_speccal6_.ist2 - 1;
141  P.end_ndx = init_speccal6_.ied1 - 1;
142  P.end_ndx = init_speccal6_.ied2 - 1;
143  P.start_p94 = init_speccal6_.istp94 - 1;
144  P.end_p94 = init_speccal6_.iedp94 - 1;
145  P.start_ndx = init_speccal7_.ist3 - 1;
146  P.start_ndx = init_speccal7_.ist4 - 1;
147  P.end_ndx = init_speccal7_.ied3 - 1;
148  P.end_ndx = init_speccal7_.ied4 - 1;
149  P.start_1p14 = init_speccal7_.ist1p14 - 1;
150  P.end_1p14 = init_speccal7_.ied1p14 - 1;
151  P.start2 = init_speccal10_.istrt2 - 1;
152  P.end2 = init_speccal10_.iend2 - 1;
153  P.ncv2 = init_speccal10_.ncv2;
154  P.natot = init_speccal11_.natot;
155  P.nbtot = init_speccal11_.nbtot;
156  P.nctot = init_speccal11_.nctot;
157  P.ndtot = init_speccal11_.ndtot;
158  P.wt1 = init_speccal8_.wt1;
159  P.wt2 = init_speccal8_.wt2;
160  P.wt3 = init_speccal8_.wt3;
161  P.wt4 = init_speccal8_.wt4;
162  P.g_vap_equiv = geometry3_.g_vap;
163  P.r0p94 = tran_table1_.r0p94;
164  P.r1p14 = tran_table1_.r1p14;
165  P.vaptot = tran_table1_.vaptot;
166  P.trntbl = tran_table1_.trntbl;
167  P.finst2 = init_speccal10_.finst2;
168
169  printf("nb: %d %d %d %d\n", P.nb1, P.nb2, P.nb3, P.nb4);
170  printf("nb: %d %d\n", P.nbp94, P.nb1p14);
171  printf("nh2o: %d\n", P.nh2o);
172  printf("nobs: %d\n", P.nobs);
173  printf("startndx: %d %d %d %d\n", P.start_ndx, P.start_ndx, P.start_ndx, P.start_ndx);
174  printf("endndx: %d %d %d %d\n", P.end_ndx, P.end_ndx, P.end_ndx, P.end_ndx);
175  printf("start_p94: %d\n", P.start_p94);
176  printf("end_p94: %d\n", P.end_p94);
177  printf("start_1p14: %d\n", P.start_1p14);
178  printf("end_1p14: %d\n", P.end_1p14);
179  printf("%d\n", P.start2);
180  printf("%d\n", P.end2);
181
182  printf("ncv2: %d\n", P.ncv2);
183  printf("ntot: %d %d %d %d\n", P.natot, P.nbtot, P.nctot, P.ndtot);
184  printf("wt: %f %f %f %f\n", P.wt1, P.wt2, P.wt3, P.wt4);
185  printf("delta: %f %f\n", P.delta, P.delta2);
186  printf("g_vap: %f \n", P.g_vap_equiv);
187
188
189
190  double *YYp, cst1, cst2, cst3, cst4, cst5, cst6, rp94, r1p14;
191  int ii, ll, kk;
192
193  YY = (double *) calloc(P.nobs, sizeof (double));
194  YYp = (double *) calloc(P.nobs, sizeof (double));
195  if ((fp = fopen(f_rad, "r")) == NULL) {
196  fprintf(stderr, "Unable to open %s\n", f_rad);
197  exit(1);
198  }
199  int32_t ja, jb;
200
201  for (l = 1999; l < 2000; l++) {
202  for (k = 511; k < 512; k++) {
203
204  for (i = 0; i < P.nobs && fgets(line, BUFSZ, fp); i++) {
205  sscanf(line, "%d %d %d %lf", &ii, &kk, &ll, &YY[i]);
206  YYp[i] = YY[i];
207  }
208  start_time = now();
209  cnt = get_atrem(YY, P, &rp94, &r1p14, &cst1, &cst2, &cst3, &cst4, &cst5, &cst6, &ja, &jb);
210  tot_time += now() - start_time;
211  for (i = 0; i < P.nobs; i++) {
212  printf("%d %d %d %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %d %d \n", i + 1, kk, ll, YYp[i], YY[i], rp94, r1p14, cst1, cst2, cst3, cst4, cst5, cst6, ja, jb);
213  }
214  }
215
216  }
217  printf("Processed %d get_atrem calls after %6.0f seconds\n", 2000 * 512, tot_time);
218  return (0);
219 }
220
221 int get_atrem(double *yy, paramstr P, double *rp94, double *r1p14, double *cst1, double *cst2, double *cst3, double *cst4, double *cst5, double *cst6, int32_t *jac, int32_t *jbc) {
222
223  double const1 = 0, const2 = 0, const3 = 0, const4 = 0, const5 = 0, const6 = 0;
224  double ratio_94c, ratio_94co, ratio_114c, ratio_114co;
225  int32_t i, ja, jb;
226  double clmwvp;
227  /*
228  Arrays related to look-up table:
229  VAPTOT: TOTAL SUN-SURFACE-SENSOR PATH WATER VAPOR IN UNITS OF CM
230  R0P94 : Tc(0.94 um)/(WT1*Tc(0.86)+WT2*Tc(1.02))
231  R1P14 : Tc(1.14 um)/(WT3*Tc(1.05)+WT4*Tc(1.23))
232
233  Calculating 3-channel ratios from an observed spectrum, using a
234  look-up table procedure to derive the column amount of water vapor
235  and to find the associated simulated transmittance spectrum.
236  */
237  for (i = P.start_ndx; i <= P.end_ndx; i++) {
238  const1 += yy[i];
239  }
240  const1 /= P.nb1;
241
242  for (i = P.start_ndx; i <= P.end_ndx; i++) {
243  const2 += yy[i];
244  }
245  const2 /= P.nb2;
246
247  // printf("const2=%f nb2=%d istr2=%d ind2=%d\n",const2,P.nb2,P.start_ndx,P.end_ndx);
248
249  for (i = P.start_p94; i <= P.end_p94; i++) {
250  const3 += yy[i];
251  }
252  const3 /= P.nbp94;
253
254  ratio_94co = const3 / ((P.wt1 * const1) + (P.wt2 * const2));
255  ratio_94c = ratio_94co;
256
257  if (ratio_94co > 1.0) {
258  const1 = 0.0;
259
260  for (i = P.start_ndx; i <= P.end_ndx; i++) {
261  const1 += (1.0 / yy[i]);
262  }
263  const1 /= P.nb1;
264
265  const2 = 0.0;
266  for (i = P.start_ndx; i <= P.end_ndx; i++) {
267  const2 += (1.0 / yy[i]);
268  }
269  const2 /= P.nb2;
270  const3 = 0.0;
271  for (i = P.start_p94; i <= P.end_p94; i++) {
272  const3 += (1.0 / yy[i]);
273  }
274  const3 /= P.nbp94;
275
276  ratio_94c = const3 / ((P.wt1 * const1) + (P.wt2 * const2));
277  }
278
279  *rp94 = ratio_94c;
280
281  const4 = 0.0;
282  for (i = P.start_ndx; i <= P.end_ndx; i++) {
283  const4 += yy[i];
284  }
285  const4 /= P.nb3;
286
287  const5 = 0.0;
288  for (i = P.start_ndx; i <= P.end_ndx; i++) {
289  const5 += yy[i];
290  }
291  const5 /= P.nb4;
292
293  const6 = 0.0;
294  for (i = P.start_1p14; i <= P.end_1p14; i++) {
295  const6 += yy[i];
296  }
297  const6 /= P.nb1p14;
298
299  /* DEBUG
300  *
301  */
302  *cst1 = const1;
303  *cst2 = const2;
304  *cst3 = const3;
305  *cst4 = const4;
306  *cst5 = const5;
307  *cst6 = const6;
308
309  ratio_114co = const6 / ((P.wt3 * const4) + (P.wt4 * const5));
310  ratio_114c = ratio_114co;
311
312  if (ratio_114co > 1.0) {
313
314  const4 = 0.0;
315  for (i = P.start_ndx; i <= P.end_ndx; i++) {
316  const4 += (1.0 / yy[i]);
317  }
318  const4 /= P.nb3;
319  for (i = P.start_ndx; i <= P.end_ndx; i++) {
320  const5 += (1.0 / yy[i]);
321  }
322  const5 /= P.nb4;
323  const6 = 0.0;
324  for (i = P.start_1p14; i <= P.end_1p14; i++) {
325  const6 += (1.0 / yy[i]);
326  }
327  const6 /= P.nb1p14;
328  ratio_114c = const6 / ((P.wt3 * const4) + (P.wt4 * const5));
329  }
330
331  *r1p14 = ratio_114c;
332
333  double delta, deltab, fja, fjap1, fjb, fjbp1, vaptta, vapttb;
334  double speca[NBANDS], specb[NBANDS], specav;
335  ja = P.nh2o / 2;
336  ja = hunt(P.r0p94, P.nh2o, ratio_94c, ja);
337  if (ja >= 0 && ja < TBLMAX) {
338  delta = P.r0p94[ja + 1] - P.r0p94[ja];
339  fja = (P.r0p94[ja + 1] - ratio_94c) / delta;
340  fjap1 = (ratio_94c - P.r0p94[ja]) / delta;
341  vaptta = fja * P.vaptot[ja] + fjap1 * P.vaptot[ja + 1];
342  if (ratio_94co > 1.0) vaptta = -vaptta;
343  } else {
344  if (ja < 0) vaptta = P.vaptot[ja + 1];
345  if (ja > P.nh2o) vaptta = P.vaptot[ja];
346  }
347
348  if (ratio_94co <= 1.0) {
349  for (i = 0; i < P.nobs; i++) {
350  if (ja >= 0 && ja < TBLMAXM1) {
351  speca[i] = fja * P.trntbl[ja][i] + fjap1 * P.trntbl[ja + 1][i];
352  } else {
353  if (ja < 0) speca[i] = P.trntbl[ja + 1][i];
354  if (ja >= TBLMAXM1) speca[i] = P.trntbl[ja][i];
355  }
356  }
357  }
358
359  if (ratio_94co > 1.0) {
360  for (i = 0; i < P.nobs; i++) {
361  if (ja >= 0 && ja < TBLMAXM1) {
362  speca[i] = 1.0 / (fja * P.trntbl[ja][i] + fjap1 * P.trntbl[ja + 1][i]);
363  } else {
364  if (ja < 0) speca[i] = 1.0 / P.trntbl[ja + 1][i];
365  if (ja >= TBLMAXM1) speca[i] = 1.0 / P.trntbl[ja][i];
366  }
367  }
368  }
369
370  jb = ja;
371
372  jb = hunt(&P.r1p14, P.nh2o, ratio_114c, jb);
373  *jac = ja;
374  *jbc = jb;
375
376  if (jb >= 0 && jb < TBLMAXM1) {
377  deltab = P.r1p14[jb + 1] - P.r1p14[jb];
378  fjb = (P.r1p14[jb + 1] - ratio_114c) / deltab;
379  fjbp1 = (ratio_114c - P.r1p14[jb]) / deltab;
380  vapttb = fjb * P.vaptot[jb] + fjbp1 * P.vaptot[jb + 1];
381  if (ratio_114co > 1.0) vapttb = -vapttb;
382  } else {
383  if (jb < 0) vapttb = P.vaptot[jb + 1];
384  if (jb <= TBLMAXM1) vapttb = P.vaptot[jb];
385  }
386
387  if (ratio_114co <= 1.0) {
388  for (i = 0; i < P.nobs; i++) {
389  if (jb >= 0 && jb < TBLMAXM1) {
390  specb[i] = fjb * P.trntbl[jb][i] + fjbp1 * P.trntbl[jb + 1][i];
391  } else {
392  if (jb < 0) specb[i] = P.trntbl[jb + 1][i];
393  if (jb >= TBLMAXM1) specb[i] = P.trntbl[jb][i];
394  }
395  }
396  }
397  if (ratio_114co > 1.0) {
398  for (i = 0; i < P.nobs; i++) {
399  if (jb >= 0 && jb < TBLMAXM1) {
400  specb[i] = 1.0 / (fjb * P.trntbl[jb][i] + fjbp1 * P.trntbl[jb + 1][i]);
401  } else {
402  if (jb < 0) specb[i] = 1.0 / P.trntbl[jb + 1][i];
403  if (jb >= TBLMAXM1) specb[i] = 1.0 / P.trntbl[jb][i];
404  }
405  }
406  }
407
408  clmwvp = 0.5 * (vaptta + vapttb) / P.g_vap_equiv;
409
410
411  // Derivation of surface reflectances
412
413  for (i = 0; i < P.nobs; i++) {
414  specav = 0.5 * (speca[i] + specb[i]);
415  yy[i] /= specav;
416  }
417
418
419
420
421  // Smooth the derived surface reflectance spectra
422
423  int ii, j;
424  double truncv;
425
426  if (P.delta2 > P.delta) {
427  /*
428  * First, replace radiances <= 0 near the spectral overlapping parts of the
429  * four AVIRIS spectrometers by radiances in the nearby AVIRIS' channels.
430  */
431  for (i = P.natot - 3; i < P.natot + 2; i++) {
432  if (yy[i] <= 0.0) yy[i] = yy[i - 1];
433  }
434  for (i = P.nbtot - 3; i < P.nbtot + 2; i++) {
435  if (yy[i] <= 0.0) yy[i] = yy[i - 1];
436  }
437  for (i = P.nctot - 3; i < P.nctot + 2; i++) {
438  if (yy[i] <= 0.0) yy[i] = yy[i - 1];
439  }
440  for (i = P.ndtot - 3; i < P.ndtot + 2; i++) {
441  if (yy[i] <= 0.0) yy[i] = yy[i - 1];
442  }
443  for (i = P.start2 - 1; i < P.end2; i++) {
444  truncv = 0.0;
445  ii = i - P.ncv2 - 1;
446  for (j = ii; j < i + P.ncv2; j++) {
447  truncv += yy[j] * P.finst2[j - ii + 1];
448  }
449  yy[i] = truncv;
450  }
451  }
452
453
454  return (clmwvp);
455
456 }
457
458 /*********************************************************************************
459  * *
460  * Name: HUNT *
461  * Purpose: finds the element in array XX that is closest to value X. Array AA *
462  * must be monotonic, either increasing or decreasing. *
463  * Parameters: XX - array to search *
464  * N - number of elements in the array *
465  * X - element to search for closest match *
466  * JLO - index of the closest matching element *
467  * Algorithm: this subroutine was copied from Numerical Recipes *
468  * Modified for C and cleaned up by *
469  * Richard Healy SAIC/NASA-GSFC 2/19/2015 *
470  * Globals used: none *
471  * Global output: none *
472  * Return Codes: none *
473  * Special Considerations: none *
474  * *
475  **********************************************************************************
476  *
477  */
478 int32_t hunt(float *xx, int32_t n, double x, int32_t jlo) {
479  int32_t inc, jhi, jm;
480  int ascnd;
481
482  ascnd = (xx[n - 1] >= xx);
483
484  if (jlo >= 0 && jlo < n) {
485
486  inc = 1;
487  if ((x >= xx[jlo]) == ascnd) {
488  jhi = jlo + inc;
489  while (jhi < n && (x >= xx[jhi]) == ascnd) {
490  if (jhi >= n) {
491  jhi = n;
492  break;
493  } else if ((x >= xx[jhi]) == ascnd) {
494  jlo = jhi;
495  inc += inc;
496  jhi = jlo + inc;
497  }
498  }
499
500  } else {
501  jhi = jlo;
502  jlo = jhi - inc;
503  while (jlo >= 0 && (x < xx[jlo]) == ascnd) {
504  if (jlo < 0) {
505  jlo = -1;
506  break;
507  } else if ((x < xx[jlo]) == ascnd) {
508  jhi = jlo;
509  inc += inc;
510  jlo = jhi - inc;
511  }
512  }
513
514  }
515
516  } else {
517  jlo = -1;
518  jhi = n;
519  }
520
521  while (jhi - jlo != 1) {
522
523  jm = (jhi + jlo) / 2;
524
525  if ((x == xx[jm]) == ascnd) {
526  jlo = jm;
527  } else {
528  jhi = jm;
529  }
530  }
531
532  if (x == xx[n - 1]) jlo = n - 2;
533  if (x == xx) jlo = 0;
534
535  return (jlo);
536 }
537
char * ydhmsf(double dtime, char zone)
Definition: ydhmsf.c:12
#define BUFSZ
float r1p14[TBLMAX]
Definition: atrem_cor.h:128
int32_t jbc
Definition: atrem_corl1.h:239
int j
Definition: decode_rs.h:73
void init_speccal_()
int get_atrem(double *yy, paramstr P, double *rp94, double *r1p14, double *cst1, double *cst2, double *cst3, double *cst4, double *cst5, double *cst6, int32_t *jac, int32_t *jbc)
string fname
Definition: mie_kernal.py:124
#define NULL
Definition: decode_rs.h:63
struct @9 tran_table1_
void geometry_()
#define TBLMAXM1
Definition: atrem.h:16
float cst5
Definition: atrem_corl1.h:237
float cst3
Definition: atrem_corl1.h:237
struct @4 init_speccal6_
int32_t jac
Definition: atrem_corl1.h:239
#define TBLMAX
Definition: atrem.h:15
int jb
Definition: atrem_corl1.h:227
float cst1
Definition: atrem_corl1.h:237
struct @6 init_speccal8_
double rp94
Definition: atrem_corl1.h:238
struct @7 init_speccal10_
struct @1 getinput5_
const double delta
float cst6
Definition: atrem_corl1.h:237
float ja
Definition: atrem_cor.h:114
int main(int argc, char *argv[])
void get_input_()
@ NBANDS
Definition: make_L3_v1.1.c:53
float cst4
Definition: atrem_corl1.h:237
Definition: HISTORY.txt:361
struct @10 geometry3_
float cst2
Definition: atrem_corl1.h:237
for(i=0;i< NROOTS;i++) s[i]
Definition: decode_rs.h:85
struct @3 init_speccal3_
int i
Definition: decode_rs.h:71
struct @8 init_speccal11_
int32_t hunt(float *xx, int32_t n, double x, int32_t jlo)
struct @5 init_speccal7_
int k
Definition: decode_rs.h:73
struct @2 getinput7_
void tran_table_()