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/XmlNode.h"
61#include "arcane/core/ICaseDocument.h"
62#include "arcane/core/IPhysicalUnitSystem.h"
63#include "arcane/core/IPhysicalUnitSystemService.h"
64#include "arcane/core/ISession.h"
65#include "arcane/core/IMeshStats.h"
66#include "arcane/core/IParallelReplication.h"
67#include "arcane/core/IServiceLoader.h"
68#include "arcane/core/IMeshPartitioner.h"
69#include "arcane/core/ICaseMeshMasterService.h"
70#include "arcane/core/ILoadBalanceMng.h"
71#include "arcane/core/CaseNodeNames.h"
72#include "arcane/core/Observable.h"
73#include "arcane/core/VariableCollection.h"
74#include "arcane/core/SubDomainBuildInfo.h"
75#include "arcane/core/ServiceBuilder.h"
76#include "arcane/core/IMeshUtilities.h"
77#include "arcane/core/IMeshMng.h"
78#include "arcane/core/MeshHandle.h"
79#include "arcane/core/ObserverPool.h"
80#include "arcane/core/ConfigurationPropertyReader.h"
81#include "arcane/core/parallel/IStat.h"
83#include "arcane/core/internal/IDataInternal.h"
84#include "arcane/core/internal/ICaseMngInternal.h"
85#include "arcane/core/internal/IParallelMngInternal.h"
86#include "arcane/core/internal/IVariableMngInternal.h"
88#include "arcane/impl/ConfigurationReader.h"
89#include "arcane/impl/internal/MeshMng.h"
90#include "arcane/impl/internal/LegacyMeshBuilder.h"
92#include "arcane/CaseOptionService.h"
93#include "arcane/CaseOptionBuildInfo.h"
95#include "arcane/accelerator/core/IAcceleratorMng.h"
96#include "arcane/accelerator/core/DeviceInfo.h"
97#include "arcane/accelerator/core/Runner.h"
98#include "arcane/accelerator/core/AcceleratorRuntimeInitialisationInfo.h"
99#include "arcane/accelerator/core/IDeviceInfoList.h"
110class MeshBuilderMaster
117 m_mesh_service.addAlternativeNodeName(
"fr",
"maillages");
122 return m_case_options->configList();
125 ICaseOptions* options()
const {
return m_case_options.get(); }
129 m_mesh_service.instance()->createMeshes();
147 ARCANE_DECLARE_PROPERTY_CLASS(SubDomain);
152 class PropertyMngCheckpoint
156 explicit PropertyMngCheckpoint(
ISubDomain* sd)
165 m_observers.addObserver(
this,
166 &PropertyMngCheckpoint::_notifyWrite,
167 m_property_values.variable()->writeObservable());
168 m_observers.addObserver(
this,
169 &PropertyMngCheckpoint::_notifyRead,
170 m_property_values.variable()->readObservable());
175 info(4) <<
"PropertyMngCheckpoint: READ";
176 m_sub_domain->propertyMng()->readFrom(m_property_values);
180 info(4) <<
"PropertyMngCheckpoint: WRITE";
181 m_sub_domain->propertyMng()->writeTo(m_property_values._internalTrueData()->_internalDeprecatedValue());
182 m_property_values.variable()->syncReferences();
196 void build()
override;
198 void destroy()
override;
237 void dumpInfo(std::ostream&)
override;
242 IMesh*
mesh()
override {
return m_default_mesh_handle.
mesh(); }
243 IMesh*
findMesh(
const String& name,
bool throw_exception)
override;
257 m_legacy_mesh_builder->m_initial_partitioner = partitioner;
287 void _setLegacyMeshCreation(
bool v){ m_is_create_default_mesh_v2 = !v; }
288 bool isLegacyMeshCreation()
const {
return !m_is_create_default_mesh_v2; }
294 const char* _msgClassName()
const {
return "Init"; }
334 bool m_is_create_default_mesh_v2;
345 void _doInitialPartition();
346 void _doInitialPartitionForMesh(
IMesh* mesh,
const String& service_name);
347 void _notifyWriteCheckpoint();
355static ISubDomain* global_sub_domain =
nullptr;
359extern "C" ARCANE_IMPL_EXPORT
ISubDomain* _arcaneGetDefaultSubDomain()
361 return global_sub_domain;
367extern "C++" ISubDomain*
368arcaneCreateSubDomain(ISession* session,
const SubDomainBuildInfo& sdbi)
371 Ref<IParallelMng> all_replica_pm = sdbi.allReplicaParallelMng();
372 String case_file_name = sdbi.caseFileName();
375 ITraceMng* tm = pm->traceMng();
376 StringBuilder trace_id;
377 trace_id += String::fromNumber(pm->commRank());
378 if (all_replica_pm!=pm){
380 trace_id += pm->replication()->replicationRank();
384 tm->setTraceId(trace_id.toString());
386 auto* sd =
new SubDomain(session,pm,all_replica_pm,case_file_name,bytes);
390 global_sub_domain = sd;
400: TraceAccessor2(pm->traceMng())
402, m_application(session->application())
404, m_all_replica_parallel_mng(all_replica_pm)
405, m_timer_mng(nullptr)
406, m_time_stats(nullptr)
407, m_namespace_uri(arcaneNamespaceURI())
408, m_module_master(nullptr)
409, m_time_history_mng(nullptr)
410, m_is_initialized(false)
411, m_case_full_file_name(case_file_name)
412, m_case_name(
"unknown")
414, m_case_config(nullptr)
415, m_storage_directory(
".")
416, m_is_continue(false)
417, m_direct_execution(nullptr)
418, m_is_create_default_mesh_v2(false)
420 m_local_name =
"SubDomain";
439 m_default_mesh_handle = m_mesh_mng->createDefaultMeshHandle(
"Mesh0");
467 _setDefaultAcceleratorDevice(config);
469 m_accelerator_mng->initialize(config);
470 Runner runner = m_accelerator_mng->runner();
471 const auto& device_info = runner.
deviceInfo();
472 info() <<
"DeviceInfo: name=" << device_info.name();
473 info() <<
"DeviceInfo: description=" << device_info.description();
479 m_variable_mng->_internalApi()->setAcceleratorMng(m_accelerator_mng);
513 if (!meshes_elem.
null()){
514 info() <<
"Using mesh service to create and allocate meshes";
522 if (!m_is_create_default_mesh_v2)
523 m_legacy_mesh_builder->createDefaultMesh();
526 service_loader->loadSubDomainServices(
this);
533 service_loader->initializeModuleFactories(
this);
538 m_observers.addObserver(
this,
539 &SubDomain::_notifyWriteCheckpoint,
563 Int32 modulo_device = 0;
565 Int32 nb_device = device_list->nbDevice();
566 info() <<
"DeviceInfo: nb_device=" << nb_device;
567 modulo_device = nb_device;
572 Int32 modulo = v.value();
575 modulo_device = modulo;
576 info() <<
"Use commRank() to choose accelerator device with modulo=" << modulo;
578 if (modulo_device!=0){
580 info() <<
"Using device number=" << device_rank;
581 config.
setDeviceId(Accelerator::DeviceId(device_rank));
591 m_case_mesh_master_service.reset();
593 m_property_mng_checkpoint =
nullptr;
610 bool do_return =
true;
625 m_mesh_mng->destroyMeshes();
668 info() <<
"SubDomain: Allocating meshes";
675 info() <<
"** Reading mesh from mesh service";
677 String default_service_name =
"ArcaneCaseMeshMasterService";
683 m_case_mesh_master_service = mbm;
684 m_case_mng->_internalImpl()->internalReadOneOption(mbm->_options(),
true);
688 if (m_is_create_default_mesh_v2)
689 m_legacy_mesh_builder->createDefaultMesh();
691 m_legacy_mesh_builder->allocateMeshes();
701 info() <<
"SubDomain: read or reload meshes";
703 logdate() <<
"Initialisation du code.";
705 Integer nb_mesh = m_mesh_mng->meshes().size();
706 info() <<
" nb_mesh_created=" << nb_mesh
707 <<
" is_continue?=" << m_is_continue;
709 A_INFO(
"Test: {1}",A_TR2(
"nb_mesh_created",nb_mesh),A_TR(m_is_continue));
725 for(
Integer z=0; z<nb_mesh; ++z ){
732 m_case_mesh_master_service->allocateMeshes();
735 m_legacy_mesh_builder->readMeshes();
745 for(
Integer z=0; z<nb_mesh; ++z ){
746 IMesh* mesh = m_mesh_mng->getMesh(z);
748 mesh->nodesCoordinates().setUpToDate();
758 m_mesh_mng->addMesh(mesh);
767 return m_mesh_mng->meshes();
777 m_legacy_mesh_builder->initializeMeshVariablesFromCaseFile();
789 info() <<
"Using custom initial partitioner";
793 if (m_case_mesh_master_service.get()){
794 m_case_mesh_master_service->partitionMeshes();
795 m_case_mesh_master_service->applyAdditionalOperationsOnMeshes();
798 if (m_legacy_mesh_builder->m_use_internal_mesh_partitioner)
799 _doInitialPartition();
804 for(
IMesh* mesh : m_mesh_mng->meshes() ){
830 String test_service =
"MeshPartitionerTester";
832 for(
IMesh*
mesh : m_mesh_mng->meshes() ){
833 bool is_mesh_allocated =
mesh->isAllocated();
834 info() <<
"InitialPartitioning mesh=" <<
mesh->name() <<
" is_allocated?=" << is_mesh_allocated;
835 if (!is_mesh_allocated)
841 if (m_legacy_mesh_builder->m_use_partitioner_tester) {
844 info() <<
"Min nb cell=" << min_nb_cell;
846 _doInitialPartitionForMesh(
mesh, test_service);
848 info() <<
"Mesh name=" <<
mesh->name() <<
" have cells. Do not use " << test_service;
851 info() <<
"No basic partition first needed";
852 _doInitialPartitionForMesh(mesh, m_legacy_mesh_builder->m_internal_partitioner_name);
862 info() <<
"DoInitialPartition. mesh=" << mesh->name() <<
" service=" << service_name;
864 String lib_name = service_name;
865 IMeshPartitionerBase* mesh_partitioner_base =
nullptr;
866 Ref<IMeshPartitionerBase> mesh_partitioner_base_ref;
867 Ref<IMeshPartitioner> mesh_partitioner_ref;
869 ServiceBuilder<IMeshPartitionerBase> sbuilder(
this);
870 mesh_partitioner_base_ref = sbuilder.createReference(service_name,mesh,
SB_AllowNull);
871 mesh_partitioner_base = mesh_partitioner_base_ref.get();
873 if (!mesh_partitioner_base){
876 pwarning() <<
"No implementation for 'IMeshPartitionerBase' interface found. "
877 <<
"Searching implementation for legacy 'IMeshPartitioner' interface";
878 ServiceBuilder<IMeshPartitioner> sbuilder_legacy(
this);
879 mesh_partitioner_ref = sbuilder_legacy.createReference(service_name,mesh,
SB_AllowNull);
880 if (mesh_partitioner_ref.get())
881 mesh_partitioner_base = mesh_partitioner_ref.get();
884 if (!mesh_partitioner_base){
887 sbuilder.getServicesNames(valid_names);
888 String valid_values = String::join(
", ",valid_names);
889 String msg = String::format(
"The specified service for the initial mesh partitionment ({0}) "
890 "is not available (valid_values={1}). This service has to implement "
891 "interface Arcane::IMeshPartitionerBase",
892 lib_name,valid_values);
896 bool is_dynamic = mesh->isDynamic();
897 mesh->modifier()->setDynamic(
true);
898 mesh->utilities()->partitionAndExchangeMeshWithReplication(mesh_partitioner_base,
true);
899 mesh->modifier()->setDynamic(is_dynamic);
911 logdate() <<
"Execution of the end of compute entry points";
930 Int64 len =
id.length();
931 const char* str =
id.localstr();
935 if (!isalpha(str[0]))
937 for(
Int64 i=1; i<len; ++i )
938 if (!isalpha(str[i]) && !isdigit(str[i]) && str[i] !=
'_' && str[i] !=
'.' && str[i] !=
'-')
956 m_legacy_mesh_builder->readCaseMeshes();
981 XmlElement time_loop_elem(root,
"timeloopinfo");
985 String ustr_userclass(
"userclass");
987 XmlElement elem(time_loop_elem,ustr_userclass,*j);
993 String ustr_module(
"module");
995 String ustr_activated(
"activated");
997 String ustr_false(
"false");
998 String ustr_variable(
"variable");
999 String ustr_variable_ref(
"variable-ref");
1001 String ustr_datatype(
"datatype");
1002 String ustr_dimension(
"dimension");
1003 String ustr_kind(
"kind");
1004 String ustr_caseblock(
"caseblock");
1005 String ustr_tagname(
"tagname");
1009 XmlElement module_element(modules,ustr_module);
1011 bool is_activated = (*i)->used();
1012 module_element.
setAttrValue(ustr_activated,is_activated ? ustr_true : ustr_false);
1013 var_ref_list.
clear();
1016 XmlElement variable_element(module_element,ustr_variable_ref);
1024 for( VariableCollection::Enumerator j(var_prv_list); ++j; ){
1040 XmlElement block_elem(blocks_elem,ustr_caseblock);
1054 return m_default_mesh_handle.mesh()->dimension();
1063 return m_mesh_mng->findMesh(name,throw_exception);
1070_notifyWriteCheckpoint()
1072 info(4) <<
"SubDomain::_notifyWriteCheckpoint()";
1075 timeStats()->saveTimeValues(&time_stats_properties);
1078 Properties p(
propertyMng(),
"MessagePassingStats");
1090 info(4) <<
"SubDomain::setIsInitialized()";
1093 timeStats()->mergeTimeValues(&time_stats_properties);
1111 bool do_print_affinity =
false;
1113 do_print_affinity = (v.value()>0);
1114 if (!do_print_affinity)
1116 info() <<
"PrintCPUAffinity";
1123 const Int32 nb_byte = 48;
1125 String cpuset = pas->cpuSetString();
1126 cpuset_bytes = cpuset.
bytes();
1129 cpuset_bytes[nb_byte-1] =
Byte{0};
1137 all_cpuset_bytes.
resize(nb_rank,nb_byte);
1140 for(
Int32 i=0; i<nb_rank; ++i ){
1141 info() <<
"CPUAffinity " <<
Trace::Width(5) << i <<
" = " << all_cpuset_bytes[i].data();
1151template<
typename V>
void SubDomain::
1152_applyPropertyVisitor(V& p)
1154 auto b = p.builder();
1156 p << b.addBool(
"LegacyMeshCreation")
1157 .addDescription(
"Using legacy mesh creation")
1158 .addGetter([](
auto a) {
return a.x.isLegacyMeshCreation(); })
1159 .addSetter([](
auto a) { a.x._setLegacyMeshCreation(a.v); });
1165ARCANE_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.