On Thu, Aug 1, 2024 at 12:19 PM Barry Smith <bsm...@petsc.dev> wrote:

>
>    The current code is nonsensical. We can "fix" it in a patch to the
> release branch (but the fix may break some current usage) by changing
>
>         if (nfields == 1) {
>           PetscCall(PCFieldSplitSetIS(pc, fieldNames[ifields[0]],
> compField));
>         } else {
>           PetscCall(PetscSNPrintf(splitname, sizeof(splitname), "%"
> PetscInt_FMT, i));
>           PetscCall(PCFieldSplitSetIS(pc, splitname, compField));
>         }
>
> to
>
>           PetscCall(PetscSNPrintf(splitname, sizeof(splitname), "%"
> PetscInt_FMT, i));
>           PetscCall(PCFieldSplitSetIS(pc, splitname, compField));
>
>
> but a "correct" fix will take some thought. The current model  using a
> combination of some "inner" integer fieldnames and some outer fieldnames
> (which are whatever they are including possible integers) doesn't make any
> sense.
>

My fix was going to be a flag that turns off names altogether. I think this
will fix it for Sebastian, and is the only consistent fix I can think of.

   Thanks,

      Matt


>
> On Aug 1, 2024, at 9:19 AM, Blauth, Sebastian <
> sebastian.bla...@itwm.fraunhofer.de> wrote:
>
> Hello everyone,
>
> I have a follow up on my question. I noticed the following behavior. Let’s
> assume I have 5 fields which I want to group with the following options:
>
> -ksp_type fgmres
> -ksp_max_it 1
> -ksp_monitor_true_residual
> -ksp_view
> -pc_type fieldsplit
> -pc_fieldsplit_type multiplicative
> -pc_fieldsplit_0_fields 0,1
> -pc_fieldsplit_1_fields 2
> -pc_fieldsplit_2_fields 3,4
> -fieldsplit_0_ksp_type preonly
> -fieldsplit_0_pc_type jacobi
> -fieldsplit_2_ksp_type preonly
> -fieldsplit_2_pc_type jacobi
>
> Then, the first split is fine, but both the second and third splits get
> the same prefix, i.e., “fieldsplit_2”. This is shown in the output of the
> ksp_view, which I attach below.
> The first one gets the prefix as there is only a single split (and I
> choose as name the index) and the third split gets the name as it groups
> two other fields, so the “outer” name is taken. Is there any way to
> circumvent this, other than using custom names for the splits which are
> unique?
>
> Thanks for your time and best regards,
> Sebastian Blauth
>
>
> The output of “ksp_view” is the following
>
> KSP Object: 1 MPI process
>   type: fgmres
>     restart=30, using Classical (unmodified) Gram-Schmidt
> Orthogonalization with no iterative refinement
>     happy breakdown tolerance 1e-30
>   maximum iterations=1, initial guess is zero
>   tolerances:  relative=1e-05, absolute=1e-50, divergence=10000.
>   right preconditioning
>   using UNPRECONDITIONED norm type for convergence test
> PC Object: 1 MPI process
>   type: fieldsplit
>     FieldSplit with MULTIPLICATIVE composition: total splits = 3
>     Solver info for each split is in the following KSP objects:
>   Split number 0 Defined by IS
>   KSP Object: (fieldsplit_0_) 1 MPI process
>     type: preonly
>     maximum iterations=10000, initial guess is zero
>     tolerances:  relative=1e-05, absolute=1e-50, divergence=10000.
>     left preconditioning
>     using NONE norm type for convergence test
>   PC Object: (fieldsplit_0_) 1 MPI process
>     type: jacobi
>       type DIAGONAL
>     linear system matrix = precond matrix:
>     Mat Object: (fieldsplit_0_) 1 MPI process
>       type: seqaij
>       rows=243, cols=243
>       total: nonzeros=4473, allocated nonzeros=4473
>       total number of mallocs used during MatSetValues calls=0
>         using I-node routines: found 86 nodes, limit used is 5
>   Split number 1 Defined by IS
>   KSP Object: (fieldsplit_2_) 1 MPI process
>     type: preonly
>     maximum iterations=10000, initial guess is zero
>     tolerances:  relative=1e-05, absolute=1e-50, divergence=10000.
>     left preconditioning
>     using NONE norm type for convergence test
>   PC Object: (fieldsplit_2_) 1 MPI process
>     type: jacobi
>       type DIAGONAL
>     linear system matrix = precond matrix:
>     Mat Object: (fieldsplit_2_) 1 MPI process
>       type: seqaij
>       rows=81, cols=81
>       total: nonzeros=497, allocated nonzeros=497
>       total number of mallocs used during MatSetValues calls=0
>         not using I-node routines
>   Split number 2 Defined by IS
>   KSP Object: (fieldsplit_2_) 1 MPI process
>     type: preonly
>     maximum iterations=10000, initial guess is zero
>     tolerances:  relative=1e-05, absolute=1e-50, divergence=10000.
>     left preconditioning
>     using NONE norm type for convergence test
>   PC Object: (fieldsplit_2_) 1 MPI process
>     type: jacobi
>       type DIAGONAL
>     linear system matrix = precond matrix:
>     Mat Object: (fieldsplit_2_) 1 MPI process
>       type: seqaij
>       rows=243, cols=243
>       total: nonzeros=4473, allocated nonzeros=4473
>       total number of mallocs used during MatSetValues calls=0
>         using I-node routines: found 85 nodes, limit used is 5
>   linear system matrix = precond matrix:
>   Mat Object: 1 MPI process
>     type: seqaij
>     rows=567, cols=567
>     total: nonzeros=24353, allocated nonzeros=24353
>     total number of mallocs used during MatSetValues calls=0
>       using I-node routines: found 173 nodes, limit used is 5
>
> --
> Dr. Sebastian Blauth
> Fraunhofer-Institut für
> Techno- und Wirtschaftsmathematik ITWM
> Abteilung Transportvorgänge
> Fraunhofer-Platz 1, 67663 Kaiserslautern
> Telefon: +49 631 31600-4968
> sebastian.bla...@itwm.fraunhofer.de
> https://urldefense.us/v3/__https://www.itwm.fraunhofer.de__;!!G_uCfscf7eWS!an6Idf-f7OiZlsU0N0Ftpr5mM5etD7GF_9ghya_ALFmQP_eL93oONwYYRLmLGz-0FSXHkB0bMsjj0e4-qdCV$
>  
>
> *From:* petsc-users <petsc-users-boun...@mcs.anl.gov> *On Behalf Of *Blauth,
> Sebastian
> *Sent:* Tuesday, July 2, 2024 11:47 AM
> *To:* Matthew Knepley <knep...@gmail.com>
> *Cc:* petsc-users@mcs.anl.gov
> *Subject:* Re: [petsc-users] Question regarding naming of fieldsplit
> splits
>
> Hi Matt,
>
> thanks fort he answer and clarification. Then I’ll work around this issue
> in python, where I set the options.
>
> Best,
> Sebastian
>
> --
> Dr. Sebastian Blauth
> Fraunhofer-Institut für
> Techno- und Wirtschaftsmathematik ITWM
> Abteilung Transportvorgänge
> Fraunhofer-Platz 1, 67663 Kaiserslautern
> Telefon: +49 631 31600-4968
> sebastian.bla...@itwm.fraunhofer.de
> https://urldefense.us/v3/__https://www.itwm.fraunhofer.de__;!!G_uCfscf7eWS!an6Idf-f7OiZlsU0N0Ftpr5mM5etD7GF_9ghya_ALFmQP_eL93oONwYYRLmLGz-0FSXHkB0bMsjj0e4-qdCV$
>  
>
> *From:* Matthew Knepley <knep...@gmail.com>
> *Sent:* Monday, July 1, 2024 4:30 PM
> *To:* Blauth, Sebastian <sebastian.bla...@itwm.fraunhofer.de>
> *Cc:* petsc-users@mcs.anl.gov
> *Subject:* Re: [petsc-users] Question regarding naming of fieldsplit
> splits
>
> On Mon, Jul 1, 2024 at 9:48 AM Blauth, Sebastian <
> sebastian.bla...@itwm.fraunhofer.de> wrote:
>
> Dear Matt,
>
> thanks a lot for your help. Unfortunately, for me these extra options do
> not have any effect, I still get the “u” and “p” fieldnames. Also, this
> would not help me to get rid of the “c” fieldname – on that level of the
> fieldsplit I am basically using your approach already, and still it does
> show up. The output of the -ksp_view is unchanged, so that I do not attach
> it here again. Maybe I misunderstood you?
>
>
> Oh, we make an exception for single fields, since we think you would want
> to use the name. I have to make an extra option to shut off naming.
>
>    Thanks,
>
>      Matt
>
>
> Thanks for the help and best regards,
> Sebastian
>
> --
> Dr. Sebastian Blauth
> Fraunhofer-Institut für
> Techno- und Wirtschaftsmathematik ITWM
> Abteilung Transportvorgänge
> Fraunhofer-Platz 1, 67663 Kaiserslautern
> Telefon: +49 631 31600-4968
> sebastian.bla...@itwm.fraunhofer.de
> https://urldefense.us/v3/__https://www.itwm.fraunhofer.de__;!!G_uCfscf7eWS!an6Idf-f7OiZlsU0N0Ftpr5mM5etD7GF_9ghya_ALFmQP_eL93oONwYYRLmLGz-0FSXHkB0bMsjj0e4-qdCV$
>  
>
> *From:* Matthew Knepley <knep...@gmail.com>
> *Sent:* Monday, July 1, 2024 2:27 PM
> *To:* Blauth, Sebastian <sebastian.bla...@itwm.fraunhofer.de>
> *Cc:* petsc-users@mcs.anl.gov
> *Subject:* Re: [petsc-users] Question regarding naming of fieldsplit
> splits
>
> On Fri, Jun 28, 2024 at 4:05 AM Blauth, Sebastian <
> sebastian.bla...@itwm.fraunhofer.de> wrote:
>
> Hello everyone,
>
> I have a question regarding the naming convention using PETSc’s
> PCFieldsplit. I have been following
> https://urldefense.us/v3/__https://lists.mcs.anl.gov/pipermail/petsc-users/2019-January/037262.html__;!!G_uCfscf7eWS!an6Idf-f7OiZlsU0N0Ftpr5mM5etD7GF_9ghya_ALFmQP_eL93oONwYYRLmLGz-0FSXHkB0bMsjj0Qyn5DYX$
>   to
> create a DMShell with FEniCS in order to customize PCFieldsplit for my
> application.
> I am using the following options, which work nicely for me:
>
> -ksp_type fgmres
> -pc_type fieldsplit
> -pc_fieldsplit_0_fields 0, 1
> -pc_fieldsplit_1_fields 2
> -pc_fieldsplit_type additive
> -fieldsplit_0_ksp_type fgmres
> -fieldsplit_0_pc_type fieldsplit
> -fieldsplit_0_pc_fieldsplit_type schur
> -fieldsplit_0_pc_fieldsplit_schur_fact_type full
> -fieldsplit_0_pc_fieldsplit_schur_precondition selfp
> -fieldsplit_0_fieldsplit_u_ksp_type preonly
> -fieldsplit_0_fieldsplit_u_pc_type lu
> -fieldsplit_0_fieldsplit_p_ksp_type cg
> -fieldsplit_0_fieldsplit_p_ksp_rtol 1e-14
> -fieldsplit_0_fieldsplit_p_ksp_atol 1e-30
> -fieldsplit_0_fieldsplit_p_pc_type icc
> -fieldsplit_0_ksp_rtol 1e-14
> -fieldsplit_0_ksp_atol 1e-30
> -fieldsplit_0_ksp_monitor_true_residual
> -fieldsplit_c_ksp_type preonly
> -fieldsplit_c_pc_type lu
> -ksp_view
>
>
> By default, we use the field names, but you can prevent this by specifying
> the fields by hand, so
>
> -fieldsplit_0_pc_fieldsplit_0_fields 0
> -fieldsplit_0_pc_fieldsplit_1_fields 1
>
> should remove the 'u' and 'p' fieldnames. It is somewhat hacky, but I
> think easier to remember than
> some extra option.
>
>   Thanks,
>
>      Matt
>
>
> Note that this is just an academic example (sorry for the low solver
> tolerances) to test the approach, consisting of a Stokes equation and some
> concentration equation (which is not even coupled to Stokes, just for
> testing).
> Completely analogous to
> https://urldefense.us/v3/__https://lists.mcs.anl.gov/pipermail/petsc-users/2019-January/037262.html__;!!G_uCfscf7eWS!an6Idf-f7OiZlsU0N0Ftpr5mM5etD7GF_9ghya_ALFmQP_eL93oONwYYRLmLGz-0FSXHkB0bMsjj0Qyn5DYX$
>  ,
> I translate my IS’s to a PETSc Section, which is then supplied to a DMShell
> and assigned to a KSP. I am not so familiar with the code or how / why this
> works, but it seems to do so perfectly. I name my sections with petsc4py
> using
>
> section.setFieldName(0, "u")
> section.setFieldName(1, "p")
> section.setFieldName(2, "c")
>
> However, this is also reflected in the way I can access the fieldsplit
> options from the command line. My question is: Is there any way of not
> using the FieldNames specified in python but use the index of the field as
> defined with “-pc_fieldsplit_0_fields 0, 1” and “-pc_fieldsplit_1_fields
> 2”, i.e., instead of the prefix “fieldsplit_0_fieldsplit_u” I want to write
> “fieldsplit_0_fieldsplit_0”, instead of “fieldsplit_0_fieldsplit_p” I want
> to use “fieldsplit_0_fieldsplit_1”, and instead of “fieldsplit_c” I want to
> use “fieldsplit_1”. Just changing the names of the fields to
>
> section.setFieldName(0, "0")
> section.setFieldName(1, "1")
> section.setFieldName(2, "2")
>
> does obviously not work as expected, as it works for velocity and
> pressure, but not for the concentration – the prefix there is then
> “fieldsplit_2” and not “fieldsplit_1”. In the docs, I have found
> https://urldefense.us/v3/__https://petsc.org/main/manualpages/PC/PCFieldSplitSetFields/__;!!G_uCfscf7eWS!an6Idf-f7OiZlsU0N0Ftpr5mM5etD7GF_9ghya_ALFmQP_eL93oONwYYRLmLGz-0FSXHkB0bMsjj0X9GdD2a$
>   which seems
> to suggest that the fieldname can potentially be supplied, but I don’t see
> how to do so from the command line. Also, for the sake of completeness, I
> attach the output of the solve with “-ksp_view” below.
>
> Thanks a lot in advance and best regards,
> Sebastian
>
>
> The output of ksp_view is the following:
> KSP Object: 1 MPI processes
>   type: fgmres
>     restart=30, using Classical (unmodified) Gram-Schmidt
> Orthogonalization with no iterative refinement
>     happy breakdown tolerance 1e-30
>   maximum iterations=10000, initial guess is zero
>   tolerances:  relative=1e-05, absolute=1e-11, divergence=10000.
>   right preconditioning
>   using UNPRECONDITIONED norm type for convergence test
> PC Object: 1 MPI processes
>   type: fieldsplit
>     FieldSplit with ADDITIVE composition: total splits = 2
>     Solver info for each split is in the following KSP objects:
>   Split number 0 Defined by IS
>   KSP Object: (fieldsplit_0_) 1 MPI processes
>     type: fgmres
>       restart=30, using Classical (unmodified) Gram-Schmidt
> Orthogonalization with no iterative refinement
>       happy breakdown tolerance 1e-30
>     maximum iterations=10000, initial guess is zero
>     tolerances:  relative=1e-14, absolute=1e-30, divergence=10000.
>     right preconditioning
>     using UNPRECONDITIONED norm type for convergence test
>   PC Object: (fieldsplit_0_) 1 MPI processes
>     type: fieldsplit
>       FieldSplit with Schur preconditioner, factorization FULL
>       Preconditioner for the Schur complement formed from Sp, an assembled
> approximation to S, which uses A00's diagonal's inverse
>       Split info:
>       Split number 0 Defined by IS
>       Split number 1 Defined by IS
>       KSP solver for A00 block
>         KSP Object: (fieldsplit_0_fieldsplit_u_) 1 MPI processes
>           type: preonly
>           maximum iterations=10000, initial guess is zero
>           tolerances:  relative=1e-05, absolute=1e-50, divergence=10000.
>           left preconditioning
>           using NONE norm type for convergence test
>         PC Object: (fieldsplit_0_fieldsplit_u_) 1 MPI processes
>           type: lu
>             out-of-place factorization
>             tolerance for zero pivot 2.22045e-14
>             matrix ordering: nd
>             factor fill ratio given 5., needed 3.92639
>               Factored matrix follows:
>                 Mat Object: 1 MPI processes
>                   type: seqaij
>                   rows=4290, cols=4290
>                   package used to perform factorization: petsc
>                   total: nonzeros=375944, allocated nonzeros=375944
>                     using I-node routines: found 2548 nodes, limit used is
> 5
>           linear system matrix = precond matrix:
>           Mat Object: (fieldsplit_0_fieldsplit_u_) 1 MPI processes
>             type: seqaij
>             rows=4290, cols=4290
>             total: nonzeros=95748, allocated nonzeros=95748
>             total number of mallocs used during MatSetValues calls=0
>               using I-node routines: found 3287 nodes, limit used is 5
>       KSP solver for S = A11 - A10 inv(A00) A01
>         KSP Object: (fieldsplit_0_fieldsplit_p_) 1 MPI processes
>           type: cg
>           maximum iterations=10000, initial guess is zero
>           tolerances:  relative=1e-14, absolute=1e-30, divergence=10000.
>           left preconditioning
>           using PRECONDITIONED norm type for convergence test
>         PC Object: (fieldsplit_0_fieldsplit_p_) 1 MPI processes
>           type: icc
>             out-of-place factorization
>             0 levels of fill
>             tolerance for zero pivot 2.22045e-14
>             using Manteuffel shift [POSITIVE_DEFINITE]
>             matrix ordering: natural
>             factor fill ratio given 1., needed 1.
>               Factored matrix follows:
>                 Mat Object: 1 MPI processes
>                   type: seqsbaij
>                   rows=561, cols=561
>                   package used to perform factorization: petsc
>                   total: nonzeros=5120, allocated nonzeros=5120
>                       block size is 1
>           linear system matrix followed by preconditioner matrix:
>           Mat Object: (fieldsplit_0_fieldsplit_p_) 1 MPI processes
>             type: schurcomplement
>             rows=561, cols=561
>               Schur complement A11 - A10 inv(A00) A01
>               A11
>                 Mat Object: (fieldsplit_0_fieldsplit_p_) 1 MPI processes
>                   type: seqaij
>                   rows=561, cols=561
>                   total: nonzeros=3729, allocated nonzeros=3729
>                   total number of mallocs used during MatSetValues calls=0
>                     not using I-node routines
>               A10
>                 Mat Object: 1 MPI processes
>                   type: seqaij
>                   rows=561, cols=4290
>                   total: nonzeros=19938, allocated nonzeros=19938
>                   total number of mallocs used during MatSetValues calls=0
>                     not using I-node routines
>               KSP of A00
>                 KSP Object: (fieldsplit_0_fieldsplit_u_) 1 MPI processes
>                   type: preonly
>                   maximum iterations=10000, initial guess is zero
>                   tolerances:  relative=1e-05, absolute=1e-50,
> divergence=10000.
>                   left preconditioning
>                   using NONE norm type for convergence test
>                 PC Object: (fieldsplit_0_fieldsplit_u_) 1 MPI processes
>                   type: lu
>                     out-of-place factorization
>                     tolerance for zero pivot 2.22045e-14
>                     matrix ordering: nd
>                     factor fill ratio given 5., needed 3.92639
>                       Factored matrix follows:
>                         Mat Object: 1 MPI processes
>                           type: seqaij
>                           rows=4290, cols=4290
>                           package used to perform factorization: petsc
>                           total: nonzeros=375944, allocated nonzeros=375944
>                             using I-node routines: found 2548 nodes, limit
> used is 5
>                   linear system matrix = precond matrix:
>                   Mat Object: (fieldsplit_0_fieldsplit_u_) 1 MPI processes
>                     type: seqaij
>                     rows=4290, cols=4290
>                     total: nonzeros=95748, allocated nonzeros=95748
>                     total number of mallocs used during MatSetValues
> calls=0
>                       using I-node routines: found 3287 nodes, limit used
> is 5
>               A01
>                 Mat Object: 1 MPI processes
>                   type: seqaij
>                   rows=4290, cols=561
>                   total: nonzeros=19938, allocated nonzeros=19938
>                   total number of mallocs used during MatSetValues calls=0
>                     using I-node routines: found 3287 nodes, limit used is
> 5
>           Mat Object: 1 MPI processes
>             type: seqaij
>             rows=561, cols=561
>             total: nonzeros=9679, allocated nonzeros=9679
>             total number of mallocs used during MatSetValues calls=0
>               not using I-node routines
>     linear system matrix = precond matrix:
>     Mat Object: (fieldsplit_0_) 1 MPI processes
>       type: seqaij
>       rows=4851, cols=4851
>       total: nonzeros=139353, allocated nonzeros=139353
>       total number of mallocs used during MatSetValues calls=0
>         using I-node routines: found 3830 nodes, limit used is 5
>   Split number 1 Defined by IS
>   KSP Object: (fieldsplit_c_) 1 MPI processes
>     type: preonly
>     maximum iterations=10000, initial guess is zero
>     tolerances:  relative=1e-05, absolute=1e-50, divergence=10000.
>     left preconditioning
>     using NONE norm type for convergence test
>   PC Object: (fieldsplit_c_) 1 MPI processes
>     type: lu
>       out-of-place factorization
>       tolerance for zero pivot 2.22045e-14
>       matrix ordering: nd
>       factor fill ratio given 5., needed 4.24323
>         Factored matrix follows:
>           Mat Object: 1 MPI processes
>             type: seqaij
>             rows=561, cols=561
>             package used to perform factorization: petsc
>             total: nonzeros=15823, allocated nonzeros=15823
>               not using I-node routines
>     linear system matrix = precond matrix:
>     Mat Object: (fieldsplit_c_) 1 MPI processes
>       type: seqaij
>       rows=561, cols=561
>       total: nonzeros=3729, allocated nonzeros=3729
>       total number of mallocs used during MatSetValues calls=0
>         not using I-node routines
>   linear system matrix = precond matrix:
>   Mat Object: 1 MPI processes
>     type: seqaij
>     rows=5412, cols=5412
>     total: nonzeros=190416, allocated nonzeros=190416
>     total number of mallocs used during MatSetValues calls=0
>       using I-node routines: found 3833 nodes, limit used is 5
>
> --
> Dr. Sebastian Blauth
> Fraunhofer-Institut für
> Techno- und Wirtschaftsmathematik ITWM
> Abteilung Transportvorgänge
> Fraunhofer-Platz 1, 67663 Kaiserslautern
> Telefon: +49 631 31600-4968
> sebastian.bla...@itwm.fraunhofer.de
> https://urldefense.us/v3/__https://www.itwm.fraunhofer.de__;!!G_uCfscf7eWS!an6Idf-f7OiZlsU0N0Ftpr5mM5etD7GF_9ghya_ALFmQP_eL93oONwYYRLmLGz-0FSXHkB0bMsjj0e4-qdCV$
>  
>
>
>
>
> --
> What most experimenters take for granted before they begin their
> experiments is infinitely more interesting than any results to which their
> experiments lead.
> -- Norbert Wiener
>
> https://urldefense.us/v3/__https://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!an6Idf-f7OiZlsU0N0Ftpr5mM5etD7GF_9ghya_ALFmQP_eL93oONwYYRLmLGz-0FSXHkB0bMsjj0dkG26YT$
>  
> <https://urldefense.us/v3/__http://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!an6Idf-f7OiZlsU0N0Ftpr5mM5etD7GF_9ghya_ALFmQP_eL93oONwYYRLmLGz-0FSXHkB0bMsjj0VN-barz$
>  >
>
>
>
> --
> What most experimenters take for granted before they begin their
> experiments is infinitely more interesting than any results to which their
> experiments lead.
> -- Norbert Wiener
>
> https://urldefense.us/v3/__https://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!an6Idf-f7OiZlsU0N0Ftpr5mM5etD7GF_9ghya_ALFmQP_eL93oONwYYRLmLGz-0FSXHkB0bMsjj0dkG26YT$
>  
> <https://urldefense.us/v3/__http://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!an6Idf-f7OiZlsU0N0Ftpr5mM5etD7GF_9ghya_ALFmQP_eL93oONwYYRLmLGz-0FSXHkB0bMsjj0VN-barz$
>  >
>
>
>

-- 
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which their
experiments lead.
-- Norbert Wiener

https://urldefense.us/v3/__https://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!an6Idf-f7OiZlsU0N0Ftpr5mM5etD7GF_9ghya_ALFmQP_eL93oONwYYRLmLGz-0FSXHkB0bMsjj0dkG26YT$
  
<https://urldefense.us/v3/__http://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!an6Idf-f7OiZlsU0N0Ftpr5mM5etD7GF_9ghya_ALFmQP_eL93oONwYYRLmLGz-0FSXHkB0bMsjj0VN-barz$
 >

Reply via email to