14 for (
int i = 0; i <
b; i++) {
21template <
typename T, std::
size_t NDIM>
class FunctionIO {
30 const auto &coeffs =
f.get_impl()->get_coeffs();
32 for (
auto it = coeffs.begin(); it != coeffs.end(); ++it) {
33 const auto &key = it->first;
34 const auto &node = it->second;
35 if (node.has_coeff()) {
39 f.get_impl()->world.gop.sum(count);
43 std::ostream &out,
const Key<NDIM> &key) {
44 const auto &coeffs =
f.get_impl()->get_coeffs();
45 auto it = coeffs.find(key).get();
46 if (it == coeffs.end()) {
47 for (
int i = 0; i < key.
level(); ++i)
49 out << key <<
" missing --> " << coeffs.owner(key) <<
"\n";
51 const auto &node = it->second;
52 if (node.has_coeff()) {
53 auto values =
f.get_impl()->coeffs2values(key, node.coeff());
54 for (
int i = 0; i < key.
level(); ++i)
56 out << key.
level() <<
" ";
57 for (
int i = 0; i <
NDIM; ++i)
63 for (
size_t i = 0; i < values.size(); i++)
64 out << values.ptr()[i] <<
" ";
68 if (node.has_children()) {
79 auto flags = out.flags();
80 auto precision = out.precision();
81 out << std::setprecision(17);
82 out << std::scientific;
84 if (
f.get_impl()->world.rank() == 0) {
85 out <<
NDIM << std::endl;
87 for (
int d = 0;
d <
NDIM; ++
d) {
88 for (
int i = 0; i < 2; ++i)
89 out << cell(
d, i) <<
" ";
92 out <<
f.k() << std::endl;
97 f.get_impl()->world.gop.fence();
99 out << std::setprecision(precision);
104 int num_leaf_nodes) {
105 auto &coeffs =
f.get_impl()->get_coeffs();
107 for (
int i = 0; i < num_leaf_nodes; i++) {
115 for (
int i = 0; i <
NDIM; ++i) {
122 for (
size_t i = 0; i < values.
size(); i++)
123 in >> values.
ptr()[i];
124 auto t =
f.get_impl()->values2coeffs(key, values);
137 for (
int d = 0;
d <
NDIM; ++
d) {
138 for (
int i = 0; i < 2; ++i)
146 in >> num_leaf_nodes;
167 std::array<std::pair<double, double>,
NDIM>
cell;
169 std::vector<std::array<long, NDIM + 1>>
nl;
170 std::vector<std::vector<double>>
values;
180 if (
f.get_impl()->world.rank() == 0) {
185 for (
int d = 0;
d <
NDIM; ++
d) {
186 cell[
d].first = cell_world(
d, 0);
187 cell[
d].second = cell_world(
d, 1);
192 f.get_impl()->world.gop.fence();
200 const auto &coeffs =
f.get_impl()->get_coeffs();
201 auto it = coeffs.find(key).get();
202 if (it == coeffs.end()) {
203 for (
int i = 0; i < key.
level(); ++i)
205 std::cout << key <<
" missing --> " << coeffs.owner(key) <<
"\n";
208 auto cdata =
f.get_impl()->get_cdata();
211 const size_t npt = qx.
dim(0);
212 const auto &node = it->second;
213 if (node.has_coeff()) {
216 const double h = std::pow(0.5,
double(n));
219 auto node_values =
f.get_impl()->coeffs2values(key, node.coeff());
220 std::array<long, NDIM + 1> key_i;
221 key_i[0] = key.
level();
223 for (
int i = 0; i <
NDIM; ++i)
227 coords.push_back(std::vector<coordT>());
230 for (
long i = 0; i <
k; ++i) {
231 c[0] =
cell(0, 0) +
h * cell_width[0] * (l[0] + qx(i));
234 }
else if (
NDIM == 2) {
235 for (
long i = 0; i <
k; ++i) {
236 c[0] =
cell(0, 0) +
h * cell_width[0] * (l[0] + qx(i));
237 for (
long j = 0; j <
k; ++j) {
238 c[1] =
cell(1, 0) +
h * cell_width[1] * (l[1] + qx(j));
242 }
else if (
NDIM == 3) {
243 for (
long j = 0; j <
k; ++j) {
244 c[1] =
cell(1, 0) +
h * cell_width[1] * (l[1] + qx(j));
245 for (
long m = 0;
m <
k; ++
m) {
246 c[2] =
cell(2, 0) +
h * cell_width[2] * (l[2] + qx(
m));
258 std::copy(node_values.ptr(), node_values.ptr() +
npts_per_box,
261 values.push_back(values_i);
263 if (node.has_children()) {
271 auto &coeffs =
f.get_impl()->get_coeffs();
277 for (
int i = 0; i <
NDIM; ++i) {
282 for (
int j = 0; j <
NDIM; ++j) {
288 std::copy(this->values[i].begin(), this->values[i].end(),
values.
ptr());
289 auto t =
f.get_impl()->values2coeffs(key,
values);
301 for (
int d = 0;
d <
NDIM; ++
d) {
302 cell_t(
d, 0) =
cell[
d].first;
303 cell_t(
d, 1) =
cell[
d].second;
320template <
typename T, std::
size_t NDIM>
322 j =
json{{
"npts_per_box",
p.npts_per_box},
323 {
"num_leaf_nodes",
p.num_leaf_nodes},
328 {
"coords",
p.coords},
329 {
"values",
p.values}};
332template <
typename T, std::
size_t NDIM>
334 j.at(
"npts_per_box").get_to(
p.npts_per_box);
335 j.at(
"k").get_to(
p.k);
336 j.at(
"cell").get_to(
p.cell);
337 j.at(
"num_leaf_nodes").get_to(
p.num_leaf_nodes);
338 j.at(
"nl").get_to(
p.nl);
339 j.at(
"values").get_to(
p.values);
340 j.at(
"ndim").get_to(
p.ndim);
constexpr int simple_pow(int a, int b)
Definition FunctionIO2.h:9
constexpr int simple_pow(int a, int b)
Definition FunctionIOHDF5.h:10
Definition FunctionIO.h:20
static void write_function(const Function< T, NDIM > &f, std::ostream &out)
Definition FunctionIO2.h:75
static size_t count_leaf_nodes(const Function< T, NDIM > &f)
Definition FunctionIO2.h:29
static void write_function_coeffs(const Function< T, NDIM > &f, std::ostream &out, const Key< NDIM > &key)
Definition FunctionIO2.h:42
long npts_per_box
Definition FunctionIO.h:25
long k
Definition FunctionIO.h:23
static void read_function_coeffs(Function< T, NDIM > &f, std::istream &in, int num_leaf_nodes)
Definition FunctionIO2.h:103
static Function< T, NDIM > read_function(World &world, std::istream &in)
Definition FunctionIO2.h:131
long ndims
Definition FunctionIO.h:24
long dim(int i) const
Returns the size of dimension i.
Definition basetensor.h:147
long size() const
Returns the number of elements in the tensor.
Definition basetensor.h:138
static int get_k()
Returns the default wavelet order.
Definition funcdefaults.h:163
static const Tensor< double > & get_cell_width()
Returns the width of each user cell dimension.
Definition funcdefaults.h:369
static void set_cell(const Tensor< double > &value)
Gets the user cell for the simulation.
Definition funcdefaults.h:354
static const Tensor< double > & get_cell()
Gets the user cell for the simulation.
Definition funcdefaults.h:347
FunctionFactory implements the named-parameter idiom for Function.
Definition function_factory.h:86
virtual FunctionFactory & k(int k)
Definition function_factory.h:193
FunctionFactory & empty()
Definition function_factory.h:246
FunctionNode holds the coefficients, etc., at each node of the 2^NDIM-tree.
Definition funcimpl.h:127
A multiresolution adaptive numerical function.
Definition mra.h:139
Iterates in lexical order thru all children of a key.
Definition key.h:466
Key is the index for a node of the 2^NDIM-tree.
Definition key.h:69
Level level() const
Definition key.h:168
const Vector< Translation, NDIM > & translation() const
Definition key.h:173
A tensor is a multidimensional array.
Definition tensor.h:317
T * ptr()
Returns a pointer to the internal data.
Definition tensor.h:1825
A simple, fixed dimension vector.
Definition vector.h:64
void fence(bool debug=false)
Synchronizes all processes in communicator AND globally ensures no pending AM or tasks.
Definition worldgop.cc:161
A parallel world class.
Definition world.h:132
WorldGopInterface & gop
Global operations.
Definition world.h:207
char * p(char *buf, const char *name, int k, int initial_level, double thresh, int order)
Definition derivatives.cc:72
Provides FunctionDefaults and utilities for coordinate transformation.
#define MADNESS_CHECK(condition)
Check a condition — even in a release build the condition is always evaluated so it can have side eff...
Definition madness_exception.h:182
#define MADNESS_EXCEPTION(msg, value)
Macro for throwing a MADNESS exception.
Definition madness_exception.h:119
Main include file for MADNESS and defines Function interface.
Namespace for all elements and tools of MADNESS.
Definition DFParameters.h:10
int Level
Definition key.h:58
NDIM & f
Definition mra.h:2481
void to_json(nlohmann::json &j)
void from_json(const nlohmann::json &, ResponseParameters &p)
Definition response_parameters.cpp:8
static const double b
Definition nonlinschro.cc:119
static const double d
Definition nonlinschro.cc:121
static const double a
Definition nonlinschro.cc:118
static const double c
Definition relops.cc:10
static const double m
Definition relops.cc:9
nlohmann::json json
Definition response_parameters.cpp:6
Definition FunctionIO.h:158
std::vector< std::array< long, NDIM+1 > > nl
Definition FunctionIO.h:165
FunctionIOData(const Function< T, NDIM > &f)
Definition FunctionIO2.h:175
long npts_per_box
Definition FunctionIO.h:161
int Level
Definition FunctionIO2.h:162
std::array< std::pair< double, double >, NDIM > cell
Definition FunctionIO.h:163
std::vector< std::vector< coordT > > coords
Definition FunctionIO2.h:171
Vector< double, NDIM > coordT
Type of vector holding coordinates.
Definition FunctionIO2.h:161
Function< T, NDIM > create_function(World &world)
Definition FunctionIO2.h:296
std::size_t ndim
Definition FunctionIO.h:162
long num_leaf_nodes
Definition FunctionIO.h:164
long k
Definition FunctionIO.h:160
void set_function_coeffs(Function< T, NDIM > &f, int num_leaf_nodes)
Definition FunctionIO2.h:270
void initialize_func_coeffs(const Function< T, NDIM > &f, const Key< NDIM > &key)
Definition FunctionIO.h:190
std::vector< std::vector< double > > values
Definition FunctionIO.h:166
constexpr std::size_t NDIM
Definition testgconv.cc:54
double h(const coord_1d &r)
Definition testgconv.cc:175