1 /* _______________________________________________________________________
2
3 DAKOTA: Design Analysis Kit for Optimization and Terascale Applications
4 Copyright 2014-2020 National Technology & Engineering Solutions of Sandia, LLC (NTESS).
5 This software is distributed under the GNU Lesser General Public License.
6 For more information, see the README file in the top Dakota directory.
7 _______________________________________________________________________ */
8
9
10 #include "dakota_data_io.hpp"
11 #include "dakota_tabular_io.hpp"
12
13 #include <string>
14
15 #include <Teuchos_UnitTestHarness.hpp>
16
17 using namespace Dakota;
18
19 namespace {
20
21 const int NUM_EXPTS = 3;
22 const int NCV = 4;
23
24 const int NUM_FIELD_VALUES = 9;
25 const int VECTOR_FIELD_DIM = 4;
26
27 }
28
29 //----------------------------------------------------------------
30
TEUCHOS_UNIT_TEST(expt_data_reader,read_config_vars)31 TEUCHOS_UNIT_TEST(expt_data_reader, read_config_vars)
32 {
33 const std::string base_name = "expt_data_test_files/voltage";
34
35 RealVectorArray config_data1;
36 read_config_vars_multifile(base_name, NUM_EXPTS, NCV, config_data1);
37
38 RealVectorArray config_data2;
39 read_config_vars_singlefile(base_name, NUM_EXPTS, NCV, config_data2);
40
41 // Verify equality of config data
42 TEST_EQUALITY( config_data1.size(), config_data2.size() );
43 TEST_EQUALITY( config_data1[0].length(), config_data2[0].length() );
44 for( size_t i=0; i<config_data1.size(); ++i )
45 for( int j=0; j<config_data1[i].length(); ++j )
46 TEST_FLOATING_EQUALITY( config_data1[i][j], config_data2[i][j], 1.e-14 );
47 }
48
49 //----------------------------------------------------------------
50
TEUCHOS_UNIT_TEST(expt_data_reader,read_bad_config_vars_size)51 TEUCHOS_UNIT_TEST(expt_data_reader, read_bad_config_vars_size)
52 {
53 const std::string base_name = "expt_data_test_files/voltage";
54
55 RealVectorArray config_data;
56 TEST_THROW( read_config_vars_multifile( base_name, NUM_EXPTS, NCV+1, config_data), std::runtime_error );
57 TEST_THROW( read_config_vars_singlefile(base_name, NUM_EXPTS, NCV+1, config_data), std::runtime_error );
58 }
59
60 //----------------------------------------------------------------
61
TEUCHOS_UNIT_TEST(expt_data_reader,read_field_values_scalar)62 TEUCHOS_UNIT_TEST(expt_data_reader, read_field_values_scalar)
63 {
64 const std::string base_name = "expt_data_test_files/voltage";
65
66 // This reads directly into a RealVector
67 RealVector field_vals;
68 read_field_values(base_name, 2 /* expt number */, field_vals);
69
70 // ... while this reads into a RealVectorArray
71 RealVectorArray field_vals_array;
72 read_field_values(base_name, 2 /* expt number */, field_vals_array);
73
74 // Totally contrived values ... and should be reflected in the corresponding
75 // test data file, "expt_data_test_files/voltage.2.dat"
76 double gold_values[] = { 2.34, 8.552, -3.654, 7.332, 0.01, -0.1509, -5.98, 4.74, 9.99 };
77
78 // Verify equality of field data
79 TEST_EQUALITY( field_vals_array.size(), 1 );
80 TEST_EQUALITY( field_vals_array[0].length(), NUM_FIELD_VALUES );
81 TEST_EQUALITY( field_vals.length(), NUM_FIELD_VALUES );
82 for( size_t i=0; i<NUM_FIELD_VALUES; ++i )
83 {
84 TEST_FLOATING_EQUALITY( field_vals_array[0][i], gold_values[i], 1.e-14 );
85 TEST_FLOATING_EQUALITY( field_vals[i], gold_values[i], 1.e-14 );
86 }
87 }
88
89 //----------------------------------------------------------------
90
TEUCHOS_UNIT_TEST(expt_data_reader,read_field_values_vector)91 TEUCHOS_UNIT_TEST(expt_data_reader, read_field_values_vector)
92 {
93 const std::string base_name = "expt_data_test_files/electric_field";
94
95 RealVectorArray field_vals;
96 read_field_values(base_name, 2 /* expt number */, field_vals);
97
98 // Verify equality of field data
99 TEST_EQUALITY( field_vals.size(), VECTOR_FIELD_DIM );
100 TEST_EQUALITY( field_vals[0].length(), NUM_FIELD_VALUES );
101 for( int i=0; i<VECTOR_FIELD_DIM; ++i )
102 for( int j=0; j<NUM_FIELD_VALUES; ++j )
103 TEST_FLOATING_EQUALITY( field_vals[i][j], double(j+1)+double(j+1)*pow(0.1,i), 1.e-14 );
104 }
105
106 //----------------------------------------------------------------
107
TEUCHOS_UNIT_TEST(expt_data_reader,read_coord_values)108 TEUCHOS_UNIT_TEST(expt_data_reader, read_coord_values)
109 {
110 const std::string base_name = "expt_data_test_files/voltage";
111
112 RealMatrix coords;
113 read_coord_values(base_name, 2 /* expt number */, coords);
114
115 // Verify equality of coord data
116 TEST_EQUALITY( coords.numCols(), VECTOR_FIELD_DIM );
117 TEST_EQUALITY( coords.numRows(), NUM_FIELD_VALUES );
118 for( int i=0; i<VECTOR_FIELD_DIM; ++i )
119 for( int j=0; j<NUM_FIELD_VALUES; ++j )
120 TEST_FLOATING_EQUALITY( coords[i][j], double(i)+double(j+1)*0.1, 1.e-14 );
121 }
122
123 //----------------------------------------------------------------
124