escript
Revision_
|
#include <ElementFile.h>
Public Member Functions | |
ElementFile (const_ReferenceElementSet_ptr refElementSet, escript::JMPI mpiInfo) | |
~ElementFile () | |
destructor More... | |
void | allocTable (dim_t NE) |
allocates the element table within an element file to hold NE elements More... | |
void | freeTable () |
deallocates the element table within an element file More... | |
void | copyTable (index_t offset, index_t nodeOffset, index_t idOffset, const ElementFile *in) |
void | distributeByRankOfDOF (const std::vector< int > &mpiRankOfDOF, index_t *nodesId) |
redistributes the elements including overlap by rank More... | |
void | createColoring (const IndexVector &dofMap) |
Tries to reduce the number of colours used to colour the elements. More... | |
void | optimizeOrdering () |
reorders the elements so that they are stored close to the nodes More... | |
void | relabelNodes (const IndexVector &newNode, index_t offset) |
void | markNodes (std::vector< short > &mask, int offset, bool useLinear) |
void | gather (const index_t *index, const ElementFile *in) |
void | scatter (index_t *index, const ElementFile *in) |
void | setTags (const int newTag, const escript::Data &mask) |
ElementFile_Jacobians * | borrowJacobians (const NodeFile *, bool, bool) const |
std::pair< index_t, index_t > | getNodeRange () const |
void | updateTagList () |
Public Attributes | |
escript::JMPI | MPIInfo |
const_ReferenceElementSet_ptr | referenceElementSet |
the reference element to be used More... | |
dim_t | numElements |
number of elements More... | |
index_t * | Id |
int * | Tag |
Tag[i] is the tag of element i. More... | |
int * | Owner |
Owner[i] contains the rank that owns element i. More... | |
std::vector< int > | tagsInUse |
array of tags which are actually used More... | |
int | numNodes |
number of nodes per element More... | |
index_t * | Nodes |
index_t * | Color |
index_t | minColor |
minimum color value More... | |
index_t | maxColor |
maximum color value More... | |
ElementFile_Jacobians * | jacobians |
jacobians of the shape function used for solution approximation More... | |
ElementFile_Jacobians * | jacobians_reducedS |
ElementFile_Jacobians * | jacobians_reducedQ |
ElementFile_Jacobians * | jacobians_reducedS_reducedQ |
Private Member Functions | |
void | swapTable (ElementFile *other) |
finley::ElementFile::ElementFile | ( | const_ReferenceElementSet_ptr | refSet, |
escript::JMPI | mpiInfo | ||
) |
constructor use ElementFile::allocTable to allocate the element table
References jacobians, jacobians_reducedQ, jacobians_reducedS, jacobians_reducedS_reducedQ, numNodes, and referenceElementSet.
Referenced by optimizeOrdering().
finley::ElementFile::~ElementFile | ( | ) |
destructor
References freeTable(), jacobians, jacobians_reducedQ, jacobians_reducedS, and jacobians_reducedS_reducedQ.
void finley::ElementFile::allocTable | ( | dim_t | NE | ) |
allocates the element table within an element file to hold NE elements
allocates the element table within this element file to hold NE elements.
References Color, freeTable(), Id, INDEX2, Nodes, numElements, numNodes, Owner, and Tag.
Referenced by finley::FinleyDomain::addDiracPoints(), finley::FinleyDomain::createHex20(), finley::FinleyDomain::createHex8(), finley::FinleyDomain::createRec4(), finley::FinleyDomain::createRec8(), distributeByRankOfDOF(), finley::FinleyDomain::glueFaces(), finley::FinleyDomain::joinFaces(), finley::FinleyDomain::load(), finley::FinleyDomain::merge(), and optimizeOrdering().
ElementFile_Jacobians * finley::ElementFile::borrowJacobians | ( | const NodeFile * | nodefile, |
bool | reducedShapefunction, | ||
bool | reducedIntegrationOrder | ||
) | const |
References finley::Assemble_jacobians_1D(), finley::Assemble_jacobians_2D(), finley::Assemble_jacobians_2D_M1D_E1D(), finley::Assemble_jacobians_2D_M1D_E1D_C(), finley::Assemble_jacobians_2D_M1D_E2D(), finley::Assemble_jacobians_2D_M1D_E2D_C(), finley::Assemble_jacobians_3D(), finley::Assemble_jacobians_3D_M2D_E2D(), finley::Assemble_jacobians_3D_M2D_E2D_C(), finley::Assemble_jacobians_3D_M2D_E3D(), finley::Assemble_jacobians_3D_M2D_E3D_C(), finley::ElementFile_Jacobians::BasisFunctions, finley::NodeFile::Coordinates, finley::ElementFile_Jacobians::DSDX, finley::ElementFile_Jacobians::node_selection, finley::Nodes, finley::ElementFile_Jacobians::numDim, finley::NodeFile::numDim, finley::ElementFile_Jacobians::numElements, finley::ElementFile_Jacobians::numQuadTotal, finley::ElementFile_Jacobians::numShapesTotal, finley::ElementFile_Jacobians::numSides, finley::ElementFile_Jacobians::numSub, finley::ElementFile_Jacobians::offsets, finley::ElementFile_Jacobians::status, finley::NodeFile::status, and finley::ElementFile_Jacobians::volume.
Referenced by finley::Assemble_gradient(), finley::Assemble_integrate(), and finley::AssembleParameters::AssembleParameters().
void finley::ElementFile::copyTable | ( | index_t | offset, |
index_t | nodeOffset, | ||
index_t | idOffset, | ||
const ElementFile * | in | ||
) |
copies element file in
into this element file starting from offset
. The elements offset
to in->numElements+offset-1 will be overwritten.
copies element file 'in' into this element file starting from 'offset'. The elements offset to in->numElements+offset-1 will be overwritten
References Id, INDEX2, Nodes, numElements, numNodes, Owner, and Tag.
Referenced by finley::FinleyDomain::joinFaces(), and finley::FinleyDomain::merge().
void finley::ElementFile::createColoring | ( | const IndexVector & | dofMap | ) |
Tries to reduce the number of colours used to colour the elements.
Tries to reduce the number of colors used to color elements in this ElementFile
References Color, ESYS_ASSERT, finley::util::getMinMaxInt(), INDEX2, maxColor, minColor, Nodes, numElements, and numNodes.
Referenced by finley::FinleyDomain::createColoring().
void finley::ElementFile::distributeByRankOfDOF | ( | const std::vector< int > & | mpiRankOfDOF, |
index_t * | nodesId | ||
) |
redistributes the elements including overlap by rank
References allocTable(), Id, INDEX2, MPI_INT, MPIInfo, Nodes, numElements, numNodes, Owner, and Tag.
Referenced by finley::FinleyDomain::distributeByRankOfDOF().
void finley::ElementFile::freeTable | ( | ) |
deallocates the element table within an element file
deallocates the element table within this element file
References Color, Id, maxColor, minColor, Nodes, numElements, Owner, Tag, and tagsInUse.
Referenced by allocTable(), and ~ElementFile().
void finley::ElementFile::gather | ( | const index_t * | index, |
const ElementFile * | in | ||
) |
References Color, Id, INDEX2, maxColor, minColor, Nodes, numElements, numNodes, Owner, and Tag.
Referenced by finley::FinleyDomain::glueFaces(), finley::FinleyDomain::joinFaces(), and optimizeOrdering().
|
inline |
returns the minimum and maximum reference number of nodes describing the elements
References finley::util::getMinMaxInt(), finley::Nodes, and finley::ElementFile_Jacobians::numElements.
Referenced by finley::FinleyDomain::resolveNodeIds().
void finley::ElementFile::markNodes | ( | std::vector< short > & | mask, |
int | offset, | ||
bool | useLinear | ||
) |
References INDEX2, Nodes, numElements, numNodes, and referenceElementSet.
Referenced by finley::FinleyDomain::markNodes().
void finley::ElementFile::optimizeOrdering | ( | ) |
reorders the elements so that they are stored close to the nodes
References allocTable(), ElementFile(), gather(), INDEX2, MPIInfo, Nodes, numElements, numNodes, referenceElementSet, relabelNodes(), finley::util::sortValueAndIndex(), and swapTable().
Referenced by finley::FinleyDomain::optimizeElementOrdering().
void finley::ElementFile::relabelNodes | ( | const IndexVector & | newNode, |
index_t | offset | ||
) |
assigns new node reference numbers to the elements. If k is the old node, the new node is newNode[k-offset].
Referenced by optimizeOrdering(), and finley::FinleyDomain::relabelElementNodes().
void finley::ElementFile::scatter | ( | index_t * | index, |
const ElementFile * | in | ||
) |
scatters the ElementFile in into this ElementFile. A conservative assumption on the coloring is made.
References Color, Id, INDEX2, maxColor, minColor, Nodes, numElements, numNodes, Owner, and Tag.
void finley::ElementFile::setTags | ( | const int | newTag, |
const escript::Data & | mask | ||
) |
References escript::Data::actsExpanded(), escript::Data::getDataPointSize(), escript::Data::getNumDataPointsPerSample(), escript::Data::getNumSamples(), escript::Data::getSampleDataRO(), finley::util::hasReducedIntegrationOrder(), numElements, referenceElementSet, Tag, and updateTagList().
Referenced by finley::FinleyDomain::setTags().
|
private |
References Color, Id, maxColor, minColor, Nodes, numElements, Owner, paso::swap(), Tag, and tagsInUse.
Referenced by optimizeOrdering().
|
inline |
updates the list of tags in use. This method must be called by all ranks.
References finley::ElementFile_Jacobians::numElements, and finley::util::setValuesInUse().
Referenced by finley::FinleyDomain::load(), setTags(), and finley::FinleyDomain::updateTagList().
index_t* finley::ElementFile::Color |
assigns each element a color. Elements with the same color don't share a node so they can be processed simultaneously. At any time Color must provide a valid value. In any case one can set Color[e]=e for all e
Referenced by finley::FinleyDomain::addDiracPoints(), allocTable(), finley::Assemble_LumpedSystem(), finley::Assemble_PDE_Points(), finley::Assemble_PDE_Single_1D(), finley::Assemble_PDE_Single_2D(), finley::Assemble_PDE_Single_3D(), finley::Assemble_PDE_Single_C(), finley::Assemble_PDE_System_1D(), finley::Assemble_PDE_System_2D(), finley::Assemble_PDE_System_3D(), finley::Assemble_PDE_System_C(), createColoring(), finley::FinleyDomain::dump(), freeTable(), gather(), finley::IndexList_insertElements(), finley::IndexList_insertElementsWithRowRangeNoMainDiagonal(), weipa::FinleyElements::initFromFinley(), finley::FinleyDomain::joinFaces(), finley::FinleyDomain::load(), finley::FinleyDomain::printElementInfo(), scatter(), and swapTable().
index_t* finley::ElementFile::Id |
Id[i] is the id number of node i. This number is used when elements are resorted. In the entire code the term 'element id' refers to i and not to Id[i] unless explicitly stated otherwise.
Referenced by finley::FinleyDomain::addDiracPoints(), allocTable(), finley::FinleyDomain::borrowSampleReferenceIDs(), copyTable(), finley::FinleyDomain::createHex20(), finley::FinleyDomain::createHex8(), finley::FinleyDomain::createRec4(), finley::FinleyDomain::createRec8(), distributeByRankOfDOF(), finley::FinleyDomain::dump(), freeTable(), gather(), weipa::FinleyElements::initFromFinley(), finley::FinleyDomain::joinFaces(), finley::FinleyDomain::load(), finley::FinleyDomain::printElementInfo(), scatter(), swapTable(), and finley::FinleyDomain::writeElementInfo().
ElementFile_Jacobians* finley::ElementFile::jacobians |
jacobians of the shape function used for solution approximation
Referenced by ElementFile(), and ~ElementFile().
ElementFile_Jacobians* finley::ElementFile::jacobians_reducedQ |
jacobians of the shape function used for solution approximation for reduced integration order
Referenced by ElementFile(), and ~ElementFile().
ElementFile_Jacobians* finley::ElementFile::jacobians_reducedS |
jacobians of the shape function used for solution approximation for reduced order of shape function
Referenced by ElementFile(), and ~ElementFile().
ElementFile_Jacobians* finley::ElementFile::jacobians_reducedS_reducedQ |
jacobians of the shape function used for solution approximation for reduced integration order and reduced order of shape function
Referenced by ElementFile(), and ~ElementFile().
index_t finley::ElementFile::maxColor |
maximum color value
Referenced by finley::FinleyDomain::addDiracPoints(), createColoring(), freeTable(), gather(), finley::FinleyDomain::joinFaces(), finley::FinleyDomain::load(), scatter(), and swapTable().
index_t finley::ElementFile::minColor |
minimum color value
Referenced by finley::FinleyDomain::addDiracPoints(), finley::Assemble_LumpedSystem(), finley::Assemble_PDE_Points(), finley::Assemble_PDE_Single_1D(), finley::Assemble_PDE_Single_2D(), finley::Assemble_PDE_Single_3D(), finley::Assemble_PDE_Single_C(), finley::Assemble_PDE_System_1D(), finley::Assemble_PDE_System_2D(), finley::Assemble_PDE_System_3D(), finley::Assemble_PDE_System_C(), createColoring(), freeTable(), gather(), finley::IndexList_insertElements(), finley::IndexList_insertElementsWithRowRangeNoMainDiagonal(), finley::FinleyDomain::joinFaces(), finley::FinleyDomain::load(), scatter(), and swapTable().
escript::JMPI finley::ElementFile::MPIInfo |
Referenced by finley::Assemble_gradient(), finley::Assemble_interpolate(), distributeByRankOfDOF(), and optimizeOrdering().
index_t* finley::ElementFile::Nodes |
Nodes[INDEX(k, i, numNodes)] is the k-th node in the i-th element. Note that in the way the nodes are ordered Nodes[INDEX(k, i, numNodes) is the k-th node of element i when referring to the linear version of the mesh.
Referenced by finley::FinleyDomain::addDiracPoints(), allocTable(), finley::Assemble_getNormal(), finley::Assemble_getSize(), finley::Assemble_gradient(), finley::Assemble_interpolate(), finley::Assemble_LumpedSystem(), finley::Assemble_PDE_Points(), finley::Assemble_PDE_Single_1D(), finley::Assemble_PDE_Single_2D(), finley::Assemble_PDE_Single_3D(), finley::Assemble_PDE_Single_C(), finley::Assemble_PDE_System_1D(), finley::Assemble_PDE_System_2D(), finley::Assemble_PDE_System_3D(), finley::Assemble_PDE_System_C(), copyTable(), createColoring(), finley::FinleyDomain::createHex20(), finley::FinleyDomain::createHex8(), finley::FinleyDomain::createRec4(), finley::FinleyDomain::createRec8(), distributeByRankOfDOF(), finley::FinleyDomain::dump(), freeTable(), gather(), finley::FinleyDomain::glueFaces(), finley::IndexList_insertElements(), finley::IndexList_insertElementsWithRowRangeNoMainDiagonal(), weipa::FinleyElements::initFromFinley(), finley::FinleyDomain::joinFaces(), finley::FinleyDomain::load(), markNodes(), optimizeOrdering(), finley::FinleyDomain::printElementInfo(), scatter(), swapTable(), and finley::FinleyDomain::writeElementInfo().
dim_t finley::ElementFile::numElements |
number of elements
Referenced by finley::FinleyDomain::addDiracPoints(), allocTable(), finley::Assemble_AverageElementData(), finley::Assemble_CopyElementData(), finley::Assemble_getNormal(), finley::Assemble_getSize(), finley::Assemble_gradient(), finley::Assemble_integrate(), finley::Assemble_interpolate(), finley::Assemble_LumpedSystem(), finley::Assemble_PDE(), finley::Assemble_PDE_Points(), finley::Assemble_PDE_Single_1D(), finley::Assemble_PDE_Single_2D(), finley::Assemble_PDE_Single_3D(), finley::Assemble_PDE_Single_C(), finley::Assemble_PDE_System_1D(), finley::Assemble_PDE_System_2D(), finley::Assemble_PDE_System_3D(), finley::Assemble_PDE_System_C(), finley::AssembleParameters::AssembleParameters(), copyTable(), createColoring(), distributeByRankOfDOF(), finley::FinleyDomain::dump(), freeTable(), gather(), finley::FinleyDomain::getDataShape(), finley::FinleyDomain::glueFaces(), finley::IndexList_insertElements(), finley::IndexList_insertElementsWithRowRangeNoMainDiagonal(), weipa::FinleyElements::initFromFinley(), finley::FinleyDomain::joinFaces(), markNodes(), optimizeOrdering(), finley::FinleyDomain::printElementInfo(), scatter(), finley::FinleyDomain::setOrders(), setTags(), swapTable(), and finley::FinleyDomain::writeElementInfo().
int finley::ElementFile::numNodes |
number of nodes per element
Referenced by allocTable(), finley::Assemble_getNormal(), finley::Assemble_getSize(), finley::Assemble_gradient(), finley::Assemble_interpolate(), finley::AssembleParameters::AssembleParameters(), copyTable(), createColoring(), finley::FinleyDomain::createHex20(), finley::FinleyDomain::createHex8(), finley::FinleyDomain::createRec4(), finley::FinleyDomain::createRec8(), distributeByRankOfDOF(), finley::FinleyDomain::dump(), ElementFile(), gather(), finley::FinleyDomain::glueFaces(), finley::IndexList_insertElements(), finley::IndexList_insertElementsWithRowRangeNoMainDiagonal(), weipa::FinleyElements::initFromFinley(), finley::FinleyDomain::joinFaces(), markNodes(), optimizeOrdering(), finley::FinleyDomain::printElementInfo(), scatter(), and finley::FinleyDomain::writeElementInfo().
int* finley::ElementFile::Owner |
Owner[i] contains the rank that owns element i.
Referenced by finley::FinleyDomain::addDiracPoints(), allocTable(), finley::Assemble_integrate(), copyTable(), finley::FinleyDomain::createHex20(), finley::FinleyDomain::createHex8(), finley::FinleyDomain::createRec4(), finley::FinleyDomain::createRec8(), distributeByRankOfDOF(), finley::FinleyDomain::dump(), freeTable(), gather(), weipa::FinleyElements::initFromFinley(), finley::FinleyDomain::load(), finley::FinleyDomain::printElementInfo(), scatter(), and swapTable().
const_ReferenceElementSet_ptr finley::ElementFile::referenceElementSet |
the reference element to be used
Referenced by finley::FinleyDomain::addDiracPoints(), finley::Assemble_AverageElementData(), finley::Assemble_CopyElementData(), finley::Assemble_getNormal(), finley::Assemble_getSize(), finley::Assemble_gradient(), finley::Assemble_interpolate(), finley::FinleyDomain::dump(), ElementFile(), finley::FinleyDomain::getDataShape(), finley::FinleyDomain::glueFaces(), finley::IndexList_insertElements(), weipa::FinleyElements::initFromFinley(), finley::FinleyDomain::joinFaces(), markNodes(), optimizeOrdering(), finley::FinleyDomain::printElementInfo(), finley::FinleyDomain::setOrders(), setTags(), and finley::FinleyDomain::writeElementInfo().
int* finley::ElementFile::Tag |
Tag[i] is the tag of element i.
Referenced by finley::FinleyDomain::addDiracPoints(), allocTable(), copyTable(), finley::FinleyDomain::createHex20(), finley::FinleyDomain::createHex8(), finley::FinleyDomain::createRec4(), finley::FinleyDomain::createRec8(), distributeByRankOfDOF(), finley::FinleyDomain::dump(), freeTable(), gather(), finley::FinleyDomain::getTagFromSampleNo(), weipa::FinleyElements::initFromFinley(), finley::FinleyDomain::joinFaces(), finley::FinleyDomain::load(), finley::FinleyDomain::printElementInfo(), scatter(), setTags(), swapTable(), and finley::FinleyDomain::writeElementInfo().
std::vector<int> finley::ElementFile::tagsInUse |
array of tags which are actually used
Referenced by finley::FinleyDomain::borrowListOfTagsInUse(), freeTable(), finley::FinleyDomain::getNumberOfTagsInUse(), and swapTable().