v0.13.2
Loading...
Searching...
No Matches
Simple.hpp
Go to the documentation of this file.
1/** \file Simple.hpp
2 * \brief Header file for simple interface
3 * \ingroup mofem_simple_interface
4 *
5 * Make simplified interface, to speedup problem setup and analysts.
6 * See discussion here
7 * <a
8 * href=https://groups.google.com/d/msg/mofem-group/Vkc00aia4dU/o9RF3ZmPAAAJ>link
9 * to google groups</a>
10 *
11 */
12
13#ifndef __SIMPLE_HPP__
14#define __SIMPLE_HPP__
15
16#include "UnknownInterface.hpp"
17
18namespace MoFEM {
19
20template <int DIM> struct ParentFiniteElementAdjacencyFunction;
21template <int DIM> struct ParentFiniteElementAdjacencyFunctionSkeleton;
22
23/**
24 * \brief Simple interface for fast problem set-up
25 * \ingroup mofem_simple_interface
26 */
27struct Simple : public UnknownInterface {
28
29 MoFEMErrorCode query_interface(boost::typeindex::type_index type_index,
30 UnknownInterface **iface) const;
31
32 Simple(const MoFEM::Core &core);
33 virtual ~Simple() = default;
34
35 /**
36 * \brief get options
37 * @return error code
38 */
40
41 /**
42 * \brief Load mesh file
43 * @param options file load options
44 * @param mesh_file_name file name if not set default or set by command line
45 * is used.
46 *
47 * \note If bitRefLevel is set to any, bit ref level of loaded entities is not
48 * changed. After mesh is load, bit ref level should be set to create problem.
49 * Default setting of bit ref level is on first bit, and if is set all mesh
50 * entities on load are set to set level.
51 *
52 * @return error code
53 */
54 MoFEMErrorCode loadFile(const std::string options,
55 const std::string mesh_file_name);
56 /**
57 * \brief Load mesh file with parallel options if number of cores > 1
58 * @param mesh_file_name file name if not set default or set by command line
59 * is used.
60 * @return error code
61 */
62 MoFEMErrorCode loadFile(const std::string mesh_file_name = "");
63 /**
64 * \brief Add field on domain
65 * @param name name of the filed
66 * @param space space (L2,H1,Hdiv,Hcurl)
67 * @param base approximation base, see FieldApproximationBase
68 * @param nb_of_coefficients number of field coefficients
69 * @param tag_type type of the tag MB_TAG_DENSE or MB_TAG_SPARSE
70 * (DENSE is faster and uses less memory, SPARSE is more flexible if you
71 * define field on subdomains)
72 * @param bh if MF_EXCL throws error if field exits, MF_ZERO
73 * no error if field exist
74 * @param verb verbosity level
75 * @return error code
76 */
78 addDomainField(const std::string &name, const FieldSpace space,
79 const FieldApproximationBase base,
80 const FieldCoefficientsNumber nb_of_coefficients,
81 const TagType tag_type = MB_TAG_SPARSE,
82 const enum MoFEMTypes bh = MF_ZERO, int verb = -1);
83
84 /**
85 * \brief Add field on boundary
86 * @param name name of the filed
87 * @param space space (L2,H1,Hdiv,Hcurl)
88 * @param base approximation base, see FieldApproximationBase
89 * @param nb_of_coefficients number of field coefficients
90 * @param tag_type type of the tag MB_TAG_DENSE or MB_TAG_SPARSE
91 * (DENSE is faster and uses less memory, SPARSE is more flexible if you
92 * define field on subdomains)
93 * @param bh if MF_EXCL throws error if field exits, MF_ZERO
94 * no error if field exist
95 * @param verb verbosity level
96 * @return error code
97 */
99 addBoundaryField(const std::string &name, const FieldSpace space,
100 const FieldApproximationBase base,
101 const FieldCoefficientsNumber nb_of_coefficients,
102 const TagType tag_type = MB_TAG_SPARSE,
103 const enum MoFEMTypes bh = MF_ZERO, int verb = -1);
104
105 /**
106 * \brief Add field on skeleton
107 * @param name name of the filed
108 * @param space space (L2,H1,Hdiv,Hcurl)
109 * @param base approximation base, see FieldApproximationBase
110 * @param nb_of_coefficients number of field coefficients
111 * @param tag_type type of the tag MB_TAG_DENSE or MB_TAG_SPARSE
112 * (DENSE is faster and uses less memory, SPARSE is more flexible if you
113 * define field on subdomains)
114 * @param bh if MF_EXCL throws error if field exits, MF_ZERO
115 * no error if field exist
116 * @param verb verbosity level
117 * @return error code
118 */
120 addSkeletonField(const std::string &name, const FieldSpace space,
121 const FieldApproximationBase base,
122 const FieldCoefficientsNumber nb_of_coefficients,
123 const TagType tag_type = MB_TAG_SPARSE,
124 const enum MoFEMTypes bh = MF_ZERO, int verb = -1);
125
126 /**
127 * \brief Add field on domain
128 * @param name name of the filed
129 * @param space space (L2,H1,Hdiv,Hcurl)
130 * @param base approximation base, see FieldApproximationBase
131 * @param nb_of_coefficients number of field coefficients
132 * @param tag_type type of the tag MB_TAG_DENSE or MB_TAG_SPARSE
133 * (DENSE is faster and uses less memory, SPARSE is more flexible if you
134 * define field on subdomains)
135 * @param bh if MF_EXCL throws error if field exits, MF_ZERO
136 * no error if field exist
137 * @param verb verbosity level
138 * @return error code
139 */
140 MoFEMErrorCode addDataField(const std::string &name, const FieldSpace space,
141 const FieldApproximationBase base,
142 const FieldCoefficientsNumber nb_of_coefficients,
143 const TagType tag_type = MB_TAG_SPARSE,
144 const enum MoFEMTypes bh = MF_ZERO,
145 int verb = -1);
146
147 /**
148 * @brief Remove field form domain
149 *
150 * @param name
151 * @return MoFEMErrorCode
152 */
153 MoFEMErrorCode removeDomainField(const std::string &name);
154
155 /**
156 * @brief Remove field form boundary
157 *
158 * @param name
159 * @return MoFEMErrorCode
160 */
161 MoFEMErrorCode removeBoundaryField(const std::string &name);
162
163 /**
164 * @brief Remove field form skeleton
165 *
166 * @param name
167 * @return MoFEMErrorCode
168 */
169 MoFEMErrorCode removeSkeletonField(const std::string &name);
170
171 /**
172 * \brief Define finite elements
173 * @return Error code
174 */
176
177 /**
178 * \brief define problem
179 * @return error code
180 */
181 MoFEMErrorCode defineProblem(const PetscBool is_partitioned = PETSC_TRUE);
182
183 /**
184 * \brief Set field order
185 * @param std::field_name field name
186 * @param order order
187 * @param range of entities to which order is set (If null it sat to all
188 * entities)
189 * @return error code
190 */
191 MoFEMErrorCode setFieldOrder(const std::string field_name, const int order,
192 const Range *ents = NULL);
193
194 /**
195 * \brief Build fields
196 * @return error code
197 */
199
200 /**
201 * \brief Build finite elements
202 * @return error code
203 */
205
206 /**
207 * @brief Set the skeleton adjacency object
208 *
209 * @param dim
210 * @param fe_name
211 * @return MoFEMErrorCode
212 */
213 MoFEMErrorCode setSkeletonAdjacency(int dim = -1, std::string fe_name = "");
214
215 /**
216 * \brief Build problem
217 * @return error code
218 */
220
221 /**
222 * \brief Setup problem
223 * @return error code
224 */
225 MoFEMErrorCode setUp(const PetscBool is_partitioned = PETSC_TRUE);
226
227 /**
228 * @brief Rebuild internal MoFEM data structures
229 *
230 * Call this function after you add field or remove it.
231 *
232 * \note If you add field, or remove it, finite element and problem needs to
233 * be rebuild. However DM can remain the same.
234 *
235 * @return MoFEMErrorCode
236 */
237 MoFEMErrorCode reSetUp(bool only_dm = false);
238
239 /**
240 * \brief Get DM
241 * @param dm discrete manager
242 * @return error code
243 */
244 MoFEMErrorCode getDM(DM *dm);
245
246 /**
247 * @brief Return smart DM object
248 *
249 * \code
250 * {
251 * auto dm = simple_interface->getDM();
252 *
253 * // ...
254 *
255 * // dm is automatically destroyed when out of the scope
256 * }
257 * \endcode
258 *
259 * @return SmartPetscObj<DM>
260 */
261 inline SmartPetscObj<DM> getDM() { return dM; }
262
263 /**
264 * @brief Get the problem dimension
265 *
266 * Problem dimension is determined by highest dimension of entities on the
267 * mesh.
268 *
269 * @return int
270 */
271 inline int getDim() const { return dIm; }
272
273 /**
274 * @brief Set the problem dimension
275 *
276 * @return int
277 */
278 void setDim(int dim) { dIm = dim; };
279
280 /**
281 * @brief Get the MeshSet object
282 *
283 * @return EntityHandle&
284 */
285 inline EntityHandle &getMeshSet() { return meshSet; }
286
287 /**
288 * @brief Get the BoundaryMeshSet object
289 *
290 * @return EntityHandle&
291 */
293
294 /**
295 * @brief Get the SkeletonMeshSet object
296 *
297 * @return EntityHandle&
298 */
300
301 /**
302 * @brief Get the BitRefLevel
303 *
304 * @return BitRefLevel
305 */
306 inline BitRefLevel &getBitRefLevel() { return bitLevel; }
307
308 /**
309 * @brief Get the BitRefLevel
310 *
311 * @return BitRefLevel
312 */
314
315 /**
316 * @brief Get the Domain FE Name
317 *
318 * @return const std::string
319 */
320 inline const std::string getDomainFEName() const { return domainFE; }
321
322 /**
323 * @brief Get the Boundary FE Name
324 *
325 * @return const std::string
326 */
327 inline const std::string getBoundaryFEName() const { return boundaryFE; }
328
329 /**
330 * @brief Get the Skeleton FE Name
331 *
332 * @return const std::string
333 */
334 inline const std::string getSkeletonFEName() const { return skeletonFE; }
335
336 /**
337 * @brief Get the Problem Name
338 *
339 * @return const std::string
340 */
341 inline const std::string getProblemName() const { return nameOfProblem; }
342
343 /**
344 * @brief Get the Domain FE Name
345 *
346 * @return std::string&
347 */
348 inline std::string &getDomainFEName() { return domainFE; }
349
350 /**
351 * @brief Get the Boundary FE Name
352 *
353 * @return std::string&
354 */
355 inline std::string &getBoundaryFEName() { return boundaryFE; }
356
357 /**
358 * @brief Get the Skeleton FE Name
359 *
360 * @return std::string&
361 */
362 inline std::string &getSkeletonFEName() { return skeletonFE; }
363
364 /**
365 * @brief Get the Problem Name
366 *
367 * @return std::string&
368 */
369 inline std::string &getProblemName() { return nameOfProblem; }
370
371 /**
372 * @brief Get the Other Finite Elements
373 *
374 * User can create finite elements using directly core interface and
375 * and them to simple problem by this function
376 *
377 * @return std::vector<std::string>&
378 */
379 inline std::vector<std::string> &getOtherFiniteElements() { return otherFEs; }
380
381 /**
382 * @brief Delete dm
383 *
384 * @return MoFEMErrorCode
385 */
387
388 /**
389 * @brief Delete finite elements
390 *
391 * @return MoFEMErrorCode
392 */
394
395 /**
396 * @brief Get the addSkeletonFE
397 *
398 * If variable set to true, skeleton element is created regardless field on
399 * skelton is added or not.
400 *
401 * @return true
402 * @return false
403 */
404 bool &getAddSkeletonFE() { return addSkeletonFE; }
405
406 /**
407 * @brief Get the addSkeletonFE
408 *
409 * If variable set to true, boundary element is created regardless field on
410 * skelton is added or not.
411 *
412 * @return true
413 * @return false
414 */
415 bool &getAddBoundaryFE() { return addBoundaryFE; }
416
417 /**
418 * @brief Get the addParentAdjacencies
419 *
420 * If set true add parent adjacencies
421 *
422 * @return true
423 * @return false
424 */
426
427 /**
428 * @brief bit ref level for parent
429 *
430 * @return auto&
431 */
432 auto &getBitAdjParent() { return bitAdjParent; }
433
434 /**
435 * @brief bit ref level for parent parent
436 *
437 * @return auto&
438 */
440
441 /**
442 * @brief bit ref level for parent
443 *
444 * @return auto&
445 */
446 auto &getBitAdjEnt() { return bitAdjEnt; }
447
448 /**
449 * @brief bit ref level for parent marent
450 *
451 * @return auto&
452 */
453 auto &getBitAdjEntMask() { return bitAdjEntMask; }
454
455 /**
456 * @brief add empty block to problem
457 *
458 * MatrixManager assumes that all blocks, i.e. all fields combinations are non
459 * zero. This is not always the case, to optimise code and reduce memory usage
460 * user can specifi which blocks are empty.
461 *
462 * @param row_field row filed name
463 * @param col_field col field name
464 * @return MoFEMErrorCode
465 */
466 MoFEMErrorCode addFieldToEmptyFieldBlocks(const std::string row_field,
467 const std::string col_field) const;
468
469
470private:
472
473 BitRefLevel bitLevel; ///< BitRefLevel of the problem
474 BitRefLevel bitLevelMask; ///< BitRefLevel of the problem
475
482
483 EntityHandle meshSet; ///< domain meshset
484 EntityHandle boundaryMeshset; ///< meshset with boundary
485 EntityHandle skeletonMeshset; ///< skeleton meshset with boundary
486
487 bool addSkeletonFE; ///< Add skeleton FE
488 bool addBoundaryFE; ///< Add boundary FE
489 bool addParentAdjacencies; ///< If set to true parent adjacencies are build
490
491 BitRefLevel bitAdjParent; ///< bit ref level for parent
492 BitRefLevel bitAdjParentMask; ///< bit ref level for parent parent
493 BitRefLevel bitAdjEnt; ///< bit ref level for parent
494 BitRefLevel bitAdjEntMask; ///< bit ref level for parent parent
495
496 std::vector<std::string> domainFields; ///< domain fields
497 std::vector<std::string> boundaryFields; ///< boundary fields
498 std::vector<std::string> skeletonFields; ///< fields on the skeleton
499 std::vector<std::string> dataFields; ///< Data fields
500 std::vector<std::string> noFieldFields; ///< NOFIELD field name
501 std::vector<std::string> noFieldDataFields; ///< NOFIELD field name
502
503 std::list<std::tuple<std::string, int, Range>>
504 fieldsOrder; ///< fields order
505
506 std::string nameOfProblem; ///< problem name
507 std::string domainFE; ///< domain finite element
508 std::string boundaryFE; ///< boundary finite element
509 std::string skeletonFE; ///< skeleton finite element
510
511 std::vector<std::string> otherFEs; ///< Other finite elements
512
513 char meshFileName[255]; ///< mesh file name
514 int dIm; ///< dimension of problem
515
517 dM; ///< Discrete manager (interface to PETSc/MoFEM functions)
518
522
523 template <int DIM = -1>
524 MoFEMErrorCode setSkeletonAdjacency(std::string fe_name);
525
526 template <int DIM = -1> MoFEMErrorCode setParentAdjacency();
527
528 boost::shared_ptr<ParentFiniteElementAdjacencyFunction<3>>
530 boost::shared_ptr<ParentFiniteElementAdjacencyFunction<2>>
532 boost::shared_ptr<ParentFiniteElementAdjacencyFunction<1>>
534
535 boost::shared_ptr<ParentFiniteElementAdjacencyFunctionSkeleton<2>>
537 boost::shared_ptr<ParentFiniteElementAdjacencyFunctionSkeleton<1>>
539};
540
541} // namespace MoFEM
542
543#endif // __SIMPLE_HPP__
544
545/**
546 * \defgroup mofem_simple_interface Simple interface
547 * \brief Implementation of simple interface for fast problem set-up.
548 *
549 * \ingroup mofem
550 **/
MoFEM interface.
MoFEMTypes
Those types control how functions respond on arguments, f.e. error handling.
Definition: definitions.h:97
@ MF_ZERO
Definition: definitions.h:98
FieldApproximationBase
approximation base
Definition: definitions.h:58
FieldSpace
approximation spaces
Definition: definitions.h:82
const int dim
char mesh_file_name[255]
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
Definition: Exceptions.hpp:56
int FieldCoefficientsNumber
Number of field coefficients.
Definition: Types.hpp:27
std::bitset< BITREFLEVEL_SIZE > BitRefLevel
Bit structure attached to each entity identifying to what mesh entity is attached.
Definition: Types.hpp:40
implementation of Data Operators for Forces and Sources
Definition: Common.hpp:10
constexpr auto field_name
Core (interface) class.
Definition: Core.hpp:82
Simple interface for fast problem set-up.
Definition: Simple.hpp:27
boost::shared_ptr< ParentFiniteElementAdjacencyFunction< 2 > > parentAdjFunctionDim2
Definition: Simple.hpp:531
EntityHandle boundaryMeshset
meshset with boundary
Definition: Simple.hpp:484
MoFEMErrorCode buildProblem()
Build problem.
Definition: Simple.cpp:597
std::string & getDomainFEName()
Get the Domain FE Name.
Definition: Simple.hpp:348
bool & getAddBoundaryFE()
Get the addSkeletonFE.
Definition: Simple.hpp:415
const std::string getBoundaryFEName() const
Get the Boundary FE Name.
Definition: Simple.hpp:327
std::vector< std::string > dataFields
Data fields.
Definition: Simple.hpp:499
MoFEMErrorCode setParentAdjacency()
Definition: Simple.cpp:67
std::vector< std::string > domainFields
domain fields
Definition: Simple.hpp:496
MoFEMErrorCode removeDomainField(const std::string &name)
Remove field form domain.
Definition: Simple.cpp:337
MoFEMErrorCode defineFiniteElements()
Define finite elements.
Definition: Simple.cpp:383
MoFEM::Core & cOre
Definition: Simple.hpp:471
BitRefLevel bitAdjEnt
bit ref level for parent
Definition: Simple.hpp:493
char meshFileName[255]
mesh file name
Definition: Simple.hpp:513
EntityHandle meshSet
domain meshset
Definition: Simple.hpp:483
auto & getBitAdjParent()
bit ref level for parent
Definition: Simple.hpp:432
int getDim() const
Get the problem dimension.
Definition: Simple.hpp:271
std::vector< std::string > otherFEs
Other finite elements.
Definition: Simple.hpp:511
MoFEMErrorCode buildFiniteElements()
Build finite elements.
Definition: Simple.cpp:571
boost::shared_ptr< ParentFiniteElementAdjacencyFunctionSkeleton< 2 > > parentAdjSkeletonFunctionDim2
Definition: Simple.hpp:536
MoFEMErrorCode addDataField(const std::string &name, const FieldSpace space, const FieldApproximationBase base, const FieldCoefficientsNumber nb_of_coefficients, const TagType tag_type=MB_TAG_SPARSE, const enum MoFEMTypes bh=MF_ZERO, int verb=-1)
Add field on domain.
Definition: Simple.cpp:320
MoFEMErrorCode exchangeGhostCells()
Definition: Simple.cpp:793
PetscLogEvent MOFEM_EVENT_SimpleBuildFields
Definition: Simple.hpp:478
const std::string getSkeletonFEName() const
Get the Skeleton FE Name.
Definition: Simple.hpp:334
PetscLogEvent MOFEM_EVENT_SimpleLoadMesh
Definition: Simple.hpp:477
MoFEMErrorCode addDomainField(const std::string &name, const FieldSpace space, const FieldApproximationBase base, const FieldCoefficientsNumber nb_of_coefficients, const TagType tag_type=MB_TAG_SPARSE, const enum MoFEMTypes bh=MF_ZERO, int verb=-1)
Add field on domain.
Definition: Simple.cpp:264
MoFEMErrorCode reSetUp(bool only_dm=false)
Rebuild internal MoFEM data structures.
Definition: Simple.cpp:634
std::vector< std::string > noFieldFields
NOFIELD field name.
Definition: Simple.hpp:500
bool addSkeletonFE
Add skeleton FE.
Definition: Simple.hpp:487
BitRefLevel bitAdjParent
bit ref level for parent
Definition: Simple.hpp:491
bool addBoundaryFE
Add boundary FE.
Definition: Simple.hpp:488
std::vector< std::string > & getOtherFiniteElements()
Get the Other Finite Elements.
Definition: Simple.hpp:379
MoFEMErrorCode addFieldToEmptyFieldBlocks(const std::string row_field, const std::string col_field) const
add empty block to problem
Definition: Simple.cpp:703
std::string skeletonFE
skeleton finite element
Definition: Simple.hpp:509
std::vector< std::string > noFieldDataFields
NOFIELD field name.
Definition: Simple.hpp:501
EntityHandle & getSkeletonMeshSet()
Get the SkeletonMeshSet object.
Definition: Simple.hpp:299
std::string boundaryFE
boundary finite element
Definition: Simple.hpp:508
std::string nameOfProblem
problem name
Definition: Simple.hpp:506
void setDim(int dim)
Set the problem dimension.
Definition: Simple.hpp:278
boost::shared_ptr< ParentFiniteElementAdjacencyFunction< 3 > > parentAdjFunctionDim3
Definition: Simple.hpp:529
MoFEMErrorCode getOptions()
get options
Definition: Simple.cpp:180
virtual ~Simple()=default
std::string domainFE
domain finite element
Definition: Simple.hpp:507
std::vector< std::string > boundaryFields
boundary fields
Definition: Simple.hpp:497
boost::shared_ptr< ParentFiniteElementAdjacencyFunctionSkeleton< 1 > > parentAdjSkeletonFunctionDim1
Definition: Simple.hpp:538
std::string & getBoundaryFEName()
Get the Boundary FE Name.
Definition: Simple.hpp:355
BitRefLevel bitAdjEntMask
bit ref level for parent parent
Definition: Simple.hpp:494
auto & getBitAdjEnt()
bit ref level for parent
Definition: Simple.hpp:446
SmartPetscObj< DM > dM
Discrete manager (interface to PETSc/MoFEM functions)
Definition: Simple.hpp:517
std::list< std::tuple< std::string, int, Range > > fieldsOrder
fields order
Definition: Simple.hpp:504
MoFEMErrorCode buildFields()
Build fields.
Definition: Simple.cpp:484
SmartPetscObj< DM > getDM()
Return smart DM object.
Definition: Simple.hpp:261
MoFEMErrorCode loadFile(const std::string options, const std::string mesh_file_name)
Load mesh file.
Definition: Simple.cpp:194
BitRefLevel bitLevel
BitRefLevel of the problem.
Definition: Simple.hpp:473
MoFEMErrorCode setFieldOrder(const std::string field_name, const int order, const Range *ents=NULL)
Set field order.
Definition: Simple.cpp:476
MoFEMErrorCode addBoundaryField(const std::string &name, const FieldSpace space, const FieldApproximationBase base, const FieldCoefficientsNumber nb_of_coefficients, const TagType tag_type=MB_TAG_SPARSE, const enum MoFEMTypes bh=MF_ZERO, int verb=-1)
Add field on boundary.
Definition: Simple.cpp:282
MoFEMErrorCode defineProblem(const PetscBool is_partitioned=PETSC_TRUE)
define problem
Definition: Simple.cpp:455
BitRefLevel & getBitRefLevelMask()
Get the BitRefLevel.
Definition: Simple.hpp:313
std::vector< std::string > skeletonFields
fields on the skeleton
Definition: Simple.hpp:498
MoFEMErrorCode addSkeletonField(const std::string &name, const FieldSpace space, const FieldApproximationBase base, const FieldCoefficientsNumber nb_of_coefficients, const TagType tag_type=MB_TAG_SPARSE, const enum MoFEMTypes bh=MF_ZERO, int verb=-1)
Add field on skeleton.
Definition: Simple.cpp:300
EntityHandle & getBoundaryMeshSet()
Get the BoundaryMeshSet object.
Definition: Simple.hpp:292
EntityHandle & getMeshSet()
Get the MeshSet object.
Definition: Simple.hpp:285
MoFEMErrorCode removeSkeletonField(const std::string &name)
Remove field form skeleton.
Definition: Simple.cpp:368
MoFEMErrorCode query_interface(boost::typeindex::type_index type_index, UnknownInterface **iface) const
Definition: Simple.cpp:8
auto & getBitAdjEntMask()
bit ref level for parent marent
Definition: Simple.hpp:453
bool & getAddSkeletonFE()
Get the addSkeletonFE.
Definition: Simple.hpp:404
MoFEMErrorCode setUp(const PetscBool is_partitioned=PETSC_TRUE)
Setup problem.
Definition: Simple.cpp:611
MoFEMErrorCode removeBoundaryField(const std::string &name)
Remove field form boundary.
Definition: Simple.cpp:353
std::string & getSkeletonFEName()
Get the Skeleton FE Name.
Definition: Simple.hpp:362
const std::string getProblemName() const
Get the Problem Name.
Definition: Simple.hpp:341
const std::string getDomainFEName() const
Get the Domain FE Name.
Definition: Simple.hpp:320
int dIm
dimension of problem
Definition: Simple.hpp:514
MoFEMErrorCode setSkeletonAdjacency(int dim=-1, std::string fe_name="")
Set the skeleton adjacency object.
Definition: Simple.cpp:143
MoFEMErrorCode deleteDM()
Delete dm.
Definition: Simple.cpp:680
std::string & getProblemName()
Get the Problem Name.
Definition: Simple.hpp:369
PetscLogEvent MOFEM_EVENT_SimpleSetUP
Definition: Simple.hpp:476
PetscLogEvent MOFEM_EVENT_SimpleKSPSolve
Definition: Simple.hpp:481
MoFEMErrorCode createBoundaryMeshset()
Definition: Simple.cpp:712
PetscLogEvent MOFEM_EVENT_SimpleBuildFiniteElements
Definition: Simple.hpp:479
BitRefLevel bitLevelMask
BitRefLevel of the problem.
Definition: Simple.hpp:474
auto & getBitAdjParentMask()
bit ref level for parent parent
Definition: Simple.hpp:439
BitRefLevel bitAdjParentMask
bit ref level for parent parent
Definition: Simple.hpp:492
PetscLogEvent MOFEM_EVENT_SimpleBuildProblem
Definition: Simple.hpp:480
boost::shared_ptr< ParentFiniteElementAdjacencyFunction< 1 > > parentAdjFunctionDim1
Definition: Simple.hpp:533
BitRefLevel & getBitRefLevel()
Get the BitRefLevel.
Definition: Simple.hpp:306
bool & getParentAdjacencies()
Get the addParentAdjacencies.
Definition: Simple.hpp:425
MoFEMErrorCode deleteFiniteElements()
Delete finite elements.
Definition: Simple.cpp:691
EntityHandle skeletonMeshset
skeleton meshset with boundary
Definition: Simple.hpp:485
MoFEMErrorCode createSkeletonMeshset()
Definition: Simple.cpp:759
bool addParentAdjacencies
If set to true parent adjacencies are build.
Definition: Simple.hpp:489
intrusive_ptr for managing petsc objects
base class for all interface classes