PolyDiM
C++ library for POLYtopal DIscretization Methods
Loading...
Searching...
No Matches
PDE_Mesh_Utilities.hpp
Go to the documentation of this file.
1// _LICENSE_HEADER_
2//
3// Copyright (C) 2019 - 2025.
4// Terms register on the GPL-3.0 license.
5//
6// This file can be redistributed and/or modified under the license terms.
7//
8// See top level LICENSE file for more details.
9//
10// This file can be used citing references in CITATION.cff file.
11
12#ifndef __PDETOOLS_MESH_PDE_Mesh_Utilities_HPP
13#define __PDETOOLS_MESH_PDE_Mesh_Utilities_HPP
14
17#include "MeshMatricesDAO.hpp"
18#include "MeshUtilities.hpp"
19
20namespace Polydim
21{
22namespace PDETools
23{
24namespace Mesh
25{
26
35namespace PDE_Mesh_Utilities
36{
37
39class PDE_Domain_1D final
40{
41 public:
42 Eigen::MatrixXd vertices;
43 double length;
44};
45
47class PDE_Domain_2D final
48{
49 public:
52 {
53 Parallelogram = 0,
54 Polygon = 1,
55 Ellipse = 2,
56 Unknown = 3
57 };
58
59 Eigen::MatrixXd vertices;
60 double area;
61
62 // Ellipse type
63 double radius_1;
64 double radius_2;
65 Eigen::Vector3d center;
66 Eigen::Vector3d rotation_angle;
67
69};
70
77
79class PDE_Domain_3D final
80{
81 public:
83 {
85 Polygon = 1
86 };
87
88 Eigen::MatrixXd vertices;
89 Eigen::MatrixXi edges;
90 std::vector<Eigen::MatrixXi> faces;
91 double volume;
93};
94
96{
97 Equispaced = 0,
98 Minimal = 2,
99 CsvImporter = 1,
100};
101
103{
104 Triangular = 0,
105 Minimal = 1,
106 Polygonal = 2,
107 OFFImporter = 3,
108 CsvImporter = 4,
109 Squared = 5,
110 RandomDistorted = 6,
114};
115
117{
118 Tetrahedral = 0,
119 Minimal = 1,
120 Polyhedral = 2,
121 OVMImporter = 3,
122 VtkImporter = 4,
123 CsvImporter = 5,
124 Cubic = 6
125};
126
140inline void create_mesh_1D(const Gedim::GeometryUtilities &geometry_utilities,
141 const Gedim::MeshUtilities &mesh_utilities,
144 const double &max_relative_length,
146{
147 switch (mesh_type)
148 {
150 const Eigen::Vector3d segment_origin = pde_domain.vertices.col(0);
151 const Eigen::Vector3d segment_tangent = pde_domain.vertices.col(1) - segment_origin;
152 const std::vector<double> coordinates = {0.0, 1.0};
153 mesh_utilities.FillMesh1D(geometry_utilities, segment_origin, segment_tangent, coordinates, mesh);
154 }
155 break;
157 const Eigen::Vector3d segment_origin = pde_domain.vertices.col(0);
158 const Eigen::Vector3d segment_tangent = pde_domain.vertices.col(1) - segment_origin;
159 const unsigned int num_points = round(1.0 / max_relative_length) + 1;
160
161 mesh_utilities.FillMesh1D(geometry_utilities,
162 segment_origin,
163 segment_tangent,
164 geometry_utilities.EquispaceCoordinates(num_points, 0.0, 1.0, true),
165 mesh);
166 }
167 break;
168 default:
169 throw std::runtime_error("MeshGenerator_Types_1D " + std::to_string((unsigned int)mesh_type) + " not supported");
170 }
171}
172
189inline void create_mesh_2D(const Gedim::GeometryUtilities &geometry_utilities,
190 const Gedim::MeshUtilities &mesh_utilities,
193 const double &max_relative_area,
195{
196 switch (mesh_type)
197 {
199#if ENABLE_TRIANGLE == 0
200 throw std::runtime_error("Triangle library not active");
201#endif
202 const double max_cell_area = pde_domain.area * max_relative_area;
203 mesh_utilities.CreateTriangularMesh(pde_domain.vertices, max_cell_area, mesh);
204 }
205 break;
207 const std::vector<unsigned int> markers = {};
208 mesh_utilities.Mesh2DFromPolygon(pde_domain.vertices, markers, markers, mesh);
209 }
210 break;
212#if ENABLE_VORO == 0
213 throw std::runtime_error("Voro library not active");
214#endif
215 const unsigned num_cells = static_cast<unsigned int>(std::max(1.0, 1.0 / max_relative_area));
216
217 mesh_utilities.CreatePolygonalMesh(geometry_utilities, pde_domain.vertices, num_cells, 10, mesh, 10);
218 }
219 break;
221 switch (pde_domain.shape_type)
222 {
224 break;
225 default:
226 throw std::runtime_error("Squared mesh cannot be created");
227 }
228
229 const double max_cell_edge = sqrt(pde_domain.area * max_relative_area);
230
231 const Eigen::Vector3d domain_origin = pde_domain.vertices.col(0);
232 const Eigen::Vector3d domain_base_tangent = pde_domain.vertices.col(1) - domain_origin;
233 const Eigen::Vector3d domain_height_tangent = pde_domain.vertices.rightCols(1) - domain_origin;
234 const unsigned int num_cells_base = ceil(domain_base_tangent.norm() / max_cell_edge);
235 const unsigned int num_cells_height = ceil(domain_height_tangent.norm() / max_cell_edge);
236
237 mesh_utilities.CreateRectangleMesh(domain_origin,
238 domain_base_tangent,
239 domain_height_tangent,
240 geometry_utilities.EquispaceCoordinates(num_cells_base + 1, 0.0, 1.0, true),
241 geometry_utilities.EquispaceCoordinates(num_cells_height + 1, 0.0, 1.0, true),
242 mesh);
243 }
244 break;
246 switch (pde_domain.shape_type)
247 {
249 break;
250 default:
251 throw std::runtime_error("Squared mesh cannot be created");
252 }
253
254 const double max_cell_edge = sqrt(pde_domain.area * max_relative_area);
255
256 const Eigen::Vector3d domain_origin = pde_domain.vertices.col(0);
257 const Eigen::Vector3d domain_base_tangent = pde_domain.vertices.col(1) - domain_origin;
258 const Eigen::Vector3d domain_height_tangent = pde_domain.vertices.rightCols(1) - domain_origin;
259 const unsigned int num_cells_base = ceil(domain_base_tangent.norm() / max_cell_edge);
260 const unsigned int num_cells_height = ceil(domain_height_tangent.norm() / max_cell_edge);
261
262 mesh_utilities.CreateStructuredTriangularMesh(domain_origin,
263 domain_base_tangent,
264 domain_height_tangent,
265 geometry_utilities.EquispaceCoordinates(num_cells_base + 1, 0.0, 1.0, true),
266 geometry_utilities.EquispaceCoordinates(num_cells_height + 1, 0.0, 1.0, true),
267 mesh);
268 }
269 break;
271 switch (pde_domain.shape_type)
272 {
274 break;
275 default:
276 throw std::runtime_error("Squared mesh cannot be created");
277 }
278
279 const double max_cell_edge = sqrt(pde_domain.area * max_relative_area);
280
281 const Eigen::Vector3d domain_origin = pde_domain.vertices.col(0);
282 const Eigen::Vector3d domain_base_tangent = pde_domain.vertices.col(1) - domain_origin;
283 const Eigen::Vector3d domain_height_tangent = pde_domain.vertices.rightCols(1) - domain_origin;
284 const unsigned int num_cells_base = ceil(domain_base_tangent.norm() / max_cell_edge);
285 const unsigned int num_cells_height = ceil(domain_height_tangent.norm() / max_cell_edge);
286
287 mesh_utilities.CreateRandomlyDeformedQuadrilaterals(geometry_utilities,
288 domain_origin,
289 domain_base_tangent,
290 domain_height_tangent,
291 num_cells_base,
292 num_cells_height,
293 0.4,
294 0.4,
295 mesh);
296 }
297 break;
299 const double max_cell_area = pde_domain.area * max_relative_area;
300 mesh_utilities.CreateQuadrilateralMeshFromTriangularMesh(geometry_utilities, pde_domain.vertices, max_cell_area, mesh);
301 }
302 break;
303 default:
304 throw std::runtime_error("MeshGenerator_Types_2D " + std::to_string((unsigned int)mesh_type) + " not supported");
305 }
306}
307
323inline void create_mesh_3D(const Gedim::GeometryUtilities &geometry_utilities,
324 const Gedim::MeshUtilities &mesh_utilities,
327 const double &max_relative_volume,
329{
330 switch (mesh_type)
331 {
333#if ENABLE_TETGEN == 0
334 throw std::runtime_error("Tetgen library not active");
335#endif
336 const double max_cell_volume = pde_domain.volume * max_relative_volume;
337 mesh_utilities.CreateTetrahedralMesh(pde_domain.vertices, pde_domain.edges, pde_domain.faces, max_cell_volume, mesh);
338 }
339 break;
341 const std::vector<unsigned int> markers = {};
342 mesh_utilities.Mesh3DFromPolyhedron(pde_domain.vertices, pde_domain.edges, pde_domain.faces, markers, markers, markers, mesh);
343 }
344 break;
346#if ENABLE_VORO == 0
347 throw std::runtime_error("Voro library not active");
348#endif
349 const unsigned num_cells = static_cast<unsigned int>(std::max(1.0, 1.0 / max_relative_volume));
350
351 mesh_utilities.CreatePolyhedralMesh(geometry_utilities, pde_domain.vertices, pde_domain.edges, pde_domain.faces, num_cells, 10, mesh, 10);
352 }
353 break;
355 switch (pde_domain.shape_type)
356 {
358 break;
359 default:
360 throw std::runtime_error("Cubic mesh cannot be created");
361 }
362
363 const double max_cell_edge = std::cbrt(pde_domain.volume * max_relative_volume);
364
365 const Eigen::Vector3d domain_origin = pde_domain.vertices.col(0);
366 const Eigen::Vector3d domain_base_tangent = pde_domain.vertices.col(1) - domain_origin;
367 const Eigen::Vector3d domain_width_tangent = pde_domain.vertices.col(4) - domain_origin;
368 const Eigen::Vector3d domain_heigth_tangent = pde_domain.vertices.col(3) - domain_origin;
369 const unsigned int num_cells_base = round(domain_base_tangent.norm() / max_cell_edge);
370 const unsigned int num_cells_width = round(domain_width_tangent.norm() / max_cell_edge);
371 const unsigned int num_cells_height = round(domain_heigth_tangent.norm() / max_cell_edge);
372
373 mesh_utilities.CreateParallelepipedMesh(domain_origin,
374 domain_base_tangent,
375 domain_heigth_tangent,
376 domain_width_tangent,
377 geometry_utilities.EquispaceCoordinates(num_cells_base + 1, 0.0, 1.0, true),
378 geometry_utilities.EquispaceCoordinates(num_cells_height + 1, 0.0, 1.0, true),
379 geometry_utilities.EquispaceCoordinates(num_cells_width + 1, 0.0, 1.0, true),
380 mesh);
381 }
382 break;
383 default:
384 throw std::runtime_error("MeshGenerator_Types_3D " + std::to_string((unsigned int)mesh_type) + " not supported");
385 }
386}
387
395 const std::string &file_path,
397{
398 switch (mesh_type)
399 {
401 Gedim::MeshFromCsvUtilities importerUtilities;
402 Gedim::MeshFromCsvUtilities::Configuration meshImporterConfiguration;
403 meshImporterConfiguration.Folder = file_path;
404 meshImporterConfiguration.Separator = ';';
405 Gedim::MeshDAOImporterFromCsv importer(importerUtilities);
406 importer.Import(meshImporterConfiguration, mesh);
407 }
408 break;
409 default:
410 throw std::runtime_error("MeshGenerator_Types_1D " + std::to_string((unsigned int)mesh_type) + " not supported");
411 }
412}
413
425inline void import_mesh_2D(const Gedim::GeometryUtilities &geometry_utilities,
426 const Gedim::MeshUtilities &mesh_utilities,
428 const std::string &file_path,
430{
431 switch (mesh_type)
432 {
434 Gedim::MeshFromCsvUtilities importerUtilities;
435 Gedim::MeshFromCsvUtilities::Configuration meshImporterConfiguration;
436 meshImporterConfiguration.Folder = file_path;
437 meshImporterConfiguration.Separator = ';';
438 Gedim::MeshDAOImporterFromCsv importer(importerUtilities);
439 importer.Import(meshImporterConfiguration, mesh);
440 }
441 break;
443 mesh_utilities.ImportObjectFileFormat(file_path, mesh);
444 }
445 break;
447 mesh_utilities.ImportTriangularMesh(geometry_utilities,
448 file_path + "/Cell0Ds.csv",
449 file_path + "/Cell2Ds.csv",
450 file_path + "/Cell2DsMarker.csv",
451 ',',
452 mesh);
453 }
454 break;
455 default:
456 throw std::runtime_error("MeshGenerator_Types_2D " + std::to_string((unsigned int)mesh_type) + " not supported");
457 }
458}
459
469inline void import_mesh_3D(const Gedim::MeshUtilities &mesh_utilities,
471 const std::string &file_path,
473{
474 switch (mesh_type)
475 {
477 Gedim::MeshFromCsvUtilities importerUtilities;
478 Gedim::MeshFromCsvUtilities::Configuration meshImporterConfiguration;
479 meshImporterConfiguration.Folder = file_path;
480 meshImporterConfiguration.Separator = ';';
481 Gedim::MeshDAOImporterFromCsv importer(importerUtilities);
482 importer.Import(meshImporterConfiguration, mesh);
483 }
484 break;
486 std::vector<std::vector<bool>> meshCell3DsFacesOrientation;
487 mesh_utilities.ImportOpenVolumeMesh(file_path, mesh, meshCell3DsFacesOrientation);
488 }
489 break;
491 mesh_utilities.ImportVtkMesh3D(file_path, mesh);
492 }
493 break;
494 default:
495 throw std::runtime_error("MeshGenerator_Types_3D " + std::to_string((unsigned int)mesh_type) + " not supported");
496 }
497}
498
506 const Gedim::MeshUtilities &mesh_utilities,
507 const Gedim::MeshMatricesDAO &mesh)
508{
509 return mesh_utilities.FillMesh1DGeometricData(geometry_utilities, mesh);
510}
511
523 const Gedim::GeometryUtilities &geometry_utilities,
524 const Gedim::MeshUtilities &mesh_utilities,
525 const Gedim::MeshMatricesDAO &mesh,
526 const Gedim::MeshUtilities::MeshGeometricData2DConfig &mesh_geometric_data_config =
527 Gedim::MeshUtilities::MeshGeometricData2DConfig(true, true, true, true, true, true, true, true, true, true, true, true, true))
528{
529 std::vector<Gedim::GeometryUtilities::PolygonTypes> cell2Ds_types(mesh.Cell2DTotalNumber(),
531 return mesh_utilities.FillMesh2DGeometricData(geometry_utilities, mesh, cell2Ds_types, mesh_geometric_data_config);
532}
533
543{
544 Gedim::MeshUtilities mesh_utilities;
545 mesh_utilities.ComputeCell2DCell3DNeighbours(mesh);
546 return mesh_utilities.FillMesh3DGeometricData(geometry_utilities, mesh);
547}
548} // namespace PDE_Mesh_Utilities
549} // namespace Mesh
550} // namespace PDETools
551} // namespace Polydim
552
553#endif
The GeometryUtilities class intersects 3D segments.
Definition GeometryUtilities.hpp:37
std::vector< double > EquispaceCoordinates(const double &step, const bool &insertExtremes) const
Definition GeometryUtilities.cpp:75
MeshDAOImporterFromCsv.
Definition MeshDAOImporterFromCsv.hpp:24
void Import(const Gedim::MeshFromCsvUtilities::Configuration &configuration, Gedim::IMeshDAO &mesh)
Definition MeshDAOImporterFromCsv.cpp:27
MeshImporterFromCsvUtilities.
Definition MeshFromCsvUtilities.hpp:24
Definition IMeshDAO.hpp:1068
unsigned int Cell2DTotalNumber() const
Definition IMeshDAO.hpp:1746
MeshUtilities.
Definition MeshUtilities.hpp:23
MeshGeometricData3D FillMesh3DGeometricData(const Gedim::GeometryUtilities &geometryUtilities, const Gedim::IMeshDAO &convexMesh) const
Fill Mesh3D Geometric Data given a mesh with convex mesh cells.
Definition MeshUtilities3D.cpp:885
void CreateParallelepipedMesh(const Eigen::Vector3d &rectangleOrigin, const Eigen::Vector3d &rectangleLengthTangent, const Eigen::Vector3d &rectangleHeightTangent, const Eigen::Vector3d &rectangleWidthTangent, const std::vector< double > &lengthMeshCurvilinearCoordinates, const std::vector< double > &heightMeshCurvilinearCoordinates, const std::vector< double > &widthMeshCurvilinearCoordinates, Gedim::IMeshDAO &mesh) const
Definition MeshUtilities_MeshGenerators.cpp:1826
void CreateRandomlyDeformedQuadrilaterals(const Gedim::GeometryUtilities &geometryUtilities, const Eigen::Vector3d &rectangleOrigin, const Eigen::Vector3d &rectangleBaseTangent, const Eigen::Vector3d &rectangleHeightTangent, const unsigned int &numQuadrilateralsBaseTangent, const unsigned int &numQuadrilateralsHeightTangent, const double &maxDeformingPercentageBase, const double &maxDeformingPercentageHeight, Gedim::IMeshDAO &mesh) const
Definition MeshUtilities_MeshGenerators.cpp:1571
MeshGeometricData1D FillMesh1DGeometricData(const Gedim::GeometryUtilities &geometryUtilities, const Gedim::IMeshDAO &convexMesh) const
Fill Mesh1D Geometric Data given a mesh with convex mesh cells.
Definition MeshUtilities1D.cpp:145
void CreateTetrahedralMesh(const Eigen::MatrixXd &polyhedronVertices, const Eigen::MatrixXi &polyhedronEdges, const std::vector< Eigen::MatrixXi > &polyhedronFaces, const double &maxTetrahedronVolume, Gedim::IMeshDAO &mesh, const std::string &options="Qpqfezna") const
Create tetrahedral mesh on 3D polyhedron.
void CreateQuadrilateralMeshFromTriangularMesh(const Gedim::GeometryUtilities &geometryUtilities, const Gedim::IMeshDAO &triangular_mesh, Gedim::IMeshDAO &mesh) const
Create a quadrilateral mesh starting from a triangular mesh: the mesh is created by dividing triangle...
Definition MeshUtilities_MeshGenerators.cpp:2198
void ImportObjectFileFormat(const std::string &offFilePath, Gedim::IMeshDAO &mesh) const
Import 2D mesh from OFF file.
Definition MeshUtilities.cpp:219
void CreateTriangularMesh(const Eigen::MatrixXd &polygonVertices, const double &maxTriangleArea, Gedim::IMeshDAO &mesh, const std::string &options="-QDzpqnea") const
Create triangular mesh on 2D polygon.
Definition MeshUtilities_MeshGenerators.cpp:2176
void CreateRectangleMesh(const Eigen::Vector3d &rectangleOrigin, const Eigen::Vector3d &rectangleBaseTangent, const Eigen::Vector3d &rectangleHeightTangent, const std::vector< double > &baseMeshCurvilinearCoordinates, const std::vector< double > &heightMeshCurvilinearCoordinates, Gedim::IMeshDAO &mesh) const
Crete rectange Mesh on rectangle base x height.
Definition MeshUtilities_MeshGenerators.cpp:27
void CreateStructuredTriangularMesh(const Eigen::Vector3d &rectangleOrigin, const Eigen::Vector3d &rectangleBaseTangent, const Eigen::Vector3d &rectangleHeightTangent, const std::vector< double > &baseMeshCurvilinearCoordinates, const std::vector< double > &heightMeshCurvilinearCoordinates, Gedim::IMeshDAO &mesh) const
Definition MeshUtilities_MeshGenerators.cpp:142
void CreatePolygonalMesh(const Gedim::GeometryUtilities &geometryUtilities, const Eigen::MatrixXd &polygonVertices, const unsigned int numPoints, const unsigned int numIterations, Gedim::IMeshDAO &mesh, const unsigned int random_seed=0) const
Definition MeshUtilities_MeshGenerators.cpp:2186
void ComputeCell2DCell3DNeighbours(Gedim::IMeshDAO &mesh) const
Compute Cell2D Cell3DNeighbours with given mesh data.
Definition MeshUtilities3D.cpp:2381
void Mesh2DFromPolygon(const Eigen::MatrixXd &polygonVertices, const std::vector< unsigned int > vertexMarkers, const std::vector< unsigned int > edgeMarkers, Gedim::IMeshDAO &mesh) const
Create a Mesh 2D with a polygon.
Definition MeshUtilities2D.cpp:500
void CreatePolyhedralMesh(const Gedim::GeometryUtilities &geometryUtilities, const Eigen::MatrixXd &polyhedronVertices, const Eigen::MatrixXi &polyhedronEdges, const std::vector< Eigen::MatrixXi > &polyhedronFaces, const unsigned int numPoints, const unsigned int numIterations, Gedim::IMeshDAO &mesh, const unsigned int random_seed=0) const
Definition MeshUtilities_MeshGenerators.cpp:2357
void FillMesh1D(const Gedim::GeometryUtilities &geometryUtilities, const Eigen::Vector3d &segmentOrigin, const Eigen::Vector3d &segmentTangent, const std::vector< double > &coordinates, Gedim::IMeshDAO &mesh) const
Fill Mesh 1D From segment Coordinates.
Definition MeshUtilities1D.cpp:22
void ImportOpenVolumeMesh(const std::string &ovmFilePath, Gedim::IMeshDAO &mesh, std::vector< std::vector< bool > > &meshCell3DsFacesOrientation) const
Import 3D mesh from OVM file.
Definition MeshUtilities.cpp:186
MeshGeometricData2D FillMesh2DGeometricData(const Gedim::GeometryUtilities &geometryUtilities, const Gedim::IMeshDAO &convexMesh) const
Fill Mesh2D Geometric Data given a mesh with convex mesh cells.
Definition MeshUtilities2D.cpp:655
void ImportTriangularMesh(const Gedim::GeometryUtilities &geometry_utilities, const std::string &cell0Ds_file_path, const std::string &cell2Ds_file_path, const std::string &marker_file_path, const char separator, Gedim::IMeshDAO &mesh) const
Import triangular 2D mesh (non standard simple format)
Definition MeshUtilities_ImportTriangularMesh.cpp:18
void ImportVtkMesh3D(const std::string &vtkFilePath, Gedim::IMeshDAO &mesh) const
Import 3D mesh from VTK file.
Definition MeshUtilities.cpp:202
void Mesh3DFromPolyhedron(const Eigen::MatrixXd &polyhedronVertices, const Eigen::MatrixXi &polyhedronEdges, const std::vector< Eigen::MatrixXi > &polyhedronFaces, const std::vector< unsigned int > vertexMarkers, const std::vector< unsigned int > edgeMarkers, const std::vector< unsigned int > faceMarkers, Gedim::IMeshDAO &mesh) const
Create a Mesh 3D with a polyhedron.
Definition MeshUtilities3D.cpp:565
One-dimensional computational domain (a segment).
Definition PDE_Mesh_Utilities.hpp:40
Eigen::MatrixXd vertices
Segment endpoints (one per column).
Definition PDE_Mesh_Utilities.hpp:42
double length
Length of the segment.
Definition PDE_Mesh_Utilities.hpp:43
Two-dimensional computational domain.
Definition PDE_Mesh_Utilities.hpp:48
Domain_Shape_Types
Shape family of a 2D domain.
Definition PDE_Mesh_Utilities.hpp:52
@ Ellipse
Ellipse (uses the radius/center/rotation fields).
double area
Area of the domain.
Definition PDE_Mesh_Utilities.hpp:60
Eigen::Vector3d rotation_angle
Rotation of the ellipse (ellipse shape only).
Definition PDE_Mesh_Utilities.hpp:66
Eigen::Vector3d center
Center of the ellipse (ellipse shape only).
Definition PDE_Mesh_Utilities.hpp:65
Polydim::PDETools::Mesh::PDE_Mesh_Utilities::PDE_Domain_2D::Domain_Shape_Types shape_type
Domain shape family.
Definition PDE_Mesh_Utilities.hpp:68
Eigen::MatrixXd vertices
Domain vertices (one per column); boundary polygon for polygonal shapes.
Definition PDE_Mesh_Utilities.hpp:59
double radius_1
First semi-axis (ellipse shape only).
Definition PDE_Mesh_Utilities.hpp:63
double radius_2
Second semi-axis (ellipse shape only).
Definition PDE_Mesh_Utilities.hpp:64
Three-dimensional computational domain.
Definition PDE_Mesh_Utilities.hpp:80
Domain_Shape_Types
Definition PDE_Mesh_Utilities.hpp:83
std::vector< Eigen::MatrixXi > faces
Domain faces (per-face vertex/edge indices).
Definition PDE_Mesh_Utilities.hpp:90
Polydim::PDETools::Mesh::PDE_Mesh_Utilities::PDE_Domain_3D::Domain_Shape_Types shape_type
Domain shape family.
Definition PDE_Mesh_Utilities.hpp:92
Eigen::MatrixXd vertices
Domain vertices (one per column).
Definition PDE_Mesh_Utilities.hpp:88
Eigen::MatrixXi edges
Domain edges (vertex-index pairs).
Definition PDE_Mesh_Utilities.hpp:89
double volume
Volume of the domain.
Definition PDE_Mesh_Utilities.hpp:91
Gedim::MeshUtilities::MeshGeometricData1D compute_mesh_1D_geometry_data(const Gedim::GeometryUtilities &geometry_utilities, const Gedim::MeshUtilities &mesh_utilities, const Gedim::MeshMatricesDAO &mesh)
Precompute the per-cell geometric data of a 1D mesh.
Definition PDE_Mesh_Utilities.hpp:505
void import_mesh_3D(const Gedim::MeshUtilities &mesh_utilities, const Polydim::PDETools::Mesh::PDE_Mesh_Utilities::MeshGenerator_Types_3D &mesh_type, const std::string &file_path, Gedim::MeshMatricesDAO &mesh)
Import a 3D mesh from file.
Definition PDE_Mesh_Utilities.hpp:469
MeshGenerator_Types_3D
Definition PDE_Mesh_Utilities.hpp:117
MeshGenerator_Types_2D
Definition PDE_Mesh_Utilities.hpp:103
@ QuadFromTriangular
generate quadrilateral mesh starting fromt triangular
Gedim::MeshUtilities::MeshGeometricData2D compute_mesh_2D_geometry_data(const Gedim::GeometryUtilities &geometry_utilities, const Gedim::MeshUtilities &mesh_utilities, const Gedim::MeshMatricesDAO &mesh, const Gedim::MeshUtilities::MeshGeometricData2DConfig &mesh_geometric_data_config=Gedim::MeshUtilities::MeshGeometricData2DConfig(true, true, true, true, true, true, true, true, true, true, true, true, true))
Precompute the per-cell geometric data of a 2D mesh.
Definition PDE_Mesh_Utilities.hpp:522
Gedim::MeshUtilities::MeshGeometricData3D compute_mesh_3D_geometry_data(const Gedim::GeometryUtilities &geometry_utilities, Gedim::MeshMatricesDAO &mesh)
Precompute the per-cell geometric data of a 3D mesh.
Definition PDE_Mesh_Utilities.hpp:541
MeshGenerator_Types_1D
Definition PDE_Mesh_Utilities.hpp:96
void import_mesh_2D(const Gedim::GeometryUtilities &geometry_utilities, const Gedim::MeshUtilities &mesh_utilities, const Polydim::PDETools::Mesh::PDE_Mesh_Utilities::MeshGenerator_Types_2D &mesh_type, const std::string &file_path, Gedim::MeshMatricesDAO &mesh)
Import a 2D mesh from file.
Definition PDE_Mesh_Utilities.hpp:425
void create_mesh_2D(const Gedim::GeometryUtilities &geometry_utilities, const Gedim::MeshUtilities &mesh_utilities, const Polydim::PDETools::Mesh::PDE_Mesh_Utilities::MeshGenerator_Types_2D &mesh_type, const Polydim::PDETools::Mesh::PDE_Mesh_Utilities::PDE_Domain_2D &pde_domain, const double &max_relative_area, Gedim::MeshMatricesDAO &mesh)
Generate a 2D mesh on a polygonal/parallelogram domain.
Definition PDE_Mesh_Utilities.hpp:189
void create_mesh_3D(const Gedim::GeometryUtilities &geometry_utilities, const Gedim::MeshUtilities &mesh_utilities, const Polydim::PDETools::Mesh::PDE_Mesh_Utilities::MeshGenerator_Types_3D &mesh_type, const Polydim::PDETools::Mesh::PDE_Mesh_Utilities::PDE_Domain_3D &pde_domain, const double &max_relative_volume, Gedim::MeshMatricesDAO &mesh)
Generate a 3D mesh on a polyhedral/parallelepiped domain.
Definition PDE_Mesh_Utilities.hpp:323
void import_mesh_1D(const Polydim::PDETools::Mesh::PDE_Mesh_Utilities::MeshGenerator_Types_1D &mesh_type, const std::string &file_path, Gedim::MeshMatricesDAO &mesh)
Import a 1D mesh from file.
Definition PDE_Mesh_Utilities.hpp:394
void create_mesh_1D(const Gedim::GeometryUtilities &geometry_utilities, const Gedim::MeshUtilities &mesh_utilities, const Polydim::PDETools::Mesh::PDE_Mesh_Utilities::MeshGenerator_Types_1D &mesh_type, const Polydim::PDETools::Mesh::PDE_Mesh_Utilities::PDE_Domain_1D &pde_domain, const double &max_relative_length, Gedim::MeshMatricesDAO &mesh)
Generate a 1D mesh on a segment domain.
Definition PDE_Mesh_Utilities.hpp:140
Definition FEM_MCC_2D_LocalSpace.cpp:17
Definition MeshFromCsvUtilities.hpp:27
char Separator
Definition MeshFromCsvUtilities.hpp:45
std::string Folder
Definition MeshFromCsvUtilities.hpp:28
Definition MeshUtilities.hpp:139
Definition MeshUtilities.hpp:167
Definition MeshUtilities.hpp:149
Definition MeshUtilities.hpp:215
Space–time domain for a 2D time-dependent problem.
Definition PDE_Mesh_Utilities.hpp:73
Polydim::PDETools::Mesh::PDE_Mesh_Utilities::PDE_Domain_2D spatial_domain
Definition PDE_Mesh_Utilities.hpp:75
std::array< double, 2 > time_domain
Time interval .
Definition PDE_Mesh_Utilities.hpp:74