ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/fem_noeud.cpp
Revision: 325
Committed: Tue Mar 6 20:54:34 2012 UTC (13 years, 2 months ago) by francois
File size: 8829 byte(s)
Log Message:
Calcul des reactions aux appui avec code aster et sauvegarde ce celles-ci dans MAGiC

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     FEM_NOEUD::FEM_NOEUD(MG_NOEUD* noeud):FEM_ELEMENT_MAILLAGE(noeud),numero(-1),numero_opt(-1),activedeplacement1(0),activedeplacement2(0),activedeplacement3(0),etat(0)
35     {
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     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)
50     {
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     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)
65     {
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     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)
88     {
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     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)
103     {
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     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)
120     {
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     }
219 francois 283
220 francois 325 void FEM_NOEUD::change_ry(double yy)
221     {
222     rxyz[1]=yy;
223     }
224 francois 283
225 francois 325 void FEM_NOEUD::change_rz(double zz)
226     {
227     rxyz[2]=zz;
228     }
229    
230 francois 283 void FEM_NOEUD::change_dx(double xx)
231     {
232     dxyz[0]=xx;
233     activedeplacement1=1;
234     }
235    
236     void FEM_NOEUD::change_dy(double yy)
237     {
238     dxyz[1]=yy;
239     activedeplacement2=1;
240     }
241    
242     void FEM_NOEUD::change_dz(double zz)
243     {
244     dxyz[2]=zz;
245     activedeplacement3=1;
246     }
247    
248     void FEM_NOEUD::change_coord(double *coo)
249     {
250     xyz[0]=coo[0];
251     xyz[1]=coo[1];
252     xyz[2]=coo[2];
253     }
254    
255     int FEM_NOEUD::get_numero(void)
256     {
257     return numero;
258     }
259    
260     void FEM_NOEUD::change_numero(int num)
261     {
262     numero=num;
263     }
264    
265     int FEM_NOEUD::get_numero_opt(void)
266     {
267     return numero_opt;
268     }
269    
270     void FEM_NOEUD::change_numero_opt(int num)
271     {
272     numero_opt=num;
273     }
274    
275    
276    
277     int FEM_NOEUD::get_dimension(void)
278     {
279     return 0;
280     }
281    
282     void FEM_NOEUD::change_solution(double val)
283     {
284     solution=val;
285     }
286    
287    
288     double FEM_NOEUD::get_solution(void)
289     {
290     return solution;
291     }
292    
293     BOITE_3D FEM_NOEUD::get_boite_3D(void)
294     {
295     BOITE_3D boite(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
296     return boite;
297    
298     }
299    
300     void FEM_NOEUD::enregistrer(std::ostream& o)
301     {
302     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;
303     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;
304     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;
305     else o << "%" << get_id() << "=FEM_NOEUD(NULL,NULL," << xyz[0] << "," << xyz[1] << "," << xyz[2] << "," << numero << "," << numero_opt << ");" << std::endl;
306 francois 325 o << "%" << get_id() << "=FEM_NOEUD_REAC(" << rxyz[0] << "," << rxyz[1] << "," << rxyz[2] << ");" << std::endl;
307 francois 283 if (activedeplacement1==1)
308     if (activedeplacement2==1)
309     if (activedeplacement3==1)
310     o << "%" << get_id() << "=FEM_NOEUD_DEF(" << dxyz[0] << "," << dxyz[1] << "," << dxyz[2] << ");" << std::endl;
311     }
312    
313    
314    
315 francois 309 TPL_LISTE_ENTITE<class FEM_ELEMENT1*>* FEM_NOEUD::get_lien_element1(void)
316 francois 283 {
317 francois 309 return &element1;
318 francois 283 }
319    
320    
321 francois 309 TPL_LISTE_ENTITE<class FEM_ELEMENT1*>* FEM_NOEUD::get_lien_petit_element1(void)
322 francois 283 {
323 francois 309 return &petit_element1;
324 francois 283 }
325    
326    
327 francois 309 TPL_LISTE_ENTITE<class FEM_ELEMENT2*>* FEM_NOEUD::get_lien_element2(void)
328 francois 283 {
329 francois 309 return &element2;
330 francois 283 }
331    
332    
333 francois 309 TPL_LISTE_ENTITE<class FEM_ELEMENT2*>* FEM_NOEUD::get_lien_petit_element2(void)
334 francois 283 {
335 francois 309 return &petit_element2;
336 francois 283 }
337    
338 francois 309 TPL_LISTE_ENTITE<class FEM_ELEMENT3*>* FEM_NOEUD::get_lien_element3(void)
339 francois 283 {
340 francois 309 return &element3;
341 francois 283 }
342    
343    
344 francois 309 TPL_LISTE_ENTITE<class FEM_ELEMENT3*>* FEM_NOEUD::get_lien_petit_element3(void)
345 francois 283 {
346 francois 309 return &petit_element3;
347 francois 283 }
348    
349     int FEM_NOEUD::get_etat(void)
350     {
351     return etat;
352     }
353     void FEM_NOEUD::change_etat(int num)
354     {
355     etat=num;
356     }
357