ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/fem_noeud.cpp
Revision: 786
Committed: Wed Mar 9 21:10:49 2016 UTC (9 years, 2 months ago) by francois
File size: 10936 byte(s)
Log Message:
Possibilité d'obtenir la matrice de rigidite de code aster sous form de matrice bande.
Pour cela ajouter -opt dans l'operation -fem à la création du maillage FEM et dans -calculaster utiliser les nouveaux types d'étude rigidite.
Attention pour cela il faut une version de code aster modifiée
De manière automatique elle peut etre optenu en faisant ./instal_aster 12.5mod
Uniquement implantée avec la version 12.5 de code aster. 

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 francois 786 void FEM_NOEUD::get_voisin_noeud(class FEM_NOEUD* no,TPL_LISTE_ENTITE<FEM_NOEUD*> &voisin)
168     {
169     voisin.vide();
170     }
171 francois 283
172 francois 414 void FEM_NOEUD::change_topologie_null(MG_ELEMENT_TOPOLOGIQUE* ele)
173     {
174     if (liaison_topologique!=NULL) return;
175     liaison_topologique=ele;
176     if (liaison_topologique==NULL) return;
177     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
178     }
179 francois 283
180     int FEM_NOEUD::get_type_entite(void)
181     {
182     return IDFEM_NOEUD;
183     }
184    
185     double FEM_NOEUD::get_x(double coef)
186     {
187     return xyz[0]+coef*dxyz[0];
188     }
189    
190     double FEM_NOEUD::get_y(double coef)
191     {
192     return xyz[1]+coef*dxyz[1];
193     }
194    
195     double FEM_NOEUD::get_z(double coef)
196     {
197     return xyz[2]+coef*dxyz[2];
198     }
199    
200     double FEM_NOEUD::get_dx(double coef)
201     {
202     return dxyz[0]*coef;
203     }
204    
205     double FEM_NOEUD::get_dy(double coef)
206     {
207     return dxyz[1]*coef;
208     }
209    
210     double FEM_NOEUD::get_dz(double coef)
211     {
212     return dxyz[2]*coef;
213     }
214    
215 francois 325
216    
217     double FEM_NOEUD::get_rx(void)
218     {
219     return rxyz[0];
220     }
221     double FEM_NOEUD::get_ry(void)
222     {
223     return rxyz[1];
224     }
225    
226     double FEM_NOEUD::get_rz(void)
227     {
228     return rxyz[2];
229     }
230    
231    
232    
233    
234 francois 283 double* FEM_NOEUD::get_coord(void)
235     {
236     return xyz;
237     }
238    
239    
240     void FEM_NOEUD::change_x(double xx)
241     {
242     xyz[0]=xx;
243 francois 684 reinit_boite_element_3D();
244    
245 francois 283 }
246    
247     void FEM_NOEUD::change_y(double yy)
248     {
249 francois 684 xyz[1]=yy;
250     reinit_boite_element_3D();
251 francois 283 }
252    
253     void FEM_NOEUD::change_z(double zz)
254     {
255 francois 684 xyz[2]=zz;
256     reinit_boite_element_3D();
257 francois 283 }
258 francois 325 void FEM_NOEUD::change_rx(double xx)
259     {
260     rxyz[0]=xx;
261 francois 339 activereaction1=1;
262 francois 325 }
263 francois 283
264 francois 325 void FEM_NOEUD::change_ry(double yy)
265     {
266     rxyz[1]=yy;
267 francois 339 activereaction2=1;
268 francois 325 }
269 francois 283
270 francois 325 void FEM_NOEUD::change_rz(double zz)
271     {
272     rxyz[2]=zz;
273 francois 339 activereaction3=1;
274    
275 francois 325 }
276    
277 francois 283 void FEM_NOEUD::change_dx(double xx)
278     {
279     dxyz[0]=xx;
280     activedeplacement1=1;
281     }
282    
283     void FEM_NOEUD::change_dy(double yy)
284     {
285     dxyz[1]=yy;
286     activedeplacement2=1;
287     }
288    
289     void FEM_NOEUD::change_dz(double zz)
290     {
291     dxyz[2]=zz;
292     activedeplacement3=1;
293     }
294    
295     void FEM_NOEUD::change_coord(double *coo)
296     {
297     xyz[0]=coo[0];
298     xyz[1]=coo[1];
299 francois 684 xyz[2]=coo[2];
300     reinit_boite_element_3D();
301 francois 283 }
302    
303     int FEM_NOEUD::get_numero(void)
304     {
305     return numero;
306     }
307    
308     void FEM_NOEUD::change_numero(int num)
309     {
310     numero=num;
311     }
312    
313     int FEM_NOEUD::get_numero_opt(void)
314     {
315     return numero_opt;
316     }
317    
318     void FEM_NOEUD::change_numero_opt(int num)
319     {
320     numero_opt=num;
321     }
322    
323 francois 635 bool FEM_NOEUD::valide_parametre_EF(double *uvw)
324     {
325     return true;
326     }
327 francois 283
328     int FEM_NOEUD::get_dimension(void)
329     {
330     return 0;
331     }
332    
333 francois 375 void FEM_NOEUD::change_solution(double val,int num)
334 francois 283 {
335 francois 375 solution[num]=val;
336 francois 283 }
337    
338    
339 francois 375 double FEM_NOEUD::get_solution(int num)
340 francois 283 {
341 francois 375 return solution[num];
342 francois 283 }
343    
344     BOITE_3D FEM_NOEUD::get_boite_3D(void)
345     {
346     BOITE_3D boite(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
347     return boite;
348    
349     }
350    
351 francois 763 void FEM_NOEUD::enregistrer(std::ostream& o,double version)
352 francois 283 {
353     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;
354     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;
355     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;
356     else o << "%" << get_id() << "=FEM_NOEUD(NULL,NULL," << xyz[0] << "," << xyz[1] << "," << xyz[2] << "," << numero << "," << numero_opt << ");" << std::endl;
357 francois 339 if (activereaction1==1)
358     if (activereaction2==1)
359     if (activereaction3==1)
360     o << "%" << get_id() << "=FEM_NOEUD_REAC(" << rxyz[0] << "," << rxyz[1] << "," << rxyz[2] << ");" << std::endl;
361 francois 283 if (activedeplacement1==1)
362     if (activedeplacement2==1)
363     if (activedeplacement3==1)
364     o << "%" << get_id() << "=FEM_NOEUD_DEF(" << dxyz[0] << "," << dxyz[1] << "," << dxyz[2] << ");" << std::endl;
365     }
366    
367    
368    
369 francois 309 TPL_LISTE_ENTITE<class FEM_ELEMENT1*>* FEM_NOEUD::get_lien_element1(void)
370 francois 283 {
371 francois 309 return &element1;
372 francois 283 }
373    
374    
375 francois 309 TPL_LISTE_ENTITE<class FEM_ELEMENT1*>* FEM_NOEUD::get_lien_petit_element1(void)
376 francois 283 {
377 francois 309 return &petit_element1;
378 francois 283 }
379    
380    
381 francois 309 TPL_LISTE_ENTITE<class FEM_ELEMENT2*>* FEM_NOEUD::get_lien_element2(void)
382 francois 283 {
383 francois 309 return &element2;
384 francois 283 }
385    
386    
387 francois 309 TPL_LISTE_ENTITE<class FEM_ELEMENT2*>* FEM_NOEUD::get_lien_petit_element2(void)
388 francois 283 {
389 francois 309 return &petit_element2;
390 francois 283 }
391    
392 francois 309 TPL_LISTE_ENTITE<class FEM_ELEMENT3*>* FEM_NOEUD::get_lien_element3(void)
393 francois 283 {
394 francois 309 return &element3;
395 francois 283 }
396    
397    
398 francois 309 TPL_LISTE_ENTITE<class FEM_ELEMENT3*>* FEM_NOEUD::get_lien_petit_element3(void)
399 francois 283 {
400 francois 309 return &petit_element3;
401 francois 283 }
402 francois 410 /*
403 francois 283 int FEM_NOEUD::get_etat(void)
404     {
405     return etat;
406     }
407     void FEM_NOEUD::change_etat(int num)
408     {
409     etat=num;
410     }
411 francois 410 */