#include <deal.II/base/exceptions.h>
#include <deal.II/lac/vector.h>
#include <gsl/gsl_integration.h>
#include <gsl/gsl_sf_gamma.h>
#include <cmath>
#include <cstdlib>
#include <numeric>
#include <stdexcept>
#include <string>
#include <utility>
#include <vector>
Go to the source code of this file.
|
template<int dim> |
Tensor< 4, dim > | get_tensor_operator_G (const SymmetricTensor< 2, dim > &Ma, const SymmetricTensor< 2, dim > &Mb) |
|
template<int dim> |
Tensor< 4, dim > | get_tensor_operator_F_right (const SymmetricTensor< 2, dim > &Ma, const SymmetricTensor< 2, dim > &Mb, const SymmetricTensor< 2, dim > &Mc, const SymmetricTensor< 2, dim > &T) |
|
template<int dim> |
Tensor< 4, dim > | get_tensor_operator_F_left (const SymmetricTensor< 2, dim > &Ma, const SymmetricTensor< 2, dim > &Mb, const SymmetricTensor< 2, dim > &Mc, const SymmetricTensor< 2, dim > &T) |
|
template<int dim> |
SymmetricTensor< 4, dim > | outer_product_sym (const SymmetricTensor< 2, dim > &A, const SymmetricTensor< 2, dim > &B) |
|
template<int dim> |
SymmetricTensor< 4, dim > | outer_product_sym (const SymmetricTensor< 2, dim > &A) |
|
template<int dim> |
SymmetricTensor< 2, dim > | outer_product_sym (const Tensor< 1, dim > &A) |
|
template<int dim> |
bool | symmetry_check (Tensor< 2, dim > &tensor) |
|
template<int dim> |
bool | symmetry_check (const Tensor< 4, dim > &temp) |
|
template<int dim> |
SymmetricTensor< 4, dim > | symmetrize (const Tensor< 4, dim > &tensor) |
|
#define outer_product_sym_H |
template<int dim>
Tensor<4,dim> get_tensor_operator_F_left |
( |
const SymmetricTensor< 2, dim > & |
Ma, |
|
|
const SymmetricTensor< 2, dim > & |
Mb, |
|
|
const SymmetricTensor< 2, dim > & |
Mc, |
|
|
const SymmetricTensor< 2, dim > & |
T |
|
) |
| |
Referenced by ln_space< dim >::post_ln().
85 Tensor<2,dim> temp_tensor = contract<1,0>((Tensor<2,dim>)T, (Tensor<2,dim>)Mb);
86 Tensor<2,dim> MaTMb = contract<1,0>((Tensor<2,dim>)Ma,temp_tensor);
88 for(
unsigned int i=0; i<dim; ++i)
89 for(
unsigned int j=0; j<dim; ++j)
90 for(
unsigned int k=0; k<dim; ++k)
91 for(
unsigned int l=k; l<dim; ++l)
93 double tmp_scalar = MaTMb[i][k] * Mc[j][l] + MaTMb[i][l] * Mc[j][k];
94 tmp[i][j][k][l] = tmp_scalar;
95 tmp[i][j][l][k] = tmp_scalar;
template<int dim>
Tensor<4,dim> get_tensor_operator_F_right |
( |
const SymmetricTensor< 2, dim > & |
Ma, |
|
|
const SymmetricTensor< 2, dim > & |
Mb, |
|
|
const SymmetricTensor< 2, dim > & |
Mc, |
|
|
const SymmetricTensor< 2, dim > & |
T |
|
) |
| |
Referenced by ln_space< dim >::post_ln().
60 Tensor<2,dim> temp_tensor = contract<1,0>((Tensor<2,dim>)T, (Tensor<2,dim>)Mc);
61 Tensor<2,dim> MbTMc = contract<1,0>((Tensor<2,dim>)Mb,temp_tensor);
63 for(
unsigned int i=0; i<dim; ++i)
64 for(
unsigned int j=0; j<dim; ++j)
65 for(
unsigned int k=0; k<dim; ++k)
66 for(
unsigned int l=k; l<dim; ++l)
68 double tmp_scalar = Ma[i][k] * MbTMc[j][l] + Ma[i][l] * MbTMc[j][k];
69 tmp[i][j][k][l] = tmp_scalar;
70 tmp[i][j][l][k] = tmp_scalar;
template<int dim>
Tensor<4,dim> get_tensor_operator_G |
( |
const SymmetricTensor< 2, dim > & |
Ma, |
|
|
const SymmetricTensor< 2, dim > & |
Mb |
|
) |
| |
Referenced by ln_space< dim >::post_ln().
37 for(
unsigned int i=0; i<dim; ++i)
38 for(
unsigned int j=0; j<dim; ++j)
39 for(
unsigned int k=0; k<dim; ++k)
40 for(
unsigned int l=k; l<dim; ++l)
42 double tmp_scalar = Ma[i][k] * Mb[j][l] + Ma[i][l] * Mb[j][k];
43 tmp[i][j][k][l] = tmp_scalar;
44 tmp[i][j][l][k] = tmp_scalar;
template<int dim>
SymmetricTensor<4,dim> outer_product_sym |
( |
const SymmetricTensor< 2, dim > & |
A, |
|
|
const SymmetricTensor< 2, dim > & |
B |
|
) |
| |
template<int dim>
SymmetricTensor<4,dim> outer_product_sym |
( |
const SymmetricTensor< 2, dim > & |
A | ) |
|
129 SymmetricTensor<4,dim> D;
132 for (
unsigned int i=0; i<dim; ++i )
133 for (
unsigned int j=i; j<dim; ++j )
134 for (
unsigned int k=i; k<dim; ++k )
135 for (
unsigned int l=k; l<dim; ++l )
137 double tmp = A[i][j] * A[k][l];
template<int dim>
SymmetricTensor<2,dim> outer_product_sym |
( |
const Tensor< 1, dim > & |
A | ) |
|
146 SymmetricTensor<2,dim> D;
149 for (
unsigned int i=0; i<dim; ++i )
150 for (
unsigned int j=i; j<dim; ++j )
151 D[i][j] = A[i] * A[j];
template<int dim>
SymmetricTensor<4,dim> symmetrize |
( |
const Tensor< 4, dim > & |
tensor | ) |
|
References symmetry_check().
Referenced by ln_space< dim >::post_ln(), and ln_space< dim >::pre_ln().
210 SymmetricTensor<4,dim> sym_tensor;
211 Assert(
symmetry_check(tensor), ExcMessage(
"Tensor to symmetrize is not symmetric!"));
213 Tensor<4,dim> temp_tensor;
214 for(
unsigned int i=0; i<dim; ++i)
215 for(
unsigned int j=0; j<dim; ++j)
216 for(
unsigned int k=0; k<dim; ++k)
217 for(
unsigned int l=0; l<dim; ++l)
218 temp_tensor[i][j][k][l] = (tensor[i][j][k][l]+tensor[j][i][k][l]+tensor[i][j][l][k]) / 3.0;
220 for(
unsigned int i=0; i<dim; ++i)
221 for(
unsigned int j=i; j<dim; ++j)
222 for(
unsigned int k=0; k<dim; ++k)
223 for(
unsigned int l=k; l<dim; ++l)
224 sym_tensor[i][j][k][l] = temp_tensor[i][j][k][l];
bool symmetry_check(Tensor< 2, dim > &tensor)
Definition: functions.h:163
template<int dim>
bool symmetry_check |
( |
Tensor< 2, dim > & |
tensor | ) |
|
Referenced by ln_space< dim >::post_ln(), and symmetrize().
165 for (
unsigned int i=0; i<dim; i++ )
166 for (
unsigned int j=0; j<dim; j++ )
167 if ( i!=j && ( std::abs(tensor[i][j] - tensor[j][i])>1e-12 ) )
template<int dim>
bool symmetry_check |
( |
const Tensor< 4, dim > & |
temp | ) |
|
174 for(
unsigned int i=0; i<dim; ++i){
175 for(
unsigned int j=0; j<dim; ++j){
176 for(
unsigned int k=0; k<dim; ++k){
177 for(
unsigned int l=0; l<dim; ++l){
179 if( ( fabs(temp[i][j][k][l] - temp[j][i][k][l]) > 1e-6 )
181 ( fabs(temp[i][j][k][l] - temp[i][j][l][k]) > 1e-6 ) )
184 if( (fabs(fabs(temp[i][j][k][l] - temp[j][i][k][l])/temp[j][i][k][l])> 1e-8)
186 (fabs(fabs(temp[i][j][k][l] - temp[i][j][l][k])/temp[i][j][l][k]) >1e-8) )
189 deallog<<
"Abs not matching: "<<fabs(temp[i][j][k][l] - temp[j][i][k][l])
190 <<
" | Rel not matching: "<<fabs(temp[i][j][k][l] - temp[j][i][k][l])/temp[j][i][k][l]
191 <<
" | Abs not matching: "<<fabs(temp[i][j][k][l] - temp[i][j][l][k])
192 <<
" | Rel not matching: "<<fabs(temp[i][j][k][l] - temp[i][j][l][k])/temp[i][j][l][k]
193 <<
" | value ijkl: "<< std::scientific << temp[i][j][k][l]
194 <<
" | value jikl: "<< std::scientific << temp[j][i][k][l]
195 <<
" | value ijlk: "<< std::scientific << temp[i][j][l][k]