Thanks Jon!
You are correct, I just want to do this as a 2D calculation in an R-Z
plane; the problem has cylindrical symmetry.
Thank you for the explanation, I think I see now see how to do the
problem :). I'll try it out this afternoon.
Have a nice day,
Bjørn
Jonathan Guyer wrote:
On May 23, 2006, at 7:41 PM, Bjorn Hansen wrote:
I've got a PDE I'm trying to solve, and the examples + manual are
getting me *almost* there, but there are a couple of things I am
having trouble with.
Welcome, Bjørn!
I figure someone here should be able to help me pretty easily as I
think it is a fairly straight forward application of fipy. here is the
equation (solving for Psi, as a function of R and z):
To properly do cylindrical coordinates, you need a wedge-shaped mesh,
which we don't presently have. Creating one wouldn't be too hard, but
hopefully Daniel can chime in with what some of the inaccuracies are
with doing that.
In the meantime, I'm assuming you're using a Grid2D and taking its x
coordinate to be "R" and its y coordinate as "z".
To get the actual coordinate values, you can do:
>>> R = mesh.getCellCenters()[...,0]
>>> z = mesh.getCellCenters()[...,1]
and then just use those values in your Term coefficients.
R*(cost1)*Psi + 1/R * (const2)*Psi + del.(1/R * del Psi)
For the DiffusionTerm, since you're dealing with a flux from one cell to
another, you can get somewhat better results if you evaluate R on the
faces between cells. In principle, you should just be able to do:
>>> DiffusionTerm(coeff=1. / mesh.getFaceCenters()[...,0])
but because of the default coordinate system, some values of R(faces)
will be zero, giving you an infinite diffusivity. Probably the easiest
way to deal with that is to offset your mesh when you create it:
>>> mesh = Grid2D(nx=?, ny=?, dx=?, dy=?) + (epsilon,0)
- Jon
--Jonathan E. Guyer, PhD
Metallurgy Division
National Institute of Standards and Technology
<http://www.metallurgy.nist.gov/>