Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
gmsh
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Terraform modules
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Romin Tomasetti
gmsh
Commits
2a416062
Commit
2a416062
authored
6 years ago
by
Anthony Royer
Browse files
Options
Downloads
Patches
Plain Diff
size_t
parent
7e5b73ef
Branches
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
Mesh/meshPartition.cpp
+51
-53
51 additions, 53 deletions
Mesh/meshPartition.cpp
with
51 additions
and
53 deletions
Mesh/meshPartition.cpp
+
51
−
53
View file @
2a416062
...
@@ -79,21 +79,21 @@ class Graph
...
@@ -79,21 +79,21 @@ class Graph
// The number of partitions
// The number of partitions
unsigned
int
_nparts
;
unsigned
int
_nparts
;
// The number of elements
// The number of elements
unsigned
in
t
_ne
;
size_
t
_ne
;
// The number of nodes
// The number of nodes
unsigned
in
t
_nn
;
size_
t
_nn
;
// The dimension of the mesh
// The dimension of the mesh
unsigned
int
_dim
;
unsigned
int
_dim
;
// The list of nodes belonging to the ith element of the mesh are stored in
// The list of nodes belonging to the ith element of the mesh are stored in
// consecutive locations of eind starting at position eptr[i] up to (but not
// consecutive locations of eind starting at position eptr[i] up to (but not
// including) position eptr[i+1]. The size of the eind array is of size equal
// including) position eptr[i+1]. The size of the eind array is of size equal
// to the sum of the number of nodes in all the elements of the mesh.
// to the sum of the number of nodes in all the elements of the mesh.
std
::
vector
<
unsigned
in
t
>
_eind
;
std
::
vector
<
size_
t
>
_eind
;
// The size of the eptr array is n + 1, where n is the number of elements in
// The size of the eptr array is n + 1, where n is the number of elements in
// the mesh.
// the mesh.
std
::
vector
<
unsigned
in
t
>
_eptr
;
std
::
vector
<
size_
t
>
_eptr
;
// The metis graph structure
// The metis graph structure
std
::
vector
<
unsigned
in
t
>
_xadj
,
_adjncy
;
std
::
vector
<
size_
t
>
_xadj
,
_adjncy
;
// Elements corresponding to each graph elements in eptr
// Elements corresponding to each graph elements in eptr
std
::
vector
<
MElement
*>
_element
;
std
::
vector
<
MElement
*>
_element
;
// Vertices corresponding to each graph vertices in eptr
// Vertices corresponding to each graph vertices in eptr
...
@@ -139,36 +139,34 @@ class Graph
...
@@ -139,36 +139,34 @@ class Graph
clear
();
clear
();
}
}
unsigned
int
nparts
()
const
{
return
_nparts
;
};
unsigned
int
nparts
()
const
{
return
_nparts
;
};
unsigned
in
t
ne
()
const
{
return
_ne
;
};
size_
t
ne
()
const
{
return
_ne
;
};
unsigned
in
t
nn
()
const
{
return
_nn
;
};
size_
t
nn
()
const
{
return
_nn
;
};
unsigned
int
dim
()
const
{
return
_dim
;
};
unsigned
int
dim
()
const
{
return
_dim
;
};
unsigned
int
eind
(
unsigned
int
i
)
const
{
return
_eind
[
i
];
};
size_t
eind
(
size_t
i
)
const
{
return
_eind
[
i
];
};
std
::
vector
<
unsigned
int
>
eind
()
const
{
return
_eind
;
};
size_t
eptr
(
size_t
i
)
const
{
return
_eptr
[
i
];
};
unsigned
int
eptr
(
unsigned
int
i
)
const
{
return
_eptr
[
i
];
};
size_t
xadj
(
size_t
i
)
const
{
return
_xadj
[
i
];
};
std
::
vector
<
unsigned
int
>
eptr
()
const
{
return
_eptr
;
};
std
::
vector
<
size_t
>
&
xadj
()
{
return
_xadj
;
};
unsigned
int
xadj
(
unsigned
int
i
)
const
{
return
_xadj
[
i
];
};
size_t
adjncy
(
size_t
i
)
const
{
return
_adjncy
[
i
];
};
std
::
vector
<
unsigned
int
>
xadj
()
const
{
return
_xadj
;
};
std
::
vector
<
size_t
>
&
adjncy
()
{
return
_adjncy
;
};
unsigned
int
adjncy
(
unsigned
int
i
)
const
{
return
_adjncy
[
i
];
};
MElement
*
element
(
size_t
i
)
const
{
return
_element
[
i
];
};
std
::
vector
<
unsigned
int
>
adjncy
()
const
{
return
_adjncy
;
};
int
vertex
(
size_t
i
)
const
{
return
_vertex
[
i
];
};
MElement
*
element
(
unsigned
int
i
)
const
{
return
_element
[
i
];
};
std
::
vector
<
unsigned
int
>
&
vwgt
()
{
return
_vwgt
;
};
int
vertex
(
unsigned
int
i
)
const
{
return
_vertex
[
i
];
};
std
::
vector
<
unsigned
int
>
vwgt
()
const
{
return
_vwgt
;
};
unsigned
int
partition
(
unsigned
int
i
)
const
{
return
_partition
[
i
];
};
unsigned
int
partition
(
unsigned
int
i
)
const
{
return
_partition
[
i
];
};
std
::
vector
<
unsigned
int
>
partition
()
const
{
return
_partition
;
};
std
::
vector
<
unsigned
int
>
&
partition
()
{
return
_partition
;
};
unsigned
in
t
numNodes
()
const
{
return
_ne
;
};
size_
t
numNodes
()
const
{
return
_ne
;
};
unsigned
in
t
numEdges
()
const
{
return
_xadj
[
_ne
]
/
2
;
};
size_
t
numEdges
()
const
{
return
_xadj
[
_ne
]
/
2
;
};
void
nparts
(
unsigned
int
nparts
)
{
_nparts
=
nparts
;
};
void
nparts
(
unsigned
int
nparts
)
{
_nparts
=
nparts
;
};
void
ne
(
unsigned
in
t
ne
)
{
_ne
=
ne
;
};
void
ne
(
size_
t
ne
)
{
_ne
=
ne
;
};
void
nn
(
unsigned
in
t
nn
)
{
_nn
=
nn
;
};
void
nn
(
size_
t
nn
)
{
_nn
=
nn
;
};
void
dim
(
unsigned
int
dim
)
{
_dim
=
dim
;
};
void
dim
(
unsigned
int
dim
)
{
_dim
=
dim
;
};
void
eindResize
(
size_t
size
)
{
_eind
.
resize
(
size
,
0
);
}
void
eindResize
(
size_t
size
)
{
_eind
.
resize
(
size
,
0
);
}
void
eind
(
size_t
i
,
unsigned
in
t
eind
)
{
_eind
[
i
]
=
eind
;
};
void
eind
(
size_t
i
,
size_
t
eind
)
{
_eind
[
i
]
=
eind
;
};
void
eptrResize
(
size_t
size
)
{
_eptr
.
resize
(
size
,
0
);
}
void
eptrResize
(
size_t
size
)
{
_eptr
.
resize
(
size
,
0
);
}
void
eptr
(
size_t
i
,
unsigned
in
t
eptr
)
{
_eptr
[
i
]
=
eptr
;
};
void
eptr
(
size_t
i
,
size_
t
eptr
)
{
_eptr
[
i
]
=
eptr
;
};
void
elementResize
(
size_t
size
){
_element
.
resize
(
size
,
0
);
}
void
elementResize
(
size_t
size
){
_element
.
resize
(
size
,
0
);
}
void
element
(
size_t
i
,
MElement
*
element
)
{
_element
[
i
]
=
element
;
};
void
element
(
size_t
i
,
MElement
*
element
)
{
_element
[
i
]
=
element
;
};
void
vertexResize
(
size_t
size
)
{
_vertex
.
resize
(
size
,
-
1
);
}
void
vertexResize
(
size_t
size
)
{
_vertex
.
resize
(
size
,
-
1
);
}
void
adjncy
(
size_t
i
,
unsigned
in
t
adjncy
)
{
_adjncy
[
i
]
=
adjncy
;
};
void
adjncy
(
size_t
i
,
size_
t
adjncy
)
{
_adjncy
[
i
]
=
adjncy
;
};
void
vertex
(
size_t
i
,
int
vertex
)
{
_vertex
[
i
]
=
vertex
;
};
void
vertex
(
size_t
i
,
int
vertex
)
{
_vertex
[
i
]
=
vertex
;
};
void
vwgt
(
std
::
vector
<
unsigned
int
>
&
vwgt
)
{
std
::
swap
(
_vwgt
,
vwgt
);
};
void
vwgt
(
std
::
vector
<
unsigned
int
>
&
vwgt
)
{
std
::
swap
(
_vwgt
,
vwgt
);
};
void
partition
(
std
::
vector
<
unsigned
int
>
&
partition
)
{
std
::
swap
(
_partition
,
partition
);
};
void
partition
(
std
::
vector
<
unsigned
int
>
&
partition
)
{
std
::
swap
(
_partition
,
partition
);
};
...
@@ -197,8 +195,8 @@ class Graph
...
@@ -197,8 +195,8 @@ class Graph
{
{
std
::
vector
<
std
::
set
<
MElement
*>
>
elements
std
::
vector
<
std
::
set
<
MElement
*>
>
elements
((
size
?
size
:
_nparts
),
std
::
set
<
MElement
*>
());
((
size
?
size
:
_nparts
),
std
::
set
<
MElement
*>
());
for
(
unsigned
in
t
i
=
0
;
i
<
_ne
;
++
i
){
for
(
size_
t
i
=
0
;
i
<
_ne
;
++
i
){
for
(
unsigned
in
t
j
=
_xadj
[
i
];
j
<
_xadj
[
i
+
1
];
++
j
){
for
(
size_
t
j
=
_xadj
[
i
];
j
<
_xadj
[
i
+
1
];
++
j
){
if
(
_partition
[
i
]
!=
_partition
[
_adjncy
[
j
]]){
if
(
_partition
[
i
]
!=
_partition
[
_adjncy
[
j
]]){
if
(
_element
[
i
]
->
getDim
()
==
(
int
)
_dim
){
if
(
_element
[
i
]
->
getDim
()
==
(
int
)
_dim
){
elements
[
_partition
[
i
]].
insert
(
_element
[
i
]);
elements
[
_partition
[
i
]].
insert
(
_element
[
i
]);
...
@@ -234,9 +232,9 @@ class Graph
...
@@ -234,9 +232,9 @@ class Graph
}
}
}
}
for
(
unsigned
in
t
i
=
0
;
i
<
_ne
;
++
i
){
for
(
size_
t
i
=
0
;
i
<
_ne
;
++
i
){
std
::
set
<
short
>
ghostCellsPartition
;
std
::
set
<
short
>
ghostCellsPartition
;
for
(
unsigned
in
t
j
=
_xadj
[
i
];
j
<
_xadj
[
i
+
1
];
j
++
){
for
(
size_
t
j
=
_xadj
[
i
];
j
<
_xadj
[
i
+
1
];
j
++
){
if
(
_partition
[
i
]
!=
_partition
[
_adjncy
[
j
]]
&&
if
(
_partition
[
i
]
!=
_partition
[
_adjncy
[
j
]]
&&
ghostCellsPartition
.
find
(
_partition
[
_adjncy
[
j
]])
==
ghostCellsPartition
.
end
()){
ghostCellsPartition
.
find
(
_partition
[
_adjncy
[
j
]])
==
ghostCellsPartition
.
end
()){
if
(
_element
[
i
]
->
getDim
()
==
(
int
)
_dim
){
if
(
_element
[
i
]
->
getDim
()
==
(
int
)
_dim
){
...
@@ -265,21 +263,21 @@ class Graph
...
@@ -265,21 +263,21 @@ class Graph
void
createDualGraph
(
bool
connectedAll
)
void
createDualGraph
(
bool
connectedAll
)
{
{
std
::
vector
<
unsigned
in
t
>
nptr
(
_nn
+
1
,
0
);
std
::
vector
<
size_
t
>
nptr
(
_nn
+
1
,
0
);
std
::
vector
<
unsigned
in
t
>
nind
(
_eptr
[
_ne
],
0
);
std
::
vector
<
size_
t
>
nind
(
_eptr
[
_ne
],
0
);
for
(
unsigned
in
t
i
=
0
;
i
<
_ne
;
++
i
){
for
(
size_
t
i
=
0
;
i
<
_ne
;
++
i
){
for
(
unsigned
in
t
j
=
_eptr
[
i
];
j
<
_eptr
[
i
+
1
];
++
j
){
for
(
size_
t
j
=
_eptr
[
i
];
j
<
_eptr
[
i
+
1
];
++
j
){
nptr
[
_eind
[
j
]]
++
;
nptr
[
_eind
[
j
]]
++
;
}
}
}
}
for
(
unsigned
in
t
i
=
1
;
i
<
_nn
;
++
i
)
nptr
[
i
]
+=
nptr
[
i
-
1
];
for
(
size_
t
i
=
1
;
i
<
_nn
;
++
i
)
nptr
[
i
]
+=
nptr
[
i
-
1
];
for
(
unsigned
in
t
i
=
_nn
;
i
>
0
;
--
i
)
nptr
[
i
]
=
nptr
[
i
-
1
];
for
(
size_
t
i
=
_nn
;
i
>
0
;
--
i
)
nptr
[
i
]
=
nptr
[
i
-
1
];
nptr
[
0
]
=
0
;
nptr
[
0
]
=
0
;
for
(
unsigned
in
t
i
=
0
;
i
<
_ne
;
++
i
){
for
(
size_
t
i
=
0
;
i
<
_ne
;
++
i
){
for
(
unsigned
in
t
j
=
_eptr
[
i
];
j
<
_eptr
[
i
+
1
];
++
j
){
for
(
size_
t
j
=
_eptr
[
i
];
j
<
_eptr
[
i
+
1
];
++
j
){
nind
[
nptr
[
_eind
[
j
]]
++
]
=
i
;
nind
[
nptr
[
_eind
[
j
]]
++
]
=
i
;
}
}
}
}
...
@@ -288,13 +286,13 @@ class Graph
...
@@ -288,13 +286,13 @@ class Graph
nptr
[
0
]
=
0
;
nptr
[
0
]
=
0
;
_xadj
.
resize
(
_ne
+
1
,
0
);
_xadj
.
resize
(
_ne
+
1
,
0
);
std
::
vector
<
unsigned
in
t
>
nbrs
(
_ne
,
0
);
std
::
vector
<
size_
t
>
nbrs
(
_ne
,
0
);
std
::
vector
<
unsigned
int
>
marker
(
_ne
,
0
);
std
::
vector
<
unsigned
int
>
marker
(
_ne
,
0
);
for
(
unsigned
in
t
i
=
0
;
i
<
_ne
;
++
i
){
for
(
size_
t
i
=
0
;
i
<
_ne
;
++
i
){
unsigned
in
t
l
=
0
;
size_
t
l
=
0
;
for
(
unsigned
in
t
j
=
_eptr
[
i
];
j
<
_eptr
[
i
+
1
];
++
j
){
for
(
size_
t
j
=
_eptr
[
i
];
j
<
_eptr
[
i
+
1
];
++
j
){
for
(
unsigned
in
t
k
=
nptr
[
_eind
[
j
]];
k
<
nptr
[
_eind
[
j
]
+
1
];
++
k
){
for
(
size_
t
k
=
nptr
[
_eind
[
j
]];
k
<
nptr
[
_eind
[
j
]
+
1
];
++
k
){
if
(
nind
[
k
]
!=
i
){
if
(
nind
[
k
]
!=
i
){
if
(
marker
[
nind
[
k
]]
==
0
)
nbrs
[
l
++
]
=
nind
[
k
];
if
(
marker
[
nind
[
k
]]
==
0
)
nbrs
[
l
++
]
=
nind
[
k
];
marker
[
nind
[
k
]]
++
;
marker
[
nind
[
k
]]
++
;
...
@@ -303,7 +301,7 @@ class Graph
...
@@ -303,7 +301,7 @@ class Graph
}
}
unsigned
int
nbrsNeighbors
=
0
;
unsigned
int
nbrsNeighbors
=
0
;
for
(
unsigned
in
t
j
=
0
;
j
<
l
;
j
++
){
for
(
size_
t
j
=
0
;
j
<
l
;
j
++
){
if
(
marker
[
nbrs
[
j
]]
>=
if
(
marker
[
nbrs
[
j
]]
>=
(
connectedAll
?
1
:
(
connectedAll
?
1
:
_element
[
i
]
->
numCommonNodesInDualGraph
(
_element
[
nbrs
[
j
]])))
_element
[
i
]
->
numCommonNodesInDualGraph
(
_element
[
nbrs
[
j
]])))
...
@@ -315,16 +313,16 @@ class Graph
...
@@ -315,16 +313,16 @@ class Graph
_xadj
[
i
]
=
nbrsNeighbors
;
_xadj
[
i
]
=
nbrsNeighbors
;
}
}
for
(
unsigned
in
t
i
=
1
;
i
<
_ne
;
++
i
)
_xadj
[
i
]
=
_xadj
[
i
]
+
_xadj
[
i
-
1
];
for
(
size_
t
i
=
1
;
i
<
_ne
;
++
i
)
_xadj
[
i
]
=
_xadj
[
i
]
+
_xadj
[
i
-
1
];
for
(
unsigned
in
t
i
=
_ne
;
i
>
0
;
--
i
)
_xadj
[
i
]
=
_xadj
[
i
-
1
];
for
(
size_
t
i
=
_ne
;
i
>
0
;
--
i
)
_xadj
[
i
]
=
_xadj
[
i
-
1
];
_xadj
[
0
]
=
0
;
_xadj
[
0
]
=
0
;
_adjncy
.
resize
(
_xadj
[
_ne
],
0
);
_adjncy
.
resize
(
_xadj
[
_ne
],
0
);
for
(
unsigned
in
t
i
=
0
;
i
<
_ne
;
++
i
){
for
(
size_
t
i
=
0
;
i
<
_ne
;
++
i
){
unsigned
in
t
l
=
0
;
size_
t
l
=
0
;
for
(
unsigned
in
t
j
=
_eptr
[
i
];
j
<
_eptr
[
i
+
1
];
++
j
){
for
(
size_
t
j
=
_eptr
[
i
];
j
<
_eptr
[
i
+
1
];
++
j
){
for
(
unsigned
in
t
k
=
nptr
[
_eind
[
j
]];
k
<
nptr
[
_eind
[
j
]
+
1
];
++
k
){
for
(
size_
t
k
=
nptr
[
_eind
[
j
]];
k
<
nptr
[
_eind
[
j
]
+
1
];
++
k
){
if
(
nind
[
k
]
!=
i
){
if
(
nind
[
k
]
!=
i
){
if
(
marker
[
nind
[
k
]]
==
0
)
nbrs
[
l
++
]
=
nind
[
k
];
if
(
marker
[
nind
[
k
]]
==
0
)
nbrs
[
l
++
]
=
nind
[
k
];
marker
[
nind
[
k
]]
++
;
marker
[
nind
[
k
]]
++
;
...
@@ -332,7 +330,7 @@ class Graph
...
@@ -332,7 +330,7 @@ class Graph
}
}
}
}
for
(
unsigned
in
t
j
=
0
;
j
<
l
;
++
j
){
for
(
size_
t
j
=
0
;
j
<
l
;
++
j
){
if
(
marker
[
nbrs
[
j
]]
>=
if
(
marker
[
nbrs
[
j
]]
>=
(
connectedAll
?
1
:
(
connectedAll
?
1
:
_element
[
i
]
->
numCommonNodesInDualGraph
(
_element
[
nbrs
[
j
]]))){
_element
[
i
]
->
numCommonNodesInDualGraph
(
_element
[
nbrs
[
j
]]))){
...
@@ -343,7 +341,7 @@ class Graph
...
@@ -343,7 +341,7 @@ class Graph
nbrs
[
j
]
=
0
;
nbrs
[
j
]
=
0
;
}
}
}
}
for
(
unsigned
in
t
i
=
_ne
;
i
>
0
;
--
i
)
_xadj
[
i
]
=
_xadj
[
i
-
1
];
for
(
size_
t
i
=
_ne
;
i
>
0
;
--
i
)
_xadj
[
i
]
=
_xadj
[
i
-
1
];
_xadj
[
0
]
=
0
;
_xadj
[
0
]
=
0
;
}
}
};
};
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment