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 ]