TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Pave.h
1/****************************************************************************
2* Copyright (c) 2025, CEA
3* All rights reserved.
4*
5* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
6* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8* 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
9*
10* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
11* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
12* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
13*
14*****************************************************************************/
15
16#ifndef Pave_included
17#define Pave_included
18#include <Domaine.h>
19
20
21/*! @brief Classe Pave Un domaine particulierement facile a mailler!
22 *
23 * La structure du jeu de donnee pour specifier un Pave est:
24 * Pave nom_pave
25 * {
26 * Origine OX OY (OZ)
27 * Longueurs LX LY (LZ)
28 * Nombre_de_noeuds NX NY (NZ)
29 * Facteurs Fx Fy (Fz)
30 * (Symx)
31 * (Symy)
32 * (Symz)
33 * }
34 * {
35 * (Bord) nom X = X0 Y0 <= Y <= Y1 Z0 <= Z <= Z1
36 * ...
37 * (Raccord) local homogene nom X = X0 Y0 <= Y <= Y1 Z0 <= Z <= Z1
38 * ...
39 * (Internes) nom X = X0 Y0 <= Y <= Y1 Z0 <= Z <= Z1
40 * ...
41 * (Joint) nom X = X0 Y0 <= Y <= Y1 Z0 <= Z <= Z1 PE_voisin
42 * ...
43 * }
44 *
45 * @sa Domaine Mailler, Actuellemnt c'est le seul type d'objet reconnu par Trio-U pour mailler, un domaine
46 */
47template <typename _SIZE_>
48class Pave_32_64 : public Domaine_32_64<_SIZE_>
49{
50 Declare_instanciable_32_64(Pave_32_64);
51public :
52 using int_t = _SIZE_;
53 using IntVect_t = IntVect_T<_SIZE_>;
54 using IntTab_t = IntTab_T<_SIZE_>;
55 using DoubleVect_t = DoubleVect_T<_SIZE_>;
56 using DoubleTab_t = DoubleTab_T<_SIZE_>;
59
60protected:
61 inline int_t numero_maille(int i);
62 inline int_t numero_maille(int i, int j);
63 inline int_t numero_maille(int i, int j, int k);
64
65 inline int_t numero_sommet(int i);
66 inline int_t numero_sommet(int i, int j);
67 inline int_t numero_sommet(int i, int j, int k);
68
69 inline int_t& maille_sommet(int i,int l);
70 inline int_t& maille_sommet(int i, int j, int l);
71 inline int_t& maille_sommet(int i, int j, int k, int l);
72
73 inline double& coord_noeud(int i);
74 inline double& coord_noeud(int i, int j, int l);
75 inline double& coord_noeud(int i, int j, int k, int l);
76
77 void maille2D();
78 void maille3D();
79
80 void typer_();
81
85
86
88 IntVect symetrique_; // which directions (x,y,z) are symetrical?
89 IntVect nb_noeuds_;
90
91 int Nx = -1, Ny = -1, Nz = -1, Mx = -1, My = -1, Mz = -1;
92 double a_tanh= 10.; // a pour le maillage en tanh dans la diry!!
93 int tanh_dilatation=0; // can be -1,0 or 1
94 double xa_tanh= 10.; // xa pour le maillage en tanh dans la dirx!!
95 int xtanh_dilatation=0; // can be -1,0 or 1
96 double za_tanh= 10.; // za pour le maillage en tanh dans la dirz!!
97 int ztanh_dilatation=0; // can be -1,0 or 1
98 bool rep_VEF=false;
99 bool tour_complet = false;
100};
101
102/*! @brief Renvoie le numero de la i-ieme maille (suivant X)
103 *
104 * @param (int i) le rang de la maille suivant X dont on veut le numero
105 * @return (int) le numero de la maille cherchee
106 */
107template <typename _SIZE_>
109{
110 assert(this->dimension == 1);
111 assert(i < Nx);
112 return i;
113}
114
115/*! @brief Renvoie le numero de la (i,j)-ieme maille (suivant (X,Y)).
116 *
117 * @param (int i) le rang de la maille suivant X
118 * @param (int j) le rang de la maille suivant Y
119 * @return (int) le numero de la maille cherchee
120 */
121template <typename _SIZE_>
123{
124 assert(this->dimension == 2);
125 assert(i < Nx);
126 assert(j < Ny);
127 return j*Nx+i;
128}
129
130/*! @brief Renvoie le numero de la (i,j,k)-ieme maille (suivant (X,Y,Z)).
131 *
132 * @param (int i) le rang de la maille suivant X
133 * @param (int j) le rang de la maille suivant Y
134 * @param (int k) le rang de la maille suivant Z
135 * @return (int) le numero de la maille cherchee
136 */
137template <typename _SIZE_>
139{
140 assert(this->dimension == 3);
141 assert(i < Nx);
142 assert(j < Ny);
143 assert(k < Nz);
144 return k*Ny*Nx+j*Nx+i;
145}
146
147/*! @brief Renvoie le numero du i-ieme sommet (suivant X)
148 *
149 * @param (int i) le rang du sommet suivant X dont on veut le numero
150 * @return (int) le numero du sommet cherche
151 */
152template <typename _SIZE_>
154{
155 assert(this->dimension == 1 && i < Mx);
156 return i;
157}
158
159/*! @brief Renvoie le numero du (i,j)-ieme sommet (suivant (X,Y)).
160 *
161 * @param (int i) le rang du sommet suivant X
162 * @param (int j) le rang du sommet suivant Y
163 * @return (int) le numero du sommet cherche
164 */
165template <typename _SIZE_>
167{
168 assert(this->dimension == 2);
169 assert(i < Mx);
170 if((tour_complet) && (j==My))
171 j=0;
172 return j*Mx+i;
173}
174
175/*! @brief Renvoie le numero du (i,j,k)-ieme sommet (suivant (X,Y,Z)).
176 *
177 * @param (int i) le rang du sommet suivant X
178 * @param (int j) le rang du sommet suivant Y
179 * @param (int k) le rang du sommet suivant Z
180 * @return (int) le numero du sommet cherche
181 */
182template <typename _SIZE_>
184{
185 assert(this->dimension == 3);
186 assert(i < Mx);
187 if((tour_complet) && (j==My))
188 j=0;
189 assert(j < My);
190 assert(k < Mz);
191 return k*My*Mx+j*Mx+i;
192}
193
194/*! @brief Renvoie une reference sur le numero du l-ieme sommet de la i-ieme maille (suivant X) du pave.
195 *
196 * @param (int i) le rang de la maille suivant X
197 * @param (int l) le rang du sommet cherche
198 * @return (int&) reference sur le numero du sommet cherche
199 */
200template <typename _SIZE_>
202{
203 assert(this->dimension == 1);
204 return this->mes_elems_(numero_maille(i),l);
205}
206
207/*! @brief Renvoie une reference sur le numero du l-ieme sommet de la (i,j)-ieme maille (suivant (X,Y)) du pave.
208 *
209 * @param (int i) le rang de la maille suivant X
210 * @param (int j) le rang de la maille suivant Y
211 * @param (int l) le rang du sommet cherche
212 * @return (int&) reference sur le numero du sommet cherche
213 */
214template <typename _SIZE_>
216{
217 assert(this->dimension == 2);
218 return this->mes_elems_(numero_maille(i, j),l);
219}
220
221/*! @brief Renvoie une reference sur le numero du l-ieme sommet de la (i,j,k)-ieme maille (suivant (X,Y,Z)) du pave.
222 *
223 * @param (int i) le rang de la maille suivant X
224 * @param (int j) le rang de la maille suivant Y
225 * @param (int j) le rang de la maille suivant Z
226 * @param (int l) le rang du sommet cherche
227 * @return (int&) reference sur le numero du sommet cherche
228 */
229template <typename _SIZE_>
230inline typename Pave_32_64<_SIZE_>::int_t& Pave_32_64<_SIZE_>::maille_sommet(int i, int j, int k, int l)
231{
232 assert(this->dimension == 3);
233 return this->mes_elems_(numero_maille(i, j, k), l);
234}
235
236/*! @brief Renvoie une reference sur les coordonnees du i-ieme noeud.
237 *
238 * @param (int i) le rang du noeud suivant X
239 * @return (double&) reference sur les coordonnees du noeud cherche
240 */
241template <typename _SIZE_>
243{
244 assert(this->dimension == 1);
245 return this->sommets_(numero_sommet(i));
246}
247
248/*! @brief Renvoie une reference sur les coordonnees du (i,j)-ieme noeud.
249 *
250 * @param (int i) le rang du noeud suivant X
251 * @param (int j) le rang du noeud suivant Y
252 * @return (double&) reference sur les coordonnees du noeud cherche
253 */
254template <typename _SIZE_>
255inline double& Pave_32_64<_SIZE_>::coord_noeud(int i, int j, int l)
256{
257 assert(this->dimension == 2);
258 return this->sommets_(numero_sommet(i, j),l);
259}
260
261/*! @brief Renvoie une reference sur les coordonnees du (i,j,k)-ieme noeud.
262 *
263 * @param (int i) le rang du noeud suivant X
264 * @param (int j) le rang du noeud suivant Y
265 * @param (int k) le rang du noeud suivant Z
266 * @return (double&) reference sur les coordonnees du noeud cherche
267 */
268template <typename _SIZE_>
269inline double& Pave_32_64<_SIZE_>::coord_noeud(int i, int j, int k, int l)
270{
271 assert(this->dimension == 3);
272 return this->sommets_(numero_sommet(i, j, k),l);
273}
274
275using Pave = Pave_32_64<int>;
276using Pave_64 = Pave_32_64<trustIdType>;
277
278#endif
DoubleTab_t sommets_
Definition Domaine.h:386
IntTab_t mes_elems_
Definition Domaine.h:391
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
Classe Frontiere.
Definition Frontiere.h:32
static int dimension
Definition Objet_U.h:99
Classe Pave Un domaine particulierement facile a mailler!
Definition Pave.h:49
int_t numero_sommet(int i, int j, int k)
Renvoie le numero du (i,j,k)-ieme sommet (suivant (X,Y,Z)).
Definition Pave.h:183
double a_tanh
Definition Pave.h:92
int_t & maille_sommet(int i, int l)
Renvoie une reference sur le numero du l-ieme sommet de la i-ieme maille (suivant X) du pave.
Definition Pave.h:201
int ztanh_dilatation
Definition Pave.h:97
DoubleTab_T< _SIZE_ > DoubleTab_t
Definition Pave.h:56
IntVect_T< _SIZE_ > IntVect_t
Definition Pave.h:53
int tanh_dilatation
Definition Pave.h:93
double za_tanh
Definition Pave.h:96
_SIZE_ int_t
Definition Pave.h:52
int_t numero_maille(int i, int j, int k)
Renvoie le numero de la (i,j,k)-ieme maille (suivant (X,Y,Z)).
Definition Pave.h:138
int_t numero_sommet(int i)
Renvoie le numero du i-ieme sommet (suivant X).
Definition Pave.h:153
int_t numero_sommet(int i, int j)
Renvoie le numero du (i,j)-ieme sommet (suivant (X,Y)).
Definition Pave.h:166
DoubleVect facteurs_
Definition Pave.h:87
bool tour_complet
Definition Pave.h:99
int_t & maille_sommet(int i, int j, int l)
Renvoie une reference sur le numero du l-ieme sommet de la (i,j)-ieme maille (suivant (X,...
Definition Pave.h:215
void maille3D()
Effectue un maillage 3D, du pave avec les valeurs des parametres lus par ReadOn.
Definition Pave.cpp:844
DoubleVect_T< _SIZE_ > DoubleVect_t
Definition Pave.h:55
double xa_tanh
Definition Pave.h:94
double & coord_noeud(int i, int j, int k, int l)
Renvoie une reference sur les coordonnees du (i,j,k)-ieme noeud.
Definition Pave.h:269
void lire_noeuds(Entree &is)
Lit le nombre de noeuds dans le jeu de donnee a partir d'un flot d'entree et construit les noeuds.
Definition Pave.cpp:1342
DoubleVect longueurs_
Definition Pave.h:87
void maille2D()
Effectue un maillage 1D, du pave avec les valeurs des parametres lus par ReadOn.
Definition Pave.cpp:580
int_t numero_maille(int i)
Renvoie le numero de la i-ieme maille (suivant X).
Definition Pave.h:108
Frontiere_32_64< _SIZE_ > Frontiere_t
Definition Pave.h:58
double & coord_noeud(int i)
Renvoie une reference sur les coordonnees du i-ieme noeud.
Definition Pave.h:242
int xtanh_dilatation
Definition Pave.h:95
void typer_()
Type le pave suivant la dimension d'espace et suivant le repere de coordonnees demande (cylindrique.
Definition Pave.cpp:1278
double & coord_noeud(int i, int j, int l)
Renvoie une reference sur les coordonnees du (i,j)-ieme noeud.
Definition Pave.h:255
IntTab_T< _SIZE_ > IntTab_t
Definition Pave.h:54
Domaine_32_64< _SIZE_ > Domaine_t
Definition Pave.h:57
int_t numero_maille(int i, int j)
Renvoie le numero de la (i,j)-ieme maille (suivant (X,Y)).
Definition Pave.h:122
DoubleVect origine_
Definition Pave.h:87
void lire_front(Entree &, Frontiere_t &)
Lit les specifications d'une frontiere du jeu de donnee a partir d'un flot d'entree et la construit.
Definition Pave.cpp:1456
IntVect nb_noeuds_
Definition Pave.h:89
int_t & maille_sommet(int i, int j, int k, int l)
Renvoie une reference sur le numero du l-ieme sommet de la (i,j,k)-ieme maille (suivant (X,...
Definition Pave.h:230
IntVect symetrique_
Definition Pave.h:88
void lire_longueurs(Entree &is)
Lit les longueurs LX LY [LZ] du jeu de donnee a partir d'un flot d'entree.
Definition Pave.cpp:1315
DoubleVect pas_
Definition Pave.h:87