Arcane  v3.16.6.0
Documentation développeur
Tout Classes Espaces de nommage Fichiers Fonctions Variables Définitions de type Énumérations Valeurs énumérées Amis Macros Groupes Pages Concepts
InterfaceImpl.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* InterfaceImpl.cc (C) 2000-2025 */
9/* */
10/* Implémentation des interfaces. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13/*
14 * Sous Windows, il faut inclure les interfaces pour que leurs symboles
15 * soient disponibles (sous linux aussi si on utilise gcc avec les infos
16 * de visibilités).
17 */
18
19#include "arcane/core/IVariableSynchronizerMng.h"
20
21#include "arcane/utils/String.h"
22#include "arcane/utils/ArgumentException.h"
23#include "arcane/utils/FatalErrorException.h"
24#include "arcane/utils/PlatformUtils.h"
25
26#include "arcane/core/IArcaneMain.h"
27#include "arcane/core/IServiceInfo.h"
29#include "arcane/core/IBase.h"
30#include "arcane/core/IBackwardMng.h"
31#include "arcane/core/ICaseFunction.h"
32#include "arcane/core/ICaseMng.h"
33#include "arcane/core/ICaseMeshReader.h"
34#include "arcane/core/ICaseMeshService.h"
35#include "arcane/core/ICaseMeshMasterService.h"
36#include "arcane/core/ICheckpointMng.h"
37#include "arcane/core/ICheckpointReader.h"
38#include "arcane/core/ICheckpointWriter.h"
39#include "arcane/core/IDataReader.h"
40#include "arcane/core/IDataReaderWriter.h"
41#include "arcane/core/IDataWriter.h"
42#include "arcane/core/IExtraGhostItemsBuilder.h"
43#include "arcane/core/IModuleMng.h"
44#include "arcane/core/IServiceMng.h"
45#include "arcane/core/ICodeService.h"
46#include "arcane/core/ISubDomain.h"
47#include "arcane/core/IServiceInfo.h"
48#include "arcane/core/IService.h"
49#include "arcane/core/IApplication.h"
50#include "arcane/core/IMainFactory.h"
51#include "arcane/core/IMeshBuilder.h"
52#include "arcane/core/IMeshCompactMng.h"
53#include "arcane/core/IMeshExchangeMng.h"
54#include "arcane/core/IMeshCompacter.h"
55#include "arcane/core/IMeshExchanger.h"
56#include "arcane/core/IMeshFactory.h"
57#include "arcane/core/IMeshFactoryMng.h"
58#include "arcane/core/IMeshMng.h"
59#include "arcane/core/IMeshPartitioner.h"
60#include "arcane/core/IMeshUtilities.h"
61#include "arcane/core/IGridMeshPartitioner.h"
62#include "arcane/core/IDataStorageFactory.h"
63#include "arcane/core/IDirectExecution.h"
64#include "arcane/core/IDirectSubDomainExecuteFunctor.h"
65#include "arcane/core/ISerializer.h"
66#include "arcane/core/IDeflateService.h"
67#include "arcane/core/IPrimaryMesh.h"
69#include "arcane/core/IInitialPartitioner.h"
70#include "arcane/core/IIOMng.h"
71#include "arcane/core/IIndexedIncrementalItemConnectivity.h"
72#include "arcane/core/IIndexedIncrementalItemConnectivityMng.h"
73#include "arcane/core/IIncrementalItemConnectivity.h"
74#include "arcane/core/IItemConnectivityAccessor.h"
75#include "arcane/core/IItemConnectivityInfo.h"
76#include "arcane/core/IItemConnectivity.h"
77#include "arcane/core/IItemConnectivityMng.h"
78#include "arcane/core/IItemConnectivitySynchronizer.h"
79#include "arcane/core/ItemFamilyCompactInfos.h"
80#include "arcane/core/IItemFamily.h"
81#include "arcane/core/IItemFamilyCompactPolicy.h"
82#include "arcane/core/IItemFamilySerializer.h"
83#include "arcane/core/IItemFamilySerializeStep.h"
84#include "arcane/core/IItemFamilyExchanger.h"
85#include "arcane/core/IItemFamilyModifier.h"
86#include "arcane/core/IItemFamilyPolicyMng.h"
87#include "arcane/core/IItemFamilyTopologyModifier.h"
88#include "arcane/core/IDoFFamily.h"
89#include "arcane/core/IParticleFamily.h"
90#include "arcane/core/ItemFamilySerializeArgs.h"
91#include "arcane/core/ITimeStats.h"
92#include "arcane/core/ITimerMng.h"
93#include "arcane/core/ITimeLoopMng.h"
94#include "arcane/core/IEntryPoint.h"
95#include "arcane/core/ICaseOptions.h"
96#include "arcane/core/ICaseFunctionProvider.h"
97#include "arcane/core/IVariableSynchronizerMng.h"
98#include "arcane/core/Configuration.h"
99#include "arcane/core/ConnectivityItemVector.h"
100#include "arcane/core/IVariableFilter.h"
101#include "arcane/core/IVariableParallelOperation.h"
102#include "arcane/core/IAsyncParticleExchanger.h"
103#include "arcane/core/IParticleExchanger.h"
104#include "arcane/core/IParallelExchanger.h"
105#include "arcane/core/ITimeHistoryCurveWriter.h"
106#include "arcane/core/ITimeHistoryCurveWriter2.h"
107#include "arcane/core/ITimeHistoryTransformer.h"
108#include "arcane/core/IItemOperationByBasicType.h"
109#include "arcane/core/IVariableSynchronizer.h"
110#include "arcane/core/IVariableUtilities.h"
111#include "arcane/core/IPhysicalUnitSystemService.h"
112#include "arcane/core/IPhysicalUnitSystem.h"
113#include "arcane/core/IPhysicalUnitConverter.h"
114#include "arcane/core/IPhysicalUnit.h"
115#include "arcane/core/IStandardFunction.h"
116#include "arcane/core/ItemPairGroup.h"
117#include "arcane/core/CaseFunction2.h"
118#include "arcane/core/IServiceAndModuleFactoryMng.h"
119#include "arcane/core/IGetVariablesValuesParallelOperation.h"
120#include "arcane/core/IGhostLayerMng.h"
121#include "arcane/core/IMeshUniqueIdMng.h"
122#include "arcane/core/VariableStatusChangedEventArgs.h"
123#include "arcane/core/MeshPartInfo.h"
124#include "arcane/core/IGraph2.h"
125#include "arcane/core/IGraphModifier2.h"
126#include "arcane/core/IRandomNumberGenerator.h"
127#include "arcane/core/ISimpleTableComparator.h"
128#include "arcane/core/ISimpleTableInternalComparator.h"
129#include "arcane/core/ISimpleTableInternalMng.h"
130#include "arcane/core/ISimpleTableOutput.h"
131#include "arcane/core/ISimpleTableReaderWriter.h"
132#include "arcane/core/ISimpleTableWriterHelper.h"
133#include "arcane/core/IPostProcessorWriter.h"
134#include "arcane/core/IMeshModifier.h"
135#include "arcane/core/MeshEvents.h"
136#include "arcane/core/IExternalPlugin.h"
137#include "arcane/core/IMeshSubdivider.h"
138
139#include "arcane/core/IMeshInitialAllocator.h"
140#include "arcane/core/internal/IItemFamilyInternal.h"
141#include "arcane/core/internal/IMeshInternal.h"
142#include "arcane/core/internal/IVariableInternal.h"
143#include "arcane/core/internal/IMeshModifierInternal.h"
144#include "arcane/core/internal/IVariableMngInternal.h"
145#include "arcane/core/internal/IVariableSynchronizerMngInternal.h"
146#include "arcane/core/internal/IIncrementalItemConnectivityInternal.h"
147#include "arcane/core/internal/IPolyhedralMeshModifier.h"
148
149/*---------------------------------------------------------------------------*/
150/*---------------------------------------------------------------------------*/
151
152namespace Arcane
153{
154
155/*---------------------------------------------------------------------------*/
156/*---------------------------------------------------------------------------*/
157
158IArcaneMain* IArcaneMain::global_arcane_main = 0;
159
160/*---------------------------------------------------------------------------*/
161/*---------------------------------------------------------------------------*/
162
165{
166 return global_arcane_main;
167}
168
169/*---------------------------------------------------------------------------*/
170/*---------------------------------------------------------------------------*/
171
173setArcaneMain(IArcaneMain* arcane_main)
174{
175 global_arcane_main = arcane_main;
176}
177
178/*---------------------------------------------------------------------------*/
179/*---------------------------------------------------------------------------*/
180
181extern "C++" String
182arcaneNamespaceURI()
183{
184 return String("http://www.cea.fr/arcane/1.0");
185}
186
187/*---------------------------------------------------------------------------*/
188/*---------------------------------------------------------------------------*/
189
190/*---------------------------------------------------------------------------*/
191/*---------------------------------------------------------------------------*/
192
194compress(Span<const Byte> values,ByteArray& compressed_values)
195{
196 return compress(values.smallView(),compressed_values);
197}
198
199/*---------------------------------------------------------------------------*/
200/*---------------------------------------------------------------------------*/
201
203decompress(Span<const Byte> compressed_values,Span<Byte> values)
204{
205 return decompress(compressed_values.smallView(),values.smallView());
206}
207
208/*---------------------------------------------------------------------------*/
209/*---------------------------------------------------------------------------*/
210
213{
214 IPrimaryMesh* primary_mesh = this->mesh()->toPrimaryMesh();
215 ARCANE_CHECK_POINTER(primary_mesh);
216 return primary_mesh;
217}
218
219/*---------------------------------------------------------------------------*/
220/*---------------------------------------------------------------------------*/
221
222ItemInternal* IItemFamilyModifier::
223allocOne(Int64 uid,ItemTypeInfo* type, mesh::MeshInfos& mesh_info)
224{
225 return ItemCompatibility::_itemInternal(allocOne(uid,type->itemTypeId(),mesh_info));
226}
227
228/*---------------------------------------------------------------------------*/
229/*---------------------------------------------------------------------------*/
230
231ItemInternal* IItemFamilyModifier::
232findOrAllocOne(Int64 uid,ItemTypeInfo* type, mesh::MeshInfos& mesh_info, bool& is_alloc)
233{
234 return ItemCompatibility::_itemInternal(findOrAllocOne(uid,type->itemTypeId(),mesh_info,is_alloc));
235}
236
237/*---------------------------------------------------------------------------*/
238/*---------------------------------------------------------------------------*/
239
241reserveMemoryForNbSourceItems([[maybe_unused]] Int32 n,
242 [[maybe_unused]] bool pre_alloc_connectivity)
243{
244}
245
246/*---------------------------------------------------------------------------*/
247/*---------------------------------------------------------------------------*/
248
255
256/*---------------------------------------------------------------------------*/
257/*---------------------------------------------------------------------------*/
258
260setConnectedItems(ItemLocalId source_item, Int32ConstArrayView target_local_ids)
261{
262 removeConnectedItems(source_item);
263 for (Int32 x : target_local_ids)
264 addConnectedItem(source_item, ItemLocalId{ x });
265}
266
267/*---------------------------------------------------------------------------*/
268/*---------------------------------------------------------------------------*/
269
271setMesh([[maybe_unused]] IMesh* mesh)
272{
273 // Utiliser variable d'environnement.
274 if (platform::getEnvironmentVariable("ARCANE_ALLOW_POSTPROCESSOR_SETMESH")=="1")
275 return;
276 ARCANE_FATAL("This call is deprecated and does not do anything."
277 " You can temporarely disable this exception if you set the environment"
278 " variable ARCANE_ALLOW_POSTPROCESSOR_SETMESH to '1'");
279}
280
281/*---------------------------------------------------------------------------*/
282/*---------------------------------------------------------------------------*/
283
286{
287 addCells(args.nbCell(),args.cellInfos(),args.cellLocalIds());
288}
289
292{
293 addFaces(args.nbFace(),args.faceInfos(),args.faceLocalIds());
294}
295
296/*---------------------------------------------------------------------------*/
297/*---------------------------------------------------------------------------*/
298
301{
302 ARCANE_THROW(NotImplementedException,"synchronize() with specific local ids");
303}
304
307{
308 ARCANE_THROW(NotImplementedException,"synchronize() with specific local ids");
309}
310
313{
314 ARCANE_THROW(NotImplementedException,"synchronize() with specific local ids");
315}
316
322
323/*---------------------------------------------------------------------------*/
324/*---------------------------------------------------------------------------*/
325
327computeAdjacency(const ItemPairGroup& adjacency_array, eItemKind link_kind, Integer nb_layer)
328{
329 computeAdjency(adjacency_array, link_kind, nb_layer);
330}
331
332/*---------------------------------------------------------------------------*/
333/*---------------------------------------------------------------------------*/
334
336findAdjacencyItems(const ItemGroup& group,
337 const ItemGroup& sub_group,
338 eItemKind link_kind,
339 Integer nb_layer)
340{
341 return findAdjencyItems(group, sub_group, link_kind, nb_layer);
342}
343
344/*---------------------------------------------------------------------------*/
345/*---------------------------------------------------------------------------*/
346
348setBackAndFrontCells(FaceLocalId, CellLocalId, CellLocalId)
349{
350 ARCANE_THROW(NotSupportedException, "only supported for FaceFamily of unstructured mesh");
351}
352
353/*---------------------------------------------------------------------------*/
354/*---------------------------------------------------------------------------*/
355
356} // End namespace Arcane
357
358/*---------------------------------------------------------------------------*/
359/*---------------------------------------------------------------------------*/
#define ARCANE_CHECK_POINTER(ptr)
Macro retournant le pointeur ptr s'il est non nul ou lancant une exception s'il est nul.
#define ARCANE_THROW(exception_class,...)
Macro pour envoyer une exception avec formattage.
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Déclarations de types sur les entités.
Interface de la classe de gestion du code.
Definition IArcaneMain.h:54
static IArcaneMain * arcaneMain()
static void setArcaneMain(IArcaneMain *arcane_main)
virtual void compress(ByteConstArrayView values, ByteArray &compressed_values)=0
Compresse les données values et les stocke dans compressed_values.
virtual void decompress(ByteConstArrayView compressed_values, ByteArrayView values)=0
Décompresse les données compressed_values et les stocke dans values.
virtual void removeConnectedItems(ItemLocalId source_item)=0
Supprime toute les entités connectées à source_item.
virtual void addConnectedItem(ItemLocalId source_item, ItemLocalId target_local_id)=0
Ajoute l'entité de localId() target_local_id à la connectivité de source_item.
virtual void setConnectedItems(ItemLocalId source_item, Int32ConstArrayView target_local_ids)
Alloue et positionne les entités connectées à source_item.
virtual void reserveMemoryForNbSourceItems(Int32 n, bool pre_alloc_connectivity)
Réserve la mémoire pour n entités sources.
virtual void _internalNotifySourceItemsAdded(Int32ConstArrayView items)
Notifie la connectivité que les entités items ont été ajoutées à la famille source.
virtual void notifySourceItemAdded(ItemLocalId item)=0
Notifie la connectivité qu'une entité a été ajoutée à la famille source.
virtual void setBackAndFrontCells(FaceLocalId face_lid, CellLocalId back_cell_lid, CellLocalId front_cell_lid)
Positionne la maille devant et derrière une face.
virtual void synchronize(VariableCollection variables)=0
Synchronise les variables variables.
virtual ItemPairGroup findAdjencyItems(const ItemGroup &group, const ItemGroup &sub_group, eItemKind link_kind, Integer nb_layer)=0
Cherche une liste d'adjacence.
virtual ItemPairGroup findAdjacencyItems(const ItemGroup &group, const ItemGroup &sub_group, eItemKind link_kind, Integer nb_layer)
Cherche une liste d'adjacence.
virtual void addFaces(Integer nb_face, Int64ConstArrayView face_infos, Int32ArrayView face_lids=Int32ArrayView())=0
Ajoute des faces.
virtual void addCells(Integer nb_cell, Int64ConstArrayView cell_infos, Int32ArrayView cells_lid=Int32ArrayView())=0
Ajoute des mailles.
virtual IMesh * mesh() const =0
Maillage associé au partitionneur.
virtual IPrimaryMesh * primaryMesh() override
Maillage associé
virtual void computeAdjency(ItemPairGroup adjacency_array, eItemKind link_kind, Integer nb_layer)=0
Calcul des adjacences, rangées dans adjacency_array.
virtual void computeAdjacency(const ItemPairGroup &adjacency_array, eItemKind link_kind, Integer nb_layer)
Calcul des adjacences, rangées dans adjacency_array.
virtual IPrimaryMesh * toPrimaryMesh()=0
Retourne l'instance sous la forme d'un IPrimaryMesh.
virtual void setMesh(IMesh *mesh)
Positionne le maillage.
virtual void synchronize(IVariable *var)=0
Synchronise la variable var en mode bloquant.
Interface d'une variable.
Definition IVariable.h:56
virtual void synchronize()=0
Synchronise la variable.
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Structure interne d'une entité de maillage.
Index d'un Item dans une variable.
Definition ItemLocalId.h:41
Tableau de listes d'entités.
Infos sur un type d'entité du maillage.
ItemTypeId itemTypeId() const
Numéro du type.
Arguments pour IMeshModifier::addCells().
Arguments pour IMeshModifier::addFaces().
Exception lorsqu'une fonction n'est pas implémentée.
Exception lorsqu'une opération n'est pas supportée.
constexpr view_type smallView()
Vue constante sur cette vue.
Definition Span.h:273
Vue d'un tableau d'éléments de type T.
Definition Span.h:513
Chaîne de caractères unicode.
Collection de variables.
Classe factorisant des informations sur le maillage.
Definition MeshInfos.h:36
ARCCORE_BASE_EXPORT String getEnvironmentVariable(const String &name)
Variable d'environnement du nom name.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
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.
Definition UtilsTypes.h:208
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:569
eItemKind
Genre d'entité de maillage.
std::int32_t Int32
Type entier signé sur 32 bits.