

```python
#1 Loading functions  and modules
from fenics import *
import matplotlib.pyplot as plt
T = 0.1
num_steps = 20
dt = T/num_steps
rho = 7500
Cp = 500
k = 50
alpha = k/(rho*Cp)
```


```python
#2 Create mesh and define function space
nx = 0.008
ny = 0.003
mesh = RectangleMesh(Point(0,0),Point(nx,ny),30, 30,'left')
V = FunctionSpace(mesh, 'Lagrange', 1) #Lagrange are triangular elements
plot(mesh)
plt.show()

```


![png](output_1_0.png)



```python
# Boundary conditions
u0 = Constant(100)
def boundary(x, on_boundary):
    return on_boundary

bc = DirichletBC(V,u0, boundary)
```


```python
u_n = project(1, V)
u = TrialFunction(V)
v = TestFunction(V)
f = Constant(0.0)
F = u*v*dx + alpha*dt*dot(grad(u), grad(v))*dx-u_n*v*dx
a, L = lhs(F), rhs(F)
```


```python
vtkfile = File('solution/solution.pvd')
u = Function(V)
t = 0
for n in range(num_steps):
    t += dt
    #u0.t = t
    solve(a == L, u, bc)
    #c = plot(u,)
    #plt.colorbar(c)
    #plt.show()
    ####
    vtkfile << (u, t)
    u_n.assign(u)
```


```python
1E-13
```




    1e-13




```python
1e2
```




    100.0




```python
1E-13+1e2
```




    100.0000000000001



# Boundary conditions


```python
#1 Loading functions  and modules
from fenics import *
import matplotlib.pyplot as plt
T = 4
num_steps = 200
dt = T/num_steps
rho = 7500
Cp = 500
k = 50
alpha = k/(rho*Cp)
```


```python
#2 Create mesh and define function space
nx = 0.008
ny = 0.003
mesh = RectangleMesh(Point(0,0),Point(nx,ny),8, 8,'left')
V = FunctionSpace(mesh, 'Lagrange', 1) #Lagrange are triangular elements
plot(mesh)
plt.show()


```


![png](output_10_0.png)



```python
#Boundary Conditions
tol = 1E-14

def BC1(x, on_boundary):
    return on_boundary and abs(x[0]-nx) < tol

def BC2(x, on_boundary):
    return on_boundary and abs(x[0]-0) < tol

bc1=DirichletBC(V,Constant(25),BC1)
bc2=DirichletBC(V,Constant(800),BC2)
bc=(bc1,bc2)
```


```python
u_n = project(25, V)
u = TrialFunction(V)
v = TestFunction(V)
f = Constant(0.0)
F = u*v*dx + alpha*dt*dot(grad(u), grad(v))*dx-u_n*v*dx
a, L = lhs(F), rhs(F)
```


```python
vtkfile = File('solution/solution2.pvd')
u = Function(V)
t = 0
for n in range(num_steps):
    t += dt
    #u0.t = t
    solve(a == L, u, bc)
    vtkfile << (u, t)
    #c = plot(u,)
    #plt.colorbar(c)
    #plt.show()
    u_n.assign(u)
```


```python

```
