13#ifndef __BILINEAR_FORMS_INTEGRATORS_HPP__
14#define __BILINEAR_FORMS_INTEGRATORS_HPP__
22template <
int SPACE_DIM,
typename OpBase>
26 const std::string col_field_name,
28 boost::shared_ptr<Range> ents_ptr =
nullptr)
29 :
OpBase(row_field_name, col_field_name,
OpBase::OPROWCOL, ents_ptr),
31 if (row_field_name == col_field_name)
41template <
int FIELD_DIM,
int SPACE_DIM,
typename OpBase>
45 const std::string col_field_name,
47 boost::shared_ptr<Range> ents_ptr =
nullptr)
48 :
OpBase(row_field_name, col_field_name,
OpBase::OPROWCOL, ents_ptr),
50 if (row_field_name == col_field_name)
60template <
int BASE_DIM,
int FIELD_DIM, IntegrationType I,
typename OpBase>
63template <
typename OpBase>
67 const std::string row_field_name,
const std::string col_field_name,
68 ScalarFun beta = [](
double,
double,
double)
constexpr {
return 1; },
69 boost::shared_ptr<Range> ents_ptr =
nullptr)
70 :
OpBase(row_field_name, col_field_name, OpBase::OPROWCOL, ents_ptr),
72 if (row_field_name == col_field_name)
82template <
int FIELD_DIM,
typename OpBase>
93template <
int BASE_DIM,
typename OpBase>
96 OpMassImpl(
const std::string row_field_name,
const std::string col_field_name,
98 boost::shared_ptr<Range> ents_ptr =
nullptr)
99 :
OpBase(row_field_name, col_field_name,
OpBase::OPROWCOL, ents_ptr),
101 if (row_field_name == col_field_name)
111template <
typename OpBase>
113 OpMassImpl(
const std::string row_field_name,
const std::string col_field_name,
115 boost::shared_ptr<Range> ents_ptr =
nullptr)
116 :
OpBase(row_field_name, col_field_name,
OpBase::OPROWCOL, ents_ptr),
118 if (row_field_name == col_field_name)
132template <
int SPACE_DIM,
int S,
typename OpBase>
137 const std::string col_field_name,
138 boost::shared_ptr<MatrixDouble> mat_D,
139 boost::shared_ptr<Range> ents_ptr =
nullptr,
141 :
OpBase(row_field_name, col_field_name,
OpBase::OPROWCOL, ents_ptr),
142 matD(mat_D), betaCoeff(beta) {
143 if (row_field_name == col_field_name)
148 boost::shared_ptr<MatrixDouble>
matD;
158template <
int SPACE_DIM,
int S,
typename OpBase>
163 const std::string col_field_name,
164 boost::shared_ptr<MatrixDouble> mat_D,
166 :
OpBase(row_field_name, col_field_name,
OpBase::OPROWCOL), matD(mat_D),
170 boost::shared_ptr<MatrixDouble>
matD;
180template <
int SPACE_DIM,
int S,
typename OpBase>
185 const std::string col_field_name,
186 boost::shared_ptr<MatrixDouble> mat_D,
187 boost::shared_ptr<Range> ents_ptr =
nullptr)
188 :
OpBase(row_field_name, col_field_name,
OpBase::OPROWCOL, ents_ptr),
190 if (row_field_name == col_field_name)
195 boost::shared_ptr<MatrixDouble>
matD;
200template <
int SPACE_DIM, IntegrationType I,
typename OpBase>
203template <
int SPACE_DIM,
typename OpBase>
206 const std::string col_field_name,
208 const bool assemble_transpose =
false,
209 const bool only_transpose =
false)
210 :
OpBase(row_field_name, col_field_name,
OpBase::OPROWCOL),
211 alphaConstant(alpha_fun) {
212 this->assembleTranspose = assemble_transpose;
213 this->onlyTranspose = only_transpose;
223template <
int SPACE_DIM, IntegrationType I,
typename OpBase>
226template <
int SPACE_DIM,
typename OpBase>
229 const std::string col_field_name,
ConstantFun alpha_fun,
230 const bool assemble_transpose =
false,
231 const bool only_transpose =
false)
232 :
OpBase(row_field_name, col_field_name,
OpBase::OPROWCOL),
233 alphaConstant(alpha_fun) {
234 this->assembleTranspose = assemble_transpose;
235 this->onlyTranspose = only_transpose;
249template <
int SPACE_DIM,
typename OpBase, CoordinateTypes COORDINATE_SYSTEM>
253 const std::string row_field_name,
const std::string col_field_name,
254 ScalarFun alpha_fun = [](
double,
double,
double)
constexpr {
return 1; },
255 const bool assemble_transpose =
false,
const bool only_transpose =
false)
256 :
OpBase(row_field_name, col_field_name, OpBase::OPROWCOL),
257 alphaConstant(alpha_fun) {
258 this->assembleTranspose = assemble_transpose;
259 this->onlyTranspose = only_transpose;
274template <
int SPACE_DIM,
typename OpBase>
278 const std::string col_field_name,
280 const bool assemble_transpose =
false,
281 const bool only_transpose =
false)
282 :
OpBase(row_field_name, col_field_name,
OpBase::OPROWCOL),
283 alphaConstant(alpha_fun) {
284 this->assembleTranspose = assemble_transpose;
285 this->onlyTranspose = only_transpose;
295template <
int SPACE_DIM,
typename OpBase>
299 const std::string col_field_name,
301 const bool assemble_transpose =
false,
302 const bool only_transpose =
false)
303 :
OpBase(row_field_name, col_field_name,
OpBase::OPROWCOL),
304 alphaConstant(alpha_fun) {
305 this->assembleTranspose = assemble_transpose;
306 this->onlyTranspose = only_transpose;
316template <
int SPACE_DIM, IntegrationType I,
typename OpBase>
319template <
int SPACE_DIM,
typename OpBase>
322 const std::string col_field_name,
324 const bool assemble_transpose =
false,
325 const bool only_transpose =
false)
326 :
OpBase(row_field_name, col_field_name,
OpBase::OPROWCOL),
327 alphaConstant(alpha_fun) {
328 this->assembleTranspose = assemble_transpose;
329 this->onlyTranspose = only_transpose;
348template <
int SPACE_DIM,
typename OpBase>
352 const std::string field_name_row,
const std::string field_name_col,
353 boost::shared_ptr<MatrixDouble> y_grad_ptr,
355 :
OpBase(field_name_row, field_name_col, OpBase::OPROWCOL),
356 yGradPtr(y_grad_ptr), alphaConstant(alpha_fun) {
358 this->assembleTranspose =
false;
359 this->onlyTranspose =
false;
370template <
int SPACE_DIM,
typename OpBase>
374 const std::string field_name_row,
const std::string field_name_col,
375 boost::shared_ptr<MatrixDouble> u_ptr,
377 :
OpBase(field_name_row, field_name_col, OpBase::OPROWCOL), uPtr(u_ptr),
378 alphaConstant(alpha_fun) {
380 this->assembleTranspose =
false;
381 this->onlyTranspose =
false;
387 boost::shared_ptr<MatrixDouble>
uPtr;
392template <
int FIELD_DIM,
int SPACE_DIM,
typename OpBase>
396 const std::string field_name_row,
const std::string field_name_col,
397 boost::shared_ptr<MatrixDouble> y_grad_ptr,
399 :
OpBase(field_name_row, field_name_col, OpBase::OPROWCOL),
400 yGradPtr(y_grad_ptr), alphaConstant(alpha_fun) {
402 this->assembleTranspose =
false;
403 this->onlyTranspose =
false;
414template <
int FIELD_DIM,
int SPACE_DIM,
typename OpBase>
418 const std::string field_name_row,
const std::string field_name_col,
419 boost::shared_ptr<MatrixDouble> u_ptr,
421 :
OpBase(field_name_row, field_name_col, OpBase::OPROWCOL), uPtr(u_ptr),
422 alphaConstant(alpha_fun) {
424 this->assembleTranspose =
false;
425 this->onlyTranspose =
false;
431 boost::shared_ptr<MatrixDouble>
uPtr;
444template <
typename EleOp>
445template <AssemblyType A>
446template <IntegrationType I>
455 template <
int BASE_DIM,
int FIELD_DIM,
int SPACE_DIM>
464 template <
int BASE_DIM,
int FIELD_DIM>
477 template <
int BASE_DIM,
int FIELD_DIM,
int SPACE_DIM,
int S = 0>
491 template <
int BASE_DIM,
int FIELD_DIM,
int SPACE_DIM,
int S = 0>
506 template <
int BASE_DIM,
int FIELD_DIM,
int SPACE_DIM,
int S = 0>
515 template <
int SPACE_DIM>
523 template <
int SPACE_DIM>
531 template <
int SPACE_DIM, CoordinateTypes COORDINATE_SYSTEM = CARTESIAN>
540 template <
int BASE_DIM,
int FIELD_DIM,
int SPACE_DIM>
549 template <
int SPACE_DIM>
552 template <
int BASE_DIM,
int FIELD_DIM,
int SPACE_DIM>
556 template <
int BASE_DIM,
int FIELD_DIM,
int SPACE_DIM>
561template <
int SPACE_DIM,
typename OpBase>
568 const double vol = OpBase::getMeasure();
570 auto t_w = OpBase::getFTensor0IntegrationWeight();
574 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
578 const double beta = vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
580 const double alpha = t_w * beta;
605template <
int FIELD_DIM,
int SPACE_DIM,
typename OpBase>
613 const double vol = OpBase::getMeasure();
615 auto t_w = OpBase::getFTensor0IntegrationWeight();
619 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
624 auto get_t_vec = [&](
const int rr) {
625 std::array<double *, FIELD_DIM> ptrs;
634 const double beta = vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
636 const double alpha = t_w * beta;
647 t_vec(
j) += alpha * (t_row_grad(
i) * t_col_grad(
i));
664template <
typename OpBase>
671 auto log_error = [&]() {
681 "Wrong number of base functions on rows %d < %d",
687 "Wrong number of base functions on cols %d < %d",
693 "Wrong number of integration points on rows %d != %d",
699 "Wrong number of integration points on cols %d != %d",
705 const double vol = OpBase::getMeasure();
707 auto t_w = OpBase::getFTensor0IntegrationWeight();
711 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
714 const double beta = vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
716 const double alpha = t_w * beta;
726 *a_mat_ptr += alpha * (t_row_base * t_col_base);
740template <
int FIELD_DIM,
typename OpBase>
746 const double vol = OpBase::getMeasure();
748 auto t_w = OpBase::getFTensor0IntegrationWeight();
752 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
755 auto get_t_vec = [&](
const int rr) {
756 std::array<double *, FIELD_DIM> ptrs;
765 const double beta = vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
767 const double alpha = t_w * beta;
778 t_vec(
i) += alpha * (t_row_base * t_col_base);
792template <
int BASE_DIM,
typename OpBase>
798 size_t nb_base_functions = row_data.
getN().size2() / 3;
800 const double vol = OpBase::getMeasure();
802 auto t_w = OpBase::getFTensor0IntegrationWeight();
806 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
809 const double beta = vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
811 const double alpha = t_w * beta;
821 (*a_mat_ptr) += alpha * (t_row_base(
i) * t_col_base(
i));
827 for (; rr < nb_base_functions; ++rr)
835template <
typename OpBase>
842 auto get_t_vec = [&](
const int rr) {
843 std::array<double *, 3> ptrs;
844 for (
auto i = 0;
i != 3; ++
i)
848 size_t nb_base_functions = row_data.
getN().size2() / 3;
850 const double vol = OpBase::getMeasure();
852 auto t_w = OpBase::getFTensor0IntegrationWeight();
856 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
859 const double beta = vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
861 const double alpha = t_w * beta;
867 auto t_vec = get_t_vec(3 * rr);
871 t_vec(
i) += alpha * (t_row_base(
k) * t_col_base(
k));
877 for (; rr < nb_base_functions; ++rr)
885template <
int SPACE_DIM,
int S,
typename OpBase>
892 const size_t nb_row_dofs = row_data.
getIndices().size();
893 const size_t nb_col_dofs = col_data.
getIndices().size();
895 if (nb_row_dofs && nb_col_dofs) {
906 double vol = OpBase::getMeasure();
909 auto t_w = OpBase::getFTensor0IntegrationWeight();
916 auto t_D = getFTensor4DdgFromMat<SPACE_DIM, SPACE_DIM, S>(*matD);
919 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
925 double a = t_w * vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
932 auto t_m = OpBase::template getLocMat<SPACE_DIM>(
SPACE_DIM * rr);
938 t_rowD(
l,
j,
k) = t_D(
i,
j,
k,
l) * (
a * t_row_diff_base(
i));
945 for (
int cc = 0; cc <= nb_cols; ++cc) {
948 t_m(
i,
j) += t_rowD(
i,
j,
k) * t_col_diff_base(
k);
973 auto t_m_rr = getFTensor2FromArray<SPACE_DIM, SPACE_DIM, SPACE_DIM>(
975 auto t_m_cc = getFTensor2FromArray<SPACE_DIM, SPACE_DIM>(
979 t_m_rr(
i,
j) = t_m_cc(
j,
i);
991template <
int SPACE_DIM,
int S,
typename OpBase>
1005 auto &row_hessian = row_data.
getN(BaseDerivatives::SecondDerivative);
1006 auto &col_hessian = col_data.
getN(BaseDerivatives::SecondDerivative);
1011 "Wrong number of integration pts (%d != %d)",
1014 if (row_hessian.size2() !=
1017 "Wrong number of base functions (%d != %d)",
1023 "Wrong number of base functions (%d < %d)", row_hessian.size2(),
1028 "Wrong number of integration pts (%d != %d)",
1033 "Wrong number of base functions (%d < %d)", col_hessian.size2(),
1039 double vol = OpBase::getMeasure();
1042 auto t_w = OpBase::getFTensor0IntegrationWeight();
1044 auto t_row_diff2 = getFTensor2SymmetricLowerFromPtr<SPACE_DIM>(
1045 &*row_hessian.data().begin());
1049 auto t_D = getFTensor4DdgFromMat<SPACE_DIM, SPACE_DIM, S>(*matD);
1055 double a = t_w * vol;
1065 t_rowD(
k,
l) = t_D(
i,
j,
k,
l) * (
a * t_row_diff2(
i,
j));
1069 getFTensor2SymmetricLowerFromPtr<SPACE_DIM>(&col_hessian(gg, 0));
1075 *m_ptr += t_rowD(
i,
j) * t_col_diff2(
i,
j);
1100template <
int SPACE_DIM,
int S,
typename OpBase>
1107 const size_t nb_row_dofs = row_data.
getIndices().size();
1108 const size_t nb_col_dofs = col_data.
getIndices().size();
1110 if (nb_row_dofs && nb_col_dofs) {
1118 double vol = OpBase::getMeasure();
1121 auto t_w = OpBase::getFTensor0IntegrationWeight();
1128 getFTensor4FromMat<SPACE_DIM, SPACE_DIM, SPACE_DIM, SPACE_DIM, S>(
1132 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
1138 double a = t_w * vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
1145 auto t_m = OpBase::template getLocMat<SPACE_DIM>(
SPACE_DIM * rr);
1155 a * (t_D(
i,
j,
k,
l) * (t_row_diff_base(
j) * t_col_diff_base(
l)));
1181template <
int SPACE_DIM,
typename OpBase>
1187 auto t_w = this->getFTensor0IntegrationWeight();
1189 size_t nb_base_functions = row_data.
getN().size2() / 3;
1192 const double alpha_constant = alphaConstant();
1195 const double alpha = alpha_constant * this->getMeasure() * t_w;
1199 const double t_row_div_base = t_row_diff_base(
i,
i);
1202 this->locMat(rr, cc) += alpha * t_row_div_base * t_col_base;
1207 for (; rr < nb_base_functions; ++rr)
1216template <
int SPACE_DIM,
typename OpBase>
1222 auto t_w = this->getFTensor0IntegrationWeight();
1224 size_t nb_base_functions = row_data.
getN().size2() / 3;
1226 const double alpha_constant = alphaConstant();
1229 const double alpha = alpha_constant * this->getMeasure() * t_w;
1233 auto t_mat_diag = getFTensor1FromArrayDiag<SPACE_DIM, SPACE_DIM>(
1235 const double t_row_div_base = t_row_diff_base(
i,
i);
1239 t_mat_diag(
i) += alpha * t_row_div_base * t_col_base;
1246 for (; rr < nb_base_functions; ++rr)
1255template <
int SPACE_DIM,
typename OpBase, CoordinateTypes COORDINATE_SYSTEM>
1265 "Number of rows in matrix should be multiple of space dimensions");
1269 if constexpr (COORDINATE_SYSTEM ==
POLAR || COORDINATE_SYSTEM ==
SPHERICAL)
1271 "%s coordiante not implemented",
1274 auto t_w = this->getFTensor0IntegrationWeight();
1275 auto t_coords = this->getFTensor1CoordsAtGaussPts();
1276 size_t nb_base_functions_row = row_data.
getN().size2();
1278 const double vol = this->getMeasure();
1281 const double alpha =
1282 alphaConstant(t_coords(0), t_coords(1), t_coords(2)) * t_w * vol;
1285 auto t_m = getFTensor1FromPtr<SPACE_DIM>(
OpBase::locMat.data().data());
1288 if constexpr (COORDINATE_SYSTEM ==
CARTESIAN) {
1290 const double r_val = alpha * t_row_base;
1293 t_m(
i) += r_val * t_col_diff_base(
i);
1304 const double r_val = alpha * t_row_base;
1308 t_m(
i) += r_val * t_col_diff_base(
i);
1309 t_m(0) += (r_val / t_coords(0)) * t_col_base;
1318 for (; rr < nb_base_functions_row; ++rr)
1328template <
int SPACE_DIM,
typename OpBase>
1335 auto t_w = this->getFTensor0IntegrationWeight();
1337 size_t nb_base_functions = row_data.
getN().size2() / 3;
1339 auto &mat = this->locMat;
1340 const double alpha_constant = alphaConstant();
1343 const double alpha = alpha_constant * this->getMeasure() * t_w;
1349 mat(rr, cc) += alpha * t_row_base(
i) * t_col_diff_base(
i);
1354 for (; rr < nb_base_functions; ++rr)
1363template <
int SPACE_DIM,
typename OpBase>
1370 auto t_w = this->getFTensor0IntegrationWeight();
1372 size_t nb_base_functions = row_data.
getN().size2();
1375 auto get_t_vec = [&](
const int rr) {
1376 std::array<double *, SPACE_DIM> ptrs;
1382 const double alpha_constant = alphaConstant();
1385 const double alpha = alpha_constant * this->getMeasure() * t_w;
1392 t_vec(
i) += alpha * t_row_base * t_col_diff_base(
i);
1398 for (; rr < nb_base_functions; ++rr)
1407template <
int SPACE_DIM,
typename OpBase>
1413 auto t_w = this->getFTensor0IntegrationWeight();
1415 size_t nb_base_functions = row_data.
getN().size2() / 3;
1417 const double alpha_constant = alphaConstant();
1420 const double alpha = alpha_constant * this->getMeasure() * t_w;
1424 auto t_mat_diag = getFTensor1FromArrayDiag<SPACE_DIM, SPACE_DIM>(
1429 t_mat_diag(
i) += alpha * t_row_base(
j) * t_col_diff_base(
j);
1436 for (; rr < nb_base_functions; ++rr)
1445template <
int SPACE_DIM,
typename OpBase>
1453 const double vol = OpBase::getMeasure();
1455 auto t_w = OpBase::getFTensor0IntegrationWeight();
1459 auto get_t_vec = [&](
const int rr) {
1460 std::array<double *, SPACE_DIM> ptrs;
1467 auto t_grad_y = getFTensor1FromMat<SPACE_DIM>(*yGradPtr);
1470 const double alpha_constant = alphaConstant();
1474 const double alpha = t_w * vol * alpha_constant;
1476 auto t_vec = get_t_vec(0);
1485 t_vec(
i) += alpha * t_row_base * t_col_base * t_grad_y(
i);
1500template <
int SPACE_DIM,
typename OpBase>
1508 const double vol = OpBase::getMeasure();
1510 auto t_w = OpBase::getFTensor0IntegrationWeight();
1514 auto t_u = getFTensor1FromMat<SPACE_DIM>(*uPtr);
1516 const double alpha_constant = alphaConstant();
1520 const double alpha = t_w * vol * alpha_constant;
1530 (*a_mat_ptr) += alpha * t_row_base * t_diff_col_base(
i) * t_u(
i);
1545template <
int FIELD_DIM,
int SPACE_DIM,
typename OpBase>
1553 const double vol = OpBase::getMeasure();
1555 auto t_w = OpBase::getFTensor0IntegrationWeight();
1559 auto t_grad_y = getFTensor2FromMat<FIELD_DIM, SPACE_DIM>(*yGradPtr);
1563 auto get_t_mat = [&](
const int rr) {
1564 std::array<double *, FIELD_DIM * SPACE_DIM> ptrs;
1573 const double alpha_constant = alphaConstant();
1577 const double alpha = t_w * vol * alpha_constant;
1589 t_mat(
I,
k) += (alpha * t_row_base * t_col_base) * t_grad_y(
I,
k);
1604template <
int FIELD_DIM,
int SPACE_DIM,
typename OpBase>
1612 const double vol = OpBase::getMeasure();
1614 auto t_w = OpBase::getFTensor0IntegrationWeight();
1618 auto get_t_mat = [&](
const int rr) {
1619 std::array<double *, FIELD_DIM * FIELD_DIM> ptrs;
1628 auto t_u = getFTensor1FromMat<SPACE_DIM>(*uPtr);
1635 const double alpha_constant = alphaConstant();
1639 const double alpha = t_w * vol * alpha_constant;
1651 alpha * t_row_base *
t_kd(
I,
L) * (t_diff_col_base(
k) * t_u(
k));
Kronecker Delta class symmetric.
static const char *const CoordinateTypesNames[]
Coordinate system names.
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
@ MOFEM_DATA_INCONSISTENCY
CoordinateTypes
Coodinate system.
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define MOFEM_LOG(channel, severity)
Log.
FTensor::Index< 'i', SPACE_DIM > i
FTensor::Index< 'l', 3 > l
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
implementation of Data Operators for Forces and Sources
double scalar_fun_one(const double, const double, const double)
boost::function< double()> ConstantFun
Constant function type.
constexpr IntegrationType I
OpBaseImpl< PETSC, EdgeEleOp > OpBase
Data on single entity (This is passed as argument to DataOperator::doWork)
FTensor::Tensor2< FTensor::PackPtr< double *, Tensor_Dim0 *Tensor_Dim1 >, Tensor_Dim0, Tensor_Dim1 > getFTensor2DiffN(FieldApproximationBase base)
Get derivatives of base functions for Hdiv space.
FTensor::Tensor1< FTensor::PackPtr< double *, Tensor_Dim >, Tensor_Dim > getFTensor1DiffN(const FieldApproximationBase base)
Get derivatives of base functions.
FTensor::Tensor0< FTensor::PackPtr< double *, 1 > > getFTensor0N(const FieldApproximationBase base)
Get base function as Tensor0.
const VectorFieldEntities & getFieldEntities() const
get field entities
MatrixDouble & getN(const FieldApproximationBase base)
get base functions this return matrix (nb. of rows is equal to nb. of Gauss pts, nb....
FTensor::Tensor1< FTensor::PackPtr< double *, Tensor_Dim >, Tensor_Dim > getFTensor1N(FieldApproximationBase base)
Get base functions for Hdiv/Hcurl spaces.
const VectorInt & getIndices() const
Get global indices of dofs on entity.
int rowSide
row side number
int colSide
column side number
int nbRows
number of dofs on rows
EntityType colType
column type
int nbIntegrationPts
number of integration points
MatrixDouble locMat
local entity block matrix
int nbCols
number if dof on column
int nbRowBaseFunctions
number or row base functions
EntityType rowType
row type
OpConvectiveTermLhsDuImpl(const std::string field_name_row, const std::string field_name_col, boost::shared_ptr< MatrixDouble > y_grad_ptr, ConstantFun alpha_fun=[]() { return 1;})
boost::shared_ptr< MatrixDouble > yGradPtr
ConstantFun alphaConstant
OpConvectiveTermLhsDuImpl(const std::string field_name_row, const std::string field_name_col, boost::shared_ptr< MatrixDouble > y_grad_ptr, ConstantFun alpha_fun=[]() { return 1;})
ConstantFun alphaConstant
boost::shared_ptr< MatrixDouble > yGradPtr
boost::shared_ptr< MatrixDouble > uPtr
OpConvectiveTermLhsDyImpl(const std::string field_name_row, const std::string field_name_col, boost::shared_ptr< MatrixDouble > u_ptr, ConstantFun alpha_fun=[]() { return 1;})
ConstantFun alphaConstant
boost::shared_ptr< MatrixDouble > uPtr
OpConvectiveTermLhsDyImpl(const std::string field_name_row, const std::string field_name_col, boost::shared_ptr< MatrixDouble > u_ptr, ConstantFun alpha_fun=[]() { return 1;})
ConstantFun alphaConstant
OpGradGradImpl(const std::string row_field_name, const std::string col_field_name, ScalarFun beta=scalar_fun_one, boost::shared_ptr< Range > ents_ptr=nullptr)
FTensor::Index< 'i', SPACE_DIM > i
summit Index
OpGradGradImpl(const std::string row_field_name, const std::string col_field_name, ScalarFun beta=scalar_fun_one, boost::shared_ptr< Range > ents_ptr=nullptr)
FTensor::Index< 'i', SPACE_DIM > i
summit Index
boost::shared_ptr< MatrixDouble > matD
OpGradGradSymTensorGradGradImpl(const std::string row_field_name, const std::string col_field_name, boost::shared_ptr< MatrixDouble > mat_D, boost::shared_ptr< Range > ents_ptr=nullptr)
FTensor::Index< 'i', SPACE_DIM > i
summit Index
FTensor::Index< 'i', SPACE_DIM > i
summit Index
boost::shared_ptr< MatrixDouble > matD
OpGradSymTensorGradImpl(const std::string row_field_name, const std::string col_field_name, boost::shared_ptr< MatrixDouble > mat_D, boost::shared_ptr< Range > ents_ptr=nullptr, ScalarFun beta=scalar_fun_one)
boost::shared_ptr< MatrixDouble > matD
FTensor::Index< 'i', SPACE_DIM > i
summit Index
OpGradTensorGradImpl(const std::string row_field_name, const std::string col_field_name, boost::shared_ptr< MatrixDouble > mat_D, ScalarFun beta=scalar_fun_one)
OpMassImpl(const std::string row_field_name, const std::string col_field_name, ScalarFun beta=[](double, double, double) constexpr { return 1;}, boost::shared_ptr< Range > ents_ptr=nullptr)
OpMassImpl(const std::string row_field_name, const std::string col_field_name, ScalarFun beta=scalar_fun_one, boost::shared_ptr< Range > ents_ptr=nullptr)
OpMassImpl(const std::string row_field_name, const std::string col_field_name, ScalarFun beta=scalar_fun_one, boost::shared_ptr< Range > ents_ptr=nullptr)
ConstantFun alphaConstant
FTensor::Index< 'i', SPACE_DIM > i
summit Index
OpMixDivTimesScalarImpl(const std::string row_field_name, const std::string col_field_name, ConstantFun alpha_fun, const bool assemble_transpose=false, const bool only_transpose=false)
ConstantFun alphaConstant
FTensor::Index< 'i', SPACE_DIM > i
summit Index
OpMixDivTimesVecImpl(const std::string row_field_name, const std::string col_field_name, ConstantFun alpha_fun, const bool assemble_transpose=false, const bool only_transpose=false)
OpMixScalarTimesDivImpl(const std::string row_field_name, const std::string col_field_name, ScalarFun alpha_fun=[](double, double, double) constexpr { return 1;}, const bool assemble_transpose=false, const bool only_transpose=false)
FTensor::Index< 'i', SPACE_DIM > i
summit Index
ConstantFun alphaConstant
FTensor::Index< 'i', SPACE_DIM > i
summit Index
OpMixTensorTimesGradImpl(const std::string row_field_name, const std::string col_field_name, ConstantFun alpha_fun, const bool assemble_transpose=false, const bool only_transpose=false)
FTensor::Index< 'j', SPACE_DIM > j
summit Index
ConstantFun alphaConstant
FTensor::Index< 'i', SPACE_DIM > i
summit Index
OpMixVectorTimesGradImpl(const std::string row_field_name, const std::string col_field_name, ConstantFun alpha_fun, const bool assemble_transpose=false, const bool only_transpose=false)
FTensor::Index< 'i', SPACE_DIM > i
summit Index
ConstantFun alphaConstant
OpMixVectorTimesGradImpl(const std::string row_field_name, const std::string col_field_name, ConstantFun alpha_fun, const bool assemble_transpose=false, const bool only_transpose=false)