ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/diamesh/src/m3d_rech3.cpp
Revision: 283
Committed: Tue Sep 13 21:11:20 2011 UTC (13 years, 8 months ago) by francois
File size: 3062 byte(s)
Log Message:
structure de l'écriture

File Contents

# User Rev Content
1 francois 283 #include <stdio.h>
2     #include <math.h>
3     #include "m3d_struct.h"
4     #include "m3d_const.h"
5     #include "m3d_hotes.h"
6     #include "m3d_erreur.h"
7     #include "prototype.h"
8     extern GEST_MEM *gest ;
9     extern int debug ;
10     int m3d_rech3(FACE *face,NOEUD **nresu)
11     {
12     int i, j, k, j1, j2, j3, j4 ;
13     int is_j1, is_j2, is_j3, is_j4, nump,nb, num, card, nele ;
14     int nb_noe_rec = 0 ;
15     int nb_ele_rec = 0 ;
16     float vab[3], vac[3], vn[3], pvec[3], norme, vap[3] ;
17     FILE *stream ;
18     float *coord ;
19     int iptr ;
20    
21     coord = gest->coord ;
22     j1 = j2 = j3 = j4 = 0 ;
23    
24     card = gest->card ;
25     num = face->n1->num ;
26     iptr = gest->tab_card[num] ;
27     k = 0 ;
28     nele = 0 ;
29     nele = gest->tab_ref[iptr+k] ;
30     while (nele>-1)
31     {
32     j1 = gest->tab_rec[4*nele] ;
33     j2 = gest->tab_rec[4*nele+1] ;
34     j3 = gest->tab_rec[4*nele+2] ;
35     j4 = gest->tab_rec[4*nele+3] ;
36    
37     nb = 0 ;
38     is_j1 = is_j2 = is_j3 = is_j4 = 0 ;
39    
40     if ((face->n1->num == j1) || (face->n2->num == j1) || (face->n3->num == j1)) {
41     nb++ ;
42     is_j1 = 1;
43     }
44     if ((face->n1->num == j2) || (face->n2->num == j2) || (face->n3->num == j2)) {
45     nb++ ;
46     is_j2 = 1;
47     }
48     if ((face->n1->num == j3) || (face->n2->num == j3) || (face->n3->num == j3)) {
49     nb++ ;
50     is_j3 = 1;
51     }
52     if ((face->n1->num == j4) || (face->n2->num == j4) || (face->n3->num == j4)) {
53     nb++ ;
54     is_j4 = 1;
55     }
56     if (nb == 3)
57     {
58     if (!is_j1) nump = j1 ;
59     if (!is_j2) nump = j2 ;
60     if (!is_j3) nump = j3 ;
61     if (!is_j4) nump = j4 ;
62    
63     /* calcul de la normale */
64     vab[0] = coord[x((face->n2)->num)] - coord[x((face->n1)->num)] ;
65     vab[1] = coord[y((face->n2)->num)] - coord[y((face->n1)->num)] ;
66     vab[2] = coord[z((face->n2)->num)] - coord[z((face->n1)->num)] ;
67    
68     vac[0] = coord[x((face->n3)->num)] - coord[x((face->n1)->num)] ;
69     vac[1] = coord[y((face->n3)->num)] - coord[y((face->n1)->num)] ;
70     vac[2] = coord[z((face->n3)->num)] - coord[z((face->n1)->num)] ;
71    
72     vn[0] = PVECX(vab,vac) ;
73     vn[1] = PVECY(vab,vac) ;
74     vn[2] = PVECZ(vab,vac) ;
75     norme = NORME(vn) ;
76     if (norme<EPSILON)
77     {
78     if (debug) printf("%s\n"," normale nulle M3D_RECH3 ") ;
79     m3d_erreur(ERR_FIN) ;
80     return(FAUX) ;
81     }
82     for (j=0;j<3;j++) vn[j] = vn[j]/norme ;
83    
84     vap[0] = coord[x(nump)] - coord[x((face->n1)->num)] ;
85     vap[1] = coord[y(nump)] - coord[y((face->n1)->num)] ;
86     vap[2] = coord[z(nump)] - coord[z((face->n1)->num)] ;
87    
88     if (PROSCA(vap,vn) > EPSILON) /* on a trouve le noeud solution */
89     {
90     ADRESSE(noeud,nump,*nresu)
91     return(VRAI) ;
92     }
93     }
94     k++ ;
95     nele = gest->tab_ref[iptr+k] ;
96     }
97     *nresu = NULL ;
98     return(VRAI) ;
99     }
100