54 omp_init_lock(&initLock);
60 FEMComponent :: initializeFrom(ir);
63 std :: list< Range >inputNodeRanges;
77 std :: list< Range >inputElementRanges;
100 this->inputRec = ir.
clone();
133void Set :: computeIntArray(
IntArray &answer,
const IntArray &specified, std :: list< Range >ranges)
137 for (
auto &range: ranges ) {
138 if ( range.giveEnd() > maxIndex ) {
139 maxIndex = range.giveEnd();
143 afflictedNodes.
zero();
145 for (
int i = 1; i <= specified.
giveSize(); ++i ) {
146 afflictedNodes.
at( specified.
at(i) ) = 1;
149 for (
auto &range: ranges ) {
150 for (
int i = range.giveStart(); i <= range.giveEnd(); ++i ) {
151 afflictedNodes.
at(i) = 1;
174 omp_set_lock(&initLock);
176 omp_unset_lock(&initLock);
180 IntArray afflictedNodes( this->
domain->giveNumberOfDofManagers() );
181 afflictedNodes.
zero();
182 for (
int ielem = 1; ielem <= this->
elements.giveSize(); ++ielem ) {
184 for (
int inode = 1; inode <= e->giveNumberOfNodes(); ++inode ) {
185 afflictedNodes.
at( e->giveNode(inode)->giveNumber() ) = 1;
193 auto fei = e->giveInterpolation();
194 auto bNodes = fei->boundaryGiveNodes(boundary, e->giveGeometryType());
195 for (
int inode = 1; inode <= bNodes.giveSize(); ++inode ) {
196 afflictedNodes.
at( e->giveNode( bNodes.at(inode) )->giveNumber() ) = 1;
200 for (
int iedge = 1; iedge <= this->
elementEdges.giveSize() / 2; ++iedge ) {
203 auto eNodes = e->giveBoundaryEdgeNodes(edge,
true);
204 for (
int inode = 1; inode <= eNodes.giveSize(); ++inode ) {
205 afflictedNodes.
at( e->giveNode( eNodes.at(inode) )->giveNumber() ) = 1;
209 for (
int isurf = 1; isurf <= this->
elementSurfaces.giveSize() / 2; ++isurf ) {
212 auto eNodes = e->giveBoundarySurfaceNodes(surf,
true);
213 for (
int inode = 1; inode <= eNodes.giveSize(); ++inode ) {
214 afflictedNodes.
at( e->giveNode( eNodes.at(inode) )->giveNumber() ) = 1;
218 for (
int inode = 1; inode <= this->
nodes.giveSize(); ++inode ) {
219 afflictedNodes.
at( this->
nodes.at(inode) ) = 1;
224 omp_unset_lock(&initLock);
237void Set :: setNodeList(
IntArray newNodes) { this->
nodes = std :: move(newNodes); }
239void Set :: addAllElements()
276 for (
int i = 1; i <=
nodes.giveSize(); i++ ) {
279 }
catch ( std :: out_of_range &e ) {
287 nodes = mappedNumbers;
294 for (
int i = 1; i <=
elements.giveSize(); i++ ) {
297 }
catch ( std :: out_of_range &e ) {
299 OOFEM_WARNING(
"Set :: updateLocalElementNumbering - Element %d with indx %d not found",
elements.at(i), i);
312 }
catch ( std :: out_of_range &e ) {
321 for (
int i = 1; i <=
elementEdges.giveSize(); i += 2 ) {
324 }
catch ( std :: out_of_range &e ) {
342 FEMComponent :: saveContext(stream, mode);
355 if ( ( iores =
nodes.storeYourself(stream) ) !=
CIO_OK ) {
366 FEMComponent :: restoreContext(stream, mode);
379 if ( ( iores =
nodes.restoreYourself(stream) ) !=
CIO_OK ) {
Domain * giveDomain() const
Domain * domain
Link to domain object, useful for communicating with other FEM components.
int number
Component number.
FEMComponent(int n, Domain *d)
void followedBy(const IntArray &b, int allocChunk=0)
void zero()
Sets all component to zero.
void findNonzeros(const IntArray &logical)
IntArray elementEdges
Element numbers + boundary numbers (interleaved).
bool nodalListInitialized
std::string dofmanprops
Dof manager properties.
void computeIntArray(IntArray &answer, const IntArray &specified, std ::list< Range >ranges)
const IntArray & giveInternalElementDofManagerList()
IntArray totalNodes
Unique set of nodes (computed).
const IntArray & giveSurfaceList()
const IntArray & giveEdgeList()
IntArray nodes
Element numbers + internal dof manager numbers (interleaved).
const IntArray & giveBoundaryList()
void updateLocalNodeNumbering(EntityRenumberingFunctor &f)
const IntArray & giveElementList()
IntArray elements
Element numbers.
IntArray elementSurfaces
Element numbers + edge numbers (interleaved).
const IntArray & giveNodeList()
std::string elementprops
Element properties.
bool mElementListIsSorted
void updateLocalElementNumbering(EntityRenumberingFunctor &f)
IntArray elementBoundaries
IntArray elementInternalNodes
Element numbers + surface numbers (interleaved).
#define OOFEM_WARNING(...)
#define _IFT_Set_elementEdges
Interleaved array of element index + edge number.
#define _IFT_Set_elementBoundaries
Interleaved array of element index + boundary number.
#define _IFT_Set_elementRanges
List of element index ranges.
#define _IFT_Set_nodes
List of specific node indices.
#define _IFT_Set_elements
List of specific element indices.
#define _IFT_Set_internalElementNodes
Interleaved array of element index + internal node number.
#define _IFT_Set_nodeRanges
List of node index ranges.
#define _IFT_Set_allNodes
List of specific node indices.
#define _IFT_Set_elementSurfaces
Interleaved array of element index + surface number.
#define _IFT_Set_dofmanprops
Dof manager properties.
#define _IFT_Set_allElements
Will generate a list of all elements in the domain.
#define _IFT_Set_elementprops
Element properties.