https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Functions
CylindricalDuo.C File Reference

Go to the source code of this file.

Functions

 TEST (FunctionalExpansionsTest, zernikeConstructor)
 
 TEST (FunctionalExpansionsTest, zernikeSeriesEvaluationXY)
 
 TEST (FunctionalExpansionsTest, zernikeSeriesEvaluationXZ)
 
 TEST (FunctionalExpansionsTest, zernikeSeriesEvaluationYZ)
 
 TEST (FunctionalExpansionsTest, zernikeSeriesSqrtMuEvaluation)
 
 TEST (FunctionalExpansionsTest, zernikeSeriesStandardEvaluation)
 
 TEST (FunctionalExpansionsTest, cylindricalDuoConstructorAxialX)
 
 TEST (FunctionalExpansionsTest, cylindricalDuoConstructorAxialY)
 
 TEST (FunctionalExpansionsTest, cylindricalDuoConstructorAxialZ)
 
 TEST (FunctionalExpansionsTest, cylindricalDuoEvaluator)
 
 TEST (FunctionalExpansionsTest, functionalBasisInterfaceCylindrical)
 

Function Documentation

◆ TEST() [1/11]

TEST ( FunctionalExpansionsTest  ,
cylindricalDuoConstructorAxialX   
)

Definition at line 221 of file CylindricalDuo.C.

222{
223 const std::vector<MooseEnum> domains = {FunctionalBasisInterface::_domain_options = "x",
226 const std::vector<std::size_t> orders = {5, 18};
227 const std::vector<MooseEnum> series = {single_series_types_1D = "Legendre",
228 single_series_types_2D = "Zernike"};
229 expansion_type = "standard";
230 generation_type = "orthonormal";
231
232 CylindricalDuo cylindrical(domains, orders, series, name, expansion_type, generation_type);
233 EXPECT_EQ(cylindrical.getNumberOfTerms(),
234 (orders[0] + 1) * ((orders[1] + 1) * (orders[1] + 2)) / 2);
235}
MooseEnum expansion_type
const std::string name
Definition Setup.h:21
MooseEnum single_series_types_2D
MooseEnum generation_type
MooseEnum single_series_types_1D
This class constructs a functional expansion in cylindrical space using a 1D series for the axial dir...
static MooseEnum _domain_options
An enumeration of the domains available to each functional series.

◆ TEST() [2/11]

TEST ( FunctionalExpansionsTest  ,
cylindricalDuoConstructorAxialY   
)

Definition at line 237 of file CylindricalDuo.C.

238{
239 const std::vector<MooseEnum> domains = {FunctionalBasisInterface::_domain_options = "y",
242 const std::vector<std::size_t> orders = {23, 8};
243 const std::vector<MooseEnum> series = {single_series_types_1D = "Legendre",
244 single_series_types_2D = "Zernike"};
245 expansion_type = "standard";
246 generation_type = "orthonormal";
247
248 CylindricalDuo cylindrical(domains, orders, series, name, expansion_type, generation_type);
249 EXPECT_EQ(cylindrical.getNumberOfTerms(),
250 (orders[0] + 1) * ((orders[1] + 1) * (orders[1] + 2)) / 2);
251}

◆ TEST() [3/11]

TEST ( FunctionalExpansionsTest  ,
cylindricalDuoConstructorAxialZ   
)

Definition at line 253 of file CylindricalDuo.C.

254{
255 const std::vector<MooseEnum> domains = {FunctionalBasisInterface::_domain_options = "z",
258 const std::vector<std::size_t> orders = {21, 23};
259 const std::vector<MooseEnum> series = {single_series_types_1D = "Legendre",
260 single_series_types_2D = "Zernike"};
261 expansion_type = "standard";
262 generation_type = "orthonormal";
263
264 CylindricalDuo cylindrical(domains, orders, series, name, expansion_type, generation_type);
265 EXPECT_EQ(cylindrical.getNumberOfTerms(),
266 (orders[0] + 1) * ((orders[1] + 1) * (orders[1] + 2)) / 2);
267}

◆ TEST() [4/11]

TEST ( FunctionalExpansionsTest  ,
cylindricalDuoEvaluator   
)

Definition at line 269 of file CylindricalDuo.C.

270{
271 const std::vector<MooseEnum> domains = {FunctionalBasisInterface::_domain_options = "x",
274 const std::vector<std::size_t> orders = {15, 17};
275 const std::vector<MooseEnum> series = {single_series_types_1D = "Legendre",
276 single_series_types_2D = "Zernike"};
277 expansion_type = "standard";
278 generation_type = "orthonormal";
279
280 CylindricalDuo cylindrical(domains, orders, series, name, expansion_type, generation_type);
281
282 const std::vector<Point> locations = {
283 Point(-0.14854612627465, 0.60364074055275, 0.76978431165674),
284 Point(0.93801805187856, 0.74175118177279, 0.45207131996044),
285 Point(0.35423736896098, -0.83921049062126, -0.02231845586669)};
286 const std::vector<Real> standard_truth = {
287 0.42889689399543629, 4.3724388003439207, 0.82275646257084989};
288 const std::vector<Real> orthogonal_truth = {
289 -10.386457517518826, -161.7959192066881, -3.9949571266605481};
290
291 for (std::size_t i = 0; i < locations.size(); ++i)
292 {
293 cylindrical.setLocation(locations[i]);
294 // loose tolerances due to diffs with -march=x86-64-v3
295 EXPECT_NEAR(cylindrical.getExpansionSeriesSum(), standard_truth[i], 5.e-12);
296 EXPECT_NEAR(cylindrical.getGenerationSeriesSum(), orthogonal_truth[i], 5.e-10);
297 }
298}

◆ TEST() [5/11]

TEST ( FunctionalExpansionsTest  ,
functionalBasisInterfaceCylindrical   
)

Definition at line 300 of file CylindricalDuo.C.

301{
302 const std::vector<MooseEnum> domains = {FunctionalBasisInterface::_domain_options = "x",
305 const std::vector<std::size_t> orders = {4, 5};
306 const std::vector<MooseEnum> series = {single_series_types_1D = "Legendre",
307 single_series_types_2D = "Zernike"};
308 expansion_type = "standard";
309 generation_type = "orthonormal";
310
311 CylindricalDuo cylindrical(domains, orders, series, name, expansion_type, generation_type);
312
313 const Point location(-0.38541903411291, 0.61369802505416, -0.04539307255549);
314 const Real truth = 0.10414963426362565;
315 FunctionalBasisInterface & interface = (FunctionalBasisInterface &)cylindrical;
316
317 interface.setLocation(location);
318 EXPECT_NEAR(interface.getExpansionSeriesSum(), truth, tol);
319}
const double tol
This class provides the basis for any custom functional basis, and is the parent class of both Single...
virtual void setLocation(const Point &point)=0
Set the location that will be used by the series to compute values.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ TEST() [6/11]

TEST ( FunctionalExpansionsTest  ,
zernikeConstructor   
)

Definition at line 16 of file CylindricalDuo.C.

17{
18 const unsigned int order = 5;
19 expansion_type = "orthonormal";
20 generation_type = "standard";
23 {order},
26 EXPECT_EQ(zernike.getOrder(0), order);
27}
This class provides the algorithms and properties of the Zernike polynomial series.
Definition Zernike.h:18

◆ TEST() [7/11]

TEST ( FunctionalExpansionsTest  ,
zernikeSeriesEvaluationXY   
)

Definition at line 29 of file CylindricalDuo.C.

30{
31 const unsigned int order = 4;
32 const Point location(-0.90922108754014, 0.262698547343, 0.156796889218);
33 expansion_type = "standard";
34 generation_type = "orthonormal";
35
38 {order},
41 zernike.setLocation(location);
42 const std::array<Real, 15> truth = {{0.318309886183791,
43 -0.300628811510287,
44 -1.117940202314423,
45 0.791881706198328,
46 0.623918544603900,
47 1.365900806059890,
48 -1.357069098439213,
49 -0.288633095470502,
50 -1.073332058640328,
51 -1.349767446988918,
52 1.887803726543957,
53 0.404825692079851,
54 0.223343150486739,
55 0.698275682841869,
56 1.080889714660983}};
57
58 auto & answer = zernike.getAllGeneration();
59 for (std::size_t i = 0; i < zernike.getNumberOfTerms(); ++i)
60 EXPECT_NEAR(answer[i], truth[i], tol);
61}
virtual void setLocation(const Point &point) final
Set the location that will be used by the series to compute values.

◆ TEST() [8/11]

TEST ( FunctionalExpansionsTest  ,
zernikeSeriesEvaluationXZ   
)

Definition at line 63 of file CylindricalDuo.C.

64{
65 const unsigned int order = 4;
66 const Point location(-0.90922108754014, 0.262698547343, 0.156796889218);
67 expansion_type = "standard";
68 generation_type = "orthonormal";
69
72 {order},
75 zernike.setLocation(location);
76 const std::array<Real, 15> truth = {{0.318309886183791,
77 -0.180774038043348,
78 -1.143454732567233,
79 0.487041727962393,
80 0.623918544603900,
81 1.501849527692451,
82 -0.867504286868072,
83 -0.173560777222340,
84 -1.097828505968007,
85 -1.706149176114187,
86 1.276644449771070,
87 0.248985426801565,
88 0.223343150486739,
89 0.767775375651402,
90 1.761335979897610}};
91
92 auto & answer = zernike.getAllGeneration();
93 for (std::size_t i = 0; i < zernike.getNumberOfTerms(); ++i)
94 EXPECT_NEAR(answer[i], truth[i], tol);
95}

◆ TEST() [9/11]

TEST ( FunctionalExpansionsTest  ,
zernikeSeriesEvaluationYZ   
)

Definition at line 97 of file CylindricalDuo.C.

98{
99 const unsigned int order = 4;
100 const Point location(-0.90922108754014, 0.262698547343, 0.156796889218);
101 expansion_type = "standard";
102 generation_type = "orthonormal";
103
106 {order},
109 zernike.setLocation(location);
110 const std::array<Real, 15> truth = {{0.318309886183791,
111 0.052230505695590,
112 0.330374978445085,
113 0.040657672622662,
114 -0.823129261009826,
115 0.125372638358686,
116 0.020923587239414,
117 -0.187295294511344,
118 -1.184703806003468,
119 0.041151106306071,
120 0.008896570968308,
121 -0.184582980412102,
122 0.978025517529447,
123 -0.569182979683797,
124 0.012274247968574}};
125
126 auto & answer = zernike.getAllGeneration();
127 for (std::size_t i = 0; i < zernike.getNumberOfTerms(); ++i)
128 EXPECT_NEAR(answer[i], truth[i], tol);
129}

◆ TEST() [10/11]

TEST ( FunctionalExpansionsTest  ,
zernikeSeriesSqrtMuEvaluation   
)

Definition at line 131 of file CylindricalDuo.C.

132{
133 const unsigned int order = 4;
134 const Point location(-0.90922108754014, 0.262698547343, 0.156796889218);
135 expansion_type = "standard";
136 generation_type = "sqrt_mu";
137
140 {order},
143 zernike.setLocation(location);
144 const std::array<Real, 15> truth = {{0.318309886183791,
145 0.052230505695590,
146 0.330374978445085,
147 0.040657672622662,
148 -0.823129261009826,
149 0.125372638358686,
150 0.020923587239414,
151 -0.187295294511344,
152 -1.184703806003468,
153 0.041151106306071,
154 0.008896570968308,
155 -0.184582980412102,
156 0.978025517529447,
157 -0.569182979683797,
158 0.012274247968574}};
159
160 auto & answer = zernike.getAllGeneration();
161 EXPECT_NEAR(answer[0], truth[0] * std::sqrt(M_PI), tol);
162 size_t i = 1;
163 for (size_t n = 1; n < order + 1; ++n)
164 {
165 for (size_t m = 0; m < n + 1; ++m)
166 {
167 if (m != 0 && n / m == 2 && n % m == 0)
168 EXPECT_NEAR(answer[i], truth[i] * std::sqrt(M_PI / (n + 1)), tol);
169 else
170 EXPECT_NEAR(answer[i], truth[i] * std::sqrt(M_PI / (2 * n + 2)), tol);
171 ++i;
172 }
173 }
174}

◆ TEST() [11/11]

TEST ( FunctionalExpansionsTest  ,
zernikeSeriesStandardEvaluation   
)

Definition at line 176 of file CylindricalDuo.C.

177{
178 const unsigned int order = 4;
179 const Point location(-0.90922108754014, 0.262698547343, 0.156796889218);
180 expansion_type = "standard";
181 generation_type = "standard";
182
185 {order},
188 zernike.setLocation(location);
189 const std::array<Real, 15> truth = {{0.318309886183791,
190 0.052230505695590,
191 0.330374978445085,
192 0.040657672622662,
193 -0.823129261009826,
194 0.125372638358686,
195 0.020923587239414,
196 -0.187295294511344,
197 -1.184703806003468,
198 0.041151106306071,
199 0.008896570968308,
200 -0.184582980412102,
201 0.978025517529447,
202 -0.569182979683797,
203 0.012274247968574}};
204
205 auto & answer = zernike.getAllGeneration();
206 EXPECT_NEAR(answer[0], truth[0] * M_PI, tol);
207 size_t i = 1;
208 for (size_t n = 1; n < order + 1; ++n)
209 {
210 for (size_t m = 0; m < n + 1; ++m)
211 {
212 if (m != 0 && n / m == 2 && n % m == 0)
213 EXPECT_NEAR(answer[i], truth[i] * M_PI / (n + 1), tol);
214 else
215 EXPECT_NEAR(answer[i], truth[i] * M_PI / (2 * n + 2), tol);
216 ++i;
217 }
218 }
219}