On 4/15/19 8:46 AM, Robert Spartus wrote:
> 
>  > It is hard to imagine situations in which the mass matrix would be 
> singular.
>  > It is a positive definite form that gives rise to the mass matrix and so it
>  > really shouldn't be singular at all. Can you show the code again with which
>  > you build it?
> 
> It seems that my mesh is neither singular nor degenerate. I wonder if the 
> problem is that I am solving a vector valued problem. To build this mass 
> matrix, I adapted the function Diffusion::assemble_system from step-52.

I don't think the function you have gives you what you want. You have this:

                         cell_mass_matrix(i, j) +=
                             fe_values.shape_value(i, q_point) *
                             fe_values.shape_value(j, q_point) *
                             fe_values.JxW(q_point);

If you read the documentation of FEValues::shape_value(), you will see that 
for vector-valued elements, it returns the one nonzero component of the vector 
shape function. So shape_value(i)*shape_value(j) will always return something 
nonzero. But what you really mean to do in your case is to multiply the 
*vector* shape function i times the vector shape function j. Both of these 
vectors may have a nonzero entry, but their dot product will only be nonzero 
if these components are the same.

You will want to write the mass matrix here with extractors (i.e., 
fe_values[...]) in the same way you would build any other matrix for 
vector-valued problems.


> You will find the code attached, as well as the output of one run. If I 
> isolate the mass matrix built and calculate its determinant in Python, the 
> result is indeed zero.

Using the determinant is an unreliable technique for large matrices. Think 
about the case where you have a 1000x1000 matrix with eigenvalues all equal to 
0.1. This is a perfectly invertible matrix, but the determinant is 0.1^1000, 
which is zero for all practical purposes. You really need to look at the 
eigenvalues themselves.

But, seeing the issue I mentioned above, if you have two components, then you 
currently are computing the matrix
   [ M M ]
   [ M M ]
instead of
   [ M 0 ]
   [ 0 M ]
The former is clearly singular, so I'm not surprised.

Best
  W.


-- 
------------------------------------------------------------------------
Wolfgang Bangerth          email:                 [email protected]
                            www: http://www.math.colostate.edu/~bangerth/

-- 
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].
For more options, visit https://groups.google.com/d/optout.

Reply via email to