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

📄 sobasis.h

📁 大型并行量子化学软件;支持密度泛函(DFT)。可以进行各种量子化学计算。支持CHARMM并行计算。非常具有应用价值。
💻 H
字号:
//// sobasis.h --- definition of the Integral class//// Copyright (C) 1998 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.//#ifndef _chemistry_qc_basis_sobasis_h#define _chemistry_qc_basis_sobasis_h#ifdef __GNUC__#pragma interface#endif#include <chemistry/qc/basis/basis.h>namespace sc {/** SOTransformShell describes how an AO function contributes to an SO    function in a particular SO shell. */class SOTransformFunction {  public:    /// The coefficient of the AO.    double coef;    /// The AO function number.    int aofunc;    /// The SO function number.    int sofunc;    /// The SO function's irrep.    int irrep;};/** SOTransformShell maintains a list of AO functions contribute to an SO    function in a particular SO shell.  The information is stored in    objects of type SOTransformFunction. */class SOTransformShell {  public:    /// The number of the AO shell from which these functions come.    int aoshell;    /// The number of AO/SO function pairs contributing.    int nfunc;    /// The array of SOTransformFunction objects describing the transform.    SOTransformFunction *func;    SOTransformShell();    ~SOTransformShell();    /// Add another function to the transform.    void add_func(int irrep, double coef, int aofunc, int sofunc);};/** SOTransform maintains a list of AO shells that are be used    to compute the SO.  The information is stored in objects of    type SOTransformShell. */class SOTransform {  public:    int naoshell_allocated;    /// The number of AO shells that make up this SO shell.    int naoshell;    /// The SOTransformShell object for each AO.    SOTransformShell *aoshell;    SOTransform();    ~SOTransform();    void set_naoshell(int n);    /// Adds another term to the transform.    void add_transform(int aoshell, int irrep,                       double coef, int aofunc, int sofunc);};/** A SOBasis object describes the transformation from an atomic orbital    basis to a symmetry orbital basis.  */class SOBasis : public RefCount {  protected:    Ref<GaussianBasisSet> basis_;    int nshell_;    int nirrep_;    int *ncomp_;    int **nfunc_;    int *naofunc_;    int **funcoff_;    int *nfunc_in_irrep_;    int *func_;    int *irrep_;    int *func_within_irrep_;    SOTransform *trans_;  public:    /// Create an SOBasis object given a GaussianBasisSet and Integral objects.    SOBasis(const Ref<GaussianBasisSet> &, const Ref<Integral>&);    ~SOBasis();    /// Return the number of shells.    int nshell() const { return nshell_; }    /// Return the number of irreps.    int nirrep() const { return nirrep_; }    int ncomponent(int iirrep) const { return ncomp_[iirrep]; }    /// Return the number of functions in the given irrep.    int nfunction_in_irrep(int irrep) const { return nfunc_in_irrep_[irrep]; }    /// Return the offset for the first function of the given irrep.    int function_offset_for_irrep(int irrep) const;    /// Return the number of functions in the given shell.    int nfunction(int ishell) const;    /** Return the number of functions in the AO shell that make up        the given SO shell. */    int naofunction(int ishell) const { return naofunc_[ishell]; }    /// Returns the number of functions in the shell in a given irrep.    int nfunction(int ishell, int iirrep) const;    /** Returns the maximum number of functions in a shell (summed over all        irreps) */    int max_nfunction_in_shell() const;    /** Normally, SO shell numbering starts at zero within each irrep.        This returns an offset to make SO shell numbers unique within the        shell. */    int function_offset_within_shell(int ishell, int iirrep) const;    /** Convert the SO shell number to the overall number of the first        function within that shell. */    int function(int ishell);    /// Convert SO shell and function number within shell to irrep.    int irrep(int ishell, int ifunc) const;    /// Convert SO shell and function number to number within irrep.    int function_within_irrep(int ishell, int ifunc) const;    /// Return the SOTransform object for the given shell.    const SOTransform &trans(int i) const { return trans_[i]; }    void print(std::ostream &o=ExEnv::out0()) const;};inline intSOBasis::function(int ishell){  return func_[ishell];}inline intSOBasis::irrep(int ishell, int ifunc) const{  return irrep_[func_[ishell]+ifunc];}inline intSOBasis::function_offset_for_irrep(int irrep) const{  int r = 0;  for (int i=0; i<irrep; i++) {      r += nfunc_in_irrep_[i];    }  return r;}inline intSOBasis::function_within_irrep(int ishell, int ifunc) const{  return func_within_irrep_[func_[ishell]+ifunc];}inline intSOBasis::nfunction(int ishell, int iirrep) const{  return nfunc_[ishell][iirrep];}inline intSOBasis::function_offset_within_shell(int ishell, int iirrep) const{  return funcoff_[ishell][iirrep];}}#endif// Local Variables:// mode: c++// c-file-style: "CLJ"// End:

⌨️ 快捷键说明

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