As Ray says, FiPy comes with a lot of examples that are intended to be an 
intrinsic part of the documentation. Not all examples have been formatted and 
included on the website or in the PDF (some don't have enough didactic, some 
are redundant to other examples and are intended more as tests than as 
documentation).

In particular, please see 
https://github.com/usnistgov/fipy/tree/develop/examples/convection/advection 
for illustrations (and pitfalls) of what you're trying to do. In short, FiPy 
doesn't handle pure convection very well.





On: 23 March 2016 07:39, "Raymond Smith" <[email protected]> wrote:
First, I hope you're considering the broad set of FiPy 
examples<http://www.ctcms.nist.gov/fipy/examples/README.html> as part of the 
documentation. They can serve as a great starting point for many problems. 
Second, solving convection problems without any diffusion is notoriously a bit 
difficult with standard finite volume techniques. So, despite the apparent 
simplicity of your starting example, you've happened to pick one that's likely 
to disagree with the analytical solution because of numerical challenges. That 
said, you may try using different forms of the convection term (mentioned 
here<http://www.ctcms.nist.gov/fipy/examples/convection/generated/examples.convection.exponential1D.mesh1D.html>)
 and letting the simulation run for convection beyond a single grid point. 
Anyway, it's usually a good idea to start with simple examples like this, but 
here, you might consider letting FiPy's examples guide your choice in getting 
started unless you're specifically looking at problems of the form you've begun 
with here.

If you really need to solve convection problems without the numerically 
smoothing diffusion, then you might consider different numerical schemes 
designed for hyperbolic equations, such as those implemented in clawpack:
http://www.clawpack.org/
Very similar to your problem:
http://www.clawpack.org/pyclaw/gallery/gallery_all.html#dimensional-advection

Best,
Ray

On Wed, Mar 23, 2016 at 7:54 AM, Tyler ABBOT 
<[email protected]<mailto:[email protected]>> wrote:

Hello!

I'm new to FiPy and am having a lot of trouble finding my way using only the 
documentation...

I am trying to understand how FiPy works by working an example, in particular I 
would like to solve the following simple convection equation with periodic 
boundary:

$$\partial_t u + \partial_x u = 0$$

If initial data is given by $u(x, 0) = F(x)$, then the analytical solution is 
$u(x, t) = F(x - t)$. I do get a solution, but it is not correct.

What am I missing? Is there a better resource for understanding FiPy than the 
documentation? It is very sparse...

Here is my attempt

from fipy import *
import numpy as np

# Generate mesh
nx = 20
dx = 2*np.pi/nx
mesh = PeriodicGrid1D(nx=nx, dx=dx)

# Generate solution object with initial discontinuity
phi = CellVariable(name="solution variable", mesh=mesh)
phiAnalytical = CellVariable(name="analytical value", mesh=mesh)
phi.setValue(1.)
phi.setValue(0., where=x > 1.)

# Define the pde
D = [[-1.]]
eq = TransientTerm() == ConvectionTerm(coeff=D)

# Set discretization so analytical solution is exactly one cell translation
dt = 0.01*dx
steps = 2*int(dx/dt)

# Set the analytical value at the end of simulation
phiAnalytical.setValue(np.roll(phi.value, 1))

for step in range(steps):
    eq.solve(var=phi, dt=dt)

print(phi.allclose(phiAnalytical, atol=1e-1))

Thanks for any guidance you could give!

Tyler Abbot
Phd Student
Department of Economics
Sciences Po, Paris
[email protected]<mailto:[email protected]>

_______________________________________________
fipy mailing list
[email protected]<mailto:[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