Reference documentation for deal.II version 9.1.0-pre
polynomials_adini.cc
1 // ---------------------------------------------------------------------
2 //
3 // Copyright (C) 2000 - 2015 by the deal.II authors
4 //
5 // This file is part of the deal.II library.
6 //
7 // The deal.II library is free software; you can use it, redistribute
8 // it, and/or modify it under the terms of the GNU Lesser General
9 // Public License as published by the Free Software Foundation; either
10 // version 2.1 of the License, or (at your option) any later version.
11 // The full text of the license can be found in the file LICENSE.md at
12 // the top level directory of deal.II.
13 //
14 // ---------------------------------------------------------------------
15 
16 
17 #include <deal.II/base/polynomials_adini.h>
18 
19 #define ENTER_COEFFICIENTS( \
20  koefs, z, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) \
21  koefs(0, z) = a0; \
22  koefs(1, z) = a1; \
23  koefs(2, z) = a2; \
24  koefs(3, z) = a3; \
25  koefs(4, z) = a4; \
26  koefs(5, z) = a5; \
27  koefs(6, z) = a6; \
28  koefs(7, z) = a7; \
29  koefs(8, z) = a8; \
30  koefs(9, z) = a9; \
31  koefs(10, z) = a10; \
32  koefs(11, z) = a11;
33 
34 
35 DEAL_II_NAMESPACE_OPEN
36 
37 
39  : coef(12, 12)
40  , dx(12, 12)
41  , dy(12, 12)
42  , dxx(12, 12)
43  , dyy(12, 12)
44  , dxy(12, 12)
45 {
46  // 1 x y xx yy xy 3x 3y xyy xxy 3xy x3y
47  // 0 1 2 3 4 5 6 7 8 9 10 11
48  ENTER_COEFFICIENTS(coef, 0, 1, 0, 0, -3, -3, -1, 2, 2, 3, 3, -2, -2);
49  ENTER_COEFFICIENTS(coef, 1, 0, 1, 0, -2, 0, -1, 1, 0, 0, 2, -1, 0);
50  ENTER_COEFFICIENTS(coef, 2, 0, 0, 1, 0, -2, -1, 0, 1, 2, 0, 0, -1);
51  ENTER_COEFFICIENTS(coef, 3, 0, 0, 0, 3, 0, 1, -2, 0, -3, -3, 2, 2);
52  ENTER_COEFFICIENTS(coef, 4, 0, 0, 0, -1, 0, 0, 1, 0, 0, 1, -1, 0);
53  ENTER_COEFFICIENTS(coef, 5, 0, 0, 0, 0, 0, 1, 0, 0, -2, 0, 0, 1);
54  ENTER_COEFFICIENTS(coef, 6, 0, 0, 0, 0, 3, 1, 0, -2, -3, -3, 2, 2);
55  ENTER_COEFFICIENTS(coef, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, -2, 1, 0);
56  ENTER_COEFFICIENTS(coef, 8, 0, 0, 0, 0, -1, 0, 0, 1, 1, 0, 0, -1);
57  ENTER_COEFFICIENTS(coef, 9, 0, 0, 0, 0, 0, -1, 0, 0, 3, 3, -2, -2);
58  ENTER_COEFFICIENTS(coef, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1, 0);
59  ENTER_COEFFICIENTS(coef, 11, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 1);
60 
61  ENTER_COEFFICIENTS(dx, 0, 0, -6, -1, 6, 3, 6, 0, -2, 0, -6, 0, 0);
62  ENTER_COEFFICIENTS(dx, 1, 1, -4, -1, 3, 0, 4, 0, 0, 0, -3, 0, 0);
63  ENTER_COEFFICIENTS(dx, 2, 0, 0, -1, 0, 2, 0, 0, -1, 0, 0, 0, 0);
64  ENTER_COEFFICIENTS(dx, 3, 0, 6, 1, -6, -3, -6, 0, 2, 0, 6, 0, 0);
65  ENTER_COEFFICIENTS(dx, 4, 0, -2, 0, 3, 0, 2, 0, 0, 0, -3, 0, 0);
66  ENTER_COEFFICIENTS(dx, 5, 0, 0, 1, 0, -2, 0, 0, 1, 0, 0, 0, 0);
67  ENTER_COEFFICIENTS(dx, 6, 0, 0, 1, 0, -3, -6, 0, 2, 0, 6, 0, 0);
68  ENTER_COEFFICIENTS(dx, 7, 0, 0, 1, 0, 0, -4, 0, 0, 0, 3, 0, 0);
69  ENTER_COEFFICIENTS(dx, 8, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0);
70  ENTER_COEFFICIENTS(dx, 9, 0, 0, -1, 0, 3, 6, 0, -2, 0, -6, 0, 0);
71  ENTER_COEFFICIENTS(dx, 10, 0, 0, 0, 0, 0, -2, 0, 0, 0, 3, 0, 0);
72  ENTER_COEFFICIENTS(dx, 11, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0);
73 
74  ENTER_COEFFICIENTS(dy, 0, 0, -1, -6, 3, 6, 6, -2, 0, -6, 0, 0, 0);
75  ENTER_COEFFICIENTS(dy, 1, 0, -1, 0, 2, 0, 0, -1, 0, 0, 0, 0, 0);
76  ENTER_COEFFICIENTS(dy, 2, 1, -1, -4, 0, 3, 4, 0, 0, -3, 0, 0, 0);
77  ENTER_COEFFICIENTS(dy, 3, 0, 1, 0, -3, 0, -6, 2, 0, 6, 0, 0, 0);
78  ENTER_COEFFICIENTS(dy, 4, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0);
79  ENTER_COEFFICIENTS(dy, 5, 0, 1, 0, 0, 0, -4, 0, 0, 3, 0, 0, 0);
80  ENTER_COEFFICIENTS(dy, 6, 0, 1, 6, -3, -6, -6, 2, 0, 6, 0, 0, 0);
81  ENTER_COEFFICIENTS(dy, 7, 0, 1, 0, -2, 0, 0, 1, 0, 0, 0, 0, 0);
82  ENTER_COEFFICIENTS(dy, 8, 0, 0, -2, 0, 3, 2, 0, 0, -3, 0, 0, 0);
83  ENTER_COEFFICIENTS(dy, 9, 0, -1, 0, 3, 0, 6, -2, 0, -6, 0, 0, 0);
84  ENTER_COEFFICIENTS(dy, 10, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0);
85  ENTER_COEFFICIENTS(dy, 11, 0, 0, 0, 0, 0, -2, 0, 0, 3, 0, 0, 0);
86 
87  // 0 1 2 3 4 5 6 7 8 9 10 11
88  ENTER_COEFFICIENTS(dxx, 0, -6, 12, 6, 0, 0, -12, 0, 0, 0, 0, 0, 0);
89  ENTER_COEFFICIENTS(dxx, 1, -4, 6, 4, 0, 0, -6, 0, 0, 0, 0, 0, 0);
90  ENTER_COEFFICIENTS(dxx, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
91  ENTER_COEFFICIENTS(dxx, 3, 6, -12, -6, 0, 0, 12, 0, 0, 0, 0, 0, 0);
92  ENTER_COEFFICIENTS(dxx, 4, -2, 6, 2, 0, 0, -6, 0, 0, 0, 0, 0, 0);
93  ENTER_COEFFICIENTS(dxx, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
94  ENTER_COEFFICIENTS(dxx, 6, 0, 0, -6, 0, 0, 12, 0, 0, 0, 0, 0, 0);
95  ENTER_COEFFICIENTS(dxx, 7, 0, 0, -4, 0, 0, 6, 0, 0, 0, 0, 0, 0);
96  ENTER_COEFFICIENTS(dxx, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
97  ENTER_COEFFICIENTS(dxx, 9, 0, 0, 6, 0, 0, -12, 0, 0, 0, 0, 0, 0);
98  ENTER_COEFFICIENTS(dxx, 10, 0, 0, -2, 0, 0, 6, 0, 0, 0, 0, 0, 0);
99  ENTER_COEFFICIENTS(dxx, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
100 
101  ENTER_COEFFICIENTS(dyy, 0, -6, 6, 12, 0, 0, -12, 0, 0, 0, 0, 0, 0);
102  ENTER_COEFFICIENTS(dyy, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
103  ENTER_COEFFICIENTS(dyy, 2, -4, 4, 6, 0, 0, -6, 0, 0, 0, 0, 0, 0);
104  ENTER_COEFFICIENTS(dyy, 3, 0, -6, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0);
105  ENTER_COEFFICIENTS(dyy, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
106  ENTER_COEFFICIENTS(dyy, 5, 0, -4, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0);
107  ENTER_COEFFICIENTS(dyy, 6, 6, -6, -12, 0, 0, 12, 0, 0, 0, 0, 0, 0);
108  ENTER_COEFFICIENTS(dyy, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
109  ENTER_COEFFICIENTS(dyy, 8, -2, 2, 6, 0, 0, -6, 0, -0, 0, 0, 0, 0);
110  ENTER_COEFFICIENTS(dyy, 9, 0, 6, 0, 0, 0, -12, 0, 0, 0, 0, 0, 0);
111  ENTER_COEFFICIENTS(dyy, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
112  ENTER_COEFFICIENTS(dyy, 11, 0, -2, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0);
113 
114  ENTER_COEFFICIENTS(dxy, 0, -1, 6, 6, -6, -6, 0, 0, 0, 0, 0, 0, 0);
115  ENTER_COEFFICIENTS(dxy, 1, -1, 4, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0);
116  ENTER_COEFFICIENTS(dxy, 2, -1, 0, 4, 0, -3, 0, 0, 0, 0, 0, 0, 0);
117  ENTER_COEFFICIENTS(dxy, 3, 1, -6, -6, 6, 6, 0, 0, 0, 0, 0, 0, 0);
118  ENTER_COEFFICIENTS(dxy, 4, 0, 2, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0);
119  ENTER_COEFFICIENTS(dxy, 5, 1, 0, -4, 0, 3, 0, 0, 0, 0, 0, 0, 0);
120  ENTER_COEFFICIENTS(dxy, 6, 1, -6, -6, 6, 6, 0, 0, 0, 0, 0, 0, 0);
121  ENTER_COEFFICIENTS(dxy, 7, 1, -4, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0);
122  ENTER_COEFFICIENTS(dxy, 8, 0, 0, 2, 0, -3, 0, 0, 0, 0, 0, 0, 0);
123  ENTER_COEFFICIENTS(dxy, 9, -1, 6, 6, -6, -6, 0, 0, 0, 0, 0, 0, 0);
124  ENTER_COEFFICIENTS(dxy, 10, 0, -2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0);
125  ENTER_COEFFICIENTS(dxy, 11, 0, 0, -2, 0, 3, 0, 0, 0, 0, 0, 0, 0);
126 }
127 
128 void
130  std::vector<double> & values,
131  std::vector<Tensor<1, 2>> &grads,
132  std::vector<Tensor<2, 2>> &grad_grads) const
133 {
134  if (values.empty() == false) // do not bother if empty
135  {
136  for (unsigned int i = 0; i < values.size(); ++i)
137  {
138  values[i] = compute_value(i, unit_point);
139  }
140  }
141 
142  if (grads.empty() == false) // do not bother if empty
143  {
144  for (unsigned int i = 0; i < grads.size(); ++i)
145  {
146  grads[i] = compute_grad(i, unit_point);
147  }
148  }
149 
150  if (grad_grads.empty() == false) // do not bother if empty
151  {
152  for (unsigned int i = 0; i < grad_grads.size(); ++i)
153  {
154  grad_grads[i] = compute_grad_grad(i, unit_point);
155  }
156  }
157  return;
158 }
159 
160 double
161 PolynomialsAdini::compute_value(const unsigned int i, const Point<2> &p) const
162 {
163  const double x = p(0);
164  const double y = p(1);
165  return coef(0, i) + coef(1, i) * x + coef(2, i) * y + coef(3, i) * x * x +
166  coef(4, i) * y * y + coef(5, i) * x * y + coef(6, i) * x * x * x +
167  coef(7, i) * y * y * y + coef(8, i) * x * y * y +
168  coef(9, i) * x * x * y + coef(10, i) * x * x * x * y +
169  coef(11, i) * x * y * y * y;
170 }
171 
173 PolynomialsAdini::compute_grad(const unsigned int i, const Point<2> &p) const
174 {
175  const double x = p(0);
176  const double y = p(1);
177  Tensor<1, 2> tensor;
178  tensor[0] = dx(0, i) + dx(1, i) * x + dx(2, i) * y + dx(3, i) * x * x +
179  dx(4, i) * y * y + dx(5, i) * x * y + dx(6, i) * x * x * x +
180  dx(7, i) * y * y * y + dx(8, i) * x * y * y +
181  dx(9, i) * x * x * y + dx(10, i) * x * x * x * y +
182  dx(11, i) * x * y * y * y;
183 
184  tensor[1] = dy(0, i) + dy(1, i) * x + dy(2, i) * y + dy(3, i) * x * x +
185  dy(4, i) * y * y + dy(5, i) * x * y + dy(6, i) * x * x * x +
186  dy(7, i) * y * y * y + dy(8, i) * x * y * y +
187  dy(9, i) * x * x * y + dy(10, i) * x * x * x * y +
188  dy(11, i) * x * y * y * y;
189  return tensor;
190 }
191 
194  const Point<2> & p) const
195 {
196  const double x = p(0);
197  const double y = p(1);
198  Tensor<2, 2> tensor;
199  tensor[0][0] = dxx(0, i) + dxx(1, i) * x + dxx(2, i) * y + dxx(3, i) * x * x +
200  dxx(4, i) * y * y + dxx(5, i) * x * y + dxx(6, i) * x * x * x +
201  dxx(7, i) * y * y * y + dxx(8, i) * x * y * y +
202  dxx(9, i) * x * x * y + dxx(10, i) * x * x * x * y +
203  dxx(11, i) * x * y * y * y;
204  tensor[0][1] = dxy(0, i) + dxy(1, i) * x + dxy(2, i) * y + dxy(3, i) * x * x +
205  dxy(4, i) * y * y + dxy(5, i) * x * y + dxy(6, i) * x * x * x +
206  dxy(7, i) * y * y * y + dxy(8, i) * x * y * y +
207  dxy(9, i) * x * x * y + dxy(10, i) * x * x * x * y +
208  dxy(11, i) * x * y * y * y;
209  tensor[1][0] = tensor[0][1];
210  tensor[1][1] = dyy(0, i) + dyy(1, i) * x + dyy(2, i) * y + dyy(3, i) * x * x +
211  dyy(4, i) * y * y + dyy(5, i) * x * y + dyy(6, i) * x * x * x +
212  dyy(7, i) * y * y * y + dyy(8, i) * x * y * y +
213  dyy(9, i) * x * x * y + dyy(10, i) * x * x * x * y +
214  dyy(11, i) * x * y * y * y;
215  return tensor;
216 }
217 
218 
219 DEAL_II_NAMESPACE_CLOSE
Table< 2, double > dyy
Table< 2, double > dxy
Table< 2, double > coef
Tensor< 2, 2 > compute_grad_grad(const unsigned int i, const Point< 2 > &p) const
double compute_value(const unsigned int i, const Point< 2 > &p) const
Table< 2, double > dxx
Table< 2, double > dx
void compute(const Point< 2 > &unit_point, std::vector< double > &values, std::vector< Tensor< 1, 2 >> &grads, std::vector< Tensor< 2, 2 >> &grad_grads) const
Tensor< 1, 2 > compute_grad(const unsigned int i, const Point< 2 > &p) const
Definition: mpi.h:55
Table< 2, double > dy