A file ? You can export the result to a file yes, although I did not demonstrate it in my script. This is not fipy though, it’s about using numpy to write an array of values into a file !
As for the comparison with an analytic solution, I invite you to take a look at the mesh1D diffusion example where they create a phiAnalytical. To plot it, you can do vi = Viewer(vars=(phi, phiAnalytical)) vi.plot() which should plot at the same time the solution of the iterative process from fipy and the analytical value. Cordialement, -- T. BRIDEL-BERTOMEU 2017-05-18 14:46 GMT+02:00 Sergio Manzetti <sergio.manze...@fjordforsk.no>: > OK, I see now. Where is this file you mention accessed? It does not come > out in the working directory. > > > 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: *"Thibault Bridel-Bertomeu" <thibault.bridellel...@gmail.com> > *To: *"fipy" <fipy@nist.gov> > *Sent: *Thursday, May 18, 2017 2:47:24 PM > > *Subject: *Re: Problems running a simple PDE > > The PDE you want to solve has a transient term, which is why the function > evolves in time. > However, as you can see it eventually converges to a given shape and stay > in that shape : this « stabilized shape » corresponds to the steady-state > result of your equation. > All you can see before are the transient organizations. > > As I said in my previous e-mail, you can access phi as a numpy array and > do with it as you want : this phi is the discrete representation of your > steady-state result. > > Cordialement, > > -- > T. BRIDEL-BERTOMEU > > > > 2017-05-18 14:40 GMT+02:00 Sergio Manzetti <sergio.manze...@fjordforsk.no> > : > >> I am just not sure on how to understand the actual beautiful result from >> the PDE. >> >> When initializing is pressed, it animates into a wave-like pattern. >> >> I thought the numerical solution to the PDE was an actual function, but >> this animated plot must be some form of time-dependent changing function? >> How can it be given as a function in addition to the graph? >> >> >> 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: *"Thibault Bridel-Bertomeu" <thibault.bridellel...@gmail.com> >> *To: *"fipy" <fipy@nist.gov> >> *Sent: *Thursday, May 18, 2017 2:29:23 PM >> >> *Subject: *Re: Problems running a simple PDE >> >> I invite you to take a look at : http://www.ctcms.nist.gov/ >> fipy/examples/README.html for an overview of all the examples written >> for fipy >> and http://www.ctcms.nist.gov/fipy/documentation/numerical/discret.html >> for a reminder on how the finite volume method works. >> >> As for your equation, if you are in 1D, you may consider it as follow : >> >> du/dx : is a convection term with a unit scalar coefficient, i.e. >> <SpecificConvectionTerm>(coeff=(1.,), var=u) - you will find a list of >> all available convection schemes here : http://www.ctcms.nist.gov/ >> fipy/documentation/numerical/discret.html#convection-term >> >> du/dt : is a transient term that you can treat as before, i.e. >> TransientTerm(var=u) >> >> and u^2, as a nonlinear term, one possibility is to update it during the >> iterations. >> >> All in all, you would write for instance : >> >> #!/usr/bin/env python >> >> from fipy import * >> from fipy import numerix >> >> nx = 50 >> dx = 1. / float(nx) >> >> mesh = Grid1D(nx=nx,dx=dx) >> X = mesh.cellCenters[0] >> >> phi = CellVariable(mesh=mesh, name="solution") >> phi.setValue(0.5-0.5*numerix.tanh(10*(X-0.5))) >> >> vi = Viewer(vars=phi,datamin=0.0, datamax=1.0) >> vi.plot() >> >> raw_input("Initialization ...") >> >> phi.constrain(1., mesh.facesLeft) >> phi.constrain(0., mesh.facesRight) >> >> phi_sq = CellVariable(mesh=mesh) >> phi_sq.setValue( phi*phi ) >> >> eq = TransientTerm(coeff=1., var=phi) + >> ExponentialConvectionTerm(coeff=(1.,), >> var=phi) + phi_sq == 0.0 >> >> dt = 0.01 >> steps = 100 >> for step in range(steps): >> eq.sweep(dt=dt) >> # >> phi_sq.setValue( phi * phi ) >> # >> vi.plot() >> >> raw_input("Press <return> ...") >> >> The sweep method allows to advance the equation of one timestep only. >> Then I can update phi_sq which the next sweep will use to solve the >> equation. And so on .. >> >> Hope this helps to understand. I can however only advise you to browse >> through all the examples, you will definitely find something similar to >> your case you can start from ! >> >> Best >> >> T. Bridel-Bertomeu >> >> >> >> 2017-05-18 14:10 GMT+02:00 Sergio Manzetti <sergio.manze...@fjordforsk.no >> >: >> >>> OK, this really helped. If I wanted to change this into: >>> >>> >>> du/dx + i*du/dt + u^2 = 0 >>> >>> in the following format: >>> >>> >>> eqX = TransientTerm(var=phi) == ExplicitDiffusionTerm(coeff=D, var=phi) >>> for step in range(steps): >>> eqX.solve(dt=timeStepDuration) >>> >>> >>> there would be alot of different terms. Where can I find an explanation >>> on how to change these variables you mentioned into an equation one >>> requires to run on fipy? >>> >>> Sergio >>> >>> >>> 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: *"Thibault Bridel-Bertomeu" <thibault.bridellel...@gmail.com> >>> *To: *"fipy" <fipy@nist.gov> >>> *Sent: *Thursday, May 18, 2017 2:09:47 PM >>> *Subject: *Re: Problems running a simple PDE >>> >>> 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 < >>> sergio.manze...@fjordforsk.no>: >>> >>>> 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" <sergio.manze...@fjordforsk.no> >>>> *To: *"fipy" <fipy@nist.gov> >>>> *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 >>>> 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 ] >>> >>> _______________________________________________ >>> 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 ] >> >> _______________________________________________ >> 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 ] > > _______________________________________________ > 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 ]