g1blprivated.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+308
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 (9*3)   /* square gradient data size */
00019 #define SQUAREHDS (9*5*9) /* square Hessian data size */
00020 #define DEG3 (6)
00021 #define DEG2 (4)
00022 #define DEG (2)
00023 /* squares may be considered "dirty", which means that the integrals */
00024 /* related with the functional value, gradient or hessian need to be */
00025 /* recalculated; below are bit masks for denoting that */
00026 #define DIRTY_FUNC 0x01
00027 #define DIRTY_GRAD 0x02
00028 #define DIRTY_HESS 0x04
00029 
00030 #define pu    pder[0]
00031 #define pv    pder[1]
00032 #define puu   pder[2]
00033 #define puv   pder[3]
00034 #define pvv   pder[4]
00035 
00036 #define g11   Gstar[0]
00037 #define g12   Gstar[1]
00038 #define g22   Gstar[2]
00039 
00040 #define tb11  Bstar[0]
00041 #define tb12  Bstar[1]
00042 #define tb22  Bstar[2]
00043 
00044 #define dg11  Dgstar[0]
00045 #define dg12  Dgstar[1]
00046 #define dg22  Dgstar[2]
00047 
00048 #define dtb11  Dbstar[0]
00049 #define dtb12  Dbstar[1]
00050 #define dtb22  Dbstar[2]
00051 
00052 #define Ni10   Ni[0]
00053 #define Ni01   Ni[1]
00054 #define Ni20   Ni[2]
00055 #define Ni11   Ni[3]
00056 #define Ni02   Ni[4]
00057 
00058 #define Mij0102 Mij[0]
00059 #define Mij0111 Mij[1]
00060 #define Mij0120 Mij[2]
00061 #define Mij1001 Mij[3]
00062 #define Mij1002 Mij[4]
00063 #define Mij1011 Mij[5]
00064 #define Mij1020 Mij[6]
00065 
00066 #define Mij0110 -Mij1001
00067 #define Mij0210 -Mij1002
00068 #define Mij0201 -Mij0102
00069 #define Mij1110 -Mij1011
00070 #define Mij1101 -Mij0111
00071 #define Mij2010 -Mij1020
00072 #define Mij2001 -Mij0120
00073 
00074 #define MijLen 7
00075 int _g1bl_Asym3MatIndex ( int i, int j, int k, boolean *neg );
00076 int _g1bl_SetupHessian1Profile ( int lastknotu, int lastknotv, int *prof );
00077 int _g1bl_SetupClosedHessian1Profile ( int lastknotu, int lastknotv, int *prof );
00078 
00079 boolean _g1bl_TabBasisFuncd ( int nkn, double **knots, double **coeff,
00080                               double **bf, double **dbf,
00081                               double **ddbf);
00082 
00083 int _g1bl_Asym3MatIndex ( int i, int j, int k, boolean *neg );
00084 double *_g1bl_NijIndd ( int nkn, double *Nijtab,
00085                         int i0, int i1, int j0, int j1,          
00086                         int l0, int l1 );
00087 
00088 void g1bl_TabNid ( int nkn, double *bf, double *dbf, double *ddbf,
00089                    double *Nitab );
00090 void g1bl_TabNijd ( int nkn, double *bf, double *dbf, double *ddbf,
00091                     double *Nijtab );
00092                              
00093 double *_g1bl_MijIndd ( int nkn, double *Mijtab,
00094                         int i0, int i1, int j0, int j1, int l0, int l1 );
00095                         
00096 void g1bl_TabMijd ( int nkn, double *bf, double *dbf, double *ddbf,
00097                     double *Mijtab );                
00098                      
00099 void _g1bl_UCompPDerd ( int nkn, double *Nitab,
00100                         int pitch, point3d *cp,
00101                         int fcpn, int i, int j, vector3d *pder );
00102 void _g1bl_UCompGStard ( const vector3d *pder, double *Gstar );
00103 void _g1bl_UCompDGStard ( int nkn, double *Nitab,
00104                           int lastknotu, int lastknotv,
00105                           int ip0, int ip1, int jp0, int jp1,
00106                           int isq, int jsq, int i, int j,
00107                           const vector3d *pder, double *DGstar );
00108 void _g1bl_UCompDDGStard ( int nkn, double *Nijtab,
00109                            int lastknotu, int lastknotv,
00110                            int ip0, int ip1, int jp0, int jp1,
00111                            int isq, int jsq, int i, int j,
00112                            double *DDGstar );
00113 void _g1bl_UCompBStard ( const vector3d *pder, double *Bstar );
00114 void _g1bl_UCompDBStard ( int nkn, double *Nitab,
00115                           int lastknotu, int lastknotv,
00116                           int ip0, int ip1, int jp0, int jp1,
00117                           int isq, int jsq, int i, int j,
00118                           const vector3d *pder, double *DBstar );
00119 
00120 void _g1bl_UCompDDBStard ( int nkn, double *Mijtab,
00121                            int lastknotu, int lastknotv,
00122                            int ip0, int ip1, int jp0, int jp1,
00123                            int isq, int jsq, int i, int j,
00124                            const vector3d *pder, double *DDBstar );
00125                            
00126 void g1bl_UFuncSQd ( int nkn, const double *qcoeff, double *Nitab,
00127                      int lastknotu, int lastknotv,
00128                      int pitch, point3d *cp,
00129                      double tC,
00130                      int isq, int jsq,
00131                      double *ftab );
00132                      
00133 void g1bl_biharmFuncSQd(int nkn, const double *qcoeff, double *Nitab,
00134                      int lastknotu, int lastknotv,
00135                      int pitch, point3d *cp,
00136                      double tC,
00137                      int isq, int jsq,
00138                      double *ftab);
00139 
00140 void g1bl_QFuncSQd ( int nkn, const double *qcoeff, double *Nitab,
00141                      int lastknotu, int lastknotv,
00142                      int pitch, point3d *cp,
00143                      double tC,
00144                      int isq, int jsq,
00145                      double *ftab );
00146                      
00147 void g1bl_UFuncGradSQd ( int nkn, const double *qcoeff, double *Nitab,
00148                          int lastknotu, int lastknotv,
00149                          int pitch, point3d *cp,
00150                          double tC,
00151                          int isq, int jsq, int ip0, int ip1, int jp0, int jp1,
00152                          double *ftab, double *gtab );
00153 void g1bl_UFuncGradHessianSQd ( int nkn, const double *qcoeff, double *Nitab,
00154                                 double *Nijtab,double *Mijtab,
00155                                 int lastknotu, int lastknotv,
00156                                 int pitch, point3d *cp, double tC,
00157                                 int isq, int jsq, int ip0, int ip1, int jp0, int jp1,
00158                                 double *ftab, double *gtab, double *htab);
00159 
00160 boolean _g1bl_ComputeDeltaQd ( int n, const int *prof, double **hrows,
00161                                const double *grad, const double *dcoeff,
00162                                double *dq );
00163 boolean _g1bl_ShiftDecompHessiand ( int neqs, int hsize, int *prof, double *hessian,
00164                                     double *Lhessian, double **Lhrows, double nu );
00165 double _g1bl_AuxNuFuncd ( int nknots,
00166                           const double *qcoeff, double *Nitab,
00167                           int neqs, int hsize, int *prof, double *hessian,
00168                           double *Lhessian, double **Lhrows, double nu,
00169                           int lastknotu, int lastknotv, int pitch,
00170                           point3d *cp, point3d *acp,
00171                           double *grad, double *dcoeff,
00172                           double tC, double *ftab );
00173 
00174 double _g1bl_ClosedAuxNuFuncd ( int nknots,
00175                           const double *qcoeff, double *Nitab,
00176                           int neqs, int hsize, int *prof, double *hessian,
00177                           double *Lhessian, double **Lhrows, double nu,
00178                           int lastknotu, int lastknotv, int pitch,
00179                           point3d *cp, point3d *acp,
00180                           double *grad, double *dcoeff,
00181                           double tC, double *ftab );
00182 
00183 boolean _g1bl_LazyHessiand ( int lastknotu, int lastknotv,
00184                      int ni, int nsq, point3d *acp, point3d *hcp,
00185                      char *dirtypt, char *dirtysq, boolean *all );
00186 
00187 boolean _g1bl_ClosedLazyHessiand ( int lastknotu, int lastknotv,
00188                      int ni, int nsq, point3d *acp, point3d *hcp,
00189                      char *dirtypt, char *dirtysq, boolean *all );
00190