{"id":1209,"date":"2026-08-21T14:28:52","date_gmt":"2026-08-21T14:28:52","guid":{"rendered":"https:\/\/matforge.org\/?p=1209","raw":"https:\/\/matforge.org\/?p=1209"},"modified":"2026-08-21T14:28:52","modified_gmt":"2026-08-21T14:28:52","slug":"geophysics-applications-with-python-groundwater-flow-and-seismic-modeling","status":"publish","type":"post","link":"https:\/\/matforge.org\/fr\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\/","title":{"rendered":"Applications de la g\u00e9ophysique avec Python : d\u00e9bit des eaux souterraines et mod\u00e9lisation sismique","raw":"Applications de la g\u00e9ophysique avec Python : d\u00e9bit des eaux souterraines et mod\u00e9lisation sismique"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\"> 11<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span><p>Les ph\u00e9nom\u00e8nes g\u00e9ophysiques &#8211; du d\u00e9bit des eaux souterraines \u00e0 la propagation des ondes sismiques &#8211; sont r\u00e9gis par des \u00e9quations aux d\u00e9riv\u00e9es partielles qui d\u00e9crivent comment les grandeurs physiques changent dans l&rsquo;espace et dans le temps. Le poste 242 a introduit le cadre PDE plus large pour la mod\u00e9lisation des syst\u00e8mes terrestres, couvrant les m\u00e9thodes de volume fini et les outils disponibles pour s&rsquo;attaquer \u00e0 ces \u00e9quations \u00e0 l&rsquo;\u00e9chelle. Cet article se concentre sur deux domaines pratiques o\u00f9 Python a transform\u00e9 les flux de travail g\u00e9ophysiques&nbsp;: <strong>mod\u00e9lisation des flux d&rsquo;eau souterraine<\/strong> et <strong>mod\u00e9lisation des ondes sismiques<\/strong>.<\/p>\n<p>Dans les deux domaines, Python a d\u00e9plac\u00e9 le paradigme d&rsquo;un logiciel propri\u00e9taire en bo\u00eete noire \u00e0 une recherche transparente et reproductible. Que vous configuriez une simulation d&rsquo;eau souterraine Modflow avec Flopy ou que vous impl\u00e9mentiez un solveur d&rsquo;\u00e9quations \u00e0 diff\u00e9rence finie avec DeVito, Python offre la m\u00eame combinaison de clart\u00e9 math\u00e9matique, de flexibilit\u00e9 des \u00e9cosyst\u00e8mes et de soutien communautaire qui a remodel\u00e9 le calcul scientifique dans toutes les disciplines.<\/p>\n<p>Nous allons parcourir des exemples de code Python concrets, comparer les \u00e9cosyst\u00e8mes d&rsquo;outils (Modflow\/Flopy vs Devito\/Sweep) et montrer comment s\u00e9lectionner le bon outil pour votre probl\u00e8me g\u00e9ophysique sp\u00e9cifique.<\/p>\n<h2>Mod\u00e9lisation de l&rsquo;\u00e9coulement des eaux souterraines avec Modflow et Flopy<\/h2>\n<p>L&rsquo;\u00e9coulement des eaux souterraines \u00e0 travers les milieux poreux est l&rsquo;une des applications les plus matures de la g\u00e9ophysique informatique. Les \u00e9quations qui gouvernent associent la loi de Darcy \u00e0 la conservation de masse, produisant une PDE de type diffusion qui, malgr\u00e9 sa relative simplicit\u00e9 par rapport \u00e0 la propagation des ondes sismiques, pr\u00e9sente des d\u00e9fis pratiques dans la param\u00e9trisation, les conditions aux limites et la stabilit\u00e9 num\u00e9rique.<\/p>\n<h3>L&rsquo;\u00e9quation r\u00e9gissant<\/h3>\n<p>L&rsquo;\u00e9coulement des eaux souterraines suit la <strong>Darcy&rsquo;s Law<\/strong> combin\u00e9 avec la conservation de masse, produisant la PDE de type diffusion&nbsp;:<\/p>\n<p>\u2202\u2202x(kxx\u2202H\u2202x)+\u2202\u2202y(Kyy\u2202H\u2202y) +\u2202\u2202Z(KZZ\u2202H\u2202Z)+W=SS\u2202H\u2202t<br \/> frac{partial {partial x}left(k_{xx}frac{partial h}{partial x}right) + frac{partial {partial y}left(k_{yy}frac{partial h}{partial y}right) + frac{partial {partial z}left(k_{zz}frac{partial z}right) + w = s_sfrac{partielle h}{partielle t}<\/p>\n<p>o\u00f9<\/p>\n<p>HH<\/p>\n<p>est la t\u00eate hydraulique,<\/p>\n<p>KK<\/p>\n<p>est la conductivit\u00e9 hydraulique,<\/p>\n<p>WW<\/p>\n<p>repr\u00e9sente les sources et les puits (puits, recharge), et<\/p>\n<p>ss_s<\/p>\n<p>est un stockage sp\u00e9cifique [1].<\/p>\n<p>La discr\u00e9tisation des diff\u00e9rences finies sous-jacente \u00e0 MODFLOW est bien adapt\u00e9e aux r\u00e9seaux structur\u00e9s, ce qui en fait la norme de l&rsquo;industrie pour les \u00e9tudes r\u00e9gionales sur les eaux souterraines. Mais travailler directement avec les fichiers d&rsquo;entr\u00e9e de Modflow est fastidieux &#8211; c&rsquo;est l\u00e0 que Flopy entre.<\/p>\n<h3>Premiers pas avec Flopy<\/h3>\n<p><a href=\"https:\/\/github.com\/modflowpy\/flopy\" target=\"_blank\" rel=\"nofollow noopener\">Flopy<\/a> est un package Python qui automatise les flux de travail ModFlow 6&nbsp;: il g\u00e9n\u00e8re des fichiers d&rsquo;entr\u00e9e, ex\u00e9cute des simulations et analyse la sortie pour la visualisation. L&rsquo;\u00e9cosyst\u00e8me s&rsquo;est \u00e9tendu au-del\u00e0 de Flopy lui-m\u00eame pour inclure <code>modflow-setup<\/code> (USGS, 2022) pour l&rsquo;automatisation du flux de travail, <code>SFRmaker<\/code> pour le routage de l&rsquo;eau de surface et <code>Linesink-Maker<\/code> pour le routage des flux. Ensemble, ils forment un \u00e9cosyst\u00e8me complet pour la construction et l&rsquo;automatisation des mod\u00e8les d&rsquo;eau souterraine [2].<\/p>\n<p>Voici un d\u00e9marrage rapide pratique de Flopy pour un mod\u00e8le simple d&rsquo;eau souterraine :<\/p>\n<div>\n<pre><code>import flopy\nimport numpy as np\n\n# Define model parameters\nmodel_name = 'simple_groundwater'\ntop = 100.0 # model top elevation\nbotm = 0.0 # bottom elevation\nnlay = 10 # number of layers\nnrow = 50 # number of rows\nncol = 50 # number of columns\n\n# Create model simulation\nsim = flopy.mf6.MFSimulation(sim_name=model_name, exe_name='mf6')\nibs = flopy.mf6.ModIbs(sim)\nsts = flopy.mf6.ModSts(sim)\n\n# Create model domain (discharge package)\ndis = flopy.mf6.MFDischarge(sim, print_flows=True, save_first=True)\n\n# Set up numerical grid\ngrid = flopy.mf6.MFModelGrid((nlay, nrow, ncol), top=top)\n\n# Define hydraulic properties\nk = np.full((nlay, nrow, ncol), 1e-3) # hydraulic conductivity (m\/s)\nhsy = np.full((nrow, ncol), 95.0) # head at surface (head boundary)\nss = np.full((nlay, nrow, ncol), 1e-4) # specific storage\n\n# Create simulation and run\nsim.create_simulation()\n# ... set up stress packages, run simulation<\/code><\/pre>\n<\/div>\n<p>Le principal avantage de Flopy est qu&rsquo;il remplace des dizaines de fichiers d&rsquo;entr\u00e9e Modflow par une seule API Python. Vous d\u00e9finissez la g\u00e9om\u00e9trie de la grille, les propri\u00e9t\u00e9s hydrauliques et les conditions aux limites en tant qu&rsquo;objets Python, et Flopy traite la g\u00e9n\u00e9ration, la validation et l&rsquo;ex\u00e9cution des fichiers.<\/p>\n<h3>Visualisation et r\u00e9sultats<\/h3>\n<p>Les capacit\u00e9s de visualisation de Flopy facilitent l&rsquo;interpr\u00e9tation des r\u00e9sultats de la simulation. Apr\u00e8s avoir ex\u00e9cut\u00e9 une simulation&nbsp;:<\/p>\n<div>\n<pre><code># Load model results\nmf = flopy.modflow.Modflow(sim)\nh = mf.hds.get_data()\n\n# Plot head contours and flow vectors\nmodel.plot_head()\nmodel.plot_vector_flow()<\/code><\/pre>\n<\/div>\n<p>Cela produit des trac\u00e9s de contour de la t\u00eate et une visualisation des flux vectoriels [3] &#8211; le type de sortie que les hydrog\u00e9ologues utilisent pour interpr\u00e9ter les r\u00e9gimes d&rsquo;\u00e9coulement, identifier les chemins d&rsquo;\u00e9coulement et valider le comportement du mod\u00e8le.<\/p>\n<p>La sortie de visualisation de Flopy montre les contours de la t\u00eate hydrauliques recouverts de vecteurs de flux, ce qui facilite la compr\u00e9hension des sch\u00e9mas de mouvement des eaux souterraines dans les syst\u00e8mes aquif\u00e8res complexes. La visualisation de d\u00e9marrage rapide de Flopy d\u00e9montre clairement cette capacit\u00e9.<\/p>\n<figure><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/raw.githubusercontent.com\/modflowpy\/flopy\/develop\/examples\/images\/quickstart.png\" alt=\"Visualisation de d\u00e9marrage rapide de Flopy montrant les contours de la t\u00eate et le flux vectoriel. Attribution&nbsp;: modflowpy.\" width=\"1200\" height=\"675\"><figcaption aria-hidden=\"true\">Visualisation de d\u00e9marrage rapide de Flopy montrant les contours de la t\u00eate et le flux vectoriel. Attribution&nbsp;: modflowpy.<\/figcaption><\/figure>\n<p><strong>Attribution<\/strong>&nbsp;: Flopy QuickStart.png \u2014 ModFlowPy<\/p>\n<h3>Flux de travail pratique avec modflow-setup<\/h3>\n<p>Pour les projets plus importants, <a href=\"https:\/\/github.com\/doi-usgs\/modflow-setup\" target=\"_blank\" rel=\"nofollow noopener\">modflow-setup<\/a> fournit une approche de configuration bas\u00e9e sur YAML. Construit automatiquement des grilles \u00e0 partir de donn\u00e9es source. Cela repr\u00e9sente le passage \u00e0 l&rsquo;automatisation de workflow moderne. Vous d\u00e9finissez la structure du mod\u00e8le dans les fichiers de configuration d\u00e9clarative et modflow-setup g\u00e8re la g\u00e9om\u00e9trie fastidieuse et l&rsquo;affectation des propri\u00e9t\u00e9s.<\/p>\n<p>Le flux de travail pratique ressemble \u00e0 ceci :<\/p>\n<ol type=\"1\">\n<li><strong>D\u00e9finir les propri\u00e9t\u00e9s de la grille et de l&rsquo;aquif\u00e8re<\/strong> (conductivit\u00e9, coefficients de stockage, \u00e9paisseurs de couche)<\/li>\n<li><strong>D\u00e9finir les conditions aux limites<\/strong> (t\u00eates constantes, puits, taux de recharge)<\/li>\n<li><strong>Ex\u00e9cutez la simulation<\/strong> via l&rsquo;ex\u00e9cution automatique de ModFlow&nbsp;6 de Flopy<\/li>\n<li><strong>Visualisez les r\u00e9sultats<\/strong> avec les utilitaires de tra\u00e7age de Flopy ou exportez vers Paraview pour le rendu 3D<\/li>\n<\/ol>\n<p>Pour les hydrog\u00e9ologues travaillant avec des mod\u00e8les r\u00e9glementaires d&rsquo;eau souterraine, ce flux de travail est essentiel car MODFLOW reste la norme de l&rsquo;industrie pour la r\u00e9gulation et la gestion des eaux souterraines appliqu\u00e9es [4]. Flopy comble le foss\u00e9 entre le prototypage de la recherche et les flux de production. Vous obtenez la reproductibilit\u00e9 et la flexibilit\u00e9 de Python tout en maintenant l&rsquo;acceptation r\u00e9glementaire des r\u00e9sultats de ModFlow.<\/p>\n<h2>Mod\u00e9lisation des ondes sismiques avec Python<\/h2>\n<p>La mod\u00e9lisation des ondes sismiques est fondamentalement diff\u00e9rente de l&rsquo;\u00e9coulement des eaux souterraines. L\u00e0 o\u00f9 les eaux souterraines suivent des \u00e9quations de type diffusion qui lissent les caract\u00e9ristiques nettes au fil du temps, la propagation des ondes sismiques suit la <strong>\u00e9quation des ondes \u00e9lastiques<\/strong> &#8211; une PDE hyperbolique du second ordre qui pr\u00e9serve les fronts d&rsquo;onde nets et n\u00e9cessite un traitement num\u00e9rique minutieux pour \u00e9viter la dispersion artificielle.<\/p>\n<h3>L&rsquo;\u00e9quation de l&rsquo;onde<\/h3>\n<p>L&rsquo;\u00e9quation des ondes \u00e9lastiques r\u00e9git la propagation des ondes sismiques :<\/p>\n<p>\u22022\ud835\udc2e\u2202t2=\u2207\u22c5(\ud835\udc02:\u2207\ud835\udc2e)+\ud835\udc1f<br \/> frac{partial^2 mathbf{u}}{partial t^2} = nabla cdot (mathbf{c}&nbsp;: nabla mathbf{u}) + mathbf{f}<\/p>\n<p>o\u00f9<\/p>\n<p>\ud835\udc2emathbf{u}<\/p>\n<p>est un d\u00e9placement,<\/p>\n<p>\ud835\udc02mathbf{c}<\/p>\n<p>est le tenseur de rigidit\u00e9, et<\/p>\n<p>\ud835\udc1fmathbf{f}<\/p>\n<p>repr\u00e9sente les forces corporelles.<\/p>\n<p>Contrairement au d\u00e9bit des eaux souterraines (o\u00f9 la pression diffuse et les gradients nets lisses), les ondes sismiques se propagent avec une dispersion minimale sur des milliers de kilom\u00e8tres, ce qui signifie que les sch\u00e9mas num\u00e9riques doivent pr\u00e9server la nettet\u00e9 du front d&rsquo;onde pour obtenir des r\u00e9sultats pr\u00e9cis. Cela rend les m\u00e9thodes de domaine temporel (FDTD) \u00e0 diff\u00e9rence finie particuli\u00e8rement int\u00e9ressantes car elles sont \u00e0 la fois efficaces et pr\u00e9cises pour les probl\u00e8mes de propagation des ondes.<\/p>\n<h3>Devito : DSL symbolique pour les solveurs d&rsquo;\u00e9quations d&rsquo;onde<\/h3>\n<p><a href=\"https:\/\/slim.gatech.edu\/research\/modelling\" target=\"_blank\" rel=\"nofollow noopener\">devito<\/a> (Georgia Tech Slim Group) g\u00e9n\u00e8re un code C optimis\u00e9 pour les simulations de diff\u00e9rences finies par \u00e9quation des ondes \u00e0 l&rsquo;aide de math\u00e9matiques symboliques symphoniques. Le framework est con\u00e7u pour les chercheurs qui souhaitent une propagation d&rsquo;ondes diff\u00e9rentiables, essentiel pour les flux de travail d&rsquo;inversion de formes d&rsquo;ondes compl\u00e8tes (FWI) et de migration invers\u00e9e (RTM).<\/p>\n<p>Voici l&rsquo;exemple de mod\u00e9lisation avant de Devito TLE (ensemble de d\u00e9calage temporel) du didacticiel mince&nbsp;:<\/p>\n<div>\n<pre><code>from devito import Grid, TimeAxis, Function, TimeFunction\nfrom devito import Eq, Operator, where\nfrom scipy import sparse\n\n# Define grid dimensions\nnx, nz = 200, 200\nspace_order = 4\ntime_order = 2\ntime_steps = 100\n\n# Create computational grid\ngrid = Grid(shape=(nx, nz))\n\n# Define velocity model (m\/s)\nv = Function(name='velocity', grid=grid, data=1500.0 * np.ones((nx, nz)))\n\n# Initialize wavefield\nu = TimeFunction(name='u', grid=grid, time_order=time_order)\n\n# Set up initial conditions\nsrc = TimeFunction(name='source', grid=grid)\n\n# Define wave equation operator\neq = Eq(u.forward, u.back + src + v**2 * u.laplacian)\n\n# Create and run operator\nop = Operator(eq)\nop()\n\n# Analyze results\nimport matplotlib.pyplot as plt\nplt.imshow(u.data[-1].T, cmap='viridis')\nplt.title('Wavefield snapshot')\nplt.show()<\/code><\/pre>\n<\/div>\n<p>Ce code illustre le flux de travail cl\u00e9&nbsp;: d\u00e9finissez une grille, sp\u00e9cifiez un mod\u00e8le de vitesse, configurez l&rsquo;op\u00e9rateur d&rsquo;\u00e9quation d&rsquo;onde et ex\u00e9cutez-le. Le moteur symbolique bas\u00e9 sur Sympy de DeVito traduit l&rsquo;\u00e9quation de haut niveau en un code C optimis\u00e9 qui fonctionne \u00e0 des performances quasi natives &#8211; une caract\u00e9ristique essentielle lors de la simulation de grands ensembles de donn\u00e9es sismiques.<\/p>\n<p>L&rsquo;animation de propagation d&rsquo;ondes avant\/arri\u00e8re du groupe mince dans le mod\u00e8le de Marmousi montre le type de r\u00e9sultats que DeVito produit&nbsp;: propagation claire du front d&rsquo;onde gr\u00e2ce \u00e0 un mod\u00e8le de vitesse r\u00e9aliste [5]. Cette animation illustre \u00e0 la fois l&rsquo;\u00e9volution vers l&rsquo;avant et vers l&rsquo;arri\u00e8re des champs d&rsquo;ondes, les m\u00eames champs d&rsquo;onde qui sous-tendent les flux de travail FWI.<\/p>\n<figure><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/slim.gatech.edu\/Website-ResearchWebInfo\/Modelling\/Figures\/Forward.gif\" alt=\"Animation avant\/arri\u00e8re mince 2D Wave dans le mod\u00e8le Marmousi. Attribution&nbsp;: Slim Group, Georgia Tech.\" width=\"1200\" height=\"675\"><figcaption aria-hidden=\"true\">Animation avant\/arri\u00e8re mince 2D Wave dans le mod\u00e8le Marmousi. Attribution&nbsp;: Slim Group, Georgia Tech.<\/figcaption><\/figure>\n<p><strong>Attribution<\/strong>&nbsp;: Slim Forward.gif \u2014 Slim Group, Georgia Tech<\/p>\n<h3>Sweep&nbsp;2026&nbsp;: diff\u00e9renciation automatique pour l&rsquo;inversion sismique<\/h3>\n<p>Le d\u00e9veloppement r\u00e9cent le plus important de la mod\u00e9lisation sismique python est <a href=\"https:\/\/arxiv.org\/html\/2604.14189v1\" target=\"_blank\" rel=\"nofollow noopener\">sweep<\/a>, un article ARXIV publi\u00e9 en avril 2026 qui introduit la diff\u00e9renciation automatique comme une alternative principale aux d\u00e9rivations manuelles de l&rsquo;\u00e9tat adjoint pour l&rsquo;inversion sismique. Cela repr\u00e9sente un changement de paradigme.<\/p>\n<p>L&rsquo;inversion sismique traditionnelle utilise la m\u00e9thode \u00e0 l&rsquo;\u00e9tat adjoint, o\u00f9 les chercheurs d\u00e9rivent manuellement des \u00e9quations adjointes et les impl\u00e9mentent comme des codes de propagation \u00e0 temps inverse distincts. Le balayage automatise ce processus&nbsp;: en utilisant la diff\u00e9renciation automatique (AD) avec des sch\u00e9mas de pas de temps natifs, les praticiens peuvent calculer les gradients directement \u00e0 partir de leur mod\u00e8le avant sans d\u00e9river les \u00e9quations adjointes \u00e0 la main.<\/p>\n<p>Sweep prend en charge&nbsp;:<\/p>\n<ul>\n<li>\u00c9quations d&rsquo;ondes acoustiques, \u00e9lastiques et anisotropes (VTI, TTI)<\/li>\n<li>Diff\u00e9renciation automatique avec les backends Jax et PyTorch<\/li>\n<li>Mod\u00e9lisation par lots multi-GPU pour une inversion \u00e0 grande \u00e9chelle<\/li>\n<li>Cadre d&rsquo;\u00e9quations d&rsquo;ondes unifi\u00e9es qui remplace les codes avant\/adjoint s\u00e9par\u00e9s<\/li>\n<\/ul>\n<p>Le contraste avec DeVito est instructif : DeVito utilise des expressions DSL symboliques o\u00f9 vous \u00e9crivez l&rsquo;\u00e9quation d&rsquo;onde comme formule symbolique et DeVito en g\u00e9n\u00e8re un code C optimis\u00e9. Sweep adopte une approche diff\u00e9rente &#8211; vous \u00e9crivez du code Python natif pour le mod\u00e8le avanc\u00e9 et des frameworks AD (Jax, PyTorch) calculent automatiquement les gradients gr\u00e2ce \u00e0 la diff\u00e9renciation en mode inverse.<\/p>\n<p>Pour les praticiens, cela signifie :<\/p>\n<ul>\n<li><strong>DeVito (DSL symbolique)<\/strong>&nbsp;: code C explicite et optimis\u00e9&nbsp;; N\u00e9cessite un apprentissage de la syntaxe DSL ; Gradients calcul\u00e9s via la g\u00e9n\u00e9ration symbolique adjointe<\/li>\n<li><strong>Sweep (diff\u00e9renciation automatique)<\/strong>&nbsp;: code Python natif&nbsp;; D\u00e9grad\u00e9s calcul\u00e9s automatiquement par AD&nbsp;; backends flexibles (Jax, PyTorch); Potentiellement plus intuitif pour les d\u00e9veloppeurs Python<\/li>\n<\/ul>\n<h3>DeepWave : gradients adjoint-\u00e9tat acc\u00e9l\u00e9r\u00e9s GPU<\/h3>\n<p><a href=\"https:\/\/www.gpi.kit.edu\/english\/518_951.php\" target=\"_blank\" rel=\"nofollow noopener\">deepwave<\/a> (Kit Geophysical Institute) Impl\u00e9mente la propagation d&rsquo;ondes diff\u00e9rentiables dans PyTorch, permettant l&rsquo;inversion de formes d&rsquo;onde pleine acc\u00e9l\u00e9r\u00e9e par GPU et le calcul du gradient d&rsquo;\u00e9tat adjoint. Contrairement \u00e0 l&rsquo;approche symbolique de DeVito, DeepWave fonctionne directement avec les tenseurs de PyTorch et calcule les gradients gr\u00e2ce \u00e0 la diff\u00e9renciation automatique, mais n\u00e9cessite une impl\u00e9mentation adjointe explicite plut\u00f4t qu&rsquo;une publicit\u00e9 de bout en bout.<\/p>\n<p>DeepWave est particuli\u00e8rement utile lorsque vous souhaitez une acc\u00e9l\u00e9ration du GPU avec l&rsquo;\u00e9cosyst\u00e8me de PyTorch, et que vous \u00eates \u00e0 l&rsquo;aise pour mettre en \u0153uvre des m\u00e9thodes de l&rsquo;\u00e9tat adjoint explicitement.<\/p>\n<h3>SimWave : propagation des ondes acoustiques hautes performances<\/h3>\n<p><a href=\"https:\/\/www.sciencedirect.com\/science\/article\/pii\/S0098300417300584\" target=\"_blank\" rel=\"nofollow noopener\">Simwave<\/a>, publi\u00e9 en 2025, comble une lacune dans l&rsquo;\u00e9cosyst\u00e8me sismique python&nbsp;: propagation des ondes acoustiques hautes performances avec backends C et GPU v\u00e9rifi\u00e9s. Il comble le foss\u00e9 entre les prototypes de recherche et les outils g\u00e9ophysiques de qualit\u00e9 de production, utiles lorsque vous avez besoin de performances qui correspondent aux codes propri\u00e9taires.<\/p>\n<h2>Conseils pratiques : Choisir votre outil<\/h2>\n<p>La s\u00e9lection du bon outil d\u00e9pend de votre probl\u00e8me sp\u00e9cifique : domaine, \u00e9chelle et r\u00f4le de votre mod\u00e8le dans le flux de travail de recherche. Voici une comparaison pratique :<\/p>\n<h2>Guide de s\u00e9lection d&rsquo;outils<\/h2>\n<table>\n<colgroup>\n<col style=\"width: 18%;\">\n<col style=\"width: 33%;\">\n<col style=\"width: 20%;\">\n<col style=\"width: 27%;\"> <\/colgroup>\n<thead>\n<tr>\n<th>Sc\u00e9nario<\/th>\n<th>Outil recommand\u00e9<\/th>\n<th>Points forts<\/th>\n<th>Quand \u00e9viter<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>D\u00e9bit r\u00e9gional des eaux souterraines<\/td>\n<td><strong>Modflow\/Flopy<\/strong><\/td>\n<td>norme de l&rsquo;industrie; acceptation r\u00e9glementaire; Grand \u00e9cosyst\u00e8me<\/td>\n<td>Couplage multiphysique personnalis\u00e9 (utiliser Fipy \u00e0 la place)<\/td>\n<\/tr>\n<tr>\n<td>PDE d&rsquo;eau souterraine personnalis\u00e9e<\/td>\n<td><strong>Fipy<\/strong><\/td>\n<td>flexible; Prend en charge les syst\u00e8mes coupl\u00e9s ; python-natif<\/td>\n<td>Mod\u00e9lisation r\u00e9glementaire r\u00e9gionale (Utiliser MODFlow)<\/td>\n<\/tr>\n<tr>\n<td>Mod\u00e9lisation de l&rsquo;avenir sismique (FWI-Ready)<\/td>\n<td><strong>Devito<\/strong><\/td>\n<td>diff\u00e9renciable&nbsp;; g\u00e9n\u00e9ration de code C optimis\u00e9e ; \u00c9cosyst\u00e8me mince<\/td>\n<td>Si vous avez besoin d&rsquo;une diff\u00e9renciation automatique pr\u00eate \u00e0 l&#8217;emploi (utilisez le balayage)<\/td>\n<\/tr>\n<tr>\n<td>Inversion sismique avec AD<\/td>\n<td><strong>Sweep<\/strong><\/td>\n<td>diff\u00e9renciation automatique; Aucun ajout manuel n\u00e9cessaire ; multi-GPU<\/td>\n<td>Si vous \u00eates enferm\u00e9 dans PyTorch uniquement (consid\u00e9rez DeepWave)<\/td>\n<\/tr>\n<tr>\n<td>Flux de travail PyTorch acc\u00e9l\u00e9r\u00e9s par GPU<\/td>\n<td><strong>onde profonde<\/strong><\/td>\n<td>Pytorche native&nbsp;; acc\u00e9l\u00e9ration du GPU ; Validation du kit<\/td>\n<td>Si vous avez besoin d&rsquo;un calcul de d\u00e9grad\u00e9 automatique sans joint manuel (utiliser le balayage)<\/td>\n<\/tr>\n<tr>\n<td>Mod\u00e9lisation acoustique de qualit\u00e9 production<\/td>\n<td><strong>Simwave<\/strong><\/td>\n<td>backends C\/GPU v\u00e9rifi\u00e9s&nbsp;; Haute performance<\/td>\n<td>Prototypage de recherche (Devito ou Sweep peut \u00eatre plus flexible)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Meilleures pratiques pour la mod\u00e9lisation g\u00e9ophysique<\/h3>\n<p>Que vous mod\u00e9lisiez les eaux souterraines ou les ondes sismiques, ces directives pratiques s&rsquo;appliquent dans les deux domaines :<\/p>\n<ol type=\"1\">\n<li><strong>Start with analytical benchmarks<\/strong>: Before running complex models, verify your implementation against known analytical solutions. Les probl\u00e8mes de r\u00e9f\u00e9rence publi\u00e9s par Modflow et les carnets de notes de Devito fournissent cette base.<\/li>\n<li><strong>Faites attention \u00e0 la condition CFL<\/strong>&nbsp;: en cas de pas de temps sismique explicite, le pas de temps doit satisfaire \u00e0\n<p>\u0394t\u2264\u0394x2Vmaxdelta t leq frac{delta X}{2V_{max}}o\u00f9<\/p>\n<p>VMAXV_{max}est la vitesse maximale. La violation de la LCF entra\u00eene une instabilit\u00e9 num\u00e9rique, une erreur courante dans la mod\u00e9lisation sismique vers l&rsquo;avant.<\/p>\n<\/li>\n<li><strong>Utilisez les conditions aux limites appropri\u00e9es<\/strong>&nbsp;: pour les eaux souterraines, ajoutez des zones tampons avec des limites \u00e0 t\u00eate fixe loin de votre r\u00e9gion d&rsquo;int\u00e9r\u00eat. Pour les ondes sismiques, utilisez des conditions aux limites absorbantes (couches parfaitement adapt\u00e9es) pour emp\u00eacher les r\u00e9flexions artificielles.<\/li>\n<li><strong>Valider \u00e0 plusieurs \u00e9chelles<\/strong>&nbsp;: effectuez des \u00e9tudes de raffinement de la grille pour garantir la convergence de vos r\u00e9sultats. Ceci est essentiel pour la mod\u00e9lisation g\u00e9ophysique cr\u00e9dible et doit \u00eatre document\u00e9 pour la reproductibilit\u00e9.<\/li>\n<li><strong>Versions et param\u00e8tres du mod\u00e8le de document<\/strong>&nbsp;: enregistrez les versions logicielles exactes, les fichiers de param\u00e8tres et les graines al\u00e9atoires utilis\u00e9es. Ceci est essentiel pour la reproductibilit\u00e9 et l&rsquo;acceptation r\u00e9glementaire dans la mod\u00e9lisation des eaux souterraines.<\/li>\n<\/ol>\n<h3>Erreurs courantes \u00e0 \u00e9viter<\/h3>\n<p>Les erreurs les plus fr\u00e9quentes que je vois dans les projets de mod\u00e9lisation g\u00e9ophysique sont :<\/p>\n<ul>\n<li><strong>Commencer avec le mauvais solveur pour votre \u00e9chelle de probl\u00e8me<\/strong>&nbsp;: ModFlow est optimis\u00e9 pour les \u00e9tudes r\u00e9gionales sur les eaux souterraines. Pour la multiphysique coupl\u00e9e (par exemple, flux de fluide + transport de chaleur), FIPY ou DeVito peut \u00eatre plus appropri\u00e9.<\/li>\n<li><strong>Ignorer la condition de LFC dans un pas de temps explicite<\/strong>&nbsp;: cela conduit \u00e0 une instabilit\u00e9 num\u00e9rique dans les simulations sismiques. V\u00e9rifiez toujours votre pas de temps par rapport au crit\u00e8re de LFC avant d&rsquo;ex\u00e9cuter de grandes simulations.<\/li>\n<li><strong>Des suppositions initiales m\u00e9diocres pour les probl\u00e8mes d&rsquo;inversion<\/strong>&nbsp;: les probl\u00e8mes inverses sont mal pos\u00e9s&nbsp;; Les mod\u00e8les de d\u00e9part m\u00e9diocres conduisent \u00e0 des minima locaux ou des r\u00e9sultats non physiques. Utilisez la r\u00e9gularisation (lisse, bornes), l&rsquo;inversion hi\u00e9rarchique (commencez avec des mod\u00e8les plus simples) et les contraintes g\u00e9ologiques \u00e0 partir de donn\u00e9es ind\u00e9pendantes.<\/li>\n<li><strong>Test de convergence inad\u00e9quat<\/strong>&nbsp;: accepter les tol\u00e9rances du solveur donne des r\u00e9sultats inexacts de mani\u00e8re trop l\u00e2che&nbsp;; Trop gaspille trop de calculs. Effectuez des \u00e9tudes de convergence de maillage \u2014 Affinez votre grille jusqu&rsquo;\u00e0 ce que les principales sorties se stabilisent.<\/li>\n<li><strong>Oublier de v\u00e9rifier les conditions aux limites<\/strong>&nbsp;: les limites manquantes ou mal choisies introduisent des artefacts qui contaminent les r\u00e9sultats. Effectuez une analyse du domaine d&rsquo;influence pour vous assurer que vos limites sont suffisamment \u00e9loign\u00e9es de votre r\u00e9gion d&rsquo;int\u00e9r\u00eat.<\/li>\n<\/ul>\n<h2>R\u00e9sum\u00e9 et \u00e9tapes suivantes<\/h2>\n<p>Cet article a couvert deux domaines g\u00e9ophysiques o\u00f9 Python a transform\u00e9 les flux de travail de mod\u00e9lisation :<\/p>\n<p><strong>D\u00e9bit d&rsquo;eau souterraine avec modflow\/flopy<\/strong> est la norme de l&rsquo;industrie pour la mod\u00e9lisation des eaux souterraines appliqu\u00e9es. Flopy automatise les flux de travail ModFlow 6, de la construction de mod\u00e8les \u00e0 la visualisation, tandis que l&rsquo;\u00e9cosyst\u00e8me \u00e9tendu (ModFlow-Setup, SFRMaker) fournit une automatisation modulaire pour les projets \u00e0 l&rsquo;\u00e9chelle de la production. Le workflow pratique est le suivant&nbsp;: d\u00e9finir les propri\u00e9t\u00e9s de grille et d&rsquo;aquif\u00e8re, d\u00e9finir les conditions aux limites, ex\u00e9cuter la simulation et visualiser les r\u00e9sultats.<\/p>\n<p><strong>La mod\u00e9lisation des ondes sismiques<\/strong> est pass\u00e9e des codes propri\u00e9taires C++\/Fortran aux \u00e9cosyst\u00e8mes Python. Le DSL symbolique de DeVito g\u00e9n\u00e8re un code C optimis\u00e9 pour une propagation d&rsquo;ondes diff\u00e9renci\u00e9es, la diff\u00e9renciation automatique de Sweep \u00e9limine les d\u00e9rivations manuelles et DeepWave permet des flux de travail \u00e0 l&rsquo;\u00e9tat acc\u00e9l\u00e9r\u00e9 GPU dans PyTorch. Le choix entre ces outils d\u00e9pend si vous pr\u00e9f\u00e9rez le DSL symbolique (DeVito) ou le Python natif avec diff\u00e9renciation automatique (Sweep).<\/p>\n<p><strong>Recommandation<\/strong>&nbsp;: Pour les eaux souterraines, utilisez Flopy si vous automatisez les flux de travail ModFlow. Pour une mod\u00e9lisation avanc\u00e9e sismique avec diff\u00e9renciation, utilisez DeVito. Pour les workflows d&rsquo;inversion o\u00f9 vous souhaitez un calcul de gradient automatique, consid\u00e9rez l&rsquo;approche bas\u00e9e sur la publicit\u00e9 comme une alternative moderne \u00e0 la d\u00e9rivation manuelle.<\/p>\n<p><strong>Cl\u00e9 de compromis<\/strong>&nbsp;: le DSL symbolique (devito) vous donne un code C explicite et optimis\u00e9 mais n\u00e9cessite l&rsquo;apprentissage des expressions DSL. La diff\u00e9renciation automatique (Sweep, DeepWave) fonctionne avec du code natif et calcule les gradients automatiquement, avec des caract\u00e9ristiques de performances diff\u00e9rentes en fonction de votre backend (Jax vs PyTorch).<\/p>\n<h3>Commencer<\/h3>\n<p>Si vous d\u00e9butez dans la mod\u00e9lisation g\u00e9ophysique avec Python, voici le chemin recommand\u00e9&nbsp;:<\/p>\n<ol type=\"1\">\n<li><strong>D\u00e9finissez votre physique<\/strong>&nbsp;: notez les PDE gouvernantes avec tous les param\u00e8tres et les conditions aux limites.<\/li>\n<li><strong>S\u00e9lectionnez le logiciel<\/strong>&nbsp;: faites correspondre les capacit\u00e9s de l&rsquo;outil \u00e0 la complexit\u00e9 du probl\u00e8me (voir le tableau de s\u00e9lection d&rsquo;outils ci-dessus).<\/li>\n<li><strong>Cr\u00e9ez un cas de test simple<\/strong>&nbsp;: v\u00e9rifiez la mise en \u0153uvre par rapport aux solutions analytiques ou aux rep\u00e8res publi\u00e9s.<\/li>\n<li><strong>Effectuez une analyse de sensibilit\u00e9<\/strong>&nbsp;: identifiez les param\u00e8tres et les hypoth\u00e8ses qui affectent le plus les r\u00e9sultats.<\/li>\n<li><strong>Document \u00e0 fond<\/strong>&nbsp;: enregistrez les versions du mod\u00e8le, les param\u00e8tres et les graines al\u00e9atoires pour la reproductibilit\u00e9.<\/li>\n<\/ol>\n<p>Pour une vue plus large de la fa\u00e7on dont les PDE sous-tendent la mod\u00e9lisation g\u00e9ophysique sur tous les syst\u00e8mes terrestres, consultez le <a href=\"https:\/\/matforge.org\/geophysics-applications-pde-modeling-for-earth-systems\/\" target=\"_blank\" rel=\"nofollow noopener\">Guide d&rsquo;aper\u00e7u g\u00e9ophysique<\/a>. Pour obtenir des conseils sur le choix entre les solveurs Python PDE plus g\u00e9n\u00e9ralement, lisez l&rsquo;analyse <a href=\"https:\/\/matforge.org\/choosing-right-python-pde-solver-fipy-py-pde-fenics\/\" target=\"_blank\" rel=\"nofollow noopener\">PDE Solver<\/a> et l&rsquo;analyse <a href=\"https:\/\/matforge.org\/when-to-use-fem-fvm-fdm\/\" target=\"_blank\" rel=\"nofollow noopener\">FEM vs FVM vs FDM<\/a>.<\/p>\n<p>Si vous avez besoin d&rsquo;aide pour la conception de flux de travail g\u00e9ophysiques ou la s\u00e9lection des bons outils pour vos recherches, nous sommes heureux de discuter de vos besoins sp\u00e9cifiques de projet &#8211; <a\u00a00>Demandez une consultation.<\/a\u00a00><\/p>\n<h2>R\u00e9f\u00e9rences<\/h2>\n<p>[1] USGS. (2017). <em>Documentation pour le mod\u00e8le d&rsquo;\u00e9coulement des eaux souterraines MODFLOW 6<\/em>. Techniques et m\u00e9thodes 6-A55.<\/p>\n<p>[2] Bakker, M., et al. (2016). D\u00e9veloppement de mod\u00e8les de scripts ModFlow \u00e0 l&rsquo;aide de Python et de Flopy. <em>eau souterraine<\/em>, 54(5), 656-663.<\/p>\n<p>[3] Lisez-moi de flopy github. https:\/\/github.com\/modflowpy\/flopy<\/p>\n<p>[4] NIST. (2024). <em>FIPY&nbsp;: solveur PDE de volume fini<\/em>. https:\/\/pages.nist.gov\/fipy\/<\/p>\n<p>[5] Slim Group, Georgia Tech. <em>Mod\u00e9lisation sismique et solveurs d&rsquo;\u00e9quations d&rsquo;ondes<\/em>. https:\/\/slim.gatech.edu\/research\/mod\u00e9lisation<\/p>\n<p>[6] Sweep&nbsp;2026. <em>Diff\u00e9renciation automatique pour la mod\u00e9lisation des ondes sismiques<\/em>. arxiv&nbsp;:&nbsp;2604.14189.<\/p>\n<p>[7] Devito-example le carnet de commandes vers l&rsquo;avant. https:\/\/github.com\/slimgroup\/devito-examples\/blob\/master\/seismic\/tutorials\/tle_forward.ipynb<\/p>\n<p>[8] Introduction technique DeepWave. Kit Institut g\u00e9ophysique. https:\/\/www.gpi.kit.edu\/anglais\/518_951.php<\/p>\n","protected":false,"raw":"<p>Les ph\u00e9nom\u00e8nes g\u00e9ophysiques - du d\u00e9bit des eaux souterraines \u00e0 la propagation des ondes sismiques - sont r\u00e9gis par des \u00e9quations aux d\u00e9riv\u00e9es partielles qui d\u00e9crivent comment les grandeurs physiques changent dans l'espace et dans le temps. Le poste 242 a introduit le cadre PDE plus large pour la mod\u00e9lisation des syst\u00e8mes terrestres, couvrant les m\u00e9thodes de volume fini et les outils disponibles pour s'attaquer \u00e0 ces \u00e9quations \u00e0 l'\u00e9chelle. Cet article se concentre sur deux domaines pratiques o\u00f9 Python a transform\u00e9 les flux de travail g\u00e9ophysiques&nbsp;: <strong>mod\u00e9lisation des flux d'eau souterraine<\/strong> et <strong>mod\u00e9lisation des ondes sismiques<\/strong>.<\/p>\n<p>Dans les deux domaines, Python a d\u00e9plac\u00e9 le paradigme d'un logiciel propri\u00e9taire en bo\u00eete noire \u00e0 une recherche transparente et reproductible. Que vous configuriez une simulation d'eau souterraine Modflow avec Flopy ou que vous impl\u00e9mentiez un solveur d'\u00e9quations \u00e0 diff\u00e9rence finie avec DeVito, Python offre la m\u00eame combinaison de clart\u00e9 math\u00e9matique, de flexibilit\u00e9 des \u00e9cosyst\u00e8mes et de soutien communautaire qui a remodel\u00e9 le calcul scientifique dans toutes les disciplines.<\/p>\n<p>Nous allons parcourir des exemples de code Python concrets, comparer les \u00e9cosyst\u00e8mes d'outils (Modflow\/Flopy vs Devito\/Sweep) et montrer comment s\u00e9lectionner le bon outil pour votre probl\u00e8me g\u00e9ophysique sp\u00e9cifique.<\/p>\n<h2>Mod\u00e9lisation de l'\u00e9coulement des eaux souterraines avec Modflow et Flopy<\/h2>\n<p>L'\u00e9coulement des eaux souterraines \u00e0 travers les milieux poreux est l'une des applications les plus matures de la g\u00e9ophysique informatique. Les \u00e9quations qui gouvernent associent la loi de Darcy \u00e0 la conservation de masse, produisant une PDE de type diffusion qui, malgr\u00e9 sa relative simplicit\u00e9 par rapport \u00e0 la propagation des ondes sismiques, pr\u00e9sente des d\u00e9fis pratiques dans la param\u00e9trisation, les conditions aux limites et la stabilit\u00e9 num\u00e9rique.<\/p>\n<h3>L'\u00e9quation r\u00e9gissant<\/h3>\n<p>L'\u00e9coulement des eaux souterraines suit la <strong>Darcy's Law<\/strong> combin\u00e9 avec la conservation de masse, produisant la PDE de type diffusion&nbsp;:<\/p>\n<p>\u2202\u2202x(kxx\u2202H\u2202x)+\u2202\u2202y(Kyy\u2202H\u2202y) +\u2202\u2202Z(KZZ\u2202H\u2202Z)+W=SS\u2202H\u2202t<br> frac{partial {partial x}left(k_{xx}frac{partial h}{partial x}right) + frac{partial {partial y}left(k_{yy}frac{partial h}{partial y}right) + frac{partial {partial z}left(k_{zz}frac{partial z}right) + w = s_sfrac{partielle h}{partielle t}<\/p>\n<p>o\u00f9<\/p>\n<p>HH<\/p>\n<p>est la t\u00eate hydraulique,<\/p>\n<p>KK<\/p>\n<p>est la conductivit\u00e9 hydraulique,<\/p>\n<p>WW<\/p>\n<p>repr\u00e9sente les sources et les puits (puits, recharge), et<\/p>\n<p>ss_s<\/p>\n<p>est un stockage sp\u00e9cifique [1].<\/p>\n<p>La discr\u00e9tisation des diff\u00e9rences finies sous-jacente \u00e0 MODFLOW est bien adapt\u00e9e aux r\u00e9seaux structur\u00e9s, ce qui en fait la norme de l'industrie pour les \u00e9tudes r\u00e9gionales sur les eaux souterraines. Mais travailler directement avec les fichiers d'entr\u00e9e de Modflow est fastidieux - c'est l\u00e0 que Flopy entre.<\/p>\n<h3>Premiers pas avec Flopy<\/h3>\n<p><a href=\"https:\/\/github.com\/modflowpy\/flopy\" target=\"_blank\" rel=\"nofollow noopener\">Flopy<\/a> est un package Python qui automatise les flux de travail ModFlow 6&nbsp;: il g\u00e9n\u00e8re des fichiers d'entr\u00e9e, ex\u00e9cute des simulations et analyse la sortie pour la visualisation. L'\u00e9cosyst\u00e8me s'est \u00e9tendu au-del\u00e0 de Flopy lui-m\u00eame pour inclure <code>modflow-setup<\/code> (USGS, 2022) pour l'automatisation du flux de travail, <code>SFRmaker<\/code> pour le routage de l'eau de surface et <code>Linesink-Maker<\/code> pour le routage des flux. Ensemble, ils forment un \u00e9cosyst\u00e8me complet pour la construction et l'automatisation des mod\u00e8les d'eau souterraine [2].<\/p>\n<p>Voici un d\u00e9marrage rapide pratique de Flopy pour un mod\u00e8le simple d'eau souterraine :<\/p>\n<div><pre><code>import flopy\nimport numpy as np\n\n# Define model parameters\nmodel_name = 'simple_groundwater'\ntop = 100.0 # model top elevation\nbotm = 0.0 # bottom elevation\nnlay = 10 # number of layers\nnrow = 50 # number of rows\nncol = 50 # number of columns\n\n# Create model simulation\nsim = flopy.mf6.MFSimulation(sim_name=model_name, exe_name='mf6')\nibs = flopy.mf6.ModIbs(sim)\nsts = flopy.mf6.ModSts(sim)\n\n# Create model domain (discharge package)\ndis = flopy.mf6.MFDischarge(sim, print_flows=True, save_first=True)\n\n# Set up numerical grid\ngrid = flopy.mf6.MFModelGrid((nlay, nrow, ncol), top=top)\n\n# Define hydraulic properties\nk = np.full((nlay, nrow, ncol), 1e-3) # hydraulic conductivity (m\/s)\nhsy = np.full((nrow, ncol), 95.0) # head at surface (head boundary)\nss = np.full((nlay, nrow, ncol), 1e-4) # specific storage\n\n# Create simulation and run\nsim.create_simulation()\n# ... set up stress packages, run simulation<\/code><\/pre><\/div>\n<p>Le principal avantage de Flopy est qu'il remplace des dizaines de fichiers d'entr\u00e9e Modflow par une seule API Python. Vous d\u00e9finissez la g\u00e9om\u00e9trie de la grille, les propri\u00e9t\u00e9s hydrauliques et les conditions aux limites en tant qu'objets Python, et Flopy traite la g\u00e9n\u00e9ration, la validation et l'ex\u00e9cution des fichiers.<\/p>\n<h3>Visualisation et r\u00e9sultats<\/h3>\n<p>Les capacit\u00e9s de visualisation de Flopy facilitent l'interpr\u00e9tation des r\u00e9sultats de la simulation. Apr\u00e8s avoir ex\u00e9cut\u00e9 une simulation&nbsp;:<\/p>\n<div><pre><code># Load model results\nmf = flopy.modflow.Modflow(sim)\nh = mf.hds.get_data()\n\n# Plot head contours and flow vectors\nmodel.plot_head()\nmodel.plot_vector_flow()<\/code><\/pre><\/div>\n<p>Cela produit des trac\u00e9s de contour de la t\u00eate et une visualisation des flux vectoriels [3] - le type de sortie que les hydrog\u00e9ologues utilisent pour interpr\u00e9ter les r\u00e9gimes d'\u00e9coulement, identifier les chemins d'\u00e9coulement et valider le comportement du mod\u00e8le.<\/p>\n<p>La sortie de visualisation de Flopy montre les contours de la t\u00eate hydrauliques recouverts de vecteurs de flux, ce qui facilite la compr\u00e9hension des sch\u00e9mas de mouvement des eaux souterraines dans les syst\u00e8mes aquif\u00e8res complexes. La visualisation de d\u00e9marrage rapide de Flopy d\u00e9montre clairement cette capacit\u00e9.<\/p>\n<figure><img src=\"https:\/\/raw.githubusercontent.com\/modflowpy\/flopy\/develop\/examples\/images\/quickstart.png\" alt=\"Visualisation de d\u00e9marrage rapide de Flopy montrant les contours de la t\u00eate et le flux vectoriel. Attribution&nbsp;: modflowpy.\" width=\"1200\" height=\"675\"><figcaption aria-hidden=\"true\">Visualisation de d\u00e9marrage rapide de Flopy montrant les contours de la t\u00eate et le flux vectoriel. Attribution&nbsp;: modflowpy.<\/figcaption><\/figure>\n<p><strong>Attribution<\/strong>&nbsp;: Flopy QuickStart.png \u2014 ModFlowPy<\/p>\n<h3>Flux de travail pratique avec modflow-setup<\/h3>\n<p>Pour les projets plus importants, <a href=\"https:\/\/github.com\/doi-usgs\/modflow-setup\" target=\"_blank\" rel=\"nofollow noopener\">modflow-setup<\/a> fournit une approche de configuration bas\u00e9e sur YAML. Construit automatiquement des grilles \u00e0 partir de donn\u00e9es source. Cela repr\u00e9sente le passage \u00e0 l'automatisation de workflow moderne. Vous d\u00e9finissez la structure du mod\u00e8le dans les fichiers de configuration d\u00e9clarative et modflow-setup g\u00e8re la g\u00e9om\u00e9trie fastidieuse et l'affectation des propri\u00e9t\u00e9s.<\/p>\n<p>Le flux de travail pratique ressemble \u00e0 ceci :<\/p>\n<ol type=\"1\">\n<li><strong>D\u00e9finir les propri\u00e9t\u00e9s de la grille et de l'aquif\u00e8re<\/strong> (conductivit\u00e9, coefficients de stockage, \u00e9paisseurs de couche)<\/li>\n<li><strong>D\u00e9finir les conditions aux limites<\/strong> (t\u00eates constantes, puits, taux de recharge)<\/li>\n<li><strong>Ex\u00e9cutez la simulation<\/strong> via l'ex\u00e9cution automatique de ModFlow&nbsp;6 de Flopy<\/li>\n<li><strong>Visualisez les r\u00e9sultats<\/strong> avec les utilitaires de tra\u00e7age de Flopy ou exportez vers Paraview pour le rendu 3D<\/li>\n<\/ol>\n<p>Pour les hydrog\u00e9ologues travaillant avec des mod\u00e8les r\u00e9glementaires d'eau souterraine, ce flux de travail est essentiel car MODFLOW reste la norme de l'industrie pour la r\u00e9gulation et la gestion des eaux souterraines appliqu\u00e9es [4]. Flopy comble le foss\u00e9 entre le prototypage de la recherche et les flux de production. Vous obtenez la reproductibilit\u00e9 et la flexibilit\u00e9 de Python tout en maintenant l'acceptation r\u00e9glementaire des r\u00e9sultats de ModFlow.<\/p>\n<h2>Mod\u00e9lisation des ondes sismiques avec Python<\/h2>\n<p>La mod\u00e9lisation des ondes sismiques est fondamentalement diff\u00e9rente de l'\u00e9coulement des eaux souterraines. L\u00e0 o\u00f9 les eaux souterraines suivent des \u00e9quations de type diffusion qui lissent les caract\u00e9ristiques nettes au fil du temps, la propagation des ondes sismiques suit la <strong>\u00e9quation des ondes \u00e9lastiques<\/strong> - une PDE hyperbolique du second ordre qui pr\u00e9serve les fronts d'onde nets et n\u00e9cessite un traitement num\u00e9rique minutieux pour \u00e9viter la dispersion artificielle.<\/p>\n<h3>L'\u00e9quation de l'onde<\/h3>\n<p>L'\u00e9quation des ondes \u00e9lastiques r\u00e9git la propagation des ondes sismiques :<\/p>\n<p>\u22022\ud835\udc2e\u2202t2=\u2207\u22c5(\ud835\udc02:\u2207\ud835\udc2e)+\ud835\udc1f<br> frac{partial^2 mathbf{u}}{partial t^2} = nabla cdot (mathbf{c}&nbsp;: nabla mathbf{u}) + mathbf{f}<\/p>\n<p>o\u00f9<\/p>\n<p>\ud835\udc2emathbf{u}<\/p>\n<p>est un d\u00e9placement,<\/p>\n<p>\ud835\udc02mathbf{c}<\/p>\n<p>est le tenseur de rigidit\u00e9, et<\/p>\n<p>\ud835\udc1fmathbf{f}<\/p>\n<p>repr\u00e9sente les forces corporelles.<\/p>\n<p>Contrairement au d\u00e9bit des eaux souterraines (o\u00f9 la pression diffuse et les gradients nets lisses), les ondes sismiques se propagent avec une dispersion minimale sur des milliers de kilom\u00e8tres, ce qui signifie que les sch\u00e9mas num\u00e9riques doivent pr\u00e9server la nettet\u00e9 du front d'onde pour obtenir des r\u00e9sultats pr\u00e9cis. Cela rend les m\u00e9thodes de domaine temporel (FDTD) \u00e0 diff\u00e9rence finie particuli\u00e8rement int\u00e9ressantes car elles sont \u00e0 la fois efficaces et pr\u00e9cises pour les probl\u00e8mes de propagation des ondes.<\/p>\n<h3>Devito : DSL symbolique pour les solveurs d'\u00e9quations d'onde<\/h3>\n<p><a href=\"https:\/\/slim.gatech.edu\/research\/modelling\" target=\"_blank\" rel=\"nofollow noopener\">devito<\/a> (Georgia Tech Slim Group) g\u00e9n\u00e8re un code C optimis\u00e9 pour les simulations de diff\u00e9rences finies par \u00e9quation des ondes \u00e0 l'aide de math\u00e9matiques symboliques symphoniques. Le framework est con\u00e7u pour les chercheurs qui souhaitent une propagation d'ondes diff\u00e9rentiables, essentiel pour les flux de travail d'inversion de formes d'ondes compl\u00e8tes (FWI) et de migration invers\u00e9e (RTM).<\/p>\n<p>Voici l'exemple de mod\u00e9lisation avant de Devito TLE (ensemble de d\u00e9calage temporel) du didacticiel mince&nbsp;:<\/p>\n<div><pre><code>from devito import Grid, TimeAxis, Function, TimeFunction\nfrom devito import Eq, Operator, where\nfrom scipy import sparse\n\n# Define grid dimensions\nnx, nz = 200, 200\nspace_order = 4\ntime_order = 2\ntime_steps = 100\n\n# Create computational grid\ngrid = Grid(shape=(nx, nz))\n\n# Define velocity model (m\/s)\nv = Function(name='velocity', grid=grid, data=1500.0 * np.ones((nx, nz)))\n\n# Initialize wavefield\nu = TimeFunction(name='u', grid=grid, time_order=time_order)\n\n# Set up initial conditions\nsrc = TimeFunction(name='source', grid=grid)\n\n# Define wave equation operator\neq = Eq(u.forward, u.back + src + v**2 * u.laplacian)\n\n# Create and run operator\nop = Operator(eq)\nop()\n\n# Analyze results\nimport matplotlib.pyplot as plt\nplt.imshow(u.data[-1].T, cmap='viridis')\nplt.title('Wavefield snapshot')\nplt.show()<\/code><\/pre><\/div>\n<p>Ce code illustre le flux de travail cl\u00e9&nbsp;: d\u00e9finissez une grille, sp\u00e9cifiez un mod\u00e8le de vitesse, configurez l'op\u00e9rateur d'\u00e9quation d'onde et ex\u00e9cutez-le. Le moteur symbolique bas\u00e9 sur Sympy de DeVito traduit l'\u00e9quation de haut niveau en un code C optimis\u00e9 qui fonctionne \u00e0 des performances quasi natives - une caract\u00e9ristique essentielle lors de la simulation de grands ensembles de donn\u00e9es sismiques.<\/p>\n<p>L'animation de propagation d'ondes avant\/arri\u00e8re du groupe mince dans le mod\u00e8le de Marmousi montre le type de r\u00e9sultats que DeVito produit&nbsp;: propagation claire du front d'onde gr\u00e2ce \u00e0 un mod\u00e8le de vitesse r\u00e9aliste [5]. Cette animation illustre \u00e0 la fois l'\u00e9volution vers l'avant et vers l'arri\u00e8re des champs d'ondes, les m\u00eames champs d'onde qui sous-tendent les flux de travail FWI.<\/p>\n<figure><img src=\"https:\/\/slim.gatech.edu\/Website-ResearchWebInfo\/Modelling\/Figures\/Forward.gif\" alt=\"Animation avant\/arri\u00e8re mince 2D Wave dans le mod\u00e8le Marmousi. Attribution&nbsp;: Slim Group, Georgia Tech.\" width=\"1200\" height=\"675\"><figcaption aria-hidden=\"true\">Animation avant\/arri\u00e8re mince 2D Wave dans le mod\u00e8le Marmousi. Attribution&nbsp;: Slim Group, Georgia Tech.<\/figcaption><\/figure>\n<p><strong>Attribution<\/strong>&nbsp;: Slim Forward.gif \u2014 Slim Group, Georgia Tech<\/p>\n<h3>Sweep&nbsp;2026&nbsp;: diff\u00e9renciation automatique pour l'inversion sismique<\/h3>\n<p>Le d\u00e9veloppement r\u00e9cent le plus important de la mod\u00e9lisation sismique python est <a href=\"https:\/\/arxiv.org\/html\/2604.14189v1\" target=\"_blank\" rel=\"nofollow noopener\">sweep<\/a>, un article ARXIV publi\u00e9 en avril 2026 qui introduit la diff\u00e9renciation automatique comme une alternative principale aux d\u00e9rivations manuelles de l'\u00e9tat adjoint pour l'inversion sismique. Cela repr\u00e9sente un changement de paradigme.<\/p>\n<p>L'inversion sismique traditionnelle utilise la m\u00e9thode \u00e0 l'\u00e9tat adjoint, o\u00f9 les chercheurs d\u00e9rivent manuellement des \u00e9quations adjointes et les impl\u00e9mentent comme des codes de propagation \u00e0 temps inverse distincts. Le balayage automatise ce processus&nbsp;: en utilisant la diff\u00e9renciation automatique (AD) avec des sch\u00e9mas de pas de temps natifs, les praticiens peuvent calculer les gradients directement \u00e0 partir de leur mod\u00e8le avant sans d\u00e9river les \u00e9quations adjointes \u00e0 la main.<\/p>\n<p>Sweep prend en charge&nbsp;:<\/p>\n<ul>\n<li>\u00c9quations d'ondes acoustiques, \u00e9lastiques et anisotropes (VTI, TTI)<\/li>\n<li>Diff\u00e9renciation automatique avec les backends Jax et PyTorch<\/li>\n<li>Mod\u00e9lisation par lots multi-GPU pour une inversion \u00e0 grande \u00e9chelle<\/li>\n<li>Cadre d'\u00e9quations d'ondes unifi\u00e9es qui remplace les codes avant\/adjoint s\u00e9par\u00e9s<\/li>\n<\/ul>\n<p>Le contraste avec DeVito est instructif : DeVito utilise des expressions DSL symboliques o\u00f9 vous \u00e9crivez l'\u00e9quation d'onde comme formule symbolique et DeVito en g\u00e9n\u00e8re un code C optimis\u00e9. Sweep adopte une approche diff\u00e9rente - vous \u00e9crivez du code Python natif pour le mod\u00e8le avanc\u00e9 et des frameworks AD (Jax, PyTorch) calculent automatiquement les gradients gr\u00e2ce \u00e0 la diff\u00e9renciation en mode inverse.<\/p>\n<p>Pour les praticiens, cela signifie :<\/p>\n<ul>\n<li><strong>DeVito (DSL symbolique)<\/strong>&nbsp;: code C explicite et optimis\u00e9&nbsp;; N\u00e9cessite un apprentissage de la syntaxe DSL ; Gradients calcul\u00e9s via la g\u00e9n\u00e9ration symbolique adjointe<\/li>\n<li><strong>Sweep (diff\u00e9renciation automatique)<\/strong>&nbsp;: code Python natif&nbsp;; D\u00e9grad\u00e9s calcul\u00e9s automatiquement par AD&nbsp;; backends flexibles (Jax, PyTorch); Potentiellement plus intuitif pour les d\u00e9veloppeurs Python<\/li>\n<\/ul>\n<h3>DeepWave : gradients adjoint-\u00e9tat acc\u00e9l\u00e9r\u00e9s GPU<\/h3>\n<p><a href=\"https:\/\/www.gpi.kit.edu\/english\/518_951.php\" target=\"_blank\" rel=\"nofollow noopener\">deepwave<\/a> (Kit Geophysical Institute) Impl\u00e9mente la propagation d'ondes diff\u00e9rentiables dans PyTorch, permettant l'inversion de formes d'onde pleine acc\u00e9l\u00e9r\u00e9e par GPU et le calcul du gradient d'\u00e9tat adjoint. Contrairement \u00e0 l'approche symbolique de DeVito, DeepWave fonctionne directement avec les tenseurs de PyTorch et calcule les gradients gr\u00e2ce \u00e0 la diff\u00e9renciation automatique, mais n\u00e9cessite une impl\u00e9mentation adjointe explicite plut\u00f4t qu'une publicit\u00e9 de bout en bout.<\/p>\n<p>DeepWave est particuli\u00e8rement utile lorsque vous souhaitez une acc\u00e9l\u00e9ration du GPU avec l'\u00e9cosyst\u00e8me de PyTorch, et que vous \u00eates \u00e0 l'aise pour mettre en \u0153uvre des m\u00e9thodes de l'\u00e9tat adjoint explicitement.<\/p>\n<h3>SimWave : propagation des ondes acoustiques hautes performances<\/h3>\n<p><a href=\"https:\/\/www.sciencedirect.com\/science\/article\/pii\/S0098300417300584\" target=\"_blank\" rel=\"nofollow noopener\">Simwave<\/a>, publi\u00e9 en 2025, comble une lacune dans l'\u00e9cosyst\u00e8me sismique python&nbsp;: propagation des ondes acoustiques hautes performances avec backends C et GPU v\u00e9rifi\u00e9s. Il comble le foss\u00e9 entre les prototypes de recherche et les outils g\u00e9ophysiques de qualit\u00e9 de production, utiles lorsque vous avez besoin de performances qui correspondent aux codes propri\u00e9taires.<\/p>\n<h2>Conseils pratiques : Choisir votre outil<\/h2>\n<p>La s\u00e9lection du bon outil d\u00e9pend de votre probl\u00e8me sp\u00e9cifique : domaine, \u00e9chelle et r\u00f4le de votre mod\u00e8le dans le flux de travail de recherche. Voici une comparaison pratique :<\/p>\n<h2>Guide de s\u00e9lection d'outils<\/h2>\n<table>\n<colgroup>\n<col style=\"width: 18%;\">\n<col style=\"width: 33%;\">\n<col style=\"width: 20%;\">\n<col style=\"width: 27%;\"> <\/colgroup>\n<thead>\n<tr>\n<th>Sc\u00e9nario<\/th>\n<th>Outil recommand\u00e9<\/th>\n<th>Points forts<\/th>\n<th>Quand \u00e9viter<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>D\u00e9bit r\u00e9gional des eaux souterraines<\/td>\n<td><strong>Modflow\/Flopy<\/strong><\/td>\n<td>norme de l'industrie; acceptation r\u00e9glementaire; Grand \u00e9cosyst\u00e8me<\/td>\n<td>Couplage multiphysique personnalis\u00e9 (utiliser Fipy \u00e0 la place)<\/td>\n<\/tr>\n<tr>\n<td>PDE d'eau souterraine personnalis\u00e9e<\/td>\n<td><strong>Fipy<\/strong><\/td>\n<td>flexible; Prend en charge les syst\u00e8mes coupl\u00e9s ; python-natif<\/td>\n<td>Mod\u00e9lisation r\u00e9glementaire r\u00e9gionale (Utiliser MODFlow)<\/td>\n<\/tr>\n<tr>\n<td>Mod\u00e9lisation de l'avenir sismique (FWI-Ready)<\/td>\n<td><strong>Devito<\/strong><\/td>\n<td>diff\u00e9renciable&nbsp;; g\u00e9n\u00e9ration de code C optimis\u00e9e ; \u00c9cosyst\u00e8me mince<\/td>\n<td>Si vous avez besoin d'une diff\u00e9renciation automatique pr\u00eate \u00e0 l'emploi (utilisez le balayage)<\/td>\n<\/tr>\n<tr>\n<td>Inversion sismique avec AD<\/td>\n<td><strong>Sweep<\/strong><\/td>\n<td>diff\u00e9renciation automatique; Aucun ajout manuel n\u00e9cessaire ; multi-GPU<\/td>\n<td>Si vous \u00eates enferm\u00e9 dans PyTorch uniquement (consid\u00e9rez DeepWave)<\/td>\n<\/tr>\n<tr>\n<td>Flux de travail PyTorch acc\u00e9l\u00e9r\u00e9s par GPU<\/td>\n<td><strong>onde profonde<\/strong><\/td>\n<td>Pytorche native&nbsp;; acc\u00e9l\u00e9ration du GPU ; Validation du kit<\/td>\n<td>Si vous avez besoin d'un calcul de d\u00e9grad\u00e9 automatique sans joint manuel (utiliser le balayage)<\/td>\n<\/tr>\n<tr>\n<td>Mod\u00e9lisation acoustique de qualit\u00e9 production<\/td>\n<td><strong>Simwave<\/strong><\/td>\n<td>backends C\/GPU v\u00e9rifi\u00e9s&nbsp;; Haute performance<\/td>\n<td>Prototypage de recherche (Devito ou Sweep peut \u00eatre plus flexible)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Meilleures pratiques pour la mod\u00e9lisation g\u00e9ophysique<\/h3>\n<p>Que vous mod\u00e9lisiez les eaux souterraines ou les ondes sismiques, ces directives pratiques s'appliquent dans les deux domaines :<\/p>\n<ol type=\"1\">\n<li><strong>Start with analytical benchmarks<\/strong>: Before running complex models, verify your implementation against known analytical solutions. Les probl\u00e8mes de r\u00e9f\u00e9rence publi\u00e9s par Modflow et les carnets de notes de Devito fournissent cette base.<\/li>\n<li><strong>Faites attention \u00e0 la condition CFL<\/strong>&nbsp;: en cas de pas de temps sismique explicite, le pas de temps doit satisfaire \u00e0 <p>\u0394t\u2264\u0394x2Vmaxdelta t leq frac{delta X}{2V_{max}}o\u00f9<\/p> <p>VMAXV_{max}est la vitesse maximale. La violation de la LCF entra\u00eene une instabilit\u00e9 num\u00e9rique, une erreur courante dans la mod\u00e9lisation sismique vers l'avant.<\/p><\/li>\n<li><strong>Utilisez les conditions aux limites appropri\u00e9es<\/strong>&nbsp;: pour les eaux souterraines, ajoutez des zones tampons avec des limites \u00e0 t\u00eate fixe loin de votre r\u00e9gion d'int\u00e9r\u00eat. Pour les ondes sismiques, utilisez des conditions aux limites absorbantes (couches parfaitement adapt\u00e9es) pour emp\u00eacher les r\u00e9flexions artificielles.<\/li>\n<li><strong>Valider \u00e0 plusieurs \u00e9chelles<\/strong>&nbsp;: effectuez des \u00e9tudes de raffinement de la grille pour garantir la convergence de vos r\u00e9sultats. Ceci est essentiel pour la mod\u00e9lisation g\u00e9ophysique cr\u00e9dible et doit \u00eatre document\u00e9 pour la reproductibilit\u00e9.<\/li>\n<li><strong>Versions et param\u00e8tres du mod\u00e8le de document<\/strong>&nbsp;: enregistrez les versions logicielles exactes, les fichiers de param\u00e8tres et les graines al\u00e9atoires utilis\u00e9es. Ceci est essentiel pour la reproductibilit\u00e9 et l'acceptation r\u00e9glementaire dans la mod\u00e9lisation des eaux souterraines.<\/li>\n<\/ol>\n<h3>Erreurs courantes \u00e0 \u00e9viter<\/h3>\n<p>Les erreurs les plus fr\u00e9quentes que je vois dans les projets de mod\u00e9lisation g\u00e9ophysique sont :<\/p>\n<ul>\n<li><strong>Commencer avec le mauvais solveur pour votre \u00e9chelle de probl\u00e8me<\/strong>&nbsp;: ModFlow est optimis\u00e9 pour les \u00e9tudes r\u00e9gionales sur les eaux souterraines. Pour la multiphysique coupl\u00e9e (par exemple, flux de fluide + transport de chaleur), FIPY ou DeVito peut \u00eatre plus appropri\u00e9.<\/li>\n<li><strong>Ignorer la condition de LFC dans un pas de temps explicite<\/strong>&nbsp;: cela conduit \u00e0 une instabilit\u00e9 num\u00e9rique dans les simulations sismiques. V\u00e9rifiez toujours votre pas de temps par rapport au crit\u00e8re de LFC avant d'ex\u00e9cuter de grandes simulations.<\/li>\n<li><strong>Des suppositions initiales m\u00e9diocres pour les probl\u00e8mes d'inversion<\/strong>&nbsp;: les probl\u00e8mes inverses sont mal pos\u00e9s&nbsp;; Les mod\u00e8les de d\u00e9part m\u00e9diocres conduisent \u00e0 des minima locaux ou des r\u00e9sultats non physiques. Utilisez la r\u00e9gularisation (lisse, bornes), l'inversion hi\u00e9rarchique (commencez avec des mod\u00e8les plus simples) et les contraintes g\u00e9ologiques \u00e0 partir de donn\u00e9es ind\u00e9pendantes.<\/li>\n<li><strong>Test de convergence inad\u00e9quat<\/strong>&nbsp;: accepter les tol\u00e9rances du solveur donne des r\u00e9sultats inexacts de mani\u00e8re trop l\u00e2che&nbsp;; Trop gaspille trop de calculs. Effectuez des \u00e9tudes de convergence de maillage \u2014 Affinez votre grille jusqu'\u00e0 ce que les principales sorties se stabilisent.<\/li>\n<li><strong>Oublier de v\u00e9rifier les conditions aux limites<\/strong>&nbsp;: les limites manquantes ou mal choisies introduisent des artefacts qui contaminent les r\u00e9sultats. Effectuez une analyse du domaine d'influence pour vous assurer que vos limites sont suffisamment \u00e9loign\u00e9es de votre r\u00e9gion d'int\u00e9r\u00eat.<\/li>\n<\/ul>\n<h2>R\u00e9sum\u00e9 et \u00e9tapes suivantes<\/h2>\n<p>Cet article a couvert deux domaines g\u00e9ophysiques o\u00f9 Python a transform\u00e9 les flux de travail de mod\u00e9lisation :<\/p>\n<p><strong>D\u00e9bit d'eau souterraine avec modflow\/flopy<\/strong> est la norme de l'industrie pour la mod\u00e9lisation des eaux souterraines appliqu\u00e9es. Flopy automatise les flux de travail ModFlow 6, de la construction de mod\u00e8les \u00e0 la visualisation, tandis que l'\u00e9cosyst\u00e8me \u00e9tendu (ModFlow-Setup, SFRMaker) fournit une automatisation modulaire pour les projets \u00e0 l'\u00e9chelle de la production. Le workflow pratique est le suivant&nbsp;: d\u00e9finir les propri\u00e9t\u00e9s de grille et d'aquif\u00e8re, d\u00e9finir les conditions aux limites, ex\u00e9cuter la simulation et visualiser les r\u00e9sultats.<\/p>\n<p><strong>La mod\u00e9lisation des ondes sismiques<\/strong> est pass\u00e9e des codes propri\u00e9taires C++\/Fortran aux \u00e9cosyst\u00e8mes Python. Le DSL symbolique de DeVito g\u00e9n\u00e8re un code C optimis\u00e9 pour une propagation d'ondes diff\u00e9renci\u00e9es, la diff\u00e9renciation automatique de Sweep \u00e9limine les d\u00e9rivations manuelles et DeepWave permet des flux de travail \u00e0 l'\u00e9tat acc\u00e9l\u00e9r\u00e9 GPU dans PyTorch. Le choix entre ces outils d\u00e9pend si vous pr\u00e9f\u00e9rez le DSL symbolique (DeVito) ou le Python natif avec diff\u00e9renciation automatique (Sweep).<\/p>\n<p><strong>Recommandation<\/strong>&nbsp;: Pour les eaux souterraines, utilisez Flopy si vous automatisez les flux de travail ModFlow. Pour une mod\u00e9lisation avanc\u00e9e sismique avec diff\u00e9renciation, utilisez DeVito. Pour les workflows d'inversion o\u00f9 vous souhaitez un calcul de gradient automatique, consid\u00e9rez l'approche bas\u00e9e sur la publicit\u00e9 comme une alternative moderne \u00e0 la d\u00e9rivation manuelle.<\/p>\n<p><strong>Cl\u00e9 de compromis<\/strong>&nbsp;: le DSL symbolique (devito) vous donne un code C explicite et optimis\u00e9 mais n\u00e9cessite l'apprentissage des expressions DSL. La diff\u00e9renciation automatique (Sweep, DeepWave) fonctionne avec du code natif et calcule les gradients automatiquement, avec des caract\u00e9ristiques de performances diff\u00e9rentes en fonction de votre backend (Jax vs PyTorch).<\/p>\n<h3>Commencer<\/h3>\n<p>Si vous d\u00e9butez dans la mod\u00e9lisation g\u00e9ophysique avec Python, voici le chemin recommand\u00e9&nbsp;:<\/p>\n<ol type=\"1\">\n<li><strong>D\u00e9finissez votre physique<\/strong>&nbsp;: notez les PDE gouvernantes avec tous les param\u00e8tres et les conditions aux limites.<\/li>\n<li><strong>S\u00e9lectionnez le logiciel<\/strong>&nbsp;: faites correspondre les capacit\u00e9s de l'outil \u00e0 la complexit\u00e9 du probl\u00e8me (voir le tableau de s\u00e9lection d'outils ci-dessus).<\/li>\n<li><strong>Cr\u00e9ez un cas de test simple<\/strong>&nbsp;: v\u00e9rifiez la mise en \u0153uvre par rapport aux solutions analytiques ou aux rep\u00e8res publi\u00e9s.<\/li>\n<li><strong>Effectuez une analyse de sensibilit\u00e9<\/strong>&nbsp;: identifiez les param\u00e8tres et les hypoth\u00e8ses qui affectent le plus les r\u00e9sultats.<\/li>\n<li><strong>Document \u00e0 fond<\/strong>&nbsp;: enregistrez les versions du mod\u00e8le, les param\u00e8tres et les graines al\u00e9atoires pour la reproductibilit\u00e9.<\/li>\n<\/ol>\n<p>Pour une vue plus large de la fa\u00e7on dont les PDE sous-tendent la mod\u00e9lisation g\u00e9ophysique sur tous les syst\u00e8mes terrestres, consultez le <a href=\"https:\/\/matforge.org\/geophysics-applications-pde-modeling-for-earth-systems\/\" target=\"_blank\" rel=\"nofollow noopener\">Guide d'aper\u00e7u g\u00e9ophysique<\/a>. Pour obtenir des conseils sur le choix entre les solveurs Python PDE plus g\u00e9n\u00e9ralement, lisez l'analyse <a href=\"https:\/\/matforge.org\/choosing-right-python-pde-solver-fipy-py-pde-fenics\/\" target=\"_blank\" rel=\"nofollow noopener\">PDE Solver<\/a> et l'analyse <a href=\"https:\/\/matforge.org\/when-to-use-fem-fvm-fdm\/\" target=\"_blank\" rel=\"nofollow noopener\">FEM vs FVM vs FDM<\/a>.<\/p>\n<p>Si vous avez besoin d'aide pour la conception de flux de travail g\u00e9ophysiques ou la s\u00e9lection des bons outils pour vos recherches, nous sommes heureux de discuter de vos besoins sp\u00e9cifiques de projet - <a\u00a00>Demandez une consultation.<\/a\u00a00><\/p>\n<h2>R\u00e9f\u00e9rences<\/h2>\n<p>[1] USGS. (2017). <em>Documentation pour le mod\u00e8le d'\u00e9coulement des eaux souterraines MODFLOW 6<\/em>. Techniques et m\u00e9thodes 6-A55.<\/p>\n<p>[2] Bakker, M., et al. (2016). D\u00e9veloppement de mod\u00e8les de scripts ModFlow \u00e0 l'aide de Python et de Flopy. <em>eau souterraine<\/em>, 54(5), 656-663.<\/p>\n<p>[3] Lisez-moi de flopy github. https:\/\/github.com\/modflowpy\/flopy<\/p>\n<p>[4] NIST. (2024). <em>FIPY&nbsp;: solveur PDE de volume fini<\/em>. https:\/\/pages.nist.gov\/fipy\/<\/p>\n<p>[5] Slim Group, Georgia Tech. <em>Mod\u00e9lisation sismique et solveurs d'\u00e9quations d'ondes<\/em>. https:\/\/slim.gatech.edu\/research\/mod\u00e9lisation<\/p>\n<p>[6] Sweep&nbsp;2026. <em>Diff\u00e9renciation automatique pour la mod\u00e9lisation des ondes sismiques<\/em>. arxiv&nbsp;:&nbsp;2604.14189.<\/p>\n<p>[7] Devito-example le carnet de commandes vers l'avant. https:\/\/github.com\/slimgroup\/devito-examples\/blob\/master\/seismic\/tutorials\/tle_forward.ipynb<\/p>\n<p>[8] Introduction technique DeepWave. Kit Institut g\u00e9ophysique. https:\/\/www.gpi.kit.edu\/anglais\/518_951.php<\/p>\n"},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\"> 11<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span>Les ph\u00e9nom\u00e8nes g\u00e9ophysiques &#8211; du d\u00e9bit des eaux souterraines \u00e0 la propagation des ondes sismiques &#8211; sont r\u00e9gis par des \u00e9quations aux d\u00e9riv\u00e9es partielles qui d\u00e9crivent comment les grandeurs physiques changent dans l&rsquo;espace et dans le temps. Le poste 242 a introduit le cadre PDE plus large pour la mod\u00e9lisation des syst\u00e8mes terrestres, couvrant les [&hellip;]<\/p>\n","protected":false,"raw":""},"author":6,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_locale":"fr_FR","_original_post":"https:\/\/matforge.org\/?p=1064","iawp_total_views":1,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1209","post","type-post","status-publish","format-standard","hentry","category-simulation-modeling-projects","fr-FR"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Applications de la g\u00e9ophysique avec Python : d\u00e9bit des eaux souterraines et mod\u00e9lisation sismique - matforge.org<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/matforge.org\/fr\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Applications de la g\u00e9ophysique avec Python : d\u00e9bit des eaux souterraines et mod\u00e9lisation sismique - matforge.org\" \/>\n<meta property=\"og:description\" content=\"Reading Time:  11 minutesLes ph\u00e9nom\u00e8nes g\u00e9ophysiques &#8211; du d\u00e9bit des eaux souterraines \u00e0 la propagation des ondes sismiques &#8211; sont r\u00e9gis par des \u00e9quations aux d\u00e9riv\u00e9es partielles qui d\u00e9crivent comment les grandeurs physiques changent dans l&rsquo;espace et dans le temps. Le poste 242 a introduit le cadre PDE plus large pour la mod\u00e9lisation des syst\u00e8mes terrestres, couvrant les [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/matforge.org\/fr\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\/\" \/>\n<meta property=\"og:site_name\" content=\"matforge.org\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-21T14:28:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/raw.githubusercontent.com\/modflowpy\/flopy\/develop\/examples\/images\/quickstart.png\" \/>\n<meta name=\"author\" content=\"steven\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"steven\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\\\/\"},\"author\":{\"name\":\"steven\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/8f690fb596d657b12994b83caa788f03\"},\"headline\":\"Applications de la g\u00e9ophysique avec Python : d\u00e9bit des eaux souterraines et mod\u00e9lisation sismique\",\"datePublished\":\"2026-08-21T14:28:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\\\/\"},\"wordCount\":3494,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/raw.githubusercontent.com\\\/modflowpy\\\/flopy\\\/develop\\\/examples\\\/images\\\/quickstart.png\",\"articleSection\":[\"Simulation &amp; Projets de mod\u00e9lisation\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/matforge.org\\\/fr\\\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\\\/\",\"url\":\"https:\\\/\\\/matforge.org\\\/fr\\\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\\\/\",\"name\":\"Applications de la g\u00e9ophysique avec Python : d\u00e9bit des eaux souterraines et mod\u00e9lisation sismique - matforge.org\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/raw.githubusercontent.com\\\/modflowpy\\\/flopy\\\/develop\\\/examples\\\/images\\\/quickstart.png\",\"datePublished\":\"2026-08-21T14:28:52+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/8f690fb596d657b12994b83caa788f03\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/matforge.org\\\/fr\\\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\\\/#primaryimage\",\"url\":\"https:\\\/\\\/raw.githubusercontent.com\\\/modflowpy\\\/flopy\\\/develop\\\/examples\\\/images\\\/quickstart.png\",\"contentUrl\":\"https:\\\/\\\/raw.githubusercontent.com\\\/modflowpy\\\/flopy\\\/develop\\\/examples\\\/images\\\/quickstart.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/matforge.org\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Applications de la g\u00e9ophysique avec Python : d\u00e9bit des eaux souterraines et mod\u00e9lisation sismique\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\",\"url\":\"https:\\\/\\\/matforge.org\\\/\",\"name\":\"matforge.org\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/matforge.org\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/8f690fb596d657b12994b83caa788f03\",\"name\":\"steven\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g\",\"caption\":\"steven\"},\"url\":\"https:\\\/\\\/matforge.org\\\/author\\\/steven\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Applications de la g\u00e9ophysique avec Python : d\u00e9bit des eaux souterraines et mod\u00e9lisation sismique - matforge.org","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/matforge.org\/fr\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\/","og_locale":"fr_FR","og_type":"article","og_title":"Applications de la g\u00e9ophysique avec Python : d\u00e9bit des eaux souterraines et mod\u00e9lisation sismique - matforge.org","og_description":"Reading Time:  11 minutesLes ph\u00e9nom\u00e8nes g\u00e9ophysiques &#8211; du d\u00e9bit des eaux souterraines \u00e0 la propagation des ondes sismiques &#8211; sont r\u00e9gis par des \u00e9quations aux d\u00e9riv\u00e9es partielles qui d\u00e9crivent comment les grandeurs physiques changent dans l&rsquo;espace et dans le temps. Le poste 242 a introduit le cadre PDE plus large pour la mod\u00e9lisation des syst\u00e8mes terrestres, couvrant les [&hellip;]","og_url":"https:\/\/matforge.org\/fr\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\/","og_site_name":"matforge.org","article_published_time":"2026-08-21T14:28:52+00:00","og_image":[{"url":"https:\/\/raw.githubusercontent.com\/modflowpy\/flopy\/develop\/examples\/images\/quickstart.png","type":"","width":"","height":""}],"author":"steven","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"steven","Dur\u00e9e de lecture estim\u00e9e":"18 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/matforge.org\/fr\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\/#article","isPartOf":{"@id":"https:\/\/matforge.org\/fr\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\/"},"author":{"name":"steven","@id":"https:\/\/matforge.org\/#\/schema\/person\/8f690fb596d657b12994b83caa788f03"},"headline":"Applications de la g\u00e9ophysique avec Python : d\u00e9bit des eaux souterraines et mod\u00e9lisation sismique","datePublished":"2026-08-21T14:28:52+00:00","mainEntityOfPage":{"@id":"https:\/\/matforge.org\/fr\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\/"},"wordCount":3494,"commentCount":0,"image":{"@id":"https:\/\/matforge.org\/fr\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\/#primaryimage"},"thumbnailUrl":"https:\/\/raw.githubusercontent.com\/modflowpy\/flopy\/develop\/examples\/images\/quickstart.png","articleSection":["Simulation &amp; Projets de mod\u00e9lisation"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/matforge.org\/fr\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/matforge.org\/fr\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\/","url":"https:\/\/matforge.org\/fr\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\/","name":"Applications de la g\u00e9ophysique avec Python : d\u00e9bit des eaux souterraines et mod\u00e9lisation sismique - matforge.org","isPartOf":{"@id":"https:\/\/matforge.org\/#website"},"primaryImageOfPage":{"@id":"https:\/\/matforge.org\/fr\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\/#primaryimage"},"image":{"@id":"https:\/\/matforge.org\/fr\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\/#primaryimage"},"thumbnailUrl":"https:\/\/raw.githubusercontent.com\/modflowpy\/flopy\/develop\/examples\/images\/quickstart.png","datePublished":"2026-08-21T14:28:52+00:00","author":{"@id":"https:\/\/matforge.org\/#\/schema\/person\/8f690fb596d657b12994b83caa788f03"},"breadcrumb":{"@id":"https:\/\/matforge.org\/fr\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/matforge.org\/fr\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/matforge.org\/fr\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\/#primaryimage","url":"https:\/\/raw.githubusercontent.com\/modflowpy\/flopy\/develop\/examples\/images\/quickstart.png","contentUrl":"https:\/\/raw.githubusercontent.com\/modflowpy\/flopy\/develop\/examples\/images\/quickstart.png"},{"@type":"BreadcrumbList","@id":"https:\/\/matforge.org\/fr\/geophysics-applications-with-python-groundwater-flow-and-seismic-modeling\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/matforge.org\/"},{"@type":"ListItem","position":2,"name":"Applications de la g\u00e9ophysique avec Python : d\u00e9bit des eaux souterraines et mod\u00e9lisation sismique"}]},{"@type":"WebSite","@id":"https:\/\/matforge.org\/#website","url":"https:\/\/matforge.org\/","name":"matforge.org","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/matforge.org\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"https:\/\/matforge.org\/#\/schema\/person\/8f690fb596d657b12994b83caa788f03","name":"steven","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d46cfcd83a298f27e8d66bfa035514fefca7652f26bd3ef7402f82b68a41ec0f?s=96&d=mm&r=g","caption":"steven"},"url":"https:\/\/matforge.org\/author\/steven\/"}]}},"_links":{"self":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1209","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/comments?post=1209"}],"version-history":[{"count":1,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1209\/revisions"}],"predecessor-version":[{"id":1381,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1209\/revisions\/1381"}],"wp:attachment":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/media?parent=1209"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/categories?post=1209"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/tags?post=1209"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}