62 const IntTab& f_e = domaine.face_voisins();
64 const DoubleTab& vfd = domaine.volumes_entrelaces_dir();
69 for (f = 0; f < domaine.nb_faces(); f++)
70 for (n = 0; n < N; n++)
72 for (fac = 0, i = 0; i < 2 && (e = f_e(f, i)) >= 0; i++) fac += vfd(f, i) / vf(f) * (a_r ? (*a_r)(e, n) : 1);
73 sm(f, n) /= pf(f) * vf(f) * fac;
78 for (e = 0; e < domaine.nb_elem(); e++)
79 for (d = 0; d < D; d++)
80 for (n = 0; n < N; n++)
81 sm(nf_tot + D * e + d, n) /= pe(e) * ve(e) * (a_r ? (*a_r)(e, n) : 1);
90 for (e = 0; e < domaine.nb_elem(); e++)
91 for (d = 0; d < D; d++)
92 for (n = 0; n < N; n++)
94 if ( (a_r ? (*a_r)(e, n) : 1) > 1e-10) sm(nf_tot + D * e + d, n) /= pe(e) * ve(e) * (a_r ? (*a_r)(e, n) : 1);
95 else sm(nf_tot + D * e + d, n) = 0;
136 const Conds_lim& cls = le_dom_Cl_PolyMAC_CDO->les_conditions_limites();
143 int i, e, f, nf_tot = domaine.nb_faces_tot(), m, n, N = inco.
line_size(), d, D =
dimension, cR = rho ? (*rho).dimension_tot(0) == 1 : 0;
146 if (polymac_flica5) resoudre_en_increments = 1;
149 DoubleTrav masse(N, N), masse_e(N, N);
150 for (f = 0; f < domaine.nb_faces(); f++)
152 const double fac_ale = domaine.domaine().deformable() ? domaine.domaine().old_volumes_entrelaces()(f) / vf(f) : 1.0;
153 if (!pbm || fcl(f, 0) >= 2)
154 for (masse = 0, n = 0; n < N; n++) masse(n, n) = coeff_t ? (*coeff_t)[f] : 1.0;
155 else for (masse = 0, i = 0; i < 2 && (e = f_e(f, i)) >= 0; i++)
157 for (masse_e = 0, n = 0; n < N; n++) masse_e(n, n) = (*a_r)(e, n);
158 if (corr) corr->
ajouter(&(*alpha)(e, 0), &(*rho)(!cR * e, 0), masse_e);
159 for (n = 0; n < N; n++)
160 for (m = 0; m < N; m++) masse(n, m) += vfd(f, i) / vf(f) * masse_e(n, m);
162 for (n = 0; n < N; n++)
164 double fac = pf(f) * vf(f) / dt;
165 for (m = 0; m < N; m++) secmem(f, n) -= fac * resoudre_en_increments * masse(n, m) * inco(f, m);
167 for (m = 0; m < N; m++) secmem(f, n) += fac * masse(n, m) * fac_ale * passe(f, m);
168 else if (fcl(f, 0) == 3 && sub_type(
Dirichlet, cls[fcl(f, 1)].valeur()))
169 for (d = 0; d < D; d++)
170 secmem(f, n) += fac * masse(n, n) * ref_cast(
Dirichlet, cls[fcl(f, 1)].valeur()).val_imp(fcl(f, 2), N * d + n) * nf(f, d) / fs(f);
172 for (m = 0; m < N; m++)
173 if (masse(n, m)) (*mat)(N * f + n, N * f + m) += fac * masse(n, m);
177 for (e = 0, i = nf_tot; e < domaine.nb_elem_tot(); e++)
179 const double fac_ale = domaine.domaine().deformable() ? domaine.domaine().old_volumes()(e) / ve(e) : 1.0;
180 for (masse = 0, n = 0; n < N; n++) masse(n, n) = a_r ? (*a_r)(e, n) : 1;
181 if (corr) corr->
ajouter(&(*alpha)(e, 0), &(*rho)(!cR * e, 0), masse);
182 for (d = 0; d < D; d++, i++)
183 for (n = 0; n < N; n++)
185 double fac = pe(e) * ve(e) / dt;
187 for (m = 0; m < N; m++)
188 secmem(i, n) -= fac * masse(n, m) * (resoudre_en_increments * inco(i, m) - passe(i, m));
190 for (m = 0; m < N; m++)
192 double ma = a_r ? masse(n, m) : (coeff_t ? (*coeff_t)[(i - nf_tot)/
dimension] : 1.0);
193 secmem(i, n) -= fac * ma * (resoudre_en_increments * inco(i, m) - fac_ale * passe(i, m));
196 for (m = 0; m < N; m++)
198 double ma = polymac_flica5 ? masse(n, m) : (a_r ? masse(n, m) : (coeff_t ? (*coeff_t)[(i - nf_tot)/
dimension] : 1.0));
199 if (ma) (*mat)(N * i + n, N * i + m) += fac * ma;