00001 00005 class BasisFuncGrid : public GridWithPts 00006 00007 { 00008 friend class FieldFE; 00009 00010 00011 Handle(GridFE) geomt_grid; 00012 bool isop; 00013 int nsd; 00014 int nsd_phys; 00015 00016 00017 00018 00019 00020 00021 int nno; 00022 int nbf; 00023 int nbe; 00024 int nne; 00025 int nbind; 00026 Handle(Indicators) essbind; 00027 MatSimple(real) coor; 00028 String elm_tp; 00029 HandleElmDefs elmdef; 00030 MatSimple(int) nodel; 00031 00032 MatSimple(int) loc2glob_arr; 00033 VecSimple(int) node2dof_arr; 00034 int current_node; 00035 bool incorrect_coor; 00036 00037 void generateMesh (); 00038 00039 public: 00040 BasisFuncGrid (); 00041 BasisFuncGrid (const GridFE& grid); 00042 BasisFuncGrid (const BasisFuncGrid& bfgrid_); 00043 ~BasisFuncGrid (); 00044 00045 void redim (const GridFE& grid); 00046 00047 const GridFE& grid () const { return geomt_grid(); } 00048 GridFE& grid () { return geomt_grid(); } 00049 00050 void setElmType (const String& old_tp, const String& new_tp); 00051 void setElmType (const String& new_tp); 00052 00053 bool update (); 00054 00055 bool ok () const; 00056 00057 bool isoparametric () const { return isop; } 00058 int loc2glob (int e, int dof) const; 00059 void loc2glob (VecSimple(int)& l2g, int e) const; 00060 int getNoNodesInElm (int e =1) const; 00061 int getNoBasisFuncInElm (int e =1) const; 00062 int getNoBasisFuncAtBasisNodeInElm (int elm_node, int e = 1) const; 00063 int getBasisFuncNoInElm (int elm_node, int basis_func_no_at_this_node, 00064 int e = 1) const; 00065 int getBasisFuncNode (int global_basis_func_no) const; 00066 int node2dof (int node) const; 00067 00068 int getNoNodes () const; 00069 int getNoBoInds() const { return essbind->getNoInds(); } 00070 int getTotalNoDof () const; 00071 int getNoSpaceDim () const { return nsd; } 00072 int getNoPhysicalSpaceDim () const { return nsd_phys; } 00073 real getCoor (int node, int dir) const; 00074 Ptv(real) getCoor (int node) const; 00075 void getCoor (Ptv(real)& point, int node) const; 00076 void getMinMaxCoord (Ptv(real)& mincoord, Ptv(real)& maxcoord) const; 00077 00078 String getElmType (int e =1) const; 00079 bool allElmsOfSameType () const; 00080 00081 const Indicators& getEssBoInds () const { return essbind.getRef(); } 00082 Indicators& getEssBoInds () { return essbind.getRef(); } 00083 void setBoInd (int node, int indno); 00084 void clearBoInd (int node, int indno); 00085 void attach (Indicators& essboinds, bool automatic_fill = true); 00086 void fillIndicators (Indicators& bfind); 00087 00088 bool notEqual (const BasisFuncGrid& bfnodes); 00089 00090 00091 00092 bool essBoNode (int node, int indno) const; 00093 bool essBoNode (int node) const; 00094 bool essBoNodesInElm (int elm_no, int indno) const; 00095 bool essBoNodesInElm (int elm_no) const; 00096 00097 void print (Os os) const; 00098 void scan (Is is); 00099 00100 00101 virtual void startIterator (); 00102 virtual bool nextPt (Ptv(real)& x); 00103 bool nextPt (Ptv(real)& x, int& node); 00104 00105 virtual int getNoPoints () const; 00106 int isNode (const Ptv(real)& point); 00107 virtual int nearestPoint 00108 (const Ptv(real)& point, real& distance, bool& exact); 00109 virtual void scale (); 00110 virtual void unscale (); 00111 void attachScale (const SpaceTimeScale& scale); 00112 00113 virtual void isToBeChanged (); 00114 virtual void flipAroundSymmetryPlane (int dir, real plane); 00115 00116 void move (const FieldsFE& displacement, real scale_factor = 1.0); 00117 00118 void move (bool do_not_move_basis_function_nodes); 00119 00120 CLASS_INFO 00121 00122 VIRTUAL_CAST(BasisFuncGrid) 00123 }; 00124 00125