ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/acismesh/m2d_ana_dens.cpp
Revision: 1
Committed: Mon Jun 11 22:53:07 2007 UTC (17 years, 11 months ago)
File size: 4616 byte(s)
Log Message:

File Contents

# Content
1 /*****************************************************************
2
3 m2d_ana_dens.c Type:Func
4
5 analyse du respect de la carte de taille
6
7 Date de creation : Tue May 27 17:24:28 1997
8
9 Derniere version : Tue Jul 29 11:24:48 1997
10
11
12
13
14
15
16
17
18
19 Vincent FRANCOIS
20
21 *****************************************************************/
22
23
24
25
26
27 /**************************/
28 /* include */
29 #include <stdio.h>
30 #include <math.h>
31 #include <string.h>
32 #include "memoire.h"
33 #include "const.h"
34 #include "struct.h"
35 #include "prototype.h"
36
37 /**************************/
38 /* variables globales */
39 extern struct environnement env;
40 extern struct s_mesh *mesh;
41 extern struct s_acis *acis;
42
43
44
45 /**************************/
46 /* programme principal */
47
48 void m2d_ana_dens(struct s_face *face,int debut, int fin)
49 {
50 struct s_triangle *tri;
51 struct s_noeud *no1,*no2,*no3;
52 float a,b,poids_gauss[6],xsi_gauss[6],eta_gauss[6];
53 float total_integ,integ;
54 float x1,y1,z1,eps_ref,eps_ref1,eps_ref2,eps;
55 float u1,v1,u2,v2,u3,v3;
56 float du,dv;
57 int i,j,n,nb_pratique;
58 float vec1[3],vec2[3],vec[3],det_j,facteur,x,y,z,dens,uref,vref;
59 char mess[255];
60
61
62
63 a=0.445948490915965;
64 b=0.091576213509771;
65 poids_gauss[0]=0.111690794839005;xsi_gauss[0]=a;eta_gauss[0]=a;
66 poids_gauss[1]=0.111690794839005;xsi_gauss[1]=1.0-2.0*a;eta_gauss[1]=a;
67 poids_gauss[2]=0.111690794839005;xsi_gauss[2]=a;eta_gauss[2]=1.0-2.0*a;
68 poids_gauss[3]=0.054975871827661;xsi_gauss[3]=b;eta_gauss[3]=b;
69 poids_gauss[4]=0.054975871827661;xsi_gauss[4]=1.0-2.0*b;eta_gauss[4]=b;
70 poids_gauss[5]=0.054975871827661;xsi_gauss[5]=b;eta_gauss[5]=1.0-2.0*b;
71 total_integ=0.;
72 nb_pratique=0;
73 eps_ref=0.;
74 eps_ref1=0.;
75 eps_ref2=0.;
76 for (i=0;i<mesh->nb_triangle;i++)
77 {
78 tri=ADRESSE(i,triangle,mesh->);
79 if (tri->num_ent==face->num)
80 {
81 nb_pratique++;
82 no1=ADRESSE(tri->n1,noeud,mesh->);
83 no2=ADRESSE(tri->n2,noeud,mesh->);
84 no3=ADRESSE(tri->n3,noeud,mesh->);
85 VEC(vec1,no1,no2);
86 VEC(vec2,no1,no3);
87 PVEC(vec,vec1,vec2);
88 det_j=(float)sqrt((double)PSCA(vec,vec));
89 facteur=2.309401077*det_j;
90 integ=0.;
91 for (j=0;j<6;j++)
92 {
93 x=(1-xsi_gauss[j]-eta_gauss[j])*no1->x+xsi_gauss[j]*no2->x+eta_gauss[j]*no3->x;
94 y=(1-xsi_gauss[j]-eta_gauss[j])*no1->y+xsi_gauss[j]*no2->y+eta_gauss[j]*no3->y;
95 z=(1-xsi_gauss[j]-eta_gauss[j])*no1->z+xsi_gauss[j]*no2->z+eta_gauss[j]*no3->z;
96 if (mesh->rev_u!=0.) du=0.5*mesh->rev_u-no1->u; else du=0.;
97 if (mesh->rev_v!=0.) dv=0.5*mesh->rev_v-no1->v; else dv=0.;
98 eval_decale(&u1,du,no1->u,U);
99 eval_decale(&v1,dv,no1->v,V);
100 eval_decale(&u2,du,no2->u,U);
101 eval_decale(&v2,dv,no2->v,V);
102 eval_decale(&u3,du,no3->u,U);
103 eval_decale(&v3,dv,no3->v,V);
104 uref=(1-xsi_gauss[j]-eta_gauss[j])*u1+xsi_gauss[j]*u2+eta_gauss[j]*u3;
105 vref=(1-xsi_gauss[j]-eta_gauss[j])*v1+xsi_gauss[j]*v2+eta_gauss[j]*v3;
106 eval_face(face,&uref,&vref,FONCTION,&x1,&y1,&z1,du,dv);
107 dens=eval_fdn2b(face,uref-du,vref-dv,TOTAL);
108 dens=dens*dens;
109 integ=integ+poids_gauss[j]*facteur/dens;
110 eps=(float)sqrt((double)((x-x1)*(x-x1)+(y-y1)*(y-y1)+(z-z1)*(z-z1)));
111 if (eps>eps_ref) eps_ref=eps;
112 if ((tri->origine==1)&&(eps>eps_ref1)) eps_ref1=eps;
113 if ((tri->origine==2)&&(eps>eps_ref2)) eps_ref2=eps;
114 }
115 total_integ=total_integ+integ;
116 }
117 }
118 n=(int)floor(total_integ);
119 if (total_integ-n>0.5) n++;
120 mesh->theorique=mesh->theorique+n;
121 sprintf(mess,M2D_ANA_RES1,n,nb_pratique);
122 aff_text(mess);
123 sprintf(mess,M2D_ANA_RES2,(n-nb_pratique)*1.0/n);
124 aff_text(mess);
125 sprintf(mess,M2D_ANA_RES3,eps_ref);
126 aff_text(mess);
127 sprintf(mess,M2D_ANA_RES4,eps_ref1);
128 aff_text(mess);
129 sprintf(mess,M2D_ANA_RES5,eps_ref2);
130 aff_text(mess);
131 MAXI(env.eps_ref,env.eps_ref,eps_ref);
132 MAXI(env.eps_ref1,env.eps_ref1,eps_ref1);
133 MAXI(env.eps_ref2,env.eps_ref2,eps_ref2);
134 }