g1blprivatef.h

Go to the documentation of this file.
00001 
00002 /* ///////////////////////////////////////////////////////////////////////// */
00003 /* This file is a part of the BSTools package                                */
00004 /* written by Przemyslaw Kiciak                                              */
00005 /* ///////////////////////////////////////////////////////////////////////// */
00006 /* (C) Copyright by Przemyslaw Kiciak, 2010, 2011                            */
00007 /* this package is distributed under the terms of the                        */
00008 /* Lesser GNU Public License, see the file COPYING.LIB                       */
00009 /* ///////////////////////////////////////////////////////////////////////// */
00010 /* this file was written by Mateusz Markowski                                */
00011 /* and modified by Przemyslaw Kiciak                                         */
00012 
00013 #define MYINFINITY 1.0e+37
00014 
00015 /*#define GRDIV(a,b) ((1.0-TAU)*(a)+TAU*(b)) */
00016 #define GRDIV(a,b) (exp((1.0-TAU)*log(a)+TAU*log(b)))
00017 
00018 #define SQUAREGDS (16*3)   /* square gradient data size */
00019 #define SQUAREHDS (8*17*9) /* square Hessian data size */
00020 
00021 /* squares may be considered "dirty", which means that the integrals */
00022 /* related with the functional value, gradient or hessian need to be */
00023 /* recalculated; below are bit masks for denoting that */
00024 #define DIRTY_FUNC 0x01
00025 #define DIRTY_GRAD 0x02
00026 #define DIRTY_HESS 0x04
00027 
00028 #define pu    pder[0]
00029 #define pv    pder[1]
00030 #define puu   pder[2]
00031 #define puv   pder[3]
00032 #define pvv   pder[4]
00033 /*#define puuu  pder[5]
00034 #define puuv  pder[6] 
00035 #define puvv  pder[7] 
00036 #define pvvv  pder[8] */
00037 #define g11   Gstar[0]
00038 #define g12   Gstar[1]
00039 #define g22   Gstar[2]
00040 /*#define g11u  Gstar[3]  
00041 #define g12u  Gstar[4]
00042 #define g22u  Gstar[5]
00043 #define g11v  Gstar[6]
00044 #define g12v  Gstar[7]  
00045 #define g22v  Gstar[8]*/
00046 #define tb11  Bstar[0]
00047 #define tb12  Bstar[1]
00048 #define tb22  Bstar[2]
00049 /*#define tb11u Bstar[3]
00050 #define tb12u Bstar[4]
00051 #define tb22u Bstar[5]
00052 #define tb11v Bstar[6]
00053 #define tb12v Bstar[7]
00054 #define tb22v Bstar[8]*/
00055 #define dg11  Dgstar[0]
00056 #define dg12  Dgstar[1]
00057 #define dg22  Dgstar[2]
00058 /*#define dg11u Dgstar[3]
00059 #define dg12u Dgstar[4]
00060 #define dg22u Dgstar[5]
00061 #define dg11v Dgstar[6]
00062 #define dg12v Dgstar[7]
00063 #define dg22v Dgstar[8]*/
00064 #define dtb11  Dbstar[0]
00065 #define dtb12  Dbstar[1]
00066 #define dtb22  Dbstar[2]
00067 /*#define dtb11u Dbstar[3]
00068 #define dtb12u Dbstar[4]
00069 #define dtb22u Dbstar[5]
00070 #define dtb11v Dbstar[6]
00071 #define dtb12v Dbstar[7]
00072 #define dtb22v Dbstar[8]*/
00073 #define Ni10   Ni[0]
00074 #define Ni01   Ni[1]
00075 #define Ni20   Ni[2]
00076 #define Ni11   Ni[3]
00077 #define Ni02   Ni[4]
00078 /*#define Ni30   Ni[5]
00079 #define Ni21   Ni[6]
00080 #define Ni12   Ni[7]
00081 #define Ni03   Ni[8]*/
00082 
00083 int _g2bl_Asym3MatIndex ( int i, int j, int k, boolean *neg );
00084 int _g2bl_SetupHessian1Profile ( int lastknotu, int lastknotv, int *prof );
00085 
00086 boolean _g2bl_TabBasisFuncf ( int nkn, float **knots, float **coeff,
00087                               float **bf, float **dbf,
00088                               float **ddbf, float **dddbf );
00089 
00090 int _g2bl_Asym3MatIndex ( int i, int j, int k, boolean *neg );
00091 float *_g2bl_NijIndf ( int nkn, float *Nijtab,
00092                         int i0, int i1, int j0, int j1,          
00093                         int l0, int l1 );
00094 float *_g2bl_NijkIndf ( int nkn, float *Nijktab,
00095                          int i0, int i1, int j0, int j1, int k0, int k1,
00096                          int l0, int l1, boolean *neg );
00097 
00098 void g2bl_TabNif ( int nkn, float *bf, float *dbf, float *ddbf, float *dddbf,
00099                    float *Nitab );
00100 void g2bl_TabNijf ( int nkn, float *bf, float *dbf, float *ddbf,
00101                     float *Nijtab );
00102 void g2bl_TabNijkf ( int nkn, float *bf, float *dbf, float *ddbf, float *dddbf,
00103                      float *Nijktab );
00104 
00105 void _g2bl_UCompPDerf ( int nkn, float *Nitab,
00106                         int pitch, point3f *cp,
00107                         int fcpn, int i, int j, vector3f *pder );
00108 void _g2bl_UCompGStarf ( const vector3f *pder, float *Gstar );
00109 void _g2bl_UCompDGStarf ( int nkn, float *Nitab,
00110                           int lastknotu, int lastknotv,                
00111                           int isq, int jsq, int i, int j,       
00112                           const vector3f *pder, float *DGstar );
00113 void _g2bl_UCompDDGStarf ( int nkn, float *Nijtab,
00114                            int lastknotu, int lastknotv,
00115                            int isq, int jsq, int i, int j,
00116                            float *DDGstar );
00117 void _g2bl_UCompBStarf ( const vector3f *pder, float *Bstar );
00118 void _g2bl_UCompDBStarf ( int nkn, float *Nitab,
00119                           int lastknotu, int lastknotv,
00120                           int isq, int jsq, int i, int j,
00121                           const vector3f *pder, float *DBstar );
00122 void _g2bl_CompDDBStarf ( int nkn, float *Nijktab,
00123                           int lastknotu, int lastknotv,
00124                           int isq, int jsq, int i, int j,
00125                           int pitch, const point3f *cp,
00126                           float *DDBstar );
00127 
00128 void g2bl_UFuncSQf ( int nkn, const float *qcoeff, float *Nitab,
00129                      int lastknotu, int lastknotv,
00130                      int pitch, point3f *cp,
00131                      float tC,
00132                      int isq, int jsq,
00133                      float *ftab );
00134 void g2bl_UFuncGradSQf ( int nkn, const float *qcoeff, float *Nitab,
00135                          int lastknotu, int lastknotv,
00136                          int pitch, point3f *cp,
00137                          float tC,
00138                          int isq, int jsq,
00139                          float *ftab, float *gtab );
00140 void g2bl_UFuncGradHessianSQf ( int nkn, const float *qcoeff, float *Nitab,
00141                                 float *Nijtab, float *Nijktab,
00142                                 int lastknotu, int lastknotv,
00143                                 int pitch, point3f *cp,
00144                                 float tC,
00145                                 int isq, int jsq,
00146                                 float *ftab, float *gtab, float *htab );
00147 
00148 boolean _g2bl_ComputeDeltaQf ( int n, const int *prof, float **hrows,
00149                                const float *grad, const float *dcoeff,
00150                                float *dq );
00151 boolean _g2bl_ShiftDecompHessianf ( int neqs, int hsize, int *prof, float *hessian,
00152                                     float *Lhessian, float **Lhrows, float nu );
00153 float _g2bl_AuxNuFuncf ( int nknots,
00154                           const float *qcoeff, float *Nitab,
00155                           int neqs, int hsize, int *prof, float *hessian,
00156                           float *Lhessian, float **Lhrows, float nu,
00157                           int lastknotu, int lastknotv, int pitch,
00158                           point3f *cp, point3f *acp,
00159                           float *grad, float *dcoeff,
00160                           float tC, float *ftab );
00161 
00162 boolean _g1bl_LazyHessianf ( int lastknotu, int lastknotv,
00163                      int ni, int nsq, point3f *acp, point3f *hcp,
00164                      char *dirtypt, char *dirtysq, boolean *all );
00165