00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #define _DEBUG
00012
00013 #define MYINFINITY 1.0e+308
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 #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