escript  Revision_Unversioneddirectory
finley/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 __FINLEY_ELEMENTFILE_H__
18 #define __FINLEY_ELEMENTFILE_H__
19 
20 #include "Finley.h"
21 #include "NodeFile.h"
22 #include "ReferenceElementSets.h"
23 #include "Util.h"
24 
25 namespace finley {
26 
30 
32  int status;
34  int numDim;
41  int numSides;
43  const int* offsets;
45  int numSub;
50  const int* node_selection;
54  double* volume;
57  double* DSDX;
58 };
59 
61 {
62 public:
64  esysUtils::JMPI& mpiInfo);
65  ~ElementFile();
66 
67  void allocTable(dim_t numElements);
68  void freeTable();
69 
70  void distributeByRankOfDOF(const std::vector<int>& mpiRankOfDOF, index_t *Id);
71  void createColoring(const std::vector<index_t>& dofMap);
73  void optimizeOrdering();
75  void relabelNodes(const std::vector<index_t>& newNode, index_t offset);
76  void markNodes(std::vector<short>& mask, int offset, bool useLinear);
77  void scatter(index_t* index, const ElementFile* in);
78  void gather(index_t* index, const ElementFile* in);
79  void copyTable(index_t offset, index_t nodeOffset, index_t idOffset,
80  const ElementFile* in);
81 
82  void markDOFsConnectedToRange(int* mask, int offset, int marker,
83  index_t firstDOF, index_t lastDOF,
84  const index_t *dofIndex, bool useLinear);
85 
86  void setTags(const int newTag, const escript::Data& mask);
87  ElementFile_Jacobians* borrowJacobians(const NodeFile*, bool, bool) const;
90  inline std::pair<index_t,index_t> getNodeRange() const;
91 
94  inline void updateTagList();
95 
96 private:
97  void swapTable(ElementFile* other);
98 
99 public:
101 
111  int *Tag;
113  int *Owner;
115  std::vector<int> tagsInUse;
117  int numNodes;
127  int *Color;
129  int minColor;
131  int maxColor;
143 };
144 
145 inline std::pair<index_t,index_t> ElementFile::getNodeRange() const
146 {
147  return util::getMinMaxInt(numNodes, numElements, Nodes);
148 }
149 
150 
152 {
153  util::setValuesInUse(Tag, numElements, tagsInUse, MPIInfo);
154 }
155 
156 } // namespace finley
157 
158 #endif // __FINLEY_ELEMENTFILE_H__
159 
index_t * Nodes
Definition: finley/src/ElementFile.h:122
~ElementFile_Jacobians()
Definition: ElementFile_jacobians.cpp:37
void gather(dim_t len, const index_t *index, dim_t numData, const double *in, double *out)
Definition: finley/src/Util.cpp:54
int status
status of mesh when jacobians were updated last time
Definition: finley/src/ElementFile.h:32
int maxColor
maximum color
Definition: finley/src/ElementFile.h:131
boost::shared_ptr< const ReferenceElementSet > const_ReferenceElementSet_ptr
Definition: ReferenceElementSets.h:85
const_ReferenceElementSet_ptr referenceElementSet
the reference element to be used
Definition: finley/src/ElementFile.h:103
ElementFile_Jacobians * jacobians
jacobians of the shape function used for solution approximation
Definition: finley/src/ElementFile.h:133
ElementFile_Jacobians(const_ShapeFunction_ptr basis)
Definition: ElementFile_jacobians.cpp:26
void setValuesInUse(const int *values, const int numValues, std::vector< int > &valuesInUse, esysUtils::JMPI &mpiinfo)
Definition: finley/src/Util.cpp:350
int numQuadTotal
Definition: finley/src/ElementFile.h:39
Definition: finley/src/ElementFile.h:27
std::pair< index_t, index_t > getNodeRange() const
Definition: finley/src/ElementFile.h:145
std::pair< index_t, index_t > getMinMaxInt(int dim, dim_t N, const index_t *values)
Definition: finley/src/Util.cpp:281
dim_t numElements
number of elements
Definition: finley/src/ElementFile.h:52
int minColor
minimum color
Definition: finley/src/ElementFile.h:129
Definition: finley/src/Assemble.h:32
double * volume
local volume
Definition: finley/src/ElementFile.h:54
int numNodes
number of nodes per element
Definition: finley/src/ElementFile.h:117
std::vector< int > tagsInUse
array of tags which are actually used
Definition: finley/src/ElementFile.h:115
void updateTagList()
Definition: finley/src/ElementFile.h:151
int numSub
number of subelements
Definition: finley/src/ElementFile.h:45
index_t * Id
Definition: finley/src/ElementFile.h:109
int * Color
Definition: finley/src/ElementFile.h:127
Data represents a collection of datapoints.
Definition: Data.h:68
Definition: finley/src/NodeFile.h:30
const int * node_selection
Definition: finley/src/ElementFile.h:50
const int * offsets
offset to sides (borrowed reference)
Definition: finley/src/ElementFile.h:43
const_ShapeFunction_ptr BasisFunctions
basis function used
Definition: finley/src/ElementFile.h:36
ElementFile_Jacobians * jacobians_reducedQ
Definition: finley/src/ElementFile.h:139
int numDim
number of spatial dimensions
Definition: finley/src/ElementFile.h:34
boost::shared_ptr< const ShapeFunction > const_ShapeFunction_ptr
Definition: ShapeFunctions.h:99
int index_t
Definition: types.h:24
double * DSDX
Definition: finley/src/ElementFile.h:57
int numShapesTotal
total number of shape functions = BasisFunctions->numShapes * numSides
Definition: finley/src/ElementFile.h:47
int numSides
number of sides (=1 normal, =2 contact)
Definition: finley/src/ElementFile.h:41
ElementFile_Jacobians * jacobians_reducedS_reducedQ
Definition: finley/src/ElementFile.h:142
dim_t numElements
number of elements
Definition: finley/src/ElementFile.h:105
int * Tag
Tag[i] is the tag of element i.
Definition: finley/src/ElementFile.h:111
index_t dim_t
Definition: types.h:27
Definition: Ripley.h:46
int * Owner
Owner[i] contains the rank that owns element i.
Definition: finley/src/ElementFile.h:113
boost::shared_ptr< JMPI_ > JMPI
Definition: Esys_MPI.h:79
esysUtils::JMPI MPIInfo
Definition: finley/src/ElementFile.h:100
ElementFile_Jacobians * jacobians_reducedS
Definition: finley/src/ElementFile.h:136
Definition: finley/src/ElementFile.h:60