Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
include
Quadrature
UniformOpen.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
#ifndef model_UNIFORMOPEN_H_
9
#define model_UNIFORMOPEN_H_
10
11
#include <cmath>
12
#include <assert.h>
13
#include <Eigen/Dense>
14
15
namespace
model
16
{
17
18
/**************************************************/
19
/* UniformOpen: general case */
20
/**************************************************/
24
template
<
short
unsigned
int
dim,
size_t
qOrder>
25
struct
UniformOpen
26
{
27
UniformOpen
()
28
{
29
assert(0 &&
"UniformOpen: dimensionality not implemented."
);
30
}
31
32
};
33
34
35
/**************************************************/
36
/* UniformOpen: template specialization dim=1 */
37
/**************************************************/
43
template
<
size_t
qOrder>
44
struct
UniformOpen
<1,qOrder>
45
{
46
static
Eigen::Matrix<double,2,qOrder>
abcsissasAndWeights
()
47
{
48
Eigen::Matrix<double,2,qOrder> U;
49
for
(
size_t
k
=0;
k
<qOrder;++
k
)
50
{
51
U(0,
k
)= 0.5/qOrder+
k
*1.0/qOrder;
//1.0 forces double conversion
52
U(1,
k
)= 1.0/qOrder;
53
}
54
return
U;
55
}
56
57
};
58
59
/**************************************************/
60
/* UniformOpen: template specialization dim=2 */
61
/**************************************************/
66
template
<
size_t
qOrder>
67
struct
UniformOpen
<2,qOrder>
68
{
69
// static_assert(0,"THIS CLASS IS NOT COMPATIBLE WITH QUADRATURE.H YET, BECAUSE THE RETURNED MATRIX HAS qOrder^2 COLS, INSTEAD OF qOrder");
70
71
static
Eigen::Matrix<double,3,qOrder>
abcsissasAndWeights
()
72
{
73
std::cout<<
"UniformOpen<2,"
<<qOrder<<
"> computing abcsissas and weights"
<<std::endl;
74
75
const
double
nd=sqrt(qOrder);
76
const
size_t
N
=round(nd);
77
assert(nd==
N
&&
"qOrder must be a perfect sqaure (e.g. 1,4,9,16...)"
);
78
79
const
double
w
=0.5/qOrder;
// constant weight
80
81
Eigen::Matrix<double,3,qOrder> U;
82
size_t
m
=0;
83
// Triangles pointing up
84
for
(
size_t
i
=0;
i
<
N
;++
i
)
85
{
86
for
(
size_t
j
=0;
j
<
N
-
i
;++
j
)
87
{
88
U(0,
m
)= 1.0/
N
*(
i
+1.0/3.0);
//1.0 forces double conversion
89
U(1,
m
)= 1.0/
N
*(
j
+1.0/3.0);
//1.0 forces double conversion
90
U(2,
m
)=
w
;
91
m
++;
92
}
93
}
94
95
// Triangles pointing down
96
for
(
size_t
i
=0;
i
<
N
-1;++
i
)
97
{
98
for
(
size_t
j
=0;
j
<
N
-1-
i
;++
j
)
99
{
100
U(0,
m
)= 1.0/
N
*(
i
+2.0/3.0);
//1.0 forces double conversion
101
U(1,
m
)= 1.0/
N
*(
j
+2.0/3.0);
//1.0 forces double conversion
102
U(2,
m
)=
w
;
103
m
++;
104
}
105
}
106
107
assert(
m
==qOrder);
108
109
// std::cout<<U.transpose()<<std::endl;
110
111
return
U;
112
}
113
114
115
116
};
117
118
}
// namespace model
119
#endif
120
model
Definition
DD_converter.dox:2
model::UniformOpen< 1, qOrder >::abcsissasAndWeights
static Eigen::Matrix< double, 2, qOrder > abcsissasAndWeights()
Definition
UniformOpen.h:46
model::UniformOpen< 2, qOrder >::abcsissasAndWeights
static Eigen::Matrix< double, 3, qOrder > abcsissasAndWeights()
Definition
UniformOpen.h:71
model::UniformOpen::UniformOpen
UniformOpen()
Definition
UniformOpen.h:27
N
N
Definition
testStraightExp.m:9
j
int j
Definition
triangle.cpp:3300
w
REAL w[16]
Definition
triangle.cpp:6024
k
int k
Definition
triangle.cpp:3300
i
int i
Definition
triangle.cpp:3300
m
void t struct mesh * m
Definition
triangle.cpp:3669
Generated by
1.15.0