11 #include "gtest/gtest.h" 16 #include "libmesh/communicator.h" 17 #include "libmesh/parallel_object.h" 26 for (std::size_t
c = 0;
c < data.
n(); ++
c)
27 y *= (std::abs(4 * data(row,
c) - 2) + q_vector[
c]) / (1 + q_vector[
c]);
34 std::vector<Real> &
out)
36 for (std::size_t i = 0; i < data.
m(); ++i)
43 return 1 - std::accumulate(data.begin(), data.begin() + count, 0.);
46 std::vector<std::vector<Real>>
47 sobolidx(
const std::vector<Real> & q_vector, std::size_t
K,
bool resample =
true)
50 generator.
seed(0, 1980);
51 generator.
seed(1, 1949);
53 const std::size_t n = q_vector.size();
58 for (std::size_t r = 0; r <
K; ++r)
59 for (std::size_t
c = 0;
c < n; ++
c)
61 M1(r,
c) = generator.
rand(0);
62 M2(r,
c) = generator.
rand(1);
67 for (std::size_t
j = 0;
j < n; ++
j)
68 for (std::size_t r = 0; r <
K; ++r)
69 for (std::size_t
c = 0;
c < n; ++
c)
71 Ni[
j](r,
c) =
j ==
c ? M1(r,
c) : M2(r,
c);
72 Nni[
j](r,
c) =
j ==
c ? M2(r,
c) : M1(r,
c);
76 std::vector<Real> data;
82 for (std::size_t i = 0; i < n; ++i)
87 for (std::size_t i = 0; i < n; ++i)
106 std::vector<Real> q_vector = {0, 0.5, 3, 9, 99, 99};
107 std::vector<std::vector<Real>> data =
sobolidx(q_vector, 100000);
113 std::vector<Real> sobol = calc.
compute(data,
false);
116 EXPECT_NEAR(sobol[0], 0.585817378, 1e-2);
117 EXPECT_NEAR(sobol[1], 0.261775886, 1e-2);
118 EXPECT_NEAR(sobol[2], 0.036806879, 1e-2);
119 EXPECT_NEAR(sobol[3], 0.005850546, 1e-2);
120 EXPECT_NEAR(sobol[4], 0.000059171, 1e-2);
121 EXPECT_NEAR(sobol[5], 0.000058227, 1e-2);
124 EXPECT_NEAR(sobol[6], 0.686102012, 1e-2);
125 EXPECT_NEAR(sobol[7], 0.349098045, 1e-2);
126 EXPECT_NEAR(sobol[8], 0.044801021, 1e-2);
127 EXPECT_NEAR(sobol[9], 0.002512902, 1e-2);
128 EXPECT_NEAR(sobol[10], -0.007565606, 1e-2);
129 EXPECT_NEAR(sobol[11], -0.007483272, 1e-2);
132 EXPECT_NEAR(sobol[12], 0.081273974, 1e-2);
133 EXPECT_NEAR(sobol[13], 0.006920649, 1e-2);
134 EXPECT_NEAR(sobol[14], 0.006375308, 1e-1);
135 EXPECT_NEAR(sobol[15], -0.004536444, 1e-1);
136 EXPECT_NEAR(sobol[16], -0.001670717, 1e-2);
137 EXPECT_NEAR(sobol[17], -0.000131402, 1e-2);
138 EXPECT_NEAR(sobol[18], -0.006650540, 1e-2);
139 EXPECT_NEAR(sobol[19], -0.001642939, 1e-2);
140 EXPECT_NEAR(sobol[20], -0.000117414, 1e-2);
141 EXPECT_NEAR(sobol[21], 0.000029383, 1e-2);
142 EXPECT_NEAR(sobol[22], -0.006641290, 1e-2);
143 EXPECT_NEAR(sobol[23], -0.001713718, 1e-2);
144 EXPECT_NEAR(sobol[24], -0.000123219, 1e-2);
145 EXPECT_NEAR(sobol[25], 0.000027036, 1e-2);
146 EXPECT_NEAR(sobol[26], -0.000000386, 1e-2);
157 MooseEnum boot(
"percentile",
"percentile");
161 std::vector<Real> q_vector = {0, 0.5, 3, 9, 99, 99};
162 std::vector<std::vector<Real>> data =
sobolidx(q_vector, 1024);
165 const std::vector<Real> sobol = calc.
compute(data,
false);
167 const std::vector<std::vector<Real>> sobol_ci = boot_calc->compute(data,
false);
170 EXPECT_NEAR(sobol[0], 0.595124392, 1e-2);
171 EXPECT_NEAR(sobol_ci[0][0], 0.518401934, 1e-2);
172 EXPECT_NEAR(sobol_ci[1][0], 0.694457878, 1e-2);
174 EXPECT_NEAR(sobol[1], 0.251630423, 1e-2);
175 EXPECT_NEAR(sobol_ci[0][1], 0.212776416, 1e-2);
176 EXPECT_NEAR(sobol_ci[1][1], 0.302403418, 1e-2);
178 EXPECT_NEAR(sobol[2], 0.033508970, 1e-2);
179 EXPECT_NEAR(sobol_ci[0][2], 0.028092482, 1e-2);
180 EXPECT_NEAR(sobol_ci[1][2], 0.040577359, 1e-2);
182 EXPECT_NEAR(sobol[3], 0.005244906, 1e-2);
183 EXPECT_NEAR(sobol_ci[0][3], 0.004349295, 1e-2);
184 EXPECT_NEAR(sobol_ci[1][3], 0.006388217, 1e-2);
186 EXPECT_NEAR(sobol[4], 0.000055256, 1e-2);
187 EXPECT_NEAR(sobol_ci[0][4], 0.000046050, 1e-2);
188 EXPECT_NEAR(sobol_ci[1][4], 0.000067359, 1e-2);
190 EXPECT_NEAR(sobol[5], 0.000057292, 1e-2);
191 EXPECT_NEAR(sobol_ci[0][5], 0.000047778, 1e-2);
192 EXPECT_NEAR(sobol_ci[1][5], 0.000069655, 1e-2);
195 EXPECT_NEAR(sobol[6], 0.719603333, 1e-2);
196 EXPECT_NEAR(sobol_ci[0][6], 0.664919501, 1e-2);
197 EXPECT_NEAR(sobol_ci[1][6], 0.761403817, 1e-2);
199 EXPECT_NEAR(sobol[7], 0.391713495, 1e-1);
200 EXPECT_NEAR(sobol_ci[0][7], 0.284662598, 1e-1);
201 EXPECT_NEAR(sobol_ci[1][7], 0.472968290, 1e-1);
203 EXPECT_NEAR(sobol[8], 0.053499226, 1e-1);
204 EXPECT_NEAR(sobol_ci[0][8], -0.088307896, 1e-1);
205 EXPECT_NEAR(sobol_ci[1][8], 0.162827882, 1e-1);
207 EXPECT_NEAR(sobol[9], 0.030497977, 1e-1);
208 EXPECT_NEAR(sobol_ci[0][9], -0.113473882, 1e-1);
209 EXPECT_NEAR(sobol_ci[1][9], 0.140750264, 1e-1);
211 EXPECT_NEAR(sobol[10], 0.022088362, 1e-1);
212 EXPECT_NEAR(sobol_ci[0][10], -0.123542952, 1e-1);
213 EXPECT_NEAR(sobol_ci[1][10], 0.134539788, 1e-1);
215 EXPECT_NEAR(sobol[11], 0.020756481, 1e-1);
216 EXPECT_NEAR(sobol_ci[0][11], -0.124872259, 1e-1);
217 EXPECT_NEAR(sobol_ci[1][11], 0.133335504, 1e-1);
220 EXPECT_NEAR(sobol[12], 0.086623495, 1e-1);
221 EXPECT_NEAR(sobol_ci[0][12], -0.106884750, 1e-1);
222 EXPECT_NEAR(sobol_ci[1][12], 0.292478615, 1e-1);
224 EXPECT_NEAR(sobol[13], 0.051499920, 1e-2);
225 EXPECT_NEAR(sobol_ci[0][13], -0.098917644, 1e-2);
226 EXPECT_NEAR(sobol_ci[1][13], 0.208866009, 1e-2);
228 EXPECT_NEAR(sobol[14], -0.013129111, 1e-1);
229 EXPECT_NEAR(sobol_ci[0][14], -0.063644133, 1e-1);
230 EXPECT_NEAR(sobol_ci[1][14], 0.034202843, 2e-1);
232 EXPECT_NEAR(sobol[15], 0.028748451, 1e-2);
233 EXPECT_NEAR(sobol_ci[0][15], -0.114335284, 1e-2);
234 EXPECT_NEAR(sobol_ci[1][15], 0.180976397, 1e-2);
236 EXPECT_NEAR(sobol[16], -0.020848158, 1e-1);
237 EXPECT_NEAR(sobol_ci[0][16], -0.066521659, 1e-1);
238 EXPECT_NEAR(sobol_ci[1][16], 0.021192582, 2e-1);
240 EXPECT_NEAR(sobol[17], 0.003324699, 1e-1);
241 EXPECT_NEAR(sobol_ci[0][17], -0.000940639, 1e-1);
242 EXPECT_NEAR(sobol_ci[1][17], 0.008226253, 1e-1);
244 EXPECT_NEAR(sobol[18], 0.024066263, 1e-1);
245 EXPECT_NEAR(sobol_ci[0][18], -0.118856731, 1e-1);
246 EXPECT_NEAR(sobol_ci[1][18], 0.173828068, 2e-1);
248 EXPECT_NEAR(sobol[19], -0.019734912, 1e-2);
249 EXPECT_NEAR(sobol_ci[0][19], -0.064960642, 1e-2);
250 EXPECT_NEAR(sobol_ci[1][19], 0.021734891, 1e-2);
252 EXPECT_NEAR(sobol[20], 0.002819696, 1e-1);
253 EXPECT_NEAR(sobol_ci[0][20], -0.000486192, 1e-1);
254 EXPECT_NEAR(sobol_ci[1][20], 0.006827348, 1e-1);
256 EXPECT_NEAR(sobol[21], 0.000065586, 1e-2);
257 EXPECT_NEAR(sobol_ci[0][21], -0.000178457, 1e-2);
258 EXPECT_NEAR(sobol_ci[1][21], 0.000310071, 1e-2);
260 EXPECT_NEAR(sobol[22], 0.025259517, 1e-1);
261 EXPECT_NEAR(sobol_ci[0][22], -0.117947309, 2e-1);
262 EXPECT_NEAR(sobol_ci[1][22], 0.175236100, 2e-1);
264 EXPECT_NEAR(sobol[23], -0.019851829, 1e-1);
265 EXPECT_NEAR(sobol_ci[0][23], -0.065106309, 1e-1);
266 EXPECT_NEAR(sobol_ci[1][23], 0.021603718, 1e-1);
268 EXPECT_NEAR(sobol[24], 0.002859528, 1e-2);
269 EXPECT_NEAR(sobol_ci[0][24], -0.000404042, 1e-2);
270 EXPECT_NEAR(sobol_ci[1][24], 0.006833422, 1e-2);
272 EXPECT_NEAR(sobol[25], 0.000184449, 1e-2);
273 EXPECT_NEAR(sobol_ci[0][25], -0.000042626, 1e-2);
274 EXPECT_NEAR(sobol_ci[1][25], 0.000422993, 1e-2);
276 EXPECT_NEAR(sobol[26], -0.000003882, 1e-2);
277 EXPECT_NEAR(sobol_ci[0][26], -0.000012806, 1e-2);
278 EXPECT_NEAR(sobol_ci[1][26], 0.000004494, 1e-2);
293 std::vector<Real> q_vector = {0, 0, 0, 0};
294 std::vector<std::vector<Real>> data =
sobolidx(q_vector, 1000000);
296 std::vector<Real> sobol = calc.
compute(data,
false);
299 EXPECT_EQ(sobol.size(), (std::size_t)14);
300 EXPECT_NEAR(sobol[0], 0.154, 1e-2);
301 EXPECT_NEAR(sobol[1], 0.154, 1e-2);
302 EXPECT_NEAR(sobol[2], 0.154, 1e-2);
303 EXPECT_NEAR(sobol[3], 0.154, 1e-2);
305 EXPECT_NEAR(sobol[4], 0.360, 1e-2);
306 EXPECT_NEAR(sobol[5], 0.360, 1e-2);
307 EXPECT_NEAR(sobol[6], 0.360, 1e-2);
308 EXPECT_NEAR(sobol[7], 0.360, 1e-2);
310 EXPECT_NEAR(sobol[8], 0.051, 1e-2);
311 EXPECT_NEAR(sobol[9], 0.051, 1e-2);
312 EXPECT_NEAR(sobol[10], 0.051, 1e-2);
313 EXPECT_NEAR(sobol[11], 0.051, 1e-2);
314 EXPECT_NEAR(sobol[12], 0.051, 1e-2);
315 EXPECT_NEAR(sobol[13], 0.051, 1e-2);
320 std::vector<Real> q_vector = {0, 0, 0, 0};
321 std::vector<std::vector<Real>> data =
sobolidx(q_vector, 1000000,
false);
323 std::vector<Real> sobol = calc.
compute(data,
false);
326 EXPECT_EQ(sobol.size(), (std::size_t)8);
327 EXPECT_NEAR(sobol[0], 0.154, 1e-2);
328 EXPECT_NEAR(sobol[1], 0.154, 1e-2);
329 EXPECT_NEAR(sobol[2], 0.154, 1e-2);
330 EXPECT_NEAR(sobol[3], 0.154, 1e-2);
332 EXPECT_NEAR(sobol[4], 0.360, 1e-2);
333 EXPECT_NEAR(sobol[5], 0.360, 1e-2);
334 EXPECT_NEAR(sobol[6], 0.360, 1e-2);
335 EXPECT_NEAR(sobol[7], 0.360, 1e-2);
339 std::vector<Real> q_vector = {0, 0, 0, 0, 0, 0, 0, 0};
340 std::vector<std::vector<Real>> data =
sobolidx(q_vector, 1000000);
342 std::vector<Real> sobol = calc.
compute(data,
false);
345 EXPECT_EQ(sobol.size(), (std::size_t)44);
346 EXPECT_NEAR(sobol[0], 0.037, 1e-2);
347 EXPECT_NEAR(sobol[1], 0.037, 1e-2);
348 EXPECT_NEAR(sobol[2], 0.037, 1e-2);
349 EXPECT_NEAR(sobol[3], 0.037, 1e-2);
350 EXPECT_NEAR(sobol[4], 0.037, 1e-2);
351 EXPECT_NEAR(sobol[5], 0.037, 1e-2);
352 EXPECT_NEAR(sobol[6], 0.037, 1e-2);
353 EXPECT_NEAR(sobol[7], 0.037, 1e-2);
355 EXPECT_NEAR(sobol[16], 0.012, 1e-2);
356 EXPECT_NEAR(sobol[17], 0.012, 1e-2);
357 EXPECT_NEAR(sobol[18], 0.012, 1e-2);
358 EXPECT_NEAR(sobol[19], 0.012, 1e-2);
359 EXPECT_NEAR(sobol[20], 0.012, 1e-2);
360 EXPECT_NEAR(sobol[21], 0.012, 1e-2);
361 EXPECT_NEAR(sobol[22], 0.012, 1e-2);
362 EXPECT_NEAR(sobol[23], 0.012, 1e-2);
363 EXPECT_NEAR(sobol[24], 0.012, 1e-2);
364 EXPECT_NEAR(sobol[25], 0.012, 1e-2);
365 EXPECT_NEAR(sobol[26], 0.012, 1e-2);
366 EXPECT_NEAR(sobol[27], 0.012, 1e-2);
367 EXPECT_NEAR(sobol[28], 0.012, 1e-2);
368 EXPECT_NEAR(sobol[29], 0.012, 1e-2);
369 EXPECT_NEAR(sobol[30], 0.012, 1e-2);
370 EXPECT_NEAR(sobol[31], 0.012, 1e-2);
371 EXPECT_NEAR(sobol[32], 0.012, 1e-2);
372 EXPECT_NEAR(sobol[33], 0.012, 1e-2);
373 EXPECT_NEAR(sobol[34], 0.012, 1e-2);
374 EXPECT_NEAR(sobol[35], 0.012, 1e-2);
375 EXPECT_NEAR(sobol[36], 0.012, 1e-2);
376 EXPECT_NEAR(sobol[37], 0.012, 1e-2);
377 EXPECT_NEAR(sobol[38], 0.012, 1e-2);
378 EXPECT_NEAR(sobol[39], 0.012, 1e-2);
379 EXPECT_NEAR(sobol[40], 0.012, 1e-2);
380 EXPECT_NEAR(sobol[41], 0.012, 1e-2);
381 EXPECT_NEAR(sobol[42], 0.012, 1e-2);
382 EXPECT_NEAR(sobol[43], 0.012, 1e-2);
386 std::vector<Real> q_vector = {0, 0, 3, 9, 9, 9, 9, 9};
387 std::vector<std::vector<Real>> data =
sobolidx(q_vector, 1000000);
389 std::vector<Real> sobol = calc.
compute(data,
false);
392 EXPECT_EQ(sobol.size(), (std::size_t)44);
393 EXPECT_NEAR(sobol[8], 0.550, 1e-2);
394 EXPECT_NEAR(sobol[9], 0.550, 1e-2);
395 EXPECT_NEAR(sobol[10], 0.050, 1e-2);
396 EXPECT_NEAR(sobol[11], 0.007, 1e-2);
397 EXPECT_NEAR(sobol[12], 0.007, 1e-2);
398 EXPECT_NEAR(sobol[13], 0.007, 1e-2);
399 EXPECT_NEAR(sobol[14], 0.007, 1e-2);
400 EXPECT_NEAR(sobol[15], 0.007, 1e-2);
static const std::string K
void seed(std::size_t i, unsigned int seed)
std::vector< T > resample(const std::vector< T > &data, MooseRandom &generator, const std::size_t seed_index=0)
const std::vector< double > y
The following methods are specializations for using the Parallel::packed_range_* routines for a vecto...
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
OStreamProxy out(std::cout)