finite volumes example
DESCRIPTION
python Simulation from ScratchTRANSCRIPT
-
Finite Volumes Lab II: Cooking a Simulation from
Scratch
R. Edwin [email protected]
1
-
One Dimensional Diffusion
2
-
One Dimensional Diffusion
L= 1
2
-
One Dimensional Diffusion
t= D
L= 1
2
-
One Dimensional Diffusion=1
=0
t= D
L= 1
2
-
One Dimensional Diffusion=1
=0
t= D
(x, t=0) = 0
L= 1
2
-
Working Scripts for Todays Class can be are:
3
-
Working Scripts for Todays Class can be are:
diffusionX.py diffusionI.py diffusionCN.py(explicit) (implicit) (semi-implicit)
3
-
A PDE is Solved in Four Steps
Variables Definitions
Equation(s) Definition(s)
Boundary Condition Specification
Viewer Creation
Problem Solving
4
-
A PDE is Solved in Four Steps
Variables Definitions
Equation(s) Definition(s)
Boundary Condition Specification
Viewer Creation
Problem Solving
5
-
Variables Definitions
6
-
Variables Definitions
nx = 50
6
-
Variables Definitions
nx = 50dx = 1.0/float(nx)
6
-
Variables Definitions
nx = 50dx = 1.0/float(nx)from fipy.meshes.grid1D import Grid1D
6
-
Variables Definitions
nx = 50dx = 1.0/float(nx)from fipy.meshes.grid1D import Grid1D
Grid2DGrid3D
other grids{
6
-
Variables Definitions
nx = 50dx = 1.0/float(nx)from fipy.meshes.grid1D import Grid1Dmesh = Grid1D(nx, dx)
Grid2DGrid3D
other grids{
6
-
Variables Definitions
nx = 50dx = 1.0/float(nx)from fipy.meshes.grid1D import Grid1Dmesh = Grid1D(nx, dx)from fipy.variables.cellVariable import CellVariable
Grid2DGrid3D
other grids{
6
-
Variables Definitions
nx = 50dx = 1.0/float(nx)from fipy.meshes.grid1D import Grid1Dmesh = Grid1D(nx, dx)from fipy.variables.cellVariable import CellVariable
Grid2DGrid3D
other grids{other variablesVariableNoiseVariable
{6
-
Variables Definitions
nx = 50dx = 1.0/float(nx)from fipy.meshes.grid1D import Grid1Dmesh = Grid1D(nx, dx)from fipy.variables.cellVariable import CellVariablephi = CellVariable(name="solution variable", mesh=mesh, value=0)
Grid2DGrid3D
other grids{other variablesVariableNoiseVariable
{6
-
Variables Definitions
nx = 50dx = 1.0/float(nx)from fipy.meshes.grid1D import Grid1Dmesh = Grid1D(nx, dx)from fipy.variables.cellVariable import CellVariablephi = CellVariable(name="solution variable", mesh=mesh, value=0)D = 1.0
Grid2DGrid3D
other grids{other variablesVariableNoiseVariable
{6
-
Variables Definitions
nx = 50dx = 1.0/float(nx)from fipy.meshes.grid1D import Grid1Dmesh = Grid1D(nx, dx)from fipy.variables.cellVariable import CellVariablephi = CellVariable(name="solution variable", mesh=mesh, value=0)D = 1.0valueLeft = 1
Grid2DGrid3D
other grids{other variablesVariableNoiseVariable
{6
-
Variables Definitions
nx = 50dx = 1.0/float(nx)from fipy.meshes.grid1D import Grid1Dmesh = Grid1D(nx, dx)from fipy.variables.cellVariable import CellVariablephi = CellVariable(name="solution variable", mesh=mesh, value=0)D = 1.0valueLeft = 1valueRight = 0
Grid2DGrid3D
other grids{other variablesVariableNoiseVariable
{6
-
Variables Definitions
nx = 50dx = 1.0/float(nx)from fipy.meshes.grid1D import Grid1Dmesh = Grid1D(nx, dx)from fipy.variables.cellVariable import CellVariablephi = CellVariable(name="solution variable", mesh=mesh, value=0)D = 1.0valueLeft = 1valueRight = 0timeStepDuration = 0.9*(dx)**2/(2*D)
Grid2DGrid3D
other grids{other variablesVariableNoiseVariable
{6
-
Variables Definitions
nx = 50dx = 1.0/float(nx)from fipy.meshes.grid1D import Grid1Dmesh = Grid1D(nx, dx)from fipy.variables.cellVariable import CellVariablephi = CellVariable(name="solution variable", mesh=mesh, value=0)D = 1.0valueLeft = 1valueRight = 0timeStepDuration = 0.9*(dx)**2/(2*D)
Grid2DGrid3D
other grids{other variablesVariableNoiseVariable
{A=
2Dtx2
{6
-
Variables Definitions
nx = 50dx = 1.0/float(nx)from fipy.meshes.grid1D import Grid1Dmesh = Grid1D(nx, dx)from fipy.variables.cellVariable import CellVariablephi = CellVariable(name="solution variable", mesh=mesh, value=0)D = 1.0valueLeft = 1valueRight = 0timeStepDuration = 0.9*(dx)**2/(2*D)steps = 900
Grid2DGrid3D
other grids{other variablesVariableNoiseVariable
{A=
2Dtx2
{6
-
A PDE is Solved in Four Steps
Variables Definitions
Equation(s) Definition(s)
Boundary Condition Specification
Viewer Creation
Problem Solving
7
-
Equation Definition
8
-
Equation Definition
from fipy.terms.explicitDiffusionTerm import ExplicitDiffusionTerm
8
-
Equation Definition
from fipy.terms.explicitDiffusionTerm import ExplicitDiffusionTerm
from fipy.terms.transientTerm import TransientTerm
8
-
Equation Definition
from fipy.terms.explicitDiffusionTerm import ExplicitDiffusionTerm
from fipy.terms.transientTerm import TransientTerm
eqX = TransientTerm() == ExplicitDiffusionTerm(coeff = D)
8
-
Equation Definition
from fipy.terms.explicitDiffusionTerm import ExplicitDiffusionTerm
from fipy.terms.transientTerm import TransientTerm
eqX = TransientTerm() == ExplicitDiffusionTerm(coeff = D)
t= D
8
-
Equation Definition
from fipy.terms.explicitDiffusionTerm import ExplicitDiffusionTerm
from fipy.terms.transientTerm import TransientTerm
eqX = TransientTerm() == ExplicitDiffusionTerm(coeff = D)
t= D
8
-
Equation Definition
from fipy.terms.explicitDiffusionTerm import ExplicitDiffusionTerm
from fipy.terms.transientTerm import TransientTerm
eqX = TransientTerm() == ExplicitDiffusionTerm(coeff = D)
t= D
8
-
Other Equation Terms
9
-
Term FiPy Representation
Other Equation Terms
9
-
Term FiPy Representation
Other Equation Terms
(D1[ D2()]) DiffusionTerm
9
-
Term FiPy Representation
Other Equation Terms
(!v) ConvectionTerm
(D1[ D2()]) DiffusionTerm
9
-
Term FiPy Representation
Other Equation Terms
(!v) ConvectionTerm
(D1[ D2()]) DiffusionTerm
SourceTerm
9
-
A PDE is Solved in Four Steps
Variables Definitions
Equation(s) Definition(s)
Boundary Condition Specification
Viewer Creation
Problem Solving
10
-
Boundary Conditions
11
-
Boundary Conditions
from fipy.boundaryConditions.fixedValue import FixedValue
11
-
Boundary Conditions
from fipy.boundaryConditions.fixedValue import FixedValue
BCs = (FixedValue(faces = mesh.getFacesRight(), value=valueRight),
FixedValue(faces=mesh.getFacesLeft(),value=valueLeft))
11
-
Boundary Conditions
from fipy.boundaryConditions.fixedValue import FixedValue
BCs = (FixedValue(faces = mesh.getFacesRight(), value=valueRight),
FixedValue(faces=mesh.getFacesLeft(),value=valueLeft))
BCs = (BC1, BC2, BC3, ...)notation
11
-
Other Type of BCs
12
-
Other Type of BCs
Dirichlet BC
FixedValue(FaceLocation, Value)
12
-
Other Type of BCs
Dirichlet BC
FixedValue(FaceLocation, Value)
Neumann BC
FixedFlux(FaceLocation, Value)
12
-
Other Type of BCs
Dirichlet BC
FixedValue(FaceLocation, Value)
Neumann BC
FixedFlux(FaceLocation, Value)
Higher Order BC
NthOrderBoundaryCondition(FaceLocation, Value)
12
-
A PDE is Solved in Four Steps
Variables Definitions
Equation(s) Definition(s)
Boundary Condition Specification
Viewer Creation
Problem Solving
13
-
Viewer Creation
from fipy import viewers
viewer = viewers.make(vars = phi, limits={'datamin':0.0, 'datamax':1.0})
14
-
A PDE is Solved in Four Steps
Variables Definitions
Equation(s) Definition(s)
Boundary Condition Specification
Viewer Creation
Problem Solving
15
-
Solving the Problem
16
-
Solving the Problem
for step in range(steps):
16
-
Solving the Problem
for step in range(steps):
eqX.solve(var = phi, boundaryConditions = BCs, dt = timeStepDuration)
viewer.plot()
16
-
Solving the Problem
for step in range(steps):
eqX.solve(var = phi, boundaryConditions = BCs, dt = timeStepDuration)
viewer.plot()
16
-
Launching the Simulation
17
-
Launching the Simulation
Save file under adequate name (extension must be .py)
17
-
Launching the Simulation
Save file under adequate name (extension must be .py)
short-cut: CTRL-X CTRL-S
17
-
Launching the Simulation
Save file under adequate name (extension must be .py) Example: coolSimulation.py
short-cut: CTRL-X CTRL-S
17
-
Launching the Simulation
Save file under adequate name (extension must be .py)
Run it by calling python from the command line.
Example: coolSimulation.py
short-cut: CTRL-X CTRL-S
17
-
Launching the Simulation
Save file under adequate name (extension must be .py)
Run it by calling python from the command line.
Example: coolSimulation.py
Example: python coolSimulation.py
short-cut: CTRL-X CTRL-S
17
-
Launching the Simulation
Save file under adequate name (extension must be .py)
Run it by calling python from the command line.
You can cancel your simulation by typing CTRL-C
Example: coolSimulation.py
Example: python coolSimulation.py
short-cut: CTRL-X CTRL-S
17
-
Fun Things to Try:
18
-
Fun Things to Try:
Try changing the boundary and initial conditions.
18
-
Fun Things to Try:
Try changing the boundary and initial conditions. Example: initialize the field to 0.5
18
-
Fun Things to Try:
Try changing the boundary and initial conditions.
Try changing the Amplification factor in the time step.
Example: initialize the field to 0.5
18
-
Fun Things to Try:
Try changing the boundary and initial conditions.
Try changing the Amplification factor in the time step.
Example: initialize the field to 0.5
Example: set A=1.1
18
-
Fun Things to Try:
Try changing the boundary and initial conditions.
Try changing the Amplification factor in the time step.
Try replacing the ExplicitDiffusionTerm with an ImplicitDiffusionTerm
Example: initialize the field to 0.5
Example: set A=1.1
18
-
Three Exercises
Run diffusionX.py with an amplification factor of 0.9
Run diffusionX.py with an amplification factor of 1.0
Run diffusionX.py with an amplification factor of 1.1
(Explicit Method)
19
-
Three More Exercises
Run diffusionCN.py with an amplification factor of 1
Run diffusionCN.py with an amplification factor of 10
Run diffusionCN.py with an amplification factor of 100
(Semi-Implicit Method)
20
-
Three Final Exercises
Run diffusionI.py with an amplification factor of 0.9
Run diffusionI.py with an amplification factor of 1.0
Run diffusionI.py with an amplification factor of 1.1
Run diffusionI.py with an amplification factor of 2, 5, 7, 10, 100,...
(Implicit Method)
21
-
FiPy Resources
22
-
FiPy Resources
FiPy Manual (tutorials and useful examples)
22
-
FiPy Resources
FiPy Manual (tutorials and useful examples) FiPy Reference (what every single command
does)
22
-
FiPy Resources
FiPy Manual (tutorials and useful examples) FiPy Reference (what every single command
does)
Mailing List: [email protected]
22
-
FiPy Resources
FiPy Manual (tutorials and useful examples) FiPy Reference (what every single command
does)
Mailing List: [email protected] You can also email:
John Guyer: [email protected] Dan Wheeler: [email protected]
22
-
FiPy Resources
FiPy Manual (tutorials and useful examples) FiPy Reference (what every single command
does)
Mailing List: [email protected] You can also email:
John Guyer: [email protected] Dan Wheeler: [email protected]
FiPy Website http://www.ctcms.nist.gov/fipy/22