3
0
mirror of https://github.com/triqs/dft_tools synced 2024-12-26 14:23:38 +01:00
dft_tools/test/triqs/parameters/default.cpp
Olivier Parcollet af084f5d59 parameters & wrapper
- new parameter class :
  parameters are viewed as form, built in C++, and filled in C++/python.
  Each field of the form as a precise C++ type (erased using standard techniques).
  First tests ok, to be reread/checked.

  TODO : serialization is commented. Lead to long compilation time & large code
  due to boost::serialization. Use h5 when possible.

- wrapper :
  - separated the converters of the wrapped type in the TRIQS library
  - necessary for parameters (it used outside an .so) and potentially
    other codes, outside an .so module
2014-05-19 15:19:18 +02:00

105 lines
2.5 KiB
C++

#include <triqs/parameters.hpp>
#include <iostream>
#define TRIQS_ARRAYS_ENFORCE_BOUNDCHECK
using namespace triqs::params;
using namespace triqs::arrays;
int main() {
try {
parameters P,P2;
P.add_field("A", no_default<int>(), "really ?")
.add_field("D", 2.0, " int ")
.add_field("E", 3u, " unsigned int ")
.add_field("F", long(4), " long ")
.add_field("B", short(0), " short ")
.add_field("C", 1u, " unsigned short ")
.add_field("G", 5ll, " long ")
.add_field("I", double(7.8), " doube ")
.add_field("K", std::complex<double>(12), " double complex ")
.add_field("L", std::string("13"), " string ")
.add_field("M", std::vector<double>{1, 4}, " vector ")
.add_field("Ml", std::vector<double>{1, 2, 3, 4, 5, 6, 7, 8, 9}, " a long vector ")
.add_field("N", double(15), "")
.add_field("s", no_default<std::string>(), "")
.add_field("sc", no_default<std::string>(), "")
.add_field("a1", no_default<array<double, 2>>(), " A nice array")
.add_field("a2", no_default<array<long, 1>>(), "")
.add_field("W", int(16), "");
std::cout << P << std::endl;
P2 = P;
P2.sort_by_key();
std::cout << P2 << std::endl;
auto P_vide = P ;
P["A"] = long(1);
std::cout << P["A"];
P["D"] = 2;
P["D"] = 2.5;
P["s"] = std::string("-14.3");
P["sc"] = "-14.3";
array<double,2> A(2,2); A()=0;A(0,0) = 1.3; A(1,1) = -8.2;
array<long,1> B(100); B()=8; B(0) = 3; B(1) = -8;
P["a1"] = std::move(A);
P["a2"] =B;
// errors
//P["D"] = "eee";
//int i = P["D"];
std::cout << P << std::endl;
// P2.update(pdef);
// testing that copy is a copy
P2["A"] = 12;
std::cout << P["A"] << std::endl;
std::cout << P2["A"] << std::endl;
// put a subparameter ...
P.add_group("Group1", " doc ");
P["Group1"].add_field("a", 1, "sub a 1");
P["Group1"]["a"] = 10;
P["Group1"].add_group("subgroup1.2", " doc ");
P["Group1"]["subgroup1.2"].add_field("d", 1.8, "d is a double");
P["Group1"]["subgroup1.2"]["d"] = 10.2;
std::cout << P << std::endl;
//std::cout << P["Group1"] << std::endl;
// hdf5
{
H5::H5File file( "ess.h5", H5F_ACC_TRUNC );
h5_write( file, "Parameters", P);
}
{
H5::H5File file( "ess.h5", H5F_ACC_RDONLY );
h5_read( file.openGroup("/"), "Parameters", P_vide);
}
std::cout << P_vide << std::endl;
{
H5::H5File file( "ess.h5", H5F_ACC_RDONLY );
h5_read( file.openGroup("/"), "Parameters", P);
}
//std::cout << P << std::endl;
}
catch (triqs::runtime_error const & e) {
std::cout<< " Caught "<< e.what() << std::endl ;
}
}