20 template<
size_t NDIM,
typename T>
34 Grid(
size_t N,
T yini);
39 const std::vector<T>&
get_vec()
const;
49 void set_y(std::vector<T> &y);
60 size_t grid_index(std::vector<size_t> &index_list);
72 double maxval = std::norm(_y[0]);
74 #pragma omp parallel for reduction(max: maxval) 76 for(
size_t i = 0; i <
_Ntot; i++){
77 double curval = std::norm(_y[i]);
78 if(curval > maxval) maxval = curval;
85 double minval = std::norm(_y[0]);
87 #pragma omp parallel for reduction(min: minval) 89 for(
size_t i = 0; i <
_Ntot; i++){
90 double curval = std::norm(_y[i]);
91 if(curval < minval) minval = curval;
100 template<
size_t NNDIM,
typename TT>
103 assert(this->_N == rhs.
_N);
106 #pragma omp parallel for 108 for(
size_t i = 0; i <
_Ntot; i++)
109 this->_y[i] += rhs.
_y[i];
114 template<
size_t NNDIM,
typename TT>
117 assert(this->_N == rhs.
_N);
120 #pragma omp parallel for 122 for(
size_t i = 0; i <
_Ntot; i++)
123 this->_y[i] -= rhs.
_y[i];
128 template<
size_t NNDIM,
typename TT>
131 assert(this->_N == rhs.
_N);
134 #pragma omp parallel for 136 for(
size_t i = 0; i <
_Ntot; i++)
137 this->_y[i] *= rhs.
_y[i];
142 template<
size_t NNDIM,
typename TT>
145 assert(this->_N == rhs.
_N);
148 #pragma omp parallel for 150 for(
size_t i = 0; i <
_Ntot; i++)
151 this->_y[i] /= rhs.
_y[i];
158 #pragma omp parallel for 160 for(
size_t i = 0; i <
_Ntot; i++)
168 #pragma omp parallel for 170 for(
size_t i = 0; i <
_Ntot; i++)
182 template<
size_t NDIM,
typename T>
188 template<
size_t NDIM,
typename T>
194 template<
size_t NDIM,
typename T>
200 template<
size_t NDIM,
typename T>
206 template<
size_t NDIM,
typename T>
212 template<
size_t NDIM,
typename T>
218 template<
size_t NDIM,
typename T>
224 template<
size_t NDIM,
typename T>
230 template<
size_t NDIM,
typename T>
232 for(
size_t i = 0; i < lhs.
get_Ntot(); i++)
233 lhs[i] =
sqrt(fabs(lhs[i]));
237 template<
size_t NDIM,
typename T>
241 #pragma omp parallel for reduction(+:rms) 243 for(
size_t i = 0; i <
_Ntot; i++){
244 rms += std::norm(
_y[i]);
size_t grid_index_2d(size_t ix, size_t iy)
Grid< NDIM, T > operator/(Grid< NDIM, T > lhs, const Grid< NDIM, T > &rhs)
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)
Grid< NDIM, T > operator*(Grid< NDIM, T > lhs, const Grid< NDIM, T > &rhs)
const std::vector< T > & get_vec() const
size_t grid_index(std::vector< size_t > &index_list)
Grid< NDIM, T > sqrt(Grid< NDIM, T > lhs)
Grid< NNDIM, TT > & operator+=(const Grid< NNDIM, TT > &rhs)
Grid< NDIM, T > operator-(Grid< NDIM, T > lhs, const Grid< NDIM, T > &rhs)
void read_from_file(std::string filename)
Grid< NNDIM, TT > & operator*=(const Grid< NNDIM, TT > &rhs)
Grid< NNDIM, TT > & operator/=(const Grid< NNDIM, TT > &rhs)
void check_for_nan(bool exitifnan)
auto value(T const &val) -> Generator< T >
Grid< NDIM, T > operator+(Grid< NDIM, T > lhs, const Grid< NDIM, T > &rhs)
Grid< NNDIM, TT > & operator-=(const Grid< NNDIM, TT > &rhs)