muMECH  1.0
esei_Sphere.h
Go to the documentation of this file.
1 //********************************************************************************************************
2 // code: ### ### ##### #### ## ##
3 // ## ## ######## ## ## ## ## ##
4 // ## ## ## ## ## ### ## ######
5 // ## ## ## ## ## ## ## ## ##
6 // ##### ## ## ##### #### ## ##
7 // ##
8 //
9 // name: eshelbySoluEllipticIntegralsSphere.h
10 // author(s): Jan Novak, Lukasz Kaczmarczyk
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 //********************************************************************************************************
31 #ifndef MUMECH_ESHELBY_SOLU_ELLIPTIC_INTEGRALS_SPHERE_H
32 #define MUMECH_ESHELBY_SOLU_ELLIPTIC_INTEGRALS_SPHERE_H
33 
34 #include"types.h"
35 #include "esei.h"
36 #include <complex>
37 
38 
39 namespace mumech {
40 
46 {
47  public:
52 
53  //******************************************************************************************************
54  //Function gives a component of the Eshelby tensor
55  double eshelbyTensCompUniformField( EshelbyTensComponent flag, double nu, double a );
56  //******************************************************************************************************
57  //Function initialize an 1D array by Eshelby tensor components
58  void eshelbyTensUniformFieldSphere( double eshTens[12], double nu, double a );
59  //******************************************************************************************************
60  //Function gives the values of all elliptic integrals
61  void giveEllipticIntegrals (double J[13], double lambda, bool intpoint); // Overloaded. Should not depend on anyting else than this.
62 
63  // void giveEllipticIntegrals (double J[13], const double a[3], double lambda, const double loc_x[3]);
64  // //******************************************************************************************************
65  // //Function gives the values of all elliptic Ferers-Dysons integrals
66  // void give_Ii_and_Iij( double J[13], double mult, double norm_x[5], double lambda, double aa );
67  // //******************************************************************************************************
68  // //Function gives the solution of the integral I prefix 'e' means "from euclidean space"
69  // double eI( double mult, double norm_x[5], const double a[3], double lambda , bool intpoint);
70  // //******************************************************************************************************
71  // //Function gives the solution of the integral Ii
72  // double Ii( double mult, double norm_x[5], double lambda, bool intpoint );
73  // //******************************************************************************************************
74  // //Function gives the solution of the integral Iij
75  // double Iij(double mult, double norm_x[5], double lambda, double aa , bool intpoint);
76  // //******************************************************************************************************
77 
78 
79 #ifndef DEBUG
80  protected:
81 #endif
82 
83  //******************************************************************************************************
84  //Function gives the values of all elliptic integrals' derivatives
85  void giveDerivativesOfEllipticIntegrals(Point * point, bool intpoint);
86 
87  //Ferers-Dysons integrals:
88 
89  //Derivatives of Ferers-Dysons integrals:
90  //******************************************************************************************************
91  //Function gives the first derivative of the integral Ii
92  double Ii_i( double mult, double norm_x[5], double x[3], derivativeDirection direction );
93  //******************************************************************************************************
94  //Function gives the second derivative of the integral Ii
95  double Ii_ij( double mult, double norm_x[5], double x[3], derivativeDirection direction_1,
96  derivativeDirection direction_2 );
97  //******************************************************************************************************
98  //Function gives the first derivative of the integral Iij
99  double Iij_i( double mult, double norm_x[5], double x[3], derivativeDirection direction );
100  //******************************************************************************************************
101  //Function gives the second derivative of the integral Iij
102  double Iij_ij( double mult, double norm_x[5], double x[3], derivativeDirection direction_1,
103  derivativeDirection direction_2 );
104  //******************************************************************************************************
105  //Function gives all first derivatives of Ferers-Dysons' integrals Ii
106  void give_dIi( double dJi[13], double mult, double norm_x[5], double x[3] );
107  //******************************************************************************************************
108  //Function gives all first derivatives of Ferers-Dysons' integrals Iij
109  void give_dIij( double dJij[27], double mult, double norm_x[5], double x[3] );
110  //******************************************************************************************************
111  void give_ddIi( double ddJi[27], double mult, double norm_x[5], double x[3] );
112  //******************************************************************************************************
113  //Function gives all second derivatives of Ferers-Dysons' integrals Iij
114  void give_ddIij( double ddJij[81], double mult, double norm_x[5], double x[3] );
115  //******************************************************************************************************
116 
117  //Complex numerical derivatives of Ferers-Dysons integrals:
118  //---------------------------------------------------------
119 
120  //******************************************************************************************************
121  //Function gives the first derivative of the integral Ii by using the complex differentiation
122  std::complex<double> cIi_i( double mult, std::complex<double> x[3], derivativeDirection direction );
123  //******************************************************************************************************
124  //Function gives the first derivative of the integral Iij by using the complex differentiation
125  std::complex<double> cIij_i( double mult, std::complex<double> x[3], derivativeDirection direction );
126  //******************************************************************************************************
127  //Function gives all first derivatives of Ferers-Dysons' integrals Ii by using the complex
128  //differentiation
129  void give_cdIi( std::complex<double> dJi[13], double mult, double x[3] );
130  //******************************************************************************************************
131  //Function gives all first derivatives of Ferers-Dysons' integrals Iij by using the complex
132  //differentiation
133  void give_cdIij( std::complex<double> dJij[13], double mult, double x[3] );
134  //******************************************************************************************************
135  //Function updates vectors cx according the derivative direction
136  void update_cx( std::complex<double> cx[3], derivativeDirection direction );
137  //******************************************************************************************************
138  //Function gives all second derivatives of Ferers-Dysons' integrals Ii by using the complex
139  //differentiation
140  void give_cddIi( double ddJi[27], std::complex<double> dJi[13] );
141  //******************************************************************************************************
142  //Function gives all second derivatives of Ferers-Dysons' integrals Iij by using the complex
143  //differentiation
144  void give_cddIij( double ddJij[81], std::complex<double> dJij[27] );
145  //******************************************************************************************************
146 
147  double getLambda(const double a[3], double x1, double x2, double x3);
148 };
149 
150 } // end of namespace mumech
151 
152 #endif
153 
154 /*end of file*/
std::complex< double > cIij_i(double mult, std::complex< double > x[3], derivativeDirection direction)
file of various types and symbolic constant definitions
virtual ~eshelbySoluEllipticIntegralsSphere()
Destructor.
Definition: esei_Sphere.h:51
Class of the functions returning the Ferers-Dysons elliptic integral values as well as its derivative...
Definition: esei_Sphere.h:45
void give_cdIij(std::complex< double > dJij[13], double mult, double x[3])
double Iij_i(double mult, double norm_x[5], double x[3], derivativeDirection direction)
double Iij_ij(double mult, double norm_x[5], double x[3], derivativeDirection direction_1, derivativeDirection direction_2)
void give_cddIi(double ddJi[27], std::complex< double > dJi[13])
derivativeDirection
Definition: types.h:208
void giveDerivativesOfEllipticIntegrals(Point *point, bool intpoint)
Function gives the values of Ferers-Dyson&#39;s elliptic integral derivatives of the inclusion this->I...
Class eshelbySoluEllipticIntegrals.
3D inclusion record.
Definition: inclusion.h:278
double eshelbyTensCompUniformField(EshelbyTensComponent flag, double nu, double a)
eshelbySoluEllipticIntegralsSphere(const InclusionRecord3D *i)
Constructor.
Definition: esei_Sphere.h:49
Single Point data structure - contribution from Single inclusion.
Definition: matrix.h:133
std::complex< double > cIi_i(double mult, std::complex< double > x[3], derivativeDirection direction)
void giveEllipticIntegrals(double J[13], double lambda, bool intpoint)
Function gives the values of Ferers-Dyson&#39;s elliptic integrals of the inclusion this->I.
Definition: esei_Sphere.cpp:48
double Ii_i(double mult, double norm_x[5], double x[3], derivativeDirection direction)
EshelbyTensComponent
Definition: types.h:221
void give_cdIi(std::complex< double > dJi[13], double mult, double x[3])
void eshelbyTensUniformFieldSphere(double eshTens[12], double nu, double a)
void give_cddIij(double ddJij[81], std::complex< double > dJij[27])
Class of the functions calculating the values of elliptic integrals and its derivatives.
Definition: esei.h:42
void give_dIij(double dJij[27], double mult, double norm_x[5], double x[3])
double getLambda(const double a[3], double x1, double x2, double x3)
Returns lambda for a given point (x1, x2, x3)
void give_ddIi(double ddJi[27], double mult, double norm_x[5], double x[3])
double Ii_ij(double mult, double norm_x[5], double x[3], derivativeDirection direction_1, derivativeDirection direction_2)
void give_dIi(double dJi[13], double mult, double norm_x[5], double x[3])
void give_ddIij(double ddJij[81], double mult, double norm_x[5], double x[3])
void update_cx(std::complex< double > cx[3], derivativeDirection direction)