Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
GeomShapeOperation.h
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/* GeomShapeOperation.h (C) 2000-2014 */
9/* */
10/* Opération sur une forme géométrique. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_GEOMETRIC_GEOMETRICOPERATION_H
13#define ARCANE_GEOMETRIC_GEOMETRICOPERATION_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/TraceAccessor.h"
18
19#include "arcane/AbstractItemOperationByBasicType.h"
20
21#include "arcane/geometric/GeomShapeView.h"
22#include "arcane/geometric/GeomShapeMng.h"
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26
27ARCANE_BEGIN_NAMESPACE
28GEOMETRIC_BEGIN_NAMESPACE
29
30/*---------------------------------------------------------------------------*/
31/*---------------------------------------------------------------------------*/
32/*!
33 * \ingroup ArcaneGeometric
34 * \brief Classe template pour appliquer spécifique à une vue sur une forme géométrique.
35 *
36 * Cette classe permet de fournir un opérateur implémentant IItemOperationByBasicType
37 * à partir d'une instance de OperationFunction qui utilise des vues
38 * spécifiques sur des formes géométriques (les classes dérivées de GeomShapeView).
39 *
40 * La classe \a OperationFunction doit fournir une méthode apply() pour chaque type de forme
41 * géométrique (Hexaedron8ShapeView, Quad4ShapeView, ...)
42 *
43 * L'appel se fait ensuite avec un groupe de mailles (CellGroup) en appelant
44 * la méthode ItemGroup::applyOperation() avec cette instance en argument:
45 *
46 \code
47 * // Définition de l'opération
48 * class MyFunc
49 * {
50 * public:
51 * void apply(Hexaedron8ShapeView view)
52 * {
53 * // Applique l'opération pour un hexaèdre.
54 * }
55 * };
56 *
57 * GeomShapeOperation<MyFunc> op;
58 * CellGroup cells;
59 * // Applique \a op sur le groupe \a cells
60 * cells.applyOperation(&op);
61 \endcode
62 */
63template<typename OperationFunction>
66{
67 public:
68 /*!
69 * \brief Construit l'opérateur.
70 *
71 * Le premier argument est de type \a GeomShapeMng et sert à initialiser
72 * l'opérateur. Les arguments suivants éventuels sont directement passés au
73 * constructeur de OperationFunction.
74 *
75 * \a shape_mng doit avoir été initialisé avant de pouvoir appliquer les opérations.
76 */
77 template<typename ... BuildArgs>
78 GeomShapeOperation(GeomShapeMng& shape_mng,BuildArgs ... compute_function_args)
79 : m_shape_mng(shape_mng),
80 m_operation_function(compute_function_args ...)
81 {
82 }
83
84 template<typename ShapeType>
85 void apply(ItemVectorView cells)
86 {
87 ShapeType generic;
88 ENUMERATE_CELL(i_cell,cells){
89 Cell cell = *i_cell;
90 m_shape_mng.initShape(generic,cell);
91 m_operation_function.apply(generic);
92 }
93 }
94
95 void applyTriangle3(ItemVectorView cells)
96 {
97 apply<TriangleShapeView>(cells);
98 }
99 void applyQuad4(ItemVectorView cells)
100 {
101 apply<QuadShapeView>(cells);
102 }
103 void applyPentagon5(ItemVectorView cells)
104 {
105 apply<PentagonShapeView>(cells);
106 }
107 void applyHexagon6(ItemVectorView cells)
108 {
109 apply<HexagonShapeView>(cells);
110 }
111
112 void applyTetraedron4(ItemVectorView cells)
113 {
114 apply<TetraShapeView>(cells);
115 }
116 void applyPyramid5(ItemVectorView cells)
117 {
118 apply<PyramidShapeView>(cells);
119 }
120 void applyPentaedron6(ItemVectorView cells)
121 {
122 apply<PentaShapeView>(cells);
123 }
124 void applyHexaedron8(ItemVectorView cells)
125 {
126 apply<HexaShapeView>(cells);
127 }
128 void applyHeptaedron10(ItemVectorView cells)
129 {
130 apply<Wedge7ShapeView>(cells);
131 }
132 void applyOctaedron12(ItemVectorView cells)
133 {
134 apply<Wedge8ShapeView>(cells);
135 }
136
137 public:
138 //! Instance de l'opérateur
139 OperationFunction& operation() { return m_operation_function; }
140 //! Gestionnaire associé
141 GeomShapeMng& cellShapeMng() { return m_shape_mng; }
142 private:
143
144 GeomShapeMng m_shape_mng;
145 OperationFunction m_operation_function;
146};
147
148/*---------------------------------------------------------------------------*/
149/*---------------------------------------------------------------------------*/
150
151GEOMETRIC_END_NAMESPACE
152ARCANE_END_NAMESPACE
153
154/*---------------------------------------------------------------------------*/
155/*---------------------------------------------------------------------------*/
156
157#endif
#define ENUMERATE_CELL(name, group)
Enumérateur générique d'un groupe de mailles.
Opérateur abstrait sur des entités rangées par type.
Maille d'un maillage.
Definition Item.h:1178
Vue sur un vecteur d'entités.
Classe gérant les GeomShape des mailles d'un maillage.
Classe template pour appliquer spécifique à une vue sur une forme géométrique.
OperationFunction & operation()
Instance de l'opérateur.
GeomShapeMng & cellShapeMng()
Gestionnaire associé
GeomShapeOperation(GeomShapeMng &shape_mng, BuildArgs ... compute_function_args)
Construit l'opérateur.