ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/geometrie/src/fem_element1.cpp
Revision: 1105
Committed: Thu Sep 22 14:20:42 2022 UTC (2 years, 11 months ago) by francois
File size: 4392 byte(s)
Log Message:
generalisation du calcul du jacobien au cas 1D
On a un jacobien générique pour les dimensions 1,2 et 3

File Contents

# Content
1 //------------------------------------------------------------
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 #include "fem_element1.h"
28 #include "fem_noeud.h"
29 #include "mg_element_maillage.h"
30 #include "ot_mathematique.h"
31
32 FEM_ELEMENT1::FEM_ELEMENT1(unsigned long num,class MG_ELEMENT_MAILLAGE* mai):FEM_ELEMENT_MAILLAGE(num,mai)
33 {
34 }
35
36 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 FEM_ELEMENT1::FEM_ELEMENT1(class MG_ELEMENT_MAILLAGE* mai):FEM_ELEMENT_MAILLAGE(mai)
51 {
52 }
53
54 FEM_ELEMENT1::FEM_ELEMENT1(class MG_ELEMENT_TOPOLOGIQUE* topo,class MG_ELEMENT_MAILLAGE* mai):FEM_ELEMENT_MAILLAGE(topo,mai)
55 {
56 }
57
58 FEM_ELEMENT1::FEM_ELEMENT1(FEM_ELEMENT1& mdd):FEM_ELEMENT_MAILLAGE(mdd)
59 {
60 }
61
62
63
64 FEM_ELEMENT1::~FEM_ELEMENT1()
65 {
66 }
67
68
69 void FEM_ELEMENT1::extrapoler_solution_noeud(void)
70 {
71 int nb=get_nb_fem_noeud();
72 for (int i=0;i<nb;i++)
73 for (int j=0;j<MAX_TYPE_SOLUTION;j++)
74 get_fem_noeud(i)->change_solution(solution[j],j);
75 }
76
77 bool FEM_ELEMENT1::est_un_mini_element1(void)
78 {
79 return false;
80 }
81
82 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
141 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 }