Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ParticleFamilyPolicyMng.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 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/* ParticleFamilyPolicyMng.cc (C) 2000-2016 */
9/* */
10/* Gestionnaire des politiques d'une famille de particules. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/utils/TraceAccessor.h"
15#include "arcane/utils/NotImplementedException.h"
16
17#include "arcane/IItemFamilyCompactPolicy.h"
18#include "arcane/ItemFamilyCompactInfos.h"
19#include "arcane/IMeshCompacter.h"
20#include "arcane/IMesh.h"
21
22#include "arcane/mesh/ItemFamilyPolicyMng.h"
23#include "arcane/mesh/ParticleFamilySerializer.h"
24#include "arcane/mesh/ParticleFamily.h"
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29ARCANE_BEGIN_NAMESPACE
30ARCANE_MESH_BEGIN_NAMESPACE
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
43: public TraceAccessor
45{
46 public:
47 ParticleFamilyCompactPolicy(ParticleFamily* family)
48 : TraceAccessor(family->traceMng()), m_family(family)
49 {
50 m_cell_family = family->mesh()->cellFamily();
51 }
52 public:
53 void beginCompact(ItemFamilyCompactInfos& compact_infos) override
54 {
55 if (_checkWantCompact(compact_infos))
56 m_family->beginCompactItems(compact_infos);
57 }
58 void compactVariablesAndGroups(const ItemFamilyCompactInfos& compact_infos) override
59 {
60 if (_checkWantCompact(compact_infos))
61 m_family->compactVariablesAndGroups(compact_infos);
62 }
63 void updateInternalReferences(IMeshCompacter*) override
64 {
65 }
66 void endCompact(ItemFamilyCompactInfos& compact_infos) override
67 {
68 if (_checkWantCompact(compact_infos))
69 m_family->finishCompactItems(compact_infos);
70 }
71 void finalizeCompact(IMeshCompacter* compacter) override
72 {
73 ARCANE_UNUSED(compacter);
74 }
76 {
77 }
78 IItemFamily* family() const override { return m_family; }
79 private:
80 bool _checkWantCompact(const ItemFamilyCompactInfos& compact_infos)
81 {
82 // Pour des raisons de compatibilité avec l'existant (version 2.4.1
83 // et antérieure on ne compacte pas la famille de particule si elle
84 // n'a pas de fantômes, sauf si c'est la seule famille en cours de compactage
85 // (ce qui correspond à un appel direct à ItemFamily::compactItems()).
86 // TODO: une fois qu'on sera sur que cela est OK il faudra toujours compacter
87 // quelle que soit la famille.
88 if (m_family->getEnableGhostItems())
89 return true;
90 ItemFamilyCollection families = compact_infos.compacter()->families();
91 if (families.count()==1 && families.front()==m_family)
92 return true;
93 return false;
94 }
95 private:
96 ParticleFamily* m_family;
97 IItemFamily* m_cell_family;
98};
99
100/*---------------------------------------------------------------------------*/
101/*---------------------------------------------------------------------------*/
105class ARCANE_MESH_EXPORT ParticleFamilyPolicyMng
106: public ItemFamilyPolicyMng
107{
108 public:
109 ParticleFamilyPolicyMng(ParticleFamily* family)
111 , m_family(family){}
112 public:
114 {
115 if (use_flags)
116 throw NotSupportedException(A_FUNCINFO,"serialisation with 'use_flags==true'");
117 return new ParticleFamilySerializer(m_family);
118 }
119 private:
120 ParticleFamily* m_family;
121};
122
123/*---------------------------------------------------------------------------*/
124/*---------------------------------------------------------------------------*/
125
126extern "C++" ARCANE_MESH_EXPORT IItemFamilyPolicyMng*
127createParticleFamilyPolicyMng(ItemFamily* family)
128{
129 ParticleFamily* f = ARCANE_CHECK_POINTER(dynamic_cast<ParticleFamily*>(family));
130 return new ParticleFamilyPolicyMng(f);
131}
132
133/*---------------------------------------------------------------------------*/
134/*---------------------------------------------------------------------------*/
135
136ARCANE_MESH_END_NAMESPACE
137ARCANE_END_NAMESPACE
138
139/*---------------------------------------------------------------------------*/
140/*---------------------------------------------------------------------------*/
#define ARCANE_CHECK_POINTER(ptr)
Macro retournant le pointeur ptr s'il est non nul ou lancant une exception s'il est nul.
Integer count() const
Nombre d'éléments de la collection.
Definition Collection.h:70
Politique de compactage des entités.
Gère la sérialisation/désérialisation des entités d'une famille.
Interface d'une famille d'entités.
Gestion d'un compactage de familles du maillage.
Informations pour gérer le compactage des entités d'une famille.
Gestionnaire des politiques d'une famille d'entités.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Politique de compactage pour les particules.
IItemFamily * family() const override
Famille associée.
void compactConnectivityData() override
Compacte les données sur les connectivités.
Gestionnaire des politiques d'une famille de particules.
IItemFamilySerializer * createSerializer(bool use_flags) override
Créé une instance pour la sérialisation des entités. L'instance retournée doit être détruite par l'op...
Sérialisation/Désérialisation des familles de liens.
Exception lorsqu'une opération n'est pas supportée.