Vpmg class

A wrapper for Mike Holst's PMG multigrid code. More...

Data Structures

struct  sVpmg
 Contains public data members for Vpmg class/module. More...

Files

file  vpmg.h
 

Contains declarations for class Vpmg.


file  vpmg-private.h
 

Class Vpmg private method declaration.


file  vpmg.c
 

Class Vpmg methods.


Typedefs

typedef struct sVpmg Vpmg
 Declaration of the Vpmg class as the Vpmg structure.

Functions

unsigned long int Vpmg_memChk (Vpmg *thee)
 Return the memory used by this structure (and its contents) in bytes.
VpmgVpmg_ctor (Vpmgp *parms, Vpbe *pbe, int focusFlag, Vpmg *pmgOLD, MGparm *mgparm, PBEparm_calcEnergy energyFlag)
 Constructor for the Vpmg class (allocates new memory).
int Vpmg_ctor2 (Vpmg *thee, Vpmgp *parms, Vpbe *pbe, int focusFlag, Vpmg *pmgOLD, MGparm *mgparm, PBEparm_calcEnergy energyFlag)
 FORTRAN stub constructor for the Vpmg class (uses previously-allocated memory).
void Vpmg_dtor (Vpmg **thee)
 Object destructor.
void Vpmg_dtor2 (Vpmg *thee)
 FORTRAN stub object destructor.
int Vpmg_fillco (Vpmg *thee, Vsurf_Meth surfMeth, double splineWin, Vchrg_Meth chargeMeth, int useDielXMap, Vgrid *dielXMap, int useDielYMap, Vgrid *dielYMap, int useDielZMap, Vgrid *dielZMap, int useKappaMap, Vgrid *kappaMap, int useChargeMap, Vgrid *chargeMap)
 Fill the coefficient arrays prior to solving the equation.
int Vpmg_solve (Vpmg *thee)
 Solve the PBE using PMG.
int Vpmg_solveLaplace (Vpmg *thee)
 Solve Poisson's equation with a homogeneous Laplacian operator using the solvent dielectric constant. This solution is performed by a sine wave decomposition.
double Vpmg_energy (Vpmg *thee, int extFlag)
 Get the total electrostatic energy.
double Vpmg_qfEnergy (Vpmg *thee, int extFlag)
 Get the "fixed charge" contribution to the electrostatic energy.
double Vpmg_qfAtomEnergy (Vpmg *thee, Vatom *atom)
 Get the per-atom "fixed charge" contribution to the electrostatic energy.
double Vpmg_qmEnergy (Vpmg *thee, int extFlag)
 Get the "mobile charge" contribution to the electrostatic energy.
double Vpmg_dielEnergy (Vpmg *thee, int extFlag)
 Get the "polarization" contribution to the electrostatic energy.
double Vpmg_dielGradNorm (Vpmg *thee)
 Get the integral of the gradient of the dielectric function.
int Vpmg_force (Vpmg *thee, double *force, int atomID, Vsurf_Meth srfm, Vchrg_Meth chgm)
 Calculate the total force on the specified atom in units of k_B T/AA.
int Vpmg_qfForce (Vpmg *thee, double *force, int atomID, Vchrg_Meth chgm)
 Calculate the "charge-field" force on the specified atom in units of k_B T/AA.
int Vpmg_dbForce (Vpmg *thee, double *dbForce, int atomID, Vsurf_Meth srfm)
 Calculate the dielectric boundary forces on the specified atom in units of k_B T/AA.
int Vpmg_ibForce (Vpmg *thee, double *force, int atomID, Vsurf_Meth srfm)
 Calculate the osmotic pressure on the specified atom in units of k_B T/AA.
void Vpmg_setPart (Vpmg *thee, double lowerCorner[3], double upperCorner[3], int bflags[6])
 Set partition information which restricts the calculation of observables to a (rectangular) subset of the problem domain.
void Vpmg_unsetPart (Vpmg *thee)
 Remove partition restrictions.
int Vpmg_fillArray (Vpmg *thee, double *vec, Vdata_Type type, double parm, Vhal_PBEType pbetype)
 Fill the specified array with accessibility values.
VPUBLIC void Vpmg_fieldSpline4 (Vpmg *thee, int atomID, double field[3])
 Computes the field at an atomic center using a stencil based on the first derivative of a 5th order B-spline.
double Vpmg_qfPermanentMultipoleEnergy (Vpmg *thee, int atomID)
 Computes the permanent multipole electrostatic hydration energy (the polarization component of the hydration energy currently computed in TINKER).
void Vpmg_qfPermanentMultipoleForce (Vpmg *thee, int atomID, double force[3], double torque[3])
 Computes the q-Phi Force for permanent multipoles based on 5th order B-splines.
void Vpmg_ibPermanentMultipoleForce (Vpmg *thee, int atomID, double force[3])
 Compute the ionic boundary force for permanent multipoles.
void Vpmg_dbPermanentMultipoleForce (Vpmg *thee, int atomID, double force[3])
 Compute the dielectric boundary force for permanent multipoles.
void Vpmg_qfDirectPolForce (Vpmg *thee, Vgrid *perm, Vgrid *induced, int atomID, double force[3], double torque[3])
 q-Phi direct polarization force between permanent multipoles and induced dipoles, which are induced by the sum of the permanent intramolecular field and the permanent reaction field.
void Vpmg_qfNLDirectPolForce (Vpmg *thee, Vgrid *perm, Vgrid *nlInduced, int atomID, double force[3], double torque[3])
 q-Phi direct polarization force between permanent multipoles and non-local induced dipoles based on 5th Order B-Splines. Keep in mind that the "non-local" induced dipooles are just a mathematical quantity that result from differentiation of the AMOEBA polarization energy.
void Vpmg_ibDirectPolForce (Vpmg *thee, Vgrid *perm, Vgrid *induced, int atomID, double force[3])
 Ionic boundary direct polarization force between permanent multipoles and induced dipoles, which are induced by the sum of the permanent intramolecular field and the permanent reaction field.
void Vpmg_ibNLDirectPolForce (Vpmg *thee, Vgrid *perm, Vgrid *nlInduced, int atomID, double force[3])
 Ionic boundary direct polarization force between permanent multipoles and non-local induced dipoles based on 5th order Keep in mind that the "non-local" induced dipooles are just a mathematical quantity that result from differentiation of the AMOEBA polarization energy.
void Vpmg_dbDirectPolForce (Vpmg *thee, Vgrid *perm, Vgrid *induced, int atomID, double force[3])
 Dielectric boundary direct polarization force between permanent multipoles and induced dipoles, which are induced by the sum of the permanent intramolecular field and the permanent reaction field.
void Vpmg_dbNLDirectPolForce (Vpmg *thee, Vgrid *perm, Vgrid *nlInduced, int atomID, double force[3])
 Dielectric bounday direct polarization force between permanent multipoles and non-local induced dipoles. Keep in mind that the "non-local" induced dipooles are just a mathematical quantity that result from differentiation of the AMOEBA polarization energy.
void Vpmg_qfMutualPolForce (Vpmg *thee, Vgrid *induced, Vgrid *nlInduced, int atomID, double force[3])
 Mutual polarization force for induced dipoles based on 5th order B-Splines. This force arises due to self-consistent convergence of the solute induced dipoles and reaction field.
void Vpmg_ibMutualPolForce (Vpmg *thee, Vgrid *induced, Vgrid *nlInduced, int atomID, double force[3])
 Ionic boundary mutual polarization force for induced dipoles based on 5th order B-Splines. This force arises due to self-consistent convergence of the solute induced dipoles and reaction field.
void Vpmg_dbMutualPolForce (Vpmg *thee, Vgrid *induced, Vgrid *nlInduced, int atomID, double force[3])
 Dielectric boundary mutual polarization force for induced dipoles based on 5th order B-Splines. This force arises due to self-consistent convergence of the solute induced dipoles and reaction field.
void Vpmg_printColComp (Vpmg *thee, char path[72], char title[72], char mxtype[3], int flag)
 Print out a column-compressed sparse matrix in Harwell-Boeing format.

Detailed Description

A wrapper for Mike Holst's PMG multigrid code.

Note:
Many of the routines and macros are borrowed from the main.c driver (written by Mike Holst) provided with the PMG code.

Function Documentation

Vpmg* Vpmg_ctor ( Vpmgp parms,
Vpbe pbe,
int  focusFlag,
Vpmg pmgOLD,
MGparm mgparm,
PBEparm_calcEnergy  energyFlag 
)

Constructor for the Vpmg class (allocates new memory).

Author:
Nathan Baker
Returns:
Pointer to newly allocated Vpmg object
Parameters:
pbe PMG parameter object
focusFlag PBE-specific variables
pmgOLD 1 for focusing, 0 otherwise
mgparm Old Vpmg object to use for boundary conditions
energyFlag MGparm parameter object for boundary conditions What types of energies to calculate

References Vpmg_ctor2().

Referenced by initMG().

Here is the call graph for this function:

int Vpmg_ctor2 ( Vpmg thee,
Vpmgp parms,
Vpbe pbe,
int  focusFlag,
Vpmg pmgOLD,
MGparm mgparm,
PBEparm_calcEnergy  energyFlag 
)

FORTRAN stub constructor for the Vpmg class (uses previously-allocated memory).

Author:
Nathan Baker
Returns:
1 if successful, 0 otherwise
Parameters:
parms Memory location for object
pbe PMG parameter object
focusFlag PBE-specific variables
pmgOLD 1 for focusing, 0 otherwise
mgparm Old Vpmg object to use for boundary conditions (can be VNULL if focusFlag = 0)
energyFlag MGparm parameter object for boundary conditions (can be VNULL if focusFlag = 0) What types of energies to calculate (ignored if focusFlag = 0)

References sVpmg::a1cf, sVpmg::a2cf, sVpmg::a3cf, sVpmgp::bcfl, BCFL_FOCUS, sVpmg::ccf, sMGparm::center, sVpmg::charge, sVpmg::chargeSrc, sMGparm::chgs, sVpmg::epsx, sVpmg::epsy, sVpmg::epsz, sVpmgp::errtol, sVpmg::extDiEnergy, extEnergy(), sVpmg::extQfEnergy, sVpmg::extQmEnergy, sVpmg::fcf, sVpmg::filled, focusFillBound(), sMGparm::glen, sVpmg::gxcf, sVpmg::gycf, sVpmg::gzcf, sVpmgp::iinfo, sVpmg::iparm, sVpmgp::ipcon, sVpmgp::iperf, sVpmgp::ipkey, IPKEY_LPBE, IPKEY_NPBE, IPKEY_SMPBE, sVpmgp::irite, sVpmgp::istop, sVpmgp::itmax, sVpmg::iwork, sVpmg::kappa, MAXION, MCT_PARALLEL, sVpmgp::meth, sVpmgp::mgcoar, sVpmgp::mgdisc, sVpmgp::mgkey, sVpmgp::mgprol, sVpmgp::mgsmoo, sVpmgp::mgsolv, sVpmgp::n_ipc, sVpmgp::n_iz, sVpmgp::n_rpc, sVpmgp::narr, sVpmgp::narrc, sVpmgp::nc, sVpmgp::nf, sVpmgp::niwk, sVpmgp::nlev, sVpmgp::nonlin, sVpmgp::nrwk, sVpmgp::nu1, sVpmgp::nu2, sVpmgp::nx, sVpmgp::nxc, sVpmgp::ny, sVpmgp::nyc, sVpmgp::nz, sVpmgp::nzc, sVpmgp::omegal, sVpmgp::omegan, sMGparm::partDisjCenter, sMGparm::partDisjLength, sMGparm::partDisjOwnSide, sVpmg::pbe, PCE_NO, sVpmg::pmgp, sVpmg::pvec, sVpmg::rparm, sVpmg::rwork, sVpbe::smsize, sVpbe::smvolume, sVpmg::tcf, sMGparm::type, sVpmg::u, sMGparm::useAqua, sVpmg::vmem, Vpbe_getBulkIonicStrength(), Vpbe_getIons(), Vpbe_getZkappa2(), Vpmg_dtor(), Vpmg_unsetPart(), sVpmg::xf, sVpmg::yf, and sVpmg::zf.

Referenced by Vpmg_ctor().

Here is the call graph for this function:

void Vpmg_dbDirectPolForce ( Vpmg thee,
Vgrid perm,
Vgrid induced,
int  atomID,
double  force[3] 
)

Dielectric boundary direct polarization force between permanent multipoles and induced dipoles, which are induced by the sum of the permanent intramolecular field and the permanent reaction field.

Author:
Michael Schnieders
Parameters:
perm Vpmg object
induced Permanent multipole potential
atomID Induced dipole potential
force Atom index (returned) force
int Vpmg_dbForce ( Vpmg thee,
double *  dbForce,
int  atomID,
Vsurf_Meth  srfm 
)

Calculate the dielectric boundary forces on the specified atom in units of k_B T/AA.

Author:
Nathan Baker
Note:
  • Using the force evaluation methods of Im et al (Roux group), Comput Phys Commun, 111, 59--75 (1998). However, this gives the whole (self-interactions included) force -- reaction field forces will have to be calculated at higher level.
  • No contributions are made from higher levels of focusing.
Returns:
1 if successful, 0 otherwise
Parameters:
dbForce Vpmg object
atomID 3*sizeof(double) space to hold the dielectric boundary force in units of k_B T/AA
srfm Valist ID of desired atom Surface discretization method

References sVpbe::acc, sVpbe::alist, sVpmgp::bcfl, BCFL_FOCUS, sVpmg::epsx, sVpmg::epsy, sVpmg::epsz, sVpmg::filled, sVpmgp::hx, sVpmgp::hy, sVpmgp::hzed, sVpmgp::nx, sVpmgp::ny, sVpmgp::nz, sVatom::partID, sVpmg::pbe, sVpmg::pmgp, sVpmg::splineWin, sVpmg::u, Valist_getAtom(), Vatom_getPosition(), Vatom_getRadius(), Vpbe_getSoluteDiel(), Vpbe_getSolventDiel(), Vpbe_getSolventRadius(), Vpbe_getTemperature(), Vpbe_getZmagic(), Vpmg_splineSelect(), VPMGSMALL, VSM_SPLINE, VSM_SPLINE3, VSM_SPLINE4, Vunit_kb, Vunit_Na, sVpmgp::xlen, sVpmgp::xmax, sVpmgp::xmin, sVpmgp::ylen, sVpmgp::ymax, sVpmgp::ymin, sVpmgp::zlen, sVpmgp::zmax, and sVpmgp::zmin.

Referenced by forceMG(), and Vpmg_force().

Here is the call graph for this function:

void Vpmg_dbMutualPolForce ( Vpmg thee,
Vgrid induced,
Vgrid nlInduced,
int  atomID,
double  force[3] 
)

Dielectric boundary mutual polarization force for induced dipoles based on 5th order B-Splines. This force arises due to self-consistent convergence of the solute induced dipoles and reaction field.

Author:
Michael Schnieders
Parameters:
induced Vpmg object
nlInduced Induced dipole potential
atomID Non-local induced dipole potential
force Atom index (returned) force
void Vpmg_dbNLDirectPolForce ( Vpmg thee,
Vgrid perm,
Vgrid nlInduced,
int  atomID,
double  force[3] 
)

Dielectric bounday direct polarization force between permanent multipoles and non-local induced dipoles. Keep in mind that the "non-local" induced dipooles are just a mathematical quantity that result from differentiation of the AMOEBA polarization energy.

Author:
Michael Schnieders
Parameters:
perm Vpmg object
nlInduced Permanent multipole potential
atomID Non-local induced dipole potential
force Atom index (returned) force
void Vpmg_dbPermanentMultipoleForce ( Vpmg thee,
int  atomID,
double  force[3] 
)

Compute the dielectric boundary force for permanent multipoles.

Author:
Michael Schnieders
Parameters:
atomID Vpmg object
force Atom index (returned) force
double Vpmg_dielEnergy ( Vpmg thee,
int  extFlag 
)

Get the "polarization" contribution to the electrostatic energy.

Using the solution at the finest mesh level, get the electrostatic energy due to the interaction of the mobile charges with the potential:

\[ G = \frac{1}{2} \int \epsilon (\nabla u)^2 dx \]

where epsilon is the dielectric parameter and u(x) is the dimensionless electrostatic potential. The energy is scaled to units of k_b T.

Author:
Nathan Baker
Note:
The value of this observable may be modified by setting restrictions on the subdomain over which it is calculated. Such limits can be set via Vpmg_setPart and are generally useful for parallel runs.
Returns:
The polarization electrostatic energy in units of k_B T.
Parameters:
extFlag Vpmg object If this was a focused calculation, include (1 -- for serial calculations) or ignore (0 -- for parallel calculations) energy contributions from outside the focusing domain

References sVpmg::epsx, sVpmg::epsy, sVpmg::epsz, sVpmg::extDiEnergy, sVpmg::filled, sVpmgp::hx, sVpmgp::hy, sVpmgp::hzed, sVpmgp::nx, sVpmgp::ny, sVpmgp::nz, sVpmg::pbe, sVpmg::pmgp, sVpmg::pvec, sVpmg::u, and Vpbe_getZmagic().

Referenced by energyMG(), extEnergy(), and Vpmg_energy().

Here is the call graph for this function:

double Vpmg_dielGradNorm ( Vpmg thee  ) 

Get the integral of the gradient of the dielectric function.

Using the dielectric map at the finest mesh level, calculate the integral of the norm of the dielectric function gradient routines of Im et al (see Vpmg_dbForce for reference):

\[ \int \| \nabla \epsilon \| dx \]

where epsilon is the dielectric parameter. The integral is returned in units of A^2.

Author:
Nathan Baker restrictions on the subdomain over which it is calculated. Such limits can be set via Vpmg_setPart and are generally useful for parallel runs.
Returns:
The integral in units of A^2.
Parameters:
thee Vpmg object

References sVpmg::epsx, sVpmg::epsy, sVpmg::epsz, sVpmg::filled, sVpmgp::hx, sVpmgp::hy, sVpmgp::hzed, sVpmgp::nx, sVpmgp::ny, sVpmgp::nz, sVpmg::pmgp, and sVpmg::pvec.

void Vpmg_dtor ( Vpmg **  thee  ) 

Object destructor.

Author:
Nathan Baker
Parameters:
thee Pointer to memory location of object to be destroyed

References Vpmg_dtor2().

Referenced by initMG(), killMG(), and Vpmg_ctor2().

Here is the call graph for this function:

void Vpmg_dtor2 ( Vpmg thee  ) 
double Vpmg_energy ( Vpmg thee,
int  extFlag 
)

Get the total electrostatic energy.

Author:
Nathan Baker
Note:
The value of this observable may be modified by setting restrictions on the subdomain over which it is calculated. Such limits can be set via Vpmg_setPart and are generally useful for parallel runs.
Returns:
The electrostatic energy in units of k_B T.
Parameters:
extFlag Vpmg object If this was a focused calculation, include (1 -- for serial calculations) or ignore (0 -- for parallel calculations) energy contributions from outside the focusing domain

References sVpmgp::nonlin, sVpmg::pbe, sVpmg::pmgp, Vpbe_getBulkIonicStrength(), Vpmg_dielEnergy(), Vpmg_qfEnergy(), and Vpmg_qmEnergy().

Referenced by energyMG().

Here is the call graph for this function:

VPUBLIC void Vpmg_fieldSpline4 ( Vpmg thee,
int  atomID,
double  field[3] 
)

Computes the field at an atomic center using a stencil based on the first derivative of a 5th order B-spline.

Author:
Michael Schnieders
Parameters:
atomID Vpmg object
field Atom index The (returned) electric field
int Vpmg_fillArray ( Vpmg thee,
double *  vec,
Vdata_Type  type,
double  parm,
Vhal_PBEType  pbetype 
)

Fill the specified array with accessibility values.

Author:
Nathan Baker
Returns:
1 if successful, 0 otherwise
Parameters:
vec Vpmg object
type A nx*ny*nz*sizeof(double) array to contain the values to be written
parm What to write
pbetype Parameter for data type definition (if needed) Parameter for PBE type (if needed)

References sVpmg::charge, sVpmg::epsx, sVpmg::epsy, sVpmg::epsz, sVpmg::filled, sVpmgp::hx, sVpmgp::hy, sVpmgp::hzed, sVpbe::ionConc, sVpbe::ionQ, sVpmg::kappa, sVpbe::maxIonRadius, sVpbe::numIon, sVpmgp::nx, sVpmgp::ny, sVpmgp::nz, sVpmg::pbe, PBE_LPBE, PBE_NPBE, PBE_SMPBE, sVpmg::pmgp, sVpbe::solventRadius, sVpmg::u, Vacc_ivdwAcc(), Vacc_molAcc(), Vacc_splineAcc(), Vacc_vdwAcc(), Vcap_exp(), VDT_CHARGE, VDT_DIELX, VDT_DIELY, VDT_DIELZ, VDT_EDENS, VDT_IVDW, VDT_KAPPA, VDT_LAP, VDT_NDENS, VDT_POT, VDT_QDENS, VDT_SMOL, VDT_SSPL, VDT_VDW, Vgrid_ctor(), Vgrid_curvature(), Vgrid_dtor(), Vgrid_gradient(), Vpbe_getSoluteDiel(), Vpbe_getSolventDiel(), Vpbe_getVacc(), Vpbe_getZmagic(), sVpmgp::xmin, sVpmgp::ymin, and sVpmgp::zmin.

Referenced by writedataMG().

Here is the call graph for this function:

int Vpmg_fillco ( Vpmg thee,
Vsurf_Meth  surfMeth,
double  splineWin,
Vchrg_Meth  chargeMeth,
int  useDielXMap,
Vgrid dielXMap,
int  useDielYMap,
Vgrid dielYMap,
int  useDielZMap,
Vgrid dielZMap,
int  useKappaMap,
Vgrid kappaMap,
int  useChargeMap,
Vgrid chargeMap 
)

Fill the coefficient arrays prior to solving the equation.

Author:
Nathan Baker
Returns:
1 if successful, 0 otherwise
Parameters:
surfMeth Vpmg object
splineWin Surface discretization method
chargeMeth Spline window (in A) for surfMeth = VSM_SPLINE
useDielXMap Charge discretization method
dielXMap Boolean to use dielectric map argument
useDielYMap External dielectric map
dielYMap Boolean to use dielectric map argument
useDielZMap External dielectric map
dielZMap Boolean to use dielectric map argument
useKappaMap External dielectric map
kappaMap Boolean to use kappa map argument
useChargeMap External kappa map
chargeMap Boolean to use charge map argument External charge map

References bcCalc(), sVpmgp::bcfl, BCFL_FOCUS, sVpmg::chargeMap, sVpmg::chargeMeth, sVpmg::dielXMap, sVpmg::dielYMap, sVpmg::dielZMap, sVpmg::epsx, sVpmg::epsy, sVpmg::epsz, fillcoCharge(), fillcoCoef(), sVpmg::filled, sVpmgp::hx, sVpmgp::hy, sVpmgp::hzed, sVpmg::kappa, sVpmg::kappaMap, sVpmgp::nx, sVpmgp::ny, sVpmgp::nz, sVpmg::pbe, sVpmg::pmgp, sVpmg::rparm, sVpmg::splineWin, sVpmg::surfMeth, sVpmg::tcf, sVpmg::useChargeMap, sVpmg::useDielXMap, sVpmg::useDielYMap, sVpmg::useDielZMap, sVpmg::useKappaMap, Vpbe_getBulkIonicStrength(), Vpbe_getSoluteDiel(), Vpbe_getSolventDiel(), VPMGSMALL, VRC_FAILURE, VRC_SUCCESS, sVpmgp::xcent, sVpmg::xf, sVpmgp::xlen, sVpmgp::xmax, sVpmgp::xmin, sVpmgp::ycent, sVpmg::yf, sVpmgp::ylen, sVpmgp::ymax, sVpmgp::ymin, sVpmgp::zcent, sVpmg::zf, sVpmgp::zlen, sVpmgp::zmax, and sVpmgp::zmin.

Referenced by initMG().

Here is the call graph for this function:

int Vpmg_force ( Vpmg thee,
double *  force,
int  atomID,
Vsurf_Meth  srfm,
Vchrg_Meth  chgm 
)

Calculate the total force on the specified atom in units of k_B T/AA.

Author:
Nathan Baker
Note:
  • Using the force evaluation methods of Im et al (Roux group), Comput Phys Commun, 111, 59--75 (1998). However, this gives the whole (self-interactions included) force -- reaction field forces will have to be calculated at higher level.
  • No contributions are made from higher levels of focusing.
Returns:
1 if successful, 0 otherwise
Parameters:
force Vpmg object
atomID 3*sizeof(double) space to hold the force in units of k_B T/AA
srfm Valist ID of desired atom
chgm Surface discretization method Charge discretization method

References Vpmg_dbForce(), Vpmg_ibForce(), and Vpmg_qfForce().

Here is the call graph for this function:

void Vpmg_ibDirectPolForce ( Vpmg thee,
Vgrid perm,
Vgrid induced,
int  atomID,
double  force[3] 
)

Ionic boundary direct polarization force between permanent multipoles and induced dipoles, which are induced by the sum of the permanent intramolecular field and the permanent reaction field.

Author:
Michael Schnieders
Parameters:
perm Vpmg object
induced Permanent multipole potential
atomID Induced dipole potential
force Atom index (returned) force
int Vpmg_ibForce ( Vpmg thee,
double *  force,
int  atomID,
Vsurf_Meth  srfm 
)

Calculate the osmotic pressure on the specified atom in units of k_B T/AA.

Author:
Nathan Baker
Note:
  • Using the force evaluation methods of Im et al (Roux group), Comput Phys Commun, 111, 59--75 (1998). However, this gives the whole (self-interactions included) force -- reaction field forces will have to be calculated at higher level.
  • No contributions are made from higher levels of focusing.
Returns:
1 if successful, 0 otherwise
Parameters:
force Vpmg object
atomID 3*sizeof(double) space to hold the boundary force in units of k_B T/AA
srfm Valist ID of desired atom Surface discretization method

References sVpbe::acc, sVpbe::alist, sVpmgp::bcfl, BCFL_FOCUS, sVpmgp::hx, sVpmgp::hy, sVpmgp::hzed, sVpmg::kappa, MAXION, sVpmgp::nonlin, sVpmgp::nx, sVpmgp::ny, sVpmgp::nz, sVatom::partID, sVpmg::pbe, sVpmg::pmgp, sVpmg::splineWin, sVpmg::u, Valist_getAtom(), Vatom_getPosition(), Vatom_getRadius(), Vcap_exp(), Vpbe_getBulkIonicStrength(), Vpbe_getIons(), Vpbe_getMaxIonRadius(), Vpbe_getZkappa2(), Vpbe_getZmagic(), Vpmg_splineSelect(), VPMGSMALL, VSM_SPLINE, VSM_SPLINE3, VSM_SPLINE4, sVpmgp::xlen, sVpmgp::xmax, sVpmgp::xmin, sVpmgp::ylen, sVpmgp::ymax, sVpmgp::ymin, sVpmgp::zlen, sVpmgp::zmax, and sVpmgp::zmin.

Referenced by forceMG(), and Vpmg_force().

Here is the call graph for this function:

void Vpmg_ibMutualPolForce ( Vpmg thee,
Vgrid induced,
Vgrid nlInduced,
int  atomID,
double  force[3] 
)

Ionic boundary mutual polarization force for induced dipoles based on 5th order B-Splines. This force arises due to self-consistent convergence of the solute induced dipoles and reaction field.

Author:
Michael Schnieders
Parameters:
induced Vpmg object
nlInduced Induced dipole potential
atomID Non-local induced dipole potential
force Atom index (returned) force
void Vpmg_ibNLDirectPolForce ( Vpmg thee,
Vgrid perm,
Vgrid nlInduced,
int  atomID,
double  force[3] 
)

Ionic boundary direct polarization force between permanent multipoles and non-local induced dipoles based on 5th order Keep in mind that the "non-local" induced dipooles are just a mathematical quantity that result from differentiation of the AMOEBA polarization energy.

Author:
Michael Schnieders
Parameters:
perm Vpmg object
nlInduced Permanent multipole potential
atomID Induced dipole potential
force Atom index (returned) force
void Vpmg_ibPermanentMultipoleForce ( Vpmg thee,
int  atomID,
double  force[3] 
)

Compute the ionic boundary force for permanent multipoles.

Author:
Michael Schnieders
Parameters:
atomID Vpmg object
force Atom index (returned) force
unsigned long int Vpmg_memChk ( Vpmg thee  ) 

Return the memory used by this structure (and its contents) in bytes.

Author:
Nathan Baker
Returns:
The memory used by this structure and its contents in bytes
Parameters:
thee Object for memory check

References sVpmg::vmem.

void Vpmg_printColComp ( Vpmg thee,
char  path[72],
char  title[72],
char  mxtype[3],
int  flag 
)

Print out a column-compressed sparse matrix in Harwell-Boeing format.

Author:
Nathan Baker
Bug:
Can this path variable be replaced with a Vio socket?
Parameters:
path Vpmg object
title The file to which the matrix is to be written
mxtype The title of the matrix
flag The type of REAL-valued matrix, a 3-character string of the form "R_A" where the '_' can be one of:

  • S: symmetric matrix
  • U: unsymmetric matrix
  • H: Hermitian matrix
  • Z: skew-symmetric matrix
  • R: rectangular matrix The operator to compress:
  • 0: Poisson operator
  • 1: Linearization of the full Poisson-Boltzmann operator around the current solution

References sVpmg::iparm, sVpmg::iwork, sVpmgp::nx, sVpmgp::ny, sVpmgp::nz, sVpmg::pmgp, sVpmg::rparm, sVpmg::rwork, and sVpmg::vmem.

Referenced by writematMG().

double Vpmg_qfAtomEnergy ( Vpmg thee,
Vatom atom 
)

Get the per-atom "fixed charge" contribution to the electrostatic energy.

Using the solution at the finest mesh level, get the electrostatic energy due to the interaction of the fixed charges with the potential:

\[ G = q u(r), \]

where q$ is the charge and r is the location of the atom of interest. The result is returned in units of k_B T. Clearly, no self-interaction terms are removed. A factor a 1/2 has to be included to convert this to a real energy.

Author:
Nathan Baker
Note:
The value of this observable may be modified by setting restrictions on the subdomain over which it is calculated. Such limits can be set via Vpmg_setPart and are generally useful for parallel runs.
Returns:
The fixed charge electrostatic energy in units of k_B T.
Parameters:
atom The Vpmg object The atom for energy calculations

References sVpmgp::bcfl, BCFL_FOCUS, sVpmgp::hx, sVpmgp::hy, sVpmgp::hzed, sVpmgp::nx, sVpmgp::ny, sVpmgp::nz, sVatom::partID, sVpmg::pmgp, sVpmg::u, Vatom_getCharge(), Vatom_getPosition(), sVpmg::xf, sVpmg::yf, and sVpmg::zf.

Referenced by energyMG(), and storeAtomEnergy().

Here is the call graph for this function:

void Vpmg_qfDirectPolForce ( Vpmg thee,
Vgrid perm,
Vgrid induced,
int  atomID,
double  force[3],
double  torque[3] 
)

q-Phi direct polarization force between permanent multipoles and induced dipoles, which are induced by the sum of the permanent intramolecular field and the permanent reaction field.

Author:
Michael Schnieders
Parameters:
perm Vpmg object
induced Permanent multipole potential
atomID Induced dipole potential
force Atom index
torque (returned) force (returned) torque
double Vpmg_qfEnergy ( Vpmg thee,
int  extFlag 
)

Get the "fixed charge" contribution to the electrostatic energy.

Using the solution at the finest mesh level, get the electrostatic energy due to the interaction of the fixed charges with the potential:

\[ G = \sum_i q_i u(r_i) \]

and return the result in units of k_B T. Clearly, no self-interaction terms are removed. A factor a 1/2 has to be included to convert this to a real energy.

Author:
Nathan Baker
Note:
The value of this observable may be modified by setting restrictions on the subdomain over which it is calculated. Such limits can be set via Vpmg_setPart and are generally useful for parallel runs.
Returns:
The fixed charge electrostatic energy in units of k_B T.
Parameters:
extFlag Vpmg object If this was a focused calculation, include (1 -- for serial calculations) or ignore (0 -- for parallel calculations) energy contributions from outside the focusing domain

References sVpmg::chargeMeth, sVpmg::useChargeMap, VCM_BSPL2, Vpmg_qfEnergyPoint(), and Vpmg_qfEnergyVolume().

Referenced by energyMG(), extEnergy(), and Vpmg_energy().

Here is the call graph for this function:

int Vpmg_qfForce ( Vpmg thee,
double *  force,
int  atomID,
Vchrg_Meth  chgm 
)

Calculate the "charge-field" force on the specified atom in units of k_B T/AA.

Author:
Nathan Baker
Note:
  • Using the force evaluation methods of Im et al (Roux group), Comput Phys Commun, 111, 59--75 (1998). However, this gives the whole (self-interactions included) force -- reaction field forces will have to be calculated at higher level.
  • No contributions are made from higher levels of focusing.
Returns:
1 if sucessful, 0 otherwise
Parameters:
force Vpmg object
atomID 3*sizeof(double) space to hold the force in units of k_B T/A
chgm Valist ID of desired atom Charge discretization method

References qfForceSpline1(), qfForceSpline2(), qfForceSpline4(), VCM_BSPL2, VCM_BSPL4, and VCM_TRIL.

Referenced by forceMG(), and Vpmg_force().

Here is the call graph for this function:

void Vpmg_qfMutualPolForce ( Vpmg thee,
Vgrid induced,
Vgrid nlInduced,
int  atomID,
double  force[3] 
)

Mutual polarization force for induced dipoles based on 5th order B-Splines. This force arises due to self-consistent convergence of the solute induced dipoles and reaction field.

Author:
Michael Schnieders
Parameters:
induced Vpmg object
nlInduced Induced dipole potential
atomID Non-local induced dipole potential
force Atom index (returned) force
void Vpmg_qfNLDirectPolForce ( Vpmg thee,
Vgrid perm,
Vgrid nlInduced,
int  atomID,
double  force[3],
double  torque[3] 
)

q-Phi direct polarization force between permanent multipoles and non-local induced dipoles based on 5th Order B-Splines. Keep in mind that the "non-local" induced dipooles are just a mathematical quantity that result from differentiation of the AMOEBA polarization energy.

Author:
Michael Schnieders
Parameters:
perm Vpmg object
nlInduced Permanent multipole potential
atomID Non-local induced dipole potential
force Atom index
torque (returned) force (returned) torque
double Vpmg_qfPermanentMultipoleEnergy ( Vpmg thee,
int  atomID 
)

Computes the permanent multipole electrostatic hydration energy (the polarization component of the hydration energy currently computed in TINKER).

Author:
Michael Schnieders
Returns:
The permanent multipole electrostatic hydration energy
Parameters:
atomID Vpmg object Atom index
void Vpmg_qfPermanentMultipoleForce ( Vpmg thee,
int  atomID,
double  force[3],
double  torque[3] 
)

Computes the q-Phi Force for permanent multipoles based on 5th order B-splines.

Author:
Michael Schnieders
Parameters:
atomID Vpmg object
force Atom index
torque (returned) force (returned) torque
double Vpmg_qmEnergy ( Vpmg thee,
int  extFlag 
)

Get the "mobile charge" contribution to the electrostatic energy.

Using the solution at the finest mesh level, get the electrostatic energy due to the interaction of the mobile charges with the potential:

\[ G = \frac{1}{4 I_s} \sum_i c_i q_i^2 \int \kappa^2(x) e^{-q_i u(x)} dx \]

for the NPBE and

\[ G = \frac{1}{2} \int \overline{\kappa}^2(x) u^2(x) dx \]

for the LPBE. Here i denotes the counterion species, I_s is the bulk ionic strength, kappa^2(x) is the modified Debye-Huckel parameter, c_i is the concentration of species i, q_i is the charge of species i, and u(x) is the dimensionless electrostatic potential. The energy is scaled to units of k_b T.

Author:
Nathan Baker
Note:
The value of this observable may be modified by setting restrictions on the subdomain over which it is calculated. Such limits can be set via Vpmg_setPart and are generally useful for parallel runs.
Returns:
The mobile charge electrostatic energy in units of k_B T.
Parameters:
extFlag Vpmg object If this was a focused calculation, include (1 -- for serial calculations) or ignore (0 -- for parallel calculations) energy contributions from outside the focusing domain

References sVpbe::ipkey, IPKEY_SMPBE, sVpmg::pbe, and Vpmg_qmEnergySMPBE().

Referenced by energyMG(), extEnergy(), and Vpmg_energy().

Here is the call graph for this function:

void Vpmg_setPart ( Vpmg thee,
double  lowerCorner[3],
double  upperCorner[3],
int  bflags[6] 
)

Set partition information which restricts the calculation of observables to a (rectangular) subset of the problem domain.

Author:
Nathan Baker
Parameters:
lowerCorner Vpmg object
upperCorner Partition lower corner
bflags Partition upper corner Booleans indicating whether a particular processor is on the boundary with another partition. 0 if the face is not bounded (next to) another partition, and 1 otherwise.

References sVpbe::alist, sVpmgp::hx, sVpmgp::hy, sVpmgp::hzed, sVpmgp::nx, sVpmgp::ny, sVpmgp::nz, sVatom::partID, sVpmg::pbe, sVpmg::pmgp, sVatom::position, sVpmg::pvec, Valist_getAtom(), Valist_getNumberAtoms(), VAPBS_BACK, VAPBS_DOWN, VAPBS_FRONT, VAPBS_LEFT, VAPBS_RIGHT, VAPBS_UP, VPMGSMALL, sVpmgp::xcent, sVpmgp::ycent, and sVpmgp::zcent.

Referenced by extEnergy(), and setPartMG().

Here is the call graph for this function:

int Vpmg_solve ( Vpmg thee  ) 

Solve the PBE using PMG.

Author:
Nathan Baker
Returns:
1 if successful, 0 otherwise
Parameters:
thee Vpmg object

References sVpmg::a1cf, sVpmg::a2cf, sVpmg::a3cf, sVpmg::ccf, sVpmg::charge, sVpmg::epsx, sVpmg::epsy, sVpmg::epsz, sVpmg::fcf, sVpmg::filled, sVpmg::gxcf, sVpmg::gycf, sVpmg::gzcf, sVpmg::iparm, sVpmg::iwork, sVpmg::kappa, sVpmgp::key, sVpmgp::meth, sVpmgp::nx, sVpmgp::ny, sVpmgp::nz, sVpmg::pbe, sVpmg::pmgp, sVpmg::rparm, sVpmg::rwork, sVpmg::tcf, sVpmg::u, Vpbe_getZkappa2(), VPMGSMALL, sVpmg::xf, sVpmg::yf, and sVpmg::zf.

Referenced by solveMG().

Here is the call graph for this function:

int Vpmg_solveLaplace ( Vpmg thee  ) 

Solve Poisson's equation with a homogeneous Laplacian operator using the solvent dielectric constant. This solution is performed by a sine wave decomposition.

Author:
Nathan Baker
Returns:
1 if successful, 0 otherwise
Note:
This function is really only for testing purposes as the PMG multigrid solver can solve the homogeneous system much more quickly. Perhaps we should implement an FFT version at some point...
Parameters:
thee Vpmg object

References sVpmg::charge, sVpmg::fcf, sVpmg::filled, sVpmg::gxcf, sVpmg::gycf, sVpmg::gzcf, sVpmgp::hx, sVpmgp::hy, sVpmgp::hzed, sVpmgp::nx, sVpmgp::ny, sVpmgp::nz, sVpmg::pbe, sVpmg::pmgp, sVpmg::tcf, sVpmg::u, Vpbe_getSolventDiel(), and zlapSolve().

Here is the call graph for this function:

void Vpmg_unsetPart ( Vpmg thee  ) 

Remove partition restrictions.

Author:
Nathan Baker
Parameters:
thee Vpmg object

References sVpbe::alist, sVpmgp::nx, sVpmgp::ny, sVpmgp::nz, sVatom::partID, sVpmg::pbe, sVpmg::pmgp, sVpmg::pvec, Valist_getAtom(), and Valist_getNumberAtoms().

Referenced by extEnergy(), and Vpmg_ctor2().

Here is the call graph for this function:


Generated by  doxygen 1.6.2