ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/fem_noeud.cpp
Revision: 763
Committed: Wed Dec 2 19:55:53 2015 UTC (9 years, 5 months ago) by francois
File size: 10826 byte(s)
Log Message:
Le fichier MAGiC est maintenant versionné. LA version actuelle est 2.0. L'ancienne version est 1.0.
Tout est transparent pour l'utilisateur. Les vieilles versions sont lisibles mais les nouveaux enregistrements sont dans la version la plus récente.
Changement des conditions aux limites : ajout d'un parametre pour dire si la condition numerique est une valeur ou une formule ou un lien vers une autre entité magic.
Les parametres pour saisir sont maintenant -ccf -ccfi -ccff -ccft -ccfit -ccfft

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 francois 763 void FEM_NOEUD::enregistrer(std::ostream& o,double version)
348 francois 283 {
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 */