65 quick_fram_(psc_multi, i, j, i_0, j_1, face, inco, flux);
68 for (
int k = 0; k < ncomp; k++) flux[k] *= -1;
71 for (
int k = 0; k < ncomp; k++)
73 const int ind = (tab_vitesse().line_size() == ncomp) ? k : 0;
74 const double psc = dt_vitesse(face, ind) * surface_porosite(face);
75 flux[k] = (psc > 0) ? -psc * inco(i, k) : -psc * inco(j, k);
79template <
typename DERIVED_T>
template <
typename Type_Double>
82 const int i = elem_(face,0), j = elem_(face,1), ncomp = flux.size_array();
83 if (!DERIVED_T::IS_AMONT)
85 const double psc = dt_vitesse(face)*surface_porosite(face);
86 const int i_0 = amont_amont_(face,0), j_1 = amont_amont_(face,1);
87 if (DERIVED_T::IS_CENTRE)
89 qcentre_<Type_Double>(psc,i,j,i_0,j_1,face,inco,flux);
90 for (
int k=0; k<ncomp; k++) flux[k] *= -1;
92 else if (DERIVED_T::IS_CENTRE4)
94 if ( (i_0 == -1) || (j_1 == -1) )
95 for (
int k=0; k<ncomp; k++) flux[k] = -psc*(inco(i,k)+inco(j,k))/2.;
98 qcentre_<Type_Double>(psc,i,j,i_0,j_1,face,inco,flux);
99 for (
int k=0; k<ncomp; k++) flux[k] *= -1;
113 Type_Double psc_multi(ncomp);
114 for (
int k = 0; k < ncomp; k++)
116 const int ind = (tab_vitesse().line_size() == ncomp) ? k : 0;
117 psc_multi[k] = dt_vitesse(face, ind) * surface_porosite(face);
119 quick_fram_(psc_multi,i,j,i_0,j_1,face,inco,flux);
120 for (
int k=0; k<ncomp; k++) flux[k] *= -1;
124 for(
int k = 0; k < ncomp; k++)
126 const int ind = (tab_vitesse().line_size() == ncomp) ? k : 0;
127 const double psc = dt_vitesse(face, ind)*surface_porosite(face);
128 flux[k] = (psc > 0) ? -psc * inco(i, k) : -psc * inco(j, k);
136template <
typename DERIVED_T>
template <
typename Type_Double>
137inline void Eval_Conv_VDF_Elem<DERIVED_T>::coeffs_face_common(
const int face, Type_Double& aii, Type_Double& ajj)
const
139 assert (aii.size_array() == ajj.size_array());
140 const int i = elem_(face,0), ncomp = aii.size_array();
141 double psc = dt_vitesse(face)*surface_porosite(face);
144 if (DERIVED_T::IS_CENTRE || DERIVED_T::IS_CENTRE4)
147 for (
int k = 0; k < ncomp; k++) aii[k] = -psc;
150 for (
int k = 0; k < ncomp; k++)
152 const int ind = (tab_vitesse().line_size() == ncomp) ? k : 0;
153 psc = dt_vitesse(face, ind)*surface_porosite(face);
154 aii[k] = (psc > 0) ? psc : 0.;
160 if (DERIVED_T::IS_CENTRE || DERIVED_T::IS_CENTRE4)
163 for (
int k = 0; k < ncomp; k++) ajj[k] = -psc;
166 for (
int k = 0; k < ncomp; k++)
168 const int ind = (tab_vitesse().line_size() == ncomp) ? k : 0;
169 psc = dt_vitesse(face, ind)*surface_porosite(face);
170 ajj[k] = (psc < 0) ? -psc : 0.;
176template <
typename DERIVED_T>
template <
typename Type_Double>
179 coeffs_face_common(face,aii,ajj);
182template <
typename DERIVED_T>
template <
typename Type_Double>
185 coeffs_face_common(face,aii,ajj);
188template <
typename DERIVED_T>
template <
typename Type_Double>
191 assert (aii.size_array() == ajj.size_array());
192 const int ncomp = aii.size_array();
193 if (DERIVED_T::IS_CENTRE || DERIVED_T::IS_CENTRE4)
195 const double psc = dt_vitesse(face)*surface_porosite(face);
196 Type_Double flux(ncomp);
197 const int i = elem_(face,0), j = elem_(face,1), i_0 = amont_amont_(face,0), j_1 = amont_amont_(face,1);
198 qcentre_<Type_Double>(psc,i,j,i_0,j_1,face,inconnue->valeurs(),flux);
200 for (
int k = 0; k < ncomp; k++) aii[k] = -flux[k];
201 else for (
int k = 0; k < ncomp; k++) ajj[k] = -flux[k];
204 for (
int k = 0; k < ncomp; k++)
206 const int ind = (tab_vitesse().line_size() == ncomp) ? k : 0;
207 const double psc = dt_vitesse(face, ind)*surface_porosite(face);
208 aii[k] = (psc > 0) ? psc : 0.;
209 ajj[k] = (psc > 0) ? 0. : -psc;
213template <
typename DERIVED_T>
template <
typename Type_Double>
216 assert (aii.size_array() == ajj.size_array());
217 const int ncomp = aii.size_array();
218 if (DERIVED_T::IS_CENTRE || DERIVED_T::IS_CENTRE4)
220 const double psc = dt_vitesse(face)*surface_porosite(face);
221 const int i = elem_(face,0), j = elem_(face,1), i_0 = amont_amont_(face,0), j_1 = amont_amont_(face,1);
222 if ( ((i_0 == -1) || (j_1 == -1)) && DERIVED_T::IS_CENTRE4)
225 for (
int k = 0; k < ncomp; k++) aii[k] = -psc;
226 else for (
int k = 0; k < ncomp; k++) ajj[k] = -psc;
230 Type_Double flux(ncomp);
231 qcentre_<Type_Double>(psc,i,j,i_0,j_1,face,inconnue->valeurs(),flux);
233 for (
int k = 0; k < ncomp; k++) aii[k] = -flux[k];
234 else for (
int k = 0; k < ncomp; k++) ajj[k] = -flux[k];
238 for (
int k = 0; k < ncomp; k++)
240 const int ind = (tab_vitesse().line_size() == ncomp) ? k : 0;
241 const double psc = dt_vitesse(face, ind)*surface_porosite(face);
242 aii[k] = (psc > 0) ? psc : 0.;
243 ajj[k] = (psc > 0) ? 0. : -psc;
247template <
typename DERIVED_T>
template <
typename Type_Double>
250 if (DERIVED_T::IS_CENTRE4) return ;
253 for (
int n = 0; n < flux.size_array(); n++)
254 for (
int i = 0, e; i < 2; i++)
255 if ((e = elem_(f, i)) > -1)
257 const int ind = (tab_vitesse().line_size() == flux.size_array()) ? n : 0;
258 flux[n] = surface_porosite(f) *
259 (((dt_vitesse(f, ind) > 0 && !i) || (dt_vitesse(f, ind) <= 0 && i)) ? inco(e, n) : val_b(f,
265template <
typename DERIVED_T>
template <
typename Type_Double>
268 if (DERIVED_T::IS_CENTRE4)
return;
271 for (
int n = 0; n < flux.size_array(); n++)
272 for (
int i = 0, e; i < 2; i++)
273 if ((e = elem_(f, i)) > -1)
275 const int ind = (tab_vitesse().line_size() == flux.size_array()) ? n : 0;
276 flux[n] = surface_porosite(f) *
277 (((dt_vitesse(f, ind) > 0 && !i) || (dt_vitesse(f, ind) <= 0 && i)) ? inco(e, n) : val_b(f,
283template <
typename DERIVED_T>
template <
typename Type_Double>
284inline void Eval_Conv_VDF_Elem<DERIVED_T>::coeffs_face_bloc_vitesse_common(
const DoubleTab& inco,
const int face, Type_Double& flux )
const
286 if (DERIVED_T::IS_CENTRE4)
return;
289 const int i = elem_(face, 0), j = elem_(face, 1), ncomp = flux.size_array();
290 const double psc = surface_porosite(face);
291 if (DERIVED_T::IS_CENTRE)
293 const int i_0 = amont_amont_(face, 0), j_1 = amont_amont_(face, 1);
294 qcentre_<Type_Double>(psc, i, j, i_0, j_1, face, inco, flux);
297 for (
int k = 0; k < ncomp; k++)
299 const int ind = (tab_vitesse().line_size() == ncomp) ? k : 0;
300 flux[k] = (dt_vitesse(face, ind) > 0) ? psc * inco(i, k) : psc * inco(j, k);
305template <
typename DERIVED_T>
template <
typename Type_Double>
308 coeffs_face_bloc_vitesse_common(inco, face, flux);
311template <
typename DERIVED_T>
template <
typename Type_Double>
314 coeffs_face_bloc_vitesse_common(inco, face, flux);