Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ItemRefinement.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/* ItemRefinement.h (C) 2000-2022 */
9/* */
10/* méthodes de manipulation d'un Item du maillage par des techniques AMR. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_MESH_ITEMREFINEMENT_H
13#define ARCANE_MESH_ITEMREFINEMENT_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/VariableTypes.h"
18
19#include "arcane/mesh/MeshGlobal.h"
20#include "arcane/mesh/MeshRefinement.h"
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25#include <set>
26#include <vector>
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30
31namespace Arcane::mesh
32{
33
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
36
38: public TraceAccessor
39{
40 public:
44 ItemRefinement (IMesh *mesh);
45
46 private:
47
48 // le ctor de copie et l'opérateur d'affectation sont
49 // déclarés privés mais non implémentés. C'est la
50 // technique standard pour les empêcher d'être utilisés.
52 ItemRefinement& operator=(const ItemRefinement&);
53
54 public:
55
60
62 {
63 typedef std::set<Int64> FaceSet;
64 bool operator()(const FaceSet& s1, const FaceSet& s2) const
65 {
66 //return (s1 == s2);
67 if (s1.size() != s2.size())
68 return false;
69 else {
70 FaceSet::const_iterator its1 = s1.begin(), its2 = s2.begin();
71 FaceSet::const_iterator its1_end = s1.end();
72 for(; its1 != its1_end; ++its1,++its2)
73 if (*its1 != *its2)
74 return false;
75 }
76 return true;
77 }
78 };
79
81 template <int typeID>
83
85 template <int typeID>
87
88 void initHMin() ;
89 void updateChildHMin(ArrayView<ItemInternal*> cells) ;
90
91 private:
92
93 Real hmin(Cell) const;
95
96 template <int typeID>
97 void computeHChildren(Cell item, MeshRefinement& mesh_refinement);
98
99 template <int typeID>
100 void computeOrigNodesCoords(Cell item, const ItemRefinementPatternT<typeID>& rp, const Integer sid);
101
102 private:
103
104 IMesh* m_mesh;
105 VariableCellReal m_cell_hmin;
106 VariableNodeReal3& m_orig_nodes_coords;
107
108 Integer m_refine_factor;
109 Integer m_nb_cell_to_add;
110 Integer m_nb_face_to_add;
111 Integer m_nb_node_to_add;
112
113 // hmin*TOLERENCE= tolerence de recherche d'un nouveau point.
114 static const Real TOLERENCE;
115
116 // Reel3 m_p[c,nc] : coordinates of node nc of children c
117 std::vector<std::vector<Real3> > m_p;
118 // Int64 m_nodes_uid[c,nc] : uid of node nc of children c
119 std::vector<std::vector<Int64> > m_nodes_uid;
120 Real3UniqueArray m_coord;
121 Int64UniqueArray m_cells_infos;
122 Int64UniqueArray m_faces_infos;
123 Int64UniqueArray m_face;
124 Real3UniqueArray m_nodes_to_create_coords;
125 Int64UniqueArray m_nodes_unique_id;
126 Int32UniqueArray m_nodes_lid;
127 Int32UniqueArray m_faces_lid;
128 Int32UniqueArray m_cells_lid;
129};
130
131/*---------------------------------------------------------------------------*/
132/*---------------------------------------------------------------------------*/
133
134} // End namespace Arcane::mesh
135
136/*---------------------------------------------------------------------------*/
137/*---------------------------------------------------------------------------*/
138
139#endif
Maille d'un maillage.
Definition Item.h:1178
Structure interne d'une entité de maillage.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Classe gérant un vecteur de réel de dimension 3.
Definition Real3.h:132
static const Real TOLERENCE
AMR.
void refineOneCell(Cell item, MeshRefinement &mesh_refinement)
void coarsenOneCell(Cell item, const ItemRefinementPatternT< typeID > &rp)
Implémentation des algorithmes d'adaptation par raffinement de maillages non-structuré.
Vecteur 1D de données avec sémantique par valeur (style STL).