21#ifndef _libint2_src_bin_libint_bfset_h_
22#define _libint2_src_bin_libint_bfset_h_
24#include <contractable.h>
25#include <global_macros.h>
27#include <polyconstr.h>
29#include <util_types.h>
46 virtual unsigned int num_bf()
const = 0;
47 virtual std::string label()
const = 0;
67 virtual void inc(
unsigned int xyz,
unsigned int c = 1u) = 0;
70 virtual void dec(
unsigned int xyz,
unsigned int c = 1u) = 0;
72 virtual unsigned int norm()
const = 0;
76 bool valid()
const {
return valid_; }
100template <
unsigned NDIM = 3>
102 static_assert(NDIM == 1 || NDIM == 3,
103 "OriginDerivative<NDIM>: only NDIM=1 or NDIM=3 are supported");
107 for (
auto d = 0u;
d != NDIM; ++
d) d_[
d] = 0u;
110 std::copy(other.d_, other.d_ + NDIM, d_);
113 valid_ = other.valid_;
114 std::copy(other.d_, other.d_ + NDIM, d_);
119 for (
auto d = 0u;
d != NDIM; ++
d) d_[
d] += other.d_[
d];
124 for (
auto d = 0u;
d != NDIM; ++
d) d_[
d] -= other.d_[
d];
128 static_assert(NDIM == 3u || NDIM == 1u,
129 "OriginDerivative with NDIM=1,3 are implemented");
133 unsigned int d(
unsigned int xyz)
const {
138 unsigned int operator[](
unsigned int xyz)
const {
return this->
d(xyz); }
140 void inc(
unsigned int xyz,
unsigned int c = 1u) {
147 void dec(
unsigned int xyz,
unsigned int c = 1u) {
156 unsigned int norm()
const {
return std::accumulate(d_, d_ + NDIM, 0u); }
160 bool valid()
const {
return valid_; }
162 LIBINT2_UINT_LEAST64
key()
const override {
164 unsigned nxy = d_[1] + d_[2];
165 unsigned l = nxy + d_[0];
166 LIBINT2_UINT_LEAST64
key = nxy * (nxy + 1) / 2 + d_[2];
167 const auto result =
key + key_l_offset.at(l);
172 const auto result = d_[0];
180 char result[NDIM + 1];
181 for (
auto xyz = 0u; xyz < NDIM; ++xyz) result[xyz] =
'0' + d_[xyz];
183 return std::string(result);
189 const static unsigned max_deriv = 4;
202 NDIM == 3 ? (1 + max_deriv) * (2 + max_deriv) * (3 + max_deriv) / 6
206 void print(std::ostream& os = std::cout)
const;
213 unsigned int d_[NDIM];
217 static std::array<LIBINT2_UINT_LEAST64, OriginDerivative::max_deriv + 1>
223std::array<LIBINT2_UINT_LEAST64, OriginDerivative<1u>::max_deriv + 1>
224 OriginDerivative<1u>::key_l_offset;
226std::array<LIBINT2_UINT_LEAST64, OriginDerivative<3u>::max_deriv + 1>
227 OriginDerivative<3u>::key_l_offset;
229template <
unsigned NDIM>
230OriginDerivative<NDIM> operator-(
const OriginDerivative<NDIM>& A,
231 const OriginDerivative<NDIM>& B) {
232 OriginDerivative<NDIM> Diff(A);
233 for (
unsigned int xyz = 0; xyz < 3; ++xyz) Diff.dec(xyz, B.d(xyz));
237template <
unsigned NDIM>
238bool operator==(
const OriginDerivative<NDIM>& A,
239 const OriginDerivative<NDIM>& B) {
240 for (
unsigned d = 0; d != NDIM; ++d)
241 if (A.d(d) != B.d(d))
return false;
246template <
unsigned NDIM>
255 public Hashable<LIBINT2_UINT_LEAST64, ReferToKey>,
283 std::string
label()
const override;
286 return (qn_[0] + 1) * (qn_[0] + 2) / 2;
289 unsigned int qn(
unsigned int xyz = 0)
const {
return qn_[0]; }
291 unsigned int operator[](
unsigned int xyz)
const {
return this->
qn(xyz); }
305 void inc(
unsigned int xyz,
unsigned int c = 1u)
override;
307 void dec(
unsigned int xyz,
unsigned int c = 1u)
override;
309 unsigned int norm()
const override;
311 LIBINT2_UINT_LEAST64
key()
const override {
312 if (is_unit())
return max_key - 1;
313 const LIBINT2_UINT_LEAST64 result =
314 ((deriv().
key() * 2 + (contracted() ? 1 : 0)) * (max_qn + 1) + qn_[0]) *
320 const static LIBINT2_UINT_LEAST64 max_qn = LIBINT_CARTGAUSS_MAX_AM;
332 void print(std::ostream& os = std::cout)
const;
336 bool is_unit()
const {
return unit_; }
339CGShell operator+(
const CGShell& A,
const CGShell& B);
340CGShell operator-(
const CGShell& A,
const CGShell& B);
344 public Hashable<LIBINT2_UINT_LEAST64, ComputeKey>,
352 friend CGF operator+(
const CGF& A,
const CGF& B);
353 friend CGF operator-(
const CGF& A,
const CGF& B);
376 std::string
label()
const override;
378 unsigned int num_bf()
const override {
return 1; }
380 unsigned int qn(
unsigned int axis)
const;
381 unsigned int operator[](
unsigned int axis)
const {
return qn(axis); }
395 void inc(
unsigned int xyz,
unsigned int c = 1u)
override;
397 void dec(
unsigned int xyz,
unsigned int c = 1u)
override;
399 unsigned int norm()
const override;
401 LIBINT2_UINT_LEAST64
key()
const override {
402 if (is_unit())
return max_key - 1;
403 unsigned nxy = qn_[1] + qn_[2];
404 unsigned l = nxy + qn_[0];
405 LIBINT2_UINT_LEAST64
key = nxy * (nxy + 1) / 2 + qn_[2];
406 const LIBINT2_UINT_LEAST64 result =
408 key_l_offset.at(l)) *
411 if (result >= max_key - 1) {
412 this->
print(std::cout);
413 std::cout <<
"result,max_key-1 = " << result <<
"," << max_key - 1
415 assert(result < max_key - 1);
424 ((1 + (CGShell::max_qn + 1)) * (2 + (CGShell::max_qn + 1)) *
425 (3 + (CGShell::max_qn + 1)) / 6);
431 const static LIBINT2_UINT_LEAST64 max_key =
435 void print(std::ostream& os = std::cout)
const;
439 bool is_unit()
const {
return unit_; }
444 static std::array<LIBINT2_UINT_LEAST64, CGShell::max_qn + 1> key_l_offset;
447CGF operator+(
const CGF& A,
const CGF& B);
448CGF operator-(
const CGF& A,
const CGF& B);
454template <CartesianAxis Axis>
456 public Hashable<LIBINT2_UINT_LEAST64, ComputeKey>,
463 static constexpr auto axis = Axis;
470 CGF1d() : unit_(false) { qn_[0] = 0; }
471 CGF1d(
unsigned int qn) : unit_(false) { qn_[0] =
qn; }
472 CGF1d(
unsigned int qn[1]) : unit_(false) { qn_[0] =
qn[0]; }
474 : Contractable<
CGF1d>(source),
475 deriv_(source.deriv_),
476 unit_(source.unit_) {
477 qn_[0] = source.qn_[0];
479 explicit CGF1d(
const ConstructablePolymorphically& sptr)
480 : Contractable<
CGF1d>(dynamic_cast<const
CGF1d&>(sptr)) {
481 const CGF1d& sptr_cast =
dynamic_cast<const CGF1d&
>(sptr);
482 qn_[0] = sptr_cast.qn_[0];
483 deriv_ = sptr_cast.deriv_;
484 unit_ = sptr_cast.unit_;
490 qn_[0] = source.qn_[0];
491 deriv_ = source.deriv_;
492 unit_ = source.unit_;
502 Sum.deriv_ += B.deriv_;
508 Diff.dec(0, B.qn(0));
509 Diff.deriv_ -= B.deriv_;
513 const OriginDerivative<1u>& deriv()
const {
return deriv_; }
514 OriginDerivative<1u>& deriv() {
return deriv_; }
517 std::string
label()
const override {
520 std::ostringstream oss;
522 if (!deriv_.
zero()) oss <<
"_" << deriv_.
label();
526 assert(!this->contracted());
532 unsigned int num_bf()
const override {
return 1; }
534 unsigned int qn(
unsigned int dir = 0)
const {
538 unsigned int operator[](
unsigned int dir)
const {
return this->
qn(dir); }
542 return (qn_[0] == a.qn_[0] && this->contracted() == a.contracted() &&
543 deriv_ == a.deriv_ && unit_ == a.unit_);
547 void inc(
unsigned int dir,
unsigned int c = 1u)
override {
550 if (
valid()) qn_[0] += c;
553 void dec(
unsigned int dir,
unsigned int c = 1u)
override {
568 unsigned int norm()
const override {
return qn_[0]; }
570 LIBINT2_UINT_LEAST64
key()
const override {
571 if (is_unit())
return max_key - 1;
572 const LIBINT2_UINT_LEAST64 result =
573 (deriv().
key() * 2ul + (this->contracted() ? 1ul : 0ul)) *
max_num_qn +
575 if (result >= max_key - 1) {
576 this->
print(std::cout);
577 std::cout <<
"result,max_key-1 = " << result <<
"," << max_key - 1
579 assert(result < max_key - 1);
587 const static LIBINT2_UINT_LEAST64
max_num_qn = CGShell::max_qn + 1;
592 const static LIBINT2_UINT_LEAST64 max_key =
598 void print(std::ostream& os = std::cout)
const {
599 os <<
"CGF1d<" <<
to_string(Axis) <<
">: " <<
label() << std::endl;
609 bool is_unit()
const {
return unit_; }
614 static std::array<LIBINT2_UINT_LEAST64, CGShell::max_qn + 1> key_l_offset;
644template <CartesianAxis Axis>
646 public Hashable<LIBINT2_UINT_LEAST64, ComputeKey>,
653 static constexpr auto axis = Axis;
662 CGShell1d(
unsigned int qn[1]) : unit_(false) { qn_[0] =
qn[0]; }
665 deriv_(source.deriv_),
666 unit_(source.unit_) {
667 qn_[0] = source.qn_[0];
669 virtual ~CGShell1d() {}
673 qn_[0] = source.qn_[0];
674 deriv_ = source.deriv_;
675 unit_ = source.unit_;
682 OriginDerivative<1u>& deriv() {
return deriv_; }
685 std::string
label()
const override {
688 std::ostringstream oss;
690 axis_label[0] = std::toupper(axis_label[0]);
691 oss << axis_label << qn_[0];
692 if (!deriv_.
zero()) oss <<
"_" << deriv_.
label();
696 assert(!this->contracted());
702 unsigned int num_bf()
const override {
return qn_[0] + 1; }
704 unsigned int qn(
unsigned int dir = 0)
const {
711 return (qn_[0] == a.qn_[0] && this->contracted() == a.contracted() &&
712 deriv_ == a.deriv_ && unit_ == a.unit_);
716 void inc(
unsigned int dir,
unsigned int c = 1u)
override { assert(
false); }
718 void dec(
unsigned int dir,
unsigned int c = 1u)
override { assert(
false); }
720 unsigned int norm()
const override {
return qn_[0]; }
722 LIBINT2_UINT_LEAST64
key()
const override {
723 if (is_unit())
return max_key - 1;
724 const LIBINT2_UINT_LEAST64 result =
725 (deriv().
key() * 2ul + (this->contracted() ? 1ul : 0ul)) *
max_num_qn +
727 if (result >= max_key - 1) {
728 this->
print(std::cout);
729 std::cout <<
"result,max_key-1 = " << result <<
"," << max_key - 1
731 assert(result < max_key - 1);
739 const static LIBINT2_UINT_LEAST64
max_num_qn = CGShell::max_qn + 1;
744 const static LIBINT2_UINT_LEAST64 max_key =
750 void print(std::ostream& os = std::cout)
const {
751 os <<
"CGShell1d<" <<
to_string(Axis) <<
">: " <<
label() << std::endl;
761 bool is_unit()
const {
return unit_; }
766 static std::array<LIBINT2_UINT_LEAST64, CGShell::max_qn + 1> key_l_offset;
802 unsigned int num_bf()
const {
return 2*qn_[0]+1; };
804 unsigned int qn(
unsigned int m=0)
const {
return qn_[0]; }
810 void inc(
unsigned int xyz,
unsigned int c = 1u);
812 void dec(
unsigned int xyz,
unsigned int c = 1u);
816 unsigned key()
const {
return (deriv().
key() * 2 + (contracted() ? 1 : 0)) * (max_qn+1) + qn_[0]; }
817 const static unsigned max_qn = LIBINT_CARTGAUSS_MAX_AM;
824 void print(std::ostream& os = std::cout)
const;
863 unsigned int num_bf()
const {
return 1; };
865 unsigned int qn(
unsigned int xyz)
const;
871 void inc(
unsigned int xyz,
unsigned int c = 1u);
873 void dec(
unsigned int xyz,
unsigned int c = 1u);
878 unsigned nxy = qn_[1] + qn_[2];
879 unsigned l = nxy + qn_[0];
880 unsigned key = nxy*(nxy+1)/2 + qn_[2];
881 return ( deriv().
key() * 2 + (contracted() ? 1 : 0)) *
max_num_qn +
key + key_l_offset.at(l);
886 const static unsigned max_num_qn = ((1 + (SHGShell::max_qn+1)) * (2 + (SHGShell::max_qn+1)) * (3 + (SHGShell::max_qn+1)) /6);
890 void print(std::ostream& os = std::cout)
const;
894 static unsigned key_l_offset[SHGShell::max_key+2];
909 static const bool result =
false;
913 static const bool result =
true;
915template <CartesianAxis Axis>
917 static const bool result =
false;
919template <CartesianAxis Axis>
921 static const bool result =
true;
926 static const bool result =
false;
930 static const bool result =
true;
Set of basis functions.
Definition bfset.h:43
Cartesian components of 3D CGF = 1D CGF.
Definition bfset.h:457
LIBINT2_UINT_LEAST64 key() const override
Implements Hashable<LIBINT2_UINT_LEAST64>::key()
Definition bfset.h:570
CGF1d & operator=(const CGF1d &source)
assignment
Definition bfset.h:489
static const LIBINT2_UINT_LEAST64 max_num_qn
The range of keys is [0,max_key).
Definition bfset.h:587
unsigned int norm() const override
Implements IncableBFSet::norm()
Definition bfset.h:568
unsigned int num_bf() const override
Returns the number of basis functions in the set (always 1)
Definition bfset.h:532
void inc(unsigned int dir, unsigned int c=1u) override
Implementation of IncableBFSet::inc().
Definition bfset.h:547
static CGF1d unit()
returns the unit shell (exponent=0, am=0, indicated by unit_=true)
Definition bfset.h:603
void print(std::ostream &os=std::cout) const
Print out the content.
Definition bfset.h:598
std::string label() const override
Return a compact label.
Definition bfset.h:517
CGF1d iter_type
As far as SetIterator is concerned, CGF1d is a set of one CGF1d.
Definition bfset.h:466
unsigned int qn(unsigned int dir=0) const
Returns the quantum number (what used to be "angular momentum")
Definition bfset.h:534
bool operator==(const CGF1d &a) const
Comparison operator.
Definition bfset.h:541
void dec(unsigned int dir, unsigned int c=1u) override
Implementation of IncableBFSet::dec().
Definition bfset.h:553
CGF1d()
Default constructor makes an qn=0 Gaussian.
Definition bfset.h:470
3D Cartesian Gaussian Function
Definition bfset.h:345
void print(std::ostream &os=std::cout) const
Print out the content.
Definition gauss.cc:176
unsigned int qn(unsigned int axis) const
Returns the quantum number along axis.
Definition gauss.cc:134
CGF & operator=(const CGF &)
assignment
Definition gauss.cc:145
unsigned int norm() const override
Implements IncableBFSet::norm()
Definition gauss.cc:174
bool operator==(const CGF &) const
Comparison operator.
Definition gauss.cc:139
LIBINT2_UINT_LEAST64 key() const override
Implements Hashable<LIBINT2_UINT_LEAST64>::key()
Definition bfset.h:401
static CGF unit()
returns the unit shell (exponent=0, am=0, indicated by unit_=true)
Definition gauss.cc:195
void dec(unsigned int xyz, unsigned int c=1u) override
Implementation of IncableBFSet::dec().
Definition gauss.cc:155
CGF iter_type
As far as SetIterator is concerned, CGF is a set of one CGF.
Definition bfset.h:357
unsigned int num_bf() const override
Returns the number of basis functions in the set (always 1)
Definition bfset.h:378
CGF()
How to return key.
Definition gauss.cc:84
std::string label() const override
Return a compact label.
Definition gauss.cc:111
void pure_sh(bool p)
Definition bfset.h:389
static const LIBINT2_UINT_LEAST64 max_num_qn
The range of keys is [0,max_key).
Definition bfset.h:423
bool pure_sh() const
contains only solid harmonics with the same quantum number as this shell? (this may permit simplified...
Definition bfset.h:386
void inc(unsigned int xyz, unsigned int c=1u) override
Implementation of IncableBFSet::inc().
Definition gauss.cc:169
a "shell" of 1D CGFs with quantum number L is a set of 1D CGFs with quantum numbers 0 .
Definition bfset.h:647
void inc(unsigned int dir, unsigned int c=1u) override
Implementation of IncableBFSet::inc().
Definition bfset.h:716
static const LIBINT2_UINT_LEAST64 max_num_qn
The range of keys is [0,max_key).
Definition bfset.h:739
bool operator==(const CGShell1d &a) const
Comparison operator.
Definition bfset.h:710
unsigned int num_bf() const override
Returns the number of basis functions in the set (always 1)
Definition bfset.h:702
unsigned int qn(unsigned int dir=0) const
Returns the quantum number (what used to be "angular momentum")
Definition bfset.h:704
LIBINT2_UINT_LEAST64 key() const override
Implements Hashable<LIBINT2_UINT_LEAST64>::key()
Definition bfset.h:722
CGShell1d()
Default constructor makes a qn=0 shell.
Definition bfset.h:660
std::string label() const override
Return a compact label.
Definition bfset.h:685
void print(std::ostream &os=std::cout) const
Print out the content.
Definition bfset.h:750
static CGShell1d unit()
returns the unit shell (exponent=0, am=0, indicated by unit_=true)
Definition bfset.h:755
CGShell1d & operator=(const CGShell1d &source)
assignment
Definition bfset.h:672
unsigned int norm() const override
Implements IncableBFSet::norm()
Definition bfset.h:720
void dec(unsigned int dir, unsigned int c=1u) override
Implementation of IncableBFSet::dec().
Definition bfset.h:718
CGF1d< Axis > iter_type
CGShell1d is a set CGF1d's.
Definition bfset.h:656
3D Cartesian Gaussian Shell
Definition bfset.h:256
bool operator==(const CGShell &) const
Comparison operator.
Definition gauss.cc:242
CGShell()
Default constructor creates an s-type shell.
Definition gauss.cc:205
LIBINT2_UINT_LEAST64 key() const override
Implements Hashable<LIBINT2_UINT_LEAST64>::key()
Definition bfset.h:311
std::string label() const override
Return a compact label.
Definition gauss.cc:224
bool pure_sh() const
contains only solid harmonics with the same quantum number as this shell? (this may permit simplified...
Definition bfset.h:299
void dec(unsigned int xyz, unsigned int c=1u) override
Implementation of IncableBFSet::dec().
Definition gauss.cc:247
unsigned int qn(unsigned int xyz=0) const
Returns the angular momentum.
Definition bfset.h:289
unsigned int operator[](unsigned int xyz) const
returns the angular momentum
Definition bfset.h:291
static const LIBINT2_UINT_LEAST64 max_key
The range of keys is [0,max_key] deriv_key_range = OriginDerivative<3u>::max_key contracted = 2 (yes ...
Definition bfset.h:328
void pure_sh(bool p)
Definition bfset.h:302
void print(std::ostream &os=std::cout) const
Print out the content.
Definition gauss.cc:268
static CGShell unit()
returns the unit shell (exponent=0, am=0, indicated by pure_sh=true)
Definition gauss.cc:288
unsigned int num_bf() const override
Returns the number of basis functions in the set.
Definition bfset.h:285
void inc(unsigned int xyz, unsigned int c=1u) override
Implementation of IncableBFSet::inc().
Definition gauss.cc:261
CGF iter_type
As far as SetIterator is concerned, CGShell is a set of CGFs.
Definition bfset.h:269
unsigned int norm() const override
Implements IncableBFSet::norm()
Definition gauss.cc:266
ConstructablePolymorphically is a base for all objects which can be constructed using a std::shared_p...
Definition polyconstr.h:30
use this as a base to add to Derived a "contracted()" attribute
Definition contractable.h:28
Objects of Hashable<T> class provide hashing function key() which computes keys of type KeyType.
Definition hashable.h:79
Set of basis functions with incrementable/decrementable quantum numbers.
Definition bfset.h:62
bool valid() const
Return false if this object is invalid.
Definition bfset.h:76
virtual unsigned int norm() const =0
Returns the norm of the quantum numbers.
void invalidate()
make this object invalid
Definition bfset.h:82
virtual void inc(unsigned int xyz, unsigned int c=1u)=0
Add c quanta along xyz.
virtual void dec(unsigned int xyz, unsigned int c=1u)=0
Subtract c quanta along xyz.
bool zero() const
norm() == 0
Definition bfset.h:74
Represents cartesian derivatives of atom-centered basis functions.
Definition bfset.h:101
static const unsigned max_key
The range of keys is [0,max_key).
Definition bfset.h:201
unsigned int operator[](unsigned int xyz) const
returns the number of quanta along xyz
Definition bfset.h:138
bool zero() const
norm() == 0
Definition bfset.h:158
void dec(unsigned int xyz, unsigned int c=1u)
Subtract c quanta along xyz.
Definition bfset.h:147
bool valid() const
Return false if this object is invalid.
Definition bfset.h:160
unsigned int norm() const
Returns the norm of the quantum numbers.
Definition bfset.h:156
void print(std::ostream &os=std::cout) const
Print out the content.
unsigned int d(unsigned int xyz) const
returns the number of quanta along xyz
Definition bfset.h:133
std::string label() const
Return a compact label.
Definition bfset.h:179
LIBINT2_UINT_LEAST64 key() const override
Implements Hashable<unsigned>::key()
Definition bfset.h:162
void inc(unsigned int xyz, unsigned int c=1u)
Add c quanta along xyz.
Definition bfset.h:140
void invalidate()
make this object invalid
Definition bfset.h:210
Solid-Harmonic Gaussian Function.
Definition bfset.h:833
static const unsigned max_num_qn
The range of keys is [0,max_key).
Definition bfset.h:886
unsigned int qn(unsigned int xyz) const
Returns the angular momentum.
void print(std::ostream &os=std::cout) const
Print out the content.
bool operator==(const SHGF &) const
Comparison operator.
SHGF iter_type
As far as SetIterator is concerned, SHGF is a set of one SHGF.
Definition bfset.h:843
unsigned key() const
Implements Hashable<unsigned>::key()
Definition bfset.h:877
void inc(unsigned int xyz, unsigned int c=1u)
Implementation of IncableBFSet::inc().
std::string label() const
Return a compact label.
unsigned int num_bf() const
Returns the number of basis functions in the set (always 1)
Definition bfset.h:863
void dec(unsigned int xyz, unsigned int c=1u)
Implementation of IncableBFSet::dec().
unsigned int norm() const
Implements IncableBFSet::norm()
SHGF & operator=(const SHGF &)
assignment
Solid-Harmonic Gaussian Shell.
Definition bfset.h:776
unsigned int norm() const
Implements IncableBFSet::norm()
unsigned key() const
Implements Hashable<unsigned>::key()
Definition bfset.h:816
std::string label() const
Return a compact label.
SHGShell()
Default constructor creates an s-type shell.
bool operator==(const SHGShell &) const
Comparison operator.
unsigned int qn(unsigned int m=0) const
Returns the angular momentum.
Definition bfset.h:804
SHGF iter_type
As far as SetIterator is concerned, SHGShell is a set of SHGFs.
Definition bfset.h:786
void inc(unsigned int xyz, unsigned int c=1u)
Implementation of IncableBFSet::inc().
unsigned int num_bf() const
Returns the number of basis functions in the set.
Definition bfset.h:802
void dec(unsigned int xyz, unsigned int c=1u)
Implementation of IncableBFSet::dec().
void print(std::ostream &os=std::cout) const
Print out the content.
Defaults definitions for various parameters assumed by Libint.
Definition algebra.cc:24
bool exists(const IncableBFSet &A)
Return true if A is valid.
Definition bfset.h:96
std::string to_string(const T &x)
Converts x to its string representation.
Definition entity.h:121
F unit(unsigned int X)
BF with unit quantum along X. F must behave like IncableBFSet.
Definition bfset.h:90
TrivialBFSet<T> defines static member result, which is true if T is a basis function set consisting o...
Definition bfset.h:906