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

📄 tchftmpl.h

📁 大型并行量子化学软件;支持密度泛函(DFT)。可以进行各种量子化学计算。支持CHARMM并行计算。非常具有应用价值。
💻 H
字号:
namespace sc {class LocalTCContribution {  private:    double * const gmata;    double * const gmatb;    double * const kmata;    double * const kmatb;    double * const pmata;    double * const pmatb;    double * const opmata;    double * const opmatb;  public:    LocalTCContribution(double *ga, double *pa, double *gb, double *pb,                        double *ka, double *opa, double *kb, double *opb) :      gmata(ga), gmatb(gb), kmata(ka), kmatb(kb),      pmata(pa), pmatb(pb), opmata(opa), opmatb(opb) {}    ~LocalTCContribution() {}    void set_bound(double,double) {}    inline void cont1(int ij, int kl, double val) {      gmata[ij] += val*pmata[kl];      gmata[kl] += val*pmata[ij];      gmatb[ij] += val*pmatb[kl];      gmatb[kl] += val*pmatb[ij];    }        inline void cont2(int ij, int kl, double val) {      val *= 0.25;      gmata[ij] -= val*pmata[kl];      gmata[kl] -= val*pmata[ij];      gmatb[ij] -= val*pmatb[kl];      gmatb[kl] -= val*pmatb[ij];      kmata[ij] += val*opmata[kl];      kmata[kl] += val*opmata[ij];      kmatb[ij] += val*opmatb[kl];      kmatb[kl] += val*opmatb[ij];    }        inline void cont3(int ij, int kl, double val) {      val *= 0.5;      gmata[ij] -= val*pmata[kl];      gmata[kl] -= val*pmata[ij];      gmatb[ij] -= val*pmatb[kl];      gmatb[kl] -= val*pmatb[ij];      kmata[ij] += val*opmata[kl];      kmata[kl] += val*opmata[ij];      kmatb[ij] += val*opmatb[kl];      kmatb[kl] += val*opmatb[ij];    }        inline void cont4(int ij, int kl, double val) {      gmata[ij] += 0.75*val*pmata[kl];      gmata[kl] += 0.75*val*pmata[ij];      gmatb[ij] += 0.75*val*pmatb[kl];      gmatb[kl] += 0.75*val*pmatb[ij];      kmata[ij] += 0.25*val*opmata[kl];      kmata[kl] += 0.25*val*opmata[ij];      kmatb[ij] += 0.25*val*opmatb[kl];      kmatb[kl] += 0.25*val*opmatb[ij];    }        inline void cont5(int ij, int kl, double val) {      val *= 0.5;      gmata[ij] += val*pmata[kl];      gmata[kl] += val*pmata[ij];      gmatb[ij] += val*pmatb[kl];      gmatb[kl] += val*pmatb[ij];      kmata[ij] += val*opmata[kl];      kmata[kl] += val*opmata[ij];      kmatb[ij] += val*opmatb[kl];      kmatb[kl] += val*opmatb[ij];    }};class LocalTCEnergyContribution {  private:    double * const pmata;    double * const pmatb;    double * const opmata;    double * const opmatb;  public:    double eca;    double exa;    double ecb;    double exb;    double ecab;    double exab;        LocalTCEnergyContribution(double *pa, double *pb, double *opa, double *opb) :      pmata(pa), pmatb(pb), opmata(opa), opmatb(opb) {      exa=eca=0;      exb=ecb=0;      exab=ecab=0;    }    ~LocalTCEnergyContribution() {}    void set_bound(double,double) {};    inline void cont1(int ij, int kl, double val) {      eca += val*pmata[ij]*pmata[kl];      ecb += val*pmatb[ij]*pmatb[kl];      ecab += val*(pmata[ij]*pmatb[kl]-pmatb[ij]*pmata[kl]);    }        inline void cont2(int ij, int kl, double val) {      exa -= 0.25*val*pmata[ij]*pmata[kl];      exb -= 0.25*val*pmatb[ij]*pmatb[kl];      exab -= 0.25*val*(pmata[ij]*pmatb[kl]-pmatb[ij]*pmata[kl]);    }        inline void cont3(int ij, int kl, double val) {      exa -= 0.5*val*pmata[ij]*pmata[kl];      exb -= 0.5*val*pmatb[ij]*pmatb[kl];      exab -= 0.5*val*(pmata[ij]*pmatb[kl]-pmatb[ij]*pmata[kl]);    }        inline void cont4(int ij, int kl, double val) {      eca += val*pmata[ij]*pmata[kl];      ecb += val*pmatb[ij]*pmatb[kl];      ecab += val*(pmata[ij]*pmatb[kl]-pmatb[ij]*pmata[kl]);      exa -= 0.25*val*pmata[ij]*pmata[kl];      exb -= 0.25*val*pmatb[ij]*pmatb[kl];      exab -= 0.25*val*(pmata[ij]*pmatb[kl]-pmatb[ij]*pmata[kl]);    }        inline void cont5(int ij, int kl, double val) {      eca += val*pmata[ij]*pmata[kl];      ecb += val*pmatb[ij]*pmatb[kl];      ecab += val*(pmata[ij]*pmatb[kl]-pmatb[ij]*pmata[kl]);      exa -= 0.5*val*pmata[ij]*pmata[kl];      exb -= 0.5*val*pmatb[ij]*pmatb[kl];      exab -= 0.5*val*(pmata[ij]*pmatb[kl]-pmatb[ij]*pmata[kl]);    }};class LocalTCGradContribution {  private:    double * const pmat;    double * const pmata;    double * const pmatb;    double c1sq;    double c2sq;    double c1c2;  public:    LocalTCGradContribution(double *p, double *pa, double *pb,                            double c1, double c2) :      pmat(p), pmata(pa), pmatb(pb)    {      c1sq = c1*c1;      c2sq = c2*c2;      c1c2 = c1*c2;    }    ~LocalTCGradContribution() {}    inline double cont1(int ij, int kl) {      return pmat[ij]*pmat[kl] +        c1sq*(pmata[ij]*pmat[kl] + pmat[ij]*pmata[kl]) +        c2sq*(pmatb[ij]*pmat[kl] + pmat[ij]*pmatb[kl]) +        0.5*c1sq*pmata[ij]*pmata[kl] +        0.5*c2sq*pmatb[ij]*pmatb[kl];    }    inline double cont2(int ij, int kl) {      return pmat[ij]*pmat[kl] +        c1sq*(pmata[ij]*pmat[kl] + pmat[ij]*pmata[kl]) +        c2sq*(pmatb[ij]*pmat[kl] + pmat[ij]*pmatb[kl]) -        c1c2*(pmata[ij]*pmatb[kl] + pmatb[ij]*pmata[kl]);    }};}

⌨️ 快捷键说明

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