7#ifndef __LINEAR_FORMS_INTEGRATORS_IMPL_HPP__
8#define __LINEAR_FORMS_INTEGRATORS_IMPL_HPP__
13 template <
typename OpBase>
struct S {
S() =
delete; };
18 template <
typename OpBase>
struct S {
S() =
delete; };
22template <
int BASE_DIM,
int FIELD_DIM, IntegrationType I,
typename OpBase>
30template <
typename OpBase>
42 boost::shared_ptr<Range> ents_ptr =
nullptr)
44 sourceFun(source_fun) {}
56 boost::shared_ptr<Range> ents_ptr =
nullptr)
58 sourceFun(source_fun) {}
65template <
int FIELD_DIM,
typename OpBase>
79 boost::shared_ptr<Range> ents_ptr =
nullptr)
81 sourceFun(source_fun) {}
91 boost::shared_ptr<Range> ents_ptr =
nullptr)
93 sourceFun(source_fun) {}
100template <
int FIELD_DIM,
typename OpBase>
106 boost::shared_ptr<Range> ents_ptr =
nullptr)
108 sourceFun(source_fun) {}
111 boost::shared_ptr<Range> ents_ptr =
nullptr)
113 sourceFun(source_fun) {}
120template <
int BASE_DIM,
int S, IntegrationType I,
typename OpBase>
123template <
int S,
typename OpBase>
127 const std::string
field_name, boost::shared_ptr<VectorDouble> vec,
128 ScalarFun beta_coeff = [](
double,
double,
double)
constexpr {
return 1; },
129 boost::shared_ptr<Range> ents_ptr =
nullptr)
131 betaCoeff(beta_coeff) {}
143template <
int FIELD_DIM,
int S,
typename OpBase>
147 const std::string
field_name, boost::shared_ptr<MatrixDouble> vec,
148 ScalarFun beta_coeff = [](
double,
double,
double)
constexpr {
return 1; },
149 boost::shared_ptr<Range> ents_ptr =
nullptr)
151 betaCoeff(beta_coeff) {}
154 using OpBase::OpBase;
166template <
int FIELD_DIM,
int S,
typename OpBase>
170 const std::string
field_name, boost::shared_ptr<MatrixDouble> vec,
171 ScalarFun beta_coeff = [](
double,
double,
double)
constexpr {
return 1; },
172 boost::shared_ptr<Range> ents_ptr =
nullptr)
174 betaCoeff(beta_coeff) {}
187template <
int SPACE_DIM,
int S,
typename OpBase>
194 const std::string
field_name, boost::shared_ptr<MatrixDouble> mat_vals,
195 ScalarFun beta_coeff = [](
double,
double,
double)
constexpr {
return 1; },
196 boost::shared_ptr<Range> ents_ptr =
nullptr)
198 matVals(mat_vals), betaCoeff(beta_coeff) {}
206template <
int SPACE_DIM,
int S,
typename OpBase>
214 const std::string
field_name, boost::shared_ptr<MatrixDouble> mat_vals,
215 ScalarFun beta_coeff = [](
double,
double,
double)
constexpr {
return 1; },
216 boost::shared_ptr<Range> ents_ptr =
nullptr)
218 matVals(mat_vals), betaCoeff(beta_coeff) {}
230template <
int SPACE_DIM,
int S,
typename OpBase>
235 const std::string
field_name, boost::shared_ptr<MatrixDouble> mat_vals,
236 ScalarFun beta_coeff = [](
double,
double,
double)
constexpr {
return 1; })
238 betaCoeff(beta_coeff) {}
257 const std::string
field_name, boost::shared_ptr<MatrixDouble> mat_vals,
258 ScalarFun beta = [](
double,
double,
double) {
return 1; },
259 boost::shared_ptr<Range> ents_ptr =
nullptr)
261 matVals(mat_vals), betaConst(beta) {}
271template <
int SPACE_DIM,
typename OpBase, CoordinateTypes CoordSys>
275 const std::string
field_name, boost::shared_ptr<VectorDouble> vec_vals,
276 ScalarFun beta = [](
double,
double,
double)
constexpr {
return 1; },
277 boost::shared_ptr<Range> ents_ptr =
nullptr)
279 vecVals(vec_vals), betaConst(beta) {}
288template <
int FIELD_DIM,
typename OpBase, CoordinateTypes CoordSys>
293 const std::string
field_name, boost::shared_ptr<VectorDouble> vec,
294 ScalarFun beta = [](
double,
double,
double)
constexpr {
return 1; },
295 boost::shared_ptr<Range> ents_ptr =
nullptr)
316template <
int SPACE_DIM, IntegrationType I,
typename OpBase>
319template <
int SPACE_DIM,
typename OpBase>
322 boost::shared_ptr<MatrixDouble> mat_vals)
326 boost::shared_ptr<MatrixDouble> mat_vals,
329 betaCoeff(beta_fun) {}
350template <
int SPACE_DIM, IntegrationType I,
typename OpBase>
353template <
int SPACE_DIM,
typename OpBase>
356 boost::shared_ptr<MatrixDouble> mat_vals)
360 boost::shared_ptr<MatrixDouble> mat_vals,
363 betaCoeff(beta_fun) {}
384template <
int SPACE_DIM, IntegrationType I,
typename OpBase>
393template <
int FIELD_DIM, IntegrationType I,
typename OpBase>
398 OpBase>::OpNormalMixVecTimesScalarImpl;
401template <
typename OpBase>
405 ScalarFun source_fun = [](
double,
double,
double)
constexpr {
return 1; },
406 boost::shared_ptr<Range> ents_ptr =
nullptr)
408 sourceFun(source_fun) {}
416template <
typename OpBase>
420 ScalarFun source_fun = [](
double,
double,
double)
constexpr {
return 1; },
421 boost::shared_ptr<Range> ents_ptr =
nullptr)
423 sourceFun(source_fun) {}
441template <
int SPACE_DIM, IntegrationType I,
typename OpBase>
444template <
int SPACE_DIM,
typename OpBase>
448 const std::string
field_name, boost::shared_ptr<MatrixDouble> u_ptr,
449 ScalarFun beta_coeff = [](
double,
double,
double)
constexpr {
return 1; },
450 boost::shared_ptr<Range> ents_ptr =
nullptr)
452 betaCoeff(beta_coeff) {}
455 boost::shared_ptr<MatrixDouble>
uPtr;
464template <
int SPACE_DIM,
typename OpBase>
467 const std::string
field_name, boost::shared_ptr<MatrixDouble> u_ptr,
468 boost::shared_ptr<MatrixDouble> y_grad_ptr,
469 ConstantFun source_fun = []()
constexpr {
return 1; })
471 yGradPtr(y_grad_ptr), alphaConstant(source_fun) {}
474 boost::shared_ptr<MatrixDouble>
uPtr;
480template <
int FIELD_DIM,
int SPACE_DIM,
typename OpBase>
484 const std::string
field_name, boost::shared_ptr<MatrixDouble> u_ptr,
485 boost::shared_ptr<MatrixDouble> y_grad_ptr,
486 ConstantFun source_fun = []()
constexpr {
return 1; })
488 yGradPtr(y_grad_ptr), alphaConstant(source_fun) {}
491 boost::shared_ptr<MatrixDouble>
uPtr;
497template <
typename OpBase>
504 const double vol = OpBase::getMeasure();
506 auto t_w = OpBase::getFTensor0IntegrationWeight();
510 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
515 t_w * vol * sourceFun(t_coords(0), t_coords(1), t_coords(2));
530template <
int FIELD_DIM,
typename OpBase>
538 const double vol = OpBase::getMeasure();
540 auto t_w = OpBase::getFTensor0IntegrationWeight();
544 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
548 auto t_source = sourceFun(t_coords(0), t_coords(1), t_coords(2));
550 const double alpha = t_w * vol;
552 auto t_nf = getFTensor1FromArray<FIELD_DIM, FIELD_DIM>(
OpBase::locF);
555 t_nf(
i) += alpha * t_row_base * t_source(
i);
567template <
int FIELD_DIM,
typename OpBase>
574 const size_t nb_base_functions = row_data.
getN().size2() / 3;
576 const double vol = OpBase::getMeasure();
578 auto t_w = OpBase::getFTensor0IntegrationWeight();
582 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
586 auto t_source = sourceFun(t_coords(0), t_coords(1), t_coords(2));
588 const double alpha = t_w * vol;
595 for (; rr < nb_base_functions; ++rr)
603template <
int S,
typename OpBase>
609 const double vol = OpBase::getMeasure();
611 auto t_w = OpBase::getFTensor0IntegrationWeight();
615 auto t_vec = getFTensor0FromVec<S>(*sourceVec);
620 "Wrong number of integration points %d != %ld",
626 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
631 t_w * vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
647template <
int FIELD_DIM,
int S,
typename OpBase>
653 auto get_vec_at_pts =
658 const double vol = OpBase::getMeasure();
660 auto t_w = OpBase::getFTensor0IntegrationWeight();
664 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
666 auto t_vec_at_pts = get_vec_at_pts();
670 const double beta = betaCoeff(t_coords(0), t_coords(1), t_coords(2));
671 const double alpha = t_w * vol * beta;
673 auto t_nf = OpBase::template getNf<FIELD_DIM>();
677 t_nf(
i) += alpha * t_row_base * t_vec_at_pts(
i);
690template <
int FIELD_DIM,
int S,
typename OpBase>
696 auto get_vec_at_pts =
700 const size_t nb_base_functions = row_data.
getN().size2() / 3;
702 const double vol = OpBase::getMeasure();
704 auto t_w = OpBase::getFTensor0IntegrationWeight();
708 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
710 auto t_vec_at_pts = get_vec_at_pts();
715 t_w * vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
722 for (; rr < nb_base_functions; ++rr)
731template <
int SPACE_DIM,
int S,
typename OpBase>
738 auto get_val_grad_at_pts =
743 const double vol = OpBase::getMeasure();
745 auto t_w = OpBase::getFTensor0IntegrationWeight();
749 auto t_val_grad_at_pts = get_val_grad_at_pts();
751 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
754 const double beta = vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
756 const double alpha = t_w * beta;
761 OpBase::locF[rr] += alpha * (t_row_grad(
i) * t_val_grad_at_pts(
i));
775template <
int SPACE_DIM,
int S,
typename OpBase>
782 auto get_val_grad_at_pts =
788 const double vol = OpBase::getMeasure();
790 auto t_w = OpBase::getFTensor0IntegrationWeight();
794 auto t_val_grad_at_pts = get_val_grad_at_pts();
796 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
801 t_w * vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
803 auto t_nf = OpBase::template getNf<SPACE_DIM>();
808 t_nf(
i) += alpha * (t_row_grad(
j) * t_val_grad_at_pts(
i,
j));
823template <
int SPACE_DIM,
int S,
typename OpBase>
829 const double vol = OpBase::getMeasure();
831 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
833 auto t_w = OpBase::getFTensor0IntegrationWeight();
838 auto get_val_mat_at_pts =
841 auto t_val_mat_at_pts = get_val_mat_at_pts();
846 t_w * vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
848 auto t_nf = OpBase::template getNf<SPACE_DIM>();
853 t_nf(
j) += alpha * (t_row_grad(
i) * t_val_mat_at_pts(
i,
j));
879 const size_t nb_base_functions = row_data.
getN().size2() / 3;
880 auto t_w = this->getFTensor0IntegrationWeight();
882 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
885 auto t_u_at_pts = get_u_at_pts();
889 const double alpha = this->getMeasure() * t_w *
890 betaConst(t_coords(0), t_coords(1), t_coords(2));
891 auto t_nf = OpBase::template getNf<FIELD_DIM>();
894 for (; bb != this->nbRows /
FIELD_DIM; ++bb) {
895 const double t_div_base = t_diff_base(
j,
j);
896 t_nf(
i) += alpha * t_div_base * t_u_at_pts(
i);
898 t_nf(
i) += t_base(0) * (alpha / t_coords(0)) * t_u_at_pts(
i);
904 for (; bb < nb_base_functions; ++bb) {
917template <
int SPACE_DIM,
typename OpBase, CoordinateTypes CoordSys>
923 const size_t nb_base_functions = row_data.
getN().size2() / 3;
924 auto t_w = this->getFTensor0IntegrationWeight();
926 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
932 const double alpha = this->getMeasure() * t_w *
933 betaConst(t_coords(0), t_coords(1), t_coords(2));
937 for (; bb != this->nbRows; ++bb) {
938 const double t_div_base = t_diff_base(
j,
j);
942 for (; bb < nb_base_functions; ++bb)
973template <
int FIELD_DIM,
typename OpBase, CoordinateTypes CoordSys>
981 const double vol = OpBase::getMeasure();
983 auto t_w = OpBase::getFTensor0IntegrationWeight();
985 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
994 t_w * vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
995 auto t_nf = getFTensor1FromArray<FIELD_DIM, FIELD_DIM>(
OpBase::locF);
999 t_nf(
i) += alpha * t_row_grad(
i) * t_vec;
1012template <
int SPACE_DIM,
typename OpBase>
1018 auto get_grad_at_pts =
1023 const size_t nb_base_functions = row_data.
getN().size2() / 3;
1024 auto t_w = this->getFTensor0IntegrationWeight();
1025 auto t_coords = this->getFTensor1CoordsAtGaussPts();
1027 auto t_grad_at_pts = get_grad_at_pts();
1031 const double alpha = this->getMeasure() * t_w;
1032 auto t_nf = OpBase::template getNf<SPACE_DIM>();
1035 for (; bb != this->nbRows /
SPACE_DIM; ++bb) {
1036 t_nf(
i) += alpha * betaCoeff(t_coords(0), t_coords(1), t_coords(2)) *
1037 t_base(
j) * t_grad_at_pts(
i,
j);
1041 for (; bb < nb_base_functions; ++bb)
1052template <
int SPACE_DIM,
typename OpBase>
1058 auto get_div_at_pts =
1062 const size_t nb_base_functions = row_data.
getN().size2();
1063 auto t_w = this->getFTensor0IntegrationWeight();
1064 auto t_coords = this->getFTensor1CoordsAtGaussPts();
1066 auto t_div_at_pts = get_div_at_pts();
1069 const double alpha = this->getMeasure() * t_w;
1070 auto t_nf = OpBase::template getNf<SPACE_DIM>();
1073 for (; bb != this->nbRows /
SPACE_DIM; ++bb) {
1074 t_nf(
i) += alpha * t_base *
1075 betaCoeff(t_coords(0), t_coords(1), t_coords(2)) *
1080 for (; bb < nb_base_functions; ++bb)
1091template <
typename OpBase>
1096 const size_t nb_base_functions = row_data.
getN().size2() / 3;
1099 auto t_w = OpBase::getFTensor0IntegrationWeight();
1103 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
1105 auto t_normal = OpBase::getFTensor1NormalsAtGaussPts();
1107 if (this->getNumeredEntFiniteElementPtr()->getEntType() == MBTRI)
1112 const double alpha =
1113 t_w * sourceFun(t_coords(0), t_coords(1), t_coords(2)) /
a;
1120 for (; rr < nb_base_functions; ++rr)
1129template <
typename OpBase>
1134 const size_t nb_base_functions = row_data.
getN().size2() / 3;
1138 auto t_w = OpBase::getFTensor0IntegrationWeight();
1142 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
1144 auto t_tangent = OpBase::getFTensor1TangentAtGaussPts();
1148 const double alpha = t_w * sourceFun(t_coords(0), t_coords(1), t_coords(2));
1158 for (; rr < nb_base_functions; ++rr)
1167template <
int SPACE_DIM,
typename OpBase>
1180 const size_t nb_base_functions = row_data.
getN().size2() / 3;
1183 auto t_w = OpBase::getFTensor0IntegrationWeight();
1187 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
1189 auto t_normal = OpBase::getFTensor1NormalsAtGaussPts();
1191 auto t_u_at_pts = get_u_at_pts();
1193 auto a = OpBase::getMeasure();
1196 auto l2 = std::sqrt(t_normal(
i) * t_normal(
i));
1197 const double alpha =
1198 t_w * betaCoeff(t_coords(0), t_coords(1), t_coords(2)) * (
a / l2);
1200 auto t_nf = OpBase::template getNf<SPACE_DIM>();
1204 t_nf(
J) += alpha * (t_row_base(
i) * t_normal(
i)) * t_u_at_pts(
J);
1208 for (; rr < nb_base_functions; ++rr)
1218template <
int SPACE_DIM,
typename OpBase>
1228 auto get_grad_y_at_pts =
1232 auto t_w = this->getFTensor0IntegrationWeight();
1235 auto t_u_at_pts = get_u_at_pts();
1236 auto t_grad_y_at_pts = get_grad_y_at_pts();
1239 const double alpha_constant = alphaConstant();
1243 const double vol = OpBase::getMeasure();
1245 (t_grad_y_at_pts(
i) * t_u_at_pts(
i)) * (t_w * vol * alpha_constant);
1264template <
int FIELD_DIM,
int SPACE_DIM,
typename OpBase>
1274 auto get_grad_y_at_pts =
1279 auto t_w = this->getFTensor0IntegrationWeight();
1282 auto t_u_at_pts = get_u_at_pts();
1283 auto t_grad_y_at_pts = get_grad_y_at_pts();
1287 const double alpha_constant = alphaConstant();
1291 const double vol = OpBase::getMeasure();
1295 (t_grad_y_at_pts(
J,
i) * t_u_at_pts(
i)) * (t_w * vol * alpha_constant);
1297 auto t_nf = getFTensor1FromArray<FIELD_DIM, FIELD_DIM>(
OpBase::locF);
1300 t_nf(
J) += t_base * t_c(
J);
#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()
FTensor::Index< 'i', SPACE_DIM > i
const double c
speed of light (cm/ns)
FTensor::Index< 'J', DIM1 > J
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
constexpr std::enable_if<(Dim0<=2 &&Dim1<=2), Tensor2_Expr< Levi_Civita< T >, T, Dim0, Dim1, i, j > >::type levi_civita(const Index< i, Dim0 > &, const Index< j, Dim1 > &)
levi_civita functions to make for easy adhoc use
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
implementation of Data Operators for Forces and Sources
boost::function< double(double)> TimeFun
Lambda function used to scale with time.
boost::function< double()> ConstantFun
Constant function type.
decltype(GetFTensor1FromMatImpl< Tensor_Dim, S, DL, M >::get(std::declval< M & >(), 0, 0)) GetFTensor1FromMatType
static auto getFTensor0FromVec(V &data)
Get tensor rank 0 (scalar) form data vector.
decltype(GetFTensor2FromMatImpl< Tensor_Dim0, Tensor_Dim1, S, DL, M >::get(std::declval< M & >(), 0, 0)) GetFTensor2FromMatType
constexpr IntegrationType I
constexpr auto field_name
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::Tensor0< FTensor::PackPtr< double *, 1 > > getFTensor0N(const FieldApproximationBase base)
Get base function as Tensor0.
auto getFTensor1DiffN(const FieldApproximationBase base)
Get derivatives of base functions.
MatrixDouble & getN(const FieldApproximationBase base)
get base functions this return matrix (nb. of rows is equal to nb. of Gauss pts, nb....
auto getFTensor1N(FieldApproximationBase base)
Get base functions for Hdiv/Hcurl spaces.
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
OpBaseTimesScalarImpl(const std::string field_name, boost::shared_ptr< VectorDouble > vec, ScalarFun beta_coeff=[](double, double, double) constexpr { return 1;}, boost::shared_ptr< Range > ents_ptr=nullptr)
boost::shared_ptr< VectorDouble > sourceVec
boost::shared_ptr< MatrixDouble > sourceVec
OpBaseTimesVectorImpl(const std::string field_name, boost::shared_ptr< MatrixDouble > vec, ScalarFun beta_coeff=[](double, double, double) constexpr { return 1;}, boost::shared_ptr< Range > ents_ptr=nullptr)
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
Integrate grad-grad operator.
FTensor::Index< 'i', FIELD_DIM > i
boost::shared_ptr< MatrixDouble > sourceVec
FTensor::Index< 'i', FIELD_DIM > i
OpBaseTimesVectorImpl(const std::string field_name, boost::shared_ptr< MatrixDouble > vec, ScalarFun beta_coeff=[](double, double, double) constexpr { return 1;}, boost::shared_ptr< Range > ents_ptr=nullptr)
boost::shared_ptr< MatrixDouble > yGradPtr
boost::shared_ptr< MatrixDouble > uPtr
ConstantFun alphaConstant
OpConvectiveTermRhsImpl(const std::string field_name, boost::shared_ptr< MatrixDouble > u_ptr, boost::shared_ptr< MatrixDouble > y_grad_ptr, ConstantFun source_fun=[]() constexpr { return 1;})
boost::shared_ptr< MatrixDouble > uPtr
ConstantFun alphaConstant
OpConvectiveTermRhsImpl(const std::string field_name, boost::shared_ptr< MatrixDouble > u_ptr, boost::shared_ptr< MatrixDouble > y_grad_ptr, ConstantFun source_fun=[]() constexpr { return 1;})
boost::shared_ptr< MatrixDouble > yGradPtr
OpGradTimesSymTensorImpl(const std::string field_name, boost::shared_ptr< MatrixDouble > mat_vals, ScalarFun beta_coeff=[](double, double, double) constexpr { return 1;})
boost::shared_ptr< MatrixDouble > matVals
FTensor::Index< 'i', SPACE_DIM > i
FTensor::Index< 'j', SPACE_DIM > j
OpGradTimesTensorImpl(const std::string field_name, boost::shared_ptr< MatrixDouble > mat_vals, ScalarFun beta_coeff=[](double, double, double) constexpr { return 1;}, boost::shared_ptr< Range > ents_ptr=nullptr)
FTensor::Index< 'i', SPACE_DIM > i
summit Index
boost::shared_ptr< MatrixDouble > matVals
OpGradTimesTensorImpl(const std::string field_name, boost::shared_ptr< MatrixDouble > mat_vals, ScalarFun beta_coeff=[](double, double, double) constexpr { return 1;}, boost::shared_ptr< Range > ents_ptr=nullptr)
boost::shared_ptr< MatrixDouble > matVals
FTensor::Index< 'j', SPACE_DIM > j
summit Index
FTensor::Index< 'i', SPACE_DIM > i
summit Index
boost::shared_ptr< VectorDouble > sourceVec
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)
boost::shared_ptr< VectorDouble > vecVals
OpMixDivTimesUImpl(const std::string field_name, boost::shared_ptr< VectorDouble > vec_vals, ScalarFun beta=[](double, double, double) constexpr { return 1;}, boost::shared_ptr< Range > ents_ptr=nullptr)
FTensor::Index< 'j', SPACE_DIM > j
FTensor::Index< 'i', FIELD_DIM > i
FTensor::Index< 'j', SPACE_DIM > j
boost::shared_ptr< MatrixDouble > matVals
OpMixDivTimesUImpl(const std::string field_name, boost::shared_ptr< MatrixDouble > mat_vals, ScalarFun beta=[](double, double, double) { return 1;}, boost::shared_ptr< Range > ents_ptr=nullptr)
boost::shared_ptr< MatrixDouble > matVals
FTensor::Index< 'j', SPACE_DIM > j
FTensor::Index< 'i', SPACE_DIM > i
OpMixTensorTimesGradUImpl(const std::string field_name, boost::shared_ptr< MatrixDouble > mat_vals)
OpMixTensorTimesGradUImpl(const std::string field_name, boost::shared_ptr< MatrixDouble > mat_vals, ScalarFun beta_fun)
Tensor field time gradient of vector field.
OpMixVecTimesDivLambdaImpl(const std::string field_name, boost::shared_ptr< MatrixDouble > mat_vals, ScalarFun beta_fun)
OpMixVecTimesDivLambdaImpl(const std::string field_name, boost::shared_ptr< MatrixDouble > mat_vals)
boost::shared_ptr< MatrixDouble > matVals
FTensor::Index< 'i', SPACE_DIM > i
Vector field time divergence of tensor.
OpNormalMixVecTimesScalarImpl(const std::string field_name, ScalarFun source_fun=[](double, double, double) constexpr { return 1;}, boost::shared_ptr< Range > ents_ptr=nullptr)
FTensor::Index< 'i', 3 > i
FTensor::Index< 'i', 3 > i
OpNormalMixVecTimesScalarImpl(const std::string field_name, ScalarFun source_fun=[](double, double, double) constexpr { return 1;}, boost::shared_ptr< Range > ents_ptr=nullptr)
Multiply vector times normal on the face times scalar function.
OpNormalMixVecTimesVectorFieldImpl(const std::string field_name, boost::shared_ptr< MatrixDouble > u_ptr, ScalarFun beta_coeff=[](double, double, double) constexpr { return 1;}, boost::shared_ptr< Range > ents_ptr=nullptr)
boost::shared_ptr< MatrixDouble > uPtr
Multiply vector times normal on the face times vector field.
OpSourceImpl(const std::string field_name, ScalarFun source_fun, boost::shared_ptr< Range > ents_ptr=nullptr)
Construct a new Op Source Impl object.
OpSourceImpl(const std::string field_name, TimeFun time_fun, ScalarFun source_fun, boost::shared_ptr< Range > ents_ptr=nullptr)
Construct a new Op Source Impl object.
VectorFun< FIELD_DIM > sourceFun
OpSourceImpl(const std::string field_name, VectorFun< FIELD_DIM > source_fun, boost::shared_ptr< Range > ents_ptr=nullptr)
Construct a new Op Source Impl object.
OpSourceImpl(const std::string field_name, TimeFun time_fun, VectorFun< FIELD_DIM > source_fun, boost::shared_ptr< Range > ents_ptr=nullptr)
Construct a new Op Source Impl object.
OpSourceImpl(const std::string field_name, TimeFun time_fun, VectorFun< FIELD_DIM > source_fun, boost::shared_ptr< Range > ents_ptr=nullptr)
OpSourceImpl(const std::string field_name, VectorFun< FIELD_DIM > source_fun, boost::shared_ptr< Range > ents_ptr=nullptr)
VectorFun< FIELD_DIM > sourceFun
SourceBoundaryNormalSpecialization()=delete
SourceFunctionSpecialization()=delete