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