QMCPACK
ObservableHelper.cpp
Go to the documentation of this file.
1 //////////////////////////////////////////////////////////////////////////////////////
2 // This file is distributed under the University of Illinois/NCSA Open Source License.
3 // See LICENSE file in top directory for details.
4 //
5 // Copyright (c) 2016 Jeongnim Kim and QMCPACK developers.
6 //
7 // File developed by: Jeongnim Kim, jeongnim.kim@gmail.com, University of Illinois at Urbana-Champaign
8 // Jeremy McMinnis, jmcminis@gmail.com, University of Illinois at Urbana-Champaign
9 // Mark A. Berrill, berrillma@ornl.gov, Oak Ridge National Laboratory
10 // William F. Godoy, godoywf@ornl.gov, Oak Ridge National Laboratory
11 //
12 // File created by: William F. Godoy, godoywf@ornl.gov, Oak Ridge National Laboratory
13 //////////////////////////////////////////////////////////////////////////////////////
14 
15 
16 /**@file ObservableHelper.cpp
17  *@brief Definition of ObservableHelper class
18  */
19 #include "ObservableHelper.h"
20 
21 namespace qmcplusplus
22 {
23 ObservableHelper::ObservableHelper(hdf_path title) : group_name(std::move(title)) {}
24 
26 
27 void ObservableHelper::set_dimensions(const std::vector<int>& dims, int first)
28 {
29  //rank is increased
30  hsize_t rank = dims.size() + 1;
31  mydims.resize(rank, 1);
32  copy(dims.begin(), dims.end(), mydims.begin() + 1);
33  offsets.resize(rank, 0);
34  lower_bound = first;
35 }
36 
37 void ObservableHelper::addProperty(float& p, const std::string& pname, hdf_archive& file)
38 {
39  double p_DP(p);
40  file.push(group_name, true);
41  file.write(p_DP, pname);
42  file.pop();
43 }
44 
45 void ObservableHelper::addProperty(Tensor<float, OHMMS_DIM>& p, const std::string& pname, hdf_archive& file)
46 {
48  file.push(group_name, true);
49  file.write(p_DP, pname);
50  file.pop();
51 }
52 
53 void ObservableHelper::addProperty(Matrix<float>& p, const std::string& pname, hdf_archive& file)
54 {
55  Matrix<double> p_DP;
56  p_DP = p;
57  file.push(group_name, true);
58  file.write(p_DP, pname);
59  file.pop();
60 }
61 
63 {
65  file.push(group_name, true);
66  file.write(p_DP, pname);
67  file.pop();
68 }
69 
70 void ObservableHelper::addProperty(std::vector<float>& p, const std::string& pname, hdf_archive& file)
71 {
72  std::vector<double> p_DP;
73  p_DP.assign(p.begin(), p.end());
74  file.push(group_name, true);
75  file.write(p_DP, pname);
76  file.pop();
77 }
78 
80  const std::string& pname,
81  hdf_archive& file)
82 {
83  std::vector<TinyVector<double, OHMMS_DIM>> p_DP;
84  p_DP.assign(p.begin(), p.end());
85  file.push(group_name, true);
86  file.write(p_DP, pname);
87  file.pop();
88 }
89 
90 void ObservableHelper::write(const value_type* const first_v, hdf_archive& file)
91 {
92  hsize_t rank = mydims.size();
93  if (rank)
94  {
95  file.push(group_name, true);
96  h5d_append(file.top(), "value", current, rank, mydims.data(), first_v + lower_bound);
97  file.pop();
98  }
99 }
100 
101 } // namespace qmcplusplus
Fixed-size array.
Definition: OhmmsTinyMeta.h:30
std::vector< hsize_t > offsets
offsets
void write(T &data, const std::string &aname)
write the data to the group aname and check status runtime error is issued on I/O error ...
Definition: hdf_archive.h:259
bool h5d_append(hid_t grp, const std::string &aname, hsize_t &current, hsize_t ndims, const hsize_t *const dims, const T *const first, hsize_t chunk_size=1, hid_t xfer_plist=H5P_DEFAULT)
helper functions for EinsplineSetBuilder
Definition: Configuration.h:43
hid_t top() const
return the top of the group stack
Definition: hdf_archive.h:192
~ObservableHelper()
Destructor closes hdf5 remaining resources.
ObservableHelper(hdf_path title)
Favored constructor.
class to handle hdf file
Definition: hdf_archive.h:51
void write(const value_type *const first_v, hdf_archive &file)
void addProperty(T &p, const std::string &pname, hdf_archive &file)
add named property to describe the collectable this helper class handles
hsize_t current
"file pointer" for h5d_append
void copy(const Array< T1, 3 > &src, Array< T2, 3 > &dest)
Definition: Blitz.h:639
Declaration of ObservableHelper and other helper class for observables.
Tensor<T,D> class for D by D tensor.
Definition: OhmmsTinyMeta.h:32
std::vector< hsize_t > mydims
my dimensions
hsize_t lower_bound
starting index
hdf_path group_name
Path of this observable.
void push(const std::string &gname, bool createit=true)
push a group to the group stack
void set_dimensions(const std::vector< int > &dims, int first)
set the shape of this observable
std::vector< int > dims
QMCTraits::FullPrecRealType value_type