dynLattice
Loading...
Searching...
No Matches
GMSHInputModule.h
Go to the documentation of this file.
1
10#pragma once
11
12#include <filesystem>
13#include <gmsh.h>
14
15#include <jem/base/Array.h>
16#include <jem/base/CString.h>
17#include <jem/base/Class.h>
18#include <jem/base/System.h>
19#include <jem/util/ArrayBuffer.h>
20#include <jem/util/HashDictionary.h>
21#include <jem/util/Properties.h>
22
23#include <jive/app/Module.h>
24#include <jive/app/ModuleFactory.h>
25#include <jive/app/Names.h>
26#include <jive/fem/ElementGroup.h>
27#include <jive/fem/XElementSet.h>
28#include <jive/fem/XNodeSet.h>
29#include <jive/model/Actions.h>
30#include <jive/model/Model.h>
31#include <jive/model/StateVector.h>
32#include <jive/util/Assignable.h>
33#include <jive/util/DenseTable.h>
34#include <jive/util/DofSpace.h>
35#include <jive/util/FuncUtils.h>
36#include <jive/util/Globdat.h>
37#include <jive/util/XTable.h>
38
39using jem::Array;
40using jem::max;
41using jem::newInstance;
42
43using jive::ALL;
44using jive::idx_t;
45using jive::IdxMatrix;
46using jive::IdxVector;
47using jive::Matrix;
48using jive::Properties;
49using jive::Ref;
50using jive::String;
51using jive::StringVector;
52using jive::Vector;
53
54using jive::app::Module;
55using jive::fem::ElementGroup;
56using jive::fem::XElementSet;
57using jive::fem::XNodeSet;
58using jive::model::Model;
59using jive::model::StateVector;
60using jive::util::Assignable;
61using jive::util::DofSpace;
62using jive::util::Function;
63using jive::util::Globdat;
64
65typedef jem::util::ArrayBuffer<idx_t> IdxBuffer;
66
67static_assert(GMSH_API_VERSION_MAJOR == 4, "Wrong GMSH API version, please use 4.9.5");
68static_assert(GMSH_API_VERSION_MINOR == 9, "Wrong GMSH API version, please use 4.9.5");
69static_assert(GMSH_API_VERSION_PATCH == 5, "Wrong GMSH API version, please use 4.9.5");
70
75class GMSHInputModule : public Module
76{
77public:
78 JEM_DECLARE_CLASS(GMSHInputModule, Module);
79
82 static const char *TYPE_NAME;
83 static const char *ORDER;
84 static const char *MESH_DIM;
85 static const char *SAVE_MSH;
86 static const char *STORE_TANGENTS;
87 static const char *ENTITY_NAMES[4];
88 static const char *ONELAB_PROPS;
89 static const char *VERBOSE;
90 static const char *OUT_FILE;
91 static const char *OUT_TABLES;
93
96 explicit GMSHInputModule(const String &name = "GMSHInput");
97
103 Status init(const Properties &conf,
104 const Properties &props,
105 const Properties &globdat) override;
106
110 Status run(const Properties &globdat) override;
111
114 void shutdown(const Properties &globdat) override;
115
122 static Ref<Module> makeNew(const String &name,
123 const Properties &conf,
124 const Properties &props,
125 const Properties &globdat);
126
128 static void declare();
129
130protected:
133
137 void openMesh_(const String &geoFile, const idx_t order);
138
141 void prepareOnelab_(const Properties &onelabProps);
142
145 void createNodes_(const idx_t dim);
146
149 void createElems_(const Properties &globdat);
150
153 void storeTangents_(const Properties &globdat);
154
157 void writeOutFile_(const Properties &globdat) const;
158
159private:
162 Assignable<XNodeSet> nodes_;
163 std::unordered_map<std::size_t, idx_t> gmshToJiveNodeMap_;
164 Assignable<XElementSet> elements_;
165 std::unordered_map<std::size_t, idx_t> gmshToJiveElemMap_;
166 IdxMatrix entities_;
168
171 bool verbose_;
172 bool writeOutput_;
173 Ref<Function> sampleCond_;
174 String outFile_;
175 String outExt_;
176 StringVector outTables_;
177 idx_t nodeView_;
178 idx_t elemView_;
180};
jem::util::ArrayBuffer< idx_t > IdxBuffer
Definition GMSHInputModule.h:65
Module for importing geometry and mesh data using GMSH API.
Definition GMSHInputModule.h:76
static void declare()
Register GMSHInputModule type with ModuleFactory.
Definition GMSHInputModule.cpp:572
Status run(const Properties &globdat) override
Run mesh import process.
Definition GMSHInputModule.cpp:175
void openMesh_(const String &geoFile, const idx_t order)
Open geometry file and generate mesh.
Definition GMSHInputModule.cpp:211
static const char * SAVE_MSH
Save MSH file property.
Definition GMSHInputModule.h:85
static const char * OUT_FILE
Output file property.
Definition GMSHInputModule.h:90
static const char * OUT_TABLES
Output tables property.
Definition GMSHInputModule.h:91
static const char * TYPE_NAME
Module type name.
Definition GMSHInputModule.h:82
static const char * ONELAB_PROPS
ONELAB properties.
Definition GMSHInputModule.h:88
Status init(const Properties &conf, const Properties &props, const Properties &globdat) override
Initialize the module.
Definition GMSHInputModule.cpp:62
static const char * ORDER
Mesh order property.
Definition GMSHInputModule.h:83
void shutdown(const Properties &globdat) override
Shutdown the module.
Definition GMSHInputModule.cpp:194
static const char * STORE_TANGENTS
Store tangents property.
Definition GMSHInputModule.h:86
void createElems_(const Properties &globdat)
Populate elements in global database.
Definition GMSHInputModule.cpp:310
static const char * VERBOSE
Verbose output property.
Definition GMSHInputModule.h:89
~GMSHInputModule()
Protected destructor.
Definition GMSHInputModule.cpp:52
static const char * MESH_DIM
Mesh dimension property.
Definition GMSHInputModule.h:84
static Ref< Module > makeNew(const String &name, const Properties &conf, const Properties &props, const Properties &globdat)
Factory method for creating new GMSHInputModule instances.
Definition GMSHInputModule.cpp:557
void storeTangents_(const Properties &globdat)
Store tangent vectors in global database.
Definition GMSHInputModule.cpp:423
void prepareOnelab_(const Properties &onelabProps)
Prepare ONELAB properties for mesh generation.
Definition GMSHInputModule.cpp:238
void writeOutFile_(const Properties &globdat) const
Write output file for GMSH post-processing.
Definition GMSHInputModule.cpp:487
void createNodes_(const idx_t dim)
Populate nodes in global database.
Definition GMSHInputModule.cpp:274
static const char * ENTITY_NAMES[4]
Entity names array.
Definition GMSHInputModule.h:29