I've asked this question on Stack Overflow,
http://stackoverflow.com/questions/22971859/space-dependent-diffusion-in-fipy,
but for completeness I'll repost it here. The SO question has pictures
and inline links, but they aren't needed.
I'm using fipy to model the linearized [Poisson-Boltzmann equation][1].
Del . epsilon(x) Del phi(x) = phi(x) + f(x)
I'll assume I can model f(x) as a boundary condition. If epsilon(x) is a
constant, fipy can handle this:
phi = CellVariable(mesh)
dielectric_solvent = 80.0
dielectric_inner = 4.0
LHS = (DiffusionTerm(coeff = dielectric_solvent))
RHS = phi
eq = LHS == RHS
dr = np.linalg.norm(mesh.faceCenters, axis=0)
mask = (dr<.5) * mesh.exteriorFaces
phi.constrain(1, mask)
mask = (dr>.5) * mesh.exteriorFaces
phi.constrain(0, mask)
sol = eq.solve(var=phi)
The [complete minimal example is posted as a gist][4], to keep things
short this is the relevant portion. What I'd like to do is let
`epsilon(x)` vary as a function in _space_, but `DiffusionTerm` can only
take a constant. How can I implement the spatially varying dielectric term?
[1]: http://en.wikipedia.org/wiki/Poisson%E2%80%93Boltzmann_equation
[2]: http://i.stack.imgur.com/R0V5m.gif
[3]: http://i.stack.imgur.com/44D4U.png
[4]: https://gist.github.com/thoppe/10304061
_______________________________________________
fipy mailing list
fipy@nist.gov
http://www.ctcms.nist.gov/fipy
[ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ]