TrioCFD 1.9.9_beta
TrioCFD documentation
Loading...
Searching...
No Matches
Champ_base.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
17#ifndef Champ_base_included
18#define Champ_base_included
19
20#include <TRUSTTabs_forward.h>
21#include <Champ_Proto.h>
22#include <Field_base.h>
23#include <Noms.h>
24class Motcle;
25#include <Domaine_forward.h>
30
31/*! @brief class Champ_base This class is the base of the fields hierarchy.
32 *
33 * Its members are the attributes and methods common
34 * to all classes that represent fields.
35 * Champ_base derives from Champ_Proto, in order to have an interface conforming
36 * to all fields, and to inherit common operations on
37 * Fields.
38 * A field has a name, a unit and values.
39 *
40 * @sa Champ_Proto Ch_Inc_base Ch_Don_base, Abstract class, Abstract methods:, Champ_base& affecter_(const Champ_base& ), Champ_base& affecter_compo(const Champ_base&, int compo )
41 */
42class Champ_base : public Field_base, public Champ_Proto
43{
44 Declare_base_sans_constructeur(Champ_base);
45
46public:
47 Champ_base();
48
49 //
50 // New methods
51 //
52 virtual int nb_valeurs_nodales() const
53 {
54 Cerr<<"We do not have to pass here "<<__FILE__<<(int)__LINE__<<finl;
55 exit();
56 return -1;
57 };
58
59 double temps() const;
60 virtual double changer_temps(const double t);
61
62 // Warning, you must have set nb_comp and nature_du_champ before
63 // setting nb_valeurs_nodales.
64 virtual int fixer_nb_valeurs_nodales(int n);
65 // By default, these two methods cause an error. The call
66 // is invalid unless the field has a Domaine_dis
68 virtual const Domaine_dis_base& domaine_dis_base() const;
69 virtual int a_un_domaine_dis_base() const { return 0; } // By default, we don't know if a domain_dis_base will be defined
70
71 virtual void mettre_a_jour(double);
72 virtual void abortTimeStep();
73 virtual void resetTime(double time) = 0;
74 virtual Champ_base& affecter_(const Champ_base&) = 0;
76 void affecter_erreur();
77 virtual Champ_base& affecter_compo(const Champ_base&, int compo) = 0;
78 virtual int imprime(Sortie&, int) const =0;
79 // method removed to avoid confusion with trace(const Frontiere_dis_base&, DoubleTab&,,double)
80 //DoubleTab& trace(const Frontiere_dis_base&, DoubleTab&,int distant) const;
81 virtual DoubleTab& trace(const Frontiere_dis_base&, DoubleTab&, double, int distant) const;
82
83 virtual DoubleVect& valeur_a(const DoubleVect& position, DoubleVect& valeurs) const;
84 virtual DoubleVect& valeur_a_elem(const DoubleVect& position, DoubleVect& valeurs, int le_poly) const;
85 virtual double valeur_a_compo(const DoubleVect& position, int ncomp) const;
86 virtual double valeur_a_elem_compo(const DoubleVect& position, int le_poly, int ncomp) const;
87
88 virtual DoubleTab& valeur_aux_centres_de_gravite(const Domaine&, DoubleTab& valeurs) const;
89 virtual DoubleTab& valeur_aux(const DoubleTab& positions, DoubleTab& valeurs) const;
90 virtual DoubleVect& valeur_aux_compo(const DoubleTab& positions, DoubleVect& valeurs, int ncomp) const;
91 virtual DoubleTab& valeur_aux_elems(const DoubleTab& positions, const IntVect& les_polys, DoubleTab& valeurs) const;
92 virtual DoubleTab& valeur_aux_elems_passe(const DoubleTab& positions, const IntVect& les_polys, DoubleTab& tab_valeurs) const {Process::exit("Must be override"); throw;};
93 virtual DoubleVect& valeur_aux_elems_compo(const DoubleTab& positions, const IntVect& les_polys, DoubleVect& valeurs, int ncomp) const;
94 virtual DoubleTab& valeur_aux_elems_smooth(const DoubleTab& positions, const IntVect& les_polys, DoubleTab& valeurs);
95 virtual DoubleVect& valeur_aux_elems_compo_smooth(const DoubleTab& positions, const IntVect& les_polys, DoubleVect& valeurs, int ncomp);
96 virtual DoubleVect& valeur_a_sommet(int, const Domaine&, DoubleVect&) const;
97 virtual double valeur_a_sommet_compo(int, int, int) const;
98 virtual DoubleTab& valeur_aux_sommets(const Domaine&, DoubleTab&) const;
99 virtual DoubleVect& valeur_aux_sommets_compo(const Domaine&, DoubleVect&, int) const;
100 virtual DoubleTab& eval_elem(DoubleTab& valeurs) const;
101
102
103 /* these methods only apply if a_un_domaine_dis_base() */
104 virtual DoubleTab& valeur_aux_faces(DoubleTab& result) const;
105 virtual DoubleTab valeur_aux_bords() const;
106
107 // XXX Elie SAIKALI : addition for CGNS => useful for vdf face fields ...
108 virtual DoubleTab& valeur_aux_faces_post(DoubleTab& result) const
109 {
110 return valeur_aux_faces(result); // by default => valeur_aux_faces
111 }
112
113 void calculer_valeurs_som_post(DoubleTab& valeurs, int nbsom, Nom& nom_post, const Domaine& dom) const;
114 void calculer_valeurs_som_compo_post(DoubleTab& valeurs, int ncomp, int nbsom, Nom& nom_post, const Domaine& dom, int appliquer_cl=0) const;
115 void calculer_valeurs_elem_post(DoubleTab& valeurs, int nbelem, Nom& nom_post, const Domaine& dom) const;
116 void calculer_valeurs_elem_compo_post(DoubleTab& valeurs, int ncomp, int nbelem, Nom& nom_post, const Domaine& dom) const;
118 virtual int completer_post_champ(const Domaine& dom, const int axi, const Nom& loc_post, const Nom& le_nom_champ_post, Format_Post_base& format) const;
119 virtual void completer(const Domaine_Cl_dis_base& zcl);
120
121protected:
122
123 double temps_;
124};
125
126#endif
class Champ_Proto Class representing a Field prototype.
Definition Champ_Proto.h:37
virtual DoubleTab & valeurs()=0
virtual DoubleVect & valeur_aux_elems_compo_smooth(const DoubleTab &positions, const IntVect &les_polys, DoubleVect &valeurs, int ncomp)
void calculer_valeurs_som_compo_post(DoubleTab &valeurs, int ncomp, int nbsom, Nom &nom_post, const Domaine &dom, int appliquer_cl=0) const
double temps_
Definition Champ_base.h:123
virtual double valeur_a_sommet_compo(int, int, int) const
Returns the compo-th coordinate of the values at the element le_poly at the vertex sommet.
virtual int imprime(Sortie &, int) const =0
virtual DoubleVect & valeur_a(const DoubleVect &position, DoubleVect &valeurs) const
Computes the "values" of the field at the point with coordinates "pos".
virtual DoubleTab & valeur_aux_elems_smooth(const DoubleTab &positions, const IntVect &les_polys, DoubleTab &valeurs)
virtual int a_un_domaine_dis_base() const
Definition Champ_base.h:69
virtual DoubleVect & valeur_a_sommet(int, const Domaine &, DoubleVect &) const
Time update.
void calculer_valeurs_elem_post(DoubleTab &valeurs, int nbelem, Nom &nom_post, const Domaine &dom) const
virtual void resetTime(double time)=0
virtual int completer_post_champ(const Domaine &dom, const int axi, const Nom &loc_post, const Nom &le_nom_champ_post, Format_Post_base &format) const
virtual int fixer_nb_valeurs_nodales(int n)
virtual void completer(const Domaine_Cl_dis_base &zcl)
Champ_base()
Default constructor of a Champ_base.
Champ_base & affecter(const Champ_base &)
Assign a field to another.
virtual const Domaine_dis_base & domaine_dis_base() const
virtual DoubleTab & eval_elem(DoubleTab &valeurs) const
virtual DoubleVect & valeur_aux_elems_compo(const DoubleTab &positions, const IntVect &les_polys, DoubleVect &valeurs, int ncomp) const
Causes an error! Must be overridden by derived classes.
virtual DoubleTab & valeur_aux_elems_passe(const DoubleTab &positions, const IntVect &les_polys, DoubleTab &tab_valeurs) const
Definition Champ_base.h:92
virtual double changer_temps(const double t)
Sets the time at which the field is defined.
virtual DoubleTab valeur_aux_bords() const
Returns the field value at the boundary faces.
void affecter_erreur()
virtual DoubleTab & valeur_aux_faces_post(DoubleTab &result) const
Definition Champ_base.h:108
void calculer_valeurs_elem_compo_post(DoubleTab &valeurs, int ncomp, int nbelem, Nom &nom_post, const Domaine &dom) const
virtual Champ_base & affecter_(const Champ_base &)=0
double temps() const
Returns the time of the field.
virtual void associer_domaine_dis_base(const Domaine_dis_base &)
virtual int nb_valeurs_nodales() const
Definition Champ_base.h:52
virtual DoubleVect & valeur_aux_sommets_compo(const Domaine &, DoubleVect &, int) const
Returns the compo-th value at the vertices of dom.
virtual DoubleTab & valeur_aux(const DoubleTab &positions, DoubleTab &valeurs) const
Causes an error! Must be overridden by derived classes.
virtual DoubleTab & valeur_aux_faces(DoubleTab &result) const
Returns the field value at the faces.
virtual DoubleTab & valeur_aux_elems(const DoubleTab &positions, const IntVect &les_polys, DoubleTab &valeurs) const
Causes an error! Must be overridden by derived classes.
void calculer_valeurs_som_post(DoubleTab &valeurs, int nbsom, Nom &nom_post, const Domaine &dom) const
virtual DoubleVect & valeur_a_elem(const DoubleVect &position, DoubleVect &valeurs, int le_poly) const
Causes an error! Must be overridden by derived classes.
virtual double valeur_a_compo(const DoubleVect &position, int ncomp) const
Computes the point value of the component "compo" of the field at the point with coordinates pos.
virtual double valeur_a_elem_compo(const DoubleVect &position, int le_poly, int ncomp) const
Causes an error! Must be overridden by derived classes.
virtual void abortTimeStep()
void corriger_unite_nom_compo()
This method will set the units and the name of components, it is not actually const!...
virtual DoubleTab & valeur_aux_sommets(const Domaine &, DoubleTab &) const
Returns the values at the vertices of the Domain dom.
virtual DoubleVect & valeur_aux_compo(const DoubleTab &positions, DoubleVect &valeurs, int ncomp) const
Same as valeur_aux(const DoubleTab &, DoubleTab &), but computes only the component compo of the fiel...
virtual void mettre_a_jour(double)
Update of the base class Champ_base: does nothing!
virtual Champ_base & affecter_compo(const Champ_base &, int compo)=0
virtual DoubleTab & valeur_aux_centres_de_gravite(const Domaine &, DoubleTab &valeurs) const
This method, generic but slow (calculation of gravity centers, filling les_poly, use of shape functio...
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 Domaine_Cl_dis_base Domaine_Cl_dis_base objects represent discretized boundary conditions
class Domaine_dis_base This class is the base of the hierarchy of discretized domains.
Base class for post-processing output formats for fields (lata, med, cgns, lml, single_lata).
class Frontiere_dis_base Class representing a discretized boundary.
A character string (Nom) in uppercase.
Definition Motcle.h:26
class Nom: a character string for naming TRUST objects.
Definition Nom.h:31
friend class Sortie
Definition Objet_U.h:70
static int axi
Definition Objet_U.h:96
static void exit(int exit_code=-1)
Exit routine for TRUST within a Kokkos region.
Definition Process.cpp:466