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
>>> 
>>> 
>>> 
>> 
>> 
>> 
> 
> 
> 


Reply via email to