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