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;
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);
};
}