Nidish,
Your matrix is dense, correct? MUMPS is for sparse matrices. Then I guess you could use Scalapack http://netlib.org/scalapack/slug/node48.html#SECTION04323200000000000000 to do the SVD. The work is order N^3 and parallel efficiency may not be great but it might help you solve your problem. I don't know if SLEPc has an interface to Scalapack for SVD or not. Barry > On Aug 17, 2020, at 2:51 AM, Jose E. Roman <jro...@dsic.upv.es> wrote: > > You can use SLEPc's SVD to compute the nullspace, but it has pitfalls: make > sure you use an absolute convergence test (not relative); for the particular > case of zero singular vectors, accuracy may not be very good and convergence > may be slow (with the corresponding high computational cost). > > MUMPS has functionality to get a basis of the nullspace, once you have > computed the factorization. But I don't know if this is easily accessible via > PETSc. > > Jose > > > >> El 17 ago 2020, a las 3:10, Nidish <n...@rice.edu> escribió: >> >> Oh damn. Alright, I'll keep trying out the different options. >> >> Thank you, >> Nidish >> >> On 8/16/20 8:05 PM, Barry Smith wrote: >>> >>> SVD is enormously expensive, needs to be done on a full dense matrix so >>> completely impractical. You need the best tuned iterative method, Jose is >>> the by far the most knowledgeable about that. >>> >>> Barry >>> >>> >>>> On Aug 16, 2020, at 7:46 PM, Nidish <n...@rice.edu> wrote: >>>> >>>> Thank you for the suggestions. >>>> >>>> I'm getting a zero pivot error for the LU in slepc while calculating the >>>> rest of the modes. >>>> >>>> Would conducting an SVD for just the stiffness matrix and then using the >>>> singular vectors as bases for the nullspace work? I haven't tried this out >>>> just yet, but I'm wondering if you could provide me insights into whether >>>> this will. >>>> >>>> Thanks, >>>> Nidish >>>> >>>> On 8/16/20 2:50 PM, Barry Smith wrote: >>>>> >>>>> If you know part of your null space explicitly (for example the rigid >>>>> body modes) I would recommend you always use that information explicitly >>>>> since it is extremely expensive numerically to obtain. Thus rather than >>>>> numerically computing the entire null space compute the part orthogonal >>>>> to the part you already know. Presumably SLEPc has tools to help do this, >>>>> naively I would just orthogonalized against the know subspace during the >>>>> computational process but there are probably better ways. >>>>> >>>>> Barry >>>>> >>>>> >>>>> >>>>> >>>>>> On Aug 16, 2020, at 11:26 AM, Nidish <n...@rice.edu> wrote: >>>>>> >>>>>> Well some of the zero eigenvectors are rigid body modes, but there are >>>>>> some more which are introduced by lagrange-multiplier based constraint >>>>>> enforcement, which are non trivial. >>>>>> >>>>>> My final application is for a nonlinear simulation, so I don't mind the >>>>>> extra computational effort initially. Could you have me the suggested >>>>>> solver configurations to get this type of eigenvectors in slepc? >>>>>> >>>>>> Nidish >>>>>> On Aug 16, 2020, at 00:17, Jed Brown <j...@jedbrown.org> wrote: >>>>>> It's possible to use this or a similar algorithm in SLEPc, but keep in >>>>>> mind that it's more expensive to compute these eigenvectors than to >>>>>> solve a linear system. Do you have a sequence of systems with the same >>>>>> null space? >>>>>> >>>>>> You referred to the null space as "rigid body modes". Why can't those >>>>>> be written down? Note that PETSc has convenience routines for computing >>>>>> rigid body modes from coordinates. >>>>>> >>>>>> Nidish < >>>>>> n...@rice.edu >>>>>>> writes: >>>>>> >>>>>> >>>>>> I just use the standard eigs function >>>>>> (https://www.mathworks.com/help/matlab/ref/eigs.html >>>>>> ) as a black box. I think it uses a lanczos type method under the hood. >>>>>> >>>>>> Nidish >>>>>> >>>>>> On Aug 15, 2020, 21:42, at 21:42, Barry Smith < >>>>>> bsm...@petsc.dev >>>>>>> wrote: >>>>>> >>>>>> >>>>>> Exactly what algorithm are you using in Matlab to get the 10 smallest >>>>>> eigenvalues and their corresponding eigenvectors? >>>>>> >>>>>> Barry >>>>>> >>>>>> >>>>>> >>>>>> On Aug 15, 2020, at 8:53 PM, Nidish <n...@rice.edu >>>>>>> wrote: >>>>>> >>>>>> The section on solving singular systems in the manual starts with >>>>>> >>>>>> assuming that the singular eigenvectors are already known. >>>>>> >>>>>> >>>>>> I have a large system where finding the singular eigenvectors is not >>>>>> >>>>>> trivially written down. How would you recommend I proceed with making >>>>>> initial estimates? In MATLAB (with MUCH smaller matrices), I conduct an >>>>>> eigensolve for the first 10 smallest eigenvalues and take the >>>>>> eigenvectors corresponding to the zero eigenvalues from this. This >>>>>> approach doesn't work here since I'm unable to use SLEPc for solving >>>>>> >>>>>> >>>>>> K.v = lam*M.v >>>>>> >>>>>> for cases where K is positive semi-definite (contains a few "rigid >>>>>> >>>>>> body modes") and M is strictly positive definite. >>>>>> >>>>>> >>>>>> I'd appreciate any assistance you may provide with this. >>>>>> >>>>>> Thank you, >>>>>> Nidish >>>>>> >>>>> >>>> -- >>>> Nidish >>> >> -- >> Nidish >