v0.6.12
Classes | Typedefs | Functions | Variables
MoFEM Namespace Reference

implementation of Data Operators for Forces and Sources More...

Classes

struct  AccelerationCubitBcData
 Definition of the acceleration bc data structure. More...
 
struct  BaseFEDofEntity
 keeps basic information about indexed dofs for the finite element More...
 
struct  BaseFunction
 Base class if inherited used to calculate base functions. More...
 
struct  BaseFunctionCtx
 Base class used to exchange data between element data structures and class calculating base functions. More...
 
struct  BasicEntity
 this struct keeps basic methods for moab entity More...
 
struct  BasicEntityData
 Basic data. like access to moab interface and basic tag handlers. More...
 
struct  BasicMethod
 Data structure to exchange data between mofem and User Loop Methods.It allows to exchange data between MoFEM and user functions. It stores information about multi-indices. More...
 
struct  BasicMethodPtr
 
struct  BitFEId_mi_tag
 
struct  BitFieldId_mi_tag
 
struct  BitFieldId_space_mi_tag
 
struct  BitLevelCoupler
 Interface set parent for vertices, edges, triangles and tetrahedrons.FIXME: Not tested, slow, bugs. More...
 
struct  BitProblemId_mi_tag
 
struct  BitRefManager
 Managing BitRefLevels. More...
 
struct  Block_BodyForces
 Body force data structure. More...
 
struct  BlockData
 
struct  BlockSetAttributes
 Arbitrary block attributes data structure. More...
 
struct  CfgCubitBcData
 Definition of the cfd_bc data structure. More...
 
struct  ComposedProblemsData
 
struct  Composite_Cubit_msId_And_MeshSetType_mi_tag
 
struct  Composite_Ent_and_ShortId_mi_tag
 
struct  Composite_EntType_and_ParentEntType_mi_tag
 
struct  Composite_EntType_and_Space_mi_tag
 
struct  Composite_mi_tag
 
struct  Composite_Name_And_Ent_And_EntDofIdx_mi_tag
 
struct  Composite_Name_And_Ent_mi_tag
 
struct  Composite_Name_And_Part_mi_tag
 
struct  Composite_Name_And_Type_mi_tag
 
struct  Composite_Name_Ent_And_Part_mi_tag
 
struct  Composite_Name_Ent_Order_And_CoeffIdx_mi_tag
 
struct  Composite_Name_Type_And_Side_Number_mi_tag
 
struct  Composite_ParentEnt_And_BitsOfRefinedEdges_mi_tag
 
struct  Composite_ParentEnt_And_EntType_mi_tag
 
struct  Composite_Part_And_Order_mi_tag
 
struct  Composite_SeriesID_And_Step_mi_tag
 
struct  Composite_SeriesName_And_Step_mi_tag
 
struct  Composite_SeriesName_And_Time_mi_tag
 
struct  Composite_Unique_mi_tag
 
struct  CoordSys
 Structure for Coordinate system of two-point tensorScientific computing applications deal in physical quantities expressed as tensors: scalars such as temperature, vectors such as velocity, and second-order tensors such as stress. In practice, these are formally tensor fields: a tensor field assigns a tensor to each point in a mathematical space (typically a Euclidean space or manifold). More...
 
struct  CoordSysName_mi_tag
 
struct  CoordSystemsManager
 
struct  Core
 Core (interface) class. More...
 
struct  CoreInterface
 InterfaceThis interface is used by user to:
More...
 
struct  CreateRowComressedADJMatrix
 Create compressed matrix. More...
 
struct  CubitMeshSets
 this struct keeps basic methods for moab meshset about material and boundary conditions More...
 
struct  CubitMeshSets_change_add_bit_to_cubit_bc_type
 change meshset type More...
 
struct  CubitMeshSets_change_attributes
 
struct  CubitMeshSets_change_attributes_data_structure
 
struct  CubitMeshSets_change_bc_data_structure
 
struct  CubitMeshSets_change_name
 change meshset name More...
 
struct  CubitMeshSets_mask_meshset_mi_tag
 
struct  CubitMeshSets_mi_tag
 MultiIndex Tag for field id. More...
 
struct  CubitMeshSets_name
 
struct  CutMeshInterface
 Interface to cut meshes. More...
 
struct  DataForcesAndSourcesCore
 data structure for finite element entityIt keeps that about indices of degrees of freedom, dofs data, base functions functions, entity side number, type of entities, approximation order, etc. More...
 
struct  DataOperator
 base operator to do operations at Gauss Pt. level More...
 
struct  DefaultElementAdjacency
 default adjacency map More...
 
struct  DeprecatedCoreInterface
 Deprecated interface functions. More...
 
struct  DerivedDataForcesAndSourcesCore
 this class derive data form other data structure More...
 
struct  DisplacementCubitBcData
 Definition of the displacement bc data structure. More...
 
struct  DMCtx
 PETSc Discrete Manager data structure. More...
 
struct  Dof_shared_ptr_change
 
struct  DOF_Unique_mi_tag
 
struct  DofEntity
 keeps information about DOF on the entity More...
 
struct  DofEntity_active_change
 
struct  EdgeElementForcesAndSourcesCore
 Edge finite elementUser is implementing own operator at Gauss points level, by own object derived from EdgeElementForcesAndSourcesCoreL::UserDataOperator. Arbitrary number of operator added pushing objects to rowOpPtrVector and rowColOpPtrVector. More...
 
struct  EdgePolynomialBase
 Calculate base functions on tetrahedral. More...
 
struct  Ent_Ent_mi_tag
 
struct  Ent_FiniteElement_mi_tag
 
struct  Ent_mi_tag
 
struct  Ent_Owner_mi_tag
 
struct  Ent_ParallelStatus
 
struct  EntDofIdx_mi_tag
 
struct  EntFiniteElement
 Finite element data for entity. More...
 
struct  Entity_update_pcomm_data
 
struct  EntMethod
 Data structure to exchange data between mofem and User Loop Methods on entities.It allows to exchange data between MoFEM and user functions. It stores information about multi-indices. More...
 
struct  EntPolynomialBaseCtx
 Class used to pass element data to calculate base functions on tet,triangle,edge. More...
 
struct  EntType_mi_tag
 
struct  EqBit
 
struct  ErrorCheckerCode
 Error check for inline function check. More...
 
struct  FaceElementForcesAndSourcesCore
 Face finite elementUser is implementing own operator at Gauss point level, by own object derived from FaceElementForcesAndSourcesCoreL::UserDataOperator. Arbitrary number of operator added pushing objects to OpPtrVector. More...
 
struct  FatPrismElementForcesAndSourcesCore
 FatPrism finite elementUser is implementing own operator at Gauss points level, by own object derived from FatPrismElementForcesAndSourcesCoreL::UserDataOperator. Arbitrary number of operator added pushing objects to rowOpPtrVector and rowColOpPtrVector. More...
 
struct  FatPrismPolynomialBase
 Calculate base functions on tetrahedralFIXME: Need moab and mofem finite element structure to work (that not perfect) More...
 
struct  FatPrismPolynomialBaseCtx
 Class used to pass element data to calculate base functions on fat prism. More...
 
struct  FE_Unique_mi_tag
 
struct  FEDofEntity
 keeps information about indexed dofs for the finite element More...
 
struct  FEEnt_mi_tag
 
struct  FEMethod
 structure for User Loop Methods on finite elementsIt can be used to calculate stiffness matrices, residuals, load vectors etc. It is low level class however in some class users looking for speed and efficiency, can use it directly. More...
 
struct  FENumeredDofEntity
 keeps information about indexed dofs for the finite element More...
 
struct  Field
 Provide data structure for (tensor) field approximation.The Field is intended to provide support for fields, with a strong bias towards supporting first and best the capabilities required for scientific computing applications. Since we work with discrete spaces, data structure has to carry information about type of approximation space, its regularity. More...
 
struct  FieldBlas
 Section manager is used to create sections . More...
 
struct  FieldChangeCoordinateSystem
 Set field coordinate system. More...
 
struct  FieldEntity
 Struct keeps handle to entity in the field. More...
 
struct  FieldEntity_change_order
 structure to change FieldEntity order More...
 
struct  FieldEntityEntFiniteElementAdjacencyMap
 FieldEntityEntFiniteElementAdjacencyMap of mofem finite element and entities. More...
 
struct  FieldEntityEntFiniteElementAdjacencyMap_change_ByWhat
 
struct  FieldName_mi_tag
 MultiIndex Tag for field name. More...
 
struct  FieldSeries
 Structure for recording (time) series. More...
 
struct  FieldSeriesStep
 Structure for keeping time and step. More...
 
struct  FiniteElement
 user adjacency function table More...
 
struct  FiniteElement_change_bit_add
 Add field to data. More...
 
struct  FiniteElement_change_bit_off
 Unset field from data. More...
 
struct  FiniteElement_col_change_bit_add
 Add field to column. More...
 
struct  FiniteElement_col_change_bit_off
 Unset field from column. More...
 
struct  FiniteElement_Meshset_mi_tag
 
struct  FiniteElement_name_mi_tag
 
struct  FiniteElement_row_change_bit_add
 Add field to row. More...
 
struct  FiniteElement_row_change_bit_off
 Unset field from row. More...
 
struct  FlatPrismElementForcesAndSourcesCore
 FlatPrism finite elementUser is implementing own operator at Gauss points level, by own object derived from FlatPrismElementForcesAndSourcesCoreL::UserDataOperator. Arbitrary number of operator added pushing objects to rowOpPtrVector and rowColOpPtrVector. More...
 
struct  FlatPrismPolynomialBase
 Calculate base functions on tetrahedralFIXME: Need moab and mofem finite element structure to work (that not perfect) More...
 
struct  FlatPrismPolynomialBaseCtx
 Class used to pass element data to calculate base functions on flat prism. More...
 
struct  ForceCubitBcData
 Definition of the force bc data structure. More...
 
struct  ForcesAndSourcesCore
 structure to get information form mofem into DataForcesAndSourcesCore More...
 
struct  GenericAttributeData
 Generic attribute data structure. More...
 
struct  GenericCubitBcData
 Generic bc data structure. More...
 
struct  HashBit
 
struct  HeatFluxCubitBcData
 Definition of the heat flux bc data structure. More...
 
struct  HelmholtzElement
 struture grouping operators and data used for helmholtz problemsIn order to assemble matrices and right hand side vectors, the loops over elements, enetities over that elememnts and finally loop over intergration points are executed. More...
 
struct  Idx_mi_tag
 
struct  IdxDataType
 
struct  IdxDataTypePtr
 
struct  Interface
 
struct  interface_DofEntity
 Interface to DofEntity. More...
 
struct  interface_EntFiniteElement
 interface to EntFiniteElement More...
 
struct  interface_Field
 Pointer interface for MoFEM::Field. More...
 
struct  interface_FieldEntity
 Interface to FieldEntityinterface to FieldEntity. More...
 
struct  interface_FieldSeries
 
struct  interface_FiniteElement
 Inetface for FE. More...
 
struct  interface_NumeredDofEntity
 interface to NumeredDofEntity More...
 
struct  interface_NumeredEntFiniteElement
 interface for NumeredEntFiniteElement More...
 
struct  interface_RefElement
 intrface to RefElement More...
 
struct  interface_RefEntity
 interface to RefEntity More...
 
struct  ISManager
 Section manager is used to create sections . More...
 
struct  JacobiPolynomial
 Calculating Legendre base functions. More...
 
struct  JacobiPolynomialCtx
 Class used to give arguments to Legendre base functions. More...
 
struct  KernelLobattoPolynomial
 Calculating Lobatto base functions. More...
 
struct  KernelLobattoPolynomialCtx
 Class used to give arguments to Kernel Lobatto base functions. More...
 
struct  KeyFromKey
 
struct  KspCtx
 Interface for linear (KSP) solver. More...
 
struct  KspMethod
 data structure for ksp (linear solver) contextStruture stores context data which are set in functions run by PETSc SNES functions. More...
 
struct  LegendrePolynomial
 Calculating Legendre base functions. More...
 
struct  LegendrePolynomialCtx
 Class used to give arguments to Legendre base functions. More...
 
struct  LengthMapData
 
struct  LobattoPolynomial
 Calculating Lobatto base functions. More...
 
struct  LobattoPolynomialCtx
 Class used to give arguments to Lobatto base functions. More...
 
struct  LtBit
 
struct  Mat_Elastic
 Elastic material data structure. More...
 
struct  Mat_Elastic_EberleinHolzapfel1
 Mat_Elastic with Fibres. More...
 
struct  Mat_Elastic_TransIso
 Transverse Isotropic material data structure. More...
 
struct  Mat_Interf
 Linear interface data structure. More...
 
struct  Mat_Moisture
 moisture transport material data structure More...
 
struct  Mat_Thermal
 Thermal material data structure. More...
 
struct  MedInterface
 Interface for load MED files. More...
 
struct  MeshRefinement
 Mesh refinement interface. More...
 
struct  Meshset_mi_tag
 
struct  MeshsetsManager
 Interface for managing meshsets containing materials and boundary conditions. More...
 
struct  MoFEMErrorCodeGeneric
 
struct  MoFEMErrorCodeGeneric< moab::ErrorCode >
 
struct  MoFEMErrorCodeGeneric< PetscErrorCode >
 
struct  MoFEMException
 Exception to catch. More...
 
struct  MoFEMExceptionInitial
 
struct  MoFEMExceptionRepeat
 
struct  MOFEMuuid
 MoFEM interface unique ID. More...
 
struct  NodeMergerInterface
 merge node from two bit levels More...
 
struct  NormElement
 finite element to appeximate analytical solution on surface More...
 
struct  NumeredDofEntity
 keeps information about indexed dofs for the problemFIXME: Is too many iterator, this has to be manage more efficiently, some iterators could be moved to multi_indices views. More...
 
struct  NumeredDofEntity_local_idx_change
 
struct  NumeredDofEntity_mofem_index_change
 
struct  NumeredDofEntity_mofem_part_and_all_index_change
 
struct  NumeredDofEntity_part_change
 
struct  NumeredEntFiniteElement
 Partitioned (Indexed) Finite Element in Problem. More...
 
struct  NumeredEntFiniteElement_change_part
 Change finite element part. More...
 
struct  OpCalculateHdivVectorField
 Get vector field for H-div approximation. More...
 
struct  OpCalculateHdivVectorField_General
 Get vector field for H-div approximation. More...
 
struct  OpCalculateHdivVectorField_General< Tensor_Dim, double, ublas::row_major, DoubleAllocator >
 Get vector field for H-div approximation. More...
 
struct  OpCalculateInvJacForFace
 Calculate inverse of jacobian for face element. More...
 
struct  OpCalculateInvJacForFatPrism
 Calculate inverse of jacobian for face element. More...
 
struct  OpCalculateInvJacForFlatPrism
 Calculate inverse of jacobian for face element. More...
 
struct  OpCalculateScalarFieldGradient
 Get field gradients at integration pts for scalar filed rank 0, i.e. vector field. More...
 
struct  OpCalculateScalarFieldGradient_General
 Evaluate field gradient values for scalar field, i.e. gradient is tensor rank 1 (vector) More...
 
struct  OpCalculateScalarFieldGradient_General< Tensor_Dim, double, ublas::row_major, DoubleAllocator >
 Evaluate field gradient values for scalar field, i.e. gradient is tensor rank 1 (vector), specialization. More...
 
struct  OpCalculateScalarFieldValues
 Get value at integration points for scalar field. More...
 
struct  OpCalculateScalarFieldValues_General
 Calculate field values for tenor field rank 0, i.e. scalar field. More...
 
struct  OpCalculateTensor2FieldValues_General
 Calculate field values for tenor field rank 2. More...
 
struct  OpCalculateTensor2FieldValues_General< Tensor_Dim0, Tensor_Dim1, double, ublas::row_major, DoubleAllocator >
 
struct  OpCalculateVectorFieldGradient
 Get field gradients at integration pts for scalar filed rank 0, i.e. vector field. More...
 
struct  OpCalculateVectorFieldGradient_General
 Evaluate field gradient values for vector field, i.e. gradient is tensor rank 2. More...
 
struct  OpCalculateVectorFieldGradient_General< Tensor_Dim0, Tensor_Dim1, double, ublas::row_major, DoubleAllocator >
 
struct  OpCalculateVectorFieldValues
 Get values at integration pts for tensor filed rank 1, i.e. vector field. More...
 
struct  OpCalculateVectorFieldValues_General
 Calculate field values for tenor field rank 1, i.e. vector field. More...
 
struct  OpCalculateVectorFieldValues_General< Tensor_Dim, double, ublas::row_major, DoubleAllocator >
 Calculate field values (template specialization) for tensor field rank 1, i.e. vector field. More...
 
struct  OpGetCoordsAndNormalsOnFace
 Calculate normals at Gauss points of triangle element. More...
 
struct  OpGetCoordsAndNormalsOnPrism
 calculate normals at Gauss points of triangle element More...
 
struct  OpGetDataAndGradient
 Get field values and gradients at Gauss points. More...
 
struct  OpGetHoTangentOnEdge
 Calculate tangent vector on edge form HO geometry approximation. More...
 
struct  OpSetContravariantPiolaTransform
 apply contravariant (Piola) transfer to Hdiv space More...
 
struct  OpSetContravariantPiolaTransformOnTriangle
 transform Hdiv base fluxes from reference element to physical triangle More...
 
struct  OpSetCovariantPiolaTransform
 apply covariant transfer to Hcurl space More...
 
struct  OpSetCovariantPiolaTransformOnEdge
 transform Hcurl base fluxes from reference element to physical edge More...
 
struct  OpSetCovariantPiolaTransformOnTriangle
 transform Hcurl base fluxes from reference element to physical triangle More...
 
struct  OpSetHoContravariantPiolaTransform
 Apply contravariant (Piola) transfer to Hdiv space for HO geometr. More...
 
struct  OpSetHoCovariantPiolaTransform
 Apply covariant (Piola) transfer to Hcurl space for HO geometry. More...
 
struct  OpSetHoInvJacH1
 transform local reference derivatives of shape function to global derivatives if higher order geometry is given More...
 
struct  OpSetHoInvJacHdivAndHcurl
 transform local reference derivatives of shape function to global derivatives if higher order geometry is given More...
 
struct  OpSetInvJacH1
 Transform local reference derivatives of shape function to global derivatives. More...
 
struct  OpSetInvJacH1ForFace
 Transform local reference derivatives of shape functions to global derivatives. More...
 
struct  OpSetInvJacH1ForFatPrism
 Transform local reference derivatives of shape functions to global derivatives. More...
 
struct  OpSetInvJacH1ForFlatPrism
 Transform local reference derivatives of shape functions to global derivatives. More...
 
struct  OpSetInvJacHcurlFace
 brief Transform local reference derivatives of shape function to global derivatives for face More...
 
struct  OpSetInvJacHdivAndHcurl
 brief Transform local reference derivatives of shape function to global derivatives More...
 
struct  Order_mi_tag
 MultiIndex Tag for field order. More...
 
struct  PairNameFEMethodPtr
 
struct  ParentEntType_mi_tag
 
struct  Part_mi_tag
 
struct  PetscGlobalIdx_mi_tag
 
struct  PetscLocalIdx_mi_tag
 
struct  PressureCubitBcData
 Definition of the pressure bc data structure. More...
 
struct  PrismInterface
 Make interface on given faces and create flat prism in that space. More...
 
struct  PrismsFromSurfaceInterface
 merge node from two bit levels More...
 
struct  Problem
 keeps basic data about problemThis is low level structure with information about problem, what elements compose problem and what DOFs are on rows and columns. More...
 
struct  Problem_mi_tag
 
struct  ProblemChangeRefLevelBitAdd
 add ref level to problem More...
 
struct  ProblemChangeRefLevelBitDofMaskSet
 set prof dof bit ref mask More...
 
struct  ProblemChangeRefLevelBitSet
 set ref level to problem More...
 
struct  ProblemClearComposedProblemData
 Clear composed problem data structure. More...
 
struct  ProblemClearNumeredFiniteElementsChange
 clear problem finite elements More...
 
struct  ProblemClearSubProblemData
 Clear sub-problem data structure. More...
 
struct  ProblemFiniteElementChangeBitAdd
 add finite element to problem More...
 
struct  ProblemFiniteElementChangeBitUnSet
 remove finite element from problem More...
 
struct  ProblemsManager
 Problem manager is used to build and partition problems . More...
 
struct  ProblemZeroNbColsChange
 zero nb. of DOFs in col More...
 
struct  ProblemZeroNbRowsChange
 zero nb. of DOFs in row More...
 
struct  Proc_mi_tag
 
struct  Projection10NodeCoordsOnField
 Projection of edge entities with one mid-node on hierarchical basis. More...
 
struct  ProjectionFieldOn10NodeTet
 
struct  RefElement
 keeps data about abstract refined finite element More...
 
struct  RefElement_change_parent
 change parentUsing this function with care. Some other multi-indices can deponent on this. More...
 
struct  RefElement_EDGE
 keeps data about abstract EDGE finite element More...
 
struct  RefElement_MESHSET
 keeps data about abstract MESHSET finite element More...
 
struct  RefElement_PRISM
 keeps data about abstract PRISM finite element More...
 
struct  RefElement_TET
 keeps data about abstract TET finite element More...
 
struct  RefElement_TRI
 keeps data about abstract TRI finite element More...
 
struct  RefElement_VERTEX
 keeps data about abstract VERTEX finite element More...
 
struct  RefEntity
 Struct keeps handle to refined handle. More...
 
struct  RefEntity_change_add_bit
 ref mofem entity, change bit More...
 
struct  RefEntity_change_and_bit
 ref mofem entity, change bit More...
 
struct  RefEntity_change_left_shift
 ref mofem entity, left shift More...
 
struct  RefEntity_change_parent
 change parentUse this function with care. Some other multi-indices can deponent on this. More...
 
struct  RefEntity_change_remove_parent
 ref mofem entity, remove parent More...
 
struct  RefEntity_change_right_shift
 ref mofem entity, right shift More...
 
struct  RefEntity_change_set_bit
 ref mofem entity, change bit More...
 
struct  RefEntity_change_set_nth_bit
 ref mofem entity, change bit More...
 
struct  RefEntity_change_xor_bit
 ref mofem entity, change bit More...
 
struct  SaveData
 
struct  SeriesID_mi_tag
 
struct  SeriesName_mi_tag
 
struct  SeriesRecorder
 
struct  SideNumber_mi_tag
 
struct  Simple
 Simple interface for fast problem set-up. More...
 
struct  SnesCtx
 Interface for nonlinear (SNES) solver. More...
 
struct  SnesMethod
 data structure for snes (nonlinear solver) contextStructure stores context data which are set in functions run by PETSc SNES functions. More...
 
struct  TemperatureCubitBcData
 Definition of the temperature bc data structure. More...
 
struct  TetGenInterface
 use TetGen to generate mesh More...
 
struct  TetPolynomialBase
 Calculate base functions on tetrahedral. More...
 
struct  Tools
 Auxiliary tools. More...
 
struct  TriPolynomialBase
 Calculate base functions on triangle. More...
 
struct  TsCtx
 Interface for Time Stepping (TS) solver. More...
 
struct  TSMethod
 data structure for TS (time stepping) contextStructure stores context data which are set in functions run by PETSc Time Stepping functions. More...
 
struct  Unique_Ent_mi_tag
 
struct  Unique_FiniteElement_mi_tag
 
struct  Unique_mi_tag
 
struct  UnknownInterface
 base class for all interface classes More...
 
struct  UpdateMeshsets
 
struct  VecManager
 Section manager is used to create sections . More...
 
struct  VelocityCubitBcData
 Definition of the velocity bc data structure. More...
 
struct  Version
 
struct  VertexElementForcesAndSourcesCore
 Vertex finite elementUser is implementing own operator at Gauss points level, by own object derived from VertexElementForcesAndSourcesCoreL::UserDataOperator. Arbitrary number of operator added pushing objects to rowOpPtrVector and rowColOpPtrVector. More...
 
struct  VolumeElementForcesAndSourcesCore
 Volume finite elementUser is implementing own operator at Gauss point level, by class derived from VolumeElementForcesAndSourcesCore::UserDataOperator. Arbitrary number of operator can be added by pushing objects to OpPtrVector. More...
 
struct  VolumeElementForcesAndSourcesCoreOnSide
 Volume element used to integrate on skeleton. More...
 

Typedefs

typedef moab::ErrorCode MoABErrorCode
 MoAB error code. More...
 
typedef PetscErrorCode MoFEMErrorCode
 MoFEM/PETSc error code. More...
 
typedef int DofIdx
 Index of DOF. More...
 
typedef int FEIdx
 Index of the element. More...
 
typedef int EntIdx
 Index of DOF on the entity. More...
 
typedef int EntPart
 Partition owning entity. More...
 
typedef double FieldData
 Field data type. More...
 
typedef int ApproximationOrder
 Approximation on the entity. More...
 
typedef int FieldCoefficientsNumber
 Number of field coefficients. More...
 
typedef uint128_t UId
 Unique Id. More...
 
typedef int ShortId
 Unique Id in the field. More...
 
typedef std::bitset< BITREFEDGES_SIZEBitRefEdges
 
typedef std::bitset< BITREFLEVEL_SIZEBitRefLevel
 Bit structure attached to each entity identifying to what mesh entity is attached. More...
 
typedef std::bitset< BITFIELDID_SIZEBitFieldId
 
typedef std::bitset< BITFEID_SIZEBitFEId
 
typedef std::bitset< BITPROBLEMID_SIZEBitProblemId
 
typedef std::bitset< BITINTERFACEUID_SIZEBitIntefaceId
 
typedef std::bitset< 32 > CubitBCType
 
typedef std::vector< int, std::allocator< int > > IntAllocator
 
typedef std::vector< double, std::allocator< double > > DoubleAllocator
 
typedef ublas::vector< int, IntAllocatorVectorInt
 
typedef ublas::vector< double, DoubleAllocatorVectorDouble
 
typedef ublas::matrix< double, ublas::row_major, DoubleAllocatorMatrixDouble
 
typedef ublas::vector< int, ublas::bounded_array< int, 3 > > VectorInt3
 
typedef ublas::vector< int, ublas::bounded_array< int, 9 > > VectorInt9
 
typedef ublas::matrix< double, ublas::row_major, ublas::bounded_array< double, 9 > > MatrixDouble3by3
 
typedef ublas::vector< double, ublas::bounded_array< double, 3 > > VectorDouble3
 
typedef ublas::vector< double, ublas::bounded_array< double, 9 > > VectorDouble9
 
typedef ublas::vector< double, ublas::shallow_array_adaptor< double > > VectorAdaptor
 
typedef ublas::matrix< double, ublas::row_major, ublas::shallow_array_adaptor< double > > MatrixAdaptor
 
typedef ublas::vector< int, ublas::shallow_array_adaptor< int > > VectorIntAdaptor
 
typedef std::vector< boost::shared_ptr< MatrixDouble > > ShapeFunctionBasesVector
 
typedef ublas::unbounded_array< boost::shared_ptr< const FEDofEntity >, std::allocator< boost::shared_ptr< const FEDofEntity > >> DofsAllocator
 
typedef ublas::vector< boost::shared_ptr< const FEDofEntity >, DofsAllocatorVectorDofs
 
typedef multi_index_container< LengthMapData, indexed_by< ordered_non_unique< member< LengthMapData, double, &LengthMapData::lEngth > >, hashed_unique< member< LengthMapData, EntityHandle, &LengthMapData::eDge > > >> LengthMapData_multi_index
 
typedef CubitMeshSet_multiIndex::index< CubitMeshSets_mi_tag >::type CubitMeshsetByType
 
typedef CubitMeshSet_multiIndex::index< CubitMeshSets_mask_meshset_mi_tag >::type CubitMeshsetByMask
 
typedef CubitMeshSet_multiIndex::index< CubitMeshSets_name >::type CubitMeshsetByName
 
typedef CubitMeshSet_multiIndex::index< CubitMeshSets_mi_tag >::type CubitMeshsetById
 
typedef multi_index_container< CubitMeshSets, indexed_by< hashed_unique< tag< Meshset_mi_tag >, member< CubitMeshSets, EntityHandle,&CubitMeshSets::meshset > >, ordered_non_unique< tag< CubitMeshSets_mi_tag >, const_mem_fun< CubitMeshSets, unsigned long int,&CubitMeshSets::getBcTypeULong > >, ordered_non_unique< tag< CubitMeshSets_mask_meshset_mi_tag >, const_mem_fun< CubitMeshSets, unsigned long int,&CubitMeshSets::getMaksedBcTypeULong > >, ordered_non_unique< tag< CubitMeshSets_name >, const_mem_fun< CubitMeshSets, std::string,&CubitMeshSets::getName > >, hashed_unique< tag< Composite_Cubit_msId_And_MeshSetType_mi_tag >, composite_key< CubitMeshSets, const_mem_fun< CubitMeshSets, int,&CubitMeshSets::getMeshsetId >, const_mem_fun< CubitMeshSets, unsigned long int,&CubitMeshSets::getMaksedBcTypeULong > > > >> CubitMeshSet_multiIndex
 Stores data about meshsets (see CubitMeshSets) storing data about boundary conditions, interfaces, sidesets, nodests, blocksets. More...
 
typedef multi_index_container< boost::shared_ptr< CoordSys >, indexed_by< ordered_unique< tag< Meshset_mi_tag >, member< CoordSys, EntityHandle,&CoordSys::meshSet > >, ordered_unique< tag< CoordSysName_mi_tag >, const_mem_fun< CoordSys, boost::string_ref,&CoordSys::getNameRef > > > > CoordSys_multiIndex
 
typedef DofEntity_multiIndex::index< FieldName_mi_tag >::type DofEntityByFieldName
 Dof multi-index by field name. More...
 
typedef DofEntity_multiIndex::index< Ent_mi_tag >::type DofEntityByEnt
 Dof multi-index by entity. More...
 
typedef DofEntity_multiIndex::index< Composite_Name_And_Ent_mi_tag >::type DofEntityByNameAndEnt
 Dof multi-index by field name and entity. More...
 
typedef DofEntity_multiIndex::index< Composite_Name_And_Type_mi_tag >::type DofEntityByNameAndType
 Dof multi-index by field name and entity type. More...
 
typedef multi_index_container< boost::shared_ptr< DofEntity >, indexed_by< ordered_unique< const_mem_fun< DofEntity, UId, &DofEntity::getGlobalUniqueId > > > > DofEntity_multiIndex_uid_view
 multi-index view on DofEntity by uid More...
 
typedef multi_index_container< boost::shared_ptr< DofEntity >, indexed_by< ordered_unique< const_mem_fun< DofEntity, UId, &DofEntity::getGlobalUniqueId > >, ordered_non_unique< const_mem_fun< DofEntity, char, &DofEntity::getActive > > > > DofEntity_multiIndex_active_view
 multi-index view on DofEntity activity More...
 
typedef multi_index_container< boost::shared_ptr< DofEntity >, indexed_by< ordered_non_unique< const_mem_fun< DofEntity, ApproximationOrder, &DofEntity::getDofOrder > > > > DofEntity_multiIndex_order_view
 multi-index view on DofEntity order More...
 
typedef multi_index_container< boost::shared_ptr< DofEntity >, indexed_by< ordered_non_unique< const_mem_fun< DofEntity::interface_type_RefEntity, EntityType, &DofEntity::getEntType > > > > DofEntity_multiIndex_ent_type_view
 multi-index view on DofEntity type More...
 
typedef FEDofEntity_multiIndex::index< FieldName_mi_tag >::type FEDofEntityByFieldName
 Finite element DoF multi-index by field name. More...
 
typedef FEDofEntity_multiIndex::index< Composite_Name_And_Ent_mi_tag >::type FEDofEntityByNameAndEnt
 Dof entity multi-index by field name and entity. More...
 
typedef FEDofEntity_multiIndex::index< Composite_Name_And_Type_mi_tag >::type FEDofEntityByNameAndType
 Dof entity multi-index by field name and entity type. More...
 
typedef FENumeredDofEntity_multiIndex::index< FieldName_mi_tag >::type FENumeredDofEntityByFieldName
 Finite element numbered DoF multi-index by field name. More...
 
typedef FENumeredDofEntity_multiIndex::index< Composite_Name_And_Ent_mi_tag >::type FENumeredDofEntityByNameAndEnt
 Dof entity multi-index by field name and entity. More...
 
typedef FENumeredDofEntity_multiIndex::index< Composite_Name_And_Type_mi_tag >::type FENumeredDofEntityByNameAndType
 Dof entity multi-index by field name and entity type. More...
 
typedef FENumeredDofEntity_multiIndex::index< Unique_mi_tag >::type FENumeredDofEntityByUId
 Dof entity multi-index by UId. More...
 
typedef FENumeredDofEntity_multiIndex::index< Ent_mi_tag >::type FENumeredDofEntityByEnt
 Numbered DoF multi-index by entity. More...
 
typedef NumeredDofEntity_multiIndex::index< FieldName_mi_tag >::type NumeredDofEntityByFieldName
 Numbered DoF multi-index by field name. More...
 
typedef NumeredDofEntity_multiIndex::index< Unique_mi_tag >::type NumeredDofEntityByUId
 Numbered DoF multi-index by UId. More...
 
typedef NumeredDofEntity_multiIndex::index< PetscLocalIdx_mi_tag >::type NumeredDofEntityByLocalIdx
 Numbered DoF multi-index by local index. More...
 
typedef NumeredDofEntity_multiIndex::index< Ent_mi_tag >::type NumeredDofEntityByEnt
 Numbered DoF multi-index by entity. More...
 
typedef NumeredDofEntity_multiIndex::index< Composite_Name_Ent_And_Part_mi_tag >::type NumeredDofEntityByNameEntAndPart
 Numbered DoF multi-index by name entity and partition. More...
 
typedef multi_index_container< boost::shared_ptr< NumeredDofEntity >, indexed_by< ordered_unique< const_mem_fun< NumeredDofEntity::interface_type_DofEntity, const UId, &NumeredDofEntity::getGlobalUniqueId > > > > NumeredDofEntity_multiIndex_uid_view_ordered
 
typedef multi_index_container< boost::shared_ptr< NumeredDofEntity >, indexed_by< hashed_unique< const_mem_fun< NumeredDofEntity, DofIdx, &NumeredDofEntity::getDofIdx > > > > NumeredDofEntity_multiIndex_idx_view_hashed
 
typedef multi_index_container< boost::shared_ptr< NumeredDofEntity >, indexed_by< ordered_non_unique< const_mem_fun< NumeredDofEntity, DofIdx, &NumeredDofEntity::getPetscLocalDofIdx > > > > NumeredDofEntity_multiIndex_petsc_local_dof_view_ordered_non_unique
 
typedef multi_index_container< boost::shared_ptr< NumeredDofEntity >, indexed_by< ordered_non_unique< const_mem_fun< NumeredDofEntity, DofIdx, &NumeredDofEntity::getPetscGlobalDofIdx > > > > NumeredDofEntity_multiIndex_petsc_global_dof_view_ordered_non_unique
 
typedef multi_index_container< boost::shared_ptr< NumeredDofEntity >, indexed_by< ordered_non_unique< const_mem_fun< NumeredDofEntity::interface_type_DofEntity, FieldCoefficientsNumber, &NumeredDofEntity::getDofCoeffIdx > > > > NumeredDofEntity_multiIndex_coeff_idx_ordered_non_unique
 
typedef multi_index_container< boost::shared_ptr< NumeredDofEntity >, indexed_by< ordered_unique< member< NumeredDofEntity, const DofIdx, &NumeredDofEntity::petscGloablDofIdx > > > > NumeredDofEntity_multiIndex_global_index_view
 
typedef multi_index_container< boost::shared_ptr< RefEntity >, indexed_by< ordered_unique< tag< Ent_mi_tag >, member< RefEntity::BasicEntity, EntityHandle, &RefEntity::ent > >, ordered_non_unique< tag< Ent_Ent_mi_tag >, const_mem_fun< RefEntity, EntityHandle, &RefEntity::getParentEnt > >, ordered_non_unique< tag< EntType_mi_tag >, const_mem_fun< RefEntity::BasicEntity, EntityType, &RefEntity::getEntType > >, ordered_non_unique< tag< ParentEntType_mi_tag >, const_mem_fun< RefEntity, EntityType, &RefEntity::getParentEntType > >, ordered_non_unique< tag< Composite_EntType_and_ParentEntType_mi_tag >, composite_key< RefEntity, const_mem_fun< RefEntity::BasicEntity, 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, EntityHandle, &RefEntity::getParentEnt >, const_mem_fun< RefEntity::BasicEntity, EntityType, &RefEntity::getEntType > > > > > RefEntity_multiIndex
 
typedef multi_index_container< boost::shared_ptr< RefEntity >, indexed_by< hashed_non_unique< const_mem_fun< RefEntity, EntityHandle, &RefEntity::getParentEnt > >, hashed_unique< tag< Composite_EntType_and_ParentEntType_mi_tag >, composite_key< boost::shared_ptr< RefEntity >, const_mem_fun< RefEntity, EntityHandle, &RefEntity::getRefEnt >, const_mem_fun< RefEntity, EntityHandle, &RefEntity::getParentEnt > > > > > RefEntity_multiIndex_view_by_parent_entity
 multi-index view of RefEntity by parent entity More...
 
typedef FieldEntity_multiIndex::index< FieldName_mi_tag >::type FieldEntityByFieldName
 Entity index by field name. More...
 
typedef multi_index_container< boost::shared_ptr< FieldEntity >, indexed_by< sequenced<>, ordered_non_unique< tag< Ent_mi_tag >, const_mem_fun< FieldEntity, EntityHandle, &FieldEntity::getEnt > > > > FieldEntity_multiIndex_ent_view
 
typedef interface_RefElement< RefElementptrWrapperRefElement
 
typedef multi_index_container< ptrWrapperRefElement, indexed_by< ordered_unique< tag< Ent_mi_tag >, const_mem_fun< ptrWrapperRefElement::interface_type_RefEntity, EntityHandle, &ptrWrapperRefElement::getRefEnt > >, ordered_non_unique< tag< Ent_Ent_mi_tag >, const_mem_fun< ptrWrapperRefElement::interface_type_RefEntity, EntityHandle, &ptrWrapperRefElement::getParentEnt > >, ordered_non_unique< tag< EntType_mi_tag >, const_mem_fun< ptrWrapperRefElement::interface_type_RefEntity, EntityType, &ptrWrapperRefElement::getEntType > >, ordered_non_unique< tag< Composite_ParentEnt_And_BitsOfRefinedEdges_mi_tag >, composite_key< ptrWrapperRefElement, const_mem_fun< ptrWrapperRefElement::interface_type_RefEntity, EntityHandle, &ptrWrapperRefElement::getParentEnt >, const_mem_fun< ptrWrapperRefElement::interface_type_RefElement, int, &ptrWrapperRefElement::getBitRefEdgesUlong > > >, hashed_unique< tag< Composite_EntType_and_ParentEntType_mi_tag >, composite_key< ptrWrapperRefElement, const_mem_fun< ptrWrapperRefElement::interface_type_RefEntity, EntityHandle, &ptrWrapperRefElement::getRefEnt >, const_mem_fun< ptrWrapperRefElement::interface_type_RefEntity, EntityHandle, &ptrWrapperRefElement::getParentEnt > > > > > RefElement_multiIndex
 
typedef boost::function< MoFEMErrorCode(Interface &moab, const Field &field_ptr, const EntFiniteElement &fe_ptr, Range &adjacency)> ElementAdjacencyFunct
 user adjacency function More...
 
typedef EntFiniteElement_multiIndex::index< FiniteElement_name_mi_tag >::type EntFiniteElementByName
 Entity finite element multi-index by finite element name. More...
 
typedef NumeredEntFiniteElement_multiIndex::index< FiniteElement_name_mi_tag >::type NumeredEntFiniteElementbyName
 Entity finite element multi-index by finite element name. More...
 
typedef NumeredEntFiniteElement_multiIndex::index< Composite_Name_And_Part_mi_tag >::type NumeredEntFiniteElementbyNameAndPart
 Entity finite element multi-index by finite element name and partition. More...
 
typedef int(* FieldOrderTable[MBMAXTYPE]) (const int order)
 user adjacency function table More...
 
typedef int(* FieldOrderFunct) (const int order)
 user adjacency function More...
 
typedef multi_index_container< boost::shared_ptr< Field >, indexed_by< ordered_unique< tag< BitFieldId_mi_tag >, const_mem_fun< Field, const BitFieldId &, &Field::getId >, LtBit< BitFieldId > > > > Field_multiIndex_view
 
typedef multi_index_container< FieldSeries, indexed_by< ordered_unique< tag< SeriesID_mi_tag >, const_mem_fun< FieldSeries, EntityID,&FieldSeries::get_meshset_id > >, ordered_unique< tag< SeriesName_mi_tag >, const_mem_fun< FieldSeries, boost::string_ref,&FieldSeries::getNameRef > > >> Series_multiIndex
 Series multi index. More...
 
typedef multi_index_container< FieldSeriesStep, indexed_by< ordered_unique< tag< Composite_SeriesID_And_Step_mi_tag >, composite_key< FieldSeriesStep, const_mem_fun< FieldSeriesStep::interface_type_FieldSeries, EntityID, &FieldSeriesStep::get_meshset_id >, member< FieldSeriesStep, int,&FieldSeriesStep::step_number > > >, ordered_unique< tag< Composite_SeriesName_And_Step_mi_tag >, composite_key< FieldSeriesStep, const_mem_fun< FieldSeriesStep::interface_type_FieldSeries, boost::string_ref, &FieldSeriesStep::getNameRef >, member< FieldSeriesStep, int,&FieldSeriesStep::step_number > > >, ordered_non_unique< tag< SeriesName_mi_tag >, const_mem_fun< FieldSeriesStep::interface_type_FieldSeries, boost::string_ref, &FieldSeriesStep::getNameRef > >, ordered_non_unique< tag< Composite_SeriesName_And_Time_mi_tag >, composite_key< FieldSeriesStep, const_mem_fun< FieldSeriesStep::interface_type_FieldSeries, boost::string_ref, &FieldSeriesStep::getNameRef >, const_mem_fun< FieldSeriesStep, double,&FieldSeriesStep::get_time > > > >> SeriesStep_multiIndex
 Step multi index. More...
 
typedef std::vector< PairNameFEMethodPtrFEMethodsSequence
 
typedef std::vector< BasicMethodPtrBasicMethodsSequence
 

Functions

template<class X >
std::string toString (X x)
 
PetscErrorCode PetscOptionsGetInt (PetscOptions *, const char pre[], const char name[], PetscInt *ivalue, PetscBool *set)
 
PetscErrorCode PetscOptionsGetReal (PetscOptions *, const char pre[], const char name[], PetscReal *dval, PetscBool *set)
 
PetscErrorCode PetscOptionsGetScalar (PetscOptions *, const char pre[], const char name[], PetscScalar *dval, PetscBool *set)
 
PetscErrorCode PetscOptionsGetString (PetscOptions *, const char pre[], const char name[], char str[], size_t size, PetscBool *set)
 
PetscErrorCode PetscOptionsGetBool (PetscOptions *, const char pre[], const char name[], PetscBool *bval, PetscBool *set)
 
PetscErrorCode PetscOptionsGetRealArray (PetscOptions *, const char pre[], const char name[], PetscReal dval[], PetscInt *nmax, PetscBool *set)
 
PetscErrorCode PetscOptionsGetEList (PetscOptions *, const char pre[], const char name[], const char *const *list, PetscInt next, PetscInt *value, PetscBool *set)
 
PetscErrorCode PetscOptionsGetIntArray (PetscOptions options, const char pre[], const char name[], PetscInt dvalue[], PetscInt *nmax, PetscBool *set)
 
PetscErrorCode PetscOptionsGetScalarArray (PetscOptions options, const char pre[], const char name[], PetscScalar dvalue[], PetscInt *nmax, PetscBool *set)
 
void tet_type_6 (moab::Interface &moab, const EntityHandle *conn, const EntityHandle *edge_new_nodes, EntityHandle *new_tets_conn)
 
int tet_type_5 (moab::Interface &moab, const EntityHandle *conn, const EntityHandle *edge_new_nodes, EntityHandle *new_tets_conn)
 
int tet_type_4 (const EntityHandle *conn, const int *split_edges, const EntityHandle *edge_new_nodes, EntityHandle *new_tets_conn)
 
int tet_type_3 (const EntityHandle *conn, const int *split_edges, const EntityHandle *edge_new_nodes, EntityHandle *new_tets_conn)
 
int tet_type_2 (const EntityHandle *conn, const int *split_edges, const EntityHandle *edge_new_nodes, EntityHandle *new_tets_conn)
 
void tet_type_1 (const EntityHandle *conn, const int split_edge, const EntityHandle edge_new_node, EntityHandle *new_tets_conn)
 
MoFEMErrorCode tri_type_3 (const EntityHandle *conn, const BitRefEdges split_edges, const EntityHandle *edge_new_nodes, EntityHandle *new_tris_conn)
 
MoFEMErrorCode prism_type_1 (const EntityHandle *conn, const BitRefEdges split_edges, const EntityHandle *edge_new_nodes, EntityHandle *new_prism_conn)
 
MoFEMErrorCode prism_type_2 (const EntityHandle *conn, const BitRefEdges split_edges, const EntityHandle *edge_new_nodes, EntityHandle *new_prism_conn)
 
MoFEMErrorCode prism_type_3 (const EntityHandle *conn, const BitRefEdges split_edges, const EntityHandle *edge_new_nodes, EntityHandle *new_prism_conn)
 
MoFEMErrorCode Hcurl_EdgeBaseFunctions_MBTET (int *sense, int *p, double *N, double *diffN, double *edgeN[], double *diff_edgeN[], int nb_integration_pts, PetscErrorCode(*base_polynomials)(int p, double s, double *diff_s, double *L, double *diffL, const int dim))
 Edge based H-curl base functions on tetrahedral. More...
 
MoFEMErrorCode Hcurl_EdgeBaseFunctions_MBTET_ON_EDGE (int sense, int p, double *N, double *diffN, double *edgeN, double *diff_edgeN, int nb_integration_pts, PetscErrorCode(*base_polynomials)(int p, double s, double *diff_s, double *L, double *diffL, const int dim))
 Edge based H-curl base functions on edge. More...
 
MoFEMErrorCode Hcurl_EdgeBaseFunctions_MBTET_ON_FACE (int *sense, int *p, double *N, double *diffN, double *edgeN[], double *diff_edgeN[], int nb_integration_pts, PetscErrorCode(*base_polynomials)(int p, double s, double *diff_s, double *L, double *diffL, const int dim))
 Edge based H-curl base functions on face. More...
 
MoFEMErrorCode Hcurl_EdgeBasedFaceFunctions_MBTET (int *faces_nodes, int *p, double *N, double *diffN, double *phi_f_e[4][3], double *diff_phi_f_e[4][3], int nb_integration_pts, PetscErrorCode(*base_polynomials)(int p, double s, double *diff_s, double *L, double *diffL, const int dim))
 Face edge base functions of Hcurl space on tetrahedral. More...
 
MoFEMErrorCode Hcurl_EdgeBasedFaceFunctions_MBTET_ON_FACE (int *faces_nodes, int p, double *N, double *diffN, double *phi_f_e[3], double *diff_phi_f_e[3], int nb_integration_pts, PetscErrorCode(*base_polynomials)(int p, double s, double *diff_s, double *L, double *diffL, const int dim))
 Face edge base functions of Hcurl space. More...
 
MoFEMErrorCode Hcurl_BubbleFaceFunctions_MBTET (int *faces_nodes, int *p, double *N, double *diffN, double *phi_f[4], double *diff_phi_f[4], int nb_integration_pts, PetscErrorCode(*base_polynomials)(int p, double s, double *diff_s, double *L, double *diffL, const int dim))
 Face edge base functions of Hcurl space on face on tetrahedral. More...
 
MoFEMErrorCode Hcurl_BubbleFaceFunctions_MBTET_ON_FACE (int *faces_nodes, int p, double *N, double *diffN, double *phi_f, double *diff_phi_f, int nb_integration_pts, PetscErrorCode(*base_polynomials)(int p, double s, double *diff_s, double *L, double *diffL, const int dim))
 Face edge base functions of Hcurl space on face. More...
 
MoFEMErrorCode Hcurl_FaceInteriorFunctions_MBTET (int *faces_nodes, int p, double *N, double *diffN, double *phi_v, double *diff_phi_v, int nb_integration_pts, PetscErrorCode(*base_polynomials)(int p, double s, double *diff_s, double *L, double *diffL, const int dim))
 Face base interior function. More...
 
MoFEMErrorCode Hcurl_VolumeInteriorFunctions_MBTET (int p, double *N, double *diffN, double *phi_v, double *diff_phi_v, int nb_integration_pts, PetscErrorCode(*base_polynomials)(int p, double s, double *diff_s, double *L, double *diffL, const int dim))
 Volume interior function. More...
 
MoFEMErrorCode Hcurl_FaceFunctions_MBTET (int *face_nodes, int *p, double *N, double *diffN, double *phi_f[4], double *diff_phi_f[4], int nb_integration_pts, PetscErrorCode(*base_polynomials)(int p, double s, double *diff_s, double *L, double *diffL, const int dim))
 Face H-curl functions. More...
 
MoFEMErrorCode Hcurl_FaceFunctions_MBTET_ON_FACE (int *faces_nodes, int p, double *N, double *diffN, double *phi_f, double *diff_phi_f, int nb_integration_pts, PetscErrorCode(*base_polynomials)(int p, double s, double *diff_s, double *L, double *diffL, const int dim))
 Face H-curl functions. More...
 
MoFEMErrorCode Hcurl_VolumeFunctions_MBTET (int p, double *N, double *diffN, double *phi_v, double *diff_phi_v, int nb_integration_pts, PetscErrorCode(*base_polynomials)(int p, double s, double *diff_s, double *L, double *diffL, const int dim))
 H-curl volume base functions. More...
 
MoFEMErrorCode Hdiv_Ainsworth_EdgeFaceShapeFunctions_MBTET (int *faces_nodes, int *p, double *N, double *diffN, double *phi_f_e[4][3], double *diff_phi_f_e[4][3], int gdim, PetscErrorCode(*base_polynomials)(int p, double s, double *diff_s, double *L, double *diffL, const int dim))
 Hdiv base functions, Edge-based face functions by Ainsworth [1]. More...
 
MoFEMErrorCode Hdiv_Ainsworth_EdgeFaceShapeFunctions_MBTET_ON_FACE (int *faces_nodes, int p, double *N, double *diffN, double *phi_f_e[3], double *diff_phi_f_e[3], int gdim, int nb, PetscErrorCode(*base_polynomials)(int p, double s, double *diff_s, double *L, double *diffL, const int dim))
 Hdiv base functions, Edge-based face functions by Ainsworth [1]. More...
 
MoFEMErrorCode Hdiv_Ainsworth_FaceBubbleShapeFunctions (int *faces_nodes, int *p, double *N, double *diffN, double *phi_f[], double *diff_phi_f[], int gdim, PetscErrorCode(*base_polynomials)(int p, double s, double *diff_s, double *L, double *diffL, const int dim))
 Face bubble functions by Ainsworth [1]. More...
 
MoFEMErrorCode Hdiv_Ainsworth_FaceBubbleShapeFunctions_ON_FACE (int *faces_nodes, int p, double *N, double *diffN, double *phi_f, double *diff_phi_f, int gdim, int nb, PetscErrorCode(*base_polynomials)(int p, double s, double *diff_s, double *L, double *diffL, const int dim))
 Face bubble functions by Ainsworth [1]. More...
 
MoFEMErrorCode Hdiv_Ainsworth_EdgeBasedVolumeShapeFunctions_MBTET (int p, double *N, double *diffN, double *phi_v_e[6], double *diff_phi_v_e[6], int gdim, PetscErrorCode(*base_polynomials)(int p, double s, double *diff_s, double *L, double *diffL, const int dim))
 Hdiv base function, Edge-based interior (volume) functions by Ainsworth [1]. More...
 
MoFEMErrorCode Hdiv_Ainsworth_FaceBasedVolumeShapeFunctions_MBTET (int p, double *N, double *diffN, double *phi_v_f[], double *diff_phi_v_f[], int gdim, PetscErrorCode(*base_polynomials)(int p, double s, double *diff_s, double *L, double *diffL, const int dim))
 
MoFEMErrorCode Hdiv_Ainsworth_VolumeBubbleShapeFunctions_MBTET (int p, double *N, double *diffN, double *phi_v, double *diff_phi_v, int gdim, PetscErrorCode(*base_polynomials)(int p, double s, double *diff_s, double *L, double *diffL, const int dim))
 Interior bubble functions by Ainsworth [1]. More...
 
MoFEMErrorCode Hdiv_Demkowicz_Face_MBTET_ON_FACE (int *faces_nodes, int p, double *N, double *diffN, double *phi_f, double *diff_phi_f, int gdim, int nb)
 
MoFEMErrorCode Hdiv_Demkowicz_Interior_MBTET (int p, double *N, double *diffN, int p_face[], double *phi_f[4], double *diff_phi_f[4], double *phi_v, double *diff_phi_v, int gdim)
 
void tet_type_6 (Interface &moab, const EntityHandle *conn, const EntityHandle *edge_new_nodes, EntityHandle *new_tets_conn)
 
int tet_type_5 (Interface &moab, const EntityHandle *conn, const EntityHandle *edge_new_nodes, EntityHandle *new_tets_conn)
 
template<int Tensor_Dim, class T , class L , class A >
MoFEMErrorCode invertTensor3by3 (ublas::matrix< T, L, A > &jac_data, ublas::vector< T, A > &det_data, ublas::matrix< T, L, A > &inv_jac_data)
 Calculate inverse of tensor rank 2 at integration points. More...
 
template<>
MoFEMErrorCode invertTensor3by3< 3, double, ublas::row_major, DoubleAllocator > (MatrixDouble &jac_data, VectorDouble &det_data, MatrixDouble &inv_jac_data)
 
template<class T1 , class T2 >
MoFEMErrorCode determinantTensor3by3 (T1 &t, T2 &det)
 Calculate determinant. More...
 
template<class T1 , class T2 , class T3 >
MoFEMErrorCode invertTensor3by3 (T1 &t, T2 &det, T3 &inv_t)
 Calculate matrix inverse. More...
 
template<class T , class A >
FTensor::Tensor0< T * > getTensor0FormData (ublas::vector< T, A > &data)
 Get tensor rank 0 (scalar) form data vectorExample how to use it. More...
 
template<>
FTensor::Tensor0< double * > getTensor0FormData< double, DoubleAllocator > (ublas::vector< double, DoubleAllocator > &data)
 
template<int Tensor_Dim, class T , class L , class A >
FTensor::Tensor1< T *, Tensor_Dim > getTensor1FormData (ublas::matrix< T, L, A > &data)
 Get tensor rank 1 (vector) form data matrix. More...
 
template<int Tensor_Dim>
FTensor::Tensor1< double *, Tensor_Dim > getTensor1FormData (MatrixDouble &data)
 Get tensor rank 1 (vector) form data matrix (specialization) More...
 
template<>
FTensor::Tensor1< double *, 3 > getTensor1FormData< 3, double, ublas::row_major, DoubleAllocator > (MatrixDouble &data)
 
template<>
FTensor::Tensor1< double *, 2 > getTensor1FormData< 2, double, ublas::row_major, DoubleAllocator > (MatrixDouble &data)
 
template<int Tensor_Dim0, int Tensor_Dim1, class T , class L , class A >
FTensor::Tensor2< T *, Tensor_Dim0, Tensor_Dim1 > getTensor2FormData (ublas::matrix< T, L, A > &data)
 Get tensor rank 2 (matrix) form data matrix. More...
 
template<>
FTensor::Tensor2< double *, 3, 3 > getTensor2FormData (MatrixDouble &data)
 Get tensor rank 2 (matrix) form data matrix (specialization) More...
 
template<>
FTensor::Tensor2< double *, 3, 2 > getTensor2FormData (MatrixDouble &data)
 Get tensor rank 2 (matrix) form data matrix (specialization) More...
 
template<int Tensor_Dim0, int Tensor_Dim1>
FTensor::Tensor2< double *, Tensor_Dim0, Tensor_Dim1 > getTensor2FormData (MatrixDouble &data)
 Get tensor rank 2 (matrix) form data matrix (specialization) More...
 
template<>
FTensor::Tensor2< double *, 3, 3 > getTensor2FormData< 3, 3, double, ublas::row_major, DoubleAllocator > (MatrixDouble &data)
 
template<>
FTensor::Tensor2< double *, 3, 2 > getTensor2FormData< 3, 2, double, ublas::row_major, DoubleAllocator > (MatrixDouble &data)
 
template<class T >
void cOnstructor (DataForcesAndSourcesCore *data, EntityType type, T)
 
std::ostream & operator<< (std::ostream &os, const DataForcesAndSourcesCore::EntData &e)
 
std::ostream & operator<< (std::ostream &os, const DataForcesAndSourcesCore &e)
 
template<typename DOFMULTIINDEX >
static int getMaxOrder (const DOFMULTIINDEX &dof_multi_index)
 
static MoFEMErrorCode get_porblem_row_indices (const ForcesAndSourcesCore *fe_ptr, const EntityType type, const int side, const std::string field_name, VectorInt &indices)
 
static MoFEMErrorCode get_porblem_col_indices (const ForcesAndSourcesCore *fe_ptr, const EntityType type, const int side, const std::string field_name, VectorInt &indices)
 
static med_geometrie_element moab2med_element_type (const EntityType type)
 
std::ostream & operator<< (std::ostream &os, const MedInterface::FieldData &field_data)
 
int fNBENTITY_GENERIC (int P)
 
int fNBENTITYSET_NOFIELD (int P)
 
int fNBVERTEX_L2 (int P)
 
int fNBVOLUMETET_L2 (int P)
 
int fNBFACETRI_L2 (int P)
 
int fNBEDGE_L2 (int P)
 
int fNBVERTEX_H1 (int P)
 number of approx. functions for H1 space on vertex More...
 
int fNBEDGE_H1 (int P)
 number of approx. functions for H1 space on edge More...
 
int fNBFACETRI_H1 (int P)
 number of approx. functions for H1 space on face More...
 
int fNBFACEQUAD_H1 (int P)
 
int fNBVOLUMETET_H1 (int P)
 number of approx. functions for H1 space on volume More...
 
int fNBVOLUMEPRISM_H1 (int P)
 
int fNBVERTEX_HCURL (int P)
 number of approx. functions for HCURL space on vertex More...
 
int fNBEDGE_HCURL (int P)
 
int fNBFACETRI_HCURL (int P)
 
int fNBVOLUMETET_HCURL (int P)
 
int fNBVERTEX_HDIV (int P)
 number of approx. functions for HDIV space on vertex More...
 
int fNBEDGE_HDIV (int P)
 number of approx. functions for HDIV space on edge More...
 
int fNBFACETRI_AINSWORTH_HDIV (int P)
 number of approx. functions for HDIV space on face More...
 
int fNBVOLUMETET_AINSWORTH_HDIV (int P)
 number of approx. functions for HDIV space on volume More...
 
int fNBFACETRI_DEMKOWICZ_HDIV (int P)
 
int fNBVOLUMETET_DEMKOWICZ_HDIV (int P)
 number of approx. functions for HDIV space on volume More...
 
MoFEMErrorCode test_moab (Interface &moab, const EntityHandle ent)
 Test MoAB entity handle if has structure as is assumed by MoFEM. More...
 
struct __attribute__ ((__packed__)) SideNumber
 keeps information about side number for the finite element More...
 
std::ostream & operator<< (std::ostream &os, const CubitMeshSets &e)
 
std::ostream & operator<< (std::ostream &os, const DisplacementCubitBcData &e)
 
std::ostream & operator<< (std::ostream &os, const ForceCubitBcData &e)
 
std::ostream & operator<< (std::ostream &os, const VelocityCubitBcData &e)
 
std::ostream & operator<< (std::ostream &os, const AccelerationCubitBcData &e)
 
std::ostream & operator<< (std::ostream &os, const TemperatureCubitBcData &e)
 
std::ostream & operator<< (std::ostream &os, const PressureCubitBcData &e)
 
std::ostream & operator<< (std::ostream &os, const HeatFluxCubitBcData &e)
 
std::ostream & operator<< (std::ostream &os, const CfgCubitBcData &e)
 
std::ostream & operator<< (std::ostream &os, const BlockSetAttributes &e)
 
std::ostream & operator<< (std::ostream &os, const Mat_Elastic &e)
 
std::ostream & operator<< (std::ostream &os, const Mat_Elastic_EberleinHolzapfel1 &e)
 
std::ostream & operator<< (std::ostream &os, const Mat_Thermal &e)
 
std::ostream & operator<< (std::ostream &os, const Mat_Moisture &e)
 
std::ostream & operator<< (std::ostream &os, const Block_BodyForces &e)
 
std::ostream & operator<< (std::ostream &os, const Mat_Elastic_TransIso &e)
 
std::ostream & operator<< (std::ostream &os, const Mat_Interf &e)
 
std::ostream & operator<< (std::ostream &os, const Field &e)
 
std::ostream & operator<< (std::ostream &os, const FieldEntityEntFiniteElementAdjacencyMap &e)
 
std::ostream & operator<< (std::ostream &os, const DofEntity &e)
 
std::ostream & operator<< (std::ostream &os, const NumeredDofEntity &e)
 
std::ostream & operator<< (std::ostream &os, const FEDofEntity &e)
 
std::ostream & operator<< (std::ostream &os, const FENumeredDofEntity &e)
 
void * get_tag_ptr (SequenceManager *sequence_manager, Tag th, EntityHandle ent, int *tag_size)
 
MoFEMErrorCode getParentEnt (Interface &moab, Range ents, std::vector< EntityHandle > vec_patent_ent)
 
std::ostream & operator<< (std::ostream &os, const RefEntity &e)
 
std::ostream & operator<< (std::ostream &os, const FieldEntity &e)
 
std::ostream & operator<< (std::ostream &os, const RefElement &e)
 
std::ostream & operator<< (std::ostream &os, const RefElement_TET &e)
 
std::ostream & operator<< (std::ostream &os, const RefElement_TRI &e)
 
std::ostream & operator<< (std::ostream &os, const RefElement_EDGE &e)
 
std::ostream & operator<< (std::ostream &os, const RefElement_VERTEX &e)
 
std::ostream & operator<< (std::ostream &os, const FiniteElement &e)
 
std::ostream & operator<< (std::ostream &os, const EntFiniteElement &e)
 
template<typename FE_DOFS , typename MOFEM_DOFS , typename MOFEM_DOFS_VIEW >
static MoFEMErrorCode get_fe_dof_view (const FE_DOFS &fe_dofs_view, const MOFEM_DOFS &mofem_dofs, MOFEM_DOFS_VIEW &mofem_dofs_view, const int operation_type)
 
std::ostream & operator<< (std::ostream &os, const Problem &e)
 
std::ostream & operator<< (std::ostream &os, const FieldSeries &e)
 
std::ostream & operator<< (std::ostream &os, const FieldSeriesStep &e)
 
PetscErrorCode DMRegister_MoFEM (const char sname[])
 Register MoFEM problem. More...
 
PetscErrorCode DMMoFEMCreateMoFEM (DM dm, MoFEM::Interface *m_field_ptr, const char problem_name[], const MoFEM::BitRefLevel bit_level, const MoFEM::BitRefLevel bit_mask=MoFEM::BitRefLevel().set())
 Must be called by user to set MoFEM data structures. More...
 
PetscErrorCode DMMoFEMCreateSubDM (DM subdm, DM dm, const char problem_name[])
 Must be called by user to set Sub DM MoFEM data structures. More...
 
PetscErrorCode DMoFEMGetInterfacePtr (DM dm, MoFEM::Interface **m_field_ptr)
 Get pointer to MoFEM::Interface. More...
 
PetscErrorCode DMMoFEMGetProblemPtr (DM dm, const MoFEM::Problem **problem_ptr)
 Get pointer to problem data structure. More...
 
PetscErrorCode DMMoFEMSetDestroyProblem (DM dm, PetscBool destroy_problem)
 
PetscErrorCode DMMoFEMGetDestroyProblem (DM dm, PetscBool *destroy_problem)
 
PetscErrorCode DMMoFEMSetSquareProblem (DM dm, PetscBool square_problem)
 set squared problemIt if true is assumed that matrix has the same indexing on rows and columns. This reduces interprocessor communication. More...
 
PetscErrorCode DMMoFEMGetSquareProblem (DM dm, PetscBool *square_problem)
 get squared problemIt if true is assumed that matrix has the same indexing on rows and columns. This reduces interprocessor communication. More...
 
PetscErrorCode DMMoFEMResolveSharedEntities (DM dm, const char fe_name[])
 Resolve shared entities. More...
 
PetscErrorCode DMMoFEMGetProblemFiniteElementLayout (DM dm, const char fe_name[], PetscLayout *layout)
 Get finite elements layout in the problem. More...
 
PetscErrorCode DMMoFEMAddElement (DM dm, const char fe_name[])
 add element to dm More...
 
PetscErrorCode DMMoFEMUnSetElement (DM dm, const char fe_name[])
 unset element from dm More...
 
PetscErrorCode DMoFEMMeshToLocalVector (DM dm, Vec l, InsertMode mode, ScatterMode scatter_mode)
 set local (or ghosted) vector values on mesh for partition only More...
 
PetscErrorCode DMoFEMMeshToGlobalVector (DM dm, Vec g, InsertMode mode, ScatterMode scatter_mode)
 set ghosted vector values on all existing mesh entities More...
 
PetscErrorCode DMoFEMPreProcessFiniteElements (DM dm, MoFEM::FEMethod *method)
 execute finite element method for each element in dm (problem) More...
 
PetscErrorCode DMoFEMPostProcessFiniteElements (DM dm, MoFEM::FEMethod *method)
 execute finite element method for each element in dm (problem) More...
 
PetscErrorCode DMoFEMLoopFiniteElementsUpAndLowRank (DM dm, const char fe_name[], MoFEM::FEMethod *method, int low_rank, int up_rank)
 Executes FEMethod for finite elements in DM. More...
 
PetscErrorCode DMoFEMLoopFiniteElementsUpAndLowRank (DM dm, const std::string &fe_name, boost::shared_ptr< MoFEM::FEMethod > method, int low_rank, int up_rank)
 Executes FEMethod for finite elements in DM. More...
 
PetscErrorCode DMoFEMLoopFiniteElements (DM dm, const char fe_name[], MoFEM::FEMethod *method)
 Executes FEMethod for finite elements in DM. More...
 
PetscErrorCode DMoFEMLoopFiniteElements (DM dm, const std::string &fe_name, boost::shared_ptr< MoFEM::FEMethod > method)
 Executes FEMethod for finite elements in DM. More...
 
PetscErrorCode DMoFEMLoopDofs (DM dm, const char field_name[], MoFEM::EntMethod *method)
 execute method for dofs on field in problem More...
 
PetscErrorCode DMMoFEMKSPSetComputeRHS (DM dm, const char fe_name[], MoFEM::FEMethod *method, MoFEM::FEMethod *pre_only, MoFEM::FEMethod *post_only)
 Set compute operator for KSP solver via sub-matrix and IS. More...
 
PetscErrorCode DMMoFEMKSPSetComputeRHS (DM dm, const std::string &fe_name, boost::shared_ptr< MoFEM::FEMethod > method, boost::shared_ptr< MoFEM::FEMethod > pre_only, boost::shared_ptr< MoFEM::FEMethod > post_only)
 set KSP right hand side evaluation function More...
 
PetscErrorCode DMMoFEMKSPSetComputeOperators (DM dm, const char fe_name[], MoFEM::FEMethod *method, MoFEM::FEMethod *pre_only, MoFEM::FEMethod *post_only)
 Set KSP operators and push mofem finite element methods. More...
 
PetscErrorCode DMMoFEMKSPSetComputeOperators (DM dm, const std::string &fe_name, boost::shared_ptr< MoFEM::FEMethod > method, boost::shared_ptr< MoFEM::FEMethod > pre_only, boost::shared_ptr< MoFEM::FEMethod > post_only)
 Set KSP operators and push mofem finite element methods. More...
 
PetscErrorCode DMMoFEMSNESSetFunction (DM dm, const char fe_name[], MoFEM::FEMethod *method, MoFEM::FEMethod *pre_only, MoFEM::FEMethod *post_only)
 set SNES residual evaluation function More...
 
PetscErrorCode DMMoFEMSNESSetFunction (DM dm, const std::string &fe_name, boost::shared_ptr< MoFEM::FEMethod > method, boost::shared_ptr< MoFEM::FEMethod > pre_only, boost::shared_ptr< MoFEM::FEMethod > post_only)
 set SNES residual evaluation function More...
 
PetscErrorCode DMMoFEMSNESSetJacobian (DM dm, const char fe_name[], MoFEM::FEMethod *method, MoFEM::FEMethod *pre_only, MoFEM::FEMethod *post_only)
 set SNES Jacobian evaluation function More...
 
PetscErrorCode DMMoFEMSNESSetJacobian (DM dm, const std::string &fe_name, boost::shared_ptr< MoFEM::FEMethod > method, boost::shared_ptr< MoFEM::FEMethod > pre_only, boost::shared_ptr< MoFEM::FEMethod > post_only)
 set SNES Jacobian evaluation function More...
 
PetscErrorCode DMMoFEMTSSetIFunction (DM dm, const char fe_name[], MoFEM::FEMethod *method, MoFEM::FEMethod *pre_only, MoFEM::FEMethod *post_only)
 set TS implicit function evaluation function More...
 
PetscErrorCode DMMoFEMTSSetIFunction (DM dm, const std::string &fe_name, boost::shared_ptr< MoFEM::FEMethod > method, boost::shared_ptr< MoFEM::FEMethod > pre_only, boost::shared_ptr< MoFEM::FEMethod > post_only)
 set TS implicit function evaluation function More...
 
PetscErrorCode DMMoFEMTSSetIJacobian (DM dm, const std::string &fe_name, boost::shared_ptr< MoFEM::FEMethod > method, boost::shared_ptr< MoFEM::FEMethod > pre_only, boost::shared_ptr< MoFEM::FEMethod > post_only)
 set TS Jacobian evaluation function More...
 
PetscErrorCode DMMoFEMTSSetIJacobian (DM dm, const char fe_name[], MoFEM::FEMethod *method, MoFEM::FEMethod *pre_only, MoFEM::FEMethod *post_only)
 set TS Jacobian evaluation function More...
 
PetscErrorCode DMMoFEMGetKspCtx (DM dm, MoFEM::KspCtx **ksp_ctx)
 get MoFEM::KspCtx data structure More...
 
PetscErrorCode DMMoFEMGetKspCtx (DM dm, const boost::shared_ptr< MoFEM::KspCtx > &ksp_ctx)
 get MoFEM::KspCtx data structure More...
 
PetscErrorCode DMMoFEMSetKspCtx (DM dm, boost::shared_ptr< MoFEM::KspCtx > &ksp_ctx)
 set MoFEM::KspCtx data structure More...
 
PetscErrorCode DMMoFEMGetSnesCtx (DM dm, MoFEM::SnesCtx **snes_ctx)
 get MoFEM::SnesCtx data structure More...
 
PetscErrorCode DMMoFEMGetSnesCtx (DM dm, const boost::shared_ptr< MoFEM::SnesCtx > &snes_ctx)
 get MoFEM::SnesCtx data structure More...
 
PetscErrorCode DMMoFEMSetSnesCtx (DM dm, boost::shared_ptr< MoFEM::SnesCtx > &snes_ctx)
 Set MoFEM::SnesCtx data structure. More...
 
PetscErrorCode DMMoFEMGetTsCtx (DM dm, MoFEM::TsCtx **ts_ctx)
 get MoFEM::TsCtx data structure More...
 
PetscErrorCode DMMoFEMGetTsCtx (DM dm, const boost::shared_ptr< MoFEM::TsCtx > &ts_ctx)
 get MoFEM::TsCtx data structure More...
 
PetscErrorCode DMMoFEMSetTsCtx (DM dm, boost::shared_ptr< MoFEM::TsCtx > &ts_ctx)
 Set MoFEM::TsCtx data structureIt take over pointer, do not delete it, DM will destroy pointer when is destroyed. More...
 
PetscErrorCode DMMoFEMSetIsPartitioned (DM dm, PetscBool is_partitioned)
 
PetscErrorCode DMMoFEMGetIsPartitioned (DM dm, PetscBool *is_partitioned)
 
PetscErrorCode DMSetOperators_MoFEM (DM dm)
 Set operators for MoFEM dm. More...
 
PetscErrorCode DMCreate_MoFEM (DM dm)
 Create dm data structure with MoFEM data structure. More...
 
PetscErrorCode DMDestroy_MoFEM (DM dm)
 Destroys dm with MoFEM data structure. More...
 
PetscErrorCode DMCreateGlobalVector_MoFEM (DM dm, Vec *g)
 DMShellSetCreateGlobalVectorsets the routine to create a global vector associated with the shell DM. More...
 
PetscErrorCode DMCreateLocalVector_MoFEM (DM dm, Vec *l)
 DMShellSetCreateLocalVectorsets the routine to create a local vector associated with the shell DM. More...
 
PetscErrorCode DMCreateMatrix_MoFEM (DM dm, Mat *M)
 
PetscErrorCode DMSetFromOptions_MoFEM (DM dm)
 
PetscErrorCode DMSetUp_MoFEM (DM dm)
 
PetscErrorCode DMSubDMSetUp_MoFEM (DM subdm)
 
PetscErrorCode DMMoFEMAddSubFieldRow (DM dm, const char field_name[])
 
PetscErrorCode DMMoFEMAddSubFieldCol (DM dm, const char field_name[])
 
PetscErrorCode DMMoFEMGetIsSubDM (DM dm, PetscBool *is_sub_dm)
 
PetscErrorCode DMMoFEMGetSubRowIS (DM dm, IS *is)
 get sub problem is More...
 
PetscErrorCode DMMoFEMGetSubColIS (DM dm, IS *is)
 get sub problem is More...
 
PetscErrorCode DMMoFEMAddRowCompositeProblem (DM dm, const char prb_name[])
 Add problem to composite DM on rowThis create block on row with DOFs from problem of given name. More...
 
PetscErrorCode DMMoFEMAddColCompositeProblem (DM dm, const char prb_name[])
 Add problem to composite DM on colThis create block on col with DOFs from problem of given name. More...
 
PetscErrorCode DMMoFEMGetIsCompDM (DM dm, PetscBool *is_comp_dm)
 Get if this DM is composite DM. More...
 
PetscErrorCode DMGlobalToLocalBegin_MoFEM (DM dm, Vec, InsertMode, Vec)
 
PetscErrorCode DMGlobalToLocalEnd_MoFEM (DM dm, Vec, InsertMode, Vec)
 
PetscErrorCode DMLocalToGlobalBegin_MoFEM (DM, Vec, InsertMode, Vec)
 
PetscErrorCode DMLocalToGlobalEnd_MoFEM (DM, Vec, InsertMode, Vec)
 
PetscErrorCode DMCreateFieldIS_MoFEM (DM dm, PetscInt *numFields, char ***fieldNames, IS **fields)
 
PetscErrorCode DMMoFEMGetFieldIS (DM dm, RowColData rc, const char field_name[], IS *is)
 get field is in the problem More...
 
template<class S , class T >
static PetscErrorCode DMMoFEMKSPSetComputeRHS (DM dm, S fe_name, T method, T pre_only, T post_only)
 
template<class S , class T >
static PetscErrorCode DMMoFEMKSPSetComputeOperators (DM dm, S fe_name, T method, T pre_only, T post_only)
 
template<class S , class T >
static PetscErrorCode DMMoFEMSNESSetFunction (DM dm, S fe_name, T method, T pre_only, T post_only)
 
template<class S , class T >
static PetscErrorCode DMMoFEMSNESSetJacobian (DM dm, S fe_name, T method, T pre_only, T post_only)
 
template<class S , class T >
static PetscErrorCode DMMoFEMTSSetIFunction (DM dm, S fe_name, T method, T pre_only, T post_only)
 
template<class S , class T >
static PetscErrorCode DMMoFEMTSSetIJacobian (DM dm, S fe_name, T method, T pre_only, T post_only)
 
PetscErrorCode KspRhs (KSP ksp, Vec f, void *ctx)
 Run over elements in the lists. More...
 
PetscErrorCode KspMat (KSP ksp, Mat A, Mat B, void *ctx)
 Run over elenents in the list. More...
 
PetscErrorCode SnesRhs (SNES snes, Vec x, Vec f, void *ctx)
 This is MoFEM implementation for the right hand side (residual vector) evaluation in SNES solver. More...
 
PetscErrorCode SnesMat (SNES snes, Vec x, Mat A, Mat B, void *ctx)
 This is MoFEM implementation for the left hand side (tangent matrix) evaluation in SNES solver. More...
 
MoFEMErrorCode SNESMoFEMSetAssmblyType (SNES snes, MatAssemblyType type)
 Set assembly type at the end of SnesMat. More...
 
MoFEMErrorCode SNESMoFEMSetBehavior (SNES snes, MoFEMTypes bh)
 Set behavior if finite element in sequence does not exist. More...
 
PetscErrorCode f_TSSetIFunction (TS ts, PetscReal t, Vec u, Vec u_t, Vec F, void *ctx)
 
PetscErrorCode f_TSSetIJacobian (TS ts, PetscReal t, Vec u, Vec u_t, PetscReal a, Mat A, Mat B, void *ctx)
 
PetscErrorCode f_TSMonitorSet (TS ts, PetscInt step, PetscReal t, Vec u, void *ctx)
 

Variables

DEPRECATED typedef IntAllocator IntAllacator
 
DEPRECATED typedef DoubleAllocator DoubleAllacator
 
DEPRECATED typedef DataForcesAndSourcesCore DataForcesAndSurcesCore
 
DEPRECATED typedef DerivedDataForcesAndSourcesCore DerivedDataForcesAndSurcesCore
 
DEPRECATED typedef EdgeElementForcesAndSourcesCore EdgeElementForcesAndSurcesCore
 Use EdgeElementForcesAndSourcesCore. More...
 
DEPRECATED typedef FaceElementForcesAndSourcesCore FaceElementForcesAndSurcesCore
 
DEPRECATED typedef FatPrismElementForcesAndSourcesCore FatPrismElementForcesAndSurcesCore
 
DEPRECATED typedef FlatPrismElementForcesAndSourcesCore FlatPrismElementForcesAndSurcesCore
 USe FlatPrismElementForcesAndSourcesCore. More...
 
DEPRECATED typedef ForcesAndSourcesCore ForcesAndSurcesCore
 
DEPRECATED typedef VertexElementForcesAndSourcesCore VertexElementForcesAndSurcesCore
 
DEPRECATED typedef VolumeElementForcesAndSourcesCore VolumeElementForcesAndSurcesCore
 
DEPRECATED typedef Problem MoFEMProblem
 
static MoFEMErrorCodeGeneric< moab::ErrorCode > rval
 
static MoFEMErrorCodeGeneric< PetscErrorCode > ierr
 
const EntityHandle no_handle = 0
 
static const MOFEMuuid IDD_UNKNOWN_BASE_FUNCTION = MOFEMuuid(BitIntefaceId(UNKNOWN_BASE_FUNCTION_INTERFACE))
 
static const MOFEMuuid IDD_TET_BASE_FUNCTION = MOFEMuuid(BitIntefaceId(TET_BASE_FUNCTION_INTERFACE))
 
static const MOFEMuuid IDD_TRI_BASE_FUNCTION = MOFEMuuid(BitIntefaceId(TRI_BASE_FUNCTION_INTERFACE))
 
static const MOFEMuuid IDD_EDGE_BASE_FUNCTION = MOFEMuuid(BitIntefaceId(EDGE_BASE_FUNCTION_INTERFACE))
 
static const MOFEMuuid IDD_FATPRISM_BASE_FUNCTION = MOFEMuuid(BitIntefaceId(FATPRISM_BASE_FUNCTION_INTERFACE))
 
static const MOFEMuuid IDD_FLATPRISM_BASE_FUNCTION = MOFEMuuid(BitIntefaceId(FLATPRISM_BASE_FUNCTION_INTERFACE))
 
static const int edges_conn [] = {0, 1, 1, 2, 2, 0, 0, 3, 1, 3, 2, 3}
 
static const int oposite_edge [] = {5, 3, 4, 1, 2, 0}
 
static const int edge_permutations [6][6]
 
static const int edge_mirror_cross [6] = {0, 3, 4, 1, 2, 5}
 
static const int edge_mirror_vertical [6] = {0, 4, 3, 2, 1, 5}
 
static const int cyclic_node_rotate_face_3 [3][4]
 
static const int cyclic_edge_rotate_face_3 [3][6]
 
static const char edge_bits_mark [] = {1, 2, 4, 8, 16, 32}
 
static const MOFEMuuid IDD_JACOBI_BASE_FUNCTION
 
static const MOFEMuuid IDD_LEGENDRE_BASE_FUNCTION = MOFEMuuid(BitIntefaceId(LEGENDRE_BASE_FUNCTION_INTERFACE))
 
static const MOFEMuuid IDD_LOBATTO_BASE_FUNCTION = MOFEMuuid(BitIntefaceId(LOBATTO_BASE_FUNCTION_INTERFACE))
 
static const MOFEMuuid IDD_KERNEL_BASE_FUNCTION = MOFEMuuid(BitIntefaceId(KERNEL_BASE_FUNCTION_INTERFACE))
 
static const MOFEMuuid IDD_MOFEMBitLevelCoupler = MOFEMuuid( BitIntefaceId(BITLEVELCOUPLER_INTERFACE) )
 
static const MOFEMuuid IDD_MOFEMBitRefManager
 
static const MOFEMuuid IDD_MOFEMCoordsSystemsManager = MOFEMuuid( BitIntefaceId(COORDSSYSTEMMANAGER_INTERFACE) )
 
static const MOFEMuuid IDD_MOFEMCutMesh
 
static const MOFEMuuid IDD_MOFEMFieldBlas = MOFEMuuid( BitIntefaceId(FIELDBLAS_INTERFACE) )
 
static const MOFEMuuid IDD_MOFEMCoreInterface = MOFEMuuid( BitIntefaceId(CORE_INTERFACE))
 
static const MOFEMuuid IDD_MOFEMDeprecatedCoreInterface = MOFEMuuid( BitIntefaceId(DEPRECATED_CORE_INTERFACE))
 
static const MOFEMuuid IDD_MOFEMISManager = MOFEMuuid( BitIntefaceId(ISMANAGER_INTERFACE) )
 
static const MOFEMuuid IDD_MOFEMKspMethod = MOFEMuuid( BitIntefaceId(KSP_METHOD) )
 
static const MOFEMuuid IDD_MOFEMSnesMethod = MOFEMuuid( BitIntefaceId(SNES_METHOD) )
 
static const MOFEMuuid IDD_MOFEMTsMethod = MOFEMuuid( BitIntefaceId(TS_METHOD) )
 
static const MOFEMuuid IDD_MOFEMBasicMethod = MOFEMuuid( BitIntefaceId(BASIC_METHOD) )
 
static const MOFEMuuid IDD_MOFEMFEMethod = MOFEMuuid( BitIntefaceId(FE_METHOD) )
 
static const MOFEMuuid IDD_MOFEMEntMethod = MOFEMuuid( BitIntefaceId(ENT_METHOD) )
 
static const MOFEMuuid IDD_MOFEMMedInterface = MOFEMuuid( BitIntefaceId(MED_INTERFACE) )
 
static const MOFEMuuid IDD_MOFEMMeshRefine
 
static const MOFEMuuid IDD_MOFEMMeshsetsManager
 
static const MOFEMuuid IDD_MOFEMNodeMerger = MOFEMuuid( BitIntefaceId(NODEMERGER_INTERFACE) )
 
static const MOFEMuuid IDD_MOFEMPrismInterface
 
static const MOFEMuuid IDD_MOFEMPrismsFromSurface = MOFEMuuid(BitIntefaceId(PRISMSFROMSURFACE_INTERFACE))
 
static const MOFEMuuid IDD_MOFEMProblemsManager
 
static const MOFEMuuid IDD_MOFEMSeriesRecorder = MOFEMuuid( BitIntefaceId(SERIES_RECORDER) )
 
static const MOFEMuuid IDD_MOFEMSimple = MOFEMuuid( BitIntefaceId(SIMPLE_INTERFACE) )
 
static const MOFEMuuid IDD_MOFEMTetGegInterface
 
static const MOFEMuuid IDD_MOFEMTools = MOFEMuuid( BitIntefaceId(TOOLS) )
 
static const MOFEMuuid IDD_MOFEMUnknown
 
static const MOFEMuuid IDD_MOFEMVEC = MOFEMuuid( BitIntefaceId(VECMANAGER_INTERFACE) )
 
const int prism_adj_edges [] = { 6,7,8, -1,-1,-1, 0,1,2 }
 
const int prism_edges_conn [6][2] = { {0,1},{1,2},{2,0}, {3,4}, {4,5}, {5,3} }
 
static moab::Error error
 
static const MOFEMuuid IDD_DMCTX = MOFEMuuid(BitIntefaceId(DMCTX_INTERFACE))
 

Detailed Description

implementation of Data Operators for Forces and Sources

Create adjacent matrices using different indices.

name space of MoFEM library functions and classes

file DataOperators.cpp

The MoFEM package is copyrighted by Lukasz Kaczmarczyk. It can be freely used for educational and research purposes by other institutions. If you use this softwre pleas cite my work.

MoFEM is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

MoFEM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with MoFEM. If not, see http://www.gnu.org/licenses/

MoFEM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with MoFEM. If not, see http://www.gnu.org/licenses/

MoFEM is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

MoFEM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with MoFEM. If not, see http://www.gnu.org/licenses/

Typedef Documentation

◆ ApproximationOrder

Approximation on the entity.

Definition at line 131 of file Common.hpp.

◆ BasicMethodsSequence

Definition at line 54 of file AuxPETSc.hpp.

◆ BitFEId

typedef std::bitset<BITFEID_SIZE> MoFEM::BitFEId

Definition at line 150 of file Common.hpp.

◆ BitFieldId

typedef std::bitset<BITFIELDID_SIZE> MoFEM::BitFieldId

Definition at line 149 of file Common.hpp.

◆ BitIntefaceId

Definition at line 152 of file Common.hpp.

◆ BitProblemId

typedef std::bitset<BITPROBLEMID_SIZE> MoFEM::BitProblemId

Definition at line 151 of file Common.hpp.

◆ BitRefEdges

typedef std::bitset<BITREFEDGES_SIZE> MoFEM::BitRefEdges

Definition at line 141 of file Common.hpp.

◆ BitRefLevel

typedef std::bitset<BITREFLEVEL_SIZE> MoFEM::BitRefLevel

Bit structure attached to each entity identifying to what mesh entity is attached.

Examples:
MagneticElement.hpp, mesh_cut.cpp, Remodeling.hpp, split_sideset.cpp, unsaturated_transport.cpp, and UnsaturatedFlow.hpp.

Definition at line 147 of file Common.hpp.

◆ CoordSys_multiIndex

typedef multi_index_container< boost::shared_ptr<CoordSys>, indexed_by< ordered_unique< tag<Meshset_mi_tag>, member<CoordSys,EntityHandle,&CoordSys::meshSet> >, ordered_unique< tag<CoordSysName_mi_tag>, const_mem_fun<CoordSys,boost::string_ref,&CoordSys::getNameRef> > > > MoFEM::CoordSys_multiIndex

Definition at line 140 of file CoordSysMultiIndices.hpp.

◆ CubitBCType

bc & material meshsets

Definition at line 200 of file Common.hpp.

◆ CubitMeshSet_multiIndex

Stores data about meshsets (see CubitMeshSets) storing data about boundary conditions, interfaces, sidesets, nodests, blocksets.

Parameters
Meshset_mi_tagindex by meshset handle
CubitMeshSets_mi_tagindex by bc type, see CubitBC
CubitMeshSets_mask_meshset_mi_tagindex by NODESET, SIDESET, BLOCKSET only
CubitMeshSets_nameindex by meshset name
Composite_Cubit_msId_And_MeshSetType_mi_tagindex by meshset id and type NODESET, SIDESET or BLOCKSET

Example:

MeshsetsManager *m_mng;
ierr = m_field.getInterface(m_mng); CHKERRG(ierr);
CubitMeshSet_multiIndex &meshsets_index = m_mng->etMeshsetsMultindex();
CubitMeshSet_multiIndex::index<CubitMeshSets_mask_meshset_mi_tag>::type::iterator mit,hi_mit;
mit = meshsets_index.get<CubitMeshSets_mask_meshset_mi_tag>().lower_bound(BLOCKSET);
hi_mit = meshsets_index.get<CubitMeshSets_mask_meshset_mi_tag>().upper_bound(BLOCKSET);
// Make a loop over all BLOCKSET
for(;mit!=hi_mit;mit++) {
int id = mit->getMeshsetId(); // get blockset id
EntityHandle handle = mit->getMeshset(); // get block meshset
std::vector< double > attributes;
// get block attributes
ierr = mit->getAttributes(attributes); CHKERRG(ierr);
// do something
}

Definition at line 406 of file BCMultiIndices.hpp.

◆ CubitMeshsetById

typedef CubitMeshSet_multiIndex::index<CubitMeshSets_mi_tag>::type MoFEM::CubitMeshsetById

Definition at line 34 of file MeshsetsManager.hpp.

◆ CubitMeshsetByMask

typedef CubitMeshSet_multiIndex::index<CubitMeshSets_mask_meshset_mi_tag>::type MoFEM::CubitMeshsetByMask

Definition at line 28 of file MeshsetsManager.hpp.

◆ CubitMeshsetByName

typedef CubitMeshSet_multiIndex::index<CubitMeshSets_name>::type MoFEM::CubitMeshsetByName

Definition at line 31 of file MeshsetsManager.hpp.

◆ CubitMeshsetByType

typedef CubitMeshSet_multiIndex::index<CubitMeshSets_mi_tag>::type MoFEM::CubitMeshsetByType

Definition at line 25 of file MeshsetsManager.hpp.

◆ DofIdx

typedef int MoFEM::DofIdx

Index of DOF.

Definition at line 126 of file Common.hpp.

◆ DofsAllocator

typedef ublas::unbounded_array< boost::shared_ptr<const FEDofEntity>, std::allocator<boost::shared_ptr<const FEDofEntity> >> MoFEM::DofsAllocator

Definition at line 32 of file DataStructures.hpp.

◆ DoubleAllocator

typedef std::vector<double, std::allocator<double> > MoFEM::DoubleAllocator

Definition at line 207 of file Common.hpp.

◆ EntIdx

typedef int MoFEM::EntIdx

Index of DOF on the entity.

Definition at line 128 of file Common.hpp.

◆ EntPart

Partition owning entity.

Definition at line 129 of file Common.hpp.

◆ FEIdx

typedef int MoFEM::FEIdx

Index of the element.

Definition at line 127 of file Common.hpp.

◆ FEMethodsSequence

Definition at line 53 of file AuxPETSc.hpp.

◆ Field_multiIndex_view

typedef multi_index_container< boost::shared_ptr<Field>, indexed_by< ordered_unique<tag<BitFieldId_mi_tag>, const_mem_fun<Field, const BitFieldId &, &Field::getId>, LtBit<BitFieldId> > > > MoFEM::Field_multiIndex_view

Definition at line 485 of file FieldMultiIndices.hpp.

◆ FieldCoefficientsNumber

Number of field coefficients.

Definition at line 132 of file Common.hpp.

◆ FieldData

Field data type.

Definition at line 130 of file Common.hpp.

◆ FieldEntity_multiIndex_ent_view

typedef multi_index_container< boost::shared_ptr<FieldEntity>, indexed_by<sequenced<>, ordered_non_unique<tag<Ent_mi_tag>, const_mem_fun<FieldEntity, EntityHandle, &FieldEntity::getEnt> > > > MoFEM::FieldEntity_multiIndex_ent_view

Definition at line 898 of file EntsMultiIndices.hpp.

◆ IntAllocator

typedef std::vector<int, std::allocator<int> > MoFEM::IntAllocator

Definition at line 206 of file Common.hpp.

◆ LengthMapData_multi_index

typedef multi_index_container< LengthMapData, indexed_by< ordered_non_unique< member<LengthMapData, double, &LengthMapData::lEngth> >, hashed_unique< member<LengthMapData, EntityHandle, &LengthMapData::eDge> > >> MoFEM::LengthMapData_multi_index

Definition at line 1045 of file CutMeshInterface.cpp.

◆ MatrixAdaptor

typedef ublas::matrix<double, ublas::row_major, ublas::shallow_array_adaptor<double> > MoFEM::MatrixAdaptor
Examples:
SmallStrainPlasticity.hpp.

Definition at line 227 of file Common.hpp.

◆ MatrixDouble

◆ MatrixDouble3by3

typedef ublas::matrix<double, ublas::row_major, ublas::bounded_array<double, 9> > MoFEM::MatrixDouble3by3

Definition at line 218 of file Common.hpp.

◆ MoABErrorCode

typedef moab::ErrorCode MoFEM::MoABErrorCode

MoAB error code.

Definition at line 59 of file Common.hpp.

◆ MoFEMErrorCode

typedef PetscErrorCode MoFEM::MoFEMErrorCode

◆ NumeredDofEntity_multiIndex_coeff_idx_ordered_non_unique

Definition at line 776 of file DofsMultiIndices.hpp.

◆ NumeredDofEntity_multiIndex_global_index_view

typedef multi_index_container< boost::shared_ptr<NumeredDofEntity>, indexed_by<ordered_unique<member<NumeredDofEntity, const DofIdx, &NumeredDofEntity::petscGloablDofIdx> > > > MoFEM::NumeredDofEntity_multiIndex_global_index_view

Definition at line 871 of file DofsMultiIndices.hpp.

◆ NumeredDofEntity_multiIndex_idx_view_hashed

typedef multi_index_container< boost::shared_ptr<NumeredDofEntity>, indexed_by<hashed_unique<const_mem_fun<NumeredDofEntity, DofIdx, &NumeredDofEntity::getDofIdx> > > > MoFEM::NumeredDofEntity_multiIndex_idx_view_hashed

Definition at line 757 of file DofsMultiIndices.hpp.

◆ NumeredDofEntity_multiIndex_petsc_global_dof_view_ordered_non_unique

typedef multi_index_container< boost::shared_ptr<NumeredDofEntity>, indexed_by<ordered_non_unique<const_mem_fun< NumeredDofEntity, DofIdx, &NumeredDofEntity::getPetscGlobalDofIdx> > > > MoFEM::NumeredDofEntity_multiIndex_petsc_global_dof_view_ordered_non_unique

Definition at line 769 of file DofsMultiIndices.hpp.

◆ NumeredDofEntity_multiIndex_petsc_local_dof_view_ordered_non_unique

typedef multi_index_container< boost::shared_ptr<NumeredDofEntity>, indexed_by<ordered_non_unique<const_mem_fun< NumeredDofEntity, DofIdx, &NumeredDofEntity::getPetscLocalDofIdx> > > > MoFEM::NumeredDofEntity_multiIndex_petsc_local_dof_view_ordered_non_unique

Definition at line 763 of file DofsMultiIndices.hpp.

◆ NumeredDofEntity_multiIndex_uid_view_ordered

typedef multi_index_container< boost::shared_ptr<NumeredDofEntity>, indexed_by<ordered_unique< const_mem_fun<NumeredDofEntity::interface_type_DofEntity, const UId, &NumeredDofEntity::getGlobalUniqueId> > > > MoFEM::NumeredDofEntity_multiIndex_uid_view_ordered

Definition at line 751 of file DofsMultiIndices.hpp.

◆ ptrWrapperRefElement

Definition at line 201 of file FEMultiIndices.hpp.

◆ ShapeFunctionBasesVector

typedef std::vector<boost::shared_ptr<MatrixDouble> > MoFEM::ShapeFunctionBasesVector

Definition at line 230 of file Common.hpp.

◆ ShortId

Unique Id in the field.

Definition at line 137 of file Common.hpp.

◆ UId

typedef uint128_t MoFEM::UId

Unique Id.

Definition at line 136 of file Common.hpp.

◆ VectorAdaptor

typedef ublas::vector<double, ublas::shallow_array_adaptor<double> > MoFEM::VectorAdaptor
Examples:
SmallStrainPlasticity.hpp.

Definition at line 224 of file Common.hpp.

◆ VectorDofs

typedef ublas::vector< boost::shared_ptr<const FEDofEntity>,DofsAllocator> MoFEM::VectorDofs

Definition at line 35 of file DataStructures.hpp.

◆ VectorDouble

typedef ublas::vector<double, DoubleAllocator> MoFEM::VectorDouble

◆ VectorDouble3

typedef ublas::vector<double, ublas::bounded_array<double, 3> > MoFEM::VectorDouble3

Definition at line 219 of file Common.hpp.

◆ VectorDouble9

typedef ublas::vector<double, ublas::bounded_array<double, 9> > MoFEM::VectorDouble9

Definition at line 220 of file Common.hpp.

◆ VectorInt

typedef ublas::vector<int, IntAllocator> MoFEM::VectorInt

Definition at line 210 of file Common.hpp.

◆ VectorInt3

typedef ublas::vector<int, ublas::bounded_array<int, 3> > MoFEM::VectorInt3

Definition at line 215 of file Common.hpp.

◆ VectorInt9

typedef ublas::vector<int, ublas::bounded_array<int, 9> > MoFEM::VectorInt9

Definition at line 216 of file Common.hpp.

◆ VectorIntAdaptor

typedef ublas::vector<int, ublas::shallow_array_adaptor<int> > MoFEM::VectorIntAdaptor

Definition at line 228 of file Common.hpp.

Function Documentation

◆ cOnstructor()

template<class T >
void MoFEM::cOnstructor ( DataForcesAndSourcesCore data,
EntityType  type,
 
)

Definition at line 142 of file DataStructures.cpp.

142  {
143 
144  data->dataOnEntities[MBENTITYSET].push_back(new T());
145 
146  switch (type) {
147  case MBTET:
148  data->dataOnEntities[MBVERTEX].push_back(new T());
149  for(int ee = 0;ee<6;ee++) {
150  data->dataOnEntities[MBEDGE].push_back(new T());
151  }
152  for(int ff = 0;ff<4;ff++) {
153  data->dataOnEntities[MBTRI].push_back(new T());
154  }
155  data->dataOnEntities[MBTET].push_back(new T());
156  break;
157  case MBTRI:
158  data->dataOnEntities[MBVERTEX].push_back(new T());
159  for(int ee = 0;ee<3;ee++) {
160  data->dataOnEntities[MBEDGE].push_back(new T());
161  }
162  data->dataOnEntities[MBTRI].push_back(new T());
163  break;
164  case MBEDGE:
165  data->dataOnEntities[MBVERTEX].push_back(new T());
166  data->dataOnEntities[MBEDGE].push_back(new T());
167  break;
168  case MBVERTEX:
169  data->dataOnEntities[MBVERTEX].push_back(new T());
170  break;
171  case MBPRISM:
172  data->dataOnEntities[MBVERTEX].push_back(new T());
173  for(int ee = 0;ee<9;ee++) {
174  data->dataOnEntities[MBEDGE].push_back(new T());
175  }
176  for(int ff = 0;ff<5;ff++) {
177  data->dataOnEntities[MBQUAD].push_back(new T());
178  }
179  for(int ff = 0;ff<5;ff++) {
180  data->dataOnEntities[MBTRI].push_back(new T());
181  }
182  data->dataOnEntities[MBPRISM].push_back(new T());
183  break;
184  default:
186  }
187 
188 }
T data[(layout==column_major) ? Tensor_Dim0 :Tensor_Dim1][(layout==column_major) ? Tensor_Dim1 :Tensor_Dim0]

◆ DMMoFEMGetDestroyProblem()

PetscErrorCode MoFEM::DMMoFEMGetDestroyProblem ( DM  dm,
PetscBool *  destroy_problem 
)

Get if problem will be destroyed with DM

Parameters
dmthe DM object
destroyreturn if PETSC_TRUE problem is destroyed
Returns
error code

Definition at line 374 of file DMMMoFEM.cpp.

374  {
376  PetscValidHeaderSpecific(dm,DM_CLASSID,1);
378  DMCtx *dm_field = (DMCtx*)dm->data;
379  *destroy_problem = dm_field->destroyProblem;
381 }
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474

◆ DMMoFEMGetSubColIS()

PetscErrorCode MoFEM::DMMoFEMGetSubColIS ( DM  dm,
IS *  is 
)

get sub problem is

Parameters
dmhas to be created with DMMoFEMSetSquareProblem
isreturn is on the row
Returns
error code

Returns IS with global indices of the DM used to create SubDM

Definition at line 279 of file DMMMoFEM.cpp.

279  {
280 
282  PetscValidHeaderSpecific(dm,DM_CLASSID,1);
284  DMCtx *dm_field = (DMCtx*)dm->data;
285  if(dm_field->isSubDM!=PETSC_TRUE) {
286  SETERRQ(PETSC_COMM_SELF,MOFEM_NOT_IMPLEMENTED,"This DM is not created as a SubDM");
287  }
288  if(dm_field->isProblemBuild!=PETSC_TRUE) {
289  SETERRQ(PETSC_COMM_SELF,MOFEM_NOT_IMPLEMENTED,"Problem is not build");
290  }
291  boost::shared_ptr<Problem::SubProblemData> sub_data = dm_field->problemPtr->getSubData();
292  ierr = sub_data->getColIs(is); CHKERRG(ierr);
294 }
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:511
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474

◆ DMMoFEMGetSubRowIS()

PetscErrorCode MoFEM::DMMoFEMGetSubRowIS ( DM  dm,
IS *  is 
)

get sub problem is

Parameters
dmhas to be created with DMMoFEMSetSquareProblem
isreturn is on the row
Returns
error code

Returns IS with global indices of the DM used to create SubDM

Examples:
analytical_poisson_field_split.cpp.

Definition at line 262 of file DMMMoFEM.cpp.

262  {
263 
265  PetscValidHeaderSpecific(dm,DM_CLASSID,1);
267  DMCtx *dm_field = (DMCtx*)dm->data;
268  if(dm_field->isSubDM!=PETSC_TRUE) {
269  SETERRQ(PETSC_COMM_SELF,MOFEM_NOT_IMPLEMENTED,"This DM is not created as a SubDM");
270  }
271  if(dm_field->isProblemBuild!=PETSC_TRUE) {
272  SETERRQ(PETSC_COMM_SELF,MOFEM_NOT_IMPLEMENTED,"Problem is not build");
273  }
274  boost::shared_ptr<Problem::SubProblemData> sub_data = dm_field->problemPtr->getSubData();
275  ierr = sub_data->getRowIs(is); CHKERRG(ierr);
277 }
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:511
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474

◆ DMMoFEMKSPSetComputeOperators()

template<class S , class T >
static PetscErrorCode MoFEM::DMMoFEMKSPSetComputeOperators ( DM  dm,
fe_name,
method,
pre_only,
post_only 
)
static

Definition at line 545 of file DMMMoFEM.cpp.

545  {
546  PetscValidHeaderSpecific(dm,DM_CLASSID,1);
548  DMCtx *dm_field = (DMCtx*)dm->data;
549  if(pre_only) {
550  dm_field->kspCtx->get_preProcess_to_do_Mat().push_back(pre_only);
551  }
552  if(method) {
553  dm_field->kspCtx->get_loops_to_do_Mat().push_back(PairNameFEMethodPtr(fe_name,method));
554  }
555  if(post_only) {
556  dm_field->kspCtx->get_postProcess_to_do_Mat().push_back(post_only);
557  }
558  ierr = DMKSPSetComputeOperators(dm,KspMat,dm_field->kspCtx.get()); CHKERRG(ierr);
560 }
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:511
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474
PetscErrorCode KspMat(KSP ksp, Mat A, Mat B, void *ctx)
Run over elenents in the list.
Definition: KspCtx.cpp:90

◆ DMMoFEMKSPSetComputeRHS()

template<class S , class T >
static PetscErrorCode MoFEM::DMMoFEMKSPSetComputeRHS ( DM  dm,
fe_name,
method,
pre_only,
post_only 
)
static

Definition at line 511 of file DMMMoFEM.cpp.

511  {
512  PetscValidHeaderSpecific(dm,DM_CLASSID,1);
514  DMCtx *dm_field = (DMCtx*)dm->data;
515  if(pre_only) {
516  dm_field->kspCtx->get_preProcess_to_do_Rhs().push_back(pre_only);
517  }
518  if(method) {
519  dm_field->kspCtx->get_loops_to_do_Rhs().push_back(PairNameFEMethodPtr(fe_name,method));
520  }
521  if(post_only) {
522  dm_field->kspCtx->get_postProcess_to_do_Rhs().push_back(post_only);
523  }
524  ierr = DMKSPSetComputeRHS(dm,KspRhs,dm_field->kspCtx.get()); CHKERRG(ierr);
526 }
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:511
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474
PetscErrorCode KspRhs(KSP ksp, Vec f, void *ctx)
Run over elements in the lists.
Definition: KspCtx.cpp:54

◆ DMMoFEMSetDestroyProblem()

PetscErrorCode MoFEM::DMMoFEMSetDestroyProblem ( DM  dm,
PetscBool  destroy_problem 
)

If this is set to PETSC_TRUE problem is deleted with DM

Parameters
dmthe DM object
destroyif PETSC_TRUE problem is destroyed
Returns
error code

Definition at line 365 of file DMMMoFEM.cpp.

365  {
367  PetscValidHeaderSpecific(dm,DM_CLASSID,1);
369  DMCtx *dm_field = (DMCtx*)dm->data;
370  dm_field->destroyProblem = destroy_problem;
372 }
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474

◆ DMMoFEMSNESSetFunction()

template<class S , class T >
static PetscErrorCode MoFEM::DMMoFEMSNESSetFunction ( DM  dm,
fe_name,
method,
pre_only,
post_only 
)
static

Definition at line 581 of file DMMMoFEM.cpp.

581  {
582  PetscValidHeaderSpecific(dm,DM_CLASSID,1);
584  DMCtx *dm_field = (DMCtx*)dm->data;
585  if(pre_only) {
586  dm_field->snesCtx->get_preProcess_to_do_Rhs().push_back(pre_only);
587  }
588  if(method) {
589  dm_field->snesCtx->get_loops_to_do_Rhs().push_back(PairNameFEMethodPtr(fe_name,method));
590  }
591  if(post_only) {
592  dm_field->snesCtx->get_postProcess_to_do_Rhs().push_back(post_only);
593  }
594  ierr = DMSNESSetFunction(dm,SnesRhs,dm_field->snesCtx.get()); CHKERRG(ierr);
596 }
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:511
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474
PetscErrorCode SnesRhs(SNES snes, Vec x, Vec f, void *ctx)
This is MoFEM implementation for the right hand side (residual vector) evaluation in SNES solver...
Definition: SnesCtx.cpp:57

◆ DMMoFEMSNESSetJacobian()

template<class S , class T >
static PetscErrorCode MoFEM::DMMoFEMSNESSetJacobian ( DM  dm,
fe_name,
method,
pre_only,
post_only 
)
static

Definition at line 616 of file DMMMoFEM.cpp.

616  {
617  PetscValidHeaderSpecific(dm,DM_CLASSID,1);
619  DMCtx *dm_field = (DMCtx*)dm->data;
620  if(pre_only) {
621  dm_field->snesCtx->get_preProcess_to_do_Mat().push_back(pre_only);
622  }
623  if(method) {
624  dm_field->snesCtx->get_loops_to_do_Mat().push_back(PairNameFEMethodPtr(fe_name,method));
625  }
626  if(post_only) {
627  dm_field->snesCtx->get_postProcess_to_do_Mat().push_back(post_only);
628  }
629  ierr = DMSNESSetJacobian(dm,SnesMat,dm_field->snesCtx.get()); CHKERRG(ierr);
631 }
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
PetscErrorCode SnesMat(SNES snes, Vec x, Mat A, Mat B, void *ctx)
This is MoFEM implementation for the left hand side (tangent matrix) evaluation in SNES solver...
Definition: SnesCtx.cpp:106
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:511
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474

◆ DMMoFEMTSSetIFunction()

template<class S , class T >
static PetscErrorCode MoFEM::DMMoFEMTSSetIFunction ( DM  dm,
fe_name,
method,
pre_only,
post_only 
)
static

Definition at line 654 of file DMMMoFEM.cpp.

654  {
655  PetscValidHeaderSpecific(dm,DM_CLASSID,1);
657  DMCtx *dm_field = (DMCtx*)dm->data;
658  if(pre_only) {
659  dm_field->tsCtx->get_preProcess_to_do_IFunction().push_back(pre_only);
660  }
661  if(method) {
662  dm_field->tsCtx->get_loops_to_do_IFunction().push_back(PairNameFEMethodPtr(fe_name,method));
663  }
664  if(post_only) {
665  dm_field->tsCtx->get_postProcess_to_do_IFunction().push_back(post_only);
666  }
667  ierr = DMTSSetIFunction(dm,f_TSSetIFunction,dm_field->tsCtx.get()); CHKERRG(ierr);
669 }
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
PetscErrorCode f_TSSetIFunction(TS ts, PetscReal t, Vec u, Vec u_t, Vec F, void *ctx)
Definition: TsCtx.cpp:56
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:511
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474

◆ DMMoFEMTSSetIJacobian()

template<class S , class T >
static PetscErrorCode MoFEM::DMMoFEMTSSetIJacobian ( DM  dm,
fe_name,
method,
pre_only,
post_only 
)
static

Definition at line 689 of file DMMMoFEM.cpp.

689  {
690  PetscValidHeaderSpecific(dm,DM_CLASSID,1);
692  DMCtx *dm_field = (DMCtx*)dm->data;
693  if(pre_only) {
694  dm_field->tsCtx->get_preProcess_to_do_IJacobian().push_back(pre_only);
695  }
696  if(method) {
697  dm_field->tsCtx->get_loops_to_do_IJacobian().push_back(PairNameFEMethodPtr(fe_name,method));
698  }
699  if(post_only) {
700  dm_field->tsCtx->get_postProcess_to_do_IJacobian().push_back(post_only);
701  }
702  ierr = DMTSSetIJacobian(dm,f_TSSetIJacobian,dm_field->tsCtx.get()); CHKERRG(ierr);
704 }
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
PetscErrorCode f_TSSetIJacobian(TS ts, PetscReal t, Vec u, Vec u_t, PetscReal a, Mat A, Mat B, void *ctx)
Definition: TsCtx.cpp:119
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:511
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474

◆ f_TSMonitorSet()

PetscErrorCode MoFEM::f_TSMonitorSet ( TS  ts,
PetscInt  step,
PetscReal  t,
Vec  u,
void *  ctx 
)
Examples:
UnsaturatedFlow.hpp.

Definition at line 187 of file TsCtx.cpp.

187  {
188  // PetscValidHeaderSpecific(ts,TS_CLASSID,1);
190  TsCtx* ts_ctx = (TsCtx*)ctx;
191  PetscLogEventBegin(ts_ctx->MOFEM_EVENT_TsCtxRHSFunction,0,0,0,0);
192  ierr = VecGhostUpdateBegin(u,INSERT_VALUES,SCATTER_FORWARD); CHKERRG(ierr);
193  ierr = VecGhostUpdateEnd(u,INSERT_VALUES,SCATTER_FORWARD); CHKERRG(ierr);
194  ierr = ts_ctx->mField.getInterface<VecManager>()->setLocalGhostVector(
195  ts_ctx->problemName,COL,u,INSERT_VALUES,SCATTER_REVERSE
196  ); CHKERRG(ierr);
197  //preproces
198  TsCtx::BasicMethodsSequence::iterator bit = ts_ctx->preProcess_Monitor.begin();
199  for(;bit!=ts_ctx->preProcess_Monitor.end();bit++) {
200  (*bit)->ts_u = u;
201  (*bit)->ts_t = t;
202  (*bit)->ts_step = step;
203  (*bit)->ts_F = PETSC_NULL;
204  ierr = (*bit)->setTsCtx(TSMethod::CTX_TSSETIJACOBIAN);
205  ierr = (*bit)->setTs(ts); CHKERRG(ierr);
206  ierr = ts_ctx->mField.problem_basic_method_preProcess(ts_ctx->problemName,*(*(bit))); CHKERRG(ierr);
207  ierr = (*bit)->setTsCtx(TSMethod::CTX_TSNONE); CHKERRG(ierr); CHKERRG(ierr);
208  }
209  TsCtx::FEMethodsSequence::iterator lit = ts_ctx->loops_to_do_Monitor.begin();
210  for(;lit!=ts_ctx->loops_to_do_Monitor.end();lit++) {
211  lit->second->ts_u = u;
212  lit->second->ts_t = t;
213  lit->second->ts_step = step;
214  lit->second->ts_F = PETSC_NULL;
215  ierr = lit->second->setTsCtx(TSMethod::CTX_TSTSMONITORSET);
216  ierr = lit->second->setTs(ts); CHKERRG(ierr);
217  ierr = ts_ctx->mField.loop_finite_elements(ts_ctx->problemName,lit->first,*(lit->second),ts_ctx->bH); CHKERRG(ierr);
218  ierr = lit->second->setTsCtx(TSMethod::CTX_TSNONE);
219  }
220  //post process
221  bit = ts_ctx->postProcess_Monitor.begin();
222  for(;bit!=ts_ctx->postProcess_Monitor.end();bit++) {
223  (*bit)->ts_u = u;
224  (*bit)->ts_t = t;
225  (*bit)->ts_step = step;
226  (*bit)->ts_F = PETSC_NULL;
227  ierr = (*bit)->setTsCtx(TSMethod::CTX_TSSETIJACOBIAN);
228  ierr = (*bit)->setTs(ts); CHKERRG(ierr);
229  ierr = ts_ctx->mField.problem_basic_method_postProcess(ts_ctx->problemName,*(*(bit))); CHKERRG(ierr);
230  ierr = (*bit)->setTsCtx(TSMethod::CTX_TSNONE); CHKERRG(ierr);
231  }
232  PetscLogEventEnd(ts_ctx->MOFEM_EVENT_TsCtxRHSFunction,0,0,0,0);
234 }
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:511
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474

◆ f_TSSetIFunction()

PetscErrorCode MoFEM::f_TSSetIFunction ( TS  ts,
PetscReal  t,
Vec  u,
Vec  u_t,
Vec  F,
void *  ctx 
)

Definition at line 56 of file TsCtx.cpp.

56  {
57  // PetscValidHeaderSpecific(ts,TS_CLASSID,1);
59  TsCtx* ts_ctx = (TsCtx*)ctx;
60  PetscLogEventBegin(ts_ctx->MOFEM_EVENT_TsCtxIFunction,0,0,0,0);
61  ierr = VecGhostUpdateBegin(u,INSERT_VALUES,SCATTER_FORWARD); CHKERRG(ierr);
62  ierr = VecGhostUpdateEnd(u,INSERT_VALUES,SCATTER_FORWARD); CHKERRG(ierr);
63  ierr = VecGhostUpdateBegin(u_t,INSERT_VALUES,SCATTER_FORWARD); CHKERRG(ierr);
64  ierr = VecGhostUpdateEnd(u_t,INSERT_VALUES,SCATTER_FORWARD); CHKERRG(ierr);
65  ierr = ts_ctx->mField.getInterface<VecManager>()->setLocalGhostVector(
66  ts_ctx->problemName,COL,u,INSERT_VALUES,SCATTER_REVERSE
67  ); CHKERRG(ierr);
68  ierr = VecZeroEntries(F); CHKERRG(ierr);
69  ierr = VecGhostUpdateBegin(F,INSERT_VALUES,SCATTER_FORWARD); CHKERRG(ierr);
70  ierr = VecGhostUpdateEnd(F,INSERT_VALUES,SCATTER_FORWARD); CHKERRG(ierr);
71  int step;
72  ierr = TSGetTimeStepNumber(ts,&step); CHKERRG(ierr);
73  //preprocess
74  TsCtx::BasicMethodsSequence::iterator bit = ts_ctx->preProcess_IFunction.begin();
75  for(;bit!=ts_ctx->preProcess_IFunction.end();bit++) {
76  (*bit)->ts_u = u;
77  (*bit)->ts_u_t = u_t;
78  (*bit)->ts_F = F;
79  (*bit)->ts_t = t;
80  (*bit)->ts_step = step;
81  ierr = (*bit)->setTsCtx(TSMethod::CTX_TSSETIFUNCTION);
82  ierr = (*bit)->setTs(ts); CHKERRG(ierr);
83  ierr = ts_ctx->mField.problem_basic_method_preProcess(ts_ctx->problemName,*(*(bit))); CHKERRG(ierr);
84  ierr = (*bit)->setTsCtx(TSMethod::CTX_TSNONE);
85  }
86  //fe loops
87  TsCtx::FEMethodsSequence::iterator lit = ts_ctx->loops_to_do_IFunction.begin();
88  for(;lit!=ts_ctx->loops_to_do_IFunction.end();lit++) {
89  lit->second->ts_u = u;
90  lit->second->ts_u_t = u_t;
91  lit->second->ts_F = F;
92  lit->second->ts_t = t;
93  lit->second->ts_step = step;
94  ierr = lit->second->setTsCtx(TSMethod::CTX_TSSETIFUNCTION);
95  ierr = lit->second->setTs(ts); CHKERRG(ierr);
96  ierr = ts_ctx->mField.loop_finite_elements(ts_ctx->problemName,lit->first,*(lit->second),ts_ctx->bH); CHKERRG(ierr);
97  ierr = lit->second->setTsCtx(TSMethod::CTX_TSNONE);
98  }
99  //post process
100  bit = ts_ctx->postProcess_IFunction.begin();
101  for(;bit!=ts_ctx->postProcess_IFunction.end();bit++) {
102  (*bit)->ts_u = u;
103  (*bit)->ts_u_t = u_t;
104  (*bit)->ts_F = F;
105  (*bit)->ts_t = t;
106  (*bit)->ts_step = step;
107  ierr = (*bit)->setTsCtx(TSMethod::CTX_TSSETIFUNCTION);
108  ierr = (*bit)->setTs(ts); CHKERRG(ierr);
109  ierr = ts_ctx->mField.problem_basic_method_postProcess(ts_ctx->problemName,*(*(bit))); CHKERRG(ierr);
110  ierr = (*bit)->setTsCtx(TSMethod::CTX_TSNONE);
111  }
112  ierr = VecGhostUpdateBegin(F,ADD_VALUES,SCATTER_REVERSE); CHKERRG(ierr);
113  ierr = VecGhostUpdateEnd(F,ADD_VALUES,SCATTER_REVERSE); CHKERRG(ierr);
114  ierr = VecAssemblyBegin(F); CHKERRG(ierr);
115  ierr = VecAssemblyEnd(F); CHKERRG(ierr);
116  PetscLogEventEnd(ts_ctx->MOFEM_EVENT_TsCtxIFunction,0,0,0,0);
118 }
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:511
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474

◆ f_TSSetIJacobian()

PetscErrorCode MoFEM::f_TSSetIJacobian ( TS  ts,
PetscReal  t,
Vec  u,
Vec  u_t,
PetscReal  a,
Mat  A,
Mat  B,
void *  ctx 
)

Definition at line 119 of file TsCtx.cpp.

119  {
120  // PetscValidHeaderSpecific(ts,TS_CLASSID,1);
122  TsCtx* ts_ctx = (TsCtx*)ctx;
123  PetscLogEventBegin(ts_ctx->MOFEM_EVENT_TsCtxIFunction,0,0,0,0);
124  ierr = VecGhostUpdateBegin(u,INSERT_VALUES,SCATTER_FORWARD); CHKERRG(ierr);
125  ierr = VecGhostUpdateEnd(u,INSERT_VALUES,SCATTER_FORWARD); CHKERRG(ierr);
126  ierr = VecGhostUpdateBegin(u_t,INSERT_VALUES,SCATTER_FORWARD); CHKERRG(ierr);
127  ierr = VecGhostUpdateEnd(u_t,INSERT_VALUES,SCATTER_FORWARD); CHKERRG(ierr);
128  ierr = ts_ctx->mField.getInterface<VecManager>()->setLocalGhostVector(
129  ts_ctx->problemName,COL,u,INSERT_VALUES,SCATTER_REVERSE
130  ); CHKERRG(ierr);
131  if(ts_ctx->zeroMatrix) {
132  ierr = MatZeroEntries(B); CHKERRG(ierr);
133  }
134  int step;
135  ierr = TSGetTimeStepNumber(ts,&step); CHKERRG(ierr);
136  //preproces
137  TsCtx::BasicMethodsSequence::iterator bit = ts_ctx->preProcess_IJacobian.begin();
138  for(;bit!=ts_ctx->preProcess_IJacobian.end();bit++) {
139  (*bit)->ts_u = u;
140  (*bit)->ts_u_t = u_t;
141  (*bit)->ts_A = A;
142  (*bit)->ts_B = B;
143  (*bit)->ts_t = t;
144  (*bit)->ts_a = a;
145  (*bit)->ts_step = step;
146  ierr = (*bit)->setTsCtx(TSMethod::CTX_TSSETIJACOBIAN);
147  ierr = (*bit)->setTs(ts); CHKERRG(ierr);
148  ierr = ts_ctx->mField.problem_basic_method_preProcess(ts_ctx->problemName,*(*(bit))); CHKERRG(ierr);
149  ierr = (*bit)->setTsCtx(TSMethod::CTX_TSNONE); CHKERRG(ierr); CHKERRG(ierr);
150  }
151  TsCtx::FEMethodsSequence::iterator lit = ts_ctx->loops_to_do_IJacobian.begin();
152  for(;lit!=ts_ctx->loops_to_do_IJacobian.end();lit++) {
153  lit->second->ts_u = u;
154  lit->second->ts_u_t = u_t;
155  lit->second->ts_A = A;
156  lit->second->ts_B = B;
157  lit->second->ts_t = t;
158  lit->second->ts_a = a;
159  lit->second->ts_step = step;
160  ierr = lit->second->setTsCtx(TSMethod::CTX_TSSETIJACOBIAN);
161  ierr = lit->second->setTs(ts); CHKERRG(ierr);
162  ierr = ts_ctx->mField.loop_finite_elements(ts_ctx->problemName,lit->first,*(lit->second),ts_ctx->bH); CHKERRG(ierr);
163  ierr = lit->second->setTsCtx(TSMethod::CTX_TSNONE); CHKERRG(ierr);
164  }
165  //post process
166  bit = ts_ctx->postProcess_IJacobian.begin();
167  for(;bit!=ts_ctx->postProcess_IJacobian.end();bit++) {
168  (*bit)->ts_u = u;
169  (*bit)->ts_u_t = u_t;
170  (*bit)->ts_A = A;
171  (*bit)->ts_B = B;
172  (*bit)->ts_t = t;
173  (*bit)->ts_a = a;
174  (*bit)->ts_step = step;
175  ierr = (*bit)->setTsCtx(TSMethod::CTX_TSSETIJACOBIAN);
176  ierr = (*bit)->setTs(ts); CHKERRG(ierr);
177  ierr = ts_ctx->mField.problem_basic_method_postProcess(ts_ctx->problemName,*(*(bit))); CHKERRG(ierr);
178  ierr = (*bit)->setTsCtx(TSMethod::CTX_TSNONE); CHKERRG(ierr);
179  }
180  if(ts_ctx->zeroMatrix) {
181  ierr = MatAssemblyBegin(B,MAT_FINAL_ASSEMBLY); CHKERRG(ierr);
182  ierr = MatAssemblyEnd(B,MAT_FINAL_ASSEMBLY); CHKERRG(ierr);
183  }
184  PetscLogEventEnd(ts_ctx->MOFEM_EVENT_TsCtxIFunction,0,0,0,0);
186 }
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:511
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474

◆ fNBEDGE_H1()

int MoFEM::fNBEDGE_H1 ( int  P)

number of approx. functions for H1 space on edge

Definition at line 39 of file CoreDataStructures.hpp.

39 { return NBEDGE_H1(P); }
#define NBEDGE_H1(P)
Number of dofs on edge for H1 space.

◆ fNBEDGE_HCURL()

int MoFEM::fNBEDGE_HCURL ( int  P)

Definition at line 50 of file CoreDataStructures.hpp.

50 { return NBEDGE_HCURL(P); }
#define NBEDGE_HCURL(P)
Number of base functions H curl on faces.

◆ fNBEDGE_HDIV()

int MoFEM::fNBEDGE_HDIV ( int  P)

number of approx. functions for HDIV space on edge

Definition at line 59 of file CoreDataStructures.hpp.

59 { (void)P; return NBEDGE_HDIV(P); }
#define NBEDGE_HDIV(P)

◆ fNBEDGE_L2()

int MoFEM::fNBEDGE_L2 ( int  P)

Definition at line 33 of file CoreDataStructures.hpp.

33 { return NBEDGE_L2(P); }
#define NBEDGE_L2(P)

◆ fNBENTITY_GENERIC()

int MoFEM::fNBENTITY_GENERIC ( int  P)

Definition at line 27 of file CoreDataStructures.hpp.

27 { (void)P; return 0; }

◆ fNBENTITYSET_NOFIELD()

int MoFEM::fNBENTITYSET_NOFIELD ( int  P)

Definition at line 28 of file CoreDataStructures.hpp.

28 { (void)P; return 1; }

◆ fNBFACEQUAD_H1()

int MoFEM::fNBFACEQUAD_H1 ( int  P)

Definition at line 42 of file CoreDataStructures.hpp.

42 { return NBFACEQUAD_H1(P); }
#define NBFACEQUAD_H1(P)

◆ fNBFACETRI_AINSWORTH_HDIV()

int MoFEM::fNBFACETRI_AINSWORTH_HDIV ( int  P)

number of approx. functions for HDIV space on face

Definition at line 61 of file CoreDataStructures.hpp.

61 { return NBFACETRI_AINSWORTH_HDIV(P); }
#define NBFACETRI_AINSWORTH_HDIV(P)

◆ fNBFACETRI_DEMKOWICZ_HDIV()

int MoFEM::fNBFACETRI_DEMKOWICZ_HDIV ( int  P)

Definition at line 65 of file CoreDataStructures.hpp.

65 { return NBFACETRI_DEMKOWICZ_HDIV(P); }
#define NBFACETRI_DEMKOWICZ_HDIV(P)

◆ fNBFACETRI_H1()

int MoFEM::fNBFACETRI_H1 ( int  P)

number of approx. functions for H1 space on face

Definition at line 41 of file CoreDataStructures.hpp.

41 { return NBFACETRI_H1(P); }
#define NBFACETRI_H1(P)
Number of dofs on face for H1 space.

◆ fNBFACETRI_HCURL()

int MoFEM::fNBFACETRI_HCURL ( int  P)

Definition at line 51 of file CoreDataStructures.hpp.

51 { return NBFACETRI_HCURL(P); }
#define NBFACETRI_HCURL(P)

◆ fNBFACETRI_L2()

int MoFEM::fNBFACETRI_L2 ( int  P)

Definition at line 32 of file CoreDataStructures.hpp.

32 { return NBFACETRI_L2(P); }
#define NBFACETRI_L2(P)

◆ fNBVERTEX_H1()

int MoFEM::fNBVERTEX_H1 ( int  P)

number of approx. functions for H1 space on vertex

Definition at line 37 of file CoreDataStructures.hpp.

37 { return (P==1) ? 1 : 0; }

◆ fNBVERTEX_HCURL()

int MoFEM::fNBVERTEX_HCURL ( int  P)

number of approx. functions for HCURL space on vertex

Definition at line 49 of file CoreDataStructures.hpp.

49 { (void)P; return 0; }

◆ fNBVERTEX_HDIV()

int MoFEM::fNBVERTEX_HDIV ( int  P)

number of approx. functions for HDIV space on vertex

zero number of digrees of freedom on vertex for that space

Definition at line 57 of file CoreDataStructures.hpp.

57 { (void)P; return 0; }

◆ fNBVERTEX_L2()

int MoFEM::fNBVERTEX_L2 ( int  P)

Definition at line 30 of file CoreDataStructures.hpp.

30 { (void)P; return 0; }

◆ fNBVOLUMEPRISM_H1()

int MoFEM::fNBVOLUMEPRISM_H1 ( int  P)

Definition at line 45 of file CoreDataStructures.hpp.

45 { return NBVOLUMEPRISM_H1(P); }
#define NBVOLUMEPRISM_H1(P)

◆ fNBVOLUMETET_AINSWORTH_HDIV()

int MoFEM::fNBVOLUMETET_AINSWORTH_HDIV ( int  P)

number of approx. functions for HDIV space on volume

Definition at line 63 of file CoreDataStructures.hpp.

63 { return NBVOLUMETET_AINSWORTH_HDIV(P); }
#define NBVOLUMETET_AINSWORTH_HDIV(P)

◆ fNBVOLUMETET_DEMKOWICZ_HDIV()

int MoFEM::fNBVOLUMETET_DEMKOWICZ_HDIV ( int  P)

number of approx. functions for HDIV space on volume

Definition at line 67 of file CoreDataStructures.hpp.

67 { return NBVOLUMETET_DEMKOWICZ_HDIV(P); }
#define NBVOLUMETET_DEMKOWICZ_HDIV(P)

◆ fNBVOLUMETET_H1()

int MoFEM::fNBVOLUMETET_H1 ( int  P)

number of approx. functions for H1 space on volume

Definition at line 44 of file CoreDataStructures.hpp.

44 { return NBVOLUMETET_H1(P); }
#define NBVOLUMETET_H1(P)
Number of dofs on volume for H1 space.

◆ fNBVOLUMETET_HCURL()

int MoFEM::fNBVOLUMETET_HCURL ( int  P)

Definition at line 52 of file CoreDataStructures.hpp.

52 { return NBVOLUMETET_HCURL(P); }
#define NBVOLUMETET_HCURL(P)

◆ fNBVOLUMETET_L2()

int MoFEM::fNBVOLUMETET_L2 ( int  P)

Definition at line 31 of file CoreDataStructures.hpp.

31 { return NBVOLUMETET_L2(P); }
#define NBVOLUMETET_L2(P)
Number of dofs for L2 space.

◆ get_fe_dof_view()

template<typename FE_DOFS , typename MOFEM_DOFS , typename MOFEM_DOFS_VIEW >
static MoFEMErrorCode MoFEM::get_fe_dof_view ( const FE_DOFS &  fe_dofs_view,
const MOFEM_DOFS &  mofem_dofs,
MOFEM_DOFS_VIEW &  mofem_dofs_view,
const int  operation_type 
)
static

Definition at line 1070 of file FEMultiIndices.cpp.

1071  {
1073  typename boost::multi_index::index<MOFEM_DOFS, Unique_mi_tag>::type::iterator
1074  mofem_it,
1075  mofem_it_end;
1076  typename FE_DOFS::iterator it, it_end;
1077  if (operation_type == moab::Interface::UNION) {
1078  mofem_it = mofem_dofs.template get<Unique_mi_tag>().begin();
1079  mofem_it_end = mofem_dofs.template get<Unique_mi_tag>().end();
1080  it = fe_dofs_view.begin();
1081  it_end = fe_dofs_view.end();
1082  for (; it != it_end; it++) {
1083  const UId &globalUid = (*it)->getGlobalUniqueId();
1084  if (mofem_it != mofem_it_end) {
1085  if ((*mofem_it)->getGlobalUniqueId() != globalUid) {
1086  mofem_it = mofem_dofs.template get<Unique_mi_tag>().find(globalUid);
1087  } // else lucky guess
1088  } else {
1089  mofem_it = mofem_dofs.template get<Unique_mi_tag>().find(globalUid);
1090  }
1091  if (mofem_it != mofem_it_end) {
1092  mofem_dofs_view.insert(mofem_dofs_view.end(), *mofem_it);
1093  mofem_it++;
1094  }
1095  }
1096  } else {
1097  SETERRQ(PETSC_COMM_SELF, MOFEM_NOT_IMPLEMENTED, "not implemented");
1098  }
1100 }
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474
uint128_t UId
Unique Id.
Definition: Common.hpp:136

◆ get_porblem_col_indices()

static MoFEMErrorCode MoFEM::get_porblem_col_indices ( const ForcesAndSourcesCore fe_ptr,
const EntityType  type,
const int  side,
const std::string  field_name,
VectorInt indices 
)
static

Definition at line 1177 of file ForcesAndSourcesCore.cpp.

1178  {
1180 
1181 
1182 
1183  switch(type) {
1184  case MBVERTEX:
1185  ierr = fe_ptr->getProblemNodesColIndices(field_name,indices); CHKERRG(ierr);
1186  break;
1187  default:
1188  ierr = fe_ptr->getProblemTypeColIndices(field_name,type,side,indices); CHKERRG(ierr);
1189  }
1190 
1192 }
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:511
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474

◆ get_porblem_row_indices()

static MoFEMErrorCode MoFEM::get_porblem_row_indices ( const ForcesAndSourcesCore fe_ptr,
const EntityType  type,
const int  side,
const std::string  field_name,
VectorInt indices 
)
static

Definition at line 1160 of file ForcesAndSourcesCore.cpp.

1161  {
1163 
1164 
1165 
1166  switch(type) {
1167  case MBVERTEX:
1168  ierr = fe_ptr->getProblemNodesRowIndices(field_name,indices); CHKERRG(ierr);
1169  break;
1170  default:
1171  ierr = fe_ptr->getProblemTypeRowIndices(field_name,type,side,indices); CHKERRG(ierr);
1172  }
1173 
1175 }
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:511
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474

◆ get_tag_ptr()

void* MoFEM::get_tag_ptr ( SequenceManager *  sequence_manager,
Tag  th,
EntityHandle  ent,
int tag_size 
)

Definition at line 43 of file EntsMultiIndices.cpp.

44  {
45  ApproximationOrder *ret_val;
46  if (th->get_storage_type() == MB_TAG_SPARSE) {
47  rval = static_cast<SparseTag *>(th)->get_data(
48  sequence_manager, &error, &ent, 1, (const void **)&ret_val, tag_size);
50  return ret_val;
51  } else {
52  rval = static_cast<DenseTag *>(th)->get_data(
53  sequence_manager, &error, &ent, 1, (const void **)&ret_val, tag_size);
55  return ret_val;
56  }
57 }
#define MOAB_THROW(a)
Check error code of MoAB function and throw MoFEM exception.
Definition: definitions.h:569
static MoFEMErrorCodeGeneric< moab::ErrorCode > rval
Definition: Common.hpp:78
static moab::Error error
int ApproximationOrder
Approximation on the entity.
Definition: Common.hpp:131

◆ getMaxOrder()

template<typename DOFMULTIINDEX >
static int MoFEM::getMaxOrder ( const DOFMULTIINDEX &  dof_multi_index)
static

Definition at line 153 of file ForcesAndSourcesCore.cpp.

155  {
156  int max_order = 0;
157  typename DOFMULTIINDEX::iterator dit,hi_dit;
158  dit = dof_multi_index.begin();
159  hi_dit = dof_multi_index.end();
160  for(;dit!=hi_dit;dit++) {
161  if((*dit)->getEntDofIdx()!=0) continue;
162  int dit_max_order = (*dit)->getMaxOrder();
163  max_order = (max_order>dit_max_order) ? max_order : dit_max_order;
164  }
165  return max_order;
166 }

◆ getParentEnt()

MoFEMErrorCode MoFEM::getParentEnt ( Interface moab,
Range  ents,
std::vector< EntityHandle vec_patent_ent 
)

Definition at line 122 of file EntsMultiIndices.cpp.

123  {
124 
126  Tag th_ref_parent_handle;
127  rval = moab.tag_get_handle("_RefParentHandle", th_ref_parent_handle);
129  vec_patent_ent.resize(ents.size());
130  rval =
131  moab.tag_get_data(th_ref_parent_handle, ents, &*vec_patent_ent.begin());
134 }
#define CHKERRQ_MOAB(a)
check error code of MoAB function
Definition: definitions.h:482
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474
static MoFEMErrorCodeGeneric< moab::ErrorCode > rval
Definition: Common.hpp:78

◆ getTensor0FormData< double, DoubleAllocator >()

Definition at line 66 of file DataStructures.cpp.

68  {
69  return FTensor::Tensor0<double*>(&*data.data().begin());
70 }
T data[(layout==column_major) ? Tensor_Dim0 :Tensor_Dim1][(layout==column_major) ? Tensor_Dim1 :Tensor_Dim0]

◆ getTensor1FormData< 2, double, ublas::row_major, DoubleAllocator >()

Definition at line 83 of file DataStructures.cpp.

85  {
86  if(data.size1()!=2) {
87  THROW_MESSAGE("Wrong size of data matrix");
88  }
89  return FTensor::Tensor1<double*,2>(&data(0,0),&data(1,0));
90 }
#define THROW_MESSAGE(a)
Throw MoFEM exception.
Definition: definitions.h:584
T data[(layout==column_major) ? Tensor_Dim0 :Tensor_Dim1][(layout==column_major) ? Tensor_Dim1 :Tensor_Dim0]

◆ getTensor1FormData< 3, double, ublas::row_major, DoubleAllocator >()

Definition at line 73 of file DataStructures.cpp.

75  {
76  if(data.size1()!=3) {
77  THROW_MESSAGE("Wrong size of data matrix");
78  }
79  return FTensor::Tensor1<double*,3>(&data(0,0),&data(1,0),&data(2,0));
80 }
#define THROW_MESSAGE(a)
Throw MoFEM exception.
Definition: definitions.h:584
T data[(layout==column_major) ? Tensor_Dim0 :Tensor_Dim1][(layout==column_major) ? Tensor_Dim1 :Tensor_Dim0]

◆ getTensor2FormData< 3, 2, double, ublas::row_major, DoubleAllocator >()

Definition at line 105 of file DataStructures.cpp.

107  {
108  if(data.size1()!=6) {
109  THROW_MESSAGE("Wrong size of data matrix");
110  }
112  &data(0,0),&data(1,0),&data(2,0),&data(3,0),&data(4,0),&data(5,0)
113  );
114 }
#define THROW_MESSAGE(a)
Throw MoFEM exception.
Definition: definitions.h:584
T data[(layout==column_major) ? Tensor_Dim0 :Tensor_Dim1][(layout==column_major) ? Tensor_Dim1 :Tensor_Dim0]

◆ getTensor2FormData< 3, 3, double, ublas::row_major, DoubleAllocator >()

Definition at line 93 of file DataStructures.cpp.

95  {
96  if(data.size1()!=9) {
97  THROW_MESSAGE("Wrong size of data matrix");
98  }
100  &data(0,0),&data(1,0),&data(2,0),&data(3,0),&data(4,0),&data(5,0),&data(6,0),&data(7,0),&data(8,0)
101  );
102 }
#define THROW_MESSAGE(a)
Throw MoFEM exception.
Definition: definitions.h:584
T data[(layout==column_major) ? Tensor_Dim0 :Tensor_Dim1][(layout==column_major) ? Tensor_Dim1 :Tensor_Dim0]

◆ Hcurl_BubbleFaceFunctions_MBTET()

MoFEMErrorCode MoFEM::Hcurl_BubbleFaceFunctions_MBTET ( int faces_nodes,
int p,
double N,
double diffN,
double phi_f[4],
double diff_phi_f[4],
int  nb_integration_pts,
PetscErrorCode(*)(int p, double s, double *diff_s, double *L, double *diffL, const int dim)  base_polynomials 
)

Face edge base functions of Hcurl space on face on tetrahedral.

On each face we have P*(P-1) base functions and are 4 faces.

See NBFACETRI_EDGE_HCURL

Parameters
face_nodesarray [4*3] of local indices of face nodes
papproximation order
Narray shape functions evaluated at each integration point
diffNderivatives of nodal shape functions
phi_f[4]calculated shape functions for each face
diff_phi_v[4]derivatives of shape functions for each face
nb_integration_ptsnumber of shape functions
base_polynomialspolynomial base function (f.e. Legendre of Lobatto)
Returns
error code

Definition at line 500 of file Hcurl.cpp.

503  {
504 
506 
509 
510  // double coords[] = { 0,0,0, 1,0,0, 0,1,0, 0,0,1 };
511  // FTensor::Tensor1<double*,3> t_coords[4] = {
512  // FTensor::Tensor1<double*,3>(&coords[0],&coords[ 1],&coords[ 2]),
513  // FTensor::Tensor1<double*,3>(&coords[3],&coords[ 4],&coords[ 5]),
514  // FTensor::Tensor1<double*,3>(&coords[6],&coords[ 7],&coords[ 8]),
515  // FTensor::Tensor1<double*,3>(&coords[9],&coords[10],&coords[11])
516  // };
517  FTensor::Tensor1<double*,3> t_node_diff_ksi[4] = {
518  FTensor::Tensor1<double*,3>(&diffN[0],&diffN[ 1],&diffN[ 2]),
519  FTensor::Tensor1<double*,3>(&diffN[3],&diffN[ 4],&diffN[ 5]),
520  FTensor::Tensor1<double*,3>(&diffN[6],&diffN[ 7],&diffN[ 8]),
521  FTensor::Tensor1<double*,3>(&diffN[9],&diffN[10],&diffN[11])
522  };
523  FTensor::Tensor1<double,3> t_diff_ksi0i,t_diff_ksi0j;
524  FTensor::Tensor1<double,3> diff_beta_0ij;
525 
528 
529  for(int ff = 0;ff!=4;ff++) {
530 
531  if(NBFACETRI_FACE_HCURL(p[ff])==0) continue;
532 
533  int n0 = faces_nodes[3*ff+0];
534  int n1 = faces_nodes[3*ff+1];
535  int n2 = faces_nodes[3*ff+2];
536 
537  // tou_0i(i) = t_coords[n1](i)-t_coords[n0](i);
538  // tou_0j(i) = t_coords[n2](i)-t_coords[n0](i);
539  tou_0i(i) = t_node_diff_ksi[n1](i)-t_node_diff_ksi[n0](i);
540  tou_0j(i) = t_node_diff_ksi[n2](i)-t_node_diff_ksi[n0](i);
541 
542  t_diff_ksi0i(i) = t_node_diff_ksi[n1](i)-t_node_diff_ksi[n0](i);
543  t_diff_ksi0j(i) = t_node_diff_ksi[n2](i)-t_node_diff_ksi[n0](i);
544 
545  double psi_l_0i[p[ff]+1],diff_psi_l_0i[3*p[ff]+3];
546  double psi_l_0j[p[ff]+1],diff_psi_l_0j[3*p[ff]+3];
547 
549  &phi_f[ff][0],&phi_f[ff][1],&phi_f[ff][2],3
550  );
551  FTensor::Tensor2<double*,3,3> t_diff_phi_f(
552  &diff_phi_f[ff][0],&diff_phi_f[ff][3],&diff_phi_f[ff][6],
553  &diff_phi_f[ff][1],&diff_phi_f[ff][4],&diff_phi_f[ff][7],
554  &diff_phi_f[ff][2],&diff_phi_f[ff][5],&diff_phi_f[ff][8],9
555  );
557 
558  for(int ii = 0;ii!=nb_integration_pts;ii++) {
559 
560  const int node_shift = ii*4;
561  const double beta_0ij = N[node_shift+n0]*N[node_shift+n1]*N[node_shift+n2];
562  diff_beta_0ij(i) =
563  t_node_diff_ksi[n0](i)*N[node_shift+n1]*N[node_shift+n2]+
564  N[node_shift+n0]*t_node_diff_ksi[n1](i)*N[node_shift+n2]+
565  N[node_shift+n0]*N[node_shift+n1]*t_node_diff_ksi[n2](i);
566 
567  const double ksi_0i = N[node_shift+n1]-N[node_shift+n0];
568  ierr = base_polynomials(p[ff],ksi_0i,&t_diff_ksi0i(0),psi_l_0i,diff_psi_l_0i,3); CHKERRG(ierr);
569  const double ksi_0j = N[node_shift+n2]-N[node_shift+n0];
570  ierr = base_polynomials(p[ff],ksi_0j,&t_diff_ksi0j(0),psi_l_0j,diff_psi_l_0j,3); CHKERRG(ierr);
571 
572  int cc = 0;
573  for(int oo = 0;oo<=(p[ff]-3);oo++) {
574  FTensor::Tensor1<double*,3> t_diff_psi_l_0i(
575  &diff_psi_l_0i[0],&diff_psi_l_0i[p[ff]+1],&diff_psi_l_0i[2*p[ff]+2],1
576  );
577  for(int pp0 = 0;pp0<=oo;pp0++) {
578  const int pp1 = oo-pp0;
579  if(pp1>=0) {
580  FTensor::Tensor1<double*,3> t_diff_psi_l_0j(
581  &diff_psi_l_0j[pp1],&diff_psi_l_0j[p[ff]+1+pp1],&diff_psi_l_0j[2*p[ff]+2+pp1],1
582  );
583  // base functions
584  const double a = beta_0ij*psi_l_0i[pp0]*psi_l_0j[pp1];
585  t_phi_f(i) = a*tou_0i(i);
586  ++t_phi_f;
587  ++cc;
588  t_phi_f(i) = a*tou_0j(i);
589  ++t_phi_f;
590  ++cc;
591  // diff base functions
592  t_b(j) =
593  diff_beta_0ij(j)*psi_l_0i[pp0]*psi_l_0j[pp1]+
594  beta_0ij*t_diff_psi_l_0i(j)*psi_l_0j[pp1]+
595  beta_0ij*psi_l_0i[pp0]*t_diff_psi_l_0j(j);
596  t_diff_phi_f(i,j) = t_b(j)*tou_0i(i);
597  ++t_diff_phi_f;
598  t_diff_phi_f(i,j) = t_b(j)*tou_0j(i);
599  ++t_diff_phi_f;
600  ++t_diff_psi_l_0i;
601  }
602  }
603  }
604  const int nb_base_fun_on_face = NBFACETRI_FACE_HCURL(p[ff]);
605  if(cc!=nb_base_fun_on_face) {
606  SETERRQ2(
607  PETSC_COMM_SELF,
609  "Wrong number of base functions %d != %d",
610  cc,nb_base_fun_on_face
611  );
612  }
613 
614  }
615 
616  }
618 }
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:511
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474
#define NBFACETRI_FACE_HCURL(P)

◆ Hcurl_BubbleFaceFunctions_MBTET_ON_FACE()

MoFEMErrorCode MoFEM::Hcurl_BubbleFaceFunctions_MBTET_ON_FACE ( int faces_nodes,
int  p,
double N,
double diffN,
double phi_f,
double diff_phi_f,
int  nb_integration_pts,
PetscErrorCode(*)(int p, double s, double *diff_s, double *L, double *diffL, const int dim)  base_polynomials 
)

Face edge base functions of Hcurl space on face.

On each face we have P*(P-1) base functions and are 4 faces.

See NBFACETRI_EDGE_HCURL

Parameters
face_nodesarray [4*3] of local indices of face nodes
papproximation order
Narray shape functions evaluated at each integration point
diffNderivatives of nodal shape functions
phi_f[4]calculated shape functions for each face
diff_phi_v[4]derivatives of shape functions for each face
nb_integration_ptsnumber of shape functions
base_polynomialspolynomial base function (f.e. Legendre of Lobatto)
Returns
error code

Definition at line 620 of file Hcurl.cpp.

623  {
624 
626 
627  double zero = 0;
628  FTensor::Tensor2<double*,3,3> t_node_diff_ksi(
629  &diffN[0],&diffN[ 1],&zero,
630  &diffN[2],&diffN[ 3],&zero,
631  &diffN[4],&diffN[ 5],&zero
632  );
633 
636 
638 
642 
643  const int node0 = faces_nodes[0];
644  const int node1 = faces_nodes[1];
645  const int node2 = faces_nodes[2];
646 
649 
650  tou_0i(i) = t_node_diff_ksi(N1,i)-t_node_diff_ksi(N0,i);;
651  tou_0j(i) = t_node_diff_ksi(N2,i)-t_node_diff_ksi(N0,i);;
652 
653  double psi_l_0i[p+1],psi_l_0j[p+1];
654  double diff_psi_l_0i[2*p+2],diff_psi_l_0j[2*p+2];
655  FTensor::Tensor1<double*,3> t_phi_f(&phi_f[0],&phi_f[1],&phi_f[2],3);
656  FTensor::Tensor2<double*,3,2> t_diff_phi_f(
657  &diff_phi_f[HCURL0_0],&diff_phi_f[HCURL0_1],
658  &diff_phi_f[HCURL1_0],&diff_phi_f[HCURL1_1],
659  &diff_phi_f[HCURL2_0],&diff_phi_f[HCURL2_1],6
660  );
661 
662  double diff_ksi_0i[] = {
663  t_node_diff_ksi(node1,0)-t_node_diff_ksi(node0,0),
664  t_node_diff_ksi(node1,1)-t_node_diff_ksi(node0,1)
665  };
666  double diff_ksi_0j[] = {
667  t_node_diff_ksi(node2,0)-t_node_diff_ksi(node0,0),
668  t_node_diff_ksi(node2,1)-t_node_diff_ksi(node0,1)
669  };
670 
671  for(int ii = 0;ii!=nb_integration_pts;ii++) {
672 
673  const int node_shift = ii*3;
674  const double n0 = N[node_shift+node0];
675  const double n1 = N[node_shift+node1];
676  const double n2 = N[node_shift+node2];
677 
678  const double beta_0ij = n0*n1*n2;
679  FTensor::Tensor1<double,2> diff_beta_0ij(
680  t_node_diff_ksi(node0,0)*n1*n2+n0*t_node_diff_ksi(node1,0)*n2+n0*n1*t_node_diff_ksi(node2,0),
681  t_node_diff_ksi(node0,1)*n1*n2+n0*t_node_diff_ksi(node1,1)*n2+n0*n1*t_node_diff_ksi(node2,1)
682  );
683 
684  const double ksi_0i = N[node_shift+node1]-N[node_shift+node0];
685  ierr = base_polynomials(p,ksi_0i,diff_ksi_0i,psi_l_0i,diff_psi_l_0i,2); CHKERRG(ierr);
686  const double ksi_0j = N[node_shift+node2]-N[node_shift+node0];
687  ierr = base_polynomials(p,ksi_0j,diff_ksi_0j,psi_l_0j,diff_psi_l_0j,2); CHKERRG(ierr);
688 
689  int cc = 0;
691  for(int oo = 0;oo<=(p-3);oo++) {
692  for(int pp0 = 0;pp0<=oo;pp0++) {
693  const int pp1 = oo-pp0;
694  if(pp1>=0) {
695  FTensor::Tensor1<double,2> t_diff_psi_l_0i(
696  diff_psi_l_0i[0+pp0],diff_psi_l_0i[p+1+pp0]
697  );
698  FTensor::Tensor1<double,2> t_diff_psi_l_0j(
699  diff_psi_l_0j[0+pp1],diff_psi_l_0j[p+1+pp1]
700  );
701  const double a = beta_0ij*psi_l_0i[pp0]*psi_l_0j[pp1];
702  t_diff_a(j) =
703  diff_beta_0ij(j)*psi_l_0i[pp0]*psi_l_0j[pp1]+
704  beta_0ij*psi_l_0i[pp0]*t_diff_psi_l_0j(j)+
705  beta_0ij*psi_l_0j[pp1]*t_diff_psi_l_0i(j);
706 
707  t_phi_f(i) = a*tou_0i(i);
708  t_diff_phi_f(i,j) = tou_0i(i)*t_diff_a(j);
709  ++t_phi_f;
710  ++t_diff_phi_f;
711  ++cc;
712  t_phi_f(i) = a*tou_0j(i);
713  t_diff_phi_f(i,j) = tou_0j(i)*t_diff_a(j);
714  ++t_phi_f;
715  ++t_diff_phi_f;
716  ++cc;
717  }
718  }
719  }
720 
721  const int nb_base_fun_on_face = NBFACETRI_FACE_HCURL(p);
722  if(cc!=nb_base_fun_on_face) {
723  SETERRQ2(
724  PETSC_COMM_SELF,
726  "Wrong number of base functions %d != %d",
727  cc,nb_base_fun_on_face
728  );
729  }
730 
731  }
732 
734 }
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:511
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474
#define NBFACETRI_FACE_HCURL(P)

◆ Hcurl_EdgeBasedFaceFunctions_MBTET()

MoFEMErrorCode MoFEM::Hcurl_EdgeBasedFaceFunctions_MBTET ( int faces_nodes,
int p,
double N,
double diffN,
double phi_f_e[4][3],
double diff_phi_f_e[4][3],
int  nb_integration_pts,
PetscErrorCode(*)(int p, double s, double *diff_s, double *L, double *diffL, const int dim)  base_polynomials 
)

Face edge base functions of Hcurl space on tetrahedral.

On each edge we have (P-1) base functions, and each face has 3 edges and are 4 faces on tetrahedral.

See NBFACETRI_EDGE_HCURL

Parameters
face_nodesarray [4*3] of local indices of face nodes
papproximation order
Narray shape functions evaluated at each integration point
diffNderivatives of nodal shape functions
phi_f[4]calculated shape functions for each face
diff_phi_v[4]derivatives of shape functions for each face
nb_integration_ptsnumber of shape functions
base_polynomialspolynomial base function (f.e. Legendre of Lobatto)
Returns
error code

Definition at line 329 of file Hcurl.cpp.

332  {
333 
335  const int edges[3][2] = { {0,1}, {1,2}, {2,0} };
336 
339 
340  FTensor::Tensor1<double*,3> t_node_diff_ksi[4] = {
341  FTensor::Tensor1<double*,3>(&diffN[0],&diffN[ 1],&diffN[ 2]),
342  FTensor::Tensor1<double*,3>(&diffN[3],&diffN[ 4],&diffN[ 5]),
343  FTensor::Tensor1<double*,3>(&diffN[6],&diffN[ 7],&diffN[ 8]),
344  FTensor::Tensor1<double*,3>(&diffN[9],&diffN[10],&diffN[11])
345  };
346  FTensor::Tensor1<double,3> t_edge_diff_ksi;
347  FTensor::Tensor1<double,3> t_diff_beta_e;
348 
349  for(int ff = 0;ff!=4;ff++) {
350 
351  const int o_nodes[3] = {
352  faces_nodes[3*ff+2],faces_nodes[3*ff+0],faces_nodes[3*ff+1]
353  };
354  FTensor::Tensor1<double*,3> t_opposite_node_diff[3] = {
355  FTensor::Tensor1<double*,3>(&diffN[3*o_nodes[0]+0],&diffN[3*o_nodes[0]+1],&diffN[3*o_nodes[0]+2]),
356  FTensor::Tensor1<double*,3>(&diffN[3*o_nodes[1]+0],&diffN[3*o_nodes[1]+1],&diffN[3*o_nodes[1]+2]),
357  FTensor::Tensor1<double*,3>(&diffN[3*o_nodes[2]+0],&diffN[3*o_nodes[2]+1],&diffN[3*o_nodes[2]+2])
358  };
359  double psi_l[p[ff]+1],diff_psi_l[3*p[ff]+3];
360 
361  const int nb_base_fun_on_face = NBFACETRI_EDGE_HCURL(p[ff]);
362  // cerr << nb_base_fun_on_face << " " << p[ff] << endl;
363  if(nb_base_fun_on_face==0) continue;
364 
365  for(int ee = 0;ee!=3;ee++) {
366 
367  FTensor::Tensor1<double*,3> t_face_edge_base(
368  &phi_f_e[ff][ee][0],&phi_f_e[ff][ee][1],&phi_f_e[ff][ee][2],3
369  );
370  FTensor::Tensor2<double*,3,3> t_diff_face_edge_base(
371  &diff_phi_f_e[ff][ee][0],&diff_phi_f_e[ff][ee][3],&diff_phi_f_e[ff][ee][6],
372  &diff_phi_f_e[ff][ee][1],&diff_phi_f_e[ff][ee][4],&diff_phi_f_e[ff][ee][7],
373  &diff_phi_f_e[ff][ee][2],&diff_phi_f_e[ff][ee][5],&diff_phi_f_e[ff][ee][8],9
374  );
375  const int en[] = { faces_nodes[3*ff+edges[ee][0]],faces_nodes[3*ff+edges[ee][1]] };
376  t_edge_diff_ksi(i) = t_node_diff_ksi[en[1]](i)-t_node_diff_ksi[en[0]](i);
377 
378  for(int ii = 0;ii!=nb_integration_pts;ii++) {
379 
380  const int node_shift = ii*4;
381  const double n[] = {
382  N[node_shift+faces_nodes[3*ff+edges[ee][0]]],
383  N[node_shift+faces_nodes[3*ff+edges[ee][1]]]
384  };
385  const double ksi_0i = n[1]-n[0];
386  ierr = base_polynomials(p[ff],ksi_0i,&t_edge_diff_ksi(0),psi_l,diff_psi_l,3); CHKERRG(ierr);
387  FTensor::Tensor1<double*,3> t_diff_psi_l(&diff_psi_l[0],&diff_psi_l[p[ff]+1],&diff_psi_l[2*p[ff]+2],1);
388 
389  const double beta_e = n[0]*n[1];
390  t_diff_beta_e(j) = t_node_diff_ksi[en[0]](j)*n[1]+n[0]*t_node_diff_ksi[en[1]](j);
391 
392  for(int ll = 0;ll!=nb_base_fun_on_face;ll++) {
393  // if(ll == nb_base_fun_on_face-1) cerr << psi_l[ll] << endl;
394 
395  t_face_edge_base(i) = beta_e*psi_l[ll]*t_opposite_node_diff[ee](i);
396  ++t_face_edge_base;
397 
398  t_diff_face_edge_base(i,j) =
399  (beta_e*t_diff_psi_l(j)+t_diff_beta_e(j)*psi_l[ll])*t_opposite_node_diff[ee](i);
400 
401  ++t_diff_face_edge_base;
402  ++t_diff_psi_l;
403  }
404 
405  }
406  }
407  }
408 
410 }
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
#define NBFACETRI_EDGE_HCURL(P)
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:511
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474

◆ Hcurl_EdgeBasedFaceFunctions_MBTET_ON_FACE()

MoFEMErrorCode MoFEM::Hcurl_EdgeBasedFaceFunctions_MBTET_ON_FACE ( int faces_nodes,
int  p,
double N,
double diffN,
double phi_f_e[3],
double diff_phi_f_e[3],
int  nb_integration_pts,
PetscErrorCode(*)(int p, double s, double *diff_s, double *L, double *diffL, const int dim)  base_polynomials 
)

Face edge base functions of Hcurl space.

On each edge we have (P-1) base functions, and each face has 3 edges and are 4 faces on tetrahedral.

See NBFACETRI_EDGE_HCURL

Parameters
face_nodesarray [4*3] of local indices of face nodes
papproximation order
Narray shape functions evaluated at each integration point
diffNderivatives of nodal shape functions
phi_f[4]calculated shape functions for each face
diff_phi_v[4]derivatives of shape functions for each face
nb_integration_ptsnumber of shape functions
base_polynomialspolynomial base function (f.e. Legendre of Lobatto)
Returns
error code

Definition at line 412 of file Hcurl.cpp.

415  {
416 
418 
419  const int nb_base_fun_on_face = NBFACETRI_EDGE_HCURL(p);
420  if(nb_base_fun_on_face==0) MoFEMFunctionReturnHot(0);
421 
422  const int edges[3][2] = { {0,1}, {1,2}, {2,0} };
423 
426 
427  const int o_nodes[3] = { 2,0,1 };
428  FTensor::Tensor2<double,3,3> t_opposite_node_diff(
429  diffN[2*o_nodes[0]+0],diffN[2*o_nodes[0]+1],0,
430  diffN[2*o_nodes[1]+0],diffN[2*o_nodes[1]+1],0,
431  diffN[2*o_nodes[2]+0],diffN[2*o_nodes[2]+1],0
432  );
433  double psi_l[p+1];
434  double diff_psi_l[2*p+2];
435 
436  FTensor::Tensor1<double*,3> t_face_edge_base[3] = {
437  FTensor::Tensor1<double*,3>(&phi_f_e[0][HCURL0],&phi_f_e[0][HCURL1],&phi_f_e[0][HCURL2],3),
438  FTensor::Tensor1<double*,3>(&phi_f_e[1][HCURL0],&phi_f_e[1][HCURL1],&phi_f_e[1][HCURL2],3),
439  FTensor::Tensor1<double*,3>(&phi_f_e[2][HCURL0],&phi_f_e[2][HCURL1],&phi_f_e[2][HCURL2],3),
440  };
441  FTensor::Tensor2<double*,3,2> t_diff_face_edge_base[3] = {
443  &diff_phi_f_e[0][HCURL0_0],&diff_phi_f_e[0][HCURL0_1],
444  &diff_phi_f_e[0][HCURL1_0],&diff_phi_f_e[0][HCURL1_1],
445  &diff_phi_f_e[0][HCURL2_0],&diff_phi_f_e[0][HCURL2_1],6
446  ),
448  &diff_phi_f_e[1][HCURL0_0],&diff_phi_f_e[1][HCURL0_1],
449  &diff_phi_f_e[1][HCURL1_0],&diff_phi_f_e[1][HCURL1_1],
450  &diff_phi_f_e[1][HCURL2_0],&diff_phi_f_e[1][HCURL2_1],6
451  ),
453  &diff_phi_f_e[2][HCURL0_0],&diff_phi_f_e[2][HCURL0_1],
454  &diff_phi_f_e[2][HCURL1_0],&diff_phi_f_e[2][HCURL1_1],
455  &diff_phi_f_e[2][HCURL2_0],&diff_phi_f_e[2][HCURL2_1],6
456  )
457  };
458 
459  for(int ee = 0;ee!=3;ee++) {
460 
461  const int node0 = faces_nodes[edges[ee][0]];
462  const int node1 = faces_nodes[edges[ee][1]];
463  double diff_ksi0i[] = {
464  diffN[2*node1+0]-diffN[2*node0+0],
465  diffN[2*node1+1]-diffN[2*node0+1]
466  };
467 
468  for(int ii = 0;ii!=nb_integration_pts;ii++) {
469 
470  const int node_shift = ii*3;
471  const double n0 = N[node_shift+node0];
472  const double n1 = N[node_shift+node1];
473  const double ksi_0i = n1-n0;
474  ierr = base_polynomials(p,ksi_0i,diff_ksi0i,psi_l,diff_psi_l,2); CHKERRG(ierr);
475  const double beta_e = n0*n1;
476  FTensor::Tensor1<double,2> t_diff_beta_e(
477  diffN[2*node0+0]*n1+n0*diffN[2*node1+0],
478  diffN[2*node0+1]*n1+n0*diffN[2*node1+1]
479  );
480  FTensor::Tensor1<double*,2> t_diff_psi_l(
481  &diff_psi_l[0],&diff_psi_l[p+1],1
482  );
483 
484  for(int ll = 0;ll!=nb_base_fun_on_face;ll++) {
485  t_face_edge_base[ee](i) = beta_e*psi_l[ll]*t_opposite_node_diff(ee,i);
486  t_diff_face_edge_base[ee](i,j) =
487  beta_e*t_opposite_node_diff(ee,i)*t_diff_psi_l(j)+
488  psi_l[ll]*t_opposite_node_diff(ee,i)*t_diff_beta_e(j);
489  ++t_face_edge_base[ee];
490  ++t_diff_face_edge_base[ee];
491  ++t_diff_psi_l;
492  }
493 
494  }
495  }
496 
498 }
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
#define NBFACETRI_EDGE_HCURL(P)
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:511
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474

◆ Hcurl_EdgeBaseFunctions_MBTET()

MoFEMErrorCode MoFEM::Hcurl_EdgeBaseFunctions_MBTET ( int sense,
int p,
double N,
double diffN,
double edgeN[],
double diff_edgeN[],
int  nb_integration_pts,
PetscErrorCode(*)(int p, double s, double *diff_s, double *L, double *diffL, const int dim)  base_polynomials 
)

Edge based H-curl base functions on tetrahedral.

Function generates hierarchical base of h-curl comforting functions on tetrahedral edge. For more details see [2].

On each tetrahedral's edge we have P+1 functions. See NBEDGE_HCURL

Parameters
sensesense fo edge (i.e. unique orientation)
parray of oder for each edge
Narray shape functions evaluated at each integration point
diffNderivatives of shape functions
edgeNbase functions on edges
diff_edgeNderivatives of edge shape functions
nb_integration_ptsnumber of integration points
base_polynomialspolynomial base function (f.e. Legendre of Lobatto)
Returns
error code

Definition at line 22 of file Hcurl.cpp.

25  {
27 
28  const int edges_nodes[6][2] = {
29  {0,1}, {1,2}, {2,0}, {0,3}, {1,3}, {2,3}
30  };
31  int P[6];
32  for(int ee = 0;ee!=6; ee++) P[ee] = NBEDGE_HCURL(p[ee]);
33 
36 
37  FTensor::Tensor1<double*,3> t_node_diff_ksi[4] = {
38  FTensor::Tensor1<double*,3>(&diffN[0],&diffN[ 1],&diffN[ 2]),
39  FTensor::Tensor1<double*,3>(&diffN[3],&diffN[ 4],&diffN[ 5]),
40  FTensor::Tensor1<double*,3>(&diffN[6],&diffN[ 7],&diffN[ 8]),
41  FTensor::Tensor1<double*,3>(&diffN[9],&diffN[10],&diffN[11])
42  };
43  double edge_diff_ksi[6][3];
44  FTensor::Tensor1<double*,3> t_edge_diff_ksi[6] = {
45  FTensor::Tensor1<double*,3>(&edge_diff_ksi[0][0],&edge_diff_ksi[0][1],&edge_diff_ksi[0][2]),
46  FTensor::Tensor1<double*,3>(&edge_diff_ksi[1][0],&edge_diff_ksi[1][1],&edge_diff_ksi[1][2]),
47  FTensor::Tensor1<double*,3>(&edge_diff_ksi[2][0],&edge_diff_ksi[2][1],&edge_diff_ksi[2][2]),
48  FTensor::Tensor1<double*,3>(&edge_diff_ksi[3][0],&edge_diff_ksi[3][1],&edge_diff_ksi[3][2]),
49  FTensor::Tensor1<double*,3>(&edge_diff_ksi[4][0],&edge_diff_ksi[4][1],&edge_diff_ksi[4][2]),
50  FTensor::Tensor1<double*,3>(&edge_diff_ksi[5][0],&edge_diff_ksi[5][1],&edge_diff_ksi[5][2])
51  };
52  for(int ee = 0;ee!=6;ee++) {
53  t_edge_diff_ksi[ee](i) = (
54  t_node_diff_ksi[edges_nodes[ee][1]](i)-t_node_diff_ksi[edges_nodes[ee][0]](i)
55  )*sense[ee];
56  }
57 
58  FTensor::Tensor1<double*,3> t_edge_n[6] = {
59  FTensor::Tensor1<double*,3>(&edge_n[0][0],&edge_n[0][1],&edge_n[0][2],3),
60  FTensor::Tensor1<double*,3>(&edge_n[1][0],&edge_n[1][1],&edge_n[1][2],3),
61  FTensor::Tensor1<double*,3>(&edge_n[2][0],&edge_n[2][1],&edge_n[2][2],3),
62  FTensor::Tensor1<double*,3>(&edge_n[3][0],&edge_n[3][1],&edge_n[3][2],3),
63  FTensor::Tensor1<double*,3>(&edge_n[4][0],&edge_n[4][1],&edge_n[4][2],3),
64  FTensor::Tensor1<double*,3>(&edge_n[5][0],&edge_n[5][1],&edge_n[5][2],3)
65  };
66  FTensor::Tensor2<double*,3,3> t_diff_edge_n[6] = {
68  &diff_edge_n[0][0],&diff_edge_n[0][3],&diff_edge_n[0][6],
69  &diff_edge_n[0][1],&diff_edge_n[0][4],&diff_edge_n[0][7],
70  &diff_edge_n[0][2],&diff_edge_n[0][5],&diff_edge_n[0][8],9
71  ),
73  &diff_edge_n[1][0],&diff_edge_n[1][3],&diff_edge_n[1][6],
74  &diff_edge_n[1][1],&diff_edge_n[1][4],&diff_edge_n[1][7],
75  &diff_edge_n[1][2],&diff_edge_n[1][5],&diff_edge_n[1][8],9
76  ),
78  &diff_edge_n[2][0],&diff_edge_n[2][3],&diff_edge_n[2][6],
79  &diff_edge_n[2][1],&diff_edge_n[2][4],&diff_edge_n[2][7],
80  &diff_edge_n[2][2],&diff_edge_n[2][5],&diff_edge_n[2][8],9
81  ),
83  &diff_edge_n[3][0],&diff_edge_n[3][3],&diff_edge_n[3][6],
84  &diff_edge_n[3][1],&diff_edge_n[3][4],&diff_edge_n[3][7],
85  &diff_edge_n[3][2],&diff_edge_n[3][5],&diff_edge_n[3][8],9
86  ),
88  &diff_edge_n[4][0],&diff_edge_n[4][3],&diff_edge_n[4][6],
89  &diff_edge_n[4][1],&diff_edge_n[4][4],&diff_edge_n[4][7],
90  &diff_edge_n[4][2],&diff_edge_n[4][5],&diff_edge_n[4][8],9
91  ),
93  &diff_edge_n[5][0],&diff_edge_n[5][3],&diff_edge_n[5][6],
94  &diff_edge_n[5][1],&diff_edge_n[5][4],&diff_edge_n[5][7],
95  &diff_edge_n[5][2],&diff_edge_n[5][5],&diff_edge_n[5][8],9
96  )
97  };
98  FTensor::Tensor1<double,3> t_psi_e_0,t_psi_e_1;
99  FTensor::Tensor2<double,3,3> t_diff_psi_e_0,t_diff_psi_e_1;
100 
101  for(int ii = 0;ii!=nb_integration_pts;ii++) {
102 
103  const int node_shift = ii*4;
104  for(int ee = 0;ee!=6;ee++) {
105 
106  if(P[ee]==0) continue;
107 
108  t_psi_e_0(i) =
109  (N[node_shift+edges_nodes[ee][1]]*t_node_diff_ksi[edges_nodes[ee][0]](i)-
110  N[node_shift+edges_nodes[ee][0]]*t_node_diff_ksi[edges_nodes[ee][1]](i))*sense[ee];
111  t_diff_psi_e_0(i,j) =
112  (t_node_diff_ksi[edges_nodes[ee][1]](j)*t_node_diff_ksi[edges_nodes[ee][0]](i)-
113  t_node_diff_ksi[edges_nodes[ee][0]](j)*t_node_diff_ksi[edges_nodes[ee][1]](i))*sense[ee];
114 
115  t_psi_e_1(i) =
116  N[node_shift+edges_nodes[ee][1]]*t_node_diff_ksi[edges_nodes[ee][0]](i)+
117  N[node_shift+edges_nodes[ee][0]]*t_node_diff_ksi[edges_nodes[ee][1]](i);
118  t_diff_psi_e_1(i,j) =
119  t_node_diff_ksi[edges_nodes[ee][1]](j)*t_node_diff_ksi[edges_nodes[ee][0]](i)+
120  t_node_diff_ksi[edges_nodes[ee][0]](j)*t_node_diff_ksi[edges_nodes[ee][1]](i);
121 
122  (t_edge_n[ee])(i) = t_psi_e_0(i);
123  ++(t_edge_n[ee]);
124  (t_edge_n[ee])(i) = t_psi_e_1(i);
125  ++(t_edge_n[ee]);
126 
127  (t_diff_edge_n[ee])(i,j) = t_diff_psi_e_0(i,j);
128  ++(t_diff_edge_n[ee]);
129  (t_diff_edge_n[ee])(i,j) = t_diff_psi_e_1(i,j);
130  ++(t_diff_edge_n[ee]);
131 
132  if(p[ee]>1) {
133 
134  const double ksi_0i = (N[node_shift+edges_nodes[ee][1]]-N[node_shift+edges_nodes[ee][0]])*sense[ee];
135  double psi_l[p[ee]+1],diff_psi_l[3*p[ee]+3];
136  ierr = base_polynomials(p[ee],ksi_0i,&edge_diff_ksi[ee][0],psi_l,diff_psi_l,3); CHKERRG(ierr);
137  FTensor::Tensor1<double*,3> t_diff_psi_l(&diff_psi_l[0],&diff_psi_l[p[ee]+1],&diff_psi_l[2*p[ee]+2],1);
138 
139  for(int ll = 2;ll!=P[ee];ll++) {
140 
141  const double a = (double)(2*ll+1)/(double)(ll+1);
142  const double b = (double)(ll)/(double)(ll+1);
143 
144  (t_edge_n[ee])(i) = a*psi_l[ll-1]*t_psi_e_1(i)-b*psi_l[ll-2]*t_psi_e_0(i);
145  ++(t_edge_n[ee]);
146 
147  (t_diff_edge_n[ee])(i,j) = -b*(t_diff_psi_l(j)*t_psi_e_0(i)+psi_l[ll-2]*t_diff_psi_e_0(i,j));
148  ++t_diff_psi_l;
149  (t_diff_edge_n[ee])(i,j) += a*(t_diff_psi_l(j)*t_psi_e_1(i)+psi_l[ll-1]*t_diff_psi_e_1(i,j));
150  ++(t_diff_edge_n[ee]);
151 
152  }
153  }
154 
155  }
156  }
157 
159 }
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:511
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474
#define NBEDGE_HCURL(P)
Number of base functions H curl on faces.

◆ Hcurl_EdgeBaseFunctions_MBTET_ON_EDGE()

MoFEMErrorCode MoFEM::Hcurl_EdgeBaseFunctions_MBTET_ON_EDGE ( int  sense,
int  p,
double N,
double diffN,
double edgeN,
double diff_edgeN,
int  nb_integration_pts,
PetscErrorCode(*)(int p, double s, double *diff_s, double *L, double *diffL, const int dim)  base_polynomials 
)

Edge based H-curl base functions on edge.

Function generates hierarchical base of h-curl comforting functions on tetrahedral edge. For more details see [2].

On each edge we have P+1 functions. See NBEDGE_HCURL

Parameters
sensesense fo edge (i.e. unique orientation)
parray of oder for each edge
Narray shape functions evaluated at each integration point
diffNderivatives of shape functions
edgeNbase functions on edges
diff_edgeNderivatives of edge shape functions
nb_integration_ptsnumber of integration points
base_polynomialspolynomial base function (f.e. Legendre of Lobatto)
Returns
error code

Definition at line 161 of file Hcurl.cpp.

164  {
166 
167 
169  if(diff_edge_n!=NULL) {
170  SETERRQ(PETSC_COMM_SELF,MOFEM_NOT_IMPLEMENTED,"Calculation of derivatives not implemented");
171  }
172 
174  FTensor::Tensor1<double,3> t_node_diff_ksi[2];
175  t_node_diff_ksi[0](0) = diffN[0];
176  t_node_diff_ksi[0](1) = 0;
177  t_node_diff_ksi[0](2) = 0;
178  t_node_diff_ksi[1](0) = diffN[1];
179  t_node_diff_ksi[1](1) = 0;
180  t_node_diff_ksi[1](2) = 0;
181 
182  FTensor::Tensor1<double*,3> t_edge_n(&edge_n[0],&edge_n[1],&edge_n[2],3);
183  FTensor::Tensor1<double,3> t_psi_e_0,t_psi_e_1;
184 
185  for(int ii = 0;ii!=nb_integration_pts;ii++) {
186 
187  const int node_shift = ii*2;
188 
189  t_psi_e_0(i) = (N[node_shift+1]*t_node_diff_ksi[0](i)-N[node_shift+0]*t_node_diff_ksi[1](i))*sense;
190  t_psi_e_1(i) = N[node_shift+1]*t_node_diff_ksi[0](i)+N[node_shift+0]*t_node_diff_ksi[1](i);
191  t_edge_n(i) = t_psi_e_0(i);
192  ++t_edge_n;
193  t_edge_n(i) = t_psi_e_1(i);
194  ++t_edge_n;
195 
196  if(p>1) {
197  const double ksi_0i = (N[node_shift+1]-N[node_shift+0])*sense;
198  double psi_l[p+1];
199  ierr = base_polynomials(p,ksi_0i,NULL,psi_l,NULL,3); CHKERRG(ierr);
200  for(int ll = 2;ll!=NBEDGE_HCURL(p);ll++) {
201  const double a = (double)(2*ll+1)/(double)(ll+1);
202  const double b = (double)(ll)/(double)(ll+1);
203  t_edge_n(i) = a*psi_l[ll-1]*t_psi_e_1(i)-b*psi_l[ll-2]*t_psi_e_0(i);
204  ++t_edge_n;
205  }
206  }
207 
208  }
209 
211 }
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:511
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474
#define NBEDGE_HCURL(P)
Number of base functions H curl on faces.

◆ Hcurl_EdgeBaseFunctions_MBTET_ON_FACE()

MoFEMErrorCode MoFEM::Hcurl_EdgeBaseFunctions_MBTET_ON_FACE ( int sense,
int p,
double N,
double diffN,
double edgeN[],
double diff_edgeN[],
int  nb_integration_pts,
PetscErrorCode(*)(int p, double s, double *diff_s, double *L, double *diffL, const int dim)  base_polynomials 
)

Edge based H-curl base functions on face.

Function generates hierarchical base of h-curl comforting functions on tetrahedral edge. For more details see [2].

On each face's edge we have P+1 functions. See NBEDGE_HCURL

Parameters
sensesense fo edge (i.e. unique orientation)
parray of oder for each edge
Narray shape functions evaluated at each integration point
diffNderivatives of shape functions
edgeNbase functions on edges
diff_edgeNderivatives of edge shape functions
nb_integration_ptsnumber of integration points
base_polynomialspolynomial base function (f.e. Legendre of Lobatto)
Returns
error code

Definition at line 213 of file Hcurl.cpp.

216  {
217 
219 
220  // TODO This is not by atom tests properly
221 
222  const int edges_nodes[3][2] = { {0,1}, {1,2}, {2,0} };
223  int P[3];
224  for(int ee = 0;ee<3; ee++) P[ee] = NBEDGE_HCURL(p[ee]);
225 
228 
229  FTensor::Tensor1<double,3> t_node_diff_ksi[3] = {
230  FTensor::Tensor1<double,3>(diffN[0],diffN[1],0),
231  FTensor::Tensor1<double,3>(diffN[2],diffN[3],0),
232  FTensor::Tensor1<double,3>(diffN[4],diffN[5],0),
233  };
234  FTensor::Tensor1<double,2> t_2d_diff_ksi[3] = {
235  FTensor::Tensor1<double,2>(diffN[0],diffN[1]),
236  FTensor::Tensor1<double,2>(diffN[2],diffN[3]),
237  FTensor::Tensor1<double,2>(diffN[4],diffN[5])
238  };
239 
240  FTensor::Tensor1<double*,3> t_edge_n[3] = {
241  FTensor::Tensor1<double*,3>(&edge_n[0][0],&edge_n[0][1],&edge_n[0][2],3),
242  FTensor::Tensor1<double*,3>(&edge_n[1][0],&edge_n[1][1],&edge_n[1][2],3),
243  FTensor::Tensor1<double*,3>(&edge_n[2][0],&edge_n[2][1],&edge_n[2][2],3)
244  };
245  FTensor::Tensor2<double*,3,2> t_diff_edge_n[3] = {
247  &diff_edge_n[0][HCURL0_0],&diff_edge_n[0][HCURL0_1],
248  &diff_edge_n[0][HCURL1_0],&diff_edge_n[0][HCURL1_1],
249  &diff_edge_n[0][HCURL2_0],&diff_edge_n[0][HCURL2_1],6
250  ),
252  &diff_edge_n[1][HCURL0_0],&diff_edge_n[1][HCURL0_1],
253  &diff_edge_n[1][HCURL1_0],&diff_edge_n[1][HCURL1_1],
254  &diff_edge_n[1][HCURL2_0],&diff_edge_n[1][HCURL2_1],6
255  ),
257  &diff_edge_n[2][HCURL0_0],&diff_edge_n[2][HCURL0_1],
258  &diff_edge_n[2][HCURL1_0],&diff_edge_n[2][HCURL1_1],
259  &diff_edge_n[2][HCURL2_0],&diff_edge_n[2][HCURL2_1],6
260  )
261  };
262 
263  FTensor::Tensor1<double,3> t_psi_e_0,t_psi_e_1;
264  FTensor::Tensor2<double,3,2> t_diff_psi_e_0,t_diff_psi_e_1;
265 
266  for(int ee = 0;ee!=3;ee++) {
267 
268  if(P[ee]==0) continue;
269  const int node0 = edges_nodes[ee][0];
270  const int node1 = edges_nodes[ee][1];
271  const int sense_edge = sense[ee];
272 
273  t_diff_psi_e_0(i,j) =
274  (t_node_diff_ksi[node0](i)*t_2d_diff_ksi[node1](j)-
275  t_node_diff_ksi[node1](i)*t_2d_diff_ksi[node0](j))*sense_edge;
276  t_diff_psi_e_1(i,j) =
277  t_node_diff_ksi[node0](i)*t_2d_diff_ksi[node1](j)+
278  t_node_diff_ksi[node1](i)*t_2d_diff_ksi[node0](j);
279 
280  for(int ii = 0;ii!=nb_integration_pts;ii++) {
281 
282  const int node_shift = ii*3;
283  const double n0 = N[node_shift+node0];
284  const double n1 = N[node_shift+node1];
285 
286  t_psi_e_0(i) = (n1*t_node_diff_ksi[node0](i)-n0*t_node_diff_ksi[node1](i))*sense_edge;
287  t_psi_e_1(i) = n1*t_node_diff_ksi[node0](i)+n0*t_node_diff_ksi[node1](i);
288 
289  (t_edge_n[ee])(i) = t_psi_e_0(i);
290  (t_diff_edge_n[ee])(i,j) = t_diff_psi_e_0(i,j);
291  ++(t_edge_n[ee]);
292  ++(t_diff_edge_n[ee]);
293  (t_edge_n[ee])(i) = t_psi_e_1(i);
294  (t_diff_edge_n[ee])(i,j) = t_diff_psi_e_1(i,j);
295  ++(t_edge_n[ee]);
296  ++(t_diff_edge_n[ee]);
297 
298  if(p[ee]>1) {
299  const double ksi_0i = (n1-n0)*sense_edge;
300  double diff_ksi_0i[] = {
301  ((t_2d_diff_ksi[node1])(0)-(t_2d_diff_ksi[node0])(0))*sense_edge,
302  ((t_2d_diff_ksi[node1])(1)-(t_2d_diff_ksi[node0])(1))*sense_edge
303  };
304 
305  double psi_l[p[ee]+1],diff_psi_l[2*p[ee]+2];
306  ierr = base_polynomials(p[ee],ksi_0i,diff_ksi_0i,psi_l,diff_psi_l,2); CHKERRG(ierr);
307  FTensor::Tensor1<double*,2> t_diff_psi_ll_m1(&diff_psi_l[0+2-1],&diff_psi_l[p[ee]+1+2-1],1);
308  FTensor::Tensor1<double*,2> t_diff_psi_ll_m2(&diff_psi_l[0+2-2],&diff_psi_l[p[ee]+1+2-2],1);
309  for(int ll = 2;ll!=P[ee];ll++) {
310  const double a = (double)(2*ll+1)/(double)(ll+1);
311  const double b = (double)(ll)/(double)(ll+1);
312  (t_edge_n[ee])(i) = a*psi_l[ll-1]*t_psi_e_1(i)-b*psi_l[ll-2]*t_psi_e_0(i);
313  (t_diff_edge_n[ee])(i,j) =
314  a*t_psi_e_1(i)*t_diff_psi_ll_m1(j)+a*psi_l[ll-1]*t_diff_psi_e_1(i,j)-
315  b*t_psi_e_0(i)*t_diff_psi_ll_m2(j)-b*psi_l[ll-2]*t_diff_psi_e_0(i,j);
316  ++(t_edge_n[ee]);
317  ++(t_diff_edge_n[ee]);
318  ++t_diff_psi_ll_m1;
319  ++t_diff_psi_ll_m2;
320  }
321  }
322 
323  }
324  }
325 
327 }
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:511
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474
#define NBEDGE_HCURL(P)
Number of base functions H curl on faces.

◆ Hcurl_FaceFunctions_MBTET()

MoFEMErrorCode MoFEM::Hcurl_FaceFunctions_MBTET ( int face_nodes,
int p,
double N,
double diffN,
double phi_f[4],
double diff_phi_f[4],
int  nb_integration_pts,
PetscErrorCode(*)(int p, double s, double *diff_s, double *L, double *diffL, const int dim)  base_polynomials 
)

Face H-curl functions.

Face H-curl functions are set of Eddge-Based Face functions (Hcurl_EdgeBasedFaceFunctions_MBTET) and Bubble-Face functions (Hcurl_BubbleFaceFunctions_MBTET).

See NBVOLUMETET_FACE_HCURL

Parameters
face_nodesarray [4*3] of local indices of face nodes
papproximation order
Nnodal shape functions
diffNderivatives of nodal shape functions
phi_f[4]calculated shape functions for each face
diff_phi_v[4]derivatives of shape functions for each face
nb_integration_ptsnumber of shape functions
base_polynomialspolynomial base function (f.e. Legendre of Lobatto)
Returns
error code

Definition at line 1019 of file Hcurl.cpp.

1022  {
1023 
1025 
1026  try {
1027 
1028  MatrixDouble base_face_edge_functions[4];
1029  MatrixDouble diff_base_face_edge_functions[4];
1030  double *phi_f_e[4][3];
1031  double *diff_phi_f_e[4][3];
1032  for(int ff = 0;ff!=4;ff++) {
1033  if(NBFACETRI_EDGE_HCURL(p[ff])==0) {
1034  for(int ee = 0;ee!=3;ee++) {
1035  phi_f_e[ff][ee] = NULL;
1036  diff_phi_f_e[ff][ee] = NULL;
1037  }
1038  } else {
1039  base_face_edge_functions[ff].resize(3,3*NBFACETRI_EDGE_HCURL(p[ff])*nb_integration_pts);
1040  diff_base_face_edge_functions[ff].resize(3,9*NBFACETRI_EDGE_HCURL(p[ff])*nb_integration_pts);
1041  // base_face_edge_functions[ff].clear();
1042  // diff_base_face_edge_functions[ff].clear();
1043  for(int ee = 0;ee!=3;ee++) {
1044  phi_f_e[ff][ee] = &base_face_edge_functions[ff](ee,0);
1045  diff_phi_f_e[ff][ee] = &diff_base_face_edge_functions[ff](ee,0);
1046  }
1047  }
1048  }
1050  face_nodes,p,N,diffN,phi_f_e,diff_phi_f_e,nb_integration_pts,base_polynomials
1051  ); CHKERRG(ierr);
1052 
1053  VectorDouble base_face_bubble_functions[4];
1054  VectorDouble diff_base_face_bubble_functions[4];
1055  double *phi_f_f[4];
1056  double *diff_phi_f_f[4];
1057  for(int ff=0;ff!=4;ff++) {
1058  int nb_dofs = NBFACETRI_FACE_HCURL(p[ff]);
1059  if(nb_dofs==0) {
1060  phi_f_f[ff] = NULL;
1061  diff_phi_f_f[ff] = NULL;
1062  } else {
1063  base_face_bubble_functions[ff].resize(3*nb_dofs*nb_integration_pts,false);
1064  diff_base_face_bubble_functions[ff].resize(9*nb_dofs*nb_integration_pts,false);
1065  phi_f_f[ff] = &*base_face_bubble_functions[ff].data().begin();
1066  diff_phi_f_f[ff] = &*diff_base_face_bubble_functions[ff].data().begin();
1067  }
1068  }
1070  face_nodes,p,N,diffN,phi_f_f,diff_phi_f_f,nb_integration_pts,base_polynomials
1071  ); CHKERRG(ierr);
1072 
1075 
1076  for(int ff = 0;ff!=4;ff++) {
1077 
1078  if(NBFACETRI_EDGE_HCURL(p[ff])==0) continue;
1079 
1080  FTensor::Tensor1<double*,3> t_face_edge_base[] = {
1081  FTensor::Tensor1<double*,3>(&phi_f_e[ff][0][0],&phi_f_e[ff][0][1],&phi_f_e[ff][0][2],3),
1082  FTensor::Tensor1<double*,3>(&phi_f_e[ff][1][0],&phi_f_e[ff][1][1],&phi_f_e[ff][1][2],3),
1083  FTensor::Tensor1<double*,3>(&phi_f_e[ff][2][0],&phi_f_e[ff][2][1],&phi_f_e[ff][2][2],3)
1084  };
1085  FTensor::Tensor2<double*,3,3> t_diff_face_edge_base[]= {
1087  &diff_phi_f_e[ff][0][0],&diff_phi_f_e[ff][0][3],&diff_phi_f_e[ff][0][6],
1088  &diff_phi_f_e[ff][0][1],&diff_phi_f_e[ff][0][4],&diff_phi_f_e[ff][0][7],
1089  &diff_phi_f_e[ff][0][2],&diff_phi_f_e[ff][0][5],&diff_phi_f_e[ff][0][8],9
1090  ),
1092  &diff_phi_f_e[ff][1][0],&diff_phi_f_e[ff][1][3],&diff_phi_f_e[ff][1][6],
1093  &diff_phi_f_e[ff][1][1],&diff_phi_f_e[ff][1][4],&diff_phi_f_e[ff][1][7],
1094  &diff_phi_f_e[ff][1][2],&diff_phi_f_e[ff][1][5],&diff_phi_f_e[ff][1][8],9
1095  ),
1097  &diff_phi_f_e[ff][2][0],&diff_phi_f_e[ff][2][3],&diff_phi_f_e[ff][2][6],
1098  &diff_phi_f_e[ff][2][1],&diff_phi_f_e[ff][2][4],&diff_phi_f_e[ff][2][7],
1099  &diff_phi_f_e[ff][2][2],&diff_phi_f_e[ff][2][5],&diff_phi_f_e[ff][2][8],9
1100  )
1101  };
1102 
1103  FTensor::Tensor1<double*,3> t_face_base(&phi_f[ff][0],&phi_f[ff][1],&phi_f[ff][2],3);
1104  FTensor::Tensor2<double*,3,3> t_diff_face_base(
1105  &diff_phi_f[ff][0],&diff_phi_f[ff][3],&diff_phi_f[ff][6],
1106  &diff_phi_f[ff][1],&diff_phi_f[ff][4],&diff_phi_f[ff][7],
1107  &diff_phi_f[ff][2],&diff_phi_f[ff][5],&diff_phi_f[ff][8],9
1108  );
1109 
1110  if(NBFACETRI_FACE_HCURL(p[ff])>0) {
1111  FTensor::Tensor1<double*,3> t_face_face_base(&phi_f_f[ff][0],&phi_f_f[ff][1],&phi_f_f[ff][2],3);
1112  FTensor::Tensor2<double*,3,3> t_diff_face_face_base(
1113  &diff_phi_f_f[ff][0],&diff_phi_f_f[ff][3],&diff_phi_f_f[ff][6],
1114  &diff_phi_f_f[ff][1],&diff_phi_f_f[ff][4],&diff_phi_f_f[ff][7],
1115  &diff_phi_f_f[ff][2],&diff_phi_f_f[ff][5],&diff_phi_f_f[ff][8],9
1116  );
1117  for(int ii = 0;ii!=nb_integration_pts;ii++) {
1118  int cc = 0;
1119  for(int oo = 0;oo<=p[ff];oo++) {
1120  // Face-edge base
1121  if(oo>1) {
1122  for(int ee = 0;ee!=3;ee++) {
1123  for(int ll = NBFACETRI_EDGE_HCURL(oo-1);ll!=NBFACETRI_EDGE_HCURL(oo);ll++) {
1124  t_face_base(i) = t_face_edge_base[ee](i);
1125  ++cc;
1126  ++t_face_base;
1127  ++t_face_edge_base[ee];
1128  t_diff_face_base(i,j) = t_diff_face_edge_base[ee](i,j);
1129  ++t_diff_face_base;
1130  ++t_diff_face_edge_base[ee];
1131  // cerr << oo << " " << ll << " " << cc << " " << NBFACETRI_EDGE_HCURL(oo) << endl;
1132  }
1133  }
1134  }
1135  // Face-face base
1136  if(oo>2) {
1137  for(int ll = NBFACETRI_FACE_HCURL(oo-1);ll!=NBFACETRI_FACE_HCURL(oo);ll++) {
1138  t_face_base(i) = t_face_face_base(i);
1139  ++cc;
1140  ++t_face_base;
1141  ++t_face_face_base;
1142  t_diff_face_base(i,j) = t_diff_face_face_base(i,j);
1143  ++t_diff_face_base;
1144  ++t_diff_face_face_base;
1145  }
1146  }
1147  }
1148  // check consistency
1149  const int nb_base_fun_on_face = NBFACETRI_HCURL(p[ff]);
1150  if(cc!=nb_base_fun_on_face) {
1151  SETERRQ2(
1152  PETSC_COMM_SELF,
1154  "Wrong number of base functions %d != %d",
1155  cc,nb_base_fun_on_face
1156  );
1157  }
1158  }
1159  } else {
1160  for(int ii = 0;ii!=nb_integration_pts;ii++) {
1161  int cc = 0;
1162  for(int oo = 0;oo<=p[ff];oo++) {
1163  // Face-edge base
1164  if(oo>1) {
1165  for(int ee = 0;ee!=3;ee++) {
1166  for(int ll = NBFACETRI_EDGE_HCURL(oo-1);ll!=NBFACETRI_EDGE_HCURL(oo);ll++) {
1167  t_face_base(i) = t_face_edge_base[ee](i);
1168  ++cc;
1169  ++t_face_base;
1170  ++t_face_edge_base[ee];
1171  t_diff_face_base(i,j) = t_diff_face_edge_base[ee](i,j);
1172  ++t_diff_face_base;
1173  ++t_diff_face_edge_base[ee];
1174  // cerr << oo << " " << ll << " " << cc << " " << NBFACETRI_EDGE_HCURL(oo) << endl;
1175  }
1176  }
1177  }
1178  }
1179  // check consistency
1180  const int nb_base_fun_on_face = NBFACETRI_HCURL(p[ff]);
1181  if(cc!=nb_base_fun_on_face) {
1182  SETERRQ2(
1183  PETSC_COMM_SELF,
1185  "Wrong number of base functions %d != %d",
1186  cc,nb_base_fun_on_face
1187  );
1188  }
1189  }
1190  }
1191  }
1192 
1193  } catch (MoFEMException const &e) {
1194  SETERRQ(PETSC_COMM_SELF,e.errorCode,e.errorMessage);
1195  } catch (std::exception& ex) {
1196  std::ostringstream ss;
1197  ss << "thorw in method: " << ex.what() << " at line " << __LINE__ << " in file " << __FILE__;
1198  SETERRQ(PETSC_COMM_SELF,MOFEM_STD_EXCEPTION_THROW,ss.str().c_str());
1199  }
1200 
1202 }
MoFEMErrorCode Hcurl_BubbleFaceFunctions_MBTET(int *faces_nodes, int *p, double *N, double *diffN, double *phi_f[4], double *diff_phi_f[4], int nb_integration_pts, PetscErrorCode(*base_polynomials)(int p, double s, double *diff_s, double *L, double *diffL, const int dim))
Face edge base functions of Hcurl space on face on tetrahedral.
Definition: Hcurl.cpp:500
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
#define NBFACETRI_EDGE_HCURL(P)
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:511
Exception to catch.
Definition: Common.hpp:26
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474
char errorMessage[255]
Definition: Common.hpp:28
#define NBFACETRI_HCURL(P)
MoFEMErrorCode Hcurl_EdgeBasedFaceFunctions_MBTET(int *faces_nodes, int *p, double *N, double *diffN, double *phi_f_e[4][3], double *diff_phi_f_e[4][3], int nb_integration_pts, PetscErrorCode(*base_polynomials)(int p, double s, double *diff_s, double *L, double *diffL, const int dim))
Face edge base functions of Hcurl space on tetrahedral.
Definition: Hcurl.cpp:329
ublas::matrix< double, ublas::row_major, DoubleAllocator > MatrixDouble
Definition: Common.hpp:212
#define NBFACETRI_FACE_HCURL(P)
ublas::vector< double, DoubleAllocator > VectorDouble
Definition: Common.hpp:211
const int errorCode
Definition: Common.hpp:27

◆ Hcurl_FaceFunctions_MBTET_ON_FACE()

MoFEMErrorCode MoFEM::Hcurl_FaceFunctions_MBTET_ON_FACE ( int faces_nodes,
int  p,
double N,
double diffN,
double phi_f,
double diff_phi_f,
int  nb_integration_pts,
PetscErrorCode(*)(int p, double s, double *diff_s, double *L, double *diffL, const int dim)  base_polynomials 
)

Face H-curl functions.

Face H-curl functions are set of Eddge-Based Face functions (Hcurl_EdgeBasedFaceFunctions_MBTET) and Bubble-Face functions (Hcurl_BubbleFaceFunctions_MBTET).

See NBVOLUMETET_FACE_HCURL

Parameters
face_nodesarray [4*3] of local indices of face nodes
papproximation order
Nnodal shape functions
diffNderivatives of nodal shape functions
phi_f[4]calculated shape functions for each face
diff_phi_v[4]derivatives of shape functions for each face
nb_integration_ptsnumber of shape functions
base_polynomialspolynomial base function (f.e. Legendre of Lobatto)
Returns
error code

Definition at line 1204 of file Hcurl.cpp.

1207  {
1208 
1210 
1212 
1213  MatrixDouble base_face_edge_functions,diff_base_face_edge_functions;
1214  double *phi_f_e[3];
1215  double *diff_phi_f_e[3];
1216  base_face_edge_functions.resize(
1217  3,3*NBFACETRI_EDGE_HCURL(p)*nb_integration_pts
1218  );
1219  diff_base_face_edge_functions.resize(
1220  3,2*3*NBFACETRI_EDGE_HCURL(p)*nb_integration_pts
1221  );
1222  // base_face_edge_functions.clear();
1223  for(int ee = 0;ee!=3;ee++) {
1224  phi_f_e[ee] = &base_face_edge_functions(ee,0);
1225  diff_phi_f_e[ee] = &diff_base_face_edge_functions(ee,0);
1226  }
1228  faces_nodes,p,N,diffN,phi_f_e,diff_phi_f_e,nb_integration_pts,base_polynomials
1229  ); CHKERRG(ierr);
1230 
1231  VectorDouble base_face_bubble_functions;
1232  VectorDouble diff_base_face_bubble_functions;
1233  double *phi_f_f,*diff_phi_f_f;
1234  base_face_bubble_functions.resize(3*NBFACETRI_FACE_HCURL(p)*nb_integration_pts);
1235  diff_base_face_bubble_functions.resize(2*3*NBFACETRI_FACE_HCURL(p)*nb_integration_pts);
1236  phi_f_f = &*base_face_bubble_functions.data().begin();
1237  diff_phi_f_f = &*diff_base_face_bubble_functions.data().begin();
1239  faces_nodes,p,N,diffN,phi_f_f,diff_phi_f_f,nb_integration_pts,base_polynomials
1240  ); CHKERRG(ierr);
1241  // cerr << diff_base_face_bubble_functions << endl;
1242 
1245 
1246  FTensor::Tensor1<double*,3> t_face_edge_base[]= {
1247  FTensor::Tensor1<double*,3>(&phi_f_e[0][HCURL0],&phi_f_e[0][HCURL1],&phi_f_e[0][HCURL2],3),
1248  FTensor::Tensor1<double*,3>(&phi_f_e[1][HCURL0],&phi_f_e[1][HCURL1],&phi_f_e[1][HCURL2],3),
1249  FTensor::Tensor1<double*,3>(&phi_f_e[2][HCURL0],&phi_f_e[2][HCURL1],&phi_f_e[2][HCURL2],3)
1250  };
1251  FTensor::Tensor2<double*,3,2> t_diff_face_edge_base[]= {
1253  &diff_phi_f_e[0][HCURL0_0],&diff_phi_f_e[0][HCURL0_1],
1254  &diff_phi_f_e[0][HCURL1_0],&diff_phi_f_e[0][HCURL1_1],
1255  &diff_phi_f_e[0][HCURL2_0],&diff_phi_f_e[0][HCURL2_1],6
1256  ),
1258  &diff_phi_f_e[1][HCURL0_0],&diff_phi_f_e[1][HCURL0_1],
1259  &diff_phi_f_e[1][HCURL1_0],&diff_phi_f_e[1][HCURL1_1],
1260  &diff_phi_f_e[1][HCURL2_0],&diff_phi_f_e[1][HCURL2_1],6
1261  ),
1263  &diff_phi_f_e[2][HCURL0_0],&diff_phi_f_e[2][HCURL0_1],
1264  &diff_phi_f_e[2][HCURL1_0],&diff_phi_f_e[2][HCURL1_1],
1265  &diff_phi_f_e[2][HCURL2_0],&diff_phi_f_e[2][HCURL2_1],6
1266  )
1267  };
1268 
1269  FTensor::Tensor1<double*,3> t_face_base(&phi_f[0],&phi_f[1],&phi_f[2],3);
1270  FTensor::Tensor2<double*,3,2> t_diff_face_base(
1271  &diff_phi_f[HCURL0_0],&diff_phi_f[HCURL0_1],
1272  &diff_phi_f[HCURL1_0],&diff_phi_f[HCURL1_1],
1273  &diff_phi_f[HCURL2_0],&diff_phi_f[HCURL2_1],6
1274  );
1275 
1276  if(NBFACETRI_FACE_HCURL(p)>0) {
1277  FTensor::Tensor1<double*,3> t_face_face_base(
1278  &phi_f_f[HCURL0],&phi_f_f[HCURL1],&phi_f_f[HCURL2],3
1279  );
1280  FTensor::Tensor2<double*,3,2> t_diff_face_face_base(
1281  &diff_phi_f_f[HCURL0_0],&diff_phi_f_f[HCURL0_1],
1282  &diff_phi_f_f[HCURL1_0],&diff_phi_f_f[HCURL1_1],
1283  &diff_phi_f_f[HCURL2_0],&diff_phi_f_f[HCURL2_1],6
1284  );
1285  for(int ii = 0;ii!=nb_integration_pts;ii++) {
1286  int cc = 0;
1287  for(int oo = 0;oo<=p;oo++) {
1288  // Face-edge base
1289  if(oo>1) {
1290  for(int ee = 0;ee!=3;ee++) {
1291  for(int ll = NBFACETRI_EDGE_HCURL(oo-1);ll!=NBFACETRI_EDGE_HCURL(oo);ll++) {
1292  t_face_base(i) = t_face_edge_base[ee](i);
1293  t_diff_face_base(i,j) = t_diff_face_edge_base[ee](i,j);
1294  ++cc;
1295  ++t_face_base;
1296  ++t_face_edge_base[ee];
1297  ++t_diff_face_base;
1298  ++t_diff_face_edge_base[ee];
1299  }
1300  }
1301  }
1302  // Face-face base
1303  if(oo>2) {
1304  for(int ll = NBFACETRI_FACE_HCURL(oo-1);ll!=NBFACETRI_FACE_HCURL(oo);ll++) {
1305  t_face_base(i) = t_face_face_base(i);
1306  t_diff_face_base(i,j) = t_diff_face_face_base(i,j);
1307  ++cc;
1308  ++t_face_base;
1309  ++t_face_face_base;
1310  ++t_diff_face_base;
1311  ++t_diff_face_face_base;
1312  }
1313  }
1314  }
1315  // check consistency
1316  const int nb_base_fun_on_face = NBFACETRI_HCURL(p);
1317  if(cc!=nb_base_fun_on_face) {
1318  SETERRQ2(
1319  PETSC_COMM_SELF,
1321  "Wrong number of base functions %d != %d",
1322  cc,nb_base_fun_on_face
1323  );
1324  }
1325  }
1326  } else {
1327  for(int ii = 0;ii!=nb_integration_pts;ii++) {
1328  int cc = 0;
1329  for(int oo = 0;oo<=p;oo++) {
1330  // Face-edge base
1331  if(oo>1) {
1332  for(int ee = 0;ee!=3;ee++) {
1333  for(int ll = NBFACETRI_EDGE_HCURL(oo-1);ll!=NBFACETRI_EDGE_HCURL(oo);ll++) {
1334  t_face_base(i) = t_face_edge_base[ee](i);
1335  t_diff_face_base(i,j) = t_diff_face_edge_base[ee](i,j);
1336  ++cc;
1337  ++t_face_base;
1338  ++t_face_edge_base[ee];
1339  ++t_diff_face_base;
1340  ++t_diff_face_edge_base[ee];
1341  // cerr << oo << " " << ll << " " << cc << " " << NBFACETRI_EDGE_HCURL(oo) << endl;
1342  }
1343  }
1344  }
1345  }
1346  // check consistency
1347  const int nb_base_fun_on_face = NBFACETRI_HCURL(p);
1348  if(cc!=nb_base_fun_on_face) {
1349  SETERRQ2(
1350  PETSC_COMM_SELF,
1352  "Wrong number of base functions %d != %d",
1353  cc,nb_base_fun_on_face
1354  );
1355  }
1356  }
1357  }
1358 
1360 }
MoFEMErrorCode Hcurl_EdgeBasedFaceFunctions_MBTET_ON_FACE(int *faces_nodes, int p, double *N, double *diffN, double *phi_f_e[3], double *diff_phi_f_e[3], int nb_integration_pts, PetscErrorCode(*base_polynomials)(int p, double s, double *diff_s, double *L, double *diffL, const int dim))
Face edge base functions of Hcurl space.
Definition: Hcurl.cpp:412
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
#define NBFACETRI_EDGE_HCURL(P)
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:511
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474
#define NBFACETRI_HCURL(P)
ublas::matrix< double, ublas::row_major, DoubleAllocator > MatrixDouble
Definition: Common.hpp:212
#define NBFACETRI_FACE_HCURL(P)
ublas::vector< double, DoubleAllocator > VectorDouble
Definition: Common.hpp:211
MoFEMErrorCode Hcurl_BubbleFaceFunctions_MBTET_ON_FACE(int *faces_nodes, int p, double *N, double *diffN, double *phi_f, double *diff_phi_f, int nb_integration_pts, PetscErrorCode(*base_polynomials)(int p, double s, double *diff_s, double *L, double *diffL, const int dim))
Face edge base functions of Hcurl space on face.
Definition: Hcurl.cpp:620

◆ Hcurl_FaceInteriorFunctions_MBTET()

MoFEMErrorCode MoFEM::Hcurl_FaceInteriorFunctions_MBTET ( int faces_nodes,
int  p,
double N,
double diffN,
double phi_v,
double diff_phi_v,
int  nb_integration_pts,
PetscErrorCode(*)(int p, double s, double *diff_s, double *L, double *diffL, const int dim)  base_polynomials 
)

Face base interior function.

On each face we have P*(P-1)/2 and are 4 faces on Tetrahedral.

See NBFACETRI_FACE_HCURL

Parameters
face_nodesarray [4*3] of local indices of face nodes
papproximation order
Nnodal shape functions
diffNderivatives of nodal shape functions
phi_vcalculated shape functions
diff_phi_vderivatives of shape functions
nb_integration_ptsnumber of shape functions
base_polynomialspolynomial base function (f.e. Legendre of Lobatto)
Returns
error code

Definition at line 736 of file Hcurl.cpp.

739  {
740 
742 
744 
745  const int face_opposite_nodes[] = { 2,0,1,3 };
746 
749 
750  FTensor::Tensor1<double*,3> t_node_diff_ksi[4] = {
751  FTensor::Tensor1<double*,3>(&diffN[0],&diffN[ 1],&diffN[ 2]),
752  FTensor::Tensor1<double*,3>(&diffN[3],&diffN[ 4],&diffN[ 5]),
753  FTensor::Tensor1<double*,3>(&diffN[6],&diffN[ 7],&diffN[ 8]),
754  FTensor::Tensor1<double*,3>(&diffN[9],&diffN[10],&diffN[11])
755  };
756  FTensor::Tensor1<double,3> t_diff_ksi0i,t_diff_ksi0j;
757 
758  MatrixDouble m_psi_l_0i(4,p+1);
759  MatrixDouble m_psi_l_0j(4,p+1);
760  MatrixDouble m_diff_psi_l_0i(4,3*p+3);
761  MatrixDouble m_diff_psi_l_0j(4,3*p+3);
762 
763  double* psi_l_0i[] = {
764  &m_psi_l_0i(0,0),&m_psi_l_0i(1,0),&m_psi_l_0i(2,0),&m_psi_l_0i(3,0)
765  };
766  double* psi_l_0j[] = {
767  &m_psi_l_0j(0,0),&m_psi_l_0j(1,0),&m_psi_l_0j(2,0),&m_psi_l_0j(3,0)
768  };
769  double* diff_psi_l_0i[] = {
770  &m_diff_psi_l_0i(0,0),&m_diff_psi_l_0i(1,0),&m_diff_psi_l_0i(2,0),&m_diff_psi_l_0i(3,0)
771  };
772  double* diff_psi_l_0j[] = {
773  &m_diff_psi_l_0j(0,0),&m_diff_psi_l_0j(1,0),&m_diff_psi_l_0j(2,0),&m_diff_psi_l_0j(3,0)
774  };
775  double beta_f[4];
776 
777  FTensor::Tensor1<double,3> t_diff_beta_f[4];
778 
779  FTensor::Tensor1<double*,3> t_phi_v(&phi_v[0],&phi_v[1],&phi_v[2],3);
780  FTensor::Tensor2<double*,3,3> t_diff_phi_v(
781  &diff_phi_v[0],&diff_phi_v[3],&diff_phi_v[6],
782  &diff_phi_v[1],&diff_phi_v[4],&diff_phi_v[7],
783  &diff_phi_v[2],&diff_phi_v[5],&diff_phi_v[8],9
784  );
785 
786  for(int ii = 0;ii!=nb_integration_pts;ii++) {
787 
788  for(int ff = 0;ff!=4;ff++) {
789 
790  t_diff_ksi0i(i) =
791  t_node_diff_ksi[faces_nodes[3*ff+1]](i)-t_node_diff_ksi[faces_nodes[3*ff+0]](i);
792  t_diff_ksi0j(i) =
793  t_node_diff_ksi[faces_nodes[3*ff+2]](i)-t_node_diff_ksi[faces_nodes[3*ff+0]](i);
794 
795  const int node_shift = ii*4;
796 
797  beta_f[ff] =
798  N[node_shift+faces_nodes[3*ff+0]]*N[node_shift+faces_nodes[3*ff+1]]*
799  N[node_shift+faces_nodes[3*ff+2]];
800 
801  t_diff_beta_f[ff](j) =
802  t_node_diff_ksi[faces_nodes[3*ff+0]](j)*N[node_shift+faces_nodes[3*ff+1]]*N[node_shift+faces_nodes[3*ff+2]]+
803  N[node_shift+faces_nodes[3*ff+0]]*t_node_diff_ksi[faces_nodes[3*ff+1]](j)*N[node_shift+faces_nodes[3*ff+2]]+
804  N[node_shift+faces_nodes[3*ff+0]]*N[node_shift+faces_nodes[3*ff+1]]*t_node_diff_ksi[faces_nodes[3*ff+2]](j);
805 
806  const double ksi_0i =
807  N[node_shift+faces_nodes[3*ff+1]]-N[node_shift+faces_nodes[3*ff+0]];
808  ierr = base_polynomials(
809  p,ksi_0i,&t_diff_ksi0i(0),psi_l_0i[ff],diff_psi_l_0i[ff],3
810  ); CHKERRG(ierr);
811 
812  const double ksi_0j =
813  N[node_shift+faces_nodes[3*ff+2]]-N[node_shift+faces_nodes[3*ff+0]];
814  ierr = base_polynomials(
815  p,ksi_0j,&t_diff_ksi0j(0),psi_l_0j[ff],diff_psi_l_0j[ff],3
816  ); CHKERRG(ierr);
817 
818  }
819 
820  int cc = 0;
821  for(int oo = 0;oo<=(p-3);oo++) {
822  FTensor::Tensor1<double*,3> t_diff_psi_l_0i[] = {
823  FTensor::Tensor1<double*,3>(&diff_psi_l_0i[0][0],&diff_psi_l_0i[0][p+1],&diff_psi_l_0i[0][2*p+2],1),
824  FTensor::Tensor1<double*,3>(&diff_psi_l_0i[1][0],&diff_psi_l_0i[1][p+1],&diff_psi_l_0i[1][2*p+2],1),
825  FTensor::Tensor1<double*,3>(&diff_psi_l_0i[2][0],&diff_psi_l_0i[2][p+1],&diff_psi_l_0i[2][2*p+2],1),
826  FTensor::Tensor1<double*,3>(&diff_psi_l_0i[3][0],&diff_psi_l_0i[3][p+1],&diff_psi_l_0i[3][2*p+2],1),
827  };
828  for(int pp0 = 0;pp0<=oo;pp0++) {
829  const int pp1 = oo-pp0;
830  if(pp1>=0) {
831  for(int ff = 0;ff!=4;ff++) {
832  FTensor::Tensor1<double*,3> t_diff_psi_l_0j(
833  &m_diff_psi_l_0j(ff,pp1),
834  &m_diff_psi_l_0j(ff,p+1+pp1),
835  &m_diff_psi_l_0j(ff,2*p+2+pp1),1
836  );
837  const double t = psi_l_0i[ff][pp0]*psi_l_0j[ff][pp1];
838  const double a = beta_f[ff]*t;
839  t_phi_v(i) = a*t_node_diff_ksi[face_opposite_nodes[ff]](i);
840  ++t_phi_v;
841  ++cc;
842  t_diff_phi_v(i,j) = (
843  t_diff_beta_f[ff](j)*t+
844  beta_f[ff]*t_diff_psi_l_0i[ff](j)*psi_l_0j[ff][pp1]+
845  beta_f[ff]*psi_l_0i[ff][pp0]*t_diff_psi_l_0j(j)
846  )*t_node_diff_ksi[face_opposite_nodes[ff]](i);
847  ++t_diff_phi_v;
848  ++t_diff_psi_l_0i[ff];
849  }
850  }
851  }
852  }
853 
854  const int nb_base_fun_on_face = NBVOLUMETET_FACE_HCURL(p);
855  if(cc!=nb_base_fun_on_face) {
856  SETERRQ2(
857  PETSC_COMM_SELF,
859  "Wrong number of base functions %d != %d",
860  cc,nb_base_fun_on_face
861  );
862  }
863 
864  }
865 
867 }
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:511
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474
ublas::matrix< double, ublas::row_major, DoubleAllocator > MatrixDouble
Definition: Common.hpp:212
#define NBVOLUMETET_FACE_HCURL(P)

◆ Hcurl_VolumeFunctions_MBTET()

MoFEMErrorCode MoFEM::Hcurl_VolumeFunctions_MBTET ( int  p,
double N,
double diffN,
double phi_v,
double diff_phi_v,
int  nb_integration_pts,
PetscErrorCode(*)(int p, double s, double *diff_s, double *L, double *diffL, const int dim)  base_polynomials 
)

H-curl volume base functions.

Volume base functions are collection of iace interior base functions and volume interior base functions.

Parameters
papproximation order
Nnodal shape functions
diffNderivatives of nodal shape functions
phi_vcalculated shape functions
diff_phi_vderivatives of shape functions
nb_integration_ptsnumber of shape functions
base_polynomialspolynomial base function (f.e. Legendre of Lobatto)
Returns
error code

Definition at line 1362 of file Hcurl.cpp.

1365  {
1366 
1368 
1369  VectorDouble base_face_inetrior_functions(3*NBVOLUMETET_FACE_HCURL(p)*nb_integration_pts);
1370  VectorDouble diff_base_face_inetrior_functions(9*NBVOLUMETET_FACE_HCURL(p)*nb_integration_pts);
1371  // base_face_inetrior_functions.clear();
1372  // diff_base_face_inetrior_functions.clear();
1373  double *phi_v_f = &*base_face_inetrior_functions.data().begin();
1374  double *diff_phi_v_f = &*diff_base_face_inetrior_functions.data().begin();
1375  int faces_nodes[] = { 0,1,3, 1,2,3, 0,2,3, 0,1,2 };
1377  faces_nodes,p,N,diffN,phi_v_f,diff_phi_v_f,nb_integration_pts,base_polynomials
1378  ); CHKERRG(ierr);
1379 
1380  VectorDouble base_interior_functions(3*NBVOLUMETET_TET_HCURL(p)*nb_integration_pts);
1381  VectorDouble diff_base_interior_functions(9*NBVOLUMETET_TET_HCURL(p)*nb_integration_pts);
1382  // base_interior_functions.clear();
1383  // diff_base_interior_functions.clear();
1384  double *phi_v_v = &*base_interior_functions.data().begin();
1385  double *diff_phi_v_v = &*diff_base_interior_functions.data().begin();
1387  p,N,diffN,phi_v_v,diff_phi_v_v,nb_integration_pts,base_polynomials
1388  ); CHKERRG(ierr);
1389 
1392 
1393  FTensor::Tensor1<double*,3> t_face_interior(&phi_v_f[0],&phi_v_f[1],&phi_v_f[2],3);
1394  FTensor::Tensor2<double*,3,3> t_diff_face_interior(
1395  &diff_phi_v_f[0],&diff_phi_v_f[3],&diff_phi_v_f[6],
1396  &diff_phi_v_f[1],&diff_phi_v_f[4],&diff_phi_v_f[7],
1397  &diff_phi_v_f[2],&diff_phi_v_f[5],&diff_phi_v_f[8],9
1398  );
1399 
1400  FTensor::Tensor1<double*,3> t_phi_v(&phi_v[0],&phi_v[1],&phi_v[2],3);
1401  FTensor::Tensor2<double*,3,3> t_diff_phi_v(
1402  &diff_phi_v[0],&diff_phi_v[3],&diff_phi_v[6],
1403  &diff_phi_v[1],&diff_phi_v[4],&diff_phi_v[7],
1404  &diff_phi_v[2],&diff_phi_v[5],&diff_phi_v[8],9
1405  );
1406 
1407 
1408  if(NBVOLUMETET_TET_HCURL(p)>0) {
1409  FTensor::Tensor1<double*,3> t_volume_interior(&phi_v_v[0],&phi_v_v[1],&phi_v_v[2],3);
1410  FTensor::Tensor2<double*,3,3> t_diff_volume_interior(
1411  &diff_phi_v_v[0],&diff_phi_v_v[3],&diff_phi_v_v[6],
1412  &diff_phi_v_v[1],&diff_phi_v_v[4],&diff_phi_v_v[7],
1413  &diff_phi_v_v[2],&diff_phi_v_v[5],&diff_phi_v_v[8],9
1414  );
1415  for(int ii = 0;ii!=nb_integration_pts;ii++) {
1416  int cc = 0;
1417  for(int oo = 0;oo<=p;oo++) {
1418  for(int ll = NBVOLUMETET_FACE_HCURL(oo-1);ll!=NBVOLUMETET_FACE_HCURL(oo);ll++) {
1419  t_phi_v(i) = t_face_interior(i);
1420  ++t_phi_v;
1421  ++t_face_interior;
1422  ++cc;
1423  t_diff_phi_v(i,j) = t_diff_face_interior(i,j);
1424  ++t_diff_phi_v;
1425  ++t_diff_face_interior;
1426  }
1427  for(int ll = NBVOLUMETET_TET_HCURL(oo-1);ll!=NBVOLUMETET_TET_HCURL(oo);ll++) {
1428  t_phi_v(i) = t_volume_interior(i);
1429  ++t_phi_v;
1430  ++t_volume_interior;
1431  ++cc;
1432  t_diff_phi_v(i,j) = t_diff_volume_interior(i,j);
1433  ++t_diff_phi_v;
1434  ++t_diff_volume_interior;
1435  }
1436  }
1437  // check consistency
1438  const int nb_base_fun_on_face = NBVOLUMETET_HCURL(p);
1439  if(cc!=nb_base_fun_on_face) {
1440  SETERRQ2(
1441  PETSC_COMM_SELF,
1443  "Wrong number of base functions %d != %d",
1444  cc,nb_base_fun_on_face
1445  );
1446  }
1447  }
1448  } else {
1449  for(int ii = 0;ii!=nb_integration_pts;ii++) {
1450  int cc = 0;
1451  for(int oo = 0;oo<=p;oo++) {
1452  for(int ll = NBVOLUMETET_FACE_HCURL(oo-1);ll!=NBVOLUMETET_FACE_HCURL(oo);ll++) {
1453  t_phi_v(i) = t_face_interior(i);
1454  ++t_phi_v;
1455  ++t_face_interior;
1456  ++cc;
1457  t_diff_phi_v(i,j) = t_diff_face_interior(i,j);
1458  ++t_diff_phi_v;
1459  ++t_diff_face_interior;
1460  }
1461  }
1462  // check consistency
1463  const int nb_base_fun_on_face = NBVOLUMETET_HCURL(p);
1464  if(cc!=nb_base_fun_on_face) {
1465  SETERRQ2(
1466  PETSC_COMM_SELF,
1468  "Wrong number of base functions %d != %d",
1469  cc,nb_base_fun_on_face
1470  );
1471  }
1472  }
1473  }
1474 
1476 }
#define NBVOLUMETET_TET_HCURL(P)
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
MoFEMErrorCode Hcurl_FaceInteriorFunctions_MBTET(int *faces_nodes, int p, double *N, double *diffN, double *phi_v, double *diff_phi_v, int nb_integration_pts, PetscErrorCode(*base_polynomials)(int p, double s, double *diff_s, double *L, double *diffL, const int dim))
Face base interior function.
Definition: Hcurl.cpp:736
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:511
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474
ublas::vector< double, DoubleAllocator > VectorDouble
Definition: Common.hpp:211
#define NBVOLUMETET_HCURL(P)
#define NBVOLUMETET_FACE_HCURL(P)
MoFEMErrorCode Hcurl_VolumeInteriorFunctions_MBTET(int p, double *N, double *diffN, double *phi_v, double *diff_phi_v, int nb_integration_pts, PetscErrorCode(*base_polynomials)(int p, double s, double *diff_s, double *L, double *diffL, const int dim))
Volume interior function.
Definition: Hcurl.cpp:869

◆ Hcurl_VolumeInteriorFunctions_MBTET()

MoFEMErrorCode MoFEM::Hcurl_VolumeInteriorFunctions_MBTET ( int  p,
double N,
double diffN,
double phi_v,
double diff_phi_v,
int  nb_integration_pts,
PetscErrorCode(*)(int p, double s, double *diff_s, double *L, double *diffL, const int dim)  base_polynomials 
)

Volume interior function.

On volume have (P-3)*(P-2)*(P-1)/2.

See NBVOLUMETET_TET_HCURL

Parameters
papproximation order
Nnodal shape functions
diffNderivatives of nodal shape functions
phi_vcalculated shape functions
diff_phi_vderivatives of shape functions
nb_integration_ptsnumber of shape functions
base_polynomialspolynomial base function (f.e. Legendre of Lobatto)
Returns
error code

Definition at line 869 of file Hcurl.cpp.

872  {
873 
875 
877 
883 
884  FTensor::Tensor1<double*,3> t_node_diff_ksi[4] = {
885  FTensor::Tensor1<double*,3>(&diffN[0],&diffN[ 1],&diffN[ 2]),
886  FTensor::Tensor1<double*,3>(&diffN[3],&diffN[ 4],&diffN[ 5]),
887  FTensor::Tensor1<double*,3>(&diffN[6],&diffN[ 7],&diffN[ 8]),
888  FTensor::Tensor1<double*,3>(&diffN[9],&diffN[10],&diffN[11])
889  };
890 
891  double diff_ksi0i[3],diff_ksi0j[3],diff_ksi0k[3];
892  FTensor::Tensor1<double*,3> t_diff_ksi0i(diff_ksi0i,&diff_ksi0i[1],&diff_ksi0i[2]);
893  FTensor::Tensor1<double*,3> t_diff_ksi0j(diff_ksi0j,&diff_ksi0j[1],&diff_ksi0j[2]);
894  FTensor::Tensor1<double*,3> t_diff_ksi0k(diff_ksi0k,&diff_ksi0k[1],&diff_ksi0k[2]);
895  t_diff_ksi0i(i) = t_node_diff_ksi[1](i)-t_node_diff_ksi[0](i);
896  t_diff_ksi0j(i) = t_node_diff_ksi[2](i)-t_node_diff_ksi[0](i);
897  t_diff_ksi0k(i) = t_node_diff_ksi[3](i)-t_node_diff_ksi[0](i);
898 
899  std::vector<double> v_psi_l_0i(p+1),v_diff_psi_l_0i(3*p+3);
900  std::vector<double> v_psi_l_0j(p+1),v_diff_psi_l_0j(3*p+3);
901  std::vector<double> v_psi_l_0k(p+1),v_diff_psi_l_0k(3*p+3);
902  double *psi_l_0i = &*v_psi_l_0i.begin();
903  double *diff_psi_l_0i = &*v_diff_psi_l_0i.begin();
904  double *psi_l_0j = &*v_psi_l_0j.begin();
905  double *diff_psi_l_0j = &*v_diff_psi_l_0j.begin();
906  double *psi_l_0k = &*v_psi_l_0k.begin();
907  double *diff_psi_l_0k = &*v_diff_psi_l_0k.begin();
908 
909  FTensor::Tensor1<double*,3> t_phi_v(&phi_v[0],&phi_v[1],&phi_v[2],3);
910  FTensor::Tensor2<double*,3,3> t_diff_phi_v(
911  &diff_phi_v[0],&diff_phi_v[3],&diff_phi_v[6],
912  &diff_phi_v[1],&diff_phi_v[4],&diff_phi_v[7],
913  &diff_phi_v[2],&diff_phi_v[5],&diff_phi_v[8],9
914  );
916 
917  for(int ii = 0;ii!=nb_integration_pts;ii++) {
918 
919  const int node_shift = ii*4;
920  const int n0 = node_shift+0;
921  const int n1 = node_shift+1;
922  const int n2 = node_shift+2;
923  const int n3 = node_shift+3;
924 
925  const double beta_v = N[n0]*N[n1]*N[n2]*N[n3];
926 
927  const double ksi_0i = N[n1]-N[n0];
928  ierr = base_polynomials(p,ksi_0i,diff_ksi0i,psi_l_0i,diff_psi_l_0i,3); CHKERRG(ierr);
929  const double ksi_0j = N[n2]-N[n0];
930  ierr = base_polynomials(p,ksi_0j,diff_ksi0j,psi_l_0j,diff_psi_l_0j,3); CHKERRG(ierr);
931  const double ksi_0k = N[n3]-N[n0];
932  ierr = base_polynomials(p,ksi_0k,diff_ksi0k,psi_l_0k,diff_psi_l_0k,3); CHKERRG(ierr);
933 
934  FTensor::Tensor1<double,3> t_diff_beta_v;
935  t_diff_beta_v(j) =
936  t_node_diff_ksi[0](j)*N[n1]*N[n2]*N[n3]+
937  N[n0]*t_node_diff_ksi[1](j)*N[n2]*N[n3]+
938  N[n0]*N[n1]*t_node_diff_ksi[2](j)*N[n3]+
939  N[n0]*N[n1]*N[n2]*t_node_diff_ksi[3](j);
940 
941  int cc = 0;
942  for(int oo = 0;oo<=(p-4);oo++) {
943  FTensor::Tensor1<double*,3> t_diff_psi_l_0i(
944  &diff_psi_l_0i[0],
945  &diff_psi_l_0i[p+1],
946  &diff_psi_l_0i[2*p+2],1
947  );
948  for(int pp0 = 0;pp0<=oo;pp0++) {
949  FTensor::Tensor1<double*,3> t_diff_psi_l_0j(
950  &diff_psi_l_0j[0],
951  &diff_psi_l_0j[p+1],
952  &diff_psi_l_0j[2*p+2],1
953  );
954  for(int pp1 = 0;(pp0+pp1)<=oo;pp1++) {
955  const int pp2 = oo-pp0-pp1;
956  if(pp2>=0) {
957  FTensor::Tensor1<double*,3> t_diff_psi_l_0k(
958  &diff_psi_l_0k[0+pp2],
959  &diff_psi_l_0k[p+1+pp2],
960  &diff_psi_l_0k[2*p+2+pp2],1
961  );
962  const double t = psi_l_0i[pp0]*psi_l_0j[pp1]*psi_l_0k[pp2];
963  const double a = beta_v*t;
964  t_phi_v(0) = a;
965  t_phi_v(1) = 0;
966  t_phi_v(2) = 0;
967  ++t_phi_v;
968  ++cc;
969  t_phi_v(0) = 0;
970  t_phi_v(1) = a;
971  t_phi_v(2) = 0;
972  ++t_phi_v;
973  ++cc;
974  t_phi_v(0) = 0;
975  t_phi_v(1) = 0;
976  t_phi_v(2) = a;
977  ++t_phi_v;
978  ++cc;
979  t_b(j) =
980  t_diff_beta_v(j)*t+
981  beta_v*(
982  t_diff_psi_l_0i(j)*psi_l_0j[pp1]*psi_l_0k[pp2]+
983  psi_l_0i[pp0]*t_diff_psi_l_0j(j)*psi_l_0k[pp2]+
984  psi_l_0i[pp0]*psi_l_0j[pp1]*t_diff_psi_l_0k(j)
985  );
986  t_diff_phi_v(N0,j) = t_b(j);
987  t_diff_phi_v(N1,j) = 0;
988  t_diff_phi_v(N2,j) = 0;
989  ++t_diff_phi_v;
990  t_diff_phi_v(N0,j) = 0;
991  t_diff_phi_v(N1,j) = t_b(j);
992  t_diff_phi_v(N2,j) = 0;
993  ++t_diff_phi_v;
994  t_diff_phi_v(N0,j) = 0;
995  t_diff_phi_v(N1,j) = 0;
996  t_diff_phi_v(N2,j) = t_b(j);
997  ++t_diff_phi_v;
998  }
999  ++t_diff_psi_l_0j;
1000  }
1001  ++t_diff_psi_l_0i;
1002  }
1003  }
1004 
1005  const int nb_base_fun_on_face = NBVOLUMETET_TET_HCURL(p);
1006  if(cc!=nb_base_fun_on_face) {
1007  SETERRQ2(
1008  PETSC_COMM_SELF,
1010  "Wrong number of base functions %d != %d",
1011  cc,nb_base_fun_on_face
1012  );
1013  }
1014 
1015  }
1017 }
#define NBVOLUMETET_TET_HCURL(P)
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:511
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474

◆ Hdiv_Ainsworth_EdgeBasedVolumeShapeFunctions_MBTET()

MoFEMErrorCode MoFEM::Hdiv_Ainsworth_EdgeBasedVolumeShapeFunctions_MBTET ( int  p,
double N,
double diffN,
double phi_v_e[6],
double diff_phi_v_e[6],
int  gdim,
PetscErrorCode(*)(int p, double s, double *diff_s, double *L, double *diffL, const int dim)  base_polynomials 
)

Hdiv base function, Edge-based interior (volume) functions by Ainsworth [1].

Parameters
pvolume approx. order
Nshape functions
diffNderivatives of shape functions
phi_v_ebase functions (return)
diff_phi_v_ederivatives of base functions (returned)
gdimnumber of integration points
base_polynomialsbase function (Legendre/Lobbatto-Gauss)
Returns
error code

Definition at line 273 of file Hdiv.cpp.

283  {
284 
285  const int edges_nodes[6][2] = {
286  {0,1}, {1,2}, {2,0}, {0,3}, {1,3}, {2,3}
287  };
288 
290  if(p<2) MoFEMFunctionReturnHot(0);
291  if(diffN == NULL) {
292  SETERRQ(PETSC_COMM_SELF,MOFEM_DATA_INCONSISTENCY,"data inconsistency");
293  }
294 
295  FTensor::Tensor1<double,3> t_coords[4] = {
300  };
301  FTensor::Tensor1<double*,3> t_node_diff_ksi[4] = {
302  FTensor::Tensor1<double*,3>(&diffN[0],&diffN[ 1],&diffN[ 2]),
303  FTensor::Tensor1<double*,3>(&diffN[3],&diffN[ 4],&diffN[ 5]),
304  FTensor::Tensor1<double*,3>(&diffN[6],&diffN[ 7],&diffN[ 8]),
305  FTensor::Tensor1<double*,3>(&diffN[9],&diffN[10],&diffN[11])
306  };
307 
310 
312  FTensor::Tensor1<double,3> t_diff_ksi0i;
313  FTensor::Tensor1<double,3> t_diff_beta_e;
314 
315  double psi_l[p+1];
316  double diff_psi_l[3*(p+1)];
317 
318  for(int ee = 0;ee!=6;ee++) {
319  t_tou_e(i) =
320  t_coords[edges_nodes[ee][1]](i)-t_coords[edges_nodes[ee][0]](i);
321  t_diff_ksi0i(i) =
322  t_node_diff_ksi[edges_nodes[ee][1]](i)-t_node_diff_ksi[edges_nodes[ee][0]](i);
323  FTensor::Tensor1<double*,3> t_psi_v_e(
324  &phi_v_e[ee][0],&phi_v_e[ee][1],&phi_v_e[ee][2],3
325  );
326  FTensor::Tensor2<double*,3,3> t_diff_phi_v_e(
327  &diff_phi_v_e[ee][HDIV0_0],&diff_phi_v_e[ee][HDIV0_1],&diff_phi_v_e[ee][HDIV0_2],
328  &diff_phi_v_e[ee][HDIV1_0],&diff_phi_v_e[ee][HDIV1_1],&diff_phi_v_e[ee][HDIV1_2],
329  &diff_phi_v_e[ee][HDIV2_0],&diff_phi_v_e[ee][HDIV2_1],&diff_phi_v_e[ee][HDIV2_2],9
330  );
331  for(int ii = 0;ii!=gdim;ii++) {
332  const int node_shift = ii*4;
333  const double ni = N[node_shift+edges_nodes[ee][1]];
334  const double n0 = N[node_shift+edges_nodes[ee][0]];
335  const double beta_e = ni*n0;
336  const double ksi0i = ni-n0;
337  if(diff_phi_v_e) {
338  t_diff_beta_e(i) =
339  ni*t_node_diff_ksi[edges_nodes[ee][0]](i)+
340  t_node_diff_ksi[edges_nodes[ee][1]](i)*n0;
341  ierr = base_polynomials(p,ksi0i,&t_diff_ksi0i(0),psi_l,diff_psi_l,3); CHKERRG(ierr);
342  } else {
343  ierr = base_polynomials(p,ksi0i,NULL,psi_l,NULL,3); CHKERRG(ierr);
344  }
345  FTensor::Tensor0<double*> t_psi_l(&psi_l[0]);
346  FTensor::Tensor1<double*,3> t_diff_psi_l(
347  &diff_psi_l[0],&diff_psi_l[p+1],&diff_psi_l[2*p+2],1
348  );
349  for(int l = 0;l<=p-2;l++) {
350  t_psi_v_e(i) = (beta_e*t_psi_l)*t_tou_e(i);
351  ++t_psi_v_e;
352  if(diff_phi_v_e) {
353  t_diff_phi_v_e(i,j) =
354  (t_diff_beta_e(j)*t_psi_l+beta_e*t_diff_psi_l(j))*
355  t_tou_e(i);
356  ++t_diff_phi_v_e;
357  ++t_diff_psi_l;
358  }
359  ++t_psi_l;
360  }
361  }
362  }
363 
365 }
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:468
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
Definition: definitions.h:511
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return() ...
Definition: definitions.h:474

◆ Hdiv_Ainsworth_EdgeFaceShapeFunctions_MBTET()

MoFEMErrorCode MoFEM::Hdiv_Ainsworth_EdgeFaceShapeFunctions_MBTET ( int faces_nodes,
int