Thanks ! 

I have changed the script into this now, and removed the non-classified parts 
and it works. This is just for testing. 



However, I was looking for a part in the script which refers to the original 
PDE, the PDE of 1 D diffusion. However, I cant find any part in the manual, 
where one can modify the PDE into other ones. 

This is because I wanted to use fipy to solve a complex nonlinear PDE. 


#Python script for solving a Partial Differential Equation in a diffusion case 

#import multiprocessing 


from fipy import * 
nx = 50 
dx = 1 
mesh = Grid1D(nx=nx, dx=dx) 
phi = CellVariable(name="Solution variable", 
mesh=mesh, 
value=0.) 


#We'll use the coefficient set to D=1 

D=1 

# We give then 2000 time-steps for the computation, which is defined by 90 
percent of the maximum stable timestep, which is given 

timeStepDuration = 0.9 * dx**2 / (2 * D) 
steps = 2000 

#Then we define the boundary conditions 

valueLeft = 1 

valueRight = 0 

#The boundary conditions are represented as faces around the exterior of the 
mesh, so we define the constraint by the given values on the left and right 
side of the boundary using the phi.constrain() command 

phi.constrain(valueLeft, mesh.facesRight) 
phi.constrain(valueRight, mesh.facesLeft) 

# We can also omit giving boundary conditions, then the default bc is 
equivalent to a zero gradient. 

#At this stage we define the partial differential equation as a numerical 
problem to be solved 

#for step in range(steps): 
# for j in range(cells): 
# phi_new[j] = phi_old[j] \ 
# + (D * dt / dx**2) * (phi_old[j+1] - 2 * phi_old[j] + phi_old[j-1]) 
# time += dt 

#and additional code for the boundary conditions 

eqX = TransientTerm() == ExplicitDiffusionTerm(coeff=D) 


#We then want to view the results of the calculation and use the command 
Viewer() for this 

phiAnalytical = CellVariable(name="analytical value", 
mesh=mesh) 
if __name__ == '__main__': 
viewer = Viewer(vars=(phi, phiAnalytical), 
datamin=0., datamax=1.) 
viewer.plot() 

#If we have a semi-infinite domain, then the solution for this PDE is 
phi=1-erf(x/2(Dt)^(0.5)). This requires to import SciPy library, so we import 
that. 

x = mesh.cellCenters[0] 
t = timeStepDuration * steps 

try: 
from scipy.special import erf 
phiAnalytical.setValue(1-erf(x / (2 * numerix.sqrt(D * t)))) 
except ImportError: 
print ("The Scipy Library is not avaliable to test the solution to the given 
trasient diffusion equation") 

# The equation is then solved by repeatedly looping 

for step in range(steps): 
eqX.solve(var=phi, 
dt=timeStepDuration) 
if __name__ == '__main__': 
viewer.plot() 
print (phi.allclose(phiAnalytical, atol = 7e-4)) 
1 

if __name__ == '__main__': 
raw_input("Explicit transient diffusion. Press <return> to proceed...") 






Sergio Manzetti 

[ http://www.fjordforsk.no/logo_hr2.jpg ] 

[ http://www.fjordforsk.no/ | Fjordforsk AS ] [ http://www.fjordforsk.no/ |   ] 
Midtun 
6894 Vangsnes 
Norge 
Org.nr. 911 659 654 
Tlf: +47 57695621 
[ http://www.oekolab.com/ | Økolab  ] | [ http://www.nanofact.no/ | Nanofactory 
 ] | [ http://www.aq-lab.no/ | AQ-Lab  ] | [ http://www.phap.no/ | FAP ] 



From: "Thibault Bridel-Bertomeu" <thibault.bridellel...@gmail.com> 
To: "fipy" <fipy@nist.gov> 
Sent: Thursday, May 18, 2017 2:00:14 PM 
Subject: Re: Problems running a simple PDE 

Hello Sergio, 
Instead of « for j in range(cells) » you can try « for j in 
range(phi.mesh.numberOfCells) », it should match what you want to accomplish. 

Best, 

Thibault Bridel-Bertomeu 
— 
MSc, PhD 
Design and Development Engineer 
CERFACS, CFD Team 
42 Av. Gaspard Coriolis 
31057 TOULOUSE CEDEX 1 
FRANCE 


2017-05-18 13:36 GMT+02:00 Sergio Manzetti < [ 
mailto:sergio.manze...@fjordforsk.no | sergio.manze...@fjordforsk.no ] > : 



Hello, following the manual, at the first example with the 1D diffusion, I have 
tried to make the python script for this (python2.7) and I get a missing name, 
which is not defined in the example at all. 

This is the name "cell", which appears on p 58 in the manual. 

Please see this code which describes this example: 


Thanks! 



#Python script for solving a Partial Differential Equation in a diffusion case 



from fipy import * 
nx = 50 
dx = 1 
mesh = Grid1D(nx=nx, dx=dx) 
phi = CellVariable(name="Solution variable", 
mesh=mesh, 
value=0.) 


#We'll use the coefficient set to D=1 

D=1 

# We give then 2000 time-steps for the computation, which is defined by 90 
percent of the maximum stable timestep, which is given 

timeStepDuration = 0.9 * dx**2 / (2 * D) 
steps = 2000 


#Then we define the boundary conditions 

valueLeft = 1 

valueRight = 0 

#The boundary conditions are represented as faces around the exterior of the 
mesh, so we define the constraint by the given values on the left and right 
side of the boundary using the phi.constrain() command 

phi.constrain(valueLeft, mesh.facesRight) 
phi.constrain(valueRight, mesh.facesLeft) 

# We can also omit giving boundary conditions, then the default bc is 
equivalent to a zero gradient. 

#At this stage we define the partial differential equation as a numerical 
problem to be solved 

for step in range(steps): 
for j in range(cells): 
phi_new[j] = phi_old[j] \ 
+ (D * dt / dx**2) * (phi_old[j+1] - 2 * phi_old[j] + phi_old[j-1]) 
time += dt 

#and additional code for the boundary conditions 

eqX = TransientTerm() == ExplicitDiffusionTerm(coeff=D) 


#We then want to view the results of the calculation and use the command 
Viewer() for this 

phiAnalytical = CellVariable(name="analytical value", 
mesh=mesh) 
if __name__ == '__main__': 
viewer = Viewer(vars=(phi, phiAnalytical), 
datamin=0., datamax=1.) 
viewer.plot() 

#If we have a semi-infinite domain, then the solution for this PDE is 
phi=1-erf(x/2(Dt)^(0.5)). This requires to import SciPy library, so we import 
that. 

x = mesh.cellCenters[0] 
t = timeStepDuration * steps 

try: 
from scipy.special import erf 
phiAnalytical.setValue(1-erf(x / (2 * numerix.sqrt(D * t)))) 
except ImportError: 
print ("The Scipy Library is not avaliable to test the solution to the given 
trasient diffusion equation") 

# The equation is then solved by repeatedly looping 

for step in range(steps): 
eqX.solve(var=phi, 
dt=timeStepDuration) 
if __name__ == '__main__': 
viewer.plot() 
print (phi.allclose(phiAnalytical, atol = 7e-4)) 
1 

if __name__ == '__main__': 
raw_input("Explicit transient diffusion. Press <return> to proceed...") 


_______________________________________________ 
fipy mailing list 
[ mailto:fipy@nist.gov | fipy@nist.gov ] 
[ http://www.ctcms.nist.gov/fipy | http://www.ctcms.nist.gov/fipy ] 
[ NIST internal ONLY: [ https://email.nist.gov/mailman/listinfo/fipy | 
https://email.nist.gov/mailman/listinfo/fipy ] ] 






_______________________________________________ 
fipy mailing list 
fipy@nist.gov 
http://www.ctcms.nist.gov/fipy 
[ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ] 
_______________________________________________
fipy mailing list
fipy@nist.gov
http://www.ctcms.nist.gov/fipy
  [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ]

Reply via email to