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;
int contient(double x, double y, double z)
virtual void get_pt_gauss(int degre, int num, double &w, double *u)=0
virtual int get_degre_gauss(int num)=0
virtual double get_jacobien(double *jac, double *uv, double unite=1.)
virtual int get_degre_gauss(int num)=0
virtual void get_pt_gauss(int degre, int num, double &w, double *uv)=0
virtual double get_jacobien(double *jac, double *uv, double unite=1.)
virtual int get_degre_gauss(int num)=0
virtual double get_jacobien(double *jac, double *uv, double unite=1.)
virtual void get_pt_gauss(int degre, int num, double &w, double *uvw)=0
unsigned int get_nb_fem_element2(void)
FEM_NOEUD * get_premier_noeud(LISTE_FEM_NOEUD::iterator &it)
FEM_ELEMENT2 * get_premier_element2(LISTE_FEM_ELEMENT2::iterator &it)
unsigned int get_nb_fem_element1(void)
MG_GEOMETRIE * get_mg_geometrie(void)
unsigned int get_nb_fem_element3(void)
FEM_ELEMENT3 * get_suivant_element3(LISTE_FEM_ELEMENT3::iterator &it)
FEM_NOEUD * get_suivant_noeud(LISTE_FEM_NOEUD::iterator &it)
FEM_ELEMENT3 * get_premier_element3(LISTE_FEM_ELEMENT3::iterator &it)
unsigned int get_nb_fem_noeud(void)
FEM_ELEMENT2 * get_suivant_element2(LISTE_FEM_ELEMENT2::iterator &it)
FEM_ELEMENT1 * get_premier_element1(LISTE_FEM_ELEMENT1::iterator &it)
FEM_ELEMENT1 * get_suivant_element1(LISTE_FEM_ELEMENT1::iterator &it)
double get_moyenne_lineique_champs(class MG_ARETE *are, int numchamps, int coord)
virtual void get_fichier_dependant(std::vector< std::string > &liste_fichier)
double get_moyenne_volumique_champs(class MG_VOLUME *vol, int numchamps, int coord=0)
double get_legende_max(int num=0)
double get_legende_min(int num=0)
double lire(int i, int j, int coord=0, int num_no=0)
FEM_MAILLAGE * get_maillage(void)
void change_legende(int num, std::string val)
void ecrire(double val, int i, int j, int coord=0, int num_no=0)
std::string get_nom_fichier(void)
double solmax[MAX_TYPE_SOLUTION]
int get_entite_solution(void)
void inisolution(char *chemin, int code)
void active_solution(int num)
double solmin[MAX_TYPE_SOLUTION]
void change_nb_gauss(int i, int num)
double get_moyenne_surfacique_elementaire_champs(int numchamps, class FEM_ELEMENT2 *ele, int num, int coord)
FEM_SOLUTION(class FEM_MAILLAGE *mai, int nb, char *chemin, int code, std::string nomsol, int entite=MAGIC::ENTITE_SOLUTION::ENTITE_NOEUD, int type_solution=MAGIC::TYPE_SOLUTION::SCALAIRE)
double get_moyenne_surfacique_champs(class MG_FACE *face, int numchamps, int coord=0)
double get_moyenne_lineique_elementaire_champs(int numchamps, class FEM_ELEMENT1 *ele, int num, int coord)
std::vector< unsigned long > hash
double get_volume_element(class FEM_ELEMENT3 *ele, int num)
virtual void enregistrer(std::ostream &o, double version)
std::string get_nom(void)
int get_dim_solution(void)
std::string get_legende(int num)
double get_moyenne_volumique_elementaire_champs(int numchamps, class FEM_ELEMENT3 *ele, int num, int coord=0)
double get_valeur_unite(void)
static int egal(double a, double b, double eps)
std::ostream & operator<<(std::ostream &o, FEM_SOLUTION &sol)
#define MAGIC_VERSION_FICHIER_DOUBLE