ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/diamesh/src/r3d_comp.cpp
Revision: 5
Committed: Tue Jun 12 20:26:34 2007 UTC (17 years, 11 months ago)
Original Path: magic/lib/diamesh/diamesh/src/r3d_comp.cpp
File size: 2288 byte(s)
Log Message:

File Contents

# User Rev Content
1 5
2    
3     #include <stdio.h>
4     #include "r3d_struct.h"
5     #include "m3d_const.h"
6     #include "prototype2.h"
7     extern GEST_MEM *gest_r ;
8     int r3d_comp(void )
9     {
10     NOEUD *noeud ;
11     int nb, i , num1, num2, num3, num4, nbnn ;
12     float *coord ;
13     int *numele, *corresp ;
14    
15     coord = gest_r->coord ;
16     numele = gest_r->numele ;
17     corresp = gest_r->corresp ;
18    
19     nbnn = 4 ;
20    
21     /* on se place en tete de la liste des noeud generes */
22    
23     /*
24     remarque sur les noeuds apres le maillage
25     a l'initialisation les noeuds ont une cardinalite nulle, un noeud connecte voit sa cardinalite augmente
26     ou etre reduit a NO_CONNEC quand celui ci a ete absorbe par le front
27     */
28    
29     /* parcours de la liste des noeuds generes, on suppose que les noeuds de definition de la geometrie ont ete
30     connectes sinon le maillage s'est mal passe !!! */
31     for (i=0;i<gest_r->nb_noeud;i++) corresp[i] = i ;
32    
33     for (i=0;i<gest_r->nb_noeud;i++)
34     {
35     ADRESSE(noeud,i,noeud)
36     if ((noeud->mark2 == CARD_NULL)||(noeud->mark==KILLED))
37     {
38     coord[x(noeud->num)] = VAL_KILLED ;/* on flagge dans x[] */
39     }
40     }
41    
42     /* compactage de coord et mise a jour simultanee de corresp */
43    
44     nb = 0 ;/* nombre de noeud elimines */
45     for (i=gest_r->nb_init;i<gest_r->nb_noeud;i++)
46     {
47     if (coord[x(i)] == VAL_KILLED) nb ++ ;
48     else
49     {
50     coord[x(i-nb)]=coord[x(i)] ;
51     coord[y(i-nb)]=coord[y(i)] ;
52     coord[z(i-nb)]=coord[z(i)] ;
53     corresp[i] = i - nb ;
54     }
55     }
56     gest_r->nb_noeud = gest_r->nb_noeud - nb ;
57     /* nombre de noeuds reel du maillage */
58     /*
59     -----------------------------------------------------------------------------
60     mise a jour des liste de sommets de triangles
61     dans corresp[i], on trouve le noeud d'ancien numero i, il faut aller chercher
62     le nouveau numero du noeud
63     */
64     for(i=0;i<gest_r->nb_tetra;i++)
65     {
66     num1 = numele[nbnn * i] ;
67     if (num1!=123456789)
68     {
69     if (num1>=gest_r->nb_init) numele[nbnn * i] = corresp[num1] ;
70     num2 = numele[(nbnn * i) + 1] ;
71     if (num2>=gest_r->nb_init) numele[(nbnn * i) + 1] = corresp[num2] ;
72     num3 = numele[(nbnn * i) + 2] ;
73     if (num3>=gest_r->nb_init) numele[(nbnn * i) + 2] = corresp[num3] ;
74     num4 = numele[(nbnn * i) + 3] ;
75     if (num4>=gest_r->nb_init) numele[(nbnn * i) + 3] = corresp[num4] ;
76     }
77     }
78     return(VRAI) ;
79     }
80