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