ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/solveur/src/sl_triangle23.cpp
Revision: 5
Committed: Tue Jun 12 20:26:34 2007 UTC (17 years, 11 months ago)
Original Path: magic/lib/solveur/solveur/src/sl_triangle23.cpp
File size: 4733 byte(s)
Log Message:

File Contents

# User Rev Content
1 5 #include "gestionversion.h"
2     //---------------------------------------------------------------------------
3    
4     #pragma hdrstop
5     #include <math.h>
6     #include "sl_triangle23.h"
7     #include "fem_triangle.h"
8     #include "fem_noeud.h"
9     //---------------------------------------------------------------------------
10    
11     #pragma package(smart_init)
12    
13     SL_TRIANGLE23::SL_TRIANGLE23(class FEM_TRIANGLE *mgseg):SL_TRIANGLE(mgseg)
14     {
15     }
16    
17     SL_TRIANGLE23::SL_TRIANGLE23(SL_TRIANGLE23& mdd):SL_TRIANGLE(mdd)
18     {
19     }
20    
21     SL_TRIANGLE23::~SL_TRIANGLE23()
22     {
23     }
24    
25     int SL_TRIANGLE23::nb_point_gauss(void)
26     {
27     return 3;
28     }
29    
30    
31    
32     int SL_TRIANGLE23::nb_fonction_interpolation(void)
33     {
34     return 6;
35     }
36    
37     void SL_TRIANGLE23::get_point_gauss(int num,double *xyz,double& poids)
38     {
39     switch (num)
40     {
41     case 1:xyz[0]=0.16666666666666666666666666666667;
42     xyz[1]=0.16666666666666666666666666666667;
43     poids=0.16666666666666666666666666666667;
44     break;
45     case 2:xyz[0]=0.66666666666666666666666666666667;
46     xyz[1]=0.16666666666666666666666666666667;
47     poids=0.16666666666666666666666666666667;
48     break;
49    
50     case 3:xyz[0]=0.16666666666666666666666666666667;
51     xyz[1]=0.66666666666666666666666666666667;
52     poids=0.16666666666666666666666666666667;
53     break;
54     }
55     }
56    
57     double SL_TRIANGLE23::get_fonction_interpolation(int num,double *uv)
58     {
59     double val;
60     double landa=1-uv[0]-uv[1];
61     switch (num)
62     {
63     case 1:val=-landa*(1-2*landa);break;
64     case 2:val=4*uv[0]*landa;break;
65     case 3:val=-uv[0]*(1-2*uv[0]);break;
66     case 4:val=4*uv[0]*uv[1];break;
67     case 5:val=-uv[1]*(1-2*uv[1]);break;
68     case 6:val=4*uv[1]*landa;break;
69     }
70     return val;
71     }
72    
73     double SL_TRIANGLE23::get_fonction_derive_interpolation(int num,int num_variable,double *uv)
74     {
75     double val;
76     double landa=1-uv[0]-uv[1];
77     switch (num)
78     {
79     case 1:switch (num_variable)
80     {
81     case 1:val=1-4*landa;break;
82     case 2:val=1-4*landa;break;
83     } break;
84     case 2:switch (num_variable)
85     {
86     case 1:val=4*(landa-uv[0]);break;
87     case 2:val=-4*uv[0];break;
88     }break;
89     case 3:switch (num_variable)
90     {
91     case 1:val=-1+4*uv[0];break;
92     case 2:val=0.;break;
93     }break;
94     case 4:switch (num_variable)
95     {
96     case 1:val=4*uv[1];break;
97     case 2:val=4*uv[0];break;
98     }break;
99     case 5:switch (num_variable)
100     {
101     case 1:val=0.;break;
102     case 2:val=-1+4*uv[1];break;
103     }break;
104     case 6:switch (num_variable)
105     {
106     case 1:val=-4*uv[1];break;
107     case 2:val=4*(landa-uv[1]);break;
108     }break;
109     }
110     return val;
111    
112     }
113    
114     double SL_TRIANGLE23::get_jacobien(double* jac,double *uv,int& li,int& col,double unite)
115     {
116    
117     double xyz[18];
118    
119     int nb_nd=((FEM_TRIANGLE*) mai)->get_nb_fem_noeud();
120    
121     for(int i=0;i<nb_nd;i++)
122     {
123     FEM_NOEUD* fmnd=((FEM_TRIANGLE*) mai)->get_fem_noeud(i);
124     double *xyz1=fmnd->get_coord();
125    
126     xyz[3*i] =unite*xyz1[0];
127     xyz[3*i+1]=unite*xyz1[1];
128     xyz[3*i+2]=unite*xyz1[2];
129    
130     }
131     double landa=1-uv[0]-uv[1];
132     li=2;col=3;
133    
134     jac[0]=xyz[0]*(1-4*landa)+xyz[3]*(4*(landa-uv[0]))+ xyz[6]*(-1+4*uv[0])+ xyz[9]*(4*uv[1])+ xyz[12]*(0.)+ xyz[15]*(-4*uv[1]);
135     jac[1]=xyz[1]*(1-4*landa)+xyz[4]*(4*(landa-uv[0]))+ xyz[7]*(-1+4*uv[0])+ xyz[10]*(4*uv[1])+ xyz[13]*(0.)+ xyz[16]*(-4*uv[1]);
136     jac[2]=xyz[2]*(1-4*landa)+xyz[5]*(4*(landa-uv[0]))+ xyz[8]*(-1+4*uv[0])+ xyz[11]*(4*uv[1])+ xyz[14]*(0.)+ xyz[17]*(-4*uv[1]);
137    
138     jac[3]=xyz[0]*(1-4*landa)+xyz[3]*(-4*uv[0])+ xyz[6]*(0.)+ xyz[9]*(4*uv[0])+ xyz[12]*(-1+4*uv[1])+ xyz[15]*(4*(landa-uv[1]));
139     jac[4]=xyz[1]*(1-4*landa)+xyz[4]*(-4*uv[0])+ xyz[7]*(0.)+ xyz[10]*(4*uv[0])+ xyz[13]*(-1+4*uv[1])+ xyz[16]*(4*(landa-uv[1]));
140     jac[5]=xyz[2]*(1-4*landa)+xyz[5]*(-4*uv[0])+ xyz[8]*(0.)+ xyz[11]*(4*uv[0])+ xyz[14]*(-1+4*uv[1])+ xyz[17]*(4*(landa-uv[1]));
141    
142    
143     double DEUX_A=sqrt((jac[1]*jac[5]-jac[4]*jac[2])*(jac[1]*jac[5]-jac[4]*jac[2])+(jac[0]*jac[5]-jac[3]*jac[2])*(jac[0]*jac[5]-jac[3]*jac[2])+(jac[0]*jac[4]-jac[3]*jac[1])*(jac[0]*jac[4]-jac[3]*jac[1]));
144    
145     return DEUX_A;
146    
147     }
148    
149    
150     void SL_TRIANGLE23::get_inverse_jacob(double* jac,double* j,double unite)
151     {
152     return;
153     }
154    
155    
156     int SL_TRIANGLE23::nb_point_extrapolation()
157     {
158     return 3;
159     }
160