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

📄 bem.h

📁 大型并行量子化学软件;支持密度泛函(DFT)。可以进行各种量子化学计算。支持CHARMM并行计算。非常具有应用价值。
💻 H
字号:
//// bem.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.//#ifndef _chemistry_solvent_bem_h#define _chemistry_solvent_bem_h#include <util/class/class.h>#include <util/state/state.h>#include <util/keyval/keyval.h>#include <math/isosurf/volume.h>#include <math/isosurf/surf.h>#include <math/scmat/matrix.h>#include <chemistry/molecule/molecule.h>namespace sc {// This represents a solvent by a polarization charge on a dielectric// boundary surface.class BEMSolvent: public DescribedClass {  private:    int debug_;    Ref<Molecule> solute_;    Ref<Molecule> solvent_;    double solvent_density_;    double dielectric_constant_;    Ref<SCMatrixKit> matrixkit_;    RefSCMatrix system_matrix_i_;    double f_;    Ref<MessageGrp> grp_;    double area_;    double volume_;    double computed_enclosed_charge_;    double edisp_;    double erep_;    Ref<TriangulatedImplicitSurface> surf_;    double** alloc_array(int n, int m);    void free_array(double**);    // This holds the area associated with each vertex.  It is used    // to convert charges to charge densities and back.    double* vertex_area_;    // Given charges compute surface charge density.    void charges_to_surface_charge_density(double *charges);    // Given surface charge density compute charges.    void surface_charge_density_to_charges(double *charges);  public:    BEMSolvent(const Ref<KeyVal>&);    virtual ~BEMSolvent();    // This should be called after everything is setup--the    // molecule has the correct the geometry and all of the    // parameters have been adjusted.    void init();    // This gets rid of the system matrix inverse and, optionally, the surface.    void done(int clear_surface = 1);    int ncharge() { return surf_->nvertex(); }    Ref<Molecule> solvent() { return solvent_ ;}    double solvent_density() { return solvent_density_ ;}    // NOTE: call allocation routines after init and free routines before done    double** alloc_charge_positions() { return alloc_array(ncharge(), 3); }    void free_charge_positions(double**a) { free_array(a); }    double** alloc_normals()  { return alloc_array(ncharge(), 3); }    void free_normals(double**a) { free_array(a); }    double* alloc_efield_dot_normals()  { return new double[ncharge()]; }    void free_efield_dot_normals(double*a) { delete[] a; }    double* alloc_charges() { return new double[ncharge()]; }    void free_charges(double*a) { delete[] a; }    void charge_positions(double**);    void normals(double**);    // Given the efield dotted with the normals at the charge positions this    // will compute a new set of charges.    void compute_charges(double* efield_dot_normals, double* charge);    // Given a set of charges and a total charge, this will normalize    // the integrated charge to the charge that would be expected on    // the surface if the given total charge were enclosed within it.    void normalize_charge(double enclosed_charge, double* charges);    // Given charges and nuclear charges compute their interation energy.    double nuclear_charge_interaction_energy(double *nuclear_charge,                                             double** charge_positions,                                             double* charge);    // Given charges compute the interaction energy between the nuclei    // and the point charges.    double nuclear_interaction_energy(double** charge_positions,                                      double* charge);    // Given charges compute the interaction energy for just the surface.    double self_interaction_energy(double** charge_positions, double *charge);        // Given the charges, return the total polarization charge on the surface.    double polarization_charge(double* charge);    // Return the area (available after compute_charges called).    double area() const { return area_; }    // Return the volume (available after compute_charges called).    double volume() const { return volume_; }    // Return the enclosed charge (available after compute_charges called).    double computed_enclosed_charge() const {      return computed_enclosed_charge_;    }    double disp() {return edisp_;}    double rep()  {return erep_;}    double disprep();    // this never needs to be called explicitly, but is here now for debugging    void init_system_matrix();    Ref<TriangulatedImplicitSurface> surface() const { return surf_; }    Ref<SCMatrixKit> matrixkit() { return matrixkit_; }};}#endif// Local Variables:// mode: c++// c-file-style: "CLJ"// End:

⌨️ 快捷键说明

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