44 FEM_SOLUTION::FEM_SOLUTION(
FEM_MAILLAGE* mai,
int nb,
char* chemin,
int code,std::string nomsol,
int entite,
int type_solution):
MG_IDENTIFICATEUR(),nb_champs(nb),femmai(mai),nomsolution(nomsol),typeentite(entite),dim_solution(type_solution),change_gauss(false)
49 FEM_SOLUTION::FEM_SOLUTION(
unsigned long num,
FEM_MAILLAGE* mai,
int nb,
char* chemin,
int code,std::string nomsol,
int entite,
int type_solution):
MG_IDENTIFICATEUR(num),nb_champs(nb),femmai(mai),nomsolution(nomsol),typeentite(entite),dim_solution(type_solution),change_gauss(false)
62 sprintf(mess,
"Champs_%d",i);
69 unsigned long nbele=0;
82 fwrite(&nbele,
sizeof(
unsigned long),1,
in);
83 for (
unsigned long i=0;i<nbele+1;i++)
86 fwrite(&val,
sizeof(
unsigned long),1,
in);
88 unsigned long *tab=
new unsigned long[nbele+1];
90 unsigned long cumul_iter=0;
93 LISTE_FEM_NOEUD::iterator ite;
98 for (
unsigned long j=0;j<iter;j++)
101 fwrite(&val,
sizeof(
double),1,
in);
104 cumul_iter=cumul_iter+iter;
110 LISTE_FEM_ELEMENT1::iterator ite;
115 for (
unsigned long j=0;j<iter;j++)
118 fwrite(&val,
sizeof(
double),1,
in);
121 cumul_iter=cumul_iter+iter;
127 LISTE_FEM_ELEMENT2::iterator ite;
132 for (
unsigned long j=0;j<iter;j++)
135 fwrite(&val,
sizeof(
double),1,
in);
138 cumul_iter=cumul_iter+iter;
144 LISTE_FEM_ELEMENT3::iterator ite;
149 for (
unsigned long j=0;j<iter;j++)
152 fwrite(&val,
sizeof(
double),1,
in);
155 cumul_iter=cumul_iter+iter;
161 LISTE_FEM_ELEMENT1::iterator ite;
166 for (
unsigned long j=0;j<iter;j++)
169 fwrite(&val,
sizeof(
double),1,
in);
172 cumul_iter=cumul_iter+iter;
175 LISTE_FEM_ELEMENT2::iterator ite2;
180 for (
unsigned long j=0;j<iter;j++)
183 fwrite(&val,
sizeof(
double),1,
in);
186 cumul_iter=cumul_iter+iter;
188 LISTE_FEM_ELEMENT3::iterator ite3;
193 for (
unsigned long j=0;j<iter;j++)
196 fwrite(&val,
sizeof(
double),1,
in);
199 cumul_iter=cumul_iter+iter;
205 LISTE_FEM_ELEMENT3::iterator ite;
210 for (
unsigned long j=0;j<iter;j++)
213 fwrite(&val,
sizeof(
double),1,
in);
216 cumul_iter=cumul_iter+iter;
222 LISTE_FEM_ELEMENT1::iterator ite;
227 for (
unsigned long j=0;j<iter;j++)
230 fwrite(&val,
sizeof(
double),1,
in);
233 cumul_iter=cumul_iter+iter;
239 LISTE_FEM_ELEMENT2::iterator ite;
244 for (
unsigned long j=0;j<iter;j++)
247 fwrite(&val,
sizeof(
double),1,
in);
250 cumul_iter=cumul_iter+iter;
256 LISTE_FEM_ELEMENT1::iterator ite;
261 for (
unsigned long j=0;j<iter;j++)
264 fwrite(&val,
sizeof(
double),1,
in);
267 cumul_iter=cumul_iter+iter;
268 }LISTE_FEM_ELEMENT2::iterator ite2;
273 for (
unsigned long j=0;j<iter;j++)
276 fwrite(&val,
sizeof(
double),1,
in);
279 cumul_iter=cumul_iter+iter;
280 }LISTE_FEM_ELEMENT3::iterator ite3;
285 for (
unsigned long j=0;j<iter;j++)
288 fwrite(&val,
sizeof(
double),1,
in);
291 cumul_iter=cumul_iter+iter;
297 LISTE_FEM_ELEMENT3::iterator ite;
308 cumul_iter=cumul_iter+iter;
314 LISTE_FEM_ELEMENT2::iterator ite;
325 cumul_iter=cumul_iter+iter;
331 LISTE_FEM_ELEMENT1::iterator ite;
342 cumul_iter=cumul_iter+iter;
346 tab[nbele]=cumul_iter;
347 fseek(
in,
sizeof(
unsigned long),SEEK_SET);
348 for (
unsigned long i=0;i<nbele+1;i++)
351 fwrite(&(tab[i]),
sizeof(
unsigned long),1,
in);
358 fseek(
in,0,SEEK_SET);
360 fread(&nb,
sizeof(
unsigned long),1,
in);
362 for (
unsigned long i=0;i<nb+1;i++)
365 fread(&val,
sizeof(
unsigned long),1,
in);
378 fseek(
in,0,SEEK_SET);
379 for (
unsigned long j=0;j<
hash[0]+2;j++)
380 fwrite(&(
hash[j]),
sizeof(
unsigned long),1,
in);
383 if (
in!=NULL) fclose(
in);
400 unsigned long nb=
hash[0];
401 unsigned long pos=
hash[i+1];
402 unsigned long pospro=
hash[i+2];
405 fseek(
in,posval,SEEK_SET);
407 fread(&val,
sizeof(
double),1,
in);
413 unsigned long nb=
hash[0];
414 unsigned long pos=
hash[i+1];
415 unsigned long pospro=
hash[i+2];
418 fseek(
in,posval,SEEK_SET);
419 fwrite(&val,
sizeof(
double),1,
in);
427 unsigned long nb=
hash[0];
428 unsigned long pos=
hash[i+1];
429 unsigned long oldpospro=
hash[i+2];
447 unsigned long nb=
hash[0];
448 unsigned long pos=
hash[i+1];
449 unsigned long pospro=
hash[i+2];
492 for (
int j=0;j<9;j++)
500 LISTE_FEM_NOEUD::iterator it;
505 double val=
lire(i,num,k);
506 no->change_solution(val,k);
515 LISTE_FEM_ELEMENT1::iterator it;
520 double val=
lire(i,num,k);
521 seg->change_solution(val,k);
530 LISTE_FEM_ELEMENT2::iterator it;
535 double val=
lire(i,num,k);
536 tri->change_solution(val,k);
545 LISTE_FEM_ELEMENT3::iterator it;
550 double val=
lire(i,num,k);
551 tet->change_solution(val,k);
568 LISTE_FEM_ELEMENT3::iterator it;
576 if (ele->get_lien_topologie()!=mgvol) {i++;
continue;}
579 for (
int r=0;r<nbgauss;r++)
581 int degre=ele->get_degre_gauss(nbgauss);
584 ele->get_pt_gauss(degre,r,w,uvw);
586 double det=ele->get_jacobien(jac,uvw,unite);
587 double valeur=
lire(i,numchamps,coord,r)*fabs(det);
588 valele=valele+w*valeur;
603 LISTE_FEM_ELEMENT3::iterator it;
611 if (ele->get_lien_topologie()!=mgvol) {i++;
continue;}
613 ele->get_boite_3D().get_centre(centre);
614 if(boite_analyse.
contient(centre[0],centre[1],centre[2])==0) {i++;
continue;}
617 for (
int r=0;r<nbgauss;r++)
619 int degre=ele->get_degre_gauss(nbgauss);
622 ele->get_pt_gauss(degre,r,w,uvw);
624 double det=ele->get_jacobien(jac,uvw,unite);
625 double valeur=
lire(i,numchamps,coord,r)*fabs(det);
626 valele=valele+w*valeur;
642 LISTE_FEM_ELEMENT2::iterator it;
650 if (ele->get_lien_topologie()!=fac) {i++;
continue;}
653 for (
int r=0;r<nbgauss;r++)
655 int degre=ele->get_degre_gauss(nbgauss);
658 ele->get_pt_gauss(degre,r,w,uvw);
660 double det=ele->get_jacobien(jac,uvw,unite);
661 double valeur=
lire(i,numchamps,coord,r)*fabs(det);
662 valele=valele+w*valeur;
678 LISTE_FEM_ELEMENT1::iterator it;
687 for (
int r=0;r<nbgauss;r++)
690 if (ele->get_lien_topologie()!=are) {i++;
continue;}
691 int degre=ele->get_degre_gauss(nbgauss);
694 ele->get_pt_gauss(degre,r,w,uvw);
697 double det=ele->get_jacobien(jac,uvw,unite);
698 double valeur=
lire(i,numchamps,coord,r)*fabs(det);
699 valele=valele+w*valeur;
717 for (
int r=0;r<nbgauss;r++)
725 double valeur=
lire(num,numchamps,coord,r)*fabs(det);
742 for (
int r=0;r<nbgauss;r++)
750 double valeur=
lire(num,numchamps,coord,r)*fabs(det);
752 volume=volume+w*fabs(det);
768 for (
int r=0;r<nbgauss;r++)
776 double valeur=
lire(num,numchamps,coord,r)*fabs(det);
793 for (
int r=0;r<nbgauss;r++)
802 double valeur=
lire(num,numchamps,coord,r)*fabs(det);
818 for (
int r=0;r<nbgauss;r++)
826 volume=volume+w*fabs(det);
854 o <<
");" << std::endl;