5 boost::shared_ptr<VectorDouble> p_ptr,
6 boost::shared_ptr<VectorDouble> lift_ptr,
7 boost::shared_ptr<Range> ents_ptr)
15 HookeElement::EntData &data) {
22 auto t_p = getFTensor0FromVec(*
pPtr);
25 auto t_lift = getFTensor1FromArray<SPACE_DIM, SPACE_DIM>(*
liftPtr);
29 for (
int gg = 0; gg != nb_int_points; gg++) {
31 const double r = t_coords(0);
33 t_lift(
i) -= t_normal(
i) * (t_p * alpha);
45 boost::shared_ptr<VectorDouble>
pPtr;
52 boost::shared_ptr<MatrixDouble> u_ptr)
57 MoFEMErrorCode
iNtegrate(EntitiesFieldData::EntData &row_data) {
60 auto t_w = getFTensor0IntegrationWeight();
61 auto t_normal = getFTensor1Normal();
62 auto t_u = getFTensor1FromMat<SPACE_DIM>(*
uPtr);
63 auto t_row_base = row_data.getFTensor0N();
64 auto t_coords = getFTensor1CoordsAtGaussPts();
66 for (
int gg = 0; gg != nbIntegrationPts; gg++) {
68 const double r = t_coords(0);
72 for (; bb != nbRows; ++bb) {
73 locF[bb] += alpha * t_row_base * (t_normal(
i) * t_u(
i));
77 for (; bb < nbRowBaseFunctions; ++bb)
89 boost::shared_ptr<MatrixDouble>
uPtr;
94 boost::shared_ptr<VectorDouble> lambda_ptr)
99 MoFEMErrorCode
iNtegrate(EntitiesFieldData::EntData &row_data) {
102 auto t_w = getFTensor0IntegrationWeight();
103 auto t_normal = getFTensor1Normal();
104 auto t_lambda = getFTensor0FromVec(*
lambdaPtr);
105 auto t_row_base = row_data.getFTensor0N();
106 auto t_coords = getFTensor1CoordsAtGaussPts();
108 for (
int gg = 0; gg != nbIntegrationPts; gg++) {
110 auto t_nf = getFTensor1FromArray<U_FIELD_DIM, U_FIELD_DIM>(locF);
112 const double r = t_coords(0);
118 t_nf(
i) += alpha * t_row_base * t_normal(
i) * t_lambda;
123 for (; bb < nbRowBaseFunctions; ++bb)
141 const std::string field_name_col)
144 assembleTranspose =
true;
148 MoFEMErrorCode
iNtegrate(EntitiesFieldData::EntData &row_data,
149 EntitiesFieldData::EntData &col_data) {
152 auto t_w = getFTensor0IntegrationWeight();
153 auto t_normal = getFTensor1Normal();
154 auto t_row_base = row_data.getFTensor0N();
155 auto t_coords = getFTensor1CoordsAtGaussPts();
157 for (
int gg = 0; gg != nbIntegrationPts; ++gg) {
159 auto t_mat = getFTensor1FromPtr<U_FIELD_DIM>(&locMat(0, 0));
161 const double r = t_coords(0);
165 for (; rr != nbRows; ++rr) {
167 auto t_col_base = col_data.getFTensor0N(gg, 0);
168 const double a = alpha * t_row_base;
170 for (
int cc = 0; cc != nbCols /
U_FIELD_DIM; ++cc) {
171 t_mat(
i) += (
a * t_col_base) * t_normal(
i);
178 for (; rr < nbRowBaseFunctions; ++rr)
196 boost::shared_ptr<MatrixDouble> dot_u_ptr,
197 boost::shared_ptr<MatrixDouble> u_ptr,
198 boost::shared_ptr<MatrixDouble> grad_u_ptr,
199 boost::shared_ptr<VectorDouble> h_ptr,
200 boost::shared_ptr<MatrixDouble> grad_h_ptr,
201 boost::shared_ptr<VectorDouble> g_ptr,
202 boost::shared_ptr<VectorDouble> p_ptr)
207 MoFEMErrorCode
iNtegrate(EntitiesFieldData::EntData &data) {
210 const double vol = getMeasure();
211 auto t_dot_u = getFTensor1FromMat<U_FIELD_DIM>(*
dotUPtr);
212 auto t_u = getFTensor1FromMat<U_FIELD_DIM>(*
uPtr);
213 auto t_p = getFTensor0FromVec(*
pPtr);
214 auto t_grad_u = getFTensor2FromMat<U_FIELD_DIM, SPACE_DIM>(*
gradUPtr);
215 auto t_h = getFTensor0FromVec(*
hPtr);
216 auto t_grad_h = getFTensor1FromMat<SPACE_DIM>(*
gradHPtr);
217 auto t_g = getFTensor0FromVec(*
gPtr);
218 auto t_coords = getFTensor1CoordsAtGaussPts();
220 auto t_base = data.getFTensor0N();
221 auto t_diff_base = data.getFTensor1DiffN<
SPACE_DIM>();
223 auto t_w = getFTensor0IntegrationWeight();
235 for (
int gg = 0; gg != nbIntegrationPts; gg++) {
237 const double r = t_coords(0);
245 t_inertia_force(
i) = (
rho * alpha) * (t_dot_u(
i));
247 t_phase_force(
i) = -alpha *
kappa * t_g * t_grad_h(
i);
248 t_convection(
i) = (
rho * alpha) * (t_u(
j) * t_grad_u(
i,
j));
251 alpha * (t_D(
i,
j,
k,
l) * t_grad_u(
k,
l) +
t_kd(
i,
j) * t_p);
253 auto t_nf = getFTensor1FromArray<U_FIELD_DIM, U_FIELD_DIM>(locF);
255 t_forces(
i) = t_inertia_force(
i) + t_buoyancy(
i) + t_convection(
i) +
261 t_nf(
i) += t_base * t_forces(
i);
262 t_nf(
i) += t_diff_base(
j) * t_stress(
i,
j);
266 t_nf(0) += (t_base * (alpha / t_coords(0))) * (2 *
mu * t_u(0) + t_p);
274 for (; bb < nbRowBaseFunctions; ++bb) {
296 boost::shared_ptr<MatrixDouble>
uPtr;
298 boost::shared_ptr<VectorDouble>
hPtr;
300 boost::shared_ptr<VectorDouble>
gPtr;
301 boost::shared_ptr<VectorDouble>
pPtr;
311 boost::shared_ptr<MatrixDouble> grad_u_ptr,
312 boost::shared_ptr<VectorDouble> h_ptr)
317 assembleTranspose =
false;
320 MoFEMErrorCode
iNtegrate(EntitiesFieldData::EntData &row_data,
321 EntitiesFieldData::EntData &col_data) {
324 const double vol = getMeasure();
325 auto t_u = getFTensor1FromMat<U_FIELD_DIM>(*
uPtr);
326 auto t_grad_u = getFTensor2FromMat<U_FIELD_DIM, SPACE_DIM>(*
gradUPtr);
327 auto t_h = getFTensor0FromVec(*
hPtr);
328 auto t_coords = getFTensor1CoordsAtGaussPts();
330 auto t_row_base = row_data.getFTensor0N();
331 auto t_row_diff_base = row_data.getFTensor1DiffN<
SPACE_DIM>();
333 auto t_w = getFTensor0IntegrationWeight();
335 auto get_mat = [&](
const int rr) {
336 return getFTensor2FromArray<SPACE_DIM, SPACE_DIM, SPACE_DIM>(locMat, rr);
339 auto ts_a = getTSa();
342 for (
int gg = 0; gg != nbIntegrationPts; gg++) {
344 const double r = t_coords(0);
349 const double beta0 = alpha *
rho;
350 const double beta1 = beta0 * ts_a;
357 auto t_col_base = col_data.getFTensor0N(gg, 0);
358 auto t_col_diff_base = col_data.getFTensor1DiffN<
SPACE_DIM>(gg, 0);
364 t_d_stress(
l,
j,
k) = t_D(
i,
j,
k,
l) * (alpha * t_row_diff_base(
i));
366 for (
int cc = 0; cc != nbCols /
U_FIELD_DIM; ++cc) {
368 const double bb = t_row_base * t_col_base;
370 t_mat(
i,
j) += (beta1 * bb) *
t_kd(
i,
j);
371 t_mat(
i,
j) += (beta0 * bb) * t_grad_u(
i,
j);
373 (beta0 * t_row_base) *
t_kd(
i,
j) * (t_col_diff_base(
k) * t_u(
k));
374 t_mat(
i,
j) += t_d_stress(
i,
j,
k) * t_col_diff_base(
k);
378 t_mat(0, 0) += (bb * (alpha / t_coords(0))) * (2 *
mu);
390 for (; rr < nbRowBaseFunctions; ++rr) {
407 boost::shared_ptr<MatrixDouble>
uPtr;
409 boost::shared_ptr<VectorDouble>
hPtr;
418 OpLhsU_dH(
const std::string field_name_u,
const std::string field_name_h,
419 boost::shared_ptr<MatrixDouble> dot_u_ptr,
420 boost::shared_ptr<MatrixDouble> u_ptr,
421 boost::shared_ptr<MatrixDouble> grad_u_ptr,
422 boost::shared_ptr<VectorDouble> h_ptr,
423 boost::shared_ptr<VectorDouble> g_ptr)
429 assembleTranspose =
false;
432 MoFEMErrorCode
iNtegrate(EntitiesFieldData::EntData &row_data,
433 EntitiesFieldData::EntData &col_data) {
436 const double vol = getMeasure();
437 auto t_dot_u = getFTensor1FromMat<U_FIELD_DIM>(*
dotUPtr);
438 auto t_u = getFTensor1FromMat<U_FIELD_DIM>(*
uPtr);
439 auto t_grad_u = getFTensor2FromMat<U_FIELD_DIM, SPACE_DIM>(*
gradUPtr);
440 auto t_h = getFTensor0FromVec(*
hPtr);
441 auto t_g = getFTensor0FromVec(*
gPtr);
442 auto t_coords = getFTensor1CoordsAtGaussPts();
444 auto t_row_base = row_data.getFTensor0N();
445 auto t_row_diff_base = row_data.getFTensor1DiffN<
SPACE_DIM>();
447 auto t_w = getFTensor0IntegrationWeight();
456 t_buoyancy_dh(
i) = 0;
458 for (
int gg = 0; gg != nbIntegrationPts; gg++) {
460 const double r = t_coords(0);
467 auto t_D_dh =
get_D(2 * mu_dh);
469 t_inertia_force_dh(
i) = (alpha * rho_dh) * t_dot_u(
i);
470 t_buoyancy_dh(
SPACE_DIM - 1) = -(alpha *
a0) * (
rho + rho_dh * t_h);
471 t_convection_dh(
i) = (rho_dh * alpha) * (t_u(
j) * t_grad_u(
i,
j));
472 const double t_phase_force_g_dh = -alpha *
kappa * t_g;
474 t_inertia_force_dh(
i) + t_buoyancy_dh(
i) + t_convection_dh(
i);
476 t_stress_dh(
i,
j) = alpha * (t_D_dh(
i,
j,
k,
l) * t_grad_u(
k,
l));
482 getFTensor1FromMat<U_FIELD_DIM, 1>(locMat, rr *
U_FIELD_DIM);
483 auto t_col_base = col_data.getFTensor0N(gg, 0);
484 auto t_col_diff_base = col_data.getFTensor1DiffN<
SPACE_DIM>(gg, 0);
486 for (
int cc = 0; cc != nbCols; ++cc) {
488 const double bb = t_row_base * t_col_base;
489 t_mat(
i) += t_forces_dh(
i) * bb;
490 t_mat(
i) += (t_phase_force_g_dh * t_row_base) * t_col_diff_base(
i);
491 t_mat(
i) += (t_row_diff_base(
j) * t_col_base) * t_stress_dh(
i,
j);
495 t_mat(0) += (bb * (alpha / t_coords(0))) * (2 * mu_dh * t_u(0));
507 for (; rr < nbRowBaseFunctions; ++rr) {
526 boost::shared_ptr<MatrixDouble>
uPtr;
528 boost::shared_ptr<VectorDouble>
hPtr;
529 boost::shared_ptr<VectorDouble>
gPtr;
538 OpLhsU_dG(
const std::string field_name_u,
const std::string field_name_h,
539 boost::shared_ptr<MatrixDouble> grad_h_ptr)
544 assembleTranspose =
false;
547 MoFEMErrorCode
iNtegrate(EntitiesFieldData::EntData &row_data,
548 EntitiesFieldData::EntData &col_data) {
551 const double vol = getMeasure();
552 auto t_grad_h = getFTensor1FromMat<SPACE_DIM>(*
gradHPtr);
553 auto t_coords = getFTensor1CoordsAtGaussPts();
555 auto t_row_base = row_data.getFTensor0N();
556 auto t_w = getFTensor0IntegrationWeight();
558 for (
int gg = 0; gg != nbIntegrationPts; gg++) {
560 const double r = t_coords(0);
564 t_phase_force_dg(
i) = -alpha *
kappa * t_grad_h(
i);
569 getFTensor1FromMat<U_FIELD_DIM, 1>(locMat, rr *
U_FIELD_DIM);
570 auto t_col_base = col_data.getFTensor0N(gg, 0);
572 for (
int cc = 0; cc != nbCols; ++cc) {
573 const double bb = t_row_base * t_col_base;
574 t_mat(
i) += t_phase_force_dg(
i) * bb;
583 for (; rr < nbRowBaseFunctions; ++rr) {
602 boost::shared_ptr<VectorDouble> dot_h_ptr,
603 boost::shared_ptr<VectorDouble> h_ptr,
604 boost::shared_ptr<MatrixDouble> grad_h_ptr,
605 boost::shared_ptr<MatrixDouble> grad_g_ptr)
610 MoFEMErrorCode
iNtegrate(EntitiesFieldData::EntData &data) {
613 const double vol = getMeasure();
614 auto t_w = getFTensor0IntegrationWeight();
615 auto t_coords = getFTensor1CoordsAtGaussPts();
616 auto t_base = data.getFTensor0N();
617 auto t_diff_base = data.getFTensor1DiffN<
SPACE_DIM>();
620 if(data.getDiffN().size1() != data.getN().size1())
622 if (data.getDiffN().size2() != data.getN().size2() *
SPACE_DIM) {
624 <<
"Side " << rowSide <<
" " << CN::EntityTypeName(rowType);
625 MOFEM_LOG(
"SELF", Sev::error) << data.getN();
626 MOFEM_LOG(
"SELF", Sev::error) << data.getDiffN();
633 auto t_h = getFTensor0FromVec(*
hPtr);
634 auto t_grad_g = getFTensor1FromMat<SPACE_DIM>(*
gradGPtr);
636 for (
int gg = 0; gg != nbIntegrationPts; ++gg) {
638 const double r = t_coords(0);
641 const double set_h =
init_h(t_coords(0), t_coords(1), t_coords(2));
642 const double m =
get_M(set_h) * alpha;
645 for (; bb != nbRows; ++bb) {
646 locF[bb] += (t_base * alpha) * (t_h - set_h);
647 locF[bb] += (t_diff_base(
i) *
m) * t_grad_g(
i);
652 for (; bb < nbRowBaseFunctions; ++bb) {
666 auto t_dot_h = getFTensor0FromVec(*
dotHPtr);
667 auto t_h = getFTensor0FromVec(*
hPtr);
668 auto t_u = getFTensor1FromMat<U_FIELD_DIM>(*
uPtr);
669 auto t_grad_h = getFTensor1FromMat<SPACE_DIM>(*
gradHPtr);
670 auto t_grad_g = getFTensor1FromMat<SPACE_DIM>(*
gradGPtr);
672 for (
int gg = 0; gg != nbIntegrationPts; ++gg) {
674 const double r = t_coords(0);
677 const double m =
get_M(t_h) * alpha;
680 for (; bb != nbRows; ++bb) {
681 locF[bb] += (t_base * alpha) * (t_dot_h);
682 locF[bb] += (t_base * alpha) * (t_grad_h(
i) * t_u(
i));
683 locF[bb] += (t_diff_base(
i) * t_grad_g(
i)) *
m;
688 for (; bb < nbRowBaseFunctions; ++bb) {
708 boost::shared_ptr<MatrixDouble>
uPtr;
710 boost::shared_ptr<VectorDouble>
hPtr;
720 OpLhsH_dU(
const std::string h_field_name,
const std::string u_field_name,
721 boost::shared_ptr<MatrixDouble> grad_h_ptr)
726 assembleTranspose =
false;
728 MoFEMErrorCode
iNtegrate(EntitiesFieldData::EntData &row_data,
729 EntitiesFieldData::EntData &col_data) {
732 const double vol = getMeasure();
733 auto t_grad_h = getFTensor1FromMat<SPACE_DIM>(*
gradHPtr);
734 auto t_coords = getFTensor1CoordsAtGaussPts();
736 auto t_row_base = row_data.getFTensor0N();
737 auto t_w = getFTensor0IntegrationWeight();
739 for (
int gg = 0; gg != nbIntegrationPts; gg++) {
741 const double alpha = t_w * vol;
742 auto t_mat = getFTensor1FromPtr<U_FIELD_DIM>(&locMat(0, 0));
745 for (; rr != nbRows; ++rr) {
746 auto t_col_base = col_data.getFTensor0N(gg, 0);
747 for (
int cc = 0; cc != nbCols /
U_FIELD_DIM; ++cc) {
748 t_mat(
i) += (t_row_base * t_col_base * alpha) * t_grad_h(
i);
755 for (; rr < nbRowBaseFunctions; ++rr)
776 boost::shared_ptr<VectorDouble> h_ptr,
777 boost::shared_ptr<MatrixDouble> grad_g_ptr)
784 MoFEMErrorCode
iNtegrate(EntitiesFieldData::EntData &row_data,
785 EntitiesFieldData::EntData &col_data) {
788 const double vol = getMeasure();
789 auto t_w = getFTensor0IntegrationWeight();
790 auto t_coords = getFTensor1CoordsAtGaussPts();
791 auto t_row_base = row_data.getFTensor0N();
792 auto t_row_diff_base = row_data.getFTensor1DiffN<
SPACE_DIM>();
795 if (row_data.getDiffN().size1() != row_data.getN().size1())
797 if (row_data.getDiffN().size2() != row_data.getN().size2() *
SPACE_DIM) {
799 <<
"Side " << rowSide <<
" " << CN::EntityTypeName(rowType);
800 MOFEM_LOG(
"SELF", Sev::error) << row_data.getN();
801 MOFEM_LOG(
"SELF", Sev::error) << row_data.getDiffN();
805 if (col_data.getDiffN().size1() != col_data.getN().size1())
807 if (col_data.getDiffN().size2() != col_data.getN().size2() *
SPACE_DIM) {
809 <<
"Side " << rowSide <<
" " << CN::EntityTypeName(rowType);
810 MOFEM_LOG(
"SELF", Sev::error) << col_data.getN();
811 MOFEM_LOG(
"SELF", Sev::error) << col_data.getDiffN();
818 auto t_h = getFTensor0FromVec(*
hPtr);
819 auto t_grad_g = getFTensor1FromMat<SPACE_DIM>(*
gradGPtr);
821 for (
int gg = 0; gg != nbIntegrationPts; gg++) {
823 const double r = t_coords(0);
827 for (; rr != nbRows; ++rr) {
829 auto t_col_base = col_data.getFTensor0N(gg, 0);
830 auto t_col_diff_base = col_data.getFTensor1DiffN<
SPACE_DIM>(gg, 0);
832 for (
int cc = 0; cc != nbCols; ++cc) {
834 locMat(rr, cc) += (t_row_base * t_col_base * alpha);
844 for (; rr < nbRowBaseFunctions; ++rr) {
857 auto t_h = getFTensor0FromVec(*
hPtr);
858 auto t_grad_g = getFTensor1FromMat<SPACE_DIM>(*
gradGPtr);
859 auto t_u = getFTensor1FromMat<U_FIELD_DIM>(*
uPtr);
861 auto ts_a = getTSa();
863 for (
int gg = 0; gg != nbIntegrationPts; gg++) {
865 const double r = t_coords(0);
870 for (; rr != nbRows; ++rr) {
872 auto t_col_base = col_data.getFTensor0N(gg, 0);
873 auto t_col_diff_base = col_data.getFTensor1DiffN<
SPACE_DIM>(gg, 0);
875 for (
int cc = 0; cc != nbCols; ++cc) {
877 locMat(rr, cc) += (t_row_base * t_col_base * alpha) * ts_a;
879 (t_row_base * alpha) * (t_col_diff_base(
i) * t_u(
i));
881 (t_row_diff_base(
i) * t_grad_g(
i)) * (t_col_base * m_dh);
891 for (; rr < nbRowBaseFunctions; ++rr) {
908 boost::shared_ptr<MatrixDouble>
uPtr;
909 boost::shared_ptr<VectorDouble>
hPtr;
919 OpLhsH_dG(
const std::string field_name_h,
const std::string field_name_g,
920 boost::shared_ptr<VectorDouble> h_ptr)
925 assembleTranspose =
false;
928 MoFEMErrorCode
iNtegrate(EntitiesFieldData::EntData &row_data,
929 EntitiesFieldData::EntData &col_data) {
932 const double vol = getMeasure();
933 auto t_h = getFTensor0FromVec(*
hPtr);
935 auto t_row_diff_base = row_data.getFTensor1DiffN<
SPACE_DIM>();
936 auto t_w = getFTensor0IntegrationWeight();
937 auto t_coords = getFTensor1CoordsAtGaussPts();
939 for (
int gg = 0; gg != nbIntegrationPts; gg++) {
941 const double r = t_coords(0);
946 set_h =
init_h(t_coords(0), t_coords(1), t_coords(2));
950 auto m =
get_M(set_h) * alpha;
953 for (; rr != nbRows; ++rr) {
954 auto t_col_diff_base = col_data.getFTensor1DiffN<
SPACE_DIM>(gg, 0);
956 for (
int cc = 0; cc != nbCols; ++cc) {
957 locMat(rr, cc) += (t_row_diff_base(
i) * t_col_diff_base(
i)) *
m;
965 for (; rr < nbRowBaseFunctions; ++rr) {
978 boost::shared_ptr<VectorDouble>
hPtr;
984 boost::shared_ptr<MatrixDouble> grad_h_ptr,
985 boost::shared_ptr<VectorDouble> g_ptr)
989 MoFEMErrorCode
iNtegrate(EntitiesFieldData::EntData &data) {
992 const double vol = getMeasure();
993 auto t_h = getFTensor0FromVec(*
hPtr);
994 auto t_grad_h = getFTensor1FromMat<SPACE_DIM>(*
gradHPtr);
995 auto t_g = getFTensor0FromVec(*
gPtr);
996 auto t_coords = getFTensor1CoordsAtGaussPts();
998 auto t_base = data.getFTensor0N();
999 auto t_diff_base = data.getFTensor1DiffN<
SPACE_DIM>();
1000 auto t_w = getFTensor0IntegrationWeight();
1002 for (
int gg = 0; gg != nbIntegrationPts; ++gg) {
1004 const double r = t_coords(0);
1009 set_h =
init_h(t_coords(0), t_coords(1), t_coords(2));
1013 const double f =
get_f(set_h);
1016 for (; bb != nbRows; ++bb) {
1017 locF[bb] += (t_base * alpha) * (t_g - f);
1018 locF[bb] -= (t_diff_base(
i) * (
eta2 * alpha)) * t_grad_h(
i);
1023 for (; bb < nbRowBaseFunctions; ++bb) {
1040 boost::shared_ptr<VectorDouble>
hPtr;
1042 boost::shared_ptr<VectorDouble>
gPtr;
1051 OpLhsG_dH(
const std::string field_name_g,
const std::string field_name_h,
1052 boost::shared_ptr<VectorDouble> h_ptr)
1057 assembleTranspose =
false;
1060 MoFEMErrorCode
iNtegrate(EntitiesFieldData::EntData &row_data,
1061 EntitiesFieldData::EntData &col_data) {
1064 const double vol = getMeasure();
1065 auto t_h = getFTensor0FromVec(*
hPtr);
1067 auto t_row_base = row_data.getFTensor0N();
1068 auto t_row_diff_base = row_data.getFTensor1DiffN<
SPACE_DIM>();
1069 auto t_w = getFTensor0IntegrationWeight();
1070 auto t_coords = getFTensor1CoordsAtGaussPts();
1072 for (
int gg = 0; gg != nbIntegrationPts; ++gg) {
1074 const double r = t_coords(0);
1077 const double f_dh =
get_f_dh(t_h) * alpha;
1078 const double beta =
eta2 * alpha;
1081 for (; rr != nbRows; ++rr) {
1083 auto t_col_base = col_data.getFTensor0N(gg, 0);
1084 auto t_col_diff_base = col_data.getFTensor1DiffN<
SPACE_DIM>(gg, 0);
1086 for (
int cc = 0; cc != nbCols; ++cc) {
1088 if constexpr (
I ==
false)
1089 locMat(rr, cc) -= (t_row_base * t_col_base) * f_dh;
1090 locMat(rr, cc) -= (t_row_diff_base(
i) * beta) * t_col_diff_base(
i);
1100 for (; rr < nbRowBaseFunctions; ++rr) {
1114 boost::shared_ptr<VectorDouble>
hPtr;
1129 MoFEMErrorCode
iNtegrate(EntitiesFieldData::EntData &row_data,
1130 EntitiesFieldData::EntData &col_data) {
1133 const double vol = getMeasure();
1135 auto t_row_base = row_data.getFTensor0N();
1136 auto t_w = getFTensor0IntegrationWeight();
1137 auto t_coords = getFTensor1CoordsAtGaussPts();
1139 for (
int gg = 0; gg != nbIntegrationPts; ++gg) {
1141 const double r = t_coords(0);
1145 for (; rr != nbRows; ++rr) {
1146 auto t_col_base = col_data.getFTensor0N(gg, 0);
1147 const double beta = alpha * t_row_base;
1148 for (
int cc = 0; cc != nbCols; ++cc) {
1149 locMat(rr, cc) += (t_col_base * beta);
1156 for (; rr < nbRowBaseFunctions; ++rr) {
Kronecker Delta class symmetric.
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
@ MOFEM_DATA_INCONSISTENCY
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
FTensor::Index< 'm', SPACE_DIM > m
constexpr int U_FIELD_DIM
constexpr CoordinateTypes coord_type
select coordinate system <CARTESIAN, CYLINDRICAL>;
constexpr double rho_diff
#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
constexpr IntegrationType I
constexpr auto field_name
boost::shared_ptr< VectorDouble > liftPtr
OpCalculateLift(const std::string field_name, boost::shared_ptr< VectorDouble > p_ptr, boost::shared_ptr< VectorDouble > lift_ptr, boost::shared_ptr< Range > ents_ptr)
boost::shared_ptr< VectorDouble > pPtr
boost::shared_ptr< Range > entsPtr
MoFEMErrorCode doWork(int row_side, EntityType row_type, HookeElement::EntData &data)
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
OpLhsG_dG(const std::string field_name)
boost::shared_ptr< VectorDouble > hPtr
OpLhsG_dH(const std::string field_name_g, const std::string field_name_h, boost::shared_ptr< VectorDouble > h_ptr)
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
OpLhsH_dG(const std::string field_name_h, const std::string field_name_g, boost::shared_ptr< VectorDouble > h_ptr)
boost::shared_ptr< VectorDouble > hPtr
boost::shared_ptr< MatrixDouble > uPtr
OpLhsH_dH(const std::string field_name, boost::shared_ptr< MatrixDouble > u_ptr, boost::shared_ptr< VectorDouble > h_ptr, boost::shared_ptr< MatrixDouble > grad_g_ptr)
boost::shared_ptr< MatrixDouble > gradGPtr
boost::shared_ptr< VectorDouble > hPtr
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
boost::shared_ptr< MatrixDouble > gradHPtr
OpLhsH_dU(const std::string h_field_name, const std::string u_field_name, boost::shared_ptr< MatrixDouble > grad_h_ptr)
OpLhsU_dG(const std::string field_name_u, const std::string field_name_h, boost::shared_ptr< MatrixDouble > grad_h_ptr)
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
boost::shared_ptr< MatrixDouble > gradHPtr
boost::shared_ptr< VectorDouble > gPtr
OpLhsU_dH(const std::string field_name_u, const std::string field_name_h, boost::shared_ptr< MatrixDouble > dot_u_ptr, boost::shared_ptr< MatrixDouble > u_ptr, boost::shared_ptr< MatrixDouble > grad_u_ptr, boost::shared_ptr< VectorDouble > h_ptr, boost::shared_ptr< VectorDouble > g_ptr)
boost::shared_ptr< VectorDouble > hPtr
boost::shared_ptr< MatrixDouble > uPtr
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
boost::shared_ptr< MatrixDouble > gradUPtr
boost::shared_ptr< MatrixDouble > dotUPtr
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
boost::shared_ptr< MatrixDouble > gradUPtr
OpLhsU_dU(const std::string field_name, boost::shared_ptr< MatrixDouble > u_ptr, boost::shared_ptr< MatrixDouble > grad_u_ptr, boost::shared_ptr< VectorDouble > h_ptr)
boost::shared_ptr< MatrixDouble > uPtr
boost::shared_ptr< VectorDouble > hPtr
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
OpNormalConstrainLhs(const std::string field_name_row, const std::string field_name_col)
OpNormalConstrainRhs(const std::string field_name, boost::shared_ptr< MatrixDouble > u_ptr)
boost::shared_ptr< MatrixDouble > uPtr
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data)
boost::shared_ptr< VectorDouble > lambdaPtr
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data)
OpNormalForceRhs(const std::string field_name, boost::shared_ptr< VectorDouble > lambda_ptr)
OpRhsG(const std::string field_name, boost::shared_ptr< VectorDouble > h_ptr, boost::shared_ptr< MatrixDouble > grad_h_ptr, boost::shared_ptr< VectorDouble > g_ptr)
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &data)
boost::shared_ptr< MatrixDouble > gradHPtr
boost::shared_ptr< VectorDouble > hPtr
boost::shared_ptr< VectorDouble > gPtr
boost::shared_ptr< VectorDouble > hPtr
boost::shared_ptr< MatrixDouble > gradGPtr
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &data)
boost::shared_ptr< MatrixDouble > uPtr
boost::shared_ptr< VectorDouble > dotHPtr
boost::shared_ptr< MatrixDouble > gradHPtr
OpRhsH(const std::string field_name, boost::shared_ptr< MatrixDouble > u_ptr, boost::shared_ptr< VectorDouble > dot_h_ptr, boost::shared_ptr< VectorDouble > h_ptr, boost::shared_ptr< MatrixDouble > grad_h_ptr, boost::shared_ptr< MatrixDouble > grad_g_ptr)
boost::shared_ptr< MatrixDouble > gradUPtr
boost::shared_ptr< VectorDouble > pPtr
OpRhsU(const std::string field_name, boost::shared_ptr< MatrixDouble > dot_u_ptr, boost::shared_ptr< MatrixDouble > u_ptr, boost::shared_ptr< MatrixDouble > grad_u_ptr, boost::shared_ptr< VectorDouble > h_ptr, boost::shared_ptr< MatrixDouble > grad_h_ptr, boost::shared_ptr< VectorDouble > g_ptr, boost::shared_ptr< VectorDouble > p_ptr)
boost::shared_ptr< VectorDouble > gPtr
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &data)
boost::shared_ptr< VectorDouble > hPtr
boost::shared_ptr< MatrixDouble > dotUPtr
boost::shared_ptr< MatrixDouble > uPtr
boost::shared_ptr< MatrixDouble > gradHPtr
std::array< bool, MBMAXTYPE > doEntities
If true operator is executed for entity.
default operator for TRI element
auto getFTensor1Normal()
get normal as tensor
EntityHandle getFEEntityHandle() const
Return finite element entity handle.
auto getFTensor1CoordsAtGaussPts()
Get coordinates at integration points assuming linear geometry.
auto getFTensor0IntegrationWeight()
Get integration weights.
@ OPROW
operator doWork function is executed on FE rows
MatrixDouble & getGaussPts()
matrix of integration (Gauss) points for Volume Element