v0.16.0
Loading...
Searching...
No Matches
Classes | Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
ConvectiveMassElement Struct Reference

structure grouping operators and data used for calculation of mass (convective) element \ nonlinear_elastic_elem More...

#include "users_modules/basic_finite_elements/src/ConvectiveMassElement.hpp"

Collaboration diagram for ConvectiveMassElement:
[legend]

Classes

struct  BlockData
 data for calculation inertia forces More...
 
struct  CommonData
 common data used by volume elements More...
 
struct  CommonFunctions
 
struct  MatShellCtx
 
struct  MyVolumeFE
 definition of volume element More...
 
struct  OpEnergy
 
struct  OpEshelbyDynamicMaterialMomentumJacobian
 
struct  OpEshelbyDynamicMaterialMomentumLhs_dv
 
struct  OpEshelbyDynamicMaterialMomentumLhs_dX
 
struct  OpEshelbyDynamicMaterialMomentumLhs_dx
 
struct  OpEshelbyDynamicMaterialMomentumRhs
 
struct  OpGetCommonDataAtGaussPts
 
struct  OpGetDataAtGaussPts
 
struct  OpMassJacobian
 
struct  OpMassLhs_dM_dv
 
struct  OpMassLhs_dM_dX
 
struct  OpMassLhs_dM_dx
 
struct  OpMassRhs
 
struct  OpVelocityJacobian
 
struct  OpVelocityLhs_dV_dv
 
struct  OpVelocityLhs_dV_dx
 
struct  OpVelocityLhs_dV_dX
 
struct  OpVelocityRhs
 
struct  PCShellCtx
 
struct  ShellResidualElement
 
struct  UpdateAndControl
 Set fields DOT_. More...
 

Public Member Functions

MyVolumeFEgetLoopFeMassRhs ()
 get rhs volume element
 
MyVolumeFEgetLoopFeMassLhs ()
 get lhs volume element
 
MyVolumeFEgetLoopFeMassAuxLhs ()
 get lhs volume element for Kuu shell matrix
 
MyVolumeFEgetLoopFeVelRhs ()
 get rhs volume element
 
MyVolumeFEgetLoopFeVelLhs ()
 get lhs volume element
 
MyVolumeFEgetLoopFeTRhs ()
 get rhs volume element
 
MyVolumeFEgetLoopFeTLhs ()
 get lhs volume element
 
MyVolumeFEgetLoopFeEnergy ()
 get kinetic energy element
 
MoFEMErrorCode addHOOps ()
 
 ConvectiveMassElement (MoFEM::Interface &m_field, short int tag)
 
MoFEMErrorCode setBlocks ()
 
MoFEMErrorCode addConvectiveMassElement (string element_name, string velocity_field_name, string spatial_position_field_name, string material_position_field_name="MESH_NODE_POSITIONS", bool ale=false, BitRefLevel bit=BitRefLevel())
 
MoFEMErrorCode addVelocityElement (string element_name, string velocity_field_name, string spatial_position_field_name, string material_position_field_name="MESH_NODE_POSITIONS", bool ale=false, BitRefLevel bit=BitRefLevel())
 
MoFEMErrorCode addEshelbyDynamicMaterialMomentum (string element_name, string velocity_field_name, string spatial_position_field_name, string material_position_field_name="MESH_NODE_POSITIONS", bool ale=false, BitRefLevel bit=BitRefLevel(), Range *intersected=NULL)
 
MoFEMErrorCode setConvectiveMassOperators (string velocity_field_name, string spatial_position_field_name, string material_position_field_name="MESH_NODE_POSITIONS", bool ale=false, bool linear=false)
 
MoFEMErrorCode setVelocityOperators (string velocity_field_name, string spatial_position_field_name, string material_position_field_name="MESH_NODE_POSITIONS", bool ale=false)
 
MoFEMErrorCode setKinematicEshelbyOperators (string velocity_field_name, string spatial_position_field_name, string material_position_field_name="MESH_NODE_POSITIONS", Range *forces_on_entities_ptr=NULL)
 
MoFEMErrorCode setShellMatrixMassOperators (string velocity_field_name, string spatial_position_field_name, string material_position_field_name="MESH_NODE_POSITIONS", bool linear=false)
 

Static Public Member Functions

static MoFEMErrorCode setBlocks (MoFEM::Interface &m_field, boost::shared_ptr< map< int, BlockData > > &block_sets_ptr)
 
static MoFEMErrorCode MultOpA (Mat A, Vec x, Vec f)
 Mult operator for shell matrix.
 
static MoFEMErrorCode ZeroEntriesOp (Mat A)
 
static MoFEMErrorCode PCShellSetUpOp (PC pc)
 
static MoFEMErrorCode PCShellDestroy (PC pc)
 
static MoFEMErrorCode PCShellApplyOp (PC pc, Vec f, Vec x)
 apply pre-conditioner for shell matrix
 

Public Attributes

MyVolumeFE feMassRhs
 calculate right hand side for tetrahedral elements
 
MyVolumeFE feMassLhs
 
MyVolumeFE feMassAuxLhs
 
MyVolumeFE feVelRhs
 calculate right hand side for tetrahedral elements
 
MyVolumeFE feVelLhs
 calculate left hand side for tetrahedral elements
 
MyVolumeFE feTRhs
 calculate right hand side for tetrahedral elements
 
MyVolumeFE feTLhs
 calculate left hand side for tetrahedral elements
 
MyVolumeFE feEnergy
 calculate kinetic energy
 
MoFEM::InterfacemField
 
short int tAg
 
std::map< int, BlockDatasetOfBlocks
 maps block set id with appropriate BlockData
 
CommonData commonData
 
boost::ptr_vector< MethodForForceScalingmethodsOp
 

Detailed Description

structure grouping operators and data used for calculation of mass (convective) element \ nonlinear_elastic_elem

structure grouping operators and data used for calculation of nonlinear elastic element

In order to assemble matrices and right hand vectors, the loops over elements, entities over that elements and finally loop over integration points are executed.

Following implementation separate those three celeries of loops and to each loop attach operator.

In order to assemble matrices and right hand vectors, the loops over elements, entities over that elements and finally loop over integration points are executed.

Following implementation separate those three categories of loops and to each loop attach operator.

Examples
mofem/users_modules/basic_finite_elements/nonlinear_elasticity/nonlinear_dynamics.cpp, and mofem/users_modules/basic_finite_elements/src/HookeElement.hpp.

Definition at line 28 of file ConvectiveMassElement.hpp.

Constructor & Destructor Documentation

◆ ConvectiveMassElement()

ConvectiveMassElement::ConvectiveMassElement ( MoFEM::Interface m_field,
short int  tag 
)

Definition at line 74 of file ConvectiveMassElement.cpp.

76 : feMassRhs(m_field), feMassLhs(m_field), feMassAuxLhs(m_field),
77 feVelRhs(m_field), feVelLhs(m_field), feTRhs(m_field), feTLhs(m_field),
78 feEnergy(m_field), mField(m_field), tAg(tag) {}
MyVolumeFE feEnergy
calculate kinetic energy
MyVolumeFE feVelRhs
calculate right hand side for tetrahedral elements
MyVolumeFE feTRhs
calculate right hand side for tetrahedral elements
MyVolumeFE feMassRhs
calculate right hand side for tetrahedral elements
MyVolumeFE feTLhs
calculate left hand side for tetrahedral elements
MyVolumeFE feVelLhs
calculate left hand side for tetrahedral elements

Member Function Documentation

◆ addConvectiveMassElement()

MoFEMErrorCode ConvectiveMassElement::addConvectiveMassElement ( string  element_name,
string  velocity_field_name,
string  spatial_position_field_name,
string  material_position_field_name = "MESH_NODE_POSITIONS",
bool  ale = false,
BitRefLevel  bit = BitRefLevel() 
)

Definition at line 1841 of file ConvectiveMassElement.cpp.

1844 {
1846
1847 //
1848
1849 CHKERR mField.add_finite_element(element_name, MF_ZERO);
1851 velocity_field_name);
1853 velocity_field_name);
1855 velocity_field_name);
1857 element_name, spatial_position_field_name);
1859 element_name, spatial_position_field_name);
1861 element_name, spatial_position_field_name);
1862 if (mField.check_field(material_position_field_name)) {
1863 if (ale) {
1865 element_name, material_position_field_name);
1867 element_name, material_position_field_name);
1869 element_name, "DOT_" + material_position_field_name);
1870 }
1872 element_name, material_position_field_name);
1873 }
1875 element_name, "DOT_" + velocity_field_name);
1877 element_name, "DOT_" + spatial_position_field_name);
1878
1879 Range tets;
1880 if (bit.any()) {
1881 CHKERR mField.getInterface<BitRefManager>()->getEntitiesByTypeAndRefLevel(
1882 bit, BitRefLevel().set(), MBTET, tets);
1883 }
1884
1885 std::map<int, BlockData>::iterator sit = setOfBlocks.begin();
1886 for (; sit != setOfBlocks.end(); sit++) {
1887 Range add_tets = sit->second.tEts;
1888 if (!tets.empty()) {
1889 add_tets = intersect(add_tets, tets);
1890 }
1892 element_name);
1893 }
1894
1896}
@ MF_ZERO
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
virtual MoFEMErrorCode add_finite_element(const std::string &fe_name, enum MoFEMTypes bh=MF_EXCL, int verb=DEFAULT_VERBOSITY)=0
add finite element
virtual MoFEMErrorCode modify_finite_element_add_field_col(const std::string &fe_name, const std::string name_row)=0
set field col which finite element use
virtual MoFEMErrorCode add_ents_to_finite_element_by_type(const EntityHandle entities, const EntityType type, const std::string name, const bool recursive=true)=0
add entities to finite element
virtual MoFEMErrorCode modify_finite_element_add_field_row(const std::string &fe_name, const std::string name_row)=0
set field row which finite element use
virtual MoFEMErrorCode modify_finite_element_add_field_data(const std::string &fe_name, const std::string name_field)=0
set finite element field data
virtual bool check_field(const std::string &name) const =0
check if field is in database
auto bit
set bit
std::bitset< BITREFLEVEL_SIZE > BitRefLevel
Bit structure attached to each entity identifying to what mesh entity is attached.
Definition Types.hpp:40
std::map< int, BlockData > setOfBlocks
maps block set id with appropriate BlockData
Managing BitRefLevels.
MoFEMErrorCode getInterface(IFACE *&iface) const
Get interface reference to pointer of interface.

◆ addEshelbyDynamicMaterialMomentum()

MoFEMErrorCode ConvectiveMassElement::addEshelbyDynamicMaterialMomentum ( string  element_name,
string  velocity_field_name,
string  spatial_position_field_name,
string  material_position_field_name = "MESH_NODE_POSITIONS",
bool  ale = false,
BitRefLevel  bit = BitRefLevel(),
Range intersected = NULL 
)

Definition at line 1951 of file ConvectiveMassElement.cpp.

1954 {
1956
1957 //
1958
1959 CHKERR mField.add_finite_element(element_name, MF_ZERO);
1961 velocity_field_name);
1963 velocity_field_name);
1965 element_name, spatial_position_field_name);
1967 element_name, spatial_position_field_name);
1968 if (mField.check_field(material_position_field_name)) {
1969 if (ale) {
1971 element_name, material_position_field_name);
1973 element_name, material_position_field_name);
1975 element_name, "DOT_" + material_position_field_name);
1976 }
1978 element_name, material_position_field_name);
1979 }
1981 element_name, "DOT_" + velocity_field_name);
1983 element_name, "DOT_" + spatial_position_field_name);
1984
1985 Range tets;
1986 if (bit.any()) {
1987 CHKERR mField.getInterface<BitRefManager>()->getEntitiesByTypeAndRefLevel(
1988 bit, BitRefLevel().set(), MBTET, tets);
1989 }
1990 if (intersected != NULL) {
1991 if (tets.empty()) {
1992 tets = *intersected;
1993 } else {
1994 tets = intersect(*intersected, tets);
1995 }
1996 }
1997
1998 std::map<int, BlockData>::iterator sit = setOfBlocks.begin();
1999 for (; sit != setOfBlocks.end(); sit++) {
2000 Range add_tets = sit->second.tEts;
2001 if (!tets.empty()) {
2002 add_tets = intersect(add_tets, tets);
2003 }
2005 element_name);
2006 }
2007
2009}

◆ addHOOps()

MoFEMErrorCode ConvectiveMassElement::addHOOps ( )
inline

Definition at line 92 of file ConvectiveMassElement.hpp.

92 {
94 auto add_ops = [&](auto &fe) {
96 fe.getOpPtrVector(), {H1}, "MESH_NODE_POSITIONS");
97 };
98 CHKERR add_ops(feMassRhs);
99 CHKERR add_ops(feMassLhs);
100 CHKERR add_ops(feMassAuxLhs);
101 CHKERR add_ops(feVelRhs);
102 CHKERR add_ops(feTRhs);
103 CHKERR add_ops(feTLhs);
104 CHKERR add_ops(feEnergy);
106 }
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Add operators pushing bases from local to physical configuration.

◆ addVelocityElement()

MoFEMErrorCode ConvectiveMassElement::addVelocityElement ( string  element_name,
string  velocity_field_name,
string  spatial_position_field_name,
string  material_position_field_name = "MESH_NODE_POSITIONS",
bool  ale = false,
BitRefLevel  bit = BitRefLevel() 
)

Definition at line 1898 of file ConvectiveMassElement.cpp.

1901 {
1903
1904 //
1905
1906 CHKERR mField.add_finite_element(element_name, MF_ZERO);
1908 velocity_field_name);
1910 velocity_field_name);
1912 velocity_field_name);
1914 element_name, spatial_position_field_name);
1916 element_name, spatial_position_field_name);
1917 if (mField.check_field(material_position_field_name)) {
1918 if (ale) {
1920 element_name, material_position_field_name);
1922 element_name, "DOT_" + material_position_field_name);
1923 }
1925 element_name, material_position_field_name);
1926 }
1928 element_name, "DOT_" + velocity_field_name);
1930 element_name, "DOT_" + spatial_position_field_name);
1931
1932 Range tets;
1933 if (bit.any()) {
1934 CHKERR mField.getInterface<BitRefManager>()->getEntitiesByTypeAndRefLevel(
1935 bit, BitRefLevel().set(), MBTET, tets);
1936 }
1937
1938 std::map<int, BlockData>::iterator sit = setOfBlocks.begin();
1939 for (; sit != setOfBlocks.end(); sit++) {
1940 Range add_tets = sit->second.tEts;
1941 if (!tets.empty()) {
1942 add_tets = intersect(add_tets, tets);
1943 }
1945 element_name);
1946 }
1947
1949}

◆ getLoopFeEnergy()

MyVolumeFE & ConvectiveMassElement::getLoopFeEnergy ( )
inline

get kinetic energy element

Definition at line 88 of file ConvectiveMassElement.hpp.

◆ getLoopFeMassAuxLhs()

MyVolumeFE & ConvectiveMassElement::getLoopFeMassAuxLhs ( )
inline

get lhs volume element for Kuu shell matrix

Definition at line 73 of file ConvectiveMassElement.hpp.

◆ getLoopFeMassLhs()

MyVolumeFE & ConvectiveMassElement::getLoopFeMassLhs ( )
inline

get lhs volume element

Definition at line 68 of file ConvectiveMassElement.hpp.

◆ getLoopFeMassRhs()

MyVolumeFE & ConvectiveMassElement::getLoopFeMassRhs ( )
inline

get rhs volume element

Definition at line 63 of file ConvectiveMassElement.hpp.

◆ getLoopFeTLhs()

MyVolumeFE & ConvectiveMassElement::getLoopFeTLhs ( )
inline

get lhs volume element

Definition at line 85 of file ConvectiveMassElement.hpp.

◆ getLoopFeTRhs()

MyVolumeFE & ConvectiveMassElement::getLoopFeTRhs ( )
inline

get rhs volume element

Definition at line 83 of file ConvectiveMassElement.hpp.

◆ getLoopFeVelLhs()

MyVolumeFE & ConvectiveMassElement::getLoopFeVelLhs ( )
inline

get lhs volume element

Definition at line 80 of file ConvectiveMassElement.hpp.

◆ getLoopFeVelRhs()

MyVolumeFE & ConvectiveMassElement::getLoopFeVelRhs ( )
inline

get rhs volume element

Definition at line 78 of file ConvectiveMassElement.hpp.

◆ MultOpA()

static MoFEMErrorCode ConvectiveMassElement::MultOpA ( Mat  A,
Vec  x,
Vec  f 
)
inlinestatic

Mult operator for shell matrix.

\[ \left[ \begin{array}{cc} \mathbf{M} & \mathbf{K} \\ \mathbf{I} & -\mathbf{I}a \end{array} \right] \left[ \begin{array}{c} \mathbf{v} \\ \mathbf{u} \end{array} \right] = \left[ \begin{array}{c} \mathbf{r}_u \\ \mathbf{r}_v \end{array} \right] \]

Examples
mofem/users_modules/basic_finite_elements/nonlinear_elasticity/nonlinear_dynamics.cpp.

Definition at line 546 of file ConvectiveMassElement.hpp.

546 {
548
549 void *void_ctx;
550 CHKERR MatShellGetContext(A, &void_ctx);
551 MatShellCtx *ctx = (MatShellCtx *)void_ctx;
552 if (!ctx->iNitialized) {
553 CHKERR ctx->iNit();
554 }
555 CHKERR VecZeroEntries(f);
556 // Mult Ku
557 CHKERR VecScatterBegin(ctx->scatterU, x, ctx->u, INSERT_VALUES,
558 SCATTER_FORWARD);
559 CHKERR VecScatterEnd(ctx->scatterU, x, ctx->u, INSERT_VALUES,
560 SCATTER_FORWARD);
561 CHKERR MatMult(ctx->K, ctx->u, ctx->Ku);
562 CHKERR VecScatterBegin(ctx->scatterU, ctx->Ku, f, INSERT_VALUES,
563 SCATTER_REVERSE);
564 CHKERR VecScatterEnd(ctx->scatterU, ctx->Ku, f, INSERT_VALUES,
565 SCATTER_REVERSE);
566 // Mult Mv
567 CHKERR VecScatterBegin(ctx->scatterV, x, ctx->v, INSERT_VALUES,
568 SCATTER_FORWARD);
569 CHKERR VecScatterEnd(ctx->scatterV, x, ctx->v, INSERT_VALUES,
570 SCATTER_FORWARD);
571 CHKERR MatMult(ctx->M, ctx->v, ctx->Mv);
572 CHKERR VecScatterBegin(ctx->scatterU, ctx->Mv, f, ADD_VALUES,
573 SCATTER_REVERSE);
574 CHKERR VecScatterEnd(ctx->scatterU, ctx->Mv, f, ADD_VALUES,
575 SCATTER_REVERSE);
576 // Velocities
577 CHKERR VecAXPY(ctx->v, -ctx->ts_a, ctx->u);
578 // CHKERR VecScale(ctx->v,ctx->scale);
579 CHKERR VecScatterBegin(ctx->scatterV, ctx->v, f, INSERT_VALUES,
580 SCATTER_REVERSE);
581 CHKERR VecScatterEnd(ctx->scatterV, ctx->v, f, INSERT_VALUES,
582 SCATTER_REVERSE);
583 // Assemble
584 CHKERR VecAssemblyBegin(f);
585 CHKERR VecAssemblyEnd(f);
587 }
constexpr AssemblyType A

◆ PCShellApplyOp()

static MoFEMErrorCode ConvectiveMassElement::PCShellApplyOp ( PC  pc,
Vec  f,
Vec  x 
)
inlinestatic

apply pre-conditioner for shell matrix

\[ \left[ \begin{array}{cc} \mathbf{M} & \mathbf{K} \\ \mathbf{I} & -\mathbf{I}a \end{array} \right] \left[ \begin{array}{c} \mathbf{v} \\ \mathbf{u} \end{array} \right] = \left[ \begin{array}{c} \mathbf{r}_u \\ \mathbf{r}_v \end{array} \right] \]

where \(\mathbf{v} = \mathbf{r}_v + a\mathbf{u}\) and \(\mathbf{u}=(a\mathbf{M}+\mathbf{K})^{-1}(\mathbf{r}_u - \mathbf{M}\mathbf{r}_v\).

Examples
mofem/users_modules/basic_finite_elements/nonlinear_elasticity/nonlinear_dynamics.cpp.

Definition at line 671 of file ConvectiveMassElement.hpp.

671 {
673
674 void *void_ctx;
675 CHKERR PCShellGetContext(pc, &void_ctx);
676 PCShellCtx *ctx = (PCShellCtx *)void_ctx;
677 MatShellCtx *shell_mat_ctx;
678 CHKERR MatShellGetContext(ctx->shellMat, &shell_mat_ctx);
679 // forward
680 CHKERR VecScatterBegin(shell_mat_ctx->scatterU, f, shell_mat_ctx->Ku,
681 INSERT_VALUES, SCATTER_FORWARD);
682 CHKERR VecScatterEnd(shell_mat_ctx->scatterU, f, shell_mat_ctx->Ku,
683 INSERT_VALUES, SCATTER_FORWARD);
684 CHKERR VecScatterBegin(shell_mat_ctx->scatterV, f, shell_mat_ctx->v,
685 INSERT_VALUES, SCATTER_FORWARD);
686 CHKERR VecScatterEnd(shell_mat_ctx->scatterV, f, shell_mat_ctx->v,
687 INSERT_VALUES, SCATTER_FORWARD);
688 // CHKERR VecScale(shell_mat_ctx->v,1/shell_mat_ctx->scale);
689 // apply pre-conditioner and calculate u
690 CHKERR MatMult(shell_mat_ctx->M, shell_mat_ctx->v,
691 shell_mat_ctx->Mv); // Mrv
692 CHKERR VecAXPY(shell_mat_ctx->Ku, -1, shell_mat_ctx->Mv); // f-Mrv
693 CHKERR PCApply(ctx->pC, shell_mat_ctx->Ku,
694 shell_mat_ctx->u); // u = (aM+K)^(-1)(ru-Mrv)
695 // VecView(shell_mat_ctx->u,PETSC_VIEWER_STDOUT_WORLD);
696 // calculate velocities
697 CHKERR VecAXPY(shell_mat_ctx->v, shell_mat_ctx->ts_a,
698 shell_mat_ctx->u); // v = v + a*u
699 // VecView(shell_mat_ctx->v,PETSC_VIEWER_STDOUT_WORLD);
700 // reverse
701 CHKERR VecZeroEntries(x);
702 CHKERR VecScatterBegin(shell_mat_ctx->scatterU, shell_mat_ctx->u, x,
703 INSERT_VALUES, SCATTER_REVERSE);
704 CHKERR VecScatterEnd(shell_mat_ctx->scatterU, shell_mat_ctx->u, x,
705 INSERT_VALUES, SCATTER_REVERSE);
706 CHKERR VecScatterBegin(shell_mat_ctx->scatterV, shell_mat_ctx->v, x,
707 INSERT_VALUES, SCATTER_REVERSE);
708 CHKERR VecScatterEnd(shell_mat_ctx->scatterV, shell_mat_ctx->v, x,
709 INSERT_VALUES, SCATTER_REVERSE);
710 CHKERR VecAssemblyBegin(x);
711 CHKERR VecAssemblyEnd(x);
713 }

◆ PCShellDestroy()

static MoFEMErrorCode ConvectiveMassElement::PCShellDestroy ( PC  pc)
inlinestatic
Examples
mofem/users_modules/basic_finite_elements/nonlinear_elasticity/nonlinear_dynamics.cpp.

Definition at line 633 of file ConvectiveMassElement.hpp.

633 {
635
636 void *void_ctx;
637 CHKERR PCShellGetContext(pc, &void_ctx);
638 PCShellCtx *ctx = (PCShellCtx *)void_ctx;
639 CHKERR ctx->dEstroy();
641 }

◆ PCShellSetUpOp()

static MoFEMErrorCode ConvectiveMassElement::PCShellSetUpOp ( PC  pc)
inlinestatic
Examples
mofem/users_modules/basic_finite_elements/nonlinear_elasticity/nonlinear_dynamics.cpp.

Definition at line 618 of file ConvectiveMassElement.hpp.

618 {
620
621 void *void_ctx;
622 CHKERR PCShellGetContext(pc, &void_ctx);
623 PCShellCtx *ctx = (PCShellCtx *)void_ctx;
624 CHKERR ctx->iNit();
625 MatShellCtx *shell_mat_ctx;
626 CHKERR MatShellGetContext(ctx->shellMat, &shell_mat_ctx);
627 CHKERR PCSetFromOptions(ctx->pC);
628 CHKERR PCSetOperators(ctx->pC, shell_mat_ctx->barK, shell_mat_ctx->barK);
629 CHKERR PCSetUp(ctx->pC);
631 }

◆ setBlocks() [1/2]

MoFEMErrorCode ConvectiveMassElement::setBlocks ( )
Examples
mofem/users_modules/basic_finite_elements/elasticity/elasticity.cpp.

Definition at line 1767 of file ConvectiveMassElement.cpp.

1767 {
1769
1770 Range added_tets;
1772 mField, BLOCKSET | BODYFORCESSET, it)) {
1773 int id = it->getMeshsetId();
1774 EntityHandle meshset = it->getMeshset();
1775 CHKERR mField.get_moab().get_entities_by_type(meshset, MBTET,
1776 setOfBlocks[id].tEts, true);
1777 added_tets.merge(setOfBlocks[id].tEts);
1778 Block_BodyForces mydata;
1779 CHKERR it->getAttributeDataStructure(mydata);
1780 setOfBlocks[id].rho0 = mydata.data.density;
1781 setOfBlocks[id].a0.resize(3);
1782 setOfBlocks[id].a0[0] = mydata.data.acceleration_x;
1783 setOfBlocks[id].a0[1] = mydata.data.acceleration_y;
1784 setOfBlocks[id].a0[2] = mydata.data.acceleration_z;
1785 // std::cerr << setOfBlocks[id].tEts << std::endl;
1786 }
1787
1789 mField, BLOCKSET | MAT_ELASTICSET, it)) {
1790 Mat_Elastic mydata;
1791 CHKERR it->getAttributeDataStructure(mydata);
1792 if (mydata.data.User1 == 0)
1793 continue;
1794 Range tets;
1795 EntityHandle meshset = it->getMeshset();
1796 CHKERR mField.get_moab().get_entities_by_type(meshset, MBTET, tets, true);
1797 tets = subtract(tets, added_tets);
1798 if (tets.empty())
1799 continue;
1800 int id = it->getMeshsetId();
1801 setOfBlocks[-id].tEts = tets;
1802 setOfBlocks[-id].rho0 = mydata.data.User1;
1803 setOfBlocks[-id].a0.resize(3);
1804 setOfBlocks[-id].a0[0] = mydata.data.User2;
1805 setOfBlocks[-id].a0[1] = mydata.data.User3;
1806 setOfBlocks[-id].a0[2] = mydata.data.User4;
1807 // std::cerr << setOfBlocks[id].tEts << std::endl;
1808 }
1809
1811}
@ BODYFORCESSET
block name is "BODY_FORCES"
@ MAT_ELASTICSET
block name is "MAT_ELASTIC"
@ BLOCKSET
#define _IT_CUBITMESHSETS_BY_BCDATA_TYPE_FOR_LOOP_(MESHSET_MANAGER, CUBITBCTYPE, IT)
Iterator that loops over a specific Cubit MeshSet in a moFEM field.
Body force data structure.
virtual moab::Interface & get_moab()=0
Elastic material data structure.

◆ setBlocks() [2/2]

MoFEMErrorCode ConvectiveMassElement::setBlocks ( MoFEM::Interface m_field,
boost::shared_ptr< map< int, BlockData > > &  block_sets_ptr 
)
static

Definition at line 1813 of file ConvectiveMassElement.cpp.

1815 {
1817
1818 if (!block_sets_ptr)
1819 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
1820 "Pointer to block of sets is null");
1821
1823 m_field, BLOCKSET | BODYFORCESSET, it)) {
1824 Block_BodyForces mydata;
1825 CHKERR it->getAttributeDataStructure(mydata);
1826 int id = it->getMeshsetId();
1827 auto &block_data = (*block_sets_ptr)[id];
1828 EntityHandle meshset = it->getMeshset();
1829 CHKERR m_field.get_moab().get_entities_by_dimension(meshset, 3,
1830 block_data.tEts, true);
1831 block_data.rho0 = mydata.data.density;
1832 block_data.a0.resize(3);
1833 block_data.a0[0] = mydata.data.acceleration_x;
1834 block_data.a0[1] = mydata.data.acceleration_y;
1835 block_data.a0[2] = mydata.data.acceleration_z;
1836 }
1837
1839}
@ MOFEM_DATA_INCONSISTENCY
Definition definitions.h:31

◆ setConvectiveMassOperators()

MoFEMErrorCode ConvectiveMassElement::setConvectiveMassOperators ( string  velocity_field_name,
string  spatial_position_field_name,
string  material_position_field_name = "MESH_NODE_POSITIONS",
bool  ale = false,
bool  linear = false 
)

Definition at line 2011 of file ConvectiveMassElement.cpp.

2013 {
2015
2016 commonData.spatialPositions = spatial_position_field_name;
2017 commonData.meshPositions = material_position_field_name;
2018 commonData.spatialVelocities = velocity_field_name;
2019 commonData.lInear = linear;
2020
2021 // Rhs
2022 feMassRhs.getOpPtrVector().push_back(
2023 new OpGetCommonDataAtGaussPts(velocity_field_name, commonData));
2024 feMassRhs.getOpPtrVector().push_back(
2025 new OpGetCommonDataAtGaussPts(spatial_position_field_name, commonData));
2026 feMassRhs.getOpPtrVector().push_back(
2027 new OpGetCommonDataAtGaussPts("DOT_" + velocity_field_name, commonData));
2028 feMassRhs.getOpPtrVector().push_back(new OpGetCommonDataAtGaussPts(
2029 "DOT_" + spatial_position_field_name, commonData));
2030 if (mField.check_field(material_position_field_name)) {
2031 feMassRhs.getOpPtrVector().push_back(new OpGetCommonDataAtGaussPts(
2032 material_position_field_name, commonData));
2033 if (ale) {
2034 feMassRhs.getOpPtrVector().push_back(new OpGetCommonDataAtGaussPts(
2035 "DOT_" + material_position_field_name, commonData));
2036 } else {
2037 feMassRhs.meshPositionsFieldName = material_position_field_name;
2038 }
2039 }
2040 std::map<int, BlockData>::iterator sit = setOfBlocks.begin();
2041 for (; sit != setOfBlocks.end(); sit++) {
2042 feMassRhs.getOpPtrVector().push_back(
2043 new OpMassJacobian(spatial_position_field_name, sit->second, commonData,
2044 methodsOp, tAg, false));
2045 feMassRhs.getOpPtrVector().push_back(
2046 new OpMassRhs(spatial_position_field_name, sit->second, commonData));
2047 }
2048
2049 // Lhs
2050 feMassLhs.getOpPtrVector().push_back(
2051 new OpGetCommonDataAtGaussPts(velocity_field_name, commonData));
2052 feMassLhs.getOpPtrVector().push_back(
2053 new OpGetCommonDataAtGaussPts(spatial_position_field_name, commonData));
2054 feMassLhs.getOpPtrVector().push_back(
2055 new OpGetCommonDataAtGaussPts("DOT_" + velocity_field_name, commonData));
2056 feMassLhs.getOpPtrVector().push_back(new OpGetCommonDataAtGaussPts(
2057 "DOT_" + spatial_position_field_name, commonData));
2058 if (mField.check_field(material_position_field_name)) {
2059 feMassLhs.getOpPtrVector().push_back(new OpGetCommonDataAtGaussPts(
2060 material_position_field_name, commonData));
2061 if (ale) {
2062 feMassLhs.getOpPtrVector().push_back(new OpGetCommonDataAtGaussPts(
2063 "DOT_" + material_position_field_name, commonData));
2064 } else {
2065 feMassLhs.meshPositionsFieldName = material_position_field_name;
2066 }
2067 }
2068 sit = setOfBlocks.begin();
2069 for (; sit != setOfBlocks.end(); sit++) {
2070 feMassLhs.getOpPtrVector().push_back(
2071 new OpMassJacobian(spatial_position_field_name, sit->second, commonData,
2072 methodsOp, tAg, true));
2073 feMassLhs.getOpPtrVector().push_back(
2074 new OpMassLhs_dM_dv(spatial_position_field_name, velocity_field_name,
2075 sit->second, commonData));
2076 feMassLhs.getOpPtrVector().push_back(new OpMassLhs_dM_dx(
2077 spatial_position_field_name, spatial_position_field_name, sit->second,
2078 commonData));
2079 if (mField.check_field(material_position_field_name)) {
2080 if (ale) {
2081 feMassLhs.getOpPtrVector().push_back(new OpMassLhs_dM_dX(
2082 spatial_position_field_name, material_position_field_name,
2083 sit->second, commonData));
2084 } else {
2085 feMassLhs.meshPositionsFieldName = material_position_field_name;
2086 }
2087 }
2088 }
2089
2090 // Energy
2091 feEnergy.getOpPtrVector().push_back(
2092 new OpGetCommonDataAtGaussPts(velocity_field_name, commonData));
2093 feEnergy.getOpPtrVector().push_back(
2094 new OpGetCommonDataAtGaussPts(spatial_position_field_name, commonData));
2095 if (mField.check_field(material_position_field_name)) {
2096 feEnergy.getOpPtrVector().push_back(new OpGetCommonDataAtGaussPts(
2097 material_position_field_name, commonData));
2098 feEnergy.meshPositionsFieldName = material_position_field_name;
2099 }
2100 sit = setOfBlocks.begin();
2101 for (; sit != setOfBlocks.end(); sit++) {
2102 feEnergy.getOpPtrVector().push_back(new OpEnergy(
2103 spatial_position_field_name, sit->second, commonData, feEnergy.V));
2104 }
2105
2107}
boost::ptr_vector< MethodForForceScaling > methodsOp
boost::ptr_deque< UserDataOperator > & getOpPtrVector()
Use to push back operator for row operator.

◆ setKinematicEshelbyOperators()

MoFEMErrorCode ConvectiveMassElement::setKinematicEshelbyOperators ( string  velocity_field_name,
string  spatial_position_field_name,
string  material_position_field_name = "MESH_NODE_POSITIONS",
Range forces_on_entities_ptr = NULL 
)

Definition at line 2187 of file ConvectiveMassElement.cpp.

2189 {
2191
2192 commonData.spatialPositions = spatial_position_field_name;
2193 commonData.meshPositions = material_position_field_name;
2194 commonData.spatialVelocities = velocity_field_name;
2195
2196 // Rhs
2197 feTRhs.getOpPtrVector().push_back(
2198 new OpGetCommonDataAtGaussPts(velocity_field_name, commonData));
2199 feTRhs.getOpPtrVector().push_back(
2200 new OpGetCommonDataAtGaussPts(spatial_position_field_name, commonData));
2201 feTRhs.getOpPtrVector().push_back(
2202 new OpGetCommonDataAtGaussPts(material_position_field_name, commonData));
2203 feTRhs.getOpPtrVector().push_back(
2204 new OpGetCommonDataAtGaussPts("DOT_" + velocity_field_name, commonData));
2205
2206 std::map<int, BlockData>::iterator sit = setOfBlocks.begin();
2207 for (; sit != setOfBlocks.end(); sit++) {
2208 feTRhs.getOpPtrVector().push_back(
2209 new OpEshelbyDynamicMaterialMomentumJacobian(
2210 material_position_field_name, sit->second, commonData, tAg, false));
2211 feTRhs.getOpPtrVector().push_back(new OpEshelbyDynamicMaterialMomentumRhs(
2212 material_position_field_name, sit->second, commonData,
2213 forces_on_entities_ptr));
2214 }
2215
2216 // Lhs
2217 feTLhs.getOpPtrVector().push_back(
2218 new OpGetCommonDataAtGaussPts(velocity_field_name, commonData));
2219 feTLhs.getOpPtrVector().push_back(
2220 new OpGetCommonDataAtGaussPts(spatial_position_field_name, commonData));
2221 feTLhs.getOpPtrVector().push_back(
2222 new OpGetCommonDataAtGaussPts("DOT_" + velocity_field_name, commonData));
2223 if (mField.check_field(material_position_field_name)) {
2224 feTLhs.getOpPtrVector().push_back(new OpGetCommonDataAtGaussPts(
2225 material_position_field_name, commonData));
2226 }
2227 sit = setOfBlocks.begin();
2228 for (; sit != setOfBlocks.end(); sit++) {
2229 feTLhs.getOpPtrVector().push_back(
2230 new OpEshelbyDynamicMaterialMomentumJacobian(
2231 material_position_field_name, sit->second, commonData, tAg));
2232 feTLhs.getOpPtrVector().push_back(
2233 new OpEshelbyDynamicMaterialMomentumLhs_dv(
2234 material_position_field_name, velocity_field_name, sit->second,
2235 commonData, forces_on_entities_ptr));
2236 feTLhs.getOpPtrVector().push_back(
2237 new OpEshelbyDynamicMaterialMomentumLhs_dx(
2238 material_position_field_name, spatial_position_field_name,
2239 sit->second, commonData, forces_on_entities_ptr));
2240 feTLhs.getOpPtrVector().push_back(
2241 new OpEshelbyDynamicMaterialMomentumLhs_dX(
2242 material_position_field_name, material_position_field_name,
2243 sit->second, commonData, forces_on_entities_ptr));
2244 }
2245
2247}

◆ setShellMatrixMassOperators()

MoFEMErrorCode ConvectiveMassElement::setShellMatrixMassOperators ( string  velocity_field_name,
string  spatial_position_field_name,
string  material_position_field_name = "MESH_NODE_POSITIONS",
bool  linear = false 
)

Definition at line 2249 of file ConvectiveMassElement.cpp.

2251 {
2253
2254 commonData.spatialPositions = spatial_position_field_name;
2255 commonData.meshPositions = material_position_field_name;
2256 commonData.spatialVelocities = velocity_field_name;
2257 commonData.lInear = linear;
2258
2259 // Rhs
2260 feMassRhs.getOpPtrVector().push_back(
2261 new OpGetCommonDataAtGaussPts(velocity_field_name, commonData));
2262 feMassRhs.getOpPtrVector().push_back(
2263 new OpGetCommonDataAtGaussPts(spatial_position_field_name, commonData));
2264 feMassRhs.getOpPtrVector().push_back(
2265 new OpGetCommonDataAtGaussPts("DOT_" + velocity_field_name, commonData));
2266 if (mField.check_field(material_position_field_name)) {
2267 feMassRhs.getOpPtrVector().push_back(new OpGetCommonDataAtGaussPts(
2268 material_position_field_name, commonData));
2269 feMassRhs.meshPositionsFieldName = material_position_field_name;
2270 }
2271 std::map<int, BlockData>::iterator sit = setOfBlocks.begin();
2272 for (; sit != setOfBlocks.end(); sit++) {
2273 feMassRhs.getOpPtrVector().push_back(
2274 new OpMassJacobian(spatial_position_field_name, sit->second, commonData,
2275 methodsOp, tAg, false));
2276 feMassRhs.getOpPtrVector().push_back(
2277 new OpMassRhs(spatial_position_field_name, sit->second, commonData));
2278 }
2279
2280 // Lhs
2281 feMassLhs.getOpPtrVector().push_back(
2282 new OpGetCommonDataAtGaussPts(velocity_field_name, commonData));
2283 feMassLhs.getOpPtrVector().push_back(
2284 new OpGetCommonDataAtGaussPts(spatial_position_field_name, commonData));
2285 feMassLhs.getOpPtrVector().push_back(
2286 new OpGetCommonDataAtGaussPts("DOT_" + velocity_field_name, commonData));
2287 if (mField.check_field(material_position_field_name)) {
2288 feMassLhs.getOpPtrVector().push_back(new OpGetCommonDataAtGaussPts(
2289 material_position_field_name, commonData));
2290 feMassLhs.meshPositionsFieldName = material_position_field_name;
2291 }
2292 sit = setOfBlocks.begin();
2293 for (; sit != setOfBlocks.end(); sit++) {
2294 feMassLhs.getOpPtrVector().push_back(
2295 new OpMassJacobian(spatial_position_field_name, sit->second, commonData,
2296 methodsOp, tAg, true));
2297 feMassLhs.getOpPtrVector().push_back(new OpMassLhs_dM_dv(
2298 spatial_position_field_name, spatial_position_field_name, sit->second,
2299 commonData));
2300 if (mField.check_field(material_position_field_name)) {
2301 feMassLhs.meshPositionsFieldName = material_position_field_name;
2302 }
2303 }
2304
2305 // Aux Lhs
2306 feMassAuxLhs.getOpPtrVector().push_back(
2307 new OpGetCommonDataAtGaussPts(velocity_field_name, commonData));
2308 feMassAuxLhs.getOpPtrVector().push_back(
2309 new OpGetCommonDataAtGaussPts(spatial_position_field_name, commonData));
2310 feMassAuxLhs.getOpPtrVector().push_back(
2311 new OpGetCommonDataAtGaussPts("DOT_" + velocity_field_name, commonData));
2312 if (mField.check_field(material_position_field_name)) {
2313 feMassAuxLhs.getOpPtrVector().push_back(new OpGetCommonDataAtGaussPts(
2314 material_position_field_name, commonData));
2315 feMassAuxLhs.meshPositionsFieldName = material_position_field_name;
2316 }
2317 sit = setOfBlocks.begin();
2318 for (; sit != setOfBlocks.end(); sit++) {
2319 feMassAuxLhs.getOpPtrVector().push_back(
2320 new OpMassJacobian(spatial_position_field_name, sit->second, commonData,
2321 methodsOp, tAg, true));
2322 feMassAuxLhs.getOpPtrVector().push_back(new OpMassLhs_dM_dx(
2323 spatial_position_field_name, spatial_position_field_name, sit->second,
2324 commonData));
2325 if (mField.check_field(material_position_field_name)) {
2326 feMassAuxLhs.meshPositionsFieldName = material_position_field_name;
2327 }
2328 }
2329
2330 // Energy E=0.5*rho*v*v
2331 feEnergy.getOpPtrVector().push_back(
2332 new OpGetCommonDataAtGaussPts(velocity_field_name, commonData));
2333 feEnergy.getOpPtrVector().push_back(
2334 new OpGetCommonDataAtGaussPts(spatial_position_field_name, commonData));
2335 if (mField.check_field(material_position_field_name)) {
2336 feEnergy.getOpPtrVector().push_back(new OpGetCommonDataAtGaussPts(
2337 material_position_field_name, commonData));
2338 feEnergy.meshPositionsFieldName = material_position_field_name;
2339 }
2340 sit = setOfBlocks.begin();
2341 for (; sit != setOfBlocks.end(); sit++) {
2342 feEnergy.getOpPtrVector().push_back(new OpEnergy(
2343 spatial_position_field_name, sit->second, commonData, feEnergy.V));
2344 }
2345
2347}

◆ setVelocityOperators()

MoFEMErrorCode ConvectiveMassElement::setVelocityOperators ( string  velocity_field_name,
string  spatial_position_field_name,
string  material_position_field_name = "MESH_NODE_POSITIONS",
bool  ale = false 
)

Definition at line 2109 of file ConvectiveMassElement.cpp.

2111 {
2113
2114 commonData.spatialPositions = spatial_position_field_name;
2115 commonData.meshPositions = material_position_field_name;
2116 commonData.spatialVelocities = velocity_field_name;
2117
2118 // Rhs
2119 feVelRhs.getOpPtrVector().push_back(
2120 new OpGetCommonDataAtGaussPts(velocity_field_name, commonData));
2121 feVelRhs.getOpPtrVector().push_back(
2122 new OpGetCommonDataAtGaussPts(spatial_position_field_name, commonData));
2123 feVelRhs.getOpPtrVector().push_back(
2124 new OpGetCommonDataAtGaussPts("DOT_" + velocity_field_name, commonData));
2125 if (mField.check_field(material_position_field_name)) {
2126 feVelRhs.getOpPtrVector().push_back(new OpGetCommonDataAtGaussPts(
2127 "DOT_" + spatial_position_field_name, commonData));
2128 feVelRhs.getOpPtrVector().push_back(new OpGetCommonDataAtGaussPts(
2129 material_position_field_name, commonData));
2130 if (ale) {
2131 feVelRhs.getOpPtrVector().push_back(new OpGetCommonDataAtGaussPts(
2132 "DOT_" + material_position_field_name, commonData));
2133 } else {
2134 feVelRhs.meshPositionsFieldName = material_position_field_name;
2135 }
2136 }
2137 std::map<int, BlockData>::iterator sit = setOfBlocks.begin();
2138 for (; sit != setOfBlocks.end(); sit++) {
2139 feVelRhs.getOpPtrVector().push_back(new OpVelocityJacobian(
2140 velocity_field_name, sit->second, commonData, tAg, false));
2141 feVelRhs.getOpPtrVector().push_back(
2142 new OpVelocityRhs(velocity_field_name, sit->second, commonData));
2143 }
2144
2145 // Lhs
2146 feVelLhs.getOpPtrVector().push_back(
2147 new OpGetCommonDataAtGaussPts(velocity_field_name, commonData));
2148 feVelLhs.getOpPtrVector().push_back(
2149 new OpGetCommonDataAtGaussPts(spatial_position_field_name, commonData));
2150 feVelLhs.getOpPtrVector().push_back(
2151 new OpGetCommonDataAtGaussPts("DOT_" + velocity_field_name, commonData));
2152 if (mField.check_field(material_position_field_name)) {
2153 feVelLhs.getOpPtrVector().push_back(new OpGetCommonDataAtGaussPts(
2154 "DOT_" + spatial_position_field_name, commonData));
2155 feVelLhs.getOpPtrVector().push_back(new OpGetCommonDataAtGaussPts(
2156 material_position_field_name, commonData));
2157 if (ale) {
2158 feVelLhs.getOpPtrVector().push_back(new OpGetCommonDataAtGaussPts(
2159 "DOT_" + material_position_field_name, commonData));
2160 } else {
2161 feVelLhs.meshPositionsFieldName = material_position_field_name;
2162 }
2163 }
2164 sit = setOfBlocks.begin();
2165 for (; sit != setOfBlocks.end(); sit++) {
2166 feVelLhs.getOpPtrVector().push_back(new OpVelocityJacobian(
2167 velocity_field_name, sit->second, commonData, tAg));
2168 feVelLhs.getOpPtrVector().push_back(new OpVelocityLhs_dV_dv(
2169 velocity_field_name, velocity_field_name, sit->second, commonData));
2170 feVelLhs.getOpPtrVector().push_back(new OpVelocityLhs_dV_dx(
2171 velocity_field_name, spatial_position_field_name, sit->second,
2172 commonData));
2173 if (mField.check_field(material_position_field_name)) {
2174 if (ale) {
2175 feVelLhs.getOpPtrVector().push_back(new OpVelocityLhs_dV_dX(
2176 velocity_field_name, material_position_field_name, sit->second,
2177 commonData));
2178 } else {
2179 feVelLhs.meshPositionsFieldName = material_position_field_name;
2180 }
2181 }
2182 }
2183
2185}

◆ ZeroEntriesOp()

static MoFEMErrorCode ConvectiveMassElement::ZeroEntriesOp ( Mat  A)
inlinestatic
Examples
mofem/users_modules/basic_finite_elements/nonlinear_elasticity/nonlinear_dynamics.cpp.

Definition at line 589 of file ConvectiveMassElement.hpp.

589 {
591
592 void *void_ctx;
593 CHKERR MatShellGetContext(A, &void_ctx);
594 MatShellCtx *ctx = (MatShellCtx *)void_ctx;
595 CHKERR MatZeroEntries(ctx->K);
596 CHKERR MatZeroEntries(ctx->M);
598 }

Member Data Documentation

◆ commonData

CommonData ConvectiveMassElement::commonData

Definition at line 148 of file ConvectiveMassElement.hpp.

◆ feEnergy

MyVolumeFE ConvectiveMassElement::feEnergy

calculate kinetic energy

Definition at line 87 of file ConvectiveMassElement.hpp.

◆ feMassAuxLhs

MyVolumeFE ConvectiveMassElement::feMassAuxLhs

calculate left hand side for tetrahedral elements for Kuu shell matrix

Definition at line 71 of file ConvectiveMassElement.hpp.

◆ feMassLhs

MyVolumeFE ConvectiveMassElement::feMassLhs

calculate left hand side for tetrahedral elements,i.e. mass element

Definition at line 66 of file ConvectiveMassElement.hpp.

◆ feMassRhs

MyVolumeFE ConvectiveMassElement::feMassRhs

calculate right hand side for tetrahedral elements

Definition at line 62 of file ConvectiveMassElement.hpp.

◆ feTLhs

MyVolumeFE ConvectiveMassElement::feTLhs

calculate left hand side for tetrahedral elements

Definition at line 84 of file ConvectiveMassElement.hpp.

◆ feTRhs

MyVolumeFE ConvectiveMassElement::feTRhs

calculate right hand side for tetrahedral elements

Definition at line 82 of file ConvectiveMassElement.hpp.

◆ feVelLhs

MyVolumeFE ConvectiveMassElement::feVelLhs

calculate left hand side for tetrahedral elements

Definition at line 79 of file ConvectiveMassElement.hpp.

◆ feVelRhs

MyVolumeFE ConvectiveMassElement::feVelRhs

calculate right hand side for tetrahedral elements

Definition at line 77 of file ConvectiveMassElement.hpp.

◆ methodsOp

boost::ptr_vector<MethodForForceScaling> ConvectiveMassElement::methodsOp

Definition at line 150 of file ConvectiveMassElement.hpp.

◆ mField

MoFEM::Interface& ConvectiveMassElement::mField

Definition at line 108 of file ConvectiveMassElement.hpp.

◆ setOfBlocks

std::map<int, BlockData> ConvectiveMassElement::setOfBlocks

maps block set id with appropriate BlockData

Definition at line 122 of file ConvectiveMassElement.hpp.

◆ tAg

short int ConvectiveMassElement::tAg

Definition at line 109 of file ConvectiveMassElement.hpp.


The documentation for this struct was generated from the following files: