Arcane  v3.16.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
DoFFamily.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 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/* DoFFamily.h (C) 2000-2024 */
9/* */
10/* Famille de degrés de liberté (DoF) */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_MESH_DOFFAMILY_H
13#define ARCANE_MESH_DOFFAMILY_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18#include "arcane/core/IMesh.h"
19#include "arcane/core/IParallelMng.h"
20#include "arcane/core/IDoFFamily.h"
21
22#include "arcane/mesh/ItemFamily.h"
23
24// can be removed, used only for ENUMERATE_ITEM_INTERNAL_MAP_DATA macro...
25#include "arcane/mesh/DynamicMeshIncrementalBuilder.h"
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
30namespace Arcane::mesh
31{
32class DynamicMesh;
33
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
36
37class ARCANE_MESH_EXPORT DoFUids
38{
42 public:
43
44 // item with one dof
45 static Int64 uid(Int64 connected_item_uid) { return connected_item_uid; } // Trivial.
46
47 // item with several dof
48 static Int64 uid(Int64 max_dof_family_uid,
49 Int64 max_connected_item_family_uid,
50 Int64 connected_item_uid,
51 Int32 dof_index_in_item)
52 {
53 return connected_item_uid + (max_connected_item_family_uid + 1) * dof_index_in_item + max_dof_family_uid + 1;
54 } // very temporary solution...
55
56 // utilities
57 static Int64 getMaxItemUid(IItemFamily* family);
58};
59
60/*---------------------------------------------------------------------------*/
61/*---------------------------------------------------------------------------*/
62
63class ARCANE_MESH_EXPORT DoFFamily
64: public ItemFamily
66, public IDoFFamily
67{
68 private:
69
72 DoFFamily(IMesh* mesh, const String& name);
73
74 public:
75
76 // Implémentation de IDoFFamily
77 String name() const override { return ItemFamily::name(); }
78 String fullName() const override { return ItemFamily::fullName(); }
79 Integer nbItem() const override { return ItemFamily::nbItem(); }
80 ItemGroup allItems() const override { return ItemFamily::allItems(); }
81 void endUpdate() override { return ItemFamily::endUpdate(); }
82 IItemFamily* itemFamily() override { return this; }
83
84 public:
85
87 {
88 return _allocDoF(uid);
89 }
90
91 ItemInternal* allocOne(Int64 uid)
92 {
93 return _allocDoF(uid);
94 }
95
96 // IItemFamilyModifier interface
97 Item findOrAllocOne(Int64 uid, ItemTypeId, MeshInfos&, bool& is_alloc) override
98 {
99 auto dof = _findOrAllocDoF(uid, is_alloc);
100 return dof;
101 }
102
103 ItemInternal* findOrAllocOne(Int64 uid, bool& is_alloc)
104 {
105 return _findOrAllocDoF(uid, is_alloc);
106 }
107
108 // IItemFamilyModifier interface
109 IItemFamily* family() override { return this; }
110
111 IDoFFamily* toDoFFamily() override { return this; }
112
114 DoFVectorView addDoFs(Int64ConstArrayView dof_uids, Int32ArrayView dof_lids) override;
115
117 DoFVectorView addGhostDoFs(Int64ConstArrayView dof_uids, Int32ArrayView dof_lids, Int32ConstArrayView owners) override;
118
120 void computeSynchronizeInfos() override;
121
122 DoFGroup allDoFs() { return ItemFamily::allItems(); }
123 DoFGroup ownDoFs() { return ItemFamily::allItems().own(); }
124 DoFGroup ghostDoFs() { return ItemFamily::allItems().ghost(); }
125
126 void removeDoFs(Int32ConstArrayView items_local_id) override;
127
128 private:
129
130 void build() override;
131 void _addItems(Int64ConstArrayView unique_ids, Int32ArrayView items);
132 void addGhostItems(Int64ConstArrayView unique_ids, Int32ArrayView items, Int32ConstArrayView owners) override;
133 void _removeItems(Int32ConstArrayView local_ids, bool keep_ghost = false) { internalRemoveItems(local_ids, keep_ghost); };
134 void internalRemoveItems(Int32ConstArrayView local_ids, bool keep_ghost = false) override;
135 // void compactItems(bool do_sort) {m_need_prepare_dump = false;} //! Surcharge ItemFamily::compactItems car pas de compactage pour l'instant dans les DoFs.
136
137 // FOR DEBUG
138 void _printInfos(Integer nb_added);
139
140 private:
141
142 void preAllocate(Integer nb_item);
143 ItemInternal* _allocDoF(const Int64 uid);
144 ItemInternal* _allocDoFGhost(const Int64 uid, const Int32 owner);
145 ItemInternal* _findOrAllocDoF(const Int64 uid, bool& is_alloc);
146
147 ItemSharedInfoWithType* m_shared_info;
148
149 friend class DynamicMesh;
150};
151
152/*---------------------------------------------------------------------------*/
153/*---------------------------------------------------------------------------*/
154
155} // namespace Arcane::mesh
156
157/*---------------------------------------------------------------------------*/
158/*---------------------------------------------------------------------------*/
159
160#endif
Déclarations de types sur les entités.
Interface d'une famille de DoF.
Definition IDoFFamily.h:33
Interface de modification d'une famille.
Interface d'une famille d'entités.
Definition IItemFamily.h:84
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Structure interne d'une entité de maillage.
Type d'une entité (Item).
Definition ItemTypeId.h:32
Classe de base d'un élément de maillage.
Definition Item.h:83
Chaîne de caractères unicode.
void endUpdate() override
Notifie la fin de modification de la liste des entités.
Definition DoFFamily.h:81
DoFFamily(IMesh *mesh, const String &name)
La famille ne peut pas etre cree directement, il faut utiliser le DoFManager.
Definition DoFFamily.cc:48
String fullName() const override
Nom complet de la famille (avec celui du maillage)
Definition DoFFamily.h:78
Integer nbItem() const override
Nombre d'entités.
Definition DoFFamily.h:79
ItemGroup allItems() const override
Groupe de toutes les entités.
Definition DoFFamily.h:80
IDoFFamily * toDoFFamily() override
Retourne l'interface de la famille de particule de cette famille.
Definition DoFFamily.h:111
Item allocOne(Int64 uid, ItemTypeId, MeshInfos &) override
Alloue un élément dans la famille et met à jour le mesh_info correspondant.
Definition DoFFamily.h:86
String name() const override
Nom de la famille.
Definition DoFFamily.h:77
static Int64 uid(Int64 connected_item_uid)
Definition DoFFamily.h:45
Implémentation d'un maillage.
Definition DynamicMesh.h:97
IMesh * mesh() const override
Maillage associé
String fullName() const override
Nom complet de la famille (avec celui du maillage)
Definition ItemFamily.h:131
void endUpdate() override
Notifie la fin de modification de la liste des entités.
ItemGroup allItems() const override
Groupe de toutes les entités.
Integer nbItem() const override
Nombre d'entités.
String name() const override
Nom de la famille.
Definition ItemFamily.h:130
Classe factorisant des informations sur le maillage.
Definition MeshInfos.h:36
ItemVectorViewT< DoF > DoFVectorView
Vue sur un vecteur de degre de liberte.
Definition ItemTypes.h:315
ItemGroupT< DoF > DoFGroup
Groupe de Degre de Liberte.
Definition ItemTypes.h:193
std::int64_t Int64
Type entier signé sur 64 bits.
Int32 Integer
Type représentant un entier.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:569
ConstArrayView< Int64 > Int64ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 64 bits.
Definition UtilsTypes.h:567
ArrayView< Int32 > Int32ArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:540
std::int32_t Int32
Type entier signé sur 32 bits.