86 statistics().begin_count(STD_COUNTERS::turbulent_viscosity, statistics().get_last_opened_counter_level()+1);
91 if (
equation().probleme().is_dilatable())
92 correction_nut_et_cisaillement_paroi_si_qc(*
this);
94 la_viscosite_turbulente_->valeurs().echange_espace_virtuel();
95 statistics().end_count(STD_COUNTERS::turbulent_viscosity);
101 const DoubleTab& xp = domaine_VF.
xp();
102 DoubleTab& viscosite_valeurs = la_viscosite_turbulente_->valeurs();
105 const int nb_ddl = domaine_VF.
nb_elem();
106 DoubleTabs sources_val(
nb_var_);
113 for (
int so = 0; so <
nb_var_; so++)
117 const DoubleTab& source_so_val = ch_ref->
valeurs();
118 sources_val[so] = source_so_val;
123 conv_to_elem(so) = 0;
127 conv_to_elem(so) = 1;
132 conv_to_elem(so) = 2;
137 Cerr <<
"Modele_turbulence_hyd_combinaison::calculer_viscosite_turbulente : error " <<
les_var[so] <<
" not Champ_P0_XX" << finl;
141 if (conv_to_elem(so) != 0)
142 Cerr <<
"Modele_turbulence_hyd_combinaison::calculer_viscosite_turbulente : " <<
les_var[so] <<
" Conversion " <<
" => Champ_P0_XX" << finl;
145 nb_dim_so(so) = source_so_val.
nb_dim();
146 if (nb_dim_so(so) < 1 || nb_dim_so(so) > 2)
148 Cerr <<
"Modele_turbulence_hyd_combinaison::calculer_viscosite_turbulente : " <<
les_var[so] <<
" nb dimension = " << source_so_val.
nb_dim() <<
" != 1 or 2 " << finl;
152 if (nb_dim_so(so) != 1)
154 dim_2_so(so) = source_so_val.
dimension(1);
155 Cerr <<
"Modele_turbulence_hyd_combinaison::calculer_viscosite_turbulente : " <<
les_var[so] <<
" nb dimension = " << nb_dim_so(so) <<
" and second dimension = " <<
" " << dim_2_so(so)
161 int nb_loop_contr = 0;
162 IntTab *elem_contr =
nullptr;
165 nb_loop_contr = ref_cast(
Domaine_EF,
equation().domaine_dis()).domaine().nb_som_elem();
168 else if (go_conv == 2)
174 for (
int i = 0; i < nb_ddl; i++)
176 const double x = xp(i, 0);
177 const double y = xp(i, 1);
178 const double z =
dimension > 2 ? xp(i, 2) : 0;
180 fxyz_[0].setVar(
"x", x);
181 fxyz_[0].setVar(
"y", y);
182 fxyz_[0].setVar(
"z", z);
183 fxyz_[0].setVar(
"t", temps);
185 for (
int so = 0; so <
nb_var_; so++)
188 const DoubleTab& source_so_val = sources_val[so];
190 if (conv_to_elem(so) == 0)
192 if (nb_dim_so(so) == 1 || dim_2_so(so) == 1)
193 fxyz_[0].setVar(nom_source, source_so_val(i));
197 for (
int i2 = 0; i2 < (dim_2_so(so) - 1); i2++)
198 vale2 += source_so_val(i, i2) * source_so_val(i, i2);
199 fxyz_[0].setVar(nom_source, sqrt(vale2));
205 for (
int icontrl = 0; icontrl < nb_loop_contr; icontrl++)
207 const int contrl = (elem_contr !=
nullptr ? (*elem_contr)(i, icontrl) : 0);
208 if (nb_dim_so(so) == 1 || dim_2_so(so) == 1)
209 vale += source_so_val(contrl) / nb_loop_contr;
213 for (
int i2 = 0; i2 < (dim_2_so(so) - 1); i2++)
214 vale2 += source_so_val(contrl, i2) * source_so_val(contrl, i2);
215 vale += sqrt(vale2) / nb_loop_contr;
218 fxyz_[0].setVar(nom_source, vale);
221 viscosite_valeurs(i) = fxyz_[0].eval();
223 la_viscosite_turbulente_->changer_temps(temps);
225 return la_viscosite_turbulente_;
double xp(int num_elem, int k) const
void ajouter(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.