TrioCFD 1.9.9_beta
TrioCFD documentation
Loading...
Searching...
No Matches
Champ_Generique_Extraction.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 <Champ_Generique_Interpolation.h>
17#include <Champ_Generique_Extraction.h>
18#include <Champ_Generique_refChamp.h>
19#include <Champ_front_uniforme.h>
20#include <Domaine_Cl_dis_base.h>
21#include <Discretisation_base.h>
22#include <Dirichlet_homogene.h>
23#include <Domaine_dis_cache.h>
24#include <Equation_base.h>
25#include <NettoieNoeuds.h>
26#include <Postraitement.h>
27#include <Synonyme_info.h>
28#include <TRUST_Deriv.h>
29#include <Domaine_VF.h>
30#include <Cond_lim.h>
31#include <Domaine.h>
32#include <Param.h>
33
34Implemente_instanciable_sans_constructeur(Champ_Generique_Extraction,"Extraction",Champ_Gen_de_Champs_Gen);
35// XD extraction champ_post_de_champs_post extraction INHERITS_BRACE To create a surface field (values at the boundary)
36// XD_CONT of a volume field
37
38Add_synonym(Champ_Generique_Extraction,"Champ_Post_Extraction");
39
45
47{
49 // Verifications:
50 if (get_nb_sources() != 1)
51 {
52 Cerr << "Error in Champ_Generique_Extraction::readOn\n"
53 << " You must specify exactly 1 \"Source\"." << finl;
54 }
55 return is;
56}
57
59{
60 exit();
61 return os;
62}
63
64// domaine : read the name of the extraction domain to initialize the reference domaine_
65// nom_frontiere : read the name of the boundary on which the extraction is to be performed
66// methode : specification of the chosen method to extract the values
67// (optional: trace by default or champ_frontiere)
69{
71 param.ajouter("domaine",&dom_extrac_,Param::REQUIRED); // XD attr domaine ref_domaine domaine REQ name of the volume
72 // XD_CONT field
73 param.ajouter("nom_frontiere",&nom_fr_,Param::REQUIRED); // XD attr nom_frontiere chaine nom_frontiere REQ boundary
74 // XD_CONT name where the values of the volume field will be picked
75 param.ajouter("methode",&methode_); // XD attr methode chaine(into=["trace","champ_frontiere"]) methode OPT name of the extraction method (trace by_default or champ_frontiere)
76}
77
78//Returns the directive (champ_elem, champ_sommets, champ_face or pression)
79//to launch the discretisation of the storage space returned by
80//the get_champ() method of the Champ_Generique_base that triggered the call
82{
83 Motcle directive;
84 directive = "champ_elem";
85 return directive;
86}
87
89{
90 OWN_PTR(Champ_base) source_espace_stockage_tmp;
91 const Champ_base& source = get_source(0).get_champ_without_evaluation(source_espace_stockage_tmp);
92 Nature_du_champ nature_source = source.nature_du_champ();
93 int nb_comp = source.nb_comp();
94
96 espace_stockage = creer_espace_stockage(nature_source,nb_comp,es_tmp);
97 return espace_stockage;
98}
99/*! @brief Extraction of the values of a field (trace or boundary field) on a boundary of the domain
100 *
101 */
103{
104
105 OWN_PTR(Champ_base) source_espace_stockage;
106 const Champ_Generique_base& source = get_source(0);
107 const Champ_base& source_stockage = source.get_champ(source_espace_stockage);
108
109 const DoubleTab& source_valeurs = source_stockage.valeurs();
110 const Domaine_dis_base& domaine_dis_source = source.get_ref_domaine_dis_base();
111 const Nature_du_champ& nature_source = source_stockage.nature_du_champ();
112
113 //The following test is not in completer() because it uses equation(): the reference must be initialized
114 if (methode_=="champ_frontiere")
115 {
116 int num_bord = domaine_dis_source.rang_frontiere(nom_fr_);
117 const Champ_Inc_base& source_inconnue = ref_cast(Champ_Inc_base,source_stockage);
118 const Cond_lim& cl = source_inconnue.equation().domaine_Cl_dis().les_conditions_limites(num_bord);
119 if (sub_type(Dirichlet_homogene,cl.valeur()))
120 {
121 Cerr<<"A boundary condition of type Dirichlet homogeneous does not use field boundary"<<finl;
122 Cerr<<"The extraction of field "<<source_stockage.le_nom()<<" with the option champ_frontiere"<<finl;
123 Cerr<<"is therefore not possible for this type of boundary condition"<<finl;
124 Cerr<<"You can possibly remove the option champ_frontiere for postprocess the trace of the field"<<finl;
125 exit();
126 }
127 }
128
129
130 //Problem for discretization of the extraction domain (dimension)
131 ////const Domaine_dis_base& domaine_dis = get_ref_domaine_dis_base();
132
133 int nb_comp_source = source_stockage.nb_comp();
134 double temps = source.get_time();
135
136 Nom type_espace_stockage, disc;
137 int nb_comp = 0;
138 int nb_ddl = 0;
139
140 if (source.get_discretisation().is_vdf())
141 disc = "VDF";
142 else if (source.get_discretisation().is_vef())
143 disc = "VEF";
144 else if (source.get_discretisation().is_ef())
145 disc = "EF";
146 else
147 {
148 Cerr<<"Champ_Generique_Extraction::get_champ()"<<finl;
149 Cerr<<"We do not recognize the type of area discretized"<<domaine_dis_source.que_suis_je()<<finl;
150 exit();
151 }
152
153 type_espace_stockage = "Champ_Fonc_P0_";
154 type_espace_stockage += disc;
155
156 if (source_stockage.que_suis_je()=="Champ_Face")
158 else
159 nb_comp = nb_comp_source;
160
161 //The trace systematically returns an array of values at the source faces
162 //and a discretized boundary field is dimensioned relative to the number of faces
163 //of the boundary: in both cases nb_ddl = nb_faces
164 const Frontiere_dis_base& fr_dis = domaine_dis_source.frontiere_dis(nom_fr_);
165 const Frontiere& la_frontiere = fr_dis.frontiere();
166 nb_ddl = la_frontiere.nb_faces();
167
168 //the discretized domain to associate is currently not available
169 //We do not associate a domaine_discretisee and do not set nb_valeurs_nodales
170 espace_stockage.typer(type_espace_stockage);
171 ////espace_stockage.associer_domaine_dis_base(domaine_dis);
172 espace_stockage->fixer_nb_comp(nb_comp);
173 ////espace_stockage.fixer_nb_valeurs_nodales(nb_ddl);
174 espace_stockage->fixer_nature_du_champ(nature_source);
175
176 DoubleTab& espace_valeurs = espace_stockage->valeurs();
177 const int N = source_valeurs.line_size();
178 espace_valeurs.resize(nb_ddl,nb_comp);
179
180 if (methode_=="trace") //We take the trace of the field on a boundary
181 {
182 source_stockage.trace(fr_dis,espace_valeurs,temps,0);
183 }
184 else if (methode_=="champ_frontiere") //We retrieve the boundary field
185 {
186 int num_bord = domaine_dis_source.rang_frontiere(nom_fr_);
187 const Champ_Inc_base& source_inconnue = ref_cast(Champ_Inc_base,source_stockage);
188 const Champ_front_base& champ_fr = source_inconnue.equation().domaine_Cl_dis().les_conditions_limites(num_bord)->champ_front();
189
190 if (sub_type(Champ_front_uniforme,champ_fr))
191 {
192 for (int j = 0; j < N; j++)
193 for (int i=0; i<nb_ddl; i++)
194 espace_valeurs(i,j) = champ_fr.valeurs()(0,j);
195 }
196 else
197 espace_valeurs = champ_fr.valeurs();
198 }
199
200 //The storage space currently has no virtual space
201 ////espace_valeurs.echange_espace_virtuel();
202
203 return espace_stockage;
204}
205
207{
208
209 Motcles motcles(1);
210 motcles[0] = "composantes";
211 int rang = motcles.search(query);
212 switch(rang)
213 {
214
215 case 0:
216 {
217 Noms source_compos = get_source(0).get_property("composantes");
218 int nb_comp = source_compos.size();
219 Noms compo(nb_comp);
220
221 for (int i=0; i<nb_comp; i++)
222 {
223 Nom nume(i);
224 compo[i] = nom_post_+nume;
225 }
226
227 return compo;
228 }
229 }
230
232
233}
234//Name the field as a source by default
235//"Extraction_" + nom_champ_source
237{
238 if (nom_post_=="??")
239 {
240 Nom nom_post_source, nom_champ_source;
241 const Noms nom = get_source(0).get_property("nom");
242 nom_champ_source = nom[0];
243 nom_post_source = "Extraction_";
244 nom_post_source += nom_champ_source;
245 nommer(nom_post_source);
246 }
247}
248
249// The completer method completes the extraction domain declared in the dataset
250// to which the class refers:
251// - addition of a domain (of type Pave)
252// - we determine the coordinates of the vertices contained in the extraction plane
253// Currently we do not proceed to the discretization of the extraction domain (dimension issue)
255{
257 const Objet_U& ob = interprete().objet(dom_extrac_);
258 if (!sub_type(Domaine, ob))
259 {
260 Cerr << "Error in Champ_Generique_Extraction:get_champ"<<finl;
261 Cerr<<"We do not retrieve domain"<<finl;
262 exit();
263 }
264 domaine_ = ref_cast(Domaine,ob);
265 const Champ_Generique_base& source = get_source(0);
266
267 if (methode_=="champ_frontiere")
268 {
269 if (sub_type(Champ_Generique_refChamp,source))
270 {
271 OWN_PTR(Champ_base) source_espace_stockage;
272 const Champ_base& source_stockage = source.get_champ(source_espace_stockage);
273 if (!sub_type(Champ_Inc_base,source_stockage))
274 {
275 Cerr<<"The method "<<methode_<<" can be applied to extract only unknown fields of the problem."<<finl;
276 Cerr<<"The field to extract "<<source_stockage.le_nom()<<" do not satisfied this requirement."<<finl;
277 exit();
278 }
279 }
280 else
281 {
282 const Noms nom_champ = get_property("nom");
283 Cerr<<"The method "<<methode_<<" can be applied to extract only unknown fields of the problem."<<finl;
284 Cerr<<"The source of the post-processing field "<<nom_champ[0]<<" do not encapsulate an unknown field."<<finl;
285 exit();
286 }
287
288 }
289
290 const Domaine& dom = source.get_ref_domain();
291 if (dom==domaine_.valeur())
292 {
293 Cerr<<"Error in Champ_Generique_Extraction:get_champ"<<finl;
294 Cerr<<"The domain is the same as the source's domain."<<finl;
295 exit();
296 }
297 const Domaine_dis_base& domaine_dis_source = source.get_ref_domaine_dis_base();
298 const Domaine_VF& zvf_source = ref_cast(Domaine_VF,domaine_dis_source);
299 // To avoid a crash:
300 if (zvf_source.nb_frontiere_dis()==0)
301 {
302 Cerr << "You can't extract a field onto a boundary of the domain " << dom.le_nom() << finl;
303 Cerr << "because there is NO boundaries defined on it." << finl;
304 if (sub_type(Champ_Generique_Interpolation,source))
305 {
306 Cerr << "It is not possible to extract on a boundary a field interpolated other than the calculation domain." << finl;
307 Cerr << "So, change the domain in Interpolation definition into domain " << ref_cast(Champ_Generique_Interpolation,source).get_source(0).get_ref_domain().le_nom() << finl;
308 }
309 exit();
310 }
311 const Frontiere_dis_base& fr_dis = domaine_dis_source.frontiere_dis(nom_fr_);
312 const Frontiere& la_frontiere = fr_dis.frontiere();
313 const Type_Face type_face_source = la_frontiere.faces().type_face();
314 int nb_faces = la_frontiere.nb_faces();
315
316 const DoubleTab& sommets_source = dom.les_sommets();
317 int num_premiere_face = la_frontiere.num_premiere_face();
318 Entity index1,index2;
319 index1 = Entity::FACE;
320 index2 = Entity::NODE;
321 const IntTab& face_sommets = source.get_ref_connectivity(index1,index2);
322 int nb_som_faces = zvf_source.nb_som_face();
323
324 Nom type_elem;
325 if (type_face_source==Type_Face::segment_2D || type_face_source==Type_Face::segment_2D_axi)
326 type_elem = "Segment"; // For MC2
327 else if (type_face_source==Type_Face::quadrilatere_2D_axi)
328 type_elem = "Segment"; // For MC2
329 else if (type_face_source==Type_Face::quadrangle_3D)
330 type_elem = "Quadrangle";
331 else if (type_face_source==Type_Face::triangle_3D)
332 type_elem = "Triangle";
333 else if (type_face_source==Type_Face::point_1D)
334 type_elem = "Point";
335 //The following case is possible in parallel
336 else if ((type_face_source==Type_Face::vide_0D) && (nb_faces==0))
337 {
338 if (source.get_discretisation().is_vdf())
339 type_elem = "Rectangle";
340 else if (source.get_discretisation().is_vef())
341 type_elem = "Triangle";
342 else
343 {
344 Cerr<<"The type of domaine discretized"<<zvf_source.que_suis_je()<<" is not recognized"<<finl;
345 exit();
346 }
347 }
348 else
349 {
350 Cerr<<"The type of faces of the boundary name "<<nom_fr_<<" is neither type Type_Face::quadrangle_3D nor Type_Face::triangle_3D"<<finl;
351 Cerr<<"We do not realize the extraction"<<finl;
352 exit();
353 }
354
355 // Check that the extraction domain used is correct:
356 if (domaine_->nb_som()!=0)
357 {
358 if (domaine_->les_elems().dimension(0) != nb_faces ||
359 domaine_->les_elems().dimension(1) != nb_som_faces)
360 {
361 Cerr << "Error when extracting the field " << nom_post_ << ": The " << domaine_->le_nom() << " domain can't be used cause already built with different support !" << finl;
362 Cerr << "You could create an empty domain with no operations on it before extracting this field." << finl;
364 }
365 }
366 domaine_->typer(type_elem);
367
368 IntTab& mes_elems_domaine = domaine_->les_elems();
369 mes_elems_domaine.reset();
370 mes_elems_domaine.resize(nb_faces, nb_som_faces);
371
372 // Destroy the parallel descriptor and rebuild it...
373 domaine_->les_sommets().reset();
374 domaine_->les_sommets() = sommets_source;
375 for (int face = 0; face < nb_faces; face++)
376 for (int s = 0; s < nb_som_faces; s++)
377 mes_elems_domaine(face, s) = face_sommets(num_premiere_face + face, s);
378 NettoieNoeuds::nettoie(domaine_);
379
380 // Discretise the extraction domain
382}
383
385{
386 if (domaine_)
387 return domaine_.valeur();
388 else
389 {
390 Cerr<<"There is no extraction domain created to this Champ_Generique_Extraction"<<finl;
391 exit();
392 }
393 //For compilation
394 return get_ref_domain();
395}
396
398{
399 const Domaine& dom = get_ref_domain();
400 domain = dom;
401}
402
404{
405 if (domaine_)
406 return le_dom_dis.valeur();
407 else
408 {
409 Cerr<<"There is no domain associated to this Champ_Generique_Extraction"<<finl;
410 exit();
411 }
412 //For compilation
414}
415
417{
418 Entity loc;
419 loc = Entity::ELEMENT;
420 return loc;
421}
422
423
424//Discretisation of the extraction domain
425//This discretisation is necessary to associate a discretized domain
426//to the storage space in the get_champ() method
428{
429 if (domaine_)
430 {
431 const Probleme_base& Pb = get_ref_pb_base();
432 const Discretisation_base& discr = Pb.discretisation();
433 Nom type_discr = discr.que_suis_je();
434 if (type_discr == "VEFPreP1B") type_discr = "VEF";
435 Nom type = "NO_FACE_Domaine_";
436 type += type_discr;
437 le_dom_dis = Domaine_dis_cache::Build_or_get(type, domaine_.valeur());
438 }
439}
440
441
class Champ_Fonc_base Base class of fields that are functions of a calculated quantity
Base class of generic fields having other generic fields as source. The use of the class methods reli...
const Noms get_property(const Motcle &query) const override
Returns the requested property.
virtual OWN_PTR(Champ_Fonc_base) &creer_espace_stockage(const Nature_du_champ &nature
void completer(const Postraitement_base &post) override
const Probleme_base & get_ref_pb_base() const override
Returns the problem that carries the target field.
virtual const Champ_Generique_base & get_source(int i) const
void set_param(Param &param) const override
A generic field that performs the extraction of a field on a boundary.
const Noms get_property(const Motcle &query) const override
Returns the requested property.
void completer(const Postraitement_base &post) override
const Champ_base & get_champ(OWN_PTR(Champ_base)&espace_stockage) const override
Extraction of the values of a field (trace or boundary field) on a boundary of the domain.
const Domaine & get_ref_domain() const override
Returns a ref to the domain on which the storage space will be evaluated.
const Domaine_dis_base & get_ref_domaine_dis_base() const override
Returns a ref to the discretized domain on which the storage space will be evaluated.
Entity get_localisation(const int index=-1) const override
Returns the type of geometric entities on which the discrete values are attached (NODE for a P1 field...
void set_param(Param &param) const override
const Champ_base & get_champ_without_evaluation(OWN_PTR(Champ_base)&espace_stockage) const override
void get_copy_domain(Domaine &) const override
Creates a copy of the domain on which the storage space will be evaluated.
const Motcle get_directive_pour_discr() const override
Returns the directive (champ_elem, champ_sommets, champ_face or pression) to launch the discretizatio...
A generic field constructed as an interpolation of another generic field (interpolation at vertices o...
class Champ_Generique_base
virtual const Noms get_property(const Motcle &query) const
Returns the requested property.
virtual const Domaine_dis_base & get_ref_domaine_dis_base() const
Returns a ref to the discretized domain on which the storage space will be evaluated.
virtual const IntTab & get_ref_connectivity(Entity index1, Entity index2) const
Returns the connectivity array between the geometric entity index1 and entity index2.
virtual const Champ_base & get_champ(OWN_PTR(Champ_base) &espace_stockage) const =0
virtual double get_time() const
Returns the time of the Champ_Generique_base.
virtual const Champ_base & get_champ_without_evaluation(OWN_PTR(Champ_base)&espace_stockage) const =0
void nommer(const Nom &nom) override
Assigns a name to the Objet_U. Virtual method to override.
virtual const Domaine & get_ref_domain() const
Returns a ref to the domain on which the storage space will be evaluated.
virtual const Discretisation_base & get_discretisation() const
Returns the discretization associated with the problem.
Special field class that encapsulates a reference to a volume field of TRUST of type Champ_base.
Class Champ_Inc_base.
virtual DoubleTab & valeurs()=0
class Champ_base This class is the base of the fields hierarchy.
Definition Champ_base.h:43
virtual DoubleTab & trace(const Frontiere_dis_base &, DoubleTab &, double, int distant) const
Computes the trace of a field on a boundary at time tps.
class Champ_front_base Base class for the hierarchy of boundary fields.
virtual DoubleTab & valeurs() override
Returns the array of field values.
class Champ_front_uniforme Derived class of Champ_front_base representing
class Cond_lim Generic class used to represent any class
Definition Cond_lim.h:31
Classe Dirichlet_homogene This class is the base class of the hierarchy of homogeneous Dirichlet-type...
class Discretisation_base This class represents a spatial discretization scheme, which
virtual bool is_ef() const
virtual bool is_vdf() const
virtual bool is_vef() const
DoubleTab_t & les_sommets()
Definition Domaine.h:113
const Cond_lim & les_conditions_limites(int) const
Returns the i-th boundary condition.
class Domaine_VF
Definition Domaine_VF.h:44
int nb_frontiere_dis() const
Definition Domaine_VF.h:111
int nb_som_face() const
Returns the number of vertices per face.
Definition Domaine_VF.h:493
const Nom & le_nom() const override
Returns the name of the Objet_U. Virtual method to override: returns "neant" in this implementation.
class Domaine_dis_base This class is the base of the hierarchy of discretized domains.
const Frontiere_dis_base & frontiere_dis(const Nom &) const
Returns the boundary of Name nom.
int rang_frontiere(const Nom &)
static Domaine_dis_base & Build_or_get(const Nom &type, const Domaine &dom, const Discretisation_base *disc=nullptr)
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
virtual Domaine_Cl_dis_base & domaine_Cl_dis()
Returns the discretized boundary condition domain associated with the equation.
Type_Face type_face() const
Definition Faces.h:65
virtual void fixer_nb_comp(int i)
Sets the number of components of the field.
const Nom & le_nom() const override
Returns the name of the field.
virtual Nature_du_champ fixer_nature_du_champ(Nature_du_champ nat)
Sets the nature of a field: scalar, multiscalar, vectorial.
virtual int nb_comp() const
Definition Field_base.h:56
virtual Nature_du_champ nature_du_champ() const
Definition Field_base.h:77
int_t num_premiere_face() const
Definition Frontiere.h:67
int_t nb_faces() const
Returns the number of faces of the boundary.
Definition Frontiere.h:59
const Faces_t & faces() const
Definition Frontiere.h:54
class Frontiere_dis_base Class representing a discretized boundary.
const Frontiere & frontiere() const
Returns the associated geometric boundary.
static Objet_U & objet(const Nom &)
See Interprete_bloc::objet_global(). BM: the Interprete class is not the best place for this.
const Equation_base & equation() const
Returns the reference to the equation pointed to by MorEqn::mon_equation.
Definition MorEqn.h:62
A character string (Nom) in uppercase.
Definition Motcle.h:26
An array of Motcle objects.
Definition Motcle.h:63
int search(const Motcle &t) const
Definition Motcle.cpp:319
static void nettoie(Domaine_t &)
class Nom: a character string for naming TRUST objects.
Definition Nom.h:31
An array of character strings (VECT(Nom)).
Definition Noms.h:26
const Interprete & interprete() const
Definition Objet_U.cpp:211
static int dimension
Definition Objet_U.h:94
const Nom & que_suis_je() const
Returns the string identifying the class.
Definition Objet_U.cpp:104
virtual Entree & readOn(Entree &)
Reads an Objet_U from an input stream. Virtual method to override.
Definition Objet_U.cpp:289
Objet_U()
Default constructor: assigns a unique identifier to the object (object_id_) and registers the object ...
Definition Objet_U.cpp:54
virtual Sortie & printOn(Sortie &) const
Writes the object to an output stream. Virtual method to override.
Definition Objet_U.cpp:278
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
void ajouter(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.
Definition Param.cpp:364
@ REQUIRED
Definition Param.h:115
Base class for all post-processing objects.
class Probleme_base It is a Probleme_U that is not a coupling.
const Discretisation_base & discretisation() const
Returns the discretization associated with the problem.
static void exit(int exit_code=-1)
Exit routine for TRUST within a Kokkos region.
Definition Process.cpp:466
Base class for output streams.
Definition Sortie.h:52
void reset() override
Definition TRUSTTab.tpp:362
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
Definition TRUSTTab.tpp:469
int line_size() const
Definition TRUSTVect.tpp:67