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 const double vol = OpBase::getMeasure();
655 auto t_w = OpBase::getFTensor0IntegrationWeight();
659 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
661 auto t_vec = getFTensor1FromMat<FIELD_DIM, S>(*sourceVec);
665 const double beta = betaCoeff(t_coords(0), t_coords(1), t_coords(2));
666 const double alpha = t_w * vol * beta;
668 auto t_nf = OpBase::template getNf<FIELD_DIM>();
672 t_nf(
i) += alpha * t_row_base * t_vec(
i);
685template <
int FIELD_DIM,
int S,
typename OpBase>
690 const size_t nb_base_functions = row_data.
getN().size2() / 3;
692 const double vol = OpBase::getMeasure();
694 auto t_w = OpBase::getFTensor0IntegrationWeight();
698 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
700 auto t_vec = getFTensor1FromMat<FIELD_DIM, S>(*sourceVec);
705 t_w * vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
712 for (; rr < nb_base_functions; ++rr)
721template <
int SPACE_DIM,
int S,
typename OpBase>
728 const double vol = OpBase::getMeasure();
730 auto t_w = OpBase::getFTensor0IntegrationWeight();
734 auto t_val_grad = getFTensor1FromMat<SPACE_DIM, S>(*(matVals));
736 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
739 const double beta = vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
741 const double alpha = t_w * beta;
760template <
int SPACE_DIM,
int S,
typename OpBase>
767 const double vol = OpBase::getMeasure();
769 auto t_w = OpBase::getFTensor0IntegrationWeight();
773 auto t_val_grad = getFTensor2FromMat<SPACE_DIM, SPACE_DIM>(*(matVals));
775 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
780 t_w * vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
782 auto t_nf = OpBase::template getNf<SPACE_DIM>();
787 t_nf(
i) += alpha * (t_row_grad(
j) * t_val_grad(
i,
j));
802template <
int SPACE_DIM,
int S,
typename OpBase>
808 const double vol = OpBase::getMeasure();
810 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
812 auto t_w = OpBase::getFTensor0IntegrationWeight();
816 auto t_val_mat = getFTensor2SymmetricFromMat<SPACE_DIM, S>(*(matVals));
821 t_w * vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
823 auto t_nf = OpBase::template getNf<SPACE_DIM>();
828 t_nf(
j) += alpha * (t_row_grad(
i) * t_val_mat(
i,
j));
849 const size_t nb_base_functions = row_data.
getN().size2() / 3;
850 auto t_w = this->getFTensor0IntegrationWeight();
852 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
855 auto t_u = getFTensor1FromMat<FIELD_DIM>(*(matVals));
859 const double alpha = this->getMeasure() * t_w *
860 betaConst(t_coords(0), t_coords(1), t_coords(2));
861 auto t_nf = OpBase::template getNf<FIELD_DIM>();
864 for (; bb != this->nbRows /
FIELD_DIM; ++bb) {
865 const double t_div_base = t_diff_base(
j,
j);
866 t_nf(
i) += alpha * t_div_base * t_u(
i);
868 t_nf(
i) += t_base(0) * (alpha / t_coords(0)) * t_u(
i);
874 for (; bb < nb_base_functions; ++bb) {
887template <
int SPACE_DIM,
typename OpBase, CoordinateTypes CoordSys>
893 const size_t nb_base_functions = row_data.
getN().size2() / 3;
894 auto t_w = this->getFTensor0IntegrationWeight();
896 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
902 const double alpha = this->getMeasure() * t_w *
903 betaConst(t_coords(0), t_coords(1), t_coords(2));
907 for (; bb != this->nbRows; ++bb) {
908 const double t_div_base = t_diff_base(
j,
j);
912 for (; bb < nb_base_functions; ++bb)
943template <
int FIELD_DIM,
typename OpBase, CoordinateTypes CoordSys>
951 const double vol = OpBase::getMeasure();
953 auto t_w = OpBase::getFTensor0IntegrationWeight();
955 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
964 t_w * vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
965 auto t_nf = getFTensor1FromArray<FIELD_DIM, FIELD_DIM>(
OpBase::locF);
969 t_nf(
i) += alpha * t_row_grad(
i) * t_vec;
982template <
int SPACE_DIM,
typename OpBase>
987 const size_t nb_base_functions = row_data.
getN().size2() / 3;
988 auto t_w = this->getFTensor0IntegrationWeight();
989 auto t_coords = this->getFTensor1CoordsAtGaussPts();
991 auto t_grad = getFTensor2FromMat<SPACE_DIM, SPACE_DIM>(*(matVals));
995 const double alpha = this->getMeasure() * t_w;
996 auto t_nf = OpBase::template getNf<SPACE_DIM>();
999 for (; bb != this->nbRows /
SPACE_DIM; ++bb) {
1000 t_nf(
i) += alpha * betaCoeff(t_coords(0), t_coords(1), t_coords(2)) *
1001 t_base(
j) * t_grad(
i,
j);
1005 for (; bb < nb_base_functions; ++bb)
1016template <
int SPACE_DIM,
typename OpBase>
1021 const size_t nb_base_functions = row_data.
getN().size2();
1022 auto t_w = this->getFTensor0IntegrationWeight();
1023 auto t_coords = this->getFTensor1CoordsAtGaussPts();
1025 auto t_div = getFTensor1FromMat<SPACE_DIM>(*(matVals));
1028 const double alpha = this->getMeasure() * t_w;
1029 auto t_nf = OpBase::template getNf<SPACE_DIM>();
1032 for (; bb != this->nbRows /
SPACE_DIM; ++bb) {
1033 t_nf(
i) += alpha * t_base *
1034 betaCoeff(t_coords(0), t_coords(1), t_coords(2)) * t_div(
i);
1038 for (; bb < nb_base_functions; ++bb)
1049template <
typename OpBase>
1054 const size_t nb_base_functions = row_data.
getN().size2() / 3;
1057 auto t_w = OpBase::getFTensor0IntegrationWeight();
1061 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
1063 auto t_normal = OpBase::getFTensor1NormalsAtGaussPts();
1065 if (this->getNumeredEntFiniteElementPtr()->getEntType() == MBTRI)
1070 const double alpha =
1071 t_w * sourceFun(t_coords(0), t_coords(1), t_coords(2)) /
a;
1078 for (; rr < nb_base_functions; ++rr)
1087template <
typename OpBase>
1092 const size_t nb_base_functions = row_data.
getN().size2() / 3;
1096 auto t_w = OpBase::getFTensor0IntegrationWeight();
1100 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
1102 auto t_tangent = OpBase::getFTensor1TangentAtGaussPts();
1106 const double alpha = t_w * sourceFun(t_coords(0), t_coords(1), t_coords(2));
1116 for (; rr < nb_base_functions; ++rr)
1125template <
int SPACE_DIM,
typename OpBase>
1133 const size_t nb_base_functions = row_data.
getN().size2() / 3;
1136 auto t_w = OpBase::getFTensor0IntegrationWeight();
1140 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
1142 auto t_normal = OpBase::getFTensor1NormalsAtGaussPts();
1144 auto t_u = getFTensor1FromMat<SPACE_DIM>(*uPtr);
1146 auto a = OpBase::getMeasure();
1149 auto l2 = std::sqrt(t_normal(
i) * t_normal(
i));
1150 const double alpha =
1151 t_w * betaCoeff(t_coords(0), t_coords(1), t_coords(2)) * (
a / l2);
1153 auto t_nf = OpBase::template getNf<SPACE_DIM>();
1157 t_nf(
J) += alpha * (t_row_base(
i) * t_normal(
i)) * t_u(
J);
1161 for (; rr < nb_base_functions; ++rr)
1171template <
int SPACE_DIM,
typename OpBase>
1177 auto t_w = this->getFTensor0IntegrationWeight();
1180 auto t_u = getFTensor1FromMat<SPACE_DIM>(*uPtr);
1181 auto t_grad_y = getFTensor1FromMat<SPACE_DIM>(*yGradPtr);
1184 const double alpha_constant = alphaConstant();
1188 const double vol = OpBase::getMeasure();
1189 const double c = (t_grad_y(
i) * t_u(
i)) * (t_w * vol * alpha_constant);
1208template <
int FIELD_DIM,
int SPACE_DIM,
typename OpBase>
1214 auto t_w = this->getFTensor0IntegrationWeight();
1217 auto t_u = getFTensor1FromMat<SPACE_DIM>(*uPtr);
1218 auto t_grad_y = getFTensor2FromMat<FIELD_DIM, SPACE_DIM>(*yGradPtr);
1222 const double alpha_constant = alphaConstant();
1226 const double vol = OpBase::getMeasure();
1229 t_c(
J) = (t_grad_y(
J,
i) * t_u(
i)) * (t_w * vol * alpha_constant);
1231 auto t_nf = getFTensor1FromArray<FIELD_DIM, FIELD_DIM>(
OpBase::locF);
1234 t_nf(
J) += t_base * t_c(
J);
constexpr int SPACE_DIM
[Define dimension]
#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.
static auto getFTensor0FromVec(ublas::vector< T, A > &data)
Get tensor rank 0 (scalar) form data vector.
boost::function< double()> ConstantFun
Constant function type.
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::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.
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.
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