TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Pb_Thermohydraulique_sensibility.cpp
1/****************************************************************************
2* Copyright (c) 2020, 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 <Pb_Thermohydraulique_sensibility.h>
17#include <Fluide_Ostwald.h>
18#include <Verif_Cl.h>
19#include <Probleme_base.h>
20
21Implemente_instanciable( Pb_Thermohydraulique_sensibility, "Pb_Thermohydraulique_sensibility", Pb_Fluide_base ) ;
22// XD Pb_Thermohydraulique_sensibility pb_thermohydraulique Pb_Thermohydraulique_sensibility INHERITS_BRACE Resolution
23// XD_CONT of Resolution of thermohydraulic sensitivity problem
24// XD attr fluide_incompressible fluide_incompressible fluide_incompressible REQ The fluid medium associated with the
25// XD_CONT problem.
26// XD attr Convection_Diffusion_Temperature_Sensibility Convection_Diffusion_Temperature_sensibility convection_diffusion_temperature REQ Convection diffusion temperature sensitivity equation
27// XD attr Navier_Stokes_standard_sensibility Navier_Stokes_standard_sensibility Navier_Stokes_standard_sensibility REQ
28// XD_CONT Navier Stokes sensitivity equation
29
30
31/*! @brief Simple appel a: Pb_Fluide_base::printOn(Sortie&) Ecrit le probleme sur un flot de sortie.
32 *
33 * @param (Sortie& os) un flot de sortie
34 * @return (Sortie&) le flot de sortie modifie
35 */
37{
39 return os;
40}
41
42
43/*! @brief Simple appel a: Pb_Fluide_base::readOn(Entree&) Lit le probleme a partir d'un flot d'entree.
44 *
45 * @param (Entree& is) un flot d'entree
46 * @return (Entree&) le flot d'entree modifie
47 */
49{
51 return is;
52}
53
54/*! @brief Renvoie le nombre d'equation, Renvoie 2 car il y a 2 equations a un probleme de
55 *
56 * thermo-hydraulique standard:
57 * l'equation de Navier Stokes
58 * l' equation de la thermique de type Convection_Diffusion_Temperature
59 *
60 * @return (int) le nombre d'equation
61 */
66
67/*! @brief Renvoie l'equation d'hydraulique de type Navier_Stokes_std si i=0 Renvoie l'equation de la thermique de type
68 *
69 * Convection_Diffusion_Temperature si i=1
70 * (version const)
71 *
72 * @param (int i) l'index de l'equation a renvoyer
73 * @return (Equation_base&) l'equation correspondante a l'index
74 */
76{
77 if ( !( i==0 || i==1 ) )
78 {
79 Cerr << "\nError in Pb_Thermohydraulique::equation() : Wrong number of equation !" << finl;
81 }
82 if (i == 0)
83 return eq_hydraulique;
84 else
85 return eq_thermique;
86}
87
88/*! @brief Renvoie l'equation d'hydraulique de type Navier_Stokes_std si i=0 Renvoie l'equation de la thermique de type
89 *
90 * Convection_Diffusion_Temperature si i=1
91 *
92 * @param (int i) l'index de l'equation a renvoyer
93 * @return (Equation_base&) l'equation correspondante a l'index
94 */
96{
97 if ( !( i==0 || i==1 ) )
98 {
99 Cerr << "\nError in Pb_Thermohydraulique::equation() : Wrong number of equation !" << finl;
101 }
102 if (i == 0)
103 return eq_hydraulique;
104 else
105 return eq_thermique;
106}
107
108
109/*! @brief Associe le milieu au probleme Le milieu doit etre de type fluide incompressible
110 *
111 * @param (Milieu_base& mil) le milieu physique a associer au probleme
112 * @throws mauvais type de milieu physique
113 */
115{
116 if (sub_type(Fluide_Incompressible,mil))
117 {
118 eq_hydraulique.associer_milieu_base(mil);
119 eq_thermique.associer_milieu_base(mil);
120 }
121 else
122 {
123 Cerr << "Un milieu de type " << mil.que_suis_je() << " ne peut etre associe a "<< finl;
124 Cerr << "un probleme de type Pb_Thermohydraulique_sensibility " << finl;
126 }
127}
128
129
130
131/*! @brief Teste la compatibilite des equations de la thermique et de l'hydraulique.
132 *
133 * Le test se fait sur les conditions
134 * aux limites discretisees de chaque equation.
135 * Appel la fonction de librairie hors classe:
136 * tester_compatibilite_hydr_thermique(const Domaine_Cl_dis_base&,const Domaine_Cl_dis_base&)
137 *
138 * @return (int) code de retour propage
139 */
141{
142 const Domaine_Cl_dis_base& domaine_Cl_hydr = eq_hydraulique.domaine_Cl_dis();
143 const Domaine_Cl_dis_base& domaine_Cl_th = eq_thermique.domaine_Cl_dis();
144 return tester_compatibilite_hydr_thermique(domaine_Cl_hydr,domaine_Cl_th);
145}
146
147/*void Pb_Hydraulique_sensibility::finir()
148{
149
150 Probleme_base::finir();
151
152 Navier_Stokes_std& eqnNS = ref_cast(Navier_Stokes_std,equation(0));
153 const DoubleTab& vitesse= eqnNS.inconnue();
154 if( equation(0).que_suis_je() == "Navier_Stokes_standard")
155 {
156 Nom nom_fichier_vitesse("Velocity_state.txt");
157 SFichier file_vitesse(nom_fichier_vitesse);
158 Nom nom_fichier_centre_faces("Center_gravity_faces.txt");
159 SFichier file_c_faces(nom_fichier_centre_faces);
160 const Zone_VEF& la_zone = ref_cast(Zone_VEF,eqnNS.zone_dis().valeur());
161 const DoubleTab& xv= la_zone.xv();
162 assert(xv.dimension(0)==vitesse.dimension(0));
163 for(int face=0; face<vitesse.dimension(0); face++)
164 {
165 file_vitesse<<vitesse(face, 0)<<" "<<vitesse(face, 1)<<finl;
166 file_c_faces<<xv(face, 0)<<" "<<xv(face, 1)<<finl;
167 }
168 }
169 else if( equation(0).que_suis_je() == "Navier_Stokes_standard_sensibility")
170 {
171 Nom nom_fichier_vitesse("Velocity_sensibility.txt");
172 SFichier file_vitesse(nom_fichier_vitesse);
173 for(int face=0; face<vitesse.dimension(0); face++)
174 {
175 file_vitesse<<vitesse(face, 0)<<" "<<vitesse(face, 1)<<finl;
176 }
177 }
178 if(nombre_d_equations() == 2 )
179 {
180 Convection_Diffusion_Temperature& eqnCDT = ref_cast(Convection_Diffusion_Temperature,equation(1));
181 const DoubleTab& temperature= eqnCDT.inconnue();
182 if (equation(1).que_suis_je() == "Convection_Diffusion_Temperature")
183 {
184 Nom nom_fichier_temp("Temperature_state.txt");
185 SFichier file_temp(nom_fichier_temp);
186 for(int face=0; face<temperature.size(); face++)
187 {
188 file_temp<<temperature(face)<<finl;
189 }
190
191 }
192 else if (equation(1).que_suis_je() == "Convection_Diffusion_Temperature_sensibility")
193 {
194 Nom nom_fichier_temp("Temperature_sensibility.txt");
195 SFichier file_temp(nom_fichier_temp);
196 for(int face=0; face<temperature.size(); face++)
197 {
198 file_temp<<temperature(face)<<finl;
199 }
200 }
201 }
202
203} */
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
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....
classe Fluide_Incompressible Cette classe represente un d'un fluide incompressible ainsi que
classe Milieu_base Cette classe est la base de la hierarchie des milieux (physiques)
Definition Milieu_base.h:50
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 Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
Definition Objet_U.cpp:282
classe Pb_Fluide_base Cette classe a pour but de disposer d une classe amont pour
: class Pb_Thermohydraulique_sensibility
void associer_milieu_base(const Milieu_base &) override
Associe le milieu au probleme Le milieu doit etre de type fluide incompressible.
int verifier() override
Teste la compatibilite des equations de la thermique et de l'hydraulique.
Convection_Diffusion_Temperature_sensibility eq_thermique
int nombre_d_equations() const override
Renvoie le nombre d'equation, Renvoie 2 car il y a 2 equations a un probleme de.
const Equation_base & equation(int) const override
Renvoie l'equation d'hydraulique de type Navier_Stokes_std si i=0 Renvoie l'equation de la thermique ...
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