v0.14.0
Interface.hpp
Go to the documentation of this file.
1 /** \file Interface.hpp
2  * \brief MoFEM interface
3  */
4 
5 #ifndef __INTERFACE_HPP__
6 #define __INTERFACE_HPP__
7 
8 /** \brief name space of MoFEM library functions and classes
9  */
10 namespace MoFEM {
11 
12 struct MeshsetsManager;
13 
14 /**
15  * \brief Interface
16  * \nosubgrouping
17  * \ingroup mofem
18  *
19  * This interface is used by user to: <br>
20  * - create approximation fields, <br>
21  * - declare elements, <br>
22  * - declare problems, <br>
23  *
24  * \todo Clean interface, organize groups outsource some functions to
25  * independent interface
26  */
28 
29  virtual ~CoreInterface() = default;
30 
31  /**
32  * @brief Get the core
33  *
34  * @return int
35  */
36  virtual const int getValue() const = 0;
37 
38  /**
39  * @brief Get RefEntity
40  *
41  * @param ent
42  * @return boost::shared_ptr<RefEntityTmp<0>>
43  */
44  virtual boost::shared_ptr<RefEntityTmp<0>>
45  make_shared_ref_entity(const EntityHandle ent) = 0;
46 
47  /** \name Interfaces */
48 
49  /**@{*/
50 
51  /**
52  * get moab instance
53  */
54  virtual moab::Interface &get_moab() = 0;
55 
56  /**
57  * get moab instance interface
58  */
59  virtual const moab::Interface &get_moab() const = 0;
60 
61  /**
62  * @brief Set the moab interface object
63  *
64  * @param new_moab
65  * @param verb
66  * @return MoFEMErrorCode
67  */
69  int verb = VERBOSE) = 0;
70 
71  /** \brief get MeshsetsManager pointer
72  */
74 
75  /** \brief get MeshsetsManager pointer
76  */
77  virtual const MeshsetsManager *get_meshsets_manager_ptr() const = 0;
78 
79  /** \brief get MeshsetsManager pointer
80  */
82 
83  /** \brief get MeshsetsManager pointer
84  */
85  virtual const MeshsetsManager &get_meshsets_manager() const = 0;
86 
87  /**@}*/
88 
89  /** \name Basic entity */
90 
91  /**@{*/
92 
93  /**
94  * \brief Get pointer to basic entity data.
95  *
96  * This structure keeps data like tags handlers and other data used to
97  * construct mofem entities, dofs and finite elements.
98  *
99  */
100  virtual boost::shared_ptr<BasicEntityData> &get_basic_entity_data_ptr() = 0;
101 
102  /**@}*/
103 
104  /** \name Communicator */
105 
106  /**@{*/
107 
108  /**
109  * get MPI communicator
110  *
111  */
112  virtual MPI_Comm &get_comm() const = 0;
113 
114  /**
115  * get communicator size
116  */
117  virtual int get_comm_size() const = 0;
118 
119  /**
120  * get comm rank
121  */
122  virtual int get_comm_rank() const = 0;
123 
124  /** \name Check consistency */
125 
126  /**@{*/
127 
128  /**
129  * \brief check data consistency in entitiesPtr
130  *
131  */
132  virtual MoFEMErrorCode
133  check_number_of_ents_in_ents_field(const std::string &name) const = 0;
134 
135  /**
136  * \brief check data consistency in entitiesPtr
137  *
138  */
140 
141  /**
142  * \brief check data consistency in entsFiniteElements
143  *
144  */
146  const std::string &name) const = 0;
147 
148  /**
149  * \brief check data consistency in entsFiniteElements
150  *
151  */
152  virtual MoFEMErrorCode
154 
155  /** \name Database */
156 
157  /**@{*/
158 
159  /**
160  * \brief Clear database
161  * @param verb Verbosity level
162  * @return Error code
163  */
164  virtual MoFEMErrorCode clear_database(int verb = DEFAULT_VERBOSITY) = 0;
165 
166  /**
167  * \brief Clear database and initialize it once again
168  * @param verb Verbosity level
169  * @return Error code
170  */
171  virtual MoFEMErrorCode rebuild_database(int verb = DEFAULT_VERBOSITY) = 0;
172 
173  /**@}*/
174 
175  /** \name Delete and remove */
176 
177  /**@{*/
178 
179  /**
180  * @brief Remove parents from entities
181  *
182  */
183  virtual MoFEMErrorCode
184  remove_parents_by_ents(const Range &ents, int verb = DEFAULT_VERBOSITY) = 0;
185 
186  /**
187  * @brief Remove parent from entities on bit level
188  *
189  * Evert entity created by refinement, split or any other change on the mesh
190  * can have parent. This function remove parent from entity,
191  *
192  * \note Functions makeing topological changes on entities should repsect
193  * parents child relation. This erase that relation. If you going to split
194  * faces and create interface is recommended to call this function before
195  * split opeartion.
196  *
197  * @param bit level
198  * @param mask of bit level
199  * @param verb verbosity level
200  * @return MoFEMErrorCode
201  */
202  virtual MoFEMErrorCode
204  int verb = DEFAULT_VERBOSITY) = 0;
205 
206  /**
207  * @brief Remove paremts from entities having parents in passed range
208  *
209  */
210  virtual MoFEMErrorCode
211  remove_parents_by_parents(const Range &ents,
212  int verb = DEFAULT_VERBOSITY) = 0;
213 
214  /** \brief delete entities form mofem and moab database
215  *
216  */
217  virtual MoFEMErrorCode
219  const bool remove_parent = false,
220  int verb = DEFAULT_VERBOSITY,
221  MoFEMTypes mf = MF_ZERO) = 0;
222 
223  /** \brief remove entities form mofem database
224  */
225  virtual MoFEMErrorCode remove_ents(const Range ents,
226  int verb = DEFAULT_VERBOSITY) = 0;
227 
228  /** \brief remove entities form mofem database
229  */
230  virtual MoFEMErrorCode
232  int verb = DEFAULT_VERBOSITY) = 0;
233 
234  /** \brief delete finite element from mofem database
235  */
236  virtual MoFEMErrorCode
237  delete_finite_element(const std::string name,
238  int verb = DEFAULT_VERBOSITY) = 0;
239 
240  /** \name Fields */
241 
242  /**@{*/
243 
244  /**
245  * \brief Add field
246  *
247  * \note add_file is a collective, should be executed on all processors.
248  * Otherwise could lead to deadlock.
249  *
250  * @param name name of the filed
251  * @param space space (L2,H1,Hdiv,Hcurl)
252  * @param base approximation base, see FieldApproximationBase
253  * @param nb_of_coefficients number of field coefficients
254  * @param tag_type type of the tag MB_TAG_DENSE or MB_TAG_SPARSE
255  * (DENSE is faster and uses less memory, SPARSE is more flexible if you
256  * define field on subdomains)
257  * @param bh if MF_EXCL throws error if field exits, MF_ZERO
258  * no error if field exist
259  * @param verb verbosity level
260  * @return error code
261  */
262  virtual MoFEMErrorCode
263  add_broken_field(const std::string &name, const FieldSpace space,
264  const FieldApproximationBase base,
265  const FieldCoefficientsNumber nb_of_coefficients,
266  const TagType tag_type = MB_TAG_SPARSE,
267  const enum MoFEMTypes bh = MF_EXCL,
268  int verb = DEFAULT_VERBOSITY) = 0;
269 
270  /**
271  * \brief Add field
272  *
273  * \note add_file is a collective, should be executed on all processors.
274  * Otherwise could lead to deadlock.
275  *
276  * @param name name of the filed
277  * @param space space (L2,H1,Hdiv,Hcurl)
278  * @param continuity continuity (CONTINUOUS, DISCONTINUOUS)
279  * @param base approximation base, see FieldApproximationBase
280  * @param nb_of_coefficients number of field coefficients
281  * @param tag_type type of the tag MB_TAG_DENSE or MB_TAG_SPARSE
282  * (DENSE is faster and uses less memory, SPARSE is more flexible if you
283  * define field on subdomains)
284  * @param bh if MF_EXCL throws error if field exits, MF_ZERO
285  * no error if field exist
286  * @param verb verbosity level
287  * @return error code
288  */
289  virtual MoFEMErrorCode
290  add_field(const std::string &name, const FieldSpace space,
291  const FieldApproximationBase base,
292  const FieldCoefficientsNumber nb_of_coefficients,
293  const TagType tag_type = MB_TAG_SPARSE,
294  const enum MoFEMTypes bh = MF_EXCL,
295  int verb = DEFAULT_VERBOSITY) = 0;
296 
297  /**
298  * @brief Delete field
299  *
300  * @param name field name
301  * @param verb verbosity level
302  * @return MoFEMErrorCode
303  */
304  virtual MoFEMErrorCode delete_field(const std::string name,
305  int verb = DEFAULT_VERBOSITY) = 0;
306 
307  /**
308  * \brief Add entities to field meshset
309  * \ingroup mofem_field
310  *
311  * \note not collective
312  *
313  * The lower dimension entities are added depending on the space type
314  *
315  * @param ents range of entities
316  * @param dim dimension of entities
317  * @param name name of field
318  * @param verb verbosity level
319  * @return error code
320  */
321  virtual MoFEMErrorCode
322  add_ents_to_field_by_dim(const Range &ents, const int dim,
323  const std::string &name,
324  int verb = DEFAULT_VERBOSITY) = 0;
325 
326  /**
327  * \brief Add entities to field meshset
328  * \ingroup mofem_field
329  *
330  * \note not collective
331  *
332  * The lower dimension entities are added depending on the space type
333  *
334  * @param ents range of entities
335  * @param type type of entities
336  * @param name name of field
337  * @param verb verbosity level
338  * @return error code
339  */
340  virtual MoFEMErrorCode
341  add_ents_to_field_by_type(const Range &ents, const EntityType type,
342  const std::string &name,
343  int verb = DEFAULT_VERBOSITY) = 0;
344 
345  /**
346  * \brief Add entities to field meshset
347  * \ingroup mofem_field
348  *
349  * \not collective
350  *
351  * The lower dimension entities are added depending on the space type
352  *
353  * @param meshset
354  * @param dim dimension
355  * @param name name of field
356  * @param recursive take entities recursively from embedded entities
357  * @param verb verbosity level
358  * @return error code
359  */
360  virtual MoFEMErrorCode
361  add_ents_to_field_by_dim(const EntityHandle meshset, const int dim,
362  const std::string &name, const bool recursive = true,
363  int verb = DEFAULT_VERBOSITY) = 0;
364 
365  /**
366  * \brief Add entities to field meshset
367  * \ingroup mofem_field
368  *
369  * \note not collective
370  *
371  * The lower dimension entities are added depending on the space type
372  *
373  * @param meshset
374  * @param type of entities
375  * @param name name of field
376  * @param recursive take entities recursively from embedded entities
377  * @param verb verbosity level
378  * @return error code
379  */
380  virtual MoFEMErrorCode
381  add_ents_to_field_by_type(const EntityHandle meshset, const EntityType type,
382  const std::string &name,
383  const bool recursive = true,
384  int verb = DEFAULT_VERBOSITY) = 0;
385 
386  /**
387  * @brief Create a vertices and add to field object
388  *
389  * Create vertices and add them to field. Those vertices would be carring
390  * DOFs of the filed.
391  *
392  * \note This function is typically used when NOFIELD is created, for example
393  * load factor in arc-length control.
394  *
395  * @param name name of the field
396  * @param bit bit ref level of the created vertices
397  * @param coords of the vertices
398  * @param size number of vertices
399  * @param verb verbosity level
400  * @return MoFEMErrorCode
401  */
402  virtual MoFEMErrorCode
403  create_vertices_and_add_to_field(const std::string name,
404  const double coords[], int size,
405  int verb = DEFAULT_VERBOSITY) = 0;
406 
407  /**
408  * \brief remove entities from field
409  * \ingroup mofem_field
410  *
411  * \note not collective
412  *
413  */
414  virtual MoFEMErrorCode
416  const BitRefLevel mask,
417  int verb = DEFAULT_VERBOSITY) = 0;
418 
419  /**
420  * \brief remove entities from field
421  * \ingroup mofem_field
422  *
423  * \note not collective
424  *
425  */
426  virtual MoFEMErrorCode
427  remove_ents_from_field(const std::string name, const EntityHandle meshset,
428  const EntityType type,
429  int verb = DEFAULT_VERBOSITY) = 0;
430 
431  /**
432  * \brief remove entities from field
433  * \ingroup mofem_field
434  *
435  * \note not collective
436  *
437  */
438  virtual MoFEMErrorCode
439  remove_ents_from_field(const std::string name, const Range ents,
440  int verb = DEFAULT_VERBOSITY) = 0;
441 
442  /**
443  * \brief remove entities from all fields
444  * \ingroup mofem_field
445  *
446  * \note not collective
447  *
448  */
449  virtual MoFEMErrorCode
450  remove_ents_from_field(const Range ents, int verb = DEFAULT_VERBOSITY) = 0;
451 
452  /**
453  * \brief Set order approximation of the entities in the field
454  * \ingroup mofem_field
455  *
456  * \note not collective
457  *
458  * \param meshset containing set of the entities (use 0 for all the entities
459  * in the meshset) \param type selected type of the entities f.e. MBTET,
460  * MBTRI, MBEDGE, MBVERTEX, see moab documentation \param order
461  * approximation order
462  */
463  virtual MoFEMErrorCode set_field_order(const EntityHandle meshset,
464  const EntityType type,
465  const std::string &name,
467  int verb = DEFAULT_VERBOSITY) = 0;
468 
469  /**
470  * \brief Set order approximation of the entities in the field
471  * \ingroup mofem_field
472  *
473  * \note not collective
474  *
475  * \param entities
476  * \param type selected type of the entities f.e. MBTET, MBTRI, MBEDGE,
477  * MBVERTEX, see moab documentation \param order approximation order
478  */
479  virtual MoFEMErrorCode set_field_order(const Range &ents,
480  const std::string &name,
482  int verb = DEFAULT_VERBOSITY) = 0;
483 
484  /**
485  * \brief Set order approximation of the entities in the field
486  * \ingroup mofem_field
487  *
488  * \note not collective
489  *
490  * \param bit refinement level
491  * \param mask bit mask
492  * \param type selected type of the entities f.e. MBTET, MBTRI, MBEDGE,
493  * MBVERTEX, see moab documentation \param order approximation order
494  */
496  const BitRefLevel &bit, const BitRefLevel &mask, const EntityType type,
497  const std::string &name, const ApproximationOrder order,
498  int verb = DEFAULT_VERBOSITY) = 0;
499 
500  /** \brief list entities in the field
501  * \ingroup mofem_field
502  */
503  virtual MoFEMErrorCode list_fields() const = 0;
504 
505  /** build fields
506  * \ingroup mofem_field
507  */
508  virtual MoFEMErrorCode build_fields(int verb = DEFAULT_VERBOSITY) = 0;
509 
510  /**
511  * @brief build field by name
512  *
513  * @param field_name
514  * @param verb
515  * m@return MoFEMErrorCode
516  */
517  virtual MoFEMErrorCode build_field(const std::string field_name,
518  int verb = DEFAULT_VERBOSITY) = 0;
519 
520  /**
521  * @brief Get field Id
522  *
523  * @param name of field
524  * @return BitFieldId
525  */
526  virtual BitFieldId get_field_id(const std::string &name) const = 0;
527 
528  /** \brief get field bit number
529  *
530  * \param name of field
531  * Example:\code
532  auto field_number = mField.get_field_bit_number("DISPLACEMENT");
533  * \endcode
534  */
535  virtual FieldBitNumber get_field_bit_number(const std::string name) const = 0;
536 
537  /**
538  * @brief get field name from id
539  *
540  * @param id
541  * @return std::string
542  */
543  virtual std::string get_field_name(const BitFieldId id) const = 0;
544 
545  /** \brief get field meshset
546  *
547  * \param name of Field
548  * Example:\code
549  EntityHandle disp_files_meshset = mField.get_field_meshset("DISPLACEMENT");
550  * \endcode
551  */
552  virtual EntityHandle get_field_meshset(const std::string name) const = 0;
553 
554  /**
555  * \brief get entities in the field by dimension
556  * @param name field name
557  * @param dim dim
558  * @param ents ents
559  * @return error code
560 
561  * \ingroup mofem_field
562  */
563  virtual MoFEMErrorCode get_field_entities_by_dimension(const std::string name,
564  int dim,
565  Range &ents) const = 0;
566 
567  /**
568  * \brief get entities in the field by type
569  * @param name field name
570  * @param type entity type
571  * @param ents ents
572  * @return error code
573 
574  * \ingroup mofem_field
575  */
576  virtual MoFEMErrorCode get_field_entities_by_type(const std::string name,
577  EntityType type,
578  Range &ents) const = 0;
579 
580  /**
581  * \brief get entities in the field by handle
582  * @param name field name
583  * @param ents ents
584  * @return error code
585 
586  * \ingroup mofem_field
587  */
588  virtual MoFEMErrorCode get_field_entities_by_handle(const std::string name,
589  Range &ents) const = 0;
590 
591  /** \brief check if field is in database
592  * \ingroup mofem_field
593  *
594  * \param name field name
595  * \return true if field exist
596  *
597  */
598  virtual bool check_field(const std::string &name) const = 0;
599 
600  /** \brief get field structure
601  * \ingroup mofem_field
602  *
603  * If field is not found throw error if bh == MF_EXIST, or return
604  * nullptr if bh == MF_ZERO, i.e. otherwise
605  *
606  * \param name field name
607  * \param bh controls behaviour
608  * \return const Field*
609  *
610  */
611  virtual const Field *
612  get_field_structure(const std::string &name,
613  enum MoFEMTypes bh = MF_EXIST) const = 0;
614 
615  /**@}*/
616 
617  /** \name Finite elements */
618 
619  /**@{*/
620 
621  /**
622  * @brief get finite element struture
623  *
624  * If finite element is not found throw error if bh == MF_EXIST, or return
625  * nullptr if bh == MF_ZERO, i.e. otherwise
626  *
627  * @param name
628  * @param bh
629  * @return FiniteElement*
630  */
631  virtual const FiniteElement *
632  get_finite_element_structure(const std::string &name,
633  enum MoFEMTypes bh = MF_EXIST) const = 0;
634 
635  /**
636  * \brief Check if finite element is in database
637  * @param name Name of finite element
638  * @return true if element is declared
639  */
640  virtual bool check_finite_element(const std::string &name) const = 0;
641 
642  /**
643  * \brief add finite element
644  * \ingroup mofem_fe
645  * \param name finite element name
646  *
647  * \note add_file is a collective, should be executed on all processors.
648  * Otherwise could lead to deadlock.
649  *
650  * Example \code
651  CHKERR mField.add_finite_element("ELASTIC");
652  CHKERR mField.add_finite_element("PLASTIC");
653  \endcode
654  */
655  virtual MoFEMErrorCode add_finite_element(const std::string &fe_name,
656  enum MoFEMTypes bh = MF_EXCL,
657  int verb = DEFAULT_VERBOSITY) = 0;
658 
659  /**
660  * \brief modify finite element table, only for advanced user
661  * \ingroup mofem_fe
662  *
663  * \note add_file is a collective, should be executed on all processors.
664  * Otherwise could lead to deadlock.
665  *
666  * Using that functions means that you like to do something not usual.
667  *
668  */
669  virtual MoFEMErrorCode
670  modify_finite_element_adjacency_table(const std::string &fe_name,
671  const EntityType type,
672  ElementAdjacencyFunct function) = 0;
673 
674  /** \brief set finite element field data
675  * \ingroup mofem_fe
676  *
677  * \note add_file is a collective, should be executed on all processors.
678  * Otherwise could lead to deadlock.
679  *
680  * \param name finite element name
681  * \param name field name
682  *
683  * This function will set memory in the form of a vector
684  */
685  virtual MoFEMErrorCode
686  modify_finite_element_add_field_data(const std::string &fe_name,
687  const std::string name_filed) = 0;
688 
689  /** \brief unset finite element field data
690  * \ingroup mofem_fe
691  *
692  * \note add_file is a collective, should be executed on all processors.
693  * Otherwise could lead to deadlock.
694  *
695  * \param name finite element name
696  * \param name field name
697  *
698  * This function will set memory in the form of a vector
699  */
700  virtual MoFEMErrorCode
701  modify_finite_element_off_field_data(const std::string &fe_name,
702  const std::string name_filed) = 0;
703 
704  /** \brief set field row which finite element use
705  * \ingroup mofem_fe
706  *
707  * \note add_file is a collective, should be executed on all processors.
708  * Otherwise could lead to deadlock.
709  *
710  * \param name finite element name
711  * \param name field name
712  */
713  virtual MoFEMErrorCode
714  modify_finite_element_add_field_row(const std::string &fe_name,
715  const std::string name_row) = 0;
716 
717  /** \brief unset field row which finite element use
718  * \ingroup mofem_fe
719  *
720  * \note add_file is a collective, should be executed on all processors.
721  * Otherwise could lead to deadlock.
722  *
723  * \param name finite element name
724  * \param name field name
725  */
726  virtual MoFEMErrorCode
727  modify_finite_element_off_field_row(const std::string &fe_name,
728  const std::string name_row) = 0;
729 
730  /** \brief set field col which finite element use
731  * \ingroup mofem_fe
732  *
733  * \note add_file is a collective, should be executed on all processors.
734  * Otherwise could lead to deadlock.
735  *
736  * \param name finite element name
737  * \param name field name
738  */
739  virtual MoFEMErrorCode
740  modify_finite_element_add_field_col(const std::string &fe_name,
741  const std::string name_row) = 0;
742 
743  /** \brief unset field col which finite element use
744  * \ingroup mofem_fe
745  *
746  * \note add_file is a collective, should be executed on all processors.
747  * Otherwise could lead to deadlock.
748  *
749  * \param name finite element name
750  * \param name field name
751  */
752  virtual MoFEMErrorCode
753  modify_finite_element_off_field_col(const std::string &fe_name,
754  const std::string name_row) = 0;
755 
756  /**
757  * \brief add entities to finite element
758  * \ingroup mofem_fe
759  *
760  * \note not collective
761  *
762  * @param entities meshset or range form were entities taken
763  * @param type type of entity
764  * @param name name of field
765  * @param recursive take entities from meshsets in meshset
766  * @return error code
767  */
769  const EntityHandle entities, const EntityType type,
770  const std::string &name, const bool recursive = true) = 0;
771 
772  /**
773  * \brief add entities to finite element
774  * \ingroup mofem_fe
775  *
776  * \note not collective
777  *
778  * @param entities meshset or range form were entities taken
779  * @param dim dimension
780  * @param name name of field
781  * @param recursive take entities from meshsets in meshset
782  * @return error code
783  */
784  virtual MoFEMErrorCode
785  add_ents_to_finite_element_by_dim(const EntityHandle entities, const int dim,
786  const std::string &name,
787  const bool recursive = true) = 0;
788 
789  /**
790  * \brief add entities to finite elements
791  * \ingroup mofem_fe
792  *
793  * \note not collective
794  *
795  * @param ents range of entities
796  * @param type type of entity (MBVERTEX, MBEDGE, MBTRI, ...)
797  * @param name name of finite element
798  * @return error code
799  */
800  virtual MoFEMErrorCode
801  add_ents_to_finite_element_by_type(const Range &ents, const EntityType type,
802  const std::string &name) = 0;
803 
804  /**
805  * \brief add entities to finite elements
806  * \ingroup mofem_fe
807  *
808  * \note not collective
809  *
810  * @param ents range of entities
811  * @param dim dimension of entities
812  * @param name name of finite element
813  * @return error code
814  */
815  virtual MoFEMErrorCode
816  add_ents_to_finite_element_by_dim(const Range &ents, const int dim,
817  const std::string &name) = 0;
818 
819  /** \brief add TET entities from given refinement level to finite element
820  * database given by name
821  * \ingroup mofem_fe
822  *
823  * \note not collective
824  *
825  * \param BitRefLevel bit
826  * \param BitRefLevel mask
827  * \param finite element name
828  * \param finite element type
829  * \param verbose level
830  */
832  const BitRefLevel &bit, const BitRefLevel &mask, const std::string &name,
833  EntityType type, int verb = DEFAULT_VERBOSITY) = 0;
834 
835  /** get finite element meshset
836  * \ingroup mofem_fe
837  *
838  */
839  virtual EntityHandle
840  get_finite_element_meshset(const std::string name) const = 0;
841 
842  /**
843  * \brief get entities in the finite element by dimension
844  * @param name finite element name
845  * @param dim dim
846  * @param ents ents
847  * @return error code
848 
849  * \ingroup mofem_field
850  */
851  virtual MoFEMErrorCode
852  get_finite_element_entities_by_dimension(const std::string name, int dim,
853  Range &ents) const = 0;
854 
855  /**
856  * \brief get entities in the finite element by type
857  * @param name finite element name
858  * @param type entity type
859  * @param ents ents
860  * @return error code
861 
862  * \ingroup mofem_field
863  */
864  virtual MoFEMErrorCode
865  get_finite_element_entities_by_type(const std::string name, EntityType type,
866  Range &ents) const = 0;
867 
868  /**
869  * \brief get entities in the finite element by handle
870  * @param name finite element name
871  * @param ents ents
872  * @return error code
873 
874  * \ingroup mofem_field
875  */
876  virtual MoFEMErrorCode
877  get_finite_element_entities_by_handle(const std::string name,
878  Range &ents) const = 0;
879 
880  /** \brief remove elements from given refinement level to finite element
881  * database \ingroup mofem_fe
882  *
883  * \param BitRefLevel bit
884  * \param BitRefLevel mask
885  * \param verbose level
886  */
887  virtual MoFEMErrorCode
889  const BitRefLevel mask,
890  int verb = DEFAULT_VERBOSITY) = 0;
891 
892  /** \brief remove entities from given refinement level to finite element
893  * database
894  *
895  */
897  const std::string name, const EntityHandle meshset, const EntityType type,
898  int verb = DEFAULT_VERBOSITY) = 0;
899 
900  /** \brief remove entities from finite element database
901  * \ingroup mofem_fe
902  *
903  */
904  virtual MoFEMErrorCode
905  remove_ents_from_finite_element(const std::string name, const Range ents,
906  int verb = DEFAULT_VERBOSITY) = 0;
907 
908  /** \brief remove entities from finite elements in database
909  * \ingroup mofem_fe
910  *
911  */
912  virtual MoFEMErrorCode
914  int verb = DEFAULT_VERBOSITY) = 0;
915 
916  /** \brief add MESHSET element to finite element database given by name
917  * \ingroup mofem_fe
918  *
919  * \note not collective
920  *
921  * \param meshset contains all entities that could be used for finite
922  * element \param name Finite Element name
923  */
924  virtual MoFEMErrorCode
926  const std::string &name,
927  const bool recursive = false) = 0;
928 
929  /** \brief list finite elements in database
930  * \ingroup mofem_fe
931  */
932  virtual MoFEMErrorCode list_finite_elements() const = 0;
933 
934  /**@}*/
935 
936  /** \name Problems */
937 
938  /**@{*/
939 
940  /** \brief Add problem
941  * \ingroup mofem_problems
942  *
943  * \note add_file is a collective, should be executed on all processors.
944  * Otherwise could lead to deadlock.
945  *
946  */
947  virtual MoFEMErrorCode add_problem(const std::string &name,
948  enum MoFEMTypes bh = MF_EXCL,
949  int verb = DEFAULT_VERBOSITY) = 0;
950 
951  /**
952  * \brief check if problem exist
953  * @param name problem name
954  * @return true if problem is in database
955  */
956  virtual bool check_problem(const std::string name) = 0;
957 
958  /** \brief Delete problem
959  * \ingroup mofem_problems
960  *
961  * \note add_file is a collective, should be executed on all processors.
962  * Otherwise could lead to deadlock.
963  *
964  */
965  virtual MoFEMErrorCode delete_problem(const std::string name) = 0;
966 
967  /** \brief add finite element to problem, this add entities assigned to
968  * finite element to a particular problem \ingroup mofem_problems
969  *
970  * \note add_file is a collective, should be executed on all processors.
971  * Otherwise could lead to deadlock.
972  *
973  * \param name Problem name
974  * \param name Finite Element name
975  */
976  virtual MoFEMErrorCode
977  modify_problem_add_finite_element(const std::string name_problem,
978  const std::string &fe_name) = 0;
979 
980  /** \brief unset finite element from problem, this remove entities assigned
981  * to finite element to a particular problem \ingroup mofem_problems
982  *
983  * Note: If problem is build, it need to be cleaned to make this effective
984  *
985  * \note add_file is a collective, should be executed on all processors.
986  * Otherwise could lead to deadlock.
987  *
988  * \param name Problem name
989  * \param name Finite Element name
990  */
991  virtual MoFEMErrorCode
992  modify_problem_unset_finite_element(const std::string name_problem,
993  const std::string &fe_name) = 0;
994 
995  /** \brief add ref level to problem
996  * \ingroup mofem_problems
997  *
998  * \note add_file is a collective, should be executed on all processors.
999  * Otherwise could lead to deadlock.
1000  *
1001  * if same finite element is solved using different level of refinements,
1002  * than the level of refinement has to be specificied to problem in query
1003  *
1004  * \param name Problem name
1005  * \param BitRefLevel bitLevel
1006  * Example: \code
1007  CHKERR
1008  mField.modify_problem_add_finite_element("BEAM_BENDING_ON_MESH_REF1","ELASTIC");
1009  CHKERR
1010  mField.modify_problem_add_finite_element("BEAM_BENDING_ON_MESH_REF2","ELASTIC");
1011  CHKERR
1012  mField.modify_problem_ref_level_add_bit("BEAM_BENDING_ON_MESH_REF1",bit_level1);
1013  CHKERR
1014  mField.modify_problem_ref_level_add_bit("BEAM_BENDING_ON_MESH_REF2",bit_level2);
1015  *\endcode
1016  * Two Problems exist and solved independently, both are elastic, but solved
1017  using different mesh refinement <br>
1018  */
1019  virtual MoFEMErrorCode
1020  modify_problem_ref_level_add_bit(const std::string &name_problem,
1021  const BitRefLevel &bit) = 0;
1022 
1023  /** \brief set dof mask ref level for problem
1024  * \ingroup mofem_problems
1025  *
1026  */
1027  virtual MoFEMErrorCode
1028  modify_problem_mask_ref_level_add_bit(const std::string &name_problem,
1029  const BitRefLevel &bit) = 0;
1030 
1031  /** \brief set ref level for problem
1032  * \ingroup mofem_problems
1033  *
1034  * \note add_file is a collective, should be executed on all processors.
1035  * Otherwise could lead to deadlock.
1036  *
1037  * if same finite element is solved using different level of refinements,
1038  * than the level of refinement has to be specificied to problem in query
1039  *
1040  * \param name Problem name
1041  * \param BitRefLevel bitLevel
1042  * Example: \code
1043  CHKERR
1044  mField.modify_problem_add_finite_element("BEAM_BENDING_ON_MESH_REF1","ELASTIC");
1045  CHKERR
1046  mField.modify_problem_add_finite_element("BEAM_BENDING_ON_MESH_REF2","ELASTIC");
1047 
1048  CHKERR
1049  mField.modify_problem_ref_level_set_bit("BEAM_BENDING_ON_MESH_REF1",bit_level1);
1050  CHKERR
1051  mField.modify_problem_ref_level_set_bit("BEAM_BENDING_ON_MESH_REF2",bit_level2);
1052  * \endcode
1053  * Two Problems exist and solved independently, both are elastic, but solved
1054  * using different mesh refinement <br>
1055  *
1056  */
1057  virtual MoFEMErrorCode
1058  modify_problem_ref_level_set_bit(const std::string &name_problem,
1059  const BitRefLevel &bit) = 0;
1060 
1061  /** \brief set dof mask ref level for problem
1062  * \ingroup mofem_problems
1063  *
1064  * \note add_file is a collective, should be executed on all processors.
1065  * Otherwise could lead to deadlock.
1066  *
1067  */
1068  virtual MoFEMErrorCode
1069  modify_problem_mask_ref_level_set_bit(const std::string &name_problem,
1070  const BitRefLevel &bit) = 0;
1071 
1072  /** \brief list problems
1073  * \ingroup mofem_problems
1074  */
1075  virtual MoFEMErrorCode list_problem() const = 0;
1076 
1077  /**@}*/
1078 
1079  /** \name Clear dofs and entities */
1080 
1081  /**@{*/
1082 
1083  /** list dofs
1084  * \ingroup mofem_field
1085  */
1086  virtual MoFEMErrorCode
1087  list_dofs_by_field_name(const std::string &name) const = 0;
1088 
1089  /** Clear inactive dofs
1090  * \ingroup mofem_field
1091  */
1092  virtual MoFEMErrorCode clear_inactive_dofs(int verb = DEFAULT_VERBOSITY) = 0;
1093 
1094  /** Clear dofs by bit level
1095  * \ingroup mofem_field
1096  */
1097  virtual MoFEMErrorCode
1099  int verb = DEFAULT_VERBOSITY) = 0;
1100 
1101  /** Clear dofs by ents
1102  * \ingroup mofem_field
1103  */
1104  virtual MoFEMErrorCode clear_dofs_fields(const Range ents,
1105  int verb = DEFAULT_VERBOSITY) = 0;
1106 
1107  /** Clear dofs by field name and ents
1108  * \ingroup mofem_field
1109  */
1110  virtual MoFEMErrorCode clear_dofs_fields(const std::string name,
1111  const Range ents,
1112  int verb = DEFAULT_VERBOSITY) = 0;
1113 
1114  /** Clear entities by field name
1115  * \ingroup mofem_field
1116  */
1117  virtual MoFEMErrorCode clear_ents_fields(const Range ents,
1118  int verb = DEFAULT_VERBOSITY) = 0;
1119 
1120  /** Clear entities by field name
1121  * \ingroup mofem_field
1122  */
1123  virtual MoFEMErrorCode clear_ents_fields(const std::string name,
1124  const Range ents,
1125  int verb = DEFAULT_VERBOSITY) = 0;
1126 
1127  /** Clear ents by bit level
1128  * \ingroup mofem_field
1129  */
1130  virtual MoFEMErrorCode
1132  int verb = DEFAULT_VERBOSITY) = 0;
1133 
1134  /**@}*/
1135 
1136  /** \name Build fields, finite elements and problems */
1137 
1138  /**@{*/
1139 
1140  /**
1141  * \brief Build finite elements
1142  * \ingroup mofem_fe
1143  *
1144  * Build finite element data structures. Have to be run before problem and
1145  * adjacencies are constructed.
1146  *
1147  * @param verb Verbosity level
1148  * @return Error code
1149  */
1150  virtual MoFEMErrorCode
1151  build_finite_elements(int verb = DEFAULT_VERBOSITY) = 0;
1152 
1153  /**
1154  * \brief Build finite elements
1155  * \ingroup mofem_fe
1156  *
1157  * Build finite element data structures. Have to be run before problem and
1158  * adjacencies are constructed.
1159  *
1160  * @param fe_name Name of finite element
1161  * @param ents_ptr Pointer to range of finite elements
1162  * @param verb Verbosity level
1163  * @return Error code
1164  */
1165  virtual MoFEMErrorCode
1166  build_finite_elements(const string fe_name,
1167  const Range *const ents_ptr = nullptr,
1168  int verb = DEFAULT_VERBOSITY) = 0;
1169 
1170  /**@}*/
1171 
1172  /** \name Clear finite elements */
1173 
1174  /**@{*/
1175 
1176  /** clear finite elements
1177  */
1178  virtual MoFEMErrorCode
1180  const BitRefLevel mask,
1181  int verb = DEFAULT_VERBOSITY) = 0;
1182 
1183  /** clear finite elements
1184  */
1185  virtual MoFEMErrorCode
1186  clear_finite_elements(const Range &ents, int verb = DEFAULT_VERBOSITY) = 0;
1187 
1188  /** clear finite elements
1189  */
1190  virtual MoFEMErrorCode
1191  clear_finite_elements(const std::string &fe_name, const Range &ents,
1192  int verb = DEFAULT_VERBOSITY) = 0;
1193 
1194  /**@}*/
1195 
1196  /** \name Build adjacencies */
1197 
1198  /**@{*/
1199 
1200  /** \brief build adjacencies
1201  *
1202  * \param list of entities
1203  *
1204  * This function will get information of adjacent finite elements and fields
1205  * of all entities. If this is not executed, partitioning the problem is not
1206  * possible. Adjacency map is based on degrees of freedom adjacent to
1207  * elements. This linked to geometric element connectivity.
1208  *
1209  * If new degrees of freedom or new finite elements are added to the
1210  * database, adjacency map has to be rebuild.
1211  *
1212  */
1213  virtual MoFEMErrorCode build_adjacencies(const Range &ents,
1214  int verb = DEFAULT_VERBOSITY) = 0;
1215 
1216  /** \brief build adjacencies
1217  *
1218  * \param bit adjacencies for refine level
1219  *
1220  * This function will get information of adjacent finite elements and fields
1221  * of all entities. If this is not executed, partitioning the problem is not
1222  * possible. Adjacency map is based on degrees of freedom adjacent to
1223  * elements. This linked to geometric element connectivity.
1224  *
1225  * If new degrees of freedom or new finite elements are added to the
1226  * database, adjacency map has to be rebuild.
1227  *
1228  */
1230  int verb = DEFAULT_VERBOSITY) = 0;
1231 
1232  /** \brief build adjacencies
1233  *
1234  * \param bit adjacencies for refine level
1235  * \param mask mask for bit level
1236  *
1237  * This function will get information of adjacent finite elements and fields
1238  * of all entities. If this is not executed, partitioning the problem is not
1239  * possible. Adjacency map is based on degrees of freedom adjacent to
1240  * elements. This linked to geometric element connectivity.
1241  *
1242  * If new degrees of freedom or new finite elements are added to the
1243  * database, adjacency map has to be rebuild.
1244  *
1245  */
1247  const BitRefLevel &mask,
1248  int verb = DEFAULT_VERBOSITY) = 0;
1249 
1250  /**@}*/
1251 
1252  /** \name Clear adjacencies */
1253 
1254  /**@{*/
1255 
1256  /** \brief clear adjacency map for finite elements on given bit level
1257  *
1258  * \param bit
1259  * \param mask
1260  */
1261  virtual MoFEMErrorCode
1263  const BitRefLevel mask,
1264  int verb = DEFAULT_VERBOSITY) = 0;
1265 
1266  /** \brief clear adjacency map for entities on given bit level
1267  *
1268  * \param bit
1269  * \param mask
1270  */
1271  virtual MoFEMErrorCode
1273  int verb = DEFAULT_VERBOSITY) = 0;
1274 
1275  /** \brief clear adjacencies for field entities by entities
1276  */
1277  virtual MoFEMErrorCode
1278  clear_adjacencies_entities(const Range ents,
1279  int verb = DEFAULT_VERBOSITY) = 0;
1280 
1281  /** \brief clear adjacencies for field entities by entities and field namd
1282  */
1283  virtual MoFEMErrorCode
1284  clear_adjacencies_entities(const std::string name, const Range ents,
1285  int verb = DEFAULT_VERBOSITY) = 0;
1286 
1287  /**@}*/
1288 
1289  /** \name Problems */
1290 
1291  /**@{*/
1292 
1293  /** \brief clear problem
1294  * \ingroup mofem_problems
1295  */
1296  virtual MoFEMErrorCode clear_problem(const std::string name,
1297  int verb = DEFAULT_VERBOSITY) = 0;
1298 
1299  /** \brief clear problems
1300  * \ingroup mofem_problems
1301  */
1302  virtual MoFEMErrorCode clear_problems(int verb = DEFAULT_VERBOSITY) = 0;
1303 
1304  /**
1305  * \brief add finite elements to the meshset
1306  * \ingroup mofem_problems
1307  *
1308  * \param name is problem name
1309  * \param fe_name
1310  * \param meshset
1311  */
1312  virtual MoFEMErrorCode
1313  get_problem_finite_elements_entities(const std::string name,
1314  const std::string &fe_name,
1315  const EntityHandle meshset) = 0;
1316 
1317  /**@}*/
1318 
1319  /** \name Making loops on elements and entities */
1320 
1321  /**@{*/
1322 
1323  /** \brief Set data for BasicMethod
1324  *
1325  * This function set data about problem, adjacencies and other multi-indices
1326  * in database. This function can be used a special case when user need to
1327  * do some pre- and post-processing before matrix or vector is initiated, or
1328  * to assemble matrix for group of FEMethods. Is used by classes
1329  * SnesCtx and TsCtx. Look for more details there.
1330  *
1331  * FIXME: Here we need example
1332  *
1333  * \param pointer to problem data structure
1334  * \param method user method derived from BasicMethod
1335  *
1336  **/
1337  virtual MoFEMErrorCode
1338  problem_basic_method_preProcess(const Problem *problem_ptr,
1339  BasicMethod &method,
1340  int verb = DEFAULT_VERBOSITY) = 0;
1341 
1342  /** \brief Set data for BasicMethod
1343  *
1344  * This function set data about problem, adjacencies and other multi-indices
1345  * in database. This function can be used a special case when user need to
1346  * do some pre- and post-processing before matrix or vector is initiated, or
1347  * to assemble matrix for group of FEMethods. Is used by classes
1348  * SnesCtx and TsCtx. Look for more details there.
1349  *
1350  * FIXME: Here we need example
1351  *
1352  * \param problem_name name of the problem
1353  * \param method user method derived from BasicMethod
1354  *
1355  **/
1356  virtual MoFEMErrorCode
1357  problem_basic_method_preProcess(const std::string &problem_name,
1358  BasicMethod &method,
1359  int verb = DEFAULT_VERBOSITY) = 0;
1360 
1361  /** \brief Set data for BasicMethod
1362  * \ingroup mofem_loops
1363  *
1364  * This function set data about problem, adjacencies and other multi-indices
1365  * in database. This function can be used a special case when user need to
1366  * do some pre- and post-processing before matrix or vector is initiated, or
1367  * to assemble matrix for group of FEMethods. Is used by classes
1368  * SnesCtx and TsCtx. Look for more details there.
1369  *
1370  * FIXME: Here we need example
1371  *
1372  * \param pointer to problem data structure
1373  * \param method user method derived from BasicMethod
1374  *
1375  **/
1376  virtual MoFEMErrorCode
1377  problem_basic_method_postProcess(const Problem *problem_ptr,
1378  BasicMethod &method,
1379  int verb = DEFAULT_VERBOSITY) = 0;
1380 
1381  /** \brief Set data for BasicMethod
1382  * \ingroup mofem_loops
1383  *
1384  * This function set data about problem, adjacencies and other multi-indices
1385  * in database. This function can be used a special case when user need to
1386  * do some pre- and post-processing before matrix or vector is initiated, or
1387  * to assemble matrix for group of FEMethods. Is used by classes
1388  * SnesCtx and TsCtx. Look for more details there.
1389  *
1390  * FIXME: Here we need example
1391  *
1392  * \param problem_name name of the problem
1393  * \param method user method derived from BasicMethod
1394  *
1395  **/
1396  virtual MoFEMErrorCode
1397  problem_basic_method_postProcess(const std::string &problem_name,
1398  BasicMethod &method,
1399  int verb = DEFAULT_VERBOSITY) = 0;
1400 
1401  /**
1402  * @brief Cache variables
1403  *
1404  * @param prb_name
1405  * @param cache_ptr
1406  * @return MoFEMErrorCode
1407  */
1408  virtual MoFEMErrorCode
1409  cache_problem_entities(const std::string prb_name,
1410  CacheTupleWeakPtr cache_ptr) = 0;
1411 
1412  /** \brief Make a loop over finite elements.
1413  *
1414  * This function is like swiss knife, is can be used to post-processing or
1415  * matrix and vectors assembly. It makes loop over given finite element for
1416  * given
1417  * problem. The particular methods executed on each element are given by
1418  * class derived form Interface::FEMethod. At beginning of each loop user
1419  * defined function (method) preProcess() is called, for each element
1420  * operator() is
1421  * executed, at the end loop finalizes with user defined function (method)
1422  * postProcess().
1423  *
1424  * Methods are executed only for local elements at given processor.
1425  *
1426  * For more details pleas look to examples.
1427  *
1428  * \note If fe_ptr is given it is expected that multi-index is supbes of
1429  * problem multi-index. If this is not the case behavior of the code is
1430  * undetermined.
1431  *
1432  * @param problem_name problem consisting set of elements
1433  * @param fe_name name of element in problem
1434  * @param method class derived form Interface::FEMethod
1435  * @param fe_ptr pointer to finite elements multi-index
1436  * @param bh if bH = MF_EXIST, throws error if fe_name does not
1437  exist
1438  * @param cache_tuple_ptr cache
1439  * @param verb verbosity level
1440  * @return error code
1441 
1442  * \ingroup mofem_loops
1443  **/
1445  const std::string problem_name, const std::string &fe_name,
1446  FEMethod &method,
1447  boost::shared_ptr<NumeredEntFiniteElement_multiIndex> fe_ptr = nullptr,
1448  MoFEMTypes bh = MF_EXIST,
1449  CacheTupleWeakPtr cache_ptr = CacheTupleSharedPtr(),
1450  int verb = DEFAULT_VERBOSITY) = 0;
1451 
1452  /** \brief Make a loop over finite elements on partitions from upper to
1453  lower rank.
1454  *
1455  * This function is like swiss knife, is can be used to post-processing or
1456  matrix
1457  * and vectors assembly. It makes loop over given finite element for given
1458  * problem. The particular methods executed on each element are given by
1459  * class derived form Interface::FEMethod. At beginning of each loop user
1460  defined
1461  * function (method) preProcess() is called, for each element operator() is
1462  * executed, at the end loop finalizes with user defined function (method)
1463  * postProcess().
1464  *
1465  * \note If fe_ptr is given it is expected that multi-index is supbes of
1466  * problem multi-index. If this is not the case behavior of the code is
1467  * undetermined.
1468  *
1469  * For more details please look to examples.
1470  *
1471  * Interface::FEMethod
1472 
1473  * @param problem_ptr pointer to problem consisting set of elements
1474  * @param fe_name name of element in problem
1475  * @param method class derived form Interface::FEMethod
1476  * @param lower_rank lower rank of process owned by finite element
1477  * @param upper_rank lower rank of process owned by finite element
1478  * @param fe_ptr pointer to finite elements multi-index
1479  * @param bh if bH = MF_EXIST, throws error if fe_name does not
1480  exist
1481  * @param cache_data cache data vector
1482  * @param cache_row cache row vector
1483  * @param cache_col cache row vector
1484  * @param verb verbosity level
1485  * @return error code
1486 
1487  * \ingroup mofem_loops
1488  **/
1490  const Problem *problem_ptr, const std::string &fe_name, FEMethod &method,
1491  int lower_rank, int upper_rank,
1492  boost::shared_ptr<NumeredEntFiniteElement_multiIndex> fe_ptr = nullptr,
1493  MoFEMTypes bh = MF_EXIST,
1494  CacheTupleWeakPtr cache_ptr = CacheTupleSharedPtr(),
1495  int verb = DEFAULT_VERBOSITY) = 0;
1496 
1497  /** \brief Make a loop over finite elements on partitions from upper to
1498  lower rank.
1499  *
1500  * This function is like swiss knife, is can be used to post-processing or
1501  matrix
1502  * and vectors assembly. It makes loop over given finite element for given
1503  * problem. The particular methods executed on each element are given by
1504  * class derived form Interface::FEMethod. At beginning of each loop user
1505  defined
1506  * function (method) preProcess() is called, for each element operator() is
1507  * executed, at the end loop finalizes with user defined function (method)
1508  * postProcess().
1509  *
1510  * \note If fe_ptr is given it is expected that multi-index is supbes of
1511  * problem multi-index. If this is not the case behavior of the code is
1512  * undetermined.
1513  *
1514  * For more details please look to examples.
1515  *
1516  * @param problem_name pointer to problem consisting set of elements
1517  * @param fe_name name of element in problem
1518  * @param method class derived form Interface::FEMethod
1519  * @param lower_rank lower rank of process owned by finite element
1520  * @param upper_rank lower rank of process owned by finite element
1521  * @param fe_ptr pointer to finite elements multi-index
1522  * @param bh if bH = MF_EXIST, throws error if fe_name does not
1523  exist
1524  * @param cache_data cache data vector
1525  * @param cache_row cache row vector
1526  * @param cache_col cache row vector
1527  * @param verb verbosity level
1528  * @return error code
1529 
1530  * \ingroup mofem_loops
1531  **/
1533  const std::string problem_name, const std::string &fe_name,
1534  FEMethod &method, int lower_rank, int upper_rank,
1535  boost::shared_ptr<NumeredEntFiniteElement_multiIndex> fe_ptr = nullptr,
1536  MoFEMTypes bh = MF_EXIST,
1537  CacheTupleWeakPtr cache_ptr = CacheTupleSharedPtr(),
1538  int verb = DEFAULT_VERBOSITY) = 0;
1539 
1540  /** \brief Make a loop over dofs
1541 
1542  * \ingroup mofem_loops
1543  */
1544  virtual MoFEMErrorCode loop_dofs(const Problem *problem_ptr,
1545  const std::string &field_name, RowColData rc,
1546  DofMethod &method, int lower_rank,
1547  int upper_rank,
1548  int verb = DEFAULT_VERBOSITY) = 0;
1549 
1550  /** \brief Make a loop over dofs
1551 
1552  * \ingroup mofem_loops
1553  */
1554  virtual MoFEMErrorCode loop_dofs(const std::string &problem_name,
1555  const std::string &field_name, RowColData rc,
1556  DofMethod &method, int lower_rank,
1557  int upper_rank,
1558  int verb = DEFAULT_VERBOSITY) = 0;
1559 
1560  /** \brief Make a loop over dofs
1561 
1562  * \ingroup mofem_loops
1563  */
1564  virtual MoFEMErrorCode loop_dofs(const std::string &problem_name,
1565  const std::string &field_name, RowColData rc,
1566  DofMethod &method,
1567  int verb = DEFAULT_VERBOSITY) = 0;
1568 
1569  /** \brief Make a loop over dofs
1570 
1571  * \ingroup mofem_field
1572  */
1573  virtual MoFEMErrorCode loop_dofs(const std::string &field_name,
1574  DofMethod &method,
1575  int verb = DEFAULT_VERBOSITY) = 0;
1576 
1577  /**
1578  * @brief Loop over field entities
1579  * @ingroup mofem_field
1580  *
1581  * @param field_name field entities
1582  * @param method user method
1583  * @param ents if given loop only on subset of entities in the field
1584  * @param verb
1585  * @return MoFEMErrorCode
1586  */
1587  virtual MoFEMErrorCode loop_entities(const std::string field_name,
1588  EntityMethod &method,
1589  Range const *const ents = nullptr,
1590  int verb = DEFAULT_VERBOSITY) = 0;
1591 
1592  /**
1593  * @brief Loop over field entities in the problem
1594  * @ingroup mofem_field
1595  *
1596  * @param problem_ptr
1597  * @param field_name
1598  * @param rc
1599  * @param method
1600  * @param lower_rank
1601  * @param upper_rank
1602  * @param verb
1603  * @return MoFEMErrorCode
1604  */
1605  virtual MoFEMErrorCode loop_entities(const Problem *problem_ptr,
1606  const std::string field_name,
1607  RowColData rc, EntityMethod &method,
1608  int lower_rank, int upper_rank,
1609  int verb = DEFAULT_VERBOSITY) = 0;
1610 
1611  /**
1612  * @brief Loop over field entities in the problem
1613  * @ingroup mofem_field
1614  *
1615  * @param problem_name
1616  * @param field_name
1617  * @param rc
1618  * @param method
1619  * @param lower_rank
1620  * @param upper_rank
1621  * @param verb
1622  * @return MoFEMErrorCode
1623  */
1624  virtual MoFEMErrorCode loop_entities(const std::string problem_name,
1625  const std::string field_name,
1626  RowColData rc, EntityMethod &method,
1627  int lower_rank, int upper_rank,
1628  int verb = DEFAULT_VERBOSITY) = 0;
1629  /**
1630  * @brief Loop over field entities in the problem
1631  * @ingroup mofem_field
1632  *
1633  * @param problem_name
1634  * @param field_name
1635  * @param rc
1636  * @param method
1637  * @param verb
1638  * @return MoFEMErrorCode
1639  */
1640  virtual MoFEMErrorCode loop_entities(const std::string problem_name,
1641  const std::string field_name,
1642  RowColData rc, EntityMethod &method,
1643  int verb = DEFAULT_VERBOSITY) = 0;
1644 
1645  /**@}*/
1646 
1647  /** \name Get pointers to multi-index database */
1648 
1649  /**@{*/
1650 
1651  /**
1652  * @brief Get the fields object
1653  * @ingroup mofem_access
1654  *
1655  * @return const Field_multiIndex*
1656  */
1657  virtual const Field_multiIndex *get_fields() const = 0;
1658 
1659  /**
1660  * @brief Get the ref ents object
1661  * @ingroup mofem_access
1662  *
1663  * @return const RefEntity_multiIndex*
1664  */
1665  virtual const RefEntity_multiIndex *get_ref_ents() const = 0;
1666 
1667  /**
1668  * @brief Get the ref finite elements object
1669  * @ingroup mofem_access
1670  *
1671  * @return const RefElement_multiIndex*
1672  */
1673  virtual const RefElement_multiIndex *get_ref_finite_elements() const = 0;
1674 
1675  /**
1676  * @brief Get the finite elements object
1677  * @ingroup mofem_access
1678  *
1679  * @return const FiniteElement_multiIndex*
1680  */
1681  virtual const FiniteElement_multiIndex *get_finite_elements() const = 0;
1682 
1683  /**
1684  * @brief Get the ents finite elements object
1685  * @ingroup mofem_access
1686  *
1687  * @return const EntFiniteElement_multiIndex*
1688  */
1689  virtual const EntFiniteElement_multiIndex *
1690  get_ents_finite_elements() const = 0;
1691 
1692  /**
1693  * @brief Get the field ents object
1694  * @ingroup mofem_access
1695  *
1696  * @return const FieldEntity_multiIndex*
1697  */
1698  virtual const FieldEntity_multiIndex *get_field_ents() const = 0;
1699 
1700  /**
1701  * @brief Get the dofs object
1702  * @ingroup mofem_access
1703  *
1704  * @return const DofEntity_multiIndex*
1705  */
1706  virtual const DofEntity_multiIndex *get_dofs() const = 0;
1707 
1708  /**
1709  * @brief Get the problem object
1710  * @ingroup mofem_access
1711  *
1712  * @param problem_name
1713  * @return const Problem*
1714  */
1715  virtual const Problem *get_problem(const std::string problem_name) const = 0;
1716 
1717  /**
1718  * @brief Get the problems object
1719  * @ingroup mofem_access
1720  *
1721  * @return const Problem_multiIndex*
1722  */
1723  virtual const Problem_multiIndex *get_problems() const = 0;
1724 
1725  /**
1726  * @brief Get the dofs elements adjacency object
1727  *
1728  * @param dofs_elements_adjacency
1729  * @return MoFEMErrorCode
1730  */
1733  *dofs_elements_adjacency) const = 0;
1734 
1735  /**
1736  * @brief Get the dofs elements adjacency object
1737  *
1738  * @return const FieldEntityEntFiniteElementAdjacencyMap_multiIndex*
1739  */
1741  get_ents_elements_adjacency() const = 0;
1742 
1743  /** \brief Get fields multi-index from database
1744  * \ingroup mofem_access
1745  */
1746  virtual MoFEMErrorCode
1747  get_fields(const Field_multiIndex **fields_ptr) const = 0;
1748 
1749  /** \brief Get ref entities multi-index from database
1750  * \ingroup mofem_access
1751  */
1752  virtual MoFEMErrorCode
1753  get_ref_ents(const RefEntity_multiIndex **refined_ents_ptr) const = 0;
1754 
1755  /** \brief Get ref finite elements multi-index form database
1756  * \ingroup mofem_access
1757  */
1759  const RefElement_multiIndex **refined_finite_elements_ptr) const = 0;
1760 
1761  /** \brief Get finite elements multi-index
1762  * \ingroup mofem_access
1763  */
1764  virtual MoFEMErrorCode
1765  get_finite_elements(const FiniteElement_multiIndex **fe_ptr) const = 0;
1766 
1767  /** \brief Get entities finite elements multi-index
1768  * \ingroup mofem_access
1769  */
1771  const EntFiniteElement_multiIndex **fe_ent_ptr) const = 0;
1772 
1773  /** \brief Get problem database (data structure)
1774  * \ingroup mofem_access
1775  */
1776  virtual MoFEMErrorCode get_problem(const std::string &problem_name,
1777  const Problem **problem_ptr) const = 0;
1778 
1779  /**
1780  * \brief Get pointer to problems multi-index
1781  * \ingroup mofem_access
1782  */
1783  virtual MoFEMErrorCode
1784  get_problems(const Problem_multiIndex **problems_ptr) const = 0;
1785 
1786  /** \brief Get field multi index
1787  *
1788  * \ingroup mofem_access
1789  *
1790  */
1791  virtual MoFEMErrorCode
1792  get_field_ents(const FieldEntity_multiIndex **field_ents) const = 0;
1793 
1794  /** \brief Get dofs multi index
1795  *
1796  * \ingroup mofem_access
1797  *
1798  */
1799  virtual MoFEMErrorCode
1800  get_dofs(const DofEntity_multiIndex **dofs_ptr) const = 0;
1801 
1802  /**
1803  * \brief get begin iterator of filed ents of given name (instead you can
1804  * use _IT_GET_ENT_FIELD_BY_NAME_FOR_LOOP_(MFIELD,NAME,IT)
1805  *
1806  * \ingroup mofem_field
1807  *
1808  * for(_IT_GET_ENT_FIELD_BY_NAME_FOR_LOOP_(MFIELD,NAME,IT)) {
1809  * ...
1810  * }
1811  *
1812  * \param field_name
1813  */
1814  virtual FieldEntityByUId::iterator
1815  get_ent_field_by_name_begin(const std::string &field_name) const = 0;
1816 
1817  /**
1818  * \brief get begin iterator of filed dofs of given name (instead you can
1819  * use _IT_GET_ENT_FIELD_BY_NAME_FOR_LOOP_(MFIELD,NAME,IT)
1820  * \ingroup mofem_field
1821  *
1822  * for(_IT_GET_ENT_FIELD_BY_NAME_FOR_LOOP_(MFIELD,NAME,IT)) {
1823  * ...
1824  * }
1825  *
1826  * \param field_name
1827  */
1828  virtual FieldEntityByUId::iterator
1829  get_ent_field_by_name_end(const std::string &field_name) const = 0;
1830 
1831  /** \brief loop over all dofs from a moFEM field and particular field
1832  * \ingroup mofem_field
1833  */
1834 #define _IT_GET_ENT_FIELD_BY_NAME_FOR_LOOP_(MFIELD, NAME, IT) \
1835  auto IT = (MFIELD).get_ent_field_by_name_begin(NAME); \
1836  IT != (MFIELD).get_ent_field_by_name_end(NAME); \
1837  IT++
1838 
1839  /**
1840  * \brief get begin iterator of filed dofs of given name (instead you can
1841  * use _IT_GET_DOFS_FIELD_BY_NAME_FOR_LOOP_(MFIELD,NAME,IT)
1842  * \ingroup mofem_field
1843  *
1844  * for(_IT_GET_DOFS_FIELD_BY_NAME_FOR_LOOP_(MFIELD,NAME,IT)) {
1845  * ...
1846  * }
1847  *
1848  * \param field_name
1849  */
1850  virtual DofEntityByUId::iterator
1851  get_dofs_by_name_begin(const std::string &field_name) const = 0;
1852 
1853  /**
1854  * \brief get begin iterator of filed dofs of given name (instead you can
1855  * use _IT_GET_DOFS_FIELD_BY_NAME_FOR_LOOP_(MFIELD,NAME,IT)
1856  * \ingroup mofem_field
1857  *
1858  * for(_IT_GET_DOFS_FIELD_BY_NAME_FOR_LOOP_(MFIELD,NAME,IT)) {
1859  * ...
1860  * }
1861  *
1862  * \param field_name
1863  */
1864  virtual DofEntityByUId::iterator
1865  get_dofs_by_name_end(const std::string &field_name) const = 0;
1866 
1867  /** loop over all dofs from a moFEM field and particular field
1868  * \ingroup mofem_field
1869  */
1870 #define _IT_GET_DOFS_FIELD_BY_NAME_FOR_LOOP_(MFIELD, NAME, IT) \
1871  DofEntityByUId::iterator IT = (MFIELD).get_dofs_by_name_begin(NAME); \
1872  IT != (MFIELD).get_dofs_by_name_end(NAME); \
1873  IT++
1874 
1875  /**
1876  * \brief get begin iterator of filed dofs of given name and ent(instead you
1877  * can use _IT_GET_DOFS_FIELD_BY_NAME_FOR_LOOP_(MFIELD,NAME,ENT,IT)
1878  *
1879  * \ingroup mofem_field
1880  *
1881  * for(_IT_GET_DOFS_FIELD_BY_NAME_AND_ENT_FOR_LOOP_(MFIELD,NAME,ENT,IT)) {
1882  * ...
1883  * }
1884  *
1885  * \param field_name
1886  */
1887  virtual DofEntityByUId::iterator
1888  get_dofs_by_name_and_ent_begin(const std::string &field_name,
1889  const EntityHandle ent) const = 0;
1890 
1891  /**
1892  * \brief get begin iterator of filed dofs of given name and ent (instead
1893  * you can use _IT_GET_DOFS_FIELD_BY_NAME_FOR_LOOP_(MFIELD,NAME,ENT,IT)
1894  * \ingroup mofem_field
1895  *
1896  * for(_IT_GET_DOFS_FIELD_BY_NAME_AND_ENT_FOR_LOOP_(MFIELD,NAME,ENT,IT)) {
1897  * ...
1898  * }
1899  *
1900  * \param field_name
1901  */
1902  virtual DofEntityByUId::iterator
1903  get_dofs_by_name_and_ent_end(const std::string &field_name,
1904  const EntityHandle ent) const = 0;
1905 
1906  /** \brief loop over all dofs from a moFEM field and particular field
1907  * \ingroup mofem_access
1908  */
1909 #define _IT_GET_DOFS_FIELD_BY_NAME_AND_ENT_FOR_LOOP_(MFIELD, NAME, ENT, IT) \
1910  DofEntityByUId::iterator IT = \
1911  (MFIELD).get_dofs_by_name_and_ent_begin(NAME, ENT); \
1912  IT != (MFIELD).get_dofs_by_name_and_ent_end(NAME, ENT); \
1913  IT++
1914 
1915  /**
1916  * \brief get begin iterator of filed dofs of given name and ent type
1917  * (instead you can use
1918  * _IT_GET_DOFS_FIELD_BY_NAME_FOR_LOOP_(MFIELD,NAME,TYPE,IT)
1919  *
1920  * \ingroup mofem_field
1921  *
1922  * for(_IT_GET_DOFS_FIELD_BY_NAME_AND_TYPE_FOR_LOOP_(MFIELD,NAME,TYPE,IT)) {
1923  * ...
1924  * }
1925  *
1926  * \param field_name
1927  */
1928  virtual DofEntityByUId::iterator
1929  get_dofs_by_name_and_type_begin(const std::string &field_name,
1930  const EntityType type) const = 0;
1931 
1932  /**
1933  * \brief get begin iterator of filed dofs of given name end ent
1934  * type(instead you can use
1935  * _IT_GET_DOFS_FIELD_BY_NAME_FOR_LOOP_(MFIELD,NAME,TYPE,IT)
1936  *
1937  * \ingroup mofem_field
1938  *
1939  * for(_IT_GET_DOFS_FIELD_BY_NAME_AND_TYPE_FOR_LOOP_(MFIELD,NAME,TYPE,IT)) {
1940  * ...
1941  * }
1942  *
1943  * \param field_name
1944  */
1945  virtual DofEntityByUId::iterator
1946  get_dofs_by_name_and_type_end(const std::string &field_name,
1947  const EntityType type) const = 0;
1948 
1949  /** \brief loop over all dofs from a moFEM field and particular field
1950  * \ingroup mofem_field
1951  */
1952 #define _IT_GET_DOFS_FIELD_BY_NAME_AND_TYPE_FOR_LOOP_(MFIELD, NAME, TYPE, IT) \
1953  DofEntityByUId::iterator IT = \
1954  (MFIELD).get_dofs_by_name_and_type_begin(NAME, TYPE); \
1955  IT != (MFIELD).get_dofs_by_name_and_type_end(NAME, TYPE); \
1956  IT++
1957 
1958  /**
1959  * \brief get begin iterator of finite elements of given name (instead you
1960  * can use _IT_GET_FES_BY_NAME_FOR_LOOP_(MFIELD,NAME,IT)
1961  *
1962  * \ingroup mofem_access
1963  *
1964  * for(_IT_GET_FES_BY_NAME_FOR_LOOP_(MFIELD,NAME,IT)) {
1965  * ...
1966  * }
1967  *
1968  * \param fe_name
1969  */
1970  virtual EntFiniteElement_multiIndex::index<Unique_mi_tag>::type::iterator
1971  get_fe_by_name_begin(const std::string &fe_name) const = 0;
1972 
1973  /**
1974  * \brief get end iterator of finite elements of given name (instead you can
1975  * use _IT_GET_FES_BY_NAME_FOR_LOOP_(MFIELD,NAME,IT)
1976  *
1977  * \ingroup mofem_access
1978  *
1979  * for(_IT_GET_FES_BY_NAME_FOR_LOOP_(MFIELD,NAME,IT)) {
1980  * ...
1981  * }
1982  *
1983  * \param fe_name
1984  */
1985  virtual EntFiniteElement_multiIndex::index<Unique_mi_tag>::type::iterator
1986  get_fe_by_name_end(const std::string &fe_name) const = 0;
1987 
1988  /** \brief loop over all finite elements from a moFEM field and FE
1989  * \ingroup mofem_access
1990  */
1991 #define _IT_GET_FES_BY_NAME_FOR_LOOP_(MFIELD, NAME, IT) \
1992  auto IT = (MFIELD).get_fe_by_name_begin(NAME); \
1993  IT != (MFIELD).get_fe_by_name_end(NAME); \
1994  IT++
1995 };
1996 } // namespace MoFEM
1997 
1998 #include <DeprecatedCoreInterface.hpp>
1999 
2000 namespace MoFEM {
2001 
2003 
2004 } // namespace MoFEM
2005 
2006 #endif // __INTERFACE_HPP__
2007 
2008 /**
2009  * \defgroup mofem_field Fields
2010  * \brief Data structure for adding and managing fields
2011  *
2012  * \ingroup mofem
2013  ******************************************************************************/
2014 
2015 /**
2016  * \defgroup mofem_ref_ents Get entities and adjacencies
2017  * \brief Get adjacencies/entities for given BitRefLevel (mesh refinement)
2018  *
2019  * \ingroup mofem
2020  ******************************************************************************/
2021 
2022 /**
2023  * \defgroup mofem_fe Finite elements
2024  * \brief Adding and managing finite elements
2025  *
2026  * \ingroup mofem
2027  ******************************************************************************/
2028 
2029 /**
2030  * \defgroup mofem_problems Problems
2031  * \brief Adding and managing problems
2032  *
2033  * \ingroup mofem
2034  ******************************************************************************/
2035 
2036 /**
2037  * \defgroup mofem_loops Loops
2038  * \brief Manages complexities for integrating over finite elements and dofs.
2039  *
2040  * \ingroup mofem
2041  ******************************************************************************/
2042 
2043 /**
2044  * \defgroup mofem_access Pointers to multi-indices
2045  * \brief Get direct access to multi-indices in database
2046  *
2047  * \ingroup mofem
2048  ******************************************************************************/
MoFEM::CoreInterface::modify_finite_element_adjacency_table
virtual MoFEMErrorCode modify_finite_element_adjacency_table(const std::string &fe_name, const EntityType type, ElementAdjacencyFunct function)=0
modify finite element table, only for advanced user
FieldEntityEntFiniteElementAdjacencyMap_multiIndex
multi_index_container< FieldEntityEntFiniteElementAdjacencyMap, indexed_by< ordered_unique< tag< Composite_Unique_mi_tag >, composite_key< FieldEntityEntFiniteElementAdjacencyMap, const_mem_fun< FieldEntityEntFiniteElementAdjacencyMap, UId, &FieldEntityEntFiniteElementAdjacencyMap::getEntUniqueId >, const_mem_fun< FieldEntityEntFiniteElementAdjacencyMap, UId, &FieldEntityEntFiniteElementAdjacencyMap::getFeUniqueId > > >, ordered_non_unique< tag< Unique_mi_tag >, const_mem_fun< FieldEntityEntFiniteElementAdjacencyMap, UId, &FieldEntityEntFiniteElementAdjacencyMap::getEntUniqueId > >, ordered_non_unique< tag< FE_Unique_mi_tag >, const_mem_fun< FieldEntityEntFiniteElementAdjacencyMap, UId, &FieldEntityEntFiniteElementAdjacencyMap::getFeUniqueId > >, ordered_non_unique< tag< FEEnt_mi_tag >, const_mem_fun< FieldEntityEntFiniteElementAdjacencyMap, EntityHandle, &FieldEntityEntFiniteElementAdjacencyMap::getFeHandle > >, ordered_non_unique< tag< Ent_mi_tag >, const_mem_fun< FieldEntityEntFiniteElementAdjacencyMap, EntityHandle, &FieldEntityEntFiniteElementAdjacencyMap::getEntHandle > > > > FieldEntityEntFiniteElementAdjacencyMap_multiIndex
MultiIndex container keeps Adjacencies Element and dof entities adjacencies and vice versa.
Definition: AdjacencyMultiIndices.hpp:114
DEFAULT_VERBOSITY
@ DEFAULT_VERBOSITY
Definition: definitions.h:220
MoFEM::CoreInterface::get_meshsets_manager_ptr
virtual MeshsetsManager * get_meshsets_manager_ptr()=0
get MeshsetsManager pointer
MoFEM::CoreInterface::get_field_name
virtual std::string get_field_name(const BitFieldId id) const =0
get field name from id
MoFEM::CoreInterface::get_ents_finite_elements
virtual const EntFiniteElement_multiIndex * get_ents_finite_elements() const =0
Get the ents finite elements object.
MoFEM::CoreInterface::problem_basic_method_postProcess
virtual MoFEMErrorCode problem_basic_method_postProcess(const Problem *problem_ptr, BasicMethod &method, int verb=DEFAULT_VERBOSITY)=0
Set data for BasicMethod.
MoFEM::CoreInterface::loop_finite_elements
virtual MoFEMErrorCode loop_finite_elements(const std::string problem_name, const std::string &fe_name, FEMethod &method, boost::shared_ptr< NumeredEntFiniteElement_multiIndex > fe_ptr=nullptr, MoFEMTypes bh=MF_EXIST, CacheTupleWeakPtr cache_ptr=CacheTupleSharedPtr(), int verb=DEFAULT_VERBOSITY)=0
Make a loop over finite elements.
MoFEM::CoreInterface::add_ents_to_finite_element_by_MESHSET
virtual MoFEMErrorCode add_ents_to_finite_element_by_MESHSET(const EntityHandle meshset, const std::string &name, const bool recursive=false)=0
add MESHSET element to finite element database given by name
MoFEM::CoreInterface::loop_dofs
virtual MoFEMErrorCode loop_dofs(const Problem *problem_ptr, const std::string &field_name, RowColData rc, DofMethod &method, int lower_rank, int upper_rank, int verb=DEFAULT_VERBOSITY)=0
Make a loop over dofs.
MoFEM::CoreInterface::clear_adjacencies_entities
virtual MoFEMErrorCode clear_adjacencies_entities(const BitRefLevel bit, const BitRefLevel mask, int verb=DEFAULT_VERBOSITY)=0
clear adjacency map for entities on given bit level
MoFEM::CoreInterface::get_finite_element_meshset
virtual EntityHandle get_finite_element_meshset(const std::string name) const =0
MoFEM::CoreInterface::list_finite_elements
virtual MoFEMErrorCode list_finite_elements() const =0
list finite elements in database
MoFEM::CoreInterface::modify_problem_ref_level_set_bit
virtual MoFEMErrorCode modify_problem_ref_level_set_bit(const std::string &name_problem, const BitRefLevel &bit)=0
set ref level for problem
EntityHandle
MoFEM::CoreInterface::check_number_of_ents_in_ents_finite_element
virtual MoFEMErrorCode check_number_of_ents_in_ents_finite_element() const =0
check data consistency in entsFiniteElements
MoFEM::EntityMethod
Data structure to exchange data between mofem and User Loop Methods on entities.
Definition: LoopMethods.hpp:471
MoFEM::FEMethod
structure for User Loop Methods on finite elements
Definition: LoopMethods.hpp:369
MoFEM::CoreInterface::get_ents_elements_adjacency
virtual const FieldEntityEntFiniteElementAdjacencyMap_multiIndex * get_ents_elements_adjacency() const =0
Get the dofs elements adjacency object.
MoFEM::CoreInterface::set_moab_interface
virtual MoFEMErrorCode set_moab_interface(moab::Interface &new_moab, int verb=VERBOSE)=0
Set the moab interface object.
MoFEM::CoreInterface::get_comm
virtual MPI_Comm & get_comm() const =0
MoFEM::CoreInterface::modify_finite_element_add_field_row
virtual MoFEMErrorCode modify_finite_element_add_field_row(const std::string &fe_name, const std::string name_row)=0
set field row which finite element use
MoFEM::CoreInterface::get_ent_field_by_name_end
virtual FieldEntityByUId::iterator get_ent_field_by_name_end(const std::string &field_name) const =0
get begin iterator of filed dofs of given name (instead you can use IT_GET_ENT_FIELD_BY_NAME_FOR_LOOP...
MoFEM::CoreInterface::make_shared_ref_entity
virtual boost::shared_ptr< RefEntityTmp< 0 > > make_shared_ref_entity(const EntityHandle ent)=0
Get RefEntity.
MoFEM::RefElement_multiIndex
multi_index_container< boost::shared_ptr< RefElement >, indexed_by< ordered_unique< tag< Ent_mi_tag >, const_mem_fun< RefElement::interface_type_RefEntity, EntityHandle, &RefElement::getEnt > > > > RefElement_multiIndex
Definition: RefElementMultiIndices.hpp:180
MoFEM::CoreInterface::get_field_structure
virtual const Field * get_field_structure(const std::string &name, enum MoFEMTypes bh=MF_EXIST) const =0
get field structure
MoFEM::Exceptions::MoFEMErrorCode
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
Definition: Exceptions.hpp:56
MoFEM::CoreInterface::create_vertices_and_add_to_field
virtual MoFEMErrorCode create_vertices_and_add_to_field(const std::string name, const double coords[], int size, int verb=DEFAULT_VERBOSITY)=0
Create a vertices and add to field object.
MoFEM::CoreInterface::clear_ents_fields_by_bit_ref
virtual MoFEMErrorCode clear_ents_fields_by_bit_ref(const BitRefLevel bit, const BitRefLevel mask, int verb=DEFAULT_VERBOSITY)=0
MoFEM::CoreInterface::clear_finite_elements_by_bit_ref
virtual MoFEMErrorCode clear_finite_elements_by_bit_ref(const BitRefLevel bit, const BitRefLevel mask, int verb=DEFAULT_VERBOSITY)=0
MoFEM::CoreInterface::list_dofs_by_field_name
virtual MoFEMErrorCode list_dofs_by_field_name(const std::string &name) const =0
MoFEM::CoreInterface::remove_ents_from_field
virtual MoFEMErrorCode remove_ents_from_field(const std::string name, const EntityHandle meshset, const EntityType type, int verb=DEFAULT_VERBOSITY)=0
remove entities from field
MoFEM::CoreInterface::get_field_bit_number
virtual FieldBitNumber get_field_bit_number(const std::string name) const =0
get field bit number
MoFEM::CoreInterface::get_comm_rank
virtual int get_comm_rank() const =0
MoFEM::CoreInterface::get_dofs_by_name_end
virtual DofEntityByUId::iterator get_dofs_by_name_end(const std::string &field_name) const =0
get begin iterator of filed dofs of given name (instead you can use IT_GET_DOFS_FIELD_BY_NAME_FOR_LOO...
MoFEM::CoreInterface::get_problem_finite_elements_entities
virtual MoFEMErrorCode get_problem_finite_elements_entities(const std::string name, const std::string &fe_name, const EntityHandle meshset)=0
add finite elements to the meshset
MoFEM::Types::BitFieldId
std::bitset< BITFIELDID_SIZE > BitFieldId
Field Id.
Definition: Types.hpp:42
MoFEM::CoreInterface::remove_ents
virtual MoFEMErrorCode remove_ents(const Range ents, int verb=DEFAULT_VERBOSITY)=0
remove entities form mofem database
MoFEM::CoreInterface::get_problem
virtual const Problem * get_problem(const std::string problem_name) const =0
Get the problem object.
MoFEM::CoreInterface::remove_ents_from_field_by_bit_ref
virtual MoFEMErrorCode remove_ents_from_field_by_bit_ref(const BitRefLevel bit, const BitRefLevel mask, int verb=DEFAULT_VERBOSITY)=0
remove entities from field
MoFEM::CoreInterface::get_finite_elements
virtual const FiniteElement_multiIndex * get_finite_elements() const =0
Get the finite elements object.
MoFEM::CoreInterface::get_finite_element_entities_by_type
virtual MoFEMErrorCode get_finite_element_entities_by_type(const std::string name, EntityType type, Range &ents) const =0
get entities in the finite element by type
MoFEM::CoreInterface::get_dofs_by_name_and_ent_end
virtual DofEntityByUId::iterator get_dofs_by_name_and_ent_end(const std::string &field_name, const EntityHandle ent) const =0
get begin iterator of filed dofs of given name and ent (instead you can use IT_GET_DOFS_FIELD_BY_NAME...
MoFEM::CoreInterface::get_field_meshset
virtual EntityHandle get_field_meshset(const std::string name) const =0
get field meshset
MoFEM::DofMethod
Data structure to exchange data between mofem and User Loop Methods on entities.
Definition: LoopMethods.hpp:493
MoFEM::CoreInterface::remove_parents_by_parents
virtual MoFEMErrorCode remove_parents_by_parents(const Range &ents, int verb=DEFAULT_VERBOSITY)=0
Remove paremts from entities having parents in passed range.
MoFEM::RefEntity_multiIndex
multi_index_container< boost::shared_ptr< RefEntity >, indexed_by< ordered_unique< tag< Ent_mi_tag >, const_mem_fun< RefEntity, EntityHandle, &RefEntity::getEnt > >, ordered_non_unique< tag< Ent_Ent_mi_tag >, const_mem_fun< RefEntity, EntityHandle, &RefEntity::getParentEnt > >, ordered_non_unique< tag< Composite_EntType_and_ParentEntType_mi_tag >, composite_key< RefEntity, const_mem_fun< RefEntity, EntityType, &RefEntity::getEntType >, const_mem_fun< RefEntity, EntityType, &RefEntity::getParentEntType > > >, ordered_non_unique< tag< Composite_ParentEnt_And_EntType_mi_tag >, composite_key< RefEntity, const_mem_fun< RefEntity, EntityType, &RefEntity::getEntType >, const_mem_fun< RefEntity, EntityHandle, &RefEntity::getParentEnt > > > > > RefEntity_multiIndex
Definition: RefEntsMultiIndices.hpp:760
MoFEM::CoreInterface::modify_problem_mask_ref_level_set_bit
virtual MoFEMErrorCode modify_problem_mask_ref_level_set_bit(const std::string &name_problem, const BitRefLevel &bit)=0
set dof mask ref level for problem
MoFEM::CoreInterface::add_ents_to_field_by_dim
virtual MoFEMErrorCode add_ents_to_field_by_dim(const Range &ents, const int dim, const std::string &name, int verb=DEFAULT_VERBOSITY)=0
Add entities to field meshset.
MoFEM::CoreInterface::add_ents_to_field_by_type
virtual MoFEMErrorCode add_ents_to_field_by_type(const Range &ents, const EntityType type, const std::string &name, int verb=DEFAULT_VERBOSITY)=0
Add entities to field meshset.
MoFEM::Field
Provide data structure for (tensor) field approximation.
Definition: FieldMultiIndices.hpp:51
order
constexpr int order
Definition: dg_projection.cpp:18
MoFEM::CoreInterface::check_problem
virtual bool check_problem(const std::string name)=0
check if problem exist
MoFEM::DeprecatedCoreInterface
Deprecated interface functions.
Definition: DeprecatedCoreInterface.hpp:16
MoFEM::CoreInterface::get_dofs
virtual const DofEntity_multiIndex * get_dofs() const =0
Get the dofs object.
MoFEM::Interface
DeprecatedCoreInterface Interface
Definition: Interface.hpp:2002
MoFEM::CoreInterface::remove_parents_by_ents
virtual MoFEMErrorCode remove_parents_by_ents(const Range &ents, int verb=DEFAULT_VERBOSITY)=0
Remove parents from entities.
MoFEM::CoreInterface::add_broken_field
virtual MoFEMErrorCode add_broken_field(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_EXCL, int verb=DEFAULT_VERBOSITY)=0
Add field.
MoFEM::CoreInterface::rebuild_database
virtual MoFEMErrorCode rebuild_database(int verb=DEFAULT_VERBOSITY)=0
Clear database and initialize it once again.
FieldSpace
FieldSpace
approximation spaces
Definition: definitions.h:82
MoFEM::CoreInterface::add_ents_to_finite_element_by_type
virtual MoFEMErrorCode add_ents_to_finite_element_by_type(const EntityHandle entities, const EntityType type, const std::string &name, const bool recursive=true)=0
add entities to finite element
VERBOSE
@ VERBOSE
Definition: definitions.h:222
MoFEM::CoreInterface::problem_basic_method_preProcess
virtual MoFEMErrorCode problem_basic_method_preProcess(const Problem *problem_ptr, BasicMethod &method, int verb=DEFAULT_VERBOSITY)=0
Set data for BasicMethod.
MoFEM::CoreInterface::get_dofs_by_name_and_type_begin
virtual DofEntityByUId::iterator get_dofs_by_name_and_type_begin(const std::string &field_name, const EntityType type) const =0
get begin iterator of filed dofs of given name and ent type (instead you can use IT_GET_DOFS_FIELD_BY...
MoFEM::CoreInterface::get_finite_element_structure
virtual const FiniteElement * get_finite_element_structure(const std::string &name, enum MoFEMTypes bh=MF_EXIST) const =0
get finite element struture
MoFEM::CoreInterface::remove_ents_from_finite_element
virtual MoFEMErrorCode remove_ents_from_finite_element(const std::string name, const EntityHandle meshset, const EntityType type, int verb=DEFAULT_VERBOSITY)=0
remove entities from given refinement level to finite element database
DeprecatedCoreInterface.hpp
Deprecated interface functions.
MoFEM::CoreInterface::add_finite_element
virtual MoFEMErrorCode add_finite_element(const std::string &fe_name, enum MoFEMTypes bh=MF_EXCL, int verb=DEFAULT_VERBOSITY)=0
add finite element
MoFEM::CoreInterface::get_field_id
virtual BitFieldId get_field_id(const std::string &name) const =0
Get field Id.
MoFEM::CoreInterface::get_moab
virtual moab::Interface & get_moab()=0
MoFEM::CoreInterface::remove_parents_by_bit_ref
virtual MoFEMErrorCode remove_parents_by_bit_ref(const BitRefLevel bit, const BitRefLevel mask, int verb=DEFAULT_VERBOSITY)=0
Remove parent from entities on bit level.
MoFEM
implementation of Data Operators for Forces and Sources
Definition: Common.hpp:10
MoFEM::CoreInterface::modify_finite_element_add_field_col
virtual MoFEMErrorCode modify_finite_element_add_field_col(const std::string &fe_name, const std::string name_row)=0
set field col which finite element use
MoFEM::CoreInterface::build_finite_elements
virtual MoFEMErrorCode build_finite_elements(int verb=DEFAULT_VERBOSITY)=0
Build finite elements.
MoFEM::CoreInterface::remove_ents_by_bit_ref
virtual MoFEMErrorCode remove_ents_by_bit_ref(const BitRefLevel bit, const BitRefLevel mask, int verb=DEFAULT_VERBOSITY)=0
remove entities form mofem database
MoFEM::CoreInterface::~CoreInterface
virtual ~CoreInterface()=default
MoFEM::CoreInterface::add_ents_to_finite_element_by_bit_ref
virtual MoFEMErrorCode add_ents_to_finite_element_by_bit_ref(const BitRefLevel &bit, const BitRefLevel &mask, const std::string &name, EntityType type, int verb=DEFAULT_VERBOSITY)=0
add TET entities from given refinement level to finite element database given by name
MoFEM::CoreInterface::add_field
virtual MoFEMErrorCode add_field(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_EXCL, int verb=DEFAULT_VERBOSITY)=0
Add field.
bit
auto bit
set bit
Definition: hanging_node_approx.cpp:75
RowColData
RowColData
RowColData.
Definition: definitions.h:136
MoFEM::Types::FieldCoefficientsNumber
int FieldCoefficientsNumber
Number of field coefficients.
Definition: Types.hpp:27
convert.type
type
Definition: convert.py:64
MoFEM::CoreInterface::remove_ents_from_finite_element_by_bit_ref
virtual MoFEMErrorCode remove_ents_from_finite_element_by_bit_ref(const BitRefLevel bit, const BitRefLevel mask, int verb=DEFAULT_VERBOSITY)=0
remove elements from given refinement level to finite element database
MoFEM::CoreInterface::get_basic_entity_data_ptr
virtual boost::shared_ptr< BasicEntityData > & get_basic_entity_data_ptr()=0
Get pointer to basic entity data.
MoFEM::CoreInterface::get_ent_field_by_name_begin
virtual FieldEntityByUId::iterator get_ent_field_by_name_begin(const std::string &field_name) const =0
get begin iterator of filed ents of given name (instead you can use IT_GET_ENT_FIELD_BY_NAME_FOR_LOOP...
MoFEM::CoreInterface::delete_field
virtual MoFEMErrorCode delete_field(const std::string name, int verb=DEFAULT_VERBOSITY)=0
Delete field.
MoFEM::CoreInterface::modify_problem_unset_finite_element
virtual MoFEMErrorCode modify_problem_unset_finite_element(const std::string name_problem, const std::string &fe_name)=0
unset finite element from problem, this remove entities assigned to finite element to a particular pr...
MoFEM::CoreInterface::delete_finite_element
virtual MoFEMErrorCode delete_finite_element(const std::string name, int verb=DEFAULT_VERBOSITY)=0
delete finite element from mofem database
MoFEM::CoreInterface::get_comm_size
virtual int get_comm_size() const =0
MoFEM::CoreInterface::cache_problem_entities
virtual MoFEMErrorCode cache_problem_entities(const std::string prb_name, CacheTupleWeakPtr cache_ptr)=0
Cache variables.
MoFEM::CoreInterface::get_field_ents
virtual const FieldEntity_multiIndex * get_field_ents() const =0
Get the field ents object.
MoFEM::CoreInterface::get_field_entities_by_handle
virtual MoFEMErrorCode get_field_entities_by_handle(const std::string name, Range &ents) const =0
get entities in the field by handle
MoFEM::CoreInterface::clear_ents_fields
virtual MoFEMErrorCode clear_ents_fields(const Range ents, int verb=DEFAULT_VERBOSITY)=0
MoFEM::CoreInterface::check_field
virtual bool check_field(const std::string &name) const =0
check if field is in database
MoFEM::CoreInterface::delete_ents_by_bit_ref
virtual MoFEMErrorCode delete_ents_by_bit_ref(const BitRefLevel bit, const BitRefLevel mask, const bool remove_parent=false, int verb=DEFAULT_VERBOSITY, MoFEMTypes mf=MF_ZERO)=0
delete entities form mofem and moab database
MoFEM::BasicMethod
Data structure to exchange data between mofem and User Loop Methods.
Definition: LoopMethods.hpp:183
MoFEM::CoreInterface::clear_dofs_fields
virtual MoFEMErrorCode clear_dofs_fields(const Range ents, int verb=DEFAULT_VERBOSITY)=0
MoFEM::CoreInterface::add_ents_to_finite_element_by_dim
virtual MoFEMErrorCode add_ents_to_finite_element_by_dim(const EntityHandle entities, const int dim, const std::string &name, const bool recursive=true)=0
add entities to finite element
MoFEM::CoreInterface::get_problems
virtual const Problem_multiIndex * get_problems() const =0
Get the problems object.
MoFEM::CoreInterface::get_fe_by_name_end
virtual EntFiniteElement_multiIndex::index< Unique_mi_tag >::type::iterator get_fe_by_name_end(const std::string &fe_name) const =0
get end iterator of finite elements of given name (instead you can use IT_GET_FES_BY_NAME_FOR_LOOP(MF...
MoFEM::CacheTupleSharedPtr
boost::shared_ptr< CacheTuple > CacheTupleSharedPtr
Definition: FEMultiIndices.hpp:495
MoFEM::FieldEntity_multiIndex
multi_index_container< boost::shared_ptr< FieldEntity >, indexed_by< ordered_unique< tag< Unique_mi_tag >, member< FieldEntity, UId, &FieldEntity::localUId > >, ordered_non_unique< tag< Ent_mi_tag >, const_mem_fun< FieldEntity::interface_type_RefEntity, EntityHandle, &FieldEntity::getEnt > > > > FieldEntity_multiIndex
Definition: FieldEntsMultiIndices.hpp:489
MoFEM::FiniteElement
Finite element definition.
Definition: FEMultiIndices.hpp:26
MoFEM::CoreInterface::modify_finite_element_off_field_col
virtual MoFEMErrorCode modify_finite_element_off_field_col(const std::string &fe_name, const std::string name_row)=0
unset field col which finite element use
MoFEM::CoreInterface::modify_problem_ref_level_add_bit
virtual MoFEMErrorCode modify_problem_ref_level_add_bit(const std::string &name_problem, const BitRefLevel &bit)=0
add ref level to problem
MoFEM::CoreInterface::get_meshsets_manager
virtual MeshsetsManager & get_meshsets_manager()=0
get MeshsetsManager pointer
field_name
constexpr auto field_name
Definition: poisson_2d_homogeneous.cpp:13
MoFEM::CoreInterface::clear_problems
virtual MoFEMErrorCode clear_problems(int verb=DEFAULT_VERBOSITY)=0
clear problems
Problem_multiIndex
multi_index_container< Problem, indexed_by< ordered_unique< tag< Meshset_mi_tag >, member< Problem, EntityHandle, &Problem::meshset > >, hashed_unique< tag< BitProblemId_mi_tag >, const_mem_fun< Problem, BitProblemId, &Problem::getId >, HashBit< BitProblemId >, EqBit< BitProblemId > >, hashed_unique< tag< Problem_mi_tag >, const_mem_fun< Problem, std::string, &Problem::getName > > > > Problem_multiIndex
MultiIndex for entities for Problem.
Definition: ProblemsMultiIndices.hpp:657
MoFEM::CoreInterface::get_finite_element_entities_by_dimension
virtual MoFEMErrorCode get_finite_element_entities_by_dimension(const std::string name, int dim, Range &ents) const =0
get entities in the finite element by dimension
MoFEM::CoreInterface::get_finite_element_entities_by_handle
virtual MoFEMErrorCode get_finite_element_entities_by_handle(const std::string name, Range &ents) const =0
get entities in the finite element by handle
MoFEM::CoreInterface::clear_database
virtual MoFEMErrorCode clear_database(int verb=DEFAULT_VERBOSITY)=0
Clear database.
MoFEM::CoreInterface::get_fields
virtual const Field_multiIndex * get_fields() const =0
Get the fields object.
MoFEM::UnknownInterface
base class for all interface classes
Definition: UnknownInterface.hpp:34
MoFEM::ElementAdjacencyFunct
boost::function< MoFEMErrorCode(Interface &moab, const Field &field, const EntFiniteElement &fe, std::vector< EntityHandle > &adjacency)> ElementAdjacencyFunct
user adjacency function
Definition: FEMultiIndices.hpp:20
Range
MoFEM::CoreInterface::get_dofs_by_name_begin
virtual DofEntityByUId::iterator get_dofs_by_name_begin(const std::string &field_name) const =0
get begin iterator of filed dofs of given name (instead you can use IT_GET_DOFS_FIELD_BY_NAME_FOR_LOO...
MF_ZERO
@ MF_ZERO
Definition: definitions.h:111
MoFEM::CoreInterface::clear_finite_elements
virtual MoFEMErrorCode clear_finite_elements(const Range &ents, int verb=DEFAULT_VERBOSITY)=0
MoFEM::Types::ApproximationOrder
int ApproximationOrder
Approximation on the entity.
Definition: Types.hpp:26
MoFEM::CoreInterface::modify_finite_element_off_field_data
virtual MoFEMErrorCode modify_finite_element_off_field_data(const std::string &fe_name, const std::string name_filed)=0
unset finite element field data
Field_multiIndex
multi_index_container< boost::shared_ptr< Field >, indexed_by< hashed_unique< tag< BitFieldId_mi_tag >, const_mem_fun< Field, const BitFieldId &, &Field::getId >, HashBit< BitFieldId >, EqBit< BitFieldId > >, ordered_unique< tag< Meshset_mi_tag >, member< Field, EntityHandle, &Field::meshSet > >, ordered_unique< tag< FieldName_mi_tag >, const_mem_fun< Field, boost::string_ref, &Field::getNameRef > >, ordered_non_unique< tag< BitFieldId_space_mi_tag >, const_mem_fun< Field, FieldSpace, &Field::getSpace > > > > Field_multiIndex
Field_multiIndex for Field.
Definition: FieldMultiIndices.hpp:491
MoFEM::CoreInterface::check_number_of_ents_in_ents_field
virtual MoFEMErrorCode check_number_of_ents_in_ents_field() const =0
check data consistency in entitiesPtr
MoFEM::CoreInterface::clear_inactive_dofs
virtual MoFEMErrorCode clear_inactive_dofs(int verb=DEFAULT_VERBOSITY)=0
MoFEM::CoreInterface::get_fe_by_name_begin
virtual EntFiniteElement_multiIndex::index< Unique_mi_tag >::type::iterator get_fe_by_name_begin(const std::string &fe_name) const =0
get begin iterator of finite elements of given name (instead you can use IT_GET_FES_BY_NAME_FOR_LOOP(...
MoFEM::CoreInterface::get_dofs_by_name_and_ent_begin
virtual DofEntityByUId::iterator get_dofs_by_name_and_ent_begin(const std::string &field_name, const EntityHandle ent) const =0
get begin iterator of filed dofs of given name and ent(instead you can use IT_GET_DOFS_FIELD_BY_NAME_...
MoFEM::CoreInterface::list_problem
virtual MoFEMErrorCode list_problem() const =0
list problems
MoFEM::Types::FieldBitNumber
char FieldBitNumber
Field bit number.
Definition: Types.hpp:28
MoFEM::CoreInterface::get_ref_ents
virtual const RefEntity_multiIndex * get_ref_ents() const =0
Get the ref ents object.
MoFEM::CoreInterface::get_ref_finite_elements
virtual const RefElement_multiIndex * get_ref_finite_elements() const =0
Get the ref finite elements object.
MoFEM::MeshsetsManager
Interface for managing meshsets containing materials and boundary conditions.
Definition: MeshsetsManager.hpp:104
MoFEM::CacheTupleWeakPtr
boost::weak_ptr< CacheTuple > CacheTupleWeakPtr
Definition: FEMultiIndices.hpp:494
MoFEM::CoreInterface::build_fields
virtual MoFEMErrorCode build_fields(int verb=DEFAULT_VERBOSITY)=0
MoFEM::CoreInterface::clear_problem
virtual MoFEMErrorCode clear_problem(const std::string name, int verb=DEFAULT_VERBOSITY)=0
clear problem
MoFEM::CoreInterface::modify_finite_element_add_field_data
virtual MoFEMErrorCode modify_finite_element_add_field_data(const std::string &fe_name, const std::string name_filed)=0
set finite element field data
MoFEM::CoreInterface::modify_finite_element_off_field_row
virtual MoFEMErrorCode modify_finite_element_off_field_row(const std::string &fe_name, const std::string name_row)=0
unset field row which finite element use
FieldApproximationBase
FieldApproximationBase
approximation base
Definition: definitions.h:58
MoFEMTypes
MoFEMTypes
Those types control how functions respond on arguments, f.e. error handling.
Definition: definitions.h:110
MoFEM::CoreInterface::clear_dofs_fields_by_bit_ref
virtual MoFEMErrorCode clear_dofs_fields_by_bit_ref(const BitRefLevel bit, const BitRefLevel mask, int verb=DEFAULT_VERBOSITY)=0
FiniteElement_multiIndex
multi_index_container< boost::shared_ptr< FiniteElement >, indexed_by< hashed_unique< tag< FiniteElement_Meshset_mi_tag >, member< FiniteElement, EntityHandle, &FiniteElement::meshset > >, hashed_unique< tag< BitFEId_mi_tag >, const_mem_fun< FiniteElement, BitFEId, &FiniteElement::getId >, HashBit< BitFEId >, EqBit< BitFEId > >, ordered_unique< tag< FiniteElement_name_mi_tag >, const_mem_fun< FiniteElement, boost::string_ref, &FiniteElement::getNameRef > > > > FiniteElement_multiIndex
MultiIndex for entities for FiniteElement.
Definition: FEMultiIndices.hpp:849
MoFEM::CoreInterface::modify_problem_add_finite_element
virtual MoFEMErrorCode modify_problem_add_finite_element(const std::string name_problem, const std::string &fe_name)=0
add finite element to problem, this add entities assigned to finite element to a particular problem
MoFEM::Types::BitRefLevel
std::bitset< BITREFLEVEL_SIZE > BitRefLevel
Bit structure attached to each entity identifying to what mesh entity is attached.
Definition: Types.hpp:40
MoFEM::CoreInterface::modify_problem_mask_ref_level_add_bit
virtual MoFEMErrorCode modify_problem_mask_ref_level_add_bit(const std::string &name_problem, const BitRefLevel &bit)=0
set dof mask ref level for problem
MoFEM::CoreInterface::build_adjacencies
virtual MoFEMErrorCode build_adjacencies(const Range &ents, int verb=DEFAULT_VERBOSITY)=0
build adjacencies
MoFEM::CoreInterface::build_field
virtual MoFEMErrorCode build_field(const std::string field_name, int verb=DEFAULT_VERBOSITY)=0
build field by name
MoFEM::Problem
keeps basic data about problem
Definition: ProblemsMultiIndices.hpp:54
MoFEM::CoreInterface::check_finite_element
virtual bool check_finite_element(const std::string &name) const =0
Check if finite element is in database.
MoFEM::CoreInterface
Interface.
Definition: Interface.hpp:27
MoFEM::CoreInterface::set_field_order
virtual MoFEMErrorCode set_field_order(const EntityHandle meshset, const EntityType type, const std::string &name, const ApproximationOrder order, int verb=DEFAULT_VERBOSITY)=0
Set order approximation of the entities in the field.
MoFEM::CoreInterface::get_field_entities_by_dimension
virtual MoFEMErrorCode get_field_entities_by_dimension(const std::string name, int dim, Range &ents) const =0
get entities in the field by dimension
DofEntity_multiIndex
multi_index_container< boost::shared_ptr< DofEntity >, indexed_by< ordered_unique< tag< Unique_mi_tag >, const_mem_fun< DofEntity, UId, &DofEntity::getLocalUniqueId > >, ordered_non_unique< tag< Ent_mi_tag >, const_mem_fun< DofEntity, EntityHandle, &DofEntity::getEnt > > > > DofEntity_multiIndex
MultiIndex container keeps DofEntity.
Definition: DofsMultiIndices.hpp:317
MoFEM::CoreInterface::list_fields
virtual MoFEMErrorCode list_fields() const =0
list entities in the field
MoFEM::CoreInterface::get_field_entities_by_type
virtual MoFEMErrorCode get_field_entities_by_type(const std::string name, EntityType type, Range &ents) const =0
get entities in the field by type
MF_EXCL
@ MF_EXCL
Definition: definitions.h:112
MoFEM::CoreInterface::get_dofs_by_name_and_type_end
virtual DofEntityByUId::iterator get_dofs_by_name_and_type_end(const std::string &field_name, const EntityType type) const =0
get begin iterator of filed dofs of given name end ent type(instead you can use IT_GET_DOFS_FIELD_BY_...
MoFEM::CoreInterface::add_problem
virtual MoFEMErrorCode add_problem(const std::string &name, enum MoFEMTypes bh=MF_EXCL, int verb=DEFAULT_VERBOSITY)=0
Add problem.
MF_EXIST
@ MF_EXIST
Definition: definitions.h:113
MoFEM::CoreInterface::delete_problem
virtual MoFEMErrorCode delete_problem(const std::string name)=0
Delete problem.
EntFiniteElement_multiIndex
multi_index_container< boost::shared_ptr< EntFiniteElement >, indexed_by< ordered_unique< tag< Unique_mi_tag >, const_mem_fun< EntFiniteElement, UId, &EntFiniteElement::getLocalUniqueId > >, ordered_non_unique< tag< Ent_mi_tag >, const_mem_fun< EntFiniteElement::interface_type_RefEntity, EntityHandle, &EntFiniteElement::getEnt > > > > EntFiniteElement_multiIndex
MultiIndex container for EntFiniteElement.
Definition: FEMultiIndices.hpp:800
MoFEM::CoreInterface::set_field_order_by_entity_type_and_bit_ref
virtual MoFEMErrorCode set_field_order_by_entity_type_and_bit_ref(const BitRefLevel &bit, const BitRefLevel &mask, const EntityType type, const std::string &name, const ApproximationOrder order, int verb=DEFAULT_VERBOSITY)=0
Set order approximation of the entities in the field.
MoFEM::CoreInterface::getValue
virtual const int getValue() const =0
Get the core.
MoFEM::CoreInterface::clear_adjacencies_finite_elements
virtual MoFEMErrorCode clear_adjacencies_finite_elements(const BitRefLevel bit, const BitRefLevel mask, int verb=DEFAULT_VERBOSITY)=0
clear adjacency map for finite elements on given bit level
MoFEM::CoreInterface::loop_entities
virtual MoFEMErrorCode loop_entities(const std::string field_name, EntityMethod &method, Range const *const ents=nullptr, int verb=DEFAULT_VERBOSITY)=0
Loop over field entities.