Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
FaceFamilyPolicyMng.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/* FaceFamilyPolicyMng.cc (C) 2000-2022 */
9/* */
10/* Gestionnaire des politiques d'une famille de faces. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/utils/NotSupportedException.h"
15
16#include "arcane/IMesh.h"
17#include "arcane/IItemFamilyNetwork.h"
18
19#include "arcane/mesh/ItemFamilyPolicyMng.h"
20#include "arcane/mesh/ItemFamilyCompactPolicy.h"
21#include "arcane/mesh/IndirectItemFamilySerializer.h"
22#include "arcane/mesh/TiedInterfaceExchanger.h"
23#include "arcane/mesh/DynamicMesh.h"
24#include "arcane/mesh/DynamicMeshIncrementalBuilder.h"
25#include "arcane/mesh/FaceFamily.h"
26#include "arcane/mesh/ItemFamilySerializer.h"
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30
31namespace Arcane::mesh
32{
33
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
39class ARCANE_MESH_EXPORT FaceFamilyPolicyMng
41{
44 {
46 {
47 IMesh* mesh = family->mesh();
48 if (mesh->hasTiedInterface()){
49 DynamicMesh* x = ARCANE_CHECK_POINTER(dynamic_cast<DynamicMesh*>(mesh));
50 return new TiedInterfaceExchanger(x);
51 }
52 return nullptr;
53 }
54 };
55
56 public:
57
60 , m_family(family)
61 {
62 addSerializeStep(&m_tied_interface_serialize_factory);
63 }
64 ~FaceFamilyPolicyMng()
65 {
66 arcaneCallFunctionAndTerminateIfThrow([&]() { removeSerializeStep(&m_tied_interface_serialize_factory); });
67 }
68
69 public:
70
72 {
73 if (use_flags)
74 throw NotSupportedException(A_FUNCINFO,"serialisation with 'use_flags==true'");
75 IMesh* mesh = m_family->mesh();
76 DynamicMesh* dmesh = ARCANE_CHECK_POINTER(dynamic_cast<DynamicMesh*>(mesh));
77 if(m_family->mesh()->useMeshItemFamilyDependencies())
78 return new ItemFamilySerializer(m_family, m_family,dmesh->incrementalBuilder());
79 else
80 return new IndirectItemFamilySerializer(m_family);
81 }
82 private:
83 FaceFamily* m_family;
84 TiedInterfaceSerializeStepFactory m_tied_interface_serialize_factory;
85};
86
87/*---------------------------------------------------------------------------*/
88/*---------------------------------------------------------------------------*/
89
90extern "C++" ARCANE_MESH_EXPORT IItemFamilyPolicyMng*
91createFaceFamilyPolicyMng(ItemFamily* family)
92{
93 FaceFamily* f = ARCANE_CHECK_POINTER(dynamic_cast<FaceFamily*>(family));
94 return new FaceFamilyPolicyMng(f);
95}
96
97/*---------------------------------------------------------------------------*/
98/*---------------------------------------------------------------------------*/
99
100} // End namespace Arcane::mesh
101
102/*---------------------------------------------------------------------------*/
103/*---------------------------------------------------------------------------*/
#define ARCANE_CHECK_POINTER(ptr)
Macro retournant le pointeur ptr s'il est non nul ou lancant une exception s'il est nul.
Interface des politiques d'une famille d'entités.
Fabrique pour créer une étape de la sérialisation des familles d'entités.
Interface d'une étape de la sérialisation des familles d'entités.
Gère la sérialisation/désérialisation des entités d'une famille.
Interface d'une famille d'entités.
virtual IMesh * mesh() const =0
Maillage associé
virtual bool hasTiedInterface()=0
Vrai s'il existe des interfaces semi-conformes dans le maillage.
Sérialisation/Désérialisation indirecte des familles d'entités.
Gestionnaire des politiques d'une famille d'entités.
Sérialisation/Désérialisation des familles d'entités.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Echangeur entre sous-domaines les interfaces liées.
Implémentation d'un maillage.
Definition DynamicMesh.h:97
IItemFamilySerializeStep * createStep(IItemFamily *family)
Créé une étape pour la famille family.
Gestionnaire des politiques d'une famille de faces.
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...
Famille de faces.
Definition FaceFamily.h:53
Politique de compactage pour familles d'entités Node, Edge, Face ou Cell.
Exception lorsqu'une opération n'est pas supportée.
void arcaneCallFunctionAndTerminateIfThrow(std::function< void()> function)