<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Hi everyone,<br>
      <br>
      I'm joining this discussion because we're testing a simple way to
      simplify the current object naming and configuration system in
      PETSc.<br>
      <br>
      The solution we're testing uses the same philosophy as the option
      database keys: a "default" database.<br>
      <br>
      We're creating a "default" PetscObjectList that gives access to a
      global list of pairs: <string, PetscObjectList>.<br>
      <br>
      With this, we can simply "name" and add all our PetscObjects to
      it.<br>
      <br>
      At run time, we create an option that holds the name of the
      PetscObject to be passed as a parameter to whatever we want to
      configure.<br>
      <br>
      For example, let's say you want to pass an optional matrix named
      "preSchur" to a specific PC. It could be configured like this:<br>
      <br>
      Mat MyMat;<br>
      PetscObjectSetName(MyMat, "preSchur");<br>
      PetscObjectListAdd(gGlobalList, "preSchur", (PetscObject)MyMat); 
      /* Here MyMat is made available into the global object list with
      the key "preSchur" */<br>
      <br>
      Then, in a PC, you can retrieve the matrix by using both the
      options database keys and the objects database. For example, if a
      PC looks for options like:<br>
      <br>
      -pc_fieldsplit_schur_precondition user<br>
      -pc_fieldsplit_schur_precondition_user_mat preSchur<br>
    </p>
    <p>It just needs to look if the key
      "pc_fieldsplit_schur_precondition_user_mat" has been set, and if
      so, retrieve the value, which is the name of the matrix to be
      retrieved from the global list.<br>
      <br>
      With this approach, all PCs, KSPs, and other objects can be given
      objects at setup time (or later) with proper naming of the options
      and objects.<br>
      <br>
      Some key features of this approach include:<br>
      <br>
      - If a user misspells an option, it will be visible in the unused
      options.<br>
      - Any new options to any PC or KSP do not need a new function to
      use them; just a new option key is needed.<br>
      - All software that uses PETSc as a library can have a very
      "light" interface to it: just name all objects and let users
      "configure" them!<br>
      - This is almost the same idea as "composing objects," which is
      already used in many places in PETSc. It's simpler to use and
      really relaxes the constraints on "when" you can configure a PC.</p>
    <p>I think this is a promising approach to simplifying the object
      naming and configuration system in PETSc. I'm interested in
      hearing your feedback.<br>
      <br>
      Thanks,<br>
    </p>
    <p>Eric</p>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">On 2023-07-13 13:44, Matthew Knepley
      wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAMYG4G=Z=iSN+i8p5cQxcOUGqf4u=7aU_YqVjX2b_SBYpJYi_w@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div dir="ltr">
        <div dir="ltr">On Thu, Jul 13, 2023 at 5:33 AM Pierre Jolivet
          <<a href="mailto:pierre.jolivet@lip6.fr"
            moz-do-not-send="true" class="moz-txt-link-freetext">pierre.jolivet@lip6.fr</a>>
          wrote:<br>
        </div>
        <div class="gmail_quote">
          <blockquote class="gmail_quote" style="margin:0px 0px 0px
            0.8ex;border-left:1px solid
            rgb(204,204,204);padding-left:1ex">
            <div>Dear Nicolas,<br>
              <div><br>
                <blockquote type="cite">
                  <div>On 13 Jul 2023, at 10:17 AM, TARDIEU Nicolas <<a
                      href="mailto:nicolas.tardieu@edf.fr"
                      target="_blank" moz-do-not-send="true"
                      class="moz-txt-link-freetext">nicolas.tardieu@edf.fr</a>>
                    wrote:</div>
                  <br>
                  <div>
                    <div
style="font-style:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt">Dear
                      Pierre,</div>
                    <div
style="font-style:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt"><br>
                    </div>
                    <div
style="font-style:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt">You
                      are absolutely right. I was using a
                      --with-debugging=0 (aka release) install and this
                      is definitely an error.<br>
                      Once I used my debug install, I found the way to
                      fix my problem. The solution is in the attached
                      script: I first need to extract the correct block
                      from the PC operator's MatNest and then append the
                      null space to it.</div>
                    <div
style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none">
                      <div
                        style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt">Anyway
                        this is a bit tricky...</div>
                    </div>
                  </div>
                </blockquote>
                <div><br>
                </div>
                <div>Yep, it’s the same with all “nested” solvers,
                  fieldsplit, ASM, MG, you name it.</div>
                <div>You first need the initial PCSetUp() so that the
                  bare minimum is put in place, then you have to fetch
                  things yourself and adapt it to your needs.</div>
                <div>We had a similar discussion with the MEF++ people
                  last week, there is currently no way around this,
                  AFAIK.</div>
              </div>
            </div>
          </blockquote>
          <div><br>
          </div>
          <div>Actually, I hated this as well, so I built a way around
            it _if_ you are using a DM to define the problem. Then</div>
          <div>you can set a "nullspace constructor" to make it if the
            field you are talking about is ever extracted. You
            use DMSetNullSpaceConstructor(). I do this in SNES ex62 and
            ex69, and other examples.</div>
          <div><br>
          </div>
          <div>  Thanks,</div>
          <div><br>
          </div>
          <div>     Matt</div>
          <div> </div>
          <blockquote class="gmail_quote" style="margin:0px 0px 0px
            0.8ex;border-left:1px solid
            rgb(204,204,204);padding-left:1ex">
            <div>
              <div>
                <div>Thanks,</div>
                <div>Pierre</div>
                <br>
                <blockquote type="cite">
                  <div>
                    <div
style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none">
                      <div id="m_3582794520278951836Signature">
                        <div name="divtagdefaultwrapper"
                          style="font-family:Calibri,Arial,Helvetica,sans-serif;margin:0px">
                          <div style="margin:0px"><font size="3"
                              face="Calibri,sans-serif">Regards,<span> </span></font></div>
                          <div style="margin:0px"><font
                              face="Calibri,sans-serif"><font size="3">Nicolas<br>
                                <br>
                              </font></font></div>
                        </div>
                      </div>
                    </div>
                    <hr
style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;display:inline-block;width:867.297px"><span
style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;float:none;display:inline"></span>
                    <div id="m_3582794520278951836divRplyFwdMsg"
                      dir="ltr"
style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none"><font
                        style="font-size:11pt" face="Calibri,
                        sans-serif"><b>De :</b><span> </span><a
                          href="mailto:pierre.jolivet@lip6.fr"
                          target="_blank" moz-do-not-send="true"
                          class="moz-txt-link-freetext">pierre.jolivet@lip6.fr</a>
                        <<a href="mailto:pierre.jolivet@lip6.fr"
                          target="_blank" moz-do-not-send="true"
                          class="moz-txt-link-freetext">pierre.jolivet@lip6.fr</a>><br>
                        <b>Envoyé :</b><span> </span>mercredi 12 juillet
                        2023 19:52<br>
                        <b>À :</b><span> </span>TARDIEU Nicolas <<a
                          href="mailto:nicolas.tardieu@edf.fr"
                          target="_blank" moz-do-not-send="true"
                          class="moz-txt-link-freetext">nicolas.tardieu@edf.fr</a>><br>
                        <b>Cc :</b><span> </span><a
                          href="mailto:petsc-users@mcs.anl.gov"
                          target="_blank" moz-do-not-send="true"
                          class="moz-txt-link-freetext">petsc-users@mcs.anl.gov</a>
                        <<a href="mailto:petsc-users@mcs.anl.gov"
                          target="_blank" moz-do-not-send="true"
                          class="moz-txt-link-freetext">petsc-users@mcs.anl.gov</a>><br>
                        <b>Objet :</b><span> </span>Re: [petsc-users]
                        Near null space for a fieldsplit in petsc4py</font>
                      <div> </div>
                    </div>
                    <div
style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none"><font
                        size="2"><span style="font-size:11pt">
                          <div><br>
                            > On 12 Jul 2023, at 6:04 PM, TARDIEU
                            Nicolas via petsc-users <<a
                              href="mailto:petsc-users@mcs.anl.gov"
                              target="_blank" moz-do-not-send="true"
                              class="moz-txt-link-freetext">petsc-users@mcs.anl.gov</a>>
                            wrote:<br>
                            ><span> </span><br>
                            > Dear PETSc team,<br>
                            ><span> </span><br>
                            > In the attached example, I set up a
                            block pc for a saddle-point problem in
                            petsc4py. The IS define the unknowns, namely
                            some physical quantity (phys) and a Lagrange
                            multiplier (lags).<br>
                            > I would like to attach a near null
                            space to the physical block, in order to get
                            the best performance from an AMG pc.<span> </span><br>
                            > I have been trying hard, attaching it
                            to the initial block, to the IS but no
                            matter what I am doing, when it comes to
                            "ksp_view", no near null space is attached
                            to the matrix.<br>
                            ><span> </span><br>
                            > Could you please help me figure out
                            what I am doing wrong ?<br>
                            <br>
                            Are you using a double-precision 32-bit
                            integers real build of PETSc?<br>
                            Is it --with-debugging=0?<br>
                            Because with my debug build, I get the
                            following error (thus explaining why it’s
                            not attached to the KSP).<br>
                            Traceback (most recent call last):<br>
                              File
                            "/Volumes/Data/Downloads/test/test_NullSpace.py",
                            line 35, in <module><br>
                                ns = NullSpace().create(True, [v],
                            comm=comm)<br>
                                    
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^<br>
                              File "petsc4py/PETSc/Mat.pyx", line 5611,
                            in petsc4py.PETSc.NullSpace.create<br>
                            petsc4py.PETSc.Error: error code 62<br>
                            [0] MatNullSpaceCreate() at
                            /Volumes/Data/repositories/petsc/src/mat/interface/matnull.c:249<br>
                            [0] Invalid argument<br>
                            [0] Vector 0 must have 2-norm of 1.0, it is
                            22.3159<br>
                            <br>
                            Furthermore, if you set yourself the
                            constant vector in the near null-space, then
                            the first argument of create() must be
                            False, otherwise, you’ll have twice the same
                            vector, and you’ll end up with another error
                            (the vectors in the near null-space must be
                            orthonormal).<br>
                            If things still don’t work after those
                            couple of fixes, please feel free to send an
                            up-to-date reproducer.<br>
                            <br>
                            Thanks,<br>
                            Pierre<br>
                            <br>
                            > Thanks,<br>
                            > Nicolas<br>
                            ><span> </span><br>
                            ><span> </span><br>
                            ><span> </span><br>
                            ><span> </span><br>
                            > Ce message et toutes les pièces jointes
                            (ci-après le 'Message') sont établis à
                            l'intention exclusive des destinataires et
                            les informations qui y figurent sont
                            strictement confidentielles. Toute
                            utilisation de ce Message non conforme à sa
                            destination, toute diffusion ou toute
                            publication totale ou partielle, est
                            interdite sauf autorisation expresse.<br>
                            ><span> </span><br>
                            > Si vous n'êtes pas le destinataire de
                            ce Message, il vous est interdit de le
                            copier, de le faire suivre, de le divulguer
                            ou d'en utiliser tout ou partie. Si vous
                            avez reçu ce Message par erreur, merci de le
                            supprimer de votre système, ainsi que toutes
                            ses copies, et de n'en garder aucune trace
                            sur quelque support que ce soit. Nous vous
                            remercions également d'en avertir
                            immédiatement l'expéditeur par retour du
                            message.<br>
                            ><span> </span><br>
                            > Il est impossible de garantir que les
                            communications par messagerie électronique
                            arrivent en temps utile, sont sécurisées ou
                            dénuées de toute erreur ou virus.<br>
                            >
                            ____________________________________________________<br>
                            ><span> </span><br>
                            > This message and any attachments (the
                            'Message') are intended solely for the
                            addressees. The information contained in
                            this Message is confidential. Any use of
                            information contained in this Message not in
                            accord with its purpose, any dissemination
                            or disclosure, either whole or partial, is
                            prohibited except formal approval.<br>
                            ><span> </span><br>
                            > If you are not the addressee, you may
                            not copy, forward, disclose or use any part
                            of it. If you have received this message in
                            error, please delete it and all copies from
                            your system and notify the sender
                            immediately by return message.<br>
                            ><span> </span><br>
                            > E-mail communication cannot be
                            guaranteed to be timely secure, error or
                            virus-free.<br>
                            > <test.tgz><br>
                            <br>
                          </div>
                        </span></font></div>
                    <div
style="margin-top:0px;margin-bottom:0px;font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none"><br>
                      Ce message et toutes les pièces jointes (ci-après
                      le 'Message') sont établis à l'intention exclusive
                      des destinataires et les informations qui y
                      figurent sont strictement confidentielles. Toute
                      utilisation de ce Message non conforme à sa
                      destination, toute diffusion ou toute publication
                      totale ou partielle, est interdite sauf
                      autorisation expresse.</div>
                    <div
style="margin-top:0px;margin-bottom:0px;font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none">Si
                      vous n'êtes pas le destinataire de ce Message, il
                      vous est interdit de le copier, de le faire
                      suivre, de le divulguer ou d'en utiliser tout ou
                      partie. Si vous avez reçu ce Message par erreur,
                      merci de le supprimer de votre système, ainsi que
                      toutes ses copies, et de n'en garder aucune trace
                      sur quelque support que ce soit. Nous vous
                      remercions également d'en avertir immédiatement
                      l'expéditeur par retour du message.</div>
                    <div
style="margin-top:0px;margin-bottom:0px;font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none">Il
                      est impossible de garantir que les communications
                      par messagerie électronique arrivent en temps
                      utile, sont sécurisées ou dénuées de toute erreur
                      ou virus.<br>
____________________________________________________</div>
                    <div
style="margin-top:0px;margin-bottom:0px;font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none">This
                      message and any attachments (the 'Message') are
                      intended solely for the addressees. The
                      information contained in this Message is
                      confidential. Any use of information contained in
                      this Message not in accord with its purpose, any
                      dissemination or disclosure, either whole or
                      partial, is prohibited except formal approval.</div>
                    <div
style="margin-top:0px;margin-bottom:0px;font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none">If
                      you are not the addressee, you may not copy,
                      forward, disclose or use any part of it. If you
                      have received this message in error, please delete
                      it and all copies from your system and notify the
                      sender immediately by return message.</div>
                    <div
style="margin-top:0px;margin-bottom:0px;font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none">E-mail
                      communication cannot be guaranteed to be timely
                      secure, error or virus-free.</div>
                    <span
                      id="m_3582794520278951836cid:2AB1ADB4-0D11-4C37-946B-CA70DDEE2CD6"><test_NullSpace.py.gz></span></div>
                </blockquote>
              </div>
              <br>
            </div>
          </blockquote>
        </div>
        <br clear="all">
        <div><br>
        </div>
        <span class="gmail_signature_prefix">-- </span><br>
        <div dir="ltr" class="gmail_signature">
          <div dir="ltr">
            <div>
              <div dir="ltr">
                <div>
                  <div dir="ltr">
                    <div>What most experimenters take for granted before
                      they begin their experiments is infinitely more
                      interesting than any results to which their
                      experiments lead.<br>
                      -- Norbert Wiener</div>
                    <div><br>
                    </div>
                    <div><a href="http://www.cse.buffalo.edu/~knepley/"
                        target="_blank" moz-do-not-send="true">https://www.cse.buffalo.edu/~knepley/</a><br>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </blockquote>
    <pre class="moz-signature" cols="72">-- 
Eric Chamberland, ing., M. Ing
Professionnel de recherche
GIREF/Université Laval
(418) 656-2131 poste 41 22 42</pre>
  </body>
</html>