Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
CartesianGrid.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/* CartesianGrid.h (C) 2000-2021 */
9/* */
10/* Grille cartésienne avec noeuds, faces et mailles. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CARTESIANMESH_CARTESIANGRID_H
13#define ARCANE_CARTESIANMESH_CARTESIANGRID_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/cartesianmesh/v2/CartesianNumbering.h"
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22namespace Arcane::CartesianMesh::V2
23{
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
32template <typename IdType>
34{
35 public:
37 using IdType3 = IdType[3];
38
41
44
45 public:
47 // param[in] dimension Dimension de la grille cartésienne (au plus 3)
50 {
51
52 for (Integer d(0); d < m_dimension; ++d) {
53 m_ncells_dir[d] = ncells_dir[d];
54 m_nnodes_dir[d] = m_ncells_dir[d] + 1;
55 }
56 m_cart_num_cell.initNumbering(m_ncells_dir, dimension);
57
58 for (Integer d(m_dimension); d < 3; ++d) {
59 m_ncells_dir[d] = 1;
60 m_nnodes_dir[d] = 1;
61 }
62 m_cart_num_node.initNumbering(m_nnodes_dir, dimension);
63
64 // Pour les faces, on va numéroter les faces selon X, puis selon Y et selon Z
65 // On distingue les faces par leurs orientations (dnorm)
66 IdType nfaces_norm_first = 0; // Premier numero de face selon la normale dnorm
67 for (Integer dnorm(0); dnorm < m_dimension; ++dnorm) {
68
69 // Les directions orthogonales à la normale
70 Integer d1 = (dnorm + 1) % 3;
71 Integer d2 = (dnorm + 2) % 3;
72
73 // Dans la direction de la normale, on a m_ncells_dir[dnorm]+1 faces
74 // et dans les directions m_ncells_dir[d] faces
75 m_nfaces_norm_dir[dnorm][dnorm] = m_ncells_dir[dnorm] + 1;
76 m_nfaces_norm_dir[dnorm][d1] = m_ncells_dir[d1];
77 m_nfaces_norm_dir[dnorm][d2] = m_ncells_dir[d2];
78
79 m_cart_num_face[dnorm].initNumbering(m_nfaces_norm_dir[dnorm], dimension, nfaces_norm_first);
80 nfaces_norm_first += m_cart_num_face[dnorm].nbItem();
81 }
82
83 for (Integer dnorm(m_dimension); dnorm < 3; ++dnorm) {
84 m_nfaces_norm_dir[dnorm][0] = 1;
85 m_nfaces_norm_dir[dnorm][1] = 1;
86 m_nfaces_norm_dir[dnorm][2] = 1;
87 }
88 }
89
92 {
93 return m_cart_num_cell;
94 }
95
98 {
99 return m_cart_num_node;
100 }
101
104 {
105 ARCANE_ASSERT(dir < m_dimension, ("La direction doit être strictement inférieure à la dimension"));
106 return m_cart_num_face[dir];
107 }
108
111 {
112 return m_cart_num_face;
113 }
114
117 {
118 return &m_cart_num_cell;
119 }
120
123 {
124 return &m_cart_num_node;
125 }
126
129 {
130 ARCANE_ASSERT(dir < m_dimension, ("La direction doit être strictement inférieure à la dimension"));
131 return &(m_cart_num_face[dir]);
132 }
133
136 {
137 return &m_cart_num_face;
138 }
139
141 Integer dimension() const
142 {
143 return m_dimension;
144 }
145
146 protected:
147 IdType3 m_ncells_dir = { 1, 1, 1 }; // Nb de mailles par direction
148 IdType3 m_nnodes_dir = { 1, 1, 1 }; // Nb de noeuds par direction
149 IdType3 m_nfaces_norm_dir[3];
150
151 Integer m_dimension = 0;
152
153 CartesianNumberingType m_cart_num_cell;
154 CartesianNumberingType m_cart_num_node;
155 CartesianNumberingType3 m_cart_num_face;
156};
157
158/*---------------------------------------------------------------------------*/
159/*---------------------------------------------------------------------------*/
160
161} // namespace Arcane::CartesianMesh::V2
162
163/*---------------------------------------------------------------------------*/
164/*---------------------------------------------------------------------------*/
165
166#endif
Encapsulation d'une grille cartesienne avec les mailles, noeuds, faces d'une dimension au plus 3.
CartesianNumberingType * cartNumCellPtr()
Pointeur sur la numérotation cartésienne aux mailles.
IdType[3] IdType3
Type pour les triplets cartésiens (i,j,k) et les triplets des dimensions (ni,nj,nk)
CartesianNumberingType * cartNumFacePtr(Integer dir)
Pointeur sur la numérotation cartésienne aux faces dans la direction dir.
Integer m_dimension
m_nfaces_norm_dir[dnorm] = dimension de la grille de faces normales à dnorm
CartesianNumberingType3 * cartNumFace3Ptr()
Pointeur sur les 3 numérotations cartésiennes aux faces.
const CartesianNumberingType & cartNumCell() const
Référence en lecture sur la numérotation cartésienne aux mailles.
CartesianGrid(const IdType3 &ncells_dir, Integer dimension)
param[in] ncells_dir Nombre de mailles dans chaque direction
const CartesianNumberingType & cartNumNode() const
Référence en lecture sur la numérotation cartésienne aux noeuds.
const CartesianNumberingType & cartNumFace(Integer dir) const
Référence en lecture sur la numérotation cartésienne aux faces dans la direction dir.
Integer dimension() const
Dimension du maillage cartésien.
const CartesianNumberingType3 & cartNumFace3() const
Référence en lecture sur les 3 numérotations cartésiennes aux faces.
CartesianNumberingType * cartNumNodePtr()
Pointeur sur la numérotation cartésienne aux noeuds.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120