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

File Contents

# User Rev Content
1 1 /*****************************************************************
2    
3     m3d_analyse.cpp Type:Func
4    
5     Analyse du respect de la densite en 3D
6    
7     Date de creation : 15-4-1999 14 :30 :43
8     Derniere version : 15-4-1999 14 :30 :43
9    
10     Vincent FRANCOIS
11    
12     *****************************************************************/
13    
14    
15    
16    
17    
18     /**************************/
19     /* include */
20     #include <stdio.h>
21     #include <math.h>
22     #include <string.h>
23     #include "memoire.h"
24     #include "const.h"
25     #include "struct.h"
26     #include "prototype.h"
27    
28     /**************************/
29     /* variables globales */
30     extern struct environnement env;
31     extern struct s_mesh *mesh;
32     extern struct s_acis *acis;
33    
34    
35    
36     /**************************/
37     /* programme principal */
38    
39     void m3d_analyse(void)
40     {
41     struct s_tetra *tet;
42     struct s_noeud *no1,*no2,*no3,*no4;
43     float a,b,poids_gauss[4],xsi_gauss[4],eta_gauss[4],zeta_gauss[4];
44     float total_integ,integ;
45     float n1n2[4],n1n3[4],n1n4[4],vec[4];
46     float det_j,facteur;
47     float x,y,z,dens;
48     int i,j,n;
49     char mess[255];
50    
51     a=0.1381966012;
52     b=0.5854101965;
53     poids_gauss[0]=0.041666666666666;xsi_gauss[0]=a;eta_gauss[0]=a;zeta_gauss[0]=a;
54     poids_gauss[1]=0.041666666666666;xsi_gauss[1]=a;eta_gauss[1]=a;zeta_gauss[1]=b;
55     poids_gauss[2]=0.041666666666666;xsi_gauss[2]=a;eta_gauss[2]=b;zeta_gauss[2]=a;
56     poids_gauss[3]=0.041666666666666;xsi_gauss[3]=b;eta_gauss[3]=a;zeta_gauss[3]=a;
57     total_integ=0.;
58    
59     for (i=0;i<mesh->nb_tetra;i++)
60     {
61     tet=ADRESSE(i,tetra,mesh->);
62     no1=ADRESSE(tet->n1,noeud,mesh->);
63     no2=ADRESSE(tet->n2,noeud,mesh->);
64     no3=ADRESSE(tet->n3,noeud,mesh->);
65     no4=ADRESSE(tet->n4,noeud,mesh->);
66     VEC(n1n2,no1,no2);
67     VEC(n1n3,no1,no3);
68     VEC(n1n4,no1,no4);
69     PVEC(vec,n1n2,n1n3);
70     det_j=PSCA(vec,n1n4);
71     facteur=8.485281374*det_j;
72     integ=0.;
73     for (j=0;j<4;j++)
74     {
75     x=(1-xsi_gauss[j]-eta_gauss[j]-zeta_gauss[j])*no1->x+xsi_gauss[j]*no2->x+eta_gauss[j]*no3->x+zeta_gauss[j]*no4->x;
76     y=(1-xsi_gauss[j]-eta_gauss[j]-zeta_gauss[j])*no1->y+xsi_gauss[j]*no2->y+eta_gauss[j]*no3->y+zeta_gauss[j]*no4->y;
77     z=(1-xsi_gauss[j]-eta_gauss[j]-zeta_gauss[j])*no1->z+xsi_gauss[j]*no2->z+eta_gauss[j]*no3->z+zeta_gauss[j]*no4->z;
78     dens=eval_fdn3(x,y,z);
79     dens=dens*dens*dens;
80     integ=integ+poids_gauss[j]*facteur/dens;
81     }
82     total_integ=total_integ+integ;
83     }
84     n=(int)floor(total_integ);
85     if (total_integ-n>0.5) n++;
86     sprintf(mess,M2D_ANA_RES1,n,mesh->nb_tetra);
87     aff_text(mess);
88     sprintf(mess,M2D_ANA_RES2,(n-mesh->nb_tetra)*1.0/n);
89     aff_text(mess);
90     }