This discusses how to use t12 programs to solve the Poisson equation of dielectic solvation models for electrostatic hydration free energies of ions, molecules, and complexes. This write-up is structured in four sections:
The burden of the calculation is to set-up and solve simultaneous
linear equations A.x = b. The solution x is
the electrostatic potential on the molecular surface; b is
the bare (no solvation) electrostatic potential on the
molecular surface. In many cases we have studied we required 10K (or
more) sampling (or tesselation) points on the molecular surface. So
A.x = b typically represents several thousand simultaneous
linear equations.
These linear equations are solved with a "mixed direct-iterative"
strategy suggested by multi-grid techniques. First, a coarsened
problem is solved by a direct method to provide the spatially slowly
varying features of the solution x. This coarse solution
(as an initial estimate) is then embedded on a finer scale spatial
lattice. The higher resolution answer is then sought for the problem
on the fine lattice which has many more points. The higher resolution
answer is obtained by "nested iteration:"
A.xa - b where
xais the current approximate solution. With
the view that this error should be spatially slowly varying, the
calculation solves for the error on the coarse lattice using a direct
method and intermediate results (factorized matrices) from the initial
coarse solution. Note from these algorithm comments:
|b|.) (back to the top?) Since the number of linear equations can be large, the memory requirements for these calculations can be large. In order to be specific and thus economical with memory requirements the calculation is carried-out with two programs that are run in sequence:
scope - sets up ("scopes") the lattices on the
molecular surface, prunes and notes-down necessary lattice info, and
writes that to the temporary local file tlat.dat. The
executable is
/n/home4/lrp/source/ellpde/JCHOL.06/scope.jchol - picks up the lattice info established by
scope and placed in the local temporary file
tlat.dat, then finishes the calculation. The executable
is
/n/home4/lrp/source/ellpde/JCHOL.06/jchol.
I typically run these calculations with a mini-script, e.g.
rjc:
rm tlat.dat /n/home4/lrp/source/ellpde/JCHOL.06/scope < $1 > $2 /n/home4/lrp/source/ellpde/JCHOL.06/jchol < $1 >> $2 rm tlat.datThen I do something like
%rjc input.go output.out &It is discussed below what the input and output should be.
Note the inelegant treatment of the temporary, local lattice
data file tlat.dat. It is written by scope,
read by jchol, then not used further. If you get in a
situation where you run scope a second time before
jchol is finished reading tlat.dat from a
earlier execution of scope, you might "step-on" the data
that jchol needs and things might get screwed-up.
jchol does this input promptly on start-up, once and for
all. As you can see from the script above, I've been (mostly) careful
to clean-up tlat.dat so these confusions don't do serious
damage.
back to the top? Here I give a full example of input and output. The application molecule is imidazole with the molecular data obtained from Greg Tawa.
The input procedure is slightly indirect because the program permits an interactive use. That 'interactive feature' is not very special (or that useful) for serious calculations after the input data required is settled.
(I needn't discuss that interactive use here, except to say that if
you merely run scope as, e.g.:
%scopeyou will get prompts for input to be typed at the terminal, and then terminal output. That helps for code development, debugging, etc. where you run really simple special cases and immediately get results that you don't need to save.)
The necessary molecular information is in a file that I refer to
as the "setup" file, e.g., for imidazole im.b.liq.set:
im.b.liq.set - check version 6 77.4 1.0 324 100 4000 9 7 .00000E+00 .11050E+01 .00000E+00 6 -.10910E+01 .28200E+00 .00000E+00 7 -.74100E+00 -.98300E+00 .00000E+00 6 .63600E+00 -.98400E+00 .00000E+00 6 .11200E+01 .29800E+00 .00000E+00 1 .21190E+01 .70000E+00 .00000E+00 1 -.90000E-02 .21120E+01 .00000E+00 1 -.21020E+01 .66100E+00 .00000E+00 1 .11970E+01 -.19050E+01 .00000E+00 N -.90285E-01 .15000E+01 C .23237E+00 .22300E+01 N -.71590E+00 .15000E+01 C .21736E+00 .22300E+01 C -.37469E+00 .22300E+01 H .22838E+00 .17100E+01 H .31803E+00 .17100E+01 H .10239E+00 .11600E+01 H .82346E-01 .17100E+01 n 1 186 2 36 3 186 4 36 5 36 6 36 7 36 8 186 9 36
The description of this input is as follows:
READ(9,*) esol.READ(9,*) emol. READ(9,*)
nplax. With the currently compiled scope this must
be no greater than 10 000.READ(9,*) nppp. scope will end-up
with much fewer due to intricacies of the lattice generation and the
fact that lots of lattice points initially generated will be buried;
e.g. the results here "requested" 75000 fine lattice points but the
calculation ended-up with 11792(see below);
READ(9,*) nflscope this must be no greater than 100 000.
READ(9,*) nsrcsREAD(9,*)
nz(m), x(m), y(m), z(m); the atomic number, cartesian
positions, in Å, of each atom. READ(9,*)
as(m), q(m), rad(m); as(m): `atomic symbol,' a CHARACTER*2
identifier of your choosing for this atom, e.g., Cl for
chlorine; q(m) the partial charge (in e) located at this atom center;
and rad(m): a radius parameter (in Å) for this atom center.
There are some new tricks possible in this input list.
im.b.liq.gg.If no subsequent lines are included then the program, when rewriting the input data for archival purposes, will write-out one such line for each atom. You can edit these lines if you want to specify these target plaque numbers in subsequent calculations.
Re-emphasis: if the radius of a particular center is zero, you will get zero for the target plaque number there too.
Otherwise, the smallest reasonable number is "6" (that is roughly: tesselating a sphere with the points of the embedded octahedron) but you might choose from: 3(5j-1)/2 = 6, 36, 186, 936, 4686, 23436, ... (those numbers are already too large to use). This formula is historical but it conveys the horse-sense that to make a two dimensional lattice significantly more dense the density should increase asymptotically by about a factor of 5. You are best off trying to use a minimal coarse lattice: The final accuracy is just limited by the density of the fine lattice. So you want a rough-and-ready coarse lattice that doesn't miss spheres that are important to you. In cases where an important sphere is almost buried but not quite, I jack-up the requested plaque numbers for that sphere so that some coarse lattice points will survive unburied on that exposed surface.
Now to run with this input I construct another input file, e.g.
im.b.liq.go:
n im.b.liq.set im.b.liq.setThese three lines say
Then as indicated above, I run
%rjc im.b.liq.go im.b.liq.out &
The results (im.b.liq.out) I get
are shown below. I annotate this typical output with a few comments
set in bold type.
character input:
interactive set-up? (y/n) =
n
character input:
filename (char*20) for the input file =
im.b.liq.set
the input file is im.b.liq.set
date: Tue Jun 30 15:46:49 1998
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Copyright Notice for JCHOL
Copyright (1996), The Regents of the University of California.
This software was produced under U.S. Government contract
W-7405-ENG-36 for Los Alamos National Laboratory, which is operated
by the University of California for the U.S. Department of Energy.
The U.S. Government is licensed to use, reproduce, and distribute
this software in accordance with the terms of the contract. Neither
the Government nor the University makes any warranty, express or
implied, or assumes any liability or responsibility for the use of
this software.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
im.b.liq.set - check version 6
setting-up ...
SET-UP FOR JCHOL.06 RUN -- NOW SCOPING THE LATTICE
the value of the solution dielectric constant is
esol = 77.4000
the value of the interior dielectric constant is
emol = 1.0000
target (max) number of plax for this calculation is
nplax = 324
target (max) number of fine lattice points is
nfl = 75000
target (max) total MC points for this calculation is
(fine-plax)*(points/plaq) = 75000 * 100 = 7500000
there are 9 sources
i x(A) y(A) z(A) q/e
1/N .000 1.105 .000 -.090
2/C -1.091 .282 .000 .232
3/N -.741 -.983 .000 -.716
4/C .636 -.984 .000 .217
5/C 1.120 .298 .000 -.375
6/H 2.119 .700 .000 .228
7/H -.009 2.112 .000 .318
8/H -2.102 .661 .000 .102
9/H 1.197 -1.905 .000 .082
TOTAL: .000
You can check here that the input data for the
positions and partial charges were correct. Note that the sum of the
partial charges is zero - imidazole is a neutral molecule.
INTEGER SEED USED WITH RNUM = -899243209
the molecular volume is the union of spherical cavities
there are 9 cavity spheres
i xcnt(A) ycnt(A) zcnt(A) R(A)
----> a(A^2) v(A^3) x-fraction-area
1 .000 1.105 .000 1.500
----> .000E+00 .000E+00 .000E+00
2 -1.091 .282 .000 2.230
----> .341E+02 .337E+02 .546E+00
3 -.741 -.983 .000 1.500
----> .296E+01 .100E+01 .105E+00
4 .636 -.984 .000 2.230
----> .200E+02 .251E+02 .320E+00
5 1.120 .298 .000 2.230
----> .175E+02 .243E+02 .280E+00
6 2.119 .700 .000 1.710
----> .139E+02 .674E+01 .379E+00
7 -.009 2.112 .000 1.710
----> .187E+02 .127E+02 .508E+00
8 -2.102 .661 .000 1.160
----> .146E+00 .152E-02 .865E-02
9 1.197 -1.905 .000 1.710
----> .139E+02 .678E+01 .379E+00
TOTALS: .121E+03 .110E+03
You can check here that the input data for
the position and radii of each sphere was correct. The --> line gives
exposed areas and volumes for each sphere where the volume of each
sphere is the faceted volume bounded by spherical surfaces and pair
cutting planes.
the will be no graphics output this time
give the filename (char*20) for the setup data file
setup data file is im.b.liq.set
done with set-up, here we go ...
SOBOL SAMPLING FOR SPHERICAL LATTICE
distribution of points over exposed surface of cavities
there are 9 cavity spheres
i xcnt(A) ycnt(A) zcnt(A) points
1 .000 1.105 .000 0
2 -1.091 .282 .000 18
3 -.741 -.983 .000 20
4 .636 -.984 .000 12
5 1.120 .298 .000 13
6 2.119 .700 .000 14
7 -.009 2.112 .000 18
8 -2.102 .661 .000 3
9 1.197 -1.905 .000 13
THERE ARE 111 PLAQUETTES ON THE EXPOSED SURFACE
We anticipated 774 plaques and got 111. Note that our
surface area estimate (above) was that sphere #1 had no (ZERO) exposed surface. Sphere # 8 had only a small
exposed surface area; only about 0.9% of its total
surface was exposed. Only 3 of the 186 plaquettes (3/186=0.016) on
that sphere survived, unburied on the exposed surface. Notice that
the program doesn't permit fine lattice points on spheres that have no
coarse lattice points - the fine lattice points would have no coarse
plaquettes to call their home.
no coarse points on center 1, no fine points permitted either
SOBOL SAMPLING FOR SPHERICAL LATTICE
distribution of points over exposed surface of cavities
there are 9 cavity spheres
i xcnt(A) ycnt(A) zcnt(A) points
1 .000 1.105 .000 0
2 -1.091 .282 .000 2563
3 -.741 -.983 .000 490
4 .636 -.984 .000 1508
5 1.120 .298 .000 1309
6 2.119 .700 .000 1775
7 -.009 2.112 .000 2386
8 -2.102 .661 .000 9
9 1.197 -1.905 .000 1780
THERE ARE 11820 FINE LATTICE POINTS EXPOSED
We anticipated 75000 fine lattice points and got 11820.
(min,max) plaque occupancy in HOME = ( 2, 298)
Occupancy is: fine lattice points on (coarse) plaquettes.
You should never get 0 (zero) for the minimum occupancy - something is
wrong in that case. You would like substantial occupancy in all
plaquettes. scope ends here and jchol
starts-up.
date: Tue Jun 30 15:52:30 1998
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Copyright Notice for JCHOL
Copyright (1996), The Regents of the University of California.
This software was produced under U.S. Government contract
W-7405-ENG-36 for Los Alamos National Laboratory, which is operated
by the University of California for the U.S. Department of Energy.
The U.S. Government is licensed to use, reproduce, and distribute
this software in accordance with the terms of the contract. Neither
the Government nor the University makes any warranty, express or
implied, or assumes any liability or responsibility for the use of
this software.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
picking-up lattice, resuming ...
im.b.liq.set - check version 6
INTEGER SEED USED WITH RNUM = -899243550
SAMPLING ESTIMATE OF FRACTIONAL SOLID ANGLES
(min,max) sample size in FSA = ( 93481, 468580)
------------------------------
results for the solvated case:
------------------------------
0-th coarse: rms-residual/rms-right-side = .10000E+01
___ ____________
close boundary element pairs that required MC: 138
______
row-sum with largest absolute value .4265E-02
____________
BOTH MATRIX AND VECTOR ARE NOW READY -- SOLVE !
RESULTS FOR INTERIOR POINTS
there are 9 sources
i x(A) y(A) z(A) phi(VOLTS)
1 .000 1.105 .000 -.31203E+00
2 -1.091 .282 .000 .31064E+00
3 -.741 -.983 .000 .12840E+01
4 .636 -.984 .000 .65070E+00
5 1.120 .298 .000 -.26628E-01
6 2.119 .700 .000 -.38881E+00
7 -.009 2.112 .000 -.92401E+00
8 -2.102 .661 .000 -.72575E-01
9 1.197 -1.905 .000 .57990E+00
EXCESS CHEMICAL POTENTIAL (DMU) = -.50489323E+00 eV
===============================
Results after the initial coarse calculations. DMU = -.50489323E+00 eV"
V-PASS GAUSS-SEIDEL ITERATIVE REFINEMENT, TOLERANCE = .10000E-03
iteration rms-residual / rms-right-side factor
1 .20848E+00 .00000E+00
2 .15694E-01 .13284E+02
3 .23146E-02 .67806E+01
1-th coarse: rms-residual/rms-right-side = .37483E-03
___ ____________
EXCESS CHEMICAL POTENTIAL (DMU) = -.55549344E+00 eV
===============================
Results after the first batch of Gauss-Seidel relaxations
plus the first course update. "factor" (".13284E+02" after the second
iteration) is the current the rate of reduction of the error. The
calculation will stay with the Gauss-Seidel relaxation as long as this
factor doesn't decrease or for three passes. After updating the error
on the coarse lattice "1-th coarse:" the error ".37483E-03" is still
larger than the tolerance "0.10000E-03." The free energy has
decreased by about 0.051eV from the initial coarse result.
V-PASS GAUSS-SEIDEL ITERATIVE REFINEMENT, TOLERANCE = .10000E-03
iteration rms-residual / rms-right-side factor
1 .25883E-03 .00000E+00
2 .43802E-04 .59090E+01
The tolerance is achieved after the second GS iteration
here. The calculation terminates.
RESULTS FOR INTERIOR POINTS
there are 9 sources
i x(A) y(A) z(A) phi(VOLTS)
1 .000 1.105 .000 -.32088E+00
2 -1.091 .282 .000 .33508E+00
3 -.741 -.983 .000 .14162E+01
4 .636 -.984 .000 .67641E+00
5 1.120 .298 .000 -.24269E-01
6 2.119 .700 .000 -.40223E+00
7 -.009 2.112 .000 -.95097E+00
8 -2.102 .661 .000 -.11687E+00
9 1.197 -1.905 .000 .56070E+00
EXCESS CHEMICAL POTENTIAL (DMU) = -.55549656E+00 eV
===============================
Notice that the last change in the free energy is 0.000003
eV - impressively small. This isn't the accuracy of the solution to
the physical problem but it just says that you've achieved the
accuracy of this particular lattice.
date: Tue Jun 30 21:59:35 1998This calculation took about 6 hours and 13 minutes of the wall clock time and produced a value -0.555 eV (-12.8 kcal/mol) for the electrostatic part of the hydration free energy.
Comparison with Greg's published results: Greg reports -12.6 kcal/mol from his calculation that is not trivially identical. The present answer is slightly lowered, I prefer it for now, and in any case the results are not vastly different. I believe the uncertainty in the numerical solution here is about 0.1 kcal/mol. My experience is that this accuracy at the last digit is sensitive to the density of the lattice on the H(-N) proton here (atom #8). A calculation with the `next coarser' lattice (no plaques or fine points on this proton -- is it nearly buried! -- 93 plaques and 11792 fine points overall) produces -12.7 kcal/mol.
One source of confusion is such comparisons is associated with "charge leakage" and the fitting that produces partial charges for the classical electrostatic calculation. Of course, all classical electrostatic calculations should produce the same answer for the same defined electrostatic problem (charges and boundaries).
However, different calculations rely on the data differently. This can induce slight differences between two calculations that start from the same electronic structure results. The electronic structure results naturally have some charge outside the molecular volume. The partial charges fitted to the electrostatic potential on an exterior surface are all inside. My calculation directly treats the electrostatic potential and uses precisely the electrostatic potential on the molecular surface. Thus, if the partial charges reproduce that potential, I don't care where other charges might be and I argue that the whole procedure is correct and consistent.
However, most of the alternative calculations (Greg's too) directly treat the electric field normal to the molecular surface. Thus, if the charges are fitted to the electrostatic potential on the surface but used to calculate the normal electric field, then an error is introduced to the extent that the charges don't adequately described the electrostatic potential in a larger neighborhood of the molecular surface. This is my interpretation of the "charge leakage" problem. Not a problem for me. My more general advice to practioneers is that the partial charges should be fit to the electrostatic potential in a layer of non-zero width containing the molecular surface. A satisfactory fit would then permit accurate and consistent evaluation of both the electrostatic potential and the normal electric field on the molecular surface.
| atom types | H | C(sp3) | C(sp<3) | N(hb) | N(not) | O | F | P | S | Cl |
|---|---|---|---|---|---|---|---|---|---|---|
| radii (Å) | 1.16 | 2.46 | 2.46 | 1.5 | 2.3 | 1.5 | 1.423 | 1.97 | 1.937 |
| atom types | H(-O or -N) | H(-C) | C | N | O | SH- |
|---|---|---|---|---|---|---|
| radii (Å) | 1.16 | 1.71 | 2.46 | 1.5 | 1.5 | 1.97 |
| atom types | H | C(sp3) | C(sp<3) | N(hb) | N(not) | O | F | P | S | Cl |
|---|---|---|---|---|---|---|---|---|---|---|
| radii (Å) | 1.16 | 2.3 | 1.7 | 1.5 | 2.2 | 1.4 | 1.423 | 2.35 | 1.97 | 1.937 |
| atom types | H | C(sp3) | C(sp<3) | N(hb) | N(not) | O | F | P | S | Cl |
|---|---|---|---|---|---|---|---|---|---|---|
| radii (Å) | 1.172 | 2.096 | 1.635 | 1.738 | 2.126 | 1.576 | 1.28 | 2.279 | 2.023 | 1.75 |
Radii for many inorganic ions treated as spheres can found in A. A. Rashin and B. Honig, J. Phys. Chem.89, 5588 (1985). Example results for important molecular ions are R(OH-)=1.48 Å and R(NH4+)=2.13 Å. For peptides, you can also check-out ``Atomic radii for continuum electrostatic calculations based on molecular dynamics free energy simulations,'' M. Nina, D. Beglov, and B. Roux, J. Phys. Chem. B 101, 5239 (1997).
Send email to: Lawrence Pratt | T-12 Web Maintenance