Hello again Sergio,

When you define eqX = TransientTerm() == ExplicitDiffusionTerm(coeff=D)
you ready the equation, and then eqX.solve(var=phi,  dt=timeStepDuration)
solves the equation for an infinitesimal timestep dt, and the variable phi
as asked.

You could also have written ::

eqX = TransientTerm(var=phi) == ExplicitDiffusionTerm(coeff=D, var=phi)
for step in range(steps):
       eqX.solve(dt=timeStepDuration)

Best

Thibault Bridel-Bertomeu


2017-05-18 13:57 GMT+02:00 Sergio Manzetti <[email protected]>:

> Dear all, referring to the email below, I removed the phi_nw and phi_old,
> however, I am not sure where the actual PDE given in the first example at .
> 58,
>
> d phi/dt = A d^2x∕dx^2
>
>
> appears in the actual python code.
>
>
> This would be important to change the PDE into other PDEs
>
> Where do I define this PDE?
>
> Thanks
>
> Sergio Manzetti
>
> <http://www.fjordforsk.no/logo_hr2.jpg>
>
> Fjordforsk AS <http://www.fjordforsk.no>
>                <http://www.fjordforsk.no>
> Midtun
> 6894 Vangsnes
> Norge
> Org.nr. 911 659 654
> Tlf: +47 57695621 <+47%2057%2069%2056%2021>
> Økolab  <http://www.oekolab.com> |  Nanofactory  <http://www.nanofact.no>
> |  AQ-Lab  <http://www.aq-lab.no> |  FAP <http://www.phap.no>
>
>
> ------------------------------
> *From: *"sergio manzetti" <[email protected]>
> *To: *"fipy" <[email protected]>
> *Sent: *Thursday, May 18, 2017 1:36:57 PM
> *Subject: *Problems running a simple PDE
>
> 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
> [email protected]
> http://www.ctcms.nist.gov/fipy
>   [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ]
>
>
_______________________________________________
fipy mailing list
[email protected]
http://www.ctcms.nist.gov/fipy
  [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ]

Reply via email to