4 #define BOOST_LOG_DYN_LINK 1 5 #include <boost/log/trivial.hpp> 8 inline size_t power(
size_t a,
size_t b){
10 for(
size_t i = 0; i < b; i++) {
14 assert( (
pow(1.0*a,1.0*b) -
double(res)) < 0.5);
19 template<
size_t NDIM,
typename T>
21 bool nanfound =
false;
22 for(
size_t i = 0; i < _Ntot; i++){
30 BOOST_LOG_TRIVIAL(error) <<
"Warning: NaN found in grid" << (exitifnan ?
" ...aborting!" :
"" ) << std::endl;
31 if(exitifnan) exit(1);
36 template<
size_t NDIM,
typename T>
40 template<
size_t NDIM,
typename T>
45 template<
size_t NDIM,
typename T>
50 template<
size_t NDIM,
typename T>
57 template<
size_t NDIM,
typename T>
65 template<
size_t NDIM,
typename T>
74 template<
size_t NDIM,
typename T>
83 template<
size_t NDIM,
typename T>
86 assert(y.size() ==
_Ntot);
92 template<
size_t NDIM,
typename T>
101 template<
size_t NDIM,
typename T>
103 std::vector<size_t> ii(NDIM, 0);
104 for(
size_t j = 0, n = 1; j < NDIM; j++, n *=
_N){
111 template<
size_t NDIM,
typename T>
114 for(
size_t j = 0, n = 1; j < NDIM; j++, n *=
_N)
115 index += index_list[j] * n;
117 assert(index <
_Ntot);
123 template<
size_t NDIM,
typename T>
125 return ix +
_N*(iy +
_N*
iz);
129 template<
size_t NDIM,
typename T>
134 template<
size_t NDIM,
typename T>
140 template<
size_t NDIM,
typename T>
146 template<
size_t NDIM,
typename T>
151 BOOST_LOG_TRIVIAL(debug) <<
"==> Dumping grid to file [" << filename <<
"]" << std::endl;
152 BOOST_LOG_TRIVIAL(debug) <<
" Ndim: " << NDIM <<
" N: " <<
_N <<
" Ntot: " <<
_Ntot << std::endl;
155 std::ofstream fout(filename.c_str(), std::ios::out | std::ios::binary);
156 fout.write((
char*)&
_N,
sizeof(
size_t));
157 fout.write((
char*)&ndim,
sizeof(
size_t));
160 fout.write((
char*)&
_y[0],
_y.size() *
sizeof(
T));
164 template<
size_t NDIM,
typename T>
166 size_t ninfile = 0, ntot = 0, ndim = 0, size = 0;
169 std::ifstream input(filename.c_str(), std::ios::in | std::ifstream::binary);
171 input.read((
char *) &ninfile,
sizeof(
size_t));
172 input.read((
char *) &ndim,
sizeof(
size_t));
174 ntot =
power(ninfile, NDIM);
175 size =
sizeof(
T) * ntot;
178 assert(ndim == NDIM);
179 assert(ninfile > 0 && ntot < INT_MAX);
182 BOOST_LOG_TRIVIAL(debug) <<
"==> Reading file into grid [" << filename <<
"]" << std::endl;
183 BOOST_LOG_TRIVIAL(debug) <<
" Ndim: " << ndim <<
" Nfile: " << ninfile <<
" Ntot: " << ntot << std::endl;
186 std::vector<char> tempvec(size, 0);
187 input.read(&tempvec[0], tempvec.size());
192 _y = std::vector<T>(ntot, 0.0);
193 std::memcpy(&
_y[0], &tempvec[0], size);
196 template<
size_t NDIM,
typename T>
size_t power(size_t a, size_t b)
size_t grid_index_2d(size_t ix, size_t iy)
std::vector< size_t > index_list(size_t i)
void dump_to_file(std::string filename)
void set_y(std::vector< T > &y)
size_t grid_index_3d(size_t ix, size_t iy, size_t iz)
const std::vector< T > & get_vec() const
size_t grid_index(std::vector< size_t > &index_list)
void read_from_file(std::string filename)
float pow(float base, unsigned long int exp)
void check_for_nan(bool exitifnan)
auto value(T const &val) -> Generator< T >