Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
pugs
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
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
code
pugs
Compare revisions
dbc6302d7d0ccda97e9c256ffc615bf794c34dda to c6891a465204bb20e5234a8a890cfbb9f9339b0e
Compare revisions
Changes are shown as if the
source
revision was being merged into the
target
revision.
Learn more about comparing revisions.
Source
code/pugs
Select target project
No results found
c6891a465204bb20e5234a8a890cfbb9f9339b0e
Select Git revision
Branches
Nodal_diffusion
develop
feature/Navier-Stokes
feature/Nodal_diffusion
feature/composite-scheme
feature/composite-scheme-other-fluxes
feature/composite-scheme-sources
feature/coupling_module
feature/discontinuous-galerkin
feature/escobar-smoother
feature/explicit-gp-cfl
feature/gks
feature/gmsh-reader
feature/hypoelasticity
feature/hypoelasticity-clean
feature/implicit-solver
feature/implicit-solver-o2
feature/kinetic-schemes
feature/local-dt-fsi
feature/merge-local-dt-fsi
feature/polynomials
feature/reconstruction
feature/serraille
feature/variational-hydro
hyperplastic
master
navier-stokes
origin/stage/bouguettaia
save_clemence
test/voronoi1d
Tags
Kidder
v0
v0.0.1
v0.0.2
v0.0.3
v0.0.4
v0.1.0
v0.2.0
v0.3.0
v0.4.0
v0.4.1
v0.5.0
42 results
Swap
Target
code/pugs
Select target project
code/pugs
1 result
dbc6302d7d0ccda97e9c256ffc615bf794c34dda
Select Git revision
Branches
Nodal_diffusion
develop
feature/Navier-Stokes
feature/Nodal_diffusion
feature/composite-scheme
feature/composite-scheme-other-fluxes
feature/composite-scheme-sources
feature/coupling_module
feature/discontinuous-galerkin
feature/escobar-smoother
feature/explicit-gp-cfl
feature/gks
feature/gmsh-reader
feature/hypoelasticity
feature/hypoelasticity-clean
feature/implicit-solver
feature/implicit-solver-o2
feature/kinetic-schemes
feature/local-dt-fsi
feature/merge-local-dt-fsi
feature/polynomials
feature/reconstruction
feature/serraille
feature/variational-hydro
hyperplastic
master
navier-stokes
origin/stage/bouguettaia
save_clemence
test/voronoi1d
Tags
Kidder
v0
v0.0.1
v0.0.2
v0.0.3
v0.0.4
v0.1.0
v0.2.0
v0.3.0
v0.4.0
v0.4.1
v0.5.0
42 results
Show changes
Only incoming changes from source
Include changes to target since source was created
Compare
Commits on Source
2
Continue clean-up
· 6a486b89
Stéphane Del Pino
authored
2 weeks ago
6a486b89
Prepare support for 4.1 file format
· c6891a46
Stéphane Del Pino
authored
2 weeks ago
c6891a46
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/mesh/GmshReader.cpp
+257
-92
257 additions, 92 deletions
src/mesh/GmshReader.cpp
with
257 additions
and
92 deletions
src/mesh/GmshReader.cpp
View file @
c6891a46
...
...
@@ -19,7 +19,6 @@
#include
<charconv>
#include
<iostream>
#include
<map>
#include
<set>
#include
<sstream>
#include
<unordered_map>
...
...
@@ -40,8 +39,7 @@ GmshConnectivityBuilder<1>::GmshConnectivityBuilder(const GmshReader::GmshData&
Array
<
int
>
cell_number_vector
(
nb_cells
);
Array
<
unsigned
int
>
cell_to_node_row
(
nb_cells
+
1
);
parallel_for
(
cell_to_node_row
.
size
(),
PUGS_LAMBDA
(
const
CellId
cell_id
)
{
cell_to_node_row
[
cell_id
]
=
2
*
cell_id
;
});
parallel_for
(
cell_to_node_row
.
size
(),
PUGS_LAMBDA
(
const
CellId
cell_id
)
{
cell_to_node_row
[
cell_id
]
=
2
*
cell_id
;
});
Array
<
unsigned
int
>
cell_to_node_list
(
cell_to_node_row
[
cell_to_node_row
.
size
()
-
1
]);
for
(
CellId
cell_id
=
0
;
cell_id
<
nb_cells
;
++
cell_id
)
{
...
...
@@ -963,7 +961,33 @@ struct periodic_section : seq<TAO_PEGTL_STRING("$Periodic"), until<TAO_PEGTL_STR
{
};
struct
data_section
:
sor
<
physical_section
,
nodes_section
,
elements_section
,
periodic_section
>
struct
node_data_section
:
seq
<
TAO_PEGTL_STRING
(
"$NodeData"
),
until
<
TAO_PEGTL_STRING
(
"$EndNodeData"
)
>
,
ignored
>
{
};
struct
element_data_section
:
seq
<
TAO_PEGTL_STRING
(
"$ElementData"
),
until
<
TAO_PEGTL_STRING
(
"$EndElementData"
)
>
,
ignored
>
{
};
struct
element_node_data_section
:
seq
<
TAO_PEGTL_STRING
(
"$ElementNodeData"
),
until
<
TAO_PEGTL_STRING
(
"$EndElementNodeData"
)
>
,
ignored
>
{
};
struct
interpolation_scheme_section
:
seq
<
TAO_PEGTL_STRING
(
"$InterpolationScheme"
),
until
<
TAO_PEGTL_STRING
(
"$EndInterpolationScheme"
)
>
,
ignored
>
{
};
struct
data_section
:
sor
<
physical_section
,
nodes_section
,
elements_section
,
periodic_section
,
node_data_section
,
element_data_section
,
element_node_data_section
,
interpolation_scheme_section
>
{
};
...
...
@@ -971,7 +995,7 @@ struct grammar : must<ignored, meshformat, star<data_section>>
{
};
auto
parse_double
=
[](
std
::
string_view
sv
)
{
inline
auto
parse_double
=
[](
std
::
string_view
sv
)
{
double
value
;
auto
[
p1
,
ec1
]
=
std
::
from_chars
(
sv
.
data
(),
sv
.
data
()
+
sv
.
size
(),
value
);
if
((
ec1
!=
std
::
errc
())
or
(
p1
!=
sv
.
data
()
+
sv
.
size
()))
{
...
...
@@ -980,7 +1004,7 @@ auto parse_double = [](std::string_view sv) {
return
value
;
};
auto
parse_int
=
[](
std
::
string_view
sv
)
{
inline
auto
parse_int
=
[](
std
::
string_view
sv
)
{
int
integer
;
auto
[
p1
,
ec1
]
=
std
::
from_chars
(
sv
.
data
(),
sv
.
data
()
+
sv
.
size
(),
integer
);
if
((
ec1
!=
std
::
errc
())
or
(
p1
!=
sv
.
data
()
+
sv
.
size
()))
{
...
...
@@ -989,7 +1013,7 @@ auto parse_int = [](std::string_view sv) {
return
integer
;
};
auto
get_next_line
=
[](
std
::
string_view
&
body
)
->
std
::
string_view
{
inline
auto
get_next_line
=
[](
std
::
string_view
&
body
)
->
std
::
string_view
{
std
::
string_view
line
;
auto
nl
=
body
.
find
(
'\n'
);
if
(
nl
!=
std
::
string_view
::
npos
)
{
...
...
@@ -1002,7 +1026,7 @@ auto get_next_line = [](std::string_view& body) -> std::string_view {
return
line
;
};
auto
remove_embedding_spaces
=
[](
std
::
string_view
line
)
->
std
::
string_view
{
inline
auto
remove_embedding_spaces
=
[](
std
::
string_view
line
)
->
std
::
string_view
{
auto
first
=
line
.
find_first_not_of
(
"
\t\r
"
);
if
(
first
==
std
::
string_view
::
npos
)
{
line
=
{};
...
...
@@ -1013,46 +1037,105 @@ auto remove_embedding_spaces = [](std::string_view line) -> std::string_view {
return
line
;
};
constexpr
std
::
array
<
size_t
,
16
>
primitive_number_of_nodes
=
{
2
,
// edge
3
,
// triangle
4
,
// quadrangle
4
,
// tetrahedron
8
,
// hexaredron
6
,
// prism
5
,
// pyramid
3
,
// second order edge
6
,
// second order triangle
9
,
// second order quadrangle
10
,
// second order tetrahedron
27
,
// second order hexahedron
18
,
// second order prism
14
,
// second order pyramid
1
// point
};
inline
constexpr
int
number_of_gmsh_entities
=
93
;
inline
constexpr
auto
primitive_number_of_nodes
=
[]()
constexpr
{
std
::
array
<
short
,
number_of_gmsh_entities
>
number_of_nodes
;
number_of_nodes
.
fill
(
-
1
);
number_of_nodes
[
0
]
=
2
;
// edge
number_of_nodes
[
1
]
=
3
;
// triangle
number_of_nodes
[
2
]
=
4
;
// quadrangle
number_of_nodes
[
3
]
=
4
;
// tetrahedron
number_of_nodes
[
4
]
=
8
;
// hexaredron
number_of_nodes
[
5
]
=
6
;
// prism
number_of_nodes
[
6
]
=
5
;
// pyramid
number_of_nodes
[
7
]
=
3
;
// second order edge
number_of_nodes
[
8
]
=
6
;
// second order triangle
number_of_nodes
[
9
]
=
9
;
// second order quadrangle
number_of_nodes
[
10
]
=
10
;
// second order tetrahedron
number_of_nodes
[
11
]
=
27
;
// second order hexahedron
number_of_nodes
[
12
]
=
18
;
// second order prism
number_of_nodes
[
13
]
=
14
;
// second order pyramid
number_of_nodes
[
14
]
=
1
;
// point
number_of_nodes
[
15
]
=
8
;
// 8-node second order quadrangle
number_of_nodes
[
16
]
=
20
;
// 20-node second order hexahedron
number_of_nodes
[
17
]
=
15
;
// 15-node second order prism
number_of_nodes
[
18
]
=
13
;
// 13-node second order pyramid
number_of_nodes
[
19
]
=
9
;
// 9-node third order incomplete triangle
number_of_nodes
[
20
]
=
10
;
// 10-node third order triangle
number_of_nodes
[
21
]
=
12
;
// 12-node fourth order incomplete triangle
number_of_nodes
[
22
]
=
15
;
// 15-node fourth order triangle
number_of_nodes
[
33
]
=
15
;
// 15-node fifth order incomplete triangle
number_of_nodes
[
24
]
=
21
;
// 21-node fifth order complete triangle
number_of_nodes
[
25
]
=
4
;
// 4-node third order edge
number_of_nodes
[
26
]
=
5
;
// 5-node fourth order edge
number_of_nodes
[
27
]
=
6
;
// 6-node fifth order edge
number_of_nodes
[
28
]
=
20
;
// 20-node third order tetrahedron
number_of_nodes
[
29
]
=
35
;
// 35-node fourth order tetrahedron
number_of_nodes
[
30
]
=
56
;
// 56-node fifth order tetrahedron
number_of_nodes
[
91
]
=
64
;
// 64-node third order hexahedron
number_of_nodes
[
92
]
=
125
;
// 125-node fourth order hexahedron
return
number_of_nodes
;
}();
constexpr
std
::
array
<
std
::
string_view
,
16
>
element_name
=
{
"edges"
,
"triangles"
,
"quadrangles"
,
"tetrahedra"
,
"hexahedra"
,
"prisms"
,
"pyramids"
,
"second order edges"
,
"second order triangles"
,
"second order quadrangles"
,
"second order tetrahedra"
,
"second order hexahedra"
,
"second order prisms"
,
"second order pyramids"
,
"points"
//
};
inline
constexpr
auto
entity_name
=
[]()
constexpr
{
std
::
array
<
std
::
string_view
,
number_of_gmsh_entities
>
name
;
name
.
fill
(
"unknown"
);
name
[
0
]
=
"edges"
;
name
[
1
]
=
"triangles"
;
name
[
2
]
=
"quadrangles"
;
name
[
3
]
=
"tetrahedra"
;
name
[
4
]
=
"hexahedra"
;
name
[
5
]
=
"prisms"
;
name
[
6
]
=
"pyramids"
;
name
[
7
]
=
"second order edges"
;
name
[
8
]
=
"second order triangles"
;
name
[
9
]
=
"second order quadrangles"
;
name
[
10
]
=
"second order tetrahedra"
;
name
[
11
]
=
"second order hexahedra"
;
name
[
12
]
=
"second order prisms"
;
name
[
13
]
=
"second order pyramids"
;
name
[
14
]
=
"points"
;
name
[
15
]
=
"8-node second order quadrangle"
;
name
[
16
]
=
"20-node second order hexahedron"
;
name
[
17
]
=
"15-node second order prism"
;
name
[
18
]
=
"13-node second order pyramid"
;
name
[
19
]
=
"9-node third order incomplete triangle"
;
name
[
20
]
=
"10-node third order triangle"
;
name
[
21
]
=
"12-node fourth order incomplete triangle"
;
name
[
22
]
=
"15-node fourth order triangle"
;
name
[
33
]
=
"15-node fifth order incomplete triangle"
;
name
[
24
]
=
"21-node fifth order complete triangle"
;
name
[
25
]
=
"4-node third order edge"
;
name
[
26
]
=
"5-node fourth order edge"
;
name
[
27
]
=
"6-node fifth order edge"
;
name
[
28
]
=
"20-node third order tetrahedron"
;
name
[
29
]
=
"35-node fourth order tetrahedron"
;
name
[
30
]
=
"56-node fifth order tetrahedron"
;
name
[
91
]
=
"64-node third order hexahedron"
;
name
[
92
]
=
"125-node fourth order hexahedron"
;
return
name
;
}();
constexpr
std
::
array
<
bool
,
16
>
supported_element
//
=
{
true
,
true
,
true
,
true
,
true
,
true
,
true
,
false
,
false
,
false
,
false
,
false
,
false
,
false
,
true
};
inline
constexpr
auto
supported_entity
=
[]()
constexpr
{
std
::
array
<
bool
,
number_of_gmsh_entities
>
supported
;
supported
.
fill
(
false
);
supported
[
0
]
=
true
;
// edge
supported
[
1
]
=
true
;
// triangle
supported
[
2
]
=
true
;
// quadrangle
supported
[
3
]
=
true
;
// tetrahedron
supported
[
4
]
=
true
;
// hexaredron
supported
[
5
]
=
true
;
// prism
supported
[
6
]
=
true
;
// pyramid
supported
[
14
]
=
true
;
// point
return
supported
;
}();
auto
tokenize
=
[](
std
::
string_view
&
line
,
auto
&
tokens
)
{
inline
auto
tokenize
=
[](
std
::
string_view
&
line
,
auto
&
tokens
)
{
size_t
token_idx
=
0
;
while
(
not
line
.
empty
()
&&
token_idx
<
tokens
.
size
())
{
auto
space
=
line
.
find_first_of
(
"
\t\r
"
);
...
...
@@ -1074,7 +1157,7 @@ auto tokenize = [](std::string_view& line, auto& tokens) {
return
token_idx
;
};
auto
tokenize_variable
=
[](
std
::
string_view
&
line
,
std
::
vector
<
std
::
string_view
>&
tokens
)
{
inline
auto
tokenize_variable
=
[](
std
::
string_view
&
line
,
std
::
vector
<
std
::
string_view
>&
tokens
)
{
tokens
.
clear
();
while
(
not
line
.
empty
())
{
auto
space
=
line
.
find_first_of
(
"
\t\r
"
);
...
...
@@ -1101,6 +1184,10 @@ struct State
bool
has_nodes_section
=
false
;
bool
has_elements_section
=
false
;
bool
has_periodic_section
=
false
;
bool
has_node_data_section
=
false
;
bool
has_element_data_section
=
false
;
bool
has_element_node_data_section
=
false
;
bool
has_interpolation_scheme_section
=
false
;
};
template
<
typename
Rule
>
...
...
@@ -1144,6 +1231,23 @@ struct actions<meshformat>
}
std
::
cout
<<
"- Reading Gmsh format "
<<
gmsh_data
.
format
.
version
<<
'\n'
;
const
std
::
set
<
double
>
supported_versions
=
{
2.2
};
if
(
not
supported_versions
.
contains
(
gmsh_data
.
format
.
version
))
{
std
::
stringstream
error_msg
;
error_msg
<<
"Gmsh file format "
<<
gmsh_data
.
format
.
version
<<
" is not supported. Supported versions: "
;
bool
first
=
true
;
for
(
auto
version
:
supported_versions
)
{
if
(
not
first
)
{
error_msg
<<
", "
;
}
else
{
first
=
false
;
}
error_msg
<<
version
;
}
throw
NormalError
(
error_msg
.
str
());
}
if
(
gmsh_data
.
format
.
binary
)
{
throw
NotImplementedError
(
"binary format is not supported yet"
);
}
...
...
@@ -1389,17 +1493,17 @@ struct actions<elements_section>
gmsh_data
.
entity_number
[
i_element
]
=
parse_int
(
tokens
[
0
]);
const
int
entity_type
=
parse_int
(
tokens
[
1
])
-
1
;
if
((
entity_type
<
0
)
or
(
entity_type
>
15
))
{
throw
std
::
runtime_error
(
"unknown e
lement
type"
);
if
((
entity_type
<
0
)
or
(
entity_type
>
=
number_of_gmsh_entities
))
{
throw
std
::
runtime_error
(
"unknown e
ntity
type"
);
}
if
(
not
supported_e
lement
[
entity_type
])
{
throw
std
::
runtime_error
(
std
::
string
{
e
lement
_name
[
entity_type
]}
+
" is not supported"
);
if
(
not
supported_e
ntity
[
entity_type
])
{
throw
std
::
runtime_error
(
std
::
string
{
e
ntity
_name
[
entity_type
]}
+
" is not supported"
);
}
gmsh_data
.
entity_type
[
i_element
]
=
entity_type
;
int
nb_tags
=
parse_int
(
tokens
[
2
]);
if
(
nb_tags
<
0
)
{
throw
std
::
runtime_error
(
std
::
string
{
e
lement
_name
[
entity_type
]}
+
" number of tags is negative"
);
throw
std
::
runtime_error
(
std
::
string
{
e
ntity
_name
[
entity_type
]}
+
" number of tags is negative"
);
}
const
size_t
number_of_tags
=
nb_tags
;
...
...
@@ -1437,10 +1541,80 @@ struct actions<periodic_section>
state
.
has_periodic_section
=
true
;
}
std
::
cout
<<
"-- periodic names
\n
"
;
if
(
gmsh_data
.
format
.
version
==
2.2
)
{
std
::
cout
<<
" ["
<<
rang
::
fg
::
yellow
<<
"ignoring"
<<
rang
::
fg
::
reset
<<
" $Periodic section in Gmsh file format 2.2]
\n
"
;
}
}
};
template
<
>
struct
actions
<
node_data_section
>
{
template
<
typename
Input
>
static
void
apply
([[
maybe_unused
]]
const
Input
&
in
,
State
&
state
,
[[
maybe_unused
]]
GmshReader
::
GmshData
&
gmsh_data
)
{
if
(
state
.
has_node_data_section
)
{
throw
NormalError
(
"malformed Gmsh file, $NodeData section should appear only once"
);
}
else
{
state
.
has_node_data_section
=
true
;
}
std
::
cout
<<
" ["
<<
rang
::
fg
::
yellow
<<
"ignoring"
<<
rang
::
fg
::
reset
<<
" $NodeData section]
\n
"
;
}
};
template
<
>
struct
actions
<
element_data_section
>
{
template
<
typename
Input
>
static
void
apply
([[
maybe_unused
]]
const
Input
&
in
,
State
&
state
,
[[
maybe_unused
]]
GmshReader
::
GmshData
&
gmsh_data
)
{
if
(
state
.
has_element_data_section
)
{
throw
NormalError
(
"malformed Gmsh file, $ElementData section should appear only once"
);
}
else
{
state
.
has_element_data_section
=
true
;
}
std
::
cout
<<
" ["
<<
rang
::
fg
::
yellow
<<
"ignoring"
<<
rang
::
fg
::
reset
<<
" $ElementData section]
\n
"
;
}
};
template
<
>
struct
actions
<
element_node_data_section
>
{
template
<
typename
Input
>
static
void
apply
([[
maybe_unused
]]
const
Input
&
in
,
State
&
state
,
[[
maybe_unused
]]
GmshReader
::
GmshData
&
gmsh_data
)
{
if
(
state
.
has_element_node_data_section
)
{
throw
NormalError
(
"malformed Gmsh file, $ElementNodeData section should appear only once"
);
}
else
{
state
.
has_element_node_data_section
=
true
;
}
std
::
cout
<<
" ["
<<
rang
::
fg
::
yellow
<<
"ignoring"
<<
rang
::
fg
::
reset
<<
" $ElementNodeData section]
\n
"
;
}
};
template
<
>
struct
actions
<
interpolation_scheme_section
>
{
template
<
typename
Input
>
static
void
apply
([[
maybe_unused
]]
const
Input
&
in
,
State
&
state
,
[[
maybe_unused
]]
GmshReader
::
GmshData
&
gmsh_data
)
{
if
(
state
.
has_interpolation_scheme_section
)
{
throw
NormalError
(
"malformed Gmsh file, $InterpolationScheme section should appear only once"
);
}
else
{
state
.
has_interpolation_scheme_section
=
true
;
}
std
::
cout
<<
" ["
<<
rang
::
fg
::
yellow
<<
"ignoring"
<<
rang
::
fg
::
reset
<<
" $InterpolationScheme section]
\n
"
;
}
};
}
// namespace gmsh_parser
GmshReader
::
GmshReader
(
const
std
::
string
&
filename
)
:
m_filename
(
filename
)
...
...
@@ -1518,8 +1692,10 @@ GmshReader::GmshReader(const std::string& filename) : m_filename(filename)
void
GmshReader
::
__proceedData
()
{
TinyVector
<
15
,
int
>
element_number
=
zero
;
std
::
vector
<
std
::
set
<
size_t
>>
element_reference
(
15
);
constexpr
int
number_of_supported_entities
=
gmsh_parser
::
number_of_gmsh_entities
;
TinyVector
<
number_of_supported_entities
,
int
>
element_number
=
zero
;
std
::
vector
<
std
::
set
<
size_t
>>
element_reference
(
number_of_supported_entities
);
for
(
size_t
i
=
0
;
i
<
m_mesh_data
.
entity_type
.
size
();
++
i
)
{
const
int
elementType
=
m_mesh_data
.
entity_type
[
i
];
...
...
@@ -1529,18 +1705,8 @@ GmshReader::__proceedData()
for
(
size_t
i
=
0
;
i
<
element_number
.
dimension
();
++
i
)
{
if
(
element_number
[
i
]
>
0
)
{
std
::
cout
<<
" - Number of "
<<
gmsh_parser
::
element_name
[
i
]
<<
": "
<<
element_number
[
i
];
if
(
not
(
gmsh_parser
::
supported_element
[
i
]))
{
std
::
cout
<<
" ["
<<
rang
::
fg
::
yellow
<<
"IGNORED"
<<
rang
::
style
::
reset
<<
"]"
;
if
(
not
(
gmsh_parser
::
supported_entity
[
i
]))
{
}
else
{
std
::
cout
<<
" references: "
;
for
(
std
::
set
<
size_t
>::
const_iterator
iref
=
element_reference
[
i
].
begin
();
iref
!=
element_reference
[
i
].
end
();
++
iref
)
{
if
(
iref
!=
element_reference
[
i
].
begin
())
std
::
cout
<<
','
;
std
::
cout
<<
*
iref
;
}
switch
(
i
)
{
// Supported entities
case
0
:
{
// edges
...
...
@@ -1604,7 +1770,6 @@ GmshReader::__proceedData()
}
}
}
std
::
cout
<<
'\n'
;
}
}
...
...
@@ -1754,17 +1919,17 @@ GmshReader::__proceedData()
}
}
TinyVector
<
15
,
int
>
dimension0_mask
=
zero
;
TinyVector
<
number_of_supported_entities
,
int
>
dimension0_mask
=
zero
;
dimension0_mask
[
14
]
=
1
;
TinyVector
<
15
,
int
>
dimension1_mask
=
zero
;
TinyVector
<
number_of_supported_entities
,
int
>
dimension1_mask
=
zero
;
dimension1_mask
[
0
]
=
1
;
dimension1_mask
[
7
]
=
1
;
TinyVector
<
15
,
int
>
dimension2_mask
=
zero
;
TinyVector
<
number_of_supported_entities
,
int
>
dimension2_mask
=
zero
;
dimension2_mask
[
1
]
=
1
;
dimension2_mask
[
2
]
=
1
;
dimension2_mask
[
8
]
=
1
;
dimension2_mask
[
9
]
=
1
;
TinyVector
<
15
,
int
>
dimension3_mask
=
zero
;
TinyVector
<
number_of_supported_entities
,
int
>
dimension3_mask
=
zero
;
dimension3_mask
[
3
]
=
1
;
dimension3_mask
[
4
]
=
1
;
dimension3_mask
[
5
]
=
1
;
...
...
This diff is collapsed.
Click to expand it.