00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
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 (9*3)
00019 #define SQUAREHDS (9*5*9)
00020 #define DEG3 (6)
00021 #define DEG2 (4)
00022 #define DEG (2)
00023
00024
00025
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