7#ifndef __LINEAR_FORMS_INTEGRATORS_HPP__
8#define __LINEAR_FORMS_INTEGRATORS_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)
90 boost::shared_ptr<Range> ents_ptr =
nullptr)
92 sourceFun(source_fun) {}
99template <
int FIELD_DIM,
typename OpBase>
105 boost::shared_ptr<Range> ents_ptr =
nullptr)
107 sourceFun(source_fun) {}
110 boost::shared_ptr<Range> ents_ptr =
nullptr)
112 sourceFun(source_fun) {}
119template <
int BASE_DIM,
int S, IntegrationType I,
typename OpBase>
122template <
int S,
typename OpBase>
126 const std::string
field_name, boost::shared_ptr<VectorDouble> vec,
127 ScalarFun beta_coeff = [](
double,
double,
double)
constexpr {
return 1; },
128 boost::shared_ptr<Range> ents_ptr =
nullptr)
130 betaCoeff(beta_coeff) {}
142template <
int FIELD_DIM,
int S,
typename OpBase>
146 const std::string
field_name, boost::shared_ptr<MatrixDouble> vec,
147 ScalarFun beta_coeff = [](
double,
double,
double)
constexpr {
return 1; },
148 boost::shared_ptr<Range> ents_ptr =
nullptr)
150 betaCoeff(beta_coeff) {}
159template <
int FIELD_DIM,
int S,
typename OpBase>
163 const std::string
field_name, boost::shared_ptr<MatrixDouble> vec,
164 ScalarFun beta_coeff = [](
double,
double,
double)
constexpr {
return 1; },
165 boost::shared_ptr<Range> ents_ptr =
nullptr)
167 betaCoeff(beta_coeff) {}
180template <
int SPACE_DIM,
int S,
typename OpBase>
187 const std::string
field_name, boost::shared_ptr<MatrixDouble> mat_vals,
188 ScalarFun beta_coeff = [](
double,
double,
double)
constexpr {
return 1; },
189 boost::shared_ptr<Range> ents_ptr =
nullptr)
191 matVals(mat_vals), betaCoeff(beta_coeff) {}
199template <
int SPACE_DIM,
int S,
typename OpBase>
207 const std::string
field_name, boost::shared_ptr<MatrixDouble> mat_vals,
208 ScalarFun beta_coeff = [](
double,
double,
double)
constexpr {
return 1; },
209 boost::shared_ptr<Range> ents_ptr =
nullptr)
211 matVals(mat_vals), betaCoeff(beta_coeff) {}
223template <
int SPACE_DIM,
int S,
typename OpBase>
228 const std::string
field_name, boost::shared_ptr<MatrixDouble> mat_vals,
229 ScalarFun beta_coeff = [](
double,
double,
double)
constexpr {
return 1; })
231 betaCoeff(beta_coeff) {}
250 const std::string
field_name, boost::shared_ptr<MatrixDouble> mat_vals,
251 ScalarFun beta = [](
double,
double,
double) {
return 1; },
252 boost::shared_ptr<Range> ents_ptr =
nullptr)
254 matVals(mat_vals), betaConst(beta) {}
264template <
int SPACE_DIM,
typename OpBase, CoordinateTypes CoordSys>
268 const std::string
field_name, boost::shared_ptr<VectorDouble> vec_vals,
269 ScalarFun beta = [](
double,
double,
double)
constexpr {
return 1; },
270 boost::shared_ptr<Range> ents_ptr =
nullptr)
272 vecVals(vec_vals), betaConst(beta) {}
281template <
int FIELD_DIM,
typename OpBase, CoordinateTypes CoordSys>
286 const std::string
field_name, boost::shared_ptr<VectorDouble> vec,
287 ScalarFun beta = [](
double,
double,
double)
constexpr {
return 1; },
288 boost::shared_ptr<Range> ents_ptr =
nullptr)
298template <
int SPACE_DIM, IntegrationType I,
typename OpBase>
301template <
int SPACE_DIM,
typename OpBase>
304 boost::shared_ptr<MatrixDouble> mat_vals)
308 boost::shared_ptr<MatrixDouble> mat_vals,
311 betaCoeff(beta_fun) {}
321template <
int SPACE_DIM, IntegrationType I,
typename OpBase>
324template <
int SPACE_DIM,
typename OpBase>
327 boost::shared_ptr<MatrixDouble> mat_vals)
331 boost::shared_ptr<MatrixDouble> mat_vals,
334 betaCoeff(beta_fun) {}
355template <
int SPACE_DIM, IntegrationType I,
typename OpBase>
364template <
int FIELD_DIM, IntegrationType I,
typename OpBase>
369 OpBase>::OpNormalMixVecTimesScalarImpl;
372template <
typename OpBase>
376 ScalarFun source_fun = [](
double,
double,
double)
constexpr {
return 1; },
377 boost::shared_ptr<Range> ents_ptr =
nullptr)
379 sourceFun(source_fun) {}
387template <
typename OpBase>
391 ScalarFun source_fun = [](
double,
double,
double)
constexpr {
return 1; },
392 boost::shared_ptr<Range> ents_ptr =
nullptr)
394 sourceFun(source_fun) {}
412template <
int SPACE_DIM, IntegrationType I,
typename OpBase>
415template <
int SPACE_DIM,
typename OpBase>
419 const std::string
field_name, boost::shared_ptr<MatrixDouble> u_ptr,
420 ScalarFun beta_coeff = [](
double,
double,
double)
constexpr {
return 1; },
421 boost::shared_ptr<Range> ents_ptr =
nullptr)
423 betaCoeff(beta_coeff) {}
426 boost::shared_ptr<MatrixDouble>
uPtr;
435template <
int SPACE_DIM,
typename OpBase>
438 const std::string
field_name, boost::shared_ptr<MatrixDouble> u_ptr,
439 boost::shared_ptr<MatrixDouble> y_grad_ptr,
440 ConstantFun source_fun = []()
constexpr {
return 1; })
442 yGradPtr(y_grad_ptr), alphaConstant(source_fun) {}
445 boost::shared_ptr<MatrixDouble>
uPtr;
451template <
int FIELD_DIM,
int SPACE_DIM,
typename OpBase>
455 const std::string
field_name, boost::shared_ptr<MatrixDouble> u_ptr,
456 boost::shared_ptr<MatrixDouble> y_grad_ptr,
457 ConstantFun source_fun = []()
constexpr {
return 1; })
459 yGradPtr(y_grad_ptr), alphaConstant(source_fun) {}
462 boost::shared_ptr<MatrixDouble>
uPtr;
476template <
typename EleOp>
477template <AssemblyType A>
478template <IntegrationType I>
501 template <
int BASE_DIM,
int S = 1>
506 template <
int BASE_DIM,
int S = 1>
507 using OpBaseTimesScalarField = OpBaseTimesScalar<BASE_DIM, S>;
517 template <
int BASE_DIM,
int FIELD_DIM,
int S>
518 using OpBaseTimesVector =
534 template <
int BASE_DIM,
int FIELD_DIM,
int SPACE_DIM,
int S = 1>
548 template <
int BASE_DIM,
int FIELD_DIM,
int SPACE_DIM,
int S = 1>
549 using OpGradTimesSymTensor =
561 using OpMixDivTimesU =
569 template <
int SPACE_DIM>
577 template <
int SPACE_DIM>
578 using OpMixVecTimesDivLambda =
591 template <
int SPACE_DIM>
592 using OpNormalMixVecTimesScalar =
605 template <
int SPACE_DIM>
606 using OpNormalMixVecTimesVectorField =
621 template <
int BASE_DIM,
int FIELD_DIM,
int SPACE_DIM>
626template <
typename OpBase>
633 const double vol = OpBase::getMeasure();
635 auto t_w = OpBase::getFTensor0IntegrationWeight();
639 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
644 t_w * vol * sourceFun(t_coords(0), t_coords(1), t_coords(2));
659template <
int FIELD_DIM,
typename OpBase>
667 const double vol = OpBase::getMeasure();
669 auto t_w = OpBase::getFTensor0IntegrationWeight();
673 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
677 auto t_source = sourceFun(t_coords(0), t_coords(1), t_coords(2));
679 const double alpha = t_w * vol;
681 auto t_nf = getFTensor1FromArray<FIELD_DIM, FIELD_DIM>(
OpBase::locF);
684 t_nf(
i) += alpha * t_row_base * t_source(
i);
696template <
int FIELD_DIM,
typename OpBase>
703 const size_t nb_base_functions = row_data.
getN().size2() / 3;
705 const double vol = OpBase::getMeasure();
707 auto t_w = OpBase::getFTensor0IntegrationWeight();
711 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
715 auto t_source = sourceFun(t_coords(0), t_coords(1), t_coords(2));
717 const double alpha = t_w * vol;
724 for (; rr < nb_base_functions; ++rr)
732template <
int S,
typename OpBase>
738 const double vol = OpBase::getMeasure();
740 auto t_w = OpBase::getFTensor0IntegrationWeight();
744 auto t_vec = getFTensor0FromVec<S>(*sourceVec);
749 "Wrong number of integration points %d != %d",
755 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
760 t_w * vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
776template <
int FIELD_DIM,
int S,
typename OpBase>
782 const double vol = OpBase::getMeasure();
784 auto t_w = OpBase::getFTensor0IntegrationWeight();
788 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
790 auto t_vec = getFTensor1FromMat<FIELD_DIM, S>(*sourceVec);
795 t_w * vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
797 auto t_nf = OpBase::template getNf<FIELD_DIM>();
801 t_nf(
i) += alpha * t_row_base * t_vec(
i);
814template <
int FIELD_DIM,
int S,
typename OpBase>
819 const size_t nb_base_functions = row_data.
getN().size2() / 3;
821 const double vol = OpBase::getMeasure();
823 auto t_w = OpBase::getFTensor0IntegrationWeight();
827 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
829 auto t_vec = getFTensor1FromMat<FIELD_DIM, S>(*sourceVec);
834 t_w * vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
841 for (; rr < nb_base_functions; ++rr)
850template <
int SPACE_DIM,
int S,
typename OpBase>
857 const double vol = OpBase::getMeasure();
859 auto t_w = OpBase::getFTensor0IntegrationWeight();
863 auto t_val_grad = getFTensor1FromMat<SPACE_DIM, S>(*(matVals));
865 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
868 const double beta = vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
870 const double alpha = t_w * beta;
889template <
int SPACE_DIM,
int S,
typename OpBase>
896 const double vol = OpBase::getMeasure();
898 auto t_w = OpBase::getFTensor0IntegrationWeight();
902 auto t_val_grad = getFTensor2FromMat<SPACE_DIM, SPACE_DIM>(*(matVals));
904 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
909 t_w * vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
911 auto t_nf = OpBase::template getNf<SPACE_DIM>();
916 t_nf(
i) += alpha * (t_row_grad(
j) * t_val_grad(
i,
j));
931template <
int SPACE_DIM,
int S,
typename OpBase>
937 const double vol = OpBase::getMeasure();
939 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
941 auto t_w = OpBase::getFTensor0IntegrationWeight();
945 auto t_val_mat = getFTensor2SymmetricFromMat<SPACE_DIM, S>(*(matVals));
950 t_w * vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
952 auto t_nf = OpBase::template getNf<SPACE_DIM>();
957 t_nf(
j) += alpha * (t_row_grad(
i) * t_val_mat(
i,
j));
978 const size_t nb_base_functions = row_data.
getN().size2() / 3;
979 auto t_w = this->getFTensor0IntegrationWeight();
981 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
984 auto t_u = getFTensor1FromMat<FIELD_DIM>(*(matVals));
988 const double alpha = this->getMeasure() * t_w *
989 betaConst(t_coords(0), t_coords(1), t_coords(2));
990 auto t_nf = OpBase::template getNf<FIELD_DIM>();
993 for (; bb != this->nbRows /
FIELD_DIM; ++bb) {
994 const double t_div_base = t_diff_base(
j,
j);
995 t_nf(
i) += alpha * t_div_base * t_u(
i);
997 t_nf(
i) += alpha * (t_base(0) / t_coords(0)) * t_u(
i);
1003 for (; bb < nb_base_functions; ++bb) {
1016template <
int SPACE_DIM,
typename OpBase, CoordinateTypes CoordSys>
1022 const size_t nb_base_functions = row_data.
getN().size2() / 3;
1023 auto t_w = this->getFTensor0IntegrationWeight();
1025 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
1031 const double alpha = this->getMeasure() * t_w *
1032 betaConst(t_coords(0), t_coords(1), t_coords(2));
1036 for (; bb != this->nbRows; ++bb) {
1037 const double t_div_base = t_diff_base(
j,
j);
1041 for (; bb < nb_base_functions; ++bb)
1072template <
int FIELD_DIM,
typename OpBase, CoordinateTypes CoordSys>
1080 const double vol = OpBase::getMeasure();
1082 auto t_w = OpBase::getFTensor0IntegrationWeight();
1084 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
1092 const double alpha =
1093 t_w * vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
1094 auto t_nf = getFTensor1FromArray<FIELD_DIM, FIELD_DIM>(
OpBase::locF);
1098 t_nf(
i) += alpha * t_row_grad(
i) * t_vec;
1111template <
int SPACE_DIM,
typename OpBase>
1116 const size_t nb_base_functions = row_data.
getN().size2() / 3;
1117 auto t_w = this->getFTensor0IntegrationWeight();
1118 auto t_coords = this->getFTensor1CoordsAtGaussPts();
1120 auto t_grad = getFTensor2FromMat<SPACE_DIM, SPACE_DIM>(*(matVals));
1124 const double alpha = this->getMeasure() * t_w;
1125 auto t_nf = OpBase::template getNf<SPACE_DIM>();
1128 for (; bb != this->nbRows /
SPACE_DIM; ++bb) {
1129 t_nf(
i) += alpha * betaCoeff(t_coords(0), t_coords(1), t_coords(2)) *
1130 t_base(
j) * t_grad(
i,
j);
1134 for (; bb < nb_base_functions; ++bb)
1145template <
int SPACE_DIM,
typename OpBase>
1150 const size_t nb_base_functions = row_data.
getN().size2();
1151 auto t_w = this->getFTensor0IntegrationWeight();
1152 auto t_coords = this->getFTensor1CoordsAtGaussPts();
1154 auto t_div = getFTensor1FromMat<SPACE_DIM>(*(matVals));
1157 const double alpha = this->getMeasure() * t_w;
1158 auto t_nf = OpBase::template getNf<SPACE_DIM>();
1161 for (; bb != this->nbRows /
SPACE_DIM; ++bb) {
1162 t_nf(
i) += alpha * t_base *
1163 betaCoeff(t_coords(0), t_coords(1), t_coords(2)) * t_div(
i);
1167 for (; bb < nb_base_functions; ++bb)
1178template <
typename OpBase>
1183 const size_t nb_base_functions = row_data.
getN().size2() / 3;
1186 auto t_w = OpBase::getFTensor0IntegrationWeight();
1190 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
1192 auto t_normal = OpBase::getFTensor1NormalsAtGaussPts();
1194 if (this->getNumeredEntFiniteElementPtr()->getEntType() == MBTRI)
1199 const double alpha =
1200 t_w * sourceFun(t_coords(0), t_coords(1), t_coords(2)) /
a;
1207 for (; rr < nb_base_functions; ++rr)
1216template <
typename OpBase>
1221 const size_t nb_base_functions = row_data.
getN().size2() / 3;
1225 auto t_w = OpBase::getFTensor0IntegrationWeight();
1229 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
1231 auto t_tangent = OpBase::getFTensor1TangentAtGaussPts();
1235 const double alpha = t_w * sourceFun(t_coords(0), t_coords(1), t_coords(2));
1245 for (; rr < nb_base_functions; ++rr)
1254template <
int SPACE_DIM,
typename OpBase>
1262 const size_t nb_base_functions = row_data.
getN().size2() / 3;
1265 auto t_w = OpBase::getFTensor0IntegrationWeight();
1269 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
1271 auto t_normal = OpBase::getFTensor1NormalsAtGaussPts();
1273 auto t_u = getFTensor1FromMat<SPACE_DIM>(*uPtr);
1275 auto a = OpBase::getMeasure();
1278 auto l2 = std::sqrt(t_normal(
i) * t_normal(
i));
1279 const double alpha =
1280 t_w * betaCoeff(t_coords(0), t_coords(1), t_coords(2)) * (
a / l2);
1282 auto t_nf = OpBase::template getNf<SPACE_DIM>();
1286 t_nf(
J) += alpha * (t_row_base(
i) * t_normal(
i)) * t_u(
J);
1290 for (; rr < nb_base_functions; ++rr)
1300template <
int SPACE_DIM,
typename OpBase>
1306 auto t_w = this->getFTensor0IntegrationWeight();
1309 auto t_u = getFTensor1FromMat<SPACE_DIM>(*uPtr);
1310 auto t_grad_y = getFTensor1FromMat<SPACE_DIM>(*yGradPtr);
1313 const double alpha_constant = alphaConstant();
1317 const double vol = OpBase::getMeasure();
1318 const double c = (t_grad_y(
i) * t_u(
i)) * (t_w * vol * alpha_constant);
1337template <
int FIELD_DIM,
int SPACE_DIM,
typename OpBase>
1343 auto t_w = this->getFTensor0IntegrationWeight();
1346 auto t_u = getFTensor1FromMat<SPACE_DIM>(*uPtr);
1347 auto t_grad_y = getFTensor2FromMat<FIELD_DIM, SPACE_DIM>(*yGradPtr);
1351 const double alpha_constant = alphaConstant();
1355 const double vol = OpBase::getMeasure();
1358 t_c(
J) = (t_grad_y(
J,
i) * t_u(
i)) * (t_w * vol * alpha_constant);
1360 auto t_nf = getFTensor1FromArray<FIELD_DIM, FIELD_DIM>(
OpBase::locF);
1363 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', 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)
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)
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
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