110 const Domaine& domaine = domaine_VEF.
domaine();
111 const int nb_elem = domaine_VEF.
nb_elem();
119 Cerr <<
"On ne trouve pas de probleme de nom " << nom_autre_pb << finl;
124 rch = pb->get_champ(nom_inco);
127 domaine_VEF_autre_pb = ref_cast(
Domaine_VEF,pb->domaine_dis());
128 const int nb_elem_autre_pb = domaine_VEF_autre_pb->nb_elem();
129 const DoubleTab& xp_autre_pb = domaine_VEF_autre_pb->xp() ;
130 const DoubleVect& volumes = domaine_VEF_autre_pb->volumes();
133 nb_fin.resize_array(nb_elem);
134 corresp_fin_gros.resize_array(nb_elem_autre_pb);
137 vol_fin_tot.resize_array(nb_elem);
141 domaine.chercher_elements(xp_autre_pb, corresp_fin_gros);
142 for (
int i=0; i<nb_elem_autre_pb; i++)
144 assert(corresp_fin_gros[i]>0);
145 nb_fin[corresp_fin_gros[i]]++;
146 vol_fin_tot[corresp_fin_gros[i]] += volumes(i);
156 const Domaine_VEF& domaine_VEF = le_dom_VEF.valeur();
157 const int nb_faces = domaine_VEF.
nb_faces();
161 const int nb_elem = domaine_VEF.
nb_elem();
162 const DoubleTab& temperature = mon_equation->inconnue().valeurs();
164 const DoubleVect& volumes_entrelaces_Cl = le_dom_Cl_VEF->volumes_entrelaces_Cl();
165 const DoubleTab& xv=domaine_VEF.
xv() ;
166 const double dt = mon_equation->schema_temps().pas_de_temps();
168 const DoubleVect& volumes_autre_pb = domaine_VEF_autre_pb->volumes();
175 for(
int num_face = 0 ; num_face<premiere_face_std ; num_face++)
177 vol = volumes_entrelaces_Cl(num_face);
180 force_rappel.setVar(i,xv(num_face,i));
182 force = force_rappel.eval();
183 resu(num_face) += (force-temperature(num_face))/(alpha_tau*dt)*vol;
186 for(
int num_face = 0 ; num_face<nb_faces ; num_face++)
188 vol = volumes_entrelaces(num_face);
191 force_rappel.setVar(i,xv(num_face,i));
193 force = force_rappel.eval();
194 resu(num_face) += (force-temperature(num_face))/(alpha_tau*dt)*vol;
200 const int nb_elem_autre_pb = domaineVEF_autre_pb.
nb_elem();
201 const DoubleTab& xp=domaineVEF_autre_pb.
xp() ;
204 ArrOfDouble val_elem(nb_elem);
206 DoubleTab valeurs(nb_elem_autre_pb,l_inconnue->nb_comp());
207 IntTab elems(nb_elem_autre_pb);
208 for (
int i=0; i<nb_elem_autre_pb; i++)
210 l_inconnue->valeur_aux_elems(xp, elems, valeurs);
213 for (
int i=0; i<nb_elem_autre_pb; i++)
215 val_elem[corresp_fin_gros[i]] += valeurs(i,0)*volumes_autre_pb(i)/vol_fin_tot[corresp_fin_gros[i]] ;
219 for(
int num_face = 0 ; num_face<ndeb ; num_face++)
221 vol = volumes_entrelaces_Cl(num_face);
223 force = val_elem[face_voisins(num_face,0)];
224 resu(num_face) += (force-temperature(num_face))/(alpha_tau*dt)*vol;
226 for(
int num_face = ndeb ; num_face<premiere_face_std ; num_face++)
228 vol = volumes_entrelaces_Cl(num_face);
230 force = 0.5*(val_elem[face_voisins(num_face,0)]+val_elem[face_voisins(num_face,1)]);
232 resu(num_face) += (force-temperature(num_face))/(alpha_tau*dt)*vol;
235 for(
int num_face = premiere_face_std ; num_face<nb_faces ; num_face++)
237 vol = volumes_entrelaces(num_face);
239 if ((val_elem[face_voisins(num_face,0)] !=0.) && (val_elem[face_voisins(num_face,1)] !=0.))
240 force = 0.5*(val_elem[face_voisins(num_face,0)]+val_elem[face_voisins(num_face,1)]);
242 force = val_elem[face_voisins(num_face,0)]+val_elem[face_voisins(num_face,1)];
246 resu(num_face) += (force-temperature(num_face))/(alpha_tau*dt)*vol;
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
int premiere_face_std() const
int nb_faces() const
renvoie le nombre global de faces.
DoubleVect & volumes_entrelaces()
double xv(int num_face, int k) const
double xp(int num_elem, int k) const
int premiere_face_int() const
une face est interne ssi elle separe deux elements.
int face_voisins(int num_face, int i) const
renvoie l'element voisin de numface dans la direction i.
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.
const Domaine & domaine() const