v0.6.10
definitions.h
Go to the documentation of this file.
1 /** \file definitions.h
2  * \brief useful compiler directives and definitions
3  */
4 
5 /* MoFEM is free software: you can redistribute it and/or modify it under
6  * the terms of the GNU Lesser General Public License as published by the
7  * Free Software Foundation, either version 3 of the License, or (at your
8  * option) any later version.
9  *
10  * MoFEM is distributed in the hope that it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
13  * License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with MoFEM. If not, see <http://www.gnu.org/licenses/>
17 */
18 
19 #ifndef __DEFINITONS_H__
20 #define __DEFINITONS_H__
21 
22 //taken from http://stackoverflow.com/questions/295120/c-mark-as-deprecated
23 #ifdef __GNUC__
24  #define DEPRECATED __attribute__((deprecated))
25 #elif defined(_MSC_VER)
26  #define DEPRECATED __declspec(deprecated)
27 #else
28  #pragma message("WARNING: You need to implement DEPRECATED for this compiler")
29  #define DEPRECATED
30 #endif
31 
32 /** \brief Interfaces IDs
33  *
34  * To manage different complexities related to field, finite elements mesh
35  * refinements, etc. a appropriate interfaces related to each complexities are
36  * created. Interfaces by itself could vary by functionality or the same function
37  * can me managed with two interfaces with waring level of abstraction.
38  *
39  */
40 enum Interfaces {
41  UNKNOWNINTERFACE = 1 << 0,
42  // Field Interface
43  CORE_INTERFACE = 1 << 0 | 1 << 1,
44  DEPRECATED_CORE_INTERFACE = 1 << 0 | 1 << 2,
45  PROBLEMSMANAGER_INTERFACE = 1 << 0 | 1 << 3,
46  SIMPLE_INTERFACE = 1 << 0 | 1 << 4,
47  MESH_REFINE = 1 << 1 | 1 << 2,
48  PRISM_INTEFACE = 1 << 1 | 1 << 3,
49  SERIES_RECORDER = 1 << 1 | 1 << 4,
50  ISMANAGER_INTERFACE = 1 << 1 | 1 << 5,
51  VECMANAGER_INTERFACE = 1 << 1 | 1 << 6,
52  FIELDBLAS_INTERFACE = 1 << 1 | 1 << 7,
53  BITREFMANAGER_INTERFACE = 1 << 1 | 1 << 8,
54  TOOLS = 1 << 1 | 1 << 10,
55  // Independent Interfaces
56  TETGEN_INTERFACE = 1 << 2 | 1 << 3,
57  MED_INTERFACE = 1 << 2 | 1 << 4,
58  NODEMERGER_INTERFACE = 1 << 2 | 1 << 5,
59  BITLEVELCOUPLER_INTERFACE = 1 << 2 | 1 << 6,
60  PRISMSFROMSURFACE_INTERFACE = 1 << 2 | 1 << 7,
61  MESHSETSMANAGER_INTERFACE = 1 << 2 | 1 << 8,
62  COORDSSYSTEMMANAGER_INTERFACE = 1 << 2 | 1 << 9,
63  CUTMESH_INTERFACE = 1 << 2 | 1 << 10
64 };
65 
67  // Loop Methods
68  KSP_METHOD = 1 << 3 | 1 << 4,
69  SNES_METHOD = 1 << 3 | 1 << 5,
70  TS_METHOD = 1 << 3 | 1 << 6,
71  BASIC_METHOD = 1 << 3 | 1 << 4 | 1 << 5 | 1 << 6,
72  FE_METHOD = 1 << 3 | 1 << 4 | 1 << 5 | 1 << 6 | 1 << 7,
73  ENT_METHOD = 1 << 3 | 1 << 4 | 1 << 5 | 1 << 6 | 1 << 8
74 };
75 
76 /**
77  * \brief interfaces for PETSc DM interfaces
78  */
80  UNKNOWN_DM_INTERFACE = 1 << 4 | 1 << 5,
81  DMCTX_INTERFACE = 1 << 4 | 1 << 6
82 };
83 
84 /**
85  * \brief Interfaces uses to manage base functions
86  */
91  KERNEL_BASE_FUNCTION_INTERFACE = 1 << 5 | 1 << 9,
92  JACOBI_BASE_FUNCTION_INTERFACE = 1 << 5 | 1 << 10,
93  ENT_BASE_FUNCTION_INTERFACE = 1 << 5 | 1 << 6 | 1 << 7,
94  TET_BASE_FUNCTION_INTERFACE = 1 << 5 | 1 << 6 | 1 << 8,
95  TRI_BASE_FUNCTION_INTERFACE = 1 << 5 | 1 << 6 | 1 << 9,
96  EDGE_BASE_FUNCTION_INTERFACE = 1 << 5 | 1 << 6 | 1 << 10,
97  FATPRISM_BASE_FUNCTION_INTERFACE = 1 << 5 | 1 << 6 | 1 << 11,
98  FLATPRISM_BASE_FUNCTION_INTERFACE = 1 << 5 | 1 << 6 | 1 << 12
99 };
100 
101 /** \brief Error handling
102  *
103  * This is complementary to PETSC error codes. The numerical values for
104  * these are defined in include/petscerror.h. The names are defined in err.c
105  *
106  * MoAB error messages are defined in moab/Types.hpp
107  *
108  */
122 };
123 
124 const static char *const MoFEMErrorCodesNames[] = {
125  "MOFEM_SUCESS",
126  "MOFEM_DATA_INCONSISTENCY",
127  "MOFEM_NOT_IMPLEMENTED",
128  "MOFEM_NOT_FOUND",
129  "MOFEM_OPERATION_UNSUCCESSFUL",
130  "MOFEM_IMPOSIBLE_CASE",
131  "MOFEM_INVALID_DATA",
132  "MOFEM_MOFEMEXCEPTION_THROW",
133  "MOFEM_STD_EXCEPTION_THROW",
134  "MOFEM_ATOM_TEST_INVALID",
135  "MOFEM_MOAB_ERROR"};
136 
137 /// \brief approximation base
139  NOBASE = 0,
140  AINSWORTH_LEGENDRE_BASE = 1, ///< Ainsworth Cole (Legendre) approx. base \cite NME:NME847
141  AINSWORTH_LOBATTO_BASE, ///< Like AINSWORTH_LEGENDRE_BASE but with Lobatto base instead Legendre \cite beriot2015efficient
142  AINSWORTH_BERNSTEIN_BEZIER_BASE, ///< Not yet implemented, in implementation we will follow \cite ainsworth2011bernstein
143  DEMKOWICZ_JACOBI_BASE, ///< Construction of base is by Demkowicz \cite fuentes2015orientation
144  USER_BASE, ///< user implemented approximation base
146 };
147 
148 // Fix spelling bug (do do not use this)
149 #define AINSWORTH_LOBBATO_BASE AINSWORTH_LOBATTO_BASE
150 
151 const static char *const ApproximationBaseNames[] = {
152  "NOBASE",
153  "AINSWORTH_LEGENDRE_BASE",
154  "AINSWORTH_LOBATTO_BASE",
155  "AINSWORTH_BERNSTEIN_BEZIER_BASE",
156  "DEMKOWICZ_JACOBI_BASE",
157  "USER_BASE",
158  "LASTBASE"};
159 
160 #ifdef __cplusplus
161 const static FieldApproximationBase ApproximationBaseArray[] = {
162  NOBASE,
167  USER_BASE,
168  LASTBASE};
169 #endif // __cplusplus
170 
171 /// \brief approximation spaces
173  NOSPACE = 0,
174  NOFIELD = 1, ///< scalar or vector of scalars describe (no true field)
175  H1, ///< continuous field
176  HDIV, ///< field with continuous normal traction
177  HCURL, ///< field with continuous tangents
178  L2, ///< field with C-1 continuity
179  LASTSPACE ///< FieldSpace in [ 0, LASTSPACE )
180 };
181 
182 const static char * const FieldSpaceNames[] = {
183  "NOSPACE",
184  "NOFIELD",
185  "H1",
186  "HDIV",
187  "HCURL",
188  "L2",
189  "LASTSPACE"
190 };
191 
192 /// \brief Those types control how functions respond on arguments, f.e. error handling
193 enum MoFEMTypes { MF_ZERO = 0, MF_EXCL = 1 << 0, MF_EXIST = 1 << 1 };
194 
195 /// \brief RowColData
198 };
199 
200 /**
201  * Controls adjency multi_index container (e.g. BYROW is adjacenciecy by field on on rows), see
202  * \ref MoFEM::FieldEntityEntFiniteElementAdjacencyMap
203  *
204  */
205 enum ByWhat {
206  BYROW = 1 << 0,
207  BYCOL = 1 << 1,
208  BYDATA = 1 << 2,
209  BYROWDATA = 1 << 0 | 1 << 2,
210  BYCOLDATA = 1 << 1 | 1 << 2,
211  BYROWCOL = 1 << 0 | 1 << 1,
212  BYALL = 1 << 0 | 1 << 1 | 1 << 2
213 };
214 
215 /**
216  * \brief Types of sets and boundary conditions
217  *
218  */
219 enum CubitBC {
221  NODESET = 1 << 0,
222  SIDESET = 1 << 1,
223  BLOCKSET = 1 << 2,
224  MATERIALSET = 1 << 3,
225  DISPLACEMENTSET = 1 << 4,
226  FORCESET = 1 << 5,
227  PRESSURESET = 1 << 6,
228  VELOCITYSET = 1 << 7,
229  ACCELERATIONSET = 1 << 8,
230  TEMPERATURESET = 1 << 9,
231  HEATFLUXSET = 1 << 10,
232  INTERFACESET = 1 << 11,
233  UNKNOWNNAME = 1 << 12,
234  MAT_ELASTICSET = 1 << 13, ///< block name is "MAT_ELASTIC"
235  MAT_INTERFSET = 1 << 14,
236  MAT_THERMALSET = 1 << 15, ///< block name is "MAT_THERMAL"
237  BODYFORCESSET = 1 << 16, ///< block name is "BODY_FORCES"
238  MAT_MOISTURESET = 1 << 17, ///< block name is "MAT_MOISTURE"
239  DIRICHLET_BC = 1 << 18,
240  NEUMANN_BC = 1 << 19,
241  LASTSET_BC = 1 << 20
242 };
243 
244 // OFF_DEPRECATED static const unsigned int UNKNOWNCUBITNAME = UNKNOWNNAME;
245 // OFF_DEPRECATED static const unsigned int LASTCUBITSET = LASTSET_BC;
246 
247 /**
248  * \brief Names of types of sets and boundary conditions
249  */
250 const static char *const CubitBCNames[] = {
251  "UNKNOWNSET", "NODESET", "SIDESET", "BLOCKSET",
252  "MATERIALSET", "DISPLACEMENTSET", "FORCESET", "PRESSURESET",
253  "VELOCITYSET", "ACCELERATIONSET", "TEMPERATURESET", "HEATFLUXSET",
254  "INTERFACESET", "UNKNOWNNAME", "MAT_ELASTICSET", "MAT_INTERFSET",
255  "MAT_THERMALSET", "BODYFORCESSET", "MAT_MOISTURESET", "DIRICHLET_BC",
256  "NEUMANN_BC", "LASTSET_BC"};
257 
258 /**
259  * \brief Format of rows in gradients of H1 base functions
260  */
261 enum H1DiffFormating { H1_0 = 0, H1_1, H1_2 };
262 
263 /**
264  * \brief Format in rows of Hdiv base functions
265  */
267 
268 /**
269  * \brief Format in rows of Hdiv gradients of base functions
270  */
272  HDIV0_0 = 0,
281 };
282 
283 /**
284  * \brief Format in rows of Hcurl base functions
285  */
287 
288 /**
289  * \brief Format in rows of Hcurl gradients of base functions
290  */
292  HCURL0_0 = 0,
301 };
302 
303 /**
304  * \brief Verbosity levels
305  */
307 
308 #define BITREFEDGES_SIZE 6 ///< number of edges on tetrahedral
309 #define BITREFLEVEL_SIZE 128 ///< max number of refinements
310 #define BITFIELDID_SIZE 32 ///< max number of fields
311 #define BITFEID_SIZE 32 ///< max number of finite elements
312 #define BITPROBLEMID_SIZE 32 ///< max number of problems
313 #define BITINTERFACEUID_SIZE 32
314 
315 #define MYPCOMM_INDEX 0 ///< default communicator number PCOMM
316 
317 //This Is form MOAB
318 #define MB_TYPE_WIDTH 4
319 #define MB_ID_WIDTH (8 * sizeof(EntityHandle) - MB_TYPE_WIDTH)
320 #define MB_TYPE_MASK ((EntityHandle)0xF << MB_ID_WIDTH)
321 // 2^MB_TYPE_WIDTH-1 ------^
322 
323 #define MB_START_ID ((EntityID)1) ///< All entity id's currently start at 1
324 #define MB_END_ID ((EntityID)MB_ID_MASK) ///< Last id is the complement of the MASK
325 #define MB_ID_MASK (~MB_TYPE_MASK)
326 
327 #define MAX_DOFS_ON_ENTITY 512 ///< Maximal number of DOFs on entity
328 #define DOF_UID_MASK_ON_ENTITY (MAX_DOFS_ON_ENTITY-1) ///< Mask for DOF number on entity form UId
329 
330 #define NOT_USED(x) ( (void)(x) )
331 
332 /** \brief set barrier start
333  * Run code in sequence, starting from process 0, and ends on last process.
334  *
335  * It can be only used for testing. Do not use that function as a part of these
336  * code.
337  *
338  */
339 #define BARRIER_RANK_START(PCMB) \
340  { \
341  for (unsigned int i = 0; i < PCMB->proc_config().proc_rank(); i++) \
342  MPI_Barrier(PCMB->proc_config().proc_comm()); \
343  };
344 
345 /** \brief set barrier start
346  * Run code in sequence, starting from process 0, and ends on last process.
347  *
348  * It can be only used for testing. Do not use that function as a part of these
349  * code.
350  *
351  */
352 #define BARRIER_RANK_END(PCMB) \
353  { \
354  for (unsigned int i = PCMB->proc_config().proc_rank(); \
355  i < PCMB->proc_config().proc_size(); i++) \
356  MPI_Barrier(PCMB->proc_config().proc_comm()); \
357  };
358 
359 #ifdef __cplusplus
360 extern "C" {
361 #endif
362 
363 /**
364  * \brief Is used to indicate that macro is deprecated
365  * Do nothing just triggers error at the compilation
366  */
368 
369 #ifdef __cplusplus
370 }
371 #endif
372 
373 /**
374  * \brief First executable line of each MoFEM function, used for error handling. Final
375  line of MoFEM functions should be MoFEMFunctionReturn(0);
376 
377  \node Not collective
378 
379  Example
380  \code
381  PetscErrorCode fun() {
382  int something;
383  MoFEMFunctionBegin;
384  MoFEMFunctionReturn(0);
385  }
386  \endcode
387 
388  */
389 #define MoFEMFunctionBegin \
390  PetscFunctionBegin; \
391  try {
392 
393 /**
394  * @brief \brief Catch errors
395  *
396  * Usage in main functions
397  * \code
398  * int main(int argc, char *argv[]) {
399  *
400  * MoFEM::Core::Initialize(&argc, &argv, (char *)0, help);
401  *
402  * try {
403  *
404  * // More code here
405  *
406  * }
407  * CATCH_ERRORS;
408  *
409  * return MoFEM::Core::Finalize();
410  *
411  * }
412  * \endcode
413  *
414  */
415 #define CATCH_ERRORS \
416  catch (MoFEMExceptionInitial const &ex) { \
417  return PetscError(PETSC_COMM_SELF, ex.lINE, PETSC_FUNCTION_NAME, __FILE__, \
418  ex.errorCode, PETSC_ERROR_INITIAL, ex.what()); \
419  } \
420  catch (MoFEMExceptionRepeat const &ex) { \
421  return PetscError(PETSC_COMM_WORLD, ex.lINE, PETSC_FUNCTION_NAME, \
422  __FILE__, ex.errorCode, PETSC_ERROR_REPEAT, " "); \
423  } \
424  catch (MoFEMException const &ex) { \
425  SETERRQ(PETSC_COMM_WORLD, ex.errorCode, ex.errorMessage); \
426  } \
427  catch (std::exception const &ex) { \
428  std::string message("Error: " + std::string(ex.what()) + " at " + \
429  boost::lexical_cast<std::string>(__LINE__) + " : " + \
430  std::string(__FILE__) + " in " + \
431  std::string(PETSC_FUNCTION_NAME)); \
432  SETERRQ(PETSC_COMM_WORLD, MOFEM_STD_EXCEPTION_THROW, message.c_str()); \
433  }
434 
435 /**
436  * \brief Last executable line of each PETSc function used for error handling. Replaces return()
437  * @param a error code
438  *
439  * \note MoFEMFunctionReturn has to be used with MoFEMFunctionBegin and can be
440  * used only at the end of the function. If is need to return function in
441  * earlier use MoFEMFunctionReturnHot
442  *
443  */
444 #define MoFEMFunctionReturn(a) \
445  } \
446  CATCH_ERRORS \
447  PetscFunctionReturn(a)
448 
449 /**
450  * \brief First executable line of each MoFEM function, used for error handling. Final
451  line of MoFEM functions should be MoFEMFunctionReturn(0);
452  Use of this function allows for lighter profiling by default.
453 
454  \node Not collective
455 
456  Example:
457  \code
458  PetscErrorCode fun() {
459  int something;
460  MoFEMFunctionBeginHot;
461 
462  // some work here
463 
464  MoFEMFunctionReturnHot(0);
465  }
466  \endcode
467 */
468 #define MoFEMFunctionBeginHot PetscFunctionBeginHot
469 
470 /**
471  * \brief Last executable line of each PETSc function used for error handling. Replaces return()
472  * @param a error code
473  */
474 #define MoFEMFunctionReturnHot(a) \
475  PetscFunctionReturn(a)
476 
477 #define CHKERRQ_PETSC(n) CHKERRQ(n)
478 /**
479  * \brief check error code of MoAB function
480  * @param a MoABErrorCode
481  */
482 #define CHKERRQ_MOAB(a) \
483  if (PetscUnlikely(MB_SUCCESS != (a))) { \
484  std::string error_str = (unsigned)(a) <= (unsigned)MB_FAILURE \
485  ? moab::ErrorCodeStr[a] \
486  : "INVALID ERROR CODE"; \
487  std::string str("MOAB error (" + boost::lexical_cast<std::string>((a)) + \
488  ") " + error_str + " at line " + \
489  boost::lexical_cast<std::string>(__LINE__) + " : " + \
490  std::string(__FILE__)); \
491  SETERRQ(PETSC_COMM_SELF, MOFEM_MOAB_ERROR, str.c_str()); \
492  }
493 
494 /**
495  * \brief Check error code of MoFEM/MOAB/PETSc function
496  * @param a MoFEMErrorCode
497  *
498  * \code
499  * MoFEMErrorCode fun() {
500  * MoFEMFunctionBeginHot;
501  * rval = fun_moab(); CHKERRG(rval);
502  * ierr = fun_petsc(); CHKERRG(ierr);
503  * merr = fun_mofem(); CHKERRG(merr);
504  * MoFEMFunctionReturnHot(0);
505  * \endcode
506  *
507  * \note Function detect type of errocode using specialized template function
508  * getErrorType, i.e. condition is evaluated at compilation time.
509  *
510  */
511 #define CHKERRG(n) \
512  if ((boost::is_same<BOOST_TYPEOF((n)), \
513  MoFEMErrorCodeGeneric<PetscErrorCode> >::value)) { \
514  CHKERRQ_PETSC((n)); \
515  } else if (boost::is_same<BOOST_TYPEOF((n)), \
516  MoFEMErrorCodeGeneric<moab::ErrorCode> >::value) { \
517  CHKERRQ_MOAB((n)); \
518  }
519 
520 /**
521  * @brief Inline error check
522  *
523  * \code
524  *
525  * MoFEMErrorCode foo() {
526  * MoFEMFunctionBegin;
527  *
528  * // Call other functions
529  * CHKERR fun_moab();
530  * CHKERR fun_petsc();
531  * CHKERR fun_mofem();
532  *
533  * // Throw error
534  * SETERRQ(PETSC_COMM_WORLD, MOFEM_DATA_INCONSISTENCY, "Some error message");
535  *
536  * MoFEMFunctionReturn(0);
537  * }
538  *
539  * int main(int argc, char *argv[]) {
540  *
541  * // Initailise MoFEM and Petsc
542  * MoFEM::Core::Initialize(&argc, &argv, (char *)0, help);
543  *
544  * try {
545  *
546  * moab::Core mb_instance; // MoAB database
547  * moab::Interface &moab = mb_instance;
548  * MoFEM::Core core(moab); // MOFEM database
549  * MoFEM::CoreInterface &m_field = core;
550  *
551  * CHKERR foo(); // Call function
552  *
553  * }
554  * CATCH_ERRORS;
555  *
556  * return MoFEM::Core::Finalize();
557  *
558  * }
559  *
560  * \endcode
561  *
562  */
563 #define CHKERR ErrorCheckerCode<__LINE__>() <<
564 
565 /**
566  * \brief Check error code of MoAB function and throw MoFEM exception
567  * @param a MoABErrorCode
568  */
569 #define MOAB_THROW(a) \
570  { \
571  if (PetscUnlikely(MB_SUCCESS != (a))) { \
572  std::string str("MOAB error " + boost::lexical_cast<std::string>((a)) + \
573  " at line " + \
574  boost::lexical_cast<std::string>(__LINE__) + " : " + \
575  std::string(__FILE__)); \
576  throw MoFEMException(MOFEM_MOAB_ERROR, str.c_str()); \
577  } \
578  }
579 
580 /**
581  * \brief Throw MoFEM exception
582  * @param a message
583  */
584 #define THROW_MESSAGE(a) \
585  { \
586  std::string str("MoFEM error " + boost::lexical_cast<std::string>((a)) + \
587  " at line " + boost::lexical_cast<std::string>(__LINE__) + \
588  " : " + std::string(__FILE__)); \
589  throw MoFEMException(MOFEM_MOFEMEXCEPTION_THROW, str.c_str()); \
590  }
591 
592 /**
593  * \brief Convert number to string
594  * @param x number
595  */
596 #define SSTR(x) toString(x)
597 
598 #endif //__DEFINITONS_H__
field with continuous normal traction
Definition: definitions.h:176
user implemented approximation base
Definition: definitions.h:144
block name is "MAT_MOISTURE"
Definition: definitions.h:238
scalar or vector of scalars describe (no true field)
Definition: definitions.h:174
HCurlFormatting
Format in rows of Hcurl base functions.
Definition: definitions.h:286
static const char *const MoFEMErrorCodesNames[]
Definition: definitions.h:124
RowColData
RowColData.
Definition: definitions.h:196
DMInterfaces
interfaces for PETSc DM interfaces
Definition: definitions.h:79
FieldSpace in [ 0, LASTSPACE )
Definition: definitions.h:179
static const char *const ApproximationBaseNames[]
Definition: definitions.h:151
Interfaces
Interfaces IDs.
Definition: definitions.h:40
Not yet implemented, in implementation we will follow .
Definition: definitions.h:142
FieldApproximationBase
approximation base
Definition: definitions.h:138
VERBOSITY_LEVELS
Verbosity levels.
Definition: definitions.h:306
Ainsworth Cole (Legendre) approx. base .
Definition: definitions.h:140
block name is "MAT_THERMAL"
Definition: definitions.h:236
ByWhat
Definition: definitions.h:205
block name is "BODY_FORCES"
Definition: definitions.h:237
static const char *const FieldSpaceNames[]
Definition: definitions.h:182
field with continuous tangents
Definition: definitions.h:177
BaseIntefaces
Interfaces uses to manage base functions.
Definition: definitions.h:87
CubitBC
Types of sets and boundary conditions.
Definition: definitions.h:219
FieldSpace
approximation spaces
Definition: definitions.h:172
DEPRECATED void macro_is_depracted_using_deprecated_function()
Is used to indicate that macro is deprecated Do nothing just triggers error at the compilation...
Definition: Core.cpp:20
block name is "MAT_ELASTIC"
Definition: definitions.h:234
Like AINSWORTH_LEGENDRE_BASE but with Lobatto base instead Legendre .
Definition: definitions.h:141
#define DEPRECATED
Definition: definitions.h:29
LoopInterfaces
Definition: definitions.h:66
HCurlDiffFormatting
Format in rows of Hcurl gradients of base functions.
Definition: definitions.h:291
H1DiffFormating
Format of rows in gradients of H1 base functions.
Definition: definitions.h:261
HDivDiffFormatting
Format in rows of Hdiv gradients of base functions.
Definition: definitions.h:271
continuous field
Definition: definitions.h:175
MoFEMErrorCodes
Error handling.
Definition: definitions.h:109
static const char *const CubitBCNames[]
Names of types of sets and boundary conditions.
Definition: definitions.h:250
Construction of base is by Demkowicz .
Definition: definitions.h:143
MoFEMTypes
Those types control how functions respond on arguments, f.e. error handling.
Definition: definitions.h:193
field with C-1 continuity
Definition: definitions.h:178
HDivFormatting
Format in rows of Hdiv base functions.
Definition: definitions.h:266