When a node is created in MRCPP, 8 siblings are created each time. Each MWNode object contains a group of 8 functions, typically 1 scaling and 7 wavelet functions.
This coarse granularity means that functions are described using lots of coefficients which could be neglected.
This become apparent when reading a MW function provided by MADNESS: A set of nodes described by the values at the quadrature points was provided. MRCPP requires to create a tree which is almost 8 times as large (measured by number of coefficients) to describe the same identical tree. This is because in MRCPP each leaf node must contain a set of 8 "siblings" MW functions, even if 7 of those functions were not required (and the value of their coefficents is zero).
A more optimal description of a MWNode would not only reduce the memory footprint, but probably also make the code much faster.
When a node is created in MRCPP, 8 siblings are created each time. Each MWNode object contains a group of 8 functions, typically 1 scaling and 7 wavelet functions.
This coarse granularity means that functions are described using lots of coefficients which could be neglected.
This become apparent when reading a MW function provided by MADNESS: A set of nodes described by the values at the quadrature points was provided. MRCPP requires to create a tree which is almost 8 times as large (measured by number of coefficients) to describe the same identical tree. This is because in MRCPP each leaf node must contain a set of 8 "siblings" MW functions, even if 7 of those functions were not required (and the value of their coefficents is zero).
A more optimal description of a MWNode would not only reduce the memory footprint, but probably also make the code much faster.