|
| OpMixDivTimesUImpl (const std::string field_name, boost::shared_ptr< VectorDouble > vec, ScalarFun beta=[](double, double, double) constexpr { return 1;}, boost::shared_ptr< Range > ents_ptr=nullptr) |
|
| OpBaseImpl (const std::string row_field_name, const std::string col_field_name, const OpType type, boost::shared_ptr< Range > ents_ptr=nullptr) |
|
MoFEMErrorCode | doWork (int row_side, int col_side, EntityType row_type, EntityType col_type, EntData &row_data, EntData &col_data) |
| Do calculations for the left hand side. More...
|
|
MoFEMErrorCode | doWork (int row_side, EntityType row_type, EntData &row_data) |
| Do calculations for the right hand side. More...
|
|
template<int FIELD_DIM, typename
OpBase>
struct MoFEM::OpMixDivTimesUImpl< 1, FIELD_DIM, FIELD_DIM, GAUSS, OpBase >
Definition at line 280 of file LinearFormsIntegrators.hpp.
template<int FIELD_DIM, typename
OpBase >
div U times vector
\[
\delta u_j = \phi^m\delta\overline{u}^m_j\\
\delta u_{j,i} = \phi^m_{,i}\delta\overline{u}^m_j\\
\textrm{tr}[\delta u_{j,i}] = \delta u_{j,i}\delta_{ji}\\
(\textrm{tr}[\delta u_{j,i}], v) =\\
(\delta u_{j,i} \delta_{ij}, v) =\\
(\delta u_{j,i}, \delta_{ij} v) =\\
(\phi^m_{,i}\delta\overline{u}^m_j, \delta_{ij} v) \\
f_i^m=(\phi^m_{,i}, v)
\]
- Template Parameters
-
FIELD_DIM | |
SPACE_DIM | |
OpBase | |
- Parameters
-
- Returns
- MoFEMErrorCode
Reimplemented from MoFEM::OpBaseImpl< A, EleOp >.
Definition at line 1003 of file LinearFormsIntegrators.hpp.
1004 {
1007
1008
1009 const double vol = OpBase::getMeasure();
1010
1011 auto t_w = OpBase::getFTensor0IntegrationWeight();
1012
1013 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
1014
1015 auto t_row_grad = row_data.getFTensor1DiffN<
FIELD_DIM>();
1016
1018
1020
1021 const double alpha =
1022 t_w * vol *
betaCoeff(t_coords(0), t_coords(1), t_coords(2));
1023 auto t_nf = getFTensor1FromArray<FIELD_DIM, FIELD_DIM>(
OpBase::locF);
1024
1025 int rr = 0;
1027 t_nf(
i) +=
alpha * t_row_grad(
i) * t_vec;
1028 ++t_row_grad;
1029 ++t_nf;
1030 }
1032 ++t_row_grad;
1033 ++t_w;
1034 ++t_vec;
1035 ++t_coords;
1036 }
1038}
#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()
FTensor::Index< 'i', SPACE_DIM > i
static auto getFTensor0FromVec(ublas::vector< T, A > &data)
Get tensor rank 0 (scalar) form data vector.
VectorDouble locF
local entity vector
int nbRows
number of dofs on rows
int nbIntegrationPts
number of integration points
int nbRowBaseFunctions
number or row base functions