00001 00005 class GridFE2GridFV 00006 00007 { 00008 protected: 00009 00010 Handle(GridFE) gfe; 00011 Handle(GridFV) gfv; 00012 00013 00014 GridFVType strategy; 00015 00016 00017 bool merge_segments; 00018 00019 00020 Handle(MatSimpleH(real)) edge_pts; 00021 Handle(MatSimpleH(real)) elm_pts; 00022 Handle(MatSimpleH(real)) fem_node_coor; 00023 00024 00025 VecSimple(int) edge_pts_map; 00026 VecSimple(int) elm_pts_map; 00027 VecSimple(int) fem_node_map; 00028 00029 00030 DpList(VolPolygonSegment),DpListItemInst local_face_forw_list; 00031 DpList(VolPolygonSegment),DpListItemInst local_face_back_list; 00032 00033 00034 00035 GridFVSizeInfo size_info; 00036 00037 00038 Handle(MatSimpleH(int)) s2n_ptr; 00039 Handle(MatSimpleH(int)) s2e_ptr; 00040 Handle(MatSimpleH(int)) n2s_ptr; 00041 Handle(MatSimpleH(int)) e2s_ptr; 00042 00043 00044 VecSimple(VecSimple(int)) polygons; 00045 00046 00047 int findNextSide4ElmNode (int curr_e, int curr_n, int curr_s); 00048 int findNextElm4Side (int curr_s, int curr_e); 00049 bool satisfyRightHandRule (int s1, int s2, int origo); 00050 00051 bool walkFacePathForward (int s0, int e1, int e2, int n); 00052 bool walkFacePathBackward (int s0, int e1, int e2, int n); 00053 00054 00055 void mergeSegments (VecSimple(int)& edge_pts_map, 00056 VecSimple(int)& fem_nodes_map); 00057 void checkRemovalOfPt (VecSimple(int)& pol, int pol_num, 00058 int first_pt, int last_pt, 00059 bool node_pt_centered, bool& remove); 00060 void putVertexCoor (int curr_node, const MatSimple(real)& src_coor, 00061 int src_idx); 00062 00063 void initBoundaryIndicators (); 00064 void initBoundaryIndicatorsCVFE (); 00065 00066 void fillNodeCoor (); 00067 void computeCVFEVertices (); 00068 void computeVoronoiVertices (); 00069 void computeGPEBIVertices (); 00070 00071 void constructPolygons (); 00072 00073 00074 void openPolygonStream (int npol); 00075 void addPolygon (const VolPolygon& pol); 00076 void closePolygonStream (); 00077 00078 public: 00079 00080 GridFE2GridFV () { strategy = FELATTICE_GRID; } 00081 00082 ~GridFE2GridFV () {} 00083 00084 void convert (GridFE& gfe_, GridFV& gfv_) { convert(gfe_,gfv_,strategy); } 00085 void convert (GridFE& gfe, GridFV& gfv, GridFVType strategy); 00086 00087 void debugPrint (Os os) const; 00088 00089 static void defineStatic (MenuSystem& menu, int level=MAIN); 00090 00091 void define (MenuSystem& menu, int level=MAIN) {defineStatic (menu, level);} 00092 void scan (MenuSystem& menu); 00093 }; 00094 00095