TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
LoiParoiHybride.cpp
1/****************************************************************************
2* Copyright (c) 2015 - 2016, 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 <LoiParoiHybride.h>
17#include <Motcle.h>
18
19
20#include <EChaine.h>
21#include <Dirichlet_paroi_fixe.h>
22#include <Dirichlet_paroi_defilante.h>
23#include <Front_VF.h>
24#include <Cond_lim.h>
25#include <Domaine_Cl_dis_base.h>
26
27
28
29
31{
32 const int nbord = noms_bord.size();
33 int lp_lue=0;
34
35 Motcle accouverte = "{" ;//, accfermee = "}" ;
36 int N;
37 Motcle motlu;
38
39 //Lecture nb de loi de parois (LP par defaut comprise)
40 is >> N;
41 vect_lp.dimensionner(N);
42 lp_bord=0;
43
44 //Lecture de la loi de paroi par defaut :
45 is >> motlu;
46
47 if (motlu!="defaut")
48 {
49 Cerr << "Avec LoiParoiHybride, vous devez rentrer obligatoirement une loi de paroi par defaut !"<< finl;
51 }
52 vect_lp[0]->associer_modele(mod);
53 is >> vect_lp[0];
54
55 is >> motlu;
56 if (motlu==accouverte)
57 is >> vect_lp[0].valeur();
58 else
59 lp_lue=1;
60
61 //Lecture des autres lois de paroi
62 for (int i=1; i<N; i++)
63 {
64 int m;
65
66 vect_lp[i]->associer_modele(mod);
67 if (lp_lue==0)
68 is >> vect_lp[i];
69 else // C est un peu tordu cette histoire de lecture des lois de paroi seulement si un "{" est lu
70 {
71 EChaine ech(motlu);
72 ech >> vect_lp[i];
73 lp_lue=0;
74 }
75
76
77
78 is >> m;
79
80 for (int j=0; j<m; j++)
81 {
82 Nom bord;
83 is>>bord;
84 for (int ibord=0; ibord<nbord; ibord++)
85 {
86 if (bord==noms_bord[ibord])
87 {
88 lp_bord(ibord)=i;
89 break;
90 }
91 }
92 }
93
94 is >> motlu;
95 if (motlu==accouverte)
96 is >> vect_lp[i].valeur();
97 else
98 lp_lue=1;
99
100 }
101 //for (int ibord=0;ibord<nbord;ibord++)
102 // Cout << "lp_bord("<<ibord<<") " << lp_bord(ibord) << finl;
103
104 if (lp_lue==0)
105 is >> motlu;
106 return is;
107}
108
110{
111 int size = vect_lp.size();
112 for (int ilp=0; ilp<size; ilp++)
113 {
114 vect_lp[ilp]->associer(zd, zcl);
115 }
116 lp_bord.resize(zd.nb_front_Cl());
117}
118
119
121{
122 //dimensionnement du cisaillement ?? selon discretisation ???....
123
124 int size = vect_lp.size();
125 for (int ilp=0; ilp<size; ilp++)
126 {
127 vect_lp[ilp]->init_lois_paroi();
128 }
129
130 return 1;
131}
132
134{
135 int size = vect_lp.size();
136 for (int ilp=0; ilp<size; ilp++)
137 {
138 vect_lp[ilp]->calculer_hyd(tab1);
139 }
140
141 //Remplissage du tableau Cisaillement en fonction du choix de la LP par bord
142
143
144 return 1;
145}
146
147int LoiParoiHybride::calculer_hyd(DoubleTab& tab1, const Domaine_dis_base& zd, const Domaine_Cl_dis_base& zcl, DoubleTab& tab_cis)
148{
149 int size = vect_lp.size();
150 for (int ilp=0; ilp<size; ilp++)
151 {
152 vect_lp[ilp]->calculer_hyd(tab1);
153 }
154
155 //Remplissage du tableau Cisaillement en fonction du choix de la LP par bord
156 for (int n_bord=0; n_bord<zd.nb_front_Cl(); n_bord++)
157 {
158 const Cond_lim& la_cl = zcl.les_conditions_limites(n_bord);
159 const Front_VF& le_bord = ref_cast(Front_VF,la_cl->frontiere_dis());
160 int ndeb = le_bord.num_premiere_face();
161 int nfin = ndeb + le_bord.nb_faces();
162 if (sub_type(Dirichlet_paroi_fixe,la_cl.valeur()) || sub_type(Dirichlet_paroi_defilante,la_cl.valeur() ))
163 {
164 const DoubleTab& tau = vect_lp[lp_bord(n_bord)]->Cisaillement_paroi();
165
166 for (int num_face=ndeb; num_face<nfin; num_face++)
167 {
168 for (int idim=0; idim<Objet_U::dimension; idim++)
169 tab_cis(num_face,idim) = tau(num_face,idim);
170 }
171 }
172 }
173
174 tab_cis.echange_espace_virtuel();
175
176
177 return 1;
178}
179
180
181int LoiParoiHybride::calculer_hyd(DoubleTab& tab1, DoubleTab& tab2)
182{
183 int size = vect_lp.size();
184 for (int ilp=0; ilp<size; ilp++)
185 {
186 vect_lp[ilp]->calculer_hyd(tab1, tab2);
187 }
188
189 //Remplissage du tableau Cisaillement en fonction du choix de la LP par bord
190
191
192 return 1;
193}
194
195int LoiParoiHybride::calculer_hyd(DoubleTab& tab1, DoubleTab& tab2, const Domaine_dis_base& zd, const Domaine_Cl_dis_base& zcl, DoubleTab& tab_cis)
196{
197 int size = vect_lp.size();
198 for (int ilp=0; ilp<size; ilp++)
199 {
200 vect_lp[ilp]->calculer_hyd(tab1, tab2);
201 }
202
203 //Remplissage du tableau Cisaillement en fonction du choix de la LP par bord
204 for (int n_bord=0; n_bord<zd.nb_front_Cl(); n_bord++)
205 {
206 const Cond_lim& la_cl = zcl.les_conditions_limites(n_bord);
207 const Front_VF& le_bord = ref_cast(Front_VF,la_cl->frontiere_dis());
208 int ndeb = le_bord.num_premiere_face();
209 int nfin = ndeb + le_bord.nb_faces();
210 if (sub_type(Dirichlet_paroi_fixe,la_cl.valeur()) || sub_type(Dirichlet_paroi_defilante,la_cl.valeur() ))
211 {
212 const DoubleTab& tau = vect_lp[lp_bord(n_bord)]->Cisaillement_paroi();
213
214 for (int num_face=ndeb; num_face<nfin; num_face++)
215 {
216 for (int idim=0; idim<Objet_U::dimension; idim++)
217 tab_cis(num_face,idim) = tau(num_face,idim);
218 }
219 }
220 }
221
222 tab_cis.echange_espace_virtuel();
223
224
225
226 return 1;
227}
228
229
230int LoiParoiHybride::calculer_hyd_BiK(DoubleTab& tab_k, DoubleTab& tab_eps)
231{
232 int size = vect_lp.size();
233 for (int ilp=0; ilp<size; ilp++)
234 {
235 vect_lp[ilp]->calculer_hyd(tab_k,tab_eps);
236 }
237
238 //Remplissage du tableau Cisaillement en fonction du choix de la LP par bord
239
240
241 return 1;
242}
243
244int LoiParoiHybride::calculer_hyd_BiK(DoubleTab& tab_k, DoubleTab& tab_eps, Domaine_dis_base const& zd, Domaine_Cl_dis_base const& zcl, DoubleTab& tab_cis)
245{
246 int size = vect_lp.size();
247 for (int ilp=0; ilp<size; ilp++)
248 {
249 vect_lp[ilp]->calculer_hyd(tab_k,tab_eps);
250 }
251
252 //Remplissage du tableau Cisaillement en fonction du choix de la LP par bord
253 for (int n_bord=0; n_bord<zd.nb_front_Cl(); n_bord++)
254 {
255 const Cond_lim& la_cl = zcl.les_conditions_limites(n_bord);
256 const Front_VF& le_bord = ref_cast(Front_VF,la_cl->frontiere_dis());
257 int ndeb = le_bord.num_premiere_face();
258 int nfin = ndeb + le_bord.nb_faces();
259 if (sub_type(Dirichlet_paroi_fixe,la_cl.valeur()) || sub_type(Dirichlet_paroi_defilante,la_cl.valeur() ))
260 {
261 const DoubleTab& tau = vect_lp[lp_bord(n_bord)]->Cisaillement_paroi();
262
263 for (int num_face=ndeb; num_face<nfin; num_face++)
264 {
265 for (int idim=0; idim<Objet_U::dimension; idim++)
266 tab_cis(num_face,idim) = tau(num_face,idim);
267 }
268 }
269 }
270
271 tab_cis.echange_espace_virtuel();
272
273
274 return 1;
275}
276
classe Cond_lim Classe generique servant a representer n'importe quelle classe
Definition Cond_lim.h:31
classe Dirichlet_paroi_defilante Impose la vitesse de paroi dnas une equation de type Navier_Stokes.
classe Dirichlet_paroi_fixe Represente une paroi immobile dans une equation de type Navier_Stokes.
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
const Cond_lim & les_conditions_limites(int) const
Renvoie la i-ieme condition aux limites.
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
int nb_front_Cl() const
Une entree dont la source est une chaine de caracteres.
Definition EChaine.h:31
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
class Front_VF
Definition Front_VF.h:36
int nb_faces() const
Definition Front_VF.h:53
int num_premiere_face() const
Definition Front_VF.h:63
int calculer_hyd_BiK(DoubleTab &, DoubleTab &)
int calculer_hyd(DoubleTab &)
Entree & lire(Entree &, const Noms &, const Modele_turbulence_hyd_base &)
void associer(const Domaine_dis_base &, const Domaine_Cl_dis_base &)
Classe Modele_turbulence_hyd_base Cette classe sert de base a la hierarchie des classes.
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
Un tableau de chaine de caracteres (VECT(Nom)).
Definition Noms.h:26
static int dimension
Definition Objet_U.h:99
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Definition Process.cpp:455
virtual void echange_espace_virtuel(IsExchangeBlocking exchange_type=IsExchangeBlocking::DefaultBlocking, const std::string kernel_name="noname")