ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/mtu/src/fem_element1.cpp
Revision: 1158
Committed: Thu Jun 13 22:18:49 2024 UTC (11 months, 1 week ago) by francois
File size: 4452 byte(s)
Log Message:
compatibilité Ubuntu 22.04
Suppression des refeences à Windows
Ajout d'une banière

File Contents

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