00001 00005 class GridFEInfo 00006 00007 { 00008 friend class GridFE; 00009 00010 public: 00011 GridFEInfo(); 00012 00013 void forceInit(); 00014 00015 00016 private: 00017 bool neighbor_is_initialized; 00018 bool neighbor_n2e_is_initialized; 00019 bool neighbor_n2n_is_initialized; 00020 bool neighbor_e2e_is_initialized; 00021 bool cover_is_initialized; 00022 public: 00023 NeighborFE neighbor; 00024 00025 void initNeighbor (GridFE& grid); 00026 void initNeighbor (GridFE& grid, 00027 bool init_n2e, bool init_n2n, bool init_e2e, 00028 bool special_e2e = false); 00029 00030 00031 public: 00032 Handle(BoundaryMesh) boundaries; 00033 00034 void initBoundaries (GridFE& grid); 00035 void initBoundaries (GridFE& grid, const Ptv(int)& IJK); 00036 00037 00038 private: 00039 bool first_order_elements_is_initialized; 00040 bool first_order_elements; 00041 bool onlyFirstOrderElmType (GridFE& grid); 00042 public: 00043 bool onlyFirstOrderElements (GridFE& grid); 00044 00045 00046 private: 00047 real max_grid_spacing; 00048 public: 00049 real getMaxSpacing (GridFE& grid); 00050 static void minmaxGridSpacing (GridFE& grid, 00051 Ptv(real)& hmin, Ptv(real)& hmax, 00052 FieldFunc* formula = NULL); 00053 static void maxSurroundingBox (GridFE& grid, Ptv(real)& length); 00054 static void computeBoxesAndCentroids(GridFE& grid, 00055 MatSimple(real)& bounding_box, 00056 MatSimple(real)& centroids ); 00057 00058 real characteristicElmSize (GridFE& grid, bool dimless = true); 00059 00060 00061 private: 00062 VecSimple(bool) boundary_elm; 00063 bool boundary_elm_is_initialized; 00064 void initBoundaryElms (const GridFE& grid); 00065 public: 00066 bool isBoundaryElm (int element, const GridFE& grid) const; 00067 00068 00069 private: 00070 bool side_indicators_are_initialized; 00071 ArrayGenSimple(char) side_ind; 00072 VecSimple(int) boundary_elms; 00073 bool boSide (int elm, int side, int ind) const; 00074 public: 00075 void initSideIndicators (const GridFE& grid); 00076 00077 00078 00079 private: 00080 void initializeCover (const Ptv(real)& grid_Xmin, 00081 const Ptv(real)& grid_Xmax, 00082 const Ptv(real)& cover_cell_delta); 00083 public: 00084 00085 Handle(GridLattice) cover; 00086 00087 00088 ArrayGenSimple(SetDistinct(int)) connection; 00089 ArrayGenSimple(VecSimple(int)) eff_connection; 00090 void provideCoverAndConnection (GridFE& grid, 00091 GridLattice* cover_grid = NULL); 00092 }; 00093 00094