27 #ifdef PROJECT_POLYCRISTAUX
67 MSTRUCT_GENERATEUR_POLYCRISTAUX_RESULTAT::MSTRUCT_GENERATEUR_POLYCRISTAUX_RESULTAT(
MSTRUCT_GENERATEUR_POLYCRISTAUX_RESULTAT& mdd):nbcristaux(mdd.nbcristaux),degre(mdd.degre),dg(mdd.dg),KDH(mdd.KDH),GDH(mdd.GDH),EDH(mdd.EDH),KCH(mdd.KCH),GCH(mdd.GCH),ECH(mdd.ECH),nbphase(mdd.nbphase),nbcristauxphase(mdd.nbcristauxphase),masse(mdd.masse),volume(mdd.volume),cdm(mdd.cdm)
117 FILE *out=fopen(fichierout,
"wt");
118 LISTE_MG_POINT::iterator it;
120 if (pt->get_type()==MG_ELEMENT_GEOMETRIQUE::TYPE_ELEMENT_GEOMETRIQUE::LC_POINT)
124 fprintf(out,
"%e %e %e\n",xyz[0],xyz[1],xyz[2]);
172 std::vector<std::string> nomphase;
173 nomphase.push_back(
"phase1");
174 nomphase.push_back(
"phase2");
176 std::vector<double> lstphase;
177 lstphase.push_back(0.68);
178 lstphase.push_back(0.32);
180 std::vector<double> lstdens;
181 lstdens.push_back(5.);
182 lstdens.push_back(12.);
184 std::vector<double> lst1,lst2,lst3;
185 lst1.push_back(66.69e9);
186 lst1.push_back(120.1e9);
187 lst2.push_back(0.4189);
189 lst3.push_back(75.4e9);
190 lst3.push_back(85.2e9);
215 affiche((
char*)
"\nCreation du fichier de parametre");
223 FILE *paraout2=fopen(nom2,
"wt");
224 fprintf(paraout2,
"-> %s\n",nom);
225 fprintf(paraout2,
"operationaeffectuer = 3.000000\n");
226 fprintf(paraout2,
"reprise_geo = 1.000000\n");
227 fprintf(paraout2,
"reprise_ori = 1.000000\n");
228 fprintf(paraout2,
"reprise_mai = 1.000000\n");
229 fprintf(paraout2,
"enregistrerres = 1.000000\n");
237 FILE *out = fopen(
"vasy",
"wt");
238 fprintf(out,
"#!/bin/bash\n");
239 fprintf(out,
"for ((c=1;c<=$1;c++))\n");
240 fprintf(out,
"do\n");
241 fprintf(out,
"timeout 900s %s -polycristaux -out cristal.magic -param %s\n", nomexe,nom);
242 fprintf(out,
"VAR=$?\n");
243 fprintf(out,
"if (( $VAR )) ; then\n");
244 fprintf(out,
" echo \"Timeout\"\n");
245 fprintf(out,
"else\n");
246 fprintf(out,
" %s -polycristaux -out cristal.magic -param %s\n", nomexe,nom2);
247 fprintf(out,
"fi\n");
248 fprintf(out,
"done\n");
252 out = fopen(
"vasy_par",
"wt");
253 fprintf(out,
"#!/bin/bash\n");
254 fprintf(out,
"VAR=1\n");
255 fprintf(out,
"while (($VAR))\n");
256 fprintf(out,
"do\n");
257 bool chemindanspath=
false;
258 if ((nomexe[0]>=
'a') && (nomexe[0]<=
'z')) chemindanspath=
true;
259 if ((nomexe[0]>=
'A') && (nomexe[0]<=
'Z')) chemindanspath=
true;
261 fprintf(out,
"timeout 1800s %s -polycristaux -out cristal.magic -param %s\n", nomexe,nom);
263 fprintf(out,
"timeout 1800s ../%s -polycristaux -out cristal.magic -param %s\n", nomexe,nom);
264 fprintf(out,
"VAR=$?\n");
265 fprintf(out,
"if (( $VAR )) ; then\n");
266 fprintf(out,
" echo \"Timeout\"\n");
267 fprintf(out,
"else\n");
269 fprintf(out,
" %s -polycristaux -out cristal.magic -param %s\n", nomexe,nom2);
271 fprintf(out,
" ../%s -polycristaux -out cristal.magic -param %s\n", nomexe,nom2);
272 fprintf(out,
"fi\n");
273 fprintf(out,
"done\n");
277 chmod (
"vasy",strtol(
"0777", NULL,8));
278 chmod (
"vasy_par",strtol(
"0777", NULL,8));
295 #ifdef PROJECT_POLYCRISTAUX
305 std::string nomfichierbrep=nomfichier+
".brep";
306 std::string nomfichierocaf=nomfichier+
".ocaf";
307 std::string nomfichiercarte=nomfichier+
".sol";
308 std::string nomfichierborne=nomfichier+
".borne";
315 BOITE_3D boite(xmin,ymin,zmin,xmax,ymax,zmax);
320 std::random_device seed;
321 std::mt19937_64 generateur(seed());
322 affiche((
char*)
"\nInitialisation");
340 affiche((
char*)
"Generation de cristaux aléatoires");
341 double rayon=
param.
get_valeur(
"rayon")*0.3333333333333333333*(dx+dy+dz);
342 std::uniform_real_distribution<double> distribution_position_x(boite.
get_xmin(),boite.
get_xmax());
343 std::uniform_real_distribution<double> distribution_position_y(boite.
get_ymin(),boite.
get_ymax());
344 std::uniform_real_distribution<double> distribution_position_z(boite.
get_zmin(),boite.
get_zmax());
347 std::vector<POLYCRISTAUX::POINT_TIRE*> listepointainserer;
348 std::vector<double> listedepointvoro;
349 listedepointvoro.push_back(boite.
get_xmin());listedepointvoro.push_back(boite.
get_ymin());listedepointvoro.push_back(boite.
get_zmin());
350 listedepointvoro.push_back(boite.
get_xmin());listedepointvoro.push_back(boite.
get_ymax());listedepointvoro.push_back(boite.
get_zmin());
351 listedepointvoro.push_back(boite.
get_xmax());listedepointvoro.push_back(boite.
get_ymax());listedepointvoro.push_back(boite.
get_zmin());
352 listedepointvoro.push_back(boite.
get_xmax());listedepointvoro.push_back(boite.
get_ymin());listedepointvoro.push_back(boite.
get_zmin());
353 listedepointvoro.push_back(boite.
get_xmin());listedepointvoro.push_back(boite.
get_ymin());listedepointvoro.push_back(boite.
get_zmax());
354 listedepointvoro.push_back(boite.
get_xmin());listedepointvoro.push_back(boite.
get_ymax());listedepointvoro.push_back(boite.
get_zmax());
355 listedepointvoro.push_back(boite.
get_xmax());listedepointvoro.push_back(boite.
get_ymax());listedepointvoro.push_back(boite.
get_zmax());
356 listedepointvoro.push_back(boite.
get_xmax());listedepointvoro.push_back(boite.
get_ymin());listedepointvoro.push_back(boite.
get_zmax());
358 while (nbinsere<nbainsere)
360 double x=distribution_position_x(generateur);
361 double y=distribution_position_y(generateur);
362 double z=distribution_position_z(generateur);
374 listedepointvoro.push_back(x);
375 listedepointvoro.push_back(y);
376 listedepointvoro.push_back(z);
379 listepointainserer.push_back(pt);
384 for (
int i=0;i<listepointainserer.size();i++)
385 delete listepointainserer[i];
388 sprintf(message,
" Construction des Voronoi avec borne de fusion de %lf",epsfusion);
390 Polycristal poly(listedepointvoro,(
char*)nomfichierbrep.c_str(),epsfusion);
394 if (valeur==0) avecstep=
false;
395 if (valeur==1) avecstep=
true;
401 int nb=listedepointvoro.size()/3;
402 for (
int i=8;i<nb;i++)
404 double x=listedepointvoro[3*i];
405 double y=listedepointvoro[3*i+1];
406 double z=listedepointvoro[3*i+2];
414 affiche((
char*)
"Reprise de calcul d'un ancien polycristal");
422 sprintf(mess,
" Nombre de cristaux MAGiC assemblés = %d ", mggeo->
get_nb_mg_volume());;
424 double tens1[9],tens2[9],tens3[9];
425 for (
int i=0;i<9;i++)
433 std::uniform_real_distribution<double> distribution_angle1(0.,360.);
434 std::uniform_real_distribution<double> distribution_angle2(-1.,1.);
435 std::uniform_real_distribution<double> distribution_angle3(0.,360.);
436 affiche((
char*)
"Conditions aux limites");
437 LISTE_MG_VOLUME::iterator it;
446 std::vector<double> volume(nbphase);
447 std::vector<double> tirage(nbphase);
448 std::vector<OT_VECTEUR_3D> cdm(nbphase);
449 std::vector<double> cible(nbphase);
450 std::vector<int> ordrecible(nbphase);
451 std::vector<double> densite(nbphase);
452 std::vector<int> nbcristaux(nbphase);
455 for (
int i=0;i<nbphase;i++)
499 std::shuffle(ordrecible.begin(),ordrecible.end(),generateur);
500 std::vector<MG_VOLUME*> listevolume;
502 listevolume.push_back(vol);
503 std::shuffle(listevolume.begin(),listevolume.end(),generateur);
506 std::vector<double> deno(nbphase);
507 for (
int i=0;i<nbphase;i++)
509 for (
int i=0;i<nbphase;i++)
511 nume=nume*densite[i];
512 for (
int j=0;j<nbphase;j++)
513 if (i!=j) deno[j]=deno[j]*densite[i];
514 else deno[j]=deno[j]*cible[i];
517 for (
int i=0;i<nbphase;i++)
518 massetot=massetot+deno[i];
519 massetot=nume/massetot;
522 for (
int i=0;i<listevolume.size();i++)
528 if (tirage[ordrecible[j]]/massetot<cible[ordrecible[j]]) tir=ordrecible[j];
535 double dens=densite[tir];
537 volume[tir]=volume[tir]+volu;
538 tirage[tir]=tirage[tir]+masse;
539 cdm[tir]=cdm[tir]+masse*cdm2;
540 nbcristaux[tir]=nbcristaux[tir]+1;
565 double a1=distribution_angle1(generateur);
566 double a3=distribution_angle3(generateur);
567 double a2=distribution_angle2(generateur);
568 a2=
acos(a2)/M_PI*180.;
572 double x1[3],x2[3],x3[3];
573 double psi=a1/180.*M_PI;
574 double teta=a2/180.*M_PI;
575 double phi=a3/180.*M_PI;
583 x3[1]=-
sin(teta)*
cos(psi);
585 for (
int i=0;i<3;i++)
586 for (
int j=0;j<3;j++)
588 tens1[i*3+j]+=x1[i]*x1[j];
589 tens2[i*3+j]+=x2[i]*x2[j];
590 tens3[i*3+j]+=x3[i]*x3[j];
594 double massetotale=0.;
595 double volumetotal=0.;
596 for (
int i=0;i<nbphase;i++)
598 volumetotal=volumetotal+volume[i];
599 massetotale=massetotale+tirage[i];
602 sprintf(mess,
" Masse estimée %lf calculée %lf",massetot,massetotale);
604 statres.
masse[nbphase]=massetotale;
605 statres.
volume[nbphase]=volumetotal;
606 for (
int i=0;i<nbphase;i++)
609 sprintf(mess,
" Phase %d (%d cristaux) = tirage %d \n masse %lf ou %lf%% \n volume %lf ou %lf%%", i+1,nbcristaux[i],ordrecible[i]+1,tirage[i],tirage[i]/massetotale*100.,volume[i],volume[i]/volumetotal*100.);
611 sprintf(mess,
" Centre de masse x = %lf ",cdm[i].get_x()/tirage[i]);
613 sprintf(mess,
" y = %lf ",cdm[i].get_y()/tirage[i]);
615 sprintf(mess,
" z = %lf ",cdm[i].get_z()/tirage[i]);
617 statres.
masse[i]=tirage[i];
618 statres.
volume[i]=volume[i];
619 statres.
cdm[i]=cdm[i]/tirage[i];
620 statres.
cdm[nbphase]=statres.
cdm[nbphase]+cdm[i];
624 sprintf(mess,
" Centre de masse global x = %lf ",statres.
cdm[statres.
nbphase].get_x());
626 sprintf(mess,
" y = %lf ",statres.
cdm[statres.
nbphase].get_y());
628 sprintf(mess,
" z = %lf ",statres.
cdm[statres.
nbphase].get_z());
633 affiche((
char*)
"Reprise conditions aux limites");
634 LISTE_MG_VOLUME::iterator it;
640 for (
int i=0;i<statres.
nbphase;i++)
645 statres.
cdm[i].change_x(0.);
646 statres.
cdm[i].change_y(0.);
647 statres.
cdm[i].change_z(0.);
652 vol->get_valeur_ccf((
char*)
"a1",a1);
653 vol->get_valeur_ccf((
char*)
"a2",a2);
654 vol->get_valeur_ccf((
char*)
"a3",a3);
655 double x1[3],x2[3],x3[3];
656 double psi=a1/180.*M_PI;
657 double teta=a2/180.*M_PI;
658 double phi=a3/180.*M_PI;
666 x3[1]=-
sin(teta)*
cos(psi);
668 for (
int i=0;i<3;i++)
669 for (
int j=0;j<3;j++)
671 tens1[i*3+j]+=x1[i]*x1[j];
672 tens2[i*3+j]+=x2[i]*x2[j];
673 tens3[i*3+j]+=x3[i]*x3[j];
676 vol->get_valeur_ccf((
char*)
"Ph",val);
677 int numphase=(int)val;
678 vol->get_valeur_ccf((
char*)
"Ro",val);
683 vol->get_propriete_massique(gest->
get_mg_maillage(0),volu,mass,cdm2,m1,m2,dens,-1);
685 statres.
masse[numphase]=statres.
masse[numphase]+mass;
687 statres.
cdm[numphase]=statres.
cdm[numphase]+mass*cdm2;
694 for (
int i=0;i<statres.
nbphase;i++)
698 statres.
cdm[i]=(1./statres.
masse[i])*statres.
cdm[i];
702 for (
int i=0;i<statres.
nbphase;i++)
709 sprintf(mess,
" Centre de masse x = %lf ",statres.
cdm[i].get_x());
711 sprintf(mess,
" y = %lf ",statres.
cdm[i].get_y());
713 sprintf(mess,
" z = %lf ",statres.
cdm[i].get_z());
717 sprintf(mess,
" Centre de masse global x = %lf ",statres.
cdm[statres.
nbphase].get_x());
719 sprintf(mess,
" y = %lf ",statres.
cdm[statres.
nbphase].get_y());
721 sprintf(mess,
" z = %lf ",statres.
cdm[statres.
nbphase].get_z());
726 for (
int i=0;i<9;i++)
746 affiche((
char*)
"Carte de taille");
748 std::vector<double> lstpoint;
752 if (typeborne==1) bornerafmin=bornerafmin*dg;
753 for (
int i=0;i<nbarete;i++)
757 if (val<epsfusion) std::cout<<
" pb" << std::endl;
762 lstpoint.push_back(xyz[0]);
763 lstpoint.push_back(xyz[1]);
764 lstpoint.push_back(xyz[2]);
765 lstpoint.push_back(std::max(val,bornerafmin));
770 sprintf(message,
" Écart nodal demande : %lf Écart nodal minimal : %lf",dg,bornerafmin);
772 sprintf(message,
" %d points de raffinement",(
int)(lstpoint.size())/4);
799 LISTE_MG_VOLUME::iterator it;
int ii=0;
817 sprintf(mess,
"Maillage FEM degre %d",degre);
824 affiche((
char*)
"Reprise de calcul d'un ancien maillage");
830 LISTE_FEM_ELEMENT3::iterator it;
842 double vol=fabs(pvec*vec3);
847 sprintf(message,
" Volume des mailles = %lf",volume);
857 double epsx,epsy,epsz,epsxy,epsxz,epsyz;
858 double sigx,sigy,sigz,sigxy,sigxz,sigyz;
859 affiche((
char*)
"\n---> 1. CLDHS\n");
861 int erreur=
calcule_cacteristique_mecanique(gest,fem,epsx,epsy,epsz,epsxy,epsxz,epsyz,sigx,sigy,sigz,sigxy,sigxz,sigyz);
864 statres.
KDH=1./3.*(sigx+sigy+sigz)/(epsx+epsy+epsz);
867 sprintf(message,
" KDH=%lf",statres.
KDH);
870 else exit(EXIT_FAILURE);
875 affiche((
char*)
"\n---> 2. CLDHD\n");
877 erreur=
calcule_cacteristique_mecanique(gest,fem,epsx,epsy,epsz,epsxy,epsxz,epsyz,sigx,sigy,sigz,sigxy,sigxz,sigyz);
880 statres.
GDH=1./6.*(sigxy/epsxy+sigyz/epsyz+sigxz/epsxz);
884 sprintf(message,
" GDH=%lf\n EDH=%lf\n",statres.
GDH,statres.
EDH);
887 else exit(EXIT_FAILURE);
892 affiche((
char*)
"\n---> 3. CLCHS\n");
894 erreur=
calcule_cacteristique_mecanique(gest,fem,epsx,epsy,epsz,epsxy,epsxz,epsyz,sigx,sigy,sigz,sigxy,sigxz,sigyz);
897 statres.
KCH=1./3.*(sigx+sigy+sigz)/(epsx+epsy+epsz);
900 sprintf(message,
" KCH=%lf\n\n",statres.
KCH);
903 else exit(EXIT_FAILURE);
909 affiche((
char*)
"\n---> 4. CLCHD\n");
911 calcule_cacteristique_mecanique(gest,fem,epsx,epsy,epsz,epsxy,epsxz,epsyz,sigx,sigy,sigz,sigxy,sigxz,sigyz);
914 statres.
GCH=1./6.*(sigxy/epsxy+sigyz/epsyz+sigxz/epsxz);
918 sprintf(message,
" GCH=%lf\n ECH=%lf\n",statres.
GCH,statres.
ECH);
921 else exit(EXIT_FAILURE);
924 affiche((
char*)
"\n\n Résultats \n\n");
926 sprintf(message,
" KDH=%lf;GDH=%lf;EDH=%lf;",statres.
KDH,statres.
GDH,statres.
EDH);
928 sprintf(message,
" KCH=%lf;GCH=%lf;ECH=%lf;\n",statres.
KCH,statres.
GCH,statres.
ECH);
938 if (enregistreresultat==1)
946 std::string nomcumul1 = nomcumul+
".txt";
947 std::string nomcumul2 = nomcumul+
".gnu";
948 std::string nomcumul3 = nomcumul+
".svg";
949 FILE *outtest=fopen((
char*)nomcumul1.c_str(),
"rt");
951 if (outtest!=NULL) {
existe=
true;fclose(outtest);}
953 FILE *out=fopen((
char*)nomcumul1.c_str(),
"at");
955 { fprintf(out,
"Nbcristaux;degre;dg;KDH;GDH;EDH;KCH;GCH;ECH;ori1_11;ori1_12;ori1_13;ori1_21;ori1_22;ori1_23;ori1_31;ori1_32;ori1_33;ori2_11;ori2_12;ori2_13;ori2_21;ori2_22;ori2_23;ori2_31;ori2_32;ori2_33;ori3_11;ori3_12;ori3_13;ori3_21;ori3_22;ori3_23;ori3_31;ori3_32;ori3_33;Nbphase;");
956 for (
int i=0;i<statres.
nbphase;i++)
957 fprintf(out,
"N%d;VPh%d;MPh%d;CDMx%d;CDMy%d;CDMz%d;",i+1,i+1,i+1,i+1,i+1,i+1);
958 fprintf(out,
"VPhtot;MPhtot;CDMxtot;CDMytot;CDMztot,Kv,Gv,Ev,nuv,Kr,Gr,Er,nur\n");
961 fprintf(out,
"%lf;%lf;%lf;",statres.
KDH,statres.
GDH,statres.
EDH);
962 fprintf(out,
"%lf;%lf;%lf;",statres.
KCH,statres.
GCH,statres.
ECH);
963 for (
int i=0;i<9;i++)
964 fprintf(out,
"%lf;",statres.
tens1[i]);
965 for (
int i=0;i<9;i++)
966 fprintf(out,
"%lf;",statres.
tens2[i]);
967 for (
int i=0;i<9;i++)
968 fprintf(out,
"%lf;",statres.
tens3[i]);
969 fprintf(out,
"%d;",statres.
nbphase);
970 for (
int i=0;i<statres.
nbphase;i++)
1018 affiche((
char*)
"Enregistrement");
1027 int MSTRUCT_GENERATEUR_POLYCRISTAUX::calcule_cacteristique_mecanique(
MG_GESTIONNAIRE *gest,
FEM_MAILLAGE* fem,
double& epsx,
double& epsy,
double& epsz,
double& epsxy,
double& epsxz,
double& epsyz,
double& sigx,
double& sigy,
double& sigz,
double& sigxy,
double& sigxz,
double& sigyz)
1036 if (erreur!=0)
return erreur;
1038 for (
int i=0;i<nb;i++)
1042 std::string nom=sol->
get_nom();
1076 if (typeborne==1) bornerafmin=bornerafmin*dg;
1078 std::multimap<MG_NOEUD*,MG_NOEUD*> lst1;
1079 std::map<MG_NOEUD*,MG_NOEUD*> lst2;
1080 LISTE_MG_SEGMENT::iterator it;
1083 if (seg->get_longueur()<bornerafmin)
1085 int nb1=seg->get_noeud1()->get_lien_tetra()->
get_nb();
1086 int nb2=seg->get_noeud2()->get_lien_tetra()->get_nb();
1095 std::map<MG_NOEUD*,MG_NOEUD*>::iterator itn=lst2.find(no1);
1096 if (itn!=lst2.end())
1098 std::pair<MG_NOEUD*,MG_NOEUD*> tmp1(no1,no2);
1099 std::pair<MG_NOEUD*,MG_NOEUD*> tmp2(no2,no1);
1100 std::pair<std::map<MG_NOEUD*,MG_NOEUD*>::iterator,
bool> ret=lst2.insert(tmp2);
1101 if (ret.second==
false)
continue;
1103 for (
int i=0;i<nb1;i++)
1104 for (
int j=0;j<nb2;j++)
1105 if (seg->get_noeud1()->get_lien_tetra()->get(i)==seg->get_noeud2()->get_lien_tetra()->get(j))
1115 for (std::multimap<MG_NOEUD*,MG_NOEUD*>::iterator itn=lst1.begin();itn!=lst1.end();itn++)
1123 for (
int i=0;i<nb;i++)
1134 for (
int i=0;i<lsttetaconstruire.
get_nb()/4;i++)
1137 if (qual<1e-14) std::cout << qual << std::endl;
1155 for (
int i=0;i<echantillon.
nbphase;i++)
1166 OT_TENSEUR rig(6,6),rigphase(6,6),souphase(6,6);
1170 rigphase=proportion*rigphase;
1171 souphase=proportion*souphase;
1172 rigtot=rigtot+rigphase;
1173 soutot=soutot+souphase;
1175 double Ev,Gv,Kv,nuv;
1176 double Er,Gr,Kr,nur;
1179 statborne.
Kvoigt=Kv/3.*1e9;
1180 statborne.
Gvoigt=Gv/2.*1e9;
1183 statborne.
Kreuss=Kr/3.*1e9;
1184 statborne.
Greuss=Gr/2.*1e9;
void change_grosseur(double f)
virtual void construit(void)
virtual void enregistrer(char *nom)
FEM_ELEMENT3 * get_suivant_element3(LISTE_FEM_ELEMENT3::iterator &it)
FEM_ELEMENT3 * get_premier_element3(LISTE_FEM_ELEMENT3::iterator &it)
double get_moyenne_volumique_champs(class MG_VOLUME *vol, int numchamps, int coord=0)
std::string get_nom(void)
virtual void active_affichage(fonction_affiche *fonc)
int maille(MG_GROUPE_TOPOLOGIQUE *mggt=NULL)
int maille(MG_GROUPE_TOPOLOGIQUE *mggt=NULL)
int maille(MG_GROUPE_TOPOLOGIQUE *mggt=NULL)
virtual int maille(MG_GROUPE_TOPOLOGIQUE *mggt=NULL)
virtual int maille(class FEM_MAILLAGE *fem, bool courbure_discrete=false, int num=0)
virtual double get_tmax(void)
virtual double get_tmin(void)
virtual double get_longueur(double t1, double t2, double precis=1e-6)
virtual class MG_COSOMMET * get_cosommet1(void)
virtual MG_SOMMET * get_sommet(void)
MG_ELEMENT_TOPOLOGIQUE * get_lien_topologie(void)
virtual int get_nb_ccf(void)
virtual void ajouter_ccf(char *nom, double val, std::string suiv="NS")
virtual void supprimer_ccf(int num)
void ecrire_params_aster(char *fichier)
void change_param_aster(char *nomparam, double val)
unsigned int get_nb_mg_arete(void)
void change_valeur_unite(double val)
MG_POINT * get_premier_point(LISTE_MG_POINT::iterator &it)
void efface_ccf(bool volume, bool face, bool arete, bool sommet)
virtual int ajouter_mg_point(MG_POINT *mgpt)
MG_ARETE * get_mg_arete(unsigned int num)
MG_POINT * get_suivant_point(LISTE_MG_POINT::iterator &it)
unsigned int get_nb_mg_volume(void)
MG_VOLUME * get_suivant_volume(LISTE_MG_VOLUME::iterator &it)
MG_VOLUME * get_premier_volume(LISTE_MG_VOLUME::iterator &it)
unsigned int get_nb_mg_maillage(void)
MG_MAILLAGE * get_mg_maillage(unsigned int num)
int supprimer_mg_maillage(unsigned int num)
FEM_SOLUTION * get_fem_solution(unsigned int num)
int ajouter_fem_maillage(FEM_MAILLAGE *femmai)
MG_GEOMETRIE * get_mg_geometrie(unsigned int num)
virtual void enregistrer(std::ostream &o, double version=MAGIC_VERSION_FICHIER_DOUBLE)
FEM_MAILLAGE * get_fem_maillage(unsigned int num)
void supprimer_tout_fem_maillage(void)
void supprimer_tout_fem_solution(void)
int ajouter_mg_maillage(MG_MAILLAGE *mgmai)
unsigned int get_nb_fem_solution(void)
MG_SEGMENT * get_premier_segment(LISTE_MG_SEGMENT::iterator &)
MG_SEGMENT * get_suivant_segment(LISTE_MG_SEGMENT::iterator &)
MG_TETRA * ajouter_mg_tetra(MG_ELEMENT_TOPOLOGIQUE *topo, class MG_NOEUD *mgnoeud1, class MG_NOEUD *mgnoeud2, class MG_NOEUD *mgnoeud3, class MG_NOEUD *mgnoeud4, int origine, unsigned long num=0)
int supprimer_mg_tetraid(unsigned long num)
TPL_LISTE_ENTITE< class MG_TETRA * > * get_lien_tetra(void)
virtual double * get_coord(void)
virtual void evaluer(double *xyz)=0
virtual MG_POINT * get_point(void)
virtual MG_NOEUD * get_noeud1(void)
virtual MG_NOEUD * get_noeud2(void)
virtual MG_NOEUD * get_noeud4(void)
virtual MG_NOEUD * get_noeud3(void)
virtual void get_propriete_massique(class MG_MAILLAGE *mai, double &masse, double &volume, class OT_VECTEUR_3D &cdm, class OT_MATRICE_3D &inertieglobale, class OT_MATRICE_3D &inertiecdm, double dens=1., int sens=1)
virtual int calcule(char *nomfichierparam, class FEM_MAILLAGE *fem, char *nometude, int typeetude, char *code=NULL, bool avecenreg=true)
virtual void active_affichage(void(*fonc)(char *))
void get_VoigtReuss_poly(double c11, double c12, double c13, double c23, double c22, double c33, double c44, double c55, double c66, double &troisKvoigt, double &deuxGvoigt, double &Evoigt, double &nuvoigt, double &troisKreuss, double &deuxGreuss, double &Ereuss, double &nureuss)
void get_tenseur_rigidite(double E1, double E2, double E3, double G1, double G2, double G3, double nu1, double nu2, double nu3, OT_TENSEUR &rigE)
MSTRUCT_GENERATEUR_POLYCRISTAUX_BORNE()
virtual ~MSTRUCT_GENERATEUR_POLYCRISTAUX_BORNE()
virtual ~MSTRUCT_GENERATEUR_POLYCRISTAUX_RESULTAT()
std::vector< double > volume
MSTRUCT_GENERATEUR_POLYCRISTAUX_RESULTAT()
std::vector< double > masse
std::vector< int > nbcristauxphase
std::vector< OT_VECTEUR_3D > cdm
fonction_affiche * affiche2
virtual void calcule_borne(MSTRUCT_GENERATEUR_POLYCRISTAUX_BORNE &statborne, MSTRUCT_GENERATEUR_POLYCRISTAUX_RESULTAT &echantillon)
void optimise_maillage(MG_MAILLAGE *mai)
virtual void ini_param(char *nom)
virtual void affiche(char *mess)
~MSTRUCT_GENERATEUR_POLYCRISTAUX()
virtual void genere(char *nommagic)
int calcule_cacteristique_mecanique(MG_GESTIONNAIRE *gest, FEM_MAILLAGE *fem, double &epsx, double &epsy, double &epsz, double &epsxy, double &epsxz, double &epsyz, double &sigx, double &sigy, double &sigz, double &sigxy, double &sigxz, double &sigyz)
MSTRUCT_GENERATEUR_POLYCRISTAUX()
virtual void cree_param(char *nom, char *nomexe)
virtual void active_affichage(fonction_affiche *fonc)
static int appliquer_conditions_limites(MG_GEOMETRIE *m_mg_geometrie, BOITE_3D boite3D_ves, int Type_etude, int Type_CL, int Type_Chargement, double Valeur_CL, int Direction=0, double eps=1.0e-06)
class MG_MAILLAGE * importer_triangulation_V2017(class MG_GESTIONNAIRE &gest, MG_GEOMETRIE *mggeo, double epsilon=1., int mode=1)
class MG_GEOMETRIE * importer_fichier_brep_V2017(class MG_GESTIONNAIRE &gest, char *path_brep, char *nom_caf, int typefichier, double precision=1e-6, bool fusionner_entite_similaire=false)
static double qualite_tetra(double *noeud1, double *noeud2, double *noeud3, double *noeud4)
void enregistrer(char *nom)
void change_valeur(std::string chaine, double val, int num=0)
std::string get_nom(std::string chaine, int num=0)
void ajouter(std::string chaine, double valeur, int typep, std::string aide="")
double get_valeur(std::string chaine, int num=0)
virtual double get_longueur(void) const
virtual void active_affichage(fonction_affiche *fonc)
virtual void construit(bool avecstep=false)
virtual void inserer(A a)
virtual void rechercher(BOITE_3D bt, TPL_MAP_ENTITE< A > &liste_entite_trouve)
virtual void initialiser(double xmin, double ymin, double zmin, double xmax, double ymax, double zmax, int nb_pasx, int nb_pasy, int nb_pasz)
virtual void ajouter(X x)
virtual X get_premier(ITERATEUR &it)
virtual X get_suivant(ITERATEUR &it)
virtual void ajouter(X x)
std::map< unsigned long, X, std::less< unsigned long > >::iterator ITERATEUR
void fonction_affiche(char *)
double2 sin(double2 &val)
double2 acos(double2 &val)
double2 cos(double2 &val)
int existe(const std::vector< T > &vct, double val, int &idx)