Hello,
First off, I'd like to say I really like FiPy and appreciate that you have
made such great tool for everyone to use. I am trying to use FiPy to solve
a heat transfer problem in 1D and I have a few implementation questions.
Forgive me if they seem simplistic. I have looked at a lot of the
documentation and examples, but there may be some things that have eluded
me. If it seems like I'm writing very simple, obvious things it's just so I
can get a full grasp of what is going on.
1) It seems that most, if not all, of the examples are in Cartesian
coordinates. Thus, a 1D diffusion equation with a source term would be:
[image: image.png]
where rho is density, Cb is specific heat, lamba is an effective heat
transfer and S is a source term. Of course, T is temperature, t is time,
and x is the coordinate.
I would normally set this mesh up by using
mesh = Grid1D(nx =100., Lx = 1., dx = 1./100.)
If I wanted to run this in a cylindrical coordinate grid, the equation
would become:
[image: image.png]
Can I just call the following in FiPy to account for this coordinate system
change?:
mesh = CylindricalGrid1D(nx = 100.,Lx = 1., dx = 1./100.)
If not, how do I account for the dependent variable when it is not in the
differential? Essentially, how do can I put lambda/r in the coefficient
etc.?
2) Is the correct way to add a source term simply to write something like:
eq = TransientTerm() == DiffusionTerm() + S
or
eq = TransientTerm() == DiffusionTerm() + ImplicitSourceTerm(S)?
3) Regarding boundary conditions, I am trying to use a boundary condition
that has my dependent variable (T) in the boundary condition. The condition
is dT/dr = h(T - Tc), where Tc is a constant. Would this be the correct way
to do that? I'm mostly inquiring about writing the dependent variable as
T.faceValue...
T.faceGrad.constrain(h*(T.faceValue - Tc), mesh.facesLeft)
I've included a copy of the code below. There are some extraneous
details/code in there that I was playing with.
Thank you!
--
Daniel DeSantis
from fipy import *
# Constants
rho_b_MH = 589. # kg m^-3
Cp_b = 88.25 #kJ (mol*K)^-1,
# I'm using L in place of lambda
L_eg = 150. # W m^-1 K^-1
L_MH = 1.74 # W m^-1 K^-1
L_eff = 8.4 # W m^-1 K^-1
t_r = 3.7 #min
M = 2.02 #g/mol
dH = 28.*1000. #kJ/mol
h = 150. # W/m^-2 K^-1
T_c = 60 # Coolant Temperature
Equation Set up and Boundary Condition
R = 1. # There was no radius provided. I just set it to 1 for now
nx = 100. # arbitrary number of points
dx= R/nx
#mesh = Grid1D(nx = nx, dx=dx) # Create a "mesh" for the 1D array
mesh = CylindricalGrid1D(nx=nx,dx=dx,Lx=R)
T = CellVariable(name ="Temperature",mesh=mesh,value = 60.)
#T.constrain(60.,mesh.facesLeft)
#T.constrain(120.,mesh.facesRight)
T.faceGrad.constrain(0,mesh.facesRight)
T.faceGrad.constrain(h*(T.faceValue-T_c),mesh.facesLeft)
eq1 = TransientTerm(coeff=rho_b_MH*Cp_b,var=T) == DiffusionTerm(coeff =
L_eff, var = T) + rho_b_MH*(dH/M)
# Equation Solution
vi = Viewer(T,datamin=0,datamax=100)
TSD = .0001 #min/step
steps = 75 #steps
for step in range(steps):
eq1.solve(var=T,dt=TSD)
vi.plot()
_______________________________________________
fipy mailing list
[email protected]
http://www.ctcms.nist.gov/fipy
[ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ]