64 double *xyz1,*xyz2,*xyz3;
82 double *xyz1,*xyz2,*xyz3;
100 double *xyz1,*xyz2,*xyz3,*xyz4;
120 double *xyz1,*xyz2,*xyz3;
139 double *xyz1,*xyz2,*xyz3;
160 double *xyz1,*xyz2,*xyz3,*xyz4;
203 return get_angle_par_noeud<FEM_NOEUD*>(noeud1,noeud2,noeud3,noeud4,noeud5,noeud6);
221 LISTE_FEM_NOEUD::iterator it_no;
224 if (noeud->get_lien_topologie()->get_dimension()==2)
226 int nb_ele2=noeud->get_lien_element2()->get_nb();
231 for (
int k=0;k<nb_ele2;k++)
234 liste_map_element2.
ajouter(tri1);
245 if (na==noeud) {n1=na;n2=nb;n3=nc;}
246 if (nb==noeud) {n1=nb;n2=nc;n3=na;}
247 if (nc==noeud) {n1=nc;n2=na;n3=nb;}
249 liste_tpl_element2.
ajouter(tri2);
252 while (liste_map_element2.
get_nb()!=liste_tpl_element2.
get_nb())
264 if (noa==noeud) {n4=noa;n5=nob;n6=noc;}
265 if (nob==noeud) {n4=nob;n5=noc;n6=noa;}
266 if (noc==noeud) {n4=noc;n5=noa;n6=nob;}
271 liste_tpl_element2.
ajouter(tri);
275 if (liste_map_element2.
get_nb()==liste_tpl_element2.
get_nb())
break;
294 for (
int i=0;i<liste_tpl_element2.
get_nb();i++)
299 if (!(i==(liste_tpl_element2.
get_nb()-1))) {tri00=liste_tpl_element2.
get(i);tri01=liste_tpl_element2.
get(i+1);}
300 if (i==(liste_tpl_element2.
get_nb()-1)) {tri00=liste_tpl_element2.
get(i);tri01=tri2;}
316 if (nd1==noeud) {noeud1=nd1;noeud2=nd2;noeud3=nd3;}
317 if (nd2==noeud) {noeud1=nd2;noeud2=nd3;noeud3=nd1;}
318 if (nd3==noeud) {noeud1=nd3;noeud2=nd1;noeud3=nd2;}
319 if (nd4==noeud) {noeud4=nd4;noeud5=nd5;noeud6=nd6;}
320 if (nd5==noeud) {noeud4=nd5;noeud5=nd6;noeud6=nd4;}
321 if (nd6==noeud) {noeud4=nd6;noeud5=nd4;noeud6=nd5;}
341 double alpha=
acos(cosalpha);
342 double cotalpha=(cosalpha/
sin(alpha));
352 som3=som3+(I*I*cotalpha);
356 double L=vec2.get_longueur();
365 K=((2.*M_PI-som1)/((0.5*som2)-(0.125*som3)));
366 H=((0.25*som4)/((0.5*som2)-(0.125*som3)));
367 if (H*H-K>0.) kM=H+
sqrt((H)*(H)-(K));
else kM=H;
368 if (kM<0.000001) kM=0.;
369 if (H*H-K>0.) km=H-
sqrt((H)*(H)-(K));
else km=H;
370 if (km>-0.000001) km=0.;
445 jac[0]=(xyz2[0]-xyz1[0]);
446 jac[1]=(xyz2[1]-xyz1[1]);
447 jac[2]=(xyz2[2]-xyz1[2]);
448 jac[3]=(xyz3[0]-xyz1[0]);
449 jac[4]=(xyz3[1]-xyz1[1]);
450 jac[5]=(xyz3[2]-xyz1[2]);
451 jac[6]=(xyz4[0]-xyz1[0]);
452 jac[7]=(xyz4[1]-xyz1[1]);
453 jac[8]=(xyz4[2]-xyz1[2]);
454 double detj=jac[0]*jac[4]*jac[8]+jac[3]*jac[7]*jac[2]+jac[6]*jac[1]*jac[5]-jac[2]*jac[4]*jac[6]-jac[5]*jac[7]*jac[0]-jac[8]*jac[1]*jac[3];
456 j[0*3+0] = (jac[1*3+1]*jac[2*3+2]-jac[1*3+2]*jac[2*3+1])/(detj);
457 j[0*3+1] = -(jac[0*3+1]*jac[2*3+2]-jac[0*3+2]*jac[2*3+1])/(detj);
458 j[0*3+2] =-(-jac[0*3+1]*jac[1*3+2]+jac[0*3+2]*jac[1*3+1])/(detj);
459 j[1*3+0] = -(jac[1*3+0]*jac[2*3+2]-jac[1*3+2]*jac[2*3+0])/(detj);
460 j[1*3+1] = (jac[0*3+0]*jac[2*3+2]-jac[0*3+2]*jac[2*3+0])/(detj);
461 j[1*3+2] = -(jac[0*3+0]*jac[1*3+2]-jac[0*3+2]*jac[1*3+0])/(detj);
462 j[2*3+0] =-(-jac[1*3+0]*jac[2*3+1]+jac[1*3+1]*jac[2*3+0])/(detj);
463 j[2*3+1] = -(jac[0*3+0]*jac[2*3+1]-jac[0*3+1]*jac[2*3+0])/(detj);
464 j[2*3+2] = (jac[0*3+0]*jac[1*3+1]-jac[0*3+1]*jac[1*3+0])/(detj);
472 double gd_x = j[0*3+0]*(d1-d0)+j[0*3+1]*(d2-d0)+j[0*3+2]*(d3-d0);
473 double gd_y = j[1*3+0]*(d1-d0)+j[1*3+1]*(d2-d0)+j[1*3+2]*(d3-d0);
474 double gd_z = j[2*3+0]*(d1-d0)+j[2*3+1]*(d2-d0)+j[2*3+2]*(d3-d0);
477 return(gd.get_longueur());
491 if (fem1!=fem2)
return;
494 char nomfichier[255];
501 LISTE_FEM_NOEUD::iterator it;
504 double val1=sol1->
lire(numno,numchamp1);
505 double val2=sol2->
lire(numno,numchamp2);
506 double erreur=(val1-val2)/val2;
507 sol3->
ecrire(erreur,numno,0);
508 sol3->
ecrire(fabs(erreur),numno,1);
627 if (fem1!=fem2)
return;
629 LISTE_FEM_NOEUD::iterator it;
632 double val1=sol1->
lire(numno,numchamp1);
633 double val2=sol2->
lire(numno,numchamp2);
653 val=fabs(val1-val2)/val1;
659 sol3->
ecrire(val,numno,numchamp3);
689 LISTE_FEM_NOEUD::iterator it;
690 double xmin=1e308,ymin=1e308,zmin=1e308;
691 double xmax=-1e308,ymax=-1e308,zmax=-1e308;
695 if (no->get_x()>xmax) xmax=no->get_x();
696 if (no->get_y()>ymax) ymax=no->get_y();
697 if (no->get_z()>zmax) zmax=no->get_z();
698 if (no->get_x()<xmin) xmin=no->get_x();
699 if (no->get_y()<ymin) ymin=no->get_y();
700 if (no->get_z()<zmin) zmin=no->get_z();
703 BOITE_3D boite(xmin,ymin,zmin,xmax,ymax,zmax);
708 LISTE_FEM_ELEMENT2::iterator ite;
713 sprintf(nom,
"%sproj",sol->
get_nom().c_str());
714 char nomfichier[255];
725 oct.
rechercher(no->get_x(),no->get_y(),no->get_z(),0.,rechercheele);
732 bool res=ele2->get_param_element_fini_2D(no->get_coord(),uv);
734 if (ele2->valide_parametre_EF(uv)==
true)
736 double *sol1val=
new double[dimsol];
737 for (
int j=0;j<dimsol;j++)
739 for (
int i=0;i<ele2->get_nb_fem_noeud();i++)
741 double interpol=ele2->get_fonction_interpolation(i+1,uv);
742 for (
int j=0;j<dimsol;j++)
743 sol1val[j]=sol1val[j]+interpol*ele2->get_fem_noeud(i)->get_solution(j);
747 for (
int j=0;j<dimsol;j++)
748 sol2->
ecrire(sol1val[j],numno,0,j);
755 std::cerr <<
"non projete " <<std::endl;
768 LISTE_FEM_NOEUD::iterator it;
769 double xmin=1e308,ymin=1e308,zmin=1e308;
770 double xmax=-1e308,ymax=-1e308,zmax=-1e308;
774 if (no->get_x()>xmax) xmax=no->get_x();
775 if (no->get_y()>ymax) ymax=no->get_y();
776 if (no->get_z()>zmax) zmax=no->get_z();
777 if (no->get_x()<xmin) xmin=no->get_x();
778 if (no->get_y()<ymin) ymin=no->get_y();
779 if (no->get_z()<zmin) zmin=no->get_z();
782 BOITE_3D boite(xmin,ymin,zmin,xmax,ymax,zmax);
786 LISTE_FEM_ELEMENT3::iterator ite;
791 sprintf(nom,
"%sproj",sol->
get_nom().c_str());
792 char nomfichier[255];
803 oct.
rechercher(no->get_x(),no->get_y(),no->get_z(),0.,rechercheele);
806 int num=rechercheele.
get_nb();
810 bool res=ele3->get_param_element_fini(no->get_coord(),uv);
811 if (
res==
false) std::cout <<
" non convergence " << std::endl;
813 if (ele3->valide_parametre_EF(uv)==
true)
815 double *sol1val=
new double[dimsol];
816 for (
int j=0;j<dimsol;j++)
818 for (
int i=0;i<ele3->get_nb_fem_noeud();i++)
820 double interpol=ele3->get_fonction_interpolation(i+1,uv);
821 for (
int j=0;j<dimsol;j++)
822 sol1val[j]=sol1val[j]+interpol*ele3->get_fem_noeud(i)->get_solution(j);
826 for (
int j=0;j<dimsol;j++)
827 sol2->
ecrire(sol1val[j],numno,0,j);
834 std::cerr <<
"non projete " <<std::endl;