Hello again,
First of all, thank you for your help with my previous problem.
I have been building on the problem and have run into some trouble in
defining a more complex geometry.
Here is a quick overview:
I am still looking at the transient conduction through a material where the
thermal conductivity of that material changes as a function of the
temperature. My previous post was just looking at a simple 1D problem (just
straight conduction through a slab of the material). Now I would like to
look at it in 3D cylindrical coordinates. We have an insulated 1.5m long
pipe with an inner and outer radius of 0.0046m and 0.00635m respectively.
So I am only concerned with what happens between these radii, not with
anything from the inner radius to the center of the pipe.
I have tried to set up a 3D mesh using Gmsh, but have not been very
successful. Could anyone offer some insight as to how I can set this up
successfully?
Thank you very much in advance for your help!
###########
from fipy import *
# 3D Cylindrical Mesh in Gmsh
# Is there a cylindrical 3D mesh option for FiPy that might be easier to
use?
r = 0.0023 # inner radius of pipe
R = 0.003175 # outer radius of pipe
length = 1.5 # length of test section (z coordinate)
cl = 0.0001 # characteristic length
mesh = GmshImporter3D('''
r = %(r)g; # are the first 4 lines here
necessary?
R = %(R)g;
length = %(length)g;
cl = %(cl)g;
Point(1) = {0, 0, 0, cl};
Point(2) = {R, 0, 0, cl};
Point(3) = {0, R, 0, cl};
Point(4) = {-R, 0, 0, cl};
Point(5) = {0, -R, 0, cl};
Point(6) = {r, 0, 0, cl};
Point(7) = {0, r, 0, cl};
Point(8) = {-r, 0, 0, cl};
Point(9) = {0, -r, 0, cl};
Circle(11) = {3,1,4};
Circle(12) = {4,1,5};
Circle(13) = {5,1,2};
Circle(14) = {2,1,3};
Circle(15) = {7,1,8};
Circle(16) = {8,1,9};
Circle(17) = {9,1,6};
Circle(18) = {6,1,7};
Line(19) = {7,3};
Line(20) = {9,5};
# The following was adapted from an example I found where you
make 2 surfaces on the cross section of the
# pipe (shaped like a C and a backwards C), then connect and
extrude them
# Is that a common way to do something like this?
Line Loop(21) = {19,11,12,-20,-16,-15};
Plane Surface(22) = {21};
Line Loop(23) = {20,13,14,-19,-18,-7};
Plane Surface(24) = {23};
Transfinite Line{11:18} = 6/2;
Transfinite Line{19,20} = 6;
Transfinite Surface{22,24} = {23,24,22,21};
Recombine Surface '*';
Extrude{0,0,length}{Surface{22,24}; Layers{4,1}; Recombine};
''' % locals()) # I am not 100% sure what the
purpose of 'locals' is. Is it needed?
# Definitions:
omega = 0.00164
k0 = 11.83
temp = CellVariable(name = 'Temperature', mesh=mesh, hasOld=1)
therm_cond = k0 * numerix.exp(omega * temp)
therm_cond.name = 'Thermal Conductivity'
# Boundary Conditions
rFlux = [100]
RFlux = [0]
rTemp = 150
RTemp = 250
BCs = (FixedFlux(faces=mesh.getExteriorFaces(), value=RFlux),\ # is
this the correct way to represent the
# outer radius BCs?
FixedValue(faces=mesh.getInteriorFaces(), value=rTemp),) #
and the inner radius ones?
eq = TransientTerm() == DiffusionTerm(coeff=therm_cond)
# Solving equation
elapsedTime = 0
totalElapsedTime = 300
timeStep = 1
desiredResidual = 0.0001
if __name__ == '__main__':
Tviewer = Viewer(vars=temp)
kviewer = Viewer(vars=therm_cond)
meshviewer = Viewer(vars=temp)
meshviewer.plot() # I would really like to be able to view the
mesh on its own to satisfy myself that it is
# exactly how I want it
# I don't think this method is correct,
could you suggest a better way?
while elapsedTime < totalElapsedTime:
temp.updateOld()
residual = 1e100
while residual > desiredResidual:
residual = eq.sweep(var=temp, boundaryConditions=BCs, dt=timeStep)
elapsedTime += timeStep
# Plot results:
if __name__ == '__main__':
Tviewer.plot()
kviewer.plot()
_______________________________________________
fipy mailing list
[email protected]
http://www.ctcms.nist.gov/fipy
[ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ]