g2mblendingd.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, 2010, 2012                            */
00007 /* this package is distributed under the terms of the                        */
00008 /* Lesser GNU Public License, see the file COPYING.LIB                       */
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 /* this constant is relevant for the two-level block algorithm */
00025 #define G2MBL_MAX_BLOCKS 32   /* int is assumed at least 32 bits */
00026 
00027 /* this constant is relevant for the multilevel block algorithm */
00028 #define G2MBL_MAX_LEVELS 7
00029 
00030 /* this variable is initially set to 1, but in multiprocessor systems   */
00031 /* it may be assigned the number of processors; then parallel algoritms */
00032 /* will be used (if they exist - most of them are still to be written)  */
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 /* procedure counting the variable vertices of the mesh */
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 /* procedures for the simplest version nonblock optimization */
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 /* procedures for the simplest version block optimization */
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 ( /* fine mesh */
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                            /* number of vertices of the coarse mesh */
00081                     int cnv,
00082                            /* refinement matrix */
00083                     int rmnnz, index2 *rmnzi, double *rmnzc,
00084                            /* optimization parameters */
00085                     double C, double dO, double dM,
00086                     int nkn1, int nkn2, int nbl,
00087                            /* created data structure */
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 /* auxiliary procedures, for various tests etc. */
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 /* multilevel optimization algorithm */
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 ( /* fine mesh */
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                            /* number of vertices of the coarse mesh */
00125                     int cnv,
00126                            /* refinement matrix */
00127                     int rmnnz, index2 *rmnzi, double *rmnzc,
00128                            /* optimization parameters */
00129                     double C, double dO, double dM,
00130                     int nkn1, int nkn2, short nlevels,
00131                            /* created data structure */
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 /* shape only multilevel optimization algorithm */
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 ( /* fine mesh */
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                            /* coarse mesh */
00169                     int cnv,
00170                            /* refinement matrix */
00171                     int rmnnz, index2 *rmnzi, double *rmnzc,
00172                            /* optimization parameters */
00173                     int nkn1, int nkn2, short nlevels,
00174                            /* created data structure */
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 /*G2MBLENDINGD_H*/
00199