Upload
sudarson47
View
31
Download
0
Embed Size (px)
DESCRIPTION
python Simulation from Scratch
Citation preview
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