It's a FV matrix. It's integrated over space. Space, in this case, is 1D. On Tue, May 11, 2010 at 3:41 PM, John Gamble <[email protected]> wrote: > > Hi again, > > When using the getMatrix() routine as Daniel suggested, I'm not sure exactly > what difference matrix fipy is pulling. As a simplified 1D example of a > particle in an infinite well: > > nx = 5 > dx = 1 > mesh = Grid1D(nx = nx, dx = dx) > psi = CellVariable(name='solution variable', mesh = mesh, value = 0.) > valueLeft = 0 > valueRight = 0 > BCs = (FixedValue(faces=mesh.getFacesRight(), value=valueRight),\ > FixedValue(faces=mesh.getFacesLeft(), value=valueLeft)) > eqn = -ImplicitDiffusionTerm(coeff=mass)==0 > eqn.cacheMatrix() > eqn.solve(var = psi, boundaryConditions=BCs) > pymat = eqn.getMatrix().matrix > > gives the correct sparse differencing matrix: > > 3.000000 -1.000000 -------- -------- -------- > -1.000000 2.000000 -1.000000 -------- -------- > -------- -1.000000 2.000000 -1.000000 -------- > -------- -------- -1.000000 2.000000 -1.000000 > -------- -------- -------- -1.000000 3.000000 > > However, if I turn the step size to dx=0.1, I get: > > 30.00000 -10.00000 -------- -------- -------- > -10.00000 20.00000 -10.00000 -------- -------- > -------- -10.00000 20.00000 -10.00000 -------- > -------- -------- -10.00000 20.00000 -10.00000 > -------- -------- -------- -10.00000 30.00000 > > The actual difference matrix should have a factor of (1/dx^2), not (1/dx) in > front of it, which results in eigenvalues that have to be rescaled. Of > course, the problem is easy to fix, but I would love to know where the factor > of 1/dx is going. > > Many thanks, > John > > On May 3, 2010, at 2:59 PM, John Gamble wrote: > >> >> Thanks, Daniel. I'll give that a try! >> >> On Mon, 2010-05-03 at 11:03 -0400, Daniel Wheeler wrote: >>> Hi John, You'll need to interface with pysparse directly. Using >>> >>> <http://pysparse.sourceforge.net/jdsym.html#eigenvalue-solver> >>> >>> You can get the pysparse matrix for you problem by doing >>> >>> eqn.cacheMatrix() >>> eqn.solve(...) >>> pysparseMatrix = eqn.getMatrix().matrix >>> >>> You'll have to figure how to pass it to the jdsym module. I am not >>> sure how to do that. Hope this helps. Cheers. >>> >>> On Sun, May 2, 2010 at 11:31 PM, John Gamble <[email protected]> wrote: >>>> >>>> Dear all, >>>> >>>> I am attempting to use fipy to solve a coupled system consisting of the >>>> Poisson and Schroedinger equations. To solve the Schroedinger equation, >>>> I need to solve an eigenvalue problem to find allowed energies. Is there >>>> a way to tell fipy to search for the required eigenvalues? >>>> >>>> Many thanks, >>>> John Gamble >>>> >>>> >>>> >>> >>> >>> >> >> >> > > >
-- Daniel Wheeler
