MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
fem_element1.cpp
Aller à la documentation de ce fichier.
1 //####//------------------------------------------------------------
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 
23 
24 #include "gestionversion.h"
25 #include <math.h>
26 #include "fem_element1.h"
27 #include "fem_noeud.h"
28 #include "mg_element_maillage.h"
29 #include "ot_mathematique.h"
30 
32 {
33 }
34 
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 
45 {
46 }
47 
48 
50 {
51 }
52 
54 {
55 }
56 
58 {
59 }
60 
61 
62 
64 {
65 }
66 
67 
69 {
70  int nb=get_nb_fem_noeud();
71  for (int i=0;i<nb;i++)
72  for (int j=0;j<MAX_TYPE_SOLUTION;j++)
74 }
75 
77 {
78 return false;
79 }
80 
81 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 
140 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 }
FEM_ELEMENT1::get_nb_fem_noeud
virtual int get_nb_fem_noeud(void)=0
OT_VECTEUR_3D::change_z
virtual void change_z(double z)
Definition: ot_mathematique.cpp:444
OT_MATRICE_3D::get_determinant
double get_determinant()
Definition: ot_mathematique.cpp:735
gestionversion.h
FEM_ELEMENT1::est_un_mini_element1
virtual bool est_un_mini_element1(void)
Definition: fem_element1.cpp:76
fem_noeud.h
MG_ELEMENT_MAILLAGE
Definition: mg_element_maillage.h:38
OT_VECTEUR_3D::change_y
virtual void change_y(double y)
Definition: ot_mathematique.cpp:439
mg_element_maillage.h
OT_VECTEUR_3D::get_x
virtual double get_x(void) const
Definition: ot_mathematique.cpp:417
MG_ELEMENT_TOPOLOGIQUE
Definition: mg_element_topologique.h:51
FEM_NOEUD::get_coord
virtual double * get_coord(void)
Definition: fem_noeud.cpp:254
FEM_ELEMENT1::get_inverse_jacob
virtual void get_inverse_jacob(double *jac, double *uv, double unite=1.)
Definition: fem_element1.cpp:140
FEM_ELEMENT1::extrapoler_solution_noeud
virtual void extrapoler_solution_noeud(void)
Definition: fem_element1.cpp:68
FEM_ELEMENT_MAILLAGE
Definition: fem_element_maillage.h:35
OPERATEUR::egal
static int egal(double a, double b, double eps)
Definition: ot_mathematique.cpp:1629
OT_MATRICE_3D
Definition: ot_mathematique.h:160
MAX_TYPE_SOLUTION
const int MAX_TYPE_SOLUTION
Definition: mg_definition.h:42
FEM_ELEMENT1::FEM_ELEMENT1
FEM_ELEMENT1(unsigned long num, class MG_ELEMENT_MAILLAGE *mai)
Definition: fem_element1.cpp:31
FEM_ELEMENT1
Definition: fem_element1.h:34
FEM_ELEMENT1::get_fonction_derive_interpolation
virtual double get_fonction_derive_interpolation(int num, int numvariable, double *uv)=0
OT_VECTEUR_3D::norme
virtual void norme(void)
Definition: ot_mathematique.cpp:494
FEM_ELEMENT1::~FEM_ELEMENT1
virtual ~FEM_ELEMENT1()
Definition: fem_element1.cpp:63
ot_mathematique.h
OT_VECTEUR_3D::get_y
virtual double get_y(void) const
Definition: ot_mathematique.cpp:423
OT_VECTEUR_3D
Definition: ot_mathematique.h:94
FEM_ELEMENT1::get_fem_noeud
virtual class FEM_NOEUD * get_fem_noeud(int num)=0
FEM_NOEUD::xyz
double xyz[3]
Definition: fem_noeud.h:105
FEM_ELEMENT1::get_jacobien
virtual double get_jacobien(double *jac, double *uv, double unite=1.)
Definition: fem_element1.cpp:81
FEM_NOEUD::change_solution
virtual void change_solution(double val, int num=0)
Definition: fem_noeud.cpp:358
OT_VECTEUR_3D::get_z
virtual double get_z(void) const
Definition: ot_mathematique.cpp:429
fem_element1.h
FEM_ELEMENT_MAILLAGE::solution
double solution[MAX_TYPE_SOLUTION]
Definition: fem_element_maillage.h:75
OT_MATRICE_3D::inverse
OT_MATRICE_3D inverse() const
Definition: ot_mathematique.cpp:767
OT_VECTEUR_3D::change_x
virtual void change_x(double x)
Definition: ot_mathematique.cpp:434