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

📄 gaussbaval.cc

📁 大型并行量子化学软件;支持密度泛函(DFT)。可以进行各种量子化学计算。支持CHARMM并行计算。非常具有应用价值。
💻 CC
字号:
//// gaussbaval.cc//// 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.//#include <stdlib.h>#include <math.h>#include <util/misc/formio.h>#include <util/keyval/keyval.h>#include <chemistry/qc/basis/gaussbas.h>#include <chemistry/qc/basis/gaussshell.h>using namespace sc;intGaussianBasisSet::values(const SCVector3& r, ValueData *v,                         double* basis_values) const{  return hessian_values(r, v, 0, 0, basis_values);}intGaussianBasisSet::grad_values(const SCVector3& r, ValueData *v,                              double* g_values,                              double* basis_values) const{  return hessian_values(r, v, 0, g_values, basis_values);}intGaussianBasisSet::hessian_values(const SCVector3& r, ValueData *v,                                 double* h_values,                                 double* g_values,                                 double* basis_values) const{    SCVector3 r_diff;    int ishell = 0;    int ibasis = 0;    int nreturns;    // for convenience    const GaussianBasisSet& gbs = *this;    double *b_values_i = 0;    double *h_values_i = 0;    double *g_values_i = 0;    // calculate the value of each basis    for (int icenter=0; icenter < ncenter_; icenter++)       {        int nshell = center_to_nshell_[icenter];	// Calculate r_diff	r_diff.x()=r.x()-GaussianBasisSet::r(icenter,0);	r_diff.y()=r.y()-GaussianBasisSet::r(icenter,1);	r_diff.z()=r.z()-GaussianBasisSet::r(icenter,2);#ifdef EXTRA_PRINT        static int iflag=0;	if (iflag)	{	    iflag--;	    ExEnv::out0() << indent                 << scprintf("Center %d, (%lf,%lf,%lf)\n",                             icenter,r_center(center,0),                             r_center(center,1),r_center(center,2));	}#endif	for (int ish=0; ish < nshell; ish++) {            if (basis_values) b_values_i = &basis_values[ibasis];            if (g_values)     g_values_i = &g_values[3*ibasis];            if (h_values)     h_values_i = &h_values[6*ibasis];            nreturns=gbs(ishell).hessian_values(v->civec(), v->sivec(), r_diff,                                                h_values_i,                                                g_values_i,                                                b_values_i);            ibasis += nreturns;	    ishell++;	}    }    return ibasis;}intGaussianBasisSet::shell_values(const SCVector3& r, int sh, ValueData *d,                               double* basis_values) const{  return hessian_shell_values(r, sh, d, 0, 0, basis_values);}intGaussianBasisSet::grad_shell_values(const SCVector3& r, int sh,                              ValueData *d,                              double* g_values,                              double* basis_values) const{  return hessian_shell_values(r, sh, d, 0, g_values, basis_values);}intGaussianBasisSet::hessian_shell_values(const SCVector3& r, int sh,                                       ValueData *d,                                       double* h_values,                                       double* g_values,                                       double* basis_values) const{    int icenter = shell_to_center(sh);    SCVector3 r_diff;    for (int i=0; i<3; i++) r_diff[i] = r[i] - GaussianBasisSet::r(icenter,i);    return operator()(sh).hessian_values(d->civec(), d->sivec(), r_diff,                                         h_values,                                         g_values,                                         basis_values);}/////////////////////////////////////////////////////////////////////////////// Local Variables:// mode: c++// c-file-style: "CLJ"// End:

⌨️ 快捷键说明

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