CoolProp 8.0.0
An open-source fluid property and humid air property database
MatrixMath.cpp
Go to the documentation of this file.
1
3
6
7namespace CoolProp {}; /* namespace CoolProp */
8
9#ifdef ENABLE_CATCH
10# include <math.h>
11# include <iostream>
12# include <catch2/catch_all.hpp>
13
14TEST_CASE("Internal consistency checks and example use cases for MatrixMath.h", "[MatrixMath]") {
15 bool PRINT = false;
16
18 std::vector<double> cHeat;
19 cHeat.clear();
20 cHeat.push_back(+1.1562261074E+03);
21 cHeat.push_back(+2.0994549103E+00);
22 cHeat.push_back(+7.7175381057E-07);
23 cHeat.push_back(-3.7008444051E-20);
24
25 std::vector<std::vector<double>> cHeat2D;
26 cHeat2D.push_back(cHeat);
27 cHeat2D.push_back(cHeat);
28
29 SECTION("Pretty printing tests") {
30
31 Eigen::MatrixXd matrix = Eigen::MatrixXd::Random(4, 1);
32 std::string tmpStr;
33 if (PRINT) std::cout << '\n';
34
35 CHECK_NOTHROW(tmpStr = CoolProp::vec_to_string(cHeat[0]));
36 if (PRINT) std::cout << tmpStr << '\n';
37 CHECK_NOTHROW(tmpStr = CoolProp::vec_to_string(cHeat));
38 if (PRINT) std::cout << tmpStr << '\n';
39 CHECK_NOTHROW(tmpStr = CoolProp::vec_to_string(cHeat2D));
40 if (PRINT) std::cout << tmpStr << '\n';
41
42 CHECK_NOTHROW(tmpStr = CoolProp::mat_to_string(CoolProp::vec_to_eigen(cHeat[0])));
43 if (PRINT) std::cout << tmpStr << '\n';
44 CHECK_NOTHROW(tmpStr = CoolProp::mat_to_string(CoolProp::vec_to_eigen(cHeat, 1)));
45 if (PRINT) std::cout << tmpStr << '\n';
46 CHECK_THROWS(tmpStr = CoolProp::mat_to_string(CoolProp::vec_to_eigen(cHeat, 2)));
47 if (PRINT) std::cout << tmpStr << '\n';
48 CHECK_NOTHROW(tmpStr = CoolProp::mat_to_string(CoolProp::vec_to_eigen(cHeat2D)));
49 if (PRINT) std::cout << tmpStr << '\n';
50 }
51
52 SECTION("Matrix modifications") {
53 Eigen::MatrixXd matrix = CoolProp::vec_to_eigen(cHeat2D);
54
55 if (PRINT) std::cout << CoolProp::mat_to_string(matrix) << '\n';
56
57 CHECK_NOTHROW(CoolProp::removeColumn(matrix, 1));
58 if (PRINT) std::cout << CoolProp::mat_to_string(matrix) << '\n';
59
60 CHECK_NOTHROW(CoolProp::removeRow(matrix, 1));
61 if (PRINT) std::cout << CoolProp::mat_to_string(matrix) << '\n';
62
63 CHECK_THROWS(CoolProp::removeColumn(matrix, 10));
64 CHECK_THROWS(CoolProp::removeRow(matrix, 10));
65 }
66
67 SECTION("std::vector to Eigen::Matrix and back") {
68 std::vector<std::vector<double>> vec2D(cHeat2D);
69 Eigen::MatrixXd matrix = CoolProp::vec_to_eigen(vec2D);
70 for (size_t i = 0; i < static_cast<size_t>(matrix.cols()); ++i) {
71 for (size_t j = 0; j < static_cast<size_t>(matrix.rows()); ++j) {
72 CHECK(std::abs(matrix(j, i) - vec2D[j][i]) <= 1e-10);
73 }
74 }
75 vec2D = CoolProp::eigen_to_vec(matrix);
76 for (size_t i = 0; i < static_cast<size_t>(matrix.cols()); ++i) {
77 for (size_t j = 0; j < static_cast<size_t>(matrix.rows()); ++j) {
78 CHECK(std::abs(matrix(j, i) - vec2D[j][i]) <= 1e-10);
79 }
80 }
81 std::vector<double> vec1D(cHeat);
82 matrix = CoolProp::vec_to_eigen(vec1D);
83 for (size_t i = 0; i < static_cast<size_t>(matrix.cols()); ++i) {
84 for (size_t j = 0; j < static_cast<size_t>(matrix.rows()); ++j) {
85 CHECK(std::abs(matrix(j, i) - vec1D[j]) <= 1e-10);
86 }
87 }
88 vec1D = CoolProp::eigen_to_vec1D(matrix);
89 for (size_t i = 0; i < static_cast<size_t>(matrix.cols()); ++i) {
90 for (size_t j = 0; j < static_cast<size_t>(matrix.rows()); ++j) {
91 CHECK(std::abs(matrix(j, i) - vec1D[j]) <= 1e-10);
92 }
93 }
94 }
95}
96
97#endif /* ENABLE_CATCH */
98
99//#include <unsupported/Eigen/Polynomials>
100//#include <iostream>
103//
104//#include <vector>
105//#include <string>
106//#include <MatrixMath.h>
107//
108//int main()
109//{
110//Eigen::Vector4d roots = Eigen::Vector4d::Random();
111//std::cout << "Roots: " << roots.transpose() << std::endl;
112//Eigen::Matrix<double,5,1> polynomial;
113//Eigen::roots_to_monicPolynomial( roots, polynomial );
114//std::cout << "Polynomial: ";
115//for( int i=0; i<4; ++i ){ std::cout << polynomial[i] << ".x^" << i << "+ "; }
116//std::cout << polynomial[4] << ".x^4" << std::endl;
117//Eigen::Vector4d evaluation;
118//for( int i=0; i<4; ++i ){
119//evaluation[i] = Eigen::poly_eval( polynomial, roots[i] ); }
120//std::cout << "Evaluation of the polynomial at the roots: " << evaluation.transpose() << std::endl;
121//std::cout << std::endl;
125//Eigen::Vector4d coeffs = Eigen::Vector4d::Random()*1e2;
126//double input = 1.9e0;
127//std::cout << "Coeffs: " << std::endl << coeffs.transpose() << std::endl;
128//double eval = Eigen::poly_eval( coeffs, input);
129//std::cout << "Evaluation of the polynomial at " << input << std::endl;
130//std::cout << eval << std::endl;
131//
132//double vec0 = 0.1;
133//std::vector<double> vec1(2,0.44);
134//std::vector< std::vector<double> > vec2;
135//vec2.push_back(std::vector<double>(2,0.2));
136//vec2.push_back(std::vector<double>(2,0.3));
137//
138//std::cout << CoolProp::vec_to_string(vec0) << std::endl;
139//std::cout << CoolProp::vec_to_string(vec1) << std::endl;
140//std::cout << CoolProp::vec_to_string(vec2) << std::endl;
141//
142//Eigen::Matrix<double,2,2> mat;
143//mat.setConstant(2,2,0.25);
144//std::vector< std::vector<double> > vec;
145//
146//CoolProp::convert(mat, vec);
147//std::cout << CoolProp::vec_to_string(vec) << std::endl;
148//
151//
152//Eigen::Matrix<double,2,2> mat2;
153//CoolProp::convert(vec2, mat2);
154//CoolProp::convert(mat2, vec);
155//std::cout << CoolProp::vec_to_string(vec) << std::endl;
156//
157//Eigen::Matrix<double,2,1> mat1;
158//CoolProp::convert(vec1, mat1);
159//std::vector<double> vec3;
160//CoolProp::convert(mat1, vec);
161//std::cout << CoolProp::vec_to_string(vec) << std::endl;
162//
165//
167//
169//
172//
174//
175//}