hnstructureq43d.h

Go to the documentation of this file.
00001 #ifndef __HNStructureQ43d_h
00002 #define __HNStructureQ43d_h
00003 
00004 #include "hnstructureq23d.h"
00005 
00006 namespace Gascoigne
00007 {
00008 
00009 /**********************************************************/
00010 
00011   class HNStructureQ43d : public HNStructureQ23d
00012   {
00013     protected:
00014       typedef fixarray<6,int>  EdgeVector;
00015       typedef fixarray<26,int> FaceVector;
00016 
00017       typedef std::map<int,EdgeVector>::iterator       iteratorq4;
00018       typedef std::map<int,EdgeVector>::const_iterator const_iteratorq4;
00019       typedef std::map<int,FaceVector>::iterator       face_iteratorq4;
00020       typedef std::map<int,FaceVector>::const_iterator face_const_iteratorq4;
00021 
00022       nmatrix<double>                 Medge,Mface,Mq2edge,Mq2face;
00023       nvector<fixarray<5,double> >    w,wq2;
00024       const std::map<int,EdgeVector> *q4edges;
00025       const std::map<int,FaceVector> *q4faces;
00026 
00027       void add_column(EntryMatrix& A, const EntryMatrix&B, int j1, int j2, double s=1.) const;
00028       void add_row(EntryMatrix& A, const EntryMatrix&B, int i1, int i2, double s=1.) const;
00029       void GetHangingIndices(std::vector<int>& hang_e, std::vector<int>& hang_f, const IntVector& indices) const;
00030       int hanging(int i) const;
00031       fixarray<5,int> local_nodes_on_edge(int e, const IntVector& indices) const;
00032       fixarray<25,int> local_nodes_on_face(int e, const IntVector& indices) const;
00033       void modify_column_higher(EntryMatrix& E, const std::vector<int>& hang_e, const std::vector<int>& hang_f, const IntVector& indices) const;
00034       void modify_column_lower(EntryMatrix& E, const std::vector<int>& hang_e, const std::vector<int>& hang_f, const IntVector& indices) const;
00035       void modify_row_higher(EntryMatrix& E, const std::vector<int>& hang_e, const std::vector<int>& hang_f, const IntVector& indices) const;
00036       void modify_row_lower(EntryMatrix& E, const std::vector<int>& hang_e, const std::vector<int>& hang_f, const IntVector& indices) const;
00037       const EdgeVector& regular_nodes_on_edge(int i) const;
00038       const FaceVector& regular_nodes_on_face(int i) const;
00039 
00040     public:
00041       HNStructureQ43d();
00042       ~HNStructureQ43d() { }
00043 
00044       void ReInit(const MeshInterface* m);
00045 
00046       void CondenseHanging(IntVector& indices) const;
00047       void CondenseHanging(EntryMatrix& E, IntVector& indices) const;
00048       void CondenseHangingLowerHigher(EntryMatrix& E, IntVector& indices) const;
00049       void CondenseHangingHigherLower(EntryMatrix& E, IntVector& indices) const;
00050       void MatrixDiag(int ncomp, MatrixInterface& A) const;
00051       void SparseStructureDiag(SparseStructure& S) const;
00052 
00053       void Zero(GlobalVector& u) const;
00054       void Average(GlobalVector& u) const;
00055       void Distribute(GlobalVector& u) const;
00056 
00057       bool ZeroCheck(const GlobalVector& u) const;
00058   };
00059 
00060 /**********************************************************/
00061 
00062 }
00063 
00064 #endif

Generated on Thu Sep 14 10:34:36 2006 for Gascoigne by  doxygen 1.4.7