Voici mon programme qui renvoie le temps à partir duquel la nappe est salinisée. Je voudrais aussi remplir graphiquement mon aquifère au fur et à mesure que le programme tourne, jusqu'au puit, ce qui modéliserait l'avancée de l'eau salée jusqu'au puits de pompage. J'ai essayé de faire cela en mettant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
   L=[ii for ii in range(n,Eau_salee+1,1)]   
 
    a1=[jj for jj in range(Eau_salee,n,1)]+L[::-1]
    b1=Si+Sj
    plt.fill_between(o,a1,b1,where=None,interpolate=True,hold=None)
Cependant voici l'erreur que python me renvoie : Traceback (most recent call last):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 File "<stdin>", line 1, in <module>
  File "<stdin>", line 46, in temps_salinisation
  File "C:\Users\Roxane\Anaconda\lib\site-packages\matplotlib\pyplot.py", line 2820, in fill_between
    interpolate=interpolate, **kwargs)
  File "C:\Users\Roxane\Anaconda\lib\site-packages\matplotlib\axes\_axes.py", line 4318, in fill_between
    y2 = ma.masked_invalid(self.convert_yunits(y2))
  File "C:\Users\Roxane\Anaconda\lib\site-packages\numpy\ma\core.py", line 2237, in masked_invalid
    condition = ~(np.isfinite(a))
TypeError: ufunc 'isfinite' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
En revanche, cela fonctionne en scilab en mettant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
        a1=[Leau_salee:n, n:-1:Leau_salee+1]
        b1=[Si,Sj]
        xfpoly(a1,b1,22)
mais, moi je dois le traduire en python.

Voici mon programme complet :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.pyplot import fill_between
 
x=[58,52,51,49,47,45,44,42,35,26,43,17,0]
y=[-50,-62,-61,-60,-60,-61,-61,-61,-61,-61,-61,-62,-61]
z=[-80,-88,-85,-83,-82,-83,-85,-85,-86,-87,-89,-91,-93]
a=[-89,-93,-95,-101,-112,-120,-126,-127,-124,-119,-118,-118,-117]
b=[-145,-155,-160,-168,-182,-192,-201,-204,-206,-207,-210,-212,-214]
c=[-379,-390,-400,-395,-396,-382,-373,-383,-434,-490,-537,-409,-409]
e=[-571,-549,-530,-519,-509,-495,-482,-494,-549,-611,-670,-504,-504]
 
o=[0,1,2,3,4,5,6,7,8,9,10,11,12]
 
px = [6,6]   
py= [0,-100] 
 
def temps_salinisation(n,q,p): #n distance du forage à la mer, q point du forage 
    plt.plot(x)
    plt.plot(y)
    plt.plot(z)
    plt.plot(a)
    plt.plot(b)
    plt.plot(c)
    plt.plot(e)
    px = [10,10] #position du puit
    py= [0,-120] #position du puit
    plt.plot(px,py, 'r-')
    plt.grid(True)
    plt.show()
 
    K=0.0006 #coefficient de perméabilité du sable fin 
    I=Y[p]
    J=Z[p]
    Eau_salee=n
    les=n #variable qui détermine les dx parcouru par l'eau à chaque dt jusqu'à atteindre Leau_salle-1. à t=0, les=Leau_salee
    Ymin=I[0]
    Zmax=J[0]
    for k in range(2,n,1):
        if I[k]< Ymin: 
            Ymin=I[k] #on détermine la profondeur maximale du toit de la nappe
        elif J[k]>Zmax:
            Zmax=J[k] # on détermine la hauteur maximale du plancher de la nappe
    hauteur_forage=[X[p][q]+.05,(Ymin+Zmax)/2] # détermine la profondeur du forage
    h=abs(Ymin-hauteur_forage[1]) #détermine la hauteur du cylindre dans lequel s'applique la loi de Darcy, en prenant en compte Ymin et Xmaxdétermine la profondeur du forage
    d= n-q #distance à parcourir jusqu'au point de forage.
    t=0
    while Eau_salee > q: #tant que la limite d'eau salée n'a pas atteint le puit
        Si=[]
        Sj=[]
        while les > Eau_salee-1 : 
            les= les-K*(h/d)*k #La loi de Darcy nous donne un débit volumique. on peut donc en déduire le volume d'eau introduit à chaque dt, et en simplifiant par la Section, on trouve la distance parcourue -tps nous donne le nombre de dt écoulés pour que l'eau salée atteigne le forage
            t=t+1
        Eau_salee=Eau_salee-1
        for i in range(Eau_salee,n,1) : 
            Sj=Sj+[J[n-i+1]]
        for i in range(Eau_salee,n,1): 
             Si=Si+[I[i]]   
    L=[ii for ii in range(n,Eau_salee+1,1)]   
 
    a1=[jj for jj in range(Eau_salee,n,1)]+L[::-1]
    b1=Si+Sj
    plt.fill_between(o,a1,b1,where=None,interpolate=True,hold=None)
    return (t)
Je m'adresse ici pour savoir si quelqu'un trouverait l'origine de l'erreur, et s'il aurait une idée pour la corriger, merci d'avance. (Je suis une élève de prepa bcpst, et je fais ce programme dans le cadre du TIPE)