Calcul des tables de décompression
Grâce à notre expérience, on va tenter de calculer les tables de décompressions. Pour cela, on est obligé de faire des hypothèses et pas des moindres :
- L'air se dissout uniquement dans le sang (on néglige les tissus). On a donc V = 5,0 L
- La surface de contact entre le sang et l'air est de 75 cm
2. Cela correspond à la "surface" des 2 poumons coupés horizontalement :
En réalité, il faudrait prendre en compte la surface de contact des poumons avec l'air (130 m
2) mais cela donnait des résultats complètement aberrants.
- On suppose que les temps caractéristiques de la dissolution et du dégazage sont égaux. C'est-à-dire que qu'un volume V d'air met le même temps pour se dissoudre dans le sang que pour en être dégazé.
- On suppose que les temps caractéristiques de l'eau et du sang sont égaux. Un volume d'air met le même temps pour se dissoudre dans l'eau que dans le sang. Ceci est une très grosse approximation, le sang n'ayant rien à voir avec l'eau même s'il en est principalement constitué.
- On suppose que le coefficient de sursaturation critique doit être inférieur ou égal à 2. Ce coefficient est le rapport du volume d'air dissout dans le sang sur le volume d'air qui serait dissous à saturation dans le sang à la pression ambiante. Lorsque ce rapport est égal à 2, il faut faire un palier. Ce coefficient a été trouvé par Haldane en faisant des expériences sur des chèvres. Il avait remarqué que les chèvres avaient des accidents de décompression dans des conditions similaires à l'homme.
- Enfin, on définit les paliers possibles : 3, 6, 9 et 12 m. On doit toujours effectuer les paliers à ces profondeurs. Si, d'après le calcul, on doit par exemple s'arrêter à 4 m, on choisit le palier inférieur, c'est-à-dire 6 m dans notre exemple.
A partir de ces hypothèses, j'ai fait les calculs sur un fichier excel. Vous pouvez le télécharger ici :
Sur la feuille 2 du fichier, il suffit de modifier la profondeur pour que la table de décompression se calcule toute seule. Pour être plus proche de la réalité, il a fallu que je multiplie le temps caractéristique trouvé expérimentalement par 3. EN AUCUN CAS vous devez utiliser ces tables pour des plongées sous-marines. Vous devez utiliser les tables MN90.
Par la suite, j'ai fait un programme sous MAPLE qui génère un graphique plus parlant pour expliquer ce qu'il se passe dans le corps.
> with(plots):
> palier:=proc(p,t)
K:=evalf(3/6170);
S:=2;
Vmax:=x->99.5*((x/10)+1) - 99.5;
f[0]:=x->99.5 + Vmax(p)*(1-exp(-x*60*K));
courbe[0]:=plot(f[0](x),x=0..t,y=99.5..(99.5+Vmax(p)+50),numpoints=5000,color="SteelBlue",thickness=2,legend=["Plongee de "||t||"min"]);
prof[0]:=plot(Vmax(p)+99.5,x=0..t,y=99.5..(99.5+Vmax(p)+50),color=black);
texte[0]:=textplot([t/4,Vmax(p)+99.5,""||p||"m",'align'={'above','right'}]);
duree[0]:=t;
if evalf(((f[0](t)/2/99.5)-1)*10) <= 0 then palier1:=0; n:=0;
elif evalf(((f[0](t)/2/99.5)-1)*10) >= 0 and evalf(((f[0](t)/2/99.5)-1)*10) <= 3 then palier1:=3; n:=1;
elif evalf(((f[0](t)/2/99.5)-1)*10) > 3 and evalf(((f[0](t)/2/99.5)-1)*10) <= 6 then palier1:=6; n:=2;
elif evalf(((f[0](t)/2/99.5)-1)*10) > 6 and evalf(((f[0](t)/2/99.5)-1)*10) <= 9 then palier1:=9; n:=3;
else palier1:=12; n:=4;
fi;
if palier1>=3 then
duree[1]:=t + ceil(evalf(((-1/K)*ln(1-(f[0](t)-S*99.5*((1+0.1*palier1)-0.3))/(f[0](t)-99.5*(1+0.1*palier1))))/60));
f[1]:=x->f[0](t)-((f[0](t)-99.5*((palier1/10)+1))*(1-exp(-(x-t)*K*60)));
courbe[1]:=plot(f[1](x),x=t..duree[1],y=99.5..(f[0](t)+50),color=red,numpoints=5000,thickness=2,legend=["Palier de "||(duree[1]-t)||"min"]);
trait[1]:=implicitplot(x=t,x=t-1..t+1,y=Vmax(p)+99.5..Vmax(palier1)+99.5,color=black);
prof[1]:=plot(Vmax(palier1)+99.5,x=t..duree[1],y=99.5..(99.5+Vmax(p)+50),color=black);
texte[1]:=textplot([t,Vmax(palier1)+99.5,""||palier1||"m",'align'={'above','right'}]);
fi;
if palier1>=6 then
duree[2]:=duree[1] + ceil(evalf(((-1/K)*ln(1-(f[1](duree[1])-S*99.5*((1+0.1*(palier1-3))-0.3))/(f[1](duree[1])-99.5*(1+0.1*(palier1-3)))))/60));
f[2]:=x->f[1](duree[1])-((f[1](duree[1])-99.5*(((palier1-3)/10)+1))*(1-exp(-(x-duree[1])*K*60)));
courbe[2]:=plot(f[2](x),x=duree[1]..duree[2],y=99.5..(99.5+Vmax(p)+50),color=green,numpoints=5000,thickness=2,legend=["Palier de "||(duree[2]-duree[1])||"min"]);
trait[2]:=implicitplot(x=duree[1],x=duree[1]-1..duree[1]+1,y=Vmax(palier1)+99.5..Vmax(palier1-3)+99.5,color=black);
prof[2]:=plot(Vmax(palier1-3)+99.5,x=duree[1]..duree[2],y=99.5..(99.5+Vmax(p)+50),color=black);
texte[2]:=textplot([duree[1],Vmax(palier1-3)+99.5,""||(palier1-3)||"m",'align'={'above','right'}]);
fi;
if palier1>=9 then
duree[3]:=duree[2] + ceil(evalf(((-1/K)*ln(1-(f[2](duree[2])-S*99.5*((1+0.1*(palier1-2*3))-0.3))/(f[2](duree[2])-99.5*(1+0.1*(palier1-(2)*3)))))/60));
f[3]:=x->f[2](duree[2])-((f[2](duree[2])-99.5*(((palier1-2*3)/10)+1))*(1-exp(-(x-duree[2])*K*60)));
courbe[3]:=plot(f[3](x),x=duree[2]..duree[3],y=99.5..(99.5+Vmax(p)+50),color="Chocolate",thickness=2,numpoints=5000,legend=["Palier de "||(duree[3]-duree[2])||"min"]);
trait[3]:=implicitplot(x=duree[2],x=duree[2]-1..duree[2]+1,y=Vmax(palier1-3)+99.5..Vmax(palier1-6)+99.5,color=black);
prof[3]:=plot(Vmax(palier1-6)+99.5,x=duree[2]..duree[3],y=99.5..(99.5+Vmax(p)+50),color=black);
texte[3]:=textplot([duree[2],Vmax(palier1-6)+99.5,""||(palier1-6)||"m",'align'={'above','right'}]);
fi;
if palier1>=12 then
duree[4]:=duree[3] + ceil(evalf(((-1/K)*ln(1-(f[3](duree[3])-S*99.5*((1+0.1*(palier1-3*3))-0.3))/(f[3](duree[3])-99.5*(1+0.1*(palier1-(3)*3)))))/60));
f[4]:=x->f[3](duree[3])-((f[3](duree[3])-99.5*(((palier1-3*3)/10)+1))*(1-exp(-(x-duree[3])*K*60)));
courbe[4]:=plot(f[4](x),x=duree[3]..duree[4],y=99.5..(99.5+Vmax(p)+50),color="DarkOrchid",thickness=2,legend=["Palier de "||(duree[4]-duree[3])||"min"]);
trait[4]:=implicitplot(x=duree[3],x=duree[3]-1..duree[3]+1,y=Vmax(palier1-6)+99.5..Vmax(palier1-9)+99.5,color=black);
prof[4]:=plot(Vmax(palier1-9)+99.5,x=duree[3]..duree[4],y=99.5..(99.5+Vmax(p)+50),color=black);
texte[4]:=textplot([duree[3],Vmax(palier1-9)+99.5,""||(palier1-9)||"m",'align'={'above','right'}]);
fi;
display({seq(courbe[j],j=0..n),seq(prof[j],j=0..n),seq(texte[j],j=0..n),seq(trait[j],j=1..n)},title="Profondeur maximum "||p||"m, duree totale "||(duree[n])||"min",labels=["Temps de plongee (en min)","Volume d'air dissous dans le sang (en ml)"],labeldirections=["horizontal","vertical"],linestyle=solid,titlefont=["ROMAN",15],labelfont=[HELVETICA,10],axesfont=["HELVETICA","ROMAN",8],legendstyle=[font=["HELVETICA",9]]);
end proc:
> palier(40,35);

Ici, j'ai pris l'exemple d'une plongée qui se déroule à 40 m pendant 35 min. Pendant les 35 min de plongée, on remarque que la quantité d'air dissous dans le sang augmente. Au bout de 35 min, on décide de remonter. D'après le coefficient de sursaturation critique, nous devons faire un premier palier à 9 m de 1 min pour pouvoir remonter à 6 m sans aucuns soucis. De même, on doit ensuite faire un palier de 20 min à 6 m puis un palier de 27 min à 3 m.
En comparaison, pour une plongée de 35 min à 40 m, les tables MN90 imposent un palier de 8 min à 6 m et un palier de 35 min à 3 m. Soit un temps de remontée total de 47 min contre 48 min dans mon modèle. On trouve un résultat proche grâce à mon facteur de correction qu'il n'a pas lieu d'être normalement.
Nous voyons ainsi que l'élaboration d'un modèle pour prévoir les paliers n'est pas simple. J'ai fait de nombreuses approximations or le modèle est bien plus complexe en réalité. Dans le modèle officiellement utilisé, le corps humain est divisé en 7 compartiments différents avec chacun des coefficients de sursaturation critique différents. Maintenant, on préfère utiliser des statistiques pour mettre au point les algorithmes des ordinateurs de plongée. Effectivement, une base de donnée des différents accidents de décompression qu'il y a eu lieu avec les paramètres de plongée correspond a été constitué. C'est dans ce sens que Comex a fait une proposition de modification des tables françaises suite à une étude statistiques des accidents de décompression.