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
|
from .vgrid import (
startVio,
Vgrid_ctor,
Vgrid_readDX,
Vgrid_value,
Vgrid_gradient,
)
import sys
from sys import stdout, stderr
"""
read.py - An example script for interfacing Python with APBS
Vgrid routines
"""
header = "\n\n\
----------------------------------------------------------------------\n\
Adaptive Poisson-Boltzmann Solver (APBS)\n\
----------------------------------------------------------------------\n\
\n\n"
usage = "python[2] read.py file.dx\n"
NMAX = 5
def main():
inpath = ""
value = 0.0
data = []
startVio()
if len(sys.argv) != 2:
stderr.write(
"\n*** Syntax error: got %d arguments, expected 2.\n\n"
% len(sys.argv)
)
stderr.write("%s\n" % usage)
sys.exit(2)
else:
inpath = sys.argv[1]
stdout.write(header)
stdout.write("main: Reading data from %s... \n" % inpath)
grid = Vgrid_ctor(0, 0, 0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, data)
Vgrid_readDX(grid, "FILE", "ASC", "", inpath)
nx = grid.nx
ny = grid.ny
nz = grid.nz
hx = grid.hx
hy = grid.hy
hzed = grid.hzed
xmin = grid.xmin
ymin = grid.ymin
zmin = grid.zmin
stdout.write("main: nx = %d, ny = %d, nz = %d\n" % (nx, ny, nz))
stdout.write("main: hx = %g, hy = %g, hz = %g\n" % (hx, hy, hzed))
stdout.write(
"main: xmin = %g, ymin = %g, zmin = %g\n" % (xmin, ymin, zmin)
)
# Read off some values
stdout.write("main: Moving along x-axis...\n")
for i in range(nx):
inval = 0.0
pt = [
xmin + i * hx,
ymin + 0.5 * (ny - 1) * hy,
zmin + 0.5 * (nz - 1) * hzed,
]
ret, value = Vgrid_value(grid, pt, inval)
if ret:
stdout.write(
"main: u(%g, %g, %g) = %g\n" % (pt[0], pt[1], pt[2], value)
)
# Integrate
stdout.write("main: Integrating...\n")
sum = 0
pt = 0
for i in range(nx):
for j in range(ny):
for k in range(nz):
inval = 0.0
pt = [xmin + i * hx, ymin + j * hy, zmin + k * hzed]
ret, value = Vgrid_value(grid, pt, inval)
if ret:
sum = sum + value
stdout.write(
"main: Integral over grid = %1.12E\n" % (sum * hx * hy * hzed)
)
grad = [0.0, 0.0, 0.0]
Vgrid_gradient(grid, pt, grad)
if __name__ == "__main__":
main()
|