⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 int1e.h

📁 大型并行量子化学软件;支持密度泛函(DFT)。可以进行各种量子化学计算。支持CHARMM并行计算。非常具有应用价值。
💻 H
字号:
//// 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:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -