{"id":1273,"date":"2026-08-21T14:31:31","date_gmt":"2026-08-21T14:31:31","guid":{"rendered":"https:\/\/matforge.org\/?p=1273","raw":"https:\/\/matforge.org\/?p=1273"},"modified":"2026-08-21T14:31:31","modified_gmt":"2026-08-21T14:31:31","slug":"multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches","status":"publish","type":"post","link":"https:\/\/matforge.org\/fr\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\/","title":{"rendered":"Couplage de code multi-physique sans pr\u00e9cision : alternatives et approches personnalis\u00e9es","raw":"Couplage de code multi-physique sans pr\u00e9cision : alternatives et approches personnalis\u00e9es"},"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\"> 9<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span><p>Lorsque vous travaillez avec des simulations multi-physiques, vous devez souvent coupler deux ou plusieurs solveurs sp\u00e9cialis\u00e9s afin qu&rsquo;ils \u00e9changent des donn\u00e9es pendant le calcul. Precice est une biblioth\u00e8que de couplage open-source mature pour les simulations multi-physiques partitionn\u00e9es, en particulier lors de la connexion de solveurs ind\u00e9pendants tels que FIPY, OpenFoam ou Calculix.<\/p>\n<p>Mais le prix n&rsquo;est pas toujours une option. Vous pouvez travailler dans un environnement o\u00f9 l&rsquo;installation d&rsquo;une biblioth\u00e8que bas\u00e9e sur C++ avec des liaisons Python n&rsquo;est pas pratique. Vous pouvez utiliser un solveur commercial qui ne prend pas en charge Precice. Ou votre probl\u00e8me multi-physique peut \u00eatre suffisamment simple pour qu&rsquo;un cadre de couplage complet soit exag\u00e9r\u00e9.<\/p>\n<p>Cet article couvre des alternatives pratiques, notamment la mise \u00e0 jour s\u00e9quentielle \u00e0 l&rsquo;int\u00e9rieur de FIPY, le fractionnement de l&rsquo;op\u00e9rateur, les m\u00e9thodes d&rsquo;extrapolation polynomiale et les biblioth\u00e8ques de couplage \u00e0 usage g\u00e9n\u00e9ral.<\/p>\n<h2>Points \u00e0 retenir cl\u00e9s<\/h2>\n<ul>\n<li>Precice est puissant, mais ce n&rsquo;est pas la seule option pour le couplage multi-physique. La bonne alternative d\u00e9pend de la disponibilit\u00e9 du solveur, des pr\u00e9f\u00e9rences linguistiques, de la pr\u00e9paration au HPC et de la complexit\u00e9 du probl\u00e8me.<\/li>\n<li>Le couplage s\u00e9quentiel au sein de FIPY fonctionne bien lorsque les deux \u00e9quations vivent dans le m\u00eame processus Python. Il est simple, d\u00e9bogable et ne n\u00e9cessite aucune biblioth\u00e8que de couplage externe.<\/li>\n<li>L&rsquo;op\u00e9rateur divise la physique en d\u00e9coupage en r\u00e9solvant chaque \u00e9quation s\u00e9par\u00e9ment. Il est utile lorsque diff\u00e9rents processus physiques fonctionnent \u00e0 diff\u00e9rentes \u00e9chelles de temps.<\/li>\n<li>Les biblioth\u00e8ques de couplage \u00e0 usage g\u00e9n\u00e9ral telles que MUI et Moose MultiApps proposent des architectures alternatives avec des compromis de complexit\u00e9, de prise en charge linguistique et d&rsquo;\u00e9volutivit\u00e9.<\/li>\n<li>L&rsquo;orchestration bas\u00e9e sur les polynomes gr\u00e2ce \u00e0 des outils tels que Rhapsopy est une approche d&rsquo;ordre \u00e9lev\u00e9 qui adapte les pas de temps \u00e0 l&rsquo;aide d&rsquo;estimations d&rsquo;erreurs variables.<\/li>\n<\/ul>\n<h2>Partitionn\u00e9 VS monolithique VS couplage s\u00e9quentiel<\/h2>\n<p>Avant de comparer les alternatives, il est utile de clarifier les principales strat\u00e9gies de couplage. Le couplage multi-physique se divise g\u00e9n\u00e9ralement en trois cat\u00e9gories.<\/p>\n<h3>Couplage partitionn\u00e9<\/h3>\n<p>Dans le couplage partitionn\u00e9, des solveurs distincts communiquent via une interface externe ou une couche de middleware. Les solveurs restent des bo\u00eetes noires ind\u00e9pendantes et chaque solveur n&rsquo;a pas besoin de conna\u00eetre la structure interne de l&rsquo;autre.<\/p>\n<p>Precice est l&rsquo;exemple canonique. Les avantages incluent la r\u00e9utilisation du code, la flexibilit\u00e9 et la possibilit\u00e9 de coupler des codes commerciaux ou h\u00e9rit\u00e9s. Le compromis est une surcharge de communication et le besoin de cartographie des mailles, de transfert de donn\u00e9es et de coordination de couplage.<\/p>\n<h3>Couplage monolithique<\/h3>\n<p>Dans le couplage monolithique, toute la physique est r\u00e9solue ensemble dans un seul solveur et partage souvent la m\u00eame matrice de syst\u00e8me. Cela peut \u00eatre plus efficace pour les probl\u00e8mes \u00e9troitement coupl\u00e9s, car les non-lin\u00e9arit\u00e9s sont trait\u00e9es implicitement.<\/p>\n<p>Le compromis est un effort de d\u00e9veloppement \u00e9lev\u00e9. Toute la physique doit \u00eatre impl\u00e9ment\u00e9e dans un seul cadre. Moose est un framework notable qui prend en charge les flux de travail de style monolithique et propose \u00e9galement des mod\u00e8les partitionn\u00e9s via plusieurs applications.<\/p>\n<h3>Couplage s\u00e9quentiel<\/h3>\n<p>Le couplage s\u00e9quentiel fonctionne lorsque toute la physique peut \u00eatre exprim\u00e9e dans un cadre de solveur. Dans Fipy, par exemple, vous pouvez r\u00e9soudre les \u00e9quations coupl\u00e9es les unes apr\u00e8s les autres dans le m\u00eame processus Python.<\/p>\n<p>Cela \u00e9vite compl\u00e8tement le middleware externe. Le compromis est que vous perdez la possibilit\u00e9 de coupler des solveurs ind\u00e9pendants \u00e9crits dans diff\u00e9rentes langues ou maintenus par diff\u00e9rentes organisations.<\/p>\n<h2>Couplage s\u00e9quentiel avec balayage FIPY<\/h2>\n<p>L&rsquo;alternative la plus simple \u00e0 precice est de r\u00e9soudre s\u00e9quentiellement des \u00e9quations coupl\u00e9es dans le m\u00eame processus Python. FIPY prend en charge ce mod\u00e8le via les m\u00e9thodes <code>sweep()<\/code> et <code>updateOld()<\/code>.<\/p>\n<h3>Le motif<\/h3>\n<p>L&rsquo;impl\u00e9mentation standard suit une boucle imbriqu\u00e9e&nbsp;:<\/p>\n<ol>\n<li>D\u00e9clarez les variables avec <code>hasOld=True<\/code> afin qu&rsquo;elles puissent stocker les valeurs pr\u00e9c\u00e9dentes pour les termes transitoires.<\/li>\n<li>Appelez <code>updateOld()<\/code> une fois par pas de temps physique pour verrouiller l&rsquo;\u00e9tat actuel en tant qu&rsquo;ancienne valeur.<\/li>\n<li>Appelez <code>eq.sweep()<\/code> \u00e0 plusieurs reprises dans une boucle interne jusqu&rsquo;\u00e0 ce que les r\u00e9sidus convergent.<\/li>\n<\/ol>\n<pre><code class=\"language-python\">from fipy import CellVariable, Grid1D\nfrom fipy import TransientTerm, DiffusionTerm, ImplicitSourceTerm\n\n# 1. Setup mesh and variables\nmesh = Grid1D(nx=50, Lx=1.0)\n\nv0 = CellVariable(\n    name=\"Variable 0\",\n    mesh=mesh,\n    value=0.5,\n    hasOld=True\n)\n\nv1 = CellVariable(\n    name=\"Variable 1\",\n    mesh=mesh,\n    value=0.5,\n    hasOld=True\n)\n\n# 2. Define coupled equations\neq0 = (\n    TransientTerm(var=v0)\n    == DiffusionTerm(coeff=0.01, var=v0)\n    - ImplicitSourceTerm(coeff=1.0, var=v1)\n)\n\neq1 = (\n    TransientTerm(var=v1)\n    == DiffusionTerm(coeff=0.01, var=v1)\n    - ImplicitSourceTerm(coeff=1.0, var=v0)\n)\n\n# 3. Simulation parameters\ndt = 1e-3\nsteps = 100\ntolerance = 1e-4\n\n# 4. Time-stepping and sweeping loop\nfor step in range(steps):\n    v0.updateOld()\n    v1.updateOld()\n    \n    residual0 = residual1 = 1.0\n    \n    while (residual0 &gt; tolerance) or (residual1 &gt; tolerance):\n        residual0 = eq0.sweep(var=v0, dt=dt)\n        residual1 = eq1.sweep(var=v1, dt=dt)\n<\/code><\/pre>\n<h3>Quand cela fonctionne le mieux<\/h3>\n<ul>\n<li>Les deux physiques peuvent \u00eatre exprim\u00e9es en PDE \u00e0 l&rsquo;int\u00e9rieur de FIPY.<\/li>\n<li>Vous avez besoin d&rsquo;un prototypage ou d&rsquo;un d\u00e9bogage rapide sans d\u00e9pendances externes.<\/li>\n<li>Le syst\u00e8me coupl\u00e9 a une non-lin\u00e9arit\u00e9 mod\u00e9r\u00e9e qui converge avec le balayage it\u00e9ratif.<\/li>\n<li>Vous r\u00e9solvez des mod\u00e8les de champ de phase, des syst\u00e8mes de r\u00e9action de diffusion ou des probl\u00e8mes de transport coupl\u00e9s.<\/li>\n<\/ul>\n<h3>Quand \u00e7a \u00e9choue<\/h3>\n<ul>\n<li>Vous devez coupler des solveurs \u00e9crits en C++, Fortran ou dans d&rsquo;autres langues.<\/li>\n<li>La physique est si \u00e9troitement coupl\u00e9e que les balayages s\u00e9quentielles n\u00e9cessitent trop d&rsquo;it\u00e9rations.<\/li>\n<li>Vos solveurs sont des ex\u00e9cutables distincts de diff\u00e9rentes organisations.<\/li>\n<li>Vous avez besoin d&rsquo;une mise \u00e0 l&rsquo;\u00e9chelle parall\u00e8le \u00e0 m\u00e9moire distribu\u00e9e sur plusieurs n\u0153uds de calcul.<\/li>\n<\/ul>\n<h2>Approches de partage des op\u00e9rateurs<\/h2>\n<p>La division de l&rsquo;op\u00e9rateur, \u00e9galement appel\u00e9e pas fractionnaire, d\u00e9compose un syst\u00e8me coupl\u00e9 en sous-\u00e9tapes s\u00e9quentielles. Chaque sous-\u00e9tape r\u00e9sout un mod\u00e8le physique. Ceci est utile lorsque les processus physiques fonctionnent \u00e0 diff\u00e9rentes \u00e9chelles de temps.<\/p>\n<h3>Fraction additive vs multiplicative<\/h3>\n<p>La division additive d\u00e9compose une \u00e9quation en op\u00e9rateurs distincts et r\u00e9sout chaque contribution ind\u00e9pendamment. Le fractionnement multiplicatif s&rsquo;applique aux op\u00e9rateurs de mani\u00e8re s\u00e9quentielle avec un ordre d\u00e9fini, qui est important lorsque les op\u00e9rateurs ne font pas la navette.<\/p>\n<p>Pour les workflows multi-physiques, la division additive est souvent plus facile \u00e0 appliquer. Chaque mod\u00e8le physique peut utiliser son propre solveur optimis\u00e9, et la logique de couplage reste modulaire.<\/p>\n<h3>Biblioth\u00e8ques de partage d&rsquo;op\u00e9rateurs Python<\/h3>\n<p>Plusieurs outils et exemples orient\u00e9s Python prennent en charge les flux de travail de partage des op\u00e9rateurs&nbsp;:<\/p>\n<ul>\n<li><a href=\"https:\/\/arxiv.org\/abs\/2407.05475\">Pythos<\/a> est une biblioth\u00e8que Python pour la division syst\u00e9matique des \u00e9quations diff\u00e9rentielles. Il prend en charge des mod\u00e8les tels que la s\u00e9paration de Strang, des m\u00e9thodes implicites et explicites et le pas de temps adaptatif.<\/li>\n<li><a href=\"https:\/\/www.researchgate.net\/publication\/382691924\">Venise<\/a> est un algorithme de fractionnement d&rsquo;op\u00e9rateurs multi-\u00e9chelle qui utilise la division Strang avec des pas de temps adaptatifs. Il est pertinent lorsque la physique coupl\u00e9e fonctionne sur diff\u00e9rentes \u00e9chelles de temps.<\/li>\n<li><a href=\"https:\/\/github.com\/odeSolver\/Operator-Splitting-Methods\">Methods-splitting-op\u00e9rateur<\/a> fournit des scripts Python autonomes pour un usage \u00e9ducatif. Ces scripts sont utiles pour l&rsquo;apprentissage mais ne sont pas pr\u00eats pour la production.<\/li>\n<\/ul>\n<h3>FIPY avec fractionnement de l&rsquo;op\u00e9rateur<\/h3>\n<p>Vous pouvez \u00e9galement combiner FIPY avec la division de l&rsquo;op\u00e9rateur manuellement. Un syst\u00e8me de diffusion-r\u00e9action peut \u00eatre divis\u00e9 en une \u00e9tape de diffusion et une \u00e9tape de r\u00e9action :<\/p>\n<pre><code class=\"language-python\"># Separate the reaction step from diffusion\ndt_diffusion = 0.001\ndt_reaction = 0.1\n\n# Solve diffusion with a small time step\neq_diff = TransientTerm(var=T) == DiffusionTerm(coeff=k, var=T)\neq_diff.sweep(dt=dt_diffusion)\n\n# Solve reaction with a larger time step\neq_react = TransientTerm(var=T) == ReactionTerm(source, var=T)\neq_react.sweep(dt=dt_reaction)\n<\/code><\/pre>\n<p>Le sch\u00e9ma de base est exact au premier ordre. Pour une pr\u00e9cision du second ordre, utilisez la division Strang&nbsp;: diffusion en demi-\u00e9tape, r\u00e9action compl\u00e8te, puis diffusion en demi-\u00e9tape.<\/p>\n<h2>Biblioth\u00e8ques de couplage \u00e0 usage g\u00e9n\u00e9ral<\/h2>\n<p>Si vous avez besoin d&rsquo;un couplage partitionn\u00e9 mais que vous ne pouvez pas utiliser de prix, il existe plusieurs alternatives.<\/p>\n<h3>MUI : Interface universelle multi-\u00e9chelle<\/h3>\n<p><a href=\"https:\/\/mxui.github.io\/\">mui<\/a> est une biblioth\u00e8que C++ uniquement pour le couplage des solveurs h\u00e9t\u00e9rog\u00e8nes. Il traite les donn\u00e9es \u00e9chang\u00e9es comme des nuages de points et g\u00e8re automatiquement l&rsquo;interpolation spatiale et temporelle.<\/p>\n<p>Les principales caract\u00e9ristiques comprennent :<\/p>\n<ul>\n<li>Repr\u00e9sentation ponctuelle. MUI peut transf\u00e9rer des donn\u00e9es sans avoir besoin d&rsquo;un solveur pour conna\u00eetre la connectivit\u00e9 maill\u00e9e d&rsquo;un autre solveur.<\/li>\n<li>Interpolation spatiale et temporelle. Les outils d&rsquo;interpolation int\u00e9gr\u00e9s aident les solveurs \u00e0 communiquer \u00e0 diff\u00e9rentes \u00e9chelles.<\/li>\n<li>Envoi intelligent. Cet algorithme limite la communication aux domaines qui se chevauchent et r\u00e9duit la communication inutile entre tous.<\/li>\n<li>Support linguistique. MUI est \u00e9crit en C++ et propose des wrappers pour Python, Fortran et C.<\/li>\n<\/ul>\n<p>MUI est utile lorsque vous devez coupler des solveurs avec des discr\u00e9tisations fondamentalement diff\u00e9rentes, telles que FEM, FVM, DEM ou SPH.<\/p>\n<p>Choisissez MUI plut\u00f4t que lorsque vous avez besoin d&rsquo;une interface l\u00e9g\u00e8re int\u00e9gr\u00e9e ou lorsque les diff\u00e9rences de connectivit\u00e9 maill\u00e9es rendent l&rsquo;infrastructure de couplage standard trop lourde.<\/p>\n<p>Tenez-vous-en \u00e0 Precice lorsque vous avez besoin d&rsquo;une mise \u00e0 l&rsquo;\u00e9chelle parall\u00e8le mature, d&rsquo;une acc\u00e9l\u00e9ration quasi-newton pour les probl\u00e8mes fortement coupl\u00e9s et d&rsquo;un \u00e9cosyst\u00e8me d&rsquo;adaptateurs plus large.<\/p>\n<h3>Multi-applications et syst\u00e8mes de transfert d&rsquo;orignal<\/h3>\n<p>L&rsquo;orignal peut r\u00e9soudre des syst\u00e8mes enti\u00e8rement coupl\u00e9s, mais ses syst\u00e8mes <code>MultiApps<\/code> et <code>Transfer<\/code> prennent \u00e9galement en charge les approches partitionn\u00e9es. Moose cr\u00e9e des sous-applications qui transmettent des donn\u00e9es de champ dans les deux sens.<\/p>\n<p>Moose prend en charge plusieurs styles de couplage :<\/p>\n<ul>\n<li>Flux de travail enti\u00e8rement coupl\u00e9s o\u00f9 toute la physique est r\u00e9solue en une seule it\u00e9ration non lin\u00e9aire.<\/li>\n<li>Des flux de travail de type Picard ou Newton \u00e9troitement coupl\u00e9s o\u00f9 les sous-applications physiques s&rsquo;ex\u00e9cutent \u00e0 chaque pas de temps.<\/li>\n<li>Flux de travail \u00e9chelonn\u00e9s o\u00f9 chaque physique progresse ind\u00e9pendamment et \u00e9change des donn\u00e9es \u00e0 des limites d\u00e9finies.<\/li>\n<\/ul>\n<p>L&rsquo;orignal est principalement ax\u00e9 sur le C++. Les outils Python existent, mais l&rsquo;\u00e9cosyst\u00e8me est moins python que les flux de travail construits autour de Fipy ou Precice.<\/p>\n<h2>Couplage polynomial avec Rhapsopy<\/h2>\n<p><a href=\"https:\/\/github.com\/hpc-maths\/Rhapsopy\">rhapsopy<\/a> utilise des approximations polynomiales des variables de couplage au fil du temps. Au lieu d&rsquo;\u00e9changer une seule valeur \u00e0 chaque \u00e9tape de couplage, chaque sous-syst\u00e8me s&rsquo;int\u00e8gre en utilisant une approximation polynomiale de son entr\u00e9e \u00e0 partir de l&rsquo;autre sous-syst\u00e8me.<\/p>\n<h3>Comment cela fonctionne<\/h3>\n<p>Au cours d&rsquo;une \u00e9tape de couplage, chaque sous-syst\u00e8me est int\u00e9gr\u00e9 \u00e0 son propre solveur tout en utilisant des variables d&rsquo;entr\u00e9e approxim\u00e9es de mani\u00e8re polynomiale. \u00c0 la fin de l&rsquo;\u00e9tape, de nouvelles variables de couplage sont calcul\u00e9es et les polyn\u00f4mes sont mis \u00e0 jour.<\/p>\n<p>Cette approche peut aider \u00e0 :<\/p>\n<ol>\n<li>pr\u00e9cision. Les approximations polynomiales d&rsquo;ordre sup\u00e9rieur capturent mieux les changements temporels que l&rsquo;extrapolation constante ou lin\u00e9aire.<\/li>\n<li>Pas de temps adaptatif. Les estimations d&rsquo;erreurs provenant d&rsquo;approximations polynomiales peuvent guider la taille du pas de temps de couplage.<\/li>\n<li>Couplage explicite et implicite. Les versions implicites peuvent am\u00e9liorer la stabilit\u00e9, mais n\u00e9cessitent la r\u00e9solution d&rsquo;un probl\u00e8me de point fixe \u00e0 chaque \u00e9tape.<\/li>\n<\/ol>\n<h3>Statut actuel<\/h3>\n<p>Rhapsopy est actuellement mieux consid\u00e9r\u00e9 comme un outil de d\u00e9monstration pour les probl\u00e8mes \u00e0 petite \u00e9chelle. Il est prometteur pour les utilisateurs de Python qui souhaitent un couplage adaptatif de haut niveau, mais ce n&rsquo;est pas encore une solution HPC \u00e0 grande \u00e9chelle mature.<\/p>\n<h2>Couplage natif COMSOL<\/h2>\n<p>COMSOL Multiphysics utilise un mod\u00e8le diff\u00e9rent. Au lieu de coupler des solveurs externes, COMSOL d\u00e9finit nativement les couplages multiphysiques dans le m\u00eame environnement logiciel.<\/p>\n<p>Les utilisateurs de COMSOL peuvent :<\/p>\n<ul>\n<li>D\u00e9finir des conditions d&rsquo;interface telles que la continuit\u00e9 du flux de chaleur ou l&rsquo;\u00e9quilibre des contraintes.<\/li>\n<li>Utilisez des strat\u00e9gies de solution enti\u00e8rement coupl\u00e9es pour des probl\u00e8mes non lin\u00e9aires.<\/li>\n<li>Basculez entre des strat\u00e9gies s\u00e9par\u00e9es et enti\u00e8rement coupl\u00e9es en fonction de la complexit\u00e9 du probl\u00e8me.<\/li>\n<\/ul>\n<p>Ceci est simple pour les utilisateurs d\u00e9j\u00e0 pr\u00e9sents dans COMSOL. Le compromis est le verrouillage du fournisseur. Le couplage des solveurs externes n\u00e9cessite g\u00e9n\u00e9ralement des interfaces sp\u00e9cifiques \u00e0 COMSOL, des flux de travail Livelink ou des ponts de script.<\/p>\n<h2>R\u00e9sum\u00e9 de la comparaison<\/h2>\n<table class=\"custom-table\">\n<tbody>\n<tr>\n<th>Approche<\/th>\n<th>le mieux pour<\/th>\n<th>Pros<\/th>\n<th>Les inconv\u00e9nients<\/th>\n<th>D\u00e9pendance externe<\/th>\n<\/tr>\n<tr>\n<td>Balayage s\u00e9quentiel FIPY<\/td>\n<td>EDP coupl\u00e9s au m\u00eame processus<\/td>\n<td>Simple, d\u00e9bogable, aucune biblioth\u00e8que de couplage externe<\/td>\n<td>Limit\u00e9 aux it\u00e9rations FIPY et s\u00e9quentielles<\/td>\n<td>Aucun<\/td>\n<\/tr>\n<tr>\n<td>Split d&rsquo;op\u00e9rateur<\/td>\n<td>diff\u00e9rentes \u00e9chelles de temps<\/td>\n<td>Modulaire et r\u00e9utilise des solveurs optimis\u00e9s<\/td>\n<td>Division des erreurs et des contraintes de stabilit\u00e9<\/td>\n<td>Biblioth\u00e8que facultative telle que Pythos<\/td>\n<\/tr>\n<tr>\n<td>mui<\/td>\n<td>Diff\u00e9rents types de maillage et discr\u00e9tisations<\/td>\n<td>Conception en-t\u00eate et large plage de simulation<\/td>\n<td>Mise \u00e0 l&rsquo;\u00e9chelle parall\u00e8le moins mature que le prix dans certains cas<\/td>\n<td>Biblioth\u00e8que MUI<\/td>\n<\/tr>\n<tr>\n<td>Multi-applications Moose<\/td>\n<td>Flux de travail des \u00e9cosyst\u00e8mes C++ et Moose<\/td>\n<td>Options monolithiques et partitionn\u00e9es<\/td>\n<td>Principalement C++ et moins Python-Natif<\/td>\n<td>Cadre d&rsquo;orignal<\/td>\n<\/tr>\n<tr>\n<td>\u00e9loge enthousiaste<\/td>\n<td>Couplage d&rsquo;ordre adaptatif<\/td>\n<td>Estimations de pas de temps et d&rsquo;erreurs dynamiques<\/td>\n<td>Premi\u00e8re \u00e9tape et petite \u00e9chelle uniquement<\/td>\n<td>\u00e9loge enthousiaste<\/td>\n<\/tr>\n<tr>\n<td>Couplage natif COMSOL<\/td>\n<td>Flux de travail commerciaux int\u00e9gr\u00e9s<\/td>\n<td>Interface enti\u00e8rement coupl\u00e9e et intuitive<\/td>\n<td>Verrouillage du fournisseur<\/td>\n<td>Licence COMSOL<\/td>\n<\/tr>\n<tr>\n<td>se pr\u00e9ciser<\/td>\n<td>Couplage partitionn\u00e9 mature<\/td>\n<td>Prouv\u00e9e, document\u00e9e et soutenue par une communaut\u00e9<\/td>\n<td>N\u00e9cessite des liaisons C++\/Python et une configuration de l&rsquo;adaptateur<\/td>\n<td>Biblioth\u00e8que de prix<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Guide de d\u00e9cision pratique<\/h2>\n<p>Utilisez ce guide de d\u00e9cision lorsque vous ne pouvez pas ou ne souhaitez pas utiliser Precice.<\/p>\n<ol>\n<li>Toutes les physiques sont-elles exprimables dans Fipy ? Utilisez le balayage s\u00e9quentiel. C&rsquo;est le chemin le plus simple et ne n\u00e9cessite aucune d\u00e9pendance externe.<\/li>\n<li>Votre physique fonctionne-t-elle \u00e0 des \u00e9chelles de temps tr\u00e8s diff\u00e9rentes&nbsp;? Essayez le fractionnement de l&rsquo;op\u00e9rateur. Le d\u00e9couplage permet \u00e0 chaque physique d&rsquo;utiliser son propre pas de temps.<\/li>\n<li>associez-vous des solveurs \u00e0 des discr\u00e9tisations fondamentalement diff\u00e9rentes&nbsp;? Consid\u00e9rez MUI. Sa repr\u00e9sentation ponctuelle peut g\u00e9rer le couplage maillage \u00e0 mesh et maillage \u00e0 particules.<\/li>\n<li>Travaillez-vous en C++ ou dans l&rsquo;\u00e9cosyst\u00e8me Moose&nbsp;? Les multi-applications Moose offrent des options monolithiques, \u00e9troitement coupl\u00e9es et d\u00e9cal\u00e9es \u00e0 l&rsquo;int\u00e9rieur d&rsquo;un m\u00eame framework.<\/li>\n<li>Avez-vous besoin d&rsquo;un pas de temps adaptatif bas\u00e9 sur des erreurs de couplage&nbsp;? Essayez Rhapsopy pour des exp\u00e9riences \u00e0 petite \u00e9chelle ou surveillez son d\u00e9veloppement pour des flux de travail plus importants.<\/li>\n<li>Utilisez-vous un solveur commercial&nbsp;? V\u00e9rifiez s&rsquo;il poss\u00e8de des fonctions multiphysiques natives ou s&rsquo;il prend en charge les biblioth\u00e8ques de couplage externes.<\/li>\n<\/ol>\n<h2>Ce que nous recommandons<\/h2>\n<p>Pour les utilisateurs de FIPY travaillant en Python, la recommandation d\u00e9pend de la complexit\u00e9 du probl\u00e8me.<\/p>\n<ul>\n<li>Couplage simple, tel que la r\u00e9action-r\u00e9action, le champ de phase ou le transport&nbsp;: utilisez un balayage s\u00e9quentiel avec <code>sweep()<\/code>. Il est simple et ne n\u00e9cessite aucune d\u00e9pendance externe.<\/li>\n<li>Complexit\u00e9 mod\u00e9r\u00e9e, telle que des solveurs externes faiblement coupl\u00e9s ou diff\u00e9rentes \u00e9chelles de temps&nbsp;: utilisez la division d&rsquo;un op\u00e9rateur avec une biblioth\u00e8que structur\u00e9e telle que Pythos.<\/li>\n<li>Complexit\u00e9 \u00e9lev\u00e9e, comme les solveurs \u00e9troitement coupl\u00e9s dans diff\u00e9rentes langues&nbsp;: utilisez le prix lorsque cela est possible. Les alternatives n&rsquo;offrent pas encore la m\u00eame maturit\u00e9, l&rsquo;\u00e9volutivit\u00e9 parall\u00e8le ou l&rsquo;acc\u00e9l\u00e9ration de convergence.<\/li>\n<\/ul>\n<p>Si Precice n&rsquo;est pas disponible, la meilleure option suivante d\u00e9pend de votre environnement. Pour la recherche universitaire sans acc\u00e8s au HPC, la conception d&rsquo;en-t\u00eate de MUI peut \u00eatre plus facile \u00e0 int\u00e9grer. Pour les simulations de production n\u00e9cessitant une mise \u00e0 l&rsquo;\u00e9chelle parall\u00e8le, Precice reste l&rsquo;option la plus solide si vous pouvez l&rsquo;utiliser.<\/p>\n<h2>Ce qu&rsquo;il faut \u00e9viter<\/h2>\n<ul>\n<li>\u00c9change de donn\u00e9es manuel en boucles sans it\u00e9ration ni crit\u00e8re de convergence. Cela peut diverger ou produire des r\u00e9sultats inexacts.<\/li>\n<li>Extrapolation des variables de couplage sans contr\u00f4le des erreurs. L&rsquo;utilisation de la valeur de couplage du pas de temps pr\u00e9c\u00e9dent comme valeur actuelle n&rsquo;est que pr\u00e9cise du premier ordre et peut \u00eatre instable pour les probl\u00e8mes fortement coupl\u00e9s.<\/li>\n<li>n\u00e9gliger la sous-relaxation. Pour le couplage non lin\u00e9aire, incluez des param\u00e8tres de sous-relaxation pour r\u00e9duire la divergence du solveur.<\/li>\n<li>En supposant des \u00e9chelles de balayage s\u00e9quentielles. Le couplage s\u00e9quentiel \u00e0 l&rsquo;int\u00e9rieur d&rsquo;un processus Python ne sera pas mis \u00e0 l&rsquo;\u00e9chelle sur les n\u0153uds de calcul \u00e0 m\u00e9moire distribu\u00e9e.<\/li>\n<\/ul>\n<h2>Guides connexes<\/h2>\n<ul>\n<li><a href=\"https:\/\/matforge.org\/code-coupling-precice-multi-physics-python\/\">Code couplage avec precice&nbsp;: simulations multi-physiques en Python<\/a>&nbsp;: installation, mise en \u0153uvre de l&rsquo;adaptateur et configuration lorsque Le prix est disponible.<\/li>\n<li><a href=\"https:\/\/matforge.org\/extending-fipy-with-custom-modules\/\">\u00c9largir FIPY avec des modules personnalis\u00e9s<\/a> &#8211; organiser le code PDE r\u00e9utilisable, les termes source et les mod\u00e8les coupl\u00e9s dans Fipy.<\/li>\n<li><a href=\"https:\/\/matforge.org\/what-is-fipy-and-when-should-you-use-it\/\">Qu&rsquo;est-ce que FIPY et quand devriez-vous l&rsquo;utiliser&nbsp;?<\/a> &#8211; FONDEMENT ET CAS D&rsquo;UTILISATION.<\/li>\n<li><a href=\"https:\/\/matforge.org\/understanding-phase-field-models-in-materials-science\/\">Comprendre les mod\u00e8les de champs de phase dans la science des mat\u00e9riaux<\/a> \u2014 Applications multiphysiques en champ de phase.<\/li>\n<li><a href=\"https:\/\/matforge.org\/managing-large-scale-pde-problems-strategies-solvers-and-hpc-case-studies\/\">Gestion des probl\u00e8mes de PDE \u00e0 grande \u00e9chelle&nbsp;: strat\u00e9gies, solveurs et \u00e9tudes de cas HPC<\/a>&nbsp;: strat\u00e9gies pour mettre \u00e0 l&rsquo;\u00e9chelle des flux de travail de simulation complexes.<\/li>\n<\/ul>\n<h2>Besoin d&rsquo;aide pour concevoir votre flux de travail multi-physique ?<\/h2>\n<p>Le choix de la bonne approche de couplage d\u00e9pend de vos solveurs, contraintes et complexit\u00e9 du probl\u00e8me. Matforge propose des services de consultation pour la conception de logiciels de recherche et de simulation. Nous pouvons vous aider \u00e0 \u00e9valuer les compromis entre le prix, le couplage s\u00e9quentiel, le fractionnement des op\u00e9rateurs et d&rsquo;autres approches pour votre probl\u00e8me sp\u00e9cifique multiphysique.<\/p>\n<p><a href=\"https:\/\/matforge.org\/\">Visitez Matforge Homepage<\/a> pour en savoir plus sur les services de consultation et les flux de travail de recherche.<\/p>\n","protected":false,"raw":"<p>Lorsque vous travaillez avec des simulations multi-physiques, vous devez souvent coupler deux ou plusieurs solveurs sp\u00e9cialis\u00e9s afin qu'ils \u00e9changent des donn\u00e9es pendant le calcul. Precice est une biblioth\u00e8que de couplage open-source mature pour les simulations multi-physiques partitionn\u00e9es, en particulier lors de la connexion de solveurs ind\u00e9pendants tels que FIPY, OpenFoam ou Calculix.<\/p>\n<p>Mais le prix n'est pas toujours une option. Vous pouvez travailler dans un environnement o\u00f9 l'installation d'une biblioth\u00e8que bas\u00e9e sur C++ avec des liaisons Python n'est pas pratique. Vous pouvez utiliser un solveur commercial qui ne prend pas en charge Precice. Ou votre probl\u00e8me multi-physique peut \u00eatre suffisamment simple pour qu'un cadre de couplage complet soit exag\u00e9r\u00e9.<\/p>\n<p>Cet article couvre des alternatives pratiques, notamment la mise \u00e0 jour s\u00e9quentielle \u00e0 l'int\u00e9rieur de FIPY, le fractionnement de l'op\u00e9rateur, les m\u00e9thodes d'extrapolation polynomiale et les biblioth\u00e8ques de couplage \u00e0 usage g\u00e9n\u00e9ral.<\/p>\n<h2>Points \u00e0 retenir cl\u00e9s<\/h2>\n<ul>\n<li>Precice est puissant, mais ce n'est pas la seule option pour le couplage multi-physique. La bonne alternative d\u00e9pend de la disponibilit\u00e9 du solveur, des pr\u00e9f\u00e9rences linguistiques, de la pr\u00e9paration au HPC et de la complexit\u00e9 du probl\u00e8me.<\/li>\n<li>Le couplage s\u00e9quentiel au sein de FIPY fonctionne bien lorsque les deux \u00e9quations vivent dans le m\u00eame processus Python. Il est simple, d\u00e9bogable et ne n\u00e9cessite aucune biblioth\u00e8que de couplage externe.<\/li>\n<li>L'op\u00e9rateur divise la physique en d\u00e9coupage en r\u00e9solvant chaque \u00e9quation s\u00e9par\u00e9ment. Il est utile lorsque diff\u00e9rents processus physiques fonctionnent \u00e0 diff\u00e9rentes \u00e9chelles de temps.<\/li>\n<li>Les biblioth\u00e8ques de couplage \u00e0 usage g\u00e9n\u00e9ral telles que MUI et Moose MultiApps proposent des architectures alternatives avec des compromis de complexit\u00e9, de prise en charge linguistique et d'\u00e9volutivit\u00e9.<\/li>\n<li>L'orchestration bas\u00e9e sur les polynomes gr\u00e2ce \u00e0 des outils tels que Rhapsopy est une approche d'ordre \u00e9lev\u00e9 qui adapte les pas de temps \u00e0 l'aide d'estimations d'erreurs variables.<\/li>\n<\/ul>\n<h2>Partitionn\u00e9 VS monolithique VS couplage s\u00e9quentiel<\/h2>\n<p>Avant de comparer les alternatives, il est utile de clarifier les principales strat\u00e9gies de couplage. Le couplage multi-physique se divise g\u00e9n\u00e9ralement en trois cat\u00e9gories.<\/p>\n<h3>Couplage partitionn\u00e9<\/h3>\n<p>Dans le couplage partitionn\u00e9, des solveurs distincts communiquent via une interface externe ou une couche de middleware. Les solveurs restent des bo\u00eetes noires ind\u00e9pendantes et chaque solveur n'a pas besoin de conna\u00eetre la structure interne de l'autre.<\/p>\n<p>Precice est l'exemple canonique. Les avantages incluent la r\u00e9utilisation du code, la flexibilit\u00e9 et la possibilit\u00e9 de coupler des codes commerciaux ou h\u00e9rit\u00e9s. Le compromis est une surcharge de communication et le besoin de cartographie des mailles, de transfert de donn\u00e9es et de coordination de couplage.<\/p>\n<h3>Couplage monolithique<\/h3>\n<p>Dans le couplage monolithique, toute la physique est r\u00e9solue ensemble dans un seul solveur et partage souvent la m\u00eame matrice de syst\u00e8me. Cela peut \u00eatre plus efficace pour les probl\u00e8mes \u00e9troitement coupl\u00e9s, car les non-lin\u00e9arit\u00e9s sont trait\u00e9es implicitement.<\/p>\n<p>Le compromis est un effort de d\u00e9veloppement \u00e9lev\u00e9. Toute la physique doit \u00eatre impl\u00e9ment\u00e9e dans un seul cadre. Moose est un framework notable qui prend en charge les flux de travail de style monolithique et propose \u00e9galement des mod\u00e8les partitionn\u00e9s via plusieurs applications.<\/p>\n<h3>Couplage s\u00e9quentiel<\/h3>\n<p>Le couplage s\u00e9quentiel fonctionne lorsque toute la physique peut \u00eatre exprim\u00e9e dans un cadre de solveur. Dans Fipy, par exemple, vous pouvez r\u00e9soudre les \u00e9quations coupl\u00e9es les unes apr\u00e8s les autres dans le m\u00eame processus Python.<\/p>\n<p>Cela \u00e9vite compl\u00e8tement le middleware externe. Le compromis est que vous perdez la possibilit\u00e9 de coupler des solveurs ind\u00e9pendants \u00e9crits dans diff\u00e9rentes langues ou maintenus par diff\u00e9rentes organisations.<\/p>\n<h2>Couplage s\u00e9quentiel avec balayage FIPY<\/h2>\n<p>L'alternative la plus simple \u00e0 precice est de r\u00e9soudre s\u00e9quentiellement des \u00e9quations coupl\u00e9es dans le m\u00eame processus Python. FIPY prend en charge ce mod\u00e8le via les m\u00e9thodes <code>sweep()<\/code> et <code>updateOld()<\/code>.<\/p>\n<h3>Le motif<\/h3>\n<p>L'impl\u00e9mentation standard suit une boucle imbriqu\u00e9e&nbsp;:<\/p>\n<ol>\n<li>D\u00e9clarez les variables avec <code>hasOld=True<\/code> afin qu'elles puissent stocker les valeurs pr\u00e9c\u00e9dentes pour les termes transitoires.<\/li>\n<li>Appelez <code>updateOld()<\/code> une fois par pas de temps physique pour verrouiller l'\u00e9tat actuel en tant qu'ancienne valeur.<\/li>\n<li>Appelez <code>eq.sweep()<\/code> \u00e0 plusieurs reprises dans une boucle interne jusqu'\u00e0 ce que les r\u00e9sidus convergent.<\/li>\n<\/ol>\n<pre><code class=\"language-python\">from fipy import CellVariable, Grid1D\nfrom fipy import TransientTerm, DiffusionTerm, ImplicitSourceTerm\n\n# 1. Setup mesh and variables\nmesh = Grid1D(nx=50, Lx=1.0)\n\nv0 = CellVariable(\n    name=\"Variable 0\",\n    mesh=mesh,\n    value=0.5,\n    hasOld=True\n)\n\nv1 = CellVariable(\n    name=\"Variable 1\",\n    mesh=mesh,\n    value=0.5,\n    hasOld=True\n)\n\n# 2. Define coupled equations\neq0 = (\n    TransientTerm(var=v0)\n    == DiffusionTerm(coeff=0.01, var=v0)\n    - ImplicitSourceTerm(coeff=1.0, var=v1)\n)\n\neq1 = (\n    TransientTerm(var=v1)\n    == DiffusionTerm(coeff=0.01, var=v1)\n    - ImplicitSourceTerm(coeff=1.0, var=v0)\n)\n\n# 3. Simulation parameters\ndt = 1e-3\nsteps = 100\ntolerance = 1e-4\n\n# 4. Time-stepping and sweeping loop\nfor step in range(steps):\n    v0.updateOld()\n    v1.updateOld()\n    \n    residual0 = residual1 = 1.0\n    \n    while (residual0 &gt; tolerance) or (residual1 &gt; tolerance):\n        residual0 = eq0.sweep(var=v0, dt=dt)\n        residual1 = eq1.sweep(var=v1, dt=dt)\n<\/code><\/pre>\n<h3>Quand cela fonctionne le mieux<\/h3>\n<ul>\n<li>Les deux physiques peuvent \u00eatre exprim\u00e9es en PDE \u00e0 l'int\u00e9rieur de FIPY.<\/li>\n<li>Vous avez besoin d'un prototypage ou d'un d\u00e9bogage rapide sans d\u00e9pendances externes.<\/li>\n<li>Le syst\u00e8me coupl\u00e9 a une non-lin\u00e9arit\u00e9 mod\u00e9r\u00e9e qui converge avec le balayage it\u00e9ratif.<\/li>\n<li>Vous r\u00e9solvez des mod\u00e8les de champ de phase, des syst\u00e8mes de r\u00e9action de diffusion ou des probl\u00e8mes de transport coupl\u00e9s.<\/li>\n<\/ul>\n<h3>Quand \u00e7a \u00e9choue<\/h3>\n<ul>\n<li>Vous devez coupler des solveurs \u00e9crits en C++, Fortran ou dans d'autres langues.<\/li>\n<li>La physique est si \u00e9troitement coupl\u00e9e que les balayages s\u00e9quentielles n\u00e9cessitent trop d'it\u00e9rations.<\/li>\n<li>Vos solveurs sont des ex\u00e9cutables distincts de diff\u00e9rentes organisations.<\/li>\n<li>Vous avez besoin d'une mise \u00e0 l'\u00e9chelle parall\u00e8le \u00e0 m\u00e9moire distribu\u00e9e sur plusieurs n\u0153uds de calcul.<\/li>\n<\/ul>\n<h2>Approches de partage des op\u00e9rateurs<\/h2>\n<p>La division de l'op\u00e9rateur, \u00e9galement appel\u00e9e pas fractionnaire, d\u00e9compose un syst\u00e8me coupl\u00e9 en sous-\u00e9tapes s\u00e9quentielles. Chaque sous-\u00e9tape r\u00e9sout un mod\u00e8le physique. Ceci est utile lorsque les processus physiques fonctionnent \u00e0 diff\u00e9rentes \u00e9chelles de temps.<\/p>\n<h3>Fraction additive vs multiplicative<\/h3>\n<p>La division additive d\u00e9compose une \u00e9quation en op\u00e9rateurs distincts et r\u00e9sout chaque contribution ind\u00e9pendamment. Le fractionnement multiplicatif s'applique aux op\u00e9rateurs de mani\u00e8re s\u00e9quentielle avec un ordre d\u00e9fini, qui est important lorsque les op\u00e9rateurs ne font pas la navette.<\/p>\n<p>Pour les workflows multi-physiques, la division additive est souvent plus facile \u00e0 appliquer. Chaque mod\u00e8le physique peut utiliser son propre solveur optimis\u00e9, et la logique de couplage reste modulaire.<\/p>\n<h3>Biblioth\u00e8ques de partage d'op\u00e9rateurs Python<\/h3>\n<p>Plusieurs outils et exemples orient\u00e9s Python prennent en charge les flux de travail de partage des op\u00e9rateurs&nbsp;:<\/p>\n<ul>\n<li><a href=\"https:\/\/arxiv.org\/abs\/2407.05475\">Pythos<\/a> est une biblioth\u00e8que Python pour la division syst\u00e9matique des \u00e9quations diff\u00e9rentielles. Il prend en charge des mod\u00e8les tels que la s\u00e9paration de Strang, des m\u00e9thodes implicites et explicites et le pas de temps adaptatif.<\/li>\n<li><a href=\"https:\/\/www.researchgate.net\/publication\/382691924\">Venise<\/a> est un algorithme de fractionnement d'op\u00e9rateurs multi-\u00e9chelle qui utilise la division Strang avec des pas de temps adaptatifs. Il est pertinent lorsque la physique coupl\u00e9e fonctionne sur diff\u00e9rentes \u00e9chelles de temps.<\/li>\n<li><a href=\"https:\/\/github.com\/odeSolver\/Operator-Splitting-Methods\">Methods-splitting-op\u00e9rateur<\/a> fournit des scripts Python autonomes pour un usage \u00e9ducatif. Ces scripts sont utiles pour l'apprentissage mais ne sont pas pr\u00eats pour la production.<\/li>\n<\/ul>\n<h3>FIPY avec fractionnement de l'op\u00e9rateur<\/h3>\n<p>Vous pouvez \u00e9galement combiner FIPY avec la division de l'op\u00e9rateur manuellement. Un syst\u00e8me de diffusion-r\u00e9action peut \u00eatre divis\u00e9 en une \u00e9tape de diffusion et une \u00e9tape de r\u00e9action :<\/p>\n<pre><code class=\"language-python\"># Separate the reaction step from diffusion\ndt_diffusion = 0.001\ndt_reaction = 0.1\n\n# Solve diffusion with a small time step\neq_diff = TransientTerm(var=T) == DiffusionTerm(coeff=k, var=T)\neq_diff.sweep(dt=dt_diffusion)\n\n# Solve reaction with a larger time step\neq_react = TransientTerm(var=T) == ReactionTerm(source, var=T)\neq_react.sweep(dt=dt_reaction)\n<\/code><\/pre>\n<p>Le sch\u00e9ma de base est exact au premier ordre. Pour une pr\u00e9cision du second ordre, utilisez la division Strang&nbsp;: diffusion en demi-\u00e9tape, r\u00e9action compl\u00e8te, puis diffusion en demi-\u00e9tape.<\/p>\n<h2>Biblioth\u00e8ques de couplage \u00e0 usage g\u00e9n\u00e9ral<\/h2>\n<p>Si vous avez besoin d'un couplage partitionn\u00e9 mais que vous ne pouvez pas utiliser de prix, il existe plusieurs alternatives.<\/p>\n<h3>MUI : Interface universelle multi-\u00e9chelle<\/h3>\n<p><a href=\"https:\/\/mxui.github.io\/\">mui<\/a> est une biblioth\u00e8que C++ uniquement pour le couplage des solveurs h\u00e9t\u00e9rog\u00e8nes. Il traite les donn\u00e9es \u00e9chang\u00e9es comme des nuages de points et g\u00e8re automatiquement l'interpolation spatiale et temporelle.<\/p>\n<p>Les principales caract\u00e9ristiques comprennent :<\/p>\n<ul>\n<li>Repr\u00e9sentation ponctuelle. MUI peut transf\u00e9rer des donn\u00e9es sans avoir besoin d'un solveur pour conna\u00eetre la connectivit\u00e9 maill\u00e9e d'un autre solveur.<\/li>\n<li>Interpolation spatiale et temporelle. Les outils d'interpolation int\u00e9gr\u00e9s aident les solveurs \u00e0 communiquer \u00e0 diff\u00e9rentes \u00e9chelles.<\/li>\n<li>Envoi intelligent. Cet algorithme limite la communication aux domaines qui se chevauchent et r\u00e9duit la communication inutile entre tous.<\/li>\n<li>Support linguistique. MUI est \u00e9crit en C++ et propose des wrappers pour Python, Fortran et C.<\/li>\n<\/ul>\n<p>MUI est utile lorsque vous devez coupler des solveurs avec des discr\u00e9tisations fondamentalement diff\u00e9rentes, telles que FEM, FVM, DEM ou SPH.<\/p>\n<p>Choisissez MUI plut\u00f4t que lorsque vous avez besoin d'une interface l\u00e9g\u00e8re int\u00e9gr\u00e9e ou lorsque les diff\u00e9rences de connectivit\u00e9 maill\u00e9es rendent l'infrastructure de couplage standard trop lourde.<\/p>\n<p>Tenez-vous-en \u00e0 Precice lorsque vous avez besoin d'une mise \u00e0 l'\u00e9chelle parall\u00e8le mature, d'une acc\u00e9l\u00e9ration quasi-newton pour les probl\u00e8mes fortement coupl\u00e9s et d'un \u00e9cosyst\u00e8me d'adaptateurs plus large.<\/p>\n<h3>Multi-applications et syst\u00e8mes de transfert d'orignal<\/h3>\n<p>L'orignal peut r\u00e9soudre des syst\u00e8mes enti\u00e8rement coupl\u00e9s, mais ses syst\u00e8mes <code>MultiApps<\/code> et <code>Transfer<\/code> prennent \u00e9galement en charge les approches partitionn\u00e9es. Moose cr\u00e9e des sous-applications qui transmettent des donn\u00e9es de champ dans les deux sens.<\/p>\n<p>Moose prend en charge plusieurs styles de couplage :<\/p>\n<ul>\n<li>Flux de travail enti\u00e8rement coupl\u00e9s o\u00f9 toute la physique est r\u00e9solue en une seule it\u00e9ration non lin\u00e9aire.<\/li>\n<li>Des flux de travail de type Picard ou Newton \u00e9troitement coupl\u00e9s o\u00f9 les sous-applications physiques s'ex\u00e9cutent \u00e0 chaque pas de temps.<\/li>\n<li>Flux de travail \u00e9chelonn\u00e9s o\u00f9 chaque physique progresse ind\u00e9pendamment et \u00e9change des donn\u00e9es \u00e0 des limites d\u00e9finies.<\/li>\n<\/ul>\n<p>L'orignal est principalement ax\u00e9 sur le C++. Les outils Python existent, mais l'\u00e9cosyst\u00e8me est moins python que les flux de travail construits autour de Fipy ou Precice.<\/p>\n<h2>Couplage polynomial avec Rhapsopy<\/h2>\n<p><a href=\"https:\/\/github.com\/hpc-maths\/Rhapsopy\">rhapsopy<\/a> utilise des approximations polynomiales des variables de couplage au fil du temps. Au lieu d'\u00e9changer une seule valeur \u00e0 chaque \u00e9tape de couplage, chaque sous-syst\u00e8me s'int\u00e8gre en utilisant une approximation polynomiale de son entr\u00e9e \u00e0 partir de l'autre sous-syst\u00e8me.<\/p>\n<h3>Comment cela fonctionne<\/h3>\n<p>Au cours d'une \u00e9tape de couplage, chaque sous-syst\u00e8me est int\u00e9gr\u00e9 \u00e0 son propre solveur tout en utilisant des variables d'entr\u00e9e approxim\u00e9es de mani\u00e8re polynomiale. \u00c0 la fin de l'\u00e9tape, de nouvelles variables de couplage sont calcul\u00e9es et les polyn\u00f4mes sont mis \u00e0 jour.<\/p>\n<p>Cette approche peut aider \u00e0 :<\/p>\n<ol>\n<li>pr\u00e9cision. Les approximations polynomiales d'ordre sup\u00e9rieur capturent mieux les changements temporels que l'extrapolation constante ou lin\u00e9aire.<\/li>\n<li>Pas de temps adaptatif. Les estimations d'erreurs provenant d'approximations polynomiales peuvent guider la taille du pas de temps de couplage.<\/li>\n<li>Couplage explicite et implicite. Les versions implicites peuvent am\u00e9liorer la stabilit\u00e9, mais n\u00e9cessitent la r\u00e9solution d'un probl\u00e8me de point fixe \u00e0 chaque \u00e9tape.<\/li>\n<\/ol>\n<h3>Statut actuel<\/h3>\n<p>Rhapsopy est actuellement mieux consid\u00e9r\u00e9 comme un outil de d\u00e9monstration pour les probl\u00e8mes \u00e0 petite \u00e9chelle. Il est prometteur pour les utilisateurs de Python qui souhaitent un couplage adaptatif de haut niveau, mais ce n'est pas encore une solution HPC \u00e0 grande \u00e9chelle mature.<\/p>\n<h2>Couplage natif COMSOL<\/h2>\n<p>COMSOL Multiphysics utilise un mod\u00e8le diff\u00e9rent. Au lieu de coupler des solveurs externes, COMSOL d\u00e9finit nativement les couplages multiphysiques dans le m\u00eame environnement logiciel.<\/p>\n<p>Les utilisateurs de COMSOL peuvent :<\/p>\n<ul>\n<li>D\u00e9finir des conditions d'interface telles que la continuit\u00e9 du flux de chaleur ou l'\u00e9quilibre des contraintes.<\/li>\n<li>Utilisez des strat\u00e9gies de solution enti\u00e8rement coupl\u00e9es pour des probl\u00e8mes non lin\u00e9aires.<\/li>\n<li>Basculez entre des strat\u00e9gies s\u00e9par\u00e9es et enti\u00e8rement coupl\u00e9es en fonction de la complexit\u00e9 du probl\u00e8me.<\/li>\n<\/ul>\n<p>Ceci est simple pour les utilisateurs d\u00e9j\u00e0 pr\u00e9sents dans COMSOL. Le compromis est le verrouillage du fournisseur. Le couplage des solveurs externes n\u00e9cessite g\u00e9n\u00e9ralement des interfaces sp\u00e9cifiques \u00e0 COMSOL, des flux de travail Livelink ou des ponts de script.<\/p>\n<h2>R\u00e9sum\u00e9 de la comparaison<\/h2>\n<table class=\"custom-table\">\n<tbody><tr>\n<th>Approche<\/th>\n<th>le mieux pour<\/th>\n<th>Pros<\/th>\n<th>Les inconv\u00e9nients<\/th>\n<th>D\u00e9pendance externe<\/th>\n<\/tr>\n<tr>\n<td>Balayage s\u00e9quentiel FIPY<\/td>\n<td>EDP coupl\u00e9s au m\u00eame processus<\/td>\n<td>Simple, d\u00e9bogable, aucune biblioth\u00e8que de couplage externe<\/td>\n<td>Limit\u00e9 aux it\u00e9rations FIPY et s\u00e9quentielles<\/td>\n<td>Aucun<\/td>\n<\/tr>\n<tr>\n<td>Split d'op\u00e9rateur<\/td>\n<td>diff\u00e9rentes \u00e9chelles de temps<\/td>\n<td>Modulaire et r\u00e9utilise des solveurs optimis\u00e9s<\/td>\n<td>Division des erreurs et des contraintes de stabilit\u00e9<\/td>\n<td>Biblioth\u00e8que facultative telle que Pythos<\/td>\n<\/tr>\n<tr>\n<td>mui<\/td>\n<td>Diff\u00e9rents types de maillage et discr\u00e9tisations<\/td>\n<td>Conception en-t\u00eate et large plage de simulation<\/td>\n<td>Mise \u00e0 l'\u00e9chelle parall\u00e8le moins mature que le prix dans certains cas<\/td>\n<td>Biblioth\u00e8que MUI<\/td>\n<\/tr>\n<tr>\n<td>Multi-applications Moose<\/td>\n<td>Flux de travail des \u00e9cosyst\u00e8mes C++ et Moose<\/td>\n<td>Options monolithiques et partitionn\u00e9es<\/td>\n<td>Principalement C++ et moins Python-Natif<\/td>\n<td>Cadre d'orignal<\/td>\n<\/tr>\n<tr>\n<td>\u00e9loge enthousiaste<\/td>\n<td>Couplage d'ordre adaptatif<\/td>\n<td>Estimations de pas de temps et d'erreurs dynamiques<\/td>\n<td>Premi\u00e8re \u00e9tape et petite \u00e9chelle uniquement<\/td>\n<td>\u00e9loge enthousiaste<\/td>\n<\/tr>\n<tr>\n<td>Couplage natif COMSOL<\/td>\n<td>Flux de travail commerciaux int\u00e9gr\u00e9s<\/td>\n<td>Interface enti\u00e8rement coupl\u00e9e et intuitive<\/td>\n<td>Verrouillage du fournisseur<\/td>\n<td>Licence COMSOL<\/td>\n<\/tr>\n<tr>\n<td>se pr\u00e9ciser<\/td>\n<td>Couplage partitionn\u00e9 mature<\/td>\n<td>Prouv\u00e9e, document\u00e9e et soutenue par une communaut\u00e9<\/td>\n<td>N\u00e9cessite des liaisons C++\/Python et une configuration de l'adaptateur<\/td>\n<td>Biblioth\u00e8que de prix<\/td>\n<\/tr>\n<\/tbody><\/table>\n<h2>Guide de d\u00e9cision pratique<\/h2>\n<p>Utilisez ce guide de d\u00e9cision lorsque vous ne pouvez pas ou ne souhaitez pas utiliser Precice.<\/p>\n<ol>\n<li>Toutes les physiques sont-elles exprimables dans Fipy ? Utilisez le balayage s\u00e9quentiel. C'est le chemin le plus simple et ne n\u00e9cessite aucune d\u00e9pendance externe.<\/li>\n<li>Votre physique fonctionne-t-elle \u00e0 des \u00e9chelles de temps tr\u00e8s diff\u00e9rentes&nbsp;? Essayez le fractionnement de l'op\u00e9rateur. Le d\u00e9couplage permet \u00e0 chaque physique d'utiliser son propre pas de temps.<\/li>\n<li>associez-vous des solveurs \u00e0 des discr\u00e9tisations fondamentalement diff\u00e9rentes&nbsp;? Consid\u00e9rez MUI. Sa repr\u00e9sentation ponctuelle peut g\u00e9rer le couplage maillage \u00e0 mesh et maillage \u00e0 particules.<\/li>\n<li>Travaillez-vous en C++ ou dans l'\u00e9cosyst\u00e8me Moose&nbsp;? Les multi-applications Moose offrent des options monolithiques, \u00e9troitement coupl\u00e9es et d\u00e9cal\u00e9es \u00e0 l'int\u00e9rieur d'un m\u00eame framework.<\/li>\n<li>Avez-vous besoin d'un pas de temps adaptatif bas\u00e9 sur des erreurs de couplage&nbsp;? Essayez Rhapsopy pour des exp\u00e9riences \u00e0 petite \u00e9chelle ou surveillez son d\u00e9veloppement pour des flux de travail plus importants.<\/li>\n<li>Utilisez-vous un solveur commercial&nbsp;? V\u00e9rifiez s'il poss\u00e8de des fonctions multiphysiques natives ou s'il prend en charge les biblioth\u00e8ques de couplage externes.<\/li>\n<\/ol>\n<h2>Ce que nous recommandons<\/h2>\n<p>Pour les utilisateurs de FIPY travaillant en Python, la recommandation d\u00e9pend de la complexit\u00e9 du probl\u00e8me.<\/p>\n<ul>\n<li>Couplage simple, tel que la r\u00e9action-r\u00e9action, le champ de phase ou le transport&nbsp;: utilisez un balayage s\u00e9quentiel avec <code>sweep()<\/code>. Il est simple et ne n\u00e9cessite aucune d\u00e9pendance externe.<\/li>\n<li>Complexit\u00e9 mod\u00e9r\u00e9e, telle que des solveurs externes faiblement coupl\u00e9s ou diff\u00e9rentes \u00e9chelles de temps&nbsp;: utilisez la division d'un op\u00e9rateur avec une biblioth\u00e8que structur\u00e9e telle que Pythos.<\/li>\n<li>Complexit\u00e9 \u00e9lev\u00e9e, comme les solveurs \u00e9troitement coupl\u00e9s dans diff\u00e9rentes langues&nbsp;: utilisez le prix lorsque cela est possible. Les alternatives n'offrent pas encore la m\u00eame maturit\u00e9, l'\u00e9volutivit\u00e9 parall\u00e8le ou l'acc\u00e9l\u00e9ration de convergence.<\/li>\n<\/ul>\n<p>Si Precice n'est pas disponible, la meilleure option suivante d\u00e9pend de votre environnement. Pour la recherche universitaire sans acc\u00e8s au HPC, la conception d'en-t\u00eate de MUI peut \u00eatre plus facile \u00e0 int\u00e9grer. Pour les simulations de production n\u00e9cessitant une mise \u00e0 l'\u00e9chelle parall\u00e8le, Precice reste l'option la plus solide si vous pouvez l'utiliser.<\/p>\n<h2>Ce qu'il faut \u00e9viter<\/h2>\n<ul>\n<li>\u00c9change de donn\u00e9es manuel en boucles sans it\u00e9ration ni crit\u00e8re de convergence. Cela peut diverger ou produire des r\u00e9sultats inexacts.<\/li>\n<li>Extrapolation des variables de couplage sans contr\u00f4le des erreurs. L'utilisation de la valeur de couplage du pas de temps pr\u00e9c\u00e9dent comme valeur actuelle n'est que pr\u00e9cise du premier ordre et peut \u00eatre instable pour les probl\u00e8mes fortement coupl\u00e9s.<\/li>\n<li>n\u00e9gliger la sous-relaxation. Pour le couplage non lin\u00e9aire, incluez des param\u00e8tres de sous-relaxation pour r\u00e9duire la divergence du solveur.<\/li>\n<li>En supposant des \u00e9chelles de balayage s\u00e9quentielles. Le couplage s\u00e9quentiel \u00e0 l'int\u00e9rieur d'un processus Python ne sera pas mis \u00e0 l'\u00e9chelle sur les n\u0153uds de calcul \u00e0 m\u00e9moire distribu\u00e9e.<\/li>\n<\/ul>\n<h2>Guides connexes<\/h2>\n<ul>\n<li><a href=\"https:\/\/matforge.org\/code-coupling-precice-multi-physics-python\/\">Code couplage avec precice&nbsp;: simulations multi-physiques en Python<\/a>&nbsp;: installation, mise en \u0153uvre de l'adaptateur et configuration lorsque Le prix est disponible.<\/li>\n<li><a href=\"https:\/\/matforge.org\/extending-fipy-with-custom-modules\/\">\u00c9largir FIPY avec des modules personnalis\u00e9s<\/a> - organiser le code PDE r\u00e9utilisable, les termes source et les mod\u00e8les coupl\u00e9s dans Fipy.<\/li>\n<li><a href=\"https:\/\/matforge.org\/what-is-fipy-and-when-should-you-use-it\/\">Qu'est-ce que FIPY et quand devriez-vous l'utiliser&nbsp;?<\/a> - FONDEMENT ET CAS D'UTILISATION.<\/li>\n<li><a href=\"https:\/\/matforge.org\/understanding-phase-field-models-in-materials-science\/\">Comprendre les mod\u00e8les de champs de phase dans la science des mat\u00e9riaux<\/a> \u2014 Applications multiphysiques en champ de phase.<\/li>\n<li><a href=\"https:\/\/matforge.org\/managing-large-scale-pde-problems-strategies-solvers-and-hpc-case-studies\/\">Gestion des probl\u00e8mes de PDE \u00e0 grande \u00e9chelle&nbsp;: strat\u00e9gies, solveurs et \u00e9tudes de cas HPC<\/a>&nbsp;: strat\u00e9gies pour mettre \u00e0 l'\u00e9chelle des flux de travail de simulation complexes.<\/li>\n<\/ul>\n<h2>Besoin d'aide pour concevoir votre flux de travail multi-physique ?<\/h2>\n<p>Le choix de la bonne approche de couplage d\u00e9pend de vos solveurs, contraintes et complexit\u00e9 du probl\u00e8me. Matforge propose des services de consultation pour la conception de logiciels de recherche et de simulation. Nous pouvons vous aider \u00e0 \u00e9valuer les compromis entre le prix, le couplage s\u00e9quentiel, le fractionnement des op\u00e9rateurs et d'autres approches pour votre probl\u00e8me sp\u00e9cifique multiphysique.<\/p>\n<p><a href=\"https:\/\/matforge.org\/\">Visitez Matforge Homepage<\/a> pour en savoir plus sur les services de consultation et les flux de travail de recherche.<\/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\"> 9<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span>Lorsque vous travaillez avec des simulations multi-physiques, vous devez souvent coupler deux ou plusieurs solveurs sp\u00e9cialis\u00e9s afin qu&rsquo;ils \u00e9changent des donn\u00e9es pendant le calcul. Precice est une biblioth\u00e8que de couplage open-source mature pour les simulations multi-physiques partitionn\u00e9es, en particulier lors de la connexion de solveurs ind\u00e9pendants tels que FIPY, OpenFoam ou Calculix. Mais le prix [&hellip;]<\/p>\n","protected":false,"raw":""},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_locale":"fr_FR","_original_post":"https:\/\/matforge.org\/?p=350","iawp_total_views":1,"footnotes":""},"categories":[2],"tags":[],"class_list":["post-1273","post","type-post","status-publish","format-standard","hentry","category-fipy-documentation-examples-development","fr-FR"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Couplage multi-physique sans pr\u00e9cision<\/title>\n<meta name=\"description\" content=\"Explorez des alternatives au prix du couplage multi-physique, notamment le balayage de Fipy, le fractionnement de l&#039;op\u00e9rateur, le MUI, les multiapplications Moose et Rhapsopy.\" \/>\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\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Couplage multi-physique sans pr\u00e9cision\" \/>\n<meta property=\"og:description\" content=\"Explorez des alternatives au prix du couplage multi-physique, notamment le balayage de Fipy, le fractionnement de l&#039;op\u00e9rateur, le MUI, les multiapplications Moose et Rhapsopy.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/matforge.org\/fr\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\/\" \/>\n<meta property=\"og:site_name\" content=\"matforge.org\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-21T14:31:31+00:00\" \/>\n<meta name=\"author\" content=\"Tomas Delgado\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tomas Delgado\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\\\/\"},\"author\":{\"name\":\"Tomas Delgado\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/518cdd1f18dd092f4ed738d68e540061\"},\"headline\":\"Couplage de code multi-physique sans pr\u00e9cision : alternatives et approches personnalis\u00e9es\",\"datePublished\":\"2026-08-21T14:31:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\\\/\"},\"wordCount\":2960,\"commentCount\":0,\"articleSection\":[\"FIPY : documentation, exemples &amp; D\u00e9veloppement\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/matforge.org\\\/fr\\\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\\\/\",\"url\":\"https:\\\/\\\/matforge.org\\\/fr\\\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\\\/\",\"name\":\"Couplage multi-physique sans pr\u00e9cision\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\"},\"datePublished\":\"2026-08-21T14:31:31+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/518cdd1f18dd092f4ed738d68e540061\"},\"description\":\"Explorez des alternatives au prix du couplage multi-physique, notamment le balayage de Fipy, le fractionnement de l'op\u00e9rateur, le MUI, les multiapplications Moose et Rhapsopy.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/matforge.org\\\/fr\\\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/matforge.org\\\/fr\\\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/matforge.org\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Couplage de code multi-physique sans pr\u00e9cision : alternatives et approches personnalis\u00e9es\"}]},{\"@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\\\/518cdd1f18dd092f4ed738d68e540061\",\"name\":\"Tomas Delgado\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g\",\"caption\":\"Tomas Delgado\"},\"sameAs\":[\"http:\\\/\\\/matforge.org\"],\"url\":\"https:\\\/\\\/matforge.org\\\/author\\\/tomas-delgado\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Couplage multi-physique sans pr\u00e9cision","description":"Explorez des alternatives au prix du couplage multi-physique, notamment le balayage de Fipy, le fractionnement de l'op\u00e9rateur, le MUI, les multiapplications Moose et Rhapsopy.","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\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\/","og_locale":"fr_FR","og_type":"article","og_title":"Couplage multi-physique sans pr\u00e9cision","og_description":"Explorez des alternatives au prix du couplage multi-physique, notamment le balayage de Fipy, le fractionnement de l'op\u00e9rateur, le MUI, les multiapplications Moose et Rhapsopy.","og_url":"https:\/\/matforge.org\/fr\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\/","og_site_name":"matforge.org","article_published_time":"2026-08-21T14:31:31+00:00","author":"Tomas Delgado","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Tomas Delgado","Dur\u00e9e de lecture estim\u00e9e":"15 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/matforge.org\/fr\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\/#article","isPartOf":{"@id":"https:\/\/matforge.org\/fr\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\/"},"author":{"name":"Tomas Delgado","@id":"https:\/\/matforge.org\/#\/schema\/person\/518cdd1f18dd092f4ed738d68e540061"},"headline":"Couplage de code multi-physique sans pr\u00e9cision : alternatives et approches personnalis\u00e9es","datePublished":"2026-08-21T14:31:31+00:00","mainEntityOfPage":{"@id":"https:\/\/matforge.org\/fr\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\/"},"wordCount":2960,"commentCount":0,"articleSection":["FIPY : documentation, exemples &amp; D\u00e9veloppement"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/matforge.org\/fr\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/matforge.org\/fr\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\/","url":"https:\/\/matforge.org\/fr\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\/","name":"Couplage multi-physique sans pr\u00e9cision","isPartOf":{"@id":"https:\/\/matforge.org\/#website"},"datePublished":"2026-08-21T14:31:31+00:00","author":{"@id":"https:\/\/matforge.org\/#\/schema\/person\/518cdd1f18dd092f4ed738d68e540061"},"description":"Explorez des alternatives au prix du couplage multi-physique, notamment le balayage de Fipy, le fractionnement de l'op\u00e9rateur, le MUI, les multiapplications Moose et Rhapsopy.","breadcrumb":{"@id":"https:\/\/matforge.org\/fr\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/matforge.org\/fr\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/matforge.org\/fr\/multi-physics-code-coupling-without-precice-alternatives-and-custom-approaches\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/matforge.org\/"},{"@type":"ListItem","position":2,"name":"Couplage de code multi-physique sans pr\u00e9cision : alternatives et approches personnalis\u00e9es"}]},{"@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\/518cdd1f18dd092f4ed738d68e540061","name":"Tomas Delgado","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/202f82c9f4f4534a3ba77bf8a8fbef09cf8489f52bdf819082f21390da4e7c9a?s=96&d=mm&r=g","caption":"Tomas Delgado"},"sameAs":["http:\/\/matforge.org"],"url":"https:\/\/matforge.org\/author\/tomas-delgado\/"}]}},"_links":{"self":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1273","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\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/comments?post=1273"}],"version-history":[{"count":1,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1273\/revisions"}],"predecessor-version":[{"id":1417,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/1273\/revisions\/1417"}],"wp:attachment":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/media?parent=1273"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/categories?post=1273"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/tags?post=1273"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}