ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/solveur/src/sl_critere.cpp
Revision: 253
Committed: Tue Jul 13 19:40:46 2010 UTC (14 years, 10 months ago) by francois
File size: 2860 byte(s)
Log Message:
changement de hiearchie et utilisation de ccmake + mise a jour

File Contents

# User Rev Content
1 5 #include "gestionversion.h"
2    
3     #pragma hdrstop
4    
5     #include "sl_critere.h"
6     #include "sl_update.h"
7     #include "sl_op_plastique.h"
8     #include <math.h>
9     //---------------------------------------------------------------------------
10    
11     #pragma package(smart_init)
12    
13    
14     //---------------------------------------------------------------------------
15    
16     SL_CRITERE::SL_CRITERE(double sig_y,double eps_z,double n)
17     {
18     _SIG_Y=sig_y;
19     _EPS_ZERO=eps_z;
20     _N=n;
21     }
22    
23    
24    
25     SL_CRITERE::~SL_CRITERE()
26     {
27    
28     }
29    
30     //----------------------------------------------------------------------------------
31     //Cette mÉthode calcul la contrainte équivalente de Hill et avec un choix approprié
32     //des coeficients de Hill elle peu faire le calcul de la contrainte de Von Mises
33     //----------------------------------------------------------------------------------
34     double SL_CRITERE::get_ctr_equiv(double* sig)
35     {
36     double SIG_VM;
37     SIG_VM=sqrt(0.5*((sig[0]-sig[1])*(sig[0]-sig[1])+(sig[0]-sig[2])*(sig[0]-sig[2])+(sig[1]-sig[2])*(sig[1]-sig[2]))+3*((sig[3]*sig[3])+(sig[4]*sig[4])+(sig[5]*sig[5])));
38     return SIG_VM;
39    
40     }
41    
42    
43     double SL_CRITERE::get_crit(double* sig_a,double alpha)
44     {
45     double sig_s=this->get_ecroui(alpha);
46     double sig_equi=this->get_ctr_equiv(sig_a);
47     double f=sig_equi-sig_s;
48     return f;
49     }
50     //--------------------------------------------------------------------------------------
51    
52     double SL_CRITERE::get_ecroui(double alpha)
53     {
54     double sig_s=_SIG_Y*pow((_EPS_ZERO+alpha),_N);
55     return sig_s;
56     }
57    
58    
59    
60     void SL_CRITERE::get_derive_sigma(double* sig,double* df_sigma)
61     {
62    
63     double S[6];
64     double sig_equiv=this->get_ctr_equiv(sig);
65     double trace=sig[0]+sig[1]+sig[2];
66    
67     for(int i=0;i<6;i++)
68     {
69     S[i]=sig[i];
70     if(i<3)
71     S[i]-=1./3*trace;
72     }
73    
74     if(sig_equiv!=0.0)
75     {
76     double coef=3./(2*sig_equiv);
77     df_sigma[0]=coef*S[0];
78     df_sigma[1]=coef*S[1];
79     df_sigma[2]=coef*S[2];
80     df_sigma[3]=coef*2*S[3];
81     df_sigma[4]=coef*2*S[4];
82     df_sigma[5]=coef*2*S[5];
83     }
84    
85     }
86     //--------------------------------------------------------------------------------------
87    
88     //--------------------------------------------------------------------------------------
89     //L'objectif de cette méthode est de calculer les termes mab de la amtrice M
90     //--------------------------------------------------------------------------------------
91    
92     double SL_CRITERE::get_mab(double* Sab,const double* dfa,const double* dfb)
93     {
94     double mab;
95     double df[6];
96     SL_UPDATE update;
97     update.remettre_a_zeros(df,6);
98     mab=0.0;
99    
100     for(int i=0;i<6;i++)
101     {
102     for(int j=0;j<6;j++)
103     {
104     df[i]+=Sab[i*6+j]*dfb[j];
105     }
106     mab+=dfa[i]*df[i];
107     }
108    
109    
110     return mab;
111    
112     }
113    
114    
115     //--------------------------------------------------------------------------------------
116