Arcane  v3.16.0.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/*---------------------------------------------------------------------------*/
42class ParticleFamilyCompactPolicy
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)
110 : ItemFamilyPolicyMng(family,new ParticleFamilyCompactPolicy(family))
111 , m_family(family){}
112 public:
113 IItemFamilySerializer* createSerializer(bool use_flags) override
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.
Definition IItemFamily.h:84
Gestion d'un compactage de familles du maillage.
virtual ItemFamilyCollection families() const =0
Familles dont les entités sont compactées.
Informations pour gérer le compactage des entités d'une famille.
Exception lorsqu'une opération n'est pas supportée.
Politique de compactage pour les particules.
IItemFamily * family() const override
Famille associée.
void compactConnectivityData() override
Compacte les données sur les connectivités.
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.
TraceAccessor(ITraceMng *m)
Construit un accesseur via le gestionnaire de trace m.
Collection< IItemFamily * > ItemFamilyCollection
Collection de familles d'entités.