ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/mtu/src/fem_element1.cpp
Revision: 1114
Committed: Wed May 3 18:29:42 2023 UTC (2 years ago) by francois
File size: 4392 byte(s)
Log Message:
Étape 2  : remplacement du nom geometrie par mtu pour corresponde à la publi de mtu

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_segment.cpp
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20     // Version du 02/03/2006 � 11H22
21     //------------------------------------------------------------
22     //------------------------------------------------------------
23    
24    
25     #include "gestionversion.h"
26     #include <math.h>
27 francois 309 #include "fem_element1.h"
28 francois 283 #include "fem_noeud.h"
29     #include "mg_element_maillage.h"
30 francois 1105 #include "ot_mathematique.h"
31 francois 283
32 francois 309 FEM_ELEMENT1::FEM_ELEMENT1(unsigned long num,class MG_ELEMENT_MAILLAGE* mai):FEM_ELEMENT_MAILLAGE(num,mai)
33 francois 283 {
34     }
35    
36 francois 378 FEM_ELEMENT1::FEM_ELEMENT1(unsigned long num,class MG_ELEMENT_TOPOLOGIQUE* topo):FEM_ELEMENT_MAILLAGE(num,topo)
37     {
38     }
39    
40    
41     FEM_ELEMENT1::FEM_ELEMENT1(unsigned long num,class MG_ELEMENT_TOPOLOGIQUE* topo,class MG_ELEMENT_MAILLAGE* mai):FEM_ELEMENT_MAILLAGE(num,topo,mai)
42     {
43     }
44    
45     FEM_ELEMENT1::FEM_ELEMENT1(class MG_ELEMENT_TOPOLOGIQUE* topo):FEM_ELEMENT_MAILLAGE(topo)
46     {
47     }
48    
49    
50 francois 309 FEM_ELEMENT1::FEM_ELEMENT1(class MG_ELEMENT_MAILLAGE* mai):FEM_ELEMENT_MAILLAGE(mai)
51 francois 283 {
52     }
53    
54 francois 378 FEM_ELEMENT1::FEM_ELEMENT1(class MG_ELEMENT_TOPOLOGIQUE* topo,class MG_ELEMENT_MAILLAGE* mai):FEM_ELEMENT_MAILLAGE(topo,mai)
55     {
56     }
57 francois 283
58 francois 309 FEM_ELEMENT1::FEM_ELEMENT1(FEM_ELEMENT1& mdd):FEM_ELEMENT_MAILLAGE(mdd)
59 francois 283 {
60     }
61    
62    
63    
64 francois 309 FEM_ELEMENT1::~FEM_ELEMENT1()
65 francois 283 {
66     }
67    
68    
69 francois 309 void FEM_ELEMENT1::extrapoler_solution_noeud(void)
70 francois 283 {
71     int nb=get_nb_fem_noeud();
72     for (int i=0;i<nb;i++)
73 francois 377 for (int j=0;j<MAX_TYPE_SOLUTION;j++)
74 francois 375 get_fem_noeud(i)->change_solution(solution[j],j);
75 francois 283 }
76    
77 francois 767 bool FEM_ELEMENT1::est_un_mini_element1(void)
78     {
79     return false;
80     }
81 francois 283
82 francois 1105 double FEM_ELEMENT1::get_jacobien(double* jac,double *uv,double unite)
83     {
84     int nb=get_nb_fem_noeud();
85    
86     OT_MATRICE_3D jacobien;
87     jacobien(0,0)=0.;jacobien(0,1)=0.;jacobien(0,2)=0.;
88     for (int k=0;k<nb;k++)
89     {
90     double valderiv=get_fonction_derive_interpolation(k+1,1,uv);
91     double *xyz=get_fem_noeud(k)->get_coord();
92     jacobien(0,0)=jacobien(0,0)+valderiv*xyz[0]*unite;
93     jacobien(0,1)=jacobien(0,1)+valderiv*xyz[1]*unite;
94     jacobien(0,2)=jacobien(0,2)+valderiv*xyz[2]*unite;
95     }
96    
97     OT_VECTEUR_3D vec1,vec2,vec3;
98     vec1.change_x(jacobien(0,0));
99     vec1.change_y(jacobien(0,1));
100     vec1.change_z(jacobien(0,2));
101    
102     if ((OPERATEUR::egal(vec1.get_x(),0.,1e-12)) && (OPERATEUR::egal(vec1.get_y(),0.,1e-12)))
103     {
104     vec2.change_x(0.);
105     vec2.change_y(vec1.get_z());
106     vec2.change_z(0.);
107     }
108     else
109     {
110     vec2.change_x(vec1.get_y());
111     vec2.change_y(-vec1.get_x());
112     vec2.change_z(0.);
113     }
114     vec2.norme();
115     vec3=vec1&vec2;
116    
117     jacobien(1,0)=vec2.get_x();
118     jacobien(1,1)=vec2.get_y();
119     jacobien(1,2)=vec2.get_z();
120     jacobien(2,0)=vec3.get_x();
121     jacobien(2,1)=vec3.get_y();
122     jacobien(2,2)=vec3.get_z();
123    
124    
125     jac[0]=jacobien(0,0);
126     jac[1]=jacobien(0,1);
127     jac[2]=jacobien(0,2);
128    
129     jac[3]=jacobien(1,0);
130     jac[4]=jacobien(1,1);
131     jac[5]=jacobien(1,2);
132    
133     jac[6]=jacobien(2,0);
134     jac[7]=jacobien(2,1);
135     jac[8]=jacobien(2,2);
136    
137     double det=jacobien.get_determinant();
138     return det;
139     }
140 francois 283
141 francois 1105 void FEM_ELEMENT1::get_inverse_jacob(double* j,double *uv,double unite)
142     {
143     double jac[9];
144     get_jacobien(jac,uv,unite);
145     OT_MATRICE_3D J;
146     J(0,0)=jac[0];
147     J(0,1)=jac[1];
148     J(0,2)=jac[2];
149     J(1,0)=jac[3];
150     J(1,1)=jac[4];
151     J(1,2)=jac[5];
152     J(2,0)=jac[6];
153     J(2,1)=jac[7];
154     J(2,2)=jac[8];
155     OT_MATRICE_3D j_i=J.inverse();
156    
157    
158     j[0]=j_i(0,0);
159     j[1]=j_i(0,1);
160     j[2]=j_i(0,2);
161    
162     j[3]=j_i(1,0);
163     j[4]=j_i(1,1);
164     j[5]=j_i(1,2);
165    
166     j[6]=j_i(2,0);
167     j[7]=j_i(2,1);
168     j[8]=j_i(2,2);
169     }