Conor,

if you reduce the thermal conductivity in the insulation to about 0.1, the
fipy solution looks about like the other model (the knee in T is about at
400 degrees C).  Is there an issue with how your compute or specify this in
fipy or the other model?

Kris


On Fri, Aug 8, 2014 at 9:35 AM, Conor Fleming <conor.flem...@eng.ox.ac.uk>
wrote:

> Hi,
>
> I am using FiPy to determine the depth of heat penetration into concrete
> structures due to fire over a certain period of time. I am solving the
> unsteady heat equation on a 1D grid, and modelling various scenarios, e.g.
> time-dependent temperature boundary condition, temperature-dependent
> diffusion coefficient. For these cases, the model compares very well to
> results from other solvers (for example the commercial finite element
> solver TEMP/W). However I am having trouble modelling problems with a
> spatially-varying diffusion coefficient, in particular, a two layer model
> representing a concrete wall covered with a layer of insulating material.
>
> I have attached a number of images to clarify the issue. The first,
> 'FiPy_TEMPW_insulation_only.png' shows the temperature distribution in a
> single material (the insulation) with constant diffusivity, D_ins, when a
> constant temperature of 1200 C is applied at one boundary for 3 hours. The
> FiPy result agrees very well with the analytical solution
>
>     1 - erf(x/2(sqrt(D_ins t))*1200 +20,
>
> taken from the examples.diffusion.mesh1D example (scaled and shifted
> appropriately) and with a numerical solution calculated using TEMP/W (using
> the same spatial and temporal discretisation, material properties and
> boundary conditions). The three results agree well, showing that the FiPy
> model is performing as expected.
>
> The second figure, 'FiPy_TEMPW_insulated_concrete.png', presents the
> temperature distribution through an insulated concrete wall (where for
> simplicity the concrete is also modelled with constant diffusivity, D_con)
> for the same surface temperature and period. There is now a considerable
> difference between the FiPy and TEMP/W predictions. The FiPy model predicts
> a lower temperature gradient in the insulation layer, which leads to higher
> temperatures throughout the domain.
>
> I am confident that the TEMP/W result is accurate, as it agrees perfectly
> with a simple explicit finite difference solution coded in FORTRAN. I have
> tried to identify any coding errors I have made in my FiPy script. I am
> aware that diffusion terms are solved at the grid faces, so when the
> diffusion coefficient is a function of a CellVariable, an appropriate
> interpolation scheme must be used to obtain sensible face values. However,
> in my case the diffusion coefficients, D_ins and D_conc, are created as
> FaceVariables and assigned constant values. I have also examined the
> effects of space and time discretisation, implicit and explicit
> DiffusionTerm, multiple sweeps per timestep, but these have made no
> significant difference.
>
> I would be very interested to hear anyone's opinion on what I might be
> doing wrong here. Also, does anyone think it is possible for FiPy to
> deliver an accurate result, and for the finite difference and finite volume
> solvers to be wrong? Below this email I have written out a minimal working
> example, which reproduces the 'FiPy' curve from figure
> 'FiPy_TEMPW_insulated_concrete.png'.
>
> Many thanks,
> Conor
>
> --
> Conor Fleming
> Research student, Civil Engineering Group
> Dept. of Engineering Science, University of Oxford
>
> ###################################################################
> # FiPy script to solve 1D heat equation for two-layer material
> #
> import fipy as fp
>
>
> nx = 45
> dx = 0.009 # grid spacing, m
> dt = 20. # timestep, s
>
>
> mesh = fp.Grid1D(nx=nx, dx=dx) # define 1D grid
>
>
> # define temperature variable, phi
> phi = fp.CellVariable(name="Fipy", mesh=mesh, value=20.)
>
>
> # insulation thermal properties
> thick_ins = 0.027 # insulation thickness
> k_ins = 0.212
> rho_ins = 900.
> cp_ins = 1000.
> D_ins = k_ins / (rho_ins * cp_ins) # insulation diffusivity
>
>
> # concrete thermal properties
> k_con = 1.5
> rho_con = 2300.
> cp_con = 1100.
> D_con = k_con / (rho_con * cp_con) # concrete diffusivity
>
>
> valueLeft = 1200. # set temperature at edge of domain
> phi.constrain(valueLeft, mesh.facesLeft) # apply boundary condition
>
>
> # create diffusion coefficient as a FaceVariable
> D = fp.FaceVariable(mesh=mesh, value=D_ins)
> X = mesh.faceCenters.value[0]
> D.setValue(D_con, where=X>thick_ins) # change diffusivity in concrete
> region
>
>
> # unsteady heat equation
> eqn = fp.TransientTerm() == fp.DiffusionTerm(coeff=D)
>
>
> # specify viewer
> viewer = fp.Viewer(vars=phi, datamin=0., datamax=1200.)
>
>
> # solve equation
> t = 0.
> while t < 10800: # simulate for 3 hours
> t += dt # advance time
> eqn.solve(var=phi, dt=dt) # solve equation
> viewer.plot() # plot result
> _______________________________________________
> fipy mailing list
> fipy@nist.gov
> http://www.ctcms.nist.gov/fipy
>   [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ]
>
>
_______________________________________________
fipy mailing list
fipy@nist.gov
http://www.ctcms.nist.gov/fipy
  [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ]

Reply via email to