TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Corrige_flux_FT_temperature_conv.cpp
1/****************************************************************************
2* Copyright (c) 2023, 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#include <Corrige_flux_FT_temperature_conv.h>
17#include <DebogIJK.h>
18#include <Probleme_FTD_IJK.h>
19#include <IJK_Navier_Stokes_tools.h>
20#include <Intersection_Interface_ijk.h>
21#include <Param.h>
22
23
24Implemente_instanciable( Corrige_flux_FT_temperature_conv, "Corrige_flux_FT_temperature_conv", Corrige_flux_FT_base ) ;
25
27{
29 return os;
30}
31
33{
35 return is;
36}
37
39 const Domaine_IJK& splitting, const IJK_Field_double& field,
40 const IJK_Interfaces& interfaces, const Probleme_FTD_IJK_base& ijk_ft,
41 Intersection_Interface_ijk_face& intersection_ijk_face,
42 Intersection_Interface_ijk_cell& intersection_ijk_cell)
43{
44 // FIXME: Will it initialize the variables properly
45 Corrige_flux_FT_base::initialize(splitting, field, interfaces, ijk_ft, intersection_ijk_face, intersection_ijk_cell);
46// intersection_ijk_face_->initialize(splitting, interfaces);
47// intersection_ijk_cell_->initialize(splitting, interfaces);
52 rho_cp_.initialize(rhocp_l_, rhocp_v_);
53 lda_.initialize(lda_l_, lda_v_);
54}
55
57{
58
59 ArrOfDouble temp_vap, temp_liqu;
60
61 // On commence par calculer les temperatures aux faces mouillées
62 intersection_ijk_face_->maj_interpolation_coo_on_interfaces();
63
64 temp_vap.resize(intersection_ijk_face_->n());
65 temp_liqu.resize(intersection_ijk_face_->n());
66
67 // On lance l'interpolation sur l'interface,
68 calcul_temp_flux_interf_pour_bary_face(temp_vap, temp_liqu);
69
70 // puis l'interpolation retour au bary de la face mouillée.
71 interp_back_to_bary_faces(temp_vap, temp_liqu);
72
73 // Puis des températures ghost pour les flux à proximité de l'interface
74 intersection_ijk_cell_->update_interpolations_cell_centres_on_interface();
75
76 temp_vap.resize(intersection_ijk_cell_->n());
77 temp_liqu.resize(intersection_ijk_cell_->n());
78
79 // On lance l'interpolation sur l'interface,
80 calcul_temp_flux_interf_pour_bary_cell(temp_vap, temp_liqu);
81
82 // puis l'interpolation retour au bary de la face mouillée.
83 update_temperature_ghost(temp_vap, temp_liqu);
84}
85
87 const double Tim1,
88 const double Ti,
89 const double Tip1,
90 const double Tip2,
91 const double velocity) const
92{
93
94 const double dminfloat = std::pow(10.,-15.);
95 const double dx_squared_over_8 = 0.1; //TODO: a changer evidemment
96 const double curv0 = Tip1 - 2* Ti + Tim1;
97 const double curv1 = Tip2 - 2* Tip1 + Ti;
98 double delta0 = std::max(Tip1, Tim1) - std::min(Tip1, Tim1);
99 double delta1 = std::max(Tip2, Ti) - std::min(Tip2, Ti);
100 double fram0, fram1;
101 if (std::abs(delta0) < dminfloat)
102 {
103 fram0 = 0.;
104 }
105 else
106 {
107 fram0 = std::pow((Ti - std::min(Tip1, Tim1)) / delta0 * 2. - 1., 3.);
108 fram0 = std::min(fram0, 1.);
109 }
110 if (std::abs(delta1) < dminfloat)
111 {
112 fram1 = 0.;
113 }
114 else
115 {
116 fram1 = std::pow((Tip1 - std::min(Tip2, Ti)) / delta1 * 2. - 1., 3.);
117 fram1 = std::min(fram1, 1.);
118 }
119
120 const double fram = std::max(fram0, fram1);
121 const double curv = velocity < 0. ? curv1 : curv0;
122 const double T_amont = velocity < 0. ? Ti : Tip1;
123 double T_interp = (Ti + Tip1) * 0.5 - dx_squared_over_8 * curv;
124 T_interp = (1. - fram) * T_interp + fram * T_amont;
125 return T_interp;
126}
127
128
130 const double frac_liquide,
131 const double s_face,
132 IJK_Field_local_double * const flux
133) const
134{
135 double T_interp;
136
137 const auto elem_i = parcours_.elem(0);
138 const double velocity = ref_ijk_ft_->eq_ns().get_velocity(
139 )[parcours_.face()](elem_i[0], elem_i[1], elem_i[2]);
140 double decal = -0.5;
141 if (velocity > 0.)
142 {
143 decal = 0.5;
144 }
145 const bool le_flux_est_juste_aval_interface = is_flux_upwind_from_interface(decal);
146 if (le_flux_est_juste_aval_interface)
147 {
148 T_interp = extrapolation_amont_1_depuis_l_interface(frac_liquide, decal);
149 }
150 else
151 {
152 T_interp = interpolation_quick_avec_1_ghost(frac_liquide, decal);
153 }
154 (*flux)(elem_i[0], elem_i[1], 0) = T_interp * rho_cp_(frac_liquide) * s_face * velocity;
155}
156
158{
159 //TODO
160 return false;
161}
162
164 const double frac_liquide,
165 const double decal) const
166{
167 const FixedVector<int, 3> elem = parcours_.elem(1 + (int)decal);
168 const int& i = elem[0];
169 const int& j = elem[1];
170 const int& k = elem[2];
171 const auto i_diph = (*intersection_ijk_cell_)(i,j,k);
172 // TODO: attention c'est completement faux, la température à l'interface dans le
173 // tableau correspond aux températures d'interface aux projection des barycentre
174 // des faces mouillées.
175 const double Ti = temp_interface_cell_(i_diph);
176 const double qi = q_interface_cell_(i_diph);
177 // const double d = intersection_ijk_cell_.dist_interf()(i_diph);
178 const double d = 0.5 * domaine_->get_constant_delta(parcours_.face());
179 const Vecteur3 norm_interf =
180 {
181 (intersection_ijk_cell_->norm_interf())(i_diph, 0),
182 (intersection_ijk_cell_->norm_interf())(i_diph, 1),
183 (intersection_ijk_cell_->norm_interf())(i_diph, 2)
184 } ;
185 const Vecteur3 norm_face {(double)parcours_.get_normale_vec()[0], (double)parcours_.get_normale_vec()[1], (double)parcours_.get_normale_vec()[2]};
186 const double lda = frac_liquide * lda_l_ + (1.-frac_liquide) * lda_v_;
187 return Ti + qi/lda * d * Vecteur3::produit_scalaire(norm_face, norm_interf);
188}
189
190
192 const double frac_liquide,
193 const double decal) const
194{
195
196 const bool is_temp_liquide = std::abs(frac_liquide - 1.) < EPS_;
197
198 const auto elem_im1 = parcours_.elem(-1);
199 const double temperature_im1 = get_ghost_temp_if_cell_is_diph(elem_im1, is_temp_liquide);
200
201 const auto elem_i = parcours_.elem(0);
202 const double temperature_i = get_ghost_temp_if_cell_is_diph(elem_i, is_temp_liquide);
203
204 const auto elem_ip1 = parcours_.elem(1);
205 const double temperature_ip1 = get_ghost_temp_if_cell_is_diph(elem_ip1, is_temp_liquide);
206
207 const auto elem_ip2 = parcours_.elem(2);
208 const double temperature_ip2 = get_ghost_temp_if_cell_is_diph(elem_ip2, is_temp_liquide);
209
210 const double T_interp = quick(
211 temperature_im1,
212 temperature_i,
213 temperature_ip1,
214 temperature_ip2,
215 decal);
216 return T_interp;
217}
218
220 const double frac_liquide,
221 IJK_Field_local_double * const flux
222) const
223{
224 const auto elem = parcours_.elem(0);
225 const double rho_cp_face = rho_cp_(frac_liquide);
226 // Cerr << "Rho cp de la face : " << rho_cp_face << finl;
227 (*flux)(elem[0], elem[1], 0) *= rho_cp_face;
228 // flux_ij *= rho_cp_face;
229}
230
232 const FixedVector<int, 3>& elem,
233 const bool from_liqu_phase) const
234{
235 const int& i = elem[0];
236 const int& j = elem[1];
237 const int& k = elem[2];
238 const IJK_Field_double& indic = ref_ijk_ft_->get_interface().I();
239 const bool cell_is_diph = (indic(i,j,k) * (1. - indic(i,j,k)) > DMINFLOAT);
240 if (cell_is_diph)
241 {
242 const int i_diph = (*intersection_ijk_cell_)(i,j,k);
243 return temperature_ghost_(i_diph,from_liqu_phase);
244 }
245 else
246 {
247 return (*field_)(i,j,k);
248 }
249}
250
252 IJK_Field_local_double * const flux,
253 const int k_layer,
254 const int dir)
255{
256 // on applique pour de vrai la correction au flux
257 assert((dir >= 0) && (dir < 3));
258 parcours_.set_dir(dir);
259
260 const auto& surfaces = interfaces_->get_surface_vapeur_par_face();
261 const double s_face = parcours_.calculer_surface_face(domaine_.valeur());
262
263 const int ni = field_->ni();
264 const int nj = field_->nj();
265 for (int i = 0; i < ni; i++)
266 for (int j = 0; j < nj; j++)
267 {
268 parcours_.set_elem(i, j, k_layer);
269
270 const double s_vap = surfaces[dir](i, j, k_layer);
271 const double frac_vapeur = s_vap / s_face;
272 const double frac_liquide = 1.- frac_vapeur;
273
274 //const bool face_monophasique = frac_liquide * frac_vapeur < EPS_;
275 //const bool stencil_liquide = test_if_stencil_inclut_bout_interface_liquide();
276 //const bool stencil_vapeur = test_if_stencil_inclut_bout_interface_vapeur();
277 //const bool stencil_inclut_interface = stencil_liquide & stencil_vapeur;
278
280 // if ((face_monophasique) && (not stencil_inclut_interface))
281 // {
282 // multiplie_par_rho_cp_de_la_face_monophasique(frac_liquide, flux);
283 // }
284 // else if (face_monophasique) {
285 // remplace_flux_par_quick_ghost_amont_1(frac_liquide, s_face, flux);
286 // } else {
287 // remplace_flux_par_somme_rhocpf_Tf_v_Sf(frac_liquide, s_face, flux);
288 // }
289 // // remplace_flux_par_somme_rhocpf_Tf_v_Sf(frac_liquide, s_face, flux);
290 }
291}
292
294 const double frac_liquide,
295 const double s_face,
296 IJK_Field_local_double * const flux) const
297{
298 // La je suis bien en train de regarder une face mouillee.
299 // On remet a 0 le flux, puis on ajoute les valeurs sur chaque partie
300 // trouvée.
301 // Cerr << "Cet elem est diphasique" << endl;
302 const int& i = parcours_.i();
303 const int& j = parcours_.j();
304 const int& k_layer = parcours_.k();
305 const int& dir = parcours_.face();
306 const double velocity = ref_ijk_ft_->eq_ns().get_velocity()[dir](i, j, k_layer);
307 const int i_diph = (*intersection_ijk_face_)(i, j, k_layer, dir);
308
309 // Maintenant j'ajoute les valeurs pour chaque phase (liquide et vapeur)
310 (*flux)(i, j, 0) = (rhocp_l_ * temperature_barys_(i_diph, 0) * frac_liquide +
311 rhocp_v_ * temperature_barys_(i_diph, 1) * (1. - frac_liquide)) * velocity * s_face ;
312}
313
314void Corrige_flux_FT_temperature_conv::calcul_temp_flux_interf_pour_bary_face(ArrOfDouble& temp_vap, ArrOfDouble& temp_liqu)
315{
316 const double ldal = lda_l_;
317 const double ldav = lda_v_;
318 const double dist = 1.52 * std::pow((
319 std::pow(domaine_->get_constant_delta(0), 2.) +
320 std::pow(domaine_->get_constant_delta(1), 2.) +
321 std::pow(domaine_->get_constant_delta(2), 2.)), 0.5);
322
323 DoubleTab coo_liqu1;
324 DoubleTab coo_vap1;
325
327 *field_, ldal, ldav, dist, intersection_ijk_face_->pos_interf(),
329 temp_liqu, temp_vap, coo_liqu1, coo_vap1);
330}
331
333 const IJK_Field_double& temperature, const double ldal, const double ldav,
334 const double dist, const DoubleTab& positions, const DoubleTab& normal_on_interf,
335 ArrOfDouble& temperature_interp,
336 ArrOfDouble& flux_normal_interp,
337 ArrOfDouble& temp_liqu,
338 ArrOfDouble& temp_vap,
339 DoubleTab& coo_liqu,
340 DoubleTab& coo_vap) const
341{
343 positions, normal_on_interf, dist, coo_liqu);
345 positions, normal_on_interf, -dist, coo_vap);
346 // TODO mettre une valeur acceptable dans le cas ou la temperature n est pas
347 // connue
348 temp_liqu.resize_array(coo_liqu.dimension(0));
349 ijk_interpolate_skip_unknown_points(temperature, coo_liqu, temp_liqu, 1.e31);
350 temp_vap.resize(coo_vap.dimension(0));
351 ijk_interpolate_skip_unknown_points(temperature, coo_vap, temp_vap, 1.e31);
352 const int n_point_interp = positions.dimension(0);
353 temperature_interp.resize_array(n_point_interp);
354 flux_normal_interp.resize_array(n_point_interp);
355 if ((ldal + ldav) == 0.)
356 {
357 Cerr << "Corrige flux used with no conductivity. Ti and Qi set to 0. " << finl;
358 temperature_interp = 0.;
359 flux_normal_interp = 0.;
360 return;
361 }
362 for (int i_point_interp = 0; i_point_interp < n_point_interp; i_point_interp++)
363 {
364 const double Ti =
365 (temp_liqu(i_point_interp) * ldal + temp_vap(i_point_interp) * ldav) / (ldal + ldav);
366 // Cerr << "Position liqu : " << coo_liqu(i_point_interp, 0) << ", " <<
367 // coo_liqu(i_point_interp, 1) << ", " << coo_liqu(i_point_interp, 2) << finl; Cerr <<
368 // "Position vap : " << coo_vap(i_point_interp, 0) << ", " << coo_vap(i_point_interp, 1) <<
369 // ", " << coo_vap(i_point_interp, 2) << finl; Cerr << "Position interface : " <<
370 // positions(i_point_interp, 0) << ", " << positions(i_point_interp, 1) << ", " <<
371 // positions(i_point_interp, 2) << finl; Cerr << "Tl : " << temp_liqu(i_point_interp) << ",
372 // Tv : " << temp_vap(i_point_interp) << ", Ti : " << Ti << finl;
373 if (temp_liqu(i_point_interp) > 1.e9)
374 {
375 Cerr << "Problem temperature interface" << finl;
376 temp_liqu(i_point_interp) = 1.e9;
377 }
378 temperature_interp(i_point_interp) = Ti;
379 flux_normal_interp(i_point_interp) = ldav * (Ti - temp_vap(i_point_interp)) / dist;
380 }
381}
382
383void Corrige_flux_FT_temperature_conv::interp_back_to_bary_faces(const ArrOfDouble& temp_vap, const ArrOfDouble& temp_liqu)
384{
385 const int n_diph = intersection_ijk_face_->n();
386 const int n_point_interp = temp_vap.size_array();
387 Cerr << "N diph " << n_diph << "n point inter = 2*n_diph " << n_point_interp << finl;
388 assert(2*n_diph == n_point_interp);
389 const double d1 = 1.52 * std::pow((
390 std::pow(domaine_->get_constant_delta(0), 2.) +
391 std::pow(domaine_->get_constant_delta(1), 2.) +
392 std::pow(domaine_->get_constant_delta(2), 2.)), 0.5);
393 temperature_barys_.resize(n_diph, 2);
394 // On réalise une interpolation proportionelle a la distance entre la
395 // tempertaure d'interface et la température de la mm phase qui est au
396 // point un peu éloignée utilisé précédemment pour calculer la temperature
397 // d'interface.
398 for (int i_diph = 0; i_diph < n_diph; i_diph++)
399 {
400 const double di_vap = std::abs(intersection_ijk_face_->dist_interf()(2*i_diph));
401 const double di_liq = di_vap; // TODO : Check that. GB include, no idea!
402 assert(d1 - di_vap > 0.);
403 assert(d1 - std::abs(intersection_ijk_face_->dist_interf()(2*i_diph+1)) > 0.);
404 // La distance entre le point a l'interface et le point d'interpolation de
405 // la temperature monophasique vaut bien d1 - di. Aucun cas n'est censé
406 // donner une valeur négative.
407 const double d1_vap_inv = 1. / (d1 - di_vap + EPS_);
408 const double di_vap_inv = 1. / (di_vap + EPS_);
409 const double d1_liq_inv = 1. / (d1 - di_liq + EPS_);
410 const double di_liq_inv = 1. / (di_liq+ EPS_);
411 temperature_barys_(i_diph, 1) =
412 (temp_interface_face_(2*i_diph) * di_vap_inv + temp_vap(2*i_diph) * d1_vap_inv) /
413 (di_vap_inv + d1_vap_inv);
414 // liquide
415 temperature_barys_(i_diph, 0) =
416 (temp_interface_face_(2*i_diph+1) * di_liq_inv + temp_liqu(2*i_diph+1) * d1_liq_inv) /
417 (di_liq_inv + d1_liq_inv);
418 }
419}
420
421void Corrige_flux_FT_temperature_conv::calcul_temp_flux_interf_pour_bary_cell(ArrOfDouble& temp_vap, ArrOfDouble& temp_liqu)
422{
423 const double ldal = lda_l_;
424 const double ldav = lda_v_;
425 const double dist = 1.52 * std::pow((
426 std::pow(domaine_->get_constant_delta(0), 2.) +
427 std::pow(domaine_->get_constant_delta(1), 2.) +
428 std::pow(domaine_->get_constant_delta(2), 2.)), 0.5);
429 DoubleTab coord_vap, coord_liqu;
431 *field_, ldal, ldav, dist, intersection_ijk_cell_->pos_interf(),
433 temp_vap, coord_liqu, coord_vap);
434}
435
436void Corrige_flux_FT_temperature_conv::update_temperature_ghost(const ArrOfDouble& temp_vap, const ArrOfDouble& temp_liqu)
437{
438 // intersection_ijk_cell_.maj_interpolation_coo_on_interfaces(
439 // ref_ijk_ft_->itfce().I());
440 const double ldal = lda_l_;
441 const double ldav = lda_v_;
442 const int n_diph = temp_interface_cell_.size_array();
443 assert(n_diph == intersection_ijk_cell_->n());
444 temperature_ghost_.resize(n_diph, 2);
445 // On réalise une interpolation proportionelle a la distance entre la
446 // temperature d'interface au centre de la cellule diph avec tantot le
447 // gradient liquide ou vapeur.
448 for (int i_diph = 0; i_diph < n_diph; i_diph++)
449 {
450 const double di = intersection_ijk_cell_->dist_interf()(i_diph);
451 /*
452 * FIXME : Calcul de di tout le temps positif ?!
453 */
454 temperature_ghost_(i_diph, 0) =
455 temp_interface_cell_(i_diph) + di * q_interface_cell_(i_diph) / ldav;
456 temperature_ghost_(i_diph, 1) =
457 temp_interface_cell_(i_diph) + di * q_interface_cell_(i_diph) / ldal;
458 }
459}
460
: class Corrige_flux_FT API pour modifier un champ de flux à partir de donnees à l'interface....
Intersection_Interface_ijk_cell * intersection_ijk_cell_
Intersection_Interface_ijk_face * intersection_ijk_face_
virtual void initialize(const Domaine_IJK &dom, const IJK_Field_double &field, const IJK_Interfaces &interfaces, const Probleme_FTD_IJK_base &ijk_ft, Intersection_Interface_ijk_face &intersection_ijk_face, Intersection_Interface_ijk_cell &intersection_ijk_cell)
const IJK_Field_double * field_
const double & get_ghost_temp_if_cell_is_diph(const FixedVector< int, 3 > &elem, const bool from_liqu_phase) const
void corrige_flux_faceIJ(IJK_Field_local_double *const flux, const int k_layer, const int dir) override
double interpolation_quick_avec_1_ghost(const double frac_liquide, const double decal) const
void update_temperature_ghost(const ArrOfDouble &temp_vap, const ArrOfDouble &temp_liqu)
double quick(const double Tim1, const double Ti, const double Tip1, const double Tip2, const double velocity) const
void calcul_temp_flux_interf_pour_bary_face(ArrOfDouble &temp_vap, ArrOfDouble &temp_liqu)
void multiplie_par_rho_cp_de_la_face_monophasique(const double frac_liquide, IJK_Field_local_double *const flux) const
double extrapolation_amont_1_depuis_l_interface(const double frac_liquide, const double decal) const
void interp_back_to_bary_faces(const ArrOfDouble &temp_vap, const ArrOfDouble &temp_liqu)
void calcul_temperature_flux_interface(const IJK_Field_double &temperature, const double ldal, const double ldav, const double dist, const DoubleTab &positions, const DoubleTab &normale, ArrOfDouble &temperature_interp, ArrOfDouble &flux_normal_interp, ArrOfDouble &temp_liqu, ArrOfDouble &temp_vap, DoubleTab &coo_liqu, DoubleTab &coo_vap) const override
bool is_flux_upwind_from_interface(const double decal) const
void calcul_temp_flux_interf_pour_bary_cell(ArrOfDouble &temp_vap, ArrOfDouble &temp_liqu)
void initialize(const Domaine_IJK &splitting, const IJK_Field_double &field, const IJK_Interfaces &interfaces, const Probleme_FTD_IJK_base &ijk_ft, Intersection_Interface_ijk_face &intersection_ijk_face, Intersection_Interface_ijk_cell &intersection_ijk_cell) override
void remplace_flux_par_somme_rhocpf_Tf_v_Sf(const double frac_liquide, const double s_face, IJK_Field_local_double *const flux) const
void remplace_flux_par_quick_ghost_amont_1(const double frac_liquide, const double s_face, IJK_Field_local_double *const flux) const
This class encapsulates all the information related to the eulerian mesh for TrioIJK.
Definition Domaine_IJK.h:47
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
: class IJK_Interfaces
static Vecteur3 get_position_interpolation_normal_interf(const Vecteur3 &position_on_interf, const Vecteur3 &normal_on_interf, const double dist)
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
Definition Objet_U.cpp:293
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
Definition Objet_U.cpp:282
Classe de base des flux de sortie.
Definition Sortie.h:52
_SIZE_ size_array() const
void resize_array(_SIZE_ new_size, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
void resize(_SIZE_ new_size, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
Definition TRUSTArray.h:156
_SIZE_ dimension(int d) const
Definition TRUSTTab.tpp:133
static double produit_scalaire(const Vecteur3 &x, const Vecteur3 &y)