Anweshan
Anweshan

Reputation: 29

Python pde solution using fipy gives value error

I am trying to solve a pde using the fipy package in python. The code that I have written for the same has been attached.

!pip install fipy
from fipy import *
mesh= Grid2D(nx=0.001,dx=100,ny=0.0005,dy=100)
phil=CellVariable(name='Sol variable',mesh=mesh)
phil.constrain(0,mesh.facesBottom)
phil.constrain(1,mesh.facesTop)
n=1.7*10**(-6)*((0.026*numerix.exp(phil/0.026)+phil-0.026)+2.25*10**(-10)*(0.026*numerix.exp(phil/0.026)-phil-0.026))**(0.5)
eq=(PowerLawConvectionTerm(coeff=(0.,1.))+ImplicitSourceTerm(coeff=n))
eq.solve(var=phil)

When I try to run the code, I get an error in the last line: k exceeds matrix dimensions. Any help regarding this would be appreciated.

Upvotes: 1

Views: 145

Answers (1)

wd15
wd15

Reputation: 1068

The obvious issue with the above code is that dx and nx are mixed up. dx is the mesh spacing so is a float while nx are the number of mesh cells, which is an int. So, the third line should be,

mesh= Grid2D(dx=0.001,nx=100,dy=0.0005,ny=100)

That at least makes the problem run without an error. However the solution isn't very interesting as the source term and the initial condition appear to be zero everywhere so the result is zero everywhere.

It's also worth considering the following

  • FiPy isn't really designed for hyperbolic problems, which require high order discretizations to solve accurately. It will solve, but may not be as accurate (it might be ok in equilibrium).
  • The source term is non-linear so will require many iterations to reach a solution.
  • It's a good idea to have a transient term in this type of equation and iterate towards equilibrium.

Upvotes: 1

Related Questions