muMECH  1.0
esuf_Cylinder.cpp
Go to the documentation of this file.
1 //********************************************************************************************************
2 // code: ### ### ##### #### ## ##
3 // ## ## ######## ## ## ## ## ##
4 // ## ## ## ## ## ### ## ######
5 // ## ## ## ## ## ## ## ## ##
6 // ##### ## ## ##### #### ## ##
7 // ##
8 //
9 // name: eshelbySoluUniformFieldCylinder.cpp
10 // author(s): Jan Novak, Tomas Janda
11 // language: C, C++
12 // license: This program is free software; you can redistribute it and/or modify
13 // it under the terms of the GNU Lesser General Public License as published by
14 // the Free Software Foundation; either version 2 of the License, or
15 // (at your option) any later version.
16 //
17 // This program is distributed in the hope that it will be useful,
18 // but WITHOUT ANY WARRANTY; without even the implied warranty of
19 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 // GNU Lesser General Public License for more details.
21 //
22 // You should have received a copy of the GNU Lesser General Public License
23 // along with this program; if not, write to the Free Software
24 // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 //********************************************************************************************************
26 
27 #include <iostream>
28 #include <stdio.h>
29 #include <stdlib.h>
30 #include <math.h>
31 #include "macros.h"
32 #include "elementaryFunctions.h"
33 #include "esuf_Cylinder.h"
34 #include "esei_Cylinder.h"
35 #include "legendreIntegrals.h"
36 #include "types.h"
37 
38 namespace mumech {
39 
40 //miscelaneous macros
41 //-------------------
42 //coordinates
43 #define X1 x[0]
44 #define X2 x[1]
45 #define X3 x[2]
46 //elliptic integrals
47 #define __I( component ) eSInt[component]
48 
49 
50 //********************************************************************************************************
51 // PUBLIC FUNCTIONS
52 //********************************************************************************************************
53 
54 //********************************************************************************************************
55 // description: Function gives a component of the Eshelby tensor
56 // last edit: 16. 10. 2009
57 //-------------------------------------------------------------------------------------------------------
58 // note: Solution adopted from Toshio Mura's book (1982) and Eshelby article (1957)
59 // @sort_a[3] - sorted circular cylinder semiaxes (a2>a3, a1 -> infinity (not used))
60 // @eSInt[13] - values of elliptical integrals (potentials)
61 // always for lambda = 0. Even for external fields !!!
62 // @nu - Poisson's ratio
63 // @flag - Eshelby tensor component S_ijkl
64 //********************************************************************************************************
66  const double eSInt[13], double nu,
68 {
69  double a2 = sort_a[1];
70  double S_ijkl = 0.;
71 
72  // The following expressions holds for elliptic cylinder
73  // I1 = 0.0
74  // I11 * a1^2 = 0.0
75  // I12 * a1^2 = I2
76  // I13 * a1^2 = I3 (= I2)
77 
78  switch( flag ){
79 
80  /* 1st row */
81  case _S1111_ :
82  S_ijkl = MULT * ( 1. - 2. * nu ) * __I(_Int1_);
83  break;
84  case _S1122_ :
85  S_ijkl = MULT * ( SQR( a2 ) * __I(_Int12_) - ( 1. - 2. * nu ) * __I(_Int1_) );
86  break;
87  case _S1133_ :
88  S_ijkl = MULT * ( SQR( a2 ) * __I(_Int13_) - ( 1. - 2. * nu ) * __I(_Int1_) );
89  break;
90  /* 2nd row */
91  case _S2211_ :
92  S_ijkl = MULT * ( __I(_Int2_) - ( 1. - 2. * nu ) * __I(_Int2_) );
93  break;
94  case _S2222_ :
95  S_ijkl = MULT * ( 3. * SQR( a2 ) * __I(_Int22_) + ( 1. - 2. * nu ) * __I(_Int2_) );
96  break;
97  case _S2233_ :
98  S_ijkl = MULT * ( SQR( a2 ) * __I(_Int23_) - ( 1. - 2. * nu ) * __I(_Int2_) );
99  break;
100  /* 3rd row */
101  case _S3311_ :
102  S_ijkl = MULT * ( __I(_Int3_) - ( 1. - 2. * nu ) * __I(_Int3_) );
103  break;
104  case _S3322_ :
105  S_ijkl = MULT * ( SQR( a2 ) * __I(_Int32_) - ( 1. - 2. * nu ) * __I(_Int3_) );
106  break;
107  case _S3333_ :
108  S_ijkl = MULT * ( 1. - 2. * nu ) * __I(_Int3_);
109  break;
110  /* !!! FEEP notation !!! e_ij = {e_11, e_22, e_33, e_12, e_32, e_31}^T */
111  /* 4th row */
112  case _S1212_ :
113  S_ijkl = .5 * MULT * ( ( 1. - 2. * nu ) * ( __I(_Int1_) + __I(_Int2_) ) + SQR( a2 ) * __I(_Int12_) + __I(_Int2_));
114  break;
115  /* 5th row */
116  case _S2323_ :
117  S_ijkl = .5 * MULT * ( ( 1. - 2. * nu ) * ( __I(_Int2_) + __I(_Int3_) ) +
118  ( SQR( a2 ) + SQR( a2 ) ) * __I(_Int23_) );
119  break;
120  /* 6th row */
121  case _S1313_ :
122  S_ijkl = .5 * MULT * ( ( 1. - 2. * nu ) * ( __I(_Int1_) + __I(_Int3_) ) + SQR( a2 ) * __I(_Int13_) + __I(_Int3_));
123  break;
124  default:
125  S_ijkl = 0.;
126  break;
127  }//end of switch: flag
128 
129  return S_ijkl;
130 }//end of function: eshelbyTensCompUniformFieldCylinder( )
131 
132 //********************************************************************************************************
133 // description: Function initialize an 1D array by Eshelby tensor components
134 // last edit: 15. 02. 2010
135 //-------------------------------------------------------------------------------------------------------
136 // note: Solution adopted from Toshio Mura's book (1982) and Eshelby article (1957)
137 // @eshTens - pointer to array of Eshelby tensor components S_ijkl
138 // @sort_a[3] - sorted flat-ellipsoidal semiaxes (a1>a2>>a3)
139 // @eInt[13] - values of elliptical integrals (potentials)
140 // @nu - Poisson's ratio
141 //********************************************************************************************************
143  const double sort_a[3], const double eInt[13])
144 {
145  double S[36];
146  this->giveSijkl(S, eInt, sort_a, nu, false);
147 
148  /* 1st row */
149  eshTens[0] = this->eshelbyTensCompUniformField( sort_a, eInt, nu, _S1111_ );
150  eshTens[1] = this->eshelbyTensCompUniformField( sort_a, eInt, nu, _S1122_ );
151  eshTens[2] = this->eshelbyTensCompUniformField( sort_a, eInt, nu, _S1133_ );
152  /* 2nd row */
153  eshTens[3] = this->eshelbyTensCompUniformField( sort_a, eInt, nu, _S2211_ );
154  eshTens[4] = this->eshelbyTensCompUniformField( sort_a, eInt, nu, _S2222_ );
155  eshTens[5] = this->eshelbyTensCompUniformField( sort_a, eInt, nu, _S2233_ );
156  /* 3rd row */
157  eshTens[6] = this->eshelbyTensCompUniformField( sort_a, eInt, nu, _S3311_ );
158  eshTens[7] = this->eshelbyTensCompUniformField( sort_a, eInt, nu, _S3322_ );
159  eshTens[8] = this->eshelbyTensCompUniformField( sort_a, eInt, nu, _S3333_ );
160  /* !!! FEEP - Mandel notation !!! e_ij = {e_11, e_22, e_33, 2e_12, 2e_32, 2e_31}^T */
161  /* 4th row */
162  eshTens[9] = 2. * this->eshelbyTensCompUniformField( sort_a, eInt, nu, _S1212_ );
163 
164  /* 5th row */
165  eshTens[10] = 2. * this->eshelbyTensCompUniformField( sort_a, eInt, nu, _S2323_ );
166 
167  /* 6th row */
168  eshTens[11] = 2. * this->eshelbyTensCompUniformField( sort_a, eInt, nu, _S1313_ );
169 
170  // TomTag
171  // Convert S[36] to eshTens[12]
172  eshTens[0] = S[0]; eshTens[1] = S[1]; eshTens[2] = S[2];
173  eshTens[3] = S[6]; eshTens[4] = S[7]; eshTens[5] = S[8];
174  eshTens[6] = S[12]; eshTens[7] = S[13]; eshTens[8] = S[14];
175  eshTens[9] = 2.0 * S[21]; eshTens[10] = 2.0 * S[28]; eshTens[11] = 2.0 * S[35];
176 return ;
177 }//end of function: eshelbyTensUniformFieldCylinder( )
178 
179 
180 
181 //********************************************************************************************************
182 // description: Function gives D_ijkl(x) generalized Eshelby's tensor.
183 // Function requiers "constructor2"
184 // last edit: 12. 07. 2010
185 //-------------------------------------------------------------------------------------------------------
186 // note: @D[36] - Perturbation (generalized Eshelby's) tensor to be evaluated and saved
187 // @S[12] - Eshelby's tensor for internal fields (uniform fields)
188 // @J[13] - Ferers-Dysons' elliptic integrals
189 // @dJi[9] - first derivatives of Ferers-Dysons' elliptic integrals Ii
190 // @dJij[27] - first derivatives of Ferers-Dysons' elliptic integrals Iij
191 // @ddJi[27] - second derivatives of Ferers-Dysons' elliptic integrals Ii
192 // @ddJij[81] - second derivatives of Ferers-Dysons' elliptic integrals Ii
193 // @sort_a[3] - sorted semiaxes' dimensions
194 // @x[3] - coordinates of a point
195 //********************************************************************************************************
196 void eshelbySoluUniformFieldCylinder::giveDijkl(double D[36], const double S[12], const double J[13], const double dJi[9],
197  const double dJij[27], const double ddJi[27], const double ddJij[81],
198  const double sort_a[3], const double x[3])
199 {
200  //if ( pos == PPF_INT_POINT ) {
201  // CleanVector( D, 36 );
202  // //1st row
203  // D[_1111_] = S[__1111_]; D[_1122_] = S[__1122_]; D[_1133_] = S[__1133_];
204  // //2nd row
205  // D[_2211_] = S[__2211_]; D[_2222_] = S[__2222_]; D[_2233_] = S[__2233_];
206  // //3rd row
207  // D[_3311_] = S[__3311_]; D[_3322_] = S[__3322_]; D[_3333_] = S[__3333_];
208  // //4th row
209  // D[_1212_] = S[__1212_];
210  // //5th row
211  // D[_2323_] = S[__2323_];
212  // //6th row
213  // D[_1313_] = S[__1313_];
214  //}
215  //else if ( pos == PPF_EXT_POINT ) {
216 
217  double auxS[36];//auxiliary array to save Eshelby tensor
218  //Position dependent Eshelby tensor:
219  this->giveSijkl( auxS, J, sort_a, nu, false );
220 
221  // The following components or Dijkl are (probably) obtained by expressing equation (11.41) from Mura book in Maple software.
222 
223  // The following expressions holds for elliptic cylinder
224  // I1 = 0.0
225  // I11 * a1^2 = 0.0
226  // I12 * a1^2 = I2
227  // I13 * a1^2 = I3 (= I2)
228 
229  /*1st row*/
230  D[_1111_] = auxS[_1111_];
231 
232  D[_1122_] = auxS[_1122_];
233 
234  D[_1133_] = auxS[_1133_];
235 
236  D[_1112_] = this->multTRN*(2*this->_1MinNu*J2_1*X2);
237 
238  D[_1123_] = 0.0;
239 
240  D[_1113_] = this->multTRN*(2*this->_1MinNu*J3_1*X3);
241 
242  /*2nd row*/
243  D[_2211_] = this->multTRN*(this->_2nu*J2_2*X2 + SQR(X2)*(-J2_11 + SQR(sort_a[1])*J22_11)) + auxS[_2211_];
244 
245  D[_2222_] = this->multTRN*(-(X2*(this->_1Plus2nu*J2_2 + J2_22*X2 - SQR(sort_a[1])*(5*J22_2 + X2*J22_22)))) +
246  auxS[_2222_];
247 
248  D[_2233_] = this->multTRN*(this->_2nu*J2_2*X2 + SQR(X2)*(-J2_33 + SQR(sort_a[1])*J22_33) +
249  X3*(-J3_3 + SQR(sort_a[1])*J32_3)) + auxS[_2233_];
250 
251  D[_2212_] = this->multTRN*(X2*(-2*J2_1 - J2_21*X2 + SQR(sort_a[1])*(2*J22_1 + X2*J22_21)));
252 
253  D[_2223_] = this->multTRN*(X2*(-3*J2_3 - J2_32*X2 + SQR(sort_a[1])*(3*J22_3 + X2*J22_32)) +
254  2*this->_1MinNu*J3_2*X3);
255 
256  D[_2213_] = this->multTRN*(SQR(X2)*(-J2_31 + SQR(sort_a[1])*J22_31));
257 
258 
259  /*3rd row*/
260  D[_3311_] = this->multTRN*(this->_2nu*J3_3*X3 + SQR(X3)*(-J3_11 + SQR(sort_a[2])*J33_11)) + auxS[_3311_];
261 
262  D[_3322_] = this->multTRN*(this->_2nu*J3_3*X3 + X2*(-J2_2 + SQR(sort_a[2])*J23_2) +
263  SQR(X3)*(-J3_22 + SQR(sort_a[2])*J33_22)) + auxS[_3322_];
264 
265  D[_3333_] = this->multTRN*(-(X3*(this->_1Plus2nu*J3_3 + J3_33*X3 - SQR(sort_a[2])*(5*J33_3 + X3*J33_33)))) +
266  auxS[_3333_];
267 
268  D[_3312_] = this->multTRN*(SQR(X3)*(-J3_21 + SQR(sort_a[2])*J33_21));
269 
270  D[_3323_] = this->multTRN*(this->_1Min2nu*J2_3*X2 + SQR(sort_a[2])*X2*J23_3 +
271  X3*(-2*J3_2 - J3_32*X3 + SQR(sort_a[2])*(2*J33_2 + X3*J33_32)));
272 
273  D[_3313_] = this->multTRN*(X3*(-2*J3_1 - J3_31*X3 + SQR(sort_a[2])*(2*J33_1 + X3*J33_31)));
274 
275  /*4th row*/
276  D[_1211_] = 0.0;
277 
278  D[_1222_] = this->multTRN*(2*this->_1MinNu*J2_1*X2);
279 
280  D[_1233_] = 0.0;
281 
282  D[_1212_] = this->multTRN*(this->_1MinNu*J2_2*X2) + auxS[_1212_];
283 
284  D[_1223_] = this->multTRN*(this->_1MinNu*J3_1*X3);
285 
286  D[_1213_] = this->multTRN*(this->_1MinNu*J3_2*X3);
287 
288  /*5th row*/
289  D[_2311_] = this->multTRN*(this->_2nu*J2_3*X2);
290 
291  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)));
292 
293  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)) +
294  2*this->_1MinNu*J3_2*X3);
295 
296  D[_2312_] = this->multTRN*(X3*(-J3_1 - J3_21*X2 + SQR(sort_a[1])*(J23_1 + X2*J23_21)));
297 
298  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 +
299  SQR(sort_a[1])*X3*J23_3 + SQR(sort_a[1])*X2*X3*J23_32) + auxS[_2323_];
300 
301  D[_2313_] = this->multTRN*(X2*(-J3_1 - J3_31*X3 + SQR(sort_a[1])*(J23_1 + X3*J23_31)));
302 
303  /*6th row*/
304  D[_1311_] = 0.0;
305 
306  D[_1322_] = 0.0;
307 
308  D[_1333_] = this->multTRN*(2*this->_1MinNu*J3_1*X3);
309 
310  D[_1312_] = this->multTRN*(this->_1MinNu*J2_3*X2);
311 
312  D[_1323_] = this->multTRN*(this->_1MinNu*J2_1*X2);
313 
314  D[_1313_] = this->multTRN*(this->_1MinNu*J3_3*X3) + auxS[_1313_];
315 
316  // TomTag:
317  // No Mandel notation.
318  // eps_star_ij = D_ijkl * eps_tau_kl
319  // e.g. eps_11 = ... + D_1112 eps_tau_12 + ... + D_1121 eps_tau_21
320  // Therefore thre right half of matrix D is multiplied by two.
321  D[_1112_] *= 2.0;
322  D[_1123_] *= 2.0;
323  D[_1113_] *= 2.0;
325  D[_2212_] *= 2.0;
326  D[_2223_] *= 2.0;
327  D[_2213_] *= 2.0;
329  D[_3312_] *= 2.0;
330  D[_3323_] *= 2.0;
331  D[_3313_] *= 2.0;
333  D[_1212_] *= 2.0;
334  D[_1223_] *= 2.0;
335  D[_1213_] *= 2.0;
337  D[_2312_] *= 2.0;
338  D[_2323_] *= 2.0;
339  D[_2313_] *= 2.0;
341  D[_1312_] *= 2.0;
342  D[_1323_] *= 2.0;
343  D[_1313_] *= 2.0;
344  //}
345  //else _errorr( "giveDijkl: invalid position of a given point");
346 
347 
348  #ifdef TOM_DEBUG
349  // Temporary test of giveSijkl () implementation.
350  const int length = 36;
351  double S1[length];
352  double S2[length];
353  this->giveSijkl( S1, J, sort_a, nu, false );
354  this->giveSijkl( S2, J, sort_a, nu, true );
355  double err = 0.0;
356  for (int i=0; i < length; i++)
357  err += (S2[i] - S1[i]) * (S2[i] - S1[i]);
358 
359  std::cout << "Vypis slozek tenzoru S. (ve funkci giveDijkl())" << std::endl;
360  for (int i = 0; i < 12; i++)
361  std::cout << "S[" << i << "] = " << S[i] << std::endl;
362  std::cout << std::endl;
363  std::cout << "Vypis slozek tenzoru D. (giveDijkl())" << std::endl;
364  for (int i = 0; i < 36; i++)
365  std::cout << "D[" << i << "] = " << D[i] << std::endl;
366  std::cout << std::endl;
367 #endif
368 
369  return ;
370 }//end of function: giveDijkl( )
371 
372 
373 //********************************************************************************************************
374 // PROTECTED FUNCTIONS
375 //********************************************************************************************************
376 
377 //********************************************************************************************************
378 // description: Function gives the displacement perturbation tensor of internal fields.
379 // Function requiers "constructor2"
380 // last edit: 15 07. 2010
381 //-------------------------------------------------------------------------------------------------------
382 // note: @Lint[18] - Perturbation (Eshelby's-like) displacement tensor to be evaluated and saved
383 // @J[13] - Ferers-Dysons' elliptic integrals
384 // @sort_a[3] - sorted semiaxes' dimensions
385 // @x[3] - coordinates of a point
386 //********************************************************************************************************
387 void eshelbySoluUniformFieldCylinder::giveLijkINT( double Lint[18], const double J[13], const double sort_a[3],
388  const double x[3] )
389 {
390  _errorr("termit: misto teto fce byla puvodne volana rodicovska, proc?");
391  CleanVector(Lint, 18); // No displacements of external points for flat shape.
392  return ;
393 }//end of function: giveLijkINT( )
394 
395 //********************************************************************************************************
396 // description: Function gives the displacement perturbation tensor of external fields.
397 // Function requiers "constructor2"
398 // last edit: 15. 07. 2010
399 //-------------------------------------------------------------------------------------------------------
400 // note: @Lext[18] - Perturbation (generalized Eshelby's) displacement tensor to be evaluated
401 // and saved
402 // @Lint[18] - Perturbation (Eshelby's-like) displacement tensor
403 // @dJi[9] - first derivatives of Ferers-Dysons' elliptic integrals Ii
404 // @dJij[27] - first derivatives of Ferers-Dysons' elliptic integrals Iij
405 // @sort_a[3] - sorted semiaxes' dimensions
406 // @x[3] - coordinates of a point
407 // @nu - Poisson's ratio of the matrix material
408 //********************************************************************************************************
409 void eshelbySoluUniformFieldCylinder::giveLijkEXT( double Lext[18], const double Lint[18], const double dJi[9],
410  const double dJij[27], const double sort_a[3],
411  const double x[3] )
412 {
413  //UNREFERENCED_PARAMETER(nu);
414  CleanVector(Lext, 18); // No displacements of external points for flat shape.
415  return;
416 }//end of function: giveLijkEXT( )
417 
418 //********************************************************************************************************
419 // description: Function gives S_ijkl(x) position dependent Eshelby's tensor. (This is not
420 // the strain perturbation tensor! Just its part ). The returned members of the
421 // S_ijkl matrix are in tensorial (theoretical) notation!
422 // Function requiers "constructor2"
423 // last edit: 12. 07. 2010
424 //-------------------------------------------------------------------------------------------------------
425 // note: @S[36] - Eshelby position dependent tensor
426 // @J[13] - Ferers-Dysons' elliptic integrals
427 // @sort_a[3] - sorted semiaxes' dimensions
428 // @nu - Poisson's ratio of the matrix material
429 //********************************************************************************************************
430 void eshelbySoluUniformFieldCylinder::giveSijkl( double S[36], const double J[13], const double sort_a[3],
431  double nu, bool newFormulation )
432 {
433  double mult = this->multTRN;
434 
435  if (!newFormulation)
436  {
437  // Original formulation of S tensor.
438  // Differs from Mura book Eq.(11.16), but Eshelby tensor is OK when compared to HELP results.
439  //1st row
440  S[_1111_] = mult * ( this->_1Min2nu * J1 + 0.0 ); // I11 * a1^2 = 0.0 for cylinder
441  S[_1122_] = mult * ( this->_2nu * J1 - J2 + J2 ); // I12 * a1^2 = I2 for cylinder
442  S[_1133_] = mult * ( this->_2nu * J1 - J3 + J3 ); // I13 * a1^2 = I3 (=I2) for cylinder
443  S[_1123_] = S[_1113_] = S[_1112_] = 0.;
444  //2nd row
445  S[_2211_] = mult * ( this->_2nu * J2 - J1 + SQR( sort_a[1] ) * J12 );
446  S[_2222_] = mult * ( this->_1Min2nu * J2 + 3. * SQR( sort_a[1] ) * J22 );
447  S[_2233_] = mult * ( this->_2nu * J2 - J3 + SQR( sort_a[1] ) * J32 );
448  S[_2223_] = S[_2213_] = S[_2212_] = 0.;
449  //3rd row
450  S[_3311_] = mult * ( this->_2nu * J3 - J1 + SQR( sort_a[2] ) * J13 );
451  S[_3322_] = mult * ( this->_2nu * J3 - J2 + SQR( sort_a[2] ) * J23 );
452  S[_3333_] = mult * ( this->_1Min2nu * J3 + 3. * SQR( sort_a[2] ) * J33 );
453  S[_3323_] = S[_3313_] = S[_3312_] = 0.;
454  //4th row
455  S[_1211_] = S[_1222_] = S[_1233_] = 0.;
456  S[_1212_] = mult * ( this->_1MinNu * J2 );
457  S[_1223_] = S[_1213_] = 0.;
458  //5th row
459  S[_2311_] = S[_2322_] = S[_2333_] = S[_2312_] = 0.;
460  S[_2323_] = mult * ( this->_1MinNu * J2 - nu * J3 + SQR( sort_a[1] ) * J23 );
461  S[_2313_] = 0.;
462  //6th row
463  S[_1311_] = S[_1322_] = S[_1333_] = S[_1312_] = S[_1323_] = 0.;
464  S[_1313_] = mult * ( this->_1MinNu * J3 );
465  }
466  else
467  {
468  // New formulation (15.08.2013), corresponds to Eq.(11.16).
469  // ToDo: transrorm following expressions for a1 = infinity
470 
471  //1st row
472  S[_1111_] = mult * ( this->_1Min2nu * J1 + 3. * SQR( sort_a[0] ) * J11 );
473  S[_1122_] = mult * ( this->_2nu * J1 - J1 + SQR( sort_a[1] ) * J12 );
474  S[_1133_] = mult * ( this->_2nu * J1 - J1 + J1 );
475  S[_1123_] = S[_1113_] = S[_1112_] = 0.;
476  //2nd row
477  S[_2211_] = mult * ( this->_2nu * J2 - J2 + SQR( sort_a[0] ) * J12 );
478  S[_2222_] = mult * ( this->_1Min2nu * J2 + 3. * SQR( sort_a[1] ) * J22 );
479  S[_2233_] = mult * ( this->_2nu * J2 - J2 + J2 );
480  S[_2223_] = S[_2213_] = S[_2212_] = 0.;
481  //3rd row
482  S[_3311_] = mult * ( this->_2nu * J3 - J1 + J1 ); // I13 * a3^2 = I1 for cylinder
483  S[_3322_] = mult * ( this->_2nu * J3 - J2 + J2 ); // I23 * a3^2 = I2 for cylinder
484  S[_3333_] = mult * ( this->_1Min2nu * J3 + 0.0 ); // I33 * a3^2 = 0.0 for cylinder
485  S[_3323_] = S[_3313_] = S[_3312_] = 0.;
486  //4th row
487  S[_1211_] = S[_1222_] = S[_1233_] = 0.;
488  S[_1212_] = mult * ( this->_1Min2nu / 2.0 * (J1 + J2) + ( SQR( sort_a[0] ) + SQR( sort_a[1] ) ) / 2.0 * J12 );
489  S[_1223_] = S[_1213_] = 0.;
490  //5th row
491  S[_2311_] = S[_2322_] = S[_2333_] = S[_2312_] = 0.;
492  S[_2323_] = mult * ( this->_1Min2nu / 2.0 * (J2 + J3) + J2 / 2.0 );
493  S[_2313_] = 0.;
494  //6th row
495  S[_1311_] = S[_1322_] = S[_1333_] = S[_1312_] = S[_1323_] = 0.;
496  S[_1313_] = mult * ( this->_1Min2nu / 2.0 * (J1 + J3) + J1 / 2.0 );
497  }
498 
499  #ifdef TOM_DEBUG
500  std::cout << "Vypis slozek tenzoru S. (giveSijkl())" << std::endl;
501  for (int i = 0; i < 36; i++)
502  std::cout << "S[" << i << "] = " << S[i] << std::endl;
503  std::cout << std::endl;
504 #endif
505 
506  return ;
507 }//end of function: giveSijkl( )
508 
509 } // end of namespace mumech
510 
511 /*end of file*/
#define X3
#define J2_3
Definition: types.h:457
#define _2223_
Definition: types.h:326
#define _2311_
Definition: types.h:343
#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 J2_33
Definition: types.h:528
#define J23_33
Definition: types.h:619
#define _1222_
Definition: types.h:337
#define J3_3
Definition: types.h:461
#define _3322_
Definition: types.h:330
#define J3_2
Definition: types.h:460
#define J33
Definition: types.h:444
#define __I(component)
#define J2_31
Definition: types.h:526
void giveSijkl(double S[36], const double J[13], const double sort_a[3], double nu, bool newFormulation)
Class legendreIntegrals.
#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 J23_22
Definition: types.h:614
Class eshelbySoluEllipticIntegralsCylinder.
#define _1322_
Definition: types.h:351
#define _1212_
Definition: types.h:339
#define _2322_
Definition: types.h:344
#define J3
Definition: types.h:432
#define J33_2
Definition: types.h:487
void eshelbyTensUniformField(double eshTens[12], const double sort_a[3], const double eInt[13])
#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 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 _2333_
Definition: types.h:345
#define _2233_
Definition: types.h:324
#define _1213_
Definition: types.h:341
#define _2222_
Definition: types.h:323
#define J32
Definition: types.h:443
#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
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 _1122_
Definition: types.h:316
#define J22_22
Definition: types.h:601
#define J33_1
Definition: types.h:474
#define J23_3
Definition: types.h:496
#define J22_3
Definition: types.h:495
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
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])
#define X2
void giveLijkINT(double Lint[18], const double J[13], const double sort_a[3], const double x[3])
#define _1211_
Definition: types.h:336
#define _3323_
Definition: types.h:333
#define _errorr(_1)
Definition: gelib.h:160
#define _2312_
Definition: types.h:346
#define J22_33
Definition: types.h:606
#define J22_31
Definition: types.h:604
#define _2211_
Definition: types.h:322
#define J22_1
Definition: types.h:469
#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
#define J32_3
Definition: types.h:499
#define _1312_
Definition: types.h:353
#define _3311_
Definition: types.h:329
#define J23_31
Definition: types.h:617
#define J22_11
Definition: types.h:596
#define J2_2
Definition: types.h:456
#define J33_31
Definition: types.h:656
#define J3_21
Definition: types.h:535
#define J2_22
Definition: types.h:523
#define J12
Definition: types.h:435
double multTRN
1./mult
Definition: esuf.h:57
#define _2313_
Definition: types.h:348
#define _3333_
Definition: types.h:331
#define J2_32
Definition: types.h:527
#define J3_22
Definition: types.h:536
#define _1311_
Definition: types.h:350
#define _1133_
Definition: types.h:317
#define J3_1
Definition: types.h:459
double eshelbyTensCompUniformField(const double sort_a[3], const double eInt[13], double nu, EshelbyTensComponent flag)
#define J22_2
Definition: types.h:482
#define J23_1
Definition: types.h:470
void CleanVector(double *a, long n)
Functin cleans a &#39;double&#39; vector, initialize each value being 0-zero.
#define J33_3
Definition: types.h:500
#define _1313_
Definition: types.h:355
#define J23
Definition: types.h:440
#define _1233_
Definition: types.h:338
#define _2323_
Definition: types.h:347
#define _1112_
Definition: types.h:318
#define _3312_
Definition: types.h:332