Zebo - A few points to augment Trevor's (correct) answer:
* I think I know what mean when you distinguish between "discretized region" and "continuum region", but be aware that FiPy does not solve continuum equations. Any FiPy mesh is a discretization in space to enable solution by the finite volume method of discretizing PDEs in space and time. * We provide convenience properties like mesh.x and mesh.y to give the illusion of continuous parameterization in space, but mesh.x and mesh.y are just discretized arrays of cell center coordinates. As long as you index a CellVariable with a boolean mask that is also a CellVariable (e.g. mesh.x > 2.5), then everything works fine, but some arbitrary list of x positions will not work because it is not aligned with the mesh of the CellVariable. * All FiPy CellVariable's are internally stored as an array of shape (dimension, number_of_cells). For scalar data, it's just a 1D array. interp2d returns an array of values so, as Trevor says, it needs to be reshaped. You'll want to do some tests on cases where you know the answer to make sure you're unravelling the data in the right way. - Jon On Sep 9, 2015, at 10:39 AM, Keller, Trevor <[email protected]> wrote: > Hello Zebo, > > I believe the problem here is that the setValue method requires a boolean > mask indicating where to set the values. For example, the typical usage in 1D > might set the value in every point of half the grid equal to one: > val.setValue(1, where=x>Npoints/2). > > So, to fix your bug, please add a second argument specifying in which mesh > points to apply the interpolated data. > I've created a more complete example here: > https://gist.github.com/tkphd/2f8ac66fe2f883fee352 > > In your case, since the interpolation is in 2D, you might need to "shape" the > boolean mask to match up to your mesh. > > Hope that helps, > Trevor > > > Trevor Keller, Ph.D. > Materials Science and Engineering Division > National Institute of Standards and Technology > 100 Bureau Dr. MS 8550; Gaithersburg, MD 20899 > Office: 223/A131 or (301) 975-2889 > > > > From: [email protected] <[email protected]> on behalf of Zebo LI > <[email protected]> > Sent: Tuesday, September 8, 2015 9:50 PM > To: FIPY > Subject: How to combine scipy.interpolate.interp2d with fipy variables > > Hi, > > I am now working on a 2D problem, in which I need to couple a discretized > region with a continuum region. The solution of the discretized region are > values at individual points (Irregularly distributed). Now we need to define > a fipy variable 'val'(continuous function), which matches the discretized > solution. For this, I use the interpolation function > scipy.interpolate.interp2d to generate a function 'f', which is based on the > linear interpolation of those points. But when I try to use 'val.setValue' to > set values for val, I got an error of "Invalid input data". The following is > this piece of code: > for i in range(Npoints): > xold[i] = Cl.item((i,0)) > yold[i] = Cl.item((i,1)) > zold[i] = np.log10(abs(CV.item(i))) ##Cl are the > coordinates, CV are the values, they are initially defined as matrices > f = scipy.interpolate.interp2d(xold, yold, zold, kind='linear') ##If > I print f(1.5,2,3)[0], it gives me a double data due to interpolation > val.setValue(function(X,Y)[0]) ##This one does not work. val is > the variable defined on certain mesh, X,Y =mesh.cellCenters > > I wonder that is there anyone meet the same type of problems, and know how to > solve it? > > best, > Zebo > _______________________________________________ > 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 ]
