extent.h

00001 //
00002 // extent.h
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 <vector>
00013 
00014 #include <float.h>
00015 #include <chemistry/qc/basis/basis.h>
00016 
00017 namespace sc {
00018 
00019 struct ExtentData {
00020     int shell;
00021     double bound;
00022     ExtentData() {}
00023     ExtentData(int s, double b): shell(s), bound(b) {}
00024 };
00025 
00026 class ShellExtent: public RefCount {
00027     double lower_[3];
00028     double resolution_;
00029     int n_[3];
00030     std::vector<ExtentData> *contributing_shells_;
00031     std::vector<ExtentData> null_;
00032 
00033     std::vector<ExtentData> &data(int *b);
00034     double distance(double loc, int axis, int origin, int point);
00035     std::vector<ExtentData> &data(int x, int y, int z);
00036   public:
00037     ShellExtent();
00038     ~ShellExtent();
00039     void init(const Ref<GaussianBasisSet>&,
00040               double resolution = 1.0, double tolerance = DBL_EPSILON);
00043     const std::vector<ExtentData> &contributing_shells(int x, int y, int z)
00044         { return data(x,y,z); }
00045     const std::vector<ExtentData> &contributing_shells(double x, double y, double z);
00046     void print(std::ostream &o = ExEnv::out0());
00047     const int *n() const { return n_; }
00048     int n(int ixyz) const { return n_[ixyz]; }
00049     double lower(int ixyz) const { return lower_[ixyz]; }
00050     double upper(int ixyz) const { return resolution_*n_[ixyz] + lower_[ixyz]; }
00051     double resolution() const { return resolution_; }
00052 };
00053 
00054 }
00055 
00056 #endif
00057 
00058 // Local Variables:
00059 // mode: c++
00060 // c-file-style: "CLJ"
00061 // End:

Generated at Mon Dec 3 23:23:36 2007 for MPQC 2.3.1 using the documentation package Doxygen 1.5.2.