|
MADNESS 0.10.1
|
Tri-diagonal operator traversing tree primarily for derivative operator. More...
#include <derivative.h>


Classes | |
| struct | submit_op |
Body of FunctionImpl::diff's submission loop, as a functor for taskq.for_each. More... | |
Public Types | |
| typedef std::pair< keyT, coeffT > | argT |
| typedef GenTensor< T > | coeffT |
| holding the node's coeffs (possibly low rank) | |
| typedef WorldContainer< Key< NDIM >, FunctionNode< T, NDIM > > | dcT |
| typedef Function< T, NDIM > | functionT |
| typedef FunctionImpl< T, NDIM > | implT |
| typedef Key< NDIM > | keyT |
| typedef FunctionNode< T, NDIM > | nodeT |
| typedef Tensor< T > | tensorT |
| regular tensors, like rm, etc | |
Public Types inherited from madness::WorldObject< DerivativeBase< T, NDIM > > | |
| typedef WorldObject< DerivativeBase< T, NDIM > > | objT |
Public Member Functions | |
| DerivativeBase (World &world, std::size_t axis, int k, BoundaryConditions< NDIM > bc) | |
| virtual | ~DerivativeBase () |
| void | do_diff1 (const implT *f, implT *df, const keyT &key, const argT &left, const argT ¢er, const argT &right) const |
| virtual void | do_diff2b (const implT *f, implT *df, const keyT &key, const argT &left, const argT ¢er, const argT &right) const =0 |
| virtual void | do_diff2i (const implT *f, implT *df, const keyT &key, const argT &left, const argT ¢er, const argT &right) const =0 |
| Future< argT > | find_neighbor (const implT *f, const Key< NDIM > &key, int step) const |
| void | forward_do_diff1 (const implT *f, implT *df, const keyT &key, const argT &left, const argT ¢er, const argT &right) const |
| Key< NDIM > | neighbor (const keyT &key, int step) const |
| Function< T, NDIM > | operator() (const functionT &f, bool fence=true) const |
| Differentiate w.r.t. given coordinate (x=0, y=1, ...) with optional fence. | |
| template<typename Archive > | |
| void | serialize (const Archive &ar) const |
| void | stage_halo (const implT *f, bool fence=true) const |
| Push f's remote same-level neighbor coefficients to the ranks that will need them. | |
| void | submit_diff_tasks (const implT *f, implT *df) const |
Parallel form of FunctionImpl::diff's submission loop; the caller owns the fence. | |
Public Member Functions inherited from madness::WorldObject< DerivativeBase< T, NDIM > > | |
| WorldObject (const WorldObject &other) | |
| WorldObject (World &world) | |
| Constructor that associates an object (via the derived class) with a globally unique ID. | |
| virtual | ~WorldObject () |
| WorldObject & | operator= (const WorldObject &)=delete |
| detail::task_result_type< memfnT >::futureT | send (ProcessID dest, memfnT memfn) const |
| detail::task_result_type< memfnT >::futureT | send (ProcessID dest, memfnT memfn, const a1T &a1) const |
| detail::task_result_type< memfnT >::futureT | send (ProcessID dest, memfnT memfn, const a1T &a1, const a2T &a2) const |
| detail::task_result_type< memfnT >::futureT | send (ProcessID dest, memfnT memfn, const a1T &a1, const a2T &a2, const a3T &a3) const |
| detail::task_result_type< memfnT >::futureT | send (ProcessID dest, memfnT memfn, const a1T &a1, const a2T &a2, const a3T &a3, const a4T &a4) const |
| detail::task_result_type< memfnT >::futureT | send (ProcessID dest, memfnT memfn, const a1T &a1, const a2T &a2, const a3T &a3, const a4T &a4, const a5T &a5) const |
| detail::task_result_type< memfnT >::futureT | send (ProcessID dest, memfnT memfn, const a1T &a1, const a2T &a2, const a3T &a3, const a4T &a4, const a5T &a5, const a6T &a6) const |
| detail::task_result_type< memfnT >::futureT | send (ProcessID dest, memfnT memfn, const a1T &a1, const a2T &a2, const a3T &a3, const a4T &a4, const a5T &a5, const a6T &a6, const a7T &a7) const |
| detail::task_result_type< memfnT >::futureT | send (ProcessID dest, memfnT memfn, const a1T &a1, const a2T &a2, const a3T &a3, const a4T &a4, const a5T &a5, const a6T &a6, const a7T &a7, const a8T &a8) const |
| detail::task_result_type< memfnT >::futureT | send (ProcessID dest, memfnT memfn, const a1T &a1, const a2T &a2, const a3T &a3, const a4T &a4, const a5T &a5, const a6T &a6, const a7T &a7, const a8T &a8, const a9T &a9) const |
| detail::task_result_type< memfnT >::futureT | task (ProcessID dest, memfnT memfn, const a1T &a1, const a2T &a2, const a3T &a3, const a4T &a4, const a5T &a5, const a6T &a6, const a7T &a7, const a8T &a8, const a9T &a9, const TaskAttributes &attr=TaskAttributes()) const |
Sends task to derived class method returnT (this->*memfn)(a1,a2,a3,a4,a5,a6,a7,a8,a9). | |
| detail::task_result_type< memfnT >::futureT | task (ProcessID dest, memfnT memfn, const a1T &a1, const a2T &a2, const a3T &a3, const a4T &a4, const a5T &a5, const a6T &a6, const a7T &a7, const a8T &a8, const TaskAttributes &attr=TaskAttributes()) const |
Sends task to derived class method returnT (this->*memfn)(a1,a2,a3,a4,a5,a6,a7,a8). | |
| detail::task_result_type< memfnT >::futureT | task (ProcessID dest, memfnT memfn, const a1T &a1, const a2T &a2, const a3T &a3, const a4T &a4, const a5T &a5, const a6T &a6, const a7T &a7, const TaskAttributes &attr=TaskAttributes()) const |
Sends task to derived class method returnT (this->*memfn)(a1,a2,a3,a4,a5,a6,a7). | |
| detail::task_result_type< memfnT >::futureT | task (ProcessID dest, memfnT memfn, const a1T &a1, const a2T &a2, const a3T &a3, const a4T &a4, const a5T &a5, const a6T &a6, const TaskAttributes &attr=TaskAttributes()) const |
Sends task to derived class method returnT (this->*memfn)(a1,a2,a3,a4,a5,a6). | |
| detail::task_result_type< memfnT >::futureT | task (ProcessID dest, memfnT memfn, const a1T &a1, const a2T &a2, const a3T &a3, const a4T &a4, const a5T &a5, const TaskAttributes &attr=TaskAttributes()) const |
Sends task to derived class method returnT (this->*memfn)(a1,a2,a3,a4,a5). | |
| detail::task_result_type< memfnT >::futureT | task (ProcessID dest, memfnT memfn, const a1T &a1, const a2T &a2, const a3T &a3, const a4T &a4, const TaskAttributes &attr=TaskAttributes()) const |
Sends task to derived class method returnT (this->*memfn)(a1,a2,a3,a4). | |
| detail::task_result_type< memfnT >::futureT | task (ProcessID dest, memfnT memfn, const a1T &a1, const a2T &a2, const a3T &a3, const TaskAttributes &attr=TaskAttributes()) const |
Sends task to derived class method returnT (this->*memfn)(a1,a2,a3). | |
| detail::task_result_type< memfnT >::futureT | task (ProcessID dest, memfnT memfn, const a1T &a1, const a2T &a2, const TaskAttributes &attr=TaskAttributes()) const |
Sends task to derived class method returnT (this->*memfn)(a1,a2). | |
| detail::task_result_type< memfnT >::futureT | task (ProcessID dest, memfnT memfn, const a1T &a1, const TaskAttributes &attr=TaskAttributes()) const |
Sends task to derived class method returnT (this->*memfn)(a1). | |
| detail::task_result_type< memfnT >::futureT | task (ProcessID dest, memfnT memfn, const TaskAttributes &attr=TaskAttributes()) const |
Sends task to derived class method returnT (this->*memfn)(). | |
Public Member Functions inherited from madness::WorldObjectBase | |
| virtual | ~WorldObjectBase () |
| World & | get_world () const |
| World & | get_world_noexcept () const noexcept |
| Get the world to which this object belongs, without risking a throw. | |
| const uniqueidT & | id () const |
| Returns the globally unique object ID. | |
| bool | world_is_alive () const noexcept |
| Reports whether the world to which this object belongs still exists. | |
Static Public Member Functions | |
| static bool | enforce_bc (int bc_left, int bc_right, Level n, Translation &l) |
Public Attributes | |
| bool | parallel_submit_ = false |
Spawn diff's per-node tasks from the task pool instead of the main thread. | |
Protected Attributes | |
| const std::size_t | axis |
| Axis along which the operation is performed. | |
| const BoundaryConditions< NDIM > | bc |
| const int | k |
| Number of wavelets of the function. | |
| const std::vector< long > | vk |
| (k,...) used to initialize Tensors | |
| World & | world |
Private Types | |
| typedef WorldObject< DerivativeBase< T, NDIM > > | woT |
Friends | |
| class | FunctionImpl< T, NDIM > |
Additional Inherited Members | |
Protected Member Functions inherited from madness::WorldObject< DerivativeBase< T, NDIM > > | |
| void | process_pending () |
| To be called from derived constructor to process pending messages. | |
Protected Member Functions inherited from madness::WorldObjectBase | |
| WorldObjectBase (const WorldObjectBase &other) | |
| Copy constructor; produces an unregistered object. | |
| WorldObjectBase (World &w) | |
| Construct a new WorldObjectBase. | |
| World & | get_world_unchecked () const noexcept |
| Unchecked access to the memoized world reference. | |
| template<typename DerivedT > | |
| void | register_self (DerivedT *this_ptr) |
| Registers this object with its world, making it globally addressable. | |
Tri-diagonal operator traversing tree primarily for derivative operator.
| typedef std::pair<keyT,coeffT> madness::DerivativeBase< T, NDIM >::argT |
| typedef GenTensor<T> madness::DerivativeBase< T, NDIM >::coeffT |
holding the node's coeffs (possibly low rank)
| typedef WorldContainer<Key<NDIM> , FunctionNode<T, NDIM> > madness::DerivativeBase< T, NDIM >::dcT |
| typedef Function<T,NDIM> madness::DerivativeBase< T, NDIM >::functionT |
| typedef FunctionImpl<T,NDIM> madness::DerivativeBase< T, NDIM >::implT |
| typedef FunctionNode<T,NDIM> madness::DerivativeBase< T, NDIM >::nodeT |
| typedef Tensor<T> madness::DerivativeBase< T, NDIM >::tensorT |
regular tensors, like rm, etc
|
private |
|
inline |
|
inlinevirtual |
|
inline |
References madness::DerivativeBase< T, NDIM >::axis, madness::f, madness::DerivativeBase< T, NDIM >::forward_do_diff1(), madness::FunctionImpl< T, NDIM >::get_coeffs(), MADNESS_ASSERT, NDIM, madness::nonlinear_vector_solver(), madness::WorldContainer< keyT, valueT, hashfunT >::replace(), and madness::Key< NDIM >::translation().
|
pure virtual |
Implemented in madness::Derivative< T, NDIM >.
|
pure virtual |
Implemented in madness::Derivative< T, NDIM >.
|
inlinestatic |
|
inline |
References c, madness::f, madness::TaskAttributes::hipri(), madness::DerivativeBase< T, NDIM >::neighbor(), madness::nonlinear_vector_solver(), madness::Future< T >::remote_ref(), madness::FunctionImpl< T, NDIM >::sock_it_to_me(), madness::DerivativeBase< T, NDIM >::vk, and madness::DerivativeBase< T, NDIM >::world.
Referenced by madness::DerivativeBase< T, NDIM >::forward_do_diff1().
|
inline |
References madness::f, madness::DerivativeBase< T, NDIM >::find_neighbor(), madness::TaskAttributes::hipri(), madness::WorldContainer< keyT, valueT, hashfunT >::owner(), madness::World::rank(), madness::WorldObject< DerivativeBase< T, NDIM > >::task(), madness::WorldObject< Derived >::task(), and madness::DerivativeBase< T, NDIM >::world.
Referenced by madness::DerivativeBase< T, NDIM >::do_diff1().
|
inline |
References madness::DerivativeBase< T, NDIM >::axis, madness::DerivativeBase< T, NDIM >::bc, madness::DerivativeBase< T, NDIM >::enforce_bc(), madness::Key< NDIM >::invalid(), madness::Key< NDIM >::level(), and madness::Key< NDIM >::translation().
Referenced by madness::DerivativeBase< T, NDIM >::find_neighbor(), and madness::DerivativeBase< T, NDIM >::stage_halo().
|
inline |
Differentiate w.r.t. given coordinate (x=0, y=1, ...) with optional fence.
Returns a new function with the same distribution
References madness::f, madness::Function< T, NDIM >::get_impl(), MADNESS_CHECK_THROW, madness::reconstructed, madness::Function< T, NDIM >::set_impl(), and VERIFY_TREE.
|
inline |
|
inline |
Push f's remote same-level neighbor coefficients to the ranks that will need them.
Node M is the neighbor of M-1 and M+1, so its owner pushes it to the owners of those keys without being asked, one batched message per destination. This is the axis-specific staging policy for FunctionImpl's halo table; halo_clear() frees the result. The pushes arrive as tasks, so the fence is what separates staging from differentiating.
References d, madness::f, madness::WorldGopInterface::fence(), madness::World::gop, madness::TaskAttributes::hipri(), madness::DerivativeBase< T, NDIM >::neighbor(), madness::nonlinear_vector_solver(), madness::WorldContainer< keyT, valueT, hashfunT >::owner(), madness::World::rank(), madness::FunctionImpl< T, NDIM >::receive_halo(), and madness::DerivativeBase< T, NDIM >::world.
|
inline |
Parallel form of FunctionImpl::diff's submission loop; the caller owns the fence.
References madness::f, madness::nonlinear_vector_solver(), madness::World::taskq, and madness::FunctionImpl< T, NDIM >::world.
|
friend |
|
protected |
Axis along which the operation is performed.
Referenced by madness::Derivative< T, NDIM >::Derivative(), madness::DerivativeBase< T, NDIM >::do_diff1(), madness::Derivative< T, NDIM >::do_diff2b(), madness::Derivative< T, NDIM >::do_diff2i(), madness::Derivative< T, NDIM >::initCoefficients(), and madness::DerivativeBase< T, NDIM >::neighbor().
|
protected |
|
protected |
Number of wavelets of the function.
Referenced by madness::Derivative< T, NDIM >::do_diff2b(), madness::Derivative< T, NDIM >::initCoefficients(), madness::Derivative< T, NDIM >::read_from_file(), madness::Derivative< T, NDIM >::set_ble1(), madness::Derivative< T, NDIM >::set_ble2(), madness::Derivative< T, NDIM >::set_bspline1(), madness::Derivative< T, NDIM >::set_bspline2(), and madness::Derivative< T, NDIM >::set_bspline3().
| bool madness::DerivativeBase< T, NDIM >::parallel_submit_ = false |
Spawn diff's per-node tasks from the task pool instead of the main thread.
The same tasks are produced, so the result is unchanged. Per instance and off by default, since it only pays off when many functions are differentiated at once.
|
protected |
(k,...) used to initialize Tensors
Referenced by madness::DerivativeBase< T, NDIM >::find_neighbor().
|
protected |