ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/fem_noeud.cpp
Revision: 276
Committed: Wed Jun 15 18:25:46 2011 UTC (13 years, 11 months ago) by francois
File size: 7938 byte(s)
Log Message:
Correction de bug + Version toIbrep  version du premier exmple complet + construction de la vectorisation a la lecture du fichier

File Contents

# User Rev Content
1 5 //------------------------------------------------------------
2     //------------------------------------------------------------
3     // MAGiC
4 francois 210 // Jean Christophe Cuilli�re et Vincent FRANCOIS
5     // D�partement de G�nie M�canique - UQTR
6 5 //------------------------------------------------------------
7 francois 210 // 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 5 // des auteurs (contact : francois@uqtr.ca)
12     //------------------------------------------------------------
13     //------------------------------------------------------------
14     //
15     // fem_noeud.cpp
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20 francois 210 // Version du 02/03/2006 � 11H22
21 5 //------------------------------------------------------------
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 276 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 5 {
36     xyz[0]=noeud->get_x();
37     xyz[1]=noeud->get_y();
38     xyz[2]=noeud->get_z();
39 francois 239 dxyz[0]=0.;
40     dxyz[1]=0.;
41     dxyz[2]=0.;
42 5 if (liaison_topologique==NULL) return;
43     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
44     }
45    
46 francois 276 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)
47 5 {
48     xyz[0]=noeud->get_x();
49     xyz[1]=noeud->get_y();
50     xyz[2]=noeud->get_z();
51 francois 239 dxyz[0]=0.;
52     dxyz[1]=0.;
53     dxyz[2]=0.;
54 5 if (liaison_topologique==NULL) return;
55     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
56     }
57    
58 francois 276 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)
59 5 {
60     xyz[0]=x;
61     xyz[1]=y;
62     xyz[2]=z;
63 francois 239 dxyz[0]=0.;
64     dxyz[1]=0.;
65     dxyz[2]=0.;
66 5 if (liaison_topologique==NULL) return;
67     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
68     }
69    
70     FEM_NOEUD* FEM_NOEUD::dupliquer(FEM_MAILLAGE *femmai,long decalage)
71     {
72     FEM_NOEUD* noeud=new FEM_NOEUD(this->get_id()+decalage,liaison_topologique,xyz[0],xyz[1],xyz[2]);
73     femmai->ajouter_fem_noeud(noeud);
74     return noeud;
75     }
76    
77    
78 francois 276 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)
79 5 {
80     xyz[0]=x;
81     xyz[1]=y;
82     xyz[2]=z;
83 francois 239 dxyz[0]=0.;
84     dxyz[1]=0.;
85     dxyz[2]=0.;
86 5 if (liaison_topologique==NULL) return;
87     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
88     }
89    
90 francois 276 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)
91 5 {
92     xyz[0]=x;
93     xyz[1]=y;
94     xyz[2]=z;
95 francois 239 dxyz[0]=0.;
96     dxyz[1]=0.;
97     dxyz[2]=0.;
98 5 if (liaison_topologique==NULL) return;
99     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
100     }
101    
102    
103    
104 francois 276 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)
105 5 {
106     xyz[0]=mdd.xyz[0];
107     xyz[1]=mdd.xyz[1];
108     xyz[2]=mdd.xyz[2];
109 francois 239 dxyz[0]=mdd.dxyz[0];
110     dxyz[1]=mdd.dxyz[1];
111     dxyz[2]=mdd.dxyz[2];
112 5 if (liaison_topologique==NULL) return;
113     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->ajouter(this);
114     }
115    
116     FEM_NOEUD::~FEM_NOEUD()
117     {
118     if (liaison_topologique==NULL) return;
119     if (liaison_topologique->get_dimension()==0) liaison_topologique->get_lien_fem_maillage()->supprimer(this);
120     }
121    
122    
123     int FEM_NOEUD::get_type_entite(void)
124     {
125     return IDFEM_NOEUD;
126     }
127    
128 francois 210 double FEM_NOEUD::get_x(double coef)
129 5 {
130 francois 210 return xyz[0]+coef*dxyz[0];
131 5 }
132    
133 francois 210 double FEM_NOEUD::get_y(double coef)
134 5 {
135 francois 210 return xyz[1]+coef*dxyz[1];
136 5 }
137    
138 francois 210 double FEM_NOEUD::get_z(double coef)
139 5 {
140 francois 210 return xyz[2]+coef*dxyz[2];
141 5 }
142    
143 francois 210 double FEM_NOEUD::get_dx(double coef)
144     {
145     return dxyz[0]*coef;
146     }
147    
148     double FEM_NOEUD::get_dy(double coef)
149     {
150     return dxyz[1]*coef;
151     }
152    
153     double FEM_NOEUD::get_dz(double coef)
154     {
155     return dxyz[2]*coef;
156     }
157    
158 5 double* FEM_NOEUD::get_coord(void)
159     {
160     return xyz;
161     }
162    
163    
164     void FEM_NOEUD::change_x(double xx)
165     {
166     xyz[0]=xx;
167     }
168    
169     void FEM_NOEUD::change_y(double yy)
170     {
171     xyz[1]=yy;
172     }
173    
174     void FEM_NOEUD::change_z(double zz)
175     {
176     xyz[2]=zz;
177     }
178    
179 francois 210
180     void FEM_NOEUD::change_dx(double xx)
181     {
182     dxyz[0]=xx;
183     activedeplacement1=1;
184     }
185    
186     void FEM_NOEUD::change_dy(double yy)
187     {
188     dxyz[1]=yy;
189     activedeplacement2=1;
190     }
191    
192     void FEM_NOEUD::change_dz(double zz)
193     {
194     dxyz[2]=zz;
195     activedeplacement3=1;
196     }
197    
198 5 void FEM_NOEUD::change_coord(double *coo)
199     {
200     xyz[0]=coo[0];
201     xyz[1]=coo[1];
202     xyz[2]=coo[2];
203     }
204    
205     int FEM_NOEUD::get_numero(void)
206     {
207     return numero;
208     }
209    
210     void FEM_NOEUD::change_numero(int num)
211     {
212     numero=num;
213     }
214    
215     int FEM_NOEUD::get_numero_opt(void)
216     {
217     return numero_opt;
218     }
219    
220     void FEM_NOEUD::change_numero_opt(int num)
221     {
222     numero_opt=num;
223     }
224    
225    
226    
227     int FEM_NOEUD::get_dimension(void)
228     {
229     return 0;
230     }
231    
232     void FEM_NOEUD::change_solution(double val)
233     {
234     solution=val;
235     }
236    
237    
238     double FEM_NOEUD::get_solution(void)
239     {
240     return solution;
241     }
242    
243     BOITE_3D FEM_NOEUD::get_boite_3D(void)
244     {
245     BOITE_3D boite(xyz[0],xyz[1],xyz[2],xyz[0],xyz[1],xyz[2]);
246     return boite;
247    
248     }
249    
250     void FEM_NOEUD::enregistrer(std::ostream& o)
251     {
252     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;
253     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;
254     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;
255     else o << "%" << get_id() << "=FEM_NOEUD(NULL,NULL," << xyz[0] << "," << xyz[1] << "," << xyz[2] << "," << numero << "," << numero_opt << ");" << std::endl;
256 francois 210 if (activedeplacement1==1)
257     if (activedeplacement2==1)
258     if (activedeplacement3==1)
259     o << "%" << get_id() << "=FEM_NOEUD_DEF(" << dxyz[0] << "," << dxyz[1] << "," << dxyz[2] << ");" << std::endl;
260     }
261 5
262    
263    
264     TPL_LISTE_ENTITE<class FEM_SEGMENT*>* FEM_NOEUD::get_lien_segment(void)
265     {
266     return &segment;
267     }
268    
269    
270     TPL_LISTE_ENTITE<class FEM_SEGMENT*>* FEM_NOEUD::get_lien_petit_segment(void)
271     {
272     return &petit_segment;
273     }
274    
275    
276     TPL_LISTE_ENTITE<class FEM_TRIANGLE*>* FEM_NOEUD::get_lien_triangle(void)
277     {
278     return &triangle;
279     }
280    
281    
282     TPL_LISTE_ENTITE<class FEM_TRIANGLE*>* FEM_NOEUD::get_lien_petit_triangle(void)
283     {
284     return &petit_triangle;
285     }
286    
287     TPL_LISTE_ENTITE<class FEM_TETRA*>* FEM_NOEUD::get_lien_tetra(void)
288     {
289     return &tetra;
290     }
291    
292    
293     TPL_LISTE_ENTITE<class FEM_TETRA*>* FEM_NOEUD::get_lien_petit_tetra(void)
294     {
295     return &petit_tetra;
296     }
297    
298 francois 276 int FEM_NOEUD::get_etat(void)
299     {
300     return etat;
301     }
302     void FEM_NOEUD::change_etat(int num)
303     {
304     etat=num;
305     }
306 5