45 if (!sub_type(Viscosite_turbulente_multiple, ref_cast(Op_Diff_Turbulent_PolyMAC_MPFA_Face, ref_cast(Navier_Stokes_std,
equation().probleme().
equation(0)).operateur(0).l_op_base()).correlation()))
68 const DoubleTab& vf_dir = domaine.volumes_entrelaces_dir();
69 const DoubleTab& xp = domaine.xp();
70 const DoubleTab& xv = domaine.xv();
72 const DoubleVect& ve = domaine.volumes();
73 const DoubleVect& fs = domaine.face_surfaces();
74 const DoubleTab& normales_f = domaine.face_normales();
75 const IntTab& voisins_f = domaine.face_voisins();
76 const IntTab& e_f = domaine.elem_faces();
77 const IntTab& f_e = domaine.face_voisins();
83 const int nf_tot = domaine.nb_faces_tot();
84 const int nf = domaine.nb_faces();
85 const int ne_tot = domaine.nb_elem_tot() ;
88 DoubleTrav Rij(0, N, D, D);
92 DoubleTrav grad_Rij(0, N, D, D);
98 const IntTab& fg_d = ch_alpha.
fgrad_d;
99 const IntTab& fg_e = ch_alpha.
fgrad_e;
100 const DoubleTab& fg_w = ch_alpha.
fgrad_w;
103 for (
int n = 0; n < N; n++)
104 for (
int f = 0; f < nf_tot; f++)
105 for (
int d_i = 0; d_i <D ; d_i++)
106 for (
int d_j = 0; d_j <D ; d_j++)
108 grad_Rij(f, n, d_i, d_j) = 0;
111 for (
int j = fg_d(f); j < fg_d(f+1) ; j++)
113 const int e = fg_e(j);
115 if ( (f_bord = e - ne_tot) < 0)
116 grad_Rij(f, n, d_i, d_j) += fg_w(j) * Rij(e, n, d_i, d_j);
117 else if ( (ch_alpha.
fcl()(f_bord, 0) == 1) || (ch_alpha.
fcl()(f_bord, 0) == 2)
118 || (ch_alpha.
fcl()(f_bord, 0) == 3) || (ch_alpha.
fcl()(f_bord, 0) == 6))
120 Process::exit(
"You must have a neumann limit condition on alpha for RIJ_BIF to work !");
126 for (
int n = 0; n < N; n++)
127 for (
int e = 0; e < ne_tot; e++)
128 for (
int d_d = 0 ; d_d < D ; d_d++)
129 for (
int d_i = 0; d_i < D ; d_i++)
130 for (
int d_j = 0; d_j < D ; d_j++)
132 grad_Rij(nf_tot + D *e + d_d, n, d_i, d_j) = 0;
133 for (
int j = 0, f; j < e_f.
dimension(1) && (f = e_f(e, j)) >= 0; j++)
134 grad_Rij(nf_tot + D *e + d_d, n, d_i, d_j) += (e == f_e(f, 0) ? 1 : -1) * fs(f) * (xv(f, d_d) - xp(e, d_d)) / ve(e) * grad_Rij(f, n, d_i, d_j);
139 for (
int e = 0 ; e < ne_tot ; e++)
140 for (
int n = 0; n<N ; n++)
141 for (
int d_i = 0; d_i < D; d_i++)
143 double secmem_en = 0;
144 for (
int d_j = 0; d_j < D; d_j++)
145 secmem_en += grad_Rij(nf_tot + D *e + d_j, n, d_i, d_j) ;
146 secmem_en *= (-1) * pe(e) * ve(e) * tab_alp(e, n) * tab_rho(e, n) ;
147 secmem(nf_tot + e*D + d_i, n) += secmem_en;
154 for (
int f = 0 ; f < nf ; f++)
155 for (
int n = 0; n<N ; n++)
156 for (
int i = 0; i < 2 && (e = voisins_f(f, i)) >= 0; i++)
158 DoubleTrav secmem_en(D);
160 for (
int d_i = 0; d_i < D; d_i++)
161 for (
int d_j = 0; d_j < D; d_j++)
162 secmem_en(d_i) += grad_Rij(nf_tot + D *e + d_j, n, d_i, d_j) ;
163 for (
int d_i = 0; d_i < D; d_i++)
164 secmem_en(d_i) *= (-1) * pe(e) * vf_dir(f, i) * tab_alp(e, n) * tab_rho(e, n);
165 double flux_face = domaine.dot(&normales_f(f, 0), &secmem_en(0));
166 secmem(f, n) += flux_face;