666 {
668
669 const double vol = getMeasure();
670 auto t_w = getFTensor0IntegrationWeight();
671 auto t_coords = getFTensor1CoordsAtGaussPts();
672 auto t_base = data.getFTensor0N();
673 auto t_diff_base = data.getFTensor1DiffN<
SPACE_DIM>();
674
675#ifndef NDEBUG
676 if (data.getDiffN().size1() != data.getN().size1())
678 if (data.getDiffN().size2() != data.getN().size2() *
SPACE_DIM) {
680 << "Side " << rowSide << " " << CN::EntityTypeName(rowType);
681 MOFEM_LOG(
"SELF", Sev::error) << data.getN();
682 MOFEM_LOG(
"SELF", Sev::error) << data.getDiffN();
684 }
685#endif
686
687 auto t_T = getFTensor0FromVec(*
TPtr);
688
689
690 for (int gg = 0; gg != nbIntegrationPts; ++gg) {
691
692 const double alpha = t_w * vol;
693
695 t_coords(1), t_coords(2));
696
697
698 int bb = 0;
699 for (; bb != nbRows; ++bb) {
700 locF[bb] += (t_base * alpha) * (t_T - set_T);
701
702 ++t_base;
703 ++t_diff_base;
704 }
705
706 for (; bb < nbRowBaseFunctions; ++bb) {
707 ++t_base;
708 ++t_diff_base;
709 }
710
711 ++t_T;
712
713
714 ++t_coords;
715 ++t_w;
716 }
717
719 }
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
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define MOFEM_LOG(channel, severity)
Log.
auto init_T
Initialisation function for temperature field.