<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class=""><br class=""></div>  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.<div class=""><br class=""></div><div class="">   Barry</div><div class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Aug 16, 2020, at 7:46 PM, Nidish <<a href="mailto:nb25@rice.edu" class="">nb25@rice.edu</a>> wrote:</div><br class="Apple-interchange-newline"><div class="">
  
    <meta http-equiv="Content-Type" content="text/html;
      charset=windows-1252" class="">
  
  <div class=""><p class="">Thank you for the suggestions.</p><p class="">I'm getting a zero pivot error for the LU in slepc while
      calculating the rest of the modes. <br class="">
    </p><p class="">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.</p><p class="">Thanks,<br class="">
      Nidish<br class="">
    </p>
    <div class="moz-cite-prefix">On 8/16/20 2:50 PM, Barry Smith wrote:<br class="">
    </div>
    <blockquote type="cite" cite="mid:C383A12E-B879-4F37-B2C7-63F7B813D8FE@petsc.dev" class="">
      <meta http-equiv="Content-Type" content="text/html;
        charset=windows-1252" class="">
      <div class=""><br class="">
      </div>
        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.
      <div class=""><br class="">
      </div>
      <div class="">   Barry</div>
      <div class=""><br class="">
        <div class=""><br class="">
        </div>
        <div class=""><br class="">
          <div class=""><br class="">
            <blockquote type="cite" class="">
              <div class="">On Aug 16, 2020, at 11:26 AM, Nidish <<a href="mailto:nb25@rice.edu" class="" moz-do-not-send="true">nb25@rice.edu</a>> wrote:</div>
              <br class="Apple-interchange-newline">
              <div class="">
                <div style="zoom: 0%;" class="">
                  <div dir="auto" class="">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.<br class="">
                    <br class="">
                  </div>
                  <div dir="auto" class="">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?<br class="">
                    <br class="">
                  </div>
                  <div dir="auto" class="">Nidish</div>
                  <div class="gmail_quote">On Aug 16, 2020, at 00:17,
                    Jed Brown <<a href="mailto:jed@jedbrown.org" target="_blank" class="" moz-do-not-send="true">jed@jedbrown.org</a>>
                    wrote:
                    <blockquote class="gmail_quote" style="margin: 0pt
                      0pt 0pt 0.8ex; border-left: 1px solid rgb(204,
                      204, 204); padding-left: 1ex;">
                      <pre class="blue">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 <<a href="mailto:nb25@rice.edu" class="" moz-do-not-send="true">nb25@rice.edu</a>> writes:

<blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #729fcf; padding-left: 1ex;"> I just use the standard eigs function (<a href="https://www.mathworks.com/help/matlab/ref/eigs.html" class="" moz-do-not-send="true">https://www.mathworks.com/help/matlab/ref/eigs.html</a>) 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 <<a href="mailto:bsmith@petsc.dev" class="" moz-do-not-send="true">bsmith@petsc.dev</a>> wrote:
<blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ad7fa8; padding-left: 1ex;">
Exactly what algorithm are you using in Matlab to get the 10 smallest
eigenvalues and their corresponding eigenvectors? 

  Barry


<blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #8ae234; padding-left: 1ex;"> On Aug 15, 2020, at 8:53 PM, Nidish <<a href="mailto:nb25@rice.edu" class="" moz-do-not-send="true">nb25@rice.edu</a>> wrote:
 
 The section on solving singular systems in the manual starts with
</blockquote>assuming that the singular eigenvectors are already known.
<blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #8ae234; padding-left: 1ex;"> 
 I have a large system where finding the singular eigenvectors is not
</blockquote>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
<blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #8ae234; padding-left: 1ex;"> 
 K.v = lam*M.v
 
 for cases where K is positive semi-definite (contains a few "rigid
</blockquote>body modes") and M is strictly positive definite.
<blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #8ae234; padding-left: 1ex;"> 
 I'd appreciate any assistance you may provide with this.
 
 Thank you,
 Nidish
</blockquote></blockquote></blockquote></pre>
                    </blockquote>
                  </div>
                </div>
              </div>
            </blockquote>
          </div>
          <br class="">
        </div>
      </div>
    </blockquote>
    <div class="moz-signature">-- <br class="">
      Nidish</div>
  </div>

</div></blockquote></div><br class=""></div></body></html>