Hello,
Short story: I am posting because before I tried this, I was unable to find on this mailing list a clear statement/warning that such an interpolation can run slow (eat up computer time). Is there a faster way to interpolate? Long story: I thought of an adaptive meshing scheme for examples.phase.anisotropy after reading: Ferreira, Alexandre Furtado, Leonardo de Olivé Ferreira, and Abner da Costa Assis. “Numerical Simulation of the Solidification of Pure Melt by a Phase-Field Model Using an Adaptive Computation Domain.” *Journal of the Brazilian Society of Mechanical Sciences and Engineering* 33, no. 2 (June 2011): 125–30. https://doi.org/10.1590/S1678-58782011000200002. Their adaptive meshing scheme is quite simple and the paper is short. They do not interpolate, because they are writing their own code from the ground up. But in FiPy, it seems necessary to interpolate a solution from an old mesh to a new mesh after remeshing. I wrote a script and it runs for tiny problems, but seems useless because the interpolation in remeshing takes way too long (which defeats the purpose of ~Ferreira et al 2011 adaptive meshing), with interpolation time exploding as mesh cell count increases. I didn’t record the cell count exactly, but let’s say at ~5E5 cells, after 3.5 hours in a single interpolation, I gave up and hit ctrl-c. 2500 cells took less than 2 seconds, 2E4 cells 100 seconds, 6E4 cells 900 seconds. For 5E5 cells, my 4 core 2013 desktop PC shows multiple cores in use, but most cores at 50% load; using about 1/3 of the 8 GB RAM. Interpolation means transferring a FiPy solution from a first unstructured mesh of triangles to a second unstructured mesh of triangles (2D): newPhase=CellVariable(mesh=newMesh, value=oldPhase(newMesh.cellCenters,order=1), hasOld=True) new_dT=CellVariable(mesh=newMesh, value=old_dT(newMesh.cellCenters,order=1), hasOld=True) Mesh 2 always has more cells than mesh 1. Eventually mesh 2 is the mesh in examples.phase.anisotropy. Does anybody know a way to speed this interpolation up, within FiPy? I don’t believe I can use Grid2D meshes because my final domain of interest is not rectangular (examples.phase.anisotropy is just a beginner problem to play with). The meshes are unstructured sets of triangular cells and are created using gmsh via pygmsh/meshio. Mesh density varies with x,y (nonuniform meshes). Google seemed to lead me to various interpolation tools, but I do not see a way to take the data outside of FiPy to do the interpolation and then bring the data back into FiPy. I looked at the FiPy CellVariable source code but it is beyond me to mess around with it. It looked like it might run fast since it seems to operate on only the nearest neighbors, but maybe it is slowed down by having to do one cell at a time? Thanks
_______________________________________________ fipy mailing list fipy@nist.gov http://www.ctcms.nist.gov/fipy [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ]