Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #ifndef SUNDANCE_NODALDOFMAPHN_H
00043 #define SUNDANCE_NODALDOFMAPHN_H
00044
00045 #include "SundanceDefs.hpp"
00046 #include "SundanceSpatiallyHomogeneousDOFMapBase.hpp"
00047 #include "SundanceCellSet.hpp"
00048 #include "SundanceCellFilter.hpp"
00049 #include "SundanceBasisFamily.hpp"
00050 #include "SundanceObjectWithVerbosity.hpp"
00051 #include "SundanceHNDoFMapBaseHomogeneous.hpp"
00052 #include "SundanceMatrixStore.hpp"
00053
00054 namespace Sundance
00055 {
00056 using namespace Teuchos;
00057
00058
00059
00060
00061 class NodalDOFMapHN : public HNDoFMapBaseHomogeneous
00062 {
00063 public:
00064
00065 NodalDOFMapHN(const Mesh& mesh, int nFuncs,
00066 const CellFilter& maxCellFilter,
00067 int setupVerb);
00068
00069
00070
00071 virtual ~NodalDOFMapHN(){;}
00072
00073
00074 RCP<const MapStructure>
00075 getDOFsForCellBatch(int cellDim,
00076 const Array<int>& cellLID,
00077 const Set<int>& requestedFuncSet,
00078 Array<Array<int> >& dofs,
00079 Array<int>& nNodes,
00080 int verb) const ;
00081
00082
00083
00084
00085
00086
00087
00088
00089 void getTrafoMatrixForCell(
00090 int cellLID,
00091 int funcID,
00092 int& trafoMatrixSize,
00093 bool& doTransform,
00094 Array<double>& transfMatrix ) const;
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104 void getTrafoMatrixForFacet(
00105 int cellDim,
00106 int cellLID,
00107 int facetIndex,
00108 int funcID,
00109 int& trafoMatrixSize,
00110 bool& doTransform,
00111 Array<double>& transfMatrix ) const;
00112
00113
00114
00115 void getDOFsForHNCell(
00116 int cellDim,
00117 int cellLID,
00118 int funcID,
00119 Array<int>& dofs ,
00120 Array<double>& coefs ) const;
00121
00122
00123 RCP<const MapStructure> mapStruct() const
00124 {return structure_;}
00125
00126
00127 int nFuncs() const {return nFuncs_;}
00128
00129 protected:
00130
00131 void init();
00132
00133 void computeOffsets(int localCount) ;
00134
00135 void shareRemoteDOFs(const Array<Array<int> >& remoteNodes);
00136
00137
00138 void getPointLIDsForHN( int pointLID ,
00139 int facetIndex ,
00140 int maxCellIndex ,
00141 Array<int>& glbLIDs ,
00142 Array<double>& coefsArray,
00143 Array<int>& nodeIndex );
00144
00145 CellFilter maxCellFilter_;
00146
00147 int dim_;
00148
00149 int nFuncs_;
00150
00151 int nElems_;
00152
00153 int nNodes_;
00154
00155 int nNodesPerElem_;
00156
00157 int nFacets_;
00158
00159 Array<int> elemDofs_;
00160
00161 Array<int> nodeDofs_;
00162
00163 RCP<const MapStructure> structure_;
00164
00165
00166 Array<bool> hasCellHanging_;
00167
00168
00169 Array<bool> nodeIsHanging_;
00170
00171
00172 Sundance::Map< int , Array<int> > cellsWithHangingDoF_globalDoFs_;
00173
00174
00175 Sundance::Map< int , Array<int> > cells_To_NodeLIDs_;
00176
00177
00178 Sundance::Map< int , Array<int> > hangingNodeLID_to_NodesLIDs_;
00179
00180
00181 Sundance::Map< int , Array<double> > hangindNodeLID_to_Coefs_;
00182
00183
00184 Sundance::Map< int , int > maxCellLIDwithHN_to_TrafoMatrix_;
00185
00186
00187 MatrixStore matrixStore_;
00188
00189
00190 Array<int> facetLID_;
00191
00192 };
00193
00194 }
00195
00196
00197 #endif