TRUST 1.9.8
HPC thermohydraulic platform
Loading...
Searching...
No Matches
Champ_Generique_Divergence.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_Divergence.h>
17#include <Champ_Generique_refChamp.h>
18#include <Discretisation_base.h>
19#include <Synonyme_info.h>
20
21Implemente_instanciable(Champ_Generique_Divergence,"Divergence",Champ_Generique_Operateur_base);
22// XD divergence champ_post_operateur_base divergence INHERITS_BRACE To calculate divergency of a given field.
23
24Add_synonym(Champ_Generique_Divergence,"Champ_Post_Operateur_Divergence");
25
27{
28 return s << que_suis_je() << " " << le_nom();
29}
30
32{
34
35 return s ;
36}
37
39{
41 const Probleme_base& Pb = get_ref_pb_base();
42 //On ne complete l operateur que s il sagit du champ de vitesse
43
44 if (sub_type(Champ_Generique_refChamp,get_source(0)))
45 {
46 OWN_PTR(Champ_base) espace_stockage;
47 if (get_source(0).get_champ(espace_stockage).le_nom()=="vitesse")
48 {
49 const Equation_base& eqn = Pb.equation(0);
50 Op_Div_.associer_eqn(eqn);
51 Op_Div_.typer();
52 Op_Div_.l_op_base().associer_eqn(eqn);
53
54 //La methode completer() lance l association du domaine_discretisee
55 //qui est recuperre par l equation associee a l operateur
56 Op_Div_->completer();
57 }
58 }
59}
60
62{
63
64
65 if (Op_Div_)
66 {
68 espace_stockage = creer_espace_stockage(scalaire,1,es_tmp);
69 }
70 else
71 {
72 //const Noms nom = get_source(0).get_property("nom");
73 Cerr<<"We can apply a Champ_Generique_Divergence only to the velocity field"<<finl;
74 exit();
75 }
76 return espace_stockage;
77}
79{
80
81 OWN_PTR(Champ_base) source_espace_stockage;
82 const Champ_base& source = get_source(0).get_champ(source_espace_stockage);
83
84 if (Op_Div_)
85 {
87 espace_stockage = creer_espace_stockage(scalaire,1,es_tmp);
88 Op_Div_.calculer(source.valeurs(),espace_stockage->valeurs());
89 }
90 else
91 {
92 const Noms nom = get_source(0).get_property("nom");
93 Cerr<<"We can apply a Champ_Generique_Divergence only to the velocity field"<<finl;
94 Cerr<<"The field treated here "<<nom[0]<<" concerns "<<source.le_nom()<<finl;
95 exit();
96 }
97
98 DoubleTab& espace_valeurs = espace_stockage->valeurs();
99 espace_valeurs.echange_espace_virtuel();
100 return espace_stockage;
101}
102
103
105{
106 Entity loc;
107 Nom type_op = Op_Div_->que_suis_je();
108 if (((type_op=="Op_Div_VEF_P1NC") || (type_op=="Op_Div_VDF_Face")) && (index <= 0))
109 loc = Entity::ELEMENT;
110 else
111 {
112 Cerr << "Error of type : Divergence operator " << type_op << " is not possible for the defined field " << nom_post_ << finl;
113 throw Champ_Generique_erreur("INVALID");
114 }
115 return loc;
116}
118{
119
120 Motcles motcles(2);
121 motcles[0] = "composantes";
122 motcles[1] = "unites";
123
124 int rang = motcles.search(query);
125 switch(rang)
126 {
127 case 0:
128 {
129 Noms compo(1);
130 Nom nume((int)0);
131 compo[0] = nom_post_+nume;
132
133 return compo;
134 }
135
136 case 1:
137 {
138
139 Noms unites(1);
140 Noms source_unites = get_source(0).get_property("unites");
141 unites[0] = source_unites[0]+"/m";
142
143 return unites;
144 }
145 }
147}
148
149//Nomme le champ en tant que source par defaut
150//"Divergence_" + nom_champ_source
152{
153 if (nom_post_=="??")
154 {
155 Nom nom_post_source, nom_champ_source;
156 const Noms nom = get_source(0).get_property("nom");
157 nom_champ_source = nom[0];
158 nom_post_source = "Divergence_";
159 nom_post_source += nom_champ_source;
160 nommer(nom_post_source);
161 }
162}
163
165{
166 Motcle directive;
167 directive = "divergence_vitesse";
168 return directive;
169}
classe Champ_Fonc_base Classe de base des champs qui sont fonction d'une grandeur calculee
const Noms get_property(const Motcle &query) const override
Renvoie la propriete demandee.
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
Renvoie le probleme qui porte le champ cible.
virtual const Champ_Generique_base & get_source(int i) const
class Champ_Generique_Divergence
const Champ_base & get_champ_without_evaluation(OWN_PTR(Champ_base)&espace_stockage) const override
Entity get_localisation(const int index=-1) const override
Renvoie le type des entites geometriques sur auxquelles les valeurs discretes sont attachees (NODE po...
void completer(const Postraitement_base &post) override
const Noms get_property(const Motcle &query) const override
Renvoie la propriete demandee.
const Champ_base & get_champ(OWN_PTR(Champ_base)&espace_stockage) const override
const Motcle get_directive_pour_discr() const override
Renvoie la directive (champ_elem, champ_sommets, champ_face ou pression) pour lancer la discretisatio...
Classe Champ_Generique_Operateur_base Classe de base des classes de champs generiques dediees a l 'ap...
virtual const Noms get_property(const Motcle &query) const
Renvoie la propriete demandee.
virtual const Champ_base & get_champ(OWN_PTR(Champ_base) &espace_stockage) const =0
void nommer(const Nom &nom) override
Donne un nom a l'Objet_U Methode virtuelle a surcharger.
Classe de champ particuliere qui encapsule une reference a un champ volumique de TRUST de type Champ_...
virtual DoubleTab & valeurs()=0
classe Champ_base Cette classe est la base de la hierarchie des champs.
Definition Champ_base.h:43
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
classe Equation_base Le role d'une equation est le calcul d'un ou plusieurs champs....
const Nom & le_nom() const override
Renvoie le nom du champ.
Une chaine de caractere (Nom) en majuscules.
Definition Motcle.h:26
Un tableau d'objets de la classe Motcle.
Definition Motcle.h:63
int search(const Motcle &t) const
Definition Motcle.cpp:321
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
Un tableau de chaine de caracteres (VECT(Nom)).
Definition Noms.h:26
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
Definition Objet_U.cpp:104
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
Definition Objet_U.cpp:293
virtual const Nom & le_nom() const
Donne le nom de l'Objet_U Methode a surcharger : renvoie "neant" dans cette implementation.
Definition Objet_U.cpp:319
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 pour l'ensemble des postraitements.
classe Probleme_base C'est un Probleme_U qui n'est pas un couplage.
virtual const Equation_base & equation(int) const =0
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Definition Process.cpp:455
Classe de base des flux de sortie.
Definition Sortie.h:52
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")