This file is indexed.

/usr/include/sc/chemistry/qc/cints/int1e.h is in libsc-dev 2.3.1-16.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
//
// int1e.h
//
// Copyright (C) 2001 Edward Valeev
//
// Author: Edward Valeev <edward.valeev@chemistry.gatech.edu>
// Maintainer: EV
//
// This file is part of the SC Toolkit.
//
// The SC Toolkit is free software; you can redistribute it and/or modify
// it under the terms of the GNU Library General Public License as published by
// the Free Software Foundation; either version 2, or (at your option)
// any later version.
//
// The SC Toolkit is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public License
// along with the SC Toolkit; see the file COPYING.LIB.  If not, write to
// the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
//
// The U.S. Government is granted a limited license as per AL 91-7.
//

#ifdef __GNUG__
#pragma interface
#endif

#ifndef _chemistry_qc_cints_int1e_h
#define _chemistry_qc_cints_int1e_h

#include <util/ref/ref.h>
#include <chemistry/qc/basis/basis.h>
#include <chemistry/qc/basis/obint.h>
#include <chemistry/qc/intv3/fjt.h>

namespace sc {

class Integral;

/** Int1eCints is used by OneBodyIntCints and OneBodyDerivIntCints to
    implement IntegralCints. */
class Int1eCints: public RefCount {
  protected:
    Integral *integral_;

    Ref<GaussianBasisSet> bs1_;
    Ref<GaussianBasisSet> bs2_;

    // This was really an afterthought, should have designed better
    Ref<DipoleData> multipole_origin_;
    Ref<EfieldDotVectorData> EdotV_origin_;
    Ref<PointChargeData> Q_origin_;

    bool need_overlap_;
    bool need_coulomb_;

    int ntypes_;                  // Number of integrals held together
                                  // usually 1, 3 for dipole, 6 for quadrupole, etc.

    double *target_ints_buffer_;  // buffer of integrals in a shell doublet
    int max_doublet_size_;

    /*--- Internal scratch ---*/
    double *cart_ints_;           // buffer of cartesian integrals in by-contraction-doublets order
    double *sphharm_ints_;        // buffer of integrals over spherical harmonics in by-contraction-doublets order
    double *tformbuf_;            // temporary scratch used in cart.->sph.harm. transforms
    int max_cart_doublet_size_;
    
    /*--- Pointers to scratch arrays (never used in new[] and delete[]) ---*/
    double *prim_ints_;       // this points to the appropriate location for raw integrals
    double *contr_doublets_;
    double *shell_doublet_;

    /*--- Internally used "interfaces" ---*/
    GaussianShell *int_shell1_;
    GaussianShell *int_shell2_;
    struct {
      double A[3], B[3];
      double AB2;
      int gc1, gc2;
      int p1, p2;
      int am;
    } doublet_info_;
    // Buffers for primitive overlap integrals over 1D Gaussians
    double **OIX_, **OIY_, **OIZ_;
    // Buffer for primitive nuclear attraction integrals
    // Such buffer contains all integrals including intermediates
    // These integrals are nonseparable, hence the first and second indices are composite
    double ***AI0_;
    int indmax_;         // that's the range of the first 2 indices of AI0
    // Compute engines
    void AI_OSrecurs_(double ***AI0, double PA[3], double PB[3],
		      double PC[3], double gamma, int iang, int jang);
    void OI_OSrecurs_(double **OIX, double **OIY, double **OIZ, double PA[3], double PB[3],
		      double gamma, int lmaxi, int lmaxj);
    Ref<FJT> Fm_Eval_;

    // tasks common to different types of integral evaluation
    void compute_doublet_info_(int, int);
    void zero_buffers_();
    void transform_contrquartets_(double *, double *);
    void sort_contrdoublets_to_shelldoublet_(double *, double *);
    // same tasks, but adapted for the case of several sets of integrals (multipole, etc.)
    void zero_buffers_vec_(const int);
    void transform_contrquartets_vec_(const int, double *, double *);
    void sort_contrdoublets_to_shelldoublet_vec_(const int, double *, double *);
    // specialized versions of compute routines
    void overlap_full_general_();
    void overlap_sameam_general_();
    void kinetic_full_general_();
    void kinetic_sameam_general_();
    void nuclear_full_general_();
    void nuclear_sameam_general_();
    void hcore_full_general_();
    void hcore_sameam_general_();
    void edipole_full_general_();
    void equadrupole_full_general_();

    // Utility functions
    double **init_block_(int, int);     // Used to allocate OIXYZ
    void free_block_(double **);
    double ***init_box_(int, int, int);   // Used to allocate AI0;
    void free_box_(double ***);
  
  public:
    Int1eCints(Integral *,
            const Ref<GaussianBasisSet>&,
            const Ref<GaussianBasisSet>&,
            int order, bool need_overlap, bool need_coulomb, int ntypes);
    ~Int1eCints();

    void set_multipole_origin(const Ref<DipoleData>&);
    void set_EdotV_origin(const Ref<EfieldDotVectorData>&);
    void set_Q_origin(const Ref<PointChargeData>&);
    Ref<DipoleData> multipole_origin();
    Ref<EfieldDotVectorData> EdotV_origin();
    Ref<PointChargeData> Q_origin();

    double *buffer() { return target_ints_buffer_; }
    Ref<GaussianBasisSet> basis() { if (bs1_==bs2_) return bs1_; return 0; }
    Ref<GaussianBasisSet> basis1() { return bs1_; }
    Ref<GaussianBasisSet> basis2() { return bs2_; }

    void kinetic(int ish, int jsh);
    void nuclear(int ish, int jsh);
    void overlap(int ish, int jsh);
    void hcore(int ish, int jsh);
    void edipole(int ish, int jsh);
    void equadrupole(int ish, int jsh);
};

}

#endif

// Local Variables:
// mode: c++
// c-file-style: "CLJ"
// End: