620 if (row_type != MBVERTEX) {
632 AuxFunctions<double> auxFun;
633 auxFun.currentCoords.resize(9,
false);
635 int nb_dofs = row_data.getFieldData().size();
636 for (
int dd = 0;
dd != nb_dofs;
dd++)
637 auxFun.currentCoords[
dd] = row_data.getFieldData()[
dd];
641 int nb_gauss_pts = row_data.getN().size1();
642 int nb_base_row = row_data.getFieldData().size() / 3;
643 int nb_base_col = col_data.getFieldData().size() / 3;
644 int row_nb_dofs = row_data.getIndices().size();
646 mat.resize(9, 9,
false);
653 auxFun.t_Tangent2_eta(
k) * t_diff(N0);
658 CHKERR auxFun.calculateAreaAndNormal(col_data.getDiffN());
659 auto t_normal = auxFun.t_Normal;
660 const double coefficient_1 = 0.5 * pow((t_normal(
i) * t_normal(
i)), -0.5);
661 const double coefficient_2 = 0.5 * pow((t_normal(
i) * t_normal(
i)), -1.5);
665 if (rho_v.empty() || rho_v.size() != nb_base_row) {
666 rho_v.resize(nb_base_row,
false);
669 for (
int gg = 0; gg != nb_gauss_pts; gg++) {
671 double val = getGaussPts()(2, gg) * 0.5;
672 auto t_row_diff = row_data.getFTensor1DiffN<2>(gg, 0);
673 for (
int rrr = 0; rrr != nb_base_row; rrr++) {
676 &
mat(3 * rrr + 0, 0), &
mat(3 * rrr + 0, 1), &
mat(3 * rrr + 0, 2),
677 &
mat(3 * rrr + 1, 0), &
mat(3 * rrr + 1, 1), &
mat(3 * rrr + 1, 2),
678 &
mat(3 * rrr + 2, 0), &
mat(3 * rrr + 2, 1), &
mat(3 * rrr + 2, 2),
681 auto t_tan_row = calculate_derivative(t_row_diff);
682 auto t_col_diff = col_data.getFTensor1DiffN<2>(gg, 0);
684 for (
int ccc = 0; ccc != nb_base_col; ccc++) {
686 auto t_tan_col = calculate_derivative(t_col_diff);
688 t_mat(
i,
j) -= coefficient_1 *
689 (t_tan_row(
i,
l) * t_tan_col(
l,
j) +
691 t_row_diff(N1) * t_normal(
k) -
693 t_row_diff(N0) * t_normal(
k));
695 t_mat(
i,
j) += coefficient_2 * (t_tan_row(
i,
k) * t_normal(
k)) *
696 (t_tan_col(
l,
j) * t_normal(
l));
707 int col_nb_dofs = col_data.getIndices().size();
711 &*col_data.getIndices().data().begin(),
712 &*
mat.data().begin(), ADD_VALUES);