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

📄 int1e.h

📁 大型并行量子化学软件;支持密度泛函(DFT)。可以进行各种量子化学计算。支持CHARMM并行计算。非常具有应用价值。
💻 H
字号:
//// int1e.h//// Copyright (C) 1996 Limit Point Systems, Inc.//// Author: Curtis Janssen <cljanss@limitpt.com>// Maintainer: LPS//// 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_int1e_h#define _chemistry_qc_int1e_h#include <util/ref/ref.h>#include <chemistry/qc/basis/basis.h>#include <chemistry/qc/intv3/fjt.h>#include <chemistry/qc/intv3/array.h>namespace sc {class Integral;/** Int2eV3 is a class wrapper for the one body part of the C language    IntV3 library.  It is used by OneBodyIntV3 and OneBodyDerivIntV3 to    implement IntegralV3. */class Int1eV3: public RefCount {  protected:    Integral *integral_;    Ref<GaussianBasisSet> bs1_;    Ref<GaussianBasisSet> bs2_;    double *fjttable_;    Ref<FJT> fjt_;    int bs1_shell_offset_;    int bs2_shell_offset_;    int bs1_func_offset_;    int bs2_func_offset_;    int bs1_prim_offset_;    int bs2_prim_offset_;    // statics from comp_1e.c:  protected:    double oo2zeta_a;    double oo2zeta_b;    double sMus[3];    double sTs;    double xi;    double A[3];    double B[3];    double C[3];    double ss;    double PmA[3];    double PmB[3];    double PmC[3];    double zeta;    double oo2zeta;    GaussianShell *gshell1, *gshell2;    int exponent_weighted;    int scale_shell_result;    double result_scale_factor;    int three_center;    Ref<GaussianBasisSet> third_centers;    int third_centernum;    int init_order;    double *buff;    double *cartesianbuffer;    double *cartesianbuffer_scratch;    int mu;    IntV3Arraydoublep3 inter;    IntV3Arraydoublep3 efield_inter;  protected:    void accum_shell_1der(        double *buff, int ish, int jsh,        Ref<GaussianBasisSet> dercs, int centernum,        double (Int1eV3::*)(int,int,int,int,int,int,int,int)        );    void accum_shell_block_1der(        double *buff, int ish, int jsh,        Ref<GaussianBasisSet> dercs, int centernum,        void (Int1eV3::*shell_block_function)                                  (int gc1, int a, int gc2, int b,                                   int gcsize2, int gcoff1, int gcoff2,                                   double coef, double *buffer)        );    double comp_shell_overlap(int gc1, int i1, int j1, int k1,                              int gc2, int i2, int j2, int k2);    double comp_prim_overlap(int i1, int j1, int k1,                             int i2, int j2, int k2);    double comp_shell_kinetic(int gc1, int i1, int j1, int k1,                              int gc2, int i2, int j2, int k2);    double comp_prim_kinetic(int i1, int j1, int k1,                             int i2, int j2, int k2);    double comp_shell_nuclear(int gc1, int i1, int j1, int k1,                              int gc2, int i2, int j2, int k2);    void accum_shell_efield(double *buff, int ish, int jsh);    void accum_shell_block_efield(double *buff, int ish, int jsh);    double comp_prim_nuclear(int i1, int j1, int k1,                             int i2, int j2, int k2, int m);    void comp_shell_efield(double *efield,                           int gc1, int i1, int j1, int k1,                           int gc2, int i2, int j2, int k2);    void comp_shell_block_efield(int gc1, int a, int gc2, int b,                                 int gcsize2, int gcoff1, int gcoff2,                                 double coef, double *buffer);    double comp_prim_efield(int xyz, int i1, int j1, int k1,                            int i2, int j2, int k2, int m);    void comp_shell_dipole(double* dipole,                           int gc1, int i1, int j1, int k1,                           int gc2, int i2, int j2, int k2);    double comp_prim_dipole(int axis,                            int i1, int j1, int k1,                            int i2, int j2, int k2);    void comp_shell_block_nuclear(int gc1, int a, int gc2, int b,                                  int gcsize2, int gcoff1, int gcoff2,                                  double coef, double *buffer);    void comp_prim_block_nuclear(int a, int b);    void comp_prim_block_nuclear_build_a(int a, int b, int m);    void comp_prim_block_nuclear_build_b(int b, int m);    void comp_prim_block_efield(int a, int b);    void comp_prim_block_efield_build_a(int a, int b, int m);    void comp_prim_block_efield_build_b(int b, int m);    // routines from comp_1e:  protected:    void int_accum_shell_overlap_1der(int ish, int jsh,                                      Ref<GaussianBasisSet> dercs,                                      int centernum);    void int_done_1e();    void int_initialize_1e(int flags, int order);#if 0    double int_prim_overlap(shell_t *pshell1, shell_t *pshell2,                            double *pA, double *pB,                            int prim1, int prim2,                            int i1, int j1, int k1,                            int i2, int j2, int k2);#endif    void int_accum_shell_kinetic(int ish, int jsh);    void int_accum_shell_kinetic_1der(int ish, int jsh,                                      Ref<GaussianBasisSet> dercs,                                      int centernum);    void int_accum_shell_nuclear_1der(int ish, int jsh,                                      Ref<GaussianBasisSet> dercs,                                      int centernum);    void int_accum_shell_nuclear_hfc_1der(int ish, int jsh,                                          Ref<GaussianBasisSet> dercs,                                          int centernum);    void int_accum_shell_nuclear_hf_1der(int ish, int jsh,                                         Ref<GaussianBasisSet> dercs,                                         int centernum);    void int_accum_shell_nuclear_nonhf_1der(int ish, int jsh,                                            Ref<GaussianBasisSet> dercs,                                            int centernum);    void int_accum_shell_efield(int ish, int jsh,                                double *position);    void int_accum_shell_point_charge(int ish, int jsh,                                      int ncharge, const double* charge,                                      const double*const* position);    void int_shell_nuclear_hf_1der(int ish, int jsh,                                   Ref<GaussianBasisSet> dercs,                                   int centernum);    void int_shell_nuclear_nonhf_1der(int ish, int jsh,                                      Ref<GaussianBasisSet> dercs,                                      int centernum);    void int_accum_shell_dipole(int ish, int jsh,                                double *com);    // from offsets.cc  protected:    void int_initialize_offsets1();    void int_done_offsets1();    // from tformv3.cc  protected:    double *source;    int nsourcemax;    // transform implementation functions:    void transform_init();    void transform_done();    void source_space(int nsource);    void copy_to_source(double *integrals, int nsource);    void do_transform_1e(Integral *integ,                         double *integrals,                         GaussianShell *sh1, GaussianShell *sh2,                         int chunk);    void transform_1e(Integral *integ,                      double *integrals, double *target,                      GaussianShell *sh1, GaussianShell *sh2, int chunk);    void accum_transform_1e(Integral *integ,                            double *integrals, double *target,                            GaussianShell *sh1, GaussianShell *sh2, int chunk);    // functions for general use outside of tformv3.cc:    void transform_1e(Integral*integ,                      double *integrals, double *target,                      GaussianShell *sh1, GaussianShell *sh2);    void accum_transform_1e(Integral*integ,                            double *integrals, double *target,                            GaussianShell *sh1, GaussianShell *sh2);    void transform_1e_xyz(Integral*integ,                          double *integrals, double *target,                          GaussianShell *sh1, GaussianShell *sh2);    void accum_transform_1e_xyz(Integral*integ,                                double *integrals, double *target,                                GaussianShell *sh1, GaussianShell *sh2);  public:    Int1eV3(Integral *,            const Ref<GaussianBasisSet>&,            const Ref<GaussianBasisSet>&,            int order);    ~Int1eV3();    double *buffer() { return buff; }    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_slow(int ish, int jsh);    void nuclear(int ish, int jsh);    void overlap(int ish, int jsh);    void hcore(int ish, int jsh);    void efield(int ish, int jsh, double position[3]);    void point_charge(int ish, int jsh,                      int ncharge, const double* charge,                      const double*const* position);    void dipole(int ish, int jsh,                double *com);    void hcore_1der(int ish, int jsh,                    int dercs, int centernum);    void kinetic_1der(int ish, int jsh,                      int dercs, int centernum);    void nuclear_1der(int ish, int jsh,                      int dercs, int centernum);    void overlap_1der(int ish, int jsh,                      int dercs, int centernum);};}#endif// Local Variables:// mode: c++// c-file-style: "CLJ"// End:

⌨️ 快捷键说明

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