escript  Revision_
dudley/src/ElementFile.h
Go to the documentation of this file.
1 
2 /*****************************************************************************
3 *
4 * Copyright (c) 2003-2016 by The University of Queensland
5 * http://www.uq.edu.au
6 *
7 * Primary Business: Queensland, Australia
8 * Licensed under the Apache License, version 2.0
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Development until 2012 by Earth Systems Science Computational Center (ESSCC)
12 * Development 2012-2013 by School of Earth Sciences
13 * Development from 2014 by Centre for Geoscience Computing (GeoComp)
14 *
15 *****************************************************************************/
16 
17 #ifndef __DUDLEY_ELEMENTFILE_H__
18 #define __DUDLEY_ELEMENTFILE_H__
19 
20 #include "Dudley.h"
21 #include "NodeFile.h"
22 #include "ElementType.h"
23 #include "Util.h"
24 
25 namespace dudley {
26 
28 {
31 
33  int status;
35  int numDim;
37  int numQuad;
39  int numShapes;
43  double *absD;
45  double quadweight;
48  double* DSDX;
49 };
50 
52 {
53 public:
54  ElementFile(ElementTypeId etype, escript::JMPI mpiInfo);
55  ~ElementFile();
56 
58  void allocTable(dim_t NE);
59 
61  void freeTable();
62 
65  void copyTable(index_t offset, index_t nodeOffset, index_t idOffset,
66  const ElementFile* in);
67 
69  void print(const index_t* nodesId) const;
70 
72  void distributeByRankOfDOF(const int* mpiRankOfDOF,
73  const index_t* nodesId);
74 
77  void createColoring(dim_t numNodes, const index_t* degreeOfFreedom);
78 
80  void optimizeOrdering();
81 
84  void relabelNodes(const index_t* newNode, index_t offset);
85 
86  void markNodes(std::vector<short>& mask, index_t offset) const;
87 
91  void gather(const index_t* index, const ElementFile* in);
92 
94  void setTags(int newTag, const escript::Data& mask);
95 
96  ElementFile_Jacobians* borrowJacobians(const NodeFile* nodes,
97  bool reducedOrder) const;
98 
101  inline std::pair<index_t,index_t> getNodeRange() const;
102 
103  inline void updateTagList();
104 
105 private:
106  void swapTable(ElementFile* other);
107 
108 public:
110 
113 
118 
120  int* Tag;
121 
123  int* Owner;
124 
126  std::vector<int> tagsInUse;
127 
129  int numNodes;
130 
133 
138 
141 
144 
146  int numDim;
147 
150 
153 
155  const char *ename;
156 
159 
160 private:
163 
167 };
168 
169 inline std::pair<index_t,index_t> ElementFile::getNodeRange() const
170 {
171  return util::getMinMaxInt(numNodes, numElements, Nodes);
172 }
173 
175 {
176  util::setValuesInUse(Tag, numElements, tagsInUse, MPIInfo);
177 }
178 
179 
180 } // namespace dudley
181 
182 #endif // __DUDLEY_ELEMENTFILE_H__
183 
ElementFile_Jacobians * jacobians
jacobians of the shape function used for solution approximation
Definition: dudley/src/ElementFile.h:162
Definition: Dudley.h:52
index_t * Nodes
Nodes[INDEX(k, i, numNodes)] is the k-th node in the i-th element.
Definition: dudley/src/ElementFile.h:132
escript::JMPI MPIInfo
Definition: dudley/src/ElementFile.h:109
int numNodes
number of nodes per element
Definition: dudley/src/ElementFile.h:129
~ElementFile_Jacobians()
Definition: dudley/src/ElementFile_jacobians.cpp:34
IndexPair getMinMaxInt(int dim, dim_t N, const index_t *values)
Definition: dudley/src/Util.cpp:150
const char * ename
name of element type
Definition: dudley/src/ElementFile.h:155
int numShapes
number of shape functions
Definition: dudley/src/ElementFile.h:39
int numLocalDim
dimension of the element e.g. 2 for a line in 2D or 3D
Definition: dudley/src/ElementFile.h:149
ElementTypeId etype
element type ID
Definition: dudley/src/ElementFile.h:152
boost::shared_ptr< JMPI_ > JMPI
Definition: EsysMPI.h:71
int numQuad
number of quadrature nodes used to calculate jacobians
Definition: dudley/src/ElementFile.h:37
int numDim
number of spatial dimensions
Definition: dudley/src/ElementFile.h:35
index_t * Id
Definition: dudley/src/ElementFile.h:117
double * DSDX
Definition: dudley/src/ElementFile.h:48
void setValuesInUse(const int *values, dim_t numValues, std::vector< int > &valuesInUse, escript::JMPI mpiinfo)
Definition: dudley/src/Util.cpp:215
int index_t
type for array/matrix indices used both globally and on each rank
Definition: DataTypes.h:59
ElementFile_Jacobians()
Definition: dudley/src/ElementFile_jacobians.cpp:23
int numDim
number of spatial dimensions of the domain
Definition: dudley/src/ElementFile.h:146
int numShapes
number of shape functions
Definition: dudley/src/ElementFile.h:158
index_t * Color
Definition: dudley/src/ElementFile.h:137
Data represents a collection of datapoints.
Definition: Data.h:63
double quadweight
used to compute volume
Definition: dudley/src/ElementFile.h:45
ElementTypeId
Definition: ElementType.h:24
ElementFile_Jacobians * jacobians_reducedQ
Definition: dudley/src/ElementFile.h:166
Definition: dudley/src/ElementFile.h:51
std::pair< index_t, index_t > getNodeRange() const
Definition: dudley/src/ElementFile.h:169
A suite of factory methods for creating 2D and 3D dudley domains.
Definition: dudley/src/Assemble.h:31
void updateTagList()
Definition: dudley/src/ElementFile.h:174
void gather(int len, const index_t *index, int numData, const double *in, double *out)
Definition: dudley/src/Util.cpp:43
int * Owner
Owner[i] contains the rank that owns element i.
Definition: dudley/src/ElementFile.h:123
int status
status of mesh when jacobians were updated last time
Definition: dudley/src/ElementFile.h:33
Definition: dudley/src/ElementFile.h:27
index_t maxColor
maximum color value
Definition: dudley/src/ElementFile.h:143
std::vector< int > tagsInUse
array of tags which are actually used
Definition: dudley/src/ElementFile.h:126
Definition: dudley/src/NodeFile.h:38
double * absD
used to compute volume
Definition: dudley/src/ElementFile.h:43
index_t minColor
minimum color value
Definition: dudley/src/ElementFile.h:140
dim_t numElements
number of elements
Definition: dudley/src/ElementFile.h:112
int * Tag
Tag[i] is the tag of element i.
Definition: dudley/src/ElementFile.h:120
index_t dim_t
Definition: DataTypes.h:64
dim_t numElements
number of elements
Definition: dudley/src/ElementFile.h:41