40 const Champ_Don_base& nu = le_fluide->viscosite_cinematique(), &dh = diam_hydr;
41 const DoubleTab& xp = domaine.xp(), &xv = domaine.xv(), &vit = la_vitesse->
valeurs();
43 const Sous_Domaine *pssz =
sous_domaine ? &le_sous_domaine.valeur() :
nullptr;
44 const IntTab& e_f = domaine.elem_faces(), &f_e = domaine.face_voisins();
50 for (i = 0; i < (pssz ? pssz->
nb_elem_tot() : domaine.nb_elem_tot()); i++)
52 int e = pssz ? (*pssz)[i] : i;
57 double nu_e = C_nu ? nu.
valeurs()(0, 0) : nu.
valeur_a_compo(pos, 0), dh_e = C_dh ? dh.valeurs()(0, 0) : dh.valeur_a_compo(pos, 0);
58 for (j = domaine.vedeb(e), ve = 0; j < domaine.vedeb(e + 1); j++)
60 fb = domaine.veji(j), ve(r) += domaine.veci(j, r) * vit(fb) * pf(fb) / pe(e);
61 double n_ve = sqrt(domaine.dot(ve.addr(), ve.addr())), Re = std::max(n_ve * dh_e / nu_e, 1e-10), C_iso, C_dir, v_dir;
62 coeffs_perte_charge(ve, pos, t, n_ve, dh_e, nu_e, Re, C_iso, C_dir, v_dir, dir);
65 for (j = 0; j < e_f.
dimension(1) && (f = e_f(e, j)) >= 0; j++)
66 if (f < domaine.nb_faces() && ch.
fcl()(f, 0) < 2)
68 double m2vf = 0, contrib;
69 for (k = domaine.m2i(domaine.m2d(e) + j); k < domaine.m2i(domaine.m2d(e) + j + 1); k++)
70 fb = e_f(e, domaine.m2j(k)), m2vf += pf(f) * (e == f_e(f, 0) ? 1 : -1) * (e == f_e(fb, 0) ? 1 : -1) * domaine.volumes(e) * domaine.m2c(k) * vit(fb) * pf(fb) / pe(e);
71 contrib = C_iso * m2vf + fs(f) * pf(f) * (C_dir - C_iso) * domaine.dot(&ve(0), &dir(0)) * (e == f_e(f, 0) ? 1 : -1) * domaine.dot(&xv(f, 0), &dir(0), &xp(e, 0));
72 if (contrib <= std::min(C_dir, C_iso) * m2vf)
73 contrib = std::min(C_dir, C_iso) * m2vf;
90 const Champ_Don_base& nu = le_fluide->viscosite_cinematique(), &dh = diam_hydr;
91 const DoubleTab& xp = domaine.xp(), &xv = domaine.xv(), &vit = inco;
93 const Sous_Domaine *pssz =
sous_domaine ? &le_sous_domaine.valeur() :
nullptr;
94 const IntTab& e_f = domaine.elem_faces(), &f_e = domaine.face_voisins();
99 for (i = 0; i < (pssz ? pssz->
nb_elem_tot() : domaine.nb_elem_tot()); i++)
101 int e = pssz ? (*pssz)[i] : i;
106 double nu_e = C_nu ? nu.
valeurs()(0, 0) : nu.
valeur_a_compo(pos, 0), dh_e = C_dh ? dh.valeurs()(0, 0) : dh.valeur_a_compo(pos, 0);
107 for (j = domaine.vedeb(e), ve = 0; j < domaine.vedeb(e + 1); j++)
109 fb = domaine.veji(j), ve(r) += domaine.veci(j, r) * vit(fb) * pf(fb) / pe(e);
110 double n_ve = sqrt(domaine.dot(ve.addr(), ve.addr())), Re = std::max(n_ve * dh_e / nu_e, 1e-10), C_iso, C_dir, v_dir;
111 coeffs_perte_charge(ve, pos, t, n_ve, dh_e, nu_e, Re, C_iso, C_dir, v_dir, dir);
114 for (j = 0; j < e_f.
dimension(1) && (f = e_f(e, j)) >= 0; j++)
115 if (f < domaine.nb_faces() && ch.
fcl()(f, 0) < 2)
117 double m2vf = 0, contrib;
118 for (k = domaine.m2i(domaine.m2d(e) + j); k < domaine.m2i(domaine.m2d(e) + j + 1); k++)
119 fb = e_f(e, domaine.m2j(k)), m2vf += pf(f) * (e == f_e(f, 0) ? 1 : -1) * (e == f_e(fb, 0) ? 1 : -1) * domaine.volumes(e) * domaine.m2c(k) * vit(fb) * pf(fb) / pe(e);
120 contrib = C_iso * m2vf + fs(f) * pf(f) * (C_dir - C_iso) * domaine.dot(&ve(0), &dir(0)) * (e == f_e(f, 0) ? 1 : -1) * domaine.dot(&xv(f, 0), &dir(0), &xp(e, 0));
121 if (contrib >= std::min(C_dir, C_iso) * m2vf)
123 for (k = domaine.m2i(domaine.m2d(e) + j); k < domaine.m2i(domaine.m2d(e) + j + 1); k++)
124 if (ch.
fcl()(fb = e_f(e, domaine.m2j(k)), 0) < 2)
125 matrice(f, fb) += C_iso * pf(f) * (e == f_e(f, 0) ? 1 : -1) * (e == f_e(fb, 0) ? 1 : -1) * domaine.volumes(e) * domaine.m2c(k) * pf(fb) / pe(e);
126 for (k = domaine.vedeb(e); k < domaine.vedeb(e + 1); k++)
127 if (ch.
fcl()(fb = domaine.veji(k), 0) < 2)
128 matrice(f, fb) += fs(f) * pf(f) * (C_dir - C_iso) * domaine.dot(&domaine.veci(k, 0), &dir(0)) * pf(fb) / pe(e) * (e == f_e(f, 0) ? 1 : -1)
129 * domaine.dot(&xv(f, 0), &dir(0), &xp(e, 0));
133 for (k = domaine.m2i(domaine.m2d(e) + j); k < domaine.m2i(domaine.m2d(e) + j + 1); k++)
134 if (ch.
fcl()(fb = e_f(e, domaine.m2j(k)), 0) < 2)
135 matrice(f, fb) += std::min(C_dir, C_iso) * pf(f) * (e == f_e(f, 0) ? 1 : -1) * (e == f_e(fb, 0) ? 1 : -1) * domaine.volumes(e) * domaine.m2c(k) * pf(fb) / pe(e);
virtual void coeffs_perte_charge(const DoubleVect &u, const DoubleVect &pos, double t, double norme_u, double dh, double nu, double reynolds, double &coeff_ortho, double &coeff_long, double &u_l, DoubleVect &v_valeur) const =0
Appele pour chaque face par ajouter().
int_t nb_elem_tot() const