DOLFIN-X
DOLFIN-X C++ interface
utils.h
1 // Copyright (C) 2019-2020 Garth N. Wells
2 //
3 // This file is part of DOLFINX (https://www.fenicsproject.org)
4 //
5 // SPDX-License-Identifier: LGPL-3.0-or-later
6 
7 #pragma once
8 
9 #include <Eigen/Dense>
10 #include <dolfinx/graph/AdjacencyList.h>
11 
12 namespace dolfinx
13 {
14 namespace fem
15 {
16 class ElementDofLayout;
17 }
18 
19 namespace mesh
20 {
21 enum class CellType;
22 class Mesh;
23 class MeshEntity;
24 
34 graph::AdjacencyList<std::int64_t>
35 extract_topology(const CellType& cell_type, const fem::ElementDofLayout& layout,
36  const graph::AdjacencyList<std::int64_t>& cells);
37 
39 Eigen::ArrayXd volume_entities(const Mesh& mesh,
40  const Eigen::Ref<const Eigen::ArrayXi>& entities,
41  int dim);
42 
44 Eigen::ArrayXd circumradius(const Mesh& mesh,
45  const Eigen::Ref<const Eigen::ArrayXi>& entities,
46  int dim);
47 
49 Eigen::ArrayXd h(const Mesh& mesh,
50  const Eigen::Ref<const Eigen::ArrayXi>& entities, int dim);
51 
53 Eigen::ArrayXd inradius(const Mesh& mesh,
54  const Eigen::Ref<const Eigen::ArrayXi>& entities);
55 
57 Eigen::ArrayXd radius_ratio(const Mesh& mesh,
58  const Eigen::Ref<const Eigen::ArrayXi>& entities);
59 
61 Eigen::Array<double, Eigen::Dynamic, 3, Eigen::RowMajor>
62 cell_normals(const Mesh& mesh, int dim);
63 
65 Eigen::Vector3d normal(const MeshEntity& cell, int facet_local);
66 
68 Eigen::Array<double, Eigen::Dynamic, 3, Eigen::RowMajor> midpoints(
69  const mesh::Mesh& mesh, int dim,
70  const Eigen::Ref<const Eigen::Array<int, Eigen::Dynamic, 1>>& entities);
71 
84 Eigen::Array<std::int32_t, Eigen::Dynamic, 1> locate_entities_geometrical(
85  const mesh::Mesh& mesh, const int dim,
86  const std::function<Eigen::Array<bool, Eigen::Dynamic, 1>(
87  const Eigen::Ref<const Eigen::Array<double, 3, Eigen::Dynamic,
88  Eigen::RowMajor>>&)>& marker,
89  const bool boundary_only);
90 
91 } // namespace mesh
92 } // namespace dolfinx
dolfinx::mesh::extract_topology
graph::AdjacencyList< std::int64_t > extract_topology(const CellType &cell_type, const fem::ElementDofLayout &layout, const graph::AdjacencyList< std::int64_t > &cells)
Extract topology from cell data, i.e. extract cell vertices.
Definition: utils.cpp:321
dolfinx::mesh::CellType
CellType
Cell type identifier.
Definition: cell_types.h:22
dolfinx::mesh::circumradius
Eigen::ArrayXd circumradius(const Mesh &mesh, const Eigen::Ref< const Eigen::ArrayXi > &entities, int dim)
Compute circumradius of mesh entities.
Definition: utils.cpp:393
dolfinx::mesh::locate_entities_geometrical
Eigen::Array< std::int32_t, Eigen::Dynamic, 1 > locate_entities_geometrical(const mesh::Mesh &mesh, const int dim, const std::function< Eigen::Array< bool, Eigen::Dynamic, 1 >(const Eigen::Ref< const Eigen::Array< double, 3, Eigen::Dynamic, Eigen::RowMajor >> &)> &marker, const bool boundary_only)
Compute indicies (local to the process) of all mesh entities that evaluate to true for the provided m...
Definition: utils.cpp:728
dolfinx::mesh::cell_normals
Eigen::Array< double, Eigen::Dynamic, 3, Eigen::RowMajor > cell_normals(const Mesh &mesh, int dim)
Compute normal to given cell (viewed as embedded in 3D)
Definition: utils.cpp:462
dolfinx::mesh::volume_entities
Eigen::ArrayXd volume_entities(const Mesh &mesh, const Eigen::Ref< const Eigen::ArrayXi > &entities, int dim)
Compute (generalized) volume of mesh entities of given dimension.
Definition: utils.cpp:350
dolfinx::mesh::h
Eigen::ArrayXd h(const Mesh &mesh, const Eigen::Ref< const Eigen::ArrayXi > &entities, int dim)
Compute greatest distance between any two vertices.
Definition: utils.cpp:356
dolfinx::mesh::midpoints
Eigen::Array< double, Eigen::Dynamic, 3, Eigen::RowMajor > midpoints(const mesh::Mesh &mesh, int dim, const Eigen::Ref< const Eigen::Array< int, Eigen::Dynamic, 1 >> &entities)
Compute midpoints or mesh entities of a given dimension.
Definition: utils.cpp:665
dolfinx::mesh::normal
Eigen::Vector3d normal(const MeshEntity &cell, int facet_local)
Compute of given facet with respect to the cell.
Definition: utils.cpp:541
dolfinx::mesh::radius_ratio
Eigen::ArrayXd radius_ratio(const Mesh &mesh, const Eigen::Ref< const Eigen::ArrayXi > &entities)
Compute dim*inradius/circumradius for given cells.
Definition: utils.cpp:451
dolfinx::mesh::inradius
Eigen::ArrayXd inradius(const Mesh &mesh, const Eigen::Ref< const Eigen::ArrayXi > &entities)
Compute inradius of cells.
Definition: utils.cpp:399