ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/fem_noeud.cpp
Revision: 410
Committed: Fri Jul 5 21:03:49 2013 UTC (11 years, 10 months ago) by francois
File size: 9910 byte(s)
Log Message:
ajout de XFEM_TRIANGLE3
Ajout de flags dans FEM_ELEMENT_MAILLAGE
Correction de bug dans FEM_MAILLAGE_OUTILS

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