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