ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/solveur/src/sl_tetra14.cpp
Revision: 1158
Committed: Thu Jun 13 22:18:49 2024 UTC (11 months, 1 week ago) by francois
File size: 6719 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     //####// sl_tetra14.cpp
15     //####//
16     //####//------------------------------------------------------------
17     //####//------------------------------------------------------------
18     //####// COPYRIGHT 2000-2024
19     //####// jeu 13 jun 2024 11:58:57 EDT
20     //####//------------------------------------------------------------
21     //####//------------------------------------------------------------
22 5 #include "gestionversion.h"
23    
24     #pragma hdrstop
25    
26     #include "sl_tetra14.h"
27     #include "fem_noeud.h"
28     #pragma package(smart_init)
29    
30    
31     SL_TETRA14::SL_TETRA14(FEM_TETRA *mgseg):SL_TETRA(mgseg)
32     {
33     }
34    
35     SL_TETRA14::SL_TETRA14(SL_TETRA14& mdd):SL_TETRA(mdd)
36     {
37     }
38    
39     SL_TETRA14::~SL_TETRA14()
40     {
41     }
42    
43     int SL_TETRA14::nb_point_gauss(void)
44     {
45     return 4;
46     }
47    
48    
49     int SL_TETRA14::nb_fonction_interpolation(void)
50     {
51     return 4;
52     }
53    
54     void SL_TETRA14::get_point_gauss(int num,double *xyz,double& poids)
55     {
56     double a= 0.13819660112501051517954131656344 ;
57     double b= 0.58541019662496845446137605030969 ;
58     double c= 0.041666666666666666666666666666667 ;
59     switch (num)
60     {
61     case 1:xyz[0]=a;
62     xyz[1]=a;
63     xyz[2]=a;
64     poids=c;
65     break;
66     case 2:xyz[0]=a;
67     xyz[1]=a;
68     xyz[2]=b;
69     poids=c;
70     break;
71    
72     case 3:xyz[0]=a;
73     xyz[1]=b;
74     xyz[2]=a;
75     poids=c;
76     break;
77     case 4:xyz[0]=b;
78     xyz[1]=a;
79     xyz[2]=a;
80     poids=c;
81     break;
82     }
83     }
84    
85     double SL_TETRA14::get_fonction_interpolation(int num,double *uv)
86     {
87     double val;
88    
89     switch (num)
90     {
91     case 1:val=1-uv[0]-uv[1]-uv[2];break;
92     case 2:val=uv[0];break;
93     case 3:val=uv[1];break;
94     case 4:val=uv[2];break;
95     }
96     return val;
97     }
98    
99     double SL_TETRA14::get_fonction_derive_interpolation(int num,int num_variable,double *uv)
100     {
101     double val;
102    
103     switch (num)
104     {
105     case 1:switch (num_variable)
106     {
107     case 1:val=-1;break;
108     case 2:val=-1;break;
109     case 3:val=-1;break;
110     } break;
111     case 2:switch (num_variable)
112     {
113     case 1:val=1;break;
114     case 2:val=0;break;
115     case 3:val=0;break;
116     }break;
117     case 3:switch (num_variable)
118     {
119     case 1:val=0;break;
120     case 2:val=1;break;
121     case 3:val=0;break;
122     }break;
123     case 4:switch (num_variable)
124     {
125     case 1:val=0;break;
126     case 2:val=0;break;
127     case 3:val=1;break;
128     }break;
129    
130     }
131     return val;
132    
133     }
134    
135     double SL_TETRA14::get_jacobien(double* jac,double *uv,int& li,int& col,double unite)
136     {
137    
138    
139     li=3;
140     col=3;
141    
142    
143     FEM_NOEUD* noeud1=((FEM_TETRA*) mai)->get_fem_noeud(0);
144     FEM_NOEUD* noeud2=((FEM_TETRA*) mai)->get_fem_noeud(1);
145     FEM_NOEUD* noeud3=((FEM_TETRA*) mai)->get_fem_noeud(2);
146     FEM_NOEUD* noeud4=((FEM_TETRA*) mai)->get_fem_noeud(3);
147    
148    
149     double *xyz1=noeud1->get_coord();
150     double *xyz2=noeud2->get_coord();
151     double *xyz3=noeud3->get_coord();
152     double *xyz4=noeud4->get_coord();
153    
154     jac[0]=unite*(xyz2[0] - xyz1[0]) ;
155     jac[1]=unite*(xyz2[1] - xyz1[1]) ;
156     jac[2]=unite*(xyz2[2] - xyz1[2]) ;
157    
158     jac[3]=unite*(xyz3[0] - xyz1[0]) ;
159     jac[4]=unite*(xyz3[1] - xyz1[1]) ;
160     jac[5]=unite*(xyz3[2] - xyz1[2]) ;
161    
162     jac[6]=unite*(xyz4[0] - xyz1[0]) ;
163     jac[7]=unite*(xyz4[1] - xyz1[1]) ;
164     jac[8]=unite*(xyz4[2] - xyz1[2]) ;
165    
166     double SIX_V= jac[0]*(jac[4]*jac[8]-jac[7]*jac[5])+jac[1]*(jac[5]*jac[6]-jac[8]*jac[3])+jac[2]*(jac[3]*jac[7]-jac[6]*jac[4]);
167    
168     return SIX_V;
169     }
170     void SL_TETRA14::get_inverse_jacob(double* j,double *uv,double unite)
171     {
172    
173     FEM_NOEUD* noeud1=((FEM_TETRA*) mai)->get_fem_noeud(0);
174     FEM_NOEUD* noeud2=((FEM_TETRA*) mai)->get_fem_noeud(1);
175     FEM_NOEUD* noeud3=((FEM_TETRA*) mai)->get_fem_noeud(2);
176     FEM_NOEUD* noeud4=((FEM_TETRA*) mai)->get_fem_noeud(3);
177    
178     double *xyz1=noeud1->get_coord();
179     double *xyz2=noeud2->get_coord();
180     double *xyz3=noeud3->get_coord();
181     double *xyz4=noeud4->get_coord();
182     double jac[9];
183     jac[0*3+0]= unite*(xyz2[0] - xyz1[0]) ;
184     jac[0*3+1]= unite*(xyz2[1] - xyz1[1]) ;
185     jac[0*3+2]= unite*(xyz2[2] - xyz1[2]) ;
186    
187     jac[1*3+0]= unite*(xyz3[0] - xyz1[0]) ;
188     jac[1*3+1]= unite*(xyz3[1] - xyz1[1]) ;
189     jac[1*3+2]= unite*(xyz3[2] - xyz1[2]) ;
190    
191     jac[2*3+0]= unite*(xyz4[0] - xyz1[0]) ;
192     jac[2*3+1]= unite*(xyz4[1] - xyz1[1]) ;
193     jac[2*3+2]= unite*(xyz4[2] - xyz1[2]) ;
194    
195     double detj=(jac[0*3+0]*jac[1*3+1]*jac[2*3+2]-jac[0*3+0]*jac[1*3+2]*jac[2*3+1]-jac[1*3+0]*jac[0*3+1]*jac[2*3+2]+jac[1*3+0]*jac[0*3+2]*jac[2*3+1]+jac[2*3+0]*jac[0*3+1]*jac[1*3+2]-jac[2*3+0]*jac[0*3+2]*jac[1*3+1]);
196    
197     j[0*3+0] = (jac[1*3+1]*jac[2*3+2]-jac[1*3+2]*jac[2*3+1])/(detj);
198     j[0*3+1] = -(jac[0*3+1]*jac[2*3+2]-jac[0*3+2]*jac[2*3+1])/(detj);
199     j[0*3+2] =-(-jac[0*3+1]*jac[1*3+2]+jac[0*3+2]*jac[1*3+1])/(detj);
200    
201     j[1*3+0] = -(jac[1*3+0]*jac[2*3+2]-jac[1*3+2]*jac[2*3+0])/(detj);
202     j[1*3+1] = (jac[0*3+0]*jac[2*3+2]-jac[0*3+2]*jac[2*3+0])/(detj);
203     j[1*3+2] = -(jac[0*3+0]*jac[1*3+2]-jac[0*3+2]*jac[1*3+0])/(detj);
204    
205     j[2*3+0] =-(-jac[1*3+0]*jac[2*3+1]+jac[1*3+1]*jac[2*3+0])/(detj);
206     j[2*3+1] = -(jac[0*3+0]*jac[2*3+1]-jac[0*3+1]*jac[2*3+0])/(detj);
207     j[2*3+2] = (jac[0*3+0]*jac[1*3+1]-jac[0*3+1]*jac[1*3+0])/(detj);
208    
209    
210    
211     }
212    
213    
214    
215    
216     int SL_TETRA14::nb_point_extrapolation()
217     {
218     return 4;
219     }
220    
221    
222     void SL_TETRA14:: get_cord_ref_noauds(double* sommet)
223     {
224     sommet[0]=0; sommet[1]=0; sommet[2]=0;
225     sommet[3]=1; sommet[4]=0; sommet[5]=0;
226     sommet[6]=0; sommet[7]=1; sommet[8]=0;
227     sommet[9]=0; sommet[10]=0; sommet[11]=1;
228    
229     }
230