Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
QuadPow.h
Go to the documentation of this file.
1/* This file is part of MoDELib, the Mechanics Of Defects Evolution Library.
2 *
3 *
4 * MoDELib is distributed without any warranty under the
5 * GNU General Public License (GPL) v2 <http://www.gnu.org/licenses/>.
6 */
7
8
9#ifndef model_QUADPOW_H_
10#define model_QUADPOW_H_
11
12#include <assert.h>
13#include <math.h>
14#include <float.h>
15#include <Eigen/Dense>
16
17
18
19namespace model
20{
21
22 template<short unsigned int pOrder, size_t qOrder, template<short unsigned int,size_t> class QuadratureRule>
23 class QuadPow
24 {
25
26 /**********************************************************************/
27 static Eigen::Matrix<double,qOrder,pOrder+1> uPowFill()
28 {/*/returns a matrix M, where M(i,j) is the j-th power of the i-th
29 * abscissa: M(i,j)=a(i)^j.
30 */
31 const Eigen::Matrix<double,1,qOrder> abscissas=QuadratureRule<1,qOrder>::abcsissasAndWeights().template block<1,qOrder>(0,0);
32
33 if ( abscissas.squaredNorm() < FLT_EPSILON)
34 {
35 std::cout<<"norm of quadrature="<<abscissas.squaredNorm()<<std::endl;
36 assert(0);
37 }
38
39
40
41 Eigen::Matrix<double,qOrder,pOrder+1> temp;
42
43 for (size_t i=0; i<qOrder; ++i)
44 {
45 for (size_t j=0; j<pOrder+1; ++j)
46 {
47 temp(i,j)=std::pow(abscissas(i),j);
48 }
49 }
50
51// std::cout<< "Computing powers of abscissas:"<<std::endl;
52// std::cout<<temp<<std::endl;
53
54
55 return temp;
56 }
57
58 /**********************************************************************/
59 static Eigen::Matrix<double,qOrder,pOrder> duPowFill()
60 {/*/returns a matrix M, where M(i,j) is the first derivative of j-th power
61 * of the i-the abscissa: M(i,j)=j*a(i)^(j-1).
62 */
63
64 const Eigen::Matrix<double,1,qOrder> abscissas=QuadratureRule<1,qOrder>::abcsissasAndWeights().template block<1,qOrder>(0,0);
65
66 Eigen::Matrix<double,qOrder,pOrder> temp;
67
68 for (size_t i=0; i<qOrder; ++i)
69 {
70 for (size_t j=1; j<pOrder+1; ++j)
71 {
72 temp(i,j-1)=j*std::pow(abscissas(i),j-1);
73 }
74 }
75// std::cout<< "Computing 1-st derivative of powers of abscissas:"<<std::endl;
76// std::cout<<temp<<std::endl;
77 return temp;
78 }
79
80 /**********************************************************************/
81 static Eigen::Matrix<double,qOrder,pOrder-1> dduPowFill()
82 {/*/returns a matrix M, where M(i,j) is the second derivative of j-th power
83 * of the i-the abscissa: M(i,j)=j*(j-1)*a(i)^(j-2).
84 */
85
86 const Eigen::Matrix<double,1,qOrder> abscissas=QuadratureRule<1,qOrder>::abcsissasAndWeights().template block<1,qOrder>(0,0);
87
88 Eigen::Matrix<double,qOrder,pOrder-1> temp;
89
90 for (size_t i=0; i<qOrder; ++i)
91 {
92 for (size_t j=2; j<pOrder+1; ++j)
93 {
94 temp(i,j-2)=j*(j-1)*std::pow(abscissas(i),j-2);
95 }
96 }
97// std::cout<< "Computing 2-nd derivative of powers of abscissas:"<<std::endl;
98// std::cout<<temp<<std::endl;
99 return temp;
100 }
101
102 public:
103
104 static const Eigen::Matrix<double,Eigen::Dynamic,pOrder+1> uPow;
105 static const Eigen::Matrix<double,Eigen::Dynamic,pOrder > duPow;
106 static const Eigen::Matrix<double,Eigen::Dynamic,pOrder-1> dduPow;
107
108 };
109
110 // Declare static data members
111 template<short unsigned int pOrder, size_t qOrder, template <short unsigned int, size_t> class QuadratureRule>
112 const Eigen::Matrix<double,Eigen::Dynamic,pOrder+1> QuadPow<pOrder,qOrder,QuadratureRule>::uPow=QuadPow<pOrder,qOrder,QuadratureRule>::uPowFill();
113
114 template<short unsigned int pOrder, size_t qOrder, template <short unsigned int, size_t> class QuadratureRule>
115 const Eigen::Matrix<double,Eigen::Dynamic,pOrder > QuadPow<pOrder,qOrder,QuadratureRule>::duPow=QuadPow<pOrder,qOrder,QuadratureRule>::duPowFill();
116
117 template<short unsigned int pOrder, size_t qOrder, template <short unsigned int, size_t> class QuadratureRule>
118 const Eigen::Matrix<double,Eigen::Dynamic,pOrder-1> QuadPow<pOrder,qOrder,QuadratureRule>::dduPow=QuadPow<pOrder,qOrder,QuadratureRule>::dduPowFill();
119
120} // namespace model
121#endif
static const Eigen::Matrix< double, Eigen::Dynamic, pOrder > duPow
Definition QuadPow.h:105
static const Eigen::Matrix< double, Eigen::Dynamic, pOrder-1 > dduPow
Definition QuadPow.h:106
static const Eigen::Matrix< double, Eigen::Dynamic, pOrder+1 > uPow
Definition QuadPow.h:104
const Eigen::MatrixXd Quadrature< dim, qOrder, QuadratureRule >::abscissas
The static const member data abscissas is initialized only once when Quadrature<1,...
Definition Quadrature.h:234
int j
int i
vertex temp