ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/solveur/src/sl_tetra11.cpp
Revision: 253
Committed: Tue Jul 13 19:40:46 2010 UTC (14 years, 10 months ago) by francois
File size: 5328 byte(s)
Log Message:
changement de hiearchie et utilisation de ccmake + mise a jour

File Contents

# User Rev Content
1 5 #include "gestionversion.h"
2     //---------------------------------------------------------------------------
3    
4     #pragma hdrstop
5     #include <math.h>
6     #include <assert.h>
7     #include "tpl_map_entite.h"
8     #include "fem_triangle.h"
9     #include "fem_segment.h"
10    
11     #include "sl_tetra11.h"
12     #include "fem_tetra.h"
13     #include "fem_noeud.h"
14    
15     //---------------------------------------------------------------------------
16     #pragma package(smart_init)
17    
18    
19     SL_TETRA11::SL_TETRA11(FEM_TETRA* mgtet):SL_TETRA(mgtet)
20     {
21     }
22    
23     SL_TETRA11::SL_TETRA11(SL_TETRA11& mdd):SL_TETRA(mdd)
24     {
25     }
26    
27     SL_TETRA11::~SL_TETRA11()
28     {
29     }
30    
31     int SL_TETRA11::nb_point_gauss(void)
32     {
33     return 1;
34     }
35    
36    
37     int SL_TETRA11::nb_fonction_interpolation(void)
38     {
39     return 4;
40     }
41    
42     void SL_TETRA11::get_point_gauss(int num,double *xyz,double& poids)
43     {
44     xyz[0]=0.25;
45     xyz[1]=0.25;
46     xyz[2]=0.25;
47    
48     poids=0.16666666666666666666666666666667;
49    
50     }
51    
52     double SL_TETRA11::get_fonction_interpolation(int num,double *uv)
53     {
54     double val;
55    
56     switch (num)
57     {
58     case 1:val=1-uv[0]-uv[1]-uv[2];break;
59     case 2:val=uv[0];break;
60     case 3:val=uv[1];break;
61     case 4:val=uv[2];break;
62    
63     }
64     return val;
65     }
66    
67     double SL_TETRA11::get_fonction_derive_interpolation(int num,int num_variable,double *uv)
68     {
69     double val;
70    
71     switch (num)
72     {
73     case 1:switch (num_variable)
74     {
75     case 1:val=-1;break;
76     case 2:val=-1;break;
77     case 3:val=-1;break;
78     } break;
79     case 2:switch (num_variable)
80     {
81     case 1:val=1;break;
82     case 2:val=0;break;
83     case 3:val=0;break;
84     }break;
85     case 3:switch (num_variable)
86     {
87     case 1:val=0;break;
88     case 2:val=1;break;
89     case 3:val=0;break;
90     }break;
91     case 4:switch (num_variable)
92     {
93     case 1:val=0;break;
94     case 2:val=0;break;
95     case 3:val=1;break;
96     }break;
97    
98     }
99     return val;
100    
101     }
102    
103     double SL_TETRA11::get_jacobien(double* jac,double *uv,int& li,int& col,double unite)
104     {
105    
106    
107     li=3;
108     col=3;
109    
110    
111     FEM_NOEUD* noeud1=((FEM_TETRA*) mai)->get_fem_noeud(0);
112     FEM_NOEUD* noeud2=((FEM_TETRA*) mai)->get_fem_noeud(1);
113     FEM_NOEUD* noeud3=((FEM_TETRA*) mai)->get_fem_noeud(2);
114     FEM_NOEUD* noeud4=((FEM_TETRA*) mai)->get_fem_noeud(3);
115    
116    
117     double *xyz1=noeud1->get_coord();
118     double *xyz2=noeud2->get_coord();
119     double *xyz3=noeud3->get_coord();
120     double *xyz4=noeud4->get_coord();
121    
122     jac[0]=unite*(xyz2[0] - xyz1[0]) ;
123     jac[1]=unite*(xyz2[1] - xyz1[1]) ;
124     jac[2]=unite*(xyz2[2] - xyz1[2]) ;
125    
126     jac[3]=unite*(xyz3[0] - xyz1[0]) ;
127     jac[4]=unite*(xyz3[1] - xyz1[1]) ;
128     jac[5]=unite*(xyz3[2] - xyz1[2]) ;
129    
130     jac[6]=unite*(xyz4[0] - xyz1[0]) ;
131     jac[7]=unite*(xyz4[1] - xyz1[1]) ;
132     jac[8]=unite*(xyz4[2] - xyz1[2]) ;
133    
134     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]);
135    
136     return SIX_V;
137     }
138    
139     void SL_TETRA11::get_inverse_jacob(double* j,double *uv,double unite)
140     {
141    
142     FEM_NOEUD* noeud1=((FEM_TETRA*) mai)->get_fem_noeud(0);
143     FEM_NOEUD* noeud2=((FEM_TETRA*) mai)->get_fem_noeud(1);
144     FEM_NOEUD* noeud3=((FEM_TETRA*) mai)->get_fem_noeud(2);
145     FEM_NOEUD* noeud4=((FEM_TETRA*) mai)->get_fem_noeud(3);
146    
147     double *xyz1=noeud1->get_coord();
148     double *xyz2=noeud2->get_coord();
149     double *xyz3=noeud3->get_coord();
150     double *xyz4=noeud4->get_coord();
151    
152     double jac[9];
153    
154     jac[0*3+0]= unite*(xyz2[0] - xyz1[0]) ;
155     jac[0*3+1]= unite*(xyz2[1] - xyz1[1]) ;
156     jac[0*3+2]= unite*(xyz2[2] - xyz1[2]) ;
157    
158     jac[1*3+0]= unite*(xyz3[0] - xyz1[0]) ;
159     jac[1*3+1]= unite*(xyz3[1] - xyz1[1]) ;
160     jac[1*3+2]= unite*(xyz3[2] - xyz1[2]) ;
161    
162     jac[2*3+0]= unite*(xyz4[0] - xyz1[0]) ;
163     jac[2*3+1]= unite*(xyz4[1] - xyz1[1]) ;
164     jac[2*3+2]= unite*(xyz4[2] - xyz1[2]) ;
165    
166     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]);
167    
168     j[0*3+0] = (jac[1*3+1]*jac[2*3+2]-jac[1*3+2]*jac[2*3+1])/(detj);
169     j[0*3+1] = -(jac[0*3+1]*jac[2*3+2]-jac[0*3+2]*jac[2*3+1])/(detj);
170     j[0*3+2] =-(-jac[0*3+1]*jac[1*3+2]+jac[0*3+2]*jac[1*3+1])/(detj);
171    
172     j[1*3+0] = -(jac[1*3+0]*jac[2*3+2]-jac[1*3+2]*jac[2*3+0])/(detj);
173     j[1*3+1] = (jac[0*3+0]*jac[2*3+2]-jac[0*3+2]*jac[2*3+0])/(detj);
174     j[1*3+2] = -(jac[0*3+0]*jac[1*3+2]-jac[0*3+2]*jac[1*3+0])/(detj);
175    
176     j[2*3+0] =-(-jac[1*3+0]*jac[2*3+1]+jac[1*3+1]*jac[2*3+0])/(detj);
177     j[2*3+1] = -(jac[0*3+0]*jac[2*3+1]-jac[0*3+1]*jac[2*3+0])/(detj);
178     j[2*3+2] = (jac[0*3+0]*jac[1*3+1]-jac[0*3+1]*jac[1*3+0])/(detj);
179    
180    
181    
182     }
183    
184    
185    
186     int SL_TETRA11::nb_point_extrapolation()
187     {
188     return 4;
189     }
190    
191    
192     void SL_TETRA11::get_cord_ref_noauds(double* sommet)
193     {
194     sommet[0]=0; sommet[1]=0; sommet[2]=0;
195     sommet[3]=1; sommet[4]=0; sommet[5]=0;
196     sommet[6]=0; sommet[7]=1; sommet[8]=0;
197     sommet[9]=0; sommet[10]=0; sommet[11]=1;
198    
199     }
200