ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/fem_noeud.cpp
Revision: 684
Committed: Tue Jun 30 15:21:22 2015 UTC (9 years, 10 months ago) by francois
File size: 10811 byte(s)
Log Message:
mise a jour de la boite englobante quand une coordonnees change  dans un fem_noeud

File Contents

# User Rev Content
1 francois 283 //------------------------------------------------------------
2     //------------------------------------------------------------
3     // MAGiC
4     // Jean Christophe Cuilli�re et Vincent FRANCOIS
5     // D�partement de G�nie M�canique - UQTR
6     //------------------------------------------------------------
7     // 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     // des auteurs (contact : francois@uqtr.ca)
12     //------------------------------------------------------------
13     //------------------------------------------------------------
14     //
15     // fem_noeud.cpp
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20     // Version du 02/03/2006 � 11H22
21     //------------------------------------------------------------
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 410 FEM_NOEUD::FEM_NOEUD(MG_NOEUD* noeud):FEM_ELEMENT_MAILLAGE(noeud),numero(-1),numero_opt(-1),activedeplacement1(0),activedeplacement2(0),activedeplacement3(0),activereaction1(0),activereaction2(0),activereaction3(0)
35 francois 283 {
36     xyz[0]=noeud->get_x();
37     xyz[1]=noeud->get_y();
38     xyz[2]=noeud->get_z();
39     dxyz[0]=0.;
40     dxyz[1]=0.;
41     dxyz[2]=0.;
42 francois 325 rxyz[0]=0.;
43     rxyz[1]=0.;
44     rxyz[2]=0.;
45 francois 283 if (liaison_topologique==NULL) return;
46     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
47     }
48    
49 francois 410 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),activereaction1(0),activereaction2(0),activereaction3(0)
50 francois 283 {
51     xyz[0]=noeud->get_x();
52     xyz[1]=noeud->get_y();
53     xyz[2]=noeud->get_z();
54     dxyz[0]=0.;
55     dxyz[1]=0.;
56     dxyz[2]=0.;
57 francois 325 rxyz[0]=0.;
58     rxyz[1]=0.;
59     rxyz[2]=0.;
60 francois 283 if (liaison_topologique==NULL) return;
61     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
62     }
63    
64 francois 410 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),activereaction1(0),activereaction2(0),activereaction3(0)
65 francois 283 {
66     xyz[0]=x;
67     xyz[1]=y;
68     xyz[2]=z;
69     dxyz[0]=0.;
70     dxyz[1]=0.;
71     dxyz[2]=0.;
72 francois 325 rxyz[0]=0.;
73     rxyz[1]=0.;
74     rxyz[2]=0.;
75 francois 283 if (liaison_topologique==NULL) return;
76     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
77     }
78    
79     FEM_NOEUD* FEM_NOEUD::dupliquer(FEM_MAILLAGE *femmai,long decalage)
80     {
81     FEM_NOEUD* noeud=new FEM_NOEUD(this->get_id()+decalage,liaison_topologique,xyz[0],xyz[1],xyz[2]);
82     femmai->ajouter_fem_noeud(noeud);
83     return noeud;
84     }
85 francois 684 void FEM_NOEUD::reinit_boite_3D(void)
86     {
87     }
88 francois 283
89    
90 francois 684 void FEM_NOEUD::reinit_boite_element_3D(void)
91     {
92     for (int i=0;i<get_lien_element3()->get_nb();i++)
93     get_lien_element3()->get(i)->reinit_boite_3D();
94     for (int i=0;i<get_lien_element2()->get_nb();i++)
95     get_lien_element2()->get(i)->reinit_boite_3D();
96     for (int i=0;i<get_lien_element1()->get_nb();i++)
97     get_lien_element1()->get(i)->reinit_boite_3D();
98     }
99    
100 francois 410 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),activereaction1(0),activereaction2(0),activereaction3(0)
101 francois 283 {
102     xyz[0]=x;
103     xyz[1]=y;
104     xyz[2]=z;
105     dxyz[0]=0.;
106     dxyz[1]=0.;
107     dxyz[2]=0.;
108 francois 325 rxyz[0]=0.;
109     rxyz[1]=0.;
110     rxyz[2]=0.;
111 francois 283 if (liaison_topologique==NULL) return;
112     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
113     }
114    
115 francois 410 FEM_NOEUD::FEM_NOEUD(MG_ELEMENT_TOPOLOGIQUE* topo,double x,double y,double z):FEM_ELEMENT_MAILLAGE(topo),numero(-1),numero_opt(-1),activedeplacement1(0),activedeplacement2(0),activedeplacement3(0),activereaction1(0),activereaction2(0),activereaction3(0)
116 francois 378 {
117     xyz[0]=x;
118     xyz[1]=y;
119     xyz[2]=z;
120     dxyz[0]=0.;
121     dxyz[1]=0.;
122     dxyz[2]=0.;
123     rxyz[0]=0.;
124     rxyz[1]=0.;
125     rxyz[2]=0.;
126     if (liaison_topologique==NULL) return;
127     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
128     }
129    
130 francois 410 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),activereaction1(0),activereaction2(0),activereaction3(0)
131 francois 283 {
132     xyz[0]=x;
133     xyz[1]=y;
134     xyz[2]=z;
135     dxyz[0]=0.;
136     dxyz[1]=0.;
137     dxyz[2]=0.;
138 francois 325 rxyz[0]=0.;
139     rxyz[1]=0.;
140     rxyz[2]=0.;
141 francois 283 if (liaison_topologique==NULL) return;
142     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
143     }
144    
145    
146    
147 francois 410 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),activereaction1(mdd.activereaction1),activereaction2(mdd.activereaction2),activereaction3(mdd.activereaction3)
148 francois 283 {
149     xyz[0]=mdd.xyz[0];
150     xyz[1]=mdd.xyz[1];
151     xyz[2]=mdd.xyz[2];
152     dxyz[0]=mdd.dxyz[0];
153     dxyz[1]=mdd.dxyz[1];
154     dxyz[2]=mdd.dxyz[2];
155 francois 325 rxyz[0]=mdd.rxyz[0];
156     rxyz[1]=mdd.rxyz[1];
157     rxyz[2]=mdd.rxyz[2];
158 francois 283 if (liaison_topologique==NULL) return;
159     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
160     }
161    
162     FEM_NOEUD::~FEM_NOEUD()
163     {
164     if (liaison_topologique==NULL) return;
165     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->supprimer(this);
166     }
167    
168 francois 414 void FEM_NOEUD::change_topologie_null(MG_ELEMENT_TOPOLOGIQUE* ele)
169     {
170     if (liaison_topologique!=NULL) return;
171     liaison_topologique=ele;
172     if (liaison_topologique==NULL) return;
173     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
174     }
175 francois 283
176     int FEM_NOEUD::get_type_entite(void)
177     {
178     return IDFEM_NOEUD;
179     }
180    
181     double FEM_NOEUD::get_x(double coef)
182     {
183     return xyz[0]+coef*dxyz[0];
184     }
185    
186     double FEM_NOEUD::get_y(double coef)
187     {
188     return xyz[1]+coef*dxyz[1];
189     }
190    
191     double FEM_NOEUD::get_z(double coef)
192     {
193     return xyz[2]+coef*dxyz[2];
194     }
195    
196     double FEM_NOEUD::get_dx(double coef)
197     {
198     return dxyz[0]*coef;
199     }
200    
201     double FEM_NOEUD::get_dy(double coef)
202     {
203     return dxyz[1]*coef;
204     }
205    
206     double FEM_NOEUD::get_dz(double coef)
207     {
208     return dxyz[2]*coef;
209     }
210    
211 francois 325
212    
213     double FEM_NOEUD::get_rx(void)
214     {
215     return rxyz[0];
216     }
217     double FEM_NOEUD::get_ry(void)
218     {
219     return rxyz[1];
220     }
221    
222     double FEM_NOEUD::get_rz(void)
223     {
224     return rxyz[2];
225     }
226    
227    
228    
229    
230 francois 283 double* FEM_NOEUD::get_coord(void)
231     {
232     return xyz;
233     }
234    
235    
236     void FEM_NOEUD::change_x(double xx)
237     {
238     xyz[0]=xx;
239 francois 684 reinit_boite_element_3D();
240    
241 francois 283 }
242    
243     void FEM_NOEUD::change_y(double yy)
244     {
245 francois 684 xyz[1]=yy;
246     reinit_boite_element_3D();
247 francois 283 }
248    
249     void FEM_NOEUD::change_z(double zz)
250     {
251 francois 684 xyz[2]=zz;
252     reinit_boite_element_3D();
253 francois 283 }
254 francois 325 void FEM_NOEUD::change_rx(double xx)
255     {
256     rxyz[0]=xx;
257 francois 339 activereaction1=1;
258 francois 325 }
259 francois 283
260 francois 325 void FEM_NOEUD::change_ry(double yy)
261     {
262     rxyz[1]=yy;
263 francois 339 activereaction2=1;
264 francois 325 }
265 francois 283
266 francois 325 void FEM_NOEUD::change_rz(double zz)
267     {
268     rxyz[2]=zz;
269 francois 339 activereaction3=1;
270    
271 francois 325 }
272    
273 francois 283 void FEM_NOEUD::change_dx(double xx)
274     {
275     dxyz[0]=xx;
276     activedeplacement1=1;
277     }
278    
279     void FEM_NOEUD::change_dy(double yy)
280     {
281     dxyz[1]=yy;
282     activedeplacement2=1;
283     }
284    
285     void FEM_NOEUD::change_dz(double zz)
286     {
287     dxyz[2]=zz;
288     activedeplacement3=1;
289     }
290    
291     void FEM_NOEUD::change_coord(double *coo)
292     {
293     xyz[0]=coo[0];
294     xyz[1]=coo[1];
295 francois 684 xyz[2]=coo[2];
296     reinit_boite_element_3D();
297 francois 283 }
298    
299     int FEM_NOEUD::get_numero(void)
300     {
301     return numero;
302     }
303    
304     void FEM_NOEUD::change_numero(int num)
305     {
306     numero=num;
307     }
308    
309     int FEM_NOEUD::get_numero_opt(void)
310     {
311     return numero_opt;
312     }
313    
314     void FEM_NOEUD::change_numero_opt(int num)
315     {
316     numero_opt=num;
317     }
318    
319 francois 635 bool FEM_NOEUD::valide_parametre_EF(double *uvw)
320     {
321     return true;
322     }
323 francois 283
324     int FEM_NOEUD::get_dimension(void)
325     {
326     return 0;
327     }
328    
329 francois 375 void FEM_NOEUD::change_solution(double val,int num)
330 francois 283 {
331 francois 375 solution[num]=val;
332 francois 283 }
333    
334    
335 francois 375 double FEM_NOEUD::get_solution(int num)
336 francois 283 {
337 francois 375 return solution[num];
338 francois 283 }
339    
340     BOITE_3D FEM_NOEUD::get_boite_3D(void)
341     {
342     BOITE_3D boite(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
343     return boite;
344    
345     }
346    
347     void FEM_NOEUD::enregistrer(std::ostream& o)
348     {
349     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;
350     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;
351     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;
352     else o << "%" << get_id() << "=FEM_NOEUD(NULL,NULL," << xyz[0] << "," << xyz[1] << "," << xyz[2] << "," << numero << "," << numero_opt << ");" << std::endl;
353 francois 339 if (activereaction1==1)
354     if (activereaction2==1)
355     if (activereaction3==1)
356     o << "%" << get_id() << "=FEM_NOEUD_REAC(" << rxyz[0] << "," << rxyz[1] << "," << rxyz[2] << ");" << std::endl;
357 francois 283 if (activedeplacement1==1)
358     if (activedeplacement2==1)
359     if (activedeplacement3==1)
360     o << "%" << get_id() << "=FEM_NOEUD_DEF(" << dxyz[0] << "," << dxyz[1] << "," << dxyz[2] << ");" << std::endl;
361     }
362    
363    
364    
365 francois 309 TPL_LISTE_ENTITE<class FEM_ELEMENT1*>* FEM_NOEUD::get_lien_element1(void)
366 francois 283 {
367 francois 309 return &element1;
368 francois 283 }
369    
370    
371 francois 309 TPL_LISTE_ENTITE<class FEM_ELEMENT1*>* FEM_NOEUD::get_lien_petit_element1(void)
372 francois 283 {
373 francois 309 return &petit_element1;
374 francois 283 }
375    
376    
377 francois 309 TPL_LISTE_ENTITE<class FEM_ELEMENT2*>* FEM_NOEUD::get_lien_element2(void)
378 francois 283 {
379 francois 309 return &element2;
380 francois 283 }
381    
382    
383 francois 309 TPL_LISTE_ENTITE<class FEM_ELEMENT2*>* FEM_NOEUD::get_lien_petit_element2(void)
384 francois 283 {
385 francois 309 return &petit_element2;
386 francois 283 }
387    
388 francois 309 TPL_LISTE_ENTITE<class FEM_ELEMENT3*>* FEM_NOEUD::get_lien_element3(void)
389 francois 283 {
390 francois 309 return &element3;
391 francois 283 }
392    
393    
394 francois 309 TPL_LISTE_ENTITE<class FEM_ELEMENT3*>* FEM_NOEUD::get_lien_petit_element3(void)
395 francois 283 {
396 francois 309 return &petit_element3;
397 francois 283 }
398 francois 410 /*
399 francois 283 int FEM_NOEUD::get_etat(void)
400     {
401     return etat;
402     }
403     void FEM_NOEUD::change_etat(int num)
404     {
405     etat=num;
406     }
407 francois 410 */