TRUST 1.9.8
HPC thermohydraulic platform
Loading...
Searching...
No Matches
Matrice_Bloc_Sym.cpp
1/****************************************************************************
2* Copyright (c) 2026, 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 <Matrice_Morse_Sym.h>
17#include <Matrice_Bloc_Sym.h>
18#include <Matrice_Base.h>
19#include <Matrix_tools.h>
20#include <TRUSTArrays.h>
21#include <TRUSTTabs.h>
22
23Implemente_instanciable_sans_constructeur(Matrice_Bloc_Sym,"Matrice_Bloc_Sym",Matrice_Bloc);
24
26{
27 return Matrice_Bloc::printOn(os);
28}
29
31{
32 return Matrice_Bloc::readOn(is);
33}
34
35
36/*--------------------------------------------------------------------------*/
37/* */
38/* Implementation des fonctions membres de la classe Matrice_Bloc_Sym */
39/* */
40/*--------------------------------------------------------------------------*/
41
46
47// **********************************
49{
50 int i,j;
51 for(i=0; i<N_; i++)
52 for(j=i; j<M_; j++)
53 (*this).get_bloc(i,j)->imprimer(os);
54 return os;
55}
56
58{
59 for(int i=0; i<N_; i++)
60 {
61 for(int j=i; j<M_; j++)
62 {
63 os<<"----------"<<finl;
64 os<<"Bloc ("<<i<<","<<j<<"):"<<finl;
65 os<<"----------"<<finl;
66 (*this).get_bloc(i,j)->imprimer_formatte(os);
67 }
68 }
69 return os;
70}
71
72//Produit matrice-vecteur
73DoubleVect& Matrice_Bloc_Sym::ajouter_multvect_(const DoubleVect& x, DoubleVect& y) const
74{
75 const double * const_x_addr = x.addr();
76 double* x_addr = (double *) const_x_addr;
77 double* y_addr = y.addr();
78 // Si on met static la methode ne fonctionne pas pour une Matrice_Bloc_Sym de Matrice_Bloc_Sym
79 // static DoubleVect xtmp;
80 // static DoubleVect ytmp;
81
82 DoubleVect xtmp;
83 DoubleVect ytmp;
84
85 int nbr_lignes;
86 int nbr_colonnes;
87 int decaly=0;
88 for(int i=0; i<N_; i++)
89 {
90 int decalx=0;
91 nbr_lignes=0;
92 for(int j=0; j<i; j++)
93 {
94 const Matrice_Base& mij=get_bloc(j,i).valeur();
95 nbr_colonnes=mij.nb_lignes();
96 decalx+=nbr_colonnes;
97 }
98 for(int j=i; j<N_; j++)
99 {
100 const Matrice_Base& mij=get_bloc(i,j).valeur();
101 if(!nbr_lignes) nbr_lignes=mij.nb_lignes();
102 nbr_colonnes=mij.nb_colonnes();
103 if (nbr_colonnes>0 && nbr_lignes>0)
104 {
105 xtmp.ref_data(x_addr+decalx,nbr_colonnes);
106 assert((decalx+nbr_colonnes)<=x.size_array());
107 ytmp.ref_data(y_addr+decaly,nbr_lignes);
108 assert((decaly+nbr_lignes)<=y.size_array());
109 mij.ajouter_multvect_(xtmp,ytmp);
110 if(i!=j)
111 {
112 xtmp.ref_data(x_addr+decaly,nbr_lignes);
113 assert((decaly+nbr_lignes)<=x.size_array());
114 ytmp.ref_data(y_addr+decalx,nbr_colonnes);
115 assert((decalx+nbr_colonnes)<=y.size_array());
116 mij.ajouter_multvectT_(xtmp,ytmp);
117 }
118 decalx+=nbr_colonnes;
119 }
120 }
121 decaly+=nbr_lignes;
122 }
123 return y;
124}
125
126//Produit matrice transposee-vecteur
127DoubleVect& Matrice_Bloc_Sym::ajouter_multvectT_(const DoubleVect& x, DoubleVect& y) const
128{
129 Cerr <<"Matrice_Bloc_Sym::ajouter_multvectT_ is not coded"<<finl<<flush;
130 exit();
131 return y;
132}
133
134//Produit matrice representee par un tableau-matrice
135DoubleTab& Matrice_Bloc_Sym::ajouter_multTab_(const DoubleTab& x, DoubleTab& y) const
136{
137 Cerr <<"Matrice_Bloc_Sym::ajouter_multTab_ is not coded"<<finl<<flush;
138 exit();
139 return y;
140}
141
143{
145 {
146 Cerr << "Conversion BlocSymToMatMorseSym..." << finl;
147 }
148
151
152 // int n=nb_lignes();
153
154 // // Dimensionnement et initialisation d'une matrice Morse
155 // Matrice_Morse mat_morse;
156 // mat_morse.dimensionner(n,n,0);
157 // mat_morse.tab1_=1;
158
159 // // Remplissage de cette matrice en sommant les contributions de chaque bloc
160 // Matrice_Morse contribution;
161 // int ideb=0;
162
163 // for (int ibloc=0; ibloc<nb_bloc_lignes(); ibloc++)
164 // {
165 // int nb_lignes=0;
166 // int jdeb=0;
167 // for (int jbloc=0; jbloc<ibloc; jbloc++)
168 // {
169 // if (!sub_type(Matrice_Bloc,get_bloc(jbloc,ibloc).valeur()))
170 // {
171 // Cerr << "Matrice_Bloc_Sym::BlocSymToMatMorseSym applies only to a Matrice_Bloc_Sym type matrix" << finl;
172 // Cerr << "constituted of Matrice_Bloc type matrixes." << finl;
173 // exit();
174 // }
175 // // Pour calculer le nombre de colonnes du bloc(j,i), on prend le nombre de lignes du bloc transpose bloc(i,j)
176 // const Matrice_Bloc& bloc = ref_cast(Matrice_Bloc,get_bloc(jbloc,ibloc).valeur());
177 // jdeb += bloc.nb_lignes();
178 // }
179 // for (int jbloc=ibloc; jbloc<nb_bloc_colonnes(); jbloc++)
180 // {
181 // if (!sub_type(Matrice_Bloc,get_bloc(ibloc,jbloc).valeur()))
182 // {
183 // Cerr << "Matrice_Bloc_Sym::BlocSymToMatMorseSym applies only to a Matrice_Bloc_Sym type matrix" << finl;
184 // Cerr << "constituted of Matrice_Bloc type matrixes." << finl;
185 // exit();
186 // }
187 // const Matrice_Bloc& bloc = ref_cast(Matrice_Bloc,get_bloc(ibloc,jbloc).valeur());
188 // // Transforme la Matrice_Bloc bloc en Matrice_Morse bloc_en_morse
189 // Matrice_Morse bloc_en_morse;
190 // bloc.BlocToMatMorse(bloc_en_morse);
191 // // Remplissage de la matrice contribution
192 // contribution.remplir(ideb, jdeb, n, n, bloc_en_morse);
193 // if (jbloc==ibloc) nb_lignes = bloc.nb_lignes();
194 // assert(nb_lignes==bloc_en_morse.nb_lignes());
195 // assert(nb_lignes==bloc.nb_lignes());
196 // jdeb += bloc.nb_colonnes();
197 // mat_morse += contribution;
198 // }
199 // ideb+=nb_lignes;
200 // }
201 // // Remplissage de la Matrice_Morse_Symetrique
202 // mat=mat_morse;
203 // // La matrice est t'elle definie ? On regarde son bloc(0,0)
204 // // const Matrice_Bloc& bloc=ref_cast(Matrice_Bloc,get_bloc(0,0).valeur());
205 // // const Matrice_Morse_Sym& sous_bloc=ref_cast(Matrice_Morse_Sym,bloc.get_bloc(0,0).valeur());
206 // // mat.set_est_definie(sous_bloc.get_est_definie());
207 // mat.set_est_definie( get_est_definie( ) );
208
209 // Debut test
210 int test=0;
211 if(test)
212 {
213 int n = nb_lignes( );
214 DoubleVect x(n);
215 DoubleVect resu1(n);
216 DoubleVect resu2(n);
217 for (int i=0; i<x.size(); i++)
218 {
219 x=0;
220 resu1=0;
221 resu2=0;
222 x(i)=1;
223 mat.multvect(x,resu1);
224 multvect(x,resu2);
225 Journal() << "Test Conversion Natif/Morse " << i << "/" << x.size() << ":" << mp_norme_vect(resu1) << " " << mp_norme_vect(resu2) << finl;
226 for (int j=0; j<x.size(); j++)
227 {
228 if (!est_egal(resu1(j),resu2(j)))
229 {
230 Journal() << "Test Conversion Natif/Morse A(" << i << "," << j << ") : " << resu1(j) << " " << resu2(j) << finl;
231 Journal()<<"Format Matrice_Bloc_Sym:" <<finl;
233 Journal()<<"Format Morse:" <<finl;
235 Cerr<<"Error in Matrice_Bloc_Sym::BlocSymToMatMorseSym" << finl;
236 Cerr<<"See the .log files of the calculation." << finl;
237 exit();
238 }
239 }
240 }
241 }
242
243 // Matrice_Morse mat1;
244 // Matrice_Morse mat2;
245 // Matrix_tools::convert_to_morse_matrix( result, mat1 );
246 // Matrix_tools::convert_to_morse_matrix( mat, mat2 );
247
248 // mat2 *= -1;
249 // mat1 += mat2;
250
251 // Cerr << "***********************************" << finl;
252 // Cerr << " bloc_sym to morse_sym:" << finl;
253 // Cerr << "min = " << mp_min_vect( mat1.coeff_,VECT_ALL_ITEMS ) << finl;
254 // Cerr << "imin = " << local_imin_vect( mat1.coeff_,VECT_ALL_ITEMS ) << finl;
255 // Cerr << "max = " << mp_max_vect( mat1.coeff_,VECT_ALL_ITEMS ) << finl;
256 // Cerr << "imax = " << local_imax_vect( mat1.coeff_,VECT_ALL_ITEMS ) << finl;
257 // Cerr << "***********************************" << finl;
258}
259
261{
262 if(N!=M)
263 {
264 Cerr << "Trying to size a Matrice_Bloc_Sym type matrix not squared !!"
265 <<finl<<flush;
266 exit();
267 }
268 N_ = N;
269 M_ = M;
270 nb_blocs_ = (N_*(N_+1))/2 ;
271 blocs_.dimensionner(nb_blocs_);
272}
273
274const Matrice& Matrice_Bloc_Sym::get_bloc( int i, int j ) const
275{
276 if (j<i || i<0 || i>=N_ || j<0 || j>=M_)
277 {
278 Cerr << "Matrice_Bloc_Sym::bloc("<<i<<","<<j<<") does not exist." << finl;
280 }
281 return blocs_[i*(N_-1)-i*(i-1)/2+j];
282}
283
285{
286 if (j<i || i<0 || i>=N_ || j<0 || j>=M_)
287 {
288 Cerr << "Matrice_Bloc_Sym::bloc(" << i << "," << j << ") out of range : N=" << N_ << " M_=" << M_ << finl;
290 }
291 return blocs_[i*(N_-1)-i*(i-1)/2+j];
292}
293
294void Matrice_Bloc_Sym::get_stencil( Stencil& stencil ) const
295{
297
298 Stencil symmetric_stencil;
299 get_symmetric_stencil( symmetric_stencil );
300
302 symmetric_stencil,
303 stencil );
304}
305
306void Matrice_Bloc_Sym::get_symmetric_stencil( Stencil& stencil ) const
307{
309
310 const int nb_line_blocks = nb_bloc_lignes( );
311 const int nb_column_blocks = nb_bloc_colonnes( );
312 const int nb_stencils = nb_blocs_;
313
314 VECT( Stencil ) local_stencils;
315 local_stencils.dimensionner( nb_stencils );
316
317 int imin = 0;
318 int imax = 0;
319 int jmin = 0;
320 int jmax = 0;
321 int jprev = 0;
322
323 for ( int i=0; i<nb_line_blocks; ++i )
324 {
325 for ( int j=i; j<nb_column_blocks; ++j )
326 {
327 const Matrice_Base& local_matrix = get_bloc( i, j ).valeur( );
328
329 imax = imin + local_matrix.nb_lignes( );
330 jmax = jmin + local_matrix.nb_colonnes( );
331 jprev = ( i==j ) ? jmax : jprev;
332
333 int stencil_index = i *( nb_line_blocks - 1 ) - i * ( i - 1) / 2 + j;
334
335 Stencil& local_stencil_ = local_stencils[ stencil_index ];
336
337 if ( i == j )
338 {
339 local_matrix.get_symmetric_stencil( local_stencil_ );
340 }
341 else
342 {
343 local_matrix.get_stencil( local_stencil_ );
344 }
345
346 const int size = local_stencil_.dimension( 0 );
347 for ( int k=0; k<size; ++k )
348 {
349 local_stencil_( k, 0 ) += imin;
350 local_stencil_( k, 1 ) += jmin;
351 }
352 jmin = jmax;
353 }
354 imin = imax;
355 jmin = jprev;
356 }
357
358 const int nb_lines = nb_lignes( );
359 ArrOfInt offsets( nb_lines + 1 );
360 offsets[ 0 ] = 0;
361
362 for ( int i=0; i<nb_stencils; ++i )
363 {
364 const Stencil& local_stencil_ = local_stencils[ i ];
365 const int size = local_stencil_.dimension( 0 );
366
367 for ( int k=0; k<size; ++k )
368 {
369 const int line = local_stencil_( k, 0 );
370 offsets[ line + 1 ] += 1;
371 }
372 }
373
374 for ( int i=0; i<nb_lines; ++i )
375 {
376 offsets[ i + 1 ] += offsets[ i ];
377 }
378
379 const int stencil_size = offsets[ nb_lines ];
380 stencil.resize( stencil_size, 2 );
381
382 stencil = -1;
383
384 for ( int i=0; i<nb_stencils; ++i )
385 {
386 const Stencil& local_stencil_ = local_stencils[ i ];
387 const int size = local_stencil_.dimension( 0 );
388
389 for ( int k=0; k<size; ++k )
390 {
391 const int line = local_stencil_( k, 0 );
392 const int column = local_stencil_( k, 1 );
393 const int index = offsets[ line ];
394
395 assert( stencil( index, 0 ) < 0 );
396 assert( stencil( index, 1 ) < 0 );
397 assert( index < offsets[ line + 1 ] );
398
399 stencil( index, 0 ) = line;
400 stencil( index, 1 ) = column;
401
402 offsets[ line ] += 1;
403 }
404 }
405}
406
408 StencilCoeffs& coefficients ) const
409{
411
412 Stencil symmetric_stencil;
413 StencilCoeffs symmetric_coefficients;
414 get_symmetric_stencil_and_coefficients( symmetric_stencil, symmetric_coefficients );
415
417 symmetric_stencil,
418 symmetric_coefficients,
419 stencil,
420 coefficients );
421}
422
424 StencilCoeffs& coefficients ) const
425{
427
428 const int nb_line_blocks = nb_bloc_lignes( );
429 const int nb_column_blocks = nb_bloc_colonnes( );
430 const int nb_stencils = nb_blocs_;
431
432 VECT( Stencil ) local_stencils;
433 local_stencils.dimensionner( nb_stencils );
434
435 VECT( StencilCoeffs ) local_coefficients;
436 local_coefficients.dimensionner( nb_stencils );
437
438 int imin = 0;
439 int imax = 0;
440 int jmin = 0;
441 int jmax = 0;
442 int jprev = 0;
443
444 for ( int i=0; i<nb_line_blocks; ++i )
445 {
446 for ( int j=i; j<nb_column_blocks; ++j )
447 {
448 const Matrice_Base& local_matrix = get_bloc( i, j ).valeur( );
449
450 imax = imin + local_matrix.nb_lignes( );
451 jmax = jmin + local_matrix.nb_colonnes( );
452 jprev = ( i==j ) ? jmax : jprev;
453
454 int stencil_index = i *( nb_line_blocks - 1 ) - i * ( i - 1) / 2 + j;
455
456 Stencil& local_stencil_ = local_stencils[ stencil_index ];
457 StencilCoeffs& coefficients_ = local_coefficients[ stencil_index ];
458
459 if ( i == j )
460 {
461 local_matrix.get_symmetric_stencil_and_coefficients( local_stencil_, coefficients_ );
462 }
463 else
464 {
465 local_matrix.get_stencil_and_coefficients( local_stencil_, coefficients_ );
466 }
467
468 const int size = local_stencil_.dimension( 0 );
469 for ( int k=0; k<size; ++k )
470 {
471 local_stencil_( k, 0 ) += imin;
472 local_stencil_( k, 1 ) += jmin;
473 }
474 jmin = jmax;
475 }
476 imin = imax;
477 jmin = jprev;
478 }
479
480 const int nb_lines = nb_lignes( );
481 ArrOfInt offsets( nb_lines + 1 );
482 offsets[ 0 ] = 0;
483
484 for ( int i=0; i<nb_stencils; ++i )
485 {
486 const Stencil& local_stencil_ = local_stencils[ i ];
487 const int size = local_stencil_.dimension( 0 );
488
489 for ( int k=0; k<size; ++k )
490 {
491 const int line = local_stencil_( k, 0 );
492 offsets[ line + 1 ] += 1;
493 }
494 }
495
496 for ( int i=0; i<nb_lines; ++i )
497 {
498 offsets[ i + 1 ] += offsets[ i ];
499 }
500
501 const int stencil_size = offsets[ nb_lines ];
502 stencil.resize( stencil_size, 2 );
503 coefficients.resize_array( stencil_size );
504
505 stencil = -1;
506
507 for ( int i=0; i<nb_stencils; ++i )
508 {
509 const Stencil& local_stencil_ = local_stencils[ i ];
510 const StencilCoeffs& coefficients_ = local_coefficients[ i ];
511
512 const int size = local_stencil_.dimension( 0 );
513 assert( coefficients_.size_array( ) == size );
514
515 for ( int k=0; k<size; ++k )
516 {
517 const int line = local_stencil_( k, 0 );
518 const int column = local_stencil_( k, 1 );
519 const double coefficient = coefficients_[ k ];
520 const int index = offsets[ line ];
521
522 assert( stencil( index, 0 ) < 0 );
523 assert( stencil( index, 1 ) < 0 );
524 assert( index < offsets[ line + 1 ] );
525
526 stencil( index, 0 ) = line;
527 stencil( index, 1 ) = column;
528 coefficients[ index ] = coefficient;
529
530 offsets[ line ] += 1;
531 }
532 }
533}
534
536{
537 const int nb_line_blocks = nb_bloc_lignes( );
538 const int nb_column_blocks = nb_bloc_colonnes( );
539
540 for ( int i=0; i<nb_line_blocks; ++i )
541 {
542 int nb_lines = get_bloc( i, i ).valeur( ).nb_lignes( );
543 int nb_columns = get_bloc( i, i ).valeur( ).nb_colonnes( );
544
545 if ( nb_lines != nb_columns )
546 {
547 Cerr << "bloc( " << i << ", " << i << " ) is not square" << finl;
548 return false;
549 }
550
551 for ( int j=0; j<i; ++j )
552 {
553 if ( nb_columns != get_bloc( j, i ).valeur( ).nb_colonnes( ) )
554 {
555 Cerr << "Invalid number of columns in bloc ( " << j << ", " << i << " )" << finl;
556 return false;
557 }
558 }
559
560 for ( int j=i; j<nb_column_blocks; ++j )
561 {
562 if ( nb_lines != get_bloc( i, j ).valeur( ).nb_lignes( ) )
563 {
564 Cerr << "Invalid number of lines in bloc ( " << i << ", " << j << " )" << finl;
565 return false;
566 }
567 }
568 }
569
570 return true;
571}
572
574{
575#ifndef NDEBUG
577 {
578 Cerr << "Error in 'Matrice_Bloc_Sym::assert_check_symmetric_block_matrix_structure( )':" << finl;
579 Cerr << " Exiting..." << finl;
580 Process::exit( );
581 }
582#endif
583}
584
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
Classe Matrice_Base Classe de base de la hierarchie des matrices.
virtual void get_symmetric_stencil(Stencil &stencil) const
virtual void get_stencil(Stencil &stencil) const
virtual DoubleVect & ajouter_multvect_(const DoubleVect &x, DoubleVect &r) const =0
virtual int nb_lignes() const =0
Return local number of lines (=size on the current proc).
virtual int nb_colonnes() const =0
Return local number of columns (=size on the current proc).
virtual DoubleVect & multvect(const DoubleVect &, DoubleVect &) const
Multiplication d'un vecteur par la matrice.
virtual void get_symmetric_stencil_and_coefficients(Stencil &stencil, StencilCoeffs &coefficients) const
virtual void get_stencil_and_coefficients(Stencil &stencil, StencilCoeffs &coefficients) const
virtual DoubleVect & ajouter_multvectT_(const DoubleVect &x, DoubleVect &r) const =0
const Matrice & get_bloc(int i, int j) const override
void BlocSymToMatMorseSym(Matrice_Morse_Sym &mat) const
void dimensionner(int N, int M) override
void get_stencil(Stencil &stencil) const override
void get_stencil_and_coefficients(Stencil &stencil, StencilCoeffs &coefficients) const override
DoubleVect & ajouter_multvect_(const DoubleVect &x, DoubleVect &y) const override
DoubleTab & ajouter_multTab_(const DoubleTab &x, DoubleTab &y) const override
void get_symmetric_stencil_and_coefficients(Stencil &stencil, StencilCoeffs &coefficients) const override
Sortie & imprimer(Sortie &s) const override
DoubleVect & ajouter_multvectT_(const DoubleVect &x, DoubleVect &y) const override
Sortie & imprimer_formatte(Sortie &s) const override
bool check_symmetric_block_matrix_structure() const
void assert_check_symmetric_block_matrix_structure() const
void get_symmetric_stencil(Stencil &stencil) const override
Matrice_Bloc_Sym(int N=0, int M=0)
VECT(Matrice) blocs_
Matrice_Bloc(int N=0, int M=0)
int nb_bloc_lignes() const
int nb_bloc_colonnes(void) const
int nb_lignes() const override
Return local number of lines (=size on the current proc).
int nb_colonnes() const override
Return local number of columns (=size on the current proc).
Classe Matrice_Morse_Sym Represente une matrice M (creuse) symetrique stockee au format Morse.
Sortie & imprimer_formatte(Sortie &s) const override
void set_est_definie(int)
int get_est_definie() const
void unsymmetrize_stencil_and_coefficients(const int nb_lines, const Stencil &symmetric_stencil, const StencilCoeffs &symmetric_coefficients, Stencil &stencil, StencilCoeffs &coefficients) const
void unsymmetrize_stencil(const int nb_lines, const Stencil &symmetric_stencil, Stencil &stencil) const
Classe Matrice Classe generique de la hierarchie des matrices.
Definition Matrice.h:34
static void convert_to_symmetric_morse_matrix(const Matrice_Base &in, Matrice_Morse_Sym &out)
friend class Sortie
Definition Objet_U.h:75
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
static Sortie & Journal(int message_level=0)
Renvoie un objet statique de type Sortie qui sert de journal d'evenements.
Definition Process.cpp:588
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Definition Process.cpp:455
static int je_suis_maitre()
renvoie 1 si on est sur le processeur maitre du groupe courant (c'est a dire me() == 0),...
Definition Process.cpp:86
Classe de base des flux de sortie.
Definition Sortie.h:52
_SIZE_ size_array() const
_TYPE_ * addr()
void resize_array(_SIZE_ new_size, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
Definition TRUSTTab.tpp:469
_SIZE_ dimension(int d) const
Definition TRUSTTab.tpp:133
_SIZE_ size() const
Definition TRUSTVect.tpp:45
void ref_data(_TYPE_ *ptr, _SIZE_ new_size) override