Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Les simulations tronquées permettent de générer des variables catégorielles (faciès, lithologies, types de roches) à partir de champs gaussiens continus. Le principe est simple : on simule d’abord un ou plusieurs champs gaussiens en utilisant des méthodes géostatistiques classiques (LU, SGS, FFT-MA, bandes tournantes), puis on transforme ces champs continus en catégories en appliquant des seuils ou des zones de codage.

Cette approche permet de contrôler les proportions de chaque catégorie, de reproduire la continuité spatiale via le variogramme du champ gaussien, et, selon le modèle, d’imposer certaines relations spatiales entre les faciès (transitions permises ou interdites, proportions variables, etc.).

On distingue deux variantes principales :

  1. la simulation gaussienne tronquée, qui utilise un seul champ gaussien découpé en intervalles ordonnés ;

  2. la simulation plurigaussienne, plus flexible, qui combine plusieurs champs gaussiens pour définir des organisations spatiales plus complexes.

Simulation Gaussienne Tronquée

Le modèle gaussien tronqué simule une variable gaussienne continue, puis applique des seuils pour obtenir des faciès catégoriels respectant les proportions observées. L’algorithme non conditionnelle est assez simple :

  1. Ordonnancement des faciès
    Les faciès doivent être ordonnés (par exemple F1 < F2 < F3). Cet ordonnancement détermine les transitions possibles : seuls les faciès successifs peuvent être contigus dans l’espace, ce qui interdit par exemple une transition directe entre F1 et F3.

  2. Détermination des seuils gaussiens
    À partir des proportions globales des faciès, on calcule les seuils gaussiens correspondants en utilisant les quantiles d’une loi normale standard N(0,1)N(0,1). Ces seuils définissent les intervalles dans lesquels la valeur simulée du champ gaussien sera tronquée pour produire le faciès associé. La champ gaussian, que l’on considère comme latent, est de moyenne nulle et variance unitaire.

  3. Appliquer les seuils de codage. Une simulation gaussienne non conditionnelle est générée à l’aide d’une méthode classique (LU, SGS, FFT-MA, bandes tournantes). Une fois le champ continu obtenu, chaque valeur est comparée aux seuils déterminés à l’étape 2 : si elle tombe dans l’intervalle correspondant au faciès kk, la cellule est codée comme appartenant à ce faciès. Le champ gaussien est ainsi transformé en un champ catégoriel, garantissant les proportions souhaitées et les relations spatiales découlant du modèle.

La Fig. 1 présente un exemple d’application avec trois faciès, notés F1F_1, F2F_2 et F3F_3, dont les probabilités respectives sont p1=13p_1 = \frac{1}{3}, p2=12p_2 = \frac{1}{2} et p3=16p_3 = \frac{1}{6}. Les seuils de codage sont déterminés à partir de la fonction de répartition FF de la loi normale standard N(0,1)N(0,1). Le premier seuil, s1s_1, correspondant à la transition entre F1F_1 et F2F_2, est donné par s1=F1(p1)=F1(13)=0.43073s_1 = F^{-1}(p_1) = F^{-1}\left(\frac{1}{3}\right) = -0.43073. Le second seuil, s2s_2, correspondant à la transition entre F2F_2 et F3F_3, est obtenu en cumulant les proportions des deux premiers faciès : s2=F1(p1+p2)=F1(56)=0.96742s_2 = F^{-1}(p_1 + p_2) = F^{-1}\left(\frac{5}{6}\right) = 0.96742. Toute valeur gaussienne inférieure à s1s_1 est alors codée F1F_1, toute valeur comprise entre s1s_1 et s2s_2 est codée F2F_2, et toute valeur supérieure à s2s_2 est codée F3F_3. En utilisant un variogramme gaussien de portée 50 avec ces proportions, on obtient le champ de faciès illustré dans la Fig. 2, où l’on observe que la transition entre F1F_1 (bleu) et F3F_3 (rouge) doit obligatoirement passer par F2F_2 (vert); ainsi, F1F_1 et F3F_3 ne peuvent jamais être contigus.

Ainsi, le modèle implique que seuls les faciès successifs peuvent être contigus spatialement. Ainsi la transition F1F_1F3F_3 ne peut être observée. Le choix de l’ordre des faciès doit respecter les relations observées.

Exemple de seuil de codage pour une simulation gaussienne tronquée avec p_1 = \frac{1}{3}, p_2 = \frac{1}{2} et p_3 = \frac{1}{6}.

Figure 1:Exemple de seuil de codage pour une simulation gaussienne tronquée avec p1=13p_1 = \frac{1}{3}, p2=12p_2 = \frac{1}{2} et p3=16p_3 = \frac{1}{6}.

Exemple de simulation gaussienne tronquée réalisée à partir d’un champ latent gaussien suivant un variogramme gaussien de portée effective de 50 pixels, sur une grille de 250 par 250 pixels.

Figure 2:Exemple de simulation gaussienne tronquée réalisée à partir d’un champ latent gaussien suivant un variogramme gaussien de portée effective de 50 pixels, sur une grille de 250 par 250 pixels.

Comment décider du variogramme de la variable latente gaussienne?

Une difficulté importante de la méthode TGS réside dans l’identification de la structure spatiale du champ latent à modéliser. En effet, les données disponibles sont uniquement des faciès, c’est-à-dire des variables catégorielles. Nous ne disposons donc d’aucune variable continue permettant d’estimer directement un variogramme expérimental du champ gaussien latent. Les seules informations accessibles sont les variogrammes des indicatrices, qui ne se traduisent pas automatiquement en un variogramme latent unique. Il faut réaliser quelque manipulations mathématiques pour relier les variogrammes d’indicatrices aux variogramme de la structure latente continues.

Pour contourner ce problème, la méthode TGS s’appuie sur une calibration indirecte, basée sur les probabilités conjointes qui peuvent être estimées à partir des données de faciès. Ces probabilités correspondent à des intégrales de la loi binormale définies par la covariance latente inconnue. La stratégie consiste donc à ajuster la covariance (ou le variogramme) du champ gaussien latent de manière à ce que les probabilités binormales reproduisent au mieux les probabilités expérimentales.

Considérons une variable gaussienne latente Z(x)Z(x) et un champ catégoriel W(x)W(x) obtenu par troncature de Z(x)Z(x). Notons

pij(h)=P(W(x)=i,  W(x+h)=j)=E ⁣[Ii(x)Ij(x+h)]p_{ij}(h) = P\big( W(x)=i,\; W(x+h)=j \big) = E\!\left[ I_i(x)\, I_j(x+h) \right]

la probabilité d’observer simultanément le faciès ii en xx et le faciès jj en x+hx+h. Cette quantité peut être estimée empiriquement à partir des données. Il suffit de compter, pour chaque distance hh, le nombre de paires de points (x,x+h)(x, x+h) où l’on observe simultanément W(x)=iW(x)=i et W(x+h)=jW(x+h)=j, puis de normaliser par le nombre total de paires disponibles à cette distance. Ainsi, pij(h)p_{ij}(h) est simplement une fréquence relative observée.

La probabilité expérimentale peut s’estimer par :

p^ij(h)=1N(h)(x,x+h)1{W(x)=i}1{W(x+h)=j},\hat p_{ij}(h) = \frac{1}{N(h)} \sum_{(x,\,x+h)} \mathbb{1}\{ W(x)=i \}\,\mathbb{1}\{ W(x+h)=j \},

N(h)N(h) est le nombre total de paires de points séparées de la distance hh, et 1{}\mathbb{1}\{\cdot\} est la fonction indicatrice.

De plus, comme chaque faciès ii correspond à un intervalle de troncature [ci1,ci][c_{i-1}, c_i] du champ latent, on peut écrire :

W(x)=ici1<Z(x)ci.W(x)=i \quad \Longleftrightarrow \quad c_{i-1} < Z(x) \le c_i.

Ainsi, la probabilité conjointe pij(h)p_{ij}(h) peut aussi s’écrire comme :

pij(h)=P(ci1<Z(x)ci,  cj1<Z(x+h)cj).p_{ij}(h) = P\left( c_{i-1} < Z(x) \le c_i,\; c_{j-1} < Z(x+h) \le c_j \right).

En revanche, la probabilité

P(ci1<Z(x)ci,  cj1<Z(x+h)cj)P\left( c_{i-1} < Z(x) \le c_i,\; c_{j-1} < Z(x+h) \le c_j \right)

peut être calculer théorique par l’intégrale de la densité binormale définie par la covariance du champ latent C(h)C(h). Ainsi, pour chaque distance hh, les probabilités expérimentales pij(h)p_{ij}(h) imposent une contrainte sur la covariance gaussienne C(h)C(h).

L’objectif est alors d’identifier la fonction de covariance C(h)C(h) qui minimise l’écart entre les probabilités théoriques pij(h)p_{ij}(h) issues du modèle binormal et leurs estimations empiriques p^ij(h)\hat p_{ij}(h) obtenues à partir des données catégorielles.

La Fig. 3 présente le calcul théorique issu du modèle binormal. La surface colorée représente la densité de la loi normale bidimensionnelle associée au couple gaussien corrélé (Z(x),Z(x+h))(Z(x), Z(x+h)). Les lignes rouges indiquent les seuils de troncature (ci1,ci)(c_{i-1}, c_i) et (cj1,cj)(c_{j-1}, c_j) définissant respectivement les faciès ii et jj. Le calcul de la probabilité conjointe pij(h)p_{ij}(h) correspond alors à l’intégrale de cette densité binormale sur le rectangle délimité par ces seuils, c’est-à-dire à la quantité

pij(h)=ci1<ucicj1<vcjfZ(x),Z(x+h)(u,v)dudv,p_{ij}(h) = \iint_{\substack{c_{i-1} < u \le c_i \\[2pt] c_{j-1} < v \le c_j}} f_{Z(x),Z(x+h)}(u,v)\,\mathrm{d}u\,\mathrm{d}v,

fZ(x),Z(x+h)(u,v)f_{Z(x),Z(x+h)}(u,v) est la densité normale bidimensionnelle de moyenne nulle, de variance unitaire et de covariance C(h)C(h).

La Fig. 4 présente les probabilités pij(h)=E ⁣[IiIj]p_{ij}(h)=E\!\left[ I_i\, I_j \right] associées au modèle TGS considéré (rappel : p1=13p_1 = \tfrac{1}{3}, p2=12p_2 = \tfrac{1}{2} et p3=16p_3 = \tfrac{1}{6}). On constate que les probabilités situées sur la diagonale sont décroissantes, ce qui s’explique par le fait que plus la distance hh augmente, plus la probabilité d’obtenir une paire de points appartenant à des faciès similaires devient rare. L’inverse se produit pour les transitions hors diagonale : il devient plus probable d’observer une transition entre deux faciès distincts lorsque la distance augmente. Il est également important de noter que pour h=0h = 0, on observe bien pij(h)=pip_{ij}(h)=p_i pour i=1,,3i=1,\ldots,3, tandis que les probabilités entre faciès différents sont nulles. Enfin, lorsque hh \to \infty, les probabilités convergent vers la limite pij(h)=pipjp_{ij}(h)=p_i\,p_j.

Exemple de calcul théorique issu du modèle binormal.

Figure 3:Exemple de calcul théorique issu du modèle binormal.

Probabilité des p_{ij}(h).

Figure 4:Probabilité des pij(h)p_{ij}(h).

Comment tenir compte des faciès observés aux points échantillons (quelles valeurs gaussiennes simuler aux points échantillons)?

Pour tenir compte des faciès observés aux points échantillons dans la méthode TGS, on utilise un échantillonnage de Gibbs. L’échantillonnage de Gibbs est une méthode de Monte-Carlo par chaînes de Markov (MCMC) qui permet d’échantillonner une distribution complexe en construisant une chaîne de Markov dont la loi stationnaire est précisément la distribution cible. Étant donnée une distribution de probabilité π\pi sur un espace Ω\Omega, l’algorithme génère une suite d’échantillons dont la distribution limite est π\pi, ce qui permet de tirer aléatoirement un élément de Ω\Omega selon la loi souhaitée.

Dans le contexte de la TGS, l’échantillonnage de Gibbs est nécessaire car les valeurs latentes Z(x)Z(x) ne sont pas directement observables : seules les catégories W(x)W(x), issues de la troncature du champ latent, sont connues. Le principe repose sur le fait que chaque faciès ii correspond à un intervalle de troncature [ci1,ci][c_{i-1}, c_i]. Ainsi, si le point xαx_\alpha appartient au faciès ii, alors la valeur latente associée doit obligatoirement vérifier :

ci1<Z(xα)ci.c_{i-1} < Z(x_\alpha) \le c_i.

L’objectif du Gibbs est donc d’échantillonner, pour chaque point où un faciès est observé, une valeur latente Z(xα)Z(x_\alpha) compatible à la fois avec la fonction de covariance C(h)C(h) et avec les contraintes de troncature imposées par les faciès observés.

L’algorithme d’échantillonnage de Gibbs pour le conditionnement du champ latent repose sur une application successive du krigeage simple, lequel, rappelons-le, permet d’obtenir la distribution statistique conditionnelle d’une variable gaussienne en un point donné. À chaque itération, on met à jour une valeur latente en utilisant toutes les autres valeurs déjà fixées. Les itérations du Gibbs s’effectuent alors comme suit :

Initialisation.
Pour chaque point échantillonné xix_i, choisir aléatoirement une valeur gaussienne Z(xi)Z(x_i) dans l’intervalle correspondant au faciès observé, c’est-à-dire :

W(xi)=kZ(xi)(ck1,ck].W(x_i)=k \quad \Longrightarrow \quad Z(x_i) \in (c_{k-1}, c_k].

Cette initialisation respecte donc le codage.

1. Sélection d’un point.
Choisir un point xix_i aléatoirement parmi les NN points à conditionner. Retirer temporairement la valeur courante Z(xi)Z(x_i) du système.

2. Estimation de la loi conditionnelle.
Estimer la distribution conditionnelle de Z(xi)Z(x_i), compte tenu de toutes les autres valeurs latentes restantes :

Z(xi)Z(reste)N(Z^(xi),σi2),Z(x_i)\,|\,Z(\text{reste}) \sim \mathcal{N}(\hat Z(x_i),\sigma_i^2),

(Z^(xi),σi2)(\hat Z(x_i),\sigma_i^2) proviennent du krigeage simple.

3. Échantillonnage tronqué.
Étant donné que W(xi)=kW(x_i)=k, tirer une nouvelle valeur de Z(xi)Z(x_i) à partir de la loi normale tronquée à l’intervalle imposé par le patron de codage :

Z(xi)N(mi,σi2)  tronqueˊaˋ  (ck1,ck].Z(x_i) \sim \mathcal{N}(m_i,\sigma_i^2)\;\text{tronquée à}\;(c_{k-1},c_k].

4. Mise à jour.
Remplacer l’ancienne valeur de Z(xi)Z(x_i) par la nouvelle valeur tirée.

5. Critère d’arrêt.
Vérifier un critère de convergence (nombre d’itérations, stabilité des moments, autocorrélation).
Si le critère est satisfait : arrêter.
Sinon : retourner à l’étape 1.

À la fin de multiple itération, nous nous retrouvons avec des valeurs gaussiennes corrélé selon C(h)C(h) et respectant les seuils. Ainsi, l’échantillonnage de Gibbs permet de générer un champ latent Z(x)Z(x) qui respecte simultanément la structure spatiale gaussienne imposée par le variogramme et les informations catégorielles observées via les intervalles du patron de codage.


Simulations Plurigaussiennes

Le modèle plurigaussien étend le modèle gaussien tronqué en utilisant plusieurs variables gaussiennes corrélées pour modéliser des faciès avec des relations spatiales plus complexes. Par simpliciter, nous verrons que le cas avec deux champs latents. On peut résumer l’algorithme par :

  1. Simulation de deux champs gaussiens avec une fonction de covariance
    C(h)=[C11(h)C12(h)C21(h)C22(h)]C(h)=\begin{bmatrix} C_{11}(h) & C_{12}(h) \\ C_{21}(h) & C_{22}(h) \end{bmatrix}

    Simuler deux variables gaussiennes Z1Z_1 et Z2Z_2 respectant la matrice de covariance C(h)C(h).
    Chaque champ possède son propre modèle de variogramme direct, et les deux champs peuvent être corrélés entre eux via les covariances croisées C12(h)C_{12}(h) et C21(h)C_{21}(h).

  2. Définition du plan de codage des faciès
    Associer chaque faciès à une zone (rectangle ou autre forme) du plan (Z1,Z2)(Z_1, Z_2).
    Ce plan encode les relations spatiales souhaitées (exclusions, transitions obligatoires, voisinages imposés).
    Les proportions des faciès sont déterminées par l’intégrale de la densité gaussienne bivariée sur les zones définies.

  3. Inférence des paramètres
    Calculer les covariances expérimentales des indicatrices ainsi que leurs covariances croisées.
    Ajuster ensuite les modèles de covariance des deux champs latents et leur corrélation afin de reproduire au mieux les structures spatiales observées dans les données.

  4. Conditionnement aux données observées : échantillonneur de Gibbs
    Pour chaque point d’observation xix_i, on applique un échantillonnage de Gibbs, où la loi conditionnelle de (Z1(xi),Z2(xi))(Z_1(x_i), Z_2(x_i)) est obtenue par cokrigeage simple conditionnellement aux valeurs latentes déjà fixées :

    • calculer la distribution normale conjointe conditionnelle (Z1,Z2)reste(Z_1, Z_2)\,|\,\text{reste} par cokrigeage simple ;

    • tirer une paire (z1,z2)(z_1, z_2) dans cette loi conditionnelle ;

    • vérifier que cette paire appartient à la zone du plan correspondant au faciès observé ;

    • sinon, répéter le tirage jusqu’à obtenir une paire compatible ;

    • mettre à jour la valeur latente et passer au point suivant ;
      Ce balayage est répété jusqu’à stabilisation (convergence du Gibbs).

  5. Simulation conditionnelle finale
    Réaliser une simulation gaussienne conditionnelle complète pour les champs Z1Z_1 et Z2Z_2 en utilisant les valeurs obtenues lors du conditionnement.
    Convertir ensuite le résultat en faciès à l’aide du plan de codage.

La Fig. 5 présente un exemple de patron de codage complexe. Par exemple, si l’on observe les valeurs latentes Z1=1Z_1 = -1 et Z2=1Z_2 = 1, le couple (1,1)(-1, 1) tombe dans le rectangle associé au faciès F1F_1, et celui-ci est donc attribué. La Fig. 6 illustre l’application de ce patron de codage à deux champs gaussiens indépendants. Le champ latent Z1(x)Z_1(x) suit un variogramme sphérique isotrope de portée 150 pixels, tandis que le champ latent Z2(x)Z_2(x) suit un variogramme sphérique isotrope de portée 260 pixels. Le domaine simulé couvre une grille de 500 × 500 pixels.

On constate que les relations spatiales entre les faciès générés sont très complexes, mais certaines structures sont clairement imposées par le patron de codage : le faciès F4F_4 est entièrement contenu dans F3F_3, tandis que les faciès F1F_1, F2F_2 et F3F_3 baignent dans F0F_0 et ne peuvent donc jamais entrer en contact direct les uns avec les autres.

La Fig. 7 présente quatre images : une image réelle aux rayons X montrant les pores d’un grès, ainsi que trois réalisations PGS générées pour reproduire cette structure. Selon vous, laquelle correspond à l’image réelle ? Il s’agit de celle située en haut à gauche. Les simulations sont suffisamment réalistes pour rendre la distinction non triviale voir impossible.

Exemple de plan de codage utilisé pour une simulation plurigaussienne à deux champs latents.

Figure 5:Exemple de plan de codage utilisé pour une simulation plurigaussienne à deux champs latents.

Exemple de simulation plurigaussienne réalisée à partir de deux champs latents gaussiens non corrélés, suivant respectivement des variogrammes sphérique isotrope de portées de 150 pixels et 260 pixels, sur une grille de 500 par 500 pixels.

Figure 6:Exemple de simulation plurigaussienne réalisée à partir de deux champs latents gaussiens non corrélés, suivant respectivement des variogrammes sphérique isotrope de portées de 150 pixels et 260 pixels, sur une grille de 500 par 500 pixels.

Une image aux rayons X montrant les pores d’un grès, accompagnée de trois réalisations plurigaussiennes (PGS). Selon vous, laquelle correspond à l’image réelle ?

Figure 7:Une image aux rayons X montrant les pores d’un grès, accompagnée de trois réalisations plurigaussiennes (PGS). Selon vous, laquelle correspond à l’image réelle ?