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) {}
160template <
int FIELD_DIM,
int S,
typename OpBase>
164 const std::string
field_name, boost::shared_ptr<MatrixDouble> vec,
165 ScalarFun beta_coeff = [](
double,
double,
double)
constexpr {
return 1; },
166 boost::shared_ptr<Range> ents_ptr =
nullptr)
168 betaCoeff(beta_coeff) {}
181template <
int SPACE_DIM,
int S,
typename OpBase>
188 const std::string
field_name, boost::shared_ptr<MatrixDouble> mat_vals,
189 ScalarFun beta_coeff = [](
double,
double,
double)
constexpr {
return 1; },
190 boost::shared_ptr<Range> ents_ptr =
nullptr)
192 matVals(mat_vals), betaCoeff(beta_coeff) {}
200template <
int SPACE_DIM,
int S,
typename OpBase>
208 const std::string
field_name, boost::shared_ptr<MatrixDouble> mat_vals,
209 ScalarFun beta_coeff = [](
double,
double,
double)
constexpr {
return 1; },
210 boost::shared_ptr<Range> ents_ptr =
nullptr)
212 matVals(mat_vals), betaCoeff(beta_coeff) {}
224template <
int SPACE_DIM,
int S,
typename OpBase>
229 const std::string
field_name, boost::shared_ptr<MatrixDouble> mat_vals,
230 ScalarFun beta_coeff = [](
double,
double,
double)
constexpr {
return 1; })
232 betaCoeff(beta_coeff) {}
251 const std::string
field_name, boost::shared_ptr<MatrixDouble> mat_vals,
252 ScalarFun beta = [](
double,
double,
double) {
return 1; },
253 boost::shared_ptr<Range> ents_ptr =
nullptr)
255 matVals(mat_vals), betaConst(beta) {}
265template <
int SPACE_DIM,
typename OpBase, CoordinateTypes CoordSys>
269 const std::string
field_name, boost::shared_ptr<VectorDouble> vec_vals,
270 ScalarFun beta = [](
double,
double,
double)
constexpr {
return 1; },
271 boost::shared_ptr<Range> ents_ptr =
nullptr)
273 vecVals(vec_vals), betaConst(beta) {}
282template <
int FIELD_DIM,
typename OpBase, CoordinateTypes CoordSys>
287 const std::string
field_name, boost::shared_ptr<VectorDouble> vec,
288 ScalarFun beta = [](
double,
double,
double)
constexpr {
return 1; },
289 boost::shared_ptr<Range> ents_ptr =
nullptr)
310template <
int SPACE_DIM, IntegrationType I,
typename OpBase>
313template <
int SPACE_DIM,
typename OpBase>
316 boost::shared_ptr<MatrixDouble> mat_vals)
320 boost::shared_ptr<MatrixDouble> mat_vals,
323 betaCoeff(beta_fun) {}
344template <
int SPACE_DIM, IntegrationType I,
typename OpBase>
347template <
int SPACE_DIM,
typename OpBase>
350 boost::shared_ptr<MatrixDouble> mat_vals)
354 boost::shared_ptr<MatrixDouble> mat_vals,
357 betaCoeff(beta_fun) {}
378template <
int SPACE_DIM, IntegrationType I,
typename OpBase>
387template <
int FIELD_DIM, IntegrationType I,
typename OpBase>
392 OpBase>::OpNormalMixVecTimesScalarImpl;
395template <
typename OpBase>
399 ScalarFun source_fun = [](
double,
double,
double)
constexpr {
return 1; },
400 boost::shared_ptr<Range> ents_ptr =
nullptr)
402 sourceFun(source_fun) {}
410template <
typename OpBase>
414 ScalarFun source_fun = [](
double,
double,
double)
constexpr {
return 1; },
415 boost::shared_ptr<Range> ents_ptr =
nullptr)
417 sourceFun(source_fun) {}
435template <
int SPACE_DIM, IntegrationType I,
typename OpBase>
438template <
int SPACE_DIM,
typename OpBase>
442 const std::string
field_name, boost::shared_ptr<MatrixDouble> u_ptr,
443 ScalarFun beta_coeff = [](
double,
double,
double)
constexpr {
return 1; },
444 boost::shared_ptr<Range> ents_ptr =
nullptr)
446 betaCoeff(beta_coeff) {}
449 boost::shared_ptr<MatrixDouble>
uPtr;
458template <
int SPACE_DIM,
typename OpBase>
461 const std::string
field_name, boost::shared_ptr<MatrixDouble> u_ptr,
462 boost::shared_ptr<MatrixDouble> y_grad_ptr,
463 ConstantFun source_fun = []()
constexpr {
return 1; })
465 yGradPtr(y_grad_ptr), alphaConstant(source_fun) {}
468 boost::shared_ptr<MatrixDouble>
uPtr;
474template <
int FIELD_DIM,
int SPACE_DIM,
typename OpBase>
478 const std::string
field_name, boost::shared_ptr<MatrixDouble> u_ptr,
479 boost::shared_ptr<MatrixDouble> y_grad_ptr,
480 ConstantFun source_fun = []()
constexpr {
return 1; })
482 yGradPtr(y_grad_ptr), alphaConstant(source_fun) {}
485 boost::shared_ptr<MatrixDouble>
uPtr;
491template <
typename OpBase>
498 const double vol = OpBase::getMeasure();
500 auto t_w = OpBase::getFTensor0IntegrationWeight();
504 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
509 t_w * vol * sourceFun(t_coords(0), t_coords(1), t_coords(2));
524template <
int FIELD_DIM,
typename OpBase>
532 const double vol = OpBase::getMeasure();
534 auto t_w = OpBase::getFTensor0IntegrationWeight();
538 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
542 auto t_source = sourceFun(t_coords(0), t_coords(1), t_coords(2));
544 const double alpha = t_w * vol;
546 auto t_nf = getFTensor1FromArray<FIELD_DIM, FIELD_DIM>(
OpBase::locF);
549 t_nf(
i) += alpha * t_row_base * t_source(
i);
561template <
int FIELD_DIM,
typename OpBase>
568 const size_t nb_base_functions = row_data.
getN().size2() / 3;
570 const double vol = OpBase::getMeasure();
572 auto t_w = OpBase::getFTensor0IntegrationWeight();
576 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
580 auto t_source = sourceFun(t_coords(0), t_coords(1), t_coords(2));
582 const double alpha = t_w * vol;
589 for (; rr < nb_base_functions; ++rr)
597template <
int S,
typename OpBase>
603 const double vol = OpBase::getMeasure();
605 auto t_w = OpBase::getFTensor0IntegrationWeight();
609 auto t_vec = getFTensor0FromVec<S>(*sourceVec);
614 "Wrong number of integration points %d != %ld",
620 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
625 t_w * vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
641template <
int FIELD_DIM,
int S,
typename OpBase>
647 const double vol = OpBase::getMeasure();
649 auto t_w = OpBase::getFTensor0IntegrationWeight();
653 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
655 auto t_vec = getFTensor1FromMat<FIELD_DIM, S>(*sourceVec);
660 t_w * vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
662 auto t_nf = OpBase::template getNf<FIELD_DIM>();
666 t_nf(
i) += alpha * t_row_base * t_vec(
i);
679template <
int FIELD_DIM,
int S,
typename OpBase>
684 const size_t nb_base_functions = row_data.
getN().size2() / 3;
686 const double vol = OpBase::getMeasure();
688 auto t_w = OpBase::getFTensor0IntegrationWeight();
692 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
694 auto t_vec = getFTensor1FromMat<FIELD_DIM, S>(*sourceVec);
699 t_w * vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
706 for (; rr < nb_base_functions; ++rr)
715template <
int SPACE_DIM,
int S,
typename OpBase>
722 const double vol = OpBase::getMeasure();
724 auto t_w = OpBase::getFTensor0IntegrationWeight();
728 auto t_val_grad = getFTensor1FromMat<SPACE_DIM, S>(*(matVals));
730 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
733 const double beta = vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
735 const double alpha = t_w * beta;
754template <
int SPACE_DIM,
int S,
typename OpBase>
761 const double vol = OpBase::getMeasure();
763 auto t_w = OpBase::getFTensor0IntegrationWeight();
767 auto t_val_grad = getFTensor2FromMat<SPACE_DIM, SPACE_DIM>(*(matVals));
769 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
774 t_w * vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
776 auto t_nf = OpBase::template getNf<SPACE_DIM>();
781 t_nf(
i) += alpha * (t_row_grad(
j) * t_val_grad(
i,
j));
796template <
int SPACE_DIM,
int S,
typename OpBase>
802 const double vol = OpBase::getMeasure();
804 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
806 auto t_w = OpBase::getFTensor0IntegrationWeight();
810 auto t_val_mat = getFTensor2SymmetricFromMat<SPACE_DIM, S>(*(matVals));
815 t_w * vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
817 auto t_nf = OpBase::template getNf<SPACE_DIM>();
822 t_nf(
j) += alpha * (t_row_grad(
i) * t_val_mat(
i,
j));
843 const size_t nb_base_functions = row_data.
getN().size2() / 3;
844 auto t_w = this->getFTensor0IntegrationWeight();
846 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
849 auto t_u = getFTensor1FromMat<FIELD_DIM>(*(matVals));
853 const double alpha = this->getMeasure() * t_w *
854 betaConst(t_coords(0), t_coords(1), t_coords(2));
855 auto t_nf = OpBase::template getNf<FIELD_DIM>();
858 for (; bb != this->nbRows /
FIELD_DIM; ++bb) {
859 const double t_div_base = t_diff_base(
j,
j);
860 t_nf(
i) += alpha * t_div_base * t_u(
i);
862 t_nf(
i) += t_base(0) * (alpha / t_coords(0)) * t_u(
i);
868 for (; bb < nb_base_functions; ++bb) {
881template <
int SPACE_DIM,
typename OpBase, CoordinateTypes CoordSys>
887 const size_t nb_base_functions = row_data.
getN().size2() / 3;
888 auto t_w = this->getFTensor0IntegrationWeight();
890 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
896 const double alpha = this->getMeasure() * t_w *
897 betaConst(t_coords(0), t_coords(1), t_coords(2));
901 for (; bb != this->nbRows; ++bb) {
902 const double t_div_base = t_diff_base(
j,
j);
906 for (; bb < nb_base_functions; ++bb)
937template <
int FIELD_DIM,
typename OpBase, CoordinateTypes CoordSys>
945 const double vol = OpBase::getMeasure();
947 auto t_w = OpBase::getFTensor0IntegrationWeight();
949 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
958 t_w * vol * betaCoeff(t_coords(0), t_coords(1), t_coords(2));
959 auto t_nf = getFTensor1FromArray<FIELD_DIM, FIELD_DIM>(
OpBase::locF);
963 t_nf(
i) += alpha * t_row_grad(
i) * t_vec;
976template <
int SPACE_DIM,
typename OpBase>
981 const size_t nb_base_functions = row_data.
getN().size2() / 3;
982 auto t_w = this->getFTensor0IntegrationWeight();
983 auto t_coords = this->getFTensor1CoordsAtGaussPts();
985 auto t_grad = getFTensor2FromMat<SPACE_DIM, SPACE_DIM>(*(matVals));
989 const double alpha = this->getMeasure() * t_w;
990 auto t_nf = OpBase::template getNf<SPACE_DIM>();
993 for (; bb != this->nbRows /
SPACE_DIM; ++bb) {
994 t_nf(
i) += alpha * betaCoeff(t_coords(0), t_coords(1), t_coords(2)) *
995 t_base(
j) * t_grad(
i,
j);
999 for (; bb < nb_base_functions; ++bb)
1010template <
int SPACE_DIM,
typename OpBase>
1015 const size_t nb_base_functions = row_data.
getN().size2();
1016 auto t_w = this->getFTensor0IntegrationWeight();
1017 auto t_coords = this->getFTensor1CoordsAtGaussPts();
1019 auto t_div = getFTensor1FromMat<SPACE_DIM>(*(matVals));
1022 const double alpha = this->getMeasure() * t_w;
1023 auto t_nf = OpBase::template getNf<SPACE_DIM>();
1026 for (; bb != this->nbRows /
SPACE_DIM; ++bb) {
1027 t_nf(
i) += alpha * t_base *
1028 betaCoeff(t_coords(0), t_coords(1), t_coords(2)) * t_div(
i);
1032 for (; bb < nb_base_functions; ++bb)
1043template <
typename OpBase>
1048 const size_t nb_base_functions = row_data.
getN().size2() / 3;
1051 auto t_w = OpBase::getFTensor0IntegrationWeight();
1055 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
1057 auto t_normal = OpBase::getFTensor1NormalsAtGaussPts();
1059 if (this->getNumeredEntFiniteElementPtr()->getEntType() == MBTRI)
1064 const double alpha =
1065 t_w * sourceFun(t_coords(0), t_coords(1), t_coords(2)) /
a;
1072 for (; rr < nb_base_functions; ++rr)
1081template <
typename OpBase>
1086 const size_t nb_base_functions = row_data.
getN().size2() / 3;
1090 auto t_w = OpBase::getFTensor0IntegrationWeight();
1094 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
1096 auto t_tangent = OpBase::getFTensor1TangentAtGaussPts();
1100 const double alpha = t_w * sourceFun(t_coords(0), t_coords(1), t_coords(2));
1110 for (; rr < nb_base_functions; ++rr)
1119template <
int SPACE_DIM,
typename OpBase>
1127 const size_t nb_base_functions = row_data.
getN().size2() / 3;
1130 auto t_w = OpBase::getFTensor0IntegrationWeight();
1134 auto t_coords = OpBase::getFTensor1CoordsAtGaussPts();
1136 auto t_normal = OpBase::getFTensor1NormalsAtGaussPts();
1138 auto t_u = getFTensor1FromMat<SPACE_DIM>(*uPtr);
1140 auto a = OpBase::getMeasure();
1143 auto l2 = std::sqrt(t_normal(
i) * t_normal(
i));
1144 const double alpha =
1145 t_w * betaCoeff(t_coords(0), t_coords(1), t_coords(2)) * (
a / l2);
1147 auto t_nf = OpBase::template getNf<SPACE_DIM>();
1151 t_nf(
J) += alpha * (t_row_base(
i) * t_normal(
i)) * t_u(
J);
1155 for (; rr < nb_base_functions; ++rr)
1165template <
int SPACE_DIM,
typename OpBase>
1171 auto t_w = this->getFTensor0IntegrationWeight();
1174 auto t_u = getFTensor1FromMat<SPACE_DIM>(*uPtr);
1175 auto t_grad_y = getFTensor1FromMat<SPACE_DIM>(*yGradPtr);
1178 const double alpha_constant = alphaConstant();
1182 const double vol = OpBase::getMeasure();
1183 const double c = (t_grad_y(
i) * t_u(
i)) * (t_w * vol * alpha_constant);
1202template <
int FIELD_DIM,
int SPACE_DIM,
typename OpBase>
1208 auto t_w = this->getFTensor0IntegrationWeight();
1211 auto t_u = getFTensor1FromMat<SPACE_DIM>(*uPtr);
1212 auto t_grad_y = getFTensor2FromMat<FIELD_DIM, SPACE_DIM>(*yGradPtr);
1216 const double alpha_constant = alphaConstant();
1220 const double vol = OpBase::getMeasure();
1223 t_c(
J) = (t_grad_y(
J,
i) * t_u(
i)) * (t_w * vol * alpha_constant);
1225 auto t_nf = getFTensor1FromArray<FIELD_DIM, FIELD_DIM>(
OpBase::locF);
1228 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
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)
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