Cette page définit les concepts principaux de la plateforme Arcane. Les termes sont regroupés en concepts fondamentaux (sous-domaine, maillage, maillage cartésien, élément de maillage, famille d'éléments, groupe d'éléments, gestionnaire parallèle, variable, gestionnaire de variables, module et service) et en concepts du système de matériaux (gestionnaire de matériaux, matériau, constituant, milieu et bloc). Chaque terme renvoie à la classe qui l'implémente.
Un sous-domaine (ISubDomain) est l'unité d'exécution de base d'une application Arcane. Il représente la partie du calcul exécutée par un thread (ou par un groupe de threads) dans l'exécution hybride (MPI + threads) de Arcane. Un sous-domaine possède ses propres maillages, variables, modules et services, et est l'objet à partir duquel toutes ces ressources sont accédées. Dans une exécution séquentielle, il y a un seul sous-domaine ; dans une exécution parallèle, il y a un sous-domaine par rang MPI (et potentiellement plus lorsque des threads sont utilisés). Un sous-domaine est associé à une sous-partition d'un gestionnaire parallèle (IParallelMng).
Un maillage (IMesh) est un ensemble d'entités de maillage (nœuds, arêtes, faces et mailles) ainsi que leur connectivité. Un maillage est possédé par un sous-domaine et, lorsqu'il est créé avec un IParallelMng non séquentiel, il est distribué sur les rangs : chaque rang détient une partie locale du maillage plus une ou plusieurs couches fantômes d'entités voisines. Un maillage a une dimension spatiale (2 ou 3) et expose une famille par type d'entité via ses familles de nœuds, d'arêtes, de faces et de mailles. Un maillage peut être créé vide puis rempli, ou lu directement à partir d'un fichier.
Un maillage cartésien (ICartesianMesh) est un type spécial de maillage dont les mailles sont disposées sur une grille structurée régulière. Il est associé à un IMesh standard (récupéré ou créé à partir de celui-ci via Arcane::ICartesianMesh::getReference () "ICartesianMesh::getReference ()") et ajoute, en plus des fonctionnalités du maillage régulier, un accès directionnel aux entités (mailles, faces et nœuds dans une direction donnée) et les opérations nécessaires au raffinement adaptatif du maillage (raffinement ou dé-raffinement des blocs du maillage). Un maillage cartésien est généralement utilisé par les codes qui résolvent les équations sur une grille structurée.
Un élément de maillage (ou simplement un item, Item) est une entité unique d'un maillage : un nœud, une arête, une face ou une maille. La classe Item est la classe de base des entités typées (Node, Edge, Face, Cell et Particle). Un élément possède un identifiant local (unique au sein de la partie locale de sa famille) et un identifiant unique (globalement unique, utilisé pour identifier l'entité à travers les rangs), et il appartient à une famille d'éléments. Un élément est un handle léger : les données associées (coordonnées, valeurs de variables) sont stockées dans la famille.
Une famille d'éléments (IItemFamily) est la collection de tous les éléments d'un certain type (nœuds, arêtes, faces ou mailles) d'un maillage. Un maillage expose ses familles via Arcane::IMeshBase::nodeFamily () "IMeshBase::nodeFamily ()", Arcane::IMeshBase::edgeFamily () "IMeshBase::edgeFamily ()", Arcane::IMeshBase::faceFamily () "IMeshBase::faceFamily ()" et Arcane::IMeshBase::cellFamily () "IMeshBase::cellFamily ()". Une famille stocke les éléments, leur connectivité et les variables définies sur eux, et est l'objet principal utilisé pour itérer sur les entités de maillage et les modifier. Les particules forment un type de famille d'éléments distinct (IParticleFamily).
Un groupe d'éléments (ItemGroup) est un sous-ensemble (potentiellement vide) des éléments d'une famille d'éléments donnée. Contrairement à une famille d'éléments, qui est l'ensemble complet des éléments d'un certain type dans un maillage, un groupe est un sous-ensemble arbitraire qui peut être créé, combiné (union, intersection, différence) et itéré indépendamment de la famille. Un groupe est créé via sa famille en utilisant Arcane::IItemFamily::createGroup () "IItemFamily::createGroup ()" ou Arcane::IItemFamily::findGroup () "IItemFamily::findGroup ()". Les groupes sont utilisés pour sélectionner des ensembles spécifiques d'éléments (par exemple les mailles d'un matériau ou d'une région) sur lesquels effectuer des opérations.
Un gestionnaire parallèle (IParallelMng) est l'objet qui gère la décomposition parallèle (rangs MPI et/ou threads) d'une application Arcane et fournit les opérations de communication collective (barrières, réductions, échanges) utilisées par le framework et par l'application. Chaque sous-domaine est associé à une sous-partition d'un gestionnaire parallèle. Le gestionnaire parallèle par défaut de l'application couvre tous les rangs, et des sous-gestionnaires peuvent être créés pour des sous-ensembles de rangs. Un gestionnaire parallèle séquentiel (un seul rang) est utilisé pour les maillages non parallèles.
Une variable (IVariable) est une donnée nommée associée à un sous-domaine. Il existe deux principaux types de variables : les variables communes, qui contiennent une seule valeur par sous-domaine, et les variables d'élément, qui contiennent une valeur par élément de maillage (par exemple, une valeur par maille). Une variable est déclarée soit dans le descripteur AXL d'un module ou d'un service, soit directement dans le code, et est accédée dans le code via une référence de variable (VariableRef et ses classes dérivées, les références de variables typées).
Le gestionnaire de variables (IVariableMng) est l'objet qui maintient la liste des variables déclarées dans un sous-domaine. Il permet de récupérer ces variables et de les lire ou de les écrire (par exemple pour les protections/reprises ou le post-traitement). Il est obtenu à partir du sous-domaine via Arcane::ISubDomain::variableMng () "ISubDomain::variableMng ()".
Un module (IModule) est une unité de code d'application de base dans Arcane. Un module regroupe un ensemble de points d'entrée (les points à partir desquels la boucle en temps de Arcane appelle le module), des variables et des options de configuration. Un module est représenté par une classe et par un fichier XML appelé le descripteur de module (extension .axl) qui décrit ses variables, ses points d'entrée et ses options. Les instances de module sont créées et configurées par l'environnement d'exécution Arcane à partir du fichier de cas de simulation.
Un service (IService) a les mêmes caractéristiques qu'un module, à l'exception du fait qu'il n'a pas de point d'entrée. Un service est utilisé pour factoriser du code à travers plusieurs modules (par exemple, un schéma numérique ou une équation d'état partagée par plusieurs modules de physique) ou pour paramétrer un module avec différents algorithmes. Comme un module, un service est représenté par une classe et par un descripteur de service XML (extension .axl) qui décrit l'interface qu'il implémente, ses options et ses variables. Une instance de service est créée par l'environnement d'exécution Arcane lorsqu'un module le référence.
Un gestionnaire de matériaux (IMeshMaterialMng) est l'objet qui gère tous les matériaux, milieux et blocs d'un maillage, ainsi que leurs variables de matériau et de milieu associées. Il y a un gestionnaire de matériaux par maillage, récupéré ou créé via la méthode statique Arcane::Materials::IMeshMaterialMng::getReference () "IMeshMaterialMng::getReference ()". Les matériaux et les milieux sont enregistrés et créés pendant l'initialisation du calcul et ne peuvent pas être modifiés par la suite ; seule la liste des mailles d'un matériau ou d'un milieu peut changer pendant l'exécution (via un MeshMaterialModifier).
Un matériau (IMeshMaterial) est un ensemble nommé de mailles de maillage qui représente une substance physique présente dans ces mailles. Il appartient au système de matériaux (namespace Arcane::Materials). Un matériau est associé uniquement à des mailles, et sa liste de mailles est dynamique : elle peut changer pendant le calcul. Un matériau appartient à un ou plusieurs milieux. Les matériaux d'un maillage sont gérés par une instance IMeshMaterialMng (une par maillage).
Un constituant (ConstituentItem) est l'occurrence d'un composant (un matériau ou un milieu) à l'intérieur d'une seule maille. Une maille peut contenir plusieurs matériaux et plusieurs milieux, et les constituants d'une maille forment une hiérarchie : AllEnvCell (la maille avec tous ses milieux), EnvCell (un milieu de la maille) et MatCell (un matériau de la maille). Les éléments constituants sont utilisés pour accéder aux données et aux variables par maille des matériaux et des milieux.
Un milieu (IMeshEnvironment) est un regroupement nommé d'un ou plusieurs matériaux d'un maillage. Il appartient au système de matériaux (namespace Arcane::Materials) et forme un niveau intermédiaire entre les blocs (optionnels) et les matériaux. La liste des mailles d'un milieu est l'union des listes de mailles de ses matériaux et est recalculée automatiquement lorsque les matériaux changent. Tout comme les matériaux, un milieu est associé uniquement à des mailles et peut être vide.
Un bloc (IMeshBlock) est un regroupement nommé optionnel, situé à un niveau supérieur aux milieux, qui regroupe un ensemble de milieux avec un groupe de mailles. Il appartient au système de matériaux (namespace Arcane::Materials) et est géré par l'instance IMeshMaterialMng avec les matériaux et les milieux.