TRUST 1.9.8
HPC thermohydraulic platform
Loading...
Searching...
No Matches
Perte_Charge_Reguliere.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 <Perte_Charge_Reguliere.h>
17#include <Motcle.h>
18
19// XD perte_charge_reguliere source_base perte_charge_reguliere NO_BRACE Source term modelling the presence of a bundle
20// XD_CONT of tubes in a flow.
21// XD attr spec spec_pdcr_base spec REQ Description of longitudinale or transversale type.
22// XD attr zone_name chaine name_of_zone REQ Name of the sub-area occupied by the tube bundle. A Sous_Zone (Sub-area)
23// XD_CONT type object called zone_name should have been previously created.
24
25// XD spec_pdcr_base objet_lecture spec_pdcr_base NO_BRACE Class to read the source term modelling the presence of a
26// XD_CONT bundle of tubes in a flow. Cf=A Re-B.
27
28// XD longitudinale spec_pdcr_base longitudinale NO_BRACE Class to define the pressure loss in the direction of the tube
29// XD_CONT bundle.
30// XD attr dir chaine(into=["x","y","z"]) dir REQ Direction.
31// XD attr dd floattant dd REQ Tube bundle hydraulic diameter value. This value is expressed in m.
32// XD attr ch_a chaine(into=["a","cf"]) ch_a REQ Keyword to be used to set law coefficient values for the coefficient of
33// XD_CONT regular pressure losses.
34// XD attr a floattant a REQ Value of a law coefficient for regular pressure losses.
35// XD attr ch_b chaine(into=["b"]) ch_b OPT Keyword to be used to set law coefficient values for regular pressure
36// XD_CONT losses.
37// XD attr b floattant b OPT Value of a law coefficient for regular pressure losses.
38
39// XD transversale spec_pdcr_base transversale NO_BRACE Class to define the pressure loss in the direction perpendicular
40// XD_CONT to the tube bundle.
41// XD attr dir chaine(into=["x","y","z"]) dir REQ Direction.
42// XD attr dd floattant dd REQ Value of the tube bundle step.
43// XD attr chaine_d chaine(into=["d"]) chaine_d REQ Keyword to be used to set the value of the tube external diameter.
44// XD attr d floattant d REQ Value of the tube external diameter.
45// XD attr ch_a chaine(into=["a","cf"]) ch_a REQ Keyword to be used to set law coefficient values for the coefficient of
46// XD_CONT regular pressure losses.
47// XD attr a floattant a REQ Value of a law coefficient for regular pressure losses.
48// XD attr ch_b chaine(into=["b"]) ch_b OPT Keyword to be used to set law coefficient values for regular pressure
49// XD_CONT losses.
50// XD attr b floattant b OPT Value of a law coefficient for regular pressure losses.
51
52
53//Add a constructor for initialization
55{
56
57 D_ = - 1e3;
58 d_ = - 1e3;
59 a_ = - 1e3;
60 b_ = - 1e3;
61 Cf_ = -1e3;
62
63 couronne_tube = -1e3; ;
64 Cf_utilisateur = -1e3 ;
65 xo = -1e3;
66 yo = -1e3;
67 zo = -1e3;
68 dir[ 0 ] = -1e3 ;
69 dir[ 1 ] = -1e3 ;
70 dir[ 2 ] = -1e3 ;
71 h0 = -1e3;
72 h = -1e3 ;
73
74}
75
76/*! @brief Lit les specifications d'une perte de charge reguliere a partir d'un flot d'entree.
77 *
78 * @param (Entree& is) un flot d'entree
79 * @return (Entree&) le flot d'entree modifie
80 * @throws mot cle inattendu, on attendait "X","Y" ou "Z"
81 * @throws mot cle inattendu, on attendait "d"
82 * @throws mot cle inattendu, on attendait "longitudinale" ou
83 * "transversale"
84 */
86{
87 int dimension = Objet_U::dimension ;
88
89 for (int i =0; i<dimension; i++ ) dir[i] = 0 ;
90
91 couronne_tube = 0 ;
92 Cf_utilisateur = 0 ;
93
94 Motcle motlu;
95 Motcles les_motcles(6);
96 les_motcles[0] = "X";
97 les_motcles[1] = "Y";
98 les_motcles[2] = "Z";
99 les_motcles[3] = "A";
100 les_motcles[4] = "B";
101 les_motcles[5] = "CF";
102
103 is >> motlu;
104 if (motlu == "longitudinale")
105 {
106 is >> motlu;
107 int rang = les_motcles.search(motlu);
108 if (rang == -1)
109 {
110 Cerr << "Erreur a la lecture des donnees de Perte_Charge_Reguliere" << finl;
111 Cerr << "On attendait l'un des mots cles" << les_motcles << finl;
112 Cerr << "a la place de " << motlu << finl;
114 }
115 else
116 {
118 is >> D_;
119 Cerr << "D_ " << D_ << finl;
120 }
121 d_ = D_;
122 }
123 else if (motlu == "transversale")
124 {
125 is >> motlu;
126 int rang = les_motcles.search(motlu);
127 if (rang == -1)
128 {
129 Cerr << "Erreur a la lecture des donnees de Perte_Charge_Reguliere" << finl;
130 Cerr << "On attendait l'un des mots cles" << les_motcles << finl;
131 Cerr << "a la place de " << motlu << finl;
133 }
134 else
135 {
137 is >> D_;
138 }
139 is >> motlu;
140 if (motlu != "d")
141 {
142 Cerr << "Erreur a la lecture des donnees de Perte_Charge_Reguliere" << finl;
143 Cerr << "On attendait le mot cle d a la place de " << motlu << finl;
145 }
146 else
147 {
148 is >> d_;
149 }
150 }
151 else if (motlu == "couronne")
152 {
153 couronne_tube = 1 ;
154
155 if(dimension!=2)
156 {
157 // Une Couronne en 2D seulement !
158 Cerr << "Une couronne est en 2D seulement : en dim 3 Tube "<< finl;
160 }
161 is >> motlu;
162 if(motlu!=Motcle("Origine"))
163 {
164 Cerr << "On attendait le mot cle ORIGINE " << finl;
166 }
167
168 is >> xo >> yo ;
169 is >> motlu;
170 if (motlu != "d")
171 {
172 Cerr << "Erreur a la lecture des donnees de Perte_Charge_Reguliere" << finl;
173 Cerr << "On attendait le mot cle d a la place de " << motlu << finl;
175 }
176 else
177 {
178 is >> d_;
179 D_ = d_;
180 }
182 dir[0] = 1 ;
183 dir[1] = 1 ;
184 }
185 else if (motlu == "tube")
186 {
187 couronne_tube = 1 ;
188 if(dimension!=3)
189 {
190 // Un tube en 3D seulement !
191 Cerr << "Un tube est en 3D seulement : en dim 2 couronne "<< finl;
193 }
194 is >> motlu;
195 if(motlu!=Motcle("Origine"))
196 {
197 Cerr << "On attendait le mot cle ORIGINE " << finl;
199 }
200 is >> xo >> yo >> zo;
201 is >> motlu;
202 if(motlu!=Motcle("DIR"))
203 {
204 Cerr << "On attendait la direction du tube, mot cle : DIR " << finl;
206 }
207 int idir;
208 is >> idir;
209 switch(idir)
210 {
211 case 0:
212 dir[0]=0;
213 dir[1]=dir[2]=1;
214 h0=xo;
215 break;
216 case 1:
217 dir[1]=0;
218 dir[0]=dir[2]=1;
219 h0=yo;
220 break;
221 case 2:
222 dir[2]=0;
223 dir[1]=dir[0]=1;
224 h0=zo;
225 break;
226 default:
227 h0=-1;
228 Cerr << "DIR vaut 0 pour tube // OX ; 1 pour un tube // OY et 2 pour un tube // OZ " << finl;
230 }
231 is >> motlu;
232 if (motlu != "d")
233 {
234 Cerr << "Erreur a la lecture des donnees de Perte_Charge_Reguliere" << finl;
235 Cerr << "On attendait le mot cle d a la place de " << motlu << finl;
237 }
238 else
239 {
240 is >> d_;
241 D_ = d_;
242 }
244 }
245 else
246 {
247 Cerr << "Erreur a la lecture des donnees de Perte_Charge_Reguliere" << finl;
248 Cerr << "On attendait le mot cle longitudinale ou transversale ou couronne(en 2D) ou tube(en 3D)" << finl;
249 Cerr << "a la place de " << motlu << finl;
251 }
252
253 // Lecture obligatoire de a_ et b_ :
254 int err=0;
255 is >> motlu;
256 if (motlu == "A")
257 is >> a_;
258 else
259 err=1;
260 if (err)
261 {
262 if (motlu == "CF")
263 {
264 is >> Cf_;
265 Cf_utilisateur = 1;
266 Cerr << " Cf_ " << Cf_ << finl;
267 }
268 }
269 else
270 {
271 is >> motlu;
272 if (motlu == "B")
273 is >> b_;
274 else
275 err=1;
276
277 }
278 if (err)
279 {
280 if (!Cf_utilisateur)
281 {
282 Cerr << "Erreur a la lecture des donnees de Perte_Charge_Reguliere" << finl;
283 Cerr << "Il faut desormais specifier les valeurs de la loi de la perte de charge :" << finl;
284 Cerr << "Exemple : Perte_Charge_Reguliere longitudinale X val A val B val" << finl;
285 Cerr << "Avec A et B, pour une loi de perte de charge en A.Re**(-B)" << finl;
286 Cerr << "Pour la loi de Blasius : A=0.316, B=0.25" << finl;
288 }
289 }
290 else
291 Cerr << a_ << " " << b_ << finl;
292
293 return is;
294}
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
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
static int dimension
Definition Objet_U.h:99
Entree & lire_donnees(Entree &)
Lit les specifications d'une perte de charge reguliere a partir d'un flot d'entree.
Classe Perte_Charge Cette classe represente un terme de perte de charge quiest introduit.
int direction_perte_charge_
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Definition Process.cpp:455