g2blprivated.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, 2009, 2012                            */
00007 /* this package is distributed under the terms of the                        */
00008 /* Lesser GNU Public License, see the file COPYING.LIB                       */
00009 /* ///////////////////////////////////////////////////////////////////////// */
00010 
00011 #define _DEBUG
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 (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 #define Mij0102 Mij[0]
00083 #define Mij0103 Mij[1]
00084 #define Mij0111 Mij[2]
00085 #define Mij0112 Mij[3]
00086 #define Mij0120 Mij[4]
00087 #define Mij0121 Mij[5]
00088 #define Mij0130 Mij[6]
00089 #define Mij1001 Mij[7]
00090 #define Mij1002 Mij[8]
00091 #define Mij1003 Mij[9]
00092 #define Mij1011 Mij[10]
00093 #define Mij1012 Mij[11]
00094 #define Mij1020 Mij[12]
00095 #define Mij1021 Mij[13]
00096 #define Mij1030 Mij[14]
00097 #define Mij1102 Mij[15]
00098 #define Mij2002 Mij[16]
00099 #define Mij2011 Mij[17]
00100 #define Mij0201 -Mij0102
00101 #define Mij0301 -Mij0103
00102 #define Mij1101 -Mij0111
00103 #define Mij1201 -Mij0112
00104 #define Mij2001 -Mij0120
00105 #define Mij2101 -Mij0121
00106 #define Mij3001 -Mij0130
00107 #define Mij0110 -Mij1001
00108 #define Mij0210 -Mij1002
00109 #define Mij0310 -Mij1003
00110 #define Mij1110 -Mij1011
00111 #define Mij1210 -Mij1012
00112 #define Mij2010 -Mij1020
00113 #define Mij2110 -Mij1021
00114 #define Mij3010 -Mij1030
00115 #define Mij0211 -Mij1102
00116 #define Mij0220 -Mij2002
00117 #define Mij1120 -Mij2011
00118 
00119 int _g2bl_SetupHessian1Profile ( int lastknotu, int lastknotv, int *prof );
00120 int _g2bl_SetupClosedHessian1Profile ( int lastknotu, int lastknotv, int *prof );
00121 
00122 boolean _g2bl_TabBasisFuncd ( int nkn, double **knots, double **coeff,
00123                               double **bf, double **dbf,
00124                               double **ddbf, double **dddbf );
00125 
00126 double *_g2bl_NijIndd ( int nkn, double *Nijtab,
00127                         int i0, int i1, int j0, int j1,          
00128                         int l0, int l1 );
00129 double *_g2bl_MijIndd ( int nkn, double *Mijtab,
00130                         int i0, int i1, int j0, int j1, int l0, int l1 );
00131 
00132 void g2bl_TabNid ( int nkn, double *bf, double *dbf, double *ddbf, double *dddbf,
00133                    double *Nitab );
00134 void g2bl_TabNijd ( int nkn, double *bf, double *dbf, double *ddbf,
00135                     double *Nijtab );
00136 void g2bl_TabMijd ( int nkn, double *bf, double *dbf, double *ddbf, double *dddbf,
00137                     double *Mijtab );
00138 
00139 void _g2bl_UCompPDerd ( int nkn, double *Nitab,
00140                         int pitch, point3d *cp,
00141                         int fcpn, int i, int j, vector3d *pder );
00142 void _g2bl_UCompGStard ( const vector3d *pder, double *Gstar );
00143 void _g2bl_UCompDGStard ( int nkn, double *Nitab,
00144                           int lastknotu, int lastknotv,
00145                           int ip0, int ip1, int jp0, int jp1,
00146                           int isq, int jsq, int i, int j,
00147                           const vector3d *pder, double *DGstar );
00148 void _g2bl_UCompDDGStard ( int nkn, double *Nijtab,
00149                            int lastknotu, int lastknotv,
00150                            int ip0, int ip1, int jp0, int jp1,
00151                            int isq, int jsq, int i, int j,
00152                            double *DDGstar );
00153 void _g2bl_UCompBStard ( const vector3d *pder, double *Bstar );
00154 void _g2bl_UCompDBStard ( int nkn, double *Nitab,
00155                           int lastknotu, int lastknotv,
00156                           int ip0, int ip1, int jp0, int jp1,
00157                           int isq, int jsq, int i, int j,
00158                           const vector3d *pder, double *DBstar );
00159 void _g2bl_UCompDDBStard ( int nkn, double *Mijtab,
00160                            int lastknotu, int lastknotv,
00161                            int ip0, int ip1, int jp0, int jp1,
00162                            int isq, int jsq, int i, int j,
00163                            const vector3d *pder, double *DDBstar );
00164 
00165 void _g2bl_UFuncSQIntegrandd ( vector3d pder[11], double *first, double *second );
00166 void g2bl_UFuncSQd ( int nkn, const double *qcoeff, double *Nitab,
00167                      int lastknotu, int lastknotv,
00168                      int pitch, point3d *cp,
00169                      double tC,
00170                      int isq, int jsq,
00171                      double *ftab );
00172 void g2bl_UFuncGradSQd ( int nkn, const double *qcoeff, double *Nitab,
00173                          int lastknotu, int lastknotv,
00174                          int pitch, point3d *cp,
00175                          double tC,
00176                          int isq, int jsq, int ip0, int ip1, int jp0, int jp1,
00177                          double *ftab, double *gtab );
00178 void g2bl_UFuncGradHessianSQd ( int nkn, const double *qcoeff, double *Nitab,
00179                                 double *Nijtab, double *Mijtab,
00180                                 int lastknotu, int lastknotv,
00181                                 int pitch, point3d *cp,
00182                                 double tC,
00183                                 int isq, int jsq, int ip0, int ip1, int jp0, int jp1,
00184                                 double *ftab, double *gtab, double *htab );
00185 
00186 boolean _g2bl_ComputeDeltaQd ( int n, const int *prof, double **hrows,
00187                                const double *grad, const double *dcoeff,
00188                                double *dq );
00189 boolean _g2bl_ShiftDecompHessiand ( int neqs, int hsize, int *prof, double *hessian,
00190                                     double *Lhessian, double **Lhrows, double nu );
00191 double _g2bl_AuxNuFuncd ( int nknots,
00192                           const double *qcoeff, double *Nitab,
00193                           int neqs, int hsize, int *prof, double *hessian,
00194                           double *Lhessian, double **Lhrows, double nu,
00195                           int lastknotu, int lastknotv, int pitch,
00196                           point3d *cp, point3d *acp,
00197                           double *grad, double *dcoeff,
00198                           double tC, double *ftab );
00199 
00200 double _g2bl_ClosedAuxNuFuncd ( int nknots,
00201                           const double *qcoeff, double *Nitab,
00202                           int neqs, int hsize, int *prof, double *hessian,
00203                           double *Lhessian, double **Lhrows, double nu,
00204                           int lastknotu, int lastknotv, int pitch,
00205                           point3d *cp, point3d *acp,
00206                           double *grad, double *dcoeff,
00207                           double tC, double *ftab );
00208 
00209 boolean _g2bl_LazyHessiand ( int lastknotu, int lastknotv,
00210                      int ni, int nsq, point3d *acp, point3d *hcp,
00211                      char *dirtypt, char *dirtysq, boolean *all );
00212 
00213 boolean _g2bl_ClosedLazyHessiand ( int lastknotu, int lastknotv,
00214                      int ni, int nsq, point3d *acp, point3d *hcp,
00215                      char *dirtypt, char *dirtysq, boolean *all );
00216 
00217 boolean _g2mbl_DivideIntervald ( double *ga, double *gc, double *gd, double *gb,
00218                                  double *fa, double *fc, double *fd, double *fb );
00219