escript  Revision_
dudley/src/ElementFile.h
Go to the documentation of this file.
1 
2 /*****************************************************************************
3 *
4 * Copyright (c) 2003-2018 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 
27 struct ElementFile_Jacobians
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 
51 class ElementFile
52 {
53 public:
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 
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 
117  index_t* Id;
118 
120  int* Tag;
121 
123  int* Owner;
124 
126  std::vector<int> tagsInUse;
127 
129  int numNodes;
130 
132  index_t* Nodes;
133 
138 
141 
144 
146  int numDim;
147 
149  int numLocalDim;
150 
153 
155  const char *ename;
156 
158  int numShapes;
159 
160 private:
163 
167 };
168 
169 inline std::pair<index_t,index_t> ElementFile::getNodeRange() const
170 {
172 }
173 
174 inline void ElementFile::updateTagList()
175 {
177 }
178 
179 
180 } // namespace dudley
181 
182 #endif // __DUDLEY_ELEMENTFILE_H__
183 
dudley::ElementFile_Jacobians::DSDX
double * DSDX
Definition: dudley/src/ElementFile.h:71
dudley::ElementFile_Jacobians::numShapes
int numShapes
number of shape functions
Definition: dudley/src/ElementFile.h:62
dudley::ElementFile::numShapes
int numShapes
number of shape functions
Definition: dudley/src/ElementFile.h:169
escript::Data::getNumDataPointsPerSample
int getNumDataPointsPerSample() const
Return the number of data points per sample.
Definition: Data.h:530
escript::Data::isComplex
bool isComplex() const
True if components of this data are stored as complex.
Definition: Data.cpp:1163
finley::ElementFile::jacobians_reducedS_reducedQ
ElementFile_Jacobians * jacobians_reducedS_reducedQ
Definition: finley/src/ElementFile.h:181
finley::util::ValueAndIndexList
std::vector< IndexPair > ValueAndIndexList
Definition: finley/src/Util.h:53
dudley::ElementFile::Tag
int * Tag
Tag[i] is the tag of element i.
Definition: dudley/src/ElementFile.h:131
finley::ElementFile::minColor
index_t minColor
minimum color value
Definition: finley/src/ElementFile.h:163
finley::ElementFile::scatter
void scatter(index_t *index, const ElementFile *in)
Definition: finley/src/ElementFile.cpp:154
dudley::ElementFile::copyTable
void copyTable(index_t offset, index_t nodeOffset, index_t idOffset, const ElementFile *in)
Definition: dudley/src/ElementFile.cpp:104
dudley::ElementFile_Jacobians
Definition: dudley/src/ElementFile.h:38
escript::DataTypes::real_t
double real_t
type of all real-valued scalars in escript
Definition: DataTypes.h:73
finley::ElementFile::gather
void gather(const index_t *index, const ElementFile *in)
Definition: finley/src/ElementFile.cpp:135
dudley::DudleyException
Definition: DudleyException.h:35
dudley::ElementFile::jacobians_reducedQ
ElementFile_Jacobians * jacobians_reducedQ
Definition: dudley/src/ElementFile.h:177
dudley::ElementFile::gather
void gather(const index_t *index, const ElementFile *in)
Definition: dudley/src/ElementFile.cpp:144
dudley::ElementFile::createColoring
void createColoring(dim_t numNodes, const index_t *degreeOfFreedom)
Definition: ElementFile_createColoring.cpp:35
finley::ElementFile::jacobians
ElementFile_Jacobians * jacobians
jacobians of the shape function used for solution approximation
Definition: finley/src/ElementFile.h:169
dudley::ElementFile::getNodeRange
std::pair< index_t, index_t > getNodeRange() const
Definition: dudley/src/ElementFile.h:180
dudley::NodeFile
Definition: dudley/src/NodeFile.h:37
finley::ElementFile::allocTable
void allocTable(dim_t NE)
allocates the element table within an element file to hold NE elements
Definition: finley/src/ElementFile.cpp:75
dudley::Nodes
Definition: Dudley.h:63
finley::ElementFile::jacobians_reducedS
ElementFile_Jacobians * jacobians_reducedS
Definition: finley/src/ElementFile.h:173
INDEX2
#define INDEX2(_X1_, _X2_, _N1_)
Definition: index.h:21
dudley::ElementFile::swapTable
void swapTable(ElementFile *other)
Definition: dudley/src/ElementFile.cpp:161
finley::const_ReferenceElementSet_ptr
boost::shared_ptr< const ReferenceElementSet > const_ReferenceElementSet_ptr
Definition: ReferenceElementSets.h:90
escript::Data::getSampleDataRO
const DataTypes::real_t * getSampleDataRO(DataTypes::RealVectorType::size_type sampleNo, DataTypes::real_t dummy=0) const
Return the sample data for the given sample no. Please do not use this unless you NEED to access samp...
Definition: Data.h:1975
dudley::util::getMinMaxInt
IndexPair getMinMaxInt(int dim, dim_t N, const index_t *values)
Definition: dudley/src/Util.cpp:181
finley::ElementFile::Tag
int * Tag
Tag[i] is the tag of element i.
Definition: finley/src/ElementFile.h:139
dudley::ElementFile::Nodes
index_t * Nodes
Nodes[INDEX(k, i, numNodes)] is the k-th node in the i-th element.
Definition: dudley/src/ElementFile.h:143
dudley::ElementFile::freeTable
void freeTable()
deallocates the element table within an element file
Definition: dudley/src/ElementFile.cpp:91
finley::ElementFile_Jacobians
Definition: finley/src/ElementFile.h:38
dudley::ElementFile::allocTable
void allocTable(dim_t NE)
allocates the element table within an element file to hold NE elements
Definition: dudley/src/ElementFile.cpp:64
dudley::ElementFile_Jacobians::numQuad
int numQuad
number of quadrature nodes used to calculate jacobians
Definition: dudley/src/ElementFile.h:60
finley::ElementFile::createColoring
void createColoring(const IndexVector &dofMap)
Tries to reduce the number of colours used to colour the elements.
Definition: finley/src/ElementFile.cpp:259
finley::const_ReferenceElement_ptr
boost::shared_ptr< const ReferenceElement > const_ReferenceElement_ptr
Definition: ReferenceElements.h:211
dudley::ElementFile::Owner
int * Owner
Owner[i] contains the rank that owns element i.
Definition: dudley/src/ElementFile.h:134
finley::ElementFile::relabelNodes
void relabelNodes(const IndexVector &newNode, index_t offset)
finley::ElementFile::~ElementFile
~ElementFile()
destructor
Definition: finley/src/ElementFile.cpp:65
dudley::ElementFile::markNodes
void markNodes(std::vector< short > &mask, index_t offset) const
Definition: dudley/src/ElementFile.cpp:238
escript::Data::getDataPointSize
int getDataPointSize() const
Return the size of the data point. It is the product of the data point shape dimensions.
Definition: Data.cpp:1363
dudley::ElementFile_Jacobians::absD
double * absD
used to compute volume
Definition: dudley/src/ElementFile.h:66
finley::ElementFile::setTags
void setTags(const int newTag, const escript::Data &mask)
Definition: finley/src/ElementFile.cpp:226
dudley::ElementFile::jacobians
ElementFile_Jacobians * jacobians
jacobians of the shape function used for solution approximation
Definition: dudley/src/ElementFile.h:173
finley::ElementFile::Nodes
index_t * Nodes
Definition: finley/src/ElementFile.h:154
Dudley.h
finley::ElementFile::distributeByRankOfDOF
void distributeByRankOfDOF(const std::vector< int > &mpiRankOfDOF, index_t *nodesId)
redistributes the elements including overlap by rank
Definition: finley/src/ElementFile.cpp:340
dudley::ElementFile::ename
const char * ename
name of element type
Definition: dudley/src/ElementFile.h:166
dudley::ElementFile::distributeByRankOfDOF
void distributeByRankOfDOF(const int *mpiRankOfDOF, const index_t *nodesId)
redistributes the elements including overlap by rank
Definition: ElementFile_distributeByRankOfDOF.cpp:34
finley::ElementFile::maxColor
index_t maxColor
maximum color value
Definition: finley/src/ElementFile.h:166
dudley::ElementFile_Jacobians::status
int status
status of mesh when jacobians were updated last time
Definition: dudley/src/ElementFile.h:56
MPI_INT
#define MPI_INT
Definition: EsysMPI.h:44
finley::ElementFile::ElementFile
ElementFile(const_ReferenceElementSet_ptr refElementSet, escript::JMPI mpiInfo)
Definition: finley/src/ElementFile.cpp:39
dudley::ElementFile::maxColor
index_t maxColor
maximum color value
Definition: dudley/src/ElementFile.h:154
escript::Data::getNumSamples
int getNumSamples() const
Return the number of samples.
Definition: Data.h:519
dudley::ElementFile::minColor
index_t minColor
minimum color value
Definition: dudley/src/ElementFile.h:151
finley::ElementFile::numElements
dim_t numElements
number of elements
Definition: finley/src/ElementFile.h:132
dudley::localDims
static const int localDims[8]
Definition: ShapeTable.h:63
dudley
A suite of factory methods for creating 2D and 3D dudley domains.
Definition: dudley/src/Assemble.h:31
finley::ElementFile::jacobians_reducedQ
ElementFile_Jacobians * jacobians_reducedQ
Definition: finley/src/ElementFile.h:177
finley::ElementFile::Owner
int * Owner
Owner[i] contains the rank that owns element i.
Definition: finley/src/ElementFile.h:142
escript::Data
Data represents a collection of datapoints.
Definition: Data.h:62
escript::DataTypes::dim_t
index_t dim_t
Definition: DataTypes.h:87
finley::ElementFile::MPIInfo
escript::JMPI MPIInfo
Definition: finley/src/ElementFile.h:127
dudley::ElementFile::numElements
dim_t numElements
number of elements
Definition: dudley/src/ElementFile.h:123
escript::JMPI
boost::shared_ptr< JMPI_ > JMPI
Definition: EsysMPI.h:70
finley::util::sortValueAndIndex
void sortValueAndIndex(ValueAndIndexList &array)
orders a ValueAndIndexList by value.
Definition: finley/src/Util.cpp:61
finley::ElementFile::freeTable
void freeTable()
deallocates the element table within an element file
Definition: finley/src/ElementFile.cpp:101
dudley::ElementFile
Definition: dudley/src/ElementFile.h:62
ElementFile.h
dudley::hasReducedIntegrationOrder
bool hasReducedIntegrationOrder(const escript::Data &in)
Definition: Dudley.h:71
finley::util::getMinMaxInt
IndexPair getMinMaxInt(int dim, dim_t N, const index_t *values)
Definition: finley/src/Util.cpp:300
ElementFile.h
dudley::ElementFile::Id
index_t * Id
Definition: dudley/src/ElementFile.h:128
finley::util::hasReducedIntegrationOrder
bool hasReducedIntegrationOrder(const escript::Data &in)
returns true if the data object is defined on reduced element types
Definition: finley/src/Util.h:59
finley::ElementFile::Color
index_t * Color
Definition: finley/src/ElementFile.h:160
paso::swap
void swap(index_t *r, index_t *c, double *v, int left, int right)
Definition: SparseMatrix.cpp:67
dudley::util::ValueAndIndexList
std::vector< IndexPair > ValueAndIndexList
Definition: dudley/src/Util.h:53
dudley::ElementFile::print
void print(const index_t *nodesId) const
prints information about this element file to stdout
Definition: dudley/src/ElementFile.cpp:127
finley::ElementFile::Id
index_t * Id
Definition: finley/src/ElementFile.h:136
dudley::ElementFile::numDim
int numDim
number of spatial dimensions of the domain
Definition: dudley/src/ElementFile.h:157
dudley::ElementFile::MPIInfo
escript::JMPI MPIInfo
Definition: dudley/src/ElementFile.h:120
dudley::Dims
static const int Dims[8]
Definition: ShapeTable.h:64
NodeFile.h
escript::Data::numSamplesEqual
bool numSamplesEqual(int numDataPointsPerSample, int numSamples) const
Returns true if the number of data points per sample and the number of samples match the respective a...
Definition: Data.h:541
ShapeTable.h
dudley::ElementFile::optimizeOrdering
void optimizeOrdering()
reorders the elements so that they are stored close to the nodes
Definition: dudley/src/ElementFile.cpp:174
dudley::ElementFile_Jacobians::numDim
int numDim
number of spatial dimensions
Definition: dudley/src/ElementFile.h:58
dudley::ElementFile::updateTagList
void updateTagList()
Definition: dudley/src/ElementFile.h:185
dudley::util::sortValueAndIndex
void sortValueAndIndex(ValueAndIndexList &array)
orders a ValueAndIndexList by value.
Definition: dudley/src/Util.cpp:61
dudley::util::setValuesInUse
void setValuesInUse(const int *values, dim_t numValues, std::vector< int > &valuesInUse, escript::JMPI mpiinfo)
Definition: dudley/src/Util.cpp:246
dudley::ElementFile::ElementFile
ElementFile(ElementTypeId etype, escript::JMPI mpiInfo)
Definition: dudley/src/ElementFile.cpp:35
dudley::ElementFile::relabelNodes
void relabelNodes(const index_t *newNode, index_t offset)
Definition: dudley/src/ElementFile.cpp:248
dudley::ElementFile::numLocalDim
int numLocalDim
dimension of the element e.g. 2 for a line in 2D or 3D
Definition: dudley/src/ElementFile.h:160
escript::DataTypes::index_t
int index_t
type for array/matrix indices used both globally and on each rank
Definition: DataTypes.h:82
ElementType.h
finley::ElementFile::copyTable
void copyTable(index_t offset, index_t nodeOffset, index_t idOffset, const ElementFile *in)
Definition: finley/src/ElementFile.cpp:116
finley::ElementFile::swapTable
void swapTable(ElementFile *other)
Definition: finley/src/ElementFile.cpp:171
finley::ElementFile::markNodes
void markNodes(std::vector< short > &mask, int offset, bool useLinear)
Definition: finley/src/ElementFile.cpp:315
finley::Nodes
Definition: Finley.h:76
Util.h
dudley::ElementFile_Jacobians::numElements
dim_t numElements
number of elements
Definition: dudley/src/ElementFile.h:64
dudley::ElementFile_Jacobians::quadweight
double quadweight
used to compute volume
Definition: dudley/src/ElementFile.h:68
finley::ElementFile::tagsInUse
std::vector< int > tagsInUse
array of tags which are actually used
Definition: finley/src/ElementFile.h:145
finley::ElementFile
Definition: finley/src/ElementFile.h:72
dudley::ElementFile_Jacobians::ElementFile_Jacobians
ElementFile_Jacobians()
Definition: dudley/src/ElementFile_jacobians.cpp:34
dudley::ElementFile::Color
index_t * Color
Definition: dudley/src/ElementFile.h:148
dudley::getElementName
const char * getElementName(ElementTypeId id)
Definition: ShapeTable.cpp:114
escript::Data::actsExpanded
bool actsExpanded() const
Return true if this Data is expanded or resolves to expanded. That is, if it has a separate value for...
Definition: Data.cpp:1121
finley::ElementFile::referenceElementSet
const_ReferenceElementSet_ptr referenceElementSet
the reference element to be used
Definition: finley/src/ElementFile.h:130
dudley::ElementFile::setTags
void setTags(int newTag, const escript::Data &mask)
sets element tags to newTag where mask > 0
Definition: dudley/src/ElementFile.cpp:203
finley::ElementFile::optimizeOrdering
void optimizeOrdering()
reorders the elements so that they are stored close to the nodes
Definition: finley/src/ElementFile.cpp:184
finley::ElementFile::updateTagList
void updateTagList()
Definition: finley/src/ElementFile.h:189
finley
A suite of factory methods for creating various finley domains.
Definition: finley/src/Assemble.h:31
ESYS_ASSERT
#define ESYS_ASSERT(a, b)
EsysAssert is a MACRO that will throw an exception if the boolean condition specified is false.
Definition: Assert.h:77
dudley::ElementFile::tagsInUse
std::vector< int > tagsInUse
array of tags which are actually used
Definition: dudley/src/ElementFile.h:137
escript::ValueError
An exception class that signals an invalid argument value.
Definition: EsysException.h:99
dudley::ElementTypeId
ElementTypeId
Definition: ElementType.h:35
dudley::ElementFile::etype
ElementTypeId etype
element type ID
Definition: dudley/src/ElementFile.h:163
dudley::ElementFile_Jacobians::~ElementFile_Jacobians
~ElementFile_Jacobians()
Definition: dudley/src/ElementFile_jacobians.cpp:45
dudley::ElementFile::numNodes
int numNodes
number of nodes per element
Definition: dudley/src/ElementFile.h:140
escript::DataTypes::IndexVector
std::vector< index_t > IndexVector
Definition: DataTypes.h:85
dudley::ElementFile::borrowJacobians
ElementFile_Jacobians * borrowJacobians(const NodeFile *nodes, bool reducedOrder) const
Definition: dudley/src/ElementFile_jacobians.cpp:51
dudley::ElementFile::~ElementFile
~ElementFile()
Definition: dudley/src/ElementFile.cpp:57
finley::ElementFile::numNodes
int numNodes
number of nodes per element
Definition: finley/src/ElementFile.h:148