ocssw  1.0
/disk01/web/ocssw/build/src/l2gen/giop.h (r8102/r7571)
Go to the documentation of this file.
00001 #ifndef _GIOP_H
00002 #define _GIOP_H
00003 
00004 
00005 #define GIOPMAXPAR NBANDS
00006 
00007 /* optimization routines */
00008 #define AMOEBA    0
00009 #define LEVMARQ   1
00010 #define SVDFIT    3
00011 
00012 /* adg function types */
00013 #define ADGTAB    0
00014 #define ADGS      1
00015 #define ADGSQAA   2
00016 #define ADGSOBPG  3
00017 
00018 /* bbp function types */
00019 #define BBPTAB     0
00020 #define BBPS       1
00021 #define BBPSHAL    2
00022 #define BBPSQAA    3
00023 #define BBPSPML    4
00024 #define BBPSCIOTTI 5
00025 #define BBPSMM01   6
00026 #define BBPSLAS    7
00027 #define BBPLAS     8
00028 #define BBPLASFIX  9
00029 #define BBPQAAFIX 10
00030 
00031 /* aph function types */
00032 #define APHTAB     0
00033 #define APHGAUSS   1
00034 #define APHBRICAUD 2
00035 #define APHCIOTTI  3
00036 
00037 /* rrs function types */
00038 #define RRSGRD    0
00039 #define RRSFOQ    1
00040 
00041 
00042 typedef struct giop_ctl_str {
00043 
00044   int npar;            /* # optimized params   */
00045   int maxiter;         /* max iterations       */
00046 
00047   int fit_opt;         /* optimization routine */
00048   int aph_opt;         /* aph function type    */
00049   int adg_opt;         /* adg function type    */
00050   int bbp_opt;         /* bbp function type    */
00051   int rrs_opt;         /* rrs function type    */
00052   int ts_opt;          /* temperature & salinity */
00053   int wt_opt;          /* do we have input wts */
00054 
00055   int   nwave;         /* # fit wavelengths    */
00056   float wave [NBANDS]; /* fit wavelengths      */
00057   int   bindx[NBANDS]; /* index to sensor wave */
00058   float aw   [NBANDS]; /* aw per fit wave      */
00059   float bbw  [NBANDS]; /* bbw per fit wave     */
00060   float wts  [NBANDS]; /* input Rrs wts        */
00061 
00062   float grd[2];        /* RRSGRD param         */
00063   float foq[NBANDS];   /* RRSFOQ variable      */
00064   float aph_s;         /* APHS spectral param  */
00065   float adg_s;         /* ADGS spectral param  */
00066   float bbp_s;         /* BBPS spectral param  */
00067   float aph_w;         /* APHS referance wave  */
00068   float adg_w;         /* ADGS reference wave  */
00069   float bbp_w;         /* BBPS reference wave  */
00070 
00071   float chl;           /* Input chlorophyll    */
00072 
00073   char    aph_tab_file[FILENAME_MAX];
00074   int     aph_tab_nw;   /* elements in aph tab */
00075   float  *aph_tab_w;    /* aph tab wavelengths */
00076   float **aph_tab_s;    /* aph tab values      */
00077   int     aph_nvec;     /* number of eigenvect */
00078 
00079   char    adg_tab_file[FILENAME_MAX];
00080   int     adg_tab_nw;   /* elements in adg tab */
00081   float  *adg_tab_w;    /* adg tab wavelengths */
00082   float **adg_tab_s;    /* adg tab values      */
00083   int     adg_nvec;     /* number of eigenvect */
00084 
00085   char    bbp_tab_file[FILENAME_MAX];
00086   int     bbp_tab_nw;   /* elements in bbp tab */
00087   float  *bbp_tab_w;    /* bbp tab wavelengths */
00088   float **bbp_tab_s;    /* bbp tab values      */
00089   int     bbp_nvec;     /* number of eigenvect */
00090 
00091   double par[GIOPMAXPAR];  /* starting params      */
00092   double len[GIOPMAXPAR];  /* characteristic length*/
00093 
00094 } giopstr;
00095 
00096 void set_giop_aph_s(giopstr *g, float aph_s);
00097 void set_giop_adg_s(giopstr *g, float adg_s);
00098 void set_giop_bbp_s(giopstr *g, float bbp_s);
00099 void set_giop_aph_t(giopstr *g, float aphw[], float aphs[], int aphn);
00100 
00101 float* giop_get_chl_pointer();
00102 float* giop_get_adg_pointer();
00103 float* giop_get_aph_pointer();
00104 float* giop_get_bbp_pointer();
00105 float** giop_get_fitpar_pointer();
00106 
00107 #endif