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