00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #define MYINFINITY 1.0e+37
00014
00015
00016 #define GRDIV(a,b) (exp((1.0-TAU)*log(a)+TAU*log(b)))
00017
00018 #define SQUAREGDS (16*3)
00019 #define SQUAREHDS (8*17*9)
00020
00021
00022
00023
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
00034
00035
00036
00037 #define g11 Gstar[0]
00038 #define g12 Gstar[1]
00039 #define g22 Gstar[2]
00040
00041
00042
00043
00044
00045
00046 #define tb11 Bstar[0]
00047 #define tb12 Bstar[1]
00048 #define tb22 Bstar[2]
00049
00050
00051
00052
00053
00054
00055 #define dg11 Dgstar[0]
00056 #define dg12 Dgstar[1]
00057 #define dg22 Dgstar[2]
00058
00059
00060
00061
00062
00063
00064 #define dtb11 Dbstar[0]
00065 #define dtb12 Dbstar[1]
00066 #define dtb22 Dbstar[2]
00067
00068
00069
00070
00071
00072
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
00079
00080
00081
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