36 Cerr <<
"Assembleur_P_VDF_Q4::assembler " << finl;
37 Cerr <<
"Assemblage de la matrice Q4 en cours..." << finl;
38 const IntTab& FaceSoms = le_dom_VDF->face_sommets();
39 const IntTab& FaceVois = le_dom_VDF->face_voisins();
40 const IntVect& Orientation = le_dom_VDF->orientation();
42 int nbfaces = le_dom_VDF->nb_faces(), nbsom = le_dom_VDF->nb_som();
43 const DoubleVect& volumes_entrelaces = le_dom_VDF->volumes_entrelaces();
44 const DoubleVect& porosite_face = eqn_->milieu().porosite_face();
45 const DoubleTab& CoordSom = le_dom_VDF->domaine().coord_sommets();
46 double surf,vol,por,val, r;
49 la_matrice.typer(
"Matrice_Morse");
52 IntVect rang_voisins(nbsom);
61 for (face=0 ; face<nbfaces ; face++)
63 som0 = FaceSoms(face,0);
64 som1 = FaceSoms(face,1);
69 for (som0=0 ; som0<nbsom ; som0++)
71 tab1(som0+1) = rang_voisins(som0) + tab1(som0);
76 for (face=0 ; face<nbfaces ; face++)
78 ori = Orientation(face);
79 som0 = FaceSoms(face,0);
80 som1 = FaceSoms(face,1);
81 elem0 = FaceVois(face,0);
82 elem1 = FaceVois(face,1);
83 if (elem0>-1 && elem1>-1)
85 surf = 0.5* (le_dom_VDF->dim_elem(elem0,ori) + le_dom_VDF->dim_elem(elem1,ori));
89 surf = le_dom_VDF->dim_elem(elem0,ori);
94 surf = le_dom_VDF->dim_elem(elem1,ori);
98 r = 0.5*(CoordSom(som0,0)+CoordSom(som1,0));
99 surf = r * surf * 2 * M_PI;
101 vol = volumes_entrelaces(face);
102 por = porosite_face(face);
103 val = surf*surf /vol * por;
105 if (le_dom_VDF->nb_som()<400)
107 Cerr<<
"face="<<face<<
" ori="<<ori<<
" soms="<<som0<<
"/"<<som1<<
" coordsom="<<CoordSom(som0,0)<<
"/"<<CoordSom(som0,1);
108 Cerr<<
" "<<CoordSom(som1,0)<<
"/"<<CoordSom(som1,1)<<
" elems="<<FaceVois(face,0)<<
"/"<<FaceVois(face,1)<<
" dim_elems/2=";
109 if (FaceVois(face,0)>-1)
110 Cerr<<le_dom_VDF->dim_elem(FaceVois(face,0),ori)/2.<<
" / ";
113 if (FaceVois(face,1)>-1)
114 Cerr<<le_dom_VDF->dim_elem(FaceVois(face,1),ori)/2.<<
" ";
117 Cerr<<
" surf="<<surf<<
" vol="<<vol<<
" val="<<val<<finl;
121 tab2(tab1(som0)-1) = som0+1;
122 tab2(tab1(som1)-1) = som1+1;
123 mat(som0,som0) += val;
124 mat(som1,som1) += val;
126 tab2(tab1(som0)+rang_voisins(som0)-1) = som1+1;
127 mat(som0,som1) -= val;
128 rang_voisins(som0)++;
129 tab2(tab1(som1)+rang_voisins(som1)-1) = som0+1;
130 mat(som1,som0) -= val;
131 rang_voisins(som1)++;
134 Cerr <<
"Fin de l'assemblage de la matrice Q4" << finl;
145 const DoubleTab& CoordSommets = le_dom_VDF->domaine().coord_sommets();
146 const IntTab& FaceSoms = le_dom_VDF->face_sommets();
147 const IntTab& FaceVois = le_dom_VDF->face_voisins();
148 const IntVect& Orientation = le_dom_VDF->orientation();
149 const DoubleTab& CoordSom = le_dom_VDF->domaine().coord_sommets();
150 int face, som0,som1, ori, invori, elem0,elem1;
151 int nbfaces = le_dom_VDF->nb_faces(), nbsom = le_dom_VDF->nb_som();
157 for (face=0 ; face<nbfaces ; face++)
160 ori = Orientation(face);
161 som0 = FaceSoms(face,0);
162 som1 = FaceSoms(face,1);
163 elem0 = FaceVois(face,0);
164 elem1 = FaceVois(face,1);
165 if (elem0>-1 && elem1>-1)
167 surf = 0.5* (le_dom_VDF->dim_elem(elem0,ori) + le_dom_VDF->dim_elem(elem1,ori));
171 surf = le_dom_VDF->dim_elem(elem0,ori);
175 surf = le_dom_VDF->dim_elem(elem1,ori);
183 r = 0.5*(CoordSom(som0,0)+CoordSom(som1,0));
184 surf = r * surf * 2 * M_PI;
190 if (CoordSommets(som1,invori)>CoordSommets(som0,invori))
192 secmem(som0) += tab_secmem_(face) * surf;
193 secmem(som1) -= tab_secmem_(face) * surf;
197 secmem(som0) -= tab_secmem_(face) * surf;
198 secmem(som1) += tab_secmem_(face) * surf;
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.