Arcane  4.1.12.0
Developer documentation
Loading...
Searching...
No Matches
BasicItemPairGroupComputeFunctor.h
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/* BasicItemPairGroupComputeFunctor.h (C) 2000-2024 */
9/* */
10/* Utility functions on a mesh. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_MESH_BASICITEMPAIRGROUPCOMPUTEFUNCTOR_H
13#define ARCANE_MESH_BASICITEMPAIRGROUPCOMPUTEFUNCTOR_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/TraceAccessor.h"
18#include "arcane/utils/IFunctor.h"
19#include "arcane/core/IMeshUtilities.h"
20#include "arcane/core/Item.h"
21
22#include <map>
23#include <functional>
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28namespace Arcane
29{
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
33
34class ItemPairGroup;
36
37/*---------------------------------------------------------------------------*/
38/*---------------------------------------------------------------------------*/
42class BasicItemPairGroupComputeFunctor
43: public TraceAccessor
44{
45 public:
46
47 struct AdjacencyType
48 {
49 AdjacencyType()
50 : m_item_kind(IK_Unknown)
51 , m_sub_item_kind(IK_Unknown)
52 , m_link_item_kind(IK_Unknown)
53 {
54 }
55 AdjacencyType(eItemKind ik, eItemKind sik, eItemKind lik)
56 : m_item_kind(ik)
57 , m_sub_item_kind(sik)
58 , m_link_item_kind(lik)
59 {
60 }
61 eItemKind m_item_kind;
62 eItemKind m_sub_item_kind;
63 eItemKind m_link_item_kind;
64 bool operator<(const AdjacencyType& rhs) const
65 {
66 if (m_item_kind != rhs.m_item_kind)
67 return m_item_kind < rhs.m_item_kind;
68 if (m_sub_item_kind != rhs.m_sub_item_kind)
69 return m_sub_item_kind < rhs.m_sub_item_kind;
70 return m_link_item_kind < rhs.m_link_item_kind;
71 }
72 };
73
74 typedef void (BasicItemPairGroupComputeFunctor::*ComputeFunctor)(ItemPairGroupImpl* array);
75
76 class AdjacencyComputeFunctor
77 : public IFunctor
78 {
79 public:
80
81 AdjacencyComputeFunctor(BasicItemPairGroupComputeFunctor* ptr,
82 ItemPairGroupImpl* array, ComputeFunctor func_ptr)
83 : m_ptr(ptr)
84 , m_array(array)
85 , m_func_ptr(func_ptr)
86 {}
87
88 public:
89
90 void executeFunctor() override
91 {
92 (m_ptr->*m_func_ptr)(m_array);
93 }
94
95 private:
96
97 BasicItemPairGroupComputeFunctor* m_ptr;
98 ItemPairGroupImpl* m_array;
99 ComputeFunctor m_func_ptr;
100 };
101
102 public:
103
105
106 public:
107
108 virtual void computeAdjacency(ItemPairGroup adjacency_array, eItemKind link_kind,
109 Integer nb_layer);
110
111 private:
112
113 std::map<AdjacencyType, ComputeFunctor> m_compute_adjacency_functions;
114
115 private:
116
117 void _addComputeAdjacency(eItemKind ik, eItemKind sik, eItemKind lik, ComputeFunctor f);
118 void _computeCellCellNodeAdjacency(ItemPairGroupImpl* array);
119 void _computeCellCellFaceAdjacency(ItemPairGroupImpl* array);
120 void _computeNodeNodeCellAdjacency(ItemPairGroupImpl* array);
121 void _computeFaceCellNodeAdjacency(ItemPairGroupImpl* array);
122 void _computeFaceFaceNodeAdjacency(ItemPairGroupImpl* array);
123 void _computeCellFaceFaceAdjacency(ItemPairGroupImpl* array);
124 void _computeNodeNodeFaceAdjacency(ItemPairGroupImpl* array);
125 void _computeNodeNodeEdgeAdjacency(ItemPairGroupImpl* array);
126 void _computeFaceFaceEdgeAdjacency(ItemPairGroupImpl* array);
127 void _computeFaceFaceCellAdjacency(ItemPairGroupImpl* array);
128
129 using GetItemVectorViewFunctor = std::function<ItemConnectedListViewType(Item)>;
130 void _computeAdjacency(ItemPairGroupImpl* array, GetItemVectorViewFunctor get_item_enumerator,
131 GetItemVectorViewFunctor get_sub_item_enumerator);
132};
133
134/*---------------------------------------------------------------------------*/
135/*---------------------------------------------------------------------------*/
136
137} // End namespace Arcane
138
139/*---------------------------------------------------------------------------*/
140/*---------------------------------------------------------------------------*/
141
142#endif
Implementation of an array of lists of entities.
Table of entity lists.
Base class for a mesh element.
Definition Item.h:84
TraceAccessor(ITraceMng *m)
Constructs an accessor via the trace manager m.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
ItemConnectedListView< DynExtent > ItemConnectedListViewType
List of connected entities.
Definition ItemTypes.h:348
Int32 Integer
Type representing an integer.
eItemKind
Mesh entity type.
@ IK_Unknown
Unknown or uninitialized mesh entity.