/usr/include/sc/chemistry/solvent/bem.h is in libsc-dev 2.3.1-16.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 | //
// 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:
|