669 {
671
672 const double vol = getMeasure();
673 auto t_w = getFTensor0IntegrationWeight();
674 auto t_coords = getFTensor1CoordsAtGaussPts();
675 auto t_base = data.getFTensor0N();
676 auto t_diff_base = data.getFTensor1DiffN<
SPACE_DIM>();
677
678#ifndef NDEBUG
679 if (data.getDiffN().size1() != data.getN().size1())
681 if (data.getDiffN().size2() != data.getN().size2() *
SPACE_DIM) {
683 << "Side " << rowSide << " " << CN::EntityTypeName(rowType);
684 MOFEM_LOG(
"SELF", Sev::error) << data.getN();
685 MOFEM_LOG(
"SELF", Sev::error) << data.getDiffN();
687 }
688#endif
689
690 auto t_T = getFTensor0FromVec(*
TPtr);
691
692
693 for (int gg = 0; gg != nbIntegrationPts; ++gg) {
694
695 const double alpha = t_w * vol;
696
698 t_coords(1), t_coords(2));
699
700
701 int bb = 0;
702 for (; bb != nbRows; ++bb) {
703 locF[bb] += (t_base * alpha) * (t_T - set_T);
704
705 ++t_base;
706 ++t_diff_base;
707 }
708
709 for (; bb < nbRowBaseFunctions; ++bb) {
710 ++t_base;
711 ++t_diff_base;
712 }
713
714 ++t_T;
715
716
717 ++t_coords;
718 ++t_w;
719 }
720
722 }
#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.