<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Thank you for the email, Zak,</p>
    <p>I have not looked into continuation methods for this problem yet,
      and I'd love to hear your thoughts on it!</p>
    <p>The problem I have is two-fold:</p>
    <ol>
      <li>Obtaining the eigenvectors of the system <br>
        K.v = lam*M.v<br>
        where the K and M are stiffness and mass matrices coming from a
        finite element model without any Dirichlet boundary conditions
        (i.e., having 6 Rigid body modes) and with a few RBE3
        constraints (introducing degrees of freedom with "zero mass" in
        the mass matrix). So the system has, in addition to the 6 rigid
        body modes, a few "spurious" null vectors coming from these RBE3
        constraints (which are enforced using Lagrange multipliers). <br>
      </li>
      <li>Conducting a linear solve of the system:<br>
        K.x = b<br>
        where K is from above.</li>
    </ol>
    <p>What I'm trying to do with both of these is to conduct a
      Hurty/Craig-Bampton Component Mode Synthesis, which is like a
      Schur Condensation with a few "fixed interface modal" DoFs added
      to the reduced system.</p>
    <p>So both can be solved by obtaining the vectors that span the null
      space of the system.<br>
    </p>
    <p>I've created two separate threads for the two problems because I
      felt both are slightly different questions. But I understand now
      that the whole thing boils down to obtaining the nullspaces.<br>
    </p>
    <p>Thank you,<br>
      Nidish<br>
    </p>
    <div class="moz-cite-prefix">On 8/17/20 1:33 PM, zakaryah wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CABm8tB6kv74G1E4XSsa1RZ+cLnkK4zA0anfqeP8Y0Z9_ZT9dUQ@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div dir="ltr">
        <div class="gmail_default" style="font-size:small">Hi Nidish,</div>
        <div class="gmail_default" style="font-size:small"><br>
        </div>
        <div class="gmail_default" style="font-size:small">I may not
          fully understand your problem, but it sounds like you could
          benefit from continuation methods. Have you looked into this?
          If it's helpful, I have some experience with this and I can
          discuss with you by email.</div>
        <div class="gmail_default" style="font-size:small"><br>
        </div>
        <div class="gmail_default" style="font-size:small">Cheers, Zak<br>
        </div>
      </div>
      <br>
      <div class="gmail_quote">
        <div dir="ltr" class="gmail_attr">On Mon, Aug 17, 2020 at 2:31
          PM Nidish <<a href="mailto:nb25@rice.edu"
            moz-do-not-send="true">nb25@rice.edu</a>> wrote:<br>
        </div>
        <blockquote class="gmail_quote" style="margin:0px 0px 0px
          0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Thankfully
          for this step, the matrix is not dense. But thank you.<br>
          <br>
          Nidish<br>
          <br>
          On 8/17/20 8:52 AM, Jose E. Roman wrote:<br>
          ><br>
          >> El 17 ago 2020, a las 14:27, Barry Smith <<a
            href="mailto:bsmith@petsc.dev" target="_blank"
            moz-do-not-send="true">bsmith@petsc.dev</a>> escribió:<br>
          >><br>
          >><br>
          >>   Nidish,<br>
          >><br>
          >>      Your matrix is dense, correct? MUMPS is for
          sparse matrices.<br>
          >><br>
          >>      Then I guess you could use Scalapack <a
href="http://netlib.org/scalapack/slug/node48.html#SECTION04323200000000000000"
            rel="noreferrer" target="_blank" moz-do-not-send="true">http://netlib.org/scalapack/slug/node48.html#SECTION04323200000000000000</a>
          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.<br>
          >><br>
          >>       I don't know if SLEPc has an interface to
          Scalapack for SVD or not.<br>
          > Yes, SLEPc (master) has interfaces for ScaLAPACK and
          Elemental for both SVD and (symmetric) eigenvalues.<br>
          ><br>
          > Jose<br>
          ><br>
          >>     Barry<br>
          >><br>
          >><br>
          >><br>
          >><br>
          >><br>
          >><br>
          >><br>
          >>> On Aug 17, 2020, at 2:51 AM, Jose E. Roman <<a
            href="mailto:jroman@dsic.upv.es" target="_blank"
            moz-do-not-send="true">jroman@dsic.upv.es</a>> wrote:<br>
          >>><br>
          >>> 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).<br>
          >>><br>
          >>> 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.<br>
          >>><br>
          >>> Jose<br>
          >>><br>
          >>><br>
          >>><br>
          >>>> El 17 ago 2020, a las 3:10, Nidish <<a
            href="mailto:nb25@rice.edu" target="_blank"
            moz-do-not-send="true">nb25@rice.edu</a>> escribió:<br>
          >>>><br>
          >>>> Oh damn. Alright, I'll keep trying out the
          different options.<br>
          >>>><br>
          >>>> Thank you,<br>
          >>>> Nidish<br>
          >>>><br>
          >>>> On 8/16/20 8:05 PM, Barry Smith wrote:<br>
          >>>>> 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.<br>
          >>>>><br>
          >>>>>   Barry<br>
          >>>>><br>
          >>>>><br>
          >>>>>> On Aug 16, 2020, at 7:46 PM, Nidish
          <<a href="mailto:nb25@rice.edu" target="_blank"
            moz-do-not-send="true">nb25@rice.edu</a>> wrote:<br>
          >>>>>><br>
          >>>>>> Thank you for the suggestions.<br>
          >>>>>><br>
          >>>>>> I'm getting a zero pivot error for
          the LU in slepc while calculating the rest of the modes.<br>
          >>>>>><br>
          >>>>>> 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.<br>
          >>>>>><br>
          >>>>>> Thanks,<br>
          >>>>>> Nidish<br>
          >>>>>><br>
          >>>>>> On 8/16/20 2:50 PM, Barry Smith
          wrote:<br>
          >>>>>>> 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.<br>
          >>>>>>><br>
          >>>>>>>   Barry<br>
          >>>>>>><br>
          >>>>>>><br>
          >>>>>>><br>
          >>>>>>><br>
          >>>>>>>> On Aug 16, 2020, at 11:26 AM,
          Nidish <<a href="mailto:nb25@rice.edu" target="_blank"
            moz-do-not-send="true">nb25@rice.edu</a>> wrote:<br>
          >>>>>>>><br>
          >>>>>>>> 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>
          >>>>>>>><br>
          >>>>>>>> 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>
          >>>>>>>><br>
          >>>>>>>> Nidish<br>
          >>>>>>>> On Aug 16, 2020, at 00:17,
          Jed Brown <<a href="mailto:jed@jedbrown.org"
            target="_blank" moz-do-not-send="true">jed@jedbrown.org</a>>
          wrote:<br>
          >>>>>>>> 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?<br>
          >>>>>>>><br>
          >>>>>>>> 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.<br>
          >>>>>>>><br>
          >>>>>>>> Nidish <<br>
          >>>>>>>> <a
            href="mailto:nb25@rice.edu" target="_blank"
            moz-do-not-send="true">nb25@rice.edu</a><br>
          >>>>>>>>> writes:<br>
          >>>>>>>><br>
          >>>>>>>> I just use the standard eigs
          function (<a
            href="https://www.mathworks.com/help/matlab/ref/eigs.html"
            rel="noreferrer" target="_blank" moz-do-not-send="true">https://www.mathworks.com/help/matlab/ref/eigs.html</a><br>
          >>>>>>>> ) as a black box. I think it
          uses a lanczos type method under the hood.<br>
          >>>>>>>><br>
          >>>>>>>> Nidish<br>
          >>>>>>>><br>
          >>>>>>>> On Aug 15, 2020, 21:42, at
          21:42, Barry Smith <<br>
          >>>>>>>> <a
            href="mailto:bsmith@petsc.dev" target="_blank"
            moz-do-not-send="true">bsmith@petsc.dev</a><br>
          >>>>>>>>> wrote:<br>
          >>>>>>>><br>
          >>>>>>>> Exactly what algorithm are
          you using in Matlab to get the 10 smallest<br>
          >>>>>>>> eigenvalues and their
          corresponding eigenvectors?<br>
          >>>>>>>><br>
          >>>>>>>> Barry<br>
          >>>>>>>><br>
          >>>>>>>><br>
          >>>>>>>><br>
          >>>>>>>> On Aug 15, 2020, at 8:53 PM,
          Nidish <<a href="mailto:nb25@rice.edu" target="_blank"
            moz-do-not-send="true">nb25@rice.edu</a><br>
          >>>>>>>>> wrote:<br>
          >>>>>>>> The section on solving
          singular systems in the manual starts with<br>
          >>>>>>>><br>
          >>>>>>>> assuming that the singular
          eigenvectors are already known.<br>
          >>>>>>>><br>
          >>>>>>>><br>
          >>>>>>>> I have a large system where
          finding the singular eigenvectors is not<br>
          >>>>>>>><br>
          >>>>>>>> trivially written down. How
          would you recommend I proceed with making<br>
          >>>>>>>> initial estimates? In MATLAB
          (with MUCH smaller matrices), I conduct an<br>
          >>>>>>>> eigensolve for the first 10
          smallest eigenvalues and take the<br>
          >>>>>>>> eigenvectors corresponding to
          the zero eigenvalues from this. This<br>
          >>>>>>>> approach doesn't work here
          since I'm unable to use SLEPc for solving<br>
          >>>>>>>><br>
          >>>>>>>><br>
          >>>>>>>> K.v = lam*M.v<br>
          >>>>>>>><br>
          >>>>>>>> for cases where K is positive
          semi-definite (contains a few "rigid<br>
          >>>>>>>><br>
          >>>>>>>> body modes") and M is
          strictly positive definite.<br>
          >>>>>>>><br>
          >>>>>>>><br>
          >>>>>>>> I'd appreciate any assistance
          you may provide with this.<br>
          >>>>>>>><br>
          >>>>>>>> Thank you,<br>
          >>>>>>>> Nidish<br>
          >>>>>>>><br>
          >>>>>> -- <br>
          >>>>>> Nidish<br>
          >>>> -- <br>
          >>>> Nidish<br>
          -- <br>
          Nidish<br>
        </blockquote>
      </div>
    </blockquote>
    <div class="moz-signature">-- <br>
      Nidish</div>
  </body>
</html>