00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef G2MBLENDINGD_H
00012 #define G2MBLENDINGD_H
00013
00014 #ifndef EGHOLED_H
00015 #include "egholed.h"
00016 #endif
00017
00018 #ifdef __cplusplus
00019 extern "C" {
00020 #endif
00021
00022 #define G2MBL_TIME_IT
00023
00024
00025 #define G2MBL_MAX_BLOCKS 32
00026
00027
00028 #define G2MBL_MAX_LEVELS 7
00029
00030
00031
00032
00033 extern int _g2mbl_npthreads;
00034
00035 extern GHoleDomaind *g2mbl_domaind[GH_MAX_K-3];
00036 extern double *g2mbl_patchmatrixd[GH_MAX_K-3];
00037 extern void (*g2mbl_outputnzdistr)( int nbl, int blnum, boolean final,
00038 int nvcp, int n, byte *nzdistr );
00039
00040 void g2mbl_CleanupHoleDomainsd ( void );
00041 boolean g2mbl_SetupHolePatchMatrixd ( int k );
00042
00043
00044 void g2mbl_OptLMTDeallocated ( void **data );
00045
00046
00047 int g2mbl_GetNvcp ( int nv, BSMvertex *mv, int *mvhei,
00048 int nhe, BSMhalfedge *mhe,
00049 int nfac, BSMfacet *mfac, int *mfhei,
00050 byte *mkcp );
00051
00052 boolean g2mbl_InitBlSurfaceOptLMTd ( int nv, BSMvertex *mv, int *mvhei,
00053 point3d *mvcp, int nhe, BSMhalfedge *mhe,
00054 int nfac, BSMfacet *mfac, int *mfhei,
00055 byte *mkcp,
00056 double C, double dO, double dM,
00057 int nkn1, int nkn2, void **data );
00058 boolean g2mbl_IterBlSurfaceOptLMTd ( void *data, boolean *finished );
00059 boolean g2mbl_FindBlSurfaceLMTd ( int nv, BSMvertex *mv, int *mvhei,
00060 point3d *mvcp, int nhe, BSMhalfedge *mhe,
00061 int nfac, BSMfacet *mfac, int *mfhei,
00062 byte *mkcp,
00063 double C, double dO, double dM,
00064 int maxit, int nkn1, int nkn2 );
00065
00066
00067 boolean g2mbl_InitBlSurfaceOptAltBLMTd ( int nv, BSMvertex *mv, int *mvhei,
00068 point3d *mvcp, int nhe, BSMhalfedge *mhe,
00069 int nfac, BSMfacet *mfac, int *mfhei,
00070 byte *mkcp,
00071 double C, double dO, double dM,
00072 int nkn1, int nkn2, int nbl,
00073 void **data );
00074
00075 boolean g2mbl_InitBlCMPSurfaceOptd (
00076 int fnv, BSMvertex *fmv, int *fmvhei, point3d *fmvcp,
00077 int fnhe, BSMhalfedge *fmhe,
00078 int fnfac, BSMfacet *fmfac, int *fmfhei,
00079 byte *fmkcp,
00080
00081 int cnv,
00082
00083 int rmnnz, index2 *rmnzi, double *rmnzc,
00084
00085 double C, double dO, double dM,
00086 int nkn1, int nkn2, int nbl,
00087
00088 void **data );
00089
00090 boolean g2mbl_IterBlSurfaceOptAltBLMTd ( void *data, boolean *finished );
00091
00092 boolean g2mbl_FindBlSurfaceAltBLMTd ( int nv, BSMvertex *mv, int *mvhei,
00093 point3d *mvcp, int nhe, BSMhalfedge *mhe,
00094 int nfac, BSMfacet *mfac, int *mfhei,
00095 byte *mkcp,
00096 double C, double dO, double dM,
00097 int maxit, int nkn1, int nkn2, int nbl );
00098
00099
00100 boolean g2mbl_TimeBlSurfaceOptBLMTd ( void *data, int bnum, double *tt,
00101 int *n0, int *n, int **prof,
00102 double ***rows, double ***lrows,
00103 double *_func, double *_grad,
00104 int **iHbl, int **tHbl, double **Hbl );
00105
00106 int g2mbl_GetBLMBlockNumd ( void *data, int *lastblock );
00107 void g2mbl_GetBLMTBlockInfod ( void *data,
00108 int bln, int *nv, int *nvcp, int **nncpi,
00109 int *c0, int *bnvcp,
00110 int **vncpi, int **bvncpi, int **vpermut );
00111
00112
00113 boolean g2mbl_MLOptInitd ( int nv, BSMvertex *mv, int *mvhei, point3d *mvcp,
00114 int nhe, BSMhalfedge *mhe,
00115 int nfac, BSMfacet *mfac, int *mfhei,
00116 byte *mkcp,
00117 double C, double dO, double dM,
00118 int nkn1, int nkn2, short nlevels, void **data );
00119 boolean g2mbl_MLCMPOptInitd (
00120 int fnv, BSMvertex *fmv, int *fmvhei, point3d *fmvcp,
00121 int fnhe, BSMhalfedge *fmhe,
00122 int fnfac, BSMfacet *fmfac, int *fmfhei,
00123 byte *fmkcp,
00124
00125 int cnv,
00126
00127 int rmnnz, index2 *rmnzi, double *rmnzc,
00128
00129 double C, double dO, double dM,
00130 int nkn1, int nkn2, short nlevels,
00131
00132 void **data );
00133 void g2mbl_MLOptDeallocated ( void **data );
00134 boolean g2mbl_MLOptIterd ( void *data, boolean *finished );
00135 boolean g2mbl_MLCOptIterd ( void *data, boolean *finished );
00136
00137 void g2mbl_MLSetLogLeveld ( void *data, short level );
00138 short g2mbl_MLGetInfod ( void *data );
00139
00140 int g2mbl_MLGetLastBlockd ( void *data );
00141 boolean g2mbl_MLGetBlockVCPNumbersd ( void *data, int bl,
00142 int *nvcp, int **vncpi, int *seed );
00143
00144 boolean g2mbl_MLSuggestNLevels ( int nv, BSMvertex *mv, int *mvhei,
00145 int nhe, BSMhalfedge *mhe,
00146 int nfac, BSMfacet *mfac, int *mfhei,
00147 byte *mkcp,
00148 int *minlev, int *maxlev );
00149 boolean g2mbl_MLCPSuggestNLevels ( int nv, BSMvertex *mv, int *mvhei,
00150 int nhe, BSMhalfedge *mhe,
00151 int nfac, BSMfacet *mfac, int *mfhei,
00152 byte *mkcp,
00153 int *minlev, int *maxlev );
00154
00155 void g2mbl_MLSetNextBlock ( void *data, int nbl );
00156
00157
00158 boolean g2mbl_MLSOptInitd ( int nv, BSMvertex *mv, int *mvhei, point3d *mvcp,
00159 int nhe, BSMhalfedge *mhe,
00160 int nfac, BSMfacet *mfac, int *mfhei,
00161 byte *mkcp,
00162 int nkn1, int nkn2, short nlevels, void **data );
00163 boolean g2mbl_MLSCMPOptInitd (
00164 int fnv, BSMvertex *fmv, int *fmvhei, point3d *fmvcp,
00165 int fnhe, BSMhalfedge *fmhe,
00166 int fnfac, BSMfacet *fmfac, int *fmfhei,
00167 byte *fmkcp,
00168
00169 int cnv,
00170
00171 int rmnnz, index2 *rmnzi, double *rmnzc,
00172
00173 int nkn1, int nkn2, short nlevels,
00174
00175 void **data );
00176 boolean g2mbl_MLSOptIterd ( void *data, boolean *finished );
00177 boolean g2mbl_MLSCOptIterd ( void *data, boolean *finished );
00178
00179 boolean g2mbl_MLSSuggestNLevels ( int nv, BSMvertex *mv, int *mvhei,
00180 int nhe, BSMhalfedge *mhe,
00181 int nfac, BSMfacet *mfac, int *mfhei,
00182 byte *mkcp,
00183 int *minlev, int *maxlev );
00184 boolean g2mbl_MLCPSSuggestNLevels ( int nv, BSMvertex *mv, int *mvhei,
00185 int nhe, BSMhalfedge *mhe,
00186 int nfac, BSMfacet *mfac, int *mfhei,
00187 byte *mkcp,
00188 int *minlev, int *maxlev );
00189
00190 #ifdef G2MBL_TIME_IT
00191 void g2mbl_MLGetTimes ( void *data,
00192 float *time_prep, float *time_h, float *time_cg );
00193 #endif
00194 #ifdef __cplusplus
00195 }
00196 #endif
00197
00198 #endif
00199