Hello,everyone
I'm new to fipy, and i am learning it using the examples. There is weird
problem happened:
Based on the 1-D diffusion example, i changed the boundary conditions.
I need the surface flux is propotional to the square of surface
concentration: J=Kr*C^2.
So i use fick's law to calculate the diffusion flux on surface: J =
-D*dC/dx.
Then i set the boundary conditions to:
cL.faceGrad.constrain(-Kr/D*cL.faceValue**2, mesh.facesRight)
*The problem is:*
*In line 46, depending on whether i print the "cL.faceGrad[0][0]" or
not, the calculated results are quite different. What happends when the
"cL.faceGrad[0][0]" i**s printed?*
At the same time, i also use the change of total inventory in the volume
to calibrate the flux: J=0.5*d(total inventory)/dt. (i use
cL.cellVolumeAverage*Lx to calculate the total inventory). I found that
to get more precise "faceGrad" on the surface,i need very small mesh
grids, is there better ways to calculate the surface flux?
Thank you very much
---------------------------------------
Code:
from fipy import *
from numpy import *
# Mesh
Lx = 0.5e-3 # Thickness
dd = list(2**arange(20))+[2**20]*2
dd+=dd[::-1]
nx=len(dd)
dx=array(dd)*Lx/sum(dd)
mesh = Grid1D(dx=dx) # 1D Meshing
# CellVariables
cI=1.0e5
cL = CellVariable(name="Lattice concentration", mesh=mesh,value=cI)
# Other Variables and constants
time = Variable() # Time (s)
Temp = 700. # Temperature (K)
k = 8.6e-5 # Boltzmann constant (eV/K)
D = 2.0e-7 * numerix.exp(-0.4/k/Temp) # Diffusion Coeffcient (m2/s)
Kr=3e-25/numerix.sqrt(Temp)*numerix.exp(2.06/k/Temp) # Recombination
rate (m4/s)
Cold=float(cL.cellVolumeAverage*Lx)
Flux = 0
# Boundary conditions
cL.faceGrad.constrain(-Kr/D*cL.faceValue**2, mesh.facesRight) # J =
-D*dcL/dx = Kr*cL**2
cL.faceGrad.constrain(Kr/D*cL.faceValue**2, mesh.facesLeft) # J =
-D*dcL/dx = Kr*cL**2
# Diffusion Equation
eqn = TransientTerm(var=cL) == DiffusionTerm(coeff=D, var=cL)
# Time steps
steps = 500
dt = 500./steps
# concentration plots
if __name__ == '__main__':
viewer = Viewer(vars=(cL), datamin=0., datamax=1.5*cI)
viewer.plot()
# Solve the equation
while time() < steps*dt:
time.setValue(time() + dt)
res = 1e25
print time , cL.faceValue[0], Kr/D*cL.faceValue[0]**2, Flux/D
,cL.faceGrad[0][0]
while res/cL[nx/2] > 1e-5:
res = eqn.sweep(dt=dt, var=cL)
if __name__ == '__main__':
viewer.plot() # update the concentration plots
Cnew=float(cL.cellVolumeAverage*Lx) # Total inventory
Flux = -(Cnew-Cold)/dt/2.
Cold=Cnew
if __name__ == '__main__':
raw_input("Calculation finished. Press <return> to proceed...")
from fipy import *
from numpy import *
# Mesh
Lx = 0.5e-3 # Thickness
dd = list(2**arange(20))+[2**20]*2
dd+=dd[::-1]
nx=len(dd)
dx=array(dd)*Lx/sum(dd)
mesh = Grid1D(dx=dx) # 1D Meshing
# CellVariables
cI=1.0e5
cL = CellVariable(name="Lattice concentration", mesh=mesh,value=cI)
# Other Variables and constants
time = Variable() # Time (s)
Temp = 700. # Temperature (K)
k = 8.6e-5 # Boltzmann constant (eV/K)
D = 2.0e-7 * numerix.exp(-0.4/k/Temp) # Diffusion Coeffcient (m2/s)
Kr=3e-25/numerix.sqrt(Temp)*numerix.exp(2.06/k/Temp) # Recombination rate
(m4/s)
Cold=float(cL.cellVolumeAverage*Lx)
Flux = 0
# Boundary conditions
cL.faceGrad.constrain(-Kr/D*cL.faceValue**2, mesh.facesRight) # J = -D*dcL/dx
= Kr*cL**2
cL.faceGrad.constrain(Kr/D*cL.faceValue**2, mesh.facesLeft) # J = -D*dcL/dx
= Kr*cL**2
# Diffusion Equation
eqn = TransientTerm(var=cL) == DiffusionTerm(coeff=D, var=cL)
# Time steps
steps = 500
dt = 500./steps
# concentration plots
if __name__ == '__main__':
viewer = Viewer(vars=(cL), datamin=0., datamax=1.5*cI)
viewer.plot()
# Solve the equation
while time() < steps*dt:
time.setValue(time() + dt)
res = 1e25
print time , cL.faceValue[0], Kr/D*cL.faceValue[0]**2, Flux/D
,cL.faceGrad[0][0]
while res/cL[nx/2] > 1e-5:
res = eqn.sweep(dt=dt, var=cL)
if __name__ == '__main__':
viewer.plot() # update the concentration plots
Cnew=float(cL.cellVolumeAverage*Lx) # Total inventory
Flux = -(Cnew-Cold)/dt/2.
Cold=Cnew
if __name__ == '__main__':
raw_input("Calculation finished. Press <return> to proceed...")
_______________________________________________
fipy mailing list
[email protected]
http://www.ctcms.nist.gov/fipy
[ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ]