ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/mtu/src/fem_noeud.cpp
Revision: 1158
Committed: Thu Jun 13 22:18:49 2024 UTC (11 months, 1 week ago) by francois
File size: 11829 byte(s)
Log Message:
compatibilité Ubuntu 22.04
Suppression des refeences à Windows
Ajout d'une banière

File Contents

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