-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFDexplicite1D_thermic_diffusion.py
105 lines (93 loc) · 2.68 KB
/
FDexplicite1D_thermic_diffusion.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# Difference finie explicit
# Exemple : intrusion d'un dike
import numpy as np
import matplotlib.pyplot as plt
import time
from pylab import *
ion() # mode d'interaction
# Paramètre physique
L = 100 # longueur du modèle en m
Tmagma = 1200 # temperature du magma °C
Trock = 300 # température de l'encaissant °C
kappa = 1e-6 # constante de diffusivité thermal de la roche m²/s
W = 50 # epaisseur en m
xmin = -100. # mettre des virgule pour manipuler des float de maniere automatique
xmax = 100.
dx = 2.
nstep = 100
dt = 10*3600*24. # soit 10 jours
x = np.linspace(xmin, xmax, nstep)
T = np.ones(len(x))*Trock # initial temperature vector of rocks
# bordure du dike
xleft = 0-W/2
xright = 0+W/2
for i in range(0, len(x)):
if xleft <= x[i] and xright >= x[i]:
T[i] = Tmagma
t = 0 # initialisation du temps
for n in range(0, len(x)):
Tnew = np.zeros(len(x))
Tnew[0] = T[0]
Tnew[len(x)-1] = T[len(x)-1]
for i in range(1, len(x)-1):
cfl = kappa*dt/(dx**2) # le carré est symbolisé par un double asterix
Tnew[i] = T[i]+cfl*(T[i+1]-2*T[i]+T[i-1])
# figure
plt.plot(x, Tnew, 'r-')
plt.show() # activation du plot interactif
time.sleep(0.1)
T = Tnew
t = t+dt
# # Difference finie explicit
# # Exemple : intrusion d'un dike
# import numpy as np
# import matplotlib.pyplot as plt
# import time
# from pylab import *
# #
# ion() # mode d'interaction
# #
# # Paramètre physique
# L = 100 # longueur du modèle en m
# Tmagma = 1200 # temperature du magma °C
# Trock = 300 # température de l'encaissant °C
# kappa = 1e-6 # constante de diffusivité thermal de la roche m²/s
# W = 50 # epaisseur en m
# #
# xmin = -100. # mettre des virgule pour manipuler des float de maniere automatique
# xmax = 100.
# dx = 2.
# nstep = 100
# dt = 10*3600*24. # soit 10 jours
# #
# x = np.linspace(xmin, xmax, nstep)
# #
# T = np.ones(len(x))*Trock # initial temperature vector of rocks
# #
# # bordure du dike
# xleft = 0-W/2
# xright = 0+W/2
# #
# for i in range(0, len(x)):
# if xleft <= x[i] and xright >= x[i]:
# T[i] = Tmagma
#
# #
# t = 0 # initialisation du temps
# #
# for n in range(0, len(x)):
# Tnew = np.zeros(len(x))
# Tnew[0] = T[0]
# Tnew[len(x)-1] = T[len(x)-1]
# #
# for i in range(1, len(x)-1):
# cfl = kappa*dt/(dx**2) # le carré est symbolisé par un double asterix
# Tnew[i] = T[i]+cfl*(T[i+1]-2*T[i]+T[i-1])
# figure
# draw() # force le dessin de la figure
# pause(0.05)
# T = Tnew
# t = t+dt # recalcul pour les nouvelles valeurs
# #
# ioff() # mode d'interaction off
# show()