Arcane  4.2.1.0
User documentation
Loading...
Searching...
No Matches
InterfaceImpl.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 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/* Implementation of interfaces. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13/*
14 * On Windows, you must include the interfaces so that their symbols
15 * are available (on Linux too if using gcc with visibility information).
16 */
17
18#include "arcane/core/IVariableSynchronizerMng.h"
19
20#include "arcane/utils/String.h"
21#include "arcane/utils/ArgumentException.h"
22#include "arcane/utils/FatalErrorException.h"
23#include "arcane/utils/PlatformUtils.h"
24
25#include "arcane/core/IArcaneMain.h"
26#include "arcane/core/IServiceInfo.h"
28#include "arcane/core/IBase.h"
29#include "arcane/core/IBackwardMng.h"
30#include "arcane/core/ICaseFunction.h"
31#include "arcane/core/ICaseMng.h"
32#include "arcane/core/ICaseMeshReader.h"
33#include "arcane/core/ICaseMeshService.h"
34#include "arcane/core/ICaseMeshMasterService.h"
35#include "arcane/core/ICheckpointMng.h"
36#include "arcane/core/ICheckpointReader.h"
37#include "arcane/core/ICheckpointWriter.h"
38#include "arcane/core/IDataReader.h"
39#include "arcane/core/IDataReader2.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/ItemFamilyItemListChangedEventArgs.h"
81#include "arcane/core/IItemFamily.h"
82#include "arcane/core/IItemFamilyCompactPolicy.h"
83#include "arcane/core/IItemFamilySerializer.h"
84#include "arcane/core/IItemFamilySerializeStep.h"
85#include "arcane/core/IItemFamilyExchanger.h"
86#include "arcane/core/IItemFamilyModifier.h"
87#include "arcane/core/IItemFamilyPolicyMng.h"
88#include "arcane/core/IItemFamilyTopologyModifier.h"
89#include "arcane/core/IDoFFamily.h"
90#include "arcane/core/IParticleFamily.h"
91#include "arcane/core/ItemFamilySerializeArgs.h"
92#include "arcane/core/ITimeStats.h"
93#include "arcane/core/ITimerMng.h"
94#include "arcane/core/ITimeLoopMng.h"
95#include "arcane/core/IEntryPoint.h"
96#include "arcane/core/ICaseOptions.h"
97#include "arcane/core/ICaseFunctionProvider.h"
98#include "arcane/core/IVariableSynchronizerMng.h"
99#include "arcane/core/Configuration.h"
100#include "arcane/core/ConnectivityItemVector.h"
101#include "arcane/core/IVariableFilter.h"
102#include "arcane/core/IVariableParallelOperation.h"
103#include "arcane/core/IAsyncParticleExchanger.h"
104#include "arcane/core/IParticleExchanger.h"
105#include "arcane/core/IParallelExchanger.h"
106#include "arcane/core/ITimeHistoryCurveWriter.h"
107#include "arcane/core/ITimeHistoryCurveWriter2.h"
108#include "arcane/core/ITimeHistoryTransformer.h"
109#include "arcane/core/IItemOperationByBasicType.h"
110#include "arcane/core/IVariableSynchronizer.h"
111#include "arcane/core/IVariableUtilities.h"
112#include "arcane/core/IPhysicalUnitSystemService.h"
113#include "arcane/core/IPhysicalUnitSystem.h"
114#include "arcane/core/IPhysicalUnitConverter.h"
115#include "arcane/core/IPhysicalUnit.h"
116#include "arcane/core/IStandardFunction.h"
117#include "arcane/core/ItemPairGroup.h"
118#include "arcane/core/CaseFunction2.h"
119#include "arcane/core/IServiceAndModuleFactoryMng.h"
120#include "arcane/core/IGetVariablesValuesParallelOperation.h"
121#include "arcane/core/IGhostLayerMng.h"
122#include "arcane/core/IMeshUniqueIdMng.h"
123#include "arcane/core/VariableStatusChangedEventArgs.h"
124#include "arcane/core/MeshPartInfo.h"
125#include "arcane/core/IGraph2.h"
126#include "arcane/core/IGraphModifier2.h"
127#include "arcane/core/IRandomNumberGenerator.h"
128#include "arcane/core/ISimpleTableComparator.h"
129#include "arcane/core/ISimpleTableInternalComparator.h"
130#include "arcane/core/ISimpleTableInternalMng.h"
131#include "arcane/core/ISimpleTableOutput.h"
132#include "arcane/core/ISimpleTableReaderWriter.h"
133#include "arcane/core/ISimpleTableWriterHelper.h"
134#include "arcane/core/IPostProcessorWriter.h"
135#include "arcane/core/IMeshModifier.h"
136#include "arcane/core/MeshEvents.h"
137#include "arcane/core/IExternalPlugin.h"
138#include "arcane/core/IMeshSubdivider.h"
139#include "arcane/core/IMeshSection.h"
140
141#include "arcane/core/IMeshInitialAllocator.h"
142#include "arcane/core/internal/IItemFamilyInternal.h"
143#include "arcane/core/internal/IMeshInternal.h"
144#include "arcane/core/internal/IVariableInternal.h"
145#include "arcane/core/internal/IMeshModifierInternal.h"
146#include "arcane/core/internal/IVariableMngInternal.h"
147#include "arcane/core/internal/IVariableSynchronizerMngInternal.h"
148#include "arcane/core/internal/IIncrementalItemConnectivityInternal.h"
149#include "arcane/core/internal/IPolyhedralMeshModifier.h"
150#include "arcane/core/internal/IItemFamilySerializerMngInternal.h"
151
152/*---------------------------------------------------------------------------*/
153/*---------------------------------------------------------------------------*/
154
155namespace Arcane
156{
157
158/*---------------------------------------------------------------------------*/
159/*---------------------------------------------------------------------------*/
160
161IArcaneMain* IArcaneMain::global_arcane_main = 0;
162
163/*---------------------------------------------------------------------------*/
164/*---------------------------------------------------------------------------*/
165
168{
169 return global_arcane_main;
170}
171
172/*---------------------------------------------------------------------------*/
173/*---------------------------------------------------------------------------*/
174
175void IArcaneMain::
176setArcaneMain(IArcaneMain* arcane_main)
177{
178 global_arcane_main = arcane_main;
179}
180
181/*---------------------------------------------------------------------------*/
182/*---------------------------------------------------------------------------*/
183
184extern "C++" String
185arcaneNamespaceURI()
186{
187 return String("http://www.cea.fr/arcane/1.0");
188}
189
190/*---------------------------------------------------------------------------*/
191/*---------------------------------------------------------------------------*/
192
193/*---------------------------------------------------------------------------*/
194/*---------------------------------------------------------------------------*/
195
197compress(Span<const Byte> values, ByteArray& compressed_values)
198{
199 return compress(values.smallView(), compressed_values);
200}
201
202/*---------------------------------------------------------------------------*/
203/*---------------------------------------------------------------------------*/
204
206decompress(Span<const Byte> compressed_values, Span<Byte> values)
207{
208 return decompress(compressed_values.smallView(), values.smallView());
209}
210
211/*---------------------------------------------------------------------------*/
212/*---------------------------------------------------------------------------*/
213
216{
217 IPrimaryMesh* primary_mesh = this->mesh()->toPrimaryMesh();
218 ARCANE_CHECK_POINTER(primary_mesh);
219 return primary_mesh;
220}
221
222/*---------------------------------------------------------------------------*/
223/*---------------------------------------------------------------------------*/
224
225ItemInternal* IItemFamilyModifier::
226allocOne(Int64 uid, ItemTypeInfo* type, mesh::MeshInfos& mesh_info)
227{
228 return ItemCompatibility::_itemInternal(allocOne(uid, type->itemTypeId(), mesh_info));
229}
230
231/*---------------------------------------------------------------------------*/
232/*---------------------------------------------------------------------------*/
233
234ItemInternal* IItemFamilyModifier::
235findOrAllocOne(Int64 uid, ItemTypeInfo* type, mesh::MeshInfos& mesh_info, bool& is_alloc)
236{
237 return ItemCompatibility::_itemInternal(findOrAllocOne(uid, type->itemTypeId(), mesh_info, is_alloc));
238}
239
240/*---------------------------------------------------------------------------*/
241/*---------------------------------------------------------------------------*/
242
244reserveMemoryForNbSourceItems([[maybe_unused]] Int32 n,
245 [[maybe_unused]] bool pre_alloc_connectivity)
246{
247}
248
249/*---------------------------------------------------------------------------*/
250/*---------------------------------------------------------------------------*/
251
252void IIncrementalItemSourceConnectivity::
253_internalNotifySourceItemsAdded(Int32ConstArrayView local_ids)
254{
255 for (Int32 lid : local_ids)
257}
258
259/*---------------------------------------------------------------------------*/
260/*---------------------------------------------------------------------------*/
261
263setConnectedItems(ItemLocalId source_item, Int32ConstArrayView target_local_ids)
264{
265 removeConnectedItems(source_item);
266 for (Int32 x : target_local_ids)
267 addConnectedItem(source_item, ItemLocalId{ x });
268}
269
270/*---------------------------------------------------------------------------*/
271/*---------------------------------------------------------------------------*/
272
274setMesh([[maybe_unused]] IMesh* mesh)
275{
276 // Use environment variable.
277 if (platform::getEnvironmentVariable("ARCANE_ALLOW_POSTPROCESSOR_SETMESH") == "1")
278 return;
279 ARCANE_FATAL("This call is deprecated and does not do anything."
280 " You can temporarely disable this exception if you set the environment"
281 " variable ARCANE_ALLOW_POSTPROCESSOR_SETMESH to '1'");
282}
283
284/*---------------------------------------------------------------------------*/
285/*---------------------------------------------------------------------------*/
286
289{
290 addCells(args.nbCell(), args.cellInfos(), args.cellLocalIds());
291}
292
295{
296 addFaces(args.nbFace(), args.faceInfos(), args.faceLocalIds());
297}
298
299/*---------------------------------------------------------------------------*/
300/*---------------------------------------------------------------------------*/
301
304{
305 ARCANE_THROW(NotImplementedException, "synchronize() with specific local ids");
306}
307
310{
311 ARCANE_THROW(NotImplementedException, "synchronize() with specific local ids");
312}
313
316{
317 ARCANE_THROW(NotImplementedException, "synchronize() with specific local ids");
318}
319
325
326/*---------------------------------------------------------------------------*/
327/*---------------------------------------------------------------------------*/
328
330computeAdjacency(const ItemPairGroup& adjacency_array, eItemKind link_kind, Integer nb_layer)
331{
332 computeAdjency(adjacency_array, link_kind, nb_layer);
333}
334
335/*---------------------------------------------------------------------------*/
336/*---------------------------------------------------------------------------*/
337
339findAdjacencyItems(const ItemGroup& group,
340 const ItemGroup& sub_group,
341 eItemKind link_kind,
342 Integer nb_layer)
343{
344 return findAdjencyItems(group, sub_group, link_kind, nb_layer);
345}
346
347/*---------------------------------------------------------------------------*/
348/*---------------------------------------------------------------------------*/
349
351setBackAndFrontCells(FaceLocalId, CellLocalId, CellLocalId)
352{
353 ARCANE_THROW(NotSupportedException, "only supported for FaceFamily of unstructured mesh");
354}
355
356/*---------------------------------------------------------------------------*/
357/*---------------------------------------------------------------------------*/
358
359} // End namespace Arcane
360
361/*---------------------------------------------------------------------------*/
362/*---------------------------------------------------------------------------*/
#define ARCANE_CHECK_POINTER(ptr)
Macro returning the pointer ptr if it is not null or throwing an exception if it is null.
#define ARCANE_THROW(exception_class,...)
Macro for throwing an exception with formatting.
#define ARCANE_FATAL(...)
Macro throwing a FatalErrorException.
Declarations of types on entities.
static IArcaneMain * arcaneMain()
virtual void compress(ByteConstArrayView values, ByteArray &compressed_values)=0
Compresses the data values and stores it in compressed_values.
virtual void decompress(ByteConstArrayView compressed_values, ByteArrayView values)=0
Decompresses the data compressed_values and stores it in values.
virtual void removeConnectedItems(ItemLocalId source_item)=0
Removes all entities connected to source_item.
virtual void addConnectedItem(ItemLocalId source_item, ItemLocalId target_local_id)=0
Adds the entity with localId() target_local_id to the connectivity of source_item.
virtual void setConnectedItems(ItemLocalId source_item, Int32ConstArrayView target_local_ids)
Allocates and positions entities connected to source_item.
virtual void reserveMemoryForNbSourceItems(Int32 n, bool pre_alloc_connectivity)
Reserves memory for n source entities.
virtual void notifySourceItemAdded(ItemLocalId item)=0
Notifies the connectivity that an entity has been added to the source family.
virtual void setBackAndFrontCells(FaceLocalId face_lid, CellLocalId back_cell_lid, CellLocalId front_cell_lid)
Positions a cell in front and behind a face.
virtual void synchronize(VariableCollection variables)=0
Synchronizes the variables variables.
virtual ItemPairGroup findAdjencyItems(const ItemGroup &group, const ItemGroup &sub_group, eItemKind link_kind, Integer nb_layer)=0
Searches for an adjacency list.
virtual ItemPairGroup findAdjacencyItems(const ItemGroup &group, const ItemGroup &sub_group, eItemKind link_kind, Integer nb_layer)
Searches for an adjacency list.
virtual void addFaces(Integer nb_face, Int64ConstArrayView face_infos, Int32ArrayView face_lids=Int32ArrayView())=0
Adds faces.
virtual void addCells(Integer nb_cell, Int64ConstArrayView cell_infos, Int32ArrayView cells_lid=Int32ArrayView())=0
Adds cells.
virtual IMesh * mesh() const =0
Mesh associated with the partitioner.
virtual IPrimaryMesh * primaryMesh() override
Associated mesh.
virtual void computeAdjency(ItemPairGroup adjacency_array, eItemKind link_kind, Integer nb_layer)=0
Calculates adjacencies, stored in adjacency_array.
virtual void computeAdjacency(const ItemPairGroup &adjacency_array, eItemKind link_kind, Integer nb_layer)
Calculates adjacencies, stored in adjacency_array.
virtual IPrimaryMesh * toPrimaryMesh()=0
Returns the instance in the form of an IPrimaryMesh.
virtual void setMesh(IMesh *mesh)
Positions the mesh.
virtual void synchronize(IVariable *var)=0
Synchronizes the variable var in blocking mode.
Interface of a variable.
Definition IVariable.h:40
virtual void synchronize()=0
Synchronizes the variable.
Mesh entity group.
Definition ItemGroup.h:51
Index of an Item in a variable.
Definition ItemLocalId.h:42
Table of entity lists.
Info on a mesh entity type.
ItemTypeId itemTypeId() const
Type number.
Arguments for IMeshModifier::addCells().
Arguments for IMeshModifier::addFaces().
constexpr view_type smallView()
Constant view of this view.
Definition Span.h:390
View of an array of elements of type T.
Definition Span.h:633
String getEnvironmentVariable(const String &name)
Environment variable named name.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
std::int64_t Int64
Signed integer type of 64 bits.
Int32 Integer
Type representing an integer.
Array< Byte > ByteArray
Dynamic one-dimensional array of characters.
Definition UtilsTypes.h:115
ConstArrayView< Int32 > Int32ConstArrayView
C equivalent of a 1D array of 32-bit integers.
Definition UtilsTypes.h:476
eItemKind
Mesh entity type.
std::int32_t Int32
Signed integer type of 32 bits.