<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    Thanks Mark.  I think I know what to do now.  Time to start coding.<br>
    <pre class="moz-signature" cols="72">-sanjay

</pre>
    <div class="moz-cite-prefix">On 4/4/25 2:17 AM, Mark Adams wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CADOhEh7foKdqUiJU4A0_joQXQ+oPBt+02od9KFN2=cNDHoahmg@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div dir="ltr">Matt, Matt, Matt,
        <div><br>
        </div>
        <div>Sanjay, (1) is the only sane option. Here is an example
          taken from a code that I work with.</div>
        <div><br>
        </div>
        <div>This simply has 3 fields with 12 ("<span
style="color:rgb(0,0,0);font-family:Menlo;font-size:11px;font-variant-ligatures:no-common-ligatures">stride</span>",
          not a great name, should be "bs") dofs on each vertex in each
          field (2D Bell + 1D cubic Hermite).</div>
        This uses ISCreateBlock, which you might want to use for dof
        (1,2) in your case. It lets, with stride = 2, input IS = [1,3]
        create an IS with [2,3,6,7] semantically.
        <div><br>
          <div>Thanks,</div>
          <div>Mark</div>
          <div><br>
          </div>
          <div>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(47,180,29)">int</span><span
                style="font-variant-ligatures:no-common-ligatures"> matrix_solve::
                setFieldSplitType()</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">{</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(64,11,217)"><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)">  </span><span
                style="font-variant-ligatures:no-common-ligatures">//
                the global parameters</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">  PetscInt
                ierr, dofPerEnt,stride,k;</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">  </span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(47,180,29)">int</span><span
                style="font-variant-ligatures:no-common-ligatures"> startDof,
                endDofPlusOne;</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">  </span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(47,180,29)">int</span><span
                style="font-variant-ligatures:no-common-ligatures"> num_own_ent=m3dc1_mesh::instance()->num_own_ent[</span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(180,36,25)">0</span><span
                style="font-variant-ligatures:no-common-ligatures">],
                num_own_dof;</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">  m3dc1_field_getnumowndof(&fieldOrdering,
                &num_own_dof);</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">  </span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(193,101,28)">if</span><span
                style="font-variant-ligatures:no-common-ligatures"> (num_own_ent)
                dofPerEnt = num_own_dof/num_own_ent;</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(64,11,217)"><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)">  stride=dofPerEnt/</span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(180,36,25)">3</span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)">; </span><span
                style="font-variant-ligatures:no-common-ligatures">//U </span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(180,36,25)">0</span><span
                style="font-variant-ligatures:no-common-ligatures">-></span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(180,36,25)">11</span><span
                style="font-variant-ligatures:no-common-ligatures">,
                Omega </span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(180,36,25)">12</span><span
                style="font-variant-ligatures:no-common-ligatures">-></span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(180,36,25)">23</span><span
                style="font-variant-ligatures:no-common-ligatures">,
                Chi </span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(180,36,25)">24</span><span
                style="font-variant-ligatures:no-common-ligatures">-></span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(180,36,25)">35</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">  m3dc1_field_getowndofid
                (&fieldOrdering, &startDof, &endDofPlusOne);</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">  startDof=startDof/stride;</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0);min-height:13px"><span
                style="font-variant-ligatures:no-common-ligatures"></span><br>
            </p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(64,11,217)"><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)">  </span><span
                style="font-variant-ligatures:no-common-ligatures">//
                the </span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(180,36,25)">3</span><span
                style="font-variant-ligatures:no-common-ligatures"> fields
                for PCFIELDSPLIT</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(64,11,217)"><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)">  </span><span
                style="font-variant-ligatures:no-common-ligatures">IS
                field0, field1, field2;</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">  PetscInt
                *idx0, *idx1, *idx2;</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">  ierr=PetscMalloc1(num_own_ent,
                &idx0);</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">  ierr=PetscMalloc1(num_own_ent,
                &idx1);</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">  ierr=PetscMalloc1(num_own_ent,
                &idx2);</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0);min-height:13px"><span
                style="font-variant-ligatures:no-common-ligatures"></span><br>
            </p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">  </span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(193,101,28)">for</span><span
                style="font-variant-ligatures:no-common-ligatures"> (k=</span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(180,36,25)">0</span><span
                style="font-variant-ligatures:no-common-ligatures">;
                k<num_own_ent; k++) idx0[k]=k*dofPerEnt/stride +
                startDof;</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">  ierr=ISCreateBlock(PETSC_COMM_WORLD,
                stride, num_own_ent, idx0, PETSC_COPY_VALUES,
                &field0);</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0);min-height:13px"><span
                style="font-variant-ligatures:no-common-ligatures"></span><br>
            </p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">  </span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(193,101,28)">for</span><span
                style="font-variant-ligatures:no-common-ligatures"> (k=</span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(180,36,25)">0</span><span
                style="font-variant-ligatures:no-common-ligatures">;
                k<num_own_ent; k++) idx1[k]=</span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(180,36,25)">1</span><span
                style="font-variant-ligatures:no-common-ligatures">+k*dofPerEnt/stride
                + startDof;</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">  ierr=ISCreateBlock(PETSC_COMM_WORLD,
                stride, num_own_ent, idx1, PETSC_COPY_VALUES,
                &field1);</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0);min-height:13px"><span
                style="font-variant-ligatures:no-common-ligatures"></span><br>
            </p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">  </span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(193,101,28)">for</span><span
                style="font-variant-ligatures:no-common-ligatures"> (k=</span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(180,36,25)">0</span><span
                style="font-variant-ligatures:no-common-ligatures">;
                k<num_own_ent; k++) idx2[k]=</span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(180,36,25)">2</span><span
                style="font-variant-ligatures:no-common-ligatures">+k*dofPerEnt/stride
                + startDof;</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">  ierr=ISCreateBlock(PETSC_COMM_WORLD,
                stride, num_own_ent, idx2, PETSC_COPY_VALUES,
                &field2);</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0);min-height:13px"><span
                style="font-variant-ligatures:no-common-ligatures"></span><br>
            </p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">  PC
                pc; </span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">  ierr=
                KSPAppendOptionsPrefix(*ksp,</span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(180,36,25)">"fs_"</span><span
                style="font-variant-ligatures:no-common-ligatures">); //
                ksp is a global here</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">  ierr=KSPGetPC(*ksp,
                &pc);</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">  ierr=PCSetType(pc,
                PCFIELDSPLIT);</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">  ierr=<span
                  class="gmail-il">PCFieldSplitSetIS</span>(pc, </span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(180,36,25)">NULL</span><span
                style="font-variant-ligatures:no-common-ligatures">,
                field0);</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">  ierr=<span
                  class="gmail-il">PCFieldSplitSetIS</span>(pc, </span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(180,36,25)">NULL</span><span
                style="font-variant-ligatures:no-common-ligatures">,
                field1);</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">  ierr=<span
                  class="gmail-il">PCFieldSplitSetIS</span>(pc, </span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(180,36,25)">NULL</span><span
                style="font-variant-ligatures:no-common-ligatures">,
                field2);</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0);min-height:13px"><span
                style="font-variant-ligatures:no-common-ligatures"></span><br>
            </p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">  ierr=PetscFree(idx0);</span><a href="https://urldefense.us/v3/__https://petsc.org/main/manualpages/Sys/PetscCall/__;!!G_uCfscf7eWS!YYxJCjLuXQe2lb7pLGBk_jFm3tcpXjp7fMV9Z2SjL4wXwdnCNa3qKfT2WvEkGU5XtL60cuWHGdn1_3Btpjtuwg$" style="font-family:Arial,Helvetica,sans-serif;font-size:small" moz-do-not-send="true">PetscCall</a><span
style="font-family:Arial,Helvetica,sans-serif;font-size:small">(</span><a href="https://urldefense.us/v3/__https://petsc.org/main/manualpages/IS/ISDestroy/__;!!G_uCfscf7eWS!YYxJCjLuXQe2lb7pLGBk_jFm3tcpXjp7fMV9Z2SjL4wXwdnCNa3qKfT2WvEkGU5XtL60cuWHGdn1_3AhggVmlQ$" style="font-family:Arial,Helvetica,sans-serif;font-size:small" moz-do-not-send="true">ISDestroy</a><span
style="font-family:Arial,Helvetica,sans-serif;font-size:small">(&</span><span
                style="font-variant-ligatures:no-common-ligatures">field0</span><span
style="font-family:Arial,Helvetica,sans-serif;font-size:small">));</span><a href="https://urldefense.us/v3/__https://petsc.org/main/manualpages/Sys/PetscCall/__;!!G_uCfscf7eWS!YYxJCjLuXQe2lb7pLGBk_jFm3tcpXjp7fMV9Z2SjL4wXwdnCNa3qKfT2WvEkGU5XtL60cuWHGdn1_3Btpjtuwg$" style="font-family:Arial,Helvetica,sans-serif;font-size:small" moz-do-not-send="true">PetscCall</a><span
style="font-family:Arial,Helvetica,sans-serif;font-size:small">(</span><a href="https://urldefense.us/v3/__https://petsc.org/main/manualpages/IS/ISDestroy/__;!!G_uCfscf7eWS!YYxJCjLuXQe2lb7pLGBk_jFm3tcpXjp7fMV9Z2SjL4wXwdnCNa3qKfT2WvEkGU5XtL60cuWHGdn1_3AhggVmlQ$" style="font-family:Arial,Helvetica,sans-serif;font-size:small" moz-do-not-send="true">ISDestroy</a><span
style="font-family:Arial,Helvetica,sans-serif;font-size:small">(&</span><span
                style="font-variant-ligatures:no-common-ligatures">field1</span><span
style="font-family:Arial,Helvetica,sans-serif;font-size:small">));</span><a href="https://urldefense.us/v3/__https://petsc.org/main/manualpages/Sys/PetscCall/__;!!G_uCfscf7eWS!YYxJCjLuXQe2lb7pLGBk_jFm3tcpXjp7fMV9Z2SjL4wXwdnCNa3qKfT2WvEkGU5XtL60cuWHGdn1_3Btpjtuwg$" style="font-family:Arial,Helvetica,sans-serif;font-size:small" moz-do-not-send="true">PetscCall</a><span
style="font-family:Arial,Helvetica,sans-serif;font-size:small">(</span><a href="https://urldefense.us/v3/__https://petsc.org/main/manualpages/IS/ISDestroy/__;!!G_uCfscf7eWS!YYxJCjLuXQe2lb7pLGBk_jFm3tcpXjp7fMV9Z2SjL4wXwdnCNa3qKfT2WvEkGU5XtL60cuWHGdn1_3AhggVmlQ$" style="font-family:Arial,Helvetica,sans-serif;font-size:small" moz-do-not-send="true">ISDestroy</a><span
style="font-family:Arial,Helvetica,sans-serif;font-size:small">(&</span><span
                style="font-variant-ligatures:no-common-ligatures">field2</span><span
style="font-family:Arial,Helvetica,sans-serif;font-size:small">));</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">  ierr=PetscFree(idx1);</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">  ierr=PetscFree(idx2);</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">  fsSet=</span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(180,36,25)">1</span><span
                style="font-variant-ligatures:no-common-ligatures">;</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(193,101,28)"><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)">  </span><span
                style="font-variant-ligatures:no-common-ligatures">return</span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)"> </span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(180,36,25)">0</span><span
style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0)">;</span></p>
            <p
style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-feature-settings:normal;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span
                style="font-variant-ligatures:no-common-ligatures">}</span></p>
          </div>
          <div><br>
          </div>
        </div>
      </div>
      <br>
      <div class="gmail_quote gmail_quote_container">
        <div dir="ltr" class="gmail_attr">On Thu, Apr 3, 2025 at 8:57 AM
          Matthew Knepley <<a href="mailto:knepley@gmail.com"
            moz-do-not-send="true" class="moz-txt-link-freetext">knepley@gmail.com</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">
          <div dir="ltr">
            <div dir="ltr">On Thu, Apr 3, 2025 at 12:11 AM Sanjay
              Govindjee 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:</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 dir="ltr">
                  <div>We would like to solve an FEA problem
                    (unstructured grid) where the nodes on the elements
                    have different dofs.  For example the corner nodes
                    have only dof 0 and then mid-side nodes have dofs
                    0,1,2  (think 8 node serendipity element).  This is
                    a multi-physics problem so we are looking to use the
                    fieldsplit features to pre-condition and solve.  Is
                    there a simple example of this type of usage in the
                    src that we can try to mimic?</div>
                  <div><br>
                  </div>
                  <div>I presume this will take programming as opposed
                    to just setting command line options.</div>
                </div>
              </blockquote>
              <div><br>
              </div>
              <div>It will take a little programming, but not much. Here
                is the idea. FieldSplit needs to know what dofs belong
                to what field. There are a couple of ways to do this, at
                different levels of abstraction.</div>
              <div><br>
              </div>
              <div>1. Low level</div>
              <div><br>
              </div>
              <div>You can explicitly makes lists of the dofs in each
                field, as an IS, and call <a
href="https://urldefense.us/v3/__https://petsc.org/main/manualpages/PC/PCFieldSplitSetIS/__;!!G_uCfscf7eWS!aMROjbrPD3RYXMpO8mIii7q8eXZX1uN-6F6-g_jcNLLXGCgYPt2JEDkIIQCHs_vNBhhxsiwQJaz57ydxKyWe$"
                  target="_blank" moz-do-not-send="true">https://petsc.org/main/manualpages/PC/PCFieldSplitSetIS/</a>
                for each field. This is not very flexible, but the
                easiest to understand.</div>
              <div><br>
              </div>
              <div>2. Intermediate level</div>
              <div><br>
              </div>
              <div>You can make a DMShell, and then make a PetscSection,
                that gives the number of dofs on each vertex and edge.
                Then call KSPSetDM() or SNESSetDM(), and you can do
                nested fieldsplits from the command line. This also
                retains a connection between the topology and the data
                layout, but you have to deal with that pesky DM object.</div>
              <div><br>
              </div>
              <div>3. High level</div>
              <div><br>
              </div>
              <div>You can use a DMPlex to represent your grid and a
                PetscFE to represent the discretization, and then layout
                is done automatically, and nested fieldsplits can be
                done from the command line. I am not 100% sure PetscFE
                can represent what you want, but you can always call
                DMPlexCreateSection() by hand to make the PetscSection.</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 dir="ltr">
                  <div>-sanjay</div>
                  <div>
                    <div dir="ltr" class="gmail_signature"><br>
                    </div>
                  </div>
                </div>
              </blockquote>
            </div>
            <div><br clear="all">
            </div>
            <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="https://urldefense.us/v3/__http://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!aMROjbrPD3RYXMpO8mIii7q8eXZX1uN-6F6-g_jcNLLXGCgYPt2JEDkIIQCHs_vNBhhxsiwQJaz57-FUThx2$"
                            target="_blank" moz-do-not-send="true">https://www.cse.buffalo.edu/~knepley/</a><br>
                        </div>
                      </div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </blockquote>
      </div>
    </blockquote>
    <br>
  </body>
</html>