84 double a1 = a[0], a2 = a[1], a3 = a[2],
91 std::complex<double> roots[3];
101 lambda = (
MAX(
MAX( real(roots[0]), real(roots[1]) ), real(roots[2]) ) );
106 lambda =
SQR( x1 ) +
SQR( x2 ) +
SQR( x3 ) -
SQR( a[0] );
109 _errorr(
"giveLambda: unknown inclusion shape\n");
126 std::complex<double> lambda;
129 double a1 = a[0], a2 = a[1], a3 = a[2];
130 std::complex<double> x1 = x[0], x2 = x[1], x3 = x[2],
143 lambda = (
CReMAX(
CReMAX( roots[0], roots[1] ), roots[2] ) );
147 lambda =
SQR( x[0] ) +
SQR( x[1] ) +
SQR( x[2] ) -
SQR( a[0] );
150 _errorr(
"giveLambda: unknown inclusion shape\n");
170 double derivative = 0.;
210 _errorr(
"giveLambdaDerivative: invalid derivative direction ");
214 return( derivative );
232 double derivative = 0.;
234 if( direction_1 ==
_x1_ && direction_2 ==
_empty_ ){
237 else if( direction_1 ==
_x1_ && direction_2 ==
_x1_ ){
240 else if( direction_1 ==
_x1_ && direction_2 ==
_x2_ ){
243 else if( direction_1 ==
_x1_ && direction_2 ==
_x3_ ){
246 else if( direction_1 ==
_x2_ && direction_2 ==
_empty_ ){
249 else if( direction_1 ==
_x2_ && direction_2 ==
_x1_ ){
252 else if( direction_1 ==
_x2_ && direction_2 ==
_x2_ ){
255 else if( direction_1 ==
_x2_ && direction_2 ==
_x3_ ){
258 else if( direction_1 ==
_x3_ && direction_2 ==
_empty_ ){
261 else if( direction_1 ==
_x3_ && direction_2 ==
_x1_ ){
264 else if( direction_1 ==
_x3_ && direction_2 ==
_x2_ ){
267 else if( direction_1 ==
_x3_ && direction_2 ==
_x3_ ){
271 _errorr(
"giveLambdaDerivative: invalid derivative direction ");
274 return( derivative );
289 int dir = direction - 1;
291 return( 2. * x[dir] / ( (
SQR( a[dir] ) + lambda ) * (
SQR( x[0] )/
SQR(
SQR( a[0] ) + lambda ) +
292 SQR( x[1] )/
SQR(
SQR( a[1] ) + lambda ) +
293 SQR( x[2] )/
SQR(
SQR( a[2] ) + lambda ) ) ) );
313 double a1 = a[0], a2 = a[1], a3 = a[2], x1 = x[0], x2 = x[1], x3 = x[2], derivative = 0.,
314 var_a = 0, var_x = 0;
331 _errorr(
"giveLambdaFirstDerivative: invalid derivative direction ");
335 derivative = 2. * var_x / ( (
SQR( var_a ) + lambda ) * (
SQR( x1 )/
SQR(
SQR( a1 ) + lambda ) +
338 return( derivative );
354 double ai = a[0], aj = a[1], ak = a[2], xi = x[0], xj = x[1], xk = x[2], derivative = 0., dummy = 0.,
358 double dLai = dLa[0], dLaj = dLa[1], dLak = dLa[2];
373 SWAP( dLaj, dLak, dummy );
374 SWAP( xj, xk, dummy );
375 SWAP( aj, ak, dummy );
383 SWAP( dLai, dLaj, dummy );
384 SWAP( xi, xj, dummy );
385 SWAP( ai, aj, dummy );
389 SWAP( dLai, dLak, dummy );
390 SWAP( xi, xk, dummy );
391 SWAP( ai, ak, dummy );
395 SWAP( dLaj, dLak, dummy );
396 SWAP( xj, xk, dummy );
397 SWAP( aj, ak, dummy );
401 SWAP( dLai, dLak, dummy );
402 SWAP( xi, xk, dummy );
403 SWAP( ai, ak, dummy );
407 SWAP( dLai, dLak, dummy );
408 SWAP( xi, xk, dummy );
409 SWAP( ai, ak, dummy );
412 _errorr(
"giveLambdaSeccondDerivative: invalid derivative direction ");
419 ( -2. * xi * dLaj /
SQR(
SQR( ai ) + lambda )
420 - 2. * xj * dLai /
SQR(
SQR( aj ) + lambda )
421 + 2. *
SQR( xi ) * dLai * dLaj /
CUB(
SQR( ai ) + lambda )
422 + 2. *
SQR( xj ) * dLai * dLaj /
CUB(
SQR( aj ) + lambda )
423 + 2. *
SQR( xk ) * dLai * dLaj /
CUB(
SQR( ak ) + lambda ) )
425 (
SQR( x[0] )/
SQR(
SQR( a[0] ) + lambda ) +
426 SQR( x[1] )/
SQR(
SQR( a[1] ) + lambda ) +
427 SQR( x[2] )/
SQR(
SQR( a[2] ) + lambda ) );
431 ( 2. / (
SQR( ai ) + lambda )
432 - 4. * xi * dLai /
SQR(
SQR( ai ) + lambda )
433 + 2. *
SQR( xi ) *
SQR( dLai ) /
CUB(
SQR( ai ) + lambda )
434 + 2. *
SQR( xj ) *
SQR( dLai ) /
CUB(
SQR( aj ) + lambda )
435 + 2. *
SQR( xk ) *
SQR( dLai ) /
CUB(
SQR( ak ) + lambda ) )
437 (
SQR( x[0] ) /
SQR(
SQR( a[0] ) + lambda ) +
438 SQR( x[1] ) /
SQR(
SQR( a[1] ) + lambda ) +
439 SQR( x[2] ) /
SQR(
SQR( a[2] ) + lambda ) );
442 return( derivative );
Class polynomialRootSolution collects functions calculating the roots of polynomial functions...
std::complex< double > * GetCubicPolyRoots(double a, double b, double c, std::complex< double > *roots)
Function gives the analitical solution of cubic furmula of the real coefficients a, b, c x^3 + ax^2 + bx + c = 0.
double giveLambdaFirstDerivative(const double a[3], const double x[3], double lambda, derivativeDirection direction)
double giveLambdaDerivative(const double a[3], const double x[3], double lambda, derivativeDirection direction)
The header file of usefull macros.
static double giveLambda(const double a[3], const double x[3], InclusionGeometry shape)
eshelbySoluLambda()
Constructor.
~eshelbySoluLambda()
Destructor.
InclusionGeometry
Inclusion shapes' type.
double giveLambdaSeccondDerivative(const double a[3], const double x[3], double lambda, derivativeDirection direction)
std::complex< double > c_dLambda(const double a[3], std::complex< double > x[3], std::complex< double > lambda, derivativeDirection direction)
#define SWAP(a, b, dummy)
Class polynomialRootSolution collects functions calculating the roots of polynomial functions...