ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/solveur/src/sl_triangle23.cpp
Revision: 1158
Committed: Thu Jun 13 22:18:49 2024 UTC (11 months ago) by francois
File size: 5653 byte(s)
Log Message:
compatibilité Ubuntu 22.04
Suppression des refeences à Windows
Ajout d'une banière

File Contents

# User Rev Content
1 francois 1158 //####//------------------------------------------------------------
2     //####//------------------------------------------------------------
3     //####// MAGiC
4     //####// Jean Christophe Cuilliere et Vincent FRANCOIS
5     //####// Departement de Genie Mecanique - UQTR
6     //####//------------------------------------------------------------
7     //####// MAGIC est un projet de recherche de l equipe ERICCA
8     //####// du departement de genie mecanique de l Universite du Quebec a Trois Rivieres
9     //####// http://www.uqtr.ca/ericca
10     //####// http://www.uqtr.ca/
11     //####//------------------------------------------------------------
12     //####//------------------------------------------------------------
13     //####//
14     //####// sl_triangle23.cpp
15     //####//
16     //####//------------------------------------------------------------
17     //####//------------------------------------------------------------
18     //####// COPYRIGHT 2000-2024
19     //####// jeu 13 jun 2024 11:58:57 EDT
20     //####//------------------------------------------------------------
21     //####//------------------------------------------------------------
22 5 #include "gestionversion.h"
23    
24     #pragma hdrstop
25     #include <math.h>
26     #include "sl_triangle23.h"
27     #include "fem_triangle.h"
28     #include "fem_noeud.h"
29    
30     #pragma package(smart_init)
31    
32     SL_TRIANGLE23::SL_TRIANGLE23(class FEM_TRIANGLE *mgseg):SL_TRIANGLE(mgseg)
33     {
34     }
35    
36     SL_TRIANGLE23::SL_TRIANGLE23(SL_TRIANGLE23& mdd):SL_TRIANGLE(mdd)
37     {
38     }
39    
40     SL_TRIANGLE23::~SL_TRIANGLE23()
41     {
42     }
43    
44     int SL_TRIANGLE23::nb_point_gauss(void)
45     {
46     return 3;
47     }
48    
49    
50    
51     int SL_TRIANGLE23::nb_fonction_interpolation(void)
52     {
53     return 6;
54     }
55    
56     void SL_TRIANGLE23::get_point_gauss(int num,double *xyz,double& poids)
57     {
58     switch (num)
59     {
60     case 1:xyz[0]=0.16666666666666666666666666666667;
61     xyz[1]=0.16666666666666666666666666666667;
62     poids=0.16666666666666666666666666666667;
63     break;
64     case 2:xyz[0]=0.66666666666666666666666666666667;
65     xyz[1]=0.16666666666666666666666666666667;
66     poids=0.16666666666666666666666666666667;
67     break;
68    
69     case 3:xyz[0]=0.16666666666666666666666666666667;
70     xyz[1]=0.66666666666666666666666666666667;
71     poids=0.16666666666666666666666666666667;
72     break;
73     }
74     }
75    
76     double SL_TRIANGLE23::get_fonction_interpolation(int num,double *uv)
77     {
78     double val;
79     double landa=1-uv[0]-uv[1];
80     switch (num)
81     {
82     case 1:val=-landa*(1-2*landa);break;
83     case 2:val=4*uv[0]*landa;break;
84     case 3:val=-uv[0]*(1-2*uv[0]);break;
85     case 4:val=4*uv[0]*uv[1];break;
86     case 5:val=-uv[1]*(1-2*uv[1]);break;
87     case 6:val=4*uv[1]*landa;break;
88     }
89     return val;
90     }
91    
92     double SL_TRIANGLE23::get_fonction_derive_interpolation(int num,int num_variable,double *uv)
93     {
94     double val;
95     double landa=1-uv[0]-uv[1];
96     switch (num)
97     {
98     case 1:switch (num_variable)
99     {
100     case 1:val=1-4*landa;break;
101     case 2:val=1-4*landa;break;
102     } break;
103     case 2:switch (num_variable)
104     {
105     case 1:val=4*(landa-uv[0]);break;
106     case 2:val=-4*uv[0];break;
107     }break;
108     case 3:switch (num_variable)
109     {
110     case 1:val=-1+4*uv[0];break;
111     case 2:val=0.;break;
112     }break;
113     case 4:switch (num_variable)
114     {
115     case 1:val=4*uv[1];break;
116     case 2:val=4*uv[0];break;
117     }break;
118     case 5:switch (num_variable)
119     {
120     case 1:val=0.;break;
121     case 2:val=-1+4*uv[1];break;
122     }break;
123     case 6:switch (num_variable)
124     {
125     case 1:val=-4*uv[1];break;
126     case 2:val=4*(landa-uv[1]);break;
127     }break;
128     }
129     return val;
130    
131     }
132    
133     double SL_TRIANGLE23::get_jacobien(double* jac,double *uv,int& li,int& col,double unite)
134     {
135    
136     double xyz[18];
137    
138     int nb_nd=((FEM_TRIANGLE*) mai)->get_nb_fem_noeud();
139    
140     for(int i=0;i<nb_nd;i++)
141     {
142     FEM_NOEUD* fmnd=((FEM_TRIANGLE*) mai)->get_fem_noeud(i);
143     double *xyz1=fmnd->get_coord();
144    
145     xyz[3*i] =unite*xyz1[0];
146     xyz[3*i+1]=unite*xyz1[1];
147     xyz[3*i+2]=unite*xyz1[2];
148    
149     }
150     double landa=1-uv[0]-uv[1];
151     li=2;col=3;
152    
153     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]);
154     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]);
155     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]);
156    
157     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]));
158     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]));
159     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]));
160    
161    
162     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]));
163    
164     return DEUX_A;
165    
166     }
167    
168    
169     void SL_TRIANGLE23::get_inverse_jacob(double* jac,double* j,double unite)
170     {
171     return;
172     }
173    
174    
175     int SL_TRIANGLE23::nb_point_extrapolation()
176     {
177     return 3;
178     }
179