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 ]