~ubuntu-branches/ubuntu/quantal/psicode/quantal

« back to all changes in this revision

Viewing changes to src/lib/libmints/osrecur.h

  • Committer: Bazaar Package Importer
  • Author(s): Michael Banck, Michael Banck, Daniel Leidert
  • Date: 2009-02-23 00:12:02 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20090223001202-rutldoy3dimfpesc
Tags: 3.4.0-1
* New upstream release.

[ Michael Banck ]
* debian/patches/01_DESTDIR.dpatch: Refreshed.
* debian/patches/02_FHS.dpatch: Removed, applied upstream.
* debian/patches/03_debian_docdir: Likewise.
* debian/patches/04_man.dpatch: Likewise.
* debian/patches/06_466828_fix_gcc_43_ftbfs.dpatch: Likewise.
* debian/patches/07_464867_move_executables: Fixed and refreshed.
* debian/patches/00list: Adjusted.
* debian/control: Improved description.
* debian/patches-held: Removed.
* debian/rules (install/psi3): Do not ship the ruby bindings for now.

[ Daniel Leidert ]
* debian/rules: Fix txtdir via DEB_MAKE_INSTALL_TARGET.
* debian/patches/01_DESTDIR.dpatch: Refreshed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifndef _psi_src_lib_libmints_osrecur_h
 
2
#define _psi_src_lib_libmints_osrecur_h
 
3
 
 
4
/*!
 
5
    \file libmints/osrecur.h
 
6
    \ingroup MINTS
 
7
*/
 
8
 
 
9
namespace psi {
 
10
    
 
11
/// Generic Obara and Saika recursion object.
 
12
class ObaraSaikaTwoCenterRecursion
 
13
{
 
14
    int max_am1_;
 
15
    int max_am2_;
 
16
    
 
17
    double **x_;
 
18
    double **y_;
 
19
    double **z_;
 
20
    
 
21
    // No default constructor
 
22
    ObaraSaikaTwoCenterRecursion();
 
23
    // No assignment operator
 
24
    ObaraSaikaTwoCenterRecursion& operator=(const ObaraSaikaTwoCenterRecursion&);
 
25
    
 
26
public:
 
27
    /// Constructor, max_am1 and max_am2 are the max angular momentum on center 1 and 2.
 
28
    /// Needed to allocate enough memory.
 
29
    ObaraSaikaTwoCenterRecursion(int max_am1, int max_am2);
 
30
    ~ObaraSaikaTwoCenterRecursion();
 
31
    
 
32
    /// Returns the x recursion matrix.
 
33
    double **x() const { return x_; }
 
34
    /// Returns the y recursion matrix.
 
35
    double **y() const { return y_; }
 
36
    /// Returns the z recursion matrix.
 
37
    double **z() const { return z_; }
 
38
    
 
39
    /// Computes the recursion matrices for the data provided.
 
40
    void compute(double PA[3], double PB[3], double gamma, int am1, int am2);
 
41
};
 
42
 
 
43
/// Obara and Saika recursion object for moment integrals. Currently not used by DipoleInt, hopefully soon.
 
44
/// THIS CLASS HAS NOT BEEN TESTED!!!
 
45
class ObaraSaikaTwoCenterMIRecursion
 
46
{
 
47
    int max_am1_;
 
48
    int max_am2_;
 
49
    int max_m_;
 
50
    
 
51
    double ***x_;
 
52
    double ***y_;
 
53
    double ***z_;
 
54
    
 
55
    // No default constructor
 
56
    ObaraSaikaTwoCenterMIRecursion();
 
57
    // No assignment operator
 
58
    ObaraSaikaTwoCenterMIRecursion& operator=(const ObaraSaikaTwoCenterMIRecursion&);
 
59
    
 
60
public:
 
61
    ObaraSaikaTwoCenterMIRecursion(int max_am1, int max_am2, int max_m);
 
62
    ~ObaraSaikaTwoCenterMIRecursion();
 
63
    
 
64
    double ***x() const { return x_; }
 
65
    double ***y() const { return y_; }
 
66
    double ***z() const { return z_; }
 
67
    void compute(double PA[3], double PB[3], double gamma, int am1, int am2);
 
68
};
 
69
 
 
70
/// Obara and Saika recursion object for potential integrals.
 
71
class ObaraSaikaTwoCenterVIRecursion
 
72
{
 
73
protected:
 
74
    int max_am1_;
 
75
    int max_am2_;
 
76
    int size_;
 
77
    
 
78
    double ***vi_;
 
79
 
 
80
    // Forms Fm(U) from A20 (OS 1986)
 
81
    void calculate_f(double *F, int n, double t);
 
82
    
 
83
private:    
 
84
    // No default constructor
 
85
    ObaraSaikaTwoCenterVIRecursion();
 
86
    // No assignment operator
 
87
    ObaraSaikaTwoCenterVIRecursion& operator=(const ObaraSaikaTwoCenterVIRecursion&);
 
88
 
 
89
public:
 
90
    /// Constructor, max_am1 and max_am2 are the max angular momentum on center 1 and 2.
 
91
    /// Needed to allocate enough memory.
 
92
    ObaraSaikaTwoCenterVIRecursion(int max_am1, int max_am2);
 
93
    virtual ~ObaraSaikaTwoCenterVIRecursion();
 
94
 
 
95
    /// Returns the potential integral 3D matrix
 
96
    double ***vi() const { return vi_; }
 
97
    
 
98
    /// Computes the potential integral 3D matrix using the data provided.
 
99
    virtual void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2);
 
100
};
 
101
 
 
102
//! Obara and Saika recursion object for computing potential derivatives.
 
103
class ObaraSaikaTwoCenterVIDerivRecursion : public ObaraSaikaTwoCenterVIRecursion
 
104
{
 
105
protected:
 
106
    double ***vx_;
 
107
    double ***vy_;
 
108
    double ***vz_;
 
109
    
 
110
private:
 
111
    // No default constructor();
 
112
    ObaraSaikaTwoCenterVIDerivRecursion();
 
113
    // No assignment operator
 
114
    ObaraSaikaTwoCenterVIDerivRecursion& operator=(const ObaraSaikaTwoCenterVIDerivRecursion&);
 
115
    
 
116
public:
 
117
    ObaraSaikaTwoCenterVIDerivRecursion(int max_am1, int max_am2);
 
118
    virtual ~ObaraSaikaTwoCenterVIDerivRecursion();
 
119
    
 
120
    double ***vx() const { return vx_; }
 
121
    double ***vy() const { return vy_; }
 
122
    double ***vz() const { return vz_; }
 
123
    
 
124
    virtual void compute(double PA[3], double PB[3], double PC[3], double zeta, int am1, int am2);
 
125
};
 
126
 
 
127
}
 
128
 
 
129
#endif