Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
Lancement direct d'une exécution

Table des matières

Il est possible d'utiliser Arcane sans passer par les mécanismes utilisant les modules et la boucle en temps. Cela peut être utile pour des codes très simples ou des utilitaires mais ce mécanisme est déconseillé pour les gros codes de calcul car il ne permet pas d'accéder automatiquement à l'ensemble des fonctionnalités de Arcane comme par exemple l'équilibrage de charge, les protections/reprises ou les modules (même si ces mécanismes restent accessibles manuellement).

Il existe deux manière de lancer le mode autonome:

  • le mode avec support des accélérateurs. Dans ce mode seule l'API accélérateur et les classes utilitaires de Arcane sont disponibles. La page Mode Autonome accélérateur décrit comment utiliser ce mode.
  • le mode avec sous-domaine. Ce mode permet d'accéder manuellement à la plupart des fonctionnalités d'Arcane comme le maillage, le dépouillement ou l'équilibrage de charge.

Les deux exemples standalone_subdomain et standalone_accelerator montrent comment utiliser ces mécanismes.

La page Lancement d'un calcul explique comment fournir les paramètres pour initialiser Arcane.

Mode Sous-domaine Autonome

Ce mode permet de piloter manuellement la plupart des fonctionnalités d'Arcane comme les maillages et le dépouillement. Pour utiliser ce mode, il suffit d'utiliser la méthode de classe ArcaneLauncher::createStandaloneSubDomain() après avoir initialiser Arcane :

Arcane::String case_file_name = {};
static void init(const CommandLineArguments &args)
Positionne les informations à partir des arguments de la ligne de commande et initialise le lanceur.
static StandaloneSubDomain createStandaloneSubDomain(const String &case_file_name)
Créé une implémentation autonome pour gérer un sous-domaine.
Arguments de la ligne de commande.
Implémentation autonome d'un sous-domaine.
Chaîne de caractères unicode.

Il est possible de spécifier un nom de fichier pour le jeu de données. Dans ce cas, si ce fichier comporte des maillages, ces derniers seront automatiquement créés lors de la création du sous-domaine.

L'instance sub_domain doit rester valide tant qu'on souhaite utiliser le sous-domaine. Il est donc préférable de la définir dans le main() du code.

Avertissement
Un seul appel à ArcaneLauncher::createStandaloneSubDomain est autorisé.

Par exemple, le code suivant permet de lire un maillage, d'afficher le nombre de mailles, de calculer et d'afficher les coordonnées des centres des mailles.

#include "arcane/launcher/ArcaneLauncher.h"
#include "arcane/utils/ITraceMng.h"
#include "arcane/utils/FatalErrorException.h"
#include "arcane/utils/Real3.h"
#include "arcane/core/MeshReaderMng.h"
#include "arcane/core/IMesh.h"
#include "arcane/core/ISubDomain.h"
#include "arcane/core/IParallelMng.h"
#include "arcane/core/ItemGroup.h"
#include "arcane/core/VariableTypes.h"
#include "arcane/utils/Exception.h"
#include <iostream>
/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
using namespace Arcane;
void executeSample(const String& case_file)
{
// Create a standalone subdomain
// Arcane will automatically call finalization when the variable
// goes out of scope.
Arcane::StandaloneSubDomain launcher{ ArcaneLauncher::createStandaloneSubDomain(case_file) };
Arcane::ISubDomain* sd = launcher.subDomain();
// Get the trace class to display messages
Arcane::ITraceMng* tm = launcher.traceMng();
// Create an instance of the Mesh Reader.
// Create a mesh named 'Mesh1' from the file 'plancher.msh'.
// The format is automatically choosen from the extension
Arcane::IMesh* mesh = mrm.readMesh("AdditionalMesh", "plancher.msh", sd->parallelMng());
Int32 nb_cell = mesh->nbCell();
tm->info() << "NB_CELL=" << nb_cell;
// Loop over the cells and compute the center of each cell
Arcane::VariableNodeReal3& nodes_coordinates = mesh->nodesCoordinates();
ENUMERATE_ (Cell, icell, mesh->allCells()) {
Arcane::Cell cell = *icell;
Arcane::Real3 cell_center;
// Iteration over nodes of the cell
for (Node node : cell.nodes()) {
cell_center += nodes_coordinates[node];
}
cell_center /= cell.nbNode();
tm->info() << "Cell=" << cell.uniqueId() << " center=" << cell_center;
}
}
/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
int main(int argc, char* argv[])
{
String case_file;
auto func = [&] {
std::cout << "Sample: StandaloneSubDomain\n";
// Initialize Arcane
Arcane::CommandLineArguments cmd_line_args(&argc, &argv);
if (argc > 1)
case_file = argv[argc - 1];
executeSample(case_file);
};
}
/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
#define ENUMERATE_(type, name, group)
Enumérateur générique d'un groupe d'entité
Maille d'un maillage.
Definition Item.h:1178
virtual Integer nbCell()=0
Nombre de mailles du maillage.
virtual CellGroup allCells()=0
Groupe de toutes les mailles.
virtual VariableNodeReal3 & nodesCoordinates()=0
Coordonnées des noeuds.
Interface du gestionnaire d'un sous-domaine.
Definition ISubDomain.h:74
virtual IParallelMng * parallelMng()=0
Retourne le gestionnaire de parallélisme.
Int32 nbNode() const
Nombre de noeuds de l'entité
Definition Item.h:765
ItemUniqueId uniqueId() const
Identifiant unique sur tous les domaines.
Definition Item.h:216
Gestionnaire de lecteurs de maillage.
Noeud d'un maillage.
Definition Dom.h:204
Classe gérant un vecteur de réel de dimension 3.
Definition Real3.h:132
Interface du gestionnaire de traces.
virtual TraceMessage info()=0
Flot pour un message d'information.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Integer arcaneCallFunctionAndCatchException(std::function< void()> function)