<div dir="ltr"><div dir="ltr">On Tue, Sep 1, 2020 at 1:16 AM Smit Thijs <<a href="mailto:thijs.smit@hest.ethz.ch">thijs.smit@hest.ethz.ch</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 lang="DE-CH">
<div class="gmail-m_6807358878800402373WordSection1">
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Hi Matt,<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Thanks for your replay.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">I am working with a structured grid and in this case the content of the vector to be mapped does not overlap between processes. My understanding
(although I am a beginner with PETSc) is that I don’t have to use IS in that case?<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif"> ierr = DMCreateGlobalVector(da_elem, &xPhys);<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif">
</span><span lang="EN-GB" style="font-size:11pt;font-family:Calibri,sans-serif">CHKERRQ(ierr);<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Is there a way to solve this problem without using IS?</span></p></div></div></blockquote><div><br></div><div>What I say below is that you cannot index a C array with a real number. You have to do it with an integer. A PETSc IS is a list of integers, which is why I suggested that.</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 lang="DE-CH"><div class="gmail-m_6807358878800402373WordSection1">
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Best, Thijs<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB" style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif">From:</span></b><span lang="EN-US" style="font-size:11pt;font-family:Calibri,sans-serif"> Matthew Knepley <<a href="mailto:knepley@gmail.com" target="_blank">knepley@gmail.com</a>>
<br>
<b>Sent:</b> 21 August 2020 18:20<br>
<b>To:</b> Smit Thijs <<a href="mailto:thijs.smit@hest.ethz.ch" target="_blank">thijs.smit@hest.ethz.ch</a>><br>
<b>Cc:</b> <a href="mailto:petsc-users@mcs.anl.gov" target="_blank">petsc-users@mcs.anl.gov</a><br>
<b>Subject:</b> Re: [petsc-users] error: invalid types ‘PetscScalar* {aka double*}[PetscScalar {aka double}]’ for array subscript<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p>
<div>
<div>
<p class="MsoNormal">On Fri, Aug 21, 2020 at 11:49 AM Smit Thijs <<a href="mailto:thijs.smit@hest.ethz.ch" target="_blank">thijs.smit@hest.ethz.ch</a>> wrote:<u></u><u></u></p>
</div>
<div>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<p class="MsoNormal">Hi All,<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB">I am having the following error when I try to do a mapping with vectors and I can’t figure out how to solve this or what is going wrong:</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)">error: invalid types ‘PetscScalar* {aka double*}[PetscScalar {aka double}]’ for array subscript</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> xpMMA[i] = xp[indicesMap[i]];</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB">Herewith two code snippets:</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> // total number of elements on core</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)">
</span><span lang="IT" style="color:rgb(31,78,121)">PetscInt nel;</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="IT" style="color:rgb(31,78,121)"> VecGetLocalSize(xPhys, &nel);</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="IT" style="color:rgb(31,78,121)"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="IT" style="color:rgb(31,78,121)"> // create xPassive vector</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="IT" style="color:rgb(31,78,121)"> ierr = VecDuplicate(xPhys, &xPassive);</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="IT" style="color:rgb(31,78,121)"> CHKERRQ(ierr);</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="IT" style="color:rgb(31,78,121)"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="IT" style="color:rgb(31,78,121)">
</span><span lang="EN-GB" style="color:rgb(31,78,121)">// create mapping vector</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> ierr = VecDuplicate(xPhys, &indicator);</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> CHKERRQ(ierr);</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> // index set for xPassive and indicator</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> PetscScalar *xpPassive, *xpIndicator;</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> ierr = VecGetArray(xPassive, &xpPassive);</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> CHKERRQ(ierr);</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> ierr = VecGetArray(indicator, &xpIndicator);</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> CHKERRQ(ierr);</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> // counters for total and active elements on this processor</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> PetscInt tcount = 0; // total number of elements</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> PetscInt acount = 0; // number of active elements</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> PetscInt scount = 0; // number of solid elements</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> PetscInt rcount = 0; // number of rigid element</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> // loop over all elements and update xPassive from wrapper data</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> // count number of active elements, acount</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> // set indicator vector</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> for (PetscInt el = 0; el < nel; el++) {</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> if (data.xPassive_w.size() > 1) {</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> xpPassive[el] = data.xPassive_w[el];</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> tcount++;</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> if (xpPassive[el] < 0) {</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> xpIndicator[acount] =
</span><span lang="EN-GB">el;</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> acount++;</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> }
</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> } else {</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> xpPassive[el] = -1.0; // default, if no xPassive_w than all elements are active = -1.0</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> }</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> }</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> // printing</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> //PetscPrintf(PETSC_COMM_WORLD, "tcount: %i\n", tcount);</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> //PetscPrintf(PETSC_COMM_WORLD, "acount: %i\n", acount);</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> // Allreduce, get number of active elements over all processes</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> // tmp number of var on proces</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> // acount total number of var sumed</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> PetscInt tmp = acount;</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> acount = 0.0;</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> MPI_Allreduce(&tmp, &(acount), 1, MPIU_INT, MPI_SUM, PETSC_COMM_WORLD);</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(31,78,121)"> //// create xMMA vector</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(31,78,121)">VecCreateMPI(PETSC_COMM_WORLD, tmp, acount, &xMMA);</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(132,60,12)"> </span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> // Pointers to the vectors</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> PetscScalar *xp, *xpMMA, *indicesMap;</span><u></u><u></u></p>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Here you declare indicesMap as PetscScalar[]. You cannot index an array with this. I see that you<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">want to store these indices in a Vec. You should use an IS instead.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"> Thanks,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"> Matt<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> //PetscInt indicesMap;</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> ierr = VecGetArray(MMAVector, &xpMMA);</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> CHKERRQ(ierr);</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> ierr = VecGetArray(elementVector, &xp);</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> CHKERRQ(ierr);</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> // Index set</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> PetscInt nLocalVar;</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> VecGetLocalSize(xMMA, &nLocalVar);</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> </span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> // print number of var on pocessor</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> PetscPrintf(PETSC_COMM_WORLD, "Local var: %i\n", nLocalVar);</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> </span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> ierr = VecGetArray(indicator, </span>
<span lang="EN-GB">&indicesMap<span style="color:rgb(132,60,12)">);</span></span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> CHKERRQ(ierr);</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> </span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> // Run through the indices</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> for (PetscInt i = 0; i < nLocalVar; i++) {</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> if (updateDirection > 0) {</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> //PetscPrintf(PETSC_COMM_WORLD, "i: %i, xp[%i] = %f\n", i, indicesMap[i], xp[indicesMap[i]]);</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> xpMMA[i] = xp[indicesMap[i]];</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> } else if (updateDirection < 0) {</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> xp[indicesMap[i]] = xpMMA[i];</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> //PetscPrintf(PETSC_COMM_WORLD, "i: %i, xp[%i] = %f\n", i, indicesMap[i], xp[indicesMap[i]]);</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> }</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> }</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> // Restore</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> ierr = VecRestoreArray(elementVector, &xp);</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> CHKERRQ(ierr);</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> ierr = VecRestoreArray(MMAVector, &xpMMA);</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> CHKERRQ(ierr);</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> ierr = VecRestoreArray(indicator, &indicesMap);</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> CHKERRQ(ierr);</span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:9.75pt">
<span lang="EN-GB" style="color:rgb(132,60,12)"> PetscPrintf(PETSC_COMM_WORLD, "FINISHED UpdateVariables \n");</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(132,60,12)"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB">The error message says that the type with which I try to index is wrong, I think. But VecGetArray only excepts scalars. Furthermore, the el variable is an int,
but is seams like to turn out to be a scalar. Does anybody see how to proceed with this?
</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(36,41,46)">Best regards,</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(36,41,46)"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-GB" style="color:rgb(36,41,46)">Thijs Smit</span><u></u><u></u></p>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><br clear="all">
<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<p class="MsoNormal">-- <u></u><u></u></p>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<p class="MsoNormal">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<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote></div><br clear="all"><div><br></div>-- <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">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>