MPM-Geomechanics
Material Point Method for simulating geo-materials under large deformation conditions
Loading...
Searching...
No Matches
GmshMeshReader.h
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2// Copyright (c) 2021-2025 MPM-Geomechanics Development Team
3
4#pragma once
5#include <string>
6#include <vector>
7#include <unordered_map>
8#include <fstream>
9
10namespace GMSH {
11
12 // node structure for Gmsh mesh
13 struct Node {
14 int tag;
15 double x, y, z;
16 };
17
18 // element structure for Gmsh mesh (see Gmsh documentation for types)
19 struct Element {
20 int tag;
21 int type; // (2=TRI3, 3=QUAD4, 4=TET4, 5=HEX8, etc.)
23 std::vector<int> nodeTags;
24 };
25
26 // physical group structure for Gmsh mesh
28 int dim;
29 int id;
30 std::string name;
31 };
32
33 // helper to encode (dim, tag) into a 64-bit key
34 inline long long entityKey(int dim, int tag) {
35 return ( (static_cast<long long>(dim) << 32) | (tag & 0xffffffff) );
36 }
37
38 // entity structure (defines relation between entities and physical groups)
39 struct Entity {
40 int dim = 0; // 0=point, 1=curve, 2=surface, 3=volume
41 int tag = 0; // entityTag (matches Element::entityTag)
42 std::vector<int> physicals; // list of physical group IDs attached
43 };
44
45 // complete Gmsh mesh structure
46 struct GmshMesh {
47 std::vector<Node> nodes;
48 std::vector<Element> elements;
49 std::unordered_map<int, PhysicalGroup> physicals; // key = physId
50 std::unordered_map<long long, Entity> entities;
51 };
52
53 // File reader .msh (ASCII)
55 public:
56 static bool load(const std::string &filename, GmshMesh &mesh);
57 private:
58 static void readPhysicalNames(std::ifstream &in, GmshMesh &mesh);
59 static void readEntities(std::ifstream &in, GmshMesh &mesh);
60 static void readNodes(std::ifstream &in, GmshMesh &mesh);
61 static void readElements(std::ifstream &in, GmshMesh &mesh);
62 };
63}
Definition GmshMeshReader.h:54
static void readElements(std::ifstream &in, GmshMesh &mesh)
static bool load(const std::string &filename, GmshMesh &mesh)
static void readPhysicalNames(std::ifstream &in, GmshMesh &mesh)
static void readNodes(std::ifstream &in, GmshMesh &mesh)
static void readEntities(std::ifstream &in, GmshMesh &mesh)
Definition GmshMeshReader.h:10
long long entityKey(int dim, int tag)
Definition GmshMeshReader.h:34
Definition GmshMeshReader.h:19
int entityTag
Definition GmshMeshReader.h:22
int tag
Definition GmshMeshReader.h:20
std::vector< int > nodeTags
Definition GmshMeshReader.h:23
int type
Definition GmshMeshReader.h:21
Definition GmshMeshReader.h:39
int tag
Definition GmshMeshReader.h:41
int dim
Definition GmshMeshReader.h:40
std::vector< int > physicals
Definition GmshMeshReader.h:42
Definition GmshMeshReader.h:46
std::vector< Node > nodes
Definition GmshMeshReader.h:47
std::vector< Element > elements
Definition GmshMeshReader.h:48
std::unordered_map< int, PhysicalGroup > physicals
Definition GmshMeshReader.h:49
std::unordered_map< long long, Entity > entities
Definition GmshMeshReader.h:50
Definition GmshMeshReader.h:13
int tag
Definition GmshMeshReader.h:14
double z
Definition GmshMeshReader.h:15
double x
Definition GmshMeshReader.h:15
double y
Definition GmshMeshReader.h:15
Definition GmshMeshReader.h:27
int dim
Definition GmshMeshReader.h:28
int id
Definition GmshMeshReader.h:29
std::string name
Definition GmshMeshReader.h:30