muMECH  1.0
esei_Ellipsoid.h
Go to the documentation of this file.
1 //********************************************************************************************************
2 // code: ### ### ##### #### ## ##
3 // ## ## ######## ## ## ## ## ##
4 // ## ## ## ## ## ### ## ######
5 // ## ## ## ## ## ## ## ## ##
6 // ##### ## ## ##### #### ## ##
7 // ##
8 //
9 // name: eshelbySoluEllipticIntegralsEllipsoid.h
10 // author(s): Jan Novak
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_ELLIPSOID_H
32 #define MUMECH_ESHELBY_SOLU_ELLIPTIC_INTEGRALS_ELLIPSOID_H
33 
34 #include "types.h"
35 #include "esei.h"
36 #include <complex>
37 
38 
39 namespace mumech {
40 
46 {
47  public:
52 
58  void giveEllipticIntegrals (double J[13], double lambda, bool intpoint);
59 
64  void giveDerivativesOfEllipticIntegrals (Point *point, bool intpoint);
65 
66 
67 #ifndef DEBUG
68  protected:
69 #endif
70 
71  //******************************************************************************************************
72  // Function gives the first or seccond derivative of a component of elliptical integrals
73  double giveEllipticIntegralDerivative (const double a[3], const double x[3], aLambda aLa,
74  ellipticIntegralComponent component,
75  derivativeDirection direction_1,
76  derivativeDirection direction_2 );
77 
78  //******************************************************************************************************
79  //Function gives the solution of the integral I
80  double eI( double a[3], double k, double Theta, double mult );
81  //******************************************************************************************************
82  //Function gives the solution of the integral I_1
83  double I1(const double a[3], double k, double Theta, double mult );
84  //******************************************************************************************************
85  //Function gives the solution of the integral I_2
86  double I2( double I1, double I3, double lambda, double mult, double Dla, bool intpoint);
87  //******************************************************************************************************
88  //Function gives the solution of the integral I_3
89  double I3(const double a[3], double k, double Theta, double lambda, double mult, bool intpoint);
90  //******************************************************************************************************
91  //Function gives the solution of the integral I_11
92  double I11(const double a[3], double I12, double I13, double lambda, double mult, double Dla, bool intpoint);
93  //******************************************************************************************************
94  //Function gives the solution of the integral I_12
95  double I12(const double a[3], double I1, double I2 );
96  //******************************************************************************************************
97  //Function gives the solution of the integral I_13
98  double I13(const double a[3], double I1, double I3 );
99  //******************************************************************************************************
100  //Function gives the solution of the integral I_22
101  double I22(const double a[3], double I21, double I23, double lambda, double mult, double Dla, bool intpoint );
102  //******************************************************************************************************
103  //Function gives the solution of the integral I_23
104  double I23(const double a[3], double I2, double I3 );
105  //******************************************************************************************************
106  //Function gives the solution of the integral I_33
107  double I33(const double a[3], double I32, double I31, double lambda, double mult, double Dla, bool intpoint);
108 
109 
110  //******************************************************************************************************
111  //Function gives the values of all elliptic Ferers-Dysons integrals
112  void give_Ii_and_Iij( double J[13], const double sort_a[3], double lambda );
113 
114  //******************************************************************************************************
115  //Function gives the first derivative of the Elliptic integral
116  double giveEllipticIntegralFirstDerivative(const double a[3], const double x[3], aLambda aLa,
117  ellipticIntegralComponent component,
118  derivativeDirection direction );
119 
120  //******************************************************************************************************
121  //Function gives the seccond derivative of the Elliptic integral
122  double giveEllipticIntegralSeccondDerivative(const double a[3], const double x[3], aLambda aLa,
123  ellipticIntegralComponent component,
124  derivativeDirection direction_1,
125  derivativeDirection direction_2 );
126 
127  //******************************************************************************************************
128  //Function gives the first derivative I,p of Elliptic integral I according 'p' direction
130 
131  //******************************************************************************************************
132  //Function gives the first derivative I_i,p of Elliptic integral I_i according 'p' direction
133  double give_Iip_Derivative(const double a[3], aLambda aLa,
135  //******************************************************************************************************
136  //Function gives the first derivative I_ij,p of Elliptic integral I_ij according 'p' direction
137  double give_Iijp_Derivative(const double a[3], aLambda aLa,
139  //******************************************************************************************************
140  //Function gives the seccond derivative of the I_ij integral by 'p' and 'q' directions
141  double give_Iijpq_Derivative(const double a[3], aLambda aLa, ellipticIntegralComponent component,
143  //******************************************************************************************************
144  //Function gives the seccond derivative of the I_i integral by 'p' and 'q' directions
145  double give_Iipq_Derivative(const double a[3], aLambda aLa, ellipticIntegralComponent component,
147  //******************************************************************************************************
148  //Function gives all first derivatives of Ferers-Dysons' integrals Ii
149  void give_dIi( double dJi[9], const double sort_a[3], const double x[3], aLambda aLa );
150  //******************************************************************************************************
151  //Function gives all first derivatives of Ferers-Dysons' integrals Iij
152  void give_dIij( double dJij[27], const double sort_a[3], const double x[3], aLambda aLa );
153  //******************************************************************************************************
154  //Function gives all second derivatives of Ferers-Dysons' integrals Ii
155  void give_ddIi( double ddJi[27], const double sort_a[3], const double x[3], aLambda aLa );
156  //******************************************************************************************************
157  //Function gives all second derivatives of Ferers-Dysons' integrals Iij
158  void give_ddIij( double ddJi[27], const double sort_a[3], const double x[3], aLambda aLa );
159  //******************************************************************************************************
160 
161  //Complex numerical derivatives of Ferers-Dysons integrals:
162  //---------------------------------------------------------
163 
164  //******************************************************************************************************
165  //Function gives the first complex derivative of Ii_i in 'i' direction
166  std::complex<double> cIi_i(const double a[3], std::complex<double> la, std::complex<double> Dla,
167  std::complex<double> cdla_i, double mult, ellipticIntegralComponent component );
168  //******************************************************************************************************
169  //Function gives the first complex derivative of Iij_i in 'i' direction
170  std::complex<double> cIij_i(const double a[3], std::complex<double> la, std::complex<double> Dla,
171  std::complex<double> cdla_i, double mult, ellipticIntegralComponent component );
172  //******************************************************************************************************
173 
174  //******************************************************************************************************
175 
176  //******************************************************************************************************
177  //Function gives all first derivatives of Ferers-Dysons' integrals Ii by using the complex
178  //differentiation
179  // void give_cdIi( double RedJi[9], double ImdJi[27], const double sort_a[3], const double x[3] );
180  void give_cdIi( double RedJi[9], double ImdJi[27], const double sort_a[3], cLambda CLa );
181  //******************************************************************************************************
182  //Function gives all first derivatives of Ferers-Dysons' integrals Iij by using the complex
183  //differentiation
184  // void give_cdIij( complex double dJij[27], const double sort_a[3], const double x[3] );
185  void give_cdIij( double RedJij[27], double ImdJij[81], const double sort_a[3], cLambda CLa );
186  //******************************************************************************************************
187  //Function gives all second derivatives of Ferers-Dysons' integrals Ii by using
188  //the complex differentiation
189  void give_cddIi( double ddJi[27], double ImdJi[27] );
190  //******************************************************************************************************
191  //Function gives all second derivatives of Ferers-Dysons' integrals Iij by using
192  //the complex differentiation
193  void give_cddIij( double ddJij[81], double ImdJij[81] );
194  //******************************************************************************************************
195  //Function updates vectors cx according the derivative direction. Function is just a copy of the same
196  //method from the "eshelbySoluEllipticIntegralsSphere" class
197  // void update_cx( complex double cx[3], derivativeDirection direction );
198  //******************************************************************************************************
199 
200  //Numerical derivatives of Ferers-Dysons integrals:
201  //---------------------------------------------------------
202 
203  //******************************************************************************************************
204  //Function gives the first numerical derivative of Ii_i in 'i' direction
205  double nIi_i(const double a[3], double la, double Dla, double dla_i, double mult,
206  ellipticIntegralComponent component );
207  //******************************************************************************************************
208  //Function gives the first numerical derivative of Iij_i in 'i' direction
209  double nIij_i(const double a[3], double la, double Dla, double dla_i, double mult,
210  ellipticIntegralComponent component );
211  //******************************************************************************************************
212  //Function gives all first derivatives of Ferers-Dysons' integrals Ii by using
213  //numerical differentiation
214  void give_ndIi( double dJi[9], double ddJih[27], const double sort_a[3], nLambda nLa );
215  //******************************************************************************************************
216 
217  //******************************************************************************************************
218 
219  //******************************************************************************************************
220 
221  double getLambda(const double a[3], double x1, double x2, double x3);
222 };
223 
224 } // end of namespace mumech
225 
226 #endif
227 
228 /*end of file*/
double eI(double a[3], double k, double Theta, double mult)
void give_ndIi(double dJi[9], double ddJih[27], const double sort_a[3], nLambda nLa)
double I33(const double a[3], double I32, double I31, double lambda, double mult, double Dla, bool intpoint)
file of various types and symbolic constant definitions
void give_dIi(double dJi[9], const double sort_a[3], const double x[3], aLambda aLa)
double I2(double I1, double I3, double lambda, double mult, double Dla, bool intpoint)
double give_Ip_Derivative(aLambda aLa, derivativeDirection p)
double I12(const double a[3], double I1, double I2)
double give_Iip_Derivative(const double a[3], aLambda aLa, ellipticIntegralComponent component, derivativeDirection p)
double I3(const double a[3], double k, double Theta, double lambda, double mult, bool intpoint)
std::complex< double > cIij_i(const double a[3], std::complex< double > la, std::complex< double > Dla, std::complex< double > cdla_i, double mult, ellipticIntegralComponent component)
virtual ~eshelbySoluEllipticIntegralsEllipsoid()
Destructor.
double give_Iijp_Derivative(const double a[3], aLambda aLa, ellipticIntegralComponent component, derivativeDirection p)
derivativeDirection
Definition: types.h:208
double nIi_i(const double a[3], double la, double Dla, double dla_i, double mult, ellipticIntegralComponent component)
void give_cddIi(double ddJi[27], double ImdJi[27])
ellipticIntegralComponent
Definition: types.h:198
Class eshelbySoluEllipticIntegrals.
3D inclusion record.
Definition: inclusion.h:278
double I1(const double a[3], double k, double Theta, double mult)
Single Point data structure - contribution from Single inclusion.
Definition: matrix.h:133
void give_cdIi(double RedJi[9], double ImdJi[27], const double sort_a[3], cLambda CLa)
double I11(const double a[3], double I12, double I13, double lambda, double mult, double Dla, bool intpoint)
double I23(const double a[3], double I2, double I3)
double giveEllipticIntegralFirstDerivative(const double a[3], const double x[3], aLambda aLa, ellipticIntegralComponent component, derivativeDirection direction)
void give_ddIi(double ddJi[27], const double sort_a[3], const double x[3], aLambda aLa)
double giveEllipticIntegralSeccondDerivative(const double a[3], const double x[3], aLambda aLa, ellipticIntegralComponent component, derivativeDirection direction_1, derivativeDirection direction_2)
void giveDerivativesOfEllipticIntegrals(Point *point, bool intpoint)
Function gives the values of Ferers-Dyson&#39;s elliptic integral derivatives of the inclusion this->I...
double I22(const double a[3], double I21, double I23, double lambda, double mult, double Dla, bool intpoint)
Class of the functions calculating the values of elliptic integrals and its derivatives.
Definition: esei.h:42
void give_cddIij(double ddJij[81], double ImdJij[81])
double giveEllipticIntegralDerivative(const double a[3], const double x[3], aLambda aLa, ellipticIntegralComponent component, derivativeDirection direction_1, derivativeDirection direction_2)
void give_cdIij(double RedJij[27], double ImdJij[81], const double sort_a[3], cLambda CLa)
void give_ddIij(double ddJi[27], const double sort_a[3], const double x[3], aLambda aLa)
double getLambda(const double a[3], double x1, double x2, double x3)
Returns lambda for a given point (x1, x2, x3)
std::complex< double > cIi_i(const double a[3], std::complex< double > la, std::complex< double > Dla, std::complex< double > cdla_i, double mult, ellipticIntegralComponent component)
void give_Ii_and_Iij(double J[13], const double sort_a[3], double lambda)
double give_Iijpq_Derivative(const double a[3], aLambda aLa, ellipticIntegralComponent component, derivativeDirection p, derivativeDirection q)
double give_Iipq_Derivative(const double a[3], aLambda aLa, ellipticIntegralComponent component, derivativeDirection p, derivativeDirection q)
Class of the functions calculating the values of elliptic integrals and its derivatives of general el...
double I13(const double a[3], double I1, double I3)
double nIij_i(const double a[3], double la, double Dla, double dla_i, double mult, ellipticIntegralComponent component)
void give_dIij(double dJij[27], const double sort_a[3], const double x[3], aLambda aLa)
eshelbySoluEllipticIntegralsEllipsoid(const InclusionRecord3D *i)
Constructor.
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.