61ConnectivityTable :: instanciateConnectivityTable()
66 int ndofMan =
domain->giveNumberOfDofManagers();
67 int nelems =
domain->giveNumberOfElements();
68 IntArray dofManConnectivity(ndofMan);
74 omp_set_lock(&initLock);
76 omp_unset_lock(&initLock);
82 for (
auto &elem :
domain->giveElements() ) {
83 int nnodes = elem->giveNumberOfDofManagers();
84 for (
int j = 1; j <= nnodes; j++ ) {
85 int jnode = elem->giveDofManager(j)->giveNumber();
86 dofManConnectivity.
at(jnode)++;
92 for (
int i = 0; i < ndofMan; i++ ) {
97 dofManConnectivity.
zero();
99 for (
int i = 1; i <= nelems; i++ ) {
102 for (
int j = 1; j <= nnodes; j++ ) {
111 omp_unset_lock(&initLock);
230 std::vector<std::set<int>> processedBoundaryEdges;
231 std::vector<std::set<int>> processedBoundarySurfaces;
234 IntArray bnodes, bnodesSorted, neighbors;
236 processedBoundaryEdges.
resize(
domain->giveNumberOfElements());
237 processedBoundarySurfaces.resize(
domain->giveNumberOfElements());
240 for (
auto &elem :
domain->elementList) {
244 int nedges = elem->giveNumberOfEdges();
245 for (
int i = 1; i <= nedges; i++) {
246 if (processedBoundaryEdges[elem->giveNumber()-1].find(i) != processedBoundaryEdges[elem->giveNumber()-1].end()) {
250 bnodes = elem->giveBoundaryEdgeNodes(i);
251 for (
int j = 1; j <= bnodes.
giveSize(); j++ ) {
252 bnodes.
at(j) = elem->giveDofManager(bnodes.
at(j))->giveNumber();
254 bnodesSorted = bnodes;
258 std::unique_ptr<SharedBoundaryEntity> sbe = std::make_unique<SharedBoundaryEntity>();
261 sbe->elements.push_back(er);
262 sbe->geomType = elem->giveEdgeGeometryType(i);
263 sbe->spatialDimension = 1;
266 elem->setSharedEdgeID(i, sbeIndex);
271 for (
auto neighborelem : neighbors) {
272 if (neighborelem == elem->giveNumber()) {
275 int neighborboundary = 0;
277 for (
int j = 1; j <=
domain->giveElement(neighborelem)->giveNumberOfEdges(); j++ ) {
279 neighborBoundaryNodes =
domain->giveElement(neighborelem)->giveBoundaryEdgeNodes(j);
280 for (
int k = 1; k <= neighborBoundaryNodes.
giveSize(); k++ ) {
281 neighborBoundaryNodes.
at(k) =
domain->giveElement(neighborelem)->giveDofManager(neighborBoundaryNodes.
at(k))->giveNumber();
285 for (
int k = 1; k <= neighborBoundaryNodes.
giveSize(); k++ ) {
286 if ( !bnodesSorted.
findSorted(neighborBoundaryNodes.
at(k))) {
292 neighborboundary = j;
296 if (neighborboundary) {
298 domain->giveElement(neighborelem)->setSharedEdgeID(neighborboundary, sbeIndex);
300 sbe->elements.push_back(er);
301 processedBoundaryEdges[neighborelem-1].insert(neighborboundary);
303 OOFEM_ERROR(
"Boundary entity not found in neighbor element");
316 for (
auto n: be->nodes) {
319 printf(
"elements/sides ");
320 for (
auto& p: be->elements) {
321 printf(
"%4d(%2d) ", p.elementID, p.boundaryID);