ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/fem_noeud.cpp
Revision: 375
Committed: Fri Nov 9 15:27:14 2012 UTC (12 years, 6 months ago) by francois
File size: 9411 byte(s)
Log Message:
Solution FEM sont vectorielles et tensorielles + affichage des options de compilations dans les exe

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 339 FEM_NOEUD::FEM_NOEUD(MG_NOEUD* noeud):FEM_ELEMENT_MAILLAGE(noeud),numero(-1),numero_opt(-1),activedeplacement1(0),activedeplacement2(0),activedeplacement3(0),etat(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 339 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),etat(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 339 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),etat(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    
86    
87 francois 339 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),etat(0),activereaction1(0),activereaction2(0),activereaction3(0)
88 francois 283 {
89     xyz[0]=x;
90     xyz[1]=y;
91     xyz[2]=z;
92     dxyz[0]=0.;
93     dxyz[1]=0.;
94     dxyz[2]=0.;
95 francois 325 rxyz[0]=0.;
96     rxyz[1]=0.;
97     rxyz[2]=0.;
98 francois 283 if (liaison_topologique==NULL) return;
99     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
100     }
101    
102 francois 339 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),etat(0),activereaction1(0),activereaction2(0),activereaction3(0)
103 francois 283 {
104     xyz[0]=x;
105     xyz[1]=y;
106     xyz[2]=z;
107     dxyz[0]=0.;
108     dxyz[1]=0.;
109     dxyz[2]=0.;
110 francois 325 rxyz[0]=0.;
111     rxyz[1]=0.;
112     rxyz[2]=0.;
113 francois 283 if (liaison_topologique==NULL) return;
114     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
115     }
116    
117    
118    
119 francois 339 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),etat(mdd.etat),activereaction1(mdd.activereaction1),activereaction2(mdd.activereaction2),activereaction3(mdd.activereaction3)
120 francois 283 {
121     xyz[0]=mdd.xyz[0];
122     xyz[1]=mdd.xyz[1];
123     xyz[2]=mdd.xyz[2];
124     dxyz[0]=mdd.dxyz[0];
125     dxyz[1]=mdd.dxyz[1];
126     dxyz[2]=mdd.dxyz[2];
127 francois 325 rxyz[0]=mdd.rxyz[0];
128     rxyz[1]=mdd.rxyz[1];
129     rxyz[2]=mdd.rxyz[2];
130 francois 283 if (liaison_topologique==NULL) return;
131     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
132     }
133    
134     FEM_NOEUD::~FEM_NOEUD()
135     {
136     if (liaison_topologique==NULL) return;
137     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->supprimer(this);
138     }
139    
140    
141     int FEM_NOEUD::get_type_entite(void)
142     {
143     return IDFEM_NOEUD;
144     }
145    
146     double FEM_NOEUD::get_x(double coef)
147     {
148     return xyz[0]+coef*dxyz[0];
149     }
150    
151     double FEM_NOEUD::get_y(double coef)
152     {
153     return xyz[1]+coef*dxyz[1];
154     }
155    
156     double FEM_NOEUD::get_z(double coef)
157     {
158     return xyz[2]+coef*dxyz[2];
159     }
160    
161     double FEM_NOEUD::get_dx(double coef)
162     {
163     return dxyz[0]*coef;
164     }
165    
166     double FEM_NOEUD::get_dy(double coef)
167     {
168     return dxyz[1]*coef;
169     }
170    
171     double FEM_NOEUD::get_dz(double coef)
172     {
173     return dxyz[2]*coef;
174     }
175    
176 francois 325
177    
178     double FEM_NOEUD::get_rx(void)
179     {
180     return rxyz[0];
181     }
182     double FEM_NOEUD::get_ry(void)
183     {
184     return rxyz[1];
185     }
186    
187     double FEM_NOEUD::get_rz(void)
188     {
189     return rxyz[2];
190     }
191    
192    
193    
194    
195 francois 283 double* FEM_NOEUD::get_coord(void)
196     {
197     return xyz;
198     }
199    
200    
201     void FEM_NOEUD::change_x(double xx)
202     {
203     xyz[0]=xx;
204     }
205    
206     void FEM_NOEUD::change_y(double yy)
207     {
208     xyz[1]=yy;
209     }
210    
211     void FEM_NOEUD::change_z(double zz)
212     {
213     xyz[2]=zz;
214     }
215 francois 325 void FEM_NOEUD::change_rx(double xx)
216     {
217     rxyz[0]=xx;
218 francois 339 activereaction1=1;
219 francois 325 }
220 francois 283
221 francois 325 void FEM_NOEUD::change_ry(double yy)
222     {
223     rxyz[1]=yy;
224 francois 339 activereaction2=1;
225 francois 325 }
226 francois 283
227 francois 325 void FEM_NOEUD::change_rz(double zz)
228     {
229     rxyz[2]=zz;
230 francois 339 activereaction3=1;
231    
232 francois 325 }
233    
234 francois 283 void FEM_NOEUD::change_dx(double xx)
235     {
236     dxyz[0]=xx;
237     activedeplacement1=1;
238     }
239    
240     void FEM_NOEUD::change_dy(double yy)
241     {
242     dxyz[1]=yy;
243     activedeplacement2=1;
244     }
245    
246     void FEM_NOEUD::change_dz(double zz)
247     {
248     dxyz[2]=zz;
249     activedeplacement3=1;
250     }
251    
252     void FEM_NOEUD::change_coord(double *coo)
253     {
254     xyz[0]=coo[0];
255     xyz[1]=coo[1];
256     xyz[2]=coo[2];
257     }
258    
259     int FEM_NOEUD::get_numero(void)
260     {
261     return numero;
262     }
263    
264     void FEM_NOEUD::change_numero(int num)
265     {
266     numero=num;
267     }
268    
269     int FEM_NOEUD::get_numero_opt(void)
270     {
271     return numero_opt;
272     }
273    
274     void FEM_NOEUD::change_numero_opt(int num)
275     {
276     numero_opt=num;
277     }
278    
279    
280    
281     int FEM_NOEUD::get_dimension(void)
282     {
283     return 0;
284     }
285    
286 francois 375 void FEM_NOEUD::change_solution(double val,int num)
287 francois 283 {
288 francois 375 solution[num]=val;
289 francois 283 }
290    
291    
292 francois 375 double FEM_NOEUD::get_solution(int num)
293 francois 283 {
294 francois 375 return solution[num];
295 francois 283 }
296    
297     BOITE_3D FEM_NOEUD::get_boite_3D(void)
298     {
299     BOITE_3D boite(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
300     return boite;
301    
302     }
303    
304     void FEM_NOEUD::enregistrer(std::ostream& o)
305     {
306     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;
307     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;
308     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;
309     else o << "%" << get_id() << "=FEM_NOEUD(NULL,NULL," << xyz[0] << "," << xyz[1] << "," << xyz[2] << "," << numero << "," << numero_opt << ");" << std::endl;
310 francois 339 if (activereaction1==1)
311     if (activereaction2==1)
312     if (activereaction3==1)
313     o << "%" << get_id() << "=FEM_NOEUD_REAC(" << rxyz[0] << "," << rxyz[1] << "," << rxyz[2] << ");" << std::endl;
314 francois 283 if (activedeplacement1==1)
315     if (activedeplacement2==1)
316     if (activedeplacement3==1)
317     o << "%" << get_id() << "=FEM_NOEUD_DEF(" << dxyz[0] << "," << dxyz[1] << "," << dxyz[2] << ");" << std::endl;
318     }
319    
320    
321    
322 francois 309 TPL_LISTE_ENTITE<class FEM_ELEMENT1*>* FEM_NOEUD::get_lien_element1(void)
323 francois 283 {
324 francois 309 return &element1;
325 francois 283 }
326    
327    
328 francois 309 TPL_LISTE_ENTITE<class FEM_ELEMENT1*>* FEM_NOEUD::get_lien_petit_element1(void)
329 francois 283 {
330 francois 309 return &petit_element1;
331 francois 283 }
332    
333    
334 francois 309 TPL_LISTE_ENTITE<class FEM_ELEMENT2*>* FEM_NOEUD::get_lien_element2(void)
335 francois 283 {
336 francois 309 return &element2;
337 francois 283 }
338    
339    
340 francois 309 TPL_LISTE_ENTITE<class FEM_ELEMENT2*>* FEM_NOEUD::get_lien_petit_element2(void)
341 francois 283 {
342 francois 309 return &petit_element2;
343 francois 283 }
344    
345 francois 309 TPL_LISTE_ENTITE<class FEM_ELEMENT3*>* FEM_NOEUD::get_lien_element3(void)
346 francois 283 {
347 francois 309 return &element3;
348 francois 283 }
349    
350    
351 francois 309 TPL_LISTE_ENTITE<class FEM_ELEMENT3*>* FEM_NOEUD::get_lien_petit_element3(void)
352 francois 283 {
353 francois 309 return &petit_element3;
354 francois 283 }
355    
356     int FEM_NOEUD::get_etat(void)
357     {
358     return etat;
359     }
360     void FEM_NOEUD::change_etat(int num)
361     {
362     etat=num;
363     }
364