815 const auto in_the_loop =
818 auto not_side = [](
auto s) {
824 &*base_mat.data().begin());
827 if (in_the_loop > 0) {
830 auto t_normal = getFTensor1Normal();
831 const auto nb_gauss_pts = getGaussPts().size2();
836 const auto nb_rows =
sideDataPtr->indicesRowSideMap[s0].size();
841 const auto opposite_s0 = not_side(s0);
845 const auto nb_row_base_functions =
851 const auto nb_cols =
sideDataPtr->indicesColSideMap[s1].size();
858 auto t_w = getFTensor0IntegrationWeight();
864 for (
auto &t_vel : arr_t_vel)
869 for (
int gg = 0; gg != nb_gauss_pts; ++gg) {
873 const auto dot = sense_row * (t_normal(
i) * t_vel(
i));
874 const auto l_upwind_side = (dot > 0) ? s0 : opposite_s0;
875 const auto sense_upwind =
sideDataPtr->senseMap[l_upwind_side];
877 t_res(
I,
J) = t_w * dot;
881 if (s1 == l_upwind_side) {
882 for (; rr != nb_rows; ++rr) {
883 auto get_ntensor = [](
auto &base_mat,
auto gg,
auto bb) {
884 double *ptr = &base_mat(gg, bb);
890 auto t_mat_skeleton =
893 t_res_row(
I,
J) = t_res(
I,
J) * t_row_base;
896 for (
size_t cc = 0; cc != nb_cols; ++cc) {
897 t_mat_skeleton(
I,
J) += t_res_row(
I,
J) * t_col_base;
903 for (; rr < nb_row_base_functions; ++rr) {