Heat equation in 2DΒΆ

This tutorial simulates the stationary heat equation in 2D. The example is taken from the pyGIMLi paper (https://cg17.pygimli.org).

import pygimli as pg
import pygimli.meshtools as mt

Create geometry definition for the modelling domain.

world = mt.createWorld(start=[-20, 0], end=[20, -16], layers=[-2, -8],
                       worldMarker=False)
# Create a heterogeneous block
block = mt.createRectangle(start=[-6, -3.5], end=[6, -6.0],
                           marker=4,  boundaryMarker=10, area=0.1)
# Merge geometrical entities
geom = mt.mergePLC([world, block])
pg.show(geom, boundaryMarker=True)
../../_images/sphx_glr_plot_5-mod-fem-heat-2d_001.png

Create a mesh from based on the geometry definition.

mesh = mt.createMesh(geom, quality=33, area=0.2, smooth=[1, 10])
pg.show(mesh)
../../_images/sphx_glr_plot_5-mod-fem-heat-2d_002.png

Call pygimli.solver.solveFiniteElements() to solve the heat diffusion equation \(\nabla\cdot(a\nabla T)=0\) with \(T(bottom)=1\) and \(T(top)=0\), where \(a\) is the thermal diffusivity and \(T\) is the temperature distribution.

T = pg.solver.solveFiniteElements(mesh,
                                  a=[[1, 1.0], [2, 2.0], [3, 3.0], [4, 0.1]],
                                  uB=[[8, 1.0], [4, 0.0]], verbose=True)

ax, _ = pg.show(mesh, data=T, label='Temperature $T$', cmap="hot_r")
pg.show(geom, ax=ax, fillRegion=True)

# just hold figure windows open if run outside from spyder, ipython or similar
pg.wait()
../../_images/sphx_glr_plot_5-mod-fem-heat-2d_003.png

Out:

Mesh:  Mesh: Nodes: 3011 Cells: 5832 Boundaries: 8842
('Asssemblation time: ', 0.077)
('Solving time: ', 0.083)

Total running time of the script: ( 0 minutes 3.101 seconds)

Generated by Sphinx-Gallery

News (Aug 2017):
pyGIMLi Paper out now! Download PDF here.


© 2017 - GIMLi Development Team
Created using Bootstrap and Sphinx. Last updated on Oct 15, 2017.