eg1hprivatef.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, 2005, 2008                            */
00007 /* this package is distributed under the terms of the                        */
00008 /* Lesser GNU Public License, see the file COPYING.LIB                       */
00009 /* ///////////////////////////////////////////////////////////////////////// */
00010 
00011 /* this header file is private for g1hole library functions; */
00012 /* it is NOT intended to be #included in application source files */
00013 
00014 #ifndef EG1HPRIVATEF_H
00015 #define EG1HPRIVATEF_H
00016 
00017 #ifndef EGHPRIVATEF_H
00018 #include "eghprivatef.h"
00019 #endif
00020 
00021 /* degrees of polynomial junction functions */
00022 #define G1_BF01DEG 2
00023 #define G1_CG01DEG 1
00024 #define G1_BF11DEG 3
00025 #define G1_CG11DEG 2
00026 
00027 /* degrees of patch cross derivatives */
00028 #define G1_CROSS00DEG 4
00029 #define G1_CROSS01DEG 5
00030 #define G1_CROSS10DEG 3
00031 #define G1_CROSS11DEG 5
00032 
00033 /* degree of the final patches - the greatest of the above four */
00034 /* #define G1H_FINALDEG  5 - this is #defined in g1holef.h */
00035 
00036 #define G1_CROSSDEGSUM \
00037         (G1_CROSS00DEG+G1_CROSS01DEG+G1_CROSS10DEG+G1_CROSS11DEG)
00038 
00039 /* the following number is relevant for spline bases */
00040 #define G1_AUXDEG0 (G1_CROSS01DEG-G1H_OMCDEG+1)
00041 
00042 /* angle tolerances for partition analysis */
00043 #define MIN_DELTA (PI/180.0)       /*   1 degree  */
00044 #define MAX_DELTA (179.0*PI/180.0) /* 179 degrees */
00045 #define ANGLETOL (0.001*PI/180)    /* 0.001 degree */
00046 
00047 /* the #definitions below are for the construction with */
00048 /* the extended basis */
00049 #define G1_DBDIM 4    /* diagonal block dimension, 2*2 */
00050 #define G1_DIAGBLSIZE (G1_DBDIM*(G1_DBDIM+1)/2)
00051 
00052 
00053 /* number of quadrature knots */
00054 #define G1_NQUAD 16
00055 #define G1_NQUADSQ (G1_NQUAD*G1_NQUAD)
00056 #define G1_QUAD_FACTOR 10  /* for integration of spline basis functions */
00057 
00058 
00059 /* ////////////////////////////////////////////////////////////////////////// */
00060 /* private data of the construction procedures */
00061 typedef struct G1HolePrivateRecf {
00062     int      hole_m;
00063     int      nfunc_a,   /* number of "inner" basis functions */
00064              nfunc_b;   /* number of "outer" basis functions */
00065     char     opt_cp, opt_der1, opt_basis, opt_quad;  /* recorded options */
00066     vector2f *omcbc;    /* boundary conditions for auxiliary patches */
00067     vector2f *omc;      /* auxiliary patches representation */
00068     float    *jfunc;    /* coefficients of junction functions */
00069     vector2f *dicross;  /* curves describing cross derivatives */
00070                         /* of the domain patches */
00071     float    *AuxiMat;  /* matrices of transformations of derivatives */
00072                         /* for composing functions with domain patches */
00073     float    *basis_a,  /* Coons representations of "inner" basis functions */
00074              *basis_b;  /* Coons represetnationf of "outer" basis functions */
00075     unsigned char spdimen[2];   /* numbers of "inner" basis functions: */
00076                                 /* "half polynomial" and "splines" of degree 2 */
00077     float    *partition;        /* partition of the full angle */
00078     GHoleSgnPartf *spartition;  /* sorted partition, having hole_k-hole_m */
00079                                 /* elements */
00080     float    spart_alpha0;      /* sorted partition bisectrix */
00081     float    *Amat, *Bmat;      /* matrices of scalar products */
00082                                 /* of basis functions */
00083     float    *Lmat;             /* decomposition factor L:  A=LL^T */
00084     float    *EAmat, *EBmat;    /* matrices for the extended basis */
00085     float    *ELmat;            /* decomposition factor for the */
00086                                 /* extended matrix */
00087 
00088     int      nconstr;           /* number of constraint equations */
00089     float    *Cmat, *RCmat;     /* matrices of constraint equations */
00090     int      naconstr, acdim;
00091     float    *ACmat, *ARCmat;
00092     int      extnconstr;        /* number of constraints and */
00093     float    *ECmat, *ERCmat;   /* matrices of constraint equations for */
00094                                 /* the extended matrix */
00095     int      extnaconstr, extacdim;
00096     float    *AECmat, *AERCmat;
00097 
00098     float    *BBmat;            /* matrix of scalar products, for */
00099                                 /* evaluation of the functional */
00100 
00101                               /* private data for the quasi G2 constructions */
00102     float     C1b;                 /* constant in the definition of the form */
00103     float     *Q2AMat, *Q2BMat;    /* form matrices */
00104     float     *Q2LMat;
00105     float     *Q2RCMat, *Q2ARCMat; /* constraints */
00106 
00107     float     C1e;                 /* constant in the definition of the form */
00108     float     *Q2EAMat, *Q2EBMat;  /* form matrices for the extended basis */
00109     float     *Q2ELMat;
00110     float     *Q2ERCMat, *Q2AERCMat; /* constraints */
00111     int (*GetOption)( GHoleDomainf *domain, int query, int qn,
00112                       int *ndata, int **idata, float **fdata );
00113   } G1HolePrivateRecf;
00114 
00115 
00116 /* private data for the spline basis construction */
00117 typedef struct G1HoleSPrivateRecf {
00118     int   nk, m1, m2;   /* parameters, which determine the space dimension */
00119     int   nsfunc_c, nsfunc_d;
00120                       /* numbers of basis functions of various kinds */
00121     int   csize, dsize; /* sizes of the blocks in the form matrix */
00122     int   lastbezknot;
00123     float bezknots[2*(G1H_FINALDEG+1)];  /* knots for Bezier polynomials */
00124     int   lastomcknot;
00125     float *omcknots;  /* knots of basis function auxiliary patches */
00126     int   lastpvknot;
00127     float *pvknots;
00128                       /* knots of the basis functions of the D block */
00129     int   lastcknot;
00130     float *cknots;    /* knots of the basis functions of the C block */
00131     float *basis_d;   /* Coons representations of basis functions */   
00132 
00133     int   lastfpknot;
00134     float *fpknots;   /* knots of the final patches */
00135     float *SAMat, *SBMat;  /* form matrices for the spline basis */
00136     float *SLMat;          /* A=LL^T decomposition factor */
00137 
00138     int    splnconstr; /* number of constraints */
00139     float  *SCmat, *SRCmat; /* matrices of constraint equations */
00140     int    splnaconstr, splacdim;
00141     float  *ASCmat, *ASRCmat;
00142 
00143 /* private data for the quasi G2 constructions */
00144     float C1s;                 /* constant in the definition of the form */
00145     float *Q2SAMat, *Q2SBMat;  /* form matrices for the spline basis */
00146     float *Q2SLMat;
00147 
00148     float  *Q2SRCmat; /* matrices of constraint equations */
00149     float  *Q2SARCmat;
00150   } G1HoleSPrivateRecf;
00151 
00152 
00153 /* private data for the nonlinear constructions */
00154 typedef struct G1HNLPrivatef {
00155     int      auxc;    /* patch counter */
00156     vector3f *nldi;   /* NL patches */
00157     vector3f *acoeff;
00158     vector3f *rhole_cp;
00159     vector3f nlnv, reflv;
00160     vector2f *diu, *div, *diuu, *diuv, *divv;
00161     float    ddiam;   /* NL domain diameter */
00162     float    *jac;
00163     float    *psiu, *psiv, *psiuu, *psiuv, *psivv;
00164                    /* the following data are used only for Q2 */
00165     vector2f *diuuu, *diuuv, *diuvv, *divvv;
00166     float    *psiuuu, *psiuuv, *psiuvv, *psivvv;
00167     vector2f *ctang;
00168     float    *cpsiu, *cpsiv, *cpsiuu, *cpsiuv, *cpsivv;
00169   } G1HNLPrivatef;  
00170 
00171 
00172 typedef struct G1Q2HNLFuncf {
00173     float    pu, pv, jpuu, jpuv, jpvv;
00174     vector2f tang;
00175     float    psiu, psiv, jpsiuu, jpsiuv, jpsivv;
00176     float    psju, psjv, jpsjuu, jpsjuv, jpsjvv;
00177     float    A, B, e0, e1, e2, e9, tGt, b1, b2, b3, b4, b5;
00178   } G1Q2HNLFuncf;
00179 
00180 
00181 /* private data for spline nonlinear constructions */
00182 typedef struct G1HNLSPrivatef {
00183     G1HNLPrivatef nlpr; /* must be the first field */
00184     int     nkn;          /* number of quadrature knots */
00185     float   *tkn;         /* quadrature knots */
00186     int     ftabsize;     /* function values table size */
00187     int     psize;        /* number of control points of each final patch  */
00188     int     *fkn, *lkn;   /* ranges of knots for the functions of block C  */
00189     float   *cb, *cbt, *cbtt, *cbttt; /* B-spline functions and their derivatives */
00190     int     *cfuncvi;     /* indexes of the first samples of C block functions */
00191     int     *dfuncvi;     /* indexes of the first samples of D block functions */
00192     int     jtabsize;     /* jump values table size */
00193     int     jcfs, jdfs;   /* indexes of the first samples of jump */
00194                           /* for block C and block D functions */
00195     short   njcurves;
00196     boolean jumpC, jumpD;
00197   } G1HNLSPrivatef;
00198 
00199 
00200 /* ////////////////////////////////////////////////////////////////////////// */
00201 extern G1HNLPrivatef *_g1h_nlprivf;
00202 
00203 /* ////////////////////////////////////////////////////////////////////////// */
00204 void _g1h_GetDiPatchCurvesf ( GHoleDomainf *domain, int i,
00205                 point2f **c00, vector2f **c01, point2f **c10, vector2f **c11,
00206                 point2f **d00, vector2f **d01, point2f **d10, vector2f **d11 );
00207 boolean _g1h_GetABasisAuxpf ( GHoleDomainf *domain, int fn,
00208                               float *br0, float *br0cr1 );
00209 boolean _g1h_GetBBasisAuxpf ( GHoleDomainf *domain, int fn,
00210                               float *bezfc, float *fcomc, float *fcomcd );
00211 void _g1h_GetBFAPatchCurvesf ( GHoleDomainf *domain, int fn, int i,
00212                     float **c00, float **c01,
00213                     float **d00, float **d01 );
00214 void _g1h_GetBFBPatchCurvesf ( GHoleDomainf *domain, int fn, int i,
00215                     float **c00, float **c01, float **c10, float **c11,
00216                     float **d00, float **d01, float **d10, float **d11 );
00217 
00218 void g1h_TabCubicHFuncDer2f ( int nkn, const float *kn,
00219                               float *hfunc, float *dhfunc, float *ddhfunc );
00220 boolean g1h_TabBicubicCoonsPatchDer2f (
00221       int spdimen, int nkn, const float *kn, const float *hfunc,
00222       const float *dhfunc, const float *ddhfunc,
00223       int degc00, const float *c00,
00224       int degc01, const float *c01,
00225       int degc10, const float *c10,
00226       int degc11, const float *c11,
00227       int degd00, const float *d00,
00228       int degd01, const float *d01,
00229       int degd10, const float *d10,
00230       int degd11, const float *d11,
00231       float *p, float *pu, float *pv, float *puu, float *puv, float *pvv );
00232 void _g1h_DiJacobian2f ( const vector2f *du, const vector2f *dv,
00233                          const vector2f *duu, const vector2f *duv,
00234                          const vector2f *dvv,
00235                          float *jac, float *trd );
00236 boolean _g1h_TabDiPatchJac2f ( int nkn, const float *kn, const float *hfunc,
00237                                const float *dhfunc, const float *ddhfunc,
00238                                const vector2f *c00, const vector2f *c01,
00239                                const vector2f *c10, const vector2f *c11,
00240                                const vector2f *d00, const vector2f *d01,
00241                                const vector2f *d10, const vector2f *d11,
00242                                float *jac, float *trd );
00243 boolean _g1h_TabLaplacianf ( int nkn, const float *tkn,
00244         const float *hfunc, const float *dhfunc, const float *ddhfunc,
00245         const float *fc00, const float *fc01,
00246         const float *fc10, const float *fc11,
00247         const float *fd00, const float *fd01,
00248         const float *fd10, const float *fd11,
00249         const float *trd,
00250         float *lap );
00251 boolean _g1h_TabLaplacian0f ( int nkn, const float *tkn,
00252         const float *hfunc, const float *dhfunc, const float *ddhfunc,
00253         const float *fc00, const float *fc01,
00254         const float *fd00, const float *fd01,
00255         const float *trd,
00256         float *lapgrad );
00257 float _g1h_Integralf ( int hole_k, int nknsq, float *jac,
00258                        unsigned short supp1, float *func1,
00259                        unsigned short supp2, float *func2 );
00260 
00261 boolean _g1h_VerifyJunctionFunctionsf ( GHoleDomainf *domain );
00262 boolean _g1h_VerifyDomPatchesf ( GHoleDomainf *domain );
00263                                                     
00264 /* ////////////////////////////////////////////////////////////////////////// */
00265 void g1h_ReflectVectorsf ( int n, const vector3f *v, vector3f *w );
00266 void g1h_nonlinoutpatchf ( int n, int m, const float *cp, void *usrptr );
00267 boolean _g1h_StopItf ( int itn, float gn0, float gn,
00268                        float cn, float dcn, float scf );
00269 boolean g1h_GetHoleSurrndPatchf ( GHoleDomainf *domain,
00270                                   const point3f *hole_cp,
00271                                   int i, int j, point3f *bcp );
00272 boolean _g1h_ComputeNLNormalf ( GHoleDomainf *domain,
00273                                 G1HNLPrivatef *nlprivate,
00274                                 const point3f *hole_cp );
00275 boolean _g1h_TabNLDer0f ( int nkn, const float *tkn,
00276              const float *hfunc, const float *dhfunc, const float *ddhfunc,
00277              vector2f *diu, vector2f *div,
00278              vector2f *diuu, vector2f *diuv, vector2f *divv,
00279              float *fc00, float *fc01, float *fd00, float *fd01,
00280              float *psiu, float *psiv,
00281              float *psiuu, float *psiuv, float *psivv );
00282 boolean _g1h_TabNLDerf ( int nkn, float *tkn,
00283              const float *hfunc, const float *dhfunc, const float *ddhfunc,
00284              vector2f *diu, vector2f *div,
00285              vector2f *diuu, vector2f *diuv, vector2f *divv,
00286              float *fc00, float *fc01, float *fc10, float *fc11,
00287              float *fd00, float *fd01, float *fd10, float *fd11,
00288              float *psiu, float *psiv,
00289              float *psiuu, float *psiuv, float *psivv );
00290 boolean _g1h_TabNLBasisFunctionsf ( GHoleDomainf *domain, int nkn,
00291                                     G1HNLPrivatef *nlpr );
00292 boolean _g1h_ReflectSplAltConstrMatrixf ( GHoleDomainf *domain,
00293                                           vector3f *reflv, float *RACmat );
00294 void _g1h_IntFunc1f ( float pu, float pv,
00295                       float puu, float puv, float pvv, float jac,
00296                       float *c, float *cs, float *a, float *b,   
00297                       float *funct );
00298 void _g1h_IntFunc2f ( float pu, float pv,
00299                       float puu, float puv, float pvv,
00300                       float psiu, float psiv,
00301                       float psiuu, float psiuv, float psivv,
00302                       float jac, float c, float A, float B, 
00303                       float *ai, float *bi, float *grad );
00304 void _g1h_IntFunc3f ( float pu, float pv,       
00305                       float puu, float puv, float pvv,       
00306                       float psiu, float psiv,       
00307                       float psiuu, float psiuv, float psivv,       
00308                       float psju, float psjv,       
00309                       float psjuu, float psjuv, float psjvv,       
00310                       float jac, float c,       
00311                       float A, float B, float Ai, float Bi,       
00312                       float Aj, float Bj,       
00313                       float *hessian );
00314  
00315 /* ////////////////////////////////////////////////////////////////////////// */
00316 boolean _g1hq2_TabNLDer0f ( int nkn, const float *tkn,
00317              const float *hfunc, const float *dhfunc, const float *ddhfunc,
00318              const float *dddhfunc,
00319              vector2f *diu, vector2f *div,
00320              vector2f *diuu, vector2f *diuv, vector2f *divv,
00321              vector2f *diuuu, vector2f *diuuv, vector2f *diuvv, vector2f *divvv,
00322              float *fc00, float *fc01, float *fd00, float *fd01,
00323              float *psiu, float *psiv,
00324              float *psiuu, float *psiuv, float *psivv,
00325              float *psiuuu, float *psiuuv, float *psiuvv, float *psivvv );
00326 
00327 boolean _g1hq2_TabNLDerf ( int nkn, float *tkn,
00328              const float *hfunc, const float *dhfunc, const float *ddhfunc,
00329              const float *dddhfunc,
00330              vector2f *diu, vector2f *div,
00331              vector2f *diuu, vector2f *diuv, vector2f *divv,
00332              vector2f *diuuu, vector2f *diuuv, vector2f *diuvv, vector2f *divvv,
00333              float *fc00, float *fc01, float *fc10, float *fc11,
00334              float *fd00, float *fd01, float *fd10, float *fd11,
00335              float *psiu, float *psiv,
00336              float *psiuu, float *psiuv, float *psivv,
00337              float *psiuuu, float *psiuuv, float *psiuvv, float *psivvv );
00338 
00339 boolean _g1hq2_TabNLBasisFunctionsOmegaf ( GHoleDomainf *domain, int nkn,
00340                                            G1HNLPrivatef *nlpr, float *bc00 );
00341 boolean _g1hq2_TabNLBasisFunctionsGammaf ( GHoleDomainf *domain, int nkn,
00342                                            G1HNLPrivatef *nlpr, float *ctrd,
00343                                            float *bc00 );
00344 void _g1hq2_IntFunc1af ( G1Q2HNLFuncf *f, float *funct );
00345 void _g1hq2_IntFunc1bf ( G1Q2HNLFuncf *f, float *funct );
00346 void _g1hq2_IntFunc1cf ( G1Q2HNLFuncf *f, float *funct );
00347 void _g1hq2_IntFunc2bf ( G1Q2HNLFuncf *f, float *grad );
00348 void _g1hq2_IntFunc2cf ( G1Q2HNLFuncf *f, float *Ai, float *Bi, float *grad );
00349 void _g1hq2_IntFunc3cf ( G1Q2HNLFuncf *f, float Ai, float Bi, float Aj, float Bj,
00350                          float *hessian );
00351 
00352 boolean _g1h_ReflectAltConstrMatrixf ( GHoleDomainf *domain,
00353                                        vector3f *reflv, float *RACmat );
00354 boolean _g1h_ReflectExtAltConstrMatrixf ( GHoleDomainf *domain,
00355                                           vector3f *reflv, float *RACmat );
00356 
00357 /* ////////////////////////////////////////////////////////////////////////// */
00358 /* the following horrible macros are used a number of times in the code. */
00359 /* They assume that some variables are declared and have proper initial */
00360 /* values */
00361 #define G1GetPolyAddr(jfunc,b01,c01,f01,g01,b11,c11,f11,g11)\
00362   b01 = jfunc; \
00363   c01 = &b01[hole_k*(G1_BF01DEG+1)];  f01 = &c01[hole_k*(G1_CG01DEG+1)]; \
00364   g01 = &f01[hole_k*(G1_BF01DEG+1)];  b11 = &g01[hole_k*(G1_CG01DEG+1)]; \
00365   c11 = &b11[hole_k*(G1_BF11DEG+1)];  f11 = &c11[hole_k*(G1_CG11DEG+1)]; \
00366   g11 = &f11[hole_k*(G1_BF11DEG+1)]
00367 
00368 #define G1GetPolyAddr0(jfunc,b01,c01,f01,g01)\
00369   b01 = jfunc; \
00370   c01 = &b01[hole_k*(G1_BF01DEG+1)];  f01 = &c01[hole_k*(G1_CG01DEG+1)]; \
00371   g01 = &f01[hole_k*(G1_BF01DEG+1)]
00372 
00373 #define G1GetDiCrossAddresses() \
00374   dir0cr1 = privateG1->dicross; \
00375   diq0cr1 = &dir0cr1[hole_k*(G1_CROSS01DEG+1)]; \
00376   dir1cr1 = &diq0cr1[hole_k*(G1_CROSS01DEG+1)]; \
00377   diq1cr1 = &dir1cr1[hole_k*(G1_CROSS11DEG+1)]
00378 
00379 #define G1GetBFuncACrossAddresses() \
00380   bbr0 = privateG1->basis_a; \
00381   bbr0cr1 = &bbr0[nfunc_a*hole_k*(G1_CROSS00DEG+1)]; \
00382   bbq0cr1 = &bbr0cr1[nfunc_a*hole_k*(G1_CROSS01DEG+1)]
00383 
00384 #define G1GetBFuncBCrossAddresses() \
00385   bbr0 = privateG1->basis_b; \
00386   bbr1 = &bbr0[nfunc_b*hole_k*(G1_CROSS00DEG+1)]; \
00387   bbq1 = &bbr1[nfunc_b*hole_k*(G1_CROSS10DEG+1)]; \
00388   bbr0cr1 = &bbq1[nfunc_b*hole_k*(G1_CROSS10DEG+1)]; \
00389   bbq0cr1 = &bbr0cr1[nfunc_b*hole_k*(G1_CROSS01DEG+1)]; \
00390   bbr1cr1 = &bbq0cr1[nfunc_b*hole_k*(G1_CROSS01DEG+1)]; \
00391   bbq1cr1 = &bbr1cr1[nfunc_b*hole_k*(G1_CROSS11DEG+1)]
00392 
00393 #define G1GetFCAddresses() \
00394   fc01 = &fc00[hole_k*spdimen*(G1_CROSS00DEG+1)]; \
00395   fc10 = &fc01[hole_k*spdimen*(G1_CROSS01DEG+1)]; \
00396   fc11 = &fc10[hole_k*spdimen*(G1_CROSS10DEG+1)]; \
00397   fd00 = &fc11[hole_k*spdimen*(G1_CROSS11DEG+1)]; \
00398   fd01 = &fd00[hole_k*spdimen*(G1_CROSS00DEG+1)]; \
00399   fd10 = &fd01[hole_k*spdimen*(G1_CROSS01DEG+1)]; \
00400   fd11 = &fd10[hole_k*spdimen*(G1_CROSS10DEG+1)]
00401 
00402 /* ///////////////////////////////////////////////////////////////////////// */
00403 #define G1GetSFCAddresses() \
00404   sfc01 = &sfc00[hole_k*spdimen*(lastomcknot-G1_CROSS00DEG)]; \
00405   sfd00 = &sfc01[hole_k*spdimen*(lastpvknot-G1_CROSS01DEG)]; \
00406   sfd01 = &sfd00[hole_k*spdimen*(lastomcknot-G1_CROSS00DEG)]
00407 
00408 /* ///////////////////////////////////////////////////////////////////////// */
00409 boolean _g1h_GetExtBlockAddressesf ( GHoleDomainf *domain,
00410                                      float **Aii, float **Aki, float **Akk,
00411                                      float **Bi, float **Bk, float **Lii );
00412 
00413 boolean _g1h_SetRightSidef ( GHoleDomainf *domain, const float *Bmat,
00414                              int spdimen, CONST_ float *hole_cp,
00415                              float *fc00, float *b );
00416 boolean _g1h_OutputPatchesf ( GHoleDomainf *domain, int spdimen,
00417                        CONST_ float *x, float *fc00, void *usrptr,
00418                        void (*outpatch) ( int n, int m, const float *cp,
00419                                           void *usrptr ) );
00420 
00421 boolean _g1h_SetExtRightSidef ( GHoleDomainf *domain,
00422                                 const float *Bi, const float *Bk,
00423                                 int spdimen, CONST_ float *hole_cp,
00424                                 float *fc00, float *b );
00425 boolean _g1h_OutputExtPatchesf ( GHoleDomainf *domain, int spdimen,
00426                            CONST_ float *x, float *fc00, void *usrptr,
00427                            void (*outpatch) ( int n, int m, const float *cp,
00428                                               void *usrptr ) );
00429 
00430 boolean _g1h_TabTensBezPolyDer2f ( int nkn, const float *tkn,       
00431                      float *tbez, float *tbezu, float *tbezv,
00432                      float *tbezuu, float *tbezuv, float *tbezvv );
00433 
00434 void _g1h_TensDer2f ( float p, float pu, float puu,
00435                       float q, float qv, float qvv,
00436                       float *pq );
00437 
00438 /* ///////////////////////////////////////////////////////////////////////// */
00439 void g1h_DestroySPrivateDataf ( GHoleDomainf *domain );
00440 boolean _g1h_GetSplDBasisAuxpf ( GHoleDomainf *domain, int fn, int cn,
00441                                  int *nzc, float *fcomc, float *fcomcd );
00442 boolean _g1h_GetSplDBasisCrossDerf ( GHoleDomainf *domain, int fn, int cn,
00443                                      float *fcomc, float *pv, float *pu );
00444 
00445 boolean _g1h_TabBSFuncDer2f ( int deg, int lastknot, const float *knots,
00446                               int i0, int i1,
00447                               int n, const float *tkn, int *fkn, int *lkn,
00448                               float *b, float *bt, float *btt );
00449 
00450 boolean _g1h_SetSplRightSidef ( GHoleDomainf *domain,
00451                                 int spdimen, CONST_ float *hole_cp,
00452                                 const float *bmat,
00453                                 float *fc00, float *b );
00454 boolean _g1h_OutputSplPatchesf ( GHoleDomainf *domain,
00455                 int spdimen, CONST_ float *x, float *fc00, void *usrptr,
00456                 void (*outpatch) ( int n, int lknu, const float *knu,
00457                                    int m, int lknv, const float *knv,
00458                                    const float *cp, void *usrptr ) );
00459 
00460 /* ///////////////////////////////////////////////////////////////////////// */
00461 boolean _g1h_Q2TabDiPatchJac3f ( int nkn, const float *kn, const float *hfunc,
00462              const float *dhfunc, const float *ddhfunc, const float *dddhfunc,
00463              const vector2f *c00, const vector2f *c01,
00464              const vector2f *c10, const vector2f *c11,
00465              const vector2f *d00, const vector2f *d01,
00466              const vector2f *d10, const vector2f *d11,
00467              float *jac, float *trd );
00468 boolean _g1h_Q2TabLaplacianGradf ( int nkn, const float *tkn,
00469         const float *hfunc, const float *dhfunc, const float *ddhfunc,
00470         const float *dddhfunc,
00471         const float *fc00, const float *fc01,
00472         const float *fc10, const float *fc11,
00473         const float *fd00, const float *fd01,
00474         const float *fd10, const float *fd11,
00475         const float *trd,
00476         vector2f *lapgrad );
00477 boolean _g1h_Q2TabLaplacianGrad0f ( int nkn, const float *tkn,
00478         const float *hfunc, const float *dhfunc, const float *ddhfunc,
00479         const float *dddhfunc,
00480         const float *fc00, const float *fc01,
00481         const float *fd00, const float *fd01,
00482         const float *trd,
00483         vector2f *lapgrad );
00484 void _g1h_TabCurveJacobianf ( int deg, const point2f *cp,
00485                               int nkn, const float *kn, float *jac );
00486 void _g1h_LapCoefff ( const vector2f *du, const vector2f *dv,
00487                       const vector2f *duu, const vector2f *duv,
00488                       const vector2f *dvv, float *trd );
00489 boolean _g1h_TabCurveLapCoeff0f ( const point2f *c00, const vector2f *c01,
00490                                   const point2f *c10, const vector2f *c11,
00491                                   const point2f *d00, const vector2f *d01,
00492                                   const point2f *d10, const vector2f *d11,
00493                                   int nkn, const float *tkn, const float *hfunc,
00494                                   const float *dhfunc, const float *ddhfunc,
00495                                   const float *atkn, const float *ahfunc,
00496                                   const float *adhfunc, const float *addhfunc,
00497                                   float *trdc00, float *trdc10,
00498                                   float *trdd00, float *trdd10 );
00499 void _g1h_TabCurveLapCoeff1f ( const point2f *sicp, int nkn,
00500                                const float *tkn, float *trd );
00501 boolean _g1h_TabTensBezPolyDer3f ( int nkn, const float *tkn,
00502              float *tbez, float *tbezu, float *tbezv,
00503              float *tbezuu, float *tbezuv, float *tbezvv,
00504              float *tbezuuu, float *tbezuuv, float *tbezuvv, float *tbezvvv );
00505 boolean _g1h_Q2TabLaplacianJump0f ( int nkn, const float *tkn,
00506               const float *hfunc, const float *dhfunc, const float *ddhfunc,
00507               const float *atkn, const float *ahfunc, const float *adhfunc,
00508               const float *addhfunc,
00509               const float *ec00, const float *ec01,
00510               const float *ed00, const float *ed01, const float *etrdd00,
00511               const float *fc00, const float *fc01,
00512               const float *fd00, const float *fd01,
00513               const float *ftrdc00, const float *ftrdc10, const float *ftrdd10,
00514               float *lapjc00, float *lapjc10, float *lapjd10 );
00515 boolean _g1h_Q2TabLaplacianJumpf ( int nkn, const float *tkn,
00516               const float *hfunc, const float *dhfunc, const float *ddhfunc,
00517               const float *atkn, const float *ahfunc, const float *adhfunc,
00518               const float *addhfunc,
00519               const float *ec00, const float *ec01,
00520               const float *ec10, const float *ec11,
00521               const float *ed00, const float *ed01,
00522               const float *ed10, const float *ed11, const float *etrdd00,
00523               const float *fc00, const float *fc01,
00524               const float *fc10, const float *fc11,
00525               const float *fd00, const float *fd01,
00526               const float *fd10, const float *fd11,
00527               const float *ftrdc00, const float *ftrdc10, const float *ftrdd10,
00528               const float *eicp1, const float *etrdc10,
00529               const float *eicp2, const float *etrdd10,
00530               float *lapjc00, float *lapjc10, float *lapjd10 );
00531 unsigned short _g1h_ExtendSupport ( int hole_k, unsigned short supp );
00532 boolean _g1h_TabLaplacianJump00f ( int nkn, const float *tkn, int fni,
00533                     const float *trdc00, const float *trdc10,
00534                     const float *trdd00, const float *trdd10,
00535                     float *lapc00, float *lapc10, float *lapd00, float *lapd10 );
00536 float _g1h_Q2Integralf ( int hole_k, int nquad, float *jac,
00537                          unsigned short supp1, float *lapj1,
00538                          unsigned short supp2, float *lapj2 );
00539 boolean _g1h_FuncDSuppf ( int hole_k, int nk, int m1, int fn, int i,
00540                           int *nzc, int *i0, int *i1, int *j0, int *j1 );
00541 
00542 void g1h_splnloutpatchf ( int n, int lknu, const float *knu,
00543                           int m, int lknv, const float *knv,
00544                           const float *cp, void *usrptr );
00545 boolean _g1h_TabBSFuncDer3f ( int deg, int lastknot, const float *knots,
00546                               int i0, int i1,
00547                               int n, const float *tkn, int *fkn, int *lkn,
00548                               float *b, float *bt, float *btt, float *bttt );
00549 void _g1hq2_SetupCTrdf ( const vector2f *cdiu, const vector2f *cdiv,
00550            const vector2f *cdiuu, const vector2f *cdiuv, const vector2f *cdivv,
00551            float *ctrd );
00552 boolean _g1hq2_FindDomSurrndPatchf ( GHoleDomainf *domain,
00553                                      G1HNLPrivatef *nlpr,
00554                                      int i, int j, point2f *bezcp );
00555 boolean _g1hq2_FindNLDomainDiameterf ( GHoleDomainf *domain,
00556                                        G1HNLPrivatef *nlpr );
00557 boolean _g1h_TabBSFuncDer2Jf ( int rr, int deg, int nk, int m2,
00558              int lastcknot, const float *cknots,
00559              float *atbs, float *atbst, float *atbstt0, float *atbstt1 );
00560 
00561 #endif
00562