00001
00002
00003
00004
00005 #ifndef _chemistry_qc_basis_extent_h
00006 #define _chemistry_qc_basis_extent_h
00007
00008 #ifdef __GNUC__
00009 #pragma interface
00010 #endif
00011
00012 #include <float.h>
00013 #include <chemistry/qc/basis/basis.h>
00014
00015 struct ExtentData {
00016 int shell;
00017 double bound;
00018 ExtentData() {}
00019 ExtentData(int s, double b): shell(s), bound(b) {}
00020 };
00021
00022 ARRAY_dec(ExtentData);
00023
00024 class ShellExtent: public RefCount {
00025 double lower_[3];
00026 double resolution_;
00027 int n_[3];
00028 ArrayExtentData *contributing_shells_;
00029 ArrayExtentData null_;
00030
00031 ArrayExtentData &data(int *b);
00032 double distance(double loc, int axis, int origin, int point);
00033 ArrayExtentData &data(int x, int y, int z);
00034 public:
00035 ShellExtent();
00036 ~ShellExtent();
00037 void init(const Ref<GaussianBasisSet>&,
00038 double resolution = 1.0, double tolerance = DBL_EPSILON);
00041 const ArrayExtentData &contributing_shells(int x, int y, int z)
00042 { return data(x,y,z); }
00043 const ArrayExtentData &contributing_shells(double x, double y, double z);
00044 void print(std::ostream &o = ExEnv::out());
00045 const int *n() const { return n_; }
00046 int n(int ixyz) const { return n_[ixyz]; }
00047 double lower(int ixyz) const { return lower_[ixyz]; }
00048 double resolution() const { return resolution_; }
00049 };
00050
00051
00052 #endif
00053
00054
00055
00056
00057