24#pragma omp declare reduction(+ : Ensign::multi_array<double, 2> : omp_out += omp_in) \
25 initializer(omp_priv = decltype(omp_orig)(omp_orig))
29#pragma omp declare reduction(+ : Ensign::multi_array<double, 4> : omp_out += omp_in) \
30 initializer(omp_priv = decltype(omp_orig)(omp_orig))
37template <
class T>
struct node {
48 node(
const std::string _id,
node*
const _parent, std::array<node*, 2> _child,
49 const Index _r_in,
const Index _n_basisfunctions)
71 const Index _r_in,
const std::array<Index, 2> _r_out,
72 const Index _n_basisfunctions)
73 :
node<T>(_id, _parent, {
nullptr,
nullptr}, _r_in, _n_basisfunctions),
74 Q({_r_out[0], _r_out[1], _r_in}),
G({_r_out[0], _r_out[1], _r_in})
89 void Write(
int ncid,
int id_r_in, std::array<int, 2> id_r_out)
const;
101 :
node<T>(_id, _parent, {
nullptr,
nullptr}, _r_in, _n_basisfunctions),
114 void Write(
int ncid,
int id_r_in,
int id_dx)
const;
126 Ensign::Tensor::matricize<2>(Q, Qmat);
128 Ensign::Tensor::tensorize<2>(Qmat, Q);
Computes weighted coefficients and integrals of low-rank factors (the c and d factors in the notation...
Provides two-factor (i.e. matrix) low-rank types and their operations.
Declares dense matrix and vector operations, including BLAS wrappers.
multi_array< T, 2 > orthogonalize(multi_array< T, 2 > &input, const Index n_basisfunctions, const T weight, const Ensign::Matrix::blas_ops &blas)
Core namespace for Ensign's numerical algorithms and data structures.
Provides a NetCDF writer for simulation output.
Provides contiguous multidimensional arrays for CPU and GPU storage.
Provides matrix and vector operations with optional GPU execution.
Represents a leaf tree node with a basis matrix.
bool IsExternal() const override
bool IsInternal() const override
void Initialize(int ncid) override
void Write(int ncid, int id_r_in, int id_dx) const
Ensign::multi_array< T, 2 > orthogonalize(const T weight, const Ensign::Matrix::blas_ops &blas)
Ensign::multi_array< T, 2 > X
Index ProblemSize() const
external_node(const std::string _id, internal_node< T > *const _parent, const Index _dx, const Index _r_in, const Index _n_basisfunctions)
Represents an internal tree node with a coefficient tensor.
std::array< Index, 2 > RankOut() const
Ensign::multi_array< T, 2 > orthogonalize(const T weight, const Ensign::Matrix::blas_ops &blas)
internal_node(const std::string _id, internal_node *const _parent, const Index _r_in, const std::array< Index, 2 > _r_out, const Index _n_basisfunctions)
bool IsInternal() const override
void Initialize(int ncid) override
Ensign::multi_array< T, 3 > G
void Write(int ncid, int id_r_in, std::array< int, 2 > id_r_out) const
Ensign::multi_array< T, 3 > Q
bool IsExternal() const override
Dense d-dimensional array stored contiguously in column-major order (i.e.
array< Index, d > shape() const
Base class for a node in a tree tensor network.
virtual bool IsExternal() const =0
virtual bool IsInternal() const =0
Ensign::multi_array< T, 2 > S
std::array< node *, 2 > child
node(const std::string _id, node *const _parent, std::array< node *, 2 > _child, const Index _r_in, const Index _n_basisfunctions)
virtual void Initialize(int ncid)=0
const Index n_basisfunctions
Orthogonalizes Q and returns the corresponding upper triangular matrix R.
Provides tensor matricization, tensorization, and orthogonalization.
Provides elapsed-time measurement and named timers.