I tried a few solvers for this 1D diffusion problem and it does indeed appear that pySparse is faster than the rest. Sadly, faster doesn’t equate to fast … about 4 seconds for a 2000 grid, 440 time steps nonlinear diffusion process using a single sweep. For the second part, which opens the left boundary and forces it to zero, it takes another 9.5 seconds when choosing 3 sweeps. And that’s on a fast computer.
Thanks again for pointing out the use of different solvers. Carsten _____________________________________Dipl.-Phys. Carsten Langrock, Ph.D. Senior Research Scientist Edward L. Ginzton Laboratory, Rm. 202 Stanford University 348 Via Pueblo Mall 94305 Stanford, CA Tel. (650) 723-0464 Fax (650) 723-2666 Ginzton Lab Shipping Address: James and Anna Marie Spilker Engineering and Applied Sciences Building 04-040 348 Via Pueblo Mall 94305 Stanford, CA _____________________________________ > On Jul 24, 2018, at 6:11 AM, Guyer, Jonathan E. Dr. (Fed) > <[email protected]> wrote: > > > FiPy still does not support remeshing. > > > As Dario said, choice of solver can make a big difference. I've not used > PyAMG much, but PySparse is dramatically faster than SciPy. PyTrilinos is > slower than PySparse, but enables you to solve in parallel. > > > I've also found that 2D problems solve much better than the 1D performance > would lead you to believe. There's just a lot of overhead in setting up the > problem and the Python communication with the lower-level libraries. >> >> >> On Jul 23, 2018, at 6:44 PM, Carsten Langrock <[email protected]> wrote: >> >> >> Hi, >> >> >> Thanks for the help with getting FiPy running under Linux! I am trying to >> re-create a 1D nonlinear diffusion problem for which we have C++ code that >> uses the implicit Thomas algorithm based on >> >> >> J. Weickert, B. Romerny, M. Viergever, "Efficient and Reliable Schemes >> for Nonlinear Diffusion Filtering”, IEEE transactions on Image Processing, >> vol.7, N03, page 398, March 1998 >> >> >> I have been able to get results in FiPy that match this code very closely >> which was a great start. Our C++ code uses a fixed number of spatial points >> and a fixed time step, but re-meshes space to most efficiently use the size >> of the array; it increases the spatial step size by 2 whenever the >> concentration at a particular point reaches a set threshold. I tried >> implementing this in FiPy as well, but haven’t had much luck so far. I saw >> an old mailing-list entry from 2011 where a user was told that FiPy wasn’t >> meant to do remeshing. Is that still the case? >> >> >> I’d imagine one would somehow need to update the Grid1D object with the new >> ‘dx’, but since the CellVariable that holds the solution was initialized >> with that mesh object, I am not sure that such a change would propagate in a >> sensible fashion. I think I know how to map the value of the CellVariable to >> account for the change in ‘dx’ by >> >> >> array_size = 2000 >> phi.value = numpy.concatenate((phi.value[1:array_size/2:2], >> numpy.zeros(1500))) >> >> >> for the case when the initial variable holds 2000 spatial points. Maybe >> there’s a more elegant way, but I think this works in principle. >> >> >> Another question would be execution speed. Right now, even when not plotting >> the intermediate solutions, it takes many seconds on a very powerful >> computer to run a simple diffusion problem. I am probably doing something >> really wrong. I wasn’t expecting the code to perform as well as the C++ >> code, but I had hoped to come within an order of magnitude. Are there ways >> to optimize the performance? Maybe select a particularly clever solver? If >> someone could point me into the right direction that’d be great. In the end, >> I would like to expand the code into 2D, but given the poor 1D performance, >> I don’t think that this would be feasible at this point. >> >> >> Thanks, >> Carsten >> >> >> _____________________________________ >> Dipl.-Phys. Carsten Langrock, Ph.D. >> >> >> Senior Research Scientist >> Edward L. Ginzton Laboratory, Rm. 202 >> Stanford University >> >> >> 348 Via Pueblo Mall >> 94305 Stanford, CA >> >> >> Tel. (650) 723-0464 >> Fax (650) 723-2666 >> >> >> Ginzton Lab Shipping Address: >> James and Anna Marie Spilker Engineering and Applied Sciences Building >> 04-040 >> 348 Via Pueblo Mall >> 94305 Stanford, CA >> _____________________________________ >> _______________________________________________ >> fipy mailing list >> [email protected] >> http://www.ctcms.nist.gov/fipy >> [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ] >> > > > > > > > > _______________________________________________ > fipy mailing list > [email protected] > http://www.ctcms.nist.gov/fipy > [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ] >
_______________________________________________ fipy mailing list [email protected] http://www.ctcms.nist.gov/fipy [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ]
