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 :
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>
void executeSample(
const String& case_file)
{
Int32 nb_cell = mesh->
nbCell();
tm->
info() <<
"NB_CELL=" << nb_cell;
for (
Node node : cell.nodes()) {
cell_center += nodes_coordinates[node];
}
tm->
info() <<
"Cell=" << cell.
uniqueId() <<
" center=" << cell_center;
}
}
int main(int argc, char* argv[])
{
auto func = [&] {
std::cout << "Sample: StandaloneSubDomain\n";
if (argc > 1)
case_file = argv[argc - 1];
executeSample(case_file);
};
}
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.
virtual IParallelMng * parallelMng()=0
Retourne le gestionnaire de parallélisme.
Int32 nbNode() const
Nombre de noeuds de l'entité
ItemUniqueId uniqueId() const
Identifiant unique sur tous les domaines.
Gestionnaire de lecteurs de maillage.
Classe gérant un vecteur de réel de dimension 3.
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)