TrioCFD 1.9.8
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 classe Champ_base Cette classe est la base de la hierarchie des champs.
32 *
33 * Ses membres sont les attributs et les methodes communs
34 * a toutes les classes qui representent des champs.
35 * Champ_base derive de Champ_Proto, afin d'avoir une interface conforme
36 * a tous les champs, et d'heriter des operations courantes sur les
37 * Champs.
38 * Un champ possede un nom, une unite et des valeurs.
39 *
40 * @sa Champ_Proto Ch_Inc_base Ch_Don_base, Classe abstraite, Methodes abstraites:, 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 // Nouvelles methodes
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 // Attention, il faut avoir fixe nb_comp et nature_du_champ avant
63 // de fixer le nb_valeurs_nodales.
64 virtual int fixer_nb_valeurs_nodales(int n);
65 // Par defaut, ces deux methodes provoquent une erreur. L'appel
66 // est invalide sauf si le champ possede un Domaine_dis
68 virtual const Domaine_dis_base& domaine_dis_base() const;
69 virtual int a_un_domaine_dis_base() const { return 0; } // Par defaut, on ne sait pas si un domain_dis_base sera defini
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 // methode supprime pour eviter confusion avec 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 /* ces methodes ne s'appliquent que si 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 : ajout pour CGNS => utile pour champs faces vdf ...
108 virtual DoubleTab& valeur_aux_faces_post(DoubleTab& result) const
109 {
110 return valeur_aux_faces(result); // par defaut => 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
classe Champ_Proto Classe representant un prototype de Champ.
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
renvoi la compo eme corrdonne des valeurs a l'element le_poly au sommet sommet
virtual int imprime(Sortie &, int) const =0
virtual DoubleVect & valeur_a(const DoubleVect &position, DoubleVect &valeurs) const
Calcule les "valeurs" du champ au point de coordonnees "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
Mise a jour en temps.
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()
Constructeur par defaut d'un Champ_base.
Champ_base & affecter(const Champ_base &)
Affecter un champ dans un autre.
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
provoque une erreur ! doit etre surchargee par les classes derivees
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)
Fixe le temps auquel se situe le champ.
virtual DoubleTab valeur_aux_bords() const
renvoie la valeur du champ aux faces de bord
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
Renvoie le temps du champ.
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
renvoie la compo eme valeur aux sommets de dom.
virtual DoubleTab & valeur_aux(const DoubleTab &positions, DoubleTab &valeurs) const
Provoque une erreur ! Doit etre surchargee par les classes derivees.
virtual DoubleTab & valeur_aux_faces(DoubleTab &result) const
renvoie la valeur du champ aux faces
virtual DoubleTab & valeur_aux_elems(const DoubleTab &positions, const IntVect &les_polys, DoubleTab &valeurs) const
provoque une erreur ! doit etre surchargee par les classes derivees
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
provoque une erreur ! doit etre surchargee par les classes derivees
virtual double valeur_a_compo(const DoubleVect &position, int ncomp) const
Calcule la valeur ponctuelle de la composante "compo" du champ au point de coordonnees pos.
virtual double valeur_a_elem_compo(const DoubleVect &position, int le_poly, int ncomp) const
provoque une erreur ! doit etre surchargee par les classes derivees
virtual void abortTimeStep()
void corriger_unite_nom_compo()
cette methode va fixer les unites et le nom des compos elle n'est pas const en realite !...
virtual DoubleTab & valeur_aux_sommets(const Domaine &, DoubleTab &) const
renvoie les valeurs aux sommets du Domaine dom
virtual DoubleVect & valeur_aux_compo(const DoubleTab &positions, DoubleVect &valeurs, int ncomp) const
Idem que valeur_aux(const DoubleTab &, DoubleTab &), mais calcule uniquement la composante compo du c...
virtual void mettre_a_jour(double)
mettre_a_jour de la classe de base Champ_base :ne fait rien !
virtual Champ_base & affecter_compo(const Champ_base &, int compo)=0
virtual DoubleTab & valeur_aux_centres_de_gravite(const Domaine &, DoubleTab &valeurs) const
Cette methode, generique mais lente (calcul des centres de gravite, remplissage les_poly,...
virtual DoubleTab & trace(const Frontiere_dis_base &, DoubleTab &, double, int distant) const
Calcule la trace d'un champ sur une frontiere au temps tps.
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
Classe de base des formats de postraitements pour les champs (lata, med, cgns, lml,...
classe Frontiere_dis_base Classe representant une frontiere discretisee.
Une chaine de caractere (Nom) en majuscules.
Definition Motcle.h:26
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
friend class Sortie
Definition Objet_U.h:75
static int axi
Definition Objet_U.h:101
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Definition Process.cpp:455