ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/solveur/src/sl_segment22.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_segment22.cpp
File size: 2326 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_segment22.h"
7     #include "fem_segment.h"
8     #include "fem_noeud.h"
9     //---------------------------------------------------------------------------
10     #pragma package(smart_init)
11    
12    
13    
14     SL_SEGMENT22::SL_SEGMENT22(class FEM_SEGMENT *mgseg):SL_SEGMENT(mgseg)
15     {
16     }
17    
18     SL_SEGMENT22::SL_SEGMENT22(SL_SEGMENT22& mdd):SL_SEGMENT(mdd)
19     {
20     }
21    
22     SL_SEGMENT22::~SL_SEGMENT22()
23     {
24     }
25    
26     int SL_SEGMENT22::nb_point_gauss(void)
27     {
28     return 2;
29     }
30    
31    
32     int SL_SEGMENT22::nb_fonction_interpolation(void)
33     {
34     return 3;
35     }
36    
37     void SL_SEGMENT22::get_point_gauss(int num,double *xyz,double& poids)
38     {
39     switch (num)
40     {
41     case 1:xyz[0]=-0.57735026918962576450914878050196;poids=1.;break;
42     case 2:xyz[0]=0.57735026918962576450914878050196;poids=1.;break;
43     }
44     }
45    
46     double SL_SEGMENT22::get_fonction_interpolation(int num,double *uv)
47     {
48     double val;
49     switch (num)
50     {
51     case 1:val=0.5*uv[0]*(1-uv[0]);break;
52     case 2:val=(1-uv[0]*uv[0]);break;
53     case 3:val=0.5*uv[0]*(1+uv[0]);break;
54     }
55     return val;
56     }
57    
58     double SL_SEGMENT22::get_fonction_derive_interpolation(int num,int num_variable,double *uv)
59     {
60     double val;
61     switch (num)
62     {
63     case 1:val=0.5*(-1+2*uv[0]);break;
64     case 2:val=-2*uv[0];break;
65     case 3:val=0.5*(1+2*uv[0]);break;
66     }
67     return val;
68    
69     }
70    
71     double SL_SEGMENT22::get_jacobien(double* jac,double *uv,int& li,int& col,double unite)
72     {
73     double xyz[9];
74    
75     int nb_nd=((FEM_SEGMENT*) mai)->get_nb_fem_noeud();
76    
77     for(int i=0;i<nb_nd;i++)
78     {
79     FEM_NOEUD* fmnd=((FEM_SEGMENT*) mai)->get_fem_noeud(i);
80     double *xyz1=fmnd->get_coord();
81    
82     xyz[3*i]= unite*xyz1[0];
83     xyz[3*i+1]=unite*xyz1[1];
84     xyz[3*i+2]=unite*xyz1[2];
85    
86     }
87    
88     li=1;col=3;
89    
90     jac[0]=0.5*(-1+2*uv[0])*xyz[0]-2*uv[0]*xyz[3]+0.5*(1+2*uv[0])*xyz[6];
91     jac[1]=0.5*(-1+2*uv[0])*xyz[1]-2*uv[0]*xyz[4]+0.5*(1+2*uv[0])*xyz[7];
92     jac[2]=0.5*(-1+2*uv[0])*xyz[2]-2*uv[0]*xyz[5]+0.5*(1+2*uv[0])*xyz[8];
93    
94     double L= 2* sqrt(jac[0]*jac[0]+jac[1]*jac[1]+jac[2]*jac[2]);
95     return L;
96     }
97    
98     void SL_SEGMENT22:: get_inverse_jacob(double* jac,double*j,double unite)
99     {
100     return;
101     }
102    
103     int SL_SEGMENT22::nb_point_extrapolation()
104     {
105     return 2;
106     }
107    
108    
109