Diffpack Documentation


Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Search  

FieldFE.h

Go to the documentation of this file.
00001 
00005 class FieldFE : public FieldWithPtValues
00006 
00007 {
00008   friend class FieldsFE;
00009 
00010 protected:
00011   Handle(GridFE)         mesh;
00012   Handle(Vec(NUMT))      nodal_values;
00013   Handle(FiniteElement)  globfe;
00014   Handle(BasisFuncGrid)  bfnodes;
00015 
00016   Handle(ArrayGen(NUMT)) lattice_indexing; 
00017   bool                   internal_basis_func_grid;
00018 
00019   
00020   int init4e;                  
00021   Vec(NUMT) loc_nodal_values;  
00022   bool different_bfgrid;       
00023   bool different_geomgrid;     
00024   int  nbf;                    
00025   void precompute4interpolation (const FiniteElement& fe);
00026   int  ncalls_valuePt;         
00027 
00028   bool renumbered;             
00029 
00030   Handle(MxMapping) map;       
00031 
00032   bool reallocate
00033     (
00034      const GridFE&        grid,
00035      const Vec(NUMT)*     coeff,
00036      const BasisFuncGrid* sfg,
00037      const char*          fieldname
00038     );
00039 
00040 public:
00041   FieldFE (); 
00042   FieldFE (const GridFE& grid, const char* fieldname);
00043   FieldFE (const GridFE& grid, const Vec(NUMT)& coefficients,
00044            const char* fieldname);
00045   FieldFE (const BasisFuncGrid& bfnodes_grid, const char* fieldname);
00046   FieldFE (const BasisFuncGrid& bfnodes_grid, const Vec(NUMT)& coefficients,
00047            const char* fieldname);
00048 
00049  ~FieldFE ();
00050 
00051   bool update ();  
00052   bool compatible (const GridFE& g);
00053 
00054   bool updateNodalNumbering ();  
00055 
00056   bool redim (const FieldFE& f, const char* fieldname);
00057   bool redim (const GridFE& grid, const char* fieldname);
00058   bool redim (const BasisFuncGrid& bfnodes_grid,
00059               const char* fieldname);
00060   bool redim (const GridFE& grid, const Vec(NUMT)& coefficients,
00061               const char* fieldname);
00062   bool redim (const BasisFuncGrid& bfnodes_grid,
00063               const Vec(NUMT)& coefficients, const char* fieldname);
00064 
00065         GridFE& grid ()                        { return mesh.getRef(); }
00066   const GridFE& grid () const                  { return mesh.getRef(); }
00067 
00068         BasisFuncGrid& grid4basisFunc ()       { return bfnodes.getRef(); }
00069   const BasisFuncGrid& grid4basisFunc () const { return bfnodes.getRef(); }
00070 
00071         Vec(NUMT)& values ()                   { return nodal_values.getRef();}
00072   const Vec(NUMT)& values () const             { return nodal_values.getRef();}
00073   void  localValues (VecSimple(NUMT)& local_values, int elm_no) const;
00074 
00075   void  fill (const Vector(NUMT)& new_values);
00076   int   getNoNodes () const;
00077 
00078   bool valueNodeRepresentation() const;
00079   bool simpleTopology() const;
00080 
00081   bool isLattice (int nsd) const;
00082   const ArrayGen(NUMT)& latticeIndex () const { return lattice_indexing(); }
00083         ArrayGen(NUMT)& latticeIndex ()       { return lattice_indexing(); }
00084 
00085   void exchangeValues (FieldFE& f);  
00086 
00087   virtual bool ok () const;
00088           bool empty () const;
00089   virtual void minmax (NUMT& min, NUMT& max, GridWithPts* grid =NULL) const;
00090 
00091   NUMT  valueElm (int elm_no, const Ptv(real)& local_pt, real t = DUMMY);
00092   NUMT  valueElm (int elm_no, const Ptv(real)& local_pt, real t = DUMMY) const
00093   { return CAST_CONST_AWAY(FieldFE)->valueElm(elm_no, local_pt,t); }
00094 
00095 
00096   virtual NUMT  valueFEM (const FiniteElement& fe, real t = DUMMY);
00097 
00098   virtual NUMT  valuePt (const Ptv(real)& x, real t = DUMMY);
00099           NUMT  valuePt (int& element, Ptv(real)& loc_pt,
00100                          const Ptv(real)& x, real t = DUMMY);
00101 
00102           NUMT& valueNode  (int node, real t = DUMMY);
00103   virtual NUMT  valueNode  (int node, real t = DUMMY) const;
00104 
00105   virtual Ptv(NUMT) derivativePt (const Ptv(real)& x, real t = DUMMY);
00106   Ptv(NUMT) derivativePt (const Ptv(real)& x, real t = DUMMY) const
00107   { return CAST_CONST_AWAY(FieldFE)->derivativePt(x,t); }
00108 
00109   virtual void derivativeNode (Ptv(NUMT)& gradient, int node,
00110                                real t = DUMMY);
00111 
00112   virtual void derivativeFEM  (Ptv(NUMT)& gradient, const FiniteElement& fe,
00113                                real t = DUMMY);
00114 
00115   void derivativeFEM
00116     (Ptv(NUMT)& gradient, const FiniteElement& fe, real t = DUMMY) const
00117     { CAST_CONST_AWAY(FieldFE)->derivativeFEM (gradient, fe, t); }
00118 
00119   void derivativeElm (Ptv(NUMT)& gradient, int elm_no,
00120                       const Ptv(real)& local_pt, real t = DUMMY);
00121 
00122   void derivativeElm (Ptv(NUMT)& gradient, int elm_no,
00123                       const Ptv(real)& local_pt, real t = DUMMY) const
00124   { CAST_CONST_AWAY(FieldFE)->derivativeElm (gradient, elm_no, local_pt, t); }
00125 
00126   virtual void hessianPt  (Ptv(NUMT)&, const Ptv(real)& x, real = DUMMY);
00127   virtual void hessianFEM (Ptv(NUMT)&, const FiniteElement& fe, real = DUMMY);
00128           void hessianElm (Ptv(NUMT)&, int, const Ptv(real)&, real = DUMMY);
00129 
00130   
00131   void interpolate (const FieldFE& fefield);
00132   void interpolate (const FieldLattice& fdfield);
00133 
00134   
00135   
00136   void operator = (const FieldFE& fefield);
00137   void operator = (const FieldLattice& fdfield);
00138   void operator = (const FieldFunc& func);
00139   void fill       (const FieldFunc& func, real time);
00140 
00141   virtual void fill  (NUMT value);
00142   virtual void add   (NUMT value);
00143   virtual void mult  (NUMT value);
00144   virtual void apply (Func(NUMT) f);
00145   virtual void add   (Field& field, int power, NUMT front_factor);
00146           void add   (const FieldFE& f);  
00147 
00148   virtual Field&   scale ();
00149   virtual Field& unscale ();
00150 
00151   virtual void  unloadData (Os os) const;
00152   virtual void    loadData (Is is);
00153   virtual void  attach (Grid& grid);
00154   virtual Grid* getGridBase();
00155 
00156   
00157 
00158   virtual int   getNoPoints () const;
00159   virtual int   getNoValues () const;
00160 
00161   virtual NUMT& valuePoint (int point_no)
00162     { return nodal_values( (point_no);) }  
00163 
00164   virtual NUMT  valuePoint (int point_no) const
00165    { return nodal_values( (point_no);) }
00166 
00167   virtual Ptv(real) getPt (int point_no) const
00168    { return bfnodes->getCoor(point_no); }
00169 
00170   virtual GridWithPts& getGridWithPts ()
00171     { return mesh.getRef(); }
00172 
00173   virtual const GridWithPts& getGridWithPts () const
00174     { return mesh.getRef(); }
00175 
00176   virtual Vec(NUMT)& valuesVec ()
00177     { return nodal_values.getRef(); }
00178 
00179   virtual const Vec(NUMT)& valuesVec () const
00180     { return nodal_values.getRef(); }
00181 
00182   CLASS_INFO
00183   VIRTUAL_CAST(FieldFE);
00184   
00185   COPY_CONSTRUCTOR(FieldFE);
00186 
00187   virtual void print (Os os) const;
00188           void scan  (Is is);
00189 };
00190 
00191 

Copyright © 2003 inuTech GmbH. All rights reserved.