Ich versuche zu verstehen, wie FiPy funktioniert, indem ein Beispiel arbeiten, insbesondere würde Ich mag die folgende einfache Konvektionsgleichung mit periodischen Rand lösen:FiPy Einfache Convection
$$ \ partial_t u + \ partial_x u = 0 $$
Wenn Anfangsdaten durch $ u (x, 0) = F (x) $ gegeben sind, dann ist die analytische Lösung $ u (x, t) = F (x - t) $. Ich bekomme eine Lösung, aber es ist nicht korrekt.
Was fehlt mir? Gibt es eine bessere Ressource zum Verständnis von FiPy als die Dokumentation? Es ist sehr spärlich ...
Hier ist mein Versuch
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))
Sorry, ich kann nicht scheinen, um die Latex Mathe zu reparieren ... – pdevar