00001 00005 class BasisFuncAtPt 00006 00007 { 00008 private: 00009 00010 Ptv(real) loc_eval_pt; 00011 00012 int nbf; 00013 int ngf; 00014 int nsd; 00015 int eval_derivatives; 00016 00017 Vec(real) Ni; 00018 Handle(Mat(real)) h_djNi; 00019 Handle(Mat(real)) h_djNi_loc; 00020 Handle(Vec(real)) h_Ni_g; 00021 Handle(Mat(real)) h_djNi_g_loc; 00022 Handle(ArrayGen(real)) h_d2Ni; 00023 Handle(ArrayGen(real)) h_d2Ni_loc; 00024 00025 00026 Handle(Mat(real)) h_jacobi; 00027 Handle(Mat(real)) h_inv_jacobi; 00028 real det_jacobi; 00029 00030 ElementType el_tp; 00031 real det_side_J; 00032 Ptv(real) nv; 00033 Vec(real) scratch; 00034 00035 void calcJacobiEtcT3n2d (const Mat(real)& elmcoor); 00036 void calcJacobiEtcT4n3d (const Mat(real)& elmcoor); 00037 void calcJacobiEtc (const Mat(real)& elmcoor); 00038 bool redim (); 00039 bool derivOk (const char* function_name, int deriv_order) const; 00040 00041 bool initialized; 00042 00043 public: 00044 00045 static long int ncalls_calcJacobi; 00046 static long int ncalls_initAtPoint; 00047 00048 BasisFuncAtPt (); 00049 BasisFuncAtPt (const BasisFuncAtPt& b); 00050 ~BasisFuncAtPt () {} 00051 00052 bool ok () const; 00053 bool redim (HandleElmDefs& elmdef); 00054 00055 void initAtPoint (const Ptv(real)& eval_pt, 00056 HandleElmDefs& elmdef, 00057 const Mat(real)& elmcoor, 00058 int current_side); 00059 void updateJacobi (const Mat(real)& elmcoor); 00060 void operator = (const BasisFuncAtPt& b); 00061 bool evaluatedAt (const Ptv(real)& loc_pt); 00062 00063 real N (int i) const; 00064 real dN (int i, int dir) const; 00065 real d2N (int i, int dir1, int dir2) const; 00066 00067 real dNloc (int i, int dir) const; 00068 00069 const Mat(real)& JacobiMatrix () const { return *h_jacobi; } 00070 const Mat(real)& invJacobiMatrix () const { return *h_inv_jacobi; } 00071 const Vec(real)& N() const { return Ni; } 00072 const Mat(real)& dNgloc() const { return *h_djNi_g_loc; } 00073 const Mat(real)& dNloc() const { return *h_djNi_loc; } 00074 const Vec(real)& Ng() const { return *h_Ni_g; } 00075 const Mat(real)& dN() const { return *h_djNi; } 00076 const ArrayGen(real)& d2N() const { return *h_d2Ni; } 00077 00078 void copyJacobiEtc (const BasisFuncAtPt& b); 00079 void unInitialize (); 00080 void evalDerivatives (int i); 00081 00082 real detJ () const; 00083 real detSideJ () const; 00084 void getNormalVectorOnSide (Ptv(real)& vec) const; 00085 }; 00086 00087