examples.convection.exponential1DSource.mesh1DΒΆ
Solve the steady-state convection-diffusion equation with a constant source.
Like examples.convection.exponential1D.mesh1D
this example solves a steady-state convection-diffusion equation, but adds a constant source,
, such that
>>> diffCoeff = 1.
>>> convCoeff = (10.,)
>>> sourceCoeff = 1.
We define a 1D mesh
>>> from fipy import CellVariable, Grid1D, DiffusionTerm, ExponentialConvectionTerm, DefaultAsymmetricSolver, Viewer
>>> from fipy.tools import numerix
>>> nx = 1000
>>> L = 10.
>>> mesh = Grid1D(dx=L / 1000, nx=nx)
>>> valueLeft = 0.
>>> valueRight = 1.
The solution variable is initialized to valueLeft
:
>>> var = CellVariable(name="variable", mesh=mesh)
and impose the boundary conditions
with
>>> var.constrain(valueLeft, mesh.facesLeft)
>>> var.constrain(valueRight, mesh.facesRight)
We define the convection-diffusion equation with source
>>> eq = (DiffusionTerm(coeff=diffCoeff)
... + ExponentialConvectionTerm(coeff=convCoeff)
... + sourceCoeff)
>>> eq.solve(var=var,
... solver=DefaultAsymmetricSolver(tolerance=1.e-15, iterations=10000))
and test the solution against the analytical result:
or
>>> axis = 0
>>> x = mesh.cellCenters[axis]
>>> AA = -sourceCoeff * x / convCoeff[axis]
>>> BB = 1. + sourceCoeff * L / convCoeff[axis]
>>> CC = 1. - numerix.exp(-convCoeff[axis] * x / diffCoeff)
>>> DD = 1. - numerix.exp(-convCoeff[axis] * L / diffCoeff)
>>> analyticalArray = AA + BB * CC / DD
>>> print(var.allclose(analyticalArray, rtol=1e-4, atol=1e-4))
1
If the problem is run interactively, we can view the result:
>>> if __name__ == '__main__':
... viewer = Viewer(vars=var)
... viewer.plot()
Last updated on Jun 27, 2023.
Created using Sphinx 6.2.1.