muMECH  1.0
esuf_ProlateSpheroid.cpp
Go to the documentation of this file.
1 //********************************************************************************************************
2 // code: ### ### ##### #### ## ##
3 // ## ## ######## ## ## ## ## ##
4 // ## ## ## ## ## ### ## ######
5 // ## ## ## ## ## ## ## ## ##
6 // ##### ## ## ##### #### ## ##
7 // ##
8 //
9 // name: eshelbySoluUniformFieldProlateSpheroid.cpp
10 // description: source file of the function returning the Eshelby solution of an Prolate-spheroidal inclusion
11 // loaded by the uniform strain/stress field
12 // author(s): Jan Novak, Tomas Janda
13 // place of birth: Czech Technical University in Prague, Faculty of Civil engineering
14 // last edit: 08. 08. 2013
15 // language: C, C++
16 // license: This program is free software; you can redistribute it and/or modify
17 // it under the terms of the GNU Lesser General Public License as published by
18 // the Free Software Foundation; either version 2 of the License, or
19 // (at your option) any later version.
20 //
21 // This program is distributed in the hope that it will be useful,
22 // but WITHOUT ANY WARRANTY; without even the implied warranty of
23 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 // GNU Lesser General Public License for more details.
25 //
26 // You should have received a copy of the GNU Lesser General Public License
27 // along with this program; if not, write to the Free Software
28 // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
29 //********************************************************************************************************
30 
31 #include <iostream>
32 #include <stdio.h>
33 #include <stdlib.h>
34 #include <math.h>
35 #include "macros.h"
36 #include "elementaryFunctions.h"
37 #include "esuf_ProlateSpheroid.h"
38 #include "esei_ProlateSpheroid.h"
39 #include "legendreIntegrals.h"
40 #include "types.h"
41 
42 namespace mumech {
43 
44 //miscelaneous macros
45 //-------------------
46 //coordinates
47 #define X1 x[0]
48 #define X2 x[1]
49 #define X3 x[2]
50 //elliptic integrals
51 #define __I( component ) eSInt[component]
52 
53 
54 
55 //********************************************************************************************************
56 // PUBLIC FUNCTIONS
57 //********************************************************************************************************
58 
59 //********************************************************************************************************
60 // description: Function gives a component of the Eshelby tensor
61 // last edit: 08. 08. 2013
62 //-------------------------------------------------------------------------------------------------------
63 // note: Solution adopted from Toshio Mura's book (1982) and Eshelby article (1957)
64 // @sort_a[3] - sorted ellipsoidal semiaxes (a1>a2>a3)
65 // @eSInt[13] - values of elliptical integrals (potentials)
66 // always for lambda = 0. Even for external fields !!!
67 // @nu - Poisson's ratio
68 // @flag - Eshelby tensor component S_ijkl
69 //********************************************************************************************************
71  const double eSInt[13], double nu,
73 {
74  double a1 = sort_a[0], a2 = sort_a[1], a3 = sort_a[2];
75  double S_ijkl = 0.;
76 
77  switch( flag ){
78  /* 1st row */
79  case _S1111_ :
80  S_ijkl = MULT * ( 3. * SQR( a1 ) * __I(_Int11_) + ( 1. - 2. * nu ) * __I(_Int1_) );
81  break;
82  case _S1122_ :
83  S_ijkl = MULT * ( SQR( a2 ) * __I(_Int12_) - ( 1. - 2. * nu ) * __I(_Int1_) );
84  break;
85  case _S1133_ :
86  S_ijkl = MULT * ( SQR( a3 ) * __I(_Int13_) - ( 1. - 2. * nu ) * __I(_Int1_) );
87  break;
88  /* 2nd row */
89  case _S2211_ :
90  S_ijkl = MULT * ( SQR( a1 ) * __I(_Int21_) - ( 1. - 2. * nu ) * __I(_Int2_) );
91  break;
92  case _S2222_ :
93  S_ijkl = MULT * ( 3. * SQR( a2 ) * __I(_Int22_) + ( 1. - 2. * nu ) * __I(_Int2_) );
94  break;
95  case _S2233_ :
96  S_ijkl = MULT * ( SQR( a3 ) * __I(_Int23_) - ( 1. - 2. * nu ) * __I(_Int2_) );
97  break;
98  /* 3rd row */
99  case _S3311_ :
100  S_ijkl = MULT * ( SQR( a1 ) * __I(_Int31_) - ( 1. - 2. * nu ) * __I(_Int3_) );
101  break;
102  case _S3322_ :
103  S_ijkl = MULT * ( SQR( a2 ) * __I(_Int32_) - ( 1. - 2. * nu ) * __I(_Int3_) );
104  break;
105  case _S3333_ :
106  S_ijkl = MULT * ( 3. * SQR( a3 ) * __I(_Int33_) + ( 1. - 2. * nu ) * __I(_Int3_) );
107  break;
108  /* !!! FEEP notation !!! e_ij = {e_11, e_22, e_33, e_12, e_32, e_31}^T */
109  /* 4th row */
110  case _S1212_ :
111  S_ijkl = .5 * MULT * ( ( 1. - 2. * nu ) * ( __I(_Int1_) + __I(_Int2_) ) +
112  ( SQR( a1 ) + SQR( a2 ) ) * __I(_Int12_) );
113  break;
114  /* 5th row */
115  case _S2323_ :
116  S_ijkl = .5 * MULT * ( ( 1. - 2. * nu ) * ( __I(_Int2_) + __I(_Int3_) ) +
117  ( SQR( a2 ) + SQR( a3 ) ) * __I(_Int23_) );
118  break;
119  /* 6th row */
120  case _S1313_ :
121  S_ijkl = .5 * MULT * ( ( 1. - 2. * nu ) * ( __I(_Int1_) + __I(_Int3_) ) +
122  ( SQR( a1 ) + SQR( a3 ) ) * __I(_Int13_) );
123  break;
124  default:
125  S_ijkl = 0.;
126  break;
127  }//end of switch: flag
128 
129  return S_ijkl;
130 }//end of function: eshelbyTensCompUniformFieldProlateSpheroid( )
131 
132 
133 
134 //********************************************************************************************************
135 // description: Function gives D_ijkl(x) generalized Eshelby's tensor.
136 // Function requiers "constructor2"
137 // last edit: 08. 08. 2013
138 //-------------------------------------------------------------------------------------------------------
139 // note: @D[36] - Perturbation (generalized Eshelby's) tensor to be evaluated and saved
140 // @S[12] - Eshelby's tensor for internal fields (uniform fields)
141 // @J[13] - Ferers-Dysons' elliptic integrals
142 // @dJi[9] - first derivatives of Ferers-Dysons' elliptic integrals Ii
143 // @dJij[27] - first derivatives of Ferers-Dysons' elliptic integrals Iij
144 // @ddJi[27] - second derivatives of Ferers-Dysons' elliptic integrals Ii
145 // @ddJij[81] - second derivatives of Ferers-Dysons' elliptic integrals Ii
146 // @sort_a[3] - sorted semiaxes' dimensions
147 // @x[3] - coordinates of a point
148 
149 //********************************************************************************************************
150 void eshelbySoluUniformFieldProlateSpheroid::giveDijkl(double D[36], const double S[12], const double J[13], const double dJi[9],
151  const double dJij[27], const double ddJi[27], const double ddJij[81],
152  const double sort_a[3], const double x[3])
153 {
154  // if ( pos == PPF_INT_POINT ) {
155  // CleanVector( D, 36 );
156  // //1st row
157  // D[_1111_] = S[__1111_]; D[_1122_] = S[__1122_]; D[_1133_] = S[__1133_];
158  // //2nd row
159  // D[_2211_] = S[__2211_]; D[_2222_] = S[__2222_]; D[_2233_] = S[__2233_];
160  // //3rd row
161  // D[_3311_] = S[__3311_]; D[_3322_] = S[__3322_]; D[_3333_] = S[__3333_];
162  // //4th row
163  // D[_1212_] = S[__1212_];
164  // //5th row
165  // D[_2323_] = S[__2323_];
166  // //6th row
167  // D[_1313_] = S[__1313_];
168  // }
169  // else if ( pos == PPF_EXT_POINT ) {
170 
171  double auxS[36];//auxiliary array to save Eshelby tensor
172  //Position dependent Eshelby tensor:
173  this->giveSijkl( auxS, J, sort_a, nu , false);
174 
175  // The following components or Dijkl are (probably) obtained by expressing equation (11.41) from Mura book in Maple software.
176 
177  /*1st row*/
178  D[_1111_] = this->multTRN*(-(X1*(this->_1Plus2nu*J1_1 + J1_11*X1 - SQR(sort_a[0])*(5*J11_1 + X1*J11_11)))) +
179  auxS[_1111_];
180 
181  D[_1122_] = this->multTRN*(this->_2nu*J1_1*X1 + SQR(X1)*(-J1_22 + SQR(sort_a[0])*J11_22) +
182  X2*(-J2_2 + SQR(sort_a[0])*J21_2)) + auxS[_1122_];
183 
184  D[_1133_] = this->multTRN*(this->_2nu*J1_1*X1 + SQR(X1)*(-J1_33 + SQR(sort_a[0])*J11_33) +
185  X3*(-J3_3 + SQR(sort_a[0])*J31_3)) + auxS[_1133_];
186 
187  D[_1112_] = this->multTRN*(X1*(-3*J1_2 - J1_21*X1 + SQR(sort_a[0])*(3*J11_2 + X1*J11_21)) +
188  2*this->_1MinNu*J2_1*X2);
189 
190  D[_1123_] = this->multTRN*(SQR(X1)*(-J1_32 + SQR(sort_a[0])*J11_32) + X2*(-J2_3 + SQR(sort_a[0])*J21_3));
191 
192  D[_1113_] = this->multTRN*(X1*(-3*J1_3 - J1_31*X1 + SQR(sort_a[0])*(3*J11_3 + X1*J11_31)) +
193  2*this->_1MinNu*J3_1*X3);
194 
195  /*2nd row*/
196  D[_2211_] = this->multTRN*(this->_2nu*J2_2*X2 + X1*(-J1_1 + SQR(sort_a[1])*J12_1) +
197  SQR(X2)*(-J2_11 + SQR(sort_a[1])*J22_11)) + auxS[_2211_];
198 
199  D[_2222_] = this->multTRN*(-(X2*(this->_1Plus2nu*J2_2 + J2_22*X2 - SQR(sort_a[1])*(5*J22_2 + X2*J22_22)))) +
200  auxS[_2222_];
201 
202  D[_2233_] = this->multTRN*(this->_2nu*J2_2*X2 + SQR(X2)*(-J2_33 + SQR(sort_a[1])*J22_33) +
203  X3*(-J3_3 + SQR(sort_a[1])*J32_3)) + auxS[_2233_];
204 
205  D[_2212_] = this->multTRN*(this->_1Min2nu*J1_2*X1 + SQR(sort_a[1])*X1*J12_2 +
206  X2*(-2*J2_1 - J2_21*X2 + SQR(sort_a[1])*(2*J22_1 + X2*J22_21)));
207 
208  D[_2223_] = this->multTRN*(X2*(-3*J2_3 - J2_32*X2 + SQR(sort_a[1])*(3*J22_3 + X2*J22_32)) +
209  2*this->_1MinNu*J3_2*X3);
210 
211  D[_2213_] = this->multTRN*(X1*(-J1_3 + SQR(sort_a[1])*J12_3) + SQR(X2)*(-J2_31 + SQR(sort_a[1])*J22_31));
212 
213 
214  /*3rd row*/
215  D[_3311_] = this->multTRN*(this->_2nu*J3_3*X3 + X1*(-J1_1 + SQR(sort_a[2])*J13_1) +
216  SQR(X3)*(-J3_11 + SQR(sort_a[2])*J33_11)) + auxS[_3311_];
217 
218  D[_3322_] = this->multTRN*(this->_2nu*J3_3*X3 + X2*(-J2_2 + SQR(sort_a[2])*J23_2) +
219  SQR(X3)*(-J3_22 + SQR(sort_a[2])*J33_22)) + auxS[_3322_];
220 
221  D[_3333_] = this->multTRN*(-(X3*(this->_1Plus2nu*J3_3 + J3_33*X3 - SQR(sort_a[2])*(5*J33_3 + X3*J33_33)))) +
222  auxS[_3333_];
223 
224  D[_3312_] = this->multTRN*(X1*(-J1_2 + SQR(sort_a[2])*J13_2) + SQR(X3)*(-J3_21 + SQR(sort_a[2])*J33_21));
225 
226  D[_3323_] = this->multTRN*(this->_1Min2nu*J2_3*X2 + SQR(sort_a[2])*X2*J23_3 +
227  X3*(-2*J3_2 - J3_32*X3 + SQR(sort_a[2])*(2*J33_2 + X3*J33_32)));
228 
229  D[_3313_] = this->multTRN*(this->_1Min2nu*J1_3*X1 + SQR(sort_a[2])*X1*J13_3 +
230  X3*(-2*J3_1 - J3_31*X3 + SQR(sort_a[2])*(2*J33_1 + X3*J33_31)));
231 
232  /*4th row*/
233  D[_1211_] = this->multTRN*(2*J1_2*X1 + X2*(-2*J2_1 - J2_11*X1 + SQR(sort_a[0])*(2*J12_1 + X1*J12_11)));
234 
235  D[_1222_] = this->multTRN*(this->_2nu*J1_2*X1 + X1*(-2*J2_2 - J2_22*X2 + SQR(sort_a[0])*(2*J12_2 + X2*J12_22)) +
236  2*this->_1MinNu*J2_1*X2);
237 
238  D[_1233_] = this->multTRN*(X1*(this->_2nu*J1_2 + X2*(-J2_33 + SQR(sort_a[0])*J12_33)));
239 
240  D[_1212_] = this->multTRN*(this->_1MinNu*J1_1*X1 - J2_1*X1 - nu*J2_2*X2 - J2_21*X1*X2 + SQR(sort_a[0])*X1*J12_1 +
241  SQR(sort_a[0])*X2*J12_2 + SQR(sort_a[0])*X1*X2*J12_21) + auxS[_1212_];
242 
243  D[_1223_] = this->multTRN*(X1*(-J2_3 - J2_32*X2 + SQR(sort_a[0])*(J12_3 + X2*J12_32)) +
244  this->_1MinNu*J3_1*X3);
245 
246  D[_1213_] = this->multTRN*(X2*(-J2_3 - J2_31*X1 + SQR(sort_a[0])*(J12_3 + X1*J12_31)) +
247  this->_1MinNu*J3_2*X3);
248 
249  /*5th row*/
250  D[_2311_] = this->multTRN*(X2*(this->_2nu*J2_3 + X3*(-J3_11 + SQR(sort_a[1])*J23_11)));
251 
252  D[_2322_] = this->multTRN*(2*J2_3*X2 + X3*(-2*J3_2 - J3_22*X2 + SQR(sort_a[1])*(2*J23_2 + X2*J23_22)));
253 
254  D[_2333_] = this->multTRN*(this->_2nu*J2_3*X2 + X2*(-2*J3_3 - J3_33*X3 + SQR(sort_a[1])*(2*J23_3 + X3*J23_33)) +
255  2*this->_1MinNu*J3_2*X3);
256 
257  D[_2312_] = this->multTRN*(this->_1MinNu*J1_3*X1 + X3*(-J3_1 - J3_21*X2 + SQR(sort_a[1])*(J23_1 + X2*J23_21)));
258 
259  D[_2323_] = this->multTRN*(this->_1MinNu*J2_2*X2 - J3_2*X2 - nu*J3_3*X3 - J3_32*X2*X3 + SQR(sort_a[1])*X2*J23_2 +
260  SQR(sort_a[1])*X3*J23_3 + SQR(sort_a[1])*X2*X3*J23_32) + auxS[_2323_];
261 
262  D[_2313_] = this->multTRN*(this->_1MinNu*J1_2*X1 + X2*(-J3_1 - J3_31*X3 + SQR(sort_a[1])*(J23_1 + X3*J23_31)));
263 
264  /*6th row*/
265  D[_1311_] = this->multTRN*(2*J1_3*X1 + X3*(-2*J3_1 - J3_11*X1 + SQR(sort_a[0])*(2*J13_1 + X1*J13_11)));
266 
267  D[_1322_] = this->multTRN*(X1*(this->_2nu*J1_3 + X3* (-J3_22 + SQR(sort_a[0])*J13_22)));
268 
269  D[_1333_] = this->multTRN*(this->_2nu*J1_3*X1 + X1*(-2*J3_3 - J3_33*X3 + SQR(sort_a[0])*(2*J13_3 + X3*J13_33)) +
270  2*this->_1MinNu*J3_1*X3);
271 
272  D[_1312_] = this->multTRN*(this->_1MinNu*J2_3*X2 + X3*(-J3_2 - J3_21*X1 + SQR(sort_a[0])*(J13_2 + X1*J13_21)));
273 
274  D[_1323_] = this->multTRN*(X1*(-J3_2 - J3_32*X3 + SQR(sort_a[0])*(J13_2 + X3*J13_32)) +
275  this->_1MinNu*J2_1*X2);
276 
277  D[_1313_] = this->multTRN*(this->_1MinNu*J1_1*X1 - J3_1*X1 - nu*J3_3*X3 - J3_31*X1*X3 + SQR(sort_a[0])*X1*J13_1 +
278  SQR(sort_a[0])*X3*J13_3 + SQR(sort_a[0])*X1*X3*J13_31) + auxS[_1313_];
279 
280  // TomTag:
281  // No Mandel notation.
282  // eps_star_ij = D_ijkl * eps_tau_kl
283  // e.g. eps_11 = ... + D_1112 eps_tau_12 + ... + D_1121 eps_tau_21
284  // Therefore thre right half of matrix D is multiplied by two.
285  D[_1112_] *= 2.0;
286  D[_1123_] *= 2.0;
287  D[_1113_] *= 2.0;
289  D[_2212_] *= 2.0;
290  D[_2223_] *= 2.0;
291  D[_2213_] *= 2.0;
293  D[_3312_] *= 2.0;
294  D[_3323_] *= 2.0;
295  D[_3313_] *= 2.0;
297  D[_1212_] *= 2.0;
298  D[_1223_] *= 2.0;
299  D[_1213_] *= 2.0;
301  D[_2312_] *= 2.0;
302  D[_2323_] *= 2.0;
303  D[_2313_] *= 2.0;
305  D[_1312_] *= 2.0;
306  D[_1323_] *= 2.0;
307  D[_1313_] *= 2.0;
308  // }
309  // else _errorr( "giveDijkl: invalid position of a given point");
310 
311 }//end of function: giveDijkl( )
312 
313 
314 //********************************************************************************************************
315 // PROTECTED FUNCTIONS
316 //********************************************************************************************************
317 
318 //********************************************************************************************************
319 // description: Function gives the displacement perturbation tensor of internal fields.
320 // Function requiers "constructor2"
321 // last edit: 08. 08. 2013
322 //-------------------------------------------------------------------------------------------------------
323 // note: @Lint[18] - Perturbation (Eshelby's-like) displacement tensor to be evaluated and saved
324 // @J[13] - Ferers-Dysons' elliptic integrals
325 // @sort_a[3] - sorted semiaxes' dimensions
326 // @x[3] - coordinates of a point
327 //********************************************************************************************************
328 void eshelbySoluUniformFieldProlateSpheroid::giveLijkINT( double Lint[18], const double J[13], const double sort_a[3],
329  const double x[3] )
330 {
331  /* 1st row */
332  Lint[_111_] = this->multTRN * ( X1 * ( this->_1Min2nu * J1 + 3. * SQR( sort_a[0] ) * J11 ) );
333  Lint[_122_] = this->multTRN * ( X1 * ( this->_2nu * J1 - J2 + SQR( sort_a[0] ) * J12 ) );
334  Lint[_133_] = this->multTRN * ( X1 * ( this->_2nu * J1 - J3 + SQR( sort_a[0] ) * J13 ) );
335  Lint[_112_] = this->multTRN * ( X2 * ( this->_1Min2nu * J2 + SQR( sort_a[0] ) * J12 ) );
336  Lint[_123_] = 0.;
337  Lint[_113_] = this->multTRN * ( X3 * ( this->_1Min2nu * J3 + SQR( sort_a[0] ) * J13 ) );
338  /* 2nd row */
339  Lint[_211_] = this->multTRN * ( X2 * ( this->_2nu * J2 - J1 + SQR( sort_a[1] ) * J21 ) );
340  Lint[_222_] = this->multTRN * ( X2 * ( this->_1Min2nu * J2 + 3. * SQR( sort_a[1] ) * J22 ) );
341  Lint[_233_] = this->multTRN * ( X2 * ( this->_2nu * J2 - J3 + SQR( sort_a[1] ) * J23 ) );
342  Lint[_212_] = this->multTRN * ( X1 * ( this->_1Min2nu * J1 + SQR( sort_a[1] ) * J21 ) );
343  Lint[_223_] = this->multTRN * ( X3 * ( this->_1Min2nu * J3 + SQR( sort_a[1] ) * J23 ) );
344  Lint[_213_] = 0.;
345  /* 3rd row */
346  Lint[_311_] = this->multTRN * ( X3 * ( this->_2nu * J3 - J1 + SQR( sort_a[2] ) * J31 ) );
347  Lint[_322_] = this->multTRN * ( X3 * ( this->_2nu * J3 - J2 + SQR( sort_a[2] ) * J32 ) );
348  Lint[_333_] = this->multTRN * ( X3 * ( this->_1Min2nu * J3 + 3. * SQR( sort_a[2] ) * J33 ) );
349  Lint[_312_] = 0.;
350  Lint[_323_] = this->multTRN * ( X2 * ( this->_1Min2nu * J2 + SQR( sort_a[2] ) * J32 ) );
351  Lint[_313_] = this->multTRN * ( X1 * ( this->_1Min2nu * J1 + SQR( sort_a[2] ) * J31 ) );
352 
353  //Mandel notation adjusting
354  /* 1nd row */
355  Lint[_112_] *= 2;
356  Lint[_123_] *= 2;
357  Lint[_113_] *= 2;
358  /* 2nd row */
359  Lint[_212_] *= 2;
360  Lint[_223_] *= 2;
361  Lint[_213_] *= 2;
362  /* 3rd row */
363  Lint[_312_] *= 2;
364  Lint[_323_] *= 2;
365  Lint[_313_] *= 2;
366 
367  return ;
368 }//end of function: giveLijkINT( )
369 
370 //********************************************************************************************************
371 // description: Function gives the displacement perturbation tensor of external fields.
372 // Function requiers "constructor2"
373 // last edit: 08. 08. 2013
374 //-------------------------------------------------------------------------------------------------------
375 // note: @Lext[18] - Perturbation (generalized Eshelby's) displacement tensor to be evaluated
376 // and saved
377 // @Lint[18] - Perturbation (Eshelby's-like) displacement tensor
378 // @dJi[9] - first derivatives of Ferers-Dysons' elliptic integrals Ii
379 // @dJij[27] - first derivatives of Ferers-Dysons' elliptic integrals Iij
380 // @sort_a[3] - sorted semiaxes' dimensions
381 // @x[3] - coordinates of a point
382 // @nu - Poisson's ratio of the matrix material
383 //********************************************************************************************************
384 void eshelbySoluUniformFieldProlateSpheroid::giveLijkEXT( double Lext[18], const double Lint[18], const double dJi[9],
385  const double dJij[27], const double sort_a[3],
386  const double x[3])
387 {
388  double xx1 = SQR( X1 ), xx2 = SQR( X2 ), xx3 = SQR( X3 ), x1x2 = X1 * X2, x2x3 = X2 * X3,
389  x1x3 = X1 * X3;
390 
391  for( int i = 0; i < 18; i++ ){
392  Lext[i] = Lint[i];
393  }
394 
395  /* 1st row */
396  Lext[_111_] += this->multTRN * xx1 * ( -J1_1 + SQR( sort_a[0] ) * J11_1 );
397  Lext[_122_] += this->multTRN * x1x2 * ( -J2_2 + SQR( sort_a[0] ) * J12_2 );
398  Lext[_133_] += this->multTRN * x1x3 * ( -J3_3 + SQR( sort_a[0] ) * J13_3 );
399  Lext[_112_] += 2 * this->multTRN * xx1 * ( -J1_2 + SQR( sort_a[0] ) * J11_2 );
400  Lext[_123_] += 2 * this->multTRN * x1x2 * ( -J2_3 + SQR( sort_a[0] ) * J12_3 );
401  Lext[_113_] += 2 * this->multTRN * xx1 * ( -J1_3 + SQR( sort_a[0] ) * J11_3 );
402  /* 2nd row */
403  Lext[_211_] += this->multTRN * x1x2 * ( -J1_1 + SQR( sort_a[1] ) * J21_1 );
404  Lext[_222_] += this->multTRN * xx2 * ( -J2_2 + SQR( sort_a[1] ) * J22_2 );
405  Lext[_233_] += this->multTRN * x2x3 * ( -J3_3 + SQR( sort_a[1] ) * J23_3 );
406  Lext[_212_] += 2 * this->multTRN * x1x2 * ( -J1_2 + SQR( sort_a[1] ) * J21_2 );
407  Lext[_223_] += 2 * this->multTRN * xx2 * ( -J2_3 + SQR( sort_a[1] ) * J22_3 );
408  Lext[_213_] += 2 * this->multTRN * x1x2 * ( -J1_3 + SQR( sort_a[1] ) * J21_3 );
409  /* 3rd row */
410  Lext[_311_] += this->multTRN * x1x3 * ( -J1_1 + SQR( sort_a[2] ) * J31_1 );
411  Lext[_322_] += this->multTRN * x2x3 * ( -J2_2 + SQR( sort_a[2] ) * J32_2 );
412  Lext[_333_] += this->multTRN * xx3 * ( -J3_3 + SQR( sort_a[2] ) * J33_3 );
413  Lext[_312_] += 2 * this->multTRN * x1x3 * ( -J1_2 + SQR( sort_a[2] ) * J31_2 );
414  Lext[_323_] += 2 * this->multTRN * x2x3 * ( -J2_3 + SQR( sort_a[2] ) * J32_3 );
415  Lext[_313_] += 2 * this->multTRN * x1x3 * ( -J1_3 + SQR( sort_a[2] ) * J31_3 );
416 
417  return ;
418 }//end of function: giveLijkEXT( )
419 
420 //********************************************************************************************************
421 // description: Function gives S_ijkl(x) position dependent Eshelby's tensor. (This is not
422 // the strain perturbation tensor! Just its part ). The returned members of the
423 // S_ijkl matrix are in tensorial (theoretical) notation!
424 // Function requiers "constructor2"
425 // last edit: 08. 08. 2013
426 //-------------------------------------------------------------------------------------------------------
427 // note: @S[36] - Eshelby position dependent tensor
428 // @J[13] - Ferers-Dysons' elliptic integrals
429 // @sort_a[3] - sorted semiaxes' dimensions
430 // @nu - Poisson's ratio of the matrix material
431 //********************************************************************************************************
432 void eshelbySoluUniformFieldProlateSpheroid::giveSijkl( double S[36], const double J[13], const double sort_a[3],
433  double nu , bool newFormulation)
434 {
435  double mult = this->multTRN;
436 
437  // Mura book, eq (11.16)
438  // Tensor symmetry: Sijkl = Sjikl = Sijlk
439 
440  //1st row
441  S[_1111_] = mult * ( this->_1Min2nu * J1 + 3. * SQR( sort_a[0] ) * J11 );
442  S[_1122_] = mult * ( this->_2nu * J1 - J2 + SQR( sort_a[0] ) * J21 ); // ?? J21 == J12 (give_Ii_and_Iij)
443  S[_1133_] = mult * ( this->_2nu * J1 - J3 + SQR( sort_a[0] ) * J31 ); // ??
444  S[_1123_] = S[_1113_] = S[_1112_] = 0.;
445  //2nd row
446  S[_2211_] = mult * ( this->_2nu * J2 - J1 + SQR( sort_a[1] ) * J12 );
447  S[_2222_] = mult * ( this->_1Min2nu * J2 + 3. * SQR( sort_a[1] ) * J22 );
448  S[_2233_] = mult * ( this->_2nu * J2 - J3 + SQR( sort_a[1] ) * J32 );
449  S[_2223_] = S[_2213_] = S[_2212_] = 0.;
450  //3rd row
451  S[_3311_] = mult * ( this->_2nu * J3 - J1 + SQR( sort_a[2] ) * J13 );
452  S[_3322_] = mult * ( this->_2nu * J3 - J2 + SQR( sort_a[2] ) * J23 );
453  S[_3333_] = mult * ( this->_1Min2nu * J3 + 3. * SQR( sort_a[2] ) * J33 );
454  S[_3323_] = S[_3313_] = S[_3312_] = 0.;
455  //4th row
456  S[_1211_] = S[_1222_] = S[_1233_] = 0.;
457  S[_1212_] = mult * ( this->_1MinNu * J1 - nu * J2 + SQR( sort_a[0] ) * J12 );
458  S[_1223_] = S[_1213_] = 0.;
459  //5th row
460  S[_2311_] = S[_2322_] = S[_2333_] = S[_2312_] = 0.;
461  S[_2323_] = mult * ( this->_1MinNu * J2 - nu * J3 + SQR( sort_a[1] ) * J23 );
462  S[_2313_] = 0.;
463  //6th row
464  S[_1311_] = S[_1322_] = S[_1333_] = S[_1312_] = S[_1323_] = 0.;
465  S[_1313_] = mult * ( this->_1MinNu * J1 - nu * J3 + SQR( sort_a[0] ) * J13 ); // BUG?
466  //S[_1313_] = mult * ( this->_1MinNu * J1 - nu * J3 + SQR( sort_a[2] ) * J13 );
467 
468  // Mura book: Sijkl = Sjikl = Sijlk
469 
470  return ;
471 }//end of function: giveSijkl( )
472 
473 } // end of namespace mumech
474 
475 /*end of file*/
#define J11_3
Definition: types.h:490
#define J1_1
Definition: types.h:451
#define J31_2
Definition: types.h:485
#define J2_3
Definition: types.h:457
#define __I(component)
#define J11_32
Definition: types.h:553
#define J12_2
Definition: types.h:478
#define _2223_
Definition: types.h:326
#define _2311_
Definition: types.h:343
#define J12_33
Definition: types.h:567
#define _1323_
Definition: types.h:354
#define J33_11
Definition: types.h:648
#define _Int3_
Definition: types.h:404
file of various types and symbolic constant definitions
#define J13_2
Definition: types.h:479
#define J2_33
Definition: types.h:528
#define J12_32
Definition: types.h:566
#define J23_33
Definition: types.h:619
#define _1222_
Definition: types.h:337
#define J1_2
Definition: types.h:452
#define J3_3
Definition: types.h:461
#define J12_11
Definition: types.h:557
#define _212_
Definition: types.h:371
#define _3322_
Definition: types.h:330
#define J3_2
Definition: types.h:460
#define J33
Definition: types.h:444
#define J13_22
Definition: types.h:575
#define J2_31
Definition: types.h:526
#define _233_
Definition: types.h:370
#define J11_22
Definition: types.h:549
#define J21_1
Definition: types.h:468
#define J12_22
Definition: types.h:562
#define J31
Definition: types.h:442
#define J1_31
Definition: types.h:513
Class legendreIntegrals.
#define J12_3
Definition: types.h:491
#define J13_11
Definition: types.h:570
#define _Int23_
Definition: types.h:412
#define _1123_
Definition: types.h:319
#define _2212_
Definition: types.h:325
#define J2_11
Definition: types.h:518
#define J22_21
Definition: types.h:600
#define J33_22
Definition: types.h:653
#define _Int32_
Definition: types.h:415
double nu
nu of matrix
Definition: esuf.h:51
#define J2_21
Definition: types.h:522
#define _3313_
Definition: types.h:334
#define _Int22_
Definition: types.h:411
#define J22_32
Definition: types.h:605
#define J3_32
Definition: types.h:540
#define _2213_
Definition: types.h:327
#define J11_2
Definition: types.h:477
#define J23_22
Definition: types.h:614
#define _122_
Definition: types.h:362
#define J13_33
Definition: types.h:580
#define _1322_
Definition: types.h:351
#define X3
#define _312_
Definition: types.h:378
#define _1212_
Definition: types.h:339
#define J11_33
Definition: types.h:554
#define _2322_
Definition: types.h:344
#define _113_
Definition: types.h:366
#define J3
Definition: types.h:432
#define J33_2
Definition: types.h:487
void giveLijkINT(double Lint[18], const double J[13], const double sort_a[3], const double x[3])
#define _1223_
Definition: types.h:340
The header file of usefull macros.
#define J3_31
Definition: types.h:539
Collection of the functions of basic manipulations, some of them can be used instead of their counter...
#define _Int1_
Definition: types.h:402
#define _Int2_
Definition: types.h:403
#define J2
Definition: types.h:431
#define _Int12_
Definition: types.h:407
#define J3_11
Definition: types.h:531
#define _Int13_
Definition: types.h:408
#define J1_32
Definition: types.h:514
#define _133_
Definition: types.h:363
#define J23_2
Definition: types.h:483
#define J2_1
Definition: types.h:455
#define _1113_
Definition: types.h:320
#define J33_33
Definition: types.h:658
#define _123_
Definition: types.h:365
#define _2333_
Definition: types.h:345
#define _2233_
Definition: types.h:324
#define _1213_
Definition: types.h:341
#define _2222_
Definition: types.h:323
#define J31_3
Definition: types.h:498
#define J31_1
Definition: types.h:472
#define J32
Definition: types.h:443
#define J12_21
Definition: types.h:561
#define J13
Definition: types.h:436
#define J23_21
Definition: types.h:613
#define J3_33
Definition: types.h:541
#define _1111_
Definition: types.h:315
#define J11
Definition: types.h:434
#define J13_21
Definition: types.h:574
#define J12_1
Definition: types.h:465
void giveSijkl(double S[36], const double J[13], const double sort_a[3], double nu, bool newFormulation)
#define _1122_
Definition: types.h:316
#define J12_31
Definition: types.h:565
#define _112_
Definition: types.h:364
#define J21_3
Definition: types.h:494
#define J1_11
Definition: types.h:505
Class eshelbySoluEllipticIntegralsProlateSpheroid.
#define J22_22
Definition: types.h:601
#define J33_1
Definition: types.h:474
#define X2
#define J23_3
Definition: types.h:496
#define J13_32
Definition: types.h:579
#define _222_
Definition: types.h:369
#define J22_3
Definition: types.h:495
void giveDijkl(double D[36], const double S[12], const double J[13], const double dJi[9], const double dJij[27], const double ddJi[27], const double ddJij[81], const double sort_a[3], const double x[3])
EshelbyTensComponent
Definition: types.h:221
#define SQR(a)
Definition: macros.h:97
#define J22
Definition: types.h:439
#define J33_21
Definition: types.h:652
#define _1211_
Definition: types.h:336
#define _3323_
Definition: types.h:333
#define J21_2
Definition: types.h:481
#define _2312_
Definition: types.h:346
#define J22_33
Definition: types.h:606
#define J22_31
Definition: types.h:604
double eshelbyTensCompUniformField(const double sort_a[3], const double eInt[13], double nu, EshelbyTensComponent flag)
#define _2211_
Definition: types.h:322
#define J22_1
Definition: types.h:469
#define J13_3
Definition: types.h:492
#define J1
Definition: types.h:430
#define J23_32
Definition: types.h:618
#define _1333_
Definition: types.h:352
#define J33_32
Definition: types.h:657
void giveLijkEXT(double Lext[18], const double Lint[18], const double dJi[9], const double dJij[27], const double sort_a[3], const double x[3])
#define J32_3
Definition: types.h:499
#define J11_31
Definition: types.h:552
#define _1312_
Definition: types.h:353
#define J11_1
Definition: types.h:464
#define _322_
Definition: types.h:376
#define _3311_
Definition: types.h:329
#define J21
Definition: types.h:438
#define J23_31
Definition: types.h:617
#define _211_
Definition: types.h:368
#define J22_11
Definition: types.h:596
#define J2_2
Definition: types.h:456
#define J33_31
Definition: types.h:656
#define J1_33
Definition: types.h:515
#define J3_21
Definition: types.h:535
#define X1
#define J2_22
Definition: types.h:523
#define J32_2
Definition: types.h:486
#define J12
Definition: types.h:435
#define _213_
Definition: types.h:373
#define _Int21_
Definition: types.h:410
double multTRN
1./mult
Definition: esuf.h:57
#define _Int31_
Definition: types.h:414
#define _Int33_
Definition: types.h:416
#define _2313_
Definition: types.h:348
#define J11_21
Definition: types.h:548
#define _3333_
Definition: types.h:331
#define J1_21
Definition: types.h:509
#define J13_1
Definition: types.h:466
#define J2_32
Definition: types.h:527
#define J3_22
Definition: types.h:536
#define J13_31
Definition: types.h:578
#define _1311_
Definition: types.h:350
#define _1133_
Definition: types.h:317
#define J3_1
Definition: types.h:459
#define J22_2
Definition: types.h:482
#define _Int11_
Definition: types.h:406
#define _111_
Definition: types.h:361
#define J1_3
Definition: types.h:453
#define _323_
Definition: types.h:379
#define J23_1
Definition: types.h:470
#define _311_
Definition: types.h:375
#define _313_
Definition: types.h:380
#define J33_3
Definition: types.h:500
#define _333_
Definition: types.h:377
#define _1313_
Definition: types.h:355
#define J11_11
Definition: types.h:544
#define J23
Definition: types.h:440
#define J23_11
Definition: types.h:609
#define _1233_
Definition: types.h:338
#define _223_
Definition: types.h:372
#define _2323_
Definition: types.h:347
#define _1112_
Definition: types.h:318
#define _3312_
Definition: types.h:332
#define J1_22
Definition: types.h:510