Re: [petsc-users] GAMG failure

2023-03-28 Thread Mark Adams
On Tue, Mar 28, 2023 at 12:38 PM Blaise Bourdin  wrote:

>
>
> On Mar 27, 2023, at 9:11 PM, Mark Adams  wrote:
>
> Yes, the eigen estimates are converging slowly.
>
> BTW, have you tried hypre? It is a good solver (lots lots more woman years)
> These eigen estimates are conceptually simple, but they can lead to
> problems like this (hypre and an eigen estimate free smoother).
>
> I just moved from petsc 3.3 to main, so my experience with an old version
> of hyper has not been very convincing. Strangely enough, ML has always been
> the most efficient PC for me.
>

ML is a good solver.


> Maybe it’s time to revisit.
> That said, I would really like to get decent performances out of gamg. One
> day, I’d like to be able to account for the special structure of
> phase-field fracture in the construction of the coarse space.
>
>
> But try this (good to have options anyway):
>
> -pc_gamg_esteig_ksp_max_it 20
>
> Chevy will scale the estimate that we give by, I think, 5% by default.
> Maybe 10.
> You can set that with:
>
> -mg_levels_ksp_chebyshev_esteig 0,0.2,0,*1.05*
>
> 0.2 is the scaling of the high eigen estimate for the low eigen value in
> Chebyshev.
>
>
>
> Jed’s suggestion of using -pc_gamg_reuse_interpolation 0 worked.
>

OK, have to admit I am surprised.
But I guess with your fracture the matrix/physics/dynamics does change a lot


> I am testing your options at the moment.
>

There are a lot of options and it is cumbersome but they are finite and
good to know.
Glad its working,


>
> Thanks a lot,
>
> Blaise
>
> —
> Canada Research Chair in Mathematical and Computational Aspects of Solid
> Mechanics (Tier 1)
> Professor, Department of Mathematics & Statistics
> Hamilton Hall room 409A, McMaster University
> 1280 Main Street West, Hamilton, Ontario L8S 4K1, Canada
> https://www.math.mcmaster.ca/bourdin | +1 (905) 525 9140 ext. 27243
>
>


Re: [petsc-users] Using PETSc Testing System

2023-03-28 Thread Daniele Prada
Will do, thanks!

On Tue, Mar 28, 2023 at 7:28 PM Jed Brown  wrote:

> Great that you got it working. We would accept a merge request that made
> our infrastructure less PETSc-specific so long as it doesn't push more
> complexity on the end user. That would likely make it easier for you to
> pull updates in the future.
>
> Daniele Prada  writes:
>
> > Dear Matthew, dear Jacob,
> >
> > Thank you very much for your useful remarks. I managed to use the PETSc
> > Testing System by doing as follows:
> >
> > 1. Redefined TESTDIR when running make
> > 2. Used a project tree similar to that of PETSc. For examples, tests for
> > 'package1' are in $MYLIB/src/package1/tests/
> > 3. cp $PETSC_DIR/gmakefile.test $MYLIB/gmakefile.test
> >
> > Inside gmakefile.test:
> >
> > 4. Right AFTER "-include petscdir.mk" added "-include mylib.mk" to have
> > $MYLIB exported (note: this affects TESTSRCDIR)
> > 5. Redefined variable pkgs as "pkgs := package1"
> > 6. Introduced a few variables to make PETSC_COMPILE.c work:
> >
> > CFLAGS := -I$(MYLIB)/include
> > LDFLAGS = -L$(MYLIB)/lib
> > LDLIBS = -lmylib
> >
> > 7. Changed the call to gmakegentest.py as follows
> >
> > $(PYTHON) $(CONFIGDIR)/gmakegentest.py --petsc-dir=$(PETSC_DIR)
> > --petsc-arch=$(PETSC_ARCH) --testdir=$(TESTDIR) --srcdir=$(MYLIB)/src
> > --pkg-pkgs=$(pkgs)
> >
> > 8. Changed the rule $(testexe.c) as follows:
> >
> > $(call quiet,CLINKER) $(EXEFLAGS) $(LDFLAGS) -o $@ $^ $(PETSC_TEST_LIB)
> > $(LDLIBS)
> >
> > 9. Added the option --srcdir=$(TESTSRCDIR) and set --petsc-dir=$(MYLIB)
> > when calling query_tests.py, for example:
> >
> > TESTTARGETS := $(shell $(PYTHON) $(CONFIGDIR)/query_tests.py
> > --srcdir=$(TESTSRCDIR) --testdir=$(TESTDIR) --petsc-dir=$(MYLIB)
> > --petsc-arch=$(PETSC_ARCH) --searchin=$(searchin) 'name' '$(search)')
> >
> >
> >
> > What do you think?
> >
> > Best,
> > Daniele
> >
> > On Mon, Mar 27, 2023 at 4:38 PM Matthew Knepley 
> wrote:
> >
> >> On Mon, Mar 27, 2023 at 10:19 AM Jacob Faibussowitsch <
> jacob@gmail.com>
> >> wrote:
> >>
> >>> Our testing framework was pretty much tailor-made for the PETSc src
> tree
> >>> and as such has many hard-coded paths and decisions. I’m going to go
> out on
> >>> a limb and say you probably won’t get this to work...
> >>>
> >>
> >> I think we can help you get this to work. I have wanted to generalize
> the
> >> test framework for a long time. Everything is build by
> >>
> >>   confg/gmakegentest.py
> >>
> >> and I think we can get away with just changing paths here and everything
> >> will work.
> >>
> >>   Thanks!
> >>
> >>  Matt
> >>
> >>
> >>> That being said, one of the “base” paths that the testing harness uses
> to
> >>> initially find tests is the `TESTSRCDIR` variable in
> >>> `${PETSC_DIR}/gmakefile.test`. It is currently defined as
> >>> ```
> >>> # TESTSRCDIR is always relative to gmakefile.test
> >>> #  This must be before includes
> >>> mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
> >>> TESTSRCDIR := $(dir $(mkfile_path))src
> >>> ```
> >>> You should start by changing this to
> >>> ```
> >>> # TESTSRCDIR is always relative to gmakefile.test
> >>> #  This must be before includes
> >>> mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
> >>> TESTSRCDIR ?= $(dir $(mkfile_path))src
> >>> ```
> >>> That way you could run your tests via
> >>> ```
> >>> $ make test TESTSRCDIR=/path/to/your/src/dir
> >>> ```
> >>> I am sure there are many other modifications you will need to make.
> >>>
> >>> Best regards,
> >>>
> >>> Jacob Faibussowitsch
> >>> (Jacob Fai - booss - oh - vitch)
> >>>
> >>> > On Mar 27, 2023, at 06:14, Daniele Prada 
> >>> wrote:
> >>> >
> >>> > Hello everyone,
> >>> >
> >>> > I would like to use the PETSc Testing System for testing a package
> that
> >>> I am developing.
> >>> >
> >>> > I have read the PETSc developer documentation and have written some
> >>> tests using the PETSc Test Description Language. I am going through the
> >>> files in ${PETSC_DIR}/config but I am not able to make the testing
> system
> >>> look into the directory tree of my project.
> >>> >
> >>> > Any suggestions?
> >>> >
> >>> > Thanks in advance
> >>> > Daniele
> >>>
> >>>
> >>
> >> --
> >> 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://www.cse.buffalo.edu/~knepley/
> >> 
> >>
>


Re: [petsc-users] Petsc DMLabel Fortran Stub request

2023-03-28 Thread Nicholas Arnold-Medabalimi
Hi Matthew

Thanks for checking in on this. Fortunately, I was able to get the behavior
I needed through alternate means so I probably wouldn't investigate doing
this further.

Sincerely
Nicholas

On Mon, Mar 27, 2023 at 8:49 PM Matthew Knepley  wrote:

> On Fri, Jan 6, 2023 at 10:03 AM Nicholas Arnold-Medabalimi <
> narno...@umich.edu> wrote:
>
>> Hi Petsc Users
>>
>
> I apologize. I found this email today and it looks like no one answered.
>
>
>> I am trying to use the sequence of
>> call DMLabelPropagateBegin(synchLabel,sf,ierr)
>> call
>> DMLabelPropagatePush(synchLabel,sf,PETSC_NULL_OPTIONS,PETSC_NULL_INTEGER,ierr)
>> call DMLabelPropagateEnd(synchLabel,sf, ierr)
>> in fortran.
>>
>> I apologize if I messed something up, it appears as if the
>> DMLabelPropagatePush command doesn't have an appropriate Fortran interface
>> as I get an undefined reference when it is called.
>>
>
> Yes, it takes a function pointer, and using function pointers with Fortran
> is not easy, although it can be done. It might be better to create a C
> function with some default marking and then wrap that. What do you want to
> do?
>
>   Thanks,
>
>  Matt
>
>
>> I would appreciate any assistance.
>>
>> As a side note in practice, what is the proper Fortran NULL pointer to
>> use for void arguments? I used an integer one temporarily to get to the
>> undefined reference error but I assume it doesn't matter?
>>
>>
>> Sincerely
>> Nicholas
>>
>> --
>> Nicholas Arnold-Medabalimi
>>
>> Ph.D. Candidate
>> Computational Aeroscience Lab
>> University of Michigan
>>
>
>
> --
> 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://www.cse.buffalo.edu/~knepley/
> 
>


-- 
Nicholas Arnold-Medabalimi

Ph.D. Candidate
Computational Aeroscience Lab
University of Michigan


Re: [petsc-users] Restarting a SLEPC run to refine an eigenvector

2023-03-28 Thread Jose E. Roman
What do you mean that EPSSetInitialSubspace() does not work? Doesn't it improve 
convergence with respect to not using it?

Is your smallest eigenvalue positive? And do you have many eigenvalues close to 
the smallest one?

Jose


> El 28 mar 2023, a las 17:32, LUTSKO James via petsc-users 
>  escribió:
> 
> Hello,
>  I am a complete newbe so sorry if this is answered elsewhere or ill-posed 
> but .. I am trying to get the smallest eigenvector of a  large matrix. Since 
> the calculations are very long, I would like to be able to restart my code if 
> I find that the "converged" eigenvector is not good enough without having to 
> start from scratch. I am currently using the options 
> 
> -eps_type jd  -eps_monitor -eps_smallest_real -eps_conv_abs -eps_tol 1e-8 
> -st_ksp_type gmres -st_pc_type jacobi -st_ksp_max_it 40
> 
> Is there any way to do this? I have tried using EPSSetInitialSubspace with 
> the stored eigenvector but this does not seem to work. 
> 
> thanks 
> jim
> 
> % James F. Lutsko, CNLPCS, Universite Libre de Bruxelles,
> % Campus Plaine -- CP231  B-1050 Bruxelles, Belgium
> % tel: +32-2-650-5997   email: jlut...@ulb.ac.be
> % fax: +32-2-650-5767



Re: [petsc-users] Using PETSc Testing System

2023-03-28 Thread Jed Brown
Great that you got it working. We would accept a merge request that made our 
infrastructure less PETSc-specific so long as it doesn't push more complexity 
on the end user. That would likely make it easier for you to pull updates in 
the future. 

Daniele Prada  writes:

> Dear Matthew, dear Jacob,
>
> Thank you very much for your useful remarks. I managed to use the PETSc
> Testing System by doing as follows:
>
> 1. Redefined TESTDIR when running make
> 2. Used a project tree similar to that of PETSc. For examples, tests for
> 'package1' are in $MYLIB/src/package1/tests/
> 3. cp $PETSC_DIR/gmakefile.test $MYLIB/gmakefile.test
>
> Inside gmakefile.test:
>
> 4. Right AFTER "-include petscdir.mk" added "-include mylib.mk" to have
> $MYLIB exported (note: this affects TESTSRCDIR)
> 5. Redefined variable pkgs as "pkgs := package1"
> 6. Introduced a few variables to make PETSC_COMPILE.c work:
>
> CFLAGS := -I$(MYLIB)/include
> LDFLAGS = -L$(MYLIB)/lib
> LDLIBS = -lmylib
>
> 7. Changed the call to gmakegentest.py as follows
>
> $(PYTHON) $(CONFIGDIR)/gmakegentest.py --petsc-dir=$(PETSC_DIR)
> --petsc-arch=$(PETSC_ARCH) --testdir=$(TESTDIR) --srcdir=$(MYLIB)/src
> --pkg-pkgs=$(pkgs)
>
> 8. Changed the rule $(testexe.c) as follows:
>
> $(call quiet,CLINKER) $(EXEFLAGS) $(LDFLAGS) -o $@ $^ $(PETSC_TEST_LIB)
> $(LDLIBS)
>
> 9. Added the option --srcdir=$(TESTSRCDIR) and set --petsc-dir=$(MYLIB)
> when calling query_tests.py, for example:
>
> TESTTARGETS := $(shell $(PYTHON) $(CONFIGDIR)/query_tests.py
> --srcdir=$(TESTSRCDIR) --testdir=$(TESTDIR) --petsc-dir=$(MYLIB)
> --petsc-arch=$(PETSC_ARCH) --searchin=$(searchin) 'name' '$(search)')
>
>
>
> What do you think?
>
> Best,
> Daniele
>
> On Mon, Mar 27, 2023 at 4:38 PM Matthew Knepley  wrote:
>
>> On Mon, Mar 27, 2023 at 10:19 AM Jacob Faibussowitsch 
>> wrote:
>>
>>> Our testing framework was pretty much tailor-made for the PETSc src tree
>>> and as such has many hard-coded paths and decisions. I’m going to go out on
>>> a limb and say you probably won’t get this to work...
>>>
>>
>> I think we can help you get this to work. I have wanted to generalize the
>> test framework for a long time. Everything is build by
>>
>>   confg/gmakegentest.py
>>
>> and I think we can get away with just changing paths here and everything
>> will work.
>>
>>   Thanks!
>>
>>  Matt
>>
>>
>>> That being said, one of the “base” paths that the testing harness uses to
>>> initially find tests is the `TESTSRCDIR` variable in
>>> `${PETSC_DIR}/gmakefile.test`. It is currently defined as
>>> ```
>>> # TESTSRCDIR is always relative to gmakefile.test
>>> #  This must be before includes
>>> mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
>>> TESTSRCDIR := $(dir $(mkfile_path))src
>>> ```
>>> You should start by changing this to
>>> ```
>>> # TESTSRCDIR is always relative to gmakefile.test
>>> #  This must be before includes
>>> mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
>>> TESTSRCDIR ?= $(dir $(mkfile_path))src
>>> ```
>>> That way you could run your tests via
>>> ```
>>> $ make test TESTSRCDIR=/path/to/your/src/dir
>>> ```
>>> I am sure there are many other modifications you will need to make.
>>>
>>> Best regards,
>>>
>>> Jacob Faibussowitsch
>>> (Jacob Fai - booss - oh - vitch)
>>>
>>> > On Mar 27, 2023, at 06:14, Daniele Prada 
>>> wrote:
>>> >
>>> > Hello everyone,
>>> >
>>> > I would like to use the PETSc Testing System for testing a package that
>>> I am developing.
>>> >
>>> > I have read the PETSc developer documentation and have written some
>>> tests using the PETSc Test Description Language. I am going through the
>>> files in ${PETSC_DIR}/config but I am not able to make the testing system
>>> look into the directory tree of my project.
>>> >
>>> > Any suggestions?
>>> >
>>> > Thanks in advance
>>> > Daniele
>>>
>>>
>>
>> --
>> 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://www.cse.buffalo.edu/~knepley/
>> 
>>


Re: [petsc-users] GAMG failure

2023-03-28 Thread Jed Brown
This suite has been good for my solid mechanics solvers. (It's written here as 
a coarse grid solver because we do matrix-free p-MG first, but you can use it 
directly.)

https://github.com/hypre-space/hypre/issues/601#issuecomment-1069426997

Blaise Bourdin  writes:

>  On Mar 27, 2023, at 9:11 PM, Mark Adams  wrote:
>
>  Yes, the eigen estimates are converging slowly. 
>
>  BTW, have you tried hypre? It is a good solver (lots lots more woman years)
>  These eigen estimates are conceptually simple, but they can lead to problems 
> like this (hypre and an eigen estimate free
>  smoother).
>
> I just moved from petsc 3.3 to main, so my experience with an old version of 
> hyper has not been very convincing. Strangely
> enough, ML has always been the most efficient PC for me. Maybe it’s time to 
> revisit.
> That said, I would really like to get decent performances out of gamg. One 
> day, I’d like to be able to account for the special structure
> of phase-field fracture in the construction of the coarse space.
>
>  But try this (good to have options anyway):
>
>  -pc_gamg_esteig_ksp_max_it 20
>
>  Chevy will scale the estimate that we give by, I think, 5% by default. Maybe 
> 10.
>  You can set that with:
>
>  -mg_levels_ksp_chebyshev_esteig 0,0.2,0,1.05
>
>  0.2 is the scaling of the high eigen estimate for the low eigen value in 
> Chebyshev.
>
> Jed’s suggestion of using -pc_gamg_reuse_interpolation 0 worked. I am testing 
> your options at the moment.
>
> Thanks a lot,
>
> Blaise
>
> — 
> Canada Research Chair in Mathematical and Computational Aspects of Solid 
> Mechanics (Tier 1)
> Professor, Department of Mathematics & Statistics
> Hamilton Hall room 409A, McMaster University
> 1280 Main Street West, Hamilton, Ontario L8S 4K1, Canada 
> https://www.math.mcmaster.ca/bourdin | +1 (905) 525 9140 ext. 27243


Re: [petsc-users] GAMG failure

2023-03-28 Thread Blaise Bourdin






On Mar 27, 2023, at 9:11 PM, Mark Adams  wrote:


Yes, the eigen estimates are converging slowly.


BTW, have you tried hypre? It is a good solver (lots lots more woman years)
These eigen estimates are conceptually simple, but they can lead to problems like this (hypre and an eigen estimate free smoother).



I just moved from petsc 3.3 to main, so my experience with an old version of hyper has not been very convincing. Strangely enough, ML has always been the most efficient PC for me. Maybe it’s time to revisit.
That said, I would really like to get decent performances out of gamg. One day, I’d like to be able to account for the special structure of phase-field fracture in the construction of the coarse space.






But try this (good to have options anyway):


-pc_gamg_esteig_ksp_max_it 20



Chevy will scale the estimate that we give by, I think, 5% by default. Maybe 10.
You can set that with:


-mg_levels_ksp_chebyshev_esteig 0,0.2,0,1.05



0.2 is the scaling of the high eigen estimate for the low eigen value in Chebyshev.







Jed’s suggestion of using -pc_gamg_reuse_interpolation 0 worked. I am testing your options at the moment.


Thanks a lot,


Blaise


— 
















Canada Research Chair in Mathematical and Computational Aspects of Solid Mechanics (Tier 1)
Professor, Department of Mathematics & Statistics
Hamilton Hall room 409A, McMaster University
1280 Main Street West, Hamilton, Ontario L8S 4K1, Canada 
https://www.math.mcmaster.ca/bourdin | +1 (905) 525 9140 ext. 27243





















[petsc-users] Restarting a SLEPC run to refine an eigenvector

2023-03-28 Thread LUTSKO James via petsc-users
Hello,
 I am a complete newbe so sorry if this is answered elsewhere or ill-posed but 
.. I am trying to get the smallest eigenvector of a  large matrix. Since the 
calculations are very long, I would like to be able to restart my code if I 
find that the "converged" eigenvector is not good enough without having to 
start from scratch. I am currently using the options

-eps_type jd  -eps_monitor -eps_smallest_real -eps_conv_abs -eps_tol 1e-8 
-st_ksp_type gmres -st_pc_type jacobi -st_ksp_max_it 40

Is there any way to do this? I have tried using EPSSetInitialSubspace with the 
stored eigenvector but this does not seem to work.

thanks
jim

% James F. Lutsko, CNLPCS, Universite Libre de Bruxelles,
% Campus Plaine -- CP231  B-1050 Bruxelles, Belgium
% tel: +32-2-650-5997   email: jlut...@ulb.ac.be
% fax: +32-2-650-5767


Re: [petsc-users] Using PETSc Testing System

2023-03-28 Thread Daniele Prada
Dear Matthew, dear Jacob,

Thank you very much for your useful remarks. I managed to use the PETSc
Testing System by doing as follows:

1. Redefined TESTDIR when running make
2. Used a project tree similar to that of PETSc. For examples, tests for
'package1' are in $MYLIB/src/package1/tests/
3. cp $PETSC_DIR/gmakefile.test $MYLIB/gmakefile.test

Inside gmakefile.test:

4. Right AFTER "-include petscdir.mk" added "-include mylib.mk" to have
$MYLIB exported (note: this affects TESTSRCDIR)
5. Redefined variable pkgs as "pkgs := package1"
6. Introduced a few variables to make PETSC_COMPILE.c work:

CFLAGS := -I$(MYLIB)/include
LDFLAGS = -L$(MYLIB)/lib
LDLIBS = -lmylib

7. Changed the call to gmakegentest.py as follows

$(PYTHON) $(CONFIGDIR)/gmakegentest.py --petsc-dir=$(PETSC_DIR)
--petsc-arch=$(PETSC_ARCH) --testdir=$(TESTDIR) --srcdir=$(MYLIB)/src
--pkg-pkgs=$(pkgs)

8. Changed the rule $(testexe.c) as follows:

$(call quiet,CLINKER) $(EXEFLAGS) $(LDFLAGS) -o $@ $^ $(PETSC_TEST_LIB)
$(LDLIBS)

9. Added the option --srcdir=$(TESTSRCDIR) and set --petsc-dir=$(MYLIB)
when calling query_tests.py, for example:

TESTTARGETS := $(shell $(PYTHON) $(CONFIGDIR)/query_tests.py
--srcdir=$(TESTSRCDIR) --testdir=$(TESTDIR) --petsc-dir=$(MYLIB)
--petsc-arch=$(PETSC_ARCH) --searchin=$(searchin) 'name' '$(search)')



What do you think?

Best,
Daniele

On Mon, Mar 27, 2023 at 4:38 PM Matthew Knepley  wrote:

> On Mon, Mar 27, 2023 at 10:19 AM Jacob Faibussowitsch 
> wrote:
>
>> Our testing framework was pretty much tailor-made for the PETSc src tree
>> and as such has many hard-coded paths and decisions. I’m going to go out on
>> a limb and say you probably won’t get this to work...
>>
>
> I think we can help you get this to work. I have wanted to generalize the
> test framework for a long time. Everything is build by
>
>   confg/gmakegentest.py
>
> and I think we can get away with just changing paths here and everything
> will work.
>
>   Thanks!
>
>  Matt
>
>
>> That being said, one of the “base” paths that the testing harness uses to
>> initially find tests is the `TESTSRCDIR` variable in
>> `${PETSC_DIR}/gmakefile.test`. It is currently defined as
>> ```
>> # TESTSRCDIR is always relative to gmakefile.test
>> #  This must be before includes
>> mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
>> TESTSRCDIR := $(dir $(mkfile_path))src
>> ```
>> You should start by changing this to
>> ```
>> # TESTSRCDIR is always relative to gmakefile.test
>> #  This must be before includes
>> mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
>> TESTSRCDIR ?= $(dir $(mkfile_path))src
>> ```
>> That way you could run your tests via
>> ```
>> $ make test TESTSRCDIR=/path/to/your/src/dir
>> ```
>> I am sure there are many other modifications you will need to make.
>>
>> Best regards,
>>
>> Jacob Faibussowitsch
>> (Jacob Fai - booss - oh - vitch)
>>
>> > On Mar 27, 2023, at 06:14, Daniele Prada 
>> wrote:
>> >
>> > Hello everyone,
>> >
>> > I would like to use the PETSc Testing System for testing a package that
>> I am developing.
>> >
>> > I have read the PETSc developer documentation and have written some
>> tests using the PETSc Test Description Language. I am going through the
>> files in ${PETSC_DIR}/config but I am not able to make the testing system
>> look into the directory tree of my project.
>> >
>> > Any suggestions?
>> >
>> > Thanks in advance
>> > Daniele
>>
>>
>
> --
> 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://www.cse.buffalo.edu/~knepley/
> 
>