ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/fem_noeud.cpp
Revision: 210
Committed: Fri Jul 31 16:19:04 2009 UTC (15 years, 9 months ago) by francois
Original Path: magic/lib/geometrie/geometrie/src/fem_noeud.cpp
File size: 7516 byte(s)
Log Message:
Nouvelle facon de representer la deforme + groupe topologique pour le maillage + bug idmax

File Contents

# User Rev Content
1 5 //------------------------------------------------------------
2     //------------------------------------------------------------
3     // MAGiC
4 francois 210 // Jean Christophe Cuilli�re et Vincent FRANCOIS
5     // D�partement de G�nie M�canique - UQTR
6 5 //------------------------------------------------------------
7 francois 210 // Le projet MAGIC est un projet de recherche du d�partement
8     // de g�nie m�canique de l'Universit� du Qu�bec �
9     // Trois Rivi�res
10     // Les librairies ne peuvent �tre utilis�es sans l'accord
11 5 // des auteurs (contact : francois@uqtr.ca)
12     //------------------------------------------------------------
13     //------------------------------------------------------------
14     //
15     // fem_noeud.cpp
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20 francois 210 // Version du 02/03/2006 � 11H22
21 5 //------------------------------------------------------------
22     //------------------------------------------------------------
23    
24    
25     #include "gestionversion.h"
26     #include "fem_noeud.h"
27     #include "fem_maillage.h"
28     #include "mg_noeud.h"
29    
30    
31    
32    
33    
34 francois 210 FEM_NOEUD::FEM_NOEUD(MG_NOEUD* noeud):FEM_ELEMENT_MAILLAGE(noeud),numero(-1),numero_opt(-1),activedeplacement1(0),activedeplacement2(0),activedeplacement3(0)
35 5 {
36     xyz[0]=noeud->get_x();
37     xyz[1]=noeud->get_y();
38     xyz[2]=noeud->get_z();
39     if (liaison_topologique==NULL) return;
40     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
41     }
42    
43 francois 210 FEM_NOEUD::FEM_NOEUD(unsigned long num,MG_NOEUD* noeud):FEM_ELEMENT_MAILLAGE(num,noeud),numero(-1),numero_opt(-1),activedeplacement1(0),activedeplacement2(0),activedeplacement3(0)
44 5 {
45     xyz[0]=noeud->get_x();
46     xyz[1]=noeud->get_y();
47     xyz[2]=noeud->get_z();
48     if (liaison_topologique==NULL) return;
49     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
50     }
51    
52 francois 210 FEM_NOEUD::FEM_NOEUD(MG_ELEMENT_MAILLAGE* mai,double x,double y,double z):FEM_ELEMENT_MAILLAGE(mai),numero(-1),numero_opt(-1),activedeplacement1(0),activedeplacement2(0),activedeplacement3(0)
53 5 {
54     xyz[0]=x;
55     xyz[1]=y;
56     xyz[2]=z;
57     if (liaison_topologique==NULL) return;
58     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
59     }
60    
61     FEM_NOEUD* FEM_NOEUD::dupliquer(FEM_MAILLAGE *femmai,long decalage)
62     {
63     FEM_NOEUD* noeud=new FEM_NOEUD(this->get_id()+decalage,liaison_topologique,xyz[0],xyz[1],xyz[2]);
64     femmai->ajouter_fem_noeud(noeud);
65     return noeud;
66     }
67    
68    
69 francois 210 FEM_NOEUD::FEM_NOEUD(unsigned long num,MG_ELEMENT_TOPOLOGIQUE* topo,double x,double y,double z):FEM_ELEMENT_MAILLAGE(num,topo),numero(-1),numero_opt(-1),activedeplacement1(0),activedeplacement2(0),activedeplacement3(0)
70 5 {
71     xyz[0]=x;
72     xyz[1]=y;
73     xyz[2]=z;
74     if (liaison_topologique==NULL) return;
75     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
76     }
77    
78 francois 210 FEM_NOEUD::FEM_NOEUD(unsigned long num,MG_ELEMENT_MAILLAGE* mai,double x,double y,double z):FEM_ELEMENT_MAILLAGE(num,mai),numero(-1),numero_opt(-1),activedeplacement1(0),activedeplacement2(0),activedeplacement3(0)
79 5 {
80     xyz[0]=x;
81     xyz[1]=y;
82     xyz[2]=z;
83     if (liaison_topologique==NULL) return;
84     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
85     }
86    
87    
88    
89 francois 210 FEM_NOEUD::FEM_NOEUD(FEM_NOEUD& mdd):FEM_ELEMENT_MAILLAGE(mdd),numero(-1),numero_opt(-1),activedeplacement1(mdd.activedeplacement1),activedeplacement2(mdd.activedeplacement2),activedeplacement3(mdd.activedeplacement3)
90 5 {
91     xyz[0]=mdd.xyz[0];
92     xyz[1]=mdd.xyz[1];
93     xyz[2]=mdd.xyz[2];
94     if (liaison_topologique==NULL) return;
95     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
96     }
97    
98     FEM_NOEUD::~FEM_NOEUD()
99     {
100     if (liaison_topologique==NULL) return;
101     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->supprimer(this);
102     }
103    
104    
105     int FEM_NOEUD::get_type_entite(void)
106     {
107     return IDFEM_NOEUD;
108     }
109    
110 francois 210 double FEM_NOEUD::get_x(double coef)
111 5 {
112 francois 210 return xyz[0]+coef*dxyz[0];
113 5 }
114    
115 francois 210 double FEM_NOEUD::get_y(double coef)
116 5 {
117 francois 210 return xyz[1]+coef*dxyz[1];
118 5 }
119    
120 francois 210 double FEM_NOEUD::get_z(double coef)
121 5 {
122 francois 210 return xyz[2]+coef*dxyz[2];
123 5 }
124    
125 francois 210 double FEM_NOEUD::get_dx(double coef)
126     {
127     return dxyz[0]*coef;
128     }
129    
130     double FEM_NOEUD::get_dy(double coef)
131     {
132     return dxyz[1]*coef;
133     }
134    
135     double FEM_NOEUD::get_dz(double coef)
136     {
137     return dxyz[2]*coef;
138     }
139    
140 5 double* FEM_NOEUD::get_coord(void)
141     {
142     return xyz;
143     }
144    
145    
146     void FEM_NOEUD::change_x(double xx)
147     {
148     xyz[0]=xx;
149     }
150    
151     void FEM_NOEUD::change_y(double yy)
152     {
153     xyz[1]=yy;
154     }
155    
156     void FEM_NOEUD::change_z(double zz)
157     {
158     xyz[2]=zz;
159     }
160    
161 francois 210
162     void FEM_NOEUD::change_dx(double xx)
163     {
164     dxyz[0]=xx;
165     activedeplacement1=1;
166     }
167    
168     void FEM_NOEUD::change_dy(double yy)
169     {
170     dxyz[1]=yy;
171     activedeplacement2=1;
172     }
173    
174     void FEM_NOEUD::change_dz(double zz)
175     {
176     dxyz[2]=zz;
177     activedeplacement3=1;
178     }
179    
180 5 void FEM_NOEUD::change_coord(double *coo)
181     {
182     xyz[0]=coo[0];
183     xyz[1]=coo[1];
184     xyz[2]=coo[2];
185     }
186    
187     int FEM_NOEUD::get_numero(void)
188     {
189     return numero;
190     }
191    
192     void FEM_NOEUD::change_numero(int num)
193     {
194     numero=num;
195     }
196    
197     int FEM_NOEUD::get_numero_opt(void)
198     {
199     return numero_opt;
200     }
201    
202     void FEM_NOEUD::change_numero_opt(int num)
203     {
204     numero_opt=num;
205     }
206    
207    
208    
209     int FEM_NOEUD::get_dimension(void)
210     {
211     return 0;
212     }
213    
214     void FEM_NOEUD::change_solution(double val)
215     {
216     solution=val;
217     }
218    
219    
220     double FEM_NOEUD::get_solution(void)
221     {
222     return solution;
223     }
224    
225     BOITE_3D FEM_NOEUD::get_boite_3D(void)
226     {
227     BOITE_3D boite(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
228     return boite;
229    
230     }
231    
232     void FEM_NOEUD::enregistrer(std::ostream& o)
233     {
234     if ((get_mg_element_maillage()!=NULL) && (get_lien_topologie()!=NULL)) o << "%" << get_id() << "=FEM_NOEUD($"<< get_lien_topologie()->get_id() << ",$" << maillage->get_id() << "," << xyz[0] << "," << xyz[1] << "," << xyz[2] << "," << numero << "," << numero_opt << ");" << std::endl;
235     else if ((get_mg_element_maillage()!=NULL) && (get_lien_topologie()==NULL)) o << "%" << get_id() << "=FEM_NOEUD(NULL,$" << maillage->get_id() << "," << xyz[0] << "," << xyz[1] << "," << xyz[2] << "," << numero << "," << numero_opt << ");" << std::endl;
236     else if ((get_mg_element_maillage()==NULL) && (get_lien_topologie()!=NULL)) o << "%" << get_id() << "=FEM_NOEUD($" << get_lien_topologie()->get_id() << ",NULL," << xyz[0] << "," << xyz[1] << "," << xyz[2] << "," << numero << "," << numero_opt << ");" << std::endl;
237     else o << "%" << get_id() << "=FEM_NOEUD(NULL,NULL," << xyz[0] << "," << xyz[1] << "," << xyz[2] << "," << numero << "," << numero_opt << ");" << std::endl;
238 francois 210 if (activedeplacement1==1)
239     if (activedeplacement2==1)
240     if (activedeplacement3==1)
241     o << "%" << get_id() << "=FEM_NOEUD_DEF(" << dxyz[0] << "," << dxyz[1] << "," << dxyz[2] << ");" << std::endl;
242     }
243 5
244    
245    
246     TPL_LISTE_ENTITE<class FEM_SEGMENT*>* FEM_NOEUD::get_lien_segment(void)
247     {
248     return &segment;
249     }
250    
251    
252     TPL_LISTE_ENTITE<class FEM_SEGMENT*>* FEM_NOEUD::get_lien_petit_segment(void)
253     {
254     return &petit_segment;
255     }
256    
257    
258     TPL_LISTE_ENTITE<class FEM_TRIANGLE*>* FEM_NOEUD::get_lien_triangle(void)
259     {
260     return &triangle;
261     }
262    
263    
264     TPL_LISTE_ENTITE<class FEM_TRIANGLE*>* FEM_NOEUD::get_lien_petit_triangle(void)
265     {
266     return &petit_triangle;
267     }
268    
269     TPL_LISTE_ENTITE<class FEM_TETRA*>* FEM_NOEUD::get_lien_tetra(void)
270     {
271     return &tetra;
272     }
273    
274    
275     TPL_LISTE_ENTITE<class FEM_TETRA*>* FEM_NOEUD::get_lien_petit_tetra(void)
276     {
277     return &petit_tetra;
278     }
279    
280