Dear deal.ii user group,

I am developing a discontinuous Galerkin code. I have started from the 
tutorial-67 which is great but now I need to modify the quadrature formula 
to integrate the mass matrix. The integration of the tutorial rely on the 
class "CellwiseInverseMassMatrix" where a very specific quadrature, with 
the number of points equal to the number of degrees of freedom, is used. I 
need something more general with an arbitrary quadrature formula.

I have started implemented the inversion of the cell-wise matrices with the 
class "FullMatrix", something like:

FEValues<dim> fe_values(fe, quadrature_formula
  update_values | update_JxW_values);

for (unsigned int q=0; q<n_q_points; ++q)
  for (unsigned int i=0; i<dofs_per_cell; ++i)
    for (unsigned int j=0; j<dofs_per_cell; ++j)
      cell_matrix(i,j) += fe_values.shape_values(i,q) *
                            fe_values.shape_values(j,q) *
                              fe_values.JxW(q);  // (1)

cell_matrix.gauss_jordan();
cell_matrix.vmult(cell_dst, cell_src);

However I wonder if I could tensorize this operation making it more 
efficient: computing smaller 1d mass-matrices and later computing the 
multidimensional mass matrix by tensorization. I was able to recover the 1d 
shape functions at the quadrature points:

FEEvaluation<dim, degree, n_q_points_1d, 1, Number> fe_eval(data, 0, 1);
AlignedVector<VectorizedArrayType> shape_values =
  fe_eval.get_shape_info().data.front().shape_values;

to later build the 1d mass-matrix as:

for (int i = 0; i < degree + 1; ++i)
  for (int j = 0; j < degree + 1; ++j)
    for (int q = 0; q < n_q_points_1d; ++q)
      {
        double phi_i = shape_values[i * n_q_points_1d + q][cell_in_lane];
        double phi_j = shape_values[j * n_q_points_1d + q][cell_in_lane];
        cell_matrix_1d(i,j) += phi_i * phi_j *JxW_1d[q] ;
      }

The problem that I face is where to pick the correct JxW_1d. In general the 
Jacobian determinant for the quadrilateral is non-constant over the cell, 
so do I have to abandon the tensorization strategy and go back to option (1)
?

As an aside, if I have to go back to option (1) is there a way to get the 
shape values without defining the object:
FEValues<dim> fe_values(fe, quadrature_formula
  update_values | update_JxW_values);

since I have already defined an object to evaluate functions at quadrature 
points:
FEEvaluation<dim, degree, n_q_points_1d, 1, Number> fe_eval(data, 0, 1);

thank you very much,
Luca


-- 
The deal.II project is located at http://www.dealii.org/
For mailing list/forum options, see 
https://groups.google.com/d/forum/dealii?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"deal.II User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/dealii/12a5196b-ebb2-4104-a29b-ddb5b553473cn%40googlegroups.com.

Reply via email to