14#include "arcane/utils/StdHeader.h"
15#include "arcane/utils/PlatformUtils.h"
16#include "arcane/utils/Iostream.h"
17#include "arcane/utils/ScopedPtr.h"
18#include "arcane/utils/VersionInfo.h"
19#include "arcane/utils/StringBuilder.h"
20#include "arcane/utils/ITraceMng.h"
21#include "arcane/utils/TraceAccessor.h"
22#include "arcane/utils/MemoryInfo.h"
23#include "arcane/utils/List.h"
24#include "arcane/utils/Property.h"
25#include "arcane/utils/TraceAccessor2.h"
26#include "arcane/utils/ValueConvert.h"
27#include "arcane/utils/IProcessorAffinityService.h"
28#include "arcane/utils/IProfilingService.h"
30#include "arcane/core/ISubDomain.h"
31#include "arcane/core/IVariableMng.h"
32#include "arcane/core/IModuleMng.h"
33#include "arcane/core/IServiceMng.h"
34#include "arcane/core/IModule.h"
35#include "arcane/core/IModuleMaster.h"
36#include "arcane/core/IEntryPointMng.h"
37#include "arcane/core/IEntryPoint.h"
38#include "arcane/core/IMeshReader.h"
39#include "arcane/core/ITimerMng.h"
40#include "arcane/core/IApplication.h"
41#include "arcane/core/IGhostLayerMng.h"
42#include "arcane/core/ArcaneException.h"
43#include "arcane/core/CaseOptionsMain.h"
44#include "arcane/core/IMesh.h"
45#include "arcane/core/IMeshModifier.h"
46#include "arcane/core/IMeshSubMeshTransition.h"
47#include "arcane/core/Properties.h"
48#include "arcane/core/IParallelMng.h"
49#include "arcane/core/Directory.h"
50#include "arcane/core/ITimeHistoryMng.h"
51#include "arcane/core/ICaseMng.h"
52#include "arcane/core/ICheckpointMng.h"
53#include "arcane/core/IPropertyMng.h"
54#include "arcane/core/ITimeStats.h"
55#include "arcane/core/ITimeLoop.h"
56#include "arcane/core/ITimeLoopMng.h"
57#include "arcane/core/IIOMng.h"
58#include "arcane/core/IMainFactory.h"
59#include "arcane/core/Timer.h"
60#include "arcane/core/CommonVariables.h"
61#include "arcane/core/XmlNode.h"
62#include "arcane/core/ICaseDocument.h"
63#include "arcane/core/IPhysicalUnitSystem.h"
64#include "arcane/core/IPhysicalUnitSystemService.h"
65#include "arcane/core/IService.h"
66#include "arcane/core/IServiceInfo.h"
67#include "arcane/core/ServiceUtils.h"
68#include "arcane/core/IRessourceMng.h"
69#include "arcane/core/ISession.h"
70#include "arcane/core/IMeshStats.h"
71#include "arcane/core/IParallelSuperMng.h"
72#include "arcane/core/IParallelReplication.h"
73#include "arcane/core/IServiceLoader.h"
74#include "arcane/core/ICheckpointReader.h"
75#include "arcane/core/IMeshPartitioner.h"
76#include "arcane/core/ICaseMeshMasterService.h"
77#include "arcane/core/ILoadBalanceMng.h"
78#include "arcane/core/CaseNodeNames.h"
79#include "arcane/core/ModuleBuildInfo.h"
80#include "arcane/core/Observable.h"
81#include "arcane/core/VariableCollection.h"
82#include "arcane/core/SubDomainBuildInfo.h"
83#include "arcane/core/ServiceBuilder.h"
84#include "arcane/core/IMeshUtilities.h"
85#include "arcane/core/IMeshMng.h"
86#include "arcane/core/MeshHandle.h"
87#include "arcane/core/ObserverPool.h"
88#include "arcane/core/ConfigurationPropertyReader.h"
89#include "arcane/core/parallel/IStat.h"
91#include "arcane/core/internal/IDataInternal.h"
92#include "arcane/core/internal/ICaseMngInternal.h"
93#include "arcane/core/internal/IParallelMngInternal.h"
94#include "arcane/core/internal/IVariableMngInternal.h"
96#include "arcane/impl/ConfigurationReader.h"
97#include "arcane/impl/internal/MeshMng.h"
98#include "arcane/impl/internal/LegacyMeshBuilder.h"
100#include "arcane/CaseOptionService.h"
101#include "arcane/CaseOptionBuildInfo.h"
103#include "arcane/accelerator/core/IAcceleratorMng.h"
104#include "arcane/accelerator/core/DeviceInfo.h"
105#include "arcane/accelerator/core/Runner.h"
106#include "arcane/accelerator/core/AcceleratorRuntimeInitialisationInfo.h"
107#include "arcane/accelerator/core/IDeviceInfoList.h"
118class MeshBuilderMaster
125 m_mesh_service.addAlternativeNodeName(
"fr",
"maillages");
130 return m_case_options->configList();
133 ICaseOptions* options()
const {
return m_case_options.get(); }
137 m_mesh_service.instance()->createMeshes();
155 ARCANE_DECLARE_PROPERTY_CLASS(SubDomain);
160 class PropertyMngCheckpoint
164 explicit PropertyMngCheckpoint(
ISubDomain* sd)
173 m_observers.addObserver(
this,
174 &PropertyMngCheckpoint::_notifyWrite,
175 m_property_values.variable()->writeObservable());
176 m_observers.addObserver(
this,
177 &PropertyMngCheckpoint::_notifyRead,
178 m_property_values.variable()->readObservable());
183 info(4) <<
"PropertyMngCheckpoint: READ";
184 m_sub_domain->propertyMng()->readFrom(m_property_values);
188 info(4) <<
"PropertyMngCheckpoint: WRITE";
189 m_sub_domain->propertyMng()->writeTo(m_property_values._internalTrueData()->_internalDeprecatedValue());
190 m_property_values.variable()->syncReferences();
204 void build()
override;
206 void destroy()
override;
245 void dumpInfo(std::ostream&)
override;
250 IMesh*
mesh()
override {
return m_default_mesh_handle.
mesh(); }
251 IMesh*
findMesh(
const String& name,
bool throw_exception)
override;
265 m_legacy_mesh_builder->m_initial_partitioner = partitioner;
295 void _setLegacyMeshCreation(
bool v){ m_is_create_default_mesh_v2 = !v; }
296 bool isLegacyMeshCreation()
const {
return !m_is_create_default_mesh_v2; }
302 const char* _msgClassName()
const {
return "Init"; }
342 bool m_is_create_default_mesh_v2;
353 void _doInitialPartition();
354 void _doInitialPartitionForMesh(
IMesh* mesh,
const String& service_name);
355 void _notifyWriteCheckpoint();
363static ISubDomain* global_sub_domain =
nullptr;
367extern "C" ARCANE_IMPL_EXPORT
ISubDomain* _arcaneGetDefaultSubDomain()
369 return global_sub_domain;
375extern "C++" ISubDomain*
376arcaneCreateSubDomain(ISession* session,
const SubDomainBuildInfo& sdbi)
379 Ref<IParallelMng> all_replica_pm = sdbi.allReplicaParallelMng();
380 String case_file_name = sdbi.caseFileName();
383 ITraceMng* tm = pm->traceMng();
384 StringBuilder trace_id;
385 trace_id += String::fromNumber(pm->commRank());
386 if (all_replica_pm!=pm){
388 trace_id += pm->replication()->replicationRank();
392 tm->setTraceId(trace_id.toString());
394 auto* sd =
new SubDomain(session,pm,all_replica_pm,case_file_name,bytes);
398 global_sub_domain = sd;
408: TraceAccessor2(pm->traceMng())
410, m_application(session->application())
412, m_all_replica_parallel_mng(all_replica_pm)
413, m_timer_mng(nullptr)
414, m_time_stats(nullptr)
415, m_namespace_uri(arcaneNamespaceURI())
416, m_module_master(nullptr)
417, m_time_history_mng(nullptr)
418, m_is_initialized(false)
419, m_case_full_file_name(case_file_name)
420, m_case_name(
"unknown")
422, m_case_config(nullptr)
423, m_storage_directory(
".")
424, m_is_continue(false)
425, m_direct_execution(nullptr)
426, m_is_create_default_mesh_v2(false)
428 m_local_name =
"SubDomain";
447 m_default_mesh_handle = m_mesh_mng->createDefaultMeshHandle(
"Mesh0");
475 _setDefaultAcceleratorDevice(config);
477 m_accelerator_mng->initialize(config);
478 Runner runner = m_accelerator_mng->runner();
479 const auto& device_info = runner.
deviceInfo();
480 info() <<
"DeviceInfo: name=" << device_info.name();
481 info() <<
"DeviceInfo: description=" << device_info.description();
487 m_variable_mng->_internalApi()->setAcceleratorMng(m_accelerator_mng);
521 if (!meshes_elem.
null()){
522 info() <<
"Using mesh service to create and allocate meshes";
530 if (!m_is_create_default_mesh_v2)
531 m_legacy_mesh_builder->createDefaultMesh();
534 service_loader->loadSubDomainServices(
this);
541 service_loader->initializeModuleFactories(
this);
546 m_observers.addObserver(
this,
547 &SubDomain::_notifyWriteCheckpoint,
571 Int32 modulo_device = 0;
573 Int32 nb_device = device_list->nbDevice();
574 info() <<
"DeviceInfo: nb_device=" << nb_device;
575 modulo_device = nb_device;
580 Int32 modulo = v.value();
583 modulo_device = modulo;
584 info() <<
"Use commRank() to choose accelerator device with modulo=" << modulo;
586 if (modulo_device!=0){
588 info() <<
"Using device number=" << device_rank;
589 config.
setDeviceId(Accelerator::DeviceId(device_rank));
599 m_case_mesh_master_service.reset();
601 m_property_mng_checkpoint =
nullptr;
618 bool do_return =
true;
633 m_mesh_mng->destroyMeshes();
676 info() <<
"SubDomain: Allocating meshes";
683 info() <<
"** Reading mesh from mesh service";
685 String default_service_name =
"ArcaneCaseMeshMasterService";
691 m_case_mesh_master_service = mbm;
692 m_case_mng->_internalImpl()->internalReadOneOption(mbm->_options(),
true);
696 if (m_is_create_default_mesh_v2)
697 m_legacy_mesh_builder->createDefaultMesh();
699 m_legacy_mesh_builder->allocateMeshes();
709 info() <<
"SubDomain: read or reload meshes";
711 logdate() <<
"Initialisation du code.";
713 Integer nb_mesh = m_mesh_mng->meshes().size();
714 info() <<
" nb_mesh_created=" << nb_mesh
715 <<
" is_continue?=" << m_is_continue;
717 A_INFO(
"Test: {1}",A_TR2(
"nb_mesh_created",nb_mesh),A_TR(m_is_continue));
733 for(
Integer z=0; z<nb_mesh; ++z ){
740 m_case_mesh_master_service->allocateMeshes();
743 m_legacy_mesh_builder->readMeshes();
753 for(
Integer z=0; z<nb_mesh; ++z ){
754 IMesh* mesh = m_mesh_mng->getMesh(z);
756 mesh->nodesCoordinates().setUpToDate();
766 m_mesh_mng->addMesh(mesh);
775 return m_mesh_mng->meshes();
785 m_legacy_mesh_builder->initializeMeshVariablesFromCaseFile();
797 info() <<
"Using custom initial partitioner";
801 if (m_case_mesh_master_service.get()){
802 m_case_mesh_master_service->partitionMeshes();
803 m_case_mesh_master_service->applyAdditionalOperationsOnMeshes();
806 if (m_legacy_mesh_builder->m_use_internal_mesh_partitioner)
807 _doInitialPartition();
812 for(
IMesh* mesh : m_mesh_mng->meshes() ){
838 String test_service =
"MeshPartitionerTester";
840 for(
IMesh*
mesh : m_mesh_mng->meshes() ){
841 bool is_mesh_allocated =
mesh->isAllocated();
842 info() <<
"InitialPartitioning mesh=" <<
mesh->name() <<
" is_allocated?=" << is_mesh_allocated;
843 if (!is_mesh_allocated)
849 if (m_legacy_mesh_builder->m_use_partitioner_tester) {
852 info() <<
"Min nb cell=" << min_nb_cell;
854 _doInitialPartitionForMesh(
mesh, test_service);
856 info() <<
"Mesh name=" <<
mesh->name() <<
" have cells. Do not use " << test_service;
859 info() <<
"No basic partition first needed";
860 _doInitialPartitionForMesh(mesh, m_legacy_mesh_builder->m_internal_partitioner_name);
870 info() <<
"DoInitialPartition. mesh=" << mesh->name() <<
" service=" << service_name;
872 String lib_name = service_name;
873 IMeshPartitionerBase* mesh_partitioner_base =
nullptr;
874 Ref<IMeshPartitionerBase> mesh_partitioner_base_ref;
875 Ref<IMeshPartitioner> mesh_partitioner_ref;
877 ServiceBuilder<IMeshPartitionerBase> sbuilder(
this);
878 mesh_partitioner_base_ref = sbuilder.createReference(service_name,mesh,
SB_AllowNull);
879 mesh_partitioner_base = mesh_partitioner_base_ref.get();
881 if (!mesh_partitioner_base){
884 pwarning() <<
"No implementation for 'IMeshPartitionerBase' interface found. "
885 <<
"Searching implementation for legacy 'IMeshPartitioner' interface";
886 ServiceBuilder<IMeshPartitioner> sbuilder_legacy(
this);
887 mesh_partitioner_ref = sbuilder_legacy.createReference(service_name,mesh,
SB_AllowNull);
888 if (mesh_partitioner_ref.get())
889 mesh_partitioner_base = mesh_partitioner_ref.get();
892 if (!mesh_partitioner_base){
895 sbuilder.getServicesNames(valid_names);
896 String valid_values = String::join(
", ",valid_names);
897 String msg = String::format(
"The specified service for the initial mesh partitionment ({0}) "
898 "is not available (valid_values={1}). This service has to implement "
899 "interface Arcane::IMeshPartitionerBase",
900 lib_name,valid_values);
904 bool is_dynamic = mesh->isDynamic();
905 mesh->modifier()->setDynamic(
true);
906 mesh->utilities()->partitionAndExchangeMeshWithReplication(mesh_partitioner_base,
true);
907 mesh->modifier()->setDynamic(is_dynamic);
919 logdate() <<
"Execution of the end of compute entry points";
938 Int64 len =
id.length();
939 const char* str =
id.localstr();
943 if (!isalpha(str[0]))
945 for(
Int64 i=1; i<len; ++i )
946 if (!isalpha(str[i]) && !isdigit(str[i]) && str[i]!=
'_' && str[i]!=
'.')
964 m_legacy_mesh_builder->readCaseMeshes();
989 XmlElement time_loop_elem(root,
"timeloopinfo");
993 String ustr_userclass(
"userclass");
995 XmlElement elem(time_loop_elem,ustr_userclass,*j);
1001 String ustr_module(
"module");
1002 String ustr_name(
"name");
1003 String ustr_activated(
"activated");
1004 String ustr_true(
"true");
1005 String ustr_false(
"false");
1006 String ustr_variable(
"variable");
1007 String ustr_variable_ref(
"variable-ref");
1009 String ustr_datatype(
"datatype");
1010 String ustr_dimension(
"dimension");
1011 String ustr_kind(
"kind");
1012 String ustr_caseblock(
"caseblock");
1013 String ustr_tagname(
"tagname");
1017 XmlElement module_element(modules,ustr_module);
1019 bool is_activated = (*i)->used();
1020 module_element.
setAttrValue(ustr_activated,is_activated ? ustr_true : ustr_false);
1021 var_ref_list.
clear();
1024 XmlElement variable_element(module_element,ustr_variable_ref);
1032 for( VariableCollection::Enumerator j(var_prv_list); ++j; ){
1048 XmlElement block_elem(blocks_elem,ustr_caseblock);
1062 return m_default_mesh_handle.mesh()->dimension();
1071 return m_mesh_mng->findMesh(name,throw_exception);
1078_notifyWriteCheckpoint()
1080 info(4) <<
"SubDomain::_notifyWriteCheckpoint()";
1083 timeStats()->saveTimeValues(&time_stats_properties);
1086 Properties p(
propertyMng(),
"MessagePassingStats");
1098 info(4) <<
"SubDomain::setIsInitialized()";
1101 timeStats()->mergeTimeValues(&time_stats_properties);
1119 bool do_print_affinity =
false;
1121 do_print_affinity = (v.value()>0);
1122 if (!do_print_affinity)
1124 info() <<
"PrintCPUAffinity";
1131 const Int32 nb_byte = 48;
1133 String cpuset = pas->cpuSetString();
1134 cpuset_bytes = cpuset.
bytes();
1137 cpuset_bytes[nb_byte-1] =
Byte{0};
1145 all_cpuset_bytes.
resize(nb_rank,nb_byte);
1148 for(
Int32 i=0; i<nb_rank; ++i ){
1149 info() <<
"CPUAffinity " <<
Trace::Width(5) << i <<
" = " << all_cpuset_bytes[i].data();
1159template<
typename V>
void SubDomain::
1160_applyPropertyVisitor(V& p)
1162 auto b = p.builder();
1164 p << b.addBool(
"LegacyMeshCreation")
1165 .addDescription(
"Using legacy mesh creation")
1166 .addGetter([](
auto a) {
return a.x.isLegacyMeshCreation(); })
1167 .addSetter([](
auto a) { a.x._setLegacyMeshCreation(a.v); });
1173ARCANE_REGISTER_PROPERTY_CLASS(
SubDomain,());
bool isAcceleratorPolicy(eExecutionPolicy exec_policy)
Indique si exec_policy correspond à un accélérateur.
#define ARCANE_THROW(exception_class,...)
Macro pour envoyer une exception avec formattage.
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Informations pour l'initialisation des accélérateurs.
eExecutionPolicy executionPolicy() const
Politique d'exécution associée à acceleratorRuntime()
void setDeviceId(DeviceId name)
Positionne le device associé au Runner associé.
Interface du gestionnaire des accélérateurs.
Gestionnaire d'exécution pour accélérateur.
const DeviceInfo & deviceInfo() const
Information sur le device associé à cette instance.
eExecutionPolicy executionPolicy() const
Politique d'exécution associée.
Informations sur une application.
ArrayView< DataType > viewAsArray()
Vue du tableau sous forme de tableau 1D.
void resize(Integer size)
Redimensionnement de la deuxième dimension du tableau.
void resize(Int64 s)
Change le nombre d'éléments du tableau à s.
void copy(Span< const T > rhs)
Copie les valeurs de rhs dans l'instance.
Exception sur un identifiant non valide.
Exception lorsqu'on essaie de déréférencer un pointer nul.
Noms des noeuds XML d'un jeu de données Arcane.
Informations pour construire une option de jeu de données.
Classe de base d'une liste d'options du jeu de données.
void clear()
Supprime tous les éléments de la collection.
EnumeratorT< String > Enumerator
Variables communes d'un cas.
Lecteurs de fichiers de configuration.
void addValuesFromXmlNode(const XmlNode &element, Integer priority)
Ajoute des valeurs à la configuration.
Vue constante d'un tableau de type T.
static std::optional< Int32 > tryParseFromEnvironment(StringView s, bool throw_if_invalid)
Classe gérant un répertoire.
Interface de l'application.
virtual const AcceleratorRuntimeInitialisationInfo & acceleratorRuntimeInitialisationInfo() const =0
Informations d'initialisation du runtime pour les accélérateurs.
Interface de la classe de base des objets principaux arcane.
virtual ITraceMng * traceMng() const =0
Gestionnaire de traces.
Interface d'une classe gérant un document XML du jeu de données.
virtual XmlNode configurationElement()=0
Retourne l'élément des informations de configuration.
virtual XmlNode meshesElement()=0
Elément contenant la liste des maillages (nouveau mécanisme) (peut être nul)
virtual CaseNodeNames * caseNodeNames()=0
Retourne l'instance contenant les noms des noeuds XML par langage.
Interface du gestionnaire de cas.
virtual CaseOptionsCollection blocks() const =0
Collection des blocs d'options.
virtual ICaseDocument * caseDocument()=0
Document XML du jeu de données (peut être nul si pas de jeu de donneés)
Interface d'une liste d'options du jeu de données.
Interface d'une liste d'options du jeu de données.
virtual IModule * caseModule() const =0
Retourne le module associé ou nullptr s'il n'y en a pas.
virtual String rootTagName() const =0
Nom de l'élément dans le langage du jeu de données.
Interface du gestionnaire des informations des protections.
Interface d'une configuration.
Interface d'un service d'exécution direct.
Interface d'une classe gérant un répertoire.
Interface du gestionnaire de point d'entrée.
Interface du gestionnaire des entrées sorties.
Interface d'un partitionneur initial.
virtual void partitionAndDistributeMeshes(ConstArrayView< IMesh * > meshes)=0
Partitionne les maillages.
Interface d'enregistrement des variables pour l'equilibrage de charge.
Manufacture des classes d'Arcane.
virtual Ref< IPropertyMng > createPropertyMngReference(ISubDomain *)=0
Crée une instance du gestionnaire de propriétés.
virtual IServiceMng * createServiceMng(IBase *)=0
Crée une instance du gestionnaire de services.
virtual IEntryPointMng * createEntryPointMng(ISubDomain *)=0
Crée une instance du gestionnaire des points d'entrée.
virtual ICheckpointMng * createCheckpointMng(ISubDomain *)=0
Crée une instance du gestionnaire de protections.
virtual ITimeLoopMng * createTimeLoopMng(ISubDomain *)=0
Crée une instance du gestionnaire de la boucle en temps.
virtual ITimeHistoryMng * createTimeHistoryMng(ISubDomain *)=0
Crée une instance du gestionnaire d'historique en temps.
virtual IServiceLoader * createServiceLoader()=0
Crée une instance du chargeur de services.
virtual ILoadBalanceMng * createLoadBalanceMng(ISubDomain *sd)=0
Cree un gestionnaire de description pour l'equilibrage.
virtual ICaseMng * createCaseMng(ISubDomain *)=0
Crée une instance du gestionnaire du jeu de données.
virtual IModuleMng * createModuleMng(ISubDomain *)=0
Crée une instance du gestionnaire de module.
virtual IVariableMng * createVariableMng(ISubDomain *)=0
Crée une instance du gestionnaire de variable.
virtual IModuleMaster * createModuleMaster(ISubDomain *sd)=0
Créé le module maitre pour le sous-domaine sd.
virtual Ref< IAcceleratorMng > createAcceleratorMngRef(ITraceMng *tm)=0
Créé un gestionnaire pour les accélérateurs.
virtual IIOMng * createIOMng(IApplication *)=0
Crée une instance du gestionnaire d'entrée/sortie.
Interface d'un collecteur d'informations sur l'usage mémoire.
Interface du gestionnaire des maillages.
static IMeshStats * create(ITraceMng *trace, IMesh *mesh, IParallelMng *pm)
Création d'une instance par défaut.
virtual void checkValidMesh()=0
Vérification de la validité des structues internes de maillage (interne)
Interface du module principal.
Interface du gestionnaire de modules.
virtual String name() const =0
Nom du module.
Interface d'un observable.
Interface du gestionnaire de parallélisme pour un sous-domaine.
virtual IStat * stat()=0
Gestionnaire des statistiques.
virtual bool isMasterIO() const =0
true si l'instance est un gestionnaire maître des entrées/sorties.
virtual Int32 commSize() const =0
Nombre d'instance dans le communicateur.
virtual void gather(ConstArrayView< char > send_buf, ArrayView< char > recv_buf, Int32 rank)=0
Effectue un regroupement sur un processeurs. Il s'agit d'une opération collective....
virtual Integer masterIORank() const =0
Rang de l'instance gérant les entrées/sorties (pour laquelle isMasterIO() est vrai)
virtual char reduce(eReduceType rt, char v)=0
Effectue la réduction de type rt sur le réel v et retourne la valeur.
Interface d'un système d'unité.
virtual void reloadMesh()=0
Recharge le maillage à partir des variables protégées.
Interface d'un service de de trace des appels de fonctions.
Interface d'un service de profiling.
Interface du gestionnaire des propriétés.
Interface d'un gestionnaire de ressource.
Interface du gestionnaire de services.
Interface d'une session d'exécution d'un cas.
Interface du gestionnaire d'un sous-domaine.
virtual IParallelMng * parallelMng()=0
Retourne le gestionnaire de parallélisme.
Interface d'un gestionnaire de thread.
Classe gérant un historique de valeurs.
Interface du gestionnaire de la boucle en temps.
virtual ITimeLoop * usedTimeLoop() const =0
Retourne la boucle en temps utilisée.
Interface d'une boucle en temps.
virtual String title() const =0
Titre de la boucle en temps.
virtual String description() const =0
Description de la boucle en temps.
virtual StringCollection userClasses() const =0
Liste des classes utilisateurs associées à la boucle en temps.
Interface gérant les statistiques sur les temps d'exécution.
Interface d'un gestionnaire de timer.
Interface du gestionnaire de traces.
virtual void flush()=0
Flush tous les flots.
Interface du gestionnaire de variables.
virtual void variables(VariableRefCollection v, IModule *i)=0
Donne l'ensemble des variables du module i.
Interface d'une variable.
virtual eDataType dataType() const =0
Type de la donnée gérée par la variable (Real, Integer, ...)
@ PPrivate
Indique que la variable est privée.
virtual eItemKind itemKind() const =0
Type des entités du maillage sur lequel repose la variable.
virtual Integer dimension() const =0
Dimension de la variable.
virtual String name() const =0
Nom de la variable.
Construction du maillage via la méthode "historique".
ListEnumeratorT< VariableRef * > Enumerator
IMesh * mesh() const
Maillage associé.
Classe de base d'un observable.
virtual void saveValues(ITraceMng *tm, Properties *p)=0
Sauve les valeurs actuelles dans p.
virtual void mergeValues(ITraceMng *tm, Properties *p)=0
Fusionne les valeurs actuelles avec celles sauvées dans p.
Classe permettant de démarrer et arrêter automatiquement un service.
void setPrintAtEnd(bool v)
Indique si on imprime les résultats à la fin du profiling.
Référence à une instance.
Encapsulation d'un pointeur avec compteur de référence.
static const IDeviceInfoList * deviceInfoList(eExecutionPolicy policy)
Liste des devices pour la politique d'exécution policy.
Encapsulation d'un pointeur qui se détruit automatiquement.
Classe utilitaire pour instantier un service d'une interface donnée.
Ref< InterfaceType > createReference(const String &name, eServiceBuilderProperties properties=SB_None)
Créé une instance implémentant l'interface InterfaceType.
Chaîne de caractères unicode.
Span< const Byte > bytes() const
Retourne la conversion de l'instance dans l'encodage UTF-8.
Classe pour gérer la lecture/écriture des propriétés dans les protections/reprises.
Implémentation d'un gestionnaire de sous-domaine.
void readOrReloadMeshes() override
Lit ou relit les maillages.
IParallelMng * allReplicaParallelMng() const override
Retourne le gestionnaire de parallélisme pour tous les réplicats.
String objectLocalName() const override
Nom local de l'objet.
IPhysicalUnitSystem * physicalUnitSystem() override
Système d'unité du sous-domaine.
String m_case_name
Nom du cas.
IModuleMng * moduleMng() override
Retourne le gestionnaire de modules.
IThreadMng * threadMng() override
Retourne le gestionnaire de thread.
IParallelMng * parallelMng() override
Retourne le gestionnaire de parallélisme.
Observable m_on_destroy_observable
Observable lors d'une destruction.
const String & caseName() const override
Nom du cas.
void setListingDirectory(const IDirectory &dir) override
Positionne le chemin de sortie des infos listing.
Ref< ICaseMng > m_case_mng
Gestionnaire du jeu de données.
IEntryPointMng * entryPointMng() override
Retourne le gestionnaire de points d'entrée.
ILoadBalanceMng * loadBalanceMng() override
Retourne le gestionnaire d'équilibrage de charge.
ISession * m_session
Session.
IBase * objectParent() const override
Parent de cet objet.
void setIsContinue() override
Positionne un flag indiquant qu'on effectue une reprise.
const String & caseFullFileName() const override
Chemin complet du fichier contenant le jeu de données.
void doInitModules() override
Appelle les points d'entrée d'initialisation du module.
IConfiguration * configuration() override
Configuration associée.
ICaseDocument * caseDocument() override
Document XML du cas.
IServiceMng * serviceMng() const override
Gestionnaire de services.
Ref< IParallelMng > m_all_replica_parallel_mng
Gestionnaire du parallélisme pour tous les réplicats.
IIOMng * ioMng() override
Retourne le gestionnaire des entrées/sorties.
void setInitialPartitioner(IInitialPartitioner *partitioner) override
Positionne le partitionneur initial.
const CommonVariables & commonVariables() const override
Informations sur les variables standards.
void setStorageDirectory(const IDirectory &dir) override
Positionne le chemin de sortie des exportations nécessitant un archivage.
void build() override
Construit les membres de l'instance. L'instance n'est pas utilisable tant que cette méthode n'a pas é...
bool m_has_mesh_service
Indique si on utilise le mécanisme de service pour lire le maillage.
ITimeHistoryMng * timeHistoryMng() override
Retourne le gestionnaire d'historique.
IMemoryInfo * memoryInfo() const override
Gestionnaire d'informations mémoire.
bool m_is_initialized
true si initialisé
String m_case_full_file_name
Chemin d'accès du cas.
const IDirectory & exportDirectory() const override
Répertoire de base des exportations.
void dumpInfo(std::ostream &) override
Affiche des informations sur l'instance.
void fillCaseBytes(ByteArray &bytes) const override
Remplit bytes avec le contenue du jeu de données.
IModuleMaster * moduleMaster() const override
Interface du module maître.
ScopedPtrT< ILoadBalanceMng > m_lb_mng
Gestionnaire de caracteristiques pour l'equilibrage.
IVariableMng * variableMng() override
Retourne le gestionnaire de variables.
ScopedPtrT< IModuleMng > m_module_mng
Gestionnaire des modules.
const IDirectory & storageDirectory() const override
Répertoire de base des exportations nécessitant un archivage.
Int32 subDomainId() const override
Numéro du sous-domaine associé à ce gestionnaire.
Ref< IPropertyMng > m_property_mng
Gestionnaire de propriétés.
IMeshMng * meshMng() const override
Retourne le gestionnaire de maillage.
void addMesh(IMesh *mesh) override
Ajoute un maillage au sous-domaine.
void _printCPUAffinity()
Affiche l'affinité CPU de tous les rangs.
CaseOptionsMain * m_case_config
Config du cas.
void dumpInternalInfos(XmlNode &root) override
Sort les informations internes de l'architecture. Les informations sont stockées dans un arbre XML ay...
IApplication * m_application
Gestionnaire principal.
void allocateMeshes() override
Allocation des maillages.
IObservable * onDestroyObservable() override
Notification avant destruction du sous-domaine.
ByteUniqueArray m_case_bytes
Données du cas.
void doInitMeshPartition() override
Applique le partitionnement de maillage de l'initialisation.
ITimerMng * timerMng() const override
Retourne le gestionnaire de timers.
VersionInfo objectVersion() const override
Numéro de version du service.
ICaseMng * caseMng() override
Retourne le gestionnaire du jeu de données.
Ref< IParallelMng > m_parallel_mng
Gestionnaire du parallélisme.
ConstArrayView< IMesh * > meshes() const override
Listes des maillages du sous-domaine.
ScopedPtrT< IPhysicalUnitSystem > m_physical_unit_system
Système d'unité physique.
const IDirectory & listingDirectory() const override
Répertoire de base des listings (logs, info exécution).
void setExportDirectory(const IDirectory &dir) override
Positionne le chemin de sortie des exportations (protections et reprises)
void setIsInitialized() override
Indique que le sous-domaine est initialié.
ScopedPtrT< IEntryPointMng > m_entry_point_mng
Gestionnaire des points d'entrée.
const IConfiguration * configuration() const override
Configuration associée.
ScopedPtrT< IServiceMng > m_service_mng
Gestionnaire des services.
IModuleMaster * m_module_master
Module maitre.
ScopedPtrT< ITimeHistoryMng > m_time_history_mng
Gestionnaire d'historique.
IDirectExecution * directExecution() const override
Service d'exécution directe (ou null)
const MeshHandle & defaultMeshHandle() override
Handle sur le maillage par défaut.
ScopedPtrT< IVariableMng > m_variable_mng
Gestionnaire des variables.
void readCaseMeshes() override
Lit les informations de maillage du jeu de données.
ScopedPtrT< ICheckpointMng > m_checkpoint_mng
Gestionnaire de protections.
Integer meshDimension() const override
Dimension du maillage (1D, 2D ou 3D).
void initialize() override
Initialise l'instance. L'instance n'est pas utilisable tant que cette méthode n'a pas été appelée.
void doExitModules() override
Exécution des modules de fin d'exécution.
Directory m_export_directory
Répertoire d'exportation.
const CaseOptionsMain * caseOptionsMain() const override
Options générales du jeu de donnée.
ITimeStats * m_time_stats
Statistiques sur les temps d'exécution.
ISession * session() const override
Session.
String objectNamespaceURI() const override
Namespace de l'objet.
ScopedPtrT< IMemoryInfo > m_memory_info
Informations sur l'utilisation mémoire.
void setCaseName(const String &case_name) override
Positionne le nom du cas.
bool isContinue() const override
Vrai si on effectue une reprise, faux sinon.
IMainFactory * mainFactory() override
Manufacture principale.
ICheckpointMng * checkpointMng() const override
Gestionnaire de protections.
IRessourceMng * ressourceMng() const override
Gestionnaire de ressources.
IPropertyMng * propertyMng() const override
Gestionnaire de propriétés.
ScopedPtrT< IConfiguration > m_configuration
Configuration.
ITimeLoopMng * timeLoopMng() override
Retourne le gestionnaire de la boucle en temps.
void checkId(const String &where, const String &id) override
Vérifie qu'un identifiant est valide.
Directory m_listing_directory
Répertoire des listings.
IApplication * application() override
Application.
ScopedPtrT< ITimeLoopMng > m_time_loop_mng
Gestionnaire de la boucle en temps.
Directory m_storage_directory
Répertoire d'archivage.
ITimerMng * m_timer_mng
Gestionnaire des timers.
ITraceMng * traceMng() const override
Gestionnaire de traces.
ITimeStats * timeStats() const override
Statistiques des temps d'exécution.
IMesh * defaultMesh() override
Maillage par défaut.
void initializeMeshVariablesFromCaseFile() override
Initialise les variables dont les valeurs sont spécifiées dans le jeu de données.
void setDirectExecution(IDirectExecution *v) override
Positionne le service d'exécution directe.
bool isInitialized() const override
Indique si la session a été initialisée.
Int32 nbSubDomain() const override
Nombre total de sous-domaines.
IAcceleratorMng * acceleratorMng() override
Gestionnaire de l'accélérateur associé
IMesh * findMesh(const String &name, bool throw_exception) override
Recherche le maillage de nom name.
const ApplicationInfo & applicationInfo() const override
Informations sur l'exécutable.
ScopedPtrT< IIOMng > m_io_mng
Gestionnaire des entrées/sorties.
Postionne le nom de l'action en cours d'exécution.
TraceAccessor(ITraceMng *m)
Construit un accesseur via le gestionnaire de trace m.
TraceMessage logdate() const
Flot pour un message de log précédé de la date.
TraceMessage info() const
Flot pour un message d'information.
ITraceMng * traceMng() const
Gestionnaire de trace.
TraceMessage pwarning() const
Positionne une classe de message.
Formattage du flot en longueur.
Vecteur de données 2D avec sémantique par valeur (style STL).
Vecteur 1D de données avec sémantique par valeur (style STL).
Paramètres nécessaires à la construction d'une variable.
Informations sur une version.
bool null() const
Vrai si le noeud est nul.
void setAttrValue(const String &name, const String &value)
Positionne l'attribut name à la valeur value.
API EN COURS DE CONCEPTION. NE PAS UTILISER.
VariableRefArrayT< Byte > VariableArrayByte
Variable tableau de type byte.
Espace de nom pour l'utilisation des accélérateurs.
void dumpDateAndMemoryUsage(IParallelMng *pm, ITraceMng *tm)
Écrit dans tm la date et la mémoire consommée.
@ ReduceMin
Minimum des valeurs.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
@ SB_AllowNull
Autorise l'absence du service.
std::int64_t Int64
Type entier signé sur 64 bits.
Int32 Integer
Type représentant un entier.
Array< Byte > ByteArray
Tableau dynamique à une dimension de caractères.
UniqueArray< Byte > ByteUniqueArray
Tableau dynamique à une dimension de caractères.
Collection< ICaseOptions * > CaseOptionsCollection
Collection d'options du jeu de données.
const char * itemKindName(eItemKind kind)
Nom du genre d'entité.
ConstArrayView< Byte > ByteConstArrayView
Equivalent C d'un tableau à une dimension de caractères.
unsigned char Byte
Type d'un octet.
UniqueArray< String > StringUniqueArray
Tableau dynamique à une dimension de chaînes de caractères.
List< VariableRef * > VariableRefList
Tableau de références de variables.
const char * dataTypeName(eDataType type)
Nom du type de donnée.
std::int32_t Int32
Type entier signé sur 32 bits.